pax_global_header00006660000000000000000000000064143327374570014531gustar00rootroot0000000000000052 comment=9bb0ed2040cce9be83c63e097e26e4b361a8bdd6 mermaid-js-mermaid-9bb0ed2/000077500000000000000000000000001433273745700156665ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/.ackrc000066400000000000000000000001671433273745700167560ustar00rootroot00000000000000--ignore-dir=dist --ignore-file=match:/^yarn\.lock$/ --ignore-file=match:/^yarn-error\.log$/ --ignore-dir=coverage mermaid-js-mermaid-9bb0ed2/.commitlintrc.json000066400000000000000000000000651433273745700213440ustar00rootroot00000000000000{ "extends": ["@commitlint/config-conventional"] } mermaid-js-mermaid-9bb0ed2/.editorconfig000066400000000000000000000002451433273745700203440ustar00rootroot00000000000000root = true [*] indent_style = space indent_size = 2 charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.md] indent_size = 4 mermaid-js-mermaid-9bb0ed2/.eslintignore000066400000000000000000000001241433273745700203660ustar00rootroot00000000000000dist/** .github/** docs/Setup.md cypress.config.js cypress/plugins/index.js coveragemermaid-js-mermaid-9bb0ed2/.eslintrc.json000066400000000000000000000037651433273745700204750ustar00rootroot00000000000000{ "env": { "browser": true, "es6": true, "jest/globals": true, "node": true }, "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaFeatures": { "experimentalObjectRestSpread": true, "jsx": true }, "sourceType": "module" }, "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:jsdoc/recommended", "plugin:json/recommended", "plugin:markdown/recommended", "prettier" ], "plugins": ["@typescript-eslint", "html", "jest", "jsdoc", "json"], "rules": { "no-console": "error", "no-prototype-builtins": "off", "no-unused-vars": "off", "jsdoc/check-indentation": "off", "jsdoc/check-alignment": "off", "jsdoc/check-line-alignment": "off", "jsdoc/multiline-blocks": "off", "jsdoc/newline-after-description": "off", "jsdoc/tag-lines": "off", "jsdoc/require-param-description": "off", "jsdoc/require-param-type": "off", "jsdoc/require-returns": "off", "jsdoc/require-returns-description": "off", "cypress/no-async-tests": "off", "@typescript-eslint/ban-ts-comment": [ "error", { "ts-expect-error": "allow-with-description", "ts-ignore": "allow-with-description", "ts-nocheck": "allow-with-description", "ts-check": "allow-with-description", "minimumDescriptionLength": 10 } ], "json/*": ["error", "allowComments"], "no-empty": ["error", { "allowEmptyCatch": true }] }, "overrides": [ { "files": ["cypress/**", "demos/**"], "rules": { "no-console": "off" } }, { "files": ["*.spec.{ts,js}", "cypress/**", "demos/**", "**/docs/**"], "rules": { "jsdoc/require-jsdoc": "off", "@typescript-eslint/no-unused-vars": "off" } }, { "files": ["*.html", "*.md", "**/*.md/*"], "rules": { "no-var": "error", "no-undef": "off", "@typescript-eslint/no-unused-vars": "off" } } ] } mermaid-js-mermaid-9bb0ed2/.gitattributes000066400000000000000000000000141433273745700205540ustar00rootroot00000000000000* text=auto mermaid-js-mermaid-9bb0ed2/.github/000077500000000000000000000000001433273745700172265ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/.github/FUNDING.yml000066400000000000000000000012251433273745700210430ustar00rootroot00000000000000# These are supported funding model platforms github: [knsv] #patreon: # Replace with a single Patreon username #open_collective: # Replace with a single Open Collective username #ko_fi: # Replace with a single Ko-fi username #tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel #community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry #liberapay: # Replace with a single Liberapay username #issuehunt: # Replace with a single IssueHunt username #otechie: # Replace with a single Otechie username #custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] mermaid-js-mermaid-9bb0ed2/.github/ISSUE_TEMPLATE/000077500000000000000000000000001433273745700214115ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/.github/ISSUE_TEMPLATE/bug_report.yml000066400000000000000000000042371433273745700243120ustar00rootroot00000000000000name: Bug Report description: Create a report to help us improve labels: - 'Status: Triage' - 'Type: Bug / Error' body: - type: markdown attributes: value: |- ## Security vulnerabilities Please refer our [Security Policy](https://github.com/mermaid-js/.github/blob/main/SECURITY.md) and report to keep vulnerabilities confidential so we can release fixes first. ## Before you submit... We like to help you, but in order to do that should you make a few things first: - Use a clear and concise title - Fill out the text fields with as much detail as possible. - Never be shy to give us screenshots and/or code samples. It will help! - type: textarea attributes: label: Description description: Give a clear and concise description of what the bug is. placeholder: When I do ... does ... happen. validations: required: true - type: textarea attributes: label: Steps to reproduce description: Give a step-by-step example on how to reproduce the bug. placeholder: |- 1. Do this 2. Do that 3. ... 4. Bug! validations: required: true - type: textarea attributes: label: Screenshots description: If applicable, add screenshots to help explain your issue. - type: textarea attributes: label: Code Sample description: |- If applicable, add the code sample or a link to the [Live Editor](https://mermaid.live). Any text pasted here will be rendered as a Code block. render: text - type: textarea attributes: label: Setup description: |- Please fill out the below info. Note that you only need to fill out one and not both sections. value: |- **Desktop** - OS and Version: [Windows, Linux, Mac, ...] - Browser and Version: [Chrome, Edge, Firefox] **Smartphone** - Device: [Samsung, iPhone, ...] - OS and Version: [Android, iOS, ...] - Browser and Version: [Chrome, Safari, ...] - type: textarea attributes: label: Additional Context description: Anything else to add? mermaid-js-mermaid-9bb0ed2/.github/ISSUE_TEMPLATE/config.yml000066400000000000000000000015371433273745700234070ustar00rootroot00000000000000blank_issues_enabled: false contact_links: - name: GitHub Discussions url: https://github.com/mermaid-js/mermaid/discussions about: Ask the Community questions or share your own graphs in our discussions. - name: Security Vulnerability url: https://github.com/mermaid-js/.github/blob/main/SECURITY.md about: Report security issues confidentially. - name: Slack url: https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE about: Join our Community on Slack for Help and a casual chat. - name: Documentation url: https://mermaid-js.github.io about: Read our documentation for all that Mermaid.js can offer. - name: Live Editor url: https://mermaid.live about: Try the live editor to preview graphs in no time. mermaid-js-mermaid-9bb0ed2/.github/ISSUE_TEMPLATE/diagram_proposal.yml000066400000000000000000000027671433273745700254730ustar00rootroot00000000000000name: Diagram Proposal description: Suggest a new Diagram Type to add to Mermaid. labels: - 'Status: Triage' - 'Type: Enhancement' body: - type: markdown attributes: value: |- ## Before you submit... First of all, thank you for proposing a new Diagram to us. We are always happy about new ideas to improve Mermaid.js wherever possible. To get the fastest and best response possible, make sure you do the following: - Use a clear and concise title - Fill out the text fields with as much detail as possible. - Never be shy to give us screenshots and/or code samples. It will help! - type: textarea attributes: label: Proposal description: A clear and concise description of what should be added to Mermaid.js. placeholder: Mermaid.js should add ... because ... validations: required: true - type: textarea attributes: label: Use Cases description: If applicable, give some use cases for where this diagram would be useful. placeholder: The Diagram could be used for ... - type: textarea attributes: label: Screenshots description: If applicable, add screenshots to show possible examples of how the diagram may look like. - type: textarea attributes: label: Code Sample description: |- If applicable, add a code sample for how to implement this new diagram. The text will automatically be rendered as JavaScript code. render: javascript mermaid-js-mermaid-9bb0ed2/.github/ISSUE_TEMPLATE/syntax_proposal.yml000066400000000000000000000023101433273745700253750ustar00rootroot00000000000000name: Syntax Proposal description: Suggest a new Syntax to add to Mermaid.js. labels: - 'Status: Triage' - 'Type: Enhancement' body: - type: markdown attributes: value: |- ## Before you submit... First of all, thank you for proposing a new Syntax to us. We are always happy about new ideas to improve Mermaid.js wherever possible. To get the fastest and best response possible, make sure you do the following: - Use a clear and concise title - Fill out the text fields with as much detail as possible. Examples are always welcome. - Never be shy to give us screenshots and/or code samples. It will help! - type: textarea attributes: label: Proposal description: A clear and concise description of what Syntax should be added to Mermaid.js. placeholder: Mermaid.js should add ... because ... validations: required: true - type: textarea attributes: label: Example description: If applicable, provide an example of the new Syntax. - type: textarea attributes: label: Screenshots description: If applicable, add screenshots to show possible examples of how the theme may look like. mermaid-js-mermaid-9bb0ed2/.github/ISSUE_TEMPLATE/theme_proposal.yml000066400000000000000000000027571433273745700251700ustar00rootroot00000000000000name: Theme Proposal description: Suggest a new theme to add to Mermaid.js. labels: - 'Status: Triage' - 'Type: Enhancement' body: - type: markdown attributes: value: |- ## Before you submit... First of all, thank you for proposing a new Theme to us. We are always happy about new ideas to improve Mermaid.js wherever possible. To get the fastest and best response possible, make sure you do the following: - Use a clear and concise title - Fill out the text fields with as much detail as possible. Examples are always welcome! - Never be shy to give us screenshots and/or code samples. It will help! - type: textarea attributes: label: Proposal description: A clear and concise description of what theme should be added to Mermaid.js. placeholder: Mermaid.js should add ... because ... validations: required: true - type: textarea attributes: label: Colors description: |- A detailed list of the different colour values to use. A list of currently used variable names can be found [here](https://mermaid-js.github.io/mermaid/#/theming?id=theme-variables-reference-table) placeholder: |- - background: #f4f4f4 - primaryColor: #fff4dd - ... validations: required: true - type: textarea attributes: label: Screenshots description: If applicable, add screenshots to show possible examples of how the theme may look like. mermaid-js-mermaid-9bb0ed2/.github/codeql/000077500000000000000000000000001433273745700204755ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/.github/codeql/codeql-config.yml000066400000000000000000000000711433273745700237300ustar00rootroot00000000000000name: 'CodeQL config' paths-ignore: - dist - cypress mermaid-js-mermaid-9bb0ed2/.github/dependabot.yml000066400000000000000000000006061433273745700220600ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: npm open-pull-requests-limit: 10 directory: / target-branch: develop versioning-strategy: increase schedule: interval: weekly day: monday time: '07:00' - package-ecosystem: github-actions directory: / target-branch: develop schedule: interval: weekly day: monday time: '07:00' mermaid-js-mermaid-9bb0ed2/.github/pr-labeler.yml000066400000000000000000000001271433273745700217760ustar00rootroot00000000000000'Type: Bug / Error': 'bug/*' 'Type: Enhancement': 'feature/*' 'Type: Other': 'other/*' mermaid-js-mermaid-9bb0ed2/.github/pull_request_template.md000066400000000000000000000010071433273745700241650ustar00rootroot00000000000000## :bookmark_tabs: Summary Brief description about the content of your PR. Resolves # ## :straight_ruler: Design Decisions Describe the way your implementation works or what design decisions you made if applicable. ### :clipboard: Tasks Make sure you - [ ] :book: have read the [contribution guidelines](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) - [ ] :computer: have added unit/e2e tests (if appropriate) - [ ] :bookmark: targeted `develop` branch mermaid-js-mermaid-9bb0ed2/.github/release-drafter.yml000066400000000000000000000011721433273745700230170ustar00rootroot00000000000000name-template: '$NEXT_PATCH_VERSION' tag-template: '$NEXT_PATCH_VERSION' categories: - title: '🚀 Features' labels: - 'Type: Enhancement' - title: '🐛 Bug Fixes' labels: - 'Type: Bug / Error' - title: '🧰 Maintenance' label: 'Type: Other' change-template: '- $TITLE (#$NUMBER) @$AUTHOR' sort-by: title sort-direction: ascending branches: - develop exclude-labels: - 'Skip changelog' no-changes-template: 'This release contains minor changes and bugfixes.' template: | # Release Notes $CHANGES 🎉 **Thanks to all contributors helping with this release!** 🎉 mermaid-js-mermaid-9bb0ed2/.github/stale.yml000066400000000000000000000017031433273745700210620ustar00rootroot00000000000000# Number of days of inactivity before an issue becomes stale daysUntilStale: 60 # Number of days of inactivity before a stale issue is closed daysUntilClose: 14 # Issues with these labels will never be considered stale exemptLabels: - Retained # Label to use when marking an issue as stale staleLabel: Inactive # 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. If you are still interested in this issue and it is still relevant you can comment to revive it. # Comment to post when closing a stale issue. Set to `false` to disable closeComment: > This issue has been been automatically closed due to a lack of activity. This is done to maintain a clean list of issues that the community is interested in developing. mermaid-js-mermaid-9bb0ed2/.github/workflows/000077500000000000000000000000001433273745700212635ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/.github/workflows/build.yml000066400000000000000000000021641433273745700231100ustar00rootroot00000000000000name: Build on: push: {} pull_request: types: - opened - synchronize - ready_for_review permissions: contents: read jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [18.x] steps: - uses: actions/checkout@v3 - uses: pnpm/action-setup@v2 # uses version from "packageManager" field in package.json - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: cache: pnpm node-version: ${{ matrix.node-version }} - name: Install Packages run: | pnpm install --frozen-lockfile env: CYPRESS_CACHE_FOLDER: .cache/Cypress - name: Run Build run: pnpm run build - name: Upload Mermaid Build as Artifact uses: actions/upload-artifact@v3 with: name: mermaid-build path: packages/mermaid/dist - name: Upload Mermaid Mindmap Build as Artifact uses: actions/upload-artifact@v3 with: name: mermaid-mindmap-build path: packages/mermaid-mindmap/dist mermaid-js-mermaid-9bb0ed2/.github/workflows/check-readme-in-sync.yml000066400000000000000000000015411433273745700256750ustar00rootroot00000000000000# Reference: https://github.com/Yash-Singh1/eslint-plugin-userscripts/blob/main/.github/workflows/readme-in-sync.yml name: Check if README and docs/README are in sync on: push: branches: - gh-pages pull_request: branches: - gh-pages permissions: contents: read jobs: check: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Check for difference in README.md and docs/README.md run: | if [ -z "$(diff README.md docs/README.md --brief)" ] then echo "README.md and docs/README.md are in sync" else echo "Make sure that README.md and docs/README.md are in sync" echo echo "Difference:" echo diff README.md docs/README.md -u exit 1 fi mermaid-js-mermaid-9bb0ed2/.github/workflows/checks.yml000066400000000000000000000010551433273745700232470ustar00rootroot00000000000000on: push: {} pull_request: types: - opened - synchronize - ready_for_review name: Static analysis jobs: test: runs-on: ubuntu-latest name: check tests if: github.repository_owner == 'mermaid-js' steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - uses: testomatio/check-tests@stable with: framework: cypress tests: './cypress/e2e/**/**.spec.js' token: ${{ secrets.GITHUB_TOKEN }} has-tests-label: true mermaid-js-mermaid-9bb0ed2/.github/workflows/codeql.yml000066400000000000000000000041061433273745700232560ustar00rootroot00000000000000name: 'CodeQL' on: push: branches: [develop] pull_request: # The branches below must be a subset of the branches above branches: [develop] types: - opened - synchronize - ready_for_review jobs: analyze: name: Analyze runs-on: ubuntu-latest permissions: actions: read contents: read security-events: write strategy: fail-fast: false matrix: language: ['javascript'] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: config-file: ./.github/codeql/codeql-config.yml languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language #- run: | # make bootstrap # make release - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 mermaid-js-mermaid-9bb0ed2/.github/workflows/dependency-review.yml000066400000000000000000000015641433273745700254310ustar00rootroot00000000000000# Dependency Review Action # # This Action will scan dependency manifest files that change as part of a Pull Reqest, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging. # # Source repository: https://github.com/actions/dependency-review-action # Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement name: 'Dependency Review' on: [pull_request] permissions: contents: read jobs: dependency-review: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' uses: actions/checkout@v3 - name: 'Dependency Review' uses: actions/dependency-review-action@v2 mermaid-js-mermaid-9bb0ed2/.github/workflows/docs.yml000066400000000000000000000012241433273745700227350ustar00rootroot00000000000000name: Documentation Checks on: push: branches: - develop paths: - 'packages/mermaid/src/docs/**/*' pull_request: branches: - develop paths: - 'packages/mermaid/src/docs/**/*' jobs: spellcheck: name: 'Docs: Spellcheck' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 name: Check out the code - uses: actions/setup-node@v1 name: Setup node with: node-version: '16' - run: npm install -g cspell name: Install cSpell - run: cspell --config ./cSpell.json "packages/mermaid/src/docs/**/*.md" --no-progress name: Run cSpell mermaid-js-mermaid-9bb0ed2/.github/workflows/e2e-applitools.yml000066400000000000000000000051031433273745700246440ustar00rootroot00000000000000name: E2E (Applitools) on: workflow_dispatch: # Because we want to limit Applitools usage, so we only want to start this # workflow on rare occasions/manually. inputs: parent_branch: required: true type: string default: master description: 'Parent branch to use for PRs' permissions: contents: read env: # on PRs from forks, this secret will always be empty, for security reasons USE_APPLI: ${{ secrets.APPLITOOLS_API_KEY && 'true' || '' }} jobs: test: runs-on: ubuntu-latest strategy: matrix: node-version: [18.x] steps: - if: ${{ ! env.USE_APPLI }} name: Warn if not using Applitools run: | echo "::error,title=Not using Applitols::APPLITOOLS_API_KEY is empty, disabling Applitools for this run." - uses: actions/checkout@v3 - uses: pnpm/action-setup@v2 # uses version from "packageManager" field in package.json - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: cache: pnpm node-version: ${{ matrix.node-version }} - name: Install Packages run: | pnpm install --frozen-lockfile env: CYPRESS_CACHE_FOLDER: .cache/Cypress - if: ${{ env.USE_APPLI }} name: Notify applitools of new batch # Copied from docs https://applitools.com/docs/topics/integrations/github-integration-ci-setup.html run: curl -L -d '' -X POST "$APPLITOOLS_SERVER_URL/api/externals/github/push?apiKey=$APPLITOOLS_API_KEY&CommitSha=$GITHUB_SHA&BranchName=${APPLITOOLS_BRANCH}$&ParentBranchName=$APPLITOOLS_PARENT_BRANCH" env: # e.g. mermaid-js/mermaid/my-branch APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }} APPLITOOLS_PARENT_BRANCH: ${{ github.inputs.parent_branch }} APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }} APPLITOOLS_SERVER_URL: 'https://eyesapi.applitools.com' - name: Run E2E Tests run: pnpm run e2e env: CYPRESS_CACHE_FOLDER: .cache/Cypress # Mermaid applitools.config.js uses this to pick batch name. APPLI_BRANCH: ${{ github.ref_name }} APPLITOOLS_BATCH_ID: ${{ github.sha }} # e.g. mermaid-js/mermaid/my-branch APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }} APPLITOOLS_PARENT_BRANCH: ${{ github.inputs.parent_branch }} APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }} APPLITOOLS_SERVER_URL: 'https://eyesapi.applitools.com' mermaid-js-mermaid-9bb0ed2/.github/workflows/e2e.yml000066400000000000000000000030141433273745700224570ustar00rootroot00000000000000name: E2E on: [push, pull_request] permissions: contents: read jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: node-version: [18.x] containers: [1, 2, 3, 4] steps: - uses: actions/checkout@v3 - uses: pnpm/action-setup@v2 # uses version from "packageManager" field in package.json - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 # Need to skip setup if Cypress run is skipped, otherwise an error # is thrown since the pnpm cache step fails if: ${{ ( env.CYPRESS_RECORD_KEY != '' ) || ( matrix.containers == 1 ) }} with: cache: pnpm node-version: ${{ matrix.node-version }} # Install NPM dependencies, cache them correctly # and run all Cypress tests - name: Cypress run uses: cypress-io/github-action@v4 # If CYPRESS_RECORD_KEY is set, run in parallel on all containers # Otherwise (e.g. if running from fork), we run on a single container only if: ${{ ( env.CYPRESS_RECORD_KEY != '' ) || ( matrix.containers == 1 ) }} with: start: pnpm run dev wait-on: 'http://localhost:9000' # Disable recording if we don't have an API key # e.g. if this action was run from a fork record: ${{ secrets.CYPRESS_RECORD_KEY != '' }} parallel: ${{ secrets.CYPRESS_RECORD_KEY != '' }} env: CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} mermaid-js-mermaid-9bb0ed2/.github/workflows/issue-triage.yml000066400000000000000000000004171433273745700244110ustar00rootroot00000000000000name: Apply triage label to new issue on: issues: types: [opened] jobs: triage: runs-on: ubuntu-latest steps: - uses: andymckay/labeler@1.0.4 with: repo-token: '${{ secrets.GITHUB_TOKEN }}' add-labels: 'Status: Triage' mermaid-js-mermaid-9bb0ed2/.github/workflows/lint.yml000066400000000000000000000015021433273745700227520ustar00rootroot00000000000000name: Lint on: push: {} pull_request: types: - opened - synchronize - ready_for_review permissions: contents: read jobs: lint: runs-on: ubuntu-latest strategy: matrix: node-version: [18.x] steps: - uses: actions/checkout@v3 - uses: pnpm/action-setup@v2 # uses version from "packageManager" field in package.json - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: cache: pnpm node-version: ${{ matrix.node-version }} - name: Install Packages run: | pnpm install --frozen-lockfile env: CYPRESS_CACHE_FOLDER: .cache/Cypress - name: Run Linting run: pnpm run lint - name: Verify Docs run: pnpm run docs:verify mermaid-js-mermaid-9bb0ed2/.github/workflows/pr-labeler-config-validator.yml000066400000000000000000000006731433273745700272670ustar00rootroot00000000000000name: Validate PR Labeler Configuration on: push: {} pull_request: types: - opened - synchronize - ready_for_review jobs: pr-labeler: runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@v3 - name: Validate Configuration uses: Yash-Singh1/pr-labeler-config-validator@releases/v0.0.3 with: configuration-path: .github/pr-labeler.yml mermaid-js-mermaid-9bb0ed2/.github/workflows/pr-labeler.yml000066400000000000000000000004061433273745700240330ustar00rootroot00000000000000name: Apply labels to PR on: pull_request_target: types: [opened] jobs: pr-labeler: runs-on: ubuntu-latest steps: - name: Label PR uses: TimonVS/pr-labeler-action@v3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} mermaid-js-mermaid-9bb0ed2/.github/workflows/release-draft.yml000066400000000000000000000004061433273745700245240ustar00rootroot00000000000000name: Draft Release on: push: branches: - develop jobs: draft-release: runs-on: ubuntu-latest steps: - name: Draft Release uses: toolmantim/release-drafter@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} mermaid-js-mermaid-9bb0ed2/.github/workflows/release-preview-publish.yml000066400000000000000000000022421433273745700265510ustar00rootroot00000000000000name: Publish release preview package on: push: branches: - 'release/**' jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 18.x - name: Install Yarn run: npm i yarn --global - name: Install Json run: npm i json --global - name: Install Packages run: yarn install --frozen-lockfile - name: Publish run: | PREVIEW_VERSION=8 VERSION=$(echo ${{github.ref}} | tail -c +20)-preview.$PREVIEW_VERSION echo $VERSION npm version --no-git-tag-version --allow-same-version $VERSION npm set //npm.pkg.github.com/:_authToken ${{ secrets.GITHUB_TOKEN }} npm set registry https://npm.pkg.github.com/mermaid-js json -I -f package.json -e 'this.name="@mermaid-js/mermaid"' # Package name needs to be set to a scoped one because GitHub registry requires this json -I -f package.json -e 'this.repository="git://github.com/mermaid-js/mermaid"' # Repo url needs to have a specific format too npm publish mermaid-js-mermaid-9bb0ed2/.github/workflows/release-publish.yml000066400000000000000000000021671433273745700251000ustar00rootroot00000000000000name: Publish release on: release: types: [published] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: fregante/setup-git-user@v1 - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 18.x - name: Install Yarn run: npm i yarn --global - name: Install Json run: npm i json --global - name: Install Packages run: yarn install --frozen-lockfile - name: Prepare release run: | VERSION=${GITHUB_REF:10} echo "Preparing release $VERSION" git checkout -t origin/release/$VERSION npm version --no-git-tag-version --allow-same-version $VERSION git add package.json git commit -m "Bump version $VERSION" git checkout -t origin/master git merge -m "Release $VERSION" --no-ff release/$VERSION git push --no-verify - name: Publish run: | npm set //registry.npmjs.org/:_authToken $NPM_TOKEN npm publish env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} mermaid-js-mermaid-9bb0ed2/.github/workflows/test.yml000066400000000000000000000021401433273745700227620ustar00rootroot00000000000000name: Unit Tests on: [push, pull_request] permissions: contents: read jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [18.x] steps: - uses: actions/checkout@v3 - uses: pnpm/action-setup@v2 # uses version from "packageManager" field in package.json - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: cache: pnpm node-version: ${{ matrix.node-version }} - name: Install Packages run: | pnpm install --frozen-lockfile env: CYPRESS_CACHE_FOLDER: .cache/Cypress - name: Run Unit Tests run: | pnpm run ci --coverage - name: Upload Coverage to Coveralls # it feels a bit weird to use @master, but that's what the docs use # (coveralls also doesn't publish a @v1 we can use) # https://github.com/marketplace/actions/coveralls-github-action uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} flag-name: unit mermaid-js-mermaid-9bb0ed2/.github/workflows/unlock-reopened-issues.yml000066400000000000000000000003651433273745700264150ustar00rootroot00000000000000name: Unlock reopened issue on: issues: types: [reopened] jobs: triage: runs-on: ubuntu-latest steps: - uses: Dunning-Kruger/unlock-issues@v1 with: repo-token: '${{ secrets.GITHUB_TOKEN }}' mermaid-js-mermaid-9bb0ed2/.github/workflows/update-browserlist.yml000066400000000000000000000007231433273745700256470ustar00rootroot00000000000000name: Update Browserslist on: schedule: - cron: '0 7 * * 1' workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: npx browserslist@latest --update-db - name: Commit changes uses: EndBug/add-and-commit@v9 with: author_name: ${{ github.actor }} author_email: ${{ github.actor }}@users.noreply.github.com message: 'chore: update browsers list' mermaid-js-mermaid-9bb0ed2/.gitignore000066400000000000000000000007151433273745700176610ustar00rootroot00000000000000.DS_Store node_modules/ coverage/ .idea/ dist yarn-error.log .npmrc token package-lock.json # ignore files in /.vscode/ except for launch.json and extensions.json /.vscode/** !/.vscode/launch.json !/.vscode/extensions.json cypress/platform/current.html cypress/platform/experimental.html local/ _site Gemfile.lock /.vs cypress/screenshots/ cypress/snapshots/ # eslint --cache file .eslintcache .tsbuildinfo tsconfig.tsbuildinfo knsv*.html local*.html mermaid-js-mermaid-9bb0ed2/.husky/000077500000000000000000000000001433273745700171075ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/.husky/commit-msg000077500000000000000000000001241433273745700211060ustar00rootroot00000000000000#!/bin/sh # . "$(dirname "$0")/_/husky.sh" # npx --no-install commitlint --edit $1 mermaid-js-mermaid-9bb0ed2/.husky/pre-commit000077500000000000000000000000761433273745700211140ustar00rootroot00000000000000#!/bin/sh . "$(dirname "$0")/_/husky.sh" pnpm run pre-commit mermaid-js-mermaid-9bb0ed2/.lintstagedrc.json000066400000000000000000000003621433273745700213230ustar00rootroot00000000000000{ "packages/mermaid/src/docs/**": ["pnpm run docs:build --git"], "packages/mermaid/src/docs.mts": ["pnpm run docs:build --git"], "*.{ts,js,json,html,md,mts}": ["eslint --fix", "prettier --write"], "*.jison": ["pnpm run lint:jison"] } mermaid-js-mermaid-9bb0ed2/.npmrc000066400000000000000000000000661433273745700170100ustar00rootroot00000000000000auto-install-peers=true strict-peer-dependencies=falsemermaid-js-mermaid-9bb0ed2/.percy.yml000066400000000000000000000001131433273745700176040ustar00rootroot00000000000000version: 2 snapshot: widths: - 1280 discovery: disable-cache: true mermaid-js-mermaid-9bb0ed2/.prettierignore000066400000000000000000000001261433273745700207300ustar00rootroot00000000000000dist cypress/platform/xss3.html .cache coverage # Autogenerated by PNPM pnpm-lock.yamlmermaid-js-mermaid-9bb0ed2/.prettierrc.json000066400000000000000000000001531433273745700210210ustar00rootroot00000000000000{ "endOfLine": "auto", "printWidth": 100, "singleQuote": true, "useTabs": false, "tabWidth": 2 } mermaid-js-mermaid-9bb0ed2/.tern-project000066400000000000000000000004121433273745700203000ustar00rootroot00000000000000{ "ecmaVersion": 6, "libs": ["browser"], "loadEagerly": [], "dontLoad": ["node_modules/**"], "plugins": { "modules": {}, "es_modules": {}, "node": {}, "doc_comment": { "fullDocs": true, "strong": true } } } mermaid-js-mermaid-9bb0ed2/.vite/000077500000000000000000000000001433273745700167135ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/.vite/build.ts000066400000000000000000000073301433273745700203650ustar00rootroot00000000000000import { build, InlineConfig } from 'vite'; import { resolve } from 'path'; import { fileURLToPath } from 'url'; import jisonPlugin from './jisonPlugin.js'; import pkg from '../package.json' assert { type: 'json' }; const { dependencies } = pkg; const watch = process.argv.includes('--watch'); const mermaidOnly = process.argv.includes('--mermaid'); const __dirname = fileURLToPath(new URL('.', import.meta.url)); type OutputOptions = Exclude< Exclude['rollupOptions'], undefined >['output']; const packageOptions = { mermaid: { name: 'mermaid', packageName: 'mermaid', file: 'mermaid.ts', }, 'mermaid-mindmap': { name: 'mermaid-mindmap', packageName: 'mermaid-mindmap', file: 'detector.ts', }, // 'mermaid-example-diagram-detector': { // name: 'mermaid-example-diagram-detector', // packageName: 'mermaid-example-diagram', // file: 'detector.ts', // }, }; interface BuildOptions { minify: boolean | 'esbuild'; core?: boolean; watch?: boolean; entryName: keyof typeof packageOptions; } export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions): InlineConfig => { const external = ['require', 'fs', 'path']; console.log(entryName, packageOptions[entryName]); const { name, file, packageName } = packageOptions[entryName]; let output: OutputOptions = [ { name, format: 'esm', sourcemap: true, entryFileNames: `${name}.esm${minify ? '.min' : ''}.mjs`, }, { name, format: 'umd', sourcemap: true, entryFileNames: `${name}${minify ? '.min' : ''}.js`, }, ]; if (core) { // Core build is used to generate file without bundled dependencies. // This is used by downstream projects to bundle dependencies themselves. external.push(...Object.keys(dependencies)); // This needs to be an array. Otherwise vite will build esm & umd with same name and overwrite esm with umd. output = [ { name, format: 'esm', sourcemap: true, entryFileNames: `${name}.core.mjs`, }, ]; } const config: InlineConfig = { configFile: false, build: { emptyOutDir: false, outDir: resolve(__dirname, `../packages/${packageName}/dist`), lib: { entry: resolve(__dirname, `../packages/${packageName}/src/${file}`), name, // the proper extensions will be added fileName: name, }, minify, rollupOptions: { external, output, }, }, resolve: { extensions: ['.jison', '.js', '.ts', '.json'], }, plugins: [jisonPlugin()], }; if (watch && config.build) { config.build.watch = { include: [ 'packages/mermaid-mindmap/src/**', 'packages/mermaid/src/**', // 'packages/mermaid-example-diagram/src/**', ], }; } return config; }; const buildPackage = async (entryName: keyof typeof packageOptions) => { return Promise.allSettled([ build(getBuildConfig({ minify: false, entryName })), build(getBuildConfig({ minify: 'esbuild', entryName })), build(getBuildConfig({ minify: false, core: true, entryName })), ]); }; const main = async () => { const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[]; for (const pkg of packageNames) { if (mermaidOnly && pkg !== 'mermaid') { continue; } await buildPackage(pkg); } }; if (watch) { build(getBuildConfig({ minify: false, watch, core: true, entryName: 'mermaid' })); if (!mermaidOnly) { build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-mindmap' })); // build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' })); } } else { void main(); } mermaid-js-mermaid-9bb0ed2/.vite/jisonPlugin.ts000066400000000000000000000005621433273745700215670ustar00rootroot00000000000000import { transformJison } from './jisonTransformer.js'; const fileRegex = /\.(jison)$/; export default function jison() { return { name: 'jison', transform(src: string, id: string) { if (fileRegex.test(id)) { return { code: transformJison(src), map: null, // provide source map if available }; } }, }; } mermaid-js-mermaid-9bb0ed2/.vite/jisonTransformer.ts000066400000000000000000000006771433273745700226420ustar00rootroot00000000000000// @ts-ignore No typings for jison import jison from 'jison'; export const transformJison = (src: string): string => { // @ts-ignore No typings for jison const parser = new jison.Generator(src, { moduleType: 'js', 'token-stack': true, }); const source = parser.generate({ moduleMain: '() => {}' }); const exporter = ` parser.parser = parser; export { parser }; export default parser; `; return `${source} ${exporter}`; }; mermaid-js-mermaid-9bb0ed2/.vite/server.ts000066400000000000000000000023031433273745700205670ustar00rootroot00000000000000import express, { NextFunction, Request, Response } from 'express'; import { createServer as createViteServer } from 'vite'; // import { getBuildConfig } from './build'; const cors = (req: Request, res: Response, next: NextFunction) => { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); res.header('Access-Control-Allow-Headers', 'Content-Type'); next(); }; async function createServer() { const app = express(); // Create Vite server in middleware mode const vite = await createViteServer({ configFile: './vite.config.ts', server: { middlewareMode: true }, appType: 'custom', // don't include Vite's default HTML handling middlewares }); app.use(cors); app.use(express.static('./packages/mermaid/dist')); app.use(express.static('./packages/mermaid-example-diagram/dist')); app.use(express.static('./packages/mermaid-mindmap/dist')); app.use(vite.middlewares); app.use(express.static('demos')); app.use(express.static('cypress/platform')); app.listen(9000, () => { console.log(`Listening on http://localhost:9000`); }); } // build(getBuildConfig({ minify: false, watch: true })); createServer(); mermaid-js-mermaid-9bb0ed2/.vite/tsconfig.json000066400000000000000000000001271433273745700214220ustar00rootroot00000000000000{ "extends": "../tsconfig.json", "compilerOptions": { "module": "ES2022" } } mermaid-js-mermaid-9bb0ed2/.vscode/000077500000000000000000000000001433273745700172275ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/.vscode/extensions.json000066400000000000000000000002231433273745700223160ustar00rootroot00000000000000{ "recommendations": [ "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "zixuanchen.vitest-explorer", "luniclynx.bison" ] } mermaid-js-mermaid-9bb0ed2/.vscode/launch.json000066400000000000000000000010021433273745700213650ustar00rootroot00000000000000{ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Debug Current Test File", "autoAttachChildProcesses": true, "skipFiles": ["/**", "**/node_modules/**"], "program": "${workspaceRoot}/node_modules/vitest/vitest.mjs", "args": ["run", "${relativeFile}"], "smartStep": true, "console": "integratedTerminal" } ] } mermaid-js-mermaid-9bb0ed2/CHANGELOG.md000066400000000000000000002107661433273745700175130ustar00rootroot00000000000000# Change Log // TODO: Populate changelog - Config has a lot of changes - globalReset resets to `defaultConfig` instead of current config. Use `reset` instead. ## [Unreleased](https://github.com/knsv/mermaid/tree/HEAD) [Full Changelog](https://github.com/knsv/mermaid/compare/8.2.0...HEAD) **Closed issues:** - Cross-Site Scripting:DOM - Issue [\#847](https://github.com/knsv/mermaid/issues/847) ## [8.2.0](https://github.com/knsv/mermaid/tree/8.2.0) (2019-07-17) [Full Changelog](https://github.com/knsv/mermaid/compare/8.1.0...8.2.0) **Closed issues:** - Create issue templates [\#871](https://github.com/knsv/mermaid/issues/871) - cross site scripting in mermaid [\#869](https://github.com/knsv/mermaid/issues/869) - Make Gantt chart date inclusive [\#868](https://github.com/knsv/mermaid/issues/868) - CHANGELOG missing updates for all versions since 0.4.0 [\#865](https://github.com/knsv/mermaid/issues/865) - please add tag for 8.0.0 release [\#863](https://github.com/knsv/mermaid/issues/863) - classDiagram breaks on any edit [\#858](https://github.com/knsv/mermaid/issues/858) - found 1 high severity vulnerability [\#839](https://github.com/knsv/mermaid/issues/839) - Missing fontawesome icon support [\#830](https://github.com/knsv/mermaid/issues/830) - Docs for integration with wiki.js? [\#829](https://github.com/knsv/mermaid/issues/829) - Is this project still maintained? [\#826](https://github.com/knsv/mermaid/issues/826) - typora [\#823](https://github.com/knsv/mermaid/issues/823) - Maintain the order of the nodes in Flowchart [\#815](https://github.com/knsv/mermaid/issues/815) - Overlap, Overflow and cut titles in flowchart [\#814](https://github.com/knsv/mermaid/issues/814) - How load mermaidApi notejs electron [\#813](https://github.com/knsv/mermaid/issues/813) - How to set the spacing between the text of the flowchart node and the border? [\#812](https://github.com/knsv/mermaid/issues/812) - no triming participant name and the name following spaces is as another actor in sequence [\#809](https://github.com/knsv/mermaid/issues/809) - uml Class as shape type [\#807](https://github.com/knsv/mermaid/issues/807) - Force-directed graph Layout Style [\#806](https://github.com/knsv/mermaid/issues/806) - how can I start a newLine in FlowChart [\#805](https://github.com/knsv/mermaid/issues/805) - UOEProcessShow [\#801](https://github.com/knsv/mermaid/issues/801) - Why the use of code blocks? [\#799](https://github.com/knsv/mermaid/issues/799) - fixing class diagram [\#794](https://github.com/knsv/mermaid/issues/794) - Autonumber support in sequence diagrams [\#782](https://github.com/knsv/mermaid/issues/782) - MomentJS dependency [\#781](https://github.com/knsv/mermaid/issues/781) - Feature : Can we color code the flow/arrows [\#766](https://github.com/knsv/mermaid/issues/766) - Is there any way to convert flowchart.js code to mermaid code [\#726](https://github.com/knsv/mermaid/issues/726) - Fixed width of nodes [\#653](https://github.com/knsv/mermaid/issues/653) - Inline comment [\#650](https://github.com/knsv/mermaid/issues/650) - alt attribute of img tag in HTML [\#619](https://github.com/knsv/mermaid/issues/619) - Just wanted to say : THANKS ! [\#618](https://github.com/knsv/mermaid/issues/618) - "animation" [\#446](https://github.com/knsv/mermaid/issues/446) **Merged pull requests:** - Trimming whitespace after participant id [\#882](https://github.com/knsv/mermaid/pull/882) ([IOrlandoni](https://github.com/IOrlandoni)) - chore\(deps\): bump atob from 2.0.3 to 2.1.2 [\#881](https://github.com/knsv/mermaid/pull/881) ([dependabot[bot]](https://github.com/apps/dependabot)) - chore\(deps\): bump fstream from 1.0.11 to 1.0.12 [\#880](https://github.com/knsv/mermaid/pull/880) ([dependabot[bot]](https://github.com/apps/dependabot)) - chore\(deps\): bump js-yaml from 3.12.0 to 3.13.1 [\#879](https://github.com/knsv/mermaid/pull/879) ([dependabot[bot]](https://github.com/apps/dependabot)) - I847 cross site scripting [\#878](https://github.com/knsv/mermaid/pull/878) ([knsv](https://github.com/knsv)) - Bump lodash.mergewith from 4.6.1 to 4.6.2 [\#877](https://github.com/knsv/mermaid/pull/877) ([dependabot[bot]](https://github.com/apps/dependabot)) - Adding docs into core repo again [\#876](https://github.com/knsv/mermaid/pull/876) ([knsv](https://github.com/knsv)) - Bump lodash from 4.17.11 to 4.17.13 [\#875](https://github.com/knsv/mermaid/pull/875) ([dependabot[bot]](https://github.com/apps/dependabot)) - feat\(stale.yml\): update issue label and bot comment [\#874](https://github.com/knsv/mermaid/pull/874) ([ThePenguin1140](https://github.com/ThePenguin1140)) - Feature/allow inclusive enddates [\#872](https://github.com/knsv/mermaid/pull/872) ([ThePenguin1140](https://github.com/ThePenguin1140)) - Adding trapezoid and inverse trapezoid vertex options. [\#741](https://github.com/knsv/mermaid/pull/741) ([adamwulf](https://github.com/adamwulf)) ## [8.1.0](https://github.com/knsv/mermaid/tree/8.1.0) (2019-06-25) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.5...8.1.0) **Closed issues:** - Gantt and sequence diagram do not render [\#853](https://github.com/knsv/mermaid/issues/853) - margins around flowchart are not balanced [\#852](https://github.com/knsv/mermaid/issues/852) - Smaller bundles [\#843](https://github.com/knsv/mermaid/issues/843) - unicode in labels [\#776](https://github.com/knsv/mermaid/issues/776) - Hard-changing drawing of arrows per edge type [\#775](https://github.com/knsv/mermaid/issues/775) - SequenceDiagram wrong [\#773](https://github.com/knsv/mermaid/issues/773) - Render mermaid on github pages with simple code [\#772](https://github.com/knsv/mermaid/issues/772) - FlowChart - large space between text and the image [\#754](https://github.com/knsv/mermaid/issues/754) - Class Diagram Issues when using Mermaid in Stackedit [\#748](https://github.com/knsv/mermaid/issues/748) - Multi-platform CI [\#744](https://github.com/knsv/mermaid/issues/744) - gantt: sections can't have a colon [\#742](https://github.com/knsv/mermaid/issues/742) - Yarn build does not add mermaid.min.css to dist [\#732](https://github.com/knsv/mermaid/issues/732) - Is there a grammar / keyword / more than just the basic examples? [\#718](https://github.com/knsv/mermaid/issues/718) - Click event and react component [\#717](https://github.com/knsv/mermaid/issues/717) - Long text going outside the box [\#706](https://github.com/knsv/mermaid/issues/706) - How to migrate from yUML to mermaid? [\#704](https://github.com/knsv/mermaid/issues/704) - Issue on Dynamic Creation in PHP [\#690](https://github.com/knsv/mermaid/issues/690) - `click "\#target"` and `click "http://url"` should create regular links [\#689](https://github.com/knsv/mermaid/issues/689) - Support Chinese punctuation [\#687](https://github.com/knsv/mermaid/issues/687) - \[Question\] Proper way to install on Mac? [\#681](https://github.com/knsv/mermaid/issues/681) - Has Mermaid a graphical interface to make diagrams? [\#668](https://github.com/knsv/mermaid/issues/668) - mermaid installation on debian [\#649](https://github.com/knsv/mermaid/issues/649) - "Cannot activate" in sequenceDiagram [\#647](https://github.com/knsv/mermaid/issues/647) - Link \("click" statement\) in flowchart does not work in exported SVG [\#646](https://github.com/knsv/mermaid/issues/646) - How to pass styling [\#639](https://github.com/knsv/mermaid/issues/639) - The live editor cant show seq diagram with notes for 8.0.0-alpha.3 [\#638](https://github.com/knsv/mermaid/issues/638) - import mermaid.css with ES6 + NPM [\#634](https://github.com/knsv/mermaid/issues/634) - Actor line cuts through other elements [\#633](https://github.com/knsv/mermaid/issues/633) - Graph TD line out of the picture \(left side\) [\#630](https://github.com/knsv/mermaid/issues/630) - Flowchart labels appear "cutoff" [\#628](https://github.com/knsv/mermaid/issues/628) - Uncaught TypeError: \_.constant is not a function \(mermaid.js\) [\#626](https://github.com/knsv/mermaid/issues/626) - Missing tags and releases for newer versions [\#623](https://github.com/knsv/mermaid/issues/623) - Mermaid and Leo / Leo Vue [\#622](https://github.com/knsv/mermaid/issues/622) - mermaidAPI gantt Vue.js [\#621](https://github.com/knsv/mermaid/issues/621) - Gantt sections are not separated by colors - Fix: set numberSectionStyles to 4 instead of 3 [\#620](https://github.com/knsv/mermaid/issues/620) - how to get mermaidAPI? [\#617](https://github.com/knsv/mermaid/issues/617) - Error in startOnLoad documentation? [\#616](https://github.com/knsv/mermaid/issues/616) - Example export to SVG generates error [\#614](https://github.com/knsv/mermaid/issues/614) - The new online editor does not support previously generated links [\#613](https://github.com/knsv/mermaid/issues/613) - Grammar / Syntax documentation for flowcharts [\#607](https://github.com/knsv/mermaid/issues/607) - Mermaid does not work with d3.js [\#606](https://github.com/knsv/mermaid/issues/606) - Why does this code's flowchart lines get cut-off on screen? [\#604](https://github.com/knsv/mermaid/issues/604) - click keyword does not fire my callback \(on the demo Website too\) [\#603](https://github.com/knsv/mermaid/issues/603) - Online Editor fails to show exported SVG [\#601](https://github.com/knsv/mermaid/issues/601) - Just saying thanks! [\#597](https://github.com/knsv/mermaid/issues/597) - stylesheet crashed with other library like abcjs [\#596](https://github.com/knsv/mermaid/issues/596) - Missing connection [\#594](https://github.com/knsv/mermaid/issues/594) - How to use mermaid on node.js restful api? [\#593](https://github.com/knsv/mermaid/issues/593) - Remove status code [\#589](https://github.com/knsv/mermaid/issues/589) - Golang based editor [\#588](https://github.com/knsv/mermaid/issues/588) - sequenceDiagram -\> notetext css font is hardcoded [\#587](https://github.com/knsv/mermaid/issues/587) - Multiple graph in the live editor [\#586](https://github.com/knsv/mermaid/issues/586) - All \ elements in page are colored black [\#584](https://github.com/knsv/mermaid/issues/584) - Styling: classes aren't applied to elements. [\#582](https://github.com/knsv/mermaid/issues/582) - Rounded connections [\#580](https://github.com/knsv/mermaid/issues/580) - Arrows are not being shown correctly in the dark theme [\#578](https://github.com/knsv/mermaid/issues/578) - The documentation for CLI seems outdated. [\#572](https://github.com/knsv/mermaid/issues/572) - No effect of click event:can not open link [\#571](https://github.com/knsv/mermaid/issues/571) - Text colors are not correct in VSCODE [\#570](https://github.com/knsv/mermaid/issues/570) - Nodes aren't aligned properly \(just need an explanation\) [\#568](https://github.com/knsv/mermaid/issues/568) - setting margin around figure in R [\#567](https://github.com/knsv/mermaid/issues/567) - Arrows should Come out in upward and Downward direction from decision Node [\#566](https://github.com/knsv/mermaid/issues/566) - TypeError: Cannot read property 'select' of undefined [\#563](https://github.com/knsv/mermaid/issues/563) - A little bug [\#557](https://github.com/knsv/mermaid/issues/557) - Japanese text appears garbled [\#554](https://github.com/knsv/mermaid/issues/554) - classdiagram not works in mermaid live_editor [\#553](https://github.com/knsv/mermaid/issues/553) - font awesome in link text? [\#546](https://github.com/knsv/mermaid/issues/546) - q: heard of the cosmogol standard? [\#545](https://github.com/knsv/mermaid/issues/545) - Arrow heads missing \(cli, 7.0.3\) [\#544](https://github.com/knsv/mermaid/issues/544) - No Edge Boxes if useHtmlLabels=false [\#541](https://github.com/knsv/mermaid/issues/541) - how to change mermaid text color or line text block color? [\#534](https://github.com/knsv/mermaid/issues/534) - FlowChart visualization broken when downloading from live editor [\#533](https://github.com/knsv/mermaid/issues/533) - Can't get flowchart to render paths at the top of the diagram; I even tried the online editor and that shows the same issue. Thoughts? [\#532](https://github.com/knsv/mermaid/issues/532) - live editor make browser\(safari on macOS&iOS\) not longer respond [\#531](https://github.com/knsv/mermaid/issues/531) - css classes need a prefix/namespace [\#527](https://github.com/knsv/mermaid/issues/527) - input activate/deactivate cause safari unresponding [\#521](https://github.com/knsv/mermaid/issues/521) - Cannot Render the Mermaid Graph to PDF ? [\#520](https://github.com/knsv/mermaid/issues/520) - clicking links works from inset in subgraph but not from nodes [\#516](https://github.com/knsv/mermaid/issues/516) - Strange syntax error - when importing mermaid.js [\#515](https://github.com/knsv/mermaid/issues/515) - gantt x-axis display [\#510](https://github.com/knsv/mermaid/issues/510) - phantomjs renamed to phantomjs-prebuilt [\#508](https://github.com/knsv/mermaid/issues/508) - issue when using sphinxcontrib-mermaid extension for sphinx [\#507](https://github.com/knsv/mermaid/issues/507) - layout of docs page looks broken [\#504](https://github.com/knsv/mermaid/issues/504) - Problem showing graph with php on localhost [\#502](https://github.com/knsv/mermaid/issues/502) - logLevel's option doesnt work at 7.0.0 [\#501](https://github.com/knsv/mermaid/issues/501) - How do I get the log for a render or parse attempt? [\#500](https://github.com/knsv/mermaid/issues/500) - Mermaid neutral style style to built in latest release [\#499](https://github.com/knsv/mermaid/issues/499) - Any plans for adding a typescript definition file? [\#495](https://github.com/knsv/mermaid/issues/495) - Gantt diagrams too narrow [\#493](https://github.com/knsv/mermaid/issues/493) - Flowchart edge labels placement [\#490](https://github.com/knsv/mermaid/issues/490) - Very different styles when rendering as png vs. svg [\#489](https://github.com/knsv/mermaid/issues/489) - New editor that supports mermaid: Caret [\#488](https://github.com/knsv/mermaid/issues/488) - Gant PNG margin [\#486](https://github.com/knsv/mermaid/issues/486) - ReferenceError: window is not defined [\#485](https://github.com/knsv/mermaid/issues/485) - Menu and layout bugs in docs [\#484](https://github.com/knsv/mermaid/issues/484) - Mermaid resets some of the page CSS styles [\#482](https://github.com/knsv/mermaid/issues/482) - Arrows rendering incorrectly in online editor [\#480](https://github.com/knsv/mermaid/issues/480) - CSS stroke-dasharray ignored by browsers but not other viewers [\#474](https://github.com/knsv/mermaid/issues/474) - mermaid - Browser Support issue [\#472](https://github.com/knsv/mermaid/issues/472) - Totally love mermaid I might pop! [\#471](https://github.com/knsv/mermaid/issues/471) - Sequence Diagram: Missing x on async arrows \(png\) [\#469](https://github.com/knsv/mermaid/issues/469) - live editor: the svg file rendered from graph is not supported by browsers [\#468](https://github.com/knsv/mermaid/issues/468) - Not found css [\#462](https://github.com/knsv/mermaid/issues/462) - Phantomjs Dependency [\#461](https://github.com/knsv/mermaid/issues/461) - Mermaid cli not working for subgraphs [\#459](https://github.com/knsv/mermaid/issues/459) - Support for notes across multiple participants? [\#458](https://github.com/knsv/mermaid/issues/458) - Related to Issue \#329: Phantomjs issues. [\#455](https://github.com/knsv/mermaid/issues/455) - Add a click style [\#426](https://github.com/knsv/mermaid/issues/426) - Add Parallel block \(par\) to sequence diagrams [\#425](https://github.com/knsv/mermaid/issues/425) - updating shapes after the flow chart rendering complete [\#424](https://github.com/knsv/mermaid/issues/424) - can't catch parse error Maximum call stack size exceeded on safari [\#421](https://github.com/knsv/mermaid/issues/421) - Arrows endings are missing [\#419](https://github.com/knsv/mermaid/issues/419) - shouldn't mermaid become more like Markdown ? [\#417](https://github.com/knsv/mermaid/issues/417) - Live editor show rendered diagram if syntax invalid [\#415](https://github.com/knsv/mermaid/issues/415) - Live editor sticky sidebar [\#414](https://github.com/knsv/mermaid/issues/414) - Linkstyle stroke does not work [\#410](https://github.com/knsv/mermaid/issues/410) - flowchart id's with dots in them .. break links [\#408](https://github.com/knsv/mermaid/issues/408) - Flowchart: Link text beginning with lowercase 'o' causes flowchart to break [\#407](https://github.com/knsv/mermaid/issues/407) - Some chinese character will case Safari no responding. [\#405](https://github.com/knsv/mermaid/issues/405) - Cannot center-justify text in nodes? [\#397](https://github.com/knsv/mermaid/issues/397) - Edge labels should have white background in live editor [\#396](https://github.com/knsv/mermaid/issues/396) - Live editor does not support activate/deactivate [\#394](https://github.com/knsv/mermaid/issues/394) - Styling subgraph? [\#391](https://github.com/knsv/mermaid/issues/391) - Update live editor to version 6.0.0 [\#387](https://github.com/knsv/mermaid/issues/387) - sequence diagram config issue [\#385](https://github.com/knsv/mermaid/issues/385) - How to add newline in the text [\#384](https://github.com/knsv/mermaid/issues/384) - PhantomJS crashes on a large graph [\#380](https://github.com/knsv/mermaid/issues/380) - Finnish support for class diagrams using plantuml syntax [\#377](https://github.com/knsv/mermaid/issues/377) - mermaidAPI.render generated different svg code from mermaid.int\(\) [\#374](https://github.com/knsv/mermaid/issues/374) - Put your own action on the chart [\#372](https://github.com/knsv/mermaid/issues/372) - when declaring participants the elements are generated twice [\#370](https://github.com/knsv/mermaid/issues/370) - Example Flowchart is cut in display \(Chrome\). [\#368](https://github.com/knsv/mermaid/issues/368) - Add shebang support to diagrams [\#365](https://github.com/knsv/mermaid/issues/365) - Silencing CLI output [\#352](https://github.com/knsv/mermaid/issues/352) - SequenceDiagram: 3+ Alternative Paths [\#348](https://github.com/knsv/mermaid/issues/348) - Smaller height of actor boxes [\#342](https://github.com/knsv/mermaid/issues/342) - Question: lib/phantomscript.js - foreignObjects in SVG - related to \#58 [\#340](https://github.com/knsv/mermaid/issues/340) - npm test fails on osx being blocked at Can not load "PhantomJS", it is not registered! [\#337](https://github.com/knsv/mermaid/issues/337) - Tabs & subgraphs cause rendering error [\#336](https://github.com/knsv/mermaid/issues/336) - Display question: right angles [\#335](https://github.com/knsv/mermaid/issues/335) - No Arrows rendered v0.5.8 [\#330](https://github.com/knsv/mermaid/issues/330) - mermaid -v filename.mmd gives You must specify at least one source file. [\#328](https://github.com/knsv/mermaid/issues/328) - You had errors in your syntax. Use --help for further information. [\#327](https://github.com/knsv/mermaid/issues/327) - Allow alternate arrow syntax that doesn't close html comments [\#322](https://github.com/knsv/mermaid/issues/322) - Comment in subgraph [\#319](https://github.com/knsv/mermaid/issues/319) - Update graph [\#311](https://github.com/knsv/mermaid/issues/311) - css conflicts with boostrap's css [\#308](https://github.com/knsv/mermaid/issues/308) - Can not get click event to fire. [\#306](https://github.com/knsv/mermaid/issues/306) - Fix phantomjs2 compatibility [\#304](https://github.com/knsv/mermaid/issues/304) - Flowcharts do not work in native IE11 [\#303](https://github.com/knsv/mermaid/issues/303) - Integration with remark.js - tutorial added [\#302](https://github.com/knsv/mermaid/issues/302) - Theme for dark background [\#301](https://github.com/knsv/mermaid/issues/301) - Sequence diagram Loops: changing boxMargin spoils the "loop" notation [\#299](https://github.com/knsv/mermaid/issues/299) - src/mermaid.js generates bad code [\#297](https://github.com/knsv/mermaid/issues/297) - Fresh fork: jasmine tests fail [\#294](https://github.com/knsv/mermaid/issues/294) - CSS clash [\#292](https://github.com/knsv/mermaid/issues/292) - Mermaid does not work in Chrome 48 [\#281](https://github.com/knsv/mermaid/issues/281) - node click is not effective [\#272](https://github.com/knsv/mermaid/issues/272) - circle and ellipse cannot change color by classDef [\#271](https://github.com/knsv/mermaid/issues/271) - \[Feature request\] gantt diagram axis format [\#269](https://github.com/knsv/mermaid/issues/269) - Not Able to See Labels even htmlLabels:false added [\#268](https://github.com/knsv/mermaid/issues/268) - npm run watch doesn’t work due missing dependencies [\#266](https://github.com/knsv/mermaid/issues/266) - label out of node [\#262](https://github.com/knsv/mermaid/issues/262) - IE11 Support issue [\#261](https://github.com/knsv/mermaid/issues/261) - mermaid without browser [\#260](https://github.com/knsv/mermaid/issues/260) - Insufficient capacity of gantt diagrams [\#226](https://github.com/knsv/mermaid/issues/226) - some WARN about installion [\#222](https://github.com/knsv/mermaid/issues/222) - Live editor offline access [\#217](https://github.com/knsv/mermaid/issues/217) - suggest: code highlight mode config for editors [\#212](https://github.com/knsv/mermaid/issues/212) - Uncaught RangeError: Maximum call stack size exceeded [\#189](https://github.com/knsv/mermaid/issues/189) - Implement render function for server side rendering using phantomjs [\#169](https://github.com/knsv/mermaid/issues/169) - Styling label texts [\#50](https://github.com/knsv/mermaid/issues/50) - Graphviz DOT syntax [\#5](https://github.com/knsv/mermaid/issues/5) **Merged pull requests:** - Remove console.log in classDB. [\#861](https://github.com/knsv/mermaid/pull/861) ([Arthaey](https://github.com/Arthaey)) - Bump sshpk from 1.13.1 to 1.16.1 [\#851](https://github.com/knsv/mermaid/pull/851) ([dependabot[bot]](https://github.com/apps/dependabot)) - Significantly smaller bundles [\#850](https://github.com/knsv/mermaid/pull/850) ([fabiospampinato](https://github.com/fabiospampinato)) - Support styling of subgraphs [\#845](https://github.com/knsv/mermaid/pull/845) ([Qix-](https://github.com/Qix-)) - fix dark theme loop labels not visible [\#837](https://github.com/knsv/mermaid/pull/837) ([jnnnnn](https://github.com/jnnnnn)) - fix draw function can only call once [\#832](https://github.com/knsv/mermaid/pull/832) ([vaniship](https://github.com/vaniship)) - Fix dotted lines not appearing in flowcharts when HTML labels disabled [\#828](https://github.com/knsv/mermaid/pull/828) ([stanhu](https://github.com/stanhu)) - Fix issue with XML line breaks inside vertex labels [\#824](https://github.com/knsv/mermaid/pull/824) ([jsyang](https://github.com/jsyang)) - fixed diagrams [\#810](https://github.com/knsv/mermaid/pull/810) ([0xflotus](https://github.com/0xflotus)) - Clickable gantt tasks [\#804](https://github.com/knsv/mermaid/pull/804) ([abzicht](https://github.com/abzicht)) - linkStyle now supports list of indexes with a few tests [\#798](https://github.com/knsv/mermaid/pull/798) ([ivan-danilov](https://github.com/ivan-danilov)) - fix class diagram mermaid [\#795](https://github.com/knsv/mermaid/pull/795) ([DanShai](https://github.com/DanShai)) - Added exclude weekdays to definition [\#792](https://github.com/knsv/mermaid/pull/792) ([jopapo](https://github.com/jopapo)) - SVG link rendering [\#791](https://github.com/knsv/mermaid/pull/791) ([flying-sheep](https://github.com/flying-sheep)) - Gantt milestones [\#788](https://github.com/knsv/mermaid/pull/788) ([gijswijs](https://github.com/gijswijs)) - Remove duplicate code [\#768](https://github.com/knsv/mermaid/pull/768) ([znxkznxk1030](https://github.com/znxkznxk1030)) - Render nodes as real links [\#765](https://github.com/knsv/mermaid/pull/765) ([flying-sheep](https://github.com/flying-sheep)) - Support Multi-line Actor Descriptions [\#764](https://github.com/knsv/mermaid/pull/764) ([watsoncj](https://github.com/watsoncj)) - Fix issue with marker-end. [\#757](https://github.com/knsv/mermaid/pull/757) ([gjlubbertsen](https://github.com/gjlubbertsen)) - Make Class Diagrams usable in Stackedit and Live Editor [\#749](https://github.com/knsv/mermaid/pull/749) ([monsterkrampe](https://github.com/monsterkrampe)) - Sequence numbers [\#722](https://github.com/knsv/mermaid/pull/722) ([paulbland](https://github.com/paulbland)) - Add option for right angles [\#721](https://github.com/knsv/mermaid/pull/721) ([paulbland](https://github.com/paulbland)) - Add nested activation classes [\#720](https://github.com/knsv/mermaid/pull/720) ([paulbland](https://github.com/paulbland)) - wip: class diagram cardinality display [\#705](https://github.com/knsv/mermaid/pull/705) ([Vrixyz](https://github.com/Vrixyz)) - add comments about CSS in config [\#688](https://github.com/knsv/mermaid/pull/688) ([imma90](https://github.com/imma90)) - SequenceDiagram: Add support for multiple alt else statements [\#641](https://github.com/knsv/mermaid/pull/641) ([sechel](https://github.com/sechel)) - fix \#426 - add class .clickable on nodes with click function or link [\#598](https://github.com/knsv/mermaid/pull/598) ([thomasleveil](https://github.com/thomasleveil)) - Spec fix 1 [\#595](https://github.com/knsv/mermaid/pull/595) ([frankschmitt](https://github.com/frankschmitt)) ## [7.0.5](https://github.com/knsv/mermaid/tree/7.0.5) (2017-09-01) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.3...7.0.5) **Closed issues:** - live editor latin error after update [\#560](https://github.com/knsv/mermaid/issues/560) - Simple full example in online documentation is broken [\#558](https://github.com/knsv/mermaid/issues/558) - Graph No Arrow Head v7.0.3 [\#543](https://github.com/knsv/mermaid/issues/543) - Conflict while using mermaid along with core-js [\#512](https://github.com/knsv/mermaid/issues/512) - Export to pdf on website [\#496](https://github.com/knsv/mermaid/issues/496) - New downstream project: Mermaid Preview for VSCode [\#442](https://github.com/knsv/mermaid/issues/442) - Can't Zoom the flowchart ? [\#399](https://github.com/knsv/mermaid/issues/399) - line labels are not rendered correctly in live editor [\#366](https://github.com/knsv/mermaid/issues/366) - mermaid-loader [\#361](https://github.com/knsv/mermaid/issues/361) - Are there any documentation or examples for classDiagram and gitGraph? [\#359](https://github.com/knsv/mermaid/issues/359) - \# character broken in 0.5.8 [\#347](https://github.com/knsv/mermaid/issues/347) - Documentation issue: CSS example is not visible [\#345](https://github.com/knsv/mermaid/issues/345) - Include documentation for command line usage [\#326](https://github.com/knsv/mermaid/issues/326) - Fresh fork: can't build dist [\#296](https://github.com/knsv/mermaid/issues/296) - Invalid value for \ attribute viewBox="0 0 -Infinity -Infinity" [\#291](https://github.com/knsv/mermaid/issues/291) - Webpack require fails [\#277](https://github.com/knsv/mermaid/issues/277) - New documentation - need improved logo [\#216](https://github.com/knsv/mermaid/issues/216) ## [7.0.3](https://github.com/knsv/mermaid/tree/7.0.3) (2017-06-04) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.2...7.0.3) **Closed issues:** - the documentation website is down [\#539](https://github.com/knsv/mermaid/issues/539) - Good example of interactivity with mermaidAPI [\#514](https://github.com/knsv/mermaid/issues/514) ## [7.0.2](https://github.com/knsv/mermaid/tree/7.0.2) (2017-06-01) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.0...7.0.2) **Closed issues:** - CDN is not working [\#511](https://github.com/knsv/mermaid/issues/511) - A sampe sequenceDiagram crashes mermaid-cli [\#492](https://github.com/knsv/mermaid/issues/492) - Mermaid doesn't delete nodes when called multiple times [\#491](https://github.com/knsv/mermaid/issues/491) - API crashes on 2nd render\(\) call [\#478](https://github.com/knsv/mermaid/issues/478) - sequenceDiagram: dotted line for alt and empty bracket should be hidden [\#456](https://github.com/knsv/mermaid/issues/456) - SVG output \(almost\) not correct [\#434](https://github.com/knsv/mermaid/issues/434) - How to set axisFormatter of gantt in mermaid CLI? [\#428](https://github.com/knsv/mermaid/issues/428) - customizing link style with any color sets `fill` property to `black` instead of `none` [\#416](https://github.com/knsv/mermaid/issues/416) - New line at the end of SVG file [\#400](https://github.com/knsv/mermaid/issues/400) - CLI doesn't work [\#389](https://github.com/knsv/mermaid/issues/389) - Can't render subgraphs with htmlLabels: false [\#367](https://github.com/knsv/mermaid/issues/367) - Color arrowhead [\#362](https://github.com/knsv/mermaid/issues/362) - CLI: Invisible text, lines in SVG output [\#341](https://github.com/knsv/mermaid/issues/341) **Merged pull requests:** - Update Travis config [\#538](https://github.com/knsv/mermaid/pull/538) ([tylerlong](https://github.com/tylerlong)) - Fix spelling of 'you' in sequenceDiagram docs [\#537](https://github.com/knsv/mermaid/pull/537) ([ctruelson](https://github.com/ctruelson)) - Improve CLI output [\#536](https://github.com/knsv/mermaid/pull/536) ([gibson042](https://github.com/gibson042)) - Modernize mermaid [\#524](https://github.com/knsv/mermaid/pull/524) ([tylerlong](https://github.com/tylerlong)) - Modernize mermaid [\#519](https://github.com/knsv/mermaid/pull/519) ([tylerlong](https://github.com/tylerlong)) - Update CLI instructions [\#509](https://github.com/knsv/mermaid/pull/509) ([filipedeschamps](https://github.com/filipedeschamps)) - Add style for classDiagram to dark/default theme [\#503](https://github.com/knsv/mermaid/pull/503) ([yudenzel](https://github.com/yudenzel)) - Fix documentation for git graph. [\#498](https://github.com/knsv/mermaid/pull/498) ([gomlgs](https://github.com/gomlgs)) - Fix links in documentations [\#497](https://github.com/knsv/mermaid/pull/497) ([saveman71](https://github.com/saveman71)) - Update README.md with git graph sample [\#481](https://github.com/knsv/mermaid/pull/481) ([raghur](https://github.com/raghur)) - Fix misspelling of “another” [\#479](https://github.com/knsv/mermaid/pull/479) ([stevenschobert](https://github.com/stevenschobert)) - Fixed \#456 sequenceDiagram: dotted line for alt and empty bracket sho… [\#477](https://github.com/knsv/mermaid/pull/477) ([brookhong](https://github.com/brookhong)) - Add viewbox attr to class diagram [\#473](https://github.com/knsv/mermaid/pull/473) ([gnkm](https://github.com/gnkm)) - add par statement to sequenceDiagram [\#470](https://github.com/knsv/mermaid/pull/470) ([u-minor](https://github.com/u-minor)) ## [7.0.0](https://github.com/knsv/mermaid/tree/7.0.0) (2017-01-29) [Full Changelog](https://github.com/knsv/mermaid/compare/6.0.0...7.0.0) **Closed issues:** - demos on io site not working [\#466](https://github.com/knsv/mermaid/issues/466) - Can not be generated PNG pictures through CLI with Chinese [\#451](https://github.com/knsv/mermaid/issues/451) - Round nodes cannot be styled with CSS classes [\#443](https://github.com/knsv/mermaid/issues/443) - webpack gulp UglifyJsPlugin error. [\#440](https://github.com/knsv/mermaid/issues/440) - String concatenation isn't working [\#432](https://github.com/knsv/mermaid/issues/432) - text flow/wrap in actor box of sequence diagram [\#422](https://github.com/knsv/mermaid/issues/422) - Online live editor still use old version [\#402](https://github.com/knsv/mermaid/issues/402) - uncaught TypeError: t.getTransformToElement is not a function [\#401](https://github.com/knsv/mermaid/issues/401) - Only works when using browserify'd code [\#373](https://github.com/knsv/mermaid/issues/373) - document the use of shebang line in mmd files [\#364](https://github.com/knsv/mermaid/issues/364) - Diagrams are small and unreadable in IE 11 - since 0.5.1 [\#356](https://github.com/knsv/mermaid/issues/356) - \[Feature Request\] ER-Diagram Support [\#354](https://github.com/knsv/mermaid/issues/354) - npm install -g mermaid does not install phantomjs [\#329](https://github.com/knsv/mermaid/issues/329) - activation boxes [\#313](https://github.com/knsv/mermaid/issues/313) - The need for mermaid.css should be mentioned explicitly in the intro docs... [\#273](https://github.com/knsv/mermaid/issues/273) **Merged pull requests:** - Update index.html [\#465](https://github.com/knsv/mermaid/pull/465) ([bmsleight](https://github.com/bmsleight)) - Fix for \#416, customizing link style with any color sets `fill` property to `black` instead of `none` [\#452](https://github.com/knsv/mermaid/pull/452) ([joshuacolvin](https://github.com/joshuacolvin)) - Allow .node\>circle to receive css styles [\#449](https://github.com/knsv/mermaid/pull/449) ([bfriedz](https://github.com/bfriedz)) - Fix spelling [\#447](https://github.com/knsv/mermaid/pull/447) ([jawn](https://github.com/jawn)) - added tests and fix cli css style selector lowercase problem [\#445](https://github.com/knsv/mermaid/pull/445) ([whyzdev](https://github.com/whyzdev)) - Update d3.js [\#441](https://github.com/knsv/mermaid/pull/441) ([hetz](https://github.com/hetz)) - adde tests to reproduce \#434 in flowchart [\#439](https://github.com/knsv/mermaid/pull/439) ([whyzdev](https://github.com/whyzdev)) - Code Climate config [\#437](https://github.com/knsv/mermaid/pull/437) ([larkinscott](https://github.com/larkinscott)) - fix gantt and sequence digram cli cfg [\#435](https://github.com/knsv/mermaid/pull/435) ([whyzdev](https://github.com/whyzdev)) - fix gantt chart cli configuration broken [\#433](https://github.com/knsv/mermaid/pull/433) ([whyzdev](https://github.com/whyzdev)) - fix gantt chart cli configuration parsing including functions [\#430](https://github.com/knsv/mermaid/pull/430) ([whyzdev](https://github.com/whyzdev)) - Uses an empty text node instead of a string for svg group labels [\#429](https://github.com/knsv/mermaid/pull/429) ([daveaglick](https://github.com/daveaglick)) - use tspan via d3.textwrap to place actor text in sequence diagram [\#427](https://github.com/knsv/mermaid/pull/427) ([whyzdev](https://github.com/whyzdev)) - \#422 use foreignObject/div to place actor label in sequence diagram [\#423](https://github.com/knsv/mermaid/pull/423) ([whyzdev](https://github.com/whyzdev)) - Clarify the need for a CSS stylesheet [\#413](https://github.com/knsv/mermaid/pull/413) ([sifb](https://github.com/sifb)) - Added hads downstream project [\#412](https://github.com/knsv/mermaid/pull/412) ([sinedied](https://github.com/sinedied)) - update usage and fix \#273 [\#406](https://github.com/knsv/mermaid/pull/406) ([jinntrance](https://github.com/jinntrance)) - Add https://github.com/raghur/mermaid-filter to downstream projects docs page [\#404](https://github.com/knsv/mermaid/pull/404) ([raghur](https://github.com/raghur)) - New neutral theme [\#395](https://github.com/knsv/mermaid/pull/395) ([sinedied](https://github.com/sinedied)) - fix cli issues [\#390](https://github.com/knsv/mermaid/pull/390) ([ben-page](https://github.com/ben-page)) - Add missing space for 'Labels out of bounds' section [\#386](https://github.com/knsv/mermaid/pull/386) ([The-Alchemist](https://github.com/The-Alchemist)) - Fix typo: `pats` -\> `paths` [\#382](https://github.com/knsv/mermaid/pull/382) ([swhgoon](https://github.com/swhgoon)) - Added class diagram example to README.md [\#379](https://github.com/knsv/mermaid/pull/379) ([HustLion](https://github.com/HustLion)) - override normal flowchart arrowhead to allow css styling [\#376](https://github.com/knsv/mermaid/pull/376) ([dodoinblue](https://github.com/dodoinblue)) - added sphinx extension [\#371](https://github.com/knsv/mermaid/pull/371) ([mgaitan](https://github.com/mgaitan)) - Fix typo in the sequence diagram documentation [\#369](https://github.com/knsv/mermaid/pull/369) ([ggpasqualino](https://github.com/ggpasqualino)) ## [6.0.0](https://github.com/knsv/mermaid/tree/6.0.0) (2016-05-29) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.8...6.0.0) **Closed issues:** - Docs css: code hard to read [\#324](https://github.com/knsv/mermaid/issues/324) - About Markpad integration [\#323](https://github.com/knsv/mermaid/issues/323) - How to link backwords in flowchat? [\#321](https://github.com/knsv/mermaid/issues/321) - Help with editor [\#310](https://github.com/knsv/mermaid/issues/310) - +1 [\#293](https://github.com/knsv/mermaid/issues/293) - Basic chart does not render on Chome, but does in Firefox [\#290](https://github.com/knsv/mermaid/issues/290) - Live editor is broken [\#285](https://github.com/knsv/mermaid/issues/285) - "No such file or directory" trying to run mermaid 0.5.7 on OS X [\#284](https://github.com/knsv/mermaid/issues/284) - participant name as "Long Long Name" [\#283](https://github.com/knsv/mermaid/issues/283) - Windows - cli - could not find phantomjs at the specified path [\#236](https://github.com/knsv/mermaid/issues/236) **Merged pull requests:** - The option of gantt for the spaces for the section names. [\#353](https://github.com/knsv/mermaid/pull/353) ([zeroyonichihachi](https://github.com/zeroyonichihachi)) - Gitgraph: Make reset work with parent ref carets [\#350](https://github.com/knsv/mermaid/pull/350) ([raghur](https://github.com/raghur)) - Remove the text-shadows that make the text look blurry [\#349](https://github.com/knsv/mermaid/pull/349) ([AsaAyers](https://github.com/AsaAyers)) - add line interpolation to linkStyle in flowchart [\#346](https://github.com/knsv/mermaid/pull/346) ([AlanHohn](https://github.com/AlanHohn)) - Support git graph diagrams in mermaid [\#344](https://github.com/knsv/mermaid/pull/344) ([raghur](https://github.com/raghur)) - Build and test execution changes [\#338](https://github.com/knsv/mermaid/pull/338) ([ssbarnea](https://github.com/ssbarnea)) - Reformatting of css files [\#331](https://github.com/knsv/mermaid/pull/331) ([Jmuccigr](https://github.com/Jmuccigr)) - \(WIP\) Sequence Diagram Title Support [\#320](https://github.com/knsv/mermaid/pull/320) ([bronsoja](https://github.com/bronsoja)) - activations doc + few fixes [\#318](https://github.com/knsv/mermaid/pull/318) ([ciekawy](https://github.com/ciekawy)) - Dark theme for better contrast on darker backgrounds [\#317](https://github.com/knsv/mermaid/pull/317) ([crodriguez1a](https://github.com/crodriguez1a)) - Activations [\#316](https://github.com/knsv/mermaid/pull/316) ([ciekawy](https://github.com/ciekawy)) - Support leading comments for sequenceDiagrams [\#312](https://github.com/knsv/mermaid/pull/312) ([ashsearle](https://github.com/ashsearle)) - Show a little lenience for white-space around names [\#309](https://github.com/knsv/mermaid/pull/309) ([ashsearle](https://github.com/ashsearle)) - Update list of downstream projects [\#307](https://github.com/knsv/mermaid/pull/307) ([maxArturo](https://github.com/maxArturo)) - Issue 299: Sequence diagram Loops: changing boxMargin spoils the "loop" notation [\#300](https://github.com/knsv/mermaid/pull/300) ([LarryKlugerDS](https://github.com/LarryKlugerDS)) - Issue 297 - src/mermaid.js generates bad code [\#298](https://github.com/knsv/mermaid/pull/298) ([LarryKlugerDS](https://github.com/LarryKlugerDS)) - Updated instructions for running tests [\#295](https://github.com/knsv/mermaid/pull/295) ([LarryKlugerDS](https://github.com/LarryKlugerDS)) - Add Markdown Plus to Downstream projects [\#288](https://github.com/knsv/mermaid/pull/288) ([tylerlong](https://github.com/tylerlong)) - Quote phantomPath so that it doesn't fail on window [\#286](https://github.com/knsv/mermaid/pull/286) ([raghur](https://github.com/raghur)) ## [0.5.8](https://github.com/knsv/mermaid/tree/0.5.8) (2016-01-27) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.7...0.5.8) ## [0.5.7](https://github.com/knsv/mermaid/tree/0.5.7) (2016-01-25) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.6...0.5.7) **Closed issues:** - Mermaid + LightPaper = ❤️ [\#280](https://github.com/knsv/mermaid/issues/280) - Bower Integration [\#278](https://github.com/knsv/mermaid/issues/278) - Mermaid breaks when variables end in 'v' [\#276](https://github.com/knsv/mermaid/issues/276) - sequence diagrams don't support participant aliasing [\#263](https://github.com/knsv/mermaid/issues/263) - One diagram that fails to render stops further execution on the page [\#259](https://github.com/knsv/mermaid/issues/259) - Where to find line layout algorithm? [\#258](https://github.com/knsv/mermaid/issues/258) - Compatibility with node.js [\#257](https://github.com/knsv/mermaid/issues/257) - Label resizing with dynamically loaded fonts [\#255](https://github.com/knsv/mermaid/issues/255) - SVG arrowheads are broken in the CLI [\#249](https://github.com/knsv/mermaid/issues/249) - Cannot read property 'replace' of undefined [\#239](https://github.com/knsv/mermaid/issues/239) **Merged pull requests:** - gh-50 Allow styling of edge labels in css [\#267](https://github.com/knsv/mermaid/pull/267) ([Anoia](https://github.com/Anoia)) - Allow sequenceDiagram participant aliasing [\#265](https://github.com/knsv/mermaid/pull/265) ([gibson042](https://github.com/gibson042)) ## [0.5.6](https://github.com/knsv/mermaid/tree/0.5.6) (2015-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.5...0.5.6) **Closed issues:** - title doesn't work in sequenceDiagram [\#248](https://github.com/knsv/mermaid/issues/248) - hypen-minus should be valid in sequence diagram alt/else/etc. descriptions [\#247](https://github.com/knsv/mermaid/issues/247) - Broken in firefox? [\#245](https://github.com/knsv/mermaid/issues/245) - When there is a Chinese symbol in the flowchart, it will crash。 [\#238](https://github.com/knsv/mermaid/issues/238) - Non-alpha characters included in ALPHA token \(flow graph jison\) [\#232](https://github.com/knsv/mermaid/issues/232) - subgraph not rendering with change to sample [\#231](https://github.com/knsv/mermaid/issues/231) - sequence diagram requires a new line at the end? [\#229](https://github.com/knsv/mermaid/issues/229) - Live Editor: Permalink address not being parsed [\#202](https://github.com/knsv/mermaid/issues/202) - Add download SVG link to the live editor [\#144](https://github.com/knsv/mermaid/issues/144) **Merged pull requests:** - Make sequenceDiagram terminal newline optional [\#253](https://github.com/knsv/mermaid/pull/253) ([gibson042](https://github.com/gibson042)) - Support sequenceDiagram "over" notes [\#252](https://github.com/knsv/mermaid/pull/252) ([gibson042](https://github.com/gibson042)) - Properly handle "rest of line" statements [\#251](https://github.com/knsv/mermaid/pull/251) ([gibson042](https://github.com/gibson042)) - CLI: Propagate exit code from lib \(i.e., phantomjs\) [\#250](https://github.com/knsv/mermaid/pull/250) ([gibson042](https://github.com/gibson042)) - flowRender.js - Fix FontAwesome icon insert [\#244](https://github.com/knsv/mermaid/pull/244) ([ma-zal](https://github.com/ma-zal)) - updated sequence diagram link in live editor [\#242](https://github.com/knsv/mermaid/pull/242) ([r-a-v-a-s](https://github.com/r-a-v-a-s)) - updated links in README.md [\#240](https://github.com/knsv/mermaid/pull/240) ([r-a-v-a-s](https://github.com/r-a-v-a-s)) - Ellipse syntax [\#237](https://github.com/knsv/mermaid/pull/237) ([spect88](https://github.com/spect88)) - Allow keywords as suffixes of node ids [\#235](https://github.com/knsv/mermaid/pull/235) ([spect88](https://github.com/spect88)) - Highlighted the editor in the nav [\#234](https://github.com/knsv/mermaid/pull/234) ([knsv](https://github.com/knsv)) - Live editor tweaks [\#233](https://github.com/knsv/mermaid/pull/233) ([spect88](https://github.com/spect88)) - Add a Gitter chat badge to README.md [\#230](https://github.com/knsv/mermaid/pull/230) ([gitter-badger](https://github.com/gitter-badger)) ## [0.5.5](https://github.com/knsv/mermaid/tree/0.5.5) (2015-10-21) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.4...0.5.5) **Closed issues:** - sequence diagram, arrowhead instead of crosshead [\#227](https://github.com/knsv/mermaid/issues/227) **Merged pull requests:** - Fix a typo: crosshead --\> arrowhead [\#228](https://github.com/knsv/mermaid/pull/228) ([tylerlong](https://github.com/tylerlong)) ## [0.5.4](https://github.com/knsv/mermaid/tree/0.5.4) (2015-10-19) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.3...0.5.4) **Closed issues:** - Weird bug in live editor when using words with substring `end` [\#184](https://github.com/knsv/mermaid/issues/184) - Custom icons [\#15](https://github.com/knsv/mermaid/issues/15) - Marker-end arrow cannot be shown for URL with query parameter [\#225](https://github.com/knsv/mermaid/issues/225) - Please update bower's D3 version [\#221](https://github.com/knsv/mermaid/issues/221) - Set log level from mermaid configuration [\#220](https://github.com/knsv/mermaid/issues/220) - Width fixed to 400px [\#204](https://github.com/knsv/mermaid/issues/204) - render to png from the cli does not display the marker-end arrow heads [\#181](https://github.com/knsv/mermaid/issues/181) - Links in sequence diagrams [\#159](https://github.com/knsv/mermaid/issues/159) - comment characters `%%` cause parse error [\#141](https://github.com/knsv/mermaid/issues/141) - Add a reversed assymetric shape [\#124](https://github.com/knsv/mermaid/issues/124) - Add syntax for double headed arrows [\#123](https://github.com/knsv/mermaid/issues/123) - Support for font-awesome [\#49](https://github.com/knsv/mermaid/issues/49) **Merged pull requests:** - Allow `end` as a substring of vertex id [\#224](https://github.com/knsv/mermaid/pull/224) ([spect88](https://github.com/spect88)) - Remove duplicate npm dependencies: d3 and he [\#223](https://github.com/knsv/mermaid/pull/223) ([spect88](https://github.com/spect88)) ## [0.5.3](https://github.com/knsv/mermaid/tree/0.5.3) (2015-10-04) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.2...0.5.3) ## [0.5.2](https://github.com/knsv/mermaid/tree/0.5.2) (2015-10-04) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.1...0.5.2) **Closed issues:** - Installing “atom-mermaid@0.1.3” failed [\#218](https://github.com/knsv/mermaid/issues/218) - Render mermaid code on websites? [\#215](https://github.com/knsv/mermaid/issues/215) - Brackets in a node with text? [\#213](https://github.com/knsv/mermaid/issues/213) - node feature request [\#211](https://github.com/knsv/mermaid/issues/211) - Please add prefix for styles [\#208](https://github.com/knsv/mermaid/issues/208) - Bad handling of block arguments [\#207](https://github.com/knsv/mermaid/issues/207) - please consider port to mac osx [\#203](https://github.com/knsv/mermaid/issues/203) - allow phantomjs \>=1.9.x [\#201](https://github.com/knsv/mermaid/issues/201) - syntax for venn diagrams? [\#200](https://github.com/knsv/mermaid/issues/200) - Broken CLI Graphs? \(v0.5.1\) [\#196](https://github.com/knsv/mermaid/issues/196) - Static site does not render under HTTPS [\#194](https://github.com/knsv/mermaid/issues/194) - Error on simple graph [\#192](https://github.com/knsv/mermaid/issues/192) - Escape "~" [\#191](https://github.com/knsv/mermaid/issues/191) - Trying to add link using 'click' to flowchart [\#188](https://github.com/knsv/mermaid/issues/188) - cli: no lines and arrowheads rendered / only dotted lines [\#187](https://github.com/knsv/mermaid/issues/187) - text of mermaid div displayed on page [\#186](https://github.com/knsv/mermaid/issues/186) - using mermaid with laravel [\#185](https://github.com/knsv/mermaid/issues/185) - Atom editor package [\#183](https://github.com/knsv/mermaid/issues/183) - Auto linewrap for notes in sequence diagrams [\#178](https://github.com/knsv/mermaid/issues/178) - Execute code after initialize [\#176](https://github.com/knsv/mermaid/issues/176) - Autoscaling for all diagram types [\#175](https://github.com/knsv/mermaid/issues/175) - Problem wit click event callback [\#174](https://github.com/knsv/mermaid/issues/174) - How to escape characters? [\#170](https://github.com/knsv/mermaid/issues/170) - it can not work [\#167](https://github.com/knsv/mermaid/issues/167) - UML Class diagram [\#154](https://github.com/knsv/mermaid/issues/154) - Broken subgraph using the CLI [\#153](https://github.com/knsv/mermaid/issues/153) - Support PlantUML syntax [\#149](https://github.com/knsv/mermaid/issues/149) - IE Support issue [\#142](https://github.com/knsv/mermaid/issues/142) - Flowchart truncated [\#140](https://github.com/knsv/mermaid/issues/140) - Double Quote as text is not working [\#219](https://github.com/knsv/mermaid/issues/219) - classDef / class not working with htmlLabels? [\#210](https://github.com/knsv/mermaid/issues/210) - Links in graph missing [\#209](https://github.com/knsv/mermaid/issues/209) - Last word in comment boxes getting cut off by word wrap library : \( [\#195](https://github.com/knsv/mermaid/issues/195) - Escaping characters in sequence diagram [\#193](https://github.com/knsv/mermaid/issues/193) - SVG foreignObject rendering [\#180](https://github.com/knsv/mermaid/issues/180) - IE9 issue [\#179](https://github.com/knsv/mermaid/issues/179) - inoperable in an AMD/requirejs environment: IPython Notebook [\#127](https://github.com/knsv/mermaid/issues/127) - \[Parser\] Hyphen in participant name bring TypeError [\#74](https://github.com/knsv/mermaid/issues/74) - Support for hyperlink and tooltip [\#34](https://github.com/knsv/mermaid/issues/34) **Merged pull requests:** - Update flowchart.md [\#214](https://github.com/knsv/mermaid/pull/214) ([orschiro](https://github.com/orschiro)) - Default style when using the CLI [\#205](https://github.com/knsv/mermaid/pull/205) ([gillesdemey](https://github.com/gillesdemey)) - Gantt chart - add minutes and seconds durations [\#198](https://github.com/knsv/mermaid/pull/198) ([dbrans](https://github.com/dbrans)) - Using QUnit for AMD testing [\#190](https://github.com/knsv/mermaid/pull/190) ([bollwyvl](https://github.com/bollwyvl)) - Update phantomscript.js [\#182](https://github.com/knsv/mermaid/pull/182) ([phairow](https://github.com/phairow)) ## [0.5.1](https://github.com/knsv/mermaid/tree/0.5.1) (2015-06-21) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.0...0.5.1) **Closed issues:** - Live editor is broken [\#173](https://github.com/knsv/mermaid/issues/173) - 0.5.0 no longer respects custom date definitions in Gantt diagrams [\#171](https://github.com/knsv/mermaid/issues/171) - Drop label character restrictions [\#162](https://github.com/knsv/mermaid/issues/162) - can't nest subgraphs in flowchart [\#161](https://github.com/knsv/mermaid/issues/161) - Unable to generate gantt diagram with mermaid CLI [\#158](https://github.com/knsv/mermaid/issues/158) - Inline css by "mermaid" [\#157](https://github.com/knsv/mermaid/issues/157) - Finite State Machine Diagram [\#152](https://github.com/knsv/mermaid/issues/152) - How to center align gantt diagram [\#150](https://github.com/knsv/mermaid/issues/150) - Security concern regarding class definition [\#148](https://github.com/knsv/mermaid/issues/148) - File Extension [\#147](https://github.com/knsv/mermaid/issues/147) - To SVG Export [\#146](https://github.com/knsv/mermaid/issues/146) - `setTimeout` with clusters problematic with programmatic edits and no callback [\#133](https://github.com/knsv/mermaid/issues/133) - Possibility to set the width of the generated flowchart [\#129](https://github.com/knsv/mermaid/issues/129) - flowchart - styling of edges via css overrides specific styles set in the graph definition [\#128](https://github.com/knsv/mermaid/issues/128) - module.exports.cloneCssStyles\(\) in combination with Angularjs breaks display in Chrome and IE [\#126](https://github.com/knsv/mermaid/issues/126) - Gantt - suitable xAxis for longer project [\#125](https://github.com/knsv/mermaid/issues/125) - Mix horizontal and vertical graph [\#68](https://github.com/knsv/mermaid/issues/68) - How to get started with this project ? [\#64](https://github.com/knsv/mermaid/issues/64) - Special characters break parsing [\#54](https://github.com/knsv/mermaid/issues/54) - Responsive graph layout for mobile viewers [\#51](https://github.com/knsv/mermaid/issues/51) - Styling connector lines [\#31](https://github.com/knsv/mermaid/issues/31) **Merged pull requests:** - Remove moot `version` property from bower.json [\#172](https://github.com/knsv/mermaid/pull/172) ([kkirsche](https://github.com/kkirsche)) ## [0.5.0](https://github.com/knsv/mermaid/tree/0.5.0) (2015-06-07) [Full Changelog](https://github.com/knsv/mermaid/compare/0.4.0...0.5.0) **Closed issues:** - it can not work where graph TD contains chinese character [\#166](https://github.com/knsv/mermaid/issues/166) - Broken Examples [\#163](https://github.com/knsv/mermaid/issues/163) - uglifyjs wanrings which means we can improve the code [\#156](https://github.com/knsv/mermaid/issues/156) - New\(er\) features unavailable in downloadable js files? [\#151](https://github.com/knsv/mermaid/issues/151) - Add gh-gapes link to description [\#143](https://github.com/knsv/mermaid/issues/143) - Some examples not displayed on Firefox 36.0.1 [\#138](https://github.com/knsv/mermaid/issues/138) - tags ending in a "v" don't render [\#132](https://github.com/knsv/mermaid/issues/132) - Links in flowchart [\#131](https://github.com/knsv/mermaid/issues/131) - Using the library for iOS development [\#130](https://github.com/knsv/mermaid/issues/130) - Add a css file, mermaid.css, with default styling [\#122](https://github.com/knsv/mermaid/issues/122) - Add capability for gantt diagrams [\#118](https://github.com/knsv/mermaid/issues/118) - lower case v causes error in the parser [\#108](https://github.com/knsv/mermaid/issues/108) - Label's css conflict with boostrap's .label [\#67](https://github.com/knsv/mermaid/issues/67) - TypeError: Cannot read property 'layout' of undefined [\#37](https://github.com/knsv/mermaid/issues/37) - software architecture diagram [\#36](https://github.com/knsv/mermaid/issues/36) - Support for bar charts and pie diagrams [\#22](https://github.com/knsv/mermaid/issues/22) **Merged pull requests:** - Dev 0.5.0 [\#168](https://github.com/knsv/mermaid/pull/168) ([knsv](https://github.com/knsv)) - Fix spacing [\#164](https://github.com/knsv/mermaid/pull/164) ([rhcarvalho](https://github.com/rhcarvalho)) - Fixing typo: "Think" -\> "Thick" [\#160](https://github.com/knsv/mermaid/pull/160) ([it0a](https://github.com/it0a)) - IE, local html, cssRules access is denied [\#155](https://github.com/knsv/mermaid/pull/155) ([tylerlong](https://github.com/tylerlong)) - Add automatically generated change log file. [\#139](https://github.com/knsv/mermaid/pull/139) ([skywinder](https://github.com/skywinder)) - Adding init argument to the global API [\#137](https://github.com/knsv/mermaid/pull/137) ([bollwyvl](https://github.com/bollwyvl)) - Add description of manual calling of init [\#136](https://github.com/knsv/mermaid/pull/136) ([bollwyvl](https://github.com/bollwyvl)) - Allow other forms of node selection for init\(\) [\#135](https://github.com/knsv/mermaid/pull/135) ([bollwyvl](https://github.com/bollwyvl)) - Use a library-level variable for assigning ids [\#134](https://github.com/knsv/mermaid/pull/134) ([bollwyvl](https://github.com/bollwyvl)) ## [0.4.0](https://github.com/knsv/mermaid/tree/0.4.0) (2015-03-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.5...0.4.0) **Closed issues:** - subgraph background is black in rendered flowchart PNG via CLI [\#121](https://github.com/knsv/mermaid/issues/121) - Integrate editor at https://github.com/naseer/mermaid-webapp [\#110](https://github.com/knsv/mermaid/issues/110) - Internet Explorer Support [\#99](https://github.com/knsv/mermaid/issues/99) - Assymetric shapes not documented [\#82](https://github.com/knsv/mermaid/issues/82) - NoModificationAllowedError [\#23](https://github.com/knsv/mermaid/issues/23) - Improve arrows [\#3](https://github.com/knsv/mermaid/issues/3) ## [0.3.5](https://github.com/knsv/mermaid/tree/0.3.5) (2015-02-15) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.4...0.3.5) ## [0.3.4](https://github.com/knsv/mermaid/tree/0.3.4) (2015-02-15) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.3...0.3.4) **Closed issues:** - Subgraph syntax bug? [\#120](https://github.com/knsv/mermaid/issues/120) - Live editor [\#115](https://github.com/knsv/mermaid/issues/115) - Error in "Basic Syntax" wiki page [\#113](https://github.com/knsv/mermaid/issues/113) - semicolons, anyone? [\#111](https://github.com/knsv/mermaid/issues/111) - undefined `sequenceConfig` fails [\#109](https://github.com/knsv/mermaid/issues/109) - Sequence Diagrams: Show Actors below as well [\#106](https://github.com/knsv/mermaid/issues/106) - Allow overriding sequence diagram configuration \(SVG properties\) [\#103](https://github.com/knsv/mermaid/issues/103) - Error when rendering A-- This is the text -- B [\#102](https://github.com/knsv/mermaid/issues/102) - Clipping in documentation [\#97](https://github.com/knsv/mermaid/issues/97) - isolate class styling to the svg container [\#92](https://github.com/knsv/mermaid/issues/92) - Apply styling from css when using the CLI utility [\#85](https://github.com/knsv/mermaid/issues/85) - Generated SVG works poorly outside web browsers [\#58](https://github.com/knsv/mermaid/issues/58) - Make the new graph declaration more visual [\#40](https://github.com/knsv/mermaid/issues/40) - Generating SVG text blob for use in Node [\#2](https://github.com/knsv/mermaid/issues/2) **Merged pull requests:** - Add live editor [\#119](https://github.com/knsv/mermaid/pull/119) ([naseer](https://github.com/naseer)) - Adds CSS option to the CLI [\#116](https://github.com/knsv/mermaid/pull/116) ([fardog](https://github.com/fardog)) - Update flowchart.md in response Issue \#113 [\#114](https://github.com/knsv/mermaid/pull/114) ([vijay40](https://github.com/vijay40)) - Ignore all files except the license and dist/ folder when installing with Bower. [\#112](https://github.com/knsv/mermaid/pull/112) ([jasonbellamy](https://github.com/jasonbellamy)) ## [0.3.3](https://github.com/knsv/mermaid/tree/0.3.3) (2015-01-25) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.2...0.3.3) **Closed issues:** - Missing arrows in sequence diagram [\#98](https://github.com/knsv/mermaid/issues/98) - Error with \>9 linkStyles [\#95](https://github.com/knsv/mermaid/issues/95) - Support for dotted links [\#26](https://github.com/knsv/mermaid/issues/26) **Merged pull requests:** - Require d3 directly to better support Node usage [\#107](https://github.com/knsv/mermaid/pull/107) ([markdalgleish](https://github.com/markdalgleish)) - update doc with -c option [\#105](https://github.com/knsv/mermaid/pull/105) ([jjmr](https://github.com/jjmr)) - Add new parameter to the console client to override the svg configuration in sequence diagrams [\#104](https://github.com/knsv/mermaid/pull/104) ([jjmr](https://github.com/jjmr)) - Text based labels, new shape [\#101](https://github.com/knsv/mermaid/pull/101) ([bjowes](https://github.com/bjowes)) - fix html tags in example usage [\#100](https://github.com/knsv/mermaid/pull/100) ([deiwin](https://github.com/deiwin)) ## [0.3.2](https://github.com/knsv/mermaid/tree/0.3.2) (2015-01-11) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.1...0.3.2) **Closed issues:** - disable auto render [\#91](https://github.com/knsv/mermaid/issues/91) - Tidy breaks mermaid \(linebreaks in \\) [\#87](https://github.com/knsv/mermaid/issues/87) - Bug: \ being rendered as text in node [\#73](https://github.com/knsv/mermaid/issues/73) - Graph edges appear to render outside of the canvas [\#70](https://github.com/knsv/mermaid/issues/70) - Make link text look like it is on the line [\#53](https://github.com/knsv/mermaid/issues/53) **Merged pull requests:** - Merge pull request \#1 from knsv/master [\#96](https://github.com/knsv/mermaid/pull/96) ([gkchic](https://github.com/gkchic)) - Removed duplicated section in flowchart docs [\#94](https://github.com/knsv/mermaid/pull/94) ([kaime](https://github.com/kaime)) - Grammar changes to sequence page [\#93](https://github.com/knsv/mermaid/pull/93) ([gkchic](https://github.com/gkchic)) - Github buttons [\#89](https://github.com/knsv/mermaid/pull/89) ([gkchic](https://github.com/gkchic)) - Template change [\#88](https://github.com/knsv/mermaid/pull/88) ([gkchic](https://github.com/gkchic)) ## [0.3.1](https://github.com/knsv/mermaid/tree/0.3.1) (2015-01-05) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.0...0.3.1) **Closed issues:** - Non ASCII chars in labels [\#84](https://github.com/knsv/mermaid/issues/84) - 'undefined' titles of Quicklinks on the usage page [\#80](https://github.com/knsv/mermaid/issues/80) - \[cli\] Enhancement proposal: not fail --version / --help if phantomjs isn't installed [\#71](https://github.com/knsv/mermaid/issues/71) - Neural Networks [\#39](https://github.com/knsv/mermaid/issues/39) - Support for sequence diagrams [\#16](https://github.com/knsv/mermaid/issues/16) - Client utility for mermaid [\#6](https://github.com/knsv/mermaid/issues/6) **Merged pull requests:** - Flowchart doc: Text in the circle now in a circle [\#81](https://github.com/knsv/mermaid/pull/81) ([Grahack](https://github.com/Grahack)) - Fix for issue \#73 [\#79](https://github.com/knsv/mermaid/pull/79) ([it0a](https://github.com/it0a)) - Ink template [\#78](https://github.com/knsv/mermaid/pull/78) ([gkchic](https://github.com/gkchic)) - Show help and version even if phantom isn't present. Fixes \#71 [\#75](https://github.com/knsv/mermaid/pull/75) ([fardog](https://github.com/fardog)) - Add apostrophe & 'and' [\#72](https://github.com/knsv/mermaid/pull/72) ([sudodoki](https://github.com/sudodoki)) ## [0.3.0](https://github.com/knsv/mermaid/tree/0.3.0) (2014-12-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.16...0.3.0) **Closed issues:** - Consider shipping a standalone executable [\#65](https://github.com/knsv/mermaid/issues/65) - Trailing whitespace at the end of lines is not ignored [\#55](https://github.com/knsv/mermaid/issues/55) - How do I do comments? [\#47](https://github.com/knsv/mermaid/issues/47) - This characters failed the lexical parsing [\#46](https://github.com/knsv/mermaid/issues/46) - tutorial for creating new type of graph/layout [\#44](https://github.com/knsv/mermaid/issues/44) - Improve readability with new line as terminator and whitespace [\#38](https://github.com/knsv/mermaid/issues/38) - Use classes instead of inline style for easy styling [\#24](https://github.com/knsv/mermaid/issues/24) **Merged pull requests:** - Adds Command Line Interface for generating PNGs from mermaid description files [\#69](https://github.com/knsv/mermaid/pull/69) ([fardog](https://github.com/fardog)) - Allow special symbols for direction along with acronyms [\#66](https://github.com/knsv/mermaid/pull/66) ([vijay40](https://github.com/vijay40)) ## [0.2.16](https://github.com/knsv/mermaid/tree/0.2.16) (2014-12-15) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.15...0.2.16) **Closed issues:** - Mermaid not rendering properly on Wordpress pages [\#59](https://github.com/knsv/mermaid/issues/59) - Improve example page with live demo [\#52](https://github.com/knsv/mermaid/issues/52) - Create image file via CLI? [\#48](https://github.com/knsv/mermaid/issues/48) - Does not render upon AngularJS Updates [\#45](https://github.com/knsv/mermaid/issues/45) - Download link in README.MD doesn't work. [\#42](https://github.com/knsv/mermaid/issues/42) - linkStyle usage is not obvious [\#41](https://github.com/knsv/mermaid/issues/41) - Move \*.spec.js in src/ to test/ [\#35](https://github.com/knsv/mermaid/issues/35) - Lines routed outside visible area [\#19](https://github.com/knsv/mermaid/issues/19) **Merged pull requests:** - New grammar will allow statements ending without semicolon as disccused in Issue \#38 [\#63](https://github.com/knsv/mermaid/pull/63) ([vijay40](https://github.com/vijay40)) - Class based styling [\#62](https://github.com/knsv/mermaid/pull/62) ([bjowes](https://github.com/bjowes)) - Fix typos [\#60](https://github.com/knsv/mermaid/pull/60) ([sublimino](https://github.com/sublimino)) - Included .DS_Store in gitignore [\#57](https://github.com/knsv/mermaid/pull/57) ([alvynmcq](https://github.com/alvynmcq)) - Improves readablity discussed in issue \#38 [\#56](https://github.com/knsv/mermaid/pull/56) ([vijay40](https://github.com/vijay40)) - Added a linting task for gulp [\#43](https://github.com/knsv/mermaid/pull/43) ([serv](https://github.com/serv)) ## [0.2.15](https://github.com/knsv/mermaid/tree/0.2.15) (2014-12-05) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.14...0.2.15) **Closed issues:** - Question marks don't render properly with /dist/mermaid.full.min.js [\#30](https://github.com/knsv/mermaid/issues/30) - Error with some characters [\#25](https://github.com/knsv/mermaid/issues/25) - Provide parse function in browser widthout `require`? [\#21](https://github.com/knsv/mermaid/issues/21) - Better label text support [\#18](https://github.com/knsv/mermaid/issues/18) - Cap-cased words break parser [\#8](https://github.com/knsv/mermaid/issues/8) **Merged pull requests:** - Include bower_components/ to .gitignore [\#33](https://github.com/knsv/mermaid/pull/33) ([serv](https://github.com/serv)) - Fixed reference to Git repo. [\#32](https://github.com/knsv/mermaid/pull/32) ([guyellis](https://github.com/guyellis)) ## [0.2.14](https://github.com/knsv/mermaid/tree/0.2.14) (2014-12-03) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.13...0.2.14) ## [0.2.13](https://github.com/knsv/mermaid/tree/0.2.13) (2014-12-03) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.10...0.2.13) **Closed issues:** - modified init to be applied more than once [\#29](https://github.com/knsv/mermaid/issues/29) - Wanted to know build process for the project. [\#28](https://github.com/knsv/mermaid/issues/28) - Container support [\#27](https://github.com/knsv/mermaid/issues/27) - can not support Chinese description [\#20](https://github.com/knsv/mermaid/issues/20) - Node Label text mistaken for Direction [\#17](https://github.com/knsv/mermaid/issues/17) - Support unicode chars in labels [\#9](https://github.com/knsv/mermaid/issues/9) - Publish to NPM [\#7](https://github.com/knsv/mermaid/issues/7) ## [0.2.10](https://github.com/knsv/mermaid/tree/0.2.10) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.9...0.2.10) ## [0.2.9](https://github.com/knsv/mermaid/tree/0.2.9) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.8...0.2.9) **Closed issues:** - Add link to jsbin playground to README [\#11](https://github.com/knsv/mermaid/issues/11) - What are the requirements ? [\#10](https://github.com/knsv/mermaid/issues/10) **Merged pull requests:** - Allow unicode chars in labels [\#13](https://github.com/knsv/mermaid/pull/13) ([codebeige](https://github.com/codebeige)) ## [0.2.8](https://github.com/knsv/mermaid/tree/0.2.8) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.7...0.2.8) ## [0.2.7](https://github.com/knsv/mermaid/tree/0.2.7) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.6...0.2.7) **Closed issues:** - Provide parser as separate module [\#4](https://github.com/knsv/mermaid/issues/4) ## [0.2.6](https://github.com/knsv/mermaid/tree/0.2.6) (2014-11-27) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.5...0.2.6) ## [0.2.5](https://github.com/knsv/mermaid/tree/0.2.5) (2014-11-27) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.4...0.2.5) **Merged pull requests:** - Added new shapes! [\#1](https://github.com/knsv/mermaid/pull/1) ([bjowes](https://github.com/bjowes)) ## [0.2.4](https://github.com/knsv/mermaid/tree/0.2.4) (2014-11-25) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.3...0.2.4) ## [0.2.3](https://github.com/knsv/mermaid/tree/0.2.3) (2014-11-24) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.2...0.2.3) ## [0.2.2](https://github.com/knsv/mermaid/tree/0.2.2) (2014-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.1...0.2.2) ## [0.2.1](https://github.com/knsv/mermaid/tree/0.2.1) (2014-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.0...0.2.1) ## [0.2.0](https://github.com/knsv/mermaid/tree/0.2.0) (2014-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.1.1...0.2.0) ## [0.1.1](https://github.com/knsv/mermaid/tree/0.1.1) (2014-11-17) [Full Changelog](https://github.com/knsv/mermaid/compare/0.1.0...0.1.1) ## [0.1.0](https://github.com/knsv/mermaid/tree/0.1.0) (2014-11-16) \* _This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)_ mermaid-js-mermaid-9bb0ed2/CODE_OF_CONDUCT.md000066400000000000000000000121471433273745700204720ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: - Demonstrating empathy and kindness toward other people - Being respectful of differing opinions, viewpoints, and experiences - Giving and gracefully accepting constructive feedback - Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience - Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: - The use of sexualized language or imagery, and sexual attention or advances of any kind - Trolling, insulting or derogatory comments, and personal or political attacks - Public or private harassment - Publishing others' private information, such as a physical or email address, without their explicit permission - Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders 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, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at security@mermaid.live . All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations. mermaid-js-mermaid-9bb0ed2/CONTRIBUTING.md000066400000000000000000000154121433273745700201220ustar00rootroot00000000000000# Contributing So you want to help? That's great! ![Happy people jumping with excitement](https://media.giphy.com/media/BlVnrxJgTGsUw/giphy.gif) Here are a few things to know to get you started on the right path. Below link will help you making a copy of the repository in your local system. https://docs.github.com/en/get-started/quickstart/fork-a-repo ## Requirements - [volta](https://volta.sh/) to manage node versions. - [Node.js](https://nodejs.org/en/). `volta install node` - [pnpm](https://pnpm.io/) package manager. `volta install pnpm` ## Development Installation ```bash git clone git@github.com:mermaid-js/mermaid.git cd mermaid # npx is required for first install as volta support for pnpm is not added yet. npx pnpm install pnpm test ``` ## Committing code We make all changes via pull requests. As we have many pull requests from developers new to mermaid, the current approach is to have _knsv, Knut Sveidqvist_ as a main reviewer of changes and merging pull requests. More precisely like this: - Large changes reviewed by knsv or other developer asked to review by knsv - Smaller low-risk changes like dependencies, documentation, etc. can be merged by active collaborators - Documentation (updates to the `src/docs` folder is also allowed via direct commits) To commit code, create a branch, let it start with the type like feature or bug followed by the issue number for reference and some describing text. One example: `feature/945_state_diagrams` Another: `bug/123_nasty_bug_branch` ## Committing documentation Less strict here, it is OK to commit directly in the `develop` branch if you are a collaborator. The documentation is written in **Markdown**. For more information about Markdown [see the GitHub Markdown help page](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax). ### Documentation source files are in [`/packages/mermaid/src/docs`](packages/mermaid/src/docs) The source files for the project documentation are located in the [`/packages/mermaid/src/docs`](packages/mermaid/src/docs) directory. This is where you should make changes. The files under `/packages/mermaid/src/docs` are processed to generate the published documentation, and the resulting files are put into the `/docs` directory. ```mermaid flowchart LR classDef default fill:#fff,color:black,stroke:black source["files in /packages/mermaid/src/docs\n(changes should be done here)"] -- automatic processing\nto generate the final documentation--> published["files in /docs\ndisplayed on the official documentation site"] ``` **_DO NOT CHANGE FILES IN `/docs`_** ### The official documentation site **[The mermaid documentation site](https://mermaid-js.github.io/mermaid/) is powered by [Docsify](https://docsify.js.org), a simple documentation site generator.** If you want to preview the whole documentation site on your machine, you need to install `docsify-cli`: ```sh $ npm i docsify-cli -g ``` If you are more familiar with Yarn, you can use the following command: ```sh $ yarn global add docsify-cli ``` The above command will install `docsify-cli` globally. If the installation is successful, the command `docsify` will be available in your `PATH`. You can now run the following command to serve the documentation site: ```sh $ docsify serve docs ``` Once the local HTTP server is listening, you can point your browser at http://localhost:3000. ## Branching Going forward we will use a git flow inspired approach to branching. So development is done in develop, to do the development in the develop. Once development is done we branch a release branch from develop for testing. Once the release happens we merge the release branch to master and kill the release branch. This means... **branch off your pull request from develop** ## Content of a pull request A new feature has been born. Great! But without the steps below it might just ... fade away ... ### **Add unit tests for the parsing part** This is important so that, if someone else does a change to the grammar that does not know about this great feature, gets notified early on when that change breaks the parser. Another important aspect is that without proper parsing tests refactoring is pretty much impossible. ### **Add e2e tests** This tests the rendering and visual appearance of the diagram. This ensures that the rendering of that feature in the e2e will be reviewed in the release process going forward. Less chance that it breaks! To start working with the e2e tests, run `pnpm run dev` to start the dev server, after that start cypress by running `pnpm exec cypress open` in the mermaid folder. The rendering tests are very straightforward to create. There is a function imgSnapshotTest. This function takes a diagram in text form, the mermaid options and renders that diagram in cypress. When running in ci it will take a snapshot of the rendered diagram and compare it with the snapshot from last build and flag for review it if it differs. This is what a rendering test looks like: ```javascript it('should render forks and joins', () => { imgSnapshotTest( ` stateDiagram state fork_state <<fork>> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <<join>> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] `, { logLevel: 0 } ); cy.get('svg'); }); ``` ### **Add documentation for it** Finally, if it is not in the documentation, no one will know about it and then **no one will use it**. Wouldn't that be sad? With all the effort that was put into the feature? The source files for documentation are in `/packages/mermaid/src/docs` and are written in markdown. Just pick the right section and start typing. See the [Committing Documentation](#committing-documentation) section for more about how the documentation is generated. #### Adding to or changing the documentation organization If you want to add a new section or change the organization (structure), then you need to make sure to **change the side navigation** in `src/docs/_sidebar.md`. When changes are committed and then released, they become part of the `master` branch and become part of the published documentation on https://mermaid-js.github.io/mermaid/ ## Last words Don't get daunted if it is hard in the beginning. We have a great community with only encouraging words. So if you get stuck, ask for help and hints in the slack forum. If you want to show off something good, show it off there. [Join our slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) ![A superhero wishing you good luck](https://media.giphy.com/media/l49JHz7kJvl6MCj3G/giphy.gif) mermaid-js-mermaid-9bb0ed2/LICENSE000066400000000000000000000021011433273745700166650ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2014 - 2022 Knut Sveidqvist Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. mermaid-js-mermaid-9bb0ed2/README.md000066400000000000000000000513071433273745700171530ustar00rootroot00000000000000# mermaid [![Build CI Status](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml/badge.svg)](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [![NPM](https://img.shields.io/npm/v/mermaid)](https://www.npmjs.com/package/mermaid) [![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) [![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) [![Join our Slack!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=slack&label=slack)](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_) # Whoa, what's going on here? We are transforming the Mermaid repository to a so called mono-repo. This is a part of the effort to decouple the diagrams from the core of mermaid. This will: - Make it possible to select which diagrams to include on your site - Open up for lazy loading - Make it possible to add diagrams from outside of the Mermaid repository - Separate the release flow between different diagrams and the Mermaid core As such be aware of some changes.. # We use pnpm now # The source code has moved It is now located in the src folder for each respective package located as subfolders in packages. English | [简体中文](./README.zh-CN.md) :trophy: **Mermaid was nominated and won the [JS Open Source Awards (2019)](https://osawards.com/javascript/2019) in the category "The most exciting use of technology"!!!** **Thanks to all involved, people committing pull requests, people answering questions! 🙏** Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! ## About Mermaid is a JavaScript-based diagramming and charting tool that uses Markdown-inspired text definitions and a renderer to create and modify complex diagrams. The main purpose of Mermaid is to help documentation catch up with development. > Doc-Rot is a Catch-22 that Mermaid helps to solve. Diagramming and documentation costs precious developer time and gets outdated quickly. But not having diagrams or docs ruins productivity and hurts organizational learning.
Mermaid addresses this problem by enabling users to create easily modifiable diagrams. It can also be made part of production scripts (and other pieces of code).

Mermaid allows even non-programmers to easily create detailed diagrams through the [Mermaid Live Editor](https://mermaid.live/).
[Tutorials](./docs/Tutorials.md) has video tutorials. Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](./docs/integrations.md). You can also use Mermaid within [GitHub](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/) as well many of your other favorite applications—check out the list of [Integrations and Usages of Mermaid](./docs/integrations.md). For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](./docs/n00b-overview.md), [Usage](./docs/usage.md) and [Tutorials](./docs/Tutorials.md). 🌐 [CDN](https://unpkg.com/mermaid/) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) | 📜 [Changelog](./docs/CHANGELOG.md) In our release process we rely heavily on visual regression tests using [applitools](https://applitools.com/). Applitools is a great service which has been easy to use and integrate with our tests. ## Examples **The following are some examples of the diagrams, charts and graphs that can be made using Mermaid. Click here to jump into the [text syntax](https://mermaid-js.github.io/mermaid/#/n00b-syntaxReference).** ### Flowchart [docs - live editor] ``` flowchart LR A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] C -->|Two| E[Result 2] ``` ```mermaid flowchart LR A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] C -->|Two| E[Result 2] ``` ### Sequence diagram [docs - live editor] ``` sequenceDiagram Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ```mermaid sequenceDiagram Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ### Gantt chart [docs - live editor] ``` gantt section Section Completed :done, des1, 2014-01-06,2014-01-08 Active :active, des2, 2014-01-07, 3d Parallel 1 : des3, after des1, 1d Parallel 2 : des4, after des1, 1d Parallel 3 : des5, after des3, 1d Parallel 4 : des6, after des4, 1d ``` ```mermaid gantt section Section Completed :done, des1, 2014-01-06,2014-01-08 Active :active, des2, 2014-01-07, 3d Parallel 1 : des3, after des1, 1d Parallel 2 : des4, after des1, 1d Parallel 3 : des5, after des3, 1d Parallel 4 : des6, after des4, 1d ``` ### Class diagram [docs - live editor] ``` classDiagram Class01 <|-- AveryLongClass : Cool <> Class01 Class09 --> C2 : Where am I? Class09 --* C3 Class09 --|> Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla class Class10 { <> int id size() } ``` ```mermaid classDiagram Class01 <|-- AveryLongClass : Cool <> Class01 Class09 --> C2 : Where am I? Class09 --* C3 Class09 --|> Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla class Class10 { <> int id size() } ``` ### State diagram [docs - live editor] ``` stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] ``` ```mermaid stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] ``` ### Pie chart [docs - live editor] ``` pie "Dogs" : 386 "Cats" : 85.9 "Rats" : 15 ``` ```mermaid pie "Dogs" : 386 "Cats" : 85.9 "Rats" : 15 ``` ### Git graph [experimental - live editor] ### User Journey diagram [docs - live editor] ``` journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 3: Me ``` ```mermaid journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 3: Me ``` ### C4 diagram [docs] ``` C4Context title System Context diagram for Internet Banking System Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") Person(customerB, "Banking Customer B") Person_Ext(customerC, "Banking Customer C") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Person(customerD, "Banking Customer D", "A customer of the bank,
with personal bank accounts.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank, with personal bank accounts.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") ``` ```mermaid C4Context title System Context diagram for Internet Banking System Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") Person(customerB, "Banking Customer B") Person_Ext(customerC, "Banking Customer C") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Person(customerD, "Banking Customer D", "A customer of the bank,
with personal bank accounts.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank, with personal bank accounts.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") ``` ## Release For those who have the permission to do so: Update version number in `package.json`. ```sh npm publish ``` The above command generates files into the `dist` folder and publishes them to npmjs.org. ## Related projects - [Command Line Interface](https://github.com/mermaid-js/mermaid-cli) - [Live Editor](https://github.com/mermaid-js/mermaid-live-editor) - [HTTP Server](https://github.com/TomWright/mermaid-server) ## Contributors [![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out. Detailed information about how to contribute can be found in the [contribution guide](CONTRIBUTING.md) ## Security and safe diagrams For public sites, it can be precarious to retrieve text from users on the internet, storing that content for presentation in a browser at a later stage. The reason is that the user content can contain embedded malicious scripts that will run when the data is presented. For Mermaid this is a risk, specially as mermaid diagrams contain many characters that are used in html which makes the standard sanitation unusable as it also breaks the diagrams. We still make an effort to sanitise the incoming code and keep refining the process but it is hard to guarantee that there are no loop holes. As an extra level of security for sites with external users we are happy to introduce a new security level in which the diagram is rendered in a sandboxed iframe preventing javascript in the code from being executed. This is a great step forward for better security. _Unfortunately you can not have a cake and eat it at the same time which in this case means that some of the interactive functionality gets blocked along with the possible malicious code._ ## Reporting vulnerabilities To report a vulnerability, please e-mail security@mermaid.live with a description of the issue, the steps you took to create the issue, affected versions, and if known, mitigations for the issue. ## Appreciation A quick note from Knut Sveidqvist: > _Many thanks to the [d3](https://d3js.org/) and [dagre-d3](https://github.com/cpettitt/dagre-d3) projects for providing the graphical layout and drawing libraries!_ >_Thanks also to the [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) project for usage of the grammar for the sequence diagrams. Thanks to Jessica Peter for inspiration and starting point for gantt rendering._ >_Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._ > > _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_ --- _Mermaid was created by Knut Sveidqvist for easier documentation._ mermaid-js-mermaid-9bb0ed2/README.zh-CN.md000066400000000000000000000455171433273745700200770ustar00rootroot00000000000000# mermaid [![Build CI Status](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml/badge.svg)](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [![NPM](https://img.shields.io/npm/v/mermaid)](https://www.npmjs.com/package/mermaid) [![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) [![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) [![Join our Slack!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=slack&label=slack)](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_) [English](./README.md) | 简体中文 :trophy: **Mermaid 被提名并获得了 [JS Open Source Awards (2019)](https://osawards.com/javascript/2019) 的 "The most exciting use of technology" 奖项!!!** **感谢所有参与进来提交 PR,解答疑问的人们! 🙏** Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! ## 关于 Mermaid Mermaid 是一个基于 Javascript 的图表绘制工具,通过解析类 Markdown 的文本语法来实现图表的创建和动态修改。Mermaid 诞生的主要目的是让文档的更新能够及时跟上开发进度。 > Doc-Rot 是 Mermaid 致力于解决的一个难题。 绘图和编写文档花费了开发者宝贵的开发时间,而且随着业务的变更,它很快就会过期。 但是如果缺少了图表或文档,对于生产力和团队新人的业务学习都会产生巨大的阻碍。
Mermaid 通过允许用户创建便于修改的图表来解决这一难题,它也可以作为生产脚本(或其他代码)的一部分。

Mermaid 甚至能让非程序员也能通过 [Mermaid Live Editor](https://mermaid.live/) 轻松创建详细的图表。
你可以访问 [教程](./docs/Tutorials.md) 来查看 Live Editor 的视频教程,也可以查看 [Mermaid 的集成和使用](./docs/integrations.md) 这个清单来检查你的文档工具是否已经集成了 Mermaid 支持。 如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](./docs/n00b-overview.md), [用法](./docs/usage.md) 和 [教程](./docs/Tutorials.md). 🌐 [CDN](https://unpkg.com/mermaid/) | 📖 [文档](https://mermaidjs.github.io) | 🙌 [贡献](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) | 📜 [更新日志](./docs/CHANGELOG.md) ## 示例 **下面是一些可以使用 Mermaid 创建的图表示例。点击 [语法](https://mermaid-js.github.io/mermaid/#/n00b-syntaxReference) 查看详情。** ### 流程图 [文档 - live editor] ``` flowchart LR A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] C -->|Two| E[Result 2] ``` ```mermaid flowchart LR A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] C -->|Two| E[Result 2] ``` ### 时序图 [文档 - live editor] ``` sequenceDiagram Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ```mermaid sequenceDiagram Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ### 甘特图 [文档 - live editor] ``` gantt section Section Completed :done, des1, 2014-01-06,2014-01-08 Active :active, des2, 2014-01-07, 3d Parallel 1 : des3, after des1, 1d Parallel 2 : des4, after des1, 1d Parallel 3 : des5, after des3, 1d Parallel 4 : des6, after des4, 1d ``` ```mermaid gantt section Section Completed :done, des1, 2014-01-06,2014-01-08 Active :active, des2, 2014-01-07, 3d Parallel 1 : des3, after des1, 1d Parallel 2 : des4, after des1, 1d Parallel 3 : des5, after des3, 1d Parallel 4 : des6, after des4, 1d ``` ### 类图 [文档 - live editor] ``` classDiagram Class01 <|-- AveryLongClass : Cool <> Class01 Class09 --> C2 : Where am I? Class09 --* C3 Class09 --|> Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla class Class10 { <> int id size() } ``` ```mermaid classDiagram Class01 <|-- AveryLongClass : Cool <> Class01 Class09 --> C2 : Where am I? Class09 --* C3 Class09 --|> Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla class Class10 { <> int id size() } ``` ### 状态图 [[docs - live editor] ``` stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] ``` ```mermaid stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] ``` ### 饼图 [文档 - live editor] ``` pie "Dogs" : 386 "Cats" : 85 "Rats" : 15 ``` ```mermaid pie "Dogs" : 386 "Cats" : 85 "Rats" : 15 ``` ### Git 图 [实验特性 - live editor] ### 用户体验旅程图 [文档 - live editor] ``` journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 3: Me ``` ```mermaid journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 3: Me ``` ### C4 图 [文档] ``` C4Context title System Context diagram for Internet Banking System Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") Person(customerB, "Banking Customer B") Person_Ext(customerC, "Banking Customer C") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Person(customerD, "Banking Customer D", "A customer of the bank,
with personal bank accounts.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank, with personal bank accounts.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") ``` ```mermaid C4Context title System Context diagram for Internet Banking System Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") Person(customerB, "Banking Customer B") Person_Ext(customerC, "Banking Customer C") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Person(customerD, "Banking Customer D", "A customer of the bank,
with personal bank accounts.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank, with personal bank accounts.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") ``` ## 发布 对于有权限的同学来说,你可以通过以下步骤来完成发布操作: 更新 `package.json` 中的版本号,然后执行如下命令: ```sh npm publish ``` 以上的命令会将文件打包到 `dist` 目录并发布至 npmjs.org. ## 相关项目 - [Command Line Interface](https://github.com/mermaid-js/mermaid-cli) - [Live Editor](https://github.com/mermaid-js/mermaid-live-editor) - [HTTP Server](https://github.com/TomWright/mermaid-server) ## 贡献者 [![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) Mermaid 是一个不断发展中的社区,并且还在接收新的贡献者。有很多不同的方式可以参与进来,而且我们还在寻找额外的帮助。如果你想知道如何开始贡献,请查看 [这个 issue](https://github.com/mermaid-js/mermaid/issues/866)。 关于如何贡献的详细信息可以在 [贡献指南](CONTRIBUTING.md) 中找到。 ## 安全 对于公开网站来说,从互联网上的用户处检索文本、存储供后续在浏览器中展示的内容可能是不安全的,理由是用户的内容可能嵌入一些数据加载完成之后就会运行的恶意脚本,这些对于 Mermaid 来说毫无疑问是一个风险,尤其是 mermaid 图表还包含了许多在 html 中使用的字符,这意味着我们难以使用常规的手段来过滤不安全代码,因为这些常规手段会造成图表损坏。我们仍然在努力对获取到的代码进行安全过滤并不断完善我们的程序,但很难保证没有漏洞。 作为拥有外部用户的网站的额外安全级别,我们很高兴推出一个新的安全级别,其中的图表在沙盒 iframe 中渲染,防止代码中的 javascript 被执行,这是在安全性方面迈出的一大步。 _很不幸的是,鱼与熊掌不可兼得,在这个场景下它意味着在可能的恶意代码被阻止时,也会损失部分交互能力_。 ## 报告漏洞 如果想要报告漏洞,请发送邮件到 security@mermaid.live, 并附上问题的描述、复现问题的步骤、受影响的版本,以及解决问题的方案(如果有的话)。 ## 鸣谢 来自 Knut Sveidqvist: > _特别感谢 [d3](https://d3js.org/) 和 [dagre-d3](https://github.com/cpettitt/dagre-d3) 这两个优秀的项目,它们提供了图形布局和绘图工具库! _ >_同样感谢 [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) 提供了时序图语法的使用。 感谢 Jessica Peter 提供了甘特图渲染的灵感。_ >_感谢 [Tyler Long](https://github.com/tylerlong) 从 2017 年四月开始成为了项目的合作者。_ > > _感谢越来越多的 [贡献者们](https://github.com/knsv/mermaid/graphs/contributors),没有你们,就没有这个项目的今天!_ --- _Mermaid 是由 Knut Sveidqvist 创建,它为了更简单的文档编写而生。_ mermaid-js-mermaid-9bb0ed2/V10-BreakingChanges.md000066400000000000000000000002721433273745700215700ustar00rootroot00000000000000# A collection of updates that change the behaviour ## Lazy loading and asynchronisity - Invalid dates are rendered as syntax error instead of returning best guess or the current date mermaid-js-mermaid-9bb0ed2/__mocks__/000077500000000000000000000000001433273745700175765ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/__mocks__/d3.ts000066400000000000000000000023071433273745700204560ustar00rootroot00000000000000// @ts-nocheck TODO: Fix TS import { vi } from 'vitest'; const NewD3 = function () { /** * */ function returnThis() { return this; } return { append: function () { return NewD3(); }, lower: returnThis, attr: returnThis, style: returnThis, text: returnThis, 0: { 0: { getBBox: function () { return { height: 10, width: 20, }; }, }, }, }; }; export const select = function () { return new NewD3(); }; export const selectAll = function () { return new NewD3(); }; export const curveBasis = 'basis'; export const curveLinear = 'linear'; export const curveCardinal = 'cardinal'; export const MockD3 = (name, parent) => { const children = []; const elem = { get __children() { return children; }, get __name() { return name; }, get __parent() { return parent; }, }; elem.append = (name) => { const mockElem = MockD3(name, elem); children.push(mockElem); return mockElem; }; elem.lower = vi.fn(() => elem); elem.attr = vi.fn(() => elem); elem.text = vi.fn(() => elem); elem.style = vi.fn(() => elem); return elem; }; mermaid-js-mermaid-9bb0ed2/__mocks__/dagre-d3.ts000066400000000000000000000001161433273745700215320ustar00rootroot00000000000000// DO NOT delete this file. It is used by vitest to mock the dagre-d3 module. mermaid-js-mermaid-9bb0ed2/__mocks__/entity-decode/000077500000000000000000000000001433273745700223335ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/__mocks__/entity-decode/browser.ts000066400000000000000000000000731433273745700243660ustar00rootroot00000000000000module.exports = function (txt: string) { return txt; }; mermaid-js-mermaid-9bb0ed2/applitools.config.js000066400000000000000000000014701433273745700216600ustar00rootroot00000000000000// eslint-disable-next-line @typescript-eslint/no-var-requires const { defineConfig } = require('cypress'); module.exports = defineConfig({ testConcurrency: 1, browser: [ // Add browsers with different viewports // { width: 800, height: 600, name: 'chrome' }, // { width: 700, height: 500, name: 'firefox' }, // { width: 1600, height: 1200, name: 'ie11' }, // { width: 1024, height: 768, name: 'edgechromium' }, // { width: 800, height: 600, name: 'safari' }, // // Add mobile emulation devices in Portrait mode // { deviceName: 'iPhone X', screenOrientation: 'portrait' }, // { deviceName: 'Pixel 2', screenOrientation: 'portrait' }, ], // set batch name to the configuration // batchName: `Mermaid ${process.env.APPLI_BRANCH ?? "'no APPLI_BRANCH set'"}`, }); mermaid-js-mermaid-9bb0ed2/cSpell.json000066400000000000000000000041461433273745700200100ustar00rootroot00000000000000{ "version": "0.2", "language": "en", "words": [ "customizability", "Gantt", "jison", "knsv", "Knut", "mindmap", "Mindmaps", "mitigations", "sandboxed", "Sveidqvist", "verdana", "Visio" ], "ignoreWords": [ "Adamiecki", "applitools", "Asciidoctor", "Astah", "Bisheng", "codedoc", "Docsy", "Doku", "Gitea", "Gitgraph", "Grav", "Inkdrop", "Jaoude", "mdbook", "mermerd", "mkdocs", "phpbb", "Plantuml", "Playfair's", "Podlite", "redmine", "sphinxcontrib", "Tuleap" ], "patterns": [ { "name": "Markdown links", "pattern": "\\((.*)\\)", "description": "" }, { "name": "Markdown code blocks", "pattern": "/^(\\s*`{3,}).*[\\s\\S]*?^\\1/gmx", "description": "Taken from the cSpell example at https://cspell.org/configuration/patterns/#verbose-regular-expressions" }, { "name": "Inline code blocks", "pattern": "\\`([^\\`\\r\\n]+?)\\`", "description": "https://stackoverflow.com/questions/41274241/how-to-capture-inline-markdown-code-but-not-a-markdown-code-fence-with-regex" }, { "name": "Link contents", "pattern": "\\", "description": "" }, { "name": "Snippet references", "pattern": "-- snippet:(.*)", "description": "" }, { "name": "Snippet references 2", "pattern": "\\<\\[sample:(.*)", "description": "another kind of snippet reference" }, { "name": "Multi-line code blocks", "pattern": "/^\\s*```[\\s\\S]*?^\\s*```/gm" }, { "name": "HTML Tags", "pattern": "<[^>]*>", "description": "Reference: https://stackoverflow.com/questions/11229831/regular-expression-to-remove-html-tags-from-a-string" } ], "ignoreRegExpList": [ "Markdown links", "Markdown code blocks", "Inline code blocks", "Link contents", "Snippet references", "Snippet references 2", "Multi-line code blocks", "HTML Tags" ], "ignorePaths": ["packages/mermaid/src/docs/CHANGELOG.md"] } mermaid-js-mermaid-9bb0ed2/cypress.config.cjs000066400000000000000000000012531433273745700213240ustar00rootroot00000000000000/* eslint-disable @typescript-eslint/no-var-requires */ const { defineConfig } = require('cypress'); const { addMatchImageSnapshotPlugin } = require('cypress-image-snapshot/plugin'); module.exports = defineConfig({ projectId: 'n2sma2', e2e: { specPattern: 'cypress/integration/**/*.{js,jsx,ts,tsx}', setupNodeEvents(on, config) { addMatchImageSnapshotPlugin(on, config); // copy any needed variables from process.env to config.env config.env.useAppli = process.env.USE_APPLI ? true : false; // do not forget to return the changed config object! return config; }, }, video: false, }); require('@applitools/eyes-cypress')(module); mermaid-js-mermaid-9bb0ed2/cypress/000077500000000000000000000000001433273745700173565ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/cypress/.eslintrc.json000066400000000000000000000002601433273745700221500ustar00rootroot00000000000000{ "env": { "cypress/globals": true }, "extends": ["plugin:cypress/recommended"], "plugins": ["cypress"], "rules": { "cypress/no-unnecessary-waiting": 0 } } mermaid-js-mermaid-9bb0ed2/cypress/fixtures/000077500000000000000000000000001433273745700212275ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/cypress/fixtures/example.json000066400000000000000000000002331433273745700235530ustar00rootroot00000000000000{ "name": "Using fixtures to represent data", "email": "hello@cypress.io", "body": "Fixtures are a great way to mock data for responses to routes" } mermaid-js-mermaid-9bb0ed2/cypress/helpers/000077500000000000000000000000001433273745700210205ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/cypress/helpers/util.js000066400000000000000000000076171433273745700223460ustar00rootroot00000000000000const utf8ToB64 = (str) => { return window.btoa(unescape(encodeURIComponent(str))); }; const batchId = 'mermid-batch' + new Date().getTime(); export const mermaidUrl = (graphStr, options, api) => { const obj = { code: graphStr, mermaid: options, }; const objStr = JSON.stringify(obj); let url = 'http://localhost:9000/e2e.html?graph=' + utf8ToB64(objStr); if (api) { url = 'http://localhost:9000/xss.html?graph=' + graphStr; } if (options.listUrl) { cy.log(options.listId, ' ', url); } return url; }; export const imgSnapshotTest = (graphStr, _options, api = false, validation) => { cy.log(_options); const options = Object.assign(_options); if (!options.fontFamily) { options.fontFamily = 'courier'; } if (!options.sequence) { options.sequence = {}; } if (!options.sequence || (options.sequence && !options.sequence.actorFontFamily)) { options.sequence.actorFontFamily = 'courier'; } if (options.sequence && !options.sequence.noteFontFamily) { options.sequence.noteFontFamily = 'courier'; } options.sequence.actorFontFamily = 'courier'; options.sequence.noteFontFamily = 'courier'; options.sequence.messageFontFamily = 'courier'; if (options.sequence && !options.sequence.actorFontFamily) { options.sequence.actorFontFamily = 'courier'; } if (!options.fontSize) { options.fontSize = '16px'; } const useAppli = Cypress.env('useAppli'); //const useAppli = false; cy.log('Hello ' + useAppli ? 'Appli' : 'image-snapshot'); const name = (options.name || cy.state('runnable').fullTitle()).replace(/\s+/g, '-'); if (useAppli) { cy.log('Opening eyes ' + Cypress.spec.name + ' --- ' + name); cy.eyesOpen({ appName: 'Mermaid', testName: name, batchName: Cypress.spec.name, batchId: batchId + Cypress.spec.name, }); } const url = mermaidUrl(graphStr, options, api); cy.visit(url); if (validation) cy.get('svg').should(validation); cy.get('svg'); // Default name to test title if (useAppli) { cy.log('Check eyes' + Cypress.spec.name); cy.eyesCheckWindow('Click!'); cy.log('Closing eyes: ' + Cypress.spec.name); cy.eyesClose(); } else { cy.matchImageSnapshot(name); } }; export const urlSnapshotTest = (url, _options, api = false, validation) => { cy.log(_options); const options = Object.assign(_options); if (!options.fontFamily) { options.fontFamily = 'courier'; } if (!options.sequence) { options.sequence = {}; } if (!options.sequence || (options.sequence && !options.sequence.actorFontFamily)) { options.sequence.actorFontFamily = 'courier'; } if (options.sequence && !options.sequence.noteFontFamily) { options.sequence.noteFontFamily = 'courier'; } options.sequence.actorFontFamily = 'courier'; options.sequence.noteFontFamily = 'courier'; options.sequence.messageFontFamily = 'courier'; if (options.sequence && !options.sequence.actorFontFamily) { options.sequence.actorFontFamily = 'courier'; } if (!options.fontSize) { options.fontSize = '16px'; } const useAppli = Cypress.env('useAppli'); cy.log('Hello ' + useAppli ? 'Appli' : 'image-snapshot'); const name = (options.name || cy.state('runnable').fullTitle()).replace(/\s+/g, '-'); if (useAppli) { cy.log('Opening eyes 2' + Cypress.spec.name); cy.eyesOpen({ appName: 'Mermaid', testName: name, batchName: Cypress.spec.name, batchId: batchId + Cypress.spec.name, }); } cy.visit(url); if (validation) cy.get('svg').should(validation); cy.get('body'); // Default name to test title if (useAppli) { cy.log('Check eyes 2' + Cypress.spec.name); cy.eyesCheckWindow('Click!'); cy.log('Closing eyes 2' + Cypress.spec.name); cy.eyesClose(); } else { cy.matchImageSnapshot(name); } }; export const renderGraph = (graphStr, options, api) => { const url = mermaidUrl(graphStr, options, api); cy.visit(url); }; mermaid-js-mermaid-9bb0ed2/cypress/integration/000077500000000000000000000000001433273745700217015ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/cypress/integration/other/000077500000000000000000000000001433273745700230225ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/cypress/integration/other/configuration.spec.js000066400000000000000000000072071433273745700271660ustar00rootroot00000000000000import { renderGraph } from '../../helpers/util'; describe('Configuration', () => { describe('arrowMarkerAbsolute', () => { it('should handle default value false of arrowMarkerAbsolute', () => { renderGraph( `graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, {} ); // Check the marker-end property to make sure it is properly set to // start with # cy.get('.edgePaths').within(() => { cy.get('path') .first() .should('have.attr', 'marker-end') .should('exist') .and('include', 'url(#'); }); }); it('should handle default value false of arrowMarkerAbsolute', () => { renderGraph( `graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, {} ); // Check the marker-end property to make sure it is properly set to // start with # cy.get('.edgePaths').within(() => { cy.get('path') .first() .should('have.attr', 'marker-end') .should('exist') .and('include', 'url(#'); }); }); it('should handle arrowMarkerAbsolute explicitly set to false', () => { renderGraph( `graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { arrowMarkerAbsolute: false, } ); // Check the marker-end property to make sure it is properly set to // start with # cy.get('.edgePaths').within(() => { cy.get('path') .first() .should('have.attr', 'marker-end') .should('exist') .and('include', 'url(#'); }); }); it('should handle arrowMarkerAbsolute explicitly set to "false" as false', () => { renderGraph( `graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { arrowMarkerAbsolute: 'false', } ); // Check the marker-end property to make sure it is properly set to // start with # cy.get('.edgePaths').within(() => { cy.get('path') .first() .should('have.attr', 'marker-end') .should('exist') .and('include', 'url(#'); }); }); it('should handle arrowMarkerAbsolute set to true', () => { renderGraph( `flowchart TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { arrowMarkerAbsolute: true, } ); cy.get('.edgePaths').within(() => { cy.get('path') .first() .should('have.attr', 'marker-end') .should('exist') .and('include', 'url(http://localhost'); }); }); it('should not taint the initial configuration when using multiple directives', () => { const url = 'http://localhost:9000/regression/issue-1874.html'; cy.viewport(1440, 1024); cy.visit(url); cy.get('svg'); cy.matchImageSnapshot( 'configuration.spec-should-not-taint-initial-configuration-when-using-multiple-directives' ); }); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/other/external-diagrams.spec.js000066400000000000000000000007321433273745700277220ustar00rootroot00000000000000describe('mermaid', () => { describe('registerDiagram', () => { it('should work on @mermaid-js/mermaid-mindmap and mermaid-example-diagram', () => { const url = 'http://localhost:9000/external-diagrams-mindmap.html'; cy.visit(url); cy.get('svg', { // may be a bit slower than normal, since vite might need to re-compile mermaid/mermaid-mindmap/mermaid-example-diagram timeout: 10000, }).matchImageSnapshot(); }); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/other/ghsa.spec.js000066400000000000000000000004501433273745700252320ustar00rootroot00000000000000import { urlSnapshotTest } from '../../helpers/util'; describe('CSS injections', () => { it('should not allow CSS injections outside of the diagram', () => { urlSnapshotTest('http://localhost:9000/ghsa1.html', { logLevel: 1, flowchart: { htmlLabels: false }, }); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/other/interaction.spec.js000066400000000000000000000163221433273745700266340ustar00rootroot00000000000000describe('Interaction', () => { describe('Security level loose', () => { beforeEach(() => { cy.visit('http://localhost:9000/click_security_loose.html'); }); it('Graph: should handle a click on a node with a bound function', () => { cy.contains('FunctionTest1').parents('.node').click(); cy.get('.created-by-click').should('have.text', 'Clicked By Flow'); }); it('Graph: should handle a click on a node with a bound function with args', () => { cy.contains('FunctionArgTest2').parents('.node').click(); cy.get('.created-by-click-2').should('have.text', 'Clicked By Flow: ARGUMENT'); }); it('Flowchart: should handle a click on a node with a bound function where the node starts with a number', () => { cy.contains('2FunctionArg').parents('.node').click(); cy.get('.created-by-click-2').should('have.text', 'Clicked By Flow: ARGUMENT'); }); it('Graph: should handle a click on a node with a bound url', () => { // When there is a URL, cy.contains selects the a tag instead of the span. The .node is a child of a, so we have to use find instead of parent. cy.contains('URLTest1').find('.node').click(); cy.location().should(({ href }) => { expect(href).to.eq('http://localhost:9000/empty.html'); }); }); it('Graph: should handle a click on a node with a bound url where the node starts with a number', () => { cy.contains('2URL').find('.node').click(); cy.location().should(({ href }) => { expect(href).to.eq('http://localhost:9000/empty.html'); }); }); it('Flowchart-v2: should handle a click on a node with a bound function', () => { cy.contains('FunctionTest2').parents('.node').click(); cy.get('.created-by-click').should('have.text', 'Clicked By Flow'); }); it('Flowchart-v2: should handle a click on a node with a bound function where the node starts with a number', () => { cy.contains('10Function').parents('.node').click(); cy.get('.created-by-click').should('have.text', 'Clicked By Flow'); }); it('Flowchart-v2: should handle a click on a node with a bound url', () => { cy.contains('URLTest2').find('.node').click(); cy.location().should(({ href }) => { expect(href).to.eq('http://localhost:9000/empty.html'); }); }); it('Flowchart-v2: should handle a click on a node with a bound url where the node starts with a number', () => { cy.contains('20URL').find('.node').click(); cy.location().should(({ href }) => { expect(href).to.eq('http://localhost:9000/empty.html'); }); }); it('should handle a click on a task with a bound URL clicking on the rect', () => { cy.get('rect#cl1').click({ force: true }); cy.location().should(({ href }) => { expect(href).to.eq('http://localhost:9000/empty.html'); }); }); it('should handle a click on a task with a bound URL clicking on the text', () => { cy.get('text#cl1-text').click({ force: true }); cy.location().should(({ href }) => { expect(href).to.eq('http://localhost:9000/empty.html'); }); }); it('should handle a click on a task with a bound function without args', () => { cy.get('rect#cl2').click({ force: true }); cy.get('.created-by-gant-click').should('have.text', 'Clicked By Gant cl2'); }); it('should handle a click on a task with a bound function with args', () => { cy.get('rect#cl3').click({ force: true }); cy.get('.created-by-gant-click').should('have.text', 'Clicked By Gant test1 test2 test3'); }); it('should handle a click on a task with a bound function without args', () => { cy.get('text#cl2-text').click({ force: true }); cy.get('.created-by-gant-click').should('have.text', 'Clicked By Gant cl2'); }); it('should handle a click on a task with a bound function with args ', () => { cy.get('text#cl3-text').click({ force: true }); cy.get('.created-by-gant-click').should('have.text', 'Clicked By Gant test1 test2 test3'); }); }); describe('Interaction - security level tight', () => { beforeEach(() => { cy.visit('http://localhost:9000/click_security_strict.html'); }); it('should handle a click on a node without a bound function', () => { cy.contains('Function1').parents('.node').click(); cy.get('.created-by-click').should('not.exist'); }); it('should handle a click on a node with a bound function where the node starts with a number', () => { cy.contains('1Function').parents('.node').click(); cy.get('.created-by-click').should('not.exist'); }); it('should handle a click on a node with a bound url', () => { cy.contains('URL1').find('.node').click(); cy.location().should(({ href }) => { expect(href).to.eq('http://localhost:9000/empty.html'); }); }); it('should handle a click on a node with a bound url where the node starts with a number', () => { cy.contains('2URL').find('.node').click(); cy.location().should(({ href }) => { expect(href).to.eq('http://localhost:9000/empty.html'); }); }); it('should handle a click on a task with a bound URL clicking on the rect', () => { cy.get('rect#cl1').click({ force: true }); cy.location().should(({ href }) => { expect(href).to.eq('http://localhost:9000/empty.html'); }); }); it('should handle a click on a task with a bound URL clicking on the text', () => { cy.get('text#cl1-text').click({ force: true }); cy.location().should(({ href }) => { expect(href).to.eq('http://localhost:9000/empty.html'); }); }); it('should handle a click on a task with a bound function', () => { cy.get('rect#cl2').click({ force: true }); cy.get('.created-by-gant-click').should('not.exist'); }); it('should handle a click on a task with a bound function', () => { cy.get('text#cl2-text').click({ force: true }); cy.get('.created-by-gant-click').should('not.exist'); }); }); describe('Interaction - security level other, missspelling', () => { beforeEach(() => { cy.visit('http://localhost:9000/click_security_other.html'); }); it('should handle a click on a node with a bound function', () => { cy.contains('Function1').parents('.node').click(); cy.get('.created-by-click').should('not.exist'); }); it('should handle a click on a node with a bound function where the node starts with a number', () => { cy.contains('1Function').parents('.node').click(); cy.get('.created-by-click').should('not.exist'); }); it('should handle a click on a node with a bound url', () => { cy.contains('URL1').find('.node').click(); cy.location().should(({ href }) => { expect(href).to.eq('http://localhost:9000/empty.html'); }); }); it('should handle a click on a task with a bound function', () => { cy.get('rect#cl2').click({ force: true }); cy.get('.created-by-gant-click').should('not.exist'); }); it('should handle a click on a task with a bound function', () => { cy.get('text#cl2-text').click({ force: true }); cy.get('.created-by-gant-click').should('not.exist'); }); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/other/rerender.spec.js000066400000000000000000000012101433273745700261110ustar00rootroot00000000000000describe('Rerendering', () => { it('should be able to render after an error has occurred', () => { const url = 'http://localhost:9000/render-after-error.html'; cy.viewport(1440, 1024); cy.visit(url); cy.get('#graphDiv').should('exist'); }); it('should be able to render and rerender a graph via API', () => { const url = 'http://localhost:9000/rerender.html'; cy.viewport(1440, 1024); cy.visit(url); cy.get('#graph [id^=flowchart-A]').should('have.text', 'XMas'); cy.get('body').find('#rerender').click({ force: true }); cy.get('#graph [id^=flowchart-A]').should('have.text', 'Saturday'); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/other/webpackUsage.spec.js000066400000000000000000000010331433273745700267070ustar00rootroot00000000000000describe('Sequencediagram', () => { it('should render a simple sequence diagrams', () => { const url = 'http://localhost:9000/webpackUsage.html'; cy.visit(url); cy.get('body').find('svg').should('have.length', 1); }); it('should handle html escapings properly', () => { const url = 'http://localhost:9000/webpackUsage.html?test-html-escaping=true'; cy.visit(url); cy.get('body').find('svg').should('have.length', 1); cy.get('g.label > foreignobject > div').should('not.contain.text', ''); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/other/xss.spec.js000066400000000000000000000116071433273745700251330ustar00rootroot00000000000000import { mermaidUrl } from '../../helpers/util.js'; describe('XSS', () => { it('should handle xss in tags', () => { const str = 'eyJjb2RlIjoiXG5ncmFwaCBMUlxuICAgICAgQi0tPkQoPGltZyBvbmVycm9yPWxvY2F0aW9uPWBqYXZhc2NyaXB0XFx1MDAzYXhzc0F0dGFja1xcdTAwMjhkb2N1bWVudC5kb21haW5cXHUwMDI5YCBzcmM9eD4pOyIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In19'; const url = mermaidUrl(str, {}, true); cy.visit(url); cy.wait(1000).then(() => { cy.get('.mermaid').should('exist'); }); cy.get('svg'); }); it('should not allow tags in the css', () => { const str = 'eyJjb2RlIjoiJSV7aW5pdDogeyAnZm9udEZhbWlseSc6ICdcXFwiPjwvc3R5bGU+PGltZyBzcmM9eCBvbmVycm9yPXhzc0F0dGFjaygpPid9IH0lJVxuZ3JhcGggTFJcbiAgICAgQSAtLT4gQiIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0IiwiZmxvd2NoYXJ0Ijp7Imh0bWxMYWJlbHMiOmZhbHNlfX0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9'; const url = mermaidUrl( str, { theme: 'default', flowchart: { htmlMode: false, }, }, true ); cy.visit(url); cy.wait(1000).then(() => { cy.get('#the-malware').should('not.exist'); }); }); it('should handle xss in tags in non-html mode', () => { const str = 'eyJjb2RlIjoiXG5ncmFwaCBMUlxuICAgICAgQi0tPkQoPGltZyBvbmVycm9yPWxvY2F0aW9uPWBqYXZhc2NyaXB0XFx1MDAzYXhzc0F0dGFja1xcdTAwMjhkb2N1bWVudC5kb21haW5cXHUwMDI5YCBzcmM9eD4pOyIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0IiwiZmxvd2NoYXJ0Ijp7Imh0bWxMYWJlbHMiOmZhbHNlfX19'; const url = mermaidUrl( str, { theme: 'default', flowchart: { htmlMode: false, }, }, true ); cy.visit(url); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should not allow changing the __proto__ attribute using config', () => { cy.visit('http://localhost:9000/xss2.html'); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should not allow manipulating htmlLabels into a false positive', () => { cy.visit('http://localhost:9000/xss4.html'); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should not allow manipulating antiscript to run javascript', () => { cy.visit('http://localhost:9000/xss5.html'); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should not allow manipulating antiscript to run javascript using onerror', () => { cy.visit('http://localhost:9000/xss6.html'); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should not allow manipulating antiscript to run javascript using onerror in state diagrams with dagre wrapper', () => { cy.visit('http://localhost:9000/xss8.html'); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should not allow manipulating antiscript to run javascript using onerror in state diagrams with dagre d3', () => { cy.on('uncaught:exception', (_err, _runnable) => { return false; // continue rendering even if there if mermaid throws an error }); cy.visit('http://localhost:9000/xss9.html'); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should not allow manipulating antiscript to run javascript using onerror in state diagrams with dagre d3', () => { cy.visit('http://localhost:9000/xss10.html'); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should not allow manipulating antiscript to run javascript using onerror in state diagrams with dagre d3', () => { cy.visit('http://localhost:9000/xss11.html'); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should not allow manipulating antiscript to run javascript using onerror in state diagrams with dagre d3', () => { cy.visit('http://localhost:9000/xss12.html'); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should not allow manipulating antiscript to run javascript using onerror in state diagrams with dagre d3', () => { cy.visit('http://localhost:9000/xss13.html'); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should not allow manipulating antiscript to run javascript iframes in class diagrams', () => { cy.visit('http://localhost:9000/xss14.html'); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should sanitize cardinalities properly in class diagrams', () => { cy.visit('http://localhost:9000/xss18.html'); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should sanitize colons properly', () => { cy.visit('http://localhost:9000/xss20.html'); cy.wait(1000); cy.get('a').click(''); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); it('should sanitize colons properly', () => { cy.visit('http://localhost:9000/xss21.html'); cy.wait(1000); cy.get('a').click(''); cy.wait(1000); cy.get('#the-malware').should('not.exist'); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/000077500000000000000000000000001433273745700236565ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/appli.spec.js000066400000000000000000000033401433273745700262520ustar00rootroot00000000000000import { imgSnapshotTest } from '../../helpers/util.js'; describe('Git Graph diagram', () => { it('1: should render a simple gitgraph with commit on main branch', () => { imgSnapshotTest( `gitGraph commit id: "1" commit id: "2" commit id: "3" `, {} ); }); // it(`ultraFastTest`, function () { // // Navigate to the url we want to test // // ⭐️ Note to see visual bugs, run the test using the above URL for the 1st run. // // but then change the above URL to https://demo.applitools.com/index_v2.html // // (for the 2nd run) // cy.visit('https://demo.applitools.com'); // // Call Open on eyes to initialize a test session // cy.eyesOpen({ // appName: 'Demo App', // testName: 'Ultrafast grid demo', // }); // // check the login page with fluent api, see more info here // // https://applitools.com/docs/topics/sdk/the-eyes-sdk-check-fluent-api.html // cy.eyesCheckWindow({ // tag: 'Login Window', // target: 'window', // fully: true, // }); // cy.get('#log-in').click(); // // Check the app page // cy.eyesCheckWindow({ // tag: 'App Window', // target: 'window', // fully: true, // }); // // Call Close on eyes to let the server know it should display the results // cy.eyesClose(); // }); // it('works', () => { // cy.visit('https://applitools.com/helloworld'); // cy.eyesOpen({ // appName: 'Hello World!', // testName: 'My first JavaScript test!', // browser: { width: 800, height: 600 }, // }); // cy.eyesCheckWindow('Main Page'); // cy.get('button').click(); // cy.eyesCheckWindow('Click!'); // cy.eyesClose(); // }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/classDiagram-v2.spec.js000066400000000000000000000266211433273745700300730ustar00rootroot00000000000000import { imgSnapshotTest } from '../../helpers/util'; describe('Class diagram V2', () => { it('0: should render a simple class diagram', () => { imgSnapshotTest( ` classDiagram-v2 classA -- classB : Inheritance classA -- classC : link classC -- classD : link classB -- classD `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('1: should render a simple class diagram', () => { imgSnapshotTest( ` classDiagram-v2 Class01 <|-- AveryLongClass : Cool <<interface>> Class01 Class03 *-- Class04 Class05 o-- Class06 Class07 .. Class08 Class09 --> C2 : Where am i? Class09 --* C3 Class09 --|> Class07 Class12 <|.. Class08 Class11 ..>Class12 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class01 : -int privateChimp Class01 : +int publicGorilla Class01 : #int protectedMarmoset Class08 <--> C2: Cool label class Class10 { <<service>> int id test() } `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('2: should render a simple class diagrams with cardinality', () => { imgSnapshotTest( ` classDiagram-v2 Class01 "1" <|--|> "*" AveryLongClass : Cool <<interface>> Class01 Class03 "1" *-- "*" Class04 Class05 "1" o-- "many" Class06 Class07 "1" .. "*" Class08 Class09 "1" --> "*" C2 : Where am i? Class09 "*" --* "*" C3 Class09 "1" --|> "1" Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 "1" <--> "*" C2: Cool label class Class10 { <<service>> int id test() } `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('should render a simple class diagram with different visibilities', () => { imgSnapshotTest( ` classDiagram-v2 Class01 <|-- AveryLongClass : Cool <<interface>> Class01 Class01 : -privateMethod() Class01 : +publicMethod() Class01 : #protectedMethod() Class01 : -int privateChimp Class01 : +int publicGorilla Class01 : #int protectedMarmoset `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('should render multiple class diagrams', () => { imgSnapshotTest( [ ` classDiagram-v2 Class01 "1" <|--|> "*" AveryLongClass : Cool <<interface>> Class01 Class03 "1" *-- "*" Class04 Class05 "1" o-- "many" Class06 Class07 "1" .. "*" Class08 Class09 "1" --> "*" C2 : Where am i? Class09 "*" --* "*" C3 Class09 "1" --|> "1" Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 "1" <--> "*" C2: Cool label class Class10 { <<service>> int id test() } `, ` classDiagram-v2 Class01 "1" <|--|> "*" AveryLongClass : Cool <<interface>> Class01 Class03 "1" *-- "*" Class04 Class05 "1" o-- "many" Class06 Class07 "1" .. "*" Class08 Class09 "1" --> "*" C2 : Where am i? Class09 "*" --* "*" C3 Class09 "1" --|> "1" Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 "1" <--> "*" C2: Cool label class Class10 { <<service>> int id test() } `, ], { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('4: should render a simple class diagram with comments', () => { imgSnapshotTest( ` classDiagram-v2 %% this is a comment Class01 <|-- AveryLongClass : Cool <<interface>> Class01 Class03 *-- Class04 Class05 o-- Class06 Class07 .. Class08 Class09 --> C2 : Where am i? Class09 --* C3 Class09 --|> Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label class Class10 { <<service>> int id test() } `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('5: should render a simple class diagram with abstract method', () => { imgSnapshotTest( ` classDiagram-v2 Class01 <|-- AveryLongClass : Cool Class01 : someMethod()* `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('6: should render a simple class diagram with static method', () => { imgSnapshotTest( ` classDiagram-v2 Class01 <|-- AveryLongClass : Cool Class01 : someMethod()$ `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('7: should render a simple class diagram with Generic class', () => { imgSnapshotTest( ` classDiagram-v2 class Class01~T~ Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label class Class10~T~ { <<service>> int id test() } `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('8: should render a simple class diagram with Generic class and relations', () => { imgSnapshotTest( ` classDiagram-v2 Class01~T~ <|-- AveryLongClass : Cool Class03~T~ *-- Class04~T~ Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label class Class10~T~ { <<service>> int id test() } `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('9: should render a simple class diagram with clickable link', () => { imgSnapshotTest( ` classDiagram-v2 Class01~T~ <|-- AveryLongClass : Cool Class03~T~ *-- Class04~T~ Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label class Class10~T~ { <<service>> int id test() } link Class01 "google.com" "A Tooltip" `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('10: should render a simple class diagram with clickable callback', () => { imgSnapshotTest( ` classDiagram-v2 Class01~T~ <|-- AveryLongClass : Cool Class03~T~ *-- Class04~T~ Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label class Class10~T~ { <<service>> int id test() } callback Class01 "functionCall" "A Tooltip" `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('11: should render a simple class diagram with return type on method', () => { imgSnapshotTest( ` classDiagram-v2 class Class10~T~ { int[] id test(int[] ids) bool testArray() bool[] } `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('12: should render a simple class diagram with generic types', () => { imgSnapshotTest( ` classDiagram-v2 class Class10~T~ { int[] id List~int~ ids test(List~int~ ids) List~bool~ testArray() bool[] } `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('13: should render a simple class diagram with css classes applied', () => { imgSnapshotTest( ` classDiagram-v2 class Class10 { int[] id List~int~ ids test(List~int~ ids) List~bool~ testArray() bool[] } cssClass "Class10" exClass2 `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('14: should render a simple class diagram with css classes applied directly', () => { imgSnapshotTest( ` classDiagram-v2 class Class10:::exClass2 { int[] id List~int~ ids test(List~int~ ids) List~bool~ testArray() bool[] } `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('15: should render a simple class diagram with css classes applied two multiple classes', () => { imgSnapshotTest( ` classDiagram-v2 class Class10 class Class20 cssClass "Class10, class20" exClass2 `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('16a: should render a simple class diagram with static field', () => { imgSnapshotTest( ` classDiagram-v2 class Foo { +String bar$ } `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('16b: should handle the direction statement with TB', () => { imgSnapshotTest( ` classDiagram direction TB class Student { -idCard : IdCard } class IdCard{ -id : int -name : string } class Bike{ -id : int -name : string } Student "1" --o "1" IdCard : carries Student "1" --o "1" Bike : rides `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('18: should handle the direction statement with LR', () => { imgSnapshotTest( ` classDiagram direction LR class Student { -idCard : IdCard } class IdCard{ -id : int -name : string } class Bike{ -id : int -name : string } Student "1" --o "1" IdCard : carries Student "1" --o "1" Bike : rides `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('17a: should handle the direction statement with BT', () => { imgSnapshotTest( ` classDiagram direction BT class Student { -idCard : IdCard } class IdCard{ -id : int -name : string } class Bike{ -id : int -name : string } Student "1" --o "1" IdCard : carries Student "1" --o "1" Bike : rides `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); it('17b: should handle the direction statement with RL', () => { imgSnapshotTest( ` classDiagram direction RL class Student { -idCard : IdCard } class IdCard{ -id : int -name : string } class Bike{ -id : int -name : string } Student "1" --o "1" IdCard : carries Student "1" --o "1" Bike : rides `, { logLevel: 1, flowchart: { htmlLabels: false } } ); cy.get('svg'); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/classDiagram.spec.js000066400000000000000000000237421433273745700275470ustar00rootroot00000000000000import { imgSnapshotTest, renderGraph } from '../../helpers/util'; describe('Class diagram', () => { it('1: should render a simple class diagram', () => { imgSnapshotTest( ` classDiagram Class01 <|-- AveryLongClass : Cool <<interface>> Class01 Class03 *-- Class04 Class05 o-- Class06 Class07 .. Class08 Class09 --> C2 : Where am i? Class09 --* C3 Class09 --|> Class07 Class12 <|.. Class08 Class11 ..>Class12 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class01 : -int privateChimp Class01 : +int publicGorilla Class01 : #int protectedMarmoset Class08 <--> C2: Cool label class Class10 { <<service>> int id test() } `, { logLevel: 1 } ); cy.get('svg'); }); it('2: should render a simple class diagrams with cardinality', () => { imgSnapshotTest( ` classDiagram Class01 "1" <|--|> "*" AveryLongClass : Cool <<interface>> Class01 Class03 "1" *-- "*" Class04 Class05 "1" o-- "many" Class06 Class07 "1" .. "*" Class08 Class09 "1" --> "*" C2 : Where am i? Class09 "*" --* "*" C3 Class09 "1" --|> "1" Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 "1" <--> "*" C2: Cool label class Class10 { <<service>> int id test() } `, {} ); cy.get('svg'); }); it('3: should render a simple class diagram with different visibilities', () => { imgSnapshotTest( ` classDiagram Class01 <|-- AveryLongClass : Cool <<interface>> Class01 Class01 : -privateMethod() Class01 : +publicMethod() Class01 : #protectedMethod() Class01 : -int privateChimp Class01 : +int publicGorilla Class01 : #int protectedMarmoset `, {} ); cy.get('svg'); }); it('4: should render a simple class diagram with comments', () => { imgSnapshotTest( ` classDiagram %% this is a comment Class01 <|-- AveryLongClass : Cool <<interface>> Class01 Class03 *-- Class04 Class05 o-- Class06 Class07 .. Class08 Class09 --> C2 : Where am i? Class09 --* C3 Class09 --|> Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label class Class10 { <<service>> int id test() } `, {} ); cy.get('svg'); }); it('5: should render a simple class diagram with abstract method', () => { imgSnapshotTest( ` classDiagram Class01 <|-- AveryLongClass : Cool Class01 : someMethod()* `, {} ); cy.get('svg'); }); it('6: should render a simple class diagram with static method', () => { imgSnapshotTest( ` classDiagram Class01 <|-- AveryLongClass : Cool Class01 : someMethod()$ `, {} ); cy.get('svg'); }); it('7: should render a simple class diagram with Generic class', () => { imgSnapshotTest( ` classDiagram class Class01~T~ Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label class Class10~T~ { <<service>> int id test() } `, {} ); cy.get('svg'); }); it('8: should render a simple class diagram with Generic class and relations', () => { imgSnapshotTest( ` classDiagram Class01~T~ <|-- AveryLongClass : Cool Class03~T~ *-- Class04~T~ Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label class Class10~T~ { <<service>> int id test() } `, {} ); cy.get('svg'); }); it('9: should render a simple class diagram with clickable link', () => { imgSnapshotTest( ` classDiagram Class01~T~ <|-- AveryLongClass : Cool Class03~T~ *-- Class04~T~ Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label class Class10~T~ { <<service>> int id test() } link Class01 "google.com" "A Tooltip" `, {} ); cy.get('svg'); }); it('10: should render a simple class diagram with clickable callback', () => { imgSnapshotTest( ` classDiagram Class01~T~ <|-- AveryLongClass : Cool Class03~T~ *-- Class04~T~ Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label class Class10~T~ { <<service>> int id test() } callback Class01 "functionCall" "A Tooltip" `, {} ); cy.get('svg'); }); it('11: should render a simple class diagram with return type on method', () => { imgSnapshotTest( ` classDiagram class Class10~T~ { int[] id test(int[] ids) bool testArray() bool[] } `, {} ); cy.get('svg'); }); it('12: should render a simple class diagram with generic types', () => { imgSnapshotTest( ` classDiagram class Class10~T~ { int[] id List~int~ ids test(List~int~ ids) List~bool~ testArray() bool[] } `, {} ); cy.get('svg'); }); it('13: should render a simple class diagram with css classes applied', () => { imgSnapshotTest( ` classDiagram class Class10 { int[] id List~int~ ids test(List~int~ ids) List~bool~ testArray() bool[] } class Class10:::exClass2 `, {} ); cy.get('svg'); }); it('14: should render a simple class diagram with css classes applied directly', () => { imgSnapshotTest( ` classDiagram class Class10:::exClass2 { int[] id List~int~ ids test(List~int~ ids) List~bool~ testArray() bool[] } `, {} ); cy.get('svg'); }); it('15: should render a simple class diagram with css classes applied two multiple classes', () => { imgSnapshotTest( ` classDiagram class Class10 class Class20 cssClass "Class10, Class20" exClass2 class Class20:::exClass2 `, {} ); cy.get('svg'); }); it('16: should render multiple class diagrams', () => { imgSnapshotTest( [ ` classDiagram Class01 "1" <|--|> "*" AveryLongClass : Cool <<interface>> Class01 Class03 "1" *-- "*" Class04 Class05 "1" o-- "many" Class06 Class07 "1" .. "*" Class08 Class09 "1" --> "*" C2 : Where am i? Class09 "*" --* "*" C3 Class09 "1" --|> "1" Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 "1" <--> "*" C2: Cool label class Class10 { <<service>> int id test() } `, ` classDiagram Class01 "1" <|--|> "*" AveryLongClass : Cool <<interface>> Class01 Class03 "1" *-- "*" Class04 Class05 "1" o-- "many" Class06 Class07 "1" .. "*" Class08 Class09 "1" --> "*" C2 : Where am i? Class09 "*" --* "*" C3 Class09 "1" --|> "1" Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 "1" <--> "*" C2: Cool label class Class10 { <<service>> int id test() } `, ], {} ); cy.get('svg'); }); // it('17: should render a class diagram when useMaxWidth is true (default)', () => { // renderGraph( // ` // classDiagram // Class01 <|-- AveryLongClass : Cool // Class01 : size() // Class01 : int chimp // Class01 : int gorilla // Class01 : -int privateChimp // Class01 : +int publicGorilla // Class01 : #int protectedMarmoset // `, // { class: { useMaxWidth: true } } // ); // cy.get('svg') // .should((svg) => { // expect(svg).to.have.attr('width', '100%'); // const height = parseFloat(svg.attr('height')); // expect(height).to.be.within(332, 333); // // expect(svg).to.have.attr('height', '218'); // const style = svg.attr('style'); // expect(style).to.match(/^max-width: [\d.]+px;$/); // const maxWidthValue = parseInt(style.match(/[\d.]+/g).join('')); // // use within because the absolute value can be slightly different depending on the environment ±5% // expect(maxWidthValue).to.be.within(203, 204); // }); // }); // it('18: should render a class diagram when useMaxWidth is false', () => { // renderGraph( // ` // classDiagram // Class01 <|-- AveryLongClass : Cool // Class01 : size() // Class01 : int chimp // Class01 : int gorilla // Class01 : -int privateChimp // Class01 : +int publicGorilla // Class01 : #int protectedMarmoset // `, // { class: { useMaxWidth: false } } // ); // cy.get('svg') // .should((svg) => { // const width = parseFloat(svg.attr('width')); // // use within because the absolute value can be slightly different depending on the environment ±5% // expect(width).to.be.within(100, 101); // const height = parseFloat(svg.attr('height')); // expect(height).to.be.within(332, 333); // // expect(svg).to.have.attr('height', '332'); // // expect(svg).to.not.have.attr('style'); // }); // }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/conf-and-directives.spec.js000066400000000000000000000066501433273745700310000ustar00rootroot00000000000000import { imgSnapshotTest } from '../../helpers/util.js'; describe('Configuration and directives - nodes should be light blue', () => { it('No config - use default', () => { imgSnapshotTest( ` graph TD A(Default) --> B[/Another/] A --> C[End] subgraph section B C end `, {} ); cy.get('svg'); }); it('Settings from initialize - nodes should be green', () => { imgSnapshotTest( ` graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end `, { theme: 'forest' } ); cy.get('svg'); }); it('Settings from initialize overriding themeVariable - nodes should be red', () => { imgSnapshotTest( ` %%{init: { 'theme': 'base', 'themeVariables':{ 'primaryColor': '#ff0000'}}}%% graph TD A(Start) --> B[/Another/] A[/Another/] --> C[End] subgraph section B C end `, { theme: 'base', themeVariables: { primaryColor: '#ff0000' }, logLevel: 0 } ); cy.get('svg'); }); it('Settings from directive - nodes should be grey', () => { imgSnapshotTest( ` %%{init: { 'logLevel': 0, 'theme': 'neutral'} }%% graph TD A(Start) --> B[/Another/] A[/Another/] --> C[End] subgraph section B C end `, {} ); cy.get('svg'); }); it('Settings from directive overriding theme variable - nodes should be red', () => { imgSnapshotTest( ` %%{init: {'theme': 'base', 'themeVariables':{ 'primaryColor': '#ff0000'}}}%% graph TD A(Start) --> B[/Another/] A[/Another/] --> C[End] subgraph section B C end `, {} ); cy.get('svg'); }); it('Settings from initialize and directive - nodes should be grey', () => { imgSnapshotTest( ` %%{init: { 'logLevel': 0, 'theme': 'neutral'} }%% graph TD A(Start) --> B[/Another/] A[/Another/] --> C[End] subgraph section B C end `, { theme: 'forest' } ); cy.get('svg'); }); it('Theme from initialize, directive overriding theme variable - nodes should be red', () => { imgSnapshotTest( ` %%{init: {'theme': 'base', 'themeVariables':{ 'primaryColor': '#ff0000'}}}%% graph TD A(Start) --> B[/Another/] A[/Another/] --> C[End] subgraph section B C end `, { theme: 'base' } ); cy.get('svg'); }); it('Theme variable from initialize, theme from directive - nodes should be red', () => { imgSnapshotTest( ` %%{init: { 'logLevel': 0, 'theme': 'base'} }%% graph TD A(Start) --> B[/Another/] A[/Another/] --> C[End] subgraph section B C end `, { themeVariables: { primaryColor: '#ff0000' } } ); cy.get('svg'); }); describe('when rendering several diagrams', () => { it('diagrams should not taint later diagrams', () => { const url = 'http://localhost:9000/theme-directives.html'; cy.visit(url); cy.get('svg'); cy.matchImageSnapshot('conf-and-directives.spec-when-rendering-several-diagrams-diagram-1'); }); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/current.spec.js000066400000000000000000000005421433273745700266300ustar00rootroot00000000000000import { imgSnapshotTest } from '../../helpers/util'; describe('State diagram', () => { it('should render a state with states in it', () => { imgSnapshotTest( ` stateDiagram state PersonalizedCockpit { Other state Parent { C } } `, { logLevel: 0, } ); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/debug.spec.js000066400000000000000000000004401433273745700262310ustar00rootroot00000000000000import { imgSnapshotTest } from '../../helpers/util'; describe('Flowchart', () => { it('34: testing the label width in percy', () => { imgSnapshotTest( `graph TD A[Christmas] `, { theme: 'forest', fontFamily: '"Noto Sans SC", sans-serif' } ); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/erDiagram.spec.js000066400000000000000000000141441433273745700270440ustar00rootroot00000000000000import { imgSnapshotTest, renderGraph } from '../../helpers/util'; describe('Entity Relationship Diagram', () => { it('should render a simple ER diagram', () => { imgSnapshotTest( ` erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains `, { logLevel: 1 } ); cy.get('svg'); }); it('should render an ER diagram with a recursive relationship', () => { imgSnapshotTest( ` erDiagram CUSTOMER ||..o{ CUSTOMER : refers CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains `, { logLevel: 1 } ); cy.get('svg'); }); it('should render an ER diagram with multiple relationships between the same two entities', () => { imgSnapshotTest( ` erDiagram CUSTOMER ||--|{ ADDRESS : "invoiced at" CUSTOMER ||--|{ ADDRESS : "receives goods at" `, { logLevel: 1 } ); cy.get('svg'); }); it('should render a cyclical ER diagram', () => { imgSnapshotTest( ` erDiagram A ||--|{ B : likes B ||--|{ C : likes C ||--|{ A : likes `, { logLevel: 1 } ); cy.get('svg'); }); it('should render a not-so-simple ER diagram', () => { imgSnapshotTest( ` erDiagram CUSTOMER }|..|{ DELIVERY-ADDRESS : has CUSTOMER ||--o{ ORDER : places CUSTOMER ||--o{ INVOICE : "liable for" DELIVERY-ADDRESS ||--o{ ORDER : receives INVOICE ||--|{ ORDER : covers ORDER ||--|{ ORDER-ITEM : includes PRODUCT-CATEGORY ||--|{ PRODUCT : contains PRODUCT ||--o{ ORDER-ITEM : "ordered in" `, { logLevel: 1 } ); cy.get('svg'); }); it('should render multiple ER diagrams', () => { imgSnapshotTest( [ ` erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains `, ` erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains `, ], { logLevel: 1 } ); cy.get('svg'); }); it('should render an ER diagram with blank or empty labels', () => { imgSnapshotTest( ` erDiagram BOOK }|..|{ AUTHOR : "" BOOK }|..|{ GENRE : " " AUTHOR }|..|{ GENRE : " " `, { logLevel: 1 } ); cy.get('svg'); }); it('should render an ER diagrams when useMaxWidth is true (default)', () => { renderGraph( ` erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains `, { er: { useMaxWidth: true } } ); cy.get('svg').should((svg) => { expect(svg).to.have.attr('width', '100%'); // expect(svg).to.have.attr('height', '465'); const style = svg.attr('style'); expect(style).to.match(/^max-width: [\d.]+px;$/); const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join('')); // use within because the absolute value can be slightly different depending on the environment ±5% expect(maxWidthValue).to.be.within(140 * 0.95, 140 * 1.05); }); }); it('should render an ER when useMaxWidth is false', () => { renderGraph( ` erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains `, { er: { useMaxWidth: false } } ); cy.get('svg').should((svg) => { const width = parseFloat(svg.attr('width')); // use within because the absolute value can be slightly different depending on the environment ±5% expect(width).to.be.within(140 * 0.95, 140 * 1.05); // expect(svg).to.have.attr('height', '465'); expect(svg).to.not.have.attr('style'); }); }); it('should render entities that have no relationships', () => { renderGraph( ` erDiagram DEAD_PARROT HERMIT RECLUSE SOCIALITE }o--o{ SOCIALITE : "interacts with" RECLUSE }o--o{ SOCIALITE : avoids `, { er: { useMaxWidth: false } } ); cy.get('svg'); }); it('should render entities with and without attributes', () => { renderGraph( ` erDiagram BOOK { string title } AUTHOR }|..|{ BOOK : writes BOOK { float price } `, { logLevel: 1 } ); cy.get('svg'); }); it.only('should render entities with generic and array attributes', () => { renderGraph( ` erDiagram BOOK { string title string[] authors type~T~ type } `, { logLevel: 1 } ); cy.get('svg'); }); it('should render entities and attributes with big and small entity names', () => { renderGraph( ` erDiagram PRIVATE_FINANCIAL_INSTITUTION { string name int turnover } PRIVATE_FINANCIAL_INSTITUTION ||..|{ EMPLOYEE : employs EMPLOYEE { bool officer_of_firm } `, { logLevel: 1 } ); cy.get('svg'); }); it('should render entities with keys', () => { renderGraph( ` erDiagram AUTHOR_WITH_LONG_ENTITY_NAME { string name PK } AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes BOOK { float price string author FK string title PK } `, { logLevel: 1 } ); cy.get('svg'); }); it('should render entities with comments', () => { renderGraph( ` erDiagram AUTHOR_WITH_LONG_ENTITY_NAME { string name "comment" } AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes BOOK { string author string title "author comment" float price "price comment" } `, { logLevel: 1 } ); cy.get('svg'); }); it('should render entities with keys and comments', () => { renderGraph( ` erDiagram AUTHOR_WITH_LONG_ENTITY_NAME { string name PK "comment" } AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes BOOK { string description float price "price comment" string title PK "title comment" string author FK } `, { logLevel: 1 } ); cy.get('svg'); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/flowchart-v2.spec.js000066400000000000000000000400661433273745700274710ustar00rootroot00000000000000import { imgSnapshotTest, renderGraph } from '../../helpers/util'; describe('Flowchart v2', () => { it('1: should render a simple flowchart', () => { imgSnapshotTest( `flowchart TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, {} ); }); it('2: should render a simple flowchart with diagramPadding set to 0', () => { imgSnapshotTest( `flowchart TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} %% this is a comment C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { flowchart: { diagramPadding: 0 } } ); }); it('3: a link with correct arrowhead to a subgraph', () => { imgSnapshotTest( `flowchart TD P1 P1 -->P1.5 subgraph P1.5 P2 P2.5(( A )) P3 end P2 --> P4 P3 --> P6 P1.5 --> P5 `, {} ); }); it('4: Length of edges', () => { imgSnapshotTest( `flowchart TD L1 --- L2 L2 --- C M1 ---> C R1 .-> R2 R2 <.-> C C -->|Label 1| E1 C <-- Label 2 ---> E2 C ----> E3 C <-...-> E4 C ======> E5 `, {} ); }); it('5: should render escaped without html labels', () => { imgSnapshotTest( `flowchart TD a["Haiya"]---->b `, { htmlLabels: false, flowchart: { htmlLabels: false } } ); }); it('6: should render non-escaped with html labels', () => { imgSnapshotTest( `flowchart TD a["Haiya"]===>b `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('7: should render a flowchart when useMaxWidth is true (default)', () => { renderGraph( `flowchart TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { flowchart: { useMaxWidth: true } } ); cy.get('svg').should((svg) => { expect(svg).to.have.attr('width', '100%'); // expect(svg).to.have.attr('height'); // use within because the absolute value can be slightly different depending on the environment ±5% // const height = parseFloat(svg.attr('height')); // expect(height).to.be.within(446 * 0.95, 446 * 1.05); const style = svg.attr('style'); expect(style).to.match(/^max-width: [\d.]+px;$/); const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join('')); expect(maxWidthValue).to.be.within(290 * 0.95 - 1, 290 * 1.05); }); }); it('8: should render a flowchart when useMaxWidth is false', () => { renderGraph( `flowchart TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { flowchart: { useMaxWidth: false } } ); cy.get('svg').should((svg) => { // const height = parseFloat(svg.attr('height')); const width = parseFloat(svg.attr('width')); // use within because the absolute value can be slightly different depending on the environment ±5% // expect(height).to.be.within(446 * 0.95, 446 * 1.05); expect(width).to.be.within(290 * 0.95 - 1, 290 * 1.05); expect(svg).to.not.have.attr('style'); }); }); it('V2 - 16: Render Stadium shape', () => { imgSnapshotTest( ` flowchart TD A([stadium shape test]) A -->|Get money| B([Go shopping]) B --> C([Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?]) C -->|One| D([Laptop]) C -->|Two| E([iPhone]) C -->|Three| F([Car
wroom wroom]) click A "index.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass; `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('50: handle nested subgraphs in reverse order', () => { imgSnapshotTest( `flowchart LR a -->b subgraph A B end subgraph B b end `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('51: handle nested subgraphs in reverse order', () => { imgSnapshotTest( `flowchart LR a -->b subgraph A B end subgraph B b end `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('52: handle nested subgraphs in several levels', () => { imgSnapshotTest( `flowchart TB b-->B a-->c subgraph O A end subgraph B c end subgraph A a b B end `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('53: handle nested subgraphs with edges in and out', () => { imgSnapshotTest( `flowchart TB internet nat routeur lb1 lb2 compute1 compute2 subgraph project routeur nat subgraph subnet1 compute1 lb1 end subgraph subnet2 compute2 lb2 end end internet --> routeur routeur --> subnet1 & subnet2 subnet1 & subnet2 --> nat --> internet `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('54: handle nested subgraphs with outgoing links', () => { imgSnapshotTest( `flowchart TD subgraph main subgraph subcontainer subcontainer-child end subcontainer-child--> subcontainer-sibling end `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('55: handle nested subgraphs with outgoing links 2', () => { imgSnapshotTest( `flowchart TD subgraph one[One] subgraph sub_one[Sub One] _sub_one end subgraph sub_two[Sub Two] _sub_two end _one end %% here, either the first or the second one sub_one --> sub_two _one --> b `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('56: handle nested subgraphs with outgoing links 3', () => { imgSnapshotTest( `flowchart TB subgraph container_Beta process_C-->Process_D end subgraph container_Alpha process_A-->process_B process_A-->|messages|process_C end process_B-->|via_AWSBatch|container_Beta `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('57: handle nested subgraphs with outgoing links 4', () => { imgSnapshotTest( `flowchart LR subgraph A a -->b end subgraph B b end `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('57: handle nested subgraphs with outgoing links 2', () => { imgSnapshotTest( `flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end one --> two three --> two two --> c2 `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('57.x: handle nested subgraphs with outgoing links 5', () => { imgSnapshotTest( `%% this does not produce the desired result flowchart TB subgraph container_Beta process_C-->Process_D end subgraph container_Alpha process_A-->process_B process_B-->|via_AWSBatch|container_Beta process_A-->|messages|process_C end `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('58: handle styling with style expressions', () => { imgSnapshotTest( ` flowchart LR id1(Start)-->id2(Stop) style id1 fill:#f9f,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5 `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('59: handle styling of subgraphs and links', () => { imgSnapshotTest( ` flowchart TD A[Christmas] ==> D A[Christmas] -->|Get money| B(Go shopping) A[Christmas] ==> C subgraph T ["Test"] A B C end classDef Test fill:#F84E68,stroke:#333,color:white; class A,T Test classDef TestSub fill:green; class T TestSub linkStyle 0,1 color:orange, stroke: orange; `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('60: handle styling for all node shapes - v2', () => { imgSnapshotTest( ` flowchart LR A[red text] -->|default style| B(blue text) C([red text]) -->|default style| D[[blue text]] E[(red text)] -->|default style| F((blue text)) G>red text] -->|default style| H{blue text} I{{red text}} -->|default style| J[/blue text/] K[\\ red text\\] -->|default style| L[/blue text\\] M[\\ red text/] -->|default style| N[blue text]; O(((red text))) -->|default style| P(((blue text))); linkStyle default color:Sienna; style A stroke:#ff0000,fill:#ffcccc,color:#ff0000; style B stroke:#0000ff,fill:#ccccff,color:#0000ff; style C stroke:#ff0000,fill:#ffcccc,color:#ff0000; style D stroke:#0000ff,fill:#ccccff,color:#0000ff; style E stroke:#ff0000,fill:#ffcccc,color:#ff0000; style F stroke:#0000ff,fill:#ccccff,color:#0000ff; style G stroke:#ff0000,fill:#ffcccc,color:#ff0000; style H stroke:#0000ff,fill:#ccccff,color:#0000ff; style I stroke:#ff0000,fill:#ffcccc,color:#ff0000; style J stroke:#0000ff,fill:#ccccff,color:#0000ff; style K stroke:#ff0000,fill:#ffcccc,color:#ff0000; style L stroke:#0000ff,fill:#ccccff,color:#0000ff; style M stroke:#ff0000,fill:#ffcccc,color:#ff0000; style N stroke:#0000ff,fill:#ccccff,color:#0000ff; style O stroke:#ff0000,fill:#ffcccc,color:#ff0000; style P stroke:#0000ff,fill:#ccccff,color:#0000ff; `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose', logLevel: 2 } ); }); it('61: fontawesome icons in edge labels', () => { imgSnapshotTest( ` flowchart TD C -->|fa:fa-car Car| F[fa:fa-car Car] `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('62: should render styled subgraphs', () => { imgSnapshotTest( ` flowchart TB A B subgraph foo[Foo SubGraph] C D end subgraph bar[Bar SubGraph] E F end G A-->B B-->C C-->D B-->D D-->E E-->A E-->F F-->D F-->G B-->G G-->D style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('63: title on subgraphs should be themable', () => { imgSnapshotTest( ` %%{init:{"theme":"base", "themeVariables": {"primaryColor":"#411d4e", "titleColor":"white", "darkMode":true}}}%% flowchart LR subgraph A a --> b end subgraph B i -->f end A --> B `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('65: text-color from classes', () => { imgSnapshotTest( ` flowchart LR classDef dark fill:#000,stroke:#000,stroke-width:4px,color:#fff Lorem --> Ipsum --> Dolor class Lorem,Dolor dark `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('66: More nested subgraph cases (TB)', () => { imgSnapshotTest( ` flowchart TB subgraph two b1 end subgraph three c2 end three --> two two --> c2 `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('67: More nested subgraph cases (RL)', () => { imgSnapshotTest( ` flowchart RL subgraph two b1 end subgraph three c2 end three --> two two --> c2 `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('68: More nested subgraph cases (BT)', () => { imgSnapshotTest( ` flowchart BT subgraph two b1 end subgraph three c2 end three --> two two --> c2 `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('69: More nested subgraph cases (LR)', () => { imgSnapshotTest( ` flowchart LR subgraph two b1 end subgraph three c2 end three --> two two --> c2 `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('70: Handle nested subgraph cases (TB) link out and link between subgraphs', () => { imgSnapshotTest( ` flowchart TB subgraph S1 sub1 -->sub2 end subgraph S2 sub4 end S1 --> S2 sub1 --> sub4 `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('71: Handle nested subgraph cases (RL) link out and link between subgraphs', () => { imgSnapshotTest( ` flowchart RL subgraph S1 sub1 -->sub2 end subgraph S2 sub4 end S1 --> S2 sub1 --> sub4 `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('72: Handle nested subgraph cases (BT) link out and link between subgraphs', () => { imgSnapshotTest( ` flowchart BT subgraph S1 sub1 -->sub2 end subgraph S2 sub4 end S1 --> S2 sub1 --> sub4 `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('74: Handle nested subgraph cases (RL) link out and link between subgraphs', () => { imgSnapshotTest( ` flowchart RL subgraph S1 sub1 -->sub2 end subgraph S2 sub4 end S1 --> S2 sub1 --> sub4 `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('74: Handle labels for multiple edges from and to the same couple of nodes', () => { imgSnapshotTest( ` flowchart RL subgraph one a1 -- l1 --> a2 a1 -- l2 --> a2 end `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('76: handle unicode encoded character with HTML labels true', () => { imgSnapshotTest( `flowchart TB a{{"Lorem 'ipsum' dolor 'sit' amet, 'consectetur' adipiscing 'elit'."}} --> b{{"Lorem #quot;ipsum#quot; dolor #quot;sit#quot; amet,#quot;consectetur#quot; adipiscing #quot;elit#quot;."}} `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('2050: handling of different rendering direction in subgraphs', () => { imgSnapshotTest( ` flowchart LR subgraph TOP direction TB subgraph B1 direction RL i1 -->f1 end subgraph B2 direction BT i2 -->f2 end end A --> TOP --> B B1 --> B2 `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('2388: handling default in the node name', () => { imgSnapshotTest( ` flowchart LR default-index.js --> dot.template.js index.js --> module-utl.js `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('2824: Clipping of edges', () => { imgSnapshotTest( ` flowchart TD A --> B A --> C B --> C `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/flowchart.spec.js000066400000000000000000000753731433273745700271550ustar00rootroot00000000000000import { imgSnapshotTest, renderGraph } from '../../helpers/util'; describe('Graph', () => { it('1: should render a simple flowchart no htmlLabels', () => { imgSnapshotTest( `graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('2: should render a simple flowchart with htmlLabels', () => { imgSnapshotTest( `graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { flowchart: { htmlLabels: true }, fontFamily: 'courier' } ); }); it('3: should render a simple flowchart with line breaks', () => { imgSnapshotTest( ` graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me thinksssss
ssssssssssssssssssssss
sssssssssssssssssssssssssss} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[Car] `, { fontFamily: 'courier' } ); }); it('4: should render a simple flowchart with trapezoid and inverse trapezoid vertex options.', () => { imgSnapshotTest( ` graph TD A[/Christmas\\] A -->|Get money| B[\\Go shopping/] B --> C{Let me thinksssss
ssssssssssssssssssssss
sssssssssssssssssssssssssss} C -->|One| D[/Laptop/] C -->|Two| E[\\iPhone\\] C -->|Three| F[Car] `, { fontFamily: 'courier' } ); }); it('5: should style nodes via a class.', () => { imgSnapshotTest( ` graph TD 1A --> 1B 1B --> 1C 1C --> D 1C --> E classDef processHead fill:#888888,color:white,font-weight:bold,stroke-width:3px,stroke:#001f3f class 1A,1B,D,E processHead `, { fontFamily: 'courier' } ); }); it('6: should render a flowchart full of circles', () => { imgSnapshotTest( ` graph LR 47(SAM.CommonFA.FMESummary)-->48(SAM.CommonFA.CommonFAFinanceBudget) 37(SAM.CommonFA.BudgetSubserviceLineVolume)-->48(SAM.CommonFA.CommonFAFinanceBudget) 35(SAM.CommonFA.PopulationFME)-->47(SAM.CommonFA.FMESummary) 41(SAM.CommonFA.MetricCost)-->47(SAM.CommonFA.FMESummary) 44(SAM.CommonFA.MetricOutliers)-->47(SAM.CommonFA.FMESummary) 46(SAM.CommonFA.MetricOpportunity)-->47(SAM.CommonFA.FMESummary) 40(SAM.CommonFA.OPVisits)-->47(SAM.CommonFA.FMESummary) 38(SAM.CommonFA.CommonFAFinanceRefund)-->47(SAM.CommonFA.FMESummary) 43(SAM.CommonFA.CommonFAFinancePicuDays)-->47(SAM.CommonFA.FMESummary) 42(SAM.CommonFA.CommonFAFinanceNurseryDays)-->47(SAM.CommonFA.FMESummary) 45(SAM.CommonFA.MetricPreOpportunity)-->46(SAM.CommonFA.MetricOpportunity) 35(SAM.CommonFA.PopulationFME)-->45(SAM.CommonFA.MetricPreOpportunity) 41(SAM.CommonFA.MetricCost)-->45(SAM.CommonFA.MetricPreOpportunity) 41(SAM.CommonFA.MetricCost)-->44(SAM.CommonFA.MetricOutliers) 39(SAM.CommonFA.ChargeDetails)-->43(SAM.CommonFA.CommonFAFinancePicuDays) 39(SAM.CommonFA.ChargeDetails)-->42(SAM.CommonFA.CommonFAFinanceNurseryDays) 39(SAM.CommonFA.ChargeDetails)-->41(SAM.CommonFA.MetricCost) 39(SAM.CommonFA.ChargeDetails)-->40(SAM.CommonFA.OPVisits) 35(SAM.CommonFA.PopulationFME)-->39(SAM.CommonFA.ChargeDetails) 36(SAM.CommonFA.PremetricCost)-->39(SAM.CommonFA.ChargeDetails) `, { fontFamily: 'courier' } ); }); it('7: should render a flowchart full of icons', () => { imgSnapshotTest( ` graph TD 9e122290_1ec3_e711_8c5a_005056ad0002("fa:fa-creative-commons My System | Test Environment") 82072290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Business Logic Server:Service 1") db052290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Business Logic Server:Service 2") 4e112290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Report Server:Service 1") 30122290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Report Server:Service 2") 5e112290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Dedicated Test Business Logic Server:Service 1") c1112290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Dedicated Test Business Logic Server:Service 2") b7042290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\\SharedDbInstance].[SupportDb]") 8f102290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\\SharedDbInstance].[DevelopmentDb]") 0e102290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\\SharedDbInstance].[TestDb]") 07132290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\\SharedDbInstance].[SharedReportingDb]") c7072290_1ec3_e711_8c5a_005056ad0002("fa:fa-server Shared Business Logic Server") ca122290_1ec3_e711_8c5a_005056ad0002("fa:fa-server Shared Report Server") 68102290_1ec3_e711_8c5a_005056ad0002("fa:fa-server Dedicated Test Business Logic Server") f4112290_1ec3_e711_8c5a_005056ad0002("fa:fa-database [DBServer\\SharedDbInstance]") d6072290_1ec3_e711_8c5a_005056ad0002("fa:fa-server DBServer") 71082290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs DBServer\\:MSSQLSERVER") c0102290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs DBServer\\:SQLAgent") 9a072290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs DBServer\\:SQLBrowser") 1d0a2290_1ec3_e711_8c5a_005056ad0002("fa:fa-server VmHost1") 200a2290_1ec3_e711_8c5a_005056ad0002("fa:fa-server VmHost2") 1c0a2290_1ec3_e711_8c5a_005056ad0002("fa:fa-server VmHost3") 9e122290_1ec3_e711_8c5a_005056ad0002-->82072290_1ec3_e711_8c5a_005056ad0002 9e122290_1ec3_e711_8c5a_005056ad0002-->db052290_1ec3_e711_8c5a_005056ad0002 9e122290_1ec3_e711_8c5a_005056ad0002-->4e112290_1ec3_e711_8c5a_005056ad0002 9e122290_1ec3_e711_8c5a_005056ad0002-->30122290_1ec3_e711_8c5a_005056ad0002 9e122290_1ec3_e711_8c5a_005056ad0002-->5e112290_1ec3_e711_8c5a_005056ad0002 9e122290_1ec3_e711_8c5a_005056ad0002-->c1112290_1ec3_e711_8c5a_005056ad0002 82072290_1ec3_e711_8c5a_005056ad0002-->b7042290_1ec3_e711_8c5a_005056ad0002 82072290_1ec3_e711_8c5a_005056ad0002-->8f102290_1ec3_e711_8c5a_005056ad0002 82072290_1ec3_e711_8c5a_005056ad0002-->0e102290_1ec3_e711_8c5a_005056ad0002 82072290_1ec3_e711_8c5a_005056ad0002-->c7072290_1ec3_e711_8c5a_005056ad0002 db052290_1ec3_e711_8c5a_005056ad0002-->c7072290_1ec3_e711_8c5a_005056ad0002 db052290_1ec3_e711_8c5a_005056ad0002-->82072290_1ec3_e711_8c5a_005056ad0002 4e112290_1ec3_e711_8c5a_005056ad0002-->b7042290_1ec3_e711_8c5a_005056ad0002 4e112290_1ec3_e711_8c5a_005056ad0002-->8f102290_1ec3_e711_8c5a_005056ad0002 4e112290_1ec3_e711_8c5a_005056ad0002-->0e102290_1ec3_e711_8c5a_005056ad0002 4e112290_1ec3_e711_8c5a_005056ad0002-->07132290_1ec3_e711_8c5a_005056ad0002 4e112290_1ec3_e711_8c5a_005056ad0002-->ca122290_1ec3_e711_8c5a_005056ad0002 30122290_1ec3_e711_8c5a_005056ad0002-->ca122290_1ec3_e711_8c5a_005056ad0002 30122290_1ec3_e711_8c5a_005056ad0002-->4e112290_1ec3_e711_8c5a_005056ad0002 5e112290_1ec3_e711_8c5a_005056ad0002-->8f102290_1ec3_e711_8c5a_005056ad0002 5e112290_1ec3_e711_8c5a_005056ad0002-->68102290_1ec3_e711_8c5a_005056ad0002 c1112290_1ec3_e711_8c5a_005056ad0002-->68102290_1ec3_e711_8c5a_005056ad0002 c1112290_1ec3_e711_8c5a_005056ad0002-->5e112290_1ec3_e711_8c5a_005056ad0002 b7042290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002 8f102290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002 0e102290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002 07132290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002 c7072290_1ec3_e711_8c5a_005056ad0002-->1d0a2290_1ec3_e711_8c5a_005056ad0002 ca122290_1ec3_e711_8c5a_005056ad0002-->200a2290_1ec3_e711_8c5a_005056ad0002 68102290_1ec3_e711_8c5a_005056ad0002-->1c0a2290_1ec3_e711_8c5a_005056ad0002 f4112290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002 f4112290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002 f4112290_1ec3_e711_8c5a_005056ad0002-->c0102290_1ec3_e711_8c5a_005056ad0002 f4112290_1ec3_e711_8c5a_005056ad0002-->9a072290_1ec3_e711_8c5a_005056ad0002 d6072290_1ec3_e711_8c5a_005056ad0002-->1c0a2290_1ec3_e711_8c5a_005056ad0002 71082290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002 c0102290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002 c0102290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002 9a072290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002 9a072290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002 `, { fontFamily: 'courier' } ); }); it('8: should render labels with numbers at the start', () => { imgSnapshotTest( ` graph TB;subgraph "number as labels";1;end; `, { fontFamily: 'courier' } ); }); it('9: should render subgraphs', () => { imgSnapshotTest( ` graph TB subgraph One a1-->a2 end `, { fontFamily: 'courier' } ); }); it('10: should render subgraphs with a title starting with a digit', () => { imgSnapshotTest( ` graph TB subgraph 2Two a1-->a2 end `, { fontFamily: 'courier' } ); }); it('11: should render styled subgraphs', () => { imgSnapshotTest( ` graph TB A B subgraph foo[Foo SubGraph] C D end subgraph bar[Bar SubGraph] E F end G A-->B B-->C C-->D B-->D D-->E E-->A E-->F F-->D F-->G B-->G G-->D style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue `, { fontFamily: 'courier' } ); }); it('12: should render a flowchart with long names and class definitions', () => { imgSnapshotTest( `graph LR sid-B3655226-6C29-4D00-B685-3D5C734DC7E1[" 提交申请 熊大 "]; class sid-B3655226-6C29-4D00-B685-3D5C734DC7E1 node-executed; sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A[" 负责人审批 强子 "]; class sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A node-executed; sid-E27C0367-E6D6-497F-9736-3CDC21FDE221[" DBA审批 强子 "]; class sid-E27C0367-E6D6-497F-9736-3CDC21FDE221 node-executed; sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD[" SA审批 阿美 "]; class sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD node-executed; sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7[" 主管审批 光头强 "]; class sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7 node-executed; sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89[" DBA确认 强子 "]; class sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89 node-executed; sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937[" SA确认 阿美 "]; class sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937 node-executed; sid-4FC27B48-A6F9-460A-A675-021F5854FE22[" 结束 "]; class sid-4FC27B48-A6F9-460A-A675-021F5854FE22 node-executed; sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E[" SA执行1 强子 "]; class sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E node-executed; sid-6C2120F3-D940-4958-A067-0903DCE879C4[" SA执行2 强子 "]; class sid-6C2120F3-D940-4958-A067-0903DCE879C4 node-executed; sid-9180E2A0-5C4B-435F-B42F-0D152470A338[" DBA执行1 强子 "]; class sid-9180E2A0-5C4B-435F-B42F-0D152470A338 node-executed; sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD[" DBA执行3 强子 "]; class sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD node-executed; sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756[" DBA执行2 强子 "]; class sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756 node-executed; sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93[" DBA执行4 强子 "]; class sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93 node-executed; sid-1897B30A-9C5C-4D5B-B80B-76A038785070[" 负责人确认 梁静茹 "]; class sid-1897B30A-9C5C-4D5B-B80B-76A038785070 node-executed; sid-B3655226-6C29-4D00-B685-3D5C734DC7E1-->sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7; sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A-->sid-1897B30A-9C5C-4D5B-B80B-76A038785070; sid-E27C0367-E6D6-497F-9736-3CDC21FDE221-->sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89; sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD-->sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937; sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E-->sid-6C2120F3-D940-4958-A067-0903DCE879C4; sid-9180E2A0-5C4B-435F-B42F-0D152470A338-->sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756; sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD-->sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93; sid-6C2120F3-D940-4958-A067-0903DCE879C4-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A; sid-1897B30A-9C5C-4D5B-B80B-76A038785070-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22; sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937-->sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E; sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89-->sid-9180E2A0-5C4B-435F-B42F-0D152470A338; sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89-->sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD; sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A; sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A; sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD; sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-E27C0367-E6D6-497F-9736-3CDC21FDE221; sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937-->sid-6C2120F3-D940-4958-A067-0903DCE879C4; sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A; sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22; `, { fontFamily: 'courier' } ); }); it('13: should render color of styled nodes', () => { imgSnapshotTest( ` graph LR foo-->bar classDef foo fill:lightblue,color:green,stroke:#FF9E2C,font-weight:bold style foo fill:#F99,stroke-width:2px,stroke:#F0F style bar fill:#999,color: #00ff00, stroke-width:10px,stroke:#0F0 `, { listUrl: false, listId: 'color styling', fontFamily: 'courier', logLevel: 0, } ); }); it('14: should render hexagons', () => { imgSnapshotTest( ` graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{{Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?}} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[Car] click A "index.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass; `, { listUrl: false, listId: 'color styling', fontFamily: 'courier', logLevel: 0, } ); }); it('15: should render a simple flowchart with comments', () => { imgSnapshotTest( `graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} %% this is a comment C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('16: Render Stadium shape', () => { imgSnapshotTest( ` graph TD A([stadium shape test]) A -->|Get money| B([Go shopping]) B --> C([Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?]) C -->|One| D([Laptop]) C -->|Two| E([iPhone]) C -->|Three| F([Car
wroom wroom]) click A "index.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass; `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('17: Render multiline texts', () => { imgSnapshotTest( `graph LR A1[Multi
Line] -->|Multi
Line| B1(Multi
Line) C1[Multi
Line] -->|Multi
Line| D1(Multi
Line) E1[Multi
Line] -->|Multi
Line| F1(Multi
Line) A2[Multi
Line] -->|Multi
Line| B2(Multi
Line) C2[Multi
Line] -->|Multi
Line| D2(Multi
Line) E2[Multi
Line] -->|Multi
Line| F2(Multi
Line) linkStyle 0 stroke:DarkGray,stroke-width:2px linkStyle 1 stroke:DarkGray,stroke-width:2px linkStyle 2 stroke:DarkGray,stroke-width:2px `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('18: Chaining of nodes', () => { imgSnapshotTest( `graph LR a --> b --> c `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('19: Multiple nodes and chaining in one statement', () => { imgSnapshotTest( `graph LR a --> b & c--> d `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('20: Multiple nodes and chaining in one statement', () => { imgSnapshotTest( `graph TD A[ h ] -- hello --> B[" test "]:::exClass & C --> D; classDef exClass background:#bbb,border:1px solid red; `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('21: Render cylindrical shape', () => { imgSnapshotTest( `graph LR A[(cylindrical
shape
test)] A -->|Get money| B1[(Go shopping 1)] A -->|Get money| B2[(Go shopping 2)] A -->|Get money| B3[(Go shopping 3)] C[(Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?)] B1 --> C B2 --> C B3 --> C C -->|One| D[(Laptop)] C -->|Two| E[(iPhone)] C -->|Three| F[(Car)] click A "index.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass;`, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('22: Render a simple flowchart with nodeSpacing set to 100', () => { imgSnapshotTest( `graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} %% this is a comment C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { flowchart: { nodeSpacing: 50 }, fontFamily: 'courier' } ); }); it('23: Render a simple flowchart with rankSpacing set to 100', () => { imgSnapshotTest( `graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} %% this is a comment C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { flowchart: { rankSpacing: '100' }, fontFamily: 'courier' } ); }); it('24: Keep node label text (if already defined) when a style is applied', () => { imgSnapshotTest( `graph LR A(( )) -->|step 1| B(( )) B(( )) -->|step 2| C(( )) C(( )) -->|step 3| D(( )) linkStyle 1 stroke:greenyellow,stroke-width:2px style C fill:greenyellow,stroke:green,stroke-width:4px `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('25: Handle link click events (link, anchor, mailto, other protocol, script)', () => { imgSnapshotTest( `graph TB TITLE["Link Click Events
(click the nodes below)"] A["link test (open in same tab)"] B["link test (open in new tab)"] C[anchor test] D[mailto test] E[other protocol test] F[script test] TITLE --> A & B & C & D & E & F click A "https://mermaid-js.github.io/mermaid/#/" "link test (open in same tab)" click B "https://mermaid-js.github.io/mermaid/#/" "link test (open in new tab)" _blank click C "#link-clicked" click D "mailto:user@user.user" "mailto test" click E "notes://do-your-thing/id" "other protocol test" click F "javascript:alert('test')" "script test" `, { securityLevel: 'loose', fontFamily: 'courier' } ); }); it('26: Set text color of nodes and links according to styles when html labels are enabled', () => { imgSnapshotTest( `graph LR A[red
text] -->|red
text| B(blue
text) C[/red
text/] -->|blue
text| D{blue
text} E{{default
style}} -->|default
style| F([default
style]) linkStyle default color:Sienna; linkStyle 0 color:red; linkStyle 1 stroke:DarkGray,stroke-width:2px,color:#0000ff style A color:red; style B color:blue; style C stroke:#ff0000,fill:#ffcccc,color:#ff0000 style D stroke:#0000ff,fill:#ccccff,color:#0000ff click B "index.html#link-clicked" "link test" click D testClick "click test" `, { flowchart: { htmlLabels: true } } ); }); it('27: Set text color of nodes and links according to styles when html labels are disabled', () => { imgSnapshotTest( `graph LR A[red
text] -->|red
text| B(blue
text) C[/red
text/] -->|blue
text| D{blue
text} E{{default
style}} -->|default
style| F([default
style]) linkStyle default color:Sienna; linkStyle 0 color:red; linkStyle 1 stroke:DarkGray,stroke-width:2px,color:#0000ff style A color:red; style B color:blue; style C stroke:#ff0000,fill:#ffcccc,color:#ff0000 style D stroke:#0000ff,fill:#ccccff,color:#0000ff click B "index.html#link-clicked" "link test" click D testClick "click test" `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('28: Apply default class to all nodes which do not have another class assigned (htmlLabels enabled)', () => { imgSnapshotTest( `graph TD A[myClass1] --> B[default] & C[default] B[default] & C[default] --> D[myClass2] classDef default stroke-width:2px,fill:none,stroke:silver classDef node color:red classDef myClass1 color:#0000ff classDef myClass2 stroke:#0000ff,fill:#ccccff class A myClass1 class D myClass2 `, { flowchart: { htmlLabels: true } } ); }); it('29: Apply default class to all nodes which do not have another class assigned (htmlLabels disabled)', () => { imgSnapshotTest( `graph TD A[myClass1] --> B[default] & C[default] B[default] & C[default] --> D[myClass2] classDef default stroke-width:2px,fill:none,stroke:silver classDef node color:red classDef myClass1 color:#0000ff classDef myClass2 stroke:#0000ff,fill:#ccccff class A myClass1 class D myClass2 `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('30: Possibility to style text color of nodes and subgraphs as well as apply classes to subgraphs', () => { imgSnapshotTest( `graph LR subgraph id1 [title is set] A-->B end subgraph id2 [title] E end B-->C subgraph id3 C-->D end class id3,id2,A redBg; class id3,A whiteTxt; classDef redBg fill:#622; classDef whiteTxt color: white; `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('31: should not slice off edges that are to the left of the left-most vertex', () => { imgSnapshotTest( `graph TD work --> sleep sleep --> work eat --> sleep work --> eat `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('32: Render Subroutine shape', () => { imgSnapshotTest( `graph LR A[[subroutine shape test]] A -->|Get money| B[[Go shopping]] B --> C[[Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?]] C -->|One| D[[Laptop]] C -->|Two| E[[iPhone]] C -->|Three| F[[Car
wroom wroom]] click A "index.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass; `, { flowchart: { htmlLabels: false }, fontFamily: 'courier' } ); }); it('33: should render a simple flowchart with diagramPadding set to 0', () => { imgSnapshotTest( `graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} %% this is a comment C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { flowchart: { diagramPadding: 0 } } ); }); it('34: testing the label width in percy', () => { imgSnapshotTest( `graph TD A[Christmas] `, {} ); }); it('35: should honor minimum edge length as specified by the user', () => { imgSnapshotTest( `graph TD L1 --- L2 L2 --- C M1 ---> C R1 .-> R2 R2 <.-> C C -->|Label 1| E1 C -- Label 2 ---> E2 C ----> E3 C -----> E4 C ======> E5 `, {} ); }); it('36: should render escaped without html labels', () => { imgSnapshotTest( `graph TD a["Haiya"]-->b `, { htmlLabels: false, flowchart: { htmlLabels: false } } ); }); it('37: should render non-escaped with html labels', () => { imgSnapshotTest( `graph TD a["Haiya"]-->b `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('38: should render a flowchart when useMaxWidth is true (default)', () => { renderGraph( `graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { flowchart: { useMaxWidth: true } } ); cy.get('svg').should((svg) => { expect(svg).to.have.attr('width', '100%'); // expect(svg).to.have.attr('height'); // use within because the absolute value can be slightly different depending on the environment ±10% // const height = parseFloat(svg.attr('height')); // expect(height).to.be.within(446 * 0.95, 446 * 1.05); const style = svg.attr('style'); expect(style).to.match(/^max-width: [\d.]+px;$/); const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join('')); expect(maxWidthValue).to.be.within(300 * 0.9, 300 * 1.1); }); }); it('39: should render a flowchart when useMaxWidth is false', () => { renderGraph( `graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] `, { flowchart: { useMaxWidth: false } } ); cy.get('svg').should((svg) => { // const height = parseFloat(svg.attr('height')); const width = parseFloat(svg.attr('width')); // use within because the absolute value can be slightly different depending on the environment ±10% // expect(height).to.be.within(446 * 0.95, 446 * 1.05); expect(width).to.be.within(300 * 0.9, 300 * 1.1); expect(svg).to.not.have.attr('style'); }); }); it('58: handle styling with style expressions', () => { imgSnapshotTest( ` graph LR id1(Start)-->id2(Stop) style id1 fill:#f9f,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5 `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('60: handle styling for all node shapes', () => { imgSnapshotTest( ` graph LR A[red text] -->|default style| B(blue text) C([red text]) -->|default style| D[[blue text]] E[(red text)] -->|default style| F((blue text)) G>red text] -->|default style| H{blue text} I{{red text}} -->|default style| J[/blue text/] linkStyle default color:Sienna; style A stroke:#ff0000,fill:#ffcccc,color:#ff0000 style B stroke:#0000ff,fill:#ccccff,color:#0000ff style C stroke:#ff0000,fill:#ffcccc,color:#ff0000 style D stroke:#0000ff,fill:#ccccff,color:#0000ff style E stroke:#ff0000,fill:#ffcccc,color:#ff0000 style F stroke:#0000ff,fill:#ccccff,color:#0000ff style G stroke:#ff0000,fill:#ffcccc,color:#ff0000 style H stroke:#0000ff,fill:#ccccff,color:#0000ff style I stroke:#ff0000,fill:#ffcccc,color:#ff0000 style J stroke:#0000ff,fill:#ccccff,color:#0000ff `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('61: fontawesome icons in edge labels', () => { imgSnapshotTest( ` graph TD C -->|fa:fa-car Car| F[fa:fa-car Car] `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('62: fontawesome icons in edge labels', () => { imgSnapshotTest( ` graph TB subgraph bar[Bar] F end style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('63: fontawesome icons in edge labels', () => { imgSnapshotTest( ` graph TB A B subgraph foo[Foo SubGraph] C D end subgraph bar[Bar SubGraph] E F end G A-->B B-->C C-->D B-->D D-->E E-->A E-->F F-->D F-->G B-->G G-->D style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('64: fontawesome icons in edge labels', () => { imgSnapshotTest( ` %%{init:{"theme":"base", "themeVariables": {"primaryColor":"#411d4e", "titleColor":"white", "darkMode":true}}}%% flowchart LR subgraph A a --> b end subgraph B i -->f end A --> B `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); it('65: text-color from classes', () => { imgSnapshotTest( ` flowchart LR classDef dark fill:#000,stroke:#000,stroke-width:4px,color:#fff Lorem --> Ipsum --> Dolor class Lorem,Dolor dark `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } ); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/gantt.spec.js000066400000000000000000000263451433273745700262740ustar00rootroot00000000000000import { imgSnapshotTest, renderGraph } from '../../helpers/util.js'; describe('Gantt diagram', () => { beforeEach(() => { cy.clock(new Date('1010-10-10').getTime()); }); it('should render a gantt chart', () => { imgSnapshotTest( ` gantt dateFormat YYYY-MM-DD axisFormat %d/%m title Adding GANTT diagram to mermaid excludes weekdays 2014-01-10 section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page : 20h Add another diagram to demo page : 48h `, {} ); }); it('Handle multiline section titles with different line breaks', () => { imgSnapshotTest( ` gantt dateFormat YYYY-MM-DD axisFormat %d/%m title GANTT diagram with multiline section titles excludes weekdays 2014-01-10 section A section
multiline Completed task : done, des1, 2014-01-06,2014-01-08 Active task : active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks
multiline Completed task in the critical line : crit, done, 2014-01-06, 24h Implement parser and jison : crit, done, after des1, 2d Create tests for parser : crit, active, 3d Future task in critical line : crit, 5d Create tests for renderer : 2d Add to mermaid : 1d section Documentation
multiline Describe gantt syntax : active, a1, after des1, 3d Add gantt diagram to demo page : after a1, 20h Add another diagram to demo page : doc1, after a1, 48h section Last section
multiline Describe gantt syntax : after doc1, 3d Add gantt diagram to demo page : 20h Add another diagram to demo page : 48h `, {} ); }); it('Multiple dependencies syntax', () => { imgSnapshotTest( ` gantt dateFormat YYYY-MM-DD axisFormat %d/%m title Adding GANTT diagram to mermaid excludes weekdays 2014-01-10 apple :a, 2017-07-20, 1w banana :crit, b, 2017-07-23, 1d cherry :active, c, after b a, 1d `, {} ); }); it('should FAIL redering a gantt chart for issue #1060 with invalid date', () => { imgSnapshotTest( ` gantt excludes weekdays 2017-01-10 title Projects Timeline section asdf specs :done, :ps, 2019-05-10, 50d Plasma :pc, 2019-06-20, 60d Rollup :or, 2019-08-20, 50d section CEL plasma-chamber :done, :pc, 2019-05-20, 60d Plasma Implementation (Rust) :por, 2019-06-20, 120d Predicates (Atomic Swap) :pred, 2019-07-20, 60d section DEX History zkSNARK :hs, 2019-08-10, 40d Exit :vs, after hs, 60d PredicateSpec :ps, 2019-09-1, 20d PlasmaIntegration :pi, after ps,40d section Events ETHBoston :done, :eb, 2019-09-08, 3d DevCon :active, :dc, 2019-10-08, 3d section Plasma Calls & updates OVM :ovm, 2019-07-12, 120d Plasma call 26 :pc26, 2019-08-21, 1d Plasma call 27 :pc27, 2019-09-03, 1d Plasma call 28 :pc28, 2019-09-17, 1d `, {} ); }); it('should hide today marker', () => { imgSnapshotTest( ` gantt title Hide today marker (vertical line should not be visible) dateFormat YYYY-MM-DD axisFormat %d todayMarker off section Section1 Today: 1, -1h `, {} ); }); it('should style today marker', () => { imgSnapshotTest( ` gantt title Style today marker (vertical line should be 5px wide and half-transparent blue) dateFormat YYYY-MM-DD axisFormat %d todayMarker stroke-width:5px,stroke:#00f,opacity:0.5 section Section1 Today: 1, -1h `, {} ); }); it('should handle milliseconds', () => { imgSnapshotTest( ` gantt title A Gantt Diagram dateFormat x axisFormat %L section Section A task :a1, 0, 30ms Another task :after a1, 20ms section Another Another another task :b1, 20, 12ms Another another another task :after b1, 0.024s `, {} ); }); it('should render a gantt diagram when useMaxWidth is true (default)', () => { renderGraph( ` gantt dateFormat YYYY-MM-DD axisFormat %d/%m title Adding GANTT diagram to mermaid excludes weekdays 2014-01-10 section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page : 20h Add another diagram to demo page : 48h `, { gantt: { useMaxWidth: true } } ); cy.get('svg').should((svg) => { expect(svg).to.have.attr('width', '100%'); // expect(svg).to.have.attr('height'); // use within because the absolute value can be slightly different depending on the environment ±5% // const height = parseFloat(svg.attr('height')); // expect(height).to.be.within(484 * 0.95, 484 * 1.05); const style = svg.attr('style'); expect(style).to.match(/^max-width: [\d.]+px;$/); const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join('')); expect(maxWidthValue).to.be.within(984 * 0.95, 984 * 1.05); }); }); it('should render a gantt diagram when useMaxWidth is false', () => { renderGraph( ` gantt dateFormat YYYY-MM-DD axisFormat %d/%m title Adding GANTT diagram to mermaid excludes weekdays 2014-01-10 section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page : 20h Add another diagram to demo page : 48h `, { gantt: { useMaxWidth: false } } ); cy.get('svg').should((svg) => { // const height = parseFloat(svg.attr('height')); const width = parseFloat(svg.attr('width')); // use within because the absolute value can be slightly different depending on the environment ±5% // expect(height).to.be.within(484 * 0.95, 484 * 1.05); expect(width).to.be.within(984 * 0.95, 984 * 1.05); expect(svg).to.not.have.attr('style'); }); }); it('should render a gantt diagram with data labels at the top when topAxis is true', () => { imgSnapshotTest( ` gantt dateFormat YYYY-MM-DD axisFormat %d/%m title Adding GANTT diagram to mermaid excludes weekdays 2014-01-10 section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page : 20h Add another diagram to demo page : 48h `, { gantt: { topAxis: true } } ); }); it('should render accessibility tags', function () { const expectedTitle = 'Gantt Diagram'; const expectedAccDescription = 'Tasks for Q4'; renderGraph( ` gantt accTitle: ${expectedTitle} accDescr: ${expectedAccDescription} dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d `, {} ); cy.get('svg').should((svg) => { const el = svg.get(0); const children = Array.from(el.children); const titleEl = children.find(function (node) { return node.tagName === 'title'; }); const descriptionEl = children.find(function (node) { return node.tagName === 'desc'; }); expect(titleEl).to.exist; expect(titleEl.textContent).to.equal(expectedTitle); expect(descriptionEl).to.exist; expect(descriptionEl.textContent).to.equal(expectedAccDescription); }); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/gitGraph.spec.js000066400000000000000000000175471433273745700267300ustar00rootroot00000000000000import { imgSnapshotTest } from '../../helpers/util.js'; describe('Git Graph diagram', () => { it('1: should render a simple gitgraph with commit on main branch', () => { imgSnapshotTest( `gitGraph commit id: "1" commit id: "2" commit id: "3" `, {} ); }); it('2: should render a simple gitgraph with commit on main branch with Id', () => { imgSnapshotTest( `gitGraph commit id: "One" commit id: "Two" commit id: "Three" `, {} ); }); it('3: should render a simple gitgraph with different commitTypes on main branch ', () => { imgSnapshotTest( `gitGraph commit id: "Normal Commit" commit id: "Reverse Commit" type: REVERSE commit id: "Hightlight Commit" type: HIGHLIGHT `, {} ); }); it('4: should render a simple gitgraph with tags commitTypes on main branch ', () => { imgSnapshotTest( `gitGraph commit id: "Normal Commit with tag" tag: "v1.0.0" commit id: "Reverse Commit with tag" type: REVERSE tag: "RC_1" commit id: "Hightlight Commit" type: HIGHLIGHT tag: "8.8.4" `, {} ); }); it('5: should render a simple gitgraph with two branches', () => { imgSnapshotTest( `gitGraph commit id: "1" commit id: "2" branch develop checkout develop commit id: "3" commit id: "4" checkout main commit id: "5" commit id: "6" `, {} ); }); it('6: should render a simple gitgraph with two branches and merge commit', () => { imgSnapshotTest( `gitGraph commit id: "1" commit id: "2" branch develop checkout develop commit id: "3" commit id: "4" checkout main merge develop commit id: "5" commit id: "6" `, {} ); }); it('7: should render a simple gitgraph with three branches and tagged merge commit', () => { imgSnapshotTest( `gitGraph commit id: "1" commit id: "2" branch nice_feature checkout nice_feature commit id: "3" checkout main commit id: "4" checkout nice_feature branch very_nice_feature checkout very_nice_feature commit id: "5" checkout main commit id: "6" checkout nice_feature commit id: "7" checkout main merge nice_feature id: "12345" tag: "my merge commit" checkout very_nice_feature commit id: "8" checkout main commit id: "9" `, {} ); }); it('8: should render a simple gitgraph with more than 8 branchs & overriding variables', () => { imgSnapshotTest( `%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'gitBranchLabel0': '#ffffff', 'gitBranchLabel1': '#ffffff', 'gitBranchLabel2': '#ffffff', 'gitBranchLabel3': '#ffffff', 'gitBranchLabel4': '#ffffff', 'gitBranchLabel5': '#ffffff', 'gitBranchLabel6': '#ffffff', 'gitBranchLabel7': '#ffffff', } } }%% gitGraph checkout main branch branch1 branch branch2 branch branch3 branch branch4 branch branch5 branch branch6 branch branch7 branch branch8 branch branch9 checkout branch1 commit id: "1" `, {} ); }); it('9: should render a simple gitgraph with rotated labels', () => { imgSnapshotTest( `%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'gitGraph': { 'rotateCommitLabel': true } } }%% gitGraph commit id: "75f7219e83b321cd3fdde7dcf83bc7c1000a6828" commit id: "0db4784daf82736dec4569e0dc92980d328c1f2e" commit id: "7067e9973f9eaa6cd4a4b723c506d1eab598e83e" commit id: "66972321ad6c199013b5b31f03b3a86fa3f9817d" `, {} ); }); it('10: should render a simple gitgraph with horizontal labels', () => { imgSnapshotTest( `%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'gitGraph': { 'rotateCommitLabel': false } } }%% gitGraph commit id: "Alpha" commit id: "Beta" commit id: "Gamma" commit id: "Delta" `, {} ); }); it('11: should render a simple gitgraph with cherry pick commit', () => { imgSnapshotTest( ` gitGraph commit id: "ZERO" branch develop commit id:"A" checkout main commit id:"ONE" checkout develop commit id:"B" checkout main commit id:"TWO" cherry-pick id:"A" commit id:"THREE" checkout develop commit id:"C" `, {} ); }); it('11: should render a gitgraph with cherry pick commit with custom tag', () => { imgSnapshotTest( ` gitGraph commit id: "ZERO" branch develop commit id:"A" checkout main commit id:"ONE" checkout develop commit id:"B" checkout main commit id:"TWO" cherry-pick id:"A" tag: "snapshot" commit id:"THREE" checkout develop commit id:"C" `, {} ); }); it('11: should render a gitgraph with cherry pick commit with no tag', () => { imgSnapshotTest( ` gitGraph commit id: "ZERO" branch develop commit id:"A" checkout main commit id:"ONE" checkout develop commit id:"B" checkout main commit id:"TWO" cherry-pick id:"A" tag: "" commit id:"THREE" checkout develop commit id:"C" `, {} ); }); it('11: should render a simple gitgraph with two cherry pick commit', () => { imgSnapshotTest( ` gitGraph commit id: "ZERO" branch develop commit id:"A" checkout main commit id:"ONE" checkout develop commit id:"B" branch featureA commit id:"FIX" commit id: "FIX-2" checkout main commit id:"TWO" cherry-pick id:"A" commit id:"THREE" cherry-pick id:"FIX" checkout develop commit id:"C" merge featureA `, {} ); }); it('12: should render commits for more than 8 branches', () => { imgSnapshotTest( ` gitGraph checkout main %% Make sure to manually set the ID of all commits, for consistent visual tests commit id: "1-abcdefg" checkout main branch branch1 commit id: "2-abcdefg" checkout main merge branch1 branch branch2 commit id: "3-abcdefg" checkout main merge branch2 branch branch3 commit id: "4-abcdefg" checkout main merge branch3 branch branch4 commit id: "5-abcdefg" checkout main merge branch4 branch branch5 commit id: "6-abcdefg" checkout main merge branch5 branch branch6 commit id: "7-abcdefg" checkout main merge branch6 branch branch7 commit id: "8-abcdefg" checkout main merge branch7 branch branch8 commit id: "9-abcdefg" checkout main merge branch8 branch branch9 commit id: "10-abcdefg" `, {} ); }); it('13: should render a simple gitgraph with three branches,custom merge commit id,tag,type', () => { imgSnapshotTest( `gitGraph commit id: "1" commit id: "2" branch nice_feature checkout nice_feature commit id: "3" checkout main commit id: "4" checkout nice_feature branch very_nice_feature checkout very_nice_feature commit id: "5" checkout main commit id: "6" checkout nice_feature commit id: "7" checkout main merge nice_feature id: "customID" tag: "customTag" type: REVERSE checkout very_nice_feature commit id: "8" checkout main commit id: "9" `, {} ); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/info.spec.js000066400000000000000000000003541433273745700261020ustar00rootroot00000000000000import { imgSnapshotTest } from '../../helpers/util.js'; describe('Sequencediagram', () => { it('should render a simple info diagrams', () => { imgSnapshotTest( ` info showInfo `, {} ); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/journey.spec.js000066400000000000000000000031571433273745700266460ustar00rootroot00000000000000import { imgSnapshotTest, renderGraph } from '../../helpers/util.js'; describe('User journey diagram', () => { it('Simple test', () => { imgSnapshotTest( `journey title Adding journey diagram functionality to mermaid section Order from website `, {} ); }); it('should render a user journey chart', () => { imgSnapshotTest( ` journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 3: Me `, {} ); }); it('should render a user journey diagram when useMaxWidth is true (default)', () => { renderGraph( `journey title E-Commerce section Order from website Add to cart: 5: Me section Checkout from website Add payment details: 5: Me `, { journey: { useMaxWidth: true } } ); cy.get('svg').should((svg) => { expect(svg).to.have.attr('width', '100%'); expect(svg).to.have.attr('height'); // const height = parseFloat(svg.attr('height')); // expect(height).to.eq(565); const style = svg.attr('style'); expect(style).to.match(/^max-width: [\d.]+px;$/); const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join('')); expect(maxWidthValue).to.eq(700); }); }); it('should render a user journey diagram when useMaxWidth is false', () => { imgSnapshotTest( `journey title E-Commerce section Order from website Add to cart: 5: Me section Checkout from website Add payment details: 5: Me `, { journey: { useMaxWidth: false } } ); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/mermaid.spec.js000066400000000000000000000017551433273745700265730ustar00rootroot00000000000000import { imgSnapshotTest, renderGraph } from '../../helpers/util.js'; describe('Mindmap', () => { it('square shape', () => { imgSnapshotTest( ` mindmap root[ The root ] `, {} ); cy.get('svg'); }); it('rounded rect shape', () => { imgSnapshotTest( ` mindmap root(( The root )) `, {} ); cy.get('svg'); }); it('circle shape', () => { imgSnapshotTest( ` mindmap root( The root ) `, {} ); cy.get('svg'); }); it('default shape', () => { imgSnapshotTest( ` mindmap The root `, {} ); cy.get('svg'); }); it('adding children', () => { imgSnapshotTest( ` mindmap The root child1 child2 `, {} ); cy.get('svg'); }); it('adding grand children', () => { imgSnapshotTest( ` mindmap The root child1 child2 child3 `, {} ); cy.get('svg'); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/mindmap.spec.js000066400000000000000000000034621433273745700265770ustar00rootroot00000000000000import { imgSnapshotTest, renderGraph } from '../../helpers/util.js'; describe('Mindmaps', () => { it('Only a root', () => { imgSnapshotTest( `mindmap root `, {} ); }); it('a root with a shape', () => { imgSnapshotTest( `mindmap root[root] `, {} ); }); it('a root with wrapping text and a shape', () => { imgSnapshotTest( `mindmap root[A root with a long text that wraps to keep the node size in check] `, {} ); }); it('a root with an icon', () => { imgSnapshotTest( `mindmap root[root] ::icon(mdi mdi-fire) `, {} ); }); it('Blang and cloud shape', () => { imgSnapshotTest( `mindmap root))bang(( ::icon(mdi mdi-fire) a))Another bang(( ::icon(mdi mdi-fire) a)A cloud( ::icon(mdi mdi-fire) `, {} ); }); it('Blang and cloud shape with icons', () => { imgSnapshotTest( `mindmap root))bang(( a))Another bang(( a)A cloud( `, {} ); }); it('braches', () => { imgSnapshotTest( `mindmap root child1 grandchild 1 grandchild 2 child2 grandchild 3 grandchild 4 child3 grandchild 5 grandchild 6 `, {} ); }); it('braches with shapes and labels', () => { imgSnapshotTest( `mindmap root child1((Circle)) grandchild 1 grandchild 2 child2(Round rectangle) grandchild 3 grandchild 4 child3[Square] grandchild 5 ::icon(mdi mdi-fire) gc6((grand
child 6)) ::icon(mdi mdi-fire) `, {} ); }); it('text shouhld wrap with icon', () => { imgSnapshotTest( `mindmap root Child3(A node with an icon and with a long text that wraps to keep the node size in check) `, {} ); }); /* The end */ }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/pie.spec.js000066400000000000000000000040441433273745700257240ustar00rootroot00000000000000import { imgSnapshotTest, renderGraph } from '../../helpers/util.js'; describe('Pie Chart', () => { it('should render a simple pie diagram', () => { imgSnapshotTest( ` pie title Sports in Sweden "Bandy" : 40 "Ice-Hockey" : 80 "Football" : 90 `, {} ); cy.get('svg'); }); it('should render a simple pie diagram with long labels', () => { imgSnapshotTest( ` pie title NETFLIX "Time spent looking for movie" : 90 "Time spent watching it" : 10 `, {} ); cy.get('svg'); }); it('should render a simple pie diagram with capital letters for labels', () => { imgSnapshotTest( ` pie title What Voldemort doesn't have? "FRIENDS" : 2 "FAMILY" : 3 "NOSE" : 45 `, {} ); cy.get('svg'); }); it('should render a pie diagram when useMaxWidth is true (default)', () => { renderGraph( ` pie title Sports in Sweden "Bandy" : 40 "Ice-Hockey" : 80 "Football" : 90 `, { pie: { useMaxWidth: true } } ); cy.get('svg').should((svg) => { expect(svg).to.have.attr('width', '100%'); // expect(svg).to.have.attr('height'); // const height = parseFloat(svg.attr('height')); // expect(height).to.eq(450); const style = svg.attr('style'); expect(style).to.match(/^max-width: [\d.]+px;$/); const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join('')); expect(maxWidthValue).to.eq(984); }); }); it('should render a pie diagram when useMaxWidth is false', () => { renderGraph( ` pie title Sports in Sweden "Bandy" : 40 "Ice-Hockey" : 80 "Football" : 90 `, { pie: { useMaxWidth: false } } ); cy.get('svg').should((svg) => { // const height = parseFloat(svg.attr('height')); const width = parseFloat(svg.attr('width')); // expect(height).to.eq(450); expect(width).to.eq(984); expect(svg).to.not.have.attr('style'); }); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/requirement.spec.js000066400000000000000000000045551433273745700275160ustar00rootroot00000000000000import { imgSnapshotTest, renderGraph } from '../../helpers/util.js'; describe('Requirement diagram', () => { it('sample', () => { imgSnapshotTest( ` requirementDiagram requirement test_req { id: 1 text: the test text. risk: high verifymethod: test } functionalRequirement test_req2 { id: 1.1 text: the second test text. risk: low verifymethod: inspection } performanceRequirement test_req3 { id: 1.2 text: the third test text. risk: medium verifymethod: demonstration } element test_entity { type: simulation } element test_entity2 { type: word doc docRef: reqs/test_entity } test_entity - satisfies -> test_req2 test_req - traces -> test_req2 test_req - contains -> test_req3 test_req <- copies - test_entity2 `, {} ); cy.get('svg'); }); it('should render accessibility tags', function () { const expectedTitle = 'Gantt Diagram'; const expectedAccDescription = 'Tasks for Q4'; renderGraph( ` requirementDiagram accTitle: ${expectedTitle} accDescr: ${expectedAccDescription} requirement test_req { id: 1 text: the test text. risk: high verifymethod: test } functionalRequirement test_req2 { id: 1.1 text: the second test text. risk: low verifymethod: inspection } performanceRequirement test_req3 { id: 1.2 text: the third test text. risk: medium verifymethod: demonstration } element test_entity { type: simulation } element test_entity2 { type: word doc docRef: reqs/test_entity } test_entity - satisfies -> test_req2 test_req - traces -> test_req2 test_req - contains -> test_req3 test_req <- copies - test_entity2 `, {} ); cy.get('svg').should((svg) => { const el = svg.get(0); const children = Array.from(el.children); const titleEl = children.find(function (node) { return node.tagName === 'title'; }); const descriptionEl = children.find(function (node) { return node.tagName === 'desc'; }); expect(titleEl).to.exist; expect(titleEl.textContent).to.equal(expectedTitle); expect(descriptionEl).to.exist; expect(descriptionEl.textContent).to.equal(expectedAccDescription); }); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/sequencediagram.spec.js000066400000000000000000000617021433273745700303100ustar00rootroot00000000000000/// import { imgSnapshotTest, renderGraph } from '../../helpers/util'; context('Sequence diagram', () => { it('should render a simple sequence diagram', () => { imgSnapshotTest( ` sequenceDiagram participant Alice participant Bob participant John as John
Second Line Alice ->> Bob: Hello Bob, how are you? Bob-->>John: How about you John? Bob--x Alice: I am good thanks! Bob-x John: I am good thanks! Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. Bob-->Alice: Checking with John... alt either this Alice->>John: Yes else or this Alice->>John: No else or this will happen Alice->John: Maybe end par this happens in parallel Alice -->> Bob: Parallel message 1 and Alice -->> John: Parallel message 2 end `, { sequence: { actorFontFamily: 'courier' } } ); }); it('should handle different line breaks', () => { imgSnapshotTest( ` sequenceDiagram participant 1 as multiline
using #lt;br#gt; participant 2 as multiline
using #lt;br/#gt; participant 3 as multiline
using #lt;br /#gt; participant 4 as multiline
using #lt;br \t/#gt; 1->>2: multiline
using #lt;br#gt; note right of 2: multiline
using #lt;br#gt; 2->>3: multiline
using #lt;br/#gt; note right of 3: multiline
using #lt;br/#gt; 3->>4: multiline
using #lt;br /#gt; note right of 4: multiline
using #lt;br /#gt; 4->>1: multiline
using #lt;br /#gt; note right of 1: multiline
using #lt;br \t/#gt; `, {} ); }); it('should handle line breaks and wrap annotations', () => { imgSnapshotTest( ` sequenceDiagram participant Alice participant Bob participant John as John
Second Line Alice ->> Bob: Hello Bob, how are you? Bob-->>John: How about you John? Note right of John: John thinks a long
long time, so long
that the text does
not fit on a row. Bob-->Alice: Checking with John... Note over John:wrap: John looks like he's still thinking, so Bob prods him a bit. Bob-x John: Hey John -
we're still waiting to know
how you're doing Note over John:nowrap: John's trying hard not to break his train of thought. Bob-x John:wrap: John! Are you still debating about how you're doing? How long does it take?? Note over John: After a few more moments, John
finally snaps out of it. `, {} ); }); it('should render loops with a slight margin', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be loop Loopy Bob->>Alice: Pasten end `, { wrap: true } ); }); context('font settings', () => { it('should render different note fonts when configured', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: I'm short note left of Alice: I should have bigger fonts Bob->>Alice: Short as well `, { sequence: { noteFontSize: 18, noteFontFamily: 'Arial' } } ); }); it('should render different message fonts when configured', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: I'm short Bob->>Alice: Short as well `, { sequence: { messageFontSize: 18, messageFontFamily: 'Arial' } } ); }); it('should render different actor fonts when configured', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: I'm short Bob->>Alice: Short as well `, { sequence: { actorFontSize: 18, actorFontFamily: 'times' } } ); }); it('should render notes aligned to the left when configured', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: I'm short note left of Alice: I am left aligned Bob->>Alice: Short as well `, { sequence: { noteAlign: 'left' } } ); }); it('should render multi-line notes aligned to the left when configured', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: I'm short note left of Alice: I am left aligned
but also
multiline Bob->>Alice: Short as well `, { sequence: { noteAlign: 'left' } } ); }); it('should render notes aligned to the right when configured', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: I'm short note left of Alice: I am right aligned Bob->>Alice: Short as well `, { sequence: { noteAlign: 'right' } } ); }); it('should render multi-line notes aligned to the right when configured', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: I'm short note left of Alice: I am right aligned
but also
multiline Bob->>Alice: Short as well `, { sequence: { noteAlign: 'right' } } ); }); it('should render multi-line messages aligned to the left when configured', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: I'm short
but also
multiline Bob->>Alice: Short as well
and also
multiline `, { sequence: { messageAlign: 'left' } } ); }); it('should render multi-line messages aligned to the right when configured', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: I'm short
but also
multiline Bob->>Alice: Short as well
and also
multiline `, { sequence: { messageAlign: 'right' } } ); }); }); context('auth width scaling', () => { it('should render long actor descriptions', () => { imgSnapshotTest( ` sequenceDiagram participant A as Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be A->>Bob: Hola Bob-->A: Pasten ! `, { logLevel: 0 } ); }); it('should wrap (inline) long actor descriptions', () => { imgSnapshotTest( ` sequenceDiagram participant A as wrap:Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be A->>Bob: Hola Bob-->A: Pasten ! `, { logLevel: 0 } ); }); it('should wrap (directive) long actor descriptions', () => { imgSnapshotTest( ` %%{init: {'config': {'wrap': true }}}%% sequenceDiagram participant A as Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be A->>Bob: Hola Bob-->A: Pasten ! `, {} ); }); it('should be possible to use actor symbols instead of boxes', () => { imgSnapshotTest( ` sequenceDiagram actor Alice actor Bob Alice->>Bob: Hi Bob Bob->>Alice: Hi Alice `, {} ); }); it('should render long notes left of actor', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: Hola Note left of Alice: Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be Bob->>Alice: I'm short though `, {} ); }); it('should render long notes wrapped (inline) left of actor', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: Hola Note left of Alice:wrap: Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be Bob->>Alice: I'm short though `, {} ); }); it('should render long notes right of actor', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: Hola Note right of Alice: Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be Bob->>Alice: I'm short though `, {} ); }); it('should render long notes wrapped (inline) right of actor', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: Hola Note right of Alice:wrap: Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be Bob->>Alice: I'm short though `, {} ); }); it('should render long notes over actor', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: Hola Note over Alice: Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be Bob->>Alice: I'm short though `, {} ); }); it('should render long notes wrapped (inline) over actor', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: Hola Note over Alice:wrap: Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be Bob->>Alice: I'm short though `, {} ); }); it('should render long messages from an actor to the left to one to the right', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be Bob->>Alice: I'm short though `, {} ); }); it('should render long messages wrapped (inline) from an actor to the left to one to the right', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob:wrap:Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be Bob->>Alice: I'm short though `, {} ); }); it('should render long messages from an actor to the right to one to the left', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: I'm short Bob->>Alice: Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be `, {} ); }); it('should render long messages wrapped (inline) from an actor to the right to one to the left', () => { imgSnapshotTest( ` sequenceDiagram Alice->>Bob: I'm short Bob->>Alice:wrap: Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be `, {} ); }); }); context('background rects', () => { it('should render a single and nested rects', () => { imgSnapshotTest( ` sequenceDiagram participant A participant B participant C participant D participant E participant G A ->>+ B: Task 1 rect rgb(178, 102, 255) B ->>+ C: Task 2 C -->>- B: Return end A ->> D: Task 3 rect rgb(0, 128, 255) D ->>+ E: Task 4 rect rgb(0, 204, 0) E ->>+ G: Task 5 G -->>- E: Return end E ->> E: Task 6 end D -->> A: Complete `, {} ); }); it('should render a single and nested opt with long test overflowing', () => { imgSnapshotTest( ` sequenceDiagram participant A participant B participant C participant D participant E participant G A ->>+ B: Task 1 opt this is an opt with a long title that will overflow B ->>+ C: Task 2 C -->>- B: Return end A ->> D: Task 3 opt this is another opt with a long title that will overflow D ->>+ E: Task 4 opt this is a nested opt with a long title that will overflow E ->>+ G: Task 5 G -->>- E: Return end E ->> E: Task 6 end D -->> A: Complete `, {} ); }); it('should render a single and nested opt with long test wrapping', () => { imgSnapshotTest( ` %%{init: { 'config': { 'wrap': true } } }%% sequenceDiagram participant A participant B participant C participant D participant E participant G A ->>+ B: Task 1 opt this is an opt with a long title that will overflow B ->>+ C: Task 2 C -->>- B: Return end A ->> D: Task 3 opt this is another opt with a long title that will overflow D ->>+ E: Task 4 opt this is a nested opt with a long title that will overflow E ->>+ G: Task 5 G -->>- E: Return end E ->> E: Task 6 end D -->> A: Complete `, {} ); }); it('should render rect around and inside loops', () => { imgSnapshotTest( ` sequenceDiagram A ->> B: 1 rect rgb(204, 0, 102) loop check C C ->> C: Every 10 seconds end end A ->> B: 2 loop check D C ->> D: 3 rect rgb(153, 153, 255) D -->> D: 5 D --> C: 4 end end `, {} ); }); it('should render rect around and inside alts', () => { imgSnapshotTest( ` sequenceDiagram A ->> B: 1 rect rgb(204, 0, 102) alt yes C ->> C: 1 else no rect rgb(0, 204, 204) C ->> C: 0 end end end B ->> A: Return `, {} ); }); it('should render rect around and inside opts', () => { imgSnapshotTest( ` sequenceDiagram A ->> B: 1 rect rgb(204, 0, 102) opt maybe C -->> D: Do something rect rgb(0, 204, 204) C ->> C: 0 end end end opt possibly rect rgb(0, 204, 204) C ->> C: 0 end end B ->> A: Return `, {} ); }); it('should render rect around and inside criticals', () => { imgSnapshotTest( ` sequenceDiagram A ->> B: 1 rect rgb(204, 0, 102) critical yes C ->> C: 1 option no rect rgb(0, 204, 204) C ->> C: 0 end end end B ->> A: Return `, {} ); }); it('should render rect around and inside breaks', () => { imgSnapshotTest( ` sequenceDiagram A ->> B: 1 rect rgb(204, 0, 102) break yes rect rgb(0, 204, 204) C ->> C: 0 end end end B ->> A: Return `, {} ); }); it('should render autonumber when configured with such', () => { imgSnapshotTest( ` sequenceDiagram Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! `, { sequence: { actorMargin: 50, showSequenceNumbers: true } } ); }); it('should render autonumber when autonumber keyword is used', () => { imgSnapshotTest( ` sequenceDiagram autonumber Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! `, {} ); }); it('should render autonumber with different line breaks', () => { imgSnapshotTest( ` sequenceDiagram autonumber Alice->>John: Hello John,
how are you? Alice->>John: John,
can you hear me? John-->>Alice: Hi Alice,
I can hear you! John-->>Alice: I feel great! `, {} ); }); it('should render dark theme from init directive and configure font size 24 font', () => { imgSnapshotTest( ` %%{init: {'theme': 'dark', 'config': {'fontSize': 24}}}%% sequenceDiagram Alice->>John: Hello John, how are you? Alice->>John: John, can you hear me? John-->>Alice: Hi Alice, I can hear you! John-->>Alice: I feel great! `, {} ); }); it('should render with wrapping enabled', () => { imgSnapshotTest( ` %%{init: { 'config': { 'wrap': true }}}%% sequenceDiagram participant A as Alice, the talkative one A->>John: Hello John, how are you today? I'm feeling quite verbose today. A->>John: John, can you hear me? If you are not available, we can talk later. John-->>A: Hi Alice, I can hear you! I was finishing up an important meeting. John-->>A: I feel great! I was not ignoring you. I am sorry you had to wait for a response. `, {} ); }); it('should render with an init directive', () => { imgSnapshotTest( `%%{init: { "theme": "dark", 'config': { "fontFamily": "Menlo", "fontSize": 18, "fontWeight": 400, "wrap": true }}}%% sequenceDiagram Alice->>Bob: Hello Bob, how are you? If you are not available right now, I can leave you a message. Please get back to me as soon as you can! Note left of Alice: Bob thinks Bob->>Alice: Fine!`, {} ); }); }); context('directives', () => { it('should override config with directive settings', () => { imgSnapshotTest( ` %%{init: { "config": { "mirrorActors": true }}}%% sequenceDiagram Alice->>Bob: I'm short note left of Alice: config set to mirrorActors: false
directive set to mirrorActors: true Bob->>Alice: Short as well `, { logLevel: 0, sequence: { mirrorActors: false, noteFontSize: 18, noteFontFamily: 'Arial' }, } ); }); it('should override config with directive settings 2', () => { imgSnapshotTest( ` %%{init: { "config": { "mirrorActors": false, "wrap": true }}}%% sequenceDiagram Alice->>Bob: I'm short note left of Alice: config: mirrorActors=true
directive: mirrorActors=false Bob->>Alice: Short as well `, { logLevel: 0, sequence: { mirrorActors: true, noteFontSize: 18, noteFontFamily: 'Arial' } } ); }); }); context('links', () => { it('should support actor links and properties EXPERIMENTAL: USE WITH CAUTION', () => { //Be aware that the syntax for "properties" is likely to be changed. imgSnapshotTest( ` %%{init: { "config": { "mirrorActors": true, "forceMenus": true }}}%% sequenceDiagram participant a as Alice participant j as John note right of a: Hello world! properties a: {"class": "internal-service-actor", "type": "@clock"} properties j: {"class": "external-service-actor", "type": "@computer"} links a: {"Repo": "https://www.contoso.com/repo", "Swagger": "https://www.contoso.com/swagger"} links j: {"Repo": "https://www.contoso.com/repo"} links a: {"Dashboard": "https://www.contoso.com/dashboard", "On-Call": "https://www.contoso.com/oncall"} link a: Contacts @ https://contacts.contoso.com/?contact=alice@contoso.com a->>j: Hello John, how are you? j-->>a: Great! `, { logLevel: 0, sequence: { mirrorActors: true, noteFontSize: 18, noteFontFamily: 'Arial' } } ); }); it('should support actor links and properties when not mirrored EXPERIMENTAL: USE WITH CAUTION', () => { //Be aware that the syntax for "properties" is likely to be changed. imgSnapshotTest( ` %%{init: { "config": { "mirrorActors": false, "forceMenus": true, "wrap": true }}}%% sequenceDiagram participant a as Alice participant j as John note right of a: Hello world! properties a: {"class": "internal-service-actor", "type": "@clock"} properties j: {"class": "external-service-actor", "type": "@computer"} links a: {"Repo": "https://www.contoso.com/repo", "Swagger": "https://www.contoso.com/swagger"} links j: {"Repo": "https://www.contoso.com/repo"} links a: {"Dashboard": "https://www.contoso.com/dashboard", "On-Call": "https://www.contoso.com/oncall"} a->>j: Hello John, how are you? j-->>a: Great! `, { logLevel: 0, sequence: { mirrorActors: false, noteFontSize: 18, noteFontFamily: 'Arial' }, } ); }); it("shouldn't display unused participants", () => { //Be aware that the syntax for "properties" is likely to be changed. imgSnapshotTest( ` %%{init: { "config": { "sequence": {"hideUnusedParticipants": true }}}}%% sequenceDiagram participant a `, { logLevel: 0, sequence: { mirrorActors: false, noteFontSize: 18, noteFontFamily: 'Arial' }, } ); }); }); context('svg size', () => { it('should render a sequence diagram when useMaxWidth is true (default)', () => { renderGraph( ` sequenceDiagram participant Alice participant Bob participant John as John
Second Line Alice ->> Bob: Hello Bob, how are you? Bob-->>John: How about you John? Bob--x Alice: I am good thanks! Bob-x John: I am good thanks! Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. Bob-->Alice: Checking with John... alt either this Alice->>John: Yes else or this Alice->>John: No else or this will happen Alice->John: Maybe end par this happens in parallel Alice -->> Bob: Parallel message 1 and Alice -->> John: Parallel message 2 end `, { sequence: { useMaxWidth: true } } ); cy.get('svg').should((svg) => { expect(svg).to.have.attr('width', '100%'); // expect(svg).to.have.attr('height'); // const height = parseFloat(svg.attr('height')); // expect(height).to.be.within(920, 971); const style = svg.attr('style'); expect(style).to.match(/^max-width: [\d.]+px;$/); const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join('')); // use within because the absolute value can be slightly different depending on the environment ±5% expect(maxWidthValue).to.be.within(820 * 0.95, 820 * 1.05); }); }); it('should render a sequence diagram when useMaxWidth is false', () => { renderGraph( ` sequenceDiagram participant Alice participant Bob participant John as John
Second Line Alice ->> Bob: Hello Bob, how are you? Bob-->>John: How about you John? Bob--x Alice: I am good thanks! Bob-x John: I am good thanks! Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. Bob-->Alice: Checking with John... alt either this Alice->>John: Yes else or this Alice->>John: No else or this will happen Alice->John: Maybe end par this happens in parallel Alice -->> Bob: Parallel message 1 and Alice -->> John: Parallel message 2 end `, { sequence: { useMaxWidth: false } } ); cy.get('svg').should((svg) => { // const height = parseFloat(svg.attr('height')); const width = parseFloat(svg.attr('width')); // expect(height).to.be.within(920, 971); // use within because the absolute value can be slightly different depending on the environment ±5% expect(width).to.be.within(820 * 0.95, 820 * 1.05); expect(svg).to.not.have.attr('style'); }); }); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/stateDiagram-v2.spec.js000066400000000000000000000275761433273745700301200ustar00rootroot00000000000000import { imgSnapshotTest, renderGraph } from '../../helpers/util'; describe('State diagram', () => { it('v2 should render a simple info', () => { imgSnapshotTest( ` info `, { logLevel: 1, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render a simple state diagrams', () => { imgSnapshotTest( ` stateDiagram-v2 [*] --> State1 State1 --> [*] `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render a long descriptions instead of id when available', () => { imgSnapshotTest( ` stateDiagram-v2 [*] --> S1 state "Some long name" as S1 `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render a long descriptions with additional descriptions', () => { imgSnapshotTest( ` stateDiagram-v2 [*] --> S1 state "Some long name" as S1: The description `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render a single state with short descriptions', () => { imgSnapshotTest( ` stateDiagram-v2 state "A long long name" as long1 state "A" as longlonglongid `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render a transition descriptions with new lines', () => { imgSnapshotTest( ` stateDiagram-v2 [*] --> S1 S1 --> S2: long line using
should work S1 --> S3: long line using
should work S1 --> S4: long line using \\nshould work `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render a state with a note', () => { imgSnapshotTest( ` stateDiagram-v2 State1: The state with a note note right of State1 Important information! You can write notes. end note `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render a state with on the left side when so specified', () => { imgSnapshotTest( ` stateDiagram-v2 State1: The state with a note with minus - and plus + in it note left of State1 Important information! You can write notes with . and in them. end note `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render a state with a note together with another state', () => { imgSnapshotTest( ` stateDiagram-v2 State1: The state with a note +,- note right of State1 Important information! You can write +,- notes. end note State1 --> State2 : With +,- note left of State2 : This is the note +,-
`, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render a note with multiple lines in it', () => { imgSnapshotTest( ` stateDiagram-v2 State1: The state with a note note right of State1 Important information! You\ncan write notes with multiple lines... Here is another line... And another line... end note `, { logLevel: 0, fontFamily: 'courier' } ); }); it('v2 should handle multiline notes with different line breaks', () => { imgSnapshotTest( ` stateDiagram-v2 State1 note right of State1 Line1
Line2
Line3
Line4
Line5 end note `, { logLevel: 0, fontFamily: 'courier' } ); }); it('v2 should render a states with descriptions including multi-line descriptions', () => { imgSnapshotTest( ` stateDiagram-v2 State1: This a a single line description State2: This a a multi line description State2: here comes the multi part [*] --> State1 State1 --> State2 State2 --> [*] `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render a simple state diagrams 2', () => { imgSnapshotTest( ` stateDiagram-v2 [*] --> State1 State1 --> State2 State1 --> State3 State1 --> [*] `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render a simple state diagrams with labels', () => { imgSnapshotTest( ` stateDiagram-v2 [*] --> State1 State1 --> State2 : Transition 1 State1 --> State3 : Transition 2 State1 --> State4 : Transition 3 State1 --> State5 : Transition 4 State2 --> State3 : Transition 5 State1 --> [*] `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render state descriptions', () => { imgSnapshotTest( ` stateDiagram-v2 state "Long state description" as XState1 state "Another Long state description" as XState2 XState2 : New line XState1 --> XState2 `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render composite states', () => { imgSnapshotTest( ` stateDiagram-v2 [*] --> NotShooting: Pacifist NotShooting --> A NotShooting --> B NotShooting --> C state NotShooting { [*] --> Idle: Yet another long long öong öong öong label Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig EvConfig EvConfig EvConfig EvConfig } `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render multiple composite states', () => { imgSnapshotTest( ` stateDiagram-v2 [*]-->TV state TV { [*] --> Off: Off to start with On --> Off : Turn off Off --> On : Turn on } TV--> Console state Console { [*] --> Off2: Off to start with On2--> Off2 : Turn off Off2 --> On2 : Turn on On2-->Playing state Playing { Alive --> Dead Dead-->Alive } } `, { logLevel: 0, fontFamily: 'courier' } ); }); it('v2 should render forks in composite states', () => { imgSnapshotTest( ` stateDiagram-v2 [*]-->TV state TV { state fork_state <<fork>> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <<join>> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] } `, { logLevel: 0, fontFamily: 'courier' } ); }); it('v2 should render forks and joins', () => { imgSnapshotTest( ` stateDiagram-v2 state fork_state <<fork>> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <<join>> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render concurrency states', () => { imgSnapshotTest( ` stateDiagram-v2 [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('v2 should render a state with states in it', () => { imgSnapshotTest( ` stateDiagram-v2 state PilotCockpit { state Parent { C } } `, { logLevel: 0, } ); }); it('v2 it should be possibel to use a choice', () => { imgSnapshotTest( ` stateDiagram-v2 [*] --> Off Off --> On state MyChoice [[choice]] On --> MyChoice MyChoice --> Washing MyChoice --> Drying Washing --> Finished Finished --> [*] `, { logLevel: 0, } ); }); it('v2 A compound state should be able to link to itself', () => { imgSnapshotTest( ` stateDiagram state Active { Idle } Inactive --> Idle: ACT Active --> Active: LOG `, { logLevel: 0, } ); }); it('v2 width of compond state should grow with title if title is wider', () => { imgSnapshotTest( ` stateDiagram-v2 state "Long state name 2" as NotShooting { a-->b } `, { logLevel: 0, } ); }); it('v2 state label with names in it', () => { imgSnapshotTest( ` stateDiagram-v2 Yswsii: Your state with spaces in it [*] --> Yswsii `, { logLevel: 0, } ); }); it('v2 Simplest composite state', () => { imgSnapshotTest( ` stateDiagram-v2 state Parent { C } `, { logLevel: 0, fontFamily: 'courier', } ); }); it('v2 should handle multiple arrows from one node to another', () => { imgSnapshotTest( ` stateDiagram-v2 a --> b: Start a --> b: Stop `, { logLevel: 0, fontFamily: 'courier', } ); }); it('v2 should handle multiple notes added to one state', () => { imgSnapshotTest( ` stateDiagram-v2 MyState note left of MyState : I am a leftie note right of MyState : I am a rightie `, { logLevel: 0, fontFamily: 'courier', } ); }); it('v2 should handle different rendering directions in composite states', () => { imgSnapshotTest( ` stateDiagram-v2 direction LR state A { direction BT a --> b } state C { direction RL c --> d } A --> C `, { logLevel: 0, fontFamily: 'courier', } ); }); it('v2 handle transition from one state in a composite state to a composite state', () => { imgSnapshotTest( ` stateDiagram-v2 state S1 { sub1 -->sub2 } state S2 { sub4 } S1 --> S2 sub1 --> sub4 `, { logLevel: 0, fontFamily: 'courier', } ); }); it('v2 should render a state diagram when useMaxWidth is true (default)', () => { renderGraph( ` stateDiagram-v2 [*] --> State1 State1 --> [*] `, { state: { useMaxWidth: true } } ); cy.get('svg').should((svg) => { expect(svg).to.have.attr('width', '100%'); // expect(svg).to.have.attr('height'); // const height = parseFloat(svg.attr('height')); // expect(height).to.be.within(177, 178); const style = svg.attr('style'); expect(style).to.match(/^max-width: [\d.]+px;$/); const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join('')); // use within because the absolute value can be slightly different depending on the environment ±5% expect(maxWidthValue).to.be.within(65, 85); }); }); it('v2 should render a state diagram when useMaxWidth is false', () => { renderGraph( ` stateDiagram-v2 [*] --> State1 State1 --> [*] `, { state: { useMaxWidth: false } } ); cy.get('svg').should((svg) => { // const height = parseFloat(svg.attr('height')); const width = parseFloat(svg.attr('width')); // expect(height).to.be.within(177, 178); // use within because the absolute value can be slightly different depending on the environment ±5% expect(width).to.be.within(65, 85); expect(svg).to.not.have.attr('style'); }); }); it('v2 should render a state diagram and set the correct length of the labels', () => { imgSnapshotTest( ` stateDiagram-v2 [*] --> 1 1 --> 2: test({ foo#colon; 'far' }) 2 --> [*] `, { logLevel: 0, fontFamily: 'courier' } ); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/stateDiagram.spec.js000066400000000000000000000231021433273745700275500ustar00rootroot00000000000000import { imgSnapshotTest, renderGraph } from '../../helpers/util'; describe('State diagram', () => { it('should render a simple state diagrams', () => { imgSnapshotTest( ` stateDiagram [*] --> State1 State1 --> [*] `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render a long descriptions instead of id when available', () => { imgSnapshotTest( ` stateDiagram [*] --> S1 state "Some long name" as S1 `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render a long descriptions with additional descriptions', () => { imgSnapshotTest( ` stateDiagram [*] --> S1 state "Some long name" as S1: The description `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render a single state with short descriptions', () => { imgSnapshotTest( ` stateDiagram state "A long long name" as long1 state "A" as longlonglongid `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render a transition descriptions with new lines', () => { imgSnapshotTest( ` stateDiagram [*] --> S1 S1 --> S2: long line using
should work S1 --> S3: long line using
should work S1 --> S4: long line using \\nshould work `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render a state with a note', () => { imgSnapshotTest( ` stateDiagram State1: The state with a note note right of State1 Important information! You can write notes. end note `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render a state with on the left side when so specified', () => { imgSnapshotTest( ` stateDiagram State1: The state with a note with minus - and plus + in it note left of State1 Important information! You can write notes with . and in them. end note `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render a state with a note together with another state', () => { imgSnapshotTest( ` stateDiagram State1: The state with a note +,- note right of State1 Important information! You can write +,- notes. end note State1 --> State2 : With +,- note left of State2 : This is the note +,-
`, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render a note with multiple lines in it', () => { imgSnapshotTest( ` stateDiagram State1: The state with a note note right of State1 Important information! You\ncan write notes with multiple lines... Here is another line... And another line... end note `, { logLevel: 0, fontFamily: 'courier' } ); }); it('should handle multiline notes with different line breaks', () => { imgSnapshotTest( ` stateDiagram State1 note right of State1 Line1
Line2
Line3
Line4
Line5 end note `, { logLevel: 0, fontFamily: 'courier' } ); }); it('should render a states with descriptions including multi-line descriptions', () => { imgSnapshotTest( ` stateDiagram State1: This a a single line description State2: This a a multi line description State2: here comes the multi part [*] --> State1 State1 --> State2 State2 --> [*] `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render a simple state diagrams 2', () => { imgSnapshotTest( ` stateDiagram [*] --> State1 State1 --> State2 State1 --> State3 State1 --> [*] `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render a simple state diagrams with labels', () => { imgSnapshotTest( ` stateDiagram [*] --> State1 State1 --> State2 : Transition 1 State1 --> State3 : Transition 2 State1 --> State4 : Transition 3 State1 --> State5 : Transition 4 State2 --> State3 : Transition 5 State1 --> [*] `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render state descriptions', () => { imgSnapshotTest( ` stateDiagram state "Long state description" as XState1 state "Another Long state description" as XState2 XState2 : New line XState1 --> XState2 `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render composite states', () => { imgSnapshotTest( ` stateDiagram [*] --> NotShooting: Pacifist NotShooting --> A NotShooting --> B NotShooting --> C state NotShooting { [*] --> Idle: Yet another long long öong öong öong label Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig EvConfig EvConfig EvConfig EvConfig } `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render multiple composit states', () => { imgSnapshotTest( ` stateDiagram [*]-->TV state TV { [*] --> Off: Off to start with On --> Off : Turn off Off --> On : Turn on } TV--> Console state Console { [*] --> Off2: Off to start with On2--> Off2 : Turn off Off2 --> On2 : Turn on On2-->Playing state Playing { Alive --> Dead Dead-->Alive } } `, { logLevel: 0, fontFamily: 'courier' } ); }); it('should render forks in composit states', () => { imgSnapshotTest( ` stateDiagram [*]-->TV state TV { state fork_state <<fork>> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <<join>> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] } `, { logLevel: 0, fontFamily: 'courier' } ); }); it('should render forks and joins', () => { imgSnapshotTest( ` stateDiagram state fork_state <<fork>> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <<join>> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render concurrency states', () => { imgSnapshotTest( ` stateDiagram [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } `, { logLevel: 0, fontFamily: 'courier' } ); cy.get('svg'); }); it('should render a state with states in it', () => { imgSnapshotTest( ` stateDiagram state PilotCockpit { state Parent { C } } `, { logLevel: 0, fontFamily: 'courier', } ); }); it('Simplest composite state', () => { imgSnapshotTest( ` stateDiagram state Parent { C } `, { logLevel: 0, fontFamily: 'courier', } ); }); it('should handle multiple arrows from one node to another', () => { imgSnapshotTest( ` stateDiagram a --> b: Start a --> b: Stop `, { logLevel: 0, fontFamily: 'courier', } ); }); it('should render a state diagram when useMaxWidth is true (default)', () => { renderGraph( ` stateDiagram [*] --> State1 State1 --> [*] `, { state: { useMaxWidth: true } } ); cy.get('svg').should((svg) => { expect(svg).to.have.attr('width', '100%'); // expect(svg).to.have.attr('height'); // const height = parseFloat(svg.attr('height')); // expect(height).to.be.within(176, 178); const style = svg.attr('style'); expect(style).to.match(/^max-width: [\d.]+px;$/); const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join('')); // use within because the absolute value can be slightly different depending on the environment ±5% // Todo investigate difference // expect(maxWidthValue).to.be.within(112 * .95, 112 * 1.05); expect(maxWidthValue).to.be.within(65, 85); }); }); it('should render a state diagram when useMaxWidth is false', () => { renderGraph( ` stateDiagram [*] --> State1 State1 --> [*] `, { state: { useMaxWidth: false } } ); cy.get('svg').should((svg) => { // const height = parseFloat(svg.attr('height')); const width = parseFloat(svg.attr('width')); // expect(height).to.be.within(176, 178); // use within because the absolute value can be slightly different depending on the environment ±5% // Todo investigate difference // expect(width).to.be.within(112 * .95, 112 * 1.05); expect(width).to.be.within(65, 85); expect(svg).to.not.have.attr('style'); }); }); }); mermaid-js-mermaid-9bb0ed2/cypress/integration/rendering/theme.spec.js000066400000000000000000000224261433273745700262550ustar00rootroot00000000000000import { imgSnapshotTest } from '../../helpers/util.js'; describe('themeCSS balancing, it', () => { it('should not allow unbalanced CSS definitions', () => { imgSnapshotTest( ` %%{init: { 'themeCSS': '} * { background: red }' } }%% flowchart TD a --> b `, {} ); cy.get('svg'); }); it('should not allow unbalanced CSS definitions 2', () => { imgSnapshotTest( ` %%{init: { 'themeCSS': '\u007D * { background: red }' } }%% flowchart TD a2 --> b2 `, {} ); cy.get('svg'); }); }); describe('Pie Chart', () => { // beforeEach(()=>{ // cy.clock((new Date('2014-06-09')).getTime()); // }); ['default', 'forest', 'dark', 'neutral'].forEach((theme) => { describe(theme, () => { it('should render a pie diagram', () => { imgSnapshotTest( ` pie title Sports in Sweden accTitle: This is a title accDescr: This is a description "Bandy" : 40 "Ice-Hockey" : 80 "Football" : 90 `, { theme } ); cy.get('svg'); }); it('should render a flowchart diagram', () => { imgSnapshotTest( ` %%{init: { 'logLevel': 0} }%% graph TD accTitle: This is a title accDescr: This is a description A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end `, { theme } ); cy.get('svg'); }); it('should render a new flowchart diagram', () => { imgSnapshotTest( ` %%{init: { 'logLevel': 0, 'theme': '${theme}'} }%% flowchart TD accTitle: This is a title accDescr: This is a description A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[Another] C ==>|One| D[Laptop] C x--x|Two| E[iPhone] C o--o|Three| F[fa:fa-car Car] subgraph section C D E F G end `, { theme } ); cy.get('svg'); }); it('should render a sequence diagram', () => { imgSnapshotTest( ` %%{init: { 'logLevel': 0, 'theme': '${theme}'} }%% sequenceDiagram accTitle: This is a title accDescr: This is a description autonumber par Action 1 Alice->>John: Hello John, how are you? and Action 2 Alice->>Bob: Hello Bob, how are you? end Alice->>+John: Hello John, how are you? Alice->>+John: John, can you hear me? John-->>-Alice: Hi Alice, I can hear you! Note right of John: John is perceptive John-->>-Alice: I feel great! loop Every minute John-->Alice: Great! end `, { theme } ); cy.get('svg'); }); it('should render a class diagram', () => { imgSnapshotTest( ` %%{init: { 'logLevel': 0, 'theme': '${theme}'} }%% classDiagram accTitle: This is a title accDescr: This is a description Animal "*" <|-- "1" Duck Animal "1" <|-- "10" Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP classA --|> classB : Inheritance classC --* classD : Composition classE --o classF : Aggregation classG --> classH : Association classI -- classJ : Link(Solid) classK ..> classL : Dependency classM ..|> classN : Realization classO .. classP : Link(Dashed) `, { theme } ); cy.get('svg'); }); it('should render a state diagram', () => { imgSnapshotTest( ` %%{init: { 'logLevel': 0, 'theme': '${theme}'} }%% stateDiagram accTitle: This is a title accDescr: This is a description [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } state SomethingElse { A --> B B --> A } Active --> SomethingElse note right of SomethingElse : This is the note to the right. `, { theme } ); cy.get('svg'); }); it('should render a state diagram (v2)', () => { imgSnapshotTest( ` %%{init: { 'logLevel': 0, 'theme': '${theme}'} }%% stateDiagram-v2 accTitle: This is a title accDescr: This is a description [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } state SomethingElse { A --> B B --> A } Active --> SomethingElse2 note right of SomethingElse2 : This is the note to the right. `, { theme } ); cy.get('svg'); }); it('should render a er diagram', () => { imgSnapshotTest( ` erDiagram accTitle: This is a title accDescr: This is a description CUSTOMER }|..|{ DELIVERY-ADDRESS : has CUSTOMER ||--o{ ORDER : places CUSTOMER ||--o{ INVOICE : "liable for" DELIVERY-ADDRESS ||--o{ ORDER : receives INVOICE ||--|{ ORDER : covers ORDER ||--|{ ORDER-ITEM : includes PRODUCT-CATEGORY ||--|{ PRODUCT : contains PRODUCT ||--o{ ORDER-ITEM : "ordered in" `, { theme } ); cy.get('svg'); }); it('should render a user journey diagram', () => { imgSnapshotTest( ` %%{init: { 'logLevel': 0, 'theme': '${theme}'} }%% journey accTitle: This is a title accDescr: This is a description title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me `, { theme } ); cy.get('svg'); }); it('should render a gantt diagram', () => { cy.clock(new Date('2014-01-06').getTime()); imgSnapshotTest( ` gantt accTitle: This is a title accDescr: This is a description dateFormat :YYYY-MM-DD title :Adding GANTT diagram functionality to mermaid excludes :excludes the named dates/days from being included in a charted task.. section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page :20h Add another diagram to demo page :48h `, { theme } ); cy.get('svg'); }); }); }); }); mermaid-js-mermaid-9bb0ed2/cypress/platform/000077500000000000000000000000001433273745700212025ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/cypress/platform/bundle-test.js000066400000000000000000000030531433273745700237670ustar00rootroot00000000000000import mermaid from '../../packages/mermaid/src/mermaid'; let code = `flowchart LR Power_Supply --> Transmitter_A Power_Supply --> Transmitter_B Transmitter_A --> D Transmitter_B --> D`; let code2 = `gantt dateFormat YYYY-MM-DD title Adding GANTT diagram functionality to mermaid section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d`; const code3 = `flowchart TD A() B(Bold text!)`; if (location.href.match('test-html-escaping')) { code = code3; } mermaid.initialize({ theme: 'default', // fontFamily: '"Lucida Console", Monaco, monospace', startOnLoad: false, securityLevel: 'loose', flowchart: { htmlLabels: true, }, gantt: { axisFormatter: [ [ '%Y-%m-%d', (d) => { return d.getDay() === 1; }, ], ], }, }); mermaid.render( 'the-id-of-the-svg', code, (svg) => { console.log(svg); const elem = document.querySelector('#graph-to-be'); elem.innerHTML = svg; } // ,document.querySelector('#tmp') ); mermaid-js-mermaid-9bb0ed2/cypress/platform/class.html000066400000000000000000000106421433273745700232000ustar00rootroot00000000000000

info below

      %%{init: {'theme': 'base',  'fontFamily': 'courier', 'themeVariables': {  'primaryColor': '#fff000'}}}%%
      classDiagram
       class BankAccount{
        +String owner
        +BigDecimal balance
        +deposit(amount) bool
        +withdrawl(amount) int
       }
       cssClass "BankAccount" customCss

    
      %%{init: {'theme': 'base',  'fontFamily': 'courier', 'themeVariables': {  'primaryColor': '#fff000'}}}%%
      classDiagram-v2
       class BankAccount{
        +String owner
        +BigDecimal balance
        +deposit(amount) bool
        +withdrawl(amount) int
       }
       cssClass "BankAccount" customCss
    
        %%{init: {'theme': 'base',  'fontFamily': 'courier', 'themeVariables': {  'primaryColor': '#fff000'}}}%%
        classDiagram
         class BankAccount{
          +String owner
          +BigDecimal balance
          +deposit(amount) bool
          +withdrawl(amount) int
        }
          Class01~T~ <|-- AveryLongClass : Cool
          Class03~T~ *-- Class04~T~
            Class01 : size()
            Class01 : int chimp
            Class01 : int gorilla
            Class08 <--> C2: Cool label
            class Class10~T~ {
              <<service>>
              int id
              test()
            }
            callback Class01 "callback" "A Tooltip"

    
      flowchart TB
      a_a(Aftonbladet) --> b_b[gorilla]:::apa --> c_c{chimp}:::apa -->a_a
      a_a --> c --> d_d --> c_c
      classDef apa fill:#f9f,stroke:#333,stroke-width:4px;
      class a_a apa;
      click a_a "https://www.aftonbladet.se" "apa"

    
        classDiagram-v2

        classA -- classB : Inheritance
        classA -- classC : link
        classC -- classD : link
        classB -- classD
        classA --|> classB : Inheritance
        classC --* classD : Composition
        classE --o classF : Aggregation
        classG --> classH : Association
        classI -- classJ : Link(Solid)
        classK ..> classL : Dependency
        classM ..|> classN : Realization
        classO .. classP : Link(Dashed)
        classA : +attr1
        classA : attr2
        classA : method1()
        <<interface>> classB
        classB : method2() int

        Customer "1" --> "*" Ticket
        Student "1" --> "1..*" Course
        Galaxy --> "many" Star : Contains
        <<interface>> Customer

        class Shape
        callback Shape "callbackFunction" "This is a tooltip for a callback"

    
mermaid-js-mermaid-9bb0ed2/cypress/platform/click_security_loose.html000066400000000000000000000140011433273745700263010ustar00rootroot00000000000000 Mermaid Quick Test Page
    graph TB
      FunctionTest1-->URLTest1
      click FunctionTest1 clickByFlow "Add a div"
      click URLTest1 "http://localhost:9000/empty.html" "Visit mermaid docs"
      
  graph TB
    1Function--->2URL
    click 1Function clickByFlow "Add a div"
    click 2URL "http://localhost:9000/empty.html" "Visit mermaid docs"
      
    flowchart TB
      FunctionTest2-->URLTest2
      click FunctionTest2 clickByFlow "Add a div"
      click URLTest2 "http://localhost:9000/empty.html" "Visit mermaid docs" _self
      
  flowchart TB
    10Function--->20URL
    click 10Function clickByFlow "Add a div"
    click 20URL "http://localhost:9000/empty.html" "Visit mermaid docs" _self
      
  classDiagram
    class ShapeLink
    link ShapeLink "http://localhost:9000/empty.html" "This is a tooltip for a link"
    class ShapeCallback
    callback ShapeCallback "clickByClass" "This is a tooltip for a callback"
      
  classDiagram-v2
    class ShapeLink2
    link ShapeLink2 "http://localhost:9000/empty.html" "This is a tooltip for a link"
    class ShapeCallback2
    callback ShapeCallback2 "clickByClass" "This is a tooltip for a callback"
      
    gantt
    dateFormat  YYYY-MM-DD
    axisFormat  %d/%m
    title Adding GANTT diagram to mermaid
    excludes weekdays 2014-01-10

    section A section
    Completed task            :done,    des1, 2014-01-06,2014-01-08
    Active task               :active,  des2, 2014-01-09, 3d
    Future task               :         des3, after des2, 5d
    Future task2               :         des4, after des3, 5d

    section Critical tasks
    Completed task in the critical line :crit, done, 2014-01-06,24h
    Implement parser and jison          :crit, done, after des1, 2d
    Create tests for parser             :crit, active, 3d
    Future task in critical line        :crit, 5d
    Create tests for renderer           :2d
    Add to mermaid                      :1d

    section Documentation
    Describe gantt syntax               :active, a1, after des1, 3d
    Add gantt diagram to demo page      :after a1  , 20h
    Add another diagram to demo page    :doc1, after a1  , 48h

    section Clickable
    Visit mermaidjs               :active, cl1, 2014-01-07,2014-01-10
    Calling a Callback (look at the console log) :cl2, after cl1, 3d
    Calling a Callback with args :cl3, after cl1, 3d

    click cl1 href "http://localhost:9000/empty.html"
    click cl2 call clickByGantt()
    click cl3 call clickByGantt("test1", test2, test3)

    section Last section
    Describe gantt syntax               :after doc1, 3d
    Add gantt diagram to demo page      : 20h
    Add another diagram to demo page    : 48h
    
      graph TB
        FunctionArgTest2-->URL
        click FunctionArgTest2 call clickByFlowArg(ARGUMENT) "Add a div"
        click URL "http://localhost:9000/empty.html" "Visit mermaid docs"
      
      flowchart TB
        2FunctionArg-->URL
        click 2FunctionArg call clickByFlowArg(ARGUMENT) "Add a div"
        click URL "http://localhost:9000/empty.html" "Visit mermaid docs"
      
      classDiagram
      class ShapeLink
      link ShapeLink "http://localhost:9000/empty.html" "This is a tooltip for a link"
      class ShapeCallback
      click ShapeCallback call clickByClass(123) "This is a tooltip for a callback"
      
      classDiagram-v2
        class ShapeLink2
        link ShapeLink2 "http://localhost:9000/empty.html" "This is a tooltip for a link"
        class ShapeCallback2
        click ShapeCallback2 call clickByClass(123) "This is a tooltip for a callback"
      
mermaid-js-mermaid-9bb0ed2/cypress/platform/click_security_other.html000066400000000000000000000056661433273745700263220ustar00rootroot00000000000000 Mermaid Quick Test Page
    graph TB
      Function1-->URL1
      click Function1 clickByFlow "Add a div"
      click URL1 "http://localhost:9000/empty.html" "Visit mermaid docs"
    
  graph TB
    1Function-->2URL
    click 1Function clickByFlow "Add a div"
    click 2URL "http://localhost:9000/empty.html" "Visit mermaid docs"
    
    gantt
    dateFormat  YYYY-MM-DD
    axisFormat  %d/%m
    title Adding GANTT diagram to mermaid
    excludes weekdays 2014-01-10

    section A section
    Completed task            :done,    des1, 2014-01-06,2014-01-08
    Active task               :active,  des2, 2014-01-09, 3d
    Future task               :         des3, after des2, 5d
    Future task2               :         des4, after des3, 5d

    section Critical tasks
    Completed task in the critical line :crit, done, 2014-01-06,24h
    Implement parser and jison          :crit, done, after des1, 2d
    Create tests for parser             :crit, active, 3d
    Future task in critical line        :crit, 5d
    Create tests for renderer           :2d
    Add to mermaid                      :1d

    section Documentation
    Describe gantt syntax               :active, a1, after des1, 3d
    Add gantt diagram to demo page      :after a1  , 20h
    Add another diagram to demo page    :doc1, after a1  , 48h

    section Clickable
    Visit mermaidjs               :active, cl1, 2014-01-07,2014-01-10
    Calling a Callback (look at the console log) :cl2, after cl1, 3d

    click cl1 href "http://localhost:9000/empty.html"
    click cl2 call clickByGantt("test", test, test)

    section Last section
    Describe gantt syntax               :after doc1, 3d
    Add gantt diagram to demo page      : 20h
    Add another diagram to demo page    : 48h
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/click_security_sandbox.html000066400000000000000000000141411433273745700266230ustar00rootroot00000000000000 Mermaid Quick Test Page
    graph TB
      Function-->URL
      click Function clickByFlow "Add a div"
      click URL "http://localhost:9000/empty.html" "Visit mermaid docs"
      
  graph TB
    1Function--->2URL
    click 1Function clickByFlow "Add a div"
    click 2URL "http://localhost:9000/empty.html" "Visit mermaid docs"
      
    flowchart TB
      Function-->URL
      click Function clickByFlow "Add a div"
      click URL "http://localhost:9000/empty.html" "Visit mermaid docs" _self
      
  flowchart TB
    1Function--->2URL
    click 1Function clickByFlow "Add a div"
    click 2URL "http://localhost:9000/empty.html" "Visit mermaid docs" _self
      
  classDiagram
    class ShapeLink
    link ShapeLink "http://localhost:9000/empty.html" "This is a tooltip for a link"
    class ShapeCallback
    callback ShapeCallback "clickByClass" "This is a tooltip for a callback"
      
  classDiagram-v2
    class ShapeLink2
    link ShapeLink2 "http://localhost:9000/empty.html" "This is a tooltip for a link"
    class ShapeCallback2
    callback ShapeCallback2 "clickByClass" "This is a tooltip for a callback"
      
    gantt
    dateFormat  YYYY-MM-DD
    axisFormat  %d/%m
    title Adding GANTT diagram to mermaid
    excludes weekdays 2014-01-10

    section A section
    Completed task            :done,    des1, 2014-01-06,2014-01-08
    Active task               :active,  des2, 2014-01-09, 3d
    Future task               :         des3, after des2, 5d
    Future task2               :         des4, after des3, 5d

    section Critical tasks
    Completed task in the critical line :crit, done, 2014-01-06,24h
    Implement parser and jison          :crit, done, after des1, 2d
    Create tests for parser             :crit, active, 3d
    Future task in critical line        :crit, 5d
    Create tests for renderer           :2d
    Add to mermaid                      :1d

    section Documentation
    Describe gantt syntax               :active, a1, after des1, 3d
    Add gantt diagram to demo page      :after a1  , 20h
    Add another diagram to demo page    :doc1, after a1  , 48h

    section Clickable
    Visit mermaidjs               :active, cl1, 2014-01-07,2014-01-10
    Calling a Callback (look at the console log) :cl2, after cl1, 3d
    Calling a Callback with args :cl3, after cl1, 3d

    click cl1 href "http://localhost:9000/empty.html"
    click cl2 call clickByGantt()
    click cl3 call clickByGantt("test1", test2, test3)

    section Last section
    Describe gantt syntax               :after doc1, 3d
    Add gantt diagram to demo page      : 20h
    Add another diagram to demo page    : 48h
    
      graph TB
        FunctionArg-->URL
        click FunctionArg call clickByFlowArg(ARGUMENT) "Add a div"
        click URL "http://localhost:9000/empty.html" "Visit mermaid docs"
      
      flowchart TB
        FunctionArg-->URL
        click FunctionArg call clickByFlowArg(ARGUMENT) "Add a div"
        click URL "http://localhost:9000/empty.html" "Visit mermaid docs"
      
      classDiagram
      class ShapeLink
      link ShapeLink "http://localhost:9000/empty.html" "This is a tooltip for a link"
      class ShapeCallback
      click ShapeCallback call clickByClass(123) "This is a tooltip for a callback"
      
      classDiagram-v2
        class ShapeLink2
        link ShapeLink2 "http://localhost:9000/empty.html" "This is a tooltip for a link"
        class ShapeCallback2
        click ShapeCallback2 call clickByClass(123) "This is a tooltip for a callback"
      
mermaid-js-mermaid-9bb0ed2/cypress/platform/click_security_strict.html000066400000000000000000000062461433273745700265040ustar00rootroot00000000000000 Mermaid Quick Test Page
    graph TB
      Function1-->URL1
      click Function1 clickByFlow "Add a div"
      click URL1 "http://localhost:9000/empty.html" "Visit mermaid docs"
    
  graph TB
    1Function-->2URL
    click 1Function clickByFlow "Add a div"
    click 2URL "http://localhost:9000/empty.html" "Visit mermaid docs"
    
    gantt
    dateFormat  YYYY-MM-DD
    axisFormat  %d/%m
    title Adding GANTT diagram to mermaid
    excludes weekdays 2014-01-10

    section A section
    Completed task            :done,    des1, 2014-01-06,2014-01-08
    Active task               :active,  des2, 2014-01-09, 3d
    Future task               :         des3, after des2, 5d
    Future task2               :         des4, after des3, 5d

    section Critical tasks
    Completed task in the critical line :crit, done, 2014-01-06,24h
    Implement parser and jison          :crit, done, after des1, 2d
    Create tests for parser             :crit, active, 3d
    Future task in critical line        :crit, 5d
    Create tests for renderer           :2d
    Add to mermaid                      :1d

    section Documentation
    Describe gantt syntax               :active, a1, after des1, 3d
    Add gantt diagram to demo page      :after a1  , 20h
    Add another diagram to demo page    :doc1, after a1  , 48h

    section Clickable
    Visit mermaidjs               :active, cl1, 2014-01-07,2014-01-10
    Calling a Callback (look at the console log) :cl2, after cl1, 3d
    Calling a Callback with args :cl3, after cl1, 3d

    click cl1 href "http://localhost:9000/empty.html"
    click cl2 call clickByGantt()
    click cl3 call clickByGantt("test1", test2, test3)

    section Last section
    Describe gantt syntax               :after doc1, 3d
    Add gantt diagram to demo page      : 20h
    Add another diagram to demo page    : 48h
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/css1.html000066400000000000000000000017731433273745700227510ustar00rootroot00000000000000 Mermaid Quick Test Page
  %%{init: { 'themeCSS': '} * { background: lightblue }' } }%%
  flowchart TD
    a --> b
    
   %%{init:{"theme":"base", "themeVariables": {"primaryColor":"#411d4e", "titleColor":"white", "darkMode":true}}}%%
    flowchart LR
    subgraph A
        a --> b
    end
    subgraph B
        i -->f
    end
    A --> B
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/current.html000066400000000000000000000105251433273745700235550ustar00rootroot00000000000000

info below

flowchart BT subgraph S1 sub1 -->sub2 end subgraph S2 sub4 end S1 --> S2 sub1 --> sub4
sequenceDiagram Alice->>Bob:Extremely utterly long line of longness which had preivously overflown the actor box as it is much longer than what it should be Bob->>Alice: I'm short though
%%{init: {'securityLevel': 'loose'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{{Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?}} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[Car] click A "index.html#link-clicked" "link test" click B callback "click test" classDef someclass fill:#f96; class A someclass; class C someclass;
flowchart BT subgraph a b1 -- ok --> b2 end a -- sert --> c c --> d b1 --> d a --asd123 --> d
stateDiagram-v2 state A { B1 --> B2: ok } A --> C: sert C --> D B1 --> D A --> D: asd123
%% this does not produce the desired result flowchart TB subgraph container_Beta process_C-->Process_D end subgraph container_Alpha process_A-->process_B process_B-->|via_AWSBatch|container_Beta process_A-->|messages|process_C end
flowchart TB a{{"Lorem 'ipsum' dolor 'sit' amet, 'consectetur' adipiscing 'elit'."}} --> b{{"Lorem #quot;ipsum#quot; dolor #quot;sit#quot; amet,#quot;consectetur#quot; adipiscing #quot;elit#quot;."}}
flowchart TB internet nat routeur lb1 lb2 compute1 compute2 subgraph project routeur nat subgraph subnet1 compute1 lb1 end subgraph subnet2 compute2 lb2 end end internet --> routeur routeur --> subnet1 & subnet2 subnet1 & subnet2 --> nat --> internet
flowchart TD subgraph one[One] subgraph sub_one[Sub One] _sub_one end end subgraph two[Two] _two end sub_one --> two
flowchart TD subgraph one[One] subgraph sub_one[Sub One] _sub_one end subgraph sub_two[Sub Two] _sub_two end _one end %% here, either the first or the second one sub_one --> sub_two _one --> b
mermaid-js-mermaid-9bb0ed2/cypress/platform/current2.html000066400000000000000000000071441433273745700236420ustar00rootroot00000000000000

info below

flowchart BT
    subgraph two
    b1
    end
    subgraph three
    c1-->c2
    end
    c1 --apa apa apa--> b1
    two --> c2
      
sequenceDiagram
   Alice->>Bob:Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be
   Bob->>Alice: I'm short though
      
        %%{init: {'securityLevel': 'loose'}}%%
      graph TD
        A[Christmas] -->|Get money| B(Go shopping)
        B --> C{{Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?}} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[Car] click A "index.html#link-clicked" "link test" click B callback "click test" classDef someclass fill:#f96; class A someclass; class C someclass;

      flowchart BT
      subgraph a
        b1 -- ok --> b2
      end
      a -- sert --> c
      c --> d
      b1 --> d
      a --asd123 --> d
      
stateDiagram-v2
  state A {
    B1 --> B2: ok
  }
  A --> C: sert
  C --> D
  B1 --> D
  A --> D: asd123
      
        %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%%
flowchart LR
  a -->b
  subgraph A
  B
  end
  subgraph B
  b
  end
    
flowchart TB
    subgraph A
    b-->B
    a-->c
    end
    subgraph B
      c
    end
    
sequenceDiagram
Alice->Bob: Hello Bob, how are you?
Note over Alice,Bob: Looks
Note over Bob,Alice: Looks back
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/e2e.html000066400000000000000000000036531433273745700225520ustar00rootroot00000000000000 mermaid-js-mermaid-9bb0ed2/cypress/platform/empty.html000066400000000000000000000004131433273745700232240ustar00rootroot00000000000000 Empty mermaid-js-mermaid-9bb0ed2/cypress/platform/exploit.js000066400000000000000000000003521433273745700232240ustar00rootroot00000000000000const div = parent.document.createElement('div'); div.id = 'the-malware'; div.className = 'malware'; div.innerHTML = 'XSS Succeeded'; parent.document.getElementsByTagName('body')[0].appendChild(div); throw new Error('XSS Succeeded'); mermaid-js-mermaid-9bb0ed2/cypress/platform/external-diagrams-mindmap.html000066400000000000000000000026471433273745700271330ustar00rootroot00000000000000

Should correctly load a third-party diagram using registerDiagram

mindmap
  root
    A
    B
    C
    D
    E
    A2
    B2
    C2
    D2
    E2
    child1((Circle))
        grandchild 1
        grandchild 2
    child2(Round rectangle)
        grandchild 3
        grandchild 4
    child3[Square]
        grandchild 5
        ::icon(mdi mdi-fire)
        gc6((grand
child 6)) ::icon(mdi mdi-fire) gc7((grand
grand
child 8))
mermaid-js-mermaid-9bb0ed2/cypress/platform/flow.html000066400000000000000000000023551433273745700230440ustar00rootroot00000000000000
      graph TB
      subgraph One
        a1-->a2-->a3
      end
    
      graph TB
        a_a --> b_b:::apa --> c_c:::apa
        classDef apa fill:#f9f,stroke:#333,stroke-width:4px;
        class a_a apa;
    
      graph TB
        a_a(Aftonbladet) --> b_b[gorilla]:::apa --> c_c{chimp}:::apa -->a_a
        a_a --> c --> d_d --> c_c
        classDef apa fill:#f9f,stroke:#333,stroke-width:4px;
        class a_a apa;
        click a_a "http://www.aftonbladet.se" "apa"
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/ghsa1.html000066400000000000000000000015171433273745700230770ustar00rootroot00000000000000

This element does not belong to the SVG but we can style it

mermaid-js-mermaid-9bb0ed2/cypress/platform/ghsa2.html000066400000000000000000000014221433273745700230730ustar00rootroot00000000000000

This element does not belong to the SVG but we can style it

mermaid-js-mermaid-9bb0ed2/cypress/platform/git-graph.html000066400000000000000000000036661433273745700237650ustar00rootroot00000000000000

info below


      gitGraph
       class BankAccount{
        +String owner
        +BigDecimal balance
        +deposit(amount) bool
        +withdrawl(amount) int
       }
       cssClass "BankAccount" customCss
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/gitgraph.html000066400000000000000000000114301433273745700236740ustar00rootroot00000000000000

info below

  %%{init: { "logLevel": "debug", "theme": "default" , "gitGraph" : {"showBranches":"false","rotateCommitLabel":"true"},"themeVariables": {
              "gitBranchLabel0": "#ff0000",
              "gitBranchLabel1": "#00ff00",
              "gitBranchLabel2": "#0000ff",
              "git0": "#550055"
       } } }%%
    gitGraph
      commit
       branch develop
       commit
       commit
       branch release/1.0.0
       checkout release/1.0.0
       commit tag:"1.0.0-beta1"
       checkout develop
       commit
       commit
       commit
       commit
       checkout release/1.0.0
       merge develop tag: "1.0.0-beta2"
    
    %%{init: { "logLevel": "debug", "theme": "default" , "gitGraph" : {"showBranches":"false"},"themeVariables": {
              "gitBranchLabel0": "#ff0000",
              "gitBranchLabel1": "#00ff00",
              "gitBranchLabel2": "#0000ff",
              "git0": "#550055"
       } } }%%
       gitGraph
      accTitle: "Git Graph"
      accDescr {
        Git Graph description.
        Multiline description
      }
       commit
       branch develop
       commit tag:"v1.0.0"
       commit
       checkout main
       commit type: HIGHLIGHT
       commit
       merge develop
       commit
       branch featureA
       commit
    
      gitGraph
      commit type:HIGHLIGHT
      branch hotfix
      checkout hotfix
      commit type:HIGHLIGHT
      branch develop
      checkout develop
      commit id:"ash" tag:"abc" type:HIGHLIGHT
      branch featureB
      checkout featureB
      commit type:HIGHLIGHT
      checkout main
      checkout hotfix
      commit type:HIGHLIGHT
      checkout develop
      commit type:REVERSE
      checkout featureB
      commit type:HIGHLIGHT
      checkout main
      merge hotfix
      checkout featureB
      commit type:HIGHLIGHT
      checkout develop
      branch featureA
      commit type:HIGHLIGHT
      checkout develop
      checkout featureA
      commit
      checkout featureB
      commit
      checkout develop
      merge featureA
      branch release
      checkout release
      commit type:HIGHLIGHT
      checkout main
      commit
      checkout release
      merge main
      checkout develop
      merge release
    
      gitGraph:
      commit
      commit
      branch newbranch
      commit
      merge main
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/gitgraph2.html000066400000000000000000000071611433273745700237640ustar00rootroot00000000000000

info below

       gitGraph:
       commit "Ashish"
       branch newbranch
       checkout newbranch
       commit id:"1111"
       commit tag:"test"
       checkout main
       commit type: HIGHLIGHT
       commit
       merge newbranch
       commit
       branch b2
       commit
    
      %%{init: {  "gitGraph": { "showBranches": true, "mainBranchName": "APA" }}}%%
      gitGraph
      commit
      branch hotfix
      checkout hotfix
      commit
      branch develop
      checkout develop
      commit id:"An id" tag:"A tag"
      branch featureB
      checkout featureB
      commit type:HIGHLIGHT
      checkout APA
      checkout hotfix
      commit type:NORMAL
      checkout develop
      commit type:REVERSE
      checkout featureB
      commit
      checkout APA
      merge hotfix
      checkout featureB
      commit
      checkout develop
      branch featureA
      commit
      checkout develop
      merge hotfix
      checkout featureA
      commit
      checkout featureB
      commit
      checkout develop
      merge featureA
      branch release
      checkout release
      commit
      checkout APA
      commit
      checkout release
      merge APA
      checkout develop
      merge release
    
      gitGraph:
      commit
      commit
      branch newbranch
      commit
      merge main
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/huge.html000066400000000000000000010634421433273745700230320ustar00rootroot00000000000000

info below

        graph LR
        A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;
      
mermaid-js-mermaid-9bb0ed2/cypress/platform/info.html000066400000000000000000000011651433273745700230260ustar00rootroot00000000000000

info below

info
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/interaction.html000066400000000000000000000104201433273745700244040ustar00rootroot00000000000000 Mermaid Quick Test Page
    graph TB
      Function-->URL
      click Function clickByFlow "Add a div"
      click URL "http://localhost:9000/webpackUsage.html" "Visit mermaid docs"
      
  graph TB
    1Function-->2URL
    click 1Function clickByFlow "Add a div"
    click 2URL "http://localhost:9000/webpackUsage.html" "Visit mermaid docs"
      
  classDiagram
    class Test
    class ShapeLink
    link ShapeLink "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link"
    class ShapeCallback
    callback ShapeCallback "clickByClass" "This is a tooltip for a callback"
      
  classDiagram-v2
    class ShapeCallback
    callback ShapeCallback "clickByClass" "This is a tooltip for a callback"
      
  classDiagram-v2
    class ShapeLink
    link ShapeLink "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link"
      
    gantt
    dateFormat  YYYY-MM-DD
    axisFormat  %d/%m
    title Adding GANTT diagram to mermaid
    excludes weekdays 2014-01-10

    section A section
    Completed task            :done,    des1, 2014-01-06,2014-01-08
    Active task               :active,  des2, 2014-01-09, 3d
    Future task               :         des3, after des2, 5d
    Future task2               :         des4, after des3, 5d

    section Critical tasks
    Completed task in the critical line :crit, done, 2014-01-06,24h
    Implement parser and jison          :crit, done, after des1, 2d
    Create tests for parser             :crit, active, 3d
    Future task in critical line        :crit, 5d
    Create tests for renderer           :2d
    Add to mermaid                      :1d

    section Documentation
    Describe gantt syntax               :active, a1, after des1, 3d
    Add gantt diagram to demo page      :after a1  , 20h
    Add another diagram to demo page    :doc1, after a1  , 48h

    section Clickable
    Visit mermaidjs               :active, cl1, 2014-01-07,2014-01-10
    Calling a Callback (look at the console log) :cl2, after cl1, 3d
    Calling a Callback with args :cl3, after cl1, 3d

    click cl1 href "http://localhost:9000/webpackUsage.html"
    click cl2 call clickByGantt()
    click cl3 call clickByGantt("test1", test2, test3)

    section Last section
    Describe gantt syntax               :after doc1, 3d
    Add gantt diagram to demo page      : 20h
    Add another diagram to demo page    : 48h
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/knsv.html000066400000000000000000000260761433273745700230640ustar00rootroot00000000000000
flowchart LR
  subgraph one
    direction LR
    A[myClass1] --> B[default]
    subgraph two
      direction BT
      C[myClass2] --> D[default]
    end
  end

    
flowchart LR
  classDef aPID stroke:#4e4403,fill:#fdde29,color:#4e4403,rx:5px,ry:5px;
  classDef crm stroke:#333333,fill:#DCDCDC,color:#333333,rx:5px,ry:5px;
  classDef type stroke:#502604,fill:#FAB565,color:#502604,rx:20px,ry:20px;;

  O0("Joe")
  class O0 aPID;

  O1("Person")
  class O1 crm;
  O0 -- has type -->O1["Person"]

  O2("aat:300411314")
  class O2 type;
  click O2 function "Sorry the newline html tags are not being processed correctly
So all of this appears on the
same line." O0 -- has type -->O2["Bug"] click O0 function "Lots of great info about Joe
Lots of great info about Joe
burt
fred";
flowchart TD
    subgraph test
    direction TB
    subgraph test2
      direction LR
      F --> D
    end
    subgraph test3
      direction TB
      G --> H
    end
    end
    
flowchart TD

  release-branch[Create Release Branch]:::relClass
  develop-branch[Update Develop Branch]:::relClass
  github-release-draft[GitHub Release Draft]:::relClass
  trigger-pipeline[Trigger Jenkins pipeline]:::fixClass
  github-release[GitHub Release]:::postClass

  build-ready --> release-branch
  build-ready --> develop-branch
  release-branch --> jenkins-release-build
  jenkins-release-build --> github-release-draft
  jenkins-release-build --> install-release
  install-release --> verify-release
  jenkins-release-build --> announce
  github-release-draft --> github-release
  verify-release --> verify-check
  verify-check -- Yes --> github-release
  verify-check -- No --> release-fix
  release-fix --> release-branch-pr
  verify-check -- No --> delete-artifacts
  release-branch-pr --> trigger-pipeline
  delete-artifacts --> trigger-pipeline
  trigger-pipeline --> jenkins-release-build


    
flowchart LR
        a["Haiya"]===>b
    
flowchart TD
    A --> B
    A --> C
    B --> C
    
flowchart TD
      A([stadium shape test])
      A -->|Get money| B([Go shopping])
      B --> C([Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?]) C -->|One| D([Laptop]) C -->|Two| E([iPhone]) C -->|Three| F([Car
wroom wroom]) click A "index.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass;
   sequenceDiagram
      title: My Sequence Diagram Title
      accTitle: My Acc Sequence Diagram
      accDescr: My Sequence Diagram Description

      Alice->>John: Hello John, how are you?
      John-->>Alice: Great!
      Alice-)John: See you later!
    
graph TD
    A -->|000| B
    B -->|111| C

    linkStyle 1 stroke:#ff3,stroke-width:4px,color:red;
    
  journey
      accTitle: My User Journey Diagram
      accDescr: My User Journey Diagram Description

      title My working day
      section Go to work
        Make tea: 5: Me
        Go upstairs: 3: Me
        Do work: 1: Me, Cat
      section Go home
        Go downstairs: 5: Me
        Sit down: 5: Me
    
        info
    
requirementDiagram
      accTitle: My req Diagram
      accDescr: My req Diagram Description

    requirement test_req {
    id: 1
    text: the test text.
    risk: high
    verifymethod: test
    }

    functionalRequirement test_req2 {
    id: 1.1
    text: the second test text.
    risk: low
    verifymethod: inspection
    }

    performanceRequirement test_req3 {
    id: 1.2
    text: the third test text.
    risk: medium
    verifymethod: demonstration
    }

    element test_entity {
    type: simulation
    }

    element test_entity2 {
    type: word doc
    docRef: reqs/test_entity
    }


    test_entity - satisfies -> test_req2
    test_req - traces -> test_req2
    test_req - contains -> test_req3
    test_req <- copies - test_entity2
    
gantt
    dateFormat  YYYY-MM-DD
    title       Adding GANTT diagram functionality to mermaid
    excludes    weekends
    %% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".)

    section A section
    Completed task            :done,    des1, 2014-01-06,2014-01-08
    Active task               :active,  des2, 2014-01-09, 3d
    Future task               :         des3, after des2, 5d
    Future task2              :         des4, after des3, 5d

    section Critical tasks
    Completed task in the critical line :crit, done, 2014-01-06,24h
    Implement parser and jison          :crit, done, after des1, 2d
    Create tests for parser             :crit, active, 3d
    Future task in critical line        :crit, 5d
    Create tests for renderer           :2d
    Add to mermaid                      :1d
    Functionality added                 :milestone, 2014-01-25, 0d

    section Documentation
    Describe gantt syntax               :active, a1, after des1, 3d
    Add gantt diagram to demo page      :after a1  , 20h
    Add another diagram to demo page    :doc1, after a1  , 48h

    section Last section
    Describe gantt syntax               :after doc1, 3d
    Add gantt diagram to demo page      :20h
    Add another diagram to demo page    :48h
    
stateDiagram
  state Active {
    Idle
  }
  Inactive --> Idle: ACT
  Active --> Active: LOG
    
      flowchart TB
        accTitle: My flowchart
        accDescr: My flowchart Description
        subgraph One
          a1-->a2-->a3
        end
    
        sequenceDiagram
          A ->> B: 1
          rect rgb(204, 0, 102)
            break yes
              rect rgb(0, 204, 204)
                C ->> C: 0
              end
            end
          end
          B ->> A: Return
    
classDiagram
accTitle: My class diagram
accDescr: My class diagram Description
Class01 <|-- AveryLongClass : Cool
Class09 --> C2 : Where am i?
Class09 --* C3
Class09 --|> Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
class Class10 {
  int id
  size()
}
    
%%{init: {'config': {'wrap': true }}}%%
        sequenceDiagram
        participant A as Extremely utterly long line of longness which had previously overflown the actor box as it is much longer than what it should be
        A->>Bob: Hola
        Bob-->A: Pasten !
    
      gitGraph
       commit id: "ZERO"
       branch develop
       commit id:"A"
       checkout main
       commit id:"ONE"
       checkout develop
       commit id:"B"
       branch featureA
       commit id:"FIX"
       commit id: "FIX-2"
       checkout main
       commit id:"TWO"
       cherry-pick id:"A"
       commit id:"THREE"
       cherry-pick id:"FIX"
       checkout develop
       commit id:"C"
       merge featureA
    
flowchart TD
      A[Christmas] -->|Get money| B(Go shopping)
      B --> C{Let me think}
      C -->|One| D[Laptop]
      C -->|Two| E[iPhone]
      C -->|Three| F[fa:fa-car Car]
    
        classDiagram
          Animal "1" <|-- Duck
          Animal <|-- Fish
          Animal <--o Zebra
          Animal : +int age
          Animal : +String gender
          Animal: +isMammal()
          Animal: +mate()
          class Duck{
            +String beakColor
            +swim()
            +quack()
          }
          class Fish{
            -int sizeInFeet
            -canEat()
          }
          class Zebra{
            +bool is_wild
            +run()
          }
    
        erDiagram
    CAR ||--o{ NAMED-DRIVER : allows
    CAR {
        string registrationNumber
        string make
        string model
    }
    PERSON ||--o{ NAMED-DRIVER : is
    PERSON {
        string firstName
        string lastName
        int age
    }
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/knsv2.html000066400000000000000000000067551433273745700231500ustar00rootroot00000000000000
Security check
classDiagram
        direction LR
        class Student {
          -idCard : IdCard
        }
        class IdCard{
          -id : int
          -name : string
        }
        class Bike{
          -id : int
          -name : string
        }
        Student "1" --o "1" IdCard : carries
        Student "1" --o "1" Bike : rides
    
mindmap
  root
    child1((Circle))
        grandchild 1
        grandchild 2
    child2(Round rectangle)
        grandchild 3
        grandchild 4
    child3[Square]
        grandchild 5
        ::icon(mdi mdi-fire)
        gc6((grand
child 6)) ::icon(mdi mdi-fire) gc7((grand
grand
child 8))
      example-diagram
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/knsv3.html000066400000000000000000000151701433273745700231400ustar00rootroot00000000000000
info below
flowchart TB;subgraph "number as labels";1;end;
      
flowchart TB;a[APA];
      
graph TD
      work --> sleep
      sleep --> work
      eat --> sleep
      work --> eat
      
flowchart TD
      work --> sleep
      sleep --> work
      eat --> sleep
      work --> eat
      
 graph TB
      A
      B
      subgraph foo[Foo SubGraph]
        C
        D
      end
      subgraph bar[Bar SubGraph]
        E
        F
      end
      G

      A-->B
      B-->C
      C-->D
      B-->D
      D-->E
      E-->A
      E-->F
      F-->D
      F-->G
      B-->G
      G-->D

      style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
      style bar fill:#999,stroke-width:2px,stroke:#0F0,color:blue
      
      graph TB
%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
      A
      B
      subgraph foo[Foo SubGraph]
        C
        D
      end
      subgraph bar[Bar SubGraph]
        E
        F
      end
      G

      A-->B
      B-->C
      C-->D
      B-->D
      D-->E
      E-->A
      E-->F
      F-->D
      F-->G
      B-->G
      G-->D

      style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
      style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
      
      graph TD
        A[Christmas] ==> D
        A[Christmas] -->|Get money| B(Go shopping)
        A[Christmas] ==> C
      
      graph TD
%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
        A[Christmas] ==> D
        A[Christmas] -->|Get money| B(Go shopping)
        A[Christmas] ==> C
      
      flowchart TD
        A[Christmas] ==> D
        A[Christmas] -->|Get money| B(Go shopping)
        A[Christmas] ==> C
      
      flowchart TD
%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
        A[Christmas] ==> D
        A[Christmas] -->|Get money| B(Go shopping)
        A[Christmas] ==> C
      
flowchart LR
        a["Haiya"]---->b
      
flowchart LR
%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
        a["Haiya"]---->b
      
      flowchart TD
        A[Christmas] ==> D
        A[Christmas] -->|Get money| B(Go shopping)
        A[Christmas] ==> C
      
      flowchart TD
%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
        A[Christmas] ==> D
        A[Christmas] -->|Get money| B(Go shopping)
        A[Christmas] ==> C
      
      %%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
classDiagram-v2
      Class01 <|-- AveryLongClass : Cool
      <<interface>> Class01
      Class03 *-- Class04
      Class05 o-- Class06
      Class07 .. Class08
      Class09 --> C2 : Where am i?
      Class09 --* C3
      Class09 --|> Class07
      Class12 <|.. Class08
      Class11 ..>Class12
      Class07 : equals()
      Class07 : Object[] elementData
      Class01 : size()
      Class01 : int chimp
      Class01 : int gorilla
      Class01 : -int privateChimp
      Class01 : +int publicGorilla
      Class01 : #int protectedMarmoset
      Class08 <--> C2: Cool label
      class Class10 {
        <<service>>
        int id
        test()
      }
      
classDiagram-v2
      Class01 <|-- AveryLongClass : Cool
      <<interface>> Class01
      Class03 *-- Class04
      Class05 o-- Class06
      Class07 .. Class08
      Class09 --> C2 : Where am i?
      Class09 --* C3
      Class09 --|> Class07
      Class12 <|.. Class08
      Class11 ..>Class12
      Class07 : equals()
      Class07 : Object[] elementData
      Class01 : size()
      Class01 : int chimp
      Class01 : int gorilla
      Class01 : -int privateChimp
      Class01 : +int publicGorilla
      Class01 : #int protectedMarmoset
      Class08 <--> C2: Cool label
      class Class10 {
        <<service>>
        int id
        test()
      }
      
flowchart BT
   subgraph S1
    sub1 -->sub2
   end
  subgraph S2
    sub4
   end
   S1 --> S2
   sub1 --> sub4
      
mermaid-js-mermaid-9bb0ed2/cypress/platform/per.html000066400000000000000000000042051433273745700226570ustar00rootroot00000000000000
Security check
flowchart LR
A-->B
        
            mindmap
          root
            ch1
            ch2
        
mermaid-js-mermaid-9bb0ed2/cypress/platform/regression/000077500000000000000000000000001433273745700233625ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/cypress/platform/regression/issue-1874.html000066400000000000000000000014061433273745700260020ustar00rootroot00000000000000

Example

%%{init:{"theme":"base", "sequence": {"mirrorActors":false},"themeVariables": {"actorBkg":"red"}}}%%
sequenceDiagram
    Bert->>+Ernie: Start looking for the cookie!
    Ernie-->>-Bert: Found it!
    Note left of Ernie: Cookies are good
    
%%{init:{"theme":"base", "themeVariables": {}}}%%
sequenceDiagram
    Bert->>+Ernie: Start looking for the cookie!
    Ernie-->>-Bert: Found it!
    Note left of Ernie: Cookies are good
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/render-after-error.html000066400000000000000000000013661433273745700256030ustar00rootroot00000000000000 Mermaid Quick Test Page
mermaid-js-mermaid-9bb0ed2/cypress/platform/rerender.html000066400000000000000000000015561433273745700237050ustar00rootroot00000000000000 Mermaid Quick Test Page
mermaid-js-mermaid-9bb0ed2/cypress/platform/showcase_base.html000066400000000000000000000223761433273745700247100ustar00rootroot00000000000000

Showcases of diagrams

%%{init2: {'securityLevel': 'loose', 'theme':'base'}}%%
        graph TD
          A[Christmas] -->|Get money| B(Go shopping)
          B --> C{Let me think}
          B --> G[/Another/]
          C ==>|One| D[Laptop]
          C -->|Two| E[iPhone]
          C -->|Three| F[fa:fa-car Car]
          subgraph section
            C
            D
            E
            F
            G
          end
      
%%{init2: {'securityLevel': 'loose', 'theme':'base'}}%%
        flowchart TD
          A[Christmas] -->|Get money| B(Go shopping)
          B --> C{Let me think}
          B --> G[Another]
          C ==>|One| D[Laptop]
          C x--x|Two| E[iPhone]
          C o--o|Three| F[fa:fa-car Car]
          subgraph section
            C
            D
            E
            F
            G
          end
      
%%{init2: {'securityLevel': 'loose', 'theme':'base'}}%%

        sequenceDiagram
          autonumber
          par Action 1
            Alice->>John: Hello John, how are you?
          and Action 2
            Alice->>Bob: Hello Bob, how are you?
          end
          Alice->>+John: Hello John, how are you?
          Alice->>+John: John, can you hear me?
          John-->>-Alice: Hi Alice, I can hear you!
          Note right of John: John is perceptive
          John-->>-Alice: I feel great!
              loop Every minute
                John-->Alice: Great!
            end
      
%%{init: {'securityLevel': 'loose', 'theme':'base'}}%%

classDiagram
	Animal "1" <|-- Duck
	Animal <|-- Fish
	Animal <--o Zebra
	Animal : +int age
	Animal : +String gender
	Animal: +isMammal()
	Animal: +mate()
	class Duck{
		+String beakColor
		+swim()
		+quack()
	}
	class Fish{
		-int sizeInFeet
		-canEat()
	}
	class Zebra{
		+bool is_wild
		+run()
	}
      
gantt
       dateFormat                :YYYY-MM-DD
       title                     Adding GANTT diagram functionality to mermaid
       excludes                  :excludes the named dates/days from being included in a charted task..
       section A section
       Completed task            :done,    des1, 2014-01-06,2014-01-08
       Active task               :active,  des2, 2014-01-09, 3d
       Future task               :         des3, after des2, 5d
       Future task2              :         des4, after des3, 5d

       section Critical tasks
       Completed task in the critical line :crit, done, 2014-01-06,24h
       Implement parser and jison          :crit, done, after des1, 2d
       Create tests for parser             :crit, active, 3d
       Future task in critical line        :crit, 5d
       Create tests for renderer           :2d
       Add to mermaid                      :1d

       section Documentation
       Describe gantt syntax               :active, a1, after des1, 3d
       Add gantt diagram to demo page      :after a1  , 20h
       Add another diagram to demo page    :doc1, after a1  , 48h

       section Last section
       Describe gantt syntax               :after doc1, 3d
       Add gantt diagram to demo page      :20h
       Add another diagram to demo page    :48h
      
%%{init2: {'securityLevel': 'loose', 'theme':'base'}}%%
      stateDiagram
        [*] --> Active

        state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> CapsLockOff
            CapsLockOff --> CapsLockOn : EvCapsLockPressed
            CapsLockOn --> CapsLockOff : EvCapsLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
        }
        state SomethingElse {
          A --> B
          B --> A
        }

        Active --> SomethingElse
        note right of SomethingElse : This is the note to the right.

        SomethingElse --> [*]
      
%%{init: {'securityLevel': 'loose', 'theme':'base'}}%%
stateDiagram-v2
        [*] --> Active

        state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> CapsLockOff
            CapsLockOff --> CapsLockOn : EvCapsLockPressed
            CapsLockOn --> CapsLockOff : EvCapsLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
        }
        state SomethingElse {
          A --> B
          B --> A
        }

        Active --> SomethingElse2
        note right of SomethingElse2 : This is the note to the right.

        SomethingElse2 --> [*]
      
      erDiagram
        CUSTOMER }|..|{ DELIVERY-ADDRESS : has
        CUSTOMER ||--o{ ORDER : places
        CUSTOMER ||--o{ INVOICE : "liable for"
        DELIVERY-ADDRESS ||--o{ ORDER : receives
        INVOICE ||--|{ ORDER : covers
        ORDER ||--|{ ORDER-ITEM : includes
        PRODUCT-CATEGORY ||--|{ PRODUCT : contains
        PRODUCT ||--o{ ORDER-ITEM : "ordered in"
      
journey
            title My working day
            section Go to work
              Make tea: 5: Me
              Go upstairs: 3: Me
              Do work: 1: Me, Cat
            section Go home
              Go downstairs: 5: Me
              Sit down: 5: Me
      
requirementDiagram

    requirement test_req {
    id: 1
    text: the test text.
    risk: high
    verifymethod: test
    }

    functionalRequirement test_req2 {
    id: 1.1
    text: the second test text.
    risk: low
    verifymethod: inspection
    }

    performanceRequirement test_req3 {
    id: 1.2
    text: the third test text.
    risk: medium
    verifymethod: demonstration
    }

    element test_entity {
    type: simulation
    }

    element test_entity2 {
    type: word doc
    docRef: reqs/test_entity
    }


    test_entity - satisfies -> test_req2
    test_req - traces -> test_req2
    test_req - contains -> test_req3
    test_req <- copies - test_entity2
      
      gitGraph:
      commit
      branch hotfix
      checkout hotfix
      commit
      branch develop
      checkout develop
      commit id:"An id" tag:"A tag"
      branch featureB
      checkout featureB
      commit type:HIGHLIGHT
      checkout main
      checkout hotfix
      commit type:NORMAL
      checkout develop
      commit type:REVERSE
      checkout featureB
      commit
      checkout main
      merge hotfix
      checkout featureB
      commit
      checkout develop
      branch featureA
      commit
      checkout develop
      merge hotfix
      checkout featureA
      commit
      checkout featureB
      commit
      checkout develop
      merge featureA
      branch release
      checkout release
      commit
      checkout main
      commit
      checkout release
      merge main
      checkout develop
      merge release
      
mermaid-js-mermaid-9bb0ed2/cypress/platform/showcase_base_dark.html000066400000000000000000000223751433273745700257100ustar00rootroot00000000000000

Showcases of diagrams

        graph TD
          A[Christmas] -->|Get money| B(Go shopping)
          B --> C{Let me think}
          B --> G[/Another/]
          C ==>|One| D[Laptop]
          C -->|Two| E[iPhone]
          C -->|Three| F[fa:fa-car Car]
          subgraph section
            C
            D
            E
            F
            G
          end
      
%%{init2: {'securityLevel': 'loose', 'theme':'base'}}%%
        flowchart TD
          A[Christmas] -->|Get money| B(Go shopping)
          B --> C{Let me think}
          B --> G[Another]
          C ==>|One| D[Laptop]
          C x--x|Two| E[iPhone]
          C o--o|Three| F[fa:fa-car Car]
          subgraph section
            C
            D
            E
            F
            G
          end
      
        sequenceDiagram
          autonumber
          par Action 1
            Alice->>John: Hello John, how are you?
          and Action 2
            Alice->>Bob: Hello Bob, how are you?
          end
          Alice->>+John: Hello John, how are you?
          Alice->>+John: John, can you hear me?
          John-->>-Alice: Hi Alice, I can hear you!
          Note right of John: John is perceptive
          John-->>-Alice: I feel great!
              loop Every minute
                John-->Alice: Great!
            end
      
classDiagram
	Animal "1" <|-- Duck
	Animal <|-- Fish
	Animal <--o Zebra
	Animal : +int age
	Animal : +String gender
	Animal: +isMammal()
	Animal: +mate()
	class Duck{
		+String beakColor
		+swim()
		+quack()
	}
	class Fish{
		-int sizeInFeet
		-canEat()
	}
	class Zebra{
		+bool is_wild
		+run()
	}
      
gantt
       dateFormat                :YYYY-MM-DD
       title                     Adding GANTT diagram functionality to mermaid
       excludes                  :excludes the named dates/days from being included in a charted task..
       section A section
       Completed task            :done,    des1, 2014-01-06,2014-01-08
       Active task               :active,  des2, 2014-01-09, 3d
       Future task               :         des3, after des2, 5d
       Future task2              :         des4, after des3, 5d

       section Critical tasks
       Completed task in the critical line :crit, done, 2014-01-06,24h
       Implement parser and jison          :crit, done, after des1, 2d
       Create tests for parser             :crit, active, 3d
       Future task in critical line        :crit, 5d
       Create tests for renderer           :2d
       Add to mermaid                      :1d

       section Documentation
       Describe gantt syntax               :active, a1, after des1, 3d
       Add gantt diagram to demo page      :after a1  , 20h
       Add another diagram to demo page    :doc1, after a1  , 48h

       section Last section
       Describe gantt syntax               :after doc1, 3d
       Add gantt diagram to demo page      :20h
       Add another diagram to demo page    :48h
      
      stateDiagram
        [*] --> Active

        state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> CapsLockOff
            CapsLockOff --> CapsLockOn : EvCapsLockPressed
            CapsLockOn --> CapsLockOff : EvCapsLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
        }
        state SomethingElse {
          A --> B
          B --> A
        }

        Active --> SomethingElse
        note right of SomethingElse : This is the note to the right.

        SomethingElse --> [*]
      
stateDiagram-v2
        [*] --> Active

        state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> CapsLockOff
            CapsLockOff --> CapsLockOn : EvCapsLockPressed
            CapsLockOn --> CapsLockOff : EvCapsLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
        }
        state SomethingElse {
          A --> B
          B --> A
        }

        Active --> SomethingElse2
        note right of SomethingElse2 : This is the note to the right.

        SomethingElse2 --> [*]
      
      erDiagram
        CUSTOMER }|..|{ DELIVERY-ADDRESS : has
        CUSTOMER ||--o{ ORDER : places
        CUSTOMER ||--o{ INVOICE : "liable for"
        DELIVERY-ADDRESS ||--o{ ORDER : receives
        INVOICE ||--|{ ORDER : covers
        ORDER ||--|{ ORDER-ITEM : includes
        PRODUCT-CATEGORY ||--|{ PRODUCT : contains
        PRODUCT ||--o{ ORDER-ITEM : "ordered in"
      
journey
            title My working day
            section Go to work
              Make tea: 5: Me
              Go upstairs: 3: Me
              Do work: 1: Me, Cat
            section Go home
              Go downstairs: 5: Me
              Sit down: 5: Me
      
requirementDiagram

    requirement test_req {
    id: 1
    text: the test text.
    risk: high
    verifymethod: test
    }

    functionalRequirement test_req2 {
    id: 1.1
    text: the second test text.
    risk: low
    verifymethod: inspection
    }

    performanceRequirement test_req3 {
    id: 1.2
    text: the third test text.
    risk: medium
    verifymethod: demonstration
    }

    element test_entity {
    type: simulation
    }

    element test_entity2 {
    type: word doc
    docRef: reqs/test_entity
    }


    test_entity - satisfies -> test_req2
    test_req - traces -> test_req2
    test_req - contains -> test_req3
    test_req <- copies - test_entity2
      
gitGraph
      commit
      branch hotfix
      checkout hotfix
      commit
      branch develop
      checkout develop
      commit id:"An id" tag:"A tag"
      branch featureB
      checkout featureB
      commit type:HIGHLIGHT
      checkout main
      checkout hotfix
      commit type:NORMAL
      checkout develop
      commit type:REVERSE
      checkout featureB
      commit
      checkout main
      merge hotfix
      checkout featureB
      commit
      checkout develop
      branch featureA
      commit
      checkout develop
      merge hotfix
      checkout featureA
      commit
      checkout featureB
      commit
      checkout develop
      merge featureA
      branch release
      checkout release
      commit
      checkout main
      commit
      checkout release
      merge main
      checkout develop
      merge release
   
      
mermaid-js-mermaid-9bb0ed2/cypress/platform/showcase_dark.html000066400000000000000000000217731433273745700247170ustar00rootroot00000000000000

Showcases of diagrams

        %%{init: {'theme': 'base', 'themeVariables':{'primaryColor': '#ff0000'}}%%
        graph TD
          A[Christmas] -->|Get money| B(Go shopping)
          B --> C{Let me think}
          B --> G[/Another/]
          C ==>|One| D[Laptop]
          C -->|Two| E[iPhone]
          C -->|Three| F[fa:fa-car Car]
          subgraph section
            C
            D
            E
            F
            G
          end
      
        flowchart TD
          A[Christmas] -->|Get money| B(Go shopping)
          B --> C{Let me think}
          B --> G[Another]
          C ==>|One| D[Laptop]
          C x--x|Two| E[iPhone]
          C o--o|Three| F[fa:fa-car Car]
          subgraph section
            C
            D
            E
            F
            G
          end
      
        sequenceDiagram
          autonumber
          par Action 1
            Alice->>John: Hello John, how are you?
          and Action 2
            Alice->>Bob: Hello Bob, how are you?
          end
          Alice->>+John: Hello John, how are you?
          Alice->>+John: John, can you hear me?
          John-->>-Alice: Hi Alice, I can hear you!
          Note right of John: John is perceptive
          John-->>-Alice: I feel great!
              loop Every minute
                John-->Alice: Great!
            end
      

%%{init: {'theme':'dark'}}%%

classDiagram
	Animal "1" <|-- Duck
	Animal <|-- Fish
	Animal <--o Zebra
	Animal : +int age
	Animal : +String gender
	Animal: +isMammal()
	Animal: +mate()
	class Duck{
		+String beakColor
		+swim()
		+quack()
	}
	class Fish{
		-int sizeInFeet
		-canEat()
	}
	class Zebra{
		+bool is_wild
		+run()
	}
  
      
gantt
       dateFormat                :YYYY-MM-DD
       title                     Adding GANTT diagram functionality to mermaid
       excludes                  :excludes the named dates/days from being included in a charted task..
       section A section
       Completed task            :done,    des1, 2014-01-06,2014-01-08
       Active task               :active,  des2, 2014-01-09, 3d
       Future task               :         des3, after des2, 5d
       Future task2              :         des4, after des3, 5d

       section Critical tasks
       Completed task in the critical line :crit, done, 2014-01-06,24h
       Implement parser and jison          :crit, done, after des1, 2d
       Create tests for parser             :crit, active, 3d
       Future task in critical line        :crit, 5d
       Create tests for renderer           :2d
       Add to mermaid                      :1d

       section Documentation
       Describe gantt syntax               :active, a1, after des1, 3d
       Add gantt diagram to demo page      :after a1  , 20h
       Add another diagram to demo page    :doc1, after a1  , 48h

       section Last section
       Describe gantt syntax               :after doc1, 3d
       Add gantt diagram to demo page      :20h
       Add another diagram to demo page    :48h
      
      stateDiagram
        [*] --> Active

        state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> CapsLockOff
            CapsLockOff --> CapsLockOn : EvCapsLockPressed
            CapsLockOn --> CapsLockOff : EvCapsLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
        }
        state SomethingElse {
          A --> B
          B --> A
        }

        Active --> SomethingElse
        SomethingElse --> [*]
        note right of SomethingElse : This is the note to the right.
      
      stateDiagram-v2
        [*] --> Active

        state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> CapsLockOff
            CapsLockOff --> CapsLockOn : EvCapsLockPressed
            CapsLockOn --> CapsLockOff : EvCapsLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
        }
        state SomethingElse {
          A --> B
          B --> A
        }

        Active --> SomethingElse2
        SomethingElse2 --> [*]
        note right of SomethingElse2 : This is the note to the right.
      
      erDiagram
        CUSTOMER }|..|{ DELIVERY-ADDRESS : has
        CUSTOMER ||--o{ ORDER : places
        CUSTOMER ||--o{ INVOICE : "liable for"
        DELIVERY-ADDRESS ||--o{ ORDER : receives
        INVOICE ||--|{ ORDER : covers
        ORDER ||--|{ ORDER-ITEM : includes
        PRODUCT-CATEGORY ||--|{ PRODUCT : contains
        PRODUCT ||--o{ ORDER-ITEM : "ordered in"
      
      journey
            title My working day
            section Go to work
              Make tea: 5: Me
              Go upstairs: 3: Me
              Do work: 1: Me, Cat
            section Go home
              Go downstairs: 5: Me
              Sit down: 5: Me
      
requirementDiagram

    requirement test_req {
    id: 1
    text: the test text.
    risk: high
    verifymethod: test
    }

    functionalRequirement test_req2 {
    id: 1.1
    text: the second test text.
    risk: low
    verifymethod: inspection
    }

    performanceRequirement test_req3 {
    id: 1.2
    text: the third test text.
    risk: medium
    verifymethod: demonstration
    }

    element test_entity {
    type: simulation
    }

    element test_entity2 {
    type: word doc
    docRef: reqs/test_entity
    }


    test_entity - satisfies -> test_req2
    test_req - traces -> test_req2
    test_req - contains -> test_req3
    test_req <- copies - test_entity2
      
gitGraph
      commit
      branch hotfix
      checkout hotfix
      commit
      branch develop
      checkout develop
      commit id:"An id" tag:"A tag"
      branch featureB
      checkout featureB
      commit type:HIGHLIGHT
      checkout main
      checkout hotfix
      commit type:NORMAL
      checkout develop
      commit type:REVERSE
      checkout featureB
      commit
      checkout main
      merge hotfix
      checkout featureB
      commit
      checkout develop
      branch featureA
      commit
      checkout develop
      merge hotfix
      checkout featureA
      commit
      checkout featureB
      commit
      checkout develop
      merge featureA
      branch release
      checkout release
      commit
      checkout main
      commit
      checkout release
      merge main
      checkout develop
      merge release
      
mermaid-js-mermaid-9bb0ed2/cypress/platform/showcase_default.html000066400000000000000000000215441433273745700254160ustar00rootroot00000000000000

Showcases of diagrams

        graph TD
          A[Christmas] -->|Get money| B(Go shopping)
          B --> C{Let me think}
          B --> G[/Another/]
          C ==>|One| D[Laptop]
          C -->|Two| E[iPhone]
          C -->|Three| F[fa:fa-car Car]
          subgraph section
            C
            D
            E
            F
            G
          end
      
        flowchart TD
          A[Christmas] -->|Get money| B(Go shopping)
          B --> C{Let me think}
          B --> G[Another]
          C ==>|One| D[Laptop]
          C x--x|Two| E[iPhone]
          C o--o|Three| F[fa:fa-car Car]
          subgraph section
            C
            D
            E
            F
            G
          end
      
        sequenceDiagram
          autonumber
          par Action 1
            Alice->>John: Hello John, how are you?
          and Action 2
            Alice->>Bob: Hello Bob, how are you?
          end
          Alice->>+John: Hello John, how are you?
          Alice->>+John: John, can you hear me?
          John-->>-Alice: Hi Alice, I can hear you!
          Note right of John: John is perceptive
          John-->>-Alice: I feel great!
              loop Every minute
                John-->Alice: Great!
            end
      
classDiagram
	Animal "1" <|-- Duck
	Animal <|-- Fish
	Animal <--o Zebra
	Animal : +int age
	Animal : +String gender
	Animal: +isMammal()
	Animal: +mate()
	class Duck{
		+String beakColor
		+swim()
		+quack()
	}
	class Fish{
		-int sizeInFeet
		-canEat()
	}
	class Zebra{
		+bool is_wild
		+run()
	}
      
gantt
       dateFormat                :YYYY-MM-DD
       title                     Adding GANTT diagram functionality to mermaid
       excludes                  :excludes the named dates/days from being included in a charted task..
       section A section
       Completed task            :done,    des1, 2014-01-06,2014-01-08
       Active task               :active,  des2, 2014-01-09, 3d
       Future task               :         des3, after des2, 5d
       Future task2              :         des4, after des3, 5d

       section Critical tasks
       Completed task in the critical line :crit, done, 2014-01-06,24h
       Implement parser and jison          :crit, done, after des1, 2d
       Create tests for parser             :crit, active, 3d
       Future task in critical line        :crit, 5d
       Create tests for renderer           :2d
       Add to mermaid                      :1d

       section Documentation
       Describe gantt syntax               :active, a1, after des1, 3d
       Add gantt diagram to demo page      :after a1  , 20h
       Add another diagram to demo page    :doc1, after a1  , 48h

       section Last section
       Describe gantt syntax               :after doc1, 3d
       Add gantt diagram to demo page      :20h
       Add another diagram to demo page    :48h
      
      stateDiagram
        [*] --> Active

        state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> CapsLockOff
            CapsLockOff --> CapsLockOn : EvCapsLockPressed
            CapsLockOn --> CapsLockOff : EvCapsLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
        }
        state SomethingElse {
          A --> B
          B --> A
        }

        Active --> SomethingElse
        note right of SomethingElse : This is the note to the right.
      
      stateDiagram-v2
        [*] --> Active

        state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> CapsLockOff
            CapsLockOff --> CapsLockOn : EvCapsLockPressed
            CapsLockOn --> CapsLockOff : EvCapsLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
        }
        state SomethingElse {
          A --> B
          B --> A
        }

        Active --> SomethingElse2
        note right of SomethingElse2 : This is the note to the right.
      
      erDiagram
        CUSTOMER }|..|{ DELIVERY-ADDRESS : has
        CUSTOMER ||--o{ ORDER : places
        CUSTOMER ||--o{ INVOICE : "liable for"
        DELIVERY-ADDRESS ||--o{ ORDER : receives
        INVOICE ||--|{ ORDER : covers
        ORDER ||--|{ ORDER-ITEM : includes
        PRODUCT-CATEGORY ||--|{ PRODUCT : contains
        PRODUCT ||--o{ ORDER-ITEM : "ordered in"
      
      journey
            title My working day
            section Go to work
              Make tea: 5: Me
              Go upstairs: 3: Me
              Do work: 1: Me, Cat
            section Go home
              Go downstairs: 5: Me
              Sit down: 5: Me
      
requirementDiagram

    requirement test_req {
    id: 1
    text: the test text.
    risk: high
    verifymethod: test
    }

    functionalRequirement test_req2 {
    id: 1.1
    text: the second test text.
    risk: low
    verifymethod: inspection
    }

    performanceRequirement test_req3 {
    id: 1.2
    text: the third test text.
    risk: medium
    verifymethod: demonstration
    }

    element test_entity {
    type: simulation
    }

    element test_entity2 {
    type: word doc
    docRef: reqs/test_entity
    }


    test_entity - satisfies -> test_req2
    test_req - traces -> test_req2
    test_req - contains -> test_req3
    test_req <- copies - test_entity2
      
      gitGraph
      commit
      branch hotfix
      checkout hotfix
      commit
      branch develop
      checkout develop
      commit id:"An id" tag:"A tag"
      branch featureB
      checkout featureB
      commit type:HIGHLIGHT
      checkout main
      checkout hotfix
      commit type:NORMAL
      checkout develop
      commit type:REVERSE
      checkout featureB
      commit
      checkout main
      merge hotfix
      checkout featureB
      commit
      checkout develop
      branch featureA
      commit
      checkout develop
      merge hotfix
      checkout featureA
      commit
      checkout featureB
      commit
      checkout develop
      merge featureA
      branch release
      checkout release
      commit
      checkout main
      commit
      checkout release
      merge main
      checkout develop
      merge release
      
mermaid-js-mermaid-9bb0ed2/cypress/platform/showcase_forest.html000066400000000000000000000216771433273745700253030ustar00rootroot00000000000000

Showcases of diagrams

         %%{init: {'theme': 'forest'}}%%
        graph TD
          A[Christmas] -->|Get money| B(Go shopping)
          B --> C{Let me think}
          B --> G[/Another/]
          C ==>|One| D[Laptop]
          C -->|Two| E[iPhone]
          C -->|Three| F[fa:fa-car Car]
          subgraph section
            C
            D
            E
            F
            G
          end
      
        flowchart TD
          A[Christmas] -->|Get money| B(Go shopping)
          B --> C{Let me think}
          B --> G[Another]
          C ==>|One| D[Laptop]
          C x--x|Two| E[iPhone]
          C o--o|Three| F[fa:fa-car Car]
          subgraph section
            C
            D
            E
            F
            G
          end
      
        sequenceDiagram
          autonumber
          par Action 1
            Alice->>John: Hello John, how are you?
          and Action 2
            Alice->>Bob: Hello Bob, how are you?
          end
          Alice->>+John: Hello John, how are you?
          Alice->>+John: John, can you hear me?
          John-->>-Alice: Hi Alice, I can hear you!
          Note right of John: John is perceptive
          John-->>-Alice: I feel great!
              loop Every minute
                John-->Alice: Great!
            end
      
%%{init: {'theme':'forest'}}%%

classDiagram
	Animal "1" <|-- Duck
	Animal <|-- Fish
	Animal <--o Zebra
	Animal : +int age
	Animal : +String gender
	Animal: +isMammal()
	Animal: +mate()
	class Duck{
		+String beakColor
		+swim()
		+quack()
	}
	class Fish{
		-int sizeInFeet
		-canEat()
	}
	class Zebra{
		+bool is_wild
		+run()
	}
      
gantt
       dateFormat                :YYYY-MM-DD
       title                     Adding GANTT diagram functionality to mermaid
       excludes                  :excludes the named dates/days from being included in a charted task..
       section A section
       Completed task            :done,    des1, 2014-01-06,2014-01-08
       Active task               :active,  des2, 2014-01-09, 3d
       Future task               :         des3, after des2, 5d
       Future task2              :         des4, after des3, 5d

       section Critical tasks
       Completed task in the critical line :crit, done, 2014-01-06,24h
       Implement parser and jison          :crit, done, after des1, 2d
       Create tests for parser             :crit, active, 3d
       Future task in critical line        :crit, 5d
       Create tests for renderer           :2d
       Add to mermaid                      :1d

       section Documentation
       Describe gantt syntax               :active, a1, after des1, 3d
       Add gantt diagram to demo page      :after a1  , 20h
       Add another diagram to demo page    :doc1, after a1  , 48h

       section Last section
       Describe gantt syntax               :after doc1, 3d
       Add gantt diagram to demo page      :20h
       Add another diagram to demo page    :48h
      
      stateDiagram
        [*] --> Active

        state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> CapsLockOff
            CapsLockOff --> CapsLockOn : EvCapsLockPressed
            CapsLockOn --> CapsLockOff : EvCapsLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
        }
        state SomethingElse {
          A --> B
          B --> A
        }

        Active --> SomethingElse
        note right of SomethingElse : This is the note to the right.
        SomethingElse --> [*]
      
      stateDiagram-v2
        [*] --> Active

        state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> CapsLockOff
            CapsLockOff --> CapsLockOn : EvCapsLockPressed
            CapsLockOn --> CapsLockOff : EvCapsLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
        }
        state SomethingElse {
          A --> B
          B --> A
        }

        Active --> SomethingElse2
        note right of SomethingElse2 : This is the note to the right.
      
      erDiagram
        CUSTOMER }|..|{ DELIVERY-ADDRESS : has
        CUSTOMER ||--o{ ORDER : places
        CUSTOMER ||--o{ INVOICE : "liable for"
        DELIVERY-ADDRESS ||--o{ ORDER : receives
        INVOICE ||--|{ ORDER : covers
        ORDER ||--|{ ORDER-ITEM : includes
        PRODUCT-CATEGORY ||--|{ PRODUCT : contains
        PRODUCT ||--o{ ORDER-ITEM : "ordered in"
      
      journey
            title My working day
            section Go to work
              Make tea: 5: Me
              Go upstairs: 3: Me
              Do work: 1: Me, Cat
            section Go home
              Go downstairs: 5: Me
              Sit down: 5: Me
      
requirementDiagram

    requirement test_req {
    id: 1
    text: the test text.
    risk: high
    verifymethod: test
    }

    functionalRequirement test_req2 {
    id: 1.1
    text: the second test text.
    risk: low
    verifymethod: inspection
    }

    performanceRequirement test_req3 {
    id: 1.2
    text: the third test text.
    risk: medium
    verifymethod: demonstration
    }

    element test_entity {
    type: simulation
    }

    element test_entity2 {
    type: word doc
    docRef: reqs/test_entity
    }


    test_entity - satisfies -> test_req2
    test_req - traces -> test_req2
    test_req - contains -> test_req3
    test_req <- copies - test_entity2
      
      gitGraph:
      commit
      branch hotfix
      checkout hotfix
      commit
      branch develop
      checkout develop
      commit id:"An id" tag:"A tag"
      branch featureB
      checkout featureB
      commit type:HIGHLIGHT
      checkout main
      checkout hotfix
      commit type:NORMAL
      checkout develop
      commit type:REVERSE
      checkout featureB
      commit
      checkout main
      merge hotfix
      checkout featureB
      commit
      checkout develop
      branch featureA
      commit
      checkout develop
      merge hotfix
      checkout featureA
      commit
      checkout featureB
      commit
      checkout develop
      merge featureA
      branch release
      checkout release
      commit
      checkout main
      commit
      checkout release
      merge main
      checkout develop
      merge release
      
mermaid-js-mermaid-9bb0ed2/cypress/platform/showcase_neutral.html000066400000000000000000000216451433273745700254460ustar00rootroot00000000000000

Showcases of diagrams

         %%{init: {'theme': 'neutral'}}%%
        graph TD
          A[Christmas] -->|Get money| B(Go shopping)
          B --> C{Let me think}
          B --> G[/Another/]
          C ==>|One| D[Laptop]
          C -->|Two| E[iPhone]
          C -->|Three| F[fa:fa-car Car]
          subgraph section
            C
            D
            E
            F
            G
          end
      
        flowchart TD
          A[Christmas] -->|Get money| B(Go shopping)
          B --> C{Let me think}
          B --> G[Another]
          C ==>|One| D[Laptop]
          C x--x|Two| E[iPhone]
          C o--o|Three| F[fa:fa-car Car]
          subgraph section
            C
            D
            E
            F
            G
          end
      
        sequenceDiagram
          autonumber
          par Action 1
            Alice->>John: Hello John, how are you?
          and Action 2
            Alice->>Bob: Hello Bob, how are you?
          end
          Alice->>+John: Hello John, how are you?
          Alice->>+John: John, can you hear me?
          John-->>-Alice: Hi Alice, I can hear you!
          Note right of John: John is perceptive
          John-->>-Alice: I feel great!
              loop Every minute
                John-->Alice: Great!
            end
      
%%{init: {'theme':'neutral'}}%%

classDiagram
	Animal "1" <|-- Duck
	Animal <|-- Fish
	Animal <--o Zebra
	Animal : +int age
	Animal : +String gender
	Animal: +isMammal()
	Animal: +mate()
	class Duck{
		+String beakColor
		+swim()
		+quack()
	}
	class Fish{
		-int sizeInFeet
		-canEat()
	}
	class Zebra{
		+bool is_wild
		+run()
	}
      
gantt
       dateFormat                :YYYY-MM-DD
       title                     Adding GANTT diagram functionality to mermaid
       excludes                  :excludes the named dates/days from being included in a charted task..
       section A section
       Completed task            :done,    des1, 2014-01-06,2014-01-08
       Active task               :active,  des2, 2014-01-09, 3d
       Future task               :         des3, after des2, 5d
       Future task2              :         des4, after des3, 5d

       section Critical tasks
       Completed task in the critical line :crit, done, 2014-01-06,24h
       Implement parser and jison          :crit, done, after des1, 2d
       Create tests for parser             :crit, active, 3d
       Future task in critical line        :crit, 5d
       Create tests for renderer           :2d
       Add to mermaid                      :1d

       section Documentation
       Describe gantt syntax               :active, a1, after des1, 3d
       Add gantt diagram to demo page      :after a1  , 20h
       Add another diagram to demo page    :doc1, after a1  , 48h

       section Last section
       Describe gantt syntax               :after doc1, 3d
       Add gantt diagram to demo page      :20h
       Add another diagram to demo page    :48h
      
      stateDiagram
        [*] --> Active

        state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> CapsLockOff
            CapsLockOff --> CapsLockOn : EvCapsLockPressed
            CapsLockOn --> CapsLockOff : EvCapsLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
        }
        state SomethingElse {
          A --> B
          B --> A
        }

        Active --> SomethingElse
        note right of SomethingElse : This is the note to the right.
      
      stateDiagram-v2
        [*] --> Active

        state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> CapsLockOff
            CapsLockOff --> CapsLockOn : EvCapsLockPressed
            CapsLockOn --> CapsLockOff : EvCapsLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
        }
        state SomethingElse {
          A --> B
          B --> A
        }

        Active --> SomethingElse2
        note right of SomethingElse2 : This is the note to the right.
      
      erDiagram
        CUSTOMER }|..|{ DELIVERY-ADDRESS : has
        CUSTOMER ||--o{ ORDER : places
        CUSTOMER ||--o{ INVOICE : "liable for"
        DELIVERY-ADDRESS ||--o{ ORDER : receives
        INVOICE ||--|{ ORDER : covers
        ORDER ||--|{ ORDER-ITEM : includes
        PRODUCT-CATEGORY ||--|{ PRODUCT : contains
        PRODUCT ||--o{ ORDER-ITEM : "ordered in"
      
      journey
            title My working day
            section Go to work
              Make tea: 5: Me
              Go upstairs: 3: Me
              Do work: 1: Me, Cat
            section Go home
              Go downstairs: 5: Me
              Sit down: 5: Me
      
requirementDiagram

    requirement test_req {
    id: 1
    text: the test text.
    risk: high
    verifymethod: test
    }

    functionalRequirement test_req2 {
    id: 1.1
    text: the second test text.
    risk: low
    verifymethod: inspection
    }

    performanceRequirement test_req3 {
    id: 1.2
    text: the third test text.
    risk: medium
    verifymethod: demonstration
    }

    element test_entity {
    type: simulation
    }

    element test_entity2 {
    type: word doc
    docRef: reqs/test_entity
    }


    test_entity - satisfies -> test_req2
    test_req - traces -> test_req2
    test_req - contains -> test_req3
    test_req <- copies - test_entity2
      
      gitGraph:
      commit
      branch hotfix
      checkout hotfix
      commit
      branch develop
      checkout develop
      commit id:"An id" tag:"A tag"
      branch featureB
      checkout featureB
      commit type:HIGHLIGHT
      checkout main
      checkout hotfix
      commit type:NORMAL
      checkout develop
      commit type:REVERSE
      checkout featureB
      commit
      checkout main
      merge hotfix
      checkout featureB
      commit
      checkout develop
      branch featureA
      commit
      checkout develop
      merge hotfix
      checkout featureA
      commit
      checkout featureB
      commit
      checkout develop
      merge featureA
      branch release
      checkout release
      commit
      checkout main
      commit
      checkout release
      merge main
      checkout develop
      merge release
      
mermaid-js-mermaid-9bb0ed2/cypress/platform/sidv.html000066400000000000000000000003361433273745700230370ustar00rootroot00000000000000
    none
    hello world
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/subgraph.html000066400000000000000000000024301433273745700237020ustar00rootroot00000000000000 Mermaid Quick Test Page
    graph TD
      A[Christmas] -->|Get money| B(Go shopping)
      subgraph 1test["id starting with number"]
      A
      end
      style 1test fill:#F99,stroke-width:2px,stroke:#F0F
    
    graph TD
      A.a[Christmas]:::someclass -->|Get money| B(Go shopping):::someclass
      subgraph test["id starting with number"]
      A.a
      end
      style test fill:#F99,stroke-width:2px,stroke:#F0F
      classDef someclass fill:#f96;
    
      graph TD
      9e122290-->82072290_1ec3_e711_8c5a_005056ad0002
      style 9e122290 fill:#F99,stroke-width:2px,stroke:#F0F
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/theme-directives.html000066400000000000000000000074461433273745700253440ustar00rootroot00000000000000

Default

  %%{init: { 'logLevel': 0, 'theme': 'default'} }%%
  graph TD
            A(Start) --> B[/Another/]
            A[/Another/] --> C[End]
            subgraph section
              B
              C
            end
        

Forest

  %%{init: { 'logLevel': 1, 'theme': 'forest'} }%%
  graph TD
            A(Start) --> B[/Another/]
            A[/Another/] --> C[End]
            subgraph section
              B
              C
            end
        

Neutral

        %%{init: { 'logLevel': 1, 'theme': 'neutral'} }%%
  graph TD
            A(Start) --> B[/Another/]
            A[/Another/] --> C[End]
            subgraph section
              B
              C
            end
        

Dark

        %%{init: { 'logLevel': 1, 'theme': 'dark'} }%%
  graph TD
            A(Start) --> B[/Another/]
            A[/Another/] --> C[End]
            subgraph section
              B
              C
            end
        

Base with overriding themeVariable

        %%{init: { 'theme': 'base', 'themeVariables':{ 'primaryColor': '#ff0000'}}}%%

  graph TD
            A(Start) --> B[/Another/]
            A[/Another/] --> C[End]
            subgraph section
              B
              C
            end
        

Nothing set, should be Default

        %%{init: { 'logLevel': 1} }%%

  graph TD
            A(Start) --> B[/Another/]
            A[/Another/] --> C[End]
            subgraph section
              B
              C
            end
        
mermaid-js-mermaid-9bb0ed2/cypress/platform/user-journey.html000066400000000000000000000017151433273745700245430ustar00rootroot00000000000000

User Journey

      journey
        title Go shopping

        section Get to the shops
          Get car keys:5: Dad
          Get into car:5: Dad, Mum, Child 1, Child 2
          Really drive to supermarket:3: Dad

        section Do shopping
          Do actual shop:3: Mum
          Get in the way:2: Dad, Child 1, Child 2
          Pay: 2: Dad

        section Go home
          Lose keys:3: Dad
          Get cross:1: Dad, Child 1
          Find keys:4: Mum
          Get into car:4: Dad, Mum, Child 1, Child 2
          Drive home:3: Dad
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/vertices.html000066400000000000000000000015061433273745700237160ustar00rootroot00000000000000 Mermaid Quick Test Page
    info
    
    graph TD
      subgraph one
        1
      end
    
    graph TD
      A --> B --> C
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/viewer.js000066400000000000000000000101711433273745700230410ustar00rootroot00000000000000import mermaid2 from '../../packages/mermaid/src/mermaid'; import mindmap from '../../packages/mermaid-mindmap/src/detector'; function b64ToUtf8(str) { return decodeURIComponent(escape(window.atob(str))); } /** * ##contentLoaded Callback function that is called when page is loaded. This functions fetches * configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the * page. */ const contentLoaded = async function () { let pos = document.location.href.indexOf('?graph='); if (pos > 0) { pos = pos + 7; const graphBase64 = document.location.href.substr(pos); const graphObj = JSON.parse(b64ToUtf8(graphBase64)); if (graphObj.mermaid && graphObj.mermaid.theme === 'dark') { document.body.style.background = '#3f3f3f'; } console.log(graphObj); if (Array.isArray(graphObj.code)) { const numCodes = graphObj.code.length; for (let i = 0; i < numCodes; i++) { const div = document.createElement('div'); div.id = 'block' + i; div.className = 'mermaid'; div.innerHTML = graphObj.code[i]; document.getElementsByTagName('body')[0].appendChild(div); } } else { const div = document.createElement('div'); div.id = 'block'; div.className = 'mermaid'; div.innerHTML = graphObj.code; document.getElementsByTagName('body')[0].appendChild(div); } await mermaid2.registerExternalDiagrams([mindmap]); mermaid2.initialize(graphObj.mermaid); mermaid2.init(); } }; /** * @param current * @param update */ function merge(current, update) { Object.keys(update).forEach(function (key) { // if update[key] exist, and it's not a string or array, // we go in one level deeper if ( current.hasOwnProperty(key) && typeof current[key] === 'object' && !(current[key] instanceof Array) ) { merge(current[key], update[key]); // if update[key] doesn't exist in current, or it's a string // or array, then assign/overwrite current[key] to update[key] } else { current[key] = update[key]; } }); return current; } const contentLoadedApi = function () { let pos = document.location.href.indexOf('?graph='); if (pos > 0) { pos = pos + 7; const graphBase64 = document.location.href.substr(pos); const graphObj = JSON.parse(b64ToUtf8(graphBase64)); // const graph = 'hello' if (Array.isArray(graphObj.code)) { const numCodes = graphObj.code.length; const divs = []; let div; for (let i = 0; i < numCodes; i++) { div = document.createElement('div'); div.id = 'block' + i; div.className = 'mermaid'; // div.innerHTML = graphObj.code document.getElementsByTagName('body')[0].appendChild(div); divs[i] = div; } const defaultE2eCnf = { theme: 'forest' }; const cnf = merge(defaultE2eCnf, graphObj.mermaid); mermaid2.initialize(cnf); for (let i = 0; i < numCodes; i++) { mermaid2.render( 'newid' + i, graphObj.code[i], (svgCode, bindFunctions) => { div.innerHTML = svgCode; bindFunctions(div); }, divs[i] ); } } else { const div = document.createElement('div'); div.id = 'block'; div.className = 'mermaid'; // div.innerHTML = graphObj.code console.warn('graphObj.mermaid', graphObj.mermaid); document.getElementsByTagName('body')[0].appendChild(div); mermaid2.initialize(graphObj.mermaid); mermaid2.render( 'newid', graphObj.code, (svgCode, bindFunctions) => { div.innerHTML = svgCode; if (bindFunctions) bindFunctions(div); }, div ); } } }; if (typeof document !== 'undefined') { /*! * Wait for document loaded before starting the execution */ window.addEventListener( 'load', function () { if (this.location.href.match('xss.html')) { this.console.log('Using api'); contentLoadedApi(); } else { this.console.log('Not using api'); contentLoaded(); } }, false ); } mermaid-js-mermaid-9bb0ed2/cypress/platform/webpackUsage.html000066400000000000000000000005561433273745700244770ustar00rootroot00000000000000
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss.html000066400000000000000000000022141433273745700227040ustar00rootroot00000000000000 mermaid-js-mermaid-9bb0ed2/cypress/platform/xss.png000066400000000000000000000144151433273745700225320ustar00rootroot00000000000000PNG  IHDR"咶gAMA a cHRMz&u0`:pQ<bKGD̿tIME+83@IDATxyxEaKEB(;& . 23ۀCeA\u PAQ([XUa-5GYon}ozUyx8DUI  SH$Gr!}l'#=tCKZӜ&41O.dg-[Hwӕ.-MjCX:ֲzUD7ҝTOY6x;\I?.'16a!v=\ Xر$vsid=e ^]mZ{!%rF䑧.ñ#1.w,ݥaT Z/aAxQChFx}3eQK‹Z6i%].# k‹~Y,v$3-/j?rqd˳H}(]D=Yo}&tZE])堮@ (.זI< NfGĻq8AP8 XI$A.nG1D;8Yc3YdLroDI MiI/L`_;w>YbVu2_-iK[ёؿ!,/y+6MĖg*z ccj"6G:TNQiLq [vAG_i;Wu(廬N˧3I 34 Ec,Fg jdKoAg>ljQ]2=ʍB(m%H\z^ӆ*6Yd( \hYQ4sO#WͰK.oMm,"UYe]#5sVvh}v/զnt-zqB1*Cœ<Ÿ]qNe֌oTsJ}ZJFy) F|9V 걧v*Y[ݞvzWXٌLE=ւ3Q)~ǘtl׍RR;M3eW)tM+zsTa=ro2(pnPGKNZ0e KC%=v 1d StF UMO>⛜ǎmx@AcSB|36B0'̝bҿ5 X_YioD/tKnQ=FbHSlz ]jnŐQͷX %S-h1("n '޺Y 2>ps]>oN= L9Ic§.[OAK 8`M.1D(NwQO5ʒP 6?`zp1iFc?ހgX2KuP6\Bpq6$=1]ٔ-&t[cH(M[5LfoteCٺT\6E_(kXf76bF%<s29i:^yHۍl&['eÁ d QGo@yW^Z‹Ơ&Yޫn: 1],/7lz3[iDvDwWq7O:gׁ 6߫FbUs!٥D]Rq' :uV{LdMUF/W-ۮ]aT` 噩RҠm1P0,RIoKqa2@'mc C15C𱃦cw~w0C](A'+5S rmOTNIBo<55Y5>cY ]&p `+f~y=FK%Ʃ'ZddvPj1·& mRխKV <].Ru\rhSn%[ڏZ}J!>c4Wq> IV8m5.Z+;4;c7km>+ Y;Wt_}!>hȥ爮NPykLp:ۇ<=;,H?K)k>\FEk3oEIhjD/bl!5DU:Sbp%u .']O!^t<K2r1'ptɇ$ׁ2{TqͤmkyGޛGbfYf[|h `Iu\LNADOIvl%Ԏ\#oh]KbOIW7ene`m\B5odOカ>X[]e:/$]r4WEkṾȲBe Dص}$Twsc{;9./V<,H?72GոoDKIg0LNs2Aj<{#mӗ,%dyL4QxZYŪ6X픥nS~qm`=%zūX?ZL|U.JSڋ9HZ}~/td>Mkm4j0b\}L$7=2?Vtj%DS^e ; ke a6VC">gDYȩF=J]ʧ1uZYXU.e{$+(Kifp7(3.V2{Ѻ3RFd?#Dbڭb!&abmK4ɝE.}euOi8`IYh, ױײlvaɟ0WzKUV)E>˹~zLA3+vUAO1fX(ޢrMگRLg _&x8\Fo99LY5,fu5D?;Kc<~##E-cvP}XTALAn^3&B4.6@Hͼ8Uds[&3(H%Oj͚DWIHHmAxV 3]s$ep`U;lu0W|%R.~vGtrq~颟?nX]u۳Qk~ѮlQ[T `yb l+Yщ]tcl`T Y 8 Hs񖬉GY'hDhB[#Vz1SiXYI+bY-uf(Z&\P bЩ`2 c /h`OGKyh/;1,gnά3M`lc-% V5F[Rg!U0_K۲G4Wx*~N!4qDa8C4>5#|NvvrF(LcMNU<1AxǁAQ؜M4qb?3}!?|qhrDŽch">b<"Ń9LdYBLD_+=6A^],~_p{~zF+QMBhLjHh''C1+Z\pcVtϿ+畮-# ^qcnKNs=vlA]vxJF/<~lb&r9KF1"uǢvǐq\"^ixIS }@f#94lSʹ`/(p V1e W*LGԾE0ՐPء0*\[$2+na_)Ǚ6U;Lܺb>kZ--jҎgǴ#E*XݛDB]z{Je҈0i`Ƥ# UD%S2CnxQqG6$ö:ysXfG<I#=&-c)C*ePʊylZrKͧR%~xF]Ô< E,=cˀΨ ̧)ڔPiG>錢iC̖Y,lBKd_@8<i%X%tFx_phߍǔoH(!GК4C&-Qt&f sP\Ayb>BqB{KQ6;=e'5-\ AGІTt d,p8 V9jӊv4%RSOE&[dl,=}~*gDH"8 DQSyG69gB͒t2V%tEXtdate:create2017-08-08T18:43:56+00:00"%tEXtdate:modify2017-08-08T18:43:56+00:00=IENDB`mermaid-js-mermaid-9bb0ed2/cypress/platform/xss10.html000066400000000000000000000065401433273745700230530ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss11.html000066400000000000000000000065011433273745700230510ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss12.html000066400000000000000000000064471433273745700230630ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss13.html000066400000000000000000000064751433273745700230650ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss14.html000066400000000000000000000065651433273745700230660ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss15.html000066400000000000000000000064641433273745700230650ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss16.html000066400000000000000000000065141433273745700230620ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss17.html000066400000000000000000000065011433273745700230570ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss18.html000066400000000000000000000065261433273745700230670ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss19.html000066400000000000000000000064121433273745700230620ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss2.html000066400000000000000000000036041433273745700227720ustar00rootroot00000000000000
      %%{init: { 'theme':'base', '__proto__': {'polluted': 'asdf'}} }%%
      graph LR
          A --> B
    
      %%{init: { 'theme':'base', '__proto__': {'polluted': 'asdf'}} }%%
      %%{init: { 'theme':'base', '__proto__': {'polluted': 'asdf'}} }%%
      graph LR
          A --> B
    
      %%{init: { 'prototype': {'__proto__': {'polluted': 'test'}}} }%%
      %%{init: { 'prototype': {'__proto__': {'polluted': 'test'}}} }%%
      sequenceDiagram
      Alice->>Bob: Hi Bob
      Bob->>Alice: Hi Alice
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss20.html000066400000000000000000000065161433273745700230570ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss21.html000066400000000000000000000065171433273745700230610ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss22.html000066400000000000000000000005531433273745700230540ustar00rootroot00000000000000
  graph TD
A --> B["<a href='javascript#9;t#colon;alert(document.location)'>AAA</a>"]
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss3.html000066400000000000000000000027271433273745700230000ustar00rootroot00000000000000
      
      %%{init: { 'fontFamily': '\">'} }%%
      graph LR
          A --> B
    
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss4.html000066400000000000000000000060121433273745700227700ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss5.html000066400000000000000000000064321433273745700227770ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss6.html000066400000000000000000000063261433273745700230020ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss7.html000066400000000000000000000064261433273745700230040ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss8.html000066400000000000000000000063441433273745700230040ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/platform/xss9.html000066400000000000000000000063371433273745700230070ustar00rootroot00000000000000
Security check
mermaid-js-mermaid-9bb0ed2/cypress/support/000077500000000000000000000000001433273745700210725ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/cypress/support/commands.js000066400000000000000000000017271433273745700232400ustar00rootroot00000000000000// *********************************************** // This example commands.js shows you how to // create various custom commands and overwrite // existing commands. // // For more comprehensive examples of custom // commands please read more here: // https://on.cypress.io/custom-commands // *********************************************** // // // -- This is a parent command -- // Cypress.Commands.add("login", (email, password) => { ... }) // // // -- This is a child command -- // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) // // // -- This is a dual command -- // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) // // // -- This is will overwrite an existing command -- // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) // import '@percy/cypress'; import { addMatchImageSnapshotCommand } from 'cypress-image-snapshot/command'; addMatchImageSnapshotCommand(); mermaid-js-mermaid-9bb0ed2/cypress/support/e2e.js000066400000000000000000000013141433273745700221020ustar00rootroot00000000000000// *********************************************************** // This example support/index.js is processed and // loaded automatically before your test files. // // This is a great place to put global configuration and // behavior that modifies Cypress. // // You can change the location of this file or turn off // automatically serving support files with the // 'supportFile' configuration option. // // You can read more here: // https://on.cypress.io/configuration // *********************************************************** import '@applitools/eyes-cypress/commands'; // Import commands.js using ES2015 syntax: import './commands'; // Alternatively you can use CommonJS syntax: // require('./commands') mermaid-js-mermaid-9bb0ed2/cypress/support/eyes-index.d.ts000066400000000000000000000000431433273745700237330ustar00rootroot00000000000000import '@applitools/eyes-cypress'; mermaid-js-mermaid-9bb0ed2/demos/000077500000000000000000000000001433273745700167755ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/demos/c4context.html000066400000000000000000000317571433273745700216130ustar00rootroot00000000000000 C4 Mermaid Quick Test Page

C4 context diagram demos

    C4Context
      accTitle: C4 context demo
      accDescr: Many large C4 diagrams

      title System Context diagram for Internet Banking System

      Enterprise_Boundary(b0, "BankBoundary0") {
          Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")
          Person(customerB, "Banking Customer B")
          Person_Ext(customerC, "Banking Customer C", "desc")

          Person(customerD, "Banking Customer D", "A customer of the bank, 
with personal bank accounts.") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1")

    C4Container
    title Container diagram for Internet Banking System

    System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system", $tags="v1.0")
    Person(customer, Customer, "A customer of the bank, with personal bank accounts", $tags="v1.0")

    Container_Boundary(c1, "Internet Banking") {
        Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to customers via their web browser")
        Container_Ext(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device")
        Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA")
        ContainerDb(database, "Database", "SQL Database", "Stores user registration information, hashed auth credentials, access logs, etc.")
        ContainerDb_Ext(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API")

    }

    System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")

    Rel(customer, web_app, "Uses", "HTTPS")
    UpdateRelStyle(customer, web_app, $offsetY="60", $offsetX="90")     
    Rel(customer, spa, "Uses", "HTTPS")
    UpdateRelStyle(customer, spa, $offsetY="-40")    
    Rel(customer, mobile_app, "Uses")
    UpdateRelStyle(customer, mobile_app, $offsetY="-30") 

    Rel(web_app, spa, "Delivers")
    UpdateRelStyle(web_app, spa, $offsetX="130") 
    Rel(spa, backend_api, "Uses", "async, JSON/HTTPS")
    Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS")
    Rel_Back(database, backend_api, "Reads from and writes to", "sync, JDBC")

    Rel(email_system, customer, "Sends e-mails to")
    UpdateRelStyle(email_system, customer, $offsetX="-45")    
    Rel(backend_api, email_system, "Sends e-mails using", "sync, SMTP")
    UpdateRelStyle(backend_api, email_system, $offsetY="-60")    
    Rel(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS")
    UpdateRelStyle(backend_api, banking_system, $offsetY="-50", $offsetX="-140")
    

    C4Component
    title Component diagram for Internet Banking System - API Application

    Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.")
    Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile mobile device.")
    ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
    System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")

    Container_Boundary(api, "API Application") {
        Component(sign, "Sign In Controller", "MVC Rest Controller", "Allows users to sign in to the internet banking system")
        Component(accounts, "Accounts Summary Controller", "MVC Rest Controller", "Provides customers with a summary of their bank accounts")
        Component(security, "Security Component", "Spring Bean", "Provides functionality related to singing in, changing passwords, etc.")
        Component(mbsfacade, "Mainframe Banking System Facade", "Spring Bean", "A facade onto the mainframe banking system.")

        Rel(sign, security, "Uses")
        Rel(accounts, mbsfacade, "Uses")
        Rel(security, db, "Read & write to", "JDBC")
        Rel(mbsfacade, mbs, "Uses", "XML/HTTPS")
    }

    Rel_Back(spa, sign, "Uses", "JSON/HTTPS")
    Rel(spa, accounts, "Uses", "JSON/HTTPS")

    Rel(ma, sign, "Uses", "JSON/HTTPS")
    Rel(ma, accounts, "Uses", "JSON/HTTPS")

    UpdateRelStyle(spa, sign, $offsetY="-40") 
    UpdateRelStyle(spa, accounts, $offsetX="40", $offsetY="40")

    UpdateRelStyle(ma, sign, $offsetX="-90", $offsetY="40")
    UpdateRelStyle(ma, accounts, $offsetY="-40")

        UpdateRelStyle(sign, security, $offsetX="-160", $offsetY="10")
        UpdateRelStyle(accounts, mbsfacade, $offsetX="140", $offsetY="10")
        UpdateRelStyle(security, db, $offsetY="-40")
        UpdateRelStyle(mbsfacade, mbs, $offsetY="-40")
    

    C4Dynamic
    title Dynamic diagram for Internet Banking System - API Application

    ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
    Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.")
    Container_Boundary(b, "API Application") {
      Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.")
      Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.")
    }
    Rel(c1, c2, "Submits credentials to", "JSON/HTTPS")
    Rel(c2, c3, "Calls isAuthenticated() on")
    Rel(c3, c4, "select * from users where username = ?", "JDBC")

    UpdateRelStyle(c1, c2, $textColor="red", $offsetY="-40")
    UpdateRelStyle(c2, c3, $textColor="red", $offsetX="-40", $offsetY="60")
    UpdateRelStyle(c3, c4, $textColor="red", $offsetY="-40", $offsetX="10")
    

    C4Deployment
    title Deployment Diagram for Internet Banking System - Live

    Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){
        Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.")
    }

    Deployment_Node(comp, "Customer's computer", "Mircosoft Windows or Apple macOS"){
        Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox,
Apple Safari or Microsoft Edge"){ Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.") } } Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){ Deployment_Node(dn, "bigbank-api*** x8", "Ubuntu 16.04 LTS"){ Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){ Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.") } } Deployment_Node(bb2, "bigbank-web*** x4", "Ubuntu 16.04 LTS"){ Deployment_Node(apache2, "Apache Tomcat", "Apache Tomcat 8.x"){ Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.") } } Deployment_Node(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS"){ Deployment_Node(oracle, "Oracle - Primary", "Oracle 12c"){ ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") } } Deployment_Node(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS") { Deployment_Node(oracle2, "Oracle - Secondary", "Oracle 12c") { ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") } } } Rel(mobile, api, "Makes API calls to", "json/HTTPS") Rel(spa, api, "Makes API calls to", "json/HTTPS") Rel_U(web, spa, "Delivers to the customer's web browser") Rel(api, db, "Reads from and writes to", "JDBC") Rel(api, db2, "Reads from and writes to", "JDBC") Rel_R(db, db2, "Replicates data to") UpdateRelStyle(spa, api, $offsetY="-40") UpdateRelStyle(web, spa, $offsetY="-40") UpdateRelStyle(api, db, $offsetY="-20", $offsetX="5") UpdateRelStyle(api, db2, $offsetX="-40", $offsetY="-20") UpdateRelStyle(db, db2, $offsetY="-10")

mermaid-js-mermaid-9bb0ed2/demos/classchart.html000066400000000000000000000066731433273745700220260ustar00rootroot00000000000000 Class diagrams Mermaid Quick Test Page

Class diagram demos

		classDiagram
      accTitle: Demo Class Diagram
      accDescr: This class diagram show the abstract Animal class, and 3 classes that inherit from it: Duck, Fish, and Zebra.

      Animal <|-- Duck
      Animal <|-- Fish
      Animal <|-- Zebra
      Animal : +int age
      Animal : +String gender
      Animal: +isMammal()
      Animal: +mate()

      class Duck{
        +String beakColor
        +swim()
        +quack()
      }
      class Fish{
        -int sizeInFeet
        -canEat()
      }
      class Zebra{
        +bool is_wild
        +run()
      }

    

    classDiagram
    Class01 <|-- AveryLongClass : Cool

    <<interface>> Class01
    Class03 "0" *-- "0..n" Class04
    Class05 "1" o-- "many" Class06
    Class07 .. Class08
    Class09 "many" --> "1" C2 : Where am i?
    Class09 "0" --* "1..n" C3
    Class09 --|> Class07
    Class07 : equals()
    Class07 : Object[] elementData
    Class01 : #size()
    Class01 : -int chimp
    Class01 : +int gorilla
    Class08 <--> C2: Cool label
      class Class10 {
      <<service>>
      int id
      size()
      }
    

    classDiagram
    class Class01~T~
    Class01 : #size()
    Class01 : -int chimp
    Class01 : +int gorilla
    class Class10~T~ {
    <<service>>
    int id
    size()
    }
    

    classDiagram
    Class01~T~ <|-- AveryLongClass : Cool
    <<interface>> Class01
    Class03~T~ "0" *-- "0..n" Class04
    Class05 "1" o-- "many" Class06
    Class07~T~ .. Class08
    Class09 "many" --> "1" C2 : Where am i?
      Class09 "0" --* "1..n" C3
      Class09 --|> Class07
      Class07 : equals()
      Class07 : Object[] elementData
      Class01 : #size()
      Class01 : -int chimp
      Class01 : +int gorilla
      Class08 <--> C2: Cool label
        class Class10 {
        <<service>>
        int id
        size()
        }
    

    classDiagram
    Interface1 ()-- Interface1Impl
    

    classDiagram
    direction LR
    Animal ()-- Dog
    Dog : bark()
    Dog : species()
    

    classDiagram
    direction RL
    Fruit ()-- Apple
    Apple : color()
    Apple : -int leafCount()
    Fruit ()-- Pineapple
    Pineapple : color()
    Pineapple : -int leafCount()
    Pineapple : -int spikeCount()
    

mermaid-js-mermaid-9bb0ed2/demos/dataflowchart.html000066400000000000000000000034421433273745700225110ustar00rootroot00000000000000 Data Flow Mermaid Quick Test Page

Data Flow Diagram demos

    flowchart LR
      accTitle: A simple linear flowchart.
      accDescr: A Database has input to a circle System has output to a square Customer.
      DataStore[|borders:tb|Database] -->|input| Process((System)) -->|output| Entity[Customer];
    

Borders Example

    flowchart TD
      allSides[ stroke all sides ];
      allSides2[|borders:ltrb| stroke all sides ];
      rbSides[|borders:rb| stroke right and bottom sides ];
      ltSides[|borders:lt| stroke left and top sides ];
      lrSides[|borders:lr| stroke left and right sides ];
      noSide[|borders:no| stroke no side ];
    
mermaid-js-mermaid-9bb0ed2/demos/er.html000066400000000000000000000040771433273745700203010ustar00rootroot00000000000000 ER diagram | Mermaid Quick Test Page

erDiagram
  %% title This is a title
  %% accDescription Test a description

  "Person . CUSTOMER"||--o{ ORDER : places

  ORDER ||--|{ "€£LINE_ITEM ¥" : contains

  "Person . CUSTOMER" }|..|{ "Address//StreetAddress::[DELIVERY ADDRESS]" : uses

  "Address//StreetAddress::[DELIVERY ADDRESS]" {
      int customerID FK
      string line1 "this is the first address line comment"
      string line2
      string city
      string region
      string state
      string postal_code
      string country
      }

      "a_~`!@#$^&*()-_=+[]{}|/;:'.?¡⁄™€£‹¢›∞fi§‡•°ª·º‚≠±œŒ∑„®†ˇ¥Á¨ˆˆØπ∏“«»åÅßÍ∂΃ϩ˙Ó∆Ô˚¬Ò…ÚæÆΩ¸≈π˛çÇ√◊∫ı˜µÂ≤¯≥˘÷¿" {
        string name "this is an entity with an absurd name just to show characters that are now acceptable as long as the name is in double quotes"
      }

      "€£LINE_ITEM ¥" {
        int orderID FK
        int currencyId FK
        number price
        number quantity
        number adjustment
        number final_price
      }
    
mermaid-js-mermaid-9bb0ed2/demos/flowchart.html000066400000000000000000001747001433273745700216650ustar00rootroot00000000000000 Mermaid Quick Flowchart Test Page

Comparison "graph vs. flowchart"

Sample 1

graph

    graph LR
      accTitle: This is a complicated flow
      accDescr: This is the descriptoin for the complicated flow.

    sid-B3655226-6C29-4D00-B685-3D5C734DC7E1["

    提交申请
    熊大
    "];
    class sid-B3655226-6C29-4D00-B685-3D5C734DC7E1 node-executed;
    sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A["
    负责人审批
    强子
    "];
    class sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A node-executed;
    sid-E27C0367-E6D6-497F-9736-3CDC21FDE221["
    DBA审批
    强子
    "];
    class sid-E27C0367-E6D6-497F-9736-3CDC21FDE221 node-executed;
    sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD["
    SA审批
    阿美
    "];
    class sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD node-executed;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7["
    主管审批
    光头强
    "];
    class sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7 node-executed;
    sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89["
    DBA确认
    强子
    "];
    class sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89 node-executed;
    sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937["
    SA确认
    阿美
    "];
    class sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937 node-executed;
    sid-4FC27B48-A6F9-460A-A675-021F5854FE22["
    结束
    "];
    class sid-4FC27B48-A6F9-460A-A675-021F5854FE22 node-executed;
    sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E["
    SA执行1
    强子
    "];
    class sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E node-executed;
    sid-6C2120F3-D940-4958-A067-0903DCE879C4["
    SA执行2
    强子
    "];
    class sid-6C2120F3-D940-4958-A067-0903DCE879C4 node-executed;
    sid-9180E2A0-5C4B-435F-B42F-0D152470A338["
    DBA执行1
    强子
    "];
    class sid-9180E2A0-5C4B-435F-B42F-0D152470A338 node-executed;
    sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD["
    DBA执行3
    强子
    "];
    class sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD node-executed;
    sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756["
    DBA执行2
    强子
    "];
    class sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756 node-executed;
    sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93["
    DBA执行4
    强子
    "];
    class sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93 node-executed;
    sid-1897B30A-9C5C-4D5B-B80B-76A038785070["
    负责人确认
    梁静茹
    "];
    class sid-1897B30A-9C5C-4D5B-B80B-76A038785070 node-executed;
    sid-B3655226-6C29-4D00-B685-3D5C734DC7E1-->sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7;
    sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A-->sid-1897B30A-9C5C-4D5B-B80B-76A038785070;
    sid-E27C0367-E6D6-497F-9736-3CDC21FDE221-->sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89;
    sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD-->sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937;
    sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E-->sid-6C2120F3-D940-4958-A067-0903DCE879C4;
    sid-9180E2A0-5C4B-435F-B42F-0D152470A338-->sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756;
    sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD-->sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93;
    sid-6C2120F3-D940-4958-A067-0903DCE879C4-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
    sid-1897B30A-9C5C-4D5B-B80B-76A038785070-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22;
    sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937-->sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E;
    sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89-->sid-9180E2A0-5C4B-435F-B42F-0D152470A338;
    sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89-->sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD;
    sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
    sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-E27C0367-E6D6-497F-9736-3CDC21FDE221;
    sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937-->sid-6C2120F3-D940-4958-A067-0903DCE879C4;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22;
    

flowchart

    flowchart LR
    sid-B3655226-6C29-4D00-B685-3D5C734DC7E1["

    提交申请
    熊大
    "];
    class sid-B3655226-6C29-4D00-B685-3D5C734DC7E1 node-executed;
    sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A["
    负责人审批
    强子
    "];
    class sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A node-executed;
    sid-E27C0367-E6D6-497F-9736-3CDC21FDE221["
    DBA审批
    强子
    "];
    class sid-E27C0367-E6D6-497F-9736-3CDC21FDE221 node-executed;
    sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD["
    SA审批
    阿美
    "];
    class sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD node-executed;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7["
    主管审批
    光头强
    "];
    class sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7 node-executed;
    sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89["
    DBA确认
    强子
    "];
    class sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89 node-executed;
    sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937["
    SA确认
    阿美
    "];
    class sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937 node-executed;
    sid-4FC27B48-A6F9-460A-A675-021F5854FE22["
    结束
    "];
    class sid-4FC27B48-A6F9-460A-A675-021F5854FE22 node-executed;
    sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E["
    SA执行1
    强子
    "];
    class sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E node-executed;
    sid-6C2120F3-D940-4958-A067-0903DCE879C4["
    SA执行2
    强子
    "];
    class sid-6C2120F3-D940-4958-A067-0903DCE879C4 node-executed;
    sid-9180E2A0-5C4B-435F-B42F-0D152470A338["
    DBA执行1
    强子
    "];
    class sid-9180E2A0-5C4B-435F-B42F-0D152470A338 node-executed;
    sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD["
    DBA执行3
    强子
    "];
    class sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD node-executed;
    sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756["
    DBA执行2
    强子
    "];
    class sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756 node-executed;
    sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93["
    DBA执行4
    强子
    "];
    class sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93 node-executed;
    sid-1897B30A-9C5C-4D5B-B80B-76A038785070["
    负责人确认
    梁静茹
    "];
    class sid-1897B30A-9C5C-4D5B-B80B-76A038785070 node-executed;
    sid-B3655226-6C29-4D00-B685-3D5C734DC7E1-->sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7;
    sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A-->sid-1897B30A-9C5C-4D5B-B80B-76A038785070;
    sid-E27C0367-E6D6-497F-9736-3CDC21FDE221-->sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89;
    sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD-->sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937;
    sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E-->sid-6C2120F3-D940-4958-A067-0903DCE879C4;
    sid-9180E2A0-5C4B-435F-B42F-0D152470A338-->sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756;
    sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD-->sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93;
    sid-6C2120F3-D940-4958-A067-0903DCE879C4-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
    sid-1897B30A-9C5C-4D5B-B80B-76A038785070-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22;
    sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937-->sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E;
    sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89-->sid-9180E2A0-5C4B-435F-B42F-0D152470A338;
    sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89-->sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD;
    sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
    sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-E27C0367-E6D6-497F-9736-3CDC21FDE221;
    sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937-->sid-6C2120F3-D940-4958-A067-0903DCE879C4;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22;
    

Sample 2

graph

    graph TD
      accTitle: What to buy
      accDescr: Options of what to buy with Christmas money
      A[Christmas] -->|Get money| B(Go shopping)
      B --> C{Let me thinksssssx
sssssssssssssssssssuuu
tttsssssssssssssssssssssss} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[Car]

flowchart

    flowchart TD
      accTitle: What to buy
      accDescr: Options of what to buy with Christmas money
      A[Christmas] -->|Get money| B(Go shopping)
      B --> C{Let me thinksssssx
sssssssssssssssssssuuu
tttsssssssssssssssssssssss} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[Car]

Sample 3

graph

    graph TD
    A[/Christmas\]
    A -->|Get money| B[\Go shopping/]
    B --> C{Let me thinksssss
ssssssssssssssssssssss
sssssssssssssssssssssssssss} C -->|One| D[/Laptop/] C -->|Two| E[\iPhone\] C -->|Three| F[Car]

flowchart

    flowchart TD
    A[/Christmas\]
    A -->|Get money| B[\Go shopping/]
    B --> C{Let me thinksssss
ssssssssssssssssssssss
sssssssssssssssssssssssssss} C -->|One| D[/Laptop/] C -->|Two| E[\iPhone\] C -->|Three| F[Car]

Sample 4

graph

    graph LR
    47(SAM.CommonFA.FMESummary)-->48(SAM.CommonFA.CommonFAFinanceBudget)
    37(SAM.CommonFA.BudgetSubserviceLineVolume)-->48(SAM.CommonFA.CommonFAFinanceBudget)
    35(SAM.CommonFA.PopulationFME)-->47(SAM.CommonFA.FMESummary)
    41(SAM.CommonFA.MetricCost)-->47(SAM.CommonFA.FMESummary)
    44(SAM.CommonFA.MetricOutliers)-->47(SAM.CommonFA.FMESummary)
    46(SAM.CommonFA.MetricOpportunity)-->47(SAM.CommonFA.FMESummary)
    40(SAM.CommonFA.OPVisits)-->47(SAM.CommonFA.FMESummary)
    38(SAM.CommonFA.CommonFAFinanceRefund)-->47(SAM.CommonFA.FMESummary)
    43(SAM.CommonFA.CommonFAFinancePicuDays)-->47(SAM.CommonFA.FMESummary)
    42(SAM.CommonFA.CommonFAFinanceNurseryDays)-->47(SAM.CommonFA.FMESummary)
    45(SAM.CommonFA.MetricPreOpportunity)-->46(SAM.CommonFA.MetricOpportunity)
    35(SAM.CommonFA.PopulationFME)-->45(SAM.CommonFA.MetricPreOpportunity)
    41(SAM.CommonFA.MetricCost)-->45(SAM.CommonFA.MetricPreOpportunity)
    41(SAM.CommonFA.MetricCost)-->44(SAM.CommonFA.MetricOutliers)
    39(SAM.CommonFA.ChargeDetails)-->43(SAM.CommonFA.CommonFAFinancePicuDays)
    39(SAM.CommonFA.ChargeDetails)-->42(SAM.CommonFA.CommonFAFinanceNurseryDays)
    39(SAM.CommonFA.ChargeDetails)-->41(SAM.CommonFA.MetricCost)
    39(SAM.CommonFA.ChargeDetails)-->40(SAM.CommonFA.OPVisits)
    35(SAM.CommonFA.PopulationFME)-->39(SAM.CommonFA.ChargeDetails)
    36(SAM.CommonFA.PremetricCost)-->39(SAM.CommonFA.ChargeDetails)
    

flowchart

    flowchart LR
    47(SAM.CommonFA.FMESummary)-->48(SAM.CommonFA.CommonFAFinanceBudget)
    37(SAM.CommonFA.BudgetSubserviceLineVolume)-->48(SAM.CommonFA.CommonFAFinanceBudget)
    35(SAM.CommonFA.PopulationFME)-->47(SAM.CommonFA.FMESummary)
    41(SAM.CommonFA.MetricCost)-->47(SAM.CommonFA.FMESummary)
    44(SAM.CommonFA.MetricOutliers)-->47(SAM.CommonFA.FMESummary)
    46(SAM.CommonFA.MetricOpportunity)-->47(SAM.CommonFA.FMESummary)
    40(SAM.CommonFA.OPVisits)-->47(SAM.CommonFA.FMESummary)
    38(SAM.CommonFA.CommonFAFinanceRefund)-->47(SAM.CommonFA.FMESummary)
    43(SAM.CommonFA.CommonFAFinancePicuDays)-->47(SAM.CommonFA.FMESummary)
    42(SAM.CommonFA.CommonFAFinanceNurseryDays)-->47(SAM.CommonFA.FMESummary)
    45(SAM.CommonFA.MetricPreOpportunity)-->46(SAM.CommonFA.MetricOpportunity)
    35(SAM.CommonFA.PopulationFME)-->45(SAM.CommonFA.MetricPreOpportunity)
    41(SAM.CommonFA.MetricCost)-->45(SAM.CommonFA.MetricPreOpportunity)
    41(SAM.CommonFA.MetricCost)-->44(SAM.CommonFA.MetricOutliers)
    39(SAM.CommonFA.ChargeDetails)-->43(SAM.CommonFA.CommonFAFinancePicuDays)
    39(SAM.CommonFA.ChargeDetails)-->42(SAM.CommonFA.CommonFAFinanceNurseryDays)
    39(SAM.CommonFA.ChargeDetails)-->41(SAM.CommonFA.MetricCost)
    39(SAM.CommonFA.ChargeDetails)-->40(SAM.CommonFA.OPVisits)
    35(SAM.CommonFA.PopulationFME)-->39(SAM.CommonFA.ChargeDetails)
    36(SAM.CommonFA.PremetricCost)-->39(SAM.CommonFA.ChargeDetails)
    

Sample 5

graph

    graph TD
    9e122290_1ec3_e711_8c5a_005056ad0002("fa:fa-creative-commons My System | Test Environment")
    82072290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Business Logic Server:Service 1")
    db052290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Business Logic Server:Service 2")
    4e112290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Report Server:Service 1")
    30122290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Report Server:Service 2")
    5e112290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Dedicated Test Business Logic Server:Service 1")
    c1112290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Dedicated Test Business Logic Server:Service 2")
    b7042290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\SharedDbInstance].[SupportDb]")
    8f102290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\SharedDbInstance].[DevelopmentDb]")
    0e102290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\SharedDbInstance].[TestDb]")
    07132290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\SharedDbInstance].[SharedReportingDb]")
    c7072290_1ec3_e711_8c5a_005056ad0002("fa:fa-server Shared Business Logic Server")
    ca122290_1ec3_e711_8c5a_005056ad0002("fa:fa-server Shared Report Server")
    68102290_1ec3_e711_8c5a_005056ad0002("fa:fa-server Dedicated Test Business Logic Server")
    f4112290_1ec3_e711_8c5a_005056ad0002("fa:fa-database [DBServer\SharedDbInstance]")
    d6072290_1ec3_e711_8c5a_005056ad0002("fa:fa-server DBServer")
    71082290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs DBServer\:MSSQLSERVER")
    c0102290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs DBServer\:SQLAgent")
    9a072290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs DBServer\:SQLBrowser")
    1d0a2290_1ec3_e711_8c5a_005056ad0002("fa:fa-server VmHost1")
    200a2290_1ec3_e711_8c5a_005056ad0002("fa:fa-server VmHost2")
    1c0a2290_1ec3_e711_8c5a_005056ad0002("fa:fa-server VmHost3")
    9e122290_1ec3_e711_8c5a_005056ad0002-->82072290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->db052290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->4e112290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->30122290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->5e112290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->c1112290_1ec3_e711_8c5a_005056ad0002
    82072290_1ec3_e711_8c5a_005056ad0002-->b7042290_1ec3_e711_8c5a_005056ad0002
    82072290_1ec3_e711_8c5a_005056ad0002-->8f102290_1ec3_e711_8c5a_005056ad0002
    82072290_1ec3_e711_8c5a_005056ad0002-->0e102290_1ec3_e711_8c5a_005056ad0002
    82072290_1ec3_e711_8c5a_005056ad0002-->c7072290_1ec3_e711_8c5a_005056ad0002
    db052290_1ec3_e711_8c5a_005056ad0002-->c7072290_1ec3_e711_8c5a_005056ad0002
    db052290_1ec3_e711_8c5a_005056ad0002-->82072290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->b7042290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->8f102290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->0e102290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->07132290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->ca122290_1ec3_e711_8c5a_005056ad0002
    30122290_1ec3_e711_8c5a_005056ad0002-->ca122290_1ec3_e711_8c5a_005056ad0002
    30122290_1ec3_e711_8c5a_005056ad0002-->4e112290_1ec3_e711_8c5a_005056ad0002
    5e112290_1ec3_e711_8c5a_005056ad0002-->8f102290_1ec3_e711_8c5a_005056ad0002
    5e112290_1ec3_e711_8c5a_005056ad0002-->68102290_1ec3_e711_8c5a_005056ad0002
    c1112290_1ec3_e711_8c5a_005056ad0002-->68102290_1ec3_e711_8c5a_005056ad0002
    c1112290_1ec3_e711_8c5a_005056ad0002-->5e112290_1ec3_e711_8c5a_005056ad0002
    b7042290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002
    8f102290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002
    0e102290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002
    07132290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002
    c7072290_1ec3_e711_8c5a_005056ad0002-->1d0a2290_1ec3_e711_8c5a_005056ad0002
    ca122290_1ec3_e711_8c5a_005056ad0002-->200a2290_1ec3_e711_8c5a_005056ad0002
    68102290_1ec3_e711_8c5a_005056ad0002-->1c0a2290_1ec3_e711_8c5a_005056ad0002
    f4112290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
    f4112290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
    f4112290_1ec3_e711_8c5a_005056ad0002-->c0102290_1ec3_e711_8c5a_005056ad0002
    f4112290_1ec3_e711_8c5a_005056ad0002-->9a072290_1ec3_e711_8c5a_005056ad0002
    d6072290_1ec3_e711_8c5a_005056ad0002-->1c0a2290_1ec3_e711_8c5a_005056ad0002
    71082290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
    c0102290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
    c0102290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
    9a072290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
    9a072290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
    

flowchart

    flowchart TD
    9e122290_1ec3_e711_8c5a_005056ad0002("fa:fa-creative-commons My System | Test Environment")
    82072290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Business Logic Server:Service 1")
    db052290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Business Logic Server:Service 2")
    4e112290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Report Server:Service 1")
    30122290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Report Server:Service 2")
    5e112290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Dedicated Test Business Logic Server:Service 1")
    c1112290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Dedicated Test Business Logic Server:Service 2")
    b7042290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\SharedDbInstance].[SupportDb]")
    8f102290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\SharedDbInstance].[DevelopmentDb]")
    0e102290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\SharedDbInstance].[TestDb]")
    07132290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\SharedDbInstance].[SharedReportingDb]")
    c7072290_1ec3_e711_8c5a_005056ad0002("fa:fa-server Shared Business Logic Server")
    ca122290_1ec3_e711_8c5a_005056ad0002("fa:fa-server Shared Report Server")
    68102290_1ec3_e711_8c5a_005056ad0002("fa:fa-server Dedicated Test Business Logic Server")
    f4112290_1ec3_e711_8c5a_005056ad0002("fa:fa-database [DBServer\SharedDbInstance]")
    d6072290_1ec3_e711_8c5a_005056ad0002("fa:fa-server DBServer")
    71082290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs DBServer\:MSSQLSERVER")
    c0102290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs DBServer\:SQLAgent")
    9a072290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs DBServer\:SQLBrowser")
    1d0a2290_1ec3_e711_8c5a_005056ad0002("fa:fa-server VmHost1")
    200a2290_1ec3_e711_8c5a_005056ad0002("fa:fa-server VmHost2")
    1c0a2290_1ec3_e711_8c5a_005056ad0002("fa:fa-server VmHost3")
    9e122290_1ec3_e711_8c5a_005056ad0002-->82072290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->db052290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->4e112290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->30122290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->5e112290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->c1112290_1ec3_e711_8c5a_005056ad0002
    82072290_1ec3_e711_8c5a_005056ad0002-->b7042290_1ec3_e711_8c5a_005056ad0002
    82072290_1ec3_e711_8c5a_005056ad0002-->8f102290_1ec3_e711_8c5a_005056ad0002
    82072290_1ec3_e711_8c5a_005056ad0002-->0e102290_1ec3_e711_8c5a_005056ad0002
    82072290_1ec3_e711_8c5a_005056ad0002-->c7072290_1ec3_e711_8c5a_005056ad0002
    db052290_1ec3_e711_8c5a_005056ad0002-->c7072290_1ec3_e711_8c5a_005056ad0002
    db052290_1ec3_e711_8c5a_005056ad0002-->82072290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->b7042290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->8f102290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->0e102290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->07132290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->ca122290_1ec3_e711_8c5a_005056ad0002
    30122290_1ec3_e711_8c5a_005056ad0002-->ca122290_1ec3_e711_8c5a_005056ad0002
    30122290_1ec3_e711_8c5a_005056ad0002-->4e112290_1ec3_e711_8c5a_005056ad0002
    5e112290_1ec3_e711_8c5a_005056ad0002-->8f102290_1ec3_e711_8c5a_005056ad0002
    5e112290_1ec3_e711_8c5a_005056ad0002-->68102290_1ec3_e711_8c5a_005056ad0002
    c1112290_1ec3_e711_8c5a_005056ad0002-->68102290_1ec3_e711_8c5a_005056ad0002
    c1112290_1ec3_e711_8c5a_005056ad0002-->5e112290_1ec3_e711_8c5a_005056ad0002
    b7042290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002
    8f102290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002
    0e102290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002
    07132290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002
    c7072290_1ec3_e711_8c5a_005056ad0002-->1d0a2290_1ec3_e711_8c5a_005056ad0002
    ca122290_1ec3_e711_8c5a_005056ad0002-->200a2290_1ec3_e711_8c5a_005056ad0002
    68102290_1ec3_e711_8c5a_005056ad0002-->1c0a2290_1ec3_e711_8c5a_005056ad0002
    f4112290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
    f4112290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
    f4112290_1ec3_e711_8c5a_005056ad0002-->c0102290_1ec3_e711_8c5a_005056ad0002
    f4112290_1ec3_e711_8c5a_005056ad0002-->9a072290_1ec3_e711_8c5a_005056ad0002
    d6072290_1ec3_e711_8c5a_005056ad0002-->1c0a2290_1ec3_e711_8c5a_005056ad0002
    71082290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
    c0102290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
    c0102290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
    9a072290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
    9a072290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
    

Sample 6

graph

    graph TB
    subgraph One
      a1-->a2
    end
    

flowchart

    flowchart TB
    subgraph One
      a1-->a2
    end
    

Sample 7

graph

    graph TB
    A
    B
    subgraph foo[Foo SubGraph]
      C
      D
    end
    subgraph bar[Bar SubGraph]
      E
      F
    end
    G

    A-->B
    B-->C
    C-->D
    B-->D
    D-->E
    E-->A
    E-->F
    F-->D
    F-->G
    B-->G
    G-->D

    style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
    style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
    

flowchart

    flowchart TB
    A
    B
    subgraph foo[Foo SubGraph]
      C
      D
    end
    subgraph bar[Bar SubGraph]
      E
      F
    end
    G

    A-->B
    B-->C
    C-->D
    B-->D
    D-->E
    E-->A
    E-->F
    F-->D
    F-->G
    B-->G
    G-->D

    style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
    style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
    

Sample 8

graph

    graph LR
    456ac9b0d15a8b7f1e71073221059886[1051 AAA fa:fa-check]
    f7f580e11d00a75814d2ded41fe8e8fe[1141 BBB fa:fa-check]
    81dc9bdb52d04dc20036dbd8313ed055[1234 CCC fa:fa-check]
    456ac9b0d15a8b7f1e71073221059886 -->|Node| f7f580e11d00a75814d2ded41fe8e8fe
    f7f580e11d00a75814d2ded41fe8e8fe -->|Node| 81dc9bdb52d04dc20036dbd8313ed055
    click 456ac9b0d15a8b7f1e71073221059886 "/admin/user/view?id=1051" "AAA
    6000"
    click f7f580e11d00a75814d2ded41fe8e8fe "/admin/user/view?id=1141" "BBB
    600"
    click 81dc9bdb52d04dc20036dbd8313ed055 "/admin/user/view?id=1234" "CCC
    3000"
    style 456ac9b0d15a8b7f1e71073221059886 fill:#f9f,stroke:#333,stroke-width:4px
    

flowchart

    flowchart LR
    456ac9b0d15a8b7f1e71073221059886[1051 AAA fa:fa-check]
    f7f580e11d00a75814d2ded41fe8e8fe[1141 BBB fa:fa-check]
    81dc9bdb52d04dc20036dbd8313ed055[1234 CCC fa:fa-check]
    456ac9b0d15a8b7f1e71073221059886 -->|Node| f7f580e11d00a75814d2ded41fe8e8fe
    f7f580e11d00a75814d2ded41fe8e8fe -->|Node| 81dc9bdb52d04dc20036dbd8313ed055
    click 456ac9b0d15a8b7f1e71073221059886 "/admin/user/view?id=1051" "AAA
    6000"
    click f7f580e11d00a75814d2ded41fe8e8fe "/admin/user/view?id=1141" "BBB
    600"
    click 81dc9bdb52d04dc20036dbd8313ed055 "/admin/user/view?id=1234" "CCC
    3000"
    style 456ac9b0d15a8b7f1e71073221059886 fill:#f9f,stroke:#333,stroke-width:4px
    

Sample 9

graph

    graph TD
    A[Christmas] -->|Get money| B(Go shopping)
    B --> C{{Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?}} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[Car] click A "flowchart.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass;

flowchart

    flowchart TD
    A[Christmas] -->|Get money| B(Go shopping)
    B --> C{{Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?}} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[Car] click A "flowchart.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass;

Sample 10

graph

    graph TD
    A([stadium shape test])
    A -->|Get money| B([Go shopping])
    B --> C([Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?]) C -->|One| D([Laptop]) C -->|Two| E([iPhone]) C -->|Three| F([Car
wroom wroom]) click A "flowchart.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass;

flowchart

    flowchart TD
    A([stadium shape test])
    A -->|Get money| B([Go shopping])
    B --> C([Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?]) C -->|One| D([Laptop]) C -->|Two| E([iPhone]) C -->|Three| F([Car
wroom wroom]) click A "flowchart.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass;

Sample 11

graph

    graph LR
    A[[subroutine shape test]]
    A -->|Get money| B[[Go shopping]]
    B --> C[[Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?]] C -->|One| D[[Laptop]] C -->|Two| E[[iPhone]] C -->|Three| F[[Car
wroom wroom]] click A "flowchart.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass;

flowchart

    flowchart LR
    A[[subroutine shape test]]
    A -->|Get money| B[[Go shopping]]
    B --> C[[Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?]] C -->|One| D[[Laptop]] C -->|Two| E[[iPhone]] C -->|Three| F[[Car
wroom wroom]] click A "flowchart.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass;

Sample 12

graph

    graph LR
    A[(cylindrical
shape
test)] A -->|Get money| B1[(Go shopping 1)] A -->|Get money| B2[(Go shopping 2)] A -->|Get money| B3[(Go shopping 3)] C[(Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?)] B1 --> C B2 --> C B3 --> C C -->|One| D[(Laptop)] C -->|Two| E[(iPhone)] C -->|Three| F[(Car)] click A "flowchart.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass;

flowchart

    flowchart LR
    A[(cylindrical
shape
test)] A -->|Get money| B1[(Go shopping 1)] A -->|Get money| B2[(Go shopping 2)] A -->|Get money| B3[(Go shopping 3)] C[(Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?)] B1 --> C B2 --> C B3 --> C C -->|One| D[(Laptop)] C -->|Two| E[(iPhone)] C -->|Three| F[(Car)] click A "flowchart.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass;

Sample 13

graph

    graph LR
    A1[Multi
Line] -->|Multi
Line| B1(Multi
Line) C1[Multi
Line] -->|Multi
Line| D1(Multi
Line) E1[Multi
Line] -->|Multi
Line| F1(Multi
Line) A2[Multi
Line] -->|Multi
Line| B2(Multi
Line) C2[Multi
Line] -->|Multi
Line| D2(Multi
Line) E2[Multi
Line] -->|Multi
Line| F2(Multi
Line) linkStyle 0 stroke:DarkGray,stroke-width:2px linkStyle 1 stroke:DarkGray,stroke-width:2px linkStyle 2 stroke:DarkGray,stroke-width:2px

flowchart

    flowchart LR
    A1[Multi
Line] -->|Multi
Line| B1(Multi
Line) C1[Multi
Line] -->|Multi
Line| D1(Multi
Line) E1[Multi
Line] -->|Multi
Line| F1(Multi
Line) A2[Multi
Line] -->|Multi
Line| B2(Multi
Line) C2[Multi
Line] -->|Multi
Line| D2(Multi
Line) E2[Multi
Line] -->|Multi
Line| F2(Multi
Line) linkStyle 0 stroke:DarkGray,stroke-width:2px linkStyle 1 stroke:DarkGray,stroke-width:2px linkStyle 2 stroke:DarkGray,stroke-width:2px

Sample 14

graph

    graph LR
    A(( )) -->|step 1| B(( ))
    B(( )) -->|step 2| C(( ))
    C(( )) -->|step 3| D(( ))
    linkStyle 1 stroke:greenyellow,stroke-width:2px
    style C fill:greenyellow,stroke:green,stroke-width:4px
    

flowchart

    flowchart LR
    A(( )) -->|step 1| B(( ))
    B(( )) -->|step 2| C(( ))
    C(( )) -->|step 3| D(( ))
    linkStyle 1 stroke:greenyellow,stroke-width:2px
    style C fill:greenyellow,stroke:green,stroke-width:4px
    

Sample 15

graph

    graph TB
    TITLE["Link Click Events
(click the nodes below)"] A["link test (open in same tab)"] B["link test (open in new tab)"] C[anchor test] D[mailto test] E[other protocol test] F[script test] TITLE --> A & B & C & D & E & F click A "https://mermaid-js.github.io/mermaid/#/" "link test (open in same tab)" click B "https://mermaid-js.github.io/mermaid/#/" "link test (open in new tab)" _blank click C "#link-clicked" click D "mailto:user@user.user" "mailto test" click E "notes://do-your-thing/id" "other protocol test" click F "javascript:alert('test')" "script test"

flowchart

    flowchart TB
    TITLE["Link Click Events
(click the nodes below)"] A["link test (open in same tab)"] B["link test (open in new tab)"] C[anchor test] D[mailto test] E[other protocol test] F[script test] TITLE --> A & B & C & D & E & F click A "https://mermaid-js.github.io/mermaid/#/" "link test (open in same tab)" click B "https://mermaid-js.github.io/mermaid/#/" "link test (open in new tab)" _blank click C "#link-clicked" click D "mailto:user@user.user" "mailto test" click E "notes://do-your-thing/id" "other protocol test" click F "javascript:alert('test')" "script test"

Sample 16

graph

    graph LR
    A[red
text] -->|red
text| B(blue
text) C[/red
text/] -->|blue
text| D{blue
text} E{{default
style}} -->|default
style| F([default
style]) linkStyle default color:Sienna; linkStyle 0 color:red; linkStyle 1 stroke:DarkGray,stroke-width:2px,color:#0000ff style A color:red; style B color:blue; style C stroke:#ff0000,fill:#ffcccc,color:#ff0000 style D stroke:#0000ff,fill:#ccccff,color:#0000ff click B "flowchart.html#link-clicked" "link test" click D testClick "click test"

flowchart

    flowchart LR
    A[red
text] -->|red
text| B(blue
text) C[/red
text/] -->|blue
text| D{blue
text} E{{default
style}} -->|default
style| F([default
style]) linkStyle default color:Sienna; linkStyle 0 color:red; linkStyle 1 stroke:DarkGray,stroke-width:2px,color:#0000ff style A color:red; style B color:blue; style C stroke:#ff0000,fill:#ffcccc,color:#ff0000 style D stroke:#0000ff,fill:#ccccff,color:#0000ff click B "flowchart.html#link-clicked" "link test" click D testClick "click test"

Sample 17

graph

    graph TD
    A[myClass1] --> B[default] & C[default]
    B[default] & C[default] --> D[myClass2]
    classDef default stroke-width:2px,fill:none,stroke:silver
    classDef node color:red
    classDef myClass1 color:#0000ff
    classDef myClass2 stroke:#0000ff,fill:#ccccff
    class A myClass1
    class D myClass2
    

flowchart

    flowchart TD
    A[myClass1] --> B[default] & C[default]
    B[default] & C[default] --> D[myClass2]
    classDef default stroke-width:2px,fill:none,stroke:silver
    classDef node color:red
    classDef myClass1 color:#0000ff
    classDef myClass2 stroke:#0000ff,fill:#ccccff
    class A myClass1
    class D myClass2
    

Sample 18

graph

    graph LR
    A1[red text] -->|default style| A2[blue text]
    B1(red text) -->|default style| B2(blue text)
    C1([red text]) -->|default style| C2([blue text])
    D1[[red text]] -->|default style| D2[[blue text]]
    E1[(red text)] -->|default style| E2[(blue text)]
    F1((red text)) -->|default style| F2((blue text))
    G1>red text] -->|default style| G2>blue text]
    H1{red text} -->|default style| H2{blue text}
    I1{{red text}} -->|default style| I2{{blue text}}
    J1[/red text/] -->|default style| J2[/blue text/]
    K1[\red text\] -->|default style| K2[\blue text\]
    L1[/red text\] -->|default style| L2[/blue text\]
    M1[\red text/] -->|default style| M2[\blue text/]
    N1[red text] -->|default style| N2[blue text]
    linkStyle default color:Sienna;
    style A1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style B1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style C1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style D1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style E1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style F1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style G1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style H1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style I1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style J1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style K1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style L1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style M1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style N1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style A2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style B2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style C2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style D2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style E2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style F2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style G2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style H2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style I2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style J2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style K2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style L2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style M2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style N2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    

flowchart

    flowchart LR
    A1[red text] <-->|default style| A2[blue text]
    B1(red text) <-->|default style| B2(blue text)
    C1([red text]) <-->|default style| C2([blue text])
    D1[[red text]] <-->|default style| D2[[blue text]]
    E1[(red text)] <-->|default style| E2[(blue text)]
    F1((red text)) <-->|default style| F2((blue text))
    G1>red text] <-->|default style| G2>blue text]
    H1{red text} <-->|default style| H2{blue text}
    I1{{red text}} <-->|default style| I2{{blue text}}
    J1[/red text/] <-->|default style| J2[/blue text/]
    K1[\red text\] <-->|default style| K2[\blue text\]
    L1[/red text\] <-->|default style| L2[/blue text\]
    M1[\red text/] <-->|default style| M2[\blue text/]
    N1[red text] <-->|default style| N2[blue text]
    linkStyle default color:Sienna;
    style A1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style B1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style C1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style D1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style E1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style F1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style G1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style H1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style I1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style J1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style K1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style L1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style M1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style N1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style A2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style B2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style C2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style D2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style E2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style F2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style G2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style H2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style I2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style J2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style K2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style L2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style M2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style N2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    

Sample 19

graph

    graph TB
    A1[red text] -->|default style| A2[blue text]
    B1(red text) -->|default style| B2(blue text)
    C1([red text]) -->|default style| C2([blue text])
    D1[[red text]] -->|default style| D2[[blue text]]
    E1[(red text)] -->|default style| E2[(blue text)]
    F1((red text)) -->|default style| F2((blue text))
    G1>red text] -->|default style| G2>blue text]
    H1{red text} -->|default style| H2{blue text}
    I1{{red text}} -->|default style| I2{{blue text}}
    J1[/red text/] -->|default style| J2[/blue text/]
    K1[\red text\] -->|default style| K2[\blue text\]
    L1[/red text\] -->|default style| L2[/blue text\]
    M1[\red text/] -->|default style| M2[\blue text/]
    N1[red text] -->|default style| N2[blue text]
    linkStyle default color:Sienna;
    style A1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style B1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style C1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style D1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style E1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style F1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style G1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style H1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style I1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style J1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style K1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style L1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style M1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style N1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style A2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style B2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style C2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style D2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style E2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style F2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style G2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style H2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style I2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style J2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style K2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style L2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style M2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style N2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    

flowchart

    flowchart TB
    A1[red text] <-->|default style| A2[blue text]
    B1(red text) <-->|default style| B2(blue text)
    C1([red text]) <-->|default style| C2([blue text])
    D1[[red text]] <-->|default style| D2[[blue text]]
    E1[(red text)] <-->|default style| E2[(blue text)]
    F1((red text)) <-->|default style| F2((blue text))
    G1>red text] <-->|default style| G2>blue text]
    H1{red text} <-->|default style| H2{blue text}
    I1{{red text}} <-->|default style| I2{{blue text}}
    J1[/red text/] <-->|default style| J2[/blue text/]
    K1[\red text\] <-->|default style| K2[\blue text\]
    L1[/red text\] <-->|default style| L2[/blue text\]
    M1[\red text/] <-->|default style| M2[\blue text/]
    N1[red text] <-->|default style| N2[blue text]
    O1(((red text))) <-->|default style| O2(((blue text)))
    linkStyle default color:Sienna;
    style A1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style B1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style C1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style D1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style E1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style F1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style G1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style H1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style I1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style J1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style K1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style L1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style M1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style N1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style O1 stroke:#ff0000,fill:#ffcccc,color:#ff0000
    style A2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style B2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style C2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style D2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style E2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style F2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style G2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style H2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style I2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style J2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style K2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style L2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style M2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style N2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    style O2 stroke:#0000ff,fill:#ccccff,color:#0000ff
    


    graph LR
    sid-B3655226-6C29-4D00-B685-3D5C734DC7E1["

    提交申请
    熊大
    "];
    class sid-B3655226-6C29-4D00-B685-3D5C734DC7E1 node-executed;
    sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A["
    负责人审批
    强子
    "];
    class sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A node-executed;
    sid-E27C0367-E6D6-497F-9736-3CDC21FDE221["
    DBA审批
    强子
    "];
    class sid-E27C0367-E6D6-497F-9736-3CDC21FDE221 node-executed;
    sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD["
    SA审批
    阿美
    "];
    class sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD node-executed;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7["
    主管审批
    光头强
    "];
    class sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7 node-executed;
    sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89["
    DBA确认
    强子
    "];
    class sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89 node-executed;
    sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937["
    SA确认
    阿美
    "];
    class sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937 node-executed;
    sid-4FC27B48-A6F9-460A-A675-021F5854FE22["
    结束
    "];
    class sid-4FC27B48-A6F9-460A-A675-021F5854FE22 node-executed;
    sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E["
    SA执行1
    强子
    "];
    class sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E node-executed;
    sid-6C2120F3-D940-4958-A067-0903DCE879C4["
    SA执行2
    强子
    "];
    class sid-6C2120F3-D940-4958-A067-0903DCE879C4 node-executed;
    sid-9180E2A0-5C4B-435F-B42F-0D152470A338["
    DBA执行1
    强子
    "];
    class sid-9180E2A0-5C4B-435F-B42F-0D152470A338 node-executed;
    sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD["
    DBA执行3
    强子
    "];
    class sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD node-executed;
    sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756["
    DBA执行2
    强子
    "];
    class sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756 node-executed;
    sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93["
    DBA执行4
    强子
    "];
    class sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93 node-executed;
    sid-1897B30A-9C5C-4D5B-B80B-76A038785070["
    负责人确认
    梁静茹
    "];
    class sid-1897B30A-9C5C-4D5B-B80B-76A038785070 node-executed;
    sid-B3655226-6C29-4D00-B685-3D5C734DC7E1-->sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7;
    sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A-->sid-1897B30A-9C5C-4D5B-B80B-76A038785070;
    sid-E27C0367-E6D6-497F-9736-3CDC21FDE221-->sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89;
    sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD-->sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937;
    sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E-->sid-6C2120F3-D940-4958-A067-0903DCE879C4;
    sid-9180E2A0-5C4B-435F-B42F-0D152470A338-->sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756;
    sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD-->sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93;
    sid-6C2120F3-D940-4958-A067-0903DCE879C4-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
    sid-1897B30A-9C5C-4D5B-B80B-76A038785070-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22;
    sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937-->sid-19DD9E9F-98C1-44EE-B604-842AFEE76F1E;
    sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89-->sid-9180E2A0-5C4B-435F-B42F-0D152470A338;
    sid-A1B3CD96-7697-4D7C-BEAA-73D187B1BE89-->sid-03A2C3AC-5337-48A5-B154-BB3FD0EC8DAD;
    sid-D5E1F2F4-306C-47A2-BF74-F66E3D769756-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
    sid-8C3F2F1D-F014-4F99-B966-095DC1A2BD93-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-BED98281-9585-4D1B-934E-BD1AC6AC0EFD;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-E27C0367-E6D6-497F-9736-3CDC21FDE221;
    sid-3E35A7FF-A2F4-4E07-9247-DBF884C81937-->sid-6C2120F3-D940-4958-A067-0903DCE879C4;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
    sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22;
    

    graph TD
    A[Christmas] -->|Get money| B(Go shopping)
    B --> C{Let me thinksssssx
sssssssssssssssssssuuu
tttsssssssssssssssssssssss} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[Car]

    graph TD
    A[/Christmas\]
    A -->|Get money| B[\Go shopping/]
    B --> C{Let me thinksssss
ssssssssssssssssssssss
sssssssssssssssssssssssssss} C -->|One| D[/Laptop/] C -->|Two| E[\iPhone\] C -->|Three| F[Car]

    graph LR
    47(SAM.CommonFA.FMESummary)-->48(SAM.CommonFA.CommonFAFinanceBudget)
    37(SAM.CommonFA.BudgetSubserviceLineVolume)-->48(SAM.CommonFA.CommonFAFinanceBudget)
    35(SAM.CommonFA.PopulationFME)-->47(SAM.CommonFA.FMESummary)
    41(SAM.CommonFA.MetricCost)-->47(SAM.CommonFA.FMESummary)
    44(SAM.CommonFA.MetricOutliers)-->47(SAM.CommonFA.FMESummary)
    46(SAM.CommonFA.MetricOpportunity)-->47(SAM.CommonFA.FMESummary)
    40(SAM.CommonFA.OPVisits)-->47(SAM.CommonFA.FMESummary)
    38(SAM.CommonFA.CommonFAFinanceRefund)-->47(SAM.CommonFA.FMESummary)
    43(SAM.CommonFA.CommonFAFinancePicuDays)-->47(SAM.CommonFA.FMESummary)
    42(SAM.CommonFA.CommonFAFinanceNurseryDays)-->47(SAM.CommonFA.FMESummary)
    45(SAM.CommonFA.MetricPreOpportunity)-->46(SAM.CommonFA.MetricOpportunity)
    35(SAM.CommonFA.PopulationFME)-->45(SAM.CommonFA.MetricPreOpportunity)
    41(SAM.CommonFA.MetricCost)-->45(SAM.CommonFA.MetricPreOpportunity)
    41(SAM.CommonFA.MetricCost)-->44(SAM.CommonFA.MetricOutliers)
    39(SAM.CommonFA.ChargeDetails)-->43(SAM.CommonFA.CommonFAFinancePicuDays)
    39(SAM.CommonFA.ChargeDetails)-->42(SAM.CommonFA.CommonFAFinanceNurseryDays)
    39(SAM.CommonFA.ChargeDetails)-->41(SAM.CommonFA.MetricCost)
    39(SAM.CommonFA.ChargeDetails)-->40(SAM.CommonFA.OPVisits)
    35(SAM.CommonFA.PopulationFME)-->39(SAM.CommonFA.ChargeDetails)
    36(SAM.CommonFA.PremetricCost)-->39(SAM.CommonFA.ChargeDetails)
    

    graph TD
    9e122290_1ec3_e711_8c5a_005056ad0002("fa:fa-creative-commons My System | Test Environment")
    82072290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Business Logic Server:Service 1")
    db052290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Business Logic Server:Service 2")
    4e112290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Report Server:Service 1")
    30122290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Shared Report Server:Service 2")
    5e112290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Dedicated Test Business Logic Server:Service 1")
    c1112290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs Dedicated Test Business Logic Server:Service 2")
    b7042290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\SharedDbInstance].[SupportDb]")
    8f102290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\SharedDbInstance].[DevelopmentDb]")
    0e102290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\SharedDbInstance].[TestDb]")
    07132290_1ec3_e711_8c5a_005056ad0002("fa:fa-circle [DBServer\SharedDbInstance].[SharedReportingDb]")
    c7072290_1ec3_e711_8c5a_005056ad0002("fa:fa-server Shared Business Logic Server")
    ca122290_1ec3_e711_8c5a_005056ad0002("fa:fa-server Shared Report Server")
    68102290_1ec3_e711_8c5a_005056ad0002("fa:fa-server Dedicated Test Business Logic Server")
    f4112290_1ec3_e711_8c5a_005056ad0002("fa:fa-database [DBServer\SharedDbInstance]")
    d6072290_1ec3_e711_8c5a_005056ad0002("fa:fa-server DBServer")
    71082290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs DBServer\:MSSQLSERVER")
    c0102290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs DBServer\:SQLAgent")
    9a072290_1ec3_e711_8c5a_005056ad0002("fa:fa-cogs DBServer\:SQLBrowser")
    1d0a2290_1ec3_e711_8c5a_005056ad0002("fa:fa-server VmHost1")
    200a2290_1ec3_e711_8c5a_005056ad0002("fa:fa-server VmHost2")
    1c0a2290_1ec3_e711_8c5a_005056ad0002("fa:fa-server VmHost3")
    9e122290_1ec3_e711_8c5a_005056ad0002-->82072290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->db052290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->4e112290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->30122290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->5e112290_1ec3_e711_8c5a_005056ad0002
    9e122290_1ec3_e711_8c5a_005056ad0002-->c1112290_1ec3_e711_8c5a_005056ad0002
    82072290_1ec3_e711_8c5a_005056ad0002-->b7042290_1ec3_e711_8c5a_005056ad0002
    82072290_1ec3_e711_8c5a_005056ad0002-->8f102290_1ec3_e711_8c5a_005056ad0002
    82072290_1ec3_e711_8c5a_005056ad0002-->0e102290_1ec3_e711_8c5a_005056ad0002
    82072290_1ec3_e711_8c5a_005056ad0002-->c7072290_1ec3_e711_8c5a_005056ad0002
    db052290_1ec3_e711_8c5a_005056ad0002-->c7072290_1ec3_e711_8c5a_005056ad0002
    db052290_1ec3_e711_8c5a_005056ad0002-->82072290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->b7042290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->8f102290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->0e102290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->07132290_1ec3_e711_8c5a_005056ad0002
    4e112290_1ec3_e711_8c5a_005056ad0002-->ca122290_1ec3_e711_8c5a_005056ad0002
    30122290_1ec3_e711_8c5a_005056ad0002-->ca122290_1ec3_e711_8c5a_005056ad0002
    30122290_1ec3_e711_8c5a_005056ad0002-->4e112290_1ec3_e711_8c5a_005056ad0002
    5e112290_1ec3_e711_8c5a_005056ad0002-->8f102290_1ec3_e711_8c5a_005056ad0002
    5e112290_1ec3_e711_8c5a_005056ad0002-->68102290_1ec3_e711_8c5a_005056ad0002
    c1112290_1ec3_e711_8c5a_005056ad0002-->68102290_1ec3_e711_8c5a_005056ad0002
    c1112290_1ec3_e711_8c5a_005056ad0002-->5e112290_1ec3_e711_8c5a_005056ad0002
    b7042290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002
    8f102290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002
    0e102290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002
    07132290_1ec3_e711_8c5a_005056ad0002-->f4112290_1ec3_e711_8c5a_005056ad0002
    c7072290_1ec3_e711_8c5a_005056ad0002-->1d0a2290_1ec3_e711_8c5a_005056ad0002
    ca122290_1ec3_e711_8c5a_005056ad0002-->200a2290_1ec3_e711_8c5a_005056ad0002
    68102290_1ec3_e711_8c5a_005056ad0002-->1c0a2290_1ec3_e711_8c5a_005056ad0002
    f4112290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
    f4112290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
    f4112290_1ec3_e711_8c5a_005056ad0002-->c0102290_1ec3_e711_8c5a_005056ad0002
    f4112290_1ec3_e711_8c5a_005056ad0002-->9a072290_1ec3_e711_8c5a_005056ad0002
    d6072290_1ec3_e711_8c5a_005056ad0002-->1c0a2290_1ec3_e711_8c5a_005056ad0002
    71082290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
    c0102290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
    c0102290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
    9a072290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
    9a072290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
    

    graph TB
    subgraph One
    a1-->a2
    end
    

    graph TB
    A
    B
    subgraph foo[Foo SubGraph]
    C
    D
    end
    subgraph bar[Bar SubGraph]
    E
    F
    end
    G

    A-->B
    B-->C
    C-->D
    B-->D
    D-->E
    E-->A
    E-->F
    F-->D
    F-->G
    B-->G
    G-->D

    style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
    style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
    

    graph LR
    456ac9b0d15a8b7f1e71073221059886[1051 AAA fa:fa-check]
    f7f580e11d00a75814d2ded41fe8e8fe[1141 BBB fa:fa-check]
    81dc9bdb52d04dc20036dbd8313ed055[1234 CCC fa:fa-check]
    456ac9b0d15a8b7f1e71073221059886 -->|Node| f7f580e11d00a75814d2ded41fe8e8fe
    f7f580e11d00a75814d2ded41fe8e8fe -->|Node| 81dc9bdb52d04dc20036dbd8313ed055
    click 456ac9b0d15a8b7f1e71073221059886 "/admin/user/view?id=1051" "AAA
    6000"
    click f7f580e11d00a75814d2ded41fe8e8fe "/admin/user/view?id=1141" "BBB
    600"
    click 81dc9bdb52d04dc20036dbd8313ed055 "/admin/user/view?id=1234" "CCC
    3000"
    style 456ac9b0d15a8b7f1e71073221059886 fill:#f9f,stroke:#333,stroke-width:4px
    

    graph TD
    A[Christmas] -->|Get money| B(Go shopping)
    B --> C{{Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?}} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[Car] click A "index.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass;

    graph TD
    A([stadium shape test])
    A -->|Get money| B([Go shopping])
    B --> C([Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?]) C -->|One| D([Laptop]) C -->|Two| E([iPhone]) C -->|Three| F([Car
wroom wroom]) click A "index.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass;

    graph LR
    A[[subroutine shape test]]
    A -->|Get money| B[[Go shopping]]
    B --> C[[Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?]] C -->|One| D[[Laptop]] C -->|Two| E[[iPhone]] C -->|Three| F[[Car
wroom wroom]] click A "index.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass; class C someclass;

    graph LR
    A[(cylindrical
shape
test)] A -->|Get money| B1[(Go shopping 1)] A -->|Get money| B2[(Go shopping 2)] A -->|Get money| B3[(Go shopping 3)] C[(Let me think...
Do I want something for work,
something to spend every free second with,
or something to get around?)] B1 --> C B2 --> C B3 --> C C -->|One| D[(Laptop)] C -->|Two| E[(iPhone)] C -->|Three| F[(Car)] click A "index.html#link-clicked" "link test" click B testClick "click test" classDef someclass fill:#f96; class A someclass;

    graph LR
    A1[Multi
Line] -->|Multi
Line| B1(Multi
Line) C1[Multi
Line] -->|Multi
Line| D1(Multi
Line) E1[Multi
Line] -->|Multi
Line| F1(Multi
Line) A2[Multi
Line] -->|Multi
Line| B2(Multi
Line) C2[Multi
Line] -->|Multi
Line| D2(Multi
Line) E2[Multi
Line] -->|Multi
Line| F2(Multi
Line) linkStyle 0 stroke:DarkGray,stroke-width:2px linkStyle 1 stroke:DarkGray,stroke-width:2px linkStyle 2 stroke:DarkGray,stroke-width:2px

    graph LR
    A(( )) -->|step 1| B(( ))
    B(( )) -->|step 2| C(( ))
    C(( )) -->|step 3| D(( ))
    linkStyle 1 stroke:greenyellow,stroke-width:2px
    style C fill:greenyellow,stroke:green,stroke-width:4px
    

    graph TB
    TITLE["Link Click Events
(click the nodes below)"] A["link test (open in same tab)"] B["link test (open in new tab)"] C[anchor test] D[mailto test] E[other protocol test] F[script test] TITLE --> A & B & C & D & E & F click A "https://mermaid-js.github.io/mermaid/#/" "link test (open in same tab)" click B "https://mermaid-js.github.io/mermaid/#/" "link test (open in new tab)" _blank click C "#link-clicked" click D "mailto:user@user.user" "mailto test" click E "notes://do-your-thing/id" "other protocol test" click F "javascript:alert('test')" "script test"

    graph LR
    A[red
text] -->|red
text| B(blue
text) C[/red
text/] -->|blue
text| D{blue
text} E{{default
style}} -->|default
style| F([default
style]) linkStyle default color:Sienna; linkStyle 0 color:red; linkStyle 1 stroke:DarkGray,stroke-width:2px,color:#0000ff style A color:red; style B color:blue; style C stroke:#ff0000,fill:#ffcccc,color:#ff0000 style D stroke:#0000ff,fill:#ccccff,color:#0000ff click B "index.html#link-clicked" "link test" click D testClick "click test"

    graph TD
    A[myClass1] --> B[default] & C[default]
    B[default] & C[default] --> D[myClass2]
    classDef default stroke-width:2px,fill:none,stroke:silver
    classDef node color:red
    classDef myClass1 color:#0000ff
    classDef myClass2 stroke:#0000ff,fill:#ccccff
    class A myClass1
    class D myClass2
    

Anchor for "link-clicked" test

mermaid-js-mermaid-9bb0ed2/demos/gantt.html000066400000000000000000000126771433273745700210150ustar00rootroot00000000000000 Gantt | Mermaid Quick Test Page

Gantt chart diagram demos

      gantt
        title A Gantt Diagram
        accTitle: A simple sample gantt diagram
        accDescr: 2 sections with 2 tasks each, from 2014
        dateFormat  YYYY-MM-DD
        section Section
        A task           :a1, 2014-01-01, 30d
        Another task     :after a1  , 20d
        section Another
        Task in sec      :2014-01-12  , 12d
        another task      : 24d
    

    gantt
      title Airworks roadmap
      dateFormat YYYY-MM-DD
      axisFormat %m-%d %a
      excludes	weekends, 2021-10-01,2021-10-04,2021-10-05,2021-10-06,2021-10-07
      includes 2021-10-09

      section Airworks 3.4.1
      开发	:b, 2021-10-07, 5d
      测试	:after b, 4d
      OK  :milestore
      section Airworks 3.4.2
      开发	:a, 2021-10-09, 4d
      测试	:after a, 4d
    

    gantt
    title Exclusive end dates (Manual date should end on 3d)
    dateFormat YYYY-MM-DD
    axisFormat %d
    section Section1
    2 Days: 1, 2019-01-01,2d
    Manual Date: 2, 2019-01-01,2019-01-03
    

    gantt
    title Inclusive end dates (Manual date should end on 4th)
    dateFormat YYYY-MM-DD
    axisFormat %d
    inclusiveEndDates
    section Section1
    2 Days: 1, 2019-01-01,2d
    Manual Date: 2, 2019-01-01,2019-01-03
    

    gantt
    title Hide today marker (vertical line should not be visible)
    dateFormat YYYY-MM-DD
    axisFormat %d
    todayMarker off
    section Section1
    Today: 1, -1h
    

    gantt
    title Style today marker (vertical line should be 5px wide and half-transparent blue)
    dateFormat YYYY-MM-DD
    axisFormat %d
    todayMarker stroke-width:5px,stroke:#00f,opacity:0.5
    section Section1
    Today: 1, -1h
    

    gantt
    dateFormat YYYY-MM-DD
    axisFormat %d/%m
    title Adding GANTT diagram to mermaid
    excludes weekdays 2014-01-10

    section A section
    Completed task :done, des1, 2014-01-06,2014-01-08
    Active task :active, des2, 2014-01-09, 3d
    Future task : des3, after des2, 5d
    Future task2 : des4, after des3, 5d

    section Critical tasks
    Completed task in the critical line :crit, done, 2014-01-06,24h
    Implement parser and jison :crit, done, after des1, 2d
    Create tests for parser :crit, active, 3d
    Future task in critical line :crit, 5d
    Create tests for renderer :2d
    Add to mermaid :1d

    section Documentation
    Describe gantt syntax :active, a1, after des1, 3d
    Add gantt diagram to demo page :after a1 , 20h
    Add another diagram to demo page :doc1, after a1 , 48h

    section Clickable
    Visit mermaidjs :active, cl1, 2014-01-07,2014-01-10
    Calling a Callback (look at the console log) :cl2, after cl1, 3d

    click cl1 href "https://mermaidjs.github.io/"
    click cl2 call ganttTestClick("test", test, test)

    section Last section
    Describe gantt syntax :after doc1, 3d
    Add gantt diagram to demo page : 20h
    Add another diagram to demo page : 48h
    

    gantt
    dateFormat YYYY-MM-DD
    axisFormat %d/%m
    title GANTT diagram with multiline section titles
    excludes weekdays 2014-01-10

    section A section
multiline Completed task : done, des1, 2014-01-06,2014-01-08 Active task : active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks
multiline Completed task in the critical line : crit, done, 2014-01-06, 24h Implement parser and jison : crit, done, after des1, 2d Create tests for parser : crit, active, 3d Future task in critical line : crit, 5d Create tests for renderer : 2d Add to mermaid : 1d section Documentation
multiline Describe gantt syntax : active, a1, after des1, 3d Add gantt diagram to demo page : after a1, 20h Add another diagram to demo page : doc1, after a1, 48h section Last section
multiline Describe gantt syntax : after doc1, 3d Add gantt diagram to demo page : 20h Add another diagram to demo page : 48h

mermaid-js-mermaid-9bb0ed2/demos/git.html000066400000000000000000000035511433273745700204520ustar00rootroot00000000000000 Git Graphs Mermaid Quick Test Page

Git diagram demo

    gitGraph:
    options
    {
    "nodeSpacing": 50,
    "nodeRadius": 5
    }
    end
    branch master
    commit
    branch newbranch
    checkout newbranch
    commit
    commit
    checkout master
    commit
    commit
    merge newbranch
    
mermaid-js-mermaid-9bb0ed2/demos/index.html000066400000000000000000000035041433273745700207740ustar00rootroot00000000000000 Mermaid Quick Test Page

Mermaid quick test and demo pages

Some of these pages have duplicates; some are slow to load because they have so many graphs.

If you'd like to clean up one of the pages, please feel free to submit a pull request (PR).

mermaid-js-mermaid-9bb0ed2/demos/journey.html000066400000000000000000000022261433273745700213600ustar00rootroot00000000000000 Mermaid Quick Test Page

Journey diagram demo

         journey
    title My working day
      accTitle: Very simple journey demo
      accDescr: 2 main sections: work and home, each with just a few tasks

    section Go to work
      Make tea: 5: Me
      Go upstairs: 3: Me
      Do work: 1: Me, Cat
    section Go home
      Go downstairs: 5: Me
      Sit down: 3: Me
				
mermaid-js-mermaid-9bb0ed2/demos/pie.html000066400000000000000000000027331433273745700204450ustar00rootroot00000000000000 Mermaid Quick Test Page

Pie chart demos

      pie title Pets adopted by volunteers
      accTitle: simple pie char demo
      accDescr: pie chart with 3 sections: dogs, cats, rats. Most are dogs.
    "Dogs" : 386
    "Cats" : 85
    "Rats" : 15
    

    pie
      title Key elements in Product X
        accTitle: Key elements in Product X
      accDescr: This is a pie chart showing the key elements in Product X.
      "Calcium" : 42.96
      "Potassium" : 50.05
      "Magnesium" : 10.01
      "Iron" :  5
    
mermaid-js-mermaid-9bb0ed2/demos/requirements.html000066400000000000000000000073211433273745700224110ustar00rootroot00000000000000 Requirements Mermaid Quick Test Page

Requirement diagram demos

	requirementDiagram
	  accTitle: Requirments demo in black and white
		accDescr: A series of requirement boxes showing relationships among them. Has meaningless task names

	requirement test_req {
	id: 1
	text: the test text.
	risk: high
	verifymethod: test
	}

	functionalRequirement test_req2 {
	id: 1.1
	text: the second test text.
	risk: low
	verifymethod: inspection
	}

	performanceRequirement test_req3 {
	id: 1.2
	text: the third test text.
	risk: medium
	verifymethod: demonstration
	}

	interfaceRequirement test_req4 {
	id: 1.2.1
	text: the fourth test text.
	risk: medium
	verifymethod: analysis
	}

	physicalRequirement test_req5 {
	id: 1.2.2
	text: the fifth test text.
	risk: medium
	verifymethod: analysis
	}

	designConstraint test_req6 {
	id: 1.2.3
	text: the sixth test text.
	risk: medium
	verifymethod: analysis
	}

	element test_entity {
	type: simulation
	}

	element test_entity2 {
	type: word doc
	docRef: reqs/test_entity
	}

	element test_entity3 {
	type: "test suite"
	docRef: github.com/all_the_tests
	}


	test_entity - satisfies -> test_req2
	test_req - traces -> test_req2
	test_req - contains -> test_req3
	test_req3 - contains -> test_req4
	test_req4 - derives -> test_req5
	test_req5 - refines -> test_req6
	test_entity3 - verifies -> test_req5
	test_req <- copies - test_entity2
		

    requirementDiagram

    requirement An Example {
    id: 1
    text: the test text.
    risk: high
    verifymethod: test
    }

    functionalRequirement Random Name {
    id: 1.1
    text: the second test text.
    risk: low
    verifymethod: inspection
    }

    performanceRequirement Something Else {
    id: 1.2
    text: the third test text.
    risk: medium
    verifymethod: demonstration
    }

    interfaceRequirement test_req4 {
    id: 1.2.1
    text: the fourth test text.
    risk: medium
    verifymethod: analysis
    }

    physicalRequirement test_req5 {
    id: 1.2.2
    text: the fifth test text.
    risk: medium
    verifymethod: analysis
    }

    designConstraint test_req6 {
    id: 1.2.3
    text: really long text to test overflow. really long text to test overflow. really long text to test overflow.
    risk: medium
    verifymethod: analysis
    }

    element test_entity {
    type: simulation
    }

    element test_entity2 {
    type: word doc
    docRef: reqs/test_entity
    }

    element test_entity3 {
    type: "test suite"
    docRef: github.com/all_the_tests
    }


    test_entity - satisfies -> Random Name
    An Example - traces -> Random Name
    An Example - contains -> Something Else
    Something Else - contains -> test_req4
    test_req4 - derives -> test_req5
    test_req5 - refines -> test_req6
    test_entity3 - verifies -> test_req5
    An Example <- copies - test_entity2
    
mermaid-js-mermaid-9bb0ed2/demos/sequence.html000066400000000000000000000107031433273745700214740ustar00rootroot00000000000000 Mermaid Quick Test Page

Sequence diagram demos

		sequenceDiagram
			accTitle: test the accTitle
			accDescr: Test a description

			participant Alice
			participant Bob
			participant John as John
Second Line autonumber 10 10 rect rgb(200, 220, 100) rect rgb(200, 255, 200) Alice ->> Bob: Hello Bob, how are you? Bob-->>John: How about you John? end Bob--x Alice: I am good thanks! Bob-x John: I am good thanks! Note right of John: John thinks a long
long time, so long
that the text does
not fit on a row. Bob-->Alice: Checking with John... Note over John:wrap: John looks like he's still thinking, so Bob prods him a bit. Bob-x John: Hey John - we're still waiting to know
how you're doing Note over John:nowrap: John's trying hard not to break his train of thought. Bob-x John:wrap: John! Are you still debating about how you're doing? How long does it take?? Note over John: After a few more moments, John
finally snaps out of it. end autonumber off alt either this Alice->>+John: Yes John-->>-Alice: OK else or this autonumber Alice->>John: No else or this will happen Alice->John: Maybe end autonumber 200 par this happens in parallel Alice -->> Bob: Parallel message 1 and Alice -->> John: Parallel message 2 end

    sequenceDiagram
      accTitle: Sequence diagram title is here
      accDescr: Hello friends

    participant Alice
    participant Bob
    participant John as John
Second Line rect rgb(200, 220, 100) rect rgb(200, 255, 200) Alice ->> Bob: Hello Bob, how are you? Bob-->>John: How about you John? end Bob--x Alice: I am good thanks! Bob-x John: I am good thanks! Note right of John: John thinks a long
long time, so long
that the text does
not fit on a row. Bob-->Alice: Checking with John... Note over John:wrap: John looks like he's still thinking, so Bob prods him a bit. Bob-x John: Hey John - we're still waiting to know
how you're doing Note over John:nowrap: John's trying hard not to break his train of thought. Bob-x John:wrap: John! Are you still debating about how you're doing? How long does it take?? Note over John: After a few more moments, John
finally snaps out of it. end alt either this Alice->>John: Yes else or this Alice->>John: No else or this will happen Alice->John: Maybe end par this happens in parallel Alice -->> Bob: Parallel message 1 and Alice -->> John: Parallel message 2 end

    sequenceDiagram
    participant 1 as multiline
using #lt;br#gt; participant 2 as multiline
using #lt;br/#gt; participant 3 as multiline
using #lt;br /#gt; participant 4 as multiline
using #lt;br /#gt; 1->>2: multiline
using #lt;br#gt; note right of 2: multiline
using #lt;br#gt; 2->>3: multiline
using #lt;br/#gt; note right of 3: multiline
using #lt;br/#gt; 3->>4: multiline
using #lt;br /#gt; note right of 4: multiline
using #lt;br /#gt; 4->>1: multiline
using #lt;br /#gt; note right of 1: multiline
using #lt;br /#gt;

    sequenceDiagram
    autonumber
    Alice->>John: Hello John,
how are you? autonumber 50 10 Alice->>John: John,
can you hear me? John-->>Alice: Hi Alice,
I can hear you! autonumber off John-->>Alice: I feel great!

mermaid-js-mermaid-9bb0ed2/demos/state.html000066400000000000000000000041071433273745700210050ustar00rootroot00000000000000 States Mermaid Quick Test Page

State diagram demos

		stateDiagram
		  accTitle: This is the accessible title
      accDescr:This is an accessible description
      State1 --> State2
    

		stateDiagram-v2
		  accTitle: This is the accessible title
      accDescr: This is an accessible description
      [*] --> Still
      Still --> [*]
      Still --> Moving
      Moving --> Still
      Moving --> Crash
      Crash --> [*]
    

    stateDiagram
      accTitle: very very simple state
    accDescr: This is a state diagram showing one state
    State1
    

    stateDiagram
    [*] --> First
    state First {
    [*] --> second
    second --> [*]
    }
    
    stateDiagram
    State1: The state with a note
    note right of State1
    Important information! You can write
    notes.
    end note
    State1 --> State2
    note left of State2 : This is the note to the left.
    
    stateDiagram
    State1
    note right of State1
    Line1
Line2
Line3
Line4
Line5 end note
mermaid-js-mermaid-9bb0ed2/docs/000077500000000000000000000000001433273745700166165ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/docs/.nojekyll000066400000000000000000000000001433273745700204340ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/docs/8.6.0_docs.md000066400000000000000000000244271433273745700206320ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Version 8.6.0 Changes ## [New Mermaid Live-Editor Beta](https://mermaid-js.github.io/docs/mermaid-live-editor-beta/#/edit/eyJjb2RlIjoiJSV7aW5pdDoge1widGhlbWVcIjogXCJmb3Jlc3RcIiwgXCJsb2dMZXZlbFwiOiAxIH19JSVcbmdyYXBoIFREXG4gIEFbQ2hyaXN0bWFzXSAtLT58R2V0IG1vbmV5fCBCKEdvIHNob3BwaW5nKVxuICBCIC0tPiBDe0xldCBtZSB0aGlua31cbiAgQyAtLT58T25lfCBEW0xhcHRvcF1cbiAgQyAtLT58VHdvfCBFW2lQaG9uZV1cbiAgQyAtLT58VGhyZWV8IEZbZmE6ZmEtY2FyIENhcl1cblx0XHQiLCJtZXJtYWlkIjp7InRoZW1lIjoiZGFyayJ9fQ) ## [CDN](https://unpkg.com/mermaid/) With version 8.6.0 comes the release of directives for mermaid, a new system for modifying configurations, with the aim of establishing centralized, sane defaults and simple implementation. `directives` allow for a single-use overwriting of `config`, as it has been discussed in [Configurations](./Setup.md). This allows site Diagram Authors to instantiate temporary modifications to `config` through the use of [Directives](), which are parsed before rendering diagram definitions. This allows the Diagram Authors to alter the appearance of the diagrams. **A likely application for this is in the creation of diagrams/charts inside company/organizational webpages, that rely on mermaid for diagram and chart rendering.** the `init` directive is the main method of configuration for Site and Current Levels. The three levels of are Configuration, Global, Site and Current. | Level of Configuration | Description | | ---------------------- | ----------------------------------- | | Global Configuration | Default Mermaid Configurations | | Site Configuration | Configurations made by site owner | | Current Configuration | Configurations made by Implementors | # Limits to Modifying Configurations **secure Array** | Parameter | Description | Type | Required | Values | | --------- | ------------------------------------------------ | ----- | -------- | -------------- | | secure | Array of parameters excluded from init directive | Array | Required | Any parameters | The modifiable parts of the Configuration are limited by the secure array, which is an array of immutable parameters, this array can be expanded by site owners. **Notes**: secure arrays work like nesting dolls, with the Global Configurations’ secure array holding the default and immutable list of immutable parameters, or the smallest doll, to which site owners may add to, but implementors may not modify it. # Secure Arrays Site owners can add to the **secure** array using this command: mermaidAPI.initialize( { startOnLoad: true, secure: \['parameter1', 'parameter2'] } ); Default values for the `secure array` consists of: \['secure', 'securityLevel', 'startOnLoad', 'maxTextSize']. These default values are immutable. Implementors can only modify configurations using directives, and cannot change the `secure` array. # Modifying Configurations and directives: The Two types of directives: are `init` (or `initialize`) and `wrap`. ```note All directives are enclosed in `%%{ }%%` ``` Older versions of mermaid will not parse directives because `%%` will comment out the directive. This makes the update backwards-compatible. # Init `init`, or `initialize`: this directive gives the user the ability to overwrite and change the values for any configuration parameters not set in the secure array. | Parameter | Description | Type | Required | Values | | --------- | ----------------------- | --------- | -------- | ----------------------------------------------- | | init | modifies configurations | Directive | Optional | Any parameters not included in the secure array | ```note init would be an argument-directive: `%%{init: { **insert argument here**}}%%` The json object that is passed as {**argument** } must be valid, quoted json or it will be ignored. **for example**: `%%{init: {"theme": "default", "logLevel": 1 }}%%` Configurations that are passed through init cannot change the parameters in a secure array at a higher level. In the event of a collision, mermaid will give priority to secure arrays and parse the request without changing the values of those parameters in conflict. When deployed within code, init is called before the graph/diagram description. ``` **for example**: ```mermaid-example %%{init: {"theme": "default", "logLevel": 1 }}%% graph LR a-->b b-->c c-->d d-->e e-->f f-->g g--> ``` ```mermaid %%{init: {"theme": "default", "logLevel": 1 }}%% graph LR a-->b b-->c c-->d d-->e e-->f f-->g g--> ``` # Wrap | Parameter | Description | Type | Required | Values | | --------- | ----------------------------- | --------- | -------- | ---------- | | wrap | a callable text-wrap function | Directive | Optional | %%{wrap}%% | ```note Wrap is a function that is currently only deployable for sequence diagrams. Wrap respects a manually added , so if the user wants to break up their text, they have full control over line breaks by adding tags. It is a non-argument directive and can be executed thusly: `%%{wrap}%%` . ``` **An example of text wrapping in a sequence diagram**: ![Image showing wrapped text](img/wrapped%20text.png) # Resetting Configurations: There are two more functions in the mermaidAPI that can be called by site owners: **reset** and **globalReset**. **reset**: resets the configuration to whatever the last configuration was. This can be done to undo more recent changes set from the last mermaidAPI.initialize({...}) configuration. **globalReset** will reset both the current configuration AND the site configuration back to the global defaults. **Notes**: Both `reset` and `globalReset` are only available to site owners, and as such implementors have to edit their configs using `init`. # Additional Utils to mermaid • **memoize**: simple caching for computationally expensive functions, reducing rendering time by about 90%. • **assignWithDepth** - an improvement on previous functions with config.js and `Object.assign`. The purpose of this function is to provide a sane mechanism for merging objects, similar to `object.assign`, but with depth. Example of **assignWithDepth**: ![Image showing assignWithDepth](img/assignWithDepth.png) Example of **object.Assign**: ![Image showing object.assign without depth](img/object.assign%20without%20depth.png) • **calculateTextDimensions**, **calculateTextWidth**, and **calculateTextHeight** - for measuring text dimensions, width and height. **Notes**: For more information on usage, parameters, and return info for these new functions take a look at the jsdocs for them in the utils package. # New API Requests Introduced in Version 8.6.0 ## setSiteConfig | Function | Description | Type | Values | Parameters | Returns | | --------------- | ------------------------------------- | ----------- | --------------------------------------- | ---------- | ---------- | | `setSiteConfig` | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | conf | siteConfig | ```note Sets the siteConfig. The siteConfig is a protected configuration for repeat use. Calls to reset() will reset the currentConfig to siteConfig. Calls to reset(configApi.defaultConfig) will reset siteConfig and currentConfig to the defaultConfig Note: currentConfig is set in this function。 Default value: will mirror Global Config ``` ## getSiteConfig | Function | Description | Type | Values | | --------------- | --------------------------------------------------- | ----------- | ---------------------------------- | | `getSiteConfig` | Returns the current `siteConfig` base configuration | Get Request | Returns Any Values in `siteConfig` | ```note Returns any values in siteConfig. ``` ## setConfig | Function | Description | Type | Values | Parameters | Returns | | ----------- | ------------------------------------------ | ----------- | --------------------------------- | ---------- | ---------------------------------------------- | | `setConfig` | Sets the `currentConfig` to desired values | Put Request | Any Values, those in secure array | conf | `currentConfig` merged with the sanitized conf | ```note Sets the currentConfig. The parameter conf is sanitized based on the siteConfig.secure keys. Any values found in conf with key found in siteConfig.secure will be replaced with the corresponding siteConfig value. ``` ## getConfig | Function | Description | Type | Return Values | | ----------- | --------------------------- | ----------- | ------------------------------- | | `getConfig` | Obtains the `currentConfig` | Get Request | Any Values from `currentConfig` | ```note Returns any values in currentConfig. ``` ## sanitize | Function | Description | Type | Values | | ---------- | ---------------------------------------- | -------------- | ------ | | `sanitize` | Sets the `siteConfig` to desired values. | Put Request(?) | None | ```note modifies options in-place Ensures options parameter does not attempt to override siteConfig secure keys. ``` ## reset | Function | Description | Type | Required | Values | Parameter | | -------- | ------------------------------ | ----------- | -------- | ------ | --------- | | `reset` | Resets `currentConfig` to conf | Put Request | Required | None | conf | ## conf | Parameter | Description | Type | Required | Values | | --------- | ------------------------------------------------------------ | ---------- | -------- | -------------------------------------------- | | `conf` | base set of values, which `currentConfig` could be reset to. | Dictionary | Required | Any Values, with respect to the secure Array | ```note default: current siteConfig (optional, default `getSiteConfig()`) ``` ## For more information, read [Setup](Setup.md). mermaid-js-mermaid-9bb0ed2/docs/CHANGELOG.md000066400000000000000000002073761433273745700204460ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Change Log All changes are in descending order, beginning with the newest (latest) version. ## Unreleased [Full Changelog](https://github.com/knsv/mermaid/compare/8.7.0...HEAD) ## 8.7.0 (2020-08-09) 🔖 [Release Notes](https://github.com/mermaid-js/mermaid/releases/tag/8.7.0) | 📜 [Full Changelog](https://github.com/mermaid-js/mermaid/compare/8.6.0...8.7.0) This version brings with it a system for [dynamic and integrated configuration of the diagram themes](./theming.md). The objective of this is to increase the customizability of mermaid and the ease of Styling, with the customization of themes through the `%%init%%` directive and `initialize` calls. Themes follow and build upon the Levels of Configuration and employ `directives` to modify and create custom configurations, as they were introduced in Version [8.6.0](../getting-started/8.6.0_docs.md). **These Theming Configurations, similar to directives, will also be made applicable in the Live-Editor, for easier styling.** ### Site-wide Themes Site-wide themes are still declared via `initialize` by site owners. Example of `Initalize` call setting `theme` to `base`: ```javascript mermaidAPI.initialize({ securityLevel: 'loose', theme: 'base', }); ``` **Notes**: Only site owners can use the `mermaidAPI.initialize` call, to set values. Site-Users will have to use `%%init%%` to modify or create the theme for their diagrams. ### Themes at the Local or Current Level When Generating a diagram using on a webpage that supports mermaid. It is also possible to override site-wide theme settings locally, for a specific diagram, using directives, as long as it is not prohibited by the `secure` array. **Following is an example:** ```mermaid-example %%{init: {'theme':'base'}}%% graph TD a --> b ``` ```mermaid %%{init: {'theme':'base'}}%% graph TD a --> b ``` ### Making a Custom Theme with `themeVariables` The easiest way to make a custom theme is to start with the base theme, and just modify theme variables through `themeVariables`, via `%%init%%`. | Parameter | Description | Type | Required | Objects contained | | -------------- | ------------------------------------------------------------------ | ----- | -------- | ---------------------------------- | | themeVariables | Array containing objects, modifiable with the `%%init%%` directive | Array | Required | primaryColor, lineColor, textColor | Here is an example of overriding `primaryColor` and giving everything a different look, using `%%init%%`. ```mermaid-example %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` **Notes:** Leaving it empty will set all variable values to default. ## 8.6.0 (2020-07-13) 🔖 [Release Notes](https://github.com/mermaid-js/mermaid/releases/tag/8.6.0) [Version 8.6.0](../getting-started/8.6.0_docs.md) introduces New Configuration Protocols and Directives and a Beta for the [New Mermaid Live-Editor](https://mermaid-js.github.io/docs/mermaid-live-editor-beta/#/edit/eyJjb2RlIjoiJSV7aW5pdDoge1widGhlbWVcIjogXCJmb3Jlc3RcIiwgXCJsb2dMZXZlbFwiOiAxIH19JSVcbmdyYXBoIFREXG4gIEFbQ2hyaXN0bWFzXSAtLT58R2V0IG1vbmV5fCBCKEdvIHNob3BwaW5nKVxuICBCIC0tPiBDe0xldCBtZSB0aGlua31cbiAgQyAtLT58T25lfCBEW0xhcHRvcF1cbiAgQyAtLT58VHdvfCBFW2lQaG9uZV1cbiAgQyAtLT58VGhyZWV8IEZbZmE6ZmEtY2FyIENhcl1cblx0XHQiLCJtZXJtYWlkIjp7InRoZW1lIjoiZGFyayJ9fQ) **With version 8.6.0 comes the release of directives for mermaid, a new system for modifying configurations, with the aim of establishing centralized, sane defaults and simple implementation.** Directives allow for a diagram specific overriding of config, as it has been discussed in Configurations. This allows site users to input modifications to config alongside diagram definitions, when creating diagrams on a private webpage that supports Mermaid. ## 8.5.0 (2020-04-11) 🔖 [Release Notes](https://github.com/mermaid-js/mermaid/releases/tag/untagged-31c93788afe260d914bb) This version introduces New diagrams! **New diagrams in 8.5** With version 8.5 there are some bug fixes and enhancements, plus a new diagram type, entity relationship diagrams. ![Image showing the new ER diagram type](./img/er.png) ## 8.2.0 (2019-07-17) 🏷️ [Tag](https://github.com/mermaid-js/mermaid/tree/8.2.0) Version 8.2.0, introduces a security improvement. A `securityLevel` configuration has to first be cleared, `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduced in version 8.2 as a security improvement, aimed at preventing malicious use. ### securityLevel | Parameter | Description | Type | Required | Values | | ------------- | --------------------------------- | ------ | -------- | ------------------------- | | securitylevel | Level of trust for parsed diagram | String | Required | Strict, Loose, antiscript | **Notes:** - **strict**: (**default**) tags in text are encoded, click functionality is disabled - **loose**: tags in text are allowed, click functionality is enabled - **antiscript**: html tags in text are allowed, (only script element is removed), click functionality is enabled ⚠️ **Note**: This changes the default behaviour of mermaid so that after upgrade to 8.2, if the `securityLevel` is not configured, tags in flowcharts are encoded as tags and clicking is prohibited. If you are taking responsibility for the diagram source security you can set the `securityLevel` to a value of your choosing. By doing this clicks and tags are again allowed. ### To change `securityLevel` with `mermaidAPI.initialize`: ```javascript mermaidAPI.initialize({ securityLevel: 'loose', }); ``` **Closed issues:** - please add tag for 8.0.0 release [#863](https://github.com/knsv/mermaid/issues/863) - classDiagram breaks on any edit [#858](https://github.com/knsv/mermaid/issues/858) ## [8.1.0](https://github.com/knsv/mermaid/tree/8.1.0) (2019-06-25) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.5...8.1.0) **Implemented enhancements:** - Theme for dark background [#301](https://github.com/knsv/mermaid/issues/301) - \[Feature request] gantt diagram axis format [#269](https://github.com/knsv/mermaid/issues/269) - Implement render function for server side rendering using phantomjs [#169](https://github.com/knsv/mermaid/issues/169) **Fixed bugs:** - mermaid -v filename.mmd gives You must specify at least one source file. [#328](https://github.com/knsv/mermaid/issues/328) - Not Able to See Labels even htmlLabels:false added [#268](https://github.com/knsv/mermaid/issues/268) **Closed issues:** - Gantt and sequence diagram do not render [#853](https://github.com/knsv/mermaid/issues/853) - margins around flowchart are not balanced [#852](https://github.com/knsv/mermaid/issues/852) - Smaller bundles [#843](https://github.com/knsv/mermaid/issues/843) - unicode in labels [#776](https://github.com/knsv/mermaid/issues/776) - Hard-changing drawing of arrows per edge type [#775](https://github.com/knsv/mermaid/issues/775) - SequenceDiagram wrong [#773](https://github.com/knsv/mermaid/issues/773) - Render mermaid on github pages with simple code [#772](https://github.com/knsv/mermaid/issues/772) - FlowChart - large space between text and the image [#754](https://github.com/knsv/mermaid/issues/754) - Class Diagram Issues when using Mermaid in Stackedit [#748](https://github.com/knsv/mermaid/issues/748) - Multi-platform CI [#744](https://github.com/knsv/mermaid/issues/744) - gantt: sections can't have a colon [#742](https://github.com/knsv/mermaid/issues/742) - Yarn build does not add mermaid.min.css to dist [#732](https://github.com/knsv/mermaid/issues/732) - Is there a grammar / keyword / more than just the basic examples? [#718](https://github.com/knsv/mermaid/issues/718) - Click event and react component [#717](https://github.com/knsv/mermaid/issues/717) - Long text going outside the box [#706](https://github.com/knsv/mermaid/issues/706) - How to migrate from yUML to mermaid? [#704](https://github.com/knsv/mermaid/issues/704) - Issue on Dynamic Creation in PHP [#690](https://github.com/knsv/mermaid/issues/690) - `click "\#target"` and `click "http://url"` should create regular links [#689](https://github.com/knsv/mermaid/issues/689) - Support Chinese punctuation [#687](https://github.com/knsv/mermaid/issues/687) - \[Question] Proper way to install on Mac? [#681](https://github.com/knsv/mermaid/issues/681) - Has Mermaid a graphical interface to make diagrams? [#668](https://github.com/knsv/mermaid/issues/668) - mermaid installation on debian [#649](https://github.com/knsv/mermaid/issues/649) - "Cannot activate" in sequenceDiagram [#647](https://github.com/knsv/mermaid/issues/647) - Link ("click" statement) in flowchart does not work in exported SVG [#646](https://github.com/knsv/mermaid/issues/646) - How to pass styling [#639](https://github.com/knsv/mermaid/issues/639) - The live editor cant show seq diagram with notes for 8.0.0-alpha.3 [#638](https://github.com/knsv/mermaid/issues/638) - import mermaid.css with ES6 + NPM [#634](https://github.com/knsv/mermaid/issues/634) - Actor line cuts through other elements [#633](https://github.com/knsv/mermaid/issues/633) - Graph TD line out of the picture (left side) [#630](https://github.com/knsv/mermaid/issues/630) - Flowchart labels appear "cutoff" [#628](https://github.com/knsv/mermaid/issues/628) - Uncaught TypeError: \_.constant is not a function (mermaid.js) [#626](https://github.com/knsv/mermaid/issues/626) - Missing tags and releases for newer versions [#623](https://github.com/knsv/mermaid/issues/623) - Mermaid and Leo / Leo Vue [#622](https://github.com/knsv/mermaid/issues/622) - mermaidAPI gantt Vue.js [#621](https://github.com/knsv/mermaid/issues/621) - Gantt sections are not separated by colors - Fix: set numberSectionStyles to 4 instead of 3 [#620](https://github.com/knsv/mermaid/issues/620) - how to get mermaidAPI? [#617](https://github.com/knsv/mermaid/issues/617) - Error in startOnLoad documentation? [#616](https://github.com/knsv/mermaid/issues/616) - Example export to SVG generates error [#614](https://github.com/knsv/mermaid/issues/614) - The new online editor does not support previously generated links [#613](https://github.com/knsv/mermaid/issues/613) - Grammar / Syntax documentation for flowcharts [#607](https://github.com/knsv/mermaid/issues/607) - Mermaid does not work with d3.js [#606](https://github.com/knsv/mermaid/issues/606) - Why does this code's flowchart lines get cut-off on screen? [#604](https://github.com/knsv/mermaid/issues/604) - click keyword does not fire my callback (on the demo Website too) [#603](https://github.com/knsv/mermaid/issues/603) - Online Editor fails to show exported SVG [#601](https://github.com/knsv/mermaid/issues/601) - Just saying thanks! [#597](https://github.com/knsv/mermaid/issues/597) - stylesheet crashed with other library like abcjs [#596](https://github.com/knsv/mermaid/issues/596) - Missing connection [#594](https://github.com/knsv/mermaid/issues/594) - How to use mermaid on node.js restful api? [#593](https://github.com/knsv/mermaid/issues/593) - Remove status code [#589](https://github.com/knsv/mermaid/issues/589) - Golang based editor [#588](https://github.com/knsv/mermaid/issues/588) - sequenceDiagram -> notetext css font is hardcoded [#587](https://github.com/knsv/mermaid/issues/587) - Multiple graph in the live editor [#586](https://github.com/knsv/mermaid/issues/586) - All \ elements in page are colored black [#584](https://github.com/knsv/mermaid/issues/584) - Styling: classes aren't applied to elements. [#582](https://github.com/knsv/mermaid/issues/582) - Rounded connections [#580](https://github.com/knsv/mermaid/issues/580) - Arrows are not being shown correctly in the dark theme [#578](https://github.com/knsv/mermaid/issues/578) - The documentation for CLI seems outdated. [#572](https://github.com/knsv/mermaid/issues/572) - No effect of click event:can not open link [#571](https://github.com/knsv/mermaid/issues/571) - Text colors are not correct in VSCODE [#570](https://github.com/knsv/mermaid/issues/570) - Nodes aren't aligned properly (just need an explanation) [#568](https://github.com/knsv/mermaid/issues/568) - setting margin around figure in R [#567](https://github.com/knsv/mermaid/issues/567) - Arrows should Come out in upward and Downward direction from decision Node [#566](https://github.com/knsv/mermaid/issues/566) - TypeError: Cannot read property 'select' of undefined [#563](https://github.com/knsv/mermaid/issues/563) - A little bug [#557](https://github.com/knsv/mermaid/issues/557) - Japanese text appears garbled [#554](https://github.com/knsv/mermaid/issues/554) - classdiagram not works in mermaid live_editor [#553](https://github.com/knsv/mermaid/issues/553) - font awesome in link text? [#546](https://github.com/knsv/mermaid/issues/546) - q: heard of the cosmogol standard? [#545](https://github.com/knsv/mermaid/issues/545) - Arrow heads missing (cli, 7.0.3) [#544](https://github.com/knsv/mermaid/issues/544) - No Edge Boxes if useHtmlLabels=false [#541](https://github.com/knsv/mermaid/issues/541) - how to change mermaid text color or line text block color? [#534](https://github.com/knsv/mermaid/issues/534) - FlowChart visualization broken when downloading from live editor [#533](https://github.com/knsv/mermaid/issues/533) - Can't get flowchart to render paths at the top of the diagram; I even tried the online editor and that shows the same issue. Thoughts? [#532](https://github.com/knsv/mermaid/issues/532) - live editor make browser(safari on macOS\&iOS) not longer respond [#531](https://github.com/knsv/mermaid/issues/531) - css classes need a prefix/namespace [#527](https://github.com/knsv/mermaid/issues/527) - input activate/deactivate cause safari unresponding [#521](https://github.com/knsv/mermaid/issues/521) - Cannot Render the Mermaid Graph to PDF ? [#520](https://github.com/knsv/mermaid/issues/520) - clicking links works from inset in subgraph but not from nodes [#516](https://github.com/knsv/mermaid/issues/516) - Strange syntax error - when importing mermaid.js [#515](https://github.com/knsv/mermaid/issues/515) - gantt x-axis display [#510](https://github.com/knsv/mermaid/issues/510) - phantomjs renamed to phantomjs-prebuilt [#508](https://github.com/knsv/mermaid/issues/508) - issue when using sphinxcontrib-mermaid extension for sphinx [#507](https://github.com/knsv/mermaid/issues/507) - layout of docs page looks broken [#504](https://github.com/knsv/mermaid/issues/504) - Problem showing graph with php on localhost [#502](https://github.com/knsv/mermaid/issues/502) - logLevel's option doesn't work at 7.0.0 [#501](https://github.com/knsv/mermaid/issues/501) - How do I get the log for a render or parse attempt? [#500](https://github.com/knsv/mermaid/issues/500) - Mermaid neutral style style to built in latest release [#499](https://github.com/knsv/mermaid/issues/499) - Any plans for adding a typescript definition file? [#495](https://github.com/knsv/mermaid/issues/495) - Gantt diagrams too narrow [#493](https://github.com/knsv/mermaid/issues/493) - Flowchart edge labels placement [#490](https://github.com/knsv/mermaid/issues/490) - Very different styles when rendering as png vs. svg [#489](https://github.com/knsv/mermaid/issues/489) - New editor that supports mermaid: Caret [#488](https://github.com/knsv/mermaid/issues/488) - Gant PNG margin [#486](https://github.com/knsv/mermaid/issues/486) - ReferenceError: window is not defined [#485](https://github.com/knsv/mermaid/issues/485) - Menu and layout bugs in docs [#484](https://github.com/knsv/mermaid/issues/484) - Mermaid resets some of the page CSS styles [#482](https://github.com/knsv/mermaid/issues/482) - Arrows rendering incorrectly in online editor [#480](https://github.com/knsv/mermaid/issues/480) - CSS stroke-dasharray ignored by browsers but not other viewers [#474](https://github.com/knsv/mermaid/issues/474) - mermaid - Browser Support issue [#472](https://github.com/knsv/mermaid/issues/472) - Totally love mermaid I might pop! [#471](https://github.com/knsv/mermaid/issues/471) - Sequence Diagram: Missing x on async arrows (png) [#469](https://github.com/knsv/mermaid/issues/469) - live editor: the svg file rendered from graph is not supported by browsers [#468](https://github.com/knsv/mermaid/issues/468) - Not found css [#462](https://github.com/knsv/mermaid/issues/462) - Phantomjs Dependency [#461](https://github.com/knsv/mermaid/issues/461) - Mermaid cli not working for subgraphs [#459](https://github.com/knsv/mermaid/issues/459) - Support for notes across multiple participants? [#458](https://github.com/knsv/mermaid/issues/458) - Related to Issue #329: Phantomjs issues. [#455](https://github.com/knsv/mermaid/issues/455) - Add a click style [#426](https://github.com/knsv/mermaid/issues/426) - Add Parallel block (par) to sequence diagrams [#425](https://github.com/knsv/mermaid/issues/425) - updating shapes after the flow chart rendering complete [#424](https://github.com/knsv/mermaid/issues/424) - can't catch parse error Maximum call stack size exceeded on safari [#421](https://github.com/knsv/mermaid/issues/421) - Arrows endings are missing [#419](https://github.com/knsv/mermaid/issues/419) - shouldn't mermaid become more like Markdown ? [#417](https://github.com/knsv/mermaid/issues/417) - Live editor show rendered diagram if syntax invalid [#415](https://github.com/knsv/mermaid/issues/415) - Linkstyle stroke does not work [#410](https://github.com/knsv/mermaid/issues/410) - flowchart id's with dots in them .. break links [#408](https://github.com/knsv/mermaid/issues/408) - Flowchart: Link text beginning with lowercase 'o' causes flowchart to break [#407](https://github.com/knsv/mermaid/issues/407) - Some Chinese character will case Safari no responding. [#405](https://github.com/knsv/mermaid/issues/405) - Cannot center-justify text in nodes? [#397](https://github.com/knsv/mermaid/issues/397) - Edge labels should have white background in live editor [#396](https://github.com/knsv/mermaid/issues/396) - Live editor does not support activate/deactivate [#394](https://github.com/knsv/mermaid/issues/394) - Styling subgraph? [#391](https://github.com/knsv/mermaid/issues/391) - Update live editor to version 6.0.0 [#387](https://github.com/knsv/mermaid/issues/387) - sequence diagram config issue [#385](https://github.com/knsv/mermaid/issues/385) - How to add newline in the text [#384](https://github.com/knsv/mermaid/issues/384) - PhantomJS crashes on a large graph [#380](https://github.com/knsv/mermaid/issues/380) - Finnish support for class diagrams using plantuml syntax [#377](https://github.com/knsv/mermaid/issues/377) - mermaidAPI.render generated different svg code from mermaid.int() [#374](https://github.com/knsv/mermaid/issues/374) - Put your own action on the chart [#372](https://github.com/knsv/mermaid/issues/372) - when declaring participants the elements are generated twice [#370](https://github.com/knsv/mermaid/issues/370) - Example Flowchart is cut in display (Chrome). [#368](https://github.com/knsv/mermaid/issues/368) - Add shebang support to diagrams [#365](https://github.com/knsv/mermaid/issues/365) - Silencing CLI output [#352](https://github.com/knsv/mermaid/issues/352) - SequenceDiagram: 3+ Alternative Paths [#348](https://github.com/knsv/mermaid/issues/348) - Smaller height of actor boxes [#342](https://github.com/knsv/mermaid/issues/342) - Question: lib/phantomscript.js - foreignObjects in SVG - related to #58 [#340](https://github.com/knsv/mermaid/issues/340) - npm test fails on osx being blocked at Can not load "PhantomJS", it is not registered! [#337](https://github.com/knsv/mermaid/issues/337) - Tabs & subgraphs cause rendering error [#336](https://github.com/knsv/mermaid/issues/336) - Display question: right angles [#335](https://github.com/knsv/mermaid/issues/335) - No Arrows rendered v0.5.8 [#330](https://github.com/knsv/mermaid/issues/330) - You had errors in your syntax. Use --help for further information. [#327](https://github.com/knsv/mermaid/issues/327) - Allow alternate arrow syntax that doesn't close html comments [#322](https://github.com/knsv/mermaid/issues/322) - Comment in subgraph [#319](https://github.com/knsv/mermaid/issues/319) - Update graph [#311](https://github.com/knsv/mermaid/issues/311) - css conflicts with boostrap's css [#308](https://github.com/knsv/mermaid/issues/308) - Can not get click event to fire. [#306](https://github.com/knsv/mermaid/issues/306) - Fix phantomjs2 compatibility [#304](https://github.com/knsv/mermaid/issues/304) - Flowcharts do not work in native IE11 [#303](https://github.com/knsv/mermaid/issues/303) - Integration with remark.js - tutorial added [#302](https://github.com/knsv/mermaid/issues/302) - Sequence diagram Loops: changing boxMargin spoils the "loop" notation [#299](https://github.com/knsv/mermaid/issues/299) - src/mermaid.js generates bad code [#297](https://github.com/knsv/mermaid/issues/297) - Fresh fork: jasmine tests fail [#294](https://github.com/knsv/mermaid/issues/294) - CSS clash [#292](https://github.com/knsv/mermaid/issues/292) - Mermaid does not work in Chrome 48 [#281](https://github.com/knsv/mermaid/issues/281) - circle and ellipse cannot change color by classDef [#271](https://github.com/knsv/mermaid/issues/271) - npm run watch doesn't work due missing dependencies [#266](https://github.com/knsv/mermaid/issues/266) - label out of node [#262](https://github.com/knsv/mermaid/issues/262) - IE11 Support issue [#261](https://github.com/knsv/mermaid/issues/261) - mermaid without browser [#260](https://github.com/knsv/mermaid/issues/260) - Insufficient capacity of gantt diagrams [#226](https://github.com/knsv/mermaid/issues/226) - some WARN about installation [#222](https://github.com/knsv/mermaid/issues/222) - Live editor offline access [#217](https://github.com/knsv/mermaid/issues/217) - suggest: code highlight mode config for editors [#212](https://github.com/knsv/mermaid/issues/212) - Uncaught RangeError: Maximum call stack size exceeded [#189](https://github.com/knsv/mermaid/issues/189) - Styling label texts [#50](https://github.com/knsv/mermaid/issues/50) **Merged pull requests:** - Remove console.log in classDB. [#861](https://github.com/knsv/mermaid/pull/861) ([Arthaey](https://github.com/Arthaey)) - Bump sshpk from 1.13.1 to 1.16.1 [#851](https://github.com/knsv/mermaid/pull/851) ([dependabot\[bot\]](https://github.com/apps/dependabot)) - Significantly smaller bundles [#850](https://github.com/knsv/mermaid/pull/850) ([fabiospampinato](https://github.com/fabiospampinato)) - Support styling of subgraphs [#845](https://github.com/knsv/mermaid/pull/845) ([Qix-](https://github.com/Qix-)) - fix dark theme loop labels not visible [#837](https://github.com/knsv/mermaid/pull/837) ([jnnnnn](https://github.com/jnnnnn)) - fix draw function can only call once [#832](https://github.com/knsv/mermaid/pull/832) ([vaniship](https://github.com/vaniship)) - Fix dotted lines not appearing in flowcharts when HTML labels disabled [#828](https://github.com/knsv/mermaid/pull/828) ([stanhu](https://github.com/stanhu)) - Fix issue with XML line breaks inside vertex labels [#824](https://github.com/knsv/mermaid/pull/824) ([jsyang](https://github.com/jsyang)) - fixed diagrams [#810](https://github.com/knsv/mermaid/pull/810) ([0xflotus](https://github.com/0xflotus)) - Clickable gantt tasks [#804](https://github.com/knsv/mermaid/pull/804) ([abzicht](https://github.com/abzicht)) - linkStyle now supports list of indexes with a few tests [#798](https://github.com/knsv/mermaid/pull/798) ([ivan-danilov](https://github.com/ivan-danilov)) - fix class diagram mermaid [#795](https://github.com/knsv/mermaid/pull/795) ([DanShai](https://github.com/DanShai)) - Added exclude weekdays to definition [#792](https://github.com/knsv/mermaid/pull/792) ([jopapo](https://github.com/jopapo)) - SVG link rendering [#791](https://github.com/knsv/mermaid/pull/791) ([flying-sheep](https://github.com/flying-sheep)) - Gantt milestones [#788](https://github.com/knsv/mermaid/pull/788) ([gijswijs](https://github.com/gijswijs)) - Remove duplicate code [#768](https://github.com/knsv/mermaid/pull/768) ([znxkznxk1030](https://github.com/znxkznxk1030)) - Render nodes as real links [#765](https://github.com/knsv/mermaid/pull/765) ([flying-sheep](https://github.com/flying-sheep)) - Fix issue with marker-end. [#757](https://github.com/knsv/mermaid/pull/757) ([gjlubbertsen](https://github.com/gjlubbertsen)) - Make Class Diagrams usable in Stackedit and Live Editor [#749](https://github.com/knsv/mermaid/pull/749) ([monsterkrampe](https://github.com/monsterkrampe)) - Adding trapezoid and inverse trapezoid vertex options. [#741](https://github.com/knsv/mermaid/pull/741) ([adamwulf](https://github.com/adamwulf)) - Add option for right angles [#721](https://github.com/knsv/mermaid/pull/721) ([paulbland](https://github.com/paulbland)) - Add nested activation classes [#720](https://github.com/knsv/mermaid/pull/720) ([paulbland](https://github.com/paulbland)) - wip: class diagram cardinality display [#705](https://github.com/knsv/mermaid/pull/705) ([Vrixyz](https://github.com/Vrixyz)) - add comments about CSS in config [#688](https://github.com/knsv/mermaid/pull/688) ([imma90](https://github.com/imma90)) - SequenceDiagram: Add support for multiple alt else statements [#641](https://github.com/knsv/mermaid/pull/641) ([sechel](https://github.com/sechel)) - fix #426 - add class .clickable on nodes with click function or link [#598](https://github.com/knsv/mermaid/pull/598) ([thomasleveil](https://github.com/thomasleveil)) - Spec fix 1 [#595](https://github.com/knsv/mermaid/pull/595) ([frankschmitt](https://github.com/frankschmitt)) ## [7.0.5](https://github.com/knsv/mermaid/tree/7.0.5) (2017-09-01) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.3...7.0.5) **Closed issues:** - live editor latin error after update [#560](https://github.com/knsv/mermaid/issues/560) - Simple full example in online documentation is broken [#558](https://github.com/knsv/mermaid/issues/558) - Graph No Arrow Head v7.0.3 [#543](https://github.com/knsv/mermaid/issues/543) - Conflict while using mermaid along with core-js [#512](https://github.com/knsv/mermaid/issues/512) - Export to pdf on website [#496](https://github.com/knsv/mermaid/issues/496) - New downstream project: Mermaid Preview for VSCode [#442](https://github.com/knsv/mermaid/issues/442) - Can't Zoom the flowchart ? [#399](https://github.com/knsv/mermaid/issues/399) - line labels are not rendered correctly in live editor [#366](https://github.com/knsv/mermaid/issues/366) - mermaid-loader [#361](https://github.com/knsv/mermaid/issues/361) - Are there any documentation or examples for classDiagram and gitGraph? [#359](https://github.com/knsv/mermaid/issues/359) - \# character broken in 0.5.8 [#347](https://github.com/knsv/mermaid/issues/347) - Documentation issue: CSS example is not visible [#345](https://github.com/knsv/mermaid/issues/345) - Include documentation for command line usage [#326](https://github.com/knsv/mermaid/issues/326) - Fresh fork: can't build dist [#296](https://github.com/knsv/mermaid/issues/296) - Invalid value for \ attribute viewBox="0 0 -Infinity -Infinity" [#291](https://github.com/knsv/mermaid/issues/291) - Webpack require fails [#277](https://github.com/knsv/mermaid/issues/277) - New documentation - need improved logo [#216](https://github.com/knsv/mermaid/issues/216) ## [7.0.3](https://github.com/knsv/mermaid/tree/7.0.3) (2017-06-04) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.2...7.0.3) **Closed issues:** - the documentation website is down [#539](https://github.com/knsv/mermaid/issues/539) - Good example of interactivity with mermaidAPI [#514](https://github.com/knsv/mermaid/issues/514) ## [7.0.2](https://github.com/knsv/mermaid/tree/7.0.2) (2017-06-01) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.0...7.0.2) **Closed issues:** - CDN is not working [#511](https://github.com/knsv/mermaid/issues/511) - A sampe sequenceDiagram crashes mermaid-cli [#492](https://github.com/knsv/mermaid/issues/492) - Mermaid doesn't delete nodes when called multiple times [#491](https://github.com/knsv/mermaid/issues/491) - API crashes on 2nd render() call [#478](https://github.com/knsv/mermaid/issues/478) - sequenceDiagram: dotted line for alt and empty bracket should be hidden [#456](https://github.com/knsv/mermaid/issues/456) - SVG output (almost) not correct [#434](https://github.com/knsv/mermaid/issues/434) - How to set axisFormatter of gantt in mermaid CLI? [#428](https://github.com/knsv/mermaid/issues/428) - customizing link style with any color sets `fill` property to `black` instead of `none` [#416](https://github.com/knsv/mermaid/issues/416) - New line at the end of SVG file [#400](https://github.com/knsv/mermaid/issues/400) - CLI doesn't work [#389](https://github.com/knsv/mermaid/issues/389) - Can't render subgraphs with htmlLabels: false [#367](https://github.com/knsv/mermaid/issues/367) - Color arrowhead [#362](https://github.com/knsv/mermaid/issues/362) - CLI: Invisible text, lines in SVG output [#341](https://github.com/knsv/mermaid/issues/341) **Merged pull requests:** - Support Multi-line Actor Descriptions [#764](https://github.com/knsv/mermaid/pull/764) ([watsoncj](https://github.com/watsoncj)) - Update Travis config [#538](https://github.com/knsv/mermaid/pull/538) ([tylerlong](https://github.com/tylerlong)) - Fix spelling of 'you' in sequenceDiagram docs [#537](https://github.com/knsv/mermaid/pull/537) ([ctruelson](https://github.com/ctruelson)) - Improve CLI output [#536](https://github.com/knsv/mermaid/pull/536) ([gibson042](https://github.com/gibson042)) - Modernize mermaid [#524](https://github.com/knsv/mermaid/pull/524) ([tylerlong](https://github.com/tylerlong)) - Modernize mermaid [#519](https://github.com/knsv/mermaid/pull/519) ([tylerlong](https://github.com/tylerlong)) - Update CLI instructions [#509](https://github.com/knsv/mermaid/pull/509) ([filipedeschamps](https://github.com/filipedeschamps)) - Add style for classDiagram to dark/default theme [#503](https://github.com/knsv/mermaid/pull/503) ([yudenzel](https://github.com/yudenzel)) - Fix documentation for git graph. [#498](https://github.com/knsv/mermaid/pull/498) ([gomlgs](https://github.com/gomlgs)) - Fix links in documentations [#497](https://github.com/knsv/mermaid/pull/497) ([saveman71](https://github.com/saveman71)) - Update README.md with git graph sample [#481](https://github.com/knsv/mermaid/pull/481) ([raghur](https://github.com/raghur)) - Fix misspelling of “another” [#479](https://github.com/knsv/mermaid/pull/479) ([stevenschobert](https://github.com/stevenschobert)) - Fixed #456 sequenceDiagram: dotted line for alt and empty bracket sho… [#477](https://github.com/knsv/mermaid/pull/477) ([brookhong](https://github.com/brookhong)) - Add viewbox attr to class diagram [#473](https://github.com/knsv/mermaid/pull/473) ([gnkm](https://github.com/gnkm)) - add par statement to sequenceDiagram [#470](https://github.com/knsv/mermaid/pull/470) ([u-minor](https://github.com/u-minor)) ## [7.0.0](https://github.com/knsv/mermaid/tree/7.0.0) (2017-01-29) [Full Changelog](https://github.com/knsv/mermaid/compare/6.0.0...7.0.0) **Implemented enhancements:** - npm install -g mermaid does not install phantomjs [#329](https://github.com/knsv/mermaid/issues/329) - activation boxes [#313](https://github.com/knsv/mermaid/issues/313) **Closed issues:** - demos on io site not working [#466](https://github.com/knsv/mermaid/issues/466) - Can not be generated PNG pictures through CLI with Chinese [#451](https://github.com/knsv/mermaid/issues/451) - Round nodes cannot be styled with CSS classes [#443](https://github.com/knsv/mermaid/issues/443) - webpack gulp UglifyJsPlugin error. [#440](https://github.com/knsv/mermaid/issues/440) - String concatenation isn't working [#432](https://github.com/knsv/mermaid/issues/432) - text flow/wrap in actor box of sequence diagram [#422](https://github.com/knsv/mermaid/issues/422) - Online live editor still use old version [#402](https://github.com/knsv/mermaid/issues/402) - uncaught TypeError: t.getTransformToElement is not a function [#401](https://github.com/knsv/mermaid/issues/401) - Only works when using browserify'd code [#373](https://github.com/knsv/mermaid/issues/373) - document the use of shebang line in mmd files [#364](https://github.com/knsv/mermaid/issues/364) - Diagrams are small and unreadable in IE 11 - since 0.5.1 [#356](https://github.com/knsv/mermaid/issues/356) - \[Feature Request] ER-Diagram Support [#354](https://github.com/knsv/mermaid/issues/354) - The need for mermaid.css should be mentioned explicitly in the intro docs... [#273](https://github.com/knsv/mermaid/issues/273) **Merged pull requests:** - Update index.html [#465](https://github.com/knsv/mermaid/pull/465) ([bmsleight](https://github.com/bmsleight)) - Fix for #416, customizing link style with any color sets `fill` property to `black` instead of `none` [#452](https://github.com/knsv/mermaid/pull/452) ([joshuacolvin](https://github.com/joshuacolvin)) - Allow .node>circle to receive css styles [#449](https://github.com/knsv/mermaid/pull/449) ([bfriedz](https://github.com/bfriedz)) - Fix spelling [#447](https://github.com/knsv/mermaid/pull/447) ([jawn](https://github.com/jawn)) - added tests and fix cli css style selector lowercase problem [#445](https://github.com/knsv/mermaid/pull/445) ([whyzdev](https://github.com/whyzdev)) - Update d3.js [#441](https://github.com/knsv/mermaid/pull/441) ([hetz](https://github.com/hetz)) - added tests to reproduce #434 in flowchart [#439](https://github.com/knsv/mermaid/pull/439) ([whyzdev](https://github.com/whyzdev)) - Code Climate config [#437](https://github.com/knsv/mermaid/pull/437) ([larkinscott](https://github.com/larkinscott)) - fix gantt and sequence digram cli cfg [#435](https://github.com/knsv/mermaid/pull/435) ([whyzdev](https://github.com/whyzdev)) - fix gantt chart cli configuration broken [#433](https://github.com/knsv/mermaid/pull/433) ([whyzdev](https://github.com/whyzdev)) - fix gantt chart cli configuration parsing including functions [#430](https://github.com/knsv/mermaid/pull/430) ([whyzdev](https://github.com/whyzdev)) - Uses an empty text node instead of a string for svg group labels [#429](https://github.com/knsv/mermaid/pull/429) ([daveaglick](https://github.com/daveaglick)) - use tspan via d3.textwrap to place actor text in sequence diagram [#427](https://github.com/knsv/mermaid/pull/427) ([whyzdev](https://github.com/whyzdev)) - \#422 use foreignObject/div to place actor label in sequence diagram [#423](https://github.com/knsv/mermaid/pull/423) ([whyzdev](https://github.com/whyzdev)) - Clarify the need for a CSS stylesheet [#413](https://github.com/knsv/mermaid/pull/413) ([sifb](https://github.com/sifb)) - Added hads downstream project [#412](https://github.com/knsv/mermaid/pull/412) ([sinedied](https://github.com/sinedied)) - update usage and fix #273 [#406](https://github.com/knsv/mermaid/pull/406) ([jinntrance](https://github.com/jinntrance)) - Add https://github.com/raghur/mermaid-filter to downstream projects docs page [#404](https://github.com/knsv/mermaid/pull/404) ([raghur](https://github.com/raghur)) - New neutral theme [#395](https://github.com/knsv/mermaid/pull/395) ([sinedied](https://github.com/sinedied)) - fix cli issues [#390](https://github.com/knsv/mermaid/pull/390) ([ben-page](https://github.com/ben-page)) - Add missing space for 'Labels out of bounds' section [#386](https://github.com/knsv/mermaid/pull/386) ([The-Alchemist](https://github.com/The-Alchemist)) - Fix typo: `pats` -> `paths` [#382](https://github.com/knsv/mermaid/pull/382) ([swhgoon](https://github.com/swhgoon)) - Added class diagram example to README.md [#379](https://github.com/knsv/mermaid/pull/379) ([HustLion](https://github.com/HustLion)) - override normal flowchart arrowhead to allow css styling [#376](https://github.com/knsv/mermaid/pull/376) ([dodoinblue](https://github.com/dodoinblue)) - added sphinx extension [#371](https://github.com/knsv/mermaid/pull/371) ([mgaitan](https://github.com/mgaitan)) - Fix typo in the sequence diagram documentation [#369](https://github.com/knsv/mermaid/pull/369) ([ggpasqualino](https://github.com/ggpasqualino)) ## [6.0.0](https://github.com/knsv/mermaid/tree/6.0.0) (2016-05-29) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.8...6.0.0) **Closed issues:** - Docs css: code hard to read [#324](https://github.com/knsv/mermaid/issues/324) - About Markpad integration [#323](https://github.com/knsv/mermaid/issues/323) - How to link backwards in flowchart? [#321](https://github.com/knsv/mermaid/issues/321) - Help with editor [#310](https://github.com/knsv/mermaid/issues/310) - \+1 [#293](https://github.com/knsv/mermaid/issues/293) - Basic chart does not render on Chome, but does in Firefox [#290](https://github.com/knsv/mermaid/issues/290) - Live editor is broken [#285](https://github.com/knsv/mermaid/issues/285) - "No such file or directory" trying to run mermaid 0.5.7 on OS X [#284](https://github.com/knsv/mermaid/issues/284) - participant name as "Long Long Name" [#283](https://github.com/knsv/mermaid/issues/283) - Windows - cli - could not find phantomjs at the specified path [#236](https://github.com/knsv/mermaid/issues/236) **Merged pull requests:** - The option of gantt for the spaces for the section names. [#353](https://github.com/knsv/mermaid/pull/353) ([zeroyonichihachi](https://github.com/zeroyonichihachi)) - Gitgraph: Make reset work with parent ref carets [#350](https://github.com/knsv/mermaid/pull/350) ([raghur](https://github.com/raghur)) - Remove the text-shadows that make the text look blurry [#349](https://github.com/knsv/mermaid/pull/349) ([AsaAyers](https://github.com/AsaAyers)) - add line interpolation to linkStyle in flowchart [#346](https://github.com/knsv/mermaid/pull/346) ([AlanHohn](https://github.com/AlanHohn)) - Support git graph diagrams in mermaid [#344](https://github.com/knsv/mermaid/pull/344) ([raghur](https://github.com/raghur)) - Build and test execution changes [#338](https://github.com/knsv/mermaid/pull/338) ([ssbarnea](https://github.com/ssbarnea)) - Reformatting of css files [#331](https://github.com/knsv/mermaid/pull/331) ([Jmuccigr](https://github.com/Jmuccigr)) - (WIP) Sequence Diagram Title Support [#320](https://github.com/knsv/mermaid/pull/320) ([bronsoja](https://github.com/bronsoja)) - activations doc + few fixes [#318](https://github.com/knsv/mermaid/pull/318) ([ciekawy](https://github.com/ciekawy)) - Dark theme for better contrast on darker backgrounds [#317](https://github.com/knsv/mermaid/pull/317) ([crodriguez1a](https://github.com/crodriguez1a)) - Activations [#316](https://github.com/knsv/mermaid/pull/316) ([ciekawy](https://github.com/ciekawy)) - Support leading comments for sequenceDiagrams [#312](https://github.com/knsv/mermaid/pull/312) ([ashsearle](https://github.com/ashsearle)) - Show a little lenience for white-space around names [#309](https://github.com/knsv/mermaid/pull/309) ([ashsearle](https://github.com/ashsearle)) - Update list of downstream projects [#307](https://github.com/knsv/mermaid/pull/307) ([maxArturo](https://github.com/maxArturo)) - Issue 299: Sequence diagram Loops: changing boxMargin spoils the "loop" notation [#300](https://github.com/knsv/mermaid/pull/300) ([LarryKlugerDS](https://github.com/LarryKlugerDS)) - Issue 297 - src/mermaid.js generates bad code [#298](https://github.com/knsv/mermaid/pull/298) ([LarryKlugerDS](https://github.com/LarryKlugerDS)) - Updated instructions for running tests [#295](https://github.com/knsv/mermaid/pull/295) ([LarryKlugerDS](https://github.com/LarryKlugerDS)) - Add Markdown Plus to Downstream projects [#288](https://github.com/knsv/mermaid/pull/288) ([tylerlong](https://github.com/tylerlong)) - Quote phantomPath so that it doesn't fail on window [#286](https://github.com/knsv/mermaid/pull/286) ([raghur](https://github.com/raghur)) ## [0.5.8](https://github.com/knsv/mermaid/tree/0.5.8) (2016-01-27) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.7...0.5.8) ## [0.5.7](https://github.com/knsv/mermaid/tree/0.5.7) (2016-01-25) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.6...0.5.7) **Closed issues:** - Mermaid + LightPaper = ❤️ [#280](https://github.com/knsv/mermaid/issues/280) - Bower Integration [#278](https://github.com/knsv/mermaid/issues/278) - Mermaid breaks when variables end in 'v' [#276](https://github.com/knsv/mermaid/issues/276) - sequence diagrams don't support participant aliasing [#263](https://github.com/knsv/mermaid/issues/263) - One diagram that fails to render stops further execution on the page [#259](https://github.com/knsv/mermaid/issues/259) - Where to find line layout algorithm? [#258](https://github.com/knsv/mermaid/issues/258) - Compatibility with node.js [#257](https://github.com/knsv/mermaid/issues/257) - Label resizing with dynamically loaded fonts [#255](https://github.com/knsv/mermaid/issues/255) - SVG arrowheads are broken in the CLI [#249](https://github.com/knsv/mermaid/issues/249) - Cannot read property 'replace' of undefined [#239](https://github.com/knsv/mermaid/issues/239) **Merged pull requests:** - gh-50 Allow styling of edge labels in css [#267](https://github.com/knsv/mermaid/pull/267) ([Anoia](https://github.com/Anoia)) - Allow sequenceDiagram participant aliasing [#265](https://github.com/knsv/mermaid/pull/265) ([gibson042](https://github.com/gibson042)) ## [0.5.6](https://github.com/knsv/mermaid/tree/0.5.6) (2015-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.5...0.5.6) **Implemented enhancements:** - Add download SVG link to the live editor [#144](https://github.com/knsv/mermaid/issues/144) **Fixed bugs:** - Live Editor: Permalink address not being parsed [#202](https://github.com/knsv/mermaid/issues/202) **Closed issues:** - title doesn't work in sequenceDiagram [#248](https://github.com/knsv/mermaid/issues/248) - hypen-minus should be valid in sequence diagram alt/else/etc. descriptions [#247](https://github.com/knsv/mermaid/issues/247) - Broken in firefox? [#245](https://github.com/knsv/mermaid/issues/245) - When there is a Chinese symbol in the flowchart, it will crash。 [#238](https://github.com/knsv/mermaid/issues/238) - Non-alpha characters included in ALPHA token (flow graph jison) [#232](https://github.com/knsv/mermaid/issues/232) - subgraph not rendering with change to sample [#231](https://github.com/knsv/mermaid/issues/231) - sequence diagram requires a new line at the end? [#229](https://github.com/knsv/mermaid/issues/229) **Merged pull requests:** - Make sequenceDiagram terminal newline optional [#253](https://github.com/knsv/mermaid/pull/253) ([gibson042](https://github.com/gibson042)) - Support sequenceDiagram "over" notes [#252](https://github.com/knsv/mermaid/pull/252) ([gibson042](https://github.com/gibson042)) - Properly handle "rest of line" statements [#251](https://github.com/knsv/mermaid/pull/251) ([gibson042](https://github.com/gibson042)) - CLI: Propagate exit code from lib (i.e., phantomjs) [#250](https://github.com/knsv/mermaid/pull/250) ([gibson042](https://github.com/gibson042)) - flowRender.js - Fix FontAwesome icon insert [#244](https://github.com/knsv/mermaid/pull/244) ([ma-zal](https://github.com/ma-zal)) - updated sequence diagram link in live editor [#242](https://github.com/knsv/mermaid/pull/242) ([r-a-v-a-s](https://github.com/r-a-v-a-s)) - updated links in README.md [#240](https://github.com/knsv/mermaid/pull/240) ([r-a-v-a-s](https://github.com/r-a-v-a-s)) - Ellipse syntax [#237](https://github.com/knsv/mermaid/pull/237) ([spect88](https://github.com/spect88)) - Allow keywords as suffixes of node ids [#235](https://github.com/knsv/mermaid/pull/235) ([spect88](https://github.com/spect88)) - Highlighted the editor in the nav [#234](https://github.com/knsv/mermaid/pull/234) ([knsv](https://github.com/knsv)) - Live editor tweaks [#233](https://github.com/knsv/mermaid/pull/233) ([spect88](https://github.com/spect88)) - Add a Gitter chat badge to README.md [#230](https://github.com/knsv/mermaid/pull/230) ([gitter-badger](https://github.com/gitter-badger)) ## [0.5.5](https://github.com/knsv/mermaid/tree/0.5.5) (2015-10-21) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.4...0.5.5) **Closed issues:** - sequence diagram, arrowhead instead of crosshead [#227](https://github.com/knsv/mermaid/issues/227) **Merged pull requests:** - Fix a typo: crosshead --> arrowhead [#228](https://github.com/knsv/mermaid/pull/228) ([tylerlong](https://github.com/tylerlong)) ## [0.5.4](https://github.com/knsv/mermaid/tree/0.5.4) (2015-10-19) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.3...0.5.4) **Implemented enhancements:** - Set log level from mermaid configuration [#220](https://github.com/knsv/mermaid/issues/220) - Links in sequence diagrams [#159](https://github.com/knsv/mermaid/issues/159) - Add syntax for double headed arrows [#123](https://github.com/knsv/mermaid/issues/123) **Fixed bugs:** - comment characters `%%` cause parse error [#141](https://github.com/knsv/mermaid/issues/141) **Closed issues:** - Marker-end arrow cannot be shown for URL with query parameter [#225](https://github.com/knsv/mermaid/issues/225) - Please update bower's D3 version [#221](https://github.com/knsv/mermaid/issues/221) - Width fixed to 400px [#204](https://github.com/knsv/mermaid/issues/204) - render to png from the cli does not display the marker-end arrow heads [#181](https://github.com/knsv/mermaid/issues/181) **Merged pull requests:** - Allow `end` as a substring of vertex id [#224](https://github.com/knsv/mermaid/pull/224) ([spect88](https://github.com/spect88)) - Remove duplicate npm dependencies: d3 and he [#223](https://github.com/knsv/mermaid/pull/223) ([spect88](https://github.com/spect88)) ## [0.5.3](https://github.com/knsv/mermaid/tree/0.5.3) (2015-10-04) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.2...0.5.3) ## [0.5.2](https://github.com/knsv/mermaid/tree/0.5.2) (2015-10-04) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.1...0.5.2) **Implemented enhancements:** - Support for hyperlink and tooltip [#34](https://github.com/knsv/mermaid/issues/34) **Closed issues:** - Installing “atom-mermaid@0.1.3” failed [#218](https://github.com/knsv/mermaid/issues/218) - node feature request [#211](https://github.com/knsv/mermaid/issues/211) - Please add prefix for styles [#208](https://github.com/knsv/mermaid/issues/208) - Bad handling of block arguments [#207](https://github.com/knsv/mermaid/issues/207) - please consider port to mac osx [#203](https://github.com/knsv/mermaid/issues/203) - allow phantomjs >=1.9.x [#201](https://github.com/knsv/mermaid/issues/201) - syntax for venn diagrams? [#200](https://github.com/knsv/mermaid/issues/200) - Broken CLI Graphs? (v0.5.1) [#196](https://github.com/knsv/mermaid/issues/196) - Static site does not render under HTTPS [#194](https://github.com/knsv/mermaid/issues/194) - Error on simple graph [#192](https://github.com/knsv/mermaid/issues/192) - Escape "~" [#191](https://github.com/knsv/mermaid/issues/191) - Trying to add link using 'click' to flowchart [#188](https://github.com/knsv/mermaid/issues/188) - cli: no lines and arrowheads rendered / only dotted lines [#187](https://github.com/knsv/mermaid/issues/187) - text of mermaid div displayed on page [#186](https://github.com/knsv/mermaid/issues/186) - using mermaid with laravel [#185](https://github.com/knsv/mermaid/issues/185) - Atom editor package [#183](https://github.com/knsv/mermaid/issues/183) - Auto linewrap for notes in sequence diagrams [#178](https://github.com/knsv/mermaid/issues/178) - Execute code after initialize [#176](https://github.com/knsv/mermaid/issues/176) - Autoscaling for all diagram types [#175](https://github.com/knsv/mermaid/issues/175) - Problem wit click event callback [#174](https://github.com/knsv/mermaid/issues/174) - How to escape characters? [#170](https://github.com/knsv/mermaid/issues/170) - it can not work [#167](https://github.com/knsv/mermaid/issues/167) - Broken subgraph using the CLI [#153](https://github.com/knsv/mermaid/issues/153) - IE Support issue [#142](https://github.com/knsv/mermaid/issues/142) - Flowchart truncated [#140](https://github.com/knsv/mermaid/issues/140) - Double Quote as text is not working [#219](https://github.com/knsv/mermaid/issues/219) - classDef / class not working with htmlLabels? [#210](https://github.com/knsv/mermaid/issues/210) - Links in graph missing [#209](https://github.com/knsv/mermaid/issues/209) - Last word in comment boxes getting cut off by word wrap library : ( [#195](https://github.com/knsv/mermaid/issues/195) - Escaping characters in sequence diagram [#193](https://github.com/knsv/mermaid/issues/193) - SVG foreignObject rendering [#180](https://github.com/knsv/mermaid/issues/180) - IE9 issue [#179](https://github.com/knsv/mermaid/issues/179) - inoperable in an AMD/requirejs environment: IPython Notebook [#127](https://github.com/knsv/mermaid/issues/127) - \[Parser] Hyphen in participant name bring TypeError [#74](https://github.com/knsv/mermaid/issues/74) **Merged pull requests:** - Update flowchart.md [#214](https://github.com/knsv/mermaid/pull/214) ([orschiro](https://github.com/orschiro)) - Default style when using the CLI [#205](https://github.com/knsv/mermaid/pull/205) ([gillesdemey](https://github.com/gillesdemey)) - Gantt chart - add minutes and seconds durations [#198](https://github.com/knsv/mermaid/pull/198) ([dbrans](https://github.com/dbrans)) - Using QUnit for AMD testing [#190](https://github.com/knsv/mermaid/pull/190) ([bollwyvl](https://github.com/bollwyvl)) - Update phantomscript.js [#182](https://github.com/knsv/mermaid/pull/182) ([phairow](https://github.com/phairow)) ## [0.5.1](https://github.com/knsv/mermaid/tree/0.5.1) (2015-06-21) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.0...0.5.1) **Implemented enhancements:** - To SVG Export [#146](https://github.com/knsv/mermaid/issues/146) - Possibility to set the width of the generated flowchart [#129](https://github.com/knsv/mermaid/issues/129) - Special characters break parsing [#54](https://github.com/knsv/mermaid/issues/54) - Responsive graph layout for mobile viewers [#51](https://github.com/knsv/mermaid/issues/51) - Styling connector lines [#31](https://github.com/knsv/mermaid/issues/31) **Fixed bugs:** - flowchart - styling of edges via css overrides specific styles set in the graph definition [#128](https://github.com/knsv/mermaid/issues/128) **Closed issues:** - Live editor is broken [#173](https://github.com/knsv/mermaid/issues/173) - 0.5.0 no longer respects custom date definitions in Gantt diagrams [#171](https://github.com/knsv/mermaid/issues/171) - Drop label character restrictions [#162](https://github.com/knsv/mermaid/issues/162) - can't nest subgraphs in flowchart [#161](https://github.com/knsv/mermaid/issues/161) - Unable to generate gantt diagram with mermaid CLI [#158](https://github.com/knsv/mermaid/issues/158) - Inline css by "mermaid" [#157](https://github.com/knsv/mermaid/issues/157) - Finite State Machine Diagram [#152](https://github.com/knsv/mermaid/issues/152) - How to center align gantt diagram [#150](https://github.com/knsv/mermaid/issues/150) - Security concern regarding class definition [#148](https://github.com/knsv/mermaid/issues/148) - File Extension [#147](https://github.com/knsv/mermaid/issues/147) - `setTimeout` with clusters problematic with programmatic edits and no callback [#133](https://github.com/knsv/mermaid/issues/133) - module.exports.cloneCssStyles() in combination with Angularjs breaks display in Chrome and IE [#126](https://github.com/knsv/mermaid/issues/126) - Gantt - suitable xAxis for longer project [#125](https://github.com/knsv/mermaid/issues/125) - How to get started with this project ? [#64](https://github.com/knsv/mermaid/issues/64) **Merged pull requests:** - Remove moot `version` property from bower.json [#172](https://github.com/knsv/mermaid/pull/172) ([kkirsche](https://github.com/kkirsche)) ## [0.5.0](https://github.com/knsv/mermaid/tree/0.5.0) (2015-06-07) [Full Changelog](https://github.com/knsv/mermaid/compare/0.4.0...0.5.0) **Implemented enhancements:** - Add a css file, mermaid.css, with default styling [#122](https://github.com/knsv/mermaid/issues/122) - software architecture diagram [#36](https://github.com/knsv/mermaid/issues/36) - Support for bar charts and pie diagrams [#22](https://github.com/knsv/mermaid/issues/22) **Closed issues:** - uglifyjs wanrings which means we can improve the code [#156](https://github.com/knsv/mermaid/issues/156) - New(er) features unavailable in downloadable js files? [#151](https://github.com/knsv/mermaid/issues/151) - Add gh-gapes link to description [#143](https://github.com/knsv/mermaid/issues/143) - Some examples not displayed on Firefox 36.0.1 [#138](https://github.com/knsv/mermaid/issues/138) - tags ending in a "v" don't render [#132](https://github.com/knsv/mermaid/issues/132) - Links in flowchart [#131](https://github.com/knsv/mermaid/issues/131) - Using the library for iOS development [#130](https://github.com/knsv/mermaid/issues/130) - Add capability for gantt diagrams [#118](https://github.com/knsv/mermaid/issues/118) - lower case v causes error in the parser [#108](https://github.com/knsv/mermaid/issues/108) - Label's css conflict with boostrap's .label [#67](https://github.com/knsv/mermaid/issues/67) - TypeError: Cannot read property 'layout' of undefined [#37](https://github.com/knsv/mermaid/issues/37) **Merged pull requests:** - Dev 0.5.0 [#168](https://github.com/knsv/mermaid/pull/168) ([knsv](https://github.com/knsv)) - Fix spacing [#164](https://github.com/knsv/mermaid/pull/164) ([rhcarvalho](https://github.com/rhcarvalho)) - Fixing typo: "Think" -> "Thick" [#160](https://github.com/knsv/mermaid/pull/160) ([it0a](https://github.com/it0a)) - IE, local html, cssRules access is denied [#155](https://github.com/knsv/mermaid/pull/155) ([tylerlong](https://github.com/tylerlong)) - Add automatically generated change log file. [#139](https://github.com/knsv/mermaid/pull/139) ([skywinder](https://github.com/skywinder)) - Adding init argument to the global API [#137](https://github.com/knsv/mermaid/pull/137) ([bollwyvl](https://github.com/bollwyvl)) - Add description of manual calling of init [#136](https://github.com/knsv/mermaid/pull/136) ([bollwyvl](https://github.com/bollwyvl)) - Allow other forms of node selection for init() [#135](https://github.com/knsv/mermaid/pull/135) ([bollwyvl](https://github.com/bollwyvl)) - Use a library-level variable for assigning ids [#134](https://github.com/knsv/mermaid/pull/134) ([bollwyvl](https://github.com/bollwyvl)) ## [0.4.0](https://github.com/knsv/mermaid/tree/0.4.0) (2015-03-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.5...0.4.0) **Implemented enhancements:** - Assymetric shapes not documented [#82](https://github.com/knsv/mermaid/issues/82) - Improve arrows [#3](https://github.com/knsv/mermaid/issues/3) **Fixed bugs:** - NoModificationAllowedError [#23](https://github.com/knsv/mermaid/issues/23) **Closed issues:** - subgraph background is black in rendered flowchart PNG via CLI [#121](https://github.com/knsv/mermaid/issues/121) - Integrate editor at https://github.com/naseer/mermaid-webapp [#110](https://github.com/knsv/mermaid/issues/110) - Internet Explorer Support [#99](https://github.com/knsv/mermaid/issues/99) ## [0.3.5](https://github.com/knsv/mermaid/tree/0.3.5) (2015-02-15) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.4...0.3.5) ## [0.3.4](https://github.com/knsv/mermaid/tree/0.3.4) (2015-02-15) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.3...0.3.4) **Implemented enhancements:** - Apply styling from css when using the CLI utility [#85](https://github.com/knsv/mermaid/issues/85) - Generated SVG works poorly outside web browsers [#58](https://github.com/knsv/mermaid/issues/58) - Generating SVG text blob for use in Node [#2](https://github.com/knsv/mermaid/issues/2) **Closed issues:** - Subgraph syntax bug? [#120](https://github.com/knsv/mermaid/issues/120) - Live editor [#115](https://github.com/knsv/mermaid/issues/115) - Error in "Basic Syntax" wiki page [#113](https://github.com/knsv/mermaid/issues/113) - semicolons, anyone? [#111](https://github.com/knsv/mermaid/issues/111) - undefined `sequenceConfig` fails [#109](https://github.com/knsv/mermaid/issues/109) - Sequence Diagrams: Show Actors below as well [#106](https://github.com/knsv/mermaid/issues/106) - Allow overriding sequence diagram configuration (SVG properties) [#103](https://github.com/knsv/mermaid/issues/103) - Error when rendering A-- This is the text -- B [#102](https://github.com/knsv/mermaid/issues/102) - Clipping in documentation [#97](https://github.com/knsv/mermaid/issues/97) - isolate class styling to the svg container [#92](https://github.com/knsv/mermaid/issues/92) - Make the new graph declaration more visual [#40](https://github.com/knsv/mermaid/issues/40) **Merged pull requests:** - Add live editor [#119](https://github.com/knsv/mermaid/pull/119) ([naseer](https://github.com/naseer)) - Adds CSS option to the CLI [#116](https://github.com/knsv/mermaid/pull/116) ([fardog](https://github.com/fardog)) - Update flowchart.md in response Issue #113 [#114](https://github.com/knsv/mermaid/pull/114) ([vijay40](https://github.com/vijay40)) - Ignore all files except the license and dist/ folder when installing with Bower. [#112](https://github.com/knsv/mermaid/pull/112) ([jasonbellamy](https://github.com/jasonbellamy)) ## [0.3.3](https://github.com/knsv/mermaid/tree/0.3.3) (2015-01-25) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.2...0.3.3) **Implemented enhancements:** - Support for dotted links [#26](https://github.com/knsv/mermaid/issues/26) **Closed issues:** - Missing arrows in sequence diagram [#98](https://github.com/knsv/mermaid/issues/98) - Error with >9 linkStyles [#95](https://github.com/knsv/mermaid/issues/95) **Merged pull requests:** - Require d3 directly to better support Node usage [#107](https://github.com/knsv/mermaid/pull/107) ([markdalgleish](https://github.com/markdalgleish)) - update doc with -c option [#105](https://github.com/knsv/mermaid/pull/105) ([jjmr](https://github.com/jjmr)) - Add new parameter to the console client to override the svg configuration in sequence diagrams [#104](https://github.com/knsv/mermaid/pull/104) ([jjmr](https://github.com/jjmr)) - Text based labels, new shape [#101](https://github.com/knsv/mermaid/pull/101) ([bjowes](https://github.com/bjowes)) - fix html tags in example usage [#100](https://github.com/knsv/mermaid/pull/100) ([deiwin](https://github.com/deiwin)) ## [0.3.2](https://github.com/knsv/mermaid/tree/0.3.2) (2015-01-11) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.1...0.3.2) **Implemented enhancements:** - Make link text look like it is on the line [#53](https://github.com/knsv/mermaid/issues/53) **Closed issues:** - disable auto render [#91](https://github.com/knsv/mermaid/issues/91) - Tidy breaks mermaid (linebreaks in \
) [#87](https://github.com/knsv/mermaid/issues/87) - Bug: \
being rendered as text in node [#73](https://github.com/knsv/mermaid/issues/73) - Graph edges appear to render outside of the canvas [#70](https://github.com/knsv/mermaid/issues/70) **Merged pull requests:** - Merge pull request #1 from knsv/master [#96](https://github.com/knsv/mermaid/pull/96) ([gkchic](https://github.com/gkchic)) - Removed duplicated section in flowchart docs [#94](https://github.com/knsv/mermaid/pull/94) ([kaime](https://github.com/kaime)) - Grammar changes to sequence page [#93](https://github.com/knsv/mermaid/pull/93) ([gkchic](https://github.com/gkchic)) - Github buttons [#89](https://github.com/knsv/mermaid/pull/89) ([gkchic](https://github.com/gkchic)) - Template change [#88](https://github.com/knsv/mermaid/pull/88) ([gkchic](https://github.com/gkchic)) ## [0.3.1](https://github.com/knsv/mermaid/tree/0.3.1) (2015-01-05) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.0...0.3.1) **Implemented enhancements:** - Support for sequence diagrams [#16](https://github.com/knsv/mermaid/issues/16) - Client utility for mermaid [#6](https://github.com/knsv/mermaid/issues/6) **Closed issues:** - Non ASCII chars in labels [#84](https://github.com/knsv/mermaid/issues/84) - 'undefined' titles of Quicklinks on the usage page [#80](https://github.com/knsv/mermaid/issues/80) - \[cli] Enhancement proposal: not fail --version / --help if phantomjs isn't installed [#71](https://github.com/knsv/mermaid/issues/71) **Merged pull requests:** - Flowchart doc: Text in the circle now in a circle [#81](https://github.com/knsv/mermaid/pull/81) ([Grahack](https://github.com/Grahack)) - Fix for issue #73 [#79](https://github.com/knsv/mermaid/pull/79) ([it0a](https://github.com/it0a)) - Ink template [#78](https://github.com/knsv/mermaid/pull/78) ([gkchic](https://github.com/gkchic)) - Show help and version even if phantom isn't present. Fixes #71 [#75](https://github.com/knsv/mermaid/pull/75) ([fardog](https://github.com/fardog)) - Add apostrophe & 'and' [#72](https://github.com/knsv/mermaid/pull/72) ([sudodoki](https://github.com/sudodoki)) ## [0.3.0](https://github.com/knsv/mermaid/tree/0.3.0) (2014-12-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.16...0.3.0) **Implemented enhancements:** - How do I do comments? [#47](https://github.com/knsv/mermaid/issues/47) - Improve readability with new line as terminator and whitespace [#38](https://github.com/knsv/mermaid/issues/38) **Fixed bugs:** - This characters failed the lexical parsing [#46](https://github.com/knsv/mermaid/issues/46) **Closed issues:** - Trailing whitespace at the end of lines is not ignored [#55](https://github.com/knsv/mermaid/issues/55) - Use classes instead of inline style for easy styling [#24](https://github.com/knsv/mermaid/issues/24) **Merged pull requests:** - Adds Command Line Interface for generating PNGs from mermaid description files [#69](https://github.com/knsv/mermaid/pull/69) ([fardog](https://github.com/fardog)) - Allow special symbols for direction along with acronyms [#66](https://github.com/knsv/mermaid/pull/66) ([vijay40](https://github.com/vijay40)) ## [0.2.16](https://github.com/knsv/mermaid/tree/0.2.16) (2014-12-15) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.15...0.2.16) **Fixed bugs:** - Lines routed outside visible area [#19](https://github.com/knsv/mermaid/issues/19) **Closed issues:** - Mermaid not rendering properly on Wordpress pages [#59](https://github.com/knsv/mermaid/issues/59) - Improve example page with live demo [#52](https://github.com/knsv/mermaid/issues/52) - Does not render upon AngularJS Updates [#45](https://github.com/knsv/mermaid/issues/45) - Download link in README.MD doesn't work. [#42](https://github.com/knsv/mermaid/issues/42) - linkStyle usage is not obvious [#41](https://github.com/knsv/mermaid/issues/41) - Move \*.spec.js in src/ to test/ [#35](https://github.com/knsv/mermaid/issues/35) **Merged pull requests:** - New grammar will allow statements ending without semicolon as disccused in Issue #38 [#63](https://github.com/knsv/mermaid/pull/63) ([vijay40](https://github.com/vijay40)) - Class based styling [#62](https://github.com/knsv/mermaid/pull/62) ([bjowes](https://github.com/bjowes)) - Fix typos [#60](https://github.com/knsv/mermaid/pull/60) ([sublimino](https://github.com/sublimino)) - Included .DS_Store in gitignore [#57](https://github.com/knsv/mermaid/pull/57) ([alvynmcq](https://github.com/alvynmcq)) - Improves readability discussed in issue #38 [#56](https://github.com/knsv/mermaid/pull/56) ([vijay40](https://github.com/vijay40)) - Added a linting task for gulp [#43](https://github.com/knsv/mermaid/pull/43) ([serv](https://github.com/serv)) ## [0.2.15](https://github.com/knsv/mermaid/tree/0.2.15) (2014-12-05) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.14...0.2.15) **Fixed bugs:** - Error with some characters [#25](https://github.com/knsv/mermaid/issues/25) - Cap-cased words break parser [#8](https://github.com/knsv/mermaid/issues/8) **Closed issues:** - Question marks don't render properly with /dist/mermaid.full.min.js [#30](https://github.com/knsv/mermaid/issues/30) - Provide parse function in browser widthout `require`? [#21](https://github.com/knsv/mermaid/issues/21) - Better label text support [#18](https://github.com/knsv/mermaid/issues/18) **Merged pull requests:** - Include bower_components/ to .gitignore [#33](https://github.com/knsv/mermaid/pull/33) ([serv](https://github.com/serv)) - Fixed reference to Git repo. [#32](https://github.com/knsv/mermaid/pull/32) ([guyellis](https://github.com/guyellis)) ## [0.2.14](https://github.com/knsv/mermaid/tree/0.2.14) (2014-12-03) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.13...0.2.14) ## [0.2.13](https://github.com/knsv/mermaid/tree/0.2.13) (2014-12-03) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.10...0.2.13) **Implemented enhancements:** - Publish to NPM [#7](https://github.com/knsv/mermaid/issues/7) **Closed issues:** - modified init to be applied more than once [#29](https://github.com/knsv/mermaid/issues/29) - Wanted to know build process for the project. [#28](https://github.com/knsv/mermaid/issues/28) - can not support Chinese description [#20](https://github.com/knsv/mermaid/issues/20) - Support unicode chars in labels [#9](https://github.com/knsv/mermaid/issues/9) ## [0.2.10](https://github.com/knsv/mermaid/tree/0.2.10) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.9...0.2.10) ## [0.2.9](https://github.com/knsv/mermaid/tree/0.2.9) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.8...0.2.9) **Closed issues:** - Add link to jsbin playground to README [#11](https://github.com/knsv/mermaid/issues/11) - What are the requirements ? [#10](https://github.com/knsv/mermaid/issues/10) **Merged pull requests:** - Allow unicode chars in labels [#13](https://github.com/knsv/mermaid/pull/13) ([codebeige](https://github.com/codebeige)) ## [0.2.8](https://github.com/knsv/mermaid/tree/0.2.8) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.7...0.2.8) ## [0.2.7](https://github.com/knsv/mermaid/tree/0.2.7) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.6...0.2.7) **Closed issues:** - Provide parser as separate module [#4](https://github.com/knsv/mermaid/issues/4) ## [0.2.6](https://github.com/knsv/mermaid/tree/0.2.6) (2014-11-27) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.5...0.2.6) ## [0.2.5](https://github.com/knsv/mermaid/tree/0.2.5) (2014-11-27) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.4...0.2.5) **Merged pull requests:** - Added new shapes! [#1](https://github.com/knsv/mermaid/pull/1) ([bjowes](https://github.com/bjowes)) ## [0.2.4](https://github.com/knsv/mermaid/tree/0.2.4) (2014-11-25) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.3...0.2.4) ## [0.2.3](https://github.com/knsv/mermaid/tree/0.2.3) (2014-11-24) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.2...0.2.3) ## [0.2.2](https://github.com/knsv/mermaid/tree/0.2.2) (2014-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.1...0.2.2) ## [0.2.1](https://github.com/knsv/mermaid/tree/0.2.1) (2014-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.0...0.2.1) ## [0.2.0](https://github.com/knsv/mermaid/tree/0.2.0) (2014-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.1.1...0.2.0) ## [0.1.1](https://github.com/knsv/mermaid/tree/0.1.1) (2014-11-17) [Full Changelog](https://github.com/knsv/mermaid/compare/0.1.0...0.1.1) ## [0.1.0](https://github.com/knsv/mermaid/tree/0.1.0) (2014-11-16) mermaid-js-mermaid-9bb0ed2/docs/Configuration.md000066400000000000000000000025111433273745700217460ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Configuration Configuration is the second half of Mermaid, after deployment. Together Deployment and Configuration constitute the whole of Mermaid. This section will introduce the different methods of configuring of the behaviors and appearances of Mermaid Diagrams. The Following are the most commonly used methods, and are all tied to Mermaid [Deployment](./n00b-gettingStarted.md) methods. ## Configuration Section in the [Live Editor](https://mermaid.live/). ## The `initialize()` call, for when Mermaid is called via an API, or through a ``` **Doing so will command the mermaid parser to look for the `
` or `
` tags with `class="mermaid"`. From these tags mermaid will try to read the diagram/chart definitions and render them into SVG charts.**

**Examples can be found at** [Other examples](/examples)

## Sibling projects

- [Mermaid Live Editor](https://github.com/mermaid-js/mermaid-live-editor)
- [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli)
- [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo)
- [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo)

## Request for Assistance

Things are piling up and I have a hard time keeping up. It would be great if we could form a core team of developers to cooperate
with the future development of mermaid.

As part of this team you would get write access to the repository and would
represent the project when answering questions and issues.

Together we could continue the work with things like:

- Adding more types of diagrams like mindmaps, ert diagrams, etc.
- Improving existing diagrams

Don't hesitate to contact me if you want to get involved!

## For contributors

### Setup

```sh
yarn install
```

### Build

```sh
yarn build:watch
```

### Lint

```sh
yarn lint
```

We use [eslint](https://eslint.org/).
We recommend you to install [editor plugins](https://eslint.org/docs/user-guide/integrations) to get real time lint result.

### Test

```sh
yarn test
```

Manual test in browser: open `dist/index.html`

### Release

For those who have the permission to do so:

Update version number in `package.json`.

```sh
npm publish
```

The above command generates files into the `dist` folder and publishes them to \.

## Related projects

- [Command Line Interface](https://github.com/mermaid-js/mermaid-cli)
- [Live Editor](https://github.com/mermaid-js/mermaid-live-editor)
- [HTTP Server](https://github.com/TomWright/mermaid-server)

## Contributors [![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors)

Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out.

Detailed information about how to contribute can be found in the [contribution guide](CONTRIBUTING.md)

## Security and safe diagrams

For public sites, it can be precarious to retrieve text from users on the internet, storing that content for presentation in a browser at a later stage. The reason is that the user content can contain embedded malicious scripts that will run when the data is presented. For Mermaid this is a risk, specially as mermaid diagrams contain many characters that are used in html which makes the standard sanitation unusable as it also breaks the diagrams. We still make an effort to sanitize the incoming code and keep refining the process but it is hard to guarantee that there are no loop holes.

As an extra level of security for sites with external users we are happy to introduce a new security level in which the diagram is rendered in a sandboxed iframe preventing JavaScript in the code from being executed. This is a great step forward for better security.

_Unfortunately you can not have a cake and eat it at the same time which in this case means that some of the interactive functionality gets blocked along with the possible malicious code._

## Reporting vulnerabilities

To report a vulnerability, please e-mail security@mermaid.live with a description of the issue, the steps you took to create the issue, affected versions, and if known, mitigations for the issue.

## Appreciation

A quick note from Knut Sveidqvist:

> _Many thanks to the [d3](https://d3js.org/) and [dagre-d3](https://github.com/cpettitt/dagre-d3) projects for providing the graphical layout and drawing libraries!_ >_Thanks also to the [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) project for usage of the grammar for the sequence diagrams. Thanks to Jessica Peter for inspiration and starting point for gantt rendering._ >_Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._
>
> _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_

---

_Mermaid was created by Knut Sveidqvist for easier documentation._
mermaid-js-mermaid-9bb0ed2/docs/SUMMARY.md000066400000000000000000000010321433273745700202710ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.

# Summary

- [mermaid](README.md)
- [FAQ](faq.md)
- [Breaking changes](breakingChanges.md)
- [Usage](usage.md)
- [Flowchart](flowchart.md)
- [Sequence diagram](sequenceDiagram.md)
- [Gantt diagram](gantt.md)
- [mermaid CLI](mermaidCLI.md)
- [Demos](demos.md)
- [mermaidAPI](mermaidAPI.md)
- [Development](development.md)
- [Upgrading](upgrading.md)
- [Contribute to this website](https://github.com/mermaidjs/mermaid-gitbook)
mermaid-js-mermaid-9bb0ed2/docs/Setup.md000066400000000000000000001513341433273745700202470ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.



## mermaidAPI

This is the API to be used when optionally handling the integration with the web page, instead of
using the default integration provided by mermaid.js.

The core of this api is the [**render**][1] function which, given a graph
definition as text, renders the graph/diagram and returns an svg element for the graph.

It is then up to the user of the API to make use of the svg, either insert it somewhere in the
page or do something completely different.

In addition to the render function, a number of behavioral configuration options are available.

## Configuration

**Configuration methods in Mermaid version 8.6.0 have been updated, to learn more\[[click
here][2]].**

## **What follows are config instructions for older versions**

These are the default options which can be overridden with the initialization call like so:

**Example 1:**
 mermaid.initialize({ flowchart:{ htmlLabels: false } }); 
**Example 2:**
  
A summary of all options and their defaults is found [here][3]. A description of each option follows below. ## theme Theme , the CSS style sheet | Parameter | Description | Type | Required | Values | | --------- | --------------- | ------ | -------- | ---------------------------------------------- | | theme | Built in Themes | string | Optional | 'default', 'forest', 'dark', 'neutral', 'null' | **Notes:** To disable any pre-defined mermaid theme, use "null".
 "theme": "forest",
"themeCSS": ".node rect { fill: red; }" 
## fontFamily | Parameter | Description | Type | Required | Values | | ---------- | ------------------------------------------------------ | ------ | -------- | --------------------------- | | fontFamily | specifies the font to be used in the rendered diagrams | string | Required | Any Possible CSS FontFamily | **Notes:** Default value: '"trebuchet ms", verdana, arial, sans-serif;'. ## logLevel | Parameter | Description | Type | Required | Values | | --------- | ----------------------------------------------------- | ------ | -------- | -------- | --------------------------------------------- | | logLevel | This option decides the amount of logging to be used. | string | number | Required | 'trace','debug','info','warn','error','fatal' | **Notes:** - Trace: 0 - Debug: 1 - Info: 2 - Warn: 3 - Error: 4 - Fatal: 5 (default) ## securityLevel | Parameter | Description | Type | Required | Values | | ------------- | --------------------------------- | ------ | -------- | ------------------------------------------ | | securityLevel | Level of trust for parsed diagram | string | Required | `sandbox`, `strict`, `loose`, `antiscript` | **Notes**: - **`strict`**: (**default**) tags in text are encoded, click functionality is disabled - **`loose`**: tags in text are allowed, click functionality is enabled - **`antiscript`**: html tags in text are allowed, (only script element is removed), click functionality is enabled - **`sandbox`**: With this security level all rendering takes place in a sandboxed iframe. This prevent any JavaScript from running in the context. This may hinder interactive functionality of the diagram like scripts, popups in sequence diagram or links to other tabs/targets etc. ## startOnLoad | Parameter | Description | Type | Required | Values | | ----------- | -------------------------------------------- | ------- | -------- | ----------- | | startOnLoad | Dictates whether mermaid starts on Page load | boolean | Required | true, false | **Notes:** Default value: true ## arrowMarkerAbsolute | Parameter | Description | Type | Required | Values | | ------------------- | ---------------------------------------------------------------------------- | ------- | -------- | ----------- | | arrowMarkerAbsolute | Controls whether or arrow markers in html code are absolute paths or anchors | boolean | Required | true, false | **Notes**: This matters if you are using base tag settings. Default value: false ## secure This option controls which currentConfig keys are considered _secure_ and can only be changed via call to mermaidAPI.initialize. Calls to mermaidAPI.reinitialize cannot make changes to the `secure` keys in the current currentConfig. This prevents malicious graph directives from overriding a site's default security. **Notes**: Default value: \['secure', 'securityLevel', 'startOnLoad', 'maxTextSize'] ## deterministicIds This option controls if the generated ids of nodes in the SVG are generated randomly or based on a seed. If set to false, the IDs are generated based on the current date and thus are not deterministic. This is the default behavior. **Notes**: This matters if your files are checked into source control e.g. git and should not change unless content is changed. Default value: false ## deterministicIDSeed This option is the optional seed for deterministic ids. if set to undefined but deterministicIds is true, a simple number iterator is used. You can set this attribute to base the seed on a static string. ## flowchart The object containing configurations specific for flowcharts ### diagramPadding | Parameter | Description | Type | Required | Values | | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ | | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value | **Notes:** The amount of padding around the diagram as a whole so that embedded diagrams have margins, expressed in pixels Default value: 8 ### htmlLabels | Parameter | Description | Type | Required | Values | | ---------- | -------------------------------------------------------------------------------------------- | ------- | -------- | ----------- | | htmlLabels | Flag for setting whether or not a html tag should be used for rendering labels on the edges. | boolean | Required | true, false | **Notes:** Default value: true. ### nodeSpacing | Parameter | Description | Type | Required | Values | | ----------- | --------------------------------------------------- | ------- | -------- | ------------------- | | nodeSpacing | Defines the spacing between nodes on the same level | Integer | Required | Any positive Number | **Notes:** Pertains to horizontal spacing for TB (top to bottom) or BT (bottom to top) graphs, and the vertical spacing for LR as well as RL graphs.\*\* Default value: 50 ### rankSpacing | Parameter | Description | Type | Required | Values | | ----------- | ----------------------------------------------------- | ------- | -------- | ------------------- | | rankSpacing | Defines the spacing between nodes on different levels | Integer | Required | Any Positive Number | **Notes**: Pertains to vertical spacing for TB (top to bottom) or BT (bottom to top), and the horizontal spacing for LR as well as RL graphs. Default value 50 ### curve | Parameter | Description | Type | Required | Values | | --------- | -------------------------------------------------- | ------ | -------- | ----------------------------- | | curve | Defines how mermaid renders curves for flowcharts. | string | Required | 'basis', 'linear', 'cardinal' | **Notes:** Default Value: 'basis' ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ### defaultRenderer | Parameter | Description | Type | Required | Values | | --------------- | ----------- | ------- | -------- | --------------------------- | | defaultRenderer | See notes | boolean | 4 | `dagre-d3`, `dagre-wrapper` | **Notes:** Decides which rendering engine that is to be used for the rendering. Legal values are: `dagre-d3` `dagre-wrapper` - wrapper for `dagre` implemented in mermaid Default value: `dagre-wrapper` ## sequence The object containing configurations specific for sequence diagrams ### activationWidth | Parameter | Description | Type | Required | Values | | --------------- | ---------------------------- | ------- | -------- | ------------------ | | activationWidth | Width of the activation rect | Integer | Required | Any Positive Value | **Notes:** Default value :10 ### diagramMarginX | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### diagramMarginY | Parameter | Description | Type | Required | Values | | -------------- | ------------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginY | Margin to the over and under the sequence diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### actorMargin | Parameter | Description | Type | Required | Values | | ----------- | --------------------- | ------- | -------- | ------------------ | | actorMargin | Margin between actors | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### width | Parameter | Description | Type | Required | Values | | --------- | -------------------- | ------- | -------- | ------------------ | | width | Width of actor boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 150 ### height | Parameter | Description | Type | Required | Values | | --------- | --------------------- | ------- | -------- | ------------------ | | height | Height of actor boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 65 ### boxMargin | Parameter | Description | Type | Required | Values | | --------- | ------------------------ | ------- | -------- | ------------------ | | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### boxTextMargin | Parameter | Description | Type | Required | Values | | ------------- | -------------------------------------------- | ------- | -------- | ------------------ | | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 5 ### noteMargin | Parameter | Description | Type | Required | Values | | ---------- | ------------------- | ------- | -------- | ------------------ | | noteMargin | margin around notes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### messageMargin | Parameter | Description | Type | Required | Values | | ------------- | ---------------------- | ------- | -------- | ------------------ | | messageMargin | Space between messages | Integer | Required | Any Positive Value | **Notes:** Default value: 35 ### messageAlign | Parameter | Description | Type | Required | Values | | ------------ | --------------------------- | ------ | -------- | ------------------------- | | messageAlign | Multiline message alignment | string | Required | 'left', 'center', 'right' | **Notes:** Default value: 'center' ### mirrorActors | Parameter | Description | Type | Required | Values | | ------------ | --------------------------- | ------- | -------- | ----------- | | mirrorActors | Mirror actors under diagram | boolean | Required | true, false | **Notes:** Default value: true ### forceMenus | Parameter | Description | Type | Required | Values | | ---------- | ----------------------------------------------------------------------- | ------- | -------- | ----------- | | forceMenus | forces actor popup menus to always be visible (to support E2E testing). | Boolean | Required | True, False | **Notes:** Default value: false. ### bottomMarginAdj | Parameter | Description | Type | Required | Values | | --------------- | ------------------------------------------ | ------- | -------- | ------------------ | | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | Required | Any Positive Value | **Notes:** Depending on css styling this might need adjustment. Default value: 1 ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the height and width is set to 100% and is then scaling with the available space. If set to false, the absolute space required is used. Default value: true ### rightAngles | Parameter | Description | Type | Required | Values | | ----------- | ------------------------------------ | ------- | -------- | ----------- | | rightAngles | display curve arrows as right angles | boolean | Required | true, false | **Notes:** This will display arrows that start and begin at the same node as right angles, rather than a curve Default value: false ### showSequenceNumbers | Parameter | Description | Type | Required | Values | | ------------------- | ------------------------------- | ------- | -------- | ----------- | | showSequenceNumbers | This will show the node numbers | boolean | Required | true, false | **Notes:** Default value: false ### actorFontSize | Parameter | Description | Type | Required | Values | | ------------- | -------------------------------------------------- | ------- | -------- | ------------------ | | actorFontSize | This sets the font size of the actor's description | Integer | Require | Any Positive Value | **Notes:** **Default value 14**.. ### actorFontFamily | Parameter | Description | Type | Required | Values | | --------------- | ---------------------------------------------------- | ------ | -------- | --------------------------- | | actorFontFamily | This sets the font family of the actor's description | string | Required | Any Possible CSS FontFamily | **Notes:** Default value: "'Open Sans", sans-serif' ### actorFontWeight This sets the font weight of the actor's description **Notes:** Default value: 400. ### noteFontSize | Parameter | Description | Type | Required | Values | | ------------ | ----------------------------------------------- | ------- | -------- | ------------------ | | noteFontSize | This sets the font size of actor-attached notes | Integer | Required | Any Positive Value | **Notes:** Default value: 14 ### noteFontFamily | Parameter | Description | Type | Required | Values | | -------------- | -------------------------------------------------- | ------ | -------- | --------------------------- | | noteFontFamily | This sets the font family of actor-attached notes. | string | Required | Any Possible CSS FontFamily | **Notes:** Default value: ''"trebuchet ms", verdana, arial, sans-serif' ### noteFontWeight This sets the font weight of the note's description **Notes:** Default value: 400 ### noteAlign | Parameter | Description | Type | Required | Values | | --------- | ---------------------------------------------------- | ------ | -------- | ------------------------- | | noteAlign | This sets the text alignment of actor-attached notes | string | required | 'left', 'center', 'right' | **Notes:** Default value: 'center' ### messageFontSize | Parameter | Description | Type | Required | Values | | --------------- | ----------------------------------------- | ------- | -------- | ------------------- | | messageFontSize | This sets the font size of actor messages | Integer | Required | Any Positive Number | **Notes:** Default value: 16 ### messageFontFamily | Parameter | Description | Type | Required | Values | | ----------------- | ------------------------------------------- | ------ | -------- | --------------------------- | | messageFontFamily | This sets the font family of actor messages | string | Required | Any Possible CSS FontFamily | **Notes:** Default value: '"trebuchet ms", verdana, arial, sans-serif' ### messageFontWeight This sets the font weight of the message's description **Notes:** Default value: 400. ### wrap This sets the auto-wrap state for the diagram **Notes:** Default value: false. ### wrapPadding This sets the auto-wrap padding for the diagram (sides only) **Notes:** Default value: 0. ### labelBoxWidth This sets the width of the loop-box (loop, alt, opt, par) **Notes:** Default value: 50. ### labelBoxHeight This sets the height of the loop-box (loop, alt, opt, par) **Notes:** Default value: 20. ## gantt The object containing configurations specific for gantt diagrams ### titleTopMargin ### titleTopMargin | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ | | titleTopMargin | Margin top for the text over the gantt diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 25 ### barHeight | Parameter | Description | Type | Required | Values | | --------- | ----------------------------------- | ------- | -------- | ------------------ | | barHeight | The height of the bars in the graph | Integer | Required | Any Positive Value | **Notes:** Default value: 20 ### barGap | Parameter | Description | Type | Required | Values | | --------- | ---------------------------------------------------------------- | ------- | -------- | ------------------ | | barGap | The margin between the different activities in the gantt diagram | Integer | Optional | Any Positive Value | **Notes:** Default value: 4 ### topPadding | Parameter | Description | Type | Required | Values | | ---------- | -------------------------------------------------------------------------- | ------- | -------- | ------------------ | | topPadding | Margin between title and gantt diagram and between axis and gantt diagram. | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### rightPadding | Parameter | Description | Type | Required | Values | | ------------ | ----------------------------------------------------------------------- | ------- | -------- | ------------------ | | rightPadding | The space allocated for the section name to the right of the activities | Integer | Required | Any Positive Value | **Notes:** Default value: 75 ### leftPadding | Parameter | Description | Type | Required | Values | | ----------- | ---------------------------------------------------------------------- | ------- | -------- | ------------------ | | leftPadding | The space allocated for the section name to the left of the activities | Integer | Required | Any Positive Value | **Notes:** Default value: 75 ### gridLineStartPadding | Parameter | Description | Type | Required | Values | | -------------------- | -------------------------------------------- | ------- | -------- | ------------------ | | gridLineStartPadding | Vertical starting position of the grid lines | Integer | Required | Any Positive Value | **Notes:** Default value: 35 ### fontSize | Parameter | Description | Type | Required | Values | | --------- | ----------- | ------- | -------- | ------------------ | | fontSize | Font size | Integer | Required | Any Positive Value | **Notes:** Default value: 11 ### sectionFontSize | Parameter | Description | Type | Required | Values | | --------------- | ---------------------- | ------- | -------- | ------------------ | | sectionFontSize | Font size for sections | Integer | Required | Any Positive Value | **Notes:** Default value: 11 ### numberSectionStyles | Parameter | Description | Type | Required | Values | | ------------------- | ---------------------------------------- | ------- | -------- | ------------------ | | numberSectionStyles | The number of alternating section styles | Integer | 4 | Any Positive Value | **Notes:** Default value: 4 ### axisFormat | Parameter | Description | Type | Required | Values | | ---------- | --------------------------- | ---- | -------- | ---------------- | | axisFormat | Datetime format of the axis | 3 | Required | Date in yy-mm-dd | **Notes:** This might need adjustment to match your locale and preferences Default value: '%Y-%m-%d'. ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ### topAxis | Parameter | Description | Type | Required | Values | | --------- | ----------- | ------- | -------- | ----------- | | topAxis | See notes | Boolean | 4 | True, False | **Notes:** when this flag is set date labels will be added to the top of the chart **Default value false**. ## journey The object containing configurations specific for journey diagrams ### diagramMarginX | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### diagramMarginY | Parameter | Description | Type | Required | Values | | -------------- | -------------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginY | Margin to the over and under the sequence diagram. | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### leftMargin | Parameter | Description | Type | Required | Values | | ----------- | --------------------- | ------- | -------- | ------------------ | | actorMargin | Margin between actors | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### width | Parameter | Description | Type | Required | Values | | --------- | -------------------- | ------- | -------- | ------------------ | | width | Width of actor boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 150 ### height | Parameter | Description | Type | Required | Values | | --------- | --------------------- | ------- | -------- | ------------------ | | height | Height of actor boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 65 ### boxMargin | Parameter | Description | Type | Required | Values | | --------- | ------------------------ | ------- | -------- | ------------------ | | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### boxTextMargin | Parameter | Description | Type | Required | Values | | ------------- | -------------------------------------------- | ------- | -------- | ------------------ | | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 5 ### noteMargin | Parameter | Description | Type | Required | Values | | ---------- | ------------------- | ------- | -------- | ------------------ | | noteMargin | Margin around notes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### messageMargin | Parameter | Description | Type | Required | Values | | ------------- | ----------------------- | ------- | -------- | ------------------ | | messageMargin | Space between messages. | Integer | Required | Any Positive Value | **Notes:** Space between messages. Default value: 35 ### messageAlign | Parameter | Description | Type | Required | Values | | ------------ | --------------------------- | ---- | -------- | ------------------------- | | messageAlign | Multiline message alignment | 3 | 4 | 'left', 'center', 'right' | **Notes:** Default value: 'center' ### bottomMarginAdj | Parameter | Description | Type | Required | Values | | --------------- | ------------------------------------------ | ------- | -------- | ------------------ | | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | 4 | Any Positive Value | **Notes:** Depending on css styling this might need adjustment. Default value: 1 ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ### rightAngles | Parameter | Description | Type | Required | Values | | ----------- | --------------------------------- | ---- | -------- | ----------- | | rightAngles | Curved Arrows become Right Angles | 3 | 4 | true, false | **Notes:** This will display arrows that start and begin at the same node as right angles, rather than a curves Default value: false ## useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ## defaultRenderer | Parameter | Description | Type | Required | Values | | --------------- | ----------- | ------- | -------- | --------------------------- | | defaultRenderer | See notes | boolean | 4 | `dagre-d3`, `dagre-wrapper` | **Notes**: Decides which rendering engine that is to be used for the rendering. Legal values are: `dagre-d3` `dagre-wrapper` - wrapper for `dagre` implemented in mermaid Default value: `dagre-d3` ## useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ## defaultRenderer | Parameter | Description | Type | Required | Values | | --------------- | ----------- | ------- | -------- | --------------------------- | | defaultRenderer | See notes | boolean | 4 | `dagre-d3`, `dagre-wrapper` | **Notes:** Decides which rendering engine that is to be used for the rendering. Legal values are: `dagre-d3` `dagre-wrapper` - wrapper for `dagre` implemented in mermaid Default value: `dagre-d3` ## er The object containing configurations specific for entity relationship diagrams ### diagramPadding | Parameter | Description | Type | Required | Values | | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ | | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value | **Notes:** The amount of padding around the diagram as a whole so that embedded diagrams have margins, expressed in pixels Default value: 20 ### layoutDirection | Parameter | Description | Type | Required | Values | | --------------- | ---------------------------------------- | ------ | -------- | ---------------------- | | layoutDirection | Directional bias for layout of entities. | string | Required | "TB", "BT", "LR", "RL" | **Notes:** 'TB' for Top-Bottom, 'BT'for Bottom-Top, 'LR' for Left-Right, or 'RL' for Right to Left. T = top, B = bottom, L = left, and R = right. Default value: 'TB' ### minEntityWidth | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------- | ------- | -------- | ------------------ | | minEntityWidth | The minimum width of an entity box | Integer | Required | Any Positive Value | **Notes:** Expressed in pixels. Default value: 100 ### minEntityHeight | Parameter | Description | Type | Required | Values | | --------------- | ----------------------------------- | ------- | -------- | ------------------ | | minEntityHeight | The minimum height of an entity box | Integer | 4 | Any Positive Value | **Notes:** Expressed in pixels Default value: 75 ### entityPadding | Parameter | Description | Type | Required | Values | | ------------- | ------------------------------------------------------------ | ------- | -------- | ------------------ | | entityPadding | Minimum internal padding between text in box and box borders | Integer | 4 | Any Positive Value | **Notes:** The minimum internal padding between text in an entity box and the enclosing box borders, expressed in pixels. Default value: 15 ### stroke | Parameter | Description | Type | Required | Values | | --------- | ----------------------------------- | ------ | -------- | -------------------- | | stroke | Stroke color of box edges and lines | string | 4 | Any recognized color | **Notes:** Default value: 'gray' ### fill | Parameter | Description | Type | Required | Values | | --------- | -------------------------- | ------ | -------- | -------------------- | | fill | Fill color of entity boxes | string | 4 | Any recognized color | **Notes:** Default value: 'honeydew' ### fontSize | Parameter | Description | Type | Required | Values | | --------- | ------------------- | ------- | -------- | ------------------ | | fontSize | Font Size in pixels | Integer | | Any Positive Value | **Notes:** Font size (expressed as an integer representing a number of pixels) Default value: 12 ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the diagram width is locked to 100% and scaled based on available space. If set to false, the diagram reserves its absolute width. Default value: true ## pie The object containing configurations specific for pie diagrams ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the diagram width is locked to 100% and scaled based on available space. If set to false, the diagram reserves its absolute width. Default value: true ## requirement The object containing configurations specific for req diagrams ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the diagram width is locked to 100% and scaled based on available space. If set to false, the diagram reserves its absolute width. Default value: true ## c4 The object containing configurations specific for c4 diagrams ### diagramMarginX | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginX | Margin to the right and left of the c4 diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### diagramMarginY | Parameter | Description | Type | Required | Values | | -------------- | ------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginY | Margin to the over and under the c4 diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### c4ShapeMargin | Parameter | Description | Type | Required | Values | | ------------- | --------------------- | ------- | -------- | ------------------ | | c4ShapeMargin | Margin between shapes | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### c4ShapePadding | Parameter | Description | Type | Required | Values | | -------------- | ---------------------- | ------- | -------- | ------------------ | | c4ShapePadding | Padding between shapes | Integer | Required | Any Positive Value | **Notes:** Default value: 20 ### width | Parameter | Description | Type | Required | Values | | --------- | --------------------- | ------- | -------- | ------------------ | | width | Width of person boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 216 ### height | Parameter | Description | Type | Required | Values | | --------- | ---------------------- | ------- | -------- | ------------------ | | height | Height of person boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 60 ### boxMargin | Parameter | Description | Type | Required | Values | | --------- | ------------------- | ------- | -------- | ------------------ | | boxMargin | Margin around boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the height and width is set to 100% and is then scaling with the available space. If set to false, the absolute space required is used. Default value: true ### c4ShapeInRow | Parameter | Description | Type | Required | Values | | ------------ | ----------- | ------- | -------- | ------------------ | | c4ShapeInRow | See Notes | Integer | Required | Any Positive Value | **Notes:** How many shapes to place in each row. Default value: 4 ### c4BoundaryInRow | Parameter | Description | Type | Required | Values | | --------------- | ----------- | ------- | -------- | ------------------ | | c4BoundaryInRow | See Notes | Integer | Required | Any Positive Value | **Notes:** How many boundaries to place in each row. Default value: 2 ### personFontSize This sets the font size of Person shape for the diagram **Notes:** Default value: 14. ### personFontFamily This sets the font family of Person shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### personFontWeight This sets the font weight of Person shape for the diagram **Notes:** Default value: normal. ### external_personFontSize This sets the font size of External Person shape for the diagram **Notes:** Default value: 14. ### external_personFontFamily This sets the font family of External Person shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_personFontWeight This sets the font weight of External Person shape for the diagram **Notes:** Default value: normal. ### systemFontSize This sets the font size of System shape for the diagram **Notes:** Default value: 14. ### systemFontFamily This sets the font family of System shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### systemFontWeight This sets the font weight of System shape for the diagram **Notes:** Default value: normal. ### external_systemFontSize This sets the font size of External System shape for the diagram **Notes:** Default value: 14. ### external_systemFontFamily This sets the font family of External System shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_systemFontWeight This sets the font weight of External System shape for the diagram **Notes:** Default value: normal. ### system_dbFontSize This sets the font size of System DB shape for the diagram **Notes:** Default value: 14. ### system_dbFontFamily This sets the font family of System DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### system_dbFontWeight This sets the font weight of System DB shape for the diagram **Notes:** Default value: normal. ### external_system_dbFontSize This sets the font size of External System DB shape for the diagram **Notes:** Default value: 14. ### external_system_dbFontFamily This sets the font family of External System DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_system_dbFontWeight This sets the font weight of External System DB shape for the diagram **Notes:** Default value: normal. ### system_queueFontSize This sets the font size of System Queue shape for the diagram **Notes:** Default value: 14. ### system_queueFontFamily This sets the font family of System Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### system_queueFontWeight This sets the font weight of System Queue shape for the diagram **Notes:** Default value: normal. ### external_system_queueFontSize This sets the font size of External System Queue shape for the diagram **Notes:** Default value: 14. ### external_system_queueFontFamily This sets the font family of External System Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_system_queueFontWeight This sets the font weight of External System Queue shape for the diagram **Notes:** Default value: normal. ### boundaryFontSize This sets the font size of Boundary shape for the diagram **Notes:** Default value: 14. ### boundaryFontFamily This sets the font family of Boundary shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### boundaryFontWeight This sets the font weight of Boundary shape for the diagram **Notes:** Default value: normal. ### messageFontSize This sets the font size of Message shape for the diagram **Notes:** Default value: 12. ### messageFontFamily This sets the font family of Message shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### messageFontWeight This sets the font weight of Message shape for the diagram **Notes:** Default value: normal. ### containerFontSize This sets the font size of Container shape for the diagram **Notes:** Default value: 14. ### containerFontFamily This sets the font family of Container shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### containerFontWeight This sets the font weight of Container shape for the diagram **Notes:** Default value: normal. ### external_containerFontSize This sets the font size of External Container shape for the diagram **Notes:** Default value: 14. ### external_containerFontFamily This sets the font family of External Container shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_containerFontWeight This sets the font weight of External Container shape for the diagram **Notes:** Default value: normal. ### container_dbFontSize This sets the font size of Container DB shape for the diagram **Notes:** Default value: 14. ### container_dbFontFamily This sets the font family of Container DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### container_dbFontWeight This sets the font weight of Container DB shape for the diagram **Notes:** Default value: normal. ### external_container_dbFontSize This sets the font size of External Container DB shape for the diagram **Notes:** Default value: 14. ### external_container_dbFontFamily This sets the font family of External Container DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_container_dbFontWeight This sets the font weight of External Container DB shape for the diagram **Notes:** Default value: normal. ### container_queueFontSize This sets the font size of Container Queue shape for the diagram **Notes:** Default value: 14. ### container_queueFontFamily This sets the font family of Container Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### container_queueFontWeight This sets the font weight of Container Queue shape for the diagram **Notes:** Default value: normal. ### external_container_queueFontSize This sets the font size of External Container Queue shape for the diagram **Notes:** Default value: 14. ### external_container_queueFontFamily This sets the font family of External Container Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_container_queueFontWeight This sets the font weight of External Container Queue shape for the diagram **Notes:** Default value: normal. ### componentFontSize This sets the font size of Component shape for the diagram **Notes:** Default value: 14. ### componentFontFamily This sets the font family of Component shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### componentFontWeight This sets the font weight of Component shape for the diagram **Notes:** Default value: normal. ### external_componentFontSize This sets the font size of External Component shape for the diagram **Notes:** Default value: 14. ### external_componentFontFamily This sets the font family of External Component shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_componentFontWeight This sets the font weight of External Component shape for the diagram **Notes:** Default value: normal. ### component_dbFontSize This sets the font size of Component DB shape for the diagram **Notes:** Default value: 14. ### component_dbFontFamily This sets the font family of Component DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### component_dbFontWeight This sets the font weight of Component DB shape for the diagram **Notes:** Default value: normal. ### external_component_dbFontSize This sets the font size of External Component DB shape for the diagram **Notes:** Default value: 14. ### external_component_dbFontFamily This sets the font family of External Component DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_component_dbFontWeight This sets the font weight of External Component DB shape for the diagram **Notes:** Default value: normal. ### component_queueFontSize This sets the font size of Component Queue shape for the diagram **Notes:** Default value: 14. ### component_queueFontFamily This sets the font family of Component Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### component_queueFontWeight This sets the font weight of Component Queue shape for the diagram **Notes:** Default value: normal. ### external_component_queueFontSize This sets the font size of External Component Queue shape for the diagram **Notes:** Default value: 14. ### external_component_queueFontFamily This sets the font family of External Component Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_component_queueFontWeight This sets the font weight of External Component Queue shape for the diagram **Notes:** Default value: normal. ### wrap This sets the auto-wrap state for the diagram **Notes:** Default value: true. ### wrapPadding This sets the auto-wrap padding for the diagram (sides only) **Notes:** Default value: 0. ## parse ### Parameters - `text` **[string][4]** - `parseError` **[Function][5]?** Returns **[boolean][6]** ## setSiteConfig ## setSiteConfig | Function | Description | Type | Values | | ------------- | ------------------------------------- | ----------- | --------------------------------------- | | setSiteConfig | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | **Notes:** Sets the siteConfig. The siteConfig is a protected configuration for repeat use. Calls to reset() will reset the currentConfig to siteConfig. Calls to reset(configApi.defaultConfig) will reset siteConfig and currentConfig to the defaultConfig Note: currentConfig is set in this function _Default value: At default, will mirror Global Config_ ### Parameters - `conf` **MermaidConfig** The base currentConfig to use as siteConfig Returns **[object][7]** The siteConfig ## getSiteConfig ## getSiteConfig | Function | Description | Type | Values | | ------------- | ------------------------------------------------- | ----------- | -------------------------------- | | setSiteConfig | Returns the current siteConfig base configuration | Get Request | Returns Any Values in siteConfig | **Notes**: Returns **any** values in siteConfig. Returns **[object][7]** The siteConfig ## setConfig ## setConfig | Function | Description | Type | Values | | ------------- | ------------------------------------- | ----------- | --------------------------------------- | | setSiteConfig | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | **Notes**: Sets the currentConfig. The parameter conf is sanitized based on the siteConfig.secure keys. Any values found in conf with key found in siteConfig.secure will be replaced with the corresponding siteConfig value. ### Parameters - `conf` **any** The potential currentConfig Returns **any** The currentConfig merged with the sanitized conf ## render Function that renders an svg with a graph from a chart definition. Usage example below. ```javascript mermaidAPI.initialize({ startOnLoad: true, }); $(function () { const graphDefinition = 'graph TB\na-->b'; const cb = function (svgGraph) { console.log(svgGraph); }; mermaidAPI.render('id1', graphDefinition, cb); }); ``` ### Parameters - `id` **[string][4]** The id of the element to be rendered - `text` **[string][4]** The graph definition - `cb` **function (svgCode: [string][4], bindFunctions: function (element: [Element][8]): void): void** - `container` **[Element][8]** Selector to element in which a div with the graph temporarily will be inserted. If one is provided a hidden div will be inserted in the body of the page instead. The element will be removed when rendering is completed. Returns **void** ## getConfig ## getConfig | Function | Description | Type | Return Values | | --------- | ------------------------- | ----------- | ------------------------------ | | getConfig | Obtains the currentConfig | Get Request | Any Values from current Config | **Notes**: Returns **any** the currentConfig Returns **any** The currentConfig ## sanitize ## sanitize | Function | Description | Type | Values | | -------- | -------------------------------------- | ----------- | ------ | | sanitize | Sets the siteConfig to desired values. | Put Request | None | Ensures options parameter does not attempt to override siteConfig secure keys **Notes**: modifies options in-place ### Parameters - `options` **any** The potential setConfig parameter ## addDirective Pushes in a directive to the configuration ### Parameters - `directive` **[object][7]** The directive to push in ## reset ## reset | Function | Description | Type | Required | Values | | -------- | ---------------------------- | ----------- | -------- | ------ | | reset | Resets currentConfig to conf | Put Request | Required | None | ## conf | Parameter | Description | Type | Required | Values | | --------- | -------------------------------------------------------------- | ---------- | -------- | -------------------------------------------- | | conf | base set of values, which currentConfig could be **reset** to. | Dictionary | Required | Any Values, with respect to the secure Array | **Notes**: (default: current siteConfig ) (optional, default `getSiteConfig()`) ### Parameters - `config` (optional, default `siteConfig`) Returns **void** ## initialize ### Parameters - `options` **MermaidConfig** ## ## mermaidAPI configuration defaults ```html ``` [1]: Setup.md?id=render [2]: 8.6.0_docs.md [3]: #mermaidapi-configuration-defaults [4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String [5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function [6]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean [7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object [8]: https://developer.mozilla.org/docs/Web/API/Element mermaid-js-mermaid-9bb0ed2/docs/Tutorials.md000066400000000000000000000050051433273745700211260ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Tutorials This is list of publicly available Tutorials for using Mermaid.JS . This is intended as a basic introduction for the use of the Live Editor for generating diagrams, and deploying Mermaid.JS through HTML. **Note that these tutorials might display an older interface, but the usage of the live-editor will largely be the same.** For most purposes, you can use the [Live Editor](https://mermaid-js.github.io/mermaid-live-editor), to quickly and easily render a diagram. ## Live-Editor Tutorials The definitions that can be generated the Live-Editor are also backwards-compatible as of version 8.7.0. [Chris Chinchilla: Hands on - Text-based diagrams with Mermaid](https://www.youtube.com/watch?v=4_LdV1cs2sA) [GitLab Unfiltered: How to Create Mermaid Diagrams](https://www.youtube.com/watch?v=SQ9QmuTHuSI&t=438s) [GitLab Unfiltered: Emilie adds a mermaid diagram to the handbook](https://www.youtube.com/watch?v=5RQqht3NNSE) [World of Zero: I Learn How To Build Flowcharts and Signal Diagram's in Mermaid.JS](https://www.youtube.com/watch?v=7_2IroEs6Is&t=207s) [Eddie Jaoude: Can you code your diagrams?](https://www.youtube.com/watch?v=9HZzKkAqrX8) ## Mermaid with HTML Examples are provided in [Getting Started](n00b-gettingStarted.md) **CodePen Examples:** https://codepen.io/CarlBoneri/pen/BQwZzq https://codepen.io/tdkn/pen/vZxQzd https://codepen.io/janzeteachesit/pen/OWWZKN ## Mermaid with Text Area https://codepen.io/Ryuno-Ki/pen/LNxwgR ## Mermaid in open source docs [K8s.io Diagram Guide](https://kubernetes.io/docs/contribute/style/diagram-guide/) [K8s.dev blog: Improve your documentation with Mermaid.js diagrams](https://www.kubernetes.dev/blog/2021/12/01/improve-your-documentation-with-mermaid.js-diagrams/) ## Jupyter Integration with mermaid-js Here's an example of Python integration with mermaid-js which uses the mermaid.ink service, that displays the graph in a Jupyter notebook. ```python import base64 from IPython.display import Image, display import matplotlib.pyplot as plt def mm(graph): graphbytes = graph.encode("ascii") base64_bytes = base64.b64encode(graphbytes) base64_string = base64_bytes.decode("ascii") display(Image(url="https://mermaid.ink/img/" + base64_string)) mm(""" graph LR; A--> B & C & D; B--> A & E; C--> A & E; D--> A & E; E--> B & C & D; """) ``` **Output** ![Example graph of the Python integration](img/python-mermaid-integration.png) mermaid-js-mermaid-9bb0ed2/docs/_navbar.md000066400000000000000000000007261433273745700205550ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. - Getting started - [Quick start](quickstart.md) - [Writing more pages](more-pages.md) - [Custom navbar](custom-navbar.md) - [Cover page](cover.md) - Configuration - [Configuration](configuration.md) - [Themes](themes.md) - [Using plugins](plugins.md) - [Markdown configuration](markdown.md) - [Language highlight](language-highlight.md) mermaid-js-mermaid-9bb0ed2/docs/_sidebar.md000066400000000000000000000026151433273745700207140ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. - 📔 Introduction - [About Mermaid](README.md) - [Deployment](n00b-gettingStarted.md) - [Syntax and Configuration](n00b-syntaxReference.md) - 📊 Diagram Syntax - [Flowchart](flowchart.md) - [Sequence Diagram](sequenceDiagram.md) - [Class Diagram](classDiagram.md) - [State Diagram](stateDiagram.md) - [Entity Relationship Diagram](entityRelationshipDiagram.md) - [User Journey](user-journey.md) - [Gantt](gantt.md) - [Pie Chart](pie.md) - [Requirement Diagram](requirementDiagram.md) - [Gitgraph (Git) Diagram 🔥](gitgraph.md) - [C4C Diagram (Context) Diagram 🦺⚠️](c4c.md) - [Mindmaps 🦺⚠️](mindmap.md) - [Other Examples](examples.md) - ⚙️ Deployment and Configuration - [Tutorials](Tutorials.md) - [API-Usage](usage.md) - [Mermaid API Configuration](Setup.md) - [Directives](directives.md) - [Theming](theming.md) - [Accessibility](accessibility.md) - [Mermaid CLI](mermaidCLI.md) - [Advanced usage](n00b-advanced.md) - 📚 Misc - [Use-Cases and Integrations](integrations.md) - [FAQ](faq.md) - 🙌 Contributions and Community - [Overview for Beginners](n00b-overview.md) - [Development and Contribution ](development.md) - [Changelog](CHANGELOG.md) - [Adding Diagrams ](newDiagram.md) - [Security ](security.md) mermaid-js-mermaid-9bb0ed2/docs/accessibility.md000066400000000000000000000174101433273745700217720ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Accessibility Options ## Accessibility Now with Mermaid library in much wider use, we have started to work towards more accessible features, based on the feedback from the community. To begin with, we have added a new feature to Mermaid library, which is to support accessibility options, **Accessibility Title** and **Accessibility Description**. This support for accessibility options is available for all the diagrams/chart types. Also, we have tired to keep the same format for the accessibility options, so that it is easy to understand and maintain. ## Defining Accessibility Options ### Single line accessibility values The diagram authors can now add the accessibility options in the diagram definition, using the `accTitle` and `accDescr` keywords, where each keyword is followed by `:` and the string value for title and description like: - `accTitle: "Your Accessibility Title"` or - `accDescr: "Your Accessibility Description"` **When these two options are defined, they will add a corresponding `` and `<desc>` tag in the SVG.** Let us take a look at the following example with a flowchart diagram: ```mermaid-example graph LR accTitle: Big decisions accDescr: Flow chart of the decision making process A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] ``` ```mermaid graph LR accTitle: Big decisions accDescr: Flow chart of the decision making process A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] ``` See in the code snippet above, the `accTitle` and `accDescr` are defined in the diagram definition. They result in the following tags in SVG code: ![Accessibility options rendered inside SVG](img/accessibility-div-example.png) ### Multi-line Accessibility title/description You can also define the accessibility options in a multi-line format, where the keyword is followed by opening curly bracket `{` and then multiple lines, followed by a closing `}`. `accTitle: My single line title value` (**_single line format_**) vs `accDescr: { My multi-line description of the diagram }` (**_multi-line format_**) Let us look at it in the following example, with same flowchart: ```mermaid-example graph LR accTitle: Big decisions accDescr { My multi-line description of the diagram } A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] ``` ```mermaid graph LR accTitle: Big decisions accDescr { My multi-line description of the diagram } A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] ``` See in the code snippet above, the `accTitle` and `accDescr` are defined in the diagram definition. They result in the following tags in SVG code: ![Accessibility options rendered inside SVG](img/accessibility-div-example-2.png) ### Sample Code Snippet for other diagram types #### Sequence Diagram ```mermaid-example sequenceDiagram accTitle: My Sequence Diagram accDescr: My Sequence Diagram Description Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` ```mermaid sequenceDiagram accTitle: My Sequence Diagram accDescr: My Sequence Diagram Description Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` #### Class Diagram ```mermaid-example classDiagram accTitle: My Class Diagram accDescr: My Class Diagram Description Vehicle <|-- Car ``` ```mermaid classDiagram accTitle: My Class Diagram accDescr: My Class Diagram Description Vehicle <|-- Car ``` #### State Diagram ```mermaid-example stateDiagram accTitle: My State Diagram accDescr: My State Diagram Description s1 --> s2 ``` ```mermaid stateDiagram accTitle: My State Diagram accDescr: My State Diagram Description s1 --> s2 ``` #### Entity Relationship Diagram ```mermaid-example erDiagram accTitle: My Entity Relationship Diagram accDescr: My Entity Relationship Diagram Description CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses ``` ```mermaid erDiagram accTitle: My Entity Relationship Diagram accDescr: My Entity Relationship Diagram Description CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses ``` #### User Journey Diagram ```mermaid-example journey accTitle: My User Journey Diagram accDescr: My User Journey Diagram Description title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` ```mermaid journey accTitle: My User Journey Diagram accDescr: My User Journey Diagram Description title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` #### Gantt Chart ```mermaid-example gantt accTitle: My Gantt Chart Accessibility Title accDescr: My Gantt Chart Accessibility Description title A Gantt Diagram dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d ``` ```mermaid gantt accTitle: My Gantt Chart Accessibility Title accDescr: My Gantt Chart Accessibility Description title A Gantt Diagram dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d ``` #### Pie Chart ```mermaid-example pie accTitle: My Pie Chart Accessibility Title accDescr: My Pie Chart Accessibility Description title Key elements in Product X "Calcium" : 42.96 "Potassium" : 50.05 "Magnesium" : 10.01 "Iron" : 5 ``` ```mermaid pie accTitle: My Pie Chart Accessibility Title accDescr: My Pie Chart Accessibility Description title Key elements in Product X "Calcium" : 42.96 "Potassium" : 50.05 "Magnesium" : 10.01 "Iron" : 5 ``` #### Requirement Diagram ```mermaid-example requirementDiagram accTitle: My Requirement Diagram accDescr: My Requirement Diagram Description requirement test_req { id: 1 text: the test text. risk: high verifymethod: test } element test_entity { type: simulation } test_entity - satisfies -> test_req ``` ```mermaid requirementDiagram accTitle: My Requirement Diagram accDescr: My Requirement Diagram Description requirement test_req { id: 1 text: the test text. risk: high verifymethod: test } element test_entity { type: simulation } test_entity - satisfies -> test_req ``` #### Gitgraph ```mermaid-example gitGraph accTitle: My Gitgraph Accessibility Title accDescr: My Gitgraph Accessibility Description commit commit branch develop checkout develop commit commit checkout main merge develop commit commit ``` ```mermaid gitGraph accTitle: My Gitgraph Accessibility Title accDescr: My Gitgraph Accessibility Description commit commit branch develop checkout develop commit commit checkout main merge develop commit commit ``` ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/breakingChanges.md��������������������������������������������������0000664�0000000�0000000�00000001514�14332737457�0022214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Breaking changes ### Breaking changes from history version to latest version: ## #1 ```javascript mermaid.initialize({ sequenceDiagram:{ ... } }) ``` has been changed to ```javascript mermaid.initialize({ sequence:{ ... } }) ``` ## #2 In old versions you needed to reference a CSS file in your HTML: ```html <link rel="stylesheet" href="mermaid.min.css" /> ``` or ```html <link rel="stylesheet" href="mermaid.forest.min.css" /> ``` Now it is not needed, and there are no more CSS files in the distribution files. You just: ```javascript mermaid.initialize({ theme: 'forest', }); ``` and it works like a charm because now the CSS is inline with the SVG to allow simpler portability. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/c4c.md��������������������������������������������������������������0000664�0000000�0000000�00000075451�14332737457�0017625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # C4 Diagrams > C4 Diagram: This is an experimental diagram for now. The syntax and properties can change in future releases. Proper documentation will be provided when the syntax is stable. Mermaid's c4 diagram syntax is compatible with plantUML. See example below: ```mermaid-example C4Context title System Context diagram for Internet Banking System Enterprise_Boundary(b0, "BankBoundary0") { Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") Person(customerB, "Banking Customer B") Person_Ext(customerC, "Banking Customer C", "desc") Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1") ``` ```mermaid C4Context title System Context diagram for Internet Banking System Enterprise_Boundary(b0, "BankBoundary0") { Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") Person(customerB, "Banking Customer B") Person_Ext(customerC, "Banking Customer C", "desc") Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1") ``` For an example, see the source code demos/index.html 5 types of C4 charts are supported. - System Context (C4Context) - Container diagram (C4Container) - Component diagram (C4Component) - Dynamic diagram (C4Dynamic) - Deployment diagram (C4Deployment) Please refer to the linked document [C4-PlantUML syntax](https://github.com/plantuml-stdlib/C4-PlantUML/blob/master/README.md) for how to write the c4 diagram. C4 diagram is fixed style, such as css color, so different css is not provided under different skins. updateElementStyle and UpdateElementStyle are written in the diagram last part. updateElementStyle is inconsistent with the original definition and updates the style of the relationship, including the offset of the text label relative to the original position. The layout does not use a fully automated layout algorithm. The position of shapes is adjusted by changing the order in which statements are written. So there is no plan to support the following Layout statements. The number of shapes per row and the number of boundaries can be adjusted using UpdateLayoutConfig. - Layout - - Lay_U, Lay_Up - - Lay_D, Lay_Down - - Lay_L, Lay_Left - - Lay_R, Lay_Right The following unfinished features are not supported in the short term. - \[ ] sprite - \[ ] tags - \[ ] link - \[ ] Legend - \[x] System Context - - \[x] Person(alias, label, ?descr, ?sprite, ?tags, $link) - - \[x] Person_Ext - - \[x] System(alias, label, ?descr, ?sprite, ?tags, $link) - - \[x] SystemDb - - \[x] SystemQueue - - \[x] System_Ext - - \[x] SystemDb_Ext - - \[x] SystemQueue_Ext - - \[x] Boundary(alias, label, ?type, ?tags, $link) - - \[x] Enterprise_Boundary(alias, label, ?tags, $link) - - \[x] System_Boundary - \[x] Container diagram - - \[x] Container(alias, label, ?techn, ?descr, ?sprite, ?tags, $link) - - \[x] ContainerDb - - \[x] ContainerQueue - - \[x] Container_Ext - - \[x] ContainerDb_Ext - - \[x] ContainerQueue_Ext - - \[x] Container_Boundary(alias, label, ?tags, $link) - \[x] Component diagram - - \[x] Component(alias, label, ?techn, ?descr, ?sprite, ?tags, $link) - - \[x] ComponentDb - - \[x] ComponentQueue - - \[x] Component_Ext - - \[x] ComponentDb_Ext - - \[x] ComponentQueue_Ext - \[x] Dynamic diagram - - \[x] RelIndex(index, from, to, label, ?tags, $link) - \[x] Deployment diagram - - \[x] Deployment_Node(alias, label, ?type, ?descr, ?sprite, ?tags, $link) - - \[x] Node(alias, label, ?type, ?descr, ?sprite, ?tags, $link): short name of Deployment_Node() - - \[x] Node_L(alias, label, ?type, ?descr, ?sprite, ?tags, $link): left aligned Node() - - \[x] Node_R(alias, label, ?type, ?descr, ?sprite, ?tags, $link): right aligned Node() - \[x] Relationship Types - - \[x] Rel(from, to, label, ?techn, ?descr, ?sprite, ?tags, $link) - - \[x] BiRel (bidirectional relationship) - - \[x] Rel_U, Rel_Up - - \[x] Rel_D, Rel_Down - - \[x] Rel_L, Rel_Left - - \[x] Rel_R, Rel_Right - - \[x] Rel_Back - - \[x] RelIndex \* Compatible with C4-Plantuml syntax, but ignores the index parameter. The sequence number is determined by the order in which the rel statements are written. - \[ ] Custom tags/stereotypes support and skin param updates - - \[ ] AddElementTag(tagStereo, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): Introduces a new element tag. The styles of the tagged elements are updated and the tag is displayed in the calculated legend. - - \[ ] AddRelTag(tagStereo, ?textColor, ?lineColor, ?lineStyle, ?sprite, ?techn, ?legendText, ?legendSprite): Introduces a new Relationship tag. The styles of the tagged relationships are updated and the tag is displayed in the calculated legend. - - \[x] UpdateElementStyle(elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): This call updates the default style of the elements (component, ...) and creates no additional legend entry. - - \[x] UpdateRelStyle(from, to, ?textColor, ?lineColor, ?offsetX, ?offsetY): This call updates the default relationship colors and creates no additional legend entry. Two new parameters, offsetX and offsetY, are added to set the offset of the original position of the text. - - \[ ] RoundedBoxShape(): This call returns the name of the rounded box shape and can be used as ?shape argument. - - \[ ] EightSidedShape(): This call returns the name of the eight sided shape and can be used as ?shape argument. - - \[ ] DashedLine(): This call returns the name of the dashed line and can be used as ?lineStyle argument. - - \[ ] DottedLine(): This call returns the name of the dotted line and can be used as ?lineStyle argument. - - \[ ] BoldLine(): This call returns the name of the bold line and can be used as ?lineStyle argument. - - \[x] UpdateLayoutConfig(?c4ShapeInRow, ?c4BoundaryInRow): New. This call updates the default c4ShapeInRow(4) and c4BoundaryInRow(2). There are two ways to assign parameters with question marks. One uses the non-named parameter assignment method in the order of the parameters, and the other uses the named parameter assignment method, where the name must start with a $ symbol. Example: UpdateRelStyle(from, to, ?textColor, ?lineColor, ?offsetX, ?offsetY) ``` UpdateRelStyle(customerA, bankA, "red", "blue", "-40", "60") UpdateRelStyle(customerA, bankA, $offsetX="-40", $offsetY="60", $lineColor="blue", $textColor="red") UpdateRelStyle(customerA, bankA, $offsetY="60") ``` ## C4 System Context Diagram (C4Context) ```mermaid-example C4Context title System Context diagram for Internet Banking System Enterprise_Boundary(b0, "BankBoundary0") { Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") Person(customerB, "Banking Customer B") Person_Ext(customerC, "Banking Customer C", "desc") Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1") ``` ```mermaid C4Context title System Context diagram for Internet Banking System Enterprise_Boundary(b0, "BankBoundary0") { Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") Person(customerB, "Banking Customer B") Person_Ext(customerC, "Banking Customer C", "desc") Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1") ``` ## C4 Container diagram (C4Container) ```mermaid-example C4Container title Container diagram for Internet Banking System System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system", $tags="v1.0") Person(customer, Customer, "A customer of the bank, with personal bank accounts", $tags="v1.0") Container_Boundary(c1, "Internet Banking") { Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to cutomers via their web browser") Container_Ext(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device") Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA") ContainerDb(database, "Database", "SQL Database", "Stores user registration information, hashed auth credentials, access logs, etc.") ContainerDb_Ext(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API") } System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") Rel(customer, web_app, "Uses", "HTTPS") UpdateRelStyle(customer, web_app, $offsetY="60", $offsetX="90") Rel(customer, spa, "Uses", "HTTPS") UpdateRelStyle(customer, spa, $offsetY="-40") Rel(customer, mobile_app, "Uses") UpdateRelStyle(customer, mobile_app, $offsetY="-30") Rel(web_app, spa, "Delivers") UpdateRelStyle(web_app, spa, $offsetX="130") Rel(spa, backend_api, "Uses", "async, JSON/HTTPS") Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS") Rel_Back(database, backend_api, "Reads from and writes to", "sync, JDBC") Rel(email_system, customer, "Sends e-mails to") UpdateRelStyle(email_system, customer, $offsetX="-45") Rel(backend_api, email_system, "Sends e-mails using", "sync, SMTP") UpdateRelStyle(backend_api, email_system, $offsetY="-60") Rel(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS") UpdateRelStyle(backend_api, banking_system, $offsetY="-50", $offsetX="-140") ``` ```mermaid C4Container title Container diagram for Internet Banking System System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system", $tags="v1.0") Person(customer, Customer, "A customer of the bank, with personal bank accounts", $tags="v1.0") Container_Boundary(c1, "Internet Banking") { Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to cutomers via their web browser") Container_Ext(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device") Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA") ContainerDb(database, "Database", "SQL Database", "Stores user registration information, hashed auth credentials, access logs, etc.") ContainerDb_Ext(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API") } System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") Rel(customer, web_app, "Uses", "HTTPS") UpdateRelStyle(customer, web_app, $offsetY="60", $offsetX="90") Rel(customer, spa, "Uses", "HTTPS") UpdateRelStyle(customer, spa, $offsetY="-40") Rel(customer, mobile_app, "Uses") UpdateRelStyle(customer, mobile_app, $offsetY="-30") Rel(web_app, spa, "Delivers") UpdateRelStyle(web_app, spa, $offsetX="130") Rel(spa, backend_api, "Uses", "async, JSON/HTTPS") Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS") Rel_Back(database, backend_api, "Reads from and writes to", "sync, JDBC") Rel(email_system, customer, "Sends e-mails to") UpdateRelStyle(email_system, customer, $offsetX="-45") Rel(backend_api, email_system, "Sends e-mails using", "sync, SMTP") UpdateRelStyle(backend_api, email_system, $offsetY="-60") Rel(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS") UpdateRelStyle(backend_api, banking_system, $offsetY="-50", $offsetX="-140") ``` ## C4 Component diagram (C4Component) ```mermaid-example C4Component title Component diagram for Internet Banking System - API Application Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.") Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile mobile device.") ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") Container_Boundary(api, "API Application") { Component(sign, "Sign In Controller", "MVC Rest Controller", "Allows users to sign in to the internet banking system") Component(accounts, "Accounts Summary Controller", "MVC Rest Controller", "Provides customers with a summary of their bank accounts") Component(security, "Security Component", "Spring Bean", "Provides functionality related to singing in, changing passwords, etc.") Component(mbsfacade, "Mainframe Banking System Facade", "Spring Bean", "A facade onto the mainframe banking system.") Rel(sign, security, "Uses") Rel(accounts, mbsfacade, "Uses") Rel(security, db, "Read & write to", "JDBC") Rel(mbsfacade, mbs, "Uses", "XML/HTTPS") } Rel_Back(spa, sign, "Uses", "JSON/HTTPS") Rel(spa, accounts, "Uses", "JSON/HTTPS") Rel(ma, sign, "Uses", "JSON/HTTPS") Rel(ma, accounts, "Uses", "JSON/HTTPS") UpdateRelStyle(spa, sign, $offsetY="-40") UpdateRelStyle(spa, accounts, $offsetX="40", $offsetY="40") UpdateRelStyle(ma, sign, $offsetX="-90", $offsetY="40") UpdateRelStyle(ma, accounts, $offsetY="-40") UpdateRelStyle(sign, security, $offsetX="-160", $offsetY="10") UpdateRelStyle(accounts, mbsfacade, $offsetX="140", $offsetY="10") UpdateRelStyle(security, db, $offsetY="-40") UpdateRelStyle(mbsfacade, mbs, $offsetY="-40") ``` ```mermaid C4Component title Component diagram for Internet Banking System - API Application Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.") Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile mobile device.") ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") Container_Boundary(api, "API Application") { Component(sign, "Sign In Controller", "MVC Rest Controller", "Allows users to sign in to the internet banking system") Component(accounts, "Accounts Summary Controller", "MVC Rest Controller", "Provides customers with a summary of their bank accounts") Component(security, "Security Component", "Spring Bean", "Provides functionality related to singing in, changing passwords, etc.") Component(mbsfacade, "Mainframe Banking System Facade", "Spring Bean", "A facade onto the mainframe banking system.") Rel(sign, security, "Uses") Rel(accounts, mbsfacade, "Uses") Rel(security, db, "Read & write to", "JDBC") Rel(mbsfacade, mbs, "Uses", "XML/HTTPS") } Rel_Back(spa, sign, "Uses", "JSON/HTTPS") Rel(spa, accounts, "Uses", "JSON/HTTPS") Rel(ma, sign, "Uses", "JSON/HTTPS") Rel(ma, accounts, "Uses", "JSON/HTTPS") UpdateRelStyle(spa, sign, $offsetY="-40") UpdateRelStyle(spa, accounts, $offsetX="40", $offsetY="40") UpdateRelStyle(ma, sign, $offsetX="-90", $offsetY="40") UpdateRelStyle(ma, accounts, $offsetY="-40") UpdateRelStyle(sign, security, $offsetX="-160", $offsetY="10") UpdateRelStyle(accounts, mbsfacade, $offsetX="140", $offsetY="10") UpdateRelStyle(security, db, $offsetY="-40") UpdateRelStyle(mbsfacade, mbs, $offsetY="-40") ``` ## C4 Dynamic diagram (C4Dynamic) ```mermaid-example C4Dynamic title Dynamic diagram for Internet Banking System - API Application ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.") Container_Boundary(b, "API Application") { Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.") Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.") } Rel(c1, c2, "Submits credentials to", "JSON/HTTPS") Rel(c2, c3, "Calls isAuthenticated() on") Rel(c3, c4, "select * from users where username = ?", "JDBC") UpdateRelStyle(c1, c2, $textColor="red", $offsetY="-40") UpdateRelStyle(c2, c3, $textColor="red", $offsetX="-40", $offsetY="60") UpdateRelStyle(c3, c4, $textColor="red", $offsetY="-40", $offsetX="10") ``` ```mermaid C4Dynamic title Dynamic diagram for Internet Banking System - API Application ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.") Container_Boundary(b, "API Application") { Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.") Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.") } Rel(c1, c2, "Submits credentials to", "JSON/HTTPS") Rel(c2, c3, "Calls isAuthenticated() on") Rel(c3, c4, "select * from users where username = ?", "JDBC") UpdateRelStyle(c1, c2, $textColor="red", $offsetY="-40") UpdateRelStyle(c2, c3, $textColor="red", $offsetX="-40", $offsetY="60") UpdateRelStyle(c3, c4, $textColor="red", $offsetY="-40", $offsetX="10") ``` ## C4 Deployment diagram (C4Deployment) ```mermaid-example C4Deployment title Deployment Diagram for Internet Banking System - Live Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){ Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.") } Deployment_Node(comp, "Customer's computer", "Mircosoft Windows or Apple macOS"){ Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox,<br/> Apple Safari or Microsoft Edge"){ Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.") } } Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){ Deployment_Node(dn, "bigbank-api*** x8", "Ubuntu 16.04 LTS"){ Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){ Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.") } } Deployment_Node(bb2, "bigbank-web*** x4", "Ubuntu 16.04 LTS"){ Deployment_Node(apache2, "Apache Tomcat", "Apache Tomcat 8.x"){ Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.") } } Deployment_Node(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS"){ Deployment_Node(oracle, "Oracle - Primary", "Oracle 12c"){ ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") } } Deployment_Node(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS") { Deployment_Node(oracle2, "Oracle - Secondary", "Oracle 12c") { ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") } } } Rel(mobile, api, "Makes API calls to", "json/HTTPS") Rel(spa, api, "Makes API calls to", "json/HTTPS") Rel_U(web, spa, "Delivers to the customer's web browser") Rel(api, db, "Reads from and writes to", "JDBC") Rel(api, db2, "Reads from and writes to", "JDBC") Rel_R(db, db2, "Replicates data to") UpdateRelStyle(spa, api, $offsetY="-40") UpdateRelStyle(web, spa, $offsetY="-40") UpdateRelStyle(api, db, $offsetY="-20", $offsetX="5") UpdateRelStyle(api, db2, $offsetX="-40", $offsetY="-20") UpdateRelStyle(db, db2, $offsetY="-10") ``` ```mermaid C4Deployment title Deployment Diagram for Internet Banking System - Live Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){ Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.") } Deployment_Node(comp, "Customer's computer", "Mircosoft Windows or Apple macOS"){ Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox,<br/> Apple Safari or Microsoft Edge"){ Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.") } } Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){ Deployment_Node(dn, "bigbank-api*** x8", "Ubuntu 16.04 LTS"){ Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){ Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.") } } Deployment_Node(bb2, "bigbank-web*** x4", "Ubuntu 16.04 LTS"){ Deployment_Node(apache2, "Apache Tomcat", "Apache Tomcat 8.x"){ Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.") } } Deployment_Node(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS"){ Deployment_Node(oracle, "Oracle - Primary", "Oracle 12c"){ ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") } } Deployment_Node(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS") { Deployment_Node(oracle2, "Oracle - Secondary", "Oracle 12c") { ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") } } } Rel(mobile, api, "Makes API calls to", "json/HTTPS") Rel(spa, api, "Makes API calls to", "json/HTTPS") Rel_U(web, spa, "Delivers to the customer's web browser") Rel(api, db, "Reads from and writes to", "JDBC") Rel(api, db2, "Reads from and writes to", "JDBC") Rel_R(db, db2, "Replicates data to") UpdateRelStyle(spa, api, $offsetY="-40") UpdateRelStyle(web, spa, $offsetY="-40") UpdateRelStyle(api, db, $offsetY="-20", $offsetX="5") UpdateRelStyle(api, db2, $offsetX="-40", $offsetY="-20") UpdateRelStyle(db, db2, $offsetY="-10") ``` �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/classDiagram.md�����������������������������������������������������0000664�0000000�0000000�00000050113�14332737457�0021532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Class diagrams > "In software engineering, a class diagram in the Unified Modeling Language (UML) is a type of static structure diagram that describes the structure of a system by showing the system's classes, their attributes, operations (or methods), and the relationships among objects." > Wikipedia The class diagram is the main building block of object-oriented modeling. It is used for general conceptual modeling of the structure of the application, and for detailed modeling to translate the models into programming code. Class diagrams can also be used for data modeling. The classes in a class diagram represent both the main elements, interactions in the application, and the classes to be programmed. Mermaid can render class diagrams. ```mermaid-example classDiagram Animal <|-- Duck Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } ``` ```mermaid classDiagram Animal <|-- Duck Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } ``` ## Syntax ### Class UML provides mechanisms to represent class members, such as attributes and methods, and additional information about them. A single instance of a class in the diagram contains three compartments: - The top compartment contains the name of the class. It is printed in bold and centered, and the first letter is capitalized. It may also contain optional annotation text describing the nature of the class. - The middle compartment contains the attributes of the class. They are left-aligned and the first letter is lowercase. - The bottom compartment contains the operations the class can execute. They are also left-aligned and the first letter is lowercase. ```mermaid-example classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount) ``` ```mermaid classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount) ``` ## Define a class There are two ways to define a class: - Explicitly using keyword **class** like `class Animal` which would define the Animal class. - Via a **relationship** which defines two classes at a time along with their relationship. For instance, `Vehicle <|-- Car`. ```mermaid-example classDiagram class Animal Vehicle <|-- Car ``` ```mermaid classDiagram class Animal Vehicle <|-- Car ``` Naming convention: a class name should be composed only of alphanumeric characters (including unicode), and underscores. ## Defining Members of a class UML provides mechanisms to represent class members such as attributes and methods, as well as additional information about them. Mermaid distinguishes between attributes and functions/methods based on if the **parenthesis** `()` are present or not. The ones with `()` are treated as functions/methods, and all others as attributes. There are two ways to define the members of a class, and regardless of whichever syntax is used to define the members, the output will still be same. The two different ways are : - Associate a member of a class using **:** (colon) followed by member name, useful to define one member at a time. For example: ```mermaid-example classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount) ``` ```mermaid classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount) ``` - Associate members of a class using **{}** brackets, where members are grouped within curly brackets. Suitable for defining multiple members at once. For example: ```mermaid-example classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) } ``` ```mermaid classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) } ``` #### Return Type Optionally you can end a method/function definition with the data type that will be returned (note: there must be a space between the final `)` and the return type). An example: ```mermaid-example classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int } ``` ```mermaid classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int } ``` #### Generic Types Members can be defined using generic types, such as `List<int>`, for fields, parameters, and return types by enclosing the type within `~` (**tilde**). Note: **nested** type declarations such as `List<List<int>>` are not currently supported. Generics can be represented as part of a class definition and also in the parameters or the return value of a method/function: ```mermaid-example classDiagram class Square~Shape~{ int id List~int~ position setPoints(List~int~ points) getPoints() List~int~ } Square : -List~string~ messages Square : +setMessages(List~string~ messages) Square : +getMessages() List~string~ ``` ```mermaid classDiagram class Square~Shape~{ int id List~int~ position setPoints(List~int~ points) getPoints() List~int~ } Square : -List~string~ messages Square : +setMessages(List~string~ messages) Square : +getMessages() List~string~ ``` #### Return Type Optionally you can end the method/function definition with the data type that will be returned. #### Visibility To describe the visibility (or encapsulation) of an attribute or method/function that is a part of a class (i.e. a class member), optional notation may be placed before that members' name: - `+` Public - `-` Private - `#` Protected - `~` Package/Internal > _note_ you can also include additional _classifiers_ to a method definition by adding the following notation to the _end_ of the method, i.e.: after the `()`: > > - `*` Abstract e.g.: `someAbstractMethod()*` > - `$` Static e.g.: `someStaticMethod()$` > _note_ you can also include additional _classifiers_ to a field definition by adding the following notation to the end of its name: > > - `$` Static e.g.: `String someField$` ## Defining Relationship A relationship is a general term covering the specific types of logical connections found on class and object diagrams. [classA][Arrow][ClassB] There are eight different types of relations defined for classes under UML which are currently supported: | Type | Description | | ---- | ------------- | ----------- | | < | -- | Inheritance | | \*-- | Composition | | o-- | Aggregation | | --> | Association | | -- | Link (Solid) | | ..> | Dependency | | .. | > | Realization | | .. | Link (Dashed) | ```mermaid-example classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP ``` ```mermaid classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP ``` We can use the labels to describe the nature of the relation between two classes. Also, arrowheads can be used in the opposite direction as well: ```mermaid-example classDiagram classA --|> classB : Inheritance classC --* classD : Composition classE --o classF : Aggregation classG --> classH : Association classI -- classJ : Link(Solid) classK ..> classL : Dependency classM ..|> classN : Realization classO .. classP : Link(Dashed) ``` ```mermaid classDiagram classA --|> classB : Inheritance classC --* classD : Composition classE --o classF : Aggregation classG --> classH : Association classI -- classJ : Link(Solid) classK ..> classL : Dependency classM ..|> classN : Realization classO .. classP : Link(Dashed) ``` ### Labels on Relations It is possible to add label text to a relation: [classA][Arrow][ClassB]:LabelText ```mermaid-example classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation ``` ```mermaid classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation ``` ### Two-way relations Relations can logically represent an N:M association: ```mermaid-example classDiagram Animal <|--|> Zebra ``` ```mermaid classDiagram Animal <|--|> Zebra ``` Here is the syntax: [Relation Type][Link][Relation Type] Where `Relation Type` can be one of: | Type | Description | | ---- | ----------- | ----------- | | < | | Inheritance | | \* | Composition | | o | Aggregation | | > | Association | | < | Association | | | > | Realization | And `Link` can be one of: | Type | Description | | ---- | ----------- | | -- | Solid | | .. | Dashed | ## Cardinality / Multiplicity on relations Multiplicity or cardinality in class diagrams indicates the number of instances of one class that can be linked to an instance of the other class. For example, each company will have one or more employees (not zero), and each employee currently works for zero or one companies. Multiplicity notations are placed near the end of an association. The different cardinality options are : - `1` Only 1 - `0..1` Zero or One - `1..*` One or more - `*` Many - `n` n {where n>1} - `0..n` zero to n {where n>1} - `1..n` one to n {where n>1} Cardinality can be easily defined by placing the text option within quotes `"` before or after a given arrow. For example: [classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText ```mermaid-example classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains ``` ```mermaid classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains ``` ## Annotations on classes It is possible to annotate classes with markers to provide additional metadata about the class. This can give a clearer indication about its nature. Some common annotations include: - `<<Interface>>` To represent an Interface class - `<<Abstract>>` To represent an abstract class - `<<Service>>` To represent a service class - `<<Enumeration>>` To represent an enum Annotations are defined within the opening `<<` and closing `>>`. There are two ways to add an annotation to a class, and either way the output will be same: - In a **_separate line_** after a class is defined: ```mermaid-example classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw() ``` ```mermaid classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw() ``` - In a **_nested structure_** along with the class definition: ```mermaid-example classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK } ``` ```mermaid classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK } ``` ## Comments Comments can be entered within a class diagram, which will be ignored by the parser. Comments need to be on their own line, and must be prefaced with `%%` (double percent signs). Any text until the next newline will be treated as a comment, including any class diagram syntax. ```mermaid-example classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() } ``` ```mermaid classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() } ``` ## Setting the direction of the diagram With class diagrams you can use the direction statement to set the direction in which the diagram will render: ```mermaid-example classDiagram direction RL class Student { -idCard : IdCard } class IdCard{ -id : int -name : string } class Bike{ -id : int -name : string } Student "1" --o "1" IdCard : carries Student "1" --o "1" Bike : rides ``` ```mermaid classDiagram direction RL class Student { -idCard : IdCard } class IdCard{ -id : int -name : string } class Bike{ -id : int -name : string } Student "1" --o "1" IdCard : carries Student "1" --o "1" Bike : rides ``` ## Interaction It is possible to bind a click event to a node. The click can lead to either a javascript callback or to a link which will be opened in a new browser tab. **Note**: This functionality is disabled when using `securityLevel='strict'` and enabled when using `securityLevel='loose'`. You would define these actions on a separate line after all classes have been declared. action className "reference" "tooltip" click className call callback() "tooltip" click className href "url" "tooltip" - _action_ is either `link` or `callback`, depending on which type of interaction you want to have called - _className_ is the id of the node that the action will be associated with - _reference_ is either the url link, or the function name for callback. - (_optional_) tooltip is a string to be displayed when hovering over element (note: The styles of the tooltip are set by the class .mermaidTooltip.) - note: callback function will be called with the nodeId as parameter. ### Examples _URL Link:_ ```mermaid-example classDiagram class Shape link Shape "https://www.github.com" "This is a tooltip for a link" class Shape2 click Shape2 href "https://www.github.com" "This is a tooltip for a link" ``` ```mermaid classDiagram class Shape link Shape "https://www.github.com" "This is a tooltip for a link" class Shape2 click Shape2 href "https://www.github.com" "This is a tooltip for a link" ``` _Callback:_ ```mermaid-example classDiagram class Shape callback Shape "callbackFunction" "This is a tooltip for a callback" class Shape2 click Shape2 call callbackFunction() "This is a tooltip for a callback" ``` ```mermaid classDiagram class Shape callback Shape "callbackFunction" "This is a tooltip for a callback" class Shape2 click Shape2 call callbackFunction() "This is a tooltip for a callback" ``` ```html <script> const callbackFunction = function () { alert('A callback was triggered'); }; </script> ``` ```mermaid-example classDiagram class Class01 class Class02 callback Class01 "callbackFunction" "Callback tooltip" link Class02 "https://www.github.com" "This is a link" class Class03 class Class04 click Class03 call callbackFunction() "Callback tooltip" click Class04 href "https://www.github.com" "This is a link" ``` ```mermaid classDiagram class Class01 class Class02 callback Class01 "callbackFunction" "Callback tooltip" link Class02 "https://www.github.com" "This is a link" class Class03 class Class04 click Class03 call callbackFunction() "Callback tooltip" click Class04 href "https://www.github.com" "This is a link" ``` > **Success** The tooltip functionality and the ability to link to urls are available from version 0.5.2. Beginner's tip—a full example using interactive links in an HTML page: ```html <body> <pre class="mermaid"> classDiagram Animal <|-- Duck Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } callback Duck callback "Tooltip" link Zebra "https://www.github.com" "This is a link" </pre> <script> const callback = function () { alert('A callback was triggered'); }; const config = { startOnLoad: true, securityLevel: 'loose', }; mermaid.initialize(config); </script> </body> ``` ## Styling ### Styling a node It is possible to apply specific styles such as a thicker border or a different background color to individual nodes. This is done by predefining classes in css styles that can be applied from the graph definition: ```html <style> .cssClass > rect { fill: #ff0000; stroke: #ffff00; stroke-width: 4px; } </style> ``` Then attaching that class to a specific node: cssClass "nodeId1" cssClass; It is also possible to attach a class to a list of nodes in one statement: cssClass "nodeId1,nodeId2" cssClass; A shorter form of adding a class is to attach the classname to the node using the `:::` operator: ```mermaid-example classDiagram class Animal:::cssClass ``` ```mermaid classDiagram class Animal:::cssClass ``` Or: ```mermaid-example classDiagram class Animal:::cssClass { -int sizeInFeet -canEat() } ``` ```mermaid classDiagram class Animal:::cssClass { -int sizeInFeet -canEat() } ``` ?> cssClasses cannot be added using this shorthand method at the same time as a relation statement. ?> Due to limitations with existing markup for class diagrams, it is not currently possible to define css classes within the diagram itself. **_Coming soon!_** ### Default Styles The main styling of the class diagram is done with a preset number of css classes. During rendering these classes are extracted from the file located at src/themes/class.scss. The classes used here are described below: | Class | Description | | ------------------ | ----------------------------------------------------------------- | | g.classGroup text | Styles for general class text | | classGroup .title | Styles for general class title | | g.classGroup rect | Styles for class diagram rectangle | | g.classGroup line | Styles for class diagram line | | .classLabel .box | Styles for class label box | | .classLabel .label | Styles for class label text | | composition | Styles for composition arrow head and arrow line | | aggregation | Styles for aggregation arrow head and arrow line(dashed or solid) | | dependency | Styles for dependency arrow head and arrow line | #### Sample stylesheet ```scss body { background: white; } g.classGroup text { fill: $nodeBorder; stroke: none; font-family: 'trebuchet ms', verdana, arial; font-family: var(--mermaid-font-family); font-size: 10px; .title { font-weight: bolder; } } g.classGroup rect { fill: $nodeBkg; stroke: $nodeBorder; } g.classGroup line { stroke: $nodeBorder; stroke-width: 1; } .classLabel .box { stroke: none; stroke-width: 0; fill: $nodeBkg; opacity: 0.5; } .classLabel .label { fill: $nodeBorder; font-size: 10px; } .relation { stroke: $nodeBorder; stroke-width: 1; fill: none; } @mixin composition { fill: $nodeBorder; stroke: $nodeBorder; stroke-width: 1; } #compositionStart { @include composition; } #compositionEnd { @include composition; } @mixin aggregation { fill: $nodeBkg; stroke: $nodeBorder; stroke-width: 1; } #aggregationStart { @include aggregation; } #aggregationEnd { @include aggregation; } #dependencyStart { @include composition; } #dependencyEnd { @include composition; } #extensionStart { @include composition; } #extensionEnd { @include composition; } ``` ## Configuration `Coming soon` �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/developer-docs/�����������������������������������������������������0000775�0000000�0000000�00000000000�14332737457�0021531�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/developer-docs/configuration.md�������������������������������������0000664�0000000�0000000�00000002606�14332737457�0024726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Configuration When mermaid starts, configuration is extracted to determine a configuration to be used for a diagram. There are 3 sources for configuration: - The default configuration - Overrides at the site level are set by the initialize call, and will be applied to all diagrams in the site/app. The term for this is the **siteConfig**. - Directives - diagram authors can update select configuration parameters directly in the diagram code via directives. These are applied to the render config. **The render config** is configuration that is used when rendering by applying these configurations. ## Theme configuration ## Starting mermaid ```mermaid-example sequenceDiagram Site->>mermaid: initialize Site->>mermaid: content loaded mermaid->>mermaidAPI: init ``` ```mermaid sequenceDiagram Site->>mermaid: initialize Site->>mermaid: content loaded mermaid->>mermaidAPI: init ``` ## Initialize The initialize call is applied **only once**. It is called by the site integrator in order to override the default configuration at a site level. ## configApi.reset This method resets the configuration for a diagram to the overall site configuration, which is the configuration provided by the site integrator. Before each rendering of a diagram, reset is called at the very beginning. ��������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/development.md������������������������������������������������������0000664�0000000�0000000�00000015616�14332737457�0021473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Development and Contribution 🙌 So you want to help? That's great! ![Image of happy people jumping with excitement](https://media.giphy.com/media/BlVnrxJgTGsUw/giphy.gif) Here are a few things to get you started on the right path. **The Docs Structure is dictated by [sidebar.md](https://github.com/mermaid-js/mermaid/edit/develop/src/docs/_sidebar.md)** **Note: Commits and Pull Requests should be directed to the develop branch.** ## Branching Mermaid uses a [Git Flow](https://guides.github.com/introduction/flow/)–inspired approach to branching. So development is done in the `develop` branch. Once development is done we branch a `release` branch from `develop` for testing. Once the release happens we merge the `release` branch with `master` and kill the `release` branch. This means that **you should branch off your pull request from develop** and direct all Pull Requests to it. ## Contributing Code We make all changes via Pull Requests. As we have many Pull Requests from developers new to mermaid, we have put in place a process, wherein _knsv, Knut Sveidqvist_ is the primary reviewer of changes and merging pull requests. The process is as follows: - Large changes reviewed by knsv or other developer asked to review by knsv - Smaller, low-risk changes like dependencies, documentation, etc. can be merged by active collaborators - Documentation (we encourage updates to the `src/docs` folder; you can submit them via direct commits) When you commit code, create a branch with the following naming convention: Start with the type, such as **feature** or **bug**, followed by the issue number for reference, and a text that describes the issue. **One example:** `feature/945_state_diagrams` **Another example:** `bug/123_nasty_bug_branch` ## Contributing to Documentation If it is not in the documentation, it's like it never happened. Wouldn't that be sad? With all the effort that was put into the feature? The docs are located in the `src/docs` folder and are written in Markdown. Just pick the right section and start typing. If you want to propose changes to the structure of the documentation, such as adding a new section or a new file you do that via the **[sidebar](https://github.com/mermaid-js/mermaid/edit/develop/src/docs/_sidebar.md)**. > **All the documents displayed in the GitHub.io page are listed in [sidebar.md](https://github.com/mermaid-js/mermaid/edit/develop/src/docs/_sidebar.md)**. The contents of <https://mermaid-js.github.io/mermaid/> are based on the docs from the `master` branch. Updates committed to the `master` branch are reflected in the [Mermaid Docs](https://mermaid-js.github.io/mermaid/) once released. ## How to Contribute to Documentation We are a little less strict here, it is OK to commit directly in the `develop` branch if you are a collaborator. The documentation is located in the `src/docs` directory and organized according to relevant subfolder. The `docs` folder will be automatically generated when committing to `src/docs` and should not be edited manually. We encourage contributions to the documentation at [mermaid-js/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/src/docs). We publish documentation using GitHub Pages with [Docsify](https://www.youtube.com/watch?v=TV88lp7egMw&t=3s) ### Add Unit Tests for Parsing This is important so that, if someone that does not know about this great feature suggests a change to the grammar, they get notified early on when that change breaks the parser. Another important aspect is that, without proper parsing, tests refactoring is pretty much impossible. ### Add E2E Tests This tests the rendering and visual appearance of the diagrams. This ensures that the rendering of that feature in the e2e will be reviewed in the release process going forward. Less chance that it breaks! To start working with the e2e tests: 1. Run `pnpm run dev` to start the dev server 2. Start **Cypress** by running `pnpm exec cypress open` in the **mermaid** folder. The rendering tests are very straightforward to create. There is a function `imgSnapshotTest`, which takes a diagram in text form and the mermaid options, and it renders that diagram in Cypress. When running in CI it will take a snapshot of the rendered diagram and compare it with the snapshot from last build and flag it for review if it differs. This is what a rendering test looks like: ```js it('should render forks and joins', () => { imgSnapshotTest( ` stateDiagram state fork_state <<fork>> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <<join>> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] `, { logLevel: 0 } ); cy.get('svg'); }); ``` ### Any Questions or Suggestions? After logging in at [GitHub.com](https://www.github.com), open or append to an issue [using the GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Documentation%22). ### How to Contribute a Suggestion Markdown is used to format the text, for more information about Markdown [see the GitHub Markdown help page](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax). To edit Docs on your computer: 1. Find the Markdown file (.md) to edit in the [mermaid-js/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/src/docs) directory in the `develop` branch. 2. Create a fork of the develop branch. 3. Make changes or add new documentation. 4. Commit changes to your fork and push it to GitHub. 5. Create a Pull Request of your fork. To edit Docs on GitHub: 1. Login to [GitHub.com](https://www.github.com). 2. Navigate to [mermaid-js/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/src/docs). 3. To edit a file, click the pencil icon at the top-right of the file contents panel. 4. Describe what you changed in the **Propose file change** section, located at the bottom of the page. 5. Submit your changes by clicking the button **Propose file change** at the bottom (by automatic creation of a fork and a new branch). 6. Create a Pull Request of your newly forked branch by clicking the green **Create Pull Request** button. ## Last Words Don't get daunted if it is hard in the beginning. We have a great community with only encouraging words. So, if you get stuck, ask for help and hints in the Slack forum. If you want to show off something good, show it off there. [Join our Slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) ![Image of superhero wishing you good luck](https://media.giphy.com/media/l49JHz7kJvl6MCj3G/giphy.gif) ������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/diagrams-and-syntax-and-examples/�����������������������������������0000775�0000000�0000000�00000000000�14332737457�0025045�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/diagrams-and-syntax-and-examples/flowchart.md�����������������������0000664�0000000�0000000�00000045077�14332737457�0027375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. --- sort: 3 title: Flowchart --- # Flowcharts - Basic Syntax ## Graph This statement declares the direction of the flowchart, either from top to bottom (`TD` or `TB`): ```mermaid-example graph TD Start --> Stop ``` ```mermaid graph TD Start --> Stop ``` or left to right (`LR`): ```mermaid-example graph LR Start --> Stop ``` ```mermaid graph LR Start --> Stop ``` ## Flowchart Orientation Possible FlowChart orientations are: - TB - top to bottom - TD - top-down (same as top to bottom) - BT - bottom to top - RL - right to left - LR - left to right ## Flowcharts This renders a flowchart that allows for features such as: more arrow types, multi directional arrows, and linking to and from subgraphs. Apart from the graph type, the syntax is the same. This is currently experimental. When the beta period is over, both the graph and flowchart keywords will render in this new way. At this point it is OK to start beta testing flowcharts. > **Important note** Do not type the word "end" as a Flowchart node. Capitalize all or any one the letters to keep the flowchart from breaking, i.e, "End" or "END". Or you can apply this [workaround](https://github.com/mermaid-js/mermaid/issues/1444#issuecomment-639528897).\*\* ## Nodes and shapes ### A node (default) ```mermaid-example graph LR id ``` ```mermaid graph LR id ``` > **Note** The id is what is displayed in the box. ### A node with text It is also possible to set text in the box that differs from the id. If this is done several times, only the last text found for the node will be rendered. Also if you define edges for the node later on, you can omit text definitions. The text previously defined will be used when rendering the box. ```mermaid-example graph LR id1[This is the text in the box] ``` ```mermaid graph LR id1[This is the text in the box] ``` ## Node Shapes ### A node with round edges ```mermaid-example graph LR id1(This is the text in the box) ``` ```mermaid graph LR id1(This is the text in the box) ``` ### A stadium-shaped node ```mermaid-example graph LR id1([This is the text in the box]) ``` ```mermaid graph LR id1([This is the text in the box]) ``` ### A node in a subroutine shape ```mermaid-example graph LR id1[[This is the text in the box]] ``` ```mermaid graph LR id1[[This is the text in the box]] ``` ### A node in a cylindrical shape ```mermaid-example graph LR id1[(Database)] ``` ```mermaid graph LR id1[(Database)] ``` ### A node in the form of a circle ```mermaid-example graph LR id1((This is the text in the circle)) ``` ```mermaid graph LR id1((This is the text in the circle)) ``` ### A node in an asymmetric shape ```mermaid-example graph LR id1>This is the text in the box] ``` ```mermaid graph LR id1>This is the text in the box] ``` Currently it is only possible to render the shape above, and not its mirror. _This might change with future releases._ ### A node (rhombus) ```mermaid-example graph LR id1{This is the text in the box} ``` ```mermaid graph LR id1{This is the text in the box} ``` ### A hexagonal node ```mermaid-example graph LR id1{{This is the text in the box}} ``` ```mermaid graph LR id1{{This is the text in the box}} ``` ### Parallelogram ```mermaid-example graph TD id1[/This is the text in the box/] ``` ```mermaid graph TD id1[/This is the text in the box/] ``` ### Parallelogram alt ```mermaid-example graph TD id1[\This is the text in the box\] ``` ```mermaid graph TD id1[\This is the text in the box\] ``` ### Trapezoid ```mermaid-example graph TD A[/Christmas\] ``` ```mermaid graph TD A[/Christmas\] ``` ### Trapezoid alt ```mermaid-example graph TD B[\Go shopping/] ``` ```mermaid graph TD B[\Go shopping/] ``` ## Links between nodes Nodes can be connected with links/edges. It is possible to have different types of links, or attach a text string on a link. ### Link with arrow head ```mermaid-example graph LR A-->B ``` ```mermaid graph LR A-->B ``` ### Open link ```mermaid-example graph LR A --- B ``` ```mermaid graph LR A --- B ``` ### Text on links ```mermaid-example graph LR A-- This is the text! ---B ``` ```mermaid graph LR A-- This is the text! ---B ``` or ```mermaid-example graph LR A---|This is the text|B ``` ```mermaid graph LR A---|This is the text|B ``` ### Link with arrow head and text ```mermaid-example graph LR A-->|text|B ``` ```mermaid graph LR A-->|text|B ``` or ```mermaid-example graph LR A-- text -->B ``` ```mermaid graph LR A-- text -->B ``` ### Dotted link ```mermaid-example graph LR; A-.->B; ``` ```mermaid graph LR; A-.->B; ``` ### Dotted link with text ```mermaid-example graph LR A-. text .-> B ``` ```mermaid graph LR A-. text .-> B ``` ### Thick link ```mermaid-example graph LR A ==> B ``` ```mermaid graph LR A ==> B ``` ### Thick link with text ```mermaid-example graph LR A == text ==> B ``` ```mermaid graph LR A == text ==> B ``` ### Chaining of links It is possible to declare many links on the same line as per below: ```mermaid-example graph LR A -- text --> B -- text2 --> C ``` ```mermaid graph LR A -- text --> B -- text2 --> C ``` It is also possible to declare multiple nodes links in the same line as per below: ```mermaid-example graph LR a --> b & c--> d ``` ```mermaid graph LR a --> b & c--> d ``` You can then describe dependencies in a very expressive way. Like the one-liner below: ```mermaid-example graph TB A & B--> C & D ``` ```mermaid graph TB A & B--> C & D ``` If you describe the same diagram using the the basic syntax, it will take four lines: ```mermaid-example graph TB A --> C A --> D B --> C B --> D ``` ```mermaid graph TB A --> C A --> D B --> C B --> D ``` A word of warning, one could go overboard with this, making the graph harder to read in markdown form. The Swedish word `lagom` comes to mind. It means, not too much and not too little. This goes for expressive syntaxes as well. ### New arrow types When using flowchart instead of graph there are new types of arrows supported as per below: ```mermaid-example flowchart LR A --o B B --x C ``` ```mermaid flowchart LR A --o B B --x C ``` ### Multi directional arrows When using flowchart instead of graph there is the possibility to use multidirectional arrows. ```mermaid-example flowchart LR A o--o B B <--> C C x--x D ``` ```mermaid flowchart LR A o--o B B <--> C C x--x D ``` ### Minimum length of a link Each node in the flowchart is ultimately assigned to a rank in the rendered graph, i.e. to a vertical or horizontal level (depending on the flowchart orientation), based on the nodes to which it is linked. By default, links can span any number of ranks, but you can ask for any link to be longer than the others by adding extra dashes in the link definition. In the following example, two extra dashes are added in the link from node _B_ to node _E_, so that it spans two more ranks than regular links: ```mermaid-example graph TD A[Start] --> B{Is it?}; B -->|Yes| C[OK]; C --> D[Rethink]; D --> B; B ---->|No| E[End]; ``` ```mermaid graph TD A[Start] --> B{Is it?}; B -->|Yes| C[OK]; C --> D[Rethink]; D --> B; B ---->|No| E[End]; ``` > **Note** The rendering engine may cause some links to be longer than > the number of ranks requested in order to accommodate the overall topology. When the link label is written in the middle of the link, the extra dashes must be added on the right side of the link. The following example is equivalent to the previous one: ```mermaid-example graph TD A[Start] --> B{Is it?}; B -- Yes --> C[OK]; C --> D[Rethink]; D --> B; B -- No ----> E[End]; ``` ```mermaid graph TD A[Start] --> B{Is it?}; B -- Yes --> C[OK]; C --> D[Rethink]; D --> B; B -- No ----> E[End]; ``` For dotted or thick links, the characters to add are equals signs or dots, as summed up in the following table: | Length | 1 | 2 | 3 | | ----------------- | :----: | :-----: | :------: | | Normal | `---` | `----` | `-----` | | Normal with arrow | `-->` | `--->` | `---->` | | Thick | `===` | `====` | `=====` | | Thick with arrow | `==>` | `===>` | `====>` | | Dotted | `-.-` | `-..-` | `-...-` | | Dotted with arrow | `-.->` | `-..->` | `-...->` | ## Special characters that break syntax Use quotes around text in order to render more troublesome characters, as in the example below: ```mermaid-example graph LR id1["This is the (text) in the box"] ``` ```mermaid graph LR id1["This is the (text) in the box"] ``` ### Entity codes to escape characters Special characters (including Unicode) can be included by using HTML escaping syntax: ```mermaid-example graph LR A["A double quote:#quot;"] -->B["A dec char:#9829;"] ``` ```mermaid graph LR A["A double quote:#quot;"] -->B["A dec char:#9829;"] ``` ## Subgraphs subgraph title graph definition end An example: ```mermaid-example graph TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end ``` ```mermaid graph TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end ``` You can also set an explicit id for the subgraph: ```mermaid-example graph TB c1-->a2 subgraph ide1 [one] a1-->a2 end ``` ```mermaid graph TB c1-->a2 subgraph ide1 [one] a1-->a2 end ``` ## Flowcharts With the graphtype `flowchart` it is also possible to set edges to and from subgraphs: ```mermaid-example flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end one --> two three --> two two --> c2 ``` ```mermaid flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end one --> two three --> two two --> c2 ``` ## Interaction A node can have click events bound that lead to either a JavaScript callback or to open a new browser tab. **Note**: This functionality is disabled when using `securityLevel='strict'` and enabled when using `securityLevel='loose'`. click nodeId callback click nodeId call callback() - nodeId is the id of the node - `callback` is the name of a JavaScript function defined on the page displaying the graph. The function will be called with the nodeId as an incoming parameter. ```html <script> const callback = function (nodeId) { alert('A callback was triggered on ' + nodeId); }; </script> ``` Examples of tooltip usage: The tooltip text is surrounded in double quotes. The styles of the tooltip are set by the class .mermaidTooltip. ```mermaid-example graph LR; A-->B; B-->C; C-->D; click A callback "Tooltip for a callback" click B "https://www.github.com" "This is a tooltip for a link" click A call callback() "Tooltip for a callback" click B href "https://www.github.com" "This is a tooltip for a link" ``` ```mermaid graph LR; A-->B; B-->C; C-->D; click A callback "Tooltip for a callback" click B "https://www.github.com" "This is a tooltip for a link" click A call callback() "Tooltip for a callback" click B href "https://www.github.com" "This is a tooltip for a link" ``` > **Success** The tooltip functionality and the ability to link to urls are available from version 0.5.2. ?> Due to limitations with how Docsify handles JavaScript callback functions, an alternate working demo for the above code can be viewed at [this jsfiddle](https://jsfiddle.net/s37cjoau/3/). Links are opened in the same browser tab/window by default. It is possible to change this by adding a link target to the click definition (`_self`, `_blank`, `_parent` and `_top` are supported): ```mermaid-example graph LR; A-->B; B-->C; C-->D; D-->E; click A "https://www.github.com" _blank click B "https://www.github.com" "Open this in a new tab" _blank click C href "https://www.github.com" _blank click D href "https://www.github.com" "Open this in a new tab" _blank ``` ```mermaid graph LR; A-->B; B-->C; C-->D; D-->E; click A "https://www.github.com" _blank click B "https://www.github.com" "Open this in a new tab" _blank click C href "https://www.github.com" _blank click D href "https://www.github.com" "Open this in a new tab" _blank ``` Beginner's tip—here's a full example of using interactive links in HTML: ```html <body> <pre class="mermaid"> graph LR; A-->B; B-->C; C-->D; click A callback "Tooltip" click B "https://www.github.com" "This is a link" click C call callback() "Tooltip" click D href "https://www.github.com" "This is a link" </pre> <script> const callback = function () { alert('A callback was triggered'); }; const config = { startOnLoad: true, flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'cardinal', }, securityLevel: 'loose', }; mermaid.initialize(config); </script> </body> ``` ### Comments Comments can be entered within a flow diagram, which will be ignored by the parser. Comments need to be on their own line, and must be prefaced with `%%` (double percent signs). Any text until the next newline will be treated as a comment, including all punctuation and any flow syntax. ```mermaid-example graph LR %% this is a comment A -- text --> B{node} A -- text --> B -- text2 --> C ``` ```mermaid graph LR %% this is a comment A -- text --> B{node} A -- text --> B -- text2 --> C ``` ## Styling and classes ### Styling links It is possible to style links. For instance, you might want to style a link that is going backwards in the flow. As links have no ids in the same way as nodes, some other way of attaching style is required. So instead of ids, the order number of when the link was defined in the graph is used, starting with zero. Here's a linkStyle statement that would apply style to the fourth link in the graph: linkStyle 3 stroke:#ff3,stroke-width:4px,color:red; You can specify a `default` to apply to all links, or you can give a comma-separated list of link order numbers. Instead of giving a styles option, you can also use custom d3 curve types with the following syntax: linkStyle default|numList|num interpolate curveType If you want to add both D3 and style options, instead of writing: linkStyle default interpolate cardinal linkStyle default stroke:#ff3,stroke-width:4px,color:red; You can combine them: linkStyle default interpolate cardinal stroke:#ff3,stroke-width:4px,color:red; ### Styling a node It is possible to apply specific styles such as a thicker border or a different background color to a node. ```mermaid-example graph LR id1(Start)-->id2(Stop) style id1 fill:#f9f,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5 ``` ```mermaid graph LR id1(Start)-->id2(Stop) style id1 fill:#f9f,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5 ``` #### Classes More convenient than defining the style every time is to define a class of styles and attach this class reference to multiple nodes. here's a class definition: classDef className fill:#f9f,stroke:#333,stroke-width:4px; and then attaching this class to a node is simply: class nodeId1 className; It is also possible to attach a class to multiple nodes in one statement: class nodeId1,nodeId2 className; An even shorter form of adding a class is to attach the classname to the node using the `:::`operator: ```mermaid-example graph LR A:::someclass --> B classDef someclass fill:#f96; ``` ```mermaid graph LR A:::someclass --> B classDef someclass fill:#f96; ``` ### Css classes It is also possible to predefine classes in css styles that can be applied from the graph definition: **Example style** ```css .cssClass > rect { fill: #ff0000; stroke: #ffff00; stroke-width: 4px; } ``` **Example definition** ```mermaid-example graph LR; A-->B[AAA<span>BBB</span>]; B-->D; class A cssClass; ``` ```mermaid graph LR; A-->B[AAA<span>BBB</span>]; B-->D; class A cssClass; ``` ### Default class If a class is named `default` it will be assigned to all nodes that do not have a specific class definition. classDef default fill:#f9f,stroke:#333,stroke-width:4px; ## Basic support for fontawesome It is possible to add icons from fontawesome. These are accessed via the syntax fa:#icon-class-name#. ```mermaid-example graph TD B["fa:fa-twitter for peace"] B-->C[fa:fa-ban forbidden] B-->D(fa:fa-spinner); B-->E(A fa:fa-camera-retro perhaps?); ``` ```mermaid graph TD B["fa:fa-twitter for peace"] B-->C[fa:fa-ban forbidden] B-->D(fa:fa-spinner); B-->E(A fa:fa-camera-retro perhaps?); ``` ## Graph declarations with spaces between vertices and link and without semicolon - After release 0.2.16, graph declaration statements do not need to end with a semicolon. (And they can continue to have the ending semicolon—it has now just become optional.) So the below graph declaration is valid along with the old declarations. - A single space is allowed between vertices and the link, however there should not be any space between a vertex and its text, or a link and its text. The old syntax of graph declarations will also work, so this new feature is optional and is introduced to improve readability. Below is an example of the new way to declare graph edges. This is valid alongside any old-style declarations of graph edges. ```mermaid-example graph LR A[Hard edge] -->|Link text| B(Round edge) B --> C{Decision} C -->|One| D[Result one] C -->|Two| E[Result two] ``` ```mermaid graph LR A[Hard edge] -->|Link text| B(Round edge) B --> C{Decision} C -->|One| D[Result one] C -->|Two| E[Result two] ``` ## Configuration... Is it possible to adjust the width of the rendered flowchart. This is done by defining **mermaid.flowchartConfig**, or by the CLI to use a json file with the configuration (which is described in the mermaidCLI page). In Javascript config parameters can be set by using `mermaid.flowchartConfig`: ```javascript mermaid.flowchartConfig = { width: '100%', }; ``` �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/directives.md�������������������������������������������������������0000664�0000000�0000000�00000022120�14332737457�0021276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Directives ## Directives Directives gives a diagram author the capability to alter the appearance of a diagram before rendering by changing the applied configuration. The significance of having directives is that you have them available while writing the diagram, and can modify the default global and diagram specific configurations. So, directives are applied on top of the default configurations. The beauty of directives is that you can use them to alter configuration settings for a specific diagram, i.e. at an individual level. While directives allow you to change most of the default configuration settings, there are some that are not available, that too for security reasons. Also, you do have the _option to define the set of configurations_ that you would allow to be available to the diagram author for overriding with help of directives. ## Types of Directives options Mermaid basically supports two types of configuration options to be overridden by directives. 1. _General/Top Level configurations_ : These are the configurations that are available and applied to all the diagram. **Some of the most important top-level** configurations are: - theme - fontFamily - logLevel - securityLevel - startOnLoad - secure 2. _Diagram specific configurations_ : These are the configurations that are available and applied to a specific diagram. For each diagram there are specific configuration that will alter how that particular diagram looks and behaves. For example, `mirrorActors` is a configuration that is specific to the `SequenceDiagram` and alter whether the actors are mirrored or not. So this config is available only for the `SequenceDiagram` type. **NOTE:** These options listed here are not all the configuration options. To get hold of all the configuration options, please refer to the [defaultConfig.js](https://github.com/mermaid-js/mermaid/blob/develop/src/defaultConfig.js) in the source code. Soon we plan to publish a complete list of top-level configurations & all the diagram specific configurations, with their possible values in the docs ## Declaring directives Now that we have defined the types of configurations that are available, we can learn how to declare directives. A directive always starts and end `%%` sign with directive text in between, like `%% {directive_text} %%`. Here the structure of a directive text is like a nested key-value pair map or a JSON object with root being _init_. Where all the general configurations are defined in the top level, and all the diagram specific configurations are defined one level deeper with diagram type as key/root for that section. Following code snippet shows the structure of a directive: %%{ init: { "theme": "dark", "fontFamily": "monospace", "logLevel": "info", "flowchart": { "htmlLabels": true, "curve": "linear" }, "sequence": { "mirrorActors": true } } }%% You can also define the directives in a single line, like this: %%{init: { **insert argument here**}}%% For example, the following code snippet: %%{init: { "sequence": { "mirrorActors":false }}}%% **Notes:** The json object that is passed as {**argument** } must be valid key value pairs and encased in quotation marks or it will be ignored. Valid Key Value pairs can be found in config. Example with a simple graph: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'dark' } }%% graph LR A-->B ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'dark' } }%% graph LR A-->B ``` Here the directive declaration will set the `logLevel` to `debug` and the `theme` to `dark` for a rendered mermaid diagram, changing the appearance of the diagram itself. Note: You can use 'init' or 'initialize' as both acceptable as init directives. Also note that `%%init%%` and `%%initialize%%` directives will be grouped together after they are parsed. This means: ```mmd2 %%{init: { 'logLevel': 'debug', 'theme': 'forest' } }%% %%{initialize: { 'logLevel': 'fatal', "theme":'dark', 'startOnLoad': true } }%% ... ``` parsing the above generates a single `%%init%%` JSON object below, combining the two directives and carrying over the last value given for `loglevel`: ```json5 { logLevel: 'fatal', theme: 'dark', startOnLoad: true, } ``` This will then be sent to `mermaid.initialize(...)` for rendering. ## Directive Examples More directive examples for diagram specific configuration overrides Now that the concept of directives has been explained, Let us see some more examples for directives usage: ### Changing Theme via directive The following code snippet changes theme to forest: `%%{init: { "theme": "forest" } }%%` Possible themes value are: `default`,`base`, `dark`, `forest` and `neutral`. Default Value is `default`. Example: ```mermaid-example %%{init: { "theme": "forest" } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ```mermaid %%{init: { "theme": "forest" } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing fontFamily via directive The following code snippet changes fontFamily to rebuchet MS, Verdana, Arial, Sans-Serif: `%%{init: { "fontFamily": "Trebuchet MS, Verdana, Arial, Sans-Serif" } }%%` Example: ```mermaid-example %%{init: { "fontFamily": "Trebuchet MS, Verdana, Arial, Sans-Serif" } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ```mermaid %%{init: { "fontFamily": "Trebuchet MS, Verdana, Arial, Sans-Serif" } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing logLevel via directive The following code snippet changes logLevel to 2: `%%{init: { "logLevel": 2 } }%%` Possible logLevel values are: - `1` for _debug_, - `2` for _info_ - `3` for _warn_ - `4` for _error_ - `5` for _only fatal errors_ Default Value is `5`. Example: ```mermaid-example %%{init: { "logLevel": 2 } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ```mermaid %%{init: { "logLevel": 2 } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing flowchart config via directive Some common flowchart configurations are: - _htmlLabels_: true/false - _curve_: linear/curve - _diagramPadding_: number - _useMaxWidth_: number For complete list of flowchart configurations, see [defaultConfig.js](https://github.com/mermaid-js/mermaid/blob/develop/src/defaultConfig.js) in the source code. _Soon we plan to publish a complete list all diagram specific configurations updated in the docs_ The following code snippet changes flowchart config: `%%{init: { "flowchart": { "htmlLabels": true, "curve": "linear" } } }%%` Here were are overriding only the flowchart config, and not the general config, where HtmlLabels is set to true and curve is set to linear. ```mermaid-example %%{init: { "flowchart": { "htmlLabels": true, "curve": "linear" } } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ```mermaid %%{init: { "flowchart": { "htmlLabels": true, "curve": "linear" } } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing Sequence diagram config via directive Some common sequence configurations are: - _width_: number - _height_: number - _messageAlign_: left, center, right - _mirrorActors_: boolean - _useMaxWidth_: boolean - _rightAngles_: boolean - _showSequenceNumbers_: boolean - _wrap_: boolean For complete list of sequence diagram configurations, see _defaultConfig.js_ in the source code. _Soon we plan to publish a complete list all diagram specific configurations updated in the docs_ So, `wrap` by default has a value of `false` for sequence diagrams. Let us see an example: ```mermaid-example sequenceDiagram Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine, How did you mother like the book I suggested? And did you catch with the new book about alien invasion? Alice->Bob: Good. Bob->Alice: Cool ``` ```mermaid sequenceDiagram Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine, How did you mother like the book I suggested? And did you catch with the new book about alien invasion? Alice->Bob: Good. Bob->Alice: Cool ``` Now let us enable wrap for sequence diagrams. The following code snippet changes sequence diagram config for `wrap` to `true`: `%%{init: { "sequence": { "wrap": true} } }%%` Using in the diagram above, the wrap will be enabled. ```mermaid-example %%{init: { "sequence": { "wrap": true, "width":300 } } }%% sequenceDiagram Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine, How did you mother like the book I suggested? And did you catch with the new book about alien invasion? Alice->Bob: Good. Bob->Alice: Cool ``` ```mermaid %%{init: { "sequence": { "wrap": true, "width":300 } } }%% sequenceDiagram Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine, How did you mother like the book I suggested? And did you catch with the new book about alien invasion? Alice->Bob: Good. Bob->Alice: Cool ``` ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/entityRelationshipDiagram.md����������������������������������������0000664�0000000�0000000�00000027116�14332737457�0024332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Entity Relationship Diagrams > An entity–relationship model (or ER model) describes interrelated things of interest in a specific domain of knowledge. A basic ER model is composed of entity types (which classify the things of interest) and specifies relationships that can exist between entities (instances of those entity types). Wikipedia. Note that practitioners of ER modelling almost always refer to _entity types_ simply as _entities_. For example the `CUSTOMER` entity _type_ would be referred to simply as the `CUSTOMER` entity. This is so common it would be inadvisable to do anything else, but technically an entity is an abstract _instance_ of an entity type, and this is what an ER diagram shows - abstract instances, and the relationships between them. This is why entities are always named using singular nouns. Mermaid can render ER diagrams ```mermaid-example erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses ``` ```mermaid erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses ``` Entity names are often capitalised, although there is no accepted standard on this, and it is not required in Mermaid. Relationships between entities are represented by lines with end markers representing cardinality. Mermaid uses the most popular crow's foot notation. The crow's foot intuitively conveys the possibility of many instances of the entity that it connects to. ER diagrams can be used for various purposes, ranging from abstract logical models devoid of any implementation details, through to physical models of relational database tables. It can be useful to include attribute definitions on ER diagrams to aid comprehension of the purpose and meaning of entities. These do not necessarily need to be exhaustive; often a small subset of attributes is enough. Mermaid allows them to be defined in terms of their _type_ and _name_. ```mermaid-example erDiagram CUSTOMER ||--o{ ORDER : places CUSTOMER { string name string custNumber string sector } ORDER ||--|{ LINE-ITEM : contains ORDER { int orderNumber string deliveryAddress } LINE-ITEM { string productCode int quantity float pricePerUnit } ``` ```mermaid erDiagram CUSTOMER ||--o{ ORDER : places CUSTOMER { string name string custNumber string sector } ORDER ||--|{ LINE-ITEM : contains ORDER { int orderNumber string deliveryAddress } LINE-ITEM { string productCode int quantity float pricePerUnit } ``` When including attributes on ER diagrams, you must decide whether to include foreign keys as attributes. This probably depends on how closely you are trying to represent relational table structures. If your diagram is a _logical_ model which is not meant to imply a relational implementation, then it is better to leave these out because the associative relationships already convey the way that entities are associated. For example, a JSON data structure can implement a one-to-many relationship without the need for foreign key properties, using arrays. Similarly an object-oriented programming language may use pointers or references to collections. Even for models that are intended for relational implementation, you might decide that inclusion of foreign key attributes duplicates information already portrayed by the relationships, and does not add meaning to entities. Ultimately, it's your choice. ## Syntax ### Entities and Relationships Mermaid syntax for ER diagrams is compatible with PlantUML, with an extension to label the relationship. Each statement consists of the following parts: <first-entity> [<relationship> <second-entity> : <relationship-label>] Where: - `first-entity` is the name of an entity. Names must begin with an alphabetic character and may also contain digits, hyphens, and underscores. - `relationship` describes the way that both entities inter-relate. See below. - `second-entity` is the name of the other entity. - `relationship-label` describes the relationship from the perspective of the first entity. For example: PROPERTY ||--|{ ROOM : contains This statement can be read as _a property contains one or more rooms, and a room is part of one and only one property_. You can see that the label here is from the first entity's perspective: a property contains a room, but a room does not contain a property. When considered from the perspective of the second entity, the equivalent label is usually very easy to infer. (Some ER diagrams label relationships from both perspectives, but this is not supported here, and is usually superfluous). Only the `first-entity` part of a statement is mandatory. This makes it possible to show an entity with no relationships, which can be useful during iterative construction of diagrams. If any other parts of a statement are specified, then all parts are mandatory. ### Relationship Syntax The `relationship` part of each statement can be broken down into three sub-components: - the cardinality of the first entity with respect to the second, - whether the relationship confers identity on a 'child' entity - the cardinality of the second entity with respect to the first Cardinality is a property that describes how many elements of another entity can be related to the entity in question. In the above example a `PROPERTY` can have one or more `ROOM` instances associated to it, whereas a `ROOM` can only be associated with one `PROPERTY`. In each cardinality marker there are two characters. The outermost character represents a maximum value, and the innermost character represents a minimum value. The table below summarises possible cardinalities. | Value (left) | Value (right) | Meaning | | :----------: | :-----------: | ----------------------------- | | `\|o` | `o\|` | Zero or one | | `\|\|` | `\|\|` | Exactly one | | `}o` | `o{` | Zero or more (no upper limit) | | `}\|` | `\|{` | One or more (no upper limit) | ### Identification Relationships may be classified as either _identifying_ or _non-identifying_ and these are rendered with either solid or dashed lines respectively. This is relevant when one of the entities in question can not have independent existence without the other. For example a firm that insures people to drive cars might need to store data on `NAMED-DRIVER`s. In modelling this we might start out by observing that a `CAR` can be driven by many `PERSON` instances, and a `PERSON` can drive many `CAR`s - both entities can exist without the other, so this is a non-identifying relationship that we might specify in Mermaid as: `PERSON }|..|{ CAR : "driver"`. Note the two dots in the middle of the relationship that will result in a dashed line being drawn between the two entities. But when this many-to-many relationship is resolved into two one-to-many relationships, we observe that a `NAMED-DRIVER` cannot exist without both a `PERSON` and a `CAR` - the relationships become identifying and would be specified using hyphens, which translate to a solid line: ```mermaid-example erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON ||--o{ NAMED-DRIVER : is ``` ```mermaid erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON ||--o{ NAMED-DRIVER : is ``` ### Attributes Attributes can be defined for entities by specifying the entity name followed by a block containing multiple `type name` pairs, where a block is delimited by an opening `{` and a closing `}`. For example: ```mermaid-example erDiagram CAR ||--o{ NAMED-DRIVER : allows CAR { string registrationNumber string make string model } PERSON ||--o{ NAMED-DRIVER : is PERSON { string firstName string lastName int age } ``` ```mermaid erDiagram CAR ||--o{ NAMED-DRIVER : allows CAR { string registrationNumber string make string model } PERSON ||--o{ NAMED-DRIVER : is PERSON { string firstName string lastName int age } ``` The attributes are rendered inside the entity boxes: ```mermaid-example erDiagram CAR ||--o{ NAMED-DRIVER : allows CAR { string registrationNumber string make string model } PERSON ||--o{ NAMED-DRIVER : is PERSON { string firstName string lastName int age } ``` ```mermaid erDiagram CAR ||--o{ NAMED-DRIVER : allows CAR { string registrationNumber string make string model } PERSON ||--o{ NAMED-DRIVER : is PERSON { string firstName string lastName int age } ``` The `type` and `name` values must begin with an alphabetic character and may contain digits, hyphens or underscores. Other than that, there are no restrictions, and there is no implicit set of valid data types. #### Attribute Keys and Comments Attributes may also have a `key` or comment defined. Keys can be "PK" or "FK", for Primary Key or Foreign Key. And a `comment` is defined by double quotes at the end of an attribute. Comments themselves cannot have double-quote characters in them. ```mermaid-example erDiagram CAR ||--o{ NAMED-DRIVER : allows CAR { string allowedDriver FK "The license of the allowed driver" string registrationNumber string make string model } PERSON ||--o{ NAMED-DRIVER : is PERSON { string driversLicense PK "The license #" string firstName string lastName int age } ``` ```mermaid erDiagram CAR ||--o{ NAMED-DRIVER : allows CAR { string allowedDriver FK "The license of the allowed driver" string registrationNumber string make string model } PERSON ||--o{ NAMED-DRIVER : is PERSON { string driversLicense PK "The license #" string firstName string lastName int age } ``` ### Other Things - If you want the relationship label to be more than one word, you must use double quotes around the phrase - If you don't want a label at all on a relationship, you must use an empty double-quoted string ## Styling ### Config options For simple color customization: | Name | Used as | | :------- | :------------------------------------------------------------------- | | `fill` | Background color of an entity or attribute | | `stroke` | Border color of an entity or attribute, line color of a relationship | ### Classes used The following CSS class selectors are available for richer styling: | Selector | Description | | :------------------------- | :---------------------------------------------------- | | `.er.attributeBoxEven` | The box containing attributes on even-numbered rows | | `.er.attributeBoxOdd` | The box containing attributes on odd-numbered rows | | `.er.entityBox` | The box representing an entity | | `.er.entityLabel` | The label for an entity | | `.er.relationshipLabel` | The label for a relationship | | `.er.relationshipLabelBox` | The box surrounding a relationship label | | `.er.relationshipLine` | The line representing a relationship between entities | ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/examples.md���������������������������������������������������������0000664�0000000�0000000�00000016641�14332737457�0020766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Examples This page contains a collection of examples of diagrams and charts that can be created through mermaid and its myriad applications. **If you wish to learn how to support mermaid on your webpage, read the [Beginner's Guide](/usage?id=usage).** **If you wish to learn about mermaid's syntax, Read the [Diagram Syntax](/flowchart?id=flowcharts-basic-syntax) section.** ## Basic Pie Chart ```mermaid-example pie title NETFLIX "Time spent looking for movie" : 90 "Time spent watching it" : 10 ``` ```mermaid pie title NETFLIX "Time spent looking for movie" : 90 "Time spent watching it" : 10 ``` ```mermaid-example pie title What Voldemort doesn't have? "FRIENDS" : 2 "FAMILY" : 3 "NOSE" : 45 ``` ```mermaid pie title What Voldemort doesn't have? "FRIENDS" : 2 "FAMILY" : 3 "NOSE" : 45 ``` ## Basic sequence diagram ```mermaid-example sequenceDiagram Alice ->> Bob: Hello Bob, how are you? Bob-->>John: How about you John? Bob--x Alice: I am good thanks! Bob-x John: I am good thanks! Note right of John: Bob thinks a long<br/>long time, so long<br/>that the text does<br/>not fit on a row. Bob-->Alice: Checking with John... Alice->John: Yes... John, how are you? ``` ```mermaid sequenceDiagram Alice ->> Bob: Hello Bob, how are you? Bob-->>John: How about you John? Bob--x Alice: I am good thanks! Bob-x John: I am good thanks! Note right of John: Bob thinks a long<br/>long time, so long<br/>that the text does<br/>not fit on a row. Bob-->Alice: Checking with John... Alice->John: Yes... John, how are you? ``` ## Basic flowchart ```mermaid-example graph LR A[Square Rect] -- Link text --> B((Circle)) A --> C(Round Rect) B --> D{Rhombus} C --> D ``` ```mermaid graph LR A[Square Rect] -- Link text --> B((Circle)) A --> C(Round Rect) B --> D{Rhombus} C --> D ``` ## Larger flowchart with some styling ```mermaid-example graph TB sq[Square shape] --> ci((Circle shape)) subgraph A od>Odd shape]-- Two line<br/>edge comment --> ro di{Diamond with <br/> line break} -.-> ro(Rounded<br>square<br>shape) di==>ro2(Rounded square shape) end %% Notice that no text in shape are added here instead that is appended further down e --> od3>Really long text with linebreak<br>in an Odd shape] %% Comments after double percent signs e((Inner / circle<br>and some odd <br>special characters)) --> f(,.?!+-*ز) cyr[Cyrillic]-->cyr2((Circle shape Начало)); classDef green fill:#9f6,stroke:#333,stroke-width:2px; classDef orange fill:#f96,stroke:#333,stroke-width:4px; class sq,e green class di orange ``` ```mermaid graph TB sq[Square shape] --> ci((Circle shape)) subgraph A od>Odd shape]-- Two line<br/>edge comment --> ro di{Diamond with <br/> line break} -.-> ro(Rounded<br>square<br>shape) di==>ro2(Rounded square shape) end %% Notice that no text in shape are added here instead that is appended further down e --> od3>Really long text with linebreak<br>in an Odd shape] %% Comments after double percent signs e((Inner / circle<br>and some odd <br>special characters)) --> f(,.?!+-*ز) cyr[Cyrillic]-->cyr2((Circle shape Начало)); classDef green fill:#9f6,stroke:#333,stroke-width:2px; classDef orange fill:#f96,stroke:#333,stroke-width:4px; class sq,e green class di orange ``` ## SequenceDiagram: Loops, alt and opt ```mermaid-example sequenceDiagram loop Daily query Alice->>Bob: Hello Bob, how are you? alt is sick Bob->>Alice: Not so good :( else is well Bob->>Alice: Feeling fresh like a daisy end opt Extra response Bob->>Alice: Thanks for asking end end ``` ```mermaid sequenceDiagram loop Daily query Alice->>Bob: Hello Bob, how are you? alt is sick Bob->>Alice: Not so good :( else is well Bob->>Alice: Feeling fresh like a daisy end opt Extra response Bob->>Alice: Thanks for asking end end ``` ## SequenceDiagram: Message to self in loop ```mermaid-example sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts<br/>prevail... John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ```mermaid sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts<br/>prevail... John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ## Sequence Diagram: Blogging app service communication ```mermaid-example sequenceDiagram participant web as Web Browser participant blog as Blog Service participant account as Account Service participant mail as Mail Service participant db as Storage Note over web,db: The user must be logged in to submit blog posts web->>+account: Logs in using credentials account->>db: Query stored accounts db->>account: Respond with query result alt Credentials not found account->>web: Invalid credentials else Credentials found account->>-web: Successfully logged in Note over web,db: When the user is authenticated, they can now submit new posts web->>+blog: Submit new post blog->>db: Store post data par Notifications blog--)mail: Send mail to blog subscribers blog--)db: Store in-site notifications and Response blog-->>-web: Successfully posted end end ``` ```mermaid sequenceDiagram participant web as Web Browser participant blog as Blog Service participant account as Account Service participant mail as Mail Service participant db as Storage Note over web,db: The user must be logged in to submit blog posts web->>+account: Logs in using credentials account->>db: Query stored accounts db->>account: Respond with query result alt Credentials not found account->>web: Invalid credentials else Credentials found account->>-web: Successfully logged in Note over web,db: When the user is authenticated, they can now submit new posts web->>+blog: Submit new post blog->>db: Store post data par Notifications blog--)mail: Send mail to blog subscribers blog--)db: Store in-site notifications and Response blog-->>-web: Successfully posted end end ``` ## A commit flow diagram. ```mermaid-example gitGraph: commit "Ashish" branch newbranch checkout newbranch commit id:"1111" commit tag:"test" checkout main commit type: HIGHLIGHT commit merge newbranch commit branch b2 commit ``` ```mermaid gitGraph: commit "Ashish" branch newbranch checkout newbranch commit id:"1111" commit tag:"test" checkout main commit type: HIGHLIGHT commit merge newbranch commit branch b2 commit ``` �����������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/faq.md��������������������������������������������������������������0000664�0000000�0000000�00000002142�14332737457�0017706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Frequently Asked Questions 1. [How to add title to flowchart?](https://github.com/knsv/mermaid/issues/556#issuecomment-363182217) 2. [How to specify custom CSS file?](https://github.com/mermaidjs/mermaid.cli/pull/24#issuecomment-373402785) 3. [How to fix tooltip misplacement issue?](https://github.com/knsv/mermaid/issues/542#issuecomment-3343564621) 4. [How to specify gantt diagram xAxis format?](https://github.com/knsv/mermaid/issues/269#issuecomment-373229136) 5. [How to bind an event?](https://github.com/knsv/mermaid/issues/372) 6. [How to add newline in the text?](https://github.com/knsv/mermaid/issues/384#issuecomment-281339381) 7. [How to have special characters in link text?](https://github.com/knsv/mermaid/issues/407#issuecomment-329944735) 8. [How to change Flowchart curve style?](https://github.com/knsv/mermaid/issues/580#issuecomment-373929046) 9. [How to create a Flowchart end-Node that says "End"](https://github.com/mermaid-js/mermaid/issues/1444#issuecomment-639528897) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/flowchart.md��������������������������������������������������������0000664�0000000�0000000�00000051341�14332737457�0021135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Flowcharts - Basic Syntax All Flowcharts are composed of **nodes**, the geometric shapes and **edges**, the arrows or lines. The mermaid code defines the way that these **nodes** and **edges** are made and interact. It can also accommodate different arrow types, multi directional arrows, and linking to and from subgraphs. > **Important note**: Do not type the word "end" as a Flowchart node. Capitalize all or any one the letters to keep the flowchart from breaking, i.e, "End" or "END". Or you can apply this [workaround](https://github.com/mermaid-js/mermaid/issues/1444#issuecomment-639528897).\*\* ### A node (default) ```mermaid-example flowchart LR id ``` ```mermaid flowchart LR id ``` > **Note** The id is what is displayed in the box. ### A node with text It is also possible to set text in the box that differs from the id. If this is done several times, it is the last text found for the node that will be used. Also if you define edges for the node later on, you can omit text definitions. The one previously defined will be used when rendering the box. ```mermaid-example flowchart LR id1[This is the text in the box] ``` ```mermaid flowchart LR id1[This is the text in the box] ``` ## Graph This statement declares the direction of the Flowchart. This declares the flowchart is oriented from top to bottom (`TD` or `TB`). ```mermaid-example flowchart TD Start --> Stop ``` ```mermaid flowchart TD Start --> Stop ``` This declares the flowchart is oriented from left to right (`LR`). ```mermaid-example flowchart LR Start --> Stop ``` ```mermaid flowchart LR Start --> Stop ``` ## Flowchart Orientation Possible FlowChart orientations are: - TB - top to bottom - TD - top-down/ same as top to bottom - BT - bottom to top - RL - right to left - LR - left to right ## Node shapes ### A node with round edges ```mermaid-example flowchart LR id1(This is the text in the box) ``` ```mermaid flowchart LR id1(This is the text in the box) ``` ### A stadium-shaped node ```mermaid-example flowchart LR id1([This is the text in the box]) ``` ```mermaid flowchart LR id1([This is the text in the box]) ``` ### A node in a subroutine shape ```mermaid-example flowchart LR id1[[This is the text in the box]] ``` ```mermaid flowchart LR id1[[This is the text in the box]] ``` ### A node in a cylindrical shape ```mermaid-example flowchart LR id1[(Database)] ``` ```mermaid flowchart LR id1[(Database)] ``` ### A node in the form of a circle ```mermaid-example flowchart LR id1((This is the text in the circle)) ``` ```mermaid flowchart LR id1((This is the text in the circle)) ``` ### A node in an asymmetric shape ```mermaid-example flowchart LR id1>This is the text in the box] ``` ```mermaid flowchart LR id1>This is the text in the box] ``` Currently only the shape above is possible and not its mirror. _This might change with future releases._ ### A node (rhombus) ```mermaid-example flowchart LR id1{This is the text in the box} ``` ```mermaid flowchart LR id1{This is the text in the box} ``` ### A hexagon node ```mermaid-example flowchart LR id1{{This is the text in the box}} ``` ```mermaid flowchart LR id1{{This is the text in the box}} ``` ### Parallelogram ```mermaid-example flowchart TD id1[/This is the text in the box/] ``` ```mermaid flowchart TD id1[/This is the text in the box/] ``` ### Parallelogram alt ```mermaid-example flowchart TD id1[\This is the text in the box\] ``` ```mermaid flowchart TD id1[\This is the text in the box\] ``` ### Trapezoid ```mermaid-example flowchart TD A[/Christmas\] ``` ```mermaid flowchart TD A[/Christmas\] ``` ### Trapezoid alt ```mermaid-example flowchart TD B[\Go shopping/] ``` ```mermaid flowchart TD B[\Go shopping/] ``` ### Double circle ```mermaid-example flowchart TD id1(((This is the text in the circle))) ``` ```mermaid flowchart TD id1(((This is the text in the circle))) ``` ## Links between nodes Nodes can be connected with links/edges. It is possible to have different types of links or attach a text string to a link. ### A link with arrow head ```mermaid-example flowchart LR A-->B ``` ```mermaid flowchart LR A-->B ``` ### An open link ```mermaid-example flowchart LR A --- B ``` ```mermaid flowchart LR A --- B ``` ### An invisisble link This can be a usefull tool in some instances where you want to alter the default positining of a node. ```mermaid-example flowchart LR A ~~~ B ``` ```mermaid flowchart LR A ~~~ B ``` ### Text on links ```mermaid-example flowchart LR A-- This is the text! ---B ``` ```mermaid flowchart LR A-- This is the text! ---B ``` or ```mermaid-example flowchart LR A---|This is the text|B ``` ```mermaid flowchart LR A---|This is the text|B ``` ### A link with arrow head and text ```mermaid-example flowchart LR A-->|text|B ``` ```mermaid flowchart LR A-->|text|B ``` or ```mermaid-example flowchart LR A-- text -->B ``` ```mermaid flowchart LR A-- text -->B ``` ### Dotted link ```mermaid-example flowchart LR; A-.->B; ``` ```mermaid flowchart LR; A-.->B; ``` ### Dotted link with text ```mermaid-example flowchart LR A-. text .-> B ``` ```mermaid flowchart LR A-. text .-> B ``` ### Thick link ```mermaid-example flowchart LR A ==> B ``` ```mermaid flowchart LR A ==> B ``` ### Thick link with text ```mermaid-example flowchart LR A == text ==> B ``` ```mermaid flowchart LR A == text ==> B ``` ### Chaining of links It is possible declare many links in the same line as per below: ```mermaid-example flowchart LR A -- text --> B -- text2 --> C ``` ```mermaid flowchart LR A -- text --> B -- text2 --> C ``` It is also possible to declare multiple nodes links in the same line as per below: ```mermaid-example flowchart LR a --> b & c--> d ``` ```mermaid flowchart LR a --> b & c--> d ``` You can then describe dependencies in a very expressive way. Like the one-liner below: ```mermaid-example flowchart TB A & B--> C & D ``` ```mermaid flowchart TB A & B--> C & D ``` If you describe the same diagram using the the basic syntax, it will take four lines. A word of warning, one could go overboard with this making the flowchart harder to read in markdown form. The Swedish word `lagom` comes to mind. It means, not too much and not too little. This goes for expressive syntaxes as well. ```mermaid-example flowchart TB A --> C A --> D B --> C B --> D ``` ```mermaid flowchart TB A --> C A --> D B --> C B --> D ``` ### New arrow types There are new types of arrows supported as per below: ```mermaid-example flowchart LR A --o B B --x C ``` ```mermaid flowchart LR A --o B B --x C ``` ### Multi directional arrows There is the possibility to use multidirectional arrows. ```mermaid-example flowchart LR A o--o B B <--> C C x--x D ``` ```mermaid flowchart LR A o--o B B <--> C C x--x D ``` ### Minimum length of a link Each node in the flowchart is ultimately assigned to a rank in the rendered graph, i.e. to a vertical or horizontal level (depending on the flowchart orientation), based on the nodes to which it is linked. By default, links can span any number of ranks, but you can ask for any link to be longer than the others by adding extra dashes in the link definition. In the following example, two extra dashes are added in the link from node _B_ to node _E_, so that it spans two more ranks than regular links: ```mermaid-example flowchart TD A[Start] --> B{Is it?} B -->|Yes| C[OK] C --> D[Rethink] D --> B B ---->|No| E[End] ``` ```mermaid flowchart TD A[Start] --> B{Is it?} B -->|Yes| C[OK] C --> D[Rethink] D --> B B ---->|No| E[End] ``` > **Note** Links may still be made longer than the requested number of ranks > by the rendering engine to accommodate other requests. When the link label is written in the middle of the link, the extra dashes must be added on the right side of the link. The following example is equivalent to the previous one: ```mermaid-example flowchart TD A[Start] --> B{Is it?} B -- Yes --> C[OK] C --> D[Rethink] D --> B B -- No ----> E[End] ``` ```mermaid flowchart TD A[Start] --> B{Is it?} B -- Yes --> C[OK] C --> D[Rethink] D --> B B -- No ----> E[End] ``` For dotted or thick links, the characters to add are equals signs or dots, as summed up in the following table: | Length | 1 | 2 | 3 | | ----------------- | :----: | :-----: | :------: | | Normal | `---` | `----` | `-----` | | Normal with arrow | `-->` | `--->` | `---->` | | Thick | `===` | `====` | `=====` | | Thick with arrow | `==>` | `===>` | `====>` | | Dotted | `-.-` | `-..-` | `-...-` | | Dotted with arrow | `-.->` | `-..->` | `-...->` | ## Special characters that break syntax It is possible to put text within quotes in order to render more troublesome characters. As in the example below: ```mermaid-example flowchart LR id1["This is the (text) in the box"] ``` ```mermaid flowchart LR id1["This is the (text) in the box"] ``` ### Entity codes to escape characters It is possible to escape characters using the syntax exemplified here. ```mermaid-example flowchart LR A["A double quote:#quot;"] -->B["A dec char:#9829;"] ``` ```mermaid flowchart LR A["A double quote:#quot;"] -->B["A dec char:#9829;"] ``` Numbers given are base 10, so `#` can be encoded as `#35;`. It is also supported to use HTML character names. ## Subgraphs subgraph title graph definition end An example below: ```mermaid-example flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end ``` ```mermaid flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end ``` You can also set an explicit id for the subgraph. ```mermaid-example flowchart TB c1-->a2 subgraph ide1 [one] a1-->a2 end ``` ```mermaid flowchart TB c1-->a2 subgraph ide1 [one] a1-->a2 end ``` ## flowcharts With the graphtype flowchart it is also possible to set edges to and from subgraphs as in the flowchart below. ```mermaid-example flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end one --> two three --> two two --> c2 ``` ```mermaid flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end one --> two three --> two two --> c2 ``` ## Direction in subgraphs With the graphtype flowcharts you can use the direction statement to set the direction which the subgraph will render like in this example. ```mermaid-example flowchart LR subgraph TOP direction TB subgraph B1 direction RL i1 -->f1 end subgraph B2 direction BT i2 -->f2 end end A --> TOP --> B B1 --> B2 ``` ```mermaid flowchart LR subgraph TOP direction TB subgraph B1 direction RL i1 -->f1 end subgraph B2 direction BT i2 -->f2 end end A --> TOP --> B B1 --> B2 ``` **A clarification is in order here.** The direction statement affects the layout of a subgraph but only as long as it does not have any links leading in or out of it. The reason for this is that if you have links in or out then the graph of nodes is not longer the set of nodes in the subgraph but actually the set of nodes of the parent including the ones in the subgraph. One can see it as that the direction of the container gets injected in the subgraph with a link. ## Interaction It is possible to bind a click event to a node, the click can lead to either a javascript callback or to a link which will be opened in a new browser tab. **Note**: This functionality is disabled when using `securityLevel='strict'` and enabled when using `securityLevel='loose'`. click nodeId callback click nodeId call callback() - nodeId is the id of the node - callback is the name of a javascript function defined on the page displaying the graph, the function will be called with the nodeId as parameter. Examples of tooltip usage below: ```html <script> const callback = function () { alert('A callback was triggered'); }; </script> ``` The tooltip text is surrounded in double quotes. The styles of the tooltip are set by the class `.mermaidTooltip`. ```mermaid-example flowchart LR A-->B B-->C C-->D click A callback "Tooltip for a callback" click B "https://www.github.com" "This is a tooltip for a link" click A call callback() "Tooltip for a callback" click B href "https://www.github.com" "This is a tooltip for a link" ``` ```mermaid flowchart LR A-->B B-->C C-->D click A callback "Tooltip for a callback" click B "https://www.github.com" "This is a tooltip for a link" click A call callback() "Tooltip for a callback" click B href "https://www.github.com" "This is a tooltip for a link" ``` > **Success** The tooltip functionality and the ability to link to urls are available from version 0.5.2. ?> Due to limitations with how Docsify handles JavaScript callback functions, an alternate working demo for the above code can be viewed at [this jsfiddle](https://jsfiddle.net/s37cjoau/3/). Links are opened in the same browser tab/window by default. It is possible to change this by adding a link target to the click definition (`_self`, `_blank`, `_parent` and `_top` are supported): ```mermaid-example flowchart LR A-->B B-->C C-->D D-->E click A "https://www.github.com" _blank click B "https://www.github.com" "Open this in a new tab" _blank click C href "https://www.github.com" _blank click D href "https://www.github.com" "Open this in a new tab" _blank ``` ```mermaid flowchart LR A-->B B-->C C-->D D-->E click A "https://www.github.com" _blank click B "https://www.github.com" "Open this in a new tab" _blank click C href "https://www.github.com" _blank click D href "https://www.github.com" "Open this in a new tab" _blank ``` Beginner's tip—a full example using interactive links in a html context: ```html <body> <pre class="mermaid"> flowchart LR A-->B B-->C C-->D click A callback "Tooltip" click B "https://www.github.com" "This is a link" click C call callback() "Tooltip" click D href "https://www.github.com" "This is a link" </pre> <script> const callback = function () { alert('A callback was triggered'); }; const config = { startOnLoad: true, flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'cardinal' }, securityLevel: 'loose', }; mermaid.initialize(config); </script> </body> ``` ### Comments Comments can be entered within a flow diagram, which will be ignored by the parser. Comments need to be on their own line, and must be prefaced with `%%` (double percent signs). Any text after the start of the comment to the next newline will be treated as a comment, including any flow syntax ```mermaid-example flowchart LR %% this is a comment A -- text --> B{node} A -- text --> B -- text2 --> C ``` ```mermaid flowchart LR %% this is a comment A -- text --> B{node} A -- text --> B -- text2 --> C ``` ## Styling and classes ### Styling links It is possible to style links. For instance, you might want to style a link that is going backwards in the flow. As links have no ids in the same way as nodes, some other way of deciding what style the links should be attached to is required. Instead of ids, the order number of when the link was defined in the graph is used, or use default to apply to all links. In the example below the style defined in the linkStyle statement will belong to the fourth link in the graph: linkStyle 3 stroke:#ff3,stroke-width:4px,color:red; ### Styling line curves It is possible to style the type of curve used for lines between items, if the default method does not meet your needs. Available curve styles include `basis`, `bump`, `linear`, `monotoneX`, `monotoneY`, `natural`, `step`, `stepAfter`, and `stepBefore`. In this example, a left-to-right graph uses the `stepBefore` curve style: %%{ init: { 'flowchart': { 'curve': 'stepBefore' } } }%% graph LR For a full list of available curves, including an explanation of custom curves, refer to the [Shapes](https://github.com/d3/d3-shape/blob/main/README.md#curves) documentation in the [d3-shape](https://github.com/d3/d3-shape/) project. ### Styling a node It is possible to apply specific styles such as a thicker border or a different background color to a node. ```mermaid-example flowchart LR id1(Start)-->id2(Stop) style id1 fill:#f9f,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5 ``` ```mermaid flowchart LR id1(Start)-->id2(Stop) style id1 fill:#f9f,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5 ``` #### Classes More convenient than defining the style every time is to define a class of styles and attach this class to the nodes that should have a different look. a class definition looks like the example below: classDef className fill:#f9f,stroke:#333,stroke-width:4px; Attachment of a class to a node is done as per below: class nodeId1 className; It is also possible to attach a class to a list of nodes in one statement: class nodeId1,nodeId2 className; A shorter form of adding a class is to attach the classname to the node using the `:::`operator as per below: ```mermaid-example flowchart LR A:::someclass --> B classDef someclass fill:#f96; ``` ```mermaid flowchart LR A:::someclass --> B classDef someclass fill:#f96; ``` ### Css classes It is also possible to predefine classes in css styles that can be applied from the graph definition as in the example below: **Example style** ```html <style> .cssClass > rect { fill: #ff0000; stroke: #ffff00; stroke-width: 4px; } </style> ``` **Example definition** ```mermaid-example flowchart LR; A-->B[AAA<span>BBB</span>] B-->D class A cssClass ``` ```mermaid flowchart LR; A-->B[AAA<span>BBB</span>] B-->D class A cssClass ``` ### Default class If a class is named default it will be assigned to all classes without specific class definitions. classDef default fill:#f9f,stroke:#333,stroke-width:4px; ## Basic support for fontawesome It is possible to add icons from fontawesome. The icons are accessed via the syntax fa:#icon class name#. ```mermaid-example flowchart TD B["fab:fa-twitter for peace"] B-->C[fa:fa-ban forbidden] B-->D(fa:fa-spinner); B-->E(A fa:fa-camera-retro perhaps?) ``` ```mermaid flowchart TD B["fab:fa-twitter for peace"] B-->C[fa:fa-ban forbidden] B-->D(fa:fa-spinner); B-->E(A fa:fa-camera-retro perhaps?) ``` ?> Mermaid is now only compatible with Font Awesome versions 4 and 5. Check that you are using the correct version of Font Awesome. ## Graph declarations with spaces between vertices and link and without semicolon - In graph declarations, the statements also can now end without a semicolon. After release 0.2.16, ending a graph statement with semicolon is just optional. So the below graph declaration is also valid along with the old declarations of the graph. - A single space is allowed between vertices and the link. However there should not be any space between a vertex and its text and a link and its text. The old syntax of graph declaration will also work and hence this new feature is optional and is introduced to improve readability. Below is the new declaration of the graph edges which is also valid along with the old declaration of the graph edges. ```mermaid-example flowchart LR A[Hard edge] -->|Link text| B(Round edge) B --> C{Decision} C -->|One| D[Result one] C -->|Two| E[Result two] ``` ```mermaid flowchart LR A[Hard edge] -->|Link text| B(Round edge) B --> C{Decision} C -->|One| D[Result one] C -->|Two| E[Result two] ``` ## Configuration... Is it possible to adjust the width of the rendered flowchart. This is done by defining **mermaid.flowchartConfig** or by the CLI to use a JSON file with the configuration. How to use the CLI is described in the mermaidCLI page. mermaid.flowchartConfig can be set to a JSON string with config parameters or the corresponding object. ```javascript mermaid.flowchartConfig = { width: 100% } ``` �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/gantt.md������������������������������������������������������������0000664�0000000�0000000�00000035415�14332737457�0020265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Gantt diagrams > A Gantt chart is a type of bar chart, first developed by Karol Adamiecki in 1896, and independently by Henry Gantt in the 1910s, that illustrates a project schedule and the amount of time it would take for any one project to finish. Gantt charts illustrate number of days between the start and finish dates of the terminal elements and summary elements of a project. ## A note to users Gantt Charts will record each scheduled task as one continuous bar that extends from the left to the right. The x axis represents time and the y records the different tasks and the order in which they are to be completed. It is important to remember that when a date, day, or collection of dates specific to a task are "excluded", the Gantt Chart will accommodate those changes by extending an equal number of days, towards the right, not by creating a gap inside the task. As shown here ![](./img/Gantt-excluded-days-within.png) However, if the excluded dates are between two tasks that are set to start consecutively, the excluded dates will be skipped graphically and left blank, and the following task will begin after the end of the excluded dates. As shown here ![](./img/Gantt-long-weekend-look.png) A Gantt chart is useful for tracking the amount of time it would take before a project is finished, but it can also be used to graphically represent "non-working days", with a few tweaks. Mermaid can render Gantt diagrams as SVG, PNG or a MarkDown link that can be pasted into docs. ```mermaid-example gantt title A Gantt Diagram dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d ``` ```mermaid gantt title A Gantt Diagram dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d ``` ## Syntax ```mermaid-example gantt dateFormat YYYY-MM-DD title Adding GANTT diagram functionality to mermaid excludes weekends %% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".) section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d Functionality added :milestone, 2014-01-25, 0d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page :20h Add another diagram to demo page :48h ``` ```mermaid gantt dateFormat YYYY-MM-DD title Adding GANTT diagram functionality to mermaid excludes weekends %% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".) section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d Functionality added :milestone, 2014-01-25, 0d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page :20h Add another diagram to demo page :48h ``` It is possible to set multiple dependencies separated by space: ```mermaid-example gantt apple :a, 2017-07-20, 1w banana :crit, b, 2017-07-23, 1d cherry :active, c, after b a, 1d ``` ```mermaid gantt apple :a, 2017-07-20, 1w banana :crit, b, 2017-07-23, 1d cherry :active, c, after b a, 1d ``` ### Title The `title` is an _optional_ string to be displayed at the top of the Gantt chart to describe the chart as a whole. ### Section statements You can divide the chart into various sections, for example to separate different parts of a project like development and documentation. To do so, start a line with the `section` keyword and give it a name. (Note that unlike with the [title for the entire chart](#title), this name is _required_. ### Milestones You can add milestones to the diagrams. Milestones differ from tasks as they represent a single instant in time and are identified by the keyword `milestone`. Below is an example on how to use milestones. As you may notice, the exact location of the milestone is determined by the initial date for the milestone and the "duration" of the task this way: _initial date_+_duration_/2. ```mermaid-example gantt dateFormat HH:mm axisFormat %H:%M Initial milestone : milestone, m1, 17:49,2min taska2 : 10min taska3 : 5min Final milestone : milestone, m2, 18:14, 2min ``` ```mermaid gantt dateFormat HH:mm axisFormat %H:%M Initial milestone : milestone, m1, 17:49,2min taska2 : 10min taska3 : 5min Final milestone : milestone, m2, 18:14, 2min ``` ## Setting dates `dateFormat` defines the format of the date **input** of your gantt elements. How these dates are represented in the rendered chart **output** are defined by `axisFormat`. ### Input date format The default input date format is `YYYY-MM-DD`. You can define your custom `dateFormat`. dateFormat YYYY-MM-DD The following formatting options are supported: Input Example Description: YYYY 2014 4 digit year YY 14 2 digit year Q 1..4 Quarter of year. Sets month to first month in quarter. M MM 1..12 Month number MMM MMMM January..Dec Month name in locale set by moment.locale() D DD 1..31 Day of month Do 1st..31st Day of month with ordinal DDD DDDD 1..365 Day of year X 1410715640.579 Unix timestamp x 1410715640579 Unix ms timestamp H HH 0..23 24 hour time h hh 1..12 12 hour time used with a A. a A am pm Post or ante meridiem m mm 0..59 Minutes s ss 0..59 Seconds S 0..9 Tenths of a second SS 0..99 Hundreds of a second SSS 0..999 Thousandths of a second Z ZZ +12:00 Offset from UTC as +-HH:mm, +-HHmm, or Z More info in: https://momentjs.com/docs/#/parsing/string-format/ ### Output date format on the axis The default output date format is YYYY-MM-DD. You can define your custom `axisFormat`, like `2020-Q1` for the first quarter of the year 2020. axisFormat %Y-%m-%d The following formatting strings are supported: %a - abbreviated weekday name. %A - full weekday name. %b - abbreviated month name. %B - full month name. %c - date and time, as "%a %b %e %H:%M:%S %Y". %d - zero-padded day of the month as a decimal number [01,31]. %e - space-padded day of the month as a decimal number [ 1,31]; equivalent to %_d. %H - hour (24-hour clock) as a decimal number [00,23]. %I - hour (12-hour clock) as a decimal number [01,12]. %j - day of the year as a decimal number [001,366]. %m - month as a decimal number [01,12]. %M - minute as a decimal number [00,59]. %L - milliseconds as a decimal number [000, 999]. %p - either AM or PM. %S - second as a decimal number [00,61]. %U - week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. %w - weekday as a decimal number [0(Sunday),6]. %W - week number of the year (Monday as the first day of the week) as a decimal number [00,53]. %x - date, as "%m/%d/%Y". %X - time, as "%H:%M:%S". %y - year without century as a decimal number [00,99]. %Y - year with century as a decimal number. %Z - time zone offset, such as "-0700". %% - a literal "%" character. More info in: https://github.com/mbostock/d3/wiki/Time-Formatting ## Comments Comments can be entered within a gantt chart, which will be ignored by the parser. Comments need to be on their own line and must be prefaced with `%%` (double percent signs). Any text after the start of the comment to the next newline will be treated as a comment, including any diagram syntax ```mermaid-example gantt title A Gantt Diagram %% this is a comment dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d ``` ```mermaid gantt title A Gantt Diagram %% this is a comment dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d ``` ## Styling Styling of the a gantt diagram is done by defining a number of css classes. During rendering, these classes are extracted from the file located at src/themes/gantt.scss ### Classes used | Class | Description | | --------------------- | ---------------------------------------------------------------------- | | grid.tick | Styling for the Grid Lines | | grid.path | Styling for the Grid's borders | | .taskText | Task Text Styling | | .taskTextOutsideRight | Styling for Task Text that exceeds the activity bar towards the right. | | .taskTextOutsideLeft | Styling for Task Text that exceeds the activity bar, towards the left. | | todayMarker | Toggle and Styling for the "Today Marker" | ### Sample stylesheet ```css .grid .tick { stroke: lightgrey; opacity: 0.3; shape-rendering: crispEdges; } .grid path { stroke-width: 0; } #tag { color: white; background: #fa283d; width: 150px; position: absolute; display: none; padding: 3px 6px; margin-left: -80px; font-size: 11px; } #tag:before { border: solid transparent; content: ' '; height: 0; left: 50%; margin-left: -5px; position: absolute; width: 0; border-width: 10px; border-bottom-color: #fa283d; top: -20px; } .taskText { fill: white; text-anchor: middle; } .taskTextOutsideRight { fill: black; text-anchor: start; } .taskTextOutsideLeft { fill: black; text-anchor: end; } ``` ## Today marker You can style or hide the marker for the current date. To style it, add a value for the `todayMarker` key. todayMarker stroke-width:5px,stroke:#0f0,opacity:0.5 To hide the marker, set `todayMarker` to `off`. todayMarker off ## Configuration It is possible to adjust the margins for rendering the gantt diagram. This is done by defining the `ganttConfig` part of the configuration object. How to use the CLI is described in the [mermaidCLI](mermaidCLI.html) page. mermaid.ganttConfig can be set to a JSON string with config parameters or the corresponding object. ```javascript mermaid.ganttConfig = { titleTopMargin: 25, barHeight: 20, barGap: 4, topPadding: 75, sidePadding: 75, }; ``` ### Possible configuration params: | Param | Description | Default value | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------- | | mirrorActor | Turns on/off the rendering of actors below the diagram as well as above it | false | | bottomMarginAdj | Adjusts how far down the graph ended. Wide borders styles with css could generate unwanted clipping which is why this config param exists. | 1 | ## Interaction It is possible to bind a click event to a task. The click can lead to either a javascript callback or to a link which will be opened in the current browser tab. **Note**: This functionality is disabled when using `securityLevel='strict'` and enabled when using `securityLevel='loose'`. click taskId call callback(arguments) click taskId href URL - taskId is the id of the task - callback is the name of a javascript function defined on the page displaying the graph, the function will be called with the taskId as the parameter if no other arguments are specified. Beginner's tip—a full example using interactive links in an html context: ```html <body> <pre class="mermaid"> gantt dateFormat YYYY-MM-DD section Clickable Visit mermaidjs :active, cl1, 2014-01-07, 3d Print arguments :cl2, after cl1, 3d Print task :cl3, after cl2, 3d click cl1 href "https://mermaidjs.github.io/" click cl2 call printArguments("test1", "test2", test3) click cl3 call printTask() </pre> <script> const printArguments = function (arg1, arg2, arg3) { alert('printArguments called with arguments: ' + arg1 + ', ' + arg2 + ', ' + arg3); }; const printTask = function (taskId) { alert('taskId: ' + taskId); }; const config = { startOnLoad: true, securityLevel: 'loose', }; mermaid.initialize(config); </script> </body> ``` ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/gitgraph.md���������������������������������������������������������0000664�0000000�0000000�00000137372�14332737457�0020762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Gitgraph Diagrams > A Git Graph is a pictorial representation of git commits and git actions(commands) on various branches. These kind of diagram are particularly helpful to developers and devops teams to share their Git branching strategies. For example, it makes it easier to visualize how git flow works. Mermaid can render Git diagrams ```mermaid-example gitGraph commit commit branch develop checkout develop commit commit checkout main merge develop commit commit ``` ```mermaid gitGraph commit commit branch develop checkout develop commit commit checkout main merge develop commit commit ``` In Mermaid, we support the basic git operations like: - _commit_ : Representing a new commit on the current branch. - _branch_ : To create & switch to a new branch, setting it as the current branch. - _checkout_ : To checking out an existing branch and setting it as the current branch. - _merge_ : To merge an existing branch onto the current branch. With the help of these key git commands, you will be able to draw a gitgraph in Mermaid very easily and quickly. Entity names are often capitalized, although there is no accepted standard on this, and it is not required in Mermaid. ## Syntax Mermaid syntax for a gitgraph is very straight-forward and simple. It follows a declarative-approach, where each commit is drawn on the timeline in the diagram, in order of its occurrences/presence in code. Basically, it follows the insertion order for each command. First thing you do is to declare your diagram type using the **gitgraph** keyword. This `gitgraph` keyword, tells Mermaid that you wish to draw a gitgraph, and parse the diagram code accordingly. Each gitgraph, is initialized with **_main_** branch. So unless you create a different branch, by-default the commits will go to the main branch. This is driven with how git works, where in the beginning you always start with the main branch (formerly called as **_master_** branch). And by-default, `main` branch is set as your **_current branch_**. You make use of **_commit_** keyword to register a commit on the current branch. Let see how this works: A simple gitgraph showing three commits on the default (**_main_**) branch: ```mermaid-example gitGraph commit commit commit ``` ```mermaid gitGraph commit commit commit ``` If you look closely at the previous example, you can see the default branch `main` along with three commits. Also, notice that by default each commit has been given a unique & random ID. What if you wanted to give your own custom ID to a commit? Yes, it is possible to do that with Mermaid. ### Adding custom commit id For a given commit you may specify a custom ID at the time of declaring it using the `id` attribute, followed by `:` and your custom value within a `""` quote. For example: `commit id: "your_custom_id"` Let us see how this works with the help of the following diagram: ```mermaid-example gitGraph commit id: "Alpha" commit id: "Beta" commit id: "Gamma" ``` ```mermaid gitGraph commit id: "Alpha" commit id: "Beta" commit id: "Gamma" ``` In this example, we have given our custom IDs to the commits. ### Modifying commit type In Mermaid, a commit can be of three type, which render a bit different in the diagram. These types are: - `NORMAL` : Default commit type. Represented by a solid circle in the diagram - `REVERSE` : To emphasize a commit as a reverse commit. Represented by a crossed solid circle in the diagram. - `HIGHLIGHT` : To highlight a particular commit in the diagram. Represented by a filled rectangle in the diagram. For a given commit you may specify its type at the time of declaring it using the `type` attribute, followed by `:` and the required type option discussed above. For example: `commit type: HIGHLIGHT` NOTE: If no commit type is specified, `NORMAL` is picked as default. Let us see how these different commit type look with the help of the following diagram: ```mermaid-example gitGraph commit id: "Normal" commit commit id: "Reverse" type: REVERSE commit commit id: "Highlight" type: HIGHLIGHT commit ``` ```mermaid gitGraph commit id: "Normal" commit commit id: "Reverse" type: REVERSE commit commit id: "Highlight" type: HIGHLIGHT commit ``` In this example, we have specified different types to each commit. Also, see how we have included both `id` and `type` together at the time of declaring our commits. ### Adding Tags For a given commit you may decorate it as a **tag**, similar to the concept of tags or release version in git world. You can attach a custom tag at the time of declaring a commit using the `tag` attribute, followed by `:` and your custom value within `""` quote. For example: `commit tag: "your_custom_tag"` Let us see how this works with the help of the following diagram: ```mermaid-example gitGraph commit commit id: "Normal" tag: "v1.0.0" commit commit id: "Reverse" type: REVERSE tag: "RC_1" commit commit id: "Highlight" type: HIGHLIGHT tag: "8.8.4" commit ``` ```mermaid gitGraph commit commit id: "Normal" tag: "v1.0.0" commit commit id: "Reverse" type: REVERSE tag: "RC_1" commit commit id: "Highlight" type: HIGHLIGHT tag: "8.8.4" commit ``` In this example, we have given custom tags to the commits. Also, see how we have combined all these attributes in a single commit declaration. You can mix-match these attributes as you like. ### Create a new branch In Mermaid, in-order to create a new branch, you make use of the `branch` keyword. You also need to provide a name of the new branch. The name has to be unique and cannot be that of an existing branch. Usage example: `branch develop` When Mermaid, reads the `branch` keyword, it creates a new branch and sets it as the current branch. Equivalent to you creating a new branch and checking it out in Git world. Let see this in an example: ```mermaid-example gitGraph commit commit branch develop commit commit commit ``` ```mermaid gitGraph commit commit branch develop commit commit commit ``` In this example, see how we started with default `main` branch, and pushed two commits on that. Then we created the `develop` branch, and all commits afterwards are put on the `develop` branch as it became the current branch. ### Checking out an existing branch In Mermaid, in order to switch to an existing branch, you make use of the `checkout` keyword. You also need to provide a name of an existing branch. If no branch is found with the given name, it will result in console error. Usage example: `checkout develop` When Mermaid, reads the `checkout` keyword, it finds the given branch and sets it as the current branch. Equivalent to checking out a branch in the Git world. Let see modify our previous example: ```mermaid-example gitGraph commit commit branch develop commit commit commit checkout main commit commit ``` ```mermaid gitGraph commit commit branch develop commit commit commit checkout main commit commit ``` In this example, see how we started with default `main` branch, and pushed two commits on that. Then we created the `develop` branch, and all three commits afterwards are put on the `develop` branch as it became the current branch. After this we made use of the `checkout` keyword to set the current branch as `main`, and all commit that follow are registered against the current branch, i.e. `main`. ### Merging two branches In Mermaid, in order to merge or join to an existing branch, you make use of the `merge` keyword. You also need to provide the name of an existing branch to merge from. If no branch is found with the given name, it will result in console error. Also, you can only merge two separate branches, and cannot merge a branch with itself. In such case an error is throw. Usage example: `merge develop` When Mermaid, reads the `merge` keyword, it finds the given branch and its head commit (the last commit on that branch), and joins it with the head commit on the **current branch**. Each merge results in a **_merge commit_**, represented in the diagram with **filled double circle**. Let us modify our previous example to merge our two branches: ```mermaid-example gitGraph commit commit branch develop commit commit commit checkout main commit commit merge develop commit commit ``` ```mermaid gitGraph commit commit branch develop commit commit commit checkout main commit commit merge develop commit commit ``` In this example, see how we started with default `main` branch, and pushed two commits on that. Then we created the `develop` branch, and all three commits afterwards are put on the `develop` branch as it became the current branch. After this we made use of the `checkout` keyword to set the current branch as `main`, and all commits that follow are registered against the current branch, i.e. `main`. After this we merge the `develop` branch onto the current branch `main`, resulting in a merge commit. Since the current branch at this point is still `main`, the last two commits are registered against that. You can also decorate your merge with similar attributes as you did for the commit using: - `id`--> To override the default ID with custom ID - `tag`--> To add a custom tag to your merge commit - `type`--> To override the default shape of merge commit. Here you can use other commit type mentioned earlier. And you can choose to use none, some or all of these attributes together. For example: `merge develop id: "my_custom_id" tag: "my_custom_tag" type: REVERSE` Let us see how this works with the help of the following diagram: ```mermaid-example gitGraph commit id: "1" commit id: "2" branch nice_feature checkout nice_feature commit id: "3" checkout main commit id: "4" checkout nice_feature branch very_nice_feature checkout very_nice_feature commit id: "5" checkout main commit id: "6" checkout nice_feature commit id: "7" checkout main merge nice_feature id: "customID" tag: "customTag" type: REVERSE checkout very_nice_feature commit id: "8" checkout main commit id: "9" ``` ```mermaid gitGraph commit id: "1" commit id: "2" branch nice_feature checkout nice_feature commit id: "3" checkout main commit id: "4" checkout nice_feature branch very_nice_feature checkout very_nice_feature commit id: "5" checkout main commit id: "6" checkout nice_feature commit id: "7" checkout main merge nice_feature id: "customID" tag: "customTag" type: REVERSE checkout very_nice_feature commit id: "8" checkout main commit id: "9" ``` ### Cherry Pick commit from another branch Similar to how 'git' allows you to cherry-pick a commit from **another branch** onto the **current** branch, Mermaid also supports this functionality. You can also cherry-pick a commit from another branch using the `cherry-pick` keyword. To use the `cherry-pick` keyword, you must specify the id using the `id` attribute, followed by `:` and your desired commit id within a `""` quote. For example: `cherry-pick id: "your_custom_id"` Here, a new commit representing the cherry-pick is created on the current branch, and is visually highlighted in the diagram with a **cherry** and a tag depicting the commit id from which it is cherry-picked from. A few important rules to note here are: 1. You need to provide the `id` for an existing commit to be cherry-picked. If given commit id does not exist it will result in an error. For this, make use of the `commit id:$value` format of declaring commits. See the examples from above. 2. The given commit must not exist on the current branch. The cherry-picked commit must always be a different branch than the current branch. 3. Current branch must have at least one commit, before you can cherry-pick, otherwise it will cause an error is throw. Let see an example: ```mermaid-example gitGraph commit id: "ZERO" branch develop commit id:"A" checkout main commit id:"ONE" checkout develop commit id:"B" checkout main commit id:"TWO" cherry-pick id:"A" commit id:"THREE" checkout develop commit id:"C" ``` ```mermaid gitGraph commit id: "ZERO" branch develop commit id:"A" checkout main commit id:"ONE" checkout develop commit id:"B" checkout main commit id:"TWO" cherry-pick id:"A" commit id:"THREE" checkout develop commit id:"C" ``` ## Gitgraph specific configuration options In Mermaid, you have the option to configure the gitgraph diagram. You can configure the following options: - `showBranches` : Boolean, default is `true`. If set to `false`, the branches are not shown in the diagram. - `showCommitLabel` : Boolean, default is `true`. If set to `false`, the commit labels are not shown in the diagram. - `mainBranchName` : String, default is `main`. The name of the default/root branch. - `mainBranchOrder` : Position of the main branch in the list of branches. default is `0`, meaning, by default `main` branch is the first in the order. Let's look at them one by one. ## Hiding Branch names and lines Sometimes you may want to hide the branch names and lines from the diagram. You can do this by using the `showBranches` keyword. By default its value is `true`. You can set it to `false` using directives. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': false}} }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': false}} }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ## Commit labels Layout: Rotated or Horizontal Mermaid supports two types of commit labels layout. The default layout is **rotated**, which means the labels are placed below the commit circle, rotated at 45 degrees for better readability. This is particularly useful for commits with long labels. The other option is **horizontal**, which means the labels are placed below the commit circle centred horizontally, and are not rotated. This is particularly useful for commits with short labels. You can change the layout of the commit labels by using the `rotateCommitLabel` keyword in the directive. It defaults to `true`, which means the commit labels are rotated. Usage example: Rotated commit labels ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'rotateCommitLabel': true}} }%% gitGraph commit id: "feat(api): ..." commit id: "a" commit id: "b" commit id: "fix(client): .extra long label.." branch c2 commit id: "feat(modules): ..." commit id: "test(client): ..." checkout main commit id: "fix(api): ..." commit id: "ci: ..." branch b1 commit branch b2 commit ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'rotateCommitLabel': true}} }%% gitGraph commit id: "feat(api): ..." commit id: "a" commit id: "b" commit id: "fix(client): .extra long label.." branch c2 commit id: "feat(modules): ..." commit id: "test(client): ..." checkout main commit id: "fix(api): ..." commit id: "ci: ..." branch b1 commit branch b2 commit ``` Usage example: Horizontal commit labels ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'rotateCommitLabel': false}} }%% gitGraph commit id: "feat(api): ..." commit id: "a" commit id: "b" commit id: "fix(client): .extra long label.." branch c2 commit id: "feat(modules): ..." commit id: "test(client): ..." checkout main commit id: "fix(api): ..." commit id: "ci: ..." branch b1 commit branch b2 commit ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'rotateCommitLabel': false}} }%% gitGraph commit id: "feat(api): ..." commit id: "a" commit id: "b" commit id: "fix(client): .extra long label.." branch c2 commit id: "feat(modules): ..." commit id: "test(client): ..." checkout main commit id: "fix(api): ..." commit id: "ci: ..." branch b1 commit branch b2 commit ``` ## Hiding commit labels Sometimes you may want to hide the commit labels from the diagram. You can do this by using the `showCommitLabel` keyword. By default its value is `true`. You can set it to `false` using directives. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': false,'showCommitLabel': false}} }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': false,'showCommitLabel': false}} }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ## Customizing main branch name Sometimes you may want to customize the name of the main/default branch. You can do this by using the `mainBranchName` keyword. By default its value is `main`. You can set it to any string using directives. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'MetroLine1'}} }%% gitGraph commit id:"NewYork" commit id:"Dallas" branch MetroLine2 commit id:"LosAngeles" commit id:"Chicago" commit id:"Houston" branch MetroLine3 commit id:"Phoenix" commit type: HIGHLIGHT id:"Denver" commit id:"Boston" checkout MetroLine1 commit id:"Atlanta" merge MetroLine3 commit id:"Miami" commit id:"Washington" merge MetroLine2 tag:"MY JUNCTION" commit id:"Boston" commit id:"Detroit" commit type:REVERSE id:"SanFrancisco" ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'MetroLine1'}} }%% gitGraph commit id:"NewYork" commit id:"Dallas" branch MetroLine2 commit id:"LosAngeles" commit id:"Chicago" commit id:"Houston" branch MetroLine3 commit id:"Phoenix" commit type: HIGHLIGHT id:"Denver" commit id:"Boston" checkout MetroLine1 commit id:"Atlanta" merge MetroLine3 commit id:"Miami" commit id:"Washington" merge MetroLine2 tag:"MY JUNCTION" commit id:"Boston" commit id:"Detroit" commit type:REVERSE id:"SanFrancisco" ``` Look at the imaginary railroad map created using Mermaid. Here, we have changed the default main branch name to `MetroLine1`. ## Customizing branch ordering In Mermaid, by default the branches are shown in the order of their definition or appearance in the diagram code. Sometimes you may want to customize the order of the branches. You can do this by using the `order` keyword next the branch definition. You can set it to a positive number. Mermaid follows the given precedence order of the `order` keyword. - Main branch is always shown first as it has default order value of `0`. (unless its order is modified and changed from `0` using the `mainBranchOrder` keyword in the config) - Next, All branches without an `order` are shown in the order of their appearance in the diagram code. - Next, All branches with an `order` are shown in the order of their `order` value. To fully control the order of all the branches, you must define `order` for all the branches. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true}} }%% gitGraph commit branch test1 order: 3 branch test2 order: 2 branch test3 order: 1 ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true}} }%% gitGraph commit branch test1 order: 3 branch test2 order: 2 branch test3 order: 1 ``` Look at the diagram, all the branches are following the order defined. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchOrder': 2}} }%% gitGraph commit branch test1 order: 3 branch test2 branch test3 branch test4 order: 1 ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchOrder': 2}} }%% gitGraph commit branch test1 order: 3 branch test2 branch test3 branch test4 order: 1 ``` Look at the diagram, here, all the branches without a specified order are drawn in their order of definition. Then, `test4` branch is drawn because the order of `1`. Then, `main` branch is drawn because the order of `2`. And, lastly `test1`is drawn because the order of `3`. NOTE: Because we have overridden the `mainBranchOrder` to `2`, the `main` branch is not drawn in the beginning, instead follows the ordering. Here, we have changed the default main branch name to `MetroLine1`. ## Themes Mermaid supports a bunch of pre-defined themes which you can use to find the right one for you. PS: you can actually override an existing theme's variable to get your own custom theme going. Learn more about theming your diagram [here](./theming.md). The following are the different pre-defined theme options: - `base` - `forest` - `dark` - `default` - `neutral` **NOTE**: To change theme you can either use the `initialize` call or _directives_. Learn more about [directives](./directives.md) Let's put them to use, and see how our sample diagram looks in different themes: ### Base Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'base' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ### Forest Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'forest' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'forest' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ### Default Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' } }%% gitGraph commit type:HIGHLIGHT branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'default' } }%% gitGraph commit type:HIGHLIGHT branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ### Dark Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'dark' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'dark' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ### Neutral Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'neutral' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'neutral' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ## Customize using Theme Variables Mermaid allows you to customize your diagram using theme variables which govern the look and feel of various elements of the diagram. For understanding let us take a sample diagram with theme `default`, the default values of the theme variables is picked automatically from the theme. Later on we will see how to override the default values of the theme variables. See how the default theme is used to set the colors for the branches: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'default' } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` > #### IMPORTANT: > > Mermaid supports the theme variables to override the default values for **up to 8 branches**, i.e., you can set the color/styling of up to 8 branches using theme variables. After this threshold of 8 branches, the theme variables are reused in the cyclic manner, i.e. the 9th branch will use the color/styling of the 1st branch, or the branch at index position '8' will use the color/styling of the branch at index position '0'. > _More on this in the next section. See examples on **Customizing branch label colors** below_ ### Customizing branch colors You can customize the branch colors using the `git0` to `git7` theme variables. Mermaid allows you to set the colors for up-to 8 branches, where `git0` variable will drive the value of the first branch, `git1` will drive the value of the second branch and so on. NOTE: Default values for these theme variables are picked from the selected theme. If you want to override the default values, you can use the `initialize` call to add your custom theme variable values. Example: Now let's override the default values for the `git0` to `git3` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'git0': '#ff0000', 'git1': '#00ff00', 'git2': '#0000ff', 'git3': '#ff00ff', 'git4': '#00ffff', 'git5': '#ffff00', 'git6': '#ff00ff', 'git7': '#00ffff' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'git0': '#ff0000', 'git1': '#00ff00', 'git2': '#0000ff', 'git3': '#ff00ff', 'git4': '#00ffff', 'git5': '#ffff00', 'git6': '#ff00ff', 'git7': '#00ffff' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the branch colors are changed to the values specified in the theme variables. ### Customizing branch label colors You can customize the branch label colors using the `gitBranchLabel0` to `gitBranchLabel7` theme variables. Mermaid allows you to set the colors for up-to 8 branches, where `gitBranchLabel0` variable will drive the value of the first branch label, `gitBranchLabel1` will drive the value of the second branch label and so on. Lets see how the default theme is used to set the colors for the branch labels: Now let's override the default values for the `gitBranchLabel0` to `gitBranchLabel2` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'gitBranchLabel0': '#ffffff', 'gitBranchLabel1': '#ffffff', 'gitBranchLabel2': '#ffffff', 'gitBranchLabel3': '#ffffff', 'gitBranchLabel4': '#ffffff', 'gitBranchLabel5': '#ffffff', 'gitBranchLabel6': '#ffffff', 'gitBranchLabel7': '#ffffff', 'gitBranchLabel8': '#ffffff', 'gitBranchLabel9': '#ffffff' } } }%% gitGraph checkout main branch branch1 branch branch2 branch branch3 branch branch4 branch branch5 branch branch6 branch branch7 branch branch8 branch branch9 checkout branch1 commit ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'gitBranchLabel0': '#ffffff', 'gitBranchLabel1': '#ffffff', 'gitBranchLabel2': '#ffffff', 'gitBranchLabel3': '#ffffff', 'gitBranchLabel4': '#ffffff', 'gitBranchLabel5': '#ffffff', 'gitBranchLabel6': '#ffffff', 'gitBranchLabel7': '#ffffff', 'gitBranchLabel8': '#ffffff', 'gitBranchLabel9': '#ffffff' } } }%% gitGraph checkout main branch branch1 branch branch2 branch branch3 branch branch4 branch branch5 branch branch6 branch branch7 branch branch8 branch branch9 checkout branch1 commit ``` Here, you can see that `branch8` and `branch9` colors and the styles are being picked from branch at index position `0` (`main`) and `1`(`branch1`) respectively, i.e., **branch themeVariables are repeated cyclically**. ### Customizing Commit colors You can customize commit using the `commitLabelColor` and `commitLabelBackground` theme variables for changes in the commit label color and background color respectively. Example: Now let's override the default values for the `commitLabelColor` to `commitLabelBackground` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'commitLabelColor': '#ff0000', 'commitLabelBackground': '#00ff00' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'commitLabelColor': '#ff0000', 'commitLabelBackground': '#00ff00' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the commit label color and background color are changed to the values specified in the theme variables. ### Customizing Commit Label Font Size You can customize commit using the `commitLabelFontSize` theme variables for changing in the font soze of the commit label . Example: Now let's override the default values for the `commitLabelFontSize` variable: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'commitLabelColor': '#ff0000', 'commitLabelBackground': '#00ff00', 'commitLabelFontSize': '16px' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'commitLabelColor': '#ff0000', 'commitLabelBackground': '#00ff00', 'commitLabelFontSize': '16px' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the commit label font size changed. ### Customizing Tag Label Font Size You can customize commit using the `tagLabelFontSize` theme variables for changing in the font soze of the tag label . Example: Now let's override the default values for the `tagLabelFontSize` variable: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'commitLabelColor': '#ff0000', 'commitLabelBackground': '#00ff00', 'tagLabelFontSize': '16px' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'commitLabelColor': '#ff0000', 'commitLabelBackground': '#00ff00', 'tagLabelFontSize': '16px' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the tag label font size changed. ### Customizing Tag colors You can customize tag using the `tagLabelColor`,`tagLabelBackground` and `tagLabelBorder` theme variables for changes in the tag label color,tag label background color and tag label border respectively. Example: Now let's override the default values for the `tagLabelColor`, `tagLabelBackground` and to `tagLabelBorder` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'tagLabelColor': '#ff0000', 'tagLabelBackground': '#00ff00', 'tagLabelBorder': '#0000ff' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'tagLabelColor': '#ff0000', 'tagLabelBackground': '#00ff00', 'tagLabelBorder': '#0000ff' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the tag colors are changed to the values specified in the theme variables. ### Customizing Highlight commit colors You can customize the highlight commit colors in relation to the branch it is on using the `gitInv0` to `gitInv7` theme variables. Mermaid allows you to set the colors for up-to 8 branches specific highlight commit, where `gitInv0` variable will drive the value of the first branch's highlight commits, `gitInv1` will drive the value of the second branch's highlight commit label and so on. Example: Now let's override the default values for the `git0` to `git3` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'gitInv0': '#ff0000' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` ```mermaid %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'gitInv0': '#ff0000' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the highlighted commit color on the first branch is changed to the value specified in the theme variable `gitInv0`. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/����������������������������������������������������������������0000775�0000000�0000000�00000000000�14332737457�0017372�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/Code-Preview-Config.png�����������������������������������������0000664�0000000�0000000�00000442611�14332737457�0023604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������O���tIME�8ms���IDATxwt]W~ 7" �9g*Q*IUQUn۩g׼׶g{~35cvURUJRER$��o:i?� YK" {9{oo5B!B!B!, !B!B!h�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!By+ B!B!Һg TwJ2gBB!B!B 0R*uf,Dd&h!B!B!`fKb K)H02q\ɮk!a8h @ !B!B!GະaM[cL5"6l6 B!B!#BkO<c;HrEZ8M6?}#hVֽ/B!B!B|T&,w<0s.+ۆc<%*r9zE\NbǞLYپ D)=猐ڶO8IZeAB!Bqh)%υ%gg5縛Ol%+9`jΥ�L\N,61<q~m l{OlΛf1V[$ny]6s]pEnobNwLvk 8<5m_́28#\WQYqvlf˪.})5`F;gk -b8?3<2uJc߶ax4"3 '}ݶw{u]0XŋXȨuU.=!G;}9 B!bbtJˢ0 f>J)H& ~�=;㦍M@"x|{%wx93`ְdÒ1cc#'f︱ pvuJ[bKWBM~L_lj; ۻ@T\Сm !g7c5/̉=6uSYs-/±5ӊK]ηR>pJXϕڿc:ߦcC>}Vua{k!## B* XQd:=`e5.O :6�]WLc8ub k\RIñsmÓƱ,saڳߛ2X[]e%P{{俯5ÃN/w.UUkWSeJMt|3Ijk{{~clX2<qbhD2pCE1zeB!B9SvIBU)K{֝xCtٰ7vղf߫ysLhu.7pgDX8y_ ! 63^ޭnjE6O<F)x&6:N7}tLVhyR$xL͸fLk磦ttds<<T<Xv]] iOuNL۝SJqctҹ9GqE2n:M,>mΤ^~Mw?_0߱-^cqb۵j u56di+< Uٜ.6qޒ{j[+o*_E&it L^NɭuSwm2޾Q_\fC*i8慄S]u&T_[gT)v>tN7)�=yʴ{LwMOLwoHb=!O:q8O>HNwM!B!ăѲ9MwomAMEMEKͧNt%,?9VJ&[gzsb2p]oσ7I$O9qLe!T(̰{e)qE5&Lb2a&xb|ug)#M.%'m[<Qbfr9MT,jk,,*cو 0a3b9˂}PSmLDxfASgMy n׾J`eCCkM E7q\@A*hi,a)>aۊIX+_ۆx1FQ43E$r)q�Em.Y~*ʼlAӞccѤc4WX"t9|X4M 4[,h9u&(fy ֔Զ8x6ld}*me99G&~Rڴi"=FqE,f:&7l݊L~i =RUhsHO=gp02A?QSTrt%$ѓ⢷zV j`QÁ>~p-8aan۰)gj,s(@/Ns Qh~O c.qݩ/\`6$P0Isלϐ-]B^z5R20ۂ|sU 3Ki>nT\؂pӭ7`un"D eA[C 6)zJ\ 'mS*plŤ._tK~jOh {Jz0 E4^3:Q&sr#B!\ yG9|\?3eՕduSE l\<[Aό<Ӯ^aMjUN:|XO<xSIj-xWΒ}l['4}&A2 X5=}s6aX14fۦ 8"3}=F4K ,'4ϳ M׹wv'TW_J<hض)ƢVdŒX ٽZȓٰ&@SYlmM${ݲ}# gN`sRP̲ .^ؖ}N fB/.I<8q] Zl]  }Slhiٴvr^Wsds7Ę`Tq?wc,8:PYif!l6b?3<pAM<(4[z4+[ΜK۝i8={>yŻ=PckSg65͡ͻ \ر%NUb,c:=0VSIŦ1V,uHy:`ۊG'fRmLm9fem&zj~o qL}O~W9NUWY, S]QEWCV,5YUibIw< FͦQKn^&~˺.UEW`V D\r֔/xͅ+`RG+V.w-zْ6[6hj4\NsRȮG4Z>Dۆwv<N)nrK<f.g/3nD\1mN7uMZm)"S;frtRpr7uN (Um1ѼVǷhlk%2xj-Μ;ylOsܺ'Iw&w"\�7uY%T DtvX7,pZk\}4k_Hq{{ be tBkM<N Xa8c$W_sܭw$B!?O^&(׼nՕ [m SO%hgxBQ_g {%p 1>DQȚjAyU5VҢiiqyZ 2uAWՎ$iz@c?.g6545TWZ锢e¶U1X<w&T:jSj 4B޴GCE}_Q6ֱ"m&Cb^l)hln۾igS_gQ[bluE,\7 ! M2r|ϴ%XuM `\EZl i`y?$40TUjW^wǏzx 1-m2ic64ϳ #YUiֱZf6ݞGٮ%&nu}0f<W}k㴩q|(Po1&暑UPlUѪJxzgKWB瑭&rkbƢ&|%Dž! E6}6IEz`:mf֦}ϵ2Y:}ׇRײL|CM(pZN)bbݺ�tRoI’E6aX<PK&țk,[á8w1ڜl KLXF+4֏_,\6XЦ*yplrX<$5A�A`Ny6jN䨬0ٱ5;}RSm`!SyXy(eiyÑ~fS*ee'|XlZcp8)tRvK'h_䰰&RCwӫ*E"ёĄis\Ɇoi[l:'4/i.<eq2ēeJřZ5^XLQUi3M]ub຦֍b`[*yky󩬴`Xop*|{4B!BQ)#JkׯvigE q ج^r1G14{�a #y'' TU)vls4v0'J*, XڥLJ `ljN$lGhv˓+'P/9z?Mtwo3iVt;u.`[7D6o_4[6BxwwSAYܶ}׬p9pԛ>غ$5[Zd3xgʫNܑ:2RAxshmsSIE.ygWnf l2A9pħ 7,vK#kMJw#CgJ-6m߿٬L|mj,Mɒ [4_>+!;[ .\ 9qgZU=ѶatETW)zB.^9pħXp@1{Jt6:V,ug KezrT)7-`)^sZgq\grlEE(�R_gzG*-2],D K7smӃ**XZ\^ 9q'ӌא4@>y|G &;q'd-M6MlIECEp9dA=aQS̈&/׬tQr!BAy}:gp/*8jo3<bz1 :g.ȎmfU}}BHYAczR5y'̤d\d=|pcYsOՀJǡ&8{X%Tηl٬_Oڜ>L[}Z6aVxlXkڨiXeA=k cW~'47 GVވ-6kW ̕wwx8bBƏ͑LOO(B!)}bQ o E!Ј UU؀>�d2:dszRfNGMbJjťfŒn_LZTThLFPH)ZtgAT,kByŹYKlw~dsaTS \7:^3Ʉb E)PY#Ms[lKWB5Lq0?8K*Z\49zv<xT'Lkb�^H@xg[&s~}s.])8}6` SsqzkoʱR|tМ+,2??zeL4/4OUEuyE*C)87k0ko8)iI J`2s}S|. aR7‡|GzږeoYBwT9 I~G+!aht*-0=>gχ哳T"mfGe)FhiMp1k~mL}ސ=<ԗYat\JCZL6s2<s;JQhnAWXh"ҒN<V| spk3}MU6_�z C5:8F1gsYjM],TMU ._ h7XQʳ^ duyi/<M6ӞX"/)J*/opė?,Op:հ<SDG4kV 0}<N mWoyT]5^[4o*p_T _B!B!&3e-U9f¿Rn,QLP0ȫ*3iU²K3O.9ob55jσu+ɲy],i'hH+aJ#K5dfb=Q~?i]Rfd[\N[ϹJɏӶ۵oqNѲLX|8L 384-&s'PT 0/fO>cC8XyPΜ X¥uL$P.Z0",M^ 38N74sMLe9JꂧI^mSR[i,K+V/4mbpi0b+W;T&E\g@ 0j +r_s,*;ĩMnQ�:Ӝ>볨fYKmmH*8qʧo DM&{$;!5/4G4a4hSD;_NZИl?gQSp"5E4Tųgh$*4}!LwU) ?8ɚǧ73aZ VMAI;Zυ걄/rJlR|X3>,̕�?.<;;O?,QdT.@\kZD @}Bɗҿ'Fy63Z&zd8{ V(@wOX."B!b&4uS6�`pHSț@yrH<dMG[kj 5&5c<R;3dm3&qS!Һ\P}obc._O+nM3K1K]o6w}.] iX6V~qS wbQPK̨yaY7lm� LJ!TVZ8Ŋ2nRX:Ƶ.Ah{0CHU].^ YGӊѤ"fzwXz-T~pjȩ�ei6K<Қ 4NZ.dsf3H1ئ"~9qK5%] r7m_YoI)3OFqOe3$hst9ZH@T> h)g?OBu.%fPMMN;Q bp4tdCnۂbZR4y_h_Li""S/ۂ V_7eFF#5t63Zp) Z+_ 72KymxRit_&ag/l\RYؼ>F:ef!=wє݅J^8t/K+J/z<SlǦ<[eޅ9-' !B!;R)SXk3u*uhgSWcjKgUnymWCr93yzg%WC^i$aKm�q& 硻7o4<q)vIp=_WkhRUe!;O>3^1%!._5#'Y[ooDSVΙb{}rhȔz(u*ܪ Ja)e8\ظ%3qhrǦ<)e>gbU#QJ QpϊbYRLOab&W{#qzz;s>`!K[v TnSM]ŶM1 XʡffT ] >Q_kbh$T@:xd[\Q`h8k[pMઠX|v E2'b~Ma:u\~fk^9NyzswtUxp}0pJ*ejB&sֲkV嚽]ggAʦFspZA�ڧTDVuf.8[7mvTVX ЗN3ZL]jodT⌻%)Ww⮔iE.Dt_ o)WMݣy6+WCL ]x_uby;gp8b,iR)Ŋe.W{BG<=vGǩXM/Nuc\돨X^?h B!B;PznjgXJϵ63vŌҥiOyl{T4<ygp(t-f_J Qlŀራnl]׾Ƴ(o,yqM h#'<uugj**LNHh5ͲPļZ_r7-08iO%}]e#|a:|Mp􄙏j=qjr}0}({Os;diC:gDl  ,<MuW>LgL| B TT(\)ɣS_ 6ԡs?z/;=N'6RL>)q*+;6XҥbĆq*SZ)K1ţl#S{mYU<^vx)l8u;q=!4W<Tׯ4nnx!1s.o1;- qST1N6Gn3 @OY]2#Is{<q7ں `^ WDXv32i4=",2K=I=pD׹M\jk,xՄш Ь[rB@kI3tTR Ӹ9�3mUyRᑈ,"\nvy: l}xs+ǟ'o&9w!y]B?w!o#kV\:~Ybρ?{>;SO?$'ޘ \6>AxIس셀+9,6;|g,'_B!B9#&u4ÅM Mi#}r9e ^}-ccX$ ?0.p̩�+Zx>{==j,癹G:JMm015f4Lq39M&˘uQ\bȨ))YdP'-KkSzrGk[fp逖&\\׬S> mb`dxɑL9f;.\ oپWC3z,"Pd\׸iG#<whFF5~(9ţi͢Vdž̅$�Zf4Ql\RV$&`xRۻ dJn:JӆQGki[+FG5'|ZLu?0#G",˺iywPdiuٴ6FiѱDB1HLX2?75QDhaf(xsLm+'8s>֢"m)Ѯso[`F(4#$\Wd36vwN10llڦ"m%ٜ)qbLPd2ăc-39n~<` |T9}slNFZ7/xcGw�t r\\NuD.(A`n0,/imO# 4|T< o1E;'[N8pJ;3|;Cu5 ݽm0ulsxgWׁE&?ӜX43{MwwoX8{>dbseYg&ƻ{ldi3Q\|_ex$"<ͅɤb | 9a5zEahڸpEΙm<8{!(gr` _eḭH&+/|AsϢ֦}EKuEKc. -=/ΒE;衋m5b(B!S~\Sg'+O)jk,RIE&kt6ѼV-j-@34jм?䨭C<bM�w2XJ/OxXu9 goxg X{&&92˛ !7,Teo}7[Yk koٳ#U,iq3Qa9yOmE䟼 LV*ay5/0m$}'.\ M.?y{=Nz|~72WsT+RI8u6۵N39^<ϼw` t>߲LtP^^?SUaãfʸf\޼5[8}Y<Oo5{컉{7鍟[~2%|/]1B`RE͋۬5;q˧Ң׌ib.ضI}s:cx<PYiQ캪ey6U0\@vJ5fh$̹�g<H(>D[bl^j^x)՞[<ƻu^o/hBqTRQd&~+L(XZTYTWYYD2Xl"71<T W"LadzptF"n˙/x\Q]i^;4bJ2^-5'/J)FLP;PTȲ S哵$T&؎ O\ 4n:4=>CfK3zx/Mu`-bd3Ķ(_-ˬeݼ?ͬS]x:mtL>8fT|1zl̈Z()~H$&/.3*Ua`J~Jŧh!B!ޭN)gbJT֯' w{t1ϧ?vg-v˾6n{th&hZo.wrdX/[<ٌ7mZmNWjf&ײu(e?=΂6\2m[eԇyMpq�t0ӟ~>ZN^npNN;8K*gڶ;r`ĜLeB)?KoS,s&7ĒB!B!JMlSx]g`OHg3V6�B!B!BO)qmQ.w{?4g4 B!B!BO)N3\M~lrB!B!B!$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/*!B!B!(r*+ԃ^!B&�~H!B!ݛh!BQϕ˗�Xкq%B!B&B!L 48.HB!B>-B;(MB!Be=B!B!B$h!B!B!B!B!B_']j% !AS &Ox'!!B!ϧ}m�Zk h|_S(@ !B R P(5hB!B[hݣ9|z4~7R!b"hWkZ`ZZB!Ο @D6ҬB!냚Nf  !B!КB!1E�X2]B!0L1 I$p{#CB!Bq;y1Jk4|ĵ>B!A)S"#Б.n;r?$B!ӛ״y<MDxL#B@FY$PB!bz3y>�QkyB!DOEB!BLo_δmL,>2Z!Veb.CB!B<<}xMyvY_S<o7ZB2aԽ=O\>,5D<V GU2w&B!sɼD& u>^nX²T߷y(Zm61uլ O)k?qJ8B.bt(+DDу q+EeM<iB!B2"ِ̈+h:0 X\R$R6`>} hmϟ}6IC`_]Z&¥Yt\@ɕag: \ B !B!s`&} 6j){ BKC⺰y}x4Yl^u?ɴѡP!ӌ,]!B!s& CƆ# >'cQr/eM$!|l?Uw&~(x B!B!FkMރ^6߃0 ˵EoY>2Еbn9ӟhR%N6 "5z ni F齆B!b:(_{3w3/>QQq/г\5T[XrCS E*(xLFr7hJr#Ìd !fFW ]\pI#ǣ[~CFr옶3K3ދm54[t9\>UB!b} ה‮̟Q<M,EfY5sWVZRpn&R{�*֯vH+FF5GNo۰~KmE69tǛõrׯvy8ݽ!BLVԸQֺ<#NgW^o<?zz5 4 `"EWb0 d �nDla%.uTL*�|a=<\Wx?T@h#._ mö1lqL/}B!sVw]Y_gr:j8x}.,ش1Nsͮy_&V 1:<gSXm'9{|Oh![bZr޾+,Z?B12yڧP T2ՎHo|קppĵ zba<kR)K۝'�dRI@CœNHYg"7 CGӸlc y6=[vzHkx N ص׻팗ͽszZ~hG~Fx9 \6 #FF#Bjdݍ_gB!;DBIv>֦Z@oO>b8Hp?p|0}q_b|^Iؕ_|*=2L&2]*07n Kp!ɤbY՞CITVF^L(.DcUX ƶM7:"L{2P r9~ˢk&hۆD\,}ʙGJ3LWǼ'Ґ`C{<vYORW+#u 鴅*<O36M:|(2r.?|93㞳33)}f鼟k|B&M/<yՊ׏[bsnm쵊38T˶LT<[*SնMשI1l\"=q]2F Cs}s]O.}eA<>>䭴9G.n &Kݶf"6xB8|ŀLlwi{ca~`}|6n �04˰,|s+<v1qYQd4ϙ}l-tB!P]mlߞe6Bx= ͛<x;|1)-I֬{y s5,^b{Oހ~' p4)Ny(w)^jf9l˴ƤMγ> =2fRI?&3UW0ꂧ9s>`!dB5ڴ̳ygwdžMcF'OYeY.\ y#fG-hٸ.&8qXg@YmSސ7)P4-M6[7XbU(h/pG@#;P{wˊ"ikauh "l"X&ן `rYu1R) bÇ tv.{bu(_gaDBQUiQYeoogp0ܬw$](ubU 1si'׆5|/q:}`fnm1,U _0z[ɠvEb/|:>'iźU.K9$;dA90:in_eBk!O\ پ9N:xgwl(oL(v-vK*is-cCM QR=&\Zl<Os'x`4g/~R$M\>3Nk.o*bæubFzV4۠o QrݲvMMu&9~ҧޢfSg~*Nc͙U% wcŲ?�ۆGh_p+ mQD9`uCŋ@u6`~lN!B!ttJUvm(kg㚭}>ME/ É_JCIJAOOHWҥ.MM6.夝5kbX9uK6`L$]cٌF:\`>33)bq+f4sMy8K>I\kB~'7݇eV $|MCGOy y,xlGGAC&N[4ϋ3?a[eUE6ORŦ*?'8TށdRh?y#OC>*gKw9,^AifYf=k->L-6Zlh\qzXP_sП?06H(-rز9AMͽf8t'1mK\7k*X\ȾsM8_/VI#)ܴ|f8Nш|6[~e]RIo.˕\00pmkT *k&{61s.㭐=N<H(jfYC&gY%,v+ϛ٪J k\S?$2#bBẊx\S ֭6d5V,uxz7SU|bgkbBָXH&6Ÿt;6Ǹc[2YX&m:|&CxA>֢z*x$NᅳB+-\4-qXd͞$J|b? Wo8\.psJN{tZҜ�mϜ-%4f~m +·>f<ϦuMCU<u]j-shi)xB!adYsg | % M)Ū :| i\ 8g1;U<\ TU"#Y*ƅbbIuŚ1CΘQ.۷O2il˿Tm+z[WȦvdZ8|$`o˗Z[z2O_v6; PsdZp'`ECU<x Ty6^CG}7|K2 ѱ]x\ؾٌ{"X% mjjU܅'z˒֦Py|^'[岬q<\44yR-6ٵel==wLľ/<d>wgd$*bboOwO|s= }P^矯u=V2WZ:A>'G߻YcX\zu(c=Cv>tҥMhaժ_Z ['ﯭ[a~au?F)m[Ӧp9SK'7Pu-T=*Rv~Yt⍀?'e, 45Z4Y:{--]lΜ ʟ[My:`,8u xfr5+]Ξx<LcKC:.pK92وe.׺SSg|lpYdO’TO0~= ^~|gk]ڌFlg8xCkغ)#[c,ms=͑hV͡ʌ*H:C/|p#T|mZ\شδPض)nyL3_[Jwf gXJwX~i~z\^O$hQ]iO\Oi_жa=B!Sd8Ixm%8gS]c|?a^I$3߭'I#C֮[92vF4HT,ˡe,>4~�Ü9S_gkVǞJo3g|vlOpOGK,pEGŋ>Kh g|^Y+05kk,,r}3lxx$. l)U_Xb0TV� CG}>8,YFrT@.91`Bc>#V-wMFfxo2HN1>[U&Tp\hg^pJȮfzfYbrF" ;cD9<iEG}y1b13`d>8|أɝIZ[z{}/#A0of5О<W} u,K*GhLl J.mi/M6_rEv?K\Rh…ラ7s7}F}WfaPĻhiyPV'r:JPCQ 뵖.t CS>E)fd Ŭ]>y1Pm+חTLJ)/ )P-\+V.Pln`::NE9DՑl)XbYpRP,+u)3uBpPLphS[x@qV3 رŔi|^S[cn˙s.9:Ѷ)Ϸ-Dh2qY61dBզ 1F{y\MG} ,ވZ>aASb^E*7i҈#'|7o ,nyұN?3uϰ&SgNvD2h1tt4//qHMfHaO)B!T,Eqivw70\r֭ Z;=fM 05L||&f|AwwHGΓf|tڢ…TZdC*e02qg/�0A9;LG`K8q3Rfq\aE &faf(*.(?>qQ^ZSYaq9$[hplE:e~dZ* \�zh8ؽ'Oz3C^s恵ަ7=2وQ5;'ϱcK_Hsg4Fŋ\s)xfmm.?`,Nw{-bƸKsn9s\샆 ]{,Ҏi.!ab9! ZI:֭%hmu}3IgWϵpR^kظ!FBAؽ;Oo__/B%Vtt8p@u'ذ!Nu)sǛo6C?Wؿ@2X.S>(K`l,_fW*^Yш~&o~sѱfO|<Ɋ&pwpĦq._ ΋cQͿ(v,3+>T33)b+^mR/vP3Xnz뎥Sf#3 Ų"5y%lN;8n10q>Y3"8>3<s2tV)hm&SIB @= z֩Jm :?bqٸin5ߙ &Tc]hiԟqc{+w8!sёFY1B!R&9y&>o)GIຓo/__B74:#<`CVq5jkM)c,Z䖟\$p㊡+W؅oBfu&%g=ɬFOdlZ~M  nߙy-e3&j>89&[QM.W\gt,}S1HS(+P89xlלKB10=( <|R�ͥSL9#1'7e=h-rذ!>wW/TrzHcײY@SUeyS}N]g_L*z{iQ3]g|'d֞;LZ),mk<y1h1W~Eh/pRw!_ִ-q8vpSgB,ʽxW;ffFݽ;m+ /KE06QScpa%m.# G,Z,l^~%KCɤb<tZ,V8f/b%kdEItZ6-.|zj/ESvȌrʓUW)ZFX,ju<m::h5(k4wcfz`;qLgL#}.\ XjjOXD8s>m%*#b.t&5-?Ҥ oBV@2iFAs|R/a^Es tVEkH&O=`B BN}Xƥu]lw_S=Eޤ"mv]gN3B!0lض⭷s8P`|'w&I-.]XVP[c}tR牔3g}zzB֬ET[g9Y}#=kW\ WyMW'ٰ!m+N2 mMa}tBA? V<Xu,)Ǯt\X?ޢ M1:\Ŋea{lLbzbrgAL JK .^YjӶxd? G|F9|\~rp3g|9M,f?[)o/I?aog <drRHDilgIu/_ 9@Ox$}!c9kJv|Kiߝ7_`<7;e#ȻCmW+PbwyK;`L)v-4,߳'O__e>Y]?|9C>ٵ;_^ιsMYZ�n \4):33lgVʫ}/ϲe._jK;\vHdg@8{ O}{Ub/SIx;c G<#QaiX.ƪU맯ؽ;ҥ._x.M<&b.\(̳( vHk^iWryf>dYsal,"jSYa1<b>.bpZC<f2tbeTV*,4מ޾kHmk!G>|)ϼ>qᒙ4otL38vy00l�4,msx|{#'|yȦv-hyd[:9u& !ﺊsm;qgAy 6ۊ](VxfdLjɄQVOS!B!>│шo}{+<4.ogoi*N}B@i|'O}G >(#xdlVs7uh*gg+hnSY'L FF#z{B"|_O]ޜxn*dV]A9�}L@6Q >*=bMpiK"8 u'&Mk)mvKME:h. 律 uLSUiܧf4iEXFd.5gΘ!*-t&j%E G46|cIllo7D\c)޲dU3):Oz`X&Yǁ*K͓{~]]PʔQ}cp}1gM3V?8$S)Ȣ)._x#B<d]yg#vش)ڢCaW\3�(f967;X\d|%L \UI: }Os`ڢ}õKWBr&er5XgҢ/bO9u&b*Y: 5K>3Ng6 ٺ!FU D,Zж1k7$e5K9;p=$L+TW; d?] > Zl> KkVӊwxzWO㍽ec5+MGo" x`Bǟk5Um94[ZE!=ddQiYM*wm?c>rnX( V !BR08h;/\ xrg tqŖqZ[bDϏqAXv o|_y/dX*:;=R)GI'LPҥ\VdsPLDS\es3g}gts�ZG0ZsݽfbgL0`dT<\fߏӶء}MAo_}]gIFЕ˙)LLV3iFF"2YMi񨯳X8fሓ] ZrĂgS7 <#FuEEZqJH6Y)~ރTSm˿T.?+X.@+f_:יe&+Yx#G`Je| ix"9�mHCR %A`bl̔_I&nm\הq(5ٌui<M/h1B 3a�0^0Ԣm YʱH2a(W|jU+c !K;\/tQ Mf4XSM<(&J&eSźfxA ~4"+"4M�.l�" C.fi:,r#K8&YkMi\~9/hNvn1XOKͲvy6Lǖ 16sصGh0 |3%J*629yoOGrK!c̹<֦ty hT^S>Ʉb;6Lj4i~z oaEiVh \rɮBAq^ ||g m ,\+^B~<miE.8TT6#2%Ĕ2o_OL�d:M赴 WosG;X!B*=3Y*vMcF_xj++ef8pPϛ\~#5#G#mb.?a`8.a y W1X,NWG{NeK]LRxv�t),w˂ሿ~1<X ,ogL=ל|i`0?S]0 Dds'|{b6xVRǑ>ofhkh, Ξ6˙^QU^~`&= C6q9>/TWY)yW&(m~*r5Y\5.񸩡ꏲYjk-i'!7u==ׯ&f5i=$0l6*4G{&cӱ^vcf=5chȺc床O~2EL~KJd@kSxٲؤ<+PPDCMMJ+8xsϥTilVۛ-g+WVѺƢڔy )_͔3+*rh(w@ q;=3t9*+,ـD¢yb: ht#B}k459ԲKW̨z<my =TtfsDt$Y۳xg@,fnVl _ Q]eF7Kc>.T cŎ∊0k:/{BzLD p9&c&̵`A>Uޱ5&+x;J8sd`!"8w1;!Јc_ڥmC@{=r9*͚K(u`&L3@[y~_;u 9u. 7njB!ϣٻ-^ZowQQd\=ox?b1yc'?[rnx8o9O~ 48Ɍ{edƗ<f36-lld@ORfHh_Z4y8gq97,PXw'Mffr2<xZu ^ʺjjXLλ9[li<}m)XLUys|mY"FcMoo_/281WI:Sސ#G=m32qp0,lupϾ}yVQUeoZĠG!Y%S=sGUEےF`Ҳ…}ܙ5m642&%ˁ oqH&O GlgrΓ}}(=x<Ic>dd"**,|͛&3WaGz4;[k_E^(Eӓ;jySN&j]0ӽ:^> AG Fߗ5ubeLb k\V.sIFY2'ȨfdtEC7ѩڳ'nӍm F✫\֮]9M])'vR&StQzm6!7StJB!B|8Jaɥg,_TA)f<ύ2=)<Q6'e+y{4Bz&Lpx{K*'ݿO3ֹwJn:3YӖxvNM6 UVX|i/vX<F<n�&[mkQ$իc\ns3Ox;c +Ml\`Y;h y<{p1fɤb˖8G<{?D:mkkmc1%8ws\6Yw':=#>mkR?L ˯fdMreǟ2 ^YxBL(#~*"x{lّ`h(kYp{S<hZ7  Dtu,[\Zz'Ց 'dZ +'ٺ%-q<O36?:Z|cwt1d㊷wytf^nʝLN4ŨRT[E?ghtL!BT-Y-cw\o3ܔN[<LvuRQ1UcYy̲J;\ٛ9] m<3[/I$,EG3$Y7/U70yd/yغ5NӼf3gdT >gRU<Ju>a1IͶ_�5?|%޽FC lg8lΟ<yd]Kr9͎ j-56CM^λyo`]-r3+?㺊шh\45blּnXfPC}?Å --f=ϦbJJ o~7kJ_M,1;9}&uTT !BQU Z80B,K`읟gd2)qCc~$ǹ21.55ٓĺ:_ >c&G%ٴ)hD2O8LqcASҢں홫JG, ?{i ŵ+WIz{C^Q5kb<Aq]+d8|ػ)@2~ *LKw/…?MlVoꊗ /KwbN<bĶС<мn"=5?sj@,ض- ![nd rgR2E!BlE2xa =`LX{O9c{͝eVWYInq7R jk,jk&܏˂]>?a;f }шLmm..iK)ܾv-:7.?\pA{4`ӃQF6(;,\eKkBf={j !97/i_!B!J),Oh] 7f6`2xqJ!ɊxRJ)h h1_cJBAN|o?*nj7cD,ƚAϙ3|on` bg>ݥ+h*y+H�F!B!PH4n, ="];,l qʲ3H�rmfpQ?~u /GI%UI8ü]B!B!w&#²捒3LpR6ʲQ*ݑ�Q{Pþ]B!B! J`bYwOUƽAB9NB!B!xz{@̍`c1�B!B!!W*qă%3 !B!B!/nmhdP�]<L>'B|t߻܏eB!Bk�`YPpl\GE9²$aeY IBEh`;* G ZL{T~AoB!B Z3/5:Q!HTcYd#˂tJɃCJkd5Qt2ad=ض@uB<ܔ( 燉bضe\q,|.?%m8{k&"!B!`(k_έ [2w9"}@!+HQ(&^!B!Jfu<GͅNN^S!ϥ5'_B!Bq<+ኧHGdC̱ ^}T65Ӵj j:r,L)Z0 rضM*"O)OB!B!BgNH}ԕ>|O[ƃ '{&n^o5ay;}>lW_"M> H`6ۿͩS'yPWWGCC=_h B !B!B!9Vt_MbžAF2l]l'vl3 Q{(B^&8?4n2帀& ta.A>L!^f+zAMo qF~w~aYb1V\~X_޽2<<oo=vB!B!B<hMe2c4VWƫf-_a7˶iZϱϱs_`%yhn[Hw7pY�:oZm_i\+fۯm~P eY ]ee<E6b9*M[[;mmDQȋ/e|_D)( /^׿u?cկPWWdA !B!B!9t m g5~TuWHO7 6nfgF{{]՟A~E##Դ.f"NSکN<N87`5OÇ+5 o}\?wy+WQd=~,y :nUĔ5Zk0q,6"Mbq{q~W @ !B!B! ܊~>W?KV~s�0 '~/?Ev=zA+j9H~he(b/ ߾|;,tѼv=_ĊO~uz{fu۪�k`!B!B!Gޜ̀ F>˖77b֑fU,ظ 7& =c#,!Q]Malxe~!hDHӸt9G^ Q]֚K^Ji mˠA7B!B!#lNg@[JLcԽ/jP x C.L0aׯs{! _oRށ"1Zj c9n*5ݶ]쥀+ݿ5466~*B!B!1'3#rGgh"}(p6jZ[9Q0FGQr8$Q2t"N4*J( ХK% 4.]Nnxיz""R7bϞ=|/ۿ�L@(B!B!?dtF|o!8ǿv>lhMӪ5|nBP(мz-`.�j|uѤx7U--ǩy+VR҂hmJp$jj8wQͣҸ|Eq HՂdM-$3^z'SN?孷w~w{>B!B!BRcٛR`(" C|ߣ\â5<*N'9ƺ(B7^v]mG~__eB#;05W.˶ }tC#?]|7Yۍz2pIUGFrYRu8 M388RŶm****d? ! ÐCn ۶ۃs�,^҆7fP~?$B!syל,TJ/`z/8{�,K{%=T6L^mShɔQD؎K}[DŽkX%kHTxRߴNҥB!B!BiN ոOǟ$jϒGzAuӷ\˞~dM WL:}eMIY!AΝ|N*E+Ҵv!!2e,=ro%Y,}YXB!xh9{lny;_Z9C)r& h!B @OAkMEX5,-AoY{Y!!R,^UuAwβ+YB!cBtww҂H 0 GqGIZ!#_IBx8IB!DW& CÚA(~̍cRs#5>G}B!B0�ʭy7FQ"F)嶻q ?+>[-n^iXG!0h&qb{^潸lI0n<==;&?5 hB!B!Ϸ9|FPNw]N@*d2***b~EvEebI<UxID}c=L�F�7^A,Q_^#nA0(Fl',g^Q3x$#HhZvHo*F#7GcfM.n1Ɗ$3| _f嶿u˼7cccs946b1􄂛QqL,QG~(sh 1 `:K^.<}B!B!2Њz}@Q4o~EW>;+`#F/jb�k79}[nl}_csc"s>Mj _~&xz`o'ZGNz߳ߥ3H> 0Ʃ}ߠio{ο7~XXN>No>T Z7غ 6 {DKۣo]o+]orM%)~d,Oe'i==oym;$+XW9ƿ#;7MWOyߢuY?k֔_0Nʖg `,\qnnbxg>o?[tA4,[oо~B!B! @h@Gs_yta?şן%U%\.+ѣGyWyL 6) ]?e"U[r5Ɋl'(] Ҁ&|9],{ƅAr : cX.aP@YJYxl'&o^a+#={KTw: AkG~1 u'Qގ(ͧX~ae94Qq෰$V�`;[BnX+sG^b4>O֔>/?hxU9C:/˕3oQΖĒn{f_ ]3§j e~(q'dkZ7SY',& =NuoM`Y΄ke٬[yӾ É%r! XCAXe9qS4n"Yx(9BMX)MsY�oe2Ju?&]EƏcl >I^#!d52_,/1d~a( &ODQe_B?Ϣȟ80m4giOZن eǨi\ƼE[p|MB!B!\3l[U Pr"W?8.^ĩSM}._LG)Iiԕ $*YslqI|7^>s+?2n.zTTg7^t~ ^;&h[ r'v7eQ s>*j[Te~aū?@sc(? Zs't +"W}#珽_#aϰxէ,s\=]ƆR\D5w#.w(d8{\լN[S`ъ=ū>C!7CϹ]h8˷DWz7ꆥy)~_`ɚS״Pr~q4#ϓӶ,<w/?BUCKx tMxgYӠ#yg²]:{q^-[p?4k^uSŶKLj;9/֌Ch&K2k@ 7Şsx)vd~M+r&Rں|{C @Bnދ{h]n˲iXū?KӒGvq׻ѱ^#o'Z#=_=Bm <(eq\>3 Oろ}HWgƯK{el80q .8w),YV~!5KY(ˡqdFz2Z!B!hpl7M8ϒ:v`]8ï{gϞ7PJ16t?wnE4.Uflge`Ou:%~_P]NKۣ n >E<Q{_cW~Co:ZG}Wwi? }%?M>;Hx\.:^C |/Pi|g{ۉ%ep3usCo< Z3x]^`~,\,aPy5a3se4-N e䘊"S?azl'�_t, 5'5CeBZ'3M<]'IV4V5 oYGAu2.0YO 'dƯqwWma)N,ͼE[8~['vb4-J16|[IV4PUtPU\=N4-(2W/tK7| '~̾%O}p8'g_!uSwJ7?8ry?˿ oۄQ {{BoC,~W_Svϲe=UeY>|a?�/?!ni4&^U|/SO';âdɚR^' < _1﯈Mbኧ'krmz..מ8PxϿ7xBvKpųhbY^~'Bz<v:8+h!B!B<s2�=яwuW>~VϛoشiW7_:mv : aEADu;!5)䆸t5BT.ܱoYCDŽ V~ rH gߥqP q)[]np,us,ˡcYkTԴOm|L<UGe4hRQhCUbE[%nS,ˎL?NVbjIjt,UjSUsSQ:35uMYœ?X ww`t K'ki[2#=\q-`gq$gcOSYxv6nvg|}g7ZRӸ_y#�,\ kM\z3wvX`b#:`M:ذp+kȉ#>y ?=`)EfPJ18x!fGAY$B=v3t`ҧJ�͋w&:sK$Ӎ$ (!Y9˧ƚ~>ƅq8M}]-Lf-G8^et|hwWWS]߆B0]yyX$B!Bqp�Z.A~lhqҷ^};7�ڵk̿{5څlywMmbAg;n\vDQP,@1h{7YW CU�[֒_4k"א(Nv718v:*Mw*�p(& Ao#]�KYAR.7}U֋s}&^H#BD^WUEU@;FHH'le9&M M}0gy<gƜwO0{.zZ*J՘<e1lNVDh}[pziW*D)>���IDAT>E7lRG ҡ -Y>*ʲ<RǞ3Z'�`n#rMKVzijn؎,b6*k['( blc9q= /M,a {]h"eY7׸NQ~]Ʉq9<qQJ"=Q >cyCRuΓw+#OUپ(YCpW:M7PȁfTߓ._XVU߾Dbw TB!B!O˷x+cQgw�>Cm|N^hh#pj}7DJ`+gԌ/_RiF*@%k$/fSƱlMv{ɨ_|hk[Oy̸ @`p^㡭`͉)~C&ބL4Tv8j #)uT?{unzvAD<BvS+ H<{{W`tJp;ߗ=MPCYL*MlO/OMC)iecȐXEm]-�wM~%2/:3Tٖ YyW˙3l@p n~P^rK'uOD 6VDÍz̼E;_R4A#YzE!B!/�Ʀ5<BfPUCNy~^8)eo1|pz! \wu[\z%t jxE8g9z*JnVhSa8pyۿ]~l GpٶiFL<npz5brƤGG/lr6,};)8-SުSuRD͍ CEup0nj|*v;SmWDUVbG0'Y7]8}[&l"no. 6Q4pzn',"mDBfXptfRVip|,Ҍ'4k8.o&fLDٿ}1ͅcYqB-n$zGv44v}1`gA*9&(uX v\v77NG\y;$kf^[,UamL(;@>%_?8].JJJ�p3+G}pjΏ߲/#.. w)߱A3d\Hs 'E}s 1ܾuuasKT\| P:t.nK,k6(TZ!8VGt{GrB!0� kEcm/R,\?/Zݻwq }AA^x!6l?�$ojVB-qr4;j@/X̴ɀMg^>M { /R <§I|=˩n<Y8fdy  /9pu z!>x^$SmFBs¡?͖gsBn8ξKw)݃eò66f|U `ɋCmf1hT4TV 7|O 5  q`#`Kqe4fO/s $D+^S.W,Y :ka<*|pa�_eַ2FɟaOw[`Y Y9ģ}9؝Ԑtܾcˊj9H";Ӧ7`jTVu=ǟ|eWJUː Nn^S>p ):~J݁ .A]N r+p34:S\19�+Om+g{ݽG\Nդtdԗ!^{td]2d 8YB!renO]GIu8h�ÉnDz,8M\n<o3s{98 Áe kF$& axeY65Mc+Bh-cX,4MYZ�iDY*]18c‡e&ͩз4Fnn.a2c毨ޱJ\o<ģ-ģt73%kB VxpD<^,F$TO[>,(A7lHn;&(w|h3mMIpyÍ؝ ˌ4p x](ėQL #A&iA) ;@WJYDC f <nt"!i T:G[imG<҂۟ۗ' ]7w+eiDzyNe}^NP=6݃R NE,B<֚*AO]di 3%nR& H[}jQ#l^mM,B 2SK=nfwcsxi粒n'c?iwrj)DFZZZa O |Olx~/X̨_LoDB ؝NYGv +zاD<L[S5Pno6~`v,҂HuҢDx<˓eƉE[p3S%B4v}_c?;D4MD"];(+v2O8{Xb58}O²dMhllgFkkQAh>8nQ4L3e)lSwix>Xλ.�1mL2m6_\r%]iLgj&ev~;wb t ++ʡL0/:%ݵi:z1v}}߿ _碋bq4Cjx0bh;X,fO߳v辶+:ǣ1rN!B_ =~n3go�0 tH+tY_ft+( bWsf{=6vљNwN7J-2xs tڦiz*}NmvYûliu;n.K0؝>2٧94#zn,4c+pTFT6'сBm;XM3e(^5>{ELǠ}sdfy:D=L/{3ͻ;>O6`N%nf3:%ݞo\m.:J̡|i&B!>*«>Okk3eYp57]k/0}lFe}AvD{L3AIIv[7v{2ex49;x�/$Çfƌ9ݎU46lX/?M~~f&M[Ȁz4:r.RJJxlٲ^{*iC/Hę:u&Joyzn6`ꞦSB!D/IbDbÕÕq=͗:~NfכH?>y=98sqGv߾wWx|aQN렷8B!/ Mɓ/~AA :*H$߃6We1:(L.l'�mJPt,l?rLuV^O/`&wy7#FEujkt0 =:}2MD"f|rA`ٵk/$99F3箻Ɉc9| <aǛ hZa`zzt]cmܹO}stgRE̙s1V2p`%K)Ő!N^^nDxW657kF:0~M5Mf3e{w$Bqq�ZtOnEs&&>\\nrsq8mJ)Ld7hnn|s\JNN.6mwH$xWذa-Fcԙ2,Z6۶mB41}l 0Mwy꽌3+r?.'OOg'kGx|He' q56sOe^?3fahZ܊q:ZZfҤ=z<a# fŊ%ĉ1<ᄏTT a֬-i:~rrr(..efL6 ˂{wx[TWv3l(LcɒS1֭G}uVn*nٹx>/~e/~˲0a 99y,X0] $`+ZY-,b)'EY__ˢEocVt]b(3g^@0A,㭷^rywB 2ٳB!ɒ�t?=_?]kF~EKB3A(Fu^dj4[,-[̒% vFy㍗9p/}_hiif=6SPP~+(--4z5,Y׿= XtohZ2|EiYٰa-ee0aJێޞ?V  c6-[wSuFf ft"|U_~ԩ3D¼򳴶q:Ǝā՘IM~LLg0=8nY@Λ{[>}60` --̛^xwUeF8[n"s%WR]^{X,JU {^_P…osvl6GO4ضm3@3/8fI&SSsV^AC0Mz5kV|΂ؾ}+>/@sso2͍tmvqK!B$�O(ф2gQ6MB@Ӓ#B t`el 7ʍ7B",gFOrį~c,Yu}p/7x+ӧ0 ,+/?˪U˹/sEiğ o 7tn:t8r'*̤nkkj8^1YEEo_믿CK2t0*+NUH =~h[L0M0 nV.2,+7OkR%(zQG)f@SS3?M{O9r,pCL0_?y?"n7W]umm<A] MӰ 6mZOM~`,xWX]nV>,3/4OaA"`ʔg?.3}-BSB,h +`BqPʢ3/0l(e1l(Ӧ&##@ CGkv)))ti.׋eASS~�,fc;عsXPA.rs:e6wF, Ӆ=0R9L43L2k?`ǎ455b8| h4Fyy%s\J0tд>']+DXR lذ!B,_]$}fϞEt^Dv{O׫) tb0 כwW#z s䒏4;r^%6n\QJQPPĤIaZH$L0B!ĩЏ#I΍?};3zVGGU7NEԇܧ7B!YbР|8Tg:e '), t\.WzN{tlkk0mm<c2z}ddd$33;^@`v:Xza$# P]?֭nXX,NPdgt:,৥}"4 4dgPWwX,Νy챇;\\|>Q9RSwm)mұ bQjS"Y\ncR*J),+w(\Q!ThK)"QBp9}VJܒx}B/p:dggc{D6oLuu57h4J(Bu<.W{Gq}5X~=cǎUP|>|X,ƲeÔQYYb6B!`i&0MzQ3jk_nEt:qtN{4Yҹyl߾}PU5<rlOmjF"a O{/p%WHO{L=nmnNKK il3/@)<y<^}޻n/n.X,+MӈF#$ \.at17GQ~E&BS5?#/pSe1 7\0EyAh ի>Kdv222'ꫯT8D"?$Ç| _s=c=~ 8cƌOz,233 馛G,m~?QQQq o:mm!xA,Yw\r%'=gB!'l$& Wy(/A4'v{c"` <| _'//`߿I%H$Ν[c+͢X~ܾ ˲hjj@0nˆze$&͍S\ɓ3|hdMfBP(i i:aH$ahX_2妴%K{ƍRzJZ[)--p !Bt3{`}J}k9߽b\,ٺu } L8ޕ89,Zx^taxg>cl۶ Mӱ,+pM c=ƬY3ڵP(׾v[l?;߹/3P 2immfx9:0FønNWD"Nqq1{yyG͏I<'wP\ܧәV~SOqxT�Z!ڲeo٫J) ҫ*9?� .+>ƍky3w_0.>{DMӹx%̟?Ì=x<ΊKF#˳jG2-N'%[?+Xdvm'##%&:/ hћdddiSΤ t$gocl߾*nx>N]v ۟Œ1rX&tX]Ϯ˂~:p8)--cɒ<RY9lMj39w9lbkhmm"f̸�8Rzs?I۳.B[?*f2 7+ekamN4esfjnΟ=cFblW9|pG8-cnj5M08њa)'NC/p>g Gh4c=ѣ{xL42ӵpĉJkz}8NqnSd׮<Cl޼u]W_a0*O> dee/I& ?<ƍ ;hbQ׿˯MSSS�ׯ㡇bϞn\pNnn&LDE"BR Fnn>uu,^v9˲<.JsS3ɄGNN>v˂!C/?c=LFF&cNbu׷x'xa̜y!W 2~w/+_6_Yj9;vlfQXX5\O~~{DOGPAvv@UW]GM~^{y\.7o7_e͚3rrrB׵NRTT 7|z'<sf۶~ ۸),,N-gpcc NVV~0ݦ!77)xLf$yyA5.cܹ%Kt"Nq:kY0v$gG(JJʸR^^A$!## ;rrrlg3B!8i-c4,+E<#;+OjF o,ZC˸) 7~xj;3>4^~uwY.2Y]탿 JQ_ڢh Bps7xb#߅])Sr<M܌Q7YC2u, {}=%\W_tUg9 O~UV{QRR],y@ osm׿sww~ 63gb޼yu]\}̜9u1j(jb(K,GW_a*�^~%k|s# _<S~ >Ox;[/a�X /oQ!Dc&u liHٽk'�eLY@4RYd4MXp0YV# ESk<j# f`4x<NM~@̬tZt]';hN4ZZRA,`1q=_%c8N|>?q:]dgp8ُ&33 S_ڲ,:@[[+>_̬.KOBmit\\TgØY u44r 3z}sGZ[[.\NjICjlA1477Q__adeKLfc4cY`-H2?N5VuGcey #B3JWCa4F$`l{H<NUii >5K)Z;(KDhiin 3:hD5v\ƕM,"n70#bŮwyw^X?k\:Z F1Ysϳ| ƍ,ehjjbڵ,^~283f駟bȑ'?pW`9\.~tJY5j$q:]][:SիWsF c=ƛo@Q^^o~;.2BQKfrlcTj e^^/=z㎥5 222|{,᢬l`mGڴujS8 3:m+.wVVvut)NSG꼿R Mvܸ\cxx=n?vگu tB2q^۝uB!84�s,±8_>ad}A?>o~>Ǝϖ-yν8qxzkasbX(Z#d J2h 74Pp|47t?9_?illbI sC`j"۶mSLaȐo_5GNezY4Nc$3oߎi޽˲Xj57nB)Ŝ9)**JɓyG/~A^^n*�-BK9VWww${j}+Y<'3O]d棧Ⱦ'r>!BZ? @kht2QJ^ Kˣc7Fk%dVJpg %`Ot 03B~` }uիPbxu*xNGEEk׮!Fw| ^x{#?4-3+0l |[bȑfa$ @&#S|^1Mðܜ RAAAoJIII:ۥcݻw+0}tx 2!B!B!>*0�E *!3M\N2}|?ذa=x-cӆ \{{<f@@rw[Ђ>nZt Fa=}\>Zf ʼ*\vO)n_{?0W\q;v  qe2e #F`eD#G+hlldɒwؾ};k(++p_W{u5kPVVȑ3g6xg9ؾ}.'hhhDQz1yd~߲xb|>y(e1eT4s-'Xz5cƌNg9777ĉ;vqG!B!B2� xr*4Mô,N͝JNs|>~q:]x<n|{8Jf֐#__!ϟH޸k8p?OŸ;+c~ Imm-3 wytݠGp7�r7Ȟ={O~B)w&l2~H"_dgg_O|,[_ddd(,,D)ňo[,J4MRF[} !B!BQZZCD:qW}%L[B41t܀ ?S]]Mqq1O4D4M4]Kf4@>ipbA磏,p|> IfP]w}?|[+?ɓikk ]zVVvػw/iRXXHnn.6 H$ݻZ)))p QWWԪ ]tΝ;q:b&Yzr:ľ}u"rrrH$̟?w{%tH*̉DݻvPV>ؿ;e!q,gkp e}8ʷhL,7(BBWCefP 3aY~%%G6uZDpuK:m0 Mٳ{h4ʸq镼:=Nr޹aw=FcQݎ?//NφB/k֬ꫯ:EA!B!BO @'.GPgdFLg͚Ÿqhkktt:ݵ=>#:�>�iS3 !B!Bq�8[l3+x:99YB!B!/I�bLڞB!B!oH�4pڴB!B!B37q`}M_!B!B!Ĺ @k{3!Xz>fxb\S]uƪE[14݆G>=!B!B!v>�0-BnD:A Z?K,&Lpu5;vmNM!bq#㊆Qqb<λ'8=YB!B!g~V 6w *pv 5<o~_,X6JKK#GLvơCLff&ee;vl=#:B-8>r�}>S WgP8p:ϻC�*+[vxm )K!Biz,XbZ{tC;K !Th{kxy6uNx?o6(--eŊ٫㻦}N)h3^]u(֭>ɨQ?N}QJa-ۗ @$TOKP5X>gx } nOŠ6N~i(ei: z{PY)D<GmBtكT⾻B!8'Yb- ٜOG Hβ,,.u4 Q9]B!CO/YE:ݖ-[xַu]ԩaY&=fHO3s BVhMӰC졗PU8 33nۘ4i_3g+⩧{1*C40RMflvG^EtᖃlZ8իtCR16'<GMc6V[2Sn92'BL4^$W^СC(1bӧOGeZzB!8�ƛ7cyoi}Ldʔ)-`i7[j~@[-F9<BOHfE8vr|yi2yØ5t.S͢0XͰ_Hg3j(6lH,pvcM#ryw<B�bFVKV*|]^ .oeYAnb눆ٰ; y% 7}3 p#Yؼqlv7g~/B!a4]9+54?.b(KQ5`ע!h!B5v6s(@?EQJ؇;fMDXme\r*vs*j \<*Vzw/ᅿeƥ#%9l6@}{ @iDZk8NWh_Km*T]pyI|?;!d6< `ַPuh FN'P!o_Љ7tgB!e*4tt@D TB!g~KcZz~"81b@ .@  q>㈛ J ӓŰQFu J2h 74PiَR o ʠi?i?:� G Ұӌne@)Y,+ݮaw 7a>B!B!B]�4-t O֚erت)3p`9J)֬Yȑܓ=u;y͟iIR|xtS3]}Y[g|^[W11U9n5 Tf\q8.z^Ptg?`2K_W~#λ+gԌ/_R/"tAl.N!ih'S\bfJ.ژ1l4M_B!B! .�mrdn@46G_憙55`ذa̚5xRy9rUUú|7*#}ݴF5` /z||!yUt=I$Ln¼y'O|}5c >RJU΢l%l^%)d۪13Jd—Q® 7K݁u8=N@tnwgb Gpu(irrB!B!wh xINy~r^6go�Zrۏ뮻u@ ׯ{<.Óͬ!wG 3m3B??O2!Y9''Nii);vl ˊja{p8}9hh躝ɟVvy1%b1z.͘ʚEgsDt,+𩷓W:�%c&8 )t"m!jD!!B!B!~>"$y͗u98{G\QQC}LAA͋Ͱ1hl6zێ^xD"$rivæJٰK<+Y۟Y-ð9)<15òL\@W:Y/ZGqsS9c=.V8=Y�fuKDB!B!BSt]#>Sx<^ i۩<0 ¢㴥(ENRR ӏy1I;C ' W*xܹm$ L�躽qd:ftÆӓyU!B!BIZLo/JuQh25 J_d B!B!B @3 jWsJY!B!BI,"f!B!B!; B!B!$4:d): !B!BӏQϵיӺ~#m;6Wv7Naq2m>k'ivm !B!B_ @E[$;N{GL#SWWG8!##H0DӴGH$‘ˤp\Xjv.eߣۜ | C.2c"(ep {Z9{9E#q{sIT5wn9Lnأ9qxx 4\؝>oۿPA2rU0"DC> + 7m<D<Lv(4s4":k6[2w캽 Y;­uTM m !B!BsA?jo7/ O`JSFrءA/ ,R?gQh'h="H_^z%^/ir_6[ j9ĹS4 ,3xM7hϪpѽd=p ne2o>To[k ;#}Lsl~c?ӓՋi lc?ELlˊvسin_NIA=k>Șp`Ns}Mhi+~O_[cȄO杏m2g]2tͬx~B-O"B!B!M0� X}|rJr3,EY^V_wӈc|ߣ+V`f9,Zx^taK)֭[q}lJ) a԰䖌 m%|A!3(ʲ `QD<eQVӌRXf3J9ܩ>+,3Fl[Ec]ґ:"F"p#V=MK^&_} ;u^XMqk-3F}[fйTM467=fwQ59:ͽe haw%SP~ bVfORZ5M {& 0l- Qh #&"6X,@5p- !B!B_6ʢ\v9L3ɖ-[xַu]ԩaYfcqZ"M(yM9b!L+N@iXbK*y$x< k9cXn@9)4{pr6(H32D,ly?H3OE7"ͬYXG4l ;<7'uKD]J'n9ȦS[ M70t.c>lYw.&rhmt yf"S 6`n%[زxڻ zf�pp#?[: CY{%nd?fwS1Z*f~ɟhߍÝA $[V_aBdcؔ[en=ȺwɤC'Ȁa˿(e:߃B!B!omy1.y|rX3Aw`&SLImIU{f=xE[RAf" roIJG[ =]C8}ysT cйL4`1dҥK7]70MK/suҴdpvߨ޾RٶC'}D,o 'k+"Mh7`sx0]^z&&3 #4Z/ۗC Ws YiFNhV-|<:F6,N?G~aX*AC&2r+/L {`rNfPV=ŀd  z]^%d,e׆WYaGpp0^f2*~p`sx(8D"B)8x3SNvhbVΧj͸Yු C0-x)X{6?#?XM"Z!B!B OϙHNˡVYH_3'QJuXįwLE4c^C7qeS(˩H ̩䪱7pȫX]ݾ'=<Bsx6t]DzLXbxDt)ӝy?KwdȫhkaϦy ҡsرl>ؗvWrVZr`;䖌fwGɒU7`l[4y&R1s꺍g`W9j- Άp8xETuhۙ>Q62Vc+;A ;<Z|wӝ_2lZ8P=:b̵T_F H[B!B!IhEnǵIo%khh qfA4M# q>㈛DaA'ah4K) b7dn`-hǡ=eL6|�ݎR*u\0.MAQ [FT3`{:i}TI#M[(ʲ:b6 mk>ne@)YeE,LN<cz�ݍ/U$NuqJ]紎z V7XHgMGÍO]  ϟB!B!a� x\X4l0p`9J)֬Yȑܓ=u;y͟iPWpg %`Ot e o[xms^RËpǬ{V1W}u=!ݻora= M?2;}"Oᣑ&,cVSCKgNy>v*uR[eʱ.N! oqÎ}/�R'#Ժ:V;qoo_OfҰK@< Ja{hi={B!B!�ƺi G)ˢ</ 5`ذa̚5xRy9rUUú|7*#}ݴF5` /z||!yURǛkKb۱,Effԭ>:iql@m(Bu9d G v}1`׺E=iLQB5Xf7Mda&߾=3Q^A$\ϖ't<Y#P/]^!#ovp30l'wtHfp[փ8\#:ah3%m!t�ˏӓ$b!^F^.?vD<D<Bˌn="`6Bd` fj>Rd']хB!B!F? @î} Rdm<N'go�Zrۏ뮻u@ ׯ{<.Óͬ!wGnff|<~jf0'Kmh"40M9spxR{*,+NӇpl_ ;׽H^Q3D9TM4[ p0lN�vk_ `&,}_ rٿd*gйl_ ;׿7P9=a־tFATM#sWY,z蚎e%>t�Zuܾ\OV5mfEZ�ؼ1~S?Me'q}yh ˌR]6efE [:?y iʇ_AͮeZҩ 5v1!Ro5k]a\U^ۗas`}yHC-1cB!B!BtGki M, L.(*pD 5vus<b^YhBm۷f (,,<fSJHkkkmNس韬[�æJٰKSkW�݃6#iƗQRv$i!kMg*e.o6,b&X<~t<F<,Gv ncX}$<T֑E4TM.Tb&DÍGjc2�n#mDm0X+NO 7;08#-@2:֖'u\NwͅҰxFIzAJ 7bw0lN,3F,҄D7ڻ i?æ 7kF!N4onw`1H$޵l}~( !zロu֡{B!i~(Eq!C5SwiYdffЦb9cPJpʮ?n*M+͉۟s];|l#N Y.47͙^L ~ČӝӝqGwվJnK;tݖCr?ݰwz]8W<Y3:uB!B!8~N:\g؏"~.9~=GWdsnw/B!B!"AgB!B! !B!G4ڃB!oHB!jmm-ugD"Ho Ba rЄB! A RA׎nBsղeo)ܑRtYrefggAЄB! g@�\ @ǬuHM3F< Jawz1lv5>՘Od˄ޟLDMa&!Bcǒի1 :Gh);:  ,O΀zXB!~ֈ4"h@iD"aZ[4px<33hkkȽpR4jv.eߣۜ | C.JL"mb؜}2,HHfdigk@mZ?`"a?JDC $a ;8F}z0%3veK"fԌ/Q2x BS';;M6af8:jRq5`ݟ+B!~{e!6%7`)哆ic{yxWկ~%33i3 9vmk<Swi1~x~b) @"ƦkKS ͨ_NeH+ϴZ@ƥicɋ%r,4gڕts\WZ/m{s\|h=<Md]8=_#kcǮ `q@1r(qE?_67=]좑 x3+^H[ ̍B!6g^HgA gfذa}=!BsJ? @k4+38V9}ÇӟfWlv?o]S>EkË:;`0eYt:а䖌zB6c?A~$ښ 7,3v<ڌiƱ@aY T6'xJptqdw2&Y51xu䖌TL`14ݎ$!N*W#% v`Lb #eTlc 3! aΙ 0ֆIMu,bf ehιc l|/ &Q_M7Q"mNg=sZf)ۛKnɸ6!B˲ꪫظq#iJ)rrrꪫN:-B!NN? @úki7\LQva`?xrWGnn.?я2anqZ"M]9b!L+N@iXbK*Hѻ@h^^.{lERSv nJg+ei:f"–`E$aܾs^u/0r@Yl_4:FLel_,[<ɟa< M 1ll~KرYmu8ݙ؝^j3l- o';} àQ`EٴQ\7PۗǟЉB7ܽ<I[ 77`q缧s\ 6cqn$#wf~ �3aO{8]AⱶA 7}sLjiG "Ml^wjv.4`p8( VH~9B!ĹdAKB!D} [Ou]#^kA}ݵSN)YSN4mC�ZcKz~h Ee~zn23)5O憗Ƭs:hblǩ ;w;.n˲˹‹)  7j MV<<@2cDC7P@ğY˛ŁK*q 7uՓU0l16-1`ʿcY ]/2{{PHVMKn\Bٹ%Fpرy*fn##(im%p)1v{<ɐ7`Yq6(cȄh<~FfP}[f囿d/nxx+V=Ő7P2d{`nUna_F]aGSY,L/G龵z?7c]TM ;׽UO2d$o_Di齘!B#N6 ZB!V @Eb쨩edY?Cÿ >L$׋eY_НA&"t{2l e9t9\5.y+v˻IJG_ґrVJFu2{atE5g׆W޶�;HդP1ZN?&Bs.ښ 4ph3e.%x v.b̵_G,LIlfv{ 77Ͱo dA:<FYv>x 3|av4R4hf|D<J݁@2|Ek55dq`;ڳ8Wڰs8zȩd;ٽ޷(+Aͮs1rڝZppq4 wL_-b#m (v Q8p:#D<L݁:fBq:,h~B![2�m7 29 n'??[ۘ @0 {3xq3NJ ӓŰQFY1/PpPY@Spi(//?J)Ыp%Cټ]rF _P_oPf +C *ffiŁKe;xHCE tqLL7lhh6'n6JO\"@I"ea&j)6'`1($VFmjSq{֖cصN<RB %dk3%n=/4^N?ɺc3Q"mu <@eS_XHkmjI ŸY@!͂g!B/9A/-y4HF=իWbPɃoHK:Ȭ"+ǣK:+XW ,Y0bN<֫})+pp\,~[4쥭 wǔ4gJLİعE]I˱9lN+g1z]2azi�ॖFkc+6DÍ.R +@4ܘs$Tih/`B4=U*&Ϲcs uUsҡFR+?uÆO/h[xx( :̏n#mţ^ K<֚h^WB!87Hd? !B~1�Mxk6挪۰ ~M x7-fb=5 { _;x#}ݴF5` /z||!yUt=V),Kw?CPWzwST1Mh7PA,3A$@k%nH'oz Gi�8A ʧb ]Ns."zJA74c4L0c*⎊#YƠwEE[طu>u(KIX<S1Y^`/d;>o0`%ģmXKi}yi<?}M:PJa؜ddf2Nbtz2)vW>Nv ϣf=vA)CE2޾A3 )CV"i䖌pL־B!Do%Y!hEin&,ōƧgo@ 9dees%/KOex5nt=aƹmW9R?7�> e 5`w=fkeǚ@Qʤjҧ7PHAT.=~Y�hAq,o_DI2�u;æJ,y?Emf⊙TIqiMZ[ښk0nz;a5e6\lv6 7/ײ}ͳ~+@FZɕc?Ak^V-NOn^|| U?5ϱc (ed[2W< s ;<9@2[LDh8hRP6RjWb؝~lv7n_n ճq_ش1DSotj}�3<z4F؏Xw_>6o' A""rˊ#BQo%Y!ZZCD,4MY}1pS+ ma2nrӖ ǩ~FCC�`0aTpbAǵ4&g?Y58\Mab1"d(Gӓ߇ģ-4Bmx31lO:mY  +U0mMDB xG,HeY cM7py�HsX'eiM"ƗY.!awPV^` &\t/I mMٜxɀqa ˌv{Xe8A@#iiЈZi߅aKѕzqj9ӝ/X'6RMKqC-q8JOa ldž 71vW)~IN"4onw`FG%qv @Y@lc|?)B3< ?ϻ̂VJͯkF]B!8k%?5Sߧ/Wck`׉xX ۋvECW}n8o,GuGumb?p!ja%ߧ=پv_zx|<ޱ'z={z>\"J5 +B!GB7eeY|{B!)ԛ�t?,Q=~mvQCՋc{3C{95ܾ\rKj>ǟK@ɽlds{|{"yË-ŇB!6ՂB!K?@3߹4Lk6l%s%B]xᅼ,]4m#B!~KJuhG!B|T 7x#~d? !BC-NRMn OӦq֋B!e/uMcĈ (-c (7n<S}']nB!:�8)n~[!`&w;>N,fɭ`,cPNNf@Ybm j p8t:-rr,Bs[?@wuv.08sƭ&B!k:w.ppm}r\v%ih$3-ꛉ 1ٹu0˄998RP!~Dcdr`A&b&MMMXjtu:QX,yv;@O2MB! A4`RvqCQ6W{oK0l2GB!87�[yy ]4.]3ҜLkFwMM wy'-8R\.0sS4n4ֶV{߽l\ǃ`)/QZw*B!UMD#)t(KIL74r8f?kصQB!DhQVDKehh p,Z$aݺtӍ̚u>eb|huxB><׭arnslڴ_/z=oT !BS ػ5ĀtYtͲl'E|~B!99Lgh Gۂ>lA=p0m4.c壥?iw1{%Tl4VUqes7aO vލ,tMnB!6шIsCnVG 8ٹ.L<jt}!BӮHScjj[ZUם:-b#,AQQ1O.9dںxsT cйL4`16l߾ƆFjtMl@!\T2W7$٠Wԉ,,SBqn褄ihv* s(\ jF"aZ1M ]׎FSRh ;LagV7נuJȒ|qkY]ݾ'=\#L4AuZQ !BNN̙B!e8�Q]=5|zDv;B�ppwO|dn9#.dV(</_>^Y kLNJX u#RY@Spiirɥ -!{o.B2 K!B!Bѽ~vc3tUuWN+Hֆ:{ oID:eW #ǓͦP:;:ٚ2_c޺XW ,Y0bNi<¡P*�-B!B!8�FK8 WQB^ǹMH$ظq+0MM(++#//9P\<n,P?/z\>Zf ʼ*\vO)fUTWWSORQQiB!B!B4� {77-fHehNvv6_?R й{8n8}p:ub-\Up88~II!B!BqhEEA? 2n΍`_|D"S2vJ)|~?D#ɶv J)4YiE!B!Bs^? @a87lg(,,S5'׮=d`RηB!B!q�: >cVJTJB!8ƙt+B!>:z_w@!BqvRJa&x 2u;T4-UN$B!J?π;J),+dkt�eu3+ ,dʄBB:oOv@ ȠA;vYYi`Ĉќw}=%B!$ @wA)E(w.M-X%Ah!M;+ϒX,JU([ Xqʂ_D"Δ)3uB!&nX:B!~KBt?ϬYQ[{^/_ҿ`:ȈzLiF"af(e:ݷw6dp~ßWaraYiN,6;B!Y?@ẉ=7wyOk͸⎺Z/) Rhӎd@ !8,Kֆe}!D>,سg'h>X7n֭bϞL<Y.%KqZ>|JJX| V`2dX ޽<͛c&O!?H$ŠKX}"Ew,**a,ԩ5jJ)Xr)ӦA4֯_Ͳe9 4$B!hRշ ]d=}ҏA)EKK X6>x,v;@�ѵcbB!i  !;ML0 VZO>…o1&N<p8[,xbN …oo|D"γ>A,b0a?0@,\;vlf1qdB(#Sdeedx׸0 ^x&FpM~~!G#k/df͚%مB!De�:cxŕDc ||9\rNW0U{oիWvә_95Y wﻗxp8L<;%JNQ_B!ęF)hmmÇ3pN</~n< ?'oonwtBx?x'/2lHV\Ç(**b͚9x+ / ?U/_ /<ɜ9p͟v*~索j$}@}}-Y,Y2jyg>#Fk֬dq_* !BG0�r.~[|\x0/3al9f"`ݺupmC`a|huxBL$Xn smcӦ ?oR!B DG#_ikk%2qT.*t=Y[pWQ\\RXb)df" fmfv;f]ȟ kּOvvᄏ|LnӿfL$`ʥ1 ظq-H$dg}f�&N<G#[l ?k?{p57~j[pB!k0� k[t+.ÈbΟ>W-#'{w>.g?꠻F(o졗PU8 3pZUe܄ <'ؽ{7ХB! y[ZZNII>+8qYp8Y%;;MӘ<y>,]֯_E]A^^q@h4̛aSbq 7㯬\/a|<S%==zB_OB!_Ǐ)cؐB~緘2aϿF^ٛ0 ^}UBi@AAac?`$ӓk /S7YC2u, ql߾ƆFjtMlNB!7aˮᢋ.Oаd Z+0 'E|?###RxvNjeԙk(ei:3f\!||�),,Ԧa 1 rײ~j^xIZ9YJB!D/�"'a]6>yD\~S4Mit:SWN)\ςh`솝qv+k:[bdx>׸l.n_ KG^KρdX,Bss3HMiinFN2$.B!6 (iZfJ)nV[> A,Ov=(u3/7_eѢ+8Rz;R頬lK.d-5ÀDB v'=xL0ev{8bŻhĉt:0M @ !BO?jZ^~~3cGK RQٜ]k&]v?Ogc>rG=HC[]:ȬPx^r}{?1F$p;o@>5U_/r~?%{/%_HF0: !BSts?ʕKy߰kv ضm3uu7F)EEF{-/t2m+eaΜy݅<؟=Āٳ={vr_c'MyyÇ4aܸIW>|4%B!аq~A7S&usa<bvMn'Z>9_ȗ|H")fY<Lo6ѐ PWU1k[W11Ue_5 yyCT�Z!B˼^/yynA|~rsۏ,aFq䓏KOc1c&kϖ9B@cѝ  /K躁d1躞n)Sf0t�esih';;8RB!e�l@O/cLW+oA)EA~vJ/rb7;G^YEPӴG_ˌRWI}s_ʕ晧S)B!iZ\&N</ed˲O2wI.28GSWw˲3=eYL:#;m{<o\ƈcJ38[n3]e]C"fI�Z!e�Xn/e<nX/qU{Z̧'h?9ny7y|rYNaa1.`p8 TWzٿXB!8>ۓ Bw>e@W)wry vrr&xxw>@}B!Da�Z߿=ii 㨅D6 p:v6hH4ln'k !Bv7y oBPu[⣻vo{2B!�4$W3S羹;T];=Nn^^!J),վB!8IcCcB!O>8)@YɅ Rh}Bc,Kf͚5lڴ0~дB!8C�t߲,Ekk[_wQ@2z@b)9B! R,͛7~z֯_ϦMhll$qf3T2B!DI�Kv#VwIxBwzR466~V^͆ ؼy3555B!,BדĚȲ!B!B�nbauW>˧!}4-M} !H$Bmm-۶mcʕYH"@Ӵt :MӰ, KNne#x< !B^�t4--Nd !;JcBt֮]ʕ+ٶmpVJa1zh&L8 ?q˵@B!B!8˄ajjjؼy36l`ٲe>|NYκx<0tPΘ1c(**"###nmLЄB!FB!BLӤM6ܼy3̈́.v;TUU1bFСC 8.#'GfM!2 @ !Bq TWWf6mĚ5k>f,g]|0zh=z4Ÿ^W'FޚB!ĹIB!Bbl޼9i&b.6lǏqR n뺆ͦY}=gM#ܖ20lB!ĹIB!BS<xe˖a6oLMM1Y=-8p@N(˹;N N(ydzRDdq8B!D�B!D{ xٴi;w99''J&LѣY<bw `:2sd;%9$I{ɍC{CVye^_wI!H�Z!B>^⁆abرTVV:-Wea̬\ ]躆  גTRZbW((B!g* @ !BqIcc#6mT,g]QJaYVzC2|pLB~~>>߰iL(&_vah}^=Py$\) 0Lgg3pݐB!8wI�Z!BS,o>֬YæMXf =r<~xN ppptFɠ~ ģ}0i7׿L:<ϩ BkX{͛7'MYY;,rNB!B!)hlldY˗~z?{]uy}-�AD!VSTdɶJl7X8df♬ZGI&,M̓oq&''q%[%E")6W�o=eظ� ZE^}�s{frJUΓU\0oYiϞ}_$v.ƧkYuϖ-g7;ph8xO1Ͽ1f~7̙3лG!$B!sqQ>K{{;?nsEEuuuZ 6L*颻=,^gϲnznn�?ٳ<yeY(G�> {B! Nh!B!w念D"1nsqq1,\uֱj*ꨨ',ʛoIKK mfΝܹxাܹsyGK{+_MB! B! ={5," CRQ__ƍYv- .X,VMyfضRA{96lpGyW^y'OTJ,B! B! 5É'm8477|r/_Nss3UUUR|~QJ*}c? Ðm<DB&!B�Z!B1raf[[d2_ Xd 6mbժU )/ϒdZkS\\|SqT*Wl}0 W*B!I�-B!ܵk;v젵~9ZCOOuuuhu]JKKZʡCXnMihhsXcƌ?o|z !BB!ϟ۷`mTTTPWWƍYz(M6XE__… 7oq+Bx<οx@)??>ImmmwB!-'B!\m\UUEss3WfƍQQQ!sh48Q[[{ˏM}}%_F|k_C)B:!B[Jh!BqۛL<v˗a6l 0 ӻ;TF ***ַ7MBM!░�Z!Bܖr ۷[^1taҥEn}|;„B!cH�-B!nܹ;wC5k0{l g6gk_5!B$B!^"?dݼ۴]Yk-(uy' Ð|Ez !'B!4l۶;vk.Zʕ+{$tFy'ikkXhw}w%BqSI�-B!}_|E>L[[A`YV1YSM<~8y$ַB!i$B!S^:ۼ更a!���IDATH$�m605kְeYL9.̷mzXB!7B!bJYϳgz{{ pTܢ"ٰa7ndڵzB\ֆ gWW<|_.B!n B!ĔJhoo__W;Bg5e%KxYr%UUUV>OիW|BI!↓�Z!BL d;w}MP9 CJKKYn7nŴVRR׿uz)o??B!$B!˞={Ν;ڹ{w 6n: mc| _ooضm=P$BqCI�-B! _~_W?~d2_PPkMii)lذ}c̝;Cx'غu+ŋihh(B!n B!-[oOSZZZF-*kax ֬YCYYY,MU^^Η%^x.B!n B!-믿s=GKK aY�J)i!hyK/裏JſB!n@ !B*N}v~y^`޼y<#<#;VQQ?#^~eB!mCh!BqӴ[U<K,İ 6vZB!mEh!Bq OO={vMMM<< 1*uB!t$B!8dPJ!<#|K_b޼ySR ^י1cF$Bq]$B!7D&'? ?U�hロOl޼u =T!"~orlR! !B\ B!uoo'Re!| _S%%%ڵkdǎ@ !bړ�Z!B\0 Zf1ӧO|z QJa6<�_ /_^! 1455q}/~BI!I�-Bq;tY2$L^0 % C�<xC_TT?yQVVVbZڸq#/"{�Z!ӚB!w.oH$!A0Gչ[zݺu|_Л&Ĵ|rf̘믿C=D</B!U!BZf ׯχAqqض=O.|D"lٲEg!SUU6mb߾}\pB!f@ !BኋWBuuuKzR[5'N(pB!B!+V\W�Dx'*q[Xhx{z(B!Lh!Bm|ӟf֬YBK7ތ3?>ǎ#Jz8B!Dh!Be?}"!Bxxe˖q::: =!Bk"B!�L{s᤟'B<K.<>\!B\ B!DܹsyGDԧ>%BϧBE!H�-B!FyG&]! .d˖-3f`9`#Bq$B!\M8<TTTzBܖ8sΥC"B!Ĵ$B!d0d޼y|ŶBY֬YCB!j@ !BKL z455zB.\m۴z(B!WMh!B1K[G},B\Z,ˢCB!jr B!g?Y\׽ߴ<,[WQQAUUZT!b*�Z!BL`ŊB\O<!bBB!v$B!+_ hKzxB(555tttL& =!B2n�T =>!Bk`~Q i&֮]&|T? q ͜9A.^X!B\g/.B !bo"Z J8L8Immm%۶+PB!3?(Z>)8B!&%B}.nl:4\r̓zXBQ ÐBE!\6LRQ`Y.Z!S[ &� oL:/fKx3ps'^9w3gbYB!U7VJq2 ݽ8O!S &h4}F\\|| :Jayj =L!Y!B\V@۶dY.v!Z B! -²l"mK|. gDСFY%*�$rR @B!Ĵq�ڲ,\Ų,'�Z!SL.- qm˲$#~Z[/QWWG{{;T.B?B\5 5? !b09z\)|ΑZ[+W}i<+pB!&͹rqK-BBΘՈI|=&>H-ĭc6EEE~#B1iW sF_ЩzB!F9GBh!nR BE!bҬB@!Bֵ9zRy<Τ IBܖ-PB!&mйB!(\_) sZu]�-BitnAd2B!S¶(" >H-UUU@www"B1i hqN xޅB!hjf*V-̮U%!9GBh!n B1M@s!t]EB1uuh:/CkjABݬ9GBh!ni!B2КL&`EEdB!BLaJi!FsBx�z(B!6nFT:BT> !bzPʴ KBtֲ9*|Ʌг9w&U] Ĵf UaX!BLڄud}pB!!ZMV9B qضMqq1DCB!h=T5$nB!NcP9GBh!n ۶)**"LA#B1)z !BL'LN 15!BL7G'Bq ~s>H-qbB!Ĵb]B!SM& S'|ΑZk7B!.$B!dR[_$lzvʄ9B qքa(8B1mH�-Bq1i͚gRZN9GBh!^ =!BI�Z!61>-D s!RyMzHBLimSTT$B!VL� i}B!ĕL9GY%k+_Pʯ;ÃB!r =PmAU !X#Z$Lڮ.b+eD"e<5FB1>*y�szXB!BhGWX˂8̨t9sO8.TWZN]{=WG_!i  Qsm}8N6 i?Lz_ !1 PnB!4rRP^fLiY=a8-+R[כ%.nϰswvTȋ7>cL%__YP\(.VD"nxo-Yf{ɿ!t] xg[#JA߀b@&Iw׼6_n繓_B!%|ΑZ%z8B!rf-= 7E[he5̨{}xLqC4/roS3&V b1@@: ѨyLF:H<̿G\z|qY<.5 u:o=o.\F3߿rz+QS]YnpCLGJkN9!/B2Ϸ- ool 8f;Bmòu{x<9Om<_YffG,Bm)ǼNnqmyǖj\ !BLv s$򊋋 ?B!k m 6TUZlXA)x!t.|~(WG,`rʢ"lݑ K)N(%%XTF+֬0ɦ"֜m xOސţǰ,>̪ ~ǁk"TTXڛQhDЖ(3g>QRb1 ;v?2-5VP]ekoBx3We|p]XGcZ˥gFGy^KHjfV[]&5GO|#6~v5km@sk8m_3PhC")*-֬PWcẊ޾d26o?iXءآ-` VtFlߕu6kVڸ7!CG=|o!b] B!#\S�sW*z#p gv"@XTjK:L<M$?ƚ.Ԣ~Meų/p]ECCqW1b 1U3*gX imS3˦¶T~L53m*-}9uk`b).u6?{!E{6+ 6iwSZxܢ(ɘ'>WZip(~^ ?&Ԧ:ލT'! :ٳl,ˌ|g`1sE*e3H,s/p>h]kSVb6:1_+-UR(>hY6!~� 9̛`[g'B!$sB!B)V wZ>BnR !|7\pCoH[G>'Ox ^*_|ςy>ަ\-ζn9 6Y2mҸΦw'uimXe498=<8ش.B,"ţŘ`s Q:· nZ8V3Co_ Q6xYlV,N,ZpHu4ۉXk8pc`0d <̒Nk/ʥ.8=͏`,[<^eJzl ŦEˬj2:S>0){C֬hCqm \!S B!k±!L f3޿x+`BhCibv+"<[_MQ\EqE@Yn\>|?K{G@2y}rWqސ61  ipUmQ]eqrapeEݘ7=&W$o4aٮZ)Ycz.c5f<sWLV2Ʀyѥ/w3x̄3*-SPNYu)!> 9|cRܓBgHx_!1"$!A�EqUδ8G:%|B!N s$B!bz�&s6QקśioZ^̴Y0ϡf2=\j*KK2Y80}dʴ`RWk_iHgL8;"3|Vi±cZa jm)i'dR3ДQFldC<PmghqB=!YOW =ԉ&Xl'ʼ9m! -ӒEfTk?0 -yt,kvYI$M/_mp2-KB;ݝ>H-İb�d"B1)@!4\>|jgͶ9qڧ1="fV6[8g:pQlr?JAM. U&Jg㲞Y@lcn;S)=jAƱ4)sPT_ҚkRk# &4;we sXeBezH&4%Ŋ5\@;kWZcC79,[^|PLi^exipm4ǡyg_JAWB!$sBEEE�$BE!bR;!?7V>k sm>`_Ks5� ѡ[/ 3gĢ޾d kyV7t  YaLn Qy H$5Ja7ToKpSmuwEXRoVTUmٺbc<Mk{e.o3aN}D5㎟ٺtSDkX4Ǧ/=Yv|Dp]d*h!b GZ!B0B?B 0ոJ3>=!Uz4΀0Y3mJ!'D#tFS^fGӚ:oڀ d1=s*+,~E$RREUtvbTYܻ1ʜz7z4x{k`ƹלϿ`Ho>ge 049|q\G1ce>,]zNkz|=r٬BgȂ&XԥܢHQ;Jlu2?Fu*LŽh ,^`_k{@&3~B!BI-B!rh0c DBWKoSYsP<OuGsvfYe Gض дpl\͚TkH$CI+``Αc>(̞e =!EDH4 AKf:sALjv|e,a8zh Ljnq,=_?z 8Q3f~ClQ:d|TZ73i "i5UЛ7D& &|a,Uu6smzBmǝjB~c dCg<JK,֬t`hhvն 'B!Dϗ'!B! B|:̬@�/tJ֝x+)lƢgs* CO^Öe%QTP{4H5Έomص7ˌJV/$1^*ymg[[[3Q^fx0/ [wdy77`; Ҕg: ysV.sI4 )*RܽT1 ||,B+K)ʆ*C<,n汇:jMjh_k"iHj~L2<a,e }dҼB!!H-B!p諑 'ϴ>6T3 ۀ7:ws_ӣH8z=_y[z|BOooDaj*Iǿ ={zblv9ɴfnMyŲ%bEeE_ȑ~9W>utv~<_,0ܱcǟ},BaH|u$B!b+h� dq CWH C>6?Wo&/<r k"2U噌WYδ7z__B!$>_ B! @Rj^z=mCvMtwOhR&cY!$|>B !B1uݱ4*Tʋ&N'm2 jD\!S7B!BLMwt� o0{nBq;R 55&ڹ 56{e܌1z- B!r�Z!nVsgy:;>mSY9 Knx�H$p:b%ĉ|66nsK-B!Fh!B[fJYkhq q?O<y6lqZjضo_/CXȑkg1oZ!B6XvO!b=t:E*d˖/>[8}̫iaaY%;r5cv&jjfچiBhzC!tӲryB!B\T@ !B"jh4C=ڵf>+dZaa@gg'/vũEiiYMRL.zz)..f"5fͪ% {z.r9"(_Zk.^줳0s,+ox{B!$B!nUA�ef~q~e]̟?A'ҳ)�/}k7̙gϞa֚o[|{GXz=;?;:D"aH s{G >p}[(B !BQX@ !Bd:|Ikm[,\۶9w ygoٴ>6m<w  }<Xl%εs9(o|x^˂ݻwo|KORTT /x~5ow/|t: /<wRU5U֍$B!p.@k@ѨVB!M5ԑNl{Lև!c6ܹv,^/~Ju&{"w|s_k_WD".afٵZ{w"J?AknF,Tb_�E?>#fά_uu �TTTgٱc++W) B+xE B!U& ˂b Ƕ k!BPZC<f~!DṈ[>]O! o|?;& OhQ dtv'ID-D".A`] Ap+z9rKWܼbh;Z8/E)n#ɐd%|,˾)VWpdb""1Y[!BE/~˲o0B!7R0 HJ%tJq0Ar!5k6d͊A2(VXk8MjdL&Mii NL&<VX=@ǭ[Pf=dR>>>Kg!B!nJAI¶B!bj BE&SQ l~d&[_nY˲,Pֱt R[[ϗuG~T7{R)βhb6*Ÿ=;N*(k***D"TVV/| nxj˩}kB!ȕ>Y!%Yb.2শ7 3gNq>\x4 M7t y痼s\ŋl.`DQ~} v_eG_kMyy˗šCyIww7gΜ$̘1k7g<܏좧;wK,B!mȹo!B!$BJh5�Wh4Foy'P JKo}Zs9y ,X̪Uk9?G{FWUUSU0 r,3gΜyF?߁C/~ n۹in^N4$|B!$B!EnvfDD}}JYCf?ĶmoF<^Ĝ9Xz=ea6WXx){f`rWp�V\W7<ԟmۯ<OEE%g7pb'-"4MM ?{gODih Wu#> !Bq�Z!!֚k7~^6661wn`Y6aq aÆ{}q!+Vʕw0oB[Hضo1155g?CkaYjԿ> !B15�zF^<+SH^mCI9n֐y*D战͍fa2VZǹYplz6羦֚ CkFY!BmlH*.xRXcH¬P t9n֓y*D战ύVH,B!r]X 9{Ϲ !_M39βXaNm[^q"T\1Ӊ7B!BL=@kaխob=;CfK/帉By*D战dt$!!B!SuT@kҙ̅5=tukv]c+.)MSq%2GD&77' B!BL]ֵ<Tiɀsl*Q d*d5y9nby*D战t c1vTmP}I,B!vM4ޔ~SC71U<W"sDLrscH,B!whzba[&ML%2Oŕhn$ B!mXtt\rۺ71<W"sDLdܸH}y> !B1}\sB!y$B!BL/@ !BLQB&B!ӏB!SІB!BLO@ !BLqwz-B!ӗB!BK,B!6e詰0Whn<٧7^zzw:]̍;ǝBK,B!W�:E4z믨, b\za7slm>:L4_¶ =Cn"Q(eHшDa˝ GR ,ˬ:lUB=t*\W^k{9)fTZX27wJ-᳸ZabYv|C!BLcέ~A˂ ]fU[h`쯇O|E9{[66E|BzRE:im8pc`\>HDa[)j by˜F"d2ـ<Ri}[^�_֐4C<3 Vix Eo u6K:̜ac;p;qSgMkVZ%brhTυagzzCXm;d0=$۵-X2a|rA۹-=a=1yZ7՜?\Gbiyޞa-Bo}{bjq{p$|W+KEE%B1�ڶ+,^LitH>V`RRZb6Յ|$&̪V4/rYҜbYj үez6<pOUϽ",|Д >`eK\RiM:5áy˜z_fpL(6Qw#^Fe|_s[[31=42K|pR<c&[M)Xc㊁ ̩wXζ >̒ !Uqίw\hn]ຊgٳ/CB*UWksd]öa(7D�Lh\wX0_i>ӤW~_jm>oqNqM>LT 5֡. �[n%B!rny�Hj~$pmr&œhTa)z _fK[A&gc%yg{XTauk"<%3ϧZǧ l| �0aBf9q Q8b Y3m"E*]*habK]y4ɔ8x+ ~sۤ5d2M{:5C`LfYf~){igܰ<Qh.3桀0<Rp3rG#Z8«iz8H L=zf5AȨ[c)leoq2Hļr՚#RK8OR<~CP ^~-ͱZe w<s5</6h"8;nżFu#<%k>Ji{)5s?2\q;r,g/>Sjhܞ d="澿e - ay0Qpr[5?jm^7oڊwܻ)ʦu~J 5fGE\\n(ńtx{kHD LϟxrmHr,p#wCFW{ 0϶%?ϊs:˩},..4B!,f߯Qj/洆RMm$h9sOe#?sFVD8tqysV4|x ˙`TP\Uet˹ \jܚԢ~jTa.׭Rpe*7ip]�LkrdYaLhT`]+/ԥ%&Ln9q|mw $" )56tk÷/gGE<m2As-pع+˅nmoS>PVjjQ; |OcCmE"9p ?AŒ*\fۄ:9!�䰬٥"9r'8H;/t:,YrgGvu1$S,]0oCIc'|}`++,֮ry}|_Pgu{TZsϦa`.XHj~VXTX϶q8w!G _E\;Lke{yجhvm׺oq X,[RRśivQ2c̟p7jq\s9 6K̚iJiN9pĖ,t1fp0IG}yfZ.t|8F9v'5Xnߕ%ifΰXԥn(l?pţ{SV,s( 9rܣ~M2ٹ+˜Fe]Z;|fΰeCG4qh^0&99-wG3^䠁-+45d=8z[AkQi)}sTm\d`V͆JK'A>i]{s J6E}^n݌ǁC ;϶y ϟܾefKLTZsGŲx{@Q|Zq>W2T?:/._|gyE}x̛kql8{_!tu:\Ldk =,!B!u*X� 'XhkcZ?< 93.K4,^)<ܵ\8=FcCqb^0_6|4ݽP`anٞ7צ@STX FYko-/ov LjV.sYٗR?0f].6տ=uP]WS< db ]ΐW~?vũ4[l1o^MHi.tljÄ96 ;wges QThv{Gq y/p }<by|χdRhMg^Hqό*O>Φ'$lZa"=`R, m\^m˶EP(?ٳcnCĆCkrtleÚ}&|Zeb_IrħTGb,ZLL}Yإ5ɴ&P\xMs.ny?}!IWWHcÚ.KẊ6୴T;ލ3*M\k!h EqFL6I=Cտ#o\v<`':&xQeѼ(ƌJLxy !kldغc~#sc=~q& 8li0Keŧ3BW@Qԛc88Y8ᓏĉF;~}SmCY3-֬rYa``(l86\ Y_qŲf6`BSUiXgRQn2kłyabϾ6WtFsiM2yc }L"{X)l[qQ6t=!E<yf?Zx4,ovyog r?'OTWY<u6{^oaYN/7.$Ӛs*-x,NqI|w`> )+4h^R^f10)7x3Mnn{|޷ӽ?ay˖-+B!ס0hTHsJyT4.df5:cl'ϙ&5\ͦͮ)+Ysk~wwŞK⦺7W76 RiN (+U|88]}YvʐJâz4NSAl[ko^'3_NoBR Y8ߧyCC]1>q.$i@C[bhv98ٸ6K8|'*/ʪeiBεQ4/hÞ}Yښar>c AUGWȐɘ0摇b̛cs]“;veٺ#,Yrφ~�Ͽl{@y>g0TZSYaCȄ&*Q}Y2qw9|g2E vx{k7c NCG=<TN{n=xYX{[b45:tvfk9uG4ټ3֝Y'Xgglۼt2R`~ͫHQ96e/fϾ,%l&h\8uٗҜ<SYnq(uUpTWVXCm2`B{oG<;†QlN(ipO$s5+KZ؜;i5٬yt ع1}mYBwzӭP?030-5QBx+>|gH[ OL^z-͗>S^L?xsd^KxLm4r?[~;3;KaE9w&:C_9_3󭮶ȰGUg?֬GyJ{Pt s=ۏ 0`~L6~zJBh!B!йgHH);1:iXohͷ8|c ̭>FQen//S83k{as؋\kgDAؾJ<Oәќ:p BW HFL՚ dž YA{ LTimjz^cBfr(cl2[o_;0& Qe V4JCQsy2ٶ3âyfΩ7->Z;J-3MF;_}pO9z͚bEA͎]|+twҚ6UUdPgPg*T8:h^eHYm*2*%ŊzTJcW~]-Gb~[[ݽ`R0_IẦIU±U EnTZ IMk{@UC>&дΌ)z ;MR ' \ƾs(>CE!^}M"aB.ZÅ΀W~&>DʅcSR:S8`qeҔTWY<p!l?Ò35/8{�k1-j,*+ ]DŽG6tZr5 Ѵ H&5e&oQ[)Jή%fΰimvpk0#0&I&c_\f\`{3{>)*R ){ocR2u~9r7w8(8jZ;T~^ &BI4Abۊ<?\gK)F}(t u9A/'<̉پ};e~~i%KzB!BkP�Z)l4ɤ^T�hplEiE&+)eQ(ζjgYC)G-Ʈp!kQ| WKmgZ>l-(e٦ {25\  r0&Z=!ooͰcW"EciurKwoȞ}Y\4f,EZ8tv*f)_jB#u{cRJ5sM\P(dH6GͱM+]lK1vV|x B_WT>&5AGxLuJP>fAxL:Jn̽}!c(io9�h+E#@ji^.$-$`@S7axrR]c6͉g>0Kk=>f% >Ɏ<)CKj9#l0cw]iaΓ#?Jg%Ð{1@_5'ѐoso}^(f,Z<bfa.K;<xo<uɱQ)+U70s~ш"aJ7t哓;Gbe^3jn!zxnh WșpBwޙK^=2|5̉s}{Chll,L&(.+B!}8Z.GhCm ۶DP =!}f5MPq.#`NC<n*ǯ2e06qcklcrV0Gr3ׅ?\30AŦ:R&<ߕ|96-GZk5z/CvDo(xMkזƭSiy&~g[,8^)UG"&b1E9pYm C0d\�xC, ?5l>`T?`>UUP^f?1̳fڗ0eK;ʩ3>4U[6G/zJ~MaW;n, MJF1Ų%.ɔYpm>>!ϿfMc[=$)fX9mY:BeO_HM7PZ7!6}&ЫWDظ6¡ &B֯�׹CL^*mٔXĢD$b>ik{GgWH"r;c;o_3,J-d2LFSQ^j;492~?.nѤ~(@LiKLv*!ϽK>@ݗ.v)B k 8O~,bǎ<!�EEEB!A`+Wy5nlVs,h >:$&<H5gZ}49,pg`PP3b<bLm:,^`rU3,y(6OU]McZ6D\+֦jw2~Z:bT?BqŽ|f\E„z~� j"Ş-YxP^n*qhlUm烞E|֜j,[QQa+mkgćjdŁ@!-YN)*}/KЎGSfͮ'_[M}-YL֮Z?-ovYwWQ! ̭Lhlg8:y&u[6G,ش6B' vMV0& 50o1 �tVsO4{}6YGc4}1ťZbO;2e[yFŌ*UMmy/̲էڴ [yW8s'"TβHg4o3>+s #T[϶yިX"?.t5Zsw8]+bT|Ɯ#" ukp矉~y&?Nl~yN53-,eV5jJsoOR4ns㳨a默w\&|YlO=K.% C,b|eppЛ B! i$nW#zY4Y$SM6-ۙe`0$ Me|'|K.21o{?Gc4 fVܝP)(zzME]f״cn^4>swIEޭɚb|$΁H|m+{ cb:dϽl[[6GyGOcQ.dҚwEp€kvzh1n7ݑ?PC5[L2sE6k<ḱCCX&9uƄ!<=qXLq( jfm |x /Xj}O5;höa7b*yX^A ).@ M{6D]cSVjٽt3ɕb$ү^8ߡyC4I3g4/v w3a>W6n2oY䯨HQWkׯܵa29m %m/FjȽ|Fmy>3C.V<po[3lXj4Սs<aDXo>#c.i>{ζdWGx(U=! ̨,ƶ ͼ96GWwp%n3U>-G<6܌Gg0|pv}f͊ḟV 9iq|^i^4>Bz̍U4fs'fy6|Г s-[ƿw??(x())_I4-^SQg*eB!"ZC"eL bOezeJSZ𽝙|Oҳm;<uX CYm'-l^a]YIx'ͮMFd404aYV,un=3w4~0vM8f~C48q,YOk6o惌<p=1ڻ"=`B[0).vgclNCUȰ~M{6DڶPuq(kV�$5 Kj9w COyi6oh|;M`= 4̶ Cyw{΋B鏛h7<3><qpjL[s۾1K"ј"#`FE©ڬ+RHh0\{̚iz7$G=:p29> G:y?<.<Uf4d͜ ͙ږÄ>Oiv}QRlancŀ_m"Ţy;N53n0wE& ٺ#˞}Y.j {T0w,hr 9r ɟ;bE]1E"~.A`6kΓv9 yw{cr:w|pT3:@H2=<?B D2D†Cs0*BΏ3mf-^b 5Og4fyg[?0|'Kqb"56\}Ɏ~Zs;2xHe{$~ $4/2 Ӝn Xe\'_={Z,'=z# dS%9g<Sɟ Ϗ~#8O>"/ׂCz@ !BL=j`0yGAeQU=0 ΋i~3CĆ<FoB0E2@H c =OZ+};"GD &tUu"ޫ8ZRH$4!Oq1EQ<0ԅPZ_bmc |_q̢fE| !}!]VRlQ^fZ cz4SQfQ\4zɤ~$6i[*itF"&Io/a&� Ls0c_^nC GܘJ-JK9.E�ǝ1&3Vj=jaQ'emm/+URhdx~7,ZpL>ee<gf.Vlmq]-EqE&235!Z,ph,94r\gfSuҦz3߅/scO$u~Qʉyjh!Gׅ"3:. %f!DRH!i.͍=LP>hDQVE}!do+X=g!;q+) ]iS;R<fWZ99{qUk9X9yR3˦lÅOy*p:cHn>f?F_?RiMslik}UmOa$H%8.7<ϴFg,pڹ{p8O`n< tI.Z瑞yo200�@,'_*XVJ1[)e˖BO~`B!pИ& P6Dr8{oycw25FLh~Lh ?6Lh;}FoǓL;4ψh !zS՝ L`1z.^?/`B3}Ǝ'gI34R^ݏw{3{#8Za*8v§iٽ/`q,dh8\񵑋 ch1_<.LO.ۡ.?1} z#ݣsr'07<Grw#%n*.x(K9: U:!PLv1sCf}5{r?O<c-y7hHO?֭j˱>f\ wga珉^q1?'ٟ?ng'<oH$H|{#/y_rŝIB!z zY\?݆ͫz^^߯gܷd^c.tJӑޕ^kϹQu-̶{^NaMz˲Լ5fW3ƆL׳/ky^|Yh,A`Z8,[!f9vŸ=6׻[m2nlMlyYw&L%/J~W{.svwC>ضg>;4t~b1>N uq}PB!B)\v61)hdxLft/L 6aYpL;b2Y']ǝ-Ԧ iU5L5EMtB>縮WU|'Jwf̘C=T* -CB!cb܎=vqG1?v*UԑɔϓYJOs珑}/BϨ]sÍFy'?m( 7TL&YP!b*�ZL)c{Iə CL,fCǝf7+|Ώ;_:ps3ӧ?s_])phud.B1ohB!wB9<�Zk,ĉٟ, @EEE"B!Ɛ�Z!vB[>甕oͿaz<B߁Z!bnCSL2Oŕq]o}F\0 !ٟqԩLQDbl.PB!@k _1]�W8&rĔ T\197E.9;w?PsNSSϊ+!}?sΞ=[)n H&I�-B1]S�V,p j\WcY:VC三D橸#b" q1xm+nemw{ >,[z*B+xx9w\r>9A!b깎 hE,U-ShT.ML 2Oŕm{/qz9zҥ0r|eppc7yRQQ뺅B!ù'*F,V4k:BzTPYY_"ML2Oŕ'Nq7ȇ~8(w?:|ۛ>,[ӧQJs.7(***M!Ắ,B(B1]S�B)m;4<pC!-|Лtgr9\7Թض?N9rD<W"sDLd2sC\?R�%TTx<>^Cyud~zz)Ov|g}kDBQ`ln/^,B!SuU@۶M,i̪HF˪P9x̦%`UrD!<W"sDLj憸>d),~}o>WϳY;sΦM׿7Mf|G)œO>)!m<)--EB! -q\p0 Mw$˲, vm{EX三By*D战d熸>$I�b .Y~ gJ9O<o4�$A@z(B!b@p�DZ* %w?{7Q2Oŕ!]{{;tRVV@4fs㳨n^єlst˿$N կ =LqP^^^!Bq\W� #/%�Fs三[I橸#b"27ĵikk#NcYXٳg-YBX?yRFx/˲hm```�@*B!spz&Jdq<ϣ0TTTPYYYa]X,ƓO> 0*wK,㳟 ZSTTT!BqHɇB!<@744OVFy'y'm7OS (uFk-B!S y*]xՀr,o99S;{1Yt|[j"HuBhR|8g =Dq,BE!Bhs!fCRiM }Q( ˂xLXlcy1=q:Xܹ؋COOϨ�vkM S@~:6mT!V!BN+Z!gZ}v9w! I"qvŚslۚ]! qcq纚c/MGGt0} ="t:OS|ߧ~zJBi<˷WB!S5Zktr+oxtuk)v p3䑏hq]% qcq̱׮�Κ5CiJJJ|}i !ǹB! siҙ̅%S5y̮ϔcy31=q:Xܹ&wŵjmm%NcYhBʅо3Ϡzd2tvvtRi!B1EY$SYI$]N/h0ԣcyk1=q:Xܹ.wŵ .)+++ni&0IJ|zxbz{{I$̜9CB!�@czkJ?!B[|K! qcqܱ&͎ ~<Sl޼yT<xWё_4S!BLM@ka/BVɱu8Nr,\{qm2 ]]]eee[a2---<BOq}}}XEMMM"B!&p-8h\r[LA!5؋kd azBOqƲ, =!B1kB!6J)"@B%NJ}}=EEEB!B!w><u]*++ =z<>fϞ},B!$B! =zz̙3466q-cB! B!p]]]dY�buuuR].޿'gB!$B!A@WW`u,..j! =;ޙ3gp z(B!2$r'mz1( ΍ׅ<\Z|b*<߫F֔1^} ~i (BCC B!С QD\@b}5!HqFJm)Q(WJh5F1UTWYfnG\E$2c0'&q?F;d΋뫙aXDꖇJAq؜Gr﹩rK q-|g``�ZkJKKqÚR O>-!tsa-ZDQQQ#B!._]h :or5t] 9tԣ=i&f5зW9�bPgd6C9uχkVZ%pŲ Ux~Rbbק޾c'|)e"^7o9,pÌ* t3w1X:t nf&ٽC)kK4@29~ʧ{}dYtˬj ZCӴwt<Rtj^z~5bQŢsm*-<w:sBp>8ϼ"S&-XR\س#~k +]Z;N :HDfK1o\d2�҂c駟ˇ?'~Gy[>eN:E?V.B1�:>l'U.Z@Bc)hjtX {\z1*9l彝6A4x�/&?Q V.syb` Ds7-îdB=T2qX 0ZgǮق|ZCuDAC:c(x4 M:I5wo[am{7Eq M8,[;xhce1`h{!8ܻ)J4H5hlΝx4gۃKm+V.sY!Єґ55Coy^qc011yޭpőZkX4m95+>@eK\<_386,lp7;v?+% Sa VZR;ӦO&3z>WU{;3<=:<>cbQŽm8vfLSa br<#H" C$Лz(8{,?gS[0 7o^"B!J.Fhx ]ꮱ#G14NX\N@E~ֲc�"-frՙemmZCąsqqM*h~CP ^~-ͱP1>rf"ipEd) MK xĢ2)U[G~a;3ؖL~uͦ*|ǁC>pئI@֛Rkp(_9&~(0М158Qzz jIMe٨<|'֚XL|<x_?"50?M2F56w-wYT^jtF_rб}(j#R)YS5o)>Db{A`py�x칢Px-kX wr˱>ږ/Ķ`<C1B;p4?c[iM~]&f~as@_Fc%7# 4q;j[|窥FaXќ;ZQuC6rVydw熡i cwۘTrFww7mBiJkllws=oaot:?ybXy[<jjj/pB!ܲ�ZkSzeDB7Ҵ}iC16ڜ8e6:4/rYmNm w#-wG }S@k{}Y5krtR'N,^RZbGqϮQ˖+~f]{;tG ::mvUY3-{BZ<mBlwG7Yv.bȆ% \J->ܟٛ3~eiz``0CC͂&w+lwر+KE-hrXRUaLjƭ6\؊7I ш-Q6?wc`[aJDȩ{klk$<h },63gbTz熡(rϧdK-Msl>αbbysJJ,.v;s줟*+,֮ry}|_Pgu{tVeq>W2YXR?u܅#] lδ,PQ8gGm͊fxLv|&k=/?hSP>UYܝB|*+,V,u/ӣڛ%4ٴw\2l[yRӚ% ]s( 9~1z߭t9PRn سc``k)ŒEsJKCUcq4,]2kM*9u!TʼnysbQEgWm 9i `SYn:^a<EitO&))Vܿ9]E.Msl~^?]y3j"b\ˆSg|>o~~)e \9Z :sG5!;wge[ɈlF.Z~wuygf R)|IY&lܸQ>0B!n]� 2Z<:÷_UO>q'$1U 9|8 B*m/pxi\GŶMW_&Sܿ١_E{=ǢHDQT4to,.*+6>6 I=k\p*'[W.`3/8diyB@28@Q̼x4jB+)|JlV͚ S`v]+":tcP6aZyYweF}�5cڼ;PՑ`A3<pE_vR&TGTj.SILg0JCB~=<6848 #Q67` \.vy-G|J|$Ƣ=!Y'Rv> ԗsMs.ny?}!IWWHcÚ.KUܷ%&pwlŽfT<rjT[Z΋k;>rܿVZb}96%{g G{ D =-br1RIMwoF |QUajyEPC@HQ\1oìj~WW[<xo:7D]cR$S/DB 8|c>̘QeѼ(ƌJJ؊X¥?$֬\f^NsuwEXTF]}�8wwk#TTd{QŊ.ZK]vʒ.}u V,uM O?)-Q,hQx4akWE}2oâ8xȣf9>s|(6oٖ _'}0 Z8zTRR7 O:&N}@BhϞ=yfi#B1 ܺ*-{ۍ-E -ĉD=Ģ\=Yδ�>g|mYBmKod8qʧXģq79vf?ƮYv6UgZb^L?^Rue&Ф3SA` Nm x YOvC[bmtLU$ /2>~`nqx-CB]kBs mÜrEk{@vU5:)Sm(/S]KBD8[!4vcnS>?r3XOYY`5;[JAŀ WG\Nj,Œv=NX<# 6->\:h4W*v˲mgן01\-pؽ<_pcF?{<,yea].oٙͿ[lݑ(x8 u6̰ughDG4ո;/M0}sswgKdqI{z|m `oG-KK,Z{3COf /|*β.[B /"߼c'ղཝeGtC]ѓ }C5sL_Kg_b{6F Q̛cb>aXX:6??϶yx/?.j*/?.E&@З<?}0 ja iYaش.BoWRtu̴lZ1CG=~ ƜF1͑7ZPR^^^!MEEE|k_C)Q!֚9EEEm%vAMM ˖-+pB!$0nh %_tb+!ireCe"6uL0<(|S:6@oPZ5C&klV $T]p &?-! lhn}-wpۤL#}CAD!B|h MsR1,e8>;K&CWfV[TUY:jf0FWw@CMCMDc�S hۊJbAq².�Ԩ�vLIx{xT2#3xCtF/D"j"繢LQRhwH4;ve7-G</p4|Z8\ +)\TV+[ U̫bpf'v?Hh MkO񘢧@j΋Ͻ"}~KgGW| MEk5jm>8ѨʿoA d o!5ͨ((+3D^L LivhjteqB!$<|KU'^a~vY28_;9|_S?ƶϨ"3i"6tGEmz(E*镂dGcw@Z)8q܍p3\9JC s 0s8OܳQ3o%M6]ӫdpp7qJKK =i%O ^~~BqEvŦM*pB!$�:Wez( x(֬t)֫( uv>FC-|_C 0_,#:iȝp<hjPƆ7 rm1ϨJ &MȯpXTWFL[ =!pIKR`nMx\GRix]Y_Hn1nU0c0ލQjfDrt=eٺ#3j!8hqGi-gz7[ 47pMQ\d>b>ZaӺe%޸ m[)<_J } /y;=b+ĆHsls|GΎ `A`Zd܇<Ws^dH5ʂG &4{z8Yn]&}m̝cyC-"{.7';̇NEЇ6٬{B cš\[hfjRJqO,M3. k"]>s(7\.|kΣ=ah }XD?yW=a>8U_qhT>sJEv%I mlۖk R$6~~Bk.ؼy34B![@+]!fNCQQTʴغôŨirk7Ƽ6ztv$R!+*$a1l.^ iL1Ų%.ɔQo)瑈Int`)fٺ3m*Jפip3fAF,gZ̴wqVT?g텥-W"*D&kL|/I1Fc`A@P@:H,uaY>s~. K]xޯpw̙9sy礥)zk qqfkA& W\<GVQJj!3mDNFeS`JN �dK&dӖXkA'9@މlb34G0Y<BeӶI}fOrZUVvw^;gۆ\;q8YmMHlWehNl} JdFKl.`ۚݝϕUtn?!# > R^im?[Nf|}"PLh[jm;/<n{Ee tWʩq!ڷ3ٹcP79o$s.z,]w|hbQ';9iM<|JfN@ϫ&7ͺtDqS΅/s¨eY}mq> lqlĉ { }L}YJJJmyQYYC)q(}yyy-B!ڐSqKӥɰn\F{{,L:/KVD]dm"1iR,\Qmq^9#:D6C\~]&KtZ' miሦRSQiSYe 5ݨ%Na_0QnQ]ca4*h6o3Lǭ8gK/ѩYo)2 3{^e_DWd7/�Mvx?JwmQbP7]]Gn ڋ(qJZ;۔b51k4+\pSg1=tB& E`bNGXS{[q1HCo Ycѧ2 045N4 UQKl܇/5ΠrYNyӄ\x<[X9Ny!x= vδE^%1c.䡤fO NNAjAi7lz}-1.EZj9)ō4);おJTim}ݝmmYN{W˂%qj1uAx;wlw(Ѩ4k/4nSHTԠW SY vاV8l& & \mxkv/~AϞ=k^0Xj?8֭k&i[la 6Lo!B! #ˣth2~휚E^.툳aSXh2</U6]tlkxVt'\]{K���IDAT;-k7ĈDFӣɄ}lcxpSwOzl)pj_vloҿrjH*ˠf�:)DcXqm%-p^gźLWVnaSg{r?w:X6h]VѣzHI1ؾ+ I^nذ)>ZUxPXӫ6`6b[p}: Sw7nd;Vhr~FPjU9H ogҭ "0T~>PbkuӄAJ9N й ,MyMJZ;[Kq(/ۛ _~K-jW>.n%oǷuyJA(Y<J^K/LE..n%KNyM."Q/d§(‘mk:u0r,SC9s΄}6n3xC=, Pgw[V{)ӣI@@ѩIE&h@s`9<JnܬcX;s>C5e61b~g_)g8A;ogҿmmak(.q^mwJcǿ>+甂lu}=kJcRuf8c{ǝx_ibXsc(UUU{^(p n[ԇ#==wY0Xf wØ1cДM6aY hUkQm3c +B!m)pŻSC;KN6e;#\k"L<A"uco*!%"QMe;vY6JnFsnwZ,"JJ@1 3xas4:?  zE`Kٹb{:AHDSU4m@(씦0qGN[W1<U؍8;kp5%TT9zE@A>n;ض^E &Sgw!۫ N铹 "Nٖ#AĩaƟc0I6nn$3OJTTdgd{TجDzu943}8gҹ30ء5kHRLi6ormm~XlY΀k/0l9qn"kl,zt3q'}h?(dp3E~g`Pqs\@z0]';N<wp=#ԐoYb[s|lqޝb9^tc ҄#N�|(n?�eٱYFbSk`>y<(%]%6~3ت˥eG1%mپ_lѬ0OO8XLns /_#5`Ыn]\b(Uf'!.8(b| {}P)Q.WʩhyM[hf̉0<E>., 6nBy "\4^1[#7[x C+A{tsѳ ˆ"y #Av-qSZU(7N>`eYlذ!Ν;կ~h5YYY{z桇O׭[#<w7ވ;<6l~+ڷoc=vOgeee,\#Gү_nB!8 : h6eEjpb6eQ\w4UGuޫAVA89PjSQiןߧH7H[;N"% T7{ $nv 54 :KkY&9 ZeN198HSb5A]opS3\{~,`Z;�\e9}흖 _N.LJacKYh&g *an<EnANJlKlѣ N�rޗxAcT Yu=7^ףDt>T8u+hpDoc~[N-4E( 8uƒ!M~'>\liQù𓞮 ?rMj 6) Akg4_QY zϫHznľlwP7Ǻnqho-#W3IOS2!&R"# ՔWj.P=hk.3g^bd9umDɛ`n  mrN@iMb_L *Ba{$?M8wQTWjlJZCߧ()ٷߪoh/#](jJ] j`~6k? pjyz?t_)H 8XeNap7^gF9G˲()-`6:@<c�up$#j V\=JJJ̸5 #nh67p?%(lܸ~%KFk;;6j~3sLrrrx2dHKNy뭷xꩧxᇹZ9-jʔ)੧bРA-!Bs"g,-v첒5v|0 zDNWUpH\<h:mMP'M\b=Ɩum|,`YP^i7;pGjá$VZfSZVRNb>={g5>88N]샦 ';t4~J#5 qEM_m8tC*ltvd(5v dK<WwLd{7"pKKiqho-#-7tHƶ$c5UUۗXֵ#`ُH\bž4hP}*l*?B"1샕UaiЍ.+!u݊zmhsgٍC u>WSh"M0d~/~?] <.ɓ'7dRvqK(׏g_O8yZsmZ=p|瘦IYYlBWii)=z`-!BqZxZ"aΟ=>􄻱6\c%WiW51M=Op}q}5|䴕>hOS~ܾ:gY7-Į=]: 4#̞!;rOq8bSPu~^`Ho,~s4Rm'>+zstiN{ݡ7fss2:M4 Wd~?5\Cnnn5Ck̈́ :ǪC<|k_KHaÆzO:^zH$RNcǎ-*-bΜ9lٲ뮻NB!h$E"mIdM:YʶݺyE4&ʉ ;-^zx`8  <y2.5\s5gd׾aKD5k硇bY_~P(ZWJqfΜ=ҫrJoӻwo&LB!@BB(QU ,˲FMՠ"׵ue97 ZO׾5z!u8f~O}FkO>˂裏عs'_җ$Y!�EK)zI?#{HdAm�ZO<͕W^/K muo~իm;v`- ̦Mx袋[9B!I�Z!4wYВ| <~1c$<G"mgLt,_/}KxޖnB!8FB!8md?|g?>eF=o<>SпnB!8>CH͖'}pz~l=/\h%(++D YЛ7o瞣[ntM\2nB!D[v\h? 8B?I_C%z̚-ϧFII Xn]uȂ;wnK7D"۷|;deetB!q:�R \r�2l/OӃc!}qjő57 ZOH$/ʕ+|NmYfQZZҫqM<ٳgs73tЖnB!8#Z)r-hz؉ }pz~l=/\{q$GʂOkoomG~7ndɒ%-*'իyW9쳹[eB!8MsA5^6eRNʰ_fI_|CuGȂ3g%%% d?|+W_& u38Ǹp8̸q-Jm%=={ԖnB!8A)�B)igy1l).1[zDrNnLӕ˓K zH_YГ'O %[nO<|NPJd,Y[zK(^_߿$B!Nʀ6MC#bYY#gx<d'}pz~l=/\Gyʂ˶mVZEYYA,˪w1Rj{=Ff0/" ,f̘1-$!BqW�0 \.7J\.RScc'N00 ta&җ'A8s5E-'a\wu?[k. ((( J'-Zĉ[z֚7|_|+xB!8 s�'2ʹ̲$qRᦕ<Nҏřh^4}53f~Lyy9ms 4vZ|tؑ; b[6lgMݻ];wQSSC("nvodfep-zGe1bpv|>_K7I!B.qX^N[ޡPG zH_abZkس}UUλ _xf*,:LzIiƢ6[VW R(JIWs0}; `]ܹݻvcFРj?*owz(E,ek2e1]-; 7bE!5]08CI_<Ӄc!}qfvi{f&+ɽf+ Qέ5'miJA4bS?L^6-,&3χk~rSOŜôF)Ům,Geٗ3fsVv2mt5B!GH4u\:B!Nh4 ȵeT6>Y`^':IRTĘSB. ڑ$_) ONzߝu[)!-<p Y!s�R nmB!8h4FMu8T򯓵J(mF9h}VJa[w}|B!Z56E$Ԕ�^hJ !d6H6~{z-OB!a3MvF)+�hI!R ڋ^4%,B!aІarQc6ZK�Z!G"4 L 41 CB!B vtD: !BVC־MB!B#M8<@B!ZB!59b�: }/B!B!2ZB!B!B!NO΀NH<B!hiui& !B!&v/B:(LCۭH H(B!6�Fk4AQ&o& !Bԥq4)t�CB!B 4N |2ȠB!hJ4%p8M Ahq:H׿SO^B!0КHbZŁ0dB!BbJ9W, )q&ڦ#Zh kqNrGZ.S]]E$!##4QJa6aS׶-ڒz.4>ttRXV*@ #h!BQOh5ք6M|B!DS2,z4΂VJQ^^/ߍ/"\heԨsθn0 VXܹ6l_̡Lּ+,\87w`+Ӧǹ^С#F)E4r7+(,{AUU%eN]>| ]t;qb{Xh⮻_L_:wĉ`,kB eűm:B!hݚ.& Δ!!B}8->(⣏G3q⥸no? pK/ZRuF} 3,";;Co'B8JΝۙ>=6lp3>/}V~}�Ӧeͣj:wm}q.l۶:mzU?"=zs|˘9s* /svK,˾}{+IMMe۶-LcN`ض贉`B!hPZpB!>|ӏ4M éy ywn_Am(Œ9t[mX`#/4qJ)^wy/]m[|>q>2 _ asϟ ?+ZC$"==/}^lH݅^Ɲw~P(ҥ xs} 085 E<n555,Z4~oiX<FZZ^:1 LgZkRRR Bde[Sf0 Z56;;޾ݜ6m].WB!8@C'snƝwo !s ?x<o-vuu_{Nggb„K8zm޼P\4 Έ�'0rR-[HUU%3f,rf,[l߾j:ug tҽWS 3h>6\0QJc6͛Ma.)(؊a(rx,^9@ tOBzz&W\qٹM�9(K~~W /=ӧGp\T矲~j8;wetҝ={vٱcyyy1nEg0cƇ1 F~~W t>{+W.c3nE 0j2UtOٸq=!3cT֭[͐!g3tzvE,eٲE|Rh߾#7=`k|ƍ2l,depᅗңG3bB!DhtAK75fp~>BaXZmɇ-0L%Qsؖlmyg6L'ANh@'̹h[n7^"?+_ʝd6şPn8io[4M{M^}_ҥ 1\|lڴ922J$O1w'|?_QzZkJKKصkOr \n7a~yY@DڵLRc)//CNtҝ]Ab7o 33h4zv zcyٶm3P0x?3ر3^>g{{˲Yv%p,_AbeÆ5\{8v<ӦR֭Yt!LVZҥ 0`\p1bYqIuu%;v&՛vܸpܼϓE^^G/ǧblڴ/t ~?|2kMNN; B !BD㟅8ZJA|C=t`vK]J)E,)g|U]{feGB6UшnAZo  ؄5hD;ZWLHoO� ^}v-|.]'嗟=P^^$?1cb6oC| 6?7|#`n2xLGu)8ϳh? =z^{ݻwp}/?7lٲ۶ˈF#<ܟP ~75֭[Ezz&? Rz}mӎXhgOnkaӟ&s}ʏ~tC OZZiGyb(e`Yqv7q?L oV\UW}1O9Q\qŗxſs_c 7R[71ytދ~'udE</xW0aȐzx^2sT6o@nnB!8  >_1Onv`D^,MculHȦ(F,*'2mĢłn B#:SVZEG9v_C0Xz9ZcٲE\qNu&mĈPRRLqdm0X(-=@EE9:tfMLvڳaJKУGo.jΝɆ k"++[yM0 #ЫW?lRcG+W.c Ltn4y�^7))iu 3>4q\]Zz}b1.]R* X,FFF&[n$R^dM崴dLȑҵSzذL_0 HMMvfnk\.gJ)|>?)))Xs1an**++{ѣ #FСY~5奀2ftC'())>cB!h)>n>sHYÇz(&oZk*$Ţr OmY!- x,TWxvhmN`0ȤIWѮ]o>` _ٷoXQX;˲iǙ7,<9M,cz9b}>?u`ݺ!j Xh4i2nELtim;۪h4J}xX`Jԭ۞(s4RTWWQRRLn=ڦX,￉aq染Ӯ@ 5w`ܲ~{twJ4]o1Mvv.X*{�aoB!mO!ϝ:-q:v0yzжFF[ؖNh XE,z8щ(:Gt'b= 6U q0j?1]'R28A=zswΚ5_0}=Q0MW]ezRN=@ pm)S{;++7Xm[5x<|>۶,T2xk<} d,?"@*n:,l['MJJ*P8Bs)L?zy^Ddm& ՖG;B!ĉЦЉ '+n(UWb�Os%}'Gc6}|_F"r0PHm'Tz(4)F+޵@, eEdPr o>@AZkzMz|˷)S^o߁t?ƍڛEk rztڃX,8qx<., jj\6 شi=[nh:Yr)_~96?R\.**ʉŢf*uŢZwy &N z'Lp7}C)F-"0~Sqr[a:uЬ]1c2سЮ]233$B!D k�t"da-q2Q " [b$9V$NZIQ!d,8h ~R9{B[a[;}։.r<@b9=rͲd0ٯBxT['0XYV} vʱgB냁ߒeYFDŽ 0sT.Z&NS'ɨQcDB,]'qW3vzJHQ^֯_׾v/:~6eTT3sT8&]I zZ;LfM%̶mF˰a#3|fGŋ׫\,SO׮iڋtБΝ2rMX|1<8~j _A\..*-[?4۷o}lٲ۠- Sl-8X:we�8^x9i&mAØ:m\.;vfo/m{AN!B<>CxzٷЭIn.m֬ѣeF5687 y*mS!Vw459ˮqJJ-c1'm!^:74CJJ}u-> @�5" 90<>8]hq\###3Yqu7u&.˸qqmwә_M^^Gl&77o} ̛7xw!e [ؾ}+h\sK0RRRcl&в4M.]ȦM&'X i׮}m&2x<F̙b&]v ÇFw8x<^:PYYβeh߾#]2l\.m3`!|e>` i8QyIvy.<zkG |LV;/ba`ۚ}/‡/, E*{}?~vp�wq/\ruO]|d^yyIIIA!B\: ι%ע$»<"Ch[vNf5d}[ )?le,YZöa^Ɲe^W4rHT0evӨ^!'(SgWla4iX~2j:~|bvK[G$9npIfA**Fڊkbŏ>0r辘-Ʋk@?ӥ#5Ev#%{Mlۆ=]w2y b|ﻙn 3g1M0 ѫ憸WtAhtz@4d00̶QTi؁cK&0zA6!%(99F#;�Э{\.w#}uLANvyjpm͜M0ptvYEEEn4TV(-=@ee))g *e())& IZZ>Pk_ "S/}8JAuEy껺馭* 8ΤfX=Q]]y�i R9vEpH$Buu%ix(//"<YYn]x 1 ׇvזW'm;/dqyy,)HII%PUUIJJ*>q**)jIOL&bWH$&==lLpB!23NfK!jjIK�F׮(ŻC]po?eN2<S 4g(Bq,ˢ91ϿӠn.8mq><B8-*.8K.>[aX5ۮ 52:?xZCE x} ӄh Q=ӄTE\CAzBQxߠD SӶ!} Àx , b-7M'Hh-y7_<hZEui|\~Y@-];Ҕ:'ii}MVa(lvacv^۶l k?(HM5kgbN�W,P]msi\qy /RU%8RfnT* 3*T[u6q D(d&99u١睺&yyh߾c26>wh4w^[ >?Z$S.ߑKT3ϗkYded'2L>֚Դd&l99,y񒛛Wo:'ksξUoDv׮Sc|~:unuOlx< %B!Nc @S"#;`OB'z9̃a@|c߬)IyHPZk58K,hf&7`PM^EEqVѧ=xj3G/hO„#\ ]s\|f([ лsGy-عۢG7X:nY̞!m5508d0\)X.\0OFFѿDPi]Bۆr~_zѕtwUdf\~Y޽gr.th qf}bpw $GZn 1K4 +VDCHO755*NMis;ǿ�!-߫ pERS bضfCzUT300*j窮[ňiwE�ZSyp;cf Es4|dcC6i_iM׉> 7^h>mԮB!D[sLKG6d03]{,6 >5S*}iK9Pt"ј&*kIu&twѣ ˙Gz<AOKQD3 ssE>|>E(�E.&> rm n]\6  %έ:dXc^ O1dN&LmE5z#׵PJvU"fd __O~TUD"JGy+R) p72HM54س'uQlMЯ[nN%;iA"܁5a@wAh`׮8 n%pXI˄6 dR dv> Lgpք8ٔ-~,[;Zkqع3N8|wh ͊s+,7||oI-N֌yyyݻh!h~B!ڌc @+E6 qzA9#�  QT|tùnCӠ3:v0$Ѽ?-Ğ}<MZJJmʏaٹ;2|>qf͍ /ҽ1#<l)cשqK/VGDc!dt7]haciıSS9/<z TSVf1,Z暫SwӶ&v5mYe~" Wr9s8gJKTV̞j]ps?1YE3Z#6պgT5NЛz=Pmþ"RB+}TmM#DOC\0l/CxD4ټ%85{]ڇ{n۴tؙN-Ȳ, ̄B!NcXzYd@!0ĸßhb1ϧ6MfAQŖ8&T XWTVku14a1v:)˾EVAvY]=/L~.'l''CN&n7tl+ Y58TkRRb1}z 6Ç{9\˖EX0{У]BѨ3 ˥sTu, rdp%sOۖ&|Fn] Wqi_='e_Il0^uQ, F*Q,[0a(S=sPZja$/x<NFP(QKQ("mm;Nu`/},SxGǝ;"nE,|SS LB xOJ3eAMm8CǦ Өzyx_lkV6WǢm-O!B15sSAk >k`Ɋ(Ē*vg vfVE9{} &v5_exD+īX(D5^"5r4 u2iY Y<tDOnS<=XWؤ(<@N_STW:55NV QJ-R zps8?^rmƏ3xTVڼn %͊/",YfۧqiپfKEd`oKoBk'؛'L.]\3IKWp_(F 2tƒ)JM1o}Q#}&,Ya0F߽K%Ѽ*$ǭibzbgq kgrB"c`Y^Ǝѱ l+g!mkD6 q~V0mzs1<G4gSl3 {8(cHYf(s> QRrz\gW1jq{,YC=m*�-, M#B8�44:pb.` h ztL';oӽI&=ͅףx-#N C RR pb֎ք#Բa^6r qөI$ٶ׀#-VT,XUdgzslY5̜Q+fMbJ0J h Ƃ!M~ üz&;ˤfӦwĹkde,\7 5{_ZnO? i@J,Ndվ{w7W#6q۾֪d۶j/Nr^nRS zt^CM<n'4}{]Zl+3z[oM#% j?UΝ?#hkҫ1 /ϤgO7;P bqMJcG)sWi.)AS <=ݠk�:REOBqfmr222x<-!Bf9�4B_2dzG>2 lضkI.!ͪ1/2\/%= &۶ n]"r&;`�J@N�ܦ"7h5AͶ1:y6MjV2}:59,/sdve#t[7zˍa8次^W/76xJ֭RS:ҥanQUeaeKpXs 3f8]ue )+y*֭|ysln`P3hkr~ %%zVUEE5pnr.Z&ddC Sܦ.2[xqs×Rikqc7T[2bIH (-;5[oNO7cSXXpߩf(N pD?=z4 ö0ݻi 嬳|YHТ͈D4KT?WѬ\m !hEAjn)!B6`Ъk\"xnņv =E.NQE$@D5b^u1I5c;Y<t3Q rMcTUi{#5ln1,MFZ'>=o{u)ddXb(kFl3uצMTWC{tq++m$5)ٲ5׫<CqŁ Oؼ45۷=΁K<_vY;Neak~Eٿ@ ΘT)y2AU6N c|E-[b[Sk];Pȹ0ӧٝ۷|AjBQdd;5Ag rAeMVA|WmwKT;ȧe;~ L8 BΝAZ1t6X!ıb(B3 @AGkMUm+$xE"N&*Mqf 3zy&;DvCDjϗDu"+@)X,anr�re͚ 1-SʦZcR8AΝLjO4kIa?[g͚G;/L^nFtisB9ZC0h+l0sV[c{-\fghTcY@ w²A''>Uzԧ�Y! F;`Ю׫N{S"Q+:% (<(5dfaSv:8MRo#)+s%4LE0hcv:W^HZuKZ(|�F TYif@{{rJvkܯ;2F;~!hضa-B6yD7 "S_~S V7kКdPzIM5yU65AM4/VGٴ%ۭmA><c J6,8wZZ lv!#q]hqכ-)@AN-)ogwLBFAnFWiSڠ[h_[7LR]$q y7m9g GSSIK5Jn0DtwU RM\l/ SRj1zuNկ2ċRP=Nщ5.mGӃ[p  }1Vmxe 9%x-q r:X,]a^U ,\juwh ,mQ] FkT'`Պ6B"e ɑBf�tsi UNHȚ,j]]]9X2Z'ummFdVmby^un kX%k],]fl<ĉ~F𑒢l-1^}L~5=(55NV߯ػ/NuMN..Ov%ab1]othm[+Y~CE0P `۰zuۣsgil><LN3 Z?Nu㮉rN�01>5r.ZTV: +`Y0`></)j<gÕ+#|yiEEc-ĉUS STѴf淪\ȱ{c&hX޵Xn:VD} -t!ę#~/ !h�498tM܌mYسb([ 2i֯2 ۶ݩ7yJ5WD@ɡvg}{>_InLS}{"NMhRS HI1ش9J$N  PP$MnbHլ\`Z4Gǎ. 1 u[ kkt0`99WDطJS- RRqU)(3gٻ`K#Սn[W4;Of0W^M4σϧxjTv}P>7X6g{il>GJ@ѧhTSPs)NJ޿1M\ǻ̃agXX|Y(mǗ.8TUU i׮]K7E!Z4�(Կ5pz,^äTFp.]!g%.wuyLn%> Nn pe:uraYp)̞d8>b6Eŝ!"B(v4g _4akjyL&N3r/جX&-pb14J[5}'9c|Z(N8Yxσ֚yV˂rpDgcQMiM$;,�d]ivޟteMUM8deΘ0G{Pe3sVYk˯hmjN*r_]78]~8a 5ߪ& a@Vv3sfU#'8s%.?S}屜FOzXTک[pY/!D[R\\ @nnnK7E!$�}5hjcq8f2 ᳹!><dw/7F:[:\ɒ '1Ku?H76@zmHK3T&SYev9A47|9. 5iiч,R !>Kӟ&{ |I ɚ燛gYş\_9X+0x)WS}3mu3mu^a8iB8y*\n'lμ{BXEES_])6sμ dihYsDt=UU6β,^O99&MiR TSģVm\0]6 t'^0LJ섬lj+h_'2?=sPJ j9 P :j�RSwO!5�1hM F8l/z 0kgru eŊMa)vuѵkӻa@fAfFh:ac&;7R@r ӅN;WO7YYf2sW 8`5D"Nk_P9tZۆi U k[6[o{nM򚚃 4P ?MJ9 S B< r[h!Tm[Χ4.?wa(J9Ͷ:=ؖpk qr8L'0 ض];[^8h  a_ h @X0{n�:uқE!$�}JK3)\lN]yV%KFX<,e >`둲4`?\ێ^[ʶG ˃?q{V;Qj? RtyPxYӍR.}R`s I\!̞C0Dk͠A8h $۶/ { WY?CѪ M;b16nHZZYYY-IB!MЧ!8b𹮣V:u:EJmc!Zuk`.KaڶV-`b(e(e)pE);,>gJEEla/<Yjk)ip~絚O8Zz ݻ.][zs!B4BB+S BPM Vruz)l mI26xpTQ:MEk ),,dҤIB!D"h! ֆll[:[7q=tk.8k!B @ !%Q"smBqzZf J)zMB!8*RMV!B!ZP(Ċ+֭]ti!Bf@k@Ѩ 45uwm֚cnnhveֶnlٲK.ԖnB!Qi2�5L|SBkMZ!aHK5�qM$ks`.tm9abґn222(,,D)EEEm J !Z͛F 6"BqP|�aJ bڪvσRNòR䎁JiK!Dۣ¶-hK7MH***bxޖneY̟?4B!8j @+ PH:<!DkfيH[6Zb݄a @ ъٳE1frss[9B!GWJB!laйsg @)9p@K7KQǢE(++cرB!8jRO! ֫W/��%%%,^$UUUŌ3֭n!B @ !B @ΝZYd p%�V^֭[+n!B @ !B233:t(Zk `ڵٳ%ɓ'Ӿ}{ƌB!8f㟅Ckc!B㡔j81LcTWWSZZʬYիWK7M3ڬYXl<�=zh!B@kB!8gT8qFYp!ZkNرc4hPK7M3RYYSLk׮L8#Bq\+�ƶ-r2(B%C)%;N4. (;w7/ !N3gsN|AZ9B!Љ@۶q\r(B*$}M4s2{l `̞=+&eռˌ;K.#Bq܎yB5emB!8e;,˒_'Xjj*r �Ay֬YMQRR“O>;;BqZ8�tm1ǰB!a`>FM7ݔmǎwcƍ-4!N{H^z[r]wѿnB! q\жmtBqJʼn⦛nbhQJfz)ve6:v^xaK7I!9� !%'##C&v[x1=dB qXŔ)S?ȑ#x<-,!BKpW!T"'W~@Ϟ=,^zݺu-<!Ne[o30h ~RSS[YB!' g:m!aKn8kHd [<x0=O=ׯ0 ֬Y?΃>СC1M)Duh'? ]tif !Bp:ڶm,""z$!@Bq 4Pnհ+ZJֶ%'Cd~x4SjAN F ]l& z1M˲()-4:@<c�unt9=tXn?8k֬0 dggsM7կ~M͉bB!ڴIBr=TaMɲ=y4a*2S;]]Mtvt(J"'] P;ӭ8p =XjJ)JJJxرcwy'}if fB!^z%2x`~KY!5'?y>Ƕ-~uu˲p(91Bbc%B9%QG\iM6=ؕ|>X hrkb\. hЏZkBp{cl6�dffaf93Iv>|8x۷Ű,M6zj\.]vv„8۷\z<tܹ%Bq̚s%BbEBj:E"zڊ;e7$|) - u|[].]/s `ƍ<,]oArOL!n:?yfs7ZYB!'!D |-6Zh ZѴF^~ 2/Zx<N(bԩ,ZoonB$aƌ<sOSƏ֕B!ęՖਮf޽4Y,Kf✌?#%%%\FzǏk0#-Gqzk=2ږ6LٸT/Ur�,zFR+7hYJ):tqz QJ Xj˖-ömڷo/3ڮ]xy8p ?=zOBqhWŨƪs/s6k7ok7<)m\p!]w~iر믿B!`$ 9Yv'h9B!AVV_~رcx<ɋ+W䷿-?я3gp+)Ř={6??>wu>(l !Br"vԩg?c�dggӵkWRSS5p8̖-[())9)mf˖-TVV6!??;b&p{ ~?GZB!Dka&g}6կ={6o7n0 8˗/g˖-\tE\wu 0@Ӛ֚;w2e}?ȑ#ev!BNi�:c6[laڴi|N>կ~믿zjD"x<5u:|c?GQxwؑ߸\.<,X�h4 �m6h`a$-&o1nLbzz%DprB!N : ;ôi())A)Eee%o}&Lk@8-[o 曹馛B!x$�]ZZ믿΢EF 8[o.]/2yd0O<ӦM?!_|1ַGk͂ x7ٽ{7999\wuMfIϛ77|'5k7۷or>ٳgs}ѽ{Z??k1c?>}0f|I6l؀R~\r%|Xٳyw)**C\x\qx^ ߿?,^t.2d]jz->ӧr C`ƌ̙3K/O>דˍ7%C!'\^w˥^{ǜ9s8p�J)JJJ<y2s9)۷ ā8 -⥗^b >;3!Con!BNA j~#PQQeY<3u]޽mJkZ|9(**@mƫJ4eݺu|;hA~=êUe=& ?~ +H~m>C߾}  ̜9x<NEEXX,FYY555hy嗹x, rw3$+B$a̙|_HwÚ5k<q,_%Ke֬Yb1&OwҥKOv ! e&G?O>$_җHOOOޙD{㷿-ͣ긗;}t~_nݺ aY+WGg?xGy_ :TB!Nz;x뭷a|GTWWFo~qrPJ%KOTVV5 w555'?w;^`w޽;ٳ'ڵcȐ!̚5o}[m6,YNN.e|| .'}߿?nݺOsN�ݻOǎ׿)..^[n0 B;vg%??e˖q 7r׳pB{9n&~_׿u4s9<cosw3}tFՒB!Ns@t޽;v,SNeҥTTT DϘ1: . &}*))aY~~&3e>3RRR۸+o !B:'=�FVVK.eʔ)3.k&u(z̆am6V\ɝwɅ^.]PPPa,X_]ΠW^y%< 7ndĈ|b1J�>36mڔl6={ /L?d޼y<S4Xg0z[JuW^ͮ]xG1b�fϞ=dggc6n뮻={0tPΝ; B̝;P(yǁؿ?۷o߾̟?䶿`ܸqo߾zR TqQ7xchR] B|>'NdȑX3gpdiJ>S,X{ǵ^\@VVVǮXd [l4M֬YO?~3:tҫ/N3;v`ڴi|G�|_.[n-4!BVyG~O `ȑ|_媫wbԉxII ZkzUdpUkmL2x<έJ^^^/2?3{l Œ32dguX)So$xkqơ" /cY7x#Mwc~LӤwԩS2[k} %%(%%%A{d5�'>�. ߏeYZSUZA4!-;2 mDָ<nn7hnfTjZ۔D^r23P{Pk4r1AҸ 8sشiSцa$$2KG_L~[':2o<pr%K49VG#x6m555\ve|_B!D3�az\tE,_ 2eL4'ہ@�۶ Zk"Hr>˲袋СSL;2=`�F'|¸qX|9.o|2222ph, ۶_[-RRR,z۶M4%k*8l&Tyzm(0 GnnnrJYK)E?}lZK)/.a[Żͦ5n4{䣔@f (DR.[wP [kzucO~<lQ@fz::'Ex< <p540n:6l|kݻwJ [laɒ%~hyHMM{MVhDQ6nȌ3?>Ռ7k4B!Nw… 1b_~9_~9C ogL4 0mp8ZkuFǎ9s&7ر#�:ӧOG?a`]v~;EEE<cՋpW]uկi\r%on֚@ -¨QyGѣ{nQJQSS]د_?~?}7tiiiضͳ>yGxa 45555|1cF[`'Sϳv Piaе_OL|)&aou3Ϥ4ysMVDQJ+*Mx�ǃ'tq˪LHfSli۶zq*+I *}&855 W_ʹiXt)q֔0e>S ĸq?~|K.D 7sw41`%K0}t.]J K.a„ GB! �tEE?Oh߾=s+2h �:vH$'npNmۦSNy<{\uUҳg�z999n㡇"??> /?r-G)E=o~^~eRSSD:o_n>|+<sw}L07r|'#ms3l0}Q ߿?K.??W\qH�A6Da8| ol.`Sqyt ]{Y v³?=E;pşhWbռ%]6$>W'B<'0s=(0jb~|{j s�kN]ont{yk,Z;]B Пfalٹ{%pw^{M`wS,&qqNOq1M!C0h Xt)ӦMcݺuDQ à9s[o1zh&MDvv6gƶ^|E~?za_|rƳB! p"/K?Enn.O<D2x„ u]|<\|dffq|}a6/K,rqӟvQTTD~~>3p?}OJn8ټy3W^yeotܙd}Q}QyoӹsロBz3f ?0)S0k,^/_=?0~Wo9@&O:w3<c= /a~�NΝ;'8'x:u:-<]� :w8= :l|) \?Ȝ_KV^w{"2X:s>d`[p4wq=7z zج X4idlL~t/NRoP}Ϻ[cVnܲ+9p*g.7EkSSֱc;W1"=%֚p4JymƶO8e]T7hJ֬Ӈ~st\{X[[_0 zE^4isaܹ]6Y'nySҭ[76ndJ)0?<\-ڱc3fO?e߾}dffr뭷JY!QUgmcYX"#@Y#RTT@^^999^D"&??P(DUUn)3w^JKKIKK#///b8p`3m~,ˢ}\."wy'+W?K.Pp22333Hab`lJKKz'䀀XB"///y[hcZSZZm$wMM {! C(VUUQ]]]oٶMqqq6 !NcQp+!;FSI%ei�s2w>x^?%LoTOС[g~5_a<_{uŊ[*Me-+98X,tp{ضN""Qls.i4Mx^f#жN<>ĬV5i&\t{(0.!nz3܍OٸS].xŗpD8ޝwǓ1 +Wrnd YW_C) % ȋbqi&3D[5{?wxۉ[V2S;׃l1 ˖ǏuwXZ)';?qy(\d8Zۯ?EԺl& z1M˲()-4:@<c�unt9=$Np8̖-[xw(++#׻XҜߡ;~1jԨ^- A-[ƢE7oeee >k!C-eB!9_>fz^vjjjQMlNNֆN0 :$7̙3y7>}:?`.N:%߾} ##A[uhFEcQJ5؃3aS%DHKKk=kӠ`^uY%Yl' �,s2wn޼?~0 ۹==H0/n}KVqZfr>{{:{HLg%}ɸdOߚΆGctߋ 7^A[}c(Sy3sIzN&6il_e(z ˄/_F]PbY9w1C 8P-wt>ʊJἫ.[U}�P qyea痙F[:vdX~?9N x"ϟϴ)"}_41C4ءX 0.:gsynd"| q ׏R&1 V"3w/n2zw"|:_YjSNe˖-f à~~k.VZ̙3e6?|ƌÈ#-D!BS31Hߒ%Kͽ+Y BVtw$C;r;'C;R2HL'-+~֦mtՍ'f3k\al(el?f{3E['h&T=ŋz`e5e?^"5A5Afƭ<qOy^?}Pm'iqxfψضfΔi?f٬ωb,5~}Vu\O%/'{ʢ]VVy9ojKoضeZ3sh}Xͳ'?EVFyg'cΒ% 4g{9o_ZJ8[kjB!*+TTUO3; )O/oQݬT!4MM7ēO>o~FyTa~zq6nҫ$N-[_W~z)WG~0n8 > !B$gHBn'?$###YB!Z+5TϜ2' $#'A�qөS^�p_pMUi9J-1 RUV?C-d~חsxbߛyW^w)a9,9PM};Xן'^7W~,VoȄSg.w0 lby#ꏿEzv&x#(zva[0/1l崪[à޽ԖC:9jI Ի,^́r(~UvOGtau|?/9g әx ?}uuhyvd{9ޞ5opiiqWWosJL[3gqWƒw܎a+N{қ^2dXkk֬ᩧnv)66v^r% 4/Ç'ǎB!'UJ5(!Rܬ&zM W EUY%OS<>/x45Yfƭl]Qß`혦IaYhleiZ7#0j{DerPJqf2/]FJSn›dΛSY`95�Skhߵ3Y5o)撯^voގaҏv>m�48X({1b8K֬@y9=P8Ė;IM 0O\Iс�RP+Vʠ^عw/�kW.hWb->֚iâիIKIiUclܸz0 ŋ3ӟTϟOUU=z[naҤIt99>B!85Θ�BUZ9vݾ_#7NFnw)˸Sq +gyl^69`^$!s{nۼ\}z_2z@, nڙ68nR3Ѷ2%cq>}k+,L)T]CJF* zplqbi)LKc߁bB0&C{MUM �5pGQS\Vy<YC;Ul":Z9Fc1J*ʩO?|mʫ-`BHe1w\1z1 O?lo6:ֆh[vYpa2yС,B H�Z!TYis6'8 >JA5nznEiJa*Yxh}\q X,CA(|5ƏaulXy<Cї]PNM|?j,v,ˢ oQo0AbL.*] V<Sn裨 ۖɮ}l2wDv>^/}+sYX>^l,~pK{5 '@No6oTwh]}i)),N[61{'hm]v,Λ`M<ѫWMJ-_Βŋ|ӻwy;f;!B4E&mRx,N$&%#T0,)㍧ԣ /moS&>#v$]Uet؛v9ض֕ٶfuh-^Ea8懲{Eԇ}'l^1G)mD %=ivBQg5غj#&K -Aַ֚νK I-f/(ܶνt74i6MNs<v߽=xT9o0<n7Xϖ.c޽ ӧ@~ݻjFә8j(.-2MLP ք"a ү{wޛ=08z x(mm׏RT-b:b=]fpZ E=Ibۚ7lr*+=f�Æ #=-uהk/^)-B! @ !D[ ot<.˜=i)\."060O/2gT^{+]j Nԏv-֌x,/<oNk'1\xU <3TVgy#߿#y9\q Sֿ7dwhG,g^| cnscb h 7^Ŷ5vh5]db6CƎ"mɈkjQ'HZ3sBb8xJ5pEqǵנQqW pvlھ.=+/�Q Lٳy7s˕WԹs ?aJOʵ'rĉ>m=4m#oN8U]NwOϾ/; $%eY˱l+eN$ۉs,'Q>'Oljȶ$KvٴdH$E``g`�6$tWvUmO^ݭ|y ݿebv etl#=54tW~zxrW;o'ݽm'ɩ> C:ד$h��D� �oajSNЎZeZu*\~ڱGgeU=k?/4T\/WGK:u^sZsF}7?,o>/&2dJkmTuc~SwWY>b5 塻U,ȯ|@;|^1mz|?E_#ÐZ븊Ģmnov(ϓ ßMK2MKkڨo(LBy y<qBBA}#l[- 8!M/>$r]Wձm}^̳zg3߯B~F8ڰA?1)SrGk_ӊN=|]}VߔeY ;+}U[�o i2-c[i.���itK|u8 jŅ.>)_0BA#JīEpNu=UE swG=gT/ϓ&56>)6m]q]Ojj:p(DJe+_Mhv+5>1bQu"H$tŘcc1ձ+ѵƐL&+u +Ţѱ cQ%Us')hl|Re:S0`_u̫T,έ"1L^yT:3Sy9  * hoirGS>j. kl|R˖{,Xtsꌪ1%{:[Ўt2na]ўwڱGlnicE*-�'MgMYs1>4*ӲIȴ,9ŢF59:@8dcUы CS*}9QTU2^*<|_��E IDAT.yTT/'41<I &Sf:tZjY7j F4=1pUD5 u DBٓ23DA?6rG9|>>7?R 5N_я^x_PĜjpe) )Z\rMP:!MJTUVAۖy*WU$H(T>#$%.ȆjhlLlV 55 B2$OOpPkjdgض+Vʰu]iYuu8o$$utvϻ]፳Q;40Ip2MC4p=_���,zSRT*ШLӐaZzV,,g }G͕eieZ^&GjYZud8*u庞j uzUUg+ M&}ZU'.}y8yF]08W^=t&+O,Ƶ+XԞGuLOLW-ڼaU90]\p qwV4"lO.+s2MC'X֥u'Okcr\W) kP7:7BQ/أqY3 OzBc.tlX-q¶ݚNˋY~Xj-WA&'kA-[!4kAa�4h tiu7-h256>SgS[cZ>-ݸZ_ܥï rG񚤖lX ߡkVFU$aiYi/<OeQmMf4<Œ k/>yΞg--QWڹ*^1G3 ՗i9KOoY=gHx4ZEZ֦K<R_W /YѓmzB_<f>ʕUH9UZV29$ţQ%ʟ����xgxy>!ݶijkQﰪ15hz:+ iU2-S׫{6Dtc;:6)TW؄^{X6_I|<{(4uOGl؄v9={6˲,GUWS-q}2MCݵIҫ{սU_T*SZKKw>x,U˻dcƨQ(wN<LWp?zzjjinБ:p*u7vvPMuZjR^y;Si^}-a<7jrjZ5hkh/}|N> ^D}cbi֭^|bg&Ӟ}.9uF몳YtHN>MWN}kcNĵzEU>!м֮]w_>[~m]׽7 .0 -n3Ͻ3gm;纊TG]L K%xނ_q ɻwk <]mܽeﺮ6ZWlۇAUbV%PZ}j����޹*@WWgV,$mڰJO>NWC}j YTu l6;hrjb�=:.e)ұ86oXdB5 OdMM =ZmZRe)YW8Դ\ϓRUĤV.*kV.QsS+u+vj=T$Vo9%bUZf[HHGtY-jW:WihxT[6zz\ﳹzΩ^W.^ #:u:ښ49R$u+WZCc:q B)?'UbT]A]Wq\9!u糮ztaN0M-je]=?ƺW ŢSloe],S`@=56>`{~`H}gΫX(V|aNɩilۯz67bigR}brJ}ڤx,3.Wwu(0O8:{/ P,*RwGkEK&Ӊ56>`0 >ƙ*:}n@l^hXݝ-N%Iⱨ\88o!\nx\53}^����T�zrrZBA7pPXT#*I&t]dr Ξ`0D>GãJVeF'&:v'W)ΨA'zhxdLiA_J&J$bzCJedB'Tno`MXOr:p8woQ"^JeTIhpxL\^ݝjkm,u]l[i*;7ʴLٶ_#cW=7byrjZT._Pu"V,Ԇ+]XT\(/96LVGV T*锺;[e,wݾ^il6BQ00 zq2 CՉ>L6WjaJgɶW5JFC#c:yꬶ޽E!8tBp\U|y:zRM:sZ;]{j|rJwl^{Eڵ砒¡:1fIҮT9&Jgtl&Rڲqku܀^ڱGߧxJ'N!m{*>$:uuv[孭Tس�����`T<ds2 Б$Yh$q9#'ϧ3gQR-(+˗v0Ka$Ӳ! 4 eye\SOXUDS);;Ү6I,RuJai<84#{Xd\l^\[׶<O|AHx1 |V9Ui(P,.YLΜІ+SC^<7L6l.=}ǫJ A<qݱel_xU=.tcO>RPT:#61s>_GefEǥdYv%c /.u]6Fu5Ng_AmXBxT]|j t܀m¡ΜW6z4<O6QWg_ӡ#=JJul֭Y5+ȓkc~{U4lV4օ=.>vRwݶ^a(*: ������X<okut GBjknTPAQLI9dbOP?ĝ:z(}woV:t:_~M{UKcl踒1ٗSڱ{[ׯ(-wO97ƥwlv9XycƓLP]MtIѓ蘚ٺkuҙRSc_$Q 5ŢѹAݱyj+) WKSjkJ7ըN$bWgt~`HBQB\Ҩ=d519-K:تIu𰶿WjnSG[Jl0ڤ;qJbiP/56>)4"L%]:zT8LMzŪJ?iQC}Fز~ybU������t(yJ/.TtMO eYg:vGs/sڸnGeLߠ&8|3b:y  l&%57hdsJ-8uwItZ/WŢڬLRKٙ@tV>_a۾kqA[.亞Rl/R!صOu5ե*e<_ejYj4MUWu] ʁ꒮V>ڣ1P*QKSqzj:.X|5j9uF֭<N9ԝ5 0 i= Fmmi4paXlN~OM3-C֬ZP(3t 8t\+uisz0;։ JÙ՗~]T.AamǹÍ-������q*BY<V%kdlRMLM&SߙzanMO˯DB2-S|AjdtBՉr?du\tFSөkFf)LV JelNiilbJ̩Mgzy>e9{R)LV58<L48<x,Zz6ƍ D/edSM2̾}Nuϝp6Wj ǯ}n. kǮ}YR{ ϒy^|UM,w=(؉>57i 2ٶ#\y:|줎5˵jER`5:6bXx)5 =?޽E~nݱe\ȝW)9>ӯ:E¡"T[S'NS3jmn{W[ͼ\Sgum|ɩrH52:h$,k&]L30O8������fxt8Tg[)YWmZ$u6I*̓ãzy>-_!0u\U}]R|AcZVlomڸn'tu7+ 4M-_ڡ=}GҨQ8yZMFB:u\7Q ڹ{Μ6MNMkbrJT[SDL]-ھs8%];s^#c}Z~uq7jRZj@Vwg?OAG*ɪEij|bJ/Wiu5|<ϓijjSknRhwsixd\;_ݯ+q]8|BSSC PWG1åk#I:yҙm5y'N=gY:q<I`@Ms~4jڽju~`PF fu= X,yMMP_BY[c~ kW0 ص_|AkW/mU, sRTJFdK)snKYйAɓr|yP0S8T:g55ҚK*@:eYd������fU<6 CkV-U:Ge Ж ʕIݹe:&tۦ5hkajn۸Z{я_)P5%d:yzzu]55Mk%*y'508 #JթV/Su"fMLNxO<X֥%m=,W8a*=~JiՊy%J^ nr67H*U?3YzzμʓS8RSCV-;Mu"7G˯u]l[wlY_ڤZ5Q.Au5.yP8R4Ĥ<INQa> ?t|ɸj熿˗vjj:޾;s^XTmM%u7ЈeŢK*`ۚ-nnm U;s|l_+w}GJa(`ڼquyYkkcھs_D\ST捫U]Ĕjm,WPԱ}'0~ruuH FFUW[}E_s������,B t46>\>x,h20 uw^tF))4 4Jm7.MuIOLU]+WJRk5ZC)l[Չ~ҙFF'ZNĢz^KW/糴q u7+(*/1f-_کVe9ҙ9 ].um|i2abU2qloVsS3t?7Rwgj519:S$ZCuczjmnPoYE!ݱeݜ*LӔ=mزVWvqRTXT0lm{R\S$z2 |,<U{[SܠjYB0 -jWsS2[vb@ t:CG{f~.˲{)/&غuJZ|`0p8$sfiuw]Q[YYo97o|]uƞWCg��`1)$>_5{Riqc+hDUȂcxJE�'&U(ʋ5L^xR~y zƘ=&as>_빪1Yjk9q=& *t0_XU}gZrɼk, /=^>ω$9GOS hb@^0俔aHPpgdugir*#zU]2526ƆZ5yX=ETdH2 sX`xIdRageRXa<OlFɶm|~y*߸/0B^SS " BW4M_7~^sRiEUm���X oZ�}<O ޸l֯]KYZjꮣ%;Q,mרP(urŴLu\FmckbrJ>'vW;Zn(ǛoZ[!ܬJi'<bVHkX>ᰜL y2a 3 zу*J&kh%5 Cַ6?^UG/O|H{q PPkׅ۟ zs{zs6}+/ ��pcn+c˲lI>Bչ%]џs4,~-Kޔ}XyC,Xvcśϔ6;I'iB7T,U/4嫫N#~xPHR4p0455vxQKT Ў?Qmm6mcft:;ZnzQ7lU0\.JܮX,W?/)C~+ ) S&r��Er�v"Zjљ&%v#ff'M3ѩРtZjLSf8,_]hےa:~vڮ{H['߯  !i<OBA>OiΩ|/1Ţ|> øF!˲J:ǘU,d֜f'!a4  Ey'"82Ѫug1;Wb\~.?ε4MݻW_*>ZfL,˒y屋Egf>7γX,,l00JP(Ȳ,Yy8���x@"1$U[Ń!r[aa/ϗ1Q<Ǒ8?eT>* CPPTccjjriɒ*yW k4666m][%ÐyOLH*U~G? ۶kzh||Tx6oCofC+>>|@hlSDR;vDU[[z;y.htq9fw߃jo9N?s2 CoجL&]iWͦЬ_kz{k׮ڴvݻ[N*[ʕksKKT>6 ClV??(7떎o,/m۞ѣ8:;u}<yLsy)tB!ZNwy"(��T�4�,20I4eϓZFj ڰ6rgeihhPO?=oy}׾jjj#Ota=_~~}ReY{֓O~GOg0 MOO[zLi*ȶ:{OO==UUUɲ| Cz't=3җ>Zv@?z֡'O40pN˖ҁ{ty} r>o+Q,VI}㿯͛jmoٳ}W>' CFc9]^U]>z'TSSDZ}}'e?r:th::e˝s*gx_^xYuȶzs6'555ip>?Վ/UPXNuq#G/OtByO==={ E"Bh��74���\UWRTW_=<Zj Pss:;UWנǏOsO}='x\/aٶ_CGg}Am'~_MM-???VkkGeBJ DZQ--zVXO| Cgm{^'TSS;WZn|>o+_vڮ?To }~uA}ӟy zmw|>_W${gzi5 Y+lWgg Ôީ~'wU}}^Ugg^x=S?~W?h4/I޼h||TԔV\HjcKG?y}_WwkGOCzj%l׾y}{'tZ_499O~vFe2)}ճ@[ܥ[@����a۶~?eA=vzYȿңBkڧ_~Qc,.\W&VGGnnΞ=X,]kÆ۴l*=50pNklٳu)dV'NQYu\WWb-_Z~+*j5jkkIW׶mibbLޥp8W_}Eg40/I|> Fڰ6E"!-[R--mP*5ݻwPȫQz* UO1MMM*@;4t߲|.ϓ6nMw_^z9%Ї~MͭeVʶ \.'u˽/onٶF'=Уzu~]Я_:; ˪iJ]]dYϟѡCdrzm2MSDrzzi#��sCoն�lWIluCڴv³RƗq >_P"T<^t:%ɓ8 w饗/FccGA[;tȁ~ł[ʋ]eםyү`0$Ӵ}{MW~qB!/ӴT[[t:YO:;%ICC* zɲٽ)/q+[p߿~/_K :t:sNM55ur]of!ī+ FGGT(m F U]]S3̜ ittX7ߥX,.ue%;JcMy몶Nh��*+g/%���U,%>yH$G};Ο?SN駟?KI~>#GJ\Tut G?T4U[[֯"Il/6dbr]sERZCC'>͛ٳ'=xܹM_W^R__ygݧ2K!˲ ]驫*3i}|<S,W]]zzZruFiLCi)q K~XT:R2Y#*r}g{o>\y'��nxUً\.W��b\.W;:T>ePBy}jnnS6X,[V__ܧx<OZ"уDjjjPCCjٶ]wfhrr\'Ou=(RX8|uujoR$/_?֭+[zz^MM /߼lQU041q^P(:գG4 Y8ruJtB[>}[_,˔i:}W۶ ˲ڮTjJGiJeуPkkUWנGg&ԪDZǏؠUUO3��; 0 C>ObQ  �7y* r2MS>0L џI:{O/V^eVȑJSwk7iϞWtoIwqou]yV亞6lMwq}r֯߬qNa~= ]wٟK͆=GTWWÇ~{JuYiݻ[vmƍ)K(hϞWdm||=ھ=_kxxP:}N>jiiTy{P(Gg.}3c~Zx~gN6 S=^ܹM=FF~f rxz/}Vcc#2 C޷ VMMzBC=*gPP [~@_gǺヌy^}u֮ݨ~w ��@T ˲d۶t��d Ðm۲,9W^٦;^mۺ}DI]?O~;[K3@{Һu%jhhҽ>(\FqUUŴkv:: =YV?s<^=sSmmbxy+Ah\ UWנ`0D"җ>oVi˖;յLV__kݺM:~ ڵkm{^ԧrZoRߛi_~Jr"Q}̳^pZ߯zEU{}P3v[D4sФo~I{'󩩩E/Pyo|㋒<6кuyU6O_T)QSSLmC?s(˲Sc|>ZUU��ǘN_qHMzϳ8*r]���L,W>[U8FFm/W,wW%ʅz7oK:w*;ia^;�ٴbjk y P*`|>Z eYkT*I+"ykzzJUU1bХ ]Ot϶(BA 7jzzJhL@P!*ZTSS`0s  z_+}utzZ##CU[j\m>_SSD CJ-q&&林蠫QML* ++*+ZŅa2pa@SSFT]TUU^'{R<OdbD=!)jttDFU岊D.F 'D+|6MC4p=33��%]Mů] ��4n_ !~y埁˯A/}~905fg/3.xǛo+Kq;/|F6lъkɤQ_I}Swu+z~/ϥ\|Og ׅBqC� ��0p Ys��p. z<k*v*{Z_ؕ|>OPX??駿'W#MYm) Yhؾuo6���xct�=C���r<'ȐZUSS'4 U��pyh����y*UUŴdcT��VE� ���6��ļ!��������4�������"�������A� �������h�������@E@�������*��������P������� �������To'����dLːŞ 0?2d= ��h���,A{t'k=�� h���,ƎO幋=ږ}Ed��A� ��ERCkh���X�������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������Tļa��kK����XT T@_[<o��p9.$����la<S._9��\|>/dP ����aJM{���הNc�����7߃7m>O\N#cF l&�[N%I@����n0 Ce56>!y<y�� 0dȐf~xmYE ����Цi0M9Ţו@�[le|>Y%4 ���ړ!l5t)xD ��n(Ѵ����[Zͭz. ��,qc����p+f�=k 1bO�������p2{�������뮀m1{o��6G{J����K\3]xPJ̟��n LP0(f$����,Оq\_ttaSS��'SC<55,����n О\p܋Fƨz��qOCÆ~>W͒D ����*Оr9Gg��ndG`����`=y<S:jph��pL֕z3kY�����JEn��[GXth2����,hoj{7��V]r����XT e��Vµ ���� =Ş�� ����yC��������p%h�������@E@�������*��������PoX�mB?'97�������x;�0z]A5ԙ7_7͞'՘v[͍}��������Wộ{զj~LF\cۆ6+641ႊ7ÐB!C!esG,Ͷluǟ(������� 7UmR:ɢ\Wjkw^W%J-Mֻz𾠒 k_^<X(h?/BXmr5Ȩ)WC#Ǜw5_5ӵ������w| r2 鶍v9JhӔtdKF†:, 9'|R0`W<Ft8lR$l(0*<;XPRRUX)CLS*:R6JaHr|>)`rvl^m~?[}z*������hc/$󤪨4<⨱./(!t[l4Y2Rec:ZPWO[(4d][lu[z♬tyc=E+')޴VGm(t=N{G =pPi艢-5[dKy/\ך~%M8zm_A>�������n: lfISSS^ڑӣ`ԙs<I͖ސ SbQ]Sw%o(_2gÆҟZ-MLV7L&L#!X*KΉ65ISO>o٧HPk%c=$MךJ]>VԆ5@@ih|U4bjzK-M__/l�������x;З {)yG *1쳤%|t朣Sg 9 KUѳlZo+05:goھ~CuoCZ'ו)]ZSwδXʯK'oK;rr\i -~}i?f4:ʶ Zoб􍔾)(񔈽a�������ޒސ yRUTgO'_py:飼ç%]>|-/,U@K#=Q$=-AWL_f΄ƙ)onWV*u]{ZԯZS KҎ#9PLS-*Ym*Zj15]ڮml \psJ=r�������ް�ڛ x7MlFg52<R"fJǝ>%SM kg*MS|ρŊٖ,CP鉩)O[Z0&&]ך r+bdfi;= `i]9NiG ڱ+/'7O7�������C!mmf)|Zg_4bQ5ěU,JВNG93m|*H/u]Oű 4iI`Pyۓi C:s7OͧFKm-wg@v-l�������x�FgϓqSv;^̙@xZlai^CîvtxAN[LP4K rKc`G͖tt蘥QWK:})UbOcV6i_3E=BAuêI"y������vmRStC lﺒgh*jL=WgVK@X:Sm2YOtSJsKaOCJrY/lHSSjkLlC::[7$couK׬kzc'  %yOC3}������t=O -]w,I-՘J=51Ylʃ#ΞwysgipU4bT6iuLK;Pj|R6))K2:(hj/U>)粚.-f85jjSѹX+/xza[N$OZگF\=\N{h������͘r]G##9}I[`lҚ~uZz5ׄC,P>){b}!|>CW^/1T0etU8wPP6+P 0wϓ"Rr0hh:i|U.Cpbj{X'~CXUyjڽ��U7=WMM@iɜ'bA}z%I]Wl㺮QWMZe-���[8o˲zCz@8\]3|}tԳY5Դia\tS:}uKm 4~*Sƥcni_ C*={w �������n:帯/x*r:w������w�������*��������P������� �������T4�������"�������1o�m{v���7bZf憆(&���=B_^d~���/]ÔLx|Ǐ���r{laP0 p��:j<ҵ2 C)/���[N>y2S߂~C+4<jkl�[[uӊ%ߘa Pj:-/a���� I|Ati!г/,skKVz5U(P ��n-~ڤK j/]\"Zf_42:h$@i3���w&u5JKU.ЖZ(u8y*-QHU4��X,3"!2 }m,˺y+kl|B<y ���0RÙbm_i2 S>_Q+ ��:fn,'˲d@)/4r\����3;g,5�ehy~ ��*J9FBf[o\9>C���� ڃ/*/��X.^<V`\���x'kh\c��?����a w�������@E@�������*��������P?l&B����IENDB`�����������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/Configuration.png�����������������������������������������������0000664�0000000�0000000�00000062761�14332737457�0022723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������o��eIDATxuc$q[YeYaVxR@[ 5j_Kh)5BP\;.9?I&L2=uəع<Əo������13=�������d�����C �����8Q�����_&4C������E0�����PC������E0�����PC������E0�����PC������E0�����PC������E0�����PC������m;ӏ �����`@1 OGau>}|������Nlv":[鋐GAZOSA�����+q!a,7nC!˲"¢J����� Ð Ìd)dz7 r0 ٲp d۶Tڰ=jj-YV΍�����hLVqe&O5tpHa4CΌਧ yٶ-۲$CzS2-�����YMp%ْa2 # u'ZnMn,WC/ �����W[zS2fiE/Sڪ$۲dY^B������=epbYlsO.եJe`T �����KPqNOV0~2˲as7f�����C6qPOD]JfET=�����@oٵǎczJ}5=%�����-5idRP42V0E{!�����^cY,d] ������r..WO �����z6 J3%TNQ1�����Z3٢֚�����pBT �����LOE2ݨ"�����;40Y!BM;212��hϝ�}gRR0`XD!=sM滔ۻƗ5i[ǺUTh'eT[gi6n j˶`��28jC =Ķï?ڐ /rɓճ%YYr2Ã- *554Ksffi~-j+C��B0Vo"(_C(C[-U *p)'dk$>rIGRah&�1VCmP#pPO7;P#S'5ovV��2`f&�}&f_+Ɨ5w;@_;+K c�p"!| !z }̶#Uzƻ)1+��C0ROT-�H_T e^{��8;VV0@ }** ^{��8�p1]Ȁ kɖ #x�LC����2mdž�����޾SB 5z6s<\[]{S g"BƎrS5A=\>o$'ǐ+fg3 ���@}-vZ.m H[k ]RHCHم(;;\j9ܭunrAhKZ20���3BfBvH"SE07ЕiP yA=xzGN1s$Iơ >q@<ȌB`z/���v|!C|gHݿ/_ԈF[M0`1AQ*f YY~t_E`0vŒL ���a.eXOkNhSW1~BOGi $)?.wNن>u^nd_G}jng׫tS1ne{);-ϿҬ /6gzH����L]}[s'Z~k9qoy'-u]^N8*.小d)]}sW LSz;\b ʕ-Zүu9r�WtwJrI6?Srtx�@AWֲ!-s;7S'bt ghQamhT+uBԴY2 st҉9 luw>\Ao745rեfÆ~}G~]\S;wh'tYџ �N!v  Ɨ~\XC!IZtWy,8:_YN\Q.r_k-ԯۂvW%QsHW hӖF si ƍu6e[PO>$K92ޓzj,#<;%4TYe~Z2sG3hPK)?ƭA\thQS=9ܥLj0CZ)o'Am_>uyN9. lCt=;x v(z_=\ K`8'PXPyy.,2cB kL^��=]-B5 i@H-cfu ʢK;v'Imhu}M_RA/'U[gwznY=:TQ[Ֆm `EhPRS*,m]VC2ȕv\CcG?`kӖ),0#$5 EiVC={Cڸ%F_3+NhTKme{P2pfg `h93aS5ovNsNSƸGUQb8zNV\*<mGǖ)qEniYV?G~KcGh,`rs }Sy*-ݱ_r-nPCc' :Xoc64S<:}M ߴ2m$ N<Ϋk?9e[{=7iv]j4vk{b>z34j߾/,MM֮kٲtRNJc1:BQTدk--;*- F|yQoӬSip` K IJ|;LS33c~54;:ٰ!.yHELJm+MYɖ$/$]tNr:ωn4 >Ij^Y3Mڹ{MX?<q|C>XSϷr|&M,Ko:\hʤC%c"Am{ި/~6_yx,wSw1^L|0Pb|f}CHU%͚чIC]1ƅ1|=/ee},2N;9[ǹBhYY|ކʡ>aC;rk'.ZͥO=1[8+:HiJG7ٸџ64mG#G5|[^ʐi~|-8.ꃵu_=aijdvg}קcE9:ԥh͚p-YڬɓT\֮ܽAUVTQa0SC4n簨Ltes@ zk$驧KK5kL�Eͦۻ]l`Y҇mŬ|,Vj㐛c$%yzf"99,OEg}GݺzYƻ-`4S=q3j+oݶ34 ]c>n~ =LK>;>sI^xYKm0u{PƵ ︣Id5;PC[x7a(d3oV4?PP_CVM"*kh, g|;a(dR0$ylce7w=P+&xrU߾9 k o @HWmߔTg8W `w87_5Ĝw tp y 9-Uy=5+TcϞ{ާKz -\WVL?4x~";vU_o?�Ws'I%Zu=>L Cv EnF3z7zsq h~SP6n׻b_gJM 7c*b>zZv *e<'&jj-MVZxWoӢ=BjjshʼYIQe.eEwoTXڱ+PQ)3y[-}ƅB>[[k5,"\ek"L!pE�KMqӤ C7aXjM`6t5O>פkɮksscB,CggRX҆MAmiH[zfԸn]tNn$Y JO<פu**0uGsBc]z{I鏜smK>).2u^M9e'iD>qV ]ZA8;;K3M! yī\FYXh0쪅 OvZu`a.R:vUk@o[Elmif=X&yQvu6,v_Wu አ_&M}o>rzV$>>[i<Oy뵴z&X7o*QI{ƔgQPII(�X4DaOfӽ 13;]v�%m/y*j]{P)#z*|G=ãb?5(Юdkss?w"ژm;6FN\aH_bA$:Hjm@ p C ׶lkמwlxo}>W'G,<ƫ^h5??hX.m)'z u5= x?$;*+&dض#P'y_x9"?iԵW$&{: 6lCu[uէ{?"k-`n iؠhސ~�l7IXOu bݧoҖmAl m蚫 5HNWqd|!FY^эkϞF4uқ:h>Sqc=z~M4s՟~Q' ڶ-+ZzuN:1G{PK`S۶"Anfٞǝ^%_V7J/x߯ԍ7kxOZi}+(0uE=S空u~ dz�${UVB v 6#z馴7;mܶ-`c\($IϾԬQe. ;YZҶQ*\k-埍7;K.Sj7mCM'5l͆/ I᪫f)P "I:n~l/WlIX u{P4}j;.mF^%&:b[O{cfK*aloN8϶n9Q09FʥV $iӖ`\B /VuV\lۖ**ͯ~!7[%mNcӱqU@[`׬h4O$9G^C}HS\];~[IJJLW77n,ѯQ]]dLI Xڵ+(˖ƌv(~OΑc&"~^L~($JrMR/]S|I;0 - Oь޴$NsPhF`iƀv/ݛKU>v`[lvi: ܫ�zEfѢj]!,چA8t;_X/Flz] bK/nrd7Sۦbm^m٪"UY~Ym3}ChRaASڞ[ Z|&?hEf3y0lk߁ꏓ14y[6Miڻ?i0=P ⼄J2gLN[.WXPkz8ޭ<CrsLe{ac 7%/[1@0<C_Jƍkx ]wmn:aODImv+?j Q7JtojTمs+Ð(@XիcߌM} \^ [?ѐҴ97uիZENф*ٶTUm?LJcǺu j ]_oń[MU_(6HZu)sYJhB�п-l?/~MI D W-`&wGQϔvM;[9Ɏ w Iau Mt] tuƢADɎ^]k!?`DžR1c?.Iym`E̶?{oh9Xo$jt'j9&ЭJ:^UksϕdSM1t'r5r+a*LЃ!YeWTh5,mo﬉lƌ@TqZnՌu N9Ϗ`P?;z/I }snvILeGﴗe3s5}z MegjnT[gij}Ηr:?kWAD++Cڼ%>ި@ @`P='_ee.+-O4tyۢY׆ S~u1*)1rC^-}qɓ=׊!Æҏݱ3mۃI-Nm tbԐ.͛ɓOE mG ^C95WVf_ =Zp\vxIuuV`כTt購iyK 2OwkmK|آի:p $˖FrkTf {h޶ϻɓ4i�Up_&mNN\{G{3 / ؚ/ VdVIgc>]G/gk|Eӭi'?M'16Φs;=>}0nc@@vdzԈa.y/SrڶԂ.`&ssrc=-QeU])mQp$ �pU�]>TƎu1JJL}5)-8iO>՘0 9oҤG/(_uԥq}<O=A^A}4Ԅ (G ^Gn(}XMpk\m WR-_ўlCGjXAiʖCʐv ڊ ^C.Anmj_g%W]Yak tjb_ Y%wp(s헋4<5m{P}!iJ,Y[c֭z}Q}X#g}1nYV63 -_Y^ We% v 7Zޯ/}1c>d`�zPgPo56ga*TGdJ"h_kjqi** JյA^<\CGsrM@?]²UMcG?룧 wEcfhFÀ(^!vc:r'eמPFYB׳,i@vcNo>DP(ù{o(i/t7o#eip#7KB_TIYz-S߶[_okIr,0u %81ÐƎ`0*Sg y["B}zjnJ+zj-:Jv6mn_|PPr~AK;ɬޔ-g'?P3N7n,y%an5۫}PJJL ?W(ӔNw]V(o_(nմV 7sFƌv+'Lj}ii[BZϪdij P(ځ)ob{[TŅBѶm _W˲}CPh4Obzv>3jx sg4uaz}͡œ~zZv %<@:O€iY$mrP~SF;W IkohYGz4!v诿lOMǟ|0f+jڀ뿔G6_qcS/Ǝu_-[t}uI8%롱rel{\zIN>9 8' _/XUSK߇ sU Ԥ}ۯk:KzԽ}V'z'cé/^]ΟU}+f-ˊ?gk_-QAߛ93KhzQoݜpjo~PϧU0h=Z:<-\ sryG#q VN7.z =P}\V:+$ %䓩K>yF}n!_SmF)|($O):�sUf_V}my7wvV̲\fǟM ۪} 1.+7`fŘR zw? MpW3>mGk˶[Y#f:Y4=cf3.y]Ӆ<'ۈib4'!=BSY#il#mjў6]˒|>>.BR9sggw[[Ӕ &O+' ,^~I=\$͘_Rwo(aCiۖx^U!MッVRR3tH[˾I27_E}A4lK睛9|yzCÆ4eJsq^~٧e[4Wjx o3̊[ƻ֯nC!]撘{4eJ֯Wt͠A.}B]H::섡P+6>>U8\tR|0+.F׀mۃz4fW/kԊm!%:}ƒN㨣:y9ҭf[Aoylys$ɏSR}>[_`nNIily㍦+ A=˫"Sk>m=��má<FL5zdЫ-m_RdƬv"pgUʉ鈑uV*ǺE=hMtҡM!qgCE#fgʊx G[jH!̸&Ѳ<>-[. IOiLS$%MS%i|›+䝼Ы-Ѝ_ڂ DO;;v!]r~nj7DC$,'e_vA^LڌXFg- zC!] id<OW`SK"͞q?Ii 8eQNku۶6r~xWv} !zJNm?kj,_i~X7m&3ψ}۶_BRxR:{Ad^yy\ b:9<jdό78\B͛獄[een}Bƾ?lPCC%8&yk4x ]qyA<pwt~7 ,iՐ!fzu <9�͖ԫͦ[wtŷRw~ھWoj8ό#(,0U>K&9n[GLI|n+.އTBB>wi^wkަ7ABe]Zwظʼ><C^;eiM) _O:W0idmG0W.dkB[UWccw+U1ru4\On-:ޫ\iʖ{ƿw^/|:O_tH0DIU}SҺZA]=tTccZ۶t5 {qZ9=+~򳪸߱m?0Whz]Uձ[' t.Vg53M-OU{Mл݆Bag%>xsUVMMv5Y?/>,z }庢�8/d(*s6[VEUÂ[yjvj؃N罹]xsQy9>ܘvt|jKEL?,?H=m[fxYtsxo?Ǹ1n(;&2M52M~[-$ dR ٦AM;B.7n5mZohQYTjR<ٶA)w,͙ٳӹ^}Esge5u⛙loI80 /נA82~GƍCgp*Z}aoʌuQFtIf[MMv¨Ъ}/ RMjk-54XIwM3w,}SdvIwedڵ~wlv }~$)ZcYRciѷsxBAg%wR3>ID,˖i)QUS%l;+�"ekx}ixnjJ̘6+V^އ~(}!;Ш2WrgP䀽7ЗWu%_B3-mp 6u× h`EH;!+)]~aB!R׈۷ G>mA55ۑv0#G*,T޸;w.[/I䅱; **{CײGn綅XZ2&ݭ^xC0Cʛ%o-Z K=K eI=!W'|V:4lUr{=И/hjƀn:SKEy<$(U\6y՝aH}@矗8 l5);JmGگPVUoTva4 Ϲ\)0%ҙc*niU\VK6']O^|)cm?zK{-miӦ@?GwgZ]]zn#ǖwSL%I)Yـ9�pQŽw)`IaM*sńBDvw<#n%GjҖv\P `lLڛ#/{4cG-y[P$jƋI'뮍z"3. >Ԩ}Cv(bE!&];`Ӗp_n&m L:;qC<ێ7n4&\R^m nhw|.ݽ ڴ%6m|qo ҺLؾ=_Zt騣N$ M#2t헊H&+nMM+IW1gvW4v&h%+wRz~7.?F&_T{kEY|z_pAכ[TSc)y֧W:JZ~jUi7+O,Νb/jʒ}- ?.�({-6CWd贲4h3vޣWNH(b1Q+Yt_w%m=ovFdGe~=|*DM2ٗ/ZVx:MfnC6o &=X̋z?pv8O:dɮ}Ƥ#`ۻ;]?7w]^gƀn-/5uO.WyՐA.eeIuv u:Wwv>h&[VuoCjM WwHwU/ÐFTXhҾȓOw7Hu<&[=L!+)6;GiԶY/N8ebx<~ItA\[tzKmvH?о%i,yٚ亱S%0xH=7 1UCC;YyloƿJ:u0ZW,Ip={S@?Vlk@cK6m 'ԝ՝w IyZni/nVEjlcx4Ȭ青o_0W^/E8URmA=?AԴ�^KeI^#d@E-~[#|yqѣ\ j:w?Xf3dR]g~-Я\CÇ+V  Oc;ƥlCX Kw$+j@E_sʳV^}EL{C fT0(mP}~ eZ(8ҼpZ>xPŲ;*$VY/~Y/ uSwH /]GX^P־},+lztԎch9zՎCLӔ>Vv$jn 5~g.M%6l紣p+4? ˝Omm[K˕n RNaij5ʭ3&ZY^iꊊslʢ82+ w'j문Ǚz/˖7%&Z)�T[ZRh!v6o%%qsgPӘř>K�үnN{s'WNDʕ</a`t@HUBVo�]xA~£?/?m{g%賲 ͞Jj\omEvcSZtrNLM[:%yńi^)HߨQn}tvo^a` +lHi%hGϏ}Xwxn}O$=R[@YoQۯ=Wn*�6bKW\Ҷok/t"F[Fֵ<M{ZHJ<L W@c׮~jUVv/~C-?1aH_H</s/.ꢸ&EE|rѿ;klUƌvSt:ԥ+>nv~}ȿ_|p7zߥJb9*/wgmfeen}%҂Ho}Cuz+S8=/{`77ۺZ,chԶ0YSbI {vr)Oߢ|RAO?ӨS:C�( PJ --V\]GzuuZ-!O |lIՍG6Wc6jn 7>ܕjfΠVG5^ޯZ+~Aڼ9mۃ*/hxOVLŋu٧ bKU[gi wu:]O691{N8>Gcx-ڲ5}Ԝ |wB~u[B!id֭WR_r`.8?_;w‹>ƌq czOD*jN>)Gkޡrf-^Ҭ19S_TtY>E/֐!^۶f?a`t1ӧ;.G=sUUi< L]{Ňg֔L* s[rEE(&�!f`B=``A[c̘i`ن&MVntd۶J56ZiOM~V_2wžIWy5|8᪃dh# B3.jPKO. ?1c3&cmhGSk̚0|TU%K5˫OCk͚+y<:3Wg+9^-:9G74sfn#ᔮ'ݰMҭ4E'hV i`s \CW}P}l G@rejYq}<mƍ|a�[.@VMwj-=d�dۊ 4Nj{Vu]]φBz=XǻT&쳲goPwFՅBҝўMzw--]yU /sN?ņȼ2fz1¥Vay9yb7Z++/_@XV|ϰStݗOcuYoL|aʷW^ѷY7s/H\{ WRsX��/~S[_{H(èٶjujPoz9֭ 5~êf[?7U{Ӆ:bZVK˒֮op|&ZEN]ZwY">֠{~[ϿӓO5ZR@N8>GGNɧƛO5j qi $4 kxrsӛeffy3V:I]N{,{Lƌq}Z9a.\|RN׭+6NiHxfM3v=lwl~[z ⎙>6Ȕ9��,F}CjDlۖm۲,Ke) ů>ʯ}jk/8vh부~5?ܹ^5tK!5lUVxIsܪcpt+7ǐ֞Am۞MŦƏ1goPv7ΣnY_P:]qj ;{w}ԫNYItMt;}seҕ$c4*t:RSci**B /'_Xhj`xI ʒe35hk@,MLee(n o7ʁp uGҫkjj��WA^onLӔi2 CF ׯ[s!00j;./SI ^{[[ڼ%55VoOl^iE('Q+B)4kVj$UVZ >GwOM.N}| &#Gf{N"͛l[*z: ��>G0\𔅜ؤxe�\ ݯ meephL mо}2feE'i |V/hD q[o7666̥I��@C0oj,͘3 lmNS6` ?ޣ[~4H~A,C_V W =p' 1YggcbԵ_*��"v_k:�x͸B#Gu ř{N\ :vjm^/)�����plqD^{I;v{wP4f[cx4aGS&3} ��oC���i3ѳ2= ��nk�����[������`�����������`�����������`�����������`�����������`�����������`�����mۖm۲,Ke) ůѣFd1‹]gz����� X Mzv{dLӔa2 #YnMi*������ʝ``7elJۺ~{ �����b�����BtL����O!������"�����p(TвUYQ*YC4eʔL �����$@0E`H=zCYq?aeG߿q_s5C�����SCijjǖ;Ӟ}5g9:C˘}' $rezx����� 4]sVgz(ʺ5bN7K}Qyyy`L�����$A47EB'7>ʸ={ƜܕU^^^�����:APY}Lp3klo477Ŝ..)�����@ 0qP2=~B����� L%CL�����tm}�����!tKmm#'L7�����=6߯[q?^"}Ofzx����� ECH'|Z]2=<�����"!miso~.�����@\mضNyOΘn�����H,77W\t=y+>Xa���� ۦ15st#j�����п|:MjpR[פ˶D/3XÆfz}���� P{=}ǏƝmGκבӿ W�����$T4\m202=>cۤ1C�����)b(MW$]2=~e谡1W\c=:����� B52^>z4eT͜93C����� 0 6kL-8~AtCCu]iӦM�����H!g=χ˯i޽:p$)'''C�����I G/]tU,Y����$J�����PT [jkR^uuM �����ڡb�����Bl]=C������D�����CQ1=J4mڴL�����hhlۥb�����������`�����������`����������� ɲme{،}a;*o˝#^9gUsp$iK?G/Ҡ%X4u4bz7AسB7&I*p:JHWfzzyeڻm Qn[~Z5֫W%I-N>[3ֆҮ ĝ?k5x���G$ihڭzZs|\M3\њ<rhy;eۖ$+ߺK%IC0hݭ`Yevx-MڶIҐ`hv6s^WU޾[TP: mޭo˝kPm= cwg`h״wq珙zZڊ-ry;@{���#4 z}|zsf9k.;yn$<>@\rWyoEB!7_fte)hx&I:ӑpW@{8oݣ9W4hʼK3����t`( eK&̞ah=Q}KGƏp356HJMY$É3b@TW=`���C0G뼅4ogib}ϏKY`@f_Ud ȉ'fz8���� `(-/cUI~|Zc_Cj+6kg#CIRMZb;b ='mh꧵g 4tt8K-訯-+Ё]Uoܞl * 3Q1 }Z%I#'Y 54r yuڷ][w55ThԤ5k}=E׿" :Wkwkցd[F_/Hwk+hTCxD =W\,È_qUg$EMKby4y[ю/z+?DçTg˛ڷF9y5ayqo_kv\c1XZNKģ.��� +c2nzʞ-oi[񽄚ĝP4jݭ'tv$Xke:% \w=1-f5M? mXSتޭojHIu7ki}*}WDNϙ3_Cl+9b Y| Gw+Vj+6kf:W8"Kۗցu`iwVn\0_/s]yu[]WH'wL3m|ͻKK oXǂT$ *I0���3C=Qk$Is&!=FO68R9k+mKos&_<Rf_P@K_N[= $WV6fuڵY>xHa6f\& rjIҰ1u`{z2&}/:0$Hj& 5[k߶wXG57&e/\뗅O7LFN8Q9Cup{9Q{꼯31SOWVv$\ P JǪxr gk?T%&\zZjk+z/Oݓѭcl=/Ov<���`ő>>9,]t;m+n= C<޼ˆSm(ipLxoҺFO$ɲNSScš[сg/2'_}>rYJ ie<15t䂫aZO%IG.JN~Zo=m}u$''f]t;7L@>x7Ph)7j1=tRw,Mxu{a}?$rܮ5EMZ_b9k÷S[Ù)s/tŮWjpYem=uyؤ}UKS9{t1���p8bSxwv=x$kNʕǛ BZ^yx^4(<1 Ii5 #JZc Ae3bI-դ.+~$ JO;dy-M5ݾOtEab~|+۵+<ضcʋ $q%@K $i FwwBm:`U@{���#*iOUps!Ec6t8^~tyQb|u#e9Go-9[|5ع\ˏmOV~7<]':iiU^QYgڽ{Wۿv-+is^Qr"#?z*n[۫ߧ]YvnxEשfqz����@0 >pk+כ_}egezXE#sg6P[S}m!MSXbP;mո=myr6&}va*++I ;#?Hxo^i`W?sgնBP\KWX} 4tx= ���px#f'V}BKs䫌<j" ikkDYKSmg+qxi75U(ܛs.~ ÔV_7)2x$8BCejwk몧$Imw����8P4Oh}9VKo jk>>zʩ?>1[2Nx7H;j\Y}d+^}$ZtU6˷}. hEh@S<����P~gbI/9C & m>y<h/9]V6B\sM#R)۶T[9uE+f_Zk{lXgZ $b:0lNxyKsj=,VlIqml���sX, !O~Q&IStQS2=,!+PzIp"+)mxHDzj9N?я")*I~_e{62 Ҫ;~\=mPvF*Z-#I7,2v{AJi $N3,s����@B0=ac΄Q;Dno=GTP<ZXG޾[;tiΩߐމOTض[֋gzd>Y'\H8T[Y?vC;rU@q4k#GZ4di@?9/zz$:wGAɘChM9Q{p0 %ס[V>_R#���@`*YͻU'/ee{ؼQsTkw\6q:LsyVv.Wc=}C˚iIρdOhśPcVl÷#';iP+tn]# i;j;ʝP% t=$I]]1+P$Sʧ?>U_n/tfT}~A}ھ61L]|V+l+>EQe���4z`!d֠:s; H #zE03fŸ[vw#Sl+djʼˢnw{c4[/7oSv ?O>~:znPhԤEO^J9/E05dQ=>{Ii:_FoZOS?uomW3OՉ60ԙciEţRge9���H_Jlۖm۲,Ke) ůѣFd1]V4mڴnޒ45TUjnT~( !}۾DԈ Kw-+U _2ZC&4{B TojnPAX uTcYAU]4d���� <;wכ%#4e Hpc׭9M0 ����z+bn�����C �����8�����C �����8�����C �����8�����C �����8;s箘Suez�����*������!tgtP����@T �����8�����C �����8�����C|AɶPeY'˶Ch1:jQ�����HP6KnЊyo|-~IRI~Oef,K?OΟ=g#����@ Jwo,m{#$U7Ͻaf}{s�����RDPkI:bp .SY߮_/__xef鸩jq_G`Pk׬ӹ=O ���� e'ϋ;uނH^]Zn͘y>q<$Iڱ}G�����RT4xܮ6HCK%IvP#?762=�����"b۶j}͒LO=Z ����Sz@Y\ jSezH#�����O u-OeiZc_cy gez}ʛg^A<�����{ #oįu'OJ6CƜ#%^a����N uadY*z>U7_S_~ E1vzߏiI4~fϞ!����h>sn"3n>s$iSodz}jaz'9W^׽wݧիWgzx����� vtyZ4s$饫UԒa@ [~3544]zp�����/ yFG~]YW_yMovgtdzx����� z 涥`glsWBC ����BPzfqez}.s~~>�����C) C:sꌹT>T r iӞw@$鸩*qNo۶#?@ ����`(MϿNϿ.%fz}*:�����SRd[0KeEIsɉs.¼LOն5v]�����HC)r~I9'ާF440 ()ТyA-],rzDYY�����RD0*-02Ʋ,=3jhh\V>nl�����RD0Ypwˮs�����Hd<1\L~D�����RD0nް"������Īd������E0�����PC������E!tKVfz����������p(*O?-C������=!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������F0ddz������YLZa?M8�����g0=tk*�����@ 2 #JBL�����Z1d?LPC<dY6������>]J2Ԝm�����pXknj0=-`( Ði2MSU5L)�����PHU52MSfp'7> Zٶm�����pذm[յǖ"ҥC2 Cn[fr�����B!Yn;.)i7oF2u@mvEwAˑ6�����PBTQY%-۝0p(`(MӔLQEE,˒e1 ����� ,q?g劄Bn[.K^ V df\44 elےmۇC�����@ZcsÐaJ!L3b(cSڏ0aPpZ+,˒eYj�����8]k14劄B�uy*Yj(ن+JeYrfid%C������bdJ=pV9=@3 ٢P����� DO=SZ==VL#�����Ht''u+j?(peQ:X������Hr ZH0hB)W?&�����/ h= e������ =fo�����������C �����8Tbyz����� ;:}������dGg+fAZOSA�����+q!a,7nC!˲"¢J����� Ð Ìd)dz7  6ʜ ����IENDB`���������������mermaid-js-mermaid-9bb0ed2/docs/img/Editing-process.png���������������������������������������������0000664�0000000�0000000�00000044643�14332737457�0023152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��A�������IjIDATxy\T .bZRfaJ)喦Yd%܊Ջ].=*ʣļKC FYY7?�̜9s{Ιs:ւBD#!% ABQBDB"jQ$Zga}wXAHb>O!H[~W¦_w֥f7R(I3Kef-CsQ$ !D( !F!H5 ABQBDB"jQ$ !D( i\ٳ̺S(ʰt\z!,l-J%뒘$T*^t\(eKԨH%5I*k5J%j+< ՛!H a�9o+55^hBh.!!A/BsTZSS1y:88-[ֶ>ڧ :T2 T9z,-`mm?4eB"#`wwO~d֥il%�m6`σUo^"Ƿ'-^Hq [k.C# ׇ 33 c5|-K=:꺬gA\[[(Uy߆یT"#aHmv_55 ]s_O,&&W^S3DLLOmpCan8T*}f$&JOe9y_vISDoHO?ŶmP7n,[NeJ.ųT3g#8x|Tff:?$oS(ʐ>}l HZ�6n܎h=j BDĦFsdcdؿ?j5h~~:s8bc!!AsHKKe%Xl?o2-[h;;G|V(J{"<<_W" $d-||4Ge*xf �~a1c>_ A5RL<Fm2S{yBII1f{l<}UB>>~ɒeֶ1c~ä9-ᇚ新͇'?,A\͕z{s*Êի-AFF [uK$xx C~~jjw4YT̙㍶?c|t3gɩ?�sGώ!$dmBJKK_-33L .]ajj2VZ&�wqF2<s^GK9Ȧ(@ϥgj__TTGK.Z' Abt]mխvv(**RlW8Iq`�0xnH-lT4DV{qúD)2ڼR4?\X}62Y\]=`mm;;G:gT(EIIO$\QFF וsp67jBH$džgRu$8\ρ{"(hnL{v2%7{D""RCb4>jM4&Z(EbTelܸ]sfL<�-Xfʼ5amJ$^-_emgX>'ᇢuu-AVVF17M),24ywtA'iSg#--AA�-[QzrϿr{FZ1W>=H&n9ڢ]Wp"jQ$ !D( !F!H5 ABQBDB"jQ$ !D*2D;7+P]u&I SsЕHTWW�W_}uIFɾ_/h~IlI`O[PVV�p{/1g]hќ !D( !F!H5 ABQBDB"jQ$ !D( !F!H5 ABQBDB"jQ$ !D( !F!H5 ABQBDB"jQ$ !D( !F!H5 ABQBDCmmm-"1&N† =SSS\pn- ѲI&Vkۛ>}:]2j… SSS̘15 ABt@[affzw !:n@$DG RP[ABjk7H]Pc / ABt uE!Hh R聦 uG!H R !zR7H] 葺n@v( #u uPg .]P !z6i$tЁR]YʣZzeEPQY+СCk"EM:I熚2<X$[5u�@ :v:G|*Ls$pf5dvKwk,-O.EhNG58wa˽mRB_0Ϛ_+QSu)zC!H^Y#q.` 0Aq^ 2BJct$x5' ABQBDB"jQ$ !D( !F!H5 ABQ(ʰt\z/55Y//a�9? ̺�B((h_�HMMƪU U銝#] ABZ9HKKBQss wYTh8LPRR{ [0U.0zҹP(��11*?11JmOmRחJTJaakqB ܹ#Uo Ð prdOʕ CB nnXxLboʕ�SΆd,[N}[ڦ(dd0@]।3gXX c$ ABZ}DϞ��?x{(J9s˖'|ٰ7`mmWWdIkRR~gClM<7�dee۸{67nʪ7aQ  ҄}?']ckrVbm?غ3L��{6f̘d lHI ޾ɒ0q�g1sf0RR~ z獔ZB!HHz$xٲuA\7p^pr߮mӧKԩP|g.h ssKXYƝ;fMp!۳Mkk;Ŗ-1z8[ɩ?bժ kk:h[}J婩*y�\\գpt`mm&ږp-qwDxxVZY[b*qxvv-9r,j}<G#htab|sM4 hxayA !F!HRģGXAIOOǵkpu$''cH}ޒuYD(?pu\v 2 *ϗ. 18v4~  <Rdu^^^1bL+^` D( /|G 4#F/[n�N!D A"~:^dTVV=͛\Oң:uz Ĵ :tE!HP(|w5ܻrֳgO 6 ÇLj#٥uEC8<ۃn"yd]PzYYY-ߵkWxxxϷ}8vֻojkº$:vFqqqK/ݝkg_4EpV5lc' ROt$0}whMQQ<[[[K|n^>G q|'5?d3(I;]rIIIr rss[\Ԕ?1b899 G@_x~uu5tΝu7 {)ѩS'tܹ{IztDQ=;cȞx~$?^|E>^xA�kPSY Xblmm~z'|rW^ptt#{9}78H$@!HU]]k׮^~~~yg z6!** �'O^g%41h  t`4+Wʕ+[\ #Fȑ#/ʊ.ڃpaݻСC,/_.�$�p\|III(..n5C K/QFMw!] U78vXl۶Gu"K.ҥKd-߻woK9r$F333ֻ`v`mm-jjjT*E=eA$%%˸tܹ9r$F)65r N>sNՋS(qE\zKJGƘ1c0bL49:`矱|r̘1ϟڵkann;wga1u.^/"--_x>\\\Xo.\CSSSaee}vޭd2U_Œ%KPSSxyyBd2>]gϞ9r$FѣGe*|}}'}<xhN޽{!6nЁTUU˗/DRR˛]g=ƚ:ekko!!! >uzA!h ˑ-?b;ƍC޽YO )k<y1tBP?-^Gرc1f:A?Gmm-[cԩK) A)..ƹspakkcbر>|8҉/P\\0_f]P @YYΝ;TfuvvƸq0n8:Kt*""sի.I'(Dbb"R)^>,ƏqƉ<.†)vڅYf?accú,ԣT*Ņ ]wȐ! t-Bcmm]vaܹ裏w^Ei) -- 'Oٳgs=___֖uل��m۶ᣏ>u~BQHII N:SN5{e'''c]6!M1bBCC;v`ŬK A-KLLɓ'[:6660a1HNN޽{燁.I+(Gűcp&בH$7n&MaÆ.6Y|9.^P8pu9ZA!YYYؿ?Ru1i$L0=zͿa333'|kСC1cڍB Ξ="==_oF!>>;w  VJؽ{7ry6 o6YJN[o&6mڄ;v.](5p9DEE!''s&&&x1}th`ѢEؾ};R)Xf8<vލF9::b̙8q"Q5kN:H Ac#˱q&&Mb]&!}Xt)Ο?qƱ.M(ؽ{wgb d]"!1zh8::_~ }3kV3f@xx8233 `9{F47@=p֥C0//;Ñ#GDqiqBK"`ʔ)W)!mcٸwL" $$2EӧO�|Ki5<tڛX߽{j_[ZZ[n,H$8rY!pB崊};# .Ә8q"r4f3fh C5^^^ŋY*fff<D{щτhK/=s`C{z[[[ ABdȑ@ZZR4f!hffIXC%Dȸ_'%%.Ec@P uh jHl!.5jӡT*Yt�7o.E#F�rV#˄U �ܸqu)1СC5Z(nCKшф �,X@O333b\\\d˫n@Btn2#F@`@@�u7/hCb A///;V{^I.`ŊM.=1zzX" A{{{4ZBH988Ν;hQ 8H] !z@ Kib g�7?n^&D{eiMf 0+xrԠ QhCpDzlL_[w8D9"D<駼<AQ �w3׎BZ�?/ht!0�9NM) ѣ~� X, Auȡ $D,,,PZZʺfM BBBPO4 @`SX蒅JJJX, ) %uȡ $D(uȡ $Dw,--.h+�9wtee%R2ܱ,h/�9hBTA70[a sss�@YYR2u�r !!ZУG�@uu5R2W�r( юݻ�XCPȡ $LLL�P'fCAHHp!H`@!!m l% 3A~ BBZo8QJu j * BBZ?f]Z A ڵ+>|Ⱥ  BB4׹sg<zuj1˳ 3v2( iV׮])ٱ<@t0�81C/ BBեKl u҅:%�9G!؀ uܙc @!!u O<a]Zz Ac@3k $ �8`^�@ǎSeOo �PRGԝXCAHCPȡ $b'0* B"fw.;�lUǎ;g De& B"F:upP3DlD1'H:DL:tZeآ�l B"&FCAHh;A @p~ Vxe{�D",lnߍ?_sk_�T*ؾ}3*˗-[?ZY� $d-$V��:Pfٰ.1NP.!!As8sֻ1D>}0cd4!!6n܎<<mϟWoTX!16F;WnnHKKBQ/?4Nu E.??{v�(JW355YeTYz8پScb!sE6^ JJP!VTTh>,^< nnHH!!A+7С�u>>~*!aժ6}_ubb"qqƞii:=x q !1lʞG΂8 <,Z:9̙|xl<\]=0sf0:wwO_ gDze \TV �y ##EE =)</i9!`G,:᝕}[xs3L ɒW=2 %SQRRԮsF2<sֶ:߫{r&/{>}*OӏI޹#�ԅƍ>nIuX[b˖H89~S�Cmm-�h4o0 iiD2?ؔn$sDJOYZZ�JKKԮcg{ͮMA!( 3J%j+ �mw}J11P( HDi5ryX[[~<fy>wwOQY�ޣX(�ŅBPZ]* V�u,BBb*S{":(֬Y}�ꆲ+Wnh;H$Xz3bb"9?kk[XZR9B<�P>|4Ə� AaPۆ6'[UȖa ˘6m>c֥͛ӧO.Im:�Zt(D? �7!;'&3DAvݽ8aQ� OPs>ڟ!IN~8w;gLݪBOG {Z t7Yq l½[URLЁu)D@:uĺ! (�:  i Ν[}e: �$=~�tVVAHH�4c˩D=dO/rqZ ?�$q IJbB @) ^4 �$A!(z?]֣G��]ta]1# ?)�I[<|�еkW֥/.v7턙 ; Nu9ĀP'(LmAXS_l|4!555�旰0 ,ȩFֵ ׯ_�dff"$$ui@p {C0 0#X^K&aҥK$0{A0~�%v ~˗/cʕK%GFC0!; w… X~=뒉сT ‚jd^Uajj/;}4YN:A\ ‚jd^)?ꫯ Heb D(C!#5 @?He8p�} ĝ"S&aC!  _Ν;Um߾WUU� A!tl1b׿, ӧDتabbº A.g| lo�rƏ?\e?|UWW{ 0�3ka͚5*>S\zU> A0t@N`` >e˗/L&gEaP!&u~|Ç /ϋ u�r}J%>Co:TWWӑa0 @ΪU0equu5.\'NP8 6vZL8\^^`rAتP%aǠC Bw* ƯI@ƍ1aqYY,X;w0_yy9zɺ #A�lj쿰7[\jܸ\'_|ѣG󏋋`ܻwi]D?***`ffƺ # LT*Kpb B @Η_~Ç `.Pyy9�P'(RYS -�9xwEpp0JKKYFt AC,j�@n!Cn߾`( x�Bٹ*'ߞ#�H$ڵ ...\,\nih8,,*Τg'L[*e.PVVBa!X �`޻3f]LMMggg~Yff&>C B#r}�u7"U׏u9fnnh LOO 4"%%%�h8,NNN KKKDGGё_Rd]ibڲ.A۷UC'ȱ_(/^LAh߿^z.AؘB�zvvv BWRRB!(  O0`�뒴P'(,FF{i"|װQbذ.A`^^}.G(7͝J3/= w4{{{֥2՘ B:}0p!(?چ`C~� Aϡq LKK ݻw"`4!(666Q96-- |]tAܹm ƞ={TƍX`@R 7?j*&\?Q͛xƳ>˺ R`{qi>)zBLLJfgg㿬O�<sK!E?@ VQۘ;w.ݼI ~7B!hD,,,{n <_v]̝;geddTBf!XXXN<)͍_V\\s"==uyaÆ.4`!pxGfSebb]vaĈ ,\W^e](A.kA`QQc2zc;w7/F||<D'11�( CP�][nʲPDGG.MT0`�Ӈu) `6oތ~[eYTTBCCY&.]¨QXA`!hnnκ$OxbeX`*++YgԸyX A`i>PssŦMTxPPP<D///֥&d^,usNH$~٭["++uyFI*'b!hjjʺ3bĨ?>._̺<?K!jPԠAߪcT*tRű.h=zVVVxWYB0|o stt}uӦMd]ud2f̘ A{1cT۷Wf]A�.4 Cu(O"`5ksރB`]Q*ɓ.̺vO<Qy믿6;;;L4n[l/3g+֓ 6СCw'OBT6BGp!xV}ڵkv?3ֻdPѷo_\vìYUP<x 6͛8uh�ٳ߿?RH 7^`ֶekk+ SBE74m۶͛�ZULL pB֥ .m/a;w"$$9:uJǩSX^o1tP .t_Ϟ=_cԩ*/]Yfeeea۶m{nS?(J,[u)DC Amtjիaeyyyxwqy~0??_4Hp)̟?.k@@A_aaa/U0o<~)E7_wxXBZA!؞n@xq,iuF HOOrq "| Am uջwo8p�'N�j:c׿=!lK7H]~lܸСFs7駟J$sb8@Ag֭cwލd҉J!ؚn@p9[7(ɰ{nt,&4 ԏwM ޿~)~zv0Ԥ.P?-\r%jjjN@ uufԔwv/5k֠o߾!d0!\7H]u) cϞ=2e 7HLMwAVV۷$ k׮e]]O9pssCZZwe](<x,$''#??YYYZbΜ9ؿ?zzZ+Wb4hdOI7Ԃ1}!Ͼ #^҂:_S͠F>On ,AQQrssBJy,}Mۃˊp}_lNPwtS sPZp`YU"mP֢O<A.]еkWHUO0~5LnCectٷ<O>ӧOQ[[Ǐ ϰ=zN:cGCa-zu Y͛7#)) Of]JgpnfI.ǺFNEoG \ƺ `!DG( !F!H5 ABQBDB"jQ$ !D( !F!H5 AUɘ=;�ryN7Ri|}d`r ׇ/Kq؄eo2FԸQffz||IbPnO Qpwl>&hDGS6קT*}f�hshͺ \lL.4U_n9,JpqlܸA.5K۪J%Μ9oo_>�D>}lPTT/KMM֭a˖H7.ABQm6޾!Z$Hzfmɩ?lĚ5K̚%1L+&G ~?�`Ѣ* Kpks0{v�ҥsP>22LeHֻl4bc6sS zMssvpu@JOP*H__/Hq�~G/tDDl߳|&-RBXZ(J&cժ(,iMTvRD;`jj2bca޼%*C#? 2$$0sf00+7븹ybY*0 2ƞCZZ2֢4g/*6n!2?Xl\\ 6d㆘yQaSTTKHH!:(FLLtǎpq9{6U�Ǟ=ظq;dBD&&C" $d-||=kk[DGEB ~~\5--(ZZ�HL"=?m60 SX&KRyxx{ w},YlDSΆUoܸ͘<<[g!6vڎxz``~Yk״!++y*# '93iim eRkbTe ٺ ԩyyBII1R;x 9D)-[y`ժwwO(eHKKFff:bc5z]P###RDDlj�<xP[[`2uF #2Y?naw۽< �NHKKFMRk D!Y`P 3gc WM*s&8)J͓\\4{~y :w1& &'L@FF .\HO[(**PLVVי*di;j-n5 @]e(CE;;Gdf#7wwagn݌<'OLe(,nj󑑑u>s{T&SSU|Doo_ D"ǰF&f@T޾\/\]=T(JDXE7e W̙xtA!(uȱ8s8mۀ՟\& J?*jB~^V[7?n bѼ,?ɰsTFM@U U.�`mm !!k}fyz?7:y~y[c>}*n~@,Lua+Qc0x|=6"z}E؏vV\wСCKip{TBQx :uĺ ( !:Ct֍uj w˽ DԪѣGeE !D`bbº ( !:T*ѽ{weE!H) !V]]M!Hj ( !:SPPw[+++֥E!Hљiiiɺ( !:SRR:ABHݻwCPyPyoH`j.Akʊ.聢X?۷o�lmmYBҦ+r2*Q|ZWUUlcc/gw!/kCWˡˠZ\.G¾Bk%&~ܲ^z}O5ܾ}[!Hsͥ$SJJ �͍u)2lxO.҄k׮�<=}� >}<d]! ׯ_ `ب<V(K"4P]]T 6u)-2,//g]!L�1bRZdp!hjjrkF gϢW^`]J .Ύwnn.r!( >}o&R4b!XH̵݄a�[KшAtTUU._}ƌ޽{.E#d%B�$%%`@@CO>=z4866uI�_}zꅗ_~u)37x+Wp %"j'OįE.U 6ǏSSS7|ú$BD?)S.U 6`ҤI*B뫯BYYBCCYjSߚ5kT.Jѽk׮ȑ#5kȺVP[[[˺x"/_?>|8vź,BD޽{xw`ccu9mbН �+6mg]!FOT"$$;vė_~ɺ63׏۷.n:dggonݺʲ`K#(ٳXbA\$9F�0p@رCeӧ1k,.k.ڵ &MYn`,]Tӽ{֭[1db6oތ'N`ʔ)Xv-rB�hѢFy.SYY/HJJ‚ `%iQ �ܽ{(((PY>p@| !BKݻk.IfN!{{{ݻ PYiӦaǎP*$D~G̚5 O>šC.�#니-Ʋe0a%"(xxyyoʷ(B�~gYEEE2dV\INA>3cѢE={6tJ4!�UUU|W^%KhR_|˺,Urrsse?iy???,\P��uܱcJJJGc]ވ29?#v؁&װ`8;;._edffbذaXf YWAΉ'|!�( ())_~#/_W^yuYLPWMM >{uƌw}Ce].!m۷GPy.) ***pa>|M3x`̞=[քSjلhKUU:SNł `eeź4(ըѣGq4=f̘)S@"<x��֭[z9p�݋2XhA_J(5p18p�rMMM1ydL6MʧN† mEEEaРAw =zFII |||GѼv([… ovQF!((cƌx3f͛7JKKرcky?B nܸ={… jױG`` aaavwCCAHZ#//{ʼn'��o&̙֥ `;8y#@)6o 蹭[Gze$wU9r.] z-̚5 zb]Rx|wjO}⭷ɓ`n6@)IC[nn.,,,0}t055e]Բׯȑ#xbM8 @dddۤ $@ݐȑ#GEEyiUD!#ñcpI{{b[3g ..2 ]vkSUBPΟ?cǎիN@@�BCCYуt<y׿PQQ{{{[2e YgT((??=N8BѦmP2ɓu�`2e Fɺ<E!owV\zɓ'�pttD`` &MD_kӃά 6 �9r q'N >>ڵ+o:BSN{6lBYXѐRĹs_уuDaZ:75}a'Nٳ9&N@<3=/mz]zz:=nکH{{{ i| Q‹/XBeZҺ+,mH:6} \.(J<~XtݻwGǎF{iT[[jt;wf)/~熚a?di umԡ0f2i/Kڿ#F!D( !F!H5 ABQBDB"jQ$ !D( !F!H5 ABs0{v�RSEbDPГH ƍannD"aR7#1Q � .uz …DGEB GK0 @>ɘ<y  CB Ni>DXԱǏ#%'x{ɩ?�ɩ?obxlã/̺4zRTT�R䰳 �\5k``Ȥ8<-["ԟ_ w1}ٲu 4�45s(eX>2kk[vn7UuA?ƞ={7g?hkٳpuhq݆nϚ6~D=XΝD)B.i΅ -[[?\'EJOP*�B̙93NNiXr 77O,^<kNl>xyBB pq8q&&= CxxbcA*�~{(DDls . tPfgGl9}ҒZz_�(-={"qv}�KHHaiBQdc<jS۞93ZْQꁻ'�a�_`?*ȑcae7n�F!##�QRRݠT*qq,[Neh6ulmhǏF-t >@];wظeFD"0ryRSeX317yKTϴ̛߮� A~~�ʕ� ֶ_#JJ1c|~޾*5ْpXOcx3ZfIA�PΞK %sry22R(mХdZPeYP^{F2<s-Q[9J%RR~Nwk?o HЧ Pb@!gX3Y7nɩ?bb"NNH$bϞHU+CUpK_09.�kqrχ7n59WՕn$slvWXlł [ʪ7?瘸=nY P 9bժpw O 9p^׺mD&zaa5wn# Ti-ߕwT:aHL"++CzNJEE-?˟PT2ay2~2\xÇV9\?X ?օAT*#9sQ՛AAsAÇ}55 R</+--iުU U~uϞ矿p!)0!@gw`9!ر�?4c|YSΝ;n &]ȑcq玼iªU ūuS!<y ?5k ++ܝ r8 >OlZZ|]uwKsWoǰF|z7n!&?˟X۠)ke6Y3u)i34ץ{\,Aw jp܉GPR.�4&:&�j_9# AS !F!H5 ABQBDB"jQ$ !D( !FiZ�9i Ee5ޯ2B :t�\z,_qŠiNӗBP!DhN"jQ$ !D( !F!Hzs_$Z����IENDB`���������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/EditingHistory+Links.png����������������������������������������0000664�0000000�0000000�00000101210�14332737457�0024114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��J�����t5���sRGB����gAMA�� a��� pHYs����od��IDATx^ |[y'h\6Hk!m,Qb[##;Gɤ4us[Oo4I׸[6i6m&I:$McMYlHk)EF" qvsp�g{y7px^6KDDDD W~NlsYwB(90Q""""r`DDDDDȁ%""""&JDDDDL(9D77,-tϾ-5'Qڱ۟|3߷a[v<VT^S6>7/Ng?V<w~ͭ'Jk[ޏDRpD>&c[ѷ?x+4/t81l-ޑFK]-wގrqzs?'53,f_\vݷ*m%}D"""'Jvy|kR-rgySWped Ϫ5JWaT?z*޼]$hῼsy YӍAsN^yg*zx1ǁlCo}c##}*!i}07} kԑq|<DDDDsk(]׎gB ٟSEDDD*&'nyN|f)޻v~~~gώbH-|feAAj|m+.Q;~7޵ w5Tz㓧oF}m o3ګfBPנ kF 7mHokO,^# xehO\`͎UHuÛ>a?BK8fqNR5^8yOwW+p\R6޵>>'JadCqO_[{=H܌ <գWۆOǚX-ZlHM;lWo=óG݄=q|.<_h`R2kEbu/>@=z.| HՙU/{W0&G(D]ǟ7sP'*՗|C" v|=ipc7&s_~t/z+KjT-{nMY5_ď0Ŀ5v||oY~vA񧏫g^k xqPҭ݈WG?y"q<Q )w;Ase+N:e~I-"3(mh]-~؎;5k߲4Ao7ž5 RkQ)W�8pO5X5H]-2kP2e?sXn|E=pLѲY?dF{+64jԇPHҶM'>Iui<5mC]Z2Ȋq*zϊ_Ƴ*LZ;0vӑ-LeO<xpI{.wL:6\Mԛޭ1B؄[5g2>'@.~Tʖ@�.ĬV/߉ή.hN+d5_ՏUGe SxLB  wRC'""QD7&ɳx ՑJ}WJ9!7K=Ȟ74RU \'d'ZGqaO|M.|EJd7<YTzN$w,#8{iZk4q#"Eg28z~20x>A$vЊF` ͊WNǟ<j[u/msgQ.I5aw=wע$݈h@ǥ,ΚhIc{nPQ<?hNşY2"YH*q?j֙}GOMnY݆wm|_4M=p Ow6cՉЄywk&ϼxߏ5ߪS}RwWqѧ:"@7 cxI=Px^Nn?uHM0~ԓD3(vn9>"-L#FnnGH R=xj9U:2wo]BvMHGqw.obj<)gNs0\""UDJUd/ц-xm:sYY߶iAH=P][ú/\QV/}OyPF}j?^=nӲ~|oo}~crBtZT&:} &' 8Ջ] g;qtwm݂sJ~wظ |&<wG"""eO<oy\=TG6Z,R7/7-+W]w:z_—ea:=`6{[3qquhI$м ׇ܎oXM Ѐ[_&_7ڀl?6<ǟ #^sxl}Rmd=N⫝Cꗥ?Vyrd-\]ʫWp"3r<J[&TU[MM5VoPs9(n:#*TɹXm H]ۜƻ܅6,SpKJlIW'V_%WkfkZnŷUGٚUmi׈+_?_>J02/2 -x˱ n+/A2mƚ{VbDb7!\zJ_8'OM'""_[f)^SGٌl7ïg e>3/5l;^8䗈ha'daͭ$Ixylihc"9pi3k!$""Z(ũBs\t+ޒwٹt*<5=KlhЛS=yfom.'5:񵯾%c&ZД|毘(S%"""ZR8G (90Q""""r`DDDDDȁ%""""&JDDDDph)/sFDDDD A) ވ(90Q""""r`DDDDDȁ%""""&JDDDDL(90Q""""r`DDDDD3vgaܛwbh18 o_6KD9Qzy<{,Gǿ=M߷vԍEY.�z7%yK>-z]ӃfqDvakxw^4+8>v7iwD) O/7D5Q=u@Sv=#R[V<;z/YosrDE0\-u݂97{%Ա{'вR?. ~Txh xG2a|3JO="R11>qsxFTd/9 ޳}GWN%mԉHi7'+oğUVvۄ߹=GO;Gu`-76bi3qq ݔ/lϝo˛_yO~v\wz 4hoK3m7׎]ij_I듢ڨď[߸W.'w>5mط{ e1۳Wj޾9u#r[Sb/-;z8}`ԱҸxMo7c8ُ:^b[VFMqcvʛz>ZWc2a(s =/ou:MףEP/5cbv<VcHzubKkAϏo{v?=9҆QX1?f_)  ɷW!Y?XoMIO:pb}Mr:^Z9t ^ITuk񄺦-ORcPY%55<.yVĆZ =.~o7ybsx/O57M }\ezj<k t] _}| gтUJ~Sc[׎yBˌc,Yg&0;cu5h^QT"M؍Z=a'7܆{6*ˇ>cpt>uμaXށ:>umk/ux݄?ygVMD%{XW�UV`C|%قb?ԄW)?{iEo!|옙te'j>�j߿Fơ U$IV$߸7ܩuC!r~rIͼg7ޢ*xܧ_;5zG݂m{3)>Bڬ'sb=Q =|";mrj/OȴKOV7޾C?QַgO`6>ޕ؝\ k ggޛVhҎ5h)|d .QL& ?&Hއ_>UN+e_V-8wlJ)qm�g ѕ[{Mc:jWO5@ }q(cVZd$dFQ4^-kR6z-|jW~|MpYvM\$\-:s:쓽]{6`3G?uO<lzF_Mo.#-,IDa;­?֧+w`<0՛CsrXW <%g&lOWۀRU?Do]oωWijď= Uh)&v0و܂߸WXj dQa]=z›nCJn ے~sصRo[[:W.*_-XY]-<11Qo oX]lnH/+Mުr!<dju-Ab~mrΜǧ1EJꆵxD_:'+ q>'q_joI#885\{g{;~/xMD[I߾g_?+޶7" b·J,jH5R6TZ>lo5ؔRa`wM_Cx5]ϝAo%j߾kGq4%hJC6p{/d->_9km%׺4~G\Cz'SNQFԹM`ѾrD}ֈDolRv_PWݛoY&72$J8:ٛ[JZ]9"xr $pL$,v ] N󌶥a#HZ82ɣ;][ <xIT* ˬ*4]5iq7{Oӿm=ӓ;0mfjJLNDl1#9'߲͗|ћMM57WL3pS﷼xM**z[_݋ '*1uDwy_zWlSFPn nAxϱoM2ŮFĶM :޳FZmMV]M",wORd*4cSJ9(p#dDlYOx Kd# 4vEXEsՓe{Ҽ}9qZfTGn;5wչJunb$m zS[_|%szT$W&l6)* ~?;<$z ᄨEW<^m)/||m8w׊IUR .ֿ̈pԻJC-})8Ofd&dh�;U55kq)** 8zu 8WVoqjƲIb۶SÑ}/+0۲ey;.t+^HGtnk^zO^ݪ_WW|CbfkCc&+Iwܱ)Y#,oXOl'빒gedx0<cnz|@OZpUb[8\m3xSɮ,uoڊ? $y9D4#(Vwq(l29ad]*$Put s" bl +o] z MQc%(v%$٭tzHZoh< vt{6g^с  1|ιhVBPI";r?s615uIKq)M{k %eO07|>{B쏸xW_&*$VK_Sxu1g9?yޖqU:x0y:*NXz/ Ka}8<% _Q|s?z oR|X8cSJ9ۧL/rY ?Tl35}!$Bח;!Vtyk{uhVe[954v?ۋF<$üqex< !ޯWl_<nW^Éf-jK~?%ҕx›}ޱ^<^Hfö8_sV76j?a;HH:8P pkGQ]-*:= 7z=H;k? 7޶57p'7Az_}ožoȹSc/k=hY5y/`P 6Le9D>>PamxDTHx5JQv\mǧ̾}~/O ! |c]MzIE% e/_#:OGؤ*䚭wo'긾e{MůW5G2fjğbr=6> v^weq*~L_1݀x(9}I\_O�O6o_bWtytP=Ya>a}anxrW̹-pխ؉/T/o1*^ {oKi>>YLo(-ʁSxlx"Z�$[Xo%] |gyV߃g&_`˿ݎy)s�e]%I48ߋHhpCBDD%c4N<{;CAhv-qF|JCo,Qi8FDDDK ވʀ%""""&JDDDD32$N>a|-7eؒNaYUq_c| ZfӜNAk]F@Ahes*@4泲'J'2f�$ZRd_xDKKa>+{tڈGDKIpOc| Zz Y%v-MŔ}g{~덈ȁ%""""&JDDDDL(9O|sHIٌfӋ}f!=B'^ <Z<9-28tx3J[c^4K@sHƮкZݶ5KY~>tu1.*r;W3vڗQolŦk\"YU`FlWsũc"s/Z!|< s]EۇTzXreX,s g?Wlm5Wg #9)s2^ }=\^|߸mc_l+⽔mR\q>{DtGq ņ6¤$'S^\8p쒸LyGS:QHeq<`"3Z"# ^ 1'3f=u{O@! x~O8ωEڜwuhO qWY"n8xI=mo#pt/zӲkK#fŸĦu5<x4hwk{f +@ʯىuJ&U@RnU.&pe&QBe\\E{xNcާ\e0 mʣ=TӱBQW_kƱM+n 9fQ\ W]Tpu^9KT! J}<(N(^AMoL*, 3C6䎃 t*x9 dс5sD%і�FEQ2^7Ķu**SK\)zkl, {[{DWdFؚwmSX >\WN\_&F 'yDzav֌ίW5-|.U^$c7V]m$[p|m \ۑJ_UqD,:.(SsxQrX$$"jnSh_)'qmJd#kb_Z]lg&z/6M=JihK!_c<.>[y àxsף^YPrk\ %mEwXuA-26uzVD]v j%֌ȮGUR罗ݳ+\lZ7>r؍C'CZ淮r)j1YŠ^Wbɞ'L lbGqI@lnkr+MyQ/s,{ \ q[NLrq,I,)$TF\ʕsy!o]d+SqD|N9m߸\H Ƅ 쓈kh7t̲8QI1 ڋUɏ=.29 $T$'벹,oSLƧL:~|7T vQ48Ҟ:gkn} ýOӜ%JɖtleNE';QDI^';1j \.Tkpk24+rh,fAf,sbY}؆Q;S7 ۵/ 0{}PQ![-U(X\ R|tH۬ĨuUY<8lHx)fdK6гy=w>ݢP9)Dne 6%vL$WYRram72dGΧʘXvuknz+q "ϫ9`|*2 \1HTcU=:va*Y#15ܒzMɀMЉ_{BɃ'ۍeN2A6j 6iǥ2WY'WǸ>+3148(EdAY cG-"[oǻdUEh,Z<<պ8 b<uwaYžxݓ +s/TTcz Zwdo_0n1 ZֳHw-R-hA5Si^qۯT9= 1J-Vx\2_s!:WBMqݖtʦ%szB}pȆN7_OŇ|gHdV3=oe<s ulO_Ykt.6쓓1n ʔ1=sTJOB5o%.XYeA0\L0a@g*35t7()t!(>eRU  @Ma.Shlu{EY'-[kd,U%9~{h~ReSbyZ5eY'r˽ <D cGAqg5pld:10M4y,T˸]^0̤d ߰P̝1戫Jl <L\7W k그Z s~gBkџ'+=T'hBO)FW9T}3dd]WOgZ69jt VQ0Y1 U60} 6ؓfn&Le~}+vA zcT'Y%/z81DOr 8d9?g&[P[Lcvzr74g),.GYN&k$byJ{UC[.z^Tϐ9urrP 3rzl٧a98TQ,V.K^JYWݻްCnMaqZWl`o=Txgs*!A!U}kR;17FUJ=oMJNrw]Ud 0"DAyx(MŔ=Iqe\WfiD%sfP6s͏*\=+ p&z,lg=Jk՝=5G STXNDV^Y#-'Fko9Jωb`>u?mWx) %ț<5o ;cc5$ͷOq߹M4m]7sݻ$$vT09*EڶL@s" ŀzҵrXKM6ϩޕ:LYvFC}* *?zK'(4/a LC7uГXc[})E<Y~NAaBm/9 |E9ʐB;_s3sK𶞿T(Z iJd2~JR8˽5IÓYM#h#_[//$3ZټhoȄP(6̶T49U;.O5\ ,&jS^5M%79&y%@l\|ae0QZ d׻ߵ^4v:iiGs,Nu} *`d|Q~f^&Yf ވ( ވ!&JDDDDL(9=QdES^˾-j="ZJZ }0=Q;B"%ݍhi)66geOUU#D,kTe0'3$Q0Q""""r`DDDDDȁ%""""&JDDDD3;J&&q!cdyr/Ŗtc| ZfӜ _{2: D,㝃Te0=Q:0 ђ"fɍhi)66geO_1h)5bb|VDDKS1ehYz#"""r`DDDDDȁ%""""&JDDDDe&{+%<}z;w6<$etcٴD-n[^^>kI"S7B~FiklsG9tWcWKh݈sSyQ"Sf[C~\!pup?c)OܺS$8ʉMρ! {_l[ۙũc:ytmu<׆!4ʰX _ vkp+P: 9Zt/. o6Y?'Z̺`X{c~{ mNII\'OU";#2c{w쒸l*dq<ַ`�"3Z"#^/nIQi˂'S?sbuO6CxLE'q۔Ͻn1)k\$ﶷ8xiYɵ%Wz3MbӺttuy<nؿ&s8Tb>8~�)2f'BU(1DWM@ww2$*PkwomsS2^NH/m#ޣӻNu?_ω+n 9fQ\ W]Tii .s(dCy$GLU$R8]$N=KC̐rA:xGȢ5hk6;87EAb[:YknEЈ% rՔF{=56fu==K+ lͻ),n"SkI1(]S;imޱlX5#82y~{FTNmIj8+]-UB0ݭh6KdA8Ԋk.[J(J_z] GĂ:7qєW "!V'vd@Jy=kkUB$Y+N?'O̺SR;+ۅ*5ɘ; 7w=Jz%W}d0> lM|B9yIdQ8K]Prˆ̼Ͳ~]"QBZ5#zye= >vPVy<a S"4aVX^,d d-VpovيրfWhim>k?1dE@ܶGˆpR5KJ<lT3r\?e[W.">TtQx!_[w[7lr<1u$⚿/3> ,EFtUe!FUcL1n(,$\l59*Ӳ)isqFYwqХ=Jd㤾fא@z<8YlI+SbXê`1ؖސ(ą$88rJd8i M`#Zf۶Wdl36zݙtZEm؀uۆ`=ӏ>CCvWh;ŢZ:`. ~>:PfpD$v[ʺm,tnQ zofqLMZ܍M y{/y-'E&P'n yɭ=ɕj8o}%2mJ2dGΧʘXvuݩ^gJSu^e̱UVuOCs$*\1;U"QFb)j%Gٛ?/>^˿{OD{d9xڨ3۔_s"n-q31N=JQ1Y=tV摽1jȼ֛nWuPhψ͘y,kMl5u/tUޅzlXCZ$p2/PD t17!<b4g0R-hЂ1};jNECF_[&P(_}zE#l:(6_gTȲ)miPIWlZ O^"n <gʬ'0#w S='dɞֵgz&4x球Nb>q;!t2eLӷPDlk]_[\jbfɏI<B5@ ?UtJ'ho/D^/BdQV}쥬X A"\ʷ+6 3Ox[7,U%9!o*94sIMًk9Dey:/a`a%j; R;xgc#{БoceܮUwsfRmCm\ O7G\UoMaa=J n-.pL"]~T׳u!3aJ/8]&o1ʿFP_ʺu�U$6Y ^?=*ZQ|`8צ0U60} 6S fn&QoqѯoN;<aW_|*D E'�Or 8d9?g&[xMrcvyC2Cs"1%=,?ϋPA"&-;U ZcjhEo?&!s$=iW-wP}sC+cweև5$j^G@RF,Zipޓ$/y)e]Iwz"*ldgR6ůC7lފ Df l09^ZLϐ*o5)[ŝa[f>A9Հ5d2J Ih"ѠS<<&GDbFL+㺢6ǖϙAΉ7Nc1<nڛ[NG)U.jVgUnyJk՝ޚ\ڣWnvq{]fݎK!,(>'z^ ^ɗ) %ț<5o ;c%j8Ho7liSs N&IV6-ﲒӹќṵY'W5!Z\YEzP$�mT?'=bi=Z�5*/e#+5:?7Ħuzzp ħmXaVXu%<%i⦎z'*V_Jc;.SP0.I6iFSsCqfnzRDj1_)) KD,& OmoB!=Z_)(ז IL/V6/52+" m27MZL|][qikhsIT.a-P/z2GM]c7cS?{qc@Ȯwk@yarE.<k<,Nu} *`d|Q~f^&Yf ވ( ވ!&JDDDDL(9=QdES^˾-j="ZJZ }0=Q;B"%ݍhi)66geOUU#D,kTe0'3$Q0Q""""r`DDDDDȁ%""""&JDDDD3;J&&q!cdyr/Ŗtc| ZR9%etd9Y;2/~!DG*{t"3a@%E̒Sl_ʞ(6bR;<j1>-NŔӉb>ⴘ6FDDDDȁ%""""&JDDDDL'L>j/{su5v~ OӋ}h6-YXdjXA(c{:MbN'e>=.*r;Wma11#YU`Vlj/U6ƭsũc:ytU#bcR<}H),p2,k:<tuq]_#h@+?Otfw˭]V(xc\E/sT's'L".UY58(@E޽Q<=7 r߱K]D # !nEfeaDF^vcOfzRSGq'hZf 3#s۔/vݩ\î W(qxӽ5OJ-1Pқ nՠssY͹B)dV O:<_Af*M&d.XDC2W~UIk }s7)ʲLH6 xLbɆ=QǦ-QP\ $|R*wK$J-$ZuK-.:{q]ذ;obus!4䎃 t*x9 dy>DNhKU��PtȖMZ'kͭh12]Z2i]ccfY}Z/޳$";0քyMaz G%Bآ$׋L5@ۼc)fGfOoV:RGL ctITJvzvn,I*$RIqxl)9qe<)ӫkO\DN*<1qSo-vx P2q3pIHDJ"?7=5UyqM&m<e-8n.Ar,-,ٕM]`'/[/ Ǿ2%lȌ,Z{j͈~{Pghi `>vPV,ZmŠ^WdϓYVraAimwvjm Xn}I^?1/n5eZpO^wi[(Mrq,#Zscg.ʹ<vYː\2E|ȕ8BNo\Tx.$cI5_4g| :fY(餫D"F\cK)u@g qgPgud>xN٫,Au-漤2Y%T͋DIpyva[02X%yjl81pRigF<4"- 3F=|P؆Q YN{yc-2ήuۆ`=ou yvcGUxd Bj44 v&eGDf%F XѐQ zo斩fiZs7R6ɖl`@a{a'):Ŋ*[OZO8{fGoHwA(tOl4^ˮ.qT3q%.Py1G\,,VYeS<=\1HTpWo{HԬa`|r c'$Px/y!Z(-_'+{|e: s qj,O}`%ΏOBP2iPCg^CZAK*܊PrZz}w-s(� {hNcHތ'!bּx2ꮵp5ΡP)u]3rIW/Ep/Xsss\-Fz nu+.}vbAvjGà:hkc WfuvZ6Y%Bu&L,!@kJxqK9Sf=cU3]c@Va6s?|ܼgrT\Ͷir>dZQxR @4 j?TZdnnjT!T'aӥhn%ٕi& ͪ2y+ť&V,x�yυzkl x We Zu=x-FIv`/e]ŪM@T~Co͈Bd_wNa?p{o ~d[@21d}XT T^zRNR<{WU`aE5=5bGAqgg5_H;كj)2^SNyeG΍|Dy91P,9oEYUOi[=yA:KE'2w'B[\kӭQުY~5Ӭnmt7.[&-ntl{@շf+I*Mkt2oLgN7n$Qy&[nǨ$;P_;J_=θ.+$w/X~brR Z)\ VUs璜< %h/us(֑KP"@3lT%h}S ⫓9z#7mzTϑ ]ܭ\ ?#]Է>9'QR<26eqntW}~p> 7+6Cubo!mSXs~ P\kꭘ!2'TbZsULϐ*o5)[ŝԛT' JχѢcGp`LPeB.BյJ<2[~>gd`}7un&SƇT9@xĻonIph V$Y8~޶*Ī;]ź&׽~@ZT}Խ+]K۬ۑBsSr}57V2*ڭO|>7C)jw:au̼J Cm-m7"=1$JچucaYIAvn@)1ISV ҿ$Py?*EL@s:bt ]u' $6sU >7@+%HVܬ%<3SǔG,฿](t;d,P⦠tbT٨vp}5Np9en541V?a)ڃhޚ$I` iܯ=Z_(׊VȾdkeݿr=ly?_榒E"1oťr鋍hpKol<%1_ p\ebEX!)s6Di]~z%w4ϥAΫE4OEN0TQCFg'/|"kO4,?q荈ʆCoDKވ&JDDDDL(9=QdES\˾g-j="ZJZ }ũP=Q;B"%ݍh)/TeOUU#D,kTeţP'3$Q0Q""""r`DDDDDȁ%""""&JDDDD3;J&&q!cdyqۗbK:Uñ,T ͌9%XetdXY;)i!,DUj҉ T-Y>_0Kn,D32HCF="zG=7eSLb)2aZ87""""&JDDDDL(90Q""""r`DDDDP?aW{̽x3ߟ譭,XzO&<>i @ oNGy :b_~B`.N`@s#hٌf#2Ϡ>x<_:nY:և˫W2f):f1_3r#Y S1wAqc){rZR-ӡq{XY/νUU$v_1e(@9 B.е+R6?lo([_~n?)Ti0)D�Y58 ıW xvgM&d1``D%dP)-~ 3Y%1bFZ?>3~1\g46m!?F^glsT&N`Lgw$ik8:D0{`Ȣ#-؃AkhVNls@(ʟY TaŖibPX2%sd"w`T$<f˟x@}(_A/ '{&ئ@6Qg2f 5شeIDPZl \+sTT !4.L`wkAj73i~s (J\*zklL-5h Y 쬿&\乖aEe<Mms-ˆ$ge^'B2\.IJ dB\>m1ۜ=ӯVvbG"lM"+}nnE&=h_QdI˟ }2A2JeuZ2VL|Nr}+zb˟j$T}\[lêlt�[Wy寧Krb$׋ 5ZDl $OA&[YV䱯6Vy;G]5`Y7.Z*OT[K"ϝZus.+"^}'M-}zqHyO^"6^uU0ϙϰCPO � Ժެ@<O&g[ɂDsmK`lEo<;Q 9*,χw]2 H5hȓVЎ"XGTr'DJHJOh>|Rz덳Ƒe(cr!˓]FttgIQvCൡWpY\W^/TcWc)NŕT??�x0>K~tyZ<ؘ SBbF üHTZ\PH:QE#*~,dVci|X%W_[eaWUe}NvWڦnmvWxm\w-wkU s>PCiρ|P@Dldb`2smk>E JZu[u>f-\ IPv)JbGܾpO9n5*P3IxCrq!2o2&@%]c6!7Z=B Cʟu:W>l :[(S'˞;Tv**0?>.VN5'D{UŶ]P"e:}RV% jzhDI%Uju* n4 ^JE.0V [9&}W�kͱ]pa6CUф B΁&*s2Vs=-:|t0[`Su#s}=EΊPÚN|r 8*PO)yL$u-|\hWVͷcd*CaqO-ɕk=޾s"?!'(0s%bHs)R89bk,-"Kc=ԪF|Tdz<iDI\ oaAT7 [~r{hMM:1հ�KK!ZX%${ް1Y" ~M+g56$T>G%^ٛ6Z 8+rEuDֿEϟ [ʺ?'EM12κI'Q5LV{0uP9VomBbʟJfDz1C PJY7!${C"Omz>JTŹs[M GR] fSu˖3 Z)еnc�nSin{t1d<f >P$I c9dƹ.Q|馒*j'g{>(wc%9Iߓ"DV3JoՈvL>=4bO  :>\[o3PLNxsTZY?oeJIrP I 1ClOL=.bziqDIT@.M kMb1II`MRM3qӛ@({ &}WAUf#t $U2 CFbYvc ŝo \uORoq!}lZlX"7Dx=3z"ՓN0M&6Uj ê q<x\$W1=)Ɣ{$CsNyGy׈0׾M 8w{f\O}+71WIb}˟o%j>W_Rʪ07/LD)אW?^}؟oP(]cF1h|'~s," Gʞs8Zva w6A~{W,x8)*VԩqUa[sRE :.v1p]ոV*RpqϩϿoj^Cb}`)5Iy5|cZ+Wnkۦ(^׫DnS)5:S~0^{nWs:Z 4vl ?�#x 0'pUT /}Ǧux�[<veXezZb]2i]|曱F,~m:^ͿD3sn;n7DU, k =h_sk~&0*{8>w`ǼQw0&S7nu|Ʊ:}#ܕ_zan\}XIw&"f]yFò.Lޤk&4\s#ZLz?u*Xf)_X纯o9jjBIH5ԏ^űa9_6.XSRY딥*C!_2%mg1N﹌8W8z\G&dpꆷ?u|?Hp&yҋͲlaUz[Fx$玏:byO[2H3f~<2Z+`^tl^WVrPY\?:~TjF~+_ '!,/4/&J ͜K qJ9bEXe&+nBW`"m1P5<ަ:TG5e=h!b4WoLw@b"ڼ+21?G4Q}tdƸũQOg hވ%""""&JDDDDLʞ(V2"),D3k(jYVk|RWYfN1e懲'JwSHT_0'ywcbY&ŖAʞ(-C+pGjYש)i!,DUj?8IDDD4'ʀ%""""&JDDDDL(90Q""""rQ61|v#ͣDT.n_V-T?\rI4R6i(`.s `L4Cdʚ,s\͎R&eONd1@L4+dY{,\ͮb&eO_1h6{n,DI_%vͮb%c[7""""&JDDDDL(90Q""""r`DDDDP?aW{̽ũc}H5IB#X׊M bL7ۧ!=;lߞ^PV p.N`xںẐ{ qω7m k"$vZ鑟}gup\/5Ƽ<fEűOSGЕ;gOiMZ}H?EKo;͢MP(,2&\kʓnLx?P<PBix_cm\#]Z+T6in0²gE2|js V4t2peh]5 $:D6ٚn~(V<+t^d?0**tڽӹ5W+B2}!b:ߧ.x۟ByB6;tT./qL֏#*ІQt~7AZm9b%-* },R:4dK-kБ,"چ$6mӏ{=IRl<P܏3"$Q6F"-Q㙌Y2k]O`wZ(ͺ `oeE0ʷ4Jd' @Hof[Ӣ$*@nVeTzϷ4`w"W'׷q՛\Y#* d-apEpj* de,Vl8*3KπHdaK�y۟.]-@UUW%ɗ=3$q-vT{8aUH@E1\ɕY4[k|>Vi3K.*YHav⹇F6ؼ TL<߅ E'< X.Ŀ m$J6D 4v4ND-Zs(+w;mp<Q\ L>h V1W#[[Z s'{U![mղ1Ne*J_xhYh7 B&[lS7ך$UwWD|l=D0392hZ-kE<&y՘eCv8Z*QO Or|N3$+<UA{tB]E_Ci{'u(|eFW7PUN|lR/ Eq&DYK[cuLσ;h^/BEs ioI-U,jQSnOנ,?~Z(QX+PE]vױv8ح nsR-T28?`7ӤZkV,El@l;~BmŻm>UZ{%*#,퀜KH`kHّtV#8$&'q \xBVԝ;96?92d/� ydo=fhcYd)3G)LnFuD&t Tb]_\342++Aq^ML q,2[_6X\^/c<a+Zm]%ZQVr=t{3@ 򹩄$kW(Mg _Z(Q  9FoQPW]EvW]κ \zH ԧz)rK6}W= Lv:Z-f=jdAЃA۴j&AQGQ `+H0I8\sT'qF[s,[ U8I NפgBa/hyd)e`(HUv &j./5`;bAIS.1ŕ.2+TۧNo1׫tyʈFH=)rQFݭun`gTr%"Di񛳡@g6QAJ LEWhجBZnV +L&{D)c|>/@Pޒ@ЖF ˛@*2-p% E)&[騖/<5%ZxdF279qתm r '%\onaoD JAQYr|;iA%F&Tl^L)R+jMRMlkD=^b^Zp$*''6[7~XEb27ekPמ Rkx{]-7Eu5f}10gDIc|=?W8*x:Ċn{;`+3$pB T9EvC[sl* y7M\Fp(ܓ"+٧$5,L$} za3}U ټ3a_cVżQ$2F͋)4l) Èdz{D#d`h0r>VDMH7 0zP%-zs7TɎ!vZ邦LwN#9* h*~WA^U{XK'ޅ P;;.jޅ) hӦZAS%^Tj~`ZJKyY~Г0XSrU=V%,吅^X yud]e)%>=wG$Vzrs ՐJ&HWJeٷ8A%<)YSZ׹XeV&D{q}FAdo~KQU&q=EPCV?3 ߧRhy^t#FqN=ZX&QdMk#-3|טϤ'H$*F.:'N.r8B0+Ԫ—k-J8(ZWleNu 'QjM\CRCOV=8 W9`u쮖7M&T`'&a0SVţ*9[:j[L%::Fl 3kxΧ8~rzE{p~N\ԫdQ`'$nw%rtʬ)gğ]fqWM޷@yCֺQ58Wͦj"QԵ"Uf %{,_., %BVCX>y�#h@!,63d+뗹gp:{̺̖Bί-/& 2w@yEP]ʹ!ݍ?ɠ\wCQC8EM$_TJyJ2[<ye,-;QRR+EQC[ܦ; E%-0Xb9W Ӽf5=̢&7ex,E+g h1YCoD݂z#Z86?q荈 (90Q""""r`DDDDPDl*̱\>šgeYGD.⏀\;b&eONzNȲvwc_Qd$]ŖMʞ(-C+pGjf,[kTYeKQj٤?8IDDD4'ʀ%""""&JDDDDL(90Q""""r`DDDDDȁ%""""덈h)o&JDDDDKވ(90Q""""r`DDDDDȁ%""""&JDDDDL(90Q""""r`DDDDDȁ%""""~/6wn4L_DCoDDDDL(90Q""""r`DDDDDȁ%""""&JDDDDL(90Q""""rXR؞6 DDDDe4'R♏3mEy$k[ޏ>CMxf8QM?Q#7[w{G-u y;g+ɫ|,̀'J*iy_T=ėRϿz KWc׋7qs67q]?6>ao)57s8o7YO~+|>w6?<ho %{+;qYem5W~s_̇߄~l >v{/v.1GDDD(}<7AusB&oe'{~~Rݎ'>9gR~'y y>Q+IjUf[3wm_̌W�8pj xTbՔnW# ϛ I*UR^戈(Q;n&F~܋҄<x{|gL%Zv܋Vo^TgQؼJ<}^q܂L/^1ھuq Q7}_lǃiY(l^&J ilH%jk'ޞ^0>q<znm[ON|螨uKvkWǟ͈$w=p~5<%<8@] 6b0k҃-+LQ3&ڃC黽/v&'r'+DDDD!(mIWUjn eݭT;!~VݫITʖ(5U鷪NDٰozjVA`J'-zyS MIo?Ěw#­mVtqtxM?@DDDR11>qsx^6Kk[񡷶`)*aU\O7㮶:DRrƻv4ᮆJ$t/\6ߎwlټGy,>^l&[Wq+Yp;3)gGoGE<.=<>^|n5-59X*-ˁ;g~щڝxFoRJ4{z#"""Z`(90Q""""r`DDDDDȁ%""""&JDDDDL(90Q""""r`DDDDP-6Q܂RoDDDDp荈ȁ%""""&JDDDDL(90Q""""r`DDDDDȁ%""""[o&&q!cdyhfVބۗbK:eUxVN\74D3kN֛ _{2: 49xM]:,*Iünhh~){t"3\ߋfɍ*xL+k#5xRi\c4=QbW4\V) 4^? FDDDDȁ%""""&JDDDDL*x6\ro]nRf܋×]C)̣JO/Q՜Dyx.<v:[Qg~!{y_ Fok+/AǵJU?:u<<<bGo;f˻e9f[]F)t\7~\.8u=T;k:ﳯئsrxa8kUJ(#81y7sأT8:z̢ћ7D-\ǽ[kǻPh*Y;vI"rҶ%*p<1KF jX?܋^N"6擭VnV i/<NyA&4}8X1ts{B1CopEf[+j, Yfm{b+q-5Uh Th3sJ\_lFY=80TѼ9Ea[TKM_f|ܦ|'q\6B#]! |.C 1,_Y+x{MXne{D~^A_],Av_:3~lkE8 MQ5އkݷjfW9b`�ۯU^ ^cR`>"lh~]VqjYnw/B2oz Ӌ  mW;V5"+':5z?/W3{.8z|U'>1ޱˢkMT?bcQ'>}}װ9'pcpZ7j:pcXa*׀zaP NV𣭹kXÚۭU\?kn*N&P$yCaMh8g{+"*ã}f?'s 1y="2VUؘub~)qF1,\^:q{m81J>{1WBq py9^1%Coso ߲GD^4dADIwnE;U5 t1Zhit ղnyA64= ΁Rh) W Ș7D'ZCxogaዢ1WuﴵU8x:8D[ϻŹ: Es̳gpa/'+dOC+6Onh?D 82ܫs?G4hKY=Yqk&-xNZT*\XtO]/qn,X>1{[=3D6k ڪ,׆( m(.,y϶`o+оR3L w]$׷8zq^P V1hzq b;{<=Ea@q,8E3hYl3DXUP9[RU> aYt @:U#^p 쬿Vث uj JN#>1Ytw84.s7L͝?GnUBݛ:m"1[ fU@~^]ɹ7v ְc#4О7s:%ɀ۾1\.2<!.ܫs9w+Eb$du&aΝGӭ]wNܹq5*r>jTsEeԮ<UnWF&RSj*RXusL84ž A:i,|EQ[)ׅ- j;18.V]Ȟ#+6Y?Nrx4~9WuuiљHLBDt"ZVaˮ1 څ GEZJ ir]^bLu^:9?}8(I'% TCG~ 5 Q:9 VE (K]1V5Qi,JS@TstETr3]v[b;T"gTxUY˧Pu[*cW.[9Dgz=[(-:s(gQP^ϐo˺ݻcɧ=׹@LjYJy3@6б-}Bg.وvLђN9ocrX@r}_wb]CsI c  :O" 4e4,m~!f`솹G'J9>BLh]}LK=L~•JzJ#8Yݵ_9Hn(N^{Z}_7z]G7<*ÍQűX {T˷@P!kh<:7Dzc:fދ_fԐChLP`x$-#rx5k4Y~.\'j6nbn9\>K.l*[^{P\,-0P6Ǩ�ZB뻆λ6Q- Q2<";YTy- vf9U{Xlo[\ܺ'Tϕ?_@P ouB>orT!i={ˉS'f#@cS`]| RIZ5W&c)'݋t9z glA1xN0q?oS*'u/E,RߏB "0TS<u^ '3ۿL%v^&:Jw1OK'k.Vz̽ ܈k41XMbKY˸؇cܗ"ꆃQ>G7iap~46޹,sNCT^\V) i1y7Gh>bDDDDDȁ%""""&JDDDDLʞ(V2WukxL,5NK]kxL+K4wwwc`klnh{RDiYU%j];RHJ^ok'BxTfX旲7"""덈 (90Q""""r`DDDDDȁ%""""k8g12y<J$eؒN̈J0$vY&I3HkXcNDDDWDDfLf</%"""*'J篍{4[zG="""*'Jn}<DDD3z#"""r`DDDDDȁ%""""&JDDDDs(ep9;܋^󈯧W<.;v Y\=)d,~KLs{LpDDD4GmqtE73n-l2 _=;WquK!ߗ,5Co =*YdF+,ϭ"ٜ6K%Cؽ!՚@W�{9Mk64K@ ګͲӷCV/yd/:<}Θ!<q80XWG{o{(,<4z#fR(bf<Nh>I[o2@*`~ũc46!tD;]CNܶHGnX^_  WGwҭrhLwP}=800CiMX>"$̶B5H%RdeO]7N 4Y^P/Mv!Jd_KbӶb&eS׭J{DDDxq,&!jJ^q;0tNwaB$UQ)T X `t\9OR8=!A%$ސu$0ҵyu5扰$@r\Y6O]!<oT;s(!8>t[Ot؟'vk7pyHq&?Hrb <mU_MIDDD4/̓D$!vS<"DzlSx؛4*w롷t [){!a7I kȰAwc|Q11>qsxFTϽI2(f^(GL(90Q""""r`DDDDDȁCJ^ǜhfmYVklis:"""'JwSHTT%iX?GDD4ʞ(-C+pGjf<kԱǜʯ덈h>z#"""*&JDDDDL(90Q""""r`DDDDDȁ%""""&JDDDDL 7"""Ŧؿ(-ez#"""r`DDDDDȁ%""""&JDDDDL"="����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/Gantt-excluded-days-within.png����������������������������������0000664�0000000�0000000�00000233135�14332737457�0025215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��h��u������sRGB����gAMA�� a��� pHYs��t��tfx��IDATx^ `TV%XE'^ b[(l 녠VV-)AP (U ZĊ "%KЪ$V Ul K=Ϲ̜$Iisss}p<["����������Aw����������p���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������HHo*Tԭ٩H|tAAU꺛V|��������hj4pfԨjjM5̮u3p4vhw߱eNE_nu`AU?nyk5וj~:5uMFW��������|?ի]X IFhިQJ0`T)3Y*yb>XEnS_̓l\{��������Йu�wd"Mbgzm#d]X8Uӟad��������:]aK;%-~qC׫v; ڶӝ1x=\k2g-Qdޒ[j%%]OaEBPid}¾q0QC��������8:Y6mp si*ëk[;{cvBfw99*x`CZ@F$w훚��������NmжpoX\5-GhחC";*6���������pht�mt'A-kqcn ����������׹ʝ$x{*^t=/k^w%_ն4uH nLր"MLjy#E:V[!g`ek,K(]7ov]U";v;Y2_NUQ^_w{1,Pmh{{gS eޞ 7U:uŪ {"DR*vZ4Lo=s5ݪnTXyijօT͌Ȳ몬iMvG/Oli!XMكFje s œ̵7"v,Už:qSʖ;Auͱz_&E^{TYyC���������2B9ͬ疈XQ|n(T/v)g̒=J1=< ZB7?} 塒#/4w;Bi#l;l ſJ{B/ ]/:FL mpWa^u C1dRN|)l4O^c|?l~Q(7 -7? KB>&!TfaE >VJ;:o>a)y}`%-avԕZvڭu)e/%~��������]S'AWkii]3kO%8gyG;m9nX=YC.nF<^?S_EwMQw);UCFW'nFB*+ cu4 ("g|(ҀZfGMs_`QKGEx@fH&)rAUxaCx|0X;}|L`uzi'�M9`0zf)g{%4PSFӪVծ*Ƚjcǻ3&SIku|Ë(oҴ98ڪ넕ԁu]'˗ rvVir0z;_2E3ufj%Gp|̛nF WOWMOu7*k[hD���������]6 z凖nܳ64vM4QN䱍=_ }l.MS(pPlxwXjޞОI#ם{5Vn =Ƶ{򺋢4T8bZ>~USWwIzQvlV'_Uޘ)w{Xmm*,j [5ڼmGEm5%jWP] 0%ʵ{u' zO^N U1Puk٤3Ckc CY��������2MAlM4;ʟ .QM3J1_ymjP;TrgPq:-^Qz ,֒*t烏ҲP{ ^/:ڝl&OϬU(YG`,ͺѝ1X~P9(ЬS 1JTYHŃ{rX"Q|j 7-rS׹35DݙMT>~Whw)&;m6*4{Uv:i4Y:Ɲ9>SB\>_B-YT~iI [+UA˹W/z�������i:Ov68b=ha脱MJ8<9Rʽz^b{_,,/5TWEO-*__NǓNhMұIcPNmg(mv }KKiPme]ߔkfIJT| j5Ur;E7"?m25W.RG-U]yiAzuaxYO"LrM>o[=��������1:M6p/<IO7Qb۽hTyj^@W**?`jNp\տ'�<^}Xc3lPC{ڨ= OuZY+Lr.ϝ#UN{UjwzF&۠ 8=]~.kZU? ?RH`jw)')0%lEjEI=��������dNmuY h,0SY�V6hnľ֭[)8rLڽ7q3}ACɺ(_q5)XW524RmoO\JoگWtWt|B˴~ϔڞ h˃&SaVՄ+PN ;4'5p�wrݕ9��������hNmPwR 93_/gD,Ƞ*_qzVA^ {w UyJӡ[*:keY-H nѲG+ၪf?v; TpU6ը]:xJ. ^v6;\i][`W?~���������pt�mS6>NmF|r&+jTo 75<֝U봮miÌvMp_0]Uasj]~+5E#'�hMq{|7^pSa8Ho=ܿ���������shT7xr"9= �؊ v`]oMIuoS968KV{XRKMӴ۬4o*M;[Ꮋ^*0 nk5jκz2;G)rI;ܪNS9l:ڝ��������hA}!24l^f.(r{kьR7[ŖVIUhchOp'-ЮA.gmP>>ҋ|ϵFi`g:BukUڙϽDqwhHuUm;W;)Y2�yrew.�������� :EaK;%垙|S 4F6t#+c PNnd0m ^+ΓljFPuݦijꄼҜ3DJVjÁ>gSUM^ZTmOh7mONǺ"ψ>6lt*?zUZ@A5DaS ��������`t�mP "wz)wQxE~$/2Poy1KhJxY6jjwv7{ם< C ½IM le;ۅ匙in*Mx3ct6[#aT'w&뷵2vkfw&4+\M$ϝ��������hY'6h wRg  xY\\k+͝@q8[;PoжQ`2Mea;^UZ<^�IgiES#q;f*7%<~ &^ˠjVk;۩`+orhJ#AfUkњ>~4~_qg:@%vz~sUJ3_XqV1#C/UIG���������-K�mt'MzNɉ EicԳ&sZ{A<8^acjZlY7iؙݔ7Yeu՚|gE+=YnKkgSΠњ:93&[C&P ע*Ξ.Yyfidv7+ { 5l ]Y֭%׹+(Gs&K6YUMcc}|=Sjr]jʷw00igjleRu_/Zͺ\^7kEy}U7qVf,W΃Mאk=]u׃SFCKUuAa�������� Wfa7;}6.WR͉gG w{V/bZ(?)0C*Zk4XQ)7<Pax nv<y4Œ6*u6>P 4Ky=OG+sVQP*ofOhýJyr-muQuՖ\W{BL@hڿk5tLL^tiSJR*h G/-׾2T/fuͮվmi#RΘ%j~��������L=hպS9q'ɺ@T Zfmc;iAgRi]C6T,Ҕ1y}DJn[:-Ԧ,޲V6WtR1Sb֩^S%1פz)jxw(*4~6W襂 3<]/jKm3>R\;~UmԞWin~GSolU|M3ٿGaSE5۴zY z9C͵^hSKY��������FL֝����������D Z����������"���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������Hn!;lN���������@N���������@W����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������HŝNK[lq���N'[�����dt_)~���{-�����2G bc����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������TUnmln���������AֲwK_7R 9LE7,VՖn ��� "{d8հ˫m[PT^Mn������ 6vHTYkֺVULWѼjz��T2-n uF������mY`@5;B}Q7)7nY���5I;eV@`f]QC<E\eY������8t27@ZoP0Pڵ9"GY;U媼"����(+_wTjٍLpj79������l LeA)*fFQNTu-=@#[ ն5zP]6{hM_ʍˠjze3p'Sm<��R ȳjV6he~;&|VUu9lSplo b)礢ͿחimaWՖȗЦeCֻ9&YgZkm`������D�mWYs5d{6bb LUu6,b+PX[a-Z|bs>jim+klvN���:_|/b=U qNa/LULLഩFXyck`7/&3LSU69{jPY*_W:Ǖ5HӭW(jOU7ը|u>cf����� Zh*hQvFOAFw9b6Xj-eV FVn>lv<=EཪQYuܻN;>vWn7X��@Zk nS"MYn |_JfJ/e&z+4? ?m_[.tήURkpZW/Uq mJ*iUmK}`rFj^d}'.Q%g�����gжIjVV[ TRv8rTIt]jժbU60E˞.Uw6#K9yâ{ֲG V;sm B ��)T[G�S` _FP|[)Zzmn%2϶xؠGIJU2]7VP+ʬ㚦R%*gkZZgWLw0n/bz]ijIOG������(CYe4ګ} *gpsr"z)7/[&] hƈP).pz7"XjO_���t&9CU2\iΐ~mnkTfe8#lRRɏZ^A ?yL~B7'~*e7a+[4厀G ޝP�����Wh{ ֨-Gn��� +CQNK*V^]ѲL�@ZLdTGGsT#[ҝT~YʿTisT(Q~߂�����ZC(VYG޽^ڀY6mSC[j_+`zf~&mB<U8���v|7̹D%VZTMj=>~ jC}8Hd~x=E7:ddRPeRE'> �����Т}m5/O VhEEZAM_>iP͂߿ (*]).Sn7pʕh"nTǁ|m)7-SNMjߨFduiZ52nM`/���t}nx|* LӴ1-nI֎fiiw*f,VmhSGMQ`7_Tx"noZ߫O�����@<U*Wi{U#goW#ﬖ(pS:g"-$һSG].עyg}Rr_Nְ=1j*R%jUv0 ?ŷ.Su���fؚʽuﮭ \}J=zӵy>YvQ{y{] 5e7*p �����D28@kQDSo4 -ԔשJo-WIU=<EUp_igrSr+o$6KT4{غ(} 􍭪W|vLђ꙾��kwC{͚ԖޫU*_Ξ?|^#?6kDchm3U8&?������u L-[h���UgwK�����̑2-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)-dqҖ-[)���twK�����̒:E6o��s|o%�����@H{A q ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@M]*MV(fuEXh:7#>��������ZvЦ2ȅjr���������C����������"hѵ uZw[,���������P!@ Ǧe*cd��������� ZZPag:ϭ4R(VŹr/e-٫m+kp+6ZId}L3*T &<xVhۖ Mt?Y|LS}5e eUL-|{Tiu;K:6 hqx}5Ūy]f bs&mw&^7Yny}g{i5ubպuq3^gk e5.SMiͷb6UNp{ei$oT-{3TՏ:i'e��������C"6oN݆y S,u3i(Іr-Pjt8v'▵ӘgBF]6}[*WMV}nYKk8YKy6|Hh_mi(/^r*+_}uwį{7FƇo^hiz[r_Тz[KC|_ *uֹ5+jʋ%:Ti0��:ց|oKp������z/jвƫ"P]kո/d }QK'Yh[VʙY}o*\QBGj#fr>xzr2-ۦ_Z־>Exn,̡ܲN~`H Օf<lٳR3G\?]V6شX+:E{;8jgOQYb}RYWRrT_}mТQn[@O[_mtI{jJg-\ΥTvS-uyV]XGPF]FTFS ho};TnPq{Z{9:KXK6c)_i [f�������� unQQZ:@,'[2XO(Q+_0!w;y&`V1Z LѲKU/aqZ;LMjj'btqrwN)gz %|̾;C4w>SߔlZ}nue teSGYg\j1\*<_}il^#hf!rݶo2G4m{νdvm <)W(t|Q`{M0kd SUηqT5I2C[y`iЄG���������j? i8=>WyY75q{Ur&{k!w5hM(Tl,Y[<#5i>ܩ$ 3 jtհ,dQ)wo-ذoJ.IrB4SU=[۱s iͰA{߬F 8���������ڶVkH,-[`+G8UuvU]2zd{ܾ}SZ;0O%&Bh׹Ưe $YM]0RYk-s* �����t!{_]klho���h�{qzUߋvOʆե><ǵ1\ƊBxYN CJxTgV>O퀥&oa^ 1 Usq]-Su*7K&fmuڱ'r6sx53qz~Z~LrUk{Jb?WQprj�����_8L'V|W۞/ԱհSmqF2LI9dM_^D'e]`n=ï��~*e]>ES^}ӮͿàWہj{ِ ?4b@&Y7Mהv/P紶d}ໍ?>Q #Tڒ+C;TUe*׺n? IjNWvw.a?oCɫڸٙn^D PaeUbo WmLfwPvMع_~<@#5.|����\jT@?HfSU?UjWiz�quʃ{TFknFɔIiOQجs~q_7Z}ܽ:|Lʑ*w���Yy t=<T*~<Dp8uf=T`"^=,+t{S)؄quaKUld =^8^ DoДQì=x:Ћ5w|sǫN L(+Q9L _8ZG̗YC|Ymw$)*gm9XY"{v˴(QMuMfU|GHPUYzmܪT[78O3MEH_S?�sk#VLjT65���� 7ƅUS|=UUۥiZZC{߷G;jdDJʷҶEHZ}2eZ5\b/q:-%_`_:LWi*|lBoU;n���څwJ~\_� 4uiu;Yf(Նiv/H[<̫w7jɤ<gv9ԧX6Y@9CKT4{H핎 a_UE84hth: -Դ6jWh%7h)c%:rM0}c[cmjmzșmMΤrm|DyyZinXaF5lavրKjٛI8UZ[io9M*UF8>Eϥ`hSl)&�����A.siY]W̲wZmY9 K9#hi3VWtxWbTŭ�o�/6oNz<Th5)5Y`礪 YmνY*-}-��:6[�/ Z&ϽeZ|wQ6ޟ~pih>7 kCC~y*7qKDlg-X44}O!'74)gK,ӊƊB|{<;BKG9su0T֖kb۳5T~[a(ϽXpehk>/ \m=X6_^'u!vT/ Mʱl/?Trкf'!Tj-Ͻ51lr-l-=@%SBK^Ip.�� z-ٻWY?^s1i۽u7*O:����H&<Hהfz+2Umr&^5# g(dߜ񚵼FM}Tt *8 .QY*8{*5ZAgigRˌ8fo${o2eXpyVrV/hhQzMvVh|JʳZe7i#A>Qigelb Qc9G 9)k?GAY#4h;^;-?H}PC]u "4LSiP =W$_��ôi^i"{~.4-aY#-���2Mq}~ד2 bkOhKC?pg];(vz < z`~#t, :nFɔIWf:eu8Om5͛V5>Z:OICcۉuchkCQ`uo/|V텏JywX]V,�@W@Z9:_ءOQP7QҊ )J橹�����5<L鳅F=9{]P)mHc'{'zG:R%=ޝuLk;;RxM˝?fO7ǔFN$ $X4ޖg:Jnng .6'ק@KWTF곗&MU5{Z<D}3[bOj g,ֶef[Z`(��8PhSUi}Xuc#c*kwC7jkRͼ*E�����\z[w&z S88_' Oj;_Pc[7_]FjؙNATn/iRS`qgֱ:X$uMvmS=ql�AF ^5<_cGj@cX|{F: }r4ĝ��h�����֚WjyaLZizzA@Ko^Q' igzP`oJ v h;n IP rn۠DF+bY^=O?Kϡў v+mS_��4A������ilWWP sZj)5Ď8V>^ۀ XuNw6?8^Y+ {zk]vzq uzMZ_LQ3PI W2-z֪Yח x`5ւ6<Rj3 49u\Ru!5nvoun)��tC������k{-7A ;cG.Tgm[_y>t{X&^s%*߮*-t&]4yo(m&9*r[UP;{=sFH 8ƯJCKUv}YkT[f*���i�-������V3e2OmMjXYʿTfgk6H9>^+92mӠ;?;t_rx]פOT߱תm;:O%S+3wS,)m3kXx���Z������U>`z4fBPg3qp֮o2S-W%UM/!cOA5y/PLfze+BVZu zdM{Ɲ?@֪g֪M'SMsnaNOV)5܎kҰrr&+[|w %O9s{iu5ߝ��H7ݬ/A!w:-mٲEt璷qF38CC qQOHQ$B@-:1�LֱˤLk(U~M3G#IXasjkҶS5e s'֩rB=\=^c+dB9CsԸFT)WlS#ʽk6˳͖ +UyU*TtxU)WNضZSVI<о/|HRe,RvxjrM{k50R߭T)NnۮIPUUbJ~TVو^ʹ _Cs"W7_fI(I 5Nw:#(}jxV Chʩe*[m]'vu,+ՆL幹�� Mg7ovfժUo4H.HhDAM- {[*uc��d:r%P(kJByh*JphCT m=,  8J敇6ro -Qa]y6 + wCfcC͖6 ^?p)gh~hbJ%S&ƊB};[C{p 6!Tj-d߶)#JC>vʆjKx(l_hkŴPA?w) 0۰ѴK5iM|-��:te{>3f;Ci;v;zB:"b&@Z#+w3 ��k2"hzf ��p ^P~=}jMuHT[5!u�mK/3��EY\Z`Ò���]ZRJRK'RZ<)sRK'u���kŪvkoٓ4,��@We@';(m����@[5|,UP3i?ȼ{&*gRLbxc��еu�-)}R"ʒH"%,)R"ʒ2#���hTю꥚6)_yU͋5ٙIӴQ[+J��tm]z#tX+7^x}AT3921$f::z$\3jvҠwjW(j5Iuɾݙ6o$5ܱZ‚����O/*Ѣi[!jcT2",��@W3h$ YZ+OY75Q+<BGQO4 &#\F_y@}wdmNT[zN0Xk#UmuH^2W{n̵]vtyoZo^-}uٺ#to]{OiD7hHǭ\睊5I~ڵRnc31MQ_ކdxNilո}y]7������m'P74M4unqz ]^9Q7ʀK= f9s4G g1{`6:9|;|fL+iҜ :Wӡ3Ek41ϝW̉|_c3s�������Avl?EpGyd$z!"V*+_;ߔ3CPFBu yiJOL[< zw=Hrşz:?Z-<Dm) NU:_E/E_DՇg^mZ)Q=ǔS7 U8Ŵɾz unc-mϻ6cηi޵[ǻ2ujyuTmtެ%W6Q}|hn'#_'}ֶ=Di[ Qm+E>^N7Dz2DWoṞ;>]/J߶ڍoj Q21x-Dm)c1s^-]{El2"6LLo=Yn{m-Jqa׭}y򎽕mmA]ۘHףy������APwow6Qڿߤ5w^׉qRN5s^2qN3͑XϮ>':͜瞨O/_kSdq[9 VxeхGx{L,s^N8y0A׸%uiFs\~w*ܹz9\F&F=q/8z 难{nU7}_LOuծu^WSwzb:Z&-9jΨH4?+pk#ӎojmmﴸvnQܹC5z͞u50|;W+kgMǴ{}>[0m򴉹ב^c}^ߧQxB]c~ey$oXm·o oELwuOx{<qzP_i֤j1_3~bitg'ϼ^z;m9o琹l1~v>!aC8������ԡIf7=*fozptҸ2moC:a+Tulisשzk;_:\')Por>u\Gzܞ4\g;ylxl6T{!ɔHu/[WS_ kSZWr=~Ϲ]/k3jLe̵r31|&y^#>M6wNĩ:iZl:=6q4e)/9O2N3ZF [ɴ}ٱ;r [u3|ۤڤ}8mN{BxᗚG4!S"OL}⾖&{m V Y+yj%65y9}IOO7n^;M^kz;jV>d~]Ov o3k5}A{pޗ}<HuIdoϞO˴"|YO_sm^~w{n9KzouǬI|%}+QG w8W>4-�������.݃6Mxɾ\vۧ}Qi/nX=[/Sr;�4Bn7|)g\lm/Sc7qZigeA=U,+}yd_:qMv^K5I^l:S7pxik:\c9#ڱ v}X5ܾey:l3]uNT 2 ~vuؕ8z}=^[[@n,q)\:dڌ{m bnl\vLɶDRk/.t瓹]{#:6t!d&2'yekr,=3.dA;+! ollOfV2Lɵ?k%&:S2_&cY)2�K_kMWnww=qXtytѿ]ϡdo^up#GdNNVt^ �������C;֜ᗙ`N{(ɝo?.sϻBU=޳3z O0}r>pz}AaR][u^2ͭNqz v/_,U]>9҅ ޗ\󬻰nI]Ygza~zt'A[l$<Q-mZܺl֯v%|;u׃/{e{;e381 wn/�ߜ{Z;޿b58LM~~ߵzvKyߜךַ�������!Mrֈ̟ '/Rlg~r'(tgհ|V]za^t2O{[n{͍H+g1\g4:9/}>3iF]ʿ7O[H+(9P0柴Z_lZv=S3:yg&22=g_&%^rry{&zyL2Aoۏ~S.*[句&`2X{tm&kbWv)߼M:%H jah]O=t*NX霟{e>S>Mߣ埽j1&Xr}D%/;..{J7_cۿm~ϳgp b2lNoˋٞRJ$^DM_V~ |;/-_ <oHe3]w=G'в/9=k}D歔MrVɌɷ3cZN�YgN3 Yauf3 t<zж+Yy-^\>':  ?G1j]܇5UfHXl\Ng}<~V5*wnۼ̑sGΑ&?|N4=M잗]J={: O<rc{''skqw/59y{T&:&q_U';Y3=zUOێ.{ڸ(65}m2SsO '&YW(kınp z<NdΞk1.׵WvZ{s;mmu$WO_qM4.񾯝Zud^Ku=\s=Hn�������Ak%OerOϴ*N2 ?W]hCUuc1A:;pF�UL𙣚D0}™9:=՚W}r_Fx7։lI'Z'XH 3TchRU:0fXU㴮Ϯ}V-: /1q)cф庬jrz1ۚsX<|c]7kIY.'-a�1[JD%kYAni{:65V+ͷMzyrJ$^لɺT}>-0{:k`w5Uv/1=񭺴G;~gA5}$ucIs5r(k:sUDx[ImJ\™䵜W6ajx7rB.v;~iUQf~FTKξaῈHO~NIn?A=Qy1-$�������8=�SX.MQ:(i}blTs N�wzE%vƮݗ5I2tFҽgmЧ&4od[mB*}>UZz暛c;wpf|C]κ^+ެGlN}yN[Nl_+Ǫ͹'?|LS͈ ϝ3{ \;js_8oQl3͎[ktkɴb%-X)94EIeڿ>l״}^Vh~]+Uq5j1m5bZ<n*՚Kj޿-Iv@[޿{p^O|.7AO O۽}$}{?ǜg{zo e'Vs=iTckk>�������n4 e 8НKޓO>+á3ꫯv碥e=~IW A)$ϾҺOCtmx]=R?dHFjXgr -:1"9Ho;zn]>7uC}g;sx,3B}gY -*>hv}]ϓf]Yzz:yٺ0M87Q[&N^�������y ZRJR"ǖ1*M:8i6=]=#9}S"ʒښNИ'i3p8Z#L?y&tD%%ξMT#o_5-<K;M�������Z!OgM_Ɯgd_F';y%^yR{ٚ61:!nI-W|:OF+M?+~tJ�������p7hHX �������KhMTҡOԚx2#&:�������@у����������RgВRWD:)xeIW �������DPiܲe%^9JyEhHX- {[*ucDr:,\SڷOvL$S1: Yaڠ3B}gY ڍ7v琎8 2ĝF\-]{��ڋ�-RS @{@ YB}gSxmg;PжS{/O?1cƸsHGWرcݹhҵ�": @,w0umPߙvf3 ,]ug���������@=hsHG/bZi�^ڃ _^xKO_T}t7=h۪31:Yaڠ3B}g90h~UsHG&H8n8w.wpt�h/H%syզˇMnnzy: ots͛hР~OAǡ3KwnR=5B6,wf;h۩nժULs- �-�` @T꫐&zt?IOwj֜9NO �D$M*e�Nf3  @NpO=4gW^y;;Z��Zcnk6G58H{:jE}~Z׻�L՗G>]?Ϟh3 B}g!@AR jUj⿸+V s&iӺ7:3- >5VNxƝs{ q;cq/Pr[m8ъ ?B43wn|%k*SWvgKqf;jc!@ �8"}}7{3`O[nI| 7�IUHAu3_o|#=Xt0,p2 Y·�mDޯcbɦƧ#N^y$5<ЄSe6z11r/Q+m>R&aսGS' \>QZ)k/G5։LN艢ٺ1Z˔;QWVXw~{UOWZzO\R|oKq��@g[{)3N�Z7s;'_v��hSi]}+t\szkNz^ai5Zt.P]UڱuW74M4Aunᵗʉ) ��@дKonԽ4��,9|�� u�m^RFsu.4N̹\Gov:HZekӵ Gʌu{s XGFsL٥Zp YYsUY[n{8o9kA{i -ˑ<jc,u<RcWCy˷W6ajiNWlk>R'2ZJ?1I[~pwycrx_fWp]lI���������H=zЪN/͵Y޹J??DwZpoowۢ9)ͽP7a_5}^ǭߛ_Ye9/[WEyg'^j>NQ]P1[^34e[_'qJ;~˭s*4g3)Sbyt];{;e_3rO(s~Ys~vOn;Ѻ'\{YBOqֱe[9Vyi̋H���������У'׷OҮzpttB8nx=́=ƞ]cCӓY噌ϡa V/oF/᲏E|Aͱrn LҚgkCfߢq};$R"&J ,]5s z\{̽P ^S ~r͓{_xy'h[A |:kz;qkOs>|,fCV=Ny+���M{3����:.݃6^PyrgTt4.+KYQ>ՙe'}t٦lPO˿ovކqM,\v"I)oYd<ky  cWj߾uY; Ee\vy'\PL~ԚxMvuat =9Y)L_}Fkt.?6udol+&d4fv`9jS+@rݽ9q[]D絔����t]fbw>;l����R!Oc?ٷw:}M;{ä>ndʽlzxV;s'۩xx;^/sRksi8u)@Ďgum?.h9b:K?}eϻLony����В:Xt����H3 q:Ge0o;6aL~ϓ>̤;NRT8]ldf)PO&6SJ}ks>'+\̺unRJ$^^#N~lܝ73I+ZkJu@ڤzd)|ͳw+5%.^Ǜ%P���좣t}ڼo:Ľc.A&۽I{ѩ{)mo]_wXohOc����уrLsOO^>';uRẼP*=?<IUQ^:֟>d^K]̉ \7*]ճ~v%={ՉZ5kU2IԳ֟}k����кooۍza~]}�@qQSX饇vhYZh>4\7{c]ޤ'>.xN�����Ѓ֤ƪb={mz^q:gO\tׅvONlYy׃_htܙH;yI}잰;=aOߵqgqĦ4vETMRN_DRr=W˴o[`s:t85;R"&LmX-[~]WiUZu$=k]kg O|Ոuk:Z_sTEܽ~ֱ,32vfym3 ���@suZ/tbo8q]~7+>'p ����OUI{Q:*5{٧?wC&;o/hjkĵ|v O۽a͟#U9q^ƹaF՜dYǹ?7zVC}wh-=s5ytw,jwnڝ+b׵ҷ&IwXeFgǪ´{}ک?S[nXm���@WuqҞ&`}MO.Qclp{bv֯tͲ>{rX\����[(ͻmٲEtO+p琎y]}\4j�^ޖJ?ȝ@JTߝ\usG?#rwuMȟKfACYcWm'uz#6Ywb;/-;w%vd{oVdJޱK~<@˶3;?y#L}Sי,ws1atѴ*����N|X7<C63d:Νsg⢯Ͼpcׯ)g_7*P^с ����]Ϡ%ҔHM����tagztQ`#4 YVr3qv{IvA9=nop>;I6����4GtRK'u\���Е|ڡ+㌹ZNw|Uzۺen=̱m3D Oxe le]zط����!q(<t���������F{ /&:I���������84A ����������)3hI4%,c���������R[(#5[lݹkھ};tԯ_?wy\4j�^ޖJ?ȝ@JԬۥ'˞<Tuq=n:&aO%3\�@&mowLp_x/6Su栾3 stc~U �� "}}7{3`O#�}g<|#L@6,wf;hۉ�-��@@أ[ګNO#z7"_G~_Zz7�I>xoѧcә�mf!YB}w>h#жZ��΁�m[|yCu0F<Oyu?�7꫐&zt?IOw]s8=9Gn.� 4;9f8,wC6�m;��&ooҍ wiM;XB/8�+iO h syզˇΰf/^.E6oޢA`3KwnR=5B6,wf;hۉ�-��@@6Y_Nܼ(@Eu_T}t}n.MB}g;s6k;Pߙ|F*���Hu9/9L�,F3=b}dZ\y^V 77Fw-w�����BZ���tzжT51^ZzC 7kBEWk5oJNЃiǼ ܬLto^{_l0'-G W,\;wUu׮w?ՙ 0 WY̒I48x}ΉnNDڈt_E����m;χ}Қ8`S 肧J?W04r`Գo,/`޷N#h>v,Z/TV�t6{Sk_t.h#жZ��΁�m{}<է-Ә~&hk$`-h]f3K&^_s镥n: _��}~/>ʞ>l]tO*9h#жZ��΁�mC vhC(Xh B}gLyuđ_ӷDuLww ��H7om_O9Wv=ݙHUT���b[sY=J3͋K4h  Mܲ΋kOgwN+nîV-k��#|s;8kx �N;#/N�-���R^Ӣ+ȑVwt8ˬ4et{=?շ)9KuZ{z[?Ӻr5��C4ҝw?ܝ��{Ï"h:R'��@z~Kzg}`0h :9qcN? qH)86Pߙ%?ӝ3j37L"��/ 9Cy0qC��tA?UZZ7|R|_{{��������8�/~ar)޽>C[zׯVVVsN(++;c/oh/����D;ȝ9hz뺛`? 7[7Gry�@#@ ��L/ &}o!aO[YfzvaҥKݥ����ta:.;�!�9���`ǎgٳzw}W'N{Ú3<y裏#{՚^@@7t=ݯ_?w-����,?w=6K��t>hqP_<JnN|z��:{??g{Ěް2?'*/??L����b}C8Bw}wo}ͷި?E}t}d͟.oS�oo]nM7Yգ588PˑeoqiK^7z 59� kܯ2r3!��\sf̘:JW^yo=e ͚5k=o֬Yo~SI'dO1ކꫯG 5^x޺u/_nO'S7= ����JnO wԽwO_�ҽ=Z+}<7{t%{kd\?cߧV:{^v}hMtV6bIͷHߏW6Үn 67[y.ZUo1_;O�@ @L@~Q1YG�� ^yfXccժUvZn:;o׮]Q^}=hO޽;MMMI5C0���@gs꾧IoدݻoTҿ{Gi-uۍּQ>:^6~N}dp>׿=7꿭O8Hj;/'w^l�-oշ+?Fo>׫[Ú%fa23D [lʙ?_UW_=!\$os=/*ǐ�n9眣SO=<K5a;;ӟgiذaC_o5 #G?Yz#,+k-{WG ����Eod^306(Q2nwxC{iu|~?ܝj#wb; 7 >c'oceno^u-|\�@ @{.xVPGwO&8{-ӟ}B'WƏoOgdZ~uT0;vD9s/={~`ۦI.{Oڦ}{˝wyv9��ҝ%kz˚Y3e|M{W_}r����@bgAtyYQυMZ:ڝlPþ㶝Lp/oϹ8Y�Hoh3;c֙0jλiMM=o|-.k1`?'>}=m]pڹs="��5?<:sg^tE:u~M֖����>Lw} 㤆).y>m6CCHehlX [Oo]գ5 >(eK8\F{=?c[96�@!@!3ם hz2Y/ �������E_iϗ8ϙ=lgzҠc_yϐuO9.QS/ۻcO?o8b;p{]mo9fiڧkbyZgv]��JŝNK[lu}wqdz}8~y…jSvYy.sܹ3r ul<6=k +>ih$* 8nܕ*+[°�NkĈO_'fA6U ^}Um޼Y >#ɱGO/ufo[s6НKO?s?i󦽧z[>j>7 uC}gLLwΨ[tPU��pᥝ2᳢1gqs;c-]WQ= ;l=Rn% VVVτ=��$͏JKKgҚ 6666AZc׮]QMYo|N{������� 2uMꣂkmPQQaTٳ;v9aD�3:ϱ,N{A{Ykv^,9k,555iz4|pl~~.B}ߴ3m?Kly4������C6C A ylNϯmJO{ԋ۷"7��Aog{њ{L$ӳA{9{=k=g c������< ܹe*M{<5V3?a L?Ԟ>20x@CO>]Cڷy^_}��fƌS3ϴ.'a~a;V]wc._9Ҟ6.=f�����Σ[<89;-Y�= +4~x7��$ iկ_?wmݹt0 _~Gz5ݮssP8wfɴhWSOeO�ߗT==~ⷕ?{39-*'۷Ogi:L �����ľH~1O?oO�q̈h =h3D&p{-YZ��,zzATmGB}gL?~[9^Y֭�u?`Ow6HUh3 Ξ=ǝs'?у>`?��ZZڮ]f3K իs�� A:}hۉ�-��Hoh=hJh>v,\;wUu׮w?W_-ykxРa꛺wfɤqY{>D7s"@A�FCD#`YB}gSxmg;PߝD��7L 8묳osigOi>ۥжUct;PߙԵA}g^ۙ,7:tD<l۶M};���������P!@ ����������)B���@Z]uYB}gSw栮3 Yo���������!@4xp.x>C7mۧzuvvѹkv}5u ��������EP ⚀]<=zЯ~BW_qs{�CSN��������p�ʝQf'3mM ss;/xizzh�ӿ-/u ͤz;wyvM��������#@{L vj zK};}[~Gӟd}zW= |ow0;(%#Q'?>vt}; ��������`!@{wz=ם=oWzv-[o]ǥ ?pyAՂ544w^f .ғO]w:Əo$^xoIeϟ={~_gϣ强0AS3oԥSIT57o\=%s.ʍW6:x̹k׮.cۏI`\lٞ8c��������Gmb(6C&@w-�]<&XiO}~-dWO o7p-^{mui)''Go4yO?.b7'>?SvC  |ϴn˙2e].j6S3oԥنW$#;];ohcsL1Qs1**Hk\Sm1\ BziwܩE%d]_[~ާi&p/hС3n;ϔkW�YgebDڿrS0eL|#:,]4\L{Ϗ<soß 3IKeī>H7xc|Ou1+kim˟H}9tuy}gDڌ?lC,L{-㿮?_eY'چf<}c~轶=ēmb_Lx:u5\?򖵶N[;QY;HL^o۟}5ZۈFITl3mxq~vo%z&_MT-}jlm^-{"@{4~>n\gM7 /oQXXhL೭፿Mm0Ǧ{Y}QϞ=Lpc nzL@)7hݻhǎTrb{` XS\\ ^ x66-2d￯~w@޽{mC!��d[oL>y^bN8{ٺuT]]mVnݺ,u17$3m{fͱǞèQ</?[JTGpY'裏ۘզn{f 4ˏ'>y1e3y L״,/**'|8̶MAL{xFsۺɏ'Q0{oDyUmذ~M's,?sM5o&z5ۺNϖF[,K6f;&7 wIipK봥;0#Gqd~ğaÆ%2OGv'j#$*k^߾9\2ys%*ۖn0ۋ}]_?սk_IQi7`g&fn^ \፽ޜm!g<~7]ao c$:۷;H5f~?x'i d��tEݻwM7ݤO?ݞի9{#|N_tEIj>x ;il{ub=z}&6&lMs = u#96s_&IT_-Ձ ։wL<xp 0@ ^�^I'dijjZڧlǜd>۳NzMMǣ}^Zv}3?әk=<{yuSam^߆מ>s??&6 sPqm2;}ӓCi:9VKm-k8y暶s8gіn|FԲeܜ1^f|'Z6bT>:f] ô's5X2nORY3l}'z2y] dcMį.A*xP3?ik+oxc@|@c[zv zχLx_[c{汗p~ٶ{rŊ'6C&>϶=�Ldn}?榁Ov"縹ig%an_o{>͉fagzoxd*}%[ff%׿uw.^lK4ue˖wU 3A>k0m g^`vd۳lڅ!?ٟiOP+c$6Z'~Kaӫ2z=uwG|vuX#3r ޳-Rm״E& cz}}ld^JvO*U{.AxPUR/x̗<5A/PKCin rKLp,^ К[֘;~vkm۫=F<mo{F۟I ��"̯WX}"/_":0&Md8.Gq17-<Ɓs꒭09Rp4> "S7fK%~>oý w)L4Z{=6Lm֬Y-mM`p?Z2#yY5^z2!?M+6ME>Y-Q~ݬ]6{kr>]#?M֬g5bdnOil[;+#@LpdտOX<]ҵMG<o1 g(x?<̳GAL4M1h64=(pka/mh^Vdnˇ 7ϓMhok0c!gx��oq-sg̘1|"fܘYt9|kqc175B"_{֑l}onҴtȬcڑakܨOtS rܐ54̺榯YՖbn&8^v>;k={ol:ɾ.ɼ6KKK ҬkaLlL/d)-ݜ׶u~ƫ'/ggǬ6m wUmngWɼ.[nk}m`~vZk~&xL {^l3Ӄmj}&$^tehPg Ym7/@hmL3b7,g`�Iyg?ϛgܚ#Gl/s]xQL�[nկku׬gƴ/9!Vˁ5Ogc��ZM8Qwƌŷ–17]+**ic5 0̴U778]ܰ?T72ꫵ:wCuL27lMx=Lݛ6ݜ5?Llo[17ShH4.{xkm]'[kOӖL8هf] -}%^ J榾ڶZL~&m9lqu;uZ{?Sߦǵi_gN|W3;3!YXͣ(Zɟ)}ZkO]-{ iWzS_P;)ww߷uEUV$꙯y^R7eL ?k2?h?Ԟ6{yLsAMӼ;y@s֭vpۆF132e7G[fwL̯ӧO7LO?ꀆ86a3,f5ۤzJ_@5ZqxL[nېWOڗ ; 7`Oms#Zm q �@box7w^|E{ޔ۴iAs /[Z'c3377滢mh07zNLoYs ^J3WKu`Ļ:̍&sʴô 0=7>h{7٧ Κ3Q,ix-7gX- z40mgM0m$Yf~ޮaͱLf^K=5RZSY'VqvX= 0?dіNTH5ff8u|'Z6Rَ62?#׾X-mk}'z2N(m޼HncO?DiB?B?OB}iԲy憬/?i[T>D"u|z뭷|oKo;C}Q{޽{CSN [󫫫ʛdʙ։'vf>m'bَw>m֣G(dunFR}%5UW]ڹsgf=ae-ko[\kǑ)K^}{O״Ǭo3Z:L{_5o:6xu;.ݾY&y{I$QhO=yیM&_:yKmDe1em0yC&_o/y,5]IFiuY'nvL{bZnxZ*l}KۦLK�*]u3qcicshm۶ٿ,2]Y=nܕy̯.\U{Y}ׯ;~\z Lj.|6~t}n&�����Ht�:-Z3L+5d ܚNss� |T QnC q+g{kX{<k"bUBH-ݕbm]%E HX2V@A|ΜL&nHxg3{Ό|_������#ox/ѵgy�������� ЯYHazçZL]��������A{` Z��zv޼yy�����VA ����������g8*h�T�ЛFmZZ먠PA ����iE-����������h��������� Ah��������� Ahc.];Kl-����������ТOx75iRl9s}ᇺi*//���������` ?DOPMSkסּDޤA&ߖ*- P8ߖwq~mV9m땔Ngf}EsݟᅫޯT~m9Dc!��������g6ny?M~i?T_ҞF/YW_-6lBz)on=cdɏ|ytYظxt}E*,,w-]Z*𭪪OSw;K,qۼ {׶͍o~ڵ{%z׼WͶmۦwy{%x:V6[G~lF7pi=/Z7��������g&^p5W?:>TE+uy07 ,׵)0zVZ̯JKm{+6VSڦ\ϨQsnbk[.r7\jq]o-ԅ^9saի5"!ʕ/4wÆ Zv,&{nAk۰m α>q|M75}t;x-+vav[ոvg%��_����� ]bl@ ݂,�@vk:97) \h;׮z]y啭*_UXUggK ,@ nl[ J_¹M`mk_ӵ^gCH;άs`i*/6p7mu:Μy[`qmZk8Xm3fp_{C\{m/7}q{_na=xkI_Wݟ]'w^=z[k6ҍfm׷;ջ��ش)2?z3������h{ܑu[矿P\v7w`̂E-`5UOӂ=?x'?nVX-rڪu*ׂ>ȑ#_`쇙t>wz'۪-bնv, ^kWA+F ƻr饗wӪlkٓ~mݶ*m�������E@,3UJ{T~۵y7hг5 ,7n7'~{;}3E*ٺCP l[v,Amljʠ/~ -J wk &7EߞczN/uɒ1UcdZZkYzhʔ)1ǔ+wmxX'%%_w6>kjl%%n/>:2|��������m whÅu'6qU'|ڳg>{p{U [YP7X@lAqW}X,_nVjob^ em[N9Ȫkc ۃ,lMe[xkכ+[XX+x��������m/q4/.oVמ,�2vUq`UFW{vGoTZ =Iӱ8}^}ufYi>5kگZuc~rzG>{3<X^Ft>ܟMXق` :g��������0Т,dV#gՆ7v22q[U07'b׮]>zc\R۶U�UMw[IhK3Qmc޸��������@G@ kuf]s֪-L&ﵨb `M718Cɕ+_}Vi3m=؏m.]ZܜY�mU6oҥ18>k3tMG;]o|g|��������hwWUMumw]DV m|N ]M7FDQQ7]իc %-+vǙ@-nf:1zZ :öcχ?݆mӪ[-Ziƕ>sq[Wmuqv6Y;,\]'/G{tf��������0p%>iΝ8+tE}}.RJ��$ﱿ kM^M�����3߂���������!���������!���������!���������!���������I ;}Ν;5q◽W5l0o��)\p kM^M�����3߂���������!���������3@ .��=#{������]p1y]JJN&7K}���������U> O7{s��������-~5b<:zSo.з7U'V%qzVu*_jnq>Coi3muC[޷ ;v:xS:m]D^JyڲeFm;{tv<Nź/V<<^]hSGxֱ''�������H֣l^;7G?q+@{ռy,4YDvջceeU0’G忺ؔo|[)7^Wc3fot(f۝:otՙ3??iM?^~Pc?֜9wys[`dYqvt\xySRޟ^xa.~hɒys[{=s\'[luֳnmf6m{5W< /Ԇ 뛎˦Xx__nd}_hgiv�������ӉXWmսwNu3Gu ~0]|] *eCۋ?qٹWq֗YXhc—3oӶm;,@/w٣y͆ǔ3W_}}pj*m˖7l>k՚2e9r<[;F , ())ѵ^9mrí{}jѢEB>^:suΰ_`f65[4;_;o;=^B!8px}'?v\}nmmד<ݹ缳e䓥nP}5xs[?Kgwsg?�������p:ujxCsuޜB¹M[u B L0|?[a~`Xj`M#FTvG}zͦXvqCZ;F+ls/~YqysÜ^{)|eeeys",o~VvXHe~f,�O"IV[,6S3ۏ|#:�֖F`K.DȮ]<^U*XlC ?)VG������@G@ho҅]M7PA~j\J`Ŗ_eVmk=Vz,ښko{@x@ɯꪫGc͛7{ٳE8ezmk;wntt͖ǂ"{/ -OTb۲߶|bۿmҿ{+@kQ]Vҝ}uu gں`bf;Gu6wu|]w[-<ZWumU4k'k/;wW�������h{@y+j_\ج  $Mtcz*Sm IytE[j,ֳ0$?BcS$9s776 ,)V{r ,ǎaw*-1!ώJ~.e㭰, ,^~jk4ZUU[}]u':Y(_'D+`O'=mv5=y;5uzUڹ[֮�������7~q?k>loOƍo Ql6?ڜ9s܀&{d䏮&+,@n=G\`/*,\6OcYcgw}+WtW;ߎ-0;VfAIVVwOj[ ˭jЂ,p󻡶* qɂX{+5om{&6_+43שkuN̿NVYo?~[}=y=wSn}vVGɯN]�'y0'nxֵŻώg7moǪv̹E7�������O^ty罹U�Z/68,,Y`.w�^וUY֟vkXbՀB v{J2, q휣+-zmauwj-򯻵Ct~ ߂Ktw>k`[;mY8ͭ$;`OD#vI bN]\ڬ; Nǩ䷧USeg}ٶM-1k )x-:sͣٺ[.h}ͭv �������"n^ߚՈG٨տޮ?uVOw ]źehV]T lwyǛӳ,|gvQl,Mb ,{O;RgY[(=^gk gͻ׽XW֥U)[ ,kX8[^ c_1XPVH1]ƶ |mNN]3:YiCQgfUUwt^N3fDV'yGz'\54�������n~IG<jΩp]VygaE[/~V6f`}7xJ8WUۏB cH?zj=FIVDW4d>ڪ K: ͭ U-}vt R,P V'֮_NN;/^rY KJJ`-K 5=%V٣_hV|m:ud;q3hm~tiun36l6:-EO<?Ϟ5A{_R;>R{�������p;<կE{%Ƙ=m۶-{1wuzᅕawѣw_yn!|M6ϖ:|{7-۾^p? wqik{mٴdɏO6ubmNϟ#z`˛[,N<zY}<;詳mFoÞۼv#-)z߉NCpeS{l㲩Etv:Z7x?vf[6Ek{YGSG<V{E'Mީ;~뭷ﶾ?#������zF_[PC}Ν;5q◽Wݪ .VicwojQv}*q*ݻVZZ"6{7c�����@ c�+Yֺn_^[7Kp�������%�pYE׮ꕱV=y]7n;+�������",??_)=nW{d �������b 3@p Z��г.Y����������������p���������� tq|ץ^Ç{s��@I+8�����D����������p#���������!���������!ŀojҤtx4}\6��������}W.];Kǎ#��������@A@M~J[MvD˵cG6lX /Л{YX4i}E_m3��������7_ [L7Ng:^*-[r,{k��������`#EYQ5L6i,KlTxӟTÇӴ^ˢutn} Vv۷ǽhթW_}W��������E@.nUT :vXmٲ[Cu9д}HFooĈz~׻6oɒ;igyZÆ sn,V|5:H|5nxݫoα6��������h{O~3j={hʔ)K9r+A"ԷaqΜ9q߷zjoNt۶m/ }wuO*Mmy~wՙz?%;2yd7$Vf���������m7}sfgm<ڹW`n޼{cn6o`UmZuh0i&_JJF͉7nnVU6Nlwy[/okVZ׿~Ć6��������h{kshֻ:rSobՑ66 GzQ7OqH,pHD3fsýW-Yupo c׺+j.i3��������zR'Oxs?l.i-ȳ@' XաU6;ok^XE0m��������0?Du~I`ѢEn臆 -ܳMyoNl]2jӮwco׮] Bꪫ9E�������� |=̺47_>4Z~͑|˖-ݝ1cꕔr7sZlW|MUU7ц 97ydwqSj]X9y=ƚݲe*r nWvL6��������hwWU4Ϻ9`g-3gok#uԨiJZv7 n +/B][#G [enp5?أsYI6foMMMӱw]lh3��������-)I;wĉ_^+u饗c�=WaҼ]ﶉޫɎ������g*3�-��Z������tc����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HtϪ*Ҧiη%����������@@#^{}Y '~ɝ����������TۢK[���������hnJo����������F@MounPսj17rk���������G@MtP<tXu4A?:���������@W{ϟwں>~O����������tݔgx����������}IaOڹs&Nٰm=PY{s'65k]nET__K/TÇ��=WaҼ]ﶉޫɎ������g*n1fmYS6o5bz?nf;+Ӊ�D@/m_?F������ 8& d-5~(US[fp���������@A@,9pat/yK��������� ����������������������������������������������������������������������������������������������������gcǎ;ҥK9�pz�������gZ o&MJז-[9���������C@M(9Yޚ_4/ ({ܛ{(l6/Zz78M~4^|b!z/3m6VSo|g}�������nɭ_ [M2/ԗówQCC~geVAYȗinԕW^=}=/U)w7-S 8Ǎ+r9z3F5}^/Zi[/R\smֶ;u3g<0۾/oml^}Mݻwͻ!m<˵cG]}ڴkW{]z'�������!V5ߺ沋5b܁W_Ujj׻vr;ï^s`Y0T V5StJe`=ϿUeFWq~il/vsO. ~ oƌ}ƌʕ/hɒ)??ߝ7l0-[V>߰ax:׻ao 7ܠozjM2EEEEm-۷k۶mO~-co;smnH{Qon|Oc痒kgxsӟ[�������h{_~M&ՌL <Yu袋.r+P-ZԢ̪ggѼykZJς Vn;7 i+cп~߸UwGC}gy ?;; L f*O<O =- l5}-ؽK9}XPj֕nt{ `ڧ]+!{ѽ;�������00zx*رc;tּyZTN< 4ԁ ZYX+t-X}^^BB<NJgC>,4;>r fԨQKPτ}Fmҥ[.X/~eu|]wÎ-[oNjժ%> `I%�������F@΄YwoaZȠ˂ i,0$zX>ialgϺL/g3GZ^[n]3[jz9m1E-J={m ‚{[~5xsYj][֭{݊Ug `�������)ճX^͂ Q[?-^oi kVxmA|rKW$>|7YpO _eCp|U�*E-ZaiC㥥O>7V%{9nWVa̦X?~+zV�jǰcG]S7&s=V/}bUӱO�������@G@ۃΔY<L G�es ?Bo|݊;?ܱiɒyk4* mmk!זGׂe Y5]s> @կl~__[lկ~dPRR~&_xae*nnZ5-,'{~C`r͙3ݟUC\`OY��������h{șR=k,LPZ(~ [Fmosƌc,@WӖ[fAZ3:le6F೻j϶*<v}-UWG^V뇔h 0-3*sg`ը3l!wgMswuvVmrwOھ۸v�������m9Sg qɖGd?z.c]̺Z۾q][׫״0̂,VO38=_>U_f+B{wÆ (5Z%ݣ~>qYNUUUޜHŭVƺ?v6ӭm+t 3JV{}P:ڧ?fK,׾55�������``#~l%)z*آYd|]޻lY|Ԩ5uQ~jߥ]~,lٸwVNZe۲[Ǫ&o7 ź쾨ޢc"֖؂BD`?n?i:0=hS y+˗// ,۪ 1c}1;&ۖctl?~ek>U Ec۴>}sTQQCp@?co^:z.S7 ������}[R=vܩBWK/U�ςG b_j6?6*9|Kv~[iii뮋wDUߔclT̓H+ݛ%Ttjƭsx3,V,[u+ٛ �����**hbժPp{ꩧܮ,9PCҎUn^]kb/ތh q~m$�����7hlRٺA"-Z[Ⱥ~玺Cx4XI9ʹ>ekjtț������Z�$|晧r/Ffv-2.�Vǫͅ*5[zJ5E5$%/SŶviFEYǙm9!Ü)wU=նW&j5GU W5amo&|}vmUegjOg*Zط������E@ ���M*ّ›ҕzmU{4+c5RUmUB/YU|s2[mHSGgjٶHՙ _^z7 RNW>w PkcsTt �����9���@8>OYi˴,LR]dOVܚ)ZT7>+vcbJWVƢWȩYǙL9)[-v5<?W+CJnֽ{,ζ缫V FO/Fc{T>3ř_^NMG����� n���@O][܀U?nɖvf;#b[JI)wrIƏ'T%]wjRTyVϊ}ζ(U,q}puSiMyRXfF5t������h��PTVεxD9SꚦZC egLA!^r&eiU0RYc;8v0'9K 7kbMlqu!o!������:���U>jWkeIJJf;s>o%SI~_PVhe5ڦ������!��� -zL/EV9*Ra[y{/)JyQVpH/8YJU)yZz?4Z5hū������ąJyynq>CoΙw1y]JJ4іߖ-[4iR|Mo�U>[<r8KVs֔vs -W5j8bp<T [yo\innvTxoxoj _<Vwsٓ匿c����� EtR74?"@7^ݻW|p;{k�vTt8+[Y*S/R-RUpm<׵J { 4!{Vq\ɚ;[/iy,JM) ɟyϰњ`B)Y*YQrUc9BegH������m8rS}*=P4k?+ -8wyG۶m̙ /<VEjդǃd�XY]"},Ŏ*S}kX5nShcF=yW2jִ UGrԋrT\sRqگY:m|P-uW]OU*S&g(ߞǬbUn*Qv7K�����8vRӖA?:}@b544?}F[l*Θ1cg̹˛ʦf꫽�(zh֓7]I:u?Ó§*-+䷶ʙr;TR'NxP2MYίN=S'ȱuO*+jE}/y /ʈF{v?_q]{�����pTNHkH?rx7 oꫯ*55U6Ιk.g]Zo߾n+u�-^?4 XJ;MU.lL^Xnm~hԨ5m+x&-ڪnl|@4۹.c<m{]CvMیu>ۉgII=:sSk��������pzÍal?G蜡C9`7<]t:S555fޤDz궗_ZɂqƫIwH\N7\˵cG;ɒ;i] mMnhvhBws!pvwױqF 8VWvK7EjU{c]nذ7pCqMmߍuWVm֦幹97ͻᄁ_xkgʔ)n JC]{تhj/kϿmw?(^{ `smZ{]CUqjylYYYMcjE8΁ʾg[��������Ӊn%M4|;UWkгy߽UW];v<Y Y͸qPk޽k[0*Ι3G)))nX۳}ڶp?. H-е +:@xڪ?=)rZ3fp7c1v.^d|=s{ ޲sK͢ƘP`nW^G~ q3 ^%۷?G$=�������%='~MOߨJ{xü<]y5{c?0) AWfůzB*}?]m[٧k04Fr/~ -M 7QAFW?ɭ6X;Z}f?Hk6ُ<*Ī�������XŬUZHw]_?7U4~@ɂZ\U4=zg6Z4X}wk{Y<. 6nx;}t�x&7j'4rrr*dnw��������D@M®Ϸpֺ;.yg_ޡ}[s+/AS�4|9xmUV9|pUϰmZ( =P-0-ص?i`o!?jUr^>=Sع[weN}fޯl@g?>!Ə:��������IݴOunnlPڟ]ÍjGG9uol' gAy״Zl"Xpfڷ_lU'O> aڶ-BZ ؁ƯλZUP]{t:3pK[ܓ&YU5 b>/�������Ӊ]%7]'Zj0\_r$3]6,LZXO=x7> ,ڰa7,pn4?[zW�N,dݲe* .:??_KȭЍ~@0<?6NwX[ծ >K][`mmq},X}>gѾ[{YA�������vukl?k{}s5{㬬,oN3 ⵳[px}E-|?jڪV!_ jnɎ,Z>ΰЮC+ ܐ?{Ve.,aS[md۷ kvUZ5X eˊ6wuuۻq)خb_Vuű>Kr{3`vvV럃unauX0_sk�������#)I;wĉ_^+u饗X�c-1=WaҼ]ﶉޫ?#������zF_[�Wܺ&�������h�κM+eٺ�������LD@ �u63<p;2��������g*Z����������HZ����������HZ����������H35|p���������Ӆ��������������������������������������������������9L(u=}[ ����������ǟ(GhÅpnrڰmo-����������ysNMeUsϪ*[z;*j wyp>��*ݻVZZ"6{71�����^E@ ~kճ?k܈'65k]yxs�C@/m_?F������ 8p*h-v ���������� m7MK~=kw_���������nqdJu[4+tnP���������� mvÅM/QO4:go-����������g:^ǟf]s;N-����������aۺ-Ww+k���������G@Mlg<ԯxk����������@m7]yU;ƟS?o)����������4#���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���FU8CZ8eIv|ZoicXzԛ;\kfUԾj6o ���@@ ���tSh!߹9m9*鲏TEC?Xf2ӄC5:孅B>ܯ@/[{Lln't>pDmUj:)7p#p>%jCykG6wVغwuv,|l;s)}eH+������g[MS7Uz V8E8UJ_T=impIEg+L69^:21CG;?@ذ͹P+1`3)[|Rk}&OjwogXԼlTktI=Vnov)T }��@@ ���$Pe?~oYS}>P4r@ݜ;k[8|OֺG h'K%mi<{ $鹺^{s|nnkKc0YvTxӰ,GhaeR3޶ױôl^?[r*~>HY)a~Q˶Í^q`g)Ry𸊣~Q^mSn?睧Sɚa:x| CUfFD���z-����,% S}icERBa(]_Toeמ铆FŐ|`-HBv q,BJRq9z(u`o %LV<o纗Vu֭=K kcF1T㧝ʟGOǠo4^<•Γ)giKdL<6X# W5}C���Xh��DsXqPUc;.;&?67:tjdpIU5'q-scrhUf:Z,s=e8'扏4 olx*˶e7˷rU?r.r;6HIRϴ5>Qi` W8ǻv=qBk?^mŊQAMcF뵼m/YEkF$i=uJ u'<LړSX߲Jagv 8)p.KCR#gkmC}Ovidƹx;qigV*OxŦF^n99Ub `;[n}>,NЫ9k#'4w;>)CUdooL5;""gӸMk4fI<YbGq4~91Cw|ӟn{~DCTqT։:sm̧_nJyK#y x[ykOyv~ReP% ��ӄ���= 韪pkLSo>2Upgr:f?qoE^w�JV 7P)cp䨖]{TS>޼6 MW;eu6úS[ᓪnWZ})WQvE2oGg?xN_0 tO5ڏU놎=s]G\} 9ls\k1OZu {`aN~o- 22YKG~GV~YS@Ө5R~IQ >]~6F'YVƒ*U}wdIMVD'\u<g铚<HtrNGgO~{t?_9ټ=ORᯇ+^:"Ǽ-mT7*gӸص}yfDZ^C2^h|WVIʹ6p<B_iTkY)NeH݆M6uW<xJ5riW1}DA*xiחN*cOjUO:KY���Nk���H))[BR-[?8[S;>S6>Obux^Ǖ@v T[X^iχ [~;D c ७�DB Yc xb)e fkQ`?ۤ֞^[?t/$ҽkRXpQoONde?URCխ|'ӽ$*㴿s�Yh?CLg4qv4n:|J\^{o -t&r]k<bjDW,|pm}$ڶe2 ӺyN)?fm1IgpIUX<wGEf $ṋ< TRÚÚV꒡q>޾XwslޮI`�QFFם LE-\Xcsϭ{ rU֞{>ao(OF~|W:{ |&}C4X,?vmI$-YQq`x{?KKV}8)[NHi:y/wmlW7Y=tqկHs}]./:Weqx?̫oe-+��E@ ��� I{JuVs7'84Xeح'U;Iz'B֓+2d %_4BOGJc m 1{vU>pRGxm<Tw Su%׽_幦9hxifJ|/HͿ[lk~88m[2B)!n [0GHں>ҥ炟^+eڹ*}y:c:F%k]<]5t8,U<e\%U*f|s>αΰ #Q՜ɚ>7Tuذ3*oӮs#ʟqJ Vy<lz3ށy9F;=;2sUtwd~cS[Cs,Խ,ͿyX]{.{`w^=63'=jVYP⟝giMWr<IUzws nYM>x$S޷#P$0nK6UARl]1=<>&rKzlQ|pU-}u����h��>ʯj-'gE*q Ёs3 R=:봙*{ 7ҍo7Җ}a֢ɦ}V GʼgQU=V}UxCXt;=&)պPuFY9޶ t2ӣ0H?RHch&}O{|ʺ}H*|)Õh?[7IOв-9Sz 5蘪0,M.x^4ҫ=fXj]+fm^>t]>?PM=D閎nUq'c8mWXݩۿ7ҦS <8QnwsCkϒe/wi?5D R*]kc7@7-Fhڵ q\E 3RVnIKR֬T^;\h Cq|J9s_v^8=Zwpx9���@o!���ڽI*=EJ&=9ӗ tA3Iޫ<+dͿ#UI;oyuW:i?e'$xʺN?14129@(n)h#gQKQ|V촕;'ܶJwr5>ݎ)MtWzcYqJ|^jr^q[I,zgZJq,?A1-GU)};sV8Imi:b $Q;g39Sf Vf\t/9`7oƟ)qõ``M^yRgxYJϼjvG-������wK*o9Zt8#GEZwêE5&U Sj?$G-KY204RyMhg?RhՠCg)}gʽ39SpSwOU 9G*F{݀;jƝ%x+e=R@E楎rΓuyҙZU:۹Um:٭.qcJV՜9*ۭ+ho|Հ"ՋboT'gj5#Th~Sz3|1lhZU -ҜHu쐣v=Ig}?U鬳6yw+jhרڗjY*Cu:wƤTxzs7GwfxC:s/}m#*=_HpaʺՎ;K>QC������.鍧8tw,ԖNvHu.LvVѼsȶ-=vߪ҆)S}1<BR̓ nsl3ICp`c8NwqQ.u^N9KwysyV >{T-<}hٜnٷ+aq7L/Bͻzw.K?Avu2Iӆ*520eKms`"?#Qmt[oe).?y8pT~_sL.+hyP0?Lag8NF&{fPtR>Au|JO>:v2pOŃZTNg8u*ogN8Ňy{$._<,){XuMF<ܨkӜw컝sXօx x]wE1:wH6)g+ >ڦjpZ))d^}"2ʶU'{ ���Z���T7ft2I\a;wTac& =Z}LÆزuAInRg c}Vd_YGWwq=cǰޓJK I9kqlXQAh6\r [5B#"<:XN*}\ Y# S-|iRQgK,YG}׏*ia̽.Y9#sb]r9-xjCMV4{Xs#2eZ̯t5UhγOh9۝]ֆcZhXEٍ^9q?voŬX{ȎιZ~{ƵLD|_DM^;aߙJD}{X54ǹom;:/r/UX'Us՞c7UsnyJ~I;ߝ4PJJ֟ ;Rg s7E¿Mca-dgf o}mO|N떟!G6ĽŃ\Ie6}د: UyjYȫBM4;?g/{1`���@"���8HXS^P1sU .ORqU|DXz`4u1WU$IYyNn'ώQYv%_7T7RVF7}'b\պ]I5N$>~~{[%ӽ|n`?L[l\CpQu s77hx2*?|5Do~HH2¹_{cMN{-''knY*_sWu_窆jHS}uR>q|m ܷiI*X2Do;TO:zh Uݰ C}oqH;}p4RtE0T gg] WE+kYʾw#4$\}|Sq8m^|'DoQ{P#Fxm$na=y:?5}7XuõgM����{'ܹS'~{��D*v~[iiO(""s1�׸cL;QԜT ���o "��ZߙwJ_ _`mtٶm'q{3UWW^9{lt{pYWƦ叕_1ƫ`m<ǎ)VW-CVYۑ'.yґ#}O&Hٳg��տW1�����'TX`SuY Rup����**h�� ZߙXA �8 NW*{3$Y6iv`͟9\#-:���*h�����kPez@]';p���@����������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@$>iΝ8+��&{ڽmy.mW}S8FV^=�}3f��#}oA���B@#Z����蜾 8���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���'.eۼ]P1#} �����>���AkYHP86Cܙ[9Q795G'�����'���=ሴ,K#mBmRތ>%xcֽZ眼8j&)))0-DW;Br[nkFE}gjYEew<ݩ<wվMH3"O׿Kيv>Cmj-g^]NDZFv$���3Z���T̑nRn66Hpd:X'N2{+e mS?BRkksmZ͌-'-{֖bm:O)\_ʭeδu7]Bdjsk"otX-/sB+Ua{Ԫfs5m} wOd,-W7��� ���@7zQRJ)m5[9Izr<yJifoǶy:RtkkT*ܜn{VhՑkAt5 �H" Ȕ8~(Zyk[1 j͊yO��/ ���z.b'i=qvijVEu-OʵlsReuG_!}Io=G-[VuphmdU'V<Lt7u{5;':lMsN8E<3Cjp6^X{Woh{|k#}j9G׽~mKcTZrm7wj,[aAN9ߪ[ggӟ]fsu_Y6OR5{0*Tby ~]d[*G׶Ϫfm$vCb T- K/TܺJ _=EylW���h��hq'IYqV6ns/-|^BBvE41RRNn)kR=qbT:W9pfuwy?9nc,g]skov=w9 OMbsӤlswIK6R9: W8y;rK*6tګYyY3pˣ9eNWE6V9F^mf~ŹVq׵9ΆT>W-*K6Wej*otz8W^:-<v"K[lҪ"#ۊ' QL)"oV,ʔ&G峂xv_jFkSWMo+ۭX}6-o͢b^tN|t)F[t<6hqk^*-;y[ݳF;ǼϚEW_ֺ}8YiVhY=q*7wT)ʻ뺦N���2Z���;x!ehwFRϥ'"c{Wn7бIRe}`\[u7I -|u$;ʞ x9]#+e%{F7#aeSػ[xIq;6[#MZ;g:CJV:yH-jbםli@v<sͧ8Ph÷¨y|i}9mE"A{ThʼqVKjV:iι/m㷃,V; h-;waF2i/6۪5*n뜊4C ׭*)z*Zst0|T4rq:jbR-ʊ-TI~\Vm*Sǿu1BřJ V:["𪼷DF +͍UAT,>_jn/1z][E>g4n[4ۧŒBd@䞋o{m+o^,^M;ây?KN˹/6"g;;ߎ>тc[kzW0pv|:orjg>~ &��@F@ ���$PfiYHJy@zr4rpd~ERӑ`4{a 3y#?TVyoڳ%#([x/#T<^s, 7d)ȹؤHO9RّIb. gv 6 "@x^~ᬟ~s~Nk^n9ǻ y,qtf;צ;ZYxX;|;4f; dvdk e-q׵5봨}X9H|fݪbvU9f\C+(jdA*Mt];MW.ÌE-TI 2"*oTuEskS;TZ_P5mUA!'Fmnϔks9sl*Ep.皻qiۿl_ɝ[jq^98zwHX\ 3QZeV?P~��@_C@ ���trt̝ѾCVժue:^m0ZTzT<*pk8&DUYyȺ,r\9sx8-xL:;dߡWbLݤt25kbuiYw_Է(Սhx=QYJW^c:ew-]S҂su 4?'+Q5iogJλ=6\cQFbW)6UY^UU%nf@bМVrRϰ5ř=T$A[WcgWy+ڪZnA3F+Ml׼C^svtۻ5zY$�8Ac'N{[7Î`Zh?h���=���莑R/I5U&())s,0Z[O;n$Pyz]$,^+mu,gCN{Q4+j1nwn7Gs{QuesIscs~ecN[pD?vW;S2{z []w(.d;Hxqq+;,\9]5Ȣz,P[Zqc( ioۘsY$ٙܐ3`JۍrS7nmi{Rz,dXx]B/.a<X���$ -���MYF.ڪ<yܺ+Ը#Rj!h1Yy2|͚!"l݋u+ގ4xi ۝yEr4yns-?輞"IǼ`ZVZZpGoٮ^05Еs[R츝ZuxdY[9Wks7G:ci~"ncFƉlc ׸xaYGʔ&nsQ1zަ)f7glb }UYڹ3*"8yOmG+_ڿ:Fgiv2z V(#9[ܓB^H:Wjlj;pOq}ck]%���=���&^xZ)M!*>˾. t[wpddC;y*Ӣ¿CY?;w> =+y} RG5*6[9&uƃWqGw{{џ8cS8muylд9mmhms봭߆q<, t<y^r眭Ji,g_"]VwKF>k_j3evrB^K|mճ"kIX]qiV"{Bڥ18y`7 ggEn8sym8kZ䎫K-������҂URA԰FLÜ _&.u ˤe!.HJIي/I?[7e_/ ʽzb8qo8]jmR: 4s޹Ŋ*ιz]1w]ζ]tٺ?zsA֞9۰|߆ÜkdUq,iyv}X0 w}~=ZŶeι'))VdɺׅiG?vlg*v\,fVjsoVP '9W7\\D*Tu]{L``UR~R~UfzNո~;W`mѺ ;m511Xܮ{x*3|.̈ۺ;*#\e{#m]ڴ.HWT�� 1h��0FziRNHOH4#_g5{?w%غ.zF{ ;gWgsgQNϾ{UٺժGpxnj~os^mw"T򢷠898_G'vs@Ӯc _l=79_ nu0v1mD 21acTLU3։5vŒm$elw 8)V*:Δzca9O26 vTYvbeu"LjU[|Hǡmʷ[R [hGwqBrw< tluIѻ^]vܚmqȱ:[nC|׼yHo БEN[5V|]ϰs^1ơ뭺3tuiZh]jWt g{ja uw3Ъưy}6g!Q?��@o;wj/{���$ﱿ k\]6?1OʵJ[Oq/UjxD~7uD)zի5c Uܱ?-<l;ΰJy5fZ|b*[U֝LdU]X%Әi>N螸yO1S oiYt?6k/g.tjNgtp~$-u���g *h��.ڷ2t;V'&{դtnyL]Rc;d^5ZU^a/Unu!olsu+ڪE5IdƪMM 0}ӶgsT8}T]��L@@ ��� ˒ǼX"N�Isg9D;W8ܹ :Uq^tQsUк۽%WYvo}lv?8E3QecT$.��@B@ ���tEI6`HoLmh7IOVK55��6AIDATa]Ô@dxciLdE:՛ٮIk:9&xdhA8^-g!y[qj.:]_Э9��1h��%{ S�}��9A ����������g8Z����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������H{'ܹS'~{��$yUXw4uEmoLj3իg��oƌ3���t-��[h}������K߂������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$)I;wĉ_^��5Ico+--{un�����p"��Z_h�����Ӎ.��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� AysNMe��@_=WaҼ]ﶉ+������NwS T3on4(,?8E$Fܛ��t �����oW!_p'>.rƝޒ.��������*g-t }8k\3Z���������`nrv 3Z���������`1g[α?#���������u V3Z����������HZ��������f_r4Bvmlݥ Kk\eۼ0h�������@XM :cVU[ 3T5ZVܟWnӬ-W-7ikWwS~J>^{ztUz#o�������� zլ)UQ^F_1[U{�Z;ZTk:xO}j8Έ/o_o|o{?CoIaOڹs ���}ĉg�����>\,׆`iԡu|tf?Q+M{N{ }./W-ڿ:O)올㌅Ғ /ftk}gÁF}{Վ?Ӭs^Wj]*=]Mo|O/ݦ4W9oQ, ?.`czmGy+n=UZ��������XU R߭TE3 mmJU^~;z۽i|Ǝ*O+uОx };Y_ZyDqlѕ'ȼ.��������3^*"Վbf/Q褷\ *˶eUu]k=l:MKҲ35w&|}J7EYee=٠khCwvy8BJ54]w2o_ATHӯg6]E+;s;%ֱl;۫blnsXW08)W; \}v͞WcɐjtIej*GSlsm4ZӟIנ峛 VWG_e-{6 Lc3fkmZۼΌ 5TM]y[[RιRo=5U|/-u\yįj7#C.QzfS9qU��������7[z z3lLeu ἔȺ)ᭇ#:XU+75H3 \7u0\9yʂc9{*)%[jbw~A&8Gn9<ŔΫ'\>3~o6~;Xxp[qOy`c<chw_mM:~SbL)yo=U6yN)_MZ_Ӽ,s$#ݾ<>0+p޴ckze_^~ec=[{۫Iژ3*h��������ac֪\RVWE(EYi)v=73EڶPs=l8e+T~[^\+U~o;V(?B)*;cg:ְힶvqJcjLuZ? =br*bml891{Ny)!U-kmxvWrUlZwȶ:'oj{E2y?de(r[[V6WYR4#Y+^;E_VNsMܮjUoC?G (s;ޟ)%T%+|˞ޮu?Q$oIVq5;m]{1T~k`N<mכ;trmSntmUqe#5ZxB SUU%Ӽuzzy@:EmMEgCkMm8eQokBwɛsJjo鲤Q:ڸX?|5Vh�������@0^v.HޟkTYiZ[?=GK@5rQ{ EZSumb̟G*m\j+H Zbj[&l )dgͺ@9RRR櫼b4mI#'9!"ZU,R UX9NfTUܮt#~듪թI9*&U?^i3W֭r++|';m'Wr>=|\4OUsݰUtH),vRr?_Q mU<kQum Klgte[j~Eʳ:huZx=kP((K"$e<Z羛?3'Ͼ+O=gҐOiykp={zj[W-6]9,;}3Y3zebַ.{NEEW'#?}[o`#��������D_i+)g3@H5C[ҕq ܒy}jUm :U=^lqCTޒ|M+THVk?ipJ/r̦I&yO4aZ9eZm[v;3GY=nW<^oS{Gf%ΐvרj}wNv; K}9W9S5,m.P~:b2t\ZhMpAOUnئ lTpS\/ԡ]vvxduO;HtXN:Wgެj̟]t@|z؛9�������~^vިԓV_LIhTF*U#]EyYJNRTH^Q)Wa-+B{iyZғqMVrX{4;}]m-}H =Mߩz{:a]<?Z-!IgKcJ^i5Y6ߎdw c?=7By;g#��������רe9u7TjUx}7IWV^T.ShBU"o+Q%S nɑJj]]?,1-ZX7X[cmÛ*ouxpr$}qk<on,ޛ>PjYmU 뙲dkvLʻ(zjT U?^pX[xt yjjZݝ׎oԬ_~pJ]?{kuۖ٪cw&!ڬ2##[5ﭺz!��������WZ9:znWesfڲ6BeNu;R`fq'hᬐvYفnStgk,SGTHޘKY9Rh]ڽ"7S+TJRHuO6n:]vlc[~{BPѴ]FڨLeą7g5SoJ[Y<_sUCSWƍ:BE6}; iJ*Sۑ>lNo?k2d̷"M8kU-}ҧw;W|n|Kc}ћ3V;HE27k#��������X }N)!U|{.tSŐR+QQ]e)Bi*.TV2u$O҇j G=w޿B%kqMDRUle5usHe8fr+/E-2LcUkjȘ}Tnq@Z fI++T@9'$u(JժLmw.H׊{TQ;-EӲMoN6e.Ut2nǤB.ɐBZ=t\?[zpʯM~H_tԌ_e9iQ6ys~P_ [fʷ4-��������h]F=yW{LVUJoU; TpGn1f+Pʈ~S2pW ohz_,,)W̖KUϷ* S4iu0tLʝs+ܧsw۔m}RMIU-\m}7=#IţfL{ U.qDW-zzA* uWZ7oV6 }ZoTWv\zRwD^bI [G���������@'4o6nGWpQ^ L/ty*h��������?v2ͽJ,>ePY:{5ع9g���������϶ei: ՙΛ'x3Z���������#u]CLIೈ%>sss���������@v};t`}Z嬅DKoID@ ��������� 0wS jZ [c=ronE@ ���������� ���������� ���������� };wz���M8{������ ~>��n������:F���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� m_r4B!oVqV+&hsW���������u *dὌtM~{Z?Wcjފ\~2ΊI46#WsWJo;RghU,v&낔d!U=VIV>w` ��������vfUR7 aC]_WAz:ղ񚐳Pe"iVsp}bZaM2laOT*"oaӨB���������ogv@^[_ԨUDFkǕ蹛S9=AsrpSH)7kc1ag:u*=XBT<jw4r&He?GᷞSN lT=Wꢹ?��������hCom;U񡺭rЋ+4eH)3˵ 5ƺ69)OOT$oVگq.e*ص���������Ygt@۰{!m]_=Q]TҲ35ku&|}J7Eu㻯B|Fթ_"jFPq[me g[K5iXMSC[>Yf˽igRմ8Z- l7!կ*+FG_1]E+;sRR*7OƤVsryYF_1U(t[ bF&/ScF+{2o_jЪ\gdABefݶGdZ֪4;cldeL3Whkަm/m^^WgsZ]Gk:H,'kOD{d:gbq&~q/mԸϩ0:l򶸦>l F6jS9��������Зm,4_ge7ǍUr|:/+wVkZ|bTbfVZ<U+M\4yDZ Wkŋζ6k窴i~V4#Be{]zg* ';ԠoׄjxpjWh|Cۭ+IʊJvoܧTU'v֨9/S<_ݣ>UEMݠjκ,r{b2lwwתll-\'.P_  ]G++t⊹]zT^]iܶLYQA xEf׆:2AYEQm0Ue���������t˙66hZ1#K7qsV(Ess yz9ڱBy M)TyAsZ X:-"..TiTwZ[˞qYRތkvލlǤ|y[ʳa\EuǜVu1ӱ=*Pz3Y"{ݬٹʷ[viB{@(6hwFGT6'_e-ZǼ`޶P FЎPRninUlmc*7G"Ĕ[+e[U*V<*gcNY<߯[܅TRUR7"ǡZU2쬲zw5*Y"ɿZw}Q*[3sLG[X:Go>*rVز6:;E)vnq��������37VfW*t^m+R*kJR':3nWTվXZe빕O*oH5:&[O(=&)UTƻlFlY9=/O"ϓ/triy*ۢ:5%*"7\ uTYlurqR32cwW]kTyVd+oQ*xT`5+Gson#RޜHp c]2{cOۻ ;O?ffihc[fZ^UeP,fCn3!@eb84;$Q1LT I'eej\V"8 :6c;!$}N4M# }|>Uss=?{w施zTA:48'ߕβ/-GWk ?{߈u jcﶵlvP7-?yЙbJ[z<������ h[6eC֎4bh]̹#aGouYOāR%nN=e]MG;zW4KLϷNS->Y| v3Nsuжcq,k8#-m~1zy#kiGg[omuu;#mUsM>=Pq,[ ������ h4o+wNLb1emk[llץx6r䨌عlըkOo 8cuY pS4/j”>:ؑה?YȳǞ:&[cq~a������.h@Rbu2 M4iy灍ژ[Xmx.U&9p(ee[b_49DOj(<a7�mݫبxyKgɹzOGYgS?O凅u}Znp]4X>mX[qŸlNޘ:VT-<O 8ֹݪnw ǖy_=t5?:홷;8k{<ǘS@�����t.Ѐ@}骓u byuI .-: {@4޿<6HKlI?51/_Ie]]PXZK>Xl)6>v!l=؛V-ǵ7?1|:mU]̻֒XhSpe񺾙 ,,:ߏ}GC</Ĵa+bXj<Ux_Ѻ뱸mm-/gXL9;j'=Xvc7n?4hXq<^ Tn������t˅оt vV*50 Q]{<[P·)Κ,[䊸zXTsx\\b\2iZCscϑ볠3ۋ]sjykl趘>W>@j/*<nUBty\[Na{mx211,;yl,oʖ'cXE~鼖6VTlKl6V_"v_}>6弨>Ĵ2nZ+9V{[l>z ګ]gb7_.b;[?bO♶]\7,i={1>(tx�����rA̺KrgKG]m78ƎOn:vpLGԸ.4sԺXxOC1cbCŠylL[:6>j|paL;&>yYN̋XW˲m̜?\s_)ݴ$56ŏ;9puyYY3;<X,ڒ凯ƁZb禷m˥qՇcϞZѸiu̫i{ݰ43WǶM˲Lմ{1?3~UkcmһV{ؖ~oo:tX7|]�����0D*,c{쉚|?z<_BqsĖ.ؿ9 �ή���@tA{f Lkk kچ8N/F'ҽ_�����[\6{M16."fO�����^ uQ]=mʨ0VoM?X%Q����� 9h�n���SA ������P"Z������������������D�������%"������(-������@h������JD@ ������P"Z������������������D�������%"������(-������@h������JD@ ������P"Z������������ȠvYڳgO�@nKk����E@�?���������D�������%"������(-������@h������JD@ ������P"Z������������������D�������%"������(-������@h������JD@ ������P"Z������������������D�������%"������(A' gϞzKY�of3&vG7����ڵ+?.,`����;�hN՟;v+OlߴSOe7ogkϦ�����ǜC64jP,hݽ{wݻ7~{Xre[qg{Y`hѢXjU\q1k֬u_knn||m����0h9g] q-cĉ߉+2krw5jT?h���21=uָoصI8 @Ԕo����=mzد>=)o-O1w,�G>| ���� hP d|QlXZ;������Ne?+.[�����@@[fo~u~ ������(�������%"G<;v숺������8-祹9W۷o3fG������3r^駟olL6=nݚ������D@K5*Ny ������p&Z������ЖU'.w{~9F,d=������'mjd<_9mI8������? h鑊{������;cƍ7 /�������]cqc„4VP ������g0DA]555^o)\x5oذaVUUU^蛿����``QA ������P"Z������11l޽1z2dH�٠|����/�������%"������(-������@h) [nA~'VZǎE>s>Sn֯z\ 1iRm ؗ{;鳥Ϧk{k{�����h);qe'ƈ#6P3ݐ!Cb̘1QYYy+>_S~K)s̝;'NmW^ye~F1cFvE|S[ޝw;Jg�����'-Cڻ;gKNmY17n\20@㺯RE>l曳un�����0 hL b6|?G}K+F'>(= +)Mմ3k�����M@[f&^>2~5[zlQ6 [__>|x_uĈ?z*ne)sv5qO϶xݮ>?k:7Mv;Mdʕ_rd>$ݣؗiI~s]}#z>;Wž,.k:vs84vGzw;ޥ};y>�����8WZ`ȑb֬Yo?>iZ:g<H| 'OZ.|?}=-p|u/SN/~KY3$v3K,ͮus޽{wvΗzR�:aBu_Owl}1*3uuuKڸqSL!kOz;Ti)������}M@xb-M6272eJľ}T+Ws;X@xUuZ[[cv O9>>[</]3];#|gNcƌ}*sw{eoWg 32(5w������m;o{7o 8jGU歜Mv5jTwT0aB&*ϢMoL T;*νZ"i玡f_HUʹ2+�����0 hX gox/yb%ɏS/iL󮾓^z)MCwVOEoYd4,2�����@&-SĞ_[ߊGG R%U*TA".?yyaߒo:iXd�����L@[R8[3}5_׼??B^8z'zsXޞe|&iIjcժUyKHϟ.NEyi;>KBjo{R=_=������ΕgY .}q,<_'O?lD;wN,YGY5 Ȟ>;>|x̘1= dYvm8p F<Yݛ}BTuؘDDwKM)=_@n�����(%myf,M6|?\߾h>t8;v![|yv󵡡!?=)}gd9UϧbuʕqOvѢOgըcʔ)Y1})i,-Emӛ}B]w}鞝8Nk_jȧs}W\qy!Gynݺ5?MWNse�����P4DA]555^o)\GΆoP?*+}w���� ,*h������JD@ ������P"Z������������������D2dH������t������D�������%"������(-mժU1hz ������r8q1cEH ������g!-3qs}R{s7lj'ȑ#y ������my{?/|ߒ+F'e>|X@ ������g!nzb~ͣ�������������%"-sGwָbzyky1bDTVV{������hP e?𦨺s}LңΛ(/C 1c;;������ hP bX4'[-q㌘q_C?RQQ??2=hѧ������m?p}?>(-7)Mlccc8,M-������p*-=vرcG-������@W@x X������g'-3ڻ;׷/ih]_d61������ hGF?-i_X4G,������ �Z������3kg(U����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/Gantt-long-weekend-look.png�������������������������������������0000664�0000000�0000000�00000232364�14332737457�0024506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��V�����BB~���sRGB����gAMA�� a��� pHYs��t��tfx��IDATx^ `TbMĶP -[R@zѠVA  Jam+&n֗/+%Pp+MXfX^:yed&3 $ߏ>9y9gfr<G"����������@B_r_���������� X���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� H]*C=T]n>{uCn>��������@˼jsfj5YI43Ϝ7OjUx\u 0clhP)GFTeu%5Z>NmM{\Sѕ=��������2/F*mL1ZmaU2 v5<>M9]ާ ZU7VKNƱ��������({n[R6ksK괝 m4Qi �������+ [+!isSN5ڨ;ACKriq˴9N~Zwcy7 SFB,,E8sR7��������}2,Tv_˳T޼QYMZ\s]C!?V.'[WcQͷ(f:��������' n}jj݆2`G-���������� l&wV?ZjY����������pdV`u6UVs:mrM?ZzG4(PT/$НJt@l-%v eִwΟN>T] Uի^5ni#TxrUHaYmm[:Wx[}m͝y"P֖kɵq7ǩamsPF|@5n @zfVdՕV$ܱ/=5d\`[(T)7be,Չ W-w^lw=*|-n96}m���������:PU^lRt fU7%5-_[ =/- e,i;Su+ 5~-bR j~;f{vYϹgS,TvJ~[ 5 Mgj[(QxOA(;|)0jzh];[S*{-9&SK@(O$χF7?uqšЊ7D\/Us2uCe7)$UׁxzS< ˵L =k/lzrR`uƩ+Zv[kU; ��������t.buURc%8'yuk;Ԧ;nx|3C;܌*f߳Xo/Qlw);M.X܌U63OS Z˷Z=U48 -SwoNJk;k|k-h?VK6X Tfً5}J"[T'jIm6{6G S ž nX/P]X٩$>тiuuuϺ&_ͮԚ/pھwXU*zuO,J9rα9';RjӠWV}pkVvW.Rq/_ώs! DyfV#aFNUN7PMlu7rkYCgpT���������`�BzB+qZY*Z"ToEx7jJC^e;gϖPpBkօb k-{Pc|Qܬ ͪj٪jo;{]E>v[ׅfn9NP顲M+K֗P;%-(2]w?[gr#b:WZ[֞7YV-[s2u-VD畫R3ʻݺ\YIߊ:V{z^B"Xk٤Bb CkU��������ilЦr5[9ʛ춍 .Su3RyoFܠFw0FK>1Z1%G}3\eTm/0Lew+{;BJX -T fku1Zenk _甸#7jSp(VEb fD˾tJolG35Պ4z&ֻ~hwH fN Τ*l^ [ }\ C1Xa bWfyj{~ͷ84/iܑ4rl2sGh٣+n7t-KPa"kyʏ*��������]EVwmW#Kq挚xsNѬM/ê*-ݬ=&2QHq+Ҍ^Nexr4"_׼ቂ.t11$;{+ZmvuKyÖ|]uhUY 땫[P V˘vPUW9Z|}{NvՋ VܖР0]2VQg@æ~yDM3Z_��������2&|sS՛r@y, {۲ϨSͣEʳ[f)kA yϫg@Tpy^JA6{1N5t`}ܳQ mjoh$$j8ܒXŗ-ܙd_h;*UX JTus McEFQսn S37${Rp_[vwM<?'�������N,c # xl_;j-s`{;Jզ6 kZ9z4eEI&nvZ/NAYr-9U)!5u:_+|H<wEGV/R+n[rUC\t<dGرM.P^N3*wM+). 4leu��������2$ڠvZ}\"YAU䴎pw*8'I[|Af5(]fKTxZoeNԴE+Ua{8�Z@t, ;t'¸k襼3c\ 5*06HN eo Z��������2#ܠMOæ5ى1 O8uժ~ X]Pvwgk*Z_ݶqf^1;f7VϙJ_ Trb-J`ݽC׮lhf{\j7Xr-p#ts ��������5eF`H˷ÔInݨ*7xu@ ݼ)aםNQymJ:g{f+pʴ齐k*ltMJي<�y1-pWfA:-~Z^W^i(P 65vn϶f ��������2"H[t8mZ3K l&[2KwUM8l|#Y]W[ ߨE~6s}mz*Ԍppajשqg<b=] dGZ[W`&7PEd)VÆf+s6Y��������HFVVCRiY-7=1_VA7"2Py.meD:]<ը+RM]{VM=>mXK`6sD;\_+UzrU*4Q']i!3aFw(@?Sk ~"X Hڝ3��������2 TH!ʻv\ dth[A^* jӺfqmݣ~niX3n[ퟻ]X_u�cpN*Hnl-�'v:[yGs#w$kvG 9qa; �������� 6h40;~ʾ+Z-P9ªV9R\i;5ޢp0fNT ڕ;V+ wBQ*lU]EskInwrT<$~f :^-FwS;<O}AF;Wz .pNL)Uij!*{9�/g/ʗ8_P?RwGK4hb#]h)Uq��������J`ug6ܠD-S5pn]'fGܼ)YٗT]^KנAG׈4{-k 5ʝUz[yp,[E5sF({XM뒙S}| (RijhgKӾ.VH ӳ5:=ڱtRFVulC=RL jCΥ% D)2ᜬ,ʊ{L1>:_(\WJ6Bvγ94vHf�nl[/P>g]7kUoZ]"<>=Câ Mqݓ�������'n/ Ͱӥez7;n+S*]ff5O"e@^hz6k "ƕV]*/4͎g|Z2T^B5nvXShӽLd(\AyڇPn~ {BJ^+^ ꤍq)Mo"*w$r`E3mJ =/mPxh˱o,Ey}cմ,4}T ~y_,)[M��������*ba{;dlw0^kNkǬe v-5}-l4ZШU2.׷΀STVM{^ŗl;׌K97-*nk=*o\oTczWTW,昴W_޺N ooTb bUx�֕)*,rtswgi*>߷yVI{^ZJxm*s,ݜcfnuoiqvWtϗ=Z}+QMU�����������������8U����������pV��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IYغu;����������<x;t= ������������������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$z,pZlݺ��@<x;n �����нtf :���tm|�����>:^]���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$HUأz/W���������uޭZph &y^D[%���Ă _#ufntټ\4zQ,������x]<ڬ5pHfvU>0ChY ��vhPs+4d�����t`au nV0z5}R(R{Tv]rr*���)(oO)i] 5RU+:Dr������pu*-\@ji֨l:ę--Sť9N���FkV^gf�����Vϭs s3d+E^| s;W/Quj;$.5df<ʍ󠪭ze3^Y<��륁gÑgnחkO~7ܫʫs\j7˧n0k0-TxSI[~i nXi R]F\@[#_B7̶ [TxU}[aiIjps������.XmֶJ5GOUj'Ԉ뗫ֽMܮU34:kDsjs+JKn[j{-8'Kze3^W)ԠU��@gWuDgLJ{e9ÜnzSnWf)*-"&\{q34qWjiZv9kjPͪ*2PW;kTfX˩+VԚvW|aeoVfk)�����.h`uMlemg$հj&>T`,{yvg{WE Fo\`l=sTXø{U5@kʿk?tjr,[�� 5rNJVY#'*|Bٿڦ=wZ7å{+ݺr-4;j@EYהS#>=CsjT=u+Th*w9+n^Z{V[ݪR4T]hVc**�����~3VۤAի|T' 髜,)pmfը|U6P[&Kٹ#J+*ps*nSn~/rWUk#U��NJjy*/v M|lw,yvk3ޗU<RTţccUrk|ye{b-wkZg9X߂Z[bUl`R v=ҼQիҔ|E�����V{}g=&T9eh pr"*'7zSY֮m2}M*H~C*k: . H:Ru# ��${xicz3ׯ ^PYiN'+ImPKpF:EEy@ .崊W霕*5v-ֲ1�����@7E}50CU W7���Х7T_^+n/Rnx2|iJUpZ tX3[?0cM+N)*KyW*b|z[0�����螺lW٣oV6[V[ڻkP|ev5! j5OB^N@g&ttZp-SNt�� kwKU*-T ʿHw@6]*.Do'7MgrUBO jMc5csS����n>cuD͞+5B-Рi5zX X]w îTM+U 6rŚnRHy@ 6P+U-y6)}쀱*gmœ隶F .wsfW< ���]_{[sk;vdkkE5}ҼN3&vEzNu`*~rv4Xss'�����t/]7^ʽLS_u-uDJN)€Nհcz;zg傁<-?}U_)SQ@Tv[/Zӊ5{*T<F˯g\֑9䦕jB���]S{ZC97MT5QWahV>c?էF_lںj^\`F\�����.X5U&W-Sɸ *Y^uU<ӽm+~iݢ*eZ_^Oy֯HeV)evnQhkT1Xy+ѲY��kwC;b͞Җ֢m*5PΚ8|^YZ>רB͸` G7Rw_�����G<`)nݪc���T{-�����[���������# ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������HG֭[!���dk&%�����@ґ2"7���9�����{At ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`@U=c|nVWTs~.u3:@: ���������:J ڼ\4zQ,���������@*����������$A`ols���������4@<Wjy- ��������}kB8y.k֐њZ:-q{)kXMyl9^m_=CcdxtΩ4\ux^c?ov|o-׌).AySdCPkZ8^Ru UB3`oJ-z{p4-MZ^Fzvق*lI}]nNՂ'ǭghjni#4ΕZpTMD5n]WYv{zݢau)ku:vkX Uugՠ,||eH~iZzgTP?8k��������Pmٲj2PZf$P* 8e[ᥡ,-Tjt8Ceqi\YLX{B뮋3šMn #Epߺ. +(l[֒ח1z)wƐo 5Քr%gqrh 5~޵)j6-KeSkJ|sBo})Px-cX֢LҔYOku8:��8{[G �����u ZyDʻ}B&{bR@ֹe)njzLEV˵n[4M|4Yؾ-ߤJiv4g,Њ7"묛5ɽLs˾N;I+"2T[ӣg Pp ^J`M,*Wpxg;jhyb}TٗVUt6jn[@EY5_/T*ךRs[6z9wWj =ۜڂZ6]{*NPuUf,g79eVu@VeXR!r&tboS 櫯 ��������;UzAVWsT|r[5T+Qت׀"͘iB vL|N(JU-/Kٹ#펵.G܆nvoOآ" :1_ciG27Ssl VJU*kZh֑׊Ghh_knG~*}`uIkIPʽB+WF;D1C cV>9ʳ7(L8#Bl4Wt?>F^_4v2&>Jk_k9Wczp���������]?;j%a-G(|us/Wuhj<vSL0pW6X٤ʶ를۪Uv^vCLCg=o;d~AqBU>5*̰ ;*T|aj~AU?B٩=iCL(mF I6z\=:|ToK 9���������Hnp|Ty5hVnJիw8|}Fȝ2!`{Ԝ{rUֶvpMdR-uC *?N~Up1QWUk{(�����Ѕ}yV ��t']?ztֵnK֠jTz~nxfo:)m<.vH/'ohrUt{_+Uֆ*Ԕ`{chԤtsW~@eo;7z15Q꺖mwSӬ_h厀Z=q[+O0ViFN+gjuǥ֩v6j׷ˬ�����ڪnސcq|?\z_#OӒ'9 >15Y$YS5cUZ|Uњ��VuUJ^;yj-vLdz*{ڰQ ?3^ OS3TrJty6dnا=F5OpsMfV/ w@*W4T9~U7ҽG ^4C;V\<tvigu{aR#7NSquz+0P7i3{:#Oֱs#>s_*8HYY6|����\Uqo<覶r<RiTr(?7*ڱZG*ej3k[%WU58waS��_΍fUa:3I5rebwgفnE7eT_5*S"pϧjDvo졽%)b[4,j=GkހJ.a-s�=7C#OVD-4RU�5mOU֡ dtӵ<k#k%ZD GfhϷA:f=iU@[՚F1+UCPW2mܦui`dWY~^#I^`U+_u�����{)\TN^[5.PTC 5ߴGT<*[ŗ`: 5*5T$5Ln/^ϚԸ}Vܘ@ZK.c<TЛ*��(*ֺZvM? Wq5UV*_mooҲ){bUr&_ʬe.cvQa_Y:_۴=%;N 4MHQt7Ce*0j18)?.yvi$5kWi[oM+kh2Sʴiir8^]7Nӭ8KjTM#푥AMS MSiMlg;T[h?]hgRڞw�����U<^ZV&J3.m{:m^ wjիGhEuJG+:S"TMKn嚱�+f[lqVo ABnVwP~}oC+t �N��truC997N/Xw'j=9CKC6h) N  Yز-q5=`ڊPɅCBv(wJih]S{%X&|{<8st T֖cb۳-TvsA(׽*YZZqM -~-WS,=ɾy}ȩ=eql{B7oC{6Y1^`mF+вk ^XZR}��u@"{i{MN8&W:v����ҬNy*v YԩyQb嶵A ;QWU_ηRU>0CC6CT6gϘ, hPͪk-+!}mMz2=|7kNJK֪iܫYG(m=&;5q M\T]jA<R駻er@Ymm.!K~Nnzr֟\jtDtWwbM-/op@ 6 5vM{AYC̺rM;'A��4UA-V?\BQB��AU��pPWJuoKoZ."Td]^-];iӂ63Z\kY}h8gZνwyJk܌8R)Hf9e䴶u8=[Xm1͝5>Z1ɴVOŪIímhtSh=BQ'\^xI+B| oro;֓��]-VrxVuKKT0Mf@G|D<�����쿆W<]`XdsUbWUkc ?ڣ=W+V+{4M XTYA{ilMt{ݦ rHow m8&:U?c\kNU| >KpU;>Z,aDoW >*w4XCW%5з<P]k-{b-˚f���X"Unp+NmͶ8Xz+Fm^Y`����NKbM<߽3wMw*&g|W{*C=zҝ5`m\=Z#Nsd 2{Jy*{ys% OJdvUG lt54s8@ynU35mh r2묱Z.ψs_'a8_���! �����jPY(/2F\`ڬJ+WW 1>'tp7r)=#tހJ54` 6lr6yzkw\NNK.>gZ{v/y>] sl��2������Hzt hָH;`=^u;֝8PHar (Z_Uv[˰g}55m٣Лԩl[kֶJgphtL9ʻ ju}ޠ{-Lsnoãscff<mj}cH[hmG[ ��X�����@Uf yytX- UivǯI T +S=[-~`}g緫R9Ѳhl{*3BG6Bu_ JKê VXk��*������H'<]5{iz)Rgj❾VmTݥmF s|v-^RS82mӠۦn:|&zX]Ǥ_V>BE߲wԨjm?<WWK{S,%m74"Et���*������ңZͪnR(js.Ӻ fu~vi59lUTY +noa_8L'8O!|bIp*erUJ+I%o;IʞTUڳǭ77jy JUsjֿqݮWOw��܄غu쎥nӦM!N=T 6F=!p" j@uΰ�� bSudJ)0KJeoAiJ<T}4zeUzULʶǂOTrc<e!5nvZ@rnߨs.tksFU\Or4QҴ!cܬd@{ZyB*S$2 W*}j< 2 =5Zcf@eoWD'm$Y*|.O?@lD_eّ]c֬yviQuHQ\#nG*J14Kn.��|~/Vi˖-P۬]6_2 Hz"eB%%J9oHa�>r%P8cCyh*$T0<^Iy)CׇY֞rCBL7M e TSv|gNeqeSօJ/ ۔=</41R)Gcym=[*GӖcҴ}EwcS`TihNPM5Op*Y.Toacd-.xR-��t}/ӶX}4n8w kX4 spn Vkhnd(v�i6k:^��}/S?cĄIOěDȔLyH#%oRN�`{U��p@ (|{:h:��|HjM$RG+O>5ʓ~���~͵ 4vUjvs\W+[>M��3贁Un|v2(����jP٪z|F[=N:Zs14ѠTh��S2'%,HW=���VqW)yUV^ʛ2]+��@ԩNMP/?T(]r jՅ-ogNem>H:xkƷ8iNvA1/N-BE :q[")vke>K\ _uGRfΩ;֙0n>����WkCM۴*P/��@g-*EZN𕋙cRV_v&=۶Gtl}  -iqH&<RM:iPUG/jCRMyH^2G{^̱8]VnM,]7%o.\<Ibq~qs衺6R6})-1Fo8){܄ִ,]5%oD)]6w&>aT!fEsW,Ԛvq������� nb5.8Y+L@1]vipkxDTLkAKwy&sYՆ6BYɴP?9:ѷ鬘t RJs\-=zK>ٴP/]|dv\;�������N)RΟouWI V<+Ek ,0LWP–y^ڵھ#S;~n|--=lɳ7RWk|$g[iŧ׬BowjWLZs'%lkɨkvݷO?=ӟցoZ z)8X >e?Lj"N9\=LQeSy7G/1ߍs6@nqR[[뜋ޱ[ۻ:qj}q&^}oQRK+(<<YOjnY_ ֲ5DIzkJa>9 1;oqp&d:ٮI1KozVu]}ܬs&[&z>ZJ$^֒lk9L'n1 [uȹiFZL?s~]h rkӿoVsnm+琷Ik k\#IG�������bwɓ_Ӿ}&ySϢ5zWiŗH;7ϡ{'vW~TxF[zvo;o8 ?8wܝ&+ZX5atgk~]8W+2Uj&}3$;: t?dVw<YWʷ/s{pw:psMpY =\8zͪkdx}W˺:^wNPOkybӓejΨHis(WZ[+<J<O;ooֲNSV|jV륰5{\&10Y|W+ws:wߗXOٱ329yudsH+WVϨmK>u4?Ԉ2WW>uixzV7s?^ Myz@S缶k2I~ L5}洋=8ǩ`%ϼ:ys(!s<RYc~>!0!w������-Vdfp3=҄WeZIwFʜ[^^Ctٗ;w5Nw9WS r.hǣSZ%:}kl]DZ?R;qoo[籚p'TYPú*S"&N6`AKL}-􎱛k%z>y^0܅5㻪DE̱r#1گfa<C/y&&sʝ'z}WYeԍ:~%zjk9zhҜtK^rvؖޑL:Pkj׿]Nq\[l(7^U7}oM霴7'zsۜ?6<ȋ̏^VH>$vrd-Ǹ!}lo_dlCܬ5'9[bƝ~|?gwF69'/UQϚlVo~@]Oy^g, sA<0}y_)DMM${?{<c` iEx MRֹ=4?Lxy_}9dD99Q,4ЦV�������Onfhd߹-xX;Vn9FݒbM΍[G)pГ4ԋ#7q`сWj0ml]bu?A 3-5Eԫ5[Y=O ok-%oLώ=uqهOzҪK4289ڮ;`ׇU[#[3M6õ03RgF1k M.{̐n'8ZMc_`_w>3jw=g/'XNS=]3ǞNsTIŧlH$gD嵒7O䖎;-^r6O/OSgәv+O]$f59-;Nsn.wORvVXu7`^?[ [ﯧ3y&J<3/IJ&<S*_&nc)2CϿ.ε[]k4l32 |=|>k9Y~?rDdE絒������� Nݝp2i&rq矟Yg_+Xy =UpF&~9ֿO%잵^][{OWUޡ͍-N Z)v܌C#*R?{}鼃GFJ|ʝ{v^Y{z^zzt'/I' Z~W`uɏYvyn汮ozwe;;escem9b=_Л%%tQs <r_yp󼽟yroK&������ OW-X%g𱧸ӽ[ mjzʱ )52-+עUh8q[.s9Y}L9'~neOLnii SVR"&J~N\cVA-UYM5ng y]YF'#<D[ˤKN;nDOI&xOcZE%{q԰:]NIxMjv]7n9'y֑$%lt3-+[x]ֻ.[^ TW5<lY-XϘɛ3Y[o֡e٥iktÕX/2<{'X�/)+dƽ幙yDMe| ⍷YRi N;õwsz"< ӒշHdJ,$gȸ̘|;3& 3~ҁ2~Af2"Z@wEDVxOWbڦyͳ^;?sy<K#o-4]er>u[VvzHdjݹeWכ-\g+UNÿs3v?gZ �םϷ8f>vqZw%vƶN88ooRՅ}犵)`LMϬ\kOpΧiէ.m%⇯{t$&U|<[zx)ͷ7 1AK&LU]]jmC*]exgO<׻<i;-kޤgGJ|c~=)'wKUNU=o>\]1#QKֈԖ�������-ZzM'3~x`<H'�qeqg<DGg֩|JO\ ҙ?תyek֕LfZ g:,|JOk4ʻ)5OdN:V|θ-DMΘjs,G^V0[S*#q7XG:fWlu~rSxՕNK@Xw [H&ŕSj]ƻ-Yymw^~\uueGڅ 㢟'JydwK)3Loo7ݟgyyDMcPa]?}炕jUE6`t >}b]JkV]Zӣ:bsm]Uw{I^qkxy}lq9şxuZ{y\g3^VJ˷3)cpfS"&LmxZnz*H{G/<-Y~?LQgDz>:vW?7g=rNSOPnfT^hL~+ �������j+Ǫ_%Ma:0yU>~t|T+LgNwZE%v?.+}cd̔[ΜMgJȲ~O2]kޟ)owOksͶ;VSuq8K3?*9i ||䈷QjS_Ɨ"eS7*Zs o?}Z"ySg?R}J<yN()3-O 1*<'3ٗsJywU_T[&w>v:?Z_Wuesnk|giZ̹oѿNs&ϫvۍm)Nk֤N-_9ιp^Mp.1JI٭}$}{?g{_o7XOV}=iTmmk2-�������:^PflݺUvRF^z;tz'tWc2~w۬`RgOiGm@th9|TQQ87:ֻ^?Cti@uΰHyV믿u>}&[v3QGd!@=dSu^\ǵLh 5<W֥Ꞽ26tw[Qz^{kР*" "=)Eғ�������dnUO+ۖq*N98i6?C=8sS"ʒښոGkWqFqv|x N+KJ1qv<tE·ÿyV I�������U~+t ѸL#cN$WԞtfĜ8l+OJ=DVqz������� ~F42(@, �������tIJJ&<$RGdC)xv������Dh ����������IUI+K"#%,{D%u�������֭[5x`w,uv! >F=!p" j@uΰH駟_`}HMM-Hwfv/i=ҏ: CQz  "ҏkuM?C&:S5l0w,wpv�h/HiQB`UzH? 3PGd!3z0zH?d )z4n8w ݱhڱ�#F UnTe!@=u`.ҋ!):^P}*����������tNb;LX֎=��][~;5f=Xjz47iOnQݳj:?"2~Af2H/ZH#DI[G߯ԁBw &LE֎=��E`~_ksnf7c̻l>x֕ze˖2$zx=zб?~QܴCQz  "ҏk!FXMڵkiZ QU�@`i_wܜU+ا'O 9o *_nf�nu@0)3p=BzX 5kp&wecѨc�@{XEGymzF{Я|Y=Q~hX}fzqst!}_c~\c=yQz 2Cq-)j_`.՗Ꮊ.}m=vY;:=Ot^]C(}6kѺ:ic˟ֳS&G/}vR[j[ُ$T`v:w}vwK)ۤL]}w;hyj`Gm<g�oU{kwoY#pL7@wawN7K\vء0҃Gd!3L \ǵ^V#:~U>&&jj\3Nz&E}駑BNݥ8w}HĮFoHFwzN4T/yCuhiM_d!؏)xOc`Hs8eʭΊ=ɪˬcMzN|lߖsI���՛ouO;�ˇ|I'Iww���@w=%Oc[pkxDh]t33APk.?Ws [ƴB=V;yjcn*{R/غ]p&W`c7Ηɺ>��sG{�:Zޑ����tjVzRÓŝ:~n{rN^n͂+_񧅾VY+oA oxd?gOjr)B bvVּsʶHrnM?s^xq&PB߶|E8#چt;Y;}M_b_H SkriOh#u/]?)lպwt#StVǏԍ/gGgu'ؖs~j{S=gb���������nbVϳ^l٣o[u;fuWOzk>[u\WFelZ+V kEKzkm]ʚU~mtkHwwY^~ g:\ϲqBdEZOVy{-w{Tk]bÄQ{ХfMb�=@xg#uj3ɓl/h=25zz?~Yc/X7xiyv-9z;Vzan| RWʜs*O��������[jpoş/ZIw0AdžՄ*PblHúe568-^h}vP;>,=|o){kV5iscx{dZΑ|ZA;4i΍_wH!%l;`1ӂZ}zҿOְ[~߾[^ʼU//:)'ğ28rwF^tu4C媨VgM~Z\moYUckJ1���^N|;r_7w�����Kn/29A/k(:MKݪ5ӎMM S65EsMҎn˰~I˴7N^d81M9Zb'l t4||ȺO=%<$kO7OdCK퓕p'.%g&pn션e䷒^d?SXj7�\{^e2}ĩG{y%���+3zKcD菳t;����> Χ0Ak䦝؝xuaomR?]Uy7^0T<︃T=uhg>YiUzj??ǝ:Me^SjW^r>c}6am}���p4 �����Ҫw:Sn05a zFΗ>>Ĥ;RT8cG\TK)5{5.|Ɣo]w\mJ?=-3or[淖W6q爓'9 w͈ocq1-Yty\hR]&@p6)j^2Z|J?ƻRexþjJ���:3 Qe:ĭQ(!&�۳FkzIٌ{)E1?-n_ӄ����κ~UYWbӿ=ӺwwnXNp=uFiҵտ{XS*hdwKA?s2\;.渳Mpzyg.G?;K#oaao>*wv)ehz'|����~_Scܨgi_Ϟo:㵊ڲפע_453ṷȌCon�u#젭]ޤG޳L>J'ady����nXUa*[}XR~֧zJ<e걧 |b՟itܑH;y얧;-O)߶qgvĦc5jͭ>?nmkmKU/[io'lQQb?RK+0a3n KF^j-Su쮴?z*Q}ZiZ]~5:71l{mY_n-'MJN���@uWurO/_s{ ` Op����t_ݢŪ̙U)a:,4j{?u&;OSzZN8iy:ZƤ֧g͕*'aI,4|<具Jik{bkUY?5zJSYUb;BkUsMUIqhViUuLqx<߲vꆏnUm9���t~c4Y{տzUSvvkw[_uѶsʹ~yFhJ����=i֭[5x`w,uot饗cDO<񄮸 w,wpv�h~oHc?@;UգG92!ƛC>kFH/\8EVOwmzȴb1fri^Tu[q֩#O[L1ZGsm ˏ3jϚq3F>Ad!3z0zH?:Kݧd:~����1S=?uyQY3Rc9]qϾ?u3g8k;s;Z-ܟ.����]Ix*)m)xeI6���1r◴OZ}3âuA}jgyQNWYzf߳/E̓vjd-jk�����ZjM���==tVZ[G@knu<;`g٦+g:^η˺7����н0|ñ��������8:u`By)xL��������EU����������HgjJ$^YҁM���������8pzٺu쎥W^ю;1dvǢQWk�jt0tTC;ҍ7[|֬ߍ^p ;oMzA{ꟾs=3f}Yw @d!3z0zH?:KIkU6 ��E`>jtcD`??hǗ:Ca7ӏ: Cf ҏk!FX��@F"Ѓˍ_z{<}̐+?_BO5z?fHnu@0)3p=BzX ��D`-3~OlXs.8=F |O4&Mz<XwX} ͠�F5?fayQz 2Cq-���HVSW뺆‹u;NYmݩ]?b ;Zvo;qvyC?ߧϺRϞw۽lٲUCwZQG:ӏՐ:zH? 3PԃA]Cq-���HVSbz]crD.*7JM[|nn@=u2L=Ezq=BzXUv���:A)^Oh/Tt97[M5ewUk"{ˈgw'8-i5z����� -V��ZۺB5!?^kVZ ֳ7h"Ejs5nNbWǽt;ܢLtY{]kwlϻ(;#N/iJ LA=uB=Oю?վ}ps;& Cf0`P~ZQ44hqqnNDՈ_E`���)!Oc mKo_)auΚbet!B`5l r3"2Cg?~~��m? ї\FX��@F"^[WjܢW|?xu֬QR mG``Rҏ: kfZ??숞!� ]>T}qwt2X ��D`.xVc[EwB; *LA=u:s=)S[poc�@{wyN:p{3!8���W7ܑoJF>X~w?;F-Ozuȼ&?8dd]yc qveuO��۶v߯& �@8_oRC`���86ŗѣEsYi )|ܯoVdW[񝠿SyBzzW?֭3~��繪<~��׳!yj3@GeHWv���2˟O>D`>|9iSN9 ݵQGEWP4SPGd\3~gV5]�wʄ ǝ< 8��2C_&u6_W������twV��Zkҥ:ճgOz7;7l`VTTvܩZ;˗/[oeOӟdz5����VdǸ#Ϙusgo诫wG�*��@ L |衇^{~mhhHزg֯_җ+VS����[=1&8At�p X��HA}}-Vc9Fo&Ol>5EEEN;n+_݊մz حY����4xZh�2�Ussy̘ TVVgZ W^y�soijZ˿z)i}M70����ug5iˮ/tԩY:ͷq7w5pRGG8ӢZn׬7?ݍY'Y#zC̼iB;ݮ f��&)hߧJ u~��tW^yfΜ;L]v-S?3͞=nj=t!h߾}?\tW_/~]j3j}g+����]/?7}׳={ڣE[CoE;&=oO󻾬!npG[=:>=H/yQ܀ ^SL[t>GP{*72]ZNwVzI< Z=mwjm=1*7�p0XM suSuD��;1TTMڵkV&v?yGݻūijzu7﵂51e����K;:gsp'zwߗt\/nL|O#<+v@Gzc^Xҝf=f>uǾZ$_{CPm{?rTV֯*}=d�CXM٭o~zrNI?5K-^t5|yG}z+&˙;ǿ~rt �,Zy:餓Ë.H&M%_駟/~zy<c=V~VӦM���@W6&P_տzH U_c7ׅYsE1�C^X3-{e�pXMbS:gfT5Ao䓏 }Q{_ĉa*tMhdϚ~ETp0ArfͶegw~Ь[Inv{7;-rg}]�LgZ֩ŪiEj>SM0մH5L ֦����R:3Ghne4Ct;n^Qp 1AUթch/|`>{"] �>]y>i3iݻ7f;Y]]m7u7c˚yL7xuG?Ҍ3aSs;wO>��NLT󃡳:nEjZ馅ik����9OyFik\mC"|m@ۛ}I[g^ ꎙ>5eߝ.(%>v9|6I' �]yj7C.MkX&i������;FCNIgsMӄ܌L+O_Vrg3W}C߳FS5jM:|<{\1riˮ/t\]m٧}fOwew&Txϔftm �ڃj1l0飏xg gy=S��؆ WC_W >+tlݶmcY<@0s<vXf����tM٢Z/ZtNZj^|˳k#c^^YZL1e;͞Mz_^z}Z)|g٭o2[b�@*v{^M/Ks0]h֮]cw1AՊJsN�^{<?~yj[k3occۄk׮׿o) iG������t]גe͛뢂N˚*,,}Q~T__gv�3ΰ?zꥢ"{MF*-Yٳܬ;vwȑ#u5(//Ow晭f8;;[Rìn������t] n^kx ?]gpv+Zx6]{�31-V_u=SvUCK_rNҒkzg{-Y=giJ U������ &Uμ5*Ї͟;{϶[ & ]>ci&YWi1c2w#޺Mj��H3gMN;햫[tƏ΋uGe9~?zh{ZfeeB�������VIǩncaIdL٩&K3gn8iZ<3:tm L8qoY6['�����@Wӧ!g>_�@k\PRE` hjj;n5z'eZ�����} v~oMzC{��[;dz iuV mw X]voy&z76*��E iǎ?kx9c`lPcƌѳ>uGs5q۽#zH? 3tzxM}k> {#zˇ�tiS}?᳿0l8B_)l}jb_G{z�@{XXEG"^2~Af֯�L1쟏яK_}FX��(V=Vё@=uB=Oю?վ}N+d˖2$vCf0`P~ZQ44hqqnND`5*��@F!!D`5&e!@=u`.ҋ!ҋjU��B`]HO?];[nմQGd!@=dSu^\ǵLgw۷o'|���������8���������@V���dJ/fҏ: CQz ҏkU����������H*hs}7m_=d'<\tn]nM��������tVVPYY~K ӻwo(B/TyIM]:��������@XM~W9Ԁ[ <8oj:=3:ꨣ :x/K])i}3g},7As<��������&aʞW_ Kt7NUjoد޻D/r5ԣ>Fg=&zHR3я~O>87<C@Z�������.j98+W޲_+^D^޴xz-MsMjO@?竡Aoz5_h~Gu'-7=-fRlYx̙_p9.Lӌ:4ui+cҁ?~xVٗDb[+{?vf_k׮#=L}ofy:]��������"tkZ" =^u_ `ok |~~,T/ô0p-^yet'+;;[;5u=ƌggl oaaA7n֯v9S%%r> zqS.22&Wy]�m2ۖ hcm9O***f1_sḻI's]Ν;xbc xO4 8e>|ν3ekkk|�zgt۩HNۧ+<ݔ5LS66H4O"+V5vo/pzK#tu׵ě'HYY.~"鯃T.CF*W5?F"\؛djjyݞy9Pׂakl[ɿ'}-Ӥdۓ.93O"Z/۟Rӎ?_R=[-ߏ{ts칗|mmDOcؖex2K.>dݖDe2۳s?-^d!ѵ?F窿bjlϿزe@G#|?i}AGygk~5 X -;imؔ}睿_~ӧ J`yAI DCؽ{ݡĶ5ARh6ne9.9v&]aQ3O/`lilǫo1*;l0;Pw}Wp{9E$��y7UQQa&r-?b}Q{׫ܶmy=E~kc_j$a6yfNxLYfc .n/eΟID|4Dcnn<7=,_>/̼ .lOu0c,gԩ.']Z_f:ɏ'5csc37zh5669=u] Fcm>tׂ 0u`U^^SN9ŝ9m̏sss5bDf8ׂіGZ0yLzku9d9fϽD)hDՓ_ke7nhI z G9=7Den fzsU$ۇxZٶdׂ[L3?SG`Ǻk+:99# ~@l4?x*`oyd[[$~')~YGmc`iE$ڇ߿;H5p3 x-xΟX\4�+ٳ}#sϷ^&zRVV=<M�s#oرvceU^Ycncs݈fn֗I֎Ws| c277A/kr/㏷o777~h1c&rls eG[='֮lSwnI4oL=ʕ+ݜdu&] Fcm5t2֕΢+_ ~޶�LbӁ`_ ̶:4s夓n-|xm$:_ͽD}滛u(OzTجLhZ;_Ӗʚey*]ZۇDž={gtker@&"&: }ؼO?/at/i-M2ymu� lKWp>0<^^~AWiij+S3}d3-zͲ ݁gӵpZs��??p]s 'Cslʥ:an_ox 38͉fmn*F?M L?sCܔ3Rcn>կ~0dz7rZ[9[n 4xz~g#k;FY"Wgў:ׂʱNIڵ`TVVڽ*L+_ *aUk-ߏmWcxv{??O[ޗR-k\W4H3u:|ow\#ղml~\W=B{?S-ۖ{-n^WZj>/OeZXt; `gzZ%c y6/6ţd1AU>fvf&j0L߉|XX?o^=mS}ZMwLJ`��aZ<_'bnZy5?O20;”)S-d6]M%۷tJXƶzci͇~IfyᵄJY7 /ӽAR\\N\^=$f̍ٳgݮvnt%93Z۟Uӂt1hZLdz-:]n]FVu0|?:Pׂٞ7fsz#F*my_ʚ0]-�iIZ]|*2Y?_S-KmlMtNt[gl[_s.gV@XM mԲc4f̯C$bM𱽼�f{|gkz&gw&b264<PLdA]/(m8м&8fy^j�`z[kxϵ��5yݐZ|276ƍg'b1;Mˉd`+hl˪Um1{d673VMXwSHjԱn e~9nnvf^sChK=V޳s|1q:ίΓ1,--oV s2L]tNm9;õ=-uĵ;ׂ6s#lk[n w}-yR9~Z,UЖGɮT?_ Bez+zsc~Z:іhM}9vk(ueTeT:O[>{:lM9D^khgts”ffF`5T5gU[D 43@5^7:lM<U|&y^` Wӂre*7o:ƛ_R>;ٷɘ|Xyf+`oT0+X2k �$q!͔شXZ6C6!+*Ys#03H0{:]AU0o3c/7;ɎO*cwkUa7w<ލoc֣bJ+tw$;:O5g Ӳ{9f.ZٴΤk!Uf}LBZׂ'uԵ`Z@3/Sk;Z|I9g7^Kl$;_Ӗdu@U#RzM[mmi=ٚ})9{]e\ }5k!uk$^~m;jL+{Vn]N9~מ}ˢijF/Y|SL7fL3 Jaݮ7?'ݷ57//figEex)Q@3G?X&8x#u%|ۭ]{d:c ٠޾pOck+`543OMTټiEjctSy2ock?ƼuS[܈=Vf,]�X?n==nm޼~fC9ޯ['bn�M]տhn{ X/湝^"uUNhb֎Jyb$F'ԛfVf~|W3ߛcoUwib5՛-u՞ybv͘[s*FbWӞ:Sִ=-ݺ`a/?uk00m%5ЖG`,3s֜ۙ|5><my_JT#ҥK55M9=񘺊]3IiRkeٚ8֞kgtker zoc 64۲eH۶1ŝF"u{{}{GO>8jBևl7GH$ҁO7|?3inn-X Qݻ74mڴp͛&r|y]YǿoO$ *4>&Bq$ČaD`[ *^J-#AC|FG8 h-!LGpepD(?P kd<~]r^ko5>[׶OĈJ?7tԖO|[ni޳gOmKp>{m6e]8Rĺmlk۞??x}W;l3w_w=g!i|r-Bi0}l^"װ/E?g;ZO6Qt[>xu޺nߠ1S~mDg_¿_;zO祣h>4(Vg?W}!9?󧎾Ѻ_Vp[PXaҤox nu &V|{-rmd`ZTOn+�$qj֮])--{un1b�?~ �����[]lV6bӦ[umlֵE]��������9�-ﶢ6c8V3O��������4U�ׯSsVSt���������=`���������� X���������8V��������� U����������`���������� X���������8VK?CG����������UwyG'kޜ'|믟 o���������;8>s/L?No}z&% i3ڶfVal!k/Je[v5}_;v++BG|u~uߧ/8Eo!z�������V9g_]z02ş] WoRsVUW]-1b Bzꩧa>/В%?n@d!?սP?tiIZ>%Km^k&7v齒|M[ޫ[nrjkkgK+#֑#222[u]?gWOsh��������0vmW_>8XEWYͯױ&e B']hec,ۊD[ϯl'ֱGBr޽nbmO7(٭=smϥ^ꆢUUխ˶msѢb7oZ[#\R$ ׯ g6s `=^ۆm+WsssDBR;wwֳ놮#p_ ;eJ}X ^Y��?W������#XELZ0Ƴ,Ȃ+ D7]$[h;]qm*MUXegG , n7oKX 8_ׂs0жj+뢢{5mzM?<ʊ~9t VDd{_*)SX:{A?|~jA]`uΚ5}myR_7npiu٣N5;[Kַ:ټ={ȑ#Z]QtUl4koR- ��ƍ�����@i}n֟}|]}Ʌ+ j2 NՇ~W &*>jK 2Ycl+|nPh˃,`\:W^>UZ@/=zt+[ , ~ _B[>ѕvNVka_nf!]``_;RX]1fM8,�;/X{{V_dC0mU˶W ��������Xz3JLyi35 ,8˼9�YsܸqK_tE^Zf۲c m[%U/}_k0Z(}{}$PJ`@~GƏ=[Vj%Kc*2-\+ֳ;ԩScW:uOJJr/nj}bJK^tEcw}3rȄ�������� j,@}9P;=0*]8}?~hg޽}?= PcRxuB; ,,ص7xp`U~Gnig,&[+Z]/Vl0ֱun58FM<BR9.;BW co9`8o]gS.cc.Y�������� ,]p??D[zPՂ`YVi9 NV=]]y*zԂ[@ȑ#nLZyUƺٍҍful׬fJ֍<tܱh.}6??l/\ r;g��������00 @YuߦMƪDw^%_}v6 ۹swӶmUo]T`hgoLس'3��������wV�^jW qVBP? j̻q*= m`i+`?L\ݼZ8kՔX;֣"ҽmstkςc]}K.vYk>S :|߹5Ϯ?9-��������Vx냏vYd.vKȪ{ngOZXjoo5Š�&Y(j+10qٲypUrժY3l[>|ȳm6tѢEf!ZYٓnu9^WmguBquMq~G+x�������'=;vФI^+tU��%yUvzOiii w$U4������ݣD*����������A ����������q���������@����������*����������A ����������q���������@����������*����������A~ѣPRw<9]󎷴{,]݇ o=r]=nmӽ �������0_1byi57o8c�������@BIw[_c_xsͯɊ$SW?ꪫ �������`0#X;{ ^v{oTWEV'|⭅Xzo3>������� v _K3w:XPԳn9}\6i7g;c5>ŋ-i-㊮ċ>ʺP]%?PNN77\=h"0x]whkn-i-ƺ&^_^T;s oplUb}6|| 3jȳ"5{_$z9[P[oyK[D7Fq}�������Yz`QfCa|V6o @,(y_WZ>zJPHOKy~|yid{65݀TqZcoɒ{K[Dgg \oZUٹW٣#GxNG}NǏwζ_ZZl'#mk\k第:UUՑlʔ)nXiB* ~6]oّ,C%r;~ؾ]fY;#G>omimY}ΧOk͞}kd_vlW\qgc6n8궱mc֭zwse�������@B>H/ UzY -HQ -*v? eY`aM3۶msC`jobgiQk=;;o;k~+tww{/ ,o~1c N^sk; >ng\Fpk7�66!Ν;�֬YޜcAن < 5۬3Y)ӪU4uV[7t�������"XM ? 9D3f$Y6 J.țӳ,HII[zV}fV]? . 8lyuNG6(VH[ueȑޫpм~HfrEO:v}G+[U}�������8xOV~7wp .Wк% J78o<&{dU2~_R`ѓv gVfn6&L6k`wyݠkCk`[A~ER!U=emwjq}]m؟,,"7xߍa �������`}\Y]=YW\Uog]V}e C% VZhpa;<w~BUĪ, O6c0�lc*4vܭپ.vֆv|饕-VOq*Rź:sօx1Xc `�������`ǃ~"W=c_xbu۞j7~ Ϻ, Vnu7 ,YhZ/Yڕ$YcgcRpQۖkAuKrʔ)nתRY埍^UGZxG sYgwɑ#G9ƪulVjժVD*O<3dL��������0vI]f%ݮW~3-,ᘢX[GcuV讻~_ם f <;{J1 EjSqEpdA+;/֯_*%X7(, ,ijPoR566_mǥٱ֎ƿeϚ5[ҖNڱV7,3oϻm'mgmuo+k';ɶ[U Wd un}׹m^ �������VӢE4zU ^O N}6ƪ7w„5k@"8Ç#U_| J-ֺ ulҥ%]nl= 7$uOk 7F)6ZZwrΩ%v|edd:~ VkOcmlYy;Yd]QTTz[�yKڗ=ŋ9.[na-.țۖݏv_:{R`g~ⷧ0r.۲ N뷵 `}̮�������``KjvxĎ;4i7W芆]|n50XY@iuĂq _y"6[�[yG`U8P5k׮M^O�����=zoATlL VHb]ZEE6[Eu蘲�������`@guhQq/ۘ_?n׺0W9f}o�������*~: ,<\~OAmַ1um Vƫ������� :0*��=1V} �����D:�ГGzw{W_%X�����@ +`����������AU��z]X�����@B*����������3����������*����������AwOm��������uW.]=zԛxh3��������GG}Rem;BoK}{֯_?ߛ,LJu_ ��������` XM]-zt?tgբV5yOSVV***���������0P]ƫE%z{~i/}YyVd`7uEw뮻} Vv[m۶ǽhQqjЫJޫ0 ��������`!XEL-_^;"՗Ǐ͛5O>D7ޘkuH7wB?HިQ.jmޒ%?~9ydgyZ#Fpn,V|)R=jVM�~G ٳGcm��������00&_uݚ:u."oK_}7ohrrrZʛܺu^yܐ^w=H=Z5Uv R[磌2l&3e7ܼVf���������j_=,OjlUou~z= oǪ-P{be6oӦ@UIZ5f0dm$_JJƌ tu׵*qPOU&[nEuwkh3��������` \}c/U#ZH38#Gܰ'糠C i{øqjͪq{UZ-_wK�������� \]0jJ9w}zX;|??\�΂81>cUc5iv/2ҕ.m��������0pvG}CJ(*th"7þ΄7}UuZugWY7sNB!]yޜE�������� \d]Y3r 2O>}yVΚ5 JKK;ǭ_Z**:hޜΛ2e;>飏"`~.-Qnn.Rw^wT7o }\%���������&8#9_N 仃ZՂy)?c|EgV,l۰wn/Ԧ`xk͚j7�>|M`g[66?F�ӟo]ǀeƎGqbw1ikkk#ܧů���������fOرC&}{hhh_ ��[8P5k׮M^Ov������8}߫VU��zo ������@O+`����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V;ᮗ"yK���������� f x냏*LOSw���������`5ǾЃk7/b=v˷����������N'q>mW_���������p!Xݏ?<\Zz3n5+���������`5]u@<xH[u}VB ���������Vg끙Wysں~xs��������� Vqy3����������fOرC&}{;¯zs'6o6hnk_jhh_#Gzs��@IfҼ]IޫɎ������{j6jF ?So}mWO֏]֗V�Ic�����@pZj&9_ܧ*���������G� W_av=TR����������*����������A ����������q���������@����������*����������A ����������q$5;}bǎ4+tſujĈ��];<@լ]SZZ6{? c�����@Q ����������q���������@t<>\��=ǁ�����080p=-]ԛ�}%�������V+yM͛7{s���������`5F;4q#oǯJJB]QQ9 l6s-z믟O>[fmM~^{L}nv 6Y[[wUGn詧bT�������Ʊ便ݏtM喙yk>h-m` `,##S3f\+›s,�λ+oVA]6A[s7no|^/ZTK/WOkvOk]uUfLBwzM٭Ϋ*/l={t>/Rm^j6^׬,wpuE˟yiwk�������EV_ݦ4rę7Tjj;wt;ï8護r`W0 Ô`pJ%^=ϿUFWM~(ilMnsO^Y�7G߬YG;+_Ғ%?W~~;BeJׯw?|:7]nW[[͑VZSț#ͳem6mݺU= wos}lٳou#Gxs};^ V܎y}Yo �������` "X킊7կ=ɛ3XcԴiW .p+߂M-ZԪ̪΂U^gw8,VU*V۰wn^X\a``7Y5u4 GXvB;;*K T*=<O +-l}-袋9}Xi֕\}=PUU~ Z�>}ߏ?5��������j'ժsn|nJ;twݪoʔ)n ߯P(*�XaobyEK}XUfFn>w`[Ocmƌ>v{ߺLg4߶',]Zָc E>_~7wCzرb-_^TʫV*ޞdԘ1_TFWQCXK�������`NjUwXZ ӛYdI:tBBՁϮuۙS_zcΰ'XiajmualAYg }sGABݻwm nڻ[%~W{s[X�j]s[h۸Z!oުVmǒƜObU�������>N8]U-J`ŘXWʬ eizK,0Yڭdkmo˗]Zȑ#̂cZ_Xf]ۏ VhQq@>ʞlUm*>*c`G ~} .o&s=/}VRj4;.^2�������нV;tV{P>F< pTYrV,F {ϖح{myK{z,F`!U,5l? ԯ$OW^Vc[iɗ^Zj}nlZe-,'{~ո`p.͛7ݟUWNOت~et{]�������.ժB C`ᇘ$Q~^os֬Yc, 7Җ[eQ.rdz4�`>X*DK_}S UᢱقG U+[-XL)1X-Lh[h'bug|:DUf^;_1.8.j�������0p&tV(|[lcvVef] lu} Т.JC=~^4 ,muwcݬZgiҿ^9ծ-~ׯ_xԪ-YWNN;t,v+\-*ΰp>6cnEl{!vfVv>?{-=cǸdR}v_�������&ժӦ jU`fUu;`{e%1cb a JC)6YHa:T�ʶe۷` U)^wunf!Pm+Pm\z-ST>޶_>GT!;8',X%奁e[TQRUێ1ٶCbт/l]vDiZբmwʩ^p[ R޿FwcUVV86T0m_=h{�����@HjvxĎ;4i7W /t,0,VŪTou5_8P5k׮;zT@+ҶJvzU>]VR({ӕ�����@U�hUZէU;|O=EwP_ʇBRUm<:k%_\'&jþ}@ �����V icZw6vE%d׺Cm8�$rOQε!-[]|������ nt<�� Ttܽ"}*MU5ylT*QF)efʛI\PR׬SC5Vr*`WUDJ[m@ \j> }H%+kJфr`I &6֊KUbsLe^[�����]���T*nR JlFoijxͼ,|Pj_,VNhTw'(Ͷ4}lmؙ͉_n2MW^w `Ugu'T�����#X���rP5+)tm�8-K93ǫU^S|WU폛e4=m TzoR25k_eHuqSmNV9JA/WʐRY ︳_9SeQӨJ_nU̶jٝ*h8lvwzx9������ x0hhh_#Gzs��@I*65 vEr~LvgI[ilFtZ5<XB/jl^u~=ζm,oTkkzݵ*huYbzx {׋4mdeHM*NeӞ/j(o=�����~��~~MjiPՄWZɊ?sgdvvMHלY&+,^MQ14jl,oЂ%xD͜뮃B������U��� ZU=bh%IJJK:sC9`%_}ڷXWh%4H` �����p#X���8Rˬ ]x-1֪Mz LQʵ5 rC{yRʘHvkۃcU@V-������8b@'|9}YX[X=%% LyfMwyǛ�ݡQUϕ;YQqV\)%O)<_ժmq-SJ[34}^76UYd;*\75TPvS֩끣$}�����_YtvY5 v}=ڳgX')??[�Ze9ʊU zArorוzh㕮)QVJH5LnZ `MJFR'joXRRZ9WS2"c5RT$_-&^+ҽ{:}isb�����">n~ZiE&{m`E`k֭=VǪ6zsUpM88Q 5vUlt;bLQ-cJWպ&O] 9G2sGm >/Q -IUFt BeOT֑2Aw<s*Nqv,{vsJTT٧Э0�����`BG}_R]^>=eP>566g[Ġ3n8(Gy-T%K~Sꢋ.ސ9Cz+7GξwxRTTuU=@9[o'<Ӽ[[~[to.tW)ѓZ5{[k*TVj^8՛ۼ(#zt{qP9u!�����V?CMtWxssnr~~7wy7lKڹs.R-ٻwe_QTr_']np?ճ>#ϊk`VX6EWz^^'*x,:[o4fW" n*:jәsvHEkЮ]6޺ς+:YZZiӮ3<:˛;ٽ]UU׈#m?'W_=[�������@"XM/5hsGü9W6\p*Sܠ7AT00@&Iwl{ӧ\zھޝoi?tu- )v]zeZ]n\ݖYX8_;w68Vu@;ޥKK"cmJuĺ]~]]w]q;mݬlVR]ݖ|ߵڟ=y[YWF[{磌 ۵.|:H{YXEj~nov?[nr~kڵkoӦ8ylYYY}[ܧU|s0MJJsC>��������'q??D+ ozO=0*~;o+Ǐw# Yaᨹ0jϞ=k[ʗ)͛7 I,, O>m[Vak}Z(Z�dYfMu$ycw ǢVAYGoXwj~솪>H^Wcm`cZkl0�0+p#? gm`48&~1~D��������V-֓^i;OW\Uo, Bn@dA^ DzpĪV?vڞDi %͘1c _Z ҂*Ǝ˂ X+Yc/*x ?+;bhjOOa0`DWڏ?z٪w�������  UXpunw�`lnAV)hb B-æhVzUmZ7Ek׾f]3B ~Iy7^=,pܝkW~d VU������� qXxuCUغ}9n/]o}W-^Hp3rYxoUVe9rHUmZ{=eZ3_iY7˶ܮW=OvoO̮_*V*��������}`5]u@g'Vy:}z؛3xX7dX ,@'*zSD6&iW.MOX{^=l}6)Sm-\pȯhS5O6֨?驲߮ݻ9}wm՛:*L'ONoº3:V<gcU�������Vq tgk 賕~Q1:?O ;`[hw E//m5VSO=>FWYe9glOͪYf~Ok,ݼy* V9??_Kܭ~`U?̳68nye^/3V%k*uSW4[稽jUn) Rk^ZZF}wk�������@!Xún;W ֚zYޚ pVV7MVa-ޢVcQ~fMu֯_7Vb<-jϮn3,l++{U7ʽ"7뮻~U^ig6lj͂lV{]U?[;YYde%smp)خ}ź;+`;F}cg<UV[G>>�������н>cM A_|qU �]a?p_i t$qj֮])--{un1�����{߂X�t4[jBU�������`B �8eֽu3l][M2�������� *�8<󴚛Oc�������0���������@����������*����������A:L0A#G^���������n����������*����������A ����������q���������@����������jB7?S)>���������VϕRʹBwz(7KOo���������,=;vФI^?w[>=9QtYk>��Q8P5k׮M^Ov������8}߫V;V-= ~AW9˛ ��U@ V1�����{߂ VjUZP1w���������`5ܧ_˛#Gz+����������jOS=v;=vf}sNV���������V`ꮇ #+?Q5Q:k0o-����������j|?9W_ ���������`p#X;U/t���������G[|?j|~4����������;8U'W9[ ���������t@ ����������q���������@����������*����������A ����������q���������@����������*����������A ����������q���������@����������*����������A ����������q���������@����������*���o4r%%T^o-K{3ysϜcpcorfRțp@˶z36���N���@}ɛӞc.T:Swmx{�"8M:OVZ^_*3 5Gu5ILެU.T-t|sMVC4`K.nf1o%|7^GGwCZ12/iWO���:`���Tϔ}հYew i\tj|ҳT٫ܓ/_p8/v F*wӿ;LY/mc)[kzq11>='9~2mfN8 7~F͋D*oLc3Nf;VTѼ/����*���m+ʹ~/UJqF8W7&{s::9|KڇjVьUntT4+GzmMV%4vMFg9B)3}-ga݅`S9e4;MZ\􈛆j}phޮ9CΗBT#TjT5kT}Q<:DO֎ЁzlhÕ5*6�������Ncg(9e=G*jւEdwR VV9 ͜<<</iC0E =tB[]Uyq³k;RJ?:Kz (yt2ntys0H8׽luOWzϜsvP>ڶ jtQ5a9z!ge>}hB?|91tL=C[^;W$kt篡=nr?��@ ���t7w ٤Y4e5>׊㎺j#qLg=Fo^Lv P=_}"2esM;ksdžvE/'0ޜ?ev82w #ZۙڌxjT3/ֹ3 ٤l[{|)T5|Sw[t%r&KԖ`c\e1^TjXfejc V (yͮuWf I5vfcONr]몴M_y,HPj]©]ڎW8qxqWgRÎC*/w&^o=yTj[;[n}?,NZyi5m~t]*n~yaT32s|ZGd=Vl:U;tg?=m:xT\ˉT<{3|[-Z\3oH0D9Vnk`{<8b(}z2J��@7#X���zA#41 p݋_jUQ nRuSPSgrY9acۭk҄xd<;ꨰiqnr;30f hٴ#~I kϼjdn⬳)TgPM�j8K j+y=:s?/4?0F_hs}>SvvqY8&|1zsm,?o1&eGm_Z-Zgt8OU<(3{぀I-i~ ]v>]~6Yܬ%U~˩Wѝg<'4Z5^nQQzݚOhʌÁJϑʹ3{f;PmNj=|D<K<Ry~7 }J&|&U~2}Fu֮C^C5+|?Wt?BP/JRδ=qe~I[eë'57r;6wkZ]IՆ_N:ZQNvBftB۬}ʚ̟���L���;L=G#Tq:ZHJi}l띧TTg/U*=4gƎსjusXH<-xaô9J L L8,p:+ROu:Wq[c**e?xvHme%nxGO;Cc_QgONte뻾PR=ÔuJG~{IT>i� >_js=ix 6$0W3Ľ^8m w-st6|]8jWHmy8ڶg2ڻ7T~T[cgT C]Uy e ϲcI­ T޵nTC׬%U|N޾=/G9lפwl�ݨJ9N-V~tD-NQ[׹{=oN9khm33mʟl@usnKj/tTU8s*sth*OE{!k\Zοf!&԰SγIR51ljvǽZֽ)<���C ���$Ϳl9#rYʛ ]*ߕ;æM'ŸԓsF*<$%_0J%OcŒu^P̎ͽzO;w?KHG̺|ׯ\GWp1oT@kO)Umf KF)oH<2 R~u<tv8-]_.Y*e:T)3VIԵ0 &Ywf뺷Ie˝ǩgsq0 i_de?2Z W|ca'5sosʯqnC>׹w`a:ƛ"P5cfϟ?/0?l y?>ww77se/Л'uU&*;3&{U!;ܯs'T}W49u+aFgEeI?{p۞Sڹ6Vj?HU*粖Ԍ!Q!؝G41s^RփgjkGz#^���@"X���_ VIJo;51mse٣N9kgQno8kQp*vZ~\#ZU tD/J:|28dGtDՏ7+ޡ*_<T!,| ?sNc=&)պuBk Ɯk59 s2ӣ0D;zpjcD&}O{|ʺmةURF*ohwJn8ekZWO8mmujQU?e!yMhWz4͚(\uź c^w w>?P7DcDžC֎�Oq p,S']oOMQ5+|DUgS!˝_;洹W|K)*[ccT͈QmhvmBw63Z%)k wCaʸI>y;qZ -ܛBspxs���"X���=IC+e?_985C* 5z]X/誵{$_3LE![WU7RiZppg4ǟY<N UtQ فɉ9 K9K > v__q|_<U=Cn[ vLͪ;j{7'Uv):)yn#eK5_jTV+ⵧQ*{v ڲ#\_pJ5BKTÙ)s*3D$zm|wBj;wGk (ojrH-\9TSVЂ}G/}]Q���n@ ���;Iz򵳕7,-|cٖm%mraՙԦ+ʶF(v%֝Pd oI+Sg,kH<O='3Ln0gJroRpBW,=ohB;?|ٶ̽'Tckڸ<ޠJg'հ':H8yc|ji]L{Rnt6vnORױ1%{YɡʜaRmVe7~h@5JT{*{յg5Q*{$IKP ~PFo}"]۱UP5,)\:숦]&i;}Y_/Ty: e|Jf5F55u։dnpB'U4Θ| opRotљ?N,ZIg_Mj٧ғծ W[츛Us5=}������y'w2x/ӆjaT*^פ&w:<ѱ,GokғnwmŌ!m nBã8 ;6;%<\sFpΩtKQmkR3Tv9Ǜgs/WsGtʓj;vC}K7&_U@y!ֵZy2D:&){p^lͿmV?tX 8Mv;bQ/p=�v=JYν~lI:mz瞹{J;SKu{͙JO>:z"pOCZU*g8 g+ogN$?Ňy[8̭X<,IsHDjj҂;}WwBι{m‡{."WUV; _3knRwR]c&!J%Ye{{<o;Z���:`���HPuQoiVq޺M'auܬ*m TTiaEeՈa3~Be[94XpU`}O*n;g!VsB5U`iÔc }5*LPqdl4"xShˣ1*o#CtވO?Ո PNS_sJn::ʾ/+sDIKmFg5ɪיf0;gSÕj2f5?ݿ?S*wX3RV1<y&~[yUbh:4(k?_9'[1'ָ^寣.*ds.fq?=m6v"n/&{-Lezo}ƻY,ǹom;6/|/W'Ts՝F'pR}ҁw3&.mV(%Ij ss¡ݔg⨦?୿dD{6Y2D Z}_U3Ÿ5vg{;q/$~m+gP9+=qB}PŚi|u0ZfL}/q����H *���u&x?4C6S^0Ua*\dm{aTȜzPDMиɪZI<gY7 ѓ5gƨLvv%(+Ⱦu`ӹ(3I5Nʤ$>~{$=|n>B[l\ÕH]} *?ol99#$exUu{w m`Ƒ<us uƄZ5ON3TxSo;u־_竇k_h%RM:U{|(mܷiI*X2Lo0\O:zpqU'f4>㠖 |v$1:U?h * Ϡ; |U֬3}0 iwIʙ}�|S轐q8m^|'Fo{ݫFRɚpʸQzrHmq ii+wGj#����$*=;vФI^��7ʰYvSO*w1�:ִ3R;Q֞>���п߂V��:D;ս{O ?^a ^غ22yp3xZ.3uk^LI*3Y㼊Ѧc{2hVުi;*Y9~< Þ}A>ܧA?0wp=76���{]����~*RՏi7TU_U���Q ��!*V}c*�8TܗZQ 9l켡Z0{RGq����aT����ʸ=_{5vn(BU����}#���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������#=;vФI^��7I@լ]SZZ6{? ciժU3��:6k,�����t`G t����[]���������@����������*����������A ����������q���������@����������*����������A ����������q���������@����������*���^QTJJmftA6*z3������z *��� kYؤp7>Cܙ[9WQ6:5O �����ЫV��DeIsRțݸU*O*^_s9Xiyq{W4IIIii$Jvz9fUFc_"Ueκ*9+swmB;ЄT9+|$|O~>g]e,uxk/>8خ?Ѻ��@D ���$rTQJA(57RT)sbvPj<>-m>#$5 F?qS97[M2夥zS-V)śK*̙,fvƒL;X|&F,¡2g-JqۣNqOk'kX}~Po���U��� J VJ)-,e8FO|Yq]RfķYZ ?-%#==թ<Z97fuKUe ;(oU8ZkŹS>}]r;3nbM};%S}yO��'���qԬ5a=Rzqm7픖&M2kQ]rmryIxݱKpy[Ql˖Uf\^f >pzy96~dri<gC|fI˜co=momO]:(7>i[J[SW ;_e+b7i7t7YuK; 9tÿ+f_ USfoJn:=lUr;XUk%Y`5 sE*>[C,估Js˒j_+4 T7SMy򶳯ZۍӋ����U���#MҶd)+Ԧκ/ܳXWI#[#' ҿ-;7ٳ%Fe¬8ml?.GTwl؛e:o `M.gaRu?Ppu49\mN.iƭEtV8Xy=rg;zb\~]JӦN{U9:>پ7/kscE:ipƢ9gZf7k]lKUP\݋ uڪ-0~bKEYyc[spnؼju2ح* &3MZ] HR#Ι,)RެX+u*?cw[% :Hˑv9jgY_KޒIl9hc_g쮪;զ׼=OsEtEgemkNz:!gUΘcVjSGG{,^E>;>���V��K8R ҁX~ ;pXd!0n|5κb M"g碂ٽ{WKHY޼vmvp iwII9qZHc}IkcsRlg~(\瘜zw>JE~9=ζ tl3?|Ձ6|W* _tǺivg9oe8.;LGY?3;װYOsp=iaP $ej^VݵE%U8-:9)MhzTStU`eͅM*٥g< cֺŒk;CkMʊ)Ti>\Vm)Sǿe1řJ V9[*T UR>_ji//z-]vX>e4n[4ۧqqFB=ڎV޼XYvlCF_Gc|s_j-EΖkQww>тc7kzW0pƿN7%3G^��@ X���Q&iYHJ_zr4zhx~R@3^ m3/;F;K~y%̹`uekH׆_IjjMg ^G y̝s,mz6d)ؤHO9ѩ rܮ Uu/;<:m`!u %z^~ଟ~s~Nk^n9ǻ2y,uvf;צ;:YTX;|?4f; fvdK e-q5v봨}X %�|fݪbv>f{MU Tڒ{bYz�ouY&+A_" U: ަfٶFjU_Rmiij5aVU^a;bQ-2-י8V2U:kޱDX"m1voyĻGοr?hg!o_ ytN26~m ��B ���tdWzP:Ao T:jS@ze:^؟Ro @kj3J6v::Y+g;Zg ^pYu;ZU2Y/V׿LMCذ?sŎιO,5^j5vs\V;YعNە<%-Lʬ<gY\^{ 5ns9E~`׎x՛=!z)6@HjB]آNyq+B/a]N0sbo{©Ju>~q3{�V_j6wmJҹGW%F*gUCDy\qsD(9g~8,sqmtpKcN{[hl3Ul?������-[TQgo#/rŒAw}c?¯S 5k-n׎Vya/&|Sƌ=u[MntoAq64`~ylqίy,iQp75g~^fwT;FcU68?jB x|`*FY=mRUzJ#<.j?8?ܖB愮y!Hvw|C豊 ' Gvn֞˽m5Fna0:yq)�����qd~,^bL<~=&eg1i{j6cF*L5uh5KJWX4zADi̲ۜyJ8E2YnJp^O*ꥣxXTjg8ϝ׺]@sKq;5zAuVHɲrگi< o Ou ru0WEZn  Bx|[˕:;rA0z<;Sgjb U5ڹؼ*"ywm *_ڷ*FWq4j~=+SucK7nNp/F]s6u*SKa��� ���@ aT)R>K TX69ϗ}G0/&O w+[TY~"Rх3B`Y?;> ?'y}ۛ4*x6&XR9&u;7IqGw}{{성_8QSV;mu l9-mhmsz㴭߆q>$-I t<y^ ra眭*i,gXA]6랒v}ֽ^egB/\pf|ν|m[HHbmսjIX]qWJ6 j{ե1yC\6 U|Zw^l'Mx¼I BpvI]{5-rǍj���`���ge Mj\-MOuWldb.iY|XxҥRi5bkRWm:M rowN,)WqGWcZkpުn'H=ᜃw.tAsu^nWv]~@sn\!6^s6,YsܥKZ],=,BY__kV@usIJYt6uGu/FLř.{ZB˹Z[An3 B oPAGJFGפ(2{1hƸ*]vu+` ZCN;կ~;W`Mz1Zu}vm:kmGc$r]Z7؉Thg(-9۶*zv_%{m]wBUOKeV��pjV��DCZCnMғ҆%-k?H%sZBT=%ҶLkwHg_E^7YzY}BԾӤ|y=cV:4x -pΫ9mN[dJ_tQv]9ag~h.,(pus,VQrzg+y֝r=ct_>mT{ p]aW"18i EpqfdXcgl#)c}m0|IJYq?Th_s1i]x|n7*QV'BvY·$zjOIV٘q9Iվ讀V*_.u,iY6vWW];m>*|V#?ZH욷ImtO"z{p n+̮gs^1YÌk3,u0L[emv<^:8gݝ|T{ l3Zp,֏Y���o$5[2}hǎ4+��&{k{JKө w\O[+ZMҾU'qޗ*5>,mכUVm:*=gժU5k*qؖggXeؼ)3@l+-l0_ܧ6l};)b;%V4fmNMB׼;Y~Ϩ;1C{ŝP_|Vvxc_���zoAT���ػZ[N˒XIx:;<.Mʋ3:*%7enO *^1$xͻF٨*dS5=tlnÕ97k?~���V��bYR˘KtxMKոݞZ׽͝XC5N$v{o [ڛreVgVȩṪh}&,-s}lۜʂ ��+V��v\pdgԞxNAzF]ޟb[pS/06`1(-H /h]z3;2fm'Ǎ -l1ƪ wG?><u۶w˹Nֶ>t ��00*��@ǁ1V1������������������������@����������*����������A ����������q���������@����������*����������A ����������q$5;}bǎ4+��&{k{JKK^w]&yp8=Z{�@f͚=��@< U��V�����П߂ ���������� X���������8V��������� U����������`���������� X���������8V���y��4IDAT������ U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� fOرC&}{��$yUvzOiii w$Ud�����Go`��C������=��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`����������HjvxĎ;4i7W���M8P5k׮M^�����/;ow}z"_zs!Igܡ)(5v`��C>U�����aOG^} &2 ttY-_ ��������� RB^ϼpα?"X���������*UCα?"X���������Sպ#U���������`Hcα?"X���������8V��������MJRҬJ4u2%ٺK:Ĺ.˶z3�������~"؉>kV\Poԫ,kfP}??yKoܪ9/׭WԖ__55{ّ#[oެ۟z 0U��������00TLEy{\UhH?nUo;C}zz;#q?ND[N[<S=Nbl;vx���M4{����@ϳRI]N9M:^U,'kwMRݵO3BV)śuQ,-٢ELwbrwWK <%-tF<oߡ?Ե_ߨ֋ćzVaS~+[_Ο^O'~]:jvܪ/]?uoc~?<X��������Aeߞ*]>x=u{?1[g*՜v+ORv7^2鯾~Ct텫wQxw}^o H V �������� 04%:_yʼ$<˧kZNxըl[6WY]}Vb|uXolYrpGݖc5;U1z:-s/S݉FU7S3U[Xߙy2U8- :4zvn3Ur3>ަJXbj͵c:ƶ6;bv4~IWz2||LNT9']K?ﲭ^X|!>'Mq_ύ*հAK[揽<_5z[mgղ5 (rn:*fPVD+TߟuuӷT?jXW ҧBˏg޼x]3?Vޟj:_5zI(T׬b��������ٲDfsI7#b[sd[Vؼ󲱢9/%nijICw.pTۛZl{8ݙ_\7ujkN޾7e,\/h.#eɥΑιeo54Uv \1;馊}ޚ+^wJiz?}Eナg73ޔ\Zroj)%[#wMzx{1z)&mxp[-U,&G6/zj{wlǏ6i$k9{'>cXG+RPwomeZ7zܲ[?NXα?b�������� 6jnUv)lenT|URhm25MNksGOVXrMKEjgU2kW_UVz U*4PtLG׺ݸ-.TsL@k=Zҝ_-R:P G|TW^JHy"UWʐRYuw oSnzR>wU*icOV֬"g*ufhS%ESx_~ <=[vT~T}9*ޚ7h!;_xP򗴭-z jV&%[%츷wA:oXbRٺ-;m]o:P[9*ūMYE%-תb SUE3uzʉ~@>u}Mugރ[ǑJvzK*s51܋pMzyzh钤1:ҴX?{-VV�������@Vw:BfjRZ]\4D/VIW#enZZݘlݟ"]6Cj|\rNWUnn7UFʿ6_ֽZ:gW>ɣ#bl<]Y}~Id,c]!լ,S(e***k\dK=9WuթrqRU%ʹ5YJ^%)Jw<Z<j_J_ ϟR6s5jjgYeGvr%(;3WAd~[CJBUg)uTx{lZmJVY^Ci>i*&%<o3io{Y)Ϟ?ئ[{֨PtQBiEHxJ(#pf(;O_~]~*#zOa_ܭ|É/k^[7tOt_1{l}U^~Urd}|_V�������� R~픶Ate\<node^[lF՛"^Տ(*_\2U.<_3 !5j\k438!d$4iDW;~vmS϶Qls5ƝF3K9c^oro/pڬT5[ҮZU|l<)sZ>]#&)<h+"NmDi+U|f̧eq4R rq<_蛩3_Z]<xk_IuHO8'ެgkܟ\K_qț90�������~uޮғ?V_IhTV T=]EyYJNׂ{STp߬Uv)W+0{yZғ\ҍ+UlLѻTknxͼL[[w1{~u{s6;O%.)z?DMaβaS^tk{Cz;/zמ's,U��������0pIQP6njoj^sM4K֕)e )V[/RRRz?HU*>CӢDvuŪhSJ%6爇&W^Mᆳ-cJ6JR= =T~VS6շ=)KlT «&P廼^6ko8ZV.#mzu]>yYGtou\Ul7;F0mR͇nԃz]'=TzKV�������㋅*|^xjټnٷ<MP٪W-H qWH~7Y9%Jw`2 yQˋT_fɑBZpgtܴ^P?+%K6"=Ѥmt~`[4Rf6F*ԭ-1zRL4b#]6J=Z=Bv/hgd*uta@"yZt?a㾯ieŦu{? =+-O4n׽93Tg(y(U��������0畝R8G\8]ůrMJn6-K9(Q5lg/ց#y=%Zk~ I4RUIUs:9LQ"㼚Y\^wΊW)_ l#c~2Ui*#լT}B\+#EyW Neej|d:/=_+)WMWevk5?:ٔؖW U$C ը8{b\6n;w_E;*Vlozg2k[ctm|+[_7H%k=ir,U��������0]Vٚg2)[oPo(Maro/PmPM@%7(+#Mʸ^*)#ԩY*XR٭+>;j v.xS4j5s\*s+ܧs,pMRmCJ"IUM |](=IŚ=f\mU-q$NPMzfaΩж uW]7LЖV.}FoW.Pv\xR%_bHj��������ƕFoӂV]J׏b���������-lՍ4jirU!Igdޫα?"X��������@eWUPӅL'yMс^ >vnv*���������Zxcm©9*qQ?aPV9ٹ9G ��������� ;?W}r}]<r7kDYj?"]v_xKU���������`wDhWZ0lZzsU����������1V��������� U����������ϻޱc ���ݤIg������_��������p:+`����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� J&%)iVBެcVMX^>Seo6y ���������1ȃF{Vl^Fi|q<ZI5wMOEհffC$g˫p[S*z C;u^JjKz 0 ��������``տVӐըqUluZ5AsU1jƭ*/WzWhv)c8ެUʻ[84q]gP7���������V4hPZV֪jrs3zoNwiTo )mh<fg:* ݽXBX<GY=yjk߭wW΀ ZU=_ex ��������4л Fu|~guz{8 -XR mg]d'_RdoVڧ?X7ڝuUY��������A6Ew|P[֕ykUcЃ;LwߙQT-Uƃ*׿He ;*U\Rg[YsV2͏Uu(˧8l7WVReumfGTEyXwgh6gn"BYY3]E)՛ʸԶשl^2/ ˧kZNx]!UJҔj jE+e̟"7 /V^*mѭ}emm\Ls3Ƈ_K˵?{lol{i::V3kpkEzx?Y{"{'9㟏39{iSN?k:6֭;ꚺ1ڸ" jM6��������@oj-K@ uwMTr:/v_ׄsUb>jgU:s<E+fL|k4eDZkūζ6iUߨjʌ-HPsWYoBŸU B5;#QP*ͺLDRT*LZu^5phG2?UiFսX7:bQiӕ]5UsU:COY 5_9~U7'8ʹsۻJڻ֧i2eMV my5ổ^UzDgEtƺ�������� Vm󘑥 [uܴF+9ʼQ Fm_Jc6hZ-*-.TYTZSKqGRڌUhv>oǤ~eʳaJFu[V1ݪT:3Y2{ݢʷn|YvjB{th(6XwF<*PվqMqo-ւѱ#ԨZڨ *6^M/*gJ=*أS:&wa*Vly~qN5o ;m*s 9u<omheN_6L;95ժbSU68ûB+hūkCR[ٲ玑Wi *��������@BoѭJi*t^oR+kjR'93lS0սZ:eO*ohEFKNDU<U nѣ[AS 5+h?e~ZH^M]ɩʻ EkCT9B*Qe~ܛԌ]\<(K7Řt<Ri]zؕd)o^8$nܟX1jP=^Ss=AK<ih<_Vd:rDs}Shx^Wُ9=toU lݖ]4_ŷ;<Ϳў5���������.mz6}Xitrpj )yQycZb%Oqgcx0V9`塠4(fCƀu$QPs'n-cflzTfSFc$˜x+DJpoOzyd^ݿ}o?⺬jolu JӧSX1n=a]MO>8%./{.3#:QskOO^Y0'ʡuJՖ#q$k(p@k_3vDmL~0ЬCsRF{vth%<NbZVΝ> wbmǡ�����;oս͛KSƧip̸fYpTkRQ9~JTFSlSTƖ{?|VSZ) h,c_L)Y}tUܷ5<7޹" gW=~9[⮺2oE<s�����`@mJ1vLkΎ/U6G1;4jcniT 84*D|ˎP57Īn{}-sdPzNO[ç6wµCci⍱ε=AK7GTfUM<eWTvk%iuӰcaվ9gcڪXq}<)<7ɥTnP?hW#mLGߞ#ZyS۷dq<a_������y]V_~|838v^]6Gif1vriҧnj9JDzwT=7]k{jЁؘ\k*c÷|}:u1zXb۴4!^"VM8|/7]yZU>\ZgI,y)ZSR:oRFd]ځS~QGeu̾!^bz1,{55)=ohXr]ib1Q6qGkg]~Թd[/.Gl_o]M ~3�����`;?՗ƶҪ]edxai6_m]--5wE<".WX]3WfLh{sY@Om-J 9_nykly1W>z_X/(=߯U"sy\]Ni{ux*11,;yl,oϧİKyձ=7ƪ VĶrk/Ć1/O(鬌dťg":/eY3'͗eXlvVϥ禸C_l kw{1v~ZҫĪ������] VٖuU6_u],6?Rj1v|v]4eըc?Ƈb*+Nw6ĚCn6.VmY>RVź_m,O9f^448V,U,̉oK%1gZەbKƦuLJ06ggGuKV̎%ˢrbbfqGcѸ~U̫i}]4Weƙf][<T ZVJZcs z.ytUcbɿb۷ ������]iбT׋v555^;zh @E@ pڳ!�m����ЗsPuii!^xHPiyht:-tnjS������2n5w>x]\4l\41{j~.������`uya+jhs����������0X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������(0XI+vܙo�Wd5���� D}"Xt��}����  ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P`б|Wܹ3jjjҫ_{͖| �z+ƌ۶mѣG{ggV鞿����P �׶oߞo]tQ����t-*�p^?S֭['?I,[m<Y ?ygϞ8����00 S xذ�Wud;b׮]_"E}}}qf}YкhѢXre\ve1k֬uwknn|螿����rՆ1iҤxń v�F*����=ЦM{Wݻb&*�JSSS����p#?x\0ojllsT>[�����gO R:C_|b%־ȑ#�����$Xalx_vq ������ev@| bH-������@_'X������( X[n������*jnn+2oĖ-c̙������xt*y晸3bӦM������xѨQbڴiؘ������#X������( Xa/6?xg\0Z{XS{:������-6jd/ᗾ~ʒq������orFq%������``Rhܸqnx������X?~v8:&O�����0 :Vo;wFMMMUz+{oْo@7lذ|hnn|螿����P ������P@ ������PPb׮]1z2dH�٠| �������������������������M6ŠA+WƑ#GbѢfJHOkoF\{cx3V/(sg'{ϖ>U^;pΥ�����KJK.yL4)F*) cƌSgwII7swJ'>'1w8vwٲ}{SL0!?̜93;2>KNzһ=g�����@%X;;dKNmrx5nܸV{2-{ 7ܐ3�����.mA{d˕O}pV9K!k^ ?ST}>=g�����@$Xa.??e7_1)[?o( ?~?c~yn# ~'̩'|vtY>~.4g:97;3gyڴNᇿ?Btr_%m+>9љ*ey9.n<-!ޝw|ߓl����� VRC^Yfwxۼi99zGS)x{tʕNR8ͮٽ{W{S|({bڴi|5k{ٟ֭[c߾ְ;}fɒ5ҵ57m|JPntwؑ]󁞭\NXk<֧;ڇ#}~Z֭?>;r8ޅCZ!*�����u8>?}y E|)TMԩS{l?UB~E[νYpX2<]%/^mСCٹ35ӵ=ҽFz=fΜѭ_LwUv3}V=]*AR~Zs ����� V{eܽaSQ;2oH.5jTwT ͜8qb*wʲCMamL B+-ZF nSmّwgg<�����@%XE)T͊7?¹z饗N6-WL^~z5 Zi?/ϒTZ�����#j/9_>v3.&]:2?BWH'S[^RhyHHi'/g^?>K7f};lN>�����?.__| ?B7qz\t:9M'O+W-#=7Uޖ]m+, _,1***Illu������(0ꙥK֭ςdz5eʔlֿgAݹHsΉ%K3,iN!> ><fΜ^:#G>Kanmll[" O KM)=[ '������]AÞݳ? U ?״-w<;̎ d˗/s644G;'?,P<yгn[~<}6<SN)NOS%g/Ұ<p~UWY ׬y(寴]#䡀odAz:'ݷ~)C7yiӦV;ڝ5�����pt$;w|WvGΆoP?*;6����T������������������������������r2dH������V������ V������ V������ V9+WƠAkpy+������ <UN>]̜9#ϿQ �����%Xaq}MR{ǣcncǎšC������X=lEgO%m˕O}tzA*������`Igk������o������ÿuܽaS\6rx\1Ҽo1bDTVV{������0V{A S?}ML̛[ cƌn9r$o�����C RĢ9|ϒlf{6g-ߌ n!C}V �����"X@\_dz{gլ}M QSǎ. YS ������`B틭[F]]]������`HC�o{+&yV�����` FFkږ4~:������{=lҥ#+{-O,R������0*������@*|ɨ'-������0V9+WƠAu#�����EiDZcۛb„ y+������ <U������U������U������3 0/����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/GitHub-Mark-32px.png��������������������������������������������0000664�0000000�0000000�00000001556�14332737457�0022753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���D��,PLTE���}:���ctRNS��c1B3֭\42(5_gb^Y ?e9hs~8!<>ĹzFou`xd t6��IDAT8˅V1G.UҫQQ lyw0m8?{ $�RLd FY-*۾ pl˝DNY۵=>%<n_A>E BQCA%Q6J,΄x E9BVI$QN�Xe@t Xl度]4`ŜӞ} +] }Ҿ>s�Z(ET2Q*ځ?QC~}GjPo𪙒M6�-BNNiw"]l~qhE~1 ^KcˆV7nx{  yfKC}p ҾyB^?>@~*{3&r`xCïo%Nn>X,E^\26?K~;=����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/Live-Editor-Choices.png�����������������������������������������0000664�0000000�0000000�00000147423�14332737457�0023611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��z�����F{���IDATxwxuwdӖNh %@P@+"EDD{yzwU,'@ĂҤ(�!-@z66cMv~'O~woJL$(.I.$� v_Ѩ.q$In+ |$=DDDDDDDD*<5 UPGg2żtD2MO+L²P;J zjcň(8/=DDDDDDDDQAQq=N(8u3fᎤ&N62[ʕp {YÇHHn r'S#|߱R"ky! h,�4oυ&T<$HKpbeDDDDDDDDBШ)uAh~k%` e&pͱ$I$�lܢރb QvUw  4 < {z$Q!8Ő(:`HG8�@VУDUm@E [҉SEEHbUJIIr䱋".^`kܾ[ej1qeKE= xDDDDDDDD5n!OϦ["E;˱Ӊ%5:d.*fCDDDDDDD.EŎlxzܚmIl6;DvCDDDDDDD6GmIv-5z$Qx43:"""""""WK# v5zΙHR*pt"""""""(1q=DDDDDDDDP!Q CgDDDDDDDDT0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""( P^ X2ҫDDDDDDDDukD n! bbd=^-"""""""C={8 BcXͲHGc˸*{X#jDDDDDDDTG\AO&4l^)@=S'' 1*mڱǂ-n;dkaOvVו궰74kiDNּ+)vZ4mRh=Nw鲈E3ش\JDDDDDDDu[XSIZ1! rPQ] 08wѣ$ᳯM8oj]:z:[Sf Xq$I^"""""""kVq# y� ASWhc!�$ {b<7 |)m^(VoO]#I yȳ蹪Ĥ[#vy5{!sNϛk4VaF@i4=c{% 7] z%"Μ#'׎'lLzt餓_Om�EJ[GAMfyߑqU ہrDlbFqyZQP [k3]muP\*"7QRM5薦CdZ˜(B"p E5EDDDDDDt [Гs/=BQ%dMڷUoVӡMq2,;:=).V͵k>քܪuK)w}b XU*QQ!Aԯu,1Yq7A|Ǻ]Cgxq9.-bpyCGl5,i.h~P;<:LNq4֠K'niʾ#lMNٱtތ_ȳ|uNGO4=.}oep"1z7ci}cN 0[=<RhcFWdq y~]Τ2 Ӱ!i(xauk+ $s-%"L{sMh{4Xy1KV nRkzQz +R~e+%&kv8}S{Cuh E% bnf\y4Gt9(hѼ{i{"'U!VlFQV-xMۺ_;oU%&??@v:b7<c~>.(bM%rO'1% jR.8{Z,VXGm� ր}ѰPa=5qmZiq i6DDDDDDDWZ6'Ț=y�U1ni)벼F 4HLpo/=8}Ǝ%+*䎄]xI^u迩Wu5jAX%,XTӎ@B-fl` ݴLʱ6Mª*q{H-M$Ip9;PCGATe""""""""��=y� $*ٵ}yLZN|e'p鲈K"o?Օ!~e%,VQ6QV~ܵ=wChԪEղ_P6�=1 &]zFDDDDDDDUtK)f\j 5QgZ͔l6 D4UL׽~TMP*$la �AYfM3G#xɎĄyi5l.Ϡt`#ƪoVQV.y;p ˊJSAxأT�xJkv'y3 kgsHKt vx �|ԏ5i˞R=R*+wtvݫ{ sG:wbq@Ď<DDDDDDDQA;qUӐǐSʞ oPuϏ\7j](�= ` X2zeY n!]4""""""(1}N9U�Q1 0Цes>y W;+Krm%.\U&k1! EF=y�`Pjx hVSdl Bĺ8: orxow)$ عׂ{M6 w GKmm#zhK*<& w:xtM_Twb]::w^1iDUGĒܶځ,֔1Qf=DX?&=.V DDDDDDDDE<aᎀe A2IL1rrm>XkR zvs7Ϧj>e0jzb-q 2Cc+ƌS!tUw=";GWNV-W g!j Dm EUiou"A3)- Ƕ4/UM4g7=vBB|\UxԈgl8gG-[ulpMRBbBղt:`F<eB5>k�9IuVgx_i;:չ5$`/Ku4jHNd!!^~1RY9S""""""`ՙ]Աz6�O v2k;AVW[2]܃M�;:[2fU.@v:*:bEs-Z4^Sh כ§IZqV Eѓptl%s9u:I%[-r sfY`5m�Xyl(~TTʛm%UT"b٪QoUБ7#""""""DmГ}m4WB�tZU3+}P6}ɘ-PYy"S9aA+VivKDo^)vb_b~dS(cמVo^)=sv1!Q5 e$A$QaYa6[^:KZ"z=ID)[j`0j!PM;$nL͵HL ga6GXuhH@qQ]q2 1h4h4 4꣧}?%/ꪬ<GODDDDDDD5M4 z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" zPZfHI "DQflAJrH+QT;wC t:=4 4 A =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%t^I" DDDDDDDDA!ҫQDoC"""""""2èKO=ʝm"""""""@9P;Z z<9(ʷ+*%"+|4q@Gh4v]|875ɵ!;W"K$DDDDDDDDj KѠS{ R<> {(Cgs]l{PdCDDDDDDDJ((cA;nGF/6ʁO$ÞZѣ ybűCDDDDDDD'̊Mh!D&\ vGEgcCDDDDDDDQX]l 8ǹA(BE:kEه3Ԩa z<>ag<DDDDDDDv =zt˙bSy]DDDDDDDDTTYHT6ݒ$ Jj}ۈjMIYU5M\7D$p(u"""""""nv;<'nE2""""""""M$*nEjÈj[q㉈jk5ny@"""""""h,$A=DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQEz%&8"&Fh8ou8sM """""X 4ql<v�V i=б=' """"]a6ѠM+mjIA<K'"$WexwQ%0ur<�i;ݓѨZVЗKLɵEz(4m3lIDDT0!"UX_0ur<6@&ǂpXj:hA&F"Μ#$HxD4nP;,s1`�T²8�@EW.nڶb�&7ψ4 z(`E%"=|uEװ#ƢsG4^,+z^Qb�B' @X?1F :wЇu0ѧؕ,FugDDW"=DDQ(Q|]oXSns4jܨz_?k@zMOQQ!ά  0sX QU[uլV"(4ql|:\v.Yf4/>qS2 11ZZ>j#F|e9w:K'Z&9>o g )qָ&"(SQԜi@C!K"|uӪwjuS[0[X(RNcλ闇jAQ7r4-Jq0ˊ.zͫ[&W-/;džϿ5y;^[ܺĸw@^ (3'.;AVEAhEfUATI5qہ(Ǭ'@[E|}tGRs 54K\("/yob]:8:7qt.k0HGr+-ɵḇoX?QY} 8+r:v-4:['G`Ih薦<má#V]Z%5"-UV-p4NJ�ZZv):nRB)OPYuJա}MkPQ)!Y~:wlߑlmPjPz4o HD9GYs"\M KykR[jѹczE".۱R+uGrk-4r|rNp,V{ ڥ8LT ϑ?q9`p@Dv '_Vu W1zmShC&\.q<׆m>IOON@z:! Bg ZpB8ㆈ'=DDTkɈQ"y" 1FѪ..~k<:<Bn%"[Q6/�$C9?^)!kp_*$|9 N:zc2>\ZN]?jwB~h r[UϿ5!=ix,smH0ql\J}V3o ^7Ȁ n+*$,/S0~L_)7b3~hƔUa/$ LI3<*y[ph4n1QPCU]4;0fD<WiDfYdeGπb׻K�4K[cԓ11zEWÞs �cF.5 ;:F+-&xմpL'~N~.�8{ H]?bQSy6U3dU;�d�fK,VdV"" "" sd"r06UbJ㯨X}1'GHԬa .'b5C sB<ztUuQ׿kj=**<ztջ<Nz)ţi 7-QqJHĐ?.Nc{fM52>-qh<,Z=<TD8 oq^C6Lk4ڔ~-Q5wJ[Jys񸺇Dݑ U9Ѵ3Ot y\l6y=quqn:Q2?&NUѕA՚k!Iν+-SD~ų$"vi;Vu04fD,65窪<Μ5Ǹ8y$ =Um �Uٌ(΋r8p؊rS>؎2t{XQPtzAUfΜcN rA2ZG_Mbc<pg*Xi7 0ur<tk^UBiȥFQzA''O9i> *͟*͒}Um:H 96=`EQz4`P6ugϫǢ]rx|<j5$G'Yp>߮ W<.:!YʉGũ 'Nڰy{XUMn}TFec\3)^dH8kÁVWrѕ? ך 'N=HRSien}݌<.o/=r"wܗu [6l15 zc3372ش5r?agT$w%e |�fYݚM%NKHqh)jX,7̭b jSuɶauNZ-#F9{�ϝ~') v-sRX,bŚJ�vë)wuXuF3~U;k8muN'F F(-ִC;j]k_N 9LKާHFeT8U9�Ξc'N Z L<tHH677lBNݛFDDkQhXZ{&$=vhrm%.\ \4 |-Pj߶MUSv/ޚoeVtPְ rI8+ܦw7ԏu鬮]}w9MfU-N 1Z4.(B9'XK;;k?TmV;ZЪjBѤsiPjh T7['mΨ۴".MżXI0n*6ӵ)T M;,rx݊c+.V!-\PsӶV枲yS;V""F>IBj_YV\=Dx"W$y}nhU!#Uޚo)mcA889)*Uዷ&uUF fZWU*U5}\#PlQ6KY{Ge~S:U~~Es=8;ur ݔrOېxRZW;Keώ[Q6&3m2|k9rv[MJ 7W-KԼZ S$kWzu-}u]}{O~˂DDT? `_ӛ@5n_v*kӏks-58qYnVzf[ "Zqg6K5 KbGxDk$�8csk6Yo6o`WQ)mv)Zc:tr|GIǚETϑ+#sϵauU[irpLy'V:r{\M!++%SE1l1 zVvK@2)+5~,V 6# We D4ix_N%^93vo5Ui0%AA7Ģ] ]h6HT_w{"wxM٧lxM1ҸE$Qf&#Ww�n5L8ʉIZ0ĀV-^G Tϧ, ;gG<'"1'"Zaq&T# * BHY(Gޚ(M]\kTqm^WӚ"O>A<�`WG~kU-I?3vu(Gh*-d6IH6SM?GNv{`79Pdᩎak챣ᎈLTVJڅ+T}2Is| "*|iT�<iw[0Xٖ*ஏbC=OY%NM%xCj1⒪} nRޏavt:�`Vc:IٵcrOڴV'N$Uֺ{Z7j9rjy@I9x(ˉ.z^= ViB%X7I(/qˍU%cuKKDtcCDD& 鿍 EkZ\Ic.[Qv&aS~C;.]\2()U(:8bv6R6:]C�虮<+9t`7Mrwc>^9b+hba2Ihq;f [l\ U0UQ BM?GJRT[@XV( eݢ켇rLpˍ5 8vZ0;E7FDDWX|euj6ubó=84j#;mRJjU]TzvکsM6xC,|Ky1qKo޵j?^C8k#V8Xtzѥ}ؾ~y:+'F/<M: KٗOq7a-q{St7C ȩkQѺvv]cP{c�Wn@*F/W pDDDW6!"”vZ$ily4;kGQF]7iͣlUGRaECGܛtw^ZR{_Vy$6XzaC dis("Fq=|.g>\I;T"蔶wO= vyc1]N wֻkW"mNmaAbJ <}cTǻ<ٽϊop|zwO{rp!m{ B9rXp4-nà+ U9T-ގwAP^#cgλq7Ņ ""X s@ H<ߪ/8I ; {R<nϛmտe x6l~)έ?F 5/.ͳC=!kr6Ѹ5?VT^ձ+`-qx 0 qõ>R@a轉n5!} "!QߨN(1& nJ�GP hpx\:Aڵmuy}i6$VU;H5lMB9r&i͚jpxU%ךe*'.\:FzA&K0Dr"EsFcGA -4~c"+%&xCRi}:KAM[ "6n5cH]O<bGzƍ4>2 5OQ+֬C(.gpo2d_~&sYw^x}fJX6bx毓b> z?ǎ#pj<vɢ/1DyXk'˗KL<.kU?U"^n"eLcFX,J$cYSAcw\|]Ք[`š$bJ)ҧ_}ѡnDI*}?t/QY^j\k2bPT,B`u5# Is1QPL8:tz{BUN:b2v"*.^ѸoӪXOy씕KEI~*;&"+"+PY7y}]S';.Ocї!}(+0zBWKM8vsͲ qTE,Z-ФV |n9ar >e ?-YäHDicbׅ^M~lV=Z{툍B%I}P3W^u/v|BUw?*$ÉЬUpIV8߲݌AbTN稵Ӽ'N:+-W&1!^UƱ~U)ձ6?cz>?<aЫ#T#ش͌}֌"὏=('~eAT:(ju_~`5iu!ߎe*j7:B%gdJ>6W "h "b^ qX $WD|e9LރIrԘsU 7B'Qt4OYk-J;8jSW6|2mmQ<v{6xC˾ hv{`ӹ.oV3.3"V9}`e8YVʵGERg ye771n�՛Y˯կ"Iq`v֫v]6^ƌEv:5Ed }gq G߲ـkϖV|j9R%cFƺE#I@v K~E9!I'Mu},~\Y,֬7c> dǩeGts" cFz ΜhT]<BiI I$I(E6f)ɭZVo-�DDAYB >.dkg=nq8jQZ4JiE;`V͗x-0& 5h.]} R"ߎ>EC PT,y;Agr8\۰v;KjN/p1htb|N)mwJUS疪ic Z$iH8{.<5p6h\�J$Ϸ:N@4n䜴vVG8?GJ ڥ:±>op'}[o·[|֭HLPT,[NDD^FFA ضtY 17?kEHU] skVA$xnpRY)U]rר5"}UrKx}niTՄE7(g4+-۽JVg>G 5):oGu^3"">EDe"=5:)A̚C?u4ؼ9[b'b@fFwnj~~~(FQZ0e|<h2|vv-W{-~AQ n67\}$"?RѕAQ7_y;\ŗ9axKV):fqNDDDAoKE\mSNzM(J()p$ۆ6ɖ?fE_kg=Gh,V EE"ΜH 9!색B'#""" G"""""""" HΘ"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" zD؃APiHo*Q8A"a zAPmT\�c$""""""" 7cC\=΍ɭZ0"""""""ڔJTe!Ga ] {"""""""(�R$U-H=!^\7Bh4KlDDDDDDDDᖞfCd@xFjK؛n94 zt>aE)6*!O$q҅kpG$h4h44iA ;Edn{h-UBZ9pE" K#$Iok4tj| )+p2Os(3i`Gn1"""""""@hEjiGd;% tkSaOj87YU;RZ yU|6ʔ3jjrȣj#Zs-Z=;GBEH$E};!O$k�a(FQUɗ3aCDDDDDDDk(7ݒ$IUGx xQ]ZSSࣜ.n)7�l x>q |\۵-Ar=>=&""""""" 9u%qulj oE]2j55xҎ!"""""""f z!"""""""o45_ z"""""""(>z8:QXE#Dj,Wj zr,Gmr(!PcBD5UFՠGMD gYYy{&XE'#Dj,WjZ z<h(ʷ+*%"+(*@\F]ӂ ѕ"p#ǹ]N ٹ"NQ\"n> 0j KѠS{ R<,W,G(XQM ̤3(I$I(E6f)ɭ^st صφErDWthD+/B ѕ"P#J`NFjF[rJc(-⺁@&Z*rrB T(ˑPфkSEQĮ}6vDWc9vګuHr�#Dz,WjRZ؂9:-=(C0"XQ\!I9Ja z<'lJD�O؃JY" 5+DTS)G!M)(8WEDuܩ<ʈ@F\!"'#Dj,WSZ؛nI %emDTUVfBD�" =+DTS-GB)AH)HDjv;<&ܞ C+D " 5+DTS#Q"bQݦ,Ղ 9!PcBD5l9jao #:e"Rb9BDrj*eBF݊DTF`BDXQ\!  q@""W)#X" 5+DTS,Q`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E ]WB'1AqhRܹv| eRWmuX40$+]^U$(Ѥ y>CDꔪ'x3X't�@Zt摒*Q=/#-�Ap9-X*Z:!" \1>C3DCP版\Ű\!Zp,ۆj ,wȿ}Or """"/6s$ۊe$L죇7qqRhL5X%;k3H/1A@.z4jAB "֙:Z -kЬ�xIđl+D5֦#E$-xX%,^R'm^9oNjMx* ])zucp4 .BI`Zcö�ZТU -7 TDaGm0zRhkBѱCbF�qru{N'ӌMX?#b~Jc9}6Z -펎ھjDeØZcQZ&oM蹪7q9~a԰J[wX<N7rh,:wATp_|kyRJT9!>1zGX+.t! yx~BT?tJ゚Q@fZ<\tKp~ :Ȁ{^ϛG:~vy2<lE!z'?͵{S3㲴|CЬij^wzqgJϓ(+}t=~p"Ֆ޽b ^O;}Q=u̦*OA0Q0dKg!M+-~w:ҟu 2e~-t&Cjև4x"85l}w$`pЖ9FiJJhک ;ЫKE2 .q@t+Q=02@DUF^1#bU}QѲr X �b԰f ~!nUeDQ2Q / E_QnR#Z-p6$|ȉ)1!/dUh z+<?!} _Jxs <.'r>ᩉл<"]L,wJ~ܥ"~PzLZ"} -{b<>^l̄x?CCcѦWXҭjZ+�o֩vD$!^5_v`Jio{Vd8^`hG N�$5תeumfѶ/LڱtU.Ϝ.U9\hG!6bƆ-7ar5tȻYGlb OE_p2w'ΐSYصׂLs@˕p~0y\*)+|MW/_`LZJ-ƏKّu}Ƭj(:.Vīj:iV8kzo[lic *% r Kٹ v,XT[#[րLEʵO�` Z~_ߪCV? z~rb)A�&SB�(7IfY7d]?{ȳq+Te޵G<?!.B/3aպJc-p�ıqN/yn!(lƻT-MTT{Qruڷw`ۤqqjVGzHu3U?UhoW.u`#QZ4z$ǯleEqگEx.:VMw]uԯO 5 NaJs^@玬\KWj9mj_q].I#M0yg s=X& rl8w!NIF]TKE|~쯧>cCqMU4kP.F(k"uU[\"Br8B-h4c&,„o/֔JZPy.Ypf)WEeWo^άjߧWp0EaC<fu>ߎw/PX,I0e|:,^bta+^{_|krƫ:~~2⻕䞲HQk=|N-bѽk_4ځ'UX2*bH0 O6m5uK-vա=KzU{-?\}aOAHQqC &'ݛ"nSeП/'lɚVjAߟ"QҙsvTTJr-~}bpG�VT՝u:AuwͭcT_6 >.;-(E+Q]4lĐE[MBM>6u�U]#VVJ n?$72W}=1QVKzC2.7Ye*iyT\@]):j:gCNlaH_mBo4G5:L-7aXk4ByԺRʊcDJڽ?r$].G2] l Q} |MA@=*bߒRQ.G303E"6ړ QXTT˾_\JEd{R`C*54V~Rb""'7t'Av;lj|)-q_ܛk$PYv TzU 5i~ݬc5(7\xmfƺMyx~BTu)Cc! y}~B5QàڰfØkY2p�ڡgɼ5k~oUkŠ=-B?-w;k}S  01t<HWo/+pBQCuG'pm,xQ_FC0eB<ڥHہ>q'M_(Q>z)g{a9䵃|iL]iP'N`MVz Zq0̠]n:gO--n G6/T`ظjw yB q]DIZ$i"I Xy/v`Pǐ͛iTazD _3DU0ɥv<d~]E_-icdC/z&OdG<%JuAzEʽ?;Q0ҰG =XMžp<͚j`'_X&asBܻ'%+%4m㽟%i@(z$ GluVX^cУ4qj4b]gn F\+IUea1_<tƉB�Ӱ+ٲ݂6^Opmh%j G8յK.;4oKÞ h߇+ 6jϓxɵbD cF4�tnI C%E#gLӫp<ؽςE_9xyN)3vZ5Ơ_)F׬WW͗I^Vnce 6b _'DW8]ԥbZ4ɕ5z@05{j+UBI;-ؽC//YYtr^1Ȋg|!tw<4YmJeq<S4 fOm<-b+ 1&WǶ˘M[͸_5 >NB^' IqRm5iB^H[͟<>eR414 y| Q[s-!ϲ Ɏ<?qZE͛zU8PǠ'JVs鲈5$Q@=rOSn+o"LG7= KwRt $Tlp"5p5kx V$1k~DfFE( fQ\[=ihVQ`DEv:! 'X'Nּ Q5!03APR*aમ>?2 &۴6˃fpq}Ʀ[QW3H vUfRZj!_͸k~׆GEnggW&{泉Dɴ:W@O9j9^QtG�l?ZvRH Q<+|@8dgsFgmoIŪ$!^@t.ܱǽBUFO `xj9|ԊoWx y4`8tK?wގ/3n'6-M/')!-IK't zuc~5iDjY,�iV[o ?Wם=ʐ'1AI >CG?D F]_u+TLRv-f( iEFUﳟ6TbMU-wuzõsO2r4ۊGum;-XsjN<?! MHm7!OV�!OԇU?U[^_p6Z4SϹTFOֽ>�1~L4G͞7TL*y�UK!E_qoLJ@RL(ն~12rh,#؊b_�PzOJJE~}bvdС];\(jgxQUٵ(RtzعÆ'msڊJ ΰ,"I+}eo6_Q!OB$aї8~†"_-5jԏrjڕ/ WJm=Tm^(aS=[[yزtS׏2? ,aKpŐJ /,^fQ]Z,YQ!'ȐG)rEyfFUub:<9ͨ ȯW{T:x$%+ek uۨרà/5qJeJqkt5OB\gߘ{e>S}8?YRUkmO>fDƞ2z r_((bML4=5X.hTz,gAnsJtSUO7Ơ$eGظ KVTʑr 1rh,5`v +$Kb?|u%:GSVUBY 4j(}y8Y,~rv wqK`ر{m[k1F-.8?55hXv/sDT(ԇM²Uut|'`ـѱq5BiG=QmܕP3cSਖ$`eMy!VlU& 2z WL Mspx$+:b hXp*aG]-.BќX oU)N!FPʮ$IJd<?!da+Ξ) H t:Y*LV=eY+0ʵ*^M)۔߲�,V _-Qwj.\E_^+f f$ȕ$|Y96b["p0ˊU :!ݺC|ۣ>jKqͿ$e yj O(B-őc6M>ʄ`6V`4`+кMflfƠ~\?v:><dgWJ5\[̳շKѸzѨfó6\.`U"_}Yv9!unkb36lqѩD:�]Bi6dTV?\ry`pu=7">N]pSy69gg<hwn<?!NB¬>H{<(Frk-5EЎSy?'(цAo EDuUN 9u{4Y¶[05<?+AY-3.$'8lŁGT?0̖\?؀zѤp>E%L멓PV.ʝwbBT˱l6`fc90!v[ѽkp#Wיsv6E7S̲?wζDQh. JJCrBޗ$Gv>Lwe>ڄ3!|Cnw\} e ]v P!- YlXĦX++'k[ND{ʆ7Ez5;sΎ?9 ξV;B5z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J=f@Q],Az^+D!cBD5Ur$TڨXD)bIDu1QR++D"`ˑpkVbnmɭDU(+DrB TuˑP [У0A.E=�h"@ A+DrB TuˑG @Ѡ]2f $'=͆vɀFXfbBDXQ\!  7ri4*} =+Yzt/6,W"# ׂ$Ih4h4hX~vNj:W е=JhX+ ο@F\!r!PcBD5r$Ԅ2[xI IDQ(٬0-HInԂ˱l< '8w^2v{#j%$ƋhҎvvK?V VJ}aBta9BDrj*别yga0@ӫ@=:v>Ŏ6E~^dM54B,NrrB TʑP k-gA;GBE9T0QV,_UY]9XQ\! G9ja(FQUɗcG\ @ׂPxur(!PcBD5r$TtK$U,�=t,?SA.ت,W" 5+DTS,GBVj8 =@ݞQts-] >, ѕ"p#G >nQ䭀 er(!PcBD5UH(JʂDTy,3r(z!PcBD5U[HMji(캴c(tjr(!PcBD5UW? z! " 5+DT[45_ z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z(f2 Zv\|9ҫAQ1DDDDu.+PL&C\\Zl;C^=�իq&M_|UU;y\Ďv>�6v⑑<ENNrrrpq>��:vÇGz5kſ/<�9s`^{|�sbZ޽{1rH�@>}bŊH&?X,hذa7NJLI IDQ(٬0-HIn|饗0k,~RR4111СzSo߾^w뭷b۶m�x�^x7�3f̙3}Ns_:Mzz:|I<C!$:F5k8ݻGl}j"歶?@B gE~~>� Y(''k֬/1b�K.(**�[}N[o_�$&&ȑ#|ݻwǥK��0eL&c4QTTz79q=Tk9[nŀ�8ȃxWO]=~�w… 1f̘}g`�}UGm~(K/^f͚uyga0@C@@3Zu^89/p]aƍx70k,?8e?#0lذ֥Pu\-X�?e:t<֮]w} 4+k۶pb< V[}:jз}:j<Κ>�0oU5}$žwyGXt)LRk_QQ^x$AoC\\\XvB355;vDjj\YS�֬Y>;vʕ+�?ߠo|޽^ơC]t� ܡCj<�HNN~VP5o0mU_c̙<�ߏ]FzB.mWF~ii4gφ(x饗.;@VV7nu|g܂$ 2۷GII ?~I~/Ď;dѣw+{9TTTرcx'ТEZ_;fU S>3ͰСCصk>Vr̞=[O׋g޼y5>Ç/X5j^紥p_~Em4qUW�Z-.\qqq_s:r\.כ?A};w8AE=ӦMozn#//[nO?-/h4/ecOB/V<F.ƪë^{ nnVo>d&< '`8ngժU8s ڴiS+P]VHG @8/̝Ǐz_Z9998{,ZuӦMn\<oذA=n8U뮻֭ 6EpWw Q}SFjh׮&OG~~Q^^w~ܯDM\t >|?)) |Ap4]xWUU~~~PQp͵v7N=+6io|ن#gyd;Ųma_o&8PJfA]; >\Ŕk׆|={LYǕ9ƍ}6Yj|1W_""""x-_MJKKn:|~}G0x`t̙jJW_ kڴi_��|M~;Wٳػw/:-Z ==]vE||p1�@ƍѾ}{/5 W'N}v۵k^zUB*Pʐ٩2�X[lv՝2nGń:赿-ocƼVUpX~܇Fzz:̙ncƌ^5L8r�aÆ>qEE�8ju �B!كM]f֭[sΡAHNNF>}вe˰3ESܚxG1o<YFD'AM7$7nO=>qFr-n:uJUϟ;wϟW)ΝÎ; F]whҤۿ?l6|l@II v-ONNF}.b`ؾ};5jL#tԶ߾c\L&lڴ 'ODqq1:w={/,,_;)))$ȑ#_`6^z!&&mK.�ǩSVVאVE^"VFiIRK%eRaQtHQ:u*<@ M6-yy|Mssd4#Fv>S<󩩩wygPۙ% @ڲeKdղO=d2iFz^<oPn7vX)++ZϼUV)cI*?fIқ+,R S@oH[2~Rʘa~2,thْjU;v:ʕ+ u6n(O!?>j(﹧el6W^Qߔ)S'N|YF9sf͚-sܹ̙3s|}?3y{ĉ4FQz饗ӧOrٳ=.HzǼ iʔ)c~< e / Oe:vi3n|(ԷG5i|~9դK/<ti޼ycw2\xQz}.j={v@ǬlHDDDTN._.IE%RqITRZ.7\-O=IMM;#_f zj}TC>cAߥKdgg#++ YYYݻwkY^C߾}qjmgMlܸoNddfflR]:Pz  mzKysZII >CNSʏž/1a̘1hyY^B\g*ѕB뮓o:t/^tFٗ΄ TChXrׯ_/fm/bذa;wiy<|7\ii)O.* (_y̜9 c!C8e.[ e>a;v:t);;[)]w݅_~%�'aн{^sΝmш;v6[ӟT=z?3ϟqox}VM:?Gzٳ3fd{̘15jv;֮]+7I)--ō7ވ'Ol44g?:&[GΊv=e}ՎT Z;r>5r[K,o_n0i$+� ?f0sLy(((SO=%?kv\;ӟZ$r-<x0N<˗c�ǏJ(ܸrG7ZB^o>�-[p뭷7tӑ< ;;[nnū:ŴiT)Ǭ,|8z(>Sa۱e902[}!yԣ'bСhڴ)ݫ@>}BҜ>?T%KOF#F#F�+W?Gb̙/|HKKÉ'/|~?|rӧcz> """|ГҮ];;哾;+ GS:w|{5_:5: ~IӧtE_$$$]vϞ=ѳgOl6U3qD<䓪iz)Eƍ1x`O>+W⦛nXx/$gq@g ѭO@d(=};jx$ g-�p=ȷ333R^:9*ԥKTAwO[.իW.?k&O{ò�G Ǐ|nIz6lؠ zl6<;Pvmx7��?*9{ȠAZ_|Ȑ!U/?˹뮻�8qr=)))ٟ+WoO<w}*߲eKHz8:uJ+j/O<qUyͪ _W z!\wumݺurГ. ={4x;vl5"""N72wA׎G=iҤ*(ٷoI?LFϩ-'No=c͎'|K,g}{?� -- ,PuzEѣ1gqWy ɓ'} 8jW9 {WGm=\$|O<|…(++ zD8ka8;Gڹs|=d2Pԣw 6,`WIYK')) _|o[-P3gj;U55+C?N3gD׮]Syjv}+VBAaѢEA{>oԨ\Ad [n5kQ\ >\US76m:(G#jԨl6ݻ eD~*xrh4[1eL2%$|y`QAi%%%;<ePWZZz?k2ɽ(U{yy G=}|{ԨQn#T)GfZx1 BE|_D-Nl~ $O;kB=} 8Po>z/ʚ>ʾ}[X,ƍۣGj]v;/^,ѪU+t:!NB$e-m۶Q~/]T#Azw4S~yyyu$"""6zw~V|ƌxgZ?OZJ}wn')))m_!› .:tiii0n8\s5HLL jy„ _5v6szɓ'1dȐ{} I}]w6Mzz_ <HD׻P̣G>GZZ= �Wx5 Vh hͶG||<nbyr qe[@b4}_,慺Czz::t۷o]Z已_@"0`@ѧOϹ־---#"""D} � zqqq㏑<SҹsgMBoǃ>(kii)̙#W߿?NL4g@*5kn6Ӟ9sFTGמj&U7/zk߼}T[(~Wկmڴݻݦҥz\??W}P6=�GS,gгqF=ؼy3�ũkx6f9Yv- /F1k\G,֭u:233C%%%VlllH_fO㏫FT[㈿`, rr$^IF#r])"th4z#<͛7#UG޽K/.\s8Y'/·$yn!I?eӊ`khZ̟?o ['@˖-f |HqW$ᡇ/̇ #Ve`Lj뉲yUy5n5[n p())Q6mȷ:ٟp4 wg@U 6ȏM4-0VljecBm۶ 뾩m (F|;%eEFϴiou?`ҥr{/sצ;v@fffP%>4 q<ؽ{7֬Y 6X�M.]/Z5Ⴓ]_)GeJJJL&o@~ zwРSKM#ouj4_#T*++Vk> ?|Põ3gΨx x+X1D5ѣG՜<uJ*7۾};.] Fz;>m ([j%<{۟ԯBDDDU"t6hZ|GիJKKQZZ~X<U6mTU_x,[,<yb:AR޽ѻwo̜9f?{9ŋ;tr'̜9StR4o<ʪ}QS[<uZxҺ*虷1##CXr?>GLR{/~ ?{lx(GKrp:s4p�&L|�/?|Yn�?u2+XYYT-uY}>~B6﫮J[~=yӚL&HDDDDTsoU[ڷor>Gh4xU󫣲Ovi00zhXBxɞ>}ƍϟ?\s*M iK9y:<pC70a@W;=:24C;)k<xW/zSmIy~ l/XÆ U ܹs>:Ku0o޼/ٔJT*!o-ѣG{m֩駟ʡnZZߠ͓ƍS6$ءk|4JQ~+w[jz-Ӊ?b}x*�Q&M=; $I5k<b�<Aq={C=syEHKKWTT0a|h^hii)?{wunf|!m c2^ <2R?ӣSKwqC[EmrmPǒ%KSL;O1fe0gs Ovb)#=s;iFcFYs^L;;խkʵ1MYGG7ux(;_u"s=~<~SuE}>~B6[oUշ{|嗵fɡkW_{ꫯ<}RVV\sFF~ֱYfXj-Z{'NbqO>Q5 zJ222ѼѸqc<cٳgW_ժIΞ=ɓ'O?˱}OG(k:x3qkkЫfj1sS)urT5zt>Ͷ+F :4{gr�ᷕaό3܆pNƍϛ7c{ުBp\Μ9S *_V"}ĈaovӺuk7}1ɺ>cǎu{ p}(;.--ŢEl-|RmXl@&Mн{wt;vQ`nmDDDDGRӦM'\~„ x0w\'h4k:9r~>t:<Sr7oFJJ F6llA\s/PmOӦM1c tO=|_ь30c r-hӦ Μ9#/|GF1Kkov(!顇 8Pwq�1 /�p ݭ[7|hѢ?Bo6~m?}> q<gwhNֹsga8wx5f͚}9|p?~9995kV.srr ڼH[T5ЩS'|n5\up'g>;vLp4;U6#t:=܃~Æ Ô)S0vZٷO(F+Vo߾]kN>}_+޽{wѲeK 6 mڴ… CLETiIRK%eRaQtHQ:u*<@ M6̔w<SO=%@zg|N_!ܹUVV&=֔)S"}QT j[�H r[ǣGJoe*1$e0IVY+~2u~زeKPyG&M2~_`dڵ2dj:Q_ߙҙ3+7\YF9s4sLi͚57w\ysmr͜9<gϞU3l0(˶ٳg=oX{{믫?o8 / Oetw^y䰽uQ~}A;m4m5-}}(eeeIӦMFjC~GI$?ܖŋ>]:n_pm]f9)QN>#]ȿ(].( J2\roz-ePrSPUWfĉ;Lhěom۶!##ە:A{>CÆ U)~4z?}�Z>;v?ON:tH .͸歶چmv1 cF+ird/5x�GQZ->̘1ccѣ޽n-[hr^<3ظqבz5֯_'Ԇ.[f f͚kbڵ&G999Xv-͛Yfύ1>hϓ5<ZR#bw富Xp!>CMfzujYގ{~[ 4A<Vr{(Շ㧺m{ni;FK.xQRR2AE[Æ �UCO5J|yZ$ݻnMDDDTe&Ug3$A$QaYa6[�7oƹsPVVшnݺK.~&.QqI\p͚5CjjdqyAѠe˖hݺuBph~~#xWΆ`@jjב1(-- hذ 2塨zmڴA-T(Nq69R(nZ-RSSm Fyy9f3DQDӦMkX?.v;fGsXAsz�gZBh4">>V^ȟyga0@C@@ϯPԚچ:k8!ک[v-?�r yǎUCl:Wk.㴻wVZ[h#z"""+"""SF)ה2xЯ_?t:%%%O0k,hYx zNq{|h4 h4bŊ*GDDD-j СCsNŻ<zH͇""""r]va8p�8cǎ�޽{W^<x0k""" ΕjnE =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`C'��NIDATDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%Qv9r$EzU��ǏGeeeW#$.\˗/Gz5pԩHFvy5ZEDd2!777ҫQmu&1Lؿ?/_w}}֭[HEPJJ Zh>sh-ZHozTxw}W}2u_{˻馛"UW]%co'O<<ի#ٳg]k׮(,,rrr{A/In&t IIIؼysXYYF 2?3y/"�_Zlf͚7 ˶Ͳeкukkw<)++gw#GDd?d;yj M6ò~,jB$8q6lٳgku˹fCvv6~'|x|r۷(Fz]z5Zl:`ɑ޴)-3IʿrL*,*.I/JN%''G(7b:ggϖ�HIIIRRRe˖j/k̘1RRR<S/^ k͛7O~/қǧ?}<i$h4JFQzjLu]vk׮yꩧTmٲE~.===һ9;vL޿III^sW�GFzɃߪܹst\xyfպL4),۬,\ˎe.\P*//Wmhv{X'- Ll֭ z;z>>c=1##Cھ}&1B?)?~: 62dbռ:6_SN hx{nz-i̘1n4IIIرc?8:믿.%''{=YfI^ݠlݺUu9ܵxaaj5k͞=ZĉU2By̎1Bu,8p }]N>#]ȿ(].( J2\ro"2}g;NfY:~Gr뜢"�k>͛7z9L)2331x`~~T�nm3fP:`yفZx�F_¶_*** /@$oٖ-[ۣF8MNN\%%%sΑ^m 99Yuu[-[Dl]b a0�@ԙJ!HYPW<yR.***TϵkNUI&a]BtMغuivڅLZ #Gt{nT>??GŚ5k믿m:˯z.>>III󩩩aoʯ<VC?/^|,YK,W^y:].|uٶm0bv={6.]ޜ+\}ըoҥckoU=~m m۶͚5 hwyδHX+駟V=f41|po999زejG=عs'Ν:>/{Ez)~9s')zFclܸ1u7o= �xgиqr̞=[O{ o>[~|k8/">|xW0aߏe˖nѣ#.?>Ν^zCwO@N8 5 .\qqq_ @ʂ^jEnn.f̘ܹ֠s>|8:$?6h \{ƍfQFoŸq.h4{0a.\?dۤ'_D χe+bcck| �qb߾}cIII0`�ڶm,lݺUo;˗C쇺=z4:ucІ t!՛`0o�裏 z>ԩSѠAS ޑ*CEE;&wϡCk׮HzH4RVr͙3c-[Uc*<۾|WZFiif9қǦ[ ٳ}N{-{!YӐ!CnU^^&Z^B[5ŋL[)Cy?~WjAMnՖP7y睑޼ZHYPW)[.yCYλ6ݦY~jd%%%iܖcZiΜ9n͍MGΕ+Wϥm5&IիMϳ{=~?!l64ҨQTӭZZ8M?v?YwTz7ݦ߹sg7# jm~Y=iӪ~(j*g6TMnz=_Պ|Pغu0}tIao>U>�۶mU7|͠]}嗑^e"UVA˿@dffʿQ8u�8~ڵV\)8p`W(l6l ߎZ-Zweee;w|k3\{yyyUZӡC>}:vܩzY3JϪj|駈q>oų> VAXt)~HobI{Lh޼􉉉?lٲEUuuUff&ޚoIII:thĶJ*l6,X TcԒ%KTGy`ƍ`U{>ȭbl۶ OƥK^ YqqYfk`׮]8rDQD푙pa<w�aÆ~رc�UksrrO?ܜ_Я!"N:Ç#++ 5B^)ə3g*۷Gƍ!I=7]w-i : QK.nӘL&/Aii)ЫW/k׮Zy߾}8z(N> N6m ==hvv !!!ﶤ`0x}}іWl6߿Xr>lߥKt=jE\+Ц[l2ԩSb`ؾ};5j$I{NBكM*?㠲vBVV Ю];3 gb޽8tZh!jNl5zh.//Ouح[7]QQ[b׮]HNNUW]q9"'':t@߾}*N8}CqkzmKKKeٳxǠ~G]|6l@NNv튌 jك,\p={D߾}n6RZZ#GСCx"ѳgO'3$#t:봢(b֭8~8Ν;vڡ[nٳgȚ$;v eee�nݺ^x~/b˖-8rڷo.] ==ƁtaajN:U{kʷ $>wgBJJv$ɄM6ɓ(..FΝѳgOs$ir) vڅG"//Fm۶E~<syy4WբW^>G$ٳGߣGG";;@ݎ{8s ڴi.]o߾^qNzi]@:ydbJ;wwKh:{,.\�ї͆["77ΝC >}x<w eʕxrssU5j-ZS[9f߾}8rݻ7w9܏?jf#ѐ7|{/�`8x wuC8u6lt\}\gϞ>j|f�|w{DŽsHxlPRR[(,,DnpW{𥼼wÇQZZvꫯFǎΣ>oܸ1ڷo5֯_/CcΜ9t35O<VIAA4}tFSLfQ~qXEv} e;e4֭[UU6oԨQ˗=Ϋ9d޼y?춬ǽU_v_#+^GbzgtkҥRFF4hQ &Oh"vIeٲepjI$);;[uK$=^{XJY6L>=$t nWަuj۽;FQz7ݖZӟs`v|7^G=zs_O=d2 iժU~iӦ|뭷<N(GpnQ/wTPP I$J'N8]jj{JYYYczݿlZ)S-UTT$ :rM6 F$|4uT߫FqmnͲeˤtΝ;CtKT~?egg{] iϞ=_#[ϟTۓ6]^^j?+Gzꩧ8N$I^z%ߵ<t…k) V\w9ڶmTӜ8q6ܹS5}jW_ύ3m^s 6xLiƍaRFF!;6uUL՚5kTNVY~'?+x|}&+>YLܹsτŋK/Y\9sf/[9qrJ)331tPe$!&''<peXT0/鲲F[R7|#Izt-ɓu?<�<UM\+$IToIII+1pBeĉ'Oz\NnԨQ~{U}'b6ݪՠRs}ȼ)((6l mذڱcT'N222<~Y+O&M$=-Ku);v]>Q~X^~_|E(X溽Dz֬YO z~m4CUZVkZ_0N>]wyG5K/$?{\UTx'<N,|*?z8g9eʔ`('_Z3q=8k\O .T-6Eh4z-^}ՀtܹsU'7.e޽{=N<TXn/s}G-]pEۉ ^غ͛7Ξ]<='NTmoҦM߈#<4o۶y Bw h8A / ]}… HNNz_M0A\AOm'wW,x7:nz%={VOE{k<f{9y@NB(m_΋rخEk?P=eeeرcw=v]=zrPSVUA zs{?\u{gϞ,Å |{=\2,ӟs2dL8qX\Nv>z$?F^=RoUlv*--M(-ZHz'Nچ uL'G˚5kJ>ۉWeIR(3EckiM$ ( 1!ESQ⊸ˋD?5j\䉊22 >Q%..,4`RUw ?V׭{ԩS̚5Kw36דqq999ʞ A"""H||<6G("JF>}yEqjJ�;+P3+)" ۀHTTYl-*l^k׮%}י[>gOrr21c JN>]V-l9;O,X ?~ܦz[2lQMC[_m(ok֬!qqqvvr}vri[}v}vlIVz==z4ٺu+ƍF#)**511KIɹsHll,'s�j "ݹs{*n@i-7{*=QHLL Y|r^OƍGbbbȪU$pƍ-ؖɪUȷ~K%_T.FFEk2w\:3$G 2sLK̙#)h4sNh"+yFQF:DFF{UVI~ۓ'Or߷6PbC-[FjmaiӦ8aӧjl 1kԌi5E=abK^AAAdƍdDJk !!Ari&2|n͢`HM֋F!gWYD6mD.\(a;I Q_':EEEqs:#z ͟?_zdC_G =Ǿ3ub2x`Ϸ+/{u {쑤߿?"qqq?\g7nYlIA̙Cɸq'=D3"H&9t#BxHê> =j2BFf̘A{n:I=z4R5 $<<DGGiӦIt]J<pl1DGGӴvS#Z*Vsʦu9hΜ9|***$Kbb" `[쌔h z$ RQQ] =RI ӈ˜XV gYNNzY/'VPR> $y 4јFGuu5GzzrirF2t,jQLxx8M;{liAg޼y41tR� ֭[rw޲򀝭Y/>٥~+Wچh,b-)wi<|1='r9s qJ{�d=M'Wfz-QFV k׮IHwww ǜb~Iy9kɒ%uk%QkGߗ%)<fFJNvwڕ<|PJFMBl3f='F#ɑ<ǐGMs3FQ=l)Ji245gzd=DoMqQ+DtCG5jwCŋ%NRRRHJJ IHH ,`P\:[ =:&^-ha'~ZCo WYY))>3?5BJJ Dz>,00ܺuKG|Ζ GlDd,:(;W]ns|2ڵk΄OQ�rJ)܁r秸\ebTZ:F'-B|J;2;w;wFYPtikaCnٲMdZWgcѢEʧ:6+*b>ՐFarJj86e؎/tJzcŊĎDigaՅ`0((+++90v^Jd߾}T>̙3ӓz2uTEԩSU#Bj߿swy\:Y/QQgyYYY5~v ^b&),}R؈.-;/BT-<4+DON&W\zrQI[ =rz YÓXГy%r<z7.b6 k_fAX+zd}v{KTMI̝;W` gzO�yFqq1s.:3Ӓw9CZ戡`0G)>8(g弽bNRxUCi^'_|줡-bW=E-z=]ö{eeeLW[RZXX( f3̋eӰm=[r2m3J~vEXg%,pDXHG86c OUx|z,FypT.7|# Ehy|rz?]w+a<>>FAjժF~ݒ裏(H�� p2e =MsQ5߿?Cpp0CJ`*!ǀTc۶m0j(zc=|Y0"?= R q;h ݻ7=߿?=fZ!s�7|C0��OǃNNJؐׯ_k6I}ED�f�JX(9W/ϵxb"rJzKt:O|CC^^|9^zɦa#i�}ˋ;Wjb>駟`V,g}FM&'E@+H%rQ)zbbΝ;T`Ǥh.?jD|}}aСv}ʆ߽ߛH^^ۗVÇ[zk\zƍSL4|pMEd4Ft0n8zo>(--l+=5 1cjd0V_�-vuu5 >6nܨ= z>ݺuN.ѣe1ͰczpBK.(w2c  ~9;dث|8 �>#|ƏD^^Msϩsܸqo~Mƕ�`yzn'̼Xl111PQQ]7MCCC5L W\*^GHHH+iŊ?AZ-믿III8@+;w~~~:MnݚFGwwwqN@.! ИL&x UCBB`�P(/^ pXȑ#+ <d2C_ X֯_OLbWZB@aa!dYM۶m||׮]0dW\oj: k�@途n>}X :z|||`{nطo0@W�֭56<!) =@^G׫gdCO?y^Z`Q>ܾ}ʶ^zի&;wށVZi.� ''^Jϕ;aK9Ƌ>ye[Vs5ݻYV,}Ʒ~[ dP/,,'OڔKRZ��T;֐#GNqIIbd5d%KmvBGɠ襁k… I&6GAΝ\KJJwrs/\@Kfkk:G˖-ݝveӧÞ={5k8=E jժ:{_d5R:ɱw^Xn=W ÇSl~~>ܾ}N8& 8�@\\jhrGqDa'zzNӟ$gXׯ_*,r��s]6̼X{=0 & 9Ϝ9j4�bGd`mB^Ԯ&��|MΝ;69B`ƍ|ᚿ[hUl6z#hyxxXk׎S-1E8řlzɜά-Z'²e��`͜233vEm%-++h8r8p!>kSzP [k=@MQ2ܹsBA~`0$%%AZZ<x�:t�@6p@puuӧOC2^:MX/g|iIX1бcGU9޳BfÃvҬL2d=M&DFFBdd$� \ AAA`g%'+{sss9EBmP5/vI.X󊲔ٚVj/ g-ʮ-QA-[ԔOLLN갞xCv=a妖֚1Ț,`-[-[45++z=¶m�f>uTv޽8,,̦L={N+W_qYfAxxS˞ZV�SZ</ի/�o ’%KEuX}[ qPώDl!:#z+(N93/&M᫯/Î)GY<x0]֦J2mwtrQڷoϽl?{,pK/qZ&?j:]%6_);jk-,,Mcr�HlCmҤ 3.߇SN@_)[`3[qܺu+= 6mh޽{{!>>޽@X:[>-nty`qfߟ/�P#(,X[N,nt驺i!x~%NCLlҤ lذ֬Y#mr2e o~o<d~~~fmE!AիWC=`N5�}wגyfnYO<lԬoz==֢d#t _%zVEIey &ŋm*WJJ <y�I{_w.O%aĈ~ γǙ< .[tV fz嗹{)=rB$v#+XRQQΙy111t TYYI �UL(**j1[pww4l_O>I?M P3xUZ[m :k׮YMo69^M%/vV@ڡ}4Gv^~QݻwCHHTVVҙx�֯QQQo�|}}#t ڴiM6bu{a= .]cƌXy#@wyG5olwYKĉ'`Ȑ!̭Kh4R/~ ,Y t?ZyŇ~H;HkKrjvYPPk,FAVމ2QAxx8Å СCp \TT7dx/ز?Om;XII 5$jzh]&OLz=; hݺ5<swb;TX4wܡ%$$v{\IjHT7x"7,;!5Yǡ'Ƕ=X[-///M^!Rk{?q;i~$'OUVQ/ӧÙ3goKX233zXb]4Oˌ38ݕ+W-6{Mno04oh<qӦ<1Yľ$PjœoAW��$$$@`` =z`777c:\|)qTVVN 6[lYYl߾^SCO˖-!00.ɓ'k�?N͛7 6��ߨҠXUm�8�z*؊D.]ۛ,b]jkɉ'}_"##!$$<KxYs ꯿zzK7ple]�5`g"H/^xh4ڔ+D˴ucˋ K.K@Wi٧z3XPzv횪kjqtw3g΄rHLL9sPo]vW_}%G S @y ?DƞJ%=zkyjq[.Yw3PSAMZ`yx<&K �ɊmYݺuǏìYӖpXD,`7|ӡ'.,bm lrq.xϟj 7ntڲ͛òe˨GARRCppSׂׯ_jaߟ=&%%eT��sU ڡą GZ�1kcɂ/2m {Au5/M5k;wj83/9FE =_!00 xرv-G-VGȀ<JoݺT"lٷPdu^+ut .99YƊUUU111쉳ϝ;ǝm 9HFQRѷ222-OOZDRR$''sQ\`gFh)))l2,,FEqF3gr:,kcYEEE5kvJTWWsBqhڴ)$ƍp%ZgkfˉTA"*xeDsfZA%DU&=3Я_?HHH~" >}dfpmX۰<yfs٘L&n@|r}ilzW9sƪ˴596m4m^~eΓ7##R{;M2h z|AXfl: }E}5 -NʺAaȐ!0p@8p ?Kaa!lk?x+R_~ h{sm?,MZn nnnZˇjzJL&nsεWub|T#//+ś>fGU/+**`ݺufذa|̙{ei?Mh[\ QD<ڷos˶sZdO5=̙3fXfDө�z=V\ .>MziU8O;v<BCC>x�&NHu"#FP… $[&v)&&)3EZpuuNJ0zަ0I5?B6kΝLǐ!C$nرc !0vXU e"/%iXekΜ9X4;GG}TO?mvFB΋Im-iYfϞmǒ!yѣG0b1b3F1dv8Rz[˒,VYMو&I54xqq1 6 >O4- oЭJ3EEEvG3!iׯ_mDDee%={VрR|;v """$ Q~)O4 n-MKK?YǻvQ1Wv7h YӉ$سg<n֬ϰo>طoZ5FF*Iw9K;w=I&^(4rc]Q2gKm6N23 8J]ҴaòU�~G=U5N$%%n=o<0aL4Ibٳ'{5N={@`` =۷/7�nPBRpaKEH۶m98rHzܧO^F -2}7ڨQ7FȀ?O0i$4i؟gU&<I&~iMԥעMJ)4"_HrY$~&q&"�@?zƒJIڬ,ȥwww'\x.̀ȓ'O4=">>>\cǎqio]䕛˥y&1\Tg �YfѼ֯_/#Ξ=[6?6 kgϞ|wÆ l߾KZ^dggs.^]ڵ+1LzII7:p�,^XRP^k׮\ryUVV;wri|}}eݻ{zRUU%I;tPI-[{-.?5>|Y,_|rtݝt8O޽{$''+cۿbӧOsNh4Jfw'ŲyiM7n=yp6nHWVV@Hd/!رu]xzzJ`(-̛7YplPQ։z֭[ܵ0.+W .Mff&i )--:4]޽]r+'6rH{zF.lU93|pŋS]]=}!ի rIV>}fK4ydwgaeԴiӸkfY"cbb4ԇBȴiea]BIOOd+$:R_Esy��ILL$fKwYރV|uJ퓤e?^O._]OKK;tPI=/.WӧOsX\\LOΥ%yݺum<==III QnfddӧTSغ&Z}y&kCr}5Jnn.FrIٴ_{Ӈz,]xyyq卋}UUUd\H}ܹ#;^BjtM6I߽{WX=}wb?'-Dy߿_VF}q„ #e?(C=xKC|}}|XyYÃܿG&Kw^zϏzj r6 g~?<&OI^~!)(,"b"o>b!d  #K,!'O�"8` LF-iXJUXak+44T`��9s3ߣb**�@d* ~L&7sL2j("9C!\ NEI " _I$s (/XI!111|ݻ'i58qBϟw(Ot i!H � dѢEv =ltww';|$ƥKJIHHYf Yx1Iq%~^eeԵɓ'0ҿ2!zϟ/)`` /8M,J 0q}rƆ)SpyL:U = =<<;w^/,XXd!D?&M"[nB9sb>aYv%rrrd2IǏ .$G?J#Ç~>AAO~~~f0~l%%%q'O4BHdd-oYr/P_O{e?}[0ƍ# .$Cם^O뤦ʶ\V޽{3gŋ0YMWWW`Uɕ+Wt}g%RVV&;(,,]BcpUKjC&I&Ɏk:+dԨQzt%eQ3eSk!iy鰘L&2x`My;VVe˖Y+$$D֒RQQ!iwvj1<yjeߏJL:lm!3fpD7**jڵkeO W9-"DfΜ}'>>^6hQ4yZ =ɒw(*-ɢC/E 6>|XQi'X iÃ<|Pr"2vXMr588X8&v}||dOQQ"tum!7n(ϪU.L&A\NٳG1kBjړ5F;xB={69Ն`!f6]4bY<|Yyu244C!\~L0A{gaZdDԩSVǧL6""B}n*}[ =IIIVۇ`*~Mz6[u@ڵklCl&K,^^^$3S:Q_lϝ>}ZH+ǎSg:ǏפC{xx(NH[xĻZQҳYILLDoqss#f͢P-g%2uT.ϑ#Gj!ZKmȄRYcgŊEj'z-*zD#8j=zX&N`0իaϞ=;pj aǎ?�6l4"">,n ۶miӦܦz>c!{_ |||M&L_'C~ŋ;Fرc\+AKyP l2Lz찰08~l*�6mxnG>/*n!""_ު#G)RB,;mѢ#tޝ3jС6Emr&UXa߳0vXؓB޽ƍrzX`8qB6ȳ> 6l+iؼy3ܹZn-dQPP|'vŨZ뿸בZ 66ùs`Ŋ͆ W^LYaUK'VZsΕg�Pdjj*BCK4ooopGDDD@rr2W?RXX^^^0~xI:?_-s\T, MU+o].]ڵk ??f3=zq~xl[" Xƍ\p^ślQ�{,]xe^}Uu떢6ep曒kϵmqv1?< ̚5 ~glnnn ǏݟFL,21,,`0yСC!u{=HMM3fȖf̘ tY~ݺu+I&ӣDf`pY<())۷oÒ%KM6@"T!Ȱaøsq.5CJ^mȄ͛!>>^V3fHޗXg!%%Eq b 8x$}F#VCTTBBff3TUUByyt4]ի۷.]omW\̄"QXV\Ⱥ<HKKj0о}{B'MNk*vC_lPx ܽ{h4:T ̄l0СCСC27_5lt\9ݻ...ЩS' P\Xн{wŴtSݫrdhݺj}RJ{m=CCaa!Nii)ܼyJKKm۶ЩS':} ݃ǏC۶mMFw|;v ��:)Ehs6HrTWWãG ##t:o:tMNNA-W_U%%%p](,,m+bLuVXĉ47R]] �P3Hf3f l޼��f͚E7f" (//LxWl �m6�f"_"HMMׯCnn.j :uoݼ_uCi HKK|hӦ tI1Nl\O222 ??6m /k]KKKʕ+chѢХKͺ6 ΆMoawY_~t˃f͚믿]t;jzOtf͚;w&? 9Õ3Ȁر#KvUTT7oބ*70 ~v?<L3pum :t:h[ l 4Ԡ3hӦ/rrr0leiz.<;%f͚AΝ: i~mڵ+\z222̙3f3<#RѴZh8CNgWwuuyJKK@{ѣW^viҤ K)" m*;-[ry�x%/φիW9fLp5�X,Pg777Y3]k�z+r=zlNҬY36fH:Z|VwעE ٳ߷&M6uݼys#hT�Rk4%g{ǙVZN6FuL.|R0ANV;v"5Z鱗lX˲2HLL EA0[oŹſyfHMM*�J�5ކ �m(,, pKDGQ+*--SNʕ+h�v-f"=L2ٳBBBÐ �5.\AAll,M;mڴZ Ax4F ׯ_�+VwYh_:TVYyEi?�سgDEEɓQx/Sv54СC!;[cٴ& ƌCzn_do !!$Y\^aNHm ,]fϞ uVECr|||O>tbiǎt`0p:cĉk5/qE>,1(m. iiiQky^r=Yeɓ'fzX`xzzs=WEҌ/?^vٝh˗/sF-\|Yb9sս^쥲RH*ߡ^۷n)BKBB|嗒fVZ6lP\>̼^УG7ޠ l]#.s=FuÆ {yTb7Z 6 fi׮;ԩS�P_ 矧!ۛT:vHE)r 4\]]i]،'$''î] 55RSS͛��гgO޽;xxx@^$ykΦC[ݻ]JVn}Æ W_}NЩS';o8gyϟ p5|2<|^{5ݻȰ ADBAAAh-\    H@C    H# =    4    4Ѓ    H@C    H# =    4    4Ѓ    H@C    H# =     .#    m1=    h$iNBH}?+    HC P!yAAAA-UUUԣcKGYiYY}?/    Hصե[5=.PVZ˷AAAAjBQ;H =lf...sqNePXhFAAAitt:c-1У頨AAAA {bs-=z,7pqqWWW6!/? p    B /�lWWW=V\B 9B //JJJel˖дiS֏!    @ee%@II)W+xlJd]s,Blj*0`K>    5kt:54iYtqkt:]GB@;Ͽ >hAAAAbqyt:4E[8mX%{r. fa"   s}xt:4Fz~1&4 l&:̲-�tAAAAn,˷,6lգ緍aoF-AAAADDΐ#Yc[ѰtX{؂Xe[    (m,MVS    H7(qc&C\x U+AAAAǙ =uQ0AAAA6tg    4Ѓ    H@C    H# =    4    4Ѓ    H@C    H#VY����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/Live-Editor-Usage.png�������������������������������������������0000664�0000000�0000000�00000044255�14332737457�0023277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��c�����F<��HtIDATx}\Sg/HBk0�[$a;y-M3PeLJV-c-i۱8l5YZ펡CX0&jQp> +=/_SpΕ䓓+'f@DD�1&"cLD$�ƘH�1�c""=�tw\S{D6!8kO[ @K76Qٗ_#*f cxշ{= 1;zI!8pΘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""00Y=Xb)ҒQZ$=$A1ƣvIPZVkeeCP*I| I0MXUh4 ̈́:%;51cF`w\\ BF"ew G]eӦ~UKK#vGFNu !<<BY~rleD M/gel޼ I  �[lƍ۠Ն8{ӅA ;=!! f8;cY>c]wEaM�9JH:���EE@Z=X~%OXRR�n >| Gg~#G!..11q#jƊK_fee9*?=_$l*N ŋPSc@xx~(+{ePUmm_(O*C}VpkVHMMʕkQ[k֭hn͛w"&&۶�jr?|58 �x4r{gg?ׇܾ)\DhBuQDFNǛoA$$$$av/8Y,((xnJ!'G)DuQjACCMá_cm0MxW(_;usĹ0Mطx"s:4A{i�7c{ATU}�фP/h^y )=}!֍i4\tV2:O!'G,�~Z{m^<ea0TIaǨjݛL4�7s~W Fԑ#f4d:<lY2ՆB S◐d7`LX,0Mxŗ7˖^XoHÇX~vvΣ 99zeO:<<qq8smI4%dWyXCy{'S6\+Aߗ냍 {ԀFeڣoH#\~K'C~g9\z&Mr$a0r\DFNGg9H4Htww�fώGSSÀ9Y"Oi x/kj hiir$IB} de-Q<hGcc۶t qqDdtttU-26?awZ:H$4TKn<X+-V8{L盋:?Lh0mʓ$IQ<q v]G`FmQ#OHHBVlwA y44ٽ 722=!Jwީt( uÕ599zlݺ [nRrYSh5kJ4ՠhzHL;`xq.֯_ Rn--Fe:\lGYବ%ەq^n޼cŋsP }Ȟ|4FжIHf+|+^P?i<0 Tr NS 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�ֶ5:-,\zz sjHNNWI T-<o5�Ot󯘧u y 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DDP{�ZZZpg͆v)%%%=L"al6ڃ cÆ CC=L"ap\'DDDĐ=D"02C7""O># cL.31bɥ{Dcɥshp1Srh<؋^ዓ`= 8]|wf"##Qnj8Ak2b68c/.hyh'cZT l7x3L�k\|Wg#?GEtcN~'tߩPei?OH 32w!A t="�1Wf%= pOmh6}k|qHcL׹kEjǸ#:= "\|WQ~|Wa1DD"` 1&"�cLD$�ƘH�1�c""0>jKlls jfbiU{SgLZB�\|\%2rWH1IHHBV44jVuwHL$NS�w8ҵ(//EiZ%M+ v��IPZk!I\0?M!_F^Ka��*+,`V]ScP{3 cL9cN:h4a߾Cr>|UUh444ԡt-� #cѮ,ȑCKDJJhz:Oaժ 0M0MOBA3XZ2%IB} >|P tGG;q=F1&;fs"#cn-�42K+f^|e%Zm-+Tb=:]�|s OIpACBBrŹr/_}u _}uJ tSSt0LvڛhT8gLڋϛ7DBB9mvmjj@KK#,+<<8gd,1}�?chkj غuӀ32)ˬ?4L={99zן@F"L2UJ4*1ȉ#*jƐ?>擨1(ANQ:/ٳo[G',^ &%5NSШEFNGGYtww {9yOvho?=^ˆB Ù3a;%%B AT DGBqq>nGF1Q++{Hv�@||Ұ{sU^ fssٳӟx"X448MAc"Ok77A<.5SG\fBB6oމ|e8<<.7He)H!:zڛhLl64ywi?;tqw 8NS 1&"�cLD$�ƘH�1�c""0DD`̤@L0<�H}4z= }Nm:~{;Ek@cm4Gp ":c'=/ )Ek/wc#p>=rA0:B1Z@z:YSqU :{~!zCL`\O5*JUdž # 5ut?L@1A#md/2m"B?Usamy="!qH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&ljHX1ŤIp A$,Ƙ" �jHX1cL4<Ƙ܂1&cLn 1&`[0Dc-c11cr Ƙhx1cL4<Ƙ܂1&cLn 1&8q"cL4 Ƙ܂{Dc-c11l "… 3grO?I$�@fO?;�$H$ NS<sCO#88X! 1&INN? dgg=<"0Rsh Ƙ\*99vqh Ƙ\qff&EFމ>L M="_c+r n?+Q{8DBbɥc+δ^܌p\nmxGa 2}C �4dA4?_=4"0C,c bL4cLN5Re 2=Ƙd[crцX Ӹ521q:9du1B,cɗ14&rbL1QsUe 2"ƘF!1kcrB,cɗ0wX `iDjX /`iXjX ciHX 7ciPX bi�QC,c1dGd61)<%2 cL�</IJI xgx 2y6Ƙ<6IJIOQ c}X6)p2d`dddTdDd4d$dddcb{ 21R &N~5 21B &NgI,a hc/L"aC<6 21 0$1 c!XZ -cIMrE:%[b)_^B({ Wo޼F F ӣCxx;6ר1Ȥø{j"=}!֡eX,N[nT w In 1D9ٳ�MM i|pCݔGee9�鐾{ܒ$tr^Y+zer`dr CfV . gX�܌^VڠLg'eﹲW]&TWEg9uHHH;a?_�> фqV#uSdr \:$yvIpAbX8:]`ֈU6 *j�@`W8~#�ϯF`?z]eyX�lmXuH6 юzugd,Rsh$㓠Նyw= {YDCa=HަjFWy$'?VT P . Zm2z]Vn['&NSxM3`et�. 3&2r:O h0m<I#u6܉1@ \[7aٲBh!jClY!`sLLRSw!hKN~�55_ݥz!&wl6Ac) vcʵʛjC]6<<ЭUjsfb'ˡՆ(yN 9k*Cw_j2wbRcDxSϛ0ĤNSx85搽CLjb�<~ 11 1$؋0ȣ(c/#2<"D{M3`dhc/A CL"b<CLb| CL"c}�cAf0>`}/!&O _2CL1Qd<cü1 1y*mî?7Om <cۺG؉p6l_(++S{8DfaҤI-:c'> s3</~ E4*x>d2aʕ>}:v؁�޲({ԓCȭjlڴ =mۦ=cb刉Aeeb�Xq!b�Xp!JKKqQ,_/_V{D#➱9x JJJFk}ycŊ;;wxWFAv$IJ?(,,DDDz-t:O4(G~'x=т<>3<FEE"""ԾD0>ॗ^BMM ^z%?䱄X_"??رcU.D </ve,_555xWb@7b�{gL4 K.Essjׅh03R===~lݺ?𸗩xCWWWގ۷#11ѭׅh(3BgϞҥKq)ڵ)!!83�{nDGGg'|B4˴aҥo{n-8)!o%&&�Fׅh$innҥK={`֬Y.Yϲ B, Į]`͚58xˮ #c/a2",, {w2Ȯq_/㏣vr{3go0Avge;ر7ovzNxsrr2mF1~_w#08`\Q#}mٲ=?*c {;v`׮]HMMkXdC,{_Fn{(?vZ`A%IJ{ { zjh,Ze|V^8l߾F.{˗/& k֬EҠ !_o|#c=Dߏ7o޼>CHA=2+8CCCoR8{,/_NlٲwC X&FAEEˏ&';wC=-�owo2N<K�ك9s=Q[a9+{deWpgE}}C"/i AL&X:+*v dގo}{CN<s8uoQTHl>Cc֬Yx7.`zzz|rOBII yNS(..FBB*++b`׮]HLL7pX ǛQ\ /رcx瑗pȃ1Ƃ?/<W|,=P�76n܈Aff&^yCh|yHaly֯_S4Uͯ 2339]c~cͧO֭[כI Wp7ԩSy�ڰ|r\p۷ow_o&1>|֭0؍N<WbccPmm-VZH%?&| 1uTٳ!)))x7ݍKԩSj~DFFb޽ F2o<TTT@$~ 1v1111x0aЎ;PRRdڵG͇_g}|C" <?ޜ^{M ~',rK/wiӦƬYP\\o|#Ǜϫ=$ԅ PPP'O?)-[HexK/j'Ip ~I14Z/">#~㛏cIx7|-[oј_7|}c<Ǜoܸ7x#z3c˖-8p�G1c'_Ĕ)Sob֬Yj@EEvo|A<m F# w^FchllD^^ G7 ^{5~5"7g}\$$$_GPPC"/VSS^z رc!4(H�XbCL.~W^U{(Ar5ūo` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�y\p�pY�C駟�0ɋ[>}W^;mQ{dK#عs'***<_#??_aIIIQv� ᅬ`INidggW=WLO{C\a�>{7=8 WjOލ1v`>0ȕ�1F`` � 00 r;�|~c�}Q>0岳>�?5=-q:.^Sb3-4-٩?^S{nw%�)S-i'~pǕ1=61B}njCWo ; tUߺ{|`fj ^o!3 0fP} 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�Ƙ$IBiZTV=aǗ+jQ{HD>c\Z$)uHKKAHg0T#--yfsݨ )cox=jC4>vei||*ƃZ{{w9 /PG]& I/#2rVkVX zLc6GwFdd,Fr| !<<4zн.KG(I| �xq!%$$a߾CN[elܸ ZmCf;h.K15%%娪ګ\T _'*))GT �?�\`֭�ܼ CCoǴiw؝'߶Zmr77֭+$9TUE[^Ҋ5k q}n|QQ3R~:�6oމ$ge=`ekm0hp>;Ma|+W ܚW<0MxW(w2 #c3'G)/ׯT.gpTWp3W(۷~~~ QTNY ƍ;EE`4z 1p{i�7ejՆ 8n޼S/?>a4P]}e$ Iʲ_9@Xsr?_n71hp>};q' --ho?_<Ȣf 'G:X=8rRRSRҐrZ\\"#/΅NF7O8 A<`Wڠ<OxHÇh\|_ijj2SSӑ�h4HLӸre|!y:/\>oZ~%֬)DmQ t 'k}_[Pv%CW~)7O?uWSSt0DGTuhlGMAyIWF"<qM\"7Ptaho?=웣7#'GF=>(wb<J~3nxIi_��x}�n ?F޻<7/y/;Vjήd2S3g,joS{Vk7λ}|,[V0됒DlٲA $ Z{9z |wL$N%t0̝WEGτNfw;/Ç3Te0Tֈ<h4_c:evhn>i7۟FAF"=u\\"bb6^o!55ee/+WŶmgf.V;*jJJʱfMݼ5$IOl((xfÕ7aw;ˇ G~2^ >d<GƐdqQ vv۶JHHBVP6p.'U6h ?fS{ɿWaú/̉*+yn\wҦp~ߛdEa$OaV$=i ""0DD7"  1&"�cLD$�ƘH�1�c""0DD` +>nl~:V\aGB\OEO{ׯ�[^YS[y^nYWCC^|EkHLLt:'NIn\e"Yz5.]_j&i&?wg0ܳ0QctkL[{*j:.v'1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$� wy.\���:O?�lI^䭷RӸzi ,@LL$'l6!;wbz=&ye V{dAvv6={ O?1މ1App>0wc0؃ rv�c \�cl� ';(88=�G\.;;瓿жjQ6 ׯ_?0 ż4Pׯ_�W{(|A-Z0ưq=4rݸ_aP|{~CY+]S{^eOMD&L1x_ N9c""0DD` 1&"�cLD$�ƘH�1�c""0DD`51,GiZHP|bD\#~Q$I¶m`wzV}=fzQ:/t:cHHHR{s8}855Ga4P]}G^}]_zhj_}r2NSh4$&Ecc=::վD.599zףf`߾C+2n3 r%+ j*+a0T+XVk2:LͦdTV+Y=Xb)؍+֗<`șbiEnnt伾V&XZG\NdtttEww j~>6,pr\72}[ml6,v7_}Kclb 'A $I(-]s^ eU^�P:"#7˔ ʜe;nݕ8| >hBUhh={e0Mx=jC\gOc 9c}IwީDJJF%IBuoPRR>f %% '#'G0?U6(ˏOBA38s+^4#z/47ğr_OO_86XZ:/?�`\$$$avXZQP 22)C fsgB CSS;MM hIP_g'}c\Sc…!--Yo൴44~4 [/ꔽt5~WHJP)/4 MC ل_|YVe Z2=6WjEvcvƸyn<FAajDEP~Xdw tu$ixx. ^MHIISndg)ySS#;'9r))ivo!55&1h!OR| ] tGG;73OM鳜v4,55+WEKK#~ZL|YY9.<ntww)AJSSZZ?5o|uWCj+|1vi4dga͚BQRR<Ё{bb#G!/&1%K+QSc֭RSc?='omHyR-+{O< �St Vk|RyeWV�Odtt S#77 ԀD̜fYN,!! YYKfώW";7nYY#ī̋Z,X))ix=�nN9>|ХfV~rE+9Gh`6סew7fVzn:ɷ먑$Ԁ3g,HHH~,HyFsIdd,BT=:5'Q_sG}]y\:g,:r{Xq]C^)�. NBB**Ecc=jkʔCߗK۾bb9vj6:]Μ8e֭P[kT3yĹx2�7z֯_Qj#siժ0됒DlٲA3$ sjee/۽yNW2�pn9Iֈi#q7pEӀ[BrfٲBTU;lp9hytLA\\"#\<Xo`GK̞=8彎ɵ\6M!/+{%%Xr-m{n83sh4XUTV+s7%[yyc}!!! ))iʲ!'Gs|`sYYK99z+V"|�`8sƂk(.W0#PPz8 m.DFNq *jJJʱfMݼ5$̟@d9]Ml6m3p.Kwѩ=NTnL ?] N@C_ +^?P|Q'c 1&"�cLD$�ƘH�1�c""0DD` 1&"v?pl@: AGQ{|!ڣ*~k�w=�'^XX/b_y.Ϙ|u_'ȹ8gLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 6Ma0D cL$�= rƘH``ƘH``ƘH``ƘH``˗/= rƘH`j܄1&c;c"1ƾ1&K.=r1ƘH`ryDcNH , �6 � BLLC#' %33gϞ|^|INi "Zj󂂂c"`H. c"%'';ĝwީEc"A ^wc{�0|{9gL$ m?O8c"A{/ U?,0D. H�=zAb3&L}B0)0�#a2Xe wc1\e bHe wbT6dh,!1ޅ1&RxB,ccLgX {Ƙ͜bc"7rEeJSIc+C,o^&M { Ƙ b}sdO;C,c=cLBbYc"Q32s0D. x!1Ȟ1&r2B,c9!1bcDdq1DN !1bbɓB,c'Xv3ȓdA0Dc!7W 1&oAcL4Jb>Ƙh12Y]192Y=1|!2Y1|)2cabe {1DCda cLC<dWa`v\-4 0DdUc"0ģ cL>!=ci 1bd-&1OKҵ,w ;cL>!Z{bR%3>vy] cɧr8+k FF**EYNDFNwy|cra0T;mWB_`ǎ1&qxx$Q_$8 ,Vf*Yb)m0T+㫯NٝzAƘZoi4LvO K+ AF"e:#'G)e~l^rre22A ƍ;n=ؿh4a_O9ߑ:wdG=�"W~͆G jGBJJ*Lc2}?FZQQ3� Wi I.&+>ËI~_ckOv㯿'QUwYYKюz^nSSt0DG|gҹ//bꔩ cjw P3H}.[$tvC||nAV֒!|p]qpu h7խT3&7$&'?LtvSO N눌Z=ߑC<z1wj-$h4dg硱W(XZqn�VEkw8\7q3Ӆa˖ Z{��WHho? �l6A.gt˩SVk֯_i())WTY,Xg֬)żyA�|9ϊq}u')$a۶WQScPz;8^g`ǎ1& C<^ 7cǏ1& ;C1,ybaɧAA5عcyw  0A 5ckV _ Pba~o !v-Ƙy cA0ȷ0 Af݉1&/!v/Ƙhdc"Rbu0D 3aF1&%o 2C>Ƙh ) c1 3`1&'O 2C,Ƙ <) c"' 3bH 3bcL 3c\@ 3Ğ1&r{Ƙȅ 2CYc"S# a`n> gbd}4!\12 gcAf=cLg!1Jd{0D*ObLhCfcL$<ّ 3މ1&#AfcL${7ƘH0 4Cl6MA@x7v?!jw}@ C.i "]aA+ҢPc"�&NPc"1cƘH``v5�/`=c 11c 117 {ƾ1&ɓ'=r1ƘH`r1D1DE`` 7`7|cL$0w0Dc}cL$k׮>1&}cL$0w0Dc}cL$^ƘH`W{1l6C 7` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""eDBW?둜0ǵc駟ڝVWW�`)s y^߽f.1`q8=""O>#a41cL${+~1sh /%]_]U{48̼s^}?ht0%yEǁscCqvnܸɓy;z2kU<0 C^{^l@<0|'rnpΘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0Dcd"77fsS+IJKע\qX=Xb)ҒQZ$z}�`FZZݿ+jq:/=ۮD`Fnn&,qjAeeӶTzT'I| I0MXUh41]OnSD1)#PQ.FF22q@h0mj_M] I/#2rcj/ZZU&--hlOd{=Cxx(,F_IC=;�ԀNYf^^W#%$$a߾CZ$Iϐ&ӱQ=8[{itajC}=f{ۈ{4{+v/=3yϛQZv/=pm^P K`6)s/w<ee8mzb|թ/߭_'u&\[Zq4pp|[V}orlݺ '2SleeݸNS4$IضUPU (-]\1Ӡ$I;TB CtLNyGa4PQ.@ee9f %% ';ڃÇ"'G{ʕknr>|UUh444ԡt-� 1q.ڃO>O9rkO tuW|;u&ew_{w96n6e@yy/츷uee9P2o5hV!6v͹d:ĹSF5ؾy֨<h2}#UUUn꣈7,$IHHH;j4~F Zmc1@ TyFkilbIqzSHKK…aڴ;;rKK#OW)+LN~�h0r$-V&ʃE erfώGWy}朧f۳3!..U$鑘8d:fwe qDGDlV td߫XZQ[kĪUɓ5c;gώFAb\'Ng#'G,'<<qq8s2e#%% �ƕ+y86v_`O>OeGB<Խc"<<%%jC~JΦh`2S^V;%ȑC+t ))iC7755zSu7!&&'Lc8~#̟� uXp=Ca9+kɈ $IB} 'jvl;455(>\wy5{v<@KK#2:{Lc@;-.Gb\/p37nwllªU B%KN~�w{ f �P[7aHHHR}<]|55~#n4 *!! YYKpAX=(eod811q|$$$8a)d522A(A^~{^mV%:hlwx[ȇ9e ٮqG:?𺢢u;AciHO<x}HIIC\\"l٠Jrw96plwtD%'!6vfFEpj_C*I9Q59޴x3Ӆm+W$ez(|nyOFͩǏ4qH �Zm(t0 jk^-1!oUUEm+WEdtde=w7de-Q^W47h.я!߸-^X!Ccc~HHHR u/^C?ۮf LF\ h--1 1qZ<Y3qj\�PP 6/m(I?nm֗'/῾Y_'r33C^{DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�\ދI{Kj]w0^jj?B&MCv+49c""0DD` 1&"�cLD$a'z����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/accessibility-div-example-2.png���������������������������������0000664�0000000�0000000�00000357737�14332737457�0025325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����B��� r�� iCCPICC Profile��HTY}$ХޑN�)E%$c *vD"ʀ(8:2ĂA@2(`~t{;ww}Bg Y"�(*ЇD?`Yl P޿w4ߴ)sb6�P2ʩ1;t" �H7\"N0*"@oMpMp�vE Xt�ڨNGl+(O8(A*;{E t Sə]TY~+]S}M/fߖ%]d(( 1f. 5,|IIb-Mf/Dv6+,tLY 3fbi-ݕ&eL3K4s43VqiDžM83:d&WIds>3z/);+zg0frdq~31xGv0+B 9Ѳ9s6B6 Vp4`'.LHLOIh uqiLƊfoko[DNAH}'Ag&:g|I4yf|f�ɂ-q$�T& X{ ܁7 ĀD�dXV�`'(`8ept�Aw` <D&C=D<!((@Rh*2 ~NA硫Ptꇆ'ɰ a:̀Cx>/s|x3\ WG<|(9D G:⋄#IH"BV!H R!HrC^ 18 CXc1AX  S9i\cF0_6eb%l �$;}p8\.[ۄۃǵpQ<{,_ߍ???z{B�! J g ݄1"јF 'rˈ[AIdJ Ő2HkI:%R/鍜\_n\1+rrd /9,%o&$P(7%"lP.PQ>Sm /  % 'n(P$*(*W)+R8DUS WVڤtXҐ2^D_O�R}l:~% NTRrTCeDUYQ5Nuj>5DDEmO: uF:n45=4i45ja,"hպb,YYϺ k[hGi/ާݮ=#٭sA煮nݳzT=O=szh4-VJHҗWw<4$ w5ZaTktߘhL72n3~objodTÔikZkkF12[lVmvgN74ci[8Y,-nX–Ζ|=]VX+W+Uk5:ǺֺF&&ϦlIn6v;e`<flr[�M-{:Q:mpju,rsv1rIqpCWG7ѯb]}\Wv&q;{a9ss0`yTyy<S<byU{=6x~0gd00^|Nu]u+? 0H  t \ td3k#.+/CCBZBsnf&k #L#G,|e"-0p-1bbq qq5qf'LOlJ'%H?odM/uւg*,d-<MO9Ϊf2S+RGؾ]o0׃[}V6=}+22*3ggϊϪ&dd( 2.ZKh),-v[s(Dt@ 狛$*(jIKs<ss>,[rbRe6.{rr+֮_XY ZuՃkZKZ<ۼ⼷5X@@Tpg0?qƯkEE%E77]7meVVۼ*V*->w{ڎow.yıritW_ihin[w.WhWlx{޺JʢO?[XPmR]/gߓq~\s@@с/EXRSsXZVZ;|$HQMuuUjE1grxuZqzjX0kkJl:|ٽo6<-gIgώ=7"lyq>@.ܺyRȥ+._hcqUѯ5^w~wOv8w4p5lW~7/b޺u;;wr˺~kz<~T}}gG?~0xσO(OJ=:=0l޳c/ R_}$adMo4|u4bѻwc ?h~8ScK>?~15kx%bMJ]pZ�Z8�j'�ySZzҠ)?I?ޞ4g�PO d=�e�֡y�@v+d&NsEFuTeX}h�4٢yS*clJ`: л8g���eXIfMM�*�����������>�������F(�������i�������N������������������������x������������B����ASCII���Screenshot1"��� pHYs��%��%IR$��iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/"> <exif:PixelYDimension>322</exif:PixelYDimension> <exif:PixelXDimension>1722</exif:PixelXDimension> <exif:UserComment>Screenshot</exif:UserComment> </rdf:Description> </rdf:RDF> </x:xmpmeta> ���iDOT�������������(�������]��@�IDATx|G_[pw+@/@SQ mq(,HA$H7\g%w ?ٹy!ÇM׭[ZuQk0WRF-cM7oOܟ(ٵ[[4CBB}OdOeZw$ض}lۀQp>}Ԫd6g<S V1Uܹp=m\nxlĹb{s\ѩsW9.>e!oX2:6<igxu妑ia99h����=zD%J˶xjذAѣGmd=~1^_lFtJ Mկo-[G^=qhS6M:sn@h}7_S.ߙsgS1b8o6V3m{:x | ;z \,AJ.CuŶqšF#[A�}ϵшݹ\]c3ӛf >lFPZtP?���� t9,xuJ*e$sNaQ"(N8tee}*JO9䠔9SYΓtlTeu]9Iϟ8_B\,Y2U<޼ysO#޼<xPfN5q{ŋOJ :~ +^8%J"O|t]L0ed̘J,A L rOx{s$;(gThQʟ?_Mk:sҧOO %JF"Lz>sFə#'eϞ-B~gX?w<:}n޸)R@(wݓ+VK' Eڒ%JRҤI,\9ylu^O6ى)EL>bHk ~XyPmvEdɒRϖ JW)KGu(O Zjڼ.[eE}'>j!<yR/~Tt)*S,۪˗t):Gӳ]ʈ,* [&ݰa_[.TvM.{T3Qw+<:|X6l20aBǏ'OPB(M42uWy<s,e͖UNq0N8oqFh+<Nx{)X<K ="|c91+U$%Iqbysʚ% Ν[?ΎLݼe ={խCr;w,q,y b|`>ϔ/͛ʖ)MYf5dL2.]$?#iӦ}w[OtW˗)c&q{mp;93|:G.+eʔa|&p Gnޢ)RP,b *NX0ёOG<s'/)R$½Ϣ;$^^t)U\ʖ-K'Ÿ{J*5l#u?ٱ<T<wQ3?N3XB|o˔)l {FI"|5 <P|{%9aXժU3i?\O}=۞cnbH:B?qRLEUT2>]}T?3S[RqyL.Rv#MeF:2e->9" V9= |HWk)K,jNJ:ESs}(o$]8�����(< SN҉IG]j01fȝ^bܢ+҉iDŽfQj')WTg*дO߈牎BG(ŗ@Ŋ5fΜE?8wԱc{8pڶ ŶS'OXϒʰ۷XL$rGЬY*4mGG'YJȺO?!-KXO,i`^{ {B;tM1a5l19BdX⊸\[C~Mliʭ]JEJe<OX6mat'ny<[<w%3٢BBXذ~E:?O;)yU<iS1,28q> ѦM[d^ ger2:gH uS<IXЫ1^fq•gP/Q _GgjE:˖'`/F#O)<gRN?vhjִ̓k <Ǟ%Kѐ!_0+c0gf͚мy 9䓎 6c|.iF^W6='nj)SE(Sn4i gF+봊ڵkA p 60sbCeu*{ 7Yʕ*c-{K߽[W/ŋ0֯ibΌ,+XjҸ{cԲek="WSs}?&r͛|N4 <cnjcSS-wi4_3٣{7=Wx :e/8L/MR~XpJ"! z8n[Ld[S,>ƥMU&aE|)H1:wcTk)Q=|iR � � � � 8]@Wv\ՙ,RZۖ~`(WBJP4C2:=Ǜ k/v]Lm>vAF~?J(CKQߔtU=g.}pYO׫WKP۹c&([fݷ_|2- bie/VLƹUK%j!x"_PZ rͲϑIA~YDOdϑ]a~Y6/˨E.` |r(I gvlѺ%tݺDT؋HZ͛;2d߯U J81Jx;xgw>|MDZ}bM;{7, 6eOb,={IЊ+U% O"Ѯ]Ӵ}NaUХfNٲe j֓Z*3GW@Suo;wn\9s$c!֖Ow9ij;b/ֳaࠇ-NnXtd<閣<nUr<*/ĸҮ]G̱0=ǓM4Ξ"e9:+B+T =q|mI9w]3׸y_hǔ<yrھ}|ٳfRjUUҢB-ݫ/Vu bBW9WJ%2f+{e+U͂>魄.Uw~}(ZbfJYTZutqO{fu4S6EN/#[nV&wBP׭{Oڶm;ڧw/#_(P&% ]s4G zZL|ulUmB*-b_{/lټ ]<^ҙ[5k0+ &O8:g ?'ILk֬3A5<} 1[ EόЈG,4)7Uwe!Z`?#ssz"ܥ~Rf aYSX3nq򻠪Gc, ~z\}T]BoHa#p8KW gPxq,BGp:OR/(Te/(AR =sΠ}HCzb²,Y � � � � (1)gE@,1a:^ӟ͆G j3L>N=|fcD#}W0ӌғeܪˌp< | WQeloSXHEzCS<C7B�ac*Z˯Ē1F21`RͷF:rĨSw|nQm,v!ۢ|"&Lb%B;7-NL޶}EՈ$F'uo>NL,qbI =ʴy##qO5njw/"'B2INݘ6I hy7|&GQ9G_"Q%uK+d}7hd<ƶq s7҅T{9ps>Mٳgf0o5XT}㭟Kkgn%^Ϡ^X˸aթGEꏉqeܸ- yt|?"ॏ܇*Vj ^{Ms(?%,L٧A_ qj3;a5$T~n?u$DU=#+,w>YzNQ69#O#}ۥh&D?#n5F^SKv$rt1Fbz~[wn1w>'Քի);=xE vf~%#Bx6J^'_5K9aYg9[TF؂ 0[>}r{ra|yvbeӎ;-]zxQ{SL5)$=HyTf!tu1◊y 7]0hQ)Fhy|*qZ= 8>(e_gj\7A~wr[\4q@�@�@�@�@�&{I #z?Ӳ "CŮ=wݵI ]j!Fy/[N c?]kz~MN4|?A%R̚=Lj7*<UR-<:#þF2FkǓj"Jo<eԄ ]._6&y2p<`˹2aG&'Ь]<d e9sZ>"_dRFO6~O~b_"c2ZX`դdBϠ@G'G<쏉qEq͂rB>y`ȣ&UZLUCӫ~+t k="%y1y"Vw,duU5&L_V+sOֶm(Jd֎*Z:Tœ\O{x7^{}/^L`\ {/cpޘ+-8 eWȣlr#N}RaةX(f8:+A~ϿXaںu5z ˞%}N9YDT&M[XmU&,e}.tmVS3/<ib1MXWťM|W5? דwPNc^]eR^Ds&noQ~@�@�@�@�@>]sŏ50][tJKF Jo'MHaK9Wo͓bՏtl! ]7l4'x'[$b#槟^;{_]M�qXnH.FIg( .5120E:w"尯M<l˹2aG&֛J7('t'5&<_YDQƍp?v[E|#PesgPozĸy-Y$x2gnkK�g.gl {"еfZ~=[ֺjbʟc*S'~ I_[v)IҞs4\-~J\σeպ֊Ӱ@S8,+#kcTqqߙ V~Y^{y>_RN ]je}Sig ;bڭ5nzlY@,8PϏ~| K|O8|2#Ve$5AՏJkrƩy,-~SM.0txSȍGe \\Ρ#ī�]bK,kǖ\\{tl+Yzu@<����k t{uAPhDZxaeKuV1&cJ@v *Ø#/Ty+tsTG~Ueaۭu[fĔ&lM*n*~bR$[r'Nyl)Cg~~ߠvE^OfIחI .[V�,82ous> 4P&%:u e~d\P]>zS+3=(!'ž'O˘).SsFrۖS&Q*ޑ??l+Weծ=Xڢ,tʪL$elkdWM[[Eu|UÔ `&ڹ9Ȏ-KܖՍL+69~x/J퉳b֟D9%t) $^NQi}PK1_[u3ƂDA^:R{ 㜙wW>mE5u~Ns,gAU_V}>s滇3rZ]bi{L.G^Z=}TBW9TsKN^;K%=.EG����M�B"~olbK.%2dʪ.~K2G"U[;,7jj;W,x a{ޤХOl> 믿7jrfhF5)EnyrՖ%ŗїN`Uy*NzF?59{dƊ…XtTq#c5Gʙ&5KY;[BO>.b\MFtϠfG&GS㊚f//~&,jo"s1_$}8Bi5* \1;V mf+c? _eGgZ7CZry/{.OG+?CC>3;~wjyC;-2&m brs~e~u SFB [/ \"υrJPbڭ,Y;]$-wDoOոߡF+3IwyVKFq~Ns9lu{sni,:y)Ӳtd!nſxSs}lK۫ݮGEB|gLw{lڳ,~r| \>����}lyr_MSeCcF&7J>8$ o0.};goZ CYXrf-sE NUyL ]zJ8QuɶsMQi#yJEǯ&WXi^z"*C_ '*9rj_J [j)2}"^NY_nQKQA5:dh:qo8JS)"zWA5,d_=_WԒm<.d<OMe6꯼|vXP}ϕsE&ܧXDv^:3V*tٲTҗc!žS퍬)1^/C\v=^Տh>˜1[EKF^p!BgzØ=kr8^]]}"Nuޖ˥m~S ޲㱲B-J l٩;%@ssZ_6іEkmRB2Qי,bNK'.e׺L/lYY<g٪K.9!C,:d6#qmb*? � � � � �@z¦\}u,F).^^o~P[?dq]{~iytER=c'ul1~LvHb= vD8ǙkR=ǖZ̖vy88;~+XMYOhB?<&l-3 i#E]Ctj҈lI6Uz7N=zz݊nա|6t'g'иG%,G.WA򀶬?*RbmxO\LWt~l9j8GWb+UqdqJ,Rj<ՏU3cjBU֓jV/AغVGސ!_J~\Ԟc:}||l50">b- cFQ95>Xi^W֟ $ﭭϙMt.nkqo]c̺ܹ ~BryP㯲k<~VX(ӝ1JQߌ~NSqNڤVs*#xlEE;YM6]o\6~qIҦ�Roi#�@�@�@�@�@ r"cYǧ5Uar`젲S/i<o8]xUv -M3LuG-\^>N"a(B䎵h"�/OdZř�gGxӖ-7oyeq)}R@&>bVk%tqs<<I][ #mw160iد_{tf+BZj'Cyrz\ )|'5҅\[lmA:lbqRّ#>J~f-<._G[`+\LW<TQr<~6t0Y8qrpĦjߨc<:?kAӕRgh_rP'j8#HTyR-tbaĖS w ]UQ=)f]1=VFV[}'-_/Vi[}ྯ;2?w]s;2/XrO'k+: QYU})k ,L>zHKf WTXT߱|*f\yTT|~E)mqw/&_A:]5ֿ9t˰ k}rNNZ /_H4 @�@�@�@�@SnAǧE2|KL [FYei2,a\_J5<ɗRdOiq#~ԒgҎ$CSƌek|+V4SSիtiޱcwFӷ�yFP(^ԻWOjܸGL@%KedɒQňۜ.]:{ m[7G ̑i8}ҤIi׮$&zdcFQfMܼy*UfM81oߖ>˯HL:s3gNjʕh_<|%K+WdX6?uGJ=za~q Y2lcuIJ<@zR`ɓD[t)Q]=b~[9?[[.cF Hqhүv$& !CJ.ڹdB#UoF~5E2ep_=L HQÆ nԵkwxԣw>j1yy#Svm-v4yTj޼'&ƨ{g}@$:y|L?4cJ-[[+ϠuaB|6/=7Q{br\|`ʲ:ʕ%Ez0nuzoy^=<689sf>qRtR~5n(Džٳ۷̙N۷mYń/5oGJ*)Ǎ,;wl\rI+ce2ﱣ)M4a&ݻų߹K7Өf2'_SԩHL fɟ2eTI"{SL#B}gq7.M ޏPUiAFU|q<!*ed1+UisHO'}"Q=˙3e cEeߧeܗ .D!!!F˗f앎wk8dӞ2&)'g|2'dSȟO?AC a}82vw?'ILE,[6Q޼9{ʖh|ޝ9CI$! \)NFBT|oʔ)M#o~F19s1r'N.^z5 NyT9OS&QݺuԩǰGaty?oVȻ<m[̳Aexr K:\5sXу\*fo9Uǃ"����@4 @>euxӜj3 =W"JoSoVZăE&&N{3u=V\ӧϴx˘5{,NfS6^⎭9_x[V#/DT^+r? DoQ߂՗Rm7|~<Z[*y#x[״u6Ɉbm.] GuΖzKD*,8*G~ٺmh\~_ w8^8\'Eimv<fn}R+BfD~YsعV p!@ml(s; *NSRղJ15(ˠ*^کn lèz?CJAr҉oۤ,סczP!ظql%Utl<֟FF+#}nq}1n}jPN7W rƽe]u*:bzT葭bu2+[-tO^^^wₑU-?w8@9~9-5uwd,jV= %܁m>\3ݹ9͖V<I*LG}?T\TGG'U/KLב2qE/qV߃GM̑ ����k`M+FQ%(V(ݥTyPlf+.7T"-u~GlٲJk(BD]zn7_ʶEUxXIA#&1KӧYȷŤ}ĒT‚)x>S7`o3~{6W‚.u7r.&(̛-Ւ'OFځJbaYH<oJc3<\WGgd˾Dl{%ۭpwUX4 ^aTtcT]l-آEsiƟٳϓ;G/K, (?מ? s7+%jVO|FP۶mT1@@h#.SL%KHGgXRuZ g[Nz*-%[ԱueL:Y{ŭձ JȞqVK [n9<_Yt^SiH,yHB* R',;@�@�@�@�@�I�BW4rvk E��x dK7$ڵjSz\J1ejx9];ɉ�^y@2/{n'S,?舳%t9i@�@�@�@�@�C�B8BrD � I M}lžhɒ}9P6. t'e!@�,{upنI^U tEE � � � �  t/.7@D � �O{!rٳ8}m䒔dz@�ކk����/冻5 ­R2]# C � � + \|?@='KF5}a 6ǖF͘>hHŋ-B;@�@$s;|JCPIIh����xS t)@�@�@�@�@�@�@�@�@�@�@�@ Z tE 2������������)y  � � � � � � � � � � � -A�@�@�@�@�@�@�@�@�@�@�@�]o<�����������]‡ � � � � � � � � � � � �o�7E������������D�hCf������������7E�Bכ"zA�@�@�@�@�@�@�@�@�@�@�@�EV^K͚4 d�����������xkNz ]1EOޡ_/U8]̦i),RS ~M'gANIK:rj<'zu?;" ( ^,E;w!]|LS$<SZ)Ur *?UW}VQ/-7HR"9}Bn<dSbv����������Xx.um_H P8ES<WӥuY@ykr:#ˠ/BH)?rTIwwֳNhɬKghahkټ4t'irOǕ䱈 B㳌aUNGԒ3 OѪIPΚ'i8kR @�@�@�@�@�@�@�@�@�@�oŷ]zwoR/S�B;ɂkLSǃ ^S6jkB[e%L]D Gr3 � � � � � � � � � " ]|ت/XwŎ> |)tqĉCGiҽpREB)hF'x. M.0AZU^~W����������[-tn'wT]qYy}'OY+f^)p24QrY){7A\cأ0ʼnG.2%<z.鲔JxűF?SAg(VA)Lͳ'wxiQJ<)qta0zd+8G\W<^.eN?H!>-KOgʽ$Oy VQ/?NOWC(CTx**U!ŋgus$',S1}$ҥ _~s4Νz@,XHF%ʦBRi%GaZ>Pe\ ?%I$_C ^_]׃IlFgiهe4CR=zFd]3PzQ%im[XiBo|dY'~։tthO2I)GGO=(or\P@�@�@�@�@�@�@�@�@�@�$wB+uV/ē ڠ$ Ӓ )YdTe: W?D#N_?tfU&9(5Y%/u*F \EemapqOQlnPނ\+۷җ҆W-',W K_a>4yydY?hyo_K"3sFZ,2dNL[\GWЍ'M7-I!hO):ìhX2*ktʟ F{R(G\R3C>cd{zC(e,3nA>HuF\nszI$+҉idzY-փ |vÈS!Ͼx Ћg"ͷUqnNIŽsJ8Sw9*ީdi���������cKWgX`a#[{E.U [th\iApe8B/x;x|1[v* LU7/vKLx=P”Z_μWSM){y:�z\qfdyL} בRfG/tMOjb9Lr2/ҁ_I_Q _ >Om'_PՂ2}Ttzp?ӲRFޟ ?[堊3eP2,|Zk5ҳgs4br͌Jkt#]_<АpwbK#O2i6 2݀ofKB#*P$%<Hꏌ#jQoKegiyKSѷܪ3dTJ jL9 #[/8G'=W:XX|Ȟ=l5l;`�ʝZ~_TDoK+s麰bEԑt8*+c1-h?wlav]O6,XDuc0kr_ lY ?eX9R=R慌n4���������xG @qy_K[Xx]rHV\%bJPRp]bN6Kr4#Bڑrc$y> B"jf!WѺk;)]tLҗB3 GeOuf?_MP}T*,P_%C�Ӆ.e)H-NMp$4?,NHMQB))oAwo?W$ֵשc=2nT=s`1D(:OPڨ⏑gׯO,OOKSN!r)pf�}<="Nя'S2e7ރ .oI�dmT"TGU+[/ =󄰢*Ҧyv.Ij13[9_<ZV]긯\Bӱ6L)`wJ̠ጦ0}Ү +[ɥNJ�W;&S6]!eL9?g,qSXyq@�@�@�@�@�@�@�@�@�@%],]#:5[.=CK5O*{=%2/CfD .tىreDhwqY* jıGؚ,f6[Uu?%D3/odPs})mAKGO?*k~tzߔ Ir:1}\וh7MdŖ:~KԹRB#m)rE+[i9l+Ի*dP3J!E:%6ӼIJ2n[ԪN=|NS-qzLBw urY ,t%˰B}qWbOnRץX's']ejآ4/I JյB3t\,,lγki)(%N>aLaŮO/P X8n=J^ߺΫdFtۃ)Iz–5[H̪plQK=J=QbG~\زX2U"T����������xK BnN7[۰UT) [WD4.t>-iY?,ل<'֭xiC[br3[i\ JZUC <GѢOBhFcWe(O=%Lf–5'r~{mLMۼ#'h{uXC�(}|n5PlJ[{tݼJg_-r>ڱƮghR ZxEZmzϰN!!7BD<%{WfʑNL=FzIrb JkQ7V^Jg&{KXJ] 6 GO2R\"Q ]lLwgX@P$uۧXN9SKk!@�@�@�@�@�@�@�@�@�Fo~S aQ'S4 4zZݯ ]LQE"��@�IDATҿ:a Z"^>%%Jei1'=z]RяKMdDTBNU_Wc3ln'5[ý)%ڄ2g2Gi TA޼~azF~C<ӁfsX~pXzo,k}aU ОԼcVSez1ƝLJHq EK}Ve"e:Ѥdt=vޟ TZޟo|])k*JUihmz—_ү GAv<|zxy:w4A2P � � � � � � � � xk.G:$pu !c+IYQ+ru˖H'><�meLFo}GTB2aw8՚~=߲Mbm0]1t+=|fYLv >}$ʛ<<bJLd[t~Qh`o(o!OF{hۺB {԰v;_m.X l>mYjRN9//'q.m0a+2SStQFF.ƗNL=*RQlٵjYMѱIG(G~y8UQ ]u֗rM6Fu>#ئ?%Ig^x?ʰf6ˠZ$pt|4TJ쏖qA˪:P4���������['t9ke$[L뮄lW61'y#]xo(%NcڟogGWTBŵ֞AITB?)sjtN<D[rtktʟ,28(x.vԤjum/(g8_aq -=~h#4gE4\i;V/B9 <CWH 8 ]!WVNo)M<Qp.Ś{I?gDRR"k9pONhP#=~P'1*RZ6*lUqpe[=4xo !t k.̩z2ŸO<'g (K,#ǡy���������H\? ~*9&Q_qg2.t5]:Q>}N,rإ;g,_ -|D[ыqTBؼQxʻ +ӫ'}euV<R$Rut?4NӗG.Np!W_NMvn #Tkp!2=jPleXPgL ]qYM(-8G i+ED.8Ru%ԨpYEZD-]fŊxUoߖܹC7nJjժ'QpgR>.V^{xu?ٛRJ_m?%.~!F <䒁ĒPpy|]w]-EsLӋ*j>tyNYc-)n6r!@�@�@�@�@�@�@�@�@�=ou/5WL^rm,Oz8LV ]<nW'c2�`Ra;g.η05)Z/܋g/2՟h/JŹzmce!AWhI@B;L^^WxRo!P2qh8.j*',V%ij,ı$y_>IGvi@ ~J#_v3<Ljf9kQd񉅱^k2c-t-{w04~NEj>qi\&5gEgiJ&㲺']/~(j=S&xQ+zzk+-deZ'pޮ]GzuG&uڅzo edZyxO0at//iCY ߞJc*s4\e=©8܀ 2 5 Y=}H5WR'rMwޡ)E˔[^,Z"ʽe@�@�@�@�@�@�@�@�@�1o:[أ0͟=Bz.zpnATjbrBo?eëe1YeTSSu⦴�ay^ 4W^ ĩ2uG sI)Ylt$|jM ],uj.ۘ%{R*V*5=}A^wv֢J52ק P3&R!{|uߧ3ҳgԾn:~n\}l^?iWʼnxESѳ/hכP,=+*rz~+Q:ocBR-bEӎ![8'p Kh$U[G]x~MB.,<חl Ņ"OYR{*KMJqz���������-lQq2L ]<y]GXnkJSRҗESql%O4=TxIVA1s,{&ru!Ɗ5iN&eXdgz}<j',(͝O? 9!-nkPlf!Im[wv2&nmԧ[sPA F _~Գmk8rMZ!?7:4ccYX/h#:v{f7m ???W,(\hؗCP{[A9Uwl}:\XCyyW4bL[nIr,ۋr]@z3-- SoۭO@�@�@�@�@�@�@�@�@�@]XӅbyB6}2H>fx,qr LD)s$铺RuX0^oWlt?+ a\呜Ҥ3/ hl Y[iʛǏ|%BAp*J.ahl[am o,tʼn:[ża' =H~QD ]f5K[LݥTyPl)n\ XL䲄X( @�@�@�@�@�@�@�@�@�p.7"@� 0)x jkRj8Zr8#���������� p t"�h*wlGX9 t9J @�@�@�@�@�@�@�@�@�@ v Q�tT  � � � � � � � � �n$� 0M'gySTWP"�x!TUQ\&u�����������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � �� nqqƥZ@�@�@�@�@�@�@�@�@�@�@�K�BWt FA}_R6h3Ce*V.6Gߗάh$3Rǥ7, ѽw)s٬lQKy7ChN_JTOۮ~tk^EV7Vʻ.ЂM5{O x@�@�@�@�@�@�@�@�@�@?I�BW ߶ hR σRԉָjq*L~g7]lY[?]6IMz.Bה]߻bvx0!sW^~W#6X6LNSm鶩sV:ʏ4Jd����������XE�BW g?ΒgT1ܲ/)g\/]7M7= 28].!���������'s}2nj֤ٜNt<.XtŖ. + @�@�@�@�@�@�@�@�@�K?-t1׊뜢]ɝ"mWܢާO+t J5嬖ċ҅'pޔ9SYɭb)@K!nx]G(GJ;4?LwNн?q2J(yTo!sF%6MJ97[2H ۿg⮥t?X&%MR,D9+4DnDWmQ@J,Ȕv'C]聆Vx!e˙/}wpT^tSڼ=}AIJ}ٚ�Gt}:wːxS<mGuƍCjfp<zKMKUd8"SX:0otpmuUWMO>GiǦ:MBj2[tD\߹Gt迩k(V25e̒DOj?u^0Y+RN`$wUJz*Y>-̲Z.}ݥ 7^yPڂj���������xCBsc.r3mIt& }Ss}(a40#-Z|zxއ$dgk%Ӆu~2^G~蟇)Wv'*q {FS,[,mE?,lĹ shMNPDxل}@qudttpe$H2!ZY z4BtZy'I-ZBS ]8gfG_=rM7HÑSħ-Sɍa^үߞ3”f4~vJ1pݥ*nI_kBJm6Qœ-L[uˮ`sPA<q"V)~| wdjReo?"l:Xg(Bxd{t=n-Ӿ,u앏֋_V[N矔`ɞe@B?I|p � � � � � � � � � B3K:kz3D ['``䨒"BhB’*eLFeT щIyl ],+s>s ]WҜ3dھ)EvK˞3 OѪ/BI[DQaQhNlGv4*гG-tߛoUBQƙ>)!hUYw캩ٺ?g(u,^RZ%LTkNwQMm,ISYt``Y2Fj3\2=[g|W(_62>#6hE^r#*? <<Fyk]8Q.t钇>[nx:O HQ%S!0)׵>ڰ,B}ՃJUHGA7ФQ爭 kK 'i c%τ8H=Ak@o,nj'neiE t‹÷IhJԤuN2q#N˨Ȅ.ekp!ʞ+)_~BOAFuK(#+EZ5#< � � � � � � � � � �1F#b"I,vi?yO;Fg1vnXTf#Ȅôybl )4(TdĿw]M3ت\X lzvZd]JQM,\9g:/mDMb'cJu{'%MKZZOsxPy_U4<WZsq@߷PR8\[)gzPz~9UneRvwޡ)E/`jc?Hf3Z ],8[BC) h9vfyj)-@mrd9{ޢvJs#VhOwዷ֔K4l!u=EHw;_r-s~\:+z9xYF^B5MkeBu~ز't:L6SWFy9NM5#G&[u|4]gY*آ0%H=Ѷ ���������odTKFdklo:$N%ɣA~(^>3WXY k]4R`e |S扮Ņ('rϓOh\[:PF=©Ӝ.Q+W I7Oߧ#Iyϰ}bOq;%X5#ΞezdJu^Rz~k_"HD* awV#R[]XCl/mZuAUaeK ӅϾ-JC~,G[5~Vj1O안JhgH!NfM@z*jj+XFp ?MY'%ˍ,=Z!re4Dt@ CDŽr,xQkiX,8A�@�@�@�@�@�@�@�@�@�K=k.@:*ի,iSe~YFI-bk*]O ͑An i'>g+l atbkSqf8|:imeH]!{hsܺlV],Pe,\OoQû/ab*A7Q=X"%N"~2ȣGbcR*%ϔKOJ% 7RuryG#2i[AkOxy@k"/wn` ]}ާBSY'JRRlU6亩<,  t%{/Rg2tc2䉍?Q ]:%.-Aϛl,խB珟#À-2z?-9 � � � � � � � � � �n" ]0tDbЕ# {.m[R/�{A%Iގ+ZSf,A޷hzI2B4$ E5C*^Pg6]@Uڣޓa TGvEJ)9*t]7v|^vE.v<JP),\ؾvjb*{zq</i~X# sU%G^~ҧS2,_׉,HǔV-}>aЦ^RKjb.tiUyxA Jr{J蚹*oMV2j|~(˝(1؛xa~g҇5wȽd8Թ1*ythmY>Rl沲Y$)كgt~Y~LZwre$r���������% ]LkeZP,8IGŞ[w}`SσR z7x%>\֊ ytw:S~ rux6h3e(M!фlcdSY&:{V"q*Y~nE>)o<_%H$NGWmSOCxd#88k48L:.ZBR&z$DPoPޚy;|h{O^lUZwpV')!!  "R*Ruupt G}۷>NwM-Fuh ?^z=ˌ.O&'F׭T0 Z7ϡF čƻ{mjVe;Ծ'FWZ;ӐqzF{ݔ&J32F$3w "UGq*о%ΖDDB@!P( B@!P( B@!PD�.$L~Uʙ#w{cr镆14>O7zE?-&g Ѣzx\x1_}Lӏuv:ѝ =к]kCӇ4`K ZR=v<iqߵSi.v y尺5~d A9 +]FRf}!!o qppe3r#{&/gw{_sJ]*avmFD;.TS= O=3YMEE4 *f%oarQsӗoE|~i`^QSxTxhtݣsOϤ#dh+s,TkQROSWB@!P( B@!P( B@!?o]0a Z/ ߅蟇@QY)nq1cdg ,5RD~]eLq /F*[q0m2ʓti<L=yJRq Z7u|h?+)-j>^0/\1?=8MiV׋h׽%cNk/O-''f(P|oEǃ4%-VԨnED4'T6Zު0(wAD\X]ǜfo5qBMKPyaetA"'}|P( B@!P( B@!P(-+"L:;לu&lIY:4ȮBN׺}hMZݸv'%~҄A]ٗD#3`V0g*ygu"=\)lNBʁu[3\Iv'1:?]7O}k(o/YWhA<LhP'aOJs* <GZZdet]:Jgw0k(VP&M\SSuÉhFo(Sż=яc qFL 1— 8'_Pçrx*kPv+;S%ecB]PYsn B@!P( B@!P( B P.P? -BYs陆Rq#cdtavfv(ۄ%DS{1*\AlLZ\b铃pa=K]?y9L!zNV5^M?鲹-Ѕ-& 2Em=2J q&dBBD)alto_8itguneu#Kyt<=sJZ/BdЃ4eM=@ 4zgp0ʴHBŏ~ÇcQbI( 㽀 EvP "#х6w?L&^-o%+$>y| fdte& /=ish=~__S9!DXrMӆ}s~6C\:.=}OX]fr :ՍB@!P( B@!P( B@!P;+~Lk3Z 1~՟x5LSK>` $`őUWzCdYA75?=3䪠Te\" fk,dh膦35a̳sZY*z yL kwdOteD"UEsQ -x<ĈJ}6rTk3T׾9hЯysg֓583}U|d꺵gmT:1DbѨfg`ʘ5WQn4ץ4K]+Rպ9 ~PǍyI>s@.04?{5}cЬ]&j93+G8?OAMq?ߝϮoz}UJ B@!P( B@!P( BE@1ӽ3w) O3M[A[ճL++&%JCcT٪Xq)]?Oo\bmi( >o*CztֺKcǡ2L[<8߿EP;,/=KҫWo)YX&Cݛփg#f4"O/ӏyRh+ B@!P( B@!P( *_}j B@!P( B@!P( B@!P(s= B@!P( B@!P( B@!P((Fͫq+ B@!P( B@!P( B@!xP+ B@!P( B@!P( B@!"]7ƭP( B@!P( B@!P( B=G@1P( B@!P( B@!P( B࿊btW߼B@!P( B@!P( B@!P( z_B@!P( B@!P( B@!P( *_}j B@!P( B@!P( B@!P(s= B@!P( B@!P( B@!P((Fͫq+ B@!P( B@!P( B@!xP+ B@!P( B@!P( B@!"]7ƭP( B@!P( B@!P( B=G@1P( B@!P( B@!P( B࿊btW߼B@!P( B@!P( B@!P( z_B@!P( 5޾ou?*( B@!P(^B޾_:A(%Z ]`|T_(F׿ݨY@`ObU3lS(QR)al5F,]piE} jY )Mt~נtz ~lb:_CJ!.()L4oX"߾ gБ_81)b4GA߸,%G|J.SAth= <zE3ǥQI" :{i"EJVH2Աt3^4CxTDR~A)DX>!!D҉#ڕ 0EƣrRRwU[n?*̩+Ϟwn|1/\<)1E{~H! Ti=y P,SJ)'^uf͕'z C?6zCqGwyC:qݸRM$fzDϝyߍiYcRt{~I'N>hLygң܎9Ao\ 5k叩YwSC_Z:;J}uٓ/RWz]^.p`]jXn+}ƢI{!y|Llm/]19%LlNpk>|=D=k5 S9#r?AA4޵"=S%5iSuƔx0wߤĢєhU=|}󦂈:1YZs@JY455XЄyv)*=$۪/١@$jμ]1Z1=p_yF9zڗ=83yHٙmSJ`6v~0;μߞg>4Sw]3+';Qrj.. 硇Wԧc(_^amy;]OޓJ-gղ[M뿫Ocǣ<ӏtYgWRI~mFM|{rI7RUn`]-e֖*N2 ]2eUmMX ?tߖpv/-mwņ֔Z~щ}/S׷Ikt7$)n6!' -(]Ƹr)Vн;/\<u<+bSDʵS/:1*ϼL>9 ^o47&̭yr䠁#P]O?g)Ni ̚ӋS*)L +SyTr2]Jes0fu <옙~0ŊSd'1OD~:}ߏW“GnPE۸ff.oazs4iTh 6Up-ؙW޼ +XI|B(̘U?ayU͝;zh~5 e7½^~ n�"/~C:FPZwusE!SK4ѵkZ%ct͎}yOތ]kOrw# xݕE3.gsѷ;ӡ[Lx:mwImdv*v%sh>9xlaj!0O9U`1ΚV$*) 0u왍g0Dm֩QΙuY7~ΘPed'DDū.=RߟV\[mWgԲ?(eTTuو:uL{{|(ob1F`&Ri<4>~_vp*}yc1 ?Қ%״ϚP8`g޳mڹz3&Qiģv<gf ÊvͺL5?#]=yOhμoO~=泽l^$Y;yW>dʛzp^<`tmܺD%FpO" wGM~Zв^ڵ6n-ftRD֙ B�c9][OԠ[ pǘ!#jIF2F|wqYm %8}S.|J߱rH ~}]f+*=s;$I3F7&2mC+n@^AevnQ>3 ĥwh6nOv ?}KNo=Y_ژb<ItL:MoH6L4+y>6[Qi# o /Uiyj4&y ?Dj"EWK<+PbiV-7wmMDh!`am&U`qO0z|IYs:K `ޔζV# h͹ҕSq Zy+F4D;zO$|S|7]v29֒'?Ie 6֓5v胝gF1ctٙWI}~Lh߼F7AAFl\ $k nA$fHl΄�TCdm6_;vN^Cc{btyy9yLԥw xbtA<mT0(?t`v*vִo{ݬP=%e˝kTca檲T~JΚֵ^œm<ט`kVLì~~瘖d貳3&t"ޓ60"lVFעI*z`0.BǶopOOμgw'꽝1߆oNf`ۺe״󲝕hI *E?FЯSRbVѦU7h:k"vڱ3.n[@{'sG ]<άLv]O"o{2"~]-9?)dܤ' 3K1*FU?R~gC>e+VUE"yh됉hR7D&-uD;{ߟoo񙐡6Vk_M;BRׄ0f.l=w.'[wׇN׊1aZQ~Z|Xn%_ܼjWHCCG/|ֿՋ͸ӪޠC.=UQpHݾ\ꁙ ʬYrU ؁@:<o%P`ț7c0oWAR[wcNc}1os=!Wp]^Ѱ]+jϽ6d¯~3cμ¤ߵw?"7*}5mma޻LW=Mc #vѵacϵڜ4X:!8?4-]\=Q[+#5m*2<$COOk ϤMHlyμ7S!Li}gҖ.AaVSV{McfSx=ĺ({|+&_tjxJ] y"=7h[N;lŇfڲwT*1-Tcrp2IqF]y]kiis⬁~fμgwg־8;cX6a܌53a̫y|;xq#+ B{O׍4UW9yO(og޳}UaCI|n1VVYx> ~ ,a|8c9Fe߹OCoy3s_Cy_'9<ID54LW+] zנ^mjPNhwAU>}Iree{.=b&E &&⧑|/I&/b'=}t,եP}&]q�Sz~KsyԘ!ŷO;̟&},@Ѓtҗ`CcvaQN;#.})TȨ}pj#h_ ]{}(F*_9]fjӏo\ymĮ$]8JNG1Ԕ<g1J]>ef.0&-Rթq"!Y"\);]03)Ҵ^ozM<9bw 7lwfUԡm*9ͩB JaU&7}so]HUc~6fwmӈ̣!3W!:yYwPXοk94:9 p^Sr3z{m [l/̗Tl*ݘ"=-S 'n4R40q=xWsIvHxB=,aMꥦ@@JW]vAL:>J+3 ;9K ʒI;4 f~BS;iZ B k13%j4:`yJ0 "L ;HGk q|"syk�_#6)b>o<{/k(f[7taK[}'Y[V}O8EL` +op |eQh=3 %~pLķ{&>y|\ %nQ`X|��@�IDATuD/9؛d~=4E^WW`@ KwY>*\/k=#h 0-$0Q\]L2N q}Kں ؉4Y,yFvA6STv*7P'3fdژ0܄&)t feO5 X5toYaLxd=ASK+ؿ.zD٘>y!D(\CSSqo\Vs~qEwY4Jwٚqf zxS ZYxчb'NAɳh3=tg;WߣS•[;sl-ktYՃy`snMX^t=۽UbZΌ=ڥרS= 4ݼ窜2I8;v /]Zsr"OFa,^Wg E7(득oϋ2s6wЭ3I<-il(LI29>WA[[vS<[<e(c$;>m9ߒq/yBNpF1'ѿ9E^h2xzxsޢ)3]t//.V1<AJ>WD\[( y1{(=b%L KO`FOq|&4}0/V.XtaAkۀT̬/OQcĒ'f$Zup%ΐ#WW38~Vd7FTics߶>P򔱨,Iedmy\x%+,1jcY gY}|w{Kwޥ7N}~k- kOQ4zD7̃puE[*%G'.#ycR.#*&C~gϙG7`Jt|1:5ň>xͭ78tCoZnjCq n+RYmiN/(^j!4Lq0 DtQq2?*ٿ4U^E$y}}z;rϫɌ�%6ӱ$Oѵt]']7O`RGrx(#ܟ/3L>\NyC^w>h՗dž`瘮tn,Pwa)NP/Ww0@@tѕ[u vVsI;.~6Ŵ6hWǵ/i_&/n!.KbA�#@uR0m ͞` '}7 8p\)zle0! XwUc=4F6鷙9Ϫ7MLbNu-UX={2%ȍ{ӻ|Oaata=y{A揱W|ybt׼QAl61{aŸas5nw~ <6kLsnޖef@Gg .E? xh/;<fw*'񒧧Vs/9#BK'0V#nB9tSژ qG&bEEvC |[HD>\OWBg³MW32ߌų.2`&NCNt/T#X\󶩳\i`z p&'GsM&u~٨kPaZ4]0۽CK)R,q?Ot^C[kn{M1 ԱW7a(]V.9ޙ8a!+{=Tf-G?Xi?e쯧1yO0/a/8﯋N&,.MպBL<ME=M6]rOD[3M+vdtiRm̸I)5߉Nfƙx0;LޞC޾vrj'Aܘ `g *81MUw{ SłaG\X]=цngkʘ?P 2*AM�WBu|]5o9{3Ƿg󯂞Z\b|S(J4׍iU_`Cv@//ZG ՞qGc[iWUu=~ >*mWkJ.]0 piRq/2뿭O/Q&GvT??"D[q]YqdT1;]+4 [E٭mJ 30kkFV6h1e*P$y}%7�ݏp{0V Ɍ?疤~]9mS?O2G�(W&Ӆ7̿$qv{N oM ӔqhPPtCl_!DU&] cR.+\`vY jsa ֱ CxKwwonP[QJQ$ynA'fZR:?qb/q::0eZll#}�~T=+=uyHVF*v3kDվ_oyz)9},ɜ?Ԋ?tC� q]V[T.ɤb%fbojl v)9 K{L,>Tۯ 9$}Sbb~}+.ov0&[8RpHA<.~L ^?k:lI&=u~4*#ѵWDqXbQ  .:G9V[y-_lcslqE~wNܮϣe00Y8VoqAҴMF^T.Y!9 ?k0_ o'6?cDd :ijU3mYL b! zrMH3+"(WYPfV{Ԡc~x2qWC~ !e BO0FaFVQT;".ߓ<ݷ'[+j%'DyȔquo^7.oP0 prc r|rHD?JؔZ ~H!s<J*,8&dY(~Nlz3ǑgjtmZ;5]S9;-R@1$`Z['!'k叩bZշNK{Zѕ-zrTv�nz$\1_T(9+V7!+l6 VGfDī�6$vccF8a{_5Lz*C$3efMўeY ;B)A4i ,)7~רE{$3/FWh4L2YsyZK?##s}k\1w.YntTx7_|;Ӥm:mHujVC0D]j ڼתC|h"Y.4juu )#s?ehң5M0S3mI<{*B8`eu?e쳧1yO%ڂ9% y ^ 3ek̴6˵gKsy1dt{~9K8;A:ΆP_vNa )$u2 >GYueBͥaAʉ FT\۳LN#P.ӀfLw.Ѫu @w$>v004EEx!Dk΅)CL<ˌS@L@}+B% k)dVNĹD~Ϙγ1  -/2mb ׂԭoݰr>ys"AuL#"->f ꪣ>Ƿ窯r'8<#'ΘӔn٫1Mikхy9-BsG6S] cF�jݎ9Ün}mgANo^+8 3r$UgOgHy4ЋGg �iJ4Dvg?aӨskXJ30Z-;'|4al\O̱Gc뮂\*FEB M_MW. k!B yT=<\qfk??"^}щoêG:s>@s4Zw4s)|}ʌ. g/_FZ*.fJ3I8&]V.ܿסVĜzA[9x.5@[ f0_9�JbƌB]�SX3N;%У9kjWM_o! 5s^ cR.025uy?(.:5 - S6(EP6�VZJq :/> Y U]uA66H ~Lug6d9>.hM4yF0eGO8Ã%$1wXX'�5O?V%x(54}/\y !oj1 T7 ı&TMwJXQUܼ2"1dy@j?Χ-C[4 mH?yvt˂-G촲R:=7TXK01jdq5KF(;;l^`~n'āI+RպIiJesL]1Q#x0ib.QYB 2ŬRFT`>ոt-o!]-q`NhȾ ,P lИIVIz_8xdFTUFB=֔ziL=Y9H lWwߞ1x><}ЪdRLz y[F~2D,Kprٽߠ6bNԻYB `50K ycR!R*3<Ix)%c̱pZw13Ic-DUW+IsZf=_0a̬(aKn}Q9\%]6Mf2IGaG-kn$abljm֊TbA Lc & |We.!ځ# Ч_E]//cZRwa@J9:0fR"4udFHUYL+3`v̴c=34;G[6\"ѥky,d7o"<S.5M{Efr6k۽G_&þlXuOjeLvޓ蒙A FC&_r qh3`܌eߋ\V]r,3w 7!]0oC@� |UKY*6s-R?3r3blukFt}Ǻc.::2Θ> !WW&7M=^.攺v6VB43+m1mWĘY ͹ \yv< _V'aQK?4+wY`�S _c^Oμgl#2х (kNZ[~Ɖ@fT/i]-f'ڝ;FgOn6V2xAf 63;(@D\^&|P ! 3j ]̬I_<r`5fJ "w:gSđ<'عe; j<V'r~[Kڨp1g){km>+ LUaDsм`jv|uGmaZ*{0 sٜX߅2";|FP0l`f2sYrwZkCkjP*L5*kBP(.ω@0c-nhhuŒoQm1䍉n6Nj1?T2х(Foœ CO& \BfQ=ZTv)sl5?iI2M*NZE%r?[%.C9T\_k\UfL ,ճWk<rx0`wF#w (s&)nJ6i9ovi3 'b~B㻟tHw œXЄg*}V^=C_]l "h<\<sI}ʟ,O L0d(x".{AE9 w}UzHu{+eohPŜ&Q )%*rsg0ʽU7F<u)ƗH;$/QLB!cQ _ђ2-̧I'N1"Wmɒf %sFF4`t`&QVćU]@l4'-r%q0ᣤg\vc+t0a3~NI%H l/CM*mZyrV]'$mD2Eę]]'+Iqyȿ3WbrYat׼becv` \ &~w[o n3<j߲&f 6k7V.kQ?zU|`W /R I$ke$ChFh{!gskD хw.4 $Y.ջbm~B,ۿ('sz:L9s g5`>G,N0[ۥwvF ͹<]кlVe;:IEftCD}fB8ؐ%3?kE.D{ujeGLڙZV^9QTd U Yi#ɗCN94{?%+{'~ksF5f?e#{sqۖ5Wj\S0N6Or]=~Gȑ'd/2SΎk֍cG8�DX7A,Jt2C(P h:&W.o$w BWO],5%Κmo023+m1 s-_ mQh!}r>v+hkc Ri; #@#{҂R+μ窽Ȍ~ěl>3Gftf[0MrWѹд\Gqʊ(cD%⺢Ourgd% YX"o_lL: řy!&|. T`xX(9Ľ(#"U<].ौ"1r2 LO?6PR%lSfF֙KC̗"]2MKྈww淅P1:u=\* Iwa)W]L]VdٓRE)w7e<mQ21\N2� y/BUmѩY'(W<`A(tZaNU.3f]}+;t $ݦI7;epEvӫͼlK(f # ̔Rjm5FGUg΀1fYGwT9 צ?˸@܇jN, 4<[W1NHAsDAD:[rȸZr#GHm 2 LB&WE؈,\3SC??mteHiC;m*f SQfRrY0}Y9g9ѷiBĿ&/I7ɥԈfSB'Ax?i҂ă0Dh UF׾wtKnBn�^FތIW\#=Y9HoA -{XG&hϛFWx+V] ;}!:ȫ}v j*&oPT&>ʹ(D1s;~țI$eЂ,M @W}4O.! a)2Έ}+.qB}8"YpUSGF `h`Mx`6 /ЂC 7[(0Աl\GxZ'|x,%8g5r댫Hì]/;7r>Ƥ6Jo,{ƶhs uiƼgoSVia4^Ŋս`C2 ˛o$Ӳi[c*=|.w.}1}]px߂`ti/<o'%mּxtGL#6B@ΐ]ތI K.0;eg샻g+c{/ RrWS). i|"q{z=J:Ԃ:.'iC [W@h4'L?͚dًbV]Ô D]�?}EW{Xe|e5r*s)(Ǚ{|�NsD|)׆55;PyXtë~}#,A=}rXkfQBr>o`6 f5J(mbBg;Fu V)\tQ/Lگ]7!3myb ?|'#3 De&\xfa }O>kg!J69YW \Y V]`r e+v`ȟyR%/73ahɅˌ.*JdM =@Zu`̠ ğ3RʳӁK ˚YMWuh;hנ< x/n4OV 7F-si6zX L2p}W1A%LedK&G[$L|9U[ Zb6<~ܟ-ƿ|YX} ǿYȊS?r"U) ^Lk&] ͐9A:L bL9QNr;33 ,/J|uy [lS9+;qez~Wu )b]n6B&cbb792xE�eSJa=H1&a9ݵGxJ;#1@bTow Ph ыw"—?v<f|ysk撑r;X ݘVGnS]N@EUGCa ğ,4+o 8Y a#] r"oEVބ LA}єt]ڂZUC4g? Z: FatA[&χx-V3w~#L'~RoGȞ]2~tl;OF-#&ռg엘_/'0s,n?媼xkڦU7xiBE�[rWo0pa$OfRwn`>Yؓ1Kb$3>肟cpq:FLM[Ճ3!x:Q-YeuLretٙcgճF0ݪsfnZDy3.)ybs@.04>+2}( _A{0 vޓ\yO0붤[1nPnZŠ]]ݥ$KW+>R!^#%3y\(\.4 V%(&)HDk+b(g|"Fڨ.AG9]嶍l3Mx VD!7Hʿrᘋ1EnRkw4)Ȍ.}V.BZ-!-#9 !G0\_,(F*+W*L h̼tx.PDU>)HqvKDi\\{.ʳ$?lcœ"f3UXw 2:]|6]Dn?ăq`uc aa9tq݅pctA6X m*8n/f^8u%&ꑯoЬ3BV=e=JsWr;� +1:O#s~ӿMu^2FG?{'||Әn"^\f<`h1,z|1u.C̄1p > ^<֓54'b"v+ QUD^y%G=9^aX,3p :c c^wϲ9Wܕwc-jY}O' ]UV]<Jb\ז>t,<s?\œ�)!"ҢFBVLyֱWv21?ǘ"=q>=DjÆ]]gLy#olʳFWx+kݶa~;8̾ fp wdN0܆苑x&q4dєQ/{r[r\0Lkl m7S㗦iTP\cY3F^Gi >pB bl ?Y]0YLƌUEhc -1]Q^H7}` d9)9O'Fׄ_hW51cAюFr5x !ZRj5J+'[\1,k` X&ފ5[{S`ۓШ!Leb Ο &y{.cLޓ`t R&&_x5ItJ3*SZ:h�|-kfLX=b-agڸV{;&c0zJ;#fyZ75k%N ]|Yμ^=+A+csӸW\iyrbr>e䫫=81uxԒ5;X]{fy#"nǨnDjk5{B V<1̘?V]s>[X5&*LgrܴO=Ov!R0x6CezFf+BQ'fh]F#($Y{zJ[*<Vlsg'X9뵂ڨ$m4~0!.uct ڧ(P0:Ɣ 2e(B@B`M LSiuBa J %dF5(g>!sK;C0#oBt0,?:ﯕ?V]5:p貊;'L~UʙCEưN=F`@ȡ@B1ҔN}s~mZl=c[V\[},Y;0V_.MQ 9 %8uHSkwpꙝ\^i3a|2.ȍe0][Ru)M*wb4EZͻL9biJcXc+OܢX p!d?(I. ľ,Q:mB]}0IfUt٨+#~-7bCbP^"z<Dx9)c9/Տyw Ӏt{EJ8^7q2#N:u2lv*JoI;zj1 wc2SE̘Yv)\dFYc`LWt_0 2 1&Oɬ]ow ia~ m "-c|{R+Wrnu=L`0c&潰Eھn\W_/:ݿtKw\qL[F۝1&s}'ѪMf1 Z|y CT6#etyΕ\A2; hn\: qЁŃJI|-9|K{v2jlKHKw{Qcm D{+.*PԵXЖQ#[wх<0q(BƬ+jLwvgd#ni?z;sV%9U>MW=bbQj5fƛ=m]}Ʋf)c$~3ffe3frǞ2}\]~B9*aEZ.vBB=TOgcټpA:ahS+M=kNK;M"Y.l SH3y;>jeL⷇X]CI9�l)!IW{X`岲RyOrݼ'DU75c?A3nY1'F�iX͔#8h4캉Y ! WDvv̟aujt2F{1 ;q˙g9&fg4vhBMwV'VpC16(kZ01L 3qYk0-*qܑ?r?flYg.4HDF||V' *�]n2tl<DٜU~gCXeLK+B<[ {~ˌKiO^ju.<_]-r?]Swm7pgVOjj~[:i~nirsd׳f<sEǤuE7m⦋k17ys珊ʜsLo<mr!pȥ˵cbȑ ,?1Go? IE+~-mۺ4;LA]i nŇ 7>lZu]W/C*_Kg_rV.ݛ7oކ+ׅ:#zj};pO=y~Hyl$קO^im pc~W 9sC.=6W><?-0i>Bߚ(cD{v~G|wev=vqh]]9c[rv^ vm.:n\y]ϡ@߸afWiӥ7=�G1?_9^[O-gL#_>k> ^ָ˙O,] rӏYZo.c}ĚZ>Zo{8G}<}c` ${mcr7=[}3(YQEWۉX>/׉){'T߸m}:83fU#\TK5Npo E?ϙV"/czgw?_gw)Q 6&aYP؟C1hoW{Wi{W1_ypY~ʘ/<=g̫C{qCh ލV-r+z9]V?zucyNaF3ęHfCN^cvvDE.hkڹMuu=DKKG]1� w*G_<vbw>Uא5Kj3"y/,=o=c 91q%DCV'"n=-ի7wgDX<Б?;.~HvxSumo)B l4wZüOrjN1ɭ˦}CA?"]ة9rL[u[6봠߁Vg7X9붂ׯq2f Pf5OK߹T+G^<07)Pg;amE֙K GQnL@P@/1f!ϛ%"syLheV5ww>b9ݘ8G߼ />UP.Wȼﶚ3~?TUr焞1*UȔyi7+,՘T`)pe՝vt[=Q/dta#/L^f@MWOyT LX4/BNƖb.A�.PB0yû!``1sܪjо΅B?pm1-7gaaxU}J0/*>1N2xȵKC':tE~Kv֕q!o<|+$_|L2R-Wc 88O YyfnIKoa6"I, *g,fA><; Bd;C."(ڢY ߆0q/B#?BL.eZ[V$=k|[` 'o|{Vfqfo僃h}Ƿ(]//(cw^} o ߼U'n;q!ڳāDF<c61ȸ PM5O^>aޞ?0j9r(B ,"TEyXQ/1߿EH? ##A·ddthyڷgE\C !I|Gx ] ċf [Cz BZƻ1Dyxp͌.k> Dj͐3vS2.u^o4.ua[md=<)od= F e sĕ-koh{\yz Aat^:c8S2$@@dOB|o gc0 .ֻftmoDQN4rBg0~P>\$eA@;<|o=vL܀߰X {[Vu9x?B|f{Z"f~7z F^h�wwWZÛ5~@^A8N 2C #A|-wrx92Ӈ4DovhbƘeictaޗOGw=~ʌ;oyExHGs'_0n:\1?{Ix3sքy7iľBZ8X ] u}?6TD I0llg|{a i@ z|?o8hA9ZRߔ?WҞ囻'S }@<.7(߇BԻcLW[ny6h1e*P<ꮰnen6{.+B&)Oٽ봠}nCxS(mzrӟN&pZԩ�gߛN-Ǘt c@D ųjͦ"ϩiz0$[/a6QVF;TdJ#0ԨŊ+#6TVno kEf,KU w& 3 ‡q ql񙹦'xPl*Ydc0K7YvhUTԒL|D쀢uOO ;Oʳ0VDRZϵOOdPơDIbKOu 3iYׇ0 -dfeGϟf#EF"Wc {۴rQt۬bmηۆXV97}nu6ݲЈ +Vuj]·w+KE]$&FBv~0K."7;7=QH>9o%g3bkP<sfKt(o\vkeJt-aH)w.Z|#u v`ۣDl"iv M:O* #f%JN|up\)7w I0_OZ%"B!cG%B BJgw(_N8±GB~F$&z}&zdZ 1_)vܡj`jwt/Ғٗy:�{LBԴ힕ʐGIԱߔ;q&]kmb./~{- |F <s^CJ7pscwQT͓Wh\f{i]2T_H2#ٚkmb^ռ |5)"aֽ:m-90<aOy3&I.c{>Dܲ˯H?zCKlU'6 Oß_ФQ)c߱$g)"jt!v3qkh<lBOnsS˿(gôgim]F[0 t!\G Nx9w1a^I"=O3i��@�IDATfC9oDŽ2_'&[Ś$,{Xa7m8o,9mY t-{Sd3kЮ1ݴţ@z|f&5]r;FFK R)A0. t!4Byo!Z8[$L2Hseb@o8?OBl> 3[j>~VE9vjsE/V'"zFܺ\ 2)"3]< t灷s)WƦ8]x.˻x�ggo@>'-aJJO.D&HGs^\ {9ޝަ m|<kjU:z ȥHyնpC:=c%lg(C18D?b>йΛęS_Q9]4&yx7J?.ܧ-_lyt_G_sO3HeW2ߗwY8_YI^ `5O\d')آ}i%C1o_ʼnLʹveQTiJX|2&N>&Z&eG7֞ olah>F3c<]ܾ9dl-|lf_G13Xf5O0ZӜh2q&R~ER^AHx6qLcʵÇ%'SyL|"iQ\oK4N+Os>h.A-bwͲrc>9(FP"GT15FDF8<# Ч__㎙]V"|i#G?壬9(W kdt-‘\=Pk1"x3'Ѧ+GЖl3f%ٙWzܯGX-ׅͧ1wϳ|w ?|>kdh! QFB"-2Xo봞a}۰':2tM3' >-ϬnhHoMJ0F;g iFH؁g뜹&b (fa ^e9[r?cjغH(cƤ}YaPc4e9ΘmAd;6ޢ/:1t p_K828T`?`Vey2-Η B1A`R!cg p`}ĸD>0Fu훃s̑7̡Yˮ9 6E0L:7 򢮈 ߄2_}7SQ\{m߉0`b O3W*u⻗˛ݛ1F1-q[= ì?o<)od= Fc ѺtY1^QVG,MfL]l>^gĞ6A׵p5'.M4tELU<U2΢ jtix`[XCL%„H gc־x?x] ü {PƉf(,c\?ZnڣLfg3W]=痤z.;o=vL-n8M^X2dqf2{{> _ƞխ8ߍ8<-;'OGk&~LToVABQ[(u <2 b'"'8}25]*נ B>н (�Z`fxE7cA|p6 jBjƼZ@zÄŏJx `$"OU*$ V]{y ]#3:CBez+LD.c6`̀d_EY?�袗Az HAA; VD" KキPB'Beew]dޛyw2#_:EFuuI/`ט{=7ҧ (M'u6>i||.5i]PPeTNse!\ڼ^mc]VG] _7~rD._;fO~% 9]v]Sg̰1x\㳁ը+*o$+҃]@J ;MO^PRPY(Kr/Nq5]WS*]Ո{rDav,(K1]K .FiܣtG %M1TpF*X$cFbʕ8WӃL<Qԉ+j5C/Y f3.L/hJCoVCУN^K Qb(ls*=|Qk�3wyg:~u U}WzmD6#Xsz009q2;| VyQ^]|H^WԚV@vt#m õuaaHh|l4eȑW+mF߈P)z)hW)5byL2f ڔܱM>k/\z :14bte\bO0:NL"ronJr"Y7SJy2j -ךTi}1=c)AUQ]n?"\P`.imlك9lwX^A*Iq 9pA(EG("57,UŨ#tFRIܒ,.ûy,W4  JK `YiHO3v*mm)k~A؏6}j$LF߯䕻w'e~SJW\Rt?_MM0,`Y[X1a> -Ҭ*V*Krup].pH�8>4Ӂ`\rzfUW_IͬG  IGǷ.WekmKA 5.ӕsz\ێEǑB-S?4,!٩-xe 7Ƿ-IݝBEjy:/=u/Ah|1TŻH1w&:;9vEQ&%̎ɫA@A@8}R6wIǔ$>y[ A nMbKw5g&,s?o[Nz)QeV M#3q -NA@'i3ڜ_\v]I+ kX_܎+:׫tG) ,3T�LWigoVX< E DKqspq(LkR6boEʻMHA@A ZŨgYZKY!I0Bt7ũ,#)Y=wACE)m҆A@A )l1L+\J췋A@q8zZ=V*U7Jxo9.2X1-qՋ\Qϩd.I 'iŐwYekP{?<Btc!>A@A@A@A@A@A@!n%]A@A@A@A@A@A@G@x,'      p! DMt      A@A@A@A@A@A@n"躉.tUA@A@A@A@A@A !H־k׮8.LRN)k~ݥ)RO      !gjk}<ZK](KW%[77Qկ3ѱT!?̂-M-1{/zird*X/p!mI*L2ѺS1O#{\Tݑ.q7K tu*v­ͨL7pG.Ѯm16]JY7Om_Gk9灻k STvt5ڲ4C'])RP=9d,~+;A] W0,4țƊih:|xU'eɚc?H3Wihھ *m͜^r 7ٓMQ_t.;O# =H6ix*ߢ+y#d%}V͢齛S̤q;O'yr{7ogK.7綼L387i8? @ާBɭR kB;hz~kiը&/iwۭ@mr8PFkn0 [  @+xX>i-ٸ:ΟF]_/C_v{<.GUre>u=Ig tGbEh4:_Yxkk>Jus }#ܩQ+kr1\,蚿)8iw9fJ&%g-3ɣ_}wӋpDEKd7$<2:5i]Oϧn>h~e-eΒ6gLڥygKg?Vqta3įt_ Ev~`ux+}іIcfգz%GD e8J/JP_O+}*$ oeCگeRԮ(*X=YݥC1Sﵿjl3+SO= )TevoPkS3Q\<9bJkYwuc`$$:v0 nnxqZ28Aqv@=sϠ5?oMi29KNSE'%! }ʏoFמZ9z*X-;ZM~l~;<~軍N,bym)  ]~\zi yDwlB$ =>jKLO `;h\[*I\Ә*Unˑ ꖛ;5uTVD;5O0L,M[4+Oz H'^"� ɮ%_K/cv}eӾ]a{bh޴#:ATkQ!nNM\h~UQ'3A@,_x>@7 Z4瘎+lĥ?4&PRg>Ĉ.:IƁNtE>Gu[G g9i,oDW8O{n_0D^,IgH+}BtyC4ML(!L4Q_+M'DA@A@Bt%c_%|lBtL.@4n khԯ{$/nҘum([mg)m|]栮Ҭɇ5dmރS PNjhJHjiirIZ֮S10N:sWM0ְE9.@ʠ04 67C~i:zh2lDWRa.64OJea?z"<mXM?2M@|yiSOF]k|b ]Bt%qUXkWAi|Z]Bt%A@A@1Fܣ9 ;ԙ"pj?_gtMqTpF*^y2]ص~t(Ƞ5\"6_\V#GZuiZz}oNf]qqZԴ -t~e1(c/эN3XV9ӹ)zZ8KR2wSC{z<z=*tOD\9]ۼ/P>^ѭK)S΂TC.:LJk,>]6ctu*X:,DH n0 \ ^ʓ/=mW ̋sEIUQyd٬ֹ�0aUNjgQ̝|XuiJ>֤ڨx+hUR\,"g>xFUND.2+ϱ×Z):j0LwӠL-T|J:(sV uY$$JACgysVD)b,J:3Λ[ڳ#FTHkAȘPgx0si7uayQg)60zrG]$hndϙN/r5ܿVayvg߭V:uϧMjg \[YpjL 㞹T-UsI? TTy3-2# tУsؤtf7|8M{peXto<.g̰uKQV<M 5u1ܹdD<`v5?.2E TD :b3]q\(sj]-AǷ-#jM} TOnDs>},Bsv`ևmt}wwr7͜1g>~scv#{КZk+PRl9{~NQw+h#鹶Ku?<]xlWJҊ90ui.p]gLrYw u5 ͟~֫|+n_I۷%AJeG) hE<~-8A;UL}`Z22eIMjΚrD4U("tXr@͝rK] zXG/Q䁋.Θ9u% DY^5ϭP.ܩpZ<)O T]#i7[ޓ@0_PQ + k%*(5X_`L̺<a]u"AYɘ)5w0}3ųS[6OA@A@!0ñ3n8w^`G9S6tK*]ZMOvFWk;W>L;魏\c\`VѸ?*&,xoWhj:{Sw):흦f>?QyiퟟњC�+Bi>e tG " uzkh\/3d @)z|vu2A丹/N``7]9:_(ۼp)DC' ͞riDkhWP^F igۨ_V(wRw6Os%nhB)ĭcKdkVuf>ꢅeԔ8o ײjJMhrscJ:B*t3Kw5例K4dϏ{a f}F$V93kqLϟb||<>Lpk3NgZԮcQH>l>&g,9l4/8Pc.$qG,KTPs;-Zdgs+9kb54m'܌*M:"Ρit3SֺvFz-95{KyPy.gtSA&vK^ww%VIt#-O 鑟Vx\]2'u 45dL"ֻG4Mt8Dy*/]+4j|m,Ms]qPnXM/=\kպ$jQ[U;ǚX믪_%A6{P5̀ jȸԢssB<,ru Sz$Ms5寃 W6<;v.)&Jܭ}dweNCסm YYLr#1N/E4Io()ON7SŨ թLr:CvU   ܦ o ]Ѐ ݛ38)3}! mR^#{TTjgW; 6'5vv}=q*4y1V}fIKoDikB[1:cC7]l<M?*XDWZCzw:Ani 3J^UxWBYsRFԞ J?]eL'||&Ų+N괢,JP̑ݴwߔ"e*w.kZMKZaow&[,\'A%03fە6#jwb%nWkiҸn1Ci\"-29 e|FS/rX,oH.]Pդuu~I6Q;O&P|t}ܫwʺT!];KqT"x]jƖƤj~>zcBO`Y% @4I& +ؠE8K!ݣ4qɮmހ&mWi?1KLp2"hd1QTLBX=|0)Y�4fF]_/IS\ybDWFaS4rp9]wC,և#v|S^|NgA?e*Si'L1WLh&k1W/4O9gɼ$PΏAՍSRӴsZ7.k=C#TQ 0sc~R>hCYu,j{,iݨZ|X_O+jХ3'ѵr{a̗:m M;S~Ah3o3I=9^~E@5]bwQOqP7O++ 54'sǺ߬S{{3 \aըhgN]xtS)lS'.bۭ'D0'.|g.-J{BoJ1;tbq*բ4=: >D֊j?,̵Fа=̍@:PRsԺ<O|?,A=h^Z".LtAKT,.BݼMJt,4~v,v,6̟<1ok:oQk/ֈ=ܳ?ݦ/X}csIiS WڦfZjN)%@T™ڜk; ? 4LkL/DޢOYթR窔hZGA@AG!. ݑ:JgP8._hPib#.>|q'e.IVtOwD_E/:y٥ L:cT&\;pzc?7Lx1ǵ+ʤ#Na.]Z3Nݩrᬕwӄt܆q)o6t)kf~3'h?>oXeJ?rvtb+U?i6N|ΆJz'?19}7Y>wi߀2et#lUNXiܲMϪ%'<f7?ܛT/59ʋM<X߭V^3٫tYeХ]oA=%lLU:}{?T-o>ڢ/3K|;x-rF6ʴ|>̓O\Pd}Ţ?w2dա<:-jͱMϠk�0Sfcsf:'oV>eϡ̆YisyawY(3y:1_*Qt]\w)ʲ{:ko$L|/8`a9o } 8"f}ֵui,HX֏k{<-c=<9ٟwɳl:i ~%X㑎?ZyV^(n74Nm;Ӻ!kNpȺ=ͧz\O_mw`Λ4|lVcCT I$^8ߧEsi`0DzY>H Ou`:bw<.u(.Y;p=R\<M ka\ڌcOv =9kKof:}}W&T"|xD2÷xǸkauTd ?II :Xocp\ۑu:6=  -�#L HB>VA%8(.|݋hrItA(x:wrp84˨Xl_DǿTEЅ25V׹:CE,ˏZcKt]c]HW煹 D.=2zO;'nwWq&AeYeOp] R aosۿǟI-H)y-K j=eMOSEMfNbaI ge0VvSe@ µs1WaCv ax-/#-| s&eqosGœ`n],4:h.4oDW‚JXӭ\F ~wZ e^\׋ ߿0 pߢ=9_q0┦n}7KƵui(Qq Tp3uk')ӇvTLb:U|r:kÕ+>F~q/DW8'W Pg9/KMR^P{|uDijFݧv X1ěL; w후Is<r?ssy `o c. 7el&&B럹1΍'@a|7!1dC`"vxf8Յݦ;opV~  6`P3]1/.D)>yީ&>BI3u4AD2wC ex8%˧qQt&hsk, ֌DBuaDײDg OB SxkwY0kGq׮GKwBu8SP-.c/Z3H] oYp 5&:>{gȿ@do$&tv% Q!hwG3]:1ǂC(2Ф~x#m,qgwLaCr&H&]!5 c<nԇxn9֚4H<^o`\[` \&6UK Z\p!SY'#6al զ�#>~?~_.y}io�V̍Ʌ Xy~usvLn` y;}!eD{ O?n. wC~?DwZN\] emwL&)wV./^vsOh׾A|35 ijm>Sv95Ў1:1}`ktA8Bc͎1FXWR-NkGA@A@n-躁f}d(5Pb.p5<B4 1֖ k˔vw!�wް@A2yr]\YkmK9hx-- 8$f;ݹp]Z}C,Ak�Ng_fa{^m݊Sּ"mIs:ԚnZIDZf ĐNfܖ[; o:8hd<q2W&,~2Qf]猹?_#Oc ރI$h~ܻ,hVU˂1zdHhs*t_;9_\0kaEe24 .K5 b1k}Qk9xZu&jx#``c;O::=D`wΜ\\| Bty:|BB-ER@P9|V,8C/^ÚUмFIB:R敹wX&7D)vd~Cp;_8?w91$Nawl\2o&Ş3 wߙ`VPkFs<6\p^i{҃5&ny=uea0_Ȧa_   ˎH°|M$օp]LBtaL8?Va#[Dru;ވ.z!_zZga\<6 CiS 0߂^s̢~Mk+ODcolx6Q .:xhyKaqwA#4ÚUв=͎M0Kx.B= d-<0Y rq ]_Sbuؤ8̯WϩsD<$kcw& 3&hqm9a,kk;?20ہL}s�埿ul"g-뜏5%Xn>I55aZʚz\7ϱKon q׏Ȇƺv#G%fk%NmW Bty3ABhϞ)xpS3б\(pOFt=W| 1e/qGt͹Q6p8ĦJt~Nsx'Bp &z"ejMBs-=&CSNs:th[ @p-xw#z{?A@A@A� !ʻafIJC. FwJtA?ў\\ؼ 4ݩuȜO;$CY¹LGtS]\~ϟt@o-h.01Ժp#ĂƝCΝ@:6y!6x>bAh5#-l'<fg `@~h,C9ha\g!fȘu8 }Dmwfrq:K;FLJ̱G;~Վ;+{yW:oƋ&i] eXqEew$f 8p_}>}5d/'F`“\[FC^'ƺ98haեo1k#MZVX61߉xnjtm2:5 <?_ڪ(  }yvskqf  wL7 ڨ\Γ7ܙJh 54Ĉ4LkXC$y޵MKbrgڒ|95Ͱ5D1:;~|;H v%oc;A@A@=\w0d!<;,slG,&lO*e~L”A`쭿LciЂX2I < EtiABW/ƵawV!vj6OYI*;37OL Z|Ϛ(f~8;8f3gh!?8;w:X[Is4pJ0ɆA3+ûYPu1¼x5,|89~?afȘua|x2B[;m,q}2~ B.SHwGt{A2Q'sl`W?4[HZ[a'qeخywyV|OʵB_zgd4|stn$F6ݼZ`"tg<it!?veߢf~˧/n b,+ϓ9>Zy3;A)LP{|9 !WCMtAC3:!T $W۹ eBE q~xҎM8t5My0^N ՘BAt1˅ٵ3<VA@A@<! D'dBopO" ۦo7?$!DgS7m~el7YXM5O~Nb]gA]4GGsVa$~Ƕ.uI W D  |V) 6|أF(>MwO%<GZX_vddLpvG>Ȝ-/<4dkq#E,?DW cC8TbS|cuPfas]7p` M+ǘ]{lhD[1a:G ?3 ʛ$gu a ACA.U'"c.p )ז/koa=1I$N-\bdTVYz3Ժz1鵺V[ވ..K]+ acL>¦(7ׅp?Od(ᰞNAqrh|KTbDLL7PsQ.];wORPit}3/f0]4\=i@,Rm0#`C<}7bwNӔ "J65;5&76)q?q5$ǵNuc<iyWA@A@H‚KqԢ\R)Z4iqJ:om_ݩvb2[i'.Ap|<]hܼE#~KFhkKKEu6'u^}1:=M4ԮS104ܓtx&TVڦݳuӋ%໭pxE㞫*PbiSe1G~z|NJ>3Z3* jHG(jrS:q!fCʔu{8ѨEbQ+:U5Izl&{~kIrq/{_*}ݪg~iQ:|Gr)OA:c ^8jAN{:K?N79SS*W1KMϦNwq߿qTJԳԺC+e/zqUDfʘ95}0/}m+~L%V8sT<t(<@|Vcz~lيz eϙ u+{5峚n_&g_kPǮ%GV;8B;ʐ1)j[{=.ź?ƏܯYԀjM.QLuM[;<ztYzHWA>/</Dᄐ֪e]cz*]׵ptQᩈ.je%(-'G[4X~ء}ur)StYymoF%惿A7Ggֳ{L�uJu_(#)L:~Ժ԰E+O ^Yy8ڻ$ϜtlU6au҆ ֳ@(ouC^?+h)uQx 6BhTLZ)I~-v4A3k @Y>~OX{dLWΠ= Ӕ>M1_Ҏ9HqLvڽNwzI-Gsv~Q"92gM;57+lz֏GfFeR^XWL}ZQT+V<<Ϟ?q|`��FIDATr%=\[-91zRgRst4\kt+M}TgyF{[N>L9ri"kУ׿k;6_DgQ븓/w9yPLteںᴞ31-<A_VW{OhXy~?[Vci؏3/q<g,Y=v9y(CTz (*~Q>r|'<p_vUk+>֫0Z#FA9ji X�yg g0Xm49pjdMi[5 y Xc2>~<0\AY %|W",  ( mћvꏸRN�is >RfiL)Rp/>>Q҅Yz @4M4xa|U^~fauN/t;~.0?Kr:?,EevaK(wdšhʜucJΥ3vh" B2zup'].?]:sRh}rSRϞ$ n؁TwΡvo2j۟WSR!&j=U|ĶiC4>Ho ٝ;{zj9M$ .{{{EW;w.*A#1D}6u~"t횃fIC~Eh[cY a'ڑnDgo`Gl]>f>5kSNu;lnmW _+OFЂ~ko5g]IQCQW9iZLJ(Θn-8B܌Ս9t/jnXqNqy;wW'Ə:@Ci zѯ?5N3~;:ߺCĉY;/ոJbF[~ BI'}q mֽ B/+ChAڄX ux]ϭH(č`HIm4Fp!@p4K|_eC/ |85ˆ?gc:n.W$[u _SG{to*kK@=s_XI }QbuXEVͤrͺP=sXwAsd%]uuEVI:wDוsѤ2꼏 LًVʅ%4kaM<^juG8'wZHmRk"];9<γV܍ww:Aۢ9 i-+L$xs@S'х@ Wvq>df:wl>7{E_MmOmp0хfϮ_A恄KUܭ 17kSPky#kL7X8 k+i2:&L8(J3L~3&클|b=G:NFoZ楤:lJ4o.D%MA@A@!EL QG(XŞ;KbLF=L~]1.2 vl≯&ҦKNC;3t]S?8TBj{*kaabe$=!1g $|T)`'O;1Ђfr_RNAv<A'@=]0"\PKz'L epmA(vu璊ő/+J j+ܵ8_m0Iu8tAJ=YpF+ߪcXQ9a7}$BW,F;|F\Pktf!'m=RΦG/Szȝ7^|ݰH)JJ޹!!CPW @2  ͆]7 @]IK^jWHe>�}Y;yAzqَӏP;xiAn`ݙf^}Ҡ޳}+ou1 ufݲӵihq  톀] 9"ԁtRs|}㋃ 6,]ɓ9ˉPKP%er*]zY}zm~I ^F 8{mCBJ  *RlL*I;W۵ aJ\slU.CA@A/ .,7;"nv>] ?&eYnꐸ\,͈�{f;H.I[q>{A@A@!n,F�Geɖ^]WHsT|VQ;}0ot,q&A@G`݊(Z>,W0~'hhaʙƟS   E@-        !T#      ^ /Қ      @H5GjA@A@A@A@A@A@! DWؠA@A@A@A@A@A@]DSA@A@A@A@A@A@Bt jiHA@A@A@A@A@A L4.A@A@A@A@A@A@! DWؠA@A@A@A@A@A@]DS qwݥ)RP4)]$ #p]=Oqt)գ*<O&&A@ur8\);IV    ].pH P.L vv%>K\Twы.q%[ z'n.2M9j<wySM:^Skv⡳F!<Y$ 5%iYx.ˢ&TLBNNHׁ˛P,iȯoԇ&."GhԲK zG;:u4c>z;.8z<D6U]&D %ZtN(Tb,sV@~ں._R*u'~ʑ+/L%]ԉ3tgRwC=/j+s 'q3PvOc]^Y7u n*>]FxK/i;hK<t_Oi=~U.&KB@ܵk4rO԰y+*\x ]cGӱÇ(Mt7ʝ7 q   l+^wž(oҔJEUG\<pIwη(M^tn *ؾ2y׼m#6<ZБ\d%Tꕑv{csA,>Aغjɾ^*05Q0՚yx5:*$/hDgǏnElR?{*!IJ9ځK̸͙(s^39yNHĤ]^!߿fO^.K~P|}5�=j9..vmq?%S[CцeHH$]9qUz.UONJ_GkND9k t(bٲTԴҋ B9fY<=wiN]驗t;pG=;u=̫o: [ <GY+ :>}'g eJZ;Acn6TCu?-+h }GiiӀ25?<pդxO \NǏGxf~F3RX+Y5jvӃKF    C���t/k��@�IDAT]\U^p {ԭUuU:jU{{oQ!N^so{ğ$'Kx9wA"k7p,o&ocpv.dʕ%Y}oT%GK:3C|?@Mez]E~*1$7ߠlyY{'}5 sd+oE,ǽGslN+䱨w}.ޅ*t:iV;1e.P ȕ)YyKt~Jʋd;%3m ph�-iѺ]8NE/cӴoCe^1X6w΅ w7d͞Q/mh,T;|e5q񜢓zOO͟;)䳆CJ<qwQ0z"z FB#yې=GN"|>h$>;)]kڿp)ilPy26N? v`Ҩ.PM`c0ٳ*_՗u5V'Oq9<Z$̇ӎwK2|X"4O<9C<y/dȨO}N*XJ,�?Z\*ӲvD@" H$Db>D}t!c&B$tIsKI!s{ܶ,$E[^]ݙ=ϰPEPT.Z's!6e0o^_<m{Ț-oGߊ忽߯E\ݥ|BF]`$.sg&p!Cg V޾1rѸŧ}Bv_K9adY{EFF$D@" H$$||$2ͭ~Ȕ; *ƛh F? L'gV_r[#[Q+q JmסN TZ(ҩR2CǴ񥼩]{}U *7c홚*DdΕ#Z+$Cx\'2"O喰7MW]nx'L!B%[װ]l x:G _lѤ8ŀ_FZD8drþrd5_qBr " \ G ˉEx.ןkoŌqBѴSqK3e@sK"_!+z=Īx=M+noڛo_'K7}y=Ř%( 1 {QXt`Wq7reF6=sd mm)s\;`X>G2Xe7x֜{ߠ*U1/*-:z^bB"TˇV$ΗBzVl"5ư~v9\u" n ěW h5Ld]ZO\"AkBryPsjXFke/A+QK2Gy6?iw\E׮/^AܙPhTkXPkMrA\R^Χ]񑈹PɃ<8>uQ/X[}#q.G Qj>\as_%ir@|J]D]8yϚ«X~E o߼OSBe LlL݆ӄ(X+D!xyk8| xTxrBXOjtg^!(bcT %JM/>O<vz3R0llKFȒUPWB D='o^Ehp�}9cud̤k<&96Er`[^wBt{_JXO\Ϻ i"Kɉs$_!lz$a)-ZŸ"J_;roU.obFx7s1gf%ʈ㻗qb>vV4-rIzob~>]q_"91!ZnޞK+|k͕)'Q®4 )gL39?l5U<{dGAÕ+<ʙ+z<$D@" H$$缤yr^WmاᨲlԀpTU)*G?]F'9ѱ"JHl9DmJC2ѧ5]ί߸u6.& g;⵿VvCĽ"h{z,@t[tbPMtM[^wZr?mi:jd+0C�#fll7 `n Pf3Wm,I_wN+PziԭX}d1s0tF|V误9Df:|_S=o H "hlz9DegI5ѸcIIBgvbxNu%Er CA83ZHt]-F?oj^v\H% tmu5ωZ'xΟnph 3^AZ=ǖM'g9سCK0$Ʃ43]Hn9'sw5EI#@X Z'B$xV_DCSź[ ?}s:+ơX*(޿:3[}OdѵojlZ;t &N '[\VM>dZb",XKn_b ƭN73Wn|sOٴ|l~pP/p9 #aoqπF#0`DvϬ"jV#|У.@fY DFIqf]cbQjQN UkFKS9[|$Ԥ[VEi!2_iϿ_6ӭNL46&rtN$}Dΐ6O*tyֺ^(^{~ مDnF wm+}3Ǫb!49;JWp:+d4!qL6vPsuw䮚>e}E<E\c;O^lZ-,P1<< T][,u6Ej5x<,$GVeɜGQeD" H$D@" H_H+}Go(\{dԡ(Qz?@(hf燀rnҘK/s}7ō]>>]wo*%dBDzGS.m 2ʊ0 _ KaIϦF"*^ErDz`AZ/">hs$>JRճڼx*|tel]jkh{DxδX(TU"6:kM"6l.*_>Z7Ӭtȟ@+m[ҦٮؽTXZQx2[ɭEJDCռx idG慑+ox2#Wuȷ2g͈}+<:YǾe" <!K 6Z "=zǽB&%NnU zf<udZ$MrYcDWZTiƷ9Cl;3;)D̜M8b&ʫ.2V8QĈA-A"L8AMB`6h[osIȧ*~B눎�i!ݽ<YA~mWa7'6NhYhҫx(s2Mg\I&xޏP{|fc0Q0m#KrD^FpɅoҹ8׬z̮ )#H0W<iGT|\ӨN:&mĊ~hi|DɢuzF3jkQ4}}P(Bt&J"?]>r|V櫛D^414Sة'3_\^1ӄZgNXAAD:v𤘈߿Ǎ]o^Ўy}DtcN9th7&N  KU6jkօףp:2t}t=cALӬ4;o1'!)]}`_"0.woplβͨTZ NBOv$ 9Fvm+W#3 3ǐ1c&Y0wH;kފq\Fճ'xuqP]TƶZ r8!e;O(,hx!vxWڨϮcɂdsGӋ`nk .7_]SkUiۯ:~44YzgwCcD۰ߡygc q5`Ǯlr+m*m+S.[<hV ۖ8AͮCւ1Yz__J1ё &)QҞikQ%WNWƲʝWdV܍,y"}W3bm5UgI}d sk'+�͗]RʸD@" H$D@"DW: P{]ۜLg&m`_Ė3{BeR㣋7e6!wl&Z3־ Cmߟ6v=0qBeR-cDWkx8oȕ(|(Q:B.)^9Eg)ճu~?ڒPj2#gL kj622GLMzjE)<Y^�4@&k4f&6D<EtYJk15>|c1fѥc2"grsT N 13aQi^~"rsOV Q]LYӮcܬ'9IW^cԋZ8 $c(#ɯ"l4?ŵЈ?&CW]4*HdN) (N�F}<uͺ>̼LCl[剪?T/o袱r@X5(Ž?ݱqC~iYu(7 i)M1kRVOGx'/Ғ@cR8'lkMenzU )HKUܬhK0fPHǨ(Шކ DYݣcLhrZV~#5Ft۳gyNf.8B"iH ־@2=W(cD5Ks_l#:'' $gÒzV= uގ5KcR7Nf"En^<6ZꓥsH:c#9oݡ N"/ xvM.᧯GrY]---kx`Gs."m̺Zroc<k1KcÚ5@Z\dQuxCkPR<5>1K}DvfOjtjG`겺qS."[mECYKNQ]dRU,$ߕ'}4`}E)߾ Q)S[|ڑiycJZJ<y[R*f4]Ft]i_8t$ϞKT-F=dh|^QsG0)n6m[fH$D@" H$,gOنB/mcIf;lTdX.QUָVyZc--AOR"7LDrdȖ u<gI?#ã |54}kJ^<)nJQe;Pa̬ZJAMtW:hfmjzm< ysݠ&vuBYu<7z41%d`jM5X.Ê m`J"4OZ}SN~23m:At9("$+pk<XPONz$Ź$*u~ KX<u\#H7W'al`Ysmz_ڂd04ǴИQ[w᫖O"bEt ıd"�{?~j&Wr?[kI1>2Hf)}E!cZwcDIn5DzLԷl#ڔ@{LF$D3 3O_!5zn ⽫2m_ &<ȧ_Q^GSoG ͱqi/!gJlY;?M-u5Cz*5EDQxcR"r>kۀkS}1}ZwdkUS2MBtۻ̉Ǯh�22Oĩ;a_"2Jh] nY&x51@-ߖNJcz>h -}qu$},!u´6ib;)|,D[p~k70 ֮_xܜp N0v)JBas;)x8#[b@ 9/n*%[:c\ W+WJUPiK:kt.SM[?D@" H$@C@]oN,Qd"[mٲ kE)Xn7ZC_ 1nr|>*oNZJDף_;!I ժ:M,n jK>!_CO6D}̤$ $76y1D-a4B^6)i8Efnh(+GAt6t` E$W'[<c$iPُxF/Y1A|ܢxabLK s3XP"Ͱ5%anOmT5o)&� /6"N1I^ .2H&At1M2Y&4ŜNvD 'G@)j9|qL"s&D Ԥ%;|Q LW9 L:4!)@1AhV%]˧v0 /Ih4ynTi굦[At|lƏ&婵sչ %'$[WKNgɊݧP8{(DQKQujr*D٣x !0mdx2]"4û4EIx'}:jǐ6nM!MyDBe+׀]idb̉øo.biz]e eD6qSjA!3_Ђ|19=}\L`GEVJ4hK9[s1GWYQ({XWLzxXk K$+S'n3G2ڠa\sK}tq GdʘOC"EѶs&k7hk QyH$D@" HJgbiwt+r3/X 弱ajW_ 6*i$%yr%I񘙧 > O.2'H�k*&eRjoslӷ&QD!GDrQ _Zcѥ)DW@.3{]شмme@;g^@ǡJSB盞q6ܫT]M'1TZ;&̏hDaDx ς|-9՚!ĉOZ:_x7w!%KVjԕ< 2'd咋!).'1?2ck 35JrAM5t5>E\~Q:8*3P}]Q`VgŇQJD��ޚTi"K&B_5ג jv"dж=l~Irshk!iuPuҶ{_|>eO!Œ3 k^u<nS.s|TO{ +xJDe%2n c퍞2t(%7iHw<pU<IMt Y3hC}y&f[2LV) ukLx_ { -u7)WeMcZ^4(/#|mo/S]+Ԇ 7D3+SkoռZ\ K\3S!֩W?X(ڮIyD@" H$D! Zf)1J`767]hU1͝^qN\ u|cJDu(n/Kl訉G?EB[F԰IїQ6E95QZ~%+hoh"b"л!^EEy:yo3=[<)]CO>`j/UtX=QM!C qq eL˜5bPM.2yGZ3MILc .AZ?<N\XkY.ƽI@y^JDt]5?hiĩ"pRB̓Nv3Ay:O*sT-PuQuq =Ի|sF\NL%LX{oݍvu[LSN{L^a GLot]^!';kml:(ڭ2|h m]>\= 4VxJ49a˶,E<>yZj[b`c[ vjNfOW/h]O]0yX/^695|{Ϻh0b%ttn*EE9f[sR!SJߑ扊0`D2F |?3޽ ƗsAٛNtQ).5—}@Rg5nWsdV"Ŧ˹MPvFONBt,3T[Yg)s_I6GnP>,!VYsqͻvm .5ĴFEcԳ/q Ф/yo gevn֪C^(X؆}~9{vk4D@" H$D@".DWD|/Ɏs<Ux m,9tW]%$&-M]:9=ƭA;yZ;IS$%>V J|t()OD)_crQ.Z r^1MGrdʊtKK\懋4[tBEu7qv3ܝFPCiOtiuƂaƎD4 X w\yTNB�̴ NA9HcZ=Bϐ%iGDZFa$uR_>4% zX&O.sI]9N jRH8gtF~Zt/U+uQ׹$ph� Ɠw%4>Ę>ѕpRm¶uW=tRaZ8{l?!mCelvƐ/�mMN4]i?|5&y. 3jZ1Qئ/|bh̔i) ?-^u!uG?Ǿkphtq+.7eL[ϡ]~=u<_OG^x~j.u#&ֹ#sՁuFz[^ΐ]x_l!NGjz0KH㯲HROqk bN4-趝=",,bJ~vD%2밒R@B̟V17C8h8ZJM͇1!8~pR_(S"?' C ӆ2H$D@" H$It߹IE  ~[ig7U[.Ԙht*2L~s]]+OryFEaw8Ll67q׺n٭'"k+|X_kRsMXȦLH= ⓌP{U(2f˥t' xl$.2FcO)l$T~hj|͈V؜'Kw)` ur7'h;c.\7fȵˌd;"Kil =95L\1^2Fas|V_CM_S;jX.^]gvrOԕwڣP1}?n~h;#<Z+MG]1S q[/RG5!H!1: Sː02^C|MQ%'ϟ5`D4ybLrH Z]+"Sn䈮wl}mM٥Fhd\<u a_:J-+3�@oVhP�3؊Etѹ!־@=%Smb3oI2,%oлyu^!gL!/sg_dZI<ĄD0�jiItQ按>T>G*AQUնkauPiJzJg.oO ohxBMI6p 4C㣺;@҆Lɤc }wƛd$|L ypdrR &S`,Yw_3ot=aՈcIo9:*madV#eNx^C+wDD@" H$D } 12bɍ;z* ;vдTnKiPrx]դKt)>~ZV }na/q<6ALivRwZ4j 2'999מv"9͎)]q;^CDl64~xmM$}Q]i9+ZT4z- uM>u6fmQF>^%D׃kave=4bh-f,5ѵgd żz/TCrs=M.#*sM%,SDriN n"$$ͯ5Ti5U0/j)Eiqʪָ.EEG.d`];uC]S_0k!ҟ]dFp§_xUȄw7)-H!FЦR2i<A}FJd䔡`-A)b[tP1">ڛ ́A)Řf>t9 aI0U<ь?bnH-e6 :~ oXFn 3Hf )g8vL!PTF L&.<TZ4%&}BUY2+_"2M/1F5~!_jʣ:{5Jڔt gLbl$›ׯ kԪT 1Q?h6+ը_a?J3)/z#'h,7º`sj;]i1&!+ixn}py^\ōy!GI;ZX? dȒD�tA." ]i.]}9T)6TL/-'nhU#lzTnrtc%Qmi4$i)K+z'ĿPijT9sY}X|%8߆70\ܾv9'ەiy8w'GJZ ]2H$D@" H$It ~ 2!WقzAܔt {caB#ZIIOx[}*qW5Ý# VʉH{(.X%N?jS!JL'xde)Ǜ]h!vZ yԧy6,Ѯ! AizeRG u6)*co*ICq*]yгky<sBȒ\O] f$Uͫx:s j"/Z;Mqj4yJ /3|ƨI:K5|ܣ1DM@-9)Z49YKhDPͺj=ʤ \TʑH23Gl|""IE7fL+g>JW(&⃉T6'"YSHš+mz̍XJtQ;4J"ѓ'?{'"y2ycj4*D9:~hKMS{D�E$RFױ^87 f4h~lJky$a=Z(AQ T\|x)DDS Pb^ַx9BMZ[-*x~yrڕtҸ辠Ř>AʍfE=kH1!=`ݤ7Z@ d)Iu,U{޾yY4[ȄPKsW$=W6 'i*=GNna]T]ꧯ5<yYlpWڠ2D1#]W {S-<z<}KW ȧSrsTBd[F =f96R q@e '5 ;*G}$vfvqiE'DY*{\ێ;ĸfST _s=RQ]I\2w%oK;>e~e+"٤#^h\y#K5W@NkvǤW~ъ\~fNQ<5¬T9>tS5>Hme̙k WKeJw J15G {bvz 6JSkYz_z>4$")K,R>ҝ]:Uz <]yJFYhp?/V۴gKTUȨD@" H$D@"DW:5N+k ySe~SΓ`v-65h2V^T4=.Z>ZOMU̖++ifD{1mB駐bsM1u /+=.%ߠ̄C+yB>wNlƚ(̢}ڬb^ X3iAt+.Z?h4M6Tc+fn| 21"lӲ~Xd+ Qk)&DnՏ;"KK;>8BhPٱPE(sP9O.b)]"quvB:R;;kiwa+{=yiR8^/A֕:rU3c\S`y(AL}EKCL,.v.$-mZC>/kߜOܟǣb7}LYY'nzc#J| ''<Jb?#W1BQʏ6Gynbג$]-[DV>DŽiz/+0;NZz)9CfO2Ueg[sXyOy4u5n3N$b'U4&nrC:CDž*v(fWmWM|]f_Z'=ue%5"ȟiF;u5cޘ6}AlE&@ka sbgGA0h":6/[%GD`5ql~#kiTQɝ: MOnV=i#67/[>ȡ: !?B4v_q-K$נq;|?h ,hh&054I.>=j4o;AT`Ґ\nвC7E֒1)fD]qq h41CZS5#??3E<iM59;%L["ӈTK)li:E{h0#}W`>Wjv,kz*"d=яvK! ini^5ԯROj t d+xyXKȭ(Z2m(KgD ӐU*_^#uK$D@" H$It9=JchC_$ˍsq+UGV]f*#rvYVӇ ~ʹc^!#,lC,ۛ@KF~YU1%hi6D2OalMddA+w~Lja$ +VWVֿfG0_F 'rESXZ"bL ,'%"|^"E1H6#Uk=ӆeʬ19U|%uЪWMru<{Y4׷+pN|m<vż)MT3Dξ,7-LqP3IU]Rrd|JU<$jܯO"E4v)խOW3f3m!?V1zR:cr{�\QEi?g3/^ }FZ]ي1kf�3P?o}0h;}ŮaL> B2A" H$D@"DW;D@"  rK@1s2 DdȘQ~Pa3|p^LX(7곴.)' o߀ctD" H$D@"  DaJ$D߆S;*EVUB,d Wͺ́jQ7 +]_2͹4kӑE,wzbUQJt=ٹL[a!+D fgρF-4S[H$D@" H?Js${(H$$Dt}xɟیu Pd.22~v<w2(<6p<(H Q̔g,3UzD@" H$D@"DXV/H$eǽˡpaxFlY|n4Z벬v)e`kyϑ#GN/Y54Ae 4D@" H$D@" H$(GᗍK$D@" H$D@" H$D@" X$,ENI$D@" H$D@" H$D@" H_6.H$D@" H$D@" H$D@"`)$`H$D@" H$D@" H$D@" SHB^+H$D@" H$D@" H$D@"*$ѕ*D@" H$D@" H$D@" H$?$)eD@" H$D@" H$D@" H$B@]O K$D@" H$D@" H$D@" SHB^+H$D@" H$D@" H$D@"*$ѕ*D@" H$6 !CdʔIcWMD@" H$D@" H@@]f_,zb[ug4C |]#1釬Vvex%[xWx"mugO28:_7@qut>q) ݚEB G'Y"aq{xʕa;*73_/l[JĽ}HLLD9PXv2"\;c)lj|"Q-:mfPD//oDGG666(ThTT}xZlYQ|y?KUN<'AAAY3:*͚H1?q?0*MҬo饢w`„/՗K/k/-=S1+pY<~DswsAlٔWdax~7}5&4kϞahҤ:3 %0 g\(XIm,$H$Itk!>Lk濴g:;Vly72SVC! E)$R|bkyhhUw'"ԆBѳ9ɳn|*Rvs} U\A<}GUCEdG�DxRp<5b'hXF#(;r5(3qᗱc,��@�IDAT7Ư9ʗ?Tԟ*ӄ㸽&ϛ2~1""`ۤ^jPġF xn]hoZDQBH"vVvg>+(8|0"pߑi"MW||6c|rS3&Q/a)<~HhL޽0mꔏf\ C=ɓpT\c,M9~k ̨ctZ)3gNsfͪ&b<n?l: ]-[47ھ\{F޼2?2%CuMj{$d!D@" H5H_3ULG/ϰ>\%W^&A]fevQ<..wvT:9s; .sʇFv^nasF)Z g"6VDtQ>@Ifw/]4N 2}zŽjL:bP͇{v6I،BIT}yB+[lOԑeHOV-fJǾL#00k>�#bGnZiS09_ 3e|26a* Nb]M�{̄U" H$ ItSKڕ/O$,IIt,DWʳS0_qqXȓku7kehƑC7tdU]sjkN\KALt?fџ[7oB)ݏr,JKle]#epus|,KJ$D@"DW3ɊU kr/7; xɱG5]ȴj!5[:2Rg}xvăxL@4K6.%UkDF!~0+h5HdIXy֓,Z >ɐQ/]$zNyt m6|te<Oh<zEb<פ 2dD  u3XCQ&ڨ+|ģtY+CLIm(v!s?EO=bpLŸC9+\ ٲg0sKq<s] fC*icݻu9 8mT�G5]U﫻k"^ġ|ܨՠQBopx|"2<#+JBR nx(sd=þE8nKX_0rEǠq¨۸�[O8w2yɾ=myu BQ=ʮtNTc\!Wެ|YQZ^z;|5iUXwygǧmP gyuۥO 5 _֯oace+FjgѼֺZȘM\EMvg BS|_- Ί UvCkA~>/ٽ o1Cȸg/9:ИhM:3W%rN-l0(E-kjK3ҷ-93qc^DWE<B. Ӆ۷ñcѡC{,]1UHٮ _%j6^%_/wټE%QhQl188^^(;(WZ3͐Pfj^z-[p+Q9`k3jԨ.1!!*U5e )z1a<u&~J*~Wy5=EcժUX?DL644 sdeĉ?P-6_ܷW͓1Ϗ \͚5ms$>7]FkvZaƬdMgjWWWxx>Jؖ@ժbA!|7n a)Z[ 'i==~q(Q7Btsj'}+W.+W""<KB֭8"?rJ ۠wgZa&fS{ΓЬZ*M.ժ#G$-R4w _|wk;>>ݟQZ5.߇|>|,3iMd\)ݳh Q#i9;;㩗d89r!(Gq=Qw?U˕2}zu)ydtDW=Bk_t֪Yh,VLƻw3'AZz5]hڣv]<}ꅐP͵^+VhH&,M1Y@O][sKkIԯ_<sqqŵ9thذZvhMFz)J*i[m%w$sO{dȖϸ_9}Ccbb(}P;}-`߮ [kRI$D@"# rv;͏)qZhԱlkC>bbqtx|%G'6Bӟ[ cMW|oPB?AE^73mλ?^6uCAX rjW:9]7qd#$S?nΉu)Nd@Mt%Rx;vQ=^uoĈ@!?l>e.'YaD38>uJ+Inűv_#CYfFWqlgcp՘.7lt% [W|n"R1wp|>gЕ֩"Iraf3DU?45zSo>)o6 2ghZ~rBD8t#n @0oGn +MƗIHk<괎hl3#<u*O'"bl`K\3I-ՌJ<)|t57(^dbQ#08rprݚ$.~D\`fIJͩ]xRZI] WQa]5FUnkq!<~]Mq2EѬ30e4-{^,rF߾}0olQrTڴq=4iٴy fQO]xoQ&;zJe]tWg-y\^6O;w %٦` )~Fuq | lKW}iKݨ)c׬]9sS~,'c>ύHamZDԬ]o3oU֨yi&o5#RhC@"_ ,345䣋6iz GĤb<ODR~!@$ilވF4&Dɇ}PtcV.Wquk39s<olU_K#wJO)%C'rAN6w푬 #"G"ußΝ:j%t#3@[{:ϒ$C$_Kre/]QĹcj5,'AtM2 'O:ˉmW t;v<^~'b1]=g>F{5I3Z^Y`"^kֽ'Ͽ~ :t<y"C~^FaM<8;OKBs<o!.&|CEyZ|7uֿWc0<KUQmx 6ĬeD@" H$)$O7}1܅W>4?o,S4zWUwqm%b~1wvKvk<.j}SNv62w'6 * "oއcY4vJsM5TO܄_1 }<n{ 2mw?P[2eᕈ{4/2Q# ƺ9AXʱ4lQ}Ki~صߚBViUc0ͬ\LK׳^DR5u,GV j;8&Jrb}_12' P֎}eZ9 J|:Ҧ<NsM!ڠ'Rgz�f3'(w/.N->lkXQcGq8/@| ZuQPqvsah{NP91 嶟lfm(2.:3\г8�˃P6L?CD iƿ a5Hj<55nZ9"<"Z+^n8rm7a¶Fg'ʼnWĴ.."b%JϓN>6ڡ=a_˱ ʌ|yqbm7|wdYߚ"6R^YڢkinZF 6y> pG*a5[uin 5~~{y�֛:f]y 4Ռ斮 "Qգ]9kp/Cy|m}z:_O]9HžA_4/u/I6o"zI"H;6)1|J1~rԛnԗ \ȭ<ڹk7o0rp'&$H򕫼M__::U{C�f"!펭۶Qkb(]{E޿AjL!�CUX1l߱S5D|>f(׼O իW=Vi/Ν4D;WӼ"iC2MZ?"]^Bf-6dg-5.c9%ꠣ0GH,Z/tGZa{'l F$/1~8]1W6Wtp#K.ÚifD0w Kzvtl !zZLV&i@Zz._ "uWZ'Dk/iժ]WKu<e˞ U]]#D_6hMs 3oE,>u$|ڹsGDP{&1X-aF1(Fȑ-R}Γ  t᎝uKiϟ" -.sxܨQ#SZڵAי:Ο�j-7] 3M2J'’cJ3rz 8Nt_=j$s&`JDi]i:upI$_ÊМ1mvtTtV[/5*o3dՁ>VކߥgJVB91(X1 (Yolkg<%~oi~WqcVeju H$D࿅�1'G�3xmĥ%,&ltN|Vq˸Vsy_S)reEE4'3<ʻ"{~u%-:y2Wz>gKn峍ħ륧6!{VבG !6?quJ<[2[}GTiёKLbQHlVXbp6 Hd/O2<[N H OZ["7 m(P['޼'F2o6nR]ϔ?]Ph"P;7:7?ŏ_yœ/rX<NvuÂYܝk5.s"ɦ&q ^z>yAƴyM+(MQyS=Q)}o<_OX<մCyhL!,p~QV)tS9QJH3\D┶* _}Ck,TʨZH*mwaNPZݓ/&etѿ'j?uX$iL^I08zY"=Gz.󑞓)=WՁm&,吸e|l"3l.ixQF@4efɔt0TML3E+ܓ6z\T{y#*xF)_zU\MIHG}zCrmJ`ܔz 'L}`D?׶]Gw&L-۔|f>,q<}QJ:EiȜ9{N+OG6i-P]3fU}_<}O+o=:+kr-:aFbx&3S $ѣsk٦6E֦`sr:mذ칟N 6#d 6C8P,hc:扙}Tj`utNq<w0?%ɒ,5;wջo7ou`"%]7ByYizn<XO=wݿĵvzYr=iU` #{1Xu+yo{R)k搑M\=JةA=gEJS8ӤV+WP`<}|} 3gԣ~N[ 0N_P~}$z|~%;n.3Xc4O^&ރ D@" e9"{vۡIGdץ'?~ap>H$5)EDQ";xRW^ԝUڥtAXtMIO)B/ކ:N`J.k۠:6^×N#h3u͛^cF6&djb;>e^"hhvo6TDH"SD0W&o35D&?OW59Us2V5E8 \oV "p=l8qĚ QE_A*%"))梌}߶K$+G5%,%S'"Gi=[SJ REF (` %zMHWBUn"l_JPkX&.uɺ65O S%7?纥D.Q?KMݏEؙcq"6hBN]/ڬd ]Tg} S%ЦبS�J3"bm򔩊mRni,lPĦ1So23Dm3g&Woګe)"(?n۶cK1sx<}ʋ"]i7dё6ŜI"̅ _7| }"[Etf:q="E%WD?!bc]ׯk?OhbsGMCƣ=y'2m4e|q � N`)2Dxu1 *yPO u81DzO> {zӂJ_LCشiꉋkKZw=ys=G|6; *ww.ŭSH-PB򯗺�-/)Ph@w  |s~+In;ϓvɾ?q_m-Ebm˟<{?oo[,'_u'F#  x8$xlγ?cl\g*3=3> .^=2HL='7pr]xU?2.} f:($ ե6bn6&yU, 2:OƕϣP:ܗafrz\knKߢR8G6,p{i2?VFlOT6}'= tHXWJpi(U[M۸ mύP}THb%&~n/rCMRP #_ۚ{$lZsfJguѦs(չ+}$vovׅt2݆H$1$I%{v@ ԪdE,k9J|.yoj6OG%\pHWSLL&p̬:h۵ NE8\) WqčqExM(PO'3O:o8{Pũݸ.xC;;̽d{Η fmo -H!6U*ܫ⣝P%$9GբC~KWz%=\5krCu+Znj^'W*V..,)sTLH&}i+l|XݞuPU/pzwK5GfkLt$6%֜8'=yA9 $2>Ke%űG0[J],I\/nȾKݧGOx. z(]T}:>7}$_ƍķ8W6j%V`y%nڵ;Ts - e!u؛byIP ѳW2Z0E먬ot,%K`V}Le7|+ׅ5jTǬӝTAX@VnVR!\ǵ{uju}Ĝ.<s,jשȸ9sQYYs=Ϫ8Gܻ BqY;wwhݖ vfMEƸ.ӏ!1bbd.BO1^][HiOܖ7 ƍխ==V;f46}iTVSOH2ڷ)v}M6c8mߪ:Me^2<!}s{v/1u2 ^}u"'LT7_;܅4~s]=I**O }cL_S\Knݶ kVgBJq)1IYvWgtUL ZJhq_PIܼyC;u~g*Jjvw%(q_ieyߗ{gƎQ¡\ h?w $@$@$@ ]5u$Vg+|RDy?YuAβ9}b&p{g &T!qZjc5] =`VHܩz6BՐ_pqFVΩ~bݹqq潝snf{31:</guܧM"CtK˓ 1doZ(?c4!IDI~YU'dĊ)61\=թ*<< 1g�OueZmtIbwE%!ebEmW~'#Oan (F8~Do})BaJbxp~ޤ/W;u5Xl{s6ׂwDuܹ~]7jQN9I&֚9ڨEL)eg>a^=iM+/u % y->J@͘]8͝}ŗ3;WYf =[(fEѴm>sǨKs/ p%^~H ]&Fœe=PW=J9Znyov5G$W֭[y>xw<MoÇc韋8s?[2hyM˵'O%JǙvZƻb3~>|$L0%a7IpxA:^};Gbؓ]qcU]'ӱx$e`oO0yzmكk:6&.؅,3$B1fS:k.m޴ݚqmu2B'|޽rZRYF_: My=9MEU6C%!AY5[٣\횢e%Rzէ.]z\LB.?d-clհOb|6ing]Iˡ{UDrF{"(z L Q1P ̓� � CN0LYKF,zfɾ SW_@f Om9i'zj%n5w?A\߳\[NZk]N_^_m/*+3{|5k3jg埧Oq5Tو/]e3Tظ. y7zHf/Jdpwt}lx9(榎;1&˵as|d| kwhI}t[O4z*P}I:{>Ga\ ;\8^z|ݚybƕ?IZ}*Inq&.']ImeѯB=dsY0.]rfۜ"_4~cיN~/Xlf_ /G\5oծ Z|9+ e&wL#n\bK&%u=8oƍҧ~n iܤ^ø31KI=5I|$٣(̵*v](<queN*dy>θ.L\ o /٣&ޚY/cƌkɽ)I)ًu#GxmjVk?sRLDqmlF+( b\LU .-vOs=yf;S3VFӴK1{ֽ+e˭{n=n^?9*dbt{>4˯9]FteǟuP:ޓ&ׯG鳻L5׷3L٘\1Q.w&vq̽sNMe[蕻=R^wٞ=eWĴ&Y(<ߐޞb{J   $O�I xnn^-Ym䖈[cg}Dj\Q.tf'Ą 8HOs*k/ko&#d2U%>O|h6w`47Byaqf8W-_sՄqM?ܖ랒4|b<սqNv %vE'F(2cb{TntL3#RL{iwbc40]vA46ٚbc@o.hdܗ5(1 m1 ]2ob\>L]rsgnFoӁAE2' #6urMdNhk|eSܳ'@買|tB<3م)3O\qy&E'yhO;ۛѝS/]7bCtm9yy斘] VYќ}v~oE@z" r6ެy\q٧7Df L5eڤ˱P\'޳ r]i]]OYψϲǨ t%)*Nď$ş ]ʚк~~;qYV}|YCxҿ1_<q#R3k>MVϘ~ 䋣 "_87{OĝI) 3~HĒ ,gxdJ   �zM#FZgI_{|8gC|?C?z-5oIߨseo9b/Us[~܄%BcI'^pn-i]F$ wB ]w#Y(9ťN,YCrjIJJ͞4Y{fSe8\V]Bg"tĪM8;0bj\[WARDLs_%tZDmm! {A,e 6޳@ç{tX_{w˽)!6[ Onֺt?9gyHE*> #LUy$<ҥX[uzC7g9-o%!fySs6˪;{#68 c!dIl~q5kҲ 4k&q׮]ֵq} } .tFH#Fײ[y{CiwBaƞĂŬ?iW�ܡ>"6ysTtXSJtgڴn0U.UzPBWlSl-q'h"l_`] ]Oy{vKnt gpp&Oe5 쟿/xT1RqW]v%}K_Lm6 � � KB#r.EuXu͖Mm4)5$h<z*toI)9oXu[V`"r~% 9xZk^YaW"Sk暈ʄy#t\5Ăˤۖ[0 M<~i~,6a"aJ&unBmy0-ZWl2c{@jQ,a8HgNް_.t\ouU ,Eo݋?h\{qj)o- w*e.Go.bћ;`_כ|\ٿG'1ٴ\&rO-tm\s`QkkWD !taXpYҞp5>7}N=͘kXPsb~kj uNrO cauO1fBl˘RB]vD]ƴ~LqDhȏ2“JfѴE't?'B!}-F9"44S7uJ9z#6E:|X�U7>a"J'Cf/庫x:{1qk׿�kBeIޞdNq;'VNr}*vv;)A,\ӑGիVYk"xJ~~BX;)1_p,{O4l{ӧϰzk4⊫݃d3Fؐ& nƌhyH:ǣ¬u2" e[qy=tsF$‚4|K1{J%FL׫X69JIv믿GW+RGeU"lx {#(bOb #Dc"   !L~=axz.F4)lN fsG3=jN]4UVnG8䀮9ݰ84{D]ʩ7!oy&~?Wܸz :ҁWD6l2[߄o.TS@I[O|u?h`x5bdaqi=W\zt>Oګ#3u9s_$KsH))>мr>qC[b+'έtݱ;]Bq9(KdȘC;:K=lFltq(ZkSrڍr!mX]*!e~&/L]qTTxCxmV2 ]47>U׌lak[6 N-s1s>oqlZV]F6(τAcf%uY W%ZG)S:(vXUy C*Yp=oך1j7eد,sCqNG Qçoc;eޗi+8&P\f(¹0oȕ7Ӿ|Z:̽|GdˑZUܶkAUGw}/Nʋ۷kb:ږ, #W}l,f,\{|rRr\dO]/] u9<69g#}!O SNu-|N>H`imE z-Ոr59R'dxs\{ё~!<45 qNrxw݃)~ӡ6=硾܁Ux=sC[o/8ϓ'6m\Gzi >ӏ멞nR, s})<\E(]4vG'|rXp; ŬrQByȞ=;T\]rr+VQOhUXI+W,C̙zkPL%K@)rѮ][^ :x>VPˆ.WXR:^CkpVxsN*N Kk'O̙3\Z+W{ Ç֭[íYz oۺ٩m̘qPuT=#ЪUKq-}.$YGgOu^RK/oKV'/EoIܺu +WN=FYJj5/S4]|Y % p䞭V*R$O]z7W^`E?jU+rXJ=V8zyOI֔׭d|uWW{J8GӤMkΊxbVyӦTo^v%TR]׭^7)qu!(ޠA} (aR}HTtk:=٭nOJ0ƯENwX;7|%6Q>?~_%X3?M7q:-+j=^ >__Z>N*>y܎L2Yc$c>$8=%y](z ŋcn/zɓ{]p;k@,ito6b!8>S%?0 ?^ \HHH  ]#~?~uWo[${6D5i'jF$#b׎۰z qҖ@&V�2ӝw9ؿ VXV49|;6UnG ;yEZ@B*N[B0w"ˋ+YkܾǙȇ1)f@Gaհ޺߳/ u֘~. Gsg`I|SyIyT\(<Wx pRvw[1˽ZxJxmklĊśj-w#׼~lpAԩMG]SQ>8!ʻb{y/"'fϾ\"b̧|:$7>2DDH2& $I_\ y; I扪'7bma}4kOsBׯJ\X, -_8.O6Y!_ wۛO* m:|"J o9z%[*,UC'6ݓ:zh7ui4nW׉8;-NEv>t{Sݬ.Ir~j AW@LJ'3A <xf#}(.1yym!Dl6/z+WnGº"Ujgq֌ՖG=BWG(<D<-Es);%*Tk׬LjҸodq<rix!we-Q/Էѡcg@`kFyᦩ>}9*W똱?PoE֬e gρ?ӽ{IV'>*Tbcz`ޜ]0UըQCL0NGi#GdO ]Ҿq&%d~Lo˖-= C'6I!ba[!Csk@^ $NiڶA/8>nܸ>kݡCТEs6S!b}B>Ww05wlTR䖏˽g.~S{PJN -;uP"+zck+~Iy{ł~ILʺϣ%sU czpZ,>wqա};-e̘ѩ^0Lz7uѳ}=;-`1 |C6bz2b{/`(wNCEXUW.L2M9S'AY\:us޽b}\'_ƉX,&':ws&~;:pQ=x砼~MܾsG g{.~)gPm`;}',� � � <(t=5$UȁKPBnLCkR!CLZB~'CpudȐ/#2*aL,Ia!aj!pX032t֞7s܏>aq?e˃ޏ%=g��@�IDATC'\7EYj)Md""D@t*R'>sc(hea *)E(nnMy`:mu*@&'-/6V Ϟck"ya-2foP7zl_}@p^F@<i~)% ]BvyW/7qM "/>bJRq"xhV㮳6Eg+;vhC'Nܹʚ/j$(x#bIsQܹ{9s@|ysjrOVR._Pޔq$IDZJQnpq\tQ[ΕyQ_jφ{w/o^5冨z%Bxm%STsUry R[%z|1 3#vl^Oq=_jڿ~݉5خ'_׻dؼohԩ֭h=:=yN>9s/ De<α~PqD%xNI!/0yDu$@$@$@  ]˕y� � "p^~]{:6XLQoIҴvZQwf @#*t%I ؓ6iZaNGh"-s湑� � � (tyKHHH4qiyOY>ѳΤ=.RG*7boOz~aÆڿ&Ln$^֟K:!yPI'@롿<L@%+Ų;7FwM_NaCy$\ɔ&    H"Y0G$@$@$&<T,cyՉX-E13A(Y2C$(PJx�-s;婐� � � � Ė�c  x H,ub_? SdLh2/JӉ%~|'ʔ):uj"Q` @R%pA̙;3fĀ'I 8z(6n܄}AqdH%JGÆ T/DOnHHHH!@UIHHHHHHHHHHHIBW<r8 � � � � � � � � � � � CBÝ� � � � � � � � � � � � ē@WDs'            NBGIHHHHHHHHHHH�9HHHHHHHHHHHH8 ]9$           H"            x(t=p\HHHHHHHHHHHH !PJ 0ey 09Ž[N'$sgE"~'NN<|R8ձ@$@$@$@$@$@$@$@$@$@$@(toZQ;kSpRnjřMq]d-fL2 g6po5QfNu,� � � � � � � � � � + ]D]&*/ixdqރҠ _ kSfJ*BK=s||]9p >[x\Nqn;w wFk0 ]HHHHHHHHHH"@BfB$)Yw[>^­J';ș~Fˠz͋ p`nxZϜXZŕ~Wދl10h)'Q{� � � � � � � � � � (m*tɶĪyV޺B{]=z3*ԛh/`Е`(9 � � � � � � � � � } @>@˔.3OB[w]+Qf 18v#wT(ReJ3j$ĶK{#u=�쟺 E8͙z~HR׉{K76Wd-é)컀!MtV>v:֢+P.QuisGrH<5ﭐZD)2urwc譚ϹF=٭'pD(|R m U-3ɵr𒮻p[,zʩ_ak'Czf'l=g - bkuu;sjdS RfH4(Ь:ճ@$@$@$@$@$@$@$@$@$@$ PJ$/:K_뮈x Aq@=!ٓo[g,i;)Sj'7*j5s6,oEml-v|d;^F2HIWBUެkqZo.5i<ѯ6gzv9"f{J>U Y|1]'ERG]+Gmu;QVQ[irU7-PĪ`,4] @BY܆KѨ9Ǜ]Ņntrgdjd (t%Sz3C$@$@$@$@$@$@$@$@$@$TPJ$W*&l3]7^Sn]ǵ2U�=c0sUJ^+SZ'px>m#kk(J?[tG^,1)483-}Z 6wăzr[d.ͩVa"n^�7\Ůᛵ! ڪ}&ING&"J!EZUiK裷u]/aD6t򒓕kw?Xc䮥,ҧRUw[5?ytDžqra]|IRQcd7.bRĽL/?BY]E[u:1׺ȶ(ջS)x+tݎ oo\Eڔ½[wNUݔ6CȔ8c$W<_%,3jIHHHHHHHHH ]%%ɵNk</Le^9*l_ru6ܼpCAQ}3"YV*،'ƺE1hlDD*y#tPgizPtW\¬tɄ(޹· ρi84gpY)JwVXdb{\s6Iv n =gJ*{:uqƙX8S)E~W3;݀A|c+NSssgNTS{Yt(kG]6-`[V:vO.dI"S(~<� � � � � � � � � � $>5IuWqpz�ݦ-k̩i ߞu䩓j(h jZmdb#tU}iuH?ǴG b.e\+TO6*ٽra]bv߇w8s{ekâJ^'׵Aq(’k+cV<=b~I*nzzvõ:.'Ӿo.q({}>)}SX{I{;IA\Z O~SrW HmV� � � � � � � � � � $ e�uW88{>#qeWo5eT+lNT%ǕS:<u/.~/nDzvH.jW]L\.գ΁.hor_ <C*ٞq-K#ڠӕzSdfzbϛLQL=GUn-#S1Z0FSvzM�~3X]7B׆7"pڊH).%e _7\C_ŵ僗tkx2E          D@BW"OB7V\/xrP[:Xq緪<\?ci�gU%sl~oFctGD:ߴj)]oDfShƵsp1̵cY8uTJ̪vc/[LJu2?k_^-z{5JW_5/.trc)v5OK\pvIzcB7aˇt*q3;F2/]z,v50J2+84{rgÊaG#JV� � � � � � � � � @$@+\W[+..)w{_Z).uXDg)8~*XqΤ ]b!5=ێ<MrL+pyisQ%1&+"\9J牮ryhN MscYFs*7JW+mN돚 5iI~i9R)ikss!VqZLWqfxhb-[LoeOıeQg4îs6.ُu8[ ˽XźCTL_IHHHHHHHHH ]:X]}%XrB=ߩH$[Yh%IforʋXtfq|f-r% -h: 綞D! [R켱><],9uҞsQcTT4nubt8b7b+ĭRJX41ID=VSkJ^,Շk^0BzmgM^\%e2n %Oz~(7]ooUWe䮩~I8aHHHHHHHHHH qЕ8bo]CM ?6FTltC$ޑbWmx/R1:~S:zODSjqumu0>_ ukڬ \E>y E.++V .i+Ԣ<[OJw~8WDDD u4sXn-S7k2Ǽ9Q`hѲ}Y+봠m卛Gk3cQɺIR0sln lNݱSokʭkEhpfVEWKˊv(;vu+-:g`r(Ǟ^4§YPe*sS# � � � � � � � � � @#@+\C@g:WV^tlgOWnۿG7rZ[w.5}P/Mj3b$$Cq<Ur{9)7N!MtNu &ƗdM&tDEܺRbKURa@M_c"1ObOY%~alPI޽{U3]Xqc1{ǟ+wxkFj!LTI^LCWW%ƷADJ9"mJ-�7w kTRs0b#G{#ۢDnҽ[0QX˛њF\C㎕{-b[zW=53$@$@$@$@$@$@$@$@$@$@�D}y\Sk%Iߋ~([ܸ}N uKbie**3wo^)3BMRH7u/ֱ  Ƙ bzIgYOD2JĨ65^ۉ;I"TgʁVܭPFepJrxRt>)ܭIm%t%\e}ѹ4X3 h+Ykѹ9V>;OY VrɒuPs9ޞ947UnϽz[Z&',zn2+SgKG.nvtq5*kfHHHHHHHHHH< ]I޸5 >o"/գW{ĭ80ce;o规\t-莂͊;GW{~BAHRګ=6 Zj [Mı"KLߨ gLC~> 9sF^a訦®D I=s8F:lh5;]ߨcEv-W1:WlBdTV1jXi&"k{bE%zrye3:Kr?W � � � � � � � � � KB{mc}fwµE ׵S>_&.֓y1M*mmsҒʋݺxzsL+=mP"X/Vs{nwWp5ܻ}O1Ȁ ;M}s[ObAIS׭/!oģUD+/ᖲחr^ǒJ$@$@$@$@$@$@$@$@$@$HPJ$QۆYmeTNG AWDF1mBzc5Aw^^<u ҧ\HHHHHHHHHH!@Љ4O=PG)hz*5˓!l1qCYdݻuW~Ya/>Aqx>#5wj'          (tyE`JbE$ *y?#wkʯFXefHHHHHHHHHHH PJh/ZoԱ2Ɋ|^٢ƤC x^\qEIg) � � � � � � � � � @$@+I^6nHHHHHHHHHHHHB            $IBWl4 � � � � � � � � � � � �.$@$@$@$@$@$@$@$@$@$@$@$@I�$yٸi            d* � � � � � � � � � � � � $5~IHHHHHHHHHHH4 ]HHHHHHHHHHHH$ ]Iq$@$@$@$@$@$@$@$@$@$@$@$@x� � � � � � � � � � � � $IeIHHHHHHHHHHH(t            H(t%M� � � � � � � � � � � � P=@$@$@$@$@$@$@$@$@$@$@$@$$ PJ&           o~:oi,� � � � � � � � � � � @B|/\ jn^eP N놅?Gqvd*D"Ypvi Y2䭑|!M]u"ENs@$@$@$@$@$@$@$@$@$@$@$@�E:uĪKMƍ/"<BXw`]H1 j}ZMEPN2 ?ouoY Sg=Gk³tq,� � � � � � � � � � � &@~bظ053״c6X)X zN\yxUH!v#tŤcpu`Bbuv*RZ̐� � � � � � � � � � � "@~ވ]ފ\"pde0Pwv|U] 귏܂,%鼸2_qee.i #+?gYY1U � � � � � � � � � � � $4 ] M40&WO^e%Nv|;OZDv8pVAq7 [5uvIbvkNm=e5S1(׆E*e!D$@$@$@$@$@$@$@$@$@$@$@ IBWBLZ\w7;#} lxoۣsU]yӚNuQ ]k]m QR%$@$@$@$@$@$@$@$@$@$@$@$_K0{ra%۰ ]YeE~UQgd*9]޻u_L?u{4&Tl;S<,̐� � � � � � � � � � � $  ] 3p1/\bMBś#ECg*÷ciLҪי`:iVWZ֩Կ'[q.*ک:N_[j(ѮGN @$@$@$@$@$@$@$@$@$@$@$@$@+TwpۃPU{PM?~'p.q**+݂HL)5R TMiު?h^2Kم7m'.9`I+=*XMxV           Hhh'. c1,$ {g큟unYk\sKl\Ll+G.c\QV .i+Ѧ$zXI#UL$@$@$@$@$@$@$@$@$@$@$@$p_ P躯x䧷.e7zReL7C J\5|Ibm¢0BŽ0jk*fM � � � � � � � � � � � $  ] 3Lum]*fI/)&2Ȅ].)׈'PDIA-ÌG           KB׃xWSq T\絵Vܯ*~=^{pH:y=HHHHHHHHHHH"@둺ޝݰH&|x!h1E _}˻ ؋HHHHHHHHHHH� ]�rRX"^%Oե/,α~(Ѧ$.            P'u?9wQgd+a@lrC:ٮ           G�G}34o&25nds$@$@$@$@$@$@$@$@$@$@$@$PJ!1l!%YukH15Ɂb-K g\a � � � � � � � � � � � 8儃            BBWRR' � � � � � � � � � � �  ]N8X            H*(t%+}� � � � � � � � � � � � 8儃            BBWRR' � � � � � � � � � � �  ]N8X            H*(t%+}� � � � � � � � � � � � 8儃            BBWRR' � � � � � � � � � � �  ]N8X            H*(t%+}Wn2%qg � � � � � � � � � � @ @+q\?$p5LhmOonk凰}z~u `ϔ]:B@PAĝzwiS'ʑȵ`"         LBg.}5ל539G R͟LМe>zh:/m:?H*""xF/+p ~\?t_})}ZN_]m#躷S ?}ư@$@$@$@$@$@$@$@$@$@$IBW$ H@!n_ ]S @AmQZDunp{:-ڽQIHHHHHHHHH FbDt; ڏ/!N'б}tl6Nc ]@bЕ_a? � � � � � � � � � $ ] 2Q4b_舻+rݼpS 3T(3 PddɐF>$I4&>+qfF\8N#Sb(P)r^ ]w޹}Lf\=sDϙxel*Fƅ~8g'y dY*7DNQ~$w&ȏ\%!&*nV(y_ׅA{ `e ӠL̨Xv$O~MwQxzʛiǏ\7=gj/Q]v;\p[5:Ȫ-IWiPZkRA4QVvo_eUjdCz9%昸DܶvXjVM12]%3NPz=7qfl̯2!OE9z R3+$@$@$@$@$@$@$@$@$@$\{.oӤqjPXw`]H1 j}ZMEPN2 ?ouoY8ǵd,6 {wݦ(R#Z|4ǭTx#tݹyuΣ03XY/4zsGjg=ph U(۾?:ҵ{zu>R|%crXUs'_ ݅_sCy0|cȑvj ;aT3K8wХw=VBТr~ :u Omo$ӠYU8bcI[(fdjWK'Ld'D>E cڏ_ߡlDU<7%Bα~X"d͎*+1"Lg � � � � � � � � � <j(t=W<6. cku5-l !!͂u t;[ܾz[ `ޮRa8?<oI(k/e{ztx'!KGvЪa=ֺo[W/aRH* iE!E8, 4C01k7RT!ULtxDMw} r?_vE1O1:Cg)+=5f[qb1]&[j\OV=B7atװwwaİɂ '_ǘ—XR-t ]φazX\}֔zfD' 6e.S!VpuKk!?&ίgIv 88rÜ-1 YM_m}ߺ.Rsn+ƹ]gQMIt]ۡ1ʲˣr(ԨHZDy$         LBWb: 7o.oE{82J;;ڥXqU~*UXGnWK_A֒t^\8ʲJƥ3ڣW}>[(i?j:*ud܎]woઙ(Ѥ:ey,$Y,܁p~Vd+Z]:ۙnRǭ>ߔϴçA Y#ەsQdًU>5{X2wv-T5_7 x 2RYnNM_ Gk&F]zM>-hHp1}z͞V-p.nVSM 8h^;.RZ,+*X {UD| '!         DLBW"8 \ɫ=~l)٣oRlekUS;3)&Է Zk/UV4l=ּB6 ['5ҫ8VM]y~6}1ݥۄR} Tܰ [ bG>sl?-tYpI[E|Jt]iRSirOXpeJ zT_?_]s4F톹Sm"u|!_TīC) ] LKZW. nAKw.JJt.ڬ8yfy         H(t%G%vyce21mZ<h==*=Wũѕ1d]Ba %r5q`t\;s 7.ywֱ5 k˹FFݑrCd-\V :2ԞXPs@6#Q*Rtg#܋a*>WYҿۺcWC]霅OmƼiG$tbeyl(!:7S@923$@$@$@$@$@$@$@$@$@$]Ǔ CoD..tJ*.PP(WwNnrQoiL6F%5u\8c9-MPyui&)t9]}lJjbvK�K?Ӑ*}f|~ʴ-L9n&h(kUT93:A:ux�!/oQѤU^Lۊ#ڋ/Bb#t/.On{GpRCZ;+2.[$@$@$@$@$@$@$@$@$@ ]t/\ X]crYh:޼x}\T+hPX)ӧu&vuj?IVkKkkpv&<GEc(x#t-gm i(xɒAĬm\.-ػx,Nl_2T>h3N `ܱRy^z8jgeRgNF_6Kmbnܘ[? Y|E't}N>]z+:Y|ma}LLBqaige_=5�~Bbw$DUh=ijy$         �zuFƅᐷt)g+'PM?~UzE%z[Ps<aSjƚ| Oً]f)BZËطd2)Sڷu]uG<3}*u{}R.~ᢱWˑNvb՗�$O}FЌ~$64NU]!{J:o3:ʘ o91?GvYl߆GB1q~=S⟿*7JYcj]K6CQ[-_xvX{2gMVlI<JI|6n{7R:?4CfkW5/tPn@1qN ]&,U@&kS# � � � � � � � � � <(t=ԗ7ӱ}ۨ;yqV*F_ FxיwCrB]`ݏ̚1g{PAg4Cp3Ej{}>Eէujk=oF蒎Ƿ,ßc݉lE+|tc^ ݏƥjLvdVe,2v!i͞V-d) Gp\]|+7cΔ3$>\D%tI?#6M_ *ɾQkCwe(a.}DJ2?vvRTPU/.G%tub%HRW{1=Yjb{,<gp         Hz(t%khw|ZۥЙm0XC'U*rmgOB]wo' ,v%ۿHyk.?ݪsͬ{jL.S 6qR͠9nŚU,&zd>up;|fYk>{ψ@:'gm4qWCj"ϭ{Eym`+,)}|ndȘs4AY9⨗A ]--G_Zu*OR"Ot.t͈k Woįqv@\VPꭄ Q7FϨAnĪ+!Q&i}$2frqq1W뇥/,ByQEţ+ӵ$ � � � � � � � � � <(t=W>wY˭yHgK%/`j7,+Hi`$,-.i7"]T2*"2JJsn{'[.7]ݜsn{ g\yyW%4{vo`kv)) +tώ)|6ԉJ0 l]o> UwIP:un_S#W?if ҲƫG lyteC 'JdU9lX%7[o- d- i/s/m33r -{ذh^:\\Az}ݸ=luI%NeXеb-yro%:3sz,<ƒ.[fw:t[7j_Ii:dާTlPeY_m)aguIW Yʂ{*576+}̅g]h� � � � �t;;:f_*tロ4zXmy /Kbl҉~٣:^{ĭXf/Ө"ʣ/Od(ʜ2Sw/jgKڷyEڞؽxc6gt7jRsu*'6LM#l<ˆtч &-5A^ztzs=3gLaYͲ^&93A:o w }^7 Wig(wmK.-[;FBudAW\vr:{Wo=֙ _6{dkf1:jg~}^۬xgu`9 � � � � �ܹѫ M Mf&S˾E=9Wgp]>Vf51D Wf9& ;Ө޾JLN=RF_Xue&:m?gf 6&[w^fYcmR(zT`(WYIgfJHJfgna=.>%/Ã.< pI2^թozp � � � � �/=:h53zCizN7A7 � � � � �WKjr/o٦=RYЁ[nOs}@]m? � � � � о4tp{AkdMXܺRF"B]@�@�@�@�@�$@Ձ>VG?E*WJSGj e_{\K24@�L)��sIDAT@�@�@�@�7]n� � � � � � �A矀 � � � � � � rF@�@�@�@�@�@�< �@�@�@�@�@�@�A5 � � � � � �x.@'`� � � � � � �nܨ@�@�@�@�@�@s.?@�@�@�@�@�@�p#@F> � � � � � � VvƌYYM����IENDB`���������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/accessibility-div-example.png�����������������������������������0000664�0000000�0000000�00000356532�14332737457�0025156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����B��� r�� iCCPICC Profile��HTY}$ХޑN�)E%$c *vD"ʀ(8:2ĂA@2(`~t{;ww}Bg Y"�(*ЇD?`Yl P޿w4ߴ)sb6�P2ʩ1;t" �H7\"N0*"@oMpMp�vE Xt�ڨNGl+(O8(A*;{E t Sə]TY~+]S}M/fߖ%]d(( 1f. 5,|IIb-Mf/Dv6+,tLY 3fbi-ݕ&eL3K4s43VqiDžM83:d&WIds>3z/);+zg0frdq~31xGv0+B 9Ѳ9s6B6 Vp4`'.LHLOIh uqiLƊfoko[DNAH}'Ag&:g|I4yf|f�ɂ-q$�T& X{ ܁7 ĀD�dXV�`'(`8ept�Aw` <D&C=D<!((@Rh*2 ~NA硫Ptꇆ'ɰ a:̀Cx>/s|x3\ WG<|(9D G:⋄#IH"BV!H R!HrC^ 18 CXc1AX  S9i\cF0_6eb%l �$;}p8\.[ۄۃǵpQ<{,_ߍ???z{B�! J g ݄1"јF 'rˈ[AIdJ Ő2HkI:%R/鍜\_n\1+rrd /9,%o&$P(7%"lP.PQ>Sm /  % 'n(P$*(*W)+R8DUS WVڤtXҐ2^D_O�R}l:~% NTRrTCeDUYQ5Nuj>5DDEmO: uF:n45=4i45ja,"hպb,YYϺ k[hGi/ާݮ=#٭sA煮nݳzT=O=szh4-VJHҗWw<4$ w5ZaTktߘhL72n3~objodTÔikZkkF12[lVmvgN74ci[8Y,-nX–Ζ|=]VX+W+Uk5:ǺֺF&&ϦlIn6v;e`<flr[�M-{:Q:mpju,rsv1rIqpCWG7ѯb]}\Wv&q;{a9ss0`yTyy<S<byU{=6x~0gd00^|Nu]u+? 0H  t \ td3k#.+/CCBZBsnf&k #L#G,|e"-0p-1bbq qq5qf'LOlJ'%H?odM/uւg*,d-<MO9Ϊf2S+RGؾ]o0׃[}V6=}+22*3ggϊϪ&dd( 2.ZKh),-v[s(Dt@ 狛$*(jIKs<ss>,[rbRe6.{rr+֮_XY ZuՃkZKZ<ۼ⼷5X@@Tpg0?qƯkEE%E77]7meVVۼ*V*->w{ڎow.yıritW_ihin[w.WhWlx{޺JʢO?[XPmR]/gߓq~\s@@с/EXRSsXZVZ;|$HQMuuUjE1grxuZqzjX0kkJl:|ٽo6<-gIgώ=7"lyq>@.ܺyRȥ+._hcqUѯ5^w~wOv8w4p5lW~7/b޺u;;wr˺~kz<~T}}gG?~0xσO(OJ=:=0l޳c/ R_}$adMo4|u4bѻwc ?h~8ScK>?~15kx%bMJ]pZ�Z8�j'�ySZzҠ)?I?ޞ4g�PO d=�e�֡y�@v+d&NsEFuTeX}h�4٢yS*clJ`: л8g���eXIfMM�*������������������J�������R(�������i�������Z������������������������������������B����ASCII���Screenshot4b��� pHYs��%��%IR$��iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"> <exif:UserComment>Screenshot</exif:UserComment> <exif:PixelXDimension>1722</exif:PixelXDimension> <exif:PixelYDimension>322</exif:PixelYDimension> <tiff:ResolutionUnit>2</tiff:ResolutionUnit> <tiff:XResolution>144/1</tiff:XResolution> <tiff:YResolution>144/1</tiff:YResolution> <tiff:Orientation>1</tiff:Orientation> </rdf:Description> </rdf:RDF> </x:xmpmeta> 4��@�IDATx]|E@ z =z "(""vSQ;Ez%$H! $7ZB{/k"&F`F`F`F`F`F`F:AӲr7F`F`F`F`F`F`eF`F`F`F`F`F`u)'#0�#0�#0�#0�#0�#0 貁�#0�#0�#0�#0�#0�#0 ^`F`F`F`F`F`FftF`F`F`F`F`F`ft]/w0�#0�#0�#0�#0�#0�#`�3l�#0�#0�#0�#0�#0�#0�3;dF`F`F`F`F`FA]6pp`F`F`F`F`F`FzAz(BJeκd RA"6q`F`F`F`F`F`FS)rn;w,,칗hkX9qGoG_ak9a×OQؿlX<")=0o/t6 UnSmܴTyَzB]_TL:}KڻvGܥݨ[ZyO|0�#0�#0�#0�#0u�3ve_ζ}znr|(3%$*]Dv6=).?s}tǽL>DIITVK2g.h|;`r%_sl#-5Kf{'Oz4`F`F`F`F`ft]TTy% Zk]j>);Zx r.F [STta'8`F`F`F`F`FfA`tG|=c@cmͫB]׍cb[f/>My^F`F`F`F`F`| jؠ`V ].2/Pңf6^LH1NPSR+FךTP<�8]LJFWm8[yV&]:"Nm?)M)Ck$2>b%Cg'bTV's˝ܓe`0zRJ9DgdZTnKԸ p|Y)9:BIL(FCѾ? (clrNlԄh*(Cj8t4<UOQimc"5jVJO^e bBes[U߸ioN=zU(JRN婐g05%n?C +RVڿ,mX/o٦,uU G89:#LmPKHV]og^zۆUm;xI !px ŝϯ54mHg9߳,e_5ܰ tՕM7$nQծsyj]i@#X mP`F`F`F`F`F /!]�ZY8yuE׊^wMf"%0y6MCkĥtda2D=&C`iۨfZt3S2if2߇ѕKAC7۵vtB6viD-$"ЀQ]F3/ڥ!b߉v̮K4oL3J?aZߤVAiy16Y'S!wBi~Tn73#>|}?Mũ*?(x8k D}BiL|МM}�-#FEGoqзS#<L+J~~M4J-x4쾚hn] Ro3sIMqiۄ B`qWN2�#0�#0�#0�#0�#P;`k.uR%ck$|i)Lͤ 42ɿ?y=,\|6Ve3=6)UjUE %%Cdck(E0JjYdŠN7Ƅ#VTa{H9K1;әȽ丿 ө|Lԥ锞/Y#fQ`PLyX2]P!tL,Eo[*vrM~vjV;rNN6rKbROʉT0c˱f2_E QEuU~w?TNFӺq( (GO܈8&QK #71u(}9?N|.dcH)5Td`5`g2hєq1ۘ&t<2U2գy~(<ؕiQ?wIGT ,S|Izr*R� Qî&5ZfHPtcĄ{hL7%h#ƬZXע%w?ߐGZSC| Z|0�#0�#0�#0�#0�#8evv0|gr+\ZH.:8?L36[>܊jAB*k~#\@P[Ќ(->M5Uc-hENmhI4x( plMfrhLۧ-[K=!^ T yxV}rDarM ͇=M3X|M'| ("SZZߗiE d_}?,u7E+ gO 3}s-I^5FeIʗah+L}<fQȤ?oE#FצZ%imwY5&׬]@`<p1mf̋w3TE3oEwiPM`YMyw%g:󟮢o´adcet ^̜҄4Jٷ:bzVhGTv'Iο׉n:NiԸ`=h&#uܽOC2յ۝uf¯zr\jpg#*&2�#0�#0�#0�#0�#]60sf07)t罴6&n@G:Q P EY!-ƄhL.dO&o+IDsك-i(t^FWt:xdSO+sp22rr}]O"lh ,Ku\VNVMB ekOCWoߧ,+bDYf42r Cz%e47(b .PP}~AnB\% [SFӯ7ar|is ?=1X/H^_fQ-.D?{kJFшC%BUJЀV+L(>&A+s9`pތ-K',E1b 槯zF`F`F`F`F`n8Fn2cvbp ˥U~9 F l4#=lѰɢEO2ӧ{hx:$%9Ke*cӉ5rZΜ !$@*)5!ΛJGP-IeXF"\A;*V]<p+50Uoݗ*6 H`rz']3v.%Zn*ͺP@%{?Qƾ8 DŊ["_s2;4/UEc1};Z`ZdP.Tx +÷PIƢ,q)VF*Ip~E7$RtT%ɐuϒG0% ܣFrnsj_:o~-_l}3/I\)#0�#0�#0�#0�#07; 3],CMY>4a&ZB,.v=д"UèK]dMaX6՜ Yy %XPdZVRu˫p9ÞiGc$S__~ k?};^Hku+w`%Pxhu|t U#{WHh# V h'.eZfeg~ܗNf VP""ϬKWT>xv_mgvRS,.-''"-2l5P)ENf cYYu'2�#0�#0�#0�#0�#xuw*͂0_.:B ~v m3КW_>u- |JWe*;f $+d E:&h|o)urFvxU^uys*_5*\T6'(T*L,FXBZhQ!F͋ePZ͍kk}Cv~ZTp\Z\*mV$4,}c;K=,eoim;[%f�zVԾk*o~6<M{qV4 mڔ+ ?& s0_oG- QQ|dF`F`F`F`F17, 8qX9CWxrvio)2#Ws&_:e()2RcH`D2(a<Xw\6~Tn㽟(TXCXv@OVE6-i*\LdrLLrń!RSKd&m)Y_`Ҁ޶M&5.^#ŤMY'J;Q@&W|ƛKgdWtVlM17΀%nTˢ9y=SVtτ'J{ݩis"N2 (|vSF`F`F`F`F`!pC3#4&/J.J`|ʪ7 ]GVi &@ꥨfZt\hF?; "TĿ4e=Hsv;E (2)-.\%0ɚ y.R̮.]`hߟ(SapP%Ms;޹FnY|ޢMcV=|CR|ސMSS ] oo y MmoJ'fҵx>aF`F`F`F`F[򶝫Vńm^_L1Z2FoKm#L> -БVV1NО黴|<i*6A0wrIyhDyտc?UL[{Qj?/ɣ>njuf7OғNڱLX,Xy<-{s4EENN_'%JL.DVj& uJ8&gGVΑqZpEh`1yq]kTަ<EPyzt1֧шڴ:>?cFtņ m]`ߛ{j`Mt@ Ze<<QnOc.otc&xr1F`F`F`F`F`<Eg媴J܇2D:Z Cͥ]kPBƕv}f[}gai/n2pBƷ&6 =WULpY-싓 S?PBv;# [ lDY0)Tn#6_G2"XW(d+]IT:`F픦rY'+b Y\aJ?!ST9 MkRy:WpR^Izmr z煽4ԢmY*(X`rEJ`60?hB4Ѻ4뛣㗇ihؽI*_e֗o#絤x3S%L%|Mjش4UTx}Azr8XxjӶ ,S<=ۊz|؛J .0�#0�#0�#0�#0�#EJzѤ~^> al)%6}5ՒU(zl|@ӬFtAltK代p4Mɴc`z)ب=e(Rqc~e+KYiu%s ۧo ̳C|7rV&=*gȖ ̭ [lB_ 9Vx _uf;MT"`γ"?? F0YآuzqN@ZȢ2%AԤemHg S1Kߔu ͝)Z`vMC:a.Sd#S ?ER)ns*^&ywuh<ѽ%8;#0�#0�#0�#0�#0@^ Pf3#"%%P VW[0#VVQ j@T]x.0?y+VYEFIkta1 /A%!$3\DžqT ae90׮w:IҥKR˩0X{v.Y'"ӨHт@h`e23)"WVIiR ët,#0�#0�#0�#0�#08}b]>bF`F`F`F`F`F{xr �#0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#07~7E52�#0�#0 LX?&F`F`Fv}.t@TЯMd}r#p=3뵇�毽{=�U>@kFR zP:@c#m*,XTAգBE٤]cˎdWo5u.׿BgD<.&J/gd OڗՊҳшڹ e\L[&-P;6%RmPV/a~d:mߘHǏQʹKT?5nH-ەˋSz4 ~~cMNQihͺԦC9H /F~EYx 񣩴oY9qdR*ŨNp�ҷ2.}ڲ..ef{۾kfqT@yvH^S~'̌l ۛLWUJ8}}۲6"֭_:$=_&fu7*E%KvZ p1]LL% SƥLb8/JRԢuΗ3Нw>v^΋R6YG#>LE%˱c@=ԌΟ<bs^/ϲOE͉{ǃכ] v3kBOjvy}h-YO&=G.@ŷsT)Or[Ts>wT:"CO̧<1Z<O?N?.vôCJj^wӾSP>4%^Ny6 8CT;~&ťҬ?v:xd*MȐkmˊyvO=|ϼub]&U+Ơ][R4j^m^O<ê5Cd+֔ocA<O{x}Kf҆'=[W|fӅOy&N9-$pp|MxJU ?GhYo^HK^LC r? I~.]ʦE˫ZC>] 3n[|s\`FYy2Ӯ{tdsuzt*+]ak-!3%"d2S3]O&7`] o7_kli&cm$uhT>lO4>U_KO9߽ٮ_*CUiʷm떟'تO^aN$[O&7ʍ}as&U=Ͳ8m ̚OlG]{W2MG.'c (G'SԑTT˜I S+^HK>bgib7_=}) j:مԦ/,};o˻;}<W._BOv J0sn-ύ{ӓ/7Ң<yQ)4o~яwFl00Tgkl>ZœTpm<iBVs1}9KN*^K'gw15}Ȱ`όtxMB`.{G*ޓq_ӤgwFO|]ݝOUb'ߴq#6M۟1Oԓ<{ՏMу7hߩߵֱ|ʓkBul.0ٗ.kk0edh.j<!pnpNWkӔxd54~c#h%*Z}ZǦq^C(Ң?bj %ɸ|OѝkROJS<qnM&;dڝ?+|φ^Զu}B;{<{ڮTv\5Ui`JOI._ʐ1O'U`OVOyy~bOZO h{yEPPr_:?ƕ1W RUPU(bf (5^>OwNvÛHڼ&^cra; -dZ<&cP+R&<7b &0$_AnT4+\&>cP76[qB¦E'a{}OaѤh4дʠeO"[02@s d0B RUirCiD5` nh/' `<4=|ZBC"-;Fb>wF$ 4El)Ty0}B nzXxIpMAI4PsZ>*3eF]Hˢ7(4%!OƕKNOw-ם{iu< Z&oޕa\l|/gf"'xk׳Xw/{_H:Mqiz6WC)jZOn,IFVV&Z:ZJ�{TqiQ߫cQa6Ų)Oq֦S9Gb_И`żI'sUVK?d>5oϽGZ]ܳOU[t_Oj8v8^}bYjYGR'㞷=WxrM(5&8m##$% w'8;ÃKk2dJńs|I2̱=OGD`Vm[p/|S(lwUp d}r#p ޚK['}U6ëfѲft!Ў8DLQ; ;4'z@ y_ki y]tht&r/Eo[B5;W%$.ї $);RVY-ؽ:&9|غԳ0[4ToZf-9f9>l`0/Z/%00 _w, V]%kf" x~tbC~MDXРoӄȸg 3e7py-*#%'Јeٚ1ڳ, h\QAlv_O,ƚ1LGFI?h2=^|\`פv4{䫍! ^&wLDIaGR+xJgYS[nÓqeE:z`&::{oyq4hU~48z]Kh]Z4>ggA\GqfR[Ts: eЪrru>zmszMNBw  ȓ*332OS\y}m\kc*oj)L)&WU06ɸ|i \|~iبZ4!ˤ1]u]X'}xӣAR 3/41m[#0!`%tj cSXf-+=E.=JMmf[`XE {.FJQPN>آ2/g٤W-^Q[WujubPt!HH;J҄RTc };fP->Y&hߟ ,d-]HuLJo Rl! fTOP]؅k(NJ?@CZH*Y5xqLժN8@LK{H@) }IF#2좸\!!1S*6l+ތXʩ((cl2/׉ ZKLyH~I09|9[;�I_Hb z+0P| Bst [>,]H/4]v}+QJFP_V._s, wUlAˌ v# Ol Qa(c!٢uIG`t`#K}9&Uw~j /6M%Bf 1Oo3H|s[*TwPU+7F qmi&]d0s@= x6q~εDZMI-f|F귱fH?{,TŇo`]Oe4վOɯHq\ 5!+k.9IoC;ؠ@_TvЎ; sxƖ{RJ8*WBszCϞX3n%rI~K ?qqSOϹ"E j|ўmq]f4 Mcgs7&,o0%eF 0-$[ӮKc_gNIsDn Ťi%"o~1[^I3CVOKժk۹vZd>8{V? ][XaΧE_~-dMs)|Vf}Ggפ9rib,v4跬MQ==3A:㘱=&PĻb$9@aj.|b^KtE-Jߌ+(=9^QÝZZtV:st/S*ߚ6M̸VOq䞵b]HUwjzQvBkp<xrL Sv-+,s/7?crety2|ϓke5fx2,{OTg !EA|l-S=O[).l E.Rl3-35Y_˸2k&]VIh̷Ky>bw3IFEK_rLC޾c}8*Y_r_w,o25/ BI`phj ;;/?1qeo8ޱFRzF[nEx6`JrT~f ny󕕙.LW6u_1A~!Lkܳ#*V.F]{UBf}_- ;!A%&gj kZ% <zNF,h˺RVgTX_R!jFJs @߼"};۠kו#3\AIVVxa;b K3dS 3vӁH"6. }&n1-eQTwK؛X2n!9tnyu~ݞ NAO>1_k^^A[lԕzS;Szۤ '8&w!m@K*V=gMCJ~*hw<ohs/.O~IMpPҟi/$kwG3h |"|P O F,}<G_H%UϜ4j|#ZN5\, FX1&C6ATQVM]Eo]~6 <z0BRWT9Bb',*ou"l.FDxuh1{浣:h9m GjMo7Z&Η}<{`L(|ZͿUKwu OgZnu E0b;vv\kv]EK]VA *oRQh٤aⱾʦf a9ǴxOO9ɦ+^Ŀ4oUn.-#ĺff}SV2;U<v4_ iִi5EϊeֆyXZq<.MԦ� "li IoWo{/xhT P#O{qь?͟~=AGZT0Tn9[h6+ MbE⯕cdQZ'4yTw}gĠQRn)c^}x\~^~TL{gXP?rd0z.}8JG&}!ߍL]{f!S+fP=Ӧ=N;"jl�&`HfkBݵڈcXז,k@j[}m^WڔC�eq+.ˏ|nj2od|ϓkZ%|gd _Ä�E\:͎Ύcg2˟['):#Rz 4d'N~E\ͫ?냍mGS#jeap/iaeȨy5M^E V:?95c qoΟ' ހQ]L!m+^ertM`.yuc[GSק<7E=K}\B~T(UOGVҰߊ۠WgL[[W'`.| }C;yW7u߿{ AW͍f-j'>Cy{f^1|E.PEG:nl%+^O c~VR@]=[f B^w(-.U2v SwY*Wj^ɦm՘\mCZW)nI7s]hܺ薴敕_1γHOSZEcr܀j 6&P&LJ/%vӧABڲ:/)g̣CZg{(lH5B:raA %T]P=$ &0jS=GZ+K*  7>BOO|R*n9 ^OB>zߦH{Uu eL.@J|W)fن8GT,fy 2,  !`*UG qI�,fl~b Gɧ+i`+!ZY86D<l]p;Y|,Qun{jʰ։\N`]m<ߕD zl|5lZS&{wժhιT=2B#@Ih5ʺ�*194"!9 Aë"<Hʌ w]`XAZX-p$zMW>JؕgX5He:t22_ܹ'Oɢ]o8[0?6<Me%zpBԊܕw~<K9GhcB+HKtCv�bh"cv.ט\^ՖݩHR⛿O.r.ZR Tߴ 2|"NlY$ϛ#4<(76tiT$WiM|&͓ЎoȢ~ >H/s{Ɓy&b[[{A]jP me6oy KʅҐ}PhB _gF0]LDoM;"0^T&4j,gL.Wg0PT!W9Z`ɇwhPifa.Cv&|:Qj$|_>xe<^Rf߷$Ccaj;㞳~AJ3Ot%7mw(HF=f 5۟Vi)caWɓܠ6Ɩ?fEq vwH0wY)ǮPBpGbr>N@!8QHh*үo :*ݛ9 $dem(G!TV'Jw)F yAiD_ݵԘiFnŸ?uͩoCsM!Bj|&O'She*)c˱f2N9/Y֮*-/{v]:  &5̖Chcukb/wgu -?O 3>Vg ꨟ'wƽz.ɹ'kuDej5ϵ$;|;tМ<6v %/XywPv88g f١t9+6C RFUpQj4ac| +BCJMӃK yFBHJxr!5Voce ֕~}@\\JW'50;�f-B`j;{' B0B\Ӆ`]fz \x{w.y4 7kM_?C7-V~Soe�a^smk>[{ӜKΔZS0tݓ{zc/V5?=bc>A،5{sk[,-(8"n}+8\@S>S[R`f~uD^ EZO-W'GuSt,N=:ޣn]`_& 52~.ZPZԲL+PzQǗhi81`X6"TBM$ ̳ӻl/m)ؖ7`#onST^YZRcKX��@�IDAT`|aL;'?ci琖8e;+Zz[|2@Z*nlUL#E0UpS9lHWk& Tg]&kӭo%'$*ls5+?` P+ݴ/YZ0hWh Ֆ2*FW+=}^#H%_Sf}S`l AsKQ`eQw? g`Mޖ:ճl*Qm c-#BZtY[ᄡWFTsDn<&ppmhD_<+*flb1lcoFHUjl)*` yfd&2r\&u5+`gO_iG4` I}8ϯqwW-5LkmI_y]ӷ;IhB+L =A L{G|re=` dM`w[Ov ή2 L2d}6s`O)|)6W7uv JL~2r{_CY ?dcedo}4 L4+W{WHap1m/[MsbdB`!2)U\)@g'GmU6ٻh ξ';7[!q2XPYLA२FU'^j$`(FQIVf/×$0/NzT|?:9J ϡ#|QaA#fpw`~!j*\ X[㎮B�S<ꝏWLth7LJUѸewa&KT(ai0ic15'4c}\k)yxlFWX+_#}⨶C LgPc٪'w`6,^`w+Ghq%;r#W݃okUl_&mGO'2\^\^5Fl1A:yֱH5:uu/r6T|�<K65[胫sX`o1k+#s_0e( _Uɝq/=xxa&az 4 P׏#&ERӢl| \̃êѢ*m.ʨVLso ;Ucto-]0;ÞC,sP!4?f4E2]o5~ kK0q}bݲyD B46}ި5 ~m?N;iыLLUAUu }(VEwm70@P|�}W`5B8i{<b#*b2O^ >8!Q0Lӯ#Qk/U>+ʩ/bwv`ea s jŵu =t}T.FNU.U;֫U7x=`v̄!::^u>漖SͅVH/a2\/54)d"떑g [zYԊHmޠZѓc(->M;9V`d>et|�:݆i~'8{+3͚dZWgi*f$ ̩aR )HhܷA2`S (+= %Gk˕[c^eo>euZ uFĢFQ6󜔖8$CzF+Cck}J|(N ^[ z&Z\ <cr;W^e-'L@)M.I\H,Fn9J%E%K&;Lʫ FuyU*AiVAEOt9@Ck 5%:2So \3R@_) !A8& ް0^ZU|u|=ДZ-CjCG8*&]26>6H ʎ*qS$D4̎\վOf-.gϬ<6ɕI.K{ϫWO-4a@fywJM.l&$LahNvA"H{ _xUvIXhFtdo*c2`a7@߾_>[ac.lA`Eo9iB"h@}>[8]~]5&*¦Cs؅+!tɠiҌQn!4&(|j a a3R֛rg)`|S{t.Mzn3QOO0 x9K4"`+,@yR6Iim L]?0p BaW]H|drz?`tQ'cY xO{fm9Oy@_ͧ-Γoڼdx/z g Uk|ʮp嚼OG-|z=#qDDo2P@6lgzڻyD؈Æ"lѴ-aݣn6iSIG;;FM\VMXdQ#˕59CETm[QRƻ2u(YtL.qqL2۵;*qwPL.UIKaZ8mkpª9$W7Æ}�-}G.0@cHRq6L.+]^p)a?3c}+-]LJƧ yJb,?b@msVF> Ф  ,MפC72(mEf?GҷsOFΊ?UvX( jG v3j t(�Duo}˝a g Dk.X�ML-}N yBT՚ >IcԬn +*wD|چɅ|"wYTȋL�<erdSB\r2 5)Wf*WP2v|V>+' -W1ӛ4m@ kBݞWo sh})Uk=w✬_ c1T_8~7Jbt5 [ȟڻ—1`H$vCm.WW0UԊJG 0Ņnvؕ˱ ԁM(Tw3+Ҫ:8linT@PHU#+Pc$ַRktl_I@N By^"#aAо 䐔6>WNU;DޒO;FJIQh?=AjR*1{-,>9)J jι?YDŽAk8{RShg`ܿ4&f8Ikvrv{E3 9l 꼒{!&o9#Wj'g}wʳg, ' Z/qԘ%582_}[-.4z]yH(3[h`soc1y5 w狀Pw ݤ]%~Z*4l+͡K0 j>):eA:{�B3'OC{DqB?p HQ,!8HSEIf /%9w*IꀖtР9ڌ0MHCwvsj0)ն 2k`!ɐ*_dta14[ ERlf9o4$hYO.E]Kmno=g?%hcŬ[_̧^=eeeK}3`;c= V&bTsvg>ek>aHڗӢOK*BD;;3>0Whc6#5ɦ(L65<& dܙ#]#֌FKʍjg ݹ&e`oWoučW=ce*\Ec!Tրjޯpw_wG q?Djuz�6}Kq'@>ƱŘ=6c* \iܳJ )++:?U0cfV`UbIxd>13R3Rle)tWu/&t hI)Uvϵ:QBw|;z7&5N]UtXrBr2W)}|!ZB AM/tZ=1?\X{54ܥMJ@"͘ s_ƒZGLT]H)AD2:m9\5X]!w>oJV䱮z}RSCUzD"KH^μvxzB;6_jӯ}gQS;uR0@.сYyˣw>:V|ު.W<,A EX`~8o%QTzV %qB y<sacw XnWG?"ȻgEb(WYY!x(}Zw&1u]�6>OXcbKl4<>H7+o"28o4= !G)VdH;mPRJm,]Gmyeb+ ƚ+@ |Hs3s`A j["J<HasL|R(EQ039_(=9\ڜwV֝k2֓؞+aO4$u:)%.0+v(gނ`8 ה&1uD;FZ}IV~   &hoR?-Eǚ yRVyZ؇ [ }h7%J!2s^Z|:я~9&EXEo<z\*"i\�I-13jץ<ݛmwW .`YmQZhZ 0?erZfT6K$=uP(l3Pb(|Q=/Ncb:jչǗjnSYΉ(YywI_IϼUY4 #o|l50kx=S2\2lFGٷF};рзӑsV*?zM27'㞷=_"yn#k]Ý~:fOO"XQpD'UʟWGF{E$uALŨAYVfY_/0/=JRc5frPϕmW<{ed-:R{ >TvfS" A ?2jQh)+Nͪ%r+Uh)V}CTO0g]L7 _^yD*Tcfh1Jn:/Me0İNS̶y qEfj\/r3Y2?UD;f֙Cgh+v:쁖T)3*۠=:0c#o{z6EKͬ`wda =Yo!1Uo]Er_J&#L9JjwCNa\'5{?o,)m59"$b^l*$AXd@RQBS9L0.g#ˣ^H@P˙g_0`Ɍ`n1ZH({Qd̿Whm?9=B̗BTa}Z8Q2xR'  w0`hyդiCnY%?JXC{I1iIAS>n>.G[ 3C/ qVA޻J<X@M| =<t�WBkp]T{> 6c*Goe%̘ao u}B'^fF6a<$);oEw6~+ѽK&^y>h`<OU:pqpt7u<+>bA?bk,&(!b;u{4[W=^;uX3A 0dݍyI&O,TMޮ xoKլ~qe|r+P]5jus7cC&79`tcr.Ճ$@iS!H-T9LZ*)m,ڵ͢Q#nʮ33RΙn8G[)h.2rN6{Q$6XXu=˘dt`}Y-|Jˠ;\O.ٿSWto]6}l,{q9~Լ9FP}WUSX) c0ݮť҆Ik]n gy2jkV~ 4lT-* efa&L3Ʀ=O:\e|o'mA7xi46˻[0՗!r>^Ŀ4ul+ܕM74 c9�,؏Z8Y|T^kg T#l2.*0`[Å258{7Wܺfu_OUrZ1SM<Nf*l͔-M JBPp\s~sc2 Hݛe1W=>ux[pX0K)<.2#3�_J֏NQf6;c7UŘj.^Ĥ mH¯)f k|W &.3vQ)}4Ӊ2+]ӲKJbuG-*̘o Sؘ /Ymm/o(qDf3):cJ$8vEo]"$BkZHoɨ:!*i!ݍ r3DJW %QcZ.ET*k``uf\<{�04P=$fWi?hI`�#FJZ^rb'`rJ _aFfXR"$? )g=zdVB)MUo2D~kepG-TuOJZ�ddJb4sK\~5v͋8O=l>.Y'\T'Ϟ;ל㊳~9U,БRkF1 T]sL1yU T|1XA;)Ua۳ߊ9BHfwrZ>vM ȍ h=e9gj"0%&,6wMۮBͭMC̗Ckc>@ q#6iJ*c5!}ܳdtJ0 ѵN! Ԯscߍj90~ZO%Xa,g?ݼ$=F;K7w4vH3Q0 SPn)cȇv! 6=. , <%gs~hQc̣6B^_\+IwNcNr7Sq|r,DKaa]_ϧnƷ׬n}k0dڙ<b*g'`jM+h&i'T~1"fTJ\5F'㞧=w={2@퍩VKu>>Q߸J9(:jq1[Eik$xr u'{yrYoSmڀntBZ\ @&!\i#0ĄKL)])J856~c?Cƌ҄/4EXh8]OrN\ђkiMc~WE sQ8i]/5޲YJ-}<o4`dtIM͋(,la힙\siH?V^ lXi/x<v{slUӸ<Q^V'ř% Grĸ|&/JNN[_Vy%QU V[Mjd{Z*Zi76K2S2_!~&#/ߤͱzhE񀱒珐VR=Glz):| :=VnUkp e(L[t*\"ݽR0[0b#n*C9WDqzCe`R;̝tt< jZԵ%53$ܢ�3F0a v�!- &M ,+3i56zky0~]֍6eÜTA`1&fJ3Ts:;uӃ? �a4rLm4Pv˺$)BEY>@ËiS%}eZ@ܟY 9R55rd''%0r>{ԩϓ㊾]{GۛQE$6:ۛwP7cq*Xi`\p-i+'acHEJkQ0b%N.HjanUnn!+T|o'<gɤF|FyjWlYq%/򤞷h_lZmj6+BhF:L_άq3-7V;4v8үc#ΙOLWR Tpha _1Յ%p@yß s* MBeQ<;:(6`xzlyݭ:l>`nQܽCF74=VT+GGsTR3p~VhYl62kr>-WU?/_:_kaߴ(a)sR{쓾rU+YCX~Wr/E~' f} QtT^k]飓"ozebVm@�7mYi\ήmM {ɸ|ϝqϓš\ϿaCQޕԩϏ氃FToF|qXsZЉ}9k;2hzrP2e@fsceɗS_q+TqptuڏS J5OiqL:DzGXx2j%G^=AC BaMj{r)X+8x7_>Hk ׬ L>^S$AzJ*B7'T혟k.9J՘x>g,c^]0K2YU/JpAad==Z ۼFXb2dj6Z=F֙|,I;S\9q%췘P D \ D4##l:L_4Ƙ5,On0Ɩ�jt˲4, ")b*X(((Hwww,K=gܹsΝ{7{{g̩y̩^A`nEӌqw`\ÜRCV0Ԝ+N!UQ6a^>09>AH vp&_ZR2ѫ<ekQwܖ Ё_xV2sMWNQB+6s|x_2D\]9Hlbnj)5Oaڑr.R AaeBW9&B' 6$Y8tEc%ljfuTT8z*|;) *#H[*y Ԫ]b8fQ6)0SIdb=Bj.]IoNb3L6=\O3<`^|ӭn'LXѴG`Fvz ͜rTQ e=C;ZVJ6 0gdZj#j_6!q\D"3%{B=Ѯ0IP!lb4lB *Z2G{@;&WTף5nް.黭<s4x;]t.'%g=g ӝ4-ԡM{lZ&B.0*Bh笑c~<c<z혁n>TfAi5>i9ubd8&&+ZZވ,XD vkFKk~G>^>αV8l.ޥ鍛ѐ0DEދ")۟cdt n(/P1J77No ?VօfV$iKV˧xO1,&:7ģȘ:O *_= p0z<Zd>џg =aXS()50mWJ4:7H*7MxU-6]z\"3>fԁ-?\>s l<>2B Td =vb ^2GUY*tn4os2Spr Sj<}},ķd YA>q::c"O B W=全 >߭[|_7SV7D4k@hoe+#SLPc3.l0�oSt_ˈFtYI~!HlQAi}BmUF6YBxeq[ǸK뤮i/阗nv,Pyv42T^s {[=a(\:dZy3tan=Ԟ$CʗAFs7by#|ބۯ{;6ze/rM1ٮaިtu6 @r+zEM\FthAkD$Sim 2u,a/S8TTSagh=ʩ[4F*%'S_nHr_>_v0Uh Kl봗,q3z Llm|q*mهkla0\}CQ8^X`6n_?-/1NCZ3zd.a3XT8}47%gJ5`xN*-r)L / qb;c Zw(4{=}Wǯo¢]="~KURRF2A761('j3RgDċf IyUHVj"-}vQ 7l8X`) ƹS:*lQ3X H蚘`E 3%{Bn@+{P, ]b_+DwN9(ң/iZ�rLQgРaœ+3ԏh%i#ۦw {(7}vHj*FV*߅jJ1.|1x M)'QqbE7ƷJ1(޾B_`XhE!sPrĦEo0W]*Zi \JXEs\uD.\~HNumnᔥ@ a~80c|HjV#^xN8-87U+<Mj^RZJ"ce28J~R\ֱ1?_ 4IyhXT(})IcLF)\APBT\L+өBl5~S*&^A,xCݡ) 4JTœ{"R>T:\9䥓c c4UXϢ{p3?M)9!зST*�a> 0Y M=&;=ǎ[T1[X*ߵ?ms;7: WgsaUHm͠ڸNՒk?"90sUF0X KPC&CVNz5ٮu:Ej׵s23s &?5Dr܌GbLa<f)j>q:\60o=XB中ֲ4::yO IYdr9MfU`BF=q-Y=ZzsN _#Ʌ~HZDgЀB*WP &偺O8(݅Vh )_]kFC3N77J5'E"5`Uyl ҩt;#͞/֍H ?C_ozBÉ!<":}�'# 2hOYLs^;wRLZ|uh? aҿZ?yc+,dL۴i9ִMSzR ~߶jP5R@wF?~]4*7[K)KXjӹ�;z;YRo4�|$}^FʐT,֌hǤ:+kxVWMXpBJuq-"T:,XB0 wdSe#l*`QYŒG W_CLUF0Ң>ᐾ {Pxt PC?c1 }XRh9N-]@q`Uz='0wXO-5ٹFgrsڌ[}z uV쬷4S%C^tP`acS&ʘS75 7>~WL.uz]ƴvK,xl5OmlFf-!rRI!M-`p\o~I5j&PMr}% O%i߭om5aa V-.АЖQ(&ޠQ 5)dSf+dάڍgOCZ;dv*+w Ԗ}94ZUwpז1|(8pDW`"g-z]ILsi5ݳAGfdǗ @_ld(TJRg>$6zDϲX}7M'`uAj~+1Z]Fm-^8S,xpl]*]|U5:U\lO]OL.4ךa$zw\.!#0~mbdaZ*f Z[c9z0 ~j@hu9}W<N?M)PP||&"Nյ:ǾXrv@GN*alNS|˜1^c;@2:}OWY s7Z?8n&͏#y|/2ڌG8IojmXZ]?GΊMX u).Y-qbOfEYiX9RysL(s0*c;Ivc߳S0Xx Go8lP(ZG_ 7d20ouRwJ Gc G=ˏRG]ZEw$t0Kfժ/UG@SkF 2l[RB5]0Aéz< eGvzY2 n#K|`ne`my]UY0<>'u ;``mu )~\a}CWR^~ڶBC(ִO썢à!{dnc ;`_Ց2C*#Lť 0{h }~oߵ3! >�}\~tsu_)SG&Ta#uW�_V?;c1} =\0lX?aS .S0WTxFu.& SŀatUٛ!_Fʘ?wَ; 2#ʣfl{%vpW3%av^1�,J̶D[�֞_ЂwRd#:Yt怤ɭJByXh!;#Ւf3Vi QaN NyS M6/)soPΚ# KT9aıkRʛ6ݏIaԏݯnsFtX4CupYvXhƈ1-\Ɨ1$O}UӲz ΃x QQ(J-|.+ )^L4@?LsE~SXK hgO٭S0%#SN$Q1dL53Lws86aNY6z4Mty1ܾyCnL?ٷL0f>Vy=BPu8{8-%aX qWv980SwDߐ=OI0˵׵soK*5ϭ[즏x_<G0UR4QJmlUB{{BH8V-#9|دCلq5Pk۔#+t%S Zn㊙xgXM|iC0?B=4 $tp/%:uJaF8X}Vx6y _b00�#0@b#wRZ]L%v|F`4̌~~kCBݸ]}?|gˠG/K (oٺ0�#;ھSGVGSum{ bt=xb =\֩ 'ir TA8x-X˙9G^8͊0~\uF`F~@tV3wdr`C`F@`Ւ3wz$>~3.Z¬D&}F#Lt1 #0@B"�M3{Ӷ~E˖ VkauhрM͆z呀F`F֍\y/*QOF`o$^yDBbJ~F>w79#0�#\9s}]/Z!.^ F]y`(|8J_c(kD6Q&R AL�#0�#$&aK!sRMۙF`. ·6E}&D GiD:&[kϙbŸNE*ժ%:3�#<`dNś?.,^j?bF`F`F`F`F`FH(]t׌`F`F`F`F`F`FbF`F`F`F`F`FH0+#0�#0�#0�#0�#0�#00�#0�#0�#0�#0�#0�#t`FW}7\3F`F`F`F`F`F`qo'ܾ}nߺ4SL|N7P`F`/ܽsܺv7Y<ej0`|!p {[d)RRr{m2�#wvc'rLC6ȩŋ}3#C<8`@ZQAkԼ\۲=-)cTAʙ`3RRh >Ob |e#!bNikOwKk; l wE>vDLA`9[c02,4\sp$W&싱WF1UGȊU_Uү<7}3SЁV MXrI%|-,1.G.n3=, ϗY?E!g3N'ҥ{ݲhԍ9-~s/t 9(u1V>L՞wy-y3r<E:Gy*磇(o]=y%ϫ\*PŘx׋KRۄuo|i3ص">qr e2o@�6s7(W @uT|1 vލ;}]ʛ? Fn8O[6\ OORYr2=t֭8G{w]뤔YG��@�IDAT)eto^pV-9C_[7R Y(r6ʙFE0NQ& =u({4Viԡ{!n6ﵪ1IoL.fޣj=&tz NެҜS0s5B~x3ܼyΞ.vlH] F^pz0s5ڿ|3i p &\B11e:L#oovӏ_#1>i}3z`}X'e'N"Cۛy}]nˇʄyewnަˊ(r~fLZH<>_:d{ Wnv~N@' 뙂PfXEJJ۔xtݹy^&H{}n߸N/ !_mtay˕^/涘kz: t:R9sQ2$*8wl@ՙ'7g}S[.0:5\(_Ȍ.JwH2k]5PK+ۏ?PkShOѰE^qbMJs[oķ~<Ҁ6y~}*\4=0R1P־=eɖZӺz&m\%.f7_Ļmv=IO#nH\fe)0"{Jz*{qڽJݯXq8͌$ӆCBRP,>)␶EUK'r(xaGVđo'J/ۄ] ĤP{׮bѰQjKNjuvǴIGdѕ԰$W/WЗm-9䌿L =\~ {J%VA.gg ۳a^a_jl2ڪ2y<͐1%um%|")qUjD)SԴl)t@ 4nhA%2=@?׻諁[A/E|jӹ�ը"4<Aݚ/*_%=ԭE!{Y9tWK";u<:7^(&GzOQJ+4q֯<G=, Q=g=l՗EC3rT-{nnyJע#5K =JǑqu~E{?yfFWi`f,ԇ+,L?;3`Ҥ5{?5\F�F4}e1M9͌@]?&F�L[OwP>Okh؀}п$}MEʚ7QԲa܏Hj{? -\`ynK)R B"-U_Ņ5/_5~5-4MJ>d8_g_)5Es7 {AΗ̮+~O0E ҪvI_kb8͌l}6A]LMW.>#ghΜiuIJQ<R TQǍю 3Q9!m`HoXugLEiӥSKۅRi?Ǥ urj|!uIof J sJI<s\ubia&殴5 _h0DC3%xFj6BҦǢŽKZ0=9xVIdI!ִm>:u:]z~0JlK)+V*4QDPM`BZ0$26ׯJճK |&pxϵRSد>3f*06W3IeX [ҪŧeM`nnuL^<}"銲I\o aw|хyyڽ|_h_U"܆7J8.JB [泴ApӚs<y2!'av;âK@&l+D.=nEu|E?gO=2mxAYoG+->!-vT-\5ovn齝s_ .L׾NZMQ)_zV!VN{7PTT@J';tzZu2/NyJנߠә=(YFh1wX|O;XtN̽пc^_y쪵sȱm%kjjݱ ̧0oF\M0{ K'V| HWjkÍ+I ˧RG QbhîL3G&LI W͐~\/LEӱĶe>{(l p@h]:_M'\E+Qhņgf1ճd˔7,i-~G̑R܅<o3u7}9"|sK*m[`a=.{Q"ѵQӔDU*R3%Oi*/vjra.1J̉S-Up#wչ3ښSΜCWs$ib\lZ\KZ>xk]*sdBE2aM rJ;N%z= Wܤb3hKb-Nrj\M{/$lan6]J(=f,;#Tr=+gz%Lɂw+.&9 ü?QX])P:zRc @*ƺsRT?w͘=& Ʈbtǖ^~B>&m4Z\3ߵB Z]mmy?Xﲸd\g:is~[GrnsL[)|S{l*/eGhվ?y8}dlgv1!8ل }&щ-Kܣl[%R[-r4]OI2 Z$96i-/+=SyWi<NGYA8,ioVo7Wg 45#pq GH6ÀC57ݯթãYcȶS &_MjR+ib$L\e 3O">Vԡ\Z8[4mV=QznpѱGL&~nh/0q.6b}3x4`PXx:xL k%s,>ys3 b,D9Ibu{漍~t|홵rBe$30X[홰x0Ks FuMD Z}5*z<[ lY[^&ySq@Ѥ6"d?0RUGU'^,.4j4VC�f6d{Ry>iw{ԥ|֭�/WڸJ7K?=s\tv*U}3N-oPtHf+:-.7Eu G͋h;ՋjJ}#<!`ri{[!qo{M6`aˍI&]g#d_y[B˨LSoj[~Y0F FX=:^MuHQ2y0uђIvy怶2j?R"6f6u-9X^gAu'5F߰o҃6N __dAvtv:�D~)C\TB #o ppGVD=)[fImCWvoʻOtF9u$QX2X|`{{JlOyǼwZԪC~c9uźiWq`5rߛYoX3Q>w\9 :A$SkJ* >{k3U�:tsBUMk]�q[MݲutLo*G//3@XO \آ5G}_0';mlbPxH0H@�HKh ڿ12T7h$%uV S +,֝N[~UooQl)g\BXˢA—{n F?Upg}$ xun@mmL w:NxK Kh_PL.ؼXA*qE,fʼS(62JKWЮ+N4=+ Kq:3ˈFZ)p< 6y#\$_9e^IqưmN5&:�&ݟ)"su_I9"꺝r %2Jr,KlC׿rЍ5z WvF/I̲=|J?+WќBjG>QXhwD La`ӄ̿Q|Tƶ] [HڔE O67~C%ru-3fyD>G$COw]Sm!lC[nM`~[<y2xap(2((G1' >qHc/_ 7[+ |m:lm>+|X6)I7zi{z&huc;244RC _7,?%|jϓi/oQۼf&= '4SnX<2XH MEBUL_s=Bnz\UsRCJW&KbNHBo)RΓA8;wrᑷ\] ɔNm_%nv4$>q=(ShQ8)$Tw-S GtRhL}&uTR0QdB%`B˚ i/.ǸB͆ïBXbJ10pw*.~O*-N0F)_!LƦ6%1*XJ=ɅyWd>Y*_u TvQ. ][RFڭI& FInynFϕSG$q)TUo3WS8>_MtvFiHx =즙tYZ>1Oaٓ1OІCL[׵ TǕ ⣩["B+-Ij2w%6fF(VI`a EiC#S%!pzZ7}}As׬_ۧLeۿ#vk͘~Uz}H}K޸r2{El3SP2jSߨBGQVƣ?sD'H)sOt =nWbẓ?k:.LmoBny1f&�^La'9+&ܒR" M_ lЃхt<ZLSE+Fơ`1UKhB_rLU5o:ϻ bra[nN1\ki`x4mEcEY; u1yQ9P(2mTc:[sY.E' 续QN Ʌ5ߐ1i2?TДzY&?"~YUEz5̓1<�P BM7!SL3V2W4g*:]&]>-H ^E$3ץڱsQR5z?}A+VqZ iHMj6sI9B`sva .F3BMѲ5FWI]qzZ l:4-랂U4iAzi>'HcM#M^D&`|,A`NN;MOt,o w5 l5,;K ǭ4d H=/4Tz,R\361{ь[H]D"2+OL,fGMM[uzD0*<5nbk>]аR` /EӠ=}XA'$!g1Oۉ ҠmC2ʸ`SrC2=\όg:HNp^Y700 2ͽFG7j&&ibOF M/|{oG[,ilp]=c'W_*T]^u9a?*Fް/9+rFha(r\)}u)(U 6=?Mҩ@߭1/;Wj(q_t9ћwh; @�\hTWYKTچ2LWNk$&LGߦb;H -QL zBFR=*ɀC@iYkg$"YtlV[E`c\1"Ķ?_Qu.M_#M[;#lbt}ֿBxE OyEV@IaX'b?MѲ'NhA+GnYT>wrbeG:`vd`l@ ڂw<ejYoZ5j= ;O4ozsڿpڒ7I %b 0lEhjA.U}c!~羦T =~ѵyW"mdz1clHTQa|I|-gux;Gt4j]a} bŒ?=lbd4<¦/`C|G /9/>ҀW ̥8UjfQ@qs AǷ_%4S̤nߊZrђZ4kMnąbը|ֵg23%W xcN\>,̖<j sMSzR%xkgd|2?Ӷg|]0="%H.-*q -/F*: 1i ךO1"t3T,Ym5),]*=܌`~ uFGs _\k<;%4}R_ t79jr1.1?6ez)s4>qk'}-SEvzj |cw8mDi[+8+W~|v MlL 'Wԙ\ўyIcam!`^pĎLUW~0yb�0k{2n l?&7cZ/``q<7, 0P&`p΂$"L0?R/{"8W\{3={hBB< 0Nί@ wR;|)3arnUi>JCJad47HC`ZpuV˨G[2lJq;}OX􀠕\F9&@42Ƽ7 >IÂ] Guw}Bݿ#^=OMݍɅڌH7^OfsoU+Uv3{eFoә\*=ޕׅv 6 @^Bm`f&&_a1ƃ< bHu X-1| 4a4$$Ÿx[t ƍfGj# eίClFZā2-"11_љ\ȯ@ʌ<Uj2`e/7@/m\R{ Z鳻Fqq f0 ZSz�D`0_9Az <.Uݘ\H1&[߬ ,@TL.uvH?Zhdg6fq:a~},C4 hrU4F$,.ק[D> #1Wk¢>Zz^"_>�~{?+]τ"2\LKJFth3=0FD̘7!G al&kA5Zk|ruVω{?oTEBMA; )K*}?8`)O8-TJE1z?!"W1o<=FFUK^RSk�!@k7T8B(am ubr*wL.sv:Ng) ;9ѠW.cz F-|= <N8m6 Mq:zXz;"�i|-`Rh6hGdLQ$xAF@[!3b LU+ύI㧘S88Q{ Z=Em3G $f p`j4'\F=5Q3og̔J. f$' L0�en0/0AcY8Xa)m7>.O㈌ F g225f(+>&o J4)m0lrјV o |hwlGQ΀7s||B '0mؼ}(U]j(x[nJG+5=6{+\qia]:_V _I'6}`RO@y43j3_,[ZnqSѕ<*y* l1j&츴Rd\!|uJFpI,YGVB{5"oCV œbhhEQt*L݅A,#=)0OjmSy&!!jf ~rʺ\јV[?? G3A#wu_T`R,G8Z(Tm +ki Ulf`&*M0>Y$L*M,Lb-T=s uMt?B!@{֘j^ sg XX]a?N 4ǟg2m_gԕ \w9-URܵi911LSi!Gb*|ki3Ǔ}IsC# &Pvх;_43`N2ZNibXW`5.7[Ҋ=oU߸'c76whfl$y܊̑+~ FWl.u~L/SzXG'*fʴ\˟qL.l? vSX6tܞ|<N[:ynq&8wM<cx{ ++=LEH) i0HVudE׮VGi ) S5U*Ϊ7o$`}Rj`C*22Vs8hl9<'XϝSN Euap2롥T!t*umȃh� qeTTyT49U u/jMP<ݙrM`e$5[퀲Z,$:LEV}~4_0\ hJ9]l=ᰥq V޹Ia>fr̡qV_- !g^"?m6LXT[18*W/aT#ݺ ȸI 1TυjѫuSudҤJRwV`MzeIHKy7wr!ڡ Iϵc?I+~|b. {%vp&EL*dVuRL][(Ttx :iL?sĨl\c!MpH5-p[ E|cTV7|E�eM1+kWK3ER1Hԃ**Ed9+(  3#Vo%넺jcTGj JV3&TqVqz?㓓签V?,#Z4!~qdrdp]`Ka.@XCPn [( T;Ɗ~OƴТ4 ~>Ra 5mܛpi\}Cv-;CiRr &O@q~2VL''4&=UHUiNJ1i׻qrP㴓VNRs%ͧz>of�mE {.vۘ*"UN ~̮ ܀Լ:bDj)&n\=()j,z膁;yO*-4fmJ]o)3BB:!HfAC&ޠlch f~ ϤnW=Y8{d\@UVmh^bҗ} |s96E0`[}p %oҸo C#n}qϹ0sG;S1dunf'Ef!fzФJi:x\}81Yc[q-[:?R]dn B0!ydL:"MSJO'FvW\Ktm+0nb߂Cvgը{_xHһ|�Ў/:ǹz -}X{$寥 p3m|a01Tz+n4](hTDVf؏gUJ5 ~=#BZjXp͟yR M(؍~[_/*M./V*Ckj2cGHMZ1&U]<ayJK-"h&ba_ͯc)A b/1i۳0˾W]&غ%41 P O#ahVZ0arvnrc\u \|vm$,:B{xT YD"ߓ1̿ (.[Oec{{@p1Tz\Y4Iq>NFO8HM'ӑ5f{~C~xy~y<NynBjUo 4\G\dHc(AL% IR3+^0a�ɩfۂy(@HQ=]Pq-Cf?CK[(v12c!Ast^! 7s80r?EyB<B,%炱ȱ4uTxϤcD mwgY7ڞUq9yO`ZAh+^eei 劍4*#wn?Fk&8|['8{Wjp_ᐐmW{(x<+g\'h^~qVK'[2\=rhsV0Ò.˚Manb G`΍K r-ʔ//%f/veWo~�iO\={VxM>۹]m9mn.nQjPU5_Wnq`I$zI'廽)/tѫDAjzM կ:])肙=3(ml (K6O?*:7Ԃ)dPqɨA[ dmCAgzf6�a?\C Z]柒Z1UiC0-8[C#@Ђg` &=) uV^0Q荏z='Ϥv4Zހ/j3 k֡(Oz0gE'bM[{`*F7mVA`7=tЩj`B#E{W(UbFg|O*1:-0 ?t~(˂<{@0i a`0~鼜lhj _u dvRd)\7/. i9ˑճi)3~3)<Nj㴱~vϙe$Oj28SE�MtjژhI-Vġ6GD y~SIƺ1Bab "=w+BL؟OQ4``c^p B=g sp!}G ]mokE}cX L?lpTj{FܱHRӉV^wr,&VXH7/{2r縃FƔe_z\E%ԻUsRCJZ̓7Krf`VNcӟٽʒ<Zeȩ͍ 9z!#B3玣{Ye٫<9>EH.~4ӭ $ ˰>oӸQ~;)#i|d!ytf:!妶ޟȐS{',7Oz/ .dpt|KF,QIwj|r6Bx/RgIх#;iZuZqv's u,JP>!/ hTKffZٮRZq:RiX y+~U3@}H4P`e}B͢O\~U^:EP]ߒvQ j_^",ѥʯP3A5]~IRaרUM+3d=RqY6 ?j}g\pT>TXKY2>4➕7// Be]a"CK[�@(IG^ 5I/ FcFQ`_:֟ tј\`g-m4X긌iC:E 6W%e [ i&'un(g tvR2'6/NB3Rm-~C'.8Cv4ickbvcs$^r+gALϟ4ۃMG л/mNtC:}Ec@u.Z2y~i8㽄8/[I[@)K|okЪ)d񛛥Y cq4c+imOe TZ=d4^0bI1 ;}s҅Oex+ (_o/v_IX ҙ79:OgQr7κA03z~�xV$s0Mr1eZod5XK{0@hEXB[/q_!}-3~B%OHd"hZ-W/䦐6]Eoy*m亽~|-b}^ X V6'#hzxXple[=]4=$xФ9C*¼^ `]3FH.}>jG%Z<!ބM`Sbd`qf-SHv7^S*M[ׯҴך<3 0\ܟЀZq`"";ߓ utv[9U:OobUvszdY +L:Rƅ?`+^xdP|XxZFO.0WSV=j)c^J69'RZVUjiqT90Rk _\`ja5pg#o<a\'IF3APG%RhѸ>srwȒ>6a~c5mǍ [a]a\{؁`6Kcm$X�80~}=_^c~3�=_:ɸ.d.8j DciYCP-&r@f sfr=aM'L~?d$E?�&L%|+l*Q>I1N;7L+fL&G$47]j·:({<i#JsyvjVZNqkӅzF,ioL,nS'͖AHNaF*& H[В-߄JϘ6WN'Hmx^jf2QA:+S  SslBr҄@*1bV$du6F.h$h0[j13iAi^\ux|]r,zt!%Mh ]T`IرP\".8xKҖ$LuhVǑy%'AJ"*C@f&H)l4ttL29}%&ΗR͐y<l!:* 6ӶH3�fR)3y$ry"t]BՄɗ)6ޅfo}ݔ񇨜ؔ(,7Xzv,  f4 nY'tG bI%Lw}%_qU`QA2N,B0gd>?%˪lhD4&0׆|q/ Dz7L;+% S_nHr_`]>_ Ʉ i."8ܨwerذŘXup+-iY|揻18*GWN̜G!VՈ]h 28f3; lCմGZ.FJ+Th24]f2e%sL3)L B>.PɖOZg{&բ>R =]KWgउ`VX~3lMnw'Ț rK U0;,P8,M oaj݀E`PVw\:b^..WSjo@cu<4^CkEi5(T_}A˸A-H?887τ w9 4CD<氘wRju!a&ht|rNo^yGU:7VӄdpuKT2wx[2Ǻ:-{OqXZ^*nQk&Բ4UX)Nа 5t CЄ:^egB$Y~zR)1C~7혪Ԡ螛U|aٷ*O`qi}1O+sofKc̣sma&u:<N8F㴳OWl1%b$)I9l~TS5̘<t9'r3H`bЙE쉣>Bwbl>Ok⊔1oLO.*M4%,00y�s Gc!*W~\'eҨ7"ac.Mğ PՂFvtΨ+Lb;?I¬qtL\_a‹OX*D۞Rm]-blP{jmu;Kqb ڇHnv iCު-˱{p;pp]k τ(\,wԺB_ & 'ͫ/or|hhW 峺i$Lרh;Da"߭UTRCJ - (G>㊛?B^Ѣ/ &6˴{>,&hG,D>w0~ (~'&',GwK&'0x 51ΑTGϢo־´(]z<AG!?] YnE&OZ )5LY"ցOɒpڢ:ʛ?4bdB6s90i S6 cf9 Jig{ɋzLq*"y 0/:(ϭ|O/K?Ud ?p GM ;oυ2L15mb}խ;&Ƃ7j 3;YGbok cߍ"5憘#a <|U&5>́czUx iÿ%Sb*3Mc-Q�C2RXDF}Ӥjkh8WYr<J; q1hGx>nCš_YWi*GM] zqss"ixqV߬q}xc?dn d$FTQL.OЊ`ɅȪ]W2 | Fo~4 zo)z7\ZN|S[*R3u5> XTP=JG4W@j4coʃ&<5!^ Rsew v!(WI\tNέ;S^L��@�IDAT+uT_ѳTo]EZ}84@J& g&F;P#X8}͘)4et6=e 0. 3|vO'L1**u.fBߐb|maxhU:'|a2E* 9<Z4oݩGXKm6w)L %h ؽ\(7|?TQmʜ#W#tC|2SBj~6֍J+i;s\:x;];{R,Fs9ۉu!J1x &] 澈D؈ ~]Jc#)\;w.<@7._9Xbj8�`C&{љS< & Z_xt4oܠƆĚVœP$ώ&׃^V. ,ss0HhsdO0҃Y+'0~G\!a&Ŕ)7;nm]BkI.&yXF]|~pJ]pFH42K~p"efn"i&Z`F`�W&U�]f S)>Cn'T== ۅrDFHphQcQBʬa1î p%xU={Q5Diۻa= G`$<N'• J!֜3}�LA<v)jEs{ &31�# #}go4 S_0OЮx kSJrF >W QaWnkNR㳎?Ӷwa=NJc2NJWeFW1F @`bЀ-)G`F>Fއ#kZ)Kx6�#p#�'0+ꚏ�g|rG{*?#ܯ9ft=oHuisW5zpLu- ls0@2hPrF i3)*|T@jo'P5Fg*,|FSҙ$Ξ<>G΅` x7n`F`F`F`F`F`F P>X5"^�0�#0�#0�#0�#0�#0�# ?N0�#0�#0�#0�#0�#0�#H0+bF`F`F`F`F`F`C]ǩF`F`F`F`F`F` ft%\,#0�#0�#0�#0�#0�#0@`0+085#0�#0�#0�#0�#0�#0@"!DeF`F`F`F`F`F N*^zL!!)(CTnڹ"-}fsV,:CǏFS))Kn7buQ4{qڵ"IfOMɒ%3GկܹK{w^ӎӺ许Ξ3ROF<A׮ަl9m;6_k)G7ZhYv޽K 훾&/Ck䧌ZV@R w읎nV|JK%֊_oSWPݽ <8I^ڹ=x._%4>+ߓMl9.?B%:ѮB 5Y䔯j'4??]G&4K>XD'־K<ԧ*~6ըf-=v aj5? Bļ;_Z1{>Ё9菦6J>T 佅4T^*,Eb8`F`F`F`!pUWʠ%*;6_̓uܰ ez8 Ib7gpe o*TBҦ0s0긌<vPx8>K.z}5pԏfףzMqĈN !DmC.t}t~yY 0S\o^tusQ}nߌܶ~iw}(E9>˸s놼+x =ݾ}L=F|uiڊ^ӭ[wiʄC@YyP*Q6¾mo߼sڅW0 73 2<ChFG\pCW.߲3JLm! &lZEyTjGJs\qo\Z$ `F`F`F`BM&]̰/w"7Ce*dՋ;¦z"MwgooѯשMyɕ!cJbQX=oqzRU?BSCKu&We) LVzؓ!Й\^/IŴG-UKΘx2,evUk<8J-/joStr:^c{g fzfғ/ә\q=EB|O` w? F΢?zz?^>^xBdd]X#`e|2׍8CF`F`F`F` XO>p&;(sQ0G g_)AE4 qDZ/L b'=R1ʕ7A+ Fre7_' n\EdC Ӄ'W##OhO_3/AcO4{ѐyJR s$A;Z24f2g_-A3pW: [hLiJx`0aЬh#!_~Kk%0UMW{u_I[Y}659% _&uKahw{0Ε`F`F`F`B9 b U·K )jurPrXƎكTf3SL3E$ v^M~/@ voNi؃nI6hc)&"J3}n.h)Uo} B�:l c39u _`]a*g4Tl\3;~eXb8=;|U2tw Z mxB *5sHӍ0' ?(»N(:h]:~2.@,٣tvFJ!-[W{bbs$Xe)$Sv=fNl]"|SHWOd靫[VLq- e.޽CgveF_8MJT";SAW rq黁dS_{='W][/mݚU8wKgv^Q "MFJ\Q< Uc4\Bvo/QvN=ka+;B ReLK杢1! hO}vh>p`,'8ؤu>*Vg ,Ls"Xr3 Z?/ /B_^0nG% \+~;G1s*?{_EѵZz/*"* MP( E]AlH齗�!CHH4yf3{Bٙ-̳Jũmr!^ƥe>KO-*ڗ B '{E{ۄP5뺐K)mFEE'TI3ꓗwiڰF ]woő_Tm*>w3ʄ1&�`L 0&�`?xpr>`B|˪QҴh7[&tMaeYrIIlʮF'Ot1MoLO~oZ}|L5kf֢n'Ќ :WE{L\];DH7&L1I6(۳#Piٗs4o_Me݊٬lVe-ںJ5`ClC2"B4~`yAܭO>iDsSBE^IKoF7N''EZ?K:sktJg.Xnd(ڙ );GTjlyaotlfev_#!ao&+զ\w0+ϫwhC " ,)Oڝ(m}Z7シ:+X::ܢHk`}r!>9j; "Ԥ!|Ql@xŮk}«MiDxܢ s`_~pNUjZW_?c'/A&Py|AmcuOl p)=il=*{^ f[lkj=7kHS޶L;$Bf):_}/ Gr\%}Ѻvf߯؟Y;2ᕛC+-'{g{~5لuCrL 0&�`L 0&#Nt8dQ01|VlaɻWnxQɣ&-M9!n'a4uaF<žWq;&�m6WAjпBISS^\$ / Wj۬/ip.ӭ.ˮeQx 6 =m8ĄoǶ \ba%D.u ,dg$O++jZ/lXW3hQ ]WO $]Z@ ѬY&Rr&G}6O碑\ 'te2+!JL4O/.g^SUңܺW~h%vέmpbdiOϺQΔ ϫS_C4V/|m&c9(</*<yՏKBJjb2&KQDAN{rtvڟ3<+=^'E<lLOEKh\5:ӢB ha_ ]|룋POt@V>K^%xBSc\3}|%b-~6?NE8[xbB_Q<0^x* >޵r#//ݸ$;o@xQ݆\* |r CSG#ĸj//f `$+՗hόF<%])t뺬g|cⰃȅ5rmd<cb=dN*"/ j.q;s?w|yLM5{F�`L 0&�`L 0&=,te_[yb;BE^$ψA�3mozdgdN=6>y<FPU6Y;Kr{_,& tn˰}RV*�g Zc4B b(@T. Q3S >:<. e_qׁ,/.>-^1"V \еn T!Bݟ<0a N^[qq6Vͬ΀z6*epB#M@u?ek4R|< ]m'|(S.Z?O-6&Fߧw(V*4l'_(qt.tZ-̡Nu{s{<_u+JS,eK+/WgFT};Cd)4!bϫĒWe=$(B!ZlġA u[UBAn{g;Rf!rT ]>BxYژ-Sܩ]!+ 7E(vu7! /&qG^!l^mi;ghQl@[sB/"B\3DEE`W]L~UL b)%.Oym!-_xe?t36M V QU\Sqff l^4kb~atZ0\a ׋[Ӏ}/<v>ڸJk|_w;ei..4T*s(f%ܼL}6`L 0&�`L 0&2CʡSWGu\Px{VRjqRP9ӤNjx9T0|IPT2„oE~LR"QCQ`<WM( c gi`g0TCLc?x_mjVݢEX6L"aBASXtMV׃qs͟ώ\#^Oyc rP+RB>ZSb\ u%Tn_|4 ^&q,CپT6q7/\(.mG/˩j<hri.0MWX1@ފ^ϫۯ~oE#}yVr]RյmBfyl@v۬{G w>񕪢yW/܆CA]jia�+zjxW|Z->Wv>hThikʛi ]&i9 FS=D)(T 0|&*CHO*-/*q ޹N%Tm3<?L`hB5 *Iy5beUw$;8he>rrăxc4 ]{c!QI|^3zx̩ >'s-#&>njn~ޣ|u_~N-<FbT6;=Tr{&�`L 0&�`L$Bxb]YS!XZ>'ÿP 0H\o= Z.i "rw|- /ԅ2 Fy!TwogVDDh#716w+bdϷhjPZ4W{$v<5oJuP1Sh&XAh15щHxe@J#h>x1cizz&D8?_ :n 9.ݳZxBM3vrɾx+ ڈIyӽq\9Ugp ڄh-%\Q+Z^09D}rAzj'=Bu߸T#ì{RIq,}%?b s>JSwVC}K/S}2BqeTd sc X]*pj;˛)}*Ws2k,P"q7Λ}XTN^v?Cx8j !o%HK}fD5)t! tQ=f<.1VeEYyfZSR["{;8z&.>EG;,EQkD8d0&�`L 0&�`s=ub7p}k9c8Bאܸj"sb2:W3'h4,N2"̔2b;%E8ͲndQkδR zMeWMWCR<˺/l{:('m}}Ch8IoL019F DYQ[QG8F&:{\uULDBOi`�If[lK*5,{]kɥ\߷F#ŲcQCIk^^aCaaz?!\݄�&aoژ\MгPmGM|X>{/\b&`H0O&<t$Uej]-+1<NP^j z38Z"$CB2 ^ӕ+j.h>˻;YPK7>4Z_g k: C~]VK_䉄 qҔhYn' D,aBq3&�`L 0&�`yK[>rxe+YZmiKxDeZ3^cdxZDcѼu^R&</ [O 73>BGe3*2騼 P(Z=Lc} rB5QPHYr B\ǭUR|Răr۟SJj8#xod#U/2QB[][rab͓*V %!}iAA X L,sev8E5o6g{vtv w:Sys 7Bżz?$CP!dÃ'HAн-?B"DBwʽs62'L[zרTrܥ0}M)cЈ寭ҫ~2 Y)_}*<A[ b}, gַ רZ=|kqMGю mC mY �/Y72G<\^xie)],My5[/!eypG:Q 8vթXo<e^�`L 0&�`L &ťS?œ!멝ȶut>u2b  B1͞8f*?U#e pHFö&U?9&<GEJUL&�gf<v9Zga>yͥ%*|x|1̽@ (C^e yӐCʐ+T[w3&?)}�7<֋H.enT8D~gcɣi)t]?Ax*6퐭a9W0`O\dUY^c?!*O. LGXϭ kшjü 8, }Zx#k_#}Bʽw2i $t3Ip@ "Ww#QޚX4,4c=R!ܫ"{L"E4Lefc@kdq޻+Ѕ"҅WdB=Xe M*յA_+�_pqty%: )ͩ5a F4R5,Qx�`L 0&�`L 0L$<:o5Z-rv4mUV=R_C/XQkIb\MBR9C*Q_ lxfsUw<(YhܞҦU;71A{FTp@SNESArw]6CP;/Jy 'oKYNc^G/^EK JvttY E}߾B%JR 7s/C-Y|EsX4^ݽ"KBBFe+_*?iYv %Rݗ[;d+L*BU\Z\{\Mq!d߬{]I"ZF‹‘Ge܊wn 8cn/u5rs`Gz9! B:ỳMr4Fsg=ۂmSƹI< $`lU!paU"fnO^ߛ 5%E a1s2&�`L 0&�`@9=*LM X6!'EBS9lQؿ+N%w}*feҿ9)b$PdD ~aOo7*X.ۿpT%rьZLW&lW1~xs}8:dt5Ј(o|i w~|5MREriHlTp4 6Ŀ>ԄƁ_;E.pHDx _y=bYqGyبrYu/)j9V"UVZdIWhʢCӡAMZT0+G~{{[u3[ZߍoWR^=#[ or2,'q!nupOP"mlֳryljӽWʺ .MpWǏ!e_gԾX6.#&g,BΛ=�wlΌSw?Uݜ8k'H.M!?Q$+AC(^ \=<n:RyXQQ;ܔQBCfd B.xo=^G* ZSE�:L 0&�`L 0&@ GWL^A+qX0`䂨x#恾D )od͊)XM=ڬ>c/3ϭ>bR&' =@_=S YjuO/ȐW!/¯=5Kή 5I%VPet1gԷWdlާUL"+b"cXɑ.$!wWæC)!Oq\ߣVakHȥ&1q}ӺVR!$a* d(CZ~tf򨕚u:Y}u ;5=_L2k nNNT_ a<+=s(JS/˱T9*T؎jlz]uJޓuKʏօ߼|?Yl/z{1jWwuxe<{/ON*AOlN:;g9>ʔ"%<} W Qo.>oݓ0c]]^<Q/$Z}Ј-׺z]FB'l|gs߸E zfyMR=J* k~<@b˛y>^2to|gzG\?dm'!ˊp/A7<OUE""`L 0&�`L 0&r@r $;-WA;/>&�`L 0&�`L 0& %gcL 0%Gms+�`L 0&�`L 0&�`L 0&GX#|&�`L 0&�`L 0&�`L 0%BWޘ�`L 0&�`L 0&�`L 0&� ]y�`L 0&�`L 0&�`L 0&lwnoYIy@8J.GSx=HPAT֭أ �9tt$ߥEÝ6,Y�ΐO 0&r@Dx<Dߢ|_~gx̕u)S~�`L 0&CI Ɏ ǃfL !B ġl}fE*0$�`L 0&�`L 0&@.y\2& �`y�\L>&�`L 0&�`L 0&�`L <Xz:3`L 0&�`L 0&�`L 0& � ES`L 0&�`L 0&�`L 0&HG93&�`L 0&�`L 0&�`L�`�\D>&�`L 0&�`L 0&�`L <Xz:3`L 0&�`L 0&�`L 0& � ES`L 0&�`L 0&�`L 0&HG93&�`L 0&�`L 0&�`L�(R�΁O!p?>%'&m…pQk͠�$~JJoVQ"~2L 0&I 9!'a;7d9`L 0&�`L@#B 9J ?~m>_9$*VX{^FsF/}XoBw¨[Kj>/}P|L$u7Uk/ ~NrBpe*⨽v"&<'*qvIu5ԣVxO/rv)lx ׍-xrX }sZ< Mƻ 3Qkw5nޣB QeҚ@\xr=%x\އN(.@-=gĉcޞ<<*RNX`` }ܱiv|mZO<y"My7ÑV^C#I&tr)n"%*{qyz*׸< 2,dr%fZNiM?nVL 0&�`L 0&5,te[nub8~{𔲣>Kg\(&D|rVG{Mш&TZe%;7(R/?@JKb4{]rRBŊkq5B D.șɢd1ӑ4xDUd\ꕋwhۧ<v6уA8 +ggfΩr5'j۩;F,]t'z@xyODI(KެY`7:y}yZ~Wbcqk! {{w GoNN>>!̖e˖矣…SLHHp399FT!ED딫 E~%)t]Zu-=M+Rim _acd-OC&:|܅JU/m*,̝i 8|ģ)`L 0&�`L rdA&6,/?'O)BW"TK<H8=~(Ai ]^#^s5ϮO*(6<H{#0ڽ5?Jsdoݣu˵3+t98Q=Rrtvos<[uzro8{|E=Їtt>wIh|}5<n݊SNIew B {:+V֭+ϯH !/ldM}zTi $B / ]eoXlm,/Ti^ѭ=nesW&o/c?Y �`L 0&�`L kx#kܸU*Ff}|ϓ$5yoSEArуtSOwZO,>ݷ͚5S!66FMG>ƌE my%sF6N#}oәEda K3EXO\ 0&�`L 0&� ]yM<OKArXx+%``}~;|uJad,ͽ!ѶD-\ pcىUlm1M =B-*:, a"ٸy(2KTNNGQ=T8o.DԎnӥsQs!J*B5j;S:cdD<F'DP Ԯsy9qQ{Tѳհii*G5ɣrq KvЅbۉHn{`W.F1تܗ?PgOֻ15P$9Yx?9ǃ18NDRDx<mBm\&1t`899a6 ׯG_*j_6I~Wu;W=ex-:'BS"R}q%h!^\h9g{jqn}<t3N3СaTQI"ܥ-ܤؘ$TEuSk{Xծ_6,)Çb,x/ "(:&n]V2H~V~xρsɢ^8PPSƥtY{C&&ާs�ip}+^<2C(\{ ٱE ѓ*Ѥ˻4mXy#W3OQȱ?c/^8=?9)tWP…X53/FiCӹs穢ݬUAgϞy>0fKg}"6mڄ7NB/9s.^!YRڵm{իHժU'hGW} ,!bŴކ7E:Օ֩C͚5%[tYNII3Ixᘕ+{R V!ux"8pM4:z8>uܨm6TJv ڥQnB oZY~bTcUP-ܠ-mu+DEs]FFSwnd˫+>:^D_07ܠ{o +Dn C݌O_jJW&{gМ\ظ`L 0&�`L H}8Ǒ3KN 29z.- "W7Yοu'yOliVv6~kЬ SnM#FjU!\,ø̸?۪^V p!̡ʡbN맷vJG*g.Xnd(ڙ"7(;GTFC2B_:JWݰ:{P]1oiҧ6%h];X ۓYv!1a夳 si^Ljo%$sdol6pE;6nfz}3VueVhDXTmfqV?*Y|R yuN8ġ[2̡U4_/nMO}T!,9ŢH(.X=9Ӭ勮+aJ4_ov(v6+vu?:{ =m\}ޚh}VUQ9վ,m=ޝ(!׺z=W-NCzoJvPU7۟46+SIBp) H.M9i=tA'h˖m@h! :1{ i֞i>RtDSZA~>MVٱC*^m_^/s4E4%' 8'}||A~r*Y/]D#F S(4oX'\4|:ɬ ///!7BBB7{r}ܸ鵩S羹jf=6obɉV1hs|H;v2ر/Ќʌ׬)S^3ͽi?m2u)~rQTKHH&|4s,D"nԩc/rNzc D"<trq8&- ]|}Г֘ B ^!kkBpۊN!~7[llLuե+;Bu/R o B/e%`L 0&�`L `+_&F'~:&s[tv׼<zR:]ol2CxAY<ھy cY7JO0E o2[ܡ޵Jحdq%X J<ä@qdRDڡ+œũZY<y& oYxwZ?.r6\<jҕwJ6Yi_ -dq>\*ZLl&{4ߪ{ [C Dܺg)~.^~*?}_֛58.&M š x叟J/ͷЁOQjN?w+/E!29<uH ^O</m牲bŬ/˖b}GڄѴtUT~ /(Ks^)�T˖U̶pPj<>jH!b�)Lz\݊ Ƙ \uQB˷>D ԽoE,^'u?[zg y -AhU}j's-6f7ikڄ9`e \E["ݍKb +{j0_\Exc㩣}h_^EakA`$+՗>ՁY>yJfSZuYϘ'q%u}xD}��@�IDATBL긹,dg̰+f Q r~jr j(Z*hjkkMrWT:)y; FF+_M4AE܊K0Z3R�3nTܩ8-[.rY5b?\O>ًZnEgNe-OGjdo1<=+IOEЏ?.".cw~xC|B^Hms-)jаjӦد:f?Y N; /wq&[-%> Yc^'s_Cц K1Kx2ExU /`Q{fggzNXX q;i]YvYGL5o81Ul]I]z/63V!ک͈߰߆Y bݰkvYKɥI08sŽJDֵ:[%)! ~>ɩ<\v?Wrb`L 0&�`LA`AσFܑ G>$$uHv ͨNzzؓ +^b OL\.\OQV}UJGj9JGMjjk<GV$eWU6hsfӺo'i뤍 6,fvm'|77!.JGa>'^[@zm~VMj;+g^�Ʋw!,: bm.RR' "\ CoAx1jB>'9a|ڃX]~QώNuJjrAyj'}sKr*ahЅpqkF!ÝƾZ[ȲmI?&.0JOʫs3+OЂp!p2 -5{0_q"tA G$sBAq>#gL!4ƒ6||Mh934q51,<T{Ӄf4`/l)Z+jFF18W=N]kFbYY!~Yye~*06M 4A/e;ܷNl/!AMЋ& h8^J}6ZIA\Onf:gӷs/rsh_j)'xX–rlc|CMǃDΡ!Lx}|T*Ȗ4d`e_S*˯_OWu/uUʶ=҅"e�ӗ_}#[ >}GP))1n@6nX'E.Uog 21塶rr"Q֭d>UO?WRpPpB׊t~%L%GBeNf;uJ{JD ~0zH*]^SF5W 9wYˬ}9qmU:)::DHeeW+wgdQkVHltU\Ex̓{*- )fTY%+k6Cim&~å|5a6^ϕl 2&�`L 0&8l  '`Bw:(]\M _J.'[<׈J,}Ocݾ饋\j-BB8‹LyWgRYc c^pbĻqVL%MTi.KU)3p�O+KgEj6vjm]BOh908@xp.[}KQ)^[OE 0"Avm%$$\Y_X2zeQ)6a~LM#ؐs BH2jo:x>AA4U6Y0^�WHL v>h !h #Bn\y3M ք7뢙n(77ZՄ;˘W V!ڲ"DP'äi 5h0^'ISダgiVxa=ۂ#'2 9aI~䶄.ғSuRF4Ө0&nS f˫шƄJ,lY39AճkC*?Ń\(@aÞO?VL;~\^3ڬ=D[BJޚ9LB}w}_ /-Oρz ~Z(!jҺvbBXư躐QzExyo*i(,C » m0 W̕ȅ}-[ x!aHȕ=s!e[~}yc[F6"GR\9߰ ?t 狇Zuqy]¾~6&�`L 0&H?q<f+H½d^#h?$d*!9ys+<0&+rL_om! *<2kuX m(B(�~ChUx^xܸCi K[m䎔?*j=nu\UgIS ;Vm./BחsѼglֱUx"5RnI X\2 bqR9%}[5x}?@ebت(b=L ;8jT˨v`'IxB޼Jwedfg±}e: �gc!"rgFTBן?9t5eU[X`8'F Bu)ÖR[G.Jmwcu+:0/;#C! x >KcQ"4LY线?}?hQk6R%cY)׮ɵf֟gkaYmlY`@lb' &>"oUrN]ATݺvUŹޭ͞<ޠgРiTV-*V,羧un<V, j? 0KCE˄PF9|s+~4PhNu$u{fkՔaL}ؗC)Ĉd4ou:woa?rBѲblL 0&�`L 0� ]x)Qx�!Ċp//-e!ժeFl6baTlPSzv]LZ+S4j;#Re쭪sЄDcˮ!Er]y`2׏ee p=KKSժ彻tZ+4zƩP lgC8Ce/6&IUZzV5,Rab.%\Ѣj )P9 {hӕ+jCyywG,rFM% !G9rl6'A_:"1W)l#<)lЪr(Mk,n[ȫdɉCJ4i߾2ߒ%Kivʊ>5kOI3 )cV;ʕ+g՝wѣͲ{ǧ=g̩~!_{mϜ9Kx-i<T._.lhuMKJKJ6sN[Tg9gB mJ-u䩙oؘJ'�`L 0&@%`>V`O9u]i؞Q2O|a[@BBt~ZEn&N6~b2I1li(>4qg^҃FYf+RP-=VW|͈F\zK: KRєZȩ$aZ=Ҫ}o 73^pUs*y'Ϭo0BÅeVR4*}wem,ڮlkJy}W  nU/wW}, YN-BTn:ҍvlmi�n y:?Tmpl�G%O7*rbXhˌڿ|G Di"!ڐ[H`'6REi.eqf|9ͺi,Z{h:gj521Ѷ D7K+V$fs$ދ3=q˄Џmu!ڵ_ᅰ7n֮Lw6*Q*>@zr'ӪIfΩW=ɣM%BX8c9u.q6‹^SPK>rZ%<1REd~}:CͩϕL0&�`L 0&\;xeE:'=a +_TTܭx %7;V3}0ICX<M\8(G' Ӟh7B˰~2geMvʆaȏ:am׼0VhD@x2"gt]yeXOv  QRZ:EhKZrb_.R8 ω?"쭹u !ƒ z;u1 \5f2dg{e׭.s*z-]x 2DY*C~WŽ,ƫyaZgE"owNF'7iJwGO<fR(.<`AAi{1\Zjk(0H 7Vݧ<BBB*<-n؀@cC2 .vZǭ\YL7έ%< 0_ו+WVp*[yUcsr,H[tsϑowU€p#G[O*T\pPjkKTǜrwR\]>`VNqy?`L 0&�`L ?@=2=A`8 /$r0Y}*&PmUSKRֱZ\Qt%'Jlۗg X߸Gxv?~J6 Wxu +SLFZbr.S;{'7,ʐhJh:ux{mrÔح'rt_Sro>zN*RX _V=pWߠ'&pn#- yT_"~x&ٺkDΜ2%H#2'_K/ea1Yݦ}93͝ul-tyJ87A Vtm_H&/$c8?1Y9iPV*TWRZj fCY~vv6TѮ7rg8qRRݸq.\6eɒ% pu:^ٰp%ԶcJ>U ]8cDz-tUZU^|dggzҥK\Q3w>3tNBxS:& !\ԟ}svUeN2MWL)ܮ3'-!N<ťhgRmH{CI.LZ6΍c6`L 0&�`L 0,:Ǖm[W{ө.Xli{'8 E-ѶοtvmꔪQZ>-ۦlC zyQP8yD+!CӡoMzUR4Kh!0 ,$һLԾ,&0a{PVr?dgtLf wzY=)Z8Wp0XPS7K&&r/=LeRCR34kcq7քgx0&wK͛}F8Nfd+ O5' w^;ANGuPem4Z baUeg%Bh*׍ju5alcq k cu\ e|FݎS cUԜF~QN7a+AZ?OɯF2:ƌ%!4!^RRZz հaCjذ<'ΣX݇~dsl( d4x:t^}u*EFߛ6UVݼyJ6 ~1<y]1UVS\o[5oako|(+T@=JN}QkoGخFfK03VJ)Y̱>ߎp2ܴ\#-\1"ꂊL~+.=:"BC*S%`L 0&�`La$PHLf3x�cNӞ5.) qrr=Xxv9!GՃOݪr7QfTHCUL "}xU=^EEOyX<:t6qW+C'"“*h>00 _'x~0UKQx7D| c/Ng>tErީ$9412k n.8'X9yЭ ◲.RϨ<]ad=mɽRqjش<OåbWGA\qǩlԠ{o"[ҐQd1tk.ӮB{0 D +}9n!؋&NN^j8[#hX7xu|^gԣCL,`mHȧ<p(C ^3vwRevi@ABO*Y^ߥͷL(*UuРtD 6w?8΍7KF]̚|~Շzȗkʲyٿ+tܩMrT=!&;بdx=Rʊo2g~˷>[^R,~UdwUJzR=z6&@|t+f+pV,>ji"1v& x0kڪ 9~[n( +oLv BSU CU6yzaM|Om(B0%[Žݧ6]yss߈><l۲1{ڪVt.=BҪg[2TeqsN=[7}F ))E)9ײzW?ZĴ (x^A8 J _xQrq1y3UFk^cjҤ1={N?Bio юdB-֮]K Ov<ʕ3}'c;d;KG'O%ԪUK(8`ʣ =ݷViΜ觅?֭[IfDŽ`u'i/{Vky}adޮ:u5qquTN}VzyZV䓏i8xDmJD.eZBW6^ye,鯊3uTCUDewD;HH̽U%Yʰ<Q4~^Tzi** A#[UEW'~ú5,Gn%ӷtJ ỳx]��`L ((p1 0&c/О<ʧxu_H"~#2Gr|,=6qcُzײܸ&jw4S+#"ǘ]|J S퐣@Sy'z5s;|B8.x!GDN*xcYZ|L$ a *DW|IqC :~3Y<|W,)R~Y8->x(Gx;e!VFeơU}Dʐ5hC2/'!>^#Ry= d ATX%)L 6D[9n {e1u+F+)r+@I<E|Cq\$R^_6O"*G@evvڵMCIUv—:tw}j=cMMu/7,f#E ٬uYZ-5X+UrCc󞰼_p7<AzJZׯV2,PX v8uJC{*r¡}66M,cpoo9֝fO=.+ _/QWBcq;c,[^[?lO8^]~;;? pT^ ~ڷ,=jF_?%ĝޥU_BDA(zWO2d00H6CYvC?IHJP/0"nGB 7?Ғ?ܹ0) V吏$gg}|t2RLSw*͛7m򃐤$KW#5j)!rMY6zy*A\_X2~+a󬜓E67!Dǃȅʭ^f /*:!:H7z�+!"q7nam]<$~?:q#_C VVUa!-0N0+ԭܡ*ty2mzik'/Yj5 Fz�`L 0&�xGW2?Ih Dk¤ 9#\B 9J ۑ*d,7;E.-er=I�X*'< MISvC| +=q wEtrvʏcC?Bpk >卖@Q_hޕŝl$=6Z+1.a98% o[ѢTmt{+4jv6 Dbb{ϞhQRH9rY+ֵk~2 wpG!ßw(A2 :uӳ2.K~f!Qtt4*U*Vm� nݺ%Υ/_>C R/>ϯkMCS#WH>t]9r3#O 0&=�x`G ]Yh܄ 0&@6@ܲMmjn8U!�;;k/3gџ.N;… -x d@Hd'!=#fL 0& +(Wσ 0&Е;wxG&�`L%pxȝ%<א9f{+ȕWpz}5N aF)rP/Ox)=\<KoI E(�`L 0&� _dfhq]&�`L@~N[W)[or.xtm޼E,{.rLy7kfYL {Db[3&�`L 0&U0 W]�0&�"{ɴwg0N7R̝ǯNÒOLו ~~~o~pQ ''Yoծ]F .bL 0&�`Cr+�(TBp5 6 и `L 0&�`L 0&�$$0�x(~.:*`L 0&�`L 0&�`L 0&  saL 0&�`L 0&�`L 0&#DGtsT9ڀEL 0&�`L 0&�`L x.)`Lr~U/4`L 0&�`L 0&�`L 0& * bL 0&�`L 0&�`L 0&@'BW|zL 0&�`L 0&�`L 0&�(X*Wϋ 0&�`L 0&�`L 0&�`� ]1&�`L 0&�`L 0&�`L(RPOϋ 0&�`@rR%%' pdWA &�`L 0&�`L C=Ļ5g@*|@>~ JGWbL\%:|%Fde-]cWD2rD/ʙaԳlujtlWp?W>ABb; +Qt=FCxe}]] tx]<vR=_?& \,ON\ew5:uxG-e~=ezux_Y;zM]ںv#sιu^FDv\̱Cu4޴4ǝ͝-Ǿ~j.Ֆ\SXH<}'WU:Żoft"~etL ݡݾq?]#8 24Sxh05>@~/Cm`L 0& 4_=m09eY@OiOJ w}M6+*L6MONU#Seq~+^vɉɲ Rd`%9龬u0Afy^E ,GjHUJb{"I\G@bB2>#MfHOy c6bi˟/.輟ZfXsGrX7ڸjq l=DN%\dQyJZS#~/NJL4}WǓ?k+޺jm@HWA >ͱ\/\N/ D%GEw]RvM=|^Rih팹EGL ǁ%6NLpI7N2qQ@8 <Q[{fxψ| W \ݼGjNH^ڶ~ ݎ0م,spH�`L ' Е4I}q*Z][E 9>'{ސ̤:RŊQ% ۱tn\ƕ?\Q\tCp~lP>Rm;<ׯҾS+-<5Ox\JqpQ$tЕ;tP֬Ce]* {b88W1Wat^d)ɼrZyq8>"s9\\QcR[\P [(;B Ie\]^H!nm\7,9(A5kף mAlL 0&r�%Wr@1WO֯ `@LG~G\虻TV#E.Ehȫuiu.U'?,kkDG~ #� y"#4ߝ1ܶ2nr.kn xP|<(]FxrxP> }<n# / j\o_toӼ w2*SB`L 0$BWn}X=9/o6ҨAq&!SiCtC ,T BoS*dcwrSb (b( #R]cUlLwoDR`s)Eϵ}u*榅鱬s:וKvDi�JFOm+XYO*Ս _os2}(/J+FՄ7JVTp?DCnvݼz*VsV]+P6ѢCE T3yv J]ԏqj(![ƥsQqBQQԺ{Ew#0t\ `yeʑTx*ics(Dh³.E-]vp/..^IwnS.Tϻ,uwLm½$:=Eӝ T=W-A^I.6;|ݦ(*X<KniKo&C g:-�q4~<5hU|NEѝA,{W~!|N&?rRWq׹jԯ\ڞ7(Ewc=xX+G=M\#oߦp7Y/.#颸noc=sZ{WdX<Ut$:.Ta)*.[{.jW&GDxtd<=NWNG2ҨouLDޥcPnx?ϥ`YCEvc фuyGQ|qQB!JB ^X(*]T_ D{o!ZBI(\fW. x/~=iˊ(1qK &[٥oD^i)||d<o:_aLK9B;m"xyxxR*1TV]*t$9 +ښ:9ĺÇ(aWOM_ۤ9)[.1ح}:IS> ز&SZ P_.Q#??]Mul߸VP;u7 p=c\5MO=J׭T_`=]sfz߆۲x/^Q]A|S'hOv|&#X|�eff{?F[־rsI=rHPkv0rrLAϔ:%oZGǏqܱ_Xa8v?>ZFoϕi|\:WV=^7gL]/'>nw7RHX_;5sGs4MGp Q7mit TdI@*ff7ߴz9_+ePŨjWN9{m2EW+o sfeM\jRD(._u]Ho!@QH v\MHP8l3:tHsIvKB6jήh#eml}"+Vr)HN:Ua.޾ٿoҏIw!g +Uqz9}ZKa|40>cU't<^EՌڶa>+FR:s=gqM8Na|qn\ڲn$(8joʹg\~;ıc|-ES՚ra{>[|1{짌'=,4jЄJ#n#^2A!T~\.}s?~Jzy<~q4 M^OsW=gќ2Rt6$|%}Lp*U MI(GMʓo炔S T 0a=oќYjBBaUN=ѵo~~9ω-cJI\|?<򳕘B@Eڲl?!p):V:0;QQݳ.ޙO{Xaն2BDrd<A[F) a!rHswdxZwdd@nG6&ٕABIPsgҞ1h{'ݩ vh!*^*Aٜ!cn"aH5,H|4tBlK_/b' ߢ?ZʱP6Ji Z!s1_eU*SƗ"k[Icvxl! 6oOlE?*nfVi,#WҦGwoߑcΰsC:s[II,"ڰϛP &}Ǯ^.ϴg/˓7mW)_fwM<J?rF=xI!kRqlEZwon!W?xj4abWQ۩3S)n} ~neF9O) q'uVc:9g0DYFG,cBgm:ѐ$FMkg۹1d鸟7w?|Z%2| 6 ]@_{>=0&6w"?c{̘NygߐH[AQe )ڪCƙW3Ϣ7$: Eeq|4Q7'̛1~rSyͣ_jzm^v ^XtCC pVi慧_Ӝd/3~#{^{bNϼD%Mf ^<O')Vi8;~ޱ{~e3o֝T'm[aí9"|lϾB.8v>_kͅpMs%y!CAq_~l9 (Ƽ36\jnއ螇4{: xo%F0=Zl{ :L/M;FpUyBx{aP_~*G{5[8v` ܾ:Fvʨٴj\7[}L?6/i,Y~;m{�سVdǼ a}lڶ=ls|`NR s[8/ݧԼTę7zrO_Om<~U\XWX,w9&C&wպ_˷cו瞮̝'Q=ÂS_ׅ#>6]n1'y$s<&]k'vAL{us+4M}F-DIk;mxdQq_O*W3J^]/[@vT{IuRBVl~5Ekmܦ.fXX4gu5?誒l�~ xLjT\zb9G{m͞>JV5D^ў^+VR/Ry3YcZ%ʂB@$pc~ X5Җ6P"?�Dp{^i<oN8F=O7NJ[jJ-ɴG~sJeoW"<ꄨ,|m]>wќݘ4/Jfy{9c hUYկ˝>pțaUŅ)zje9AhHtz>yPܯʞ;|bG̵K)!вZ][?.%Ǔ#C'-z>>KcYGEC4~ Z='IykOvӣYW C,)#N<z-ow7c7nROĞ)'˵,ExݏnUKZ?<>xEe3iƏ{r]-H_A+ߚIJ(ÞO Z͈JB=SE,J?zVyAg >Z@z_$U]Rt>z]34N?<\[QP%x < w ][M<y^:o zk#URN* ofaO[T?VD:[`~֠u a-52x|!ӰH`VLث pauWަ/j'S/sٞ U ڀ2*ּ y0 U=ا&C)(ܛ๵ei}zm87[כY9XaLFH;D2"=_t)cI/kvy09֛= O"Nxfx`8셁K ;wW OYu=;6 jYPE~n3 լg}?w{Z6o*P\XO3* GBh#Yۮ=h9o0^Qfm $.z(]|G{ˎT>GM8Tjѡ+Jo{s/7Z< (vǪʀ0ʜ‰ci܀Z8=˞^<~L1W¨!ǞQϝ߾\ͣtٲFz`'Ӝ鿫uPZ0 caMVH͝e'|b:-uCi,.X%TΗ?eگ?"xZijبOyzizުs>gLgM:! :KQUk'hUjakX܌Wx}߬Շ#TePu-7N|u΁œv"Χ}F|~ר1ܦV]tyax۽={qq㷩M-s_:Ka/Nkpu!x, ��@�IDATP]h;?# B(=۷*MsG#Ͽ~MDzGQ ?{vA睭F\ ޽0nuܱﷲHZi;㺂aJ×Q?L1^Pl^!Tuex^|I˹kh؃=]-Kk-P ri |_F#Dzs e뢼Ҧu+ԵyeOg\O7vE 9ݩב9{߶,<|fyƮtc /v^B 9~ e7>:όSD</WdL7Uꃆz {h7>C ^geYGu˳;-K<؁׫w% l>M]JK ,=\WPp Le#j]tco)|k) \_GעסΟ;ިcjU(OspxŊ*l!V0E0!B@!  ]E 1[t-Sp`jKT+lL53IƽP/ZM~ZE2j=B 鄇c.PԎPm:px@ԥ ȅfM*9y Tygĸ+ ]I( 꼻JUSeC:?F3KgJN:GӀV ?e)R~.]''}#{Ziz}0'~&*XchX6>쩏dI6!B#О i^E.b75Q `ao0?ZүC1faUoR+v_q2cJ_b] 5%?Sk=IXCs'/^`%!E*s5QJ^@(ǒY:Y,"`ɢԊ8|3}jRAՈZp@_p}{k!tE!r}X#Zurweubqּ"F`=xY=Icն,A@4baՖĽ8:w VLү2|ާ~P\%˸5m X]NԠ{-V9%Ђ.7g%,w n;8'u=J{];ESSJ[y@ݧwE~>9Y"rWe䰀M":[567ƌ5==Ug)O*YWѲzN S%eE.G=O+΁iPj,Y@Q aѴו3]o?ҏb7OUxVh=Pc$0fu36'U ѣ~l>@Ocա_-L~NGwd[-m|M6y QzAJ|XcfkV"wOˎ6<Axm8pj /ox4=^fq T[ӷ_)żn"f( qe?=ڹе`Ɵ1[y@x8?A7jИ=2kD е8uJ}W»my�#N2BuzyJmYg6w8<i6W=aQ>{e^%iqHöV^[8~,f&VMkWPzIn'ra94+D8g.uz?u>?NЈU qN|g?wd% `5q,=<X{woh g{~?U[!ކ8G`yk8͟96}6o3W{9>}P b2~O+1ּ^yp)jN2]o2(/0P? ay˴ZTMK7MDm#iE/wm"W"-W ZK}} Rϖrm*So-/uU_lKX( i)y*9ZTXEDsJwQmĔ8u+NK/WOYsXᾆ=y^2J;?s(!o~ZNA_py#IRrۜpb a׬TVT~1! W'V` qԼzЎ+ PQS~s*Nh0y[{$ Ff8ZP2qgQb xH]]8%; =-?$B<ԂA@s&l\)K'MY6 S8 bI{d<fx=E,Uɼ>!Lc;1[cKr贚N\ȇi/9ўS+<̣EpchFGB( y!r鼷>f!%Gڊs )s4`2 |gz9@`4[XЄqa<&<` [ Yn`<͆t>nC\&-=aOZڇyg10W۲' Yh{ˀHGEثŽT#ܱ k*J6axdQ>sJV4aȅe\=8OjI|_{kt߫]} Go�GϬ2GeIKeݱqFp9̶tCN{#rWgWܯƎAFG(iɋ3WUf]0FPfm2:7ȅ)g86yh^:+TN漏{J:xq6Ɨ|~/nX[2D.,ãu PwMwa r،Q?txX#l86C؎ 82t|k1q[ Yߺsk^Zf7 R_MZwpk (s/\muмx}猭\<WeV87b#{R9<^IqҏqT4-`Bܓa< w㟁Mm:Z\*3A"Ϗ0ʸP<#5,1Q|wQw|-':`375548{w%c?!raY^pIMcy8a#k}{Q̏J[^&U nWeMO*O"[u6I;7"co@]%,r!cct:2oUq=AQbVX@~ּ2iZяQNV"yw3!0?5BەC30oM[5O4g(Usʙ2ySLp_>LN;Α%s0s%CxV\͞ԬUuR1dBJB@!  @ސTudħҚ~.o]`9|&*8ٶJPtl!^̜e1m;?XD~XNĦix.mBp15 ,71-,U06̜Oa)lGܪUL UZA.ŔB\Ty2<:TevLOI{ORt%_aL3Y�o۲"^mվ}3jVrȁЍfUkbP|x`.s>y*(< ~r%jHQ01qXCIW2 DLR6c4ggZ Z ,aI;qAO;|ƨgەנ5ێr2 sJdt^v(i3 ]cy/=AG8BR-?i#檕.K?J`<1[9m-/ǩEpxu`l:FB4^0xֺugFnT}R |*g[QS-)u>:8i3O;ԧGɷ3riQ'TUyekBh7xcP5y�{#;yx$36ZƢJ_]Uv.nJRYZhjFhUډvʶwϑăt<=auS1/VVpabjgoAy5+G_lLY˵j-0v0xlXjNvy>5 Akli) o/j^9/k?sQԺ]Lhں ۃwcBJVb%uaX40%ώ&'!*Tq.x0a^%}j1̣ZA2Kh{MNt~}eaO!ހscQ:ߦ\OUqvl-Fۤ|YY]=Uk5RP 5z77ss 6P7,^؀0ʿ#,bG_PWьi'Aa oK[sm=&oQzɧ{L=eWRu!2v[~wM[kg#swwCPag2ʡ/##>Mm/̾mp v˫Öt=LHGU}RX x[SƝLq~9S^rBJE3mj֦=PYӳxc4Q]#Y0׹GB@!  ]AyEHh'TK-z3,Pi]dcnUЈo}!LAm8œ¨\;\2d̥Є;=ݳtRW7)1Њq(l 2xxZP7ׁsl߼~cړK/;c4f<$WsY9o- ZLmYXL؞{sP4u*,Xq|W}uQ2{Y<=4V>i_=>99#}͋:WY)u4z{1E8qrmxڈ^:rPI|Ś۔H{FUPb%x|o$MeSBNJ5Jt#L9K^oi5={\&4s/`k~1 c۾qn^\MoJڹmJ[y15:ZP6W 5-lStWZP0;Ghbf/6>Nc^eKs_XAՖ;NM/?oJ$+Sa1rAvZd &yC^tZk+W"%{y&| Pp0\?0u'n%XږǸ` #y'˥s%YS'N+V̲�!O=dxtiϟYFp7G ;so}%?ڥ(m.i>JYJYBH+;;OI-"!ړ۽3k |Cc>5Val٫V\GxؼN]3ٳX&*柳.KG/UIQ72;tX+HXϽvr{K:MO3m:TQk%MU_!Ѕ{T5)ڭr%JLYk<X0}ãrS!Z<2B;cu8`OY~ߡgMWնփ=E_ɇ9K5H !  ACꍱx_ ,o[Tx ojU߈nIj /ų<.gZw&ijۇ(} ēzJ! Z!\SG oOc% )fе}K ܑ =j f0Ns%dΜ?.TsŬJ\Sd 65x~Uaj7 inubq<ס 3˫CM\M:Okذ6/OQ5\fW߶cEd ^"y6Eeosy,X9vj/X?{5{9evIF"W!T14hGn #cʸ0.\o8Tu!NJˏpa<Ogw ĥ9KeXrعUΝ؆D긚vr{2s5B`HƠQ/6dС`h+i[ mtҝ=s֯X-r ܱ^.@DϾޖ*iyQ<>Nn;k[ƫ3;b]6 }Vmk|WS.7$3v;i%&vzY^Dƅ l7}&`柴m0�Z1_c5<1<n}ݞ_ѶE |y_"אoqNTʯN=,ٶۀrIӔ*ϜxcWܰ ŋgW~[̴qg9} 6 b#͝sϝ'CԼv۩hj?S\GPeh}c ;ûBV>z=_+<8fk^-ɶ\NEcsUgĩ)uI<ۘI%h;j>+Hhاdg7mKKy*8 dVNOy,8,.;OMZV^3NRbW\6k++v&  PizV !1,y! I [(ȭHW�9^6>5LISB jg"N5bfc<,WY >W>3'T>?o_?z%K@n|.ۅWPanxmS o_y|AfO=dvYڗ5J ~|"t1l^Y⍃M)iliNjյ7˻A]^w0~FNNwONlӵwYj}'XFl(˛]_i sL&-~F>aX>+nQEH֘YHXRƛ22g͸g+gI?zmfγq Sx:!TuI 7M}zKS7%<Y@cҐ' B՝<n۝C9<cYNvcuUosCT,"&Uxejz UR&J1xxd~Tr<6d# '=J[:qFBba[! @A/ƱcyNPWu+S;Ux<][֭2³CK:E%op3>N9vIwBNZAsCuMb( _v0R{�#X:Qstu0Zv=5:48|ߘ ϮX33ew4}{<V[iȴjPhՅ2mY] yǔcƔÖPV6 g Ii2z+O蟦RI=mu{>}7uq./TcX[P|z]ziSxV6xe#,,2B.g^TW.kwa&gгPuO;;={<<~sX{Ezy(b7xZ~ |J]hs;"[Fz˝^̭^mGWU/uU* #0DbNF8)2ӸVQiERR Or9.uTr>y:ۙӧ3H_-,E}e:2xPgTa %ח=$&Bjpnl@3w̵Z(51"pۆCsk~L3Զ+YD+ul}v'V9p̪O7cL/Xm:٭)6@j]׮u-?@q yF椭j׬U ]7%eW xlmMг>c37/K1B!"y^hf݂Jt2}<? Wc}=;3Ý c<jƯE(c^-Ij-n޾y. cUkplwێ^ `5mk1x`٣p4˹s{fZպeUۮ",y[k~"WP(O B,]23 6u[мJͣ luߤ'6j֚6nn(ryRr;7ձgnG~͟9}ڨJ{ <`y>9̠uٖC>n,]h$(30nV%rᬿTr~ׯ ewu*agٯ83m_?3`<{}ʨvǖƼ3aTQIlw!(7/zܙ%ν.^5x]>j835W ֯ZllJ_CF3{O+E-[j$8S«$֛4lJn۸5@u;Uy7Yᰌ+u) +dlЄ) VSOZ e~'K ȋF[*Bҩϰ~,0- YbG̥-/Q"3>ךڭJ'nA8Dr;9V^wt;`5m==ӎeZp6x^9tVmq}wlWˍR/+eF! U"P*mG6(0jNwڣ`-iqg$`X;: [~vWLr?m|O0OZ7 ٍix4x^hyXW }.T^W[Pe=Sϋ*rg?xϋ{S,? !vizk }dNwu^dG :Ws:q񔒘omoyoFZѰg9l#Ms"7ZΦu~X՛/6-\/=)u[:ʛ,ƒ76۵A-C#ML"p݇ }}U8˲ƢB™SisU~õ*ڶ*ff<o>;a,E*p{s !F$VDZAGx/bK{:ܠ8O`|.`gOgi8nyߏeQV}C'3 ~Zw%w$׫hE;-t1,/noj5lDj50]ܤiڻ@UopFܿdGP'kɎ m7 ‚B-%&o>wܣY2g\lTyà1^p*ϔJڦ՛:=/XЏ}Dq%Џ~j5M_R=Б? Ǫ>Zsو8сQVu9q9*y9>nmUs hDBx,FF[ۼyFZuFqC^ƺ>cM݊Uˌk}Xʎa6 +!J<y3]4ި6>8 üzӺ{1xc =ܯhʣ;+ӳD.EW<uxicyU#bVNqz1K,0 +r/VZL ߬\!Ls9=;U1-g.F8z$AP;7D)p6t-/_m'O3}AF2 M*,t_fXw9]јiyΌhќԸ/=ʞ\}xCh. '_ <ᱺ._{T  JQUsڬ ! (P v(W">'6'`+7؎T/hs-FnG;alm|\9Q zG~RJC)B\8G) - Y3: 6TBHClmly66(w\p=OcI1|`eA%~{Υ$/SMix6ЂG9kR|/9xvb1t঵"o<j7$/ç5x^ATozo$}zЃ<UVu0=%Mx}"~&G$RpyںhOvGUY cBnc,B-= VARt(q|_ &r{E1 PT2Jع1Mmٝ=%ꭙD#Sjk1BxGؠ )vWo@;O&~5o4>sa|ovGi9r%TܳoÏlr8ϘeiǺ4q2մ"- u 5*t"6`u嫔Rj=͖Xo6xtA@S>pk\hIueDg{O'>0\cWuu{3#圇ȯvvGەX=BA[6|91ϯGL!X!LUۮ^Vv&tԺ 6*:;Fܰr pHb+v7 wW<<Kͷݥ3BgmMhx`A{~[m:g}(8kaoB΋NAÛ<L4 OG chs=Mq.Uq'OD(*V8Ajթ{o2~#u=,p]3D.cXZu 1#w$iqNb;G<AtU59ooS8xRٵM]k.q_'PdB6{l] /7G{a쭸-7v7rZKM00tcf(6$xiCݯ&ys5EIc U!{fi}չ'n;mWtu!�]i?lX{1oXM,nf GU:GyCHYSݵ(}Mޅcg֝[.y=`U}˭S=~=!sq`BCp,5ڡ80.\ Dt].s:c+piv<'-\^Oi+-镪`#5^)~k/j!ӄ9wdYyxszy0 }OI=1 ψ]-RQcQqOQg` (VR֭=Z'%-lmR^A b[@s˵:&uyW|X}ޥvӓQpnѶ݌T*Qw<w(?SY Ud^! **µ1?2[`(jݴa8Yɳ-=Iu> me`S!<6חxS; ټB(w `M[)檔NYbQ̧,]FO+?ڔmffq -*nO/_@8,凁JU罵t2n)vE|)i"m(%蛥]wXaxa햁UԏLzc<|mw~mE^:u'>:_)Q4H.k74R緻( !/? S!8΢>mJ_ hCLLK(Op`)C]q'͏qY; k?6ڬC`֔p2˓eg}lp?!q͕2-jL'=h;KybʌLUӂXXVZj>c=XS W0u ~]dϻoGl6kK<3mޘ5c#gI֪1tJ,W٭kj,jO_8.*v[8W[\A }u/{ >?}*1j嵞V+\va wa޴7,6{h"#( oGΝ F-kae~vZeLLMו(an#<hj7ɪv=IQ5byd'Оt1^|nU.oW;ڞ9<BO4_h{g`ZxpmvqFo(AD{"pC(4) fȋoR wb!WTTcZ4]{Ho!*iùܬmgm-Lp>>ziu<!Bqx:0c\|/韩xk e!ԍl`0i'q6*7[DC6d UEA8&>c>u9M~ ~'By a{<H̲99_NyrK39|(^)4šeHO,iˆBT}Oi`OU~Vmc/S>M~֜bӽMc{HO1zz)|Eˢ$Ǝjf5^ j_i{fZ/%a|.OV\깧r /| px׃_Wf d!<͏M>5N�8p9g{OAS|9;&-y391P ~hhkYIҿֿ!!j̶fx1V[q_O.Cj$5 M玜R/=K̿i =6xݞ],z<7\>`ĞRS4hЋ2 ]yUF\*S63SW!  "g)<m*-`.�pGRՃ[Stzqz*B%xڒ,tq/CCXa B|0 ڇv^Ng0Rg̏<2Ry6gP*Y>1&:bL{J{PXRJȱE> t"<{%PIw*Trpߎ< uTx'Mͼ}XD P~e_ :>'x(/ý\bb,ŏEbm`BȞ|=:CeJP(_%B;-<Wn�hGϨT bOD?禪p.<JX://LZhS%kN8Nxq*ϝ b !|[ҁy\ 6ym/::Ľ U:ZU69dŋ(B%*g_nWC`ϝC8# Sl"[8S/9 *{*H ]>xIkhr '0$̭]P'1Ō`uȝt ι ,Д4M킮 CHO=`,ϛ~^JxTҎu=a-fycYg-ߗ|Mo(h! %.c+ЩN;q,Uy-cr9BH^eLŭV`n[o*g?t?F>EL9w;F s:Ng3҅L*BU_G/HS‰sB:ۿp=P[nca<©])=s`+yN roIB@+*]WfeC`HB@܀. -m caC͟[خe! B*@H(h_Q6( ]yK m/RYe罹>P0ZIIiSX. pHÄ9-tIPHB@\{tn0B%) {tד1IB@\F,]Im8mxtE5"D.Rv5BD +Oѣʛ0\7B@w .9)'B'�kCcch`,B@! U"�k9cx̶me:%PGLMmeY! 5G@kIB@հ]0%ĞcU.E ۇPw\qtB@!p?d5%%E7ۇuZQȪC(-5""NHCǝ@! uA@r0Jl`7I! B@! B@!"sdB@@]~tU! B@! B@! B@\OD躞B@! B@! B@! n E.@/Y]=2٥IB@! B@! ~8II! N 99Yxt]GZO! B@! B@! )+%B@! B@! B@띀]B@! B@! B@! uJ@n ! B@! B@! Bz' B~eB@! B@! B@!p?]ZTy.l?/].\ָE҅KvKn%B@! B@! B Pkg/6C5wNRK/@#}޵SRt5tE*W#|J]3~i#XvMnJ>b& B@! B@! B@! 4"L#Ys%B@! B@! JX|O*B@k@rrj.6Z! B@! B@! 7<nS@�! B@! B@! B$ B׵yܤB@! B@! B@!  uß@! B@! B@! &fV䀗ٝzT^d:u86|Ӎr-"ޥ-/S mD C)\&^HHwNzT5KiRrœxJ#FX|TZ4*S5TU5Z~Ƶ1V Ы_EQrTu)FqSw֧SFIZ5r9?ynGEācoԑSFܾ4R0 bdo,%#R@�})V6 \vƷpާ@BYG8>d1;7^-m~o^#f*w>O`3/G'6o/R߅hϻj=yיAZKjJGw1_=tJ){z6s[Sg)Oztl9~?\XcuOm 2B@! B@! B@k]ȁrӦSFPu_] b#ھہ oi DAfv{ˤr5ًe3W)KWVy7N:~)'\_n ,hοQTh#{ϔ;iոECmimu+X_}4:Q``θzlnը*)sw$ra<zO,JJЋj(A$BWnۮς٢W|f��@�IDATpϙ]T}sG cޝ)ihZP:ehTBR�|]僨0m6uws_RvsdN;B@! B@! B@ mS*{ru'LsNqhkgWW5H5(˗ b^w73vQ'<~CںV*YJB"Dj !l]JBzE)*nJ$zJ\HGTab 1w6ݠ<|cfڶbc )ǻt2$k_W ]:"aDF][+Ϻ~%twf B\~~!r.x5~k]Xqcv)Oŝũ Aد5`/%߰R("&B@! B@! QH*"%p9psh/[2?q yKۥrH eQ';{V3DT;j3R]IrDVꎣvqL^d ^eKr†ꓲmX@8/tsX 's+%*){590uwצjr]pUoXpa.^qѷT]|,R ] UBYr0?pI[;vF%aiЙ:XEQ fm 홺3Uy6xp.S! B@! B@! (D*ŶIxqٖb.H3uRӆC0u'Gݵ|-Ê,N5Pе8P 6!u%ȎlNα`t%<YXQ~Io-JAXź27M%x鐎.:aܬs[a_Û<J :s;XLrK|}\<sQ 9fB@! B@! B@!PUu/.sNcPֱgN>2Gj?PKN" X 巛1nxʼ]W .;M?u8l\^^[:3Oq6~N>VrK54/ ^+[W qcs`oĭogƩJtھpT�1RTXϻVci9*l=~l1#CnЏ B\Ǜ<ĄB@! B@! Bpxq (Iw֡8XIUe!=-bMGOOq9Yua(iy: m吀>SH07qc+ꂷϩNϞ-?mTatA78!nOzF<L9OR6Rw:Y tN|E=1֖6Ŕ3ښ8bF=Y$ۙr5]t.O[x ;g6\l. s>B@! B@! B@C@s,e6pg}xi?3a<t!MKYC,K2[7/(]B-"*A8е˵k걧3VRthAuoEBY0nkqEx1ΗV -x)AK.I/_&///zhuVGT/MZTGv5n,Vu@Լk ^ZF ]glFO(}t)< tXv?7[e:8nV*O-_`n^ TO?N~JW;[k08HXoM*QaIB@! B@! B@K׾hًÞv9T3`>JD >t8yΦ-G4`CHĜt2j홱˩qb(C :8cABT߷>S9sf/T)Shj&zF *\jf;)w?ҳC uAxh>1~_0ZFZ||<%'1Nyg _b -tƖH y N~rRIR"ҚsseJ+E]:RYVވƘ~gM52zvI=CGS> nD R 4! ! B@! B@! -UȎB6#|}IӤy.SJ@LN#=n3,'ЮSczM yPʖP<a={tA%y+ktS^dtQ҃s}FU˪\%zlE;< r 3J<WqB;W~ B@g(KK^_D+k? :8K \ ЁEQ-]lex U0mbTFəN#|P.w^D14OjLV"<^M[qR\i2B@! B@! B@kۓr.Z!*w/ŽS^2 ?ҟnҗ॓A$w�fJgybNŔW:XT1ZE D/LtXsH@�~7{n bO{'˫UX1 E"E8>a5ܦ)ya3k*rss+j.[:.`8`ۼ^fVl~s u𢂗-<rhVǿrQ7O1N= GOQ~*0 Ǟn;X" }Nc=w쯘B@! B@! B@\pص8f>^ ;rVJJyrj0W0C=g) lYJߕJ+ :r+[XMg mP]?,1UFI'W1(^`;y}p )Z{]ȍ8gU^8Ό%&$B@! B@! B@ɪ%ӻ]HvRx ̠P՘s) z *ra#$<5 rc.5*VʹYXhU@E.4b]``7[*ńB@! B@! BZ$ B׵xԮ6klӷTH:RA =+](MN6RP^Xy݃#hl P!})/B@! B@! 7nc]~g(YUҼ֎YEnЋ5(3B@! B@! B@! ]�Qp@㧚DSŶJD[)%!ys5FVɀѲ7p)#B@! B@! B\fb. B@! B@! B@!  dՒ= ! B@! B@! B@!\%B@! B@! B@!   ˑv! B@! B@! B@D@.pIf! B@! B@! B@B@r$B@! B@! B@! .%\Y! B@! B@! B iB@! B@! B@! KDr dB@! B@! B@! (,D*,GB!B@! B@! B@!\%B@! B@! B@!   ˑv! B@! B@! B@D@.pIf! B@! B@! B@B@r$B@! B@! B@! .%\Y! B@! B@! B(^Xr#cGNzn!ݳ;íRH! B@! B@! 2*G/ZUܒ\gmmlYW-}cma#ťRLJ\yW˗.2gPًvuHB@! B@! B@!  xt4a'W֎]d r˓ "Ձhhϛɳ'ռ͔GhR t # 3miO^ҞIJSɧhJɪ5Q@L9r B@! B@! B@" BWAu^xhsB`g(ak×k)=>h]p`c© 4ty%^5ւ<|=iw 3XC,SV#1a.B@! B@! B@! WE.kRY83^! /g^y񴉅ۍvC }u)~4 XU?/3" <ffFosYY]i{߿~Vm4l沮e9" 8*32 w]Odzk{ߵI Ա,e0 #K蒋ZX$!#^  x@ P�(@ P�(@ P�NQ ;;[d۲ۼ^nr yۗd`Ǣ$$NI)!pp1"cmLK\eu}kjJUgl${vI@mDtظ64 ҆}B P�(@ P�(@ P�Z"taKۨҖ0rd__$"!?:z79=zHvamVxtЖ-^Nm-ZM^VeI& (@ P�(@ P�(@ Ph cKZF4UPSUcYms\sF%}OφUMh4ic~_,�(@ P�(@ P�(@ P-0f17-5F+.}e"GF`˫;TF!:Y ^auꚜT5(=\u_7a`[;(@ P�(@ P�(@ Ph�]-&l$kگK3tt3aÐ>I "ݭH__dه+^ z'J`"[dII a7?؆Km:jYae ~=zP�(@ P�(@ P�(@pJk qZ_ mnr4TV"uN$j{fl6wƴR{{Y _) ?O;Pw߰Zפh51n\S;(@ P�(@ P�(@ P'mu0Ld$YP^--Va%#cfC5B$jJ\;>nځds\%dqoNMxL P�(@ P�(@ P�L]mF ٥e-U0]|#|Q|bB=xQ4b&k{p92{K7;(@ P�(@ P�(@ Pm+gt1:Ѷzt bYd> xc:a] fƳjuRd¨2dx@ P�(@ P�(@ P҅Sl0쑑e4#>5{YlxΑ�(@ P�(@ P�(@s\]ǫ3A.H"Ewf\(@ P�(@ P�(@ P8:NZsKRmAc9% P�(@ P�(@ P�GOg ׮ԫaGȆ<�(@ P�(@ P�(@ PgDN+gμi([#79٥p@` DM!rΜ(@ P�(@ P�(@ P@vvz`ίϝOK P�(@ P�(@ P�z=|? �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ P` �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ P` �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ P` �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ P` �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ Pp=O@NN �(@ P�(@ P�(p:�o~+JN6s٭6jE쾥&x GEOΏfٕXH~oõK؁"gB P�(@ P�(@ P tY{<pvq~@uFpPURQJG.)3jϼI67?9/ݢ}J0opsskhrJJK> p&"(@ P�(@ P�(@Us{ↅ%ޔ�TiNJ!PE_&3sv1)YK;Yˢ)@ P�(@ P�(@ P t5lmk7)M&ꫮ<D P�(@ P�(@ P�Rm'c&.9:*ʱ>9ꖕ oN[�NN24 NNV}ZrRy,GwC޾$o(D ^ -Yl@>@ B@T|};;Gy{+CND 3NksUY^|#QSUpDF}w.y [ph);{o\'$ g%&t!]:XM1@dV 0={++5a|ծ y(9Vb`'hKa~R A#�Cc� {ɒ婥>zOI*Bi =sJLg~wSdgo_[?U$e8"t~gNҘ)@ P�(@ P�(@  tIVVڮ=keuǧ%{7I+iVh;}ܭ];rx(,]ߞE=R8~VO$e}e&jkLVC�>j\V=(׆jJ]/]`7�٩طj~W݇y߰^hK7g;zv.+#(s;3oHuvW}dU;9yRDzL& mTmZ;Qt]>x}qM.4o/_?7SƬTl`8YwmDrb!^zwnj×x/[ձ? 쫃ph&:>1 ?M1Ho;`f�(@ P�(@ P�΅Og y/8蒶)eGKU`kQ9q\]VEJF<6nN2Oa'H^] v`/`ZRkVA.߽߫\=;";e {r\%Vܲrƍղ۱w0UYcyX_TOht}|BP|xئϖ6!s!qUxj0.K.nǮ_t2>rM!#.ex]X 4~|n:,9ϛ$j\jiA1 T .Cejο/?}3afdR|pYl Py,3CzwcŬe{S gު=N P�(@ P�(@ P= 0?6,acN_KHUKRYK d݃joo rI][t@,&x GTA`AQzq|S:xGol5 ̫-K^U*h{S=0Uzz(Ͱ_UionfB$,Y2˪F3]&`Nβ%/]y+yK6(M^ 磸 {c5U'K!>D_D]Mqɤ0ru5d7Dzo;1Muoڀ!Mk@>:7jX%hX{^G`ש/c!Y叁F[f?gwPVR�(@ P�(@ P8 : ?LY]jj Ó-YXU&T̔ސUhxgM=t0-r5OO (V5/o{3+\2W@(\7%P}eOn;N w@\,rZ@q9Z^m3e[H˰ `B"7ϖ}^QՌG>0י- t9,'ksc3&].IjjNvּ.ɸW$I UF寳W@^}Zйǥ=dg֜Ǣ�(@ P�(@ P�(p&Z31c޳zV`#KrGuG,1ԼZc,S.i6,ܦ%wA Ժc7W]]-Z=~ңP^pa/_Q.pX[csMx!j UKoxFxE 5,lϺa88h^jQZ6C tehK2ph\�,'ujr _O^C@N i_zDf3 P�(@ P�(@ PZv蒅5j{C}j,mkנ,Dhs]Z2ӥGkk3,I匡>Y{t]]޹^{Nv{44;+ 2KC91/gupu\ݥJSjieH 0ge4?iP+ެN[TaRVCQ�(@ P�(@ PhoZ[@/7-5>ْzK_FǪ9+իǥQ} bnzs^\߰T6jѹmxr\z :�R2,~Brٵ?,@(9cXk.x}/bիںy{ K^¾_}݊MxtGTS},yx?:>m}bu&؜rgcH|cDej̎�(@ P�(@ P-_H`+m_,ghgHZTI__dz -ŧ퇤'J`"[dԵ¿{?%UthWKQ}Kc_kn| nxԪ]}Z{%%62'c/G޲aǠ>_)ڰ ]ߟdupeĤj?Ӹyh3_H9صu6 >\M-hb+B's^y8<sӪv~fZ]kKR-]z mةqj;�(@ P�(@ P�EO$Y]i!^.ZJ^;&Gw`!1-i:tH tp;uokH;(9uk}?G%%ɰ:7]$kKmVO i2@g>~{d%  G\cU?v7UK*21]wDخM/yYgw2/b{-*K c5{wIXmxP}\QZbBQAUˍZvSnw)/3aٷݥA6phv6zKY ͦk}WVF] ޶{Yݔ'�(@ P�(@ P�ΰ?oK^Y[ VA;6ރA31 %dܕ%h  [τ;FZkQp`ը[cųS$^Va{oœ#髿ƎgkoQW[)TWWcOh;y ژW|l nw>,NmT]A!}֞~d+*OD^y~́%#9"R~.|Ԣ7Aj\{9Zgeʍzn4g}I`Y[; 4gɵZj{N<ߜ: &.Gd4ى�(@ P�(@ P8%_l~R TT˲")d<i>R8~栉26.SQzW JuFq>T/n|L2s Kpvq3.yU5lX9cM*BG|o*U+c"P^pIYےgbE۱gGrYͽcH8r63:b&>GЭԽ%0<�3{C&GZj d?]bdS]wkw>g4>|kfϨy lxŁFӟSm5򃒁&塹x8,�nWjI&Իxz{o\g*kUf4p ogW `3 P�(@ P�(@ P@vyKft[kz bYdr> xd!)n0@[n%׫sUk9r~_j. rIIVMɨMNPAZR~?IZO\'Wt>QA(۳GW ⯛~Sj/'Ǡ_/HC֖VAq.s:+>a 6HscClӭ7mĒ#x_ hrLA,Ԡ"?T+oqWrnPWS\&E`(~9Toxf fYblL P�(@ P�(@ :W?ٳL&-U4}1#k^*8Ǐh_Do8N@M&+dVW!@xx M>LY|dJs2�qt oXOļUc}X6*9O vi,XY/9_Ɓ2`wT쨽ipFtloj,{. tmϞiE }*;=!B P�(@ P�(@ PgV@2G\xHN[Ѓ\i_(.CDCG!2/BnNNZ`z5W`^X,:\e)CN֬ծKw�X(@ P�(@ P�(@ P} 0վ>s~6NZsVg(uI -HT>jsހH P�(@ P�(@ P@0:A r:MvhxlXs P�(@ P�(@ P�(`W.,l+q)zLg}ir\{/xtj}sR>>(@ P�(@ P�(@v!Tv1N�(@ P�(@ P�(@ PdggVe P�(@ P�(@ P�(@ ;G Q�(@ P�(@ P�(@ 8"@#JlC P�(@ P�(@ P�(jw 'D P�(@ P�(@ P�(�]( (@ P�(@ P�(@ P@`}$(@ P�(@ P�(@ P# t96�(@ P�(@ P�(@ PNvpB�(@ P�(@ P�(@ P0P�(@ P�(@ P�(@ ;G Q�(@ P�(@ P�(@ 8"H#�Z.PW[ZS@NpvuI Lح\]xB P�(@ P�(@ Pg�]gYk0R{jBpGW|]?N=nR|8]u<Vavܯش6j{f3/ I}w$M v?1^!|T$&xMܬG)=\\z"blVQ�(@ P�(@ Pm%@W[r\ 4 nTmEQT7hq~+DBxt4VIEE~Q҃AppQ$mGi k鰭_3ujZO΋G(VtVSf|u;tNYZ"uI bfYrlL P�(@ P�(@3+@י#k6Ṿ> Ƴیg:- 5iW C rIĘ�(@ P�(@ P8)@ P-z=R[0lDDKb_ P�(@ P�(@ P4 04v$<:y 8ՠىG!h-)Eynt/|#}ڷ$gFنdzvD<aR-[(sLGA=s{5z r eȃ_gu탮'~?-?!wo"Js3OOtni:^[ ;!80|l0Z4YFp<,{˼>hJRZG7;{{nv%~[e83aȨ@ JMضѼtem[6XQ>qs˃=%عi;!0C3ž,(7q!0ꐬ95G ;pH�\N ;Lss8')U1F}vM|GX)*ַQsZ^:3=Ѿs$(Y-;mLV3 (@ P�(@ P�(  t=v|monF|L\0ta՜:guFq[]?Փ,,7"{9r^W1C,}ybˢgs+_Kތor!j*<`WuE)OCi!}.kt}k29޺SmnU;'jSTWbʘj_O 2ͺk#d/; 7j_~|޲N?::߮D?%Uƹ~DPO& mU'K/YɸCʢ I9fskU4gX|\>9d3*oOӿG`L ~7+ˁ7i;^-%x5&HӖ5%V}1h}: 2]]og1O(@ P�(@ P�(@+8xj,_`;Hl}rLB$hZXȻ p/)@ߟN:E'ht*rT0S^^[;vB g󳐱q[]ɪlj`@vz!bz)=\}=bs`HH@/YHR{z!UYʱ/-SY6~ s=  ,0ޡ0xU%YdnWǷ Z?Ԃw }S㧯3UiQH#xiX(i-&ۦ߰N$0W=>L˭~FxkF>]աWZ^7t]eLmzw;X?9G [Yo{D A. h%U%?7z[yog�(@ P�(@ P@x{^i`ʎc˫QY#K {z_TWcÉ?X'L o^i: :@5'¹Fk+6`\cϊ~b.oxT[roQu߾۸~tT\Oظ65K`T{_0AymI;nt%=@ipl =ϗCe[,{m6G; U|̒�ܧ.o}ga߮_,{ϴV ꁮ?k,+["r}X\2ƮGlZg`Mrix8T䙗pF}0$HiI3X2S3VR?W{X{9o}Eb5ykTd|r]+6}ZL6�(@ P�(@ PhR&yxt ?ö[?~/&eys{LLiJ-Oh1J-urZ z'Zf@'�qcq4y5e8gJ\F=CN$9Vru G<ZN†djص]; cUKW<X6ws{ǷUq&iʞ} KJ4|,K'wK/$/%]$I Q^^}=.w*s_ȹcle{hc \F!}~grh4(@ P�(@ P�(�]1(Ж0>�D:t ?-IJutӕ6ò Wm]Js3u���WIDATE݆ƾ[L%VS= ,O@Iw#re8 W¾Us(ڍ#&KxwfEojH[b =nu͸pLViIu=0ddz󅇧K,-s.[{Ӗٌn^JsφMW]%t=qC@c~!F?yv�ɋAҾLU�Zvߩ|GXGw|][JeRUs64ܦIH.ˆ<S` .<�(@ P�(@ P�!@W3 *L0U {4*8 5p=jxE.>ݍ8H]~^+Ps虯`?؎yIĆ͞^rmsqt:eb%%6r | v"(~6'ɉ%P9^V T_,kXeMx>g77w8a9NfU'X-fѰbT/-ްxf?6l7>|�(@ P�(@ P�N.@ɍ4 Hfí6mH]S$hC҅^9 oNuiUK꼦nT{jWǭ}PQc0W=.nVk^}?}dԖX_B;[Y *[>=}iA߿@Ʀejd,=SwSvkͪS'}"S-YQe'|=g2iDTmco#*KZEmU;;/{p=hbv.UmLƍNnƎ&m_c LK@`osө|Gc{)ƾf duvb?.4UTk)gRW[}GIc�(@ P�(@ P�/@Wأ-G^_O?z )X?z~ 6gtf%VjTYTzy<_d{Qnuk;zdxy]^]쭫^ZjEZczvĀQR}{avϊ1GmiJI0K^2neTfXzTYX77o.- tui~Jձ_]NڳI+bA }i@mK3%$3gUJg~KexM+>^]WZcE]}T&WQ,tk{.I G t%86ةql`:}\Ypkm-πƳ|#V+(w1X2ժR;9gj8)@ P�(@ P�(@be+ X@=H Hzw+-H#qW7">loߏ{=q3_Uܽޱʎar;؜$(w>X2^,.\$K"Akf"Qxp'2tY ('"v $/mYõU.޸I"Gw=Y&v2^:m;z%XkN]\]r :XCv4$389ũ@TmZo7%,YPYT`?#Q{>}GGIw/]l,a`n'UC9z׫r_>9򇩟g�(@ P�(@ P@i/M6E 9d<R&. RoΈ%'Ǩ: IpKJE~~;uܚ g.{zlx{~ǯ(G7 7QQXɢ_?)V[c®eը*/O_"4*-$TaQ e TveuMem%g{W~`ӂڒo3hAxW/:%Kʲ%P9i-ZZo9X&\}n:?{E8i,fm\}A,тOY`˾2%5*,zD33{bcI64̳m-}&?q\"{-޺*tINVCY 2cKn!Gh{xIHK2$ktŬe*�f^[s P�(@ P�(@ PVI[*l۳F [rtEę,GĐk٣1nxjY~mzp$r6q$cʯ[_mrӖ~PQhA$irb/'˳SZ.?doINZ0j&k*!{k]`j#ShcK܃ҜC7|a%h[t}qݯ[,ˊ?I?7,n}{ >I@**ڶ@MPpuSSS Dd8NVq>r\h azWӏn/aYٻw|>̞Qd /oWO8Ъ/͟u=.Qm,Iי[Ǥ+F[LlqAҲ^,wd~0rszp$�[URǽH(uR|#|^_stUϤn(@ P�(@ P�(@dgHE@8 :k\փ\2ܕx?Frc#q77\{{u69ZdY@ ru!^CKXR$h%Zs&B T3$%iiW9ʛQ:E2Hp++q@ rIGWO/5g9,FKiLd^=u"<l~i^lho}"taM*;n嚩0!\Xh\J`ɲ$hX~NK-2?,{{( m|||b"KJ`.*2KcUK@7<O˾Ԝgr^h[ #6cVomSG\XKnN(s r.'Ǫ:3 P�(@ P�(@ P`FAsINީղ\c-Ҳ8lɋA[[Q%TK"zֻ=v,kki*-vRUZcjZp.QkoJ=GyQ8Y;,R`^{*Da2*;A/gZ ҁ}vhXs$ pGx׎84H3+BR 3D1͡5RrjO,ux*Ti߇+>;ܕ+^u*ñ(@ P�(@ P�(pzFW)> Q@d8i;..GB6W[Y"P^mRdu]1Cm9e9\\]z<eY@y5J߰m'-7pX@V=?Ԫl˫YخrI\SAZS-R>IVuB P�(@ P�(@ N l����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/assignWithDepth.png���������������������������������������������0000664�0000000�0000000�00000014703�14332737457�0023212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��y�����K���WPLTEYYYEDEutuhghYXYͻޠ֖gfgl��'IDATx흋v⸲@`,#4ݙyk=-14f:!a$Uҏ8<"`Ȁy  2<\*}Kj.s%!2yŹoHMөnx0fy#�lk\Z:`j׮Zy0ŴyEZ!zVZ'եjQw5Ru=[0m꘦mݿ\(+RT+(�Ck޼Y9;wabBs|51΃iyIo1`y&L ~m{鹭 ۆ#9̃)zƙd mz1�2%2`Ȁy  2`Ȁy  2nMyʥP,y6=h�,bMϳjAdP6,pxX1/d8(vf.Z8m`޵:jpx?ћ-iCZ{]qZZ1Xi }�g;0k0lO;pݳ6'e۶2q9ɼ8mPʭ?bJysS[kVX>% Pn|_0qWsy8ʼ-,@ Ȁy  2`Ȁy  2<Ѽ$6h4Bdl5e3ڃ͛muIky!/n~76e~3j sU0r͋ۚjb8U +CDzyq^``^}+OuC2,5 晑y1{+<P+1nw܋0΃;y5[y-rb:a+s۰YAoWq y~u <$Cd<<2 ,)@0d<@0d<AR6|uæTp뻶n^y,j]dl5OŌzUg[sV7P{I<h^MŜVkyw.\mO:h<j.,yYc`AF|1<WsSMjϲ`3v&uW{f/uV; xlz9U0d<\@0d<@0dX1ϔ,@�X5O' 2##U1d`2`Ȁy  \=�Ȓ0d<@0d<@yŹ\E `1t<xCꆥ`0gb2ۆ(̃cUQlZO`. 3 a~A#3G2g^`ճY8<8@0d<@0d<@0d<@0d<@0d<@0d<@0d<@`^qfy7˖6 c^q7Xm8޼,3nEk-Zݦ6_1ʶSLW]T{ 5yvԷ7ЭIՕEa̴yƪz֩քcZq~`Noy>r͚cBhN\yp 11e^{T!歞2aS̏<5>hV%s}کMonڻmw77̃9ga'\L@�@Ȁy  2`Ȁy  2<ѼYN^aˌFfίGej^|3xy >N6̃Kϫߍsi{ߌt栘92s.Ɂ)yz SPм-X6Ot⬜f.s`^}Lus2sѫ*gFl$1r6<'J̳<ȹcYcely10`mX>Ņ2N-5)EG̃%;5I'3xyd @YR  2`Ȁy  2`Ȁy FrLrC\hڨH]:<<sy# 4;ᛱ<YqդEۯ~yڳSy>/d ޼T֡GWcya߳V BgIv[1nj0=Ω'h{5m/uۑJuA3OJƻ#IbvZ-0?̳* \sVEpd^<Bk<xNrtO~ #̙ǎ}o{JT}ܜtmk88q^0/aμ80byq߳۶S˧Jq]ss[;gus#Dk-+|ׁg  2`Ȁy  2`Ȁy  2g5"$1O)Gj"K�@VͣaJ`y <@0d@�@Ȁy  2`Ȁy  2s �<a#<�`0gb2-Ϫg. 3 a~A#3G2g^@殞UΪd hN%2`Ȁy  2`Ȁy  2`Ȁy  2`Ȁy  2`Ȁy  2`Ȁy  2`Ȁy  2`YShX٬W7M~1eu ;Lq Ƅk.]Eŋs9�tvLx3O3}:گ2_УĿ Ս�ŚyMS]y Nz*67ߔ=.M<QJ-<U{stmV !JXn~-[qUlK<jŵ(l0aZ.3&^?],eyÎsɟĤyyp0=F*6vcVkh+Ϲh*|1Ř.UuQ061浲kxe^F*6Ϛ.0Il5ojf#WgUiMO$ U]i99g?{pOfy J{׳oj<^:~k^6JՊyg;/`~̖OIBk{2[;S+Uz(N |hJubUܚeFǗм۪Lbފy1sg?Fwal`Xx?󟯟b7ascyڍּ'uP>ڋyfG2o'a\>y6B팹P'vn?=?)l;pJkPlٱ3S(k^4,a:r߃;an[waԅUwknp$8q[<Pc,[=n:Fe46u|joۣ4МUyg ??%Ōw<\c<@0d<@i^Dn ųrpf:ƒd! /_ב25.I [Jpe 5&3=s׈ĺݯ&0s:<fWoԧ/m^T+^fE{ѭ1T3RW3÷ĮH?yG»?vߍ7nlIG=xIA/s=z5o3Y6/Ōh/<׳Tze)-R{e]L?}׌VSkի8B3/O=lw|.Ry[z8$Po CKI˱@eUkWSN%m\d0/#R+8 q,re]yiY,ű!!֞r:^k?tܾy(d^CQy] ݽDxedo2қhӟ]d;c[_'Dr̋]|S_ SVZgJGgʽ:L?1Z+H1Iنμ虧ͻE@^&ty4rozu(91qzyno.[ h^臲,T'&!֞͘ ]W8~a;z[c_Wۦx4o.F"ɡyVGOCLH;4өÊ0^ּ٘ קS"6n`G`h0 f~>j^*W]Ȧ./F"tmG;O͋?},gc&eq=BI*SZ\G _U7ǚּꗹ0m㰚o^;lylbG4Ͼ)SNJ<Y 2s[7Vi ̋ej+UR` c4 guU͙t:9|MnٙN\s s,ȥC4/ .ɰֹyT >C/~=enL?Y3O=3FaB\zm>iVΝNyi&g0o5`}Ŵ ͧ:f\=˞`;r�Y2f {SnR3o3fgAȀy  2`Ȁy  2hڼapjvd~gD@bżii4xQbޠ9fo6R/0蛧Cg3eV!]dylmKz뫻6:C\a՘_/ݛF+K<3*/(y`3ڥd{1lbYUv 57̃9ga,A�@Ȁy  2`Ȁy  2|k8|<U*:/972_6ReZ6)=9/,vQ4Eg@K13tn2S=:-5pe4u? bcnmi,慍[n1lmjQVl=#ѓsrLkl3 52E{e6֞яy3g`4p86xrønߕny1{ZfoWϪDd6Fv+t}u y\]żbg{nřW;ճW;G+sU<@0d<@0dۼi [s3}.Ld>5#wbO|߼3:Fjf{eI%v7[{־h;Wuxic4|uPנ%FyX.ynnM &+ UweR ;՞PmT/'աuy˖9B_\7߇Ҟsis!HkSY of t_ =}re/5>ib)T{6›w..-YelQifqQ<.M83֔{rvT{6BŚ`X7)>¦i<%1907m۸>>?j?Ӎ8q^0O&.LqU 3-cok盟WD,#ٹ s`̋mj7;oś\=3%<08~7<D7@0d<@0d<ڳ,=ALq9,ì7[{`rT1FG=SƼP% n\>in>Ska+sTY}cq0=NY >މj JUY909bd^T`{e=Tg+'Jobs ï_10/_c k`VU{f HyAyz~Uyճl<@rU@0d<@0d<晒X)I%y_ <xמݳjꆨz1gvagN);_�ސ$+6 vlvF)Pd&Ȓ0d<@0d<@jeix-[Z6(Yjܮe#L a�onDzۙnngցv,gV<Vo^h(Φn<7~V#m~۱׾g~!n1{VյX.22yn<厴0{?&GY۩NǼ%\<\m/ǞٱUUG&N]uUyCL uJ҆g1Q6@g  2`Ȁy  2`Ȁy  2l482(R #}vas.l <؅gg {@l=#l=c d dg  YR  2`Ȁy  2`Ȁy Ï?�+#/����IENDB`�������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/book-banner-post-release.jpeg�����������������������������������0000664�0000000�0000000�00000116214�14332737457�0025044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�������������������������������������������������������������������������������������������������������������������������������������������������������������������������JFIF��H�H���Exif��MM�*�����������J�������R(�������2�������Zi�������n�������H������H���2021:08:11 18:07:31������������� �������h������ http://ns.adobe.com/xap/1.0/�<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" xmp:ModifyDate="2021-08-11T18:07:31+02:00" xmp:MetadataDate="2021-08-11T18:07:31+02:00"> <dc:title> <rdf:Alt> <rdf:li xml:lang="x-default">mermaid-banner-small</rdf:li> </rdf:Alt> </dc:title> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="produced" stEvt:softwareAgent="Affinity Designer 1.9.3" stEvt:when="2021-08-11T18:07:31+02:00"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>�`Photoshop 3.0�8BIM�����(Z�%G����mermaid-banner-small8BIM%�����bwa>,hdICC_PROFILE���Tlcms0��mntrRGB XYZ �� ���acspAPPL�������������������������������-lcms����������������������������������������������� desc�����>cprt��H���Lwtpt�����chad�����,rXYZ�����bXYZ�����gXYZ�����rTRC����� gTRC����� bTRC����� chrm��0���$mluc���������� enUS���"����s�R�G�B� �I�E�C�6�1�9�6�6�-�2�.�1��mluc���������� enUS���0����N�o� �c�o�p�y�r�i�g�h�t�,� �u�s�e� �f�r�e�e�l�yXYZ �����������-sf32����� B��%��������nXYZ ������o��8��XYZ ������$����XYZ ������b����para��������ff���� Y���� [chrm�����������T{��L����&f��\�C�  ,6') ,@9DC?9>=GPfWGKaM=>YyZaimrsrEU}|ofprn�C44nI>Innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn�h �"���������������G��!1Q4Aaqr"235Rs#BSb$6%CTtc������������.������!1QA"2a3q#BC� ��?�u֪dU|c>�(�(���HP����(���HP���HP����(���R����HP�� ����(���HP��!@�����(���HP��� ������������ �P����(��� ����� ��(��������!@���������(���R���� ��� �����R���� ��� �����!@���� �������!@�������� �������!@�������!H����!@�������!H����!B����(���(�"(���HP����(����������,J',^])WU�"ȾG|`zHz{yOj`zeZYp?ZY~֫�_2w�ŗ=jec/'%vpjd=jec/)]q=jd=jd=N,W,Qe9]pjd_YYc/)lOYY~k�_=v�ŗ=jec/(5�/Ծ_G֫�_�ŗ=ݲ?YY~֫�_2m֫�_�ş=4w�ş=fe9 M6sBNrr{\Yqj�u֪dU|c>�(�R����HP����(���HP���HP����(���R����HP���������������R������������ �����(���HP���HP����(��� ����� ��(��������!@���������(���R���� ��� �����R���� ��� �����!@���� �������(�����R���� �������!@�������!H����!@�������!H����!B����(���(�"(���HP����(���������SggOO;=@�A�� 2�(�@�d((� @�d� B�2�(�%u4/1ii]^^ctq>`�sW]uw1._;ϫ;4� �����R���� ����R����R���� � �������R��HP����� ����R��HP����� ����R������������!@��� ������(�����R � ������"��������������HP����(���R����HP����(������������R�������� �������(��� ����� ������� ����������� ������ ��� �����R��H����� ����R��_'k?3O;=�*P(dKDu B=cuٖ:u�t(ib:w]4�Li+1 _kG8 2�"P��@�@@ �"5Һ饥uyy=_u֪dU|c>�(�(���HP����(���HP���HP����(���R����HP��!@�����(���HP��!@�����(���HP��� ������������ �P����(��� ����� ��(��������!@���������(���R���� ��� �����R���� ��� �����!@���� ��������������� �������!@�������!H����!@�������!H����!B����(���(�"(���HP�������������Sg3d%fRRǁd6-ho0qSvzk֨8vo f=;ivaənh*=0Yfw N,%VJo~ rf؍O]LE~ޚqtSj1wsśPeBj2e tJu&[RPص[k=#k-1-f %I(%[' RN:Џ\Z$:t-TYI=ĻG=F3(YԯMG&!,ΫEX=xBU!'yOF0F\*� ��;J@7M-+n']�jWf3%Z3gf@�A@��� B���tyj(b[8qb�o�g�ccHc^WRi,mvKwJJ=cc6^T;aT}B�@�r:UUZqPܤkkP=Ra(/u~uO_Q�|�e��P���(%>?4hTMNr�2ѯl/*RO1]>хV{2|\dJUB=#6nojRc:ZT̖1�?H}O�<�9G(�u��������Kz3Te.{:˨(˃3 yWZxڏ>b�R|1߅4s@JWR&Կz)T^'kέW8]n_3~HeeJ[Ob3ZҼjWc]ƭl.&RQsc#Tcu�lXU=65 .[Rg-qBvեJ[Kiuq;S}Yu���{KJzbBR:OK9p�T�@�5/FqRo):tjT'7/*T:$#<ligъI)nHz?Wzo1J5U�����n.14v#lvM8U٩(nH;-u-SE>SV W4#{B<�C9Ǭ4%'<O3�R � ��{ɦohwYډB0"Vi]Th��Р���!@��O}HM^8[;˥G_Y/8�:E8TMFXKɭʊ)$miW^9ϾpP���(�������@) ��SLNv{#WCB������iԶڜ#'9]Mlb%PZ0BNRQq{;j (/}���R��KNR[YC==HԕN.-~?ޠָ[q\waX[B|{@�hSJSKyqI,n^] og .-*S*v2i3ZQ\Y:y�8F1Sݽ#t:c.s�(��#4Mg 2V:RqM?�39ω7@�l��P�����(�mX3sۊx t^i,$ɾt!gз_sɏz(��� ���������-T%%zaQ(;  B����) ������@@��� B��)����@�@���PB�ާoSgNpm_H=t'/٧e7lۯ5Jj6([VM-1Pmlud[ qYTEQF;)\To.(StU`Zϖ wI<qo,XTꓔ\S|$S]5{wІ*Ҍ{l-Ѷ*()| ˩+zi:lwTUe7~'Ċ9S$6cgѕW5KmRa i4溬U—w"G7:w05]tFpRr3Rvj<~8_]S Qbu'(Fqn+x]j.qNEQJQ\\E uMV.oNkFJubjivpEeⶦh.lJm8ڕWgREwq%O<G{<yFnt6U/(ƝzPT,/+Ś."V[`Z]J9s'g&u69q#еY[F<+5iԝ)mSk\t.EƅGo,-}FsM+ 'ٞ�mNRmɼAMMTp)eMsF1SnfS,�� ;@ WW4/1x8}vǰ�9._;̗]jg՝������) ����1}O${rrt=濒>vܸj.YE㊭NFVޝWT:RTRvU͜^cw4em_PmMGc?myx oI4n?yeoqnSs)Q#kp^¤)'܏\Q>NPqSJ^�] #E7 gIz{|MQ?Tz:Utܷ)xvYG;ю[5߽�/�6}uS_ZI5TqTY[oJѡRʇ ٴ貗E<gH%*zf=RQx�QqZwvu}6Ů]?ޏwWDNB[%Uٔro9>}漌L.Rk-2ΧK^0k 2޿Cz)mdM9ܩjKTk?ظcf< .ۥٔ\.OPj*P)]ƥ-B7c{mBZ5Xԥ8qrپKIY\ʔ2W_sRTSi5,vr9G n2ߣ4:y%�~KARGrr1ƺu愿rNw?Zr5l74KSڛk6{ܞ ꐻݺ;9v?sڶ'dڧXц4%j~8zM{4w|{NcFuњ�2rr#UjFY>c۩|3#JYMѝG%(FF^iXcmjP.-V>1{5-gndv^:&apk#kZ9RJRnKⴴ[TP-qolj|&}օʯSS{8eYӪ7Igg?#^nj~3S];6;[YVU}ifP\4TiӓK�AF9q7Rzə卶+OS4ۋ[QoiQO_=q/_He7�NN'Q[zo,$RZ<eRMnʋ- &yʓ| =9)p^x1ܣaԽ I4okmq>GGN6�7[IUu*R3U4$ԍ$E|Ov-ԩʜw4^_2^&Ww ZVЛ:io>'uy|ף[-[pHlZ*EJ-csHΏ3_mVmrޕZJo}*‡;i/1jQV Yĸ^2_SӫY:Nwec/!޺ׇKg%b�4k nh toJUZ i%ӯ\KiZ:8R qQk xirNPPI&6oGgT,vY۬uGwiBbqi9ZJwB?:>.BqM`]m+Lx*6g-%ˢj|2fKh|)er܏<Ķڏ 9G{M1JU8,O *rI/$yFŠ̟|V~N]d`}2x[mnTmќc,c97cqFVJ|bwaV(Pr\{2s5zݩњpYks9CD8q_ mqM_oZo5=2n(XI:Sut=e.e:O7tyۓ~�{;L_x&mAԼeףMw27Imck?WVo ͝y׵uKi8>Hߦȁ7÷�gMjTGٓg}Z9~[:#^)Q*rszT_KW6 J=そ\SsVۋwhp,-f߻^NBqb7,-kNxG껸Wr͖h:[}{]g6^9q_q�#CDw!]O<h]Zi]{uj\1dj5veQǨQw^(es'+=#Զ\uv8 E UTU`Xɽ*J)o}_kjr/p坛EN�Eif<tU$~y:7*]5Lc[+oٌlV18iʍYS uܩME2g?QJ9FIen64} s+*/rK2?Ϣ[ ɥ{%(Yb;O eϭ^…)?kѺjSќfo-'RjЅg8yc2U�#S9͍ݞiTKeϙ˜% ^xWV9 *z+esr۱yc^=4-b1k[vZz>0Y[5gQm.fvK/q…t22%Zv^yzgSܲtI[+"F<Z榡)6鷽?46i�o{\,~FkFTpQ;{+iTP[\54^?'i7{$HYnz^: 1QMeǃfա3Ka⎾ա1f GuQCR62ɤ$\\ND)RXVxJa)Ua5vCUz,V?&ת tk'&YorD64,:۩ХeokGn}]ȱcvicVFkV{*0SJjt䔗}ת94%mYӖoO:m-T*%VZtJjXM<:_ZCǷwݽtX=ɨz+N;ou*r|川2cnWtmXYrU8fOP9ݜ|Kf4(qٓ8rvoReorc&&TF^?{[;XENqP^_y4-.>1Xݘ4M]mF`*.fKʹfTlcYS}YNj:]ME%4jO7;:ߤ/Yslpb:Uliˤ`~i~LϫĹn塱3ܰ}島/zf*RpGkSVKբT9H._Rb:OU~w4lw77aiokKj$\jV2]qW/{”).ܳo9ʅYB]4oQlWIg~UV%NJ[w%F24n7tUJN19JOnxsK�lGЮ=z3ZjnXuQ?:zWzY::&]+Kf\975| OFNW1rtekosOjq�8MK <3oKUyQI]vt6oBڊt|[Y`B)Jr3ѻqO3 ݊Rn+}gKi�*R5,J28rڒkiPsM5*USOKwQ5.hjS<UFKk?be�:{v/ .򘯺#okJ\IA쯋6* 7h۰ S0agLx# NIrE5\J8eRoa(~Qɪ .Xg4suF[Fģ7vx[m弳#vqtգiN';gӭ8NWoQLE4rfq](PoIJM-0^Œp4�u]R O1\*qsQ�:+kGc7㙭rlv`˧g8'Zmhʄ[M<UvT\{a#13r6[Z|2ZOb1/UZpf5Ohӛbi+ߏ'-A)I(P4zXQ<i}EgjL9sk'x*}%5qK~&ܷoG8)t,:/g_cTve;;Os'bOj+~gDz ճŚ|9ēvxJpܳT):6x.mo:zfr/AQ$޲5-էGwiꧪ{-:PI4I8NbٺQ ilb/[u%t3ެ^ŽRX05'%5ƺm<mXХ,&kQ}IrKw`klgThІjal {OqB^8 [S`#Rpp⍛{xWRfգi=ew-i=摽ݛo%2-En5>?گ(B.Q\Yս'φKm+I#sN64q<3bɽ..V+6eB2Iof:ΏE(`vGŚD`R������ �����R������� �����!@��joSgo3g3Pzu�va;Z#BέjI1˗3Sn6weo3\ڤa>.*^66uyҚmֻ(Օ=ʰ'.RFy,(SV1YxW<¯5ڋ8Ӛ4ygkkA\׌KhV5V#㭳%Q}%]SYqKq5NNl{g4i-*Sq' .&M>uBԄx,|m4r؇<gmgmΔibpRy}Ia]]tu沒YQ=kfsRK&y&u]Rr"Ԕ%/[>wNۆ}[1RըJjM,jnѤ^:tJ4j1s`�*hR")q-Pg&ifT�DSJ7O�5|EZ3U󿙌@�R����R����cHOyԔjoUNQ\+3eliܹ~ZcVpOѴ{[aϑiVm>)ɒ5jAb5&$٩|m]wSP^lqF}*n*8yy{,e(<ŴgٜΡc; [\wVҹ*=IͭX}7v_&c-F=炎_Rktke8*CaWMŜsmWzF:o'~фI< IM[507t5[Vk;Q]&cxfo[qwvymG{Saevmo]9ޏ}漌,e(<N/x,t#?lP*Vh)o3Hku(ԭ8O[\b4aUUU6w%ϝIy9Ez٫Z)I/DkXmV�I{ҏ 3D;c54�|_g˞Z̧&6g<9<OKS_޲jEl_y]x mɶ[: ke.{ZX$ɞvݵ:Ypy3mxNL8ߎ揗=S:o4(>qxw.+GZE7XQ8[zrvQݕi0TYbZ\&d .g�W䯑G{;;r< 9v;{1G 3 g8gbRy<[m強Y\�0J_fK79ld8zyoH/'՛Z5:YR)o2y"Qݟus CZ:vNnӄSw Z-jN 䙛)֣>::>qoM6E<mR7yLЯV�c==V#*TlAu88FUs]GeVi}E6R~y]n_3jN>ɑ# 9mWbHKNuRNqszGt|_ɚεYSTI.rx_gHΏ11o/3%gwamޓyq~?HޏT*NP|gmjKiB]ZQx7V}%iړbj~֤<]T;3=8<<y֭oGcV�)<ɶħ&6f~O<zE6S]9cn;d �ڻ];OU[;/12[;2m<+J;2QǓ۲PpӄSKY;[UK;/zq8FrKgGZ)B:5KŞJNjm-ͬ(T7s_^U+ի'?43KdFԝa}:?jJޑ�8\߃=+ >[n;1%͜8VvaVcIm{vߪ+>/ͿH>ڗ^SiE?zMWu�/zo13=5L_6&:>G#I,"Ƥ.I=ZI𦶾=& {[(Kzn{NQ\Q~?e}Y\7RҾ2ӝYʒĻ~TUy<,˽>&9FmFXC 7GoZQ0{oxqSӓo %y.�F׿]$vvY$d30Գֺ#sB<�C)9<ɶ+ =Wzg;T/Ľ$vvY.XH �ںF hQd׃ o11ծcS[;VF:4rg� >WeqڵYU5&ɻ*(óթW*J^g.jԵ N.`3-vJn/)ܫUNKfy,Gz:<ltos4n۞Ա"2qyia`zDNO2mS@w_':y{8'9(8&[Me0ipƬwk71{^ &[[(qGrZZGQ}qO8eMXtdVy(7tj-7<~9fͮNLfamTt4^?'^?5c's <5lZ_ku?ќcӜ)7vQ]ƌJJ2yM3bKZt籵dZcԚ\: mOi:_NI|^Cm1W{JV3ܩ :q:JSޖ0Le(<N/g֫Qbu'%ɳ%%6/]:J6Y7žj=|{#m>){oŖṡoN7.u^a>+Z*;3,vg(M,)I/q::]T] -~GLeQu6bQVO.7{w-iӣJˋN=N/3Mx2e=Z:ڿW:?r&XRq[^t65S7O9 _yvm<rn; w]3wB)[5Nfi~Lϫ6io!Mu',aڕkMS|٫*$*klY=USVS\bxSVd,VZTF[;O &ˌ2έINry3{J2ΔF)Eqk܅{d63zJQ}7](EFqwG&ޓ^0e9Mrr}&ԯ. w,c(R8yMk;{U֭) I?,)4nhZit^7ќӔMY(?gSĵΕDq%&u<M*.*8I>5nWCF;*r9jsMr<Jry71Z:rV]cOwF㲻d*NJNO2mm4@oi1tM6dBSڌS=ƵHFf.7{]b!{nx>OmyT NO EN2Xk m}~S[`Mǃk6yd]?_KxM /ީ{SĤ׀mkNZwv&F52 囹t,{aq(a,|Χ¹I6-ǰW:RR˃{aMd YRN.' M,scRpe(299<ɶ~h� �Х$6$$[�_C]5xIeqIvdӖa<.M'RiaNIw2\z ӳ'hnU'?xmڏ{F|[~$M ru'n>9.2%Bw^Oƛ\^9Mu[/9Ria7 4:]S5+*U.Fx!&=47ZیUJ'9\Mqe%&'- K !Mtj:USr(\J2*ׁ,47cIx%9Kޓ~,5F[?J}E.GߩJ1R%+xnSx){ořG҄7T%h*+k{v^ 95&{O5Q=^lZP${a>g9GdׄnEB/-�sNRsmyAy++mmI;xƎo)d$ 59d Fo1҂ER[xȷp5(kea+̛oP@������(��@����������ާSi?ׂ})d:78SMmNnM&qIxYǀm3fEupU]nkNM[qڥ=e- &' NYsZ҄+Qc8,j׺OZ:(?i$ϞCfp$+juN):7hُ n7x{cl�i,K+*ZFjSj*O8x݁g�t%EYhqRp kGEgv<o,y-FMҩyv-8(gwʛ\D+5ײiݰt%'^ .gmZτN~tjTW)OW5e6%ڲKYaRW0sQCMBQ~N4�*���=Bnڏ #eIIep) <va4W6 DR2i]^^ctҺ}�毈U|c2]uw1Vvh��)�����(������/WTGF3lb) P\NƭоTBed>ge��4!@=ڥBr<n1եR*P),s�(��HP����Ǩ]m]+%w+OpV1 d5Zi`��� ��ѫW=9vb� (I4�)cNJ1NR|YlRZXiA�P) �c^6ה7)q`sC{U{RQQX{Fc5�:s-pEd,ΜjFQ),2���) ����A@���}NM7&奍9`^ ��HPZqm5ڈ����(��� ���)Σ8JmvEd'K2�(�!B��� �����"(��QQf%*-���RS=%,qY<i���Fc*sQx � (�էқ\614i������3ZT.!RI}sKRS{�@��(��piT!).idA@���-%5'ƵI)՜<jo`�(�����R�������� �TxK-'z2y���� ��0طHM<5����(��������)�����(��������)�����(@���P���P�DP�������P��������) ��ߙ/q֫~df>ol\΅]RIcM�\UGڥ);RD]MpvI-kYђUrk;ޕGV%dwU]YAv ]Ӛxpi=;z Se<a*rmajXaYU TRqou+8{;RVe*Bqt'[_Vp[Z7zSVmIBmKGJVeNIc9k?b[{;+q=tq&f 9Mo :z&'&ݗjӝ(SXS[Qf;fd'>`_&MaE9,oƛruqq UVk~{W(tr̞T]ǚ7)ܶ\o-3Վ VN-ip<3eewҌ# {*J-˂iߩ72p&{ݒo/RѥU)bK2x`JU:);J ,>ܞppcw,9% l)Iw yhfo*q$RYFQxZo^1Q&MfrRSKsddeT翑 �P�@N{xehf07M-+n']�jWf3%Z3gf@�A@��� B��2B5.iB~즓Ɉ >M��CԴ+I.3o)y/I&XSn;[>{I{oU�K#GSW�M/ȏc-Q=ƅYCj4EzT� 5gS5M<=�7{Xa%i?_:'F8XCSՅhХII]ǻGr4a'O f=ƽ z*5%{(q/\{T,*Qy|J=NTI`B<S�ڲM'SLBR,QqRM54w}MFw.\v8M8i)gROB3Xl� {PQJ⹸xտrG׉5iu*Q^/S_[zfqq5Q's5>fJӂJXr�/=R2U$|_`˘v!,K)K6k]֣֩'Ovc:)Σ!)>IdN8/X6:fNիRK-w̯KRyؓWn W4#(Щ8\R06m3&[ <E6$Yӝ7Q|^nj~ Ů)׻qˍT^?ljx\~cL{Emix'3tt}$oC_ۥR1ڕ9(kqH{*=J^ y|�ѨG~_h?G-ю'GsyQ7ϼeF|}@)p:%/<./M>Lp<*;Jyq��ZKŅ>ܛolljt*/#}NoV>'˜YsD90̤𑽫ZgB1᱆̚I]֒i^&ο ӟ?Up*M%uT)TAfpWz |,iNQa&j@yI%)l-IQ^$|=FIGj0\��=sqP\yI -8ԌÓKyҾmj¤2ofs^jR.0z9f0K#J]f`վ#>jy> [9OTjkBxidiq:+iS5#fq^R9I.1- ,Q z9'8J)X<��P Mr}$qiᦟ&�\Qp�{糵-xDy2[žqMLn2N- 7 ZӌM7mR^wG*zձNR ]KH㜳?~^$,x''qeAQq|k`utOr9]n_3{|QϹeۖr,(I44C_❫�>Sa9HO a��{j8eg8uoo}RPw9g^3> /J4kO97,c)<F-uIވ�.ve��|J~[DJi��a(%��8�.ve� ݌#M<5WJ)gWJ-BRof-#?ux{cK݋~ay cJo 62ĢD� ^[A}B�. =8J+.-.y ;2<�|�] �|��-tգ/di0[j{, ˎ =kG5[17Qҕ zy4b1vgLpj {';IsMՃkSiM{ROŚNˋK ;�4�$(\߂o O 5n*|>r5n:O3<>ާ0v�F Hբ)4 -INj7V" 4"<X<85 E}iw��PQYQo�� ��6e3.[xFm'j� B���@��� B���� B����P���P�DP����� @�����P�����uߙ/q֫~df3o;C:if%G>6.ZfցMeE(K)Ix^8Ԭm($ڃ_v3<*7ӸFu9% .o+:SҊx\Q}țhT$ѪTeU҆_egvYc܉6Rm&ܰk]bvBTe&凞=țsA ]$#Ri8'oiS*m-=țhz'=X̖sکNCwK<.Bq"5JcM{Ks<\Q' Mwr#HNҌ=n[0O; \[xo|c.x7H&߹z: PQMpy܃oɞ~ g{6\=q=[Qu*T\^e)EE{iRW,g {cNJ1˄c9KzT,%87#ZP^wse Uc/wIY}{ٹ T;+`7\RzSX|Q{-5[w/1hRm~#xOc�]jfKWf3���������-Y_3'毓>v߬^OWɜ82}GEITS|0Txi~B7+C(BOf2ҝ9S6,./ȶ4}F}.3&<#O@ӡs)W(A1|7n6*tE,|~4.*o??H(rygw7 _O1T=݌飮)PXYt䱄|Ó^ r�7٩mS=܎g ho սh:5)ԔO1 KkIr]oޓuO|,GF҇3 *5jc=zP&oN�knq$_W# PF+|:NF-gkO](F\)?epIaY:I_7r:z kYQNIۜuM:޽vF?F=۟˖|ޥN9Sn8ƥ?w1Ǣb%h[h}-TLaˋo8{oܸtI'FucKSR1kzm8h. >pϧtUQfrp츌\Eѝnyg(WBt9EqXCѮW5k/�'$ˉe"7}=F7֒9Z#NeMG:�5>^,aMk9M=wG_ZL>8),c�cLJlnK}9z4x;55*ehR8j2\Ue~¢m&R}J?8n^p6w=U?1Z6tݶhv3f-ZJʛmgb2ڡ/_S`xXL8s,yq~}޼k5xgƾFۏLOS>5͍C 3\c+kLƇEV0C* /�tϼhy2 ~_$r#5JeN7Oi6&a 5FxWc9QNRQo #=n+.3 /h|n*iAٽsѵѥ/ւӚ>zqg(bI>w}: )Cc| [Nn:FN򤗺Ϋ(-e6Ek;:4^.,~Q_d2vPkϞ39͐jݲIiㄗ3[/4tm~nsB[ɔ74wʥMb>GOS}Z Iapr:=59֝Q\7>Gjr\ўuREQ~W7,Rq=k=�8wn*F~\~kj c8Wv򵸕)ozd(y~Ag~ga5Ut}[]f{t"ƈeh~d~f0e-{]*ЫM(\o9og»::=/8?OTOGVo?ݲ|x9AzWS^=;-Jh=>y ʋۏ�_㲍}fٶ'��ѶG\+ƌ_O{7�Aq>flԙ_#✤} :t4Mσk#jҺMg>6M7݆BmzW5U*,hqSX>LZ&Vm }Z琉iJ/>"c,ˤwW'J =۴gόpev:z<MJsEzU{u&}yuxCPN+=-Zj-YK7͜K^GproTX$|ɣFuJ1x}ϯ}/7ˤ{ZjQ,|G5Ǜbp*+UfSš�[Ma}2i~.|9;B�V󳭭_S׫yo|Fguió7JV:(SqqBkfv׌qQORywкSLb\F_(*KTpr`վ"c5PGGU3F3rOegɮuZ~9W-&_q[GJE¥;2M<l>ӊ~K]NRx3wCgK9{qxz#=> }5rOu-44qoŵ SR;㗟hmi`ŧR,S ˱CbjOp/54kiwҋ~Oe][WJ1-u*Rll+hFWq/=bRO[%7t8t~U&߻qSr |]6gm]R($7_3+Y7q̣1AΗ=R^wGoxދ%$g�rcMոRڔi {LX4(g?65ˤ/_yub2(^IRKgi޳#_&q*Qv5:2\f9M z'W+ѳ(S6,<o}=ܫ}qmYsz5j4GzގEo^T=Ϛ6tu'tM]y+%PnmUfokg?CU۔f]aF[B(SqElڎ$oyBYS)f/:vj<qgW[EN/xd=֚Zs”+HZTyd޺g6w3SYz~_,eco'-ӓx(b8eŹ#*SJ8Uk-_ӣuF:Sg6Wp/&ieZ)1>墋6vw瑯=RĔ!$$>�g-�v5f)yѠ:4xGޟ`㵇qnjQ[E{]9t"wN/O7t*7jɯ</Ը cܧW[~Vljt{5�Tʎ Q6Ty9ڣ�}F�Dljpt )clǧZFjYܗ3@YZrP/9gA榥Ni-O}^JSޟh.3L$:WU~g<PFn)f1xx=i]UK|]8V颷|ѡgC+uogB_uIQv]cF{ViS2'RM ۽OMCoc.0THjm75_i{* fKjV43\Ro(=_iCսR}Kn;OHy/RlWf8C/ZWe5< q{\%MϙjwuZnYAsQV)籘Ӳ~du.j„UIjKtN]YFo(3[]FjxjQL/zBMe6--FMU,;�Sٽy2^{V-Æc9ҸNKI{Xy4i?eӓV l&ScopeWi{ލv=^Ԗ~&IӅiϱ=yWٍ$٤s躵w]jxˏaJJ6^VS}< >x�74ϵ=LgUR39vgk B*ex߬S#M-E85KGJ(Nq[7-f-?+9I9vwT*ԡBKQ{Xy#_P?oJo[nBxpj<xR $<\mt4ؒcܽ6jӠ8G8[&C.{FDI)qwBē[t>SG8o PzyԨwuS~km7 {>RM\Q1z�讍VZʢ\4ٱi[y:Ɔo<gi�?CLΊvvKFѣYb<vZ^b1rK8=ӻ.}z~K57Y'K�ת׭m�e{` .b%<Yu}?tzL<c84njRk ͨuf#~S#@ܭVRMn4*� HP����(���HR����HP������ �����R��HP����� ����R��U2_3iV|gӝπʭ9lrx|2b7^]if^?Nᕿ X}RY%5?ެhƫ% c)l2IpݝZ\O e]f튥zseMyEiZP-5evpfak~c,oRSۧT=IXRJ=oqz]>Ů-[zS4xZwII0xQ8:qOHYWxړ!J磅5:Rڄ<rLT`fcs?j5lja|_fؒfX;P4@D@C�A=n+zGnBJqO K+⹛Qs z�W&߳�:Ήx}vǰ�9._;̗]jg՝������) ����J F6mN0МDgσa.S/�}Kw*J:N-� %^o I6'o {JqZFXKhU>)v>g^ &}4S{Sϊ>`ˇuG^jVǿ=/,ð=*it̞7—,yVmFs58tzZWGR#?koyˌmU!KQ:Qo-n7=!qVR3I<%˘z-O8|&[Mӆl2 #5=Fڅfv}`z捺U6q'ڜKRi tS@}ouoR >| >E *tjNWs}U^%FU$rxzfM*%Z`0;LHUԪΜpFMr}\ýСe8֭Iox݄p95͞@ [|ծBSw'U"QR}$jJ38)[20_ m: iCnx38Zw4-'aIyͫN M׉Im򯣡eo <<�9qE)m5�NwB*М~& Fqx_nr֔qsm5ۼ5464ƝͨI6a߹FRZޗ0SpWh:4tI*ЩO=k꺏QJ3�cݻV~j*rgV4tkeQp廗T}3pjTZe' cvRJ 1-Kʭ4ITۦbu2o Kӫꑯ=K{ Z%jto%*PYokLyb:5>ڢ{)aB՞dZ)ɮ >|Sr2S<tVޟ{+*XrJ<εEߵRS_eO),%*;Nm9><Ŝ:g^TyY&#{uBzCsيOr-dwFRxJqm 1Öi]nzt*M �\q[iJ;p3ǚhV_ƍhTf~3X̦9)<u[T #q2\l 8<5'bQsoݴ=8`a2GSϦHeoYqnQ8p%&8jݎ֗uBJ6q@,V#{G 7nU&ժ­9)GeoFW0T)nn)9<%4&:u5TFmK~_zjeӗv>f$rZZu̝YN{Z3{*R! aɟ< _ggyVQiɴծhմQV2xLW 6gYI/ԫ>3keN&Xn *tiJ1Yr{NV8Ծ8IJ/kcTU`䤏 ں*TFMK8OtxS1o&X19yQ߃R'إ泸V1]@BVHqL`ڻ%ҸO iԱ)EOI^NZgKe�o4:u 14�k/a_r@1:e*o)6CNG:k<q<cS7 ;/va81xIƥ$a&Ҋ{aa&OWJ)spzM*VҍJo #$jE᧔;k;1}Oq \ '><yn)UiԌxOfa{-&:PN1X3v7}#JQxx`.KMRqYǫRUjJsyry<㎇Zԋ#3BbI�4;S+NS?'umeGb̟bqo=NNsrY�: >qyNSj1Y~ ˪ՅZt䤔{ N^ڲw59N)MKᣌRe«ge5)?˯ZU꺒#uXR�L#3�&:�hvt`,͍Q✰{9cGZz=rrB1Aօͽ F]o=FvqnMO-pguJɝWGka,gy Wn2˃jnjWrk*PAyf=:*vNq{9 ,7^vv16 q⹣ZSsSxhSio5 mf\erAOԪBX8II(շ(=0YַI<5J11vqNm'Um6}峔 ujJr$)ݨSrxJK,Ԫ¢%,g84AuuۜVyj\9A\ u޳aV{7rs KuyҡÃk; &ʅ)otV49J~y<&ҝ^ƈM oRݳM�Qm{*p|6/05+[}qviFiݩwAf:HTPؒ3c8¾fXp9zhgg_1i-iu 4VGkqT[ _nKծ1'$㾣vЅNYo;l*Bܔs&43ΝԧbTkMN*K~F�47Ӆ Ji<ԠkA۾ lI<gB4ŭBe/lo{.)ҧG pF3.wޅzUi>4AlEۦ%iUr}I47aV emlL,uUWvsَ&M��HP����(���HR����HP������ �����R��HP����� ����R��U2_3V|hs�@*� R�� ���2�PR��*stõc9(7' F[E5եSb_|M ��#9y9'S~`�sW]uw1._;ϫ;4� �����R���� ����R����R���� ��� �����R��HP����� ����R��HP����� ����R������������!@���!@�������(�����R � ������"��������������HP����(� 7(I�(��������P��������) �����)��������(��������P��������@) ��������) @����) ��������)����) ���@��@@��� B��)����@�@��� ���+TKڥU3\3Dy҅{~T)4ϖ4ښ}LOٟ.{8<noz0}+HS�*� R�� R%;���d)�J�_ػ{RQrgoNzUb^=xYݶXFKy8uM9Z*n*5CsOOͣ5k~#%;igFL{aBٗ��˷uIy9'T~`�sW]uw1._;ϫ;4� �����R���� ����R����R���� � �������R��HP����� ����R��HP����� ����R������������!@��� ������(�����R � ������"��������������HP����(���R����HP����(������������R�������� �������(��� ����� ������� ����������� ���������������!@�� ��� �����!@��cHB9BT%#tգ>x�>M&|:;Uӕ>2&W <=N�" ��!BPҝ}W1R[y}5)&SsH F3,\lY8z1Y0^liWr׳5FKX|_v뷟'4*n5#=G|yRqi->(z7wuVT^4Ya{Iբn"fΕEhAŨ,aӸ�@>/U֫r�߃MS)M'7V>3qF:sڍC9O+%eZS\";z'TuIy>g�5|EZ3U󿙌@�� ���!@�������!@���!@������H����!@�������� ���!@���� �������!@���(����� ����R����R���� ����{>> k[<``̩؏#eǽs ++1?M{? 3HlHc<p0W$6W$?g8~AerCerCQ~cW$6W$?g8~AerCerCQ~cᄦ] }G?2e\\y?FL++z3#&] =G?Œɲ!!?Kp1m6W$6W$O=G?Ǵ6++z3cFM =G?Ǵ2lHlHa<~=]{\\y?HmxEG ,�Q4M>�&Mp\Iˎ~<)%n<k����� B���@��������(����������������PB���@���P�����(��������)�����(��������)�����(@�������E����) ����P��������(���{Pj_cH}<:Y8<xhruM7 ִJpS�|(Mqqw8(sSPӨ*\~<O qgLsw=k\$`=764� � !B��Pz}fCSt.LJ*QyOGcE}SRnwx^? +A#%(EO ���jԅ*rQ+-9^'[wôU:YCF8rc΀ �#%_6M#5 jb>DsN/;:'�毈U|c2]uw1Vvh� @A@��� B���@��� B��� B���@������ B��)������A@��� B��) ��@���@��� B���P���������(����(�������*D[̴|Uxsý�~˴XCཻ��������������������������������������I0�Ӄ='YXf82=|}x>|yx�>!@������������(���HP����!H����(��� P��� ������������HP����(���HR����HP����(���HR����HP������ �����R��HP����� ����R�� _e*=i}<`IEIa8[ј R|2Z::Sg:%[lնZ=�',;,,5SjQݸe⏝iS9?{|\s.U����F\if?M#,{[Ԕ*(T9gƃ}{T~-μ }Fy;ժÛrs89ͨ,ug}.U_J5Δş 8:u'MqmQ����JOGda,ouNOw+l{@�si]jfKWf3� ������������� ��������!@�������@�����(���HP��!@�����(���HP��� ������������ �������l% 5#1OS/�S ˄�������rk)jҪ9m,c/P˿a�<ss|G.w5`r!)ͥvP|oI+V47V1qrmx.֓ o}ZCY߹]}? uhk[C5%͜zKGi> QaepjQ!s)BRٗ5qi[Z)qɏ<rzPq?*A*P75[,JnxNJ8wz~%? xGzE*⒧U6;ωˇux345BZe jsQx�*~V%mi<7Qqxp3oќu_HAiB2�GҪTmU(7Gxz'҃ +;Y\V)vv:&&Te'>|I1å}@86OQUWrIksҍN;Mo}5qGd+H޳Nޜz I \zDnx|=5ե^4+GG<dX>5$yOzfx,r9�6�����E?u'y~pc˝HS����R���� ��� �����!@���� ��������������� �������!@�������!H����!@�������!H����!B�� ��"�����������(���HP��6}<yPр���T޷3� cz4)u3fTw(oC*ShZk{֞S\S>84{^ʑO_Y&^_& .2zJĊ4׎S)HSH����ToET#b:t3~:T-Z\$ԿS쏖%YP�.`� ��W7|1s~c#|7+=�94Wf3%Z3gf@���� B���@��� B��� B���@������ B��) ����@�@��� B��) ��@���@��� B���P���������(�����P������Z^2i4f?#Ǘ՗x�j������w�#�!> WNVoR\RGY2w˩/9NP{vSrGO�tW7T5}?O=jR}yq: }Fn9{ˏkY:;YtSR{ vv=[Xg:tzRyb~{s{VtԜTyxչkpnLn5kFvj ݎFqӕյ:ɦ=LyOV)VYnŔԭU QRc1 5Ѭ)4VZ89�[\Qn-Q*xM{[cRW>FTvvx,NjެۇFK7hۿZqNI$)6%k/Om<#ߣ*iWӖbYǚ[tmC<Eat�O�Y'˯Y'tGcf_E▇KrǤծNޛ><.Xf_GU(ү 1}عOɿWSEF{=e)]oft}jj' r'ҫ TQMdzyȗ}4}5Te2qYЩžlRoR?tPxXcHkzM/VA7nXh$1etgKXJnn${˯64vZҌ]ҝ>NcO yglsqq;reu޻֖maN8 >/Fvֵmڗf^>^Lҵ)^iu)>Yi>)GO|MƫKW!MVڔ^�'0OLql0pe=wVRΚ(S_}5 } SsbԞ[da0� o+_{�G������$S"3/Ǘ>oB����) ���������P������� B����P����������P��������@) ��������) @����) ��������) @����) ���@��@@��� B��) ����@�@��� B�KG/�������� )BQsFYp9%s{veN2})SFw :_{&Ś4qM>)l5g=xzzd: 7zmG|Yz*2MoЦ]*j؋ڛGڣ=(/}9ޒkT 4r/g(�}'0���z9|1s~cS]�ɧ]uw1._;ϫ;4� � ����R(������!@���!@������HP����!@�������� ����R��HP����� ����R������������!@��� ������=D\ aKpݝ�^�O6<1�|p����������������������������������������Q-xgn �,j $z!B����!@�������� ����R����HR���� ����R�����������(�����R���� ����R����R���� ����R����R �����"�����������(���HP��6}<yPр�����������T@ҋI-ϊ{9zvG4&�˧kQz]զ\ k9Gލ *:[s=XzAۅNփsG2%^<HgNJ>A{;ecQi7˻�|첹]ڥyv)lVV*˄"I\dWǭ�s�� `�/s~cS:�OU|c2]uw1Vvh� @A@��� B���@��� B��� B���@������ B��) ������A@��� B��) ��@���@��� B���P���������(����(������� xr*2Bx2X'݇/g%QNYqo<tä&Wx;I6jI:NU:Nw `wl{tf<tä5^'p٪'p;Wx;I6jI:NU:Nw `wl{tf<tä5^'p٪'p;Wx;>6je4ogjEQKN/k|\0v9<:8w@) �����(�������@�@��� B����) @���@���P�����(������������ B���@��� B���� B���@��� B���� B����P���P�DP������(���������(���mR(yQKG������������������K)��=څ-b2_GgyPyN3|\9\Qg qf U|r_ѩzS.ՊH�4�}'wꜯG>?:�|EZ3U󿙌@�� ���!@�������!@���!@������HP����!@�� ����� ���!@���� �������!@���(����� ����R����R���� ������� dA g�k)91?PT�91?P@�C�(C�k�L|O|rc~|ɏ9�NL|O9�rc~k�L|O|�L|O|(0 &>'L.C (ar(c'h�E��� B����) ���������P������� B����P�������������@��������P�����������P������������@@��� B��) ����@�@��� B�KG/�������8FI���������������S54kwyvJіeM{ͯ^ˌcU폨n2*^*Ӝ9LB3XS]үXAE>x|x>\J=YFmU_�wǏÿ,\kGT4jг+BPx|/\=�9Wf3%Z3gf@���� B���@��� B��� B���@������ B������������(�����������(��������@��� B��� B���@���P�����(@��@��� @DP�������P������@��) ������� B����) ���������P������� B����P�����@�A �������@��������P�����������P���������@��@@��� B��)����@�@��� B�KG/nԡq7N?GkgњZPXQԆ[x_`rj].]Mʜg-6mRk׭F6T:Iag73,t9%:ZO+&ZV6ZtO[߻L} tYYEStl.&YVNemӪ#g8ol�]Ctj6qgN\rv iQ$IʬU( ǰ*U+өRVGk' }]ʭ8Te)'/2<2JTiT8o{tZ -\i9oQ7zzvn\*TrrPvt'NxNqDpFhRVG Im7j8 T徦;5i鶴=j4ڪcr@��������������������bK_���]uw1._;ϫ;4�  ���!@�������!@���!@������HP����!@������ �����!@���� �������!@���(����� ����R����R�(��� �������!B��� �����"(���HP����(����� � ��������!@������������(���HP����!H����(��� P���@�����������HP����(���HP���HP����(���� ���������������!@�� ��� �����(!@��ڥPѯ v{%% /X_� /X_� <^_W00 3O/_W00:y�W00:i�W00:i�W00:i�W01t:i�W(1t:Y�W(1t:Y�W(1t:Y�W(1t:Y�W(1t:Y�W/-ɶ'�]j`Vvh����������@��� ���������@�����������@�����������(��������������P������������� ������������� �@��@����E����(�����P������@��(�����P��������(�����P��������(����� ��������(������������@������������(������������(�������@��@@��� ��������@�@��� �������@�@��� �����@���@��� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/book-banner-post-release.jpg������������������������������������0000664�0000000�0000000�00000222626�14332737457�0024704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�������������������������������������������������������������������������������������������������������������������������������������������������������������������������JFIF��H�H���Exif��MM�*�����������J�������R(�������2�������Zi�������n�������H������H���2021:09:23 18:36:34������������� �������h������ http://ns.adobe.com/xap/1.0/�<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" xmp:ModifyDate="2021-09-23T18:36:34+02:00" xmp:MetadataDate="2021-09-23T18:36:34+02:00"> <dc:title> <rdf:Alt> <rdf:li xml:lang="x-default">mermaid-banner-small</rdf:li> </rdf:Alt> </dc:title> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="produced" stEvt:softwareAgent="Affinity Designer 1.10.1" stEvt:when="2021-09-23T18:36:34+02:00"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>�`Photoshop 3.0�8BIM�����(Z�%G����mermaid-banner-small8BIM%�����bwa>,hdICC_PROFILE���Tlcms0��mntrRGB XYZ � ����1acspAPPL�������������������������������-lcms����������������������������������������������� desc�����>cprt��H���Lwtpt�����chad�����,rXYZ�����bXYZ�����gXYZ�����rTRC����� gTRC����� bTRC����� chrm��0���$mluc���������� enUS���"����s�R�G�B� �I�E�C�6�1�9�6�6�-�2�.�1��mluc���������� enUS���0����N�o� �c�o�p�y�r�i�g�h�t�,� �u�s�e� �f�r�e�e�l�yXYZ �����������-sf32����� B��%��������nXYZ ������o��8��XYZ ������$����XYZ ������b����para��������ff���� Y���� [chrm�����������T{��L����&f��\�C�   !*$( %2%(,-/0/#484.7*./.�C  ...................................................�h ����������������T��!1AQ"aq25Rs46BTrt#3b$7CScu%U&d�������������=���!12A3QRq"a#4S$B5rC� ��?�j�;f|, ^7Cl� @(�(�)�" @@P�P�R���� �� @�� @�(@*��@P � � PE�@@P�P�P��P(�( � �� @R����@H�P�P�P���( � � @@P����(�(�)������ BT  ���� �� ��(��P����BP�E (�(�( � ���� ���(��P�R����"(�(�(�)� @@��A@@B ��P�~s>vYnL)�� �"P�P�R�E���@ ���(�(�(� � � @�� @@@PU� @�(�� @�� ����P�P� ��� �(�(�)� �����A@@H�P�P( ����� � ���(AP*"(U@H����H(�(�( �����A@������*PT�����(�(���� �@H�P�P}qɺ1͵ENI-=z\SXbq|~V?mތIec V�zbwʺ�=;~ux}u?ۭDc8qʺ}quz.uuOaWSx\>wX]O}p8 WSx\>wU*u?nE*j/aSmNKWRx\>_`]K}p5bTԿn=״ U�m=m ]K۽p5/ۮEп5/m�c'MKb~TԿm&uʚ�OEMKۿccmE~wE\>LSR};SRaI_ʚ=R~UԿm}uD5?ۮ�z&u'%ʚ=ǽl[y+O~kZeڮ33^lڠ�1x#��P�@@H��� � �����P(�(�)� ���)� ��ABT��� �" P�P�(P �" @@(�(�(��(� @� � � @��(�(�( � ���� @@H(��P�R���� � � ���(����DP(�(�)�����)���A@����(����� EP* (P  @@P�P(��(�(�)� ���A@����|O?r|0Fl}ld*P B"1} d܂7ECv2vtQ b$&TPc`A 2 @1c b;~vm;Ѱ{roϰt:fH��(�)(�(��R���� @@@� P�P�P���R� � ���@B � ��B�P�(�(���@� �P�P�(@( @@H(@H�P�P�R(@@� ���(�(�� � @�@@@P�P�R� � ���� � ���(��P����@P�R��@*��(�( � �@��� @���(��P�R��~wK}./^|/l_5� wTJ$b1I (EAb.В2UD"@c*v e> ߭x]N?{zoϰ�B�P�R(� � P�P�P�(�( � � @�A@���(����(�P�R���(��@@� @ �� ����P�P� � �� �(�(�)� �"���P ��A@@H�P�P( ����� � ���(@ �(A@@@ � � @���� A@@@P��(�(�( �� ���T" �(�UP�P�P� �� � � @@@@P����(�(1�\^ _Ş�0"$ _F,F$$D;$@$b c @eRV! 116wק6oP�~svYnL)���E�"P�P�R�E���@ ���(�(�(� � � @�� �@@PU� @�(�� �P�P( � � �� ��A@@�H�P�@�(�)� � � ���A@@H�P�P( ����� � ���(@*��@����P�P������ � P�P�R���P�PB�P(P �@��A@@�����(���� � @̲<|O߯lY P�sSF.)dп7!ij)]O2GΊpR'�xD>G X~�Q·|$e(Q&e j}䚣i F20 eB eQIh@2ጨc-σ~m_izOlޠ�|1x#R��(@ � E����� � ���A@@H�P�P�P�(����� �� @��@P(�(�(�@��P���� � �@@��T�� B�P�R���B�P��(�(�)� � �A@������P�P�P�� (�U���DP�@@�P�P�P��)� � � �@@H��@BUB�( �"�R����@P�P�P�P��(�)� � �2!�%>}ʽ\}ݙOTַ , xeW n%(![lU}eMHrc c*s@*&2"bwg8|ԗva\\\}}Ě1b9{R_dbRȈJ2.17[wק6oP�~suYmLت@�@H��@@@��(�(�)� � � �����P�P���� � �P�P�(P �" @@(�(�(��(�� @� �� @��(�(�)��@P�P�P� ��� @@H����(�(�)�  P�P�PE�@@�P�P�R���( � � �@@H��@BU�( � B��� ��P�P�P��(�)� � �3! <V=Q*By-6ŷ3I{n=v N6T=Z\W᮷{p˚3ۇf?Vn$}></[m̻6^&}ۋwDFuӴn۝ao]Ymw6+cY482�.Qe8;}%b(m4|{ Wj.xږ{ϹacMUS;&VnjVM])ك|jڬrK$:+cnؓɾJJrԼEp+bͿC#Qj#ʔ&Q{vo1tJUֹǴ+fY%N%UkǗ_giǬ 12ÉMo<%Ş>>5G!9F0ϲKLkLmrӃ4\O{t*P۩wal߾IcSuuSj.MG.a{#yIqFM4=rc.yntꯪgM{K(I@c*YRP"�NMc-׃n_izOlޠ�|1x#��P�@@H68N61.ur:1{G]/Ɍfs��?kGy8NzsXK\ܩgid���޼bb깰ƦƍҶ I>ey{V;scf'h5 q鮪¸G؍+MVf}kѮJ@H�P�P�P;F/xn~漷GKHrZ|־ >^]"wc чBۦV/|4i:V[U7ޜSf6Yˊ/)1&�(����(�֛gS+{Gw]VƼ+ktdYRmji~"'vUeiْâF䓲&/{C%x᝹0EգjЄTcJ)l}Gww3Lw;'Uί 'l{좗kfkVI 3t+jSp7 On֌0j)'ȉ݇7f8-+.yIԻN|aIMSOʊVþ/thُ%rW@� ;0oUuX[':khY/02=J�� ݼbOPjnURvnyڱ^ٍ]ZuuB0miF+dëO382ь7(�@�KuHi_ZCus>u߳n5x �t8x:nL1hJ퓲&*<m[ӷ&6iYG;&1IE[$gO 2p ��� @U4߭tw aI*Kc)'MGEP_,"KM2C_:U@P�R���ة<SI5~t&.>DƦ;nQmrI{Z1z 6ȿ-_Ev-߉Ǭ#iIbxъ.n38ea7 ���P��(�)8is./S{EKir����P�P�}\WiͨxIFKRr#}A#oqhMrP�P"a6d\߭AGwN OA }v+le<ZvK"(7M5:xdNSc2Ѽ# mz6=z7I *J0Ix3ijb�(��l<7MОUS,TW[\ /c7NjQ$m׳xLҪ� @��A@@Q-5|V彧tkgJ����� EP�*�T  @@P�P(��(�(�)� �� @���<k;gUǂ؃9N_�ov9cKd8Y~ScJS<Zi/qY"rVb&b|}+FL#UO>+g:9rkyA{m-R1UQsƧ%&װl;̏QwU\(mԖ>&8<:c"&g afV r]pkOpdђhy6?mnX̊USkڍգ5"mm;Ú/̈+U[dH3dDqmnL}kPibV-r1MF-ˮQ6wEMY|M6Az%w.[N;oq4{No9S}mԮKo:4v}iO+L\Hd&\>TKٗ<kkIiv_.ǢRQrX/3g\Z;^-sNy+#|v4NKsQx9RzZSVb]}(2j2G?8I}.MMs}j2_zfHǚ&-XZ]]pNU\�ߓi[%fgpEʭ["R6�,{Ke_oaޑIKp3ӛflԷq';w/{IX,*4g#r1ow vnrz:KN]iOӏމ1;Y rOތ&Tdle) d d]^߭x}N?{zoϰ��P�@@H=W<�2n P!PʮLal0M"fht}"(UȝVEqrkfa6P ��";#_W_0QLkѬ@H�P�P�P6'8sXkx//ÂFOI鰨ꏧC7.͵Yfd_[F5?u}K6፥ u]cgf|S*OE @�� @�w4/>fZInkfyqJmq/fki mtZbwHK>lQ> ,g�,Lz!:Fѵ<#>nW8e$S5\Lnq'kWJ|_[m>bv"6aP�Pq^;mV uƙͨW6&7tu}K#VϷ;'N{.XE.čF*b6t̀���~ _~,uk)=j��1”STdU* -YSi)I@Î&5TFUW{gw!cfƾ_YOztbM@� @�lBzKun|;my:Eg]M0OkuQuvqYؓqq5U_E߬i-kcӹ y__rkqK4=CŞ? 2u�@R�� >}�/rk}Z[>ɏ&դ5��(�(�9?:#1Fǿ5Q^91zL6�7#g%n'3U1FP���� �@H7 ]/<Wy{YGFHQ@H���n5/ƪsJ;Q{Ec-N'M%(Z;f7):<q\+˗Iq'tbM@H�PWkNpZ+ta~?,6tJ&Q}mM7CtG]Qj}> &ӓ�P3/FFUѾY^IoYϨ#dS\u[.ъ/EᙚD yP2^v3c/^LQ~ffL-ۚ]˱RX H7 w??Ň$4T���6c#QIjM}bP�P��( � M骄Tv[hiIt5(FKdqa['Fu*@@H��@BUB�;Up6*Qi?a$WKZ'KnLS3c͊@ @ �P��P�P�R� � � ��� @@xw]?ϩޯسWhc.id_<HaJa'8ܤYxc}RY䬩[m)qcmU˅8β$[=~ϰ\W:vm2 `Qһ!n{0wiu'Z̸fr,[]}]remd_kqU풜).uۚLC G2F*vZ5Ο׆c K#Urg|˜Uۺ[J)ºlUh+l}wZǯFUcm&&<좬y)SS싗[icddb_[M.LuZ7c5k?W:yٓP{%׏Mc,u}R{ӡjqq^I㵸9p̸W]]pw:Ʃ*ssgmMѴv>aKXMgVLlmޒo\UG4ur1lv뛋ku[ք>Zms2t7Iz Y4زNt9lNVMJM7V""@AA/6%ˌ|L-_c ݳ^Ҋ"7hInuZK|z`<�=_l߯şat͂�B�P�R(�� ?$_y_K@;WG]Y}X,k~cuqF�:h<o:M˘fUV/"e^B:yV3rz$OSLiR8†УL#5UӏtmYHwCKt+5.%Q%Jw.znLx0ϱ:N&fe8pߖ|_*ZӼ|wQî,f6R<O]C'7Zkso9U%Mmus/6ǼV_=7.[*}}}?vhx/b\Hxǵ}]~%o(ZMgdaCWTIsC|Iwsj֭]}6fVWذUx7B95\�?6ິijKSNwdգNIuX#&0͢7Rꜹ%ٺ7[.*Ҷ,tlN=0PVo(Z^U3r &e-"_cp6;g)?F).�]i6?(Ͷi'5Uo\"b~Ëo3F,mޣ5gZ[-~g8yhhzxJ6۞/�/45"'v,ܪy$#QkE[o'/ʵcf勛emMƱ//ڏ>Զ ϛqK4A&6J+-W%mN?&.|]%t/N_kjr576vʶ�yoӧU1h+"j mPW{gkEbm=!ձksNN5&~ڬ>L7}UpgSuzt)p_a'.O177yߤjW_*m׵xeӴo ˰ DŽt[Rd<l1%Yp DPT.Ĕ__zft\7l7}'N!H^usoͿUbpF,L㼛ti.ƢӖ/^*'9rp>fuy$ m߿Jkxz/6 ݘ88NmSI߼-ŵ2sq^Mf8Iʖ9>WWMwg*yԺM[~6Y8炝RedkROW.3�9o4.lxersɽ+[5o//)p1+VUe2h59iZ~-;1aGH߯n],eN.9ߢUZ痘*˴z߹xL׬;6p&"8=R'jq2ٞҰt/I5l:z>heI8 2g�,Lqz!#`p5CRsA?EUi)zei:nf0qDg[rQ߭hJwJ%=~GB6AJ10wMWwXex%;q.~_~]DS\}:=VJMԲa EK~85o#vK0UF'fcVJ1]F5آmcn~MC*c-naF4_ho.-9pVg<|Yٳ:e-v[yOJv91!1;ƺ<=|WzL(ԡ+N} RԔ tYN2_oJǃ8IB߹X�sg4:/F]9BOgNl'&N)ƻ3*Z#mQ=)Y3zUz -:;f˗73W"uj1d¼EjӕU֦.o0K ;:+KmWsWY^hgJ}#3C�FJԛMY)y %/:�}̦5v.-\||IjzRq ;*Ouͺ]]n Ki:qng.m͌|1̳n8N)OˢON�#vK__ٖj]7PMfVDG _{M8Q xwI'i5\d]Q.׿2éL%@� Ӵ]cFq V43S.,Fn-Yb\n/=^/XynZc0�cMoW[K�ũ>'Z9ꚽ7R|}^'wlq6ŒL,:ȟ9-{6/<4}1prXp5S:u6OHߖOGkG=n]w,qlt7FS(omZ^xy__el%eYNgEfL7l7$N$o^]N*ɯSa8>6i7Ĵ3dOyqǍw[8-Hc-?qǍ= }%Ի>HIͨBjk$2}/W֦݊.,ѵ-#t,XOQ{Q8٭yÚ5N?T\\_/w7heۋ|vr=:Z/X3n\78gCU\qr{F1gUn. lf]Ηcc8Aï-izM>ɨcwLivL�|�&_V81duo=i׉\rsu-7>Luy4趌1Vn /B(Vݮ+g�Ok]+,:,ӿIHl ߔZwײ:5;LeN*pk(]z:[^!иg5w̪WmMɗvp~D4a{'Ѹo�ksNlpcxRoiE:ѧwvV%xڍeSa\}ϙuw)Y%_pޙʅ0v =$_͜>HھIrZs膛]Q.<ҩ2mwxbtl{U^ m~ gtyj2R=}s~:e2clNr^YdǛ`i[nnj.TQkÿf^b+~KG?}|T,1F}Bq")4]gnr7M JҰUp}\ҳ%yϓ%ucpֳӋ b_quz۬m;jiű% mY#%xh0mgMc rY7_t|xc<3ng{5%ݷߓQXzqDt%xx9" ?yiCZ"+r5ogl߆z(L ؓxWPrk^z @ڝ9ԫʼ1'I&*eUW6f{�M7E)d_L)&^y͖ghc+uY:/\yeYɗ4hV|"Kw+ u쌸e^9p=0pJMC/kqpX`8~u|zor/li9Ym65Dܛ~Ê8co)W {яU.ivF.ŧ>>rsj=/)VL_s^7X4Gƒң\U\\9r.o&FXEε]ɒQ ^8bƸؗmqp}{wo;8v`fYg[]xxf4?KF3抛[re{_f\,aeU.Fu]Xm-nsT�IVt]nKU;M95b߽mvbO(w8Olx'jM6f>KZ$8[.dfoڳI.4.r Y99(9r˻kNot'TvW.ֶI4#.LsuNMM112ni^]-8-rG dmŋ,}2]vWe\Q< ſ2DxZ+= *ŪUݧib88R.$4WZ:�P6Xly|믟Ǘ~Sſ_<Dއ%�Gޏ=CLҰrte+]2ڷ&~-GnIG{3sco.܅}1N)miFKU]:EUEF.n9L/hJAeIxh˚wnB~0mXmFi-qe3ԉl\UKbCb#RQrvliچ}]{xFRKHr 7Mą-8uYmnF_%AY.MxmybS@7c>7eϷnywHXV<Nmf}:VJU(WJifx\H[‰+h&ʱ7KyvXiu'rrz43\˩.[}m11Ok}QKi;X݁ŊU094MiӴc5{3/<+Kqԥ'FNKkvoY/ o:Ɗ.=>,Y'~! pDn׶&mIuŁeͳbߟB*zEpoe%% p%G~igg7O[Ӫnjr(\oiGg$)!Ӱ囐O)o)x#e;ezFsm˙M9/ŕec;vRKt/V̵jҪAUsZR{$Iy000iS˔g'.ϱ{Z~/&T01ohV7gtS}4OliK'<m/U>˭/B8Pe{7Rf+R8Z~ *Y<ҚwF;y ٯq^FEӪ*/c'xe6T2[4$i=Ю>>)N0S}s˗n,wu%>.ﯿoœ^CaK.ǻq?*_{֕9˷tQnc?& Szdgk di7 %iVn/dty#[Gl׬α}n���@P�P�P�P��(�)� � �Ƴ?&}N/^<.l'iuڅΥk[{4d\s>mvWm%/EJ+YyFn^=6fƬkP¶sHۺQaP'wA%Bl02]ZTe_7381vc$ڎ"gf{t]&*]_;߯sExR4lq\loDzI{ W x. n=s7 l[e-Z<́v I 1+k*U 4>a0iI55lT"-ֱ8;~;4y�zٿ_?>>  ���P� � A~HF򿌗vuy>g38uLڼQY� �\�l|h}X+rKoqvwsz}Fˌ{/Uq̳{G;jmF܈B;R>k0W@푲yM'fdܥی^Gm_k_TEw�GwjYY\o%*8u;5vz7)ۍ6ˡT{{{<Έ}z`oj7!^di}W|85;a=Z7Ҩ}L�v;^U휸$1bKw/qfDwS?V 8LdrT[_zGFf0[eWjqƫ*))ߣxn7?o<Ӳ¾~Y-{non^G/k~Ru=/TN˅lMrW}&8^6Zd{J#ʟRߩz?g6L-եpV,>)鮖gM?k0q`:f9=##(_.ЩC{#ɮc�vc-}#Wy?p7ԾzUƩj<,%Yv<<?cZB|YJ_#�zz;3GO/e UN>'M8Ɍr8Lʎ^ETҒzQ%u+x>KͪyDӵ-S+OɍQ7I;t[֭VJ' pmKr[\Rgㇾ$ڿyֿ?;lMOv~Ծ~6_(Z�^~e'{~2:/'qDTb7K_;td%k[ud5voUd<x|J=MngD[W|<{͏`oupckmUt Sx=Xܚ%K}|O[Umg=o{-ٟ||9)bn{ kl_Oy?Ϟ8[[ =^Dۓrmo[맥e6Uܹ7uxݥX <Y??=L^glSmgyR�97dgaaGH#JP{}ju&-cCv¹sF5S>gNr(}woK<>?y0<iQ~ :t�*6VӔ*W4>lcθVN<G}<Wu1|OFI/�K{u�Jٿ|UǨ jrG}XAI}ʛ6xcS:[wǥm+!oW5VVT}mlL,ѻq2j8ц5[zWy;]>Lc'KN7#0r+We;l͙+Z?j|qC'LTS[I7ǵnk W8 NҨOl:,cOi6rHWۂS7?Wxϼ0?I?z_ٔf~{RUK_{G~eY+8=ɷW$,m>nQZRm<g,ߓf�g?SW-;<v6yXIsxQQ]z^.?'GQi1Wey;JRd_fiv# pޏ C'&Izro?nfZ$;j7OuKOcܽǫcVЭ_.?kO~�/uW͕�1_2�'?5}Qͯ,ѵiS26ܮzXjD~ X˛�?=*ܵ?6o2=jAy9;#gXه |Eq.Toءc19>'n|5g4ծ.%0T5~ΣOF:u+U+|=ױ޺agke6F sI>lvijb͔tm|ueJn;c voţW7t]2#ݾyDj6k6>�ɗ;52<cFl1O'.]_cVZ&k# m�D=|-CN%O?:߫ǿs4(Ęڗ*Ty^3_t϶o߯;?/;Jkvkhhl4̌.ni9K﷿Fg5*O6~K]oTwKowjC& 6ڮ}=]Kx:(yzN4Y2{Yߩ=܏*wQ̀t|Yurl[#eb~uGGt[*޸>~v?5rp<cr\t쉬в-ݓ=*Dm _�gKN匶O{-lF),/?r3]RIir)-\%Mz]n%<=9Ɛx#BvINǷhZ6sb83 6[1/1e}]konԉBå^zj|z_x5<KѲukQwNn.o]k7Mwkܺ3o tmj&{vy37)6m&Y,<ۮN>_~#%)3> _ɭ.+qi#1 'Yqߩ֟�sn,U'-w%7TF4~m>n|Y}ɜ?<ڿ gfFK,cUnIz�48fHkvYN]6<fu^"k1*ܸ1ze2oW$Oߖ0࿚g"jdew95gVU+=nR7%8w,KxcߏladwMM~*ʢ[W-Եk1hXd4=sxpǑJKxx?Vlq& W2eﺒ�uzk-Hd�o<';#28Id8~~p|R|W﯁;'n;r${lucFp}-Bړ|/ZkgTG I.*cMǶP~ݶEz cQXli&eO/*&ΎGaɺ(K♳xlDө@7>t&].p&f$̽S/'.9.qdkڱ/tUrJ{m8ؾ;Vq_xN }?JѥtU~=R}[Vɓxq@xCS2q9?gbÓ s(6om,V~˩ .]{FVF|;34BQKo MܯS|ӓ-߫l=S[Gf{2zj]N+^,zy5[fc6j&^;'zdɺ(K/S3Ǜv*ͯZKR}b8p0^_ZmDV߈<>K2kV痚5[ Nn5^�Q%%1{<|MG-k9td 7ϒj<c9jy4mzKV� x4jZg_d#}GK~VI.=bKU:յkzF/rb:4E.$~K%h{Ni+mrceiXq-פ$r[2%t{͸VMzF(SΓ}׽xR_:,7T0! )Ez6V_?8?7HIu7ڛI/r2!$ڢ&_gNYsԛgiu8i)}1yJݖjQqImz,:j/iѭL%RG)2]i1bo+?/6>|Y/ 뗤^O-y)97ovN%.~�i4r%RZx#,~֤˾I3V/C^: �P��P�P�R � � � ��� @@xw_]?ϩާ^^X:6n~nND1'io9bLL^_o"M8vz.}4my2_\Q..'V>+u'eۆ-Ky1N1. ~qlRYk3K__ךP_4Ͷó-*udEvMEO8ebɯh6UCWvF= RMd)&afӧdkSfT9ij͢o'7S=|Ch{>C'+M~쑒zrc4-K=K/%)7ڳ̖;<97ZWNܐqMKa]fX]X'ic4GiɶeX&/w6SQmdr8oI¦}cZmF(F;ƿiuoһMQa:mnJN8n͓x%:0?=gdOjTvgf'wcr]#A7'T^L%diϭۜsJRk%1qs29x6g^ ]H c* �}UsQ|}]pCmY: J3\]T#sG^編�?9�;f|, ^6æf���E�"P�P�RcE7d}t|?̵۪dy5ȶgY76.wjdDm:0t<z'lc.][zK%ZG9X].YPkN^�6_E?Z_s^m;6/(P.j %ȿ'>_V56Kn)uu2_,Կ%][f^lOLl%в4 Y[ݺ+|D LӥdVϹ;+~,}a4&-K#Ue%onǣnՙ*^'c@[qU즵}Ko ߧy";#}]~+f/閣�/�~z�z7,#js7S۲qon {t�y1ٌ};Oo jw\Ӵ T}$^ZrI5p_>^'NߛTaU^KWR1S?nN,SI=aےzg͓t9j9<CҌ*d\d#hLL_F? JYTP1Ia?h[-x)nf9Ffޑ\!՗VV.ί�qh�y?ت\$y;q3+Nkoٯauuɇ0�b9'T:)'wb?a[I>I{s㳜&ܛmFѴ6=B_<BOW3~U\y>YڅiJT~W޻6{JM'Ͳ^iWidbοlV;Q<<Yri/1hk 2^e"U&XW 뭚8)nmeiyz͓1V<VP[+%-�%qydyU3^I}x;S~ᅚ_~iM~ ҵo4|"yѼa{,=-wenO0�4oU=o?IZ|B.B}o[Կ{NRRrS1ߖUo$7߯۱v3h|q4tPmv{83ZK8KLz6*�+J[Ç?5}y:ױ\!]O>~]~e͝rfO~U8zncNҘ֮q6ӴIi}Lw{^3E/W_6Crx7Ogוcɮck{ԗpbٸ&91s`8O~ ZQomќKsvoWk@Y5$\Ҫkm3sbϢLK`p(=�<+Sv95ʗRK~ޣ6II,3#'m[%=7{+XoK<>?y0<iQ~ :te_yO?611C�}U ntm8{7�oJ�zjz\Cn]]%{umKjNl~ru9,}uo$7oo;xyM T:q=0߭o_{ro~!iZ>tc̫sc)5g0cIӸ\m 1f[C a蓞~~T." {}yvi:ir|"/;(z;�fq|Yb )}n.x:,| zzfK[xonaμ׉=K OxRuu֞)jqۢG6/CWlz3~S?=|N~*cf=ҿ2oHug^Uc{oя<gc=^a\%d\")4]&vsmJt:-|0edY{=GQ&I&1-,d�~8fy8r؛K}O1<LshZ^v.^d+�yK|OO&>e&ڬj,&wŽ:=VOO <x'ͬy?L׮_6Vq�cƇ|gו�G6C??Yc'a~;><�o4=va܏Ŝcf?H}~ti}UV::N׌_il}&_HZ)QVѶ+5<Yf1;8nzL܈[(Ůiǖ0]Yu6k[ #R>N>E.o^ڴ,Y\I,.+`vI|O3%-'z1Le|UwtiCߨ:+xU.x.6d9oG]:L߭lqϿcɢi lUA^k KPIDy&|u<l6t]Jxzy͵9vlQl|0aޤVT+};6=Gyϓhѓi'aq>3Q9uJ2_WU}=яF> ;ܩOFw6λ(7}N#Prk|ji4mkw"�&o>+.d~? 3!꟬o zߚdy/XvY5 m|ЛR�#v 8 tO''V>iAÙnZ4ktݓ-.6ar#e;_sdO1Ȟm~GPχ<\rk۞)-1b՘94`q6 Ww,֤[}yu z:W Ӄ#wG?gU7_&~x7ZY/RNjS|1(&W\Ԯkr8kj/tNwL,YMʛEvEw5:i4ڽavexHU?pyQx% :l3dqp~L*znLKz�^%b:Û/+"S誓ߑÛJ&#iݛph-r�J?9מ+2~~J> W|Guz?;<6<0qGϹ~m#h=� /8i8_Ol ;5Vz7 kSpŶ^LSonpblz#CXy1oxG'͙5Sh#beRˡ5:j{.K7iMczC14F_%d:-\W2ɻbvS~ҏɚ[ښ8)k` z:_сwe_\:v}l&o5e_)`VԦv:_cz^~\l{7c|>s[>J_&*Gqv[s7ܑw͓ZNs]rC%+2ɓl /4lr9Q]޳V}Uy?Kv1_'}K&_7SK0Ͳ}| ]`~fN&Ta>f[no8meܜRFNVuܤ==SB[x/[տ?m<I[VYd裿l[o88z U1D#)sBMor1LIvxfr:×}ff#iwk};Ai|;gc�S*mwM4'w+6}ҮmVq{4>J6�ha%/r(7淮M;_rzBK݋ +Yl%vޔ{jCbym׿bs ؝jԮn34lZV�s}bCFφ,LjO2i<UKO g'dZ^ӣN:պN5R·~4F{V~nԬO4~ն8o}ƞw(6qj<i-I۳�GW*zjGjP5yL]~l~(Ir]ðTrA(HrӖ&kI�$a+5 RI[gUj~oG￁ϧ)'e%>slg:Sͪj9I,nGq`gϘŜ=`Վm:d?ɏƐhȔl{UgS~ݖQȖO;I.8>պ~U2ci7} Mğ8$InCZ'žT*ɖ.L.KtQ V.6\nԤo4sӎvpӣՏu#[Km,~qo3< WY�x`&ߕejF`ꅵړ]]cG5m4zmXnWdfml[drϲ2g,z+ۿoLG5g0?kQ~hf]hSyѮ˾ ?ɶ-:RQ۳sFF¿cV\�pf8$>|SIF{Oߜ_鷒2k}1ccitI{^z1 ld:"6?3_ !-V678f3m2tB$6L%UDlr}5iGOߓ .TYhv5<Je[MoiiQ3�(������@H�P�P5WO3qzalYzm:?i8p=-kNUirrcgvOXl:lV5[sm�yޓ=!{ϣߍJYsKomv{k5=f%zvG ֫ȫ!&~϶*hsMbmCUBĻS6$ 0MuS:b�Ƽl<3 _j*1^s$OhGk3ٵ�Bpub=*Lio]& >%1rYKgc9sKopF>Z wP%\-տ�<lmb~ 'fc2|5Xѭa}M&#)t3 j"y]Mn<v$m{!LZ^,,Nɤlk}Ҳjk|\\QmhCioyOKL+.Vܫ뭙w^>~թKY/u)̮/6޹o<׸m_.p0PaLot*{{~ogNN (U*�6rQt2^$FRةñƩH_H5Ȃ7N߭x]N?{zoϰl:fj�B�P�R(�� +*Suqov6�a[ur~P'Y;{ %8O3"Q٧cixtqlfe dccHJ08e')9I&m*P^}b&6<}۳盖kV0H{3|W갧J>rp߆73mɹI[o9)$MW&nkqYel9I""#h2d5$M=/QzƬ^m~m{ͣm|:$Lm"uKgdyɷHGAQ͏~4L{J8[q5,tyzU6)/sfŎkl� 5yVV&+@(Y,g@pI͓7eeUJnm#g298ȶx7ڕ7Z\[lc\T" C1z.[';o x+!MѿCu&kĥ)rr{#ndʾYۑǂ*s&%Bb'nus{GAM4k4QݖΞZ\mc߆?$VNMQ"Ghͤe4 JSdOf1Qm]Mum&+UގƮj9j}=6pURjow62z¸rnRm(nd<Sb1V'#p?N4k=E4FsʗU/پ%ZN>FF5&5gg5sq~zmZ7W&VnfcO/.lrJҵîfURۦo$kd9JOb6y9C"CmqV;8JP$%֚{4e1ۦ6{+@-JQmIuRl?*u} [&ۘF*Dr+%w}ͤYg298ȶ>VLܴVe֕9m%qҾu Z~1<l?|6Q(;&9alnzӎ;C7^R99Il#n ι)Rc٢Lo}mskMHG@ߢp߷Mn&=`IJS'ݲmrW\y+G3ik< 3\׌M|#6'=%ƚbp[o\<g!z׎� 6S ݹ%a&3(oq9B;E-1tC/>Ώmy{ xc}5errbbb'Yerdb"#MUuOɡ5mk(Y5}mc2JVN ɢLD3')O,F�'#mOƹ mZ̼۬*&巼kፕd>9JpcOf1Qvvm̾}cbw=GYɶܼm\1rrbbb'N.k')Ov"":(:#6|Y8c}Qu5;%߂[/+@R'.ƞ-C>p监(}lF:G=uvY[r/bLD s)IDGA@[Ylv$V#yٵC2C64'fwQRRkRi.2')IO,F@i5VNxM3̈_}𝍯JפNP$%ٙLo}NlIYlg4ؑG4r/Tcu+)=xc8;Q͍}s/P*DZw]qBkߒ~Y5OQ'.f6^s[9/ IDDt 첶s{ JR')>mPgɶܼbpQq=,ըrђi8-iut!ٙl9-ʺp啍)X]mk+2h=GGVLu2h=G%yWǖ^k$R 5YTkc5u_%+GH7Q]UejW4ʟ]mMUf) -Pʞne3wԼr:iHb3H]l# gьOQ}l[NxJMmW﯁Ǫ e]u:\u}p]bim\g&QNNE/y&OXG͖Yl윧/=b":+ ^f]Q*Ghͤa49Jrr[{eEXYdвQOI%)MNNOŽ˶'8=9E&"z)IRrop>նr+'ٷ3؛B> >9NQI6ܤoiw9/ή<[d,^ h2_4dOb+,sHNEBk;%d9xDGAPYlW{@(vX쓏D@xed<ȶ1ShkYnRmQiY9NrM7䜣Ln =oY.^ͷ@�g8o)Gmm>(G>me+l@}Kj 4IOQ'9.k')?=DGAQH�}Bs //bLDv_uk.kRlEb:Q댚2 =~,�G,s_bLDW՗]o&eIM₹%}ӏ,Qrm |G[xn6"^m?'�rBRh('lNsR^ he dd[D:e))%ؑm4iQ9d''"6 �(���� �@H�P�P1Y\3K#�gu{;?%Oԍ iJͽ ⽬w$oK}rTa;i""9 %nM=1 z""7l&K1EmpNP811\SivlY9RX;m+ʷ߼h꒮+uVLdž&wc9G˴#dZ8<OdcG{G #sus5*-Գ-\r͘1buMG5$߬ݴb1TC� ߰D+1a6_*g̖}cvg(]FeWhk}wk#/]vi �~}/|a3U�� @(�(�)�"b~ 75-7^ド]ٽ[$<rqZaF�P������@@H�P��H�P(�(  ��2;V ʺmA-kiQrcGLo kN5]\jV5i4H@P � � @P�7MCprai0!__3Q<yngnm0(�,j(MvJ/f1H(� @�(���)� � H�P�P�R��E� @@@P�P��(�(�)� � � A@ѲԨʶ2!=ikI&KZEV "V`8bR!7�@��>9IFM)-O ���A_M]]sk/|g$L19V+)rOf7V6q��(�(�("@@H����H(�(�( �����A@������*�T��B�)� � �@� @@H(�(�(�( �����AT??>گt=F[yC O&OUүTUU( ~Wۿq<0-ǝKzDM%;UVVݹMy"ܣ'nƺfb1#7\XRl⍷⍷sMɫ;R{E)v6c׊&ܷ}j8+&t;.j3MǸ8ᇑkVtn[i?e9#&ӭc\yim$c 1r=B<҃Ko(Y8W(Wl*m'$oL/Z%oվť.ޫKM\y۫d^+nf=".<\22(b7�-m+h~YN'\w%ʼzɓ,V6faưtUo7f�ر7w6V8y6.�a)&nķ'22yձP#[9>ŵ'iMr)ǙB?O.y<_VUmRQMn͊ODD2@0hpV*̯yaQ ݌[)lCa%M4f6*wk#/]vi �~}/|6 @�@H��@z^_;ygL9|wm}>.(n�@ `h:ΡWM[S욆~M7bkçs3-K~K"Mow&@ @@@� UԀ�=ݦIžPodlެxo^=22>4zVFP(kf}����vq0ss&mV;[%)❇UJA(l2|}UYvY'coԌfb#yG6Vf/_Ͽ/K[6ݻnJ޷d� @�'*^.=-kdckVd21ƱՓEؖEѽgqQ@��PE P�(�(���� �scddn[\_aZau6cU3M}hE @� � � @��02 珉}Og*r[u)Mh��Rx\냖^#q'(N.3ŭ~~p �;afUWMn%ӕm/y^;D  �ӥ7Յ|ku%5ZD2n2 Q{43=�� ��� @@H9ʾ<]dwxAc7ud���(�(�)�  �9IF).9mȥ'u֟cHOIE@��媛SL۷-c6>g NjkfA��� A@@H�P���(�(�( �� ���T �(�H�P�P� �� � � A@@@@P����(�(zι�x}]^<.bSg.o6e32]u;,*km⻷[q Lﻞ#xc3u(߭Җ=6.(//\S|׆&ݹ뱷-Y?<q2ۚMG~LF{:Kҷ?]Cyx:{GD㣡^^}VR~nm>pŴףNE2DztUTQɟ<ox�}L9a8p)<,l{iPskj2߳}=wl;ty?Dۛ7؝5N=b6.)쬻9㴒]}1' qu<mwYl&IC%)8eY3Ô*P,Tc\_巳\S1IS[ķbX}$mjN#Q-<#gf XQK9\슓RϹr8fg:=xՍvFW7gȌI-7gyc0_UTEf{TkmǢX;:zw**ǝ4eR-ϿeM<#OӨSrZ(\fGn:=uB1%\bҕ֩I5>ݽ[Fw(k6ܫM+,=^f<<dӑB^}Ɇ.R1T V* ꥄ !ZwpojG_ٌn|uZK|`<�=cl߯şat͂�@P�R(��oJO�B}{z.I>^[Mi3vIznm%)7Iz~R䳀8ZY][h:)ko\?huɼ1Qףf˓> 3-3�+c�ӫ#<,} 5�@&N4ѓj*$?VzӋz$żf{67 0R3tR^;1ׅͩ<O%ʹYVrqxKߑ^.} 0 @F6FG7o/o$կYs뛄(di&'Q@� n^Lpt=.'-O7<卺6&Eji5y6ioԶh{|{>Kt{W s}*Kumztvi](WRoMrKٳ8ߚp'XT4AF5 WˋOfi٭sЬ<�7]kJ~^]rqn7U+VͶj+Ôʷ%{nwbN@$�jW'3�HOlLzGF,ެ ~_UmI|+o�Xg@H�P��n>LH._'hGOk~-+ѫP�P���c)(n/HڸFZmؗ-qh1=RNrQUEQ(xԉi6N4ҫR\mҒm<gڑ-dP�@@H9qwUDZj Żؖop><2qSVm{um8pj3 bZq@<|G6c3nFWcfъCn0k6 cJ㗏df{riVn1-Pd� � � @vGQΡg'܌2_a~IƧ''OQmٽx}D䙉gx{ϭIh7�_o?W2|P�oO�kKU~w"^Xt̀q/ھ(c^xz( KᕬSlyOd5g$]\f=qVߥ˲_a3nY9 .*%4vsӥxkQ@�@H����(�(�)5OG񱖑?/k=d��(�(�( @t{7Og6}\H(mۢo$-'& >W*_~37kQucstw<mZ:+?^J�P�P�l|#fW?/Z'͸P�g?8ɵ9fhMkjwΟ(ǫ'xRu wl7 P�P�R��qu\|R&>J3鸰Tc.sFKMSvP � �@@H��@BU�@( �"����@P�P�P�P��(�)� � �6~&}^WWO m-B#}/)䏵h; 7_}zP}t~-e}ٍ6`oTG=U (zbcOER)mzb6vGPFuOk.g#0/H6Ɂ۶Xɺ,sE'A7^"v$ eÿ$ [|oֿ<'f=@W7gbG35P��(�)veO%^WFWf�N9asl"u}8}N<ٺ`Aا6ݔdl[i}rR'i(&O@(ߒX&[=Ky?6yJqfCrk/Qgw+ъ{̰o*_o[F|7 <S)}ƛ8.ȨN(}F6N42qO+ ߼m'&N8%ګ^ZvWeSu Bq팖}zgWMճgڝk� ,\IIJ/&}{uvctaP 6I ۅMjq/)Vid#d7$U͖nm�G~ Xى]BQ/\M?ݼ&v[ɭ�r^>V6Y7\}mzjC6GP׵/4ʲx^)uvuj -XCoW5K-qrq"_E供*n;fY^}U%ѫ&W 1 t')Я٨U NO1[Ir>ǿ\YT'tVGO^xO~l,8T&7tbp.9^ʿҽ�p_Z2[f-ЭNPi?%�'#7Ƕݻy 巸׭z'\gFKIlєLOA�ؖd*g|kn/YQdɗKDU6MoCe%z5]n&Hg�5 (־6kGŕι8Y BKIl|4$x˕]4qnu}5[c]p� ֽNۧtdשu5i%MWFK{Rg<m>^$YKiٷ/'zgjj6Gz߾o466c]n&J]uR_�4v}W%e)(-ؒ&\֟ccd>'%"o\`v0m/z28I}MYT?ěDF"Y]M lLO8Y[kgZ`oXG sC&ual]Pm{fdq2ɋ{x"iz]3&*dgٿ5S:imW5XΪ-WkHmX#kt2[>#o~"mz�|:0gJ\%(#Y|.fc'z:)6IrۍLTǶ84-Y#T-4tivKmmIWd'8J3-lLO1e4q^M@>&a W7d*WE{{xۣ1-wNFuQ^qi;y{}(|.)ݸ{}d|AyOJ!BJ5R݉ڭ\:(LOAen7o'�f~ a%k>Sȳ+wَb1d,:UeR嶹^[388U_yz]<=FNZlnXc6#Q$8q�fxI?nϿ4j}Td2~6o.f!mS;UV.Z3']˖JوYm+aT^U6tO'o㈢}(ɭ[^mUTo,[$GQ(-IA\dS^ 6Ia4`}rm^; AG6tO'o࣒/7U6M/fd|2g.eqpoS|leF*=ߖ-QY8qn2M5ڙrUUskŲLuJ\-Kn5ښrQ\[3UeR嶹IlH䣒]sܓ1D'8/N�1^nmXIO. ڵAixbd]}已CLd쓔[r{wDrO/mJ]dbѴO#Tsoeߺ1bq�X.5iSt":_cqiQ>lt\GN(uej߄V䙈|BQ~[ Gڞ_:d~f� CQ0+34~3zRn}~~P�rBfs]-f#i[2ٮ�]615m_%qkluk_QrW֣U: P�P�R���P�PB�P� @P��A@@�����(���� � @ MWWI31tlxyѢxІZlQݫr֙K]V9*mVl/4_.Il݌=+'F˚NcQWbaOgW6D?^FJDz0'=k9bIwѴ!}FTG�55Է~\g3 MͣoCLn1n־g4(Ƈ)5W<{GI˻2Vw̺ZUmfCw޽fgkLl-~V֩qފ۬enR{+[q- dQRYd \7)u-/䈙7|cxdUJ2ΕoI]w}#'/m/JT],Er)od۲-uwc-.[CxF]<d߫=}Mo>J^/"JWKhob]*}knIױ5mь5<*0I[̧KG&̱d|`]:JW3b|6$L+>I۫¹]Tܹ\spkђkitً JvJJK)MKuuGމl&wM,z"aJa87.yԉ\)<z:m^]֖ru{/v}SLNNUΦm8U$UߴƹWhln΅-MOefSh;tKx>QS\6j2ukqy#+MĭbcVms[X-ɳS]E3d-9^?a,ÝXڡ[ݥ8{HlEUd[=,\fq]lW^36|x9YսҫMmϾy~<9oَ:= a=@_u8=^6F*s}/_vi �s~}/|a6*�B�P�R(�� i9t?0Kּ�3]? +ㇾ7. ta,X`v*ou|n/H]z:g\ RQEUo:{n[nt֓~-xX*>655qWrJ]^ffqk.N-SϪ6Q.Jdk$WϴuVJr--X򉁧gy0\Xjrbm*43q%7\{Ƕ�LrdfG)xP=?&OGOrO?W//wS<vqjS1rlQۭo\L$Wwح-I9$L>zׁ?KtϬY=g7@9ttSNTR۵ٿxzl3J& * b-[w%z=938raiɅN*[پ]<Vf=ex eCf$v[u�ZlfxDpqӝG썘1g)mpN)KC_y%t_SܯtmI<d䦹l)<NJ1of"7~:2̊[J3-9?Ն7g|uy8kÜ8Rp.UeiD*޶_vve7\ҫ wB&II/١Zmd'oVT4 ˫gʶv9⌞] 2z�iV~Nv.L)9AGE>4%b0E]jxw汎<auYϚOVļoNnV&Lmr)IGd^Qۧޗab~?m_shh]ԥҕ=ǧw4YL޵*xfQYԺꩨF}gIQKحs4u _CZU68t?]%_1e�M}c[%nv<:vݐ7r=hSC/'NZ7j-N߇܏#.'ɇ9b8GViΨ].X9ϝswu_}\RiswFEz~I�?zO~egjߦ52YY%>'>I鐣UiVKq[o.g.&ItSՄ0O`C'x ŷ؟Rx;ՂiSWE䶸F]ܟ_tu3nYu*ծ76<tU nԗku38kKN͗Um;IxXNK$p˩7vH6Fƺ}Cv|i-\Ko9˵L F \]ǒ2R/lz.SR^Z\-F+ǻǓ598)ь>Q0吡nt(o5&|39m^*z[9:d_6=5OoUFũ*/)8W'Sؽ^/.Lz zCżQVS4g;!R1=t{̟6m{2P6 ks)oGʊ{s/gǬN*^-V7DvLeڄ S8qh8;nm97Y~3Vַpʇї]-N4ִtJ^їҋg,eZytٟzdO&<?9)vl.X2\ϝ>_y.Ԥ}jyE13q1k%IN1[.e_ۿt2ͫ5%Umsҹ)_mmK7:uiǣS>p2C4>57TE%i.׿KI?&QѺz+=!CesY|ylݿ0~S0GW Y8KŞѼz.>:7+Qq[ɿ^<[Z1чW[K,-O.898N"%8ɾԻ~<+cg}f-ZVuwbC!6RK{:ף9+ĶISv3֟i86 KzS%ZJ-=fQx+ ٕ96[T-\ѬW Dѳqel6WR}G& =W "3.Ǎsŧ֟uֻ {iIы,V:YFOe}_i;Vs<͘o(zu88AVm{F$&|.NkZ\%)vרk3>z,ΧƘxyrŖBj|u۷SǢ3lh:n , v\o[lnNzޓB^kğ�_/iU~ y ~?y[cZyVdeC.�׫8z)ͫfђ#Rg&-%Gb;LլPŧQOmڷ5|QiO&Ɵ~(*cF߼|Ս®' Jϣ|[z.g3R: -׎mtx'<\M5{QGBӥjubd"MYwt$ԵM7ŧy5iWWg6c '[uܺ˩{cf;/tݠ�eKrXߺM8rRquX;]trm۳ҶHq2ݽq^ezV oFVǢ]K�/Ԝ8Ɍstx3FͿ*B2mRdR헷Ww.|5į!N%Ԟ'7.űtVe6gi`[(U|}]Ϩp%XGտg~o#CXó?3D Lu>V5_.yVg6ӊY= 4Ӣ[rRK[/�Ǘ}Et1xMmvFr2ٛm(⬛9zᑎOW�3ukQ4&|lN"ss[zO_,Dy&ۻX9wbYEQU϶> 3 -IѠSӳěߑ2O+e ?E_Gߛ8WJ)_Io_sz̶mS4ʌ^֒P=KǦHM('5_%)W.OtyVN 8D'?fWNukr7ɬx-Xqmy>rbl&KL[앳ٶ/^Pְ4>\lnynQ/Lۮq'=֟/~IC\ӥgʍKwaWu*]ٷ~睗~vIŘ (SimvKo2lmOAA\)=˱gX˥o`O0rkZy;ՁzoKZJĚoIѥЕZ-S[NRG~I{6^9G&7~wU/6 /0\Kd6?]*vlgnXƾ(68{_[o2lp^Zf\9}}v2qF&5>;|J\5WKkF)Z.uSSjQʏWۃiXe7tӪn<<剏U2Q^yix6rq.6>fBx3_sc[ oB�(ƩUg͓GUѣ Zh[Ԣl+e)X:L&MwmϿ1m)&6b8lݤ)Wt25g' $CUstUrُ}y,CPυ/#v[Wr[Vhц-8K~HUg1[/ޙM12uk)Yö-LZ;ĝnf<rǛUm}g}m0�ORKގmW%NOUi*◰ oU7oᑽj8tG*%|m<0u+'*9%)#<goXbj6WRڹ%8 6SyXg4,|LdΤ#6$xw+ƚ�i۩U1ƌRms42w NY-E}sۿ3d]VY_LQG;lbT~mLΦcjMQ<F])ugLV|^�2zA.48r2*{oa9vV ]oXRÖ응/Q,?XkJm+u\xX*ڔ'Ҿmܑ-f%jZX\7&)9I9C'Fs@aNDy1}ŜMyBKcW2|0 d϶)(ʃhbWuNŴ=xq?j3OHah�vo+:f<2C; 1z�i1njuy:(gu6o+u}D?jZP�P � � @�� � "E�@@P���(�(���� �@H�P�P5?s31z]~a=Ohc.4[=kqU̴}Bpˢ*G}o3,x=?2:'dqP'oIKNmNc}6b΄M-]|wI$4Btdܱ gHZIԟoY{qhL]GX㒝*Pqv}Ž+OF30bh:FcXPsixQIӣ&%F<R~ vnliYSxv=J,d[o1om~'S"eFCLveSՎZm'fU9: '}mgDDmI0cyAE'ԋ1dk-]}nrۓE6CeIJOEر.19Wz)-ELo7fhwV^kےn]cevl  SW /ߒ;u-L+Hý$ ^k~N?kzoϰl:fj�B�P�R(� � i9t?0Kּ�3]? +ㇾyRq] �ꏞyKOS8/#[?vNpvOчi"] i_e6$z{3e{6Ŏf<gSî\;8g-7M'[{'܏v:sfג_<yc%:~S?Kr~Œ;Gkѽy?<w?uy~X� =mo+tlW-w*z8+oUG|1Ģ=fLR2 $WvtZfؿ&3_c-5j-;[Bmx_ѥdH"]O$?#V>O,ҸU&GF ެ κLx,zKӨVJOF�n[Y5?kKo<˘yOeٲ"8fE,SMWk7ͬy';# P��ۉѡ?/?[uyNO7~|0}|QhWU F J7vOdB:_ԡzj8{&SL{GF>5q IAo&[ZfbJb)/i0V28غ$DLod2zt۶nY~.ٓZ<ү?Ǯobl[o-13,3jߜCtwɅzI�?zO~egߦ52YY%>'>ѷVִvnE'K8{2cG&5ypB95vLF^P \θk<M<o8O ?^ɧhvLf-WeWYUqq}{U%bEvr[/ј?6qhIrV}}I|H|l:'pN{wu41f'ؕf/Ul}|}okWɟKDUV􇛉~nFҵԥ_+OvV2y0y蚄{ʛ_/_w<f՜N9TPe:ދ1b{ȟsWmZUwRs14Mvˈ$);rvuR<.!?nu+ѵx M~J�@OiUvK9g#'@_&8m|#Z~ŻH{Fzcfj6Ê2u eג}Ŏ' R}utEǚ5_Wn)>Lz4(j<e�gN9Ze�P>겗4rj>y(CWЎEn^dzyr!ի+ɻw)>] 31;0kJ1s{$wlbXyӇv}SnF E!k]ɜ\姲͵;_in( !CCm|4{Ū�V�=L g-O_Z)cWs? TJȷ_a囚OWr8}N{k]:>E>�v٬q'viUV:7(0g&1PzNLRg*̵> fWmZUw'FsocD&=G*ԟD嗆Ko8 lq.g&'Ү|ϱ?a 'X^ <~ *tk+GR+)>Ƿz}͂cVS #EiB7 2[NqZtXyN.ne[\Mnzw2H[WAk&'CDzk:.Ͷe,ttxfY`X]qQ1rz6/(/OYӗA�*vk#j_iUXY /bUY:6}ܒ<31\KRm2ޘz~_Yite1#+)C>g(58-Q槬 #[)&;I7/[1G,o#U?ɴyB Gg~g~}d| k<7(lj:Iu=Le|B8ñrJ+�im0CTƅdU]I%$Gm"&e[|W2<u|�Q3=wXYj,X͍t}}f'l4,z#S~ֶ_Ѭ%ҋڏljl]'!q'ھ(#A߳g6kz.wa]nuŽ_š[Zhc|->8ַam.Ӵ٤ ܌A6)Jk,C3_ 5>Rz2<w76jdg\m0Ik,wk18e7 똽~nOl1F9ܖW:ĊjoٿW4}$Veg͠%�Ae.QjnuКiMu4IqhX̛O[Gcx2(q[�tDOs_&slIw)}>1u2ލˏz̒)Kl66Am*#=<2o8eB,四iv%/?+m܃xߚ#xIdrg|td-_G>=͏N>q^�WX$4[#nc}'-k=Ir]3꿛5<2CilKg|}g_u&n*IXm(růJtbxB*G*6>nJ)tIɤۭ3V<z8QӮݨmŶc֭r#\x˵4G^*!a3UdtLlտF~5f&}:y53<;I.siEgR%)MԒ\hȸ64х&06N/Lu?˦Kbch~Geş9W+ɦ4z#[!Leʼ6G,{Ŋ�i1c6*uq+r x"_)M7۫S kg ٿ7I-4QM]od6.+sjzBK9+(͎NM.]>]+;,Qj]KѼ2ù ~nZK]Ώ:WN7?Ϧ) dUo= B?n'4j-4}MgOoC/tGW,]%Ԕ平}Xf7W0xm7 ݛ$<NמԻ͘$2Zg�|Y'<ڡ֭#3Z_oE˿^G5in}*@@P(�(�)���(�(@�(U��A@P@ @ �P��P�P�R� � � ��� @@~|Ծu&ϫ\OTq1nxN3uK%Nҋ]qڦ)qT ڊm}^Xiɝ[ʈ-C*t%Koa&L8!ʲ*y֭|U[qQwZivwFbw8\Y:ߝG!_Xmr2Nڶ)6}ӣp]I'x]lN&̱}ck8ك *]y_+ongljoX<eevqi-R]�qgXMjU7|:gkN[w>rgߨa{b43 E7q[lǦbIR"$1"2.В P1 %ˏtZhn]Z}x>c @#||o_>PQ7�?9�;f|, ^7Cl� �"@*�� Ӎz,%6rd1 /KZFlr7KkGg`L6ܾ+X{L޳w8/aMss$<:||36 :qPŜ[b=ޏ;X2,JsM.{;Ly&mraXk\ ]snxǭ]K�c[z)nk׼31:Y$(tn^E)W8"'oyíqni_8zU[r}][?.kDW6mgpigd׏SŔTɾx=yXߟ-\&#]K= -L1F:֓ +PǪ�}mpk0d~*xcE܊18Oɶ5S )엢KWYEc)N԰5>X9udFI-G7gb:ێ6Jk9]*jԜ&}zaG> GBebuxٺuOywÜ1]Ě>-s\Ю{�nM{ܜȉv7Ɇve8#so{GpFV5F,Y9Fq{-N=fXSiZiZ"䍜"ݻ~�&6Sl3|{>h)ty^8vZqtu =N8P4.k]]óG�ekyvfU QY-|˨v;ޑb'33qnϣ\SѿGYţi�ƯhwSE<IFɤ_Òbkch|}9z ޝƚŏ>o޿BM50~+W6? k:rNuIrVsQjpFjpVS" Ց}0oNΊ}}y5Z}<Y9n~?d8uU>Rji˯nMxd|tqi>MYQdlMXô0HG6|[cRp_c4zϱt$8LMiM%ewK-(˻&6 ci�\57DʏȌ-dee�}\^Pu/;A8y_oOri}fZ9){F܊6;ɮ+72w7_/I-m W׆7jCmw뺍3yeiv*:1e8f>uB9=FEfحpWGSm]OxL0]|> ,Y9JY b߷2Ycb%-7k5Ռ*[R휾_M,6ppA̓ef%++OxIz̵Zh^]`ݼdz2̜x%MISum1v<9xFU_lj4˙7)|NF/1Ȼ+"ܜd'ֱXᎌށ<YIvG[b慑R~i/[wL{i D2揻~asj;Oo,qeZL96�[v$&i<w\n۳2+(MWmRXߙgjV-/*uAKM| ڲ^M 5fSt3Ҫkx86 7L<W<'&igxݓ5{ُb嶴w5G>fi1zȏ UF.ͬp}؎_p\5:eϙ�>c}Eeweۗ>km4)Vރe)΢y +Q߫g Q1˛mFj% \'ؒݞXhd RŽ]W۩:W6cVzLJ=WJ8j:zvJ5#bɓ7(cͥ')9Iݳ֎LqxZ.u2b7�7WǛm&Ⱦ5IOžz5V6Mu|=3#7.Z*mip׉naJjY^o8ʥt9E8h147tSMFnߑn?3.&;c0bprϯ+=pn}~S ZD*.8̺}^÷Ky,6l\鸜?dU|Ϭ⽲XIo;=VMݕ|)(MZo%ƹXźsA.=8cUӱ]c_Mwmg)lbo˒Lsh\^eQnbJHrFc&Ǻn,12Q-[:,w6c𖾴{VB.i˗[|Mڭ?{XY^f'v<rq\9~߼8"&<ݍ3\~ꨢ,f[~yiymwyS5:kq_SG&1K(xTӳ4eV.e6E[g{BD5֥f25G׭zv1s̯5VlKoZg'Q17W %[UUF<ұFOÙdÞh6řkW*&Ӌ?A#k"YGFW> %&Um幅z8Qӱ˪ڄirGͣnLb~4qή=K8Y?23Raǟ 1'"+Z$Ksџ60tFG> -#ŏU:fvtr~rokHf=pֳ'T&!l'}oÜ8rxcDY\>~Ub^[W>XG9a;6X/&%<vlɼeI6_ZzRm<G6;shɵpWfy&7߿�zX3Y%}2w%'/MɨpO?^2ǪrB2w[vk.o ;kEҚU%Ͼx12l<oF"ɮIB[Ԏ]&;Vg6Hs^^V]UM9l_c{^&ӝ)LeFKɿbZ>sBʷ6rbc4cCS(]:FOC8Q*fRq{rˬK%_sYY5(m17Z!]Mϓ'hr-GBб% )WdKR~cmm22mɷ&罖KvzUV"ɹk 8˪wrF]}Mnpax˼.lcZuIY휪 :b+7 z%Rng$hBs<}9mrME9s[{nw;{rrш+WU]}o)=Z4+61 .ce[׳p{f--Znl2k\˲pGݗdҭ˸w\,Ȳ[ޜ&^9|?7(Ykڹs^͚~ZfnfUݲ}QG~:E+ ]Z WQgqN;wv>m,(�=m\k<Lof3U֫/:U%g#oֿ3>?s}ޟy띛5[0J`Kq\٤MY~Cn[2o`}BUgW4g.UYLVތvMUJrQ<c.Y9iz\-ʱ%+b]{R)X2mVg>X*y99#6w2fYzlUSƛݥ|{q&qsPԩˮ[[ɿlԍNlW]L|=>u\ܚ.v i#&oiKgS־ -J]r'l2mg>X&y98c6fف^Mk}גz,}hzPWԧ.I8bqO&<󋗡iGpR$|-$oc y89tKY^ߦֳ,2ZNf,LJq~_-2VU7Jp^%m7/[0ɖsΎ\zܗOZ*,D*S$Q\s9Z6D49a.iIp˖ydٙfEsMV6lqwtoWIϷzڱؠUa|)Һ%WpqN XOj4D# 4 7{*<2LeNmf̚VR5/Kouf1/x8FcSm4j w]U, 2[ fB˓o#>R[׻& kh:TҰ]PIx3 fg0-<z>_^7G]*ȩb=.{m0ᘞ+ f=?'wFܘ;%jd#f߭.I{(GWT]:Kz.fk~ɣyaZmLm.Ftn%gZo+#1ݦxqo&Kxs=_4R/c@6n.{ulL۔$xu l6r}مf8+"B=^pVk3$5T '*'ڗl_.>>RY)3&vԤ嵜Q-oOQIZ{ fR&ܛݷutVχt^KcmQO5J3[uO[x"Oy~R5C*YSGM++7CEg|#g$+}}m/KNMFu+bZWC\m9kҠ���@BP��(@ @ �P��P�P�R � � � ��� @@~|Ծu&Ϭ[[$ z@" 7E *@$1"2.В P1RHT0s_<y侩GaN6AY_a @G=߯=ڿ|٧6oP�~svYnLP���(�)�(�(�(���� @@@� P�P�R����R� � ��)� ���E�A@��P�E�@@P�P�P��P(�( ���@R���P���EP�(�( � � @@o74|Y=sOI� @@H����(�(�(  P�P�PE�@@�P�P�P��( � � �@@H��@BUB�( � B�R��� ��P�P�P��(�)� � �S??><u{52y*Kv* d�+ A�*$b T" ʠMَ$R_UWeš)7cf3h>(wc%=R~eM4{Q22OfGv(v �s~}/|a3U�� @(�(�)�"� @@P�P�R���� �� @�� @�(@*��@B � � B�P�(�(���@� �P�P�(�U @@H�P��� P��( � � @fpu,2e_$Mه7� @@H����(�(�)�  P�P�PE�@@�P�P�R���( � � �@@H��@BUB�( � B��� ��P�P�P��(�)� � �Ÿ@ѳbvfMΫ⺔/Q]jmShvkݱP% IPTT1X J@ʆ2 ]u5WYd-# ޵;n'|v+J.4�[>;C>_kulgwS|⽛ߏlxꛘ;~O'~/L 111z/|ݫGݧ6oP�~svYmLT��(�� E����� � ���A@@H�P�P�P�(�����"(P � @��BE�ABP� � �A@@@� @��(�(�� � H�P�P�R��E� @@H �� ������(�)� � � @����A@@H�PU(�(�("@@H����H(�(�)� �����A@������*�T�� �)� � �@�@@H�P(�(�( �����Av66vhV8Kx3]/lsR]<9;\_џKS<mnRe6ӿmϠbA�yX>� �1* 1hCagpbUVɶ%ozD'WprfeB]k}xᙦ/bIҴ-#HvEj;d&&I+U]3>leiM=$z�YQ(@OfGv'vڏ1@W7gbG35P���(�)(�(�(���� @@@� P�P�R����R� � ���@B � ��B�P�(�(���� �P���(�U @@H�P����A@@� ��(�(�� � @��@@@P�P�R�"������ �� ���(��R�����BP�E ��(�( � �@��� ���(��P�R��%?Wj'ɢ{1[5�]mgfUל<{BrHv?W-c߇7)jo$�V `AQCa-z-R[jKse0u?%ijκ�aKoDmzwR%zc /FveGn^J}C]7m#m%<}rUjǭulW&dlsd҄ҋhh޼py6^̯I׍vs~OuSbzǃ 2^i+}#1 'K ư"Ԣ{bcdC&4|cKP#Ѽo_>N?czoϰt:fH��(�)(�(�(���� @@@� P�P�R����R� � ��)� ���E�A@��P�E�@@P�P�P��P(�( � �� @R����@H�P�P�P���( � � @@P����(�(�)������ BT  ���� �� ���(��R�����BP�E ��(�( � ���� ���(��P�R��%_WiG <2eFp%%G)Q;xJKB^Ux{.ыmLYѴ$ԒiG7D} H`$RbG̽(IqiK51l51yWG.o|5`M /8>o*^Tw]3km3<cvcpf<u48lԟ[g>[Xg ŕtqm(6߂[A3>Eʿ.oҺY{i;$rc[*nV&MxKrFF=%d}lTz/�Gv'vO1@W7gbG3`��P�@@H��� � �����P(�(�)� ���)� ��ABT��� �" P�P�(P"(�� ��@@@P�P(��SLV7"g*<]ODrwbNNq]<\o�3W[O>.zG9YG~V_bf?bfG~SL~E?ؙ~G~SL~Cai]O}ޏM}O3{ v>ؙ~�.ߧ7'v>ؙ~?m4˷>Gv>ؙ~G~S<~Cqi]Ooz?_?m4˷>G7z?rߧ7=}O{=}O{d?l˷>G9�.ߧ7y?l~O&oz?_μ�.ߧ7^ ~~SL~E^ ~~SL~Cx1g-}O{x1g-}O{x1g-}O{x1g-}O{^ ~=~S<~C^ ~=~S<~CzOrߧ7zX1g-}O{> zOrߧ7햓ܷ>G^> Z?rߧ7U�坝n1V}Lt~o/{zm~U[˧ˋVau ����� � ���(E��(A@@@ � � @���� A@@H�P��(�(�( �� ���T" �(�UP�P�P� �� � � @@@@P����(�(h1S4��RROfv"9n/zu=GE(ů |O_G3y/+i/u][ulgK㊮|E+A$ { �"%p7ˇ5;' };Ghi#>= ^\mq)BKtcGLm;J>���iT1Umڠ_i^.NTI>\@@Le&6)>}f Yػ1�k~Gݧ6oP�~suYmLT��(�� E����� ����A@@H�P�P�P�(����� ���(��P�P�A@P� � �A@@@�@�(�(�Q~{gIA=8==f_QʿUDض^,]z}ۗ>_쾋6�Wb8_)p!rOSZDe x^Æ)A{ S:*8tU0qO 8`iWp>Ӣ/p჊}E_^NÆ)A{ S:*8tU0qO 8`iWp>Ӣ/p჊}E_^NÆ)A{ S:*8tU0qO 8`iWp>Ӣ/p჊}E_^NÆ)A{ S:*8tU0qO 8`iWp>Ӣ/p჊}E_^NÆ)A{ S:*0qOi8ax7|%2Ef'z.'oiMٿNjj>X�7Y/?2R[~⌸mOy /KjP����(�(�)������ B�PB � � �P�P�R���(��R � � @��A@@@P(�(�)���(�(@�(U� @@ @ �P��P�P�R� � � @�� @@f�34E-V~(˖Qi�ea8 {A^TRG^U}< yuPв6N�WtWbOGS<o^G&<P$�Pa=T "a�єtZKNo+_[c<}g�y=!mqp24xN>��×F&596*.SEfkvn|B(Xw}4r,A=U1COk辨Iz&7bo'3[_>OCOmGޠ�1x#T� �"@(�(�)�" @@P�P�R���� �� @�� @�(@*��@B � ��B�P�(�(���@� �P>nߝ,z.~d}gٝ{>�N4%~q3;۫-(v ���������������������������������3[In1tueQ-,٣&9SIcS2RI sbݟ i~:Z�P�R���� � � ���(����DP(�(�)�����)�� @� ��(����� EP�*�T  @@P�P(��(�(�)� ���A@���3XQqQ͕5gZr�C7PĞu}w>lŖحIeYO*4|=>m_^r}Mriq=[=ԉ� ';pb E>Sdo_w~<JntMn0J|^EXnʠyULT'b"fy/cr\wwg(/զ<#i�X>BHb%ND�b>cmGYލ �zι_?>> H���(�)�(�(�(���� @@@� P�P�R����R� � ��)� ���E�A@��P�E�@@P�P�P��P(�( � VcnЮKlפ~3:tyeGb֟R?[%%yjR������������������������������������|*qq}bvZۮ vC�/Ew~_ O]7}Z�o7d9�(�)� � � ����A@@@PU�"�(�("@@H����H(�(�( �����A@������*PT�����(�(���� �@H�P�P?( (�� 뷯nYx:em-BEM{?Fe8ag֗v{Ws mo1Ze<MGT[pǖ7ŢΡ@Pa=W"1HDCA'_6M8tά]NV+Hg.] ^NgeG<>lOxkѲ'xfskùo]ʹ{n Ey5]D.ŚT};R-r9Q1 }}A$|~]L#/[@W7gbG3`��P��@H��� � �����P(�(�)� ���)� ��ABT��� �" P�P�(P �" @@(�(�(��(���M_hX~3�_ϟe"b1LB�������4(Z^7džgD1D-}z쌷zLZ6g~N v+wfy.���������������������������[.=Jk-˜6'%rg]&<s1Wj9Od8� @@H����(�(�)�  ����DP(�(�)�����)���A@� ��(����� EP* (P  @@P�P(��(�(�)����A@���3XQqQ���.:bB~= }N>7,OnXz,5 j(5ֽi3<y-I޲i�a)Җn*uK{>;NzW'I{8$q٧=Z-Xʑ ʀbH(`$|I. 1{}Gvm)'}8Q[FF��:zx`ጨ@ VxE b%_/O>P:T�~}/|a3U�� @(�(�)�" @@P�P�R���� �� @�� @�(@*��@P � � @P�(�(���� P�vVk2wgޘhä~<`��������c`}"m_5��Ҹﶺ)U\\)=R[Zͦ+e&b#yy&oMW;:8[U}|vJQ^}6>ŎmVM~ſjdM�)k}Kgu_g%/rktv⫣I1id88N5cε c4oa{.Տ6fmmZmT8'SUVrʷ^Ktǫq)3ڙ|GC,WgSR{rhS{b?7MMraky?̌2p==攞Il�㿽koyy35>=Χ7݃fELdO]:X�(oƖ3s݈MO3N/+=RQQ[EnK~Ldھ]"eKڱyɓ/)/581s&u76;>Mؾmۣ.izQVǼIo hpԩņDrq[4avn5njgO#~m#ʾvE^d(JYRjrI_RMiװ1$\GM۵o47?d9+_dK3MXFj7k!ۿm3ǭ\ei<UQnڵxk"ǔ4l>ڽ̟[ ?Li֋kWtLyq{ǭ~ļ[>{Oɟ$bs5qRon(.&-n-r˞޷gGaiqDF|L1*riO(Ko3vnR%۶iǶ'ף FҜǙ+b`ՁND/X9Mw{fvUuyI[OxFzoko鸔NM;]I-~Fܽh>Ik]1R9{_|a)iZ]Oz|%6qR).?h{f -WiwwiUss X\sY $}F^zM8)aj޶PgRƏD@������zީ{ mѕ<N,g5?E�ڳiڮڈl}\ռp � @�@@@P�P�R� BB � � "�P�P�R��(�(��R � � ���A@@@P(�(�)���(�(@�(U��A@@ @ �P��P�P�R� � � ��� @@f�44�����i5n%[~N.>٦@ :sȫh~٧<2]+hNVSɥ6.{m~<{KgiѸE aA|63kI3ڷ>͔O2Y[JSMh6{~chOY;P@(I;+|"|lvݏ)Ҡ�1x#��P�@@H���)� � �����P(�(�( ���)� ��DP��� �  P�P�(� @@(�(�(��(��װO5g}5&=Ӕ��������US�o�h�ЇľyWx U[%\$t]OOSkKcMmo2on.3_9u$v-\YcT'qƧŸCo<;mSA(u쉏Uť<e6oU<em<6) i=w5}m<Mo{ԗ{+Kˆf8)$Dӊwu.=8g&cHt{,\g&v}=QkoYW J՞q�~:V!fff]bW<wrrݯ^�{)Y}9#m{ZcsԒIy}i)wv�8sǪƺ;$\HǷ6LOGݗe#O{OZ,|Oeoj6}�/6#n{yϗ�Qw|\x /'kW|]bFܴm gfDz4|�|мãN8|l{jn/k1\آ${J]_j�Wųb;yeœ;JߢM̫[|Yk_I>qlIߓl|n Y&|&K^ݞ]=v<;iecN\}.g/edZ?xڨDϗ7?��ehf&cbcW\j-mڌ͖oy/w*VYZ8#Q-EW9J9]o~ǧ<c~<1X7^)leYN5y'U3Ǔp.m]r}]Ky fo�U5z=�}WsWKԫytЫ{R$|)놱~ �������|[\k&^ᕟG>[�ۓcsd(�)� � � @����A@@@P��P"(��� � ����@P�P�P � � @�� � "@ @H�P� ��(�(������@H�P�P?( (�������i5[:BOxz,^+` m[u1.G_]+S0v˗[q_bnpgz֡%NFzUO{OŚ>eΠ$ * $ |nQ1%ƛ5ׄ'f66u+�??}cѕ{-;b$T$ּL>g?CKnP�~svYmLت@��@H��@@@��(�(�)� � � �����P�P @H�P��� ����(�� ��@@@P�P;8pa<�w}&yrn��������^2,:F5[EьZ抎gֻϲkti�,y�w]~v;KpilFW4}k-i>dˢۗ^s]jg͊.(OҞl[ =\q}S5?/{?yKuz)ֻƙX׳sN3,-Jͻ ߩxݟZݢ~{�myfkΟ+j# FvCdOnnIXo٫3~?�hW:~<X23m^vgy4g3D>~Q~KXz,iz[Iӯj_sCo,k_4xWKlvu<:Ƌn]>UtjM-ooj#um01Mm�,}3?VGٓ$;v[.Ϗ$K_&FO7 PǞ>L%cs[M}WkgV#?cm�rn(ۧ6_N8yog=ƍkK5~Mij& Cenz L$Oy07&z~f8Z<kϵodS6;AVi>Ms\x7??M[+F٥niWY.hiͭ]哇kP,Ҵ벡U3Suчak0`-ajifl\Iijk!5~Gz.rG:/)75)!̪#)*reپsmɴ/MnSxo>s?ڞ*8[ƫm/VhOYߖ#t,}aoYo۲R-؝ 34r䉥wSUA5QG[ڎxW8GScZ8GQRp{Z߳o}^ ~[cxYt٧. /ƌY_I[{iz�^;IOA6jm |Zv3ĖEtcK6[>_-7mۥxk}[0������Cڧ1Fx{>1Y_S�3?>k2E;GD>P�R���� � � ���(����DP(�(�)�����)���A@� ��(����� EP* T A@@@P�P(��(�(�)� ���A@���3XQqQ��������Z^(uzKZq%5c3Hӵ�s,x2UI;vJr8eV%~$]W/v}W7MؽKnR# 1  ź+}5F/}G.<a3)ߡ$ O+84W}'dD)ҏ]$U@@ZY;w3#{c;yN�=cl߯şat͊��P�@@H��� � �����P(�(�)� ���)� ��ABT��� �" P�P�(P"(�� ��@@@P�P9+}�43jSWXwbgO8�,S}DfѴ+������������������������������������LsB=|ko3;6qW'%C+d>pa*D~O˒r^o>jnk���(�(�)������ B*��B@ � @���� A@@@P���(�(�( �� ���T  �(�H�P�P� �� � � A@@@@P����(�( }\~s�����������QOV'\RڧʻkZ,D;uѳ+%�[~}L[�Z]oGNy>:�޵ڏoX; Z}iƱF)Io 9K<t|?w)|C:qx/xR= :$Q[[0C/ViPIb$ve=G_u<Joϰt:fb�@H��@@@��(�(�)� � � �����P�P @H�P��( ����(�� ��@@@P�P*40SQrFhYlw׬;X_ihh2~peO=ÚQz;G2������������������������������������qb?>N̩^)pQ<_aNɵr_7ȟSvx��(�)� � � @����A@@H�P�P"(U@H����H(�(�( �����A@������*�T��B�)� � �@� @@H(�(�(�( �����AҏҎ`������������If-S~umo6~#XָOD%9߃d�^B_os;0k㞻 EոW>j^gi~WjTY֩!uя%E�{psdaiY|*8~ll}sNr)NGӺPI`�1zߒۿ'(w| *�zٿ_?>>  ��P � � @���P�P������@@H�P��H�P(�( � � @��P(�(�(@��P���� � �@{3Xx-}.kG8Q{Wl~}YŞ6}V,.'9w&&:��������������������������������m:go}GaojcjyG{^v'/�`""6LT������P�P�P��@(�(�("@@H����H(�(�)� �����A@������*PT�� �)� � �@�@@H�P(�(�( �����AҏҎ`���������������G%IYqb@9*44j\sZUǯ=^e5ry..m' #w"P# fP#Lן;yN�=_\߯şat@��P � � @��H�P�P������@@@P��H�P(�( � � @��P(�(��U@��P���� � �@S۰ht}zGOn0ۋ䍍=iCh?Iq6OLzڝK;gǓ^xex9x;i~'W~w_+?x;qy8<}gur3O9_A~'W~w_+?x;qy8<}gur3O9_A~'W~w_+?x;qy8<}gur3O9_A~'W~w_+?x;qy8<}gur3O9_A~'W~w_<wAGY|u=}/`Sh/u\=mP+7-m|�~ߤ|v\wݏ}CR ����� � ��(@ �(A@@@ � � @���� A@@H�P��(�(�( �� ���T" ��(�UP�P�P� �� � � @@@H�P����(�( }\~s��������������������`ӵ9gbUse?8TY&KE|-/:u�W2�طKUJ=8hkeyM-a9Iv]f'\WX< C@#|L>c�CIct�?9�;f|, ^6æf�� �"P�P�R�E���@ ���(�(�(� � � @�� @@@PU� @�(�� �P�P( � � �� ��A@@��SL<t6W.J*F^ߟWw>*Cs{ɹ>*Cs{g?_鏡g?_鏡GOWczNo~9OWczNo~9Q~UߟA~UߟB}U>g?_鏡9g?_鏡9GOWczNo~9OWc螓ߟA~UߟTg?_鏡9g?_鏡9GOWczNo~96^'1='7?}U>e>*Er/>*Cs{ɲC'1='7?ʯrl>*Cs{ɲC'1OI&ʯr/>*Cs{ɲC'1='7?ʯrl?I�L}I+ʼ?I�L}I',|g?_鏡9ycW}U>> =K1WtS)ʱTmC4P( ����� � ���(@*��@����P�P������ � P�P�R���P�PB�P� �P��A@@�����(���� � @ aiGiG0���������������������`j\;I 6]gF=NZt3X1缴˱teN=znl1<>iUMYu3حדEɬb/$zH4}3iZ:T6 V=k_;_;v<Joϰl:fR��(@ � E����� � ���A@@H�P�P�P�(����� �� @��@P(�(�(B� � �A@@@� @�(�(��)� � H�P�P�R� B�R���B�P��(�(�)�� �A@������P�P�P��P*"(��� � �� �H�P�P�P � � @�� � "E�@@P�P�)� � �@� @@H(�(�(�( �����AҏҎ`�����i-`[]ЍY !%e~�����������������㺚Bq}MIne[MzJLDkڇpvzl*ҥ?rl4䲇-?V]%]g~>ٴxX򖷝q[tF\}VlckaT?E;{D$mYJdIߓMY6y�zٿ_?>> 陊�� �"�P�R� ��@ ���(�(�(� � � @�� @@@PU� @�(�� �*�P�P( � � �� ��A@@�H�P�@�������A@@H�P�P( ����� � ���(@*��@����P�P������ @ P�P�R���P�PB�P� �@��A@@��������� � @ aiGiG0�<~+mDHە_-R6Խ//5+rۚc)w.o,?Bve<'yTyz(ņm7L1,3䨔;9~V{xw|g<<m4CMgHN\|ݻ1Et1֓iͶq͗,a]23M[G,<^2e[*!N_BRVɦQo׿՜iX!F*>NL6J =Q}pWޥ>VSgdWҹ:{~3XO,,Bh#v5M.Ҋ߭│ ����������������E��1z6æf���E�"P�P�R�E��� @ ���(�(�(� � � ��� �@@P�P�R ���(�(@@@�@(@ �� ����P�P� � ���(�(�)� �"���P"��A@@H�P�P�R ����� � ���(@ �(A@@@ � � @���� A@@H�P��(�(�( �� ���T  ��(�UH�P�P� �� � � @@@H�P����(�( }\~s� Z&%8Ӄ\L'' g-w/x\ 2%<[a<:ovBwaN1v6{|[{\ ak>^_ԩs(ᅬ^|]|;vbxvymFXO>W.׷X3w/{1-jˣ*,jV=湢m揦[nE<<gFӓ䩴z_Z]o9cjxaթYEɾy2Z[mxv":M3Vғ˳[l$VnqTf*p8VQ ,[I&l������������������͞ @(�?9�:|, ^6æf���E�"P�P�R�E���@ ���(�(�(� � � @�� @@@(� @�(�� ��P�P( � � �� ��A@@��P�@�(�)� � � E���P�P���� �@H�P�P�R��(�(�( � � @���@����P�P������ � P�P�R���P�PB�P� @P��A@@�����(���� � @ aiGiG0����������������������������9@W7gbG3b�� �"P�P�R�E���@ ���(�(�(� � � @�� @@@PU� @�(�� �P�P( � � �� ��A@@�H�P�@��(�)� � � ��(��P��� �@H�P�P�R��(�(�( � � @P���@����P�P������ � P�P�R���P�PB�P� �@���A@@��������� � @ Smt_EG~t(o�pH~Qhj�8$?(4?/fTw�p.ڿ~_G fC߳W�(|٫�py߳W�)8d<٫�py�W�(|�٫�py��(�gWQ!_Co_G =ڿ<��m"��(Co_Fy�j�6�gWQ_C/_Fw=ڿ<#z�HyG�j�6;_FGj�6:_FY�(|'9+'Žі�@�1x#T� @(�(�)�" @@P�P�R���� �� @���A@�(@*��@P � � @P�(�(���� �P���(�U @@H�P����A@@� ���(�(�� � @�@@@P�P�R� B�� � �P�P�R��(�(��R � � @��A@@@P(�(�)���(�(@�(U��A@P@ @ �P��P�P�R � � � ��� @@�(P������U�(�( � ������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/book-banner-post-release.png������������������������������������0000664�0000000�0000000�00003122201�14332737457�0024677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� ���������IDATxYm[re}MխB#v" B)$+BOؿ_zq H[@Z2Eq@ uWaΑe1\ksqbךMfod~Y__o|#u3`"9^YHWŸ> G/So_HSED_s^AMnsʝIˋU -1}Sl, nPg TM\ xHF z=yNz *k[g۬lbj䀐PYo5jǙ<>{ʮ1BJ`>i]=? qU(v(8@mS,m0 ;@E�)WpEpԫrekq֭<RDBVAnh P'@'m*I-©e $#X')th'7Wr K#O ͸k ShS:kDc>m|OyZé<Nǖswi}*Nwogy<WVֱH\_bVe 12 t 8^!$K}HT;wb|V_�6%>8G*cĩCS:2'vU|P#UOip5*M3`hkϫ  !ekaozX%ptPeTk2&`ٲ,6t$upcs?~܏q?~܏q?~܏q?_c#q4c,z+3#W7OW>^yp$DtL!iLBBәdJpj fӎ |MA}>K>x0" ioO7P͘UD̂>LϲӐyϰ㘭#ЌVVxDȁ a:^' D',}⦓:S23M!dUeiZdI^+`CZͣ{1F [`qfe*`6D1^v\C z6@2 5�!E&Qish5^[+Êg4F m%z?P"D_ua#N L ~ a B�ZтnXU Xx fN1:Á> ߍi9T�s2F v vkRXĀ!-.{!!4AuditHFL;)b,Fjc͉r4C[!'lK0eLKvk!]6 q2�Y!Թ;\@n5WH/TV.!-Ix>!6!4:٫lذ6#XBx3e[s& F lNy saJ2`q #<402|G: t�yF!)=*PI]:J,#BP OAw).Ϥ1}|W$x!e  0'16? £L~F1�GGL=/UXFW3A* >OqbʅUi+G炣cǒ>h{ח!ӥRsT$#Ĺ>\05S+B m~v$s"RA!G*!Yp!>kiz 8 qtHsmvIp F#y8:~ѧBe GxS~Vz \[0te. E 0ذ�^EEa}"'u)iu|7{QQ>JMX Gbp4O}K(&9ڧ? v`ښZq1:\� !郝f=\&Q4c# vZ" =#ȓLXu}[PUݥuK<=\j](Cǎ[ԇ9DSD"2gЮ{<_2"٩1A2"Iv$ vTL8]<XQ0׿_o|(p:h_;%g]R@ pv9j FB?ҏ+إ|`r6^șJ[@ԍ@/Ogm"P{s!3 ۛH ۴ˎZN 9by,8aplaT!S!d7",Z$8!y+:yӚ#zEop,חKI2l)-N#"HNkRL:)h]e-MB@w~ v !*5: Z*X\JFzC+I,.Pr0W!4Xw #/{v͢+[CH!p2,Hyf\[RE4A1'"zmk[d>W:z&4F̙Z,q2XRF>8^Gg pid<;\1Ϗ*ZYXѠTyݒ .GDT+$/&ݒ L0SRpICD*"qz-]w_H*/Dhڒi(/s0onE\Tnqy^3.[9?rxk|\Xp4rYЅ [М0 K[Q"Bݤek]B>L?+B&<?CE˖/~jT4r/2`7*ܼʦ@R & B^ PD0iou NW솣 Hꭐ _¤lӡ.c7qxՉ}nnN#y F8F%K|t66#Y>ĩvim*y#BlM:ڽDH#j>6�SZozӝ@ S!a!gȣY9EjsNCLi*d _QšJ!g�0M9Er| _7<B,l~"!㾡ý,Ӝ-|e]ccoקԺwFsa&7:ɦ#R/L{lۼ!z%%܈?%`NB|DLA_3X=BH)AL!!RxPGFR Tr) ]_Nl>BF !Nk`vW*U&CHC 5dU;]CGB{]3!¨!'r,Np<4R#B;aoPl<$[,*+/BWf L=G*CE$; "zi ڤ@ӨB|: dۇ<2):;:+g cEɦ@*[B뻸UQ.8H7\G[qVp]^I2QIp%/o�99Tv,Zpaj&hCLp0^fQ߮a _g/Y2Ų5|Y&~ bc�8aS%/Y" yCEq9ە tgIn2A d ]{`_ٖu@`;.8O.ѡ"f@6$);n]0 וR"\\*B ذ:1/4 W&:I8L"yT",+A%B ̅"z@Hk aJ رR0T`n 'h_"%%q0Pq.q�DPIFeҌѐ!kz.Q=BG5G CH .!',dVK^Q!nL-"dT TeRoOt#&Sɐ$y>9`;2" aa) <W|VDjo#]D ~!uOEqbl&6+fm /gprW,*;y {=/ U@mTTӃJInodDZ吪fb< >RI6K+ أW }˻N`E' LS9l va0TiSa.̙'XUh/{37l.v+@r:3ظ;-1y"Ŋ!ņ;71@Cp@7޳*3gxF3#ש=Bp[@r-BK<:stCs<Dľ7S2GT'+L%BW">5*^H< <ZCa7jw}C~d\U.\_@{]gy?Aڱ)r_T­!VAK}FE$3R<OW[ʃ`+H#`-jvJe+%YuE1{sc_okON{oC3lx]-Zwgp "dsveS"T d U7ċ6#ؓx-\xk~܏q?~܏q?~܏~܏l}P?$"UmFU7wN+ o ?X2?N~!TSqő~wmoS .r3`a]E[_i5;#uDu0U)/l0=Z6mg_n7r5PCH{%�Ӭh!ĺ4q 0BT8 :3NAN7V~W8u_?swD,;5 r};v7 fn^Qh!!%<BlaKl+{~ !lAT+"B6N`@M]N$>!{*8l!{ B(b0 \@ v)las49;C@>Y'kEV%stp nRx7`6O\5dІ�;7ANrll+�u`GGw!B4 D19.8oaAP1C}P;@dtKjX XG="OQdũn)-̅A ]rZ@)n)!6<B`OZkT>Z߶;<*-9`o�v<_<OP#q-vngZGCޕ萾Bj`k!-5mtn?{ #d�DF244c|tƣh|(ʍLe!8b&+pSk{PD{c 4s}#GϿ $^Q!our#B}pߓ/#LB++; < \\ wN\wSF$;LC=8'F!m~!rev !7BhLCH ~`!w|y\ ʂ#룕X-Ub?oĐn&πbGy IvV%8^I:M MF� /l oP!!/5W)q X+3[ (Sa R`gƇrHWpCvv"XCH #Ba'm {F%*6)B$䦌b&Hl| w E0@C<߂#5f{N; \44aÚD$!S)o9S{o|w~~-a fm-3؁EbJk h ف\ -RF0Tif-v>lWL쁛M:͛dw T|-FΩ`;WLRٞ⬨P!طgq5?@ *TB83O- .{tv)>MW9P2k$S^BbY@Ȭop}؅p2PĴ:k |;#̛""HNkR}!!b]"gcn$"^qQ,G0QZn Brư 'M҉9 8`Ҟgfc:[#se_2{[;9s:CH!wIRO/HӨxc}#trԇ$M#BBi 㣵q^+*L#48ӡ:_?׻ ˭|=tΉ]_ 1ep\49 c+`hOđWPt5.le 3A5R&18faR&i}Sy MGBtRܟט})USSaZ2$8y 瞨1.!G@4+B,h t({mbw\F@^/cSG #)xF<1Nd!Z:ʝ<yi+\(aJ݆ĨZKw_:)>z�lD0gt:Pxq7%`b 5HNx明GDmՈrG\5~On }Mi13cS+ګY85٭ͼB4ynca D�fjs'͏fUػ37GـW _=7' r "!v~ـ=ž&|!I;wstkM6-p?ښ닟4׆}-3a nE[&.b~Kmmmi>D9pps{:P ^B핧~` !T5y ioq/D ^}wEyl0:=`F[d6[unfZ ! @BdA0}ewH,-".(&:: !V([Gs`*PT+`ǃu*8:dkqhrSt$]G6`3 $oB= !IvL~2 <H-생3Cyt��v@l wb4g@o$@" ؊!ob~�`XTI~ߠ3}Bߞ2 ! S*N iwi(dҨzgiLH`2nu8.�!$<d!J69Csr+1fR.;updRlc\D2:*GW\2k;ɤ _ z׷ Z B`q}8!8v _8[+י`>~"G%n0WzC&طI2޻) Bҁ<I!0l<lIH}2n5BC i1=IؕIA2@ vF^mPft那f"0ԵV+p$c#< vP+ RF<)�;]'m_#ILJYт]Z&df!إ̵*3]4!R 𒔯ǻz`:ØH|p{y Q U5*q(B.LXܴdLbW Pq 1?P!r.*AY&=:ˤ' !!da+Xn)w҄9`v|_&UO.C)']&"=B<II2A7&QV` #�]]j<Y `"{ΏݴЩ7hEq HLlWfi\rghbUD+`K*;EM! % .ބ+]넟Lp xHF z=yNz *k[g۬lbj䀐PYo5jǹגI+:lk#AoeW= a>owYa Y)N6E"+"8UaC֭<RDBVAnVWNo֫�U*I-©ݔ5 $#X')th'7Wr K#O>ʏf&H4N 5,NOTޯk=Ek%8![~>�ߥ8ݹV>ϟ!قc^mZ:6R̪!8FF\naP+ɭك#Q슭žϪ< G@EVv+T"ԑ9{M`j|JTiRlaC;&Xs}^4Ums !́-̝-^μ\ m۟Q\l?X:رC'՘et c@Wx_,O$f_q6P?lrag򘠥/qJSag=$D*͛ځ{(Qx_X#;L8xሷ"Ie ]e6JՇv Qڟi~v~N@iC_׻nGv y׽_4vCE*_!FOҘB'KpuN'u+wGlLg'$,.w!ns. V�^x}:G&9rAFaq,ѳf!*sq7,e{Sd\0t} `]u* ].%n|O_[oC8xT�S4A/tkEw3�ԮoֿnB@oo@@f7"BW/St0Ҟ;4N`P!dBrI.b{M_q}Ww; i%<3`L[9|4U%T֧z+ߤ<jWyf%k"Tj|渖߰Z矷uubUmڂSKo7; .^Nа.۱ǥ_U{`4 Uj�2Ҫ{o`!aޭL++hJwNҢHk}V=$v- ܭW#3xҫ!7{ʝ;Nw.ҟ6{XlXЂӓSxoh%v>KCj[ }U]{% @ŃA {⹹a2-]@1\}aQbnhQetȵ>6X9v*\~ &_Bp$FH|E&mp}/:ΥKhK>qDŽwGH S<�/?l#H:^|8B"8Ty;a -y.KBފQ60E1[ 7t+Rq!Z +:$㸻ZÇT^؟R3Dhg <? h�}6\\ }\\6*jW(Ć9m9u vUbFKGHxim'أLͦid*s#%s p0^YmJà!nkw~�AqTt*Q&]&8luAܬѻ@F d!(!]Ƀ*0tvo/8_s+K]s:zuymzed*Hc}!rS*GJg18fU+xLK]C͎b8W,<au,lv s$ 8E@GL0].u  P5B,8%]T z d~qDZ\ިdb<>:>Kwt~A#_۱܌u E;^W 篣݈o.4N8mԊ$ W CEK$weB>p͝ oگ|x|.uCz_׎]¥4v~oP|]l..|,B8?salmVmLM`I@8MFxS{H 0 IWFM%P{s ! T.d+ݺ}{meGL'Uf_gny,8aplaT!S!d7"E;V Yz!$tE'f<Ry78 v BxK@₥g Nh6CB$'ŵ)^CBnm :Ĥoؘ?\;_`rP?XqeE ,. v%[#v U[9+bG;b=;fѕ!$8o:AH7>; 5t޸7iepMDƒ׶|AJn$`Ҁ Bc2gj֒5E@HT5F&ɫq3,NU]6ɄGf_hPn#"*QyH@nAy&Lp)8ҤT"k odZp8'ٵ! |Uҡ&kK>P#"Hyr!Sy\a<nSP%}w}qc@ˁg]_mb&6[М0 K[QRo\܇I2gEȄgy~ْW\ϴjFEQ[Y_uSÉN k u+�j[Q=@$Gv@5r\UY&$"ꍌ-Txصm$軉PaQ[=xX:-`Uxؕm2M:$tx߁"vlpfئ 7"@ ?E{=ܷm*~6f]=BpC/ V;E+%oPR!6!U |wХvwi P#BCMIF֋4WiBډ a|Ug>fQ=ˆby`=B B$G 1H!zl ~�-4Zn�W!!$>v` �¾7I�l#h`$;oase Mհ]W 8%B Bf $ B-H#$D JBB0>N/eDEHMr:dA!C&`v'*+V$ :d*s *I>H`t^FIuκY| OQ9T8O!͝y(6#>\ў;Wf Y]yT !"OEߑdjC"Hb5Hˆ`!"Of6Hjz8 ,Bbv!$GEHk]_UljLLH(Kt}(uz"rGr~tWϵy>t$Ө$8*#|Hr9yg}R::X|]&8bq Z|fIѕ zm2XLJ <|߁U*Y[�$r&w}y&(!tV Bd!F)e@jo L# !Y&(2C8(T2!n'L' Z|P3AMBҚ,uW s6l^d@/@T]2+�>f ,!B B= o$ eA냾K=[&[#8D//SYgJthT& !КK Br{Hj!4\BHCQY&]Y :<?Gd Bcj <*HpIU&]JOxr.$#'lGZFiK|{�RG$ o|ᅺ*ֹFT Avp^z̺r~x|Bnb,D;ǺNB^OeK\)?Ѣ Ͷ *~zV"-uPկB~%`B^?†_XqٕEb$TLʣ'ۼ[6ZTQy4zb- C:ϜY{UV}80sb$ɍ<s+XAӯ*RSa˝'R8\l`q4T 7˙t3=2CN~JzoT9cA?"<?|# $"DD3I8T9CLz3A<%s}Du2)BQpd~Z"xź+bSE#u>0t}v{~>G\׉Е~V'k"gEi Bh$k鬝d ~jTD[<#ZQyLtiϪ<v4v٢fTxRⰙUW,׫<g:vD:4Æa: dp "dsveS"T d U7ċ6#ؓx-\x|Sژ۫ܘ+ ls{25QhO]"NfeAUgiԎ My_>`t '峸!Qa@V˞yM�+1j.UAƆB�r|zw>Mm?<F_LRY*BF:ɽ͕)6ݩ; !IcNUvs+!l=Ml83 &C@.{{ӍG vAz�f rh]'mn�:HB`U*)REQ )BڴGrب;7ȱqNsn $"s}x} Є_Wi|Xbx:ԂZCu>d<GBlx4 t&؝WxF(y!gx~t}+85ϿzWb^aQ"<B{8T_DUK$�QoV9s}9)m  y U/)Ъ3*6xd1nh>o\9`6Į-p5|W9ow}3 7Eo4sU!8\[ A+"VweusB k"F;*ti»e)dϪ G]8)^r _K8K*@Z$G䀸3',kEUxD9_n?#B6N2gI8|/rLP{LU^킝_I,rʦRNhɓHqcιISFYfo /\sO !x_wa|�CG3v^:}�wh4h[gx-%INI [?ã99evB?=<OcGqN %x瑨M.Gv=g& [4KO>,Gt1cs LÙ/fsu )\Yc]xOb+y#z^4λ<VdxbyiLweѵ 9XS ,ڢdq#[gGZ4sוy&? v)ܫ\>ܴNB6{Or{|>/r s<T?h6Q,JUZG?U IΒ)gF3r#)$@MŤ;-C4|z^"{ ]HE?Z{_d!5Rn B'=1qxL9v*@ LQ=RsU'o@lb\VpyC&IΐGFk%ɎJ- GLKνla')ezB gU'R<.]bax~?{Y^ӫ=?4NV޸@sVxJxi6pl2sտ~.ĕK[vOQ#L%[4q5x./#;<ʆtq *WD/M�U/I˴uPel~!HBr bߞ݇�-"SφTO@?-!٥87 ^+^ VHk.ĮY+?NE,l7afBtֶiy~gySPɉ`q-B !$�W VLKd-,ip\T!e=xE3fun zrư 'M҉9 8`Ҟ'=�udBFv/@];oOϝ !s 3#'Q=�Y.HӨxc}#trԇ$M#BBi 㣵q^+*L#48ӡ:_?׻ ˭|=tΉ]_ 1ep\49 u>d- i8j;%srp|ZAіy&j7L=B$os*/i\(T(ZNW#!׷O: aj*L] t[&Gvy 瞨1.!G@4+B,hֶ[Q)ʠ0E,`:B|1"ϙ/\`t({ϏND _'Zg> ֞p#z- -MN\v$0l{TDmg)tC`=f#E;okVD(܉`s'{6Z; /2m\ T? ~\͋f> kZB{{,6w2٭ͼB4yn;#V/�O GFhG 6w2q;-|@v2t[d=!BWA"Q!r {Hug&o͟M*Z~Is|mۇ{܁!͝#XV`[[BYMS@7wB!2�6�!6^ybhU=Sp.`pa8t6nRANϹ>Cԍ`lVK)GH%!"d) !2k EH5?0CH[[#z:]E`KxСNwG0phrS vӳ{(nӂc7; vgE GT 1In$; D(? ˎ `G>y=3GH�!$z֎x>קqKD$ԃ" ja/)7 ["*zO~H#!bs}<NZ# ^}I((Q !<B(ͤ8>Lj6� $9d! (Cqr|G #bF%ǐ iTA 82DW; A{*;Fo-tHBF&� 8q&Zy f}3eq!]^y~ù/qLP_`]Jyd0 #BlEG?4hp3A9A> L B$<? 2i2YEA eF.8j&( 3Q!>8ZdX74A@|&'M*o�X(`Tؔ=ij&IeRj2)T05ˌ#sʌ!nk<bВǻz VL N2)q{y Q E@(JG``qD '{GSAbW n_D9d=B.*AY&Bu fRx~!T!2t1E v FL\2�W"B<6<ߗISK?b}Wb+yҁd4#DzxdnL0"@Y<IG5U<_G^;_<Qp~B]<P͖TwnQ\ʟhelIeI"dAaכp%</X'dPG*7J뱍ϛtK _UY:7ufePCG ;2~q[yMZe(q.쵤tʅ+)~唡[ve:ѩFyU(v(8 ldɸhI(]DHm*O+^+[8:`s ,.@O)d䆊lu{Fm \ra$[)ʫ<MYXONzP@2_QX|BBHNyrs%йd0[hfD3Z3B.ZN9=јOS^Vp*]nӝ[m| B-8&*Of%ρcc>o1*ŬcdtqBH܊}=8U* [�lK|q Tdieg!ϚB)BN*D֑Ƨ4وA&V0c5UN\Ն:빉P!߄5{0wx=8rE(2m~FzLpeX`m#Hb/{Q8;iS=柋 H+UyK ^Ø?,kYK[< Z*9BDo7VT)g8ydYy Sfӗp02 lheիI@> ?i<0Q6 u O;60M~dSU?\PњVgnBHҺ{7*Gk??Mv~[bS Io{+$n,|_g)1Bpegr"oah}^(L΍s{qiv'B(eR}oqB%� B0m?` b?8T7TPoP G֢nREƄ/lnotۀ}Fwf*[4bBC�%]i7 \_#:4`<Fpe`j\_Sd~>wBZWR)l'n$)a PbeO8k*?#`G #3A*3A0][t}'lxcpд@뫂#́G 6|8T3AT4/tk�;u}cI\_񔙷[/z[BԀMq`Fj xBc�ۚ6MQJHr= 7j d�`t}!8G/|S<+KB$n�iTJ`ŧTquzq\Y.CG1&J.GH]<+qPV<ߩzq]>87X! ["vm}bE֓A�ok FD\2A ^;!BO4mv<b|<1>Fp 5hD >!7;Oy~7N| QSDU!IaэFd}l#l>\ܞ`O&M{؄<޷pP#L-c7\@Owwz2ݞQ,d[*?auv#.QhTZZ$n!+)B K!&3;;;pgd{cS _U*3fWw7V·ْu+QTaw'v#WHmxfIDE,<$;B_E4nǒ뫴9Ի>+3;k,3[C@LNxC(952'B|fEwV}vMR^8lɸ?uf*w}ucQ!f"wΫ&¹]_(ĝ0@�'?[x-<_##]xLWrDH{;ie/֜qEoSvN SyY#۲EgTAQ&O bǣK@()*cÙATPw~ȥR<9_`/i |nOz]_ɢO9GE)\\_|=8S;< F`U^ h am2ex~|.nu~<+ZVO*YG4&t}C>e`YTؔ$z-$ٽ2 ڃ庮}6 P5B1y_pW>:gד= r}:) ڎ-ǎO{:*1-$g}VX]&7wx<x42Pv0 O_s.dwi_7WчrBlX⠴v\ίYN=\]7X@p~Bp*354M#\, $_5k@UHZ+,<S;a{)avQ+I3ji+ e*N@b[U{TY9ECHt;]ɫ+ڮXW<!+ӓop} H\,[ b4B(D!tC U!BA sk'>F:A:`+S,lX`qI+Y L'U NB\#?`݁d v٩6l !y B:d Y!ͼط Lh|--n"׆ܽECR:v#'_(c9S+4>0kۏap)#K#S w842AwL^ ܝaqzmrڸ1Ϗ*ZYXѠTyݒ .GDT+$/&ݒ L0SRpICD*UP%IrDvmv>cUthڒi(/s0onE\Tnqy^3.[9?rxk|\Xp4rYD~oUxz-thzY;?atn-HqRB>L?+B&<?CE˖/~jT4r/2`7|NqjĠLFNn_;2@9{.)$PLk个MHD7A? ;.nb.h+'3"팴Vq@y=;:޻`ijށğgN T AFB՞\ a=_5?Ss>+4�6TDB*)BM?\~KA߅إ*�jDz贺2iz VDuvn&!D{k!yX~"v,npD(|94!O|/El4kޠ!D:w]FLyߡ@]_>l: cO7\=x9lA.+A!3RD܀[5JDd!# +GL;#Q)<B(Eeb5vNt}.Q ބ/C@!h(pms*z$bj*CvwO=C $YU0:E/#BBI2<�[e<aÓdT@ )|HiCLFl96qQQ Ȁe!G($Y\ITwʓ$\!n'&B$EHFQ DSTR^J5"4BbvN O.o O!e&txrŠip3yaT 2|&8#Ϗv΍İ(!8 dLh? I ',8v>OQ-8<{h Xf߇ 1+<: j/5dWLD<Ab\7V;<Dd:S+!P9'P.qt>HrCH �!L)|�iP2cͯk*/#92A*b&iCHB|;,uW s6l^d@ˤ�PrPS%L]&0HQ`ba(a. B�q\�Yq.%J\%`p fG,q ]_.HR%8}=SWDC2iFhH !\"�s}H4Xt<#DzPCy@0B2H (<?Gd Bcj <*HpIU&y~J<ٗJ$#'lGZFiK|{ޜ_CʓdOQ;?PjoH[OE0Jp<y^6oS\M_>hbXW[˒ WO:om~ 孟UHp{ &E&**c/8O^]Y$FBŤ<}݂'ѢbΓpÜ^60l�O4ש0|*i?; Lnsl\ ~U ^l<bbObYDIYr3<V{ T!g8- !%jN:ʹg"dbכ )#Obc&+]_ M/M$]닰>!?2*/ 䌽NTDHR< dX9/*HB YCHg|%>OpW"B)Њg+H˭|VA5;2ͬd^9 ֱ믷'B7С6\.ӉϿ\P\-,t&!ް$N<U/!4t ^ƞ{l9wB۰fI-,~۫ܘ+ ls{p̟ddX=W~7<Zvah:e]E6毯;8љڑkG61vL6Mf !<cW*E JaddžRk+WC8񍣿fZmT@~ _U6wUsMeK0w0W@t6mOQ1]in/ixlB=!ԧ\ v&�j15ر$oi`<\n[K6H `!#ysQ*)RÉN=;ӼdBPi!ɏESlS܍v[@"k! qFcH&}Ps{؍Y`q0#; 5"'7msn# eMα8G(;(BnvI�=B$o�vf@0sߧel6 &jn|E&GHKBυw>T/"pE&H7:#d`eH=L}f]D. уD< T#v 8ۺT>]m-D`*P䃣ygZq']E`wYjxLmqhru8'FQLwA1 s!BgBB&8jnEl~ʂ#Ii%8ƪܒ)&πcr I[;9 ti2fp}au7/ۯL 4 #Hu5LU q5痮@;3~X7b5κJCBGPOBL #>gZ<r%>yWπO<! O$DH!t仂snh/B<(|6r3l{l #$#BN/+, !\0c.Ȅ!^LY =Lfb'*ux/{72lDy*@22n2>E{2-p"qPellbNTeV\q@H1msqsTd*G(řZnat)]sS/U~08*yׅu2k\_.v7`}\#L4r:k |ͳ#V "B2 pBhD:HdqEN )Y+1;ƨkvS3\=iNl$́gwM`/߯<F�+b \v Y;?BL fFN"ؕzJAF<?ش̖_SUdC4ms>$nLcoZGUaYqՙ w}c[zܝۻ,,cPa@ir|Z&Z*qդ(})8vF̓K;rD-LKḝq5t뀽2IKh,8 V*lEpӨNt SݖI%]j^@d'jK(ͤfŬmƊ);`A]+q�^]&87WK,8`Xeˆ<g~ pѡD9_d+??Y2ANr'De}@=,FZ q?~܏5=~܏q?~܏q?_cm׶5Nj9npC;BDŽD6 k$^cWU$9&qCtg'X mu n~ql)?}Kd =H&3=vF$"t h>A'͏y[ù-=^l]@iqCjJ' r "!j"Tpk HuBw6y#F?mlG[3p}btVF·z ns:dۃGH7ew}PAmmmt<zDT+r}B(C`RoH핧~` !w }o]_sz`tzݝ&UۧngLյ/)GH%!"$'ش63NssH5?0CH[O9 Q P Q vyp<PCI`HXPl4R;ೀ "uÆ#ɸƞC$; tt:`B!]?�V8l 9JC=@\ !F" ؊/)z(*oa�:6k*ۮY~!SxxxB>61\QܥQh@Kb\SG`C%Pŷ8@H azvd^Q~܆xHdLLGV/6q12:*GF>dP!&vE;FAn`}B&QYM6IT,w8@>83A·]pg-e<|~\Abbו8B&8-qt?J!W"\_KMM{;oI훊 <F!B3AۭO~fMn5B X&̓cW&uR9ʺx_.r*=B$ZAY&uj${l:j8W۩_شnh&ENgxm_#ILJYт+df!إ̵*3(ZE0tma~*b@M\GJLE0G2ņ; n_D9d=B.*AY&}Hp}lGLJiy;/yP[! #&f R"!ˤ)إPs鲿 -Fcj9BG'!I&#B8 ̃Y o `) ~_G^y0?[Qy4jl8`6+O ]X? ؒNGFY(iu&\ ߇;ݯΌv8 xHF z=yNV@2CM]Y20P!ѕ k**GIsa%V.\u؀4FH :3Ttˮ {Z7:†NQeʆ N�*duۦ8Y2.`JRw�SWֆ=壳XrkK9E Yy+7jUd~* S$HT^nr{�O,ZBr:4Dȓ+9%'-LhƝ^k&X:E+r}ש_;v״'i{ʋJNqBT? }�KSqs}|?CȳDɽ"6l܊[Y"}r}5bTY5+8- xV voE=a+UyMso>8Q,m[ȳPy(vSGĮ5u) ~6CPIq <cy0Wzn"xDH<YS<awЕ+BQEPS\}˘e-GŎd0?DN]iP%jRʼnpJ`!fB޶췦8Emvff-׷eP5[@dl s{ab !n2 REg9鎪 W]xWeBl6&?BnU~=za�tng5lTy2I'Imɏ_a~ *7(@򡍛}+qe@EkZUB6tOmBT֏ >bkq >Ӟ<[@ܬ^?t~d{05X vqqTGT YH!VG԰SKTH8-¹4s h#ֽ#W.`HX&viq !4AuditO 9S_WEl4'P yܣ;H#6&ں[TV.gnjTs{!WyFFgIZ6H [ [4 Ix>!6!4:Neni2`瀍HAB+y !\_ j.0AGHky~O'K$)CG%BTR aaX.kx;Y&{s7 /d>8ܢPSـp6Q)!X+h*iTBp\FS*ϐ ҙLPCHQt}'ۺ�y$'rwx_>Is_\wo 􉚩q$\_�}n\t0DH Yp!][9œ>m&wt.#L0#< OS3~j fҝ�اQ R``-FE}X�]VrͮTDE_ !ų9 |ꃝK3?IqN1YqOUA I ϫ9`g%)2&Xy.^ۏ `ವHzAhPF!FϷ2sL<+T<_2"&N RN]I] ̓`Cf2zo|w~~>Ra& }Z 5�3נ<h& 3zboٳ Bv +|T( l&3/>E&H<Byy$g]36w ع I3EQɯ],>@Jئ]vtReȱ'ji+|h !αQ0BȊoDH$K{:䝮5GFE|]P<! v% qRҳLl :E?4B(D!tC UҤ!T(A|Pk'>F:A:`#Z+`pQe{K]Hohe:]pEVʾ!$tdEsNYtek5c#Nf=B:ơ} Bʴ2H8DD !<{ṁ`tFO> & 8 Q.8(sV`-9 i| ֶ=�1ב ?LW�wgX^>742QY++*/[2JTxd0[2APy x*\ 4i(@ŚP8.q\O%kC. 59_[!-Aeȓ -.ϋ`74bq+WX.a~]>.q,Q8h9 \obC/Y[%%3kIֺ!}$VLx~-y_0<L+fi_dn-~܏q?~܏q?~܏q?~܏ D~~tm?iq _ݴkS4t?:mݓPǺ)Qn>?ئ<O&uE9͒Ezl| 8p8띢M�ͫrḟf3kzTZu3OL_r*m}l zd^c*Rחw_ /E?M[8vKk۬*%N{f sb:[- (/mv:R,"d�CCÒ7b-m ƊFtpo4 *L-N"+8-j,-Y\h~6 F�Ω+X5/ /R2RWQl{y^f$\t6ZWw6 v+qm8=햶hΞ=,'f.Wܑܑx #&2I鶊-ORח r"Ts׷;u'_B ?U+8vĄf �*:;LYOgv+T&M xk+T.ʌyFǁbA%~[ͯ|/7^ЫWxiDEH1!K/~?U\x2 %\#~RDK89̭E\&^NE8{Y 89Q^B� tltK_舗IμKT"ADQ\¹&cW 8htޕag!ݕvS,8*[q$2œ= xUXh QX & 3˥l ^mEcw>V`rJ- 01~}X~Pl4mм$©B<"@ɽ mE3*_n3pr{Nފw]u+-BVIT؏@Z%OH< 5fNjPm*vNvsxl4:|aeW%T)*8q=6X >8xΓ̇?G 9u]N xPN4ߞҝ0i?; o9OWwÙl<bbObk)n&gUu+Qu*3֕F$"$p.O�*y}_o&dN?EW= OKXw}E,|j"4U4X\p3ZCa7jw}C~d\U.\_@{]_#dX9/*HB YCHg|В}'8B/^K^\>޾o僗}H^]^|"+XL >�z&:p)NQt챏b^y>$L5<i }O?wuFu\$4 5|#˅Ee<`4K}~`F5*Ojҕ9].SO�>kBB{4,8<t N O=xЗ/Dm|CtJm_Lo_mFM":x1xO. 7k/~E/>AW |k_^l9^B/kNa>/.k^fxQ~z>N _ 6OAbc Tl;qaJB"I-\-|Y3׉Zip]tN{,Wh :is2fW{ ~C`!Kʇ(KUaӟWj Bp7>Ybvic8\I-:yD y"  $r(8NTn`i隀�nMbW[X:]M} G񂕜fCH$t6fx!KEe tj |!**ώΩ@.^dz*U5?n0`7#}<(_hE<^ZDZ?sj/'<u?Pd.2ŝ[(p2AU7{CT0_>Q]91#$pRe0$>$êP{w\P0 Pq>Ғ Uj7p}Xܤđu}]|/SGӱ=ox~ }ꀽwkb3YU*v,O=8\&=n%*QQɞTGKקbX%ŦW?޷^|vyˋxL/L.G-Q`bgװ:e6+|}e}}ND|T -K!uzp (>CV!C6b/LD"t¦;9c}Se<<єhD_zr-16PNM}] /$W g9�۫:$̲]?I~z;5/W0UGYљ7`Hw-ETrcn`7M_%cxY0e+ o~7OP))Tp܈4:ބs@VMv03}?X٩b'*4.?^PM]-|,]iTa<vwzݛ*N= �T^P+&D*1 **p)*O�-"SA=U(řZna GrLrd) !, d7\oFVh}Y;T7Y`?7o 9,EH!9d Њw\m.gqEN )Y+"%Yf$e+bO s`]>p&+!= g�Bʾ!dd$GzX;oOϝ !s 3#'KJ= MrlZfK/)*x![~9Sf7 Q1@Z7y�0,NLj~Eor+_�sb{ח%ep *,r(MBYC+Z%�/Ψyp`s}G.VPe /5q5t뀽2IKh,8 V*lE<?y|O/_|7d\.{zxxALL&Ə<>>ҁ7 nXzkzf1aPv#"Hok/|Lh`cH{dnu4އ0EHFC46K2 `).ù;\)H#9Õ\ $ɱm̼>@i|deG_=cHet� `TꃙڿD7n}?>z glFEX魇|?XkO8V~?~܏q?~܏q?~z#ɇɛoȻo=r{{'y<Fizڈ6yG lh-Ex>`˙."2,/ ݶfC&17.:a[rxD*1K|ߐ XK`h->4|$lLt!AtE.Ц|H9>G͹:b&̻E]S? %*ÅkD>!9Li. þ +E .>8;Gs>{bRd#=h *.BL[ _хQ on].|y^=<zplSG>�n<橭O]0+ɒ8?w0Vɖ a}*wb#m�&7eR޵r pܩS|_kʌښZ|uB.)`j_{]͝RbKmݯtr4Mg'uE8wnθ۵*Ӆ"<8m*wT<bpYS{s'B0 sT;]!5d:3d!o9icx3Vy27EJei*L&tKfI>24GH[sg-\Epb=;U!X8@k${R=s'caxT U<??Fv8Xdu<i4jeTGÉ)<r0UM -?v`+ѣe$p heg%H+)R| )kLj\ca v= L#'2AJxXNhzׇO^99 濝~s O>�I !i%W&aHO`wK <]D|_ͧHA\?,H4}k]`w~%mox@"o¼c[p6ƒ9z|Mq|6sBD$-IY{?.DLlh&:\&o'M)iLJShc8§pcO./ӕάQ")&,�EGX+m1VwA\,p 3oqYʑB~;x: Z4޷c߸$ِ*#V̶=$Sq &Lu;"}|!?/ 5QGt_j ^/DD9~!nżWXoVݙ/mr!60_6jwXX? DXD.<҅X.C yŨI!C8o|w~~- 7|Tm|/Y(lDyHz|vfi\r]X9bL5TvtF9Oq"넟<~2찍ϛt:qJZM`c#B$n2jV^SV9:x.65e,jsPڒi胮yR# lw' \ۦ8Y2.`JRw{ПrWG*W6qô֭<RDBVAnȶ7ިWT.Ldw["Sy痃T<%Be�Ɉ'x~ABo)th'7Wr K#O? ͸k ShS:kDc>m|OyZé<Nǖsw٨:ϟ!قc^ľOF !-12 t 8^!G*ع[o([o?~/|7f޶/DtH^m|hۤu9 #w&QÐ raއk�f&lWrw<u +v_-roIJNK�v#]~ݭ8 gسωrQh%���IDATOT7Hp�n0PR!04xv�ptx&$P> EcP@{2Z_]gZt&`e[]!ֿԒmVR\B񸉐 l%Gǽ0 ].-}s,|c~ګM7zc{hAD1Wo>_ī?_[cm[."׻n.P'OzyG> gzO_yIAXxP>޸.0ω"'z]o@ӿQ/z<eU+۴nGHN]R bv{T\)ȧ*Oi'Щh8?W97Sao~] !4:dko!i3YZ5no%3?2:)`}%IsY#gCaYCDHqBv;CH`׷ʷmLbf>11MWL nɷrqOyszBzMco낝I2HrB7J*O\M\_Z7QኴhLZxdR7Eπ vY&)e ;e ઎?QLN憮o:2e)F`2u&~r *LrZrͮo1*Xt}<Oƹ'\_+3Ai1R% b5"Rm$yEe�t!8N P@n ,~#t@,_BU`fm!Ӌ ]?y|Hm l`&Ѥדryc@ۆD#0DCݟDmi|9\.t9)لH)H۟&{^|~hyxkC}ۅ.\69vtڀ'QBF̄2`% _X ˱eniNN?2HJ7=}\.2f_Kdه`5' ZTM'=eG/Gx_"$+ Sp}l^5aT2xP򧛒p<RΙq\k\Nڭ:?|~|paBVUw?e5؂Ugl~iBPLƴvf`0 jN8ͫ#~_GzU۶u1P͞y4Cw69_ҕ>r}񀵫$&o |eMfk3g^|Jܠq+Byy$PZZ)z9\&;W!iq�LBȀ_/v!RUPV?b6ռVT080ҞPI;1fJz,=w[L]sdNT N];`)Y&v?$6} ""HNkRL:)h]eWmMacN@r'BTX逍|jE ,. v%[#ʾȵ u+se_Hu]2عg,5ڍB'gA7b߂2- 0wƒ׶|AJn$`Ҁ Bc2gj֒Dž5|nX&HTq'g<;\aLx~TaŊKLp="'<?^$y1 LTg!8#MJ%>P&09fv$GKd׆`']*j])kr;>)}r0!,.ۃFٔq0n{x 1K۽V7=87]M;tM$d _r}c—co~L>S0e/]~a0[^[Jna}j;XXw x/gcV#7_ro6zQ\JW o_.�0o-GˎP沚r�ND!|.| /]CCυ 'ڍmnpDo lpա? nOOBD&||?~g?Hr*@8 q?~܏q?~܏q?~ !zEJ.^l.>Ka@`XcTF:%"Ӎ/=1L޷6ecԱ#"o vpDpTOc\d#XΨ[~NC}8gö+BOa_r= d$h,Kf(m믅4Sq8KWe ~?{ 2P)gF)mJPo]:N=;S$ lAT¹�!=7CB)8QqJka!d7qU?~t$[/mvl 3cN4絵ø'q{=FDҖ$>XA:ҷ NroLaN\N<G7-XmوyD0 ݟUá2бXF`R?6`\OaQ!"{fD`dπ (8n/ȳc?./\MG[XӚ MĆ @#cm;v9^'37qBYwطпiF?=B`ֽwd6E"!DYW`'Nm *̚c#/]leC#BLxCMdNv^"D @ 7  -b&ls: cO3AivS1c澩ڬNAp!/b" B}e=׷9q!%4{آC նN"�{HB)BHnޢNpAؚy!ҶPa#; nFI4R^?L2xxfr쀡j0LDAs2nV*w~;UQ y>cq@\rt g貏n-KF^I-9Z}<߸Qe`IJfjG|I}q36ic!}5CC) NE( g4 3Өa-9'B+ĺy2<X%\+878+) H 4LQkμ-}=Z�ޛZ}<@ޚEe# 2@ۜDUvJs}]_ 汐 R &=y^uקg�ꄍ"B3Ba != 4qٍX^]u"dIn2A $S D3K SТqI LGOVC&-U6dVXX[�G#(3#$v<F\/t6zx9F7i$Z7b=7捏 RQe]7((^OQ7 $" p"?}"|r(˻ WUo4 mf.sa]Rw^/AӚm^wvVknLƴm;Dd||,'*ps;g?jW=O۳�r)?j_v6f&DXE6x}7S*jo~ qS\ovk7mr}#GOL FrD8MlnQÏeRJn.M_ó虴m(pZ DEL2(i>`x!bU,M\؏y ҳ;W4i#sز &r}#k呡\=7bW4(&Pc T^]B7T|U~VaU^]T�D<Ah%Q`:6̭ۡ :LPLh=Bx FcBr�!y#!|~ ʺ)Ѝ 6@N3^c%~x4tĢP Q:$ cÆcMeSaν0#rvUpt2aUr { ]j9B볪B v9Z7 D ncDH,!6G,@Bz/t': T 'Q@8(S' *6 YĵVlgŁC="d*ۡy"e|lax Sι6Js^eyW|Gc]_w}V}jf1ͧ�!:@Ԃ׹GRQ5BZr?�>T BNBk\!SP>0%]<>[]_b+? j=d5q�w}yXG]_E_<Q@ eJ?rmoR 3A~K(B h<cCvg]_@H\_ vV2FCSxǂ~L:!Y2blC,z0%^�>BBLC'BU44I)818e . zF ʹ>"Dԗ9u.߀ߪ 6EHVEҦ=1e#=2 &L2Tv{n$w"KkwC7g=P>f>6˱1N* $bwb/DnÛ#&f֢Bis\|b(U.+̝4CC1uxބ7R~ڀMQ[]hG@BD4ڣ;ڠ6t5f"ژJd֐eȖ3F_%/ DzM@bʼ5y7X/N"WJ?ؒO.Oyn+m$Hs%?7(L.L[O:EyxxE2 vaΦ%D1e04cZPtk`kEWws{u<7=q�L*'|]@y4 3֋Hn,h<%&nP& 䅛hsQ">!jtF)GQ61 B9Kvd ?o%Ry&P0&*E Ʃ417Ao3 rC >wbn$CM, d@N7#2AbM@a8aK4�PQ&oivئ;Fse*O`aq#+kC!*+;nB;So$9H2Gf٣!DK)Е1%D_;\}>0)494&*u}X :ڠr>X`B R"K*O 5!P9`隖Bx !Bh)G�Bd%N ٫-ukQltY\CňCT!XV 7VP>0N?/X\C9s'r0遍sZF}`x";G @\pH|xt{D|,x7y>`# %6S$.>:gԉ2p@Q"l#QI؏ɱ*6 C=B?SDz&H7:#Q{\=Tp}7ɤ04 w`>dW+Ҩ.9ɜ >a5cUN-8R5;P]H>sD ϺIpú3LPP/7⣺BGHH\Egn, Ǡԕ2CH1; 2qp#\\ #P:86G )}"h +bbGy([?n_nݧ M%kٝv?>C,Ў|ls@| (K2G1 $¿o|ݮ0V le6h6CwgacH!}B~v|/_D9ɯؗ0R]yFG(voޖMUo.>Ls*]1AHBēeMZ16ۣQQ+/ZP9GEz4:% (řZnav!y;^P`p(UnϽyׅu2k\_.v7`}\#L4`<9ơ""HNkR}!!b]",ip\T!e=x]un Brư 'M҉9 8`Ҟgt=�Fʾ!dd$e(!p~y`:GH03rĮS 4*e4"X_'+i筜#8!nvӈeh|sp 8 2 tΤW3@e` \JPC2ʟV#&-@K3j\27\ߑ.'mg8kKM~cp\:`/ L?*%By?1[r}+Ϗ?~?y{o>B^>lJ.B"Ѿ:PI/G˅ۅyA6%&.nm?M({\u"sdD4|}k괭�х/BLL6~)iBLt9~i>l`"w~SK|_ڟLEf:y~]hx+=!=9^ҟy1@x ,Y>a:ާg]]tQeDgZ(^k}]e!AWkpQw x+[xf݃ʒ.ruF{E6Ms?%?3_)I4 ֞p#z]M:FA5E]v3Kr?&TFQ* .C^S#?/1j%4eиlѫj\[6UVKl?kmJ ~XCȳr7b]H~P͛N[{mBYA-H죿k{}9ap 3T>'/>F*�B p!4u߻O>+׭C-P7k^3JS>-M&t r3h1loRҪhNʘV|1A z bepz}qd^hɕ:[;<S++~_q<pZb'!#Fa@O"<LPL0 "=YV`FW$Mj.,f?MZ*Dkqv~-1ap2\_ŽD`>KF1"b+TVLtNFEI9m/,ۇP=DHxR ]tsA>>7o$ٱGb>7}|޸W~|?0] +Mpl-%Ǯѻ`[(墍a& ώmO"V6''G+:6S=bp[R'0> wXgk\, _\b3߲" !I$Xctzjb݃tN$ JE q !킲kК×>9v=SršXbu;轂*FǮݶBL '%(ߐnN Lҽ3$$|oFBjk":6b{~ @|vƧ �'^ z(vQc[%m).Fe}ᬸB+2Nps /Ύ *#3 TLL7;8k#hٙj桮/v\*22,7x*T~<^إ VpKzdW1h:6{I0zf^54F? EEt.}<@#cd)aKdTVGorHZH&;P9DMIo!%{wI=EGCxLTvbsr 4 ⻉a*vܞ+yh^!_ʉBg+ץ)hHReI4k>Q9gˡ8o<.]Q=|߻vl._'gq"7'/p(?1Ӟ#'!d]|dZCMswLUh*'ZP1q*S@Ep <X>wS#>n罝#Ο% ˤ_�בG/32˂]LI\ypzggsOFOC$ htwJre@ ir'X@z%EK3ie,PI|}.Dv*{a3r?ھY M*vC, olL #|o#XykJz?bjג7oYaA=inHL>OK}L.7&[$\oo6O65ω[&?MhtHy1[ty4(Dk35>E{"uٚl?'xCrӥ[Qk%H\B_ɒ[w.>_(\G|d1dX b\ _\ &|uSaU3XE8tLYYBh}no3UDR-ݽ?I하x 7j#C2O͍ř  N#)j;;^E[QQ[fk*~SAM Xć O6A6<k8x tDׁ!qh^qrUJ _ q@ ~ Ql<!: Q}Jl�H}8Њ=Wf97 Q{ s!2o `ㄈkcJ4"3T O.8W<x"-2."K b?8u π6q�$ӈI 7l IPMy v;ΓBUonCd _R݌Sv&]ۀMx~Vo<҉E@8^ɳ}}AH 4BHbjK`ts}6}YJ1Ϩe^l�L"6BpdLL0a+0jY~wjp攈v!! */xt#LB !y&H`'K ϴyzh 88$,룉{4xSpGyB8"DӨLW8[tȴ\>ˬ'x_G'H q#j D 3l$`T~bABv wW&l,c!LU l3M%/[xLDql׏ 1ű~0SP[n|2嵧]azPJ3%[z\ҏL<Gna{>T Hrr"#ÛC ь 5 ~) *= twsݥ\#h *K|19sƊwdPD"jx66ư0 fkpgf2Ȍ){nƳuw)hECzS᫹MHAYLFU V,wQ&?ES-�R~'z(?t!e(@ ";xU|C|c'ɁDAB*Hs!4#BtFy6b Ahj{n4m3CBbژ&t@%(&Ҷ=c\*NX%;5'fτ=!2 5�!EO**4 b~̇]*[(*^Ey kq*8t ƥ? μ2r$i�&多A#~CUpT`;r*9@ -8j̕>/$H#J|-s2B BM4VsXC@$cּՑ@7'N} a av<ќ8.[!U@E;G,86 EjY!IC.IpO�S vy[$>^@ո ӂ]t<X!6ϷWbF[sN"u^9o# ﰏ:x$D5�!3yh!E�H`|W2PBB%rP:8 F5\ Hw}E&胣GH_+H]]�]_IǐF%&|F1�- d܈s}Q=_;L]E i}�W#xh\p<Lp}>^v}*;TdR jo 􉚩!WG:o fRndh(8R48s9Ļ>")"G`t}!8G- }2 !WiҊ3)mg"RUf"rM/[Լ/; j{H|H9o'<6S>?I&÷<rh8uxF1=MS ].9-B/dau3ius_^Op9/a5[ۡa#"nm@>19m>m 1C^ 6ܼFL׿_o|S>CV?nH@iY)z#.."^!'6 U,d;K& +쪜m>~#g^|_Q8(u#Byy$k$\w ع Isg*2͆?i2T1ŶG=-S!H c -SXFb3"+,=wgQsciK`[\_,%=Ķ ~EfN+;EE"{u!RкO33:TډO4m"ѹNȧ \T`W5ZNP [fqQ/Fq. poy0A>R;//oB:ơ} Bʴ2H !<{ṁ`tFO> & 8 Q.8(sV`-9 i| gבȻ5|د?y8*d V/V4(U^r}d < $ɋ` ed< T&iP*5a>qz-]w_uthx7~{oˍ/ďL"Fty ӣ<&у,x틀y9=C䲛wET2"bGGivS:"D8aLf孅̏Fa3ʉB0(Ab܌_~ϼ >}p{[y+Z2iX9Yɶaވ.1:].ZwZK~ ażwq.D~ WU+,|$x2.XYj?BywB9:(3]@x Gi2Rw!+0 db l A<f ].x|O3EJi:P7~Mv-yq3h-`=0<�s_fåx^e;JE-lG._DHھN wmso-ZEEjݚ zt%L-wF>o?@u[̪5h!^偉TgI Gl{԰0NKyi+/9V>|@XuQM !~L_z߼N~ci?�mF6hB@ cF /-P;`#{""E1T,.ŭ3*/R B=?oIz|\s<ߙ9G?Ȓ컽gts?P5֩;O2VٷG >uH3A:m]ߍCB.7u w$IS)j=Tv >0w}i|_ P]_ߣ΂< 4�_g]y,|wv0{"؝*qO(Bbp2O*9w !$g41^/_.]D.PFO EHdۇTD!^$mO@ٓ4ah˖]P>Ӹs҅m@rlO᣶q (=7X#nrbwYzUz6F�iF-O)?EO;POH. S|J&cD$b8rF$—##e -n~iF&[WNá# ]H@&O;),I,tݒD|xE&,B,,,.OÔ.cR(R wvd&@Up8ך EQI B\8`³LF1\qas 1(w<͑Pvb:;u興5=UF5ftLt ũXjgy#B?hTn^XBO:QT~O<hnZgG#B {winOaP^3rlIO֝ZFc A)?f֫~Ef%*b5**9\O`%ɸՂس̙/ [Y a xn4̇ Mğz7&T~:!zfιD;k+j7XW]{A.#T8ާ?}&J w D3f;/^*gsY'盩cqnDzϪlƅVXFIjwJP _7~ P_OB O0Vl 4BOrW>mؾLUS()SYaSJ*ƛfDB? c%s}LIc cI>BY<vQZ3{㭷]k]dIPߦyj#̀ 2ʆfߢ#OVPީ<q}xg>˗}Ib蓲!k7^ny㏾~n%[ǰx٩OƸ<d$8*CpZҤPp-țЭ@Ddkm:sǵ] �Dy./UX.1}>S{te '|?4oFtBnngO/+?n|,~>z)!,XZJ>g3}Wc6)#f9]װzu.Ssab_3ށ`YFȲ i8J2*_%FH/=;e+"�f`iBraBSڱхA ?SF :Su[ZEmH~!E'>d$Z'FĽdsQ CQ\jI m^i2kkz>\vw zhL@}1]p<՟K?BT-~ |=jkōr gL{Ё 鳀Mr/9.]ua�=B^ݼ^+bO XE: -ɻ]i�~ݕl˗9IYBcD 47p~ٲwhp< a"|sq}î1k C|x%?o¹>6F*Νef9jаQ{@Ll8=oPb,z*o8|AA?D%8CD �Dˉ`K~Z!208@%pLHږ}O=" ^T_xI[LG5Ǥ!?Qc'8S (jtNg:T! aeOB#1mg H{+*wHBV9s}W>uI;B\_-Dv(>W#i[??T?2 "J5BrD?lXDCH�\a ZAL]_ ڣow}D?}gիҁx m;Ұ^ܟ|*")~_vB@kԙ`9;F H:E GS {Ud0?`p`Yk\/ė5hhch 3o.KdE2 qUIz0uz/qڊopJw"]LԁvL]+>CYuׄ!̴1 ,b)Ǥ6bDquhPLWkNDjө$wbn>؁:>^wg%7Tr= v}Wvg#�R$,,a[6̻5}͚۬K7{:ܢpTFBHlzs(4Q sZIRz\< SQ.Ȩ[%*a` @#!P S:5)MƻJ&?rYR kXkUL=X*!&%9v"TT|nD5Wrn,c8R؃N ujYy1LhV@9>cN*TbE~7kUv6ٮ5r*@ȱHՓO9ȡVh0[$;02MO"h][ۀVL {I&*JJ>l#! }Mɟ̗cm(! seA2bâ͕uiHmuQ۞ BaQ0 j^9BG̓@4@>; b%|la^-Rhsi>x8N!,Dưְ)A1B7 5 !3` 19*!Bh){"ct\BF]5#Okfl8gCVtH㥯:|C i[w� AxB,8ZSKb,N 7&jdp.9 }u,N⃝ # G\pHqQ"c o[]Y!aur6x>rD4#1YdQ{4 1y $ $@2) OfdMth CB(Cw}}&G]eY&%.^f]DF3Av> $fq]GR_2]f2l-8KUA`c;g X">3IpOU]a#dj zs}GP Z1ҧ1FҡQ$ 9 O2ipAp3!Lp=8rAB(e[ \ <B\]T[[7s}>$!yTZ!7:uXu:,: Ѯoޭ ; = 3 !Yg`| ۮ<) O>XManqrmv[J�}B?ݣքRm@gt߲ȭ2хeꥹSX'|K=}Bv&`daZR8WXPd&rE@AWpFbZm_}ߔB,Bh5)`'˜r%GemIB DVY{3V*lZIy[+؀_5w�M:~B!G˰Ԡ#%6TJcwP!�rX�GKz_@1j (kyTwQg63I rv@%HPg>Wqf!(aX2T:{�?! l`${`w`RrCoq7A/CHG!R!? iIds}vĺAF_ju8{T 9?�"6 ZARHѭ !B#D CH,$BXD?B B .{ UP(PС:8t:""@(?`/)iE^ث@] 6:&p,lFwtI%!; ] ."z�B!^!"1g`!ʎ=B$ >!0#D VQ13:`IA&y8y~]ꋨ2AzFY2Yt qsV]&Hr�nBB!z2 !!8/GFL*emH, 2.8iTb jIeTEG?9"%A28 *@VTe,8TחKMJ%>8:`>G1D[ZF, wN@ncePvI2A52!c@.8BWu!V.rA^?%+"J)P+(ˤ}kc`c dODm2b6`t*J'}1!IbC;b\ֱhl"F(z7-`oEKKy|˺ u?ecrPx?'|s^�Zccuɠ v9Ofސ"5Nbn&[V@neP1zI,?)XO7t( ']&AFKނljUH4"/X 1ir9j 7t37kk-0eTʩ ZgMHP3;nn/[~kHRN٫LPu*pm6 [yF =@歘_\)*h�lBӽ6L_͟}oN^oK$-AbU4CH]T*?U)pZ0]ia<Rurl'AȨoq}œ�&a8}'f#`q}37NO LxwS!ǙZ`1 v<3_+aCZ $n!6.v%~$5gKECEc, ֆ2JBҎFAE2,k*OgbvF!3Ug19[66GOx6N)Us"ع f9R Ódƺ?P DU^h)ر/uRCSBm$g\6lOrG6Fׅ mncDXmY{l@lQp<`sXdaCQZJm@B1.%Gߡ2 #Et}k6L#8D5`L$Kt<ˌ΋2{;TA\_HXU!8@aBN E2۰,doU +q`&Ew_ @/|7Z *DGLP\k6z�{|DK䃣 `vRs}.YGS\>`e]piL׎ڒ b'V,%LZy ~܏q?<9]h͢ RvNq]b '84T*ۙ(P8IEoiL"3a\=팫'iV0"-}oz,F(H).G_]Ӫť3I5Ԛ@gk뭊Js5wf[ƉjB対;/~BH"n$TH*-ӾefoE$t}ߴ'EpeÙs2 s/(~dWyt\l ӝ;A78=DP琖h5x?xڙCoq̇MN]-8t,حLP+'-BJIG`r7mZD..]s`Xkp} }"^8@zX $K氥 =ᔔj`_"+=14՟gR>[PyZɕ. F^7{Ɛ]{%'reqoSM{Z_d*SrΖS!:hЕG䍅ʾ#Jzs9[`uFvvO~ N|oPpo&M#ZQ}ѿp;!;=v 82g5{[<_݇4e%K숬?I~;0Od'Kb۩!x=Ƈu8+>Yip]e|~*7{z<Y)~܏q?8}\'.~J–_Ty\XW3@bֶLЃP7wB)D {_xYԝ?=+~}8~TxqnD7濟: mt4&[nF ĽEOR5T!Ѱo>ؼ\G+_S֙ʹsp7 .[<|m$:5k[Hw>?زxw_y"og*B_)d :a#m3l5jظFˤsذl@�Ȼ2OcM9CM7se0ԇ9Q{סeʆ>W;IwnC~6rn݁UݏZ:@FS``Dcv0n9T!"Wz/p/ްD>ds vg꜅;nysh<@v<jT[ iauwDV(,N[,B`Y vFa V#VULk)p{JL0? qm&hI8BfG1)*Nక][t}ש| *,7X]]~ E ޺M ^CaC$B$m}K/j<^#O\X'>h;bC\0�[|s*DŽ%#^ 2R}B* lSI2SV7`(Rn <?ǹ뻺SP|}n#>Nua~܏C۷f٣2nC'T}mH7qŋ]orBeDly71{u'`.)u M݀!j-Շ^HԒͯNom֨W{+b:IZ~~3٪Z"%� ._"v� 6?dқʭQ9sl^/xg{w^|W!*FT S5DHNqM3Ӎ#E3*jN�F%~g b~n?ae\6WzkooG?_9xחzHS~? (> /Ͽo/~㰻] v)BB"mA=B~K/>?^ *rRp\C1y{8F*z:4.Пdx=!]pY3ww$9q"aW© !y6oi!Ljw$Tؽ7AO^c_|Ͽwwr&3Z v9B #C+ ӑvU\2Aߟ: b1( .fRfL0ǵtzyT47g׹R:^l|#GB%j&8F0V=O#x2!Z-+3ZI^* VoE.b|q)CB~<1ARf#^f/Ɇܝ`R[?Q#=32iv\KDFtٜX)mg0έՔDP .*4vъj&V('᩽7> kl'2/޷IA ~!C2!∐6! *R2\\"$ B D!ƽ 3:1ɤ-paDH_ָV(t ymEtZB^E`3W~mmo~6AH(B-!@ƛ__Oڛ[!bD4s*]t!/6-^!D<B8Cvg7 1+͕Bؙ\ēlb ~2捃0`BGBc_zw_O>>?O}K.>Sɍ76A!tԆ!"O!ͷ_a>pF!CH[ y3|']0*^}mQɥCHϩӡ"ytB+tH ?#Zڍ##jgq=Tv$pz!Rcq>9gE7C)`wX7l d;P`q}<I<H0j=%NوCl$П}x~DNz4* v!8W~!CS"3>3?bS@!J�!D%xp}=Bb&H *s \z& w:8Ap L$gR\LP J*4j4j`L#<?dSd}|. goe2Ae,x~Z?+J˱Pc% z7U]_gT"ĭG":ztBZ&H5wQɕL UuP" JH!ym^xOײ:-qd!}]XU)U&!*" B^o~܏q?ǿ$#YU9+q�O:dIļ1q$͐AaW2:ۦYY1` H<vFeS3�3lk(N5`KZ.?>6ϚnQpݍS)m׮{]D.Y,R4L77!#b=1p}@$`I`b  JD2ʫV[p,Z s֕ !0�"k#^{6sw»;؈A}t#yk6?MP2me* oB|kos%ժO-$J$I,5B½Z}|8Cq]cc) #�Dx;rmt0 ?>[ ~C!9%?iе̢,mwG!C+A3?'Ͼr-#D]"k(S)<B(EHww_Gw_/:qQ w "N萍8E2:E$>wTrt)<2J*Ƥľ}k]T D nũwn=*( <ȱ8E|Kx!@6NW6JkV5Uڮ|CE gTX<? v>ٯ!#]P")B]K7lwK} GsoQrV|C !CZstGfvZ 2CVJG~]Lsf"vy6 2rf$SB`׆ °lA>8*#|^x~nG/YZ1woQ a ]ܐ<4s!7xLKl`sK%*AL|:9Җ!BR|U뀄+%TCEe6P8�!ZsP|uhp0D7H58:TL ˇ`Ǫm},3j 65q?C8:8PeKn5m0$Ҙjo4) 1h0.+`ٍ8aҐ *IW{V`]e8wͪvAT`To _`3O{ т(##][96{DRSNr.$׋l&y_%vӭ?5|_}K}�G0G B˿eK_y e &I8 gAUؼ5Ay%jT쟸"HW+S`m4c)ķ1zVfK0Az#/_{F~>~K`ء25{CrB"(:/|AbMc4g+F";/AL4j'h/Ƀɀ� @rL.P{sف9*X{PȩH;Oֲ|;cyT+$* K/<?}N&se)UP9`r<L"/v.M;nO B$y| ={܌wm";ỶH- \%H"smɹ!iB>X\SD8YpD;3 tK, -fr=-8t9bsBPe{i;fH^ZD_vˮEK@j/r^1;ˣp}ZO{-vz ޵Er Eœˤ(þMRfp|`zjt9gr *y|U6Ksr?1mU'Lœ+3v*+eG~܏q?ǍG.ŐRnϕE"[{|_ O`aPWrb3?Wj luKmjmQ܎+L$*h)@$m]��3;u:dʢNN@9o ƻa_g{7]3U毼ϻѣ/}VwV6͝&426+QL?>2B ny!iNU0vᙝؓOտ6?mp圹;y[?gH ǂ{}:L+کVe-;_/N9 ^lTճN|ʀeB!P 5w'vBS[ʰ'n3r}d [y!8^rbuC":Ϗ~zK4v4.-%3/_@ySW;=r29HeJpNќD w'\w}-^q'juhi*"$*'m7t} hA+?RGSh$|9V8Gڑu 5Љ=:BNīAZ{yG~xsZeE2 vLIJ#6G ^ɏ/ߏq?[03/.u~d!ۖ,G2nDfago{]V¦p<'ABÝR<qfȸR禲Y-#/$u# {Mwq}o2n۾7M'IBBA +C۲h` ^U`؋T7o҆E7Q\Tf� ޷_6 ‘DMϜh][Dža_ʶ- ~gK7fB`K@a^}?Oо. Õ_dy!QAP@Hoߤy5 A?r 1 !+s;]PG2[8?&pm !�Y59x=ηHac%a!? yϽ@U_6ud, MD!DBx !՟zfǗJ `FAi#Dz �Q_Lpު%AWv?tD"ˈQ3:dMcټ`ÖCaWO'L*TֆȂ;Y+Slχ; Y)Pk)UBRke*_֣<5I F,ay@s]k)IY8-9`$o�v<_<gaKɭ @l"<?GH>&fKT`k!M΂$'ܗo>|sz| /[2d'1Pv1B u KTe܈WCLȞ Zu>Qѹ>Wͤ5o\$v}q q:8P<rh׶ * G?e$$s[ӄ8(q(O6'p}ϰ2�XA�!1,G4:Q:&v/*cP!!G<25 =֕ B]l$8#GLs$O3ڄ'tbP(H\/GH<* :diBB"{<{"tŻJ2<>m5d~C}˧;0w,^ATe?1Q$ɶM߇_$A o$^Ҥ^0tZ9b{G05~oU( _P1֔8h'@"B!D.Gi->0pS!ZPAs,3Eɂ8+BGP ڀN(a3u6Ve(C`Me(M1`wȪؐs\_)'P Re7+?~񍗛-Mð&Fkh?GS|s_xYXBT0—#KGʯGؒ#DBV'M&l rB`aI"9B$AT!ȄGHyԱ!ֵF7T*� ~ te ѻMjD/~# L> ǥ-pbAntp5 B#1K`F(gO# EQ E :Tǜy:|"!B �;kM+Vʂc$Ɏ0FLIn(9 .0!!]D #Bb0"!y*Ie!\FI "r+èØ[>Ng]v@Eub! fk;:dyAp}.ETd!۟}Ͼq 2)Б<EsEMC!B#D/@X!Ă x2)IHIapL34.>$,L C> .Y&ˤ2*"# ϟ?c v@j}9 dEU&K]pD~%&%`KL]p�֫cYA,"$LY+>ԼBL0QoWyhVlp ΂cupUh*AHuۻ+))]%0yp4|;V+$A?8�l &T�;O`bCȪ߾~܏q?Z/v!L)'x 5&G$&Q/b2u2wKۤ< [@Myӷ@ɨ.|!#RS+܊ kY}AGFC^ޡ$ӏVVt葟N"hҼ2i*gu3ΛsU tPF`J!oQޮ!k~fj0 Q0/Ԁ[fn$&6{O6}3/_oe*m,\PzfGH仾8UV񥈐`-cdvKI�d}'O fiXs}l/(-�\xj~<BlDGSG8 CuO#P vsS'5H}㩉폧!uЋ@C�ս$[ B| *k>G|=<8bUpqt*'cIaZq%X`Ds䈩�,a\S�. $*΍[:تu{C8" sdvD �6GON8m(C*FvRTp (*B*B];*vm+;/c2h%/uQ vK$rvєI.}5 ?')åNX;> mncICoPDTXD+I]Jw}n vX[C#>85?@;# X_/:;d_Ns>Ө<3}蛵 8.ޯcwMZy%v]\_:`2A}+A 1jU`~0-LP:G aeÔ mv2Ϟ߽A;M~ZLe<8veҲcAe}\ptV+*ҧX s__T(B밙ck*w tg ޏq?GEXܮ/%|JH;Ҭ!ofëj/JWJ||=WIhQa.ϙm2{U.hQY#Z4asYR?]M^7 z8Blپ/6hnX\)Nsl.&"a5L2|D[Z7ni$k~Qz8c7țҟ\}w?sW �6V&wqxsW?ozeC@o�yհet*7TNx S+&fl{bePXfxWrފ#| :,ՋQ7 QPmN  `?3 ~WWV1?8 ڭ=^nמn!n?i7~&X];\B9WXd>xb~É}4TN;aꃽ!uB]y5ւ vVv`WGF. ( uڻ]9x~ eU W}^Tx&oWB+*[+9Ϸ/ أp<8O*OH'0'(2)%dr!K!$w|y?ҩKD?/v?G췾˾%GȬ9Lp>$w:ws8>2A H2!6$ >69X-&Y|σ#4D( H;*LQ d _!8@fI&H<$�[qH2.Yc\%/+tU[~IS?.8B"'$=B|_ y7- \{P]p<VgS3o̗\+G Xgj)+u3l`pn>QY 9DȂL@;" ]+ߏq?GrQϐ[+ŧs?'=A@;~܏[yx'gz/~܏g9o~_Dާ-||[??c 7yRHowey~>U}7�ݰ �H�hDJ(Ҭ&vPlf"fbbcWb4(H$Dv}Wuy_=ǽ;̪y_g~y}wJ]7rlSA w^_nMlӏxm]-o5/a`8E3xԦ6MmzmSԦ6)(}Noŝ�D0N)`\]7VπHT//1,*;Rr.rPf �.ވ'pŝ(SʇFex)k@!fbb"I*QTL#%UmMŲFHZf Dh-` 4P:~_RN/#g\t&AtH2UeV*+1sEKmJq{.Jկ:+$2*9-\`n߈ytDU(Ed Awp۰a T]@Q>g¼<kPS0rxQQ84h?@DfYWp# !2W]Lj{$#�@K2E/s))ߐ] H� lO+w]h2!Ncjş>۶䩰BĦ%!oo٫"Ԟ0PGd:!!h j5*B:]n"!7B7*[Ks~/zR]pq%F Z(RUA^zvFxV-%}W6gC J:Dú#8l1WDع)V|$0>.|�\A;+Rb=_t +Z>Ppշ|2$)b09|E W@Udq-YR\@N`0B" 5j#F-6\g ĵ <06DH j]8OG!BR0@}72b#oZTWHI[T8RB T~P6e}K #'yƛf]8j@KCw=k~h SOk J D1MϷjd@X¸H|?cHC|%ΊbpDW‘Zŧ$(*"u2�dismN$FpB!"S%&p$K8ĕ(G,A p o6I~ 4(.ذ:0nF lnSԦ6 +=O[Rv"iAS6J�ڑ!Yi1ިN&Тp* R>nzqY8MKiq5 =Q1pC;Eg%d1buJ舀 KDW'?!G7T3|Rֺf#Df!vlcX&9BrC.`B2rL )E9eg\<+#M"Ac"Ret|h)Tʥ%P(JT0 QjD<>d\e`d~JppP!EF-p !jʃK[ܔdldGp�rxqK9܋LG#+@x9G)aov#!4m ;`}B"-^"Z-GsɬKkFO ;}Q)Žr"GHwԛkZ#Ng|<hk|B!"yI4!Jpތe_FKBypO u9!Ow[!Ŋ:$P!](9E prSiPg Ǯj$E<>X 4ai"bv-@�OfM Kd"=~!։҈t=>PVBB'~|l!(D5ŽJwwr"$!F"8y7_j6Hjo\]AWeIy`! ] q GD+"dkP8@mȥp4;A[8pz>0VqÏd%\hb"Є##QSiF% Twh\E\. =,z1ئ|w G[1p X6ve}<5#O=6K0tw]@I j Co jO=~ī7[\(ԓLK"DX BP4˃;@0􉰷. 0+H8KP`TB*RmuqO*_xrMWe{JN$c!܎6MmjSxt@b[ hdAQ:Bcjt3;LߢJ?븟8aS{܁�JQ!7 8˘ ,qŽe{+ ,Yv=W~ltY5#D貱<lB:f#/3Aڹ`:Q T8mN0|lo0�7դEA;u Б9zhL Va}�&|#!V> :d6#T%-'0.[XYEH"w W}dFM<ZGg#0Ɵ ]|uJL#TQ#nޕ<z0BÕ!X_̾Do(\_n֙gSƂOzR"$=r۳T˭oZx?\[7dnS$Rx*h8H?WpHئr >g'||7y {Riۘk?JgY&.SVc(E * .կfyOv)#1<plDkju(^<9{iw(7Ph4Z# 9ŽO&K:Xi;03N„O;鹇¹ ï0d`_XT C+!.۝DN&,AA!b_ 4 gvtf �f[[CH2/H^cVs]M.eHWJ:6fv7$1`'2m0GHn|ߖ%He]رXPc(=-7]^[ KԦ6Mm$ ~ U"g9p=)O92;,r<,&d72pVZ;'w�oHKpc""% D$zMh1JÔ 'Ƣʱw@' l$x4lPF-ݞ4o7,Q r BF&^U"DEf X)ӌBœqNp38c#xM|UvdiG*[-=$AV?w>2/d;x"A VF&ĚK@q,,�`O2³!l (BvlH >G @O_QCMJ ϧs\^SWMv�v.(G1 ae<Wc=mm7@8Kn 6,QGz0!ՆJT8R~c$#!h Dyv06"!QrkcR'l.E!t.0Mp*)lrS C4 !)Uz6#\5T$3Q L<쪲qlMU6)ցoeo z-b}Lܮ o"75uU S8_dh%Dz>]zs5kicb\ ;܇Aˌr#ĭT˳ե٪Z#b=0_+!:6t`:)t>@`}6���IDATde묏HBDY!HPJ+k34F. C` җrMNC>]�oE6a u t Tz uy<]Z bƝa^X.֗"';H1<U:BD†!!D͊.mJ@5 HWl닇 ekr ejq[B WMq0 qIvKY.7&) 6iTEMu6pu7f%+E}&/H87ö"_FA۹ǚC7y gLR ,1�i^еMmjSLb?�;_ɲNmd#Ԧ6MmjSԦ6MmjS3GLmHe K~� lO]7pJ` +:&|[_ $H&-$zlU.!n wBDRg)RT#EU&H\ٷB$ :Em;*MI{ 8A8oN̩$AL!eaL"nF5 zB[(B4o&&(XFpg80=Dk[q,u͸9А~-\5U܌yxr4 �-k*@.~hhc363E;Bݽ//rOKi#r?s-Y!(" ` Dd vrEQan 3aej0ZGx '2@2w%)8`VX3VFߑSL9tWB ;6oI\keP^gZ5T%\'+L4F]@ *Hi'+ ) *!DBf>Cr�!܉5@>I!ϰG!ehq�tSM8&CR^ 1ed/g>J@h|36M8jۇ%QϨ¬@bN2(+TzJP?m"ZI> ] z~ #(|1=_;l2�qlsk%"At=_\vd =1`CTM%(aF9h<e'auo K~D` Du!yT9 :OfsZRwF Y Gj 2+�"〇Qlv/B -p$Z9H FG%TȾC;!->r%)|'ƅ$*oa}:pv,kӁdyXxhb,S4$$ $Q^HÙحZ=X[Vmtr\gpp[B< Fÿ#r(7F:j6R&`96!�ERk>,d}&1ijn`k(ߐ/@1�8d8� B(zB8c X[|'?BQ~p!m?<`Z;] W ]z/1Aa h@{8SG} $սIIu$J'jZ.lDgɒz;׽ⴞs& Gg  2] @5�9Y\E 3@B?#OĭU?!WJ&3+9BHVrB e=".v*+i6pg(Y3$K 5\BHdptF^RF2kV k !hlHHyBruX3Yb?! u{T# 1zedBf3 ZF rigeOpq*eĪ˜gncUBΦqUZ �Lunw,L"mBu>@]Ѣa@O3ja!`忐"kvpCV\>r`;62nqMp;B!܅0b$E(XKٍw !8evBNf}LPմ)D'�PL@w9)B!aˀauO,\@a7!!j5'1]� u-C8hĽʷ+lHXQ|@vJhX¬Q {tfo|+i*8S$Bta#L D1B|]NZhj! 8N̸ !(h"DYrzXzNַ,A[TCRv髡b :AXˆC 'P,P >�FPHL Gho(ג":K8 f!6M$~SghPD'#uc`+B7PBEO ]G2ǀE\^B p]@V.C8b- Oܜ.%8g67#a}!p0O'Fd1I\+B4$ GahFzcʕOu6Q9vnH|I‘1Xf]I?feV"XvᨆW#/@7(W];e: X5` XNIq&T#;-\~ b7{K?ѭ_w׹T11뚷-<պ�_nHwF71#/ _i_jv_VZ\II)#Yl)$Uj-M y5u@nn)ȋ#x_0FM\. v2]N@-)/mȐGf߄]8uG0{f?1 $H;¡J<Z榸 Ќ; LҔwā.nA6}o9(sc- 1xiT#$RgFli_, UKf',j,n/= ?+m;fҩZ@G5+u� |co>_ @d%`D#gEaѥ`"aL/R5[ŬO] l +N� $Ol2$2Ӱ{͑Xs Lß)B0#mX) Tw�j ࡶ C"D?T"+:�&#=` $( ^ XJ`1^dbu.$.Gy Q_!<T!E;4>K`�k HSؠlI_lCI*xdM E!Cz>Po ;N~a !2 V2bTz>&r`\$hh+{%E,A9JI�fF1Ҕd0(]@dˊ]ր-)L:$[)! ][B@G'l-?FLfU1D3? Ȍ<fC}BnJ"X=e pD8]TI`3d}K0t=_ e':֦ @TKlGI &ɔSQMtq g `; C啲> ֱ,cA@#ݘQz~]�[lWKw>�IQxc~LݤvhIIq 2](8XJI|N7)W (]}Ҿ )@ ;}r5Wl XP4`q7 1'rh4ͪ"%č^pmzI7$qkN̳lu:.Tȳ1}JIw�B&! 20?#8~@ot-_ ='t@;n =m>fT!Q,G,SW "O).a;yfYB4s(IJ A-nqE':jo2:h(X6 %i{R3F§W/C&7"%[{Q#U&}sR>"O(#4gek ||t2`�9ԥMf%Omyl47Tb}Fn/S(+Á. âSj&@fAjW(enb�[]gGqb[Q$P7`ŏ2Yt!b0@L1G&.n<j0DY�t%(rlWHV߈B]J/0:!s3:,#d.,A5&"|Eۛ@[(x`].l=SD/@Q rQ2! 8C!J17څ70_jVt5ۭ%IޡB#@nO ':s|JOTeH v}lnE¡ Iշiz>[۷O6ۄ3;eDׁ;€o!.хs]֗Ԡ|Wq4j+B۱-Q^=Mv�Vd}�ѰAdž&E܎ԅ )Ĝ6mVKJh: l(ѱ0m w hwqػ@@L:-A�[|pցk ٴ.~z ;|ҙ  D8"_(NŀDfAl9`@WqH �9 \!1t[*mG}D.:Kaas")u†G�۰%0'* /$TTz-OM)%3*Ԧ6Mm% @ =Q<0�@Z$զ6M+eH!w?t&vNNdmjSԦ6M?ٝOԦ&νMhSԦ6MmjS~)�z۠sy^I]7vY\h?{Q:WBvL(Luz\l@qcTU_wAf1p'i N�=T{F&7YNLcp( 3+ Bd[8ӗIu͠j3=rѮR 'wQA:IK[Z2qڊߠʨ}qUT rZ.yAl}FYF:텐':d?6 a&C[~V<uo,0l.xPV;qx@~?CMe~qN=bdL �^t16-%@K 9:բ3%<$Hb a`Ϟ P+ٶ}5. O"i9%}4c%nED Hn3B!@rvKF:BIeu+vO7JBE\Pu ;½\rlTeNBH]R ]jq @@e~+.a ew*r.=U|, =˭ (B|/Qz--&*ЎI)B|' O@>/ѽMŨ9xK !$+1H+p !n9EXJDqH4NxpPPAl B@"G!` ;B, ǒBm5H>ߢllH| 63Jx,@ۆw] mW)#&eҐe냢ZPAC#lz~ZK;71Bn ba(-5> '#‘~ǸQC{OAr E�d':!1C8RK0EhC5LG:N�XL\/N$\C׊f)lS,HM =! G@]@t֦E,ZoQYXǖttC; @#z@`ǖ1h7.-hSԦ6i[DOK!{?�P*C6"g2EGD~Ԏ JMkW|).9KهDM*}7>J&�]ȰSY T؊.Y ;.p3H:%tD@v@N W@@QwBG42Q@j]A3 3 BD yubVlQ#W!�˰\."DYeVNmicxA&ŪxTҊ:ՇT6Tʥ%�I'k1#mNJ䨶>Uc_?G]͸! .}eJYbt̺ 7ʎ ?/Ac,W$A2a="ǜ{�0^(H_$+ /12 @-Ww X- !4m ;`}B">-ʂ#x֥] B忒V ;1B,7BAB+MI�g פF0$K!!) :Gܾ-8ZɋBRp�L2@,8!r!nQJև5Zؠ|}L@4V] W)9)`wO` rb}LꨢHEMYBК|@6�V4-4` /U/Z+ph5hN2pX&> tR lʾ8+`a!d$X O:3{68j XSa&B Ls|#bڼ6T.ۅ:kC<+V� 8az#DS!ȰLlca><�L0=PPN9j6�)Bw @>� G9BB*!ԅزO֧�?6(Seȍ 8E\wh NtuteFK`}@hJԬ򔬏XRs>r uq�vCZ65ێ�A&Gj $8@=_í izӴCpѓỈl ['AşX^"U_OoC`Ŭoh)DZ}HW& P6?(2Tg"Ҧ6Mmjv"~ñwذ"Y|95bD1n2-p6O!ct'+w ͦ!}W&&m>y=3{s]=l.hxhO~ŵrh<M"{PCm2 j.o@wWO;ѝd缲*[/܊',[ 잁{>?\Z}eP=[X^=zwv:|��Zլn*NlysZFGZ[DcJ{�[_UƢP{>8X48Zd|g|9H=cbW3[(f�QfeZxtFiu >YpMsZk˵ե/4܂ ` z+vv2YjFͷ_Z+5dsޛwu:AV+[٘\ucN9كGwu:,cPRѸtz[ Zڬ)#hEpC=S k5yyQ.5g/o}{sZXaA{AyAFv@&TԾHՓk4zcs>w|fg ã;QL938R Sm5],]9W^_9:U0Rεe?l69?= y,o5Nm.Vbh^T1#BGP0kZUU^,ם"zk,ӵkoWo3[�@VZ\r~kjŵ o+2/n%MopF 3]#Y5VZ]ZZa'[4H9f4ƵC$3zr F'תQx9Ւw4eL40:G&;zB&ݨZkk8[Y*XQy <YG d)lMLwMuvv cP-7˥f}ZeeɲbgO. A6�@a*jZcn`k8KWovto0_(fժVsq4_m5mZb@rlCoԕR/d,]]�0g=B1eVag4]=bo>A.qF^psT\n%hޟ+d;Gl.pjZnVK F*ߒ�CPaP F:z |K ZjsmTmCW%)q(͍ $;iu7)%ѯw6LTb[% ; j̽wenhF6;aMmjSڄIȡ$ en7]{+jՖ.!jКi5�88gmz/'/z([w?+$^y/}~}磃=wn7Die7=s={j9c}|GG{a C~\oqX#{Zܷ_h�2c?ѱGQҺpj.J38vݽսӷGԗvGr+]Ryh ##hag/ow^YS_$?~]JCێמE_Cl\GwّQՆ!_~Lj/7uԞL6Z?Z Co3t7Я_+Bg_< Vm+?XZoj+|cr �#O> C~wZӔ "{㇎Gr=sNm%$�{nkpd"y ߝ|,1}4O!C>]g+Nn>·&wwg2 #Z^Xs7϶?ҥ;j٭f8r]kT +uzgBBU睠qzt= *<u!M $r?X\R"Y8® oohb+/R/ [{{gWTŮ=CS{;֕soRjY\)薻9db_*ݗ;vЮ=Vm]Pzfå&Z[|7;<_5A/}ْy#t\}\>siŽ;J,J;=: wM헗ϟ�2vE}Z`¸zח,TzNLJ?:0Nr9‡s("PsUZ?Y hZ/_<?;qTf˧^_-m4<�L(D)fypxCƊˍڅ WG1|ds@OP!WZ+e"L,{Ǧ::s s'[Mٛ=7>`77>ea LKs_Zr`"h(H*v\wJgS-T_yf\jmyK Vљ=0\pm:{٠}t:2ѱp+j/Kic~HkJ+5souh}jJҙMR#"c0:9<%{s\]c`a_}vΫ1ړ nFV+BQ:7]۷5߸_ToMki#)2살]F 8=y*�zc>xw2B/; <h� 1� Ƴ! 8 2q9 t&i nQaJoYҢs?\l1XC7?�cp'lX w5LEܛ<DX̶� Ȥ,3�w1^ar!%?%\=g%P`7,4#Fk7; Qv<=^΁; οIWk2A\Ɓݍ{w&Mr<`x-EE:vYӗǒKA+.}̾]ǟ[Ola\k|OS_qJO( 8ϳ3GSC4#lz>lmߤ9Omwm':%1;2o8|k+ #kM9Cgƾ7-/kt `vw׻}p;_zT9VހO?И3e ZFC0,M7Wv.u7zD]Y.১xhoΞ~cC|dx+2W#:<YR9I/ bܴE�Az[১=r>{O7jH]ZcOL-W>>_{|c~s)/yBs=I|�ufxr<}EO=w\9#J4{yZI k�5HԲbxǒؑ}{GZJDׄ=dqZכּ;,8w#$wD#~cAxI p<b9ٝ7gJv?@<|WuLŎ́[{/bESo/-[<xKN*3{9;唉P֖tށT郅b{{{ sUej=E<7M.Ilmԁ#}�vwd(F';{󥍺/l|13ǃs'q 2X`ٰ̖7f)`XDx'^[-{9%;߈\cy,v=xtށ­,\+",ĵ?wpށѻ ϼXuܵTǁ[3# 2ldsx 7Z  ؄.`.&;7<ޱ4[Ih`zX^O:yt&xr5ePLږ傑Αʥrƀcz'(f/. ed {Nc z +Wo4!۴}p؎td3g\ۺ`c}I>)=} 'v|ђEmjSԦ6EK@mFib·}_ō8'7E_c3g";Z řhO2!��_[LZk{so/_Lo[hmjeQx@:RB!6*$N>>߷ȶ;7fry3onF1yIj^>{|~dJW&`O~ජ&ww}zPd_Vfh({9l1*г�SE$O=w%P�\pî{g+s#Q?LF3@Pe5'G~nWp/ԯN)pnߗ~jT| \NR#/!){bS7eWҡcOL6G1b1~j{_诤ޚf9vEw1�8p힇 �#ŧ硏d~.Ē-*,K7B)fЭ}駻wZ @3%vߠ$$FŻV>ቔ_I~ӅNUP?#[t8a-f3& �_<>_{X诤#|A&ba~PSC;(J�lpiH'?X}|~[RFq=_A'k$eۣi->52+;G'uYŌ|V<.B̍O(18SDZrFtwv&ti N8[f"Xq,-UH"}!V$nbC})qټH7V㨪PZ"yZ;vc)#j.Ȣ `p{^QOF1G{eK;�esrpz>`3z}l79wF?D@!XGEޚsooҺ pw(}t+(և |>/uܦ+ :n`lMd}bHVltPbW\kqp~;|P6VG(cE2{JwDPAaQ=H- sJC8' ΊNi$f혮>1UPƣn*.)SXH k.kd1o8$cQv RP F0w~+T6SuI%ӦmMRKMQL8lWpI> %)c 3Q: "Ϸ`qy(ў*Z{:H%aƟ<tPo/L|0gpgZ:"  Gtvg!)eL&c4*ɑ$A*S1R2yM #r8gX1<l6r[S6Kj!C^O2=(;SK4�Nd~uvrqe+i'v;sZlC}5I Lj} +5_Nj V!NRX {HkoGI.r$-w~<uh�{z>^j&'>7^''oxv6\<IP&>csfs~H82,)C:J/AK9ށpѣw}S2C:.Ax'yڒ��|�ӟėv Dc'fW䕨@n#Gs{SowXߝ"COC sQTXhܿ?2B>sc}N ~.6+{:utf?ݝF3>Lwl/SwoO/ I!J.A~#6zC?0eQ&}||f7JR!HIXI&Bc"D:5629Ͷ^y>^רNnx:x~QdKT<˖D|JםeT]>fnon֮Ku&AdO n;6ᱎ{ ☓B*"d:n㓏MP59hNNX/Vu_‱c%ov\W�Ͻe8�8 �Ŏ'Lz/S_PqfvhHSOvYE1ԊW6S>pbëWku,ug|/ݷ92)(VL68vHzXiGdh qmФ:a%$SJ!Ʊϑ89EH� G&'U||p4ܤj+ N39-.mtCN~*OUqÁ7p|eb5%}ZX~su*iHL X!Faa>z pOB =) ]ߝ{?siO"M=opԍ%`X9U+%&o.VzD�٥\ԭ�JGnn>pUN׮xް}n?z_?s7_Kb2&\Z''>3RƆ =d\p@z;Ƙ4>=if&A.g$;es6\?;+}7u/o>29sgޓ` (ؔ2\^abkNPy'(�pWF\rfXBWj דt@w_A%&:C`tr{[/ٜPFc條mzf >&g98_y1!F ~m Y>9~#3qS6E ̢4@A&_1sO~�u";CLITTiO cܕv̮ܽU3Ai +x-#,}¾:w0% ~t2!HtGE 3|< 42s&*R~vפl.x36 Jl۟ןc/dĮ> (ȯ8F vI Re \L z&s,-)>Z?T,\@qon@Cd\I홗$'ŀ%V7P8pD&cE),Fdk#Hoc  yIdԲ*KGWmތIlp}#n�[P$YMG)LZ Xxù[םC'tb+ S(ؠ3 O\ʰq+gU: }bm2(3724>(o;+;N0\% RdsAc`W/@HI*P,f:<N8=1{MrDp'n D* !BUe~*�Mc2/ڗ8G}6|vIDY*Gh82 ^m pDc7FuIpj,A,9jT#`6hO%(lܸ@y ŵMmjSԦd TY~=rҁvTRjRZC( -0mA޻P]yO �ĮCw`N8O<Vy⸖: e"·F> "m`XIfV:{)}yz}w37Q $``{w�o.ݼpD_{|yC"ڵ_37bO_< 錴TӜQ_Or�O]Ź*w<ݹ-7EKᔱڛ?٥V/;w� 3BZn/FGWo >KS(Y;vs3/ e7hI=>vV#W!dS)!+obڵb`%ܙrs(WHG+I!{$]7wNR4:驩wRp[$$DJ%&eHH+a n+BCg:8IC"R9 Ko>QU$B<$A$vJM4" (bn/g8p�tOLl쳋zZbrŽǁ}o{XO4MI|pX\G&zzw۹|pCd%i ` rƈO3sQrR#K^ /J, N eBglږ`>`jFa iҙ׬fT*xp]'໧'X@w�Q\,71S\|:hc0[Vxzͷ]v[+6>F5@'k& ݟDbH։xf%~56=UG::{rةݖbŎhf ʌ $OlV@g;}| -w wtf uA Jn|@/в $7Pؐfv*%5b9�X)2JF43lmp")?F&AkU~MLc#d5B!&� >.7=hAvl�py֕!d*Tp ,A͉{%[ܦ6MmjSjJ+ y^�%}� /-:)"QsmT`tB.,2;sj װ>wΔ,' k{9(xbRr@֠(czqJf_x&l9g3_̶ t#\Z% rGn|`ؽ[zj_\tvuρ#}}Cv^ApQKjk,ūUɲA: GۯAT2ȻxzsRih86,_[o0kb;F׹z_͙<Tsdz2v]i'�T"DbvG_zsD/>`\jF 6ه>2eb9` ;bOl`4~x"M\ܥ?10'OLwu�j p3YN@<us:pFM~ksdgO>{;ɍ[Tt%�NOz}by"]N]z|!zݰFZ{܉5s:>51s{`|9Mou݈yG2|UZW˞N- T3d4f`|>ɞe:0>WLkaGz.dof@jQt `CFǦozJP,1# '|pLWK )3jpmRm{ _~eX|F-@i]ZA« 'β)uU̲B'bMmjSSF,3hQW-jʤx\|R_3Jådb5+qV˭?3~o$>_'e_Gv_˧8�\]U[ *Wʳʌ䞮щN|l}8_{[M( h nd@>3{qK\w0?ctch&_F mۅT3/<B"qlv%Q/+-/TZk`?L7_|fkk#J,Eld0HCzxੁp}K_t0vcOeljK�<c˵j�f#t5itWqZU!\NzLP!zake<_ZHa*iO_<9J,fQYw^FӸsߚG]1zVZ W* Ց=c:nsp2w\lLvuM%]+gF&}xRPɗ八UDXqhz2GQd4E,{si][-Ug+Rchcx84ZJmK!1yfy}XS(xqr͵|1sh뜶 6^N}b)1&yShd)̶sZM\[].WK͞lPo0?�3s^m9:.30Ќ #C3x#)[h,VW櫥F`ap00\xb�w?6fcj}eVXkAw_7?.k.n`"<*5֖jkZw_np80\HsNp`_-! s +3-5Z}}RUZ=Hr{YձD^89p0.u3 0*Kg6Lr:pgcK' C<KlƓH ;Zton 0vx\'qܳC*ZQ2}pNǧN*w,AЧAk<emFV_VQUѕ9aa.U6wte;ݽcSoupuV+7M]JYh7kFr]blzRR~XTGB/]"pTNm8:቎\. F]An<|hýX]:+CH(ΡRnKF*tdsݹήlbBG[oGK 5"9KG�=tG-^jlm6ʥc'ѕ]Ou&T 8&#H<z/@Wl9" z-Χz.#}@6;8v M\. W 9A"*)QͰ w)wMmjS&'94zSdKJS YN߯n^*"�-ݣmIF;!HCr>3TtYY!B._~.z~i_yצvy{;/wYZW~])p휊p-@6n_? h4m>֥��|t(ߵwډ5fAv>Ԅ ұ]~n+kSon5+.^>W|zq#w BkK80xӓ5󛫲>qObgsA ]|@.|Jd% 3jF<Wg\] ۽<G_׫!nmqܰ_΢UX][52FH3)z߇F;Y_̡ͭxc{:qGnvi.V�xaz]]<9{1ŝҲSo}󏯄pO}qObꉤgz-K*|f<1}=��$5j>TK–X�`|w??} DGXA/g[xh(xr~sZK4lDӗ}{q)r<$Pu Y@u-Πq7[> q|õK[/}oajUsXC‘Cܭ1W7uBaGtYUCMƧ;G[fݝOSV WB5SZNkKo-e^+J Ԃ+EVЁ[SAN Xp.LF.ڤ~� w:6I:xKW@$MܑG_ZBP{фQͅkUCc-MAyTfCZԴASuQ~yuĖC|]QFx-9(* 0f;J+�md&B+Ky~s}^~jOWV&K(DB3ad?^XhsNfyq4፵<o`rsmE?ա48W9rZMv\m6 篔Ac}pPQvURd*U`C<sί\]-jV.ǧ&ww3N3 G3I_[xG?\ϳa1e3zNQ,\p@bO7V\Zouw8� 6<qӭw'mw9A7>[.�Zn.\+cf۵;J9Ac%藿3]gnmv˛}܆g&-n-|m1Oiݗl�1#Z|JisQڨ7a.tF&;G:W=O Uf?1^kgmsCX=ehD'$q_<,Ai@es| Mϗ_N5ȫc)], �&Њ?*YyBo˸F߰*:*+2>'BX]m6MmjSڴJu9d|,BBTϧ.5+B_̸,ݯ.bq̪-FP+Z{Vw{1=KKoh1Ua/tElIuukWϕnsk uу[\ `,g}"fsߞ{+7"K'ٛ쁻ޡ羵p6~yժo^8%l6Oy홿sKF`�#!3sA΀}k~vǜ}vrݾ.r-y+|,35ܕX!C3)띅b_xzQܠydWaMΐ;onG9_]rƋ.;2Gl[/3on2 \q̔% 6Wў~~㏮Pūū7[gJtBڅ.譗VW#+œ[_q{uVMIq͍f'yݽY�=8]cI{]_.oȑNb9 ?s~r[�q)x=Eͱ&lOk*�v m5g'3jZR-(V`%h1|~@^\}�/}o2O%O>).O0` } K]'_/uj yA`FFFܕ^k=ӛD%J빧殔{|<yR;Zuj.k7~r'~Ƶ/* ;6䧣jw.U\V>4W1f`~s.d3_z?Z^_a=loWWjx'|moTqVٕ"d;yE_8( *sص#²7"M<(a7_Qǝy{M9-4˜ 綮+EcuS;V=u1,+7|~]޾\g{|SʁQ%GौFZg+rpePtfsrwl ΁wtfVŵkQ-^}owdrF#…|joOb7W#![k#w%+!z6Isk.]ttץ3&gNK=c_G':ϟ\o5=J//x"Rcy!%ɱ} X/ٸzaSl,�RX]/?21O&.m5a.8zxFC^+ZOV`\juS$!9WZ?TL}R=ZWwLw70S!Az `p_u7݌`eu(Amtٖ%H:3Hw.Wp6H�MmjS&I2.H7�8--2� !'dj÷* WJS[^]�h <WT#䥍߿DZ67&�jIҧmB/gm=CYDer&Ie&B?t ��k?~2졏yYAW`'?1FǗ^|zI\q U~ŵS_M~z˿{D#ġOܥh$9p tb\xҗlo]E9B?پ+ٕWlB_%A-Y+REE@`1Btfg/Wȁ{+}da;~KtDqqxEɁ0"{,ؐ춇;g6deWs<j|uV^$zou6nJAgY+'64w?͒ ϽyI^xma{cO毖]3٠+[l`+`~H8g~EXkW]9S%i0w x* o}Je+Բ&[/]<)Z@O·&B GG5ڂjxF"9LOl V@''@S@SzwQ'(HaX}#2@R)'_[ǝlՓ_H A-qAr oM X_͖"ߡ\<YZOxv(*UUf�wdg\.^xzK>8fuCrq>pD7҈iZG3W- _>|OzxtWp~}7݂dk2-oF t֡c$\ZHM`[T ϡ묏.z I kD=uꍵ=.=^_Bl b4ute]|J}╕f\fTg%Rʹ-3<G@L6@^-JT.5zqŁjgSk-vf�4,AզF7Yl`~}$6+OYF}x7^XZ[bHP-w6::Zl0M8ZF1,ojw^[5"`+.;7s ]3 i-;bȹ $8r8Wp*3WmWîkJWmj6"9}s6sZY_F%B�_ԪormU6U R:r$Xǥzi.8oq}B/210qWo^@w i5㫛3zbLh`Dۧhp@z&%QBR+I"dՆI-Wl QAQC!F0³L7̓Syo"윞R%:6:tK_U\4mjSԦ6a¾=r(1G.�,p)N.Bچ[naD8O"GGoH2n5/뻊_=Jf U#Ny?IZMw=/Ξ,𕀂&HC< /> e-BlOϫ?ZT-:*g<sGg6*KOnqonGVͣk2G@mM# b ;a h/,n,])/{׃Nm,^�8,; ]*4' �0~Þ|_X#QA0x/tm#Dj>?bC:Ԓ{U1Bpש7kΝ<7S=ɢ xzBE ryu,V]am*52I8&/ki?9[$PN s@MǟԻObfݍ[_.?7ƞ!yV�pm"M]=YDJM8BB}sKԡ#޺ F]+ǧ9|*7<r5b1'�<[Wj~cVU}e\ʎJ_٥P欌;3ཹׯ-(|�PiBV_>SJykI> ( Ě?u֗@c^7W; fszZ{4BýXf=D,#}=C`Ɍ'Qc9Ө@.mq)� W[ K4˰2,SN"K[ku0,A$2gX)|6M p�ZⱾ]k;6ed}X31<N/W %oE)ܨҙMw *)ߣXBhFX, :3Ε|Ō K%-&~9Zq12ٝ: qj.vuI1Yqktg/P$듖$8[IzoG14p4»AyPtP h% K4/41nj$3(>@PU+s1J8!r#VskTq'$�Fr۔DOn's^:Ì)S;iMmxN)h9{ sIƗ$7xPR�eJ2̸ 57Wm`Sު8_ U@Sp3q:~vi,[J]`僛#wy JrU(H[ϭ^?4d.v/^κp[ϯ3U ;Bg-i$-q%x!_pA,\s`w=Z9V]7Ҭ3^�# X50ZEZ/~qĎ(ޢ$C +zsQk $'l&wϽY'mЩٸrvΜ~c󆞁z}G|[ooN^/I]Qʇ'^ ߞoCCvqGx-^zs6jkOEk9&c7*[ńSJt ׫NXQ j^ }@JbGfd}~J)=3:[lwp5W:=JZ6`\8Y.5]o@8{z5 ʸXoԔ6^sbi|MϷlnlp~$q(\>W]= I~183d!&:ƚ{��2̿]ҞC81B0Z-7/)GLkIHJkP,!Q[ssGMf2.ԠSo~+J~7GV.D+IkT9OdwO> t.{fyh3oW{4?H2,G�XvPtnt �:BkOg]9!Yѿ;<VZY[(צ`=ֆ331pNI< },b*n1]IeNm/KF#LsC;LK5*9p4bx2.ag.KeQSt[ޅ F5>;ˑJ8лLczcf ,G` F 4݀/( ߃]c*ӍY_?<jޏiFv33X Vgjve e*`SA?UY#xz)>ȑG[6ڒ| '_/l7`E~,?(M&��󗪯spƫ-}.B�#D6~ks twXH:UBы7VCz!]uA_:+,1Fiq_+ɲ] {5.fJ0tpp\kroٵ{bO<[.\+_<j`5K1|w*Z:B?.(.97(%@!KGxnP~ �Kg7EV܉ᵋlo:@s{jEσ> e<W1Ղ}km>_毖Oϧ~.|lac+O/�å<:V9<mI@3�r_=2pœM&Bpm*…cNZ-7܁ |c2fV({ڞXa$nd)m4ݎE&렼je >R(90fSDZi^<Y RЉ$-ΞpԸ)R;ֺ**LJ/ԪNcE9t;,.,@;m'"}SRqQ҃T�T^`.?BӪ.9xŎ̴$`S{vLJɍMuz>��sϓxzr; Z|J" p6Vk[.x2=M`17THun__HKa'&J)=8]9_apĒbr٩1ʻO 8jj(Bq 2ZWϧ@WT*s M_:M_(;2,,ən1ͱIKڿK+'9ag s'<o*ӆŬM+Kf#�[6cϽL6A{N\kJFKzZ-9DϔexϽ t"%Dp44.T4'@]%"\̺e{ 1#.th�b=;˰.i_bS~YV`D &IGEO;I`?Ab9眇!0`G?�XT,,+3dqZa0k0a,2aaUHaG ˰  pq@O& 2LAl&A&#DOX7U'�.~ ,7ķEEZՂV Z! ppθ /!��D *`,#x �E77gn爧wߛoOٶ蟜K.anu~MVuQiьuU+SMca~Rz^=CѕB�dSwa[]uzlΞX ' /^^NI~d^�_v˝gfO,:ѳ}й3`K]c038N8ˍ=_vεW'Xw M6{jrf=k4�WkSQt]:U; .")g},m4̷÷ 籑w~`Pt:(_ޢ8;F$ljnOq .T*[KˏeatJ+D֗paZՂeoei°s,ZrL� (c]z[ڮ<ƭnyɓгK ڪ]{|P|suNs⺵|ŻU(^P޹և/lڢo?�ԯ=s|.lm4Wmiqҵ [eʲ PiqȐ<}<!Y|WY [ax AOlK]={|m<J# `Ql ?bܦh/-ӱ]ŕSƟq6WYQK/.W+8k;njR:HEv-NӓOk3_m 6{oJw)��콩wrY 9|IںxjLo\;X:ElEG:g$/F{81Պ xˡI 0YXV1WQ{o�KM7XXZ]}{/\ee0P._8169I( dlSkq.lVeݹBUy!ьtuJMm&gzw+7`2\[.Wt!hYvaWZo,\u;sB^ =N-h,`d6= Dj 1y6xTͅk%4=HP%"fCɣ^}htTmﮛ /zJT];K 6#HT‹ʺ\]��)Y{CPw|1M=Qo*EU@&(.d(lo9c?!0]Q䢿f�!ܭRn 0(4hqh\B<qKM ftH<%\pẑ0:;kmjK̭YM9Pl,T-AdX _A]ҩs{+]# 2T&飿�0n%FYb6%ɄG8`ßccVZYѿ:p]HӞ{Wdڦ|cŜ1L-7O_;z==0\ή-5@YMk/v{o̧X [6ъҤ<mDe�CΞD:JjO)&�0O~f*خ5d2sSK*_�]QJ -W4xG s|ꅒ̰CG{f7WQ3YvC#x7V\|u �-L!Ӿq_ a4<Qvb}LˇحJP@@YPe$' l*Zvt ṓM}`93ooxx W\Xq4z*vHRjϮ-Vt3X>P]2B]O �+GJ>C<D]a{hB]lYDDf[KsH�8poM^{zC)B.!�DuH2mJ]ŊDIF|B: *o5uuHkjŷrs' (lp$"MԔ9u,ԨΔ{."�\xg\-X0<䠱]u4%y0ZjzpERz>=܉;uJF':ÚBz~b7cO;ޑi 0 :*U`QM|EL;lQn%#=�eg~Rw_~bsr[>IF&:&%u{RΝXNdžiH"f2PEㅕdl &4Zi!7"ke;-vdKEdRw(&kYt%`J3Ɓ!t@DHOdH_pD54bel7Qj+H��]=ޜx 8 6Q.Y5geY}L}U9 gUV GMP㨏,N0!x,TGݻFsWQTvB &z>'CEwlIu<㶲P0S}RmPV�D֪B21WcHIMNibJ & $XMԃ#5 DTbejXziwK`džV1E4(6Bv `[>O<]Am@DI!W4<lŎ*FA!N)� Xqw'0`[8F{Q#Σ@y z@a xDiSGF)`A`VwѿޘkSn$`W's͈Z,Z*7ڶǧg_<ACmE"tDKUWg)v$'k?3Gт(n5ӹN9֨Rõ_jvm]Z9']/ЌXhQ;~'QMlH]4Zb 0TlX\|Օ\ zt_y<g.//T][[GSlѹ2|;Ҟ|yCؑ*O jQ(>{Wjop0�SuD~ߔEgYo0EITrx2&l>lX]E zfsv Gk)]6b oVЅ_$';qH ցGϼgjljТ_]#4/@TTJYӫxS̕d 1�J XȪut�� nӯ/V? ­Fw=91ݤk}閾IZxҧ;2 Qp2ɒkϩՖ.9iNOK nƾ7}7¾<tE'-lX�ӫ@zJTkZ@HWKa̢IT*,Jr6x 3.{�`kw.X.5</WR~֬A{mrS|V_[c}z]r|o~_ 02yFޒdg>79E] �+&D3qlbzRֲ/Ok*yB|7n#zKۊ1QPbiU8O5_vT$mMi(oq'xrz.{J @nRW` l"&I &-BO8ln.چ?`a@my=͙`Dہ߄ Jb8ieV+#D ŷŪy[x4n c ,dqg2p1pC06�0{Ggi+x-G10ԏ6ljXJaG& Ni>[W/k?u39>9Tv㷢_\rO@ v$VX`2. .yy2yt`~E@[iQ ,teU/]3}LN-~QgotGcf/Vj\ .Y*o5;U)pl6A47ؑ=C_6\.>`�{#" ċ3pյjú3[hÀݏ_^{vE9ٞliX!ȍL o؁N";ߒ,Z� -R3X3߃4$\)QՙI̠+j�nN͈&';:} PDX_<F8ieI2cwD^X5 LdbÀowNx9b-!Df=7^,Ҽ)ءcn;{|gJk 1tGP茣!v{)Z=4~'?V+a.˗ %*܌K!CAƗ@y:N}\k|n{*ܾ7ðìO {^wŌXBC-sP{0#-$iOl$?.xMkKkeW]H~ubgf-l k񞩽'^YƏMw@�On\Tsk\-l磑¬O>Rz5:ʋr:f X<3T„r)o{ˡL59Q=1?+`:qMZk;ַ =qKg6]`�seIUtrvS|-|I֚RVN[/�9Bk��jfrW6ZDi\o1v.ns9m5*8=zK9zS{qې/_#ۨ&-]ҹ$+k2\L/~ =ZѸ 4Zev_5Q줶YGANsպLLv!'HTq&lߓ8g=۔ЯG3r=.>0`!ΐsْ`Y#ǁY<P`aPEl% [z>cf<ʙ�BZ8�8۹ .M,$chP[x4t1rً,` 83P+Da`g, `Fmfbu�"0AK1oIܦ.Z<YHSBIyL{).(TPؠHғWVCsTg{$ ]@}A[+sWC毕~~tYlW8W͆PXq8/^nu9t!sʻZTBd^aue75N@r9ZkjMBmŝ�0{Hbm|�6 Z56Wgujْ).=.[x{{t{vRfWp}tF`���IDAT GTzHH^s a:Gg(N*o6p^3�܍mm6SK70R$XeH*vl貱3]9V^sN Aw ۩*X@)nr �nshc(FIL',\ܼHGA}o^;|H ܺjCm4lmTrܡ19R.;! 8rlȓZ}r;r a{x<Cx0zA|bs JM"!IZ!#?ݠK[l =ߵYw^i(|}s0ǁ/~'#p]}?éףq]zxĆsbwF 1O|8!eUD߬ vJnm`ڬDX4-A+Pb}rtdpy Yb6p 圻1[Ft,*K&X_V)%Fv$AQ݄[[mz\t;r8 Jkw?2aEt38ROz<9G=VmUj ᜳj*hgSf3R l%\3,u>R@؀@Vizxi ?Y.8y6\`=wAEv"dJ2n^. }�J'w 7)*>{k7nr? ;.^ʢ 29 UB#ϛI途f @\,!cDvي!< MPm *30 *ϖE9oZn7CƱfƣh"` `hfK\!dd Ze",DO0�x 3Eܗ�0` }.m߶p%HhlnS~<(tqxN8,)!@"�ϗ䡌@yW<հ_ oQ:r2D#DFt3:B8 W@"wA.@ }w�0C??-CR`(^47;[Y?IR2P_�lc5uvg16 Jt!ws`WX]J!Z^Lu' ubK@תaJ%@O,`ڕؠ/!?toX\3n+1hB89_RSuߐ<gW<zhqέ&;K$ _#E+B�U=:30S9q)BZi!I!!Y a7XR�DNR ;F x@mn@$8*ܩ*]Ku*Q:v!L8{ |BCH>eS. 9�/oy_O|!০x&`HR(EY9 !qJ}$!I`–4J¾T+DRx TAA2=†R8AkCp~ԅ5-x2̩4:}%, FUEqAp8:7Vb6 `|PZƚfQQd oHaU( =Ej2Ŝ(U<cJևBcTUFfŇM(=nFicǵq:H:\]-U\ f?73p1=7Å!w݈ 1H($l 2ߣ! MI);Y,A@@}>|V%4st+b3 G�"ѷRjҊWLcHPKi<Ҭӓtv}ч.׾ًj<og/bfh-]{z\_ըsW7 <;Y+[ �dH|@N0~\.N-S8zԤVn d{ej�ɁVq' Y}C4+ӆWG|. H0{ qp1%XA.%ȑ%e#C@"� Qd  TOڲ` @F4[m$nFPQaXTߠ)\R!%Ro>V+rt4c,2AdFIb< 0 [hzQ5jF֨ZzZVjJVWZVkzZ|[^k ym47~CVZ!C!!\CC90 D?@B؂Pfl4fj6ZFS^VѬJV T,>TjjZ5V֛Ռ Z- lA1�D?Ʋb;͑⇁mjMBziЅ] XeRN ]�˚[5!<Wqմ$SV%r^H]KL+D>_R~#C}n`yEj:�H3~| /+?bǤU]<:( ?FB/0 I0G4lصl #ƆdZL xlq9Z VJmC!p`﵋,SW3 j0kĠUtn][7!9`3𭗖z)>᱙N'‰W6!k<px'X :⽦\_\A-N:6@Æ+B o8YpĮ7�Y�2EdA#WMRaj:uv�iTPȻ)A\I"oGq !2ق-`6̛Nnx薻2&F':GjWZ! $!!�ѧ@jT#T_H _@V% x*%gy5bm2Kŗn,6zꞘ e2OQd 5dRSQZMQ|0Zև)UzHl$O|cյ18x-:0♍V 6Gݹ]s8n6³7hS@!HNKJ:=˅Ĩm )%306Pp"Cc4Lg}P3ƀ]7G}DT�vg=)t H à deZڨw>uFOi5ܕ-p⦋L^t� =) &9v)qPiI[8J _Ou? vf$ X=N,A0`X.D~!"hJa�k.lP ^ƩX#c(l(&[B"dX[ RXGn nRB̓=H n]9=6w l> lr~I< ؍U䱘s7ry&lV+ x3p9a*R~a s,Xa' g+6d<q;6@@xV8B&X*HG>G<�U%JWIl a3x)y :`Xv@>@-h%K0`!aV&m Mm'+jM=Dt!(0<&$)tLpC." R'$ǕP!DfвERX Ӈ:?+{<ƾ]X*RG= ((^z[˥, 0 !҆sp 9rԌ  boRd�9�3I}Yn_0M4ʌvyOKsEX$1,z,?˺xۋ ]氺84V<68|*h ᵗAaLk\(TI*d'*ΆZ AeO^gwБ/@ܕ@A0ۊZo Nȿyj#8&�ד$a)߁!x|.sIz-|ۋ_7gϼ6 }|Ծ'@C-Bt`gzZGwnjBiq xwHp G0r3GܠV;M(h^aoS;, Ra WuR}"ט=�jK@BaV )mV  &MY_K&cKՕEg}=bv3�p/܉uKL8xzYu%l,rn|XBk%{rP;B9jtG0ֱ>@Oyb$h 0*9osyn}V%>\]N-F# R8Rx3$aOCxڹ 8W^`cQڰ(tܧ6M�A͢AuTl t'[ԨN0HZJ?g& &SO-vda *7e'Ġp4|\eU7#b) ) mwTP^ 7)m ]&�JRAPNXr~mq=H4e$[SHr7…fY4[MHdle00ca6a?FYz-[ZZWJV*j\)oU[Z^z^kjz٨7Ͱ;arnȣO}�f@rl&d3\6frL62 lѫ럶300a6e,2A d p�Σ!h?ql6zZVjRVJU.+rRT*5Az]fl6f+P f<b0Inc1yOL>)M;pR:r{b\d#gW~\R ױ!$4hd,L�6 �.rjx�}wdsX|w׉z% Vr+xx=Bt8yA{|'n(D!�7W pmĔ#Յ%1֏7"> ;1RC#.iuA A]({OzsVδ{g3m3} =�L\-/)Ywώ3{%]Jn4_?t?y);4J+buz18\ƒ^ am|50O4Цd9g9֙Nw" % [ lq BĎpLT�'e_f`4?wQ.1�(tf|5Pu;Ai'Twj(E;\PKE},$X~nwo5ٗtC{Ith7.[$=-w�rGM� pT͔DFw9Oq @X;jo Ch-P�]I/ !;v Ǻ؂zݯ]}s &Ec0l:.P�L*ɠ6,�3J&o4dU@ZKs{)y !$) BP002h">7I<F_w?dOd 쥭rayV woՌV= b 43)0SNsm !V 3$Ei˨pTY}>(!j ,Q&Z`P\>9{yKk'*$dˈ7E :(bc}H8r42; GCR.6vL.,T6Lt 9ً% kK Z}ș}RMmOUd-EkT͊NMIv�,GWpC1l 1V(f!iWE_^S~1J {%B Lc j|@ycQUvϚToqi31҈S7q v7.A"D#Dy7W>wQ?2`%HĨ,rv`Lmc;O!D,hH9n�yZ9ajWap;zy<dee� [IjJԒ@ 0UTVH&�xewP\dʱKc!#bb\"f _ADdk$XA�xM2dZM3�, &cP?jIT[:wOY^m?M?Md`"Sa1^53E|nO_~Nt|8wcu Æ& W;~ؔ7�ӓg0�NW_f|1S);$;WϖS>BR>T@} ;�4,8w�gsXay.{&oC׹bݽ `[vi"fܥJY:݌'oH진Jg13K<|@bjOٿ?~g8zڊsXm|!S)7˛MB>�kx/��{OxwBi[4\sɅ]]Ov߈IK.64P|X�)z+vfف~^*Ҷj%wn}liM//T˗f+{ojYvF[Rʾx6s@GW~}Bs,?bW�!utmjS2E#vٽK0W_iH̚호l@FeE7̠l(+&¿0�A:e2 Fi[ע)�g\To �?:'偯ߌsk~#θ)!,dXhQ h@m%gJd%vlZB?dl%v$<M *xy{3gMmA{pe7XAӉs?x$Rn -1N&)eRv9`wfnc,ks*b9Dѩb�Ɲh1$EJM.-+0F_ZF&EH ZQGw=_[=EuPI 8۽43\E01EZw}FׄE$~3> z^ښ4w|Ԗ믘-<Xp>΀cHx|�hNx% ?Bc#iybivaK:.`N?.eE46`eFX4k}CFT[̡k; ه%qsY[Վ.;B'eH׭Zx'?754#ŎleI:jػ67#iX⼭@F]yx"].5\ϣN7',�bV4ּ]p!$i<^(U+M- v+Qi|(Y;wBH9hLڕB5So8l֖k+ 5ܼgn}0_ȤIg^RީMkW&܏ $ᘨoTے^f9TRSN_*�U+H5lB]E5�*!uJv9G@{sD[eO#&NE`jyj|W\T?ҵ%[!R׳^.!)/{/uteKuжJ+vxZbI. BC7pޙ]KX;|K%" ^i&~MQu]Kdﺛ'N=L߉:Les> 1p0uپ\]�@j'F"E.:0~R8F)c]l9��a6MN)[a%Ea�Z#&cql�$ 9ii(ݭ;x8]ҵ38,p$g!�T\F <Hxo#ˁ3 �aB|dU A C|)*`�Ev%7˱T]aT,E>/8%ah{�a4Tx| lJFU两Qj̋n+_gxdIDc‰xL/ŀ=[_uY*Ez"@ϔ3 r>f^B h6zsҚXV  N^{yErِ7s[MB  `>8z ,U h l r<5 e{NJ: oEq�_:pk/g oYG�c/ �z0"j_"l^o2g &$ lŝ8Tt†fВWg��ؑ{  E aҿqQqowgT>dFqD?QFRNA.8�|M"E`JՓP0 r&$bNbc/+FpŅ5$.;88\-b-}q{ ɫr[pCr@Ðde ]ϟFH �1TA[RBW"BQᡄiWfBPQ(n@▚jpɽ L~Ĝ,t90|�0>#&'0XɔqZA�́B!&7ՋB13<^4|<z=JUO|w~L*ᘨ)6m4}JT AG*=ַ$*ʁrIN|Rycu{ΝXlln%mVBZOG&A%Qњr=*- +LTP-1cː%hSSNBw(&/-K*3Ɓo9S-|GV7(C.x}u`d*5\k]# }$<$N!?Kc/L1媉dS8.ފ.mWjp0{T 7V_ʼnW��o�b8r-Ie'N0|g¶;?܀3`5b00\pI`W�:8zM GM}"kOz=3MP( JĒPg"& $ڃădvҩkPHalmA1ꍲXfp4U"unx T-|[9N#$MBa JxS آs0-aa =ѽ(ajZMAFhTգK~*6ˀ'Ne+́jJZATU⣃8% IlXUf,`A2H'Mm+@U%㑘&vhA2fkV[*!OpnƺJj.Jrcs5^z9bu 88|w4o֟[[vڽA~7$,a?虌6?ܧa.ܮO ]>C7B!(([)ቂE~AJb >Pj^>].J#N1 T&k[)dԕ-lߑ8B?LmuN7(AtAܤʫ-S#O*Ih3�ьZZ7JWֽPl+.k .,9̀DRq|nѱ̗3A^h/iJ]QWR! <e)p@ GDſ~3�x.;pؽV0+ӹ>o8vH;_ 0{Uvxd|w?:jCk܏ᦧ[~@D R(^�lzտ 6u/An>)'\ Q:w&?WHd ]�r$)"D&@uM!4(8_ � ė'm5`ՙXV ^NqC?(fr'/ *&1C'|@!qA&_2vv=7!)a'173Y6J +1Hfx<��ZK?rŲ'7CÐykh>Kp;쉚ĩ-G5 ! GjhGHFw˜rdl͑QdO~$4Ŋ)Ԍ?W��0{z_ϭVkL՜Cip:>ݗS+ևi`L׿Յ>j!]�lUۨ|BI@^qz!__u:X;<?4BGvbƙY4[ pLv8 AiI6uWOn0.{B8X.,AIْbwwv\! J_`}F/C�I'"! t%٦> !jtf1i1ZR-- 3 GMp A'O=H$R-Dnp "_�be5�A&я qaaÐ7Z.ZJZZQo4jF_Flf<_Xj�aX*#M�!0w)8*z^PkTjV*j^5"DFlpZE_΀ "0d l2, Ax9!! mԦw#HB:q Sۆ�"D-%B(R CZ Rm J\!PjPƗA425 Ć9f= ly6[_Wgnk;ޗ-+/s 4cCAfA?܅%?B戶IGٷ`1B(^=Çarq ;_!D9RAi_㟚=V́jTfljP7=xb 򛱁* WvNft:k-UO6c0~<��3K `=SCcETP&8pOi�ѱ rȈہ='>3atsƞ< S9dI_0G ֊Z Q ј蹽OW/gm4W`wqa!`}t"g ;=g.&.uj]qzNC]zo(G<c!D/; N6f �ፆq8ڪ=}y7BY:tH#Bze`.8ԡ|5BR�VE-1`�`Ϲ<8RܧYH@vH>p?l%-5EWphU؁K h hgw�m|⋻g%?R0ڡ=~0|;@>Olaj@jc)BPKC:= pte_B� !JaF5$BP LǴs++]=_JRӛa+axuIRu!ٖ(A$8\x4 BB48E8Xm�KƔEDR81S\�єbFa�pH&T8F 7w@⽏rP#CBEiOFlBfAg-5ᘊm "C]@z]>vpZ(Kk wYkN-خ '#C{+8cPo>-qmJ8fsq@-m>:*br*6S{u€ Abo G ;Pr.O%YӄCD=OWAfehTx7kQ M8"P#OfJoK%#ԨMkp Ma9gb_oU84zð[Vl[zZ+rRV+ѵZjrom4\heĂA㶡ޖ^&I\F 18kQVlhxZOh6V-9 e2A6A6�Tq2ֆM~c6mğYY76\`:ŷI̗OL{gc_E 'f>37r_vdN~=:v{�o:z7_\MLN<G~j{g~u76Ycv#kV0WL^࢈Ϯl+nT@("Z]֝Q;2O|n׶| ӑ'KҾý}s8lM.:wHt}}|ycm,~賻~3[N@c )z#?0:xEBpzĤkɷ?8ѝtT$jծ܃ON<ቤIt}w znX^xjPgOOrczs8np/;%m9nO/[M,vfPnJ v!t׃OL?ghKs><0\߶p_6SoRU[i2fKt՛l14Zx@Ot'r٩08 7Z]/3:S,N6McwUx f2ٸjntomV7Fh4fިzo*uYȷZ#=Sf+:K,s^eECqd fla4~՗?`bwN d F g�jնZ- FJZFl6Zf6yƙCƩ QNCFlYp~H@i~aPIP"GKV5Q9V k�TV;�@@e�EmtB쒱O~E2d]b � ?78}O.{$8W}~Q "gީt룿0306g >|= !JdOΫsߞ</>ԙ!Cw_E/+~mP^<4ڲvUXq['^}llbo'C_/f~ں|Ї'~ݗՅY\mdB K6kCU7B7�| ڶ?u@PJ헗!^{nS-& lyi 3#Sŝ|7^-}7ދF'6`c_޵Dz+ح ?9<6!Me]x#EYŝdz*I!!YYLL|omAr�`y?ڋyp#?8*(שrCqxᏍAQb�y6D6TR `#Ɏ `HN>}'O$=hj�S:?O޽72G@ E(j5v+[M�MVZtyn@%=j<}  aC+RDC- p_Ogwgs % z!h{-v$ghŽN{N  ǩ}w`'>3}mHutezd$ =_?q5竌W%j8 3' bN}m"W>Q#G ሆz>5FΫ Փ [ѻ-K 6IWϗՖXU^YԒ_rTl `[< t<޷{^4�5(%hL#l~p~LD4$E"F7^{׾}wg%GfDxDFs߫PaNݺ73OGD#dG\$nXǭa!8ǹ} LP._~sǠgck :^ �ַvmA#@0$[z!7/$̹�xڤcE�-[+)IF :yvq\p ?�lC\ ;^$n=UtQ<D$[o&M7.z)L߾>pbqz ?KFs0Jza;';3OEb9W hvv4Ga/m!s _x>￯^{TW04S/|il4pa,#AGM 6x?.jG=E4ގ睘}r.MGE EfMkłO֮e}37.9I,3M0![nb'g|6][5-+)͑meQEge6g|6vf|63sYgyQeQYo9�a/ˆK 8c;~?t�I$I$I/ԪPPegy6˳i6ftZ=f+*%A !w'۾)^uE^m *&A >]\~Cd+k;mMgsXK]~0FPKhKJVǟ~a+y_7.wE)?O<0sHK:o/4N&heSamq !s‘�.COakj8z!g.©]kxnt}sȁ~-G7yy+ӏ?Օ~sz񁗀 +l[ ]ʿsc�9po=�ŏ9۹,>h.ݮKЎ k>3J?O|9iOW#V%O bjwO'wL�S&ɰ6>6ݘCcТb bqLGdbW}}b?O-̧h|`ƻ^~qo6zy?03\$h9Rt-B\X#@HS?7/z/O{~/_X^MYV>?cѥO#;aaG{d !FÉA!BMt}j-wsD5 W=O!m + GRyەǼڏ'��@4Ԫ2 O>?OpQe ݋K.<h< gVGxS%]mDsza~謐C\?ҏӝ;55XGx2EB7vxpI>K_|n)-<?4}45�^xgW[/O.+)_ۏDOT6[CՆU[>`p髱 ;2nBtt�C>͋<Wޘ}sO,s9u3{Mƥ5 |�iowRcY8krTr@T^a}tp^Ej ; }+Fbs*�p$ue$I>ӼlV=G%Tٺ7~ǩ`mw;�hu=w-2y"a9T <7~oDϷ.vga^J|'/<#<Tk|du<{|D˜WsE!!~%(s"Ԍgi3l+{+B%Akd "-`+`)djPƠ<ǪnaݤjYO}3l0A}noyflel:ͲYlgYϊ"+,sU%i[Q`Ue%i" rțu:N~#M7 R?WVkRnt6L=t2M&tgyY*UjjXwۻ -"lku 7(P#]`TbR|LxYn+t_ψ|_ÿ3_^ 9b!wv<ƕ__/X[յeo??^==1?ٍoُ/g:O-ߞ�}t1ǽڃQ3 v}pU3߾?qI*~o>w}nݿ9k{Z쇿L!`m�mSR@n#w}K{Ͼ WןzϷޘ)jS£}S ٝ77Dn`s.. Ԏpl>: [?|qh:ouu P>_}Z�ğ ϽY0ĬϬ|ߏͦ7w*>i" lsvY0<}9FL_3.f^1γ>'Ϝ_{p/L_Սђ}{ȧ+XB3k/v(Ǘo={tGF߱?H72W)"6dy%[nsoknMqX៸3m k.ݞ0[7vkEޞ4A2>5@l2f>Bmt-s 7O'G\}(.=m{zeEL] <wk^=s~Oܽ8"2Jo|[݆募ZKgֶN o ߺ-uj{K@z}gx~9V ,_$6o8FHD\n&?uv٥oSIBPsW5}ͣ?Ծ~ )޸|o?~;G{B"#_fيy7i :jv8)L Yޫ/ NS c+I&qNt SgO^lVkN=AG?g/D)WG]8@H|χNnl _*u9"Ҋ|[}5m tRtSo^>Yh$]z!DpN@( }ʑ]jl2SLyP;I3g/,woOG$؜fZfsVA wXZ<X]]K~uj T<کs=G6" K;ǣOoӤ ' m-׷ܢވn DF+百%uUfk�Z֊4Zi"P$]'2Kp ds{|{exzCqw=ooSݼ;8r2V5-}V礔�QRJ AvX*I[SW?0~۾#AbGWyWLHquxslD ?[+5?{f7y#wjRr<j4'߿Ɏ'VYԏW| o??6sm ~?{o(eq~f\&?t̙{nNo]ܺ2f..85CU @�[  6"�G߽ kpA}`lmgLݚ޽1kyrp3N?tH9R^c 73QÊK 6ȱl'_X^9m=Goݚ޻9 {eԼU)E/ەVnZsOMW@]^y{mƭ D#6+|+õn:;"<>{m[x_}mٽ[3D<5<9K+0}6s<8M}5צ.Yk7Gv7wV7B_i[nqnw;{zi3G'ύN]<5kp1,:dD#S?y}/?[ZN~?ttP<3{vt6Q:t`ЫVᱨe- ]O8O1?Di͠ݶ0�<O_΃۳|e-9qf8>ܘdBNAD 5HyQG"Сk/6IĬ5e6 W 3K]?skG?c?llrTn83:9<5Z;GĽW~OW|8#v=Ȧre=]]ON/=>װܼ|WǢભm G˦jo;vw٥íA-=3!4N \rs{kQDQ8ypw:6rfaAa y8�P|y_瑠6ۛH7VC^g0DE,8 ș97$ B@|i3ōj�gPV\BtZ"AhQ!<W+g/xc[F;AqRJ>]UQ'}RB{d{b셕`/?RV7BgCzB|;^^ʙ>߿;Q]}Od"HwOK\_|fmۓo|27.nnb-><brX-'+Z.$sqq�؞).(9Jym +1El'\y=:ᇾt\Q1>(Wti5YZNY |cdOVT-Em*g|m[%pwif&e{1$7[سˆAt[ AM{)st x>0o3H,W`Esqy%m&=ݨU`̰1 0(Boi"kZD�gI0JUNTZe8G�5pj T6S@pM8"P ⏠9gq=B:8KZk{2ޣlG�Ѐ\]iP~) bYj2I=(! �m,\19vwx&:8T>t��=Q3wQJ̓9zkG'Z_L{O_{xcW>ǹ#tG؟F?O_/~lNQsp-ԿoC;f?Ot_6ZOg;~7n޾uA{wfk۶lk6"V83a_Ow'T\|f3ߖl__Rw[v3}?Xe(щӣe߃,7[@Z]OW>>vᩕ֩{mk}:p;f`({N˟hDߺKs,,-'.^e^gG[˶N N =kq߻{pI}|Ǹ7|λFc_;h׮~`wO<kϾ3ZscryZ}˗aT<tZ.Iݺ:>qf{�[yfkSn]=lۿ{a{rBl+Aq}oӣk@(_Ve~~yEty5]m@fD4Nuvߞ1~?jV:)Z)ZDtI: |:7tSwR(y[x)ޏZ�bG�h Ȉ-_F|a#+k,Vﭔb*tg-)FƢ`5� �" $� mP;YǫH1*3BEMsBH;@0l€Lj(bwЈ�Zk�%oF"U ,Q )ReRtQ@"!!6M#;/oǮ&Co훓Ɨm!ߨ}v YŗjbaUfpnh}]+XhJIh$ٕ΍}o^}e-__Rg;~̇Ix^Nu_o?p86܆V`Ԣ^f. ԿGoMީ,O_{V j(ӥ[ZVEm"pǶ_;UEx?t>.CakC~[ h,ً][S om5@�?wώc�vVW33}mߛ}nB6V2 ݝ۾s !B:Ջ4l|5D=괣h/~r[ߘsˊB&X۳ޝP' ؾO~svWw؏ЋW~w[Hsd<:dVij= l|@#ߐ†en'!sy?MF3QwB?Śɳ,\>VÏߝV'X>bͰMKdϟ b~}0u=/IҜ{ZWܾ>{7Qsb!?.X?U[GD䌘OWK݀$1Do5mX gmVGwͣ !=(�!d6}ぶY.dfāqlSt!�kr ~mmk ?n/Φ_ߥ޾5/?@Z'&?}fj;jqQԋ&فdqTw'qa"Gc "ׯ|ieHk_&*6y{2�Xyh|g/B$}p.fq)?B! l4ӡFýl xy &g%Mv7!>3FZlRa9G+`c|M :LL(ft3LY  Qk$B !aUQD$"ЀTCQ  �!PJQJd(!ɁH r`VYQNrӬMlϦtei>2ת UVHZ@RDꍾd%iAաU$? R$Du1�T BQ�JD)@"H| @hB"ԕr$��(E uPW+RCI�B$ depjy F+L�g !H46kgd/  ЉPA�@@�%UR "Uv Q &HdJVTt]5\kZ_#$$ Ah jSr+Ye=՞\!j�TzÅAyP*(HB$'TDZ"/i>G<2@$DHR L$0"RDHզ]poնtJGX Ӎf~_;a~~;Y[\[el2t=nJkuqv.i AY_ a8` 'M뀸Gݜ6>$S:7C{|ZRךɕ{vd҅gg7tKo^9zEρA G<B̏p ;mg7gws_<C+7>d 8c|,+G+_Hj^x+\Xsw?mR՗_?:ߺ6֤g. m!"$8)o{+{|(o^9-*bMb�6Yfj3s `yb+\oC/܍{zpHw?g }6xC+|G&Լl) Yۘs$怗H}Ơvo_#PKOw4\"erIP8%{L^8y+t/tR({^QGDҵ7_}xtfp3 kR;ǽ#L}n޻9`i͔*Y߾Nb6?0B8�@sf@lpW[#$8ң@q%wj?~e?TpqkoGbW"ܻ5m>:\zڷR !=(XK$9ǾE[[~g\†hY@#KysG(ۓ/xLdkSOgY|~n3ĭ8E`Y իz 96tIE[׎fkǃ38>w"A10=y>�Lʗ>me_nc$XKʹcP?5d<G@"`}Ȫ.b 2]AΑx3LFxs5{w2&B-C4Wu\H)L|Z;;-&N3}9ȿʨ'D]=w�u�z-ac@kҊTUIyBElfy6˳,UY*4i"Uˈ+e*v.U&pD%4 (]QUT^m%\EUR̬*)gV0!C6]=ED tXnfg-/%D|Y֪ˣ|<U zPؓ@Ӓa/4Yj9KssQ6N|Aj 롬%h MZSY8$NlZdYY,*@HJ9r D(Du.u}5"[4k 1=7kx7/ u܌fkhaȖ;uueu64Kc|=([ ?[:n5g _jFbٴ5JIRS&53ݬOo+W9=RFy4u@p_~QDP@Lĭtv]y6m V`<Ō+_}o~,|[mf;XzwfuKq)En MfcE�Њ3_}kƈ9ӷskęK SqŠ�D~Q~;??_'d1vpCg\$2wNm~4l^{~^=|6_:gcKG1fdIp تhZ߸HgՎ:qg43g}N&ZR7z<{Ïu*wv Fq =KƞS#d&1bWs7]S�prGInw8 �|=n=>lMzt�\5}<دf,+}_scmAΎkl}#}_xwJ E˯+uxr.G{PƐA=j\m!y<#[ۦ^$ftw[\x!viM<P*0$l9%/Tj%ahF-B `93}A `ޭE `Αܢ">8mD>u=ە*R;`8XɳAOܛ>7zEK1}ӚbI^g"7/Oq Z1xq6 ߤkƌ_GurT|s3.'O.K=4}PX$*|g/<}G;.`ͳꯥOnKFI"_B: ǜ#G$$9!51LIlïb2s4v?<9-1y#K2?Ll#AbM_,<0 Y1= aIV/]l j{WV(("ϊ<,fY6ͳYMg,ϳJU(4��*9$۳5rʕmXH[c0h�@d9`6562{7]ՐLw ;>!}^YO~C~N58:_:B�lZuvYbRۦ5P1o eW.R\D4eY6fY͊|V2TyHDJ/1[K7j[Q/шxm[PΑ )4:\x2ϔ4.j#k "p{!d|.g~ 8<~ w??�Π7؟+wfybSBxǘK<?|+[B�rtPQy^{}b-v|`6W,mcr� zyXq~@|oʎAcy_?t"E Gs8­oڽ? M6O>B\�"w'}mg}a߭GM/@pVvSF!&�$ ջ Co"?[onJ+OW[Kj-v#dzC~ټS<n3?s>xս';l)FN.ٍo,R}~?fnKǝWVD9ܺwcʜ?"0KFa ospwO�r6Қ2b.C:G/9 dULBC BQwM1</JCaLs9Q(`MKЛ_o*٤/^ `ཛ߯=뽛{.dVG۾3_0}+K߹}CF<:IJ{>Vq!nyރ"ή٭ov;3\J _n!|.4] tw`xu@�tNWC "A\mۃ;ӝ{3$ n8%Wweǭ}bZs)G0α<M_e=1rgPC1! nv\>iM/aC\<3b �L'"7_{op&H6onFqD=|^$X ΍RA koƏ:kDmKט^|p9W?w6)]rGa,~NXאw o2(  R/t r8茰ZU#I$DvybxyQ "KExC&B` xa%Ag,]{sy׳Nsv#p.Hr}r[) Ivl ? D`m-?@@ B(G�QMl?Edenj.r6ͦ,f,f4˧Y1+ʬ(RF$!@&(%&D ("V,jijmy}>Θ(0G@d9`A!Ʀ~D l�4B=&Y(X{!p1MH(@ �J݋lLXnmٛk <Zs|*8R{:1E\+-�R?je|;QY,,rUUݷgEW>"EʂT)H%@)PP@vU.`Rn3"9:&؀m7+_{68_Owܲ?<;?O?{킧_X[ۍEL~_\k?O-to׾pǛ*W~/]x=散ꭷ_z,?Fۯ}y?p;WgǸQsLpa6:U~j`k۾u6N]lU+ڽOspx}}޽hZ׿챭SÅ=?ѻG[̊*E|as͛\^~c~/Bُ3{Zlǃӏ̓]Vٮ5mwl,t#\~mKn ^?{o|߷hf͗_~qWizl|P]{߇O-[2Y<򧷧d󛹭m_qx#le/lG O[W'r\u-ֻ훱]}`m:t'ܟE<ӟ/>ލt}#Yn\><ĪuUn_?Bwa޴7{swkoSGش7_<5}b<S7/线m4yUK}WzM^ޠiߣ �Y94þf [P$DZ&�{L(Tҝ;ߡVAYQ,mg2aCQETbi]ՍTh�ڔ9.^srpwfܺ՚ ?Tw;z qcF�HνVdǞYG:;EW�Zj7־$ՊU�T5KʲLB@b)@ D2TOjZW[ՑoLh\|_TܐA3Ӷ{[i٥Y_|:_P+_>_]ؾ28+-�4k~إgۚ:wW?&˘૟?xK/Ϗ:1{߼J(-5?7] F>$57/OS_93kI*�?{^ҁ,2`v_lnW^[׿<Ԫ{6)΋{/+0p`"xbm+v-"cwbg,5_?*�O?ؖJLho'o۵ujT._kg/E[}ޘarCГmqT[fCH͟p_@9Uz`1kG7zߵ?uOx:._wZ9S0=/ah;͟qBkg>z`W]n=@o818q:\TqtP|oim zv*x틟~+V:3=~vR$BsS)7=Dj+4n쐙h<Bbtci?moK{zT~}ɳ/DpE7_ik}x6WXߞ7HSwՓ.;o-}Ltk~p'[CÆ")d0lkM3 ߳(ҿ.8Q)iG8G"z僧߳Qѕ^wlF/&h{�ܟmߙ1켜7%n%""GH< ,E6 6}z #z:ǣKyr{6Nax,oNZV'D臷˳)v+GnM/=vp~x|X\ymޭ;unk3E_](OreKMTxeBL߹1>i�MgS�ݛ']xZ L놻6wS66=f <z@yRkIͳg;ǗO?2R,ݛ;7ƎtB<\&vUi�R|j�]S1q P(<uR5)F&)7N!<JQR毙] WDOQ66l|z8-*Zꗤ(t^(jPWM &ETj{:C+:juM>�tTԬkU&��$�kՏdv#�bUj.e:4[A@}l{FAchE\[/|s,եq;&$[Its(R�@y2J8bb =*\ G}t"X vfz*@DI$)%JpT]Tu_"A֪%ͷ#nqyAj8& j1Nدb;xZ^h<i}t+퓳 �E?E?fm3o}?^{ϸs6%vT%ýW^ޝS//6ސ=k{0 =ǞX^^MWSy,䨜[/3]iMDqZH@>\|`,$6=G~qߺ6gv<_SERbc̹~|ұC-~y?;a}Do#zEϯ>VWʦ8/wf/}no6Q=:.>؈?al Kiub_ՋX{9{3߷~ٵty%%<S壷^>yyJZ7a~ZյK+S]{&:UIqsovՃ+gSB3X�g?z/t !|Ɖ/g~!~sKzZ]+r=٭+sDރ�+hOs[~4y}c{2ⅧW/>qb,-ڵ٤ɯ}tͣVP СI6O ?|Z:I@)鸜!S'ھ7_~KFcOMý+|H཈l~}xHԓ$wn?;wzno5>|omg7D€�4?{wݚs9"-s'B Kb V/Q3W:$<qfx`0E"Wʦ*,:`Sѓھ;w{2>(%ɏ98xDP=e^Fh0|Nvo}/]1}R֩ 4u.rumv9̆0}}&Û>'r }K+0t lA:^`vwաFHzvqkҤqߒA\?@_CHCۍv>$W~ G<_y`sPn$0�HTH7@�AAD#"4\}ei7*RZiiҚtuvpuNruJ)"� rBV4Vڣ̑ˀTE8F"�Pu@TL(\dufsaoh5@� BAV?�Xk~ $� AU[o+mR KDBӿu(xE1!D@ Q s E�@�%PQiRDUBCuTtީh}3}1D @']%& =A bүUv֥X�PZ0�! P0@WO)e"e"$  $_ɍ`bZk"UM8gF񈽌Qb7cv<�q�~'jVcnZ\m>VB@hƁ=u'+:(_;_\vscWc[m\Wv_WXa(gX޾2_%sͽVn7kKJ1]" k:VM䰌k80mdf  BW?@DBpY.AϴՅ?\!\.&[F;2pۖV8+Bd))N�{y[Fko4=W߿/z#FcBW7я\t÷vPWH2׼PgU!l7fϓ<M�sAvtO�BH=t4  3흻?a81=Emר朝g7Bg!L8h[^~q=IҪ,2MKg$/nQo ! ؃4$q0B ~ق~nFnvd@B~!xpoA[&B7 =t)l0,rWQjRgt词,.욣SW }m/[ 1ZZlR׷7}/"S8auLMuY%ބ9Ύ8B @O%w[- "G'ϋ|i6~eL,S7mݚDQHayhm ިxHj!F !aB|a9GFaY ͩ^2TuEH[Zs T�`''ګP yFZk+"$!ݑo"Bwr="Z<Swo6;\Tzh٦_$x ӧܛܛYm'HRQdx"h5}5 mfA-q1TL�T !q`FHDՍ!HFUܜCIs }]߸ "r{~9ve*8yDL_tSĺs*-$kg�lVjo6N̞_D!�PT>3^bJգ5o*jdJ?3Y{H`Ny36r]@V7T$DS"$ P`]/0]P\NZ&W1J<͇ͯ+7.hBnfۛk& +U(S-UFy*hj8J}IT* 4�5)ҤA$HbBB )͞ZimXM-nZ'W_ux\�`C#N~A.3?ߕ g�䪟>ϓ:ayYPfKЈfp,Q\;wn+P"_J`KNpsyV{/7xjn4 >B @ qG۱![.Q/3�8BX'*6X`z:z"P(c! 2׻mFFr�#;1DiЉd>1bϪM)_rVG. Sˀs}?76��z_9>TN,rrftPd"rpn Dk(f7˝`.q\B'm[C!BL8B(jCD؁>i^:_!@g*T=bLb_8p"8r300t,H|3, }[J !!TTzN4=E{9 a.B3 @q!9B!B\'Cv9 DhC1NZ#v�y@S XW4.F-lG?%EƤȣC4_M3}$%Cx`8H`N3, @gLwv!BF�!>j"m�o\{maۍIh S<;ǻr8k B ~ó ބFf\$؈z+;<=y4-EV4���IDAT0OH0o F$hH2Cg7:D|6glH;BL_ùDgFbΑ xcu#0*UAeQZ9c> I 3lH@vȳ{9Ώc1 ?h$vHCؾ:;#g^|NջuHخ/ZLjw,K]p6`7Y\tA$Xp.h;2ƂAs{"$�yȲPv0sGH$t;N k7@h2/9ǐ>&mu~9iRg? >C(9G0nǝSo=(n\AHw��ؤ�^�L{  Nے 썤$f_nº\E#֪�BiA <$T$BB҂4!j:P7"Rzqf@ ɼMzԺ�lC"H"dǔ!0|ݜ.$@k@I @� И @ۼE'kӞ4CBC u"Hnu?�k%[Nuk~!ڛ+~WquҀD|bͿ H ۽i5r;QԸT6ZL"M&(H:&ZT f\n׼Oی8X09&O|qҴShcr`*l!b!p5},/:(%s%;*e#4nb&bWj|x_A=.^ߌ4by!.{<G9X/n(b^GD0wACpCp΃nEnΐBbaQa7k]_q [Q 5}D'3`2-Ma~ !<!$2l#ނw~ j;LC9"x0}+MT_.kZm3}&bl\Fsy͏L+s؄~C#e|DhEHbswf4Y\kuzK4]9Ԁn7=Ҵ7mؽqgs[̆B tv|wYM`k{:9D6*S?ڀ۳ͫvcCȂ:!*d loa`7c.�vݜBfh^&j6�n-[=؊`bmb96$Gr]H5afBhKSxcK!VL/Hi׌1`]6Bz>uj74(9n\>j[O# F∙erB UHxy/ٙ7hm|  Fk\C~<T�"" $D |&2CQv-I>ko m7tTĦ:WJ`_jN !jn^(R "]< zkU3CDU0*1hXL�ZW_ID @�_ (ABFdTM(DiH@Y5� jDilD$X=u�-�DUT͒$8WZc=:�^uj1^nLWsZ/ wA)*�M<?ޝj˲6s�qB#ޅARHD0Tc}9V t|Z"A$J$I$$I#*"8{?Hgq#͒w/tea7h P 6*()`\L 6_oD3zYL^ 'cWAXzh1߷HG6s[*M9[8WWrs|ġ'sG2*IEĐ;u><o%lX(r8aorS.?~S];5sw7LM]4aZg7>gSN/w-?*x+_BEk9]tS _`!}MDCK/2ٮ:!{s|6k񙿰f;^o.`@XfZ+Y5Gۥ -ɐ NcpS/j\^y`tȷHomZm/ٹ|\d/~e{ Jz[:cRdW䄽r~xH3R.%fecb֫O{/sj1RxC<:ƛjj3tz yc,}#"rLd' @|n6 / !E&Ɂ%*quƃe9^`K-"DV KĦb1_70rgKZ;`iG/=xeƁrJq\A,_\V)=Qs9*qy~%BUQNZ{?hs@爞E߿/6myQfb׃ҔvpE ;v l9g1>A'&2>֖.'r I ųmR;[gn;k .IZ&BR$Po8~TD�IEMg@D]"d[lVfD Ԉ ) FP*%@D7"!h �P*r]LG Թ&"!%8Y#O]ިƣDB&M9 @) R_!H�ҵ�AZ+tAyQJIP" �zTȋ1 ($m> AZhq$IA)T)X IT,RjMdnZ�=R`ITYQK)IBJWX7Y�"듫)Po1 BiDD!"(.#hʗHDEꕸ5)]S3Ikie" 4Cr -;z_*I^fR4H9JdZ' O!$SmN ňVu|$ yJB ((�Fzg1MA'|n{s:,>!w8v>}8eh,٩@|Sʼ> {y^V&:d_1sDHRH?~aV=:Ƀz0((=#}\0f._3&vEݮ\e.B >6sL o00a #H"D$l[P4or>tpDA9\6Ikj>M;Ʊ뮦}(!'p0k`ާF0Zr"�vCä0X%|l0XyZ@ہfBAZnl 7i`nnb#Poss>BYp ~F 8lu BADvZbc"I䧫9lOtL"veG 1!@YY9֭�8;=xCٵ9G9Y׻I'ή'Ϸvχ",.3 x~g]<< ^|z-9.9 �پk $ GHK7A9zXsݜB 9+.,G0Lba#pv5}H34ov P6ֱl b9즇={xy_l?s"A�0G\ o ކDGۜ#49s1 <y~{k.ٙ%5Qmv x! :#?5x> 1~݇vWbsd<?H$`aDf.Z gBOфhZEY&!DHZ+Ii$,,ϳ<֯ B@Do(�EQ$HY׸b*� �tQb5 AiJ 5hOԵEqSO7B)<�Ugк^VDzUqJDRes%r39֨H tI3T0(�Rk&!@$D HF@Qm F@^ܫIkŴJk-tJç�TJ ܛV\z-")] @-46t�dA&j4*Zh@@H*JM�YAXAli $!!iP@&"DnbUeR-HRM@$ %ĀH[M_qRz0bK$3(�)MZ,J(@p  &6Ъy4K?�#҇,�tkM~As~ +9a-q` m{S r­0c j �`Ҧ,"mw]e6g8`^%s4:[?ydQEr}icL`o&Q2`ֳ3v6!*b~-<M-6ŸȜIwo4bKXjP"Xzz]CN0ҐJ0w%6v 0,:+E'^!js`& bcFQjT3O([ usgr SqPa֊!,߉k6gǂ<[VegB"ĩٍ8XE*a4Yc<�=260tSD?9}aEPh'xv9-6WykFx9!Nn!C88-:^&B @Hks .4b.N9šv!B<p~u` pO crk[ف6:s 5eeX3.gY\gq8@Q`j s9gG%t<涐ey>pl�_c] Ϸv y6<}!l4yqv$<�<ZF+scs? yXx{<#r\t=4!b¢!'ww)h bM0! A|z`F ȭ8~$wk�IM_K$;G!\An-KqD").Q\|3;�h1w y`q|:l96<o$h0B]$H$A$1}a<nD`{>{y0"tDR ^c>by`:#8}j6W8ۜAhI9G6MwA#Du]y. Mbh$s0 M_G'kn0( Bxr=H0DjK3:6iϠTADA+*K](<ϳ,Mgl2E nH1L@HXVJT$@8@LʪJ `iUb Qh5Xu<T 9URPT*PK"EJAQ4iy4+ 5UTVTZV)M,iVqfkɥ,,SLx(du+YZ2Bg:׺(LBBTYV|T)XZU5u�RJEQD2P@Yʔd BB]s$КT 4&K:&@TP.z t^i]jzh)4V'#&I227Fjg8AY*+</Y>f,eT @B@)A$RkȕJ&;WePkRJ)U(J!IHEPj](URsƼ߷X-J5Sz:\[A:@˲,R�hjkF? DTeEe$TUm{KI+J]*/</,fM,ϲ(R�B)eW}W=B$IG�n[Ek�CM=HA$uiy dՖ!c[$ #X|L }>ja21Z ?¤ nh%v.͵ao,>eN,� Q/h<3,!<@!l9B\`]ΣS!&7 2Cf"pbₜ&B\-w#A6]{Wq@5']|N[.6J+/D;@B�v0" qO6 ̈mEF/v0 nCq߉-+1\44!Nsy!BSAg<`!&+9LC L7O xU(r>3.HŌ욫�! p+HB!!؉SAHxDP:-t!а<m1`Y\gqqz lG.Lr((=̚ gq �$\!jAoǸׄ6>! 3v0XQ |!~_N!~uv X߹ Pd<U $C>J` !)� 8@,oCk"$ݘ]`ɜAgHz r1@ L4") Fu8f59: x1SD=| 8`{:G'~ZL_ $X 0}^$hY\s 7̳GuP@Mg!H4M_G$h?zHB8; I:x>"$?<˝!=Fyo;" Rstu<?5As$u sT7!}p9Ȝvcȃ$v#X ��hDDեR"ʲ4RKEeU4K �H| HC@(HZQtH)R5 U "/(" DE"V7O`w29<ZH@H}YL$T�Hi*H$gsH HH&i"YVe*gZe0V k[7ü(w;:)LVO][__2;7̋2$I"hU*Қ ȅ@ !-$ P:+BHI" LEh B�su/ԥ",<2"L`T5 (ZaYE*(K ҅Tp$0ԄaA@RBD&)"D ШTJ -D"6TYYºj �dZBLS 82Bh( {5sPъ<sncRw+%K)Yx -mɈe*oр ]B$'"RdQU7M$MD$Iu>4JU6!^<~n(Aguv{MAyՕW�D�Яub9fn8,]wϭ"ι޹XW1D__A&9ˀIj8͹|# "Av19?m xB16wl<hs䎯 # u TV7Dߛ ,Kj6muነvH&>` "ĉLf_'B'+ ݈3 rC4št)kAM`/̳1Dv`3ʋ>Z <t|Bw:oF!{I < DH{뭫;-c݁xn(2 zl78OmGP`ڭ:�ܐ7ϢB,k1 jwvqLE7x~/?)MM3,<qe6g?!>/'M޹1}B6u +4 xtRDC?;Иe [^O丳ZvqkE4^e}m*5g@(w`BB=u1{f7抰0zyl^FHct> `<1ަ/Q;"v𵲸l\^-tlj>`MNa3E"h�Iz[\BO[Nq<&'[k\DP3&YZbx~'a5}Ҥ�JLiMDHZRDZi-A|HU J MT*(%)YRRrF�$@Rk6VVvᙵn-o^2$ j5*7Fmԥ"RPeVse2TQHIY@*25Lh8@2P*|F0Kj'O?\JB\N<؛)PK'vpi(z<*d@@!wj 5 HB"&B@ҤJ54+U 8HJ"A~ �HTM2Y!H)t!5%Ο<HܹWYyi 9JE4DI\MJ5S�4MH@HIվdE,i奀qYȁD@.KA Hb=(�j"J!Q`&@jHIf.s"j`K H<=x͍-1>W'{;lz4<`k4i�Mz1�Vu=�+36MȉZUALTW!!Im)d>Ԕzir]sR.,<?1b\]֜/}jYY5, .ؼm{؅웰CW{Y0+kG߽Lz.2{'}vIF/h%{ Hw=Gz1f?{T;lRTuЋzxNU!o&Jwj65P3.85Ab?ztԼzwc$pՌ[U<dk(oqE,*A Ctwt&&هoi^ât߉EH/kňܻ[NGrq=w^qٌ-<CDwO7/"pMǂxk9-nGȖ B n~GZÎiSbxO9#=~KDl,"@g WOǰRᣞ־{1{^O:[_4y(׼!rsMQ>*WqXGg"/z5ԞsKes/9GjA;"[; jVƅBDh<,Vj iҤVZV@rUf3tkP� ESM v�,] ՖL pe5YZ VdEi,4BF]"J,(),/xltTd27)u%ILeշZ7慯 07'D(5PYfy F&W7[ $JH!DK9~*3*F2M BfFkO<m7Τ B:ݥP$9KݼI8XN4B"DZYY*mMTIJc R BhETN" ae8T)g&Z@ !t}u"4)4Sg^Li*4iAHD@Q0Y(|OS<X^o. i*�,t6SrgJ,t()@" �$JD E DKsH)fZZiZi� 6^oMP<~i{ptPDiRU7iMQA�5 �Y md6D!کcG[5VZJ!SP[#k-�"Brhq]zf :G~l yna/�4R9>!?=ttl_m*^mO4llIlSOcpB:]"smV"/�E^:ez ]"Du^W3CkMiCh(n%rC ?O|NZ[!^K65Xtg˼wÝ6 fl `e E`EF08dž5}եqSC?k$8#;8ɖ{G1ol0orfY3qc0};EҲǼ$3P]Uܱ|0oh=A+6u9 %IsqpYbRu 5{/�E8[k`>j!q =oqIo/0x7yހw1{^"+!__ٸjOwog`8T 7[Ĉyr0<벉# `A;#yoC[Ax4"L_AՏ6q-/rOGLz4}�}�-ZnLŝylmphJS"T,E?$9r>ʏU<9"&BMM#m zϩ !WFR1 6m鸁9;O7OH0\!0G&E h~31)lB�؁ƭf'@#T'*ZJ)U)ҪP(J5 "Q)2kW ]RS1_Z_>sa͍3K:)gzRgDHTAB $;*޹T 5 h(H,o5+LLJk(X"hy>˲YQf6ά>zgVdRd"LG{;p<MABJ)PA2óOnza�� 5儲Eg.l~brF�=_\-VFi"l6.r%0 + fOiM7O,}`0Mho;۾7MFO$NvlTDF@I�eǀ(HVHRHCA,qg`k[gέ>uj}iu E@(rNك;;ۓÃirA, P�v#M_()Z:$ܛ>g( TkJwHL %BV[@)0u3RQ^H1B)jl����WaU6a.7^ͬ5P.(˲R�DB �Vo~ȩnغ\Sl9v eC\Zg׵Ɏsyp\AKYΚ`SM{Sw, ty^Uo~>z U׼(xt0h;}8d("gkң�9~c؝D`]'_`F3v<x!lfMlnlYDPA-]j[D6pVhIWG>�9Wo( j=VhB丆9n{.;(RO:Xl +~v90Tp!L:jgLzq(<Dvz;lC./hMgA67)B )Lr$IOg&"e:iZnk;;O'mK]"w^uv!7ݛI_Ds_w戳B y~sI9/r%aB:�SikI-uE1aT,0(e4Vpp B\6Ā`F IqGH0jgi"2q #A<G$a.*cl0}~ `;SzIh7 |gq,߂9:h ePM ڨꡝcO.rsd/7"Nq42M_DNTĜcWI=yrE@G�<EU0Yr*3IuTQ\*B �(ja<Q.H锖V=z#y@J+9@Q(t:ζ 4\ e*)LR f w� ($ eGY6!(֓o=ܙOC$�]t@ZG^ yk{6R +@p6O80[{7{;#,W7W>�5ލ׏vNx♋VONPgW^۾{`:UB)I*Qa֠JQmD.յх'b]}-SE@RA+I P�RCBJ5 @�*'=sꚲ\aL r}cӥ5qڥ'=R"b}NΕ˗vvwz~ƺi\jw20],Uъ߻v| |eMwg?#)+4=NZp24e"@)DI.GXx�� Y Hi$V?Qf"$5Unב5/I T@,QR$IQ�J)z'łٮdxG'%AշU6IZ:,p o 3 0h~&o.6v�; enQ^u=2q*3d~Vn`YYE3?nqG028 N\MU9`C0r6C#aB! HTGߊ�f\ sXwK@G84D#e!s;խ r l uߵ@"4D2Y3o&E` jy"P�rL/d\ML֣;>YByg6mƌcLW`7BBGyh 7}1n7BqP!Ԇ $}L3 bC3e>B݈:裢a<�C]nAbFlVȎ8 Ժ nBN6DHS65B:!( $%ܤoF3#{ysӡȺI t8E-iۑdO6�Cd3}$%7}l*5BBg"aS&B g " jsv v! sp;[W{bһ7;3DB!(BPA$`#b`緇QqF6Z Q[(J YG8秿-! p4Yyi!<gC8Gg1dPi96"AGaTslQٴ3H*fā<g Ɯ#)`IuE6پh8f$hF+"Yܜ"sL#slbm9= GeTZs1ؒ+8B"O^$@̔9G Wt!owM:c+h: Mtg?SHr+hMZ<9rz 3|To566 lf@eៅE(<LӄPH)d"�ʯD ο%٧M�$S]VB� �`dFB�(DHJ%Te+2�cr-2e3fjGbo _xX^9)QPj�49B%RS!ݼ{ B `0�̓7^u.H`D+(,sڿoޛ9o,n.F 8qsww?ZPtB5iH@J+5),htFbBx?�S5"X�8"5v$�ЄhP,.LkE$5pSӐV,?3N_z'6 +H9!$"hSt7޻u4OJ%%B >XW 3ےT-lV KKR 'B*M҃� JMZ+gxELX2 %3fPd5벱II2Y[0 Hi@ iU1TmRWrIc)]'#&�6Lx$\[0F#5}e]jRZ쨔+/6?#:"c'@cMMrPksVFgbj([|#)q%a7;i ! 9c }wrjcrlxmg!ĉNvT0}D<.m"$2\-*j[$!v :˜=[F !&{ͩ&fԋOlu(o;r~r ޺jCYSym1;ƶѷ:}Ζ;s,đE.lIQ[ gq `[6Zޣ"zorOg;Plx1&�ux"Mn8;)-F/QT>K+?h9f8 X!xRۭͤ>Mhsi^ls7>.~ g[Dd`<ZnAmo|ǖcnAҦ ha )J?ׇ;hzEM_[v03v~"̉};G{z<?2ո){4<^#Cs`?ĝcPM0sl~'ȣy1)ж-s<;0s<gzA(/Dʿ8y+D�1M_qgFbȚRE^YFEA I�T`zب9MH..oB44HW7䒄q>ޝGZޗwE� @RTJ@#AJD@ !�Fҩ7ZrȲTI&ږڳ9} M]`l\idphe}0XO&R y>-\]"D� ݝ{ww%,(!Bn-%CPDF2C!BRD B@+u *IK @DE@Ue&�@JuH P%q;qBРs5U0[ZJ<{;D t\fr:˵VKrhp. dKH1eYNT@E|o)RC)К�5$B7(4&MPDJ \@_FJSXb։Qxpo2�%B �-T  LiM#ɮ@O&sPJRT$MMRJ!uYjDٹwvtF&f9LFu Y, /+*\eqlWFqv|g, HMu:ؿ:1-FU{yqЈ jeX-'UcX{BވC_3dT2`/<oRִۮfoH܈49TrԶˏv&Mdυ M-$nh`*gyEs[d D&&E 85Yk; CYǹݘb_څ(Z8�.Ȕg)ka%;WbahJUXXY} 1! qB#:DW?C:YV_dS#N P2~K'cR6q\6فoF|*萩4cPKDq9no=§d'm鏝KcnOGZ. zk_B'11͞n6Q/~/rip~frs.qT|Ub4~csBOalpdcGDe_dl ? ނ{?E矁%3Չѯu>?uy.VF5zY0@\<97} / wP vTxz<7حXAdX8DR;HoJH<1;iJHjz?zU<#WHc%DEPKS]jNLMm5fs g ~ ݿD6/d.2.rDٖ�mogn"W,�hRJ*V82κ*\x> Dg"װu}'{le (zwN+"G ӹV,H$BRH)(AȲy!�M�$@ 5U;H CJJ)E4&ze-9N_xDeFG{WW߾;><rEjemx[?tf0\MN>*Ű(YV2%  ДE )R*/HiPY1 .h|$@띻Ar!!""!�&!HjTAe.#z::ȳL IHD A 4 4`4ZԤ�1`u$tP �Xm I53Kz♍&vWL'x|)_Y>tr`$6 f'\4QQU-� 4KH !iQd{tyi֚֓HX=+Qk�RJTçI -h%F �-�UU4R"@J('N=h8{tSZd@"zg<"s D4&�Dj^I=4P.IPJJ$ )E@ T'Qwj=؃q~7a8>so 7prQL8ɼIr/c?/asa)Kz\_ Ϧȱ`*DnYհ1ֽZ=uL\;Cw(20 Np#Wd".|hfwn=~>aXȱNbneZ<~>,)"CH.]G 燸O~"xmyW2Tv! ' +mIo76ξa7#n[ցmg.ʭgε[_7(h+6)Y9p l:EpHZN u BӡO -Fs{Xksv@�z:½=X8 ZB+}@_?<ٱx>OpZ|{|q?[P[i;a=:g0h;OG+s$9DrǮ|E>ca#iQޤmv�vr>{9KRO KPE#)O| blx:A#.<~ <?k=Uo`;džVsu<|Jϑڍ! s$ %mm3]'xs#_,nF9L߱'ĝ]9aKݹ9"RQ"HRD ZFF V] b.mR{w I(gɳ'� 1~_ڽ;$,pe%�"9HD"PbCH*+((Tr( FҞR)%} D�&u*RP@O|=`@+/o_ރI>S Ii޾ɓ/,6ʼngOi Z�tΔ.LHZ ҡHIy4MJp5(EPF)5P^RE^*H_kRΒY6g0BA*4M@l t � ȅ$$)VeY &YDMt^BTHBTH",TkϿ{` /^wN6=e"νW-\XU)̅ !d2,1( J$(A<3RJ:&vzxm4:؛MZiBWGDTE^]!(&|< (@C02W2%aEjer"BDz8iED0HJQQ:IDJ�sTZiѹ' / RT " tHe1ˊl8I"0QB$I"@(�FQt5HDDaPT�M++H@2R+T?10EH�nĹ7UkIՖ֎o^DCBX;=L5 ksX:RGpjßl/n4up'XnqSo~'r0SW7|Ԯ+"ڶ*6뇐P|Vi=@y0ٌ@HDp:E EJ`|x <S1Dy@m;Zn7QrjD]-gkڄ1xշ 9<䍨v" EA; 5'f ka3;sb m\v!=DVvY7)Bnw5:b7qjEF!H8;s>BȻw!^Ф& 4̜]/BzyC_pP|6qvvLG\]HGKrhE蠸s}|ʤ,(NẌ^\b7oodMݘCj[h2cڟO$9"1¢N›h $6?/z@H0QU#:BP+BZV@ h[$5_䇋}è\A[rOOtFR$Ϥ/ 6Q { B yH/㙾x]7}.]ЦoM0+D|VI5!ꘑ`Gi!O2v@M#}D!/f<7{r$"7PXhڍ`6=0/SiFHqfCHks6"BXٛwFDJD @�*Jb1!P@$&rP Ml6UPA.C2)��V3=Hg*/4$4 D bi@C�QDB4ULp*eG B)ؿo]>}`^E*DȁTl]HKg,n<g/.>f<Yge 2ј)ʋ2'=� "I% D" HSHO@H*Ihԃdb*r]dEh%VCZ*%rIL{ZJ$Ɋ�PTEBHAZQUQ^fZHY BRVFTH5W+ w�j@"̋|R'ϯ Jؽ߸nͨXK0MB+lzX7`G&vVB p,QJP4RD+R:/ А$1rw|t4IC eGZ+�ABb4+HW$B %!ey2\@u^-фP )AjI"@ MDLTY^�a p.,DP, Ub"кP:'Jr�I)!Te>(Qjb0G-z �yqyQBD&R�BD AY'e E.eG`Ϡn{$-Zd]XIqD+&I.M�٢z}.8N@ 3HV 0FR(Xfh*zbebBְ n8ZѵT/pI b(N%Iqn5b]\ުL+3D~~f0^B 6!nBx }+V?"6AL!&XABlAFHe? _yqUi !谴 .\iF3 q{q(6熣" AbD&^B@&EqQCы\w!n;B>B\L'8HXI 8 @i'BpfBSAؘ?D6bcu_v4fs$g|8wvm}Tpmv(jH^ E؞M!�! <:GfF"NDH) $?0:T+yˋGD)BZСg>FCC 䞧itNXE~H|z$ ��*΍޽Q٠>tS8`;:D<ǜ#p 1 0zlH8e|-,`x�$3y>DB-6ggx~$<ʝf6愙;OMڞS>Pq;D $;6X 8Qgq>jG>J` !fpH#sv!*z#GpM`Bk ZؤO$5O Ƚ#ArCHsl :c+P;[K3]@9qA$p0jst o_fCTDVG >l�:Ǩt9sަϋ]7Lg-)v.I)V5? q t<Zbyi v&rg9bAOQ>l:ǎH-:G;ocPfƅ1p#tn]xŜ'kNs2HBɏ9Ȝ ؍!HۍB!BbK}l 6B Ph!@ J%DF[ J$�)P# DI(@+Qj)IggYV`.&K]LX:0P`( EYer( BH@g� t,_xr}e+~y+9je0!hPvdٝV2HO>6JS;<Re:Tr2ӊd��EJF. $J2׊$ rC)TdF3HI`4!q:)t!HHT)@]ӣK$d,)K(JĀFR @BTfy)Z DJ1Ӫ\jH�PjO}6&P,6N]\<5 ܺ{wnL04IdPDi,]-dLydB J�H),.Q ЀRri %R R]bN UQB` L$@ԊfYy)- W֒dgL@暊A$ @/KjL<jH4"�I2r @ (BM .4d(E2T($CXZ DZ鬄8 ӡRhPyYʜ FBk-@"&� @.�6C^RR$QIH)͈(@hI"v2iiZ ?OhHvE5F0Kmd�11KXc0"sw.pXrz/ xF?<RnQR{ j;e#{@/0ckd͠syӦ+f/e QTtM0#iCxꐅ9{RPC^9g/ 2*hYE\q\/ttkᅮWrϞ\sAnDbqvޖ=|Q" Ϛ/=L_ԠA͙DsM_˺o~)isGXXyZH,xwŰAHZ.[o]Ad.h6zځJ1ʓgFkM%2Rce�#6\<ќͱf0aD~7/|h[tڲ6'WVw&GeQݓk*#!5ÊB<%9}8;ى;D6_ Nq:@lF,h2<v npa(B<BZY\d<:wk"ax 6AW]10n ]|@?l 6h(?[t3bCA�[@ި6Q1"cw]`̆, L)[Gf ~[|Zz?ݜH0^hT� C"J46vA{H0 "AGDn"(Rwu8YWo\#�mCJBT/gESsB�D H(5 ЀJ#�(�1ĕdp1=hq3)Y!GDD|LGy:V7VG+JO&,j6J=+$OF5&pM:|jr:ή^u@z)BwQ`�IUdOV/ooNV&Oh%YYM $C{|5dͦhVh D$plYrPhf\ 4XAV* \ͦH"]Սte-]ZNS!gL"DI*VF˔'j:P@`ZйYBK`yP0;,0 +kRCiԐЀ꓅' �) "P2yǖV6dY7KW@R !D@ư N2!RD!T>HT8l:+RIYH 6^O"5p GINTֺ,K pT8=<urTjoO.)RrJ !Uh]RAA.7FP&Ͳ]ut0ɳBkM%D  ,  MZnȵu!t NNYK'2iHL+h0EEV`Z WXN) �HzY� (2IT$ Z|2Vҋ@z|߻t>Zuj$I<ə. l! ήfA_.p� WU`? y:+kAgx� _Va7E՟cIjzjU$Lyb\7Ƭ@ֈs2bh2|lEy_᧴8BM?>RJ`@; E!!ȁ<k_fR#FOYؤr2C>bY4@U[nqq``m6X:̘2glZvyBԔlބ5>B}wC&g|8 JqlXLr-4}LE g@qaMןqڜ"yJrhIıx5.jq(ic>B7C: co]\؀X;!B9BgPXVK椟#rbL#.1!P@5D`F C# C=?u٘O tv@OF.Nz=> |h;BvyØsl^uhyG k<hNe8BX E6i c1-<:MtnY~a022T'#M97}s4 wǁ<H"oY"5c[>>ڦOr ! ~KX@6}eb `百>`h"w> Mo 4LK=rG\t $F?Z�C[|g"Y-iF! 4Ea`0$yhs <Ew$虢<>S$z:F,B" TA'.""J@UH�R)lZysKO,_8u&$9L_uxrOfHrnɋN;5X�$8-o8y[{wxj5@DD@լ7@' N0+n]?sswrH ևi -I D!@ $*o9y~J.˰*O8SVחx*X9{u`a:['V7E:�LS֞{Sxt;vVή/S޻7GxRr><uĹ Μ:5\[Ñ}8ء{'o}kh4~|'WenNٴ&복_:q5M`Axg{W3'd8/vZ�)DuR  P(3JbysٍT avT޹$,/6`$eV:HiZZK5 UJHucO,mN.|8˧%81xi뉧Njko^LϬ?ک3KZn];ߛx$Ɖ'>ʰ,a&m_I-HCҢ,"nco=~qד?{dKb{D5̗o^4&� p8pHLe6Ƥ1iD Ii �轻^U]bq?/W]M0ʢeFs~gqLJDf"g))dbR)Dl}kݫ0@k*</>LF'n[/Q`6ٓLJ={2&hٔ1 �0IH^Z~2,[F$a,'a{)':VfA9G]⃖]v.Eh]]?S]v.Eh]}Җ?ЉnDV&}B9R � B�E}e}}0d1k_>1t|rJl_zmwJ"�+`RtͧO%?"($D3މ:~Yzd2?e"ZO DP�0#D� ;''x\`nWp2 "��XzQ 6(nQ Wֆ|(�=vvwgNV! qj2"Lfl~x]W􅈐s@~:[(8x7Q<[\y<$Fly8̶_\n/cƷF}>NfY+"G ( @�$P� Bp�:=3bFA? zQBe)(PIIIY& :4cu+oG;70D�[YވnRxxx?= Y4AJOI,`tWvns%t@  ~fiwRe*Mx.3xm}7^X[!0V;;Wz}w'g=D@D?[KWV6HA,@JI<[_zim^F@(Xی/mmvͻNNOU0@! ׼rHJ烥Y1Ƅa$)/(T"˟p^VT.< `窀[#>>so- ٛ^h賱i7E< V-d]d_zjcxݶ+!+$%q|'se O4W~E#\ŷ#ݜxfAKPT.{D07xEJPs8u<i]F|@^h MuR'rl-c~f~ֵQOsxopg.yUU_BP=롶RDy5KPv_&n[I{AHs]LJrz8.6v0Mk!Q)ʤKw8kjy]tv0\ﳌߟx,=�Ȍ:]@eMkh!,?C\kYAZ4s6.u> r4쵳n Km"޿7^F7:N\!X0u;a:B겺'E"I^k [r1\CM6<|n'u~- AdM?7:\ . B \:DcuFT7XaۜTuO4ޫ|NnTeFWyA=q<PG,-UR} y~M%<A Qq~nwԈ [pX{Q}5�g5oZS7!`/P7֑ { 'XnsԶ,ayZ`ic܊ ql 5^s}ŪZXRA7E{[1_"KR�dvlNg,db+Ѱw4=&][۷!ezz2Y~މBlK,4Vęb@rBPPlbDYp$3s.#B&#81I(<ؙ)*%�rr0d 9BoG$!&L̲8yo L*JI89KմFzyÕ A NSԠEX<UL8TA7/wn<^q,OOc$a+CP@:*$e:WiYD@�P/'T0�E$Ur�@Ju6gH<RI fmu+AbHTfRRvD'O$a"[iQ##R\@F} $DY"c&fa]LNACWo~iAY q3ư7VI�(PY&t)vwPg3ݵ<Mx>&YTJ\2d' H)$|f,CnY18Iuvㅵ_ݼq7\,8N3u,܎D$ 8i"!� XQ<[4)e8O�+˿Л1c?uH:�`P~TV |�cNchXa= T6A[8ԥ0)5~.Ͻ)ZG@kt'*^ϡpW1/ s0PxSweGWl1Xze0^p'Nӎon<*F1`#T D?!:g"` ֹ=ʿ*h Ap0!56bƆu!&[Ո׊.C!U+sUT$�Mhm?WΛ:,gFMRlR#zm`׎*]G9M~ʹ2wE5$nW)1"v!GyBMB=�!QUOݰuB*b 3U_˯_t9g|*Ow'ޙ^g@!mJҷ:ƻ^%6@#)@FBҲVX;3&Qk_`/ [x#!<cMc:v2+\Pqӡhh;ܡC`R /9g%F[d"lM^DzTAK%7on%U#EbP:BAM!F+_Rg>6Hmw=QTGsZ{<8Ʈ'yC'*OI7Q~z VJ]`kOʯj',IrT#uYC@шR1:~eFO4dknܨFOٍj1-c3]j4U}d[S K{Ajq'hGU}3XZD Bq5uO4pM<ߚrNy> a8n-gxŒG8;5g} F؋6 |Ʊ!V�~x<A3k|űz Uf"fX\P8q3ҫ tRe äH5oFj4l;!փB>VR:< �(/d㻇Q V V`c'z<朇+7.Y >8=+ۗolGp lN))T TR1,)�%0b2P 1 P1P(H)DB&"C 8@"ʲt2꧳ @&rvғ}y$9:Sx@O:/LٔG�Tq, ܹr΍W6Ldovt2>Q^sDAQeY:Q+׆7_\߽Lɻ`R!FD*U2!2�c1 A I1D P8R r!ciJ�nz`R7pI%TBD*ad*UL  SJ%KbTFR ːeL*He4)H0޼qڠۃdg{Oƣbk}LD: t6.w飓wz%|ccڵK;WUqLMFp0ReJJ8G& ӳ(D+L,Mh/{t|6= :rWoBɃApRll xqG'YbGUh$*pj.󸤔ʕR*WbJI"Ȁq3CƊG�@մR2- $]a *z\̓'[>~ A$�QUL@:+_.<B2Zs[m6*uATΓ9*r)5;&u5Tj+<zs:l9T>r",qb),1oqf*lVi*{ַؖ^wEpZfh YjTzu笇%U"]nB~G1rXT-J5DpynzoJ%@o_5!2ݯ~NvTlo"iڨ%K!g {|.r΀ֱj4vId#\6oy!R",eh-Ԉkk*0bC3KW b\ؠ�2Z:2h|=\9cUd ݆#d.6>І>S�ͪOd*xBۍ0]mK,4lWd|3&$[#یVOjF=RFó39s+Ӯr?F$A`ؖll,tXUu>> k < .{a'h#8. 6|RfygU.(в`) ^܊jV>*Vx",b!~`X4 -̳?V0gٯ`x~ Ѩ$rkR}ZoD.{ ^\ˈ\|jLѰD-`�6Ar-DHI5;?Zt+/֫>W7`Ld^sgeZ xoyp8ZY[yFK/l>lu7=V@y )H*BT)�pvB HDqBg0#I*!%%M( �q1=Kן6 6Wa6=ݣd,8t3sBy`ͯ?x8Av(Rg$!4N`8uw6/e_~z uu7s)#Ϲf0聒Jsjt`r/A6w_|끜;/rkh�$)( &:({ 9@PuP)Tb@J 3MCcTq K]b H!‡)SO3F J35L,cd+9Ʋ,U$Tfi+OX@E~֥* ?R_w>N۽?zՏ\Za�@H)) j{s:%o~ ͍_v/e R0\0 21g$iuDg[ٿwwl>֋7Dk[$j[_{[GsdK;/q&lk> 8H%��K S(SH UkW)RӠ{),? Zp΅ !�`EzWݞ})OW4;|+aPI+T|݈#ȑTwPYq3Zfy58 z{kdg(^15RxQ^ZVWdž,w&<Rj{Gd?PN.{t" TuE}5n_hg*; 5AnNZ]1_m]Ii!mpJ3nG*Ep/j\o|BGGX� G "e%+xWR@9ڠBZW _үʴohTWV6/uç~˿X|+&lYl} lgAJFlTJJ1笄b-3l�mgiToE?׮\T.J__9$K7hUȋ6UhϺztikwݒAC{8p ՏotˆOLI|"GDj3U%,b0T_3@Ȃ+i*,3յJ0OQ-Z[ `0 +\>q3g<Ʈ҈o욌e4B|,T}�v R4wX[TnEL9Rey4mgP ,|0D=ڄbMKA&Bи"!Ƣ_.ѩXޥPzL>cɏ"&4zq?J]}e۵cWņc -K@c\>Uq. fKGc:EHlGhF\w 7\ r+@D0%B 8V8pƔC͓jӱ6f:q8:/yƊ\l8 .-h EWa k1z^S}f[g]kӖ#VZXk!f,?<8<߇ '*6خz>M\qO(^T6s/y?(4J`A(rU2e{?^z$$ @"kb�@^e NCF۫W@$�@ց@�Dg!FCgJJ1AB@BE�(�2$!>:=^76)Hfݻ{{fVHAϦ|*e&xGO{ y:8(V: ϒo~;o=N R<Ihui2')BB #@Ÿ['fLU||f(_ 1 rR*bBB� X$�d$E�<`+n/ I5aLsJcI΁e�x^A$Lq>d9΂0sJ0`ȸ?1O#s&8㈬-"cc/vz�$I=~ro 0Kfguk=_+dQGWp �A_)@� + Β((C`\q2>MeJ ɽӻo>Q^Y,ӓ_}_;z If"p|z(euҭ˝t{|e%t0@(`׽(@Cd&kW)c( ),gqL+Nmv&pOpT&(۳v.Ehߟmm+;Wzo\=xëOM;^_F\O!«_߽/Bv_Zn++/>7;xўs[[eϿll[^[ٺ{}.Eh]v.Em>4d b^)~& \!ʯ;U$|(I�khKBę( LGP.W* RR$ ! "ycA� z\XI4b0l c�t`%;!QF1g"B,L]X W6OFI3 HD2!!'rE)))Enmu8b<ىg#E9 *Ĵ ) !!H @YYLƔ"RRR(Q8"YN'cȒ.@ OfDLȔT%,yIfĨ睡`�Ã'GO]L&'r,���IDAT` H 1!B.cqH(c(P"CD@p ȔLO.W0 ~h<1=*|0IY*>^:sg2M3UHF  db9B�(ɉ�!D#z'p4{h,v{ZG!޺)@%iD˙�@&X2D�9C: K%C`Rf$#gIH UY²#H)C1t78=ݿwpz6U*({:[|5vpwzTA P@`yYJ*8�@i)LL_ "|w"B~&.4?*]kE0E.:Ox>`߲(*TSo*w8I�̭`VeԲڨnhEsEyf]Υqv\#Aoͬ^}侦]6^\钹Žj;|$7#[EPF"5FMEg!"% R[0qW[ͭ s,i*{R͓'˚e!yot5] D￯Xuen-UoЀ~T vckMk f TB,;V4N+ibb[[^:6[+9˚z@*3qbJ!zÇ] ]-߽ifv͸^gkkF7 "TTk0Epvzbt)w4J1϶3wZ,x~Wo7[W/l_M@C?+ Hu MIS0Mcw>hb#\t5#:lm3[0_ a+BJ\?BEs̪]͖Ck@Alor^�HQFrNJMtHH!㠂곪΁nm~2ͯ֯_7GDT,b8ƮR3ZDLAwu8ץZh3 ds{V3`P_ϯRD=nϯ(Y6i)x~c3(=ƒmܭ+s.TBBGH9!hGd< -k!C! ?B@cxX @&U#%A.F Z mmTİ�3\`>m+b"8BySu7oeK˓xqD0Cبe=[q=AK`=A*-r+fPRcIA곌Uvf g;-Qh_|'e>ZEت'(BVk �ɴGD2p!1S3E8›B(E ZthL:k]Gb 0>+reYaTA$k7H&Œh#9l�py:9"B DD1Xy8H|s.�Y |@`kYgD*�0ay �ݫwnp͍ML%,MS.8 *b "FĉSʦx43" 7R6\%1Ɍ!B1*e4õF9>L擄8 A$k!+0|l20%YFYFJd�) Ā@q̦l:c" >D+QY<R*@r 1((AG�@4>c XSi8Ir1l� KJ(D 3det|t:=Ke Aw 7w)er0)dw3ʟ~|+㓣qfb\E �RI��+&�@H�q@kkg.DN&Iʡ7 ;${Gӳt*?71P䂉S8Õ7/_5XlzNFj>"c�)E�2CP!..RĀ�Ap|E^ :nC. Ͳlt2 KZDi*GI,%t{ E$aJdP(�(5{Rȹ`R2I$I8I$MR)\3D(qDV[̫CKA֜Oys,cL8ṱ@dLԑgX2,^;liԒp'ϕ<Lg4 jY@O9*r?Gi)�Չ(eD~Z}]{?4**9"~kbo c'!.{D5ԥ2~=ɇ>X7}Ik";l8C"q=!ɩ#�[0NU1f`͚_Oƃ rεw_q=I_䂼rAD6KpeNJ5#3b-g rˆ.r\ ,=-ھܸM~t˿TY goqO>a/=~�]5%B�!~E<4�skkS|ޏb doۻԘ<ʚuȯRV b]G8!E.7BFF@?4\Qw?}` ZB6B!Сq# U&o\"+B:xa ! 7-D䧪rp993G!_'mj`89ʌn#xXm,gG06w] 0Uġ@�~ ,`YfGl�@.B\ă p@]c *b><#Q.Bys 9'7yF'eyUF!<>Ԅ W [dCT#fzRY1v-#̑6"`>s�TzH,o3(3E0 WƱn-4z86IibPEN~X:& cݍZh+ ߴ5gZx6 y `Ti>mP`SgwlGK>X\ /]Bkm^M$ho2s<Ap n[x~Mu[ ¡3&Gրfo>GwLA{`]�A9N*jƱ aRo8 9}"{;Ʈ $N`.<GJA$cCBȏ1Ȁ/esq�0HȌ@J�C�� Ec2H1�#!#,` d1bHBH,>!ebr>}82RDL)yPdDr&xN`E] Nx>L!#Q16Oi:r&:YoElW7zۗt<#g(`/�d\$P!�reDD8Z[%b� P"Y<H2S"))sL�2d @�$G   L% R$! `T @"�R)$�@Sr% PILgrt:f+_\z|8OǓ} C"8dzx 7hu} 3)KIJ|MI$Y0daD AfV GQB"J Pd2B1 `scQr|8>u$<I'N;9Ʉ("0 !J `DH  &xAr+E"$j.I�b aDQ c,ZZ2\HI�R)b,#cLH"Ei#TM;M_e#O1 BڦWfq-Sf3 ;8n|kEYDaUE6omG{L>7 r9pU P|9Dʸi`sE$׽}<_a)T?׺\_'5=iZ`5mBy\/(JWVlӌY:u0١C=5hF* i o^ - z`+ov^xu˿d] ,WWYk շLtY:˝qz}z7weTY#j@Ų F_3a!yϣۯG>$ٟ:q^KP,� ^tVx,르APy[ ޳^civg 4#zK%Adc`{\kgM\]>xo|DEUnm-6k au jp<)?u+xF7Y/Wd;X~NO"}lF+[H2ns9TdKtS Ιj#Ρ=0;<7fQ+LѯԿ(NF$:D0]' ^"Beikg9M<ߺ~O=Ak2"nWY s rXMrA$htA'Lj%y@[fQڈn8.3c9Dn3wՕ jI8CB",�DT8� u+ƕaQ/`yX� 2BB,@HL)|DfSyw�DZ["㧓,S @Cb bʈ 4}tt km>|5K8)!(1̒yFq. .\�`{O�f!0`! H)d(�.g#Y#1 "IRB SHxx?c]H<>`@D$%(^bQ|ɜ@t^;gd>!EEs.HtèqA"!QI $T1H Rb @ !�CJ$œV_B7&sI&8�S*O$Ny4^u&~P.#*Va !@$ ,2b cDJQH^EP<(F ;̂$,d'yY�!)N*���Nx/MT 67&#<ϻB YRD(U*ͤ⌡RH�B(V+�er>f3A!i:;=eLu ND3 I|>9q W �UzNy0/\)@P)!x0 C2 ϫ[I"ȷA�XhߓfiET-ġiA RW|eՖ_VmEʂp̪^ �Э!жWyE#2mnd6%S0bCNy5(ۍEg^SP'O伨*W6~),)Х 5lX)a=:|X2bd5:/aEzX Hv_|ƫE!.�!E'�/CƵED{3'YAP;EMɪg l&ޥN�bG2*@/LH[%Bͯ>kcZTzNY�n^괋5 2j`(UAɏJQA f =ӆUyDg<޶wڷtĎ]džyB`e@B kqPl>m—F mEDV7“7M4G !q48D^o%o# `V"t1B$B�mmPCCӡr4'N *7�xro=v:T^2Xy-E\kx؟`JZCa}<fxPkcVi2q@ .j|DwZ. l7D]fD>ElϷيq![F5#G@'r46vMq"M1YÆc/) rDZ>TWT_aDU_8a" HVV#5x5YlP}~Hul=b?*<%h5(!O�\Wv6 J.Q!Qttx"H]koT}>Ot`e<&շ}جUzO 5Oj%bBЧ\�;3d"DcCB=Bl"�!~g5o0m`Bh'hGR{g,'$h)ZC}`S�@)gQ",Si ;眓%@UjoB�N,P�YFJe@#2T,'A 0>?<g<0nW" ""C� @ ;)&ݷ+L pxM.ޓ4NlF"v;[^o\=.g'GgY,g_K@@P$ 8G@SD )` �$c9�Hbdg3Z vx|~6le0\]]l6Mld PT*t:P�6[i|6Lp[WַAQ&ID,0QcĀqB%8,V0՛ӧV7Õ` RG,>#RMO{lYk7_^_ٌdCxt|r P$Yյp5ba<Y`-@J%,s.U*YT쐈0챝+OώO'ٜcGti{wh�A)RJ& $�03F'DuևW׶t>r$R�R"R� +, HfH%I6ŧG4Xln vnLN49SjՍ+;8=l>K"Ay"Lm@Ϟ-B<qKDJRJ)Q@w�ͧR2-:O<ߎ գc�c˥} �Źv.EhRŋ* ׂ?rC˯Ӈ'qe>;?; zl⁻Z7$t/Eh]v.Eh|HQeA*$DP.A@dq #j7LJ2΀ @4=;;>N' qm6LD]~H1(p$DLrĦ~v؍hafWDBmuv6N4N7Z[\vP1o<`8.̓^�<oϔJ%iR"#!qTrvvv?^vLdn]^ry'OѱLs@@*Mh%:k^gI8Kn'ܽ<"$ #LA@ΑgB@!<H�Egh/~θ׋wawz^?O&#e*Icdr^]vkk9zX2 s͉`7KWǧ֥pA2\f)1X<`ȥϦ'<FA'l(m o~˺)1Mp2VGr|5vvv6 Bvƕ7֑@vd:'$H)1V|76��*d SLP!%tdvJg082L7w^عqcg8$0{2�"/0U$X ey^! Y%RHPtR,a!`W�}" p,猫yؚ{ć.5k!DY~QF(>5ʬs{lh_&X?դv#{Hk{0GÁS sQŷNFj@H{s&ZJr#U]*AŪw<x rR+7 7,,ȯV²xӋC\f~= :hQ\9>!ȍg!Xc($MFYYKK JIOg;Wz-b<;(0Qfkmk;iX!7?buXMy0GV[O|g;Lͯ~폏~Wmwxw˨>L*+frggJrcǹ0wkecՌ7Xd) z,ڏ2|2biFG zrE 5�s8ĵtTو Fme2Y^Tcq~cg`UZR𖲕sӫݨ crzf-&M"{5e)eDv])U2WBLYn]u.>l˕-&@'[~7jI0BȮ^l!r]fR"$1EΩv{-c?Zځjm"ɋݨ:tyng\#3L;T,mCi)"CMq=A�Gdؗ-Z\8Fx>W!zU-qxYϪjU};g5T,O5`!"7Q-]Pn=LZe�C74x,4v˪>ȭR{�ߢA&5n`tR9ϭ8q$gy �3I"EDD ` LLҎ�#$�xA|6>9xzU!&?9^r}g36~N�2I )  `SAMg'G<:ߍ6owݵ`u'$I:\܌ lN|ޛ0`R)#t@�̓|1�!1� 84Kf$eqF� 0 Epr|zƮ u~5HqƍK6@<?O�YN(gdom+b bh=߉._Zug,�N 8&28 "CN)ˈ2xIH\ONsu:捠3ĭ+ƎptqJͭa0�0;U788؛f1,'c59VX7_ W.o HA2V8)p 5}!:@$Kp% ŭۻFh0Yu{ҕ~"ca2O7;!^,^[Yq /\*Iγ,ɓЈGC^9Ht\ " !x4{h~jV66NNNO$v/_~:C8ƏL' v0[z�Z.yѸsCagJH""RYFJ,4˲,B e˳lVNEja8#H)ܛgMvJͣ{fohf0 bE1H-'=JM X͌Hq)1Ezgc^Sc3Uy�2NF}<qԕVCDr5PpRod$=B3rs֕oֹ=*Њ4""48jDf>@uPq=篁|&ikEӔ6({;Pt�Mhm?sf,>kY-P71H+`W 'CWX4I_ �ŏ|nx;3=oBՇ:B�ͯ'~kd OY.AbFP)CrU!GyBMB=` 1*hU>4p+Mlz#Ƌ?d|xĿ?xG =] Z߂a,L5Xb4BT&s~L~ _!!؂Vc#` okOo3+ !x^8t~F.h5XYah~i: t8PqtPe_z@;{Đ%ґ>mZ1֪"؁yN8$٢Cd-L%@Q\R匝5ڵc'l#5v.BBl E6x9`?$\|;Wouo~ TGsZF=5| ~hӉ*i|BIٺ*绞`-x>!\R6=A+]IJDFO,!DFg uc q^7&қ6&XքY-k~ fOٍ<A qx /lûgcWGY3D ڍ7ؖ6?\U <l`7dg{c,-쯻Y܂<qT Kfɞc{M'<a䖯Er#f+0S'h'.쵟/r7&]G7G+V8Z,/XLRmg'hvo:<!qsZz+reMTuנl@U@5ܿ fl 8gLHfRbȄ V�*PB`a:S$q`ݠ2puzAot?>{qm_eׇW3b1Ӈ`>I` 9 "!(%&| f'ɽd/e/t6ŭ *!�9`cgR87o=Y@1H)& P� p2 Dȹ"e~gs�Y"$"!1;K;D"7A0/l^ZO'�;=LI .�PCAYvp`mhvWֿ~N@t0r�q 3%G 28�ɑB@ JtXDBg3YΥW˗ouzzǷH <d3G1AJIѽtcn^ؽMItPt,wߚ{dDA* ͒8{x76+[/FAn}f<%%ag zWwV/]Je+Gc8F< \˿#ؘ 8 9blvyDo냛{q| fSzw8|tx6RD e4׺Vfg$.眈dƕR`RJPpb\0BEƋ*ƫ*G_IbU`$_ 9!ʵ*N.% co'@zo pI/YJff\sJη:DOa`TզuT8[8˵t~=6j9Xa4Q.UZ[߿/llVzֻ]CUvX8K͵ލz 7bͪE96/pm65Hw ?~ay6⟛XAm4v&F `h5s v7n6wROd@x>} s{" =h7sG/f`zp><YR4lKԆC-vR}oYze5Tz`LMh]z㸴\Yټ%–9c /-g|Dy25Hnv٪�k Q66C\badplM3HGdI^R{zeM˰iJ-ɝ|Kca|yyܠ�9eVɭX,Vu>>а Za쫄^EX i6 ֬.kNrг*|hI{T[ :NHyݳ)Vx"j"OS(<YnaҚhm牫8y>"&շ";ʻDEe? !cJTC٩J 3.q�R@Q:SXˆON`~1JF" Al z0;SƫwƇBt!+ft|=|G{G Sa$(Qb(4w$'K�Ƅ'a6>N=~|ot/U+e4}X `r3rB�!GFG&i։h8R3O2ϒ1<ygQf[{+Q@�5j�<SA|LDD0\ ,9K,yVw:*34?S1ƁR8=ljEBLiڋ.=L1̿� R$0NQvSp2Yݾ&!@�d(t OaN㹌:]\fYJ]%iufYea P0>Js淎Nd£jz& 3U' Y6=H \.tY %$NGp'Grr8 zA =y<ηOoa׷R N{o{hF2 D 9 !d�d:WdrPcψn ed|2y%W!v{<p 389Oyl>ET]P!�/U1i�|lTm*BTTO\1ƈ [(2 b�fYsܭXX6R $+k�ŏ]_/00Ɨ11"ϯ<F_aQ֟_"#ڝ7 ܪG(YW4Ypj"Trծ_`s*Bi.~@O=U٣ (D=:|!(fzj=8T=k,~ۆwZӚZ leֵE7`,gQU ˞a).,hHX�`ͨ rtJ,]L9ڠBZW`j)o߹{?x~> ͪ=|."T,(2RFlTQ!}Pýh(@Aӳd/ Օ|xߛ6 [{d>F9q�Kb]=: e'Mc$Bp,1*��/A/d(p>5[d#0v!8&R90Z8 ~5U+-/E̜EW"IЯ�}B6p m`#jM6BfvcS팖m*h\o욌e4BaH�*xk m*JyU<Ɔ+kc D>=dK?vWȆw(YVtMuԎ4-mIJq,F(.ѩXs5ٲ7dxx$D4" : GCm`+8 qj p#AtXbi/V}MKK>!YVhL'9@R]m n`m{ȱ�OD{`xh{vZZXx :q 5f=߆O'p \Zшb$A6 VzP2s3P^PB D<8ڱ<}|B,ee, b1(4yl0a6u FjQ}*)ԍ2( A$tcJN?>ZQ?ʝJ9!lr<JTipUT(9|0 ;~d舁da49x+i:=N|">K!=lN,ܾ7"iœtv=<|49S="$ 8( H 0d#$&<>{:{+;jw0gReqNqr8>z:=<2z  D?g3M$L)P ٙ:OgpM%$AȘJfS9h?Ac,'8gǃz풄|F39c1s=|eEC4tFd~?z4OEHCBvyt4L1%s  "*yxvz܇TvW7% ,J4=O'iyS<Ύ00@R<=x|[Gޝ& x7 l<I dLED7g|Ջ9M&y6v;]1=ӣ$v^2t2tvje= B.PfdaBt "K:G X(HfɃ(a:N $<9ţLNk;n_0&q4~hz|bP*ݫU*~hmX! R�TUbysA>`BS$#s9+"*G[ġѴZ.Q%[nb`-ACN8aq.Eh?vzOWV.uoŹh\ EӟNㅏ<7/>~њ7F~|}cAK{]v.Eh]vѾFV)%R *7;@Dq2Qi$ώDrb1Iq<NOi2L|D{&)i: �|$t_NGp0te-<>;D0�A c!�|BT,(T2lq ^s&r>̦h~z2�!gw9 ! H8}#IIRBK>O`6NG9 N8A<uN�s1xdz<_7VVRJ<;N$>;Θ찴sv$ߞOF$ Y )Id*Gj7㽧p5@p`pt.'Yj4@eSbĊCꉢ~"*%euD΀Q%qo@Uzd$,ə<ٟ̲B ^f(t:==Luiue\Y2̏G{OƓS ~ "Et,ߟ"( y7`$Kdz6եF0Г,IUMJe@PYݽdd0 xwtr8M׋,)HQW b'Iw l@`*ɔL|z|v*7A tFdzY~+CF֎-*kf0+um˔v�DdUHRJ) IDL@2 �Pg�KɸRg}^D546 �`>dM Q} v}dvMϹ..X:[mMAY vQ^n w*j!b91g\zkַ'jzi)dwPi\WeRaH\UG,=mW%X:NjiV!6OnQ侣 [[_ æ+Urݕ~_VZO}P: 3<F\n�r`||ym|VhDHRk#PektHce=42ˡn&ZYdS'hYv:{v84울[6ۀ;Vޜ{sȇ/+Rz`BC,6AΫ_򐷥t5vG:؜dHaj2PX,Ց*ne% bH-Iz-`7xyf/oAE_M&ix<_SoS}kBܧAH۫^�S 4}o{y5{pWd?<@RƮإRG?{,}K CU`}-x kR}ھ/K~༞iM[a9',I2@3mcej;l)"Y iA4uNOϙqdP|k26yTߒYdnrRb#g["H6o ֑w퀡OQCzQHr86f xx>.Y|EXP볬el�9 ʱ5啽n".B*�DRD  ^?C"�Aa&qDy8S$98*E�tޝp DA>T??<C@! CaPNӳW!0"QqsHE ȨS ʈB EwhHqeb 88)"X㝐�1b@2d dG,Kq!àFDaD <} BDDY$HJ)~zNdD 9*Y'BHQ|8Jq.!<B2ް&doc `(H0 Y: 1` 88^|`!gde0@�F2R })lǐOŹI ,FX<y"PIB"lL's.8c@$TJIzq<dx<9;# 8C.x ,βy<JOG{E!K8II"?;JXN!q0d#9>N<)eg�@ �@�T�@ �ra' d:͞܏ߟH�ƈ!p.R(cURd\I.Tf)_W -+b Sj:MAx�GƑPNV DJBQi#"cL I.PEKUN+2uŝ1n8̾S^!TGv4d-ʥ`j1= Ir�vTi ͘flΪZns!2�4N;,)GTb`nSsѻ Tkx F9vpaE 19㿚b 5!ƌrouZ-r=,_:#֏#Dso#%9> ,Vftܕm_M `a&r5\7&Mǥuf\<;Nde W:C{3A$ñdž/K2 ѣيp'tZ|_kY/R},kʀEl4T J$+~(5=~z/ lsֵǮN6�vU%P|im~! |E.˱n1jCB@hBc)<tfF{D2-|OL:TuӡCmHqIO'Fi5}*Lg!ŹB[!&cג\@z=~|,NGl ,`x�$<C .]X鄥s l=!Zk]<c 4B{R˙GR}Nè7#'BKFcg"2p3"Zbc MEH>g�J9L&2mlt۴곍vvXƱzӿ'h>hPn E|_$/0u7jq􂼍@Y@P2fNOA<5/,XUlGK>} ~.C \kk:mUjR9 , <] 5V9s*ďfo!H_s`QiX uK>P qFE8:]GTQ;n+k쪨(X  :Bȃ2}b2�eDo}lgkz @H$,1ΐb4Ipѱ&  .3Dd @ M�HH+P.!0@  'E卵1*CF~>B$#C@@bD*$@/1!1�c�C1AQ C "|%""cH dtnG$(Z;D&CI!2�AW*[ WM΄Lp!(D0%GP�$Bdd3@ND d*8T %@B0 OĀ1S2��20d9FBSW鋡#@ MQG a,bP/0B"ER@EN05�" `P</hXq� !H `7 c%�@ Z*sy9t}6ޟ'-_pUn#δ6�bi0*ȥ$HP.&մT^JP+S儠ut VVdZ2W}HOwrh "^M!h +2f<tk3e˫YWpBЋ#>q1֠vɠ !Nfv *xt/'Bo�YE![k"pɝX;+J#HXg!A7#Yy8^GhvijE+x[L_UA .B+@Dv5X-\CH][UWNYb&8iFTQ$tbŞ쉶UF,>KF+B*=`8 6�!E! S<uG*g(v=FGI zm`GpTGhӣV}  I�J5B1ѱBZ5P d7"0Zb@!@RX o8!mjp,c.]@tބ,mPBƠCfIGMs]"迎Vo1MLU؁ҙU>Ir%C3`P µ@6T#6!<bqB TX<*Km"T'B$zJW bTMup <_[jMu<F o _6#r#WBD3' !/Bn"kQ !̽Bd$FQK6΍on]$) h>JgZ\5bGUې4n<,a6ߴ,5E \lQXy`^k$9 o4&Y5|'c7Whlcq'Uw'8Sc <ߺV}h>'XJ,ZOгrh( j!&A8<<ߣ lD'V@&ϷBK#\u. WOZU>OFK<AjAyq-ENzABfLE[,dyھWB+0蝡MKx蓑گ&<([lŊQ9h 5 <IQ !2qVr*09rhr` p<+Qu 8Fa0F(?(&Q}cZ@pBFeLSH2fʜ"� 3 8 E~C�a!2 `  ~38`=h"P9pͦwaGe-r#!h'"2hQg!0I@B0d,@\P(`vrA8A~H8ǐ|`E^yPRUg9tz">`[G /RXUb/p(A s!lwC ?LJ4K4'Ii&RJݾDޝ[X=z9j qaͬ+ R(?N7::, B9[$^w'QL^h˨삕:4YiSRʹuB):F`p=+7XzVV4[/p^cr}0<CE7:lOmԫޘݭ 5UAɱ9ذRq3^m4O!ՒЄJjY^TC!cQ"VЌqA=):YDHAhV̫Fx>s# `HV=㸣Z"8< ~(uA('nbCk"?6 T>U`,vlRhUL 4`r gBlWLkb(UAɏ #g>3dc,0Sn7a!*CbB3rog>ݻ3efƥ&tĶq'$&l&Ɔ!fEC>m—F#(�#X%B!AC{R~mPMEH =xo�X"t1VIE:?mmPCfȢCV= Oʁ2Nf SjU_�/UgLҡrA-h:6f'ԉ >C" oc wj3@-<P}X!Dy-W=D|C<{R-4QdBȹJcW\܄~-st 8jT Δ+I!zU wU #8ZG0LOAM+e,6>Y:6q4[4HAh7G#7\TBƱ4{m谍#3[m f>'X:T2`ױI[ 'М*gۃE BA.9Sؾ!@yVZK!UX>'#HBJ{@bzR!kq'hGR4UPvy>_�\lT>cԍ&W53XJ9lx1}c �<ԡKKL7^#`Hb3_S5S( Z7ۡb㦔"lqnn=ɯs|lK #\Vrg23$Vn1G�`/` dpCQS8�cL-jƝ26R*)λr�("%$RJ1E\*)UbZ.ڹHe_tÖqD2aYAel 70bh$'P8vF^ A^k"6\1rRFyp&C n,j^JdKC벫TBpQtqۭǖr?j 7�rӨ=/ȗwcY0piq4g (UsfԄjoЪaYԞKdKp U|3Υx&ߢ(/`G*tԈ4n\k<q9;ifq}n_|w܉�W?c?,UhY3g(Wm#\`i3?1W,YD阂1 -Ia c;=|U4ǹi&k Zr-b^ 5cW%{#dXUkA�ѦƮpc/_li枞޶Xh{EHsZ<i!Ud%`| i>{"TakIsYnZ8EK raϨN{#EFvn8ZNM޲ 2UePyD2q4l㜽'շH diTwxc3Yʌ7Bj^,,8+uVijnr{!gB5hX_^,+J]M==`إ)_fzMVͭleg|dStnoQN?-XF(C3[Y} YCt _. lcq9"3zY,)d3 J\iXOх*3 zr?׫_:�(׷-{3.=D| 8%B(qd:=i*2g v{yіk̜qWa}p!3J76ەCСChOWl\[7Y#?]z~QC#tåU/5o2{^>5[zo2(5U[W*,(}3)0jbc9,hʮ76r~ cwGrx�Lf^j$qu{[WAX" -R-t} Vr75^5sn#?/e#</Xv'[|r!G?StO~KG|+{D{D}/N7oՌ5#` u}fG2h3�aZǦn4z6D,aZl8*ڻ5Z6Е⏶eMrc—VpȰ~Lu&?_31ګMD/nqWfZN[ո.riٱ TX"{'l\^;FYuԮp>~"ׯ]Ҙnl@ߢ'Oϝ9˵h[Ԫ^v}cKG,}t_ W㨾v/i#p!U7VzsAmEhp}m3ظ=p;n\ MA$\*CVLx0H~xO 8+}×h&ƫ_xN}yW0W4w'r=A/i9oLۋ/CSM&tZS,!{kɍ!E7P\T-Y<+[7TRjWk~7n9eMu&~ٖhOkqh8T@B$g#`);={:$L8]b|#PP)eY N$M,D y"7n= T u"~[05B+*V?>.NX~Nhxv{0 ZrӪe#oQZDovDzgcV=??BD�sӷ 1zU!ᬞs-'O|XDqv\=�ƖAkё !#fQ,\NmM%}b=Dn,:8j @rsE;W{ WԛZiKoh\\n>OPwk3r-`׎*]!C\ڋm=hj3g8 Aksƻ}jY !A5!q]zo9 W`D|lژE뛗\~gJ(Y{˫>kog}MN6Q_vHm!d#:^.4vZsЌ+.?vq 9!H=jK;q3>74XZ T}P3vRG-ٴehk+DZ6YALc0K-:d|ǶE=QBtWilg~-m\@!#4B"; l|㰖jKV-+ckCT!A\fm7d^G#,e ʮnrsnd.ID;m:[T5@ "uze3!exuHU<m-e<fc5͞ fOr'ȝccQYU[ s`s9.qb>2Ռ<mg:^T!'Bql8ĵfk)K*,Fig%P8l6Ս OXbиܽ˝6 Gd,+6hm8[$xxsSx_jʽ(g7G+VP7z-g} տ' Ϡ3P!�~xNў-?]`Wil5` lC8,�}qRI=+YvwD2oY*ԋ|QK"Kvf~m2U1WIߜ�4.{ l|!Q-?8gRJ)Y9^ ?:M44KS)3T"{=j@74|;3_0{#&9 !Msc~�`*"%k#MʬYE6 Q(Ǧ"*<n^ЪTjC#euo2CfP\2=KFdߠ/&,^y5ɀ-~.SJ1cOwT^1('W#Ĉ")- JPj)Lc嘹!1 u. o5e|D w>uKh'QWx�(ß])g0 ιrAb|+^_!vEiN3nmD#Vn[9<LcWCb`]@yŅRi&GYZA}1;o"D!B'-n ׃__~&YMqwF@ caIJXwH;OhDHk"K Zb)*A>fnIbTƱ!eHG+pS,q"K"*cAj"X h�93Y G�vee`;0%Vb"F�v%CK&I(P6vTﻹԠar6BjV՗X0MJ|tT~4ncd%k0:ml0ԯ:ƱaݓB@_8Ó2P5š$7QXsLdQK{sk r͠ȢC�[{$BHt4}=�LէuHjƱq㈕Bq$8:`eGGt^6TTAI:Ĭ'd\ۏ+p)64APc'hGt`8{,/u/̵eq]p<!ڎ+xV} XX$ gPJKyxDH1&]OpADH1u=AmgI1Tkh;OokaRq,:XRq+^FBH8V aO+h ZQ ,lcXKoTΈ 96?P -DwaJO*Zt΃ 36o3i޷[ӊ5_N!?ҹZ<Hnﲻ zZM HS\Cv=rt}c@dq$I$idi"T)EEC �sC?Vh C7TƮ' cm>u(z+)ݭ}@܍/UKpvEt}pi] mLmxb&6LWQ|BW~Z i b+l8 +Qm쪫^ jn;?;2;=An{Mem^[spm̵M+xWކWY cDgJwrt-c!JZ l oB;bFHt TҬ0k{-mP!Ft:dryzr-TWԀm**fd2zvazpJFul洑5^+@;< 6p%6{|l}e=lZ[հ旎o=(#6Hcg̣@@+i :* =$B(m)<mD4<| .-j�mgYk ^6RDiw2sr:_`Ft&ѱ鐎!j4[JĹE*_۾k?W'nh)@k2pޠC Ew ކ¾F^,- x~ ?;'9\ݠbo&DՁݶU]ߢ@\S]xIƽ.Kb"ϓ2B@>=^VفhDHt`'1 =AЋϠ*l~XņcL<A> lD2xS9j<јNrR!st"OjXM7]TD@ufO=A�!P" z=AC9<z^ t4D \>'S}f,y~ }9uOP}N�}+�^H< 'j@ ,jiJB \8ڱ<}|Bk+� �&B~l0a6u FjQ6  % ZKn9F7?|[0K53Z 缨 ܆o$ԯ76=-C0{ !W/Ĉ�@IB*|*Y9ғ u=5 LO%c^ϓ # _p"�R*%,SRJ!Tp!dovr )wXhK bY�m朜.pxhu6蜌ӷOHZ+ε`5J@DQv6JFٓwg{iQٟj칣 :%7@JJV";Ե++` V4Qtt<~wvC76컩6 3[/~de&+!�Gw'I"רǯ[YkA(⹜Qg{ ;hu3|;\Aqz6'AR1Z1su hX!!z_ CglzM$}LI~$2\\ Qr|=MN%鵓@\\hiQh="/t3"sGR, 2ؽ] +`EHI'g2-ug6T_;PSQo_v+d&'Ә\!9g72!b/ǟ[7[>g{9xqP-Ǝ8iZ[EHN=j[noÈh/O %!d;Yn2vA>EÈO('l>Œ+a.r;v_ 8G!AM֌>6]:Kcg2:"7JQ<:JOb%=1Jxpm; Dݾ#&2LΧ~Q|9ך}G[agL'RUA|ӿVn_t⹌gr|>#BTnojx9DnF+A+:]T1>G8IX !FEuyc<\39=FljIlbZKE ,+r* Do(#u8�̦,eIPJ9KNW(=;I糌y<A[~zuEÅ`iLc5I$- ڎrFz`7:\,|S9:)Yv9y׾iv,D0R4Q\&4V=]&ı}Yj@ p.lM8Kgz=[7zۢu2| t, ?+{zkhyc]U6_Jf1F7 Ybk1VK _ mY$x VYfTEKe(v٨< (Veh|SڲEQΛ 6j/r2:y7)]l*vew%O"kwo䷝&"]+s Xf�Ta̩]udo^ 93Tm4ʅ\z~>zC*�PJ"*C�*AHD(1wW6q$l_4ƮV^t?\�YRqxuL//F+_y^NOfo}􍯜RnՈ^j?�=?WOnspٛ_>*WF 1hm'Mѽɷ_8ZҏNGo٨2U,�'rs&h׻{c?pʵ/ {9~Od "W?Ooyu {g~i<S,7E}5zk^ʘgfV6Gx㕏]oǧo~vpƹyhkuc U@Ƹ<c;\=hU�[i+Oի{~mn[5bssBL{Nοy`r B?S M_iRz{gw9w^_Y7'pYw� MԽo}s7Lg`iu7[G[_7X~3Pz˴uvۧ/z1)ޣ"momV,{}V#×kzYYlZ?e&~W}7�|[v<Lrß\݈u|OS]herNb?=ҧƥkWCRu7O~,Me4p5KJi>yw<_jw��+S?sx(~QoVklѡܣ5++7�v6ֿe7FIV}k]O,`z8*O|v 0JgЭٴ<B�[75YI2{rN "1|95S>q啮:̦ٻl Γp-aIhWOub]cW`%ʥ{ WOtX݌^5{l{s\eXay}^N'oIσ_5iEF{s(42{p`ڊ5ꁺeI\ u}cUwG' ,j S'Qi};z#"[{o2yTkݍ'S'IF؜ݹf}sRӇGs42/WvUOM&�7QyJ6jNPSΣhoneB\NwRwcښir7;|:$v'þצæz$K/xr;qx40gShΕ[cW|<)?j\[R}A着;Q1(ͮ?rUJiW '›_0e~lY[$4{Vn:lF1y78uP.];c8{DU-)�,6eTMR|?c c|Q1oШn|Ҋ=}͏Q ,K3FQ)g5ի3]րs)% H�L!3I�Y&V'G]\ޔ:uW2Z/x j%֎pd4ͦ?¸B��+RJ)I2Y d "`<BeH)RYA+sGXRh8,~knu]5#, ߯o<窓(ʫ99ܩ�'}(YRb՟k;Wz nw{>y0wx Z!=?k>)lw=ε+6~TO_Z:<:I9ay �@~׮~ی-ڕ+7? W?œ4.;o|iC>S?Ք%wߘ ?W字Vn4gۇObgƯ+֥v.ww.w?ۿ[: #XK睫+7g~s/3Kzi.]}.k'=, fO85σU㿴Oo. �D^O??7{L*cyq?Wp>O䥖X_~}o?9Ë̃C1DLzBuG~!ޭ+x$_ vxr`VkDOo\__ݽ*|F'~򕛍گVV~?8Rep'tb"?Ck?3["kOOYKiAT8jx)m|@e?Kڃ~뿿/S�. ls#j29l,`D9w {rfw3"ONKl2? /d>??;ʏؾdGOo~x8++ˋtXn~ԻoÙU 6=2\~nG|5!ȍ ~`?b6/Ot#?\dyD W,j~l寏MgG>sohc;_4Œ7_>y0?y"5WV 09>x`?:<ڋuW77/�A?-<~|召ک>�9K^o.[9LǙ !3&ϷTY҃]=ʉ9ӡ/0xnǧ^^o}x6\eښ2X ?ɍK9Y ,WO}sT; ̙W8ps%r|ekaux8}4ڲqp_( %%pk?ĽÈWVsݯ'q>|uO0!;eȼlror{kOzibC#XTĊp5xkQ{78ǝ${kf`w^_kz0d@]=XY_�u!Bd.wB�p|iu2NY1v{~eO?~j#oW>qՇܵ\kp=*U.%kŧGz>\<<J#RD@fPOm_ށw` hnt7#@틢 2ݭ:BRe)Bv*XXõ'C2zB]ḙǖ2 K.r8`BQ* U\�f52m\;4[CQPZD!ϵ^mENbU%�(656ZE5oiHꜫA D8D0hU_2aLeL)EWREc�P)ՊbQm*Sbb̼o;Ӵpc75~Đ]GXE2(fJUH滂EC 8�RD@S\bK?ޱ[9%Ssb]CڦWⰋ@+6N,ݴDĤgș=BsWۯ,߿wFdC]X[zS3k [gmWzk/߹,U_uvi16_X_n_/ۦ"ᜇcwQa?vWgvë?:-3g>wiFzs~O=o&?sv}(?vՕ?*Iggվy2I䥖~S B~쇶~yNIZ@ ~׮޶}w'Љm:N=6r"oDM0 "v8W7._Oοx)4,:jk5\;_WnJgX ÝZf{"7ɽ_CE7w(GيzXNjQ zE^5\$J32U_zk/z� tpnOVKXK B|+GoSP}(Ok~7"ͯG~nwa%VOߞx鐍EU{S\N�^.-,k~Q0TG~JoGǩ={]D賟<XYLǏ,-k[g>w)OmWo 6v:PUe˫g `xo8o2L�f���IDAT7 w>{ IVFE}jg^[ڟ<>5xް5L~b/7_Za\? ^KYaE:|K`3|Nq c^y}m4+Wo~bz!Bd̂>zp_jݾgξdiEWV{jecc 0J&8ӓ 7cEAe> ufq+5<,'IxE]MĚq59{^wk *xbB5fذf~tKOo+$ Vs="PQ/\D.%kAo]Sq~mՈI<Q)%DƐ1#^<'zўs8A'2sιRJ*EZFYz2I"2@`@*�C| B-B.1 V2ƥ\d C!ŤKD/,c*Y>1VŋUklH⁲ P.;}Pԅa*W\͠]XxczٲU?^jdXr0cC�x$gϻ-6~u=|;uQQ';O޽zQ5wo_ 8~Εވ?z񳿸~[AҀ,@Y?T7oaƏߪ}G�0Hը4/˻poނ}. AȜ-(U4?wokU=6+2]mϯAџ ߪug+*x:vn/->'?zڋ=0(^ u—T�:{\lص8 bJUU{4XF"zkWfu+>fU͛. "WKf8ܯ|kvź,7l Y1y!ooqXg+c!tQ3!�9^Z{H +{t9+&BZڥ_<�yT}<D/BM`c> euDQꮉC bs`e]|o-*E[i<&ם xΗm+_B <O�H" EQZv=۽۱;&zGhW3#%J$R)z'<+?WU�HNH<˛3<b=3}FCl|{5tE^1O0]S 0) #4!{G}t�ڲ{x+,'>{qҢvo>3wjhO)Sv?~Gw=2�84Zz#; ZƐ>hAYz Jw٢[6(#73~G%=ܱsotUKZTk=6D%5}a"CL4SL)],4a@(zxF/-0su rd?ߐ}M`}nkM#8M#>Ԭ"#\I$UZw<09o{_Ic>8]tziC8<J>~Ң7=@@4U9%9zd?ߐېdh0@�L tCU0ihʦwH3ӕ>/q]8RZ8 $,l'X%Y7$YtG)7BR8&4(Я2~`(mB 5dSт @$@!! pf[)z~LBAb8z!$i c`R$ kI=<HOɗ$S  $N$2E| A�`۶mF#|?`1 !Zepp.<[[]s.��u]9":RZa@D1 kmoA;^"Ƨ껌�Jvlkv~deYY �9x﹞\}9 ;�p0Qt�L= GIܤCrX+7)PXcxjz^J:偑_oWLPnݵ{0@xoȃzJ8*; 1ğ}cE][ke[gf_'v/Xɥ5<K&ԑIb c;}b{/y7=vցDbD1دy;h5w5+B-+�_3;'ɢV>`¿;x9t˽O^dIfHsÏ®>;TXiϝ2%K.[>T7>4H fh]i  *3F˟Wec'vtH8D#}<޵f"<ΑjRk;Z۔@1%S&hrzϣS}~ř~Rgllc'0)P$7AǎuP1!#|9pu'H>؎.ivŊֶ4v {;oo ݔ،/~�HC?+ߟ?f20w=2YLb }t1hM0[SNC&RF$Պwlzݭ=�gWP P]w?Įͺ$f|`ƻF V*)Y}h%$Mxh}KxHu^C^d$=r믘f)QC.'ղ'CN?Z= lGMw_srꐖĖ`Xڑy%iEQi#C'>8}t#+71uٹG!۸q܉D% pxpj[!i*W79Rx^v 48@"jn`rhʀ�^3xcջ;\ȧko߰ZYn%]d[4f>6`8P5Lu.WqqH=tGBH 2Y__5epL6#g¤pCrb"$JB6{ $uܜ8^eBuMHX)ogj] 2#<UQ\ТB2OYSs4KDvY}@v7G_�9 Dp"2".x).�Jo!gXsԜe7WqrMot,ǵU%>{fd_O]8c`YaVA{OP]MR%F.s~u|A$#fl,p=3?!TJ|)O$2v%R_?X G(0L3O˾blv74LUuk|;T'0Tpc_s+:'~g ~RKt烓7I>fF>R~?Cp}gw*LBj9lRl]ڹKRhoR}^^?_rztbƥ}]<x~,MoɹYܓ7' 'DvRb#œ GvW&BVlߑ][fYvdk@ `'2w>2ӿyxvꍜ3]^ǐ0(rvi%0 ]ԿfW"�5ik.I;GJ9[wі"~HR|xBcAűm` IŕrO\[vgoYn}-?]w}MCNz8g*쇟#YM!Hc er7+>t$s{dYx}{qERl%~Wb_񁄲8BSwyde36Ofĕ f4:Y1:==f}jݾrIn|oQo~tfM?zlr}W�Ml33Wi9n<AyƬOYHD >2_bR)w§UofRc\D I%rX¥!uVpھ_m)1L,YẀGc]rs.'S˜XoN֔1-)kk{L5hSN9vr}Yk{,Q|=_Ƙm[ŅD$bryA_*m,*Wam.8"r۰ʶ�1ڀturG}rGshR�~%"ApA&0&#۪NJ,#  2 p.<w]uy !ce%W(R33~ FR]yHja?No,ʿ%��y__od| S+݂}9JBۇox; ~wO 3 ǧ]?teφDHˠKkmҍwcSxfWqf{_ B SE>;G'(-{0պh|g[ I79cNf~ryQɬdD-ljuQU83odLټ;ײ;QD {;/v_wpƊl:p `iT4* `dom7G }[u&Y|O65hyo'Z3™ܙ?Bl}_%2�GG77-^v}C3{{73?ey5j +zeX)�о#79vž̤{?[Oa6ev ޖp$m&l_W2wfdh<Bsڛjs4;4+C%cm&G&*73.z��FЗ]2.6t^skyY1I*Mw_BG܅ݖJskhGBonyTo:7>l JbwspwQ䠺S9{S[46j(ϴ3D)ĉil7FUL@ <=? $f_~j9ih*=s OPwտ0} $H )hS oW+1(Wgv9&lvYĬM 3)ˈED ca$Gcvl(HJGeKe�A޶,"N%1<^ٳ&q&vnq?8! wA `բa"�"T?#"!  !X ܮv]7!mQI8x 9Z1z~B~Ц*"Hߜ�hQ�=cB‰DYo-x{}1O^ft8AU$W@ >{' \o:̖V==hJvXxоjDbqIS9fs'3/Z[q[>c4\79j{YYvZۘur쑫V8w3>U9"O =w_|iQ@ πxfne[@]><^7_dUg4wξXB;]6:06ƣ /eG^ ]TzcvUk6$Z@cBvW̮xAPx@fH/B �%Z@OƁm*UUn l ]uL)PG4iֻtOrg t67A"^*$wcAH(u;z#$ ||z[vZv~@/g�JZHk=>{LG�JkZ L*E.5 J(j^.v*wp k-]8)�Ln#Z_qTB:pvy*= |]v>ƀ36Y1}r: $4"=/%; �1XUY%8myn}%1)ۆ>yUO17a;Ԍ a i )%9jMaֆ-J̱ n ʤO@lo6n.IBR}B)zv\/I뾂+ǜJJe릻&odE-7h`|pn&/2O36@ʴADAg!0V -~t* uD&_ҰK8`M9ı%H)K0}K8i%vD0)=*]`kN0d"DrxC6J<ڡrE 1VXt!$I%9FHT5N#r G3"a^u$"USGs&f&$RiUA$I}W lHY}Tg&TܓݾT* e" 4^6vl^ ԪUjFny^Xhtݮ![WJ'玉ᶡ4Gǚ Bp:|0 �� !* %";NjvûJ?5-Dw&")ݎiw]73)|PT!+2a .GO&c*=Jm2?i*RӮFjQWFM_}Y<Zxsg;^'<�FE?r;^f#CuWv⅓/@C?rNj=v ?bO]8FSUZO꾞 k/,;>{5w#8!u5.TF*R@> Gۭu'f1|vTA$ A?7ϝh@3ڹ12QZY x#Ļ^m8_X8۾x=7=C㥙{joO:{tU+֯$GuP_azh\o̟?Ze66Y7=fW8{䉝;'*OЍ9@Ჯ=.vK79txOb͕%v-+gnj. �3r{IƱ^LVê`kic0}{sݍl'gSӻk*~?5*5RMwbɭ1?w]*[oぉD˫O}as5#~sJ&e! 1{Kl|gw}N69 G RS 22�"ѫ*4/UZ l暷8]TkDy|WN|L |p5<]mop^{О<M2xX1CGvwqCN_ gcȫjZ\NmKKsnb;GzB_~z!]&)$p+qЗMnsZ[./tۛhih"ۿ첞DMP\_.i.K{d<4V<{&6VmM2ԏQ |iei�&vTch"�,/t4mo�PʍwF|%r6&2'@^*y탈`FknR.ix|( e|ZV`\pF&9onl+��å}v-:ԣtgWA_dȴܥ$^ E'閔Sf}`g}jg[8~WZ;6嶱G3Vox.__֗]�hGJ! OUQ�mp{Tukk~CcC͂&[FsF*OM}͞鴂 UwclhHyrg0h bzns\[ �pJ9JCjqɝ֦?{|)K0Kv6|Mg`1,v7D~fI%`o(aK:-A'he0հL.{\^'g" f8)K`7ÓB֧; ͺ |=~o8t=?1(0DEB0iF I�lTkٺ+LJ }2p 2 ILJQљBb'W8v*$mm!ՙ` Fm6w ۏ߯d^}"[fJ; f8ĉ1VK%<˲Hh�p!XJ_X\,ȿJLanqcag!Dt,+eْ\W�`)a��vRqD�'eɦⲯ8c̶NZJs {H�>StڞN0H()eE^tLK/@;ot!53 kx8XH7?=t՝D/?{ eןYO# zA=L93롊/ޱ^0mŧV +-g X8۝"|~82FP0-!#{wzu( ?Οԧ3oiMZ$`n;7{q}{S{ l㉙B:) Mz] l@$Ak VeO";%v?Zezftrݢ,%^{16ok*8+.ζf;Ň>1]p͉97 ZAcف /9!7V|u<_W]?oXo+,͈?'UM!Kok_߼|n;?8LD趶QO.F?v[/?t}:uT`y~rWz Nv%T6v;:v9�]V/v2[?򜛻o_!Ԯ?p~v῜ |3\O7kw2kĕ S_+U—~_qVF,s\S>h}Ϯ+5vGn߮8eЀ`tr=B˿m(5O.iWkG@rQ2t]<4EukȇdzN+xK|_ `ڊ'vIuK[X R6-eϘjA76f�To:=> ?%3̞wEG_Y{EA+;*;nxx+-KP:^F Νl@]'"Ϟ ɿ.#zg}_8Z<>Ϸz+.n,; ݬ?)і="W) %? LNڒl</u/zБ[ 6khf]ӡ ߰ʂ+ p:++k75V�GdXϤON͇3TZ~3n=yDu2UT2t\^zzaB7":Y`foȜ}b^+kNo#J��@pjfo~ 1zp<4Z^[v3{?y[o{\,<ڊ;{| ��W[ 475>>N7_:f7LL=1{l# l+ E�ju{윽 .owB<O5R)Y5w5[Oic;: vd>]a|� p'%cOLC1g2=6ESdpY$`5|PBe*2RIRrf X^gǀqcJ)H/?(/MZ@OLYc1}٨Hwm=eOU[hYBR*-(9 RgN.[~#BZg!?(wJNu,W*[K@T"ZǿVL9*E0B:z8?А$&cꃘjţ s/*wGK&JFHfh3ٌh՚UUł h;�2G"D_]ʰy@@ 0C] 8$0ؖm\uʥrpu�QD?9,2v& ی9iC&,�!d2Ɛ� w9ޙ&?F,)|y\;{2]{́*1FeleG407>ج5JvAE�<0cן]_Y<ݑJS  )1?:7kn'~eszxOϞS1-)X^"�=O}տ3(b$Zn �zG{|Yt(Jbo"(DȳX+Hsa>֋e=ɝ]RHG ��?9+BR-=Lݵ7 M=4JEISM3,AmK] mRJ:kYx/YF�˂3m!~wu57S_[m*䓐9oA & rLIVM `P @t]x y|&I*,/Ajg|| 珿uꍭɝE^$$BH^[兮zw3g5Sl}/X1{4aɓU_ٗMƚW >_(NM@)`DaV\S6_O ॹW>7iĘm{˭�###ϧBt:?D1x.m=(("ts;w< {&coNჇJ~G/Ϯ, r=y//t}_oR O_{~G/ζ^=)a oE8=#܎ @UsS5>ڳ+H#IpVkсV36U)nr}K[| )bZ_둢9G_Y [{pݮΗ?{^g.\h+'!OÅ޼ϚmuPv̥KF8P�miT<oyNi|SF\@|ks+.f,}y>`9oT=1Lnz']K@kߘC;Zl: JSZ?J黔nn1[n $kk'^[O̚s<_pzյim"?"=yԖ" )L/ S ^ژq+xafr= `(LYs/;Vt6}mt#3Hn ?G+=UԾ/^}fimٍ> t� ^{nyAo1Ҋ1N/Xs_}fE"~{k7|Wwk-3jNxs2+8a}Q@Fdd1&gPWz{,)h Wl |0š.DQe(b}|hi=4 Je>J8&,AH"Dl!1bƀI)$8[n<Ht: @Yi ѓ>aԪg=\5uYLZrJ8Jo SJ-L˜nq�%\}TZ_jˣaN#2h]z0CQ�~ sP4ݍ-Sg`7 �!jq%" [* B-P""` ldqG;MFxàRKHHH! AȌ߀Y �!  dHHb  P  Bx@�_"5:F;ƌjt2r57t:SD<�Dт3 >�1vPۣSY՝w ?r0 fa `1áqX�E_&d>1r\t mE i�O!(rNrjc\T67ܥE^gƒ0 $l R;.q9pWc Х/WrUDJH%a >x/^'boo/ !|3Sc,D?ɇ/mqv$&%'H%cYa< CgIn%5gaDz2ӟBpOw~xN~h;q=R~_}֕I껗n~Nt$'nO峓~igssoQpkϭupdTSpoˬmD9Ypcx'2{Gjܐ@ϧ.=C__g/̶nZ(00%d;sDAnhc<}}G&{4M_zF!B'g?Jmޭ2{xH;/ə&ϕ];EJ^a>;zkϮ~WxCV? "$:K).gEW-+=[:w۹w *�_;{bnI_]+T/ |i@-ooR ˡgZ+՞㯮Z݊ q1{|s×ctr|c+k}fxx;gӋ[A&gjz H^~MorMUj=Jr.B<|1#{/?u)0 8LML0޳Z'y.E?ݫM;UJWGA\OVDD(" yp\](!*OC0L>0]XYZ-d(%% n.v論CMT |w9 FူP0$d� &F�!�aa�X@V  �Q83Q8  #@  <r r�P   !@ ĩ$&aQG $~\0�@0"FH0L1"$DrPB(_+% `9q/ц3\۸<P꡻;TcVs[]KVV*De6!Db@ B"@KPg˙ 9`$l�dEөZۥE宔<<}##}ibp&~y*e@�8q�A\0H0~ ?yZ PbTC^%\@b>D|u+\FqRdYq77;m �6bfe * -",ch̲1$ h3{M#lC!#q)IJUѭ& $((;ʳMBN_ o .T:Zpbh Ή\-#Q1dG_x弧82�a%JM�K_NvmsgD{PO'WAO"Gƚ~>qu89+-C!E{bh02�F˻?4B3o BÎuIGw )w@2)CWbnG_xϼRɒ%pZ*q셣 %JAVf[ >wݒW$MӗWeٸچ*PG˻䱿]=08튋�Zq̺Keֶ 0W4Fi+X_B.ui2=cYDHvR"'TYC<YL\i̷7V6oB%ZF< 6Z~c1s'ZF>~ZEIL&]VWO!u^;ҟ?.p.󥹋g{Hx`r M=d}�ʽÉE\v"Z1ЅFA7iu} 'T=ruE"_P„B DkWGa}} aBBϝ| A2CZoZ(?3=:6|nvmXi \ew`$BD;@HpDqqҋI:%T?AK9oz*IRJTwTOr}ịeAFyLjVR^?lckDtؖIKhxO,@Q$Ws9$c>l$XZ>%BRH&.GzfFS\7mFIϟo=ְMI 5"ŽEOK6DGf cRᤕdЖWiqH}*Jѕ5�h 8;MkLrBD?"BLSl{+0Aߘ.ܬ&δ&-bD?J. �Nm-!H`jp<ʪH_&U Mʘ54�Y�`;Xٓ[ĥEa�ɍ<BXoZp7ϷDtBw+Db.򤞟p4L>rc6hKA&{4-W#2!*QSz>d[1kXo JևX#sڔ4?XZJG(Bb|_A !f!AHd˫:Gg >ZҖ -A0,AIcuhV%s|+z3 hnG0'TnR>@ת_ p\`@vې B"<SCG/0.e7FY`qV%P GHٮ: YHE1 00^M2gV8'1mXq.(ܹ(nˉg1JXjYx>sfx#7� `alY '(E?‚E UaxFDш)¦1p!!C yTƮ#Ye0۹Ɛ,Ƭg/q!8"@ a 1!EePKDGUѦ y ˦Z.&oN*5D& $\&i_'K}2@lWL2>~ߎ$!g | 0Gbe#0ΣyZV_G$Q,( oW.-t=  ;0Ʈ -pBiz,u8h\!JB$<p}?VVD_[{PixIw>I隔n} g FhtW&;ݑ&yn|պ==Sd_8繺L&]ϟ/p" I4E?|z9jд|_\-+?X%#Qz8?0T2}4zjL_)D3Хm}qخkj4a+- # Rт]Uks^"CNf&��.\8득_ d#G>1/i9z#h4G8MR9+:‹ך= %KUc}1eB!۩PW݋$-|LڳbŧV$԰ilHts饂ܧaC9Al=rG}ce-oCݦ !_+8^҅3oBoDHlfl"H*"�@}<rvm(ch.lTּ )pL4١Z%ϯj5='+(INw f"$zxaq!:oRM wri芐 v0M^#O B^&t~xK*B P;L~ع(CtStg1-\hoz,v\tu$�puD LU6rC 6ܾ{꺰ձQ@;n'H".vus Y\F\Ov1Z"lНz>%Y_>@v +B޹mgf! Wra!2.9,խ ?>05 !^8{b`G&iUY$EPt̏Lvk@,/\hAE{fB�g`#!c7<F4:-_a?<VNiىST\tu($y m^.-`}82^)8 N'%C <ZF&*!BH!]mQ;}67$A.@7J8kfZH %H3@S i`iT'"w>%C*.;2-A֗8;K0zn( 6eP1)BDH D1!YT.BPE):�X) w1I6p7]$n,_A{ $Gs|DDZ)L7O{22-"C}B׳*/]�Il@I8~w) n8T#�AJ`WT4&kCCF \/ólbQ ø( r=<9P r &@A 1N, �b1L :#h!XHffbF0"#b'�$D0LF#q ?<`:Ȱ72 u? @��a4 {8+ @Q8Q>&#�EAZB$ Fr.H@Buۜ *jJ`9Pp)Y̲s2BA�!$ �<}<sEE ] .H�":]Wk]l+P`e\.<�P x\V},}=Ay<3@!8 ABsrN~9;KP1lmU^4x& udb1l7M鱨d&P ^S�Wo/yUvuM-5;1�khIO~+OS6V!-w3;{r]͛eP>W0TL}V;vZ[Zb/^aB{}Ӕi6s$6K<,NK{"1 |WZ,x P5f\Y GRC}Zk[AڻiRqύSWm"NJ�8rw׾'&6Jĺ,>-fF#xMzAfkrr M>T65*3֋#Q" Ine{0'|Ap2dҳ%|KV;82^6Te2oz;MY4Y*1],x3=UZ?< V;[&اwW._߼~yAcʑxЮEYɘrFı^s7xrҞYp~}Eb\1׾I1 )q.F6w?@Sr:�:Ƌ]B7d}jQƪnYՎ3k)l)xDjIQ|rD)jnƬ D=fEՉܒՂd=_oȓMc%g*1* T<\_qTzp flXBəΟ҅HI!kٖ҅6"@@ԑ+K Eap++{uPRjf̙-i qWv{cSEaSog DY;[=<QmKdX 7s{ G+,Am:D .^溧 !8.j.6 R9/͵;-?י^x-h<8R6t[ O9}R1?UT#+M 0|אWve8BL`>*ܹ\/mrr6V`L0tIRY_FIJDlޖ<6hUiy.U`  '` `)iOLjYzQY+aFAMOL$ ϱ֧]8^BH:qZdIM=$wyBǖԆm ׌`Z %y2 sF{LY9])Ep"Q>MKx&{yS1 Rt+0V Kuf,NT.ﺾ΋( ~ChGKTN; l@ 5V*h1.' 8�-�Fl&,K،L(,$0D91_`oL  +jp!g38K9q�8?(ΐ - U !<8܁2PX,uy �(:F�pX@STf0yhxaڽn=< �0p j,xrz8CbLf'``a`WC�S�( �HuWI  }? H3fvDEO"(�n&]JRЖ5,b٥!7R1RE^_l5r{u-_EH d5>_A>x +^pC翽 %SP/Z/AG_Y_\@v۫o$GJgx($O}i·&<q( -W6mmB c%*Z/rnm`mfScБ@hw=s3/rX&,RMT41Ƽ﹦h5﯃mˏ5OW=Le�~km w>Z\9e 2y3#TkL%rs{AKy~{-Ѱ Д&Sz$@#l;>FiT=\y}S 5և@t,r2rY~e jk)5+lڍf:0X|4;<_}vU oݹG? Cw4I/CN^P!FU?xJ}#oS5ɎZzD䙴/T!>DrR1$BV"Tx曋 C uhcŧ 9<Z[vɚOPvYTU :ց 1<|k' lpHff+K*p},&,>jA^^_DR1h|�Z \*ܐh$ݏL-]/Y K*.! o+<67Ed94O՞c`}ZZ!"ܠ6V<N Nny+1",\]?t ll;ג+'(ä֟f (}O;"*Hn٭EW/uHai"$;JJC8i`"D!ǍN\F+&hOc;DHc鶃stɒQ$77^6uxk 暷4Fo(_<$)d9LnDums~ƔikKǬ>CkʟBl(MӃD{gwݡY`p2j[ }j3bGB�Q�v�4!-8+` ++֗l0C8GHbyucV_t|G_6x p{BINOnR 9I \#p1Siu氵_PZʬ<DҫDEΔM_3`%H LV `l @0"ɩ( N8e-X� *ͭM V @o� bټT#b̆R*Ur7rd"QCX Z`EOrF(0 L,|EePXH (/ �$2EG$ Q/Lq1��",<A�2 S !B7 �Yr c$.ŀ,@@-<&8 _D@ 1 bM%Qxh &k �ªakx8"[[ns�@.XvHOa6 $ $*Rr1)J&LoUz;A5xm2d�Z褚td+Qut$^J~d\1@-oq}ȥ<Gʕ:/w>(Jd~>;koaXxtT)C͡V_-xpf;q#;vgS3KFmպ]>1vsK9_|jƊƀͼgSˁK0<߽_8SĈv|q='\msl~č{\ߵAB᎑rN¹ls&nD=S3\cޝjG|^q).B?amu;|;{he?[P#'?ٺxUp@Hu:Ƌ?Z\CKt\Yt~R6>a|:{YD/�yڵed-A"i ֹ1XTUzGcSYL=ϸ-@N44m˨-wcͻ[f}Ż_ Jgvn$GDHtUJ?^ah? \ g9uˮP`�30Vu� ] ZP ÕƤeVJdmĢ?A@qA(H0 ~@ Xx/0ځV$�BPXoB{X0 B g[0 FŠb)^(D!$â ʧGGi@Ho2v:=f&mڤbc1d,<X4TNI&,A$ aD"J-*Q*-Kuie}TRnZN 6ֽs׺m`Y6C+Qxxd1@ `axv&"]4~H9B^cms@F+ɾo󫴒J@LTdD_C%pɲ$=C21N]YZC58-Th_@0?<W]gs2Ph?V (ɦụ1�Qx\9uOq5C{+@3/O~ڃomVW~XU|ƪj;ʵTE!�+ lXXFd<"sdt'Np.T[q9\ œ_Cȝ%KqW WI;Jc}BiO둫2!PO"p;3eF.gN!Deu}[ku\kZ[@c6Br?\{cQu\^brU"NUwEžg(3Zy57|( T?R}koNu<ײK(THazj�@&B I˜pem( q#' \ܵ�ŭ uH' hzyB/}z#8V@r z"=b({|h(ĺ,% udI '<4YgiJ_{)`J^ޯfkTH(Q?­ 찔I1O !pDTz$削#bi*Fd|_@OvO<XY*KF#�1oxP>)=YpA dd rDB@Aal<0~/z녿d"Du&,=n lA^Sz#2DѿQkS(6r(tWe1Y?9 [;0ry [NH T�R*%h�|s4[Pczw8/QһXIPSQgCI*BXviS Է1HXI-.dsőd} 'X1WKt([[;t֗ºO)'-|ha$BSN!D.*MI((�w"A21z~W&5?'91a9섻 v3zHO %ǸJ n1B llkze1!if xŕ|Oi2 ^ĄUJ.լ85l;SPS @|HN \odstǐDt̆Ra%&AjuB[nQW�Z) )&-ȉ DB,(,m;  G�1Ds6wgQ#iBA6;C9$�@ rD jaQa HhC'*1*o-k/?\ys.�} -7UD# <a[B=(jO&U&py--۱K]i7櫋or3WV\rV.UH|"7+/��Xxd _1bG !8a/h<4c,(+mg)~`R>iXQfs ?4\ڃcLL!ï6|;R"U))ʢxwXɅs]MS&yZh,uCf%�PPlT%AhVN5F=DQ̾=ڵ[XPBf xʒkÃ8$Ֆ,2�eǙ(CJNխD['^7\ܾtGm�@g<vjK5w؍J7qWL6iS_{| ՟*wV$U9++6r۹I6& >:g_8-p bi/b2J ʙ7[:BH$Bz_> :/s0qp+cЍApģ~(huzSףRJ5R7KD*1`CKD)cJG=EO\ɿ?RٺcOkoJQ>DSRW8#d:sI jN]s6S|CG!`5_:ڲ Wi<5ܱ An\2; fi=P�"w9701PFۨ#Wˑ~jbz=; E:qk o$erWfXefx{kBy)3]Hh \=z�ie>L{2Ly Dp ^�x^%hor-LlvIsqE n^@ ![thn ʖd}O<<+N ]'`RShNtشLwQζ<hZt&HrƭZ/aB#e B *f} V1'X_|6:*@_ac 0!"MIH35ݭ<.J: 暰$rTlMI69nR _A1B� l깪 F47:<3a.} >O}f 1+| 3^Lnm 3<G":9 ,rvQ*Umg TGFnqaMD0Pyd9<UrXKh]JݱL`ؽ7R$ aN0Fq7@`9 * D yAa` A�p ΐ# Q2 HX$,8Rt' ׇ�$ \@o�qPpS&QP a6 ؖXe +-_\~SKn'�;kk*(4ga sD3)"UǪ:%̉^[xo̟ouZiD |xD>QcA2d%2\9 ;9{}]=. ƢCY(H0,ڎ;ǁr}kĜ`D-m:7^f7Jizno[_ҵ= ԛxb&t0 Vcj=br*]H];RyⅎlNhyɝ�F.p9[Aʹ< -n dBܔAh5m�ŋEkM+V5f~,C*|% W s\?>hZk؏~jgdb6"%OR) Vr{QG@=d^BVW);�JΡy7BQ8K)Ya"Upy| Dȩ7?lm a|`ꣿS 5Xʣ4v*ruZ9, aG<G< _Y)9 ; h>tH!1D#{Qw|2U,Pvu Rʟ �*5W=EgYɃ`S5RвpNf3[c [_w{|;b3!TLOy $%H+a!*Z,~vR38N ֦P r9|aij)X5U9ڥ܇x.ONAhrs3>z~,�$[!O% &nyAiPGKdZ3EnAԜIB ^kZU&B@CG@o<ee Ezɤ% ǂHgyM �D�bپz(p*�f me7g IA3b)ā&4TK 5|%Z/$4S�ҋ0h~bfopԌYؔ�vpEXX_"N| hIa[O ED^}3 ZfDO"$OCͨ|zYL KM8Ҝ9"`T`"D)ˇ&3f7Ԣ&܌h"DW!=R/JpJU+,ݴw6wTlN~t&'`TDqƆƪ#S� `8u 8N"ּPX(lm& "BQ㳶omVgn~�@�BU.PX+lđxXJ᭜0 "AhШT1@ }P@#aAXq' \ q B#z>b@aDHs, +0 շUTmqLkp쉕sY7ܽ>H 8q.ќ#'Yemr M?8}BT` @a-нpfc:qlc7,Ve v�_@%E&a|8`X̀, �\w=RR` #Cb2<m??i+PSO{9po@TfhH} R=Sd&:d^5XϣD%5mgW+N劕JdD-ˆ_9J�xknC=U//2(hAKʈSG\/a܎!S|=N&B)($ )#lƪZpKWΎ5l JZz0f{2*WYCDWRWʎޏRZl$xU#[j '$kb"5׸X 鉽}Lu`Hv_\(4ڢ,|!,<­\t'L"$s?O^bCss8pڸ-mݨToxS3SW׺@ xg>Qgvf'|aBWjB< 7|Kg'\ !@3)#$0bA\CoںR-{C-!:K u(9r9ĎڝKF)dC:_zy6P`󣿰wtL :6T$߈vU"3'^/ʔ'γ</H(NN` $9 A͂^Rz~єE `@޺>h a_r %ӫ<5@JTZ\% I!%]P"^Y))>rJV!f! b,QnF:3F 8?O\LhOwil;�V&@q ҾpL tir-|W % "H$T!@<0ҟoMT$4=] GBJjq*�1!Tm&KHz;etGz%(8S1'_֧79efS7WXyQu Zi�1 )�G3L΄V!%zPם`I>y/63́ҠrCױ T\4 ))u^j0BƔ5âr0(P&Ԗ+DH44B(!;! c!h2$vr*h9$XU8 WJu+`�!D Mk`Z(AI>EV͒]faS�0 d1� -ͮ[V`uX�]q!<; G1. Yǎoml 6Q#PG 8z8ksV@WYQ`]6`-amqŭg]]>�G k`4 !Jg<`~jqk[[## 0X@8;z\ZvVDp۲в"rN*]]mm@WK �PXqfpNA �eC㷶N}�86Eb0t,A\@El؆`" $Gij(r<_= K~C0~s.ba rݣ$IE:bi�W/N>f{~DOR?7$84OynQsrnޞP7̟s?POgBmP䊛kݮxKs;No彋yRDN <֋PqOen:|^"ßVj :UMCE~e@Uz'ǙW�\VrSTЩRQgQQ</>*GS'@W\;UJW*s%B˲XQd`B  Z԰ �<`l94^C[l7aTbhu݀{=nyXp%�L` DVYeK�DpdܲC,|W7rW6ΰט8]wYvۣ6Y`#,c^í`Wڞ•,塠:A˷ m,b<ޢVW6ō`wZV[Vʈ(59.6XwV`mƪ- tC^eȷm*oqg˅ ȶl1" ۶O^'hUֹI-֪ {1QOX]ç-aui#l`'\k9pˍuE}-)+ewVpU/fu1cV66[ ~Q\)�&eۖms9Q)U:3�2f9Nb6p.5*U`*stNr%D|J7G1Tz;,,@ !X1DBB0&SŷSQme JoȸozwD /vnu]/8�sqD+vbm9m[VohtiS??-hY,TWL�37IPۃ$7N>sxck(Cv\{kKS9!"}MyuwZM4x:mgyMUsoT`d%E4>2ŹSkl;٢Gĉ !ͼKURk#r8<Q-"uEYjmafvfg�dwu™mxe/s챭?CGvGelzt51^(qLtIGd< ;2UXr\x.Xqu:;rǃh��?8 2ROˉGKXb}B'So<62QW=j_TLה_Z!KݣB\+-Ep?1li#c MI=<Eo:cʍwg }h_8=zF$Kޥa:JoL1r4.Hs5laϵePPz*N�m^SOPJ"fJ!4(8g٨)|{-o槌od-< ; 6<pRgMK):|+Hma/ v|ca^ %|XYrX85;- C,65O/Ak'@QzEZ.nQx6`{/ GA?AAx _4C0%o4A 9'2]!S![UI=7\%Pz%d|z~!Amf3LZ"ڂ!lm? mWM*!-)9Lx˕v]4<'Vȣ7Vۧ$<-)FE>1<m&dL- BVn2I �,XuhVV\AQ N8vXPcY(,ly" BB$f%I-xɷTtꃕjdFmk^w[~gl.,lf3f�mc}T;`Comu 1Ti6kRYls,ۼ@@aWKZmm.*Xd+]Z֖ږ�cՆ3<Z)7JNJem͠V]B"$D+<Q|yVV ;RsʵEݭnv;.T5DB˝MApq h9a", ݠŅ$X c@x6sR80\+e,vr_h\"pThQj5@Q `xE`#�Z  JM"]rj4'F(lL rye2V#b F{fBGoP+ykp'8#B,1K�@!>(O3 ?wqP~o/ )%ZP24l rQۅw:d#yX74$o+P�/~sKY6�Nd#OvXiYįt7~]Yk TʍiHFI4 ewܾu'PfߞFd4F*F!"PS Ď;[l_L=m2?dٌFr#)8+[_9pL9칛7wW.oV\ f}2D2үCW-;0X7&*щ72ɦ,=u'YMQ/T0sswկ}gג[e˩ibUo g ֨: n!` <̏gW ܩo}dƔ1i8Ĝ�u;:i4�6ۚvצnCbfh+^C0�<4VT SESMP!BH![AVf>/i9 rM7 ]-~ϏNsܹ͞ƙ[E0!41z_0M@P W;*KxtEj8+amL½osᚘ1)+m_w"TjP':C+;sI=d}E J,Ml//)luN �<O#nmx''32&ҿDp%!)z@�0�e?!~uZ||)lPX,F| ớZ2c'g={ _Ap@,2$X- o7Ů.)l= B�� z0yH"{b1! r o_5شiĺ�`:Y)x.he\0B%5 ֟%*`GtESQ@$,c*!DQzV.ZHRClcϒ e\aپ 7i%hj@Hy/t%lL4NY)ԅ%H`#e .9S6a,F pԁ3E !(8  YP95uxF նV|wXa�`ye� Jb J5R/ ,Pe!"pܠ&ڰ58o*N٪Ua�muۛŭ[[k] mǶU,vO5+vA jM6rq7`uV̝i-\\rךpb}^>6hrX=tί`uuuەFeǁщPVw*c V:Ksg\oy< f۬\,y�zGwT&v LꃕR˜}r[Ϯ-ίNcޱsZX̢;Z'KZ+7k{&B @lyNlxrpnߴJ^skLTFzZfn֪# 1WZ5vf@@BK)}}O Bc]{Gr-@co{6NNfMvCDޝyu*&ci @A*@"D0@Ym3�PJ%"q2""bl$\)sy1`P"Fl(#sS(4F]Y9 z[kE䘵ߋ(Gr}7/S{=Xoz=4Z,<צRWNT�c.BT`느 !Z/I'k6v liYZU(;�d$sfSς5{d<eenf5I0+*Om8֎}G>13V4g>:ݏo9/C >KyԒ���IDATmxjc`OIXrK:-7qxdl @1B_sO}ǦzVz߸�V%HP9$W�A s4zXi6*H�$?'~cHWЎe5^DHjuqP@}l<$Bt>B4\H3Nt<ƒ#%3dLVP?pյg_[pDn?_P-|Y^~GY |gnB u(D)ƌzoz;C8Vz;0HieRuhi[vnJ!|ה.!Ǫ>D6j'd*lS/oR®&Soy3넶C֓UP=G+%اYTd fZzs|QD`:mZ);ҸN+S- K+n:ۇN'dD=7~ԧ<3)axnΫanv݀*( vm9%L.�|KPͿ+) GSq-= T'̰` K/vqd9.<<i֗E&UiA]ۧXO=<c#*siK0 ٨HݤdIG!j]2� 2\)N15#sZh/ER8'MD@@ �CbAmVb]qE"xl݀|T-]XRza h#0rծ6K * (x|nxC#S)ZhGD%e>?eW/Xn, v]bfyrfhro6 ?|wh9:ٴ*  Qc._nzkfڪQ+llTdDV9Xâ`uo;2vBPp12WN ݎLZĘsnԵ*bxkZsr"Έ#3l}}pl Wlp.׽ՎDP*٥ZutZs X,/7W[kp J^k5tf580V&w꯿4U۶#6€ !Y(H&b1 BpNRI2:�ηN躾Gf!t]w\mkƮ^bC^V*57Wqf ��X|v A#)YeY%Dア�0!w9m K0)m9˒2U�>KES=UV(JɨiQH Ш�VIy@mVg&SH%>2Ƭ/6pv/JPl9dK<l3wjc;<]gۧ^2c8UH@϶|cc챶fdL>'E�at4#D\P4QB邅�! zz*34v13;rʩ)HxEʭ�^]v7=ZnrǟҀW܂O:X\*kbfncRVU%h|�@6P W~!^8 ~dG}r#ZnoHˏ %jSЭwة}+rؤ"\J 㥌LTdn/iə2E7!*xKB ɺdn Dʉ՞h 9Z�v?|vqv`s?Md ?Hs` rG4Dq0U"2y y+A\+AGR'Kl)9<Zf }ABJW�'R@Bw2�sOU2'HeB!MRD4i}r{(^>0\?!�h ;Y i0҂doS8@*Ja&B킈HYWc(B`>Gs�`evrלuaD)h<FWO[sHRMH4BziI3JFBky `ɵ.i=YS'Z~^p5?4|E@v O"D'.\(6h9ރd'ޝ֗ށRRpq3l,Aд>TrL [!=QW4HFbZ6ڶEua9ﴃjYALɒh|#m 6AmǀR�r]i՜vfIVf�S8Upƪ 8|Y֔?|(̈́)Y_pL[# EHR_Hhq6` K0z%ő>_Hjnz s3�\|_>%|e˛',m bW |i6SHhP%㸠=$ GW` 4Bp4re1H*=_>RY* KPvpT˛p<D|#~b'Pm_7`M`C�6!$P5D&"$3"` @֛Sbzrq�C@ 43u/Fƺe9Z7lXX `U @�Tvj �Q ]\?ȾjƘE1Bke4Uq*On^趷J aR>*hm8=0$plۮXb�Y]=rxe�ÖՀ2Hm*lZՉFitsJa)F)5qض˥βtXk%8 "r+{ ]wxi.-LZ8:c#nh`T&Fds!%u֜�e]K,1$A78P7ԞZs9e�h�@%48FsW"h #2+Uj|`& Մ# ,<D;\3rp6Ģ5\ÑI496CeUq~p?8Nɶm,Hz=~)+Ph>BrqF uBѡ,f8wqifOlZ'vU<E*zoGLzGn)NJY<08o76 G/y.=8:ntc?ZП<ltV_wW�>] ۹?=//ghw*K;vg.m0{l</*xi;ODj?M٥ːo�P>x.Ν̅nf_e>>`_ �`m?^, C:�ғ_@"tVPϊ_]uc%ߘ K"pn/Uziy[בK4,zdwFͯuYYy^a^G+ EUpFO>u[ϸj O1f?{hervYkׁ3n*]tUDHraQ @,׬Z }tĩ͝[0&�P`dͩ2'#ףUaʀ\88n%BBpPk8j '9NGlV:& 84<^X A肷 謀X`հ6alpsbU/>%2 ` VR}Rڈ�<!66f` 8JPڠU5ƻY%w@(7ʎ}{,UAn5�0J r&v L5MGX v~``s᝕moU讁v'Jc;N$Pb0 y<%@b'�,BxSZ] [s UomZ6J{OL5++*`cLD`m˲2pWTt�,�&A s/@yfOsmZ6dPИ35=p}B Dtc?PBdV]Ĺ}|}s.i6m%RY+Th%8qB fF2ҫOm=Tj [EQOɣIX ~8%k_G~*iH*N;N UI7=wܩz?Qo4,ɂBK&<,hK57 N?YV/KZJ*Od(=AKrfe.mn#s^B]V D蹇osnd.kuu2RZ6?T?stK̸~'8F|"Οh<x`aIf B7?r膡rzc;~t1T؈T1YU(6BOXZX6OJ~JUVZ噖�2(�!4+sv%J\z#;Ńq$P&A�7?R2n97n!F%a76O^0IMM^ hU2GbeBζT}hJxXQ*$@|-E% ?L) q{F ʞõg&B IK'7-yzYGHԳA~܅72!K9Ը}Z /At_X)NN*�NYDbX�.wgC%Y2D/NB5MVy*iμ34QJ7 `LF'Y"^<P:h3I]3an®gc]i|hA}ī^=o'H;%L=_;O O$|Ӵڗh_�M42n,̴Itphc5[ﱝ#e$di %v)sZR_%��rf-#zi9G 8Ɛ+B7'!z!=@gLƚy]Ǧ*ˑ[JLuކe ;֥%%%+E5,OftmtZcb/Яq|X;bb}r6�$69KyfKxW~_T`lXֳl0%-APz߮|TZ!0R.w7!l2j2@prIK`}Ju)iLCIg}zQ.yGDlI"鐹 EnߤfNHlt9n҄l vcF)>e|0z&R $jR`3>ݖ`)ڿȘZI1b]m% OD�)jTe�.Zs,.n' *Pw4C\_vFv6wԙ�Ƽ;7tqG`Rw 8K-XS{gO(3@t7©ֹ76ξvꅭ' ڎc[^n@n <i!f|@ |6Ƣ7󭥥Z#s™cs^G\ư5+|gcKgZ˝ l�k0<]-ݠZp gbfxס] (CX˻^ Vv掵.՚;Y:l`4Ъ1Dq_ (�h[<E�ac}A,t-Ҟ3]  [N4{bmZ +cL�$vX&ъ2s#֙2"}!N۪0p;ƙsg׶|K!�1@ �y"��ŸKPһLhY6c6�B}<s=Cf1kݞ^pGޥHZT53|"d!K;I荙he 0fg$*R?Fk 9<))vݭ#jNh2oOʾ>٣/L,vm</v) *.]8[TP3S忱ɦʘQzFA*&99,O pEFs5\?8g%)9YzpӉl.lju)&A\jtgCJ_w_SlD ҵ }w[6SGWD xՂ5BVI'MHn,'Unf&#t?oKG$OU OWcX[]2_#7>XT"L Ni>o~~1h֦%z"lUI)TK[ͫjo osMhĜPk9S?M;L{0]orL1Ӟ~DW=Y4)y7y�sn;Tf}xJPEO=T 5xu#³^?.1|;Úc希u9Ltf+IxTlc'E9 SMl$SNXĵ�9jm퉱qdRwӝ�}/ײ{GL@wI/p3|CU^.=L6`З#5 Ez~F>[sGcy)K,sr9g+&W]T6="S-{"}bZKnjy>̟/ӻSh칊 {{d AzD%kʫaWa:#֢ͯumcrվQ(Zwl(%LK|RDp&ے�nA{͡rS! d :.w<LEGopi1 Pg}'0~شm +1uY{M >P|oR[#e B g}:c})''c[N &BR$BEVulf6$O$)bh\3|X б\ {MVQc}ٖ`p,l1TmLY!ǘUF4ψ1$L+ &  A##bכU��NMenc┫Ύ]# u52j`# u~srmD+R*۵ZRrD@R1\wdx) ^z[bk/'ΫO}|gօKݶ@iSp\`@ǩ փ/?u'OZouZs*!2HB|讈ӯ~{ί-tk`NxZGx^{噣^ktGo_cJ-㵺AK4410o|bO6snw|g^~œnwC"!8!C"@L<" SA~ S"Lxp/ᙓ>}+S E,6 !ԟ B)m6BvB$Ddږ 4ڠmբg,-=7W7橳g왭2B3&X@ X@Џ_G۫�1mYcr}\zr.G6"laG>)~N(7ꎟ،=٬ҨDڣ+uTK4!Owp~_9'69rc{yx*ƻI@* R=զs o,{1|}-xxИ4G~pȋ]*xKdT^,P*W%Ʀ yO=H<"YfZdтgī$ʳ&wn}` Z^0 `; yꭍ@N+iw̒ǘ~ϣ/|[F4e{MQKL�_zN>o(%_6_/=rO%"z… ֆ-22,/7<rGFqӓ $*TB}+SB\.SCH0U T(nz~i,WL|JVSMxa50�!7>[z䉝L9d%6]8_ <LG@JLal~N]t2CTӣD1#!�QosI`&r Ƚ$WIl$]!RUa"8M:m<Z;6j4'T$6 WO!P)M]ihpx,AR$_<_|`dfc3Y5|^~dG>OshG&4>+tہQI Mu(qjL/T K<lrÖjuB1*Zþ Dr }#}}O{u=&䵯 =_0ĎUKx0͠Zr$ܗ*OC5ܣfy)`&)4`l]/Z^ĤYnş ܹko"Yҍweӻ~t;FћdZ:* "�ֆ_0neB knsH4BziZU&B@CH,F'vԦvP̂wRL4Jo&%i͊,WX~dD]Fӈbw'`w3>pTnn2Q;i_D״5:U-oJ Gԅc/pw,(%!m Vkx tK0/NSz >BF9yQZ `S�4t z2M? 4E @& $f'!Ѣ#$#? JH QW'[ �r\]>&HfV~,%)$HOI7Zoduxlh#d lC"@hQ|9nFЁ.CDUTnV[s6K`U vV%{ 'w7‚Nr]_Y_lx't%XRb &n7Svʼnz0w~g<{ gXpr™G=sR069VՐ2@ ! Q(�bͣϝ{opK62�Y(,,Gtwß;zgO<kX?Z��Y]9{l om;6p��Gir]j +]G8]|Յ_;湣 ~xp/,9@`A ؀VXKǐI� ]#]l�RpזNm͟s,?ut/Sf;H" 88�G=-, dSe`[İd#2۶,l`k?{j^xs嗞?ulqkebh dh!Hv�mWG!2Za"\t\^QC0D$Yc@Xi؆WKhWyuL_@;2712'>y�F }u`&vF})]4Zԯcպ}͸8Vå2MD~908Rtҗ?7{V1_g/vDOuS]gys+x·~ßB&D%!(򿿦q;bxBBGH4T@jM'vp>ݯ'ׇڼ>4GW9*ü7Z!K])<33Se3sS/kPK\[?O0]?xTKQ~rx+'v]S+GNnkӪM{G``t'xݧ7mYF c2fbi_~Y0` MScxa&>"7'~}_n)V[i+ÿbuisM=Vry�bpÝÿo~vhP!#E'6 r{ÿk˜iv;0S :zJ6O{j5Tn{`_/_҃96]9c`lT N% #b=}V�ȓpER!3<tP!j1#}33k,)ICx{JQ2MB8ΑƎbxgg(ژ=Nv!2�,<|e9t{ 컮 ;Í);[l{H0KC1Ht~ybz+N' WM� $ߕ,<|ǞƽN3A#Uq:|䖑gjeL([1h*J0߰/BmYVH4fOZbI  IMkB)@|lP +kmvN %VPN%24JI%: DL`rD+KE);sNuL075~!Y)ӽ9X_\muZE2#8\kP?Yǧ/%x'|hIiSW0~"2^@3]PR[7U-+vW 52Qт-/t֖]9ԄcS+pX^ qY{ \w>ج5LKPZ\-�gϡn9rJNiqwMBC4J{7H^曬OO1,A-a",KP&vq( b{0R1T>Y_bFے\g;2^* ��AɦiZ^#MKCfi-үFѳ%-M9iYl&Hl(PUBz\oνǥ"2#Tֽy2cG|MDV6YUU`R|'U= B,b NK !_0hf+fþOАFZ[kaRGyB A- X5¥(8v-arl QYkh q4& la!()O1#lNX'rWWЀv d\E=lFQ)HHP4=K&:<[G{$t-p '3JH<ڏI2fHx]:jJ1 {'{ }E@Ьatxx4V-,.-{~g2w&g;+F͘"sVX hpd m=L;�zEK !NўlM#1�$B$6&}bǃ^u:@JA.Փ2y�fL7nqm85B2ƥ+l\Dc b4�X H:Q*:b��Tl7_lhd5.7 vBAfZklUZZ!hM)MkFQtfd4GH2AXZ>}3k/ߺ$C"¬V9]y¯ZC@`d@$,^npWR$Q+ed)E1Gr/X˱+a5pX}/4Y\j]̨W#Kf6{,GE'ݩu~awxؖO'{ FďɿO%(3:>LBYtLjxmcֳ_~s&]cT¿/.GG[\1wlSQ/%_j�"O;=Ԧ}GW'ڣf_BHSlF1a=+s^lB_?F  ?/?rl5תokĭ$0�$~-_^Z ꉏi"4ek/my �\~[_r:~.,,Y5Gs׷`cd%v =| q>?=?/ -Հ*BN駙RΪūrl6fO*Bst\_~Gn?/{ɕ=Jo8‡?~q9v&(TPcC+Y/ ֳ3ZT<(T-7[9(�o'ζgY/kr)\gmی±BJdG貖'4#D&0ϧ'=Rg ac?}}unk8FoOme �+�90 NGjPمeP7>`w}`2ч )E(�?Gznw0}K?.]޺}ѿr>vH8{0یUOC9 z<*gno=ʠ&y]2C c!HWond2'~?@^gtk82 0:P"%'ukv<ن%Ňͯ9k,4\{AG|=+i];Vj)^�M'=%93@.<z+9i8EC#b2܋+̩]( $Ǘ, Õky3Dd[$>rlރ||QEބ]>qw\W>_pyUCɦ G޽<}᥵SSkC?|9Q4EeqG{9,['[4[[QY':x~\j#7.lk ,X*j8ht !=qlBdkq <*uT.jҙ͙R~UD{^=JSDpzx)%)=.H]7$$ ̄X I*_Q]LC 8d9"q (s`; NT pw}t5ЃS  .H�_I݅`iYF 艊0ŵ3O\xx]CO^8uq-X3 Ũ� |"�O2i@`�A1f%I {t)Z?^i@ 0@MU1:hFP ⢧;Hp$u�::wáF28cfH[kAK_r Zh`8<!;wi!>`|o ׯ J%y4ˀ"qDBR JPwx߸zy+<c9 <`(Gue>Gy9E f^f 4#K k�>L@ceu> @t$izaw߃yJhh0qZy{k5FTȻ]<|sۊmG 7~y*�DLsY@c%aDLbd2C�ٿ巺C9#Ho@p.^81Ƴy%U :[~QGUBc s+M1?Ϳwhй l01v[/?BTO}nvr?g>wݸ<_i؍aĿW,>KZjs|;?gjX=_gO~K۷.o]I2�|<`ヌȉѼQX2o+WFjVl2lG O_o\ ñL]!,|N0V_Fr_v>l}} {?cg[bsG?{VPN3ɶ(_.زDkMX9/Oz"ڴߺeWkB9�JqfN=C5faf, `Jq<QdZN <sy͌zw7^zk[ý(*B'.<;‡>vj);/Y/-U\jtqq}/} [/3 AGO~}MO}} ӛ{a$j@pʹ!‡>~'5ܺ=ٺ9nO<{XnUES%I߻Sv={!KKq@80 E fgs)3h,ۈ˞#;ϮmM ˹g~cx/6i4&[>C>ҫ*ҽFwq^{qG>q`'ڼ1IMO: Ӛ/>kx}x蹯ҠpХ}Ŧ1JpfYGcKyp(Wf$yVKlaΚ 7}EI FgZsBVn\nD 3;WSA:3OmS1C2�/2r=%Z[6<,yspq;Vգ>N~_skK\sytt$*�VOuL5 Q3z[b.g"�t~/uݜnÃ<O=ҙ }x\_lRye蓫A3'޻zWQ4e�{DkY<crXfkgF8ݼ9>:Gäqy\|dn>w< p�n^oaaTN{a49RA@KC}}8Z5CXuPudZzU@{Ui޸>.#3 &4vkGA!)w6C3+UKOVD懟\ϧ'>pB&]J)gVյr43 캣|;~к?gU/\юX06{"3Ù25O3Yw`M<ڃEvj] +|&؝)ܔN}sAmm篞mw/f{[yqNSA0WdžUeETdk^u708wAGh[aM$0Q�hf D,}"6"<wA@A'RZTjJ2+"<x A}}o_5yr_ ,뭆<rT|HM޺~pf9Ȯ<x_)+W{7^ Gàj|dҌPkɳXGc$u8 xR/s =wI*�J3patPʨ]@Sf �G�$!0z~4q>Lh0!hD%(*�ݔRqhB >E M�'1ݘCRb<pq}҉i,P 0Z1(JAg,F�L$VB Aw!:Hpr`tx^2yѼK.J _@ "|3#R (=Pbd NS7mG{HDoꭝ蝸�N]X^=ػWwo\ۼ5:H*BuDy c!<+k8?OMbj /n΂Jw%e??2DDDE8Y)D:d,2dd"R*?0cD؋O{jj.PEUi$?rwdr[g(vլN8O8?o0 e&+~Ck[oOOy' VOvVւ0�X>o?woAe%MܙCA)o8x__'~+9#08h<W'tkO͋�5nNv't`{Y،<q,4zr_/ylNzK_߹ _sDj<L�'3{C7Xnӱ\^ Vւނ3>ɼT-X\?~x4n}AC|Gfm \N`\Uqu> Bdwm@M+{cY$x<[Y+a �JOMXrloJC` :?w?qvo' ²T'h ]z*(2͜Y3޻>žNuNe.đ:c q>;7Nu~.\v၅ٯ&L6~f6.nYZfj# XVYid;49Rd͵O0 X\n?~%( �ErXJ’_uF |3-z>vr8_()Y\g tʹ^4%oDЋkoXaܛyUVShA\΍]~k*~[p '~vncKi|tނ7'M/\}}2B9@q*2vT_ujȿZ'>T}m6]@6yNx[!;ksҫ޳~/ӱb_z<7_ځ~=oM:n�◾iީst7!3Q{ݾ<j{Զg9W;* ^zv#?z]C?�IFGIn`T+ESv ֕Gf;J@&hkŋ+~7ۭp5PUBfY;~G϶[ՓՓ6ӉfvK *b6.Xhʝz CZi#ODD2R4eV7B 6mof߯<޵VF<~d<rriMk{ |ݫ>!I X?jzlQf[SCY ԁ34% lc^fvUiO N( aj<E̚z$NMX jA_ b),l;&ykU[,W=wU^Ȿ%AH `S:}�U1)rD @ LxV:[SON/�,!ށp_1a%�Hc� @hRJbBO|%N$=B,AkH@0 # 4ҭ9�N�j_�Xg2eFA#;_A 2j( @!1iPg@Q+d eN A@ A_hdbDO,$IE2ғITgU� :`uL1`~4T'G<" ʼnR*5kZDd$Eff Z##KȌAMD(( ~Dol-D+gG:gN?nݎ'(8|4JYkY i߳3Rw0O[DdF9I@DԨ`Ԙ'TA:^kލVf8#}^lc=®F4 { ׊@VKHUI$3e+MO}ref)mQ~WJ S%�|>RB.rhWo_í^h{+Gd ť/QLG_Ɯ#3O|`ޝ.g]ɤ=FFX|Ɩ<:iR&Mmd^xpa䳿s rsU$`$ Wv`[d]_=w?O�ֵGF*Ќ#QM.=ճ[ 6M<p �<iڋO}fx";PUP� P}X 3˓ZbQm zղsN$}G޽2�Qf/,,Fs g~{`7z[sK+cl5>,͜]_Z ׯi2q?n]}{>ʥ}/NW)c*)9Plf'3D[֓tEHH-Ēa, AUL곿w35 }->ɳV]\!c-)#ʄ#ʻ=>hswczqBǗNBf6Dy;ꄕn9Bcz+nd,XMѢ̼~}75Dzs9Ynn_Ԯѡb lGs`7,ƻ FjmZ*1 ?zYz ` Bh𢁍\ULhbө~Aif-xg럻_^ d/>e!,  0OXZatN֯N!JpSz~S-2NI͆NGSm_)SݳVNt޸|>܌bu[/ FG<�ϧ, %`# fjʲgIq2J^n&Bo;uv;w2J^֞'>f۞jWp|%AOƑMX:2`k1 O9]=8>֡NW,"⽳<߈58Vn]-A0�YRT<b\"TUu/*B)Oh4UdQ5ha �k )r nb?nB*8¤VX#Lj|W`qso tGl "m!-D6p+$6VipCAYlnenh=jiM'52Ke RRXV":ߘ#�'ϭ<GNYTwowXľ:N2 3!R*T:"7(�P : ?@?CݞGĀ MI@iXU P ΑN)VL2f:*@_HgP |0@� ZR<$LG<$bք�R{ԠRQIg8="@0�D�ʏNG.pPc~4RHR+�:FTC"R(I>@IB1Jbfɨ�̚YkJ�Pf.εJAK$a_,%1|-=W}r}<ϝuXuӗT$!juO}(3K8$TdfW y雱ekȌ A=Q),G fB(QX ,f6ILnzE߈#;D�8M~WdgZӖ+a8R]XivIX2{n>p7`oƍC.RbfaE,q 0btb^bgR"T}\Sͭoɐe%O؇7?w7oM˟s0U=`)pp̘�>#_qUo(D(G gm]6"Kl6T.r ߋ˃7,!lSu�nhes5S6I_b-0q4o^X`7俽ln�~g/_$gv R|5s*΂V8sH3ٸ0ke͠J\bT^~}n)yof 2$0$_8;Xyv羼+{gm�fR(cLq4h lgghoF,l�̯0xvvϥHsn4vVوY-Ta6"3G?QHkxc!XjՍ2 Y:,:T} `@<ew^`Ƥ[*:Af!E�:c73y{Lh 'h`I:tH^kxyj7_=>1V;J]a>y栵ƂܣINƋ%0=j[J Vcs>>sQeoieFMoG4AJ<nV>,fiyfh:w 緇8Jm=!Q Q4tmIa* "U<A�ځ4boaZSEp|SU<`|KѮx.h\+&56 +Jg# qE(Bj'hv&- ,`;cԪŠTI`Glp;%B*-p !߫h`iuD )L'JF56ƃI2T��z?#:B K捃(j_`$F(@}.z~4&'D U:8DG{קGpk8X?ڿuwhýÍ0:dO-xxv `B"BHt0?5ODyIx<#�C\bZV,Ԡ R�(bMHcT?MI?�q/ِԒyʠ2IY`^@Ě҉2Ty5&�JXi 4 "i@ �J�Ip0}BP_tD7'֫7 &XAoN{K?rhD�0-*Z�Kٌ8(JD("4KDEEL�ce X_SmcWP U�Z�JL.pSg,QT%&وpbM=o<rim7A?_yfS˟Q?�s_܇<`Xp� [,~@{HU:Jy;jx=`B fC3faqM *ZguO|tͽͨI sK!M[mmOaE)fZ 7/|3o{,PCynO}f _à0scl,T(3ebcɬwW"L`/9J/|o.96xb1T?TwF|ߨ" 7�fzw#ߺ>{2zE[>{ ):o۶?w_\Lr'MW}X 9ED9&ӑZ 3ۭ˓?Gw*ʈZ#q!B8Duyӻwx~d�y9vg7]W=[!TMb-wkʛ@mJJζY\.eSڹ̵7[v4v.j7 v*�,Ufx>Tѵ \,ʱ.>4ӊNϮOFR)}mɩl0~^R"�엞{pek,Vɜ:1um׶ۋ]t׷ }2^|t|+[qtof5h>`~}7wUTюo}ek:|*v>=ka?ǐgD5NpO*#Ki|`&(;J/¾s;=2 XqZ<w%e6o A\> ~:Bjʟ-+y g(T-9� QLD E<ھlx�0Be9pL>a a 1D1!_o6 Hdր,<灗9kH<,08؞MTf/�@0ޓ7vv'r >v=ՊHǑʤF-'J+B�B pt<{_+\yo]7_ߺ_}Wvn<y0 ""қNCH@DDH1C "   $Bb@(w""@AC#>(] 5B!@"n^�%D+ yLʩpy~LmSe(�@D JsiI� fֱ ҬpjL !}qL uO�R1Y7 @ Hiy5`Հ T Bh J 0y};߾W|usg}5`܇>p2yc)߶74 �J$N<7EM�=O5a-9*? BKEY|FH` O~6G!_g޺41h=?K=Ֆ\}?m>&ھ]m`T#H.D#Kyv.ѿ֒Šdof;OESHWcg~] #nc,=@靸~E&t~㿽ʬ#dlJ/?'oC^{ZP�<Mͽ`;\:ދnɓ*߬"݆Jv?۷*ĺeO.l<?۞sllT>Wuy{> ՗kD~@ڦc߹/z?ƻZZGqaO^0?߽q+v7?k7v2fe{/wg.;npRw>>h4?5ĿFbO!)ݏן?꟮߫d׶t2EЈV˱o?-xX[ʍ@]' "fylW!<wi1>A?Y?ؽ7[Kéz 2m+dUuWSeḵ(Ly*}u=: 5>00g9mە_zVcnw3ײU#QruGqO<SiU䟣Q:Z)F=-fw܏es2|86)x sgp뒁F;/f13 9,Žo ɯ8RLs|$Y[X⃅w7<_^v;E J@TRRCŠ"#H&,tX$`gX;2N2$*XDObť;!|fdU0`& ׷_}O7n|kW[}K;;[7n^^n#  B�1 y§lw( IsL@K֊ff2K2S,hQiJXYz@|A>Sq'PXBG*I4u4TAii+ʓȌj 2fЬ�WJ)De X\ V$IK%b1˄qeuyyy5.E�BP}OtA+'rȩR BƷm5M!3 �P)Z+ql7P`�|xi'#$BgoiɛZI$II"D+Z`FJߜœ�7Qj \bkOH/q?oo<ҹyں882ȏ>u=7ߜշ^@_He?3[n2؏~_\ѪxQ'f,Oi7_l{|{_;왶 4wsmc~e7m>mE3�VZSyUut9+7͞o +y {. ~V'{!�ƹvyx۫9o$nGwwx֯٘@`)翼} vP}?\{J~ζV{ `O[*C\O39dy+nQDTmw'ڋߜgկ/ѭ|jazƛ?kw՚/~r0sTmX] p|\7v]d�Wʳ 16v/~j~{?7fOF3_k, C?^޶3ߙٽQ'tpc߾̗» O ;˃3×x}8"|[Zx�xԊַc@;;],g X\s.=P nks`ɪ,_gBo_woY;/7_:<>ϟwpȹ6v\`ޫ`W irhw]l޼TmA,G޸]V:G_ۃ$QR"nLFwY/2!K>{wNb׶o])a3rc77gőz;W^;l4swKۚur☌䷾y._G5W}<U8|+m+ƤK&zo+,A^:PlXvYq=O՗Vf{r:;~_` _ tpl A]Wݪ>ܳ_qy�L`0CBBlɊOi"+<FMʖY6o4wx<Et ĠV&u ~=mʱa]?@taު@lagojj�SXd065d$͘0JYj.,vz oI,ǣP&uh|m>4�y=NcC#u0VQ$Af^^!h O9=$|U£ph`g}yk~mzpokiąϜ/. Qi X2+cˏ5&Ě@+`uRIu-͜('208TJ2XűbE*JTdtfYaP ujwi:xzt4M&i4cTY8[;ٱҌ503jZbP\ґ %"#P(l 9sneq%�Lp4p: 'pc3gESdZ,yZsQ<SƩQa<bi^?lK-A)QD R y >pK/\ӯʍ EZZA9@ PhD "x[;ԊEne`uzt'q,D)Z~banO4`lB<՟ .^ NU8AIn-̵[NL%/K<؊s.տwG52ѯv>rxbZn7ťaR`GMsFR7ӿu <OkW9,:\ _ _{==fkۛקm|f8DZw!ȿUuRQg r᯼ɳO0_ޘ~n^}lVFVP*& 3nEd`|/>7,oc;O$:*L|mƗ?3g|l%|ssg`y7^oE.WPs)mB < X)'7^yŇ#o[X6U?߾2uY!Km_k|pK]Դ]pwx5ͲVOoG~߷&1 3_ݛo#wNn޿Ԟ{=F\"+2<|8]{sAu9G6yWɺk knOqZ+VX[YlCƬ>CM��`//kT~O~J?zG${ӟێtja7�F\)C(%l֌Gs{p̶~ٽ<umv{sQ~Z\`^U3T, bo:B&V1G  ZKO]yo1piEQ7֎+nT1PCڽG֕q)'Bfʼn[50L!7. ׯ~/{(yyq}$R}}+0i<{.uV|7dg鴘sX[3($;?eo}^>wq‰QJ,<\s>"b8W8|=Λ^~mt=0yyc[/H~qst~"bx[c bU_SDNZR} sβ cG3:kxke UA!t~}l'hIg#$d5_3g0\nTX"ܲ�]Ʈ!A$B d뷭1 2H a#nϮRx4щ DD{Hlnz^{ HnMvo xJ 1VHF1 �{+I�$pCpIr4!E1+R s?zE�7&!<LBb%}%ct<@H2i͠VA$TQ$8Ҷ\̬o)zSIh03K%Q4*=^BL7$@ N0t)}pPž O=?@ƌ+d 5$G@` 1c" Q2^\pqgi#(NXK5yu聇WN]vR 쬀 b�@ N:݀H0#fzᲅ R/ ZR3 %0}*z?k7xccs{pp8//@� bԦ�Y)$JX0&op<{\ 9BP)Km0pcLқvmosP`4̽l+/4=HRO\~y߽cXzW{�`/W0@^ Z�/<7[nxiAqJς@[pes //iɳ@FȮ9W䓿zki?^x/[ ^#�/?qsĭ+SW֎Oqid" c/ny$tƴ9v>׸ZRJ\@u?o~2_;|>ʸEΜs)A9i+O/m ϭ6M3Qr=H}?n<'??m#}e楱Uzb�;[^э7~>զ0޼9y;4\~yg,5:DE6ՠt |\}/đ.!|;;9 7'‹lU;#5uvX|⃫k>>\Za{[歕[ĩwp)9˽o]}uX,\nhM* Y6#11* c7/󞏬]|d̅^{>`7z;7=慜ȥ+'63ߎCtyڠK~@2hܫ�I;؆%B8po4X><7ܸ>6\[`!DJ7v*`.~N6"\ ^ ͨUT­a!*o?.>p .,,ܴۓ7sx#-*KthMw癋YlX[?u}||7AnNmݚmE_G޽B Ӊ<؉^}~ڤ\+`ӡl�MC\"+)E Hq‰*mM#IV8[WЭ5GG6v6aIrL:`{w3߿y\C8݅vnޚ_﬇6e#\Gv!T} )l~D8Uw!$#p퍣[-dOcUd!�h҉_ǥh!(r{BGG/8*TAQ|dEP҃(~q2&u`̅N{Y@W8"W4!Pq4lM6tH1ڙdU@#׶\\>?q^Gj~KF޼2tݕ@{dЉCuHL&*ɗ^xkxbԹމ3L0kޘ޼t`˾$jƱn̗N\\5<w6P 3]}+DCIR R_Ƣ"0<m%; `8=S'vWNtکt,wNĺLcԝ`f:j2Q.\Sշ~mĚyiD_zms{_<#[Eq.28 s(vݾWe/>d(To|0Ķ;WV}k{JpxeיˁmU}fnU_́]ePpl$*tH+h/цf` V/č Z1Bڂ``G !5Xh,�uM*+bGBEi+)C9fƱkA!eɁ˯,(d�vm+A$!@H+-7Db�bPRC^v'LhE  d*7?-�@FP09wnm]ø@7/H'R(N(!=@@><)JwJC|'U <zrWS+vh c@\ȓ?9�8:Kh4R:ѱRKI41`BB Ԭ)ISEa"*{ G4$HDII fNL'Iz "%q,BQ0k8FGRƘ$GNWrJ貒hkh:Z^:<etXk%XXXo@1 "1p Á K@�`a.> OV;hY {Jw. D$@ YI Oĩ3gMF`w !�"/[�0#kJSkgꟹ؝AZ*D0 cTh DD@k @ĮgҴ `f=@}dBdJp>rd2f(j™`iͬae+�_rTl5\q}(2dYǙ^\=<⊿-,AFG~<؍V<ʂpqgvq<bbw-Y?`P}7kB;/~sWqC£A2$;^aT/;tX$WRo޼ŏ~l$A:Weی6R sP3G{W>?\;yq/xӱa߸4 ? BѦh)l5pA̟>]!w-, _X Ar'GVN=y-俹{g;+'Փ)f}{s;jp !~@O~ߚ7^moF4>޸ޝplLT8ȯ>7c[r6#OpѵG$ӝ%oqG(d(o_H: Q8KIT,hwsMʸճ3ZECI67) y;v#{v x8GGA<K:ᅯJ`�ۭ@*8n(xDx[]E.gUh+J>Y[?�;a! g9#}ѕWz?q ϧ0&Ãx8øؐch?y+!"ݺ<uy *+i r 7Ҫd w`7'L!; hˀtȕ.䏦_߭f[Io͛ӭ[S;zhk(Z6hPY� 6-gyݾ#Ne8QTl:`c8<p?~y];Iy?C�p#4G2 ϦkCT7/ZG7Al-ڢ÷xCB%+~Vs#$p /8D :"T8QQ~ơ[Yvf:낇<&^^ꩠu"舠Ka2Nӱ698~5lFkXg �0ˣGDr/AWO*DN< *>-UeV:, ~:$%GS`7 ǪƴP+}b,,׻:.B?4M@huӉy敡zt( ? R$qHpl9[ ?-'7;ra&|26ÕSe_+PI䩎X%W}ƥʉ’%V>]:y=9,D :T9љ";ZcP_+o$-߸hߴ:\ܯ\D&o0 nN_3G+YصV揫Ʊ 3QPl;ZR.6{\uOyZ#fP't'@^HBV �?ÃhӰ)BA~18/{+AFZ/ &�DE�!)@E d @n|$鯝\~S_> &+@4N„ u,Yy:QO&tytYT2Vӈ(0+� $qD$ljJ1k� �QL#H("JX*ӏ0h2Qx2RalmX: ^_^d "5Npdࣧ~ =]4'L$&fo_.P͠XIcAN[VcO ~v[=q/*��D( Q/3gyÏ�w;8 IP5D�D"Њe"BGO?9D=0^MԅñJ(YyV� Dx}wZK�g%" 1)d$D,͊u5AD=ǸpكUe>9Yn|1o1v) ăŏ%`(6]h< g4 `n"9K2sw,1�wKSr6347* wdvjO*3稛!<!Ay#04E&du/JFФ\a$YKo65q-2Rp͘�x:Dˡ*W\}0PE_h;exMk8;qȋ g��XnX<A<NsH_yu82R>#hweM3PjvKg40vwied;嬃TÚ_5swvg@X?PF*2NeQ2ѥ���IDATN숅5ҸlY<3X,~Nx53@\y=l%3C_ G-K8V1֦'[ 媼'>qo&m ϷPz -x/yEKN,9uᡦgq'7BJc%y=@al~B?oiPfxTrBdtWoFW<3.5;qEYz㞨A|4n[Ƀꨚ ϕkT8RkmJv^�{4+8VA^XF[A& dNSo5CL#Or:JSX.-V}�hm5;j^^ӂ{[U_ȭ. ~)9oVXKq˚n]_'[cY*k�YѾEd8rBjOZ [3ժXh.RNI��ZkbFDZ!"e AX9;HDkk+ˋgԒ0$J<Fnus,'Nu},SV|l\?8ܛt"(ψJ*DtxGWK"x$x1XO`'\q=E@@:@xˇq`话,vNn^ݼM@\� @J:T%TZ GT2I$֠*BdBMR0 E d{9BDJ؏"-k�� Zrd =bE\x_."x}<uON_\ZxS"= 3DQ2DdD 'Qd((&;ļ\y|wH@,G\];-DӸﭜ/v"azt1  .,u{{e"='}}MQ�||JIP @w]|x)NFg/,T䑷6^,ւQ f �xY;ʓ=@ݖ̬J HN#!Pu ^aUً9I\kvX;.PEUi2AirjY9p�cqMܫ9aD:Y-eXތxbN[Z:E(жbhqb,]`R)w㝸/9D(&e<| =NF y !E-v%dj}=G=Ýjݮd5Pƚ6f9Y�C\݇;AN"ܪXJVlKmFyl f_v:6q`(pw5.K/Ҭ�F}gyEΖ!.a1 Эlݪuk1�0K4vPeuAm ung#8qJm&s@y}smn|ͭ&nH7QRا(eN܄ YYW^;}l߶U"d;"W|x~veoP6x7szEC iS1l<Js~q\Q}�{*K5UU_>:+eX%=&B|Og`ccvK6Ѷ`E% 0csi5RkW}%7jdf>>!r#yU%8 B\3>4ByE27fD ~nvt !0c([nR|Ć[dc`}wzui =Ά8G-H<`-�PkdVV{ <%'"Z)b#Jɑ:؊O/V}0Ovx́@2'ᥡ COt#~AWhNP셡NQWhZ;G U΂ba{:+ɞ'z=Ã/w`<N) Ni 1t}=B`ԚȬ�DbY33k"==<B$bR':Dl ],Q}B4�1 Aa-E šŃ/Q� z+^'Px@P �cIq(iFSqGEʣL"ZE:Itpo{"9d<s,< K'.tU:N=tW4 HwR"!y�A2 :-UbqtM< AĈ`8>'^^waԅ.Jond {DƞV Gs?lEWMXVRi�fLkU�;;jf8Xl}ddeC\!3ha71}370҅>1k x&{u<ڷyY:]g m祬MѮausqH&gk2GSR|-Y>y"D0Z"@3fopj8ײCUu:6r>j^xw>[n@2nۆy~}wᭊP85P[o"iU29]qAnXt3-!\:z0W5t+,ϫ Uyzj-DLjTTPYdnrՌNcF#Be)`mCyqykU-1P0#GE;meq;ły83٪bǹ^fkCH>ݳAr5dv0gz~yU/bPq|tv\`?hGYN؜<AY"49>OA=)8:?ݞ\$y5۲Aݍq<UNR! `FtW}5"D<b_)|#7my3w+W7ki,P1>Հ=7BC=1L'8] ꮍ Y6h| E;a0s܊ ql C\TܪZXR6dFfd"^@ ={*+�H0РdGB` i 'XJ u2*bYzA�R: %^88ёSwy[r`ktHnO[8[O<dDs@,@@h(D "B(jD$<vH{�ң vHI �M5�.0k L>jVWx*[n\^tWN=C+݅" HX{}� I|N08VNH'%D�pEP&�q8hQ=>9q߃+'|xe4dȓPtDgӝ P Ž _#kXZ@Au 持+Ak�`" NI"^{eT q]$ɔyB"`P̬kN4 ̠R !@IZ Y3pj`[s'3{TUiH0u% ܪ_`g`;[4[74w�&<PgKʔ~z}.BeFgr ~�KM?. 8MrB9Py[hؒi p,bFTP)!%R"YL8DȦtVK1VE%g!51cCE  7RvʖRiV h7J`�L`1G*d4 iU_f< Bm`[ up!F[)z!@U@ ؉u!@7!yRJ[YvPy [``!Te6BJ6vMF!ZB a?r=&ȋP1\|MB:uVX  Ŏq!p8`FtP}eqӡhtk !0);;'6ȸ2]dOs. K:48l$(EKpK8p #**B}#1x~$VS[up!Q\GH8Ufx>£_'X O(7ϯzTE4]ō*"翴mΊ\<$7A!dJo.-CR1\Ln͸8F=)gFU<8ݨXu,MlefPK" ҲXڻbYl8tG˳/VR]U'"Bq,Dh2# :ogf8l�6׍ O0[5hca:m[fga;RyQicC�qx%}+9ڵ eK\^UqfX8VbuX Z_QU؈ɱSJa66Vx~q4iEo Fu>#�6T ƢT+]IΆ�ȚBH!HB0 '%f `ÎB=NQ-*0p+ 9if%x8Ó+>pd2RT0" ɔ$'#{|NhHٿڸ:[oܾzxs?{bI $ ! `Ї**$"2KD8=!`:yhOh"O:P#O$&,Z (3hc#R=eL躜h=^<}~g-�Po8i8.unN )#r_!@ d &GI8@zx{`MO\x3kr9d̃uF;wn.�/DW _+@Q!GG;@� $#9IkYcqtD>P l={��1yZݸ:9(b||Z)Р|^uN{ %" �D@̙6:=)zmVյVd!'crm{LKS#Y_]fPazlauA.T BS-?OGSjv6 ༧5Pf!WDf Y]?RzkgF B9k\PtPBB͹5B�.y,;րkۭb,ρ #8f=58EU\]Wf!Ud 88B"ٚy^^ ,\Tߝ9޺9l"CyiE Uc77B c.`,ZLy ֠)B墙Ƿo\1YzfW~ge\}o<ql!wnL`J~EuF)Bu]߹q۶N<\j/#NcWx1c E6"<>n!.@f슩|Zu~ffdέ)rCf{~z.+Y/QQ1Eol`Ꮚvi4EZ8XU̯.l`Wx|ָC09kؖѩ# OFHqlexcT=S}s; kWNXQ#w> !N6 !*3x1P9`5r{wbApeu:;s&02yQq []}o9_D�.!)ajX^ZߦƐ*# Cq%gxWl: >� H x(@n\:HMLbF" IQ(yrShx<bxdH4>tzqhgsx҉^g!|0ƒk[`qQ11�(. ã²JMk8$O$�IUH,< xdkB[t<_DQriurߘ @R@'ăP>ۚD�@Ǭ^?yji +zAcIsn&I[ݝk/'սp< BP2~& QX(5qL<YYzb<xkc_8sf|JeӽJB @0yq~kvё}}tvk$B֨1;57b  z{c';Š{@0C8ãxgyk=$r:AGD)_m8{%jD Rqc�P<�"!;=j <0 ewl` OnVUmŕ-}Tݷ r9Q} r_JatOE!(N{PB_CwI႓K]"V>+ʱ}r9֌ü?[A,,*9kZFfYBp+riVzMbshSm6/ȁUSSEd'U(殦Gq</o-*{Η@nkvRQ<ĥ֪(VC η]RΨmcu;5`Hre^+qYG*/))}@q9)>:4-i a/::5uW<3:}"\hEabesAeڣb)j\Q!CqN* X]N,[+jtKmfrT4fС8ֆ̡(**d גY7huedmr-ѳ7ڄWDMcιm!7s<rol~ӾKo=l",y)+C KxhGs7w!1-Md2*BL)jR|n@ez(v{0sUcwq'V4AAw80nN�iM*~JX!r@e_puۖ}UH'X3`Dsmߡ WhF!HkŊlXw %W1Yy9H^s3^[j3_+XY?׸[iJe ~@dUvHKڠngl^c6?ud v>&63v~jپDo7ma?l:slrwnp`ߦ:= Jc yxQr3cPxwt!QRD+GG'H'24ȊH(cMK䉀nIB i2LƓDN_t;Š@xGhGI4KAWQ�3hţK RKOF,P�z ںupxtԽB(TP5h AJ룽$\ Ӏz:ӑ�{GD'(NvU'PH "!yXNƵN< ׯWA"5aTp~GHox 'Dxi؎*O(Aacb~A_kkr F`7::Өד{8t:D$j2 Q `8I֧ZdDGx'PG@!1!!2Lj@y^ '4ngӉ A4GG OD̬f`?fdͬYJL f*Y՟;CX5e Y-U*}d.|6?r5C%s\oD|[$k6Ui1Dn-qD62G3g~U6r9 K%_>چq)j7n-)n.}ul͵/-m71׮C6a >C!]TyYO:mIz=5b˷j97Xm=Ќ'm n?7jU_bG'z3"h9p2ousE{بܿŭfkܢ3g dREaxk@?bq Ǧn^odOmpoPzs=@@廦ka$ٺX|C!<,K_jY<|<"M3 !=A+r43! =s:Oc6t۩�[gAv/g+!zyyL%rCԄ v [ų6ɵ?.7,n qjͻW}0CۻĆG}�NZfHV*BjH,pI[=!wd)f ,s_qLg;^6v C _ cx{!!3 GQ<2h1E_v<<ED'aEZ�JMPM19XQJ2+ i+LxL5.V|s?kdD d!H=Jp&2JT*&t<:AH1sʽ'h E@( uCHDMBM EH>!jtNN5''$`q⑏ thĠ4PG{!@O%:h2 4 6~E5%1'JAu8tyK<t '  q498L!"%NyjD)#ybg%rLJa<out+|؉z2Iqƃ)BG$}8( 'p 5*R"= $(3֐ :AC-@A:]3!$&N1kT" V;{ I֬})E 8s^p=is LfvNX p-G8̽8fß7ˮ>gXqr,= "IU^gXO$XȹNO},hsenq2!U|O!9ï*8VDvf rEA޷*Z!R@&B\8 0(E60†iݮTp9A>SB'4 ۰뇼eDZB,;qU[Xi.kgYZY@Y*^!p]6U4"d۳m\%*n=jGdczÙχ^090y;Bl{EH4]m#l;_2;d~\<r}n:T5v:q9f}C!DN{jӡJβ3Hf*blwwn_#._zca f><-J�5څ& dۋr ,:;mY|iCiBsld#"s|wmܷ' 3m`4{uX7v(]{V}{nW ZiߛE6T W]V&oOl +fh2{D2ÆnT3<Udʾ쩃Θ劥5TX /X;s֨ΫFA~["FiJҤJ Ox4Tq<X) $)9Ad&i%$EOHeJ+$}T {}@?�4Qu!PTqE*J0ON;!*Qك=;�$4XfN X'd瑖>� . iEQ&+"< <#?>ЊI#'J*S,@DGH "@b;JGI,�<BxHWF�BWILh3J=Ȋ+\ ; 00RM(( YK$QG$zB DUX AÎ֜ĄZ&SHF" @iҺ#z(#-V*AҾAG{jA5IMTa8< !wvz"֬ҳy RIf5kPZ+ZL<OcE$%hE�=DTRJ)@d�w!" �&R�h֚%b��@HMH^4 sҜ9A#;#ā9j2WlTnEm93O5)L̯,4 Ti fO�P P 8ң0U9q1T>u0)]1L` b `)�nsE0zlnkO71e,ۤ'Uzy96JF}oBcMcSEuyЯ-|מPg6i]P3�,N!lJҜ iff-gxgE@͔*XVsB#R@H_am"4@({Fn:@ 7:p%ۥN _xBFVbLzyG$ r@H9)]g2!h o(|*Bws}ou,ƑKFHƮI|+6m:vgg? `r !*!DB�ʡ.E0&H؀m.r!܊XyRBH;xɋL d�U6Сcg> ,EF7)\O]θtȦh;,j)J`tdqmG0)PV8'"Y\Y68�;$X%ϯ#]k9`3ϲ< !Pu= !V̾ۍrz 'H,XH`R BF"%BЅ|r-O#42vP17Bs$ !#\@dAo~O�yaBHq Zc%V`5ɥq jTimFǺ58 oMds58Ep " OAa u>8խJls>, <uhR}m"ׁU3U_*BnUR7-<R ϟDy>V//5 !'<V}X7-`S4`|s[R RcTcY^k.h/,E}*#H.c;pF7GJr"!BU�KZ $1OUlj` 2QXhOԜ Ƃ$(]ZfJ! @HP'QBw^=A<VZ)Pő$:! �1`@̠#03kMz|ČLT�Z2 3jaM L$fi1U ZaDx G$<.a@ړ @ ZB HB0XG MI1 OK- ֚D/�RIP8�V%0+ȄbP6bC<�RR너C"d�tD$<X0t@ � A~1{ :FRIőJ@kB'RRF N^Ǒb5bbe8ֺ$1AbO$A�b�(�H}_x2R5"xZm]uﴷ1*Q!of�hCD�Ӳ�fֈLrD2STҡGiͬa tJKWJdtf[K[AX+=&/R9wܞDvܠp-e%BϬСv^s`z#W>&{] oQN 5]k٦lvNα@Z5gYzjٻ<6SF"Ķ\<>;c4ThT}6Bfr6-lU =s8ViD6- QX۱(JƆ!5{a,Lcw<3 k0vAz`hf3vgEECp(0mtȄCΑ޳˳df tbds͵�+,n>[vUϿ3=pw"7Pe[oDv;JoQ1[6fcg6s~p�N880SX"ű%=-pGW̰x$+9TH#;h~ :@~6Q{)3T[M3uYKX*L1]0 [yZ<APɇ U_FD'\hNJj0CM4Ď!28}Ön7p/<rgPV_3~,OT..3cKY"F)rCmnpʌdŶgd|<5BaQ3fԨdH1%1D#R2(X!+S ddGI2KL"15(D"%k C F "{ !4� 5H $X0@>y,40k DI%d4@(|JVSLZ� %�*fЀ9GG@͐$R|x$SBQ РV@DzZ &�=�V�Q{ȌvV�5"@z4RafB|� Z#(4f$?�h`f3kH@yH bOkyfA�VI|AHx#y�fBIB  QJ%@DeRXqHSYJY GDȤ]�Y �H͚5�!v Z+uiʹSs}HzdH P�3)43kPJ �9IF0hry8.R9s.;qɊ5eFa24Ӝֹ{:&UyN(P�ʟ+�lȩ/YkI&) cSߣ#x|~0Ý:c⡾xv"$h3j&pY,Y;C\t!/! TEuf;핃iŜX T JfvLW@nul lXd&r5]iw||Ax aql J0T3cK!9*J.D. �1�iY 4!F+B =P۬v!\ncUPb+mg(@c K!kJ(q0F-;m"T\BHѓ:BЉUƢ} 34/BʝЌ A9(eyşurCU:HJlTѐ?fC%*^slf&6nѡʢ5Ir%sc.L&$"] 8$[*BFE3Fg $W'mlȘ :4sp u_"-Wm +9My!MfG)Y.FU6[ݨBl7 ]U}P! )G&]o`X"T_Sd16X/")MBoX=G/imlQȭuE2ܗk"8T]Zdem՗\qE;oVW!hE՜ADƱW` u7ϯNye qd׳aK D Z4s|Kq% p B^Nn%ϯA 53VP W6B2qN\Sfь8<ApB Gv"=3lM}w{';d,{o UOZ%D· s>`gL[T5B?g,vХ4�3ÅE,)3HʠY(15HN% dB N$V@̬4h��(|�@b�Ȉ +$""B}"!0  �tz "9sk�"D@L@3<VH  G �<## FtҬq>cR2HH ֌%``ff�X3�k͜)"\30 �5 H(4Bj�&XfDB(<`J_,@V5#+d� "<d@*=-\묄5 2"az`4R53�3i81VZ11z 2` DH0pQ`tI30FМ1\fM)21=4zݯiE,-U%3N*aޒJ݅yI0VX9/n)6oaF1=!ѹ?ΘoNU$^Y0TQ;LM!i*=ſS`,_gU%iۛ>7_Џ|GNiw;N{iw;N{iyg/4ˌȈ@Diފke QҒnw8;PhOjЉTZ)XҬ5kY1+*D+ndF � ް $C4HDn�tk*0w<?M;h)5�hD@D �Eo f@Y$VEj@@D�`p4?*I �B @ H 5 .+b` jFP&iXt5jF 4# B ,�k QFu3rp&R25C�@A @b i /â2G�$<Ӝ4��G"A.ǁ:aWiG !�7!DMyj��&`LTHK:Uw*CK`IA'PeE}+D {du 0�(Ps̔0"DOx";K�Cۘ�fGf!Ȩ:1QUKSH�ݲ34*V',LeAKUbQT,(yB `PR+%I0]o"/^:oV[/(?)1kY9a^ݖUc7&3 ⳲШJ X&k)mKL^[.kBzK2<nFB76ZvFuQW-&J{2 XU*"K&6̭em9B(A(wPUqWepMN`Rf".)M`E6BM"Ao6m+c2Z!4k{Dt-2EC/,s=.BT0 j_TE].r4?\Gɗp_߼~ڨ}o8V}\Ca8r4(] Vk/}c)e6{J* >2v̀yH50RVWo !V`nhBHUU,L+b›@SYϭ0:_/j. 7`+;&Bp>p+B*W>*׌یFB8$G·6(!PCKm옱8}P#UcWgҧDnc!s�Ʊ0v^ c!:˱( Y%JГ[I66͕S�F&ͭP0.3l|A^>AKg|ƈ*T}Ɔ!vOM^*JUf+Z;j<L;[^yɇ 5firFcT!PsP} y"gYa{kɜ!KR8!l= VUDY:PzXCsJ;t،U<T3S?K4{nT}2x>#>3T׆5l'\ %'h:R?5eC �ql U5X3 x—iN vdߣ-Qg8Jڞ4{^-W sm%V}pA� !\xȫ<!`"$:BjK'd= `,=�Rr7 <+pIƱ&zǪ~+_ 0X XGAdqaR8$ب<+>MT?( l:θa l0m%5F0IŴ0Ju@!Q\Oxt;A_xA*H$r4Ǔx2L&$ a4 iQIaG2TD)5#h !S , F@(* ml 4  iխ"TiE>|TQv䴇i38X\ hMhb$&d >B�`<}2�3Ya _bf!4F<f#2"3JD>:.*GQrTt>aHO%M@ LR�*CN"Ar-~_\HY# A)P dKx {0Nͨ$("D{w"%kVR)Z#'y `JI% 9[>;oĐuƕlhNlB0d'Q( |**Id$JgKHyV\� !{z$�),e%\Pf)v eg 3co2 0~@O>,b.QNMiNF<|hgl̤Y} O%G,Xj)]e3[ |g{ tUO6OFb6NF21r3JrXq}C\ݘ/Xv˛.iʍ2:n'Mld Co0O4uBEX9)#@َ> !`e`~at`b᛫_}v곃5x"Wbqv U%S.KYb$*2geڣFLMTXv[g,5&l^*H7f46(u` h86UQ!- Օ B= Xk2y嚷RCO2c Uc7'B(m)qP$WQur `.-b|P8DfO2(c[[ٕ&.Q ھ"Tq5P1"Ju:T"1!V<#< F]^IVj쁲?+qCK:]q] 7 =vg?SUUYw`wn,rq6_Cy~*<]. UTX%o Bf4 o҉;0x#B,8p ܦu~s5ٲ !`x圳!DH Mi1~`1|SN`1k'UlTck<#ڣ0=A63U_վ;=Y,u8Usb( !5OV?T8>,eKXOODq{`xh{͵BmW-7E7G0t>3:ϯܾ;A ML+* #`9盪υ}c >FH= l@A߄sscQ  h5wa FjQJƼw \qCC5x 3džLn,_ {   "D:oJ)T9ZqYJXҨ<iDΒyat;e9%TJEL==`<ηU0c56 Ga٠l\Ϯ˜נ8TO?j"W䲮.&k0kX#O~$atp0B:>rZ>xy( C'5k��gim}'~vW-URʼs�X# `z8=&Kr%MS`v=̻Wup8y#.O|HHwW2of쾟�(X̎yDܺ5ae(O ٞW,\skR�zSH;8dɴ`g8�t/ixzǨ" [ݣP$}0H6urVypn/ŏAt&Gcw ʀ`\ԡ( �;pBv=!$;IwpGj,Z!>sӵx@};FHg%xaJ|72%x#=yY3ϋB6<\аy.2Aq Ww-œCkՁ_<IN>>2 [֋3!`8,<C648T{[8#$Iy<Ћ>_C] 3ǛPF+;Ӆ,]%!d]<]P!2@_:! ZD]Ȇ!si>l�P ERt~9!B7ȝ <Eiܢ3!Z̺d:!rxC>pvl?X| KWl@qhyC*NqP3 fx]%Usv<TCHFcztD;2mߨ] gt~`WqO BlF8-?3f׼Ț'@pByg`%C<!<B BHbrRɏlB< 6Q)X噣7XDG!DsĞĿsE{9:pO¨s9DZ=u0˛6R?6t ?@H rꃘet[1x�1ԇ0\s`#mP&7 tU7?qZ1zbT%48GwWF$#d;Ǩ3@دsGs8/r"'RYϜ.bg)CHl투C{WR*)Bc] Ddin뺮jn6fl֛fl۪nhAbnl)vl�r?ΑQ2`A-= >ڢ%M`. ^J[\KZ]^%fGmG' '""f^%ڟ�@ƀP3%K$ "0jlz\zYvTUS׍ZK�P)B Y!Bb۱D4M˟UU׵i'HB;M2 zctsܭq$ ш N�+w'.31܌tE;xԀW ]m�zIq -*>4bxW s{1(kPN߳rӈ L ~of$K3^(Dg!$@mŊ߷8G8Bp @ILDXHLy=a@#\.G#xu8p QJ:<`g}|7*vP2~=6쐣rAA $Ze8=CEW/n0 n!@E "BYe;<0] #uDH4c`PBG!B&l?5Yrl/GHO]a L`71@<I ]:;ED ]!EAHUkG1 N7IB!Bp! 9!ĵrPt="bzȡgRC !oH)v ht8*"XMO1OUC*O !6T>w,a8. | �*{TD>,u~W] r:?\ɒ,WWlNR4hDe ca+&}@D,*.C!$1":H/u@<!k¨/pP2Ho85L&% w1Bc+pB=]>>I(.0jsZEϘ #^HBl&>�G/>~֓>n/ I BթHFGs [; } :h!]$:?>L@$e.ٌ;~G5*j>Nv9G&9<Š|l? fgN<J3A)P!~̴E%"SGR�K�F�YK]f4`CFc-ſƶ6""Ԏdnq;DWǰtP?F�@soЮ+Q (A/;<'�-5MOAu}Q/0W�k%%'RHShv Md i-4MclS*[F),JRHR)J(!B"ll,E@bߎ!hwPh}Z!ۙ&Э;i5UJ3H9~x( n u|;ߎoǷv|;ߎoǷv|;ߎoǷ_灈(PH REEES"�D`Xc4hmBF7!j%ah`�h[ Ƈ7[* ־WDBF-ݸew �@;-%@jGt8i* +;ėv%rG7alOuS:fn >@�HB%AbIZ,Ƿp|E M<�9`mVvjDT*JPB ) q_dwCI�hG<04Mc!U� X"QthuH Obh`s`_;6jp6ݖП 8ۺi3B_Eӽ16G2ܩ[Йgݴiw<_n-9tуw~:!߲,oWax'u%=B6"`!n&M`3p3k+ `D+M!BN_}{P󳹃 IӦ?£[ytޖۺ-p VL|';'  :sn /plmhB͝ DH4GMB[F./` vӅ0>.bc!8ٌ`{"Y,nj"?79ϫV*sȾt:�v·Nzn]"9A61;!;>@G|ڏK(L_7-3a EH)B@!CHl `ns K=r/ C|A"NEvgezD?k&z*rP#L !${GOoN~w/Hu>0*!"~+GHG'0_0P1C@wS!am#S{(E2_A|d"g|Juڤ!EHFCwvAM@ ɞw7Hu f~(B¨LtyQ2m3B L0L^9hTi9hYBm`_Qݙz-j9: ڸ!"΁0 NsDC:G )!&ԇ yIX=H}(3='<Y׿9>Ā{ b}:]2  [=< Ăk_t"D$wE4}`JՃ . fv0jF! :Aϝc8did/\Q0@XQ4|w=F!tvqP ]]Ыl7f,7z\r\,WrZo7Unܦm }J%p@" lam`D_!L_x "_|#;&G+0𵿐3Hq_JӘ_}^2%m%UG�JQB*Bue߿]o|??,糣t6)ˢTJ)DjmMTunכzY֫flu]iXBJU(UHPh? Wr}}] _WFkUNcBw  ?w?>2Di&ػ8HzOQH%q88t! ;c}u!�K1kG_`;|蓒h؃Qj? z "&My_4S$㗾gF nw0|⺄>ti.FWGAW7l!6 @H r` p^ ;!QI$"vSM}5pm~B~?Pg.@NF~s~c` .ZCro,dp߀z7 ox3bl'7g۰pAi&EPcdRKl&HPanE"0EsAyKbiO)u!.wvW#$BqXުwﶨQB;B0E2Hҽ OEB(EH0&~!G`FBB(C (0R ۏ2r(�MH(` O)�}0! řtq&� +}BJMGH=&z9kd:RxgP?!ȍh |ve#t~RaHR1kOaqH үmsGy/ܯɉ>!v#܇.bl LQ 49qCh\/Q;9s<{)?R˻EJ!{D1\?R^#'(oP/s wQfA/6݀>E{ԗ�vos^/ۇt~P!@=SɫX>v }*j>8B<6| !?L2 :=$< HGs '9;Hb}.Q;jNwZ"Cdkm^%K`-kԐ0xV%)+\Z'*R}vMΰ[EBeiGޣm8uJY@K~𥬪b9OR _%VhDh BFO[R kp8:jF "d%@ւ5`m#FEmʲBy ߎo�@SB;ki4M5d"Q@i�l 4@! du~iǟ9? .�Ei-lYC3OJkw⼦NyyuI&ün`sA1ŭclGi<'M 1N ْt %|M�;;c?QXvȳ tqϝX&#=ǒ.c.Tsmi`קF D !rP|'y4L<Y >NdD7˓ fI  wa_U].5WW"j/؀-|A9 } kkG}c�!, :q>FHa7Nd< =BDpr7|!q{ NeGHm͊ꛂ:ws켻WsvB ܙF}]d<[ojΎ,@xb\ACHy!8!ԇW#]mF! "R č1@FH3 ×:k SP1$ !Yh,bOkXNt@%VOՍ׳Lu`nɎ HexP0G0 `dtCH\CO1tr*+�CT>BBOP3lPⴆҔDQ`R'5EHFd zbf, H3Ĉ 獄AO}Cur *>7Iq{#Ay$c b+$y�uDA¸�B`;Gp0L#17]u@#:G@ tP'@&gGS_2rs tWcP!˲k$,t~:EH ]SFCh-Q3׀娌/cBHv9a9#!`s:}V?|58Ne#011 9A8Ƕ\F!$D s|Q y1ZU]7rY,Vr\VjYoc,_}28w߇Adɒd,Y Y ." AK@�?�AF aC8%oaZG^|d5\eAAu]]3QO!?{0 Y2I)&Td4xӟ/߯L T�PTXrWkxmfmj.rZ7vVƷoXhNB(ʲR1몪UR )diǕ;v}ˡH:D-HGۛjlId ,Xt\[X]O�_h^td:!gBm&w[(O*SYK||FEPzFЗ->,H#L88VO^8_j"?Ӫ!S.3΄~L^k~G�09 `.<mfzzuG`D(3 /*nKw_@}bgL8(kQv f pL}}5aeQY@ 8EHO oK䳫Fb㯹sdLȪΑ wC^v0!s`+{O$9RṧfC]|{{~g!{[7G0w/a!C؉vNA>:n02 JvvRzC6N{?ė/oNމчqGpC2L�aq9Gg^ϲ9C;6at+ .(vH}`9F&h^8BUh!"V)|6iz(Tj޹h],;9~\AO[#A>k_j/tc#e G 7HKa&BEgG = 49yN/Y?qw2էU1Z׍!cA I$w+Z�I"'Q �!P !~pVvȖDւ0�$J B;Jaw%_Ta۬n�}֕ϒЀ2qԞesnEؾwu? v=a��VJKϮ_",w RCT2<<:6FoEeQ'''֚ b*u(oM[lMG B(TQI9-ʉR $4]y�B%mg7NjV}5nʈ{]�PwE]g?UJ}q&|Hֶ^@4( �hݐb6+** �$Bk(h�Qn<n ,K{773u(8{FZ݃v|;^?/|;v!s_v|;ߎoǷv|;ߎoǷ �477x'Q0AADdA'ݬ-Bh"ZR7YFJ) B*FD%_ vt%WvJJZ7ZK!TRK�eȊcZ[1�$�zhI,X!�l%c!`;fm@MQP嵄b2!(vM6 D�*D�T؅nn;Zm�YK~k!c-XPZ"Zvڱy D;NDdZ Q3+H! "hkmnlRQEOkM{%(U@XւÃGDVb)E u-5V  A A ,P%nr H6ڊ˺u&EQRi-I% UXF@H +}-.Y(!cp)"ei+~݃#a%6<o@ DrN jkdRSRJ ()� \ U�7pFYwN`7Sg\·6C͝(v]! ,v._ 2nnÝ nWxC?AyymX�,l{9{Fk}&}PE|-^ Pљ�N_|˲pF{?d7[ml4r]B<w7}{Co�v\ɘ8N6y<lv>·ahנ';=r !L ~(M"&39BEG |sfN°ҿ tg܋X n_Sds%շ=8b<m= {P1�mUH8'5 !ݲ�BB- ! ]YBݜP1<!uIww&F8!oap?%Аlc/&gw;9<&C~g67DftC&=$$\Jg,۫{HAwvsF"#]c'0ȱ q8; |A_˺rR!ShC' ^Eν*?*oa6Q�3 ;#tW0r/;D`$! (vL^'.r;B"6Apزk),`愈]$i$;(v}?3J'o sv(9R7#;>.PT+CxR_O$Kb󆺰Cc�ssLMp$9S_л2T�]-DvI#8λH0#;~"%N.u0dt>o @k:7pW u~?B#Bhc\AWixPw/`5~+=Ώr4i9&iҠ# &Ъ}t;WSDI(W?*rHMHqAXv&ygי\ S]W۪ꪮvg@ѮĝY.V@3# Q"!5F76nB �Y tT[v-& !�@C Mڐ1dh펁QܢI~I !,!D!]EcIn leY(xO;<Ё|vp{7ƌcAt;a&vF;U?"ME@*@`i(TJRc`ض1R*)DBȢ(\=MwB4T�KDdm;* 5QDauڍmS _$(]}/vvv㵍۪^ofڬVzSmi2`R)dssmc'78ؙoh{ Cn,\cl]Mc-B"J lg8TjskSt] P I`F|DIdvō?%0tG� x9UB]= D_Hbgapn|nWlN1wd?;-5" X&qol蝑A77 b6"E`~: s:(lt"ݝR$9Pæ ]@91BDvhF!ٛ@ۺbyw wp h8qK3l r0<4!)?AuowQg9lc#ę!8 0%)")>Yʀ"_\ۥf�:('6`ջٻ!ToTӏ0!g'ٶ9Y9&HCo&0*Hcpug68G"~<FCrP+gc|~0-QJPbcHGH5chnSI{C1b�o;>8 ),_L=vrHeأ3>jt+6Ĩ^!!㹜}̧AsݼHK~"y_rJ!<6<B ,sB&gc\ ;+.!FHH0O*ԗ!ݼ;G֜#;9aBF#IxMf~{#A�EsLsKYO}>?`O v{&L):?wKh 9\Α Fq�93.Bg{2 wP#SWqunoc$Α62>l<d.�c3 a~��v$}v&?N !Bc~HXvtW,&OCƘ$T�@` }c.-BQv]?:Pr8@UBA04nZ , B4|ᦵGDlj;0,%Adm "cl; @ƘnvmdTB ƴX$@!؆ @V5$3"u"2JRd-h4XlW#XkAh|ZfårRXk@[-eaP;,NFz=8%ZZmLc�BH  bw!cVjEY4VJ !-R%pL55CDio+v^>?H#]019eBGo輘?Q6Mj CP&67Y ,~*</c.זjb&b'< exKcv5_dWLN`Q'xrNe]&G.fopw6C!8A'qe^fA.gM!mi|0<#5T0j,mzlGHһc+w<;rzw x}X&(3`QB sLutX8{W!2i !>}'c#>tkk&8KGvLp ƭt<BE;cR x"Ȩ^~ss@!C P"Xx 0`{%@\p@x~9Fk"�1pQ{B8Ed;sv bnF#_a}0 $C^=K' 78ĈxE9vl!'!] + 3UaΎKP, BPʳC\q-򤈞v s*9D:9;l"|OztD;:?c8~ ,aoyS!|6OVw#|GHGE1#ICBGHר_yS2+)tw)H9#rE�g>=`gCz"9ĨH;?tL$20*+ Qy-;^ci$ rl:l$~81ʼn$N}ah1G}0@}s u0yHcGY HQ&Α| Fy]U|;G$|t6DʸSda7/|"#du)BOunInK<c9B 9Gx-9K/no2�{,wI4җDK3: ]M"AQV hAD 1(RQP~XBK;,$l}lc!k4Vצ1`A!i2((d2L!l�5эVk}0Vu6US�@�cnֶ=Zk3 [OYV t+�Mh囹hv-�voJZm~릩n(I)$ ZR!J (;BHQt7 ЎAe7twժ5�kvU*\IZۺ16[c(H(1{BD!%m#!% a�%)@ !i+X JJ CTk]fԫzޮrXm6njB(Bv PQX*oR*)LW;dAkm"D-d)'GvL � FDFL_FS @eoqSf]4dɈt8s3OEdS>d++70<0 V ^[t1}BM̄zQ&F\gl~ >VBAu ~Fs !F Bb%!Ig?S xSt:9vDXv9XzMCewk8+D+ezNBZ7$VN&y*�$B} ڟC31o4 #v zAX7z]�|8 P?$!@؃"~Ba 8;b.e_eˡ,B\ADZgLC9R(D_C}@!o8w[b`󕾂{ϣ;{_Ig+v*gtP0c&Z|y;)6ݐQqأbcC� <�!s sv黑%}7'eW) r8D=!B+#+PaS93@f5>"$ C@DQH0Ӏ}4�y9^!=]VAe{xGצ~</8cL22a@G˦.}y$C}c:(mq7xM§ft~sX\wO}C&y0̦ "3gA!r "1ƮB'ٛ"߾4)+vG{2HsLTO*2Ui #7E9NOq#.;H@ҟ) +BR{?Tv&A -*v`�qD+A�^�P`|5Y]( !P daJ/kbq#,!4֛6Bcj HDoq8D (塻l7n@dZ6ucDMʒ(TR; (�%xh7 Zmd>( Qnl#*%BZ]်-]SK.&$F �*i5F[iD!ZS7u]] H% ,жav�T(n@lPJJ͊.J�ahho5�)նn  KB Dk֍Z, )0ZK0Rs;,%E"Z@�nRFm[lQ(SȻ57ӉCM;Bq}Pe o ̵"+j-o~N |~,vTԲhVw+R0PJΪGa_ˡ>X<9I$P.k`v]Xp=5gU6tsxps7pG: iy&ݤ.%mEL!7V/jc/D8pي(i -Q~���IDATrI 1xybr gA]OB<.k5Q+ гuf "$dTDml$Eƒ֞՛#ΧW"dGGu͝F!cpX5y7؀4#.C  u 򵕣e18Bhgl]}1BAؼygׇ/0x!?7~ׯ#1zA#2 Uj[0R҄]FBݫbg q7.CLNvs /So+ Dg:?~g'fB2#WcBg '|ް{Bvrk/Egubt6`QiQILcÛA7A {sl {(fF D o mԗcTA>t$=<#|0BWō `&/ݘ8qt$7?;_ 2ol1w.y�B*aOC9ȣۙo#_|#%P޶{�3a<B]�dw%ht=`ɒӃQnLc�얫:D⠏,ofɒPl@;W@ _8tv>T�Uv_""AB !E,JiT5 L37np/#D;ܳFmjGD֒!0I�JHi- + LHX,ïR 2V~�fNڅ c, ZkTuSkS)%- ,XK` "*U!Pjd D�pb@k-TR )д�` Ym@H!$ 0Ѥnj6Z�)% Kk%C$�QHD-;JʺuEd6 Sn7nwv4RFz[hQߎ MA)�&\מ:ԅ:_z?v.kTݰs_aLX� G&ϏJ]}@L1Q.b JSBI(i^^ș6c0_bw8> Ź{B*Ƿxll/6J!V�Ư5¿ZL>}{:o̚ c3BHz[)}mIN~"L*&s~1yw�S dѕ[koUGoؾ 6zqLf61 A!*yj8w5 of:zTpg�;x^+y7W]B`\YO|¯ɑso[ Wc5/zl㛺_#CɡҘ?;N}Y9#j ®73fZH4m2?]z^qQt0x/ ~5J6OA3*xs5BN{3 "QNMN\6U3ݭ |GR*m߾ +=B x|R{\6}<kCHP8\ B†"*9dbc!Q:yt%.͖mËVGAo~cƤǝ#2D.269l�AɇCgG^ҠѣyH@X]�tox(Yi2!r&Sxߌ%Eu~>LNuiY#Y:o df20G<H}cOn�s|L \A B`=0ҟ#>82*B dΑ?<ؼ1S,B1I2t!Yl1ၜmE1,77Xa`* br. h"/=,Ym!-K<9;|篿vrvU5Dv;Z0''vv#hhI l~<1P5ְ1LeEH;8ReQ )-t+2 mUrBCMc* z:+Sdڭ<v'm7ieADLgRM�1Kڶg8>=|WNΎT![FEfl6- ȯ<!QJHݬɴwX($?UZeaOʳdBVH zk5 cTf|>Mv{A7HlvWژz2_ӳr"tg5� )8I9!R4Z7(gBkkgK,˻b^Z !DYT)EDFkmkoǿH6MTU]7.]fF) hN:CA? [~b/�[n}Wx9Ljߟ<�3͝x.;c'[LU ?G '<=Ucg>7wm횑Eѐ'uob2؀@!7x=ֲ) m@7�IòcB~m?EG&,`ne=w!^|7'c=.b�raōAGEس|c;!0o͔KO0F6y* Dyl$2C^ AϡASqsnXS?Gn.#Bgs͖4xw:>l#>BW#$Bq@}!ٜwv{{=ߌI,GJ1B9!̧0l0!6 ^l<p, iDt9f1ϒ!N\9b 5xԌ~GSPu/H*ˡD9/;#dV?dCu>|q:?@1ףcQzHRNp|.;'~0;EHvT#_!z^sk~317`;8 _"'˻EJ!{D1CzkynmW'9봄CHzUZ</92茶1`.TǗ{abcA{ldB:l"$L5LOe_hEHyJn`=0!Ňx�dS=x# ?16rc2*DAS/I3f,EKÅÒ5A(dR>:?/�f֓~wW( "�KB r6ΦrSoonֵ֫PXţzQVnڕ@W(cL4- 6@JRHi] GϞ?}h}_}t^oeY !ş{Ӟ,t6) VźֈALDk,WtMU P~{h4DDd:*YlvS5ucv 6nlk[ʱZ[mP!Ώ^~vttzUR*"2VcQækv!} H>]z h4Tً^j6Z$H�Ģ(ONT,7Vvdaf<{t/GZ"iB@�ul6j^RɤRBؒBfIX6M hЁQAl@b~w$HC޻ $ )*~YQ'qs ݶgq)̢Mߞᠧ,g"Y)ȹW͝|<WxpUoa>0ψp@`v!$MQVWބ]xOBzX(3Ev 5c+fMpH=f3e+gɩ .q9N&D�jO+;grW<[0Pcްzc\P:@!9Q gr9"btO:Kb!]ټ~t.BdS}Sa\{wC:AY.�f4R@S�@(>,b�94Vؼj+Qqyg�a!zUQK_Ds_ 挳B9}&u䜿ΊW~Eݱ"0* ve|Oǭݴ8/!W?t&QVPi$ŝcGa~hBy%&ǚ$␇D7)#GD0Sq{RK{o~�>ec,/8TO G#$S94v-v ꋝHor" 3yt#02&"2HcDctrB}=02O+vkhGM7r" �_s\�-Syv�0" jW[ lTr#P9?~~zqqX.t}{BA<y勋N\UU]U5uny-bіlkR(֫dmJ!MSNŋO^|rvV ?bADBD �LӓӃǏny_mƢ 3Uģ QL۷E G "clY?:99]\~ AR)$к1h]kHHAV7M :}t/_<t*%:ˏjTI1-dW�TR*I A!ǧ/_4u\^^5MƷkgnjalc!h@֓٣*%Mݐ& @_Mb1 c0OOv#RjԕA*K%i71T!mc""I99??{vOo躮*( (( ID:;RZZkl_!Dֈ@Wv}MNܘ`_ܾ"�fwӗ:W|0t ӷӈu?wI V�{ iA7Ok'6LܖywUs0" blnv7O?[幓D >Q07D^;qL0!�^Nqx"$^"S}!VxV_{p =~#7p_}kB3$]h&yt"ugOFZٛ BXȁ _ `mܼbZXG};5j" 3G!;`!J#઻y~ 0!(vN}9tNByP!ԇ $1ֆ0 ˮ&T"F Y !7b;y@C#|svSpz};�!0!mA x ڛwH$~@<!Y- }΂e#zPsˡȊI #9\CB Į!^$3}J�IP1 DrR Đ @Ѯcܩ!!$vv1B E@)B BHX!Eh- PK)B(BH0R8'u>2|`ƻH0X$aT^ǑbT"A0wNQ_�`'p"$OC{C9GO}s*Fz#)3c=s#0j9ah$Y+H*G}%`ȳq$s΅(L"39f@:4Zyo$߫טWq{R�RPw]2q9 =jA s5EHrWs@!Hu>d@0 ͘9X;Ԅ RI}=Ax&]gJQ�̼y7bu7:O~W`Cl` 2lT9x4)Yꁈ"KZV�XZ��vǥdNHKwMckSN˧Zt2}?QypDvZKK ED<?k%RNgIYJ!vwV#Bv?aAgW'SêEpx,/zYo5nP;,,V[ `RGLJO=*BSEARdńL!?!XREqzvyʣf}{Z!1H"(qRt2vYoMh](!P@iH%NG r( yr~[\$RʢikPBBJDhmꢔg ޼^߂65j SRY�mZk�hU1),'i[QJN;hI�iFJ %Z�8L]iӐ5ktU1=75Y2MmuSWV*JRS!,ѱ8˅\PI^J>_As2w X�D!QXFR ִ;߹�j <jŧ82;p9|t@Gcv ;cN#By) F}DOKr)=T̘aDouڽDj@Y G sd#DȟvMțV:?gF#$L؃ʩ&!?P+\Y ` r=#P!ěw fD=GNxgw2 !u9d-v]"�`TQN AjB[ %A@+gm7 GS_6khBtKRvvG 2pUW={x 2!@Y P^nMVfpGMC2x9'{Ij"`-I.>3uP3:*v9QnB`�!YAJV|NB! &dA]�D2O0n'tN-KǀZy^]Ԝ3`q·[{ Eɻ  >@w;B$$ٜL+x�>T;[/#HOS؆|g&BP9{~E@0w5¯4`6O6"Zثsndc1g/;3agS[{u~O fǀC??9>Lcb0m0l~g3y*:=`k7ى,gs'Pǵ9ĿAg$B;@0j':yҷ ^ 6�5P-�j6R ik S�dŝ%Me55$QyL20gϟ>o_./7v][2PBƒ6RJ![U[DRJ)   fgdq�(�,,'ggpZ֍B!@`ctctYڢ(@J ""l?KƠr UUZ !2XCP Xk,%Dd!h %%�!mȒ5|q5h]W!AhWed^^<9=WS]Ud-Y h-)$ 1==9;~2յ~ӧwjĚH")@j)P 4>g(:xA,VFkT(m`HZFXc @cA0$ X А UA1v z � H�Z`n땡CcZ@d�!e!dWBk-XcZbP[Y΄hdXe mPBR6R[;ufMRFZ]U}�$@A�d �F;ތXvc{k샐M`C䡹_lѳ'EAD5PD4SmňG^g= LwgS黉| CUn "a[ة}%;wLlxyqMNU/2ݣg; Y|>%mv HvR};פ$е8] 9#"b^ 4xAHs^f n{M{||-Ka5ҧ'P甇u`wUPW)dAzk.uVgXZ/.ƒnW`}q nuzMIa}楌+L,Jpt[sMw%$Aܳ"ӄB,QA@'*FMKe<w�y[ &?f"c@?L2O\v H/Y?κ ~}]8`%?d WrS�@8l:!8{B~b:?v٩F<wðw~HAOidO19s&GEI?2g#&I;ۧ䫳Z?3 vZڀe`0_P!䍠?vhl"T؏m2}f�@Akn,ei-kBRN}1Xyq+p=Q=/%3 H{,o_ p{=}] l7>\1(U.IDr?:s&w苭\~g7%xA<.$ zკPƦ n ܍�#FqlFq/@(BKl,u#LA 6!rR"+HVD�(PF׆+h6dz!'o~?[/+K,AZ*%UcM#QRRѶliiue*~qtoז.N'3V?;:R'Gi9l(,T`!6 ,$ @aAE� Xl7˫lnXTAe@%U1)MM$d5*BC$ZJjHUhK &BDCɒ)'7?tySjjVZkTmO Īހ㗯f?{X v�I(!0%,/ߑThT!P�(@Buc*Tf>9;y&'@ _O./oZ%$v-PEZ[k1uC 5HYʂkk]k3 ~xOde- ) $!֍ EcZ%PCB[Q@D@I Db6@(ԕ@BJU(Qn6ZXFTuc\^cji B6Z$ )�ABɉZ0(!-a9 !gRDƹ/nGӂ[av/zZm=HmL]J)DR1-Sc7rف@06x R10i7 cFg#=%=2,EG:V6@:{#ןwBOXHL)jˠ@Wxn=F:lMRud�nB´::7q ;9oR;}  >c`$ٶ^M쌻;_`#@;GݕSd./q!FZ _?dZd[;a=;E<:+oe06Bwss9zw?{7"]azd;<NIIpqlHB @ҡa%yAlFEݙѝ!tvlˮ+Pm>9&>1#4�"C06 rL`[Ȅސwv}1pvVt=&0„>,d_wNQA=::>cQ$ ڽQD"�ksvmN ]R4Q&"86y Xt@L0lDdFA  ws#oɝg]lb@9CF<¿Ǘ{G7^ GM#2lmy7NDG#As=/=low gIo0!!#de>:,3:3aD9f_ѹ&3w؃L$ʛk뇘] HNn`n3!5)xKft}ށGKhcFoa~2yx^-o7WWJϞN˲ZڢVG[_KB$6d61;~9+ћ_>@�ɬʲ jY/vS%IAT]N4NPLgGu5YKdP)LmCP߽x7WWWBl>?;7֮fmf> "lbqg.Jyp8fvmVmYkѢж׸u%My&DIզ!!Deuc>>:,5,Qj$$ if]@QZ6tj6+kjUt @M5 ã͆ �z{_Glv|oЈo?, Knl+5ںѦnFp/Ϗ'1\8^__H.88BյEEZoA T Ӄ驐lwjUf eQNd* 6Z7FmlQaQuUou]mR*Yb "cƐR &PEh ͊'bu]b6;XuSݠn4a]Lj kRYAMmmXX4ovO$;�mφE "nr"˲PJ�"cZ_ d8G񒇗mݳs=\y@z5=&܉ h)vgd՛-v+]{/j8*v#'nsw-һEd@ULdͭFBҷ(ʮn65ndVf&;EEʂ|Ɏ:su΁$/fؽ1BMp2XBvͫwz�we%�#~S؃_1&FʎԷKŒS쇹! B`7&8 $5C(Oe%V$Am_+o:9C M9q/8|:Aےr(*vz`sp�*3EhΏ8oNIlP(Bތ  "A@S{"/ v:79!_"$BZ*̸޷~_ kQ#r># 8(<S E3t~_hő /jϧ>G67ҿƃ/nԗW Ǘ S$QDh<+JD="0!)@y.Zy 'rqU[.HЮŴy&IGOOӳ'?VNǧSJ nl Y('ţyQj?fI&(,T I޿}1Ņilnd}:>CAխUZ Ms3wI1{ww7PӃgϞɧ޼{_MprZsybvxtLmWfqZ{f~<=|<.?WvMv+'\<}t>==窮um6Ί_={b6MUXWziOO󃦩./?y/??>t͵Z\/n-L/=2?(n~~S rʙ<8'zqg% ucje׸\SUןo߿{q^ Y0B c XkLmh6yd4>}6/=Z,nFJ f~TxCnͧz>2tqz͋QzvEyh"b]SgO&͛f+ _yYU뺲Jea,�d!RT1jSUkcbB'O=}`8ZmNFƮ˦i�˃by_mkqYe!6릮-`~A俧.Շww|i ݹm["%BI!,6W1A˦:F$GK`c9v)3`iΣngD/knkNA&GlX'zŊcN)"-tB$'a;t`c\YƋMl}�/6޶̬z]TH"/OJW1D B !m .3v ?x 2p%?1\ r2a@#MyҶ{ GHW~">mg7\+w9@"k}m&9L1=PM.*4vzPHb{NvbP Ջ[AqBXlk>hw~" !G B `Oe< CH@eB0EH%"gDqPG !s$Oe!B<o]a nCO>'Y8HF#$pv B;ED ]!E~9B5 ~ B(D"$cǖ H.e5|ބqv!19BNdJ8 kd?ƕoPťr(rSx`{9U\`#WqLANp^U\ y3wwxP$3u>dB= y,S"wv> P,@>&:Tqc{Bw!auv z,HB9ԏ !9,B<Hh/HBTF<!k¨/EH #1 F7>d w%Bc+pQ9+;x'sII$cd¨瘆Q{y];pЄE΄ P&NH-Vq=E> E#/(cOg=)~ R!J7 (!"q@C/B@#1_# 7C9D}~8.Ję.E>#v~^x*rΑD;O'|)}92_e8dXIX�B$!H*('0?G(ˣGgv6 7c 'fY7�V#APcւEE?VQ7?_Bɓ=~ؐ)&b:'Mmf~^|wXmYWI1;ztpȚ>Of*q:C:TtZ BJϥ~䧣?L�bB ~{ĄΟ?zt:)<}#K1NgjwD=yyzvvl녑pz~O<(TV@um7|ɯX4`6MO7G'sĩ(﮶Rw<;==DB?9{[y:Ue H(,&b:a9OJ"mZby1BVw>}5' R2@ "I)RӳtݻN/`2GgZ*>mFp<mZ#j)Tj>.T):(DS5_:GYQ׶҇4FOP 9@)�ͤr16RZ@$A j6zՓBHU#9S%Oh-Oͭ5M9:)8NJkAJHM4`I� ,uɗ#̡ijD+P@BH�h?MLi犜K�x0}:ue>*4dkWf^ ' LqwxaFåO`Yt7b7wtgV$_\Pcf 9G !4~F!wZ!i{&?b#4$n?kliTd`\B: 2h2aW`Ypl^q\Vmu ӟǀ5S]0!dr!_gno7b{ w�9@dy-d/D^Ϛ�!8 !2B\ A�ǎ/o»R0$(tu5!{[ $ e erW[n8Kr&ȡ0?6#l/)ޅ,zUqDoهoأ?d!j~HY@x.ʢW"qs}:2cBzu~P]1^0Qq<@[9Cxd L;;`ٙ<&1>K.l$ؑ$j9>` g){[h ă<Cw xc _˿<MQ1 t9Ў8sd+C/*ƙ<H08׉(;`6{\H8;Nq|=lDZsL̹ `K̿CHRĄl1 "cd@)e RmwԤEj{v~~OG4OΟ]Wj,A@�M�hm6j@YCZ?/nzN߯Nn yYVNȈ$1mDRm~u] /_<(OOÇK+ֳ3{x8Z5wӋgGG{x닳Cc|~hV̎<'N.o7'_珤bXnӃiY*+F)^?o{Y6GcKz2Sg?rZ<~vő@8>=}vXNʋ''珥6CZIc �֦m7#&-ԪӓOΕDn4TM]lr|<IMSMJSM*%lu9œG'JO~@uyB]<?\#ڣ￟7w2vUiK, f\n&x#KӧKyl2wl^<~:=\Եݬ7uH(�YjV>9ϭ>|h$kRBD,T[D�`T_>;=6xٮ(LX<?1[,7T5˅^olfsEv^ͷj$2¹gOgJEAvZH((4deڗړt.*=%p)">ɫfv Nsa 'r1bttA Y@̾ vuNتЯb> ~r?76cLkǕY}t7Ikn0$cQ/uPht F2&SZrd A~nsZAуۉmL#<_U]2?a!=b7r^ޏq>#L#V#{]�/><:nzz5bWu/kٙ#^ -/W1|vq?Νډ !WW90kbN*ȗ (y<(!8"W;5d..SA7%z; lU_KQϘqL-G:?@dcIzɛu~Vl,x BpC~�;0w59ӼG;8 1_R E;N,{#A@<t5AɇcE!_$P`@3;VOcP$=d瞒0`&'4bI}RC}Mt~O<H}ʼnɃkG!f+;&Ƹ<OD?uD!!BjQ<:s$U8Ƕ~ 8 lQ!"a!h (1)%Jf W˕~_ӟߜ^]M>oi=:?mO!!D)K,,k L֖}rnt-DCvrʹS*UKR$K) "Zo`r/wf B $S׸Ym7z{^<}57 ˛'xGuU-֋ʬ=::`n.ed>,?%e [Q*?O7ggͯ>yl>_~]]W&8*&И㇣鋋bb~~(u}T-\b׷W'Umnn֗Wwڢ�@�T=/??_ܛlNfŋGT<},ZFbuNOg^Lp:-󹔅%spDO<yzj()ӉT^r^-c%�,|''/?:=Hڮ Ed|.f3}}7׷t*+w?|>,K%$c@ *D$Kn5"E1M珧?}UU/xI1!UB� Td }ˏ=_<9<=-Mc%'xٍ|;ANI) l]DJYH!D5B]LwOQh,lp�_~H yAH=2x7QJ'[w-M:bB,dg23%v+,ф�0@ #փqkgDϘv>L ʞ%sG ߀hLށBB*­{ه^]7/X}c"lLhaN=˗16' 6:*cqi# ݜ~H,m:8~vA!b6xrf&5ٷ^<6>3$�߹W7Bm b'saݰߏ0u %nnw{]v9n/7�@LDES{|B(Cy{B5C !{tHe־t~ 9G7##m,#DHX/yEpAHP9�HQ߮0)B@J&稯@}Ip9=ԗy`WB#mםC`s bmpA[DDBUy0;Ȝ#s}:GNj/y0Gf/uצ>crɿ+ ݹE!ajK$2psv:Bz"bw=U9SEQLG V~ɬB{e<\7b_B( 4E2Y7ӟ?~RH<=߽>98>훟<?}gz<f᧻~|uyE��Jzk/Vl~vt7x坮Ѕk^]߼qS%J)!-5Vz0au%+7jY-뵱4ΕP@d-(UUv˫~O'O/?;=>XW}|MsttppX0<|1,5@@B UH! 𠼹]{nGdzl:Lxx87o>OMS/dylo`?/,UYNhX{ʼn*ǫEY-wo�Mfɳg ?ǿ\~~KVezWBRY�Z^OOhx|~&:99Nw系zNˢ8<<:;;,T Mcw>^]~˥MRR Y0db&3ղZ,W{c5Yûlz R4u4Q PDd ucmc )Qb6)99??P?~|ږSxD)�MAۚP#Y+Y{>{z2)R%- M3#5HP"J)c )  |`4vs.Q]wVHOc7Ƞۄڻ[�6m m3ȓ ~ E ^H0tӔ5B]*k@܀x-XIbswDaFtLv_?N`.VG a, *UWD�+vW!  "@ A W. M!?gL�M`-A󀐀h'@°4w_vٝ=wS?wywvLr`}3$I  wa߲ w40kD.� X$׌0[G)DZ*SY7a�%1,u,PwD$,۽/n;AHW܄h$\!dB!Ag$9H*UcS<GSp�>uJz0s ',(a7 sW"$<yPڇ!YpxsT Eq 1 c!4DK8@µP zO^qKmr2:EIy.81ϵu,:-Yتs L|s9g d`t3'$9Pq!s=C8P9:?D Hu~H}]zu~`;T>BBOΏMe./}]yg::9"`/5{"QStaTHC6Bp,:?+HF yD1AHH}<lߞ;8:GgGSI$90 WQYKIH}>ꋷqH2( "~!1{ȁ5!B1!$He �ACSZ316_ EAR_,t~HG1OAACIVW9@PÞE{# 8|$ d upNsA$9v-QqA YݓAjz2 *0!)#_B$ @[�!X@A`-Ե^7b]61[ ?y{Z?}uZ>]~6[%@PtQ *OlWO}tVZMSiUEE^n릩 PLó66jZI[*DѤ-"MS51;"2ڐd_W/_7o>]W ΕÇv}r2yt^>}xss%e)P6^כfq^\wj[[c((J$a4TfڮjSmF PH9L KY-bXz]UF7iYȫ۟?n5\L&c~\_xo~󫋋 TU z]cm$�K`x {s?7O׏:* u4% Dk59=9|t%ώ/NY%(%??e)nN˗NNʲdiZ(, UJBW_~߿p_>ϏO뺪*[mm1ۍݬtS[e HQH)L&夔D!D!ͦZVz[UmX@BdBH@4z.zhc 4na*>;o_FDhKMmZƒRxȋF\%(.L'#:eP ;1s;ӹpsYn'O} 夘z0yհA e237Q@.]*$0!N@vescSNT. XNW#`š'g;^FC@j8B /c?! >SL/ˆ;j`&pò-@3=; gpI˟#K!rao&Mp �B7<}h f(0<a,0EAf["!u;`!J#`.;E^!># B!AHc%ԑP.cqc0ҩ8܄<x#B@C#|sv|bA)s sH0ÃyA x oB IɉxBZwĄ>gL؄9r9bRH@8;{!@jdŁE2ӧ t^Ei�L$w(u*ygR_NN#".Fa(ED1B S�9!,"". (E LB>Fu8GGrEI$":?З" 2gQ؁-"3;.!iևB޳ҏ9kq1H;-F9è瘆Q!G j0Q38g ;,s 朣;2ԗ[×w Cљ[ dc v< k̫=)PeMs EoΑ91s{9ȃ"$Ϩ rα'W�yd"hgD5̨,H3#}115a9F9Fi�u&SR$w<?3/v9t~s4⍮CSD}dX <M7;$X$ v� %瓣hvt:/gkC7wKG/.GgBv*P  Y(Bi+*|ڮU,YQXU�0 %0 %)i2Sy9)jBj(DT""dX(:xy؜u Q Ҷ! -o?{zlzOۻ۫bu<?ͺG)Ͳ7 i 0`+`z)i1Mf(@kZ(ӃHb:e"էw}/ Kx{z-D!*b2Bk�c͟|R]Y` -Fkv5NJ`Ho뫏F7Gtz Kon7MSY+5Ducŋǯ^=9\J!flg_NO'o߭v%Y?y~q`qYr**Q*9Ur&p Q *+�%E&fϟ?;56Z +(%&@!�QTA*HD(@))䬘LONORBS7uc׫5l:;N'KDq0?LZK;BBJY)(@�I$X ch1 1e㿼S^fa0v VPFkSW E) az'Lq`:QA:%QA<?\[׳CJr)}�ψGztF=3h7|Gkrrɩlm"$Grq1f@3Cy,eɅ!Z9S i;V8xNяԷ!d*!fFM*+1:<jwEgG}Fb#g2>`>6#'^>!9P٘ K斁Ǩ>M!�k~Zߍg>i SV=c."Λw1COv>O?9f*F�w}B.x spCz,*@FFs=]n%!D<D}z9QM}י^H"Ay{TD%}R_EǑ E!1)PYr|;p4M"7^g;( 쥾64Ƅ=`~B*04OƩ:{lkE=C94P`?epYBۇN_3T0gǀC?ɣGF_Ao+?\"!J&8^oY˘Й̩/= `i( ,k!V(!9<8}t~TzZ7Mmme>oh]W?75TU%DH1W涠'|Z7k6Ӣ(58-&@k=SR$$mIk<8?:y`&fkp" fHTDtRIM4غns|x ~}땭n^o^<u ~]k]SS5te.?\ڙ<NNnnR֮0`<?~d})e٫gO^[F\O'Oׯ YTgij)jtuu7wk^xw]Wv2AhQo/|~(]o6p2O�tQft2_vÿZDpvmU@UȢ,ȂnEHspx껗/__"¦zs_ק~hq_O>~x[LG'Ǔ`[mɠih0$TnZkBP%ӳӢѣgO_~<9Q(r:J)mR(YZAdX-H(e!pv j[m7utv,IwϞMm P)")`>;*ݮbxp(fqܑI,㋿""RH!cRQrG^g= LwgW[g@k�\z[Н1ŠSn\oVv1 v3?29i Fs{Rtg6MU$/iH5 ㉾NW *" 5�`'jqKGSH&%#t9ήy>u( *8:yӗrxD_u LAjw"yI`p[Q\K$'ܢEAo!Y&FL̊<`r@ɲu\`{|ڴv4�+i<}QzDVy69B\Q]I i8us,jU1x[]R'$cW&gf;3!ɲ3CEMpVQup2ho?fFr!Hy\SgL$K%D/`J<{4osș!MKk)^�:'&u>7eVƷ?w݃g WV$͟\vcZMvAass !{={#.3gY2l:D 4ި`APEE+F&GgDI$B!B6<N0!Ώ:XhYcu#d=?I}͜{0,¨eJ,v7?Gkuߓ+"ʇ9KN®]Һ*[B3wek\i3[@л傟?ں͛{>K\d09g{-""[SC ݃_e� K�Q 6mQTlAǓj]=Gjc?o֫ I ,UU5||\[d"&$*a6uUka󣉘 .Ώn˟n_hg3駟1`:oJ MO/πd]?ﶇ[ 3u0(nmj)e1-,ŏ?}<yߔ(|/['Rm{y]^5z%%|Xǟ<9?I)q\hyI3iaP?O.NR#�zô׿ݓqZU=:;@@, ^?[#.?lV + YVkh*RrrvrvqPFxwtrPER 0֒ r~cAwMCJRgg%6k& lweQ7WME�6U]Gg^~lVw/_l_<)彾pUJ7Ԡ$&I1m7T4(U ꍮ6g/_=yp2%j>}זtC1Z76HۆrRآ(M t_3Qv _zSxpݫ_|`6ZPYGB�؉n@DZ7` ,J PQ6YVBJYJ)vDm-B4V[k]] Pg^�޺3g DvN=-CdAT !ZnG_{e|Y20+p΀˗�p:XtN^jVھ?\2z.L͟Z3`w2g'`O$kY`e}-^ȕiL3Ǔyc__g&Gom6iQ :86뭴tX$!g}jv ՟Ƿ8MJO!FV ,XCGɃ+jhYg?6"goKx;8y;,hzzd;<NWnTVIj?{|sw9ݹKN�d0N+g@`8Bh F\^z2w? {HoGܽ9g%Tu^OpHO<̼O'8,O !{А[;XQ"d_!0df9{Er0!-s`Y_ x<3Yl|UԷ-�PҘ_ѿǗm8l0nn᯻60<7N:zk˩}96­+�v y%c!swps_9L|RߞB>Mή+ s|r@<8~ }v'H BGz9#+^E8K IY*tEwWtwtSZfS fI#$uw]|Zm%J% �@�BjY5wwP,j^7?H(Dj@EE%Cղfus^mF7p{0MK5ϫ/\i>0Jno+]BCBVvy:@N/HVͧw7wf%%|yUbVL|{=/&`N'vV˛^fbW]ӬjOo ON@խznlry|xv|2(� "!R (6+xikRin\]rÇn�m]jctYN*,ѢO\<D7Ɠ'O%E9AQ5ZRZX躩߾Y}|w_o D!PMח?7ͤuӨ‰5\mO{!`q\~o-Y)Eiq;ՂJ$yQۛ4Pmjvoo^_~U||lv ^UW+ XDhl  ! %͏?\}pKח?eN'Sku5>V@twm*ۛݛm]mj9)m�*enFKivJ% clY0 !,vXBXkY\`"ocǽ�@5hƀ@ D0?4vp7s͝x*(s7ngPAd_f_+g$1x#w5;ug ^7cv$&cEװ39-ܴx׌f0hpz BvTW-WN׬z)Sh>$ HZƘN.QrT!SG3*C'"@ xi}L@r=J7<'0LQ+'Ր F|TVN7qeiĪڡ!582"$y`')rf2ņ BBFS0Q߰b]躇q<o<!!臐>90@xb)!}%w $<9_8>"g <Eg٥V =K"�pTΣ6y#z]]2rQ1ւ"gHyȡB!iKc@}}ήPs*H3?,zGD$t>@cѫ K=&1u:bX )|.{c=:"tBop{#b^W B B Fq&~`յ_�B2N%oW#c(8ǡH0r{>D*FB04 M"AN}(."G̹<= WB?6bHj`Q7 S rv"V@N'HSi$ȕCI"ys!OL$Ry!<&M"0;AJ A rI<B0D"((;Dz wv lg  rAB 8Xy֒1VJA7f7Wf՘VwopYUڃÃ篞7淟?[[R 1!XA/5Y/۫Jo M!ta V.j25 Uk}{u^ll`dnY+HʮÛ?]\[]R@Ymf,dѶ,նilS7ͦ2-mjs~ǻ15(RHSzY,WS�%@Fוn*[oOzkܮͧݺZo L۵^.wO.?,HJ-,jc>[%@$KfSAəRi lVnqnL]jko]}Y-P{r+mR)�0XcVY廟~ۥ[zUm7P(THhUחՇw*%Ŵ Q4Y-OW4�Tcn߿{}uyg !M-o67KXDEX77׋F(noZ \_߿fq2X3.AJNo Q4A)Q)%dݘŻwn d+^r}i}{ZޯZוݬvZVU^jy]WwU-@PD`5Z-ݍ. !XcL;/uޝr}ARZ }0NK#0+F}ϯ-Q`W\{ �ޟ5˒#iا s{dVYI"/'?_)Bw )$253]Y[VVq|03@YC^+'mT?]�O}ӂ+.)9=<:~B>~tQYܹUvٌ _/t<HݧAzb/vzie I%5?ш3Aw']rAhf|\'k6vrίqͬV}1 *Tt/jP10 *6-1"кm#N[�-7\jߺmݐD.y4EHe0= H2O!oH{wDHFlKCe[ }BړncrRo4FYzȧ5]!wQ} RWfSbg_NL l!Achth`)pȤM6"l!BR}'h{F'fc.tnՐ"?[/90v,2[2)r,a{j}q !4 $S7]4Ҷ׫�w(\zeYi{.tp^\ s~ !t}!vfRzZT<`c�OPQqcby$}<)Fiщqk#gߺ~uV~OOL8cX\-r[!9k΍r 6EH}O ϯ$Bg"e4"+(O"3Zdk2=<IKx:$ֽS]=/RS#'qv7vN'begi8DV!"H )8ŨBTQW{v18F'Ϟ=Wwww0a>꓿?^IG8j uLхH#{ޓ#k x<8G`�3BǮ竛fo_޽Q_8;12w:� $pn7On<px7g39*b{<=qs:}8<Cd9xxՓ'׻0 a !("Q}?yL@<^?qg_~ݻ?w8D ^]UYFq 8:Gw!c<޾ Bp{p|p!r:8H zzy~E7] O?%fq\8pz޹sG̈:�wĴ7^<yxqnﮮv]w5yD$΋D!u^b5DUwu !޽ CPL!R::UC`!N{ٵ}w1p nx<1H10swW,2hJ|�12]O?v}w}usn3OͿ!L =h�N[@^z%tk΄ :TIw:b<)i{gU!&:q'׹'c1NR3(G uB?g?3!J6}3neLRTuũ\(\hy)S~Dnh^?W\�x(ɬ" n6cÒK8$}&O�voBșqHm+�FVzͭ^=B\"rh΃FW_et|U9["7$:;;]??1zxq,;hSrA"�%B2h d- _bgGyC39�޼DI^"%E !Ԙ GKKoQ}FU)쯝wl* M"AKa[m<6([Z?5gFi]lwq`FgU\8hǵhP}v|{d7#P}k`cb_Ώw4u=ƹ pfO`)OC /T6U_C=BM=ݰih2?*V ^ۙBv(g gzf=g(I_l\Q`"noS0c^7g)Ria&SҨpo1^dӏǟ}~oq@~;MCw9Q$ ܾ>=3|a]h8bs]QppGy_c!�@Q#;utW_wI`F{;q<1x"rw#x;t%0ѾDӕz!~8�@JLγvOA78D8^ wJ޳qbPeN"3|Fug@p8NT;qAww1رwW1"0W>{ *aO[f8yzL ~!Q뻮cb(4xwC0qr{ý܆;ۻnw{(<sHDw^4޽}̻U:CT{@p܏aqo"EqSQ1޽D?::x)aw~x8!0U؁AB"2a9؇nMQFLu"MTcP0#;7d\}ǴM *đ'3Oث=Ojviű9/B'D1[9 KQP SDu/E @<;dS^ yvin13YZP0-6#eUW�F'Z"d)s l!-,gXV87ælZ\4) �Z*R ̯"%m ! >Wd=A4-JHz5^tsFH%@^d\%.F@t& 6^4>?$nLe];T]_ëUgXTYA@FZň-4+O8TYsV}\6BFJces/j'5<63ml(rZ! l !3xQez那1"5J=VI!BBZyPM3"a!\D˭xLB,PRYQ!P_Cͩ 2 SwC�J:TKfWt #<umJQyc چwkTfem+=fooh!Bk$BޚF,pF@ȖhԷno>Z!2& ffE-g갨 T5xJq1mշ2%6ݖRܯP}g5ƆkE]ccKՂlO႕0NNፄ~ HPS־_TT_\sOV}Q>EP} k/鄕'3v$BZΔAԈ]u!;(#OےNB=B`c7DWDN)BIB[FȪ'hc Uˬ,*Ek`O4n)_ b& Q ]u=@ 0V`>~IwïWx{@DĪQs Dꘘ= aapJuB":ȡwqD@;}*Q7ͨ(qTB;t E 9tucPOJ*AefU^1'ůATx a&r1x19xAGϲp,xG{(�ıUՅ�:#RE;ޓ'BPj(`TDǃcvW5W8&ǘ#N!Bcf{0s*S[;09Nh 1 X���IDAT1FA1!PG`&8Pxha0Ñ$UIc`&W8 ﮘ<k8ĈTH "xds9P 9D2cf4*#8@;9TyG;vwuU"B躎0 +)BH.M/))BdM׈/:FZ9 r~8>LJp|8>LJp|8>LJ_qo&"" %!Վ{!B {zuw6~oÁXT"o9fըb%e"R$V33zGA1u7UO0pN)F Ab%r옝 H CQ ;F.v=S2%ؑ'fJQFR9 AFΡwn#AL G`c;Rfx9(9& )z=p,jJ'(INI:"(�pL̬*J JcD2s;&sLUUXU4zfv.S"v#tCR;H ψ޻ȓNk< ݕ2uYyw'ĤJPvD41!־fP#H;B]T ĠQ;bR(E4*CB%jFQUu1D`v<Se]@QA΋R"!L a9爈;"{KK>G "Stê#D4-+/h컝+<JM0%l)]Rժυcs.\J>sYⓊs%Y* C. ̅cp.B̅ws%Wst^cZ ժٓL%db1N+Y纹\2Fpv%bĢy@#jI:]j,*j'3BR&rwtBE)+^juS#L?Q^z S [`;+Z"�f3B@�--5X4ve #2՘0s(^*X2ӹZԅ- yJ€,)^tRñ}> flX$FVey3ʖ5mX!$z,PBJ|SMJ4), r3EBt)x^!$_EH]-ª2B!jbQq.-_fΜ볥HƮ@HRY{0ɞi7=P;O})r\Zk׬=\bz!HA^@Hlh !LԖs~ ӨT oBt 8qL`=T"819~K j-:e^eQwVbYݒƺ Pfvaqf]]8t%a*k_fqaV,K@ohL'̲?� cW lQ-*X\Q| ! ,(cIBj~ݮmRjp/Ʈ�vz[ʖƯx~k-" 6 cS?ig< URDH2k,nIBMד~IvFPX$=Qa鑖=+ FC ![iK ՗TiyR־YOjg,c R+fa zP*UΩry7^G$Rؿ'a-l|I2Q(@TġqnP!kX(`/+M~dxU_jo؆o/uJ/Y(I5BFH lǚ>nDA0҈!=9sfP%B*Oq W9 nG*o~.P{NܩOq\[8Ÿ8DP8}WhU�v[lQ zB:vpcf&]ޱWw<=7{_!QPu* U"JNQIEI {r, b{X#9# 1;;s~λwhuUs@ q `uW뙝1cQ�ywvW]#*0%yﻮs]S{E1D 1N?dusgD~4px]#}۷zVaV&!RrDw:ը$ss:HYQ%D2 c X|}gv 1FRbbCP#혧40ѴtՑsDȴH;,껮վwc!:u  D'Exv{h0^ՅQ12;822޹޹9w$<OWUα#bHEU]vDNEE9{@D�yHॹa<޽{x<F4_ph.GdZ諪1iqӯ獆(�ϧ;MlXf DPu.2dP:j2 ?ʶ63!-QK@KP,#V#ќIF]ؘ%~ECTK'%OgbqE"'E;-BB/Ɏ#(@e7Rdf"y:/4t`7΀67-BZdj[:kzJlF}{W@"jo^P~Nan"06m-hcpi^:f\!.IbL"$E&ݖM';Y`ZBjU|!6G)^N`=EE֖a)L #T#.7^!XBD{9aRW AcdBHk c?tZ"Ga,nMcm>۱~չ]5{T4Y\%xz{H K:&Id"ѹbcWӉmcF*X\RR !ZYBzwX4'[c}!uoM䷘- ԛ'^*z.;6B M7k/O,bzi-TgW"D_γF)FYoLْVׯb#YOjehZk[I6=m7q=JgP5BUqDjTyU&ƱW>%Bd~aoP{qPi~+FDhmc_:GF5x~97 Kt!ZKݻm_s$/K3lKekOqDX&T!BHe/nL`E`3Lj�BzL齖] !YbIҩ׷+SnQ4)k24q�|�+Vfq$]:J2@Bu בۯ6bNPvS 1 2GuN X GSA�qY�&u r`{0-*c%BTb ]޳s`V&0) 3y& XرFDE( v Q #X" (5ʴcF@{ a1 7o޾yn|"<AiQ !DсX*9"ը1F~Q^c&F!= LYwDʬL�JA*c 9WQ(=I#4� uP@BQ!ޱc0F DP$V9S!SpQ)D࡞x ADbĢ*Dp|�@DE�fr͍c !F"tv{V1#؁ $ H<eNx¶BĤE+1(qRA2ˡF! ]ޫx#UgW{6j%RC"9L-zBv%E;%'WǏ^G/4fִ-OK6Th"^nar-5,E`{lk{aXJ Wf]69uGqNS7QMkiWy"ZRlEԾxDkr<�r-7IrګFjXǡ"hB˅/ً V@Vۊrra/s`)*b{UۛA;8\)M/IW!$|!ܰjum`fm/^HMl*_˂6—\ MY5dŗk,|)EEmDҬoWDʣ+~)|=]5Ճm?ݘYP!{ U 9q!h!\(o>ssv_mxpԪz[m JԽr1mZbvִ)iM x!Y !z!']=5BvK:` !P,B`R[0vtH)B2v8th%BM5tbNatl[2RWja 5bgK` 6 S;s��aI"rnbP~'9V8YNe0yѸukR*ȆW%.<~YՇ 섐EȲ9?*ʭP0tHxx>,J[aL$L=I2@F>H2Vn[U_[lpZy6p!IQ2EQB|eN~$v:oJ՗*F X&ڬC@nԦ'F5j nT VUT)Cjȵ!֍Z`]>"4=AcW<W'8u ߘjv<IحB'x6ı'qT`:B|*M؝0EE]#ap o#!sǮbÑYTx7Zs?oFӏL }jŦaҶq\IFYl{;l|OC XxGS %6z#2a<X^,ՎW Qb=9Lt(nJ(1J*""1 ͫwܿy@ U(HTI`rރ9S!SLʨ5ʎgSm8OK?C!D(ﯼ轢|y;_86 M5 qE@My"D!qRDՠA ؑ91n<�i{"G!::/yDb8`Z f%<'f8f"Rit3K$RbO]D*΃HqC! @~4R(*!@DN$*yv]VQQDF c8�!&b QRdE(:�q r},"Q;&!ƁHiAt^;tιvS.(;I!:�䏀 D 8 PsNTC! "s3wDq8qQbvim6Kr_Y>e:s|W>[7ٞtkamظk򌚵UY<31 Ũ1jlN<3e\_ lJ+;ֺ�%i^l99PosN-(_^%E _L}[;ѳ'dvjNA+)i4x sₙ#&hB-U.64Bo1�V؄A/CR$m]s- vh}6=5,98j' ЖnLyA3.wq6${vfՍIb@k 򥥺> G�_UĜb1؀F rH7=6S,"='WB8gl<MU)Er#JxTQ%X.S(&Zdi ֫,@rýf+{ 51]:<XB{XSm\,eLV}')3Wh4]X;4jX e !E6\bn%}kD1v9<ZGc"=g=`e)uZMiG>.C:D5Z`3:%1ČSVСIrM"^VjSiт7n8.#d KYz_PEm(=SSH}k بQQ3 BtBk$M<Rحm]"8nMt 1r>oc$cm VƱPVkKX.1ŎkS#'q$`MP`V}^JZ3f8FHvCX"(-@v—ƹJlX 0A5sƱ2 'ICZ ;uVJJV>`@Q8A0l<}YA&^yeaM�5 Pem%Bh3:u&̯1'J6- Sb%U6/|m=Lc0緰acQE\lz-Mi Pe(TFmxҩZ3-Bmhah5=a^L[Q4*DEȃX$2@* B 3L`#Y�<1Oe%yIݲӝ rt&AD GAHHHBx�",eiQKX,0ȓSȁ\ĪrĞIi4f&"J ƴ;2(c9 ":emIYJL QA) ,>$B))y`j DDJP* <`N. vfOݪH_Oħ8xTZE4@"&Bl&bre3�4BtZpBSqbY3L)kR(h&?- wb=h<+DUePF DAn‹YqJc1Kob9ʜ/lf`3]hR;_?-)ɓZZUQyi}HXLWoplJ.J&㙠*1!;vk�RC0r`ɫ(lʓ޲^ LJp|8>LJp|8>LJp|8>PS,WE0-I9>W""�|0*:?I�]+(E*zf˜iP19R j Bn#0Nkc<3A51;`ι@3 S~{کyJʓ "6cR2M9(I+%kEM{+~M#/,Uzy QaV4m_MB�D #"t v΍ØR8"ӴQ%/)>%R+%M<mP\a&��v7}+Á�ֿs <#^�L`r8m iR0�uPTQS )]Ra 9H:P&ώOș+RUTSU²8 R@�:#b`JCutu� bH<*2e<Ǻ"Qf{\Q 2|2gĸ _U$8s \+KJ744.K30IR5:U8:W `U!̜qNl7*VKS-TZ؁c8a<{0UƠۺRUy^*nPd͝Jdr{üIwYΛ;٥`·T(ՑK;sܲ4m.PN_e]dΥ/qeRO>YSҾ|\ 5·n.̥KM[U{΅0ntr]T6wJ2cBR[XԅiB|tT&-BUZY !y))L;ڀ^oSV!_ަht!]\�ՂnLJzu!7KV*]ޜ.+W'9V{ UfqbP m  !e529E'dumeͦpfmQEvi+,BV5DYfFVuiTq_&J.vW@n-^PafCui$]⼦la6aٵqd`Add{cqQT(gcW+L e$B6 )UۖeC3 A?3ȞWEijӡ$H[tcW좼ܛRX`33X= s}n7X,RoPB,\boAXbAO4֋[D.v6sOi|Xln 'y~SxҜ [[V<?-21jFH)-<JG;Ywa!B>!ˠ~wT.H-r foic\#h#-GfKZ1P˟HoKq,|.<Rmxq,m1 5<`Ӫ'er8"5 frƱZ8=N)<rJ ly`bBjOЪ>ԪϘd*&#?cS+cOW:'Tơ["SQ}2׼ҕ; N1sub � Yʓ*HfTj"1 -&BƱގVaAY3 Q 6=ZU%Bހ DNW:Y_;pn<)sN_jZOPW>GfE]1Mؘqyд6 E!R!.v9:wzP&uS^�Vв8,y&G"!(A TId>NY߲oe E?T_#?d<[JP+2iJ"pi(?埝rh �) 6_6A<@g$1i rM+ON{ Dxa<}|Z0e( szjK꨹H݄^WSOj͍gzC]z+xfweҩU׃HuuD `P4f\ ||o}ͫW^c]w~?mrIjF4qP<tudG Y)-T<]jap(L FϤع&E#+Kw1৩5FAcD e(ʇHBFNpn5vŠ #0(bU77s %LiW ͝J><4̆Rc.Ih*??ʭ4Yd 2D֛;Q֢ 7Mtj0~lĉT=f%f3Q)zjƟG_J*~@'D0[d'gv )fÂgoV&A?N.־vJg7)+5ȓ lKA)ccljz,p Be8`vQ6q]eqܢ@V!U4mkQТ䦇#$Iu?!Tt$Bli*T"'J`[m>*Q[>՗F )FnV#EVح^#B c@KRʗ1^ UA,"'%B$B*Kq BHtԪOI92"a0v3tB2 /Mèa-a[Fdq%tȲ8Km~N(PKӢq@/]L* Ym8TK0<֣kdWۊ (y@J`%R5BLReI)ݨS<#2II^eq%F}BZ01 cw!x<B`{N!Ĩ0P}hQzHJW0("oRJ㸶B:Vp8V\mJ K)Œ!9Q萒$1k7qL,7D^9D830P}%χ6 -WtD\K`;ӋU_ &2u̳U}' U`Nx8-Ş8+]L\G R6xꣵq< nE*W  ׬BcXäި!+:,}rWnq3X£u "l Dic&˹"Pt$MIi[^hK5BLr glqPM1Q;)ةufIR'I3 2  1wmT̹cŶe�&_l| ݒޢX!4`in"K<9gd k6 ,KHBI?VT3tWr"^8Eu\ ٮ@HX)c �ba*sJ1p8Tvz9BAB/cԒ-r2 ӇS�Zv5Ρe@1GˆuŪٷ[^e9vbνD#i݉M "2sdhP<f2Wl[S)͵U$-Ɲ("DU $m [bYCJK$M6Y)\wr91n;ƝF-d[K/`8\L4 6i+֍\|,2v̗4er5z}vldJxހqVDlVW["De+aBM0a)7ȀVn<zE& Q[z`(%g;y&Tj猐um/JF`E^z- )U,|1Kg)lIzD 7x.bEa/!?1uƔUb@�IQ}%Hz` zم/ذBWz5* *R\X^U7 Bp!+Yqrf7RKl75bX#%BDZyOLJoQ}C 2BdgPΛPh!D*]uB9|)-e쨈�Y@H!nyzIKZ$BC-1$޽Pq Vk%T<?;<!:YCِhWa_t]"yUeݥC6aZϏgKqPd@-x~EaFyD2E\Dr83&&Bn9_!v5CgAB5PU cG#ҍj qڍ1E8(Yr"2#8T_R 8iH1H.v5uGɠr* xdyq,$]D.c~I^W`Af/X+ O0Ϸ} 6T}EGe2鼺P>*U_!R=̱<AB~ "r! Bi_OdKjp<ϪTT$/iyz!<8ŚlԷ ؆A<!^4(S fc4h!>Un do)ۑҌ %'bJ/VXd͋qi^ okeD$Ӳ`% MսBS҆ ҸUJ&k{9`UN+[<WݐAEſB ҅HWWK.6eCͽǫo-q< JPt-PټeS2/rqM_unX{aG|Z;-^ "fuv3-NU;s,"80cs3{~:!#i5Wk>AQGA`[]t ~fS;wr5UYtǾ0q!LV.<F#H%9XX)Z],%<evՈ*(9^h]`%_tC',Fdؼ8 O,Em3Y۸1xAvM@Ykemr9Ҕ~BUF%+SrFPIS"Xe F 9b:E"`R ̍L!)۶a YFߚ,Xz`$KFXC["Di rr/~!%f A%6PaÄϊIO\"FijW() `kl,DH֠ƆG lR T:=3cR}Bk"md3W&)\s΃@I1%*26,@, ! lf.FAu6Юl4&%`+IBk+,/(aPZ#:y=7CDU<&!Ut(k F :T� ) !kXQ,R2"B+:"j:^2TYb[a }V<?I[RtxwmmlTfʚ247oUN-Dh6x>V.]1)xScul/ɓrb1Q\&dMYTp.n !�!x$y !56j bkW#ƱR}%j㸘ȶ[GiT_%Ֆ)V}WS'֪mu ڣ25v O~SY5t~EZ^Lq-+n+Kl# *Ww[I) R}˦GUV}BFHF!be!-gj!f5}jA칻J EHF+l{+k@bEAU np\2V3ZM3Ͷ i잂%6ϸ-uc2۩"_H)ST2Ө,$|U!bY/$ЬzjA.2z72sR[熑NIoh-F4*sԅ6U5'9ToTθd>IF ]]N˫u&PEMPri8J٨2dHWt]fRRBJKwEzY4tfvNU81vy{"*TS9S(.rە@DTyrq(E5Rrk4jj� w=P"t*DT52�)sOnJ�C2m%Yl!-/q.P`LJp|8>LJp|8>LJp|8>:(-kJN*M H& Dsna!<~\oo/7߅l٤,-5m^kD2Lb;URӳTP@xŦ\\L|jU@frVsgb1R؞Wy.Orlpbi~-0 7r]ឲqiC_ HyW@JDy@ GaDDC9w]cPi}Ssڂ4'y䕾\ZtMzb,QLRfCObnOՓ <lPYeCIy!LqLL"Jp^V,[>NeCx΀n]RoKVS$maR +ԀF3B"\i.(6҃Tw5us־,",1Km|\⇹Я*�E}0ô~4NK\E[NfM}op!(dx]Iq5nE>*X7D�j̈gTm@�-kTYy+jTuE&99JWgXj2򒯹>j9WEc,(*[%yוt8&<fi2·d K jldUfBV}F H UIzB//7o\z¼O3P+k޳!ڣBY1ٶ'b Aew*7.7Ʈ@HRӮvE՗k&WfVsĴVJ*le3ga2vZM;dei;[rz.ҿR-|6(cBt Qn B@H(3\( RuYrY`e:dY܂Stq<Gl`{atZ/E9(4Cz X4g ^Z8t%a*V GQZM&@CrxoaT<Zc_Z ӏq,)P"osv2&_]lC+_ Z|*yU}i_9M,q/$sy[j' !5 )ڵm�["[P#/u+ FtevmBR}YlƓڬ; Re_yq,=B z ̓hikvT_@7^G$RI~]xZ jiT)np^<ƦqL@ƱBJ_kkWrW߃P}C%.waB 5]�-<AZƱO!$pj-lf "eiG0mOp`!EUzIڥ`9j!xcVϮI5{8DN\_!I! !oE%*PꍂBKJ* 8hg`I1$đN_y[]vU4[mG]$?{>`Z+Ec6 lrҷGhjܒhک-b{+[`)ߵ#H{t)흑;eLO[s#0I]?dIWWkK~CSB4  7U^Iq~˞ 29&O䡬1"F) px8޾;"Bo m.䕦Ai'.JO\|wFuZ̦^%6TܾXrZ%8a8a'D3+j4ҡZlד͖W +X\TmlyR<lg,͟ KK7F$3{H|˜޺}hmbC;t YUVf~y /o9#wmݛvv#DP` /P·�ܽB_vB@oRnYPBA5M(9퀚@ D5DH#nB1F( /%*\zQL[4}Rr* *z#<F01B\4\LQ{jŁY!D+fk!&GhDEVTbs'l ;kh!@n! Tz@<O'Fy[[zFARe%B[%V"!ת>k)kSdxƢ4f.@FK;6#D+)*<8NT2jlYRV'9@HUI߾%LPAcm̊@X҉V\df#XKl]6%vqIrAT6(xeP!5B Z#BJ dg) 7zU(1B!7{R!y!&Ffݨ|j[GyCe v@]ѡdjO0yK5*'U"MHEԈuQDkB6t)+tȖX_2i%},U_*rz#q\y !۞Ux͟+c(g<ʾ;V}Fq,q tZqC"lM!_!ŝ q,l]BOp+X6]s3(`- _ &fktBHS ۪ f ,Uضcc+8g3oaFsߦ9hPQxm㘻!; 9Y-W3v`9;̃68 < :E~`Z"LJ I3-t%woe<ީ'%Ley*)5ַ'/|NRZ2m46ϬJ-u! Ojd2mbx L-Y괔i vq~E`XʴSBw&ePN4j wHNo49&9(BD�Ȥ&e!QwӮXx .V24ٚnʨNv|c`"8oPJZpҼI=JZ|?Ǥi<cx9ʉgj1EʑE\FSRfV:|ɒ-^@šR$&-|Vy(^GiN5r63ea #g:9i̖^lkjV/o4^85^iҽ eaYȈ67#^Z ;rsȾ w)Re]@O!oÞ(R,XѐA^ʹ�{9kq[ik{̱j/|8fJd/!I[-RVWsd]9ˤEMwXp1Ovow29BM(Aq4j{S\P}BHK$mإF2BV]9M6Q"I1`~hKB 6 BUc}'EH"R} J"ciEHVe BjWY"i뾋)9Rb+TRd,y1@ִEӮ�>'ҰI$o:6sB +%,8^V(!X!E{"*E&Tq$E(S!2q�*ۚG2BT:lpv{[+&~U,aI6ify֊ŭHrA5vo;z4v-D=`w$9hv5)26ɲ^D( "PUYh X|XR}s X'p<ƫ|,J=IE+7QErjR}vPhDWʓZ l B*\QIJZYޕ?&QzRsVg#%-EkX/<m7j>QS<ߪ>ˠ*_ O!f\CbAqx6VP{N8*ϓ"4=AcW<W'-ߘjyķX\ڱ[8*Ol^מ`:o+5]*M }R%e~̶i:܂Eܱk=AlWႢ6IsPhLWFmWaҢqDboëلp8&OД›Xf09VPk vm e`v`q lX[T1s'/va�5jM"zNKU}�AIoY'O)|07o<*Tib?K/HWDIX2OUks7&ҙE9u;)(A#@dw%-1Iûh3YX]XDK(:( %yhƒ1Y:S洅r5_"(*aY|WXTXM-<grKJBO9 a<wcӥvBU撋t]/E'> J'(e\fe4ZɎ4:v屖ͦX|1A]q !(NDD 8Wv+$+Bp1v[ `يYtC79|Ab{[ _,2ډ-ѳE_:[FP<2WzefC0"$.9bb <D!<Q.`jKSb6*'lTUp/gs9J٠MyT1 Pˡ-ݘ g\6>?,<x~ީr3KKW|NJ+HbNlbEјjm6=˵VՕ !sF$Y&JB U؀W#^DQ&+`32 eɆ񟶰aBTAyNi2se#[hʤ�hd`i aMqq+R!kQy#XްZR⬡@sCgFjBQRA6+C`5 k"TcK"(Ld6sgpL(tlS .ì7^  3WСI, E@!fl[ͼ &2.<ҁuZJ.]ViF,2Yp�R{x+1gnz_Pd)6x~k;G y y~k ا "dEJ!O~V -O =B!>!ynb -o-r̵4BB6=q<AR- TR}LNǕ'qLy6<>FCSJmߛTmq8! ؕɞc\J^{G?jg,k,e\+Mr x XzZړ|lAQ8bAM'ՈQ}/y>jlT q4(n*@5F,kk(5Blj YT_n#dFƑu}J~ !(]o2d,ZA$R|369l,h%hЧ`m-BDQNukS9fR ȉ=UK1Lɡ&3x^1=-m4R?b<}ڞsC26zM\JG3ҹz;`IkoS9u7}_ܝGSrBΈ~ &a9]5-UL/(`DڷʟR"kS4Ey6j7l"03y[@JOȒv/g҄2.YP-ssZxʩTy۩Бu6n|}Y.05zJsBƫ $]ݮiB!8:iR8V@RjLʘx̖LJp|8>·p|8>LJpqAAǔ s/&}:G {w{( DwQbCQ5: B})0 #@DQqAb @>D!@ &Q6DL fR%Xɓ2q1Qw1FMwQ2KrfGE�b"4Ib uީB>L5WH\69L%0A S"tsD !IJ* uL5puF!R=3OUT{aPiTn☉H#DT]cQ<c97j#fT&E�4x1bD18�xw!@vWr)� s9&MzcUqN49Qb ]30wL5"Lic"eTw(0\Lu,< ݕFvY$*9v}'ՠ*"!༂0O9f~ RN2W/LiN3,Szx@wn v;v84000gرc$b@hQEA bvL�3CU(L�i^&)RJ 6jT23DU$B c vJLw4�1O?Ǜ{"`!>onQXDcژSGcM m4eQmh]g n\o*1"9՞l ?zTP^Eyu).9k5Zpe_ͥ%˷*vb)ZV7%^D3Kc'@aR9)Z(@N!QS"nD n,ߖbAUUǙY+^YYwWUi 2y<l_6_ !FeTd$x9"D FݯA%*^h4lyi=EaF\ʌ;sC ==ʗ>StuCo{Nգݨ&Q 4Be7G#$8-s"Rl-+vBC>M]tnYO=%d6~~1]=;^l@>[6v>Cz/0v%rHoB79Bp tlhy~+ܶt6I%-'Z:W#uIaOd#=r[-//Ef˹/0v* Gb|&B*K)qQ]{|L/s`iķVj4K2&r zq< V4}Էc-vyҬy#=AU_EJՇ5Bλv5C<Z`~оo&E^bؤk{z'"H*k<H-ϛRim$nA)a+ hrϡ2>BEasXԻȖ{%2]D*H3gŐ"0[ OkiAHH'%(w 1D"GnNB>8u r{x 1 !(r_ATw;"1:bQ2C("Ωj(~zD E AѨ"QSq)JDew cb9*D%:#WQEdZ1 1 "L14s@4uJQ bvQDU`"@*T5nd*b`"~1*1HU(si)i- {߳ qeD sX�fT`uNª<ӤUd㜰WxUT�ʎBS;xq q(:H""2KӀ*"Щ RϞ}*T q} #L~iR*11b u޹%U(1]18CN!C1LCErbVk (Ds1i' ,!V>i;\'%VĨDcf̕nB S9-ubδz\ܢsHS%-!7U'sQ2QP3FQU1@QuZy͜#�&b"NVN+NyC�8& 隕]hz0k]|]/JO3"�[TMiˎ͝ʰŤ0HX8))'1Qƍ#ߑL5-Yd)@fÅL"-yٚ*Nej jFyWq-D^ശFHՊ&B̈[@K<6y` /g8%V"=%B2FoI�k}jj+Sp*I#GZ|cX~jky=΂e,*4o^నXeF'DȆMux86Pql. _RmD5B!MqbZ_K";ys!Yݖ;;-Q&uZ`EHƉn B c@! ,ʡ>!jE~MRl! =ʋDNL*+5Zthؕ!t#Fè__`4GqETؖXgeqtHu؝/ϐD..M6$fqP{qKlx.GSkަCE:vFHI!E̾FH9]1#'uy<[td1yI!+zDRi *8]VˠZ`jP<ǵ}/mױǒ5r f `CJ|8$`4 ?�l+WJ`ca<+y>Fu糿 U_Rw(U^ O0g7xJ-l;M`_&*r@ <*\z\Njy~=]YPҵY<Al!&iz'ק(] 2W-X\k-hH1F#W7ZA6Pp63iQ 5BKx!*zQCQTAU]|iZ#3\Ccv$ N[)#chZԧ2(ϋCs{v.FU)]✷"%r$"n@LI?$2qB3SnYIUHx<vCV9LAUfs/WfA9è*{&vӼ !EHDR#ّc#"0aZ("L̎;Q1HD{f7-&2CgS</`N TA =c"!V6\%J!9J*9ܼsOjuJOi)YCQ"J!DUܱxr$P OفT4q̽j,*"J+#8u�_x0G8�4mᬂ)tJ\Cp=c;ܔ0>(�%΋D+�f(C$⑙\1w9QU%U@UU:PN m%,iTqAr}}cǤBJ*AHxҔ4%9f;FfG"b0TsєԏQA�MUE&+GM{8DH 4(La"u6LjZ$JD<o cW!f|=Dc-u"sM |ߤF(F9h{t0gB٦W9kl=ܡ9P WNd# Rp^a F=[4KI 53E'O>̯ E[kR2LOmMG5}lWr,2D(Wf&}LaXŭEgf/̗4pNYnP!&qd8R*3^ ޚ\Kj gJLA;[:*#$`[Mĺj΂ $ M)% ](%}#w9Y" 8秬 @lgZ`UsRzY'B0d!6ɝ OBR*h<ųV )HBH9eKlDH& RDFm"hb5B650Uꎤ F"2@qD {R}߫2]56�c TҌWp6B~'̠Y H@&Br�$BL ,E4Bʰ\ !yң+j"=CrޤB Ra*hr%3O Q"^K+hc*rP+Dt;!8’dlS8,CبRbFX,.!ĠH"dQ'T!T6H&2TՇ lZYRDrPd@-x$T[J-A!dRBu!"0\,lCP;<!%,ݨPDŽe<`cJOp{Qz$831Dۗ֓ZMtqƑcQ kk_;sP#Y &֍j`+\%[Ʊ 3hEXG{8n|;CW)g=OzeƄ <P>*U_\te y>PҾobVȪV"[:ΦT_TM1<@^kY<3\O OШ'" BZ@9Op1(YOe Ht 3`!8O'{2*jO;M4ӂRwdoیq)bTZ+-sBA.*+!}w1]t;u;g(@� rw}811 LT�sMi˥[y80Bkt e(8v}3wgQcq 1D ;vws]JfD y5q<޻sy2)+9u_$BT J&b纮uyﺮޱg* u̎릕F Q"; uՕ>j 1n뺎-9DDM�ws:=ŴT(a1:wnwM?\wi[Rwilf<1#U1{I8;bSwnϊy(H}G0xq$Fnc0G&x=~;B01k2]wkC333|@":08cwPu>(`PAp !a q<8: W7�V~7wܛ %~;DMu뺮ﻮelJSF$x|P 111;rgعysLY^0Ѽ[H(:i|�47<'3{"ODιw~SI{$a8CQU|'w,p8c}#Q`,0c!)=g*8}*x*`0!PX5`^U@T!nx|CRD&VðjHl 2tjD=Yļı*ͫs+'~q^lʻKi\Ua9MV =U A< -'3x+Ӹd�aCZsn�*w,a@ǂ<å LoĊPȴ"lrUK[ÀUrD @We E[ !O.;jK2Ӛt[AE `c%6l,n56Cy+͉ۚX[BF5b DؠA]!d śV4B]!$O@HLo$BkB !ml Bvwk@Iq@`MV+4XlN d#JJb}kKq jCk뵚UKc t%6[b))mB6zMy~]�ⵁ3$"zF nBVn#Q''AB&{!q;3q!B.T}s7#U_٣mԃV}+`9 rm)׭;֪=6=ʾ!'qܘp "\2Dȶ4tqSL-g'r8RӪcG(P}Y# !.i !v&ZpA#EHжveٶ߁ARW'hca%lv5e~,Iz}C<+!rMe(P"J!]G8~Ս{}{bD 0ESOc8H`aDB8 v^d}\q)94eT&(2T�N18!0p87bq ABiu, bPDPU(QFP_w/?އ B!DSLDSs0L'@Lp8D%ĠND 4j1p(!x<D (1JSXURch8e1J4foVΛc+<&N;vyabNA̬xd'D*%Ff? !FY*bqp!(NE"Qιc "20 1b<O?1 1 }I%@@v eDUcdb2$8x<v]@DD$BVN4iA"Wp7ϟ'_|ŧwwwcJc BzG qZQ ^>O?ї/_]pp8Jt�΂Lm8y4y 41!!ȑYGgn#J;R'Cm9 :D9 h~[{dvM~!1qZ+ӫD!L4b JLbFb{qw>ru(G2o\x:<V%TӴy#k F!`v;!�Srzxru|oXl V<Y0x5vDbrՄ-Ԥ*SR>by `oȦ 'L]E5ijuT_R=Csc}uqfٱ~}%k-6�J`U* ` qpˏW\Mh6z&kl\ּ>w6N!(PBgaYU?{mL ҲJ'R|yr�ȅ\nmma^'Ǻ՗*�8yf2.8ݲ'A2!!iѣB&"EiKj nh)l,/4}d]UR{{"7tfg=L`=?l$1ɪGKѬFz+*ŕq~Wx_&r⟅W /0s^2r`{ 7IbF/ DN\v.*2G6#>FxBd=1ho替O"t۪ovіљ|4Z}t^"ʢb y8?+RU>yC E>_!dFeG  AlRE 7bBBD=Zj~z "ƉK*>j'Q'a8_쫯|ы/7ûWp$Jzw8*E%�*S^Ա#&8ƣhr^"+crP@,@$J"ܕ*+Ѵ( avHQ$ PsFcB9f9.C|{Rf@DD%O>}W8܅(?K X5K1‘3:\u%�VHw7~ӻw_/?߄_ys{'!p;c("JI&1JהE.D v*;T0#w;j=1cN*�QXb 4N0gr;Eu{DB]OÛEO>G˿|{p#L=q׿0�Ubx"9fQD`D=Ba 옜8+u;cn<0t 9x}o׻gϟWo8ˏïQ΅qP=}ǟ|򌙿~EuǗ/?'/?^E^}x!cȳDL  SWUaBWWWW~cd&;fTy�1>GWwo}-K'B }TD19gD%F !!YB�:�19"1BU!3H14gr R !8&"; ! QsWW=aw_pW޽02ujB¬Ӛ~Ha]u AD4-q]cT"]+Wfn1kӷ պ3N~{CqdÓھmn)9!r fi.WQݤ_%M*jw4oD.FRxuIҷ2P-M$cVRzIUjhNEp2\u'mz(UQ( pȓ t4}qݷ'N_|zQ ː_yjojl Sk[H^]*2;6h5vl{ex.yY\vc+~6bV]j6C۷$uuT?r֛He[T mdeGy$£d~I<&JqQ/jbbfS2qv8wapmL._̳ȤJO?4JS+H E0ռvjSG7:mFzӠIz7W5ra:w{|/Lc[Έ\P<I MIl4=1:*-0-<?7ɶ]ʥgĸ/܄nkuނGw%Z5E~QREV;HV"2%'hvcz,oEWY2Kjs5%F-qgj<1͢cLi5.-תT}ka[e6đn^Q塭ce 6r壍#uojK1ʍ/ε3:(0dR!Vϭye,)n8AYZPG lQף]/*4U rKYm["[m:?Ůzy_ hv^䊦X�[~"[͐';{eC) <)H~~vGwu!Wp|8#OQ AQisp=J1 D*q{wo8#QiQj`fBy3a @Tγ"1cPUC0Hqq{GĪ":V$"iN(p2tAEe$h~_~||+!2 Q=D{FB9vzq}D@|Ͽ|ݫ>zaTE|`dbׁ uQU`OڱWR("!bZk8( 34!M"W�*QXI3sh$xE+cfG@]煡PCĨ 0H$QAx 0a]碄ׯ](=苟U_CP԰~o~Vdሧ> E$"#G!<8uuS@c$"rQ0cžۉ8xtӗO=o}_<⫧w?~?G?8w޾{]A*2Fe~W?~oyeF/O}qs{fϯ>yݾ8DR3D1sMTn`r U(DTAQi 1Q;1 ̝;w}bԨ"A1**r!0QյvpaPE�V)i_΍g% �LQ"F9ιic!Hpg/v}Ȼ]/{Gp<>8wgwA;&vn2-W4Jg^abZ윃i{닍7Q0ofQv: i 7Tf̮ 9L5 Y+3ӶDԅ{-dUދL"} =f'JJX1U'rk<zdUC4O-*Hn;eǢzK3ǛUu qLHxdx%Bq[] .H@OuvzQ`59SQ�wnBodeߋ2uir #{E(E:rP s Iel !@n!%BZ^iBȹQ~O՗"Ȩ,gA@aVKt3~e&f{>S_o$XakJO DKycZ&B60Ѣ<7+cRΏx!8qKVk6.w@OUzq,kӡ 㘛YС"{L+6XZV�;Yl쐁45I.35ݢ@WU+YY!RYEg/6vomlvFHidittI x>5ހʱ ymo(hܨv{5D^+Rm,˟d=`~�r35X!X{x �3 4Mq< VQY8?ytܲR}R g7#JWPq|}yJM[Ѳ"`"Op=Gֵq,T/5*Vز-_aqW<Q%M̰ 1=׎$KԤFIoi D+mX8D_SS"7 K"X*6Hx>F`þol3o�kh:jtB B}yPap=}/7Woooc8FD|wEܑ0c8g&1;ݝH�Wg?׿{_5qvc c 8s$L;"Q(|`nבDBUyk1 E4HCh`HwD He|8w^> !F"~w?Q.T#YѨB΋ D`UҨGQo4 @ 7Og|uP s;�%8 H%spP0*;:&KEU] a8(zH!0wߑ !1 .꽪xruL;h+tb=xt"w4!R GcCcP}B8!]pxtwM4Bԅgx1ߏ6^A>^E*1 z$DL At`8 :y̠@Q11!Sǟ|Ƿ뿃 NoP^<WOWW^_ߐspO˳oaϟ_~/~7?W?/)q<(<wcg0q"vg r(@uqJ{ z:;;F=v" E qJH�;ѝ^Fđ\G_<oo޾zRs]] QAQ@H(<o.g&x!Q#)9!jPy+  �fQ `pt*yy7oLD̪|^m3ql۴=3i#U)h"UrrUys'C<6_pf[rc'XV֙wT[ךּ-Bgh4%sE[7 fv UΎ3CڋhЬ!'Cr ՃcTomλv�ҭ;+r[o:T =prM $t**x;<ߛ!e�}+lt6/3sb%r{mw {,B82yIRKD�qZ6�hm)6PK(ͪI3D.sDc]Xgq6-Bb�mrX|WHɏ6:| ț38Jٳ:z!z89nTq;] .e/'=8j'55/'nct˙˅f==Ǎ]=Ap,m/Opi\)SA3p}\'<Al(I49<-B9ߺ,߈<ؽ}:+cr+g8~~jFt_@Ǡjλ-'Xd~>o~ӧ^o;Ļ8ḻ<竛 ›7nw~_~w߼Wמ|ǀy_1g??o<}O_\_݀8{h�n箟׻M|w_ɓ^"w1}?}z;}?.>y~K'_ݾppa籿kG7A_zsË!F׷wb'WO}^yݮ%fCexz}|߱p{w|_7}wwno쯮~Gu~}w{wwO=QaA}N}vyshl���IDATًnww1y8:vιn]=<yx?qmq Ƨ/no=�SW #{ۛgx|wa|y]paq>|Sc+Q8< p=p|K){wux8 5;ȉBB�s<<wO>yu*Bqu}}}spxh|tWg~>_}o >yaWgp8Gn}wwxz0 Qjɧ>d7;/>g^vq _}xv)޾="Q?~yu 0Ex~TEw;U Ƿo~rW7A1\9]/7GG__Sc&~O{,hﮯ?AUz a}{0UHwTB7q<c*O_<۷pjbvEH ykr+U'NU58 ٓwʍwM1&> ܅zNCdRs1ߠKɉ-|,3ulÊT4ukZ.Ml}taM&ƛ7] 1[=_ӹj484-T)s9^[p|^Xƚ͝nat.|g˻I65~u6ÞmQ^wxsNζC]f Er42քzRe,cKKWSj(΋b])d9sP`(V/PQ[ιת>R96H✱Q)<o Vd=Vc#F*`ab _H ؄ !IMlxzBʳ.+6*"䔙ӵu߂*56(ÚČ+R!kQ;Pȳ`6NJBq\6v",E!H !ãjآ8D+Ql`Y( X apk+P$Q["@MWhRuD†r!2(]҈6v[Ʊ0v!0dJ dAȺƢ<g_ڋ x~A+6<_,7BoLKS `x*]P cj_B} B*.1M$m,+B'\A!m!dldz $i3  0>:iW jlTƑ`H2Nx5}B+S<jq 1 ItHKRy2V>Vn jշ!)MZf5az8eK .X;r6#؈:'R}6v\x}\9kOlZ,FqS18V-P>YIa+[hB, HIҁ> 4cr Hhu)ӉBG[hx簱U!5Xhɓ>5v/Zn9YjJ8!#?x?}~׿_w{ǷLGǾ//^| A_/Ͼo~u(7_<q>Ec!mÏ~_O?o?9"2H$ '_٧_0;7??W?3'7//A?>W/yO{o׿~W/_~'7WWW/w_krqv<A޺G?O~Ϟwoo~'?o~O?'<WOT~a{O>拏>޳qO~VQ /?zG?{cRۿٓ?ٗ?^"nxWjŋ'|zsݍ~O?Ջ̤7o~_�>'|>cM_Ϟ>?}y~?}gG77~8~=ǿpq?O> w8үaϿq?ӏ?}߃o<?%~ًW!n\?{qͷcx"uՏ>x$7?O:W_}黷o~ŏ?|x_z͛wO?WWO~wxO~S'~k~Eu?Oҷ~j7]/x_Sx88 "*}˟vxP]o_=|ïvW|􏇿o>y_?@O~߽yoˏ>ao0O^~Gׂ@n?>쳧no߼ͯo~;\='}ѽo߾=x{uU ?pv}w}ϟ\7?c n?ɗ_ܼw귿u|x<\wO8q<~g~qwՕ`1ī/_\c?gDAߍwx bϞu{ k<B 7ű$G3fO[Zs=[(zǺjjw\AN\oMS W$J D6d0Q0K%] GnS~-b7D^Bh5ʏ/m61<-4y{E1"Fn Ćt5"7h"ŗզjAegbz|kL Bn[dK@N59 *2UvjZ^6DOtQ[#OX\P�ۨ `'1^ 5ʗK@ ZN8i?>|p :N)FFȪfIl{6v l1qix *r )4|th bҥ #lވBJX_UX;Αަ*x<m|)ϿXKEg{}緦<eZ|P}+l"ET_[uICH56RE�*ׯYdAQ'ؐ񔄍]N"Tۣ\KT#E.Z|ϧifó!G[6gMX v�U|=]rU]5==0ro;|)Ma{Wf~nxnA7@jf7) M��>0P{ko]m[3u򝜣->$w;r8ǻP:^DH-~W[ߑֶ:l2J&9,|&) 5c<R$f KY�Fl҂ٌVk>oAQQg/|ߜv#* >S}y=飽?D�|p3 2U`w$noo)M -);xxQAރngZN@Z{^|z+i&Z ?{hhA O{;y4GG)$qȅ`R*/)4IW'<t8'?>�xtyy8CRx�% <tvx/'W5JMQrg{�2I"# dt0wlRib%.y,:ޣ{Dr2wz=/no^.l1 #q,Q;??Lup2>{ ZXNvl7Z2 hU'qDZ2 % h'Ǒb < Yt=Yv>^'0Z~/:L;O>{8Ml g  5gq ;0biφ]gatNf֝/ބI.#=~{R'fI&DLH?`~ý˫D+Ι I#tplRxhԻp/":TZ*Mi�!C`@\i ɓr,*BWǝ1V]eAJIz Wqk ^ȥ�CI�JI'28"?{=D2\.ǃ{xy 1b`)zL' q;<<^,I\J!IvǐJ^Ͽptb&<1N9Q'|6>v*QL}`o-*4I$ ;=Igv\{PZ\]F*:Eb 9.ǑYVoFu9Yt&* }.`Rm9!ogNp~Q>z a*hl\L@5 7}׀rameUZKpֵ[}a=|7~gkU EwUd +, \׶|K*+V^:.Ftmf3=zStgPV8Qa v0Jk]NW㇯5ʊmI\ψPd>~X󠕜 S3zPc8a|YﷇoYgD"> FhC?6WHP6H(K !EmU|燷6<uT*.ze:?drч�gpDa,Qyvm G_3̖s<`3B~gݷk`fr)ѶQϕɦs⃛NZ] 5[1#X69@Qu&V~k1Y$Z!rB|at+1¶>/ko߂7o0p)C7a\Uomkz 6Tx-91&p^h6Om՘k^ɳCTeʕkx#==b7�hN6Xu#g“ς'FoҎR,Ք*|o}7 ==ϯ|y?:]fd:o?>~tɞRj|w3?]ݧt/.ޜ9>:|gx.GγO>you@'|hf|?g)E.pLf˳K)ON^'۳7g/>}Mb9<^__]LѓgDFqR̗Go9gez3_/TJ5=LN.Wa<<O^r<N4{Co_-Y+pMatJWwѽ/{#LLES^}j۷oWrz=nO^|~ëxq{p2x.~{uq}z_~ýO_{tt?7W~}s{K+|zM׫U`oO?^^YÞ%zqt4闏OeOv?{q{g/_^~vx4`8HyR*t|u�t`g_}{=]>~zW^R޿thX.7ݽݟdOQۏЩ>*|]ߞ=J?}s|dW?d/:;Aw5ƀi'UCT1`H2<^_J9DFp''~'?ϟ<zV{+U> .i<;(Azpav)w}�Hq/v{vz}.CÇN\^hF__M'#atr39:>9xE%G=i�Aѓў{;;$i|p|oAZys2\vw)JoT |$p8d¯9*%QCFp;{{8 wHU/p ` Q1c1B�&J6F�Lb>+F͑t;r1%oO3W QƤr:C͝*fj)ܖkf9r.[M3L01uEܩ"(]?dZ.^w*\5j·)B!ɪjHw-B{ъ:7Qg٦ջK^H`) qQظц PT+lk\{˯򳱛Aseu[ Pk6k07wV\K4ABBlc̘j}i!M\I͝mnVb-L.moUxAٵQC}V[~Yȅ6p bmg˜b")n. 5|&l_c#*g5g؆(vcH.<`\ZSz9TlVȡbsv.9dQ! *Ķ"*g lȷtv0Tem*n;�&W74u>;TԨ/C*_kئ qc!Um:YѰ&�Em"\k!2RˬJl7" ^sM٪%ɭDzP ]N`;UHj@{HZibn!9&trͿ9kL6Ri8ĊM[sH^&U9t`tR4P9npp'ξIk'-:@|&A}k#R8|DE}"t~>ak;O No!X5[ۥ[\rBBl@cvE+9wp.j19;*R T$%B lQVK`�تK MRRFW@H__}v6MF{(p0}W_?9yxrt.n@ގ9]7gn{NWopIq5z|~ v0NgGWtx`2/ӿvxx{Jxͭׯoxd۳~ub0 P,ϳIQNg%2 ݽnwVf< Qz 'L'g?{^g|~o97]hw_o?hzg\@��LO{~!2OG?D+ߜN~4:~" }d2ޜ}٫tpt0ϑsD�4of''g/7<}bgw\L8vt|pv2\~ N U WחgIoÑ{3LGޤ_`GOvNNwF{_޼~;<DH/ PBxp6ݫ_ßno/|O~~X;{X={5`zG]z2w^oǑ 4L#x!_] x?a2^h} Ur{{辔dͦ)E\3Q"`9 #4( <4Mt&z o^.Vt<{pސߞdp}V|;]>.K$x D;^o(z@Q..o^߼}5睎? ; 8]\,a|Tn{`v; H+o^Noz1Y)B1.Rz3Zv?8J飣nd pZvO>)EaV+!hw:`@2Eθj>O./pw.!j5J}Gb@YH)R&0ZaD#r;4.ڰI-hzK5T 'y>Ԧ.J›"պW67ټDW6k>Gp7q}lTOh!F9Ml-[n) ſfYNC:ku @4Qqm~7^]pb}h6&Wq` z{=m o7Ih>!9d\*[-?s\L[ݞ𕛝Ŷi-}1(u'� YGji!k Tl;AA` ob!4LގFʑ_Sq NSm :GjQ˭xLnuxoFhtޕu:]+8 ٢jT+B~ O huaTS}HjkkkAn"9~_9= Wqpw ZDib}>G <qNkh0^2|H.J;-{3z  o 9ElGe{7Nci n)vK~H:m) U͈PElt *cbKJCBpL"�`Qg~WEL@8"O:z}xp?C ξIяQ{%!'I iD%\r<D wz?՟ݻ|x0Fat2A{}_i6,ޜ}=[&'K X]_D 7''NG)I4Gr:Yz9j:f4zj2\M$^.Pr$<3DOn?dZ?].G) Uxyu6L4;�ϟϗ_}7_a$@)a.U8F\.1i$IG wKSM*E ?l,z\̦8$d)\x6 wOw1<tN˅KMl9.nn&ax"Y.Ɨْ3ۇw~׏vG?ߏ8T*%Ld?}~Q0/FD YVIJff.]xg Y.�#�(.Lj^ǷJjN&T0='wI�ip٧>< :L@2B @DdZ )a"0=.<d TA0d9J(p8HI *8,\x)0�FZVT1D.5IM5)Tjys9śeV!Y Oj`x|r4jF)z;ea^:E@jB"OC?\L.fjҫU悉@wFA.S$0PWQ:dz0Zv^ǔr<o<xzp0z{6ܮ8b3�  vGNǛL"?<~y> TZ.W˫߽RNgU4T'<9囗/>;DÓ{igd>8aYQPjMD}C+-eȁ4V~h[Řm=c",UTh8b[9 K + s\\_ 0j}@&�<>f:W6kg j[ n>02R51h>&z 9d(剀282TmfN)(fpCBrlckz†=)DmX6iC5h{ʙ =<7Mbnoe:�!cr,b#);Y5le=.UiBmJ4[iܚ؋6{X5~<PKM곺zlah`4XVAx^l`c؀&6 *R1(QR_gm T(Qt35}qB 0b88'Bj\ !uc!ĸEuaF6ɭo b*FnB)Z@E}n!d:;B4أ66 !TC6:6N oK&rcJ)jrzf%;- 4ZK-m)F7)jB!>eʡ !C*[خIetsl!G5*WЄCبû!Z<םzoP_ͭ*I}-:nB% q ՚ !"Bp B¨vD!TCl� !5B.h6򩎍:B ޤ>33VWstR4φQ9.M} tQm`b "56{Ԝc=H#9Ge o P o(64_% yI}5#8hа* o>W$XoHZ#Qh6UE}5@!6B t#L"Rp*8!d"F 66#%vHZG͜Ht5O>w XÆ3KAY:MnMI5``$ILJ_ͦmax'UԚd0x^ (x</x_<7o޾-zs5" CL$! MP.t&mRחl:gA'<HS&8D }Iq] Dtu2I$}�5iD0+ƀH{'8B!p<�j qMٔ ޼ W!C!<|<"#b$TD.5 B� R~rSv|}y;Ap@ M#"ιC%`4ŋ>=.g߾MO<G%1DNS$j&Iԉ”i2Ѡ<7oofт]Q1.矞7>N{} Ok i !RGQ8G_x TJ2D(3؂&#)IdFL)MS�#΅ǐ)b.t>[uu/>'oܞx}' %DJHȅBt_~DR@]D:C8G/B�""0D8`RQv;=Α1FDZgD#PRԥ9'!g<?r<et2I#)"Zju{{\ܻO<2GLJ{@|:^p0r'uƤR1<vIkҚt*HQERs>QhcO_ i*IJ(UF$N()MӽAŷJ! .oٽgF73e@*@ 8zj!/ϟ za|Nj!I1.<FsTɠȡR TMJ"[rsp MP;A-(l/m3mF 78Qa3dB7SUCe¬Y r,ClXM޸~^ژk00[ocVb>n f#ĚۘLeJP_y#sx{Vm]/=aB kf4[y-VkW9\C5PE72dB(שaB!l: i�w˦نojmψQuۺ9G:;'m:] d&7@HjwLj[I6MBF`Zbfi6.76N[qwKe;CиzVn©ήaZEo۴um}w{7ngBuN:&;|Cm!z6n9O 8@{h]bm܅�afBbr3VW`@]LvQ_w>FӭErӳ8@nY!Цkw79C![u 'vThx56b hWX׊Cw>ߗ`-Էy�ݨXstOo  mFb@Os\�[Q/@]f�lE}ע䚏pȇu{-*}-#YX`z_ V��0gErrӓ_}/<swPRib< "@2VL_oLtO?~y77/_{cG` EN}1tJ__}oԤYBjf~A㙖 8q{stpupg$qƩ @3 8@(8x>S*ACu n`g8đ q*%o 2/l6c)R*œvwI:&WxE�Dá?Z{{h �i*Dz=GϾn2R }H; k_ <_c Ư_}/U\6"1,!0$ _iv}c7//vu\&`?}~|tv? # B0s HE41{JkA)� \{~tyݝ`Љ#9v0`'_?D(V^F/^<ǁZz'!v 5ܗr:%Rcș�"9G9@b�y<~g81T �1.�(-1y"[yy a8z|6O&dZ.C }a>y^~Ng:,Mup8c\pH4"2O3�Z`wY˫~x=G@Lkb!19=ra__l/v&:* 2!)AJH/ooofwPhop5~tȽN~pqq\-(y\<s|Hk@*')y�!i&0YN'q]|l6q~RtF1Nm,MZ4M=% V/psԕeW#sDe1ʤt>J[~R7ޛt(SFrm`PJ*KjJ`jVrQ+d\^ml)l% \Y_Y֜\Xle>3Woox/,jmJU'*�rXm<B .;]֘U;&+m#% FkTBBg< 1(-V<X+ Y]XB0ڼXPD]gwV̹:7lR/g||⠾J dYQ㺥{ks&2JskЪNg go5ph檟ٙ϶>yckX`"CErήΤ{4L]%i�y&|$$$Kw6}o]ns*ܤuumؠz|\۲ ggdηMp &cldSvWRjMm5[Z_~"S*jl\!-b"D5˛ V.>@+a۬Άn2٪2`�Vnx5mK~lsb1 ݣ Vg»ĺ%s[%:lxL;rTLF}*вr�KBE}[8vCչdUa K^kjd0:xA^6Z[r>+1n`ίZ*;ق[V_8do1_;KTw ˫ϖ~sܦl)SF^Oڍv֘mQu9u^%!n[6j߫"{<:2B bxώ~_=Z� <sR"> f~}qtHrdc#Ƒ^J P|BSǃデ\\a&p8n|;V|1CHKno=>8c qs#7ߜ>{r<ztp쥾 8(y`c7:~^W$Yr?=O|:^v{ް.o¥BEb>A Go^kZ:/^DK/_/'*:,d O >}@r|xx3R|+RR0 v{ r7~8}pxN ZLJjxB nE)}.4'-t}owxH*O7Ltz$ (zq<?<<] 0!i N B,\?< ˗/;]{A)e)ポgϞ]-Ƿ/۫2:dAPz <%za3V F|�SupąEj\^]]So^g,�)4bdϞ?Ds ҀEpgeG {=y]_.$>'|y|X.^۳tz/p74<xpZqΧJQR9! yhM)&MJD+:? gzwvpI%11ѡ52QjVxo{u`Zs\+`,۝* w I 41NVh rΑV*v!" R|>_z9;Rx+Au !Lz5�sZSJRIRk$Z/v h^̙Z:_@Óbh[m7Z>t[xc~6 YPDtEhQw;YSnvobj^Ƭ�^ʫWRҾ�&9kG*t% 5uT6{h#7׽Մw[~ !eEA}/͝앋&Fƾ=P p7@־6xu<P+v [Y]U mܶur GOb۹W1U 5lז Ƅ\$m,m E֤(1m!A}1*�9:<VYPM7"X3sE(XWm"&B8 ! !\aɡϸ&]kn@[!c�mpvJ梾sULF#%i {ikB :nPьυ ]z`kgg䭜*;ZJנJ>5Z`!A,ꖵqKgW"�+TJ.بB${tvqT:;32y�=]~^kPR}*9;5bR}-kl 5NBjαPp.6Ի]ȍɄR f449n)ԷmlF 夾EI}�MxnP_#luH}G!͒CHxV`!S2C5 -}+hv4M[w˸B1fnlZت󝖵FƆpm:&X%ݛ󉬹E.`owpv;ܶOXc|-Z+Ǧ - w4YP+ذU�je9pg~ȃ!B.^_k?x'?y~$"ggu&1d>~ӟ|rLn_ O~vOBv;^Oi*0`IB|(o7B/>yl0wi8I2^8|oÕ~;yяGuVK_}upW^㜣,&l5:ء4O0\DI*?pIA |/X.ߝ]]Lӈ/VJoӧ??p^]7Wpx|?^_G<7df>_,fo>~;˹d(z7Kx`/ZlHVy2 V 7<}v_M+D fZ8d[ L"l||ŋ/ F$NSDWIP "$~`RKc>$b|/ vV4!:F? t{k=(I$ "x@3Aq./$ŧ(þ a1$>@TIҫ) /=xoYz'ߦgs_ۯ_>ϓDA7q˙:?x{ъ8 pɴ g8MO|tw6C)9H"p:GϟҔvDNE8Co! M{�}N3@V -X_Jhd쟿'J/?2e }s3S9i[=>߬6\-d_|?ϟ<L=Jr` 8gaKZ̈ Ԋőb|joL@^B;QlaNOq$W]{rOpv;t~pttx~Kq{׳$^&w�toSޓ'/vGbg$vv= 1UKc@<gdi ZrҞvZ ;t 2XP!*"/H ֚kc%:KʍOo7W*Ə|^yP� X\zxɌ{#U�M j(rDqVSGF*uCrV h <WȪC*%э 4Ǝ.jҦ]8l'W_Pg+[(R؎tv-ۨvWSVTuk6wjKWLl4TGx`۽1_ZB]vn`�pհm{<B$l�Ԫ+E6zjR6i`&B ؄DHK78DbyCcyu`E}6BRCHU ow6‚b !5!!=j($oBk! b#�{B/9Vnh 8'4Lp>*60吓+SG<kn,` -ަب �9:z+PCAk!}:Ghu$Y \ZPB#T^ 5\oI Ts|ք9dЦ nͯQGkR!Hn 6#^ړ`,ZCi α;DzsC$58G>slP_K$!9=D`GݹrH}HDF,Mv]64.-z dM>xG#αm`h`ֈ:#H`_o# nqm[K�$ 5tvX! !I׍l&-zv*@hP/k{k^g3lb=LjTu FlƠi٩* {/�4_?@ 'RgfXfid 2 4PhMZb@j> U*P{;*ܬ&$hg4U'qXC¹1؟O"I-<xn&K|Hu^]\^/fQ)BW)?MrN" q3&$IJk/yp Ip!ӄx&1oW_)$~6 Il> l:YL8~>^!!^GW?b`ۛۛtdihuW&bD+%w^O ɵRy^Q4J�2Hc6Ighi,¥M2eIe??]'7$R2Zrh򻛫0|Pm|v2Z1 !Za껯'g'YȦ|9I|&y4 ķ_]>F .V/Mcu�ADa4\ҫo,/BO줱w}<?! >BonoVII3:~Ht/:q!<~{]GZD!;{5ͯ޼)Q)W)'?jdHOco1^o_-gcD zZ4…޾^~zvLYu}W+5(\7,Ry|~v32aKbo>WWl%,gt}.e@PJ"__N9vt^_dJb'�D&o.Φq# 'c:{832]"2߼^hҘIKw{#ojsO(9@kZjL<ID\]˅T CXd,QkKG!Ek?:j˛0 u7QZ,gRiU7;jIi"d!oӳH) ի8JSdpyR/v.d%!"{z4.g�4i#ڙt큍w9I3�DҀ< !BL#a(U+sڞ1đrV�55i\/h(ۍhd?Pa Hi6ow0y a[q�,ɻɖ!٢@{'tw5s6R^[-_gr赱moCr7Tu{6_@n AFh[y;M6rƘΦ۩ݰa>Z]ju[;#ذG^̻t`Uo񦢴6ڂ*ssM:qUun]D˻ƶWl~T#Y㱕sj)h[W9xpC"-U#SX&oȭt`u:Q9"ֹXcwB[E.%p`[!H`vg[$-kNn&gnviИֿ;uvC׶~|ymnO7oVM Ϫcc}0jm\D]/ڲ,?s+9((Ï!mrٵl[^ +K =:H� gV0׳K5�֭;TZj<Tr9NO1R.d6-�y?&2N0 {;;;dۋ8;;QjE*Z!CX,˰t{{{cW׷J^phwwT-ћחP0Na<Cvvz''$E[@?8IrMÛUN;dÔ:Lj40t8a*ozr#([-7iʙ?F;q-QbvGA}LnQh9j3dz0۽Gʏ.:Jta5㓽pĦәjXbi<rOFÝQ;@`׷$Z|itq8;Bj/>o?/߮fqqDZu~? Gq4\(RF@ҞJx< �ƉR}ߟH`srrogEt2O<@dRE^C4&(|Hv;NGLt|>YVRJ؃;|vyu;jd Q~_ksnI`&i2Nn"{wX]_n'DF.?>9Zr5/T*PFp$ dt0z$`'HJu/rTZ8</lH+)@N8JD"DFA|xv{q"߾MҨ?蜞޿d>_9Rq&8ip&p6YwAV.X ]Op�Mnq `W"p'5$I* .""pC�%qTʄHy>?8 X,q6 v: UGK$ ^*0r?*x9${AoHqi2N"{A}Q*jX$uw0VZy?F Wd8_ ?R%BA 4#4.Gw!HJ1IC<;NjZh ��ygqXO�o\h:7TF*?Қ1%zk2,=UJC#9`=74Z,!%'-΄Z!ti*B#kPesݸrCВ)'DElGu9Aer+o~W׻M> _Ϫ\(ݘ5"qxwwn9ylcQhQk-W _rZv;!W7yN ֩ |]LjbfrjN䁢 FDH~"٥L6qoud"; =rzlܲBsh.j^.ZҲȁw;ߜuǒ*!Α6涡o) fAݜH2kMߝhGmc MHZl}p֑ w-{ɕؠR[w;Hp=Av1YϮ*Um"FH_lNaF6b;=@E }p7f&o@H^B:I_O�# 4({3- 8"'<(!8FyyR%qhwg TH0VQ V WRGahg lL],T19 D&P X(h!Uw<!F D]3%xdj�Zp&p}wr9_ ?OA{J$ҫy^@RK_�Ҳ2JK%"#ŅR&a`B8N/Zq$NZxt:"fsD  LhRJASiRDJ&b2/N$N(}ŏd0_.߄ii^!Rae~rva#<\qy쭖!eD {N1p>^' }%tU-Y(�s$Qhoow>/1iHInMt>[2 q<N;^b,1*Y,=<4M= Pfdx^pE^Б* l6[-B "1.x/IJsY`�N VĩqBpt6F`2v:pȕRi΃^&)�y9K)RiιTiRF{�aF t;]u%B;`Ej" o<:= d zu`0xfR"TŞDx4Q fDM.8 8٤7A |JyI"$L L@k(TL�2"FQ1J3JQ$St;^)ٌ19vAehɕ".q�BPg$/�A!I)YJ}xPGϏigg-M�/8oM];W>;Sj_`9UeZTKFwJ5G,1bo~˃4\jC-3"Įjzq]y 'lm% .aRǀ-emfM1.Z{YC.76M(ڃ#P3jJ[VpqwNm;eV& t:;B>H,gΰTŶ^vt c]k !-Z57͊m"J[ۘxqNR?C=Ů$U&W/B9]NZh=ȵʵraBp:Hb:;NkVoXe6;HCHu}{akr~.ׅC6Ez;D\C-cejM\^�vs8wﺾH7wL9]T\yd7MAM䭨}"-ڣ(t~S$o DDɛ#sS$s Umɨ|v8]$kuoّzP}tmum:z2PkW�D B9�$F �&BML)ΐ0HkDR|ζ"5+'TJi,90`8 'EQ� �JKMȐ^D§TqT"c=#JMNtRx\!"jN�1�L"SBbyl HV4T  DLR؃G?٣Q_́u9@$)@3q"t*U*e ;AG Qj"B 8 XVJ MD c`1 4 bZJP))U=*Z"n:Һ<}~W$Dpy9_kQq<1$RRJB8CFZZC5D/XWkBI"bd5I$D<$ E#pҌ4 82FE 9 9jEDJ*5" T!1 RdJ$qJքȴV�HH#'di-� q$ V<@R` |"B�!*@)"2l2@$�t �@#iR)d�♜%BDƐRփnDYnU$4R 9H0�GN4!�G`L)o!0�P,G!1}?t:^!M&,cF%�8n8jTc<Z%Ԋ�8C3Ŝ4bZs He +CzOҚ8*L$8^Ůثo\_t|"kP@ EC_*,QK@$0ǿ<{r!,}z3Qg<XK?x|<>x|<>xl>qwJ#/DĐli@�!C��^9@M/<|->b,�挀i�' HJHD�@32F 8!"p>G90B<�+'H0$BY�HkҊ3dsfbqyC7n.dzٌC 90c("i@1Z(Lsd (S "Ѣ�C�@ A+@@B+-82} @)Z, x]/JHr~y1xLVL%`B`5�@�q  |�!1@ζk#�ƙc88&V0 I "&gHh`Y0d 而 �DZ2q$He)l; t612 tg5Lg l�H�4Cx9YD3yK!9� IIkB EvFY�e^٘BJy^�(|]S c(i��DuYaΘt@[�><ZK`a3CΦ@` &Ȓ �4bf"@`yD٦dO.; a[ϠSV/DD/fHpɮ =I 7: MټʤH:|ڟ(- `TKmd;v[\fór^`kM/cNkC6l+{=Q_[hpb\Vx{?͜5ۃ;bh41ϼ֭ܲvP4kiM+;R,ύyߍf^gr �o)ܨX?ss۝>Tؼ![kPY o7Ih>!9@}rvxGZgG܉n&ow-}Q+j B7ݪY>3Piw["d-bK{FVm7BZ9d�כƂ8`鯆lNܡ~ |7x?[r7yK*B}׮׵P_M=}Q=nQm{]~8OaT!f\Wq^9Imo`c-ȷ&PBb]}] mo]�[?[/oace$MMwot-~&uu R o Xj>kڽA~w4)߽qdAMĽEwe¿)YlgW;2 Rr0$F�@q XP B� �N@ĈtF!c<[DDQkB2L0ƁRJ!29ϒD@@SY{ �%�2ĴҌgКHk�9"'D@p2<{)J4" #, Hu 1YBx"K= &@dc@1[Z崨Lf:�T2Α1U9DPh:)R*hA2!RYZ9c@+Њ򅓔%/d0@,Hj!ϒq�Y5"D�` )q I�|d- 2sڭbYmx#ü*1πF:KdC ^J@@Vc#|i byuQQ!O"eIJDEP-BD!�PZ(˟O"(\X*�?NZ<ʇge�T�vf@I*KdՅ9FE 5)2�8c6@ 90RՠYfes J0(^T^m萗!G<O0'Ew:\ųIGY+cry׀;*ib9 4\�Ժ䲺j,C3yF 6LgрDl{gK-[ue3fS7%םj� X[*k=& WiBAd*{:i\z[ ZpTy[1a!$F69ULhk]^.ŰL(̭"MR&QGe:�!cآلwClPR4lhUZ o !&r!Yi &6*6p : mu0 *F`1 a0ͫFTcvd+, F,T JnlԗAlx6?!%6tsֹ7Bvvm*!Ьv+/Ys6**lѸ Brآʪm1ƻZ£Ϩ-LgB6R>./aB&&6;}Pֹ!` PiA ChXAsQ7%-h ,F7)jB!q722UX#춯>7X΁·&BF M DW#:߸-t|KԤ_j1NBDH+{`MK8F#%<GTkR_[ ĬݚHnCY:6~ᲿϨQ .^>FuXH75#.E}͆o'=RWj B}nHMl5諦7HMnx,H}� #A %BF+DT\-CMkW8,Z\`nm"6k` fSUWC4RaÁ!ĠK7B\T+B,OE].FH.pdE7BDH*!=l dm$XGHsܲ% !H7Fsy c@STg-Tb#oF.c�vS:_i̗R "k,8*@lS[ "АmU9 #D`!@Z&D:MVOԈȐ֚13F�(84)�B$`@Ed `DSH"&B AkP*Dd\pε$0Jd;!V׌iҘ唑c)1 91' "HQr"*3UPatcD( )P{BpaS9&7ԉ�D8i@9C.@`@!*|;7蜝Xv~> 8ʩ y 0$x6*�R P9?"?ݖ(Bd@ [Y@^* �%��u%nd%y v]y K"*(5#  -eg@H S o^ѱWF.Due.dERTk�(�`D,H��()iY&7</lOwRH1$b?]6_^oެԉ,[L,?ii(4G7ME tStTy5"RriNQ5@e[_Ƚզί s l%-Ep=͢S9(iVl(L]RhJHf} ,%6맿g#VMEj٪|UUX(sar.*Ti*(6g{XYE%xhАBJP)ⴲBKB/#,B;:t$$Fί;L�`xrs /^h:J0l+k D|p@m܂rdl*Z: ш+ހs&߷4h0(:6**3+*+*PBhAE  bw ) 0R< MymTvYTWg@UVn8WY O) Иn&;Bn"nakë۫!-b9v`!J@q yB5vq:;ȲucE^"rí&B gsyTBZ߲kMg`ȡjƆQv95Ia<-4U#QJ6H3T9m9`FK*{Yjpu(+-7$B<[*&6lrvdS"Ė@w3٢mu>@/J� `[u>:BXVrF/^R!p!kfK$X4j!E"ic[jy\L uDn  u#$T&ϕ6j2:kQ߫HgxF$Xsv$hU*`��l`;G(9IEv$vW߶Lm3A^%ˡ9B4,b:O2zK :A}u`:P_^_&-TX<,#α.0 G@گ{!k$ g$˫lcs5 6&Zき iluUlc@m@9>!A* OW kځ]E6* KB%4_|�1dX=ߋ�0ec󃮏NkRF X+F ,ŗ8gZe =_pxX+%4b9 GΑ3Y9y .8�h3"-SRJ\%c^O, !B,�HkB))JUR&ٯbqyՄ @1P 52fhRI)- a%(EB@s^:qFD >ϙ'9j:Cd%yf"Efl<;X'l7r߂kb߅f vH'Pfڐ�31VC&%,ɗ/XRp̱"gJ`3�!YC6mUKkuY?ODA p̧VM_bB�%ZJd$_g@QJX L"0ƍ"b608s�J$qDaq'RDBpYLgӌr].*mQ]<M)�\]zV2`X ԼEvm��f4!!gE$I$cGN8d2#aVYo=,CP s{F`jI<r�6F#I22RB�UX~ Gخ9xZE1e|dN۬Ե8n_%e@UD)2>De,97|Ɛ1h+RTAUEiUk7X 0@^QÆx2K8!R_"Y~LK$Y7s9@b,d%h &-n5bP>R(An-Dj|}fLh)g+aa69Z@#TxF oN|Y 21bB#k9\YS `7fn"j)Mn9B3+G'H=�6@ܚn"!B !@H ݖSZj#;UՐ7c%i8C`6* ` m]7k*2Jggj !`!jqXBFAH+ +M1ӹo >7!?B`Bvo55MhC-ZcU̚*^qYzCFvʶ\ tvD]:A9KjP,`K c\k^(z*NE#1$P!PCH} +M.],Jv?U (Mh j\zb!fQА._M� #t|32y�[t~=,:*\&6(lf|kM9T e\I GBZ8*bqP-+ay ծߢ>H2;9F$TCH{$FY`- 5oC}&ݙYrۿ_�ye$`{9n&@^5|l1v mѹ96#SݭAשVq8l�65E}F$`9:%PW%@bL^WyC4pM&D|r5㔒*T:`>ha$J c];Gk`s45 _>v;Ǫzk:so8Ma 8تր �9n!dM9$@ �AWC@¼"PKd*==C4iR @K Y4O&DD &E@B2e1$:%PuE" VTDJ1?0sJkMsi$QZC,@ƉR a98kW@pHRܓ(1\e{JZl+BR��X^TXls`"bVdgDZH+�j "H49y!p�yJ|^;%D:C( *-@dEEӀ0A�*�"]_$�Y34o(z}1(_�ߟuҔ+ZI#YB4Of.|MFJ,_R\؜NEwMX˖U&>J@ijD,e?idml]BN Y^Jf%I?T˖- F6)ae@da @J*IVR$<Z2 PE`YB4(O^-:+e!+6+?}QnWEՙ�qP 4Iy�(,؏,h aIKm=7j> jJ)x|<>x|<>x|<>E݀#D3Rl%�e6KmR :ߍ$MRJJ5S Y1)M H,K@D4)M:T*Dy�RT�&c>eZ$B)Le �=9݂& Z y]ttT^3��"e"#9uz0I8T%Htu5Vbt"@ Z&IƒAЍt|3b‰b\kh2ن�B$@@dZgSk `27|5J8*r0TU25_4�={D,fE2WroyN.G�(*Tˇ@̓ٯf<F5 T3*hxh2r<gٳD.9@3�Q$gٰV밨5Y?o\5GzَX> ϕ e!:2DRZ:VR�=iʦnXhV,"0 kT3l퉹ʺ߅Z+Ȁ3B%S'̱j[9h]/ب?YL{P,*R1Uh(cPMV� ~ɘ+]ʹ*Sf=%27X.[3%uiZfҁQx(JԦm'.絑1-ZMEɃ`cm $<Ze_h).2'K*9\Z:BʹK0bLvT>{ mҴS!NU)gYVs-)P0HuT /f\lλa2ܵ,jL(f(Y376ysȚo~7s �&7gg=moͬLh\>j ZU"ܽiL鵻aB=TUTTN2^Xc0P_u6@ ! ~q#BlhG6>, r06&_7RQY:<dZRK&vU^[Ba���IDATy,kbxm틹:8!!MgWrBT :B0(Vqh ĥ%�,l d�uՊugvj`=ƒCh8RŽ*~:( >52, ]kCmd4M09�)+ d kbt8uܜ)M4yZ+7JSk|lZY5&, fm;DcAM&7yi|E&ك}a@ؑ`J$I}̵0ʬHFeZ X3auaef;K DF$XCeZ 18 s%uؖ{TؑTq`V%Kas\è6dCJn9x\gF5frdqF5oH-f؂Fh8su&Gsllp#AؠE-c�Smpߺ!Z$qCQG-,65uً6+;{bݪA}o-6u>5@^!y6R2T;Cv-TT(xx!e$k4ơkcaRsl ZqoUugWxUlKpMUXA0K$بٙ&a4jwFtVY&Xo,)FrG^*T"BM &MZiRZ+JiT*  |)'I&)VZ)҄HD5)RZSJ)S5d `H4%R^&JGqt*e&JԠYHyhZV Jʔ@3<_<*I)Z+L!p-VFL$RDd2NQqAIIZi"UyH(I˴:F5(YBO>AJJRZiԊ!1@-A&c#3gg4sE.eI@֗D'B CS]s'4{))ZR d?4,(EygxyqUEUړL<#1$u!E!Vq319i 5Mu@cO_m2UJ�ٺ[]\n2(BIfXD9)( x(NSIqΘisY`HE4", We`Bh5n2e/<o�Tq)΅>Gv`e]nb aF]>ZMVsHVk,qcc/LjmR*˱BWu^jAsC;WJIm(Z\gJi*ϥ4b3O P{:Vv\`7݀\l.JT[?fR�5]):Im ,| PØ 䖼/`zr[gCdDdYضV H_9Sh Km+еg! ~s9n`LlTXŃƯ^U;U bϺ07wؠDZ 2fA@̈́rd*QbfDy+[ٜn�vu ص6lQ5}.lFmnjDIh,�cTq[E!am9ۆ\8*{gggYQ_wv["=EPU-Fq~فy6vNZ4Y6-QUw`9K _q1ԔC ̌mB5X!kZrfkh*Ykeב}ZtvmrvB* @�==`[4\F}6ҍ&l-\PYw`t~]mUǪ|rP-BȜ/EE/FS`LwAHMKfԝJ*T}dsTۜ'BnCHk$p31>�Kvl8F$ulԜcyH.ذWH+q9G95"G!X$M"ӧM@M̵_�+4Җ]ݑ 9vmݤZhP[էiB(A9t#tQ9M_¿Q!uK9cPG�p61:5υCIXۍ= ,@m!@mW2T 'B68GC绰7a(AdC9]A PD %۠HмG"� `,y  iM:[tJ�Ot:{x<WiƊ~(|D8g\jJeʴ|9$NݝA{|HS +!g3O,EEXu?M'<N5ОZZǩR9W@ RSD`4?YM@ ϘrXDqT:qpt4$av�ZA'3aZ�E SDQAs8+P:Z 0"פAM-@D*_F#buf"rxԉ-50]yֳXɊt˺]d6MZN�l:dI>:o�E"j R26ˉр;,@P4 19��h uQ X8RM2<UY+[.\Qa6~ x-KX �W|q4Z9}H/EiDdD5K)V4a|8G-I"=Hf]b;h4VcF=kW[#/5P RfD@ g#lc2 cUXAiШ YQ6UI2fu?F;ZMe@5efhJ-[Ԗ7B80IFJB`i[$ص|01_NīU%(Aۺ E߆!u`DȚ|n\=LRk�M E=he+1S$u԰a5l](v5֊mVM.9!߆[jvg*^ y`Lb\6VE\DY]N8 rwdXpfV6o;ԋ-1*젎VHN޸A o@HEH-7R앳4vf:F ZkAV5ewʎrj9zBLQRlѻ αuwkt뻋ޭu~C$t~Ca"d+][`uïd խh3:2m@Hs~{lCHjE+Yzuq6kM6j#Aۿ0>rsPUێBݜHeZ#-^3EҼw$nꫵFTvmm^lFRߖJogbi[ AZ;"duuհou|D6rp6pත\ - z F�zl@un 9 !XxۚpP*2 FYEg5D@"%@yԻջ~ڝ'2^)sA2bi S qB!Hʐ1`\*{ P΢Wq$O(q( MYV��W=z{j)$}='i 4 E �01HHČb1z:}�J 5-$L�ُ(3@(�H|d �! �b%Rsѕ I<�"�9c-$"dY+S0`%.�TfV"0$�Me<fA| �h7Ub_eB$F4<eu'3J)J@FDL�t8O3c-gnׄ@#<\Nѳi!TYFc/je`ڌrfr?YQZ,Y\;D]l]r^ ,��*$َЀ*-XNC$`Be 53V&aYâm= zD e5!ګ͚̺e?)ADA*lV=ۈ0-G$LQX*hyK}c[-s{ {b^ȧkUERp'TAU'�ps^E@DPK1;dh,v)$Nf1cJ+-3MKՠgVeT<Q^V5YK F.hEڼ1ZD !-GTM(/^7r�,A!Ьcf! 4ЬBFR.6K /h~:[mCh0AJUv G2erp^l`W,Ysbo�H<@bUIeRQZs{UE iUo"!vmfբʳ\PxhP lڨmT4b]-ě4BBjήDb9;B!!kJ2Fl !!!5O BJO@HiUݡ@ P7Eajqv6r,Tr9e~[UJ`zp&Rq2U\SFp8Yg8G0%khPWq%$[as<- k|p Z5ăUXK7U2QaR,dDC&/bQ5:2ެ{�2JdDUP;BC"]iQ?hPDf$ETG#̚u1PRy4H 20>Q96v+XVF[Afrs αFmtE 4"Aӿ;L?p`҄ P$=cZ:B5i A�`;>+-:A}E?kXK}2DEmI}k"= EPGH54o<kC1tA$[&jԅ"voS6HmF}u~*2VH jαޔk.hꆜ/=E|"2*`# R!�-!BlBjEƌtq濁Z<>TkA!�IMtΨGUC (Nnhw8tN㫛j|9<p6OƢ�F#�L77xGsx0`j%g8z"8IH3ÃOuNo>8O޻wq~ ?WZϦd<3t{=gG^L޼]c dÝQ.g|:Y;;=u~'H//&7jI9N<y]/:JCJ�i,z'<Zurvvnp0WpT3vnyb0 <!JP-8`\$$|1A2C5oʐaaEdU|njo?XZ" 6 ye_&F�$dX)}HZ9kn[(*:>+/J[xU9(a=cM�.W1R*gZԨj3ر8tEME `%0v1{oVHϓ@ ,υ D(NWRN7Ҫ(dIYBXE/%TRX#fq㤢}E̮Xlr�"cHDZgM "2w.["ZDg)#H5o9Z#̌I5$>|u|<>x|<>x|<>?G;! "mMESyql ZRB0=ѩ"gd<<<ONxBdLJ~޼ZD[^]cyK$~Ok-<oJ{;?$UIX$Jᄍ"B ^www]xWX]GN>'Zix ~CEo>�eCv4-fEk#>QǗzr=Q7 }P?u8<2 g_>x|^w|\%TFJh;Ow~*ߏ_?HVo^ᄒp?=ϟF D5iVxO=:Hi~{Ld,_dLD)eŞbݲ@ʸH�cS1G{g[1+#<V+L2˦  PNY> ) F|g5 T^|X95y/<j&O69GWXs*?մ{WB1ќXWa6RTM/sżb0ƳOJDT SԈ4l ]V/͇V%d�^ZXOw<3Ʋ)l}3YWe4I {ZAs Z^Ǝ%1w8Y[pՔzֹV-;wAVR·VaE&�k7lQŦpɽRwMZylTOp\\ك1릘Bq;wb`["d;=<Z5fqʲ6iiS[mL"NG[7aQNcϱS9y+Bsv:s@Q~{>Yv2(Xĸd'llr^o̔ߢ*0fZ\kllr[8m]R..h4F)\U꺳3wޭ,�h h!,Ovئŷ"@!�L-2ݢIS8ݨ-Umm__k\Vvxƚ7x?[r7 gMě] *p|4m:]+bb\`('BikN6&dkWlP_oP&T W { [SZmltU{9KGM@^0>'י``f]$6z!(5XBy;`Tvw[v#d34VpFvP_DRK:_CF`v֩vx4ˇsvt;EUU;VeNux8v-Ìnm]K CJdפN?;߾H4{g#oGGG|v%ɽgWAožN{)#t/o.^>~io ϟ g"R?R uJp7Տ;]MWZt`0R?ׯc)u @XU�S hNϮ&O糣_</ \CɉS_~/]1.ȸJj{ų|rpMvus/ >_<8>9\.T`=tu?sR+C%Zrqv3|rtǗ}sX';d�v1Z+DȌtT&͇3UZtItXLdbu?A#~l/ eQ�Ki\plR{( ThQjp}Vf_֝`,K 4iҨe&1B̶Ziuጐ{NC|`v"Yc=CԬr c;V=*hSԺ j"1^툂@gXܖ se>KeaɛP\;|W4P-4c2%Z5hS.VڃMjÝ-#̭rckʫ lXɱa{ug[ϙ)w\5.p&C[,ǼiBuT& ;96F!s_!U1,\ѷlJ+m!ӄ6B*l!r0@hTب5r{ 䪟 mu0 *뱱ͯE}V[F2^ x& 'gAE} 6ya #75lA`WM媋*7G幢>b88'B]s@Vn4vF9qrs,ռ!5[WY5B6d u+P+%M /aBfM~Q ! JǔSP RۏrMACo5jԓ=T] B!�)KxW-uxBPEo?Zή֠>,AЄCب:0g_Y:Q:ߒ@15EשoS+T{Yl !;5i -nq^WPsvkf < BL֨6򩎍 !]jI}FZpu:0;EpVv;m:jQMlh>[&6fslUS6^r4v2ZV#ֶ %BF+Dt~-J6Eok-J}H`7Q6Sl`v (YگF$ 3w-B\T+B5]*U'm%'TG m+�l�aFۿ# M֬kM6<4,l;CEM^]mG @QQP* +#jXrNw`A�# ݮśovO?v?=>ǣ$Ǐן<~7w)HbZLP$|u 믿L/?;?SO _Z.淗zV3�K`G~pAGonÛ*zg_Gq'z71ٗ?~4�`!{QK}~;Y%;ػ?hg_<<:>~NF෿}hS9]~|G^ϖ,I~ܽ 0 a@a! ,Q FPD3Q2 do@A(Pш`==^ګg ׇ̈pso~O[ ~wK/ޜ9�ۛKP!]x1ar[%D ޯ�op>®��y1} RdJs(QMEO1 HS+OJ<a L>(X7j$$&@\70IAwD>0` ):E&1ҩC>Ugt&))S,V(Z8Y R3AK焐3 !J@(s|.Y^, Z uѕ5L]e6x9B�slurGcH,$̺r}@@j:<a˂ S ,;-(`}G0x372 46+cԒ+ S!$Mz TW!$$bX$\Bw 8iG0΁!$N_GNy$ ஌0"bBg󪦮`f\>L4Ǯ)" DȖNRj5L=lrJ l^0Gt3"2O !B%gYi-,N}WB(G�Bb*Vc�Bh!|�FvC<"*.bHqǽRIEY'Ps]l@%Z!!�Wqb&9R0ʙ b9@Av!,}BEHL"L(%PDCn,<)Z� B'! Av嘊  Wx2([%B,DSs0 +5+|3Hx’ #A~#6B >"]d8r}]Iq~OHc̞Ee$"W�ڜt$\_9>qH`Ѫ\G69~+ղH0']y"G(cQĀ KC;B4Ԅ7Qp}$fOy{,Ї^(@ 4Q'F&n#dyO^ *2!!DEhGB"29*:t5j')e9f#0SQd|h r_*]�-`+.�7|f5M*+t;|Un=aUbɣY3k{J5/hi HU]pΣ|Ʒݷ>|<7;~rmVWsxλ|j|>׳Y]ρl>ѓ|o^:|y+/lV޷ymVo|ʕkn?zxzdyg{n;e=+׎^W_{ W`g-j}o}{;̓^rޓNjw~ww߽sru]f3 jl׮_><;;;wη}{Օ7n9~twyэ. =mG|~ݻͪW_{幛^9r|/_>|y~tXgι\rmٖK;#A?^,gjn:C7l[6/\e(OeyBnp S* !5r.O("iP e)㜈\)/Icf9B :E%%T3WQTAjm80DرA"BAL+H`>�" bfYp``fi8I1VnBq!CjEn .)a[l3>\:Ȩ M9 {34!Po$e!70 (bm/K|&d&-9BH!$Vl@?<WYm[#$T;G!!TBQ~`!Å{�wu!cq}aT&f~#cO�JTJ`+?2lrbQ! H!rIi &\]@I B o`۬㸐)-,܈A Bi 6AH@95<4Y 7RG)lrP J@s `G&;&HfP�٠UNr{o.H(ekN APd9B !:or�9HJd>HB !0r!@laXkW�(4Ba`)uEQaEՉmr3eH7A|<q!be>D (bWP#)NfhFQHF ch>ʮI Hh>fq`'f$HrW#\8.(lv9G G,_v t>ڮ/ \ō83M99 "~Hfȁ Lm1ȂA䢅M(b"B�l? t>pB;YI BS@Z17! (!*W=3g Ԓ,"A !ymrLͫt!|�J_!7ؠ lPlf@e_7O>B<:Dm{yDD몪yw;·Wέ߯jlzCU9\sOݿ{l;W^>%o{ޣ?}qzVgΡk~jUK~jݝ_z{{{WoeU'Gw~pxz ǯ<Z-ܽ{>Γǧ٬YՊN=xp~TGZ7|>yZU*O<'O'ON޿hoZVܻGOl6YRӬNUU->w-O~dᣓǧOww{G;{'W>yp';;;;T#¬/^Tk8;7k?jNs-P �|hٖAסD{h, �?s�-Lʵn D%,gZqt5ߖmٖmٖmٖmٖmٖmٖmٖmٖmٖmٖmٖOI!�u]om�"׫ǏU f{y}靷_wWۇ߾SYfM{hZ׻{fom|nȓC -,YάAUWih^]X;g>׮}F';i �#l3bED5 jw3UY5{啛_K7;><8y|3`�lg{ݝ4HPa;aosiZ]ۆp6WsUaCjD <GGu ssG t8mCuӮZSvwj5 B6V mseүAD�tym9 糪r'f[~Km[B=qla\IGzKf.ġ$MWO 3ECMdͻ`|a[Ȯ+>&/c[%q)@`l! E0o֫s ^ R/G#T;oyn_Z?mWV6Y/A[o,5HT@3 δ5Yd DP[Z?{FsalR9ahC\_,îcgtPM{L&MS"I 1EiPoʡC&372 }4,2Z+d9G(͞5A닐쁋m|cEuXhd21u-AAŠee5,N!E)GL1"/à-ն'ܐ_O ]ؖ芛φ4I$Z~Á{{mU&>':Iq`LiRJ%C".'0 JqRF(0'~`rIt} Ab臉=HΫUb!^]I3#Γefdw.{`rؚS2y,L*@u~�m:J5}vݹO.kׯ\v3v'Ժ w~pr۷|ZϿsW:ܽR|qs4`M[ww{g׮Ͽ;>::|koڦm׾:Dj6?<<:=Ym4 ˳w̛_-_Wko޼t}kx7]>yx\a{΋/{+WN<w^}|>"DXUдىu|{sWn߾~=jvZμb^v߼qs-fÏs88xmWׯ|go^>|x4V/tsWg3W9Ǐ!<zG9pt}\T!a�n[>兘;u舐= ׭@C9'B)JRAOfq� 3t@jLה='#/w^@� Tx&Ɓ�czAG0x>uJ#u1{:0F!%JD/3KcS:)^! P!<uBnR~<j͆Yyև'y+zD&`K.MW_#B ׀A"MEf Õ[O dQä.lWl57aev-޻l2Uls j~MLRF{`~@!DPI>?�S4@�% 2;1Fp yU[[\).Ȼ'䘡^D`~\AFo W WE"&?@`Cz/6*|�Bh;@}Pr-Hl 8z{;sb Ql+Nm{EodC2k~`RFt]erRtc:=~\私t>YN:ηx.'FA\Y 8ڏoM#v>B#YX0RLR-86(k~Mw.AcC#0 j4˂&LH嚀-&G֝|H%B 9=rr~Rqs�{_8B ĎEz#u~!;| !0:V�t>GƯHFQ޼6,+ k/#7�j| ["uirL%!s}v X G-l660;dIݜ1 x~@mWo~�^{xw^/~K;xxivW͢j3h fHTU8U{e>czpw=?~\~n]VKl۳i"_׫]=?FMӼ_ڵWxjI-NVlkNܽ}ʕW_|>|\K{ӇO4k=9;{/+7^zǷOX*p\Uyߜ,}Ǐ];}Kf+7f\-O]UGh<z{\V=їb ?z|dnܺ{/_y}/'K_~_yQ^KN~7_zW^}a6kjnz_C!mٖs"wq(fysUsDG[=B.〤9exGm/=/e8EUCc$=&iޒ,:'-ןኲIFQKȲ= �D#*-5ц�9+�L f )4W:$yrhS|? @qbB \̄B@$BRↇF(R f2z m "6Y7 ׹Pq&,ɒ/&7O0 c_FRv/+-Ě:ر8: `Y y@H|g<("!3YpɎAS]")Ȏ_sH^$RH1" !o"!| EyÝ0c7"8%BRefg&B$L$OZ?EȮ(4 Eg!抙w30'͏•)91CKBɡ4rro2Eǀj8f:XNHt>h1QQSI{2rO]kɫL5LЋ¢ΆH3o(!-гDH .G1 QGݼAI~ ꢑ�es!@|~Mp*& &P$1|Mwo)Fe׷I$H *^.c]9hS5s>5UOI�#0W 0Zv}-D$u?SI$(p 2,1u>OMSBw$?&lF"yJ4C0!47t!RQ*YI$!(Bu[#M8۩^{ie~�xt8\�<Рkѵ+W_~X_t_? 8<ɻ߻{b;݇ݸqG?z8[\v{wN/u]_vٽOwn?k@Uww룣ݛԸZ|ˇ̫]zgګǷwV 8<8ݻ{>]z{g'Ƀw3ڿLgv/]9ytxY|HK~xD͛7]׮\~Z-{N΃{'kVY"գkW^=mVׯ7U}ޭ.˗^sWn8><:߽wnthk׮ҟ-N� Y1txN!uً $(Ho?oh U<'כ rYgs�]UUUUWN]tm"D=g=�GTK/̮s]E)ѢL M1_Opx P)O< •lWr 4]}8aAwXLJeBDA I4t}EVՖ&f?=5/ c,C$By짂}!-IVDzܪBP&(W;Cv?xOXj{ QX~w�y l kބR{kX-l#R͗Gpf!DD`X؛7K OG{ !Լڄ~ !"<qKPC/FVU$@e7]cF(BD_z>tOU$Yk_!6CBғ7@H4ˡ"mBA1'Pr((7\_CuKH \Y% j*Ȯv.2#QP/ 66?`8,8mB_HvE��I-*-]l*:U[LAˢ@sz%tSeFB/Q?:]ARt#, B0|@@$#V"GF�Ie6TP&O>䒉rQ1Go<2a@+˗\8,)s9=v}i~xLa+L(7 WZe5ePP8 B!cMTGQ`<7CEp«#$+őc!d#`+o>M*ɑ/7"4|t,R 3B�6@Ȝ6�6m76*�H�Mfs <;}pn]gy\4g]~^z֭-]ه߻Q]voǏ+:;Ǐ}+@pM\O7w=AmC{™?oj>;>>v7 Z.ڪݻ;Tavۖ>vn.ۓG{GVò}B]{Ͳwgۏno׳ҝ<vtfY?xK?x޻?{O @9N>~xlKG|[=z|[>9Y^N;G?Go\=<7}w΃>x٣g''Kv_~}wwoqF-{Y] VoQCya}n;yɋO�{" <D�qasE8c\Ӟ R)!Aм:,Sډ QG#~y {i:Ft|1rJ.UfΠϕM'_ȫͫ qŚhS.{$dͤ'kqɄ}o`6Bŏ?TCȟW2>nBHVlZ> ɅkޙBEfX EE(aŹFA4WzS[h6OKS_\@7r,l.>+hڛFRzLL1yoH+n >aix$ғ<|xS`2HvG J`Or&_m^CEwH#>1!$ZѡB:gg5nDYa Rq*^VL kTАM6!hO䳿�X&;V+F2I獜u>, Qn�pDFdZv?@N>9B]"u-(C8*A$u̐cDS5 1r4R�l('D9sSViTw1: LfASɱђeF:?WqE7M6K<Õa?f@ Fj?s}l8OqLq 3 =P`u~ #Gz-a}V"H9DF:~=!ckj]{?{ig}eFaQ5"":E"OŚmo[Z?ߙg;V~]vY-Oׄ4ͺiռf Z�Wu^?9ya=-//݇j޶KW5+Xz>99;99ٙgr\#:Y-l^}\poۯz,v8e롡|n۸f 7pu]W7_5XQ=|ӴMݝږmַmC"_wk7kvhgrO^}xivVɓzQyW �Vj٬Wm w݃] \,'OgU 䪪GF�65�LC r[a689.ïYޝ]m;=5n}z]/ sY{xxi%DsuQuC4|�^ws�<{_5~Nw|u9|kcFN'ί{uvļ>1rФ8'-b5G^, y@V=Cc7uK^~-g='fF>ӡ"}/Mf(KNz݅P!GTr.1ъxĩahP e<0\n #k6y{J?΀LPO49~&E�u hDAS@ED1Ҍ>d4j9GJȡoc uQ++擹<?"j݅FyҊGSf$Ya* ,9H�Z!Mtk&΢I(3X?:{:=ϲY:g$ w$ʦ-2�2rt ZzsuFC <BFBr%\dg&>՜לu~~71x|CSM+`dZD^h@Z+*ϻˡ#b9"BQ&9BRf?c,Cʦs#C}{c ;ieh>vVݱ--j9 $ °cǜ AdN5\$8зʇb>r$M\r. C@(T gj'xTg#:Q}R<zFsPho M (@4b1 M_ui0.U09ץDnf4Yl G^t}͙Ƀ/5qn\0ǃ W\Aħ S/e�_d8 zRzPZ)EDoޝ+hABgFHv6N,HDeXl|϶BP蜅#B1^d" ۦ9y,`9IFj^b]zКF9�爚9Y?n=+Woܼr!qsK'[?8kW8N Is9Av]ly<y�@ڶo7%:"?kI8kkѓokߺkzYs-y-z*W9@XT�D-W/I'@&YF*Ċf<i*nhg+'V%:4zIͺFS;6ggj+]Wm�Cp6I,9!B]{*�-۲- Ŵlpճ Xyu.\ :2])+jJ7e[vje0\u2b:3o8]-D]�᜜8`pq55ƾD?)djµg^ j~M]8OW xdd#$7uc a^  g%oT�YѬeqjIb7eUAdʵGir0B} ā$yj-b>5!Df"Bg70i7_+iaU%6@a#D3L�"1�lw9$D663,Y[!w c9FshFIv%r4z9&E&HQ!䳢y |QBKd'>6#pSB+c) L?%ll`x$ H*.:&8@pJ@@!B 194 r� {~q&�@ʡ\%g[t>6Po6J:?b(8tv}c& ay(9@Dl%rdMaBPԸ0A"$ݭBEd?K\g qPcH raSB!]p}6-R Cc6V CR0 2=?% 0"A)8ׇI?]'A.VQ)@&\_WB BHF!y0US10Bd)� !P@H9´X!F@2:(?D!0 rrTL!4Y.J$Glֲ, yj zBzjw8w*מ�{jh=.К�@o۶!;|׎V"WO.n}xo>^:kfcX# зn5zO]* ;@"\{ͨm}=v;`DO�_<<:7v=v'ߡ簟}E] |뛥'8GYl:@z׮ѯ#uUZZDmnd:_GUtj(Fٖmy Гes|w\U"mIbHa[Aj*91B )z6FȈXFwBRXa0@TIHul1] QwR?OܨhSP< YL>;۫$R &�Y(ɽlJ)Ŋئ[1%bQ ANlZsFP{ q~3 !aO@(s|.Y`Eh Ef*rWW�mr h,V g)x-F~N9bW'6N` # D7V&RPmCBˌ-( Se"Y/�[H!ɕaj'dI^e ~:  3 BBrL�M3A�[ QHId pa9vOLN $:S24IM͋)cPO @8Yla0 I>$+Ri1 dA"ר d"r &0B2-bg`D6R lbbC/e9]M%9RfTR! n`p}5Yk-J&Yخ)QHT(@ f< Ἀ8d'gQHīPq!b%S0v(%cZKDX%9|F d@vr?�0` HORo68ٙ"9H wteRIR N¨H&=AM&Ɂj3NFˡ#A~#6B9fOF18?Jח"A+ jǘ=9HE 2T(@\9>}v!F$8Ȍ؂9r`&(@N"�3\_r� "K o6OEʮ/aCE%?J'Jk@ 4Q'F&n ֤f])HpaH0C@$8A2L ~QD#A\CHE Y]  rr5p}2؊$*@ !!IA"C_9TH[jִ^¼;PjuK-!"!#r䜯͜a;wFr*pg^UY.O<~dy뽇o|{wY7h^;#UXlڝfNoj~]SS+ꪪQfEԎjs7YBsB ׮jA�$BB$xO8 rPUPWXb{fٴַWU^vɃCy�v~y]W5V_֧YxlVg$ ^!Je[&nءCp@Ưɓӳ�sUUU ,\eHQyC-,St2[l6]Rr 8qHLK43k ,|'$9T϶ mXO.m|5RPiHdv޼!5EM>[,HdU2kJL(lB $[^]>,c~�&l2!zGE:[ f0'nެ] z dCZ;V{?[~XCgBzϮvod�Zed1(Z;<ټ6E5$yRf$9SQL%7U\Mrhz&#LJjM- w r#]U f­z`>1Nv!}qs`/[Cea!C^�IWOk|m!Dt! wvR3ujb4}P}C:9!7ex/6}a[zFb�a"?^09 9FFeˡr$5t0MW݉jKgErT&L"9N4 >dZ$zY8l($r& Dz) }iG|HYO HP,73y*S lg5#Be} !V�H?��"OM)Cߒz]  wg-C�}"9{@3��h&f<jFt|6?yx'?:;oX.sHby<@'z߁b*º|K@0߭'ߒo7 \|yh-E[kv;*d �4-xݟ=:jDX9۶mۦi7D^TsĪރЂk;8UxOom55̹pj6xzO} a o!Zu5ٷ;[w�c(D6m UUW;عt|4fYwznza>`ӝ7_]}g_c,̴"fjw Z|$eq0&3Y#3"f2N?SN~э)`h4we$bOTgot1 &=+6B{>߂v_=@SDe^ۥ5qe%ECl4YB1*`o| B{R${y3 Lܝ&;jtJ>Jo#d۫~l!0`2Sn$D8bw1}_6ٍ4Q‹$DH.Ephc(wd- T 职<SyL$tKpI<Z?@~Kߊ)d7R!dl-(>6xN zbZ*4i8)$HUT5dk%n*@E)gͰŀw\H.#ɝ ^~)tdOj$rĤ\' 3a- ޙ c 3, Y2EJ0;u~I V/^69Xa,IgS} #8 WyDp=T�!�CE:h΁�[�� $;@ʯY4<jgVTG*Z-Qz] rк򀞀|, <!"9�)#\fݖwO]??< sřN*Ī:H="b*D$OX;oDDB {tXWu ΁sr!k"rP,@rD{c(8?}öl + #߽CuOb7d^OOOv9n+p-xFmaŖfGa_H$ *`a$e*Gɬ"}β|h"5Bɠ-1ӴK*)+eKɫ8e֫G#LBQ؊yُR7qoHm"Xݍ`Gk4*)g UJ>nڙO|o&RRCMt}y1`+'bu(O.4gc$,x@yKm4 wM;(~R|;īmѩ#x-D ~{'#?2~#ZO p,Q3XKvz1>/\(RUsI3>i(`r~?j. 1wvS*LɶZ.beJ7Y>'�1-f`7~G%H'V`*-pSXY;(T@ ˨oS #͚DAL§2G�n9&W|=>7;ę̷疁͛w<$ uL>Z$o#%X)DoMVǮ6 I2? �9U@R;`(;Uj7w:�l@gH3 Pn>w*7_xv⛥s;<˖<l^ȁuԂo}|rC�[gy*F9t*p"v_ipz7f:,bS#@+°#Զ Q vg3DHوWu-I| �]UM&Wu JmYo*jkhwv |[VU1l˶L,TFaU:Ӷgggggժꪪ꺮Y/(; }R΢~foldNkӢ0W9]c$Œ򔵺 sc/󚛜oW. _Mie+EEo6J&?'YA kcoRjD F7żjxԾk巕$.W�e2^M%zͮ5[O ط [&܄! ONL<:1؞ [_i2Ul_`%G`%R07s`g-vuaI06 {2PhN"dK[?yi08a`Kd'}VZ)QBa_4"n&\DrddG$فCaQʽlZ_BEF9G%px캟 7ד�"MPJ(.Vvނɓtphu~Stq_ gC:2ÓFZ4I1Q HLW&l/]!J$CBH?jrsa$iNeki1 lEYS@b4(i EL$ VȦoĊoeN4OhFSto&o"Gq 7�Ltl~ AD%r,щooo;dž8"DۖG~_,FHFh|(t>a&ǡa_Oѹ&ۛȱl`qa2w& ]<˂D@D@1O _Ma#- P98Dpv=G<^fu0[-+ts5{9D�}{7b<O�]nUv'S7FvD�Sa&»vyX�ݡ��$φ)HήK͟Qo.σG"m>&;!?Q'Ǯ}7ero˶<BKijLoSP&o x29䃝\vNX!qY6u=W5g,&7Ub?�L@Hxl q�ل?.S!-^9~"LcL=G1"꘾F@B_B6h uAe0lg~oBzlB"X�Xc8 B1Vb&W^ !]mx@5$йVK܄v�v$zb EѬ~帰@ Ѓ<c$:NǓQASx&hВ/U+8a]M`lDHc Jc24&#$xZB!̩!r7AxS!cC^!F*~d#2fB~# P!m~@�&B`F`~p})+$ABLR0סHr @r 2C!qR !ɇHռ$0!vD !Bŝ2�F '>aBlJr1x!`L%‰}]C pNȡD *TV(5rQrHKdD8%P!R�L0( ?N8)b|�']AG?|ǴWɝ$ ,@vl !l A:>Ηש rB#$rą"H 109BBl0ZFX tFȣ8$(=:@&+D%B\Gu<Y>#J*2ryeEߓQ O"A\O71w}]NtX+Hp}09J? @{Nt} 8X>vM)>\`$h'M09TEHD̂!,d9"u.*HׇB("D3EDJ:ԮO#H0o)<!˧E&'  &JiF2H ?Dx\zlCD;؟ "->sUkĆ`Mi|�krKrKr !!fۛU;tӮrW O;k@u]׳5b|X>YO=\Up¹emE|5 z ,Zyj <�G5_׾j@΃}cP4U<<B#wz|Cm k%�6 A۵okȓwk"OMD+% ]׀k�}Tږmy<u9jqvvvv\.۶n要eb  aS&$Ԍ gzPO $B>a.pKgx�wQPPvbbDL?@.".oR= :9h^ZI|\"Z6/UHtg1EH|ymB&2PgS [s2lh2ۮvJyI)A$ 07!Dw;DHBP({b $b 27^& Mh xgD%wj &}҆  )T{r&dB3 \d9TgG|bBHXH\V ܑD &8*nU ,A6YiʽB?L@U_\h.%L:f#euIMA2 !7kW")E0Y ?4mag(v#J'o 8F r,I 8h2kmk #fDh 76>obx`Tr&*.~6v}KFt6aXP4yH$8?4 Gt7)T" 3y<TQ$8ab(&l=e"En 볊ML`s.~ӾнÝsD@vRp5"# �#yO={D<vg#;P8"CGPyp-�uDH5njC%\[�A T#g# )`[DGfi-bUUηrm�6BDhb՟LH-`5CG#f�spznr r!̡"xiqkjj<#yjڶi""a�AM<V+~vP!:@6�-�8Pu �t'_{2z {,O-q2O1ߨVkyP2:LJfm!ʃV趦_綝�`lG $Rn!?=Ӛu?:SU x�2|gtVU �G"C=?�x-<�xp-V j9yW980rz>Q@Ɉn`morSFA5V%^uWP3+vd_- $P<!%H<_)U>~@’YlfZD*C!q?_~3"$[iVM`K#BLn1M<gӈ1rS!$~_5˪y C@iiDek{A"$Ł}c AKeLtzֹc~79!pxs}ф"OBEg95iN taD;rW&O&D9lX|Vs}2SDی2@^DS7DdG8BSH!Vն2䉳0@B SPP r(gys!bsq C,!)@!*nd9'M�ٱv!| -FG?_Eп_31R*'Ц p Aaroh/nӘ͎Ba4mo!!]z9,-d8Bz9:<GHH`wg3$חxE !4b[X`_Oa7qC<7pN # 57@N@6&@V YG1B[$t2b^ ]_�yfǎ@|L #!kƒ (B)P@�T:JGѕ G-xzCG ק*BH߰uXFDtgut>@ B1A$`[zHLh'Հy r$ \sr(y[0YF{R?˿G SIv}1E� L@ې6{&' {%pݤmІ@@-`AEPuh͜sX"$rq ݔ3twy�:zۭ{V5<cS``kCчq}#G.$tB'GXy+"%{T#UBSU# B Oi (n%7QrswcBp s`?t%ږrr؃ѹ+_lCPBp�Br5vXt&lu0h| G<+z?Oiu80r/�ՆTxKaZ1z~wRr J%v4ӪOi@,!HN]tBd2O$n6lLUZpy7q'DvKVј8ϾaYfA잉7sijEK CC OL?5 #p )%e*?B~ݰA=8!Dw[v̈́A3 YQ?5j~9YS1@WwQ5S{o\_Ɂ+b6lOuJ_llz:Q)iW&��U`Fvpa/,I)Ѥ(sF YZsOfJ;:Og0D=q'{9ԋ 9뜝gUGDԟ<!8R❚; $–bL >`Nyop9k5 fjY| L I l:<F82ƹ={!d.C倐h2kgcԍN-U Bڒ?2>r$xuVa75BOvspm\P3{:wB*V Ȍy Tdr4Z0 Brח Sk$92]jA&> w},3q 1BAחߜ<RsQ^{^\dV2~i "bݭ1acۓuJ(�V=&3rB@Hʔ, 욜¸kn{͖n%!페>WކU*@@ÐKc|7Ď\6SDĴI7Qmڶ $1 +LoC) BbG1B~ʩg$s.}Ac8/;[:_چttD�^9\!I7+0T:ܸmHad] jp7$MBKDmbD{ճԅ#ABD#GgPbwC4er3_M%_ 7EzЇ?}䮈 aUA^ mS>{7yl$fgSB`V!;cY4uL59mO"B }A! &pk91 ZwNDyh*\m h)}T1JV~ݣjNkMwyM%l�yQ\6^6:s26 ۗQ % ƪڮ<Fh^X0Ǭ`5)k؂d?{yEG-L`G& qڮzGّGzMfzgOg%PA != w7LHPt fL} a_O\Dӆda2E‰X^_7ȫ`B.&z759uZCr!xO69 |2/|>1�׮o:N'FAH(ƾ<%فH?-X6bo$;ʔTM\_ ۾U;B,|t}(M$Pr#6<\mE-<RB\KDbArNmv(>1r>`_WROꙂڷR1az %~c:*-`@,VM4!0i-,r\ \ ˧F)䊰�lqkMD'Q̏6e- ݟ~ge{���IDATߌ&2[fOs1'2(e-y q&d-fL^-=vǩxԡXBA_Vι;~d)9"dsr 1Tlyu7b;.=d!>?%;ϺDRLD2j8K3N aysB@<J.{DAsÝH? FLN) Kˏ dWP:\3!T;GHlۈu ?# 1dw`<Z B<K&e&O y@@A^l<H5!_50ȁ4:!q~u!;3/} l̘K]jmF NBlqT IDl$WƏ0 !|)%CEpeB�,uH]D@"ϩcIb 3 jаGK]/D@rRO'&~OLN $:@y9c `EjZFfN!ͻPr ,H0yM$M &BNC!$=C&Y`FvGB9BSBɴDF„x~%H93)0!w}\ߖPrh"$RR1w'<qC'%u,Sql׍ER(2%IXgFrzFLrN 8" !A%#NRE:?]9™ut}!EN�;MPL HOR& NvJ$hA'o#$2TIR N¨H&&FñH|C'o= Q o:8?kă8h$1f"AE2D+(I1קTFcO!.]&G>D N"GQe~(@ȑ4A!rr1 HTn0sT߈KCM|% /zKPR6B5B GSIQ B*&Η1jf, DEhGB"(t> "G co9s} !er$f$@�*%\LDHlE ۲-۲-݂T.#¶z\.X*x}9ܹY$'�|D$jVNQ y}pf0xU~pLGu!J�)vKD2a!eaKՎukcЫ( 5o6E@҄\ 'JiX"B B[$GaBבE?@qMPnK`+J X3fB|LP,9\2`6{G#LȨ M94J8҄r@* @B#`lB9(a<'PM ".HJB0)HvvRV1;) -2`kF!!TBQ~` BY/q]X(f_X: >�*+#V!P7|9)@oӇ%!ڇ+<S "d)҆Z dAR\UHq@lSKA �C(܈Eɡ29r@\!2cIQ(bw#k-$>eEC$&XL$ Q rEv6B@!DFa(G(輡F) $@%Ҏ9BH!D\FQ6#S:: DHE/Qב}9*H0_  Bp*6qEA$ GH>҇PbCٟ)FR-F#r5@:>ɏl j0\38ﭘEx$hH]&̄!r&Q\Ay$zy4 7)!UHC8ؔp},dF4mm~1-A.ZDy+ ,r, F eB;YIcE u~sQ rrTiRuh䒔,`ն15‡p`(FP2őKňؠ lPlf@e_7On˶l˶8nz\kw f!"{ۺIU\AIm8P];.vTPr�nb6$#R掔r4I ?j#e 4_F&Ɠʬ ؄VJN/: 'inA/DcJG椁eOÏ!�mp,_"YC)aBZ v/bFM@Ξ(n_4bٸU)�Z&LfDs)emUFrgk+7Q ٲd@:.OD5(ק-lw$B�9U&+?Q#x,\ca`WNEHL6 )Q9SLOƨg1&y%7g3S|0;!CH!ܲaɌ1KQ,]!D,P`ٽ !&B`BqY7E& ;ycJۛ0\LIb_QzV6l.=Kg2B)+ ,Ȏl:$Eb#0ղh2)"مdwpe 1+kʣ{|DTȍ,b4"$k V`"y*w}z1H~YM.P1_X(1W!> 7C,@+;k"qUSkBNz a9S}V v}HsǖX/>Q;kπ-]_XA "AF.όH0>-TC-:Jq0g z;5](Im,"A>-:2k_Fp /u#br ?:R:rsUH(Ӥ-bLr ;1fa%9H/!%6 ^6" dq4AԔ(Z۲-۲-B@T몪irX,z{k]lo{y9}G:2ewI/否'R&`NaLdnU>6*Ԧ2__ibUC2T4 "op>).zXߜ *vhq;a5y+K[b"X@U]IDB\ۨ6DCI[g; ^|ȴ6M  (V[\<0ydbV(-'Y<M<dFHa3D 4ɬxM^�+ geOV5t6@Vㅻ<0,j,N&l\4!|DgdO(nLW4N٠E$ZoՁ2YEnbV;!$^̇F 9D GDPkdgdGIQq-([Tu\왡�g:\l|`D &GdIըJe~X5!vhR&5|^!V%MEFZZ$sA�B@BҲ`` (s3?rc4FkE0~ab#pOohyKV͉paDa Dbȑ/b "$9; acXV]C9A3D6wPȁ",Q!Tb85? }m#o|bE!oxɢO>U+"Tr}V/(OQ<Y YkSd!9lڶXL$ 7>Ek#35]Hj3ٙ2G+2[&sf]. 1~)bT'<[?06ܶl˶lgPV9We\EDM,b\vsݱϕss#6G1/.:Q 9ڡbmvf_5U,u7p˄O4ټD*joŦ2{$^a3]',5gbxElU(ʿvêMMF\M}= 䣿VWPiE?~(dĞ}%C<̈́W7&=cGԨpqCiʒodPuᓓM;v~'kljsP&x Ie dRv:"dBgj3&8SNy0z?tzC}= lExEbs>0YUA᤺|:_=w Bhj4!ĖC !! B&̔uXΨH,,DL"A7*TԲi$ =y"A&}v1mLvv*kl|ouZv#6up[2C9B2r䟞ZIXRtqOL(9Blr`c�vBfH˃mٖmٖOuP�{߶j^,rZLٞmd'NsSFEr�۩ep'�:)]�d yM~agI7? Ey[sC $ U@oν Q7>);W$C y2RoJ(ga4v<xZ<Ig;'JxNSj~6ԣuNB1d*GRa"ָȑ\3upUb?aUmܧxē\m&OWvqTGihp} NtԞ8N*BFB "$ż|%lؠ`1ɥ6eD5Ml;`ūE[ Gh^ NfN#e4$-F4A ~@�&BK8D LÍ?3D @B<Sf!P('3Ï3"-,܈E86A^BB=,A7( A!NȖCѐJr 9+!%PlIdo䐖Rq9 r8%P!<B}F@ʮ/8)b|�En :?LG:_}LzStԩ!-gP0d9:G. nw@Z:IaHڍY;CXFK !V$(Aa?tF1c0y@$(Q"D'~C;=~H#d!#e"Y{,r p@d0>\"A\Oё w}]Nt^89?Ѐ\ >ARds}2О&H͟co@$%怵c$ F|!l*rEf饆̂!,6EE`"$GP>${s$R"%2r jק$Bd~ÐO3b#G!2FkoGH1TJ3imٖmٖ|!O%ݢssVbX,Wo=ڡ?BŜr`R#ܬ$1 y}#yʐb~V깘U_X#'J=$x36Nͧ|&TxQL{ʢ$\D"?&F2^m)䗘sRD$ȿa~7:!BDqqyt>{d>VBR#-MMA$!` O_RY'!@ AZWNZ)9Irh^ <C6GHB8[;a!˅-P)0&pYP%8nA BR"$BoD H7%'"$ Bd.P#E�@!#zFTHr/ѕI J%*'b/Ѱ΁d!sB ;!`"υ $)krBh!$QL1!"92EK9:. M(!,ȡI$9@."BHOL-`*.CZHWq)*N�6#GHݸcYUT(` LbK"X0|R2U2 ³ҕE"(2!L~p d $Bp!4BBHKqeHrUFR\3Av%p!`l� NI\A ɑ y$ǜB Q 0u>kx6O%OdT"G(<By5J [&`0U$fB$Xp};"9&{qsח0gwɮODh\_gG [|#xOE !ɢ:<$u>ۓ"A(|0'ǁHAּP-@TPYC^0DrZ5|d|bh \R'.gJ2P@÷e[e[>݅{w3#mUvw>lK_ T`#q:ueu3^"(<�&^+71ɣ5*Ɓ&` HW1`d?nI&Fc ݐ5`U*nS+bbkAIf %"�&b%4kz$��e/V23!(WnUʘ]o\ g(ȠAO AGrrS!`IJC啸;ȍ8@z =a중�̱{q×"aBX FL Y!?ZfUx2bJl "$oapO�<f9ĞqXl_p{.DaR D V6z: PbwZm c$g1@-݈A@KC!`" dE>d~d12>2CIJ#r(͛(Xr'I$e�^>/~2&v&DӍ~bC"t)BU"�bd`4jѫMt~6c&��BE0T>  SoȘ.[>HFul||(6u`))jd'h7v`IOC!!y5ىżEl]B_�6Gur[7�W'KR$՛ bwx8*xOmH䈣?l LCRʏ@C[$Ǩ_1Phro|# ,< eB;1I 3"AbώS>M3a& P@f!}Z Ў7N06 P`&BHbGz+ V)\}?h^Gy I#A+HQBG鵘N0Ld1\ -}Ҍ$BQ2yX?{;-+S(`ݞi՞ٟtDһ1zXVi:*q]Yl9/(eUȮ6^sMURg͑}"`B-!VAy$@7 ThEI쑯탖b[:1\V{ظ%ƶ g,†@X(": |JaG0͞{er}pyVA像WSFXPw#q7?4 !@n mLL pn}6!IBviȍ}qЦR r` èjIҕਞ︇n/N<`9�!xelwZO<lncVZm%?fˀm lVrlW&<(``dĆX(9:"K$cct}<J'aTvTkJZQײcM FAc !o(( Ubxsi/D.f7Elh # !"U*PÁqɁhbPg阈BHɡ SGJĶgr*1շ됐ϕ03L)#Sj+9WB]}ts^w&8 E}.*ڼ6,r̅\Z0QǬo֯ B(w}"Y2ҫ8;SI@H)*#R1k?´=9 !cJE^M F6 ]N!:SkQ׮OHcHeq8/֯f>34U irl-jx;c8 ujGx#!"d0One )9F~sn#@N�CO\L >[?%;lr 5B>!!s}bSB3F%?~ GcjBʑ`u]殞fWv܊(%p{v$X8?` ȨT<Rg{dGh:U(/kn6 OM逅СXmٖ4h 0?S&|;ЃԻ1Ώ΄.*qo|۶EZ`UUUU9WODBIXȎ?�H"�&?#Y>CX>uɇo>lu?7|L|;x;;{֕ݖOqAv/_zKfO͇ۏ1zJU?s_G{U~rѾƣoMbOo^ �>)^OWoͼg[(/J1qr1٧l˶l˶l˧^w*s~ghOue[> hVI]Ϻ)j'1 [:}F9k^̎\:;sږ?X>|`iLҼl˅vJg[~\{-"갈Y,U�`6CG<k+~շq#HX@Vv8ᄝTVe|l%>%VO?>+[6[_'�s ֻY&{DrQ:OlABZ0oCEl[X fJ&ȍW?ٟYCv_}Mjq6mhBr0!!mQ[!t!Y8S i9v2Ab�'29ԓ} s8 k_<K^} O?3ޝ/ֿ'oÄRM-T7DX!2ϭ"0w}BRv!?p`<rr}7Jo0qI /59}go'6MN_F+jJ�e[-BҦtb t-,܈6sk!q j`J?|6?I|~CY6CxjA^y홊N *M4drnTrxkG;#1H" :_Jpʓ M39';H!kS&=B ֖FX4"A9Sx*Өl@p�^>0]o?~g܇ p}TAՎRUfXnȅƖPڔ7455> <  W&O FQ1ΥՒ^˗!{{g*n$a$2~/@|W>w47tEt~}kJ~zbrg'La �6O89lg~k*<{|mwq|:_ }3a*Mu}@2HZnPl*dp3@�˘ªv>w[e[~Js�5"mM�3*6ɸgmγ)֜`�ERyv#Y"oDo  3C]zR~tOM )lT)#cg! 5,Q\W;~tGy 6(8ԅyd7q s''#gT_Dȗ~M_W/}k#$Fa G,MHY-bM=.fG {3AлsR!59<ʧ[ ,G *F1x:wK\9B/7'¬yI&7ſKNG;k_OM6!\Yt)@]_<܉+B6B@Bb8S2ӶK"@Pdg4 ٙǃRFÇl[$n6 !r�$77lB!0C(Շ#"Wr#T09G L1&,, BJ"6AHo .@J fhіCrLTr(Kb [ \ K`'iuHrLZ[0 +o%*N!"]s7B !RItppe}AvRQ#$9B(<"yG a+O4BX$(r,ucQaEU`ST� !Q$'G$O!B`-"$ 1tͰw#HZFDY$YUaTI>AgDRLcgY!ML ,{dI &S`I ]0D&9`K:_tyNpSbKō87M99 L,?A f$  -l"D u$8` FH &u~񼵅"1r:L"W�t|u7/Л* "]H)d tS*r>�H|5�6Al0<.2:6e[e[>[+n�Y,m뉰gY*\u=1 JgL:.vO \,!QLFp,BqĮi뿾!\p2H"W l 㳭#=25)Z3DQ R2=f`ĬC01 SG|yc#_"ݱ)R?O?oW /'M]uə`K&90G\ٴ Wq; �ӠSI 8Bk)~Va6T*KɎ`GxK3*X.XwXx,VU E(2j,8O"Dg T oWon4K/a4gT"2T!^s,\c°WEH3빲c $\$/ ~Mg2'?cTtJxAV PϨN I>,4 B.ٛ xG!$y)o'# ,7N&"3FD%_FOj10J#e! ɑgp 1B!#GdX9-ؠ L@ ?bFRϊ2xL"L�`DDO+dn0E'L�7^z㐑D rumT(34B1BdMybʤar3`sϧZGu~71{b&WFH6救ɐQ\疀]mS ˕� $<CɢY$"' BXÆDy "KdO598pĕ=+ `92S֑ye4p})б6$`+ǖ�f5UFoJ$ӥ˃AQ@p$q8o 5˓bs}π*ȑ <SI0-KHp?G!]l1<j7l, Ϲ7Z,Q@E6U?!xstt&^{xoP=0-'_ 洱UI0+`rB$K^ oe2O_٪YDvq`)ͅHp[e[Dz`/-yO�PUUU~\-m�yI_p*W�eY;X@͘<C�6 )?l71Ɨ(ǹJPs<W>="fY"̄_?,Ė=vRf#^gr+E b7^6bo!TW DWcLaNkW @]+Ør5WCc!2]xP9;fIA +BHX2 $)(.cuBPWi^կ__i)uty~n拯#f `rYHár   !)~*aG(i617!|gFs{pf!n2 yk3P�:L@ Ȓj�d7!" ,C !T+'Gq> Y)r%H&˄dpju˙``4& h.Ndr9 V.+!eG?<Rs;"u; cyC�M+ ocJrS49+{NWڨlQR_ڕKs:??})"N $62f �L\(]x8}4B6A069B iD"P2AO p(l !Y-L>|zwބF Ɔ"G&ʑO \)Mw�FkFRb"|I#$[9fr~nHJF*Nb�H#BHX$h#%ruj,~It!>RL"~ VIE$\ KA,W0^BbEy+fa5A&k.:$B`er n0zAW>LĎ:0VԱ6N;3)6FL[0"A$+J1e2_:CJs�yL%I` x2|[e[ǣ Oi}l^Uq+tqhm[ڞByF=b @{?@J:FΩEsmٖ썟7.ߺ%2Tg^xtuE|_{Yζl˶l˶|ʕ�ů]yVxk;G3WmU׶l˶l˶l˶lK_^ܥmJj[e[e[>&wa9Wu]UUz>====;].:e?s?REܡ6N$ˢcx5~"rs7Z{yw+q]>}to7 .ko+җ5YM{ 8xj.vrX* 溗m.yU2Bѿ^~ZXׯ|kO~vy$.`B:QwaKP!QI9B*]3OǗ@B̵zf&twQ@͛||?usZ!/֛?(_ﭖm!'dR/ Vl5<,ʸn!Q6BF@!Pp}\W],*~B'>H"r u .d8Bp@""'ݤ#6j3brNjG&;'r�X~  䛐d9N6;q.~?wܢ_uv|Tm; 0x\_=te�LE^&O_tUdAMzwI8T72\$;d "Ypް(6BYƇ&ĨA]_ ! BL&ݠ6ق@$U"; !e9TDނ=ٴ7\㗎F<aYkG7=è [ icL@P$Xƈs~GsFaCJ[\8,_"; [a]D~/`兀 w -\B$7ԀL✌zY&ď2Okbs|tygKU&:w*o+SbG!a ;H}ƈNcm*Bf1o-۲-/8H1PmKOlVQ.*dRSjƤ6YL PNAG5($, 0O]!w5蓑Fz:�څُ<fıSYD0]#9.Gf;ǻksWʦO^1LZ]M76a7>1€· >!/d `oPp 3!1> & W|4knuu7GH@/`fȿy{Oן?}Geܐ0C_'X`SweBwyonY@;ZbHѼlnF_4ۊ•A3@L +rgXV86�DF^!ǃPd{"0c)A)9[ !Z>8_$), B4#$=Ox3IP>{*MrH]DH p10!Ir("7Y I ⋮/Tq Rq9UC\q-!WqcLD\_/ o{`*P\yEvHȡBX/ @F_F急WSsI`'H#!G"è2S@)2Ǘ:$Bp!h"DDч"3XF6H�DI$ " l 瀥b|j_<^ۑ y$ǜB Be D/ M*%P"iB'"y0j/aٚ O#,>󁝁ft}xp>4'֧OTEܹ@>D$f :?s}=$Y�Pb0šZxJ$ȄSHB@:̆GhɏVja )|]A/e?NdoD}L" 9["#Ǵ.<k92Q|MdGI5t@H DP@i6^u-۲-)�UUu{�f�m4T3sbbǩ H?H.*O�R`L}f TfttmQGk{X ,)@ιl*J2KGPVnn͘,=y'^;x˗+QU/h]v/~xPPG%$Ula@/N͔@ /&+Z ckG@HS,*{X՛`:^unUxG}po=˫<_87~=y܈o"1$ yyPp?|Xio !#~ \Pɞm=O?OqBG'"uf;@9sksXd7<fs⋳2Ũ!xn !VwUE\$o0l8<p�Ӿ<M/7d@)&_OTΫ/?Zx|}>?ş>/|ud�E5b?w}x |\v3ci3i= j>Lvo}_{uY&TjWP81 qаzßzNĹgLMfpzsC,^ -&(Qra2NM|jWo}nM=;i<\]g+4-&۟ו)|RrObd\ oLhT]n-Κ5{ud8A`J/E Ond)J dg;S]#GPA)rq=`໎%C))?l[>n s3d.= B:$?�"-m%Oi=.!? /qbGgIݿLArquXKSөBaA\\͂"W~]XXaI'VzM 7 \0U-p :9m�q#b=]�̒*&˞*gB6BzlJ/ ll?@;Wo?w "鯿10埽kEWl:@[KrmacZ@ B�ȾN!ͯ!  X}drgb b>5!Dm#B2e(Gti9sJ�ƥC1W~\a~t-Gi_/[]eo;{/ҧfsG_[^:"}<\a#/U-lݯ_~Ke2ׇ  $l>_>w_62h.\K`vL*HѸzMH?#KIE%B#ZBM\_B!1 dQR)`F L$M`rH阈|S$LjMT$ȐC4dB�rWH QBȐC�`J KlhrR9:kϥLUo}CD? tޕAITKWwL!T7P%PL9kD[ȳ~T�6B!· :E i", %`[$%E3-X*=F}^܈_zC/{k7w?X-")!DFH #$vaF $A]O̵W?jq~}r}> #M"WTw+Ż i>0Z,>)HQcWDGFk mQtAohH!? rDDH&f}W?WT_{wn?i7/> ru}Ο΅ipxH"5B GH†\&Ф'R8K$ܡx6XD20l! CGgq3w޵{bSFp/VPBt$h$ #Ac|d�EvL.؈1c&q0@�W <w}3T^ޓ]ĔsNCyzNg&zmQ*/n<(>D 2+4ݺ+/Ԫxz��T�U"T58Go۶uK0 $��СCH6?;[zMC{{;;uh*t}޷o*� V~KzݚPٱ$�02y@mٖOգ◧.ڿo{~'<+ l˶rt<4}> �w>\Ra`�_^3ww߿57tGVAU{E+o<:n˶l˶|˕bs[_>8婗/|U-4[?u9AS_+߮T]U-XcO/m۲-?q@ݿs4';Y}[&@ GA렭;<8G�ky$lgX_gV%|* pn>Kcǟr_՞翧Qqc"�Ɲ=CTGOf’/D_Ky�حqj\4'rAUټfz&Gs:GD{-:{֞.QMpPkHH+1ZSaeWZi&uXaQg3,K|aZX W>-*v'@]/!"[XٯKKbᴘT/{qT;a[7RFMk' s!j[ B ?ui޿"<&�?37|낸2˾NؤarE3_-6�y쮸@8 $aQegr81M\ CG,JUaG;j^�< B˳򓎀蹗_PaTB )hqTPě/J@ 5]#gk|׼'5rorܝ%z |C'Y1Hd*vzG4$6؞x@Avª";#Q>\_th-@X/50B!gj(zɰ[�9BW @�j2.2CQ~LIGF�I(rCQ(A[_%=TmUPΙPIR(2Lx�1h?ȯ;_}dp$Pdtz?绎cC"$H5w:0΍#|&2vUcH2 lI~�7`:WGJ=&I:?svLPÞ�%UB4 N J?@H4e_:hl\i;Q$BHPK{rX\ AΜ:3R36 /|@^zP>v$1f"A!듃\i4 yPl&  09w;^eUN#sC)x@J�y- Er.99� qϷ5֥v/qdr%8)K,b-Az_{]_qaLrjj!a*&jgQ|dB ?QGޛG" C4\= )ÑF~3)(2H,^6YTb#=W$ lE �B|N-ͮi1'P.4-�)/t= xPm0]K�^ vX-~ɖ&s9;B fݮM4ޓsn6{۶m+tΜN-ZN{Tfݟ@d~^x e!Y)(?ǟc>vy.%뚈gُI'ϒL$:&X3LƗ$[ 9{|pHqa[0B_=*bq{aAy' /KGǵȍ}Z8)Vpz\kQ^sL\XK =26s?`kO!ˏ~�X,F,.'(q僻)!MH9Ad&?y+}}X ~z oBH1ѕґ?�2NH-6"k"B*! px̏!p8NXbL2>e]D46o`K6_5*6�_?;+9B(!y64'c !�0Nvj!</Av6B!%\_lrzV&\_69r@6JE~]_2'UYLKd,> Hr('3t} }nYH 'Sq%7z/,I!"$(oUH?$%4)ϷL B$!K9Bd`fS#bwP+0BvTyBP!DcQUUc&_3?2&!�P!GH>C>+44^� }#]٭+sr1Bʑ`9 )U‚~0A>eq`' $R E A UOG &H`L(yIy$�G9 q5JCPq#) ` 7h> C2#ǒ~['`R7hcGBO|gH�|HAO r3Q29lghGk&˹(Om C9rtJCDp%`U/côtZ 4 `Sia p@H9� U[�O No`l˶l˶\ �B"RFB\;_琀�KVWU."5$irlڶ9:}YN<L?#bi& e{m/[)kDJ27n|Q<Y/ɣ ;Un%cϥL m :aXT�6 {>`F^W1|/?ԑ\ͤ\RT!*<:.߸G^JZ,zwoyn$]\ۛ@#DM#Re!jJ%VBb7pW#[핛oT`eX :b ˨\\K/V/p-]eW}pwOPpvKWE6Ѣ9^!b!}ֵ;23ኣiR,K` H"B`ә|'UᩐEn2O'H\J}C1[$9Bh!ZK$]W.9q/ ;LɣP8B CHފ,Gd"�6Y&G!@vk5P!s<]6P|vĬ4_.8Hf=Le"YH KWf7^'F@l8e*֗/p>W})Y&N0$S0AbN;>N.2 IIWb yJr4LrT:O2}v9sU8y1j'Ӭ-�,$m*w}*KѩM�88|<Ao)Ed`~:xȱ=, *,QL;a,r0a#'GVE0 *132]!t F$%}08FoZ$(r9  ]&$Hc3#HG9�km|pwGS*Mqd焱=B& `><-yKHJ# f!Ӈd #Ď|Y0Z8{Nv & L +99BTf:]YQ %T$H$s_rp,z-pɎ TN>L:$A2L`09 `MJvD�Q9rIv@[e[sKl�6,*YV'_{9#tGDW9�{ZVU۶"y9߸ W\AJ_t#-: dW1w�gbq9?2i d06-`^՞ٔ #=E�SdɲtZ0E1¥0?x(JRܐL#n\b.6bC)(C/U<}ނcNz�^H; ODI^]+ >^Lc!2qY9[YF5wR.+̒$jI,�N=m@b\-[ &0ח raM fi"[͵9"e3  4~cذKNsd]FIl syʫ(<e*) Ærro<VK#$M_ Y`0vbph,-#HDJrdWpcȢȔl"<LLfq)Z162رe bYsuQPfёrM6c41B&M,N ٱ!7dW"GAv޹ gޣ՛W~kWތ2W6(BI/wccHjI,D2#/B(!vyk *�{h0_B|Et$= quŔy7Qp#AL(%}!I铵P9!fĔvhFt8%ԕvO=iFd]AcC#BB)oEZ>z%T3`vYC)(E0H |H%Bs#?`001Qz p@@ 2Jrl^|/QƇN)bh?|0Q0g"A%x\J< u>å G+/ !1"ټBDRq&+](h!ym$Z͋;ۖDQ:_Ċ#DJrBHDґ+(c,]Q%Sil+qˉ<I$ !(i $@v@n~b,Д!-۲-r9h䐪dzxp^zo\rm谪sDԬbyvX-VU4U꺮 9v~\A2<895.P3&u8x"뒌F \Ij%ztwo<4`8ٵrѾ'ɃPDLCVcE0&gE?LhFAJ�p띳Rp+'㇫.@PVe-7f)G\Bա,l|�p_|uyד@^56R)xUgcݖPKw{q-_[ld)L�ё^+;ؽDg-(MX�oomƅ}* 'ᜧ /,KfDSIb=7lՍ1~J{*w ðKTF s,1sFzPٟrh7S=8d 3MESHr>$.Ne6ҕ ᧮|ugC!|~qoI u~<2!L.!siT^R}mF.b!&C0^e6PQqK;ܑ � �aO у59(η I> ~*ӵBqH+8 عmLw}; < ir/J[>{]c.o^Tlmz72*62턣t}2UP/&dcYk6p)PBȘe�6GM�Qoszy/O!CKnL W� &Bl[e[,�[ZBBCU\+{oʹ /GtmoV~ n/ΫJG@BDFGDR[d0P~YeҶYe)o=o>RĖ�K/jۋ[}"+: �y؟26fT|!ed9~; +]UbZ6 `ڮA6CX&J=l?jEN'$+v°Sͮe'IʖC eAQօPg~F%ǧO�y�ݿYBܔ{|!ϧPpV `U4ԏZz.! 3O_FLwrPY*PaVXFB P�#ʲ4*yK%P P.%9Bx >B U AvR:EX*ݚ|�<J"�@v!!Y-JedzOpRo^,=e' +֚"4tvZ!Ipt ׯ @H\@%p| ]�nCnXZ1#*`^.3+)g!Skz?#8Wů?7-%4ϓTxK�Ėi&MsfQ J�${dSZ珎d= :?VLA(۪\BEK*Ц CT@HfUc@;V):Us)�έ{ɽuF 823(E"VIެK8_z1jX6h|] ' L"W49st}&h!Nufr>{Y[/VrC�\A$Ǎ̡OQW קMPOU ۲Q;Ќ<9ζG`GW&|KSuXd =\v+[ |Fd^*s%) = <Фx 6 HX E+\N4`1T"6Uaz@ j[JX!*¹>1z섯eKܻ5�p:s۲-۲-@lU@@Em݇Gw%]5?{DD{zFv6uF2D̉~ JAY䢑r)R6`=^ϽIj�=p'Z��y-csCtz$+bl$mg<SN1�5şAk7o+%b;KvjvÝb9J0C'"SԊVRR5e\8#W@ !a! ܞ>2d, ѶR l\}s`sPϤA^8uwf[jAgR!/x jY6Aw偫ܫDT@okre}rI~޿o<wBTk1Bh+(\DHr}6DE2Cp_ 9B !$yD~ | 0MfLLK&0?�waXT!]99t,ϛȎ-a?rH!a dgcةǍ;X_$ rH>MvE5{�*땛lu*Wq_+nҌ] ! &wy2")@vV:?!D!lT]$/9d'FA;7rIO䐍 !N.BJkh7UoS = ;#B`sD5#Oc+  �ֻ{bCf '1w29r?HRY-L]%m~wQ�ǂ_;ULTp`CPRi�&G'u>Kɣ>*8ÜhRI'| ;34P?d޾ N.ir}r769Nz(DJ_ DCX[egXQ!u>@Ikׇ�+oDI b`2V1Q~P#QMcTdGўR&X2\D6F�;G u�@ KHEmٖmٖOPOT͝UHЬg{+Go{Y|K#l?T :tUG4ͺY.Vggi sm uY7S. G:)r'U} #)Bub(Y# 1(C./¯\" 6PD*)'1eu0)(zz@U}VSAja)5DIXRhy~^jDÆBaɬ v!K/*"O _Fe-HAH#!,7IX�Ga9.W3cfZW2z!\GRG|Hi?+d 7Ni` !P6Cs!,�DH"/CWbyg!$~?|%oK~?CH,!V l@re(BB ]b~S0(qs}{D?T�IrdB"vH@Ű ! B_$8{0rBBA/6)Dv!<ԗKd2)BBL2gMW!Qr52*.~/CiD@C<$N<8gK߸Ä`I,^CɄj~!.<]JeP3MHr`$K"r=)4Rj2\YĆ܄x~d+JijP[e!PW@"ҚjA>HFul||(:Ie$B2ijb'uA0 H#GcAxؼюH<Vs_yr$zSQ!C`t}:л4;o}EN?u"i1'FI]A)v+F4-"GD2 r5 4A"G60ӄLo &r,D|f`r|6keUw_Ώ|iBh.VyF" G%3VRc&q~ Wr# qDL W.6,c Kqt!dt>d"9 ČGZe(d9APqړ GID#9 c4 ĐO !2d3�\DJ qpP8(m΄fO0-۲-C(Gs@5.9 !9A<;~˳K8. q!R,HDlg@tUU@ж~jVr\{K @jD]Q)`g]!%��jv =,#SlE_`]#$*)9Q1]C¾ co cEȢlm:MCyX3I-j0 k+ds,6&'Ub1cwti1s96B ,kwxzTs{�ݳjop& K>>x:Һ( %y y-mgwvܵ[Z\.@B`̴VU]ZWΧ_DȬA}Vefx.~s�[W r B †� k^U"İusG*VԦNg K*OIu[qQ0GaI֧=&6 0AgK׻lWk Bוr@`bC _WUҍ Pab$4 ՙ[u4m̓(:y�6X.+Bhc<&,ԫ =ԱaAH4B4g>5(Cu ER@BeVE ;M(B$B<Xs$3`Q =FK7S0!S',6r Cˡ@cC{% P=Zr8Q�*Kx+n�T0աB*4UYf~u]j"d`RÇC\б&  ԥW"22|b>ـ e +BI֗C6E*7&eʞJ DPH )Bh˛lA0.!,A-gcl2<ZJ4g5d!!|O>jQ,wp<o 6V<&sA02+H>rkA e}pS v֗.-OE-AG >#Il86(~c%Hu?6*-Ndžd}+7{+7*C#%ln b| )fi6gc6bO b$<b&B  B@CHr6B4m߂Рt=p(1i (l@!VK0gU DgT8B*HkP6`B8ZT8"|7MulH1>َ3< <z;9dF2bÈ;Ilܣ{t@`Y  }oՆCn40( |p/-L3t3{=d�Uc�9�"OzY,�`ז-~X8iN"C&&A8I^OTI_QOhYO^A+ݬr 2)D-K,(\A Fr֨|UEI[W}_[YĂ*g5.4ݰnRDЍ.@6由\N\ckʤ^c[!Na#VL�t}L[ͯX @Eb吶{yr}v<#5 -|@FhS�u 5O¶9/6푚Z aGa2oC\ڧLG%^fG5F[6\a%4*׸w:$R^9aG6(Ysg-]:a{mYLXvF=u|@C^tUƧ+Cn ]9%O9ƨ;o(sel}\m\=TѮ 1B߰ 6-X3bve4@dՎ0@Hr{koDHm0ANxVʂS`}npjH韵�)*XYE1 k PG!Q֗!Ӧl"E Gl 'Xl5f/ |Td<=X[-t1\,}: ֗u;*4g $dz~zh6QFE:֟(L@>`WrAnhITdmNxJm6YU\i}� Ptz~5Qr0=DD� f>$~<c]={HaQb@PÂ@π;\ _4Z RuC`|( .c,AYccb ^1DNp.pR8P?PR`B3.`;>_>X=vCDn% ?e `1[D jB>$ж$j~}e1+(oOK̤; uKkl%eBoHo-?%wCKfWpJ]ܡ[o;ճf;)`|숙?e~StK.2t~nq9})0*MBrG6&v FTX? h"c="2L{l z"vP ;s�GX8!!^wH,J!Հ v"( ת'`hc6eS9�pR9(5?x.G˙W 0O,1 BCaDѠ\P[S*hR`Ӻ6GdS Sb!d;Ruhyn۔!mvm9}Gw0zE4V[=,j@])mMӿ|Wی_}b6i(1G P-%8rDa$/wϛz0k?+_tdX9qfc\?䭳8B.S>є <r'!%B=5Ve2"@)H<JwəgU<eColar4m/ Up��'@p�+1,E~T߽0=&DH~0/�]sok&۵0R�J Uu 3壠X A fѡO<"."Ѣ1Ha40 I`Y}@5u!͝Pv8њ;!9ۣ:ZƲtBgo):ؿEBᯅz/AЊ`̛r{m1||@qAFg$;KCiQm5SN1E&$I"D6 $Ѥ-BE<a{mvT䮅]."> =ߐ0π$B \JPÆtȑ? Nx<&a D)S˂hM{NH6HVSns'$O"$!`P`gk25O9Ah. Λ&QtŴj`m6+o%v@ڿLpRUIG/|1nˊ#D)"} )m<agX}GQQ)*wG6){gSR;efmU,iy>` ;A$kG hq&s*`j69[VXH"$v22L @IXflWn2;I"]i/&aH;#D>DsV"]1<B!agv/ ˖kPUݤ$`.CKO9 R AE P!Rj !p4@Y&l3l!~-=A |Kܚ* J mBHט$ ( 8LImYz>"l*JeB ӧ wp6q-Gҹ]JavRϷ�[c[iuU,3Nz2c cڠr``$8&t}R/d GAD " =?]82q0*GkSB{*)B 1@`is˟2ד|#X"$SH(IfF:y5Y-+1t0 �s<VP�B}=GH9OMiC?; qxp:wN: ruVšJV*X!S(A0:n<O(Vu 泰E�4{WUcRs#A0� j*(nZ `;GR9YP \iVX[^C5AY$Q^;Lak>o2x!_KFH�% TpXbH:�5si]L[-bC]D %^haɔB3bW͕D):h0lBh<94vA uʤ'Pcc_Lm4 �Ʒ|ܺG'*`#vvK`S:Q3 q\`>"AX_T$B+N6zF!j7>-�; 3I@i;nə f=99Eh,FH b| Ÿr(YVD@ 6"*Sc ĢKP`1L ! $Z{! %4u0O |!@Hrs<t2M"S�s $Xe ;pDOA!Hȅ>~kQ*X1+�bx?;-I wДd&^,U[9>���IDAT�>8.rASys|4hJZ lFRB@-2Udd} $$~QDL!|HT(V3RT$|j%>nC8FIZRX|:ƍx\at<3 5]´ %f)/aFIK M֧iDjW+Gb(ɚB:Lm1c8Qpԭ ሒKFR8 C8`>ሦpLqh)OY1IfT5_E#`aB>R=Ѕc%H#l0!-x Y#r]%HT(NxM| 3A"+){Eȕ1sp#$Z$B얠 YaԼ109z _Aᖘ 76rY $@H.Єcp `wW@hJ=vW tK0bz; +=w@7`~ClHG/" N?g|nwzQƁ[*9 :!8b`El{t=*BiEXΠ� sh =#'=|dtra 8wPT0(d *^2y?趻v@'O&}JI05a'ZO *?`؍o*G4&q%Bⰳ1i?Ed 9;Es|U9?4W *+BT*LVg|= F,VbР)j<3F<g ;~%W[LKV*�y T}ku3F\S 7#&JlFH_dnVQtFx !+a1BgF_]46} 3Z光*k1.221ի†$sC)7P|ĆBEьZ H 6B jUJVfA2̦ߒ@%ĜS k5!tm%7VNםH 1'1߈_-<$Po ѼBCF;aIBv)HU�!`v@WRF:R[E-&,SĜ9QJC)Pb.HA<!&baU)@vo1@KSPB 'йL~oH j {J-'F ~de}e'T=G" ǘeSgbc#P!RZ�g) L[SkBONXR:sBPaCH%hFaGyS(+BXRBMmb =v!Ik zH1)3cp!R,AS} KO0RajP[DChx&,/-壮)6WgJD&b$l,[@,Apԭ Kl~fy#K@X8a XuY,4RH5a}6\j‘ DQB_^:~BТ>i+f(H3I[*u_䬊E8& ]4cPZ!Hj%"oÆԐd1+Jx l؈mQ@#xcXNPq}AvO߾puy6A#<F(8DF^AGݣ, ӈ;CD"xZ[b{N?p>2J!k4Z)gS$`~HB0qc8\(&YWTbΈw'X'>!rlM:H=@&kѴJ_-.lzS?4{[IK$15|}J]i5u.~?TΔpB;gn(92LQbA_mZqj6"G@))SoosF/.VƆn4HeƄ5 CWҐV|a+J-0XYp+Q_l S&oXrV$F4AE<,<(B.hX] |[^(KwP3@(քmR82 5CqO_m,lUHD3)rW\+!"nKۜ'!QDH&:ung.[- GCAA:�TR=9.|'Llhq[(oU:$�:@1*YM�cx$< xz&T dYua =T*L=߄(-#7&Y_o2.l.%ODz|a Y& EI%vR!褰E~4*4e%(cƬd#p4`}4K6BJqoƯO4FZl>]8V:gy9閱 t%|l,5(lVMlѱޒz>]f}[\E柅 -fu8yU!OaAHޠTH;fJbQOb#ck)):z)B,Jr.ɇBB]4H_-B&fG  !{)?`cwP`>Tq5e.rSO]k ۷;MBp@@ QEX =G/4!"  <D@Aksh yݏ>552VpCh4ʵ:sK�a;X`q ` =8^&,(`DKl[ %I6XjFRƅl ?#Tcca>Y! "x'4D/{:b&u7zkTw[l$Gr y!̈~]HDǬۉ zf[L?vCL&}ʘB=vbAB? nsNɽ-2$wK0A;BH ip-N۵GvNR\*>Ž!5{(t„Zh(; 0 (+ Ӕ.d22n Iw0=Ș=1_O�GՔ �(?^G7:[]bр u- ) zaw< +uy5eM<Z -k1* j}$vC2Ե'|xVSQ~5E7Y6)'-6Fg j%D͒5_D>REc '!Ƭ>�NaHp"+m -`}ԩXc֗UUD Aͳj\XͫOUA,e~|<4+)XL儃NCH6 &wJJ"<YC'']oc?}s(ō�cܣ{tQqJ}ihEN@sb9vrG719U)Ye& " Fm4ʕpjpä(|sA@# O&n4:hQ"#*$IjfZ$lwIG,3)kED}&zd^[>o-U|B 1Lܛf;ʘ<Gm{$[)ќ1ڃC 4@n hc!>KM3l+�y"ThPuɕ bLY-؈i4@cxV(.z/^eFY27{PJp1eL:BfJxxYfy xt猍Ć!r]<!4q^)͝7Z`?-Bu[QAmdH?ۛmEHu l�\%'Jr Sb/>9%Ұmh-#pFTAՁ@C)H"D]B feEO B`?l-^@ة W"vG %r1r gvZ"Mn!�\8Olej pphhTGTIg#DZ ;m1]['TaG,*g5D,1^t&#zt3$z>逊).ZA6FK)ۅEHےQ$(a}BlN)ka!1R2Iƶ,A rccI! G]rk/QWl+dD8y�h ΅,OWImw' (h zv/$0U4cQhja:!m N|A*e”X_1K<(* l=ġRXE7Y_QC",$3Mv:!i hCS8&CNa$'MJ\ys=cD D<|c?rddC97@EwG$=qܗs΃1xAL}r}'@qq.C +Ukic眃1u1~?a!וPdN Ӷ ՝I�͝HD ͝Z:F/1A )fW"C.mj MFkݓьQO u> !z~% Ӱ:%oD!0r'\$1Xj9j"ĂBa !,?9k U:�L H< )HxC zr7%&]@;5nA@H1lb4qA LIv>$_GSP"z\Ƣ)"a+$_uZCXwfCbH%eE*>@"lfKs'�h}w::v,A؈(-IyLI#O5`O@>uOf+ AoU $>DPb. OwA m#D=& hqc Bl-'$v1B2!6P { c|8@t @N" Pu2$"b�U4u:4agDcU8՗O~z_OMAvuUj %YNACCTz)%Y"Tjpsy1 WئkЕcoCR l jV8SL>&bi'[g}J>$5SfJ2 jz~Œc؆FZ^יIO ]8ZD4 $RՌAC ;2Bt-\7(B]8ϴ9Z"6Hmm G듈MIӌ'lQדDU4bQQhPeRPMrp$5rs =˖b2)z>}B`G-A%ߓQ萃Z&o,`+mg]e}wӤX* ;%*פoa}2%y*rymbbYQc LXɰ z>$!VK0gU,X8jfLLf,A;BS34YJKH%H;McX']jϣD"q@S Ge(\ A"0N[6'F{;1{}p# U=G(d*z7= z3?|豹j �>@���a`P)C+N .A{sD.s.`0t:v~pGK㲱5%%U b回RG]Г 0]!%BjhIʿ` ơ`+DD/&34<\dEZhDr"�0htϡᡑRc:8;//]jV *@}$Vm51[:ؾ#C#[*UNt~7+[_ݸu' ZP^`ۂ2bl64HE:lZԝ 2ݵ �}:T#%Hp qϱOk4K՚V{WϷ:w r 6vbx1665[m ZJϿi \k6NSWRtJsp3*YI#k}GG'[k˹Nե6/ib |Fg$ORld@0ב`ϴ8S+EJ`1H"ONmT;2\47͵K[Wza`؈YώbS/U'+ׇz-Un4Vӻv}浍֦Pme-(z¹=ո!�u1g&X= mʡGf!>T*W~/NX\|y\sn=Nh xPF^GLeݵjݭj)A?un'W:mnzBjQJb67GպS՚#:~t;ʹ֍ ܀ Dy"ʭ:B+BB0$6ЃT!Ai^I-DNCc3 ՅCpy51~7uvӿq}|g )h6r ClQ Piϡ}ư[3^K7/o_qihtR"PPET C19[�`Iã]{/ D!Bmbz86UYуx" ޚ 4:Q޵>9[֜J)WR nto\jAOX*�^)6.ڵQo9hnx͵~'<J816& jSFWm6=VLiDrJƧ+[9{<Dޭk[}A }&B@I%�b1\ _*; Rvk$a\Bx~%;$B ˊb}dRFP nܸ^_ CABԔ-/Ɩ+eIY LEO~�ATGC#塑Rc[ޕsMυU}'@2@ӅјYbLﮏM+\ue FgVsKs$d 7�9+05D4HbÉo!$;åh\qJ\fB@ A//>K@6�{ H G@]8X_R!LI[Je61S/+NJe ^][@d[p$N%NIxt1\ 797v~so!!,EUF x>TvKTbn!bs l}+x;]8B I hq&,UY&Blă $3<Vn K%-1eA |>^׏وL\KOspt22^-W�`= 6AҔhèiPz^I5ȶu1^=>U|wW!C!�\�)'kWGݖ(#G6 [nwِC16@� 2ˋ ]9 p�A=nrjɩݳo@�#N|d,B,\W0c`L�A)0L3Ru }q\q1Y6Kᅬ"dɇr G_o_j-= Rt/�@' /閉F>{O:V<L?e �*Uzgx3~|hN_kg^$ZP_"H"VjO͞xx|jVmkӯn4B+2.)vdޱ1g?5 s�֜/ ?\ H|_YNڔx}Ⱦ}_ކ>ݷHx6? HMrys>7Xvr;v̫8&*r2!TUA+ǿ~6\Ꝉx4ȬПk' "s&>8{O#c)$y~|~yÊ mP0"1ZJIF^?;}׆ݿͽ7ྗհOo@׬-_Kŏ.�,:ZPۯn;83x~`zwIX@X<T٩CݼyKh4Fܟ]{taF?m3ԏ[^_h8p̜\^"ı>H:-O+$0O6_.̽VqIJLLTbr@Ѷ+Z?|qEٵ.eRD\: <c#3" +o9TSv@t<G߼tR׎->a٣\[SzRaMI|?P?rbT7+ZAOe^>Ssv7_JxNJ% ۯZq H 9T@)up,1ݾ^+y!=]+}:BbB!SϏ-s4�՚s{B\1zuuzMj?p|z}VxCdZ滯oM~z>m:o`-qM-Θޛ/*Aơ&rDCڕM -щʡ3 asmp敳MN>EֽzW:!�d`.Ŵnm\]B~7vu mzfzv@]id !n~Rc{~6 g\ze\m N<292z8ĵKKg6?>%X>r=/#� 9*dhn1<Zξa l:d N۷ =lsqW;v ']C;/}JrUP|fHT;:2;oj{R`o|b.o_o_<Id}'3盗ϩۼ1G,bf1rn'𞚫=l+_vʔ;xvsKbpn1=Wnm{rS|N/M?Xvt_A !;J|r|Xc1)F �i.~/8j:pKlz><VxAscrxzExmv$7W##N!/tZ^֔,KHƔ^,`j 2JX-;ղ[7;oݵkWkc#3{/*8aF%�Q:!% 0.3*E|/'FG>[vz};s[B[o{`{+!'#0�Qd}8X`zaAY`|s.b .`dDujm?aX�`5VE`A�pAp` r|7<g5bz28~3sÍ!p �~?XT ,O^^yh !ǩ0E p"W`abR! p.8qˮPuc, !<\ ?sD{x=0LA/}Y] &Ĝ-PG�`Q+-I3|o5y&8×?#槒ɧ4 6CǓ~9VBڽ_Gν  rD}uNw5p6x<ԋ_?ꨮoj0%\a| 5Tsպvða4 5zw.�{{+3Od_:M{#~9v=;^{q~J)ĘaX+HkluJm#еTbZ�}rC0xꣳ~$Fo}?q͖:9NiM:+N8"*Y3~-9i7v%j3Ӡu+v=Åo�05[} 7_ҍ]�ɞ_*r%A Y e#'$-?^9X=��DȈs3V$)c勰>"є/5P>Ә�ԟĮUzs'F4'-d6`J~p}c[RG'*M\u IeD{#׼ćN<tÎ[b z7n_9V*ĖtjywgRn^1h+C*z""5Ė?PVӻjӻjx+g^s@!Wre%ryAf<^;ڀJ\(%ljq@Դ]/W?Dy_�$|&lNT?�scGNt4<Z>āc_[;4~YgfDXZh(Çs(K2{=4o_:pP8i_� rz&f~|Vϼ.b:(לڵXhuy+7{@+o"Kev족 =q�02^>o|emO5UcNAh!TE T'6EC�sxcwT9.: -5l#Å4w(@x' @}Tv=2!sh${wi�ʞW1E_<9[9|x5ln1~\һ,SdPbF'-�{ܺڡс�j( �n\n!”�F BTf _>yR+}iFP\UuSm(ǵHF$EC2 AFLBb 'gj՛WW7_� :ky]q(�`|hpIlƕ+m%HR'Awa"pƖP>Tݸ~K5T ;�27O]AkذIř]BJegb61][_޺}Yb?l}n~(ãRƕmʡZYrj {8GVS`+ @{+2@(p\QzQ(׾u~f}Y=NoX�ւgdHIۊzӶs,TwNIێ&ˌaXb mAJdQ)a}-r@. D&(AX:DΙ@<.nFܮS/ TCe�.a7J!B Te<LGtXz09ΙG-q�.Ka("‘mJI(3id(ZXݚږh֟ }U4"T@oMPI=lErBhSkvt-QgZ:� ?7VrW{yS601Wӻ U&\a}b׃OMvڹN֥\ R+ IOBxtނf0KV.*?LS2_,OHbZ-[xiJ�>Nl_?rGvesՓ NPx rR62q{ ڐѿp09:1W@WɝSЁCS'ƞݹfs8/xWs3.wNTA 3;J@e-3}r#[.d |ɱ/Εk绉q*G|q9.S/}/rBCH^Zj9ύdLcyͫֆMKhPѮ޵[~]%r܅ JI-J}[2Tk=?{?7tr yHP"gr _uMC8(xF׎İhSȩ~ )gZ?|r,GnI +#=z7!GHe"`XOWخy,RuN=1wx]6pGfǧ i2/n^&I!*?\pr @SUPq4:Qy7:-#&?|g?Zh}cV%<H@<L|_JsS^m -dMbOL'v71 7f|j=|Q벇}Wn<f�Qv_cj'gvo!uI~pߑم_\n7+6ˤ.MVWoLb bz0@\ [{N<4 .;pllfwV,"/UEM4.Dq-C!šəڙW[8nŘE�!F'fb}scJef gBNVmFl;AN5.*)LgG6PNa{~Gbk-/�NTouo]mTnv 2XY{DQz6ex>U5ւB})Qi~�᎔SW/]Xڸ*eq\ cьf`EJd w!Fb+:~,P. >,<`@a+k=s!@pd(Xx`[G+sc{ -.>46<X&Dvȴzt\d.dq41!!đ�~1qCGpA=;0'=hFYFk,RUNGUBl<'XDrrEǺ�9EJ׸i5o#Dj"JЂ=z݂O~ S0N .>Wl#dJ:4D*56p GwC#Z)2j� ub uѫhaqK}ʬq yW<=YQ{O<>oH'#-=VQޕQJTE4md|@!^qxN:hG )6s s5Q'0I?f0.VsN�$B@CHs !_g 9OfubfʩfIceĜ~X8Žմc@> -O6j ?ҝAS�*%;ɿR̞|aßg.ԷGt j`N o诤g}գغ:KuH"do|?^}+=�$4JɾQ5 )o&OLW>7IWH#?p1ԡhd}tuVѪ1|Cj푍!)lhJ2)�T Y 5'[+isppT"(FH9/n\jud?j \}-zמvW fgǦʒov å}v`�.uMR@xv'B[l|lå'?oHғم A%BQC63j~g!<1,S*$ٚv诌n /qza6Bb&O>f{S<16�IF G T.[%]}"17+/ I{ uCOl#+Vw~vflԀ뗛7spD|wRC~vŏ>E{՚wO7'٠:WWk,n՛C.ЁcNn#+\qN<<5> 'X<b^R}`b_I՚{ɡfrFP2D-AP,bR=zWmG% U,WX� Gִm+,aO "xc#:D! GBnhy cufm?Ctxt>H/J2sLoW IqF,| 鉅ð井r8 sm|=grkKk77-Y2\":1_0&!8( �P+@0)ݣ{>08�8(\9Qe@@&q�  y ߅';.s v{6WX}}G>C‰ƇTW#S\-J�a9Be<t;@BA g̪09"^Z@MFgK(t'��Z8~P^h&Zqq4JP긖 rR� >/5^'fS_o<%UeqCßʕ;ՌC*W7W2 XtUMÆAGS.DuNVvHqQ4g~1Ӗ67./ Qe}(xhyyC!l 6waQ$ $BwB?Ϝ!|gvB/W{4'߁{3eF3Gr{nqyĆ*>3Sw>؇255Yʢ$͜rKjB AY}DiCQ˛9}w8џw^0W{D2O?= ѡc?+M?c:!DxPIO|~ϋ_xADݧTxgrnߺvoz-_Ε�1x DRS {?];j�c|˷Obj( gj[JmGu4!PBvOH$mS"^ag�Ogӯ?Q;[`/$Bȑ3p_]wSO((Wj =f%}GN5֜k=@I5atP<<g^[^ina'F`ߑ?&xw^Y>Dĝ oT'iޡje黯|uUyfIsZ[@,02^y;Yϐ#'?kQ_!A-A!I%mʕG磖1`#3jmt2'npaĊ8$(0*\*{顑;U]{ਖ਼͵~4r\9ۜ7ָut2:^XH93$�pt<2*#x ^hInW O9+Uԓv6&ah) o.G`n =8D<rj2't'.2-9'n1r=5qվ.pT :~I` />޵K6SgXwSj@D>nHI'R nã᝴'&.]ut4=;9XoAYZּ`*obtЌAZKt6kILቫ(78c.]\rˀ�TEǝ<P>ܾ[AިXGO@d a3Ϩld_w8,[z=z_�<<\`p ,X 2u6} OՇFƫscsթX1\jg |rKJ얜#�'#ɬ]`JAcnq\)13C Sdhtg;NJvNr@hN$mH/@xtp$O$=% _Hw_tXJF%kAM ǥ2ˌ&|Qw+$ia3?=<[Q*X"VJT7$c^Occ4�5)(|1]zZ{G4ke?y]/IGvRuFgWAfW3Ԉ~O8]|QG-mXO!3JQ'>=;BH pEH"OH7ŃYňZw7כoB%̼Jչ\?5H#lK'N?w6\3?pꏷiӟFCb OOF ɚ$Bn:@} 7.蛶lPȁ'IVcnO=4W5 ĞxaV O:8t9Mj=(�&fRuVF?҃'F uZ8=$Vnnt[>RW~| 4' C29Sy}|Cs:#kYr0]8)z]O<4"V!DKP4v$L(lQfr!.beHl8}H7JɊ$%} V�gI,Vڶ`ctW>TwlTbz>2Qxb!1cQpjF2-~r+  w m!,{lj,'hDI0o,+#&W7�wrJhUΝGCb:!)6ԧxCibߐJe1>U+FsZ؜`ΐl7r9xlZsLK0ͱ j}aDT è!Q|(^z&0DQE~wt}Fc?ÓaxF\ `X@$8 j0=c=zALQo @9`�xx0pq*w;nw7ʕ4=8t⁙??̞}S.#j!+TrrR*bC^�\Nn4 vB ~ `:.)qFJӊOjK ̔(ӿ% iIfTv&I{D5*-Iq0{Ϣ!=L4?Wmy;eQrK/%[\YAzn !ŀ+x\d7.t_pcwr瑱s+|@wj$$ZXCM{+4%O~t;v<9 2X)c;`;}}GH2f}wa(Qy#jO|h3Rg<!X'!ZvD8Rة葖^ч>3q_x SmZyHea V1?[G{dHTE6dP! >wǿqy}y`.J;*,g�:e3EhaCN%%g#4;_,8*|odnBt%YC2:O�ۊ}|c~o]S:ǫ va81\*k(86Sͣo&=W#V'^KTǞ%\VJ2AXć�_y}=;B!CCJA"@p遧o"0d5F| QꚖATqxԔYsj%`ZN gо##FIJBXxLBFv>|6d}.k :z]XDԇWk;A,.H�G[l$��w { ?&cxsB&-A�).'E+�UΞCw*IZoH+.r/t赿VKP~8 @�`]{T{91 TӦCA*/(P8@,k7Fv!‚ !p0X7@2 =>4o$pKk7ח@!@ 0  z]bXýL#�R?�y�!P�p|1vڛ`V~} ?惻|db8!+߁H -*J"*QpNF-tG!cqA <�pu]Ƙ5K[i';PFj@!d+[(W{#onvo_޼ၘ]vMT?8E⣟=/?51q|rW9ӕL>sKW~ AR'?ixz};8zԴ QOzt|PTroon_\ub/?wFD'nobm|tmcXyzWmjng*JS|{ :7K7w>UU:Qեʭ^MK=>P5\.WoDyb2>U-FufO]/79xBIoזkK}ʼntetR?5rqui [Fuk߼ u1~ENh\l ֗kKOU&+c"LnνYH;*NހWzkK}�,WƧ+gX:97� |sL+>rx2OkkûzZ#Hn sKj7UjNc44ReGfv?z-\חz39[غX-7de|/:Z#Gk~G&#cKBzjՇܑXrײ'CV-6Rn?z(.Ԯ⁑"Wr.ڛ1(hyx|秒Sw[:s)->zp`֤n]k{hPhmZ^{+לHKxix\'BNo7vs.ׇK[=.Qvn+WHih}GϿ /rmu;~\aSӻ냜?&{Pto~z~TnV,W=F/A{E)I-,}O9w}` cq2ȑV{ViTG݇0>w.}f4Xp+8�8p. @# (rG=¨dz@!D0 !8 {^{cC-ѱG\_A!sê  sc*vKRRvN|s0�f4P1 2�? caTr2`@S UTRD~n8ΌӏnM\lb\XNlZ^#3aҊUN1b͍ʫ^M?PVG8fr@)<vOn|Oo k>~ӳf:hzzssK)GŲwűԻpfTj=G]zӵ׻fAl#_ _=߾v\ؽУTΙ7o\X'>r!廗ir_{U֦_Zj6C8%\Hv{4[~8rUg- !:*(_ߗxϗ^R M.?MdܧRu>3V67`u `V�8i-VGMf="T_ٟߗY]}_;}]{k<=yԘ D)9LX3?53wz~[/:@ʇ>3?]8t7H4ȓ(`!+QḵZ}23)zr'swi|l}x*u7n_=X=yn:-ҡc7t~y#usUr?mxշ^ZX#fMbɱ#iy!w!%t`.fu6_˭og*T2UD4U�ޝټz+To'GN>21zs7}C$O-@~n{)>IxKuR~9܀\1JY//߸Աr=->õHRnһFyS4pޓs=]LU*xxlᑌ#Ͼmʶ i^plsm|7tщJ3o> .NX5~jW>+{MԒخhVc)7}$ьtIZ?f bh|⑉[8v‰x^ ܭ3$u#崇H[[ݷ_Ymnx@!Ξid&�)+1 R N ~KB\=/=9Oo\E:pJvkKc#7w^]\󂀛3c�Z۪7&n.4vcvq7qu\q3!DhXO*W"}oE])+lzw}Q,޹!#TF�):1כk'Z;:V*bM4mVV'w34+NV+,ӦHbw|ri{.4I8j{PFv�ص8֏b[#>uZ8�naAlN7n]ko/#ݍl1\[߼s-@B-:mRu5wl:<Z7MIm 'G,2YR˫~TQ0G�W s�x^/`Tqs_ܾ D#Q8 #�s �s}�=p=z p(U �� 8(|:Pkb8C3ãj˲}7��X #!suY]P*ㄱU+ Bp�f3&d0AȠQ%d ˡl)G:\QE.Cf17\D6A }Q̨I;[=rWzR=o8 Xl0rjOlzqak}?w>LjcrQ#hFij?5]pWzmu6/ڵwiD'?6q]ZHĆ|;S_oU�\<\Xڤ~@oKul)1Dp!z+A#ws.ټf/-ӳ~{Uv0_wmQ�~/ct[MM v6T?O 1IMA#H7="Gsvߺ_i8 @ܾp__˨8>K_[F·9,?Ɨu;be 㿾~wӎb}/~i?yn!#έ|{_Dh_�q{շ^Z_SNa E; 9n~!.~_s/t pFΞS 15nmcP7@|^֊koz⭛W:̼̀SON yTXDzBvpq^|S"�~n7}WxSi !}?_\ 07Rx[,d'wWA GEBTn!�b}xAfA,b 3-781* o\)Qn5׿zg?1ׄ93_ERI췯-5qn͵Τ!:5E{E()k 7"3Y5R~ n^z>Ʊ3;M͵Aڕãe3z #R:g6_R4^6?4{=2|M7L@�MOBacm6nsP>UQF.6ozZo7T �} b{?Y1au" !2i^ҭk]H[N{p|Kݿ5g*hg%dHso}c]sr}=tj`ŠGAZƉeѠrn22?pzxbk?\=$�敳@K<2@eX] eC  Z�ܾyU?*2~7.W',GZzy fd-F'-|.Άq;72:nÛ4q�CK lpxD}~bkcɢ'ƬR% uѱ1"͟#Dbqr;޻o2̦{x+zC'FƋd.V(ĥwחovV[^׿xz9{x4{w-m%HNI_ HWPKvyZ >œ굽﬏WO7KCåVϛHZ^(l(&x嵋!*nkmFg$/ܼҒ)uN$Z6S}Y2nrr+Cѐŕśՠ Z>\[^|3("=y.Y3u|@#Nj #@1 | ?pYr><4{dq+:r%%D.�9[Ba PD wݣ{~ q*#�kCDxw��|nvbqS{F&J`9R.y.�/�4"4BƘS 0p\tD">\D<5El?B�"C 8sXp )"[*-[@-5v:QW$P"2:#9/k1%zEb*AKOT":4VuAIW-6J1?gos+h)Dc �췮OX92wE>tq׮ /=~zZ,9LpB$$B"eK?NdnSƂ(gj9Zޘ(|a7DS4?ի7.uU> H[‰iӶ #^W._q[{! +?i@l֑wFm B<_3X=pVX_gg7=xA$|n^?;{j'O~x\e[,A&=;sbGx+EzꍔH`jkj dܠ_oߠ_==tLŻ7ĀBrTrեzsSŎNo<wr?n/7/etSiPv҄�I"3 P#eSs}+\In u#V K@;x:c_|?_y+k'D"?ӏ7SOMຩE#e%�M�tz7ㆧ*WXB@Cե~ri^C19'"hq:C֦'qŎU2Xߠ|z  O*uH^I/vvD~N+`hHn�*oC:Œu4MaFIu"{n6k[i-6̆]{DH8�0spxt X86K\~.7_Q|6+b恪1\ "a9\9::b!T"! Nno y/~9[G﵃f IKP Fvdm?vT%zο?io'Rmfd׈Wjlw&_o$"A2@<۽o}Zɤ8ԪY /DJǬϞ k7//^ΦLDH>>Ej{mU)B>ɂ3?\{A bnEX촽uC G2Ct&>)6q]{R*“.n)'WVνؕA;EH{۷ndit] ,(d'vI`G\rQ\9+/2`0orB,qoN{KzWjPʘ ovze9t-H3VHjEޜ4_AB}‘JUzjlyzw](?�hUnO3"zIМd Fm\TJ^~yRS*ⶶܿpz !oPl:xz9QZ㝦wj;Aa*ɶ诅Ђ%@I`HG|0r/= @ 8g!-ku7[Mc0wdӇ?gbUApJ(J;t(G$~NgiDwsQC~c/\_,@Ƒ @ : MΛ`j>6|vO,/59 X/I2 �vO$Eǹ4Ș.bjsq�jClYR"D&}z㜣F)CB/tQu(Q&bxUr"!uGKNr&@BdzB&=jrQ-,6.6eŕdIYDy7usݎ hÖcEho%&#ceT"+y~"WA/#_;_vZ=h EY9ʵE $KJ24m35c|a)(΍m~:'>\]'F"e=<22^�g݋IЅfu:c(YuFګ[G@|r >/^B>FtKoc{_N.=i-e$ +'T$2<WCHNY^9BEÓB jjңFM@k0LXY4!9FpN>U_.$B {?y$@/xt_K>R+HLZo]uY&5z7.f�OM N:1qWtKytyy}͗?>Ym$ ch?m_k=Ҳ]+s5ԓT Í>]߸ILh.8(k᱇FOn֟\kꐕ/~c�ҫ%JA .#uaFM*R GKRTY0 dJTjƪy2r1Q-c+wfʚk^76];/ 8|hP]_K75צF�@ܾ}YL\ꭗV{@ppDsif @M~ %/3>^oIPKPqXů eZX[P4JyL(L){+7{j6lEmM= /! 7JDHZo|0$KŒ2'd ǔ$�fs:/ټzhLV)8?о l]S[^F[b |(TץN˳-loMAA NnzK* \9a\܀,a,X\7^h2]/WϷ5`"@j듇p>f}ݖlgܞ!CIN &IKObf>4޵chXԻntVҟDZc(݌Fg8XިW %9]8(nR+H0q.0&${[�o\nfslZ]&͗#KN7VD{� HvH9QߗzUl)6Z l@M:5=၃9Sv c%S+5TZ &;N;XyS>gZݍ}s` P#9N[͕I" }zPQ/(9S*8</qc�s+J#] 8t�]!^{ᮋ1D{j <h5WWV75>=w<ZE`04 `ʵ)]Ct,V[Rc^ZvƅwX~BNb1t�vjna':qq _D2$Q.3N u"E?yg߇ʷSP2t:x<+a{_B]({x/&-Hހ77pxprWP?nqWڠōůf9{t"9|8+wW ⥕̝ОC]72JBtՍ<z[ۣn;x;LLWG&<_Gx6V|kN?R4,W'I9Ui7׾q !Ƈ?}/m ~@f׳o߾e!dgZVF_b-ejV.]eizF=iǧ+3/iT xl&0hf>;¹62=솂/]q2k9cr}Ak\O-h);)kk$"2z8g$}tckj׶9eK7tV}hz.k[{-ܛ;⯼Y8MB,+&59 [yL !w ?BZ9Im9]NLR߾4:^R[-"L&g޼z="4F{?it'ƕ-THk �Ƨow˓~!<# `(J \1\s=AP'9xÍJyU  cC%x"GA{t_T*1溮뺜s BJ%@}0s΅anH pƄ s 8cpRپyFr{ɣ=Id 9B¾eJ$�ɍQ �zX }q$6;0̐,1L/t{ݸ$ s!s]7L;I*#-!%Zs' ʙTjƝ6Uk$h#h*31!E dukNfTARsͭ{Y=ڭ~Ɲ&f*YEˋ +�o%t&9TM\9 uJߎɼ*/AͮUg檾=$>weB~s 'G#G/_ʎ 16d:뱕 VZfNoF:@V)ϥwo`)!ѷ"?[Xґ\5Ur�L(~t͝YEƞH,:Ϭ1֟Զv>8}[$YuwW� !p5Z@/Jd3m HCJ7WБΜbO"$vJQ֧_i6*MQRd3|Ń s0+/\\ċ_=*Rdd# w+w߰xWiQ$pCl4!dxߣߛW;_ͫBvYK1q%j:Uq&=A^7}UsR"�tw.⇜ ꫕}DbuM?ÄH2u!őTIF:՗OA ;$nV Dϼ ~Tx5i�DZ�@q$}-�(WhAwB|w ΦT&fkĺP51Je(R"J2Rq{qRGc3Ovr}ku؀ї�0;+R>tf3i J2$̨_^&Rt!-RpCQm/&dk ܸqF %HȃVHl$!ApTX4c3>N>3ki`eU9$J06rupX<(Jt~v5LG^J͙IUhfw- nkskqJn:%6~;ZAKG\_FK6ڢ$A3(1ydM`g]�sƆ,]٩op)Ƀ >k1=Hxe#[ -} 2˛^#Ƹ~YU.HI_M"8ܣ~ }ց/ 7iΪnR+0P 9y]@pB�KY'#XR} #" UG l] � lf8i/j�. �C�� ~~w~gu1X?>~B}4v}`,1@B4=G?J a(W<Jo ~c$@x@!Pp\�w;ngZ=}>t}SRE�TZ {owaG4ch,&D >xnA y|L8u<|(+��SADRKb_n#)zQFNFg$5&Hg=Ɣ8 -m,ut'Ɍk۞02u_p\9ӑ*5{:Vݺ9tPͮ<"ک3j*w! C-0iKl80%Y_]3A.WԽҍbzi͜|dz_] \qWG/1MHeXlxM_Pz^?OWeX@oJ7l_koHS#{=֗hDW0FrlUv_<]f} $ABH6}i$(<Ŭ, "[6ԫ !&r3d\9i@�u'("&IN˛7|vcTSů@/~G~f!λ5( ݱr޸vm$B}cCE{rņ'�"w_i]MSv]x!LO|~oZٳHw v|-!IP 0-nϡ,Mo/!B{U57﫿UмN@Ysk'<ԏi4CH>@_Ӆ&" �deӊ8}т�ƈ\joI=ޟ[Ս3|әF1}G4 �U"!Vkw\=Ҁ-`B{M`TUSݬb Keʨ-յ*z٬]{**B:#@@{sGtr*ZϺ%85jxfA(teu ~eN څ>eOkZ.㦏%%-A Ei!'g֖{__k,AS}UeLL04RH\_4Z!/.n- )'mml9&b{�p͌,=Fn_$x &)g[ڭ OH9TK ?1>]ͪ �o |iyz~ hW3h+.BI͒X_K=G<<VXKᨫOFF"ͨ5;&6B~0facS Q|@{MqF MK^Z̓d ȴÌ궽ۖ| )N$N �n'XݙkqSA_uL 2hcOc4%&Nib+IJ8b%H?�L� @>�3>.`/DgخDe}xtlQ.}1pFse*pk@D6~vBp1(r{H" �LƘ"s�8K+ÿ+}t�~m {N̉&J, (R ^7a�5{N"�)FޯM¤�b=΃ r\ [+C-%bz{J_]j%(b A3^'xa`V,IlOmʗ jUU S#-9l}ni}F&`].Xua_z2?P?fˎFH^ @*s-_e+57dSAc�xb*Zwrop_J)BTI^MrP-+S~ҥeWC"9[:k䚓p ҬGd6e2="˙7S)2:Bt éH'4  ZݝIur]X¸IA2*O')8<>%t-@μAC<!ߝ3Ksr-H9֦5yAH 4nxi.5@ܽ7|vom,q("\Lw| &춭^9\D9^ <S@ܽ/j[ڐ!~".y&5fvKe6u &{2 @WrN/vV81Z_qr.}cS֏T#CiI񌚕w^]Nas-1\*7 %٦\V{vI]RsjCNĥVQJ%9lCt,y/3�<<jscv(Ru0t`ON[ՏO+Ph|Y$�LQdMqycy꠹>H-׶׾\جL_M] K0w7;TZ9FkۺEOzvvQW ^|+EuN+~ZHibz[KofVz306&vm ;ZF뒣$3IwY*,\1m<+YLOR bmL0i40U�[=0œi̞3nC%*,A Br$*'72뤓= #�0�Un )gp4\d"ږKyf}Js�@3afGDy @�(1,9+fg^mBTeW/wWnoRs�#` =1%!D��_X\}vqNgpW yF Sv՚Üz{c}xă{A0��<�7h#:�diB(? ,! �~n�JuKBBaGcɚ E}fjH&[&H%M*14r{URٝZM�(HblqJ+􇘳Xm9eݱ^@r{Qk6 A> N GumƒAZNZ !i˔rT빽 'Bs{It%o߆42^.rⱏLomF~axx���IDAT6zI0UyHYZ֠"m~ܴ\x�X:Oz&P5=K(2@OU-IIV@7hSR쬽#Bz�-xrkI#UtLGނ�CcY $A'ثٟ+_<?2!.&,&KTm'n^u|4n*f5nBSS Z@r,<Dj /Գ&BƦʒ RTkNfeO? �{J2\j;O6l.m~?_ExZ^ k0gx4UimzuHjCd}Zqƭ6 B ;M2<U)J2]bH٨=FFkǣƥ+WD77*lFXj3;:Y]I&z.n)Un,B?$bT|Mnp o"HWAB@f0(6(�%Ìjg;ijHS%X!-g \>D{CũGVg}rd !.;!CAT_A* lM\#DnOo<ptzWv=xȡWQTe$aZÌ GCIV[i2_//gxpؘFߘBV5*@݉%m7T�K WN$TCgI'-AOݎ9š ":�6, ^JeH$p _ ljǨM. !{c| VذLRxlL؉duq�Jќ`4Y5K'2M !䜈pĈ# buĖQyc4`'",a�.gGGpB ��0e׭8 o{}%`p<x쑽SuQiwNn >x<T=zPuJr\*E!`0t:~@^&k] AV(DarZr+� zmM±О" p�q_쓢"�a4ȶHħ :)axfcw!N D"hqD|?aنhq(ǔ('ҽn|{}Mo?qA#c?O>-eg-,,(5XAHjS e+_#cMk;CF "Tk]pS;kKYMMC#YBvP m.xd 5PEW @F֎#tn0gR# ciki޸ɬJ6xTl, }E?�ymUf-`IEhG+=&jzwX _[- Ss?433ٙdw2U;ݗ}iLp&||xQbS3o~NF.߯f$8 Pv�ܽ;ǖ!9{|ΩT �wT3;X;!?�]\X393!\! `#TTDȃ?t|sO|؃O.k>@` Gb=zQ{s':5R4<4ÂW)ru]QnCV)\`%Ρ;ng}oLV9qj4+U@ b ̕WÉ;wp;N@�D@~?< N"f GV%Z@U$HRJX"`Id~\|=D(P=VM pFL0iԲ$ӯU[ɤ?OFV}Pdž"$NAe[H*lJ$)DaɰC d+G[+ب,Kk �z.H-db"mA"Vȥ*U1Q#*h GP+�YXV�.5JÁCT"��եև- D,D�q4)"i/YDɀٱxsw@�uifFN+A'KyY:B$z#{})�hQaI%9{Ny 3M%p$ !irKF!dWdJ@ .3+<_urߒ;h r'C|VoD'hýΎr5HFh.FizW_IBP ]^)' P8%, l,MuH( Za[163WZW߮BdA �zE,(/4Uj %96U#ӚOU| NףC]\;ߦ` 2N?P!ѦV6K&&n .oRG lR*bS @3J�monIv7v<'APbs84LK!7چ+K葮FgF.BkcBn$"udM*! MKc}D@j4\*ESlf<,qڟ/Ec:xb : IDWT2{ݎZK[R("F�jOГ"8lօ`}nz`~8R-A*#-ΌK,Ao&R#D?=%h ?95ʗMPHww$ k 5iƐ9@)֗AZN,' Hc%`Ϊ$-xt&@X� TuU?rK,6pt'Xb C!SkʘT4a/:!}t@;)ˎ^ 7# ]Ql,@DX˙# (�܀\T�+;<@a[vˮ~'4>4sG~ z( Aiv{MB0{`0}?lbqhT}y'u�0U*eΠu:^#X> Ϝzdit+O\V2*Xɿ ơ_ʎm/2V ""2ccs1n Cx #GĿz2_ajJ}[iZ)< Zu8]$RTqm i�g 2b9.Nˏ pZWݨV"6Yzo !YwF2JѰ*�DOnlؾ& ,S{oƧ};K[ls ZB<xJ4?}5؅ Dc8+kaF!noKQ��Y'fc7wI_а6$s>?~[H'[<+IAPQ!WgfIaC9YⳓSP Kb%Ί Ŝ"Nk+UÄ!ޘ̞պDӫfLڰbyA"DFK$�]]Uaâ{c 916po#&N"^@*1.[Y_Ѡ@6W+MiAj+bDIo앲C^ǯDJC@S2@r pK\_nuמXi߱#kk*\HD? `'b.L!o�zK+B_[!Z2PTcr-g>/2$,A]R ej<[DD `5fT>Bc#l1?a+lhڍ!,7[[(FFynRaZg~GrQTҤ`d^�`%RW+HeI`f7yj^PSsvnWzQFFѷfT�w>QbG%HuHeWEƬEY3N9j2 N0Oxgh9)D-?WD�ˬN.#"|!8;>'R0 tOP!b /a J!掇~|'fS/qUd,?!S,A S%9sʕt3Zpu5Y/e83&�=|#异Xwzs!p,9%.0y(\ȣs=u}upOD1DcL rΓBpy^u{y1{wgN=Tt:Vkmwn#� p Qwz.c^]{]|>b11'H߰W d�\l"d1zv'IGbDD92t80:Ns89a}p|TT)sgJz>K iܓX(ʻ�I{W#Hr�-4kԡ2Joؒޙ:e3,rLvL# u;'mT�X%rKDϋ' I~&jH%\X&VelA<֡mQINƧu �t z&9B?+KgŷRu>?s `mqw?)z*Ol귎3jK)#>U)B0*O=1Hd6-t\G -ਏ)"'h1�QޔT y'P@[$Y@K !"ɜ''@"q|DE6~pڝDwd:&4HIAk4 ]N'ȸEx}@bNB&l>UJh#2ǯ~1O]D }%*@.? Ƙ&@ "Z:B_QF7:鵿r ^,ZX!0^ȘuJ\>wUyD>Hn�2 G]]aFMULJ˴M\3qg69GӯcGO]N f4++]uhyybq $r?V(ڳIB|H M+܄ &1ԉ<CEf0"=_S�雦BFH-!y^ᨉ^�gfg AiJf բ�=qwֶGOqqc T@W'JvX|7~e%ʍ(FS'^nT�I<$[j>~Қ*즰s{.�!"BH[:!z~F0",3vM%%p!l34:)M8f[񔕞/t=8T'21B%Fp0̨4'$Y_ |zZN- ҝh !�֫HR=?oAPlߋwM8ܤZ0G$%"3;P\A_%6h3`I@+ofG̓$'IN &<n4`[N4 " bs]�r@3dgqR%�88?}>Zͥn 0b<:`g=|`9`B8Yrh0R0K:=˄P*zcQokyV:sɟӻN<8=<)VV{kv/p"< FZiy+mDm9h,@71P0 @Sxe`![@Ey`qxovT޳::򼀁 \'O'@�}d o(!\!�#~md;j벸 ޼0)qݲۭv n1W1�N AQ �`\~o[M)�(1m3sRe݉$]ce P5R֠LTYD^$݃I͟"RTldf12bXz/͍cq2~Cn =2@*U;0&x4<9RڬE(*1:BTዴW��"R |-ݜVyf}E Y%V>bzO}hOס=ͷ[�csw)+2]t Rndn—Nf㾩]Fj;!Lar _0N1´B2x~u({ȾgZ(Rif1ɹr܃Q$ U; &BaY[ݿO+)߼SC$V�!��cId|j7+"4a`}@CjyQ'4:Y,ek쩉U#YmDH-x9C h1BFSQ_FLDO[k!,TzẒL;-hQ!d>? ߆^~OoV2ZJy ;A;kxL7ԡᨆ)XVK1:zA>TЅ]J2*BB8J >D01*@l 2&�n_Ӟ܃2Dٹ7Y&U6vہD!�8FVCӝ'c]]C! 8JQ"i* RoMB9C4B(a}hy}y)ɦ%FR;Y]_f^?pRz]4K!MXh䥥QCHY�C̭lhPE3d-QcB\=ߺyႝ]GϮsOI t|.E8.iҦ,d1`MϿ}Hi)s kZs 4aDiI&a LXE%XR2n ].H:q?.jpqpX�"0TQ\!Tĕ fI !|�@APtLG#w; _&ܤ&30i. Ae)Ȁt7i G7@J\^=n1 P閠f&Bx@B�pq 8�(tXxm�T)6jV)r;] F3pC@ r(bfxTp1. Ơ�Y(kS6>1suZH( �^�fGNS{+^u}NwѩV1�P8"(" @H[taBp.x.XN\  !F QÔJΘe,"?8Nȿd^y>c%\#0�a,2\90D/t+n38{N>8=3[spB)fc@sg%1 �<Cx>x'AP)S 踮 ,a2R&Ps28N44T.\dNx9rr;YqpW^7<X^�\F)I_Dp.1 U8!i#v9D ޓo$lXTߑTR־U$=Aާ\X�fK_.k7OΆ73eȜU8^ƂZj_Hs0L!)I}r P;/o~yЩ?6>s?lz<ːS+Ȟrs#+35WN+1s4oȯ̮joE f$P^knnmHE<i vv�xz^US>ދ;�ܼԵ=E�0:5.=$*[K\"4:^νt' �{7:QM:3E 8f Dv&d6Qp �w[ZjmVpu?K']}a&iV-.RMNTX [m!YuViRW.%5@]EQ[ ;~tMѽǦR@d>i_μfJ|3ol$me|MVN T?dm-uyG(Q>®)r-1D9eÉi%"ޢ� Ą2�RGTXb$Mַ)z_L(ހWS3#%,Ҁm 1z+$HH/ -VhwXpzsC]%cZOԧUc}r au([H!D)ӿӷUd!e BcLX?z|νtvLvĵF a.E^ (=|ɄZTci^>\6J%<!]LI.햷; <t!*TDL!sa %s(E WrCkspRKGLMi I恺IV!|r;BFq[bY24PRMվǓZߖ_k K ml4FET].�"pϸ˘P�aDAA .g �� z0աLe:Әy7o\jmqtkpUR 33 ވ D ;hZq⬸3T mY]Di-ʘ"`uGFkwY4;8R,/ M8ޭ޺\/h8B0(9 cڂtϘr�" �q�X( Q3t0<G"2" "8'!p3@` vsr&ajx8\8` O>|#WޙUuWuuFwhq �)E4Q3H;5[·5Η5[Fcѹ"EDxhUw!ݟ{xY .ӭ,ꟙt!ID=Bp#/>;4!0P`&q9k<YH}oG!&"6q8!J�Dh$B!B c9FVjQB�I@ {f TQtLAHt2S.%֘�*WXYH@$7_N&M:V>:&ce7=& lwKh?Gx\ [HP)ݹ6,c�s:@b:gŊ=)~t+P>!<»QYJl$f2 he"xw^9'tB槾upEr$% R=6OfY880}!wZ1JA,\X},y+OnYo[[d;1:[C˔h+nK5mQ'}vܪ9-!HkGUtʭJlgj9|B"$}lSaQ !20AJd <S 8U&xUc^#O7@=t/.}gGT+sGf*ͮEà%g2<Nհ]z_Bi Y1zw%Xz7pmʜd/Nd!!D|Z>;;O~Pv ыRd[e5g5^ ^4)�PY6=ncYcGQNbGop�DR,+Sٞt|-=AU/36 mfw.)c=US$;!ei\˺�쬑b|>keѾ 2V }!ϞBg:X,zDuΉsSg.̔v;׺mu-sBT$J aYm$7k02RivcY;LѦVfxmyh7.*JwAq,t[ _ Z'i†"#^dmF/ t5@Od 6}fJ)ggT:AIǰZ!XBl;[#g|Y|;<S/M W U$.uo*  u\Z VL9f?X(^Ē+;ӕLrr nò hl)-VbX;wʋE AI$=H4@R&@F2FV h,6}pPgj:l|;w'㹩A/J$4a6u4ӝiHª Y6UӃv[B iAֽnB؞`ܱs?ֽzi+noG I B@@[8=5M��temCIIgF@ &T[>E�Iҩ+ !60h: )D" J@hd$A4-I$W$K4%e20ڞNY|ѣG'Pp��lª_wc5&R>L&'H � ->lgTQG# !q�1B *^d*Pc5V 6e#YCxT*j9V |e$sKvq'SImiw 4�ŝZeMY*_>cك(3Oݹ:Xjgy2q} ӚkˁM6qq+?)c\5ѽG>4sLI��=2x7TPƮSOB)];_]lHB!bV*Vk)dŸQWR$ILAb =˛q_wU}@bp <-/�X5#j05y5GEeLhؘi!}qLٕ̠~/T 7 kV'vQH),'kc)(N(G PRqTRs\7|O|c_ȏgZ9:cmo03=Hv�YWufMX40vK�Gh9Eme?مFPksm\$Ko=C[?`B;MH6 *-vQq=aDX8^TY(zqM�\TXײנ~ƮCjh:~uj!/�� Qd/�9&U !~_  Hi)!�,R!˥@2G^g٢586Z<A#y흝w{бS%tn])2j5A7=9DY9TR+Gl%ҞBp΅');xUŨʖcVD=-B:Ό# =9k}8v#Syadc{c#8EujڽnwB-qV媕x0G(W{ !ڍJQ$ jC4"? xe«(ۧBaLгS˹bWQbT*Zqͼ$ClyrU;%'žMG•I=i)w+}r{ Uv0| $I"AD4h݌;ɰ>\kr՞WozA_"hӍF;� d+t( J@҇lՃvQJ~h4�^o ׮ s��a,L>Ps\d2wQ) c" "Q �)B h4fh6a6@@ JDA&E8d"nw A6V6�I"D4TcP0  f�@"h܋9{±9!Ds=BՃ|Z� I (IT `B !tf7h4Jnځh)e K"o+j*;kWslAi*2:Y؞<^av|3Dn{8m^j"374$mmw],XмB륵+O>0 WGLҙ3Z߉Q8jc{|O!ufX,jy6ewK[@ s @_�>%5f$q FtRyrxX<Ȓɱe#͒ ڵw#�5*.Bؾ(#̈Z*=^{-Ýʞzf.D"T/B<,:ؙV[~PVP $TLcUrL9@\Uo C #ó|Xo[/B.;3qRKfK_1kY*K}7.nM+ ` I%Jg>\ѷWzn~$RڅȃQ#.oݻ9,Rv9d@�"ť0 D1Y-A2Tc3k5�͵QWyjhPݺێ�DqQQ&YTd!<Vؙť}GXKo/LrATl$I^){D?d"'ciОiL6wƵ'`|5˄{g K,N~VCA-g%bavή/v=  6%V[/yt+g'YW7V ,ܻ=ؽ-;T\Rt#^0S,inz_ѩ x RxFf/|X^bpޭ>ﶝOqm|a53w#wpA'5=,Yg;~ndj2 $8i#rN6Ra$%v9gA"QP�MN7֖r�&_ äUMMiLOμtb a[=󩺑($ Qx$Z͇ht&7\۹28|hhr4$ ( $�!QV )'%`MA;h$\ڄBx< W//~1wh ��A B ĹS~`x+77aw'hq$D.qh6Vl4F#.,,φ!ZjfM(" "8x 10hHL" `0xL�Q B/F3lJ&1 x! @tI: JbFS3>0x$^COQ2C{oO��@(Dd<hNOq. V3�P��eZ[GY6nA-crV赽�m .O��c6{GHw|]14&QeO+YX�(n݋Ʋ84Di\[#;ءwh%UUE!xB-bR/6BR 8&!Fռw&%\ۧ~0e|o,l4bksu !UuJxnٔLPsN#@vQ=~|}͐` k&7Q /(!lXP9# *}W#όx & FdY+[E 0[cd8<9B lOϾM/BzBu߷uNO~Q!#?\:/V $D## z؁mo{'\K4*6>%߾ghsmTHѧjQc%2s ,:*�rg0ňrR(l<56y.Pߙo-/!Jo..K΃G҉W9h/7o @\_KB:{fE}FSn>\aVv:_a:}jm+J+FY\Madc);K!EXy/7$.n?,kohošGmoEE ffi+A� ܻ9,Rǀ\1e#U iٿr={d֮Hhˇ<dW<BtBHu=RǓ! AQ}f hc ("|䩅>qOI2v-F,~^].⃏ݺҋ"!{� \| k !#uL;Ɠd,yn!Dioo˄`NL7U+ηA2ߍƣ(trŝQh)GHΆvTqeoFU*GO�H$ݼsuF*m/n|koKK8;}Zo4J x`"ùU;=fV\x5qD^TvP{f>(@433_]( *J:}~歗.ȋ>"@ϔ<y{cI겘U/mlBPΡ=:?+>6qNwsђEAY<A=TdI˅I=3Awk47fڍNZeɇ88r|q,Uf]m>UK-h!t쌟Fc׶D_nM4v!A}dBI(D (Ad14:ͅSFsIi]뛛]p��$S |J'dAc;,Ӽo:4pCbrΣwjM@:Sؙ fg z~w4G~<h G7BAfj7;3hf3 �!Az^/�  )!!! CA$~w3uǫÕ{;k`0$(ݞn6&I2<DDQ&bfX+0f>KvgT㊩. ?>��(q)EGzd*޴lɩJ)8N;(�!03ӜZZmAT*Z\;rD n((En!Ί-j)]]Xsv+0dcJ̳䭥,uH%�n^{o/oኳD=Q⯞<r� tß>}n:S,I B*KW%QYbeks8CA7yG%[om\1tZڂϗ_݁Qؕ|ZOb5~{x< ��.|pÅpxv|ffK2PwUbW?͞{l]g9K\sߍ_ަ!|#n\}B?K^^2Aǿp*gNM9T(h{/j�`pg_z!|5 N?<uX]g+ݢpg2|왹W(o|򧎕 ͍;q}ÇV1ZoN=8Y�smPF  -4? '~_㥿jٻ,KCn:*}bscuˁDGv?߼%KkSl(= e.�*Vv_sGdO*z4/mL�/;;�g[ccv.�wYmJGhzEg2g^xbﮮCX (P9T$\u6j)z (>;eҥZkwGE= pZK2cV)a2ƃ^\T ?6K>;_z7=<YC D07EY}8CLDx,su||.d3q`=r|r \:|b߼H6ew͋!xLRHu{Lp q&|Jbn 3ͼʆ_t;o @lɳUP/L용,FUَ渤 /[v>8LuwFr6К;\qmuG;S3'`SK-Xc8^O�s �Йl\x|akctΰ)J[l}A #�vE `D8|l8NNe�nX$uY-1:bdD\v8n1@$$" HC"G#@ٜhϞj<8@$q{g}tc~BLz=vLX)A;hqt{TM1 nX}w\ҚT4{ 4Zh ,�tR&10hD6A6[nA ZGs:��@O7w(G+˽핕{wV6^88&C&$@F%aLe(e[0h4gf[g/}pvzz2zhP3Yj0 `*2;(jj1h36x  jaC�N oF}cYDw:)OMaCgh*<v{rs6aKaI{?)^XշvJϟ?`dycY'Dȇf_S,< 93YT)aJ'ɿL_odZ@D8?=?>2Z|o9R:TeLgd@6qMn.vP"y0iȅ _-{-ܽQ{Z;Th.KWԶף[/|率 /G"ԯ<sGph7xhd?SG=]>rD|P~V4~*ѷG5ڌѻ݇?}D�?񅥒oo7"M'}#~yg?{tH3wuCxɹ' #DpmCRMA|Jǿxj6 D_ܑ>f0߾eY#O" ڙ9n^"/_vѣ?{d~O.*ݎTY+o)Jb e{#m5.U-,/S!6F$o,;UD^`B&m{tYE2�rL=#`AWxԹCỎlU%MT[;TW/O)yKcw+w!rw(4CO?\U /chr g8ߔLuS.y//{c@[U6هg>Sǟ<ID+wE!o8qm�0^\off<E n]٩*��ܸmtd9?Jpi6wYkWeL{-SMec'Ӎ&j<۲NOk�ͤzDw󢄱P|,35Jcfo6i2mo<8˵J`Pt#g[>xL2yG\NX<:q8l ՙl,.<~�6BF%)_CqG&5Q9<�mIX}3k+ِ�Ih4V B'I`<ƃ; g{:,ol/a$qaNL3:H$0LVxg�Hb&I$ ;[׷WU7b@S@A &f`09g.Oo;..<&A4[J`: y;Bk'?4W_|_'>3=wC`q8'�h4Zٖε=LIh8 :4sN4@6h_l|o,82;(X^Qh88JD\w;;lͣr2=(Z բ/]KDL>w $j* P]ʤx&8ֹpTjw3C1YeZRnjI/@6峏N;{Go"bMj*,΂A @ˏ+:|hu^O<7G~<xiDL%b:v6# 1A4N4 j�'!+)y?ԧ3ŝ"u^�D//947py?< V̋;ml YW|mvv}N V1^oCM_P1$oh =܂D6 _��hA<MGjx0llN/+*qMo6Cم]U[o&Æ_:99: )F^ Cg?{WZ? _[)yC{#p !|L eZlBH,Chuy?.�p'5 y 6*m _j} Keק.Loz+^˜+ #>ڜS\8C\C(gAi)#3Ͱxs^ڬ֕<v>X~n졦G�:@vC:=Te'?;';=_:s<q^Vo׷$HFwn^ULr鍲Q]h=tdf9?Ca֖Gpd.8>~7K$ɏ-uSt&+mg|AP-H}߶nj>0>~V;o{xd~0)޾Jc=(}ѰdCOOL)6<K92:U[{0}j7.] {sHf>Tܾ-[Ćڝl[ Gu򣹁,8޵^Y^S)nu-gisG9f#>18Q%aNDhoC3Ry{F/mF.W{VХ|LȱNBKȉ#< c:<;"p LLh0 xq(+N=0SgIaxlY׍[f6yFycm]sU͉:�k%kU&RG$h4qB(Id(ND&hnkqcN<:Ϝg:|V, $D2H%�b�@6B=h4"JmD@!j[ZYޒ1z*% �/S? dHIXR$), �6 h zP|__G?G|ԉӓX턶M@(b� H!@fXЈh8S㧦Om6$M{ԊX-8NdOuj{Rh8Q4Xpt$oyZbj"Ski>˼?^Ȓ乁"vX ;VL; ^(5̂ ,D`RdhF赳Nq�/bRPԥ#m2s2XJ\n/ot~j&Ё+*R{lo vjex-ƨ#DA/G"rŐBUӝ0F*t1!Zv칬/q@h~~G>7.+' И'Mfk-b(.~rj3N gs~t3CI@.�y^}N RQ4ꩊ"O}R菾qJ| va:%C301-(0E$koJ6[:v @xmR?|gTI#Dt5CJS�GIwtvQ+_:_9h#�S/s%JQjiI;YBO@!.fWNQv$85cOm7ܻ<B�{RC_s,5t,ҩ_J6Tű|k,bޕX3VyK~0^q[ @F?to݊,y!d;l7_ȉs`$9ՊXlsEC3?'¦(4>+`�+osH_sAW~2eU1@KyhCJsQfVxwB#͒m6vkݺ�hԜ^ b@ݭ$0;R`#�\-, q{dOtq"<qnc[*I8%oxy% Z/gL u#%!G-U#̅)s?搾j\{{\T;>`CL<df#NMBUs<AbS%+}]nG˥{?-'ȸE�<2ćlWM낁$iǏH~,裪q7$6'}'هfyGggLY)>}4H3�pdH *"qZnwziD$CG;O=wDȨ ?&1ݾڅvIՏL褔1q| S3?qt~!A>u괌d_=Ptc$[jdeiG+u獦xËK'' BA0�cZ,Yźd~ҩ3f�!fAg&}hqthmYr+Ɋ'\_/8yvf<B (=IJ3f.$ /L|G;`iyVtKJ qįL9At|W.^шo)G+'�LF]P66D.qض^ Wf�!0(Ibe'(Q� X(KA<q(<S8󁏞Y<Վwb8J Xe)樳�>�(Tv[WJAAFl W+ww= 3'~˓N"9&ѫ>ǝ̣@f;QJʉ)ptj# s=2=O7G(($F* J^ox43^<2q00Sx費z_3yV�HĉR)3-J� EQ4qE2$w>!$a h~$Y٥ ϶@ g+ի>{gE:Aov!wX`U͂8f!exVn*W#ڴۺhuTlg6_dɣO'9ff[|.`I�Gw.ڵ8l#d#.Bi !f EW )qJv*Ԙh;Q &^86O_<5o.~⧏J]l|J\$nJU %b{r b|'>K_8ŝ>}'K5$=l2rt( A&*rL&/0Wӈ\hWxDûGfkBOm'?>7+ B*g>T>��~rW#Mpv+x R5`;| T:&�ZF0X.'lk^{wهf~?4G\=/+s䯾G !d!DIZܸ7z͒L6s_<%23|KǾ_i~뽭ZxaL%腪UO~ts' )wsN?%\!R6B�'V Jo|\Öj2☲L F$ps헷w҇NO{ 7zoq~-?9?jI6ʄ[ٕ5e$m)N畣g1 `ʀp]ң͵e1\] ƢCՙ6W:F[].2534Ѽ !!�c?Kx f"�jǟ疰41wVv6c8Btֶ I)׍<B. 5i0p#BxR9]p U_8Ҷ8;=Yg!0TkUﭵ z}hOҹg f~v8¾7!/C̚![ЏhN4Îd&?O>.N6GfJ k:wW`>zൠ<n]))�A=s`rKⱧ=AB:F+GNy 0s>A}NHg.̢ jW41>…ԫs wFriN wi#!;,+{ t0ij=t쯣LÃv,Nϵ܀&{zSUO&KWBc|" XYnG'<B{=A``~pD~V"L#'S|A9&Y+5k.L E1EL`vZ sSe,''/<j樷3fYdoFԧyDL5 q#Dˆ<l. [_C BB $ (@ B$S2u0 <ztхimFr�"=W v:BBfIJR@u㜴OZzk. a#l5v|VέL�(�0''4*&a"D!0"s0Կ=}٣䙏~O9r`:o0$2A!B (rrԙZ<:ўL&�L;'a_Cdd3Mf(AAQ$Nz0!. ǣx<�Q'*?]ksH,p3h);m">`+bb7,F԰Qgq:YL6r| 6 2;g9idYI�zgo>%Ϙ ;O\-ܽ1\n.i-<bU7v첽jrꍲ3|}=OJuRU7/!? uكy ۯl gģO7xhC̑ ׶.cP\Srx}n}Otlį6ƫw+wn \:5qX{X{hgjQAWA/A>л!6qQqlwW]o w|aӳ/ҩOԱe83g&/<1[xþ U9r?{t) ]X7\=Xտ{}$tDRghΩZ||kK"WBsнwmfStw;Z[N6l99Ԟ[>wcuҷRF kX6;GNtJ䳋=:Z_noi-i/++w/~u%}=xeE37WG±:_9݊W+{õ; CKííɩ �a/ @&&~Ho9[kk']#idW@C:n^K(߿tPLXm7VFFHnn/J kKzR:4_bN4khʑo7i D:}+"Rc�p͝|dHږLA tC cѕۃ7{K'NN7>'V7[pL΄S3晇f*7\}SG-ˋc9*ll_-k<5ջojibԠ`6/}txk}6^_|kz9;ܕ*|]lߣƥS >phc}ۊf3 ͙\srnM #֝j"zQ*Ir-XFmf{}@9|j|sn^^7L'.YGD+l=\/�!kTR=~f񉝭xgs9nw\sj99Ө e3PEBX޹=y7KX*;"<'7.m~,yg9~zrg+nw6ƽnSLsbjP;|r%S=\K:7;�"JIWܪ\xtbPuǽhgglӍTcrz8fw݉ƣO~7wxЋ۝`r99ݘnoHhq{sך电luypĤSiG:9A/bv'lN%w"܅s5&]阛U(;lsz̡_jpq'D=v:a8uuɕobm#9xBڼT%*Gt,:]rY$�[%Rq.P4Q2Nb9މ)j7&'fGWzZ2l,LkOMS"dBE6$-oH !"J$& aǫ" z@%Ҝ^*ݙRJ)%�ALa{{|+?~ 2%V+�R'`mW/ݫL3H[@<(%�lhm8utؓO-[/~ŷllZd6P6[V;BxG �"4[9yfa, �J@yoڔkFK r^Fq4N͵q\{Z iC$bh4(8AAQBт@rg|rugﱫYsX7Pf[+Ŝ;J埾0`xS&<',r|s'L8S]?-F,`H6)WAA4L'~ydlSg?o~왅mK''WV4/}k]Xw%u&>#xw3#;O|"2;ߜo/= =v .*w?;mgD?ё.~ /|Oj>tE3z`2?Sz_(ٌwn.xxsxc SCr]զfS33fpo?oƑ(<@�W~/sQ!>Vkvv?7MɖQ)\_asH+x5ۘm>SX{{W۽VC` Iw/]Oҟ]*̊K!J#n}|gJ7@,X:Yk?_ݾ},"fWY {(=j2YFc5Ed~% ]zc+NH^|eSߠaQGۛ"L ܡrvN8F{~'TΤ&j4knWݷΤ$'mXMlB%׏j`%3^~Dygӳ͓'+9wu )[F2?X?ܮ\U:e?3)жg+}1}wU֋h,/Hqn N9u.woH$-B;1!‘N76b{~ Q.biZd߸s̔w~EcyZWiFv!ٞ[lN[,/NwKoDJλa}eX �P̷fYif3 ۝p^"y$]~c㑧58К5ߺ7YkS\1~G:;�"փOTlED3QۤkH?i'ٽN ve)KbJLkHI�3J)djH�4D#h67ģ4'շW׆w֌A%R&dj; Av){�6 i v⵻Z8 !Rk�3ENKeu81_N BЄ|GfG/ygN7dg(eِQ2Hag2]hχ@T) جS~jE@'y1 hr?4"2Ń`N["aJAFͨ)3�W)s!e�$+w$1]'q Օiiq{0w=J#E>cJ<KʳY -%$crA)im,J;d�k"9+K@;A_Ym_ 8';pwz,֠/|%7֥#I�`~.1Y~>۫/}OV�ٳS#gYYTWRH߼uQa{hEHk/>PpO �Lߜ#⢏Sױc��CڡbAn?,?`?-Nzgz[WI[_^{Ko[k;<Wve-\JyO>4G\Z9: 2ظfﭽ{Z}g k(<B�e| cnooz.,f�[]R=[tnp-.7ji; A?.&&Ir4jW !�yCc]5_y*L-iM/vF;U'*GrF G�$1[+2yt\=eίoUlœ6tl Dqێ_ڒ.Q^ÕG?ZVS+Iѡ7ȄO q?\/n*[~{W܌*I�0g% )lЋ_zhcy- !54e[k;\)@KET$om&Vqi{Ћ 'f,g`Gb͜QM[d MƇuƘ@/|@"=+IA9T"DBKd` #d<{GN<.<ujhllzÝX�")!!J�H!u,}7@aKo\3/ӧSS03e��B@ �� -X8|g?~]9 1�@N2NDphqrP--oq 8?X&0 Hb4zADaݟF5UN̢8V؊{>ϩؽ1129L �o�6׵;M"3$nW<;KcZX67A؁* ,G{r=8_]y,\MUɰaU);d֗(4o3`Eu3O@�nam[_A![b$kXcG~O_)_QBLKc\-Vd4CN<'JFLqFbT9`83]QF2ԳVX/߹}\>&wg}V�ۨ^0.חWv<KQb E{{keRQ]YX>C>{ollA߼rg zS1��\|}pWO]+�XYqfy{W.3<rIf8( ) VxԖcow%~o'fIOcΈ>4YN_M,[qP:\J1CM˖8pf|C�olw%^`v](QIogv~T[+=_vwDy72M]@y !l/iEou>mUfvw*j'R}QsCSNmo_ΊJWUYPx΁JbxAt:�JDUrX]mO|iЋmF2-7 VQmb#܂r<]-?uZFcVkk='ƑLMH;:k+đRdɹ5+WYqg)G},(��& ƻ>׭b"BM~ikk}6BXHϊTф,fOXH�k˷0yhA$G՟<au Z,1As8`b4%x7</)͡_9 V7saR#K'}0C70aDk1Ԛ"vQѩj1UH@�D� 8IѨI=O|]x3 '"w[1D% ! DwVO:h7$D F<[ݷ__\'c`$ FyF{QʰA =~܃,/ǛQ#�))8�ԚS3sBJ|rh;xg?荪1�q ~o0菒�P&=3UN=)kYQi h}'*)Tnvwy`K3J2Ջ@ L1sױ?r씊0yjGf/�ONo?z~ݰF?b3,A*W񅅡5 aH/g7ǿ.%"_;5T&M8PULсL䨇lZvKxDp}KY&߾fkTkdSG&Tn첱cU0 , {_=_!P=cy@D;i~7o]/_/uL*DXKyD[JQa^w3{_]֗6jɮ9 �;ovf-_^u6{B yb WmNE#_q7ݯl YPVBJZB��kBC)<ep+78 !Kّ>ܹ.߸ƺ`+;nQ8v8 �ҟ]`9~n$pL`}/:I+,͗6߼m[qeQP.x2\\~mr'џ+c}BLرI)!l!#ʪCzB?(,s� w~eݒXծ'ȆJYDzxngK]6w_rr?^{g{NPf`d2DjxpA+ *Y a {WO/n߸ԵݨX'X8 j&~wk˃} o^n'V`YغA|/uu' :l'6z+%||4ǀU;sΜg+GˁBa?ze%2&(ɶNt}XCXg6dXO0e7ܼThA;\;k`#,) X\ԍ NtЋ.6O+'XU#H6/]sL# <1$SsۓD_nu.mP d B�t %I1D"a#LFq<Ѱ?6I Nw{sSxxhk(7׶nuWxH`a  P$IK)?`46{y~ˎ79PD7(l{_gg1` Hxև;|x%r 8I"V; A'뤱cwI 7O9Eh4X!Z$O)SE&lkMsbd<D(<$y&2 Yev˷HZiȈ *Yٗz:ɮȩZ|pkiϘSA�w͵{.mn海 4-֫4L !D{}X\|D{|={Im4Vo;wZtkcFdӯh>W1+ OX/X HJgslanG\8=ܭfo&c_*bl0C$$#I_?kosbUN-ոm %|oZpv7?\-paRvL}L�j9֢)G0)opKxd@m+woޟZ;fIV0U?GA z׾Ej�XV(;BHI3Wcg}< lͦ0\gŠ} %vg{^ߺއz _/MiC7z>ͅzů,eFS#�\s9dkegm$_S9[c<ɛ?0)1F!XD%~8G�n_}nGrg}Uhe@WA k DT6JZ6J+^L !YW+[�nܹsBxߺ$3Sv-h.h;vw?Ik/Z@9Q'! l딄z,�ۺR�g{+;oz97= zphЋ_Ѯ]~J(<i\M;_LbyJױ|=Z@H]";lV�%sJnj5WsQif^X[_\JQ_@wwyu}?kyummyE {Y@e˷^߸/E֖VYQQIsc-_ V7. C^766C0�㋯m  ڞ`sCڴ*;e,|Ɉ%(x0 AbzDyC $D@@ ��@�D"$BB!4" $0wSܣ~SS{g֝`ԋ)B"HU&avвF�0nwDKJsk5m%�R �L0a~]TzK8{jYkbK)cD�333GD흻vC`;h6!PLL6gvzlH)H 2MHJ]曇ZBDEriݏmK$ F �FA4%I y@7Sx>7o)GO@c[ {2=_/[`Npsrwħ]K}}`fllU,Ǯ5g:QE&5kwF'?{xxѠ|f_aTAa2s㵸˾̭= 챶љK6&/0w~#魢?.u[?ԗf vޤgfS>+m-{ Ypݷ un]{.~%H?7~Vzui�ݹ֧c]=6~k兯&1M͆Eq?)* Ol_\~ G|lvܸWl8 MeZ;j$Sv`uz;W?>]hn]mqȭ7^ܼvC^|9{0yk~'^y736ƗoO<fPS?{~֮^CY(' |/"�ܻ5{ÇX#R7^Z'%`==DfN8!]ÂCLfF5J{*Jq$ۑr_<r|"ڽ{#}OZ:;?ڝhrF'A?q| a~oGy?6{QrI߼C~4~^SͬjV+s[T�vVt_/>6+fIIy-Sfnvxm{օ'<8[U6z뛫*| D-䵡R\"qG^Gvgg&|Gw#4ȭ;\q9VLh(ykwO>0}ٰ;S]|mc}eTo6+�pC߉W}EW[���IDATַь�Q8e*ɋX>s"Է7GW-B949b]k~zg9A|ʰC5 92|rܡv=v[׿qP6?iio5E,~6׆z䡣 ]BHn @>9/K4,EUB_Z_:5=9ըB V;{ D+IېM DD^C n:6I|Y# (D RIJ$H@^@c��xМi~!<;5x}y; )[N!J2?q!�J$fjt[73t՚+^-[3CM03{pb*4B1l[9;ߙm_?\ �@J h{KIII"0 L( CDh6Be _Yz¨L4_HNC3tşUgW:6 g8Ce*#Q;aE*EW ?|>ʼnɺ][ʋ_[k,fW$l nWeA!q*ij=|j%!wwt"'x@^z౩~蹇wowzqKe9P1, )T>ވ~ޟ~G=<lՍl^te4t=$О ޡ?}R%8*[~᫫~v'f:;[7w7UvЇO 3֕?'U|i;|Sk_i ]#H�޻t?͛/Z{Gs_[N) lH-p՝ot}f-,~J{o޾҇2IW|#yN}|r[|g}<YΤȖ# jeW(,WWrl9TN^Z. ^ј!^+eczo.{xzvj4Ln^tw*魨5*ʈޅ wGgY q9ס. 4ooIBzxIu9kd9^:Y=ٞj#`4/gW4+ol߸#%v~DTַܳg޳MS{ovK;|TPD|7<M`'h$_;p𱎨DRqFԚi墯(ߜ[;xo|`N+*%ݾֽΰW�Z/.J}gR4"v{dvd4h\}k.^j9s_NIB7.s -8HpILپ{wCG;A4_}gk`>MѮ,KaY w<8cuV<Dcy}QND7 {ۯ̷N=0S!gktNw;>sJ>zԤ q<}VVaֺ]ۃ]<L_"%+as,{U(zѥg[&&5O^z1E-e[m|<څ_WgY��@JA6HHDAz I R8A$űlLCa(:dʛˣHh4 la(D]&q=h} $Vsr8-޸quٙ4~c%f,P vSyZiD@BT) مG1W-wSFĴfFaVvPk@"H C[`$\c�I2h(^60징B-SsV^*sO[c;ivRWu?Ćxyʊs*?U?-! ͂&D8$l5wJ@SARFLuM"S}[`rVc@RNB4&)b[f =93D{xg+ZWv|YyQGH>DcW A tEC( <Be#G9Kv�v4$�An8 . Kg:|sz:6X-V n]]{g=xPPP󣑔,a< UW2dSNxP#Rg:̩SӍD +/EWk Ē6hwO&GҊ >v5[q$M6{0X �HJe^&�"Zj}d̅Cd~mo7^}+ed"v&EY^Si>̙g[I "7{^߾xD^D}q I$ g2!= <&B(o|*ї#9c/[E5%Di>yfc3g^8!A?\]{{m~̧JXZ0;8("dj6<ވ`4Lxfŝ8B+J+�9?MN~pɉ #9$[znEb5 .q�j(ɜGHI C24FXr�@$̦~EY9y[O?395lwnHIAFwo]̡{%`}H@1ɮ!cL�DqēZY$8kj%0(R&PQ/zrOׯZm0+!DѤ�)I&^2YE8r31h>dЋߍ2-{( 5A[e d֣,MII'EDXK $8P\"gɪQH2E9`31.X:595h0ql dK))G>0ܯ"D %PHn4GONj5ϐűt{7[cG (<�LbY!Cqf)e=)R)O$%$?* l~p䡣D=~ۉQo'Z;eUd>G?:"Rg~j<,% ;rTW!P`,MWY2Ā<Yt?#Wv.:ng9@'bPkhgfl d<IhЏ VݭA Pj2D4CD$5݆KM*Y.K|BٲpBFdk}vo9&i[H"xGt!�(evE{1ؚ_lw&B>p$)~/Xn"n{}�uÙD@2X15טoO6 -o"'8 Y[FGc3WU DPD-R7ƨĠk+bj93L6†pn$c;[8;>\{5dL^$( &nџM#4Bʀ v=1l<y2 C)e$AH)` QXDDBB`(R8X$càBIB b F+$I|g&w7lFh5 h$ BfZ[*KJQʃ D@﹥Nŷ\<PRŲ{1RbV{vh|#Ih(cN{ا?Ї> D-XK+6P%nk.-KHu\A�@@u㕗n/:ũ}rO.-4$Q H B3&NZ >}yap6;*|@L0H߁W^@DAb͋!kY={>I($D(1"5[NݙhZ-ĆQ}FBAP6OP^85z`nʄ %$A2X`;ObE°]5(jtEٳ,'mmX$ଶWs3N7dB+dlOQbk0$:摷yL 5Hs/!.y{J6 "lZTLB\{WxUunVA>293L#W0hV<3{&wA#P<$4[Ag:l(QW17#Bg*n I'VnFyWv5Dg}Aava?bUs]��aCLLtA?!S kEW%{>mJ?q Ag*#9&q$n!>`:3푕[qګ h6Eg*DA/̢Y=5AΫD]nrA+$mn0;V{`7ν=#ͱ͹zBsB/!]?!DJ@:AӠHɖ: Im5+¾!L3zd9vtR�Hٰ(7'Nހqs)tհg +C<.q�~4{OʍnlM^$v OЫCw- BG2'`KH={3s>w~gl.#~gP9:$xGYlBh' \ä)R_ty?Bj"h$(]N^K9Z mFlj}/[[9ާXAX=AS  EP4v S9]!NZ~:aC L"GR2;% }85̵J#y$#/r(r`G'($J�@4d `LH0X8&$Pa@% LZBL6Z-j8lE/זo\\]Ef@a  `2 &@�d% @Gq1B'˳ bKn/I�S)i|"ANcss[lN{;;O~gδ&Q $�$ÀkC_[~_X ԇ c Dֿ/|hؚO}?rhz!)q+h RB8�5{X@` w67^"4)l_ }MX�IYoH7J) Vg=1,}iCЮguޟ�>sj+c SvEA|卝5UOaɡ2t@@5oq*^`Q+ ,ljD<g8s'~UeXt0jf;7Blw4bn]#=tjg$1zh_ V&S}.rwYn{Wq!eϜ. ~2%9anۿonk__ml6CHYr�q<L;ɠmB o2g&Ԑ5pB4 ˹rrƃIS >ϓPh 7ar !61vh(%ꉳ]>5=DFNnzˋ Km#frMGCw$Rzo|Wh!B8M�?q$BBJGո; ZѠ$Q%k!vIEʱ l" < ! "+`&A&0'AG3XYGHqխ%V\~�dA5 #z&RճIB+otU2 ̌%s+WP=;`?$1I4V6$p*llrg|)}ώF3]hm:ˌ)'�I,LO!g}z\iW5~56 %$Ig8!/5yfr]$>"0ѻ<AA4\~6NhLI,=}OPQF;Q]g+]L DcIdy|jr,QFyv~q#/#`8DJBO}y Vߑ}@.-GILqDR]`!\4VXS6wPQ$8~+0c@QnS@N}�PM1x,eBd@-]:P!-l}_u:r__xEq(@ENuh}ȱ̌"MƐ J$4!{&�&��@  �Q�""&�`Hklc5JF[kA:v5A#�"�IIG�(D L$ @$DB HR#@eeS|nM1_tp3vDL(wFrԵFg?@$$vDD$Xڝpvj&\*Y7h>gt"`Z=/ʳ[OSٸB� l6PЈk_xt豉V+@�1Aj lBr?E e�@`b)j D� �p{'|$i51#fEv<P?ħL2b"eGQba! #PZ:vL&5g;~҂OxW_� / `2;ȯvt^`B Ec%zō!OI~iݯ]YCIv /tYZx32^2gaԛE)6l6PaE'�WB4n8W6.B|WXC\<XD{v[Ϳ6)_Izs($َ[w+kTq$*$g#CMG QGB1t_m;I+τ lABq´C wn9am([JUͅ9\AQxuZ$ϟ !{,bYDB=ARvw !Y,, o'Cj7t^kC$@�t'Dž'Snr1CE*0&=gcUvQvEv~K.Vύ3:'=Oޜ2~s!ŶDB쏵If%ɘ[ٍOjRY,HGV#FUrF,<NoKI+}�԰c peWq{r5|2X=)�n\BlBTW+ɗ#qhчj=" aw{Gd/R3/(Q=bc)j3@ @!%(_6⹝oaWTvʑU* R754cscU,5I6@2)GۊPI^m^s˃`QvIH"\\�DD(d(Iw"�@(\�dA�"- @1R�PSsd;hp0FqHA $ 0@@)IJ)A0 @w0f@y�O*_2g[-Zy 3esbqm+q} "`C@HjѸhc&["�%@%g o7zܟѤ]Pu@ߑ\D#@@`4A;l ‡;rT @^(h}Sj*�R""A( 76l_L4;4'3 o5! v?l7dYR A%I1 FTf%oGM8O�vʬ6s kr8ru=A;hvA;hvA;h,?֍�$mYC(�@�HjILA""hSι֫W\޺<'a+MuQBH DJD!?8RuwǰA{ )8LV4lv7m޽9 *�,.kLt[)$ Zm<xݝo4hooM n�dkg8 Ly!to'$8 fchBҬ_`y!TŞdÛ*J@q*d_OWUA%sjz! Y>q*U0K#Χg<6vH 6 +É.mdN#KYoTE ّQ|)l͐IIu@+BN]+`]$}0eGk/p07X#5 'ABHWч=P`$p+q՚MVsAu,NǚX++P916Æ.jfZ,`Ai^Rjs{Xq72g@Us0'8N*jB@#�mP_%vNAlum|oaKFf%ִ$[r!nA!YWGT+~m M %=,e `@r[iXPV(K N!/b"-ABׁJ!F!^9cs#]as쫅B%=X(s<aA2B/ 4$X %ȲC#!pej*IkX3[N[qys5 l+C3;!m !x&\dUy%Gv>SvnBmix|�R;_ˁNLfN =&ls(o+egMBKS@!>;?C@WBc盰`\Z!C!jPw,s#h.B !vp!Aioi5^cAZV$bDWOZ�2#}m0`cڢGy<)2\0OX97ʯ N})'e> rl- }>7!7}LJDm;\il>1;I1ч9Ȯ|ҢsOX檣]9#f#@Գm QT"=Q1}*G!|v!Ec|A$uub{E\O}r!Ln�\ኅ8cGJUc0=A}]B#% v|$Dq?dҚ?vG&7kOBєHIjv:v (Nc1BDB"�nA;h{iRF2pܼʏnݽ *ט�LOcOMlfܚl||.tZP]tD%�Z= S�HFD8G`0QY|w !B 1 N iAeJO1t^QX׎sl72kX `n1Cy^&m:]ń8 hV>6L@ uK~Mڣ^ىy##Vn; ;!`!Jb{ !# dHȕY܉u;h>Za? l{8iBrRt8Xց<3U.X] m.aA+.<9EqR!9m m>q]Ea*gCoV2$rdvQe/ l+t 1㶉XB!Elv`@NJ!hKTC9' !֤1P`1gC.GHMO;,sH>-s:o\ x/ꩥn͡Mr`F&!a=<VXq. ׁQ!$?J2hY0}Px!l*;Wk.Y+e!G8$9#̓'B!=A6fЯ?;kɵ=A� rrtLX=kAy{V /0﫣󨨣_@ �,}c{ ;!0>s{}cg됞5E_8z+=WZˡAQ%`AvHorD_9¤y9 qcA+G[=^x-(H%mT9l݀1ى^(G3!擣D?�!r%PvkPkJH$q$%!f-촦&[Nwv(Fц LI""I)) TO$oo h}}Ʀ4!`a`-pº;2F@,�H"?FB!H&IEqL896 J\TDWߗf!bEWmcEBl6[N83>rlvz{sdb㝗@@ B\[]w77"v^^ hOw[Ӎ:Y3*.e"e!sݽ9@%% "H*q8)\|&gր6C ^uES7rSlke|_Ɲ.[V[@7 rh;k{I/pSݶv68.!(,U4̢<�qIAvpZ,Ķy3%IǨ3<iMuzY"nm|,,x ?/ϟ'AzVnzW;Kl鴙%6]^`6hy9bOAt+7p;ZֲM-C@w%^~iY،l8i V{Oou MC5BgmJe'hY緖۠E=eml"Dobώ�Z�SF !5FrZ{]d 6r lwRVP,T( 81!`d7 EA%B <BMa#BwDI_=)oLY XPCsdio4j?gmƨ'Кmdq,N !`zm*c$k1e`L(|ܞ6|�ˊa|жG'ǘv@}`mnc糍,&W#X,5 {/*^7Gj8cR"$FU!J3FӻD+(Gt(`j>�RBϲolѧKታXȺS\�Ǖ#+G܍rtFb&k+X(G/pd3dK9@q;ǥb_vr/.P r| *1 mb=x!Dex[b'Şgmp\#�${|Ӟ`Y !$c!v;Ȱ*C[' ' d;@pR-,|-МbV=A;V`V*\OwL.ve깬SlKgXQ c1MŖfh`zO@JH?cZ<Ӌg&=o I$0 #)) &%(BjfZ"2A 0 D[4&+wWٺ}}�RGH��~FQ\  �¡#9ral&5& lo VwC)A4Z �Q4-D`FQ.I<7l b)X\m-]kLD(e`vAQY_^V>@Yf'Rq,תja,_˺{<R?kF2>(0U-YI[lx%y56y#<ax#О9po`L mm kg& $X4S@Bs*e6xـv ܗ9c Ũ\ Grp9 o}C[9!9 n*`džPcFWS~}-Qf9laHX89P # RTqB|@*ˇUL?6J ʺ HC8Btrzs /lY: }#ZfjɩW/)Q!Cy,gY֙FA|_ Tf("հWn'B<(@wA!kP"#ǨtR!uƣ!E_FK͗>BP}H.sQ Bp-#/jtrF9. 7 LS:#)*$^rJ#`6EG݉>!U˄b<Il*a ^Lu&B!@#W_lx@= "+ʱq7r  Hfr�/V{F2�A�mC] }! 2I8pb.Zhv&(h4z;8NLoHbJ(@4!Bv){`p-?;&IB$ l4$#Dĩ(d `">MW`!@dsrF>Gst ]o޹#v؜�'3\#l6qq(FA׬ lTH{YZ `?vA;hvA;hvA;h=n(D�B"IHW" @`!&$hlÉ\xÇg.oݺM4g&s` !A�U�$3ȿ 18IIA6$ hI2^}G=xCО � ��@XgOT4U*P�!cW7*Ng �App}}8"XֲR &kAQoe/}gф^Ŷ"wajY+"/dwNRgGB(x+ Mz!ŪV6AWvRVFJW(۾ �xC4|5ryQ8vu'x"O}˒VЦʋ[4|xQ8p jqMe _7rbP~Ѭ}$de$7 fZVrȳu{el?\1\6S&ܬ% ]P2 }&? ēuP[ &OXv B !BJ|DГkao0^ T3Qfc!Dow\!xB!>QҌp5X3+~Ѩ9v;o49#D @9!DZ؋У\J2?($ardE< hBBBZ wZS#l(!GA BtK9j C" 0{׺?s9j]r+NG9VClgf@d\{Q 4o˜P@%'m�ǎ)G`FT&>S2 u9 8GY): ñŧa#D@FW RajZ@\%CjUq*!G� Bl;l;m;a: G?^igx3vⰍ%cjxjPQnTLaG2NJ j+G=Ar#'A#Mud�hlDGbCa!hiDW1͞h{hȵ5=WvuDOyRwm>]Aːe <nS'\/PAn#*G-@^9V};(tQwxCQ6DїGmbC7C? h]@!'v`FnB4T3<ĂH0U.TP`!%`t( įdkb-Q~(G`!X9Z$m>h$ʒ�պ}`z"Q1]dl\&MH&I,)A ꎷQ c9X:7N1b@ FcF PP@LjX�Ihq"fsr<o\߹s}8#P� �%`B$JH/ @ #0|W ?�$zo^w{kP-@�ӞW7PHg>�dBq@H^ q\f{9d@\u@ZĬX2F&vTbJx6uOҟC2>Ա<uՎ:OV*/k8_\bm|s#5w铋\ټ4h7n}G)BKh\ 23ND_01JϪŘ78<򓠋;КnI@˝csnoV!OlQtzs:f/w ByPq/UlhAHSDcf jm[轉p2."<qEq!P(w vMqXŵ}vRIFteCe~1OJ] nAHӬ΃hmn !H n$0Q7*}eS߃jm2K 5PkymO mIy#@v}~]#˧!gaf"Gm9 2IwX4ot!n/ /B[X hu/x%c^@hsǎ=v%.m03-G5 IΛ@۾@N3(ψ~9P"0<Br-C<߂2yR9E]e *O؍*G[s+g+"D}lLro>_Bx9`�OYrp+{|/j1>r$�sVU_8,1(Ώ p8m BOQ'*Fsn4{-O.'V$OrK3 :p O�!Cʦ~1-vD!87VcsWB䘛w`ώ(eZ m:@�HV�HH$I8v93Y?F1%iT! B ,l B~A [~K@'2 �b< B `uĔ@@8*LhpCe$QݓdI� (+zY{ e%Ii[Í DkI&'&H"0 HE^N%%֦VVV.C;c|m/07%jQl0٫5b*(faƶԉqcи]1 zQTڬɖ6|[f-p"`_3ws+68%Q1Z ls�Ql|t܉u`ł69ў6^ !ޚ_4PU {&q4/T@N{o^#8_Uf402/b̃_@7"vWGgO}S(Rna'hTG}~+gm/}ʀCCH.D-T=^5 }䀹o>GSXuo�g#JÑ,he*ApP+DǖzR(;CoUW�5!<:"<B<P8B 70H|SyL\5#6 Z3E13r$X!W[t>Zq]F,@Y[1Qv̞e`[ՍVذdk2|�0H&Vv78{\cr];l[Lv{S)9;%Tb[ q/.�[#  pFVןb\mor'9ldϑyɐsFIvcnCc$;޹ :Q68x!DK`�LۓRW#�+39nu<b7|2F2<kvN9.OGE nT^CٛQEgy% `+rO).Ϝr,L5 B;B'X B'C~썝䠯TEE]xAy<A%1Q-7P`0#L"+X'LW00~qc,So\ `8G[XF 絖ʎg?,1/nh \Y$oSs?pKS]c.!� @" D 8v۽aw8`;?پ~O->١Vwl X AB@l l YXJ;_VV15P5>S\J!�($$"A؎G;orj@0SHP@Sa HQ+ �@iHϹH@�``4B-Ai*/lC`fa22I$ A PDF`8㱔;#tSX z7fI} cY`E920/y_PE㖕Pˈ/{27]nջ5X ~eX?fP6kYpMlzDdbL'TŲV&7}{ Mpzr?ju<c60&No` /kc$뱦b>`(r/O W>q27' \aP5H)�j`rTHZFEY68!6ɨ" yq嶭 Gz[t䀯vqE."ɕEWCaoNSxzD ^U:A^+DB d~2ܮ&[F9*{!�8 ZD5V<Dmx(' `9 +/=<oVvEv~jeWJD+u#I=Z'wP ?L ]EcP$`uRlK!h"nB>ɻ&EUE:,1b'6E6K11K05GQ�[<YB5+jM r,!q^ a g:xEvQEo.hl?G]T895 nrX8sDT)G?6PbնmS)e6k858o`CHY'*'gb=M"t(ͼ+D_9V\r%o>?3Cn19;e cRJ �64B R>3ґ2~(~`]XB$DJAA# ŔX<:0h[;ݭ$N 0AP�BRREQj\=|^8aEﲵ>NE@D %@0D! ∢ ;f{n~f~1 \7M2,ݞVd3,wv Hl @zp޸qc+7ia�;A�˒#Q L$ h4Bo:[2TslYAmǰvA;hvA;hvA;hY鍰<&ILsib !K1 I@(yJ"`CA�"9f Z8< zg+[v{|;a+MP `@ `_)ZYɗ4DGHjWN,L b OYȧٴ\Р&a)oZD(bɭhDM!ڈHm5Ozk0D(02ea+{xWV |�7(eսjٕ*f]!@kUm闈M =.o@yq\tIյ2(Ѣ#z*FJٛTMebXYi"x n<Iur,ZNjœfIyq'=6ΣfHR l\땕lcczek` Hof4P9vu@S$ߚ! |͜+fbŝ ԞGq0T$0F6[!> 75s?+"2^܉kdG%O hoB�FtDp7C/&v/M^ڗW2r8B[>` ,V�[[=j(0#NgH !`bƴBTQv5j^4 >]ϕ#De[nbC^keieҩcűc86#˖rsbmC`X2vi 2Ҷ઺8Z;'q*s[qܖȗu h#e^oC"Rv|eix|�R;_ˁoy4|Si|ʣ +|,`{ Camp7:`4H(nBVT !{ABНK!C!!R5jsϖK*^*A{'hw-b X reg1@]x�c'0ήry.C'h,WДrTZ?]XzcYu=AI(Wrz"X?/B6}P",h#lG}>h)"xR\Y/ y@9;o>b5~o%q6gdȁ|IKn3 >^^M_߭ו*!9}m'>G9˜gr2 H9A#אjO'H3{ If[�9$gК,O}$f+!J2@)$L}X0㡤1 g'ӟ<GOᐶ{ EqD� #)c:(}vݐ+ `fq6FLt:S2n޽^5t7k!l-fdMW( u<^? "1@bmX4XD ZQFhEQ 9=/;!pRV_WPЎs5Ŷݙisg&x#�3k17.u,<Nj9,!scX^4Pw׆d>Ⱥ0+;201{@*�ʒRVlsY xBO2?H`{;O%nX6,,ZG9fvf~Ejz܃#x2`geW~T 0Z/$NGnS+5fW[8Cĭ|hu9ZBr!p^UrErk s> nؚ9T` ɍBeg>6`; X-C;2*_"ҏp/B_ao /9Tr .BD<6r1O.!AH(0̡e#&'9d\);n5)H[,7ZqXSK٩pf);~`f0zQv?[LA &@6Xq. ׁQ!$?J>${:lU2,E F#؃s#MRegpxgkQq!GH|}H+;m˙C>> &g=A6f w) ^F `}jܫ]-S+Ƚ9׏E=+QyTQ/ � H� >ϱx3!>x}sTY9?(ꐞp_U+&A#FZ,}"ї{7K<wy6׏eQ- 4oD_9sa;BG^9Ĝ Dv zm-9rHbFr'x冣$8rIva>H6y] $QB#GAwU_ S>ef�A�D� EHȰsv x0&iik A(H&I$e *oz_կ/tn^CT&C(A` ƣ`8"G۝ l`*1>otmB8È$b~z]6x˽8`BMr1{gJn/2gOт#|pV[6*)Y1o]F7byAkCoܗ-(Vv#YgseW BrܩeR{+*eoO@5vs5Oxе ;o9.lp_xS鴱:/j6_4峿eXן;JlQ"-;uNpyT0(&xRH&ꐬPaˍ T`7Q* /&++lTvB*q�?ҩ|Kg5#>(VnNx擇?78mbÃbv!>eWuyג5R*�O~l)Oi;{?gBԓ�儃Ge-MlQ`,b[tc 5_gKrMl*$TɮJ{%e=>Zb痍~DcϘW'N[[v7*dIՕf<JQ F2(Q4eAl{.IP6dtn=ev~spEﺴ</TC?H W{QZ*�{DAi[Yw{ E_Iޏ(sb{wC`6K<A6vmOPw[=$~W]I+OfwY. =5Jw֥B4MD 08(J7'InV%mh|@*Hi@� BJz~#VL͞hZǧgf:ӓ?6Wƣn?x<va JBwGA;hk($@% bm4ZAo^7=v(lGA�TX%G س~ZkI]v(%߾_9꓀f4!Q*9C=A23Y(HJ @QBF#I_"JN 8GHBCnL%V ]YJM_()B@  h꽘qꤱYϵC~EH#լnIePY z}N45 `!;<&ە U-<I TW{mA1sS)>Thl$ ! B2l7ha�,4NNv'0=NCΥHy937úIHG\-qA d +!6B<15DKWFr=<aL�jbf !99-=4)=5"U܂5˱aJ|dȸjMeT(sr/MeF�dže6B%?6d9Ȇ7`z^޸p"FXB9?B]r4\@6ɖ,lTlTI/3j~8(i,BYm}~C+;B0d#r.Bfʠc~һȮd܄Ac9vFpC1 *-(0b<�C3f�(lXW&�#1<!3 lqs(9TfڟM `#e:!o!T ocQ#yȵ;ۛ |&aWn[&2·mC(?pGXqmB'I!X"7!>+&pG@h6Nn-{>OB"np_~{7O5φ􋾜r"}OwzEE0X j�[z8Ů ?R^9Z߷Ц~njpAn{h4BJ=An)[B#@�+P^9=C}Jp;B>'*W,}Cod`%}B  BA~BX־\$)dE?B#`B=BJ=A!~gʲs aoAz<JX }@ C<*H7\bC93729B0l4R8AEqK)MAQj� H;�$TXI( A�xzPk!\jL&O&7.ܺzk]'33D=D?k\Z9ݔf ("j uFͭ^o4eAd~SZ~ !駱$&!!c?m;3Apx�@ЊD(ٚRUUSQQ?fb&̏njIRLWhEo�罹c5?̵2ss{@ތO/f~;rFsُ�i<9N zRܫx5:B^$Ⱦ�j9̃mSvN);e씝r{ -vN);e씝SvN);eM[/RS�P]"h4z+*eoS�DRHue@aq5v>~tٹ孑,3SsOz1;eB/7;P% <O;Lw6VO~iaqz~!YܵzXn\.rsl\.#rۙϯ]]8vpK'iWjD%_Q\_}Y|f "ʵx0tOYy# ?yLGR(+ŭ2:,dn#K4Э$\cGSx64ޮcLe<-AjMd +usnɜ[$z"e\43(X?\*Zor@Yk+/B@To&nC4m @t[O!rW*YC�|X; B̑*27bWזhW|ubf!jMN0}Mp ~hJ/VL#Ž7JNrXhЈP&X dSl8*cM}K ĭx(9|&[zl7^b,LK*#BE׼;OA!{&?' >8r{nPssT֧sXt6%E"Xll,'BEd@NX(w!!X{.pf"C:e, !vupwݧ?WB8iCn˾PqnA96ɡ:l-v똿dá!4'zye+ r'%Sq :G)L~6s,Pqֶh.tvz *TEtv`<^L.{ߞ6Q4j|A�06`:W`l4 à`K%BԬM1CH3cŽ; }N p4 aݮ(G2�<0-(-oyc$>1Ds䑠,O�6X} ~q1O3`ޡs`Q/yJS,&bߡ8 Q!B(b !R=|P~'⡝VSSqqt->l!by@`C}>S~=/d!}$(G}BT(R[cL,�H y!P`H$uvX-{)vC osm+{fJ xǀ" a[~}FJH?� b 9QTqcL;t3n Fa;g~tC;'q])`1nLfv/X)~3 UT@{@4H)JRL|cxͫ|&&l�4@lH%L.]\x~iyi3I'I ([[P0pKǥx'I4IRY `0 VIkO)PG_w`/Zͥ c.(?&0YZ{w* sCO %g=ߵ2Yl�X'j)Wm[W/rנּf2k0QhxVʔFqFU!3GN>@!,\~Rk޺[cŸA:\ Z(tm`qy3C8zD V^sL\XS8=F&cu�S΄~ M ɩ|@͇?˅joAN+m֞ŀe�!!V0A )Ymb˿TwBPB Kt݌IY^&yG}>9Q8]V[6h$!!C )B\F9�VTCO۱i@P +99=�r9Pst}`s탾ZW;g,m=sv6~&Hd!H L\pzTV#D/ }d!L!~P$4|Vϛ]@}KV!D:8G}"M1iVqH5mzڰw%l?<:ߏm4o}T_l$'1|DV !Bĭ> 9hUGI}nuvc s "A !Ց`u%@T_UjcW$N B}+ΉI �Ysdr|CC J L09F:G RukHqH6QP!ɨ/2ܽ|Tx;9!xЧ>X[#A9:?ye$܄xVO3 e 9[{O$W;G+hvX7ۚ,tk[;*\$8,B</88�laU煱 �E)Byuڌ %l@0G@@$42M#L^Iyq2$j&?йov;??/Z[1Zuj>SIE�H!*}?:G�DS3[C}?髧K�&?=wK 9^U ?x"W0&\tqJ25@( <c �'!LY% <e`eyqC$6>D=h_iAԈ\&|cDz<\r h\K9ڗon4arW΄X[^%W^{96j!CC5ڑ!MunԌ 8TX9jDu&y#FWQG rJ&]B\X{NN$kr7D-y�+/(Z6T�[b#fr|KҎ:zbwz6-ͤS3L a>A:zapsXhHKBb. ۅ X$u"z*YOr,ߪJ{48JLɂj|t7'$8YԨ pBX7A2ɕ31 7xoz2 -PDKpB22JwiLQ DQR]džFc~o/+ssF]A;nqc`H9ڴ-4!v7 C !MFFe\'@m#WDJGZB&;ZUگL'js:_#?cα68;gk&7F߅@D?"[<\+|Tx!@@s<Mg:(C$ƃx6?gj̑,ϦiGsCZXZec LT$[mJ;w2j�@,AWZg4M4Ndvf.I7$Ou:h~G)jHz@#s*CA,Wlҍp8T:I?# : fy >f) r|}A5'I02^ۇ"" o@#V1>I1V8ZfJ @T{_ /zm3 a/&0aWt "FP,3`VlAn| |7{ I&yn])gw۳X0b%+ I[||ϛaP$*A KܲGO/|6 db]LʋM;9`?-mAn*[w)æ| mnTE^_~ȁMMAX�W0xqr@`Je@HJ3nm/>\IՂ$Xxu؈/Mh`CŶ2' > <l0X{*-yC<p`6<Tty<>>6tp=@w6wDU<ضԉN<04St �],_viZƝ{�s P;A ĝ`dZK}>H|E! b u<@ @Ռ1.'x"SVޘ ܜC^  'Qcj6l`S<)m r! ( qgWs Ӑ�=3j e8g!_ΗRPYSM{ |4K:5)o pt~BG}i3 $[`"!f!fA_FB5G嫧�]S!EH~1TFX >I9 #P 6"'䓏jO;a8<xnj#Nbq%B D `{  "VF�!`E(J/8Ч>HZ8!B}DGEwlpo>Kp4"c, #)a0KY�|G {%B !$_EK~SR"ʏQ pd|B@ ҋ"Drr"t~ H ,AF�SP']db_nv)z^Deh4Yu+#7A\vK-5@]p{ )bND:Lr PP8ȒnwΩ\sns_陥K#nISȳ|e ifYr*MUVhX*`X|RS*ݣ2PN Д#JRPNi/~۳T$a~ O3{s >†<6ԫ syCW ^['Ooig*I,Es whE* (N%50!(4I:4pLkcsN3BZDtDDDtLӈdҬ-r(5wŜKx3&)ņAqZ02'XhnHqIld~Xdla]6Ɂ{$imG|,\Fjª]iLi"hZO&G>vQeǙKբ` NRʼnktY9d3mz &_ \hL0&KN0KkHm7ICEf[`\N~/pv-FZo*wkY7m ";4>qkNxT"76P* Zlx КLڼ̳W.w4m;ð=z&TJlAQEZP1۽p+_6|Kga@BzWm*eWx6P+xu4ft{,mn/ٵ{4|1b^@{@WZj?Bg Z [J3BLaT'7 ggәemT#GbqS` D"BZv^NKq@7,g!2:ZM:?k*>& НG} ]PV&dZpaF"dxA�"ɿGςCgS M9ArS0I&ΐ;&h1I$I(I+3</#</&z;DUĝ �`AM*8X) �` (ף4tzxd*>vhJzpyC~t4ՄIkr fz%'씰cQ^[HofnA Q)Du:bFOtLovv?]ܕYG_X* �օ]qͭ+$߻6.�ؚJnl/oKqQTGkTpK~ 0ZhN9RI(:5Ҵv^�&@H 4 "D!�V`Kg"B6<tSVx_}t+jH*SfkL6p\>08!rY2R83ܬd�D=&οvzYUiߖsE +0z1{BѦ 1Xp'&4whd1 Eucυx߶*XbtHвm7ij!~ O[Bp1s].z)c`B H ɓW^Źm e&UT]n6]V fYy-L#go_}+m258mn@Cr)ܘ( tI‡2{dOHgЄfv$¶V+X,B$fFF7Np:gQtaw}<_՚.}#C%%(i!D"WՕpQUD:jTtF5^w3ar[ |{ǤrZGz^jc%Z#mkQ?ޛT|9u (n2 R"kF'B-<Q-EPs)|nnP 0y9ŋ[%6}E$/KtҭLJ6s tD`mZq7ls!79wsF as=."4XRhpΟ\Y yc  3B[WXEs]-;w. !n#C?h[ӧ>*Y}:MqLke䫁w /1-[5Aj+k>fEDtkM&3=ElL%g\ta`j귊"L|)f{^,˲,ݫ٭ގmrKT�*"[�@ikuLS}5ؿt~qKf[[AF~oߙv{zgYgY)7#"Zz3VmB| Z," (BHeݫٹC?d8Wv[v(<-W):"M Gή?2$@]MLJ�T~wo:v_C M@UTy IBLT) Ak]0*v.B\WL.F_g�Gϫ2QzGx;DQ�\CR162_ݪF!ΝT(zM8T:i2 Zkg޳`^kW6oy#32EZ,O݂ deFY\ĎFh겹|o\+Z609 Y,M@1OSM0ya�bE017(wIX0L]9GyTl=.[+yŹ=zkI"1B! BCL&p3 ɻ6|Kl=>vk !N#YZ !uu_;I`yb쪨%*?pl#9T3|'/{z[GxzW EF6Ʊy@]/! K, D0G]5B<OQ[VVn*C_ZnB\U8;I}@�udj&0GvGo^!CYmR KΩ8ITqDo&/x' *<` *x/y5cVE-2u>�!l*svyYh,^śқPSFn!^MpW!DB,bƶQ8;qVy%� f"H`hX$X!=o$qU @nP!Α]6y!¸jO'K/ پ7!8G)8B /r}< ֟pl VP70h ? % [S':?^ ‚J+PP Jey Cȓ$:o$ʁ-I3 AM }/—ʜK"i[ 8LWy?ѭ-*syp9=gG\*M&]Q_ !eͬ eCP!m tp8,ZkQWn[r**r_T6"@*8}]wnŽ37m\5FS9:J@B(^! @¶S~IK1Tq t u򼷵߸$]ݩvN� � y(/tóE;rP+-!�so~(L�Y Q*(hdl4mm)�fgg$IRk"5"y"9~�TF[h`�S<if Mr /q XmUS_D6Xj^Ve8V},`\<k~ي,$ITu˩Iq1Ȧ,s]0 kA vSV{K0̲=.!LBx_C$H,0H�` e_)Lf/wLC9 )rV;Z ڱyxKl267MjL/c2� B\أM34a$`F}'%B$kG/E":,z8BJ=$QF�!rJl"�7KxkA6DF軤ȸ2>@Q?`"7$ttmeqOoȪp]{`'8qB7$LdW"#` -a!(B .!1rpr| 6!@ 2oQzrϞC}p(;f Y9L�jekyC3wRY*TO$[bNx/'c" ` 5҂Ę u>Pq! BK e$]|!ɵlP LJvRQ E2@:?զ - 9B>@EQMq~{$,rL zSQpA:G>?6*15&{Α#NAw)�{uW![W<8G"9HW%`#A+t>A$Xx${m$?_p1:b %E"AÕ" u>ҿ[-[%Q7`5g^)#A∬DL+ B5BHίLa  0 DAH,F9zB8VxsZfB>\9 T sތM B"I"t?kYeR2Op!dv333n`l2E2'.LO 퀤Tq6l G`~>|GػL^rʕR855 6@DS~y f+vө77[h.|ZsE$(@4W"�|Nx˗ί QG""乖_bƎ*Qi(< [[[Ѹ8!I{Y���IDAT5!qtgJIκSvҍ=,#SlSI" IzI1ͱB-֥5R/y֟=2\]rm NvKm 0\!fvdmS&)ӆrLB5 mBlX!Xvs$O>9i0]_f[ lPۮE@A0)Q) omż!@q,&ԉ7Xdn90y\.ۛ©k dvڑP 3T楠6XL zLX)1nm !cBl*q Jql>LK1X@PuB_ľ'C MB"x~x9ҟ5g>(")aP]P,Ϲ&E 8 !b!#@ *BGH}x#M_BDy:F,7BȓCQ�&xs{?ClF-H,6r Zgr�R8pˡ{!wsB* lW;;B <lDI!#Bb#1 dgYkGCggxW2B( +P+$Hq]H*@ *FHL$GBB O'ɯCP*pcG39B}<gъOw"WP_ (+ qvwb${xc 9�U C+"A&jt*NbO #xOtƨX$h&k VQ_e$QwE yWy!FqĂJ_8H�<p;!T : R :IE)? Dr9z>Ju>7H3H|l`2\%D,& bq4/}kF+I�&"3]<Xgpt;Io@5LAosK6tNZOuHk@�X:k@fv;%}`Tzy%XqD@uSI;zTk3 U}ʹӫkKDT 29K[�.K eրNu]bJZm==! +r311V`a=M[kbW3lGz1]؟vY;Ym줬6/wȉjceޫĘ U]1w t_{_6#$nJAV<" }mu;ˢ2vqм {[6JqtQv0Cdױ c3!<l,L08@ʫPƽ--hz mς]YgXD|$I:WnE}ǚ=:[qeW+zB*}k6𯇉 ]'QCg?I{_�kD5Z[*A!JݜdW>pvv] %2m\y װ:N9aDQ3SZWD.n�U^.Ez`r?>n1ꫴ/UРkҖ_-aEt"-IJnQh'49ݘ!1x''Dre4f`+ `"jB- l-F6>h0<TrB<:PBhmqԡ"`9@*tD(ûzTT&{4ꛔ"OMVp8Zk]< 8sT`sR ? @Q#bIyi nHY6t73?5;a;5;ݹtqk4X[FToFa*Ur �� Rzc/_{^ؽ s^E'pPl 3[gO]2bQ(df(o㢔"\Ja<gY6777vTǜDD]B^0psAF9@䴽Jh/ 46KX=AMqyA+P\v'szqriɶ9E4$3zַG!cW| mAQ'G|ּ9xtSul6kp.֐6̏/lbhXGaE\E'v<U]6tfA҄o -<%rsҊbW"N~en'[C扬+N&?dC.O (9G`.;$V.ggMŽyDog (3qk(C["4|QΗ&W<{ G3@W?޽[Uy[XDFPAfZ%*n.Z(>gR Ǩ�}RaXձ7+vn{C}/ѮD3R^DP!yomFd&HЯɍG͔_99GUcn)_D2XnƥVՎkW -Thfj3b&{"|KJgWT[�L;O(~%M~x<Fbt](�sF.$5&I4,R bep:#L-Μzskkח6ג΁{RBEX ]DR,r iu7]EҸ|/&R*}g1C3Ơ--'_yFcX]ϝ^zikkM)-h̩GeA?ov-eh 5Riq"9FsVB {X8reE) ;[ eq_�4"AuAl=Gj&[Z6_ b12tgr 6}CE_fd)x2I\>6?⟑[8of&H;E5PgqPy}d{ h\yڎ rc `/ȕP$^\PQy&;EY�;8$Ciǃa|-Lv # 2 rwp'dEIx[@HS/1x۔C58{pvY7?_=،TV\<xs=X6Vlgٹtf39r|ౙ$NbF~rgW@;]⚝?f&Em#D;"iWjh!v~�yT^6QkC_9Ճa5!%)*F)"*OКLQ_l-ف�6?;ɡBXY;Z;;ƬɭTqH1˨O @)TI,5c!orXৡjǝE3qG!B*5sJkF +ںH`'?GF"?<:|U|-"ꋘ\ lrr(Bw~Wq*1x9fR۟Q!o@&!`Ss^Ck�b !ֵL0Tv G8%nBJ7B}e) V^u)6ΑS>* PɋjPၜ Ώ#\TG-G=ڧZ;ܽt~st 0vH}^>nO`r9aA~\s^FZS} 4`%#o"rBDg5x$0i:,˲o$ ( ,ߔEj�QҤI{@Y$IQYommFTwjn_r,Y.> 'o\9 2ݏx1͝Sn@gagv!"xsk+g#=tg�./ x瀷QITU<+/Y:$I0Gt4R b/XETT"NvJP|<@i*L\]ޯ|)P k`U=)Ÿx!x6&?B@(SY7ozM7!V&&aTy 7rp}CmX0!} cxEkCmkm498X�!MunԌ ~Nj^n: PG r*dD׀kh &f&x<LFKvsS(Z6T�[bx}cZ*oک6V3 }xgZws'O;*r;*!Rں#$yY!P[mzsd�a!7SZVUo`~q©c>r#ŒO;~+lJgIc#n9NHE8W\|bk'ap"ʙT4>dn;I֖rSL%ZJ!TFZA+c"%{F?kcC1?`޷QN*DiU0;nqc`HPnBC$(RoU$hRUc:$N&FggoGZB B�A|Y{e{n{6W;G{qwh5oӿ &lAwb.v J,t*tCD,BM1vX)7x <@h :(< EHuNJa:'-yWw3S3l›/ZV&B&pNy;sDRl˫7_c힝%~ or7��E /xH0J<Av_"B�T`BDZQ�D�R&i<Δ%I$i$JcktvNNŚ: *|j@f#_"�UW:L˵%*[5OV&ZZ$#�b I<(+P萲[t:9$nt`L(W4O{.^ dBl=l&0\z+dՍRVD+P$*�Uv9RMYyw3l܈@�0F90xi0J�joh@ JZl|&qPM ބխԇ+ZdIqc*O98Pn�OK=|>" 8`#x`Tb[%6aCjnB+ 嫏 d(`wQT}o$:�xf;sʹpxvg`4o 3s?xU41 @ή%B)"8w$]_T&o u<@ @ kKOY7&7'Wykp!q |W!<tVk2ږpOMg!C$,# xCU9GB47d�Bº x3ᜅ|u:_:_HeZNJgnu"#BH:{`:B>I 19H"TFU!;E% !bWQQDRޞZ,t}Nq@!AR Fcm$h23QP$@K}XH|lxd}Qh$N}FR[ts;G!.r2H0ZsV @r Lhͨ9"XetNߐ#4!B}DGEw `x.D~2 #)1d�R8G+�Q$sU|-(1>z(s8| ! D $؅$L"99CHsd:?H$؄ CEA ӪL0gAR'W& $ J 7Y*Ҵ<YNAd-.U=´*%� F$IrM �y�i l<йNnןzӪoz73mt>@C*MVHk)Q֕muϷf,F ˟W!Fs% Rʵ437ΝZ!~?K} {ӈr4C-.c B@s 5Q� FCx~7x+~)*�Ҁd<!ZJoiS^ �ֺ%2YJ% *<Txg>WPdsj,]TD A<Ԁ|cj-]oM(.϶zN鐰 206`֟A@-F*'׭G1`!@E/O1tJ4WZ,ͱ=U&؎ l/U!QW.cV-"}\610;Dz9\bUdi|4~Cn|8{9дd!}3X}B|Ll5yx]_Gf[`ï|&|ǽ3mfWnK'_\Up@_췮t;z510:̠RD \zF%  W ZvRםMf& #:oC7ŧLk|jyׅDU\qE$z]\Ly_ߛL]sk*IG|zT&+/Y: <Dzp!UN@[Ea�|̠T[#$xαɱH0b.B]bM ߊS_=9n 1]v$8H7`uC{%He$qc [ڕQ_K ~m>%P_m$O5O:?-z9r>*ju~{VE!jefcP!c3[ :`U`֑DȤ1y"@4M4Md<y></~$"McSwBRԟPM&ֈ B "R�HsCJpc zӽ}wL^ܷ⩕k7VF<N:ALTi z&_kodL7߿򭚧Fk+~:u48.ps/o VWGб?Tμus$CH%1Pv�i@rXZ/x^8pvvvӝJRRB]�P ݸ hXR2�Iǣa&�T*u:8|L +e$BDr�t?Z~DfVx6l`I;Le4t]PaTU&]]˵n*7i[[a l=23oc`!">17G[&m;5NUjUڞ/b*zVb"ޅ͑ˬ-?1߄V*トl{M*H<쏵V066Eyd?Zu3o~\o"&V8Ea2o^A dӋ.u7= ՍE[f,0Q!Zi-EG(n*L\aN*�_kO?=7<Z[Z4Z}/}w.7LiIвJ `v<0SѢkI#sD`Q$y6MZ<#R_u;鍿N=wu#|mVNZQvZ+yu2fv gnQK^`)YF皫E0'Yan2 O`>O B[_t>qCV�St.]{ TF &H{q,㾉l=>馄 "Ҷ\&nG &Tس�N}gr,1 ث ךH&[PbZ~C4P\gO!\Ti1.'#U:\;A> +4w 3B[W$<½%&| ւ‹GEW|bʴ__vI>{X|fv |Lc'Q DZLp65WPI YsIX %u)Z\3@,=Ysn!s *Qψ)�(IGkFa3x߳\Ҫ⡿fx #P�(�Q ui4`mgd3=xξx3ׇ[dn;ME $ *:۩$I�ߝSx!$ܸiT(M`.X_|;N3+q��Z+3dvu0n�lb-J <W[ӧVN`G450&SD,/QAD:lǣ;]P!n߅}` b$v%1\#آ< L[{CN5ЫΒJH\uB%Gت1 l3\ntqs>ƫI fm/Q=6s'Byq^cI}iv/p"cc M+b!8512(01 ÀjWa9=~;#mO3,~ MRvsB-6,mXs ]iO8V/տ!6/7ږ<˪1=ܩ U&;S* |OϦUx׾˺UZY}_7o~3dWEgdŎޭb#Ey9mفKp3t&RV&۽,\AX :; z`˗@)ķAVqCH Q@KIHѺcfOU\UvSA|PGTɒJ< ľwC;-ZT7B , <7ACH EW!ddm!My PRQf[)E.11rw 7[o/>(-};0 t&vsBܞ6:Qt "x+LhIt>Ц&T Ƕ1-w~wK%5тJ+PP_Hm.(N}C<brao>?@46u>@'+B_ Vα)d52z1Ł,M*;ɣ%1bECTUsvdnbm_y2xG j6L$vPavkrnq���xi�P� PbNc]!(B$D)gz3LwfǴ/n7ַZk~픷5@J�ͭ͵c>{. 02j^'�[[/tԛWWngafvDXCLԸ16>&@TJ%D5eY>dƎd^Blpq̦yBL* lPT`V/9C(K+,5?.\fM,T&H0slc{}v{ H_bZ<И�. 䱕Ol@mSfVNja)8 F7`Z[SmHJlx(BX2m#ɵrp Í P 2A rXbI2B!�^Sum�UMy6G,Qrij;9ep6q+Nr1JŒe�}eGM-Bz$j`?H8!!�8BG'q0CVb!8lZH`Я ٬ b$wXmbL~ D8;[<~| x_#Qkwosv0W—`3aõv-]юd!B&R+2=hQDv%BĞjGOASH3G>Sx?(C@�fW8;scR#r Y<vq&VݥT 'ˉd{8P-p`/ޔ3*"Bz:b>E2/󭳓ΗO;O2 @d>*t~ ^]Hg !EHF#Ya:<l@^niq.\ }!"l¨H1FsHhUK3((q&p>(8.'q`j8G|` &C"cmN}7q=W8G"9HW`#A+t>A$Xx${m$cTƃA^@QJD+E$|`G[*ԍj${[Mm"A∬DL+ B5BT][ Yη;WD Ra$dX$H5Aю9ZV()` !. !pA'+p:G ?$>b-Dtv%seL)t."G 8<L[xݽYн^oJ-ڋkK[Ϥj�M>3%@Rm7,g5D:ISifA6zGx<[8yVLl;e�5) Qi`w^9?ٳv ]N4v!"[pꕫ7ǣۛt{H 5@\b/p(eT$)"[[`8\lltw[AX~)ȔuO'SJsr,se]0JI(mMKlLb<[1uUuWEwbwW&E%f_\uXnõ>H \5 Em{o5ykf5aB'|ث|rfF "#Wy3wiD6}Ȼ%B|y!Pb)a++b^TzJĊ:" FA&J}at .MW f>2tʼKAϒ)"`</I[*sl >6 Ć JBR,Ǩ'$6R ;TGтLpp@O:0E2gow6"ݽ)-R:ן_r"e_P,Y!؄^ԃ%ˢB;B0D2b~@bCJݮOA-3!OLj&Vyr J6Cֶ�v pk}+#@{Zgr�R8pˡ{!wsB* vv? |BrMX3%e :Q:?_SH}:ߧ=. 5 #` B¨*E2!49Iɯ*pcG39 �)HC@El'a;G+/p\ds =jXA}qH!6@*#A!1 ؃h C+"A)PT6 J zI7YA}HM&H|4=h yWy!FqĂJAD[ޝtE\.[(#b@!Ց`ⓄH@#)OAGsYH@8GSG"WP)y{Վ*(9/-apޮ8<`L)f8)y[hIgÀY&+WXRf!B\kMY89] 3ʶ^:5s}ݵ平'_|0 �}I$^g"*&[^_œZA (KtuG-: N+ �!bFCvyk+/pLw{S9@3rPIl@UQ)ނ$<hi)*Z؄Yan"@'�*`‘yBqrm]Dep\76`BQ0$9icsA,XlLf[^дB-jܘl2sirtG'#sɷe #Ze5$079B�r6wڠԁoQ:6帺> hm_s7nhE2J hor�јlZ Ge|78C3Gdax1xKO9`:  /3m�YC+ϦXڑ 6 !�'?7_~幥{pgk{7gI5NG˾'u6ǝ`)-DA CJǒBjbřp~i iuoз5Pq\bWq.T-sMrƆ0(n'wyS7,̺8G)LMN.{ݜm�Yjb_L !y[|-B`l-"u>I%5S1+'@8l?t1gm$h:5D H#8*M."s p4 m@oO}f81AH Ac$>1Ds GZeBI*f4Qȸ�$#�s*BBvJ gSQ<@ sz[SSqqt-ArH/i2b9E-:rw8O"z~�!f= !51 : b=^ Htu|:*"Α?6ʵ2y EP_Dc6j Zؿ&I~?55d0inCbo9"%�Mc  sL0J%:0YiM:]@KWV F,߻3P'q>$">eYeZ - *f9XPRR3s37.~/~gΞl܂VU1++_S/ ~waff6x+#@JTBXjHT`Cs2 Xhe`0ƅ'UJD$QJIJ/Q,<7Ȳd޲Gވ0_DL DL%;@A`&Gh?qI3<S_ v|&O՗[Xʃ%ْXbܬ :OU *%6/FT2!IP5os Z]bB[3IfA �|[C`q!D<%H\4\l�^M{ʙ`x݂ hKܴ&򺽿,rRoi%-ȉqڳ !BC6E1"_ + ɧ2WV;@EBUBlAڵZ`rG}>9ڳʇՋ[_ˋ6-"YV`2GӷAE ߫TBCHSQZ<-s|!x+=m{\dW(@T3r9PsOYW`~uBDűf5U\];g\ECn[^!($�e~}lA|#qv>B Ds^&O`xqWm!!8!u@Iғahs|.PRY(~8`#A-8dPe2NJ*_!b!<Ҋ&dy܅%1<TGa֧[ 0E} : ā$Hq,92fr9tA<۲ ct_9zXh6:?RREMs"A��Î? X[n䑠CG׼a�8Bmaby oS*&C=\E9ή2HZ~˽jǝ#Xx:_pOqdѼ, 1$h�"`ڕ5ӷtRI''~Wkw+T nD_�n7јEA\kgJ!�yuޙ]S^q[[^^e;exF t�$M9@ʹ7W76F#*uh�w$_h�(lmKx7Vӝgn7,1( b1.3;nc[,Z@zDaAڀrxM\__ ;SvN);eEIJ?<ʿgl'4=^~);e씝SvN);ew^ f�HO|<b�vS2h$=8SxB0f&Q*I}5L:iPeYg[#^os;ӝ33ΝեK+x陙NgSN)ob�Pt˥DQR `íg7kw{Nǻrnf7̺y� Wg7^7g纝4@N#T9Z4+=,ؙK ;_SPB"" Z热:4 ml?"[)O8pk"Arɇ1lW[e%dbkJ+sr3` 4g4ٙ|Yv4_ɇMSy>t6bBYM7Ad5X$,Ѻk2<U-٣@yKuy~̯@Hsgx<,cߎcm^=wr#o.%`j|8R! l'XU_eJT7l ئlF5RHO+F} DlزǃǏ`I l@>YF2|d1g ba`q h-B868U!DlFH=[mSbH{qTfS)ܖ]ﮩߺ[ţ>U-Gi-wI%zXOQ*O! 5R1.{ekFBquyw^KqsT&$3|nEŝc)mr?[EDΎQ:K ly+XOH1=+60xO:"m|�0KdsD59줝1DH0`XP. &+"O~qExT捧`|XTga8`rPx t>kMx`@+L/`").l8\FaF6D2a�8{p$LtXi2t:8O${?+/%|Dɓr 1hBZAbTPF#FȶG$¨H:˧`lXqTP^ ؁s$NLP,A�[c9fG�(b &t s1s~ O_kLqx`c#xPHqx}$8rɘcA TB!_r_7 Bʆ 1ŌJsh$^@�4!ĎA٘I1HhB9 } .2]@ 't^2M*, \i"H`l/LrΘQdF7WCeìzntܰ9g5s)ukM,DHRIRELh5ңdwO g.dz4Άl;źnыc L@HI+ʑt SJiTyLTo/eW/n~o\\YȳGbȼef k/S�4nm勃=՗/^~$r=N:QkH)N-4 SԤ`0eYyVB+p"@)t}t)NP̀ryq9bǍ_@U{U'Z9U紭<2a+`Bd$LQY~@&3 V :hU#Ky+6J2^Căc )h%bZ,_Iiy2*Ԓ)f.<9 d0Ɓ\{ f,>ݍJ9D` _z{>qA8*wܫ WD+'8զ6A;}Cv20$f^N!r?IEW $*Ll`S3ax{ De̗v.YϯG T.'5woPE<'i69sN]^h&9U?NrA!{p]=DaK3@X横d1@ Cdn�2G@wE|D@1Wvr2x |5ckKH 9Uq(r(0H9r!^`}B�8;7uvUQ8;@3*i2t5�6e%|eӍR":F+u/u>c TP !׋HҎ6/*bTFU!AL Єمu�޽ Zes# \H0HTVKdO>uA$>6<h,UD|_Mzb)![ts;G!.r"$_7j&cHkZ pAH< F|�QP~kHtTd | Ǔ`HУ>&KG $].sdQ%@zx*XϩǾ.b/kRrkG$*@~{mG gK"99CHsd:?H$؄ CE~y}?aC0G 7SPPl>`ٷ4Nd[ X&Hz*k:ϳb\(T<3}ps@9~y3++Kk`I~-AH=HvT1ѝ)OQӊ/)T]H.:9! *DvӝNgM F֖VV=ٓ^8`PCEUNGԖku |�Nҍ77Ky>-&9vrfI椳,5tݲzro eR$\\kPIqN"�(FCiꨴhmt?�'=Vu_ ^U^\<%yjY`Wyb6&$f &IX0L6]Wݼ�5"Vv!DNݲO9C&5\GOYB|RG� wmuoBqM!*<zyfK GLgVӣ!]7k^3۝j0}ZC!ۊjGbrj<='{Kx!&Tk?c`ؕ<PˑO<0_Sgu5kGE{]B<`(]U�BEd*oIPQmFkU6lBH`r8C6D&L[!f9ѣ0H|7ǩ̭U;섿n-]LV$fnZ3gWccq'vIꓯqmpw�W;d#B#qίLT{W1TˡJb8B8EM&B|MU0RJj;s)}ۑ`-eDiO}!$n'|&9EDQë uCτ Isӑ ĩJTpx@>cenZjz l=1BF5xd+zlji8*nHO9[*@͆K=PVp6P!@Rݟ*Y`d%ch44!5l9>c9G^$z�h4ń+؛e"@D9P3) �TsuDMڜHiZs4eÑgcETқ=Թ>.yq6$RRTJ!*E4* ID@V  @\8X"-^y(F;vT $Yc`ku9V{ȵ1*@4@^Ӵ^7׻6o<^iwٹ$7 ""5R*)FE"*Tf ¤X !g]*Z}Uih�J̴/& 1%3gg|yUgŤ725$ f9@J)@+ŢSGn4m`^<Wd�$vzL/ml+GUN3"TDLhܥ6 pM`YnWlU5b]�p2Kv(x>ELM\9xG~ww~WM֖Gkե[پrYf2q6S(nc}_^'yEuf9`e}s]ڥskʼnpb!9!)pv33w.o\-_A.Q[6-|c}t4Л+?.\[1[ e&g={s مl:Vǫ7FO7,; gR�jd:* T,?iaad @ 6/!`ߑBgf>K{Sp+\6ֲCn7 X \u1NŽyQs@E0D`oBgz.Z]< `vj;N/z<tqOwv>Mg:Zzme7 ZBCY?'Ne!q8t]O욚N]& .'s]]̕k�!7nfgzk+hY8;x)uAq$v9ߠ8BtMϦ3i`#Ȯ]lfq%n L{{_j&MӉJpomd|hc-W ! ҟVs3I&Iq}e2^[mr9 M/LDۯg r+T!A}Lv3‰#"Y TtvPH*:SLq9U$Q ;?LMiG `3l[Q.z`pdXg|s&�CJ<�ɍ=~V3 یLlC!l|0=x=I�G"o BD$FZrO/k %U!@9GLO` Q>_ #`!PL`][:GW 1P+�8ɡ0=`3@9z"9aTs4="A@ `3&l3O L*aHC6>rCwfHqBRWP\ !b_-y CZ狡 S124|nע1H#A6iZ=`Y@Z5A f9U\9G&)rB>L8`svwLq]^V;@@B(,'ߵ{|LmoH�Ȭ2wyD~b~ΛY!h$LJghv.NMcg:W׮tw.QHH~: "<'PLWg,;� v6ygR/l>;ޮvF4RSk׶++x}ݩJYQiwդ jA5c8_UW e5S" pi^}uW9̦ToҔdNC * V6ᴝR3P{bz m=)au,!j3ڀL8 TUPeIm)w?}}я֖?Ǟ㻎9,ӧ^Y{/|y}2#X}Oo\Z[jnW*'j~}7ec/_+' ~w> eyFl[_tIх5lTDeWg\_~u#:>G®n)\:KwzU}=xΙ~㥕]~ٕl,c{4hovp £9S_[߹/_\o ҟI}dgnjd63|yVod9v́cSяWƯ<bwO]{{]:ڳ߼zc|;kwySU^[{gZ,s.vr~CQxbqj:Ǟ{dv!ᅚ~<mSw7_^[+_vzϮcw.쎏W\K˷~t,]L+U)ӖϟZ?ocSG=slִ͔6pj㕟._4L9t XNy|ii|ܗn._?x^!|Uw^}E>[WI>LϥGNcSllmfn\8yxtp׾3ec5pj1=$,�y+¯,;4U;OM>1͗VoSvN);e씝S~R[,+怳,(ۥ|Glf7PvHyF4tT/9ؙO͜~3˫^*E�5dZs@$[Ʉf~_6[4օn5W=*Hzpcҹƥ7֏_]'OSt.2x�Ś �Mv֋ S}㷠\T[r kze냗v…8O&<->-PjydLxHx^A+hq=G>Ѻ?o.WNϥ}@d 硅{ZzKza<�iqL߻W^{nuk-n`Wu?U}~ΡȉOond?uO?{梗%)>u捵oեWFPa =ŏ}ӍCsWn gycʰj@>zlW݅:6ޏ/ WFޭN?oy5tU+}Ͻfc=ҟ?c88}0~nاVgwUU?<|7e|O>dc N_}UI|^u#>o_\nf'#5,嫿+vyzGGO*ӧ?UIJރS=]\n&+#U /~WLxp8:}?~wtV!v`-@5�`u$)nrs +WǭzYbTUҹ͟|F]�jϷdGޙW׊  =L4ֆ g|t}^DU7:v={^|3߼6뚫5,wZ==ܳrco^)&8枪6[o$G{j\>JBG??[yіnO }:sê[˳-_b[svy8V݋m[_Yo1rw Z$sEW'w6V�/!_`gcoss=o g6.οi;zW|ʕ!B~k%m<}G͗Vc5i0|19&t~]@s^l*pu1ڦ&# ɦ?7*k ' Ω ]RPȷ#Z'nSi3w@WYc/{1~v[E4~s-A^gIH:Wp 3Bͻ<bCp&1)rbCm<4!W`#m MbLt檨JBjgwҤ*M+6;6uqA6Lל8xϭ bjJ1<,+v <[Yq>̇:^o3;[` _>sk7R=y *LP* B% hD"rjy@YUr/\)mJTwGI67kkW]8zƵ߽xtnBP� Q)� 8*|Q $ eeŋ hMZGk43�@ /=3Ls1E|SC$|UTA~AJpbND}gejl#x'`sӿv?=7TqaS|mvLwrvhA <sYSW=wwrsw޿OV )w{ydW>wjk}Y׮ =Ҥs~ʟn/~ף?c`qJ^HS=Cn}Ww]O<?:{ʨ7\`@O}@6WUOڡمsX'p.&?TG?ß:4;<?~Η.o;AВ={oBw7?8>=ӖXT=}</7o\ߎ__A}-+}?t xx�?돾oվ==!6o*v|/Z`;OfnС?>PG߸З084̧ssd_WeH5[G-B�-R$MvW}xß>ܞ�~Oܸ<Vc�:G!ęѝJ+{dW\f,}sǮo;sꅁ!&b1B}xoJ#,˙g W',$Nk#>\?U}O.]r9)YEH M?�!7Utl{C^Ⱦq&"DJec\o~.)IGwW[z|Kzʳ&F r4mREܼKV&dz~>K_Q*|Kb5F}rt\WAd_m$}#@\.G yT5.ή !\Co]DO>6|#J}WQkQ > #gG?g¼pښLsk*IU�|곯1H!6@J~HqG?iE.`=j !N9o!-B*|o*TfgP_{+O9W6R|G<n f20.% DF!!e!`!mf=2M D/@qCT : " z\ a}G`B�CUiX)];&3O)(D-a'WoR<7I$I)֨VM#)|`k<ݛu{4;&w;wǵ;ֶևugNjc`S5,!"0G�S~I Q Wndoڻ'޳koo> x@$񚑃:GẉJ%Z֐$hkAΎ^xs?9+Gn'N͠±ΨݜN\l}E�XK5E'%Zn`Fy1.1Z ~5-s?G_ Ndmdi޲CJh%5ecp.G 2 $Qwxf] !̧br?G_[;rWȁ}w]#r??zt#p.ϒ;P_[};, r "¯Oۘej&oS DQa7 : a?͔G|w_[wuο}Fef,,.q#]?߿s{82讏&Xuh> rArv]}Pl}]~bSSqcQ!k |]5cꥭS/շt׹c1 C5B/Й8ȹH0KKj C ͷ)́_m|wM[LxI1.t>ۘeߡ; LaBUc#ۛ%I7pLQw ۷.h3>?9{›!bC8urP„nBiEBcqe{*:Z]N.J36폘A{oogזNW={~Jy&\D*<e4$OVkk:<=nv6vrq":_ D>6_,#6k=M AaRQ%"A�Fh!jX$Xͦ:4t�U!y#`8B/?ɲ>6 K1&KIs[+(= |G(roM}R!;p>:G]MĜ#X ,&9B wIHJRsP9E=X ؁CHU/x ʜ6\rten$:0}$(!֢{CxHD2 `NtP`:|_ȉu1<lpFG# R V>4)Lf"6 L)[dG6UE yCHȷSADTnwvvvffw:iD<6vQ|4l[v£<ww1^^ \AG:%?�@$B4`&(7  h� 빝r|0&33 {f0ֹtfڋK?қn.]!@DYy\ P.Br_ h"-O]tZ^!5l<)*\ 5?ps,3] pVbJm ^ߗu{׾\ەu5!QO>x$Q`b?SJCU*`O{tl)q5t9~ʦyt].oy" m>ev{iK[u{N?_.Lzre `]Omk]O}jw WnF5?9Ssay}{>u6OG,F6a\r}|yAQfĮe_`<Ա߿`O|?ڌ ~jUG X/ycf!n/y(unJ"8a>#rok{o]dM \26-*lmA<`ڽdgWMM|?>n_c3 X[#d޶ݖ>;|bojDžocmS=(y")h]6'gWn %+PsT Vꫳi#Iw�~|gUqV$,79O.~3\%}CwNnmηv�c{l{܏S-:e7o{Q`7!BC q0B iVu ue0[,| BP"8pY'8b|a bkoȻJT8* tIs89C!Bsf߽ۚ1هs4|n!!1xꟍF0}SPܿW! i3iE#k7sb; g!>tA|זU&H`WPG xhG Bhwvb b:ءΏ�[`AcX)RP0~ sX;lZ*Wsl7&"{yf<! +t-̨LE۵_s#jȃF BgNLnIJDr Cs&Α- t~97̀&^1X0AI#xHd#4 :xbko$^oJ1\4E-dNINhckkc0LxG>{xhcӽ9=`3sк ,A�|\SLN(H�:cM9 ):n?Υ8 6SgwΞ\_:l.GĬpb߈|7R`c#;n^OΟ|cimE~WڙH֚HCq@Ny0W &+b|)eX��[z[x-O;[z;I??A2=:v?%w7uH~߹pO}}mw!¿śݖpUܾu>sH'*w3=uݽ<~'u}jw8L<PsÍ+7^XmuTzVW]z䣟=<iؼ?szvgx>{da{_?ro ol+w=8O]]}O-D|}ֵu#qdp);e씝SvN);eT^!$QiT! zc[Y2#8?~ީ+KkkQgY{13M@&�`�n`Pn_z^&Z`88IU;5ݟa썗o'7s?|hsM#\%TN%IOab0'v2UsJ"…̷k/_^Y fvD841kXw/]Q =n5_apR ,sRMp6uXN)|$w* e??[v5=eAme-Wl1ؑelyb.캩#.cc~_-={ip'Wc{ԑ=b7Ρ9"Q{Gp~zͿ{ihn9"-Zٵh/;I(tf!xbMq񲸧pGwr$~Wz's'b?8)ICOVfY`'Dzytn!{[yrgT8~fnFf-A.yU0kx|aE+GOqkd%W~hwԯ\bY76/P;ҥul's"JΊpY1\slbqF 9'mb)z g@Bϊ C"xwSgT?v PuvN-vn7@ kwjq &4S>0@ltsvâQOUoc NUmk[o[yd$ !F6n΋mr &{ޞUn4;meDz-C!CPCmd" Pt&�uHf܉W׊�AܳHW&u yefռ�{^W(sQp6_&\A%qCɂ<c~kM�#Zs e1P ȉjbkd,é/H:?�9M$X0CP盄>B<'AGH>BHXR!6LwQbEtiҸs ҤB T.$i[;/ك3U*\$<p̿ hϱ"YbY3qSSdhD� 3&s_^^$znb8MS޺aHDGl8c $N7|k9\Es}w=q S(_뭜isI&4Rq(tʼnJ#D)j' wϳ"$t'aF|cLkZcwؙtwna>_ѯ/տ~߼ a:C U"b<�Ҍ54Eh`ay% 73Wƣn؟"YDb[;+0,p Nb3ƿ�|ntp~%AVU_]QOpO;&P~ړ%6 eMx?TQ@z FH:w{&VGy`啵GHf9 9@ľվ2yFk+mXaM' {b׳h\83)7X=~6.A QGves=[>ԍ6֚. 2;Xl G'zF6j�g3ڍ앟.ɏ0=awҞڹS{yT)xos5K_}vM_^H:Y{{ң/`nB7'_?ك><Fx8hڅ.ȽIń<��Mʃrmdc2j9N;]>*$B_K?=ys#kdc'ثK`Csk~>0tm?>sg\IE'2JS c`I!�. qDnD\6x�=脜6Mwﵜo0st, NJe�pI `ǻF:K !*":T�K}T)Hnߟ.b׃ݱ\2TD!3rY!$同cή-M]((BdkT"$٧k4l?l&.'65Ÿq3_nUYl>e)%AA/; @Y`{΅O85!X!KBᵆ:EǞJgwb&cHkql~x2y4(2V?djM!HbQD!I0N8o>kC}MlAH#]�åp,W�>h:?@z? T�{j\Vg#B9z=^ lI$<B#1lH2\x Xaٱ{O$y"oxDt:n@�9A!I2My6K#Ӂ<xcG^g-zEhZ!-�5H )H�wKV`<ʲ<' T$::ttRt{tok|̷7/=qJ6dJj. @~Rq!c"3goΞ^}3ҴG"T;H+vvbi{/¬^iU׳ܰ,4mo w 5הV\τx[x_|ų[On}s<z{fCI~6Mn|U$&k`7݌5\3/v82Tr #>8|gӡorӛOn\Zqq_3O~x;` .ժ9Nn\>uV6&pϡ;? >|.7O ^XxfɭgtFu;݋p"T~jV-v/^x{ˣa~c ؾ#T.]|닗~%r=2gzͫ:Kw>c[sJSw?^hL@VgOSKc3ʟg6/.�1Q`o?}~GuRk :f7N~+W/\غrn2V g҃Ǧ;<uGo#yob_cU\d׷pys-a)vT>&{vݸ2%7ǟ+.u]5L`F0#gW&j{nj$ED[n_lw_Sr;(DK˗n]8qy8JbgϡO{`w3ןJ[h68|bi~7_~vqv1ݽ{v׻~~F|t:W?tfaF7n\\<zak(M|z]-S83  ^AOz+gG(@P=5oI7WS}rmڡHO~dc=_\u`hƈw];xlޭ͟l73l6 0?Nin]_{&KꓯDVFyml3,BØq>�&^퐍[#_?A$5o4u+�͚*!Ղ!1GEsԘu&K"Ajr�SOjPU PAɔV99rG5&W{ -DnM, 3 EɨЉ 7O}TF-Lvz%E#Hg8'8rH1S�8ḋ"A+r⨸e"!(fx<˞sm@ rB�m:;OAI&񶾿noJRygY9ib뢬7WfP HP&B\gzAwNvuzB7EgN^Dwt)`T}Ir"].mDth#tߙqM/n!1"`qZRVh DTI(:U*WʵKKW6wu;ppa4tt I<U-O󮴎W�4@ ]Ϟ~`cfqnW;ׄ4jBBDkMw0�"btNPdwy\P-8Na\Tzck{w[5ɵd'GpmlL^<�;-{zf]’>ío"s4?=h^i*^[ɵ̥oW?rotEt#\|co:k?Y઎�ƕ+gq3; \27oz5]=?z~+cr?=ػ|v�69"~Ӵaų;t[ ~7^XcN?81z/raYyίOuK?^y޷[_K]f[U0W.+Wu&eneײol+W?ك5S8OyW6IJM2D ɧ[6X\dHkzapK;~0v:]Y6*8W އ7kKcnִ@OvkO{g,t^XoK!|al:xTc{z좷'mh٪;.^yvMVBi�ڸ2Km^K.&_|���IDAT)y_�n uHG9 >ҿ8wܖְ4^Yyu}_C*^ߐ ovcO5޸:W._xsJbt-O~SzpJ{㻟  S'`o$@x7~cw<뇦g.yk-qިQ{^W/n}OώGĝ "r"&2jc= xߏ~`cI_,lsKsT'ɬs@8.Rkˣgs\A>k]�Ryܻ߻ׯ\8=>=?瞬 qo7I}g^_~yP։wWrc7z/vL0A.mqΈ^N}g 8Bm\=sB9F kԊ3xpI=Hۡe"瓢brȏ9YV'n2&a4")b[OS5#&G:0 #AC/"db2 Q:GW A% mWB߉!aQduWτ 䜝5! r`3J ,> P)PPl^  %݁>jM}<T\R;3d$XK}Q{A&]Xhc e s9TjBB=9:6cxk)\7s�Qע1H#AI}:GZqO0D ;* |ps;Gs9G&9o=E|bG;sgo. A{I$A*J�0GQ1<Z!l `.bA%*%(єeIh<wTwn`:0`W]2&㼓cNHJ�5$y>*QZkM�}{ x"Rؐ)RámI�*lLa?hDhs|3ӳj߾#y8 gԌR*ǻjf�Cb@\tZ#@Bxdî4הiB�"�*ƨ΋ `J&لSnaQtFZR6, ?=i)E9|tӛ;|𧻓<~x^oWo*/>{OSEg__}[>7(*__3k [cIt@}p-zqXb5?֕ O}mUk*'P]WGyKъXݖ<?g'Ow\[< �5C=wꕍo[Xo ;5ج<cys-??>0X9?t$pC:Xs~/5_gG?sfӟ:SU~+Wj {vWú~{a?o'?guYom\t?߆e<_3/ .3__[<un=�?=5NmV>;9bNMM^|v%jIpxcuб6&)>_m|nxY˄זkB<b`_=%㨟<0PҹoHׯК^}n魏}\g9q?Y^qSek#�kx]Vi);e씝SvN);eli$z8t|1k^yLd) u@R@i ȕ""JvdNz;{Ջܸtfius ftPC D%iBDJp',T1\}�ADCG</^>kWv; Mݧf(�,V&U Y@ ~_.A (*$$mfw/_QYYɋؖ;d9n?ڮz8s=؅`]v9]gͿggY ihKw ᵫi$5cJ!ؼu#b6:ڟ'_ +5[�KvQ0�G/S_6r!ڸgsf(DbLEYӱ$L'tNdױfkhz:0ݽ25p�tf/7+WDpCsNzim`4Q2|+w={e`P9bz{M`S�ƬADgewwFѧw՟UW|g_1Neo^ձܝy yL]4x㥕#O;{\oNW=E; �pn1e#o^Fe Ubʳ ?uz.' L&FqbZgor8`�]|m�"{u/0wˡoZ)ͷ[nvO'/˳<"dk=?9s@؎Z8h3g# vCqv\n`wr[ Q@a+&qƶxOrȺ+J9bVήM]:Yqﵾ<yvcm\uCDx }Ɖ=WqM B V:O}i恝l'`6 J`O绍q R$l#w W#cV5C B;#w8 us ަm!D4CB>@W6B}CLc<gdg׮|瓠>]sOf'O~$h#ΑuV%l.~h sqV{I8G55t&$qwI|C@vp2Xb@n&`η"mST>qJBm1\;x/WH$8$L继ýյ&>ǝm2c4P`& CsmNW#޼?օvFH'_Ơ‹!2DHUUtq5I p /u%49'$ 9 T&;eVx�=X[r-ov-N$Itv\/yηrMD"03VE"$HH<͵*v3hރO|>v]3A' )ƈr5(TN,!!H:D]QChtƱV%%9SPJ^p!MKxeg/~'嗾`O_D0 3>A)zLd7Ք7p�]f=;;_, 31aF0Fh�$)~~YE"S V2n�TAiy!UڙZ{? ,_V ,0K5[FE^ܪ}?$Xx2Roʐ55'#"D<DDmB|*i@O6$}P]˿R6`CLT;u_*8YN<�‹?\^^Ml:T0$COS>7B90|cMeA'lj *k6ry߳?p_m5|V~fWxTP"'hM<,8^Ssp'`3ޏ~ŕW%Ecg?qzmJݲ>7Is,C.Q>5>:`=٨Km9깹8B�l:ǰlaGu2y _ מ_^-Ra@�l]YuمA� Db�_]XUTW,]> $g^zmG, ZwWVMr!P{l馓ϝ\ʿ:w'.Yf}cKy4c~֥C9hq_7X#`KԦ#n ryN?\몧'@?5 un{.)1 m\*C˰tN2s`{լ*:?|`^De-�x:ȇU / !)֚NP_7eҌwDO>6jM,{}-*PPxXR$ȽH9]¶D۟�cg_cnBld9c5P5+ w0vWWGT @�)ǻ:U4]#6("'A.O>CVR_s4\M}^BIh? B  Ă)iOp�!l$6X1@Hu$ DKhM JA0-p9a±~&1y EPg l�ء wWsN/$I-x[� H� �j CHUQDu`4om,o Gw|מw=~C{Ops1\90$U*M0QErbSv;(H%i(%Hi011јtlj[HY67_ys?oߞ޷N~ŗ^曫/nkk -y4TI t_SC,mQ wJ_\K;J1QNCs�@m7)IJ/`*F. #_Z\o.k{F ՂNH�?.bI5hjnwǺdրl"W61?[V77?2@<ʰ n"lXm[-]-Hڟ]7ͳ:L 44̥. koҹd (vٚjM/Ή< p}/6h[mV_R9g=E(C<([g 66I,)Lf7N|}|򕕪9>C~~e m,77s9z r"Z[ʮ^bMpB5Gqюaأ`$"ڟ9$3i"U֏zu껳 gfS`–ݽΛo?>DM6CEs:ss쵼ޅ X:c(ӳE�xa~0y^-lidnd߱:pzՕmw-l|d*K;:V]6<wr> |$K?@D/=\sP;l奄@8V/JXW!vO8GDϟZsB"!$,L}Wl׾LfsV'<U,FNXS1xI.v ȍyrTV!od*r򗞹Q^MLwD{}ٺ'#{^+մ6O~;Mk;�B-ao!R;| ]_t~GgT&m[ pLao P\=tnDU^k;0M_(K%BVHtjEpe Ηh4!7EV �!y#`8B/?G}=9_wOgUz]TDԈS2W xG̳e$"WQ3"o}ſ¨m#ڮ%s!䅛v(H02H0..@#T:G;tIl`)9p]E}n PloYC}D8JęR>B D+pX;'F$&c$h w.8BH9BsGB#P炤ofAe(sF} !8*|hWb<$Xl Ɏl$*@򆐐R<OMM^tfbXr+&9"/fsLA$i'I(Lh<o76WַF+:OSȑG`+[0_`H*/~F i1)Xў $ŶX\]�Q"TR tT?355;;5=+5S%kK?y3?<wN~;g~?}/nS/ WlTiaA}\gj_" L[gvMaNMc8V. $(*#9 @CրR1׼{{c$sDzB-o]Ʀ lk/L,4K?Zyŕ{g~Ø `7)V{y&q FTշ� @�$6$E$ER2XUֳG33g[Μygh$S$HYw ޾RU1TefD.Uu$�<}>|_}ed2Q=#u7ަ^m>z%g}?Jt3wraXuZ +~̮]Zp# P5@+òS3m;7U'ys=89"�/>t+o}Z{�@l_9rC_óoq]W`R�Zۂ5ϞXprC1( U z7_w{ow2۠ sK, ӻx̡MNdW";+/_\^jADAs:\;Bs|{wxG1ܣ h 5~K*zb˚fcwMO?صhwg-z);3j~O}k.K`"|oo9uc~#3" cV+k_OBV`$+@S#<u|̏Fc|+@O4'\;TU'� bDf!�Dg'^ZU}wUI' Bll!YF_ó=5Ro~}lfikrrDvP>bP�([U4@ǘt*n 4vdfQI`iv%, { Y`T^p=˟(PSa Ε T1RH7l=53&33vfgIUwE vtBBmn r=:ja\~V@G]l +{R~0Ow�$)'tCQ{INZ/މn8p�>FBw=qbTL7b6p(<I):A(A΍E/W*xl3 *g^7 u.M �߰(u#q`"B -̟2e8@ GG !-`1Z0ի1P J70kvYB zTmeV! M9b9{b$ƜX>R' !ON=y>x@b0Se"댣 +ZPDkYZ-}"-)Bfmq4|q�P ,լp[~5.6E`6* hx4ռ-؊v{8toF8PJ;!bZ(R#NcӽmS3r+K$괣n;N E�D#[!@yOߖO0 Li ! !2)JxWp-Ǎ|zltKsncѾS7v{Z��Q3ycUՑՆٝD_\! H3&eν+0;"|)U/4 YLY_P޴pqOR_ԘU"OK R&t>wou+8jޑ\+u5+_n=88 E)'˄O(U?0N"**%Oδ}"()M+]9A_I�_r\<xe0!Lӱ\ϟ</*ácU _բ0fՅK޸9ZuV.` c#ʱY?ub%'j�o &YWǾ<H,N!p^x}? M>آiOl~mQ?Du v;+jG'\8`Cq| xo-lR}�T?ાw)<5AOGIp4w49g(T|p{|@9PU{)Z>ڽo,4SNXgzy9p]F#JFbb)0?o>/q^̱ PVG᠖g7"8T=ARN*Iw8^U|q\1}G? +//fwv;xhZ+ R1qIXm+DMW )=Ų:0︂'hdlǮ! U:A|r,W~�%:9 loV]B/b/ & ʃxwt j׵͘/}RiNPmXw\|ѹsHd!:Sh/Y1v!yצ^(jj=|Ƕ*T5"7f!4*BqUUa0 G_Ʉ怹 `<"5q oNFP"sn|β߾Eч0P!f97gC(E8˲y�|o5s5tP Ԟn<FQ 2!e36pԶ;O^tny}ymD#L;1cIF"L GWVnDD�0@_4-Tn,GBDS �@iQw:(<Í`#[YcA0l٩nloP�DI " PRF09޾71^X^!b"D*P~5o;em5$B$PbNX< "VQ*2D#mʯAQ0k| T_@LR.oX�8FL-Ym: u ~geadnݞ,y}54a Cn8O?@Th6DL�w{vv rɞdf_sx)@Y$� Kk;_:\Ckֻg^zf;?wIznm&kZ]n<8V:!T5ع2k-OF8C?J4qW`s6*j8Kl<K m;x`/_ %|U�{*c綻߷Kx 'c!~t7DE5WңyFϬ L==wbC@�BϢJZTX=e+qO[[8V."̎ .ӕ_O汭*t5Y+yG݊�8jK,| )RTͣ񖾳-u^]6M�HoOpǞ*C9hi<Yu.p ;jh4& |UxZy/뚩[Hhy/_,r',.^(͐7R7+k׃-Tx�]}X7aHf5�P IYW& 29|d%1WE24vh֣6zbtznE\i8@tuh&J5 #TJ sΤЯT}"[<,k{'e*0G{`O^B6*KiP/g S}Do2skODԋ8?Ӕ. >y<߹ q0ΐ+iD a7gEΐ4NzݠkYoQ dL{|Pͬ1[ @عS'$V`b LؙbхR`>Y(5AvDטF5يN�iN(p*oSfRNE!i5`Fvw{|lln85սxvmi"DR4[ 'LUz7+52Z2�rQ$b</{E�9aDdyei6Jt#Aob�P@-H$,#d4=Il 'q)WYcYd}Z&[+E,>*#$Uxz.-&竌d0,�]*U K} Z"3"E/M( *2VR s04H e,lW|zF -3qXIrޭ^ѫjI Y$$v'n@9wϦV<\NteXѡ2Lf羽p6P ֻfCz]nmO靕,tj*@̫yEXLbCq|j+TO8,>6_)yu(s`*7 AftPz{wn2Ȟ~Jc/~]XZ_N;3v03@c䫫vd1i!|.=n)жcuܨ>p ȳWѰj-u �:lY?WZ$�(Wl s@!5:.lMwxd:ᡲ2vJjEq9{t$HV ȭhfb7$_y0),S\R0d K U<w}aةZ5iB<j3B+mZ Yկ.*<<*X%_z^r|M8Sku`OJPB(o\N !aSMl.rUj\\Ic#D@!܌>OdhRx'(*d: h l/0j<A"3Qi9Ϋ�6Ȧlh`[:wY^lP* Baq¹�c۩LD�yVR D1\o*/TxT/aP N|T_Ͼ8ɞg tx>GAnT3c`ÑrP_*/2 c݌W!؅Jqd<߇ 'Չ? `CI*x eF% <>vmjvGv$Ik}0AF8h󗈄!@N@9@�!bDyDY,ZDQZ:ֱ=ݍGny;u-FQ0Fp4Ͳkr{='L)R4"L SŒ0',G1AL"H4-BGh81ˁ�!($""$ix;LvS oG+JA�En~#06ӳtR�@PT o_C/UvhYf8+X2d}=oCop˳UTGtؔS_?Xr3̯,z~zmtXPAgWMVg0Q`[2*=[NQZ�`0j69Stf#uE{5G"kdrG)֝o0J?\>R8"X:�prUOD4r_"s?7uNJBĤ'vn{}X̫*_E"cfxHj0(T <�l6G!TЊ<']/dQ}%Bp9<":^�X9x+zxvZ;f,V;m:rñLJ�V3I Gg՗kڨ2/,W ㍷NG8!*m&Ƕ0L@\D`b 50e36"Ctt@*Ag�1V< hvT$G�{5.t13_K!f%h=]ԫ=&^l%<#g ҂TÁ\Π<+Z!HRSjyqHۆ B!KM<� 銰&A'loVq\ 7UvB8s5-ɃPTFY:1naN׊#9˂oXrش B9'o5 !D;8cDF.B<B3~!aOc?HMW"TP vd 5'M<Ai%BXj-rQݖOwG: T1Jh 4> CPaq:D` p�J0;T,N"DV "V}VLqm-UXGAQjgD`O osէ|["(TW &{ "T:O]r| Pk@U8]J!@=)BDDr(-IG"km0 }!RhGzcA"-7< ط. 1Mɼ`1B,oVhlZNj%IEuH�7oX&"<ȣ(J$IJV F[qvp__[_!sǻ:tow6ti=[H SL HQd*';_�[XBoJ@" #(<AScD FQ%Ii%vkݙu0˲8KK<'ʉ!IbYgN/4 mǣNEQDH-X}Qny$t~NE˯ "Y4& A7ALfPo9|N<̏.o]>gQH;dIϟ;L1vzc3uż5Mb&=ÇW>ӆ|xnmjC^t�N;;q"V&?Kgo Cӕs}^g7]\-? wځ_2H57*@Ɂ�%/2ŤO'0+3$<yj9BmR\:R g"ZdH,dLB�zdpɗ. 2wg[a|go̅mè>w8Ȟ<?B T-Bsk2_r 0cwpy1mv HG=KTm@5cUk൜�z 2@��^$D˱n [_*RxG{cw85" !R#d'wH:TqCat,ϲjM_,NKW؆Bؙ>+ 7 Ǩ7G Λp3&Re0HteW<f@`śm"՗喂uKtN  zIͻ[<4r,9,wDB&  W<]!SғG@G*al؞ o0@RdUR}GIh|&+0VXCl <+O eQG$Gy:#$` W!y>`3>nT`k`qdgy|yC'<Aπ\;|l2<_v[ O%5=ѯfÄ3B\H2`GFU'õ`GDr9|A1^/U-`GƑdav29F##ז"D6!z5Ȍ1lgʭ HA6nȞ <66666ZV1E+.+xl4WM_ HqD(oE %ŁE!!)E @l8tCގYfyFE "FtuuyeB{nIއ>q{>vӍwOkty#ZJA܁V+�)<%!JVD@)(#K B?"̭�yN9!kĚiE׈vj/nuiX6 _!B|(b#eQ!DyEP"!OtDYyQ &X!vәg� 8‹ϵ R `VT;Lv"ai !K1B@ #𭜺F *Rqv#Rt,ʽ?UV@83&&ğe2\V1 6ξ<w&z@дDەKmzQegL:[Xh*uRjvO^FTi+&d&E"6> hʼx Lmʣ$Lsw%ׯꦞ@`tlfԽ$;g+#.ukv@BeذR٫{WGиMok>#}@=ǫ#f`#ߗQyhէPQ}qeyϜZ*:fV__:"C; {0# u6;u|wg&|ր:ߺ/* Y?` ]s+wiN7}Y͌@5b6Q~ ,y܁>AT^%~Oݍ6qeiD9 3B-Z&bS3^g* ! 6*lx7O;5wYP0tMO{`� IH$ޠ8 \,c"%qow 0pZ<N*_b_7A7Y#NmU]hצ!e&&bQ6sy8�T#QT5{." ѱ Bx\[T6QMSGT2w 5GcE0dAc=@h`%:< 50Lk B3�uQ!VMz yIGr�vf5ȩq�ƌk3ՇPFl_+APFO "|1<©F0hl*:kH5Op]wh'Jx~_jd1w.2!cz4(I5<0Xg|YaߵjyLMjIXIl`\$ S}8$)Nw4pE27_y _1P TUaG¢-"`T0"c̣(Gʋ#`#H4iϡꍶk;{}cvہvkj8WsKkkY&Ij%QY> hfiNTԠ&�B,DihiĿ2�p\]8S, �:aOcE"@@9H "/GQI4(y1D$H�F0MCn;6=6;3ފn:�,ts7U7wԄ38I2r:Sy\o/8jpͦg۲+=с,[_ ={1ifvuAPu>$B⩍v-B5; 3j`ܯ%vW?uz[&"nuP{ቯ^_,k?XM|])4osum8=`jMʹR��4V:K?r|7s2tŧ�\&w=P£Q׊jxjlz=Qa|*<1zۚyba3"tTLwеdOOiP՜T.S-uoQ~KtHMwp}wͮR IQ`s0ȥzaW'J5#e^[kEc&-M hpAñ$GdFj[QHbQ\ވZ!^%`+~XsEtS}浞s6R1W!I_Z"'x׹ o8뀬ׂuf' }[vȾLX@d (,7HbCԪqէ_]y$c##Uː xxg\yDޡ_UGyqB)F la dUi/[oYFʂ̭VH(t$qsk2vW#0h4f9 uLS7Nvᶻ8:3 (^YY6?E1aDDy:Jhts"!0F#_W+q$VkܮeB J \dy>ʲC0:7h3vR.Y$KmIYAO�&C |75F:a]elQHQ:$*Єێ]�@m۽%"71-[!@j`3rtMzu媳N H 2WG4UY3ll&BUX\&X-We v-=$R j@N!Z|b_5؀/odh|xwpiu~m҅k WG88?4Ļ%b6{ʳ dZxb] 7cm=ҟyA TrU!ѯ^~jEzG%x;m;=?x 7|L?~JkMf}MT2lX kkϮWwk/,lYtZ�H35:ddZV~VFvZ:̽ݮث16t`C`7K>?;B%/12peEcjDwwFX8KDF69L Xi)JZD0\k3 !P7R"$mr2r`U1.Z$ʨ^}zҘhs#]PxG'h-{,!P%:h\ F[ Hlxr"{=WK>NE0 _g"Nj5lx !us]�А.)G T73 Ρ6\AIiA^UU}qi:ujD>!zāAW (l5!ys3v4-=AGUBf(- Y*�ޯQdJe`_ |aG߶8&8YeYiEJ}pй&.XtJN{|b315}ۏ{3O_:4XE9v7'Ie% T/RgGD M#{BrDjoF9di>Ҵ>@U~ v<==snw0'Jr�ԡ׷z*SFkW~_ev#e1Q=B|A dNP[%DEnr(GSgwx/{`eL,Bk_/tA?<EI5:^(^4#T:Vܵ{U7\uA40~PQ3H֖ vwR,$9;s`/(5R_^٧}O.>]wwGm}g<bc=hwkiZ=�*R{}@dO�ͳ"M_5y P!k:zx_ě l 6V2;�?w �wwG W/ z+?B0Kǿ: !300X4d񭺸ժ WqBo}OCş~FVζ~j)(T < <j6iJ(OZ~{ƟYguXƂm>��Qٹt RSVU߱vf|J,W2O/ ^v1vʩ輇~jyiM pC<YEւUãjRzQbA=L4ym(ʡR8k/CEQƎBA'!hObz>7yhU-Yl͉�:D!n7خ'ōkHrq ,6B8j`)"lRd6!@ۤ, DvD2TYOiX"ޕ,ZTeC�Ƣ!yQ^j}r!n= =AU]q0iq 7k욪>ȕGg乎g5V}>t`}p[ޢMwvL0�dY6p8,7 * *L]C﬜+!t(Ol4\Gdo Nھs♥WN_<8_]Xwzr|da:45N*\<WԮ8eYH/��M[1˲`8fg/ KsO�eJC^?qϙAGb{u Sm0 n{{Kޓ8|MrPm;EHnS�{-T߹7�XK>>�}�U5fZjCz+D�D05,#L99^fMo6E^+h U -^Wn՜O"V�Ͷm[İ<S\"`0ȽYZU_qήAϸ< *@�#éwjTX;7B{n&2yD1?:D&r@-ӟ\UY[Z/l@=8-Ƈܦg̪|2(Uc+AN|o/ԃUArV1;;;zxΛ!8=�oY5d_W/Sʧg[ Wkw*<Bʩ7Qi* T}ȵB;qBww\lK K5Hj?O(נ1B48BXp{{`$ qbщj;;!A7>krzo}{f-cF':TccBƽ)PE v5K `i8D!ka@zUmldbcPY;cA:%Bc<t:Eƚ;ϯ�Jxs.BBM_=nޢX!L{[tB{'<AgA0mOPQXqWkJt[NK7K|"]O\zCpv#B,]_ \OʲZq-cqjҍ=A6c]7JuBG6UI!J@ƲH"!!Gcj7 v@q@mT\ jէyrCW�eq` 5Q}TT7laJ+P  #Er=nG"!n}xq+p8DkEe,}"2(H)#bkzx]5jAIT[ @�<,`l` <lT ֨hXt�'In{^-BGQDD9kq]s`6Qai,->tsσGyߍCk- G|AHe!F!(G!O )RY_qA:1K`8GC&oɱnfY.~DscR8 c󥭐br%ST03u0&E =N,@`+NҎJkȤ�0>O+f\@p#pffG[I}U3-qz[L1Oj@=D`~ŃwޗgPFeҮjT+6V<tۮn܊̊e֐W#MH_Mv*Wq{o_̅OUg/�`ׁ_d^,,;q㓉k<kNOsp BBkIzQw.Ylg7tk)As,8V&�KWKӯq O^Mʜtp߃\6V}FdnEPQ}Yҙ?XߣMYƣ^q Nmk1H]Mxh5)!`k0LL&[|jyC7H!]WHmgoP`ѽ!N7S֞~d>k =tHGMY$+Z8bgu1Y"WW_A*Ip]<�0:HwwXO*�]W W6|b8Cxp1(QQݤKc'Q~H<CJ5t3,5$٩oH Wl`PB_UVb !dop<A$[~{q\lAsn rTs"GKik$x(/ zIJ $,ONH�&`OC3JK!@dS"+bna; rPzäg4dv`C'ro,%E dm5ȶX+(qYx,_#v ;6l$MC{ݫiJRzoa6ʣ7plYCKcA6Q o4KJ0]o6Hhbl"_FY[9mb{}Qoc$}z65B >k;dH �lgt؛E"v4p._X9kJв1@�q%I ~m0\h49{k]pnsCl@ˋks Q>!WB"P@@E 2kz4ĴF]AmQYNhcc4Fn86LN:ݘ XD>Bݛaqu3)ƮF/<rCa_b.'ޮ+ 7C?_ZV^6` Ut7u|GʆI-#SOimvn~Lv"Q]LËt׺ʹdWS"ɾoX"xq/_J`xF|Պ;4nblԞO[hDN$6> %ۋ>C*l=R Ee޽ي_^i76YN}-x۞~d]}OʦHKO/,ț@E5X{UQ+/=P}(6_U(�o<pf 0 Fpz{oЫ$a1iG?K~򗏸*W. *9|3SUuz:$ :31zt�]"xsgOT(Dm`FyCm{Ez뭄ew'+t[&3N.(LOҊ |eireT!0T;8mǁ _i|3a 8?x9}9P<_<_Ы<C.eUNzj"p'b_+x.;y /{Sl ~B"ٲOd@9,t)<"˅h5[i{ؘ;F3wUp۾[}+-wRlVr4Zj7&}{MXF5Yl|ژMK8; wbf>4 s٭rlf3F DX.&VN]^_]*5/e ;؞`>ωyYlBdxRySj+Wh9`�z^n< |=Ej6/J�b$(!͇`y8Zqwб;=Tί/6F#d4!!ȳEu"R=JC(<`H }|mNNu0)ʀmAjo:vأYx_ϨT1hyDDm ~ɓީ{{u<v=w~˷pimkGvUoS"_~ K/"[ŝDM$^;Y7j5YN+&ah;t~ώ maJ-CZ<m:… G'LsSS֩j6~vC+;Ef'6kJV3To-]YԞw~`U�m.?4p`Hd=bUqx /@tex7sz+գ|&ej&fHZ$ itypYɐ/\Z[U߿?w iQh N�xɿ7oܱRZ6"2^۪kWUg+o~@-P_{vO϶~n٩7gv;]9<@H]|=+@uӯʇwǒā8)`C$UͪuIuS |P;.5 rzO@hWdBS\.pgGo/ZѰc;K" 0gIcy~ՌMWG/=[x驥WYPȇ 9^{LXy B>y:3\KBH] )d2di)N!h| F!EfFW]c+z%)0ޣxkJd*�9eu\U�+gٌJswu"%g=#'' &RP阸osѵ&$ +&({e\76WTW ͵:m}<Zۥy%|:Aj$3BcGsz@�Q/JU_͌W!N^ 3Æ:,({Ջ* צMβ./foK=VqqEqw:ɉ^t4pq(HDQqqz-)i,eyNqqG4Zi23[qn}CΌmCj`i-Q僜22BE;:< 8s~? r0Y]h-`l&۝^ 0̲b^r̉wjoF 1f,|Q%;MҊNՍ1A3ͼv'/`!0=#8޽~uoiެk|t)Z V �zv,/jyx Vfwf8v/<Tq].BSB;;#?s^6 u\a`ѩֳ,ؙXC?G~OPGx,0 ׾Dw,zv;W^H;ML  '8LXtH[蓿pHdjp[2;J(p*sgJ@$Q_TuƣNj&B@#ҋ׫Ou$ȍN g&+s5:�J�ȁ BO|!Ⱥ� ߜkx]\鐊†t ߤ:[I^D)%B[[}?_oɿqdb:ˢ4U}Pϝ$I+z'wl!@C01uOA}F=xMwL:ۅ3#f'G1y;gMq-B !^ګq7;t8;n{@!OIQ,p3g `wu#{�c-Y7cqDDjݐ.B p` �bU)TYtȦŁ!NGC@ŤlM fZ'BBU<E�<i8\#R瘽m}5ޔrJGHcNTP}KֿFRߋG5SO> 8b`4cPZIFhxnTL BAsbV�!AO;-lc�$Fu:!yg$B`ٷ"l$ JR <A6 $T( <Az"V@qqc.*M%BO#ļQ`yjh 4> CPzZPpYQ#B"'\�lLGM$B'(Uت t0?RLTT>a%ϯV}F6W}7P\WP_6P#'Q}2Ȩr| Pk@U8#+y4iݥEyC$q/BƱ !*@@"UbdGzcA"De' NnqXu[`m1!8VmXI[VvEE$I8)둑k\z!ƈ bQ FDe4JA:\X.S<{]};q3ʓ. a1 y4$ "F�:;1gsokl@C( ˲tF"riL V4Acq2*n1@[M<eV*NPL:deLV2& +/e?ffsg~ ԇ �v:6o.ozt={ e�@o+E'YF|E>]ZObW/XlB^_/_~vޙ)P{ݓ?W zlr2Rܸnsŧ*|ChA4Bm[:.[W l??}?7LmKcB03^_KA,3K=6 Q2Dzhbegρ_՛o޾CG4JAJQ " ڻP.?H܂@>Ϊ"..e<Cg�}w޿SO><%b0H>P}hyFO=<׀u:sa(z+ %Q ;<h�Όt,vUD9cҙ/}ls'B_*k;50j�5 ui4[OMNyuA?3~|-̎{,#<v~V %09RcȞ8Bpr~p䖂!`ʅx]76}؁ rA`!õCa,>΃ cQ~-0ϰa~ j=pd]3q'3=UQlq~pzݞ0IZ<T'x3d]80aƮJX@qCPa 8 Lv@S2=0愙 D/!, j!Zl7 5v!de`qp'MOBcAX lC WIgİ8g!y� BS}.B'Fm-< )y2gP<Y 0kh|- +D<p�9gR#$Gy:#$` /{G oR:d'=Cخ}5^+bq]g0;RQc'<ASȯ ȕSV>b3 I`(FldBkU,�)yDb{A\OI bxT}GtLA G_@"_Shoc$82Rym)Bmqk;5b֔[A$zÃ#5Ii`lNS7 (PkE"(` #�1QD9Y>h}oDtvWmw:x];u%#\(`DFIc@UXv�u_gZuNQ $Ip07(bW5U9gJG06He C,QcM{iF1PBRl|0XxT2al:Ϻ2]#�ð�ΪMm nM4H[v%+~Y3R߿^z#S3rSG/Q"sS]͸l:#t?X/jAg@Vԧe4Y_yv7c;wM`l{t|lkBFa#3VܸNX/fE1iU$=[nzukvh|ry͝;k~q}?8?KwDIApf['[k+)ǻ[ZyصcQQR W%߷l:@I9B*POyj-U 5"C$O}c~e)XZyl"V,~"spr,-3zC>*� |M^{~i^STO%woGz}171w6W}Lj=`~噥Gz'vtv߿f1fV5nuß?9_%beآ1Tנz D�ݱ?7iE!z-ЦV;zv0[4"'~v/r"[!ŞFb-7y|@xڧMЮJ slM֢C,-!N (P]; `�~K=hu0 ]@} NEs`O}k<|a.h;;1SbGnI,\e] dx~匉dR\Nq>6xow}=6� ;ѱ]-:6^x>;b7 ,S2;B<:@J(pLzpOPO-i.Qs{X&Q 4 DC"@G�RJ_ġR=-5<-TR LN$Yz; 66ȹ1QP􍐜*5)1Iq$q+p<@d}놋Sd$= 'd`U_c \; G͜ș'Clv3O}7> β!B"7U}zCU �B 7r`}-AN xCJ*,O\O U >ߺ@(:Y+2VhT1!#~$ 0ؠl|gĮePcm<5a%Ѳvva =$:T mܮKN8n۽^8 q.ׇ~V 'r5'ʉ(/sʉ Rb !F?X_[_Y__Oi86uޛx Mlè3 [dQ6('r!BKxrNs^C@7䐢7<nx[ t6,SuNA0dEaA!1R@}f놽J0¢^l] @L<\sizIuWW3tcԫy+b FI 4;lS_o{mC v/{~pP{Ʌ}ֱߖU gu?yr&1TXgve|h}m8m`OMÆҙӏTgw~r"pl)cF?gnn lTKH&svȿxL*O~o؃`~hMǾT+mwܻ-<y`޺wLl&/ayƓn}'vać;Srmtn+=�T|ٝ`3J7+ݬ[o6}KU<禛 \#[Gcּ}.9u- %OF�~ўƜ.b,ko/LtlſwCwݳ7>z}ō&8=_yTAW[mlCW|'xdҊjmwu;vw+B6B|©g|Mo{~$<_< ?N�|}lq˫Vuf׾O{jқH>7~uL�ds_t=F?12 [q+E ) oٷICbW{C5lj5lf(KO.7ជv].[6U.L냟5u3(\>W;q)-�uRP7UV)zAz �`vW#?u}3Om}pWҎŭ*^_{3"'QfÄWd a-R(XU}dlo{˖=d/B.(-JB(([r:~٣=\90L'bԆIwH[U}Ag[3U@5v轊8"{"O[+oxY6-LsoQ|4F RUvkgsA fvT 'Q}YT}ŎȕO^, 씧[I˗7 7@8q֒Q!Hz^~EκUEY+~\ 9DAf@|wC o]M ǰ6'B Rz̜S]^,K|Vnu$)@yYpǼ^f@TW xdoiJQiY?t` w޻~םwx=I6XXl6pet8Li 0m"ieYf0(s[!S�@7JV'v0)O</A@9UjoNJ&C *I S>}\^Ķ|f]q>]O|/Л*07ny}۳sO>yF_9>iVW[Э2>L0D{St:WL Q r+;vlœD{Oᵧ9wSHw h={om!@} h%`Z>wȱn">w?!]Q{v;t]2H߫a8k_~c-'n| Kl]~+~dOEB1N>;Ol pc8B�a8wg 7?P3m8O_:|>vٍs43h;߾N˝zmﮘ:ulDO~k 7"HSz+<,Ks(ێ1>h1b| ÷P4vm_óqGn/�cɱf5thc-]_MW0'dl";M϶ܪx,4^}*ԷlGO\y驅ˣb?=߻-Sj鵧6xኝSOӯiy`inPn/}cweMPqW�BW>s/Ӌ??',WN<kPht=6>O&:}LG_z#{+t374ʳo,\6N@4>ݚwxȱ �e7/,rlH({h}g56bo,~{W(.<K|26;~ D�S~wyK n:^TvT>A=.UcN#zD|wӋ;] ֌K'XG@qBƷB(`Hk&re疍m _XFe5j`+{/{TTRr `]!"T/GJgQ+xU!o&5"TL}3!`n u;ͻ(x3mL_C!P3*Gyp| @Uy?HM3-8 \<88GQYeYV+r'}C*kɑ IVdo BhaqayaIx^gbϮ=3ۧgΝZ\Kk~`JFVLj1Q(�8ai`օVoE@CBOƃ,<%7S*1sy@U~S"0}᭑ T5NP[]%Enr.HM4yI� K.gw+ 6i_̙94H'N鿝pnrK<+o }m;:?b*ԏK.HN!aJo3g?4�YFέG1Nʹ'gUy9AWel%|26+z=Ʒ{?Fo<|$�Ϭo;z '>ؽ?,ݽm~lTo}8wrmuq,5џ~O=8s&�XY_.ٟi79vϜrqh!R#rCH "^ݫҏ)8U#f"w*>'~\}rw {o<~ඝݙ;ӔZXd1Ocߚ]7G=w7x$;_}x?$=y勧3Y|]ŢGGQOC;X-NpP)*\ #A!<\R0=\^Y{śۭ~϶ٖg0X�t{bUIFϜab;?x?}7<xtI�H|an4?hdbW>VrRTjm%>X:{缔gGU pYg\0wێ3:a6)  %:ʶcwVHķ߻v��XO 6ֲəlծ?_|ܠC+/-W29tԡlpme4>ٚm7)Ur+&2V0+{‚]Bx/,S3IW؍^+\:c `p%�W *nZ=}"~kA<\홺qk!R%[1vx3""ѵԿ !eQUݴ<8jލOA]Ÿ鋠O| />REؤlɣC ȁj3ŬUrVUƑӒjT(u=A)k@ixx~U}R@x3}m ^*cjPFE }r!~m�(n>8^sTZ$SF6i욪>ȕG?>Tx"j9 UX_0\t{+jDDiE-QQFhi@%<<V[d)W)d__"lDXJ'J!QJIqijzvkOLl[>w|҅t6Ǔ^((d�X���IDATDZ9dw4l[C�P_3TB�O$V <Ͳ,B@| oo&�Ue'? 8jxyfwA;,# }Ȱ7T�!]y j?<B>\T�4K(60‰3{vT6pǞ^<{xHD)»E�}FYY�ϯ~?ɿvc1۵ԈfL J|?\`%{{K~?_<tTmcɑcN5!(YZ!g߽⋭vރz?9Oe@^s+Eʪ69=m/p_k0G`3C̬Vm)T˄;ɝmT6�.?6)E}Ww}>k'pfrNOt�G+KW^eYw0kKk/,|nj{,_:;P10>?U#�&+lQ71})[5u&_Q; !LoxjD;_|ßdW++`Q!=&\ڧ:'A3_{3;:bѝݱϟ[_MqB^~zij}W/ZD;ju`̈́rOS]{߸\ȱ+ r!8rG~W'҆QEP v5K ` $_* O|ԶvCKzcc'_Z)<n�Nsoy<>:o#\i16ꊅ srcwU'|ePGi鶋" FnYQϬCn'ZKO,gg¦.nV 8n7<uEā$m{m,"FB1Z:XHs#BXE-B`ǵ2(-7.6B}z2VփF@T'+K`xBX=cA8BW&=*_x`Ԉ'zR"H`DGrac Sn@ >\_l{-ԠG1O\Ɓ-LA.TihX;|@7+G'铅Ѷצb>3L0}1v!q=qtEP ʃq0v ԈA1ƑdAA5=.G P +}֜߯ -*� ilQ�"J$I" \.2uTX)!@>P�r(J<✲<($Io2۶c N,;8wqu}e-, D-@8+j?؍ ox 0_%t`|"oE1,r1(!MEl潷ЅF8hd_'`gV[XW2X-/_'aUX(�sWv~<1QpGCP~ 5@@?>{ R\ƈAfե,vbc=;B!W~^~v.xan`X�g/>Fxg[lJd>k4vd+֚ wƟ<{CT_:O.\X;s(sLBpyߙH,X"=yoWZ(KD=gmŮ`z <-J1s t")(a>荘p30q~ |1:IV!"0?<ސ<S/Zan~W^{aφ!0v/WN\w#$!#K\E:p�ct|.WNB@sxO/, 36T;߹]Z/__\_͘`m_?cdB��lVnAs+ h(aC¨2to|A{SNeDA x"ё\[ N$e!D<B_dL00bd1>(C P$4;-qcM_C$^ټ(B(B! I’9z8Hm61(1~jJd7X)GYH?ͺ"8< �8z dm5ȶԈL?K@qY<߳8N>`sz qRRaH!cpؾLf= Ŝr!a{Ayym䃢jL uWe{Y *L7N48UKȥ@Z 1OXjaEG+$YbY`,z™-ohTi;mTfBM⭾ju:VU.JC窑j (Gr,_Š9aNVJZ@QK]!ER6Oo#z:z{ZW+sr(OZqAQӚ=U?5jh۵9~{ ;Ozc8A}=(JbLTV{4#?eLlY}<9WotvW5Լj'(0W>+H38u _?yu8@WMkibC ]#N_>ǯs]r7Sn(5:c@oWEKGdQ?+؇+q.N?'_]. ^XO-x Q &v�mvcT63:^/>g0z˫=:LTn-&X9g|Nߎ3ZDd"8wbY{Wϟ\oD:XCL[F4fbGžo`f\3'Lj؁1pp|?_yn{IN.~ƂΙ�Z׉�BD؅K]YF_O|m2sO>|zNI"lCm;TDxf&>Ydt#JR(VHƒbBdIn^0aSg&  ~7`Գ?zu61vӯ>Kױ3|{ċTHcy~Ռ†3ybʅ <}7(C1sU�곊[Z5~L*xJFPubPqXlvI%!b[1b_y0'297s#(/Bl:�\qKQSm.Wa܊#r'Hɤ8zӺ nNmI>Q'̢O f|D0,=)cbx"dt lKhh!)N\5$ͮC URB_jwђŎ]AkR&Bb֨>>g=` J`9~ϡ'(G3 Q*@TjЇKaY�l{:)=AH7n`Ay D! (c8"Qa*lxQ*JlJy<qd<߇ 'X "3{]Dp %IT&u᭿[-Ԋ怋qәvwy-h*SOX%m%uP8$0rJ(8 me4a:`_6Bw5s{Gn9i42_"FQa ydɨ[m92:N�'&c$y$2 {i׵1�s]�`{RGbG0voG߯<k i?\ʬѯCxank3ۓ_^\FmyKKg_xk,m7+/l\F_5~}_wQv…ttl^Ygu;o/uc{ks p*ӏYGrM*♚1w:ul~NvwZ6gO|k][}ۅSKm<{@O{¿h3gkN7ЏO됿][:ʿ'hsk.=c_|j'tmW.h+gVj[mmնVj[kq$Nv:$I88"\\IDD9u)b(ޔ(f& �2t4ZֈB!y)i( [dY<Lc{÷~}vLh8i]@YZ핒j.kGvۭ(2DD959f-*͋[nq'�e>ƴmNlU- l)TݲߜܧO^eoŌ?@ �kߜ:α??W՞ܿ=pi� >\&PQ7 gŝ_x򛗳kRv;{l@nOh6* |G.#Τ_sO\e(6M/?w'Gb ⪪�/e៾r!?wr7KC&=b�,/~f| ?''P;M\R[A{{2YE9.★t'R�TIVY/o/>k]h?Zw(vjYQ86<BwJ\V2{;O-Nyu vLؐ{o];J? <W|WGT;~I;SI mx= 87O~7ǣ7Gz\#g\ %B DTmuh oaډׯg~e!N8gDmF0ˡzrkKÇn{ <QiAJ @�fK$i�3xxPq5pUvM 0e~�?K=gԙV&WC_X]~9#s>4X C quyTA+PzQîp�fR56B-I[#�!pCVc1r <-Ah۞2vX90Y Y znDfs>$*D<B3~!ܕ8i1[\@R;"ƐT zTFW#W }5r�9Q#VCzRu*کp^vDT8b7 I> o.B~aCx =AE58r`3l:!Tت t<?/ZYP}!,_LIG{O%2C?z}S}GjμBR3(}5Լ^\EdBjW/P.\J^8oyH8!^(&gZa◇t9p?q7<$Bx7<P 9͟&=)7A$l82ҤV|(IvjZV" PQ2 yPezr/a�((D1NV�c,dFa>\Sә]mwCw}?;>բx8k Se N ?nX6@RҊvq <,3j\=jX7yc~򐲮DW8#B1]8{@L!*X)/D1 }.=O;\+='uKP;èڡ QWO/?o^N��s_s~k9W>'DvW5auPˮk|{}ۣxsvh}-}+m⩾v(TJf>dqݮ, g{0t-{/g=8\矸Ϝ_<W {~pG7h?K_ylvfrxKs>ޏz{wn=ե;B:}?ѾbqO٬:RS0VcLs3:¹C:jx4ӗ_{sYӆo=a?Fz|(aW y8�++ ZV,Ǯ/>K"pjϟO˓߼|ԆS67؁x2A{3#JTh?~M:ptrl<X2:/~%1Am*@Mj6BB^xGLlv4.]ϯ忨!&te?8m=qf<zŗ^Z]ş6K+;ǽ+s;#NWE0@*Cm&DY71^>5ŁKlj`,&]CDx3tnm~ ?\xA!5 3'#La3:3lTAC7vUzqW/}'zs?ķj ،$ `H"A-U̿FtN,#N''%8?(- qp'MOr0o!&[ !2FR#G*0GH!�mx'@Ǎɍƨ0'Z0 cMbC $?$8nTqT=@"[ }EsK+ O0|Cخ}ya+W[PIGU5>r:`3W+2GxU_'Ȉz 1ݲ o>kT}\u8<- B]X W ̤ c`P~M9Ƒg|q_r3T{Cf<W7vXȍG־ 6"D� joDCvMD� yQJU-޾9@ b�EfLb<<$D"ʳ|Y0vq#]흉'/_>d|;Uz#Wx'MG˅]&*H_zkj_z/z^&&n'1rs, !GnuO3`{^DJ4,žs'-6\P>dXGaUpw l+gǿy=q]WWG/wǮޭi!Ɔ͈ H�O? 3wpt:!N/Jw&]?Ջx�ƊYtKBe<KN}oo&oqծR,ӉWV.<Qɍ=b=T{yad^Ik.%yUTHe\"~e^cwmj|O?2W$P-מ�Ť h}s{,/ ^zf/\Z[HTA_Ͼ;9rԁqR\O/=@֊bW?g^_.`3zSߚA?>� �KsGp;{p,y~}˯<_\T(t`yXdO,�7\7O?r垇v ^<~5KTËO,%} g7.}Ksc c /xq#ع{㭓N6`DKW^[=ʰR )^=~+hKp,yjW* Qo|wN﹡{#;:2? ~ۮӄr\پ{۫^YF^]yų'ր!܉th(yBg+_gD>Svv' D3w`6-/,wzW.B@k'G\>aE*'vzC,9wh| ^3$+N=6o*c=ȕ[>p8<{bkkrbY呇o�09Sϱ:avLrL۳G>3_ mD؉!-,e\pmڍ(PM[.r!U,{ZJW8EF/'V z@~6 WyFXY,7"c[?pV$ȫD` c-"SsJ=PP͈  5BA^+{bl'j !Vs~k6a쮻'3pB@B\cdQT;o_1mce<ko.3<Vdgwաv}ZENi:FQDD9@P>�@_Fq�!r(/y"E a1tgB (L&ڳc>xjks'_taeeqmc8BEI8I 4/tEFQ'0t4� ^k z4 yޤ]{*-J)/|8t#jFAmoݡX2O+4ɱ%4˒vКkCD TW=N "{)t 'k2&_/As�<hz v|mj?~ۋ'W?z嚈pMͶfZn,VFln5jSA-8DQiƓxkZ8:{ʠ[] T4Ϭ[_+r÷MljO&cI`pRh4ѕa厛1 ظ&c1i|tk|5>heitW<-K\'c_wtkq~8waҙsִ4�ՉH'Dg8ZY./ /7sz+}JccRET4sTS;wz ON7#XKWtB<n<x{M̶?8te+D냐f??YZTLδ>cO7N/]lY . cGnLBm15Ipχl7 K G_#l4oTXo"%ݱӍluy.VF+g_*ه̭vPobcIpeЊ8Ukh:dtfcYKHF:<dYcyۀ}wwz{�j 7z:WKg~ nk_wf{ݍݨՊF|8ȇliaxưo;$rG'fucsP( KNs- Ը\/X)3W"f|4O t8#BP}v.jMj *]j*U {U!o"T͌WcgPL_f٢*PsMA !hw578U <``dtwZjWيE8M,4UU"V�U•ثUtހ-qڭ8A#jh'_|`#h'qn h$(#$\/""Ad9E?,G#%@"G#UaD ,UBqoOWhR"au-9EEYTr̲|mzEdƉ��3ƒGY"HW/.6[QNj@k+LUWև0*e^QdN$e#kZAȞGy9E9z&xے7*.PxRۿV?FWO[#ziְ޷KNv5RxԆ eKd}j+O/N붲0z酋g7ecSߜ۾{ٱSo׳~'pmDn֖WYf6⹾m4O inD0a0w^llni~v3KbrxStD'^\MխնVj[mmնڦZI$ɲl8F(lEQPf0:,٣7X"e3 ͉Պfv{əə]N->yyQF鈲MfyN9 <<8<ӌb�. ߗ@_1jurD"c2qMAŸ0#AAIs\8)ϫa %BjyX  {#ÀBKWgC,A�:oj�.iN*{2ȼn2i%NUybO9�[�l`˕ 4b (w*UMFv@z %BjQ3̬! : !zGr BD2[̖^/͸9Y:rl%2RQ`alICع ȟZ ֦.Z=%\rG !,"Wεg\n3@΃@^|U"|ӷQe@Se(# B8*@5!z֑ d‚Ա?*�? !2p0l ^:=]]VBqpр媀j}lڦxr{ȐS;�%7؊zC/}${MV,k0VV5TcB_2:,`؉>iMn4V1T0 E!@.&�B(:@븐Q&gqRF!*XƱi{)0:/GJi TbD8:tHCTrHŒ*g0mjNIg0¥AXC&U8 E#n%Ri 2q+HDj=<_;l(K� !VHmi�qά||E2fCZ1T3 Iuܨ�If `+@+sTW}KN6 rRjP?B/ph߮(W2q/!@>hI-D[1xq X@L�fAyRֵ!_�aZ$ɁapVe(`,N>rc!h}8 F[4:bC|Gf<:>5YEmboC$Ϸ.BlOqp`31?3[z NkU **tR r8@ƐaצیG<QFGA e"B}U'A̫^He$*@ A!1vtz^t:N i,ˊVn]!J<`0L3Cp[uwls;>Qky#[ϭ Di(D)&Yʢa\B (y )AK*`Vyr9�9"1qW)ץ1v:QNrjo/ ?o�lxȐL"3hr 1m.ĨqJT\SETF0`hG%k}Tp/S Gp "!*mt5~4W41z<,O|{g3^{TgD5BYA3!z*w fM D0Î)1GfQA8B6o>Sc ʻ0WSu[Ovr8@PO E GT`5lf%LT@o/@9.t[9.BB6B !Fd5p\Hm2Β�6qny],\!B .\HXz'*T7Ag(Y@2;G ^\̀L{'!"X,IA%C| BH"C3vζ 3.!#B!BtUEC`CaChi!{Mlg_[¼@c,m,&36It4\$b$Y,B $ctH8LFaEXㆨViȌ糽zV5vm!d!D8%8BX2E r7�G/8!Q<An'h\_ M<Al+mo{<AR{zKB:tF>Y(ŨLoS J`yR26*8v8: 8nT Q^(-=7vR}Aĉ!U}L6EhoE:Oе6g6Q}3xR"H`DGE1'5<_L;CՄ8$�\(T%G۪ #A.|m/B,a(V3Xl�Lb6:!dm6"VPgAW-F֖'sTOwoZ<_l�(ViHWl;f ZBj`]Vdsn|831PkFY!E1 QNI M$vx_9幋kkXoz5gyE FY" (Gճ]b+]e�AIjI@5h8N7u[#msof ʿ �E3&-܏V0ǜ sɢx/s]JZo: а+` -ؾ06i 1g:(8n|FϨ,jܹ.?< 1IRrǝk !Vxv-23RNlJfM׬/6 I P&R`G#:ֶM/T`q5%=:« L~}`M9wέ�D^zQ#!"^oH򰋍E3q<:LQ0Q$grG8Ad4;)rg^0l0+NEl3A;bTB,K!ҙ|7OꮘPr'T_$`QSa�iE蓟�BKp`3P%B*W 4k=B ,�!R(!  _T<TQ#RouAF!sW;NmH;=LBc2NdY*t-Lڛ l$s &dc}1=6 r9=vot*E|Ȍ[[XL{�lSK Y F9*\S!E�18';=ƓtH!U(>FIǍ AD6ؽf�97!"b>OB؈ч[8lɴ@'^5l>Dkya7*@̢ƮNNSqGќ*tw\tXsVƱd9jO|<? 8 $c8,O6ap]OPJ 4dl_&9B<mvd0Bp" 1ݨ(z�bxx+I +( Y~Շ故9wVx+Iq4A%6zC;0Ξ\?}gہ "!SV@p$nwlllll8Z .jDz2)2 0rȆ`}>ZMa#dۢ}G{g]CG߱kTEKK ,�0L`i,ˊ�r#�" r0zV{4"ʢ$JZqf"nvNQ�H^BD(WfD͍\4;/B&FڹgLr&�y.`o{ @M95Sꕉ=C^Yh%&%?d2󪹠ሚ5P S")W,VQ h_ wd.VcbjJDZu7(lb-zeGb> q-[$V wޭ)V1ޛ0켹s+#֍LA:CȲLX>1N<l1g㬊2^mO D{wV$ѤX6cDkQ͊!r+FW ǣc/:4r9ORXQrv+ a{BXl2uͱB,2(V2< :fNj+n\\mdW,=l5ﱑ&8‚J:zÙT}`@ηN%Nب]C(: Bebc$Bʎ7�Y"] q p^ Ja:E%9" BVӜmrN+yҟ^+9PՊ 5v!(A™ڣRN|[Znz TYwgueI+2lz~o=y5U�EꦜH:a"ALA%!nc&:B l$9'?B!=Aq<AR 1 NJIU8 GqTy;y6} [q{Lqvm8,Xf*#Nm9J0"x6vtx^=,gtQ,m{<Aqށ4hmO$aT\)BKlX 8X(*@bF@nk(@sG$<R͠0(ZQ燍#jiՀ>Bφ XHxOJ9Q -mg=_ "ٞt,3[؊4pEE28U-<PZ e)@@ԊVkN:&;;vM;xK+kI6㭸"W~KvSl!r #Վ;-SqbEnG^D(rEwVXR~,.}(.2&UuomնVj[mmնVj[mmնVj[1I$I<O4˲h߰(,lGQG9"HlY2JVwr[k|bz}v:9ų'/]1J(#l'Ԋ10""ʲ0/3< 6^lZ�((HZ$C;}~qzV;hHͯMܪ[ E,|kԖ*S- y7VGc]ؿԽtYW=5Rb6ƕVerR�{.Qq3Hfe&󽓪Y)PbCԽBnr-p8ɑRF?HE lc>CHyClb߃Yu(y#VV2qCz�l4fR0p-FdP@ J+=7�vf8_wSZNSjϣ8Nqb\ ! ց/B">[=k|QT*ŝȳu_^K=D{){coJuخ~O!+[P F,z3Xl dhf340 *)!64vCUEٶ־64\"DMo$w¹tSaˢxN9Hd?!c,iSKX{,å2ű1t,tVqWqXĪo'.gqKe~-ݝ 5Ex>3v|K@!(cF0j=tHM̯ &<$B㝷[:/1^Uvb<_Z8v`C�j YU 65Dq[-O8j!yg$a6"+;ͦ4}/_'Ƒ@E\}Wu*5;_"L-#om-gVÕyR6*<4Æz ؞ W}`481,Q?ƁAOGUGIG{OGdDV}Rg/'PCuݱu2�C2smMeTkAqdq/BI=w x~|@e_־,1`{곌Ey Dd C꼺/;7 sOJv[6!tV{s(ZVz-Ւ$)N 뚈W#Heye0" R._ ;͝w{}t{?29=n)m~1@7{-� s”QSŒl傷P)D%'J@�zN$"�9dpKoDL~ �Ȑ!Qv"&H4#CT."ڙتyd=B[\Lvd5}狈(EQJTD-v/A ë R9b_!fUFbq;5FjYQ ’s,!DW"[IqDpj"Cqr\5 o1Am-]`]sYt.�{=@&8±)آR,ߓ @;pqAI jȩ@j볨]E !f f>VmT�:UGBhV"*6BP B/c,-R[`z[SBd5v!ՇRU>1]Qpc2vB  H[caL41B%Lc)B,EH8%TE_#8E0R? ;C ZqF+j�/ V}4PeS1`s:YCV_$ t:h.X\3J gq`q`>0 sѝ%!c;*hz~O>0vTנaaP*!DVv ;@O<ZşBQ#'B\4%B䠱^0pV!0B`vB\T�TJO94"ns.-kBэpo'T;]R f"x6E_K`K\c]78zA^z$}E\o y&=<n3�fVj&#U5V}ԋ+ Af"P>t�\Y 4]�L}׼$A׎ IĜԜ<A|V'L=* ^'U6:fG7,H ȶ#5@<Pl[ 3:=#dZ1QmR-WMZ*B`NQ%!<K G(zQF(%Q{bbfgkc.Y[<6HiR@�GI[{ 6S(ʢ8b9E�,M߀VE�j$& MtM$/lqT>0)FCA+-=XGv7兇4` o,JE`"`&&;_k ^MF.MK)ɼ7$&^ _"aSw&Cz), 9`56e-^r ȩK U{{ޙ}Vf搫Y D&XBݍ*its�3-`(:2tIX[#w�?ktrpjK9{@BĉuʳD$B Hp>-9~χd%6*�7 <<l(k- 4+Wb�Zh7(0'mB8pGR}:Ǝy `=d�'x!tU0:d,!A7y¶RH!C ˉ�2.>am 2yA$a,( +F 䗟3"@NmI82Qژů$U&I$I":Č�'ɬMF$c<_`J1|�4B*m9B:Ao+zb kBS}`|9ZxԆ*37 $I Tl>xBas@yQu+(GZsoA@ދmjQlF@;4B|H7.HqH iA1gn}O#Jɍ#UG܌q7x>g(̢@6In8j!6Ac-{Epo |:`㞠`еSN <_\ UJϗ|)+Y0q0{T$ B`3<_ #/@W H|~ӹ\*tHB y8:[{gc1 *H> Owm*lO;MB<2v˺-WH"bTrWDV{(:$I9`š;PAbbZ8Lň$�FY0 >Ex;sokf$t/n Fye9&QԎNtg9?ޮD 忛|-ܮ!ߤ[ )4Gen<>�#� vx�qZIaq(4߮h|H^,X{gN\*eKq(֧R�.OV.qo9R.W% uDR7Gἐb\VwXsX2nf.2`2;p`"X7gL>gX5PǞϵ=Ό1YGņ@�t>;d"K0)χj/"DV -*[�S!6ȁ܃:$#< -m%P U> Z1z`d~(A ^)g1l+bD�b [`:ʬ Eς)V(HDl#6VeFHl pTDѠ1ǃIs˵4"70Ak !y~4v!hFwmE΢B&4)EDJlxRJ B1B!U. A}oۚ"T*W5& rx nbE4 )C4Cjm�*5 )@n"m"CRXDȡCYM\e!FW} ~A;6<g$"7aۡ@6:BjTexӿj/("B |p澤>!ۏד@V $Fc1ȵ'U"!r>I!'6BbOًJFO5n\'adGe"1LOY#hf1f\lq Ā̍w郺W>ܰ>}ccO +@$6x 'Xک'7X 3|r`T_O0%_[TYI!.9SAAC|+\@^8Uem>' ww@ŒAb{qq,E'~cd7f) Ɔ[|,vxl7]C$IQ< s:%/ "�"AE@@ HE(s@k0(Dc{7;ٓ˗ϯ,R!B+҈(FDH�1 3 }Ӵ{ c>W85""ʳ<M!F06֙LΓ_jq 9�I (pkּ¢{kעP,8Ϸ o�@-q0e"дg16@YPd{ &Ēj$p|~w Tx�K;4 {mR/mY4Yn: 5MH<"hiŨ: ݁[FJWq$s@&?М<j;5(oU к( 3Rp8``i3 !^}Oׄ Tw鶊!*9 47sk~aNO߁a$<"f*X NuDUJ�U"ѦJ ;[=�|ETpNKj#:n2\W]/[Amv͙ pׇwlifo pV4"وP߂ZWp-"3=(|bo6s}m׀|` BJd}Isθ΀|CDo6 E&lj$B enLXf27M<XmA&HԊR lTUAg!d3exV拢(ՏfZ5CLu;>q$5ELZEQּA$\-@#U붭joچqo(|8fY\NC4'cD_�@ B �2|pN)Osl۱w-xu nHFYe�&V퍷yit'ҹFYDI+UP،P jovUށc ^7#�/7 ;?,%7Ei <nX~ F�IܝΥDv#4v:|5'iLma?('MQrYv6SA�GUhϨe}dx!qA-Wty,bK-7鼷n̆kxwr_P%>1ݫpʙ^q;c}4"Y _ȿ7]ncW'XlXĻg֦Gd oNg3hW";çM77tmk̙^n"CR4 vb;mȈ.GGl ޖӷ8=Ҋ\ܸ#ϋ,n#W_BSŠZ vdhs3aiZ'krtBxP (!bfc(m"p`Y旋 ,1'`"x4 C_~(-T{)!ss6n攇g+24,5ɗ/'sM'€[@蓇烼UdKT7Fc١-BK| gXC므:̅Akx?E5zV},MZTHߒndqdb Oe|GJu[s?[d=7! ;Vle yжs_G9ڪBA1zoU0TyV= !CU{8=<ۢOZ Yc+rG;ZQp(m gz=L|x@0 ubA,snx ?W!e+=M,fiBK>`u @9|}_[EI^./ ]Չ^~d" QQ}!((B�"dp</gl8-簚wc;oxC7N`_Yd<1ڣRGN߃RLHvt:CwbXlBJ5'ܣ? ŮG)_ضhj+Seg^y1U׵cqQXCw<>�l\tCtA՜tUBvx 1!'Qe˦H2@Y**#k{#{*KxLmoi6զ~ Z>>("JHv8]3wfÝ^=A\)TzÀs GK4CHxsy9"ċ;@)T&_%]moȖF$.nvBP!AyZnn:˛T}nyp$BX/ G Fq`oFm숤)*g_< :@e�BH"c`7v&"g_ 5"D"_1!V?MOB0~:0!iQ>lm)TqIC$&Bp"{$ 8FaEH"^Ef<_6n06%m" BQ}"9~I27@z~>~Aַd*[v�Ϸ=A-ax2>* D.AOP>oPG�]R]kOBH Q6ȭ TZ ~%VΉP P+ZA WgУ"H`DGo |qXA/˝5!<&8 <rIQ;p{C'U +5(b>OЦOCl%G.k7Da(b!!rX7!Ve ,lxƑm<_V/2�,׀ l:t6Ƿڛ瀉(cDlZyF4M,G~MN5C!!vRJ$"1' l0XO4;Qud|jbvW{ۮSgO-\8_k0n3ĝ[D0(Dv}oN3Fƻ^�Ik*E�%opW DTKb@HJSxЦdHLLlNEMR#UXQ*bG$ {J= 6͵R +( KK`v@<0);dM<T3;X1edaWhd W T%a01H^+LڕcO+U&�߶qЈ@\R^E]`@[";l\~I_g "ݴ+&afB_XC#}*^"8$A&J�OwXȲ2X (8•bSΝsrWq aϾbxF1Q4ǣK_8Gju萅8M[9B6B'k"@#@hʭ F%sUb>R q'ҟ+&X&\ g݊30c0�+O�W!%8BB!y@ 4BEF!F<!(J(8`ta"БmƱC6!3hDu9cX0 @4A1>˰3%!H2KfOEqXC@Hc'!$Bc�F g.  s @,X# ˞^B`}hTU& .~MeR,IQ}\YIq:Gؐ"QrUUL`yRrg��sn CEt<A !`#JTGB,X}=)cwPaQk)4p#YnT>1hGҴTgPB�IIwzU,N�U}<Af<٬٪r9kE�i=AfVq,zRx6,βc8,O6a*=Ai`Iq ceigioe2#cr<&VR'H!A6ʾ7HDc<<ߊx¤~IEϕq�Wo9WWfq$a.; X  ] lm)˞*OpZq@jun[t:v;"� "f1(3KhaCHy2 Q_G5c3#[ynNOoǨ1̖Q,aN9ȎY~U<PDwrY'}NZNԠ"1*IDy}Jm}o+0$8tWP$0�840 f4|atn!F9{{ރ/^Y֯W`y\ג5~M32_jE4̠ lӘ,M Zks}obȌ̪2kȪre2n-1%[`,H % !aBX n�AHncٲrwuUfUN1};{^8g59}Ȉȼ[_gkg hb36 NM_}G `w:UMl?\Et7 O@MM]yձw9Xl3DQSoV]JI tQ9Es]`$6@_^7]rօ۫AFalKaR`T~o\zT'NV5Ɔ@O5lȨR<̦ sPx1WB.8Hi9NW Jaz"%G4HR'ƙc@ cԪz"DepgApAb}4B=vv b,HPs2KEƉd;|A9EL2TҡB9h}gS$TÜJh7'?\+m2Jg'�ήc,\@[�/w5o2YnTbWT9{ /ذ@E<'u8h)gOEvb_!B<f@ӽ,FM#u>1\b]yItHJ۰rGq! :q"L~Q>m�IXD`acɦ Z SIF6a>Q4'Yd`‘F0.ڿH-?a`"9p~d3(-E~$"tHP </s#8KtT9^n#A$D$'HJ>@9\XX"DYj6t@"uRzmuYZ@-Os>Ou`D+K8G=l86)*>6R7$ \@:;D3e2P%^WzvË󻁇sLofi{BL G �4ih"b"]f>W<}k?{ًݳu{k!hF*&im`P~N"blW֭;w7'ADoߞ%~`z5` <QY+2ጩt1iŪom#@ItɆ+2s{tE>ٰȌ7@ZVu#neNdLj/<{Ii#̅ Y6%sNf!-9G!m=glhegRiKUKu-)f�q,BAYӭ9׀3�VE&Qsc|δr"y]cӝث(gw64U ^+/1} {ZaOV gG.Nf l;О&uјT) l!vvvMD^:JJ7\#rze?谸9lȶ.AnC.[rnaeC�^*cbk&7|-B<(%ugE"eE+|9xL_c)BVFT]";0X*`ni!\9S 䥊E]26 ΀k=_3 [b'($ҿut\Â܏K #PEd=t7ѱG[_Me Vtv&U 2on`aZ2L1F;BYM,h9Gmfx S.`ku7T_M�;=ry2;:aAĦin7w]G|D�8� Bfs�!`�. � 6M41vnnj9iۓ'O^9~w|v݆ͭ6=~%fpV;wHə6i04a0 P>_:"�=Y�C+/o�R(}7G(Ԫx@ FB:u5K8N(sZ`y[T9kظey:dV|P\*NRq_̒%# y<]ԡ[j7Cݵ�C= Ɉn[۠ϸ2]h|b6F^* ֕e""nVf!ou6fӐ+}"ӈ{2j64uP+RIBhJ%Q 9r+\/QQbψDD"xJYiE%̀P]zlQMKzR H#5~%H/L; _&exc"~6yt ;6z<_N+?ռ.2Ȗsׂ"'d_".-E[gY:;Ybh۲ܶ&. & 9Eo6}n<"xu�)T;]쥙W+ӧQ<Db{|X!Ȣ5,'(6r'&y$B]<>*oi͗*W!E5a+NB˷  K{c/>rD_uks" > խ!߸lڡ+4%rR/v13B/ bI11JJ͆6��D�cQ軁pA:BmjVͭ~O~ϟW@H5p҃ tb^fzLQH5`>ϥJH+ӌOL㉽fS!�<8�)R8)to::)O z8;Tה?nTx#eԬVMu,~.|IX'SBR_"D.Z7퇒.L2-D=٦ R4,ENN(-N�L(8c3O"dcG�g W;}{-Yh4TY }g2VEQ!lBBͿDd@;rKyIjYS$BNh2ks{!__7uA)2Q> l9>>OK&sѦb`'jgm%gHFx*B@eC@8:BpaęD+$"0J;2}9ݪ:Зp0d!ɽ.=Cm~ebaŁ$Y\,k!. ֶUgQH3L;W #Hh!8؉aJ8;/G!ɭD Wk!(N"'Y�B!`Oa /b%eϧlIW;GSD\'@903쭀͛ϓ<5IF0l$Dpy>(>mo69G~q.e/Iӧ"A[+TE0}&<*tőXb+2>a(uUx`DR !r)_͹,rs!{9:<Y8DŽ3*jlf8;J7TN,$"D0Vd%!9!TBHja 4FUHLi"7)a-b coE_m۴}i}pѓN㧟|=] �"a�8(cId3N^0@CsEVk8:nU@|< Ҡ_t_~Ouͧ8ا:;Yΐ$Ghg拉1`9@N:= 9v'Ԍ(PӱЂLq2|, t(iNeJ�rq"fZ"BG&E cȩμ{A_ lK*ma.BD2+ \! D!t-6" �艐 c[!L!%p wR#D $l$Ėɹ {PX$`ccg5.rRC gj�``'p`!2Tl"a'5B 7Q ĤHD$5EB2,HW]Vcc!Hx\ LBI5FO2VP؎l+2+rvfH;GPO!Ԋ1}w$A*aC9;6! LNTˆ/B7GH@U&"@)4BExiB8#vNi r)DvRPL")gglchNA"x @pv*C$g ggWrs9$ W8;j:W0CbB<@ !{jdNPdA!ЈOW`zM8$* afB ) @d9x~AS XgK %BLTB.B0j!eÖ's F,H2s-I^0 sI9jg#9C6}uDH虾l�0J9G99 L֐v ؠc~ I  r9{G+<_"bq2d> J''LJ<_Q6}M &["(rRԊtcn6}X| IDV H|ZEgAR<?c_ /#$'x M d.Lx F4HH9ͨ"A!j{A' QFy k'KnX͔j#A00!WmjZݡZ[8 /�ka$$HHßH@�D](B Du뷻ϟv|sz7|yrQlN`Y=n#z艈� pE1oA(v>T/#!R�j$D@@ o{:]W_yGb_W0M`퍛>;\|v7.h(3H3H`}u˓[&="#!SbŰ$|=ؤ&)Ɓzʐp.G6.Xi?`SUD itI K6냈F+c"v&3+l!܀"L`yH|b"�Ơir_୯ᙛ :UeӢF9;)%32᭢m1Wcf[\>UjT $ט.%BS D@9ȉwj<:fx%6Pș{B"CLIA16DLuzLV"T`C1(n2FXl@d4B؂ O&46T 35/ C!DMCEa7g BdZ"ĺ9)9 >jlƆQ!TsdoAl|"$,zIPRMJ6u9":dxnC@1"(:j :T@!B-otI0DC YCRDHPem2nNc֤>$B>󡄷C\J@QKx~Qi(P2L|k&54H\GT$U 'R H2s1kBtT$I,6,BM_nBѵ0TstMO:G+(L_AH)`onb|H%6@[Б\y?BްsDEu,NcC%y`0+ϋS�;gD5WGmQ6>(p!\*Bۯ" D2*!9z$X d2 5 $|HptSLGǀcP'k`kl$`I$k<vq(l6mo>>F"-t$Bi0""l"E#=6@HHc4 RHb$$"jGWm~qmz?'??Ϟq p6Ǜ]M"bw](4شMhP$>gL�kHcLJB1P�j B @ajH=@U׽X>yxo6 lnMi*)0G! =OA4uѩ}F1R>k6aߣ\7V́((x2` 6WIeZ̵L)W2>_B^<BdK`Y.Jd)rUSޜfuȃeІɝg GrޱKk**."E aѷB&*R۠%ѯaN]y4WYBk⢕=Tp0/;T˕X_ϝ4r"A+kٚU[+-��Sh`b 6:](r7/z6qp!KDNjegݜS=2uR$pm q!�[*>)NISl_*uT,tH:NJ| zu܄=tvѩ^C 0MIzN:e)ݼ_d>./@B><?/k9%> Dv x";09!K  iC!g_QNSbY =e]*+ž"On;G!,qDE8 >V|yȺZgR4st1Αs^2(\d !1>B O=]O1 VB`:E!N\<Zjop]an�˨p_{ VB4M}?,]1D0;>@ / 3=ԡ Q@`V]8nk=>ywvϻYon^mGD!�QCO! HF F7d\ ŘA| YÊ �!`9O"Ba0GGmڬ)6NFT|!LWrQ�d?G&OGgb§P n΋0XlLhC>\Kht$ մ q0b~U=')zL+)%r)CyshS|;4Fh_x)|XHϷNNe5S"PyV'NF:tЫCxj`+yz_ʚ*4qQ(|L FKNZXH}yh&ϕS?ЭKd,�DQ[d;hj{P**ˁ!dܖ,$/{j [/,By)9=8{㝊t>s8zI7\&:\uH{*Lgʜs#Ys1%`U[ҍmxd=K\[cP{d=nXHBa/g-8|ZాEVN"]Lz yXPa~ɟDD!Gg1>)Vջ=WE0veW%ivG2}( mھKOXv%GO3#!���IDATaϰя^2-Q`kϘ Bc#]LMK^`*S"HxF%lݵ/'Iߴݗ9nj1Nf24(dlaq\95α8+%|J,mLY;PUNˠBK/˟+.3MI{P a)PRTaaieD)0̓јM2-F&ـZ1HDz#!BsG'콟x/>|ӋDՄMӬ�0}O�! а.9Rh<úk ϩU `XA +z@jWxzk+NOVM`<Ĝd^yLQaΌ}6,_,^ZsßoHb-1/Ȅq7y`7w¼ n׃pyYZÂK? <C2)O*@Ը8C~LGH!2Œ\~ Y!fL.5!�w@#Xj1'S"�X7\=-7Nɩr_ZB. bHyٙ9 @&ح{B SL\W,PQ Xr '(N_)" D";XJUmI]HcgRUU\,A\+ xkT]HZPή0}_>ONkr.$�uk%B\qԪJ!ΎEX!(R:x(5Yc:$ :;vz_;T̈́"pbHl`5`ORO[ _lK<' ӂX"/rvʼn"LW>A9)" ھSR~+�Yzŝ@ !&q  H4 ݣpdx  `+$ckrԱII!q111@(6}b$u<(@.6H]S8oil"LpPG2va`%u4}ٿ  Ncs"Ee+J)ΑuJw_楙5{1 9CE4n܏hɯ?o̽p8.KW kZ,kbVfY_>Qk`_ieSdtS0VU�+QbnmC(y xsvDcqjYٞ  fsz卣GON|>x??]lu<mi6M;*]vq|0<gWɛ<#Qt_2G0@"� H U>yNNQM,GHLϥK.,wb5sKMHʓ@_*_F掁40Ɨv@"kڴt(;ڔ7Gd! 0/"W&3r偫]1}�BVD`)3Qy* -TN2,ej/RG3Q�|zSoT r(eLg !&"H+ilyhG!Lsx,?!$u"k O$BƣNJHThz*rB DJ3Nv gxKb LA�ة2RTJ y=e@ Qi``gIz k'$ʃcM_"!E#"DہEQL 9!lB3E"L>hl4zBrN5#9=0ϜO8 ! !4 O2g$"D\P !%;0A)u Ҧs&)3"D#|8ҡBuEP8Ǵ;cQ%g�!{jҦqv l錹%l(,G`p WdE@wv$فvvZN!R8;aԬ/A+``%K $qoA%H$vְCQLA%*J/Ze'ΑOw%IyIHJ!%(,(#C*MIT$Yzf�<6g'bH 5H , F=83-6b稣 爜(7taT5Q$# ϢLI('A0HJ3}³-s,y~\`P|Vq:,t$Zy6˾8y~l0HΊ=(DKA.B <&W2*D FHVZ^KBɿIecorNwET<9ʁsF 3H3*1GD0 s\"ndg'rđ`rF6`].{c{á|6�!m7ͭ[nݺurr2*xͨ獣k >ًw=Wů|o/.ru"^o65H @0z}AB𗮄ѸKCavH]kW[j[<~C2W$ ,RMFLOy9]֤>!?z$X;{0_UBEOOT-&/^:ä́[VZ?qk%B]dCkz "cںPh^ XfmZ;+ UO*&-'M%P<PQP&+HX3[D3mYO9Q8 s%ا,YƔ%Fv3<wj-2ZTIFßSo�+Gmv 9`cJW'/Z)PHZiZU,+~yW2j68ڱC![x5+? /%()V7d [jW[dF3t wa5�)BkY.crO;;kxuT}JdUHI KJ/`1w]כb|<h_~�CAHjS#TpO:F KR5A> JhX")L8zVه$ Ήlm Nknj聍|Bū`1V1}�hT!uqʆd`;6C 4"1_9.t"gA.t0<%~$RYQ%lx~9V{N!"; q? .fϗp !JΑ}'t4X4gf3%B@Hbx"s"w8eYk8G i<mqq+[z^=yD;_"V2 m4M%_KKQ@\M=޺w'uٴj{uu0O0`&8tP �H� ^%4'27U5@�؋� "� "^�twﭿW7Ḡ̪}j5I!S|mW^*f0s݋u?kלrwx|;wo_鹕0ޘH 72[74KL^�wKy u�P=@5 _%N@6445WV.VV-.ҌoooE !:SW-n)nИf37x@r <*$ӶwBd[;%l eJ #<Tn30Ҕݞ#P94L\"5mA 2BRws{K䮋Gxw LG$. V,7C!أ]b Tlgg7?|BE7H"dDE~o Tpr>8{f@�;G9:;"8:*$μ!g>(V] ZP"D!.Y=l?9 S+#Yf2bLӡ)A-*&Uőћj)ęYޔ]dqK< J[fpP A<$6�$B`ޘo<)壤!Uyf«q4B-/v!5gWoqtl?]Y" ȕ& BEyw25@ݖD1?=IF_$Xoe,5 0w"4 %q =]N"mcDE/3W �[':k=onl*ӧӦ1}P d>B欽fW,- Q 7 ϴ. lRbCXO.L!>a!${Q>մaNyƠ::l$hMq"솓lZ"r'մ[عF-ER4"1a47Wo6zݶpv2нfݴMˋˋWWDWǧ__W~w_{ڗNN|rv..@f)Kye/ϐ ƠlRDD#žoZuP@İ8R/q}. .tv$oEζGAC'Ƚz&DF0V J,Gi& iF nW $B P1ENU?Q1B~$gH)?~I7GˆQ %Bݤ4#TnqpZ\k[-,%p3&ݛZ<Qf 1�q H,5bL`S& ˭:LwyVԝ/h-ɈFB2AV$ģ0e9eٓѝ0 P %2!HTOY'A[#c*<Y펥"OU qȾjn6TVS'_G!Z5*ԕݙ4}fsd=%kp7 sWI&�{ HKEPg'n9>A"s"h:T { rTq!!x+A5@)gg%(TqvMgϓ^y!']a)*3 Pr粽)FdkQ|.ˣCd* Lz,L$BDrrZ $eu<<?AD!eQ$~<Y٩  gW65BXd/))SUmIGO6SĴY R 9.RDs6}5[SUJQ,au1**moV|EsLLR`ϗE:S)4BmrOXJ OCOL!,x5}%L-0}EQQ|[7}(<^@E˚x'ߦ^l#[i 0k|'M'¼g|XSY:|儉2Oq攚pDO7m"̵Ni?+;oRH,$?/b^XjZnn BScFkh7p{Nn?|rcx?~~Ob{qW'x8;XB^D4|0N$2I1rw*b@@0樹;M7ӕ3e*Odwv^*MlӐGW;~# 4JLL 'U)HI꠪UMGJRa 3;oe3yf$F,4.dr6ϟG vY>AZ _2,\!Yf{R �!4h*+kt+U_{rp1=tBLg-L:rj?V]me!Y4{!0Θ{:)�9܋jWY"#2fb%mZ2QUGsqmn"TWTE&@8g'MLjuAT�X=X/Eա&jZjk"$\c7CaQ8B>hk"ۗo2IF.y- Bg'<wvv:)8*[Fze+ݏ<J:$H4}Sla !. 슖م42Z+}-v> !(F)2/!AF.^~X4%rI-dUkºN1mCJ~6}j˄kEZdU?y�asWEo2.P!&י@/Y7 OKy&Br\=.6}_hc7s*rV$雓^0W͟ϯvlGc}/EHE9ǹ"'>0PDZs>!j(N_k",*D !݉ |ܱ4󰠳m["jfۅ˯1 gKyvaӄv=vWb۬Vi�>_џ}O_|."! B:�!!a@�ȿ K:A$D@ @"RġNnz+L.jȇ/w|1\k>> i4C`8-;"T6wRYҜ!)Pȣȩ:c1"BB:D?Eul5d0%a$RӦpjܲ,0)hmgRӑ {"a.BD2K쟬Fdb+V j@"6qͱz"dxjs,biXͽ.9"=za=· 2E @& rg!B@{g�s84B8ȜE!Rx u/ b!jlL"$ o1Pjf )l$րG,Bj-^DS҈d Mؠ#ہ!ضȗZ1OY]Ngpv_B@>"_ J- I oՀ!BH!ShjbaF:4}ف MO5<:0DN耦pe7t>Θ W ds40TCLSދP+HA0TaĄ y>bq!C!ɜ7]L<_dE$* bL0JUS3UahIgFqEJ6 \aBt* $ID,H2L"DpA;nj 6}2 ߯3(aѦO9Ҵs}#(5|2P9H<?!ĺE;@$0qjy,H9(cs%,Dp4dX HЧtAU#D6}N$lKx7hMqM8V| IDV H|ZIo Jꫥ H|oqT $9!ċi!s`rS$S}-HӡP !9O*dB4!ġOEI9{tv'2�ڹ'UC,}*yv2lZW`H.uQjն+Ćvxu]_]^^|s+>ys߾;{wo~ޓ77auѳz2.RGG1EHx,{>-~-id� D0 ("�N-{nQL>np(eI @4"�G)%= D.ls^d$t|tk Mݚ}b*#_[*zxȔދ׃\mħPLj˚*N|Dݨ+M?M;s H68_S,G|ghN+BEZ9AYڑ ra9Ņ%ikA7B%SMj /x r 95l RdBy5x'հB UsH}xp `ftBiKlmfumF)  9Z<,j.RcZ FUl!(4qκ-av+SNC "T~tzGJO(PTJGt6|[3 CBjK:_*СZ]T[ҡ{Lp悔|O/M hq|s4w�*vJ$yƖ*\PCHMuxZk{-EnYY&gs5_\`7}stXNiC7SC`;$mLo=`ld[/rN 1 gp7EXPEH� :4AVN`KLٴsD{s`c-qv65kXT[>(SR]7A XۤxàJ"fb Z(uX;bss,uzܾƖ[8*%�=m <y4 /Vc׾CHi6q!f4YHt$ �H)vckxrνGwڄ0].#uCA@!`I1 "Q1FZg[_ /f@]n;zƛ'=r7 v }H} a4!_rި{_̓}5z( (6x[ܹ{{U#u"]@��<\<=VI<!N =�<C{<0WʘFPtT+;[QT{9:'ŒYI91V s</OV" BDn*Oq Ɍv5�`E- <>"A!6I$H\`CᣗEWFhA.�A~E`sFZ痫<in#; l |ٛI lo^ÇmP]Į2Gp͚-oS7)Sk ])(!z]/Z{ KR!}k\-Vfvv !�SH0}.Ҹ(94�a@`%B 5gT "#)(B0U^�BH!- /\,urB1<F/u,.bqstN%-PFLG/obgN 'vs񜣦C 3*LHoJg%x)֞B D&<_<жSv�5V<4Gkeէ&HJDr4e!hT F-bئ$൒cͫ,".D FaA} ,o_0F/>/R!g#AOx"4Q>#k!Ow"v9h UPac�9/s]!J7?�5'zp ^e_> l_9ǹ淧̉\7}f5#hϛ X]. ` BX6cxjdYs9„s#!Si);0 r)u);>3?�t$hI'l9 .4}S,VDTES5q:/\AĦi57DĶmzKjw]u0  C1a8ﺸ#m4 mܾ8j?wq;o}_7rrQl.zx]u/vEoc$w{Mh{T=#ß`Tt ��" n"}W'xѭժ}F1QC?cxqy:@@Hpџ/b1s22 T930o[Xtز8w�;SdbG ɫ(mɂsy$r2yQW"ON[yUd?2-"[u Eڢn*LGNm0IMgR%wިUmJJL|L޴AVBHV@SH b1 Le_\ ycIB ڡ&KrĥBH)'39#DEo^ ։*J{E GT r@�PN69J#> r2gThlr(B!"krH�6�%BG9BApmgz(>Vr8$iV�&~VN7Hvrvb& [2t!B|~^fByΑN#_B`!n0-2܁;GU#WС{ :$btJ˯>TYHg'(vv�89GK[+ I')|dq4jgg%B*!6oB~̴_%B D;T"L*4'EhWL{$SΜ|FI;o#-YT8,fq"d ?3"-B IJmgQ6d <jGgsI߫α B`=R\H,1}"KR"6S �Ys|*AN* ȍA"h`WD9GUpe$P/Qv?^Ϥ84sMsTOD��>-<,Ȧ߀ 7̠K_OOreHn?c 2_ ;M9GQ 朣CEպHzh$*T$(;GlLqL_]dB~fAe7>h n�+<Ψ.PrhZ!00;=m. MYqdC�9Oqz ]bfuzrwɭO~}gg?ɳgrq 'tzDl iCm@D�1Tv3\0-Ey .D�ME_7nf+nk� qC?E!AM"S!ppRr(r(r(r(r(r(r(r(r(r(r(r(//4)ax+nvyeXH�H/Vw@aiZІ w]]صh:W=~o>ɏ~ދnoe�5m]1"uh'ЅQ^ @  _ mvWW /ݼWxp{cuu}O�8,{/Sa'#ٙz�3%Rb;m~2% i_syUWGfbš#E(6w6W;M +yuNL'R_ym$j*u2r:X*k$a36a@&~kU=b</O~#UHP2'i)b܉A;"Dm=G.Z)ɐ,BͬymX*zHF9S6l1'ς/IE J;Plٯji8�603Sj͍^u1]x;O6 [!r{p/)/DH-&(4ɖ[=�v ~g,BڬbqL_ j}BkPKv_rk /)" Ofz !eI8"^*kXqAXޱ�!λ0$B@֢>WT@B"ՊqC6ϙy6\ʓצuԲdat͛$Ik@Zos�JFEDD!F^8u!R8;a| ǂPM^KW|ScCP0"CvFZ . oϗkm'MM?MER͂?e\ I"0}`CJd%&cEGRrYgBHKvp!$AXDrCG"yd:Ћґ sˈM~ EUaT>!#O}AX؅s$6D>Y$إ[ W|ʰ,,w8ss,-t$wY۹4#}gSŋTDM_mɛR@UH -BۃK[_GH-D&h=},J[GH17'M;"Mj5g_t"rTLM&UΑs$kl*]>87`X7o鋔Jb]&*t(2afwWVT6M4}*1tEp�; A)`նG tn=Y9}~ww~wo<zӻ=gМEeoux/q!?�H!&tqݝ/?{Z:q5hu]Oq )eI2v?StA=ddO}x*tpcx3؝0_UB}E'TͿ;#|zNXsT&]ܫ"]e"fZ~'>Ku B`y26\;'T=qH4y5v-&wP<PQP&TQy5Xt&x�t[qEF+;!hrq~'' +aQ틜* lOQ+Gm (] !MmF>)SfnkgWXVDh@ @%4lp2u"cdr2z OQ諦%+h^()V7d [jW"(7gP *!-k�RL)Z;h܋3uvb�EpXIV0h .g^;ήh}1Ww|٦.ש>PP Hj ByRԹD !B E#W>pZ^!dO$8'!XpA=W}U8K87GY�m|gwyXsS6$۱!]]ǿۋ|)X{q"kϯu|bK#ࢩE\` Wv՞S3}u!.Mٷ gv1xDH݇ lQ}U}6j ;4X4gf3%B*D'~_9j7e 朣sFl@D2$:mz^=yi8CIEyp-om۶m; ?w]g6 �pJG�L ��! 7b]D"6{ݺ{ѭ;G "]+v1-b�:@)ވ37C��Cx1�|=u?jV׭tn_4:E?8|Yi6âd`.f03I'^wm^_%; ;w^Us+at�<S z2`<ubn/ijzIe z eo*-"+rn//s{/#ɒe `'Bz!OCsK ?LOE�\גnp1WL#D-|+jq[Q1 'Íj6冬? vE _ WG Bx6<@#6H"Sz_{hk't^0<3ONv1$** Pr )8HME螹's"ʑ= jn/dx TS&R~&?9yg)gr(;PE;C_b0w9q#i` BX^")M&!nF8|FĪ .4J;B`f؀*"%B_v@C(=KC`nC>HFi:a;PCp vp&+iI.5HuU3)!3!$(WysLm}C(YpvrQQDLl Hdm7jҰS $W#BV( )Čn?`΋Qz �N!GHjԛ#(ͯ[~5wI#MBdR~P�YۖKvC4{%= jWs0 yWsE!,d ؓ1SeCd U |hfR^:1 Wz"0S(yH03| Je Ƚeq[,�cf`)yCrLk欽CI ӧ6B�nse0}O Zn~ 4 WHIDRfK$N&Y:B}$B I#Ѵy\ &�@FfF!n>Mb 8ڨB2I!Pt`pz7ah @haB"$ 5д j* "vۋOx>_k[/{_w|kwo?><}q޳_^=4 G_@r4@&}yW0-ڋvx.n`,N']1i `K*}A96 ڤvlY9|Wi-oʡjih&)H8[I`UV/Sdh[V?ly'!0 -H9S%7$bFb¹B,Њf0< 1OqW T SP 3Wx6AMS 9 0CBD*KB敜SCBȨ"ϪIP _Tfb+6$8G,ECXyQ3!W+[-*؅ݨ:;e*ZY]�颉ֳ!0p"Gs'5p?"Qڮ^쒃y:T \AHĢ@"ٰ"T0}U] ?ybl|eAW+]VS*tpvJ~ENOL|Ʃ gE<L�@!yVCpf1R:(ќPY?!ŐFNػ!'j!VBJ3!nc7\Sqs'AIeY T8 s^K-*&=ˠ&@I[9X5KF'E:7fWL]y$X1}u6[ H&$O45ůSc~P}*BӷX *K5^Lzq`ſK8hA0fMMצIk<_G^t^(G5NZTD ES9jMΑ;(eCt.UʯA l�쁐 C(fJKz4Ͱp- CƑ= iBD#Hû`"VbvnBpvsGw?wtjn}Ǿ < ,E[(r}+ٺ4 @!.w;۷[_4-"RznV~я 7͆ bLC+ `7$DDPEh&*?C9C9C9C9Ϥح Z8[ l gv2-p�6Q)s[K'^I27v<EV3^ZԨL^J)J0ڗͿ:Kb�8 �/WzLT�^ =vp>[xCPPPPP~˾C D4jnD8RK�>nxumh� BD*znb߷ mXǷvsw}_Ϟ~={]\owvBY^9VϧP @@ �ﺫރ;ou7OB#g�, @,vKWW.8H<0|Q3�lƌAzV׊䗋VWptg\][(*Ϋ&oj۪=*$gSD *W89Zy5K5Y?XAHdI ;pI`KI3m7R w*MMOA3ޯk7*ځNW!D[oP B\OS| *PZ�5A" \ӧ2k+9̙ie\V6̶ㄳ[ٙ V 9@2k յ(] .{",|>Ok ʡ/w^45h$r/K;Z9Yv]n9NĀs'_J.'̋ E0$9s DEG^b2ʋH^`L ̑}1dbO hT$X ^ZFNWݽdS5MSg rzq! +WXw򤨂ׂ"yoTGX#AcJ;�:%bHPcRhuiTS)!rèʡL̯l-11n`|l�;=`@Ā@@D}0 H@cl b qnVz{Oλ]h1'\ղ9Ǜ.da{r( t}wh<yYrS "#: $yRy~r(P$o26=K>�I}u8ʤ1Llԅ4<9=nD3bY'R3idZ%޾B(o+\ecXn3(39a `I? q̈S  !\j kxDbfÖS}90q`<<!OUSOT3#/"M�D`"#y;<F._(Mؐ| jݴPx<j툲Xdl$BƆhqU߂#`60LU2wAeOO4BH"!l9wLA8; I6S(lL"$wRT !K~='�˦nPJZY&] 3B�@ !0\!87o0k@RB DXY0{"�Vp$}5kjPP>O%vǷ?_^`V{!0Fa}T2Eg%G0H,#A]SX`(s4( L~`XtA� |]9&.'q&$YQs4uF)$!y26 t(]9Aԉ,VPzTwyE`~f5̙2) ZW`q>gN)f~$MRI0+'ZPܶg<_\U(g$W#SRH}.y~-ũԀ:SCݐ'\p#*BNW)LS @F:WiR+�)t$zlͨXO^>,EPf$1Y4#H4!KMVjHp4M =�q?k]#ȉ=@D 6c%(� �H'z >jׯ~K?h#xϯ.صG- mBKEq0ڡD �MbNig= ϥ~ nR0xF!]hD4(kA*0*p=jG=5B|JXb@ /Yp8GZɣ0;SDWg>dI9Md NLupT*B&4Z7ٙhTQ*F Z6x]׵|ozh5/s#R''̶5gZ(BE}#A%쯎ά})ں*J:)>NmD77V;K \sV\`yiv`RRAdw'ILUNW +*yx./뗈+ǯP"e{@WOZ1:8C9C*�Wᇫ}~o!ep&E|pNEsY.R|3aetcnыe<6;j<y_usZ 3JX1ދ8i\Y|{x_f"AB_F$X LlpL8/),M|Ceu8YL}#8נ!dyX$f5 }iRʞiC#򄳫˵!۩~W!qϹC,xwan`{u}컡` qK0P@D)RM@8L�&a ! jд;wΓ;y{??xӧl۬fVu뺶 ժi"F �#�v 6b@Ds4 @H�E$bϯbD4]=amu�ͪ=>??{q7wo6!O6S�ɉaR"O.iڣYmBC>Ȳ$R:k9A~2*Y | _PUɏoSF؀6&4x36kՁ<irno9N)bڣ!M>1O;N;ƒOsԺTbڣ⋤B8NʃQX5tR>'zetf l})nD_U 䩦E'$=w8䔀BGt㐘Hl1Tx棘.L <H3A[TGƆqD0+TwaY^�6$B<Ulxk;`HipF񭵵ӗS'( vpzHWFLU^T JRb7C3a009utltꭳ[xcc@.i5 T{@kͿ9?Vp>C9C9_~o~oh7:[oTCt+2I;" B&8ݜvv$~`>M$S#Iv2wO`9"L,q#q/$?K`(E\-(R9G2}$Ty+�9j04Bd (=Hl*T8GilH| H@B 5DeHĎ24ItT6 Vg&?MUAۛMx/`IK(v Xd 5!sRI~#dD*^e fҤbݜ7Gv^ING\A9F2EE -JvCdL�\g7#(P$ݩD7r(?GuWÂݮ>1HD4@D#Fy(dQ+!���bǎ(ba]ڶY7;t{?{qwur{mfնi@  $zlɡ:qs8M y3L' ~ODlC$"0.6'ӷ~I@aؚ[Ϊ֣t!�Ai-6F8EI~41(&.4P X\1H^zr(r(r(r(rrͿoKAf!�"< r(r(/E 1BAgopo8}oK?c=~Rʡʡʡʡʡ|KM@DT�"QaױqKSBccvj9:>>:~ɓWo/~ty8%Z#4Ta%s)wA=�` QaWmMH㰟E!�!`W }숨/޺۾o;6 U,7 ϧ%qbD&>~J/ROu?yiZ'e<)|b^7u@Nc]"bg$g$NmLi&8 [heILnRbůǾ+jr| WL==y5[1Bkkm4Օ"ZJA$/0TDV |~ _;n3U ZC8٨!k7(≜fL*L�ഌCUAHR[͝" ڨ īWsv`BՎ(VO۶:/-gg:&wRb!_ A[@;:Rg/!.~~=x*д@}fC9C9U!~-@̩v?Gogj4a'S\r!u}P[XCP־sQV ~+ǭά/IQTUA^b\$#AX6^9GN+b/ _; \Aħh~0% |*Ƒ`̺<Aݒ2D&4撈;0"0Ѭ\I,X"ċ  Nd<jð. *ZiTLsr3J+viwa=)yTv  n$8"KH: j %N, B0Uk8CL^Vy�Jo>j|>"�ahyf}p'z~g?~ۋzu B#i6  �R R$q,b�3R8@�a$`Ó/>=ib2"/1؝.m{�i�`>/E V?7A-aPt5(iTos3H[vT6wң+iW!## ϕfz�(Ըԥ5s2c"]P͝PUU(WCy?^1 u!ugyI Du?(U;;#E!@`"dr!_HCeF<{ܺGso dRf'f$nBHRmH;A6Ӿ7Bm|Q~& W0eW@ wWH~P/y^˙@ȱrvKz6 lF7B \a&D`rCYeIqXEks!fs'A^1'4wZQA&; i`gW3}QM1`,  Bs.Bp!yPq0#4nE_!to~8z#Xo F|P ^]A8��vW n?�$:`AɨJ98DcJRњ2@P9G(%BDXÓc9aZQmsm$L;2W¨D�L�H&@v X̫1 l\('W)֣@+`q8-]%/E6)xB52)14 @A Wx> 3?!mbHP"G2}&ő! !<vCT<<_ ϭ $EPBĠHpbW*jTۋ49pc01k$B< (Γ&] r(<LD]v<^}A( pn8i_< �pyyqyu4^׫o_}[_z'g=~6�MmU۬v�0-E&$@"۔n q48tI b4}c@H"Q =~r/=| Bc? 2ꟳ�nן_\]]]EjP>E-%K .̙< o-ͮárbfLpr|GL:G`FB; 9-Zɣ}ן Nps*C֧1|BD,]ʕ:YUNhe!N'{d5Ll@% /q?% X]?-r�zOݥaLcM ^5h>Y_Qr79\40@evNu#es~cn+j!UF]:<X'6J�K:P ְZ"pu@<>|w?iOVIx^i*?^B$9jW3q? yx6aAr2kQ [(5hVr''T1u%cZ4pnlDI ZRT{2tAi5+|/F~i" 括�3Sf^EfR^ENːs~cD>H0WJ|)TݒNW$Uv"p#D}:t~>C ""b۶Mzk00}7%vc !m �}nۮuUۮBuyc}O}g}/"ufuk9ž@ a :MilX!a&�}6}1 b}_uW|_{sa��/d8w=l/6!b4<~,(?wa=;r*gA>ZC&:MGtD% �RWK6XT[>;0fQV[ZPQ9G=7YkTiIsC?+݀aÙ )8h<{XNa`ih:/a�@ r v_3\\$>  (DP2UrBIY57˝ņk S< (Rdžhkx lj<eS8BZ]S^b'}xf2(>B@+kstDgQAv@H U/827 َ]@W6#1~^w CǷ}85n6ʡϹ BoA�w߸ۯn-Ýx�ug͓"%x>`yKQƋR dҨ/~qH N)sS"֜q2qg}M+jǒ؋a 0 g0BXȱ*Pp$8ڙ(Kx)-m&f"A lZ$5* JB TM}\a@t0XFe4 -Bv`X)#r\$(>v`sOII=l']P`@Ӗɓ'}=(RiSi&,b.4�m1Ʈa.#u}"u]I{у޻{ 6=]>ƾ]!ap)W0� PvYF''X@�캮�B@�;i_[G4[X"4iuJCe%'/O?Oc i b V 8&=&mn oPsBH{(6x[ܹ{{U#T”jXPER%,Կ;ˬ!&nM5bW]0MR<5͹' qE"W~P9S;֋DVWXmeՒmQ DЬjAt/DM@ο@ h29OɊu;9͝)jb2SVʋ܅�!3F‚k ŮM&66;g�;0 �z{;U& ԛK3 SΤQԚEX6Bp!;F)Jכwye/N`}Zr(r(6ǰ9.ϠۙStw]ֿU":UyH1 3?,"A+]cȋE^"\$XNoB- i8T0;"lGᓷ0 uk%";"ԨPyzy !† e:8w_W..lJ/CL0>/eeq UHK"X.{VK\"^ [y>iC9_;LM/ ^+}04ͰPBDFcw+p6j+歟?8{vyuyI]:z�1"4!:" [��ŝ(H]�14! >7ǯouh3NPfo|w ، CkEj8?I[5Ӿ^0`"~|w⦐O)\= %5Ay%W8 "jGBdY?jFWF�HP>ׄ ۪R_l ȶFneVIdj?pS-3uS^H<E\҂<┤U{-kN0iBY~,H@E}.)*狣8[J \D_M5E<j \I]~hhۄ%l9FAzN+3B3"\ÿɔzRG]ǣ5 I̖+@ ]^^q*R,@7@j@ (uK 3ByB9goN#'/.Q KTbl<X3ǷpaPPE>պ<t^ }'I#Agli*K\%Gj2*BMRd/GH0*a,N1^mQ]ގ:k9!ԳQB4`W\A8;rcU4E盨F"}눠 JTrHcZ<`QS#MqŊ.b[BK=7{ . oyE a9YT'jI_& >Vsl 48?s]_XV~ \+ ^t$"D[Hk8qLef/HuvS"Mn 1"�[i-d z6fYVժmۼ,`x]\\\^^v]ÙziWM!F�hVnwqq~vE'oK~?W{o~F8߯vv]nqo!(6=S #`"nPcGYaߝ'o||ي@$=ߧR.ECh ]|!*>" "~ӵ2K?'?/Iˉ (Qz I/gg;)O* O$CgY\W3>UxyzґZPŴ9n#6| s0!L#$Zbl<$ @^[>ȄbxY͛ˠD(QQ!lkdripDH`Fgw™ܘP<#EvA.u8 첇R\>j$$P͝A,Ri !dM !3";ftUk(QVե] P ! DH#aahL_rmʔi]a�*Lv ĎlSl=^nřXFHBgf\cu}6g_~ 0{| asC9C9ɲ>lW7.r_A")Ⳉ͟QЯr$mFȄYóѩ7?eYkZD+nI)F"sc LF0ʴ&BV+]>YT*?0 R@iR)Y+�UdotɍuCP #s*W*[SJqh�[mkm"Kl [ fݶg<_]!cm9C/1-s ²8E!>/e;ɉ4(1γEF}61~Td-w]Ҕ1gsӦ8|(!nJdx wm6ɐ0p n�O}ȨXʡ|ڶ]+~1oVpf^< ۶%.�BhBڦ CEm{~J{rGo};?/bI}Go�1ЎV'ٙ~D �}v=ѓN?xx4 @D=� Z[T( w6bqn@B@@�7}^OGy8<~MH\Op0G$&1#oH*@&ӣ�`2y#3HlC`^b`i.qeRǃR\Sǚde+α<G!PČ:@&#}+lЈ鋴ˡJaX#Bbe3S"$^pDI̋KYҲ !2p=GT;u�&a7p+KHTFey# 0I)@p&PI;֣"Q3ƶ�[Rep.B25H1H|7!a!*bY4FH鮟4.ɏ"70M $S"Ֆb+B6B�鈳v`B+( DkPÙr޷UdƆMLPbv,�LS�B%$BpBh!啩CJYqAWlOvNaPPeiYmc/(g?oşrxɼ7'AG}KaHI,"A.�Q_! Bh#)v9bvh [*"zUOrU*8e`Axy*W cc ᄜ\d Th5~3 Jϊ�9] rgʐپJq,S+FZ7]g"gS W y Iq mx =aF^ rgr !bK \u0H6Q�!$w(R9U8iRA2 BHE"dٺtAJ3*1GD:+Sȹ@\A%M:*V\9U>,`X7o鋔|67"C9/J^^7M^ lz^VylxcÐ6Nb1Plcl(wb۝u94/n]=~=; ?~v+l._}E"b4k@})"@ޅUDuݰ◲Un#o8C۬Bhc;?:W_+o7"GDl �"cϷϟ]^VQ۬&Hl_B@ ܞ񃈘'Tj-2r̛4g}xr$r&܃X'P>^拵JA'*$h+jW'nDlwF5=^7BA hl<q Q+`gE08Sr?Р変ykN[CG!B7s (7'8Յ4m\xuy|&\D~!*}ʂemLYIi a`7DQ `ˬ<^<E qvl(`Pؘҕl "#0r\~Y,:oUj @%4lp2u"cdr2z OQYM4Hj.`/nh9`s\ʡʡ̗X5u>oy' fܴnI' I Sz`#n2/ Zۯ'y2b@OZ RFQB73hS/y-HX枂 Yk둠Jf5Fe*$H_k!!2BZ`&R fxDH݇m�K:qA@ե9LI=F3m(YD~WEaINƼs? )DksdxO[«'O oZ=CaiCm F<&hA@HD(F HAiЇ6nNwVl>}j:nx=q!!f ' 4-@�D=�dY^�6vr|;+kF( " Bԏ:&!D/|ӟ :m[ot979Usq` p>_{pr$lB$$BBQ x޹{{Us%xcjqN[ J73+_D~ *rjԡsky:W0 o=*E{:H˪bjټEhd[zqKK[YHduw촸Jqg/)4 uj6;$9몇ָ)|)";b-w'/m9DnegRi 7q]P�U&LE))U,raY䴈>{%" J]δr"ZT %)gpYQ3�*mAӦ`qO4Zd 13SnH&E- A4&wn8VlYX?wi}XoPPPje}_p\q+zO?=o[V� )T�dtTXYu׎fKXߋx? ܱ=d$ȳ]OQ/$q\fb6Q > l!ZP"W"d!JZ T v5u 7i6<`<8*:P<r~f3oY~bF2 R5!C ڠ/B\I|՝c 6Sl̞x",PsRA\8 ë |�Dl6@� iazf-0F C\c~ѝ{_{_}{/?VjNo)n" #/q׬e]!0|]yؼ/7NWa`$?}K00L"��./ ucD"�[Bg'(ߊm-i N2JeTjx+5"$XAUϣ5l~ܻ{ROQQVsZ`%͒"3HMƳ U"~NTT+j)N 971fBt+E<wP(X)$p1he_X�)¾LmI3vSU9Yv`w[?2FnCEw$dB lpBY'<c*iWOk]NMyN1tkpmH gd6k[\ϗbS6d0+YՖG,o+s6[ ߺC9C9CN w.ݿ_]6o0t3d~-8fr*"y7z,xDT"AAJ5AI";1B5Vբ+yfoTVWo~fׂ7X;GH|#S-T`9RwC/Rr<̩BHpɗ! F򮕱} )�joe'K"O.[ڔe[a}1T涾$^ɷ6(;߃ 9LjG[YҚޢoPtlC&rWeՈXvk" 2IhrNQesP~X �0cv]v;D̃؄"\D�i6�E@Z8BB�=1M8:r߾?p'}\v6vjUzBOjusD`DD@Bj;{׾Σ[EHl]lԲf M"\]W/vW"b ikqAa�s[*ܭtٹAI ykI %&e<8r¦S�(oirs\zB yʤ<cSy7CĠdDzGH <l^ obEWf'E?HC _2bUNgMa:g2!Jգ,BDAk0{$"j$!(CH_ m dVIffnqB ;PU+_%/j lɀmP G7PfA.2%*Ja02q-.^6ڄ2YwkeYfb6x4} BpAx a.Bx悲Sd`0}r7(gW3}Q1}LjuNgK Цb`'jgC g ,BUdWҌ,BFZ^?_ׯ6p>4|ʡʡʾi#:?{bUgA+{ ىn<�P(!=m(jE $HpC&ӑ q M,n<?1H'o{e9)PN/L0@bқ^M$Y$&+؃YoEE $3ES<_ wvr~<JAYe$y>`W$\AEaL$nMaq$(my[%e}P|!Љ^$"f %?Nq`2+S8r6$* (8L_9fT8-/d1ΎMjX|*B-fj$$!r(�%gHj۶m#vcH""Aażkt8.R%a^e@�_mwv^oGQ>jNW_igYwyv~uqj}t9j׫mݖ %ȱp3"..vj~|ޣǫiD`2././}CG8,@Qԡܰt^9G$4JF Yr#t43Ds,� ;t>8x�!Ȩ!_U+E82'J Od7w4v4q\<g?9PFUO&H6$LSSY#b})/Q0YelLĨ \! D!L!D0.< �艐 c[!L!%p (Fa9ɹ >,6 GYyLN͢Ri*'5pFI8X WgJ@tb}J[r,L_! v=RA5(:?hHhB>BFOQ0� !jlL"$ o1sA6)S!F)ߥ2vd M L_I] )Z1̔/  T )4ӘtF|9B Ȯ"uGᓿkm0{(r( ڕnE~?ſ,A,2OC�3+#p$(0  @8Gv"E<ƠH05"󐔜>aY"IG<h(Yf<ұvBddFЦO8%|8B-qA)BS JJXDS,NF 2De/@B:]P|QD!K|FDP#yZ$jtJ>?$*B`\IBatA t)O3e$e$H&2 A#$W邔fT T#A9=HP 8MBȷ$a,jT  J P b48��1ccO4'% 1Ұ�L���IDATczo|okoo?y]ijm꓋gW}#_y7"./.utvz8>>տ�F;ʐ㢑"\~w@+1`Ctp豙Rң`yr7o=;S]Z`r9zfWhK*zxȔދm-j` S(̻mcQM."N 3�6PH{ hQT r{TEH+'V@^ r 5KnG!5A9'z])o�jR0'հB;kE6R&8�UcgQ쁍Tmǔ`ڎUF~7Do=(>B@+kstDxaCH 6j^p!VB.II"t WA{J!p| PPPBS n+~[8p<"yH Gɲg$XAҋ6)#AQ6#89,JLr!KaNq BspiEM0@LtDaI#GJтN_LwыIHPk);`]ɃULA)AH g!>H�<*u-IH@d$hR@ SGst؁iRN{z)"* �WO<iP~0:zZC/ _IjTatxNx$v; bot[otunw;ZoB.._6&40苩PVR(v}wqyv{ztҽ;_߸s^@axY-MsB��ݎ~^ßwj l:4al @979Y~s r<\[vt4B!(<qWܽ–`+wUjf3"I}.kqR1�" EG{�u"4ݒ#f#R4ն=F̗20Od}i-sDȳP**."E a龾<dw�σzu(2 je9$^kEIs g*" ȓFY ^ۿ68n7?fXf\S^3:](r7/UNV^jnm1XY) `[' D@�N"$P �¦?+W߮6pC(r(s,p6csSBt1 ҹ.a}e$ȩirc GPwyGV^1T  ΟU0TRRL"@h/{r?Vg]*hkuB!j lL>Z0Y Z0ņdt�3"WL_1kR9i#A%AٶRy29:S`9B̀|YԼsDDE- Ȧz7MA+ 3p(.`Iw1Ʈ}?,퇷�w{N/��w��\6�bE}@/VG'6wV;{?}O>x|/./.Ca6h^�$wǏeŌ +#.vi[wW~6Gol+(0 9}䓧gϻ]D\5EDDR̨|eU;,Ulq yJeC> 73[dyJP3>8l6 ]6W&z1Jgzt˖LK8kE` g3 ,7~ *!'ճCi`_vGU'P5Uh_5�2 륹:f< N$r[Oŋ8DmAA^qܪg .4^NC1nɿ${("2 !6pE:aj_ ?\}{|n}Y8C9C9<]m?{<15t1�TLqR13|$bNPi\ҵq}tU�k.>Cܜ6K)1= h�6 4M]8*Ԑ0 A_nn2šԕDȳ"HDtujw)cݥ1/ZK"+Uՠg�I~�q3S+쉌*%^zQ+"k]6%=ϦއC9U۶-H].Ǝ#�4D:u1 !�qP%Hc@�bc߄˰j<ܜY<y}ʛ+?m?ggvbժma)p&RLD6\]jo~o}~GM"~pvh򿋗,Z!`?./>6Rܤ`ܾ :㥀 d 鉵 @L1I0}NCDBqa%ݟ Z/|^@3gJ(ʏ_�~J$jno} Ge%</"$Ȃ=zڂDxD^OE�l8oz!([EQ"ܤ͝EQGBHoev@,D lMiL؄QHw0+=TBc!>\ !oK6!Dy`ZdcZ w lfl<@־g BZO;Ɵs�  zZ}L&_Yf Ng`AXr P(R N"dSJ{0/_Zs \o;l|(r(o_߽l}HW�7نHF9~QMEsL  }Iw,9HD�>_>O+W ~B:6EH8|}"{|mR 9ݡ3Hn$jT0 8,[8&xPGb*WWe>B EHP# +<Qs>;Qq*+]!~p" +U)N8fFIqTZYi*`V*X'eZBr(H%m>@ >v]b:>!4/ Ĉ >MӬh>:ioܾkgOwO?I}O^]^\.mժ]VkYh{ggAZO<Hq[hvw|6 4"1"(峮i/{B�p~?ŋ @~|SY){O,]pa (}ÊJg|{iH�u6Xc�0i Ž6Vن+ mKEsyt o =�|>cEYyRk|ϳx y3z'ԂQB06R0j%6$gI!S C,pDIR T$M3`3s,@;"Da#G:d)A\5[)]]"DZG{!D0OE|BdH)@p&֣"<V3ƶ�[Rep.BTJ y=e@ Qi``g9#rS @+rB5}BC@O!8m!0PX&c,/C>K)K)=D4} LW%[ؐScJkFrzɮM})S '8\B"!&2)2B@ | n;{aPPsQ0ǰ>_o4#bE#_0$:Դ �\(f Bv ΑF-:bHK#rQQHFU蓜Gr122(kCAe$%9vdl $+BD*W`)\\&A Y "ANT2W)`jH}&;0lDJNFB/cf2HELI( [qA^ rgr !bK \AR`l@CH1bɊҤ*dE6Iֳ%:]Ҍ !"d"A" +Αs"6JtT^3B`X7Q鋔|67rr(_B&^M ֛pi6GGGպiVMhChZ `kv)-6 IH}j;g_y_7/~{K_;$Ocxzog1vD "aAj�!KR D=]#�F.– bs{_ڝ7ܹ=80^)Q(斂�#..]Da0 �zaY*?]nkV5=?Ad$U`E_ÿ?zw)y"_sOr|+k0'OT/^:ä́[+V"EY4]'kUaqޙZ 'T=q\�_641 ,4zyPQP&+H<'8-̗6zʉB>Il(/)>e26,4b0i)kTkѢxPum)7l`C;ńr _W\k-2B #i=ήjUfdx͠j68e=<\g !SԬGV/; $W6T[uG9C9C9CD8:㽠Gy/ÓI9;vs-#Du9|i?:*!kEE>xd]ql2}⋋\A::+]ͣen&Ц^ZT=3 :Ǚ%< !�EJ"pTm".|'? ՞S,#dy>>6仍6fyDH݇m�K:̤ANT54gh!^-B]!s%Z:eKci iD.ne+BO[«'O4Mr(_\]�BЄmWj^fӄuP !F_(DDBC!@ !4 UxjW?^ Me1"H}}}@Z\\0��1�]=lڀH1EhwG__[_:s+hp Mn0 �7(⎚0% 6!~O{?{Iǡ=nV�`M0u97Y/w DrD"�TKB {{O !S^Sز aG1÷zU5s<Ԡ7Y\|Mbi(:4L{<LQP]QG[%ĴǴV;$9%KˡԘ>f&Dj5͕+Z~y+1_牱L+'5TgJͳD7WPhLswwHR-67s{A"g` gۂ|+N^QCN7p;k �^0<3ONv9xAa(-'Wd:L\"5m^)!빽% M"i^=3x@"ɡ쀋 .Brw6 z7BE7H"dDE~iKa'Pgp /c@�;G9:;=]Q!Au%]?Z3B{v١ʡʡ| pr[~hoi7@D2Arӑ}'#+~$G'Y mIT[w3]DڿG L$FB+˹#v0 !ܴ$]FJ j4d|C@"Z!ӑ`f !6=*6HP~]+Gv|:1"D(_ ڽ7blO$`6}XH0:|"42cņ.auZ"'L"VMQ@ŧB3E։sDFs,Q{ `F=#Z O5 B> !uy(KX!"дͦm6hڣjZmVjZV�H!@iB4M  ĈØqv;=\lNw^_7_{y1ًO.._t.^5*F�vn~X1Ʈ� c~w;z랟/}W_]ݿkhiq5 F$W^mݳn!@ 0 :~Ul -4 ޠ=".>z/WJ&[9mƯM%I`nTjyZao4J31ˁn]d[�LB@a cm~~"�pAf{zSԱ/h[y`3=7-jG@KnqpZ\k[-,HD3&ur� $á" @0D qp1aZ풮v:IہyGFȢfFaNFV&ȊQ,+m¤ZԊQBqT,Q=r^ˋ8 -k1qVa oqωeg 2ZX_CMc\`J("uZuMG�-y FNeO>vǍPPYN�?_~£� dW�k22o Z17X/I ?HK' L,j$=s(mseJ)ķSOvMlŒy8~oU7t|[T;$ٺR+fY{2<gB!e#&ŤoH<&Tsy)y>14L{C(-y>R<_ZZ$^ɷJ& 9PN5ڈ- U\W6XFS5"i:+~eӭ NG/QsFdFx)28z,l</XK~C9_2ab ic~vfb!2;tZ@jBZW֭;O^{G\=۽{v<=]Eh#Šb{^G; M�@}vWw|{׾oz!h?^GMM宇Ӌ/}�8V IZ/hɞ3|!r!&fO3dt7bxFIi8VIoJ `zHRVUj:RQ+̛Nf_v,=k@kJihBيl_U[voQ?KUuKƀ嚫#!ltr0 M; AW5/=9 \ rO2LW!� U)ZA֑gҹj373Bf[hHVhh+śf f_=TxV]gbcPlw*[׊:"'.BZ䊪ȄuTg7ia�[^YoFYGHarm?oŸ:!}x=C9Cӻ#\/rۆGZ-[Vr!"(TQ<ߔ90@a:oO z H01˧[C.>c=sJsWEfF'Vɸ'y~KKS7jWDX}x~xdS3 SۋÄϟ Ϸ"̵raVToHp�cd+W/ ՎqH6N=5Y/RIq,] X̅Yͦ8qe#["oj@%*gG&H,l {TOk]P嗭 c!a7Ƙ}Qc�9,o")žvVW]A'?'pO>ٳvu l0="6mڶmZ$lm.//mwMʫ~|ן|G5 C%a'OxҎ/]h&z<ϤL>IVJ'b's04aw8ɴXR#wҮ@%H)yc<,2]YQ(Yh\G7w۳(yz`8 UیD*}s6Aœ/7(ɬ47"xj29|d$lLĨ \!�bn7"Q lEdfx˙b3DNY<�meVsor2B#o렛V!>M\U4%oDذ1:b [{yDvbTl`! 7wA5(:?hp(9�a$BH#DKu  +lMbc!lBH"Dicp*Rk"ҶxӁwF=@Ԋ1}wC 3*a@8;g/! LNTˆ/BC RjTcwk/W�V8C9C9}߼/7.6HJ!�Ù8aM &n(QM$s"f'׼8X'L0JFߋ0J' QFH!(PΐX;]ށC*W`LQQ>id7vxR 7 S JJXDS,NF 5@E$498tAU#D!K|S0[{ #y|JjՒ`Fjs`%wL Dd!O$W1 7R<_n[!UFPFPi!s H;IRfT T#A^##HP 8MBIlMBt @{~r:]J,2P &+YC9Camj^j^=^'l�}./../^캫ē[1|_ _oݽ}?U{݇Dv鱉}u]6IlQ}qq _k_ǯy$럣*N<,~ӋeG �@@jC|p Xg7JR9Q-TD8Ѕt4,)Ùv&7,i5<Q$/!aqK< V_S71W磠rNQ`70\D$ D07S1Vm^1e,`F;|S BH&i.UPB~hk4V $*/D׈wNUFٴbAB`3LQ[Eb2<RP d\rĨ oRzo=/_�Arb/j!&R҉"ࣈэ!2tɔcCT RYŽ ܏3H<2`%6rP|l0}2&T&g=hPQP2Bs>B@;sTuvVf<%HMjgQÆjl8/bPLK!8lOd?BgdxoQй}j,PPP>*~ϓ+ptHl�CkO$WATS%% GR}Xs,ٍ 0 5x/@yLHg 8W QN1>l\AAu$(!X+Q͖DXH!#d2//L!A*D~ A1n7]0y\P%H0**`"A5)V@ ꎚ3y09f=%%BB DK!^0UEbBx5xwrR(b@'MGB&#Ak$v,$ E9zj$W)uC3^�,6D�PPa<xXܶzvrw8fˣ �B`"؇6-4Cs~8'?{{?~O==?؝]bº Y<jp݄M®^ݳSx升{o! ,u/"g/?ŋ& C! "D�|Sݡ<v@&E>[Â{�r@Z5ѱ۵ܰۛ'x¡Nrg \)ce1@mbf1}J"PsYE-VdhF~ccy^SgW9X:\!S/ /a倄+`bfE�+hq9gb-@g3>zဋ}Ш˗$Zy>dhPV*O(4 ,0;8M`M lcx* -7"+]Txӓ*M 2.3t bS)(!dEMzګvs7DѦLOXd O!qj ].2'&yRs�r2[2O2ipqvJHɺ!_Rߞޅӥ8C9C9CAoKmJ:bL}"A %nVDKY?T3J*Z<ù:`1X2 �j^D>Ywrm"$~�ip}x 46tCP&fk_BUpE >Q%] B$ f zK-St9_|99$dlHP%t59ەj9h/ M$Bz%kѲl@H%_L$& !fu1^$X ĉk->efAt 1I%5Rv|f�H톜�K-YxJ0[RE=`k_$Z9U[IDʡ 8nBhf>:::999999>>^!(Å M }컮vnmnno yo}{okԬꓫϻǗWO_k~;ojB}v08H'|t~~!1H��!!V}ūzA-9kwQK$cifdu9]%rf(B XH~n5+;GdՔ0;@|mhʚ>SЎ6чeU᛺@(joD4h,'cqyr?3#rqu)er}heB%eЦG}s Vi)S _JKUJAxIAw9'v(!f'Q[MuzN !B DFqiH$6m@81;Qmo`DAYRsH $2Bi[3Wc9qllkWEnğ濹sn[C9C9C\DyZ75}/Gh9Sx&17\>6}#n38 gt?|N#.4~뀥.KvS`=R]*6S)BIEvQ6jy2Q"�ۗGY ^VR;vVyZHjV8?p[<YktͺIPN P@d!6'&~0? F`r P@(^v+5Vus9ީ<s{fVW;VUd58mG׎@}9&؎`;"F�/ d3 d?〇φ }M "Dx.H!1*S@jV!?+fsj88 eS&M)1�6@k'W2|J 2ȱG|`18ʍ7iy"ZHnvK-sso\w 7_wIAY]/jDU=BV[8g仯[;EQULuVa.T {sGURkE9.ʒK*_]ąpk}*(x&)TxO3~?Ũm; \nxƓϜ==NƜ:tyyt? 2 ('_ï1n 2 +EI ?޷wdAdAd*L&+̴TS-TײZq9byUl^>W:;g# gݻyヌv.ϦլJk3g<;8uz2IJ^cV%*05mK[GUQp1".(j]N|2bTf6Bg*A4$ ׸B|e(|TD! EMZj`\Zj Qq'NٮHck>7W�JntQymuA*?мZ^4l8Mv£(;sm}xxO-ݣn2!c}lxa ΕP'YJF8ABj*bq�!Sxr 'l=!ͬbOK{!$6W7&q2kנUwQ7bAWKh',큝(m~ˬafY=IjByt/Rz*LbFPINˋfN8EB�|@ם@'BZl _pqH2%E!N}fşCA<8 AYy4a{_�!P,-~V$V 7'FkFǭ_f:se:2 *_<{_7_PE_I#Y4t(8:JV`m^i"5dN1)w >,85؛Ol4*4*c>y۹y%e6_IYBxwpc DBH&.Q<mIq5e~[U Oc{0;<9;tX0NG(0L)rJZ_O:B|=@EƩOcc`if? j.gP7^ `Ty B(I ̣o:㵻a*_ٟPW/WqW{/cڏSze&K`~�lµH:>wLsA9!)ׅ^YYeY LBb1GGӃh1uMRUxT'x~498؜Nwj9okg_/zҋ_}ԛeT<wqtSoywOQ>ˡмU\r,Tbgv7Mk҅řY&T&b&6syk.H&m$ǯ Rxd#&\ VqeqwQJ`U/֞y_Wyh�[s虮ndHziVfmĿ&�*x[0؈j5)䕷% �Zzl TcgGv2}.n]- g9y9rT=+I7C9`poԘ:d*Ȝ@u!y']K]>/3GlbT]x7ʃ\M}u@Nz6Q�f,2*xJw�!*-p&j&fuubp J_DHO9l TA~Æ R.zs1NR Z9={D~۰i^ӗ) <: ;L׺ 8Sc昘pqPoQ^`RXP^�}r*PkFXoW=x<rAdW8C)g˟Frzu -9إޅy*u &G?Ybۉҁ 4c :_.Pq;祘5Șp vn/;%I&`c+'qs @UJ1)JV@,$BCH 0A 섣F,wO(;ёX'1ia`!-LKl{)5'�6DK_Y''@a!AH["ÐG4N#C, &z%p>\~Ju_,RN$J"'GJ 2c<õI#/>zϏ7F0v"Yy#g reYN&,j6;몮]V "Yf^n#&5peuQb<h485ᦕn[x~ [[[+w<=n__?]uܬ8R & vKhuuVc. *E*W`,u'7Ws̗B{IȀ([^ 9o&bR=^j (s{m { Qy ec66@;oq7Lb,MΜr{@b xg"IMzoYVy3ʭPvG<B$؆l.pr'3+ U *hB 8 B|bJ`jmRU;9:2=w9S9gxʪ@744 w�`'q20Q�y�uwli'[ $4֍|BKehZ3_RXx0Wwo<}!CY`bo3 `ư@�l-PAlQB*<0p6vy;=h"BH�\5J/vCPCJ Ir>vCWiu1 2#_ܰ,s7ySH7s ƋfkS28 ar31,A`Rj'QXIߏ M\' ^bSPؾL ]&( &CH+p*4*+0@ FrFVE-^k;F 6b;/Be{ɼcƛ%7ʊz2AL 4*0A|C 8O=d`N}1 $n|ا?"-3p6%B>7d0D !N}SҭxDrGpm#X2G5 f Me%pkB͈iLvq P rB;k1յFVWWWWVƓde4&+dREYRQ,qQDTRURT,5WוTzQBh\on3O-OxK>E/y>'>ܩŨ$.񨠒 r[IQUa}|x<)G%L,5ՕT5u3G|%o}.6~=M_ܝD}ۏ| qru.~[i*8_|my�B 5w!k{bRR٥{jd.pPEb^VmUv=C |dݽR1@QĊj"ң 6(7Bj6g9(TF`pP$R!"iU= $!C%( pt=߆sK=)`G4jł< cDE48O4=,PZ20&&c-)AHФ!U Thx^Ta6!&-BXuC/Zv[:>57@U$)6]nc �`2;8�H�ԋ]# Bb@%-Q}rf5뱧~mr4wAQ%EIgˀ|V܀ \'Da . 1 Q-hŚ0U! ^; LʫTfm wADTc_Q|BklK;ĚCHN ,/P4*+P`pb^ DQlP dI;|y@PEw ң|D[`�'g|2?giG i}MemL0`]0AiGTCUɅM!1A3Aۇ jR&3t< p9$\Q /~0cp]R98̚.h}, (I#dAf2˲i6WTHj0K uMUb*LLsYxέncm1e<SgpՕE03tFKG#Q%T0 K͵]$$4)X6B<"m4 2 5w_n0dAm2Yu,-gݬAdAdAMhG1{;*j]ֆ{rf.ǣd2Xe&ӏ b&".yT0 zxDݷ}IZb"bs"9ȣ^ T5S($A%R `*_(}6nj* 15|>S)?t8KNncS9d0K2_CFϷCgn;QX,5t*(Y"$Y=N"'obگI ! ܎=,31287d+FwJ2+*VQYɺ=BTN`~ơt}tȵDJ,ja|ϾD y{4+5Zw 8 BNbr! !~^�t!GAU>ǨS�2M1� "қH2١ofBoGHة# UZ>iqW`T.Mw $`!�!Ԃ!!B/q#ؾonyu+}4 2ȇ:ÝG?sOMQ(8R`~ MdiT.<oC̑3"#" @e4}hy-/ijvxQ|/ C /@ E6\۩�|ÞH ֩L<;Ix!\bڋE;+?eI16;�k<7\šXdx+&URL0䠝US3*G`' " |v;_Hb|w{39e) )fe҂.&e3N <S 0O-LP /  {~B Cfq>=¹q3o0^h0dA03L忂GE1V&+뫫,˲,ʒbi\WuX,ftQ͖|]WU5Т(eY%#*T³\E9G<"5wGӨ Z&EXtÿKꥃ#SJ(5`A@EoA9Kh$3tﮫ(7G :eh=@{ }"pS88} k9m}&�Q+i1Z1y !,DPJ!D:>. `}FX�! O lbv`yiO} fe9) ( '�!AVD9JAPa6lXc 6}z PyLjE?N"~*#G4TXl>t&il7^ߡVAk2R�cSA,pIP!h#!`*i<  @Q8Jb#8z#-B~yekFn-\پxdAKL7$ ͯl`89&(86b:/`}oT0$D& `T=1!D۟7Gf56�cp4 %PHLBj|ҊߪriGA̯AHL#UMe<H#G9eZ;!DH %YÛb;?Ӧ}c֡D1B6!0w BGyٜow,I"x76egW (1Iojy D 1L&=I& aȐQ|Ɔu"!q0dA0Q1s1*d:YY'+h\#*ʚxQ\d QYL&dReM\D""T416s.h4b&_B~:InAV,2^})%oApc%j#[IȰ۽>=V`]l`H1IpcU _LB}ȬQa U6Tp#'6Nr&o;6klD\Hc}n<x\^^ !nd 1H<Lx�.O[z$NeyE" 0 �r4 J$H0439!>Ml_Mqno(Xosz%!w-ĺ: x`:d"rc>A!$CI@ғ|yp<w} h b]a©)A(TjEGLC䦲nuS+"pK]yrp$xrhFiAtHZJ DyB !D,B,]%JהTxԯ6/ 2 <dӋ|Ol`8d8LXQPRp}O-ԴInOUQA3L wn1Ae>Y&W@9 c� U ^|BM&Rv>B*c*L6qͺ ⽿,G`'U0A` $E`&GSm&;cwyV'ylX&`Y@kxG?܋owZS�fwA!aZk !M'+*_Epz'AnU0V/YL. ㎉d}ֱ8*kR`FeX)IQxI6kFyO} 2ȵ|GEɣh2Y][Y][YYMVƓrR&TKTp1O6676'QQBz2aH"6صd+]8wxPr\[S-" \3 3P:sYR&, ^})%rr|#HI{7?):!o%6,NJe] JQ@4CTAGH7۷f|KXoTa(zq?/b0O!u: &B"BILx�8Ƅi:{=p;!QOk'@KH*{!*T&o^,hX{vAzb0d^d 379$tvN�7&"Ovqn/H/c%\`b1B k)iB9c_ p\P(!F$"9P!f#9>|8`sx#,~*y#vF�SN!]Oj~q4g0,F"̜=̟}-/ϣ1AdA>uӓy䥙`p7ˢ19aa 2ׯ 724bHC\Sn" L w[gѨ,Ө+=jeء ?HDTZ0dL0XQ =|/s*h`gT0. i;?vDAE;\O�[46Ly$d`('iDu/ WL*r|{c_ +L ZʣjH lnRcL" IӨSR"'R` 1tqq97WUP!aM`3hMI;BZ`A9il> Lkk+k+++',GjD8[Wլ *K.J7OuE<ᔚhss;[G$qZc"efz]_G6|#1.6b\=G 2 2cNy~C 2 <:e<u::XZ?p}pwdAdAdX,IDiDD\0EAɨu%u%+#)eYEI %%=+QEiQّzsUۥ}jTǫLEXHQek&Z�| K|܏2,ak?Q؂Cjs<UwDq'(I.mBn$ ie>, DL2/LIkcRȤ#h<d5^uo/t\†BG nxVBY.U{IP;AOބYK(%ˠNKoЧ1w %" !\!jCp*"9BޥL)r>[5<lJT8g`\ZRQ<.:1KX˔UOpkByt/�G_ _Xõ*Tw)7[M}�܉= B\1]P++Byu(xBJݚ5BZVhUՃD펷0pK@!DBB!XrK͡X4L*x{yJI7dAyTaT1_|HVr@\T  Cl#ŅF-Y%a$gpGQY&Q4[mdv9i�A!]1^p" _A)VįwuT Oc{0A(aEG&HPctYcAt8 tqD/R.Q{i' iSG@w%`va%y\jWfEQ 2*tOBf&TRG t} 7 P!qS *."bP -⨘ N 2nRFjbSsy4]Vi2 Hmr0Q\xTNduuummmeee2xbEWf!Jv]Uͅvv^;=ڨ\!*E%U-"D#&* U )ܫ!5i58ϛCƜ%\5)X(.t]+�k;5-r TQJ$,Ǩz EʛEz�Idߜ Mk`lA:X-ʛQn 7Ƃv_ժ>Ai�ɘ-N]π<byb}Go1E\j@{T Pnu#[�N�Nd�䮥C26х45|G}|A1<Ba B(f(ǀȳc=!f*_ic *!8+m| Q ) dj0o\sNs�{4 P/pj I 8HN5}.3VqMj�r6D71B]z"DJ^ŀzo1Y 2 rD+V@eB+D4LK<Ldjq$DCR HV^s+{ Z󉂩 *GO/2\4ȘV*n^叄!Ts @"D)ުh୴H S*(s`&li !B!$ !60ZO/vqt8:2^ԋrN0@HcFi& RTN0Eqr%0N=v>b#2+ Ӫ-%B`W^75kңܡv2wsU*) OI_Afqg7 ٶYvtH&H SY)`A9)i}O'c.ʢEYzS$0IAT ;sA\MY. ͭv.r<ZFy)LETјfbzlto{4$T\uK:; }Or=O̸=Ԗۋ[L#z=%>5 L-pG]/{<p6|=Wm?x gl!yWRzdZy/vyt;Bn/$"6 ^u»7cUPA ek϶AH`X_)ml"D{4!݀Nx;nv!#? ~|un LATuug=?p$gHOLe@Z $46<nE$`C?'5^ŀ!<} s{w@ b*o:M $oս=:vK83pP P<T luX93/Vqx5,v8u0Nf/ R![bw<9D#,B4]<ȭo),jBbAdG輟;IE2[$ɛ9N3h,8 dCv�GnqnTTĤ. 9*&H}  \u].ruPܤ \c#`y3*`8TdeWL`/ǎ~v~0z86 u @=1ep{0A|3NGw!O0)p(I>V&螒hw(҂Q~OWÌٔ OC0dDABܣ׉CI9_\1rI,M #i vwg KZbs~Ü)fTiI�Aۤd*Әig*FEy9p1bJA埊#_&kEFT<\"D}=pah^mTT5d}mc2\ą,WHVjYi\$ReQD cG$�0/"TW\ 5K%mj.5#k'""aod{uq9BB"+N5Xq!?NFO)IV� oṯJ1lVsޟk*U~Mv'$lbQ�v0t,n, nu ƃfx5f?vJSjpo޴}ecO! X b6ڕ *p JbHN�ZHځ o޻dv3\iᜐ堦 `H܆Pn[Ch 46JoY,=y�lDH@iEuHO#S=Pœ`w~ܒBoE|=Ė ^ЧѾ<bVB1`:pz0  0.7FE >?JҢwpi}zcAZ$Bq3C84Fx.ya 2c[FcZY?ZqLC>HŎb&`#L,jDs vH QleAa7$) " rmvfRk[B`|~(_6S J [.gTf62* op?&NZqem- sqZ`Gw ң|DH T|dퟳ#UfGbvSad5($|J!kiH"0On@&fo1Sh! R ꩏ s$ݫ(>@_@̻#zc*gB`Nj7iG9i4B;Ŏ]BA2 \CkA\<.lL+*&FQu-"LB,G;BD5ӂyNłnb$h 1jf!&$:=m EB$Bu3nR'`!#&%, 2 2 \9{n/(<dn 2 \t]?p7hAdAdAIGnPUll:erH6&KR3UL ќyJT5xJ<bFp/Q1`!*J A.Wܐԧk'а7)`ߒ{}#MKNMmLLg0'|_C1Dmcj~ۘ+L:FQ6Zer7|[ 9tF TV):7 W!m0ބ=> fCd ! \]Gwr, 0S &ŝ{"\/"$Y+јGU7g¾jLT!-[ )!$,k亭~!weLWnP?ऊ?7Qq'19JCHVei3FWժڋ; ъ? !#P H c)a"2TWo:HVSBH*DN!2ʢlPM/X�B!B ҠL YG$r>eT dAa$ZkJ䶓 2;nK_ȊF2[g Vcl>=,Bn@w^ˋ,tԉEAλ?DXj`smaOI&PZ(cޮ ']9r�1P Lh9U֯wM%�$Ł |4 #&f#D пn1=EiNֵJ0Acz e''W\?mNpJ Ėv~:噠* W h+@ѩ3 ӽ$]dPH4Pa LLPZb]vs<ȵʈl XBO޿&Q/A x%VjsAd "{衇iQMW3˭~w2BLuӢ9LC*7]#ωn0˷ OzVA\~V{Jwp{"Qr#X_jh$5tﮫ(7G J,OTeT$HWFN`ry2F!tv4`{LuEV fuo2:8*Bc=(YP'V?rA@9qsb)@†z372m|&<y�U0e~!NF2>9BsLq'6@NA>S=zRUY)D%S%"Ґ4TXl@a/ 6@5u]p2fK#!GfԵ2* cT-vfUK#ĠؔrNcG+E%@MrfKUW62 <ܲA#GyWXC(fl"c$ O.bޖ4TR|_;ݙDucxA5@>%Q&hh cl\!t 8:šw 6H{ 2dU<kADm?oieh*�o�y<F}`[FRşC((r2e~TIߞB*QԶz"&HԇΛ6T^[ڏE7܌xTB`Ub#6PHEp6BSnN&Oy2L:n"O+�b7c!q0dAX١Z\LDJ!* %WRT/g".Qvb,b͂l N3U; F\HTs(q�!!v5˧:'7V˭Yf>fY7q,X|jN4ƻD^u ,V~=Qo !uwWZڀ(ޓCHKc`gThkBh*$R*xsI!ɬtSӥrg*D -@͌rS*vtooL^݁2**xRZ!$9|wB=AҥrD fhb<pIKf N恶űCma# ~BC|`UI$rݕ_).~=|k'`ck&{9ヤ~}uwdAnYY^tϽ{ˈ+cF I΢#J&Ƕb&6vf'Dr1rERXP29*DG9JrK{o&PcGM/%.#,rAu u)q *Z�vod}H2nXU13b7i{K)L]9ʞ *"8y KSGH(잩H 2 -w{6<SJ]S-LE! QY,Ò@ϸ%*sHүTL0ꄋ1Y~E&$<ȟk00w@sص\JgQ{g(XK4Faژ aK5iˬRg,ܜzܩ,AڀѹѧB;H�)eu/Ck3kHX.I# BcC*-(UtB@#Zorɧ>1@KMNG\4Lj7B@pq /[/mm ,U�@% @UF�y_OƴD9@.ak|a1aPٻv�;Fx-%Qʝqoqn N})f4B$!1@d%3Zgs{BTFrg ?rf�G[VD{q! E@!yWV7^,lGm�xAd¸lT?7 %3 p˻pŠ�T0g Z! wRvHcuhsTheR'b&H2<ʙO [-!K1)kA2)9VA`hR. z0[ *pUN �. uv9C.m'I؆ 6$x \)QiBLM#U'b@7+, ݛf`(l*$a*Sn44\ۻI)\1A3ݧݤǘD+ SREN`@&N/{C!l|�|fDH|�6;x`S`Sp5" 2 '-;;;w}̦\d4S]BP+QAR0IRHF$c$c1ˈe*</y"P zrFr6ÂE`^r-.$,umk[!* p*Eau ˠ \cl&2%:b2;ٮg}4EeI~*jxy.=i8n�A/Dt@Gy@<9IvC�{WY(גQ&[<�%O dwl=QnT݅tM0E0'yk#PGk6tU6XLfn NшSZ)'X/0=j$!|S4ã獐Ù*R{h6 &5& ܾy"ٽ޵JBKͨ$BZbDO,=|hB 2c[t)ۏ~#Z l1c2wg Q/^6$fl)D7 c)�)8e X}^i5%T$ez.D(_=zcĪy;?Kfd|429YuK&hF8 h ?yܳL0`瓏ef Fg.5rfY&U3v~!=|zfk$rTNBҏGO^~#+%JΨe:qf'rQNQbR(dAJ{>p?4- 3ȼ+IJ�vd)NLeHiDRQ 4b+6#6Lw}ͪ;ݜXGq9[nwAd˛YڮujNBD߷.!HzJ 꾔)ђJEr_ڻ !hd'6wՈg$g9n 4ONx b42n Z4ߞouHDZCP^J=9ggz+\K.[ٟ3wL}-LB}F)hS$o]r Ttt]Q]-ͭWMHLǘW`SVm mRorC Od-tuw5GoAdAhBexGmGXLW./vDzvc^a8~"{�>4Go9B9R7݀*4*'FIX% Nǀ4s4,k}TEΣ"fn$>ܕ.|le.=>dݐgbN9dzq =Y(FEdab8 oV!cOR:?)-.hk/qԬʺ/VYp{48nxy.AdJQ|؟ͶnUWa]MIjrcHde2^kbuI}ͻHk[/c{O-[,ّѾz "MMii~CP'lF(sXWFc 2U^g|˙-$25,Q/taݠoimi`e'3eE Cnޘ֢q/aqsT&9~ߌ-Czh2>:Vȟ 䭏?W>XGw8_o%]AꉆB2{x^W)IN9� :sCt*_6n h~҅ W.kqpl(v ۽ ǜzUӊQ}Teec2 2B{('gxb yGNYqyBŮB(Ӻf aMGCAdAhu[ Ѡ`u-3A/= 4LJ*H~y @_YB/�/0h}OJۯ7Unz*z!bBH֥!i^3n⭊ݯ �AeDrI3AT4l8X0qpt;?ԋBi+܎I3Fv>"ϋbisn_-| @ FHbhO\56,$1uEc -vn[<n%bx > rdccoo3R{|qzÂB.cbj6 հ5P7 g9,6neasWKqp@\GUԵ1 %aA kl[E&a<˞#& $Byq% ' Np^P1^sIjWH"ڌɼhT Oȃ, 8wo`C!?t}"R ̀y$ Zx,[nFQI>!~蛈|-h�^0{+꽼>)j>'d]-c& A O^ SJ%2 Wa +"c:{=$2 1Tq'=f0Td8xi!}K֌݋5POĀI=eD[^x#)` 0,l$Ssk` ~45E?�r swQ^!BaBt24xC&T$^1 2cNVf7s ƋfK11G`4Cjc$bG5ݩ-cz}o R&Fe|>,].ruқIKHCH+piTW`dd P$"u3AFleWLBb&H *@?1LULSv Gba8`O 6*0)p(Ito8Z{J0+9(G"$h`DrN!D NFBU vv3KB_hr$zB#Į)0AL0&ő4B`aG!!W,Q a$,iDʹ1M�= r5DDjcc)Oy_OEOynRoVttxqgÃto6;/jY T( !\P1yZQ-S-wʢQ͍%2|@RaqLEu djZ^b{"%&HN :bؘAʀW^2aA/sMlz?-?g@ I`-|7jI/Žqn/f; !U9lD^Aؽ*)O g1~&b2~b!J"F"Ĥm&ko$ ܢ # vw8cI Y~nr7A:n*?[!FI?' (?wvWH$8>T{'TF aN]}@nI!D B"Domxf! zBB"D-BXuCLe!#y`ңްL"BnSxM}Q*�B>?J6qQ 4>A1B D-v P!|i~ &ddA#˟nOi&G  ebqT %`0g :xh#Nv?tWQ_(e>žG}!2aRk' EL* 4/H(+@Ѩ@Y~WVZ|7 Z`'8 !1 1Aev1@1A[=�v>g|2YA�lDiSJ C T cHL,B<`OYMI2s"i&0sª{LPO}ao& ^Y<BB{ D{JCP9ⰞR1P`M 8'ncHI,vlH$yO_GEdAR2/M7^;Kg.]ؽxigkpwg7=::Z,+#)&r\F$u-uELeQ4@&悋Zj`bZfg* 1e).?:$Gb92f2B�6bQ �~ ; Kӵey>-e0)?hJ`0tP*e\=Os֡0iO\*ȕ%if!#|h(-T O!d $R}lN279yTn(FH>,PZ+L)WR1` vڨ@l7y /6>`MtEHPYЅ|SFZiB(B1uV!-iUHOeBx/t1TFYQ>g7s=$(r*,ou|`ډ@[9l ~O4Z[GW]3^큀AdA2^΂ϸeEֱ2풮,$$Ac5]m*u2ҍd(8Q; lZ!c~QXKL~*�T%ƨfhEy襜"Si&/DZηZeʢT@&#=@8Qegl`2%a6, )i^e .Z! \[! V}YIt'2 ���IDATWDkѸ8&O7xf6;}xwnpwk{;MU=yU뒹ehT(  ,`bFA]KQpbhY,Jb*H҃%m'c&i;?�zb4;s1Ű7R\dl&&!owEɉ _>y*02Psn&[_3GuPw{sҬW_e[lmr馅t?UTy GABW1u}/d싲&8D?s՘ \facuyw??id2Ix,ݘ}X*Ds59g(mÏWWAdA>dBGˏL?yhSW%D8/eK%S[ܒ̬hy[P,E[}g2; l6: n-m֝)9#4C%ybנ/W.B"܎ɑiG񞅰`*N Ij/˓mnvk%c01K G_T'\U$/-}V- \.k3]v!# 2'UU|X,Z\OmeDggwvOonݸy]ߝMbF#.GE<+뺮k(GQ1.&FFD\T"RSEX CjKb"dܬ|#L%)2g^fd[HW8۹(.9O$*#e:/|CajrNTFj*4}iEMbcw֥UV {՛/h"$*IT ՠf>-L.ᘨpnjgY<"d#$ hQɧ?> J౵'=&#'!$(MQq 2plF)W{ 0} &z<FxS`,1l4!'T/#`#ҋ]{p̡*!= *639/ GIl$G!V?ù]a!+4|PyAdZnXke~! wRa Q {$n͒| mxm'l"}+#Z R/22(J қhc%6|2i/2&ڈ ŖQƳz;R+@�r[:LжpeUFas!Ɩ%F.\v B|zLOb:|7BZ. *2BL @׈!:Ca)ݞ G*SJiwA~ �= 2剈u-"D5UՑHQEYqyhuc&vb{k~ŋ[[{Gl^-x>.QTŘXjfB f"*f1[99i[`FZ i/TZ%.lX\pB@M /k׊Pp/mw`K!8C ) #eܐIx1:X0p"SYD; B!UVdxϻ &�MN*fq#TD*kKDU:-|#z_^TzGDŽ DV�r@F!3dAiXLKt}]7'0 .W0u Gw�K(Œ y+ZCq>j<<瀍ґFB>\nE aQ 7Eq!\DHq�()B\+#"D )$Ɣ@ B<ҟk] |986燕/v !~5a@:i 4bG$lx]!aq$B) D BB !D16� 2 EIe quDDR +J\ őSL0> #QILPXTe|1w2TĤ!Dւ+H&ϡƂQMRsT^_AhLj G qL  L T q gv4JeJ" �-Wa{@5<6,TN�cMݼ@#pdEη! L0^y8_$&Bi0'bY7kSL0BH  %@ T0F.'C< Rt,ʃڃ`ڃt"bH8iwi6kFyO} 2 '.\h4FeY%3/h>;:98ڙvkOOm,^WSO~M=??{򓯻o׵Wr0fb8\TGjYRRUuUD$SOSe+4"H(eQ đ$n 1A<Z^&vF[zg\j:!o%,@ ,<a!׬&XLD榋L%Q*hnIپjTނU*PaTkM <B`X3.xs֩l%4B 816tB"Q|X^dA(=A#AKH*�KM!T X؂ OlU@]4+!gFqNhi<Y*y#<P#`EO*^p|`$k`G cARv#B^" N})E" H!@ ĭEaꈦpuoQSI`vF35�B`0I$i$xcCJI!bjCTiY)B(LZ ե^}PO3ōN7.R+m;Tή󍧊OgVOZ{X{of{d2 {}Ճ yst!m6|TQnm[;/[8[>ܯ/vZS6Ͼs>v|8mV^< OYتخ/Bn8]xtyәZ$:/?YX|(\f搎hB f'R#č"�UheR5L"ey34 AƂjaRւjeRhcsЂ \&`&@UH(QXQ jX`L:j%Ϻv~ʛdm`H7:v~= W=Dyd}!{c(_'0A Tˀ0Le͘fk{7)+&hT1p%\E$<.0))I{Jk@QH�y# {y~UL�6 �6v+�dA91)˂yLyYU d!uňyTS:g[{-{楽Kv/w~w:ٴbZ-e9)i(V UU\̧!"$$ik rFr6ID .m'>+q\B>Lȁ:)n|;n&7L TeM R7G"FQɒgqqF&mWVQoQBurZ*GׁAm\6Ku>cBRg顖y ys;Χ`'p5CHP>H T6@֦VYBI sh�uVxR3ObH4BZG-s=B5c/~{;DRsHOX9+^SKsE,vD 2=)nȅ1/s^|s_)\ymq\ګ_37=97*}EwO>#>Iqy?8/,~D׶~paޑnU~VBoҟ=]+#~GLs/ZSE|gpXG>+B}ͷNߠFO_GZ?}}Aۮ+?+wO^| Yaoӟy!~K,61k/{'=c3 A_s!}?{ 7y%G{S7}S;WDO7w~9+/]>#&֯BW: ?m,޷5~n0,fmm ]rqȾk*sbHO؅u܅9. ŀ/+~TN۩ V[e!+v~PTQ*"K&;_)}W8RoQageη:;][] CG)'b9yu·B-?SeG9=PУVTλ=u"ԗPS_[e lr* 2 !Ed4WBꊨ^,EUUԲ^I"sH4*Fkӧ˛n^tp(޿;ټpcIAQV𸢂(FT2\pB-1!�|,I鈗CvWf "у ҕ^ D!!.%leSسlh+c^`c0z-Fʽm.e4e,G¨C;X<V>>`l$mWR.;8Z%bN@VSN14&ХVeɖ;k9OPR[⻻!.7UD9Hu~trψF˘$Aϩ*h7`uk\WTr@ M9_y~n 7bP3zWXJ<DϘ:Ͱ<\ SsH[6V/fs-.%2zsXx yhn?=wψO|> O_Ye?<{c~/>W>oYwF_s;?Hs^ �+?>އwo~'=c߃Ӆ׾}/?o_ÛN~ܲ �߷Y}o}M_/x?|Ι?{՜G}oy|}Տ}K׿oy畼Oߟ~>ogo[gK7_Kf�wLo?{[~qgp~TWFU~k^uSCmT?(֘cR<"n; .uNێ%un 4c*?d9]}Cew0Kq}Y`jJdPU! ρ@wwAbV0 &տ ,|< ܑJfm1[hliV3_/7p6 HoZsrrmᴙl8=i1<M~}7.=ʊflnǦێgbA 33$L\,2jQZD.ZiU/h\kI17v띝ۛ77.moΦѤ`jł,dTb")x)CԒ֦XrȢ5;ÖWe00D Mmp\"q&+ǫ3oI: K$R;}mi/әwJcqTV7!GՠsA2Cfk7G!BxϘV#ĶV9}U1̌u/C[ R D"uݰ槄N>nܙJDq_ ~*U_EI]nÙ*po{p=89vGRz۱aphNpy;,yoG (޾إqݹo+dQu͹r^k'fК׿gIWm#4q,/'o|_hEOn_}>L{y~~<sja#co|7woF^T?_e?~~MG57ɓc-zۏj]C;?s*oCf~cXWM-7~{ٳ><rD' gR|l'h1A;a2D}\܆h6[Фwy*/M8 BPJ(ު?2q.r>u0Ϡh!qO v~<xhW7lv~(up.nnDf [$ ˪$?KF6&6t)W9^!$[@vԧ>Se?^2uŽ5ʉ"Z2G 2 WO[ e9DEUTQ-u]u5 (b\%ѩz|M٥ Ӌ7/m/vwfG#u],#I-りX`gYO92~8]Z=ë;&P\e:m܄K˧Na IplP,>A5B p`q\ݥX3cn.֛i,/arͷ#Ti,?jGOJQRzB̻Fy BbmF.4*nA477t}1nFI[a VA<BalԨ`J1o%~%l"S#VG_*zH;ʁQf~RW H.TbCzxw4i2 SP֫�!�la#c ŚftT&2!ݴTAAËL4p5UXJe`pS Thl=oxBŎ & `SM jC ʼn[D*P@Hx_]�[쎇0hP!&@9V ]3&"B?{-m_m{srop_Oeouz_.z_ٜ.wIt!_[}^w\|D$D;=KW?]xu٧~ˋzy=O{.T_{}/ mWQ$TB4; ezq&LC0-˲y ~Mw*x Ę^ߛbԇ bOQ_h;׌$Ջx\L}UOD3A44 \cZ0 B[qI: b#2Ao+X&H NrutX@ .f|B/AOL! 0A|3N [Pe ' G B*V&paMxV5B_QI$bR@�:4Bqc"${o�=)';JHM&1`)7),-fY nqt N,G'R�vX0: ^)fD:{A䪊 2QAeYNƣxu<^VFd2ꪞ|_i1|wl<[?|ؗy&wV|cudB;bfh%=b$1EEjZ&낥ຠIҔ+?,T UBQM,-MPcB$�p2&@9 B@<#&ȧ3}3[x.H‚v?-?g*ˆ\;X[gjUM+ܻ۽_u74ڪ7VQ攳 xa<ww@ bLdB !D8"$3D:)P>0 aP[T�P Q!49 6{l7yk|XB8Vql @]Z{L؈R#x'Nh׾0SLwBb,jp%1 ߊaZEЧѾ<bVB8FHZlWO�7q&>֨36GIS_P yxA^�!dB("8g̲SW_a~v o~_xue΋!owpS_p0^N._#6<}R/?Ǻ`*_s;?+o:96x.{.g5{շ]?Ӆ| ֮&3ؼ2⳾"a[i3?{GA2Ѭ=QEB;)<GBXB I&|;K/OL,/h2b_Qݾe%wvu.AC be}(( з_Z|.S -vaj Z`'8 !1 1Ac1q\ ltDz*; sqqWFš*P1$Lh&H!Y!jQIE#9'RL}fH!U&`L0A"X|$S zc*gB`#B̼aM8BQHA4HGR^%BA2 rŀkt "*ˢ,GD$˂Mu]UUUUu]5RTZDhe2*On:3aHMyݝÇ~ l^ٝU(jT\-+q1h""E=[TE bT KMuUE1*Gu*"h-͊ԔeZK.JDj"`4rbi߃$EBAh'CFLwh.WP�_!7%7TM=$8R'zmqUrɾB`;(WQGrؚoo"ͯ(PFa?"nڣн%N;5W݀RH{ !+iB|WMm}@0p)%@oRPÛk`f2 v7Uڦ16d G'k<FLAM^Ri~Ǜ(f; T>;n~ 7Qn/i 0BZUhs/vSY"YVy�  ݘP5Bt6UT_ ]+`~O!$Sul呠voUSΠ- \iW@^��G{6~8'׾}yO`+ڈeHm]j~~_w/�y/ wZF_`w)/=?LB 8NؼR'W~oiND.:1C\DmqdQdb.>BvDLP{.<AVG*ZY&Ac>/_E62=CQ&\_#96uqe8齿*Xj>?Mfo S`كG $`L0<)38J@L]l*P &V!rP<8@f~@O_nG'z;?8] z,t0Lb&HY&(-L: +y7 z !d/  e 3[4vb^EO&z3܍`@@* 2 \+)ff.bTǓdueeu)kShZG4-}vd-գ'<~|܋>O>ssӟz˝w9{t6޾\|糃Q)+ e]0P]S-,THYr9.eeX,˸5Qce,`* f)J݌Y )Ϳl,bIڜW :pXO%u:u|Tmu0* `"%lz`ך1Leً ni*&8}|ncF~ Iy" 2Ɩ}o̚>#& &PAcdņ"T ! kT?a" +#QqhY#Ă� 4_K.B=A)OƝH'[w]!9=ێ�@@9El^8 z#N“ |  ' p) 7\Sx *hAE3`uT* 0] �358d l ˜:e.J#b[C/ G_z�;L)l4(=k;bPlݱ!)o<hI��UE߿y7}Om<?7s210/w8ugw~'SϼbrS{W.]쇷ڹΥ}Ollw)_mLoc]"Dv~mWTK*܏]Zu! 3A"\Qfc(v6 ruŲdrD}\a U†9g ګ7Jhf4v0�]ti/DFrҢ㤖udѦQќMiehM��r<I+jvZfȌ5;A:1AkF"> Tm^qR~!ڼ@A=P拻I(nF.MX *<LWL0 N! $r24Z �@`\? H0ܬ8ZN48 (`m3 ؃ 2 a.˲,G2 <YWWGheRN4*(*\d*rTfkt +wy^u >殏yѓ'<>o}թ|5oΦ[a]Vt>;X̏UeAeQEYpYG%-KbBhD4!ZaYeYcYe31r7ą,%cE=zLkI5*(b%on2ڔ? 2 2 <|mQM}䲤~x=ƟϹs}y۽~oƱ7_ICi/|f+O?ѝ7NΡl~ yO7:]/][X_M~Ϗ3Ҿ/{rvrkU-^?~[_wsS__O}<y;Fέzaz{f毟 /67pEw<=OM,3V6 2 2 NoddAy2l;IZ"fE-RMVyRl\wjyE[{]8ٛ]Q5.)s9jG4,˂'-W,ˠ,Sb x_n2+ ,Dp\cOFBb"X'~ NUMTti|U4$5ɧVj3lZbo %ӤK7VPxҌ &Lwe9s->> ~m:>*tC;c$YCvΨ*@SʩSPC+1�y8:kɨtM @fF )];{{8yK_2**7tBH(:l.?Tr*AAHhN6\ B?3ݙ$_Qz6<ж8vqG]Bf ɤFoIBIlN!2K!$lZ u^3DVr%wMC_S_gέ~ͫNǶFd˯^?~fÊQk}vg<_|?ؿz`q'g'rwooj ;mWxՐs/{Ig׊\\H_S~Y+hHqKxm+{97[_/;ͯ>ƥ|Wh*_i;wr mw4_teZ?m+O۟?_U>{D!6$Fl? LrvF9n푁- nlM$;,I< Ѩ="Ƃi'U8z]O& Q8r&P}|(qiϺ8,muq$Y`Y#RI9uȌ}sT"$ UhPEi zVf^T,F.ekK܊AJx]GlNTQ=yznnw4 2 \a4a*J*J&*iV* ^,ꪪj6_̤fQYGzYtэ:;̓ v_ؾtqkksowhok>J('\ RRIT"T-~˲d^rehfn,Mk&*j.K:#DRfHR,TL0᪍Y H%<(`rAܩϾSRşgWYoJ@ڬꀄ! œnϲ3उvN5qe`ָg3 \ ^}6\gH/;Ǝ*@M$ %M*v/ڋ^I#N4{4B 2R^[#+ńuA\B@#Ӝ ~>ŝĪpBP@Hq]J52e@BotOzK9i"PPռu{Z?{vsr <0[zM}=,! * {5"!ْF(xrՂ$Ԓ>_ #DB$J i:[I!$Le!0o$\yp֨6�  2͎A(lP@i@ B!tCp+B+ f =p2e}omd/<%r*|~C^JuNI6.6~9ěѸ/<�~h^͏^bcWsXO܈/;V|g-Zya�W߈ز'4zMǝ-_-%o|ASOWo{/'*S"+>3n}m'^&`=ay/^֋,BG$@[>0M}Om[%Fy_Ww1 ؗP8'`yT0gMaWs9Q2aAyZIdѨ,Ө4 gRւjeRhcsЂ \&`hF! hRv~3-*h`gT�Vc!1;_ bi;?v~C `+oa# $#x0_&^bAz8r߽y_A@W@E&ߤSE= Sr3MJ >&U>$B�\}aUB|z�*f'ܤ^{š6>zQա? )M`B )I`cgBHiAH{@DDXm&f.,,e$BRKUbX,D泊 bF+:{ntNy}vkۻӣpqtTUi]-<0RuI%T0s \baHqa 7ASM$Q[Ԭ:Qą#CTUR| au`^#w=-]! ͉Dn61w'<ܹGmfZ dʙNс1 !V9"6R]0 (a<Q܌.x(GwdJlz읦rt]xz@v&,trj!9j?XkM6^ce69p9hz0Mk=ہ *ߐ*tf(y#D*}NlW)P:fe'6R*Tl_tjTHc/<.}ybg!(x>k}Fc︘;gpߚ碿K9^٫n]Sg~=;W.eT7̯[?kz~om}S&εQ_̕|s/ks!y%kmaOh9'lJq)wwޗ6.s>e ~>l2Wշ?o->Gj$mm4$Z9`&*. ȾIdG2F)s#9ɸ۸esH:>f.mZ5N F(EmJQ,LR:FBO<j~{8ROe\2t35VcӈM~{s KNh]E ];sZfzv IQN+7TnYrS_`NL} sGն^>{1A-"B$>F,!ͥRQI+EjY^*BňF%MƼV>~Ӎۿioo=ۺtpi`wgz??:|QFuIsˢ4`fn|hB7Z$DL,˷ 3 K03B,[S`2](ӚJ#+mdH6GLD{6A [H$8GL`Y{&i{11'<Gf Ǥb%3__‘5CZDxcG$Z(N%CڣE 6TMS\<lM563 i8M CHE j. RcL}8th�k;9�| !щ>6!1G1~Vуl�x ؈]n* ?)EҬO7GG 6B'  BH;Jt$dtZ9J`a =Hw$ {M_ym.O/eҰNn9K]O0fH,>!L ;=myg<}znW/_}֌ޕzgms<'_ έ@|֙KاLZۇeʈ_񜕖uǸ_SXokMM]7ݓۮ+?%k}^׌r/տn'M~oLGj?_OjVmw̓|�V?e?}B DFOLx7%{&fx}Jb1AB&h.� Hf5(@ME|RW3)~ t)!N+ `!DUHksGj.^kJ9ǎf9!fLP[N*Ojx RurN0@HǸh<`c  (NN!!ZM})j.ث< DnRsEIrPYCx $ `#"iUzұl $+I?T0Y7i odAɲ\Ed03=eYeADBu]/꺮uUsUWu-BTy2.6֋֤T;[G67vvwC::Ţkde$c. B,^.Bծ53F{MG]6<Lӫc2 2 IQ�v�_MyC>�L|j.�ﹰ`ʊO|=Ǝ;7I0IE_NETW<gz۳vuGo=W>{J`sUϮ6Vk^ufW�u_"zENG"z֊{w\_wM?czm�]dAdAdA~QwpX E$eQEkeWuMDEQPQDeUdRژt}۩6/mnL/]^xtp(tZU"BTą3,\.̖#B!�LtkD$NHw~mo8DMقIDL6Ujq&(ݤns; 6JMf!)_Ļɕ4u%a^d87}lMw9ܷMÖ/�h4CrIڍؐ(Q$IBTʮ߀ۆ]-#cKx20C:E?OPUP<B ٬: $I!6#`C!Ȑ $Q Rj *\턦nx{T.ڂr{ARԇ̽!' ױ^@H𡳡s~hE`A-*xf#I B !ݴT|p{g.< {91zC`SBBmR=aA&@9w dFaS R'H  e90c7EPC4BC7,o}dzZϮodLOy(o2~缒׾}izjtWNi )yA)Pʨ OMfew߷Y̘ͫxLD+/9Fs^vC~MGq}ϙMDB}곲? ׈%`b`sFᆫL6MâPv2 XMv*x *bRc1A7G"@iˑi5;+M]"܏|w+piTW@Xo9|ΨtVcߗ z _!2A c&]8786#āI!CavaL;2")ƤOR8!3󊻥SN@�!I[ #MPĤND0nl|΃4*?G/xøiR#DrGX3՛ L0&ő4B` Qb#BتL }x7lKy) DR2nFY 2 _޲(ʢ`b91 QUdkkSS+k OjT, 4U4=\E/>}'>^pG<n_9u m痦Gj>:ψgLӂf͙D *+"+Z,\D%I)Rr]L.NoKW`+nIFFLl*(*#u7U Tg;*9Ea`@]`O@L·?ڎRZ%qq'VmUv=C Z{bNq%�+ݙ|o(_!BTW'*#M뀐@!-u{;>R[ Pŝ0~ $'F�-U'.,]�B̓ps څq@تR.?'a9?w(?[9ȋSYB{'T A|_-)AHVW CSy <!7[~-BXuCe,ί |PbX"j#(IjԱW<OP/vq�!dB(!4�KU(.dL.'Զ74]h>S߷Y==s\-ː+wW]LnK~S&tD㞺j=mqW_tLj_Q)_ ~qB^~"zg1|Xlԝ.Ha$nj .s Q-h䘈kE,( p)&H Rj}D4JOѨ$4nvfR:5hCy1S J [1AϪ9_ժ�V\{c2A 줝O !8.% 6`@G?@�?gGpuHReDq@uǐ0 Yf9D!$a竩/z=$)u"[ԇAcgzcpu3tZrŁ؈3o18q.s#Dn;&FZpSt" DH! 2 0wMFޝ3QAT`Ug⦂ &!.@1*h<.VWEEtÜw(wut:],,,ʒbDTEQŲ=bYZ*f* R(؉Եu ̅/[RX.R!3|LAUr^Cqdq>;(l'2V:ʄYƪcUSȕv '`ޤ{`Q@2xO)9v'p!@HsF*GUKca<{=B::A&u&R]~Ul5休AHv+(y9ǟ 0g&TW'ƀ *#xdɫ(9it8?Il~N�tQshqlYzEPxH$R}'@lBuy 5i\+sz A6/ȷz ἒ{.Tz`>^<o>͸g{NJq}6byCK>Y7�k/,v| ?t%ez0xMyQۛ-08vv˺4T.U-GDfə||pU1D(20*_7&a9\IcF3guc_yThM*,#c3 5ei11 3 c Ob�)YfgT8a&u zRֿ'2.Tdjn;]bu/UW8@Slj?2 |x_jpic-GBLDE1YNϵHA&քNUtn1^'aup8?Nԋepy$ňUD%3*"2˸/0IATBL5HQS LJ~ABߜe/yjO@6貐BڙFBK8js n>ãO3U[}v#Z'Kxl# mm6o`jD n>ږ)6DaTs#,zcHBJeE* r=9$R hE AL0QR^2A[ 27  r'4I{\ƥm#$<!Fq 8xXCB aTQ3 Fl;dn- R.O2Ci4&rxSq;6^ӏQ婦>(CE gx4[sGpSFHA% ?-g!8jcy\ϰi SA,pIP!zQ2TY=~}Il\a#F! Aa StLecn<6^ =ᢃ�[{-/I,Yb;i+;mo8;Z_cܞ{oAw-n�hOҐ<$2Ic|*P18J-BQLՑ"d`T=&L]00&X}!D! ?Wɚ Cq"4,s.QoM!$Xőeh9S#D$ rҦvt$<H.<:εvz?7!I1ARvd` 0Ge$'`Rߌ)2灘O!6D hCMBRd*tB5M i\xWCfRi"$`#p4#2A$!/D 18C e`΃,YK D88q`2 |H'1|YYsy%"Z&IꚄDj"ʚ.7$|d:;;H?}uxKۻ;iUWT- #.ʢ\,oBe1.`.ʒ ZZJJ&fEdZDʲ\.v$,7',h;[BLeG 2 2ȣU洱Fn Ւݣk:fG捇o?>ia۳u�vۮ+'}U/G9zluТx4 2 2 r2<]He.[4gb\3-_+% QUL\bT4*xRFqݹGSb{`ksͽѬrw/s4.qY(U,LK]R\2 \|N|zae˔QTBEkKԱB DSH+Su{83Ҥ@~*mTtrižtO^HRlֲB)$,j[peAHt$dS\N�M I| *TyB=d>Ǚ�ѤfJ~9XtBEK(gOlƉsvϯIO}!|rVws|jQ/R |Fӷ_g`.ԽRt"ĬZ7-*7]tQ8|�;f>xE[%C_I1{_0x Betn K@eA ;NJR`ۜ.Չ6Õp<wZ;�|㙶>pW8߷y-vͯi3LR΢#Jجl~]*kF-CnmjvQN‚1S*CWkKvϛVQTHYB'*-Jv+8%oM.#,rARY64 *Z�brJ7۲0't96SʌI3Xσ=] [{M} [QZ=H){'6`[ϭiv/W 2#Bs>z:iΜn5gEDD<bT.w3U4/ DV>5rvp`AuⅣ888ߟ̧Ӄj$q1*G *yYY뺪Ze^|&q0DMQK"HSn#ZKQZŀ]yw@s(ٱ\J)=27_Te!GˆH\'v@l#ʃ uXz}‰3@& &3~퓮FZ=+`u2R^[#w X_g9hl=Mw ]>! ~ug@*=Ԝ6+W.̺z/)*v0UEL.+ǥ{B5�*Q 6j o+BbʶZXjxZNkRŕ$\)<d1B 7[@RDw٪�'NOe)H!@B y _'!a*y#ʃFG.N}l~JbHT~&Qs!ڃV,vSUlv�_5)c/Uh?ѭYw_;~;8Z@DYK{x8){!޵vqk ;iY:,p DC"B fga.�x "Fނ*&*=i>% )@+ӨŒ?9HIXP@syD* -@A`2Y_A 9%Rz J43*hR jX9&ؐ(wqh;šՎlGI Oyr생O-v>\q$B g}(x|:#TPaN@lnRLM#D Qx[)N$Q 6[ k*+CŁ7R*soqqQN `Sp>||A _Nt/lO{C`hYsFrD#f[S$1%eezTףŜ39dk{~isvx(;탭a5UUsFuQRTz\r1"".3 Y6*Dkb 7CZ<c?>K,Dn61w'<ܹS[l~cXe䝀)7Bb#utQ*hVP4')&crt~G{5cyM\mΤu? CmL7Ž OEffqR٭E(*K;?16.uہ f47sc]B">'6t"U2a3صFJCk99.'@ɥuZTI"(��jəkً M]g9~GL^G=qF_ɶix5h[S~u~K`G; Q+r0[\C'kxhHάcM\R!=M>S­+H'η)NBV 2Ati|lq|stl/u8Py9`F+,9u!HuTη)YWq!nh0i0sӯbr2*,v/Rr;U˩'dAqX|gNĀ Bdl~i= Yq-%SY4\PATPMZHo,EUӍ7׻ӭKG[;Q}0[, -XX(,ʒˑD;BHbZ �KXڌ$r@)1E�@v:$8GL`Yeَ$vgDY7|#5f/hCJ0%%!~d8L9|_nz:Q<j< CQQaCnHBڣEA(DnRYF5N\I hS U }�l rp$p�l}Dx $o?b2DCR C|wS;*s mcS [۾�oa 8XANz6|^<lČo* D68-,͊Rf{p�l@ "[!{lxJљ$2G l0LzS)`SM1x|"ˍ磿*OnqQĜczDaV mḭș�ۛn:}*GB6Ư~+Ln4MiOPұ7�|,lQҗ:oUT+ �/;xKqG7L, j|c%sKDO92Kz}Jb1A+`8 SY ]ΏXuqx40Oa8"5^ FQlU%8=nj.^k|LXqߜ`DrI3A&pt;>j~-2Q_N6x RurN&|V�yz6H|r,�'/Ag'=4)Fs%v! , &z%p><`:/)'q*Ĺ `#ᦢKඛy<&kwv%*v"Yt2G 2 0υzWӛ ONU p%"*b&fJk*y}<::bX;:Z;ܗݽjoXT~衝ݣlXPţ1J^]ԣ eQ%h"RU hG)[b9 ]m`$]VdAdA>d*gxwcSN>. ~m'ogo7ҕė]ge^ x4J\="=.Uޘ}υxC׈Eqro4 2 \  2 !pIv"T-i\EL&5tHqR$$bq`*bT2&P$%icܹhVLg4[ۯ[[{[Ht:벮bL Zߪ9CF:%d-@bݛtM-^jRH{\#՜.lG[&NM[u "<(h "WˁQn+5S)YDbTF۵HDDEdTz\63jkkժY`cA~ 3͎Qa@ ;#mw%ARٔK??ILU?)ԝˌAVP W!iȦ LQ/D xe-ŝz"^#zLeeL5U<Geļk곣6d:Z+h!j"$ۥ9y<P]Qq[Q1rv-_ɉk0Wg- 鷍q_zB&#yy%o 9O/>ܘ.[3YUd+/1o9(2eHY&phQxkTΒY2#M*g^/ F<]o2�c }L6&h|Ni2oKS?&lGTP(]zQ;k!% ׌rG~Cf I ! ݣFEy^pLŃN-7IfV*=hEFKUT2+se}3W"_}ReGAb=BECFypqBFq7*F2�@u˄gZ{`r kFndAy G?bwCET/.BMA G{f_ !e-F%4ZŕpUl6_lN!{Qptt4ϥRr\T\0ˢEQR9ϋ2%T* 卲 &^<sPKHR MĀmS$72+ّ)+ . �ʡ"5f.1` mnT& =,KFŝXU5&qx UYT p~qFqxV7�!QqQ]d7BH4Bbb24it%;쉸tO!v&5&-`DLp'vn6]P!\S LB3=Cty:A~% ! P!1 ßDHF$aeH@l0SYN"$f+BLq'aս~?1=Q*`i8|BJ.v5*<rwoPGK~ƀb<N$2Q]!D'BI鋀vD)b�_ 򩷎y"?Uꛏr_n5A;3y�.Vxjܭ诿`}C󞐍.OϺ*Ra=*WFC>!5fK5Y'3Z({D14噏9h6|fm wX̧WhT:Kaiƀ'RşC׆[i#3(( Ъ`MZ4Mq�lr~?&N/y _؛̈e<X UTO,b1kTR Lk7{0AZ[ P Yj:Bh4B<Ti&?I ^< ʎE.(TτFy,vqsnb'QfDfi`4BdA=~௖.Zn>ӚͅU. [(QRY ѬZHDbe:]9<98M¥ŃM٩GL. Y*GEQEYBj`.u!( E-5GR\IaLG|TR1`1(fqbܶز5d",Dmv-䣿%m?G[;69 1qo[%!{yI:LC F9!,-DH!J�&3/2M9 SO@%U3ˎ&*с~iiy%>9?]Un(sزaWۇ"5F !gƖQы]�^i2`篽_mGPq^__tw_ @?䅭/]-{Tn>iWwyy��/|Qۛ-08^=Mp2zhlj]& f\i>e pvJPcvr/#sh pȐv#=9Fi٭+IfȬDhS2 RD|sm7ȏ+R!T.I$ W F,M#Qr܆WPe["5ήS�O'< Ȕ˚afd8T42UMb%"^%9Ɋm\88s[[[{[UMyU,*^,QYLFhLuɅ E%"R4sY"TUQ\oX+L겮ik^1,~P1Èe\;NBb[Om.p q~s$"굻<%?O#'z3 ݑoy GH%u k)Q6|$&=XTH Q&$M*ɏD'aJK ! 6 ؋ :m>)nMRn?BugKNۗ) 27  r'4%RcؒK yQGM ߊ=*0j"&*.O@H0B"^ֳۥQDH/fH SY}>c#5e]jS7 bxEOea6 20J~[kQ4a Z2"43 !$fK# ˜MJ D-s!v!A`@bqB#/h!܎RfBحiTsWِ W(/yrvǾg~rn~[??:%Oo;{+o:j9ᓟyu|֝fo}G;Ha!|矻Z<BѓdTFr U#c00@pkNnYTGT#g`E "/HVҦ_3Ln-`K pd!"o'+a5k ! GG ^+dhU).peÌ0AV&V&3=BD 'm*kGHA=VTdMXx݈#Y)IqceF_ߝS"0! AHhc@!DY 0q4h2hDHt~B`V&h&SW "DJ#28C e<HS]SreHl8 dAU7pYn*-hzz}wjww_.xppqpXb6T YT1Y]ZHJEQTpY0,Sf* ffnȆH]sYEYL)g56fK2a"κò)N-N5XӨ(/a4:_YQH*%=|LIߡG_!?NhJ(KexٜA0z6 Z8C3`:{М>U]KQjk){~{-|Q-ɼ*Mɇ9Fk$2;6>-P'6`63IW~p* #9#=58nnq.v9m:1BzN= N|RWI] VpB^Us#?m> >>DtfS Զ1|O|m埽?SoUR{.T_[N9d<*qgN_͝~|Ǿg޶}.ǶZN;\f �_N+N<пi PO' $KE="Y 24Pxr@l} Hei$7'i d#էmKKmEH(ژGK?|Z#3YRz՗D} >"=W64nU94hrLCќ#8zP4BIʏgZr~tEu Z"ͧ/9<;<}y)M5BQn  2ȇ<r'M2)i<ZTX+ϝ*gl.GS9Q}Aޝno̎f,^p=/rD\\RQrQEɼK1SA"$5UR/.FɸLcehK'.4"b-ϔԗfI岇e;N%g&mFT&ܷ3>`.+yGx0m!^5.WڙISM%O"s/qaGkl ! @'kdN_gnu0qK6ХM=)lmrJ7;A ] ].G Ł#9^qono-a /U Z}~X xՖlbŒP9 $9 a`SDDyBhлs =MTNC8m<_`VUҗ>m/왦Z|YXRMrX䴒rP]?\9~u'r}mn,姾7qq ??17/͖ܗ7)iw>cs<潭A>Ɠ6#Jr/]o � K礷;.=)׀[V]WTuUKWѓ FmdEn 6X:cD`A&i`!ʊErRYvj>#I~Г6bmt'ȋR<xu˯MŴCeOZCo+W]k.^,~ Cer\l,QAPCQY{7<%ukER\lk@hHtW!m |<2D.SGH ݑ1chPxU- FgmΆXeM~!4K=~,xӳsKu֭S,L-HE[wdA0an. Ox}ByQbQ>G3:8;;G;;G;G{S٫véLEU0IA5 Q)T1STD,5Q!̥,%*q/SghɎN6,(^.헮媚Kv8d;p;5 8*  g^B,<{D4nMRv�fr.`AOGe~CMʣ@/Vc{dD}(74I2R^[#צ HT,Sxst5| Fz@#πUz1`'TKs2sgir�? ${�j o+DO.,5;BH($,�;Ffw$j<{0f$OTŝt#H!C%bڣwZq>|̩/.SY8ɫbʃFzܩ3I1<o B9DB{!b0w/v:L#['o$5qW}r|O=kW{/]Q\wy6gLI.�ݿgHfv/ڪ|xAdg1O>/՟/|էا<o)owwϾ5<^˞ҧݷ+O_i'?cec鎣C_ÖOظP'j JD9H1fq 3t(%j}S/^/mhw'hEB vI&Hқ *EH<^i5<v C+ 0`)d}ǰsL0( BoWA; %vq 7f(%Q,h/pqh;?lU lF *Χ;_]\[v~@ SLP#to+ӗB<-Q0scr Owٔ 4}M $@{81)N?ʉ^]9trq B  Z2FԳO�5t<->||AdGfZUnj/ , \i}m ᢮WG+g:<|ܿw;88MbvTY],ŢB˲rT<z1^P)"B jCdVt'U!Nn>P'\c :5pIk:nj /@WP[O@wN~{skuveQ {LRs;G9:=O*(BBHK6tܨ~05m3Ʌ2]y*獨 ?unR^e:QxS_7B">'6DHQ/s~ϒgG%'H~r-7'q{!NBRK+:g?) WA>?SkTvvm5~{fvk&sϺV}mv?[/|89/\K..~E%}NH֙_Q;WWh}G%xYwse-`"wLS"z֝g6wN;o{-o~Ǩ?sgV\wTֵ8-~&xH}N1y3Fr=Wug t1֠+d|+U`!+ (I5S~|Lz]e݆օcТlwQM@\q B}Csw9/6TnYrS_/lp$ DdTdAaDQA$D5QMT1LTMVi}j.^ݩwwwvlNB i$x4Z-b4$&} ~#2;GmAzNtʤ4G GGLD{6ajh8bb,}V#& 9&z?43sJ̺0ۧIiKBprn?hsd03$F Ë'iChhl`n?*lShEGQK;'kOӟU27!R5ހܧ? !)A>p6u&pCfn·�87H5�+�o3ѐB闙cS9"S8A$$!>ƹRj6au 0#е6aFuK r{ 6�!^,6�c���IDATz0!}Sc 9>ҹ ^Ku`SM1x+]pHIQ"%JGKvv~$vҎd,c;+$Oldfz$^b[ݱNӒ")lRx�{NWUkW}uHۋQ{WG<8;Aq"B^:BS(>C޵`Z[�~oԋgמzt}a'.I?/a[_ۿ>G嵶�AL.]_ww0Srŕ!0V}?GfENzap,οC+bxfS|?`;;c}!3LLG'E̖b.b.W൅ p% &('rO xDd2!#(| §0V"5 L(LP!!Ηh44!3A&H -ѡ2A1<E y,LOX* R]"23)1l@dI0Dj�-pbB"biC$Q*I:Bj\Imm!`Y!MB(B#� @' !QI2A-WpˤI,!r"QL.(H2+L oVZi+K_,v`-u:dc:Dԡn;ގm֧UZY-L,-/,nk/]_\\[\\jkK˃k## n,׻^ى`Ų;QS3STL:2$?Mī O]'|@Q>i<ލtrn$*GoA /]F54 K,`T(ן5H!D4~ć=1>E!$E[_i!=ΰP&K:;[5 ~v7Sv}`H?-eTxOpH@βu5s}q̔؉ō|б8Ōge0@Gy>M{gР>o0S<toᝩôO;!"jel�}upj2V6,u_#[V ?SDr*\˞jWxjk>mP OLv^?S_|'Dbf]pwq~%RR>jLP[n"*(?'<q/Cc&H19&Jy1[k#KF;mJRB3,1lLqV1`QA%E8)f~ Bʢ^O@ZYHv̔6rPb0} &(i3a%KhوRAoI|;8`P!Iʉ"$ZWDX^I'cCa2vi%k%�Q s5ZiVZy%|u|Cm؍uFmѾ]tޑCǎlޝ'G=?O?y'zC|dwm?shwq,w`y}}:;D6szty_&Tg5 |]k ~\S a 5jvaƸ;YCPG"!QwH jTR}LL[뮇vCp+p&2˲N;AߍS88v�N[̦[kTv5йάE}Ôlw =oEǍ5=r1zVRMI1x0ouT0)鬨1P>@8a PGqַFrw~wI.je sU|-=ؐqvnGj.8҅'t^_A:?/)r?^>ql='v~ԛ3rxo=#W+p+Xz Oajl9%w?K;^m?oRv/:OO g $čpI鱴4mtIR1l;HneE\lWwDNe&k3ߘzCEwx-F *b&t8?ޘ."|d!Ń&-Mn嬘IaC) \Z<8zuTDElME2!ϰL,a8Q%B YJeعY0l۲Ë!zBK`yEM! RMŲ& sKJ+z1֑d(U54.wdmU6d=3ڥ1lV葩ZXy;??87p-.VZw}aݮ{5c۩;E%CSk(]MHl#6w N͟aW-#4ŪGl.&{d"OX3]lkYC'?y[MbW?; аq#u%SBꅞ BXW+;#%7aRV|,= 5念",osKZ2UUi<^dk8yD؁ 3l\3N~�9h9aER7;Eن'Fܭ6(cjh IOEWGd";eOPUFS Vv2͟5W6fب_a |�lױilDX-0B OpVrokskd= ioܮw u/>4yϑ}wᄆHIC1n6_:k_M{c??ylk?:[s,/ӟ:ܹm{ B>W>ޘt<spT1d{VQ\} {crO^EXTˢ!ziC W�1(d l@P*&eL0y82(_=磢Y&X2Χ8 w4�#)o r勢=,9q<а8?ì# U+U&?s&HM\T ^i^eGr)sQlDH`sHU#B@쬻HHrxU0}fYI#VZinfb!K7dL0tDԡq;k`ree윝a\[,,M_qGwq=gQپ~n%%_Gh㯌|Ar> s'P N:[IP R'fqpD+ޔC}d\]m䆁6|p2~(1RąȢIdNBdfG0 |\aD %+ "ćhP% @_SBy!$I MXC TZ~Xʁ屷E n !>7!r~+*mAHO{A9#D$v�+""Xśϼ 6B5N65B"R$rY$1{YKgLH�a͝ACld� b.3e !6Bk=滸clxuEx{77hA3`'-@>aB ( !>T))iL<DH@|ysAwBv!;;aϽ@=-y><sn]vW%;wwg4uo֯n­*閭J݃E>:v;oU'm;wm綽W][k @HBV*2uA RF8Ge+L9G!NNEP }QkO6 ĂdI "'CE%<Ck3;PC d~ hO<p/R|~ Q?4c9ysQ2ArLq(LN2]`y A& $0AGfw]iLPyr0I,Nf|}-"2&W`1ga4 H,cpK#ġB0A % Z)BH$.Ș % Ny \AHzP!` $ّ! !,`I2SJFC H6 yyw9y䫯:77>~Q_LZ[ouC_ڄCT߁ONnߡAlkghC=1}kwȱG~`G'>Ķnߗt^>眮(p%C FY 'ؾ3<.^(0RUK/1 ƅH c%QNWد3b=D20PA\(NV&G?)3R Pc`+E P1*Aϡʄ 0sࡊZ"AN�r!TcU}�3ތmd^ #w&@3x@*O@B9^íwٱxڦx3Ɔ=d)) H)$ H6Qt ė)plp#$XPcr|`0ıS1Tsl;րVb_A!MC"t`&)anN DOI1YO rl("PL_Ъ! !M U^]ܱvMQ'[o2D_8>~ͅ~S;'JKY3m߿|v?ҋzoj{G;7ꗶ?frr}bbyMJ;8;&LfO.rޭOZ"r͝=!~9<ҷ3L C#//l,ggn4yrOLON~0zdozvo?a?z~ss n''g}"}eus3$K&&Ar b@)x ȠeSy 1F,pw!γ!W$ (,@ |CQ˗l&齍A<KrQ̙ B DU "yd ~ CeA(Wt$ ixc|H1A6)4pE8E `(=! BH L!EI) !@I$pnD4#dDN#Y$H:B$hb R e0 ]*S ҙR5$T N", KKK~jjVׯꫧOzO>#Gva]__Hn EZi*󭆄/^|^}@d\Qօ[:1c&ɬ ۱W/-,f͉hc^Șvvae)uy]I ܭrہ $< b1KL2'F(WEjRٮOy閡 _xw6Gr"Uu<=Ϩ~ E:"8 ⳦%  l3D]L娀Ws\᫹�f@و(' k"hu yBKP 4͏�*xT3جMM&xN FOQA!%*.Q kIFd"w KHt|!u qNlSyFc#ޯٹF^fdniٵZ}ginpZZ:{poGO;zM]yi_\]ܽwݟo]틟[Iٵg~zv?=׿xvڧܱ佣>L9X:=[k/]{?=7ؿsۮO}HyZ7%stQ_ OՈ̑3/�&H)̮R!;*)Jd g䱖oU $z* r]30X9~ɡ *GԈLC裸tPrz"8 8G9gX6\%>Oz.:a DY*wp0:�Pstݥr44 M(x(-�9W9 p2>̎Se_+k'FFF}#W^]^^>v訾э7.^zT@~iiiyyLLLLLL־k[sύ/O<qׯĤ^VZi%/Z?=L54ђ_/{}OqN3{Dn֒$ `ogdj73@_hG[M`wT;)aPeÏV w}R}mP`-.(C?*0gva }f+nJsBvgKlW7E|poBƝ@;_](uȯb/zboZ0d, WF,,2GN? {&Ar UQ jT&E_J̙4ZL<ŦoW`V+3o~7Oބ ԒVҜEQ#&KdMg{5o@vNv?:[j+@186cԭ{=''nu[>2@~zs[CCf6r0b Igء8wӂ Z% D7I%k8Z#CƪZ!m"a0|R3,V۠ *XI2A孉yw8Oq?Pl`Lvc\eq>OdE$|ܳLQ]dc$ٱ{mrm,/_ >E൶D (?8{MX2i~IdH+lXN+g } 9rN5"+kfMEg)A._k:t(U�>{믿tJs}}}vvɓN{G|T}yyo`0wў={;裏~c۽{J+lFďs%he?7tӡn߅<]c{Mp(VʦjZL:Q$͟w8FAš8YR4P&a@ˆ:I$x/WY)@5!Ag&t/D#757/*fqs*UQC./(739[8Rg(>sB){p  {(�ʓ6w;r p \eac~T` Iw3Vd]OnMCt=%iM>7GZfzsvQf4yX 0<],: q !gU𷘥#ӃGt^]]"; J+,+lk@D3;VG!I(G(=ta9"}:TRiɂA[H&TPOlY_r88o6R9B!31s bT{,vw]9EL0$!|%u9>':!ΧL=r{8ߨɃ<qLKEC{w CueB $`R*[S 7Q#$X~#liHaMI_65X>aւq (7YVVV.\p{ѣl:`_XXx^~{ڵ6DΜ9ۿ>٣Vm{H׫6y6ƬLOOk=ܥKzZyN:uҥOwyVZi+F3 _ qNDn]NdZ)S(@WUh§?!,!]4Ԋmnj"W3pGk 쓽t/!PAV"OV.Djjo=mtбlXB}�6Io-XՁ|0R֤E n='9н5B\"eTJ_~>Pgj+� _w0r6n%Lxr'"!NMBY=ruD>a`?]MhCy,>vvUV_|f@=ց`*ŇN@ɢ !g#X0}!,"B!㏾qG pxfi" $�%B}Fp;PfܐbȄl<"$2i0PFG`BS M_wa|.G0!!Rn<!D%! !6q2 7( V}J+(ˡ�7~r2)`z̨f] R#$Tc=VyJGɤܧS+8 LHdip!_D$ \A2\ ؞ "7 N+ 10A+!1!E!^w il O Vh&H q>TT|a)SRr_q> EI0[` f2(%BD]аE8!WRwl Z+p"2hejB-&Ҟ2WIYI  l>s2Nfd$`r&X7&+�r@E3iҺc=ȃIn�My�lB_T x?iZ'O|1kkk?K/?ƍ~Cwe:~?KRen[Հ+t:~yyyΝǏg>Cۿ/j[i-*\D+I3:]_ :Pt:,H&$Vd9TńA:WTY 7Pxi pC>Q: g4rb|sYY}/ L�T`}Ԉ0)kxz-̙#?n(%Pb=6D톄_6gxHܾPg3U!"*6cl�̆Ә�rlƇf1݅pY0M7J~݁쌣+2Beׇ� ~1%#8s ]�rf8a< FK>5c$6%"`7,< S *!YcCh#sxTM'ӣ 6\j5rsz𼭧Pl=.{& p)!,tꥳ+DsO > #a9FףHۨVZiL׻c_w9NILP +<6u *1}@,NɎJ҈dLymVzeD"TfS>JeCFPV0OL/W1A h E)]r':!li !B!DgLZCeBx@ޒI09<Hd dVg $X@H#$$R LMpɒ`+ b�ZĐ%1)0!3SɠJҹvS1׶60,KА&| !$ma6 \!l& 6aÙ(KcD�+MtvտzG0vs~+W;w'Ot<N>K/]pKKK?c۶mmR}{hcǎ;{< /p=}ݷveIt+,wzhoڙq}} 2Vk'jjaޭ,R^wǑ 4x@GO$΍a\8 CEk7[VJ 'Ɂ#.@CRH@ģ<<Ba{�z. hROQ ϶Ot::zXs\Kmv Z(RAn$/-lQ@lr( `*n#^ls`' |pf l ! v@EHR-F)Kr꺚 J l`gY<B E&bAҊy]{mm ^+O,HԉMDtDqBȐ RRd𨠾 nbd[:} r\2/43Ð,W)V4DqP6q?$ȬD `Dc]D�)l6z_F~C42OD #GdjZe`:׀eՀ FQ8@CE n9Mj9"*?(lLk|(tT0R)gS93Vɴ$e&rduRhmnXkWVV_~ʕGԧp`0??K/[KKKVyÇ/~qddd׮]'&&&&&FGGnSAۿ>Wggg;/^G>s[k+E&ʼnMe?xO6~ QkDY_Bgj8d\Aϔ~Ɩ2gpGX,_:YaS*;;IUm5uU_̲=Pa㿄Q.sZx_W qIq2haԃW/ma7Kf6ܒ9t!GtU{Qn xǧ#נlP53�i v8";FvlCχ!7<x^Tf=WPp#*/jkxk}2|ٸi6kU(dMMT*Wpv!L+ծ/CcQ+f@yk M!nv-\vcao |iJ+a;'~Qd/wvbxYR8/滱T8h&2A7Y<!! "!牚͂^¸_Qpe5?#kIFV-AWli%DTD*רپiiTT!G2T0A` A{,"w/#ThAfTJkBo.R,?R͈WYGEk&gk8�B"H^12󐐄i "V1bs�^6;+dD㤦:u##T}7"!][LpR_[Ref'MW g[Yt8 DvY6]]]]\\\ZZZYYy^}w}uvv_~0;;xڵuqk`0+++kkk;V/_YY- \5omm-x0,// #N311k׮;v]^^^XXsƍ`0:::Nz~ݻovWVV[~~~^t`0X[[[XX(Z Zb ~Tox{o ,@K<Ե% ܱ 9D)3Z`ϰb\.j}'bcXT1BS 6}UžĎ-p7 XfW8,X s{ahݔu%*o BBA ΅PEm@QGpWRMd5\l|\I/L[skaK^ `Dmv<s#qEa[)?+ !;Q !Ej@!866(rd`f+OoCI)͠ ";eOHLv ؁`M?l{p@fLK,(Bȫ̏zE\XZ)t{VZi, rv&vR0%4R:;+`C V0puuG(IƘ W\�Q̧wfz)w=rp%mM$R3FD:UQ7qr&XHYJRc%!|ʨ{=pS/UheF *'P7ƃzb8&(݋kL(k.VMq0AWʫ_c@6VS)fǨJ+u a,N+bd䘛+kkkFЗ/_>zh׹ӧO+++U S/._okkk?v]wݵm6_}w\:333777>>~￿\t~a"zw|ͅ9r;ܿr߿~o}/Zk>wѵ}~SSS/^|rӹ;vhiiԩS+WhΝƘk׮e`Ng|||bbbll6??_}~~~~~~vvǎ{."z7z뭪{{СCO:k]|ydd{9zƈիΝ{ϝ;755uws=~N+|8'| '-e-YSv;%kWDF\\טn._c (KTXPߙ*ڱ$:auޘjb m؈QHm4[6U$3{*;!nNi?ʈ&xNz `~X?`f=dT)3*BG5`o j Y[!|C"t;g7wu][�s.S<jH5}!6?]/;*>}e8ʛrge([7yH<QbKivqG5" BdB41f`{?ZsO` i.jVZi'G_}3ğ݄sL>u縡 �?$yR"xDdvC40|RO I-vRYG(H.aQ4&8j eP4;A\F9&xJ`o*3H$К Ź *WE9CFXnʐj*lZ^3AoDp3L I&ȻZwv gʤ8@4 [ ڹnmiiٳo#<2666 |ͫWٳg||~~w_n߾oG>;vlǎ;y饗VVVn;caaᥗ^zWVVgggÇ E5|O|۷o ?O?/^xqbbȑ#{zkkk=ا>;v/O>{n[oo˗/<xpjjڵkKKK{,U]\\|wGFF]୷ުJ{?+rҥk׮Ϗ| _طo޽{/_;;?ٳg/]o߾|OO<xptttyyŋ7;NG\kϾ o]x/| {UVZiHeSO]i G'28?1 _D|ѝtrsb} |6W'^L4ʩM el0E ? QM,? )O7Gg9(|֓ĜAvԽTrm0>ٛ~(qՙ"̭|t4P4)5l0ب'"6(¶10F.tbCA@ШhjW7XDU#� '�gOY/nrG�opɂ}ِǥaTi ! @.j&*{D g{ `oշ  1caΔ~l)!g?ơ"D$ۋ ,X ؠ71 julxWY0rx  {mc!!ĝ]96*/)E 6G(f/hUG7)9 ym?GZM 49EJ+"7=Kk= &ɒ Db> 9)|@$|82&e'yXKX` 4exh={ ¥-@;ԹUC88 Q_Q(HOij,Wɜ -~+P5`-lj L0xGH bBekuy~ "dܴ܈9&H,η$XȂ$jSDP !#$`CA $BX $FeA.3( PIL0BH JH#BВH:B$g51AtZ) 2HB]*S HbI$6s<x*/ғO>yw,..:u_zG;Sꔳ ;~7''''&&]vҥj~^wַSOnm݇ڱcG׻x?SOU`p}{۶mY\\|饗^:::zۿp~~~;v8w+2??tFGG?n]^^~嗟~驩GgϞ׿kk/^ܶmϟ?۷o뮻&&&uƝNgjjjqqW^Y^^xϞ=; y'N:thuuW^_}:t*;w_7 .T[IOOO_|̙37nWr~qҥ?}7 VVV~oΝq܎;뮇~x׮]jVZie %aqV%C82fQlD-qnNDPeLϒc'`;K,B?'X^aڦB{@V6-C޽B̼YY}X]߱U]CL 'WyRy#(R8QS  MQ}:5` 0<PL[r\Wfg sy!(fk^F /ug 87),2kφ`2;s *]&qs$̅,:V7qҜw)x<mYVZiV>b--3rf/3W�NaF |y`m?U[$rsWg`QLdx7+ކJB *CW˨<EoDLH Q1<Stjkq~CCId'*"`NhN2O"؅!JE `I@J``SbNAj9{(ң 3�Lrs3H*lzD`2s <qz]|ɓΫzz7޸q?9sԩSׯ_+WWW?ϟ?x;~}~pСGV+[k'&&:O};<z'v޽^=zݻŋ<[ocǎ'N<<SΜ9}W~}&&&|'xo?oϵkVVV:1nw>c뮻\o<s˗;vl۶^~w}חc}_?~G}O8q?ý^^7O|'W=ٳg_~z>|}ݷs?ٿǏ=zȑ#SSSv>z+\Vt!`8݈8>h9f*-Z过[+u^'Uj;Lčä<<֪Ց f~qP: =W?ͅDA8mp7|50V| n8u 316t/C\")y@e{hL @YP1:27GDnڣki44{<m_ܤ,.,d^♛"P f0@[Jb([BDYp΋fX@nqn/15cX&j玏BHXW*O7e87;BUbS!!eјEVRLqP]ju�`Nrr3h S5gd2b%a!s!& `=BD#a^ZMZiVZP _r�388"!`EdsXD9:fKI:GrǚSEѿWeY&Q̿y"?2z事?W-T0A$sZk} ʾLPgT&S`z ڱpvq~C *Olx6Q%I|*CD g\ J^s `0QLЃ ֬ Ҍ S# .0zihR~CA4#*f1D6@g*R $n.J`3(M*OӤ^{ť>Ƙ .<3>yso|^{ʕׯ<xpdddyygϞ]YYo߾sN"ڶm;s̙+Wܹ펌ڵҗt]wܹsΝKKKDt=|<ro[o9sfΝ<g?k׮-,,<ׯ_k͝8qsܓO>m۶cǎ _pzv}}}}}366611at믿ovm??ڵkqq~_1f:vG?{lϞ=U{aa}#O|;w<skڮyϞ=xŋ]ȑ#UeZ;77wƍj/ݻw~Pհ:tرEȥvZi*[`ZҪFzn.:*_{/ZJ+J+AU|-̵onVZ\uOmnuZiVZiV6.볳nGz<̙3g~~/Ç?ܹ7ߴ\rý^ouuuffի+++Ƙ7x^U*w>vC=tmu::; :ζm:tw9rd0ݻww;뮩CMMM-//MOOOOOo۶|衇N"ڹs|-u=#;vYkWVV^EUm/--ٳ>{nСC{%k׮-//cxرcU/--]pڹokN>=33oܸk׮x{=}ӧwQq}wUrʩS8twր[i-�lů͝%ƅ;#=p2=MD>)LٕrZ; r4SA(qV4Mh&P!8u,鏕큓I NBwgscYa޷Pr/es'هq:2E. 6QvdGyYjU`7X8_ ZB">[frg)AenCjٷz~S +F4!Dsy [h�^_\ýң4z#J+ʇX'b琡9G_WDL0$ۃx)17\ywy0GbqnA0JoU\Ik4 PEq \:Q rB3AtIcl<Sik uYԗ`D_ LDpEjК2-rh/Y-̀d~44I3"3.e]D.pJ ?w)ȝ0T קWWWwy]wу>K/<yZ{}=VVVܕ+Wo^veeemm[Ƙ~=ٳ;zղѩݻwWY"jډݻwOMMz``ٱcǞ={v511Q922266>77wե}u]{4t:{=zhU-긝Ng||v~rrȑ#;wKD۷ovnRdyyymmmllȑ#g>Ϗ0_ٷz]Ν;o8::Zm"}I"ZYYzwԞ={FGGOƍ7_y啯O~vۗ|;Nxɓ'?}_޷oo|+aSR3, "O�5Imwq{>~{`Dj$a~˲.xv(dWP1É{}r 2(EDr~J8_m|&҉P^ s 𡖛;O OpC12U>㢴 ?n. W r(uTOYv=lh9qH8An?公3 &�;?zk;@pxK1yKb ؠ~ ͝BFaC'!FoyTcb.F*nqE}"BJa@O_�Q< NJl01A,45E bžI&,R`3g'h s.SY#KgWCx9Q6̚lwn\]J+TWi)o&ޘF:;|% 9vvR'D^LPq.uni)Gfw vt-�쑛`2|"*cक؛kSp>!<W@9B8B"&A&LO%@[dDrљ $Ć(L;'ԜHd dE`! $M1![x-K%Y.Y r$Q@ !FA,ﱷE؇!RI:R[ɵM  =4IBHT}D; ӆZ)P js-\&Me JtvT`d4?Y]]zvtt8~ /o{llǎ3TK`m\GGG8裏ܶm۪쬵СCGzkkk~*Z_'~ZBDs*^pyyyqq*[k#Qvut:n0ïʊ _-V0W;Hn N3 [T- ?;vlǎ`aaƍkkkǏ߷o_ݵkWz駟{nfff0vm裏~7|{߻vڞ={~sVZ[xc=bn+!d5SL$ 9:l W�8:IäZ=bɵ#Lm5*$]JB x)ZTT$\_EGZNS١ܧkLBjlwg`8yYIG1 ^!Oo�SA i XC^6,"D&ȀI6 ԃSjo2< wv} =܃ƨxDrv@~'x=]}b',[WW} E IOb;RҔYo=B̚-K B[d߃ ì BS`v�٣C3!@Ae[n.w9˟A�9DOaplGjLif?;kBhVZi)_on+˽CV:;·9cgǙ`%<S#0p@/bT$ 4GGf)phPL1A*a ШceW@5[aR;/iFz5>Qz@� *YEe̡g ؈R&#|)pQ_kx9֩/`_rkN !QLt́]#D0A|I0]Y+{BIAi3<X.L_ gr@#E O"P!l.;l sR-+|b!0)BV)戈�94)8GŎjJ9;!> `I$@HXH3ub]ZZ:w܍7FGGDtSSSsϽ[6wر{ .wm۶MNN=zرcw}={.]T޸qcaaaiiZQ-`Vʮ :?? _ĭvݽ{:th/^|O:BD gϞ}y睅j11:Z[<޶m/[oV>{ TkZUŖ{/,,m۶/..Vk꥿Ν^<==xС'|p{ff̙3… ᆵ|+=X9}ɓ'o5ZiVCly|ŤgO%V*Cu{IG^|.F~ 1s>z$B]hJ4@ ,;ԧ}J&~&ЊNcX[Y]|*b>2^~`#AY PR  FC21VY�bLۄHeɨ-*`HN�Z?;6�DX[,JہԲ>wgFPl$[ ĴMATR}9PA! e,"ızِTM d{L�1%Pa-B"D5!uC‡<;^{x0|^x#`/"cg2}3֩Icpa wv�!$œRbJ%?qdc}ؿ~1K4©VZi,ݠYѻ:["ɜLĀP*Α9J }8DD. ^ &U*@5&H b͎sFfDRCOVC"Hr0 XG�`s+'lP!,'k}A f� W݁J!Q~P>M"'l%R!UuJ%TVPmtaE &HL%gZVvQΐz[aDjqLL>If& (~Qӡ80P;vnz# *{m#Q� D%%buOܹs+++SSS;w<rG>SN>|#ȡC2mnܸqn;99yw<xܹsK/w3g|;ٹsǷmFDU%՗Q1lV॥j[u`6Z}Çw}?я^{cvuJܪZݝwwNMM>}mݶϾ/^VV-$L닻1W}1;w{'OV/~?+>Ãի>]*ٳ---]|駟~;M~XJ+|m{o$²"Yʅ&1="S(oVZiVZpOtO7-Ҏݷ]J+l 0?fJ+J+8YZZrʻᄏ>55wzvۣ>ꫯ>w}wUֳNLL7nG}ԩS/BݿϜ9Ccz^׫ރ[T~cjd"0n{?'O<3g߿~~ԩS.]v62?ٳg|7߿o:ujyyyll:UշTEj53Vd㏿;?w߿ݏ?}˗/?/`0v###{}ݷ}7n<sO<x;Scǎ{۶m[i-sq]TBo%T r g0e6^ѕlVR+V*T 6 zZɰ_vM)ђlQ6.dlhRnK,WE�ك<FX?~]lؽ!\H{ -i߽3"Qv xR b3c=(Qπ6EM}T0j]VI4RMGHOtWT0̮ `0nL( EGySαٕ;/"fE*n+tw Dk]%гk׻PJ+dC:9r်sl),T%Ex)d%nyNT2[$'{Cr[fѾ\@8EAr sTwIX TE#m 9 18W!N⁎z89 X#7 VК*o0iPih?KEh5�HP5iivB-d~nb7f`*Lw5[c]?0N%$r"ͨk4>~sduuu~~Ƙ)O~ٳ>ȭ`ܳg˗gff<CU׿rwqywED###>VUժB\vwرsq{Z'|ڵk?ܱcǮ]FGGwܹo߾}U3w::gϞZ{{ɓ{8x=ܳs^WՏ{訉LGU`JO{?^oo<xȑ#G~رcǞ={{W_}gtG?'N<GVVV;/>S+++vc=/|K_ݻs+!.6rqDȚv_=l,trM&AD9M2smu"(dr.�Rdh%FrǦUmʬx]-5HƎôP-aP@7 䨕r(j.3:5Vـ9K4vFmMt2OwW-D/2PM9`CبړCEdIJ:H:/8dM!:*]C9og$_6 SX|�ArOЂ>@ݖJ+|(dq͕ξ,1A<DcDi2Ȯ5te*gsA[)DܳՁP$@Dʦ2B2ǂ\ASWb&%Un<!ܜ`Ne=] 2L  BJ5Q!$2Hƕ!JARBE8GxJ)DJ̶)ajofO8122RpKU:֌Ͽ;]wu}:t:liiiffwٹsc ׮]{_#G9rdD433S?Bݷoyo}llluuٳo7=l߾T;'9sӳ<c&''xׯOMMy睇Z]]}7ϟ?o><556=={{ʻtn{VC;vl޽KKK=sرѵ˗/⋯ŋwuמ={&&&&&&vqȑ}z7xڵk۷oaڥK^z`p;sa"?_{/ڵȑ#>#<k׮^tҥ/+WUz0K/›o9;;{=нVZi#0>};HD˺D<_ը�ܤ(]" vSKYqWKM=/Im&tZҾ{31jvdaPb0˺kJiMN ]̣^lUTTKTv-V+LT,R37e ٔ@EQ[M$ <|/\ݢ!xr8w/ uB ewn0 "BBWo!9ĸ~%]frαAex!4CHq?S͂ OMAQ!Z@A!$ri]@GϽu`yFJ+/em_^Ŝ$<U:`R{J1[ԙѨkz@FPɲG C ]-&T񸢲;䚿&Ј~+eKqHMq($XR(OϐPT}}*Q]L/V�_5R3Ag`9MIg<W_k/e Mrsed:=lph<Br[h�k|s+ T3^Z[[[\\\XXNLLl۶mll:̿mw U2W/ ccc) ϟ_\\4l۶;عsgzmz^U�KKKKKK~ǎ {xuqqZ;:::11Qhr޽{ǎ:갑`pƍe"V][[z`0صkǻݮZ\mlnbeeի)ccc###�\5rffڵkccc{ٿUY'jLr={ݻ("vڵknܸk׮{ڵkb~V>|zѨ&aZJVՊIڅ(�KZ8/Q}V]R߻I]}ϬVTHOMҷj-'tXiS~`*+c]x6;^*)L!7bS!,h@H$=SBZe !X2;P2sSGhC"ٜ5蹅S ,B?R3B|AaPܬ~5GH(o—3[:nD4b3z[̶xw {UICm7~aG|ib;mU˭J+?e0kh?C/Lc:~ƤI) :"&2Ew.BU�jQ I&Qih%蔘I*O#@H &T(eJ692kh3A1ʷ*šg xKLQܩ23AeKa &Rgz󋆼,m([2AvIxSNGB(&3!f+T/%nV/JzU7O`P_ 'W'V>*w]RU-S+bfQݱJ=X_n[[[:I_VUsdd}o+|xŢʭ�VHK2rWZiVZiVZ!"a9tFڗJ+|e*VGONjVZiVZ HU7IS/7tե_}a=^XB΋1_+[Gq }_NNNIZ\VZiHG#|LaCD~M$ Y YwY',(%DTevfdAm<>-*NZerʬUp5 V k<v/kZfZϹ {lz©[ܸW(}w8TLDV#ɷн©@"CCA5pa/Wو㰉x�ՈS=9&] !~¦X?+@^Q6yc`W?~pQD}N\o�6AB}Vx�mkF!H=s0N $ ar G $bTقG)VA$;B`:BOӈn{+kj[3o)s%M&88BG`'փ~c$xU46#VF9X"B)CU"-rsyĐ/\wOh}VZiVއ0K_3_Y7(#g8 d1=[F^9zgG0^3MCj&d^²9`R3d6}~}m~jy~}%`Fao4Zz`W9sZz`UYp *CI=D+i cU<-`!S<Q)j?]Rcd1!`c#D B@,@x(qK(S|`!\ t3\y7tvRxGa)|ʳB8̥IYI BB?ϒA)}&ԙ v9G9\A2W ٬2D+cӇ\ha�6f oX')ժV R- ΟZSiUD^{ 1]b= 86TJ+bbH zr|WZݑ;6 Jd|>$o j6">!^ U9wvrZOsWeL}΋  9jTsEWaC-cCD6P-ٶ3.J.琞) >$~d w@Cˉn�9 ^ (7 ;['1{M�r!t36ا+wq+7O_ldFJ"goS9qkb']ّ b֠@eDuY ɦ da S *!I:X  k ( wpzdS{E_*8 gHsN&a@,tꥳ+D+G_[z J/4{륗hVZi}"K7hqxyߚ=./#׿9BQMgZ\IA6(I[* "_;d) !'޳' Hp<SȯcR<re|s@ áB>H6 !9r:dޡC�L0I&H! 0ABl(rc?p nMt$2 F*L'208_{uTgY 2.Y r$Q@ 8̔q~϶xD\;]�;>gY4^ɗ`R#ZYJ2<0sdi l*?$"ͱ&gEpcg_+x; HU^\g:hƹM !-UJ+Bg&BlE>IZcDۋKĴGchiT?0+.\ wym嬫-,kB &uwɹV^&dC dE\T~0T]")}Šڗ|^FU=x�'2r8<ģ*Ӆ ɯ hR] \"$XC^6,"SzOS55 ] T9_PLRnQa=+ T@Ӈ aBb' 7^@Hq2,2x&gl'ɼuafpnlOCp<H"Rܲev,e0;$^<7G Cv@ ��F;>[3Pe@4#_@$CQ KpFffPߎ<WЕ>^!>VZi,ҍÅ񯜝Pߵ$\ )rL0vv V²bs&BC 5$ 8 `Ow**bReܿן R  k%,|t8&󢸘(W(=W dd2 LK3AF2A3H&H+͢DGD3]6 u =r{]0A|I TVг<89bR`NC0g"ӗe)V\#-e~}=-Di`3RƍOen'M{‡}P�1Z}"OGI2A-M Α8Bn`[LFSkgɹfs3J"Ҍ8M�~\IM*lX/׵Ul@jK[iV*QkD&HdXXR.|VVg%2w2g3tZ w=`<.5ܚk66*]٢Ғh_ϖxPDϵkFmj^bgRDj޽& 60Q"=T*ٺ ʈB @h3'0o`U(Ӑ*2fGTԜ䓙I`Q|3D,kU I!Cx5d2V*pvèNAHA?n) aҪGf ^3fMBHdgqg{o/tFiBJ+r+eufg~fnEʧ(1ƧNuJJgA2MdPC0Hb>+Q*2vxFǍ�` zPS}`̊J 0q?WW9 Dw&2HC8J4H-a!3^Hم6Af&`I<DWa|&"OqHivq's|Sәlw5d?7'N}_+~|EN#f[ \RZm꠴J+F趧O:}GLsL9k)U upaCGr*K}QHb8>[S}I-fB<!vZ7M'�!\Kƨ~>vǴTdbk* Y[s=!,z(ᴼ_CךƖ`_Ny(I=͝r;)m6`W5KE5dydcp:*uz+J+P"sнM8;9*`C MA魨 Bn~iO;Ϩ)pL7�u((JM0 LͮV4 qTi5u_D" V{om׭:/`*ddʫ /𨈜czlTgOhͬmEǸ\OqynzUUv{XV+9j oX~ew~Oۖ_n:J+zz<Tve2>5^ߜ?Z˰#rƍ=Atk0o6fÕ-փp|t.ijV�%¯e@cm램dIL;`aoS,F 1*w:QG8q['\,E9 "DižLL#{S?| p*p,n95!C"@ x_ #H YZ$äQA^Oj˿!›fX u\(KSLmUoƚ@>En2f9q/`xou@Mv<9d:qu殖L5hVZi^AC9i7 +#E;Q"EQeH?4!L ,)B$|$PA-cKYsWLUVb{*Y7B^c3m)D{q=`*qi"*Mqq>n+Re*QIE\G*u_È8?BJes3zBF|pb}X))wku6oTm5,MUz"23 RAΑ*4]$W0T7-LYHX A[B]C!yĵ '^D˾w]TW9ue>U+r DQ\)NʋjѲ;k;3̎4Ę@x_B0Ԉ}�?3{5 :89\~՟ƅߟaŅlhg$ؠ?…9 { cYc#lM.2lÇpUHcTnh] '�"YY1ɆN6=Dwyx~;*Wv!Ba _c Z`!9M`Ͼ9`�d86H`g73'0|sȀTպ)2+ X# `/Xi.lKnNG!R1a~Xٱ'Ej:B"aH!$hP8;vwa5 ^<;befmJ+>l_7;\)e&o@W!i&oBD<4 OVי NWk7'nꅐ=%btؚ@(y/ 2Al\A.cà1x5ZDkx&G bBe+ <b{Wiƹl5X;|&'ʘ [_4&|0}kWzŅM!J L"ڏLᙧ !@H F49;C4xo!9 ObC "Af.r/k}]φLRp$_Ƨ߷@2nBy_uT+ ^0rsz B{ zU { Îu|"~ Pr`$0S wZ~]XcTIPe;J 2D k& B@o9\8o{QߵpICGGH] !B8/Z2W!pzOG67`|.=ZHTF<$1;@S 4 jG8 '÷!F<<ro)'B�pG pFkD�r(!w-!$݆O ''L !$*)1@}&a^Ai~ BjSf!rO>woBQ1C B,"Qگr0yũϫO_ n>ョΎ!`YBL_HFn@/8huI,<iJ $WknbBLBlBBӂWFT?tm_AZiVZy]gkf,('R&H!>^2@HGB$RY~p1A>I&hX QjZI@dg@LCOB A5ql@Mȓd8 (���IDAT$r2l L N3HYi8o<·H2E|Ȟ%S.'02 F $X2?�1#~HxH!#D20 E ěd~�x`L! Lڡxaz,!aM D@"V)d<W@X Αe y&g܄'fbx8Bb` _QAnxT%8ިV5֊޹Ṱ$J+|á(b4 8qdC֚o}]xՎ^6m8DQ&%ln;c}xK̢^\W~I\r|vXiN3r]Sx@duQ9%Bsgl5*`Ds\`@e ޢyߌds@MavP@Kg T* ;( K^s,G�!M ӧ7;a7bggzAEgz tװaj^!$A2;t#Ύh>ƠVZiT5a`FKcV>Nķ+ _pt ";pQb"@*^M:Gj L0MR4JB)1난U(G p _,U(eJ692kh3A1ʷ*šg xKLQܩ23Ae߀EXL8 yYP(|/df $ir*) Q6Mg%=B6>Ͳڟ'NJ+OXt[ӧO>#958Vae{TU^S]{_wZ}SL�(qbEUn5bS2T R VDz1F\°_i㹽DlR!r{D6).>Gy/4a4П&*AE]V؁2laF#Dc-L&"*Ν%_ogҫ@}8Jǔ $;Aׯ v@X roa*^ipl䬁^#d]wKD4Sk/Ct2VZiRDwlq˫5iM,\aT59my_D6Dq?a$0AQ"gWᐒH)6!%8p:2pő(o<d1EW0 %GSj$ɬy] "šQ#' -&d,>\RQ+W-~|U$ĉ8=7Ã<P8WGvK^?E`ߐucRQ!U3  l.R-nﭴJ+R$ CUl /eus vi}p;w=r8D߹ԉ{򂫡L[;Fkp)㾐"/hU&aeK栟4n3{6u-6T8uI e98œ9}vp:FŔ7 )>Y/XO7U|~~3DZ_o$sΪUgjIg Tq0}Qk#]Eh6p{˜I44D<DEo :7؀/fvdۙ%40ѴДw[KAO&VZiM -o+}O3#dRv $4^ g $BJCvFP" R;4p*cpbae`cD1P1iTYv&`e@+|d ۢ6rax wNm~7}PÏ+N o \*p�q>ͩ/h Qo`7ycpK<q*GǙF*$.G<ov)yPm\ LdZlƴJ+MD#\vD}YyI9b}]Ml]O/[QWs{陀x៯(D&/1+yυ}>UM]1,?eKB1>TAXܰs & z%z+-Dܧ ϐ)QЬ sPO}`k{e CbdBx1oOA}'<m~m-d? ՟Of ]-ޗ�JGIWĭGaXdSVH`C9T388 6pZ1J/p` ()^ SylBlps!svfPy#8;'f&|*6+VĨ.pviT !Zkg,_k[7jVZi%/tmVչҖ?8 uPw 渳3,7T1A›7xy * )! 2"]q= ͋aדh-MWc!/&RV[AaILM&ΪS|GTmA ycXMT q~* FX'V$ `#B!F"A3q~o_ZGhݥSAx FTN$[cM lhc=6lHuQUO J+J3At`E9 /06t{ns'"m>}ov{c͟:)#X" YfcCe`-rXO`[}(4o ޸2F]87t2!">ry|~ylj*`a(,._ ;orn/?xe3'27wTsuUB=`^Z!UkѭT cF$D& }5H@{_s*VPN5ȝ0 t<cg(]xa{n`sgjO1eQn`! !ގl'I^Gls'=L FB!Ѽn568b!#[l`\l8>psd9*0�*F0; H`Wuoa׀T4FD2P@;b)R"7 ,2 7͵0 >Mv;VZi%K7eos~wׯ. !j68GL0vv V14J9 !R?bT&GY16?&hJ |U|*J`CaRi9JCH+pi+@ A22A@]BN"f8/e>gL\pL8d81]S p/cSY=z L1D,5BxZ b5`i3<32AณC<!6F^ cRBX4D4 ϊ3HHOrt� 7}FC"J"H jiRpv'; -4)zH AAS)fiVZiVZ)&HĜuEńX,V82.|VVg`$O8:5Թ^:"bțhz[z-˙3|Pb^ _ ˛l_ϖx{7u5A/3҂EM"w5^k(N*^5)bk*'ɿ $ o`U(Ӑ*dzfM9'3 | fg7X֪]1mB.k e֙Fuv B q3O sV=*4[QtfChy($!$Hpyy#*ܾ'FVZi5𗈦G{Sͺ -٩NI�kL5_ 8y&tQ̧sa$AeUqc*�/:Hnlv|ýf1A`,a|r*MdHq?hTm DrC/ d]hsLTnf. VC$ {ʷ_a)rf''{B;7N=\:o 쮆Ùfĉ###GJ+%S?ip)g3j.Q3t$Hds{Q&jJ&IŠGuj:c ~B\BPwK%Y~:-< gÒMVm}xX^#w5 QGlWqn2sSh* Y'gnôMRF̃DH<yF04l,VGs{#$„G_S2O/wAM|<[s�!<SB>lMفs9&fLO*6j78I&$!Q8䯯'8YJs347ߩVZi ]$nO~TkEU؞pm[ttN5Lnz}ɭ5"&cu#!i=QKIna/:P,LRVa3ucH1\/[v֙`vr @]$QV`qs16|/`o= _+ %U�=*dd)W_>QSmpaLXt gg>ٛZЀVZiVZ) y/ e3NO;X,{Ag+D;;* W^> |-?Px `AA{yik7..ЪF T!iMy0I)TUmrh9Q=VCjxvmB#V'F_X>g(̏#l7W7֨@k[lJdf\12rqw9.M7B> U? ӦRga)QEO8'"OknZ"ZV (]YƩVZiiJ<fsӻũ_PG@ Ep?#) ďyf-.U虦 MLPVt68_XsEz?gsr2ű§T@N34a*FSwxr(s*Gqi4*tP2{Uw#R2p"7n=5̜5R[Ne`ZAOȈoԐUe46_z"23 :B-/-|VfpP5c![Hl[iVZieCo(..S :̭峒Z&ryX aB ,s锹hi{c/�ՙx63W.v - 7 16菫`Tf0TG :Z * QN+R!h=eys bn '�fQ-dʴV)7�r6e JY r(E\7a#�rHMFb^!.�[bGL}bcl.Lr7OÛh-؄$Ć񩶴" ݜW98;$U/b^xFϦў !c:tkP _%G^ea^rJ+0G.˥/~wo\Q\냲L0M!@dÛ_&*И NWB`',9$MHEQҿCP򭴄 4;Ej0G ꢠ;3xOpIUb)np0!lmoq>TXpnmV9aB2i->Wr !"/⸉h?BH3o@H36,9Cɧ$p&=:Α'gKFyX)MYeځP+XJ+J+ 9􂑛x:V$[ܾ784@~7&2TB$d;k?A8%. e}o uww &kGcp.JĩW'lCN=?Q6lĐe۬aB$| N~WRH�#@ Ѐ%:rO0䨑a6 b{ROO`"<<ro)'B�pG pFk"M�r(!gv ͝ P\lU `L !,PLY6O<G.g'R2)�;Bnn-vQ̐AT\T&@sm<wv !�S BL_:En@"8h!<<6t0o #$WknbBLBlB|h<?Fƞl 4\_/p4wЭJ+%vDeRne\p0Wd^.5)Rcל#s&X]ѹ9I2)᳑ =b,|Lа\AL"^H 3 4IHc!& V9,`�D D}cHL.` Dg &VUA`�PF,4J78>D@�$\Dٳdo[&cC2AK9Dٍ�k%B(FdGnj{^y Bd Hp )&(v2M/̽#d`Bjrp.92&]IqJ# ALP UI`H[" vÛVZiVZ) (iTL'< =flAm,먎6`:1h>w%|,^zk-f?]VZ$WI2&blvܽ5 66V\cwDMR[jTH!DN>ݺ:*4<:]Rds@MavP@Kg T* ;( K^YNBFyOovn`Jы" mEa^ؽ*BHdg1<BG:7n*njo X+J+DDsO-tQNsq2&h]X ʼs e/v.BUؼsl`F§iSb&U9ͫP<�% *XP0ʔR9Imrd .gboUC&@!񸗘S3dPg(za &Rg8h҆E{!d7]$I8P4(Nq$THiR=(Qn|̞8qbddVZiV~Ģۚ>}1 1y +�X7vi{^&kxVڣUw4xשL`n%ރ5ZkxDMh%Htgs37 !<^6g=D$W�x׊87̔37m<X|B<M ǧGH4m9ǐJlxG 6ǟp3h&fML衆ù%hnoMnX&Gkլ8t vNl"B`G*r!VlL}ZaޘW) kCAbu8 Ё=t&pyme6D]"C]w_\` ~WWB]}殪VZiV@,-/win&˝OOo`2zN_jYh%uOs]8�_6lwA_'3Aq,L2F}Zd!%\6ؖ@d<W@>c"O1A�ƪ XSg!G@EQP8)h0LRX6Afq>z̘<·A^/d[ 8!W:qE"HV=޸tiO]!QeļK(THגp.esdLc�RASwI NTW:;rD`mt4sLVZiVEԫ<CUlbO6:BJ#ӈ2N�obla'ƣJP|ew5D)KY]LuLGZDIEj,r'>vH+h*.}S+aA֐�y�*zEoͫ^AƄծE>Ѭ)Pb5= Be_k 2M"ਟM:,y>=% -W(A߯g&Ml:8b3S&m㥮ŊPu͇<N4+7cLE<~Hc fbЛgzK26$/8{ka/:} SlBS[_[W +tʹnVZQhi^_[{~aTGP;jGE\ƍxMKQɎq͎'a`^LirDXvitFdJ#AȨ,eriw 9|@adƤQޙ%*m!zi8 b~I}dLq ig&gɬ͸!O^E5pWMq0ƌDWğ+mà!W\9K}TV&HęFv?LCRSs/IzE*Kl 2YV6zdZ'nj˿J+lNw1+_O\fM6ŸAHah!c4)HFE׊-?7rչߚC͍aTf)aB  ̐9}T!1T0lGţvWs U{_G/Ƕ_z c]ςwub̒&. >):B[iY'0\BZe)6@0, [DcZ^S@!;*2Sl8-,>ۼ*$6}yg㤹sEDo[^ [l9YW쉯tc_03%ZYn&i|VZiViyVR+#~eߘ=)i "W Rd 5 ?o k(*($YˢB"DIy1kDe lM-adn*3ųx}šSL<!7 ذ pc!<1Xo,+:INM`,6 v-j`lLԪͼݐQ7]CHG4OPBM_ÈҤxZe 99Vw6әAMӷᇂtg\{c�D?J+J1n‰ҷ&܉r;ޘbI p+� _Bquw,,216NoT7>#?lEn|XlZH aX}[nbd)v`잉͝`g4BM!ʆ77bj8 ǷqU PT6FR@ _JJa!!v*{t~+ U Y5|q%"ۃ)@1wҁa>)SLxm !�l~q6lX0(@xQܿ6w"o̔No?lL6$?*ܲevLY͝C*=*0�*F0; H`>79;#q׼2P@;b)RͲsv%H6>"E<n^կ?7n,iqKקiyZiV~d}n\4{V~wׯ>u/6Yb?J Q Sp#hcgǙ A$ԝ#0*`mڌcOw*j˘ 'cT x_Qz;w Lt8& 3A48DF$#HpHQ_ "68 !D2A�%:d~@(,E`"`c�cLe=燒*vaL$*Po*dxB1)0} '-bP Fq{JE�Uf7LݳqMO"k[!=L"q�V62HH=z z?jI$!9GLPKs$5 1p1xa 3=P0fa*J3bbJ+J+v?""R&'c||k+}qFP3X8!>j08 &:_3g$xX@ۆíRl_Fg�yY ȲX$BxW5)@~顲PEQ--rͼQhj #eRe[o6,=5'dfA0aTutoCo!I!Cx5d2CIFuv B q3O sV=*4[QtfChy(˞7 Yl!J;vo_?GSl*#4:F#42R:J+8 hmVim%\iw Qk'`RoKBg:%%گ1A &2( L0Rq}\A&FPYݻ0dƍ�` 8{MYz Q 꿫6A"PAR"ӷ&X0Q q<'Av1AP $XB�j(" I9S!Rl 8"#pxD*SÙfĉ###GJ+%S?ip)g3j.ܩOo7yynRs{㙛lno4B "pw[$u~kKuHDln@ձT816L#fcX0f:X=nv քOgnnڣA8c´0VMR]x_>×fs{x hq&Ib>q6M||b@}o6|S!g=[,y6~v} Vhhn/qMԌ|@kr^@`#h b{km!8eS6�8q71gΑ"H1^)7}<�)Oa?N!I"*!#/B6_e86`�k _wޟZt^yZ_-Au+]}Z]%@s3wn[MzljN:d<*2R'N/)0AN(b-}9G#i69(jy^;tuߠKuȃ9PY� ,Q"e@(xzF 0[na/BlB6a_2ra3ucH1\L#@fnoXGq͘{R@I&<9kVaꯑ3 0q>CH>Η꯺Oq;T&H1$L0_ȅ@)#oPØs$d1&ΑB2p[M,f7Uَ޳k7Q8BZiVZi\p9~p3TZkWJ# huԥqK:n#Kz0|?DcТ M{K7jX~I6pW/ɈзϠ Ko=Q+2w//aÅ:5V9fiRA)lf=^,6e%R69,S 6+ :J"$qfݜ?-D& 쮡ܜM=OB b1;6> dsP5c{;W:f<~=*.uGۣn# ZiVnXKuS봾N];7 ~n2|ʒA2g`~7 !$JAvM.ۄCyk3+\58qVB'@DḆ WPP䓷.fRR*ϭk)fO drvGZ*7 L &2Hƕ!JAR�.~#H| -Rvp+J+ieW�WѲ,_ZiVZiVZybf`/:߽Ýoti5wFOvCCSם[iVnXe{g/v9VZiVZiVZiVZaҳLn@j=1]M'&l㷗6L;g)%hտGRO}$QKp]T6ۊiнJŅRKz{(6&4)eݥ 09QL֖yt`'T WΥU𛟅}ĺBey]<sSyR9VvWNT�519`3vC5' 2 ( ~B(X׽B¦68ї&?!� B/4 fفslPH98DHJeoL$$8&LEkB{+MWbFMSffD4[[3w37w~P{g& z CJ+~3;>3wGk#4JcAr}ٰdqpbj#&X76#_;BaN5"Jb&QԙѨT<�W J38* UTZ..a>xXlcf&Ј~I/W|h36PYIQ)NhIhɺSݪ6'PEb$s*ˬpͪfLل$XspiڳOG"}ή)*gQ9\Iqv7ZN>%8ΚMֺZiVZɉ11ZMΞSw+&-څo|7YwnjEB!B2͝ȫ+Cn.*QJaFJ I3r]SWYɅGjXG4q~|-B#:! fE*UQUݭv*%[TqT$SV jPs;Q3B5RBZosnVt?wB|t 4[aLX-nDG/>E~5,B˞WEI ,6DB;;:f(n+G2+ĚEI<E}:>JEeTRPc(cq Gcs 4*> M 3)|Jf_#@H &T(eJ692kh3A1ʷ*šg xKLQܩ23AeKa &Rgz󋆼,m([2AvIxSNGB(&3!fYYӵyVZi\r[owC95)5`"…{|K2KեaQgGedlhnNabs*ky]aPbH4Xo /'xXⱈ),Nua!s8ks WMU}(Gh 2(Ӵˎ Ym@HdPE;Q!@;1i"#D*}舢BC1}߇`nCF^!ͦiB7 +&EqzY:vϫhnzugNzkykʜJ+|pdZs{F؍=F[1̭,sv2?2͡ts9k0Au ͇(Q!~.9G<HN{z"5H &hEa^U\Ik4 d*c_T`b`+6\_e|X&YVg `!AkBH3-boZ�-}iC:jӤp9NB匳KpHeZRM_CI8РJ+J+d-n.Qi j�.N>[DWLfhcy;Ru>4]о͊TNץܘNHа""H!A l<rym7Q/<>rBz 5<Tjvb(-MT)1KqqyL9 $Q%|TH?)O\)Zai>"!ӧ YkT!j#{rن;k&2}⤨s\i!BݛA�P`џ+Z\!�vL9n΍Y!YNEh0=-]nd"/~s(m,\7v9nvvWuUl ȠC/&H;;T&hv1T4*ۘչG%1%@oRTS9OҷM�t0^hWz͛>EkIlh1BԮnTؖr Z4-BnTi&%cQΑ ~e`Fnw}^VZiV~reff3gȃeQ:krպVZiVZi ;oan0AK4>5S.x,8}9\y'UNtk /i# fCoK{è MTz֕9ܼ-챡\!J+J+Zk˗/ջqt]-ΓJ+ no͵ xlݣe}o=\njrcu>P¦b!vFoW7w-=)t^EmLqoL5p7?QNUl2$3A͝!y-r$6Q!lԖX[#'ܹUXR;5ax&ABV= *TG*͎QU.*{`* ρ*?Wϝۀ8^WYto|X /WC.dS~|5oI䶆fy7;U(QZIPQw M9rVP"D7܇k"O9Tϫ"7[s,mb<XQ!D䯽T;;gG 1rI)׈HUaAoqZEa`7";8ՔQ YQa$wʻ.aNOeH2)eo1BTls3(UȤIl,77 dC 3A߷Fˀ~RS2e9映2 lTH4f>1⍦)L ckNpпUL@'V="\b cL0Aj-íXCsM"ųǒ(w%Ώ@I")B^D` )|�i_ۆ #(D!>o,.\1fdtԟc@z=s 1U}.1}hCd>]s߷ oY\] %J:dÄV11ů%^sV(ngsRXgёdRg8K.uXkv} ?+Cf8)o]MK@7Q[bkr * Mȥ*c"5Ll]eM ! Tn3D[&i*YS!`Ѡ{GYbH=*ODZ7VHuC٩̐Q"ΝR9o7fL,S5;.5l2>7 Yl!fCB6)\e *$!Ce(6Ā~W \Ԑh{K`Pp(Nqv(,LC̓\QT!=ʢ?:$UΎ[զД!D׬ #$ͨ )CHd] BR1HDͯ>f!d ͆A@S(7 *?A(&WFɹp(KPø)qcArc 7 Ӕ: ʺO8_4%$U.2}a!30H.$"( pC1"H [@*jsCWkɲ's7 VMMgJp8?7\(fѽz?ɉf3_nN᝝f&?񩇂D8Q"n8|( 5}" Xpm&jz e싾UX@me{Dc@8=EHC"'GrCq~AWl8fFT-[(pN|Lk-d~:s&PӨ>0&Q'KL夫.]@AkqCٻBJ AL wCiK|Hdj/m9uR\;ѺkhL^u>8(1Ol!kqWBjlP S$IHu Tzk`kC<aV&XrL:ԟVEZ12~ "'7nX#@n<6$B`޵h&a>K=OBPpsW7!5b!!:`Ǐ~"V@ks`F rld�ۂ*ao`8Bn40L#�oCsv)rLCH+DnЌb1(B`x'!!D5U} !3r`�cOB*BHCg7h <I\TxaB@0d!? Z8!�bBǣ cFAN !QC0dPEU8;C8G nsyq>ÆKq>aOĢ8@rgN wP&ęXל_0eQ�8?":@aAELwjW EϤ!bL*BbՄ0!bÏFȤܸba"ٹ4Bs4F8Gn;:e L.|]zHh _;A%ϹS!�p^ 0Ne}G19TEA0r8_\1 1`.G&t4}#x L3:7}> G1AJ3A8ߟ%z8OW8_1}:$BHƧ!$;/ ,}aC"ġB0(Hvј @f> ׷Aq~!l}0s'ΑB2A:ɷL8; =H,Ҁ x%ABp6n$ QnhB/9LaZ$B$B`@lps" m&o8y=دf5vR Lqb6Gp`c F`e|Lq #;LBp(&!ʆC!L((q~0} v8B_L!qfeW |$WlKؐi!(Ҥd$L�e i |bfAA22AQ.Cq7< ee' H‰D5^D vAt|-7i;:=ݍjTbmrwkLBXhhQx%±.R7XO5p^x'*TwHJP䥷䨕rt)ԩAʂjWyuV*>( >ыŦL`^*(mü`Cp^1Ȓa.wsL0CtTrsf60> !+TjSX|�7�Bu$:66$?}!G(1pfv�*44hA* z7O|g1Bi6"8c5̪[,B2A<D3}Di2x M_9稵yk3M_nu ԨxCav-ぬ铰ˍ{ooL50}! "DTL3o@H=z eW*IB(9U.ķxC3q~ *g -.VP*.IqUH&oOlr/k m!j׉iXa~#$ "Bxǒm|hLB2mfu E(-4%#-A J+J+J+J+J+J+J+W- 1 EblO7JfwQ;N Ob)) j;##m_ ZHKGnnu|l"\wlm\ xqݔb=|H_l7+B!B!`C1hd0*<p^QP *q~`h6s gbj}gn+߿:B@?·]'6n_28Ag<]+|o`8a lpWD .6>oꂽX `#}oP 3u`=B^. {6;WT wv !�S BL)݂ӏaP.9xaUx+b:;6Aί7z*+|p;#G)1B,eF"2† =pwa쁃QCE."!/l8]xрVN8Z'BМ#̆_ʆ3EЛ@H;wv@Q8?. ɧq!Ppv@Α@~8U6v2LD89;l/cQ|||~ϔ  &w2TbBB`nPc8o]Hj?7lw@=rK`v#:B0 F2kF 8sd)=4}#&(#g0X<F ρ^(fqc dN;G6DF^ *N"Ċ|#Z a\J:GB(v|{Α|A*y<G3e痘>GO-0} "t1{ 46}(_%!=8OFpQ8ߝ|yJZBɩ@,"0(Α2QgB2LiS5f@ ;;>Uu.~S## )2 <şހԽM[" v#J2Hd*'D K {Bg* (Qp*$߁&"ixk_-%2ή><pva7]q>_Ccy&BFX2-p!$ D) 2_ as`E |_@<*B HN#$tlxH51gQ6x09+78'�!<ّ譁]OߍxhU=Pps6T&| =!AD1(*Pc[Yǃr1O}7zae/6bYQOC0xEP`{<C`ä5Zf+*G˻*g`Wv>-u12$<α͎Waw ,_j*N35Im-S! ľ=*PYGgwfT$|nz 8Q$~ֻ@ h TSexrG�!M ӧ7;a7bggzAEg6Q&kX;#WEI ,6DCl�!TU<`Fdתs,TAz#3#3D$j6" ׮8;yzuFsq#5XuBr�r g{[ Q;^BL"peFE% *|ѧI<E}ʹ8هC8nBQEpQe\H1cs�Wѳ4:p(ͤπŦ/B(o<d5> &P`α ѣPQ.aboUC&@!9ǨSu碙Agj.[(WK ⬑t_4tL,vB$-T.BӠ8őP!14z9>P#d\ l0c)eꮦDW9&8G@^@0Aw!rE19ʤK`6j>1`fC8}fGL4(\`_dL:LI[P""3oE_pBf7cI_SY _CrԞ tgD_0^WJbL-%|y爱{ әD-Z{& Y _G rn/l7Ĉe [iXe?{H:#$+m7%t3Ǟ =,fn̅Kɳ _Dn&!BFaec_MTMl_o).|@'{e=!BO!DH8^Nt@@NfqڤRh?ߠw 1Bk)LM?=$so<clM#=DME! ! @HzOӈn34PL{Dx[i`up7ql4zasfF0KS#D%! !6ԠOP#3"NHLeᐳMQBAPދx?6hʄ*T+Jg;:T`aPX&wvw)L΍cw l?Dqv6`z,H߄"0A2 ܚufS;;Ύ!8B"gv�v 95wl pcz\!![<D><*V(@8(8ä`~ÐUΨ I)wi$ie"}$dhtPAFP=>Y�1"d!( !hq?wcLhL}R&`#vr`i92gWj0\&m_"Mxy�cl Gӗ!rgV19F _"giq>W# Hb8lLqD`( -7}X`M/0]zX"Dqa\i"!:tᓏ@8?"ο7 Z|L1J |?(WOH3tA=ucҹp!Wd q[f7\k**O͈wpZ0�1n3A$\A&%-KbXv@>vN\SiF F x Bb{+'TM_}ekM p r)Ft /Ⱊ-s�[qP@""y$d ИL�0)-S/pw֓`!Bi) E D?)UbB862q>OhD5<.#! d5A X CO?QΎ@.PW�iV qԐ75%)[e6rղK'{ehXLR e`/bRgAkX nS9y!xJJ@^kqW,96QYs HS/Q.S!2<q9R0 S1l#lu<\GCWlEv#RA-V!9ن Lߪ8)\WZtfP!@?)؀sgʦ;6=QVXũ1y [ u~Cƺ ؐʉփdvx riϦ,[n@e�I.Wz@(džBeݥBÑA' 5N7 &^mLf`GC;`nW㢲S9OҷM�t{(?Q6q~B3稨p- 7 <h{V%rҶ(#9f"()$6+9]b-aUo?r، Theg=ev`*g"d(ь؆{:J;kz`ñ_diTl dQG*n.5~{ Bdy, ;<J!ٖBPCdu5M>Qe s )h`+J+X/J+DZJ+J+~*V>,Ҏ}+)1~}A﵀G|ypv|s=߅ q<Uex?oodqƆ}þvmjZi}Qp|Yy j\H n5\ !ɭ'd_8X 6)(-͝بob!$lEsc8zep)}8Aw$ؕ$¶5 +Kj3zTMŔ!nh 04,ƓkGM,#Mndo|m wqꆙ#U29;eTxّEԨ�䱍`e'L 4>y7V= vDAp__`]cҚRↂ (p1BX8dzPڳWFYtt UY ጘS:r``RPE ˛e=x}ᒷ_>4[p(FqK d7�[\wa#D Al_떌ISY \󭊊p=wΎOEOAB ;8oEO7e7)Ox!nP 6~D!Re!u6KBhxB)Bfmx; OnI0Aݥ )`(VA2 x0Ѹ8H|7;s&"|sTwy<b 0)  *78 !D2A4}=b %PoKg飌cΑygb(Bf@QdQS|  7!2BWCcM/s$RLu_4["D}Q"Dɚs$!U� .Txɞk8GLP>#솾ΦU&tAeH6lh8#&H `,W -w+DgGP�l2x[oBpk q)Yο ,GH:j.cPA8@98 X?hbM4J$vvn=8 !!bXDHxD쁏F\N*9Dn.p+FuC &(P#A0A'sl?*0j@ !!<fqq>3}P. ryEQV `f*8w< e|8C G) } h,%z:DftZwkz_;;RF*z(=jzktwr@lDvz5 v!աqnOu5A/nEM"w5^k('n31PUPFeAh3|Ml#eReX&x߽,zHS$F8)&Y1(I~[K<䩝 XMoFuv B q3O sV=*4|!4<CC#$HpEHPMx *W٧&B@D8TP(6G< E  U7(gʂ^14!8BzEwi!CuHf gjShk)k3'| !5vݫ7{3I"ʟK 14}3TsnܯLP F1(00M]YKй$=K7$7_;>o4)u suuJ#8_4%$U.2}a!30H.$"( pC1"H [@*j$xpƃdڹY|?`%x;] s@!mݫcah6S$X͎ofz(H){nGQG-3 kD,AZA§h3Psc(c_wEYBm6)6Dc@8=EHC"'GrCq~AWl8fFT-[(pᎡ`L$L4LRe �EK_X]Z ZcUw2߉i ŐLBTP1chabl [U#lRjHgaN НbJpñ!bTƸ W" c|!\GQ O%jWh%jkq!|/q}TCA GP<R~nScC"->U'^i! 1fnz@M񱻾/ZB!fǏ~"+Y\$`�`Yx;`/ecD6 7}9�a6َh GHX�n63`'-? aB C"۫ gVB`x'+b7ݑsv$;myK1B!!!Г1gGS8x>=7P¡@MdS1]sذś>P!oC0<BAW!C�v! dJp`ّ3l U X`q>yOq0x eBi0Hǁ&$pon(�Df= ᦏ8*PAɸFQ|x�tv BB1& X!1jBX!B�H|@%VyXHv?=Bx8Gn8tj; L;GޗȤGQ9a#1QCkv#Z;ǰ? Y85m~ Bz{) 11\L0,4 v|)kt18'bq>*,%St8U=D,ӧ3AL"XBl1Bгq~2]`Y<ù)`$;hLfa.<.@b1]`1Y 2H,|bL0w*$C>9mvIg̟8YmhHPҹ~i7h@49c0 ="\8!lX^TX@qI!rg(B%AvH¨p`F-aʨiuA +,lS?$A[]0"]kwpfEW]Fe8thM!!C5K8 p|dgK3BfD,#!$[ *AO%bA!l<zᒪz D]I%I<?'M$96p C<H:<Y%#Բ:Pj+[E`TFxLη)Tc!$zh}IB쨧Ʋ o/T6:P9j<FS Tb<{?GxR _X<1RLʓ:&ۼO++֨5WӜ^0l�/ U*͹y0va��gDarȜc VP'616l3�7tHr#hnsc{Jz?T9cANe4](y{ [ȼES'RWK%B+ȅ&BGŋDGbaPlC? iBU.BCȍ.zDHs@H5=Hz.Hz hg#^:x @7<?V=Hm/ߪIvilwfW*Ctq̪7:Ud~L7С6(_ ¸B.+ADV汑lwSeG"T d#sn|H$J(rʧco^YH‘|rQ_+&̅S5%@kg 2u+t_7M5F8.ujkbxWف@g_S7 h+aolE.U'F׈[7BgfET'؈}&`.5 M3ړ?3,�ґG/7U_LvJZ4# $Mvt㓢ZPP>B)诛)+Szyl7AFb3_cq-):f�llgl+V BڜkѸg9!%�nU)g0(Vx?r~2>bfAN5B_'l>ЧDhk"W>_\}X'tNQl#xӟ5|k🇾EC-5B_ZxBBlx9EHX+0-@>*&#/K >n;/ߪ WIaoZ Ϗ`2{B=*D\[kZ8?1;2;fD(nf+:bp%WOl(mv|Z#xRI!}#O9W3/͕aƱԡG{Ѡ 564χPxi[4gG~<߻ s߮;TYv*-M {y]~i00Y`]4? {<^׮Y9PHQ/hϾ&G~]0_ 3kнM)-/i/@E+m/q6jn 5]-'O= Q7 L'{6b_5KA6g|LmoL11AkH*"r(7#)U^]f<ENn 6ܚ )? 36"`Gȓ z0; *eA1$ґޔLex'L:uta޻ōMTHXAR*ױx>Qe zzJ>*c񫨯)xn"SY*swJ!Zmvp*sLdu'{?F|*g3ܝ}oFi>Ln+H:gP.3}Nj\{>�br;Th!9[K\uq'O,{< .Wm<fosy5+HQ9wS%ڻNĦ$T1j 3dqDvV#a"+g- p `W p`9C)y!x+GT -GL8I7+H^u劧s`٭d7'7gqɛ:<X"艝c;w}>ޝ){m"$̴{Z#Gxe>yoI[wHxH]W gv2,eA?/&n1({^q5x?wL?W6,Q}B~(?n@SW;z^>�22/IĎT nx[[%‐ R*PR}vKrL!<n4PQs>=I|Znam SdNKqn k) !4rm_706owFڙ7Ex\$wR}%maij"_ɱBzxN>%k^?4 . b#av,<knu9- a^4ۣ6W!; y]&;vFsG:C!wʈ$*FC i|gӲZ|O!֗J79f7qYf1@iGW�QU8fcrӡ:_?C^gHl}Y1X&GBerlPR U.7c0j\0BS˶ _ .*y~&n%H n ,ҢTnbi(T(,*=DlE^nXFBcj)L] Y%$GHvyP ^12v@:%{Y?[]k5&\v@n c'ؿ!@P97x~CgdߏN"Jׅ<yfYy AڿM'|rRpCsS}/"ϲ |^׎S>XoD'kVBw3+`s'{n_;Ii db 6p�wԟE?/G/ۿV'33Z^a'a0>yml?X�"JT46"D] -fF&j@ D3;¤@,B 'ND Bռoۤ:L5#$5866~Is|]ۻc@ Ay=B&>6w "$d,nkCȊ! }֧OX Q;a  ! @0zqCrO\rb@�t '!$<3m!C>;"D H0EZN $\2z[l2!$D2@k".(vF": !(P VdhʐCˆ.O *m H64b|zۺG`>+9::AT�g <@H $(AN8ٱB�"H .v }BDHB[-̒}°8�tQy`NJJjX8Y<!^'F2j2 mH2##B_,V%5|#FdDDUxWHpG]u*A⅒K!%Gv~Jʒ#Wh+a#&钣2OpAq74T;%׫S8y }~W�Q丯!91CrWJpIm3eq]?P�l!wqJP_9Nd,]wY#$If^M!y%8!S XUOBqIII…hpŠj{nFBHHZ ɄYwB'G+ p &W @/T(dTlʞԿZ z}T>FKvU7)~|G_xZu3:ЏeԀL| ]LJ A$^L0-B'dCyt,n1=B,)6(wH"B8T<\b>d |Vv<ux~!R!D2pI !6TϧR D 066<I틳KP#Xۭy,r̈&!I%Hc!@ e}(S<$YF5U<y_?·n+Z<'/S/4+n,U /`-I`EHC1}& ?Lp <rym|ޡQ9_@UY} M]tjX|P7rOZe(iqVQzr9b^rev(MO q#zy* .�*duۦ8impHMݠ*\ڰϡ|�k/'}'96X\ʁ)f䆊lu{v$o\:'tO24eNzP@r? /.-~bW!_7Wr'_lEN܉K+B4�6xSun~Oy-Qx]Zn_^c1Qp/5 W<;F>Q[ute3J <^!LcO"U"|7-g?ɏϨ@EZ+; yzq b: V~P=U4xو@/MVc^c4WPx4A#B2,i|% nRG:=&ذl> òI\cK5} e <W X^:{=_?Ŧ;0`zi &hk)-q!qGFT C_adb=2s)"P"^lOw n0p"L8; Jͫ\|qw er bZ Ej3rOZe`ퟌ>:M}=YWyrS 2,.4Wo2{ BAVd'ru_E7ťQ6IcԈ84=\ތ!:4ܴ` |;N_P 5|)Z`xCzowq99ɫ+=*s39l}p bKC{/z?�#w )PJfl!r*J KVNjQ3 1bcJgF}Cse $ }˽Li+~mwkZ }n(OGoT@Crk>EƝ~pbqC}Us7F+R䠙&{ocOBHr+}fKdÇ+\rT"FSNBLN΂ѕvntF ZY.N^HM+$ja@]uqhṟ_R~ͱ!Bl n d' .B!1D#_Xr`]yz#R^#Bš]De:\u)W1!Xo/$;' Q@_u?3  [bdN難f<=lk- ^T{㷵Gƌ߼ޣt�[[bi:}'J~GP6B!Y)ί4ٴPo=C"7Lf:y;ݦEP~=znOl]9{soϏv{dw\i0>qq:l?{wO_OӞtH;iNB渝]>*87ZgnЩ?)C .SV"5d{j*#L=饛M?Q:$GML蔄;:p<?Ξё+~F.L[b<䌐 qW\=Yƒm*#`T11m̓Jِ.s 3n<}~Iu^~G\.=B?G3#!"o6I~k }S,:̀ƭI)v;8(2ɱVs얅IF[?idexBU<&!1H2[oEEOJ^NfΚƫpH"r9c<vg",uwDgٷ^/w$9=۸Mw=Aᧆ3U|Ab/?*vgk#`-JA VB kW,=/G!v) *]$,,݌D"2¦f@B%L?PaDs ! g*20Mp%l4��#IDAT&Sypb&v=zY(S�¨BH"ŀ2+=䍮h5p1d aOB_J3=V`l(Cd.B t( L!}mm"T( }[g@r!&BTtB"=dWu^K U̕}C&�eg4CY!yy BB ]y BB4^!eY$k 'w2k[d1}}q<LQ}+0O{4 HI>ʟ_Q s ksGk<߫p~ѠT>JT>|f1H' |]r[QRT , ,98'ٵ.Mη0:Vnu8-@bys;6yr!6&\r~~(щv~_EdF~oUZ'tzlK[QRڸ>S\\ϡ <Gr*j_z-0KyQ4s/2`;7 _aX 4ɤ Z= ;NZ^0*ĴF*Dž"Bɠ|{NS}/yGc C;اִ ?ejs9h<7x Al8!˰Kh^6T!^(#6k RmX3Bpt/ ؄! JBMw?\os_5 ‡M\ bZ�!ɢ"O+X!Nd #9!D;o $|(رG@@!2APO6w"D�{B\j{aBB q #.Nv�!vhYo/dA}KGgvG�a6(%%}܁S"2?G W B-H2#DRH9Bϲqbd')C_N,2:ddb,LnbD34:d*`@$KLv:*dGˈЃA,9"MT`<$UާX"PA<_4S#BV8oPxR8F<xr)ٳ9{`e!Q*2J$+<?dB5*O . Ad|R de !c)(00@TB8-B|u#CKȡWKG~6@aPI%LYSDiГ.((J&9 Lg�8n N.$c$Gi| $ك\YrkDϿ-9<[hw,+AJ0)1QwAp&`P XI`"9_РN-Xz<? }y%8%B䦯`"'6B$A.qp:C*V$/d T 2wn f,%WA7)'G!DwM _ Bh'F|*{8YRN.GW6l^TX@qIX `AR, X5B ͹N0HE�{,�0~Pq$ڒl-316I wq2#S`"Tҡ]7iFdK !d.B<M3BfD,#!$[~(*9�I9B8%ٌ5x> %U7i5b0ȓ]Oi$y$'}ئ.a�N '_W�=EC@8nKa.v7?+fm /X'^p+G_e;ꩱ%ț4Um *TAZ%O$~>aaB2~b .9GxR _X<1RLʓ:&ۼO++֨5WӜ^0l�/ U*͹y0va��gDarȜc VP'616l3�7tHr#hnsc{5?%? w_2GpO@.BK<=s]yd"`_[ )Yc+%LWoE#0 Dn翟}C4O*!^=Bo"$gYW̹? wEp=H$=k3ɑvHR+oU$;߃YS+!_w8lf_*SMk&B  tˆj)7 \"tY "Bذ2<g˽*.;!o|v6^G"WGP>E6"8+,!Uh>Ȱ"8/t.rjn?̗0rjϖƺJl__4mڣ\ ⟎c4ezC[ [+og q#u,|=Pl7M3hR!\Fhר\_y f<;a]>JNatӗֈ[7C051;*)*܄,њ��v@Țn`7�MK4Cڮ~cw=.<Q!D /pLA m>/Nm:rdGXGL|P%;:WUQ"m?]!B:<EȊ r7qa ƙaNrw7|!q1C=oЁzyV ] W`qK f;3{�w[8OIE,M+*S_Ɏ8MfOjt09 }}G/Sd{,*Ք"BV;&�nU[i.+*A"h_ =}C%hN@N[ }PNFHE 9n}]~Y*n5k %Tɑ7?N%.go < O˧wR}bz6?xXhVY_*[gB( D61Bo=C Fkj})%G'ʐ3sxYl  INY Ip j@\ٙe4뫬eAگ�6s~ ?0=)uwd@5S"" "TǓ/c<U3x' D B$'ie*DH< rE�;�!L&';a3`A4GOc #$; *gg h zKܷJ\7ZaHجlIPy]#tRgl|ng)83Tb�aSZw'/[3CNZ hCNo xp(�[N(9?_donxr�}`_`/.qed)M!s[Cz"ZtbP{GNzgPٔwuϓOGа&Ė9YmS| XT=\^""oRs\Y%R@-0R(\Z*Fj[U>iDd%nAeKvZ,H>"$Q:қr`,Hz{sB' ۑ޺:dnFx>ʥɮK-!INx>0a}MU`-[d<t̐)0O)eCD卡K6HT:k$hA*fZFsLO: ?mAG; ´ÛsWv" L$weomٸ&9?8"}'(>9 }8+E^~7(&b%%!<^:_O˼ '_8c(OW+GoOP>9_^z;L܉Vy#{ъd*̶2qϷ$C_ɳʎԴ]%+Gh/`W$Q ucs3\mPf`}/5g'•Z@y8wq8;psSʞ O_%Tz]ar4<Pˆuh䡯٣AN<_:܋S(D֭wI,76O.l+@ {'Q2b_Z=)?#pVŤ<ש.fXW8qc#8j7ŝL|he}1�;VE*9 x;rD%TqNXAY^58*<r#dz)AƵR'5TURIbQ;ٷ+܈\i :(bc]@E4Yp:kSN.ZxAf Ա@K >'XeѼ |d'5T23yDbB^ !saC(%*; b#m lp3̃ZưGy u!dgQX-O0(=!RڑY\}rmIRy@? $kͳ=S&)>X( NnLYP+(#k&B)HSdGO)!ky"( pFʼn$�?|a.O.٭^~OЗ\{%^&/Y&'1Cš0~=<t2Fh>ukC҃BZ$:4 @g/�Q C[QQC>59ߖ6bV tiT˿~<JP({+9}y2VB1ۭjiVV-!e�S`77TnEC;>ҾeT9ԋ�[r~ܔδ7Hr4&G2=.7.ڄN)޷"G =48aā<!ګ|dq*T]t-tq %2uϲDHKT=ҡ:9n8sS?n<^4ٷOv ϟ-WAx~"7c!6Q,&zTO!{A(eo3N(P8DA'Nµ[V>͝e큳zSpC Pxñ -R^fSߛD6wXnb20?|h$Қ'(TTXXN-~5P"1<D>x> D0LZJXV!8U4L\!mz.`ɿR 6w.! QfAVb(]ذ=rBIُT:L WI"&o] B *76x+yC]<&=nC ƀ[<K!!skCȊ!+?%e<#I_B$C`b!^!ZѾ}v\0w;=Ze y5 qۃBD06= }bby*l,BbIK BF!sM0*6)Hp_ !pA3ѡNI~ "!ъv#.hVYPī_kС݆m.[OisWt1 DaH $(Us 0';3C0BB8@=V^@u8F"D ؊Ǫۇ �ADE8ԊB)ezURBPI!RI˨(#(bsdq$:$d[8wB#w] !za$XIYr7qh.ʮ˨>ArYڡŀTRCxC z $<ѵ9w*'}%1|\^+6Cd*cGXQ@]W} c NӪ.ǹ !Ib BFd`"B(+[#D S%<$ݤyr ݤ$NT< Ej{nFBHHZ Ʉ+h}D74A_JPr:*ەIt){ *`$s_A&ђ]M$;ɖ\KkB[e$`/`ZN0i4Ž&Ob (o:!S]JXܱcű+-qHX*(6 Irk^T<\b>d!.A1GLR"B$CH0Bx݈sBk*x>&<#B!Ml_]!^#Hcj9BfDd1AD`!ACd.?_·n+Z<'/S/4߻Ux/Miۼrs^Z*"&e@cMF%<,yNF zCrn:8Y1V!> SV?JZU\i%/\* B*^޶ c Yƶ)NZERi!y7p o$G*W6s(=5sI r/e&&q E"}ra$->rӔ:}Ce�Ɏ'-vmus%]1y2o!B䟫9q'~/ �شU{O׵g`^8=E.Ry_Տ-?HޥU[>x !?ذs9F>Q[ute3J <^!$O-xrQ[7<l9I~xF*Z�WӋo;EՑ{Mdj|F|ziRlܰgBʇ:막P\fqHs<m/wӔ=B^&)~1e`m=HbO.A^/C N]4(.k๽"~_kS3HieƝqy~n>1X�mc6DdJor&ƾ,2BH9Sq"6@qH u]&fs{@b3ek!ܛ&&Gp2¦ ^@E'ӝt۳daE188#2i$ AXU�!1`CTi};kPs{>ӞltBzy !'vb>Mkz�T<oB�[LDȃ  7T6?h׸IۋK8!d Nd;ޑ"ky !:4:,;_Tv^ bޚ-ŁGNOrr9tۋ,D\ =1@fq+V(P!-4w_ɎL!!+<A[U+f tH,?>;)5HZl�=B$DY%/Bac[ r~^N%8^4 }ek^x^w !Z }rt@TnN *"Z󻕠2|B1I wnAM<LB?S/yZ"s@B߶铨,x>ux-ذh0 *!BIΒd=^ss> D?J+A\rFč~/u3>IDp` !`JP X*bNz? S ,CS Jk7VTxhYxd圥hj׽#&{8! }2!1q_]O|SQubKvc, %"$ I4 "$eKC79Th!BPbt;Gl3#B0nB*+S $ԃt|DGwf3/V- ,Qm5�[Opsǹaby0DC#.;|<Af^}o2ȼ:>Cټc'Pbۡ?'F;W!"SٕvVf ۴,*C5 #qWBDF !HI@ɨp󾇐*SZNC }qc.AHÎ$,gzl( kEx!m:Aʶ"T(C|tɵhQD ^ll Gk9 6U4X\J#r]p /vd@"O_$;zvM3kJ-Hz x7e쯕6HED~B->{H>8|Q &_(J>'O=͏[ڶ &2I>ʟ_Q s ksGC#{U8yYhP }T xD%*xIrtJT>W.9^U(GD*NpK.IDvKvmZnu8-@bys;6yr!6&\r~~(щv~_}Ѣprms\bخ_bC+YϐM|ɷ KKf֦ImkB~`?PQғo_oqG~}>~}>~}>~�A<q?퍻����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/book-banner-pre-release.jpg�������������������������������������0000664�0000000�0000000�00000114631�14332737457�0024501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�������������������������������������������������������������������������������������������������������������������������������������������������������������������������JFIF��H�H���Exif��MM�*�����������J�������R(�������2�������Zi�������n�������H������H���2021:08:11 18:30:48������������� �������h������ http://ns.adobe.com/xap/1.0/�<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" xmp:ModifyDate="2021-08-11T18:30:48+02:00" xmp:MetadataDate="2021-08-11T18:30:48+02:00"> <dc:title> <rdf:Alt> <rdf:li xml:lang="x-default">mermaid-banner-small-pre</rdf:li> </rdf:Alt> </dc:title> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="produced" stEvt:softwareAgent="Affinity Designer 1.9.3" stEvt:when="2021-08-11T18:30:48+02:00"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>�dPhotoshop 3.0�8BIM�����,Z�%G����mermaid-banner-small-pre8BIM%�����4JԒuTĬdICC_PROFILE���Tlcms0��mntrRGB XYZ �� ���acspAPPL�������������������������������-lcms����������������������������������������������� desc�����>cprt��H���Lwtpt�����chad�����,rXYZ�����bXYZ�����gXYZ�����rTRC����� gTRC����� bTRC����� chrm��0���$mluc���������� enUS���"����s�R�G�B� �I�E�C�6�1�9�6�6�-�2�.�1��mluc���������� enUS���0����N�o� �c�o�p�y�r�i�g�h�t�,� �u�s�e� �f�r�e�e�l�yXYZ �����������-sf32����� B��%��������nXYZ ������o��8��XYZ ������$����XYZ ������b����para��������ff���� Y���� [chrm�����������T{��L����&f��\�C�  ,6') ,@9DC?9>=GPfWGKaM=>YyZaimrsrEU}|ofprn�C44nI>Innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn�h �"���������������H���!1AQaqr"2435R#BSbsу$6Ct%Fd������������/�����!1Q"AR2aq3B� ��?��=���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������u,+'$<I]}*^C^COJs~Hs~Hp@9<'xy痳C8W^!Ƨ s!/gqA<~Hq:旳C^54gi�?$9CG�?$9Cg3~Hq`?$9C9#!jrF 9C?$8ӜF 6~59`ml������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:G'Q_.>b ���z� �#�W����@2�@��3\rqz������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/ru?XǠ�=<= +G>,=B;="wGѱ�4(!ߔP(iǤ;A^� "pC�tcIRl_ڔ_fCP����@ xzP�g98������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|9=OJM�KF]ڰg.GMjT^�.ŹUBwZfXHmlxwN$ɰ==%d!)I%[-G"o|wf1Ͳ)>4fq}duubHdT .IJ-TDmRm%gt,lW76{D I]_9šs~̜icfp{L޶О^gWVUN>q} <Rn:MTO~,9"Y{XV;]znI89Dߴ2q}@7uDJKٝ2�=��=<mO������������������������������Y5BR^lg_}#qFn>=w9A&SIwn,ջBgTZLX|�����pq>dɥgT}"Ussr뮵\xH8 1-P�l��������c)(x|<LꗣԖlA8:(Ii霚<fK]'\}$x^?_V�C/\�)9}Z������������vO:ʮv>-EʵSR%f�pp]rʖGC{ml 񿙌mX#�쮬ﲼ ݻC_MӇԚOrFxl�߰48M)FOZ&WSc<3ܹίY\N�����xj^^9}  [m�����\j~|jO̓7J1sR[noC %r{ ȫu|[4x{wf[\�l��������<,Wù[҆yWxj\7l͢Yun]=k[!xxn\7hw _NȜy'(zm{>'87����������� W|ܽ7lg+h7|7h^}�j(n�4��������=暏w;J5g6kEJo�Fc+fR Pk钚s[,| ׾nWEK}ȩľ�o1-`�6������������������/apKԵ]hs#_icm��������]*XZlE wL)I6ǻ1Jr֗b[&P�������WM�Kܶ(žҒFnRUZy--]A:[Ր_MJ<GM{0K[�@ X.EOo2i=˛]noB C`hivxFO[:˜/Lᄡ+ '*1|oN_RĿi 0���k Yr}ya7C$w-e7#웞-I9nW���������� XXO1)d7:+ɹ tpvz(?/0m`�6�����������������zK{룬Wj6Dޅp@��������������������������??_ ؟/k1H�z^ǒjd/�|5elmۜ54c,vSk& U]*q}vwF$a}1TͿk38.o%'e>˷w>5/ Ym)JPo^ExQ{U(MZu;--m n|AbJ)}m33W Y(Bpt:ڛ} �ǥ�eDn5.KZ'49<[fT*V=]J)9FNKߙxe˟#TiFK~2>-GnnMpJ/"7;$'Ѷ\0"IJQ+K%.2XJ\gz)Qv3n7zn9JKbpK.*ۆ/bߒb[jYFMB5O̧v]mrQ{K!}wJXՓOԜ2FVMj s�BthtWm**NM>H2Vf^h]vCN1,Ef.{-oLf}듗޷3yʾo'VK̟Z."ͭOmvg(,.JSZMz?C,��%^Orqz������������������������������|l9RRM�>?J'$֓k죌yo d^1qoK~dqk'4%QZ-JQzkh9k/I.}5.Gx>̨97ic%jˤ8RĦ4RdM~&7:ѵe8EKQoZ^E!5R ϗBN5{c9ike(fc&8',R)',R&lK~#ķ*Z}UO./NRDJ 3!Oƞ?"K]'i}1nzٰ7s_YI#e_x$}nĔSKM2˶aURq(盛ZN[i?rܼLnvDPlbvFmyk[4rʔ1?6޺{0(v&;{bJ.2qi3GT uތ7s`hXo&s3 c-~_]b,[!]:kpܮlˠK$�#p9Z�_]ܢcaϤ{En9OޙuAO^<*kO�S+F{tirR2n; -<mΙ竨=uY-i4kMwFtY5o˙b^_4V&98]6Q|5IpyF'tSKmk^5#y+d.KC<)eG]{%bOKK]ԯw&d=$+yg ȍфRe&||.7ܾӂkl'dI=emUY(MjQlʟ-kdZQK.-y|w+5ח[5se_/K鮄up(2r%g?4 /W<f5il3XRc"OCvR ("J�ghzkg8=VF]X>/IY^Wُ ab~76fTq߉qzoͿ7FIK#-pϿ&tPs,IF22C< 2$`s25_ ,FB|I~g;G+ُ[2VEw馊&\sSsw״7w$%(+|n :.mr7()FQzCľ�o|F>ҊHY^rϗB΋v-Ip2d?^m5,LFX�'ķ*Zt]"4wb֋pk)E7ly{R60k8GK}-' kM?y*VImG2auD&`6OɮpkrVkZfmY7%{#gTeQ&6AVd|`LB2RMEwsŪUU5jcf\uѬ 18VK-2]n/cǛO~\|M?zz3E̟4}׮]XRqd}dFMFo/^-psqR^d|x{,ʶIB.]<<}�oCIJ\ %âQzrmMN ]4R7O�6[~f2r�i᳿[]{]#Kdr*$K}sMسf$]Ϫ^E&c5.*:%ˤ=>F2kC*VGg/XNȽ$<#l֜*GRU~[OsǗ^due�I85Ygzݸ7•BQ{y:wxEuFmAmpOBMs7&[/TڔNd{tdɤiO#9Ouѭ厭 ,IFJ<}K0RS1Izθ-#%t2+ag+rj x I} 4pUɭW5VMڎ=>om62>uqrJy%gTRھumfq:T3Ϧg8+Rb͜p2~hbJj1ȍ4ok$e -3RKQۋ]Ox?+dK\շ7+q1ĪJ5\=7~)1'n:#$M^{ǛGU,|IWUbUs�?uCMRz>&ߏ:VPJwMi�$OS3XnOI#\+rj?9}1ig\O_/KߣF{1lusr!>et[!G7x}n^eho,oq,#%sjSbͭpOOQ̶(޼ط.Z&9mhqsIu1wP.R~HЏֶ)%n RT־(uB Uە� ijUKR]ľ�o4N\J=SFo�Иج6J.㭺p˲ ڮ/[x=ulˮ*PƔ`z ̢tg[C;{bJ.2qi2vJ#4^g|j M-sq3xsLݶ*UTW7Wxsؿ$vk4J܍i3/&YW9ˢ9\o("J/ >^G] .YnMnvE9xCyeu))8Ǖ}NUU.]& ʖM8=7d__c,KܜR^_aA)]h/R.ב_YcMZkof&Yq+mUg)6kțeZpQ/]{l9Ouye5occ/Qi9y7+Tֶ䈸_ 48\QY\j'Q-Z3UMȸwLuWGN =KÅ}d_KN 71es#3 vt!%o&7W*&w_95\_mgv{a뚞hWlqz>]lg[k;c ZkLìʇ?2<[C)J+\Z᱅VrIEE3ygxngJpikE2wkB7Z̼Xgp�p(xiY;p'&[g.g*ԧs-ygxĭNSzF-Yj]6iwe<RWp<z]6ߴ�oĊO"qE(ld u0rV%KD9[)Sl[M(*9QZ.7 %\_ndY6b4ԠI//[٦3+>YkQo]1)Iq{X;#(ﯣE.}zz2KazQ?}?avUxt_1XfЭ4KЩ/%gtd,d8WmjK_—5<˗O?$8-snOGi~$\S"ߥ[O;}_3~cea(柇]-vO̻?F̉gdMMJשkȲ啺a.SPW/"Eҭ^"|\]ܒ52۔Wy>ܲ2ߧ)k.VُLF|4̹e/XJ>YFM"Z֜ x=o^dVlNnT\Q~dY4,{9<HK/ij4UǕ]7U֧9mf`وӓR$kؾkf̬e/38mQ6N$Si}nfd+e8lkOKd[}p(&qǗ*,.l_2MGugtn+mkhJG V.kߣy BvQtˍ!4|*fֺ)%q{9?onnErv>/Iye{.\JP=6nKˢuz62~UFėcy|2)E)ŧ E\ՍykLon2G,6B9rَYq+Qm VIW&s0,JMADK.(F0J/E9wpRMrj߸�FK՝+q<)BVd9.W.d6BRn1֗rȶYD7΍RKjI~l_P_[.pa'�/;!x-2,ĚSO!+&'#k>ͮ29Yk]VM|GvYDCîƏ?Iͯ#C/2[ RkOUѡו(18t2h~u斫O7:bZ⹶WoTt&9BKzkE\<IeQyVQ.)5XdzEIv<JvF1]f3ŷKk} O6e:뛂] y|B2?�.ZGX&`6OɮkrVkZfmY7%{#TI퍐kնw1pQj+bN+R5s#N ᥴ^�Sw>_qJ|57XRQn/BF|4+|~;5j�"[:ءr:kދ<O Wܤ:)&jO[mz'zj2UՒa]sjO5DO*x}}ο>rVJ^kyeuy\:xt<|f ˞BW>gߚ3)TfN)Ep{gms=t_/t֍.#|%(=I'bYuYdL,@P��������������������%_bAq4Hdw!ޑ𪰞[*vG93<_|*y{gK%-OB4Fyw}eTW2}2m0[r^N9wҨ4�vc+;I~\7AFE?U./GhȔ斻h<+rmOtBq3 T,7sz0(v-)mSPnI.eهjMJm<WG>qŮdKR[.3uFʪdy\iʶilįW]bG3�d|l9ϷoF%mqQmd)qql|<IGŠ|7+6{\hzx֛[OO@�^�J5v碌C 5]I�J zs?N������������������������������mOO$gفU=6%Nr'gQZel%J[ohgj �ZvU8:EH ɳ[^U1`_W_Socf>Eȵ7^.xni3o!\&%f�y8I/iTj5ӣ3Jhpc"Vr*fi<1^^ElԹzҹyrrʟ5Ye{|?z65k09J1RSE򵤜{jɂ I{ u .eq}?}K+~dZX7SY';}|,'*ܩnv1r5$b2nxlj*'{VJ*/Z 5uFC3ƔwQ}K9ڣ+-y=<^'mPiY}5fn:|rZq:ݫ[[gVNVMrrM@7~0K)ٌ+=Ж:W|aea<'-L'e�_�+�ħF:ÌVK6ɡS\&N<iOK^b],npȳSAwoW0,ito,lu]Jս')61{n]|Fo/.R.kp>(fO \AugcZr{Вlۏgp?&u>#9})r~|k=$wђcd\yK-V^^Whʖ]8VbϚȌ3߱lB_iRJG_ F3mo25_H{ͦMѱ-36Y|Qoi/)F r8{82þR~+iYg=R^L\i[3B Ɩ6;7 Lr^9F2墍S}9eYmY_ <iCP}{2[x]i6Ћ}{2v,UrJȭiEhq+1$ޚ3M L ."{UqjjeI][ O{3ˆ6n4m#0,II*\]Mg75}zKg;$9Fw.KT oaiߡMab[q{>fl9˾yJ* %bhx | =˷[>}ur)zt9I7C2VlaŭU*m( q|N9IyOZc+כ?-.oGŭ 6EXzgv%AqMhVτpt#ƽʸ|&ofJJrd)x3߸٪+>w&߽fԜSS/6ܧޢEv-eڎog1t_Mɒfe.Qʵ՗,�Kϖ \E}cZr{Вlp�0˸FxxJkVpFT!彿q$mpnti>QX9h XfBnA ;ofb9q9NOX}ޅjV%.=Jݻc3Xq)Z~gϖ32(9tQ6W5<`ܗ_$Q�}�k<|Fo/.An#'iX,q�'�C3/!]J*/Z%ϖ%r`pЯw٫+�/Ŝ)zgOG\;r4) >K}ȫľ�oyĔb̵ԋ"}ұ/+Ej6<JK1>Mi>L4("כzd&ynm eLeyMNQ,,Z ٜmv2toe{oR xJ|ڴ3e(VI2Ǵns{孭b\R㺥9o_!F*OZ-;gOVV%~�Qj!yWxִMLfpPZOgmvSk{^g̖a(aO^dBk={ F:Jmov`M=4O,#&R\7iy;3508{q2'>ULZ5q^ύK])IdPȳ&|~Y^qoܾDXyRı1RmkL&{I&_Ňč~7X|1dk3K. AE'e-Q{ڝ3{ 87SskB 6)'/3F<jj?ZߪfR N$茬r]}gq/ VJN1i)ZV4̹nɰTW9=$A͍%\g)t,sFV[.{DxN $37WRogRkB%][{ QK"83UڼG9<J̊>UՙkPhQkɕ-j/[�1p-_˷TMzh>'+h2Mi�qHM̷ pu^+i}s-??Fh.5.^ e^,nũ^ɳb^NQvJV9^W.m~#n_|?f|Ptќarb̵ԓC'4J�3#"|i'/$X?$u˽lq�UbN[jK/_ɚG2\4/&[4(b`u愣'%*RYfRSq[ٟmnvIO͖Lo$fZ΄߼O\a&ʍL{O,g)Q̩ ]qKh+TKgQ~օ~#]^e/MGqǭ][j_)m>qxV8"uFNOSy0m5$ֶ\OHȃbmz<Lc]+_g[DXvkOO\>>JLwnp�e^#<j|82[3j 5aƋ~e!,%=1)E+~$T¶'[·D_-!8"Iq,Rظj)) #>JTWZ`\UiP57|\+mﺇ]{mz2^dޙg*<P3+{r}bױdWkR^RdT:,S\Џ_^߲Z9,mZRii>yamUIy7+]zBҼxN*Uٿ$g[(dd'וy=A?[|\')F*[ZqsȾV/q/-zRL2x~H{)%nr*IÈ%I3<b98KԊ]Jƴ&7k2FToǎ&DʩGXA>q}//dPɥon)m]VC[\;EҲz旡g#)t꟡r !WRIy?~$nu=^\LMi,//RRuyc.7_a7ѳ0Tlu4r'+' q! מs8Q҄=9[T�و8jo{lcene&�dC gR[ߡLa,rxs8gf7KiS}OikRKDX~,Z'eU˫O#7񸊱vvr+%[iqs5D|_[3:YpeW2XN1Rrq4G9%�F=iH'#^]cl�5xڻܿRnp%.mw"uұ9=ėcOefr#:q|RYh?�%;*o_^#;Ӫ~XNUJ KFfh,گvzIm2V�ʟG_VTSO8E*5 ŗ4y�v8UʜK<[U$֤teGiXfSX*0.(JKnRZ,pO19(km쫇,IQ2QfYKaoCZ̓җM"ZN^KDk_NqN6c|ԣ_܉�myAFȫoL1dU?Vs㔚Э+Iw5!oJK`ɹI6c6Wh>}eט8&Dȩڕ> {-r߿E)(ս>)lTԖe<'?'>eL[5ȥ&ѝfeK.9EE#Z4ET;fmWc)-V"5:%qR~&8NW+O͵_9-eq+#ȵ>>e2?s_L2_U^iɪ'[(j)6KmE븤u8$Ӗ�BsuǼZhq-wcJi?=슺l '8Uj {}w5Ǿ6&ד kq{HYٯ1rF=U,޻���������������؟/O.>b9s{J=/eMGF83Szyo"OH7fg,9],oq;i*#כ}OxETqlt|�~Ĵftdc_9#ū'bϥP/KSN릺]gCRͧ4-Jku߰ï;sh]>[,_G}_b-v,rO]VtⲪ,dl喷B|1siER=։վpGӾKq|dWqLBpW-J?fM~%<IT.TVuVcɿ�ٰ:) AWrnZsrFVk*Oԟ.]&�Tz� @�@�N곗�ECU|Lf<Os?N������������������������������������z\e~ 3qݔ���������������������������������������~�WT .7jf1�@��������������k?#`X@�4����<bX[Z{+Yude'r@���������������������������������������������������������,qh3� ������k:xNF?[iA,� ����68#� ߉?y2 fch� ��������������������������������������������������������������������������������������������Ϳɝ ~ |Yz`z~D*oJO[G36 -k{^n2!o/7#ޓT;߇UoQ9ɽəVw:⚜b.Jsջy~Ԣ6TvusZߛ%dkm·irImwз- n]'"m5yтU˝i7O})R3}S(xN3QNK]ש%)CQ[O,5f<ԗy"-jMwm?o/fn<k1.U8uYI5Zt<fת=/z)Se&MgLMk[ )c˔gGquK}6!(Ϫߣ.NU|(cs},zךdC%yz6Y{_y$g W[IE%:o-DD% %ɯ&̪NQm,T '?ZfV*N oO2o/dEL>I2}9bPEuZ#C}'ҫQ&ڗZD4W*>㮨Mi#3a$ͧI~sQ^MĠ2R[Y��OC4�ZW2*:2mO����������������������������B.sWy=#Iq9>'u_ȕOMYnjܵ{场cb.ї'B2oS#>,V%_rMla����IL.p /d+o8JW'7܃;VwcvKn)58o:[KDF#9=5ӷSje(���� ī)Yu=zM@Wd#c&@���od(7סf.%[I˩W}χ y{5G+ÇἻ3jki}~ P{8��cnIocYY,ۮ^OФh q5 m=޻�К[U%ݑ4i4_Qơ89i4Rng6љn�@hpZrU4yuz7~#;&&Ej1IfMOlHF̪5Zhqux1W?.�1m ��������(#%Go^2�FsEiNGKU.KE!�@��������%/$+Xeh"ssyf0˔lycj]oq'FTS_V?ZE9T\H�������������[}0S28IqgF7\ٛnp�лȺq<Gk9ioZxH8 ?9yT=I[oVĶwv-EJSM #Up]8gp�������W Pd(O~>A�:�������� |)VʶM+֫jrZo3� ����������������������v</&QRJ:kkH ;ĆZSPM[KѦUiѧŬыhq# DYu������TSW Kkٔnq_�9n��������*Mn2Mx5X^m~y~Q.������������gQՕ 7}ٌr<���������������������������������������������������������������������o/:90vvOrl8YUI7bf)F IE$JͪG/hϣߚYC,ԣF/z߹z8)n2:mIi5LtΧ._Sz6}`()%cR_Q5(r}P_"mH'TrTd EjK?^B|y"m i9J19ֵ )5F/}9)ju8ťbTRM뛕zх3TU[ԺO�>ԈG<k2CWW*4tߩ=I<~JNjZ[z_T߉OI6eb3 )KpI&SJN�/7Z>՞YNqzeSz}%'QrrKo_g<[z|ŹuF(Evq_g[[wОKk[ɧ6;n17}R2ҒItt:T½ti\=H`"\~K"7.ٯS{]vUϑqbTlmw�����������������������������_Ƈč7H_&ch|Htg<tWW!^Z[>|u(5R ð|#?? X.̆8W%Im�AŞ]zK4«QY�Tx4q&yoǶNyrYo-lVnd>>UV?GM}f:֛^y[ڏ n Tygn>u̓C_?m0(ehé'=?Bhps;Ī7d¹OG(Ԝ䠗Tgp߿ ro('k-QPw/-h)*yRFA q?7wqޚ~񓸣İa:[+}K*W[_yC;8k.yLJ<oO˾6@tjX+/ZK)YTg%S*qzSoz^Fss=߅gՄ33p%EtZqm5٣r=mÛD. TURo]{:dQur]^> >ԃ0"jqêXpm'VO3ՏeTDre{ M,wei[68"p\約mÅS,ܹQndRuһ*'ImkiYF9yؽðjʦS5-t~„,lpOC |N)o&WtZ1d}ySֽVp{j^\Gn%]I/mLm6=8c2ob�=%Ւp?wq/?wݽ>?7|oBM˾7!;Oi.XC|޾FFi(º<hvvw홹ijOq}c/R*VFpz^͞-<4C6Mli[_kRgW)hG R{1W[+&J48L]|of[Zzf^4q޽~ZJmq^4{DU>we2|Oӆ_R|= D9gbv2|շ=o+έ~ Veq gĹ+[m/#+g7/$[f"|U|SOZ&D<�%Ǣy6]}_djGbٷ)r <nZ2msoOb9[rPhk|سL[Mi5KVKz(f)lˍW tFQ{^Ӹp)}HϚKԓ&n)=>D=#N9iw-Q4dV5?k2].psAE6S58>I!4ixj)T|Oqn̯ U.W]M={9c^�q bJ:9.g=[ùדR_HF?ן�=4ZfDMmE~ "\_iI/>*]O;"ߓΝLWvɪle/+x:5Jp16C"[D|ku(-FgcVN77>mѓÅF<Iz|�?9ssܤ؜lZƫ'2u^M]|/[cP씥*o?ͼVwrԢ"2xoOa8n77+<_ȗ}ySӗ*w7IKRMK[9Ğ]zR48� �S$)C][mxlrvkɴg)4(=rLlJs{٫-er{Q^͓)3{5l;e=%Օ3w^3%V2qqj:yooRXO_�ʶWdNs~}=yeFqϚGK}+<x\V,>Hc,ϸu\T_f9;^85bۖ.76#]/qC_WO5VU'/#p؞:,͵i֛FO S=)upo2gBN2Zzh;䱃Dr2\W.pFE84/]=i3[k{ITwQ̪/2szh£2kk|^Gq.,.dZ̦Ycw-ccڬku1F=W>MO�V\RM駦YO~Ubj[5TUZL4Thū&kŹǕthB*kų]d.2qOMؘJN%7B2UO]W0˾<3ǂ.>fUzKIltyO$aM41}KetmC^O^m#b&SyW1kcr?1R|W_ȫU)rٿ񨷖mk/1(=-?܎MX4\^UI%QWχ$M]nrKO2x]nf3{Kz*igI7)%lOm/%$c PU䷽o=$RK/o%ԞߴV1k5y)mq hSnZ{eMќƾ|>rc�uwD^d<;1斖ʹ ˫=E42TǛq8ywi94}5h0|SOI~%~Zo]a{e,^V5.0X|3?X˙yO]^cS|'_j58DŽmKD㖭˳'ié%l%O jR YVMm7|4R~&4[}w3"$5x%~%M)m{ yU=wq.Y)?=ö-W=M I$¤|M?q9Xƽ'uO\mS4� +o%krp|6*8r 9F1ym *2Q^wƮ=+rfR7(ۓmew]INQIpJ铔J{ƶх<Yvw4¯?�zg|"*8J_&;ɹ"NR{o,u[?-RrtgEU gOћVN:ִkwe㼜eZj;i̼*Վ[<JU"gyYxv>~ikK?xjtSM)nm?-]:땶F[5TU,6pH'e}_�~'l̚m"n\`g 9cYhʶSd5E'ʼ(|zS]in9q {/N[=2DT׫�m{o͒o;{1e2rtV?58=PUC>(qHv�-(Ƣ,x62I~ӏeNI^Q.jm'('a[.K#mzR7ᦣᓑٽipze5&*�񩷓orjQ=**Ɩ]d4ihrnc䤙E֧gk_\m'n+/ZK,gԄ3<6ʺ!\^޽M6$)SĒ"?'Y MOZ2<%z'7\#ý'l&M6]/e85X_o-[#4×ח&Vѽ/fxã9˼'XbF'9u{}wc},׹#'*;nYv57�Cfb>a�t��������������������������������������������������������������������o/:90.u!+$'#c5G?i=jIriʣm-y[1vxEs:ʥý|7$IgRQI[}uɪQxB]o73[xr}=ڪ)rUũW_zvGnJ^ϫ w6L_ov,[<\aw[sݍsvg\JsIJ[Ok7(sJzWld\cZmבˌ':wEFK\Nğeӌeo}n~Ȃ^5m-rDԚkK{!54yt�CC@A[]c#V=*o#�H�)om�Fh``_3������������������������������CF?/1Si[*6ޙr0ɞ] 5{XCo�Fc&MwDe]|Tm'1qݔ_JTIiG nzќfK* Jdw~>>y/r]#o{nDfyC_<NUIŵ74,qoKܾF [5.i?3諭HX} \-A ^�е?WUNR]{Nٹ5e[A)M)>TWj[%f件qX;"ދa'O JSp߫+p.3ȷ!ٹk"7MǛplfNRܤ&xW7]7.' %%{0I*eT_X!/sͧ%DPʒ׋rEfܛmvۼşA?[|7DN-=d훝O/cg_#n^Jr<Xޑ{{cum|OoFLiU3ߓ*ٗ}N(al;.8gCg xvl֒캢YFU]}脙u#.9"[)ʺcozDM}f=BuImu~¦? Z{zr97c±?/#r/-7E)^S|k!f3˾rcwSm/#߾] 7)=ɽrt#c?e֒iN=bك ʹAKd̾slnා,SA>=쓌G4ErIJxEf{omy >Q7ſO n0_ɭiZ˼FqkHʽߕ+WM7_-yyly|O I˿1RU:\_,>%'C6|=Ǖ/g)_K4Q99IvΪ'Telp6 LNju%,5RK}?̌m\$2]EvCȀNrrVip|9S6o/NWJt8MFYf^[9n5J<ױ#3;!dk^㛲jdB\q{ywίV7 %(JQzi16K^dݓm+fm h L.gi7~<r^lj։7)Rm3%[Z?qI]Ӯ3^֘SCFD}5x<_dшKNM&}2sPy-{K%fÉaI>99OromS}6ꛋ}2Y^Z^3ՑJF�2O#ʔt׹$Vmؓ-ѷ~ %v8Єc�y>T>j-kbgt4Gck,$cc}母|Ϋ˾8X}')E駴[F y#*$L۲n%lܒFOiL>4h,[h+i)ˬ2Q׋q9J6˚]ߩ.9YC;|L?r_1g9Y79=ɽIn]C JT뛬_/NWJt8MFQjG*V2\n_DMI/O$fq_~$F2lvY;fd6e8;m4tt<o�FUS)7nU[*6ޙ7YD6c6xv-j''/6f(u[׸Y2m,z}+ qs)l隝r7f7| T] ^VnlZ#&3SToeLjcBUImu"7 G/"OFh߅7D9S/bHiG\J*�[ O�aG.UFơk,m}*2U .!i֚}1 ̾cQ}P¹W+)JdIcFGv>_EЮ1{o%M�YB=NPQiUS.jq #+^31xc.101akqޗvG/ |ֽQ%(qf.ٜКkA]\ڊ{Hq׋lۓnM&7{o7GcE^ {>ԧ<W+Eo7T[&~) Iok,sId]D\j7"卸*Vk|63qcL'T2чbMe)ᵩߪT)jcp;T"83l+RܒƄ|� )�; n O6oOї}6S(4}:F-ꛎ&wvvE薎YcJWJO~_Y6(k^ƌBjrjWtj|{N7FwIg<c*6J4AV?&ظק䖊Ę!2c*<wnm9t} P9PZVIx<Lxp'e\ϻecZsuӶnZ:|7H_&g~?&EvUF{#U5:,f1t48R,.z]7V/i'&-Qv:j>[Aŵrp{)9IOmxl /aO.hX�ܯ+�2ezV>Mk^㭍~ \ԓ_-VzhMיj<K*+^.2\l\ '~SZRi{|lܟȌ2#)K9ι=s.џ6O<슌m'gв=rld0<yRy5q,xKeyVMrrd㕿P2V>Fߡs?|Z%˺~~܊#]Ey>cw4p8l[{"ɎFBPtOՐݛ|\l%ЀLnFXoi.VWV|"=BPqm8J-4Z\K)G^/'/4|3 Kr3'NYs".5r~NUJR]S,Rѱ/=͵ؒXP[_f5߯n\)ɺSqONkpsqԓG'v;dpu?xWu[:g\ebgt4ljp?w~ _96Кn;9INR{{lL~FЯEIIu^0rcJ\M IJܑ9NҋJc,zZע1dzka&ܛml8EV\ed8gs_]]5DOI\c#åUb]t=oI3CSOʼ--ofd_tɩ̾+؃$݀��������������������������������������������������������������������� ~ |ͿɅXzzxzxz�@�=<=+ � ��=��ЏO�Go#FmGEAE'dP�}}G+������������������������������������������������������������������������������������������������������������������������������������������������������ؼR)7\~$p(ܪ 373*YvIj+cWI�������������������������������������������������������������������������������������������������������������������������������~?N;8'~eu60qĽ|yf&Q95q <;zIuxý|u%IzK3z1ϒ#zvh��=<=+ � �@���d=<�TvHoHlɵWD>r%<x+�&4UD9)0V.'lSLV/ȭkgiڼK x'>=\=,g:KJ7K+湫#++#wz@�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|W '~9xhNu.׶2]秖]]ė^vi >z7J�qKͷe ^g/.L�z� ��/@(jLll[ ǣןead2W1Ԗu+Z{T.h�?e�2C][R^hzOv_=?wvoNSZ8u׼!߹qmu>p�չ?E䊜S/U~45 X^]{y-u$�KzA>=*֟YE #𳵬�zu\9/R[]H9c+!�<<L���������������������������������������������������������������������������������������������������������������������������=IǛ}.lg^G,<j^V�k>}0IV<5gxkՏ zS{c^~g|'X׫u?+0IV<5OgxkՏ zS{c^~g|'X׫u?+0IV<5OgxkՏ zS{c^~g|'X׫u?+0IV<5OgxkՏ zS{c^~g|'X׫u?+0IV<5OgxkՏY�)N ΏKuk�?�=8��������������������������������������������������������������������������������������������������������������������X[ͩ{J#9xjQqzgZd3"8<c8J3dx?5iήTd}̮'aqu]q�,�_K>:㟻ՕΛ]vq9=[P����#wor?].M{??Mj9 8RJѓ?狯@��Ά,Yv}Yd Ol"}+sJ7Æ29�m�=mrIdϱHUi�$EG#�������������������������������������������������������������������������������������������������������������������������g<^<qta"Iv�׿��������������������������������������e@ZiJ<ȄwK;�K9������������������������������������������������������������������������������������������������������������������"c^( G3~԰� R}cё4h ٸ4gW|~3]Y6 nSdWOҒqR[Lejec8{0zyr'.k=u1n:K�t��e� ��68w*򓶵I}�qsq#{c?U[d<>9w8v:KoO~%PE3e#˫ m]~!f~GgHx:>G.8ݚ�{��@mǪ<}fw_ ُ¾@S������������������������������������������������������������������������������������������������������������������������M8-�>O8H�;`�����c,Qr[ߦό�D?CG:5ـ2�h1mu'᭥08'mc[.-i/K99Yى6UWɱA>˻~gCJ|N?c)as[ g)TEq zJIW[3i8.x)rǮEwX)x1O_bΖwOSjE6$^37R̦ ٴPmA˗ioN hd&ǮñqyZG̈ Ғ^hx~M(OQs/~ײzEMF)m#ڎTbz&<kxAWbg3x~[ %%)Gc\o}AG#1;iio=_5$Vܚs[30�h03,qU]lZ4ɖau˼�ʀ�����v.$<XX�~?xY+�Հ����������������������������������������������������������������������������������������������������������������WW,p�UD�<��Zk`F֞d4@V+fCWR?ieOE˸>S;da7&J|ٙnxSg�_=?f@+9dV/'e<G@��%x� 5pvk|DsL"GB$ gQh7Y8#ɝXf~2D�=��vج֢1Wc<OT������������������������������������������������������������������������������������������������������������������������꿴JEOu&_{�o;� ������0�}Z�~Y/7lg˽oZg?vr%2,zQMym����bYeU2ZQy/CN̳㜳݉rf-v<]IN I/ecjє*_VKZFŮ kQ?}%ViGJ<:V>4^{ig;fYe͎}�t83ȮTu\W;dbJ  Eytu~ܘ9ZQ]̟qz38l}+%�d�~Ѭ/վ&�eO6%2%jruVqO[oj '3[k~}t?R\8lY&W }hjTǖش߯ Ż6?k�G$GG_�&r}k_f%QTmi/c]>C�Oo?wq;rDgNG'cM]?cd��24|0sZq}~ߵ8taRSڏE�4IgoW+o8Fk*p8kӗ%MQ l<S[yp,ԺS%%ݭu(Z𣏕Uu.X%{wɖ]tﻭu7OV˺%aG՜`wKiԛIv^/�kgK]ܯ< xq"JSȊsr}|\kxed$ܹRߒ~#ܿgşHDKxMo�\f<u>}2iKE5ya¯O ǶjP[~E]]\/6J]J߹&}:c֮PVreSџ29[/�x������_eO'X"oa;wԠ�8���������������������������������������������������������������������������������������������������������������"c^( @������49U/"iEVpp*p}%cf~[_s}>(_3 ]Mr_\8>ګB31?g 9=|N7]l@w}6O\~�3Cz.-/#*sK>--/#f1'%k3O9o={>'�2�϶>.\5𿺦H��VZ_ ُ¾@=S������������������������������������������������������������������������������������������������������������������������N떺3e�o_x�x�����QTܪoqG`oB?Qڎ\+$#Z:MDW3ꮘ>ZG@nFQU亸YI4y^=5WMp�,b�֍G1&\bt!Uuy8FkSkb1#Dz8kߛl�<#b⤽،c*+-85\Ю~)Ϊ{#&ltЖb pqn5^l lK!yEiN{pi36͵Wt9mgI-A8�Jmɭ�������ŏ;oKl:];a.S r�c&3V����������������������������������������������������������������������������������������������������������������X�~+8ߪ⏢�D������������s(F^DrL�mPS?\,;9~I_M'lUEoXx2q/Ė+q�uO!>UW%(.y\V/6IEWƚ'{Kw\eAZҔnZR#S8"&411M}?i0η}E=?ų7~ogdx<2P_j֠SC6`�0� fQ}+1W'x�������������������������������������������������������������������������������������������������������������������������>K 7w gdQ߈>B} :?+:珩ۮyQPi<珨珨4ssz99 =xxOA<}G<}A>>yQPi<珨珨4ssz99 =xxOA<}G<}A>>yQPi<珩Um%ԍ{ttzk&,pʽ>1ykzש�{@�����������������������������������������������������������������������������������������������������������������_\Wg/}� ����������������xtz�0Qz���)ET^Js0̮ ܧ^AyAj?Lf> 53@}Lb � >>_ ُ¾@S�����������������������������������������������������������������������������������������������������������������������������8,�Ix�t?S�~�|C�:=n�)!u=�N[�t?zOp�>SC{S�~�|C�:=n�)!u=�N[�t?zOp�>SC{S�|/Fx%~�$Q���������������������������������������������������������������������������������������������������������������������_\Wg/}� ������%(nRQ^����������������"Y##nt7 -(�f{^ɭ|:y׬ϱl~#<|f+ज%3^lmVo Ob_&cvٙ/d5�>�S^{;c/L~qdI������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������WW,p�UD�<2uzUqp%/ok%'/Q^^<<ص%mفgRn)XrxܪϕJW([m x&Ջ]W*a'Y˙/Nfe*ZIjm)k2]{I%T{Z-XZvE6s>h-sk c;ծ7v/:SKLRF5do?Dwͳ'ʪ_G;62*k\k*kxY gQնU'%rIٵ6YnHkǓG81s]^~qyK/㺫%+MR]q/ǦW% VqzV#Ȫ S.gʵۧm@q gdUd'*}tx')97��������������������5~&DK~&D{1����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ?|Er\kUxA/<2F3?}CpeÆ^L~2/a P�F_?}Cpᗰg/pi3?їP�F_8e4/2`e?ї{ 0f~2 3?}CpeÆ^L~2/a P�F_?}Cpᗰg/pi3?їP�F_8e4/2`e?ї{ 0f~2/a~&Dwt՗NiiI<(�(���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/book-banner-pre-release.png�������������������������������������0000664�0000000�0000000�00003122420�14332737457�0024503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� ���������IDATxYm[re}MխB#v" B)$+BOؿ_zq H[@Z2Eq@ uWaΑe1\ksqbךMfod~Y__o|#u3`"9^YHWŸ> G/So_HSED_s^AMnsʝIˋU -1}Sl, nPg TM\ xHF z=yNz *k[g۬lbj䀐PYo5jǙ<>{ʮ1BJ`>i]=? qU(v(8@mS,m0 ;@E�)WpEpԫrekq֭<RDBVAnh P'@'m*I-©e $#X')th'7Wr K#O ͸k ShS:kDc>m|OyZé<Nǖswi}*Nwogy<WVֱH\_bVe 12 t 8^!$K}HT;wb|V_�6%>8G*cĩCS:2'vU|P#UOip5*M3`hkϫ  !ekaozX%ptPeTk2&`ٲ,6t$upcs?~܏q?~܏q?~܏q?_c#q4c,z+3#W7OW>^yp$DtL!iLBBәdJpj fӎ |MA}>K>x0" ioO7P͘UD̂>LϲӐyϰ㘭#ЌVVxDȁ a:^' D',}⦓:S23M!dUeiZdI^+`CZͣ{1F [`qfe*`6D1^v\C z6@2 5�!E&Qish5^[+Êg4F m%z?P"D_ua#N L ~ a B�ZтnXU Xx fN1:Á> ߍi9T�s2F v vkRXĀ!-.{!!4AuditHFL;)b,Fjc͉r4C[!'lK0eLKvk!]6 q2�Y!Թ;\@n5WH/TV.!-Ix>!6!4:٫lذ6#XBx3e[s& F lNy saJ2`q #<402|G: t�yF!)=*PI]:J,#BP OAw).Ϥ1}|W$x!e  0'16? £L~F1�GGL=/UXFW3A* >OqbʅUi+G炣cǒ>h{ח!ӥRsT$#Ĺ>\05S+B m~v$s"RA!G*!Yp!>kiz 8 qtHsmvIp F#y8:~ѧBe GxS~Vz \[0te. E 0ذ�^EEa}"'u)iu|7{QQ>JMX Gbp4O}K(&9ڧ? v`ښZq1:\� !郝f=\&Q4c# vZ" =#ȓLXu}[PUݥuK<=\j](Cǎ[ԇ9DSD"2gЮ{<_2"٩1A2"Iv$ vTL8]<XQ0׿_o|(p:h_;%g]R@ pv9j FB?ҏ+إ|`r6^șJ[@ԍ@/Ogm"P{s!3 ۛH ۴ˎZN 9by,8aplaT!S!d7",Z$8!y+:yӚ#zEop,חKI2l)-N#"HNkRL:)h]e-MB@w~ v !*5: Z*X\JFzC+I,.Pr0W!4Xw #/{v͢+[CH!p2,Hyf\[RE4A1'"zmk[d>W:z&4F̙Z,q2XRF>8^Gg pid<;\1Ϗ*ZYXѠTyݒ .GDT+$/&ݒ L0SRpICD*"qz-]w_H*/Dhڒi(/s0onE\Tnqy^3.[9?rxk|\Xp4rYЅ [М0 K[Q"Bݤek]B>L?+B&<?CE˖/~jT4r/2`7*ܼʦ@R & B^ PD0iou NW솣 Hꭐ _¤lӡ.c7qxՉ}nnN#y F8F%K|t66#Y>ĩvim*y#BlM:ڽDH#j>6�SZozӝ@ S!a!gȣY9EjsNCLi*d _QšJ!g�0M9Er| _7<B,l~"!㾡ý,Ӝ-|e]ccoקԺwFsa&7:ɦ#R/L{lۼ!z%%܈?%`NB|DLA_3X=BH)AL!!RxPGFR Tr) ]_Nl>BF !Nk`vW*U&CHC 5dU;]CGB{]3!¨!'r,Np<4R#B;aoPl<$[,*+/BWf L=G*CE$; "zi ڤ@ӨB|: dۇ<2):;:+g cEɦ@*[B뻸UQ.8H7\G[qVp]^I2QIp%/o�99Tv,Zpaj&hCLp0^fQ߮a _g/Y2Ų5|Y&~ bc�8aS%/Y" yCEq9ە tgIn2A d ]{`_ٖu@`;.8O.ѡ"f@6$);n]0 וR"\\*B ذ:1/4 W&:I8L"yT",+A%B ̅"z@Hk aJ رR0T`n 'h_"%%q0Pq.q�DPIFeҌѐ!kz.Q=BG5G CH .!',dVK^Q!nL-"dT TeRoOt#&Sɐ$y>9`;2" aa) <W|VDjo#]D ~!uOEqbl&6+fm /gprW,*;y {=/ U@mTTӃJInodDZ吪fb< >RI6K+ أW }˻N`E' LS9l va0TiSa.̙'XUh/{37l.v+@r:3ظ;-1y"Ŋ!ņ;71@Cp@7޳*3gxF3#ש=Bp[@r-BK<:stCs<Dľ7S2GT'+L%BW">5*^H< <ZCa7jw}C~d\U.\_@{]gy?Aڱ)r_T­!VAK}FE$3R<OW[ʃ`+H#`-jvJe+%YuE1{sc_okON{oC3lx]-Zwgp "dsveS"T d U7ċ6#ؓx-\xk~܏q?~܏q?~܏~܏l}P?$"UmFU7wN+ o ?X2?N~!TSqő~wmoS .r3`a]E[_i5;#uDu0U)/l0=Z6mg_n7r5PCH{%�Ӭh!ĺ4q 0BT8 :3NAN7V~W8u_?swD,;5 r};v7 fn^Qh!!%<BlaKl+{~ !lAT+"B6N`@M]N$>!{*8l!{ B(b0 \@ v)las49;C@>Y'kEV%stp nRx7`6O\5dІ�;7ANrll+�u`GGw!B4 D19.8oaAP1C}P;@dtKjX XG="OQdũn)-̅A ]rZ@)n)!6<B`OZkT>Z߶;<*-9`o�v<_<OP#q-vngZGCޕ萾Bj`k!-5mtn?{ #d�DF244c|tƣh|(ʍLe!8b&+pSk{PD{c 4s}#GϿ $^Q!our#B}pߓ/#LB++; < \\ wN\wSF$;LC=8'F!m~!rev !7BhLCH ~`!w|y\ ʂ#룕X-Ub?oĐn&πbGy IvV%8^I:M MF� /l oP!!/5W)q X+3[ (Sa R`gƇrHWpCvv"XCH #Ba'm {F%*6)B$䦌b&Hl| w E0@C<߂#5f{N; \44aÚD$!S)o9S{o|w~~-a fm-3؁EbJk h ف\ -RF0Tif-v>lWL쁛M:͛dw T|-FΩ`;WLRٞ⬨P!طgq5?@ *TB83O- .{tv)>MW9P2k$S^BbY@Ȭop}؅p2PĴ:k |;#̛""HNkR}!!b]"gcn$"^qQ,G0QZn Brư 'M҉9 8`Ҟgfc:[#se_2{[;9s:CH!wIRO/HӨxc}#trԇ$M#BBi 㣵q^+*L#48ӡ:_?׻ ˭|=tΉ]_ 1ep\49 c+`hOđWPt5.le 3A5R&18faR&i}Sy MGBtRܟט})USSaZ2$8y 瞨1.!G@4+B,h t({mbw\F@^/cSG #)xF<1Nd!Z:ʝ<yi+\(aJ݆ĨZKw_:)>z�lD0gt:Pxq7%`b 5HNx明GDmՈrG\5~On }Mi13cS+ګY85٭ͼB4ynca D�fjs'͏fUػ37GـW _=7' r "!v~ـ=ž&|!I;wstkM6-p?ښ닟4׆}-3a nE[&.b~Kmmmi>D9pps{:P ^B핧~` !T5y ioq/D ^}wEyl0:=`F[d6[unfZ ! @BdA0}ewH,-".(&:: !V([Gs`*PT+`ǃu*8:dkqhrSt$]G6`3 $oB= !IvL~2 <H-생3Cyt��v@l wb4g@o$@" ؊!ob~�`XTI~ߠ3}Bߞ2 ! S*N iwi(dҨzgiLH`2nu8.�!$<d!J69Csr+1fR.;updRlc\D2:*GW\2k;ɤ _ z׷ Z B`q}8!8v _8[+י`>~"G%n0WzC&طI2޻) Bҁ<I!0l<lIH}2n5BC i1=IؕIA2@ vF^mPft那f"0ԵV+p$c#< vP+ RF<)�;]'m_#ILJYт]Z&df!إ̵*3]4!R 𒔯ǻz`:ØH|p{y Q U5*q(B.LXܴdLbW Pq 1?P!r.*AY&=:ˤ' !!da+Xn)w҄9`v|_&UO.C)']&"=B<II2A7&QV` #�]]j<Y `"{ΏݴЩ7hEq HLlWfi\rghbUD+`K*;EM! % .ބ+]넟Lp xHF z=yNz *k[g۬lbj䀐PYo5jǹגI+:lk#AoeW= a>owYa Y)N6E"+"8UaC֭<RDBVAnVWNo֫�U*I-©ݔ5 $#X')th'7Wr K#O>ʏf&H4N 5,NOTޯk=Ek%8![~>�ߥ8ݹV>ϟ!قc^mZ:6R̪!8FF\naP+ɭك#Q슭žϪ< G@EVv+T"ԑ9{M`j|JTiRlaC;&Xs}^4Ums !́-̝-^μ\ m۟Q\l?X:رC'՘et c@Wx_,O$f_q6P?lrag򘠥/qJSag=$D*͛ځ{(Qx_X#;L8xሷ"Ie ]e6JՇv Qڟi~v~N@iC_׻nGv y׽_4vCE*_!FOҘB'KpuN'u+wGlLg'$,.w!ns. V�^x}:G&9rAFaq,ѳf!*sq7,e{Sd\0t} `]u* ].%n|O_[oC8xT�S4A/tkEw3�ԮoֿnB@oo@@f7"BW/St0Ҟ;4N`P!dBrI.b{M_q}Ww; i%<3`L[9|4U%T֧z+ߤ<jWyf%k"Tj|渖߰Z矷uubUmڂSKo7; .^Nа.۱ǥ_U{`4 Uj�2Ҫ{o`!aޭL++hJwNҢHk}V=$v- ܭW#3xҫ!7{ʝ;Nw.ҟ6{XlXЂӓSxoh%v>KCj[ }U]{% @ŃA {⹹a2-]@1\}aQbnhQetȵ>6X9v*\~ &_Bp$FH|E&mp}/:ΥKhK>qDŽwGH S<�/?l#H:^|8B"8Ty;a -y.KBފQ60E1[ 7t+Rq!Z +:$㸻ZÇT^؟R3Dhg <? h�}6\\ }\\6*jW(Ć9m9u vUbFKGHxim'أLͦid*s#%s p0^YmJà!nkw~�AqTt*Q&]&8luAܬѻ@F d!(!]Ƀ*0tvo/8_s+K]s:zuymzed*Hc}!rS*GJg18fU+xLK]C͎b8W,<au,lv s$ 8E@GL0].u  P5B,8%]T z d~qDZ\ިdb<>:>Kwt~A#_۱܌u E;^W 篣݈o.4N8mԊ$ W CEK$weB>p͝ oگ|x|.uCz_׎]¥4v~oP|]l..|,B8?salmVmLM`I@8MFxS{H 0 IWFM%P{s ! T.d+ݺ}{meGL'Uf_gny,8aplaT!S!d7"E;V Yz!$tE'f<Ry78 v BxK@₥g Nh6CB$'ŵ)^CBnm :Ĥoؘ?\;_`rP?XqeE ,. v%[#v U[9+bG;b=;fѕ!$8o:AH7>; 5t޸7iepMDƒ׶|AJn$`Ҁ Bc2gj֒5E@HT5F&ɫq3,NU]6ɄGf_hPn#"*QyH@nAy&Lp)8ҤT"k odZp8'ٵ! |Uҡ&kK>P#"Hyr!Sy\a<nSP%}w}qc@ˁg]_mb&6[М0 K[QRo\܇I2gEȄgy~ْW\ϴjFEQ[Y_uSÉN k u+�j[Q=@$Gv@5r\UY&$"ꍌ-Txصm$軉PaQ[=xX:-`Uxؕm2M:$tx߁"vlpfئ 7"@ ?E{=ܷm*~6f]=BpC/ V;E+%oPR!6!U |wХvwi P#BCMIF֋4WiBډ a|Ug>fQ=ˆby`=B B$G 1H!zl ~�-4Zn�W!!$>v` �¾7I�l#h`$;oase Mհ]W 8%B Bf $ B-H#$D JBB0>N/eDEHMr:dA!C&`v'*+V$ :d*s *I>H`t^FIuκY| OQ9T8O!͝y(6#>\ў;Wf Y]yT !"OEߑdjC"Hb5Hˆ`!"Of6Hjz8 ,Bbv!$GEHk]_UljLLH(Kt}(uz"rGr~tWϵy>t$Ө$8*#|Hr9yg}R::X|]&8bq Z|fIѕ zm2XLJ <|߁U*Y[�$r&w}y&(!tV Bd!F)e@jo L# !Y&(2C8(T2!n'L' Z|P3AMBҚ,uW s6l^d@/@T]2+�>f ,!B B= o$ eA냾K=[&[#8D//SYgJthT& !КK Br{Hj!4\BHCQY&]Y :<?Gd Bcj <*HpIU&]JOxr.$#'lGZFiK|{�RG$ o|ᅺ*ֹFT Avp^z̺r~x|Bnb,D;ǺNB^OeK\)?Ѣ Ͷ *~zV"-uPկB~%`B^?†_XqٕEb$TLʣ'ۼ[6ZTQy4zb- C:ϜY{UV}80sb$ɍ<s+XAӯ*RSa˝'R8\l`q4T 7˙t3=2CN~JzoT9cA?"<?|# $"DD3I8T9CLz3A<%s}Du2)BQpd~Z"xź+bSE#u>0t}v{~>G\׉Е~V'k"gEi Bh$k鬝d ~jTD[<#ZQyLtiϪ<v4v٢fTxRⰙUW,׫<g:vD:4Æa: dp "dsveS"T d U7ċ6#ؓx-\x|Sژ۫ܘ+ ls{25QhO]"NfeAUgiԎ My_>`t '峸!Qa@V˞yM�+1j.UAƆB�r|zw>Mm?<F_LRY*BF:ɽ͕)6ݩ; !IcNUvs+!l=Ml83 &C@.{{ӍG vAz�f rh]'mn�:HB`U*)REQ )BڴGrب;7ȱqNsn $"s}x} Є_Wi|Xbx:ԂZCu>d<GBlx4 t&؝WxF(y!gx~t}+85ϿzWb^aQ"<B{8T_DUK$�QoV9s}9)m  y U/)Ъ3*6xd1nh>o\9`6Į-p5|W9ow}3 7Eo4sU!8\[ A+"VweusB k"F;*ti»e)dϪ G]8)^r _K8K*@Z$G䀸3',kEUxD9_n?#B6N2gI8|/rLP{LU^킝_I,rʦRNhɓHqcιISFYfo /\sO !x_wa|�CG3v^:}�wh4h[gx-%INI [?ã99evB?=<OcGqN %x瑨M.Gv=g& [4KO>,Gt1cs LÙ/fsu )\Yc]xOb+y#z^4λ<VdxbyiLweѵ 9XS ,ڢdq#[gGZ4sוy&? v)ܫ\>ܴNB6{Or{|>/r s<T?h6Q,JUZG?U IΒ)gF3r#)$@MŤ;-C4|z^"{ ]HE?Z{_d!5Rn B'=1qxL9v*@ LQ=RsU'o@lb\VpyC&IΐGFk%ɎJ- GLKνla')ezB gU'R<.]bax~?{Y^ӫ=?4NV޸@sVxJxi6pl2sտ~.ĕK[vOQ#L%[4q5x./#;<ʆtq *WD/M�U/I˴uPel~!HBr bߞ݇�-"SφTO@?-!٥87 ^+^ VHk.ĮY+?NE,l7afBtֶiy~gySPɉ`q-B !$�W VLKd-,ip\T!e=xE3fun zrư 'M҉9 8`Ҟ'=�udBFv/@];oOϝ !s 3#'Q=�Y.HӨxc}#trԇ$M#BBi 㣵q^+*L#48ӡ:_?׻ ˭|=tΉ]_ 1ep\49 u>d- i8j;%srp|ZAіy&j7L=B$os*/i\(T(ZNW#!׷O: aj*L] t[&Gvy 瞨1.!G@4+B,hֶ[Q)ʠ0E,`:B|1"ϙ/\`t({ϏND _'Zg> ֞p#z- -MN\v$0l{TDmg)tC`=f#E;okVD(܉`s'{6Z; /2m\ T? ~\͋f> kZB{{,6w2٭ͼB4yn;#V/�O GFhG 6w2q;-|@v2t[d=!BWA"Q!r {Hug&o͟M*Z~Is|mۇ{܁!͝#XV`[[BYMS@7wB!2�6�!6^ybhU=Sp.`pa8t6nRANϹ>Cԍ`lVK)GH%!"d) !2k EH5?0CH[[#z:]E`KxСNwG0phrS vӳ{(nӂc7; vgE GT 1In$; D(? ˎ `G>y=3GH�!$z֎x>קqKD$ԃ" ja/)7 ["*zO~H#!bs}<NZ# ^}I((Q !<B(ͤ8>Lj6� $9d! (Cqr|G #bF%ǐ iTA 82DW; A{*;Fo-tHBF&� 8q&Zy f}3eq!]^y~ù/qLP_`]Jyd0 #BlEG?4hp3A9A> L B$<? 2i2YEA eF.8j&( 3Q!>8ZdX74A@|&'M*o�X(`Tؔ=ij&IeRj2)T05ˌ#sʌ!nk<bВǻz VL N2)q{y Q E@(JG``qD '{GSAbW n_D9d=B.*AY&Bu fRx~!T!2t1E v FL\2�W"B<6<ߗISK?b}Wb+yҁd4#DzxdnL0"@Y<IG5U<_G^;_<Qp~B]<P͖TwnQ\ʟhelIeI"dAaכp%</X'dPG*7J뱍ϛtK _UY:7ufePCG ;2~q[yMZe(q.쵤tʅ+)~唡[ve:ѩFyU(v(8 ldɸhI(]DHm*O+^+[8:`s ,.@O)d䆊lu{Fm \ra$[)ʫ<MYXONzP@2_QX|BBHNyrs%йd0[hfD3Z3B.ZN9=јOS^Vp*]nӝ[m| B-8&*Of%ρcc>o1*ŬcdtqBH܊}=8U* [�lK|q Tdieg!ϚB)BN*D֑Ƨ4وA&V0c5UN\Ն:빉P!߄5{0wx=8rE(2m~FzLpeX`m#Hb/{Q8;iS=柋 H+UyK ^Ø?,kYK[< Z*9BDo7VT)g8ydYy Sfӗp02 lheիI@> ?i<0Q6 u O;60M~dSU?\PњVgnBHҺ{7*Gk??Mv~[bS Io{+$n,|_g)1Bpegr"oah}^(L΍s{qiv'B(eR}oqB%� B0m?` b?8T7TPoP G֢nREƄ/lnotۀ}Fwf*[4bBC�%]i7 \_#:4`<Fpe`j\_Sd~>wBZWR)l'n$)a PbeO8k*?#`G #3A*3A0][t}'lxcpд@뫂#́G 6|8T3AT4/tk�;u}cI\_񔙷[/z[BԀMq`Fj xBc�ۚ6MQJHr= 7j d�`t}!8G/|S<+KB$n�iTJ`ŧTquzq\Y.CG1&J.GH]<+qPV<ߩzq]>87X! ["vm}bE֓A�ok FD\2A ^;!BO4mv<b|<1>Fp 5hD >!7;Oy~7N| QSDU!IaэFd}l#l>\ܞ`O&M{؄<޷pP#L-c7\@Owwz2ݞQ,d[*?auv#.QhTZZ$n!+)B K!&3;;;pgd{cS _U*3fWw7V·ْu+QTaw'v#WHmxfIDE,<$;B_E4nǒ뫴9Ի>+3;k,3[C@LNxC(952'B|fEwV}vMR^8lɸ?uf*w}ucQ!f"wΫ&¹]_(ĝ0@�'?[x-<_##]xLWrDH{;ie/֜qEoSvN SyY#۲EgTAQ&O bǣK@()*cÙATPw~ȥR<9_`/i |nOz]_ɢO9GE)\\_|=8S;< F`U^ h am2ex~|.nu~<+ZVO*YG4&t}C>e`YTؔ$z-$ٽ2 ڃ庮}6 P5B1y_pW>:gד= r}:) ڎ-ǎO{:*1-$g}VX]&7wx<x42Pv0 O_s.dwi_7WчrBlX⠴v\ίYN=\]7X@p~Bp*354M#\, $_5k@UHZ+,<S;a{)avQ+I3ji+ e*N@b[U{TY9ECHt;]ɫ+ڮXW<!+ӓop} H\,[ b4B(D!tC U!BA sk'>F:A:`+S,lX`qI+Y L'U NB\#?`݁d v٩6l !y B:d Y!ͼط Lh|--n"׆ܽECR:v#'_(c9S+4>0kۏap)#K#S w842AwL^ ܝaqzmrڸ1Ϗ*ZYXѠTyݒ .GDT+$/&ݒ L0SRpICD*UP%IrDvmv>cUthڒi(/s0onE\Tnqy^3.[9?rxk|\Xp4rYD~oUxz-thzY;?atn-HqRB>L?+B&<?CE˖/~jT4r/2`7|NqjĠLFNn_;2@9{.)$PLk个MHD7A? ;.nb.h+'3"팴Vq@y=;:޻`ijށğgN T AFB՞\ a=_5?Ss>+4�6TDB*)BM?\~KA߅إ*�jDz贺2iz VDuvn&!D{k!yX~"v,npD(|94!O|/El4kޠ!D:w]FLyߡ@]_>l: cO7\=x9lA.+A!3RD܀[5JDd!# +GL;#Q)<B(Eeb5vNt}.Q ބ/C@!h(pms*z$bj*CvwO=C $YU0:E/#BBI2<�[e<aÓdT@ )|HiCLFl96qQQ Ȁe!G($Y\ITwʓ$\!n'&B$EHFQ DSTR^J5"4BbvN O.o O!e&txrŠip3yaT 2|&8#Ϗv΍İ(!8 dLh? I ',8v>OQ-8<{h Xf߇ 1+<: j/5dWLD<Ab\7V;<Dd:S+!P9'P.qt>HrCH �!L)|�iP2cͯk*/#92A*b&iCHB|;,uW s6l^d@ˤ�PrPS%L]&0HQ`ba(a. B�q\�Yq.%J\%`p fG,q ]_.HR%8}=SWDC2iFhH !\"�s}H4Xt<#DzPCy@0B2H (<?Gd Bcj <*HpIU&y~J<ٗJ$#'lGZFiK|{ޜ_CʓdOQ;?PjoH[OE0Jp<y^6oS\M_>hbXW[˒ WO:om~ 孟UHp{ &E&**c/8O^]Y$FBŤ<}݂'ѢbΓpÜ^60l�O4ש0|*i?; Lnsl\ ~U ^l<bbObYDIYr3<V{ T!g8- !%jN:ʹg"dbכ )#Obc&+]_ M/M$]닰>!?2*/ 䌽NTDHR< dX9/*HB YCHg|%>OpW"B)Њg+H˭|VA5;2ͬd^9 ֱ믷'B7С6\.ӉϿ\P\-,t&!ް$N<U/!4t ^ƞ{l9wB۰fI-,~۫ܘ+ ls{p̟ddX=W~7<Zvah:e]E6毯;8љڑkG61vL6Mf !<cW*E JaddžRk+WC8񍣿fZmT@~ _U6wUsMeK0w0W@t6mOQ1]in/ixlB=!ԧ\ v&�j15ر$oi`<\n[K6H `!#ysQ*)RÉN=;ӼdBPi!ɏESlS܍v[@"k! qFcH&}Ps{؍Y`q0#; 5"'7msn# eMα8G(;(BnvI�=B$o�vf@0sߧel6 &jn|E&GHKBυw>T/"pE&H7:#d`eH=L}f]D. уD< T#v 8ۺT>]m-D`*P䃣ygZq']E`wYjxLmqhru8'FQLwA1 s!BgBB&8jnEl~ʂ#Ii%8ƪܒ)&πcr I[;9 ti2fp}au7/ۯL 4 #Hu5LU q5痮@;3~X7b5κJCBGPOBL #>gZ<r%>yWπO<! O$DH!t仂snh/B<(|6r3l{l #$#BN/+, !\0c.Ȅ!^LY =Lfb'*ux/{72lDy*@22n2>E{2-p"qPellbNTeV\q@H1msqsTd*G(řZnat)]sS/U~08*yׅu2k\_.v7`}\#L4r:k |ͳ#V "B2 pBhD:HdqEN )Y+1;ƨkvS3\=iNl$́gwM`/߯<F�+b \v Y;?BL fFN"ؕzJAF<?ش̖_SUdC4ms>$nLcoZGUaYqՙ w}c[zܝۻ,,cPa@ir|Z&Z*qդ(})8vF̓K;rD-LKḝq5t뀽2IKh,8 V*lEpӨNt SݖI%]j^@d'jK(ͤfŬmƊ);`A]+q�^]&87WK,8`Xeˆ<g~ pѡD9_d+??Y2ANr'De}@=,FZ q?~܏5=~܏q?~܏q?_cm׶5Nj9npC;BDŽD6 k$^cWU$9&qCtg'X mu n~ql)?}Kd =H&3=vF$"t h>A'͏y[ù-=^l]@iqCjJ' r "!j"Tpk HuBw6y#F?mlG[3p}btVF·z ns:dۃGH7ew}PAmmmt<zDT+r}B(C`RoH핧~` !w }o]_sz`tzݝ&UۧngLյ/)GH%!"$'ش63NssH5?0CH[O9 Q P Q vyp<PCI`HXPl4R;ೀ "uÆ#ɸƞC$; tt:`B!]?�V8l 9JC=@\ !F" ؊/)z(*oa�:6k*ۮY~!SxxxB>61\QܥQh@Kb\SG`C%Pŷ8@H azvd^Q~܆xHdLLGV/6q12:*GF>dP!&vE;FAn`}B&QYM6IT,w8@>83A·]pg-e<|~\Abbו8B&8-qt?J!W"\_KMM{;oI훊 <F!B3AۭO~fMn5B X&̓cW&uR9ʺx_.r*=B$ZAY&uj${l:j8W۩_شnh&ENgxm_#ILJYт+df!إ̵*3(ZE0tma~*b@M\GJLE0G2ņ; n_D9d=B.*AY&}Hp}lGLJiy;/yP[! #&f R"!ˤ)إPs鲿 -Fcj9BG'!I&#B8 ̃Y o `) ~_G^y0?[Qy4jl8`6+O ]X? ؒNGFY(iu&\ ߇;ݯΌv8 xHF z=yNV@2CM]Y20P!ѕ k**GIsa%V.\u؀4FH :3Ttˮ {Z7:†NQeʆ N�*duۦ8Y2.`JRw�SWֆ=壳XrkK9E Yy+7jUd~* S$HT^nr{�O,ZBr:4Dȓ+9%'-LhƝ^k&X:E+r}ש_;v״'i{ʋJNqBT? }�KSqs}|?CȳDɽ"6l܊[Y"}r}5bTY5+8- xV voE=a+UyMso>8Q,m[ȳPy(vSGĮ5u) ~6CPIq <cy0Wzn"xDH<YS<awЕ+BQEPS\}˘e-GŎd0?DN]iP%jRʼnpJ`!fB޶췦8Emvff-׷eP5[@dl s{ab !n2 REg9鎪 W]xWeBl6&?BnU~=za�tng5lTy2I'Imɏ_a~ *7(@򡍛}+qe@EkZUB6tOmBT֏ >bkq >Ӟ<[@ܬ^?t~d{05X vqqTGT YH!VG԰SKTH8-¹4s h#ֽ#W.`HX&viq !4AuditO 9S_WEl4'P yܣ;H#6&ں[TV.gnjTs{!WyFFgIZ6H [ [4 Ix>!6!4:Neni2`瀍HAB+y !\_ j.0AGHky~O'K$)CG%BTR aaX.kx;Y&{s7 /d>8ܢPSـp6Q)!X+h*iTBp\FS*ϐ ҙLPCHQt}'ۺ�y$'rwx_>Is_\wo 􉚩q$\_�}n\t0DH Yp!][9œ>m&wt.#L0#< OS3~j fҝ�اQ R``-FE}X�]VrͮTDE_ !ų9 |ꃝK3?IqN1YqOUA I ϫ9`g%)2&Xy.^ۏ `ವHzAhPF!FϷ2sL<+T<_2"&N RN]I] ̓`Cf2zo|w~~>Ra& }Z 5�3נ<h& 3zboٳ Bv +|T( l&3/>E&H<Byy$g]36w ع I3EQɯ],>@Jئ]vtReȱ'ji+|h !αQ0BȊoDH$K{:䝮5GFE|]P<! v% qRҳLl :E?4B(D!tC UҤ!T(A|Pk'>F:A:`#Z+`pQe{K]Hohe:]pEVʾ!$tdEsNYtek5c#Nf=B:ơ} Bʴ2H8DD !<{ṁ`tFO> & 8 Q.8(sV`-9 i| ֶ=�1ב ?LW�wgX^>742QY++*/[2JTxd0[2APy x*\ 4i(@ŚP8.q\O%kC. 59_[!-Aeȓ -.ϋ`74bq+WX.a~]>.q,Q8h9 \obC/Y[%%3kIֺ!}$VLx~-y_0<L+fi_dn-~܏q?~܏q?~܏q?~܏ D~~tm?iq _ݴkS4t?:mݓPǺ)Qn>?ئ<O&uE9͒Ezl| 8p8띢M�ͫrḟf3kzTZu3OL_r*m}l zd^c*Rחw_ /E?M[8vKk۬*%N{f sb:[- (/mv:R,"d�CCÒ7b-m ƊFtpo4 *L-N"+8-j,-Y\h~6 F�Ω+X5/ /R2RWQl{y^f$\t6ZWw6 v+qm8=햶hΞ=,'f.Wܑܑx #&2I鶊-ORח r"Ts׷;u'_B ?U+8vĄf �*:;LYOgv+T&M xk+T.ʌyFǁbA%~[ͯ|/7^ЫWxiDEH1!K/~?U\x2 %\#~RDK89̭E\&^NE8{Y 89Q^B� tltK_舗IμKT"ADQ\¹&cW 8htޕag!ݕvS,8*[q$2œ= xUXh QX & 3˥l ^mEcw>V`rJ- 01~}X~Pl4mм$©B<"@ɽ mE3*_n3pr{Nފw]u+-BVIT؏@Z%OH< 5fNjPm*vNvsxl4:|aeW%T)*8q=6X >8xΓ̇?G 9u]N xPN4ߞҝ0i?; o9OWwÙl<bbObk)n&gUu+Qu*3֕F$"$p.O�*y}_o&dN?EW= OKXw}E,|j"4U4X\p3ZCa7jw}C~d\U.\_@{]_#dX9/*HB YCHg|В}'8B/^K^\>޾o僗}H^]^|"+XL >�z&:p)NQt챏b^y>$L5<i }O?wuFu\$4 5|#˅Ee<`4K}~`F5*Ojҕ9].SO�>kBB{4,8<t N O=xЗ/Dm|CtJm_Lo_mFM":x1xO. 7k/~E/>AW |k_^l9^B/kNa>/.k^fxQ~z>N _ 6OAbc Tl;qaJB"I-\-|Y3׉Zip]tN{,Wh :is2fW{ ~C`!Kʇ(KUaӟWj Bp7>Ybvic8\I-:yD y"  $r(8NTn`i隀�nMbW[X:]M} G񂕜fCH$t6fx!KEe tj |!**ώΩ@.^dz*U5?n0`7#}<(_hE<^ZDZ?sj/'<u?Pd.2ŝ[(p2AU7{CT0_>Q]91#$pRe0$>$êP{w\P0 Pq>Ғ Uj7p}Xܤđu}]|/SGӱ=ox~ }ꀽwkb3YU*v,O=8\&=n%*QQɞTGKקbX%ŦW?޷^|vyˋxL/L.G-Q`bgװ:e6+|}e}}ND|T -K!uzp (>CV!C6b/LD"t¦;9c}Se<<єhD_zr-16PNM}] /$W g9�۫:$̲]?I~z;5/W0UGYљ7`Hw-ETrcn`7M_%cxY0e+ o~7OP))Tp܈4:ބs@VMv03}?X٩b'*4.?^PM]-|,]iTa<vwzݛ*N= �T^P+&D*1 **p)*O�-"SA=U(řZna GrLrd) !, d7\oFVh}Y;T7Y`?7o 9,EH!9d Њw\m.gqEN )Y+"%Yf$e+bO s`]>p&+!= g�Bʾ!dd$GzX;oOϝ !s 3#'KJ= MrlZfK/)*x![~9Sf7 Q1@Z7y�0,NLj~Eor+_�sb{ח%ep *,r(MBYC+Z%�/Ψyp`s}G.VPe /5q5t뀽2IKh,8 V*lE<?y|O/_|7d\.{zxxALL&Ə<>>ҁ7 nXzkzf1aPv#"Hok/|Lh`cH{dnu4އ0EHFC46K2 `).ù;\)H#9Õ\ $ɱm̼>@i|deG_=cHet� `TꃙڿD7n}?>z glFEX魇|?XkO8V~?~܏q?~܏q?~z#ɇɛoȻo=r{{'y<Fizڈ6yG lh-Ex>`˙."2,/ ݶfC&17.:a[rxD*1K|ߐ XK`h->4|$lLt!AtE.Ц|H9>G͹:b&̻E]S? %*ÅkD>!9Li. þ +E .>8;Gs>{bRd#=h *.BL[ _хQ on].|y^=<zplSG>�n<橭O]0+ɒ8?w0Vɖ a}*wb#m�&7eR޵r pܩS|_kʌښZ|uB.)`j_{]͝RbKmݯtr4Mg'uE8wnθ۵*Ӆ"<8m*wT<bpYS{s'B0 sT;]!5d:3d!o9icx3Vy27EJei*L&tKfI>24GH[sg-\Epb=;U!X8@k${R=s'caxT U<??Fv8Xdu<i4jeTGÉ)<r0UM -?v`+ѣe$p heg%H+)R| )kLj\ca v= L#'2AJxXNhzׇO^99 濝~s O>�I !i%W&aHO`wK <]D|_ͧHA\?,H4}k]`w~%mox@"o¼c[p6ƒ9z|Mq|6sBD$-IY{?.DLlh&:\&o'M)iLJShc8§pcO./ӕάQ")&,�EGX+m1VwA\,p 3oqYʑB~;x: Z4޷c߸$ِ*#V̶=$Sq &Lu;"}|!?/ 5QGt_j ^/DD9~!nżWXoVݙ/mr!60_6jwXX? DXD.<҅X.C yŨI!C8o|w~~- 7|Tm|/Y(lDyHz|vfi\r]X9bL5TvtF9Oq"넟<~2찍ϛt:qJZM`c#B$n2jV^SV9:x.65e,jsPڒi胮yR# lw' \ۦ8Y2.`JRw{ПrWG*W6qô֭<RDBVAnȶ7ިWT.Ldw["Sy痃T<%Be�Ɉ'x~ABo)th'7Wr K#O? ͸k ShS:kDc>m|OyZé<Nǖsw٨:ϟ!قc^ľOF !-12 t 8^!G*ع[o([o?~/|7f޶/DtH^m|hۤu9 #w&QÐ raއk�f&lWrw<u +v_-roIJNK�v#]~ݭ8 gسωrQh%���IDATOT7Hp�n0PR!04xv�ptx&$P> EcP@{2Z_]gZt&`e[]!ֿԒmVR\B񸉐 l%Gǽ0 ].-}s,|c~ګM7zc{hAD1Wo>_ī?_[cm[."׻n.P'OzyG> gzO_yIAXxP>޸.0ω"'z]o@ӿQ/z<eU+۴nGHN]R bv{T\)ȧ*Oi'Щh8?W97Sao~] !4:dko!i3YZ5no%3?2:)`}%IsY#gCaYCDHqBv;CH`׷ʷmLbf>11MWL nɷrqOyszBzMco낝I2HrB7J*O\M\_Z7QኴhLZxdR7Eπ vY&)e ;e ઎?QLN憮o:2e)F`2u&~r *LrZrͮo1*Xt}<Oƹ'\_+3Ai1R% b5"Rm$yEe�t!8N P@n ,~#t@,_BU`fm!Ӌ ]?y|Hm l`&Ѥדryc@ۆD#0DCݟDmi|9\.t9)لH)H۟&{^|~hyxkC}ۅ.\69vtڀ'QBF̄2`% _X ˱eniNN?2HJ7=}\.2f_Kdه`5' ZTM'=eG/Gx_"$+ Sp}l^5aT2xP򧛒p<RΙq\k\Nڭ:?|~|paBVUw?e5؂Ugl~iBPLƴvf`0 jN8ͫ#~_GzU۶u1P͞y4Cw69_ҕ>r}񀵫$&o |eMfk3g^|Jܠq+Byy$PZZ)z9\&;W!iq�LBȀ_/v!RUPV?b6ռVT080ҞPI;1fJz,=w[L]sdNT N];`)Y&v?$6} ""HNkRL:)h]eWmMacN@r'BTX逍|jE ,. v%[#ʾȵ u+se_Hu]2عg,5ڍB'gA7b߂2- 0wƒ׶|AJn$`Ҁ Bc2gj֒Dž5|nX&HTq'g<;\aLx~TaŊKLp="'<?^$y1 LTg!8#MJ%>P&09fv$GKd׆`']*j])kr;>)}r0!,.ۃFٔq0n{x 1K۽V7=87]M;tM$d _r}c—co~L>S0e/]~a0[^[Jna}j;XXw x/gcV#7_ro6zQ\JW o_.�0o-GˎP沚r�ND!|.| /]CCυ 'ڍmnpDo lpա? nOOBD&||?~g?Hr*@8 q?~܏q?~܏q?~ !zEJ.^l.>Ka@`XcTF:%"Ӎ/=1L޷6ecԱ#"o vpDpTOc\d#XΨ[~NC}8gö+BOa_r= d$h,Kf(m믅4Sq8KWe ~?{ 2P)gF)mJPo]:N=;S$ lAT¹�!=7CB)8QqJka!d7qU?~t$[/mvl 3cN4絵ø'q{=FDҖ$>XA:ҷ NroLaN\N<G7-XmوyD0 ݟUá2бXF`R?6`\OaQ!"{fD`dπ (8n/ȳc?./\MG[XӚ MĆ @#cm;v9^'37qBYwطпiF?=B`ֽwd6E"!DYW`'Nm *̚c#/]leC#BLxCMdNv^"D @ 7  -b&ls: cO3AivS1c澩ڬNAp!/b" B}e=׷9q!%4{آC նN"�{HB)BHnޢNpAؚy!ҶPa#; nFI4R^?L2xxfr쀡j0LDAs2nV*w~;UQ y>cq@\rt g貏n-KF^I-9Z}<߸Qe`IJfjG|I}q36ic!}5CC) NE( g4 3Өa-9'B+ĺy2<X%\+878+) H 4LQkμ-}=Z�ޛZ}<@ޚEe# 2@ۜDUvJs}]_ 汐 R &=y^uקg�ꄍ"B3Ba != 4qٍX^]u"dIn2A $S D3K SТqI LGOVC&-U6dVXX[�G#(3#$v<F\/t6zx9F7i$Z7b=7捏 RQe]7((^OQ7 $" p"?}"|r(˻ WUo4 mf.sa]Rw^/AӚm^wvVknLƴm;Dd||,'*ps;g?jW=O۳�r)?j_v6f&DXE6x}7S*jo~ qS\ovk7mr}#GOL FrD8MlnQÏeRJn.M_ó虴m(pZ DEL2(i>`x!bU,M\؏y ҳ;W4i#sز &r}#k呡\=7bW4(&Pc T^]B7T|U~VaU^]T�D<Ah%Q`:6̭ۡ :LPLh=Bx FcBr�!y#!|~ ʺ)Ѝ 6@N3^c%~x4tĢP Q:$ cÆcMeSaν0#rvUpt2aUr { ]j9B볪B v9Z7 D ncDH,!6G,@Bz/t': T 'Q@8(S' *6 YĵVlgŁC="d*ۡy"e|lax Sι6Js^eyW|Gc]_w}V}jf1ͧ�!:@Ԃ׹GRQ5BZr?�>T BNBk\!SP>0%]<>[]_b+? j=d5q�w}yXG]_E_<Q@ eJ?rmoR 3A~K(B h<cCvg]_@H\_ vV2FCSxǂ~L:!Y2blC,z0%^�>BBLC'BU44I)818e . zF ʹ>"Dԗ9u.߀ߪ 6EHVEҦ=1e#=2 &L2Tv{n$w"KkwC7g=P>f>6˱1N* $bwb/DnÛ#&f֢Bis\|b(U.+̝4CC1uxބ7R~ڀMQ[]hG@BD4ڣ;ڠ6t5f"ژJd֐eȖ3F_%/ DzM@bʼ5y7X/N"WJ?ؒO.Oyn+m$Hs%?7(L.L[O:EyxxE2 vaΦ%D1e04cZPtk`kEWws{u<7=q�L*'|]@y4 3֋Hn,h<%&nP& 䅛hsQ">!jtF)GQ61 B9Kvd ?o%Ry&P0&*E Ʃ417Ao3 rC >wbn$CM, d@N7#2AbM@a8aK4�PQ&oivئ;Fse*O`aq#+kC!*+;nB;So$9H2Gf٣!DK)Е1%D_;\}>0)494&*u}X :ڠr>X`B R"K*O 5!P9`隖Bx !Bh)G�Bd%N ٫-ukQltY\CňCT!XV 7VP>0N?/X\C9s'r0遍sZF}`x";G @\pH|xt{D|,x7y>`# %6S$.>:gԉ2p@Q"l#QI؏ɱ*6 C=B?SDz&H7:#Q{\=Tp}7ɤ04 w`>dW+Ҩ.9ɜ >a5cUN-8R5;P]H>sD ϺIpú3LPP/7⣺BGHH\Egn, Ǡԕ2CH1; 2qp#\\ #P:86G )}"h +bbGy([?n_nݧ M%kٝv?>C,Ў|ls@| (K2G1 $¿o|ݮ0V le6h6CwgacH!}B~v|/_D9ɯؗ0R]yFG(voޖMUo.>Ls*]1AHBēeMZ16ۣQQ+/ZP9GEz4:% (řZnav!y;^P`p(UnϽyׅu2k\_.v7`}\#L4`<9ơ""HNkR}!!b]",ip\T!e=x]un Brư 'M҉9 8`Ҟgt=�Fʾ!dd$e(!p~y`:GH03rĮS 4*e4"X_'+i筜#8!nvӈeh|sp 8 2 tΤW3@e` \JPC2ʟV#&-@K3j\27\ߑ.'mg8kKM~cp\:`/ L?*%By?1[r}+Ϗ?~?y{o>B^>lJ.B"Ѿ:PI/G˅ۅyA6%&.nm?M({\u"sdD4|}k괭�х/BLL6~)iBLt9~i>l`"w~SK|_ڟLEf:y~]hx+=!=9^ҟy1@x ,Y>a:ާg]]tQeDgZ(^k}]e!AWkpQw x+[xf݃ʒ.ruF{E6Ms?%?3_)I4 ֞p#z]M:FA5E]v3Kr?&TFQ* .C^S#?/1j%4eиlѫj\[6UVKl?kmJ ~XCȳr7b]H~P͛N[{mBYA-H죿k{}9ap 3T>'/>F*�B p!4u߻O>+׭C-P7k^3JS>-M&t r3h1loRҪhNʘV|1A z bepz}qd^hɕ:[;<S++~_q<pZb'!#Fa@O"<LPL0 "=YV`FW$Mj.,f?MZ*Dkqv~-1ap2\_ŽD`>KF1"b+TVLtNFEI9m/,ۇP=DHxR ]tsA>>7o$ٱGb>7}|޸W~|?0] +Mpl-%Ǯѻ`[(墍a& ώmO"V6''G+:6S=bp[R'0> wXgk\, _\b3߲" !I$Xctzjb݃tN$ JE q !킲kК×>9v=SršXbu;轂*FǮݶBL '%(ߐnN Lҽ3$$|oFBjk":6b{~ @|vƧ �'^ z(vQc[%m).Fe}ᬸB+2Nps /Ύ *#3 TLL7;8k#hٙj桮/v\*22,7x*T~<^إ VpKzdW1h:6{I0zf^54F? EEt.}<@#cd)aKdTVGorHZH&;P9DMIo!%{wI=EGCxLTvbsr 4 ⻉a*vܞ+yh^!_ʉBg+ץ)hHReI4k>Q9gˡ8o<.]Q=|߻vl._'gq"7'/p(?1Ӟ#'!d]|dZCMswLUh*'ZP1q*S@Ep <X>wS#>n罝#Ο% ˤ_�בG/32˂]LI\ypzggsOFOC$ htwJre@ ir'X@z%EK3ie,PI|}.Dv*{a3r?ھY M*vC, olL #|o#XykJz?bjג7oYaA=inHL>OK}L.7&[$\oo6O65ω[&?MhtHy1[ty4(Dk35>E{"uٚl?'xCrӥ[Qk%H\B_ɒ[w.>_(\G|d1dX b\ _\ &|uSaU3XE8tLYYBh}no3UDR-ݽ?I하x 7j#C2O͍ř  N#)j;;^E[QQ[fk*~SAM Xć O6A6<k8x tDׁ!qh^qrUJ _ q@ ~ Ql<!: Q}Jl�H}8Њ=Wf97 Q{ s!2o `ㄈkcJ4"3T O.8W<x"-2."K b?8u π6q�$ӈI 7l IPMy v;ΓBUonCd _R݌Sv&]ۀMx~Vo<҉E@8^ɳ}}AH 4BHbjK`ts}6}YJ1Ϩe^l�L"6BpdLL0a+0jY~wjp攈v!! */xt#LB !y&H`'K ϴyzh 88$,룉{4xSpGyB8"DӨLW8[tȴ\>ˬ'x_G'H q#j D 3l$`T~bABv wW&l,c!LU l3M%/[xLDql׏ 1ű~0SP[n|2嵧]azPJ3%[z\ҏL<Gna{>T Hrr"#ÛC ь 5 ~) *= twsݥ\#h *K|19sƊwdPD"jx66ư0 fkpgf2Ȍ){nƳuw)hECzS᫹MHAYLFU V,wQ&?ES-�R~'z(?t!e(@ ";xU|C|c'ɁDAB*Hs!4#BtFy6b Ahj{n4m3CBbژ&t@%(&Ҷ=c\*NX%;5'fτ=!2 5�!EO**4 b~̇]*[(*^Ey kq*8t ƥ? μ2r$i�&多A#~CUpT`;r*9@ -8j̕>/$H#J|-s2B BM4VsXC@$cּՑ@7'N} a av<ќ8.[!U@E;G,86 EjY!IC.IpO�S vy[$>^@ո ӂ]t<X!6ϷWbF[sN"u^9o# ﰏ:x$D5�!3yh!E�H`|W2PBB%rP:8 F5\ Hw}E&胣GH_+H]]�]_IǐF%&|F1�- d܈s}Q=_;L]E i}�W#xh\p<Lp}>^v}*;TdR jo 􉚩!WG:o fRndh(8R48s9Ļ>")"G`t}!8G- }2 !WiҊ3)mg"RUf"rM/[Լ/; j{H|H9o'<6S>?I&÷<rh8uxF1=MS ].9-B/dau3ius_^Op9/a5[ۡa#"nm@>19m>m 1C^ 6ܼFL׿_o|S>CV?nH@iY)z#.."^!'6 U,d;K& +쪜m>~#g^|_Q8(u#Byy$k$\w ع Isg*2͆?i2T1ŶG=-S!H c -SXFb3"+,=wgQsciK`[\_,%=Ķ ~EfN+;EE"{u!RкO33:TډO4m"ѹNȧ \T`W5ZNP [fqQ/Fq. poy0A>R;//oB:ơ} Bʴ2H !<{ṁ`tFO> & 8 Q.8(sV`-9 i| gבȻ5|د?y8*d V/V4(U^r}d < $ɋ` ed< T&iP*5a>qz-]w_uthx7~{oˍ/ďL"Fty ӣ<&у,x틀y9=C䲛wET2"bGGivS:"D8aLf孅̏Fa3ʉB0(Ab܌_~ϼ >}p{[y+Z2iX9Yɶaވ.1:].ZwZK~ ażwq.D~ WU+,|$x2.XYj?BywB9:(3]@x Gi2Rw!+0 db l A<f ].x|O3EJi:P7~Mv-yq3h-`=0<�s_fåx^e;JE-lG._DHھN wmso-ZEEjݚ zt%L-wF>o?@u[̪5h!^偉TgI Gl{԰0NKyi+/9V>|@XuQM !~L_z߼N~ci?�mF6hB@ cF /-P;`#{""E1T,.ŭ3*/R B=?oIz|\s<ߙ9G?Ȓ컽gts?P5֩;O2VٷG >uH3A:m]ߍCB.7u w$IS)j=Tv >0w}i|_ P]_ߣ΂< 4�_g]y,|wv0{"؝*qO(Bbp2O*9w !$g41^/_.]D.PFO EHdۇTD!^$mO@ٓ4ah˖]P>Ӹs҅m@rlO᣶q (=7X#nrbwYzUz6F�iF-O)?EO;POH. S|J&cD$b8rF$—##e -n~iF&[WNá# ]H@&O;),I,tݒD|xE&,B,,,.OÔ.cR(R wvd&@Up8ך EQI B\8`³LF1\qas 1(w<͑Pvb:;u興5=UF5ftLt ũXjgy#B?hTn^XBO:QT~O<hnZgG#B {winOaP^3rlIO֝ZFc A)?f֫~Ef%*b5**9\O`%ɸՂس̙/ [Y a xn4̇ Mğz7&T~:!zfιD;k+j7XW]{A.#T8ާ?}&J w D3f;/^*gsY'盩cqnDzϪlƅVXFIjwJP _7~ P_OB O0Vl 4BOrW>mؾLUS()SYaSJ*ƛfDB? c%s}LIc cI>BY<vQZ3{㭷]k]dIPߦyj#̀ 2ʆfߢ#OVPީ<q}xg>˗}Ib蓲!k7^ny㏾~n%[ǰx٩OƸ<d$8*CpZҤPp-țЭ@Ddkm:sǵ] �Dy./UX.1}>S{te '|?4oFtBnngO/+?n|,~>z)!,XZJ>g3}Wc6)#f9]װzu.Ssab_3ށ`YFȲ i8J2*_%FH/=;e+"�f`iBraBSڱхA ?SF :Su[ZEmH~!E'>d$Z'FĽdsQ CQ\jI m^i2kkz>\vw zhL@}1]p<՟K?BT-~ |=jkōr gL{Ё 鳀Mr/9.]ua�=B^ݼ^+bO XE: -ɻ]i�~ݕl˗9IYBcD 47p~ٲwhp< a"|sq}î1k C|x%?o¹>6F*Νef9jаQ{@Ll8=oPb,z*o8|AA?D%8CD �Dˉ`K~Z!208@%pLHږ}O=" ^T_xI[LG5Ǥ!?Qc'8S (jtNg:T! aeOB#1mg H{+*wHBV9s}W>uI;B\_-Dv(>W#i[??T?2 "J5BrD?lXDCH�\a ZAL]_ ڣow}D?}gիҁx m;Ұ^ܟ|*")~_vB@kԙ`9;F H:E GS {Ud0?`p`Yk\/ė5hhch 3o.KdE2 qUIz0uz/qڊopJw"]LԁvL]+>CYuׄ!̴1 ,b)Ǥ6bDquhPLWkNDjө$wbn>؁:>^wg%7Tr= v}Wvg#�R$,,a[6̻5}͚۬K7{:ܢpTFBHlzs(4Q sZIRz\< SQ.Ȩ[%*a` @#!P S:5)MƻJ&?rYR kXkUL=X*!&%9v"TT|nD5Wrn,c8R؃N ujYy1LhV@9>cN*TbE~7kUv6ٮ5r*@ȱHՓO9ȡVh0[$;02MO"h][ۀVL {I&*JJ>l#! }Mɟ̗cm(! seA2bâ͕uiHmuQ۞ BaQ0 j^9BG̓@4@>; b%|la^-Rhsi>x8N!,Dưְ)A1B7 5 !3` 19*!Bh){"ct\BF]5#Okfl8gCVtH㥯:|C i[w� AxB,8ZSKb,N 7&jdp.9 }u,N⃝ # G\pHqQ"c o[]Y!aur6x>rD4#1YdQ{4 1y $ $@2) OfdMth CB(Cw}}&G]eY&%.^f]DF3Av> $fq]GR_2]f2l-8KUA`c;g X">3IpOU]a#dj zs}GP Z1ҧ1FҡQ$ 9 O2ipAp3!Lp=8rAB(e[ \ <B\]T[[7s}>$!yTZ!7:uXu:,: Ѯoޭ ; = 3 !Yg`| ۮ<) O>XManqrmv[J�}B?ݣքRm@gt߲ȭ2хeꥹSX'|K=}Bv&`daZR8WXPd&rE@AWpFbZm_}ߔB,Bh5)`'˜r%GemIB DVY{3V*lZIy[+؀_5w�M:~B!G˰Ԡ#%6TJcwP!�rX�GKz_@1j (kyTwQg63I rv@%HPg>Wqf!(aX2T:{�?! l`${`w`RrCoq7A/CHG!R!? iIds}vĺAF_ju8{T 9?�"6 ZARHѭ !B#D CH,$BXD?B B .{ UP(PС:8t:""@(?`/)iE^ث@] 6:&p,lFwtI%!; ] ."z�B!^!"1g`!ʎ=B$ >!0#D VQ13:`IA&y8y~]ꋨ2AzFY2Yt qsV]&Hr�nBB!z2 !!8/GFL*emH, 2.8iTb jIeTEG?9"%A28 *@VTe,8TחKMJ%>8:`>G1D[ZF, wN@ncePvI2A52!c@.8BWu!V.rA^?%+"J)P+(ˤ}kc`c dODm2b6`t*J'}1!IbC;b\ֱhl"F(z7-`oEKKy|˺ u?ecrPx?'|s^�Zccuɠ v9Ofސ"5Nbn&[V@neP1zI,?)XO7t( ']&AFKނljUH4"/X 1ir9j 7t37kk-0eTʩ ZgMHP3;nn/[~kHRN٫LPu*pm6 [yF =@歘_\)*h�lBӽ6L_͟}oN^oK$-AbU4CH]T*?U)pZ0]ia<Rurl'AȨoq}œ�&a8}'f#`q}37NO LxwS!ǙZ`1 v<3_+aCZ $n!6.v%~$5gKECEc, ֆ2JBҎFAE2,k*OgbvF!3Ug19[66GOx6N)Us"ع f9R Ódƺ?P DU^h)ر/uRCSBm$g\6lOrG6Fׅ mncDXmY{l@lQp<`sXdaCQZJm@B1.%Gߡ2 #Et}k6L#8D5`L$Kt<ˌ΋2{;TA\_HXU!8@aBN E2۰,doU +q`&Ew_ @/|7Z *DGLP\k6z�{|DK䃣 `vRs}.YGS\>`e]piL׎ڒ b'V,%LZy ~܏q?<9]h͢ RvNq]b '84T*ۙ(P8IEoiL"3a\=팫'iV0"-}oz,F(H).G_]Ӫť3I5Ԛ@gk뭊Js5wf[ƉjB対;/~BH"n$TH*-ӾefoE$t}ߴ'EpeÙs2 s/(~dWyt\l ӝ;A78=DP琖h5x?xڙCoq̇MN]-8t,حLP+'-BJIG`r7mZD..]s`Xkp} }"^8@zX $K氥 =ᔔj`_"+=14՟gR>[PyZɕ. F^7{Ɛ]{%'reqoSM{Z_d*SrΖS!:hЕG䍅ʾ#Jzs9[`uFvvO~ N|oPpo&M#ZQ}ѿp;!;=v 82g5{[<_݇4e%K숬?I~;0Od'Kb۩!x=Ƈu8+>Yip]e|~*7{z<Y)~܏q?8}\'.~J–_Ty\XW3@bֶLЃP7wB)D {_xYԝ?=+~}8~TxqnD7濟: mt4&[nF ĽEOR5T!Ѱo>ؼ\G+_S֙ʹsp7 .[<|m$:5k[Hw>?زxw_y"og*B_)d :a#m3l5jظFˤsذl@�Ȼ2OcM9CM7se0ԇ9Q{סeʆ>W;IwnC~6rn݁UݏZ:@FS``Dcv0n9T!"Wz/p/ްD>ds vg꜅;nysh<@v<jT[ iauwDV(,N[,B`Y vFa V#VULk)p{JL0? qm&hI8BfG1)*Nక][t}ש| *,7X]]~ E ޺M ^CaC$B$m}K/j<^#O\X'>h;bC\0�[|s*DŽ%#^ 2R}B* lSI2SV7`(Rn <?ǹ뻺SP|}n#>Nua~܏C۷f٣2nC'T}mH7qŋ]orBeDly71{u'`.)u M݀!j-Շ^HԒͯNom֨W{+b:IZ~~3٪Z"%� ._"v� 6?dқʭQ9sl^/xg{w^|W!*FT S5DHNqM3Ӎ#E3*jN�F%~g b~n?ae\6WzkooG?_9xחzHS~? (> /Ͽo/~㰻] v)BB"mA=B~K/>?^ *rRp\C1y{8F*z:4.Пdx=!]pY3ww$9q"aW© !y6oi!Ljw$Tؽ7AO^c_|Ͽwwr&3Z v9B #C+ ӑvU\2Aߟ: b1( .fRfL0ǵtzyT47g׹R:^l|#GB%j&8F0V=O#x2!Z-+3ZI^* VoE.b|q)CB~<1ARf#^f/Ɇܝ`R[?Q#=32iv\KDFtٜX)mg0έՔDP .*4vъj&V('᩽7> kl'2/޷IA ~!C2!∐6! *R2\\"$ B D!ƽ 3:1ɤ-paDH_ָV(t ymEtZB^E`3W~mmo~6AH(B-!@ƛ__Oڛ[!bD4s*]t!/6-^!D<B8Cvg7 1+͕Bؙ\ēlb ~2捃0`BGBc_zw_O>>?O}K.>Sɍ76A!tԆ!"O!ͷ_a>pF!CH[ y3|']0*^}mQɥCHϩӡ"ytB+tH ?#Zڍ##jgq=Tv$pz!Rcq>9gE7C)`wX7l d;P`q}<I<H0j=%NوCl$П}x~DNz4* v!8W~!CS"3>3?bS@!J�!D%xp}=Bb&H *s \z& w:8Ap L$gR\LP J*4j4j`L#<?dSd}|. goe2Ae,x~Z?+J˱Pc% z7U]_gT"ĭG":ztBZ&H5wQɕL UuP" JH!ym^xOײ:-qd!}]XU)U&!*" B^o~܏q?ǿ$#YU9+q�O:dIļ1q$͐AaW2:ۦYY1` H<vFeS3�3lk(N5`KZ.?>6ϚnQpݍS)m׮{]D.Y,R4L77!#b=1p}@$`I`b  JD2ʫV[p,Z s֕ !0�"k#^{6sw»;؈A}t#yk6?MP2me* oB|kos%ժO-$J$I,5B½Z}|8Cq]cc) #�Dx;rmt0 ?>[ ~C!9%?iе̢,mwG!C+A3?'Ͼr-#D]"k(S)<B(EHww_Gw_/:qQ w "N萍8E2:E$>wTrt)<2J*Ƥľ}k]T D nũwn=*( <ȱ8E|Kx!@6NW6JkV5Uڮ|CE gTX<? v>ٯ!#]P")B]K7lwK} GsoQrV|C !CZstGfvZ 2CVJG~]Lsf"vy6 2rf$SB`׆ °lA>8*#|^x~nG/YZ1woQ a ]ܐ<4s!7xLKl`sK%*AL|:9Җ!BR|U뀄+%TCEe6P8�!ZsP|uhp0D7H58:TL ˇ`Ǫm},3j 65q?C8:8PeKn5m0$Ҙjo4) 1h0.+`ٍ8aҐ *IW{V`]e8wͪvAT`To _`3O{ т(##][96{DRSNr.$׋l&y_%vӭ?5|_}K}�G0G B˿eK_y e &I8 gAUؼ5Ay%jT쟸"HW+S`m4c)ķ1zVfK0Az#/_{F~>~K`ء25{CrB"(:/|AbMc4g+F";/AL4j'h/Ƀɀ� @rL.P{sف9*X{PȩH;Oֲ|;cyT+$* K/<?}N&se)UP9`r<L"/v.M;nO B$y| ={܌wm";ỶH- \%H"smɹ!iB>X\SD8YpD;3 tK, -fr=-8t9bsBPe{i;fH^ZD_vˮEK@j/r^1;ˣp}ZO{-vz ޵Er Eœˤ(þMRfp|`zjt9gr *y|U6Ksr?1mU'Lœ+3v*+eG~܏q?ǍG.ŐRnϕE"[{|_ O`aPWrb3?Wj luKmjmQ܎+L$*h)@$m]��3;u:dʢNN@9o ƻa_g{7]3U毼ϻѣ/}VwV6͝&426+QL?>2B ny!iNU0vᙝؓOտ6?mp圹;y[?gH ǂ{}:L+کVe-;_/N9 ^lTճN|ʀeB!P 5w'vBS[ʰ'n3r}d [y!8^rbuC":Ϗ~zK4v4.-%3/_@ySW;=r29HeJpNќD w'\w}-^q'juhi*"$*'m7t} hA+?RGSh$|9V8Gڑu 5Љ=:BNīAZ{yG~xsZeE2 vLIJ#6G ^ɏ/ߏq?[03/.u~d!ۖ,G2nDfago{]V¦p<'ABÝR<qfȸR禲Y-#/$u# {Mwq}o2n۾7M'IBBA +C۲h` ^U`؋T7o҆E7Q\Tf� ޷_6 ‘DMϜh][Dža_ʶ- ~gK7fB`K@a^}?Oо. Õ_dy!QAP@Hoߤy5 A?r 1 !+s;]PG2[8?&pm !�Y59x=ηHac%a!? yϽ@U_6ud, MD!DBx !՟zfǗJ `FAi#Dz �Q_Lpު%AWv?tD"ˈQ3:dMcټ`ÖCaWO'L*TֆȂ;Y+Slχ; Y)Pk)UBRke*_֣<5I F,ay@s]k)IY8-9`$o�v<_<gaKɭ @l"<?GH>&fKT`k!M΂$'ܗo>|sz| /[2d'1Pv1B u KTe܈WCLȞ Zu>Qѹ>Wͤ5o\$v}q q:8P<rh׶ * G?e$$s[ӄ8(q(O6'p}ϰ2�XA�!1,G4:Q:&v/*cP!!G<25 =֕ B]l$8#GLs$O3ڄ'tbP(H\/GH<* :diBB"{<{"tŻJ2<>m5d~C}˧;0w,^ATe?1Q$ɶM߇_$A o$^Ҥ^0tZ9b{G05~oU( _P1֔8h'@"B!D.Gi->0pS!ZPAs,3Eɂ8+BGP ڀN(a3u6Ve(C`Me(M1`wȪؐs\_)'P Re7+?~񍗛-Mð&Fkh?GS|s_xYXBT0—#KGʯGؒ#DBV'M&l rB`aI"9B$AT!ȄGHyԱ!ֵF7T*� ~ te ѻMjD/~# L> ǥ-pbAntp5 B#1K`F(gO# EQ E :Tǜy:|"!B �;kM+Vʂc$Ɏ0FLIn(9 .0!!]D #Bb0"!y*Ie!\FI "r+èØ[>Ng]v@Eub! fk;:dyAp}.ETd!۟}Ͼq 2)Б<EsEMC!B#D/@X!Ă x2)IHIapL34.>$,L C> .Y&ˤ2*"# ϟ?c v@j}9 dEU&K]pD~%&%`KL]p�֫cYA,"$LY+>ԼBL0QoWyhVlp ΂cupUh*AHuۻ+))]%0yp4|;V+$A?8�l &T�;O`bCȪ߾~܏q?Z/v!L)'x 5&G$&Q/b2u2wKۤ< [@Myӷ@ɨ.|!#RS+܊ kY}AGFC^ޡ$ӏVVt葟N"hҼ2i*gu3ΛsU tPF`J!oQޮ!k~fj0 Q0/Ԁ[fn$&6{O6}3/_oe*m,\PzfGH仾8UV񥈐`-cdvKI�d}'O fiXs}l/(-�\xj~<BlDGSG8 CuO#P vsS'5H}㩉폧!uЋ@C�ս$[ B| *k>G|=<8bUpqt*'cIaZq%X`Ds䈩�,a\S�. $*΍[:تu{C8" sdvD �6GON8m(C*FvRTp (*B*B];*vm+;/c2h%/uQ vK$rvєI.}5 ?')åNX;> mncICoPDTXD+I]Jw}n vX[C#>85?@;# X_/:;d_Ns>Ө<3}蛵 8.ޯcwMZy%v]\_:`2A}+A 1jU`~0-LP:G aeÔ mv2Ϟ߽A;M~ZLe<8veҲcAe}\ptV+*ҧX s__T(B밙ck*w tg ޏq?GEXܮ/%|JH;Ҭ!ofëj/JWJ||=WIhQa.ϙm2{U.hQY#Z4asYR?]M^7 z8Blپ/6hnX\)Nsl.&"a5L2|D[Z7ni$k~Qz8c7țҟ\}w?sW �6V&wqxsW?ozeC@o�yհet*7TNx S+&fl{bePXfxWrފ#| :,ՋQ7 QPmN  `?3 ~WWV1?8 ڭ=^nמn!n?i7~&X];\B9WXd>xb~É}4TN;aꃽ!uB]y5ւ vVv`WGF. ( uڻ]9x~ eU W}^Tx&oWB+*[+9Ϸ/ أp<8O*OH'0'(2)%dr!K!$w|y?ҩKD?/v?G췾˾%GȬ9Lp>$w:ws8>2A H2!6$ >69X-&Y|σ#4D( H;*LQ d _!8@fI&H<$�[qH2.Yc\%/+tU[~IS?.8B"'$=B|_ y7- \{P]p<VgS3o̗\+G Xgj)+u3l`pn>QY 9DȂL@;" ]+ߏq?GrQϐ[+ŧs?'=A@;~܏[yx'gz/~܏g9o~_Dާ-||[??c 7yRHowey~>U}7�ݰ �H�hDJ(Ҭ&vPlf"fbbcWb4(H$Dv}Wuy_=ǽ;̪y_g~y}wJ]7rlSA w^_nMlӏxm]-o5/a`8E3xԦ6MmzmSԦ6)(}Noŝ�D0N)`\]7VπHT//1,*;Rr.rPf �.ވ'pŝ(SʇFex)k@!fbb"I*QTL#%UmMŲFHZf Dh-` 4P:~_RN/#g\t&AtH2UeV*+1sEKmJq{.Jկ:+$2*9-\`n߈ytDU(Ed Awp۰a T]@Q>g¼<kPS0rxQQ84h?@DfYWp# !2W]Lj{$#�@K2E/s))ߐ] H� lO+w]h2!Ncjş>۶䩰BĦ%!oo٫"Ԟ0PGd:!!h j5*B:]n"!7B7*[Ks~/zR]pq%F Z(RUA^zvFxV-%}W6gC J:Dú#8l1WDع)V|$0>.|�\A;+Rb=_t +Z>Ppշ|2$)b09|E W@Udq-YR\@N`0B" 5j#F-6\g ĵ <06DH j]8OG!BR0@}72b#oZTWHI[T8RB T~P6e}K #'yƛf]8j@KCw=k~h SOk J D1MϷjd@X¸H|?cHC|%ΊbpDW‘Zŧ$(*"u2�dismN$FpB!"S%&p$K8ĕ(G,A p o6I~ 4(.ذ:0nF lnSԦ6 +=O[Rv"iAS6J�ڑ!Yi1ިN&Тp* R>nzqY8MKiq5 =Q1pC;Eg%d1buJ舀 KDW'?!G7T3|Rֺf#Df!vlcX&9BrC.`B2rL )E9eg\<+#M"Ac"Ret|h)Tʥ%P(JT0 QjD<>d\e`d~JppP!EF-p !jʃK[ܔdldGp�rxqK9܋LG#+@x9G)aov#!4m ;`}B"-^"Z-GsɬKkFO ;}Q)Žr"GHwԛkZ#Ng|<hk|B!"yI4!Jpތe_FKBypO u9!Ow[!Ŋ:$P!](9E prSiPg Ǯj$E<>X 4ai"bv-@�OfM Kd"=~!։҈t=>PVBB'~|l!(D5ŽJwwr"$!F"8y7_j6Hjo\]AWeIy`! ] q GD+"dkP8@mȥp4;A[8pz>0VqÏd%\hb"Є##QSiF% Twh\E\. =,z1ئ|w G[1p X6ve}<5#O=6K0tw]@I j Co jO=~ī7[\(ԓLK"DX BP4˃;@0􉰷. 0+H8KP`TB*RmuqO*_xrMWe{JN$c!܎6MmjSxt@b[ hdAQ:Bcjt3;LߢJ?븟8aS{܁�JQ!7 8˘ ,qŽe{+ ,Yv=W~ltY5#D貱<lB:f#/3Aڹ`:Q T8mN0|lo0�7դEA;u Б9zhL Va}�&|#!V> :d6#T%-'0.[XYEH"w W}dFM<ZGg#0Ɵ ]|uJL#TQ#nޕ<z0BÕ!X_̾Do(\_n֙gSƂOzR"$=r۳T˭oZx?\[7dnS$Rx*h8H?WpHئr >g'||7y {Riۘk?JgY&.SVc(E * .կfyOv)#1<plDkju(^<9{iw(7Ph4Z# 9ŽO&K:Xi;03N„O;鹇¹ ï0d`_XT C+!.۝DN&,AA!b_ 4 gvtf �f[[CH2/H^cVs]M.eHWJ:6fv7$1`'2m0GHn|ߖ%He]رXPc(=-7]^[ KԦ6Mm$ ~ U"g9p=)O92;,r<,&d72pVZ;'w�oHKpc""% D$zMh1JÔ 'Ƣʱw@' l$x4lPF-ݞ4o7,Q r BF&^U"DEf X)ӌBœqNp38c#xM|UvdiG*[-=$AV?w>2/d;x"A VF&ĚK@q,,�`O2³!l (BvlH >G @O_QCMJ ϧs\^SWMv�v.(G1 ae<Wc=mm7@8Kn 6,QGz0!ՆJT8R~c$#!h Dyv06"!QrkcR'l.E!t.0Mp*)lrS C4 !)Uz6#\5T$3Q L<쪲qlMU6)ցoeo z-b}Lܮ o"75uU S8_dh%Dz>]zs5kicb\ ;܇Aˌr#ĭT˳ե٪Z#b=0_+!:6t`:)t>@`}6���IDATde묏HBDY!HPJ+k34F. C` җrMNC>]�oE6a u t Tz uy<]Z bƝa^X.֗"';H1<U:BD†!!D͊.mJ@5 HWl닇 ekr ejq[B WMq0 qIvKY.7&) 6iTEMu6pu7f%+E}&/H87ö"_FA۹ǚC7y gLR ,1�i^еMmjSLb?�;_ɲNmd#Ԧ6MmjSԦ6MmjS3GLmHe K~� lO]7pJ` +:&|[_ $H&-$zlU.!n wBDRg)RT#EU&H\ٷB$ :Em;*MI{ 8A8oN̩$AL!eaL"nF5 zB[(B4o&&(XFpg80=Dk[q,u͸9А~-\5U܌yxr4 �-k*@.~hhc363E;Bݽ//rOKi#r?s-Y!(" ` Dd vrEQan 3aej0ZGx '2@2w%)8`VX3VFߑSL9tWB ;6oI\keP^gZ5T%\'+L4F]@ *Hi'+ ) *!DBf>Cr�!܉5@>I!ϰG!ehq�tSM8&CR^ 1ed/g>J@h|36M8jۇ%QϨ¬@bN2(+TzJP?m"ZI> ] z~ #(|1=_;l2�qlsk%"At=_\vd =1`CTM%(aF9h<e'auo K~D` Du!yT9 :OfsZRwF Y Gj 2+�"〇Qlv/B -p$Z9H FG%TȾC;!->r%)|'ƅ$*oa}:pv,kӁdyXxhb,S4$$ $Q^HÙحZ=X[Vmtr\gpp[B< Fÿ#r(7F:j6R&`96!�ERk>,d}&1ijn`k(ߐ/@1�8d8� B(zB8c X[|'?BQ~p!m?<`Z;] W ]z/1Aa h@{8SG} $սIIu$J'jZ.lDgɒz;׽ⴞs& Gg  2] @5�9Y\E 3@B?#OĭU?!WJ&3+9BHVrB e=".v*+i6pg(Y3$K 5\BHdptF^RF2kV k !hlHHyBruX3Yb?! u{T# 1zedBf3 ZF rigeOpq*eĪ˜gncUBΦqUZ �Lunw,L"mBu>@]Ѣa@O3ja!`忐"kvpCV\>r`;62nqMp;B!܅0b$E(XKٍw !8evBNf}LPմ)D'�PL@w9)B!aˀauO,\@a7!!j5'1]� u-C8hĽʷ+lHXQ|@vJhX¬Q {tfo|+i*8S$Bta#L D1B|]NZhj! 8N̸ !(h"DYrzXzNַ,A[TCRv髡b :AXˆC 'P,P >�FPHL Gho(ג":K8 f!6M$~SghPD'#uc`+B7PBEO ]G2ǀE\^B p]@V.C8b- Oܜ.%8g67#a}!p0O'Fd1I\+B4$ GahFzcʕOu6Q9vnH|I‘1Xf]I?feV"XvᨆW#/@7(W];e: X5` XNIq&T#;-\~ b7{K?ѭ_w׹T11뚷-<պ�_nHwF71#/ _i_jv_VZ\II)#Yl)$Uj-M y5u@nn)ȋ#x_0FM\. v2]N@-)/mȐGf߄]8uG0{f?1 $H;¡J<Z榸 Ќ; LҔwā.nA6}o9(sc- 1xiT#$RgFli_, UKf',j,n/= ?+m;fҩZ@G5+u� |co>_ @d%`D#gEaѥ`"aL/R5[ŬO] l +N� $Ol2$2Ӱ{͑Xs Lß)B0#mX) Tw�j ࡶ C"D?T"+:�&#=` $( ^ XJ`1^dbu.$.Gy Q_!<T!E;4>K`�k HSؠlI_lCI*xdM E!Cz>Po ;N~a !2 V2bTz>&r`\$hh+{%E,A9JI�fF1Ҕd0(]@dˊ]ր-)L:$[)! ][B@G'l-?FLfU1D3? Ȍ<fC}BnJ"X=e pD8]TI`3d}K0t=_ e':֦ @TKlGI &ɔSQMtq g `; C啲> ֱ,cA@#ݘQz~]�[lWKw>�IQxc~LݤvhIIq 2](8XJI|N7)W (]}Ҿ )@ ;}r5Wl XP4`q7 1'rh4ͪ"%č^pmzI7$qkN̳lu:.Tȳ1}JIw�B&! 20?#8~@ot-_ ='t@;n =m>fT!Q,G,SW "O).a;yfYB4s(IJ A-nqE':jo2:h(X6 %i{R3F§W/C&7"%[{Q#U&}sR>"O(#4gek ||t2`�9ԥMf%Omyl47Tb}Fn/S(+Á. âSj&@fAjW(enb�[]gGqb[Q$P7`ŏ2Yt!b0@L1G&.n<j0DY�t%(rlWHV߈B]J/0:!s3:,#d.,A5&"|Eۛ@[(x`].l=SD/@Q rQ2! 8C!J17څ70_jVt5ۭ%IޡB#@nO ':s|JOTeH v}lnE¡ Iշiz>[۷O6ۄ3;eDׁ;€o!.хs]֗Ԡ|Wq4j+B۱-Q^=Mv�Vd}�ѰAdž&E܎ԅ )Ĝ6mVKJh: l(ѱ0m w hwqػ@@L:-A�[|pցk ٴ.~z ;|ҙ  D8"_(NŀDfAl9`@WqH �9 \!1t[*mG}D.:Kaas")u†G�۰%0'* /$TTz-OM)%3*Ԧ6Mm% @ =Q<0�@Z$զ6M+eH!w?t&vNNdmjSԦ6M?ٝOԦ&νMhSԦ6MmjS~)�z۠sy^I]7vY\h?{Q:WBvL(Luz\l@qcTU_wAf1p'i N�=T{F&7YNLcp( 3+ Bd[8ӗIu͠j3=rѮR 'wQA:IK[Z2qڊߠʨ}qUT rZ.yAl}FYF:텐':d?6 a&C[~V<uo,0l.xPV;qx@~?CMe~qN=bdL �^t16-%@K 9:բ3%<$Hb a`Ϟ P+ٶ}5. O"i9%}4c%nED Hn3B!@rvKF:BIeu+vO7JBE\Pu ;½\rlTeNBH]R ]jq @@e~+.a ew*r.=U|, =˭ (B|/Qz--&*ЎI)B|' O@>/ѽMŨ9xK !$+1H+p !n9EXJDqH4NxpPPAl B@"G!` ;B, ǒBm5H>ߢllH| 63Jx,@ۆw] mW)#&eҐe냢ZPAC#lz~ZK;71Bn ba(-5> '#‘~ǸQC{OAr E�d':!1C8RK0EhC5LG:N�XL\/N$\C׊f)lS,HM =! G@]@t֦E,ZoQYXǖttC; @#z@`ǖ1h7.-hSԦ6i[DOK!{?�P*C6"g2EGD~Ԏ JMkW|).9KهDM*}7>J&�]ȰSY T؊.Y ;.p3H:%tD@v@N W@@QwBG42Q@j]A3 3 BD yubVlQ#W!�˰\."DYeVNmicxA&ŪxTҊ:ՇT6Tʥ%�I'k1#mNJ䨶>Uc_?G]͸! .}eJYbt̺ 7ʎ ?/Ac,W$A2a="ǜ{�0^(H_$+ /12 @-Ww X- !4m ;`}B">-ʂ#x֥] B忒V ;1B,7BAB+MI�g פF0$K!!) :Gܾ-8ZɋBRp�L2@,8!r!nQJև5Zؠ|}L@4V] W)9)`wO` rb}LꨢHEMYBК|@6�V4-4` /U/Z+ph5hN2pX&> tR lʾ8+`a!d$X O:3{68j XSa&B Ls|#bڼ6T.ۅ:kC<+V� 8az#DS!ȰLlca><�L0=PPN9j6�)Bw @>� G9BB*!ԅزO֧�?6(Seȍ 8E\wh NtuteFK`}@hJԬ򔬏XRs>r uq�vCZ65ێ�A&Gj $8@=_í izӴCpѓỈl ['AşX^"U_OoC`Ŭoh)DZ}HW& P6?(2Tg"Ҧ6Mmjv"~ñwذ"Y|95bD1n2-p6O!ct'+w ͦ!}W&&m>y=3{s]=l.hxhO~ŵrh<M"{PCm2 j.o@wWO;ѝd缲*[/܊',[ 잁{>?\Z}eP=[X^=zwv:|��Zլn*NlysZFGZ[DcJ{�[_UƢP{>8X48Zd|g|9H=cbW3[(f�QfeZxtFiu >YpMsZk˵ե/4܂ ` z+vv2YjFͷ_Z+5dsޛwu:AV+[٘\ucN9كGwu:,cPRѸtz[ Zڬ)#hEpC=S k5yyQ.5g/o}{sZXaA{AyAFv@&TԾHՓk4zcs>w|fg ã;QL938R Sm5],]9W^_9:U0Rεe?l69?= y,o5Nm.Vbh^T1#BGP0kZUU^,ם"zk,ӵkoWo3[�@VZ\r~kjŵ o+2/n%MopF 3]#Y5VZ]ZZa'[4H9f4ƵC$3zr F'תQx9Ւw4eL40:G&;zB&ݨZkk8[Y*XQy <YG d)lMLwMuvv cP-7˥f}ZeeɲbgO. A6�@a*jZcn`k8KWovto0_(fժVsq4_m5mZb@rlCoԕR/d,]]�0g=B1eVag4]=bo>A.qF^psT\n%hޟ+d;Gl.pjZnVK F*ߒ�CPaP F:z |K ZjsmTmCW%)q(͍ $;iu7)%ѯw6LTb[% ; j̽wenhF6;aMmjSڄIȡ$ en7]{+jՖ.!jКi5�88gmz/'/z([w?+$^y/}~}磃=wn7Die7=s={j9c}|GG{a C~\oqX#{Zܷ_h�2c?ѱGQҺpj.J38vݽսӷGԗvGr+]Ryh ##hag/ow^YS_$?~]JCێמE_Cl\GwّQՆ!_~Lj/7uԞL6Z?Z Co3t7Я_+Bg_< Vm+?XZoj+|cr �#O> C~wZӔ "{㇎Gr=sNm%$�{nkpd"y ߝ|,1}4O!C>]g+Nn>·&wwg2 #Z^Xs7϶?ҥ;j٭f8r]kT +uzgBBU睠qzt= *<u!M $r?X\R"Y8® oohb+/R/ [{{gWTŮ=CS{;֕soRjY\)薻9db_*ݗ;vЮ=Vm]Pzfå&Z[|7;<_5A/}ْy#t\}\>siŽ;J,J;=: wM헗ϟ�2vE}Z`¸zח,TzNLJ?:0Nr9‡s("PsUZ?Y hZ/_<?;qTf˧^_-m4<�L(D)fypxCƊˍڅ WG1|ds@OP!WZ+e"L,{Ǧ::s s'[Mٛ=7>`77>ea LKs_Zr`"h(H*v\wJgS-T_yf\jmyK Vљ=0\pm:{٠}t:2ѱp+j/Kic~HkJ+5souh}jJҙMR#"c0:9<%{s\]c`a_}vΫ1ړ nFV+BQ:7]۷5߸_ToMki#)2살]F 8=y*�zc>xw2B/; <h� 1� Ƴ! 8 2q9 t&i nQaJoYҢs?\l1XC7?�cp'lX w5LEܛ<DX̶� Ȥ,3�w1^ar!%?%\=g%P`7,4#Fk7; Qv<=^΁; οIWk2A\Ɓݍ{w&Mr<`x-EE:vYӗǒKA+.}̾]ǟ[Ola\k|OS_qJO( 8ϳ3GSC4#lz>lmߤ9Omwm':%1;2o8|k+ #kM9Cgƾ7-/kt `vw׻}p;_zT9VހO?И3e ZFC0,M7Wv.u7zD]Y.১xhoΞ~cC|dx+2W#:<YR9I/ bܴE�Az[১=r>{O7jH]ZcOL-W>>_{|c~s)/yBs=I|�ufxr<}EO=w\9#J4{yZI k�5HԲbxǒؑ}{GZJDׄ=dqZכּ;,8w#$wD#~cAxI p<b9ٝ7gJv?@<|WuLŎ́[{/bESo/-[<xKN*3{9;唉P֖tށT郅b{{{ sUej=E<7M.Ilmԁ#}�vwd(F';{󥍺/l|13ǃs'q 2X`ٰ̖7f)`XDx'^[-{9%;߈\cy,v=xtށ­,\+",ĵ?wpށѻ ϼXuܵTǁ[3# 2ldsx 7Z  ؄.`.&;7<ޱ4[Ih`zX^O:yt&xr5ePLږ傑Αʥrƀcz'(f/. ed {Nc z +Wo4!۴}p؎td3g\ۺ`c}I>)=} 'v|ђEmjSԦ6EK@mFib·}_ō8'7E_c3g";Z řhO2!��_[LZk{so/_Lo[hmjeQx@:RB!6*$N>>߷ȶ;7fry3onF1yIj^>{|~dJW&`O~ජ&ww}zPd_Vfh({9l1*г�SE$O=w%P�\pî{g+s#Q?LF3@Pe5'G~nWp/ԯN)pnߗ~jT| \NR#/!){bS7eWҡcOL6G1b1~j{_诤ޚf9vEw1�8p힇 �#ŧ硏d~.Ē-*,K7B)fЭ}駻wZ @3%vߠ$$FŻV>ቔ_I~ӅNUP?#[t8a-f3& �_<>_{X诤#|A&ba~PSC;(J�lpiH'?X}|~[RFq=_A'k$eۣi->52+;G'uYŌ|V<.B̍O(18SDZrFtwv&ti N8[f"Xq,-UH"}!V$nbC})qټH7V㨪PZ"yZ;vc)#j.Ȣ `p{^QOF1G{eK;�esrpz>`3z}l79wF?D@!XGEޚsooҺ pw(}t+(և |>/uܦ+ :n`lMd}bHVltPbW\kqp~;|P6VG(cE2{JwDPAaQ=H- sJC8' ΊNi$f혮>1UPƣn*.)SXH k.kd1o8$cQv RP F0w~+T6SuI%ӦmMRKMQL8lWpI> %)c 3Q: "Ϸ`qy(ў*Z{:H%aƟ<tPo/L|0gpgZ:"  Gtvg!)eL&c4*ɑ$A*S1R2yM #r8gX1<l6r[S6Kj!C^O2=(;SK4�Nd~uvrqe+i'v;sZlC}5I Lj} +5_Nj V!NRX {HkoGI.r$-w~<uh�{z>^j&'>7^''oxv6\<IP&>csfs~H82,)C:J/AK9ށpѣw}S2C:.Ax'yڒ��|�ӟėv Dc'fW䕨@n#Gs{SowXߝ"COC sQTXhܿ?2B>sc}N ~.6+{:utf?ݝF3>Lwl/SwoO/ I!J.A~#6zC?0eQ&}||f7JR!HIXI&Bc"D:5629Ͷ^y>^רNnx:x~QdKT<˖D|JםeT]>fnon֮Ku&AdO n;6ᱎ{ ☓B*"d:n㓏MP59hNNX/Vu_‱c%ov\W�Ͻe8�8 �Ŏ'Lz/S_PqfvhHSOvYE1ԊW6S>pbëWku,ug|/ݷ92)(VL68vHzXiGdh qmФ:a%$SJ!Ʊϑ89EH� G&'U||p4ܤj+ N39-.mtCN~*OUqÁ7p|eb5%}ZX~su*iHL X!Faa>z pOB =) ]ߝ{?siO"M=opԍ%`X9U+%&o.VzD�٥\ԭ�JGnn>pUN׮xް}n?z_?s7_Kb2&\Z''>3RƆ =d\p@z;Ƙ4>=if&A.g$;es6\?;+}7u/o>29sgޓ` (ؔ2\^abkNPy'(�pWF\rfXBWj דt@w_A%&:C`tr{[/ٜPFc條mzf >&g98_y1!F ~m Y>9~#3qS6E ̢4@A&_1sO~�u";CLITTiO cܕv̮ܽU3Ai +x-#,}¾:w0% ~t2!HtGE 3|< 42s&*R~vפl.x36 Jl۟ןc/dĮ> (ȯ8F vI Re \L z&s,-)>Z?T,\@qon@Cd\I홗$'ŀ%V7P8pD&cE),Fdk#Hoc  yIdԲ*KGWmތIlp}#n�[P$YMG)LZ Xxù[םC'tb+ S(ؠ3 O\ʰq+gU: }bm2(3724>(o;+;N0\% RdsAc`W/@HI*P,f:<N8=1{MrDp'n D* !BUe~*�Mc2/ڗ8G}6|vIDY*Gh82 ^m pDc7FuIpj,A,9jT#`6hO%(lܸ@y ŵMmjSԦd TY~=rҁvTRjRZC( -0mA޻P]yO �ĮCw`N8O<Vy⸖: e"·F> "m`XIfV:{)}yz}w37Q $``{w�o.ݼpD_{|yC"ڵ_37bO_< 錴TӜQ_Or�O]Ź*w<ݹ-7EKᔱڛ?٥V/;w� 3BZn/FGWo >KS(Y;vs3/ e7hI=>vV#W!dS)!+obڵb`%ܙrs(WHG+I!{$]7wNR4:驩wRp[$$DJ%&eHH+a n+BCg:8IC"R9 Ko>QU$B<$A$vJM4" (bn/g8p�tOLl쳋zZbrŽǁ}o{XO4MI|pX\G&zzw۹|pCd%i ` rƈO3sQrR#K^ /J, N eBglږ`>`jFa iҙ׬fT*xp]'໧'X@w�Q\,71S\|:hc0[Vxzͷ]v[+6>F5@'k& ݟDbH։xf%~56=UG::{rةݖbŎhf ʌ $OlV@g;}| -w wtf uA Jn|@/в $7Pؐfv*%5b9�X)2JF43lmp")?F&AkU~MLc#d5B!&� >.7=hAvl�py֕!d*Tp ,A͉{%[ܦ6MmjSjJ+ y^�%}� /-:)"QsmT`tB.,2;sj װ>wΔ,' k{9(xbRr@֠(czqJf_x&l9g3_̶ t#\Z% rGn|`ؽ[zj_\tvuρ#}}Cv^ApQKjk,ūUɲA: GۯAT2ȻxzsRih86,_[o0kb;F׹z_͙<Tsdz2v]i'�T"DbvG_zsD/>`\jF 6ه>2eb9` ;bOl`4~x"M\ܥ?10'OLwu�j p3YN@<us:pFM~ksdgO>{;ɍ[Tt%�NOz}by"]N]z|!zݰFZ{܉5s:>51s{`|9Mou݈yG2|UZW˞N- T3d4f`|>ɞe:0>WLkaGz.dof@jQt `CFǦozJP,1# '|pLWK )3jpmRm{ _~eX|F-@i]ZA« 'β)uU̲B'bMmjSSF,3hQW-jʤx\|R_3Jådb5+qV˭?3~o$>_'e_Gv_˧8�\]U[ *Wʳʌ䞮щN|l}8_{[M( h nd@>3{qK\w0?ctch&_F mۅT3/<B"qlv%Q/+-/TZk`?L7_|fkk#J,Eld0HCzxੁp}K_t0vcOeljK�<c˵j�f#t5itWqZU!\NzLP!zake<_ZHa*iO_<9J,fQYw^FӸsߚG]1zVZ W* Ց=c:nsp2w\lLvuM%]+gF&}xRPɗ八UDXqhz2GQd4E,{si][-Ug+Rchcx84ZJmK!1yfy}XS(xqr͵|1sh뜶 6^N}b)1&yShd)̶sZM\[].WK͞lPo0?�3s^m9:.30Ќ #C3x#)[h,VW櫥F`ap00\xb�w?6fcj}eVXkAw_7?.k.n`"<*5֖jkZw_np80\HsNp`_-! s +3-5Z}}RUZ=Hr{YձD^89p0.u3 0*Kg6Lr:pgcK' C<KlƓH ;Zton 0vx\'qܳC*ZQ2}pNǧN*w,AЧAk<emFV_VQUѕ9aa.U6wte;ݽcSoupuV+7M]JYh7kFr]blzRR~XTGB/]"pTNm8:቎\. F]An<|hýX]:+CH(ΡRnKF*tdsݹήlbBG[oGK 5"9KG�=tG-^jlm6ʥc'ѕ]Ou&T 8&#H<z/@Wl9" z-Χz.#}@6;8v M\. W 9A"*)QͰ w)wMmjS&'94zSdKJS YN߯n^*"�-ݣmIF;!HCr>3TtYY!B._~.z~i_yצvy{;/wYZW~])p휊p-@6n_? h4m>֥��|t(ߵwډ5fAv>Ԅ ұ]~n+kSon5+.^>W|zq#w BkK80xӓ5󛫲>qObgsA ]|@.|Jd% 3jF<Wg\] ۽<G_׫!nmqܰ_΢UX][52FH3)z߇F;Y_̡ͭxc{:qGnvi.V�xaz]]<9{1ŝҲSo}󏯄pO}qObꉤgz-K*|f<1}=��$5j>TK–X�`|w??} DGXA/g[xh(xr~sZK4lDӗ}{q)r<$Pu Y@u-Πq7[> q|õK[/}oajUsXC‘Cܭ1W7uBaGtYUCMƧ;G[fݝOSV WB5SZNkKo-e^+J Ԃ+EVЁ[SAN Xp.LF.ڤ~� w:6I:xKW@$MܑG_ZBP{фQͅkUCc-MAyTfCZԴASuQ~yuĖC|]QFx-9(* 0f;J+�md&B+Ky~s}^~jOWV&K(DB3ad?^XhsNfyq4፵<o`rsmE?ա48W9rZMv\m6 篔Ac}pPQvURd*U`C<sί\]-jV.ǧ&ww3N3 G3I_[xG?\ϳa1e3zNQ,\p@bO7V\Zouw8� 6<qӭw'mw9A7>[.�Zn.\+cf۵;J9Ac%藿3]gnmv˛}܆g&-n-|m1Oiݗl�1#Z|JisQڨ7a.tF&;G:W=O Uf?1^kgmsCX=ehD'$q_<,Ai@es| Mϗ_N5ȫc)], �&Њ?*YyBo˸F߰*:*+2>'BX]m6MmjSڴJu9d|,BBTϧ.5+B_̸,ݯ.bq̪-FP+Z{Vw{1=KKoh1Ua/tElIuukWϕnsk uу[\ `,g}"fsߞ{+7"K'ٛ쁻ޡ羵p6~yժo^8%l6Oy홿sKF`�#!3sA΀}k~vǜ}vrݾ.r-y+|,35ܕX!C3)띅b_xzQܠydWaMΐ;onG9_]rƋ.;2Gl[/3on2 \q̔% 6Wў~~㏮Pūū7[gJtBڅ.譗VW#+œ[_q{uVMIq͍f'yݽY�=8]cI{]_.oȑNb9 ?s~r[�q)x=Eͱ&lOk*�v m5g'3jZR-(V`%h1|~@^\}�/}o2O%O>).O0` } K]'_/uj yA`FFFܕ^k=ӛD%J빧殔{|<yR;Zuj.k7~r'~Ƶ/* ;6䧣jw.U\V>4W1f`~s.d3_z?Z^_a=loWWjx'|moTqVٕ"d;yE_8( *sص#²7"M<(a7_Qǝy{M9-4˜ 綮+EcuS;V=u1,+7|~]޾\g{|SʁQ%GौFZg+rpePtfsrwl ΁wtfVŵkQ-^}owdrF#…|joOb7W#![k#w%+!z6Isk.]ttץ3&gNK=c_G':ϟ\o5=J//x"Rcy!%ɱ} X/ٸzaSl,�RX]/?21O&.m5a.8zxFC^+ZOV`\juS$!9WZ?TL}R=ZWwLw70S!Az `p_u7݌`eu(Amtٖ%H:3Hw.Wp6H�MmjS&I2.H7�8--2� !'dj÷* WJS[^]�h <WT#䥍߿DZ67&�jIҧmB/gm=CYDer&Ie&B?t ��k?~2졏yYAW`'?1FǗ^|zI\q U~ŵS_M~z˿{D#ġOܥh$9p tb\xҗlo]E9B?پ+ٕWlB_%A-Y+REE@`1Btfg/Wȁ{+}da;~KtDqqxEɁ0"{,ؐ춇;g6deWs<j|uV^$zou6nJAgY+'64w?͒ ϽyI^xma{cO毖]3٠+[l`+`~H8g~EXkW]9S%i0w x* o}Je+Բ&[/]<)Z@O·&B GG5ڂjxF"9LOl V@''@S@SzwQ'(HaX}#2@R)'_[ǝlՓ_H A-qAr oM X_͖"ߡ\<YZOxv(*UUf�wdg\.^xzK>8fuCrq>pD7҈iZG3W- _>|OzxtWp~}7݂dk2-oF t֡c$\ZHM`[T ϡ묏.z I kD=uꍵ=.=^_Bl b4ute]|J}╕f\fTg%Rʹ-3<G@L6@^-JT.5zqŁjgSk-vf�4,AզF7Yl`~}$6+OYF}x7^XZ[bHP-w6::Zl0M8ZF1,ojw^[5"`+.;7s ]3 i-;bȹ $8r8Wp*3WmWîkJWmj6"9}s6sZY_F%B�_ԪormU6U R:r$Xǥzi.8oq}B/210qWo^@w i5㫛3zbLh`Dۧhp@z&%QBR+I"dՆI-Wl QAQC!F0³L7̓Syo"윞R%:6:tK_U\4mjSԦ6a¾=r(1G.�,p)N.Bچ[naD8O"GGoH2n5/뻊_=Jf U#Ny?IZMw=/Ξ,𕀂&HC< /> e-BlOϫ?ZT-:*g<sGg6*KOnqonGVͣk2G@mM# b ;a h/,n,])/{׃Nm,^�8,; ]*4' �0~Þ|_X#QA0x/tm#Dj>?bC:Ԓ{U1Bpש7kΝ<7S=ɢ xzBE ryu,V]am*52I8&/ki?9[$PN s@MǟԻObfݍ[_.?7ƞ!yV�pm"M]=YDJM8BB}sKԡ#޺ F]+ǧ9|*7<r5b1'�<[Wj~cVU}e\ʎJ_٥P欌;3ཹׯ-(|�PiBV_>SJykI> ( Ě?u֗@c^7W; fszZ{4BýXf=D,#}=C`Ɍ'Qc9Ө@.mq)� W[ K4˰2,SN"K[ku0,A$2gX)|6M p�ZⱾ]k;6ed}X31<N/W %oE)ܨҙMw *)ߣXBhFX, :3Ε|Ō K%-&~9Zq12ٝ: qj.vuI1Yqktg/P$듖$8[IzoG14p4»AyPtP h% K4/41nj$3(>@PU+s1J8!r#VskTq'$�Fr۔DOn's^:Ì)S;iMmxN)h9{ sIƗ$7xPR�eJ2̸ 57Wm`Sު8_ U@Sp3q:~vi,[J]`僛#wy JrU(H[ϭ^?4d.v/^κp[ϯ3U ;Bg-i$-q%x!_pA,\s`w=Z9V]7Ҭ3^�# X50ZEZ/~qĎ(ޢ$C +zsQk $'l&wϽY'mЩٸrvΜ~c󆞁z}G|[ooN^/I]Qʇ'^ ߞoCCvqGx-^zs6jkOEk9&c7*[ńSJt ׫NXQ j^ }@JbGfd}~J)=3:[lwp5W:=JZ6`\8Y.5]o@8{z5 ʸXoԔ6^sbi|MϷlnlp~$q(\>W]= I~183d!&:ƚ{��2̿]ҞC81B0Z-7/)GLkIHJkP,!Q[ssGMf2.ԠSo~+J~7GV.D+IkT9OdwO> t.{fyh3oW{4?H2,G�XvPtnt �:BkOg]9!Yѿ;<VZY[(צ`=ֆ331pNI< },b*n1]IeNm/KF#LsC;LK5*9p4bx2.ag.KeQSt[ޅ F5>;ˑJ8лLczcf ,G` F 4݀/( ߃]c*ӍY_?<jޏiFv33X Vgjve e*`SA?UY#xz)>ȑG[6ڒ| '_/l7`E~,?(M&��󗪯spƫ-}.B�#D6~ks twXH:UBы7VCz!]uA_:+,1Fiq_+ɲ] {5.fJ0tpp\kroٵ{bO<[.\+_<j`5K1|w*Z:B?.(.97(%@!KGxnP~ �Kg7EV܉ᵋlo:@s{jEσ> e<W1Ղ}km>_毖Oϧ~.|lac+O/�å<:V9<mI@3�r_=2pœM&Bpm*…cNZ-7܁ |c2fV({ڞXa$nd)m4ݎE&렼je >R(90fSDZi^<Y RЉ$-ΞpԸ)R;ֺ**LJ/ԪNcE9t;,.,@;m'"}SRqQ҃T�T^`.?BӪ.9xŎ̴$`S{vLJɍMuz>��sϓxzr; Z|J" p6Vk[.x2=M`17THun__HKa'&J)=8]9_apĒbr٩1ʻO 8jj(Bq 2ZWϧ@WT*s M_:M_(;2,,ən1ͱIKڿK+'9ag s'<o*ӆŬM+Kf#�[6cϽL6A{N\kJFKzZ-9DϔexϽ t"%Dp44.T4'@]%"\̺e{ 1#.th�b=;˰.i_bS~YV`D &IGEO;I`?Ab9眇!0`G?�XT,,+3dqZa0k0a,2aaUHaG ˰  pq@O& 2LAl&A&#DOX7U'�.~ ,7ķEEZՂV Z! ppθ /!��D *`,#x �E77gn爧wߛoOٶ蟜K.anu~MVuQiьuU+SMca~Rz^=CѕB�dSwa[]uzlΞX ' /^^NI~d^�_v˝gfO,:ѳ}й3`K]c038N8ˍ=_vεW'Xw M6{jrf=k4�WkSQt]:U; .")g},m4̷÷ 籑w~`Pt:(_ޢ8;F$ljnOq .T*[KˏeatJ+D֗paZՂeoei°s,ZrL� (c]z[ڮ<ƭnyɓгK ڪ]{|P|suNs⺵|ŻU(^P޹և/lڢo?�ԯ=s|.lm4Wmiqҵ [eʲ PiqȐ<}<!Y|WY [ax AOlK]={|m<J# `Ql ?bܦh/-ӱ]ŕSƟq6WYQK/.W+8k;njR:HEv-NӓOk3_m 6{oJw)��콩wrY 9|IںxjLo\;X:ElEG:g$/F{81Պ xˡI 0YXV1WQ{o�KM7XXZ]}{/\ee0P._8169I( dlSkq.lVeݹBUy!ьtuJMm&gzw+7`2\[.Wt!hYvaWZo,\u;sB^ =N-h,`d6= Dj 1y6xTͅk%4=HP%"fCɣ^}htTmﮛ /zJT];K 6#HT‹ʺ\]��)Y{CPw|1M=Qo*EU@&(.d(lo9c?!0]Q䢿f�!ܭRn 0(4hqh\B<qKM ftH<%\pẑ0:;kmjK̭YM9Pl,T-AdX _A]ҩs{+]# 2T&飿�0n%FYb6%ɄG8`ßccVZYѿ:p]HӞ{Wdڦ|cŜ1L-7O_;z==0\ή-5@YMk/v{o̧X [6ъҤ<mDe�CΞD:JjO)&�0O~f*خ5d2sSK*_�]QJ -W4xG s|ꅒ̰CG{f7WQ3YvC#x7V\|u �-L!Ӿq_ a4<Qvb}LˇحJP@@YPe$' l*Zvt ṓM}`93ooxx W\Xq4z*vHRjϮ-Vt3X>P]2B]O �+GJ>C<D]a{hB]lYDDf[KsH�8poM^{zC)B.!�DuH2mJ]ŊDIF|B: *o5uuHkjŷrs' (lp$"MԔ9u,ԨΔ{."�\xg\-X0<䠱]u4%y0ZjzpERz>=܉;uJF':ÚBz~b7cO;ޑi 0 :*U`QM|EL;lQn%#=�eg~Rw_~bsr[>IF&:&%u{RΝXNdžiH"f2PEㅕdl &4Zi!7"ke;-vdKEdRw(&kYt%`J3Ɓ!t@DHOdH_pD54bel7Qj+H��]=ޜx 8 6Q.Y5geY}L}U9 gUV GMP㨏,N0!x,TGݻFsWQTvB &z>'CEwlIu<㶲P0S}RmPV�D֪B21WcHIMNibJ & $XMԃ#5 DTbejXziwK`džV1E4(6Bv `[>O<]Am@DI!W4<lŎ*FA!N)� Xqw'0`[8F{Q#Σ@y z@a xDiSGF)`A`VwѿޘkSn$`W's͈Z,Z*7ڶǧg_<ACmE"tDKUWg)v$'k?3Gт(n5ӹN9֨Rõ_jvm]Z9']/ЌXhQ;~'QMlH]4Zb 0TlX\|Օ\ zt_y<g.//T][[GSlѹ2|;Ҟ|yCؑ*O jQ(>{Wjop0�SuD~ߔEgYo0EITrx2&l>lX]E zfsv Gk)]6b oVЅ_$';qH ցGϼgjljТ_]#4/@TTJYӫxS̕d 1�J XȪut�� nӯ/V? ­Fw=91ݤk}閾IZxҧ;2 Qp2ɒkϩՖ.9iNOK nƾ7}7¾<tE'-lX�ӫ@zJTkZ@HWKa̢IT*,Jr6x 3.{�`kw.X.5</WR~֬A{mrS|V_[c}z]r|o~_ 02yFޒdg>79E] �+&D3qlbzRֲ/Ok*yB|7n#zKۊ1QPbiU8O5_vT$mMi(oq'xrz.{J @nRW` l"&I &-BO8ln.چ?`a@my=͙`Dہ߄ Jb8ieV+#D ŷŪy[x4n c ,dqg2p1pC06�0{Ggi+x-G10ԏ6ljXJaG& Ni>[W/k?u39>9Tv㷢_\rO@ v$VX`2. .yy2yt`~E@[iQ ,teU/]3}LN-~QgotGcf/Vj\ .Y*o5;U)pl6A47ؑ=C_6\.>`�{#" ċ3pյjú3[hÀݏ_^{vE9ٞliX!ȍL o؁N";ߒ,Z� -R3X3߃4$\)QՙI̠+j�nN͈&';:} PDX_<F8ieI2cwD^X5 LdbÀowNx9b-!Df=7^,Ҽ)ءcn;{|gJk 1tGP茣!v{)Z=4~'?V+a.˗ %*܌K!CAƗ@y:N}\k|n{*ܾ7ðìO {^wŌXBC-sP{0#-$iOl$?.xMkKkeW]H~ubgf-l k񞩽'^YƏMw@�On\Tsk\-l磑¬O>Rz5:ʋr:f X<3T„r)o{ˡL59Q=1?+`:qMZk;ַ =qKg6]`�seIUtrvS|-|I֚RVN[/�9Bk��jfrW6ZDi\o1v.ns9m5*8=zK9zS{qې/_#ۨ&-]ҹ$+k2\L/~ =ZѸ 4Zev_5Q줶YGANsպLLv!'HTq&lߓ8g=۔ЯG3r=.>0`!ΐsْ`Y#ǁY<P`aPEl% [z>cf<ʙ�BZ8�8۹ .M,$chP[x4t1rً,` 83P+Da`g, `Fmfbu�"0AK1oIܦ.Z<YHSBIyL{).(TPؠHғWVCsTg{$ ]@}A[+sWC毕~~tYlW8W͆PXq8/^nu9t!sʻZTBd^aue75N@r9ZkjMBmŝ�0{Hbm|�6 Z56Wgujْ).=.[x{{t{vRfWp}tF`���IDAT GTzHH^s a:Gg(N*o6p^3�܍mm6SK70R$XeH*vl貱3]9V^sN Aw ۩*X@)nr �nshc(FIL',\ܼHGA}o^;|H ܺjCm4lmTrܡ19R.;! 8rlȓZ}r;r a{x<Cx0zA|bs JM"!IZ!#?ݠK[l =ߵYw^i(|}s0ǁ/~'#p]}?éףq]zxĆsbwF 1O|8!eUD߬ vJnm`ڬDX4-A+Pb}rtdpy Yb6p 圻1[Ft,*K&X_V)%Fv$AQ݄[[mz\t;r8 Jkw?2aEt38ROz<9G=VmUj ᜳj*hgSf3R l%\3,u>R@؀@Vizxi ?Y.8y6\`=wAEv"dJ2n^. }�J'w 7)*>{k7nr? ;.^ʢ 29 UB#ϛI途f @\,!cDvي!< MPm *30 *ϖE9oZn7CƱfƣh"` `hfK\!dd Ze",DO0�x 3Eܗ�0` }.m߶p%HhlnS~<(tqxN8,)!@"�ϗ䡌@yW<հ_ oQ:r2D#DFt3:B8 W@"wA.@ }w�0C??-CR`(^47;[Y?IR2P_�lc5uvg16 Jt!ws`WX]J!Z^Lu' ubK@תaJ%@O,`ڕؠ/!?toX\3n+1hB89_RSuߐ<gW<zhqέ&;K$ _#E+B�U=:30S9q)BZi!I!!Y a7XR�DNR ;F x@mn@$8*ܩ*]Ku*Q:v!L8{ |BCH>eS. 9�/oy_O|!০x&`HR(EY9 !qJ}$!I`–4J¾T+DRx TAA2=†R8AkCp~ԅ5-x2̩4:}%, FUEqAp8:7Vb6 `|PZƚfQQd oHaU( =Ej2Ŝ(U<cJևBcTUFfŇM(=nFicǵq:H:\]-U\ f?73p1=7Å!w݈ 1H($l 2ߣ! MI);Y,A@@}>|V%4st+b3 G�"ѷRjҊWLcHPKi<Ҭӓtv}ч.׾ًj<og/bfh-]{z\_ըsW7 <;Y+[ �dH|@N0~\.N-S8zԤVn d{ej�ɁVq' Y}C4+ӆWG|. H0{ qp1%XA.%ȑ%e#C@"� Qd  TOڲ` @F4[m$nFPQaXTߠ)\R!%Ro>V+rt4c,2AdFIb< 0 [hzQ5jF֨ZzZVjJVWZVkzZ|[^k ym47~CVZ!C!!\CC90 D?@B؂Pfl4fj6ZFS^VѬJV T,>TjjZ5V֛Ռ Z- lA1�D?Ʋb;͑⇁mjMBziЅ] XeRN ]�˚[5!<Wqմ$SV%r^H]KL+D>_R~#C}n`yEj:�H3~| /+?bǤU]<:( ?FB/0 I0G4lصl #ƆdZL xlq9Z VJmC!p`﵋,SW3 j0kĠUtn][7!9`3𭗖z)>᱙N'‰W6!k<px'X :⽦\_\A-N:6@Æ+B o8YpĮ7�Y�2EdA#WMRaj:uv�iTPȻ)A\I"oGq !2ق-`6̛Nnx薻2&F':GjWZ! $!!�ѧ@jT#T_H _@V% x*%gy5bm2Kŗn,6zꞘ e2OQd 5dRSQZMQ|0Zև)UzHl$O|cյ18x-:0♍V 6Gݹ]s8n6³7hS@!HNKJ:=˅Ĩm )%306Pp"Cc4Lg}P3ƀ]7G}DT�vg=)t H à deZڨw>uFOi5ܕ-p⦋L^t� =) &9v)qPiI[8J _Ou? vf$ X=N,A0`X.D~!"hJa�k.lP ^ƩX#c(l(&[B"dX[ RXGn nRB̓=H n]9=6w l> lr~I< ؍U䱘s7ry&lV+ x3p9a*R~a s,Xa' g+6d<q;6@@xV8B&X*HG>G<�U%JWIl a3x)y :`Xv@>@-h%K0`!aV&m Mm'+jM=Dt!(0<&$)tLpC." R'$ǕP!DfвERX Ӈ:?+{<ƾ]X*RG= ((^z[˥, 0 !҆sp 9rԌ  boRd�9�3I}Yn_0M4ʌvyOKsEX$1,z,?˺xۋ ]氺84V<68|*h ᵗAaLk\(TI*d'*ΆZ AeO^gwБ/@ܕ@A0ۊZo Nȿyj#8&�ד$a)߁!x|.sIz-|ۋ_7gϼ6 }|Ծ'@C-Bt`gzZGwnjBiq xwHp G0r3GܠV;M(h^aoS;, Ra WuR}"ט=�jK@BaV )mV  &MY_K&cKՕEg}=bv3�p/܉uKL8xzYu%l,rn|XBk%{rP;B9jtG0ֱ>@Oyb$h 0*9osyn}V%>\]N-F# R8Rx3$aOCxڹ 8W^`cQڰ(tܧ6M�A͢AuTl t'[ԨN0HZJ?g& &SO-vda *7e'Ġp4|\eU7#b) ) mwTP^ 7)m ]&�JRAPNXr~mq=H4e$[SHr7…fY4[MHdle00ca6a?FYz-[ZZWJV*j\)oU[Z^z^kjz٨7Ͱ;arnȣO}�f@rl&d3\6frL62 lѫ럶300a6e,2A d p�Σ!h?ql6zZVjRVJU.+rRT*5Az]fl6f+P f<b0Inc1yOL>)M;pR:r{b\d#gW~\R ױ!$4hd,L�6 �.rjx�}wdsX|w׉z% Vr+xx=Bt8yA{|'n(D!�7W pmĔ#Յ%1֏7"> ;1RC#.iuA A]({OzsVδ{g3m3} =�L\-/)Ywώ3{%]Jn4_?t?y);4J+buz18\ƒ^ am|50O4Цd9g9֙Nw" % [ lq BĎpLT�'e_f`4?wQ.1�(tf|5Pu;Ai'Twj(E;\PKE},$X~nwo5ٗtC{Ith7.[$=-w�rGM� pT͔DFw9Oq @X;jo Ch-P�]I/ !;v Ǻ؂zݯ]}s &Ec0l:.P�L*ɠ6,�3J&o4dU@ZKs{)y !$) BP002h">7I<F_w?dOd 쥭rayV woՌV= b 43)0SNsm !V 3$Ei˨pTY}>(!j ,Q&Z`P\>9{yKk'*$dˈ7E :(bc}H8r42; GCR.6vL.,T6Lt 9ً% kK Z}ș}RMmOUd-EkT͊NMIv�,GWpC1l 1V(f!iWE_^S~1J {%B Lc j|@ycQUvϚToqi31҈S7q v7.A"D#Dy7W>wQ?2`%HĨ,rv`Lmc;O!D,hH9n�yZ9ajWap;zy<dee� [IjJԒ@ 0UTVH&�xewP\dʱKc!#bb\"f _ADdk$XA�xM2dZM3�, &cP?jIT[:wOY^m?M?Md`"Sa1^53E|nO_~Nt|8wcu Æ& W;~ؔ7�ӓg0�NW_f|1S);$;WϖS>BR>T@} ;�4,8w�gsXay.{&oC׹bݽ `[vi"fܥJY:݌'oH진Jg13K<|@bjOٿ?~g8zڊsXm|!S)7˛MB>�kx/��{OxwBi[4\sɅ]]Ov߈IK.64P|X�)z+vfف~^*Ҷj%wn}liM//T˗f+{ojYvF[Rʾx6s@GW~}Bs,?bW�!utmjS2E#vٽK0W_iH̚호l@FeE7̠l(+&¿0�A:e2 Fi[ע)�g\To �?:'偯ߌsk~#θ)!,dXhQ h@m%gJd%vlZB?dl%v$<M *xy{3gMmA{pe7XAӉs?x$Rn -1N&)eRv9`wfnc,ks*b9Dѩb�Ɲh1$EJM.-+0F_ZF&EH ZQGw=_[=EuPI 8۽43\E01EZw}FׄE$~3> z^ښ4w|Ԗ믘-<Xp>΀cHx|�hNx% ?Bc#iybivaK:.`N?.eE46`eFX4k}CFT[̡k; ه%qsY[Վ.;B'eH׭Zx'?754#ŎleI:jػ67#iX⼭@F]yx"].5\ϣN7',�bV4ּ]p!$i<^(U+M- v+Qi|(Y;wBH9hLڕB5So8l֖k+ 5ܼgn}0_ȤIg^RީMkW&܏ $ᘨoTے^f9TRSN_*�U+H5lB]E5�*!uJv9G@{sD[eO#&NE`jyj|W\T?ҵ%[!R׳^.!)/{/uteKuжJ+vxZbI. BC7pޙ]KX;|K%" ^i&~MQu]Kdﺛ'N=L߉:Les> 1p0uپ\]�@j'F"E.:0~R8F)c]l9��a6MN)[a%Ea�Z#&cql�$ 9ii(ݭ;x8]ҵ38,p$g!�T\F <Hxo#ˁ3 �aB|dU A C|)*`�Ev%7˱T]aT,E>/8%ah{�a4Tx| lJFU两Qj̋n+_gxdIDc‰xL/ŀ=[_uY*Ez"@ϔ3 r>f^B h6zsҚXV  N^{yErِ7s[MB  `>8z ,U h l r<5 e{NJ: oEq�_:pk/g oYG�c/ �z0"j_"l^o2g &$ lŝ8Tt†fВWg��ؑ{  E aҿqQqowgT>dFqD?QFRNA.8�|M"E`JՓP0 r&$bNbc/+FpŅ5$.;88\-b-}q{ ɫr[pCr@Ðde ]ϟFH �1TA[RBW"BQᡄiWfBPQ(n@▚jpɽ L~Ĝ,t90|�0>#&'0XɔqZA�́B!&7ՋB13<^4|<z=JUO|w~L*ᘨ)6m4}JT AG*=ַ$*ʁrIN|Rycu{ΝXlln%mVBZOG&A%Qњr=*- +LTP-1cː%hSSNBw(&/-K*3Ɓo9S-|GV7(C.x}u`d*5\k]# }$<$N!?Kc/L1媉dS8.ފ.mWjp0{T 7V_ʼnW��o�b8r-Ie'N0|g¶;?܀3`5b00\pI`W�:8zM GM}"kOz=3MP( JĒPg"& $ڃădvҩkPHalmA1ꍲXfp4U"unx T-|[9N#$MBa JxS آs0-aa =ѽ(ajZMAFhTգK~*6ˀ'Ne+́jJZATU⣃8% IlXUf,`A2H'Mm+@U%㑘&vhA2fkV[*!OpnƺJj.Jrcs5^z9bu 88|w4o֟[[vڽA~7$,a?虌6?ܧa.ܮO ]>C7B!(([)ቂE~AJb >Pj^>].J#N1 T&k[)dԕ-lߑ8B?LmuN7(AtAܤʫ-S#O*Ih3�ьZZ7JWֽPl+.k .,9̀DRq|nѱ̗3A^h/iJ]QWR! <e)p@ GDſ~3�x.;pؽV0+ӹ>o8vH;_ 0{Uvxd|w?:jCk܏ᦧ[~@D R(^�lzտ 6u/An>)'\ Q:w&?WHd ]�r$)"D&@uM!4(8_ � ė'm5`ՙXV ^NqC?(fr'/ *&1C'|@!qA&_2vv=7!)a'173Y6J +1Hfx<��ZK?rŲ'7CÐykh>Kp;쉚ĩ-G5 ! GjhGHFw˜rdl͑QdO~$4Ŋ)Ԍ?W��0{z_ϭVkL՜Cip:>ݗS+ևi`L׿Յ>j!]�lUۨ|BI@^qz!__u:X;<?4BGvbƙY4[ pLv8 AiI6uWOn0.{B8X.,AIْbwwv\! J_`}F/C�I'"! t%٦> !jtf1i1ZR-- 3 GMp A'O=H$R-Dnp "_�be5�A&я qaaÐ7Z.ZJZZQo4jF_Flf<_Xj�aX*#M�!0w)8*z^PkTjV*j^5"DFlpZE_΀ "0d l2, Ax9!! mԦw#HB:q Sۆ�"D-%B(R CZ Rm J\!PjPƗA425 Ć9f= ly6[_Wgnk;ޗ-+/s 4cCAfA?܅%?B戶IGٷ`1B(^=Çarq ;_!D9RAi_㟚=V́jTfljP7=xb 򛱁* WvNft:k-UO6c0~<��3K `=SCcETP&8pOi�ѱ rȈہ='>3atsƞ< S9dI_0G ֊Z Q ј蹽OW/gm4W`wqa!`}t"g ;=g.&.uj]qzNC]zo(G<c!D/; N6f �ፆq8ڪ=}y7BY:tH#Bze`.8ԡ|5BR�VE-1`�`Ϲ<8RܧYH@vH>p?l%-5EWphU؁K h hgw�m|⋻g%?R0ڡ=~0|;@>Olaj@jc)BPKC:= pte_B� !JaF5$BP LǴs++]=_JRӛa+axuIRu!ٖ(A$8\x4 BB48E8Xm�KƔEDR81S\�єbFa�pH&T8F 7w@⽏rP#CBEiOFlBfAg-5ᘊm "C]@z]>vpZ(Kk wYkN-خ '#C{+8cPo>-qmJ8fsq@-m>:*br*6S{u€ Abo G ;Pr.O%YӄCD=OWAfehTx7kQ M8"P#OfJoK%#ԨMkp Ma9gb_oU84zð[Vl[zZ+rRV+ѵZjrom4\heĂA㶡ޖ^&I\F 18kQVlhxZOh6V-9 e2A6A6�Tq2ֆM~c6mğYY76\`:ŷI̗OL{gc_E 'f>37r_vdN~=:v{�o:z7_\MLN<G~j{g~u76Ycv#kV0WL^࢈Ϯl+nT@("Z]֝Q;2O|n׶| ӑ'KҾý}s8lM.:wHt}}|ycm,~賻~3[N@c )z#?0:xEBpzĤkɷ?8ѝtT$jծ܃ON<ቤIt}w znX^xjPgOOrczs8np/;%m9nO/[M,vfPnJ v!t׃OL?ghKs><0\߶p_6SoRU[i2fKt՛l14Zx@Ot'r٩08 7Z]/3:S,N6McwUx f2ٸjntomV7Fh4fިzo*uYȷZ#=Sf+:K,s^eECqd fla4~՗?`bwN d F g�jնZ- FJZFl6Zf6yƙCƩ QNCFlYp~H@i~aPIP"GKV5Q9V k�TV;�@@e�EmtB쒱O~E2d]b � ?78}O.{$8W}~Q "gީt룿0306g >|= !JdOΫsߞ</>ԙ!Cw_E/+~mP^<4ڲvUXq['^}llbo'C_/f~ں|Ї'~ݗՅY\mdB K6kCU7B7�| ڶ?u@PJ헗!^{nS-& lyi 3#Sŝ|7^-}7ދF'6`c_޵Dz+ح ?9<6!Me]x#EYŝdz*I!!YYLL|omAr�`y?ڋyp#?8*(שrCqxᏍAQb�y6D6TR `#Ɏ `HN>}'O$=hj�S:?O޽72G@ E(j5v+[M�MVZtyn@%=j<}  aC+RDC- p_Ogwgs % z!h{-v$ghŽN{N  ǩ}w`'>3}mHutezd$ =_?q5竌W%j8 3' bN}m"W>Q#G ሆz>5FΫ Փ [ѻ-K 6IWϗՖXU^YԒ_rTl `[< t<޷{^4�5(%hL#l~p~LD4$E"F7^{׾}wg%GfDxDFs߫PaNݺ73OGD#dG\$nXǭa!8ǹ} LP._~sǠgck :^ �ַvmA#@0$[z!7/$̹�xڤcE�-[+)IF :yvq\p ?�lC\ ;^$n=UtQ<D$[o&M7.z)L߾>pbqz ?KFs0Jza;';3OEb9W hvv4Ga/m!s _x>￯^{TW04S/|il4pa,#AGM 6x?.jG=E4ގ睘}r.MGE EfMkłO֮e}37.9I,3M0![nb'g|6][5-+)͑meQEge6g|6vf|63sYgyQeQYo9�a/ˆK 8c;~?t�I$I$I/ԪPPegy6˳i6ftZ=f+*%A !w'۾)^uE^m *&A >]\~Cd+k;mMgsXK]~0FPKhKJVǟ~a+y_7.wE)?O<0sHK:o/4N&heSamq !s‘�.COakj8z!g.©]kxnt}sȁ~-G7yy+ӏ?Օ~sz񁗀 +l[ ]ʿsc�9po=�ŏ9۹,>h.ݮKЎ k>3J?O|9iOW#V%O bjwO'wL�S&ɰ6>6ݘCcТb bqLGdbW}}b?O-̧h|`ƻ^~qo6zy?03\$h9Rt-B\X#@HS?7/z/O{~/_X^MYV>?cѥO#;aaG{d !FÉA!BMt}j-wsD5 W=O!m + GRyەǼڏ'��@4Ԫ2 O>?OpQe ݋K.<h< gVGxS%]mDsza~謐C\?ҏӝ;55XGx2EB7vxpI>K_|n)-<?4}45�^xgW[/O.+)_ۏDOT6[CՆU[>`p髱 ;2nBtt�C>͋<Wޘ}sO,s9u3{Mƥ5 |�iowRcY8krTr@T^a}tp^Ej ; }+Fbs*�p$ue$I>ӼlV=G%Tٺ7~ǩ`mw;�hu=w-2y"a9T <7~oDϷ.vga^J|'/<#<Tk|du<{|D˜WsE!!~%(s"Ԍgi3l+{+B%Akd "-`+`)djPƠ<ǪnaݤjYO}3l0A}noyflel:ͲYlgYϊ"+,sU%i[Q`Ue%i" rțu:N~#M7 R?WVkRnt6L=t2M&tgyY*UjjXwۻ -"lku 7(P#]`TbR|LxYn+t_ψ|_ÿ3_^ 9b!wv<ƕ__/X[յeo??^==1?ٍoُ/g:O-ߞ�}t1ǽڃQ3 v}pU3߾?qI*~o>w}nݿ9k{Z쇿L!`m�mSR@n#w}K{Ͼ WןzϷޘ)jS£}S ٝ77Dn`s.. Ԏpl>: [?|qh:ouu P>_}Z�ğ ϽY0ĬϬ|ߏͦ7w*>i" lsvY0<}9FL_3.f^1γ>'Ϝ_{p/L_Սђ}{ȧ+XB3k/v(Ǘo={tGF߱?H72W)"6dy%[nsoknMqX៸3m k.ݞ0[7vkEޞ4A2>5@l2f>Bmt-s 7O'G\}(.=m{zeEL] <wk^=s~Oܽ8"2Jo|[݆募ZKgֶN o ߺ-uj{K@z}gx~9V ,_$6o8FHD\n&?uv٥oSIBPsW5}ͣ?Ծ~ )޸|o?~;G{B"#_fيy7i :jv8)L Yޫ/ NS c+I&qNt SgO^lVkN=AG?g/D)WG]8@H|χNnl _*u9"Ҋ|[}5m tRtSo^>Yh$]z!DpN@( }ʑ]jl2SLyP;I3g/,woOG$؜fZfsVA wXZ<X]]K~uj T<کs=G6" K;ǣOoӤ ' m-׷ܢވn DF+百%uUfk�Z֊4Zi"P$]'2Kp ds{|{exzCqw=ooSݼ;8r2V5-}V礔�QRJ AvX*I[SW?0~۾#AbGWyWLHquxslD ?[+5?{f7y#wjRr<j4'߿Ɏ'VYԏW| o??6sm ~?{o(eq~f\&?t̙{nNo]ܺ2f..85CU @�[  6"�G߽ kpA}`lmgLݚ޽1kyrp3N?tH9R^c 73QÊK 6ȱl'_X^9m=Goݚ޻9 {eԼU)E/ەVnZsOMW@]^y{mƭ D#6+|+õn:;"<>{m[x_}mٽ[3D<5<9K+0}6s<8M}5צ.Yk7Gv7wV7B_i[nqnw;{zi3G'ύN]<5kp1,:dD#S?y}/?[ZN~?ttP<3{vt6Q:t`ЫVᱨe- ]O8O1?Di͠ݶ0�<O_΃۳|e-9qf8>ܘdBNAD 5HyQG"Сk/6IĬ5e6 W 3K]?skG?c?llrTn83:9<5Z;GĽW~OW|8#v=Ȧre=]]ON/=>װܼ|WǢભm G˦jo;vw٥íA-=3!4N \rs{kQDQ8ypw:6rfaAa y8�P|y_瑠6ۛH7VC^g0DE,8 ș97$ B@|i3ōj�gPV\BtZ"AhQ!<W+g/xc[F;AqRJ>]UQ'}RB{d{b셕`/?RV7BgCzB|;^^ʙ>߿;Q]}Od"HwOK\_|fmۓo|27.nnb-><brX-'+Z.$sqq�؞).(9Jym +1El'\y=:ᇾt\Q1>(Wti5YZNY |cdOVT-Em*g|m[%pwif&e{1$7[سˆAt[ AM{)st x>0o3H,W`Esqy%m&=ݨU`̰1 0(Boi"kZD�gI0JUNTZe8G�5pj T6S@pM8"P ⏠9gq=B:8KZk{2ޣlG�Ѐ\]iP~) bYj2I=(! �m,\19vwx&:8T>t��=Q3wQJ̓9zkG'Z_L{O_{xcW>ǹ#tG؟F?O_/~lNQsp-ԿoC;f?Ot_6ZOg;~7n޾uA{wfk۶lk6"V83a_Ow'T\|f3ߖl__Rw[v3}?Xe(щӣe߃,7[@Z]OW>>vᩕ֩{mk}:p;f`({N˟hDߺKs,,-'.^e^gG[˶N N =kq߻{pI}|Ǹ7|λFc_;h׮~`wO<kϾ3ZscryZ}˗aT<tZ.Iݺ:>qf{�[yfkSn]=lۿ{a{rBl+Aq}oӣk@(_Ve~~yEty5]m@fD4Nuvߞ1~?jV:)Z)ZDtI: |:7tSwR(y[x)ޏZ�bG�h Ȉ-_F|a#+k,Vﭔb*tg-)FƢ`5� �" $� mP;YǫH1*3BEMsBH;@0l€Lj(bwЈ�Zk�%oF"U ,Q )ReRtQ@"!!6M#;/oǮ&Co훓Ɨm!ߨ}v YŗjbaUfpnh}]+XhJIh$ٕ΍}o^}e-__Rg;~̇Ix^Nu_o?p86܆V`Ԣ^f. ԿGoMީ,O_{V j(ӥ[ZVEm"pǶ_;UEx?t>.CakC~[ h,ً][S om5@�?wώc�vVW33}mߛ}nB6V2 ݝ۾s !B:Ջ4l|5D=괣h/~r[ߘsˊB&X۳ޝP' ؾO~svWw؏ЋW~w[Hsd<:dVij= l|@#ߐ†en'!sy?MF3QwB?Śɳ,\>VÏߝV'X>bͰMKdϟ b~}0u=/IҜ{ZWܾ>{7Qsb!?.X?U[GD䌘OWK݀$1Do5mX gmVGwͣ !=(�!d6}ぶY.dfāqlSt!�kr ~mmk ?n/Φ_ߥ޾5/?@Z'&?}fj;jqQԋ&فdqTw'qa"Gc "ׯ|ieHk_&*6y{2�Xyh|g/B$}p.fq)?B! l4ӡFýl xy &g%Mv7!>3FZlRa9G+`c|M :LL(ft3LY  Qk$B !aUQD$"ЀTCQ  �!PJQJd(!ɁH r`VYQNrӬMlϦtei>2ת UVHZ@RDꍾd%iAաU$? R$Du1�T BQ�JD)@"H| @hB"ԕr$��(E uPW+RCI�B$ depjy F+L�g !H46kgd/  ЉPA�@@�%UR "Uv Q &HdJVTt]5\kZ_#$$ Ah jSr+Ye=՞\!j�TzÅAyP*(HB$'TDZ"/i>G<2@$DHR L$0"RDHզ]poնtJGX Ӎf~_;a~~;Y[\[el2t=nJkuqv.i AY_ a8` 'M뀸Gݜ6>$S:7C{|ZRךɕ{vd҅gg7tKo^9zEρA G<B̏p ;mg7gws_<C+7>d 8c|,+G+_Hj^x+\Xsw?mR՗_?:ߺ6֤g. m!"$8)o{+{|(o^9-*bMb�6Yfj3s `yb+\oC/܍{zpHw?g }6xC+|G&Լl) Yۘs$怗H}Ơvo_#PKOw4\"erIP8%{L^8y+t/tR({^QGDҵ7_}xtfp3 kR;ǽ#L}n޻9`i͔*Y߾Nb6?0B8�@sf@lpW[#$8ң@q%wj?~e?TpqkoGbW"ܻ5m>:\zڷR !=(XK$9ǾE[[~g\†hY@#KysG(ۓ/xLdkSOgY|~n3ĭ8E`Y իz 96tIE[׎fkǃ38>w"A10=y>�Lʗ>me_nc$XKʹcP?5d<G@"`}Ȫ.b 2]AΑx3LFxs5{w2&B-C4Wu\H)L|Z;;-&N3}9ȿʨ'D]=w�u�z-ac@kҊTUIyBElfy6˳,UY*4i"Uˈ+e*v.U&pD%4 (]QUT^m%\EUR̬*)gV0!C6]=ED tXnfg-/%D|Y֪ˣ|<U zPؓ@Ӓa/4Yj9KssQ6N|Aj 롬%h MZSY8$NlZdYY,*@HJ9r D(Du.u}5"[4k 1=7kx7/ u܌fkhaȖ;uueu64Kc|=([ ?[:n5g _jFbٴ5JIRS&53ݬOo+W9=RFy4u@p_~QDP@Lĭtv]y6m V`<Ō+_}o~,|[mf;XzwfuKq)En MfcE�Њ3_}kƈ9ӷskęK SqŠ�D~Q~;??_'d1vpCg\$2wNm~4l^{~^=|6_:gcKG1fdIp تhZ߸HgՎ:qg43g}N&ZR7z<{Ïu*wv Fq =KƞS#d&1bWs7]S�prGInw8 �|=n=>lMzt�\5}<دf,+}_scmAΎkl}#}_xwJ E˯+uxr.G{PƐA=j\m!y<#[ۦ^$ftw[\x!viM<P*0$l9%/Tj%ahF-B `93}A `ޭE `Αܢ">8mD>u=ە*R;`8XɳAOܛ>7zEK1}ӚbI^g"7/Oq Z1xq6 ߤkƌ_GurT|s3.'O.K=4}PX$*|g/<}G;.`ͳꯥOnKFI"_B: ǜ#G$$9!51LIlïb2s4v?<9-1y#K2?Ll#AbM_,<0 Y1= aIV/]l j{WV(("ϊ<,fY6ͳYMg,ϳJU(4��*9$۳5rʕmXH[c0h�@d9`6562{7]ՐLw ;>!}^YO~C~N58:_:B�lZuvYbRۦ5P1o eW.R\D4eY6fY͊|V2TyHDJ/1[K7j[Q/шxm[PΑ )4:\x2ϔ4.j#k "p{!d|.g~ 8<~ w??�Π7؟+wfybSBxǘK<?|+[B�rtPQy^{}b-v|`6W,mcr� zyXq~@|oʎAcy_?t"E Gs8­oڽ? M6O>B\�"w'}mg}a߭GM/@pVvSF!&�$ ջ Co"?[onJ+OW[Kj-v#dzC~ټS<n3?s>xս';l)FN.ٍo,R}~?fnKǝWVD9ܺwcʜ?"0KFa ospwO�r6Қ2b.C:G/9 dULBC BQwM1</JCaLs9Q(`MKЛ_o*٤/^ `ཛ߯=뽛{.dVG۾3_0}+K߹}CF<:IJ{>Vq!nyރ"ή٭ov;3\J _n!|.4] tw`xu@�tNWC "A\mۃ;ӝ{3$ n8%Wweǭ}bZs)G0α<M_e=1rgPC1! nv\>iM/aC\<3b �L'"7_{op&H6onFqD=|^$X ΍RA koƏ:kDmKט^|p9W?w6)]rGa,~NXאw o2(  R/t r8茰ZU#I$DvybxyQ "KExC&B` xa%Ag,]{sy׳Nsv#p.Hr}r[) Ivl ? D`m-?@@ B(G�QMl?Edenj.r6ͦ,f,f4˧Y1+ʬ(RF$!@&(%&D ("V,jijmy}>Θ(0G@d9`A!Ʀ~D l�4B=&Y(X{!p1MH(@ �J݋lLXnmٛk <Zs|*8R{:1E\+-�R?je|;QY,,rUUݷgEW>"EʂT)H%@)PP@vU.`Rn3"9:&؀m7+_{68_Owܲ?<;?O?{킧_X[ۍEL~_\k?O-to׾pǛ*W~/]x=散ꭷ_z,?Fۯ}y?p;WgǸQsLpa6:U~j`k۾u6N]lU+ڽOspx}}޽hZ׿챭SÅ=?ѻG[̊*E|as͛\^~c~/Bُ3{Zlǃӏ̓]Vٮ5mwl,t#\~mKn ^?{o|߷hf͗_~qWizl|P]{߇O-[2Y<򧷧d󛹭m_qx#le/lG O[W'r\u-ֻ훱]}`m:t'ܟE<ӟ/>ލt}#Yn\><ĪuUn_?Bwa޴7{swkoSGش7_<5}b<S7/线m4yUK}WzM^ޠiߣ �Y94þf [P$DZ&�{L(Tҝ;ߡVAYQ,mg2aCQETbi]ՍTh�ڔ9.^srpwfܺ՚ ?Tw;z qcF�HνVdǞYG:;EW�Zj7־$ՊU�T5KʲLB@b)@ D2TOjZW[ՑoLh\|_TܐA3Ӷ{[i٥Y_|:_P+_>_]ؾ28+-�4k~إgۚ:wW?&˘૟?xK/Ϗ:1{߼J(-5?7] F>$57/OS_93kI*�?{^ҁ,2`v_lnW^[׿<Ԫ{6)΋{/+0p`"xbm+v-"cwbg,5_?*�O?ؖJLho'o۵ujT._kg/E[}ޘarCГmqT[fCH͟p_@9Uz`1kG7zߵ?uOx:._wZ9S0=/ah;͟qBkg>z`W]n=@o818q:\TqtP|oim zv*x틟~+V:3=~vR$BsS)7=Dj+4n쐙h<Bbtci?moK{zT~}ɳ/DpE7_ik}x6WXߞ7HSwՓ.;o-}Ltk~p'[CÆ")d0lkM3 ߳(ҿ.8Q)iG8G"z僧߳Qѕ^wlF/&h{�ܟmߙ1켜7%n%""GH< ,E6 6}z #z:ǣKyr{6Nax,oNZV'D臷˳)v+GnM/=vp~x|X\ymޭ;unk3E_](OreKMTxeBL߹1>i�MgS�ݛ']xZ L놻6wS66=f <z@yRkIͳg;ǗO?2R,ݛ;7ƎtB<\&vUi�R|j�]S1q P(<uR5)F&)7N!<JQR毙] WDOQ66l|z8-*Zꗤ(t^(jPWM &ETj{:C+:juM>�tTԬkU&��$�kՏdv#�bUj.e:4[A@}l{FAchE\[/|s,եq;&$[Its(R�@y2J8bb =*\ G}t"X vfz*@DI$)%JpT]Tu_"A֪%ͷ#nqyAj8& j1Nدb;xZ^h<i}t+퓳 �E?E?fm3o}?^{ϸs6%vT%ýW^ޝS//6ސ=k{0 =ǞX^^MWSy,䨜[/3]iMDqZH@>\|`,$6=G~qߺ6gv<_SERbc̹~|ұC-~y?;a}Do#zEϯ>VWʦ8/wf/}no6Q=:.>؈?al Kiub_ՋX{9{3߷~ٵty%%<S壷^>yyJZ7a~ZյK+S]{&:UIqsovՃ+gSB3X�g?z/t !|Ɖ/g~!~sKzZ]+r=٭+sDރ�+hOs[~4y}c{2ⅧW/>qb,-ڵ٤ɯ}tͣVP СI6O ?|Z:I@)鸜!S'ھ7_~KFcOMý+|H཈l~}xHԓ$wn?;wzno5>|omg7D€�4?{wݚs9"-s'B Kb V/Q3W:$<qfx`0E"Wʦ*,:`Sѓھ;w{2>(%ɏ98xDP=e^Fh0|Nvo}/]1}R֩ 4u.rumv9̆0}}&Û>'r }K+0t lA:^`vwաFHzvqkҤqߒA\?@_CHCۍv>$W~ G<_y`sPn$0�HTH7@�AAD#"4\}ei7*RZiiҚtuvpuNruJ)"� rBV4Vڣ̑ˀTE8F"�Pu@TL(\dufsaoh5@� BAV?�Xk~ $� AU[o+mR KDBӿu(xE1!D@ Q s E�@�%PQiRDUBCuTtީh}3}1D @']%& =A bүUv֥X�PZ0�! P0@WO)e"e"$  $_ɍ`bZk"UM8gF񈽌Qb7cv<�q�~'jVcnZ\m>VB@hƁ=u'+:(_;_\vscWc[m\Wv_WXa(gX޾2_%sͽVn7kKJ1]" k:VM䰌k80mdf  BW?@DBpY.AϴՅ?\!\.&[F;2pۖV8+Bd))N�{y[Fko4=W߿/z#FcBW7я\t÷vPWH2׼PgU!l7fϓ<M�sAvtO�BH=t4  3흻?a81=Emר朝g7Bg!L8h[^~q=IҪ,2MKg$/nQo ! ؃4$q0B ~ق~nFnvd@B~!xpoA[&B7 =t)l0,rWQjRgt词,.욣SW }m/[ 1ZZlR׷7}/"S8auLMuY%ބ9Ύ8B @O%w[- "G'ϋ|i6~eL,S7mݚDQHayhm ިxHj!F !aB|a9GFaY ͩ^2TuEH[Zs T�`''ګP yFZk+"$!ݑo"Bwr="Z<Swo6;\Tzh٦_$x ӧܛܛYm'HRQdx"h5}5 mfA-q1TL�T !q`FHDՍ!HFUܜCIs }]߸ "r{~9ve*8yDL_tSĺs*-$kg�lVjo6N̞_D!�PT>3^bJգ5o*jdJ?3Y{H`Ny36r]@V7T$DS"$ P`]/0]P\NZ&W1J<͇ͯ+7.hBnfۛk& +U(S-UFy*hj8J}IT* 4�5)ҤA$HbBB )͞ZimXM-nZ'W_ux\�`C#N~A.3?ߕ g�䪟>ϓ:ayYPfKЈfp,Q\;wn+P"_J`KNpsyV{/7xjn4 >B @ qG۱![.Q/3�8BX'*6X`z:z"P(c! 2׻mFFr�#;1DiЉd>1bϪM)_rVG. Sˀs}?76��z_9>TN,rrftPd"rpn Dk(f7˝`.q\B'm[C!BL8B(jCD؁>i^:_!@g*T=bLb_8p"8r300t,H|3, }[J !!TTzN4=E{9 a.B3 @q!9B!B\'Cv9 DhC1NZ#v�y@S XW4.F-lG?%EƤȣC4_M3}$%Cx`8H`N3, @gLwv!BF�!>j"m�o\{maۍIh S<;ǻr8k B ~ó ބFf\$؈z+;<=y4-EV4���IDAT0OH0o F$hH2Cg7:D|6glH;BL_ùDgFbΑ xcu#0*UAeQZ9c> I 3lH@vȳ{9Ώc1 ?h$vHCؾ:;#g^|NջuHخ/ZLjw,K]p6`7Y\tA$Xp.h;2ƂAs{"$�yȲPv0sGH$t;N k7@h2/9ǐ>&mu~9iRg? >C(9G0nǝSo=(n\AHw��ؤ�^�L{  Nے 썤$f_nº\E#֪�BiA <$T$BB҂4!j:P7"Rzqf@ ɼMzԺ�lC"H"dǔ!0|ݜ.$@k@I @� И @ۼE'kӞ4CBC u"Hnu?�k%[Nuk~!ڛ+~WquҀD|bͿ H ۽i5r;QԸT6ZL"M&(H:&ZT f\n׼Oی8X09&O|qҴShcr`*l!b!p5},/:(%s%;*e#4nb&bWj|x_A=.^ߌ4by!.{<G9X/n(b^GD0wACpCp΃nEnΐBbaQa7k]_q [Q 5}D'3`2-Ma~ !<!$2l#ނw~ j;LC9"x0}+MT_.kZm3}&bl\Fsy͏L+s؄~C#e|DhEHbswf4Y\kuzK4]9Ԁn7=Ҵ7mؽqgs[̆B tv|wYM`k{:9D6*S?ڀ۳ͫvcCȂ:!*d loa`7c.�vݜBfh^&j6�n-[=؊`bmb96$Gr]H5afBhKSxcK!VL/Hi׌1`]6Bz>uj74(9n\>j[O# F∙erB UHxy/ٙ7hm|  Fk\C~<T�"" $D |&2CQv-I>ko m7tTĦ:WJ`_jN !jn^(R "]< zkU3CDU0*1hXL�ZW_ID @�_ (ABFdTM(DiH@Y5� jDilD$X=u�-�DUT͒$8WZc=:�^uj1^nLWsZ/ wA)*�M<?ޝj˲6s�qB#ޅARHD0Tc}9V t|Z"A$J$I$$I#*"8{?Hgq#͒w/tea7h P 6*()`\L 6_oD3zYL^ 'cWAXzh1߷HG6s[*M9[8WWrs|ġ'sG2*IEĐ;u><o%lX(r8aorS.?~S];5sw7LM]4aZg7>gSN/w-?*x+_BEk9]tS _`!}MDCK/2ٮ:!{s|6k񙿰f;^o.`@XfZ+Y5Gۥ -ɐ NcpS/j\^y`tȷHomZm/ٹ|\d/~e{ Jz[:cRdW䄽r~xH3R.%fecb֫O{/sj1RxC<:ƛjj3tz yc,}#"rLd' @|n6 / !E&Ɂ%*quƃe9^`K-"DV KĦb1_70rgKZ;`iG/=xeƁrJq\A,_\V)=Qs9*qy~%BUQNZ{?hs@爞E߿/6myQfb׃ҔvpE ;v l9g1>A'&2>֖.'r I ųmR;[gn;k .IZ&BR$Po8~TD�IEMg@D]"d[lVfD Ԉ ) FP*%@D7"!h �P*r]LG Թ&"!%8Y#O]ިƣDB&M9 @) R_!H�ҵ�AZ+tAyQJIP" �zTȋ1 ($m> AZhq$IA)T)X IT,RjMdnZ�=R`ITYQK)IBJWX7Y�"듫)Po1 BiDD!"(.#hʗHDEꕸ5)]S3Ikie" 4Cr -;z_*I^fR4H9JdZ' O!$SmN ňVu|$ yJB ((�Fzg1MA'|n{s:,>!w8v>}8eh,٩@|Sʼ> {y^V&:d_1sDHRH?~aV=:Ƀz0((=#}\0f._3&vEݮ\e.B >6sL o00a #H"D$l[P4or>tpDA9\6Ikj>M;Ʊ뮦}(!'p0k`ާF0Zr"�vCä0X%|l0XyZ@ہfBAZnl 7i`nnb#Poss>BYp ~F 8lu BADvZbc"I䧫9lOtL"veG 1!@YY9֭�8;=xCٵ9G9Y׻I'ή'Ϸvχ",.3 x~g]<< ^|z-9.9 �پk $ GHK7A9zXsݜB 9+.,G0Lba#pv5}H34ov P6ֱl b9즇={xy_l?s"A�0G\ o ކDGۜ#49s1 <y~{k.ٙ%5Qmv x! :#?5x> 1~݇vWbsd<?H$`aDf.Z gBOфhZEY&!DHZ+Ii$,,ϳ<֯ B@Do(�EQ$HY׸b*� �tQb5 AiJ 5hOԵEqSO7B)<�Ugк^VDzUqJDRes%r39֨H tI3T0(�Rk&!@$D HF@Qm F@^ܫIkŴJk-tJç�TJ ܛV\z-")] @-46t�dA&j4*Zh@@H*JM�YAXAli $!!iP@&"DnbUeR-HRM@$ %ĀH[M_qRz0bK$3(�)MZ,J(@p  &6Ъy4K?�#҇,�tkM~As~ +9a-q` m{S r­0c j �`Ҧ,"mw]e6g8`^%s4:[?ydQEr}icL`o&Q2`ֳ3v6!*b~-<M-6ŸȜIwo4bKXjP"Xzz]CN0ҐJ0w%6v 0,:+E'^!js`& bcFQjT3O([ usgr SqPa֊!,߉k6gǂ<[VegB"ĩٍ8XE*a4Yc<�=260tSD?9}aEPh'xv9-6WykFx9!Nn!C88-:^&B @Hks .4b.N9šv!B<p~u` pO crk[ف6:s 5eeX3.gY\gq8@Q`j s9gG%t<涐ey>pl�_c] Ϸv y6<}!l4yqv$<�<ZF+scs? yXx{<#r\t=4!b¢!'ww)h bM0! A|z`F ȭ8~$wk�IM_K$;G!\An-KqD").Q\|3;�h1w y`q|:l96<o$h0B]$H$A$1}a<nD`{>{y0"tDR ^c>by`:#8}j6W8ۜAhI9G6MwA#Du]y. Mbh$s0 M_G'kn0( Bxr=H0DjK3:6iϠTADA+*K](<ϳ,Mgl2E nH1L@HXVJT$@8@LʪJ `iUb Qh5Xu<T 9URPT*PK"EJAQ4iy4+ 5UTVTZV)M,iVqfkɥ,,SLx(du+YZ2Bg:׺(LBBTYV|T)XZU5u�RJEQD2P@Yʔd BB]s$КT 4&K:&@TP.z t^i]jzh)4V'#&I227Fjg8AY*+</Y>f,eT @B@)A$RkȕJ&;WePkRJ)U(J!IHEPj](URsƼ߷X-J5Sz:\[A:@˲,R�hjkF? DTeEe$TUm{KI+J]*/</,fM,ϲ(R�B)eW}W=B$IG�n[Ek�CM=HA$uiy dՖ!c[$ #X|L }>ja21Z ?¤ nh%v.͵ao,>eN,� Q/h<3,!<@!l9B\`]ΣS!&7 2Cf"pbₜ&B\-w#A6]{Wq@5']|N[.6J+/D;@B�v0" qO6 ̈mEF/v0 nCq߉-+1\44!Nsy!BSAg<`!&+9LC L7O xU(r>3.HŌ욫�! p+HB!!؉SAHxDP:-t!а<m1`Y\gqqz lG.Lr((=̚ gq �$\!jAoǸׄ6>! 3v0XQ |!~_N!~uv X߹ Pd<U $C>J` !)� 8@,oCk"$ݘ]`ɜAgHz r1@ L4") Fu8f59: x1SD=| 8`{:G'~ZL_ $X 0}^$hY\s 7̳GuP@Mg!H4M_G$h?zHB8; I:x>"$?<˝!=Fyo;" Rstu<?5As$u sT7!}p9Ȝvcȃ$v#X ��hDDեR"ʲ4RKEeU4K �H| HC@(HZQtH)R5 U "/(" DE"V7O`w29<ZH@H}YL$T�Hi*H$gsH HH&i"YVe*gZe0V k[7ü(w;:)LVO][__2;7̋2$I"hU*Қ ȅ@ !-$ P:+BHI" LEh B�su/ԥ",<2"L`T5 (ZaYE*(K ҅Tp$0ԄaA@RBD&)"D ШTJ -D"6TYYºj �dZBLS 82Bh( {5sPъ<sncRw+%K)Yx -mɈe*oр ]B$'"RdQU7M$MD$Iu>4JU6!^<~n(Aguv{MAyՕW�D�Яub9fn8,]wϭ"ι޹XW1D__A&9ˀIj8͹|# "Av19?m xB16wl<hs䎯 # u TV7Dߛ ,Kj6muነvH&>` "ĉLf_'B'+ ݈3 rC4št)kAM`/̳1Dv`3ʋ>Z <t|Bw:oF!{I < DH{뭫;-c݁xn(2 zl78OmGP`ڭ:�ܐ7ϢB,k1 jwvqLE7x~/?)MM3,<qe6g?!>/'M޹1}B6u +4 xtRDC?;Иe [^O丳ZvqkE4^e}m*5g@(w`BB=u1{f7抰0zyl^FHct> `<1ަ/Q;"v𵲸l\^-tlj>`MNa3E"h�Iz[\BO[Nq<&'[k\DP3&YZbx~'a5}Ҥ�JLiMDHZRDZi-A|HU J MT*(%)YRRrF�$@Rk6VVvᙵn-o^2$ j5*7Fmԥ"RPeVse2TQHIY@*25Lh8@2P*|F0Kj'O?\JB\N<؛)PK'vpi(z<*d@@!wj 5 HB"&B@ҤJ54+U 8HJ"A~ �HTM2Y!H)t!5%Ο<HܹWYyi 9JE4DI\MJ5S�4MH@HIվdE,i奀qYȁD@.KA Hb=(�j"J!Q`&@jHIf.s"j`K H<=x͍-1>W'{;lz4<`k4i�Mz1�Vu=�+36MȉZUALTW!!Im)d>Ԕzir]sR.,<?1b\]֜/}jYY5, .ؼm{؅웰CW{Y0+kG߽Lz.2{'}vIF/h%{ Hw=Gz1f?{T;lRTuЋzxNU!o&Jwj65P3.85Ab?ztԼzwc$pՌ[U<dk(oqE,*A Ctwt&&هoi^ât߉EH/kňܻ[NGrq=w^qٌ-<CDwO7/"pMǂxk9-nGȖ B n~GZÎiSbxO9#=~KDl,"@g WOǰRᣞ־{1{^O:[_4y(׼!rsMQ>*WqXGg"/z5ԞsKes/9GjA;"[; jVƅBDh<,Vj iҤVZV@rUf3tkP� ESM v�,] ՖL pe5YZ VdEi,4BF]"J,(),/xltTd27)u%ILeշZ7慯 07'D(5PYfy F&W7[ $JH!DK9~*3*F2M BfFkO<m7Τ B:ݥP$9KݼI8XN4B"DZYY*mMTIJc R BhETN" ae8T)g&Z@ !t}u"4)4Sg^Li*4iAHD@Q0Y(|OS<X^o. i*�,t6SrgJ,t()@" �$JD E DKsH)fZZiZi� 6^oMP<~i{ptPDiRU7iMQA�5 �Y md6D!کcG[5VZJ!SP[#k-�"Brhq]zf :G~l yna/�4R9>!?=ttl_m*^mO4llIlSOcpB:]"smV"/�E^:ez ]"Du^W3CkMiCh(n%rC ?O|NZ[!^K65Xtg˼wÝ6 fl `e E`EF08dž5}եqSC?k$8#;8ɖ{G1ol0orfY3qc0};EҲǼ$3P]Uܱ|0oh=A+6u9 %IsqpYbRu 5{/�E8[k`>j!q =oqIo/0x7yހw1{^"+!__ٸjOwog`8T 7[Ĉyr0<벉# `A;#yoC[Ax4"L_AՏ6q-/rOGLz4}�}�-ZnLŝylmphJS"T,E?$9r>ʏU<9"&BMM#m zϩ !WFR1 6m鸁9;O7OH0\!0G&E h~31)lB�؁ƭf'@#T'*ZJ)U)ҪP(J5 "Q)2kW ]RS1_Z_>sa͍3K:)gzRgDHTAB $;*޹T 5 h(H,o5+LLJk(X"hy>˲YQf6ά>zgVdRd"LG{;p<MABJ)PA2óOnza�� 5儲Eg.l~brF�=_\-VFi"l6.r%0 + fOiM7O,}`0Mho;۾7MFO$NvlTDF@I�eǀ(HVHRHCA,qg`k[gέ>uj}iu E@(rNك;;ۓÃirA, P�v#M_()Z:$ܛ>g( TkJwHL %BV[@)0u3RQ^H1B)jl����WaU6a.7^ͬ5P.(˲R�DB �Vo~ȩnغ\Sl9v eC\Zg׵Ɏsyp\AKYΚ`SM{Sw, ty^Uo~>z U׼(xt0h;}8d("gkң�9~c؝D`]'_`F3v<x!lfMlnlYDPA-]j[D6pVhIWG>�9Wo( j=VhB丆9n{.;(RO:Xl +~v90Tp!L:jgLzq(<Dvz;lC./hMgA67)B )Lr$IOg&"e:iZnk;;O'mK]"w^uv!7ݛI_Ds_w戳B y~sI9/r%aB:�SikI-uE1aT,0(e4Vpp B\6Ā`F IqGH0jgi"2q #A<G$a.*cl0}~ `;SzIh7 |gq,߂9:h ePM ڨꡝcO.rsd/7"Nq42M_DNTĜcWI=yrE@G�<EU0Yr*3IuTQ\*B �(ja<Q.H锖V=z#y@J+9@Q(t:ζ 4\ e*)LR f w� ($ eGY6!(֓o=ܙOC$�]t@ZG^ yk{6R +@p6O80[{7{;#,W7W>�5ލ׏vNx♋VONPgW^۾{`:UB)I*Qa֠JQmD.յх'b]}-SE@RA+I P�RCBJ5 @�*'=sꚲ\aL r}cӥ5qڥ'=R"b}NΕ˗vvwz~ƺi\jw20],Uъ߻v| |eMwg?#)+4=NZp24e"@)DI.GXx�� Y Hi$V?Qf"$5Unב5/I T@,QR$IQ�J)z'łٮdxG'%AշU6IZ:,p o 3 0h~&o.6v�; enQ^u=2q*3d~Vn`YYE3?nqG028 N\MU9`C0r6C#aB! HTGߊ�f\ sXwK@G84D#e!s;խ r l uߵ@"4D2Y3o&E` jy"P�rL/d\ML֣;>YByg6mƌcLW`7BBGyh 7}1n7BqP!Ԇ $}L3 bC3e>B݈:裢a<�C]nAbFlVȎ8 Ժ nBN6DHS65B:!( $%ܤoF3#{ysӡȺI t8E-iۑdO6�Cd3}$%7}l*5BBg"aS&B g " jsv v! sp;[W{bһ7;3DB!(BPA$`#b`緇QqF6Z Q[(J YG8秿-! p4Yyi!<gC8Gg1dPi96"AGaTslQٴ3H*fā<g Ɯ#)`IuE6پh8f$hF+"Yܜ"sL#slbm9= GeTZs1ؒ+8B"O^$@̔9G Wt!owM:c+h: Mtg?SHr+hMZ<9rz 3|To566 lf@eៅE(<LӄPH)d"�ʯD ο%٧M�$S]VB� �`dFB�(DHJ%Te+2�cr-2e3fjGbo _xX^9)QPj�49B%RS!ݼ{ B `0�̓7^u.H`D+(,sڿoޛ9o,n.F 8qsww?ZPtB5iH@J+5),htFbBx?�S5"X�8"5v$�ЄhP,.LkE$5pSӐV,?3N_z'6 +H9!$"hSt7޻u4OJ%%B >XW 3ےT-lV KKR 'B*M҃� JMZ+gxELX2 %3fPd5벱II2Y[0 Hi@ iU1TmRWrIc)]'#&�6Lx$\[0F#5}e]jRZ쨔+/6?#:"c'@cMMrPksVFgbj([|#)q%a7;i ! 9c }wrjcrlxmg!ĉNvT0}D<.m"$2\-*j[$!v :˜=[F !&{ͩ&fԋOlu(o;r~r ޺jCYSym1;ƶѷ:}Ζ;s,đE.lIQ[ gq `[6Zޣ"zorOg;Plx1&�ux"Mn8;)-F/QT>K+?h9f8 X!xRۭͤ>Mhsi^ls7>.~ g[Dd`<ZnAmo|ǖcnAҦ ha )J?ׇ;hzEM_[v03v~"̉};G{z<?2ո){4<^#Cs`?ĝcPM0sl~'ȣy1)ж-s<;0s<gzA(/Dʿ8y+D�1M_qgFbȚRE^YFEA I�T`zب9MH..oB44HW7䒄q>ޝGZޗwE� @RTJ@#AJD@ !�Fҩ7ZrȲTI&ږڳ9} M]`l\idphe}0XO&R y>-\]"D� ݝ{ww%,(!Bn-%CPDF2C!BRD B@+u *IK @DE@Ue&�@JuH P%q;qBРs5U0[ZJ<{;D t\fr:˵VKrhp. dKH1eYNT@E|o)RC)К�5$B7(4&MPDJ \@_FJSXb։Qxpo2�%B �-T  LiM#ɮ@O&sPJRT$MMRJ!uYjDٹwvtF&f9LFu Y, /+*\eqlWFqv|g, HMu:ؿ:1-FU{yqЈ jeX-'UcX{BވC_3dT2`/<oRִۮfoH܈49TrԶˏv&Mdυ M-$nh`*gyEs[d D&&E 85Yk; CYǹݘb_څ(Z8�.Ȕg)ka%;WbahJUXXY} 1! qB#:DW?C:YV_dS#N P2~K'cR6q\6فoF|*萩4cPKDq9no=§d'm鏝KcnOGZ. zk_B'11͞n6Q/~/rip~frs.qT|Ub4~csBOalpdcGDe_dl ? ނ{?E矁%3Չѯu>?uy.VF5zY0@\<97} / wP vTxz<7حXAdX8DR;HoJH<1;iJHjz?zU<#WHc%DEPKS]jNLMm5fs g ~ ݿD6/d.2.rDٖ�mogn"W,�hRJ*V82κ*\x> Dg"װu}'{le (zwN+"G ӹV,H$BRH)(AȲy!�M�$@ 5U;H CJJ)E4&ze-9N_xDeFG{WW߾;><rEjemx[?tf0\MN>*Ű(YV2%  ДE )R*/HiPY1 .h|$@띻Ar!!""!�&!HjTAe.#z::ȳL IHD A 4 4`4ZԤ�1`u$tP �Xm I53Kz♍&vWL'x|)_Y>tr`$6 f'\4QQU-� 4KH !iQd{tyi֚֓HX=+Qk�RJTçI -h%F �-�UU4R"@J('N=h8{tSZd@"zg<"s D4&�Dj^I=4P.IPJJ$ )E@ T'Qwj=؃q~7a8>so 7prQL8ɼIr/c?/asa)Kz\_ Ϧȱ`*DnYհ1ֽZ=uL\;Cw(20 Np#Wd".|hfwn=~>aXȱNbneZ<~>,)"CH.]G 燸O~"xmyW2Tv! ' +mIo76ξa7#n[ցmg.ʭgε[_7(h+6)Y9p l:EpHZN u BӡO -Fs{Xksv@�z:½=X8 ZB+}@_?<ٱx>OpZ|{|q?[P[i;a=:g0h;OG+s$9DrǮ|E>ca#iQޤmv�vr>{9KRO KPE#)O| blx:A#.<~ <?k=Uo`;džVsu<|Jϑڍ! s$ %mm3]'xs#_,nF9L߱'ĝ]9aKݹ9"RQ"HRD ZFF V] b.mR{w I(gɳ'� 1~_ڽ;$,pe%�"9HD"PbCH*+((Tr( FҞR)%} D�&u*RP@O|=`@+/o_ރI>S Ii޾ɓ/,6ʼngOi Z�tΔ.LHZ ҡHIy4MJp5(EPF)5P^RE^*H_kRΒY6g0BA*4M@l t � ȅ$$)VeY &YDMt^BTHBTH",TkϿ{` /^wN6=e"νW-\XU)̅ !d2,1( J$(A<3RJ:&vzxm4:؛MZiBWGDTE^]!(&|< (@C02W2%aEjer"BDz8iED0HJQQ:IDJ�sTZiѹ' / RT " tHe1ˊl8I"0QB$I"@(�FQt5HDDaPT�M++H@2R+T?10EH�nĹ7UkIՖ֎o^DCBX;=L5 ksX:RGpjßl/n4up'XnqSo~'r0SW7|Ԯ+"ڶ*6뇐P|Vi=@y0ٌ@HDp:E EJ`|x <S1Dy@m;Zn7QrjD]-gkڄ1xշ 9<䍨v" EA; 5'f ka3;sb m\v!=DVvY7)Bnw5:b7qjEF!H8;s>BȻw!^Ф& 4̜]/BzyC_pP|6qvvLG\]HGKrhE蠸s}|ʤ,(NẌ^\b7oodMݘCj[h2cڟO$9"1¢N›h $6?/z@H0QU#:BP+BZV@ h[$5_䇋}è\A[rOOtFR$Ϥ/ 6Q { B yH/㙾x]7}.]ЦoM0+D|VI5!ꘑ`Gi!O2v@M#}D!/f<7{r$"7PXhڍ`6=0/SiFHqfCHks6"BXٛwFDJD @�*Jb1!P@$&rP Ml6UPA.C2)��V3=Hg*/4$4 D bi@C�QDB4ULp*eG B)ؿo]>}`^E*DȁTl]HKg,n<g/.>f<Yge 2ј)ʋ2'=� "I% D" HSHO@H*Ihԃdb*r]dEh%VCZ*%rIL{ZJ$Ɋ�PTEBHAZQUQ^fZHY BRVFTH5W+ w�j@"̋|R'ϯ Jؽ߸nͨXK0MB+lzX7`G&vVB p,QJP4RD+R:/ А$1rw|t4IC eGZ+�ABb4+HW$B %!ey2\@u^-фP )AjI"@ MDLTY^�a p.,DP, Ub"кP:'Jr�I)!Te>(Qjb0G-z �yqyQBD&R�BD AY'e E.eG`Ϡn{$-Zd]XIqD+&I.M�٢z}.8N@ 3HV 0FR(Xfh*zbebBְ n8ZѵT/pI b(N%Iqn5b]\ުL+3D~~f0^B 6!nBx }+V?"6AL!&XABlAFHe? _yqUi !谴 .\iF3 q{q(6熣" AbD&^B@&EqQCы\w!n;B>B\L'8HXI 8 @i'BpfBSAؘ?D6bcu_v4fs$g|8wvm}Tpmv(jH^ E؞M!�! <:GfF"NDH) $?0:T+yˋGD)BZСg>FCC 䞧itNXE~H|z$ ��*΍޽Q٠>tS8`;:D<ǜ#p 1 0zlH8e|-,`x�$3y>DB-6ggx~$<ʝf6愙;OMڞS>Pq;D $;6X 8Qgq>jG>J` !fpH#sv!*z#GpM`Bk ZؤO$5O Ƚ#ArCHsl :c+P;[K3]@9qA$p0jst o_fCTDVG >l�:Ǩt9sަϋ]7Lg-)v.I)V5? q t<Zbyi v&rg9bAOQ>l:ǎH-:G;ocPfƅ1p#tn]xŜ'kNs2HBɏ9Ȝ ؍!HۍB!BbK}l 6B Ph!@ J%DF[ J$�)P# DI(@+Qj)IggYV`.&K]LX:0P`( EYer( BH@g� t,_xr}e+~y+9je0!hPvdٝV2HO>6JS;<Re:Tr2ӊd��EJF. $J2׊$ rC)TdF3HI`4!q:)t!HHT)@]ӣK$d,)K(JĀFR @BTfy)Z DJ1Ӫ\jH�PjO}6&P,6N]\<5 ܺ{wnL04IdPDi,]-dLydB J�H),.Q ЀRri %R R]bN UQB` L$@ԊfYy)- W֒dgL@暊A$ @/KjL<jH4"�I2r @ (BM .4d(E2T($CXZ DZ鬄8 ӡRhPyYʜ FBk-@"&� @.�6C^RR$QIH)͈(@hI"v2iiZ ?OhHvE5F0Kmd�11KXc0"sw.pXrz/ xF?<RnQR{ j;e#{@/0ckd͠syӦ+f/e QTtM0#iCxꐅ9{RPC^9g/ 2*hYE\q\/ttkᅮWrϞ\sAnDbqvޖ=|Q" Ϛ/=L_ԠA͙DsM_˺o~)isGXXyZH,xwŰAHZ.[o]Ad.h6zځJ1ʓgFkM%2Rce�#6\<ќͱf0aD~7/|h[tڲ6'WVw&GeQݓk*#!5ÊB<%9}8;ى;D6_ Nq:@lF,h2<v npa(B<BZY\d<:wk"ax 6AW]10n ]|@?l 6h(?[t3bCA�[@ި6Q1"cw]`̆, L)[Gf ~[|Zz?ݜH0^hT� C"J46vA{H0 "AGDn"(Rwu8YWo\#�mCJBT/gESsB�D H(5 ЀJ#�(�1ĕdp1=hq3)Y!GDD|LGy:V7VG+JO&,j6J=+$OF5&pM:|jr:ή^u@z)BwQ`�IUdOV/ooNV&Oh%YYM $C{|5dͦhVh D$plYrPhf\ 4XAV* \ͦH"]Սte-]ZNS!gL"DI*VF˔'j:P@`ZйYBK`yP0;,0 +kRCiԐЀ꓅' �) "P2yǖV6dY7KW@R !D@ư N2!RD!T>HT8l:+RIYH 6^O"5p GINTֺ,K pT8=<urTjoO.)RrJ !Uh]RAA.7FP&Ͳ]ut0ɳBkM%D  ,  MZnȵu!t NNYK'2iHL+h0EEV`Z WXN) �HzY� (2IT$ Z|2Vҋ@z|߻t>Zuj$I<ə. l! ήfA_.p� WU`? y:+kAgx� _Va7E՟cIjzjU$Lyb\7Ƭ@ֈs2bh2|lEy_᧴8BM?>RJ`@; E!!ȁ<k_fR#FOYؤr2C>bY4@U[nqq``m6X:̘2glZvyBԔlބ5>B}wC&g|8 JqlXLr-4}LE g@qaMןqڜ"yJrhIıx5.jq(ic>B7C: co]\؀X;!B9BgPXVK椟#rbL#.1!P@5D`F C# C=?u٘O tv@OF.Nz=> |h;BvyØsl^uhyG k<hNe8BX E6i c1-<:MtnY~a022T'#M97}s4 wǁ<H"oY"5c[>>ڦOr ! ~KX@6}eb `百>`h"w> Mo 4LK=rG\t $F?Z�C[|g"Y-iF! 4Ea`0$yhs <Ew$虢<>S$z:F,B" TA'.""J@UH�R)lZysKO,_8u&$9L_uxrOfHrnɋN;5X�$8-o8y[{wxj5@DD@լ7@' N0+n]?sswrH ևi -I D!@ $*o9y~J.˰*O8SVחx*X9{u`a:['V7E:�LS֞{Sxt;vVή/S޻7GxRr><uĹ Μ:5\[Ñ}8ء{'o}kh4~|'WenNٴ&복_:q5M`Axg{W3'd8/vZ�)DuR  P(3JbysٍT avT޹$,/6`$eV:HiZZK5 UJHucO,mN.|8˧%81xi뉧Njko^LϬ?ک3KZn];ߛx$Ɖ'>ʰ,a&m_I-HCҢ,"nco=~qד?{dKb{D5̗o^4&� p8pHLe6Ƥ1iD Ii �轻^U]bq?/W]M0ʢeFs~gqLJDf"g))dbR)Dl}kݫ0@k*</>LF'n[/Q`6ٓLJ={2&hٔ1 �0IH^Z~2,[F$a,'a{)':VfA9G]⃖]v.Eh]]?S]v.Eh]}Җ?ЉnDV&}B9R � B�E}e}}0d1k_>1t|rJl_zmwJ"�+`RtͧO%?"($D3މ:~Yzd2?e"ZO DP�0#D� ;''x\`nWp2 "��XzQ 6(nQ Wֆ|(�=vvwgNV! qj2"Lfl~x]W􅈐s@~:[(8x7Q<[\y<$Fly8̶_\n/cƷF}>NfY+"G ( @�$P� Bp�:=3bFA? zQBe)(PIIIY& :4cu+oG;70D�[YވnRxxx?= Y4AJOI,`tWvns%t@  ~fiwRe*Mx.3xm}7^X[!0V;;Wz}w'g=D@D?[KWV6HA,@JI<[_zim^F@(Xی/mmvͻNNOU0@! ׼rHJ烥Y1Ƅa$)/(T"˟p^VT.< `窀[#>>so- ٛ^h賱i7E< V-d]d_zjcxݶ+!+$%q|'se O4W~E#\ŷ#ݜxfAKPT.{D07xEJPs8u<i]F|@^h MuR'rl-c~f~ֵQOsxopg.yUU_BP=롶RDy5KPv_&n[I{AHs]LJrz8.6v0Mk!Q)ʤKw8kjy]tv0\ﳌߟx,=�Ȍ:]@eMkh!,?C\kYAZ4s6.u> r4쵳n Km"޿7^F7:N\!X0u;a:B겺'E"I^k [r1\CM6<|n'u~- AdM?7:\ . B \:DcuFT7XaۜTuO4ޫ|NnTeFWyA=q<PG,-UR} y~M%<A Qq~nwԈ [pX{Q}5�g5oZS7!`/P7֑ { 'XnsԶ,ayZ`ic܊ ql 5^s}ŪZXRA7E{[1_"KR�dvlNg,db+Ѱw4=&][۷!ezz2Y~މBlK,4Vęb@rBPPlbDYp$3s.#B&#81I(<ؙ)*%�rr0d 9BoG$!&L̲8yo L*JI89KմFzyÕ A NSԠEX<UL8TA7/wn<^q,OOc$a+CP@:*$e:WiYD@�P/'T0�E$Ur�@Ju6gH<RI fmu+AbHTfRRvD'O$a"[iQ##R\@F} $DY"c&fa]LNACWo~iAY q3ư7VI�(PY&t)vwPg3ݵ<Mx>&YTJ\2d' H)$|f,CnY18Iuvㅵ_ݼq7\,8N3u,܎D$ 8i"!� XQ<[4)e8O�+˿Л1c?uH:�`P~TV |�cNchXa= T6A[8ԥ0)5~.Ͻ)ZG@kt'*^ϡpW1/ s0PxSweGWl1Xze0^p'Nӎon<*F1`#T D?!:g"` ֹ=ʿ*h Ap0!56bƆu!&[Ո׊.C!U+sUT$�Mhm?WΛ:,gFMRlR#zm`׎*]G9M~ʹ2wE5$nW)1"v!GyBMB=�!QUOݰuB*b 3U_˯_t9g|*Ow'ޙ^g@!mJҷ:ƻ^%6@#)@FBҲVX;3&Qk_`/ [x#!<cMc:v2+\Pqӡhh;ܡC`R /9g%F[d"lM^DzTAK%7on%U#EbP:BAM!F+_Rg>6Hmw=QTGsZ{<8Ʈ'yC'*OI7Q~z VJ]`kOʯj',IrT#uYC@шR1:~eFO4dknܨFOٍj1-c3]j4U}d[S K{Ajq'hGU}3XZD Bq5uO4pM<ߚrNy> a8n-gxŒG8;5g} F؋6 |Ʊ!V�~x<A3k|űz Uf"fX\P8q3ҫ tRe äH5oFj4l;!փB>VR:< �(/d㻇Q V V`c'z<朇+7.Y >8=+ۗolGp lN))T TR1,)�%0b2P 1 P1P(H)DB&"C 8@"ʲt2꧳ @&rvғ}y$9:Sx@O:/LٔG�Tq, ܹr΍W6Ldovt2>Q^sDAQeY:Q+׆7_\߽Lɻ`R!FD*U2!2�c1 A I1D P8R r!ciJ�nz`R7pI%TBD*ad*UL  SJ%KbTFR ːeL*He4)H0޼qڠۃdg{Oƣbk}LD: t6.w飓wz%|ccڵK;WUqLMFp0ReJJ8G& ӳ(D+L,Mh/{t|6= :rWoBɃApRll xqG'YbGUh$*pj.󸤔ʕR*WbJI"Ȁq3CƊG�@մR2- $]a *z\̓'[>~ A$�QUL@:+_.<B2Zs[m6*uATΓ9*r)5;&u5Tj+<zs:l9T>r",qb),1oqf*lVi*{ַؖ^wEpZfh YjTzu笇%U"]nB~G1rXT-J5DpynzoJ%@o_5!2ݯ~NvTlo"iڨ%K!g {|.r΀ֱj4vId#\6oy!R",eh-Ԉkk*0bC3KW b\ؠ�2Z:2h|=\9cUd ݆#d.6>І>S�ͪOd*xBۍ0]mK,4lWd|3&$[#یVOjF=RFó39s+Ӯr?F$A`ؖll,tXUu>> k < .{a'h#8. 6|RfygU.(в`) ^܊jV>*Vx",b!~`X4 -̳?V0gٯ`x~ Ѩ$rkR}ZoD.{ ^\ˈ\|jLѰD-`�6Ar-DHI5;?Zt+/֫>W7`Ld^sgeZ xoyp8ZY[yFK/l>lu7=V@y )H*BT)�pvB HDqBg0#I*!%%M( �q1=Kן6 6Wa6=ݣd,8t3sBy`ͯ?x8Av(Rg$!4N`8uw6/e_~z uu7s)#Ϲf0聒Jsjt`r/A6w_|끜;/rkh�$)( &:({ 9@PuP)Tb@J 3MCcTq K]b H!‡)SO3F J35L,cd+9Ʋ,U$Tfi+OX@E~֥* ?R_w>N۽?zՏ\Za�@H)) j{s:%o~ ͍_v/e R0\0 21g$iuDg[ٿwwl>֋7Dk[$j[_{[GsdK;/q&lk> 8H%��K S(SH UkW)RӠ{),? Zp΅ !�`EzWݞ})OW4;|+aPI+T|݈#ȑTwPYq3Zfy58 z{kdg(^15RxQ^ZVWdž,w&<Rj{Gd?PN.{t" TuE}5n_hg*; 5AnNZ]1_m]Ii!mpJ3nG*Ep/j\o|BGGX� G "e%+xWR@9ڠBZW _үʴohTWV6/uç~˿X|+&lYl} lgAJFlTJJ1笄b-3l�mgiToE?׮\T.J__9$K7hUȋ6UhϺztikwݒAC{8p ՏotˆOLI|"GDj3U%,b0T_3@Ȃ+i*,3յJ0OQ-Z[ `0 +\>q3g<Ʈ҈o욌e4B|,T}�v R4wX[TnEL9Rey4mgP ,|0D=ڄbMKA&Bи"!Ƣ_.ѩXޥPzL>cɏ"&4zq?J]}e۵cWņc -K@c\>Uq. fKGc:EHlGhF\w 7\ r+@D0%B 8V8pƔC͓jӱ6f:q8:/yƊ\l8 .-h EWa k1z^S}f[g]kӖ#VZXk!f,?<8<߇ '*6خz>M\qO(^T6s/y?(4J`A(rU2e{?^z$$ @"kb�@^e NCF۫W@$�@ց@�Dg!FCgJJ1AB@BE�(�2$!>:=^76)Hfݻ{{fVHAϦ|*e&xGO{ y:8(V: ϒo~;o=N R<Ihui2')BB #@Ÿ['fLU||f(_ 1 rR*bBB� X$�d$E�<`+n/ I5aLsJcI΁e�x^A$Lq>d9΂0sJ0`ȸ?1O#s&8㈬-"cc/vz�$I=~ro 0Kfguk=_+dQGWp �A_)@� + Β((C`\q2>MeJ ɽӻo>Q^Y,ӓ_}_;z If"p|z(euҭ˝t{|e%t0@(`׽(@Cd&kW)c( ),gqL+Nmv&pOpT&(۳v.Ehߟmm+;Wzo\=xëOM;^_F\O!«_߽/Bv_Zn++/>7;xўs[[eϿll[^[ٺ{}.Eh]v.Em>4d b^)~& \!ʯ;U$|(I�khKBę( LGP.W* RR$ ! "ycA� z\XI4b0l c�t`%;!QF1g"B,L]X W6OFI3 HD2!!'rE)))Enmu8b<ىg#E9 *Ĵ ) !!H @YYLƔ"RRR(Q8"YN'cȒ.@ OfDLȔT%,yIfĨ睡`�Ã'GO]L&'r,���IDAT` H 1!B.cqH(c(P"CD@p ȔLO.W0 ~h<1=*|0IY*>^:sg2M3UHF  db9B�(ɉ�!D#z'p4{h,v{ZG!޺)@%iD˙�@&X2D�9C: K%C`Rf$#gIH UY²#H)C1t78=ݿwpz6U*({:[|5vpwzTA P@`yYJ*8�@i)LL_ "|w"B~&.4?*]kE0E.:Ox>`߲(*TSo*w8I�̭`VeԲڨnhEsEyf]Υqv\#Aoͬ^}侦]6^\钹Žj;|$7#[EPF"5FMEg!"% R[0qW[ͭ s,i*{R͓'˚e!yot5] D￯Xuen-UoЀ~T vckMk f TB,;V4N+ibb[[^:6[+9˚z@*3qbJ!zÇ] ]-߽ifv͸^gkkF7 "TTk0Epvzbt)w4J1϶3wZ,x~Wo7[W/l_M@C?+ Hu MIS0Mcw>hb#\t5#:lm3[0_ a+BJ\?BEs̪]͖Ck@Alor^�HQFrNJMtHH!㠂곪΁nm~2ͯ֯_7GDT,b8ƮR3ZDLAwu8ץZh3 ds{V3`P_ϯRD=nϯ(Y6i)x~c3(=ƒmܭ+s.TBBGH9!hGd< -k!C! ?B@cxX @&U#%A.F Z mmTİ�3\`>m+b"8BySu7oeK˓xqD0Cبe=[q=AK`=A*-r+fPRcIA곌Uvf g;-Qh_|'e>ZEت'(BVk �ɴGD2p!1S3E8›B(E ZthL:k]Gb 0>+reYaTA$k7H&Œh#9l�py:9"B DD1Xy8H|s.�Y |@`kYgD*�0ay �ݫwnp͍ML%,MS.8 *b "FĉSʦx43" 7R6\%1Ɍ!B1*e4õF9>L擄8 A$k!+0|l20%YFYFJd�) Ā@q̦l:c" >D+QY<R*@r 1((AG�@4>c XSi8Ir1l� KJ(D 3det|t:=Ke Aw 7w)er0)dw3ʟ~|+㓣qfb\E �RI��+&�@H�q@kkg.DN&Iʡ7 ;${Gӳt*?71P䂉S8Õ7/_5XlzNFj>"c�)E�2CP!..RĀ�Ap|E^ :nC. Ͳlt2 KZDi*GI,%t{ E$aJdP(�(5{Rȹ`R2I$I8I$MR)\3D(qDV[̫CKA֜Oys,cL8ṱ@dLԑgX2,^;liԒp'ϕ<Lg4 jY@O9*r?Gi)�Չ(eD~Z}]{?4**9"~kbo c'!.{D5ԥ2~=ɇ>X7}Ik";l8C"q=!ɩ#�[0NU1f`͚_Oƃ rεw_q=I_䂼rAD6KpeNJ5#3b-g rˆ.r\ ,=-ھܸM~t˿TY goqO>a/=~�]5%B�!~E<4�skkS|ޏb doۻԘ<ʚuȯRV b]G8!E.7BFF@?4\Qw?}` ZB6B!Сq# U&o\"+B:xa ! 7-D䧪rp993G!_'mj`89ʌn#xXm,gG06w] 0Uġ@�~ ,`YfGl�@.B\ă p@]c *b><#Q.Bys 9'7yF'eyUF!<>Ԅ W [dCT#fzRY1v-#̑6"`>s�TzH,o3(3E0 WƱn-4z86IibPEN~X:& cݍZh+ ߴ5gZx6 y `Ti>mP`SgwlGK>X\ /]Bkm^M$ho2s<Ap n[x~Mu[ ¡3&Gրfo>GwLA{`]�A9N*jƱ aRo8 9}"{;Ʈ $N`.<GJA$cCBȏ1Ȁ/esq�0HȌ@J�C�� Ec2H1�#!#,` d1bHBH,>!ebr>}82RDL)yPdDr&xN`E] Nx>L!#Q16Oi:r&:YoElW7zۗt<#g(`/�d\$P!�reDD8Z[%b� P"Y<H2S"))sL�2d @�$G   L% R$! `T @"�R)$�@Sr% PILgrt:f+_\z|8OǓ} C"8dzx 7hu} 3)KIJ|MI$Y0daD AfV GQB"J Pd2B1 `scQr|8>u$<I'N;9Ʉ("0 !J `DH  &xAr+E"$j.I�b aDQ c,ZZ2\HI�R)b,#cLH"Ei#TM;M_e#O1 BڦWfq-Sf3 ;8n|kEYDaUE6omG{L>7 r9pU P|9Dʸi`sE$׽}<_a)T?׺\_'5=iZ`5mBy\/(JWVlӌY:u0١C=5hF* i o^ - z`+ov^xu˿d] ,WWYk շLtY:˝qz}z7weTY#j@Ų F_3a!yϣۯG>$ٟ:q^KP,� ^tVx,르APy[ ޳^civg 4#zK%Adc`{\kgM\]>xo|DEUnm-6k au jp<)?u+xF7Y/Wd;X~NO"}lF+[H2ns9TdKtS Ιj#Ρ=0;<7fQ+LѯԿ(NF$:D0]' ^"Beikg9M<ߺ~O=Ak2"nWY s rXMrA$htA'Lj%y@[fQڈn8.3c9Dn3wՕ jI8CB",�DT8� u+ƕaQ/`yX� 2BB,@HL)|DfSyw�DZ["㧓,S @Cb bʈ 4}tt km>|5K8)!(1̒yFq. .\�`{O�f!0`! H)d(�.g#Y#1 "IRB SHxx?c]H<>`@D$%(^bQ|ɜ@t^;gd>!EEs.HtèqA"!QI $T1H Rb @ !�CJ$œV_B7&sI&8�S*O$Ny4^u&~P.#*Va !@$ ,2b cDJQH^EP<(F ;̂$,d'yY�!)N*���Nx/MT 67&#<ϻB YRD(U*ͤ⌡RH�B(V+�er>f3A!i:;=eLu ND3 I|>9q W �UzNy0/\)@P)!x0 C2 ϫ[I"ȷA�XhߓfiET-ġiA RW|eՖ_VmEʂp̪^ �Э!жWyE#2mnd6%S0bCNy5(ۍEg^SP'O伨*W6~),)Х 5lX)a=:|X2bd5:/aEzX Hv_|ƫE!.�!E'�/CƵED{3'YAP;EMɪg l&ޥN�bG2*@/LH[%Bͯ>kcZTzNY�n^괋5 2j`(UAɏJQA f =ӆUyDg<޶wڷtĎ]džyB`e@B kqPl>m—F mEDV7“7M4G !q48D^o%o# `V"t1B$B�mmPCCӡr4'N *7�xro=v:T^2Xy-E\kx؟`JZCa}<fxPkcVi2q@ .j|DwZ. l7D]fD>ElϷيq![F5#G@'r46vMq"M1YÆc/) rDZ>TWT_aDU_8a" HVV#5x5YlP}~Hul=b?*<%h5(!O�\Wv6 J.Q!Qttx"H]koT}>Ot`e<&շ}جUzO 5Oj%bBЧ\�;3d"DcCB=Bl"�!~g5o0m`Bh'hGR{g,'$h)ZC}`S�@)gQ",Si ;眓%@UjoB�N,P�YFJe@#2T,'A 0>?<g<0nW" ""C� @ ;)&ݷ+L pxM.ޓ4NlF"v;[^o\=.g'GgY,g_K@@P$ 8G@SD )` �$c9�Hbdg3Z vx|~6le0\]]l6Mld PT*t:P�6[i|6Lp[WַAQ&ID,0QcĀqB%8,V0՛ӧV7Õ` RG,>#RMO{lYk7_^_ٌdCxt|r P$Yյp5ba<Y`-@J%,s.U*YT쐈0챝+OώO'ٜcGti{wh�A)RJ& $�03F'DuևW׶t>r$R�R"R� +, HfH%I6ŧG4Xln vnLN49SjՍ+;8=l>K"Ay"Lm@Ϟ-B<qKDJRJ)Q@w�ͧR2-:O<ߎ գc�c˥} �Źv.EhRŋ* ׂ?rC˯Ӈ'qe>;?; zl⁻Z7$t/Eh]v.Eh|HQeA*$DP.A@dq #j7LJ2΀ @4=;;>N' qm6LD]~H1(p$DLrĦ~v؍hafWDBmuv6N4N7Z[\vP1o<`8.̓^�<oϔJ%iR"#!qTrvvv?^vLdn]^ry'OѱLs@@*Mh%:k^gI8Kn'ܽ<"$ #LA@ΑgB@!<H�Egh/~θ׋wawz^?O&#e*Icdr^]vkk9zX2 s͉`7KWǧ֥pA2\f)1X<`ȥϦ'<FA'l(m o~˺)1Mp2VGr|5vvv6 Bvƕ7֑@vd:'$H)1V|76��*d SLP!%tdvJg082L7w^عqcg8$0{2�"/0U$X ey^! Y%RHPtR,a!`W�}" p,猫yؚ{ć.5k!DY~QF(>5ʬs{lh_&X?դv#{Hk{0GÁS sQŷNFj@H{s&ZJr#U]*AŪw<x rR+7 7,,ȯV²xӋC\f~= :hQ\9>!ȍg!Xc($MFYYKK JIOg;Wz-b<;(0Qfkmk;iX!7?buXMy0GV[O|g;Lͯ~폏~Wmwxw˨>L*+frggJrcǹ0wkecՌ7Xd) z,ڏ2|2biFG zrE 5�s8ĵtTو Fme2Y^Tcq~cg`UZR𖲕sӫݨ crzf-&M"{5e)eDv])U2WBLYn]u.>l˕-&@'[~7jI0BȮ^l!r]fR"$1EΩv{-c?Zځjm"ɋݨ:tyng\#3L;T,mCi)"CMq=A�Gdؗ-Z\8Fx>W!zU-qxYϪjU};g5T,O5`!"7Q-]Pn=LZe�C74x,4v˪>ȭR{�ߢA&5n`tR9ϭ8q$gy �3I"EDD ` LLҎ�#$�xA|6>9xzU!&?9^r}g36~N�2I )  `SAMg'G<:ߍ6owݵ`u'$I:\܌ lN|ޛ0`R)#t@�̓|1�!1� 84Kf$eqF� 0 Epr|zƮ u~5HqƍK6@<?O�YN(gdom+b bh=߉._Zug,�N 8&28 "CN)ˈ2xIH\ONsu:捠3ĭ+ƎptqJͭa0�0;U788؛f1,'c59VX7_ W.o HA2V8)p 5}!:@$Kp% ŭۻFh0Yu{ҕ~"ca2O7;!^,^[Yq /\*Iγ,ɓЈGC^9Ht\ " !x4{h~jV66NNNO$v/_~:C8ƏL' v0[z�Z.yѸsCagJH""RYFJ,4˲,B e˳lVNEja8#H)ܛgMvJͣ{fohf0 bE1H-'=JM X͌Hq)1Ezgc^Sc3Uy�2NF}<qԕVCDr5PpRod$=B3rs֕oֹ=*Њ4""48jDf>@uPq=篁|&ikEӔ6({;Pt�Mhm?sf,>kY-P71H+`W 'CWX4I_ �ŏ|nx;3=oBՇ:B�ͯ'~kd OY.AbFP)CrU!GyBMB=` 1*hU>4p+Mlz#Ƌ?d|xĿ?xG =] Z߂a,L5Xb4BT&s~L~ _!!؂Vc#` okOo3+ !x^8t~F.h5XYah~i: t8PqtPe_z@;{Đ%ґ>mZ1֪"؁yN8$٢Cd-L%@Q\R匝5ڵc'l#5v.BBl E6x9`?$\|;Wouo~ TGsZF=5| ~hӉ*i|BIٺ*绞`-x>!\R6=A+]IJDFO,!DFg uc q^7&қ6&XքY-k~ fOٍ<A qx /lûgcWGY3D ڍ7ؖ6?\U <l`7dg{c,-쯻Y܂<qT Kfɞc{M'<a䖯Er#f+0S'h'.쵟/r7&]G7G+V8Z,/XLRmg'hvo:<!qsZz+reMTuנl@U@5ܿ fl 8gLHfRbȄ V�*PB`a:S$q`ݠ2puzAot?>{qm_eׇW3b1Ӈ`>I` 9 "!(%&| f'ɽd/e/t6ŭ *!�9`cgR87o=Y@1H)& P� p2 Dȹ"e~gs�Y"$"!1;K;D"7A0/l^ZO'�;=LI .�PCAYvp`mhvWֿ~N@t0r�q 3%G 28�ɑB@ JtXDBg3YΥW˗ouzzǷH <d3G1AJIѽtcn^ؽMItPt,wߚ{dDA* ͒8{x76+[/FAn}f<%%ag zWwV/]Je+Gc8F< \˿#ؘ 8 9blvyDo냛{q| fSzw8|tx6RD e4׺Vfg$.眈dƕR`RJPpb\0BEƋ*ƫ*G_IbU`$_ 9!ʵ*N.% co'@zo pI/YJff\sJη:DOa`TզuT8[8˵t~=6j9Xa4Q.UZ[߿/llVzֻ]CUvX8K͵ލz 7bͪE96/pm65Hw ?~ay6⟛XAm4v&F `h5s v7n6wROd@x>} s{" =h7sG/f`zp><YR4lKԆC-vR}oYze5Tz`LMh]z㸴\Yټ%–9c /-g|Dy25Hnv٪�k Q66C\badplM3HGdI^R{zeM˰iJ-ɝ|Kca|yyܠ�9eVɭX,Vu>>а Za쫄^EX i6 ֬.kNrг*|hI{T[ :NHyݳ)Vx"j"OS(<YnaҚhm牫8y>"&շ";ʻDEe? !cJTC٩J 3.q�R@Q:SXˆON`~1JF" Al z0;SƫwƇBt!+ft|=|G{G Sa$(Qb(4w$'K�Ƅ'a6>N=~|ot/U+e4}X `r3rB�!GFG&i։h8R3O2ϒ1<ygQf[{+Q@�5j�<SA|LDD0\ ,9K,yVw:*34?S1ƁR8=ljEBLiڋ.=L1̿� R$0NQvSp2Yݾ&!@�d(t OaN㹌:]\fYJ]%iufYea P0>Js淎Nd£jz& 3U' Y6=H \.tY %$NGp'Grr8 zA =y<ηOoa׷R N{o{hF2 D 9 !d�d:WdrPcψn ed|2y%W!v{<p 389Oyl>ET]P!�/U1i�|lTm*BTTO\1ƈ [(2 b�fYsܭXX6R $+k�ŏ]_/00Ɨ11"ϯ<F_aQ֟_"#ڝ7 ܪG(YW4Ypj"Trծ_`s*Bi.~@O=U٣ (D=:|!(fzj=8T=k,~ۆwZӚZ leֵE7`,gQU ˞a).,hHX�`ͨ rtJ,]L9ڠBZW`j)o߹{?x~> ͪ=|."T,(2RFlTQ!}Pýh(@Aӳd/ Օ|xߛ6 [{d>F9q�Kb]=: e'Mc$Bp,1*��/A/d(p>5[d#0v!8&R90Z8 ~5U+-/E̜EW"IЯ�}B6p m`#jM6BfvcS팖m*h\o욌e4BaH�*xk m*JyU<Ɔ+kc D>=dK?vWȆw(YVtMuԎ4-mIJq,F(.ѩXs5ٲ7dxx$D4" : GCm`+8 qj p#AtXbi/V}MKK>!YVhL'9@R]m n`m{ȱ�OD{`xh{vZZXx :q 5f=߆O'p \Zшb$A6 VzP2s3P^PB D<8ڱ<}|B,ee, b1(4yl0a6u FjQ}*)ԍ2( A$tcJN?>ZQ?ʝJ9!lr<JTipUT(9|0 ;~d舁da49x+i:=N|">K!=lN,ܾ7"iœtv=<|49S="$ 8( H 0d#$&<>{:{+;jw0gReqNqr8>z:=<2z  D?g3M$L)P ٙ:OgpM%$AȘJfS9h?Ac,'8gǃz풄|F39c1s=|eEC4tFd~?z4OEHCBvyt4L1%s  "*yxvz܇TvW7% ,J4=O'iyS<Ύ00@R<=x|[Gޝ& x7 l<I dLED7g|Ջ9M&y6v;]1=ӣ$v^2t2tvje= B.PfdaBt "K:G X(HfɃ(a:N $<9ţLNk;n_0&q4~hz|bP*ݫU*~hmX! R�TUbysA>`BS$#s9+"*G[ġѴZ.Q%[nb`-ACN8aq.Eh?vzOWV.uoŹh\ EӟNㅏ<7/>~њ7F~|}cAK{]v.Eh]vѾFV)%R *7;@Dq2Qi$ώDrb1Iq<NOi2L|D{&)i: �|$t_NGp0te-<>;D0�A c!�|BT,(T2lq ^s&r>̦h~z2�!gw9 ! H8}#IIRBK>O`6NG9 N8A<uN�s1xdz<_7VVRJ<;N$>;Θ찴sv$ߞOF$ Y )Id*Gj7㽧p5@p`pt.'Yj4@eSbĊCꉢ~"*%euD΀Q%qo@Uzd$,ə<ٟ̲B ^f(t:==Luiue\Y2̏G{OƓS ~ "Et,ߟ"( y7`$Kdz6եF0Г,IUMJe@PYݽdd0 xwtr8M׋,)HQW b'Iw l@`*ɔL|z|v*7A tFdzY~+CF֎-*kf0+um˔v�DdUHRJ) IDL@2 �Pg�KɸRg}^D546 �`>dM Q} v}dvMϹ..X:[mMAY vQ^n w*j!b91g\zkַ'jzi)dwPi\WeRaH\UG,=mW%X:NjiV!6OnQ侣 [[_ æ+Urݕ~_VZO}P: 3<F\n�r`||ym|VhDHRk#PektHce=42ˡn&ZYdS'hYv:{v84울[6ۀ;Vޜ{sȇ/+Rz`BC,6AΫ_򐷥t5vG:؜dHaj2PX,Ց*ne% bH-Iz-`7xyf/oAE_M&ix<_SoS}kBܧAH۫^�S 4}o{y5{pWd?<@RƮإRG?{,}K CU`}-x kR}ھ/K~༞iM[a9',I2@3mcej;l)"Y iA4uNOϙqdP|k26yTߒYdnrRb#g["H6o ֑w퀡OQCzQHr86f xx>.Y|EXP볬el�9 ʱ5啽n".B*�DRD  ^?C"�Aa&qDy8S$98*E�tޝp DA>T??<C@! CaPNӳW!0"QqsHE ȨS ʈB EwhHqeb 88)"X㝐�1b@2d dG,Kq!àFDaD <} BDDY$HJ)~zNdD 9*Y'BHQ|8Jq.!<B2ް&doc `(H0 Y: 1` 88^|`!gde0@�F2R })lǐOŹI ,FX<y"PIB"lL's.8c@$TJIzq<dx<9;# 8C.x ,βy<JOG{E!K8II"?;JXN!q0d#9>N<)eg�@ �@�T�@ �ra' d:͞܏ߟH�ƈ!p.R(cURd\I.Tf)_W -+b Sj:MAx�GƑPNV DJBQi#"cL I.PEKUN+2uŝ1n8̾S^!TGv4d-ʥ`j1= Ir�vTi ͘flΪZns!2�4N;,)GTb`nSsѻ Tkx F9vpaE 19㿚b 5!ƌrouZ-r=,_:#֏#Dso#%9> ,Vftܕm_M `a&r5\7&Mǥuf\<;Nde W:C{3A$ñdž/K2 ѣيp'tZ|_kY/R},kʀEl4T J$+~(5=~z/ lsֵǮN6�vU%P|im~! |E.˱n1jCB@hBc)<tfF{D2-|OL:TuӡCmHqIO'Fi5}*Lg!ŹB[!&cג\@z=~|,NGl ,`x�$<C .]X鄥s l=!Zk]<c 4B{R˙GR}Nè7#'BKFcg"2p3"Zbc MEH>g�J9L&2mlt۴곍vvXƱzӿ'h>hPn E|_$/0u7jq􂼍@Y@P2fNOA<5/,XUlGK>} ~.C \kk:mUjR9 , <] 5V9s*ďfo!H_s`QiX uK>P qFE8:]GTQ;n+k쪨(X  :Bȃ2}b2�eDo}lgkz @H$,1ΐb4Ipѱ&  .3Dd @ M�HH+P.!0@  'E卵1*CF~>B$#C@@bD*$@/1!1�c�C1AQ C "|%""cH dtnG$(Z;D&CI!2�AW*[ WM΄Lp!(D0%GP�$Bdd3@ND d*8T %@B0 OĀ1S2��20d9FBSW鋡#@ MQG a,bP/0B"ER@EN05�" `P</hXq� !H `7 c%�@ Z*sy9t}6ޟ'-_pUn#δ6�bi0*ȥ$HP.&մT^JP+S儠ut VVdZ2W}HOwrh "^M!h +2f<tk3e˫YWpBЋ#>q1֠vɠ !Nfv *xt/'Bo�YE![k"pɝX;+J#HXg!A7#Yy8^GhvijE+x[L_UA .B+@Dv5X-\CH][UWNYb&8iFTQ$tbŞ쉶UF,>KF+B*=`8 6�!E! S<uG*g(v=FGI zm`GpTGhӣV}  I�J5B1ѱBZ5P d7"0Zb@!@RX o8!mjp,c.]@tބ,mPBƠCfIGMs]"迎Vo1MLU؁ҙU>Ir%C3`P µ@6T#6!<bqB TX<*Km"T'B$zJW bTMup <_[jMu<F o _6#r#WBD3' !/Bn"kQ !̽Bd$FQK6΍on]$) h>JgZ\5bGUې4n<,a6ߴ,5E \lQXy`^k$9 o4&Y5|'c7Whlcq'Uw'8Sc <ߺV}h>'XJ,ZOгrh( j!&A8<<ߣ lD'V@&ϷBK#\u. WOZU>OFK<AjAyq-ENzABfLE[,dyھWB+0蝡MKx蓑گ&<([lŊQ9h 5 <IQ !2qVr*09rhr` p<+Qu 8Fa0F(?(&Q}cZ@pBFeLSH2fʜ"� 3 8 E~C�a!2 `  ~38`=h"P9pͦwaGe-r#!h'"2hQg!0I@B0d,@\P(`vrA8A~H8ǐ|`E^yPRUg9tz">`[G /RXUb/p(A s!lwC ?LJ4K4'Ii&RJݾDޝ[X=z9j qaͬ+ R(?N7::, B9[$^w'QL^h˨삕:4YiSRʹuB):F`p=+7XzVV4[/p^cr}0<CE7:lOmԫޘݭ 5UAɱ9ذRq3^m4O!ՒЄJjY^TC!cQ"VЌqA=):YDHAhV̫Fx>s# `HV=㸣Z"8< ~(uA('nbCk"?6 T>U`,vlRhUL 4`r gBlWLkb(UAɏ #g>3dc,0Sn7a!*CbB3rog>ݻ3efƥ&tĶq'$&l&Ɔ!fEC>m—F#(�#X%B!AC{R~mPMEH =xo�X"t1VIE:?mmPCfȢCV= Oʁ2Nf SjU_�/UgLҡrA-h:6f'ԉ >C" oc wj3@-<P}X!Dy-W=D|C<{R-4QdBȹJcW\܄~-st 8jT Δ+I!zU wU #8ZG0LOAM+e,6>Y:6q4[4HAh7G#7\TBƱ4{m谍#3[m f>'X:T2`ױI[ 'М*gۃE BA.9Sؾ!@yVZK!UX>'#HBJ{@bzR!kq'hGR4UPvy>_�\lT>cԍ&W53XJ9lx1}c �<ԡKKL7^#`Hb3_S5S( Z7ۡb㦔"lqnn=ɯs|lK #\Vrg23$Vn1G�`/` dpCQS8�cL-jƝ26R*)λr�("%$RJ1E\*)UbZ.ڹHe_tÖqD2aYAel 70bh$'P8vF^ A^k"6\1rRFyp&C n,j^JdKC벫TBpQtqۭǖr?j 7�rӨ=/ȗwcY0piq4g (UsfԄjoЪaYԞKdKp U|3Υx&ߢ(/`G*tԈ4n\k<q9;ifq}n_|w܉�W?c?,UhY3g(Wm#\`i3?1W,YD阂1 -Ia c;=|U4ǹi&k Zr-b^ 5cW%{#dXUkA�ѦƮpc/_li枞޶Xh{EHsZ<i!Ud%`| i>{"TakIsYnZ8EK raϨN{#EFvn8ZNM޲ 2UePyD2q4l㜽'շH diTwxc3Yʌ7Bj^,,8+uVijnr{!gB5hX_^,+J]M==`إ)_fzMVͭleg|dStnoQN?-XF(C3[Y} YCt _. lcq9"3zY,)d3 J\iXOх*3 zr?׫_:�(׷-{3.=D| 8%B(qd:=i*2g v{yіk̜qWa}p!3J76ەCСChOWl\[7Y#?]z~QC#tåU/5o2{^>5[zo2(5U[W*,(}3)0jbc9,hʮ76r~ cwGrx�Lf^j$qu{[WAX" -R-t} Vr75^5sn#?/e#</Xv'[|r!G?StO~KG|+{D{D}/N7oՌ5#` u}fG2h3�aZǦn4z6D,aZl8*ڻ5Z6Е⏶eMrc—VpȰ~Lu&?_31ګMD/nqWfZN[ո.riٱ TX"{'l\^;FYuԮp>~"ׯ]Ҙnl@ߢ'Oϝ9˵h[Ԫ^v}cKG,}t_ W㨾v/i#p!U7VzsAmEhp}m3ظ=p;n\ MA$\*CVLx0H~xO 8+}×h&ƫ_xN}yW0W4w'r=A/i9oLۋ/CSM&tZS,!{kɍ!E7P\T-Y<+[7TRjWk~7n9eMu&~ٖhOkqh8T@B$g#`);={:$L8]b|#PP)eY N$M,D y"7n= T u"~[05B+*V?>.NX~Nhxv{0 ZrӪe#oQZDovDzgcV=??BD�sӷ 1zU!ᬞs-'O|XDqv\=�ƖAkё !#fQ,\NmM%}b=Dn,:8j @rsE;W{ WԛZiKoh\\n>OPwk3r-`׎*]!C\ڋm=hj3g8 Aksƻ}jY !A5!q]zo9 W`D|lژE뛗\~gJ(Y{˫>kog}MN6Q_vHm!d#:^.4vZsЌ+.?vq 9!H=jK;q3>74XZ T}P3vRG-ٴehk+DZ6YALc0K-:d|ǶE=QBtWilg~-m\@!#4B"; l|㰖jKV-+ckCT!A\fm7d^G#,e ʮnrsnd.ID;m:[T5@ "uze3!exuHU<m-e<fc5͞ fOr'ȝccQYU[ s`s9.qb>2Ռ<mg:^T!'Bql8ĵfk)K*,Fig%P8l6Ս OXbиܽ˝6 Gd,+6hm8[$xxsSx_jʽ(g7G+VP7z-g} տ' Ϡ3P!�~xNў-?]`Wil5` lC8,�}qRI=+YvwD2oY*ԋ|QK"Kvf~m2U1WIߜ�4.{ l|!Q-?8gRJ)Y9^ ?:M44KS)3T"{=j@74|;3_0{#&9 !Msc~�`*"%k#MʬYE6 Q(Ǧ"*<n^ЪTjC#euo2CfP\2=KFdߠ/&,^y5ɀ-~.SJ1cOwT^1('W#Ĉ")- JPj)Lc嘹!1 u. o5e|D w>uKh'QWx�(ß])g0 ιrAb|+^_!vEiN3nmD#Vn[9<LcWCb`]@yŅRi&GYZA}1;o"D!B'-n ׃__~&YMqwF@ caIJXwH;OhDHk"K Zb)*A>fnIbTƱ!eHG+pS,q"K"*cAj"X h�93Y G�vee`;0%Vb"F�v%CK&I(P6vTﻹԠar6BjV՗X0MJ|tT~4ncd%k0:ml0ԯ:ƱaݓB@_8Ó2P5š$7QXsLdQK{sk r͠ȢC�[{$BHt4}=�LէuHjƱq㈕Bq$8:`eGGt^6TTAI:Ĭ'd\ۏ+p)64APc'hGt`8{,/u/̵eq]p<!ڎ+xV} XX$ gPJKyxDH1&]OpADH1u=AmgI1Tkh;OokaRq,:XRq+^FBH8V aO+h ZQ ,lcXKoTΈ 96?P -DwaJO*Zt΃ 36o3i޷[ӊ5_N!?ҹZ<Hnﲻ zZM HS\Cv=rt}c@dq$I$idi"T)EEC �sC?Vh C7TƮ' cm>u(z+)ݭ}@܍/UKpvEt}pi] mLmxb&6LWQ|BW~Z i b+l8 +Qm쪫^ jn;?;2;=An{Mem^[spm̵M+xWކWY cDgJwrt-c!JZ l oB;bFHt TҬ0k{-mP!Ft:dryzr-TWԀm**fd2zvazpJFul洑5^+@;< 6p%6{|l}e=lZ[հ旎o=(#6Hcg̣@@+i :* =$B(m)<mD4<| .-j�mgYk ^6RDiw2sr:_`Ft&ѱ鐎!j4[JĹE*_۾k?W'nh)@k2pޠC Ew ކ¾F^,- x~ ?;'9\ݠbo&DՁݶU]ߢ@\S]xIƽ.Kb"ϓ2B@>=^VفhDHt`'1 =AЋϠ*l~XņcL<A> lD2xS9j<јNrR!st"OjXM7]TD@ufO=A�!P" z=AC9<z^ t4D \>'S}f,y~ }9uOP}N�}+�^H< 'j@ ,jiJB \8ڱ<}|Bk+� �&B~l0a6u FjQ6  % ZKn9F7?|[0K53Z 缨 ܆o$ԯ76=-C0{ !W/Ĉ�@IB*|*Y9ғ u=5 LO%c^ϓ # _p"�R*%,SRJ!Tp!dovr )wXhK bY�m朜.pxhu6蜌ӷOHZ+ε`5J@DQv6JFٓwg{iQٟj칣 :%7@JJV";Ե++` V4Qtt<~wvC76컩6 3[/~de&+!�Gw'I"רǯ[YkA(⹜Qg{ ;hu3|;\Aqz6'AR1Z1su hX!!z_ CglzM$}LI~$2\\ Qr|=MN%鵓@\\hiQh="/t3"sGR, 2ؽ] +`EHI'g2-ug6T_;PSQo_v+d&'Ә\!9g72!b/ǟ[7[>g{9xqP-Ǝ8iZ[EHN=j[noÈh/O %!d;Yn2vA>EÈO('l>Œ+a.r;v_ 8G!AM֌>6]:Kcg2:"7JQ<:JOb%=1Jxpm; Dݾ#&2LΧ~Q|9ך}G[agL'RUA|ӿVn_t⹌gr|>#BTnojx9DnF+A+:]T1>G8IX !FEuyc<\39=FljIlbZKE ,+r* Do(#u8�̦,eIPJ9KNW(=;I糌y<A[~zuEÅ`iLc5I$- ڎrFz`7:\,|S9:)Yv9y׾iv,D0R4Q\&4V=]&ı}Yj@ p.lM8Kgz=[7zۢu2| t, ?+{zkhyc]U6_Jf1F7 Ybk1VK _ mY$x VYfTEKe(v٨< (Veh|SڲEQΛ 6j/r2:y7)]l*vew%O"kwo䷝&"]+s Xf�Ta̩]udo^ 93Tm4ʅ\z~>zC*�PJ"*C�*AHD(1wW6q$l_4ƮV^t?\�YRqxuL//F+_y^NOfo}􍯜RnՈ^j?�=?WOnspٛ_>*WF 1hm'Mѽɷ_8ZҏNGo٨2U,�'rs&h׻{c?pʵ/ {9~Od "W?Ooyu {g~i<S,7E}5zk^ʘgfV6Gx㕏]oǧo~vpƹyhkuc U@Ƹ<c;\=hU�[i+Oի{~mn[5bssBL{Nοy`r B?S M_iRz{gw9w^_Y7'pYw� MԽo}s7Lg`iu7[G[_7X~3Pz˴uvۧ/z1)ޣ"momV,{}V#×kzYYlZ?e&~W}7�|[v<Lrß\݈u|OS]herNb?=ҧƥkWCRu7O~,Me4p5KJi>yw<_jw��+S?sx(~QoVklѡܣ5++7�v6ֿe7FIV}k]O,`z8*O|v 0JgЭٴ<B�[75YI2{rN "1|95S>q啮:̦ٻl Γp-aIhWOub]cW`%ʥ{ WOtX݌^5{l{s\eXay}^N'oIσ_5iEF{s(42{p`ڊ5ꁺeI\ u}cUwG' ,j S'Qi};z#"[{o2yTkݍ'S'IF؜ݹf}sRӇGs42/WvUOM&�7QyJ6jNPSΣhoneB\NwRwcښir7;|:$v'þצæz$K/xr;qx40gShΕ[cW|<)?j\[R}A着;Q1(ͮ?rUJiW '›_0e~lY[$4{Vn:lF1y78uP.];c8{DU-)�,6eTMR|?c c|Q1oШn|Ҋ=}͏Q ,K3FQ)g5ի3]րs)% H�L!3I�Y&V'G]\ޔ:uW2Z/x j%֎pd4ͦ?¸B��+RJ)I2Y d "`<BeH)RYA+sGXRh8,~knu]5#, ߯o<窓(ʫ99ܩ�'}(YRb՟k;Wz nw{>y0wx Z!=?k>)lw=ε+6~TO_Z:<:I9ay �@~׮~ی-ڕ+7? W?œ4.;o|iC>S?Ք%wߘ ?W字Vn4gۇObgƯ+֥v.ww.w?ۿ[: #XK睫+7g~s/3Kzi.]}.k'=, fO85σU㿴Oo. �D^O??7{L*cyq?Wp>O䥖X_~}o?9Ë̃C1DLzBuG~!ޭ+x$_ vxr`VkDOo\__ݽ*|F'~򕛍گVV~?8Rep'tb"?Ck?3["kOOYKiAT8jx)m|@e?Kڃ~뿿/S�. ls#j29l,`D9w {rfw3"ONKl2? /d>??;ʏؾdGOo~x8++ˋtXn~ԻoÙU 6=2\~nG|5!ȍ ~`?b6/Ot#?\dyD W,j~l寏MgG>sohc;_4Œ7_>y0?y"5WV 09>x`?:<ڋuW77/�A?-<~|召ک>�9K^o.[9LǙ !3&ϷTY҃]=ʉ9ӡ/0xnǧ^^o}x6\eښ2X ?ɍK9Y ,WO}sT; ̙W8ps%r|ekaux8}4ڲqp_( %%pk?ĽÈWVsݯ'q>|uO0!;eȼlror{kOzibC#XTĊp5xkQ{78ǝ${kf`w^_kz0d@]=XY_�u!Bd.wB�p|iu2NY1v{~eO?~j#oW>qՇܵ\kp=*U.%kŧGz>\<<J#RD@fPOm_ށw` hnt7#@틢 2ݭ:BRe)Bv*XXõ'C2zB]ḙǖ2 K.r8`BQ* U\�f52m\;4[CQPZD!ϵ^mENbU%�(656ZE5oiHꜫA D8D0hU_2aLeL)EWREc�P)ՊbQm*Sbb̼o;Ӵpc75~Đ]GXE2(fJUH滂EC 8�RD@S\bK?ޱ[9%Ssb]CڦWⰋ@+6N,ݴDĤgș=BsWۯ,߿wFdC]X[zS3k [gmWzk/߹,U_uvi16_X_n_/ۦ"ᜇcwQa?vWgvë?:-3g>wiFzs~O=o&?sv}(?vՕ?*Iggվy2I䥖~S B~쇶~yNIZ@ ~׮޶}w'Љm:N=6r"oDM0 "v8W7._Oοx)4,:jk5\;_WnJgX ÝZf{"7ɽ_CE7w(GيzXNjQ zE^5\$J32U_zk/z� tpnOVKXK B|+GoSP}(Ok~7"ͯG~nwa%VOߞx鐍EU{S\N�^.-,k~Q0TG~JoGǩ={]D賟<XYLǏ,-k[g>w)OmWo 6v:PUe˫g `xo8o2L�f���IDAT7 w>{ IVFE}jg^[ڟ<>5xް5L~b/7_Za\? ^KYaE:|K`3|Nq c^y}m4+Wo~bz!Bd̂>zp_jݾgξdiEWV{jecc 0J&8ӓ 7cEAe> ufq+5<,'IxE]MĚq59{^wk *xbB5fذf~tKOo+$ Vs="PQ/\D.%kAo]Sq~mՈI<Q)%DƐ1#^<'zўs8A'2sιRJ*EZFYz2I"2@`@*�C| B-B.1 V2ƥ\d C!ŤKD/,c*Y>1VŋUklH⁲ P.;}Pԅa*W\͠]XxczٲU?^jdXr0cC�x$gϻ-6~u=|;uQQ';O޽zQ5wo_ 8~Εވ?z񳿸~[AҀ,@Y?T7oaƏߪ}G�0Hը4/˻poނ}. AȜ-(U4?wokU=6+2]mϯAџ ߪug+*x:vn/->'?zڋ=0(^ u—T�:{\lص8 bJUU{4XF"zkWfu+>fU͛. "WKf8ܯ|kvź,7l Y1y!ooqXg+c!tQ3!�9^Z{H +{t9+&BZڥ_<�yT}<D/BM`c> euDQꮉC bs`e]|o-*E[i<&ם xΗm+_B <O�H" EQZv=۽۱;&zGhW3#%J$R)z'<+?WU�HNH<˛3<b=3}FCl|{5tE^1O0]S 0) #4!{G}t�ڲ{x+,'>{qҢvo>3wjhO)Sv?~Gw=2�84Zz#; ZƐ>hAYz Jw٢[6(#73~G%=ܱsotUKZTk=6D%5}a"CL4SL)],4a@(zxF/-0su rd?ߐ}M`}nkM#8M#>Ԭ"#\I$UZw<09o{_Ic>8]tziC8<J>~Ң7=@@4U9%9zd?ߐېdh0@�L tCU0ihʦwH3ӕ>/q]8RZ8 $,l'X%Y7$YtG)7BR8&4(Я2~`(mB 5dSт @$@!! pf[)z~LBAb8z!$i c`R$ kI=<HOɗ$S  $N$2E| A�`۶mF#|?`1 !Zepp.<[[]s.��u]9":RZa@D1 kmoA;^"Ƨ껌�Jvlkv~deYY �9x﹞\}9 ;�p0Qt�L= GIܤCrX+7)PXcxjz^J:偑_oWLPnݵ{0@xoȃzJ8*; 1ğ}cE][ke[gf_'v/Xɥ5<K&ԑIb c;}b{/y7=vցDbD1دy;h5w5+B-+�_3;'ɢV>`¿;x9t˽O^dIfHsÏ®>;TXiϝ2%K.[>T7>4H fh]i  *3F˟Wec'vtH8D#}<޵f"<ΑjRk;Z۔@1%S&hrzϣS}~ř~Rgllc'0)P$7AǎuP1!#|9pu'H>؎.ivŊֶ4v {;oo ݔ،/~�HC?+ߟ?f20w=2YLb }t1hM0[SNC&RF$Պwlzݭ=�gWP P]w?Įͺ$f|`ƻF V*)Y}h%$Mxh}KxHu^C^d$=r믘f)QC.'ղ'CN?Z= lGMw_srꐖĖ`Xڑy%iEQi#C'>8}t#+71uٹG!۸q܉D% pxpj[!i*W79Rx^v 48@"jn`rhʀ�^3xcջ;\ȧko߰ZYn%]d[4f>6`8P5Lu.WqqH=tGBH 2Y__5epL6#g¤pCrb"$JB6{ $uܜ8^eBuMHX)ogj] 2#<UQ\ТB2OYSs4KDvY}@v7G_�9 Dp"2".x).�Jo!gXsԜe7WqrMot,ǵU%>{fd_O]8c`YaVA{OP]MR%F.s~u|A$#fl,p=3?!TJ|)O$2v%R_?X G(0L3O˾blv74LUuk|;T'0Tpc_s+:'~g ~RKt烓7I>fF>R~?Cp}gw*LBj9lRl]ڹKRhoR}^^?_rztbƥ}]<x~,MoɹYܓ7' 'DvRb#œ GvW&BVlߑ][fYvdk@ `'2w>2ӿyxvꍜ3]^ǐ0(rvi%0 ]ԿfW"�5ik.I;GJ9[wі"~HR|xBcAűm` IŕrO\[vgoYn}-?]w}MCNz8g*쇟#YM!Hc er7+>t$s{dYx}{qERl%~Wb_񁄲8BSwyde36Ofĕ f4:Y1:==f}jݾrIn|oQo~tfM?zlr}W�Ml33Wi9n<AyƬOYHD >2_bR)w§UofRc\D I%rX¥!uVpھ_m)1L,YẀGc]rs.'S˜XoN֔1-)kk{L5hSN9vr}Yk{,Q|=_Ƙm[ŅD$bryA_*m,*Wam.8"r۰ʶ�1ڀturG}rGshR�~%"ApA&0&#۪NJ,#  2 p.<w]uy !ce%W(R33~ FR]yHja?No,ʿ%��y__od| S+݂}9JBۇox; ~wO 3 ǧ]?teφDHˠKkmҍwcSxfWqf{_ B SE>;G'(-{0պh|g[ I79cNf~ryQɬdD-ljuQU83odLټ;ײ;QD {;/v_wpƊl:p `iT4* `dom7G }[u&Y|O65hyo'Z3™ܙ?Bl}_%2�GG77-^v}C3{{73?ey5j +zeX)�о#79vž̤{?[Oa6ev ޖp$m&l_W2wfdh<Bsڛjs4;4+C%cm&G&*73.z��FЗ]2.6t^skyY1I*Mw_BG܅ݖJskhGBonyTo:7>l JbwspwQ䠺S9{S[46j(ϴ3D)ĉil7FUL@ <=? $f_~j9ih*=s OPwտ0} $H )hS oW+1(Wgv9&lvYĬM 3)ˈED ca$Gcvl(HJGeKe�A޶,"N%1<^ٳ&q&vnq?8! wA `բa"�"T?#"!  !X ܮv]7!mQI8x 9Z1z~B~Ц*"Hߜ�hQ�=cB‰DYo-x{}1O^ft8AU$W@ >{' \o:̖V==hJvXxоjDbqIS9fs'3/Z[q[>c4\79j{YYvZۘur쑫V8w3>U9"O =w_|iQ@ πxfne[@]><^7_dUg4wξXB;]6:06ƣ /eG^ ]TzcvUk6$Z@cBvW̮xAPx@fH/B �%Z@OƁm*UUn l ]uL)PG4iֻtOrg t67A"^*$wcAH(u;z#$ ||z[vZv~@/g�JZHk=>{LG�JkZ L*E.5 J(j^.v*wp k-]8)�Ln#Z_qTB:pvy*= |]v>ƀ36Y1}r: $4"=/%; �1XUY%8myn}%1)ۆ>yUO17a;Ԍ a i )%9jMaֆ-J̱ n ʤO@lo6n.IBR}B)zv\/I뾂+ǜJJe릻&odE-7h`|pn&/2O36@ʴADAg!0V -~t* uD&_ҰK8`M9ı%H)K0}K8i%vD0)=*]`kN0d"DrxC6J<ڡrE 1VXt!$I%9FHT5N#r G3"a^u$"USGs&f&$RiUA$I}W lHY}Tg&TܓݾT* e" 4^6vl^ ԪUjFny^Xhtݮ![WJ'玉ᶡ4Gǚ Bp:|0 �� !* %";NjvûJ?5-Dw&")ݎiw]73)|PT!+2a .GO&c*=Jm2?i*RӮFjQWFM_}Y<Zxsg;^'<�FE?r;^f#CuWv⅓/@C?rNj=v ?bO]8FSUZO꾞 k/,;>{5w#8!u5.TF*R@> Gۭu'f1|vTA$ A?7ϝh@3ڹ12QZY x#Ļ^m8_X8۾x=7=C㥙{joO:{tU+֯$GuP_azh\o̟?Ze66Y7=fW8{䉝;'*OЍ9@Ჯ=.vK79txOb͕%v-+gnj. �3r{IƱ^LVê`kic0}{sݍl'gSӻk*~?5*5RMwbɭ1?w]*[oぉD˫O}as5#~sJ&e! 1{Kl|gw}N69 G RS 22�"ѫ*4/UZ l暷8]TkDy|WN|L |p5<]mop^{О<M2xX1CGvwqCN_ gcȫjZ\NmKKsnb;GzB_~z!]&)$p+qЗMnsZ[./tۛhih"ۿ첞DMP\_.i.K{d<4V<{&6VmM2ԏQ |iei�&vTch"�,/t4mo�PʍwF|%r6&2'@^*y탈`FknR.ix|( e|ZV`\pF&9onl+��å}v-:ԣtgWA_dȴܥ$^ E'閔Sf}`g}jg[8~WZ;6嶱G3Vox.__֗]�hGJ! OUQ�mp{Tukk~CcC͂&[FsF*OM}͞鴂 UwclhHyrg0h bzns\[ �pJ9JCjqɝ֦?{|)K0Kv6|Mg`1,v7D~fI%`o(aK:-A'he0հL.{\^'g" f8)K`7ÓB֧; ͺ |=~o8t=?1(0DEB0iF I�lTkٺ+LJ }2p 2 ILJQљBb'W8v*$mm!ՙ` Fm6w ۏ߯d^}"[fJ; f8ĉ1VK%<˲Hh�p!XJ_X\,ȿJLanqcag!Dt,+eْ\W�`)a��vRqD�'eɦⲯ8c̶NZJs {H�>StڞN0H()eE^tLK/@;ot!53 kx8XH7?=t՝D/?{ eןYO# zA=L93롊/ޱ^0mŧV +-g X8۝"|~82FP0-!#{wzu( ?Οԧ3oiMZ$`n;7{q}{S{ l㉙B:) Mz] l@$Ak VeO";%v?Zezftrݢ,%^{16ok*8+.ζf;Ň>1]p͉97 ZAcف /9!7V|u<_W]?oXo+,͈?'UM!Kok_߼|n;?8LD趶QO.F?v[/?t}:uT`y~rWz Nv%T6v;:v9�]V/v2[?򜛻o_!Ԯ?p~v῜ |3\O7kw2kĕ S_+U—~_qVF,s\S>h}Ϯ+5vGn߮8eЀ`tr=B˿m(5O.iWkG@rQ2t]<4EukȇdzN+xK|_ `ڊ'vIuK[X R6-eϘjA76f�To:=> ?%3̞wEG_Y{EA+;*;nxx+-KP:^F Νl@]'"Ϟ ɿ.#zg}_8Z<>Ϸz+.n,; ݬ?)і="W) %? LNڒl</u/zБ[ 6khf]ӡ ߰ʂ+ p:++k75V�GdXϤON͇3TZ~3n=yDu2UT2t\^zzaB7":Y`foȜ}b^+kNo#J��@pjfo~ 1zp<4Z^[v3{?y[o{\,<ڊ;{| ��W[ 475>>N7_:f7LL=1{l# l+ E�ju{윽 .owB<O5R)Y5w5[Oic;: vd>]a|� p'%cOLC1g2=6ESdpY$`5|PBe*2RIRrf X^gǀqcJ)H/?(/MZ@OLYc1}٨Hwm=eOU[hYBR*-(9 RgN.[~#BZg!?(wJNu,W*[K@T"ZǿVL9*E0B:z8?А$&cꃘjţ s/*wGK&JFHfh3ٌh՚UUł h;�2G"D_]ʰy@@ 0C] 8$0ؖm\uʥrpu�QD?9,2v& ی9iC&,�!d2Ɛ� w9ޙ&?F,)|y\;{2]{́*1FeleG407>ج5JvAE�<0cן]_Y<ݑJS  )1?:7kn'~eszxOϞS1-)X^"�=O}տ3(b$Zn �zG{|Yt(Jbo"(DȳX+Hsa>֋e=ɝ]RHG ��?9+BR-=Lݵ7 M=4JEISM3,AmK] mRJ:kYx/YF�˂3m!~wu57S_[m*䓐9oA & rLIVM `P @t]x y|&I*,/Ajg|| 珿uꍭɝE^$$BH^[兮zw3g5Sl}/X1{4aɓU_ٗMƚW >_(NM@)`DaV\S6_O ॹW>7iĘm{˭�###ϧBt:?D1x.m=(("ts;w< {&coNჇJ~G/Ϯ, r=y//t}_oR O_{~G/ζ^=)a oE8=#܎ @UsS5>ڳ+H#IpVkсV36U)nr}K[| )bZ_둢9G_Y [{pݮΗ?{^g.\h+'!OÅ޼ϚmuPv̥KF8P�miT<oyNi|SF\@|ks+.f,}y>`9oT=1Lnz']K@kߘC;Zl: JSZ?J黔nn1[n $kk'^[O̚s<_pzյim"?"=yԖ" )L/ S ^ژq+xafr= `(LYs/;Vt6}mt#3Hn ?G+=UԾ/^}fimٍ> t� ^{nyAo1Ҋ1N/Xs_}fE"~{k7|Wwk-3jNxs2+8a}Q@Fdd1&gPWz{,)h Wl |0š.DQe(b}|hi=4 Je>J8&,AH"Dl!1bƀI)$8[n<Ht: @Yi ѓ>aԪg=\5uYLZrJ8Jo SJ-L˜nq�%\}TZ_jˣaN#2h]z0CQ�~ sP4ݍ-Sg`7 �!jq%" [* B-P""` ldqG;MFxàRKHHH! AȌ߀Y �!  dHHb  P  Bx@�_"5:F;ƌjt2r57t:SD<�Dт3 >�1vPۣSY՝w ?r0 fa `1áqX�E_&d>1r\t mE i�O!(rNrjc\T67ܥE^gƒ0 $l R;.q9pWc Х/WrUDJH%a >x/^'boo/ !|3Sc,D?ɇ/mqv$&%'H%cYa< CgIn%5gaDz2ӟBpOw~xN~h;q=R~_}֕I껗n~Nt$'nO峓~igssoQpkϭupdTSpoˬmD9Ypcx'2{Gjܐ@ϧ.=C__g/̶nZ(00%d;sDAnhc<}}G&{4M_zF!B'g?Jmޭ2{xH;/ə&ϕ];EJ^a>;zkϮ~WxCV? "$:K).gEW-+=[:w۹w *�_;{bnI_]+T/ |i@-ooR ˡgZ+՞㯮Z݊ q1{|s×ctr|c+k}fxx;gӋ[A&gjz H^~MorMUj=Jr.B<|1#{/?u)0 8LML0޳Z'y.E?ݫM;UJWGA\OVDD(" yp\](!*OC0L>0]XYZ-d(%% n.v論CMT |w9 FူP0$d� &F�!�aa�X@V  �Q83Q8  #@  <r r�P   !@ ĩ$&aQG $~\0�@0"FH0L1"$DrPB(_+% `9q/ц3\۸<P꡻;TcVs[]KVV*De6!Db@ B"@KPg˙ 9`$l�dEөZۥE宔<<}##}ibp&~y*e@�8q�A\0H0~ ?yZ PbTC^%\@b>D|u+\FqRdYq77;m �6bfe * -",ch̲1$ h3{M#lC!#q)IJUѭ& $((;ʳMBN_ o .T:Zpbh Ή\-#Q1dG_x弧82�a%JM�K_NvmsgD{PO'WAO"Gƚ~>qu89+-C!E{bh02�F˻?4B3o BÎuIGw )w@2)CWbnG_xϼRɒ%pZ*q셣 %JAVf[ >wݒW$MӗWeٸچ*PG˻䱿]=08튋�Zq̺Keֶ 0W4Fi+X_B.ui2=cYDHvR"'TYC<YL\i̷7V6oB%ZF< 6Z~c1s'ZF>~ZEIL&]VWO!u^;ҟ?.p.󥹋g{Hx`r M=d}�ʽÉE\v"Z1ЅFA7iu} 'T=ruE"_P„B DkWGa}} aBBϝ| A2CZoZ(?3=:6|nvmXi \ew`$BD;@HpDqqҋI:%T?AK9oz*IRJTwTOr}ịeAFyLjVR^?lckDtؖIKhxO,@Q$Ws9$c>l$XZ>%BRH&.GzfFS\7mFIϟo=ְMI 5"ŽEOK6DGf cRᤕdЖWiqH}*Jѕ5�h 8;MkLrBD?"BLSl{+0Aߘ.ܬ&δ&-bD?J. �Nm-!H`jp<ʪH_&U Mʘ54�Y�`;Xٓ[ĥEa�ɍ<BXoZp7ϷDtBw+Db.򤞟p4L>rc6hKA&{4-W#2!*QSz>d[1kXo JևX#sڔ4?XZJG(Bb|_A !f!AHd˫:Gg >ZҖ -A0,AIcuhV%s|+z3 hnG0'TnR>@ת_ p\`@vې B"<SCG/0.e7FY`qV%P GHٮ: YHE1 00^M2gV8'1mXq.(ܹ(nˉg1JXjYx>sfx#7� `alY '(E?‚E UaxFDш)¦1p!!C yTƮ#Ye0۹Ɛ,Ƭg/q!8"@ a 1!EePKDGUѦ y ˦Z.&oN*5D& $\&i_'K}2@lWL2>~ߎ$!g | 0Gbe#0ΣyZV_G$Q,( oW.-t=  ;0Ʈ -pBiz,u8h\!JB$<p}?VVD_[{PixIw>I隔n} g FhtW&;ݑ&yn|պ==Sd_8繺L&]ϟ/p" I4E?|z9jд|_\-+?X%#Qz8?0T2}4zjL_)D3Хm}qخkj4a+- # Rт]Uks^"CNf&��.\8득_ d#G>1/i9z#h4G8MR9+:‹ך= %KUc}1eB!۩PW݋$-|LڳbŧV$԰ilHts饂ܧaC9Al=rG}ce-oCݦ !_+8^҅3oBoDHlfl"H*"�@}<rvm(ch.lTּ )pL4١Z%ϯj5='+(INw f"$zxaq!:oRM wri芐 v0M^#O B^&t~xK*B P;L~ع(CtStg1-\hoz,v\tu$�puD LU6rC 6ܾ{꺰ձQ@;n'H".vus Y\F\Ov1Z"lНz>%Y_>@v +B޹mgf! Wra!2.9,խ ?>05 !^8{b`G&iUY$EPt̏Lvk@,/\hAE{fB�g`#!c7<F4:-_a?<VNiىST\tu($y m^.-`}82^)8 N'%C <ZF&*!BH!]mQ;}67$A.@7J8kfZH %H3@S i`iT'"w>%C*.;2-A֗8;K0zn( 6eP1)BDH D1!YT.BPE):�X) w1I6p7]$n,_A{ $Gs|DDZ)L7O{22-"C}B׳*/]�Il@I8~w) n8T#�AJ`WT4&kCCF \/ólbQ ø( r=<9P r &@A 1N, �b1L :#h!XHffbF0"#b'�$D0LF#q ?<`:Ȱ72 u? @��a4 {8+ @Q8Q>&#�EAZB$ Fr.H@Buۜ *jJ`9Pp)Y̲s2BA�!$ �<}<sEE ] .H�":]Wk]l+P`e\.<�P x\V},}=Ay<3@!8 ABsrN~9;KP1lmU^4x& udb1l7M鱨d&P ^S�Wo/yUvuM-5;1�khIO~+OS6V!-w3;{r]͛eP>W0TL}V;vZ[Zb/^aB{}Ӕi6s$6K<,NK{"1 |WZ,x P5f\Y GRC}Zk[AڻiRqύSWm"NJ�8rw׾'&6Jĺ,>-fF#xMzAfkrr M>T65*3֋#Q" Ine{0'|Ap2dҳ%|KV;82^6Te2oz;MY4Y*1],x3=UZ?< V;[&اwW._߼~yAcʑxЮEYɘrFı^s7xrҞYp~}Eb\1׾I1 )q.F6w?@Sr:�:Ƌ]B7d}jQƪnYՎ3k)l)xDjIQ|rD)jnƬ D=fEՉܒՂd=_oȓMc%g*1* T<\_qTzp flXBəΟ҅HI!kٖ҅6"@@ԑ+K Eap++{uPRjf̙-i qWv{cSEaSog DY;[=<QmKdX 7s{ G+,Am:D .^溧 !8.j.6 R9/͵;-?י^x-h<8R6t[ O9}R1?UT#+M 0|אWve8BL`>*ܹ\/mrr6V`L0tIRY_FIJDlޖ<6hUiy.U`  '` `)iOLjYzQY+aFAMOL$ ϱ֧]8^BH:qZdIM=$wyBǖԆm ׌`Z %y2 sF{LY9])Ep"Q>MKx&{yS1 Rt+0V Kuf,NT.ﺾ΋( ~ChGKTN; l@ 5V*h1.' 8�-�Fl&,K،L(,$0D91_`oL  +jp!g38K9q�8?(ΐ - U !<8܁2PX,uy �(:F�pX@STf0yhxaڽn=< �0p j,xrz8CbLf'``a`WC�S�( �HuWI  }? H3fvDEO"(�n&]JRЖ5,b٥!7R1RE^_l5r{u-_EH d5>_A>x +^pC翽 %SP/Z/AG_Y_\@v۫o$GJgx($O}i·&<q( -W6mmB c%*Z/rnm`mfScБ@hw=s3/rX&,RMT41Ƽ﹦h5﯃mˏ5OW=Le�~km w>Z\9e 2y3#TkL%rs{AKy~{-Ѱ Д&Sz$@#l;>FiT=\y}S 5և@t,r2rY~e jk)5+lڍf:0X|4;<_}vU oݹG? Cw4I/CN^P!FU?xJ}#oS5ɎZzD䙴/T!>DrR1$BV"Tx曋 C uhcŧ 9<Z[vɚOPvYTU :ց 1<|k' lpHff+K*p},&,>jA^^_DR1h|�Z \*ܐh$ݏL-]/Y K*.! o+<67Ed94O՞c`}ZZ!"ܠ6V<N Nny+1",\]?t ll;ג+'(ä֟f (}O;"*Hn٭EW/uHai"$;JJC8i`"D!ǍN\F+&hOc;DHc鶃stɒQ$77^6uxk 暷4Fo(_<$)d9LnDums~ƔikKǬ>CkʟBl(MӃD{gwݡY`p2j[ }j3bGB�Q�v�4!-8+` ++֗l0C8GHbyucV_t|G_6x p{BINOnR 9I \#p1Siu氵_PZʬ<DҫDEΔM_3`%H LV `l @0"ɩ( N8e-X� *ͭM V @o� bټT#b̆R*Ur7rd"QCX Z`EOrF(0 L,|EePXH (/ �$2EG$ Q/Lq1��",<A�2 S !B7 �Yr c$.ŀ,@@-<&8 _D@ 1 bM%Qxh &k �ªakx8"[[ns�@.XvHOa6 $ $*Rr1)J&LoUz;A5xm2d�Z褚td+Qut$^J~d\1@-oq}ȥ<Gʕ:/w>(Jd~>;koaXxtT)C͡V_-xpf;q#;vgS3KFmպ]>1vsK9_|jƊƀͼgSˁK0<߽_8SĈv|q='\msl~č{\ߵAB᎑rN¹ls&nD=S3\cޝjG|^q).B?amu;|;{he?[P#'?ٺxUp@Hu:Ƌ?Z\CKt\Yt~R6>a|:{YD/�yڵed-A"i ֹ1XTUzGcSYL=ϸ-@N44m˨-wcͻ[f}Ż_ Jgvn$GDHtUJ?^ah? \ g9uˮP`�30Vu� ] ZP ÕƤeVJdmĢ?A@qA(H0 ~@ Xx/0ځV$�BPXoB{X0 B g[0 FŠb)^(D!$â ʧGGi@Ho2v:=f&mڤbc1d,<X4TNI&,A$ aD"J-*Q*-Kuie}TRnZN 6ֽs׺m`Y6C+Qxxd1@ `axv&"]4~H9B^cms@F+ɾo󫴒J@LTdD_C%pɲ$=C21N]YZC58-Th_@0?<W]gs2Ph?V (ɦụ1�Qx\9uOq5C{+@3/O~ڃomVW~XU|ƪj;ʵTE!�+ lXXFd<"sdt'Np.T[q9\ œ_Cȝ%KqW WI;Jc}BiO둫2!PO"p;3eF.gN!Deu}[ku\kZ[@c6Br?\{cQu\^brU"NUwEžg(3Zy57|( T?R}koNu<ײK(THazj�@&B I˜pem( q#' \ܵ�ŭ uH' hzyB/}z#8V@r z"=b({|h(ĺ,% udI '<4YgiJ_{)`J^ޯfkTH(Q?­ 찔I1O !pDTz$削#bi*Fd|_@OvO<XY*KF#�1oxP>)=YpA dd rDB@Aal<0~/z녿d"Du&,=n lA^Sz#2DѿQkS(6r(tWe1Y?9 [;0ry [NH T�R*%h�|s4[Pczw8/QһXIPSQgCI*BXviS Է1HXI-.dsőd} 'X1WKt([[;t֗ºO)'-|ha$BSN!D.*MI((�w"A21z~W&5?'91a9섻 v3zHO %ǸJ n1B llkze1!if xŕ|Oi2 ^ĄUJ.լ85l;SPS @|HN \odstǐDt̆Ra%&AjuB[nQW�Z) )&-ȉ DB,(,m;  G�1Ds6wgQ#iBA6;C9$�@ rD jaQa HhC'*1*o-k/?\ys.�} -7UD# <a[B=(jO&U&py--۱K]i7櫋or3WV\rV.UH|"7+/��Xxd _1bG !8a/h<4c,(+mg)~`R>iXQfs ?4\ڃcLL!ï6|;R"U))ʢxwXɅs]MS&yZh,uCf%�PPlT%AhVN5F=DQ̾=ڵ[XPBf xʒkÃ8$Ֆ,2�eǙ(CJNխD['^7\ܾtGm�@g<vjK5w؍J7qWL6iS_{| ՟*wV$U9++6r۹I6& >:g_8-p bi/b2J ʙ7[:BH$Bz_> :/s0qp+cЍApģ~(huzSףRJ5R7KD*1`CKD)cJG=EO\ɿ?RٺcOkoJQ>DSRW8#d:sI jN]s6S|CG!`5_:ڲ Wi<5ܱ An\2; fi=P�"w9701PFۨ#Wˑ~jbz=; E:qk o$erWfXefx{kBy)3]Hh \=z�ie>L{2Ly Dp ^�x^%hor-LlvIsqE n^@ ![thn ʖd}O<<+N ]'`RShNtشLwQζ<hZt&HrƭZ/aB#e B *f} V1'X_|6:*@_ac 0!"MIH35ݭ<.J: 暰$rTlMI69nR _A1B� l깪 F47:<3a.} >O}f 1+| 3^Lnm 3<G":9 ,rvQ*Umg TGFnqaMD0Pyd9<UrXKh]JݱL`ؽ7R$ aN0Fq7@`9 * D yAa` A�p ΐ# Q2 HX$,8Rt' ׇ�$ \@o�qPpS&QP a6 ؖXe +-_\~SKn'�;kk*(4ga sD3)"UǪ:%̉^[xo̟ouZiD |xD>QcA2d%2\9 ;9{}]=. ƢCY(H0,ڎ;ǁr}kĜ`D-m:7^f7Jizno[_ҵ= ԛxb&t0 Vcj=br*]H];RyⅎlNhyɝ�F.p9[Aʹ< -n dBܔAh5m�ŋEkM+V5f~,C*|% W s\?>hZk؏~jgdb6"%OR) Vr{QG@=d^BVW);�JΡy7BQ8K)Ya"Upy| Dȩ7?lm a|`ꣿS 5Xʣ4v*ruZ9, aG<G< _Y)9 ; h>tH!1D#{Qw|2U,Pvu Rʟ �*5W=EgYɃ`S5RвpNf3[c [_w{|;b3!TLOy $%H+a!*Z,~vR38N ֦P r9|aij)X5U9ڥ܇x.ONAhrs3>z~,�$[!O% &nyAiPGKdZ3EnAԜIB ^kZU&B@CG@o<ee Ezɤ% ǂHgyM �D�bپz(p*�f me7g IA3b)ā&4TK 5|%Z/$4S�ҋ0h~bfopԌYؔ�vpEXX_"N| hIa[O ED^}3 ZfDO"$OCͨ|zYL KM8Ҝ9"`T`"D)ˇ&3f7Ԣ&܌h"DW!=R/JpJU+,ݴw6wTlN~t&'`TDqƆƪ#S� `8u 8N"ּPX(lm& "BQ㳶omVgn~�@�BU.PX+lđxXJ᭜0 "AhШT1@ }P@#aAXq' \ q B#z>b@aDHs, +0 շUTmqLkp쉕sY7ܽ>H 8q.ќ#'Yemr M?8}BT` @a-нpfc:qlc7,Ve v�_@%E&a|8`X̀, �\w=RR` #Cb2<m??i+PSO{9po@TfhH} R=Sd&:d^5XϣD%5mgW+N劕JdD-ˆ_9J�xknC=U//2(hAKʈSG\/a܎!S|=N&B)($ )#lƪZpKWΎ5l JZz0f{2*WYCDWRWʎޏRZl$xU#[j '$kb"5׸X 鉽}Lu`Hv_\(4ڢ,|!,<­\t'L"$s?O^bCss8pڸ-mݨToxS3SW׺@ xg>Qgvf'|aBWjB< 7|Kg'\ !@3)#$0bA\CoںR-{C-!:K u(9r9ĎڝKF)dC:_zy6P`󣿰wtL :6T$߈vU"3'^/ʔ'γ</H(NN` $9 A͂^Rz~єE `@޺>h a_r %ӫ<5@JTZ\% I!%]P"^Y))>rJV!f! b,QnF:3F 8?O\LhOwil;�V&@q ҾpL tir-|W % "H$T!@<0ҟoMT$4=] GBJjq*�1!Tm&KHz;etGz%(8S1'_֧79efS7WXyQu Zi�1 )�G3L΄V!%zPם`I>y/63́ҠrCױ T\4 ))u^j0BƔ5âr0(P&Ԗ+DH44B(!;! c!h2$vr*h9$XU8 WJu+`�!D Mk`Z(AI>EV͒]faS�0 d1� -ͮ[V`uX�]q!<; G1. Yǎoml 6Q#PG 8z8ksV@WYQ`]6`-amqŭg]]>�G k`4 !Jg<`~jqk[[## 0X@8;z\ZvVDp۲в"rN*]]mm@WK �PXqfpNA �eC㷶N}�86Eb0t,A\@El؆`" $Gij(r<_= K~C0~s.ba rݣ$IE:bi�W/N>f{~DOR?7$84OynQsrnޞP7̟s?POgBmP䊛kݮxKs;No彋yRDN <֋PqOen:|^"ßVj :UMCE~e@Uz'ǙW�\VrSTЩRQgQQ</>*GS'@W\;UJW*s%B˲XQd`B  Z԰ �<`l94^C[l7aTbhu݀{=nyXp%�L` DVYeK�DpdܲC,|W7rW6ΰט8]wYvۣ6Y`#,c^í`Wڞ•,塠:A˷ m,b<ޢVW6ō`wZV[Vʈ(59.6XwV`mƪ- tC^eȷm*oqg˅ ȶl1" ۶O^'hUֹI-֪ {1QOX]ç-aui#l`'\k9pˍuE}-)+ewVpU/fu1cV66[ ~Q\)�&eۖms9Q)U:3�2f9Nb6p.5*U`*stNr%D|J7G1Tz;,,@ !X1DBB0&SŷSQme JoȸozwD /vnu]/8�sqD+vbm9m[VohtiS??-hY,TWL�37IPۃ$7N>sxck(Cv\{kKS9!"}MyuwZM4x:mgyMUsoT`d%E4>2ŹSkl;٢Gĉ !ͼKURk#r8<Q-"uEYjmafvfg�dwu™mxe/s챭?CGvGelzt51^(qLtIGd< ;2UXr\x.Xqu:;rǃh��?8 2ROˉGKXb}B'So<62QW=j_TLה_Z!KݣB\+-Ep?1li#c MI=<Eo:cʍwg }h_8=zF$Kޥa:JoL1r4.Hs5laϵePPz*N�m^SOPJ"fJ!4(8g٨)|{-o槌od-< ; 6<pRgMK):|+Hma/ v|ca^ %|XYrX85;- C,65O/Ak'@QzEZ.nQx6`{/ GA?AAx _4C0%o4A 9'2]!S![UI=7\%Pz%d|z~!Amf3LZ"ڂ!lm? mWM*!-)9Lx˕v]4<'Vȣ7Vۧ$<-)FE>1<m&dL- BVn2I �,XuhVV\AQ N8vXPcY(,ly" BB$f%I-xɷTtꃕjdFmk^w[~gl.,lf3f�mc}T;`Comu 1Ti6kRYls,ۼ@@aWKZmm.*Xd+]Z֖ږ�cՆ3<Z)7JNJem͠V]B"$D+<Q|yVV ;RsʵEݭnv;.T5DB˝MApq h9a", ݠŅ$X c@x6sR80\+e,vr_h\"pThQj5@Q `xE`#�Z  JM"]rj4'F(lL rye2V#b F{fBGoP+ykp'8#B,1K�@!>(O3 ?wqP~o/ )%ZP24l rQۅw:d#yX74$o+P�/~sKY6�Nd#OvXiYįt7~]Yk TʍiHFI4 ewܾu'PfߞFd4F*F!"PS Ď;[l_L=m2?dٌFr#)8+[_9pL9칛7wW.oV\ f}2D2үCW-;0X7&*щ72ɦ,=u'YMQ/T0sswկ}gג[e˩ibUo g ֨: n!` <̏gW ܩo}dƔ1i8Ĝ�u;:i4�6ۚvצnCbfh+^C0�<4VT SESMP!BH![AVf>/i9 rM7 ]-~ϏNsܹ͞ƙ[E0!41z_0M@P W;*KxtEj8+amL½osᚘ1)+m_w"TjP':C+;sI=d}E J,Ml//)luN �<O#nmx''32&ҿDp%!)z@�0�e?!~uZ||)lPX,F| ớZ2c'g={ _Ap@,2$X- o7Ů.)l= B�� z0yH"{b1! r o_5شiĺ�`:Y)x.he\0B%5 ֟%*`GtESQ@$,c*!DQzV.ZHRClcϒ e\aپ 7i%hj@Hy/t%lL4NY)ԅ%H`#e .9S6a,F pԁ3E !(8  YP95uxF նV|wXa�`ye� Jb J5R/ ,Pe!"pܠ&ڰ58o*N٪Ua�muۛŭ[[k] mǶU,vO5+vA jM6rq7`uV̝i-\\rךpb}^>6hrX=tί`uuuەFeǁщPVw*c V:Ksg\oy< f۬\,y�zGwT&v LꃕR˜}r[Ϯ-ίNcޱsZX̢;Z'KZ+7k{&B @lyNlxrpnߴJ^skLTFzZfn֪# 1WZ5vf@@BK)}}O Bc]{Gr-@co{6NNfMvCDޝyu*&ci @A*@"D0@Ym3�PJ%"q2""bl$\)sy1`P"Fl(#sS(4F]Y9 z[kE䘵ߋ(Gr}7/S{=Xoz=4Z,<צRWNT�c.BT`느 !Z/I'k6v liYZU(;�d$sfSς5{d<eenf5I0+*Om8֎}G>13V4g>:ݏo9/C >KyԒ���IDATmxjc`OIXrK:-7qxdl @1B_sO}ǦzVz߸�V%HP9$W�A s4zXi6*H�$?'~cHWЎe5^DHjuqP@}l<$Bt>B4\H3Nt<ƒ#%3dLVP?pյg_[pDn?_P-|Y^~GY |gnB u(D)ƌzoz;C8Vz;0HieRuhi[vnJ!|ה.!Ǫ>D6j'd*lS/oR®&Soy3넶C֓UP=G+%اYTd fZzs|QD`:mZ);ҸN+S- K+n:ۇN'dD=7~ԧ<3)axnΫanv݀*( vm9%L.�|KPͿ+) GSq-= T'̰` K/vqd9.<<i֗E&UiA]ۧXO=<c#*siK0 ٨HݤdIG!j]2� 2\)N15#sZh/ER8'MD@@ �CbAmVb]qE"xl݀|T-]XRza h#0rծ6K * (x|nxC#S)ZhGD%e>?eW/Xn, v]bfyrfhro6 ?|wh9:ٴ*  Qc._nzkfڪQ+llTdDV9Xâ`uo;2vBPp12WN ݎLZĘsnԵ*bxkZsr"Έ#3l}}pl Wlp.׽ՎDP*٥ZutZs X,/7W[kp J^k5tf580V&w꯿4U۶#6€ !Y(H&b1 BpNRI2:�ηN躾Gf!t]w\mkƮ^bC^V*57Wqf ��X|v A#)YeY%Dア�0!w9m K0)m9˒2U�>KES=UV(JɨiQH Ш�VIy@mVg&SH%>2Ƭ/6pv/JPl9dK<l3wjc;<]gۧ^2c8UH@϶|cc챶fdL>'E�at4#D\P4QB邅�! zz*34v13;rʩ)HxEʭ�^]v7=ZnrǟҀW܂O:X\*kbfncRVU%h|�@6P W~!^8 ~dG}r#ZnoHˏ %jSЭwة}+rؤ"\J 㥌LTdn/iə2E7!*xKB ɺdn Dʉ՞h 9Z�v?|vqv`s?Md ?Hs` rG4Dq0U"2y y+A\+AGR'Kl)9<Zf }ABJW�'R@Bw2�sOU2'HeB!MRD4i}r{(^>0\?!�h ;Y i0҂doS8@*Ja&B킈HYWc(B`>Gs�`evrלuaD)h<FWO[sHRMH4BziI3JFBky `ɵ.i=YS'Z~^p5?4|E@v O"D'.\(6h9ރd'ޝ֗ށRRpq3l,Aд>TrL [!=QW4HFbZ6ڶEua9ﴃjYALɒh|#m 6AmǀR�r]i՜vfIVf�S8Upƪ 8|Y֔?|(̈́)Y_pL[# EHR_Hhq6` K0z%ő>_Hjnz s3�\|_>%|e˛',m bW |i6SHhP%㸠=$ GW` 4Bp4re1H*=_>RY* KPvpT˛p<D|#~b'Pm_7`M`C�6!$P5D&"$3"` @֛Sbzrq�C@ 43u/Fƺe9Z7lXX `U @�Tvj �Q ]\?ȾjƘE1Bke4Uq*On^趷J aR>*hm8=0$plۮXb�Y]=rxe�ÖՀ2Hm*lZՉFitsJa)F)5qض˥βtXk%8 "r+{ ]wxi.-LZ8:c#nh`T&Fds!%u֜�e]K,1$A78P7ԞZs9e�h�@%48FsW"h #2+Uj|`& Մ# ,<D;\3rp6Ģ5\ÑI496CeUq~p?8Nɶm,Hz=~)+Ph>BrqF uBѡ,f8wqifOlZ'vU<E*zoGLzGn)NJY<08o76 G/y.=8:ntc?ZП<ltV_wW�>] ۹?=//ghw*K;vg.m0{l</*xi;ODj?M٥ːo�P>x.Ν̅nf_e>>`_ �`m?^, C:�ғ_@"tVPϊ_]uc%ߘ K"pn/Uziy[בK4,zdwFͯuYYy^a^G+ EUpFO>u[ϸj O1f?{hervYkׁ3n*]tUDHraQ @,׬Z }tĩ͝[0&�P`dͩ2'#ףUaʀ\88n%BBpPk8j '9NGlV:& 84<^X A肷 謀X`հ6alpsbU/>%2 ` VR}Rڈ�<!66f` 8JPڠU5ƻY%w@(7ʎ}{,UAn5�0J r&v L5MGX v~``s᝕moU讁v'Jc;N$Pb0 y<%@b'�,BxSZ] [s UomZ6J{OL5++*`cLD`m˲2pWTt�,�&A s/@yfOsmZ6dPИ35=p}B Dtc?PBdV]Ĺ}|}s.i6m%RY+Th%8qB fF2ҫOm=Tj [EQOɣIX ~8%k_G~*iH*N;N UI7=wܩz?Qo4,ɂBK&<,hK57 N?YV/KZJ*Od(=AKrfe.mn#s^B]V D蹇osnd.kuu2RZ6?T?stK̸~'8F|"Οh<x`aIf B7?r膡rzc;~t1T؈T1YU(6BOXZX6OJ~JUVZ噖�2(�!4+sv%J\z#;Ńq$P&A�7?R2n97n!F%a76O^0IMM^ hU2GbeBζT}hJxXQ*$@|-E% ?L) q{F ʞõg&B IK'7-yzYGHԳA~܅72!K9Ը}Z /At_X)NN*�NYDbX�.wgC%Y2D/NB5MVy*iμ34QJ7 `LF'Y"^<P:h3I]3an®gc]i|hA}ī^=o'H;%L=_;O O$|Ӵڗh_�M42n,̴Itphc5[ﱝ#e$di %v)sZR_%��rf-#zi9G 8Ɛ+B7'!z!=@gLƚy]Ǧ*ˑ[JLuކe ;֥%%%+E5,OftmtZcb/Яq|X;bb}r6�$69KyfKxW~_T`lXֳl0%-APz߮|TZ!0R.w7!l2j2@prIK`}Ju)iLCIg}zQ.yGDlI"鐹 EnߤfNHlt9n҄l vcF)>e|0z&R $jR`3>ݖ`)ڿȘZI1b]m% OD�)jTe�.Zs,.n' *Pw4C\_vFv6wԙ�Ƽ;7tqG`Rw 8K-XS{gO(3@t7©ֹ76ξvꅭ' ڎc[^n@n <i!f|@ |6Ƣ7󭥥Z#s™cs^G\ư5+|gcKgZ˝ l�k0<]-ݠZp gbfxס] (CX˻^ Vv掵.՚;Y:l`4Ъ1Dq_ (�h[<E�ac}A,t-Ҟ3]  [N4{bmZ +cL�$vX&ъ2s#֙2"}!N۪0p;ƙsg׶|K!�1@ �y"��ŸKPһLhY6c6�B}<s=Cf1kݞ^pGޥHZT53|"d!K;I荙he 0fg$*R?Fk 9<))vݭ#jNh2oOʾ>٣/L,vm</v) *.]8[TP3S忱ɦʘQzFA*&99,O pEFs5\?8g%)9YzpӉl.lju)&A\jtgCJ_w_SlD ҵ }w[6SGWD xՂ5BVI'MHn,'Unf&#t?oKG$OU OWcX[]2_#7>XT"L Ni>o~~1h֦%z"lUI)TK[ͫjo osMhĜPk9S?M;L{0]orL1Ӟ~DW=Y4)y7y�sn;Tf}xJPEO=T 5xu#³^?.1|;Úc希u9Ltf+IxTlc'E9 SMl$SNXĵ�9jm퉱qdRwӝ�}/ײ{GL@wI/p3|CU^.=L6`З#5 Ez~F>[sGcy)K,sr9g+&W]T6="S-{"}bZKnjy>̟/ӻSh칊 {{d AzD%kʫaWa:#֢ͯumcrվQ(Zwl(%LK|RDp&ے�nA{͡rS! d :.w<LEGopi1 Pg}'0~شm +1uY{M >P|oR[#e B g}:c})''c[N &BR$BEVulf6$O$)bh\3|X б\ {MVQc}ٖ`p,l1TmLY!ǘUF4ψ1$L+ &  A##bכU��NMenc┫Ύ]# u52j`# u~srmD+R*۵ZRrD@R1\wdx) ^z[bk/'ΫO}|gօKݶ@iSp\`@ǩ փ/?u'OZouZs*!2HB|讈ӯ~{ί-tk`NxZGx^{噣^ktGo_cJ-㵺AK4410o|bO6snw|g^~œnwC"!8!C"@L<" SA~ S"Lxp/ᙓ>}+S E,6 !ԟ B)m6BvB$Ddږ 4ڠmբg,-=7W7橳g왭2B3&X@ X@Џ_G۫�1mYcr}\zr.G6"laG>)~N(7ꎟ،=٬ҨDڣ+uTK4!Owp~_9'69rc{yx*ƻI@* R=զs o,{1|}-xxИ4G~pȋ]*xKdT^,P*W%Ʀ yO=H<"YfZdтgī$ʳ&wn}` Z^0 `; yꭍ@N+iw̒ǘ~ϣ/|[F4e{MQKL�_zN>o(%_6_/=rO%"z… ֆ-22,/7<rGFqӓ $*TB}+SB\.SCH0U T(nz~i,WL|JVSMxa50�!7>[z䉝L9d%6]8_ <LG@JLal~N]t2CTӣD1#!�QosI`&r Ƚ$WIl$]!RUa"8M:m<Z;6j4'T$6 WO!P)M]ihpx,AR$_<_|`dfc3Y5|^~dG>OshG&4>+tہQI Mu(qjL/T K<lrÖjuB1*Zþ Dr }#}}O{u=&䵯 =_0ĎUKx0͠Zr$ܗ*OC5ܣfy)`&)4`l]/Z^ĤYnş ܹko"Yҍweӻ~t;FћdZ:* "�ֆ_0neB knsH4BziZU&B@CH,F'vԦvP̂wRL4Jo&%i͊,WX~dD]Fӈbw'`w3>pTnn2Q;i_D״5:U-oJ Gԅc/pw,(%!m Vkx tK0/NSz >BF9yQZ `S�4t z2M? 4E @& $f'!Ѣ#$#? JH QW'[ �r\]>&HfV~,%)$HOI7Zoduxlh#d lC"@hQ|9nFЁ.CDUTnV[s6K`U vV%{ 'w7‚Nr]_Y_lx't%XRb &n7Svʼnz0w~g<{ gXpr™G=sR069VՐ2@ ! Q(�bͣϝ{opK62�Y(,,Gtwß;zgO<kX?Z��Y]9{l om;6p��Gir]j +]G8]|Յ_;湣 ~xp/,9@`A ؀VXKǐI� ]#]l�RpזNm͟s,?ut/Sf;H" 88�G=-, dSe`[İd#2۶,l`k?{j^xs嗞?ulqkebh dh!Hv�mWG!2Za"\t\^QC0D$Yc@Xi؆WKhWyuL_@;2712'>y�F }u`&vF})]4Zԯcպ}͸8Vå2MD~908Rtҗ?7{V1_g/vDOuS]gys+x·~ßB&D%!(򿿦q;bxBBGH4T@jM'vp>ݯ'ׇڼ>4GW9*ü7Z!K])<33Se3sS/kPK\[?O0]?xTKQ~rx+'v]S+GNnkӪM{G``t'xݧ7mYF c2fbi_~Y0` MScxa&>"7'~}_n)V[i+ÿbuisM=Vry�bpÝÿo~vhP!#E'6 r{ÿk˜iv;0S :zJ6O{j5Tn{`_/_҃96]9c`lT N% #b=}V�ȓpER!3<tP!j1#}33k,)ICx{JQ2MB8ΑƎbxgg(ژ=Nv!2�,<|e9t{ 컮 ;Í);[l{H0KC1Ht~ybz+N' WM� $ߕ,<|ǞƽN3A#Uq:|䖑gjeL([1h*J0߰/BmYVH4fOZbI  IMkB)@|lP +kmvN %VPN%24JI%: DL`rD+KE);sNuL075~!Y)ӽ9X_\muZE2#8\kP?Yǧ/%x'|hIiSW0~"2^@3]PR[7U-+vW 52Qт-/t֖]9ԄcS+pX^ qY{ \w>ج5LKPZ\-�gϡn9rJNiqwMBC4J{7H^曬OO1,A-a",KP&vq( b{0R1T>Y_bFے\g;2^* ��AɦiZ^#MKCfi-үFѳ%-M9iYl&Hl(PUBz\oνǥ"2#Tֽy2cG|MDV6YUU`R|'U= B,b NK !_0hf+fþOАFZ[kaRGyB A- X5¥(8v-arl QYkh q4& la!()O1#lNX'rWWЀv d\E=lFQ)HHP4=K&:<[G{$t-p '3JH<ڏI2fHx]:jJ1 {'{ }E@Ьatxx4V-,.-{~g2w&g;+F͘"sVX hpd m=L;�zEK !NўlM#1�$B$6&}bǃ^u:@JA.Փ2y�fL7nqm85B2ƥ+l\Dc b4�X H:Q*:b��Tl7_lhd5.7 vBAfZklUZZ!hM)MkFQtfd4GH2AXZ>}3k/ߺ$C"¬V9]y¯ZC@`d@$,^npWR$Q+ed)E1Gr/X˱+a5pX}/4Y\j]̨W#Kf6{,GE'ݩu~awxؖO'{ FďɿO%(3:>LBYtLjxmcֳ_~s&]cT¿/.GG[\1wlSQ/%_j�"O;=Ԧ}GW'ڣf_BHSlF1a=+s^lB_?F  ?/?rl5תokĭ$0�$~-_^Z ꉏi"4ek/my �\~[_r:~.,,Y5Gs׷`cd%v =| q>?=?/ -Հ*BN駙RΪūrl6fO*Bst\_~Gn?/{ɕ=Jo8‡?~q9v&(TPcC+Y/ ֳ3ZT<(T-7[9(�o'ζgY/kr)\gmی±BJdG貖'4#D&0ϧ'=Rg ac?}}unk8FoOme �+�90 NGjPمeP7>`w}`2ч )E(�?Gznw0}K?.]޺}ѿr>vH8{0یUOC9 z<*gno=ʠ&y]2C c!HWond2'~?@^gtk82 0:P"%'ukv<ن%Ňͯ9k,4\{AG|=+i];Vj)^�M'=%93@.<z+9i8EC#b2܋+̩]( $Ǘ, Õky3Dd[$>rlރ||QEބ]>qw\W>_pyUCɦ G޽<}᥵SSkC?|9Q4EeqG{9,['[4[[QY':x~\j#7.lk ,X*j8ht !=qlBdkq <*uT.jҙ͙R~UD{^=JSDpzx)%)=.H]7$$ ̄X I*_Q]LC 8d9"q (s`; NT pw}t5ЃS  .H�_I݅`iYF 艊0ŵ3O\xx]CO^8uq-X3 Ũ� |"�O2i@`�A1f%I {t)Z?^i@ 0@MU1:hFP ⢧;Hp$u�::wáF28cfH[kAK_r Zh`8<!;wi!>`|o ׯ J%y4ˀ"qDBR JPwx߸zy+<c9 <`(Gue>Gy9E f^f 4#K k�>L@ceu> @t$izaw߃yJhh0qZy{k5FTȻ]<|sۊmG 7~y*�DLsY@c%aDLbd2C�ٿ巺C9#Ho@p.^81Ƴy%U :[~QGUBc s+M1?Ϳwhй l01v[/?BTO}nvr?g>wݸ<_i؍aĿW,>KZjs|;?gjX=_gO~K۷.o]I2�|<`ヌȉѼQX2o+WFjVl2lG O_o\ ñL]!,|N0V_Fr_v>l}} {?cg[bsG?{VPN3ɶ(_.زDkMX9/Oz"ڴߺeWkB9�JqfN=C5faf, `Jq<QdZN <sy͌zw7^zk[ý(*B'.<;‡>vj);/Y/-U\jtqq}/} [/3 AGO~}MO}} ӛ{a$j@pʹ!‡>~'5ܺ=ٺ9nO<{XnUES%I߻Sv={!KKq@80 E fgs)3h,ۈ˞#;ϮmM ˹g~cx/6i4&[>C>ҫ*ҽFwq^{qG>q`'ڼ1IMO: Ӛ/>kx}x蹯ҠpХ}Ŧ1JpfYGcKyp(Wf$yVKlaΚ 7}EI FgZsBVn\nD 3;WSA:3OmS1C2�/2r=%Z[6<,yspq;Vգ>N~_skK\sytt$*�VOuL5 Q3z[b.g"�t~/uݜnÃ<O=ҙ }x\_lRye蓫A3'޻zWQ4e�{DkY<crXfkgF8ݼ9>:Gäqy\|dn>w< p�n^oaaTN{a49RA@KC}}8Z5CXuPudZzU@{Ui޸>.#3 &4vkGA!)w6C3+UKOVD懟\ϧ'>pB&]J)gVյr43 캣|;~к?gU/\юX06{"3Ù25O3Yw`M<ڃEvj] +|&؝)ܔN}sAmm篞mw/f{[yqNSA0WdžUeETdk^u708wAGh[aM$0Q�hf D,}"6"<wA@A'RZTjJ2+"<x A}}o_5yr_ ,뭆<rT|HM޺~pf9Ȯ<x_)+W{7^ Gàj|dҌPkɳXGc$u8 xR/s =wI*�J3patPʨ]@Sf �G�$!0z~4q>Lh0!hD%(*�ݔRqhB >E M�'1ݘCRb<pq}҉i,P 0Z1(JAg,F�L$VB Aw!:Hpr`tx^2yѼK.J _@ "|3#R (=Pbd NS7mG{HDoꭝ蝸�N]X^=ػWwo\ۼ5:H*BuDy c!<+k8?OMbj /n΂Jw%e??2DDDE8Y)D:d,2dd"R*?0cD؋O{jj.PEUi$?rwdr[g(vլN8O8?o0 e&+~Ck[oOOy' VOvVւ0�X>o?woAe%MܙCA)o8x__'~+9#08h<W'tkO͋�5nNv't`{Y،<q,4zr_/ylNzK_߹ _sDj<L�'3{C7Xnӱ\^ Vւނ3>ɼT-X\?~x4n}AC|Gfm \N`\Uqu> Bdwm@M+{cY$x<[Y+a �JOMXrloJC` :?w?qvo' ²T'h ]z*(2͜Y3޻>žNuNe.đ:c q>;7Nu~.\v၅ٯ&L6~f6.nYZfj# XVYid;49Rd͵O0 X\n?~%( �ErXJ’_uF |3-z>vr8_()Y\g tʹ^4%oDЋkoXaܛyUVShA\΍]~k*~[p '~vncKi|tނ7'M/\}}2B9@q*2vT_ujȿZ'>T}m6]@6yNx[!;ksҫ޳~/ӱb_z<7_ځ~=oM:n�◾iީst7!3Q{ݾ<j{Զg9W;* ^zv#?z]C?�IFGIn`T+ESv ֕Gf;J@&hkŋ+~7ۭp5PUBfY;~G϶[ՓՓ6ӉfvK *b6.Xhʝz CZi#ODD2R4eV7B 6mof߯<޵VF<~d<rriMk{ |ݫ>!I X?jzlQf[SCY ԁ34% lc^fvUiO N( aj<E̚z$NMX jA_ b),l;&ykU[,W=wU^Ȿ%AH `S:}�U1)rD @ LxV:[SON/�,!ށp_1a%�Hc� @hRJbBO|%N$=B,AkH@0 # 4ҭ9�N�j_�Xg2eFA#;_A 2j( @!1iPg@Q+d eN A@ A_hdbDO,$IE2ғITgU� :`uL1`~4T'G<" ʼnR*5kZDd$Eff Z##KȌAMD(( ~Dol-D+gG:gN?nݎ'(8|4JYkY i߳3Rw0O[DdF9I@DԨ`Ԙ'TA:^kލVf8#}^lc=®F4 { ׊@VKHUI$3e+MO}ref)mQ~WJ S%�|>RB.rhWo_í^h{+Gd ť/QLG_Ɯ#3O|`ޝ.g]ɤ=FFX|Ɩ<:iR&Mmd^xpa䳿s rsU$`$ Wv`[d]_=w?O�ֵGF*Ќ#QM.=ճ[ 6M<p �<iڋO}fx";PUP� P}X 3˓ZbQm zղsN$}G޽2�Qf/,,Fs g~{`7z[sK+cl5>,͜]_Z ׯi2q?n]}{>ʥ}/NW)c*)9Plf'3D[֓tEHH-Ēa, AUL곿w35 }->ɳV]\!c-)#ʄ#ʻ=>hswczqBǗNBf6Dy;ꄕn9Bcz+nd,XMѢ̼~}75Dzs9Ynn_Ԯѡb lGs`7,ƻ FjmZ*1 ?zYz ` Bh𢁍\ULhbө~Aif-xg럻_^ d/>e!,  0OXZatN֯N!JpSz~S-2NI͆NGSm_)SݳVNt޸|>܌bu[/ FG<�ϧ, %`# fjʲgIq2J^n&Bo;uv;w2J^֞'>f۞jWp|%AOƑMX:2`k1 O9]=8>֡NW,"⽳<߈58Vn]-A0�YRT<b\"TUu/*B)Oh4UdQ5ha �k )r nb?nB*8¤VX#Lj|W`qso tGl "m!-D6p+$6VipCAYlnenh=jiM'52Ke RRXV":ߘ#�'ϭ<GNYTwowXľ:N2 3!R*T:"7(�P : ?@?CݞGĀ MI@iXU P ΑN)VL2f:*@_HgP |0@� ZR<$LG<$bք�R{ԠRQIg8="@0�D�ʏNG.pPc~4RHR+�:FTC"R(I>@IB1Jbfɨ�̚YkJ�Pf.εJAK$a_,%1|-=W}r}<ϝuXuӗT$!juO}(3K8$TdfW y雱ekȌ A=Q),G fB(QX ,f6ILnzE߈#;D�8M~WdgZӖ+a8R]XivIX2{n>p7`oƍC.RbfaE,q 0btb^bgR"T}\Sͭoɐe%O؇7?w7oM˟s0U=`)pp̘�>#_qUo(D(G gm]6"Kl6T.r ߋ˃7,!lSu�nhes5S6I_b-0q4o^X`7俽ln�~g/_$gv R|5s*΂V8sH3ٸ0ke͠J\bT^~}n)yof 2$0$_8;Xyv羼+{gm�fR(cLq4h lgghoF,l�̯0xvvϥHsn4vVوY-Ta6"3G?QHkxc!XjՍ2 Y:,:T} `@<ew^`Ƥ[*:Af!E�:c73y{Lh 'h`I:tH^kxyj7_=>1V;J]a>y栵ƂܣINƋ%0=j[J Vcs>>sQeoieFMoG4AJ<nV>,fiyfh:w 緇8Jm=!Q Q4tmIa* "U<A�ځ4boaZSEp|SU<`|KѮx.h\+&56 +Jg# qE(Bj'hv&- ,`;cԪŠTI`Glp;%B*-p !߫h`iuD )L'JF56ƃI2T��z?#:B K捃(j_`$F(@}.z~4&'D U:8DG{קGpk8X?ڿuwhýÍ0:dO-xxv `B"BHt0?5ODyIx<#�C\bZV,Ԡ R�(bMHcT?MI?�q/ِԒyʠ2IY`^@Ě҉2Ty5&�JXi 4 "i@ �J�Ip0}BP_tD7'֫7 &XAoN{K?rhD�0-*Z�Kٌ8(JD("4KDEEL�ce X_SmcWP U�Z�JL.pSg,QT%&وpbM=o<rim7A?_yfS˟Q?�s_܇<`Xp� [,~@{HU:Jy;jx=`B fC3faqM *ZguO|tͽͨI sK!M[mmOaE)fZ 7/|3o{,PCynO}f _à0scl,T(3ebcɬwW"L`/9J/|o.96xb1T?TwF|ߨ" 7�fzw#ߺ>{2zE[>{ ):o۶?w_\Lr'MW}X 9ED9&ӑZ 3ۭ˓?Gw*ʈZ#q!B8Duyӻwx~d�y9vg7]W=[!TMb-wkʛ@mJJζY\.eSڹ̵7[v4v.j7 v*�,Ufx>Tѵ \,ʱ.>4ӊNϮOFR)}mɩl0~^R"�엞{pek,Vɜ:1um׶ۋ]t׷ }2^|t|+[qtof5h>`~}7wUTюo}ek:|*v>=ka?ǐgD5NpO*#Ki|`&(;J/¾s;=2 XqZ<w%e6o A\> ~:Bjʟ-+y g(T-9� QLD E<ھlx�0Be9pL>a a 1D1!_o6 Hdր,<灗9kH<,08؞MTf/�@0ޓ7vv'r >v=ՊHǑʤF-'J+B�B pt<{_+\yo]7_ߺ_}Wvn<y0 ""қNCH@DDH1C "   $Bb@(w""@AC#>(] 5B!@"n^�%D+ yLʩpy~LmSe(�@D JsiI� fֱ ҬpjL !}qL uO�R1Y7 @ Hiy5`Հ T Bh J 0y};߾W|usg}5`܇>p2yc)߶74 �J$N<7EM�=O5a-9*? BKEY|FH` O~6G!_g޺41h=?K=Ֆ\}?m>&ھ]m`T#H.D#Kyv.ѿ֒Šdof;OESHWcg~] #nc,=@靸~E&t~㿽ʬ#dlJ/?'oC^{ZP�<Mͽ`;\:ދnɓ*߬"݆Jv?۷*ĺeO.l<?۞sllT>Wuy{> ՗kD~@ڦc߹/z?ƻZZGqaO^0?߽q+v7?k7v2fe{/wg.;npRw>>h4?5ĿFbO!)ݏן?꟮߫d׶t2EЈV˱o?-xX[ʍ@]' "fylW!<wi1>A?Y?ؽ7[Kéz 2m+dUuWSeḵ(Ly*}u=: 5>00g9mە_zVcnw3ײU#QruGqO<SiU䟣Q:Z)F=-fw܏es2|86)x sgp뒁F;/f13 9,Žo ɯ8RLs|$Y[X⃅w7<_^v;E J@TRRCŠ"#H&,tX$`gX;2N2$*XDObť;!|fdU0`& ׷_}O7n|kW[}K;;[7n^^n#  B�1 y§lw( IsL@K֊ff2K2S,hQiJXYz@|A>Sq'PXBG*I4u4TAii+ʓȌj 2fЬ�WJ)De X\ V$IK%b1˄qeuyyy5.E�BP}OtA+'rȩR BƷm5M!3 �P)Z+ql7P`�|xi'#$BgoiɛZI$II"D+Z`FJߜœ�7Qj \bkOH/q?oo<ҹyں882ȏ>u=7ߜշ^@_He?3[n2؏~_\ѪxQ'f,Oi7_l{|{_;왶 4wsmc~e7m>mE3�VZSyUut9+7͞o +y {. ~V'{!�ƹvyx۫9o$nGwwx֯٘@`)翼} vP}?\{J~ζV{ `O[*C\O39dy+nQDTmw'ڋߜgկ/ѭ|jazƛ?kw՚/~r0sTmX] p|\7v]d�Wʳ 16v/~j~{?7fOF3_k, C?^޶3ߙٽQ'tpc߾̗» O ;˃3×x}8"|[Zx�xԊַc@;;],g X\s.=P nks`ɪ,_gBo_woY;/7_:<>ϟwpȹ6v\`ޫ`W irhw]l޼TmA,G޸]V:G_ۃ$QR"nLFwY/2!K>{wNb׶o])a3rc77gőz;W^;l4swKۚur☌䷾y._G5W}<U8|+m+ƤK&zo+,A^:PlXvYq=O՗Vf{r:;~_` _ tpl A]Wݪ>ܳ_qy�L`0CBBlɊOi"+<FMʖY6o4wx<Et ĠV&u ~=mʱa]?@taު@lagojj�SXd065d$͘0JYj.,vz oI,ǣP&uh|m>4�y=NcC#u0VQ$Af^^!h O9=$|U£ph`g}yk~mzpokiąϜ/. Qi X2+cˏ5&Ě@+`uRIu-͜('208TJ2XűbE*JTdtfYaP ujwi:xzt4M&i4cTY8[;ٱҌ503jZbP\ґ %"#P(l 9sneq%�Lp4p: 'pc3gESdZ,yZsQ<SƩQa<bi^?lK-A)QD R y >pK/\ӯʍ EZZA9@ PhD "x[;ԊEne`uzt'q,D)Z~banO4`lB<՟ .^ NU8AIn-̵[NL%/K<؊s.տwG52ѯv>rxbZn7ťaR`GMsFR7ӿu <OkW9,:\ _ _{==fkۛקm|f8DZw!ȿUuRQg r᯼ɳO0_ޘ~n^}lVFVP*& 3nEd`|/>7,oc;O$:*L|mƗ?3g|l%|ssg`y7^oE.WPs)mB < X)'7^yŇ#o[X6U?߾2uY!Km_k|pK]Դ]pwx5ͲVOoG~߷&1 3_ݛo#wNn޿Ԟ{=F\"+2<|8]{sAu9G6yWɺk knOqZ+VX[YlCƬ>CM��`//kT~O~J?zG${ӟێtja7�F\)C(%l֌Gs{p̶~ٽ<umv{sQ~Z\`^U3T, bo:B&V1G  ZKO]yo1piEQ7֎+nT1PCڽG֕q)'Bfʼn[50L!7. ׯ~/{(yyq}$R}}+0i<{.uV|7dg鴘sX[3($;?eo}^>wq‰QJ,<\s>"b8W8|=Λ^~mt=0yyc[/H~qst~"bx[c bU_SDNZR} sβ cG3:kxke UA!t~}l'hIg#$d5_3g0\nTX"ܲ�]Ʈ!A$B d뷭1 2H a#nϮRx4щ DD{Hlnz^{ HnMvo xJ 1VHF1 �{+I�$pCpIr4!E1+R s?zE�7&!<LBb%}%ct<@H2i͠VA$TQ$8Ҷ\̬o)zSIh03K%Q4*=^BL7$@ N0t)}pPž O=?@ƌ+d 5$G@` 1c" Q2^\pqgi#(NXK5yu聇WN]vR 쬀 b�@ N:݀H0#fzᲅ R/ ZR3 %0}*z?k7xccs{pp8//@� bԦ�Y)$JX0&op<{\ 9BP)Km0pcLқvmosP`4̽l+/4=HRO\~y߽cXzW{�`/W0@^ Z�/<7[nxiAqJς@[pes //iɳ@FȮ9W䓿zki?^x/[ ^#�/?qsĭ+SW֎Oqid" c/ny$tƴ9v>׸ZRJ\@u?o~2_;|>ʸEΜs)A9i+O/m ϭ6M3Qr=H}?n<'??m#}e楱Uzb�;[^э7~>զ0޼9y;4\~yg,5:DE6ՠt |\}/đ.!|;;9 7'‹lU;#5uvX|⃫k>>\Za{[歕[ĩwp)9˽o]}uX,\nhM* Y6#11* c7/󞏬]|d̅^{>`7z;7=慜ȥ+'63ߎCtyڠK~@2hܫ�I;؆%B8po4X><7ܸ>6\[`!DJ7v*`.~N6"\ ^ ͨUT­a!*o?.>p .,,ܴۓ7sx#-*KthMw癋YlX[?u}||7AnNmݚmE_G޽B Ӊ<؉^}~ڤ\+`ӡl�MC\"+)E Hq‰*mM#IV8[WЭ5GG6v6aIrL:`{w3߿y\C8݅vnޚ_﬇6e#\Gv!T} )l~D8Uw!$#p퍣[-dOcUd!�h҉_ǥh!(r{BGG/8*TAQ|dEP҃(~q2&u`̅N{Y@W8"W4!Pq4lM6tH1ڙdU@#׶\\>?q^Gj~KF޼2tݕ@{dЉCuHL&*ɗ^xkxbԹމ3L0kޘ޼t`˾$jƱn̗N\\5<w6P 3]}+DCIR R_Ƣ"0<m%; `8=S'vWNtکt,wNĺLcԝ`f:j2Q.\Sշ~mĚyiD_zms{_<#[Eq.28 s(vݾWe/>d(To|0Ķ;WV}k{JpxeיˁmU}fnU_́]ePpl$*tH+h/цf` V/č Z1Bڂ``G !5Xh,�uM*+bGBEi+)C9fƱkA!eɁ˯,(d�vm+A$!@H+-7Db�bPRC^v'LhE  d*7?-�@FP09wnm]ø@7/H'R(N(!=@@><)JwJC|'U <zrWS+vh c@\ȓ?9�8:Kh4R:ѱRKI41`BB Ԭ)ISEa"*{ G4$HDII fNL'Iz "%q,BQ0k8FGRƘ$GNWrJ貒hkh:Z^:<etXk%XXXo@1 "1p Á K@�`a.> OV;hY {Jw. D$@ YI Oĩ3gMF`w !�"/[�0#kJSkgꟹ؝AZ*D0 cTh DD@k @ĮgҴ `f=@}dBdJp>rd2f(j™`iͬae+�_rTl5\q}(2dYǙ^\=<⊿-,AFG~<؍V<ʂpqgvq<bbw-Y?`P}7kB;/~sWqC£A2$;^aT/;tX$WRo޼ŏ~l$A:Weی6R sP3G{W>?\;yq/xӱa߸4 ? BѦh)l5pA̟>]!w-, _X Ar'GVN=y-俹{g;+'Փ)f}{s;jp !~@O~ߚ7^moF4>޸ޝplLT8ȯ>7c[r6#OpѵG$ӝ%oqG(d(o_H: Q8KIT,hwsMʸճ3ZECI67) y;v#{v x8GGA<K:ᅯJ`�ۭ@*8n(xDx[]E.gUh+J>Y[?�;a! g9#}ѕWz?q ϧ0&Ãx8øؐch?y+!"ݺ<uy *+i r 7Ҫd w`7'L!; hˀtȕ.䏦_߭f[Io͛ӭ[S;zhk(Z6hPY� 6-gyݾ#Ne8QTl:`c8<p?~y];Iy?C�p#4G2 ϦkCT7/ZG7Al-ڢ÷xCB%+~Vs#$p /8D :"T8QQ~ơ[Yvf:낇<&^^ꩠu"舠Ka2Nӱ698~5lFkXg �0ˣGDr/AWO*DN< *>-UeV:, ~:$%GS`7 ǪƴP+}b,,׻:.B?4M@huӉy敡zt( ? R$qHpl9[ ?-'7;ra&|26ÕSe_+PI䩎X%W}ƥʉ’%V>]:y=9,D :T9љ";ZcP_+o$-߸hߴ:\ܯ\D&o0 nN_3G+YصV揫Ʊ 3QPl;ZR.6{\uOyZ#fP't'@^HBV �?ÃhӰ)BA~18/{+AFZ/ &�DE�!)@E d @n|$鯝\~S_> &+@4N„ u,Yy:QO&tytYT2Vӈ(0+� $qD$ljJ1k� �QL#H("JX*ӏ0h2Qx2RalmX: ^_^d "5Npdࣧ~ =]4'L$&fo_.P͠XIcAN[VcO ~v[=q/*��D( Q/3gyÏ�w;8 IP5D�D"Њe"BGO?9D=0^MԅñJ(YyV� Dx}wZK�g%" 1)d$D,͊u5AD=ǸpكUe>9Yn|1o1v) ăŏ%`(6]h< g4 `n"9K2sw,1�wKSr6347* wdvjO*3稛!<!Ay#04E&du/JFФ\a$YKo65q-2Rp͘�x:Dˡ*W\}0PE_h;exMk8;qȋ g��XnX<A<NsH_yu82R>#hweM3PjvKg40vwied;嬃TÚ_5swvg@X?PF*2NeQ2ѥ���IDATN숅5ҸlY<3X,~Nx53@\y=l%3C_ G-K8V1֦'[ 媼'>qo&m ϷPz -x/yEKN,9uᡦgq'7BJc%y=@al~B?oiPfxTrBdtWoFW<3.5;qEYz㞨A|4n[Ƀꨚ ϕkT8RkmJv^�{4+8VA^XF[A& dNSo5CL#Or:JSX.-V}�hm5;j^^ӂ{[U_ȭ. ~)9oVXKq˚n]_'[cY*k�YѾEd8rBjOZ [3ժXh.RNI��ZkbFDZ!"e AX9;HDkk+ˋgԒ0$J<Fnus,'Nu},SV|l\?8ܛt"(ψJ*DtxGWK"x$x1XO`'\q=E@@:@xˇq`话,vNn^ݼM@\� @J:T%TZ GT2I$֠*BdBMR0 E d{9BDJ؏"-k�� Zrd =bE\x_."x}<uON_\ZxS"= 3DQ2DdD 'Qd((&;ļ\y|wH@,G\];-DӸﭜ/v"azt1  .,u{{e"='}}MQ�||JIP @w]|x)NFg/,T䑷6^,ւQ f �xY;ʓ=@ݖ̬J HN#!Pu ^aUً9I\kvX;.PEUi2AirjY9p�cqMܫ9aD:Y-eXތxbN[Z:E(жbhqb,]`R)w㝸/9D(&e<| =NF y !E-v%dj}=G=Ýjݮd5Pƚ6f9Y�C\݇;AN"ܪXJVlKmFyl f_v:6q`(pw5.K/Ҭ�F}gyEΖ!.a1 Эlݪuk1�0K4vPeuAm ung#8qJm&s@y}smn|ͭ&nH7QRا(eN܄ YYW^;}l߶U"d;"W|x~veoP6x7szEC iS1l<Js~q\Q}�{*K5UU_>:+eX%=&B|Og`ccvK6Ѷ`E% 0csi5RkW}%7jdf>>!r#yU%8 B\3>4ByE27fD ~nvt !0c([nR|Ć[dc`}wzui =Ά8G-H<`-�PkdVV{ <%'"Z)b#Jɑ:؊O/V}0Ovx́@2'ᥡ COt#~AWhNP셡NQWhZ;G U΂ba{:+ɞ'z=Ã/w`<N) Ni 1t}=B`ԚȬ�DbY33k"==<B$bR':Dl ],Q}B4�1 Aa-E šŃ/Q� z+^'Px@P �cIq(iFSqGEʣL"ZE:Itpo{"9d<s,< K'.tU:N=tW4 HwR"!y�A2 :-UbqtM< AĈ`8>'^^waԅ.Jond {DƞV Gs?lEWMXVRi�fLkU�;;jf8Xl}ddeC\!3ha71}370҅>1k x&{u<ڷyY:]g m祬MѮausqH&gk2GSR|-Y>y"D0Z"@3fopj8ײCUu:6r>j^xw>[n@2nۆy~}wᭊP85P[o"iU29]qAnXt3-!\:z0W5t+,ϫ Uyzj-DLjTTPYdnrՌNcF#Be)`mCyqykU-1P0#GE;meq;ły83٪bǹ^fkCH>ݳAr5dv0gz~yU/bPq|tv\`?hGYN؜<AY"49>OA=)8:?ݞ\$y5۲Aݍq<UNR! `FtW}5"D<b_)|#7my3w+W7ki,P1>Հ=7BC=1L'8] ꮍ Y6h| E;a0s܊ ql C\TܪZXR6dFfd"^@ ={*+�H0РdGB` i 'XJ u2*bYzA�R: %^88ёSwy[r`ktHnO[8[O<dDs@,@@h(D "B(jD$<vH{�ң vHI �M5�.0k L>jVWx*[n\^tWN=C+݅" HX{}� I|N08VNH'%D�pEP&�q8hQ=>9q߃+'|xe4dȓPtDgӝ P Ž _#kXZ@Au 持+Ak�`" NI"^{eT q]$ɔyB"`P̬kN4 ̠R !@IZ Y3pj`[s'3{TUiH0u% ܪ_`g`;[4[74w�&<PgKʔ~z}.BeFgr ~�KM?. 8MrB9Py[hؒi p,bFTP)!%R"YL8DȦtVK1VE%g!51cCE  7RvʖRiV h7J`�L`1G*d4 iU_f< Bm`[ up!F[)z!@U@ ؉u!@7!yRJ[YvPy [``!Te6BJ6vMF!ZB a?r=&ȋP1\|MB:uVX  Ŏq!p8`FtP}eqӡhtk !0);;'6ȸ2]dOs. K:48l$(EKpK8p #**B}#1x~$VS[up!Q\GH8Ufx>£_'X O(7ϯzTE4]ō*"翴mΊ\<$7A!dJo.-CR1\Ln͸8F=)gFU<8ݨXu,MlefPK" ҲXڻbYl8tG˳/VR]U'"Bq,Dh2# :ogf8l�6׍ O0[5hca:m[fga;RyQicC�qx%}+9ڵ eK\^UqfX8VbuX Z_QU؈ɱSJa66Vx~q4iEo Fu>#�6T ƢT+]IΆ�ȚBH!HB0 '%f `ÎB=NQ-*0p+ 9if%x8Ó+>pd2RT0" ɔ$'#{|NhHٿڸ:[oܾzxs?{bI $ ! `Ї**$"2KD8=!`:yhOh"O:P#O$&,Z (3hc#R=eL躜h=^<}~g-�Po8i8.unN )#r_!@ d &GI8@zx{`MO\x3kr9d̃uF;wn.�/DW _+@Q!GG;@� $#9IkYcqtD>P l={��1yZݸ:9(b||Z)Р|^uN{ %" �D@̙6:=)zmVյVd!'crm{LKS#Y_]fPazlauA.T BS-?OGSjv6 ༧5Pf!WDf Y]?RzkgF B9k\PtPBB͹5B�.y,;րkۭb,ρ #8f=58EU\]Wf!Ud 88B"ٚy^^ ,\Tߝ9޺9l"CyiE Uc77B c.`,ZLy ֠)B墙Ƿo\1YzfW~ge\}o<ql!wnL`J~EuF)Bu]߹q۶N<\j/#NcWx1c E6"<>n!.@f슩|Zu~ffdέ)rCf{~z.+Y/QQ1Eol`Ꮚvi4EZ8XU̯.l`Wx|ָC09kؖѩ# OFHqlexcT=S}s; kWNXQ#w> !N6 !*3x1P9`5r{wbApeu:;s&02yQq []}o9_D�.!)ajX^ZߦƐ*# Cq%gxWl: >� H x(@n\:HMLbF" IQ(yrShx<bxdH4>tzqhgsx҉^g!|0ƒk[`qQ11�(. ã²JMk8$O$�IUH,< xdkB[t<_DQriurߘ @R@'ăP>ۚD�@Ǭ^?yji +zAcIsn&I[ݝk/'սp< BP2~& QX(5qL<YYzb<xkc_8sf|JeӽJB @0yq~kvё}}tvk$B֨1;57b  z{c';Š{@0C8ãxgyk=$r:AGD)_m8{%jD Rqc�P<�"!;=j <0 ewl` OnVUmŕ-}Tݷ r9Q} r_JatOE!(N{PB_CwI႓K]"V>+ʱ}r9֌ü?[A,,*9kZFfYBp+riVzMbshSm6/ȁUSSEd'U(殦Gq</o-*{Η@nkvRQ<ĥ֪(VC η]RΨmcu;5`Hre^+qYG*/))}@q9)>:4-i a/::5uW<3:}"\hEabesAeڣb)j\Q!CqN* X]N,[+jtKmfrT4fС8ֆ̡(**d גY7huedmr-ѳ7ڄWDMcιm!7s<rol~ӾKo=l",y)+C KxhGs7w!1-Md2*BL)jR|n@ez(v{0sUcwq'V4AAw80nN�iM*~JX!r@e_puۖ}UH'X3`Dsmߡ WhF!HkŊlXw %W1Yy9H^s3^[j3_+XY?׸[iJe ~@dUvHKڠngl^c6?ud v>&63v~jپDo7ma?l:slrwnp`ߦ:= Jc yxQr3cPxwt!QRD+GG'H'24ȊH(cMK䉀nIB i2LƓDN_t;Š@xGhGI4KAWQ�3hţK RKOF,P�z ںupxtԽB(TP5h AJ룽$\ Ӏz:ӑ�{GD'(NvU'PH "!yXNƵN< ׯWA"5aTp~GHox 'Dxi؎*O(Aacb~A_kkr F`7::Өד{8t:D$j2 Q `8I֧ZdDGx'PG@!1!!2Lj@y^ '4ngӉ A4GG OD̬f`?fdͬYJL f*Y՟;CX5e Y-U*}d.|6?r5C%s\oD|[$k6Ui1Dn-qD62G3g~U6r9 K%_>چq)j7n-)n.}ul͵/-m71׮C6a >C!]TyYO:mIz=5b˷j97Xm=Ќ'm n?7jU_bG'z3"h9p2ousE{بܿŭfkܢ3g dREaxk@?bq Ǧn^odOmpoPzs=@@廦ka$ٺX|C!<,K_jY<|<"M3 !=A+r43! =s:Oc6t۩�[gAv/g+!zyyL%rCԄ v [ų6ɵ?.7,n qjͻW}0CۻĆG}�NZfHV*BjH,pI[=!wd)f ,s_qLg;^6v C _ cx{!!3 GQ<2h1E_v<<ED'aEZ�JMPM19XQJ2+ i+LxL5.V|s?kdD d!H=Jp&2JT*&t<:AH1sʽ'h E@( uCHDMBM EH>!jtNN5''$`q⑏ thĠ4PG{!@O%:h2 4 6~E5%1'JAu8tyK<t '  q498L!"%NyjD)#ybg%rLJa<out+|؉z2Iqƃ)BG$}8( 'p 5*R"= $(3֐ :AC-@A:]3!$&N1kT" V;{ I֬})E 8s^p=is LfvNX p-G8̽8fß7ˮ>gXqr,= "IU^gXO$XȹNO},hsenq2!U|O!9ï*8VDvf rEA޷*Z!R@&B\8 0(E60†iݮTp9A>SB'4 ۰뇼eDZB,;qU[Xi.kgYZY@Y*^!p]6U4"d۳m\%*n=jGdczÙχ^090y;Bl{EH4]m#l;_2;d~\<r}n:T5v:q9f}C!DN{jӡJβ3Hf*blwwn_#._zca f><-J�5څ& dۋr ,:;mY|iCiBsld#"s|wmܷ' 3m`4{uX7v(]{V}{nW ZiߛE6T W]V&oOl +fh2{D2ÆnT3<Udʾ쩃Θ劥5TX /X;s֨ΫFA~["FiJҤJ Ox4Tq<X) $)9Ad&i%$EOHeJ+$}T {}@?�4Qu!PTqE*J0ON;!*Qك=;�$4XfN X'd瑖>� . iEQ&+"< <#?>ЊI#'J*S,@DGH "@b;JGI,�<BxHWF�BWILh3J=Ȋ+\ ; 00RM(( YK$QG$zB DUX AÎ֜ĄZ&SHF" @iҺ#z(#-V*AҾAG{jA5IMTa8< !wvz"֬ҳy RIf5kPZ+ZL<OcE$%hE�=DTRJ)@d�w!" �&R�h֚%b��@HMH^4 sҜ9A#;#ā9j2WlTnEm93O5)L̯,4 Ti fO�P P 8ң0U9q1T>u0)]1L` b `)�nsE0zlnkO71e,ۤ'Uzy96JF}oBcMcSEuyЯ-|מPg6i]P3�,N!lJҜ iff-gxgE@͔*XVsB#R@H_am"4@({Fn:@ 7:p%ۥN _xBFVbLzyG$ r@H9)]g2!h o(|*Bws}ou,ƑKFHƮI|+6m:vgg? `r !*!DB�ʡ.E0&H؀m.r!܊XyRBH;xɋL d�U6Сcg> ,EF7)\O]θtȦh;,j)J`tdqmG0)PV8'"Y\Y68�;$X%ϯ#]k9`3ϲ< !Pu= !V̾ۍrz 'H,XH`R BF"%BЅ|r-O#42vP17Bs$ !#\@dAo~O�yaBHq Zc%V`5ɥq jTimFǺ58 oMds58Ep " OAa u>8խJls>, <uhR}m"ׁU3U_*BnUR7-<R ϟDy>V//5 !'<V}X7-`S4`|s[R RcTcY^k.h/,E}*#H.c;pF7GJr"!BU�KZ $1OUlj` 2QXhOԜ Ƃ$(]ZfJ! @HP'QBw^=A<VZ)Pő$:! �1`@̠#03kMz|ČLT�Z2 3jaM L$fi1U ZaDx G$<.a@ړ @ ZB HB0XG MI1 OK- ֚D/�RIP8�V%0+ȄbP6bC<�RR너C"d�tD$<X0t@ � A~1{ :FRIőJ@kB'RRF N^Ǒb5bbe8ֺ$1AbO$A�b�(�H}_x2R5"xZm]uﴷ1*Q!of�hCD�Ӳ�fֈLrD2STҡGiͬa tJKWJdtf[K[AX+=&/R9wܞDvܠp-e%BϬСv^s`z#W>&{] oQN 5]k٦lvNα@Z5gYzjٻ<6SF"Ķ\<>;c4ThT}6Bfr6-lU =s8ViD6- QX۱(JƆ!5{a,Lcw<3 k0vAz`hf3vgEECp(0mtȄCΑ޳˳df tbds͵�+,n>[vUϿ3=pw"7Pe[oDv;JoQ1[6fcg6s~p�N880SX"ű%=-pGW̰x$+9TH#;h~ :@~6Q{)3T[M3uYKX*L1]0 [yZ<APɇ U_FD'\hNJj0CM4Ď!28}Ön7p/<rgPV_3~,OT..3cKY"F)rCmnpʌdŶgd|<5BaQ3fԨdH1%1D#R2(X!+S ddGI2KL"15(D"%k C F "{ !4� 5H $X0@>y,40k DI%d4@(|JVSLZ� %�*fЀ9GG@͐$R|x$SBQ РV@DzZ &�=�V�Q{ȌvV�5"@z4RafB|� Z#(4f$?�h`f3kH@yH bOkyfA�VI|AHx#y�fBIB  QJ%@DeRXqHSYJY GDȤ]�Y �H͚5�!v Z+uiʹSs}HzdH P�3)43kPJ �9IF0hry8.R9s.;qɊ5eFa24Ӝֹ{:&UyN(P�ʟ+�lȩ/YkI&) cSߣ#x|~0Ý:c⡾xv"$h3j&pY,Y;C\t!/! TEuf;핃iŜX T JfvLW@nul lXd&r5]iw||Ax aql J0T3cK!9*J.D. �1�iY 4!F+B =P۬v!\ncUPb+mg(@c K!kJ(q0F-;m"T\BHѓ:BЉUƢ} 34/BʝЌ A9(eyşurCU:HJlTѐ?fC%*^slf&6nѡʢ5Ir%sc.L&$"] 8$[*BFE3Fg $W'mlȘ :4sp u_"-Wm +9My!MfG)Y.FU6[ݨBl7 ]U}P! )G&]o`X"T_Sd16X/")MBoX=G/imlQȭuE2ܗk"8T]Zdem՗\qE;oVW!hE՜ADƱW` u7ϯNye qd׳aK D Z4s|Kq% p B^Nn%ϯA 53VP W6B2qN\Sfь8<ApB Gv"=3lM}w{';d,{o UOZ%D· s>`gL[T5B?g,vХ4�3ÅE,)3HʠY(15HN% dB N$V@̬4h��(|�@b�Ȉ +$""B}"!0  �tz "9sk�"D@L@3<VH  G �<## FtҬq>cR2HH ֌%``ff�X3�k͜)"\30 �5 H(4Bj�&XfDB(<`J_,@V5#+d� "<d@*=-\묄5 2"az`4R53�3i81VZ11z 2` DH0pQ`tI30FМ1\fM)21=4zݯiE,-U%3N*aޒJ݅yI0VX9/n)6oaF1=!ѹ?ΘoNU$^Y0TQ;LM!i*=ſS`,_gU%iۛ>7_Џ|GNiw;N{iw;N{iyg/4ˌȈ@Diފke QҒnw8;PhOjЉTZ)XҬ5kY1+*D+ndF � ް $C4HDn�tk*0w<?M;h)5�hD@D �Eo f@Y$VEj@@D�`p4?*I �B @ H 5 .+b` jFP&iXt5jF 4# B ,�k QFu3rp&R25C�@A @b i /â2G�$<Ӝ4��G"A.ǁ:aWiG !�7!DMyj��&`LTHK:Uw*CK`IA'PeE}+D {du 0�(Ps̔0"DOx";K�Cۘ�fGf!Ȩ:1QUKSH�ݲ34*V',LeAKUbQT,(yB `PR+%I0]o"/^:oV[/(?)1kY9a^ݖUc7&3 ⳲШJ X&k)mKL^[.kBzK2<nFB76ZvFuQW-&J{2 XU*"K&6̭em9B(A(wPUqWepMN`Rf".)M`E6BM"Ao6m+c2Z!4k{Dt-2EC/,s=.BT0 j_TE].r4?\Gɗp_߼~ڨ}o8V}\Ca8r4(] Vk/}c)e6{J* >2v̀yH50RVWo !V`nhBHUU,L+b›@SYϭ0:_/j. 7`+;&Bp>p+B*W>*׌یFB8$G·6(!PCKm옱8}P#UcWgҧDnc!s�Ʊ0v^ c!:˱( Y%JГ[I66͕S�F&ͭP0.3l|A^>AKg|ƈ*T}Ɔ!vOM^*JUf+Z;j<L;[^yɇ 5firFcT!PsP} y"gYa{kɜ!KR8!l= VUDY:PzXCsJ;t،U<T3S?K4{nT}2x>#>3T׆5l'\ %'h:R?5eC �ql U5X3 x—iN vdߣ-Qg8Jڞ4{^-W sm%V}pA� !\xȫ<!`"$:BjK'd= `,=�Rr7 <+pIƱ&zǪ~+_ 0X XGAdqaR8$ب<+>MT?( l:θa l0m%5F0IŴ0Ju@!Q\Oxt;A_xA*H$r4Ǔx2L&$ a4 iQIaG2TD)5#h !S , F@(* ml 4  iխ"TiE>|TQv䴇i38X\ hMhb$&d >B�`<}2�3Ya _bf!4F<f#2"3JD>:.*GQrTt>aHO%M@ LR�*CN"Ar-~_\HY# A)P dKx {0Nͨ$("D{w"%kVR)Z#'y `JI% 9[>;oĐuƕlhNlB0d'Q( |**Id$JgKHyV\� !{z$�),e%\Pf)v eg 3co2 0~@O>,b.QNMiNF<|hgl̤Y} O%G,Xj)]e3[ |g{ tUO6OFb6NF21r3JrXq}C\ݘ/Xv˛.iʍ2:n'Mld Co0O4uBEX9)#@َ> !`e`~at`b᛫_}v곃5x"Wbqv U%S.KYb$*2geڣFLMTXv[g,5&l^*H7f46(u` h86UQ!- Օ B= Xk2y嚷RCO2c Uc7'B(m)qP$WQur `.-b|P8DfO2(c[[ٕ&.Q ھ"Tq5P1"Ju:T"1!V<#< F]^IVj쁲?+qCK:]q] 7 =vg?SUUYw`wn,rq6_Cy~*<]. UTX%o Bf4 o҉;0x#B,8p ܦu~s5ٲ !`x圳!DH Mi1~`1|SN`1k'UlTck<#ڣ0=A63U_վ;=Y,u8Usb( !5OV?T8>,eKXOODq{`xh{͵BmW-7E7G0t>3:ϯܾ;A ML+* #`9盪υ}c >FH= l@A߄sscQ  h5wa FjQJƼw \qCC5x 3džLn,_ {   "D:oJ)T9ZqYJXҨ<iDΒyat;e9%TJEL==`<ηU0c56 Ga٠l\Ϯ˜נ8TO?j"W䲮.&k0kX#O~$atp0B:>rZ>xy( C'5k��gim}'~vW-URʼs�X# `z8=&Kr%MS`v=̻Wup8y#.O|HHwW2of쾟�(X̎yDܺ5ae(O ٞW,\skR�zSH;8dɴ`g8�t/ixzǨ" [ݣP$}0H6urVypn/ŏAt&Gcw ʀ`\ԡ( �;pBv=!$;IwpGj,Z!>sӵx@};FHg%xaJ|72%x#=yY3ϋB6<\аy.2Aq Ww-œCkՁ_<IN>>2 [֋3!`8,<C648T{[8#$Iy<Ћ>_C] 3ǛPF+;Ӆ,]%!d]<]P!2@_:! ZD]Ȇ!si>l�P ERt~9!B7ȝ <Eiܢ3!Z̺d:!rxC>pvl?X| KWl@qhyC*NqP3 fx]%Usv<TCHFcztD;2mߨ] gt~`WqO BlF8-?3f׼Ț'@pByg`%C<!<B BHbrRɏlB< 6Q)X噣7XDG!DsĞĿsE{9:pO¨s9DZ=u0˛6R?6t ?@H rꃘet[1x�1ԇ0\s`#mP&7 tU7?qZ1zbT%48GwWF$#d;Ǩ3@دsGs8/r"'RYϜ.bg)CHl투C{WR*)Bc] Ddin뺮jn6fl֛fl۪nhAbnl)vl�r?ΑQ2`A-= >ڢ%M`. ^J[\KZ]^%fGmG' '""f^%ڟ�@ƀP3%K$ "0jlz\zYvTUS׍ZK�P)B Y!Bb۱D4M˟UU׵i'HB;M2 zctsܭq$ ш N�+w'.31܌tE;xԀW ]m�zIq -*>4bxW s{1(kPN߳rӈ L ~of$K3^(Dg!$@mŊ߷8G8Bp @ILDXHLy=a@#\.G#xu8p QJ:<`g}|7*vP2~=6쐣rAA $Ze8=CEW/n0 n!@E "BYe;<0] #uDH4c`PBG!B&l?5Yrl/GHO]a L`71@<I ]:;ED ]!EAHUkG1 N7IB!Bp! 9!ĵrPt="bzȡgRC !oH)v ht8*"XMO1OUC*O !6T>w,a8. | �*{TD>,u~W] r:?\ɒ,WWlNR4hDe ca+&}@D,*.C!$1":H/u@<!k¨/pP2Ho85L&% w1Bc+pB=]>>I(.0jsZEϘ #^HBl&>�G/>~֓>n/ I BթHFGs [; } :h!]$:?>L@$e.ٌ;~G5*j>Nv9G&9<Š|l? fgN<J3A)P!~̴E%"SGR�K�F�YK]f4`CFc-ſƶ6""Ԏdnq;DWǰtP?F�@soЮ+Q (A/;<'�-5MOAu}Q/0W�k%%'RHShv Md i-4MclS*[F),JRHR)J(!B"ll,E@bߎ!hwPh}Z!ۙ&Э;i5UJ3H9~x( n u|;ߎoǷv|;ߎoǷv|;ߎoǷ_灈(PH REEES"�D`Xc4hmBF7!j%ah`�h[ Ƈ7[* ־WDBF-ݸew �@;-%@jGt8i* +;ėv%rG7alOuS:fn >@�HB%AbIZ,Ƿp|E M<�9`mVvjDT*JPB ) q_dwCI�hG<04Mc!U� X"QthuH Obh`s`_;6jp6ݖП 8ۺi3B_Eӽ16G2ܩ[Йgݴiw<_n-9tуw~:!߲,oWax'u%=B6"`!n&M`3p3k+ `D+M!BN_}{P󳹃 IӦ?£[ytޖۺ-p VL|';'  :sn /plmhB͝ DH4GMB[F./` vӅ0>.bc!8ٌ`{"Y,nj"?79ϫV*sȾt:�v·Nzn]"9A61;!;>@G|ڏK(L_7-3a EH)B@!CHl `ns K=r/ C|A"NEvgezD?k&z*rP#L !${GOoN~w/Hu>0*!"~+GHG'0_0P1C@wS!am#S{(E2_A|d"g|Juڤ!EHFCwvAM@ ɞw7Hu f~(B¨LtyQ2m3B L0L^9hTi9hYBm`_Qݙz-j9: ڸ!"΁0 NsDC:G )!&ԇ yIX=H}(3='<Y׿9>Ā{ b}:]2  [=< Ăk_t"D$wE4}`JՃ . fv0jF! :Aϝc8did/\Q0@XQ4|w=F!tvqP ]]Ыl7f,7z\r\,WrZo7Unܦm }J%p@" lam`D_!L_x "_|#;&G+0𵿐3Hq_JӘ_}^2%m%UG�JQB*Bue߿]o|??,糣t6)ˢTJ)DjmMTunכzY֫flu]iXBJU(UHPh? Wr}}] _WFkUNcBw  ?w?>2Di&ػ8HzOQH%q88t! ;c}u!�K1kG_`;|蓒h؃Qj? z "&My_4S$㗾gF nw0|⺄>ti.FWGAW7l!6 @H r` p^ ;!QI$"vSM}5pm~B~?Pg.@NF~s~c` .ZCro,dp߀z7 ox3bl'7g۰pAi&EPcdRKl&HPanE"0EsAyKbiO)u!.wvW#$BqXުwﶨQB;B0E2Hҽ OEB(EH0&~!G`FBB(C (0R ۏ2r(�MH(` O)�}0! řtq&� +}BJMGH=&z9kd:RxgP?!ȍh |ve#t~RaHR1kOaqH үmsGy/ܯɉ>!v#܇.bl LQ 49qCh\/Q;9s<{)?R˻EJ!{D1\?R^#'(oP/s wQfA/6݀>E{ԗ�vos^/ۇt~P!@=SɫX>v }*j>8B<6| !?L2 :=$< HGs '9;Hb}.Q;jNwZ"Cdkm^%K`-kԐ0xV%)+\Z'*R}vMΰ[EBeiGޣm8uJY@K~𥬪b9OR _%VhDh BFO[R kp8:jF "d%@ւ5`m#FEmʲBy ߎo�@SB;ki4M5d"Q@i�l 4@! du~iǟ9? .�Ei-lYC3OJkw⼦NyyuI&ün`sA1ŭclGi<'M 1N ْt %|M�;;c?QXvȳ tqϝX&#=ǒ.c.Tsmi`קF D !rP|'y4L<Y >NdD7˓ fI  wa_U].5WW"j/؀-|A9 } kkG}c�!, :q>FHa7Nd< =BDpr7|!q{ NeGHm͊ꛂ:ws켻WsvB ܙF}]d<[ojΎ,@xb\ACHy!8!ԇW#]mF! "R č1@FH3 ×:k SP1$ !Yh,bOkXNt@%VOՍ׳Lu`nɎ HexP0G0 `dtCH\CO1tr*+�CT>BBOP3lPⴆҔDQ`R'5EHFd zbf, H3Ĉ 獄AO}Cur *>7Iq{#Ay$c b+$y�uDA¸�B`;Gp0L#17]u@#:G@ tP'@&gGS_2rs tWcP!˲k$,t~:EH ]SFCh-Q3׀娌/cBHv9a9#!`s:}V?|58Ne#011 9A8Ƕ\F!$D s|Q y1ZU]7rY,Vr\VjYoc,_}28w߇Adɒd,Y Y ." AK@�?�AF aC8%oaZG^|d5\eAAu]]3QO!?{0 Y2I)&Td4xӟ/߯L T�PTXrWkxmfmj.rZ7vVƷoXhNB(ʲR1몪UR )diǕ;v}ˡH:D-HGۛjlId ,Xt\[X]O�_h^td:!gBm&w[(O*SYK||FEPzFЗ->,H#L88VO^8_j"?Ӫ!S.3΄~L^k~G�09 `.<mfzzuG`D(3 /*nKw_@}bgL8(kQv f pL}}5aeQY@ 8EHO oK䳫Fb㯹sdLȪΑ wC^v0!s`+{O$9RṧfC]|{{~g!{[7G0w/a!C؉vNA>:n02 JvvRzC6N{?ė/oNމчqGpC2L�aq9Gg^ϲ9C;6at+ .(vH}`9F&h^8BUh!"V)|6iz(Tj޹h],;9~\AO[#A>k_j/tc#e G 7HKa&BEgG = 49yN/Y?qw2էU1Z׍!cA I$w+Z�I"'Q �!P !~pVvȖDւ0�$J B;Jaw%_Ta۬n�}֕ϒЀ2qԞesnEؾwu? v=a��VJKϮ_",w RCT2<<:6FoEeQ'''֚ b*u(oM[lMG B(TQI9-ʉR $4]y�B%mg7NjV}5nʈ{]�PwE]g?UJ}q&|Hֶ^@4( �hݐb6+** �$Bk(h�Qn<n ,K{773u(8{FZ݃v|;^?/|;v!s_v|;ߎoǷv|;ߎoǷ �477x'Q0AADdA'ݬ-Bh"ZR7YFJ) B*FD%_ vt%WvJJZ7ZK!TRK�eȊcZ[1�$�zhI,X!�l%c!`;fm@MQP嵄b2!(vM6 D�*D�T؅nn;Zm�YK~k!c-XPZ"Zvڱy D;NDdZ Q3+H! "hkmnlRQEOkM{%(U@XւÃGDVb)E u-5V  A A ,P%nr H6ڊ˺u&EQRi-I% UXF@H +}-.Y(!cp)"ei+~݃#a%6<o@ DrN jkdRSRJ ()� \ U�7pFYwN`7Sg\·6C͝(v]! ,v._ 2nnÝ nWxC?AyymX�,l{9{Fk}&}PE|-^ Pљ�N_|˲pF{?d7[ml4r]B<w7}{Co�v\ɘ8N6y<lv>·ahנ';=r !L ~(M"&39BEG |sfN°ҿ tg܋X n_Sds%շ=8b<m= {P1�mUH8'5 !ݲ�BB- ! ]YBݜP1<!uIww&F8!oap?%Аlc/&gw;9<&C~g67DftC&=$$\Jg,۫{HAwvsF"#]c'0ȱ q8; |A_˺rR!ShC' ^Eν*?*oa6Q�3 ;#tW0r/;D`$! (vL^'.r;B"6Apزk),`愈]$i$;(v}?3J'o sv(9R7#;>.PT+CxR_O$Kb󆺰Cc�ssLMp$9S_л2T�]-DvI#8λH0#;~"%N.u0dt>o @k:7pW u~?B#Bhc\AWixPw/`5~+=Ώr4i9&iҠ# &Ъ}t;WSDI(W?*rHMHqAXv&ygי\ S]W۪ꪮvg@ѮĝY.V@3# Q"!5F76nB �Y tT[v-& !�@C Mڐ1dh펁QܢI~I !,!D!]EcIn leY(xO;<Ё|vp{7ƌcAt;a&vF;U?"ME@*@`i(TJRc`ض1R*)DBȢ(\=MwB4T�KDdm;* 5QDauڍmS _$(]}/vvv㵍۪^ofڬVzSmi2`R)dssmc'78ؙoh{ Cn,\cl]Mc-B"J lg8TjskSt] P I`F|DIdvō?%0tG� x9UB]= D_Hbgapn|nWlN1wd?;-5" X&qol蝑A77 b6"E`~: s:(lt"ݝR$9Pæ ]@91BDvhF!ٛ@ۺbyw wp h8qK3l r0<4!)?AuowQg9lc#ę!8 0%)")>Yʀ"_\ۥf�:('6`ջٻ!ToTӏ0!g'ٶ9Y9&HCo&0*Hcpug68G"~<FCrP+gc|~0-QJPbcHGH5chnSI{C1b�o;>8 ),_L=vrHeأ3>jt+6Ĩ^!!㹜}̧AsݼHK~"y_rJ!<6<B ,sB&gc\ ;+.!FHH0O*ԗ!ݼ;G֜#;9aBF#IxMf~{#A�EsLsKYO}>?`O v{&L):?wKh 9\Α Fq�93.Bg{2 wP#SWqunoc$Α62>l<d.�c3 a~��v$}v&?N !Bc~HXvtW,&OCƘ$T�@` }c.-BQv]?:Pr8@UBA04nZ , B4|ᦵGDlj;0,%Adm "cl; @ƘnvmdTB ƴX$@!؆ @V5$3"u"2JRd-h4XlW#XkAh|ZfårRXk@[-eaP;,NFz=8%ZZmLc�BH  bw!cVjEY4VJ !-R%pL55CDio+v^>?H#]019eBGo輘?Q6Mj CP&67Y ,~*</c.זjb&b'< exKcv5_dWLN`Q'xrNe]&G.fopw6C!8A'qe^fA.gM!mi|0<#5T0j,mzlGHһc+w<;rzw x}X&(3`QB sLutX8{W!2i !>}'c#>tkk&8KGvLp ƭt<BE;cR x"Ȩ^~ss@!C P"Xx 0`{%@\p@x~9Fk"�1pQ{B8Ed;sv bnF#_a}0 $C^=K' 78ĈxE9vl!'!] + 3UaΎKP, BPʳC\q-򤈞v s*9D:9;l"|OztD;:?c8~ ,aoyS!|6OVw#|GHGE1#ICBGHר_yS2+)tw)H9#rE�g>=`gCz"9ĨH;?tL$20*+ Qy-;^ci$ rl:l$~81ʼn$N}ah1G}0@}s u0yHcGY HQ&Α| Fy]U|;G$|t6DʸSda7/|"#du)BOunInK<c9B 9Gx-9K/no2�{,wI4җDK3: ]M"AQV hAD 1(RQP~XBK;,$l}lc!k4Vצ1`A!i2((d2L!l�5эVk}0Vu6US�@�cnֶ=Zk3 [OYV t+�Mh囹hv-�voJZm~릩n(I)$ ZR!J (;BHQt7 ЎAe7twժ5�kvU*\IZۺ16[c(H(1{BD!%m#!% a�%)@ !i+X JJ CTk]fԫzޮrXm6njB(Bv PQX*oR*)LW;dAkm"D-d)'GvL � FDFL_FS @eoqSf]4dɈt8s3OEdS>d++70<0 V ^[t1}BM̄zQ&F\gl~ >VBAu ~Fs !F Bb%!Ig?S xSt:9vDXv9XzMCewk8+D+ezNBZ7$VN&y*�$B} ڟC31o4 #v zAX7z]�|8 P?$!@؃"~Ba 8;b.e_eˡ,B\ADZgLC9R(D_C}@!o8w[b`󕾂{ϣ;{_Ig+v*gtP0c&Z|y;)6ݐQqأbcC� <�!s sv黑%}7'eW) r8D=!B+#+PaS93@f5>"$ C@DQH0Ӏ}4�y9^!=]VAe{xGצ~</8cL22a@G˦.}y$C}c:(mq7xM§ft~sX\wO}C&y0̦ "3gA!r "1ƮB'ٛ"߾4)+vG{2HsLTO*2Ui #7E9NOq#.;H@ҟ) +BR{?Tv&A -*v`�qD+A�^�P`|5Y]( !P daJ/kbq#,!4֛6Bcj HDoq8D (塻l7n@dZ6ucDMʒ(TR; (�%xh7 Zmd>( Qnl#*%BZ]်-]SK.&$F �*i5F[iD!ZS7u]] H% ,жav�T(n@lPJJ͊.J�ahho5�)նn  KB Dk֍Z, )0ZK0Rs;,%E"Z@�nRFm[lQ(SȻ57ӉCM;Bq}Pe o ̵"+j-o~N |~,vTԲhVw+R0PJΪGa_ˡ>X<9I$P.k`v]Xp=5gU6tsxps7pG: iy&ݤ.%mEL!7V/jc/D8pي(i -Q~���IDATrI 1xybr gA]OB<.k5Q+ гuf "$dTDml$Eƒ֞՛#ΧW"dGGu͝F!cpX5y7؀4#.C  u 򵕣e18Bhgl]}1BAؼygׇ/0x!?7~ׯ#1zA#2 Uj[0R҄]FBݫbg q7.CLNvs /So+ Dg:?~g'fB2#WcBg '|ް{Bvrk/Egubt6`QiQILcÛA7A {sl {(fF D o mԗcTA>t$=<#|0BWō `&/ݘ8qt$7?;_ 2ol1w.y�B*aOC9ȣۙo#_|#%P޶{�3a<B]�dw%ht=`ɒӃQnLc�얫:D⠏,ofɒPl@;W@ _8tv>T�Uv_""AB !E,JiT5 L37np/#D;ܳFmjGD֒!0I�JHi- + LHX,ïR 2V~�fNڅ c, ZkTuSkS)%- ,XK` "*U!Pjd D�pb@k-TR )д�` Ym@H!$ 0Ѥnj6Z�)% Kk%C$�QHD-;JʺuEd6 Sn7nwv4RFz[hQߎ MA)�&\מ:ԅ:_z?v.kTݰs_aLX� G&ϏJ]}@L1Q.b JSBI(i^^ș6c0_bw8> Ź{B*Ƿxll/6J!V�Ư5¿ZL>}{:o̚ c3BHz[)}mIN~"L*&s~1yw�S dѕ[koUGoؾ 6zqLf61 A!*yj8w5 of:zTpg�;x^+y7W]B`\YO|¯ɑso[ Wc5/zl㛺_#CɡҘ?;N}Y9#j ®73fZH4m2?]z^qQt0x/ ~5J6OA3*xs5BN{3 "QNMN\6U3ݭ |GR*m߾ +=B x|R{\6}<kCHP8\ B†"*9dbc!Q:yt%.͖mËVGAo~cƤǝ#2D.269l�AɇCgG^ҠѣyH@X]�tox(Yi2!r&Sxߌ%Eu~>LNuiY#Y:o df20G<H}cOn�s|L \A B`=0ҟ#>82*B dΑ?<ؼ1S,B1I2t!Yl1ၜmE1,77Xa`* br. h"/=,Ym!-K<9;|篿vrvU5Dv;Z0''vv#hhI l~<1P5ְ1LeEH;8ReQ )-t+2 mUrBCMc* z:+Sdڭ<v'm7ieADLgRM�1Kڶg8>=|WNΎT![FEfl6- ȯ<!QJHݬɴwX($?UZeaOʳdBVH zk5 cTf|>Mv{A7HlvWژz2_ӳr"tg5� )8I9!R4Z7(gBkkgK,˻b^Z !DYT)EDFkmkoǿH6MTU]7.]fF) hN:CA? [~b/�[n}Wx9Ljߟ<�3͝x.;c'[LU ?G '<=Ucg>7wm횑Eѐ'uob2؀@!7x=ֲ) m@7�IòcB~m?EG&,`ne=w!^|7'c=.b�raōAGEس|c;!0o͔KO0F6y* Dyl$2C^ AϡASqsnXS?Gn.#Bgs͖4xw:>l#>BW#$Bq@}!ٜwv{{=ߌI,GJ1B9!̧0l0!6 ^l<p, iDt9f1ϒ!N\9b 5xԌ~GSPu/H*ˡD9/;#dV?dCu>|q:?@1ףcQzHRNp|.;'~0;EHvT#_!z^sk~317`;8 _"'˻EJ!{D1CzkynmW'9봄CHzUZ</92茶1`.TǗ{abcA{ldB:l"$L5LOe_hEHyJn`=0!Ňx�dS=x# ?16rc2*DAS/I3f,EKÅÒ5A(dR>:?/�f֓~wW( "�KB r6ΦrSoonֵ֫PXţzQVnڕ@W(cL4- 6@JRHi] GϞ?}h}_}t^oeY !ş{Ӟ,t6) VźֈALDk,WtMU P~{h4DDd:*YlvS5ucv 6nlk[ʱZ[mP!Ώ^~vttzUR*"2VcQækv!} H>]z h4Tً^j6Z$H�Ģ(ONT,7Vvdaf<{t/GZ"iB@�ul6j^RɤRBؒBfIX6M hЁQAl@b~w$HC޻ $ )*~YQ'qs ݶgq)̢Mߞᠧ,g"Y)ȹW͝|<WxpUoa>0ψp@`v!$MQVWބ]xOBzX(3Ev 5c+fMpH=f3e+gɩ .q9N&D�jO+;grW<[0Pcްzc\P:@!9Q gr9"btO:Kb!]ټ~t.BdS}Sa\{wC:AY.�f4R@S�@(>,b�94Vؼj+Qqyg�a!zUQK_Ds_ 挳B9}&u䜿ΊW~Eݱ"0* ve|Oǭݴ8/!W?t&QVPi$ŝcGa~hBy%&ǚ$␇D7)#GD0Sq{RK{o~�>ec,/8TO G#$S94v-v ꋝHor" 3yt#02&"2HcDctrB}=02O+vkhGM7r" �_s\�-Syv�0" jW[ lTr#P9?~~zqqX.t}{BA<y勋N\UU]U5uny-bіlkR(֫dmJ!MSNŋO^|rvV ?bADBD �LӓӃǏny_mƢ 3Uģ QL۷E G "clY?:99]\~ AR)$к1h]kHHAV7M :}t/_<t*%:ˏjTI1-dW�TR*I A!ǧ/_4u\^^5MƷkgnjalc!h@֓٣*%Mݐ& @_Mb1 c0OOv#RjԕA*K%i71T!mc""I99??{vOo躮*( (( ID:;RZZkl_!Dֈ@Wv}MNܘ`_ܾ"�fwӗ:W|0t ӷӈu?wI V�{ iA7Ok'6LܖywUs0" blnv7O?[幓D >Q07D^;qL0!�^Nqx"$^"S}!VxV_{p =~#7p_}kB3$]h&yt"ugOFZٛ BXȁ _ `mܼbZXG};5j" 3G!;`!J#઻y~ 0!(vN}9tNByP!ԇ $1ֆ0 ˮ&T"F Y !7b;y@C#|svSpz};�!0!mA x ڛwH$~@<!Y- }΂e#zPsˡȊI #9\CB Į!^$3}J�IP1 DrR Đ @Ѯcܩ!!$vv1B E@)B BHX!Eh- PK)B(BH0R8'u>2|`ƻH0X$aT^ǑbT"A0wNQ_�`'p"$OC{C9GO}s*Fz#)3c=s#0j9ah$Y+H*G}%`ȳq$s΅(L"39f@:4Zyo$߫טWq{R�RPw]2q9 =jA s5EHrWs@!Hu>d@0 ͘9X;Ԅ RI}=Ax&]gJQ�̼y7bu7:O~W`Cl` 2lT9x4)Yꁈ"KZV�XZ��vǥdNHKwMckSN˧Zt2}?QypDvZKK ED<?k%RNgIYJ!vwV#Bv?aAgW'SêEpx,/zYo5nP;,,V[ `RGLJO=*BSEARdńL!?!XREqzvyʣf}{Z!1H"(qRt2vYoMh](!P@iH%NG r( yr~[\$RʢikPBBJDhmꢔg ޼^߂65j SRY�mZk�hU1),'i[QJN;hI�iFJ %Z�8L]iӐ5ktU1=75Y2MmuSWV*JRS!,ѱ8˅\PI^J>_As2w X�D!QXFR ִ;߹�j <jŧ82;p9|t@Gcv ;cN#By) F}DOKr)=T̘aDouڽDj@Y G sd#DȟvMțV:?gF#$L؃ʩ&!?P+\Y ` r=#P!ěw fD=GNxgw2 !u9d-v]"�`TQN AjB[ %A@+gm7 GS_6khBtKRvvG 2pUW={x 2!@Y P^nMVfpGMC2x9'{Ij"`-I.>3uP3:*v9QnB`�!YAJV|NB! &dA]�D2O0n'tN-KǀZy^]Ԝ3`q·[{ Eɻ  >@w;B$$ٜL+x�>T;[/#HOS؆|g&BP9{~E@0w5¯4`6O6"Zثsndc1g/;3agS[{u~O fǀC??9>Lcb0m0l~g3y*:=`k7ى,gs'Pǵ9ĿAg$B;@0j':yҷ ^ 6�5P-�j6R ik S�dŝ%Me55$QyL20gϟ>o_./7v][2PBƒ6RJ![U[DRJ)   fgdq�(�,,'ggpZ֍B!@`ctctYڢ(@J ""l?KƠr UUZ !2XCP Xk,%Dd!h %%�!mȒ5|q5h]W!AhWed^^<9=WS]Ud-Y h-)$ 1==9;~2յ~ӧwjĚH")@j)P 4>g(:xA,VFkT(m`HZFXc @cA0$ X А UA1v z � H�Z`n땡CcZ@d�!e!dWBk-XcZbP[Y΄hdXe mPBR6R[;ufMRFZ]U}�$@A�d �F;ތXvc{k샐M`C䡹_lѳ'EAD5PD4SmňG^g= LwgS黉| CUn "a[ة}%;wLlxyqMNU/2ݣg; Y|>%mv HvR};פ$е8] 9#"b^ 4xAHs^f n{M{||-Ka5ҧ'P甇u`wUPW)dAzk.uVgXZ/.ƒnW`}q nuzMIa}楌+L,Jpt[sMw%$Aܳ"ӄB,QA@'*FMKe<w�y[ &?f"c@?L2O\v H/Y?κ ~}]8`%?d WrS�@8l:!8{B~b:?v٩F<wðw~HAOidO19s&GEI?2g#&I;ۧ䫳Z?3 vZڀe`0_P!䍠?vhl"T؏m2}f�@Akn,ei-kBRN}1Xyq+p=Q=/%3 H{,o_ p{=}] l7>\1(U.IDr?:s&w苭\~g7%xA<.$ zკPƦ n ܍�#FqlFq/@(BKl,u#LA 6!rR"+HVD�(PF׆+h6dz!'o~?[/+K,AZ*%UcM#QRRѶliiue*~qtoז.N'3V?;:R'Gi9l(,T`!6 ,$ @aAE� Xl7˫lnXTAe@%U1)MM$d5*BC$ZJjHUhK &BDCɒ)'7?tySjjVZkTmO Īހ㗯f?{X v�I(!0%,/ߑThT!P�(@Buc*Tf>9;y&'@ _O./oZ%$v-PEZ[k1uC 5HYʂkk]k3 ~xOde- ) $!֍ EcZ%PCB[Q@D@I Db6@(ԕ@BJU(Qn6ZXFTuc\^cji B6Z$ )�ABɉZ0(!-a9 !gRDƹ/nGӂ[av/zZm=HmL]J)DR1-Sc7rف@06x R10i7 cFg#=%=2,EG:V6@:{#ןwBOXHL)jˠ@Wxn=F:lMRud�nB´::7q ;9oR;}  >c`$ٶ^M쌻;_`#@;GݕSd./q!FZ _?dZd[;a=;E<:+oe06Bwss9zw?{7"]azd;<NIIpqlHB @ҡa%yAlFEݙѝ!tvlˮ+Pm>9&>1#4�"C06 rL`[Ȅސwv}1pvVt=&0„>,d_wNQA=::>cQ$ ڽQD"�ksvmN ]R4Q&"86y Xt@L0lDdFA  ws#oɝg]lb@9CF<¿Ǘ{G7^ GM#2lmy7NDG#As=/=low gIo0!!#de>:,3:3aD9f_ѹ&3w؃L$ʛk뇘] HNn`n3!5)xKft}ށGKhcFoa~2yx^-o7WWJϞN˲ZڢVG[_KB$6d61;~9+ћ_>@�ɬʲ jY/vS%IAT]N4NPLgGu5YKdP)LmCP߽x7WWWBl>?;7֮fmf> "lbqg.Jyp8fvmVmYkѢж׸u%My&DIզ!!Deuc>>:,5,Qj$$ if]@QZ6tj6+kjUt @M5 ã͆ �z{_Glv|oЈo?, Knl+5ںѦnFp/Ϗ'1\8^__H.88BյEEZoA T Ӄ驐lwjUf eQNd* 6Z7FmlQaQuUou]mR*Yb "cƐR &PEh ͊'bu]b6;XuSݠn4a]Lj kRYAMmmXX4ovO$;�mφE "nr"˲PJ�"cZ_ d8G񒇗mݳs=\y@z5=&܉ h)vgd՛-v+]{/j8*v#'nsw-һEd@ULdͭFBҷ(ʮn65ndVf&;EEʂ|Ɏ:su΁$/fؽ1BMp2XBvͫwz�we%�#~S؃_1&FʎԷKŒS쇹! B`7&8 $5C(Oe%V$Am_+o:9C M9q/8|:Aےr(*vz`sp�*3EhΏ8oNIlP(Bތ  "A@S{"/ v:79!_"$BZ*̸޷~_ kQ#r># 8(<S E3t~_hő /jϧ>G67ҿƃ/nԗW Ǘ S$QDh<+JD="0!)@y.Zy 'rqU[.HЮŴy&IGOOӳ'?VNǧSJ nl Y('ţyQj?fI&(,T I޿}1Ņilnd}:>CAխUZ Ms3wI1{ww7PӃgϞɧ޼{_MprZsybvxtLmWfqZ{f~<=|<.?WvMv+'\<}t>==窮um6Ί_={b6MUXWziOO󃦩./?y/??>t͵Z\/n-L/=2?(n~~S rʙ<8'zqg% ucje׸\SUןo߿{q^ Y0B c XkLmh6yd4>}6/=Z,nFJ f~TxCnͧz>2tqz͋QzvEyh"b]SgO&͛f+ _yYU뺲Jea,�d!RT1jSUkcbB'O=}`8ZmNFƮ˦i�˃by_mkqYe!6릮-`~A俧.Շww|i ݹm["%BI!,6W1A˦:F$GK`c9v)3`iΣngD/knkNA&GlX'zŊcN)"-tB$'a;t`c\YƋMl}�/6޶̬z]TH"/OJW1D B !m .3v ?x 2p%?1\ r2a@#MyҶ{ GHW~">mg7\+w9@"k}m&9L1=PM.*4vzPHb{NvbP Ջ[AqBXlk>hw~" !G B `Oe< CH@eB0EH%"gDqPG !s$Oe!B<o]a nCO>'Y8HF#$pv B;ED ]!E~9B5 ~ B(D"$cǖ H.e5|ބqv!19BNdJ8 kd?ƕoPťr(rSx`{9U\`#WqLANp^U\ y3wwxP$3u>dB= y,S"wv> P,@>&:Tqc{Bw!auv z,HB9ԏ !9,B<Hh/HBTF<!k¨/EH #1 F7>d w%Bc+pQ9+;x'sII$cd¨瘆Q{y];pЄE΄ P&NH-Vq=E> E#/(cOg=)~ R!J7 (!"q@C/B@#1_# 7C9D}~8.Ję.E>#v~^x*rΑD;O'|)}92_e8dXIX�B$!H*('0?G(ˣGgv6 7c 'fY7�V#APcւEE?VQ7?_Bɓ=~ؐ)&b:'Mmf~^|wXmYWI1;ztpȚ>Of*q:C:TtZ BJϥ~䧣?L�bB ~{ĄΟ?zt:)<}#K1NgjwD=yyzvvl녑pz~O<(TV@um7|ɯX4`6MO7G'sĩ(﮶Rw<;==DB?9{[y:Ue H(,&b:a9OJ"mZby1BVw>}5' R2@ "I)RӳtݻN/`2GgZ*>mFp<mZ#j)Tj>.T):(DS5_:GYQ׶҇4FOP 9@)�ͤr16RZ@$A j6zՓBHU#9S%Oh-Oͭ5M9:)8NJkAJHM4`I� ,uɗ#̡ijD+P@BH�h?MLi犜K�x0}:ue>*4dkWf^ ' LqwxaFåO`Yt7b7wtgV$_\Pcf 9G !4~F!wZ!i{&?b#4$n?kliTd`\B: 2h2aW`Ypl^q\Vmu ӟǀ5S]0!dr!_gno7b{ w�9@dy-d/D^Ϛ�!8 !2B\ A�ǎ/o»R0$(tu5!{[ $ e erW[n8Kr&ȡ0?6#l/)ޅ,zUqDoهoأ?d!j~HY@x.ʢW"qs}:2cBzu~P]1^0Qq<@[9Cxd L;;`ٙ<&1>K.l$ؑ$j9>` g){[h ă<Cw xc _˿<MQ1 t9Ў8sd+C/*ƙ<H08׉(;`6{\H8;Nq|=lDZsL̹ `K̿CHRĄl1 "cd@)e RmwԤEj{v~~OG4OΟ]Wj,A@�M�hm6j@YCZ?/nzN߯Nn yYVNȈ$1mDRm~u] /_<(OOÇK+ֳ3{x8Z5wӋgGG{x닳Cc|~hV̎<'N.o7'_珤bXnӃiY*+F)^?o{Y6GcKz2Sg?rZ<~vő@8>=}vXNʋ''珥6CZIc �֦m7#&-ԪӓOΕDn4TM]lr|<IMSMJSM*%lu9œG'JO~@uyB]<?\#ڣ￟7w2vUiK, f\n&x#KӧKyl2wl^<~:=\Եݬ7uH(�YjV>9ϭ>|h$kRBD,T[D�`T_>;=6xٮ(LX<?1[,7T5˅^olfsEv^ͷj$2¹gOgJEAvZH((4deڗړt.*=%p)">ɫfv Nsa 'r1bttA Y@̾ vuNتЯb> ~r?76cLkǕY}t7Ikn0$cQ/uPht F2&SZrd A~nsZAуۉmL#<_U]2?a!=b7r^ޏq>#L#V#{]�/><:nzz5bWu/kٙ#^ -/W1|vq?Νډ !WW90kbN*ȗ (y<(!8"W;5d..SA7%z; lU_KQϘqL-G:?@dcIzɛu~Vl,x BpC~�;0w59ӼG;8 1_R E;N,{#A@<t5AɇcE!_$P`@3;VOcP$=d瞒0`&'4bI}RC}Mt~O<H}ʼnɃkG!f+;&Ƹ<OD?uD!!BjQ<:s$U8Ƕ~ 8 lQ!"a!h (1)%Jf W˕~_ӟߜ^]M>oi=:?mO!!D)K,,k L֖}rnt-DCvrʹS*UKR$K) "Zo`r/wf B $S׸Ym7z{^<}57 ˛'xGuU-֋ʬ=::`n.ed>,?%e [Q*?O7ggͯ>yl>_~]]W&8*&И㇣鋋bb~~(u}T-\b׷W'Umnn֗Wwڢ�@�T=/??_ܛlNfŋGT<},ZFbuNOg^Lp:-󹔅%spDO<yzj()ӉT^r^-c%�,|''/?:=Hڮ Ed|.f3}}7׷t*+w?|>,K%$c@ *D$Kn5"E1M珧?}UU/xI1!UB� Td }ˏ=_<9<=-Mc%'xٍ|;ANI) l]DJYH!D5B]LwOQh,lp�_~H yAH=2x7QJ'[w-M:bB,dg23%v+,ф�0@ #փqkgDϘv>L ʞ%sG ߀hLށBB*­{ه^]7/X}c"lLhaN=˗16' 6:*cqi# ݜ~H,m:8~vA!b6xrf&5ٷ^<6>3$�߹W7Bm b'saݰߏ0u %nnw{]v9n/7�@LDES{|B(Cy{B5C !{tHe־t~ 9G7##m,#DHX/yEpAHP9�HQ߮0)B@J&稯@}Ip9=ԗy`WB#mםC`s bmpA[DDBUy0;Ȝ#s}:GNj/y0Gf/uצ>crɿ+ ݹE!ajK$2psv:Bz"bw=U9SEQLG V~ɬB{e<\7b_B( 4E2Y7ӟ?~RH<=߽>98>훟<?}gz<f᧻~|uyE��Jzk/Vl~vt7x坮Ѕk^]߼qS%J)!-5Vz0au%+7jY-뵱4ΕP@d-(UUv˫~O'O/?;=>XW}|MsttppX0<|1,5@@B UH! 𠼹]{nGdzl:Lxx87o>OMS/dylo`?/,UYNhX{ʼn*ǫEY-wo�Mfɳg ?ǿ\~~KVezWBRY�Z^OOhx|~&:99Nw系zNˢ8<<:;;,T Mcw>^]~˥MRR Y0db&3ղZ,W{c5Yûlz R4u4Q PDd ucmc )Qb6)99??P?~|ږSxD)�MAۚP#Y+Y{>{z2)R%- M3#5HP"J)c )  |`4vs.Q]wVHOc7Ƞۄڻ[�6m m3ȓ ~ E ^H0tӔ5B]*k@܀x-XIbswDaFtLv_?N`.VG a, *UWD�+vW!  "@ A W. M!?gL�M`-A󀐀h'@°4w_vٝ=wS?wywvLr`}3$I  wa߲ w40kD.� X$׌0[G)DZ*SY7a�%1,u,PwD$,۽/n;AHW܄h$\!dB!Ag$9H*UcS<GSp�>uJz0s ',(a7 sW"$<yPڇ!YpxsT Eq 1 c!4DK8@µP zO^qKmr2:EIy.81ϵu,:-Yتs L|s9g d`t3'$9Pq!s=C8P9:?D Hu~H}]zu~`;T>BBOΏMe./}]yg::9"`/5{"QStaTHC6Bp,:?+HF yD1AHH}<lߞ;8:GgGSI$90 WQYKIH}>ꋷqH2( "~!1{ȁ5!B1!$He �ACSZ316_ EAR_,t~HG1OAACIVW9@PÞE{# 8|$ d upNsA$9v-QqA YݓAjz2 *0!)#_B$ @[�!X@A`-Ե^7b]61[ ?y{Z?}uZ>]~6[%@PtQ *OlWO}tVZMSiUEE^n릩 PLó66jZI[*DѤ-"MS51;"2ڐd_W/_7o>]W ΕÇv}r2yt^>}xss%e)P6^כfq^\wj[[c((J$a4TfڮjSmF PH9L KY-bXz]UF7iYȫ۟?n5\L&c~\_xo~󫋋 TU z]cm$�K`x {s?7O׏:* u4% Dk59=9|t%ώ/NY%(%??e)nN˗NNʲdiZ(, UJBW_~߿p_>ϏO뺪*[mm1ۍݬtS[e HQH)L&夔D!D!ͦZVz[UmX@BdBH@4z.zhc 4na*>;o_FDhKMmZƒRxȋF\%(.L'#:eP ;1s;ӹpsYn'O} 夘z0yհA e237Q@.]*$0!N@vescSNT. XNW#`š'g;^FC@j8B /c?! >SL/ˆ;j`&pò-@3=; gpI˟#K!rao&Mp �B7<}h f(0<a,0EAf["!u;`!J#`.;E^!># B!AHc%ԑP.cqc0ҩ8܄<x#B@C#|sv|bA)s sH0ÃyA x oB IɉxBZwĄ>gL؄9r9bRH@8;{!@jdŁE2ӧ t^Ei�L$w(u*ygR_NN#".Fa(ED1B S�9!,"". (E LB>Fu8GGrEI$":?З" 2gQ؁-"3;.!iևB޳ҏ9kq1H;-F9è瘆Q!G j0Q38g ;,s 朣;2ԗ[×w Cљ[ dc v< k̫=)PeMs EoΑ91s{9ȃ"$Ϩ rα'W�yd"hgD5̨,H3#}115a9F9Fi�u&SR$w<?3/v9t~s4⍮CSD}dX <M7;$X$ v� %瓣hvt:/gkC7wKG/.GgBv*P  Y(Bi+*|ڮU,YQXU�0 %0 %)i2Sy9)jBj(DT""dX(:xy؜u Q Ҷ! -o?{zlzOۻ۫bu<?ͺG)Ͳ7 i 0`+`z)i1Mf(@kZ(ӃHb:e"էw}/ Kx{z-D!*b2Bk�c͟|R]Y` -Fkv5NJ`Ho뫏F7Gtz Kon7MSY+5Ducŋǯ^=9\J!flg_NO'o߭v%Y?y~q`qYr**Q*9Ur&p Q *+�%E&fϟ?;56Z +(%&@!�QTA*HD(@))䬘LONORBS7uc׫5l:;N'KDq0?LZK;BBJY)(@�I$X ch1 1e㿼S^fa0v VPFkSW E) az'Lq`:QA:%QA<?\[׳CJr)}�ψGztF=3h7|Gkrrɩlm"$Grq1f@3Cy,eɅ!Z9S i;V8xNяԷ!d*!fFM*+1:<jwEgG}Fb#g2>`>6#'^>!9P٘ K斁Ǩ>M!�k~Zߍg>i SV=c."Λw1COv>O?9f*F�w}B.x spCz,*@FFs=]n%!D<D}z9QM}י^H"Ay{TD%}R_EǑ E!1)PYr|;p4M"7^g;( 쥾64Ƅ=`~B*04OƩ:{lkE=C94P`?epYBۇN_3T0gǀC?ɣGF_Ao+?\"!J&8^oY˘Й̩/= `i( ,k!V(!9<8}t~TzZ7Mmme>oh]W?75TU%DH1W涠'|Z7k6Ӣ(58-&@k=SR$$mIk<8?:y`&fkp" fHTDtRIM4غns|x ~}땭n^o^<u ~]k]SS5te.?\ڙ<NNnnR֮0`<?~d})e٫gO^[F\O'Oׯ YTgij)jtuu7wk^xw]Wv2AhQo/|~(]o6p2O�tQft2_vÿZDpvmU@UȢ,ȂnEHspx껗/__"¦zs_ק~hq_O>~x[LG'Ǔ`[mɠih0$TnZkBP%ӳӢѣgO_~<9Q(r:J)mR(YZAdX-H(e!pv j[m7utv,IwϞMm P)")`>;*ݮbxp(fqܑI,㋿""RH!cRQrG^g= LwgW[g@k�\z[Н1ŠSn\oVv1 v3?29i Fs{Rtg6MU$/iH5 ㉾NW *" 5�`'jqKGSH&%#t9ήy>u( *8:yӗrxD_u LAjw"yI`p[Q\K$'ܢEAo!Y&FL̊<`r@ɲu\`{|ڴv4�+i<}QzDVy69B\Q]I i8us,jU1x[]R'$cW&gf;3!ɲ3CEMpVQup2ho?fFr!Hy\SgL$K%D/`J<{4osș!MKk)^�:'&u>7eVƷ?w݃g WV$͟\vcZMvAass !{={#.3gY2l:D 4ި`APEE+F&GgDI$B!B6<N0!Ώ:XhYcu#d=?I}͜{0,¨eJ,v7?Gkuߓ+"ʇ9KN®]Һ*[B3wek\i3[@л傟?ں͛{>K\d09g{-""[SC ݃_e� K�Q 6mQTlAǓj]=Gjc?o֫ I ,UU5||\[d"&$*a6uUka󣉘 .Ώn˟n_hg3駟1`:oJ MO/πd]?ﶇ[ 3u0(nmj)e1-,ŏ?}<yߔ(|/['Rm{y]^5z%%|Xǟ<9?I)q\hyI3iaP?O.NR#�zô׿ݓqZU=:;@@, ^?[#.?lV + YVkh*RrrvrvqPFxwtrPER 0֒ r~cAwMCJRgg%6k& lweQ7WME�6U]Gg^~lVw/_l_<)彾pUJ7Ԡ$&I1m7T4(U ꍮ6g/_=yp2%j>}זtC1Z76HۆrRآ(M t_3Qv _zSxpݫ_|`6ZPYGB�؉n@DZ7` ,J PQ6YVBJYJ)vDm-B4V[k]] Pg^�޺3g DvN=-CdAT !ZnG_{e|Y20+p΀˗�p:XtN^jVھ?\2z.L͟Z3`w2g'`O$kY`e}-^ȕiL3Ǔyc__g&Gom6iQ :86뭴tX$!g}jv ՟Ƿ8MJO!FV ,XCGɃ+jhYg?6"goKx;8y;,hzzd;<NWnTVIj?{|sw9ݹKN�d0N+g@`8Bh F\^z2w? {HoGܽ9g%Tu^OpHO<̼O'8,O !{А[;XQ"d_!0df9{Er0!-s`Y_ x<3Yl|UԷ-�PҘ_ѿǗm8l0nn᯻60<7N:zk˩}96­+�v y%c!swps_9L|RߞB>Mή+ s|r@<8~ }v'H BGz9#+^E8K IY*tEwWtwtSZfS fI#$uw]|Zm%J% �@�BjY5wwP,j^7?H(Dj@EE%Cղfus^mF7p{0MK5ϫ/\i>0Jno+]BCBVvy:@N/HVͧw7wf%%|yUbVL|{=/&`N'vV˛^fbW]ӬjOo ON@խznlry|xv|2(� "!R (6+xikRin\]rÇn�m]jctYN*,ѢO\<D7Ɠ'O%E9AQ5ZRZX躩߾Y}|w_o D!PMח?7ͤuӨ‰5\mO{!`q\~o-Y)Eiq;ՂJ$yQۛ4Pmjvoo^_~U||lv ^UW+ XDhl  ! %͏?\}pKח?eN'Sku5>V@twm*ۛݛm]mj9)m�*enFKivJ% clY0 !,vXBXkY\`"ocǽ�@5hƀ@ D0?4vp7s͝x*(s7ngPAd_f_+g$1x#w5;ug ^7cv$&cEװ39-ܴx׌f0hpz BvTW-WN׬z)Sh>$ HZƘN.QrT!SG3*C'"@ xi}L@r=J7<'0LQ+'Ր F|TVN7qeiĪڡ!582"$y`')rf2ņ BBFS0Q߰b]躇q<o<!!臐>90@xb)!}%w $<9_8>"g <Eg٥V =K"�pTΣ6y#z]]2rQ1ւ"gHyȡB!iKc@}}ήPs*H3?,zGD$t>@cѫ K=&1u:bX )|.{c=:"tBop{#b^W B B Fq&~`յ_�B2N%oW#c(8ǡH0r{>D*FB04 M"AN}(."G̹<= WB?6bHj`Q7 S rv"V@N'HSi$ȕCI"ys!OL$Ry!<&M"0;AJ A rI<B0D"((;Dz wv lg  rAB 8Xy֒1VJA7f7Wf՘VwopYUڃÃ篞7淟?[[R 1!XA/5Y/۫Jo M!ta V.j25 Uk}{u^ll`dnY+HʮÛ?]\[]R@Ymf,dѶ,նilS7ͦ2-mjs~ǻ15(RHSzY,WS�%@Fוn*[oOzkܮͧݺZo L۵^.wO.?,HJ-,jc>[%@$KfSAəRi lVnqnL]jko]}Y-P{r+mR)�0XcVY廟~ۥ[zUm7P(THhUחՇw*%Ŵ Q4Y-OW4�Tcn߿{}uyg !M-o67KXDEX77׋F(noZ \_߿fq2X3.AJNo Q4A)Q)%dݘŻwn d+^r}i}{ZޯZוݬvZVU^jy]WwU-@PD`5Z-ݍ. !XcL;/uޝr}ARZ }0NK#0+F}ϯ-Q`W\{ �ޟ5˒#iا s{dVYI"/'?_)Bw )$253]Y[VVq|03@YC^+'mT?]�O}ӂ+.)9=<:~B>~tQYܹUvٌ _/t<HݧAzb/vzie I%5?ш3Aw']rAhf|\'k6vrίqͬV}1 *Tt/jP10 *6-1"кm#N[�-7\jߺmݐD.y4EHe0= H2O!oH{wDHFlKCe[ }BړncrRo4FYzȧ5]!wQ} RWfSbg_NL l!Achth`)pȤM6"l!BR}'h{F'fc.tnՐ"?[/90v,2[2)r,a{j}q !4 $S7]4Ҷ׫�w(\zeYi{.tp^\ s~ !t}!vfRzZT<`c�OPQqcby$}<)Fiщqk#gߺ~uV~OOL8cX\-r[!9k΍r 6EH}O ϯ$Bg"e4"+(O"3Zdk2=<IKx:$ֽS]=/RS#'qv7vN'begi8DV!"H )8ŨBTQW{v18F'Ϟ=Wwww0a>꓿?^IG8j uLхH#{ޓ#k x<8G`�3BǮ竛fo_޽Q_8;12w:� $pn7On<px7g39*b{<=qs:}8<Cd9xxՓ'׻0 a !("Q}?yL@<^?qg_~ݻ?w8D ^]UYFq 8:Gw!c<޾ Bp{p|p!r:8H zzy~E7] O?%fq\8pz޹sG̈:�wĴ7^<yxqnﮮv]w5yD$΋D!u^b5DUwu !޽ CPL!R::UC`!N{ٵ}w1p nx<1H10swW,2hJ|�12]O?v}w}usn3OͿ!L =h�N[@^z%tk΄ :TIw:b<)i{gU!&:q'׹'c1NR3(G uB?g?3!J6}3neLRTuũ\(\hy)S~Dnh^?W\�x(ɬ" n6cÒK8$}&O�voBșqHm+�FVzͭ^=B\"rh΃FW_et|U9["7$:;;]??1zxq,;hSrA"�%B2h d- _bgGyC39�޼DI^"%E !Ԙ GKKoQ}FU)쯝wl* M"AKa[m<6([Z?5gFi]lwq`FgU\8hǵhP}v|{d7#P}k`cb_Ώw4u=ƹ pfO`)OC /T6U_C=BM=ݰih2?*V ^ۙBv(g gzf=g(I_l\Q`"noS0c^7g)Ria&SҨpo1^dӏǟ}~oq@~;MCw9Q$ ܾ>=3|a]h8bs]QppGy_c!�@Q#;utW_wI`F{;q<1x"rw#x;t%0ѾDӕz!~8�@JLγvOA78D8^ wJ޳qbPeN"3|Fug@p8NT;qAww1رwW1"0W>{ *aO[f8yzL ~!Q뻮cb(4xwC0qr{ý܆;ۻnw{(<sHDw^4޽}̻U:CT{@p܏aqo"EqSQ1޽D?::x)aw~x8!0U؁AB"2a9؇nMQFLu"MTcP0#;7d\}ǴM *đ'3Oث=Ojviű9/B'D1[9 KQP SDu/E @<;dS^ yvin13YZP0-6#eUW�F'Z"d)s l!-,gXV87ælZ\4) �Z*R ̯"%m ! >Wd=A4-JHz5^tsFH%@^d\%.F@t& 6^4>?$nLe];T]_ëUgXTYA@FZň-4+O8TYsV}\6BFJces/j'5<63ml(rZ! l !3xQez那1"5J=VI!BBZyPM3"a!\D˭xLB,PRYQ!P_Cͩ 2 SwC�J:TKfWt #<umJQyc چwkTfem+=fooh!Bk$BޚF,pF@ȖhԷno>Z!2& ffE-g갨 T5xJq1mշ2%6ݖRܯP}g5ƆkE]ccKՂlO႕0NNፄ~ HPS־_TT_\sOV}Q>EP} k/鄕'3v$BZΔAԈ]u!;(#OےNB=B`c7DWDN)BIB[FȪ'hc Uˬ,*Ek`O4n)_ b& Q ]u=@ 0V`>~IwïWx{@DĪQs Dꘘ= aapJuB":ȡwqD@;}*Q7ͨ(qTB;t E 9tucPOJ*AefU^1'ůATx a&r1x19xAGϲp,xG{(�ıUՅ�:#RE;ޓ'BPj(`TDǃcvW5W8&ǘ#N!Bcf{0s*S[;09Nh 1 X���IDAT1FA1!PG`&8Pxha0Ñ$UIc`&W8 ﮘ<k8ĈTH "xds9P 9D2cf4*#8@;9TyG;vwuU"B躎0 +)BH.M/))BdM׈/:FZ9 r~8>LJp|8>LJp|8>LJ_qo&"" %!Վ{!B {zuw6~oÁXT"o9fըb%e"R$V33zGA1u7UO0pN)F Ab%r옝 H CQ ;F.v=S2%ؑ'fJQFR9 AFΡwn#AL G`c;Rfx9(9& )z=p,jJ'(INI:"(�pL̬*J JcD2s;&sLUUXU4zfv.S"v#tCR;H ψ޻ȓNk< ݕ2uYyw'ĤJPvD41!־fP#H;B]T ĠQ;bR(E4*CB%jFQUu1D`v<Se]@QA΋R"!L a9爈;"{KK>G "Stê#D4-+/h컝+<JM0%l)]Rժυcs.\J>sYⓊs%Y* C. ̅cp.B̅ws%Wst^cZ ժٓL%db1N+Y纹\2Fpv%bĢy@#jI:]j,*j'3BR&rwtBE)+^juS#L?Q^z S [`;+Z"�f3B@�--5X4ve #2՘0s(^*X2ӹZԅ- yJ€,)^tRñ}> flX$FVey3ʖ5mX!$z,PBJ|SMJ4), r3EBt)x^!$_EH]-ª2B!jbQq.-_fΜ볥HƮ@HRY{0ɞi7=P;O})r\Zk׬=\bz!HA^@Hlh !LԖs~ ӨT oBt 8qL`=T"819~K j-:e^eQwVbYݒƺ Pfvaqf]]8t%a*k_fqaV,K@ohL'̲?� cW lQ-*X\Q| ! ,(cIBj~ݮmRjp/Ʈ�vz[ʖƯx~k-" 6 cS?ig< URDH2k,nIBMד~IvFPX$=Qa鑖=+ FC ![iK ՗TiyR־YOjg,c R+fa zP*UΩry7^G$Rؿ'a-l|I2Q(@TġqnP!kX(`/+M~dxU_jo؆o/uJ/Y(I5BFH lǚ>nDA0҈!=9sfP%B*Oq W9 nG*o~.P{NܩOq\[8Ÿ8DP8}WhU�v[lQ zB:vpcf&]ޱWw<=7{_!QPu* U"JNQIEI {r, b{X#9# 1;;s~λwhuUs@ q `uW뙝1cQ�ywvW]#*0%yﻮs]S{E1D 1N?dusgD~4px]#}۷zVaV&!RrDw:ը$ss:HYQ%D2 c X|}gv 1FRbbCP#혧40ѴtՑsDȴH;,껮վwc!:u  D'Exv{h0^ՅQ12;822޹޹9w$<OWUα#bHEU]vDNEE9{@D�yHॹa<޽{x<F4_ph.GdZ諪1iqӯ獆(�ϧ;MlXf DPu.2dP:j2 ?ʶ63!-QK@KP,#V#ќIF]ؘ%~ECTK'%OgbqE"'E;-BB/Ɏ#(@e7Rdf"y:/4t`7΀67-BZdj[:kzJlF}{W@"jo^P~Nan"06m-hcpi^:f\!.IbL"$E&ݖM';Y`ZBjU|!6G)^N`=EE֖a)L #T#.7^!XBD{9aRW AcdBHk c?tZ"Ga,nMcm>۱~չ]5{T4Y\%xz{H K:&Id"ѹbcWӉmcF*X\RR !ZYBzwX4'[c}!uoM䷘- ԛ'^*z.;6B M7k/O,bzi-TgW"D_γF)FYoLْVׯb#YOjehZk[I6=m7q=JgP5BUqDjTyU&ƱW>%Bd~aoP{qPi~+FDhmc_:GF5x~97 Kt!ZKݻm_s$/K3lKekOqDX&T!BHe/nL`E`3Lj�BzL齖] !YbIҩ׷+SnQ4)k24q�|�+Vfq$]:J2@Bu בۯ6bNPvS 1 2GuN X GSA�qY�&u r`{0-*c%BTb ]޳s`V&0) 3y& XرFDE( v Q #X" (5ʴcF@{ a1 7o޾yn|"<AiQ !DсX*9"ը1F~Q^c&F!= LYwDʬL�JA*c 9WQ(=I#4� uP@BQ!ޱc0F DP$V9S!SpQ)D࡞x ADbĢ*Dp|�@DE�fr͍c !F"tv{V1#؁ $ H<eNx¶BĤE+1(qRA2ˡF! ]ޫx#UgW{6j%RC"9L-zBv%E;%'WǏ^G/4fִ-OK6Th"^nar-5,E`{lk{aXJ Wf]69uGqNS7QMkiWy"ZRlEԾxDkr<�r-7IrګFjXǡ"hB˅/ً V@Vۊrra/s`)*b{UۛA;8\)M/IW!$|!ܰjum`fm/^HMl*_˂6—\ MY5dŗk,|)EEmDҬoWDʣ+~)|=]5Ճm?ݘYP!{ U 9q!h!\(o>ssv_mxpԪz[m JԽr1mZbvִ)iM x!Y !z!']=5BvK:` !P,B`R[0vtH)B2v8th%BM5tbNatl[2RWja 5bgK` 6 S;s��aI"rnbP~'9V8YNe0yѸukR*ȆW%.<~YՇ 섐EȲ9?*ʭP0tHxx>,J[aL$L=I2@F>H2Vn[U_[lpZy6p!IQ2EQB|eN~$v:oJ՗*F X&ڬC@nԦ'F5j nT VUT)Cjȵ!֍Z`]>"4=AcW<W'8u ߘjv<IحB'x6ı'qT`:B|*M؝0EE]#ap o#!sǮbÑYTx7Zs?oFӏL }jŦaҶq\IFYl{;l|OC XxGS %6z#2a<X^,ՎW Qb=9Lt(nJ(1J*""1 ͫwܿy@ U(HTI`rރ9S!SLʨ5ʎgSm8OK?C!D(ﯼ轢|y;_86 M5 qE@My"D!qRDՠA ؑ91n<�i{"G!::/yDb8`Z f%<'f8f"Rit3K$RbO]D*΃HqC! @~4R(*!@DN$*yv]VQQDF c8�!&b QRdE(:�q r},"Q;&!ƁHiAt^;tιvS.(;I!:�䏀 D 8 PsNTC! "s3wDq8qQbvim6Kr_Y>e:s|W>[7ٞtkamظk򌚵UY<31 Ũ1jlN<3e\_ lJ+;ֺ�%i^l99PosN-(_^%E _L}[;ѳ'dvjNA+)i4x sₙ#&hB-U.64Bo1�V؄A/CR$m]s- vh}6=5,98j' ЖnLyA3.wq6${vfՍIb@k 򥥺> G�_UĜb1؀F rH7=6S,"='WB8gl<MU)Er#JxTQ%X.S(&Zdi ֫,@rýf+{ 51]:<XB{XSm\,eLV}')3Wh4]X;4jX e !E6\bn%}kD1v9<ZGc"=g=`e)uZMiG>.C:D5Z`3:%1ČSVСIrM"^VjSiт7n8.#d KYz_PEm(=SSH}k بQQ3 BtBk$M<Rحm]"8nMt 1r>oc$cm VƱPVkKX.1ŎkS#'q$`MP`V}^JZ3f8FHvCX"(-@v—ƹJlX 0A5sƱ2 'ICZ ;uVJJV>`@Q8A0l<}YA&^yeaM�5 Pem%Bh3:u&̯1'J6- Sb%U6/|m=Lc0緰acQE\lz-Mi Pe(TFmxҩZ3-Bmhah5=a^L[Q4*DEȃX$2@* B 3L`#Y�<1Oe%yIݲӝ rt&AD GAHHHBx�",eiQKX,0ȓSȁ\ĪrĞIi4f&"J ƴ;2(c9 ":emIYJL QA) ,>$B))y`j DDJP* <`N. vfOݪH_Oħ8xTZE4@"&Bl&bre3�4BtZpBSqbY3L)kR(h&?- wb=h<+DUePF DAn‹YqJc1Kob9ʜ/lf`3]hR;_?-)ɓZZUQyi}HXLWoplJ.J&㙠*1!;vk�RC0r`ɫ(lʓ޲^ LJp|8>LJp|8>LJp|8>PS,WE0-I9>W""�|0*:?I�]+(E*zf˜iP19R j Bn#0Nkc<3A51;`ι@3 S~{کyJʓ "6cR2M9(I+%kEM{+~M#/,Uzy QaV4m_MB�D #"t v΍ØR8"ӴQ%/)>%R+%M<mP\a&��v7}+Á�ֿs <#^�L`r8m iR0�uPTQS )]Ra 9H:P&ώOș+RUTSU²8 R@�:#b`JCutu� bH<*2e<Ǻ"Qf{\Q 2|2gĸ _U$8s \+KJ744.K30IR5:U8:W `U!̜qNl7*VKS-TZ؁c8a<{0UƠۺRUy^*nPd͝Jdr{üIwYΛ;٥`·T(ՑK;sܲ4m.PN_e]dΥ/qeRO>YSҾ|\ 5·n.̥KM[U{΅0ntr]T6wJ2cBR[XԅiB|tT&-BUZY !y))L;ڀ^oSV!_ަht!]\�ՂnLJzu!7KV*]ޜ.+W'9V{ UfqbP m  !e529E'dumeͦpfmQEvi+,BV5DYfFVuiTq_&J.vW@n-^PafCui$]⼦la6aٵqd`Add{cqQT(gcW+L e$B6 )UۖeC3 A?3ȞWEijӡ$H[tcW좼ܛRX`33X= s}n7X,RoPB,\boAXbAO4֋[D.v6sOi|Xln 'y~SxҜ [[V<?-21jFH)-<JG;Ywa!B>!ˠ~wT.H-r foic\#h#-GfKZ1P˟HoKq,|.<Rmxq,m1 5<`Ӫ'er8"5 frƱZ8=N)<rJ ly`bBjOЪ>ԪϘd*&#?cS+cOW:'Tơ["SQ}2׼ҕ; N1sub � Yʓ*HfTj"1 -&BƱގVaAY3 Q 6=ZU%Bހ DNW:Y_;pn<)sN_jZOPW>GfE]1Mؘqyд6 E!R!.v9:wzP&uS^�Vв8,y&G"!(A TId>NY߲oe E?T_#?d<[JP+2iJ"pi(?埝rh �) 6_6A<@g$1i rM+ON{ Dxa<}|Z0e( szjK꨹H݄^WSOj͍gzC]z+xfweҩU׃HuuD `P4f\ ||o}ͫW^c]w~?mrIjF4qP<tudG Y)-T<]jap(L FϤع&E#+Kw1৩5FAcD e(ʇHBFNpn5vŠ #0(bU77s %LiW ͝J><4̆Rc.Ih*??ʭ4Yd 2D֛;Q֢ 7Mtj0~lĉT=f%f3Q)zjƟG_J*~@'D0[d'gv )fÂgoV&A?N.־vJg7)+5ȓ lKA)ccljz,p Be8`vQ6q]eqܢ@V!U4mkQТ䦇#$Iu?!Tt$Bli*T"'J`[m>*Q[>՗F )FnV#EVح^#B c@KRʗ1^ UA,"'%B$B*Kq BHtԪOI92"a0v3tB2 /Mèa-a[Fdq%tȲ8Km~N(PKӢq@/]L* Ym8TK0<֣kdWۊ (y@J`%R5BLReI)ݨS<#2II^eq%F}BZ01 cw!x<B`{N!Ĩ0P}hQzHJW0("oRJ㸶B:Vp8V\mJ K)Œ!9Q萒$1k7qL,7D^9D830P}%χ6 -WtD\K`;ӋU_ &2u̳U}' U`Nx8-Ş8+]L\G R6xꣵq< nE*W  ׬BcXäި!+:,}rWnq3X£u "l Dic&˹"Pt$MIi[^hK5BLr glqPM1Q;)ةufIR'I3 2  1wmT̹cŶe�&_l| ݒޢX!4`in"K<9gd k6 ,KHBI?VT3tWr"^8Eu\ ٮ@HX)c �ba*sJ1p8Tvz9BAB/cԒ-r2 ӇS�Zv5Ρe@1GˆuŪٷ[^e9vbνD#i݉M "2sdhP<f2Wl[S)͵U$-Ɲ("DU $m [bYCJK$M6Y)\wr91n;ƝF-d[K/`8\L4 6i+֍\|,2v̗4er5z}vldJxހqVDlVW["De+aBM0a)7ȀVn<zE& Q[z`(%g;y&Tj猐um/JF`E^z- )U,|1Kg)lIzD 7x.bEa/!?1uƔUb@�IQ}%Hz` zم/ذBWz5* *R\X^U7 Bp!+Yqrf7RKl75bX#%BDZyOLJoQ}C 2BdgPΛPh!D*]uB9|)-e쨈�Y@H!nyzIKZ$BC-1$޽Pq Vk%T<?;<!:YCِhWa_t]"yUeݥC6aZϏgKqPd@-x~EaFyD2E\Dr83&&Bn9_!v5CgAB5PU cG#ҍj qڍ1E8(Yr"2#8T_R 8iH1H.v5uGɠr* xdyq,$]D.c~I^W`Af/X+ O0Ϸ} 6T}EGe2鼺P>*U_!R=̱<AB~ "r! Bi_OdKjp<ϪTT$/iyz!<8ŚlԷ ؆A<!^4(S fc4h!>Un do)ۑҌ %'bJ/VXd͋qi^ okeD$Ӳ`% MսBS҆ ҸUJ&k{9`UN+[<WݐAEſB ҅HWWK.6eCͽǫo-q< JPt-PټeS2/rqM_unX{aG|Z;-^ "fuv3-NU;s,"80cs3{~:!#i5Wk>AQGA`[]t ~fS;wr5UYtǾ0q!LV.<F#H%9XX)Z],%<evՈ*(9^h]`%_tC',Fdؼ8 O,Em3Y۸1xAvM@Ykemr9Ҕ~BUF%+SrFPIS"Xe F 9b:E"`R ̍L!)۶a YFߚ,Xz`$KFXC["Di rr/~!%f A%6PaÄϊIO\"FijW() `kl,DH֠ƆG lR T:=3cR}Bk"md3W&)\s΃@I1%*26,@, ! lf.FAu6Юl4&%`+IBk+,/(aPZ#:y=7CDU<&!Ut(k F :T� ) !kXQ,R2"B+:"j:^2TYb[a }V<?I[RtxwmmlTfʚ247oUN-Dh6x>V.]1)xScul/ɓrb1Q\&dMYTp.n !�!x$y !56j bkW#ƱR}%j㸘ȶ[GiT_%Ֆ)V}WS'֪mu ڣ25v O~SY5t~EZ^Lq-+n+Kl# *Ww[I) R}˦GUV}BFHF!be!-gj!f5}jA칻J EHF+l{+k@bEAU np\2V3ZM3Ͷ i잂%6ϸ-uc2۩"_H)ST2Ө,$|U!bY/$ЬzjA.2z72sR[熑NIoh-F4*sԅ6U5'9ToTθd>IF ]]N˫u&PEMPri8J٨2dHWt]fRRBJKwEzY4tfvNU81vy{"*TS9S(.rە@DTyrq(E5Rrk4jj� w=P"t*DT52�)sOnJ�C2m%Yl!-/q.P`LJp|8>LJp|8>LJp|8>:(-kJN*M H& Dsna!<~\oo/7߅l٤,-5m^kD2Lb;URӳTP@xŦ\\L|jU@frVsgb1R؞Wy.Orlpbi~-0 7r]ឲqiC_ HyW@JDy@ GaDDC9w]cPi}Ssڂ4'y䕾\ZtMzb,QLRfCObnOՓ <lPYeCIy!LqLL"Jp^V,[>NeCx΀n]RoKVS$maR +ԀF3B"\i.(6҃Tw5us־,",1Km|\⇹Я*�E}0ô~4NK\E[NfM}op!(dx]Iq5nE>*X7D�j̈gTm@�-kTYy+jTuE&99JWgXj2򒯹>j9WEc,(*[%yוt8&<fi2·d K jldUfBV}F H UIzB//7o\z¼O3P+k޳!ڣBY1ٶ'b Aew*7.7Ʈ@HRӮvE՗k&WfVsĴVJ*le3ga2vZM;dei;[rz.ҿR-|6(cBt Qn B@H(3\( RuYrY`e:dY܂Stq<Gl`{atZ/E9(4Cz X4g ^Z8t%a*V GQZM&@CrxoaT<Zc_Z ӏq,)P"osv2&_]lC+_ Z|*yU}i_9M,q/$sy[j' !5 )ڵm�["[P#/u+ FtevmBR}YlƓڬ; Re_yq,=B z ̓hikvT_@7^G$RI~]xZ jiT)np^<ƦqL@ƱBJ_kkWrW߃P}C%.waB 5]�-<AZƱO!$pj-lf "eiG0mOp`!EUzIڥ`9j!xcVϮI5{8DN\_!I! !oE%*PꍂBKJ* 8hg`I1$đN_y[]vU4[mG]$?{>`Z+Ec6 lrҷGhjܒhک-b{+[`)ߵ#H{t)흑;eLO[s#0I]?dIWWkK~CSB4  7U^Iq~˞ 29&O䡬1"F) px8޾;"Bo m.䕦Ai'.JO\|wFuZ̦^%6TܾXrZ%8a8a'D3+j4ҡZlד͖W +X\TmlyR<lg,͟ KK7F$3{H|˜޺}hmbC;t YUVf~y /o9#wmݛvv#DP` /P·�ܽB_vB@oRnYPBA5M(9퀚@ D5DH#nB1F( /%*\zQL[4}Rr* *z#<F01B\4\LQ{jŁY!D+fk!&GhDEVTbs'l ;kh!@n! Tz@<O'Fy[[zFARe%B[%V"!ת>k)kSdxƢ4f.@FK;6#D+)*<8NT2jlYRV'9@HUI߾%LPAcm̊@X҉V\df#XKl]6%vqIrAT6(xeP!5B Z#BJ dg) 7zU(1B!7{R!y!&Ffݨ|j[GyCe v@]ѡdjO0yK5*'U"MHEԈuQDkB6t)+tȖX_2i%},U_*rz#q\y !۞Ux͟+c(g<ʾ;V}Fq,q tZqC"lM!_!ŝ q,l]BOp+X6]s3(`- _ &fktBHS ۪ f ,Uضcc+8g3oaFsߦ9hPQxm㘻!; 9Y-W3v`9;̃68 < :E~`Z"LJ I3-t%woe<ީ'%Ley*)5ַ'/|NRZ2m46ϬJ-u! Ojd2mbx L-Y괔i vq~E`XʴSBw&ePN4j wHNo49&9(BD�Ȥ&e!QwӮXx .V24ٚnʨNv|c`"8oPJZpҼI=JZ|?Ǥi<cx9ʉgj1EʑE\FSRfV:|ɒ-^@šR$&-|Vy(^GiN5r63ea #g:9i̖^lkjV/o4^85^iҽ eaYȈ67#^Z ;rsȾ w)Re]@O!oÞ(R,XѐA^ʹ�{9kq[ik{̱j/|8fJd/!I[-RVWsd]9ˤEMwXp1Ovow29BM(Aq4j{S\P}BHK$mإF2BV]9M6Q"I1`~hKB 6 BUc}'EH"R} J"ciEHVe BjWY"i뾋)9Rb+TRd,y1@ִEӮ�>'ҰI$o:6sB +%,8^V(!X!E{"*E&Tq$E(S!2q�*ۚG2BT:lpv{[+&~U,aI6ify֊ŭHrA5vo;z4v-D=`w$9hv5)26ɲ^D( "PUYh X|XR}s X'p<ƫ|,J=IE+7QErjR}vPhDWʓZ l B*\QIJZYޕ?&QzRsVg#%-EkX/<m7j>QS<ߪ>ˠ*_ O!f\CbAqx6VP{N8*ϓ"4=AcW<W'-ߘjyķX\ڱ[8*Ol^מ`:o+5]*M }R%e~̶i:܂Eܱk=AlWႢ6IsPhLWFmWaҢqDboëلp8&OД›Xf09VPk vm e`v`q lX[T1s'/va�5jM"zNKU}�AIoY'O)|07o<*Tib?K/HWDIX2OUks7&ҙE9u;)(A#@dw%-1Iûh3YX]XDK(:( %yhƒ1Y:S洅r5_"(*aY|WXTXM-<grKJBO9 a<wcӥvBU撋t]/E'> J'(e\fe4ZɎ4:v屖ͦX|1A]q !(NDD 8Wv+$+Bp1v[ `يYtC79|Ab{[ _,2ډ-ѳE_:[FP<2WzefC0"$.9bb <D!<Q.`jKSb6*'lTUp/gs9J٠MyT1 Pˡ-ݘ g\6>?,<x~ީr3KKW|NJ+HbNlbEјjm6=˵VՕ !sF$Y&JB U؀W#^DQ&+`32 eɆ񟶰aBTAyNi2se#[hʤ�hd`i aMqq+R!kQy#XްZR⬡@sCgFjBQRA6+C`5 k"TcK"(Ld6sgpL(tlS .ì7^  3WСI, E@!fl[ͼ &2.<ҁuZJ.]ViF,2Yp�R{x+1gnz_Pd)6x~k;G y y~k ا "dEJ!O~V -O =B!>!ynb -o-r̵4BB6=q<AR- TR}LNǕ'qLy6<>FCSJmߛTmq8! ؕɞc\J^{G?jg,k,e\+Mr x XzZړ|lAQ8bAM'ՈQ}/y>jlT q4(n*@5F,kk(5Blj YT_n#dFƑu}J~ !(]o2d,ZA$R|369l,h%hЧ`m-BDQNukS9fR ȉ=UK1Lɡ&3x^1=-m4R?b<}ڞsC26zM\JG3ҹz;`IkoS9u7}_ܝGSrBΈ~ &a9]5-UL/(`DڷʟR"kS4Ey6j7l"03y[@JOȒv/g҄2.YP-ssZxʩTy۩Бu6n|}Y.05zJsBƫ $]ݮiB!8:iR8V@RjLʘx̖LJp|8>·p|8>LJpqAAǔ s/&}:G {w{( DwQbCQ5: B})0 #@DQqAb @>D!@ &Q6DL fR%Xɓ2q1Qw1FMwQ2KrfGE�b"4Ib uީB>L5WH\69L%0A S"tsD !IJ* uL5puF!R=3OUT{aPiTn☉H#DT]cQ<c97j#fT&E�4x1bD18�xw!@vWr)� s9&MzcUqN49Qb ]30wL5"Lic"eTw(0\Lu,< ݕFvY$*9v}'ՠ*"!༂0O9f~ RN2W/LiN3,Szx@wn v;v84000gرc$b@hQEA bvL�3CU(L�i^&)RJ 6jT23DU$B c vJLw4�1O?Ǜ{"`!>onQXDcژSGcM m4eQmh]g n\o*1"9՞l ?zTP^Eyu).9k5Zpe_ͥ%˷*vb)ZV7%^D3Kc'@aR9)Z(@N!QS"nD n,ߖbAUUǙY+^YYwWUi 2y<l_6_ !FeTd$x9"D FݯA%*^h4lyi=EaF\ʌ;sC ==ʗ>StuCo{Nգݨ&Q 4Be7G#$8-s"Rl-+vBC>M]tnYO=%d6~~1]=;^l@>[6v>Cz/0v%rHoB79Bp tlhy~+ܶt6I%-'Z:W#uIaOd#=r[-//Ef˹/0v* Gb|&B*K)qQ]{|L/s`iķVj4K2&r zq< V4}Էc-vyҬy#=AU_EJՇ5Bλv5C<Z`~оo&E^bؤk{z'"H*k<H-ϛRim$nA)a+ hrϡ2>BEasXԻȖ{%2]D*H3gŐ"0[ OkiAHH'%(w 1D"GnNB>8u r{x 1 !(r_ATw;"1:bQ2C("Ωj(~zD E AѨ"QSq)JDew cb9*D%:#WQEdZ1 1 "L14s@4uJQ bvQDU`"@*T5nd*b`"~1*1HU(si)i- {߳ qeD sX�fT`uNª<ӤUd㜰WxUT�ʎBS;xq q(:H""2KӀ*"Щ RϞ}*T q} #L~iR*11b u޹%U(1]18CN!C1LCErbVk (Ds1i' ,!V>i;\'%VĨDcf̕nB S9-ubδz\ܢsHS%-!7U'sQ2QP3FQU1@QuZy͜#�&b"NVN+NyC�8& 隕]hz0k]|]/JO3"�[TMiˎ͝ʰŤ0HX8))'1Qƍ#ߑL5-Yd)@fÅL"-yٚ*Nej jFyWq-D^ശFHՊ&B̈[@K<6y` /g8%V"=%B2FoI�k}jj+Sp*I#GZ|cX~jky=΂e,*4o^నXeF'DȆMux86Pql. _RmD5B!MqbZ_K";ys!Yݖ;;-Q&uZ`EHƉn B c@! ,ʡ>!jE~MRl! =ʋDNL*+5Zthؕ!t#Fè__`4GqETؖXgeqtHu؝/ϐD..M6$fqP{qKlx.GSkަCE:vFHI!E̾FH9]1#'uy<[td1yI!+zDRi *8]VˠZ`jP<ǵ}/mױǒ5r f `CJ|8$`4 ?�l+WJ`ca<+y>Fu糿 U_Rw(U^ O0g7xJ-l;M`_&*r@ <*\z\Njy~=]YPҵY<Al!&iz'ק(] 2W-X\k-hH1F#W7ZA6Pp63iQ 5BKx!*zQCQTAU]|iZ#3\Ccv$ N[)#chZԧ2(ϋCs{v.FU)]✷"%r$"n@LI?$2qB3SnYIUHx<vCV9LAUfs/WfA9è*{&vӼ !EHDR#ّc#"0aZ("L̎;Q1HD{f7-&2CgS</`N TA =c"!V6\%J!9J*9ܼsOjuJOi)YCQ"J!DUܱxr$P OفT4q̽j,*"J+#8u�_x0G8�4mᬂ)tJ\Cp=c;ܔ0>(�%΋D+�f(C$⑙\1w9QU%U@UU:PN m%,iTqAr}}cǤBJ*AHxҔ4%9f;FfG"b0TsєԏQA�MUE&+GM{8DH 4(La"u6LjZ$JD<o cW!f|=Dc-u"sM |ߤF(F9h{t0gB٦W9kl=ܡ9P WNd# Rp^a F=[4KI 53E'O>̯ E[kR2LOmMG5}lWr,2D(Wf&}LaXŭEgf/̗4pNYnP!&qd8R*3^ ޚ\Kj gJLA;[:*#$`[Mĺj΂ $ M)% ](%}#w9Y" 8秬 @lgZ`UsRzY'B0d!6ɝ OBR*h<ųV )HBH9eKlDH& RDFm"hb5B650Uꎤ F"2@qD {R}߫2]56�c TҌWp6B~'̠Y H@&Br�$BL ,E4Bʰ\ !yң+j"=CrޤB Ra*hr%3O Q"^K+hc*rP+Dt;!8’dlS8,CبRbFX,.!ĠH"dQ'T!T6H&2TՇ lZYRDrPd@-x$T[J-A!dRBu!"0\,lCP;<!%,ݨPDŽe<`cJOp{Qz$831Dۗ֓ZMtqƑcQ kk_;sP#Y &֍j`+\%[Ʊ 3hEXG{8n|;CW)g=OzeƄ <P>*U_\te y>PҾobVȪV"[:ΦT_TM1<@^kY<3\O OШ'" BZ@9Op1(YOe Ht 3`!8O'{2*jO;M4ӂRwdoیq)bTZ+-sBA.*+!}w1]t;u;g(@� rw}811 LT�sMi˥[y80Bkt e(8v}3wgQcq 1D ;vws]JfD y5q<޻sy2)+9u_$BT J&b纮uyﺮޱg* u̎릕F Q"; uՕ>j 1n뺎-9DDM�ws:=ŴT(a1:wnwM?\wi[Rwilf<1#U1{I8;bSwnϊy(H}G0xq$Fnc0G&x=~;B01k2]wkC333|@":08cwPu>(`PAp !a q<8: W7�V~7wܛ %~;DMu뺮ﻮelJSF$x|P 111;rgعysLY^0Ѽ[H(:i|�47<'3{"ODιw~SI{$a8CQU|'w,p8c}#Q`,0c!)=g*8}*x*`0!PX5`^U@T!nx|CRD&VðjHl 2tjD=Yļı*ͫs+'~q^lʻKi\Ua9MV =U A< -'3x+Ӹd�aCZsn�*w,a@ǂ<å LoĊPȴ"lrUK[ÀUrD @We E[ !O.;jK2Ӛt[AE `c%6l,n56Cy+͉ۚX[BF5b DؠA]!d śV4B]!$O@HLo$BkB !ml Bvwk@Iq@`MV+4XlN d#JJb}kKq jCk뵚UKc t%6[b))mB6zMy~]�ⵁ3$"zF nBVn#Q''AB&{!q;3q!B.T}s7#U_٣mԃV}+`9 rm)׭;֪=6=ʾ!'qܘp "\2Dȶ4tqSL-g'r8RӪcG(P}Y# !.i !v&ZpA#EHжveٶ߁ARW'hca%lv5e~,Iz}C<+!rMe(P"J!]G8~Ս{}{bD 0ESOc8H`aDB8 v^d}\q)94eT&(2T�N18!0p87bq ABiu, bPDPU(QFP_w/?އ B!DSLDSs0L'@Lp8D%ĠND 4j1p(!x<D (1JSXURch8e1J4foVΛc+<&N;vyabNA̬xd'D*%Ff? !FY*bqp!(NE"Qιc "20 1b<O?1 1 }I%@@v eDUcdb2$8x<v]@DD$BVN4iA"Wp7ϟ'_|ŧwwwcJc BzG qZQ ^>O?ї/_]pp8Jt�΂Lm8y4y 41!!ȑYGgn#J;R'Cm9 :D9 h~[{dvM~!1qZ+ӫD!L4b JLbFb{qw>ru(G2o\x:<V%TӴy#k F!`v;!�Srzxru|oXl V<Y0x5vDbrՄ-Ԥ*SR>by `oȦ 'L]E5ijuT_R=Csc}uqfٱ~}%k-6�J`U* ` qpˏW\Mh6z&kl\ּ>w6N!(PBgaYU?{mL ҲJ'R|yr�ȅ\nmma^'Ǻ՗*�8yf2.8ݲ'A2!!iѣB&"EiKj nh)l,/4}d]UR{{"7tfg=L`=?l$1ɪGKѬFz+*ŕq~Wx_&r⟅W /0s^2r`{ 7IbF/ DN\v.*2G6#>FxBd=1ho替O"t۪ovіљ|4Z}t^"ʢb y8?+RU>yC E>_!dFeG  AlRE 7bBBD=Zj~z "ƉK*>j'Q'a8_쫯|ы/7ûWp$Jzw8*E%�*S^Ա#&8ƣhr^"+crP@,@$J"ܕ*+Ѵ( avHQ$ PsFcB9f9.C|{Rf@DD%O>}W8܅(?K X5K1‘3:\u%�VHw7~ӻw_/?߄_ys{'!p;c("JI&1JהE.D v*;T0#w;j=1cN*�QXb 4N0gr;Eu{DB]OÛEO>G˿|{p#L=q׿0�Ubx"9fQD`D=Ba 옜8+u;cn<0t 9x}o׻gϟWo8ˏïQ΅qP=}ǟ|򌙿~EuǗ/?'/?^E^}x!cȳDL  SWUaBWWWW~cd&;fTy�1>GWwo}-K'B }TD19gD%F !!YB�:�19"1BU!3H14gr R !8&"; ! QsWW=aw_pW޽02ujB¬Ӛ~Ha]u AD4-q]cT"]+Wfn1kӷ պ3N~{CqdÓھmn)9!r fi.WQݤ_%M*jw4oD.FRxuIҷ2P-M$cVRzIUjhNEp2\u'mz(UQ( pȓ t4}qݷ'N_|zQ ː_yjojl Sk[H^]*2;6h5vl{ex.yY\vc+~6bV]j6C۷$uuT?r֛He[T mdeGy$£d~I<&JqQ/jbbfS2qv8wapmL._̳ȤJO?4JS+H E0ռvjSG7:mFzӠIz7W5ra:w{|/Lc[Έ\P<I MIl4=1:*-0-<?7ɶ]ʥgĸ/܄nkuނGw%Z5E~QREV;HV"2%'hvcz,oEWY2Kjs5%F-qgj<1͢cLi5.-תT}ka[e6đn^Q塭ce 6r壍#uojK1ʍ/ε3:(0dR!Vϭye,)n8AYZPG lQף]/*4U rKYm["[m:?Ůzy_ hv^䊦X�[~"[͐';{eC) <)H~~vGwu!Wp|8#OQ AQisp=J1 D*q{wo8#QiQj`fBy3a @Tγ"1cPUC0Hqq{GĪ":V$"iN(p2tAEe$h~_~||+!2 Q=D{FB9vzq}D@|Ͽ|ݫ>zaTE|`dbׁ uQU`OڱWR("!bZk8( 34!M"W�*QXI3sh$xE+cfG@]煡PCĨ 0H$QAx 0a]碄ׯ](=苟U_CP԰~o~Vdሧ> E$"#G!<8uuS@c$"rQ0cžۉ8xtӗO=o}_<⫧w?~?G?8w޾{]A*2Fe~W?~oyeF/O}qs{fϯ>yݾ8DR3D1sMTn`r U(DTAQi 1Q;1 ̝;w}bԨ"A1**r!0QյvpaPE�V)i_΍g% �LQ"F9ιic!Hpg/v}Ȼ]/{Gp<>8wgwA;&vn2-W4Jg^abZ윃i{닍7Q0ofQv: i 7Tf̮ 9L5 Y+3ӶDԅ{-dUދL"} =f'JJX1U'rk<zdUC4O-*Hn;eǢzK3ǛUu qLHxdx%Bq[] .H@OuvzQ`59SQ�wnBodeߋ2uir #{E(E:rP s Iel !@n!%BZ^iBȹQ~O՗"Ȩ,gA@aVKt3~e&f{>S_o$XakJO DKycZ&B60Ѣ<7+cRΏx!8qKVk6.w@OUzq,kӡ 㘛YС"{L+6XZV�;Yl쐁45I.35ݢ@WU+YY!RYEg/6vomlvFHidittI x>5ހʱ ymo(hܨv{5D^+Rm,˟d=`~�r35X!X{x �3 4Mq< VQY8?ytܲR}R g7#JWPq|}yJM[Ѳ"`"Op=Gֵq,T/5*Vز-_aqW<Q%M̰ 1=׎$KԤFIoi D+mX8D_SS"7 K"X*6Hx>F`þol3o�kh:jtB B}yPap=}/7Woooc8FD|wEܑ0c8g&1;ݝH�Wg?׿{_5qvc c 8s$L;"Q(|`nבDBUyk1 E4HCh`HwD He|8w^> !F"~w?Q.T#YѨB΋ D`UҨGQo4 @ 7Og|uP s;�%8 H%spP0*;:&KEU] a8(zH!0wߑ !1 .꽪xruL;h+tb=xt"w4!R GcCcP}B8!]pxtwM4Bԅgx1ߏ6^A>^E*1 z$DL At`8 :y̠@Q11!Sǟ|Ƿ뿃 NoP^<WOWW^_ߐspO˳oaϟ_~/~7?W?/)q<(<wcg0q"vg r(@uqJ{ z:;;F=v" E qJH�;ѝ^Fđ\G_<oo޾zRs]] QAQ@H(<o.g&x!Q#)9!jPy+  �fQ `pt*yy7oLD̪|^m3ql۴=3i#U)h"UrrUys'C<6_pf[rc'XV֙wT[ךּ-Bgh4%sE[7 fv UΎ3CڋhЬ!'Cr ՃcTomλv�ҭ;+r[o:T =prM $t**x;<ߛ!e�}+lt6/3sb%r{mw {,B82yIRKD�qZ6�hm)6PK(ͪI3D.sDc]Xgq6-Bb�mrX|WHɏ6:| ț38Jٳ:z!z89nTq;] .e/'=8j'55/'nct˙˅f==Ǎ]=Ap,m/Opi\)SA3p}\'<Al(I49<-B9ߺ,߈<ؽ}:+cr+g8~~jFt_@Ǡjλ-'Xd~>o~ӧ^o;Ļ8ḻ<竛 ›7nw~_~w߼Wמ|ǀy_1g??o<}O_\_݀8{h�n箟׻M|w_ɓ^"w1}?}z;}?.>y~K'_ݾppa籿kG7A_zsË!F׷wb'WO}^yݮ%fCexz}|߱p{w|_7}wwno쯮~Gu~}w{wwO=QaA}N}vyshl���IDATًnww1y8:vιn]=<yx?qmq Ƨ/no=�SW #{ۛgx|wa|y]paq>|Sc+Q8< p=p|K){wux8 5;ȉBB�s<<wO>yu*Bqu}}}spxh|tWg~>_}o >yaWgp8Gn}wwxz0 Qjɧ>d7;/>g^vq _}xv)޾="Q?~yu 0Ex~TEw;U Ƿo~rW7A1\9]/7GG__Sc&~O{,hﮯ?AUz a}{0UHwTB7q<c*O_<۷pjbvEH ykr+U'NU58 ٓwʍwM1&> ܅zNCdRs1ߠKɉ-|,3ulÊT4ukZ.Ml}taM&ƛ7] 1[=_ӹj484-T)s9^[p|^Xƚ͝nat.|g˻I65~u6ÞmQ^wxsNζC]f Er42քzRe,cKKWSj(΋b])d9sP`(V/PQ[ιת>R96H✱Q)<o Vd=Vc#F*`ab _H ؄ !IMlxzBʳ.+6*"䔙ӵu߂*56(ÚČ+R!kQ;Pȳ`6NJBq\6v",E!H !ãjآ8D+Ql`Y( X apk+P$Q["@MWhRuD†r!2(]҈6v[Ʊ0v!0dJ dAȺƢ<g_ڋ x~A+6<_,7BoLKS `x*]P cj_B} B*.1M$m,+B'\A!m!dldz $i3  0>:iW jlTƑ`H2Nx5}B+S<jq 1 ItHKRy2V>Vn jշ!)MZf5az8eK .X;r6#؈:'R}6v\x}\9kOlZ,FqS18V-P>YIa+[hB, HIҁ> 4cr Hhu)ӉBG[hx簱U!5Xhɓ>5v/Zn9YjJ8!#?x?}~׿_w{ǷLGǾ//^| A_/Ͼo~u(7_<q>Ec!mÏ~_O?o?9"2H$ '_٧_0;7??W?3'7//A?>W/yO{o׿~W/_~'7WWW/w_krqv<A޺G?O~Ϟwoo~'?o~O?'<WOT~a{O>拏>޳qO~VQ /?zG?{cRۿٓ?ٗ?^"nxWjŋ'|zsݍ~O?Ջ̤7o~_�>'|>cM_Ϟ>?}y~?}gG77~8~=ǿpq?O> w8үaϿq?ӏ?}߃o<?%~ًW!n\?{qͷcx"uՏ>x$7?O:W_}黷o~ŏ?|x_z͛wO?WWO~wxO~S'~k~Eu?Oҷ~j7]/x_Sx88 "*}˟vxP]o_=|ïvW|􏇿o>y_?@O~߽yoˏ>ao0O^~Gׂ@n?>쳧no߼ͯo~;\='}ѽo߾=x{uU ?pv}w}ϟ\7?c n?ɗ_ܼw귿u|x<\wO8q<~g~qwՕ`1ī/_\c?gDAߍwx bϞu{ k<B 7ű$G3fO[Zs=[(zǺjjw\AN\oMS W$J D6d0Q0K%] GnS~-b7D^Bh5ʏ/m61<-4y{E1"Fn Ćt5"7h"ŗզjAegbz|kL Bn[dK@N59 *2UvjZ^6DOtQ[#OX\P�ۨ `'1^ 5ʗK@ ZN8i?>|p :N)FFȪfIl{6v l1qix *r )4|th bҥ #lވBJX_UX;Αަ*x<m|)ϿXKEg{}緦<eZ|P}+l"ET_[uICH56RE�*ׯYdAQ'ؐ񔄍]N"Tۣ\KT#E.Z|ϧifó!G[6gMX v�U|=]rU]5==0ro;|)Ma{Wf~nxnA7@jf7) M��>0P{ko]m[3u򝜣->$w;r8ǻP:^DH-~W[ߑֶ:l2J&9,|&) 5c<R$f KY�Fl҂ٌVk>oAQQg/|ߜv#* >S}y=飽?D�|p3 2U`w$noo)M -);xxQAރngZN@Z{^|z+i&Z ?{hhA O{;y4GG)$qȅ`R*/)4IW'<t8'?>�xtyy8CRx�% <tvx/'W5JMQrg{�2I"# dt0wlRib%.y,:ޣ{Dr2wz=/no^.l1 #q,Q;??Lup2>{ ZXNvl7Z2 hU'qDZ2 % h'Ǒb < Yt=Yv>^'0Z~/:L;O>{8Ml g  5gq ;0biφ]gatNf֝/ބI.#=~{R'fI&DLH?`~ý˫D+Ι I#tplRxhԻp/":TZ*Mi�!C`@\i ɓr,*BWǝ1V]eAJIz Wqk ^ȥ�CI�JI'28"?{=D2\.ǃ{xy 1b`)zL' q;<<^,I\J!IvǐJ^Ͽptb&<1N9Q'|6>v*QL}`o-*4I$ ;=Igv\{PZ\]F*:Eb 9.ǑYVoFu9Yt&* }.`Rm9!ogNp~Q>z a*hl\L@5 7}׀rameUZKpֵ[}a=|7~gkU EwUd +, \׶|K*+V^:.Ftmf3=zStgPV8Qa v0Jk]NW㇯5ʊmI\ψPd>~X󠕜 S3zPc8a|YﷇoYgD"> FhC?6WHP6H(K !EmU|燷6<uT*.ze:?drч�gpDa,Qyvm G_3̖s<`3B~gݷk`fr)ѶQϕɦs⃛NZ] 5[1#X69@Qu&V~k1Y$Z!rB|at+1¶>/ko߂7o0p)C7a\Uomkz 6Tx-91&p^h6Om՘k^ɳCTeʕkx#==b7�hN6Xu#g“ς'FoҎR,Ք*|o}7 ==ϯ|y?:]fd:o?>~tɞRj|w3?]ݧt/.ޜ9>:|gx.GγO>you@'|hf|?g)E.pLf˳K)ON^'۳7g/>}Mb9<^__]LѓgDFqR̗Go9gez3_/TJ5=LN.Wa<<O^r<N4{Co_-Y+pMatJWwѽ/{#LLES^}j۷oWrz=nO^|~ëxq{p2x.~{uq}z_~ýO_{tt?7W~}s{K+|zM׫U`oO?^^YÞ%zqt4闏OeOv?{q{g/_^~vx4`8HyR*t|u�t`g_}{=]>~zW^R޿thX.7ݽݟdOQۏЩ>*|]ߞ=J?}s|dW?d/:;Aw5ƀi'UCT1`H2<^_J9DFp''~'?ϟ<zV{+U> .i<;(Azpav)w}�Hq/v{vz}.CÇN\^hF__M'#atr39:>9xE%G=i�Aѓў{;;$i|p|oAZys2\vw)JoT |$p8d¯9*%QCFp;{{8 wHU/p ` Q1c1B�&J6F�Lb>+F͑t;r1%oO3W QƤr:C͝*fj)ܖkf9r.[M3L01uEܩ"(]?dZ.^w*\5j·)B!ɪjHw-B{ъ:7Qg٦ջK^H`) qQظц PT+lk\{˯򳱛Aseu[ Pk6k07wV\K4ABBlc̘j}i!M\I͝mnVb-L.moUxAٵQC}V[~Yȅ6p bmg˜b")n. 5|&l_c#*g5g؆(vcH.<`\ZSz9TlVȡbsv.9dQ! *Ķ"*g lȷtv0Tem*n;�&W74u>;TԨ/C*_kئ qc!Um:YѰ&�Em"\k!2RˬJl7" ^sM٪%ɭDzP ]N`;UHj@{HZibn!9&trͿ9kL6Ri8ĊM[sH^&U9t`tR4P9npp'ξIk'-:@|&A}k#R8|DE}"t~>ak;O No!X5[ۥ[\rBBl@cvE+9wp.j19;*R T$%B lQVK`�تK MRRFW@H__}v6MF{(p0}W_?9yxrt.n@ގ9]7gn{NWopIq5z|~ v0NgGWtx`2/ӿvxx{Jxͭׯoxd۳~ub0 P,ϳIQNg%2 ݽnwVf< Qz 'L'g?{^g|~o97]hw_o?hzg\@��LO{~!2OG?D+ߜN~4:~" }d2ޜ}٫tpt0ϑsD�4of''g/7<}bgw\L8vt|pv2\~ N U WחgIoÑ{3LGޤ_`GOvNNwF{_޼~;<DH/ PBxp6ݫ_ßno/|O~~X;{X={5`zG]z2w^oǑ 4L#x!_] x?a2^h} Ur{{辔dͦ)E\3Q"`9 #4( <4Mt&z o^.Vt<{pސߞdp}V|;]>.K$x D;^o(z@Q..o^߼}5睎? ; 8]\,a|Tn{`v; H+o^Noz1Y)B1.Rz3Zv?8J飣nd pZvO>)EaV+!hw:`@2Eθj>O./pw.!j5J}Gb@YH)R&0ZaD#r;4.ڰI-hzK5T 'y>Ԧ.J›"պW67ټDW6k>Gp7q}lTOh!F9Ml-[n) ſfYNC:ku @4Qqm~7^]pb}h6&Wq` z{=m o7Ih>!9d\*[-?s\L[ݞ𕛝Ŷi-}1(u'� YGji!k Tl;AA` ob!4LގFʑ_Sq NSm :GjQ˭xLnuxoFhtޕu:]+8 ٢jT+B~ O huaTS}HjkkkAn"9~_9= Wqpw ZDib}>G <qNkh0^2|H.J;-{3z  o 9ElGe{7Nci n)vK~H:m) U͈PElt *cbKJCBpL"�`Qg~WEL@8"O:z}xp?C ξIяQ{%!'I iD%\r<D wz?՟ݻ|x0Fat2A{}_i6,ޜ}=[&'K X]_D 7''NG)I4Gr:Yz9j:f4zj2\M$^.Pr$<3DOn?dZ?].G) Uxyu6L4;�ϟϗ_}7_a$@)a.U8F\.1i$IG wKSM*E ?l,z\̦8$d)\x6 wOw1<tN˅KMl9.nn&ax"Y.Ɨْ3ۇw~׏vG?ߏ8T*%Ld?}~Q0/FD YVIJff.]xg Y.�#�(.Lj^ǷJjN&T0='wI�ip٧>< :L@2B @DdZ )a"0=.<d TA0d9J(p8HI *8,\x)0�FZVT1D.5IM5)Tjys9śeV!Y Oj`x|r4jF)z;ea^:E@jB"OC?\L.fjҫU悉@wFA.S$0PWQ:dz0Zv^ǔr<o<xzp0z{6ܮ8b3�  vGNǛL"?<~y> TZ.W˫߽RNgU4T'<9囗/>;DÓ{igd>8aYQPjMD}C+-eȁ4V~h[Řm=c",UTh8b[9 K + s\\_ 0j}@&�<>f:W6kg j[ n>02R51h>&z 9d(剀282TmfN)(fpCBrlckz†=)DmX6iC5h{ʙ =<7Mbnoe:�!cr,b#);Y5le=.UiBmJ4[iܚ؋6{X5~<PKM곺zlah`4XVAx^l`c؀&6 *R1(QR_gm T(Qt35}qB 0b88'Bj\ !uc!ĸEuaF6ɭo b*FnB)Z@E}n!d:;B4أ66 !TC6:6N oK&rcJ)jrzf%;- 4ZK-m)F7)jB!>eʡ !C*[خIetsl!G5*WЄCبû!Z<םzoP_ͭ*I}-:nB% q ՚ !"Bp B¨vD!TCl� !5B.h6򩎍:B ޤ>33VWstR4φQ9.M} tQm`b "56{Ԝc=H#9Ge o P o(64_% yI}5#8hа* o>W$XoHZ#Qh6UE}5@!6B t#L"Rp*8!d"F 66#%vHZG͜Ht5O>w XÆ3KAY:MnMI5``$ILJ_ͦmax'UԚd0x^ (x</x_<7o޾-zs5" CL$! MP.t&mRחl:gA'<HS&8D }Iq] Dtu2I$}�5iD0+ƀH{'8B!p<�j qMٔ ޼ W!C!<|<"#b$TD.5 B� R~rSv|}y;Ap@ M#"ιC%`4ŋ>=.g߾MO<G%1DNS$j&Iԉ”i2Ѡ<7oofт]Q1.矞7>N{} Ok i !RGQ8G_x TJ2D(3؂&#)IdFL)MS�#΅ǐ)b.t>[uu/>'oܞx}' %DJHȅBt_~DR@]D:C8G/B�""0D8`RQv;=Α1FDZgD#PRԥ9'!g<?r<et2I#)"Zju{{\ܻO<2GLJ{@|:^p0r'uƤR1<vIkҚt*HQERs>QhcO_ i*IJ(UF$N()MӽAŷJ! .oٽgF73e@*@ 8zj!/ϟ za|Nj!I1.<FsTɠȡR TMJ"[rsp MP;A-(l/m3mF 78Qa3dB7SUCe¬Y r,ClXM޸~^ژk00[ocVb>n f#ĚۘLeJP_y#sx{Vm]/=aB kf4[y-VkW9\C5PE72dB(שaB!l: i�w˦نojmψQuۺ9G:;'m:] d&7@HjwLj[I6MBF`Zbfi6.76N[qwKe;CиzVn©ήaZEo۴um}w{7ngBuN:&;|Cm!z6n9O 8@{h]bm܅�afBbr3VW`@]LvQ_w>FӭErӳ8@nY!Цkw79C![u 'vThx56b hWX׊Cw>ߗ`-Էy�ݨXstOo  mFb@Os\�[Q/@]f�lE}ע䚏pȇu{-*}-#YX`z_ V��0gErrӓ_}/<swPRib< "@2VL_oLtO?~y77/_{cG` EN}1tJ__}oԤYBjf~A㙖 8q{stpupg$qƩ @3 8@(8x>S*ACu n`g8đ q*%o 2/l6c)R*œvwI:&WxE�Dá?Z{{h �i*Dz=GϾn2R }H; k_ <_c Ư_}/U\6"1,!0$ _iv}c7//vu\&`?}~|tv? # B0s HE41{JkA)� \{~tyݝ`Љ#9v0`'_?D(V^F/^<ǁZz'!v 5ܗr:%Rcș�"9G9@b�y<~g81T �1.�(-1y"[yy a8z|6O&dZ.C }a>y^~Ng:,Mup8c\pH4"2O3�Z`wY˫~x=G@Lkb!19=ra__l/v&:* 2!)AJH/ooofwPhop5~tȽN~pqq\-(y\<s|Hk@*')y�!i&0YN'q]|l6q~RtF1Nm,MZ4M=% V/psԕeW#sDe1ʤt>J[~R7ޛt(SFrm`PJ*KjJ`jVrQ+d\^ml)l% \Y_Y֜\Xle>3Woox/,jmJU'*�rXm<B .;]֘U;&+m#% FkTBBg< 1(-V<X+ Y]XB0ڼXPD]gwV̹:7lR/g||⠾J dYQ㺥{ks&2JskЪNg go5ph檟ٙ϶>yckX`"CErήΤ{4L]%i�y&|$$$Kw6}o]ns*ܤuumؠz|\۲ ggdηMp &cldSvWRjMm5[Z_~"S*jl\!-b"D5˛ V.>@+a۬Άn2٪2`�Vnx5mK~lsb1 ݣ Vg»ĺ%s[%:lxL;rTLF}*вr�KBE}[8vCչdUa K^kjd0:xA^6Z[r>+1n`ίZ*;ق[V_8do1_;KTw ˫ϖ~sܦl)SF^Oڍv֘mQu9u^%!n[6j߫"{<:2B bxώ~_=Z� <sR"> f~}qtHrdc#Ƒ^J P|BSǃデ\\a&p8n|;V|1CHKno=>8c qs#7ߜ>{r<ztp쥾 8(y`c7:~^W$Yr?=O|:^v{ް.o¥BEb>A Go^kZ:/^DK/_/'*:,d O >}@r|xx3R|+RR0 v{ r7~8}pxN ZLJjxB nE)}.4'-t}owxH*O7Ltz$ (zq<?<<] 0!i N B,\?< ˗/;]{A)e)ポgϞ]-Ƿ/۫2:dAPz <%za3V F|�SupąEj\^]]So^g,�)4bdϞ?Ds ҀEpgeG {=y]_.$>'|y|X.^۳tz/p74<xpZqΧJQR9! yhM)&MJD+:? gzwvpI%11ѡ52QjVxo{u`Zs\+`,۝* w I 41NVh rΑV*v!" R|>_z9;Rx+Au !Lz5�sZSJRIRk$Z/v h^̙Z:_@Óbh[m7Z>t[xc~6 YPDtEhQw;YSnvobj^Ƭ�^ʫWRҾ�&9kG*t% 5uT6{h#7׽Մw[~ !eEA}/͝앋&Fƾ=P p7@־6xu<P+v [Y]U mܶur GOb۹W1U 5lז Ƅ\$m,m E֤(1m!A}1*�9:<VYPM7"X3sE(XWm"&B8 ! !\aɡϸ&]kn@[!c�mpvJ梾sULF#%i {ikB :nPьυ ]z`kgg䭜*;ZJנJ>5Z`!A,ꖵqKgW"�+TJ.بB${tvqT:;32y�=]~^kPR}*9;5bR}-kl 5NBjαPp.6Ի]ȍɄR f449n)ԷmlF 夾EI}�MxnP_#luH}G!͒CHxV`!S2C5 -}+hv4M[w˸B1fnlZت󝖵FƆpm:&X%ݛ󉬹E.`owpv;ܶOXc|-Z+Ǧ - w4YP+ذU�je9pg~ȃ!B.^_k?x'?y~$"ggu&1d>~ӟ|rLn_ O~vOBv;^Oi*0`IB|(o7B/>yl0wi8I2^8|oÕ~;yяGuVK_}upW^㜣,&l5:ء4O0\DI*?pIA |/X.ߝ]]Lӈ/VJoӧ??p^]7Wpx|?^_G<7df>_,fo>~;˹d(z7Kx`/ZlHVy2 V 7<}v_M+D fZ8d[ L"l||ŋ/ F$NSDWIP "$~`RKc>$b|/ vV4!:F? t{k=(I$ "x@3Aq./$ŧ(þ a1$>@TIҫ) /=xoYz'ߦgs_ۯ_>ϓDA7q˙:?x{ъ8 pɴ g8MO|tw6C)9H"p:GϟҔvDNE8Co! M{�}N3@V -X_Jhd쟿'J/?2e }s3S9i[=>߬6\-d_|?ϟ<L=Jr` 8gaKZ̈ Ԋőb|joL@^B;QlaNOq$W]{rOpv;t~pttx~Kq{׳$^&w�toSޓ'/vGbg$vv= 1UKc@<gdi ZrҞvZ ;t 2XP!*"/H ֚kc%:KʍOo7W*Ə|^yP� X\zxɌ{#U�M j(rDqVSGF*uCrV h <WȪC*%э 4Ǝ.jҦ]8l'W_Pg+[(R؎tv-ۨvWSVTuk6wjKWLl4TGx`۽1_ZB]vn`�pհm{<B$l�Ԫ+E6zjR6i`&B ؄DHK78DbyCcyu`E}6BRCHU ow6‚b !5!!=j($oBk! b#�{B/9Vnh 8'4Lp>*60吓+SG<kn,` -ަب �9:z+PCAk!}:Ghu$Y \ZPB#T^ 5\oI Ts|ք9dЦ nͯQGkR!Hn 6#^ړ`,ZCi α;DzsC$58G>slP_K$!9=D`GݹrH}HDF,Mv]64.-z dM>xG#αm`h`ֈ:#H`_o# nqm[K�$ 5tvX! !I׍l&-zv*@hP/k{k^g3lb=LjTu FlƠi٩* {/�4_?@ 'RgfXfid 2 4PhMZb@j> U*P{;*ܬ&$hg4U'qXC¹1؟O"I-<xn&K|Hu^]\^/fQ)BW)?MrN" q3&$IJk/yp Ip!ӄx&1oW_)$~6 Il> l:YL8~>^!!^GW?b`ۛۛtdihuW&bD+%w^O ɵRy^Q4J�2Hc6Ighi,¥M2eIe??]'7$R2Zrh򻛫0|Pm|v2Z1 !Za껯'g'YȦ|9I|&y4 ķ_]>F .V/Mcu�ADa4\ҫo,/BO줱w}<?! >BonoVII3:~Ht/:q!<~{]GZD!;{5ͯ޼)Q)W)'?jdHOco1^o_-gcD zZ4…޾^~zvLYu}W+5(\7,Ry|~v32aKbo>WWl%,gt}.e@PJ"__N9vt^_dJb'�D&o.Φq# 'c:{832]"2߼^hҘIKw{#ojsO(9@kZjL<ID\]˅T CXd,QkKG!Ek?:j˛0 u7QZ,gRiU7;jIi"d!oӳH) ի8JSdpyR/v.d%!"{z4.g�4i#ڙt큍w9I3�DҀ< !BL#a(U+sڞ1đrV�55i\/h(ۍhd?Pa Hi6ow0y a[q�,ɻɖ!٢@{'tw5s6R^[-_gr赱moCr7Tu{6_@n AFh[y;M6rƘΦ۩ݰa>Z]ju[;#ذG^̻t`Uo񦢴6ڂ*ssM:qUun]D˻ƶWl~T#Y㱕sj)h[W9xpC"-U#SX&oȭt`u:Q9"ֹXcwB[E.%p`[!H`vg[$-kNn&gnviИֿ;uvC׶~|ymnO7oVM Ϫcc}0jm\D]/ڲ,?s+9((Ï!mrٵl[^ +K =:H� gV0׳K5�֭;TZj<Tr9NO1R.d6-�y?&2N0 {;;;dۋ8;;QjE*Z!CX,˰t{{{cW׷J^phwwT-ћחP0Na<Cvvz''$E[@?8IrMÛUN;dÔ:Lj40t8a*ozr#([-7iʙ?F;q-QbvGA}LnQh9j3dz0۽Gʏ.:Jta5㓽pĦәjXbi<rOFÝQ;@`׷$Z|itq8;Bj/>o?/߮fqqDZu~? Gq4\(RF@ҞJx< �ƉR}ߟH`srrogEt2O<@dRE^C4&(|Hv;NGLt|>YVRJ؃;|vyu;jd Q~_ksnI`&i2Nn"{wX]_n'DF.?>9Zr5/T*PFp$ dt0z$`'HJu/rTZ8</lH+)@N8JD"DFA|xv{q"߾MҨ?蜞޿d>_9Rq&8ip&p6YwAV.X ]Op�Mnq `W"p'5$I* .""pC�%qTʄHy>?8 X,q6 v: UGK$ ^*0r?*x9${AoHqi2N"{A}Q*jX$uw0VZy?F Wd8_ ?R%BA 4#4.Gw!HJ1IC<;NjZh ��ygqXO�o\h:7TF*?Қ1%zk2,=UJC#9`=74Z,!%'-΄Z!ti*B#kPesݸrCВ)'DElGu9Aer+o~W׻M> _Ϫ\(ݘ5"qxwwn9ylcQhQk-W _rZv;!W7yN ֩ |]LjbfrjN䁢 FDH~"٥L6qoud"; =rzlܲBsh.j^.ZҲȁw;ߜuǒ*!Α6涡o) fAݜH2kMߝhGmc MHZl}p֑ w-{ɕؠR[w;Hp=Av1YϮ*Um"FH_lNaF6b;=@E }p7f&o@H^B:I_O�# 4({3- 8"'<(!8FyyR%qhwg TH0VQ V WRGahg lL],T19 D&P X(h!Uw<!F D]3%xdj�Zp&p}wr9_ ?OA{J$ҫy^@RK_�Ҳ2JK%"#ŅR&a`B8N/Zq$NZxt:"fsD  LhRJASiRDJ&b2/N$N(}ŏd0_.߄ii^!Rae~rva#<\qy쭖!eD {N1p>^' }%tU-Y(�s$Qhoow>/1iHInMt>[2 q<N;^b,1*Y,=<4M= Pfdx^pE^Б* l6[-B "1.x/IJsY`�N VĩqBpt6F`2v:pȕRi΃^&)�y9K)RiιTiRF{�aF t;]u%B;`Ej" o<:= d zu`0xfR"TŞDx4Q fDM.8 8٤7A |JyI"$L L@k(TL�2"FQ1J3JQ$St;^)ٌ19vAehɕ".q�BPg$/�A!I)YJ}xPGϏigg-M�/8oM];W>;Sj_`9UeZTKFwJ5G,1bo~˃4\jC-3"Įjzq]y 'lm% .aRǀ-emfM1.Z{YC.76M(ڃ#P3jJ[VpqwNm;eV& t:;B>H,gΰTŶ^vt c]k !-Z57͊m"J[ۘxqNR?C=Ů$U&W/B9]NZh=ȵʵraBp:Hb:;NkVoXe6;HCHu}{akr~.ׅC6Ez;D\C-cejM\^�vs8wﺾH7wL9]T\yd7MAM䭨}"-ڣ(t~S$o DDɛ#sS$s Umɨ|v8]$kuoّzP}tmum:z2PkW�D B9�$F �&BML)ΐ0HkDR|ζ"5+'TJi,90`8 'EQ� �JKMȐ^D§TqT"c=#JMNtRx\!"jN�1�L"SBbyl HV4T  DLR؃G?٣Q_́u9@$)@3q"t*U*e ;AG Qj"B 8 XVJ MD c`1 4 bZJP))U=*Z"n:Һ<}~W$Dpy9_kQq<1$RRJB8CFZZC5D/XWkBI"bd5I$D<$ E#pҌ4 82FE 9 9jEDJ*5" T!1 RdJ$qJքȴV�HH#'di-� q$ V<@R` |"B�!*@)"2l2@$�t �@#iR)d�♜%BDƐRփnDYnU$4R 9H0�GN4!�G`L)o!0�P,G!1}?t:^!M&,cF%�8n8jTc<Z%Ԋ�8C3Ŝ4bZs He +CzOҚ8*L$8^Ůثo\_t|"kP@ EC_*,QK@$0ǿ<{r!,}z3Qg<XK?x|<>x|<>xl>qwJ#/DĐli@�!C��^9@M/<|->b,�挀i�' HJHD�@32F 8!"p>G90B<�+'H0$BY�HkҊ3dsfbqyC7n.dzٌC 90c("i@1Z(Lsd (S "Ѣ�C�@ A+@@B+-82} @)Z, x]/JHr~y1xLVL%`B`5�@�q  |�!1@ζk#�ƙc88&V0 I "&gHh`Y0d 而 �DZ2q$He)l; t612 tg5Lg l�H�4Cx9YD3yK!9� IIkB EvFY�e^٘BJy^�(|]S c(i��DuYaΘt@[�><ZK`a3CΦ@` &Ȓ �4bf"@`yD٦dO.; a[ϠSV/DD/fHpɮ =I 7: MټʤH:|ڟ(- `TKmd;v[\fór^`kM/cNkC6l+{=Q_[hpb\Vx{?͜5ۃ;bh41ϼ֭ܲvP4kiM+;R,ύyߍf^gr �o)ܨX?ss۝>Tؼ![kPY o7Ih>!9@}rvxGZgG܉n&ow-}Q+j B7ݪY>3Piw["d-bK{FVm7BZ9d�כƂ8`鯆lNܡ~ |7x?[r7yK*B}׮׵P_M=}Q=nQm{]~8OaT!f\Wq^9Imo`c-ȷ&PBb]}] mo]�[?[/oace$MMwot-~&uu R o Xj>kڽA~w4)߽qdAMĽEwe¿)YlgW;2 Rr0$F�@q XP B� �N@ĈtF!c<[DDQkB2L0ƁRJ!29ϒD@@SY{ �%�2ĴҌgКHk�9"'D@p2<{)J4" #, Hu 1YBx"K= &@dc@1[Z崨Lf:�T2Α1U9DPh:)R*hA2!RYZ9c@+Њ򅓔%/d0@,Hj!ϒq�Y5"D�` )q I�|d- 2sڭbYmx#ü*1πF:KdC ^J@@Vc#|i byuQQ!O"eIJDEP-BD!�PZ(˟O"(\X*�?NZ<ʇge�T�vf@I*KdՅ9FE 5)2�8c6@ 90RՠYfes J0(^T^m萗!G<O0'Ew:\ųIGY+cry׀;*ib9 4\�Ժ䲺j,C3yF 6LgрDl{gK-[ue3fS7%םj� X[*k=& WiBAd*{:i\z[ ZpTy[1a!$F69ULhk]^.ŰL(̭"MR&QGe:�!cآلwClPR4lhUZ o !&r!Yi &6*6p : mu0 *F`1 a0ͫFTcvd+, F,T JnlԗAlx6?!%6tsֹ7Bvvm*!Ьv+/Ys6**lѸ Brآʪm1ƻZ£Ϩ-LgB6R>./aB&&6;}Pֹ!` PiA ChXAsQ7%-h ,F7)jB!q722UX#춯>7X΁·&BF M DW#:߸-t|KԤ_j1NBDH+{`MK8F#%<GTkR_[ ĬݚHnCY:6~ᲿϨQ .^>FuXH75#.E}͆o'=RWj B}nHMl5諦7HMnx,H}� #A %BF+DT\-CMkW8,Z\`nm"6k` fSUWC4RaÁ!ĠK7B\T+B,OE].FH.pdE7BDH*!=l dm$XGHsܲ% !H7Fsy c@STg-Tb#oF.c�vS:_i̗R "k,8*@lS[ "АmU9 #D`!@Z&D:MVOԈȐ֚13F�(84)�B$`@Ed `DSH"&B AkP*Dd\pε$0Jd;!V׌iҘ唑c)1 91' "HQr"*3UPatcD( )P{BpaS9&7ԉ�D8i@9C.@`@!*|;7蜝Xv~> 8ʩ y 0$x6*�R P9?"?ݖ(Bd@ [Y@^* �%��u%nd%y v]y K"*(5#  -eg@H S o^ѱWF.Due.dERTk�(�`D,H��()iY&7</lOwRH1$b?]6_^oެԉ,[L,?ii(4G7ME tStTy5"RriNQ5@e[_Ƚզί s l%-Ep=͢S9(iVl(L]RhJHf} ,%6맿g#VMEj٪|UUX(sar.*Ti*(6g{XYE%xhАBJP)ⴲBKB/#,B;:t$$Fί;L�`xrs /^h:J0l+k D|p@m܂rdl*Z: ш+ހs&߷4h0(:6**3+*+*PBhAE  bw ) 0R< MymTvYTWg@UVn8WY O) Иn&;Bn"nakë۫!-b9v`!J@q yB5vq:;ȲucE^"rí&B gsyTBZ߲kMg`ȡjƆQv95Ia<-4U#QJ6H3T9m9`FK*{Yjpu(+-7$B<[*&6lrvdS"Ė@w3٢mu>@/J� `[u>:BXVrF/^R!p!kfK$X4j!E"ic[jy\L uDn  u#$T&ϕ6j2:kQ߫HgxF$Xsv$hU*`��l`;G(9IEv$vW߶Lm3A^%ˡ9B4,b:O2zK :A}u`:P_^_&-TX<,#α.0 G@گ{!k$ g$˫lcs5 6&Zき iluUlc@m@9>!A* OW kځ]E6* KB%4_|�1dX=ߋ�0ec󃮏NkRF X+F ,ŗ8gZe =_pxX+%4b9 GΑ3Y9y .8�h3"-SRJ\%c^O, !B,�HkB))JUR&ٯbqyՄ @1P 52fhRI)- a%(EB@s^:qFD >ϙ'9j:Cd%yf"Efl<;X'l7r߂kb߅f vH'Pfڐ�31VC&%,ɗ/XRp̱"gJ`3�!YC6mUKkuY?ODA p̧VM_bB�%ZJd$_g@QJX L"0ƍ"b608s�J$qDaq'RDBpYLgӌr].*mQ]<M)�\]zV2`X ԼEvm��f4!!gE$I$cGN8d2#aVYo=,CP s{F`jI<r�6F#I22RB�UX~ Gخ9xZE1e|dN۬Ե8n_%e@UD)2>De,97|Ɛ1h+RTAUEiUk7X 0@^QÆx2K8!R_"Y~LK$Y7s9@b,d%h &-n5bP>R(An-Dj|}fLh)g+aa69Z@#TxF oN|Y 21bB#k9\YS `7fn"j)Mn9B3+G'H=�6@ܚn"!B !@H ݖSZj#;UՐ7c%i8C`6* ` m]7k*2Jggj !`!jqXBFAH+ +M1ӹo >7!?B`Bvo55MhC-ZcU̚*^qYzCFvʶ\ tvD]:A9KjP,`K c\k^(z*NE#1$P!PCH} +M.],Jv?U (Mh j\zb!fQА._M� #t|32y�[t~=,:*\&6(lf|kM9T e\I GBZ8*bqP-+ay ծߢ>H2;9F$TCH{$FY`- 5oC}&ݙYrۿ_�ye$`{9n&@^5|l1v mѹ96#SݭAשVq8l�65E}F$`9:%PW%@bL^WyC4pM&D|r5㔒*T:`>ha$J c];Gk`s45 _>v;Ǫzk:so8Ma 8تր �9n!dM9$@ �AWC@¼"PKd*==C4iR @K Y4O&DD &E@B2e1$:%PuE" VTDJ1?0sJkMsi$QZC,@ƉR a98kW@pHRܓ(1\e{JZl+BR��X^TXls`"bVdgDZH+�j "H49y!p�yJ|^;%D:C( *-@dEEӀ0A�*�"]_$�Y34o(z}1(_�ߟuҔ+ZI#YB4Of.|MFJ,_R\؜NEwMX˖U&>J@ijD,e?idml]BN Y^Jf%I?T˖- F6)ae@da @J*IVR$<Z2 PE`YB4(O^-:+e!+6+?}QnWEՙ�qP 4Iy�(,؏,h aIKm=7j> jJ)x|<>x|<>x|<>E݀#D3Rl%�e6KmR :ߍ$MRJJ5S Y1)M H,K@D4)M:T*Dy�RT�&c>eZ$B)Le �=9݂& Z y]ttT^3��"e"#9uz0I8T%Htu5Vbt"@ Z&IƒAЍt|3b‰b\kh2ن�B$@@dZgSk `27|5J8*r0TU25_4�={D,fE2WroyN.G�(*Tˇ@̓ٯf<F5 T3*hxh2r<gٳD.9@3�Q$gٰV밨5Y?o\5GzَX> ϕ e!:2DRZ:VR�=iʦnXhV,"0 kT3l퉹ʺ߅Z+Ȁ3B%S'̱j[9h]/ب?YL{P,*R1Uh(cPMV� ~ɘ+]ʹ*Sf=%27X.[3%uiZfҁQx(JԦm'.絑1-ZMEɃ`cm $<Ze_h).2'K*9\Z:BʹK0bLvT>{ mҴS!NU)gYVs-)P0HuT /f\lλa2ܵ,jL(f(Y376ysȚo~7s �&7gg=moͬLh\>j ZU"ܽiL鵻aB=TUTTN2^Xc0P_u6@ ! ~q#BlhG6>, r06&_7RQY:<dZRK&vU^[Ba���IDATy,kbxm틹:8!!MgWrBT :B0(Vqh ĥ%�,l d�uՊugvj`=ƒCh8RŽ*~:( >52, ]kCmd4M09�)+ d kbt8uܜ)M4yZ+7JSk|lZY5&, fm;DcAM&7yi|E&ك}a@ؑ`J$I}̵0ʬHFeZ X3auaef;K DF$XCeZ 18 s%uؖ{TؑTq`V%Kas\è6dCJn9x\gF5frdqF5oH-f؂Fh8su&Gsllp#AؠE-c�Smpߺ!Z$qCQG-,65uً6+;{bݪA}o-6u>5@^!y6R2T;Cv-TT(xx!e$k4ơkcaRsl ZqoUugWxUlKpMUXA0K$بٙ&a4jwFtVY&Xo,)FrG^*T"BM &MZiRZ+JiT*  |)'I&)VZ)҄HD5)RZSJ)S5d `H4%R^&JGqt*e&JԠYHyhZV Jʔ@3<_<*I)Z+L!p-VFL$RDd2NQqAIIZi"UyH(I˴:F5(YBO>AJJRZiԊ!1@-A&c#3gg4sE.eI@֗D'B CS]s'4{))ZR d?4,(EygxyqUEUړL<#1$u!E!Vq319i 5Mu@cO_m2UJ�ٺ[]\n2(BIfXD9)( x(NSIqΘisY`HE4", We`Bh5n2e/<o�Tq)΅>Gv`e]nb aF]>ZMVsHVk,qcc/LjmR*˱BWu^jAsC;WJIm(Z\gJi*ϥ4b3O P{:Vv\`7݀\l.JT[?fR�5]):Im ,| PØ 䖼/`zr[gCdDdYضV H_9Sh Km+еg! ~s9n`LlTXŃƯ^U;U bϺ07wؠDZ 2fA@̈́rd*QbfDy+[ٜn�vu ص6lQ5}.lFmnjDIh,�cTq[E!am9ۆ\8*{gggYQ_wv["=EPU-Fq~فy6vNZ4Y6-QUw`9K _q1ԔC ̌mB5X!kZrfkh*Ykeב}ZtvmrvB* @�==`[4\F}6ҍ&l-\PYw`t~]mUǪ|rP-BȜ/EE/FS`LwAHMKfԝJ*T}dsTۜ'BnCHk$p31>�Kvl8F$ulԜcyH.ذWH+q9G95"G!X$M"ӧM@M̵_�+4Җ]ݑ 9vmݤZhP[էiB(A9t#tQ9M_¿Q!uK9cPG�p61:5υCIXۍ= ,@m!@mW2T 'B68GC绰7a(AdC9]A PD %۠HмG"� `,y  iM:[tJ�Ot:{x<WiƊ~(|D8g\jJeʴ|9$NݝA{|HS +!g3O,EEXu?M'<N5ОZZǩR9W@ RSD`4?YM@ ϘrXDqT:qpt4$av�ZA'3aZ�E SDQAs8+P:Z 0"פAM-@D*_F#buf"rxԉ-50]yֳXɊt˺]d6MZN�l:dI>:o�E"j R26ˉр;,@P4 19��h uQ X8RM2<UY+[.\Qa6~ x-KX �W|q4Z9}H/EiDdD5K)V4a|8G-I"=Hf]b;h4VcF=kW[#/5P RfD@ g#lc2 cUXAiШ YQ6UI2fu?F;ZMe@5efhJ-[Ԗ7B80IFJB`i[$ص|01_NīU%(Aۺ E߆!u`DȚ|n\=LRk�M E=he+1S$u԰a5l](v5֊mVM.9!߆[jvg*^ y`Lb\6VE\DY]N8 rwdXpfV6o;ԋ-1*젎VHN޸A o@HEH-7R앳4vf:F ZkAV5ewʎrj9zBLQRlѻ αuwkt뻋ޭu~C$t~Ca"d+][`uïd խh3:2m@Hs~{lCHjE+Yzuq6kM6j#Aۿ0>rsPUێBݜHeZ#-^3EҼw$nꫵFTvmm^lFRߖJogbi[ AZ;"duuհou|D6rp6pත\ - z F�zl@un 9 !XxۚpP*2 FYEg5D@"%@yԻջ~ڝ'2^)sA2bi S qB!Hʐ1`\*{ P΢Wq$O(q( MYV��W=z{j)$}='i 4 E �01HHČb1z:}�J 5-$L�ُ(3@(�H|d �! �b%Rsѕ I<�"�9c-$"dY+S0`%.�TfV"0$�Me<fA| �h7Ub_eB$F4<eu'3J)J@FDL�t8O3c-gnׄ@#<\Nѳi!TYFc/je`ڌrfr?YQZ,Y\;D]l]r^ ,��*$َЀ*-XNC$`Be 53V&aYâm= zD e5!ګ͚̺e?)ADA*lV=ۈ0-G$LQX*hyK}c[-s{ {b^ȧkUERp'TAU'�ps^E@DPK1;dh,v)$Nf1cJ+-3MKՠgVeT<Q^V5YK F.hEڼ1ZD !-GTM(/^7r�,A!Ьcf! 4ЬBFR.6K /h~:[mCh0AJUv G2erp^l`W,Ysbo�H<@bUIeRQZs{UE iUo"!vmfբʳ\PxhP lڨmT4b]-ě4BBjήDb9;B!!kJ2Fl !!!5O BJO@HiUݡ@ P7Eajqv6r,Tr9e~[UJ`zp&Rq2U\SFp8Yg8G0%khPWq%$[as<- k|p Z5ăUXK7U2QaR,dDC&/bQ5:2ެ{�2JdDUP;BC"]iQ?hPDf$ETG#̚u1PRy4H 20>Q96v+XVF[Afrs αFmtE 4"Aӿ;L?p`҄ P$=cZ:B5i A�`;>+-:A}E?kXK}2DEmI}k"= EPGH54o<kC1tA$[&jԅ"voS6HmF}u~*2VH jαޔk.hꆜ/=E|"2*`# R!�-!BlBjEƌtq濁Z<>TkA!�IMtΨGUC (Nnhw8tN㫛j|9<p6OƢ�F#�L77xGsx0`j%g8z"8IH3ÃOuNo>8O޻wq~ ?WZϦd<3t{=gG^L޼]c dÝQ.g|:Y;;=u~'H//&7jI9N<y]/:JCJ�i,z'<Zurvvnp0WpT3vnyb0 <!JP-8`\$$|1A2C5oʐaaEdU|njo?XZ" 6 ye_&F�$dX)}HZ9kn[(*:>+/J[xU9(a=cM�.W1R*gZԨj3ر8tEME `%0v1{oVHϓ@ ,υ D(NWRN7Ҫ(dIYBXE/%TRX#fq㤢}E̮Xlr�"cHDZgM "2w.["ZDg)#H5o9Z#̌I5$>|u|<>x|<>x|<>?G;! "mMESyql ZRB0=ѩ"gd<<<ONxBdLJ~޼ZD[^]cyK$~Ok-<oJ{;?$UIX$Jᄍ"B ^www]xWX]GN>'Zix ~CEo>�eCv4-fEk#>QǗzr=Q7 }P?u8<2 g_>x|^w|\%TFJh;Ow~*ߏ_?HVo^ᄒp?=ϟF D5iVxO=:Hi~{Ld,_dLD)eŞbݲ@ʸH�cS1G{g[1+#<V+L2˦  PNY> ) F|g5 T^|X95y/<j&O69GWXs*?մ{WB1ќXWa6RTM/sżb0ƳOJDT SԈ4l ]V/͇V%d�^ZXOw<3Ʋ)l}3YWe4I {ZAs Z^Ǝ%1w8Y[pՔzֹV-;wAVR·VaE&�k7lQŦpɽRwMZylTOp\\ك1릘Bq;wb`["d;=<Z5fqʲ6iiS[mL"NG[7aQNcϱS9y+Bsv:s@Q~{>Yv2(Xĸd'llr^o̔ߢ*0fZ\kllr[8m]R..h4F)\U꺳3wޭ,�h h!,Ovئŷ"@!�L-2ݢIS8ݨ-Umm__k\Vvxƚ7x?[r7 gMě] *p|4m:]+bb\`('BikN6&dkWlP_oP&T W { [SZmltU{9KGM@^0>'י``f]$6z!(5XBy;`Tvw[v#d34VpFvP_DRK:_CF`v֩vx4ˇsvt;EUU;VeNux8v-Ìnm]K CJdפN?;߾H4{g#oGGG|v%ɽgWAožN{)#t/o.^>~io ϟ g"R?R uJp7Տ;]MWZt`0R?ׯc)u @XU�S hNϮ&O糣_</ \CɉS_~/]1.ȸJj{ų|rpMvus/ >_<8>9\.T`=tu?sR+C%Zrqv3|rtǗ}sX';d�v1Z+DȌtT&͇3UZtItXLdbu?A#~l/ eQ�Ki\plR{( ThQjp}Vf_֝`,K 4iҨe&1B̶Ziuጐ{NC|`v"Yc=CԬr c;V=*hSԺ j"1^툂@gXܖ se>KeaɛP\;|W4P-4c2%Z5hS.VڃMjÝ-#̭rckʫ lXɱa{ug[ϙ)w\5.p&C[,ǼiBuT& ;96F!s_!U1,\ѷlJ+m!ӄ6B*l!r0@hTب5r{ 䪟 mu0 *뱱ͯE}V[F2^ x& 'gAE} 6ya #75lA`WM媋*7G幢>b88'B]s@Vn4vF9qrs,ռ!5[WY5B6d u+P+%M /aBfM~Q ! JǔSP RۏrMACo5jԓ=T] B!�)KxW-uxBPEo?Zή֠>,AЄCب:0g_Y:Q:ߒ@15EשoS+T{Yl !;5i -nq^WPsvkf < BL֨6򩎍 !]jI}FZpu:0;EpVv;m:jQMlh>[&6fslUS6^r4v2ZV#ֶ %BF+Dt~-J6Eok-J}H`7Q6Sl`v (YگF$ 3w-B\T+B5]*U'm%'TG m+�l�aFۿ# M֬kM6<4,l;CEM^]mG @QQP* +#jXrNw`A�# ݮśovO?v?=>ǣ$Ǐן<~7w)HbZLP$|u 믿L/?;?SO _Z.淗zV3�K`G~pAGonÛ*zg_Gq'z71ٗ?~4�`!{QK}~;Y%;ػ?hg_<<:>~NF෿}hS9]~|G^O,} r}~nt�̀C.(#pOcO4d&3}Ї54Fj!G"E fD . A }dCfD{xd橪׷_ {]*Ofx/~s>_z|�UM\ �‹ Ӑ۲- "8({^{�]7 �DDŽ?K,<WK fn4 E:*ЄX�)BxJII'i^F-D- LwR]#n|Eird}!e Q:{ٔS҈)P+\E-QqnԙsBH虄^l_ B@9>,B/UP-Vhuѕ5L]e6x9B�sVAR:1$fE\f]]MH W5‚eA)LrQjm#F ,iDelZ0BҤ@E !!4]'ݕcdO;2Dw !q 8Bt#y Ne|  ͫ՛arsߟ<Etv!�ru> !/V3 !A)Yla 6/#Rb:RiBX޳TOyZd ک A!@HL  C #Dz] &OVlP1$8qV*ɡ/eI%(\׼ZNkmL8I(rfhX%d�d(@K|Pq!KO"LQJh,<)Z `WE� !RjÆpv嘊 ډ9 !"= V$5 `!!*dJ 3bIq9BX\!rz$72B>Ȩ8>gERܿh$g"Ae$"W�ڜ@}:bԗ)(Ǩd\�eC*ב OjY$ @#cΝA%NQ_2KCM|9J`3�%DQb{,Ї^(@ 4O"Mi;G^ ocHQshGB"sT0u.tkN"S"QLq"@[8G` hV]n[" !$3+iUUa]C ߙvv [߮N/OY]]sW5~EKK@j\jw{׾ѓ+z볺zwWkz맏W?X}';/x+׮_}..fu~wކj^~Ν;}p˓탻;''ݹo<-9]~믾s7_? ;nU=w׿osI=ߺ W/_{d|}[N j6Q۬gs~wη߽ݸyйλn>w7^xmw?~>7η߽wmlV+ݺ|գ7=+Ãgu=s΅]m˶l\:~ 9b<99].Wu4h9-d۲yr(@y/|(͓H$u;3eG'Ri!x~|vy4EIӄJ/Lȕ1VnY@.c*DSTڱ|m\|L1z5E Ѧh^k0 K[$B@!Լ!zd - mJof&6!mc&{B 1VA@x6%@FiYq=,؛ ( ,T@>ܠk0*,!ZB H `g{`!XmB!x,f'yF;د2>bm/FHvBB0x`!Å3�I;u!cq}aT&x#'�%*bm%0 DE#$ !#X.)WB!8S7mq\ 4b8G!xM?Pz ,RfsP92 J@@DN"SBidV;!\03`+P$9;-'rlBvv!#I!!@h!' 2T!"\FQ6#S: |M?N$"Re| ЗŠc79 f.8eH7A|<q%2)#$9G bWPFwfhFQHF 8*|I Ѥ>fq`'"gq<^pA�O!]P'TS %h`:< eѦ4r7*�6QP!9Gs{A+,-A.ZDy+ ,X#TUh[;K"tAwe瘛+ȝ=33jIJDJ C̼ڶsLͫtl>�%oŗG6(`T`�8PYӤϰ'Oo}o@꺪zFwՃ?ypчW56z䡪s9ŧNKt;W\9%oܹ`q zVgΡk~jUK~jݝ_v{{{WnUǏwpzsG:\-?''٬YՊNO?|ATGZʵ7|>yZU*O>'OO=xpoZV߿͓Ol6YRӬNUU/>{w/OK{G<}zZ]߻�?Y=z'r>rprծxެv{z9=n@5p6rOgC˶{|:O佇<b�Y=ߙ9\ \L/y *(;L+0o˶l˶l˶l˶l˶l˶l˶l˶l˶l˶l˶l˧ǺM6�Փ'OYB٥y}oܿw _g?µwk7kVج{�M Vzy[h߬*H�} %4 h�p3#tPUnm nopGo׾];wu@f;zX!8u Z}݌flV^y箼Ν|K;/t ߝwf5lo~�$װ794-Bw.VUEmCD8ϫڹ_^jn}5{n#buz|\ʡGiW-xة)<ܻsrrⴹ{ !B 4CM�5Hmټ+d�sDh8mfgwHCDmٖRPuO\(7[WcR:{lƒY qh90IUfS639iLPf~*_V, rvɆ|X}ɴlj\80Xm~0[h!x|: ,䛀0<j)m2e#b'`C|ռ#[ۗOe&%#a-Ŷ q&&+PMTy@mkO �{ d{͐ q}`蠰{L&MS"hsyҠ(ߔC?Lf42 4,2Z+ G(Sݏfϊtv㎚yM6t:CXhd21u-AAŠee5YCnSaz .Rr te6t$77d'`$]qِ3079IeHz8p[e")j(%lT24Mmn/r #DH9NssfRq ^>*Gນ J /6& 9W&!T C@5fF:'7 v93'KE e֌.gWfdbP1xnQ:1!|@HgWޝ;tqt>ܸ7s/zCZWݏW믾^x_WWkWo7Z@r̡wNZ=}|x^ٷ>sÃ_�mv;CfÓu6M;<=ܾ~`ެjҗ_y[_kj^Wv^|酧׏U5߫_vi޹~3|&ªmNOONO=5'NO+GzUt׏Q۶vvu]/+7?;p8>^.f/=KkՍ^x%jo̯ /ݼܵUnNct/>޿ PV{rr0F�|ۖOy!F!�ȡs]U9DHut-=TSY�u ]D�5eH]�8B8%*q (6urk'@_H~c̞gk ~gɯK̒wWGTH.ϽAЧ۩$ß.daVFa ѵ KU:|׈o<04HD_h^l<�=\5B@F;LfɆ8<\#AADl̈́ +c'm1V`WuNs`+$`51I)b[B<8x8?c)s}W 7�{l #@{$\h^ՖvǖW Ag� WsPD` ~ so W WLn5�A³HeclbC�B�AZHl 8z?;s.27ήuj(3n.z & Yt):_Hev?Iэ|qd;{T`:Bgs㹜I#j?6A0Rە/rFX0x)Fc&[)x~5;e`E#0 j4MLH嚀-YwFH9J@3L9`J/ p@@ s4f6둏H&u~9Bv !0E�A�EU.R!$Q7o2<"DE )C9d�5A>-x:49Q#6Hp dIݜ;;c,x3, ڦÇ[%@zzl׋Ƶ._"_5]ΠAv*!!PU|VU0kO޽W?{᫟wZe۞6MSWz^Wf7j7oׯ_wWKZ/hqjf7^w|kW⋏|mV׮^/<j]{Y5M];9{ŗ]K7>Bp;;0cU9pU}s|xpѝ;_3?ƍWngjZS*>}>~z/|vojݬ>޽Ͽ|ן?瞿K>}x<X/_+_қWֿ_}ķ >ۿk׮ Y^Sv+lֈȇ qo˶?=!`Ρs+W9tιnmQw&:4({(S{??iqW|Qв&eIeZvoIBt嘇ኲIFQKȲ= �D#*-5ц�9+�L f )4W:$yrhS|? @qbB \̄B@$BRↇF(R f2z m "6Yp8rdɗN }�b`싟34b6{Y!Dn0L&)AN3d“Rdȫ B;쬅,!y |E3$&ϝ7!ASoΎ_sH}/) $֘BF7@B'#6BBAQpPSځ q!1(%OQ,}D,Sr)OCgWC Eg!FL EdGAeJ%![%!P4QPdgRq$ t蝬3l|@cQQSeQRtv_K$j^`(,ldm<c~K' PBZg]b*.*Ύy" !I~M}euHPH ~u>&8h$)IQQP$cs4PqE)Fe$$ rα솩뜁su~p* ԧ"[Hqd�b2 F| 8( <SI$(p 2,1u>OMSwL 0!D4i aBhj7t!RQ*YI$!(Bu[cu8ݩ^4v2Rcb�<:J>L�<Рk׮]~Xw\yo\߽wn}yw>{<=<8yݏOndqݽt w=׿<]uux+GWfWf?<y;ܽЯTݭwo=?|{GGGW\9:vkFZl߯{k߸{z>\>}\z7+tG.7+Oni{yww?|=8tbui~t7n\~h>V߽1պi;vkw|ÖjV_rxƵ_qUݷ}buʥkׯ?՛7;w?8=8<8:r׏fjONON\f�,̉:sA<#ºH⇂>I>pZ3pB&C\ `�+�\';|6@@ijm"iXy@UtrJ kG9ܢL M1_Opx PS4 W])t┆a1uS*I:]+ &$ӑ"1YU[ Լć x@}!-IVDzܪB V !2 MQ"v 4Ul矰$~ɣ6Q l kބR{kX-l#R͗GpZZe"B0,GG%pӻCH0<56!BF:; ebgjgQtvvP 2df !00— !SU-IB/9BP +:z9_M(!F}B]Kr("R$=0@VAe9B40^pv}s99lK?u2`c M+]!�BR woK.wv6-_Ǡet�꜆^e:_) r4ª}~vυNWliERD C"6Ha7=4:OM稽&aܠ3'BJ璉瘣bsebBe€W˗;,Pߔ99=Φ>i>xe& 0 &y04"A@kQ_VS"A("$2FDe(A}0T '9BX)92HsTճ^0BhH ƻӤ9&o(OycȜEjrTBӆæQvF� il䗧'ܫl>[޿sz+K/];7o|tE0?٥ݣ>wzEKtwyɣ'' \.Wc~};AW!=|y7U5]~7 Z.ڪ޿;5+-}f_t`g?_>~|ZSfkw~Nv=[-w㇧'+7Ϊ?|<Z:<v@-~}ᇏ^�|uɓ'e3^>~kĿG_|><~xq浃yy?}xգ7n-NŃ?:v8*[FِsVeN�o^ų$p\\:r>a�gxls1Y+1L�{�>:/eWeJ;4шÿ_)k`_d, cY)3(se>;|jzbBܨpf"ڔ0b3 aE\2a[.ns#U#P0x4畲Lf#mU![:OerZwDPY6aCdejqQm+ᶍxm%hF.gvM{B2xs(E'D|A<`ü!\qKeh ԧ!$wv7DL/$9MzwBȠS~�$DL4Yh}-:?7̠40‰ !ъ Z{Bո!fot3ݐ3`eln/F h? !DE|"o5b!t~șB25OQ𘌐#B6rveGy@Jun1l xG-,h`ur2CL }͠s40M4@[--AzbLԨo0ΧY:_ U4qs,?{d2y#"rðE'Q`rg@4'p(qHpPgDŽHp9NBXȜn3?ެ�<eKXR܄Ƅ_OEڵ=ݻ:z0� p"'Z󀀀gbMBʁC߶޷- 3pփo+vvf;Hج˧ONkBNUfݴjuuC-۫Y?l{nN^y~_|w7ŷ?xQEUiZv3d\z,Nr6.ߩf_U=o\ղdwjm\f+WA֯U@iڦNmKu۶M۶v];5;{xp[jOOzg>wvVzQyW �Vj٬Wm wK.b>~<99]Z WUu]̀82@-q)�`NL <9s~@JUj~f)l$=/q u t$pf=@Z|9}{ODz$B�B_|x><�P5s˯^u 80|N #^T''4i>IEX#d�r3 b38x1қ:�/?IɖƳ3IBP>&s3n%{f= ZB[TrĐ#E @F*9GnhEY04({iy2 PUJ7 5j׼=Gv?g&w('wzE?"ȺJ$'-lP6Q4#F-(R9xl#aҰ2*tY|8(C@uI+%Oq5' SVa`A�x )o[Ә5u<:3z1`c^C,y͒7͒(X|(\ȴQn @d3uFC !IP!.3JJEۉjNk:?D? ՎC<U>ȡ&0BIgZD^h@Z+*ϻˡ#bo( 9BRf1LՀ˦3#C}{c ;i>vVݱ--j9 $ °cǜ AdNnkQIrq(?eYoLOO> r3!#VUwY@.j>Bepf|Gu\1OGhN`uf;mhyy THI#ui\1 JPs]j@XKL>ǻdR/1zy3/5qn\0ǃ W\Aħ S/e�_d8 zRzPZS޼;3@Q¸gzd)aqH.yY@X6Y< *ax-.BWBg,'S% �!@6f\DlpO5:ԬWD�5_N8GԴI뉈\]]vtk7/PK뛷o\|ᓇ gټi~8n5{6Ԯӕ_.U]'�5P۶ԶC fDGgڟ<ms-zm[u_ϖ7Kp%}E]*_9k CU�X<m=y H$+BXԬM^CalEjD盦]/YwjڟT-b=mrf>mb>'Dh=kTU v�5ue[eb^\֝ιzVu3Q!+Ϻ?܅Q7wC |5勲-;c52A:Efd1o8]-D]�᜜8`tКSQcw25{׉ CA8$ӻpXAr`aɘ!GH&Ao^Uq$6¼>d3 *rIK*A>2Y[@Ǔň o3f˪kx Oa x T#DGUՑIZ85!Df"Bg߁4ɛ@|ytr@ P $&*Hp"#�[]vI$,H}}F%t+80cnN\6B@:s4z9&EgM�BgEjQBKN'|66svp%- ~WpBOa`B( ,acã¬Lcgʡ C@>(� �ר`!�H9^!0D"qu>ѻdnP:rxB(7`rl:?RYIGTLBbʩ5S!,nfDb9.\Kɪ!MaBPԸ0A"$ݭBEd3>1HPqDxvc${(瘍UÐq LOI Go�>Hk%B XV09Ij0`RXE5J}S"@&/G+!B@!$`<*LA穘�~!2}qBBR30-1C"GE9*O!g4Y.JE}Mӌh:Glֲ, yj zBzjwqU�=4z]pkp� [mۆzgwgo^?V\>~}A];�]5MMu5{""tPUHy{thFm[ۙH-#RM-x9m< k=�=8+:tj h}[,=9�8@�͒<`= Gֻv~�yGXj] ~Һ%mv#9Dt:"<e[ "k'W-ݝܹDDmvĐ4öL-<LH^ocNQ�c],swBRXa0@TIHul1] QwR?OܨhSP< YL>;۫$R &�Y(ɽlJ)Ŋئ[1%bQ ANlZsFP{ q~3 !aO@(s|.Y`Eh Ef*rWW�mr h,V g)x-F~N9bW'6N` # D7V&RPmCB"ef. Se"Y/�[H!05r0 BҤ@E !!4] A㳴W>!a;CHhXn ؼi'12TCHr  OnK&7ǮSDg' 0wJFF7 yQx ` $; -AFS!C⼲yJ!CH,8HB!LPokB #$(HxFdsQ~ &OVlKYqTC_ʬJs9O� Z;�TbEI$=Tuc9G)@ fR9U>!Y%O{lB8/"'+jDF Y*T\DtvS0vQJ cZKDX%9|I}A#gr� !R Lj$ :N:FH2H)$YC aTA$ &D Y@Q'#WM pFrB$H0x%HЊOH51ϞE9HE 2TQQߘs>}v9BHpsl9s OΑ4A!r(b@TA}�8 " 76@}ф2%lHP9G%g!#DGM`DZ+&¹5pW j!*u0H0C@$89 e@j9G 8Ǡ BQdڅ "w'#AɁ|DH$"OA8AfM!+ةq^ 5] 9"Gsk$ w|^UGO.~o|=jpogoV9Wl9rV37۩vn=wz7_T *@6YQܯr֬Я<9$\PDkj5�k D �޷m<5D-BT5؞Y6GUozծW]{r!�o]_9u7A^U Uj}nޯ[pU8ɂnmٖI�vǶdyt�\UUav CaTP ˔d:W q|6.)9qHLK43k ,|'$9T϶ mXO.m|5RPiHdv޼!5EM>[,HdU2kJL(lB $[^]>,c<�LQa-f0QQH-̳ !7k¯`4Y"cS=t& dA}v ;;dj eNǠh4ysmV k"4H6pgEHڛ!Ē�g@LiF1qhD6DL392]D^.T{KjsTTClǻO;9rD0ɭ0v/'5~[mm!Dt! wvR3ujb4}P}C:9!7ex/69İ-=T#Dy�aL|n8+`10YFt9T?0o؄ɽ|v(NT[R 2aB/IcP!"A*ag&@0'9ǬQmb`>/(WPK;F:R9N2`O@H1H˻3'"X09Q0˰v9Q;"<^w�b|0�yo:uMփ'7V��ɷ;kZt�+Ɂ�@5E5tV5wwY<}kb9-vw#@ {!V"[p Ѻm{-6}Uמ^vnBO\@ӂ ѣ9pFtm۶mv}CEu8GZ=x-s\!QS#͜ g mDзq a2Ͼ6|| 0BDmӆ PUuUK;l6΂^MPQ6|�ƪ;9}WWs,9k)8 3SD[_o+Y)q>}`\Ob /ZIk>5"<#b&3?eHȟ Fl|/YO2!DuILN@ Ymسb#:-l�0�ytOyo֜swJ&QXi؅ bt*`oi vA>!|t^ތ>ߒigb\mNIC=;B^ D-8B`d9NP Gq9b6mg7DFING!BBm$PN.7!00Z)L1 ϖ <Z?@~Kߊ)d7B2VtN@}m!9A~qbZ*4iq75I&jJ7U٧laY2\G;%T|)tdg7* IQ:&E)&f! 7S[3 ~!TgY:=gvJ]ߙK&OB9MVze\ ݜaw e7l "xG�*Ρ !9y[9p�77y ��Dж=xT5<^?:mƓ'S̪KQ;s�;{|K*x^<' : 9O@knH0~WYݓCWO&H\eqӹ G' :,2RLr"'DD7I" cn=:@BB9Wk59h sT9"=u1ua[APM#<W듓!n m Qd[X忙h*;  @wIףdV>gY?4OO2hz"-'RJJ_*n4NH�S膭P':^#Mz\> 7MURr\%l`QJ9GY;v㩒O~&i2o-I q-%<DK#xcVJ?OBHӝQ?yAђ-vדE>եb0GPf:v&WrY`k *\p#'#)d,i"Z]8jeGbނ|, ^ds.OҪ9$O.끋o'VWaBL>(!;;J;A_P2VsTx3YM'fI|b, 75و/ oA" /,BM9OH,6ka2^lRL 1S9 _3ߞ[7?x7I^uL>Z$o#%9_)DoMVǮ6 I2? �9U@R;`(ѝêrUf;fd� `�x @B3Cj7; <=9۝]U˖<l^ȁuԂo}|rC�[gy*F9t*p"v_ipz7f:,bS#@+°#Զ Q vg3DHوWu-I| �]UM&Wu JmYo*jkhwv |[VU1l˶L,TFaU:Ӷ''''ժꪪ꺮Y/\vEw!j+߼٪8 >EabsH@})ku-^ 579,] b0]&W֋hm,LNN,-̓U/$yR_ߤՈn֋yfة}o+I ]*"3dݽ6z%ٛJ )uRzͮ5[O ط [&܄! O$@ILR zk`MʀS!,}^Bq6p{_"A<ka Kz O߫ ռI rc1/ vv6NؒV skgg!İ/~7|fT092gG) #Oh(16v֢*6"kFG%pxu? 7ד�"MPٕpv \LM " &'=3 nt>YNn4*2tIM@b"$P9R_rve( !^.vB`υmFts١[f7d gqlLҠ Y6sD`"HPpBH} g¾m ;I#L`.0oOf4!{mNW ob!1nl/U;|P:K зα!N;&!ߗ!B-^#$sٜj  =ElogvX  &3}g:9a@Wneh`" "R@'BBׄ/&p "8t#znzuW;D@Y] V5 ]\Mccwލ:$'@D-"xןvU݉#TX$�;}o^4 @w(4�us�a9 ųa{ RRwgԦ=yHDu|OTD<Akn#pr@۲-\(ұD<Y=5ϻm{ˀ7*#A>ع +9nCYS_ p_Us6]brS%�)HȖ MHC꒾ν`<%V>R_yu.4F\s+ءH kXAK�CsԦ[b]Ab�$YG4)=>V!�V~B|g~Pա7 ,&nDHW2k+/b+ t#՟<7YO(=/b"z06Mt<iQ:gy^ -I}Έ4ㄡ"tm4!"BY!6J1pg}z<-I`BDHj}7AxS!cC^!Fd!_9%oDB*ı 09lI"`ԡi$ 8$1Cj^6CA0W@#$܎acU D!~Y`({`p]&īts\1s l ɡpb_g'Pr *TV(5rQrHK.vPq\KBg�&s NnNC>t~L3:_!w $OW`9Ā\g'!u~!VLJ:$RBhsDqnH#Hp $LNh@#B"A0A|�HgDB$(DH+N.,]ψ:GFP<O:{D1L4"O"A\O7cpv@SNtXi̳+A}*4O8G/Oړ/?z")qR>vM)Rf7 BSG:A"HD$Ur̂!,ds!sBԹ@"-PDY)9GБ>A"p0SyBO}_<Lv,' x$8D* 1 aqAc+BKW5'Bt"--5jnoV]݁v ZxjݬqX"뺞ij}iͯj_|UX5P� -+l++ΰWV;axhԢ'SK<mTUzp* <s5j[MX'O-y�lOܮ}눀%X==5D_xj%j_,Wp-\h*j[ ysjqzzzz\.۶n要eb g"LH"տ[/O[~v$B>a.pK>H/�`&ዉ}v1 º<bҊx"[TX_HPxhTgyxSk%rRDljټ8T!1bԟ"fնM0zK�rBeO)H/"l!;˰#o)Q:&U82A08܄j4H! PH&b 2F/&HyMgg dB; gI]�Iߢe<+B@dgqV=Ye9&dB3 \d9T#R$9U$6'Rhrzg8&zU/Æ&#KMVqڄr/0Yg }.4C&:f#eg',dB26kW<)E0Y ?0maq^ӈDF@Q9j/I s7ɬQ|-&Go_�|:mgmm]2 c0łɓ<Ј2Lrܤ`PDHP9Ǎ"IF:*ֈ遒jb-S&88H-a}V9;bcCj9S:\#?t`g}uF!P\H@Hy@@3Ϟ '"!T�T\ @ݼ#!BM-ۅڐk V�@PHªB <Y{Z9|KXUmE\}6>ZXg8S=R�X͐`ExqAH3zl=6۲\Fs^7tZZZDp9HDmچ;9BHX5@P"9ՊT @ @�aTu�מ_L˩SK-`\S`W# ]Fg0�ܬ2dYyЊ̶D-O@#yh=ZW;;;U刨iˀ*��)9S%X='xFbz﫦7_]}g^:8ǑFOԱk6Pr2Xۛk{QwUɠ׸gA>}bfŮlK|@@8}Bqy#ԃj!dQMNjwxb6"R ;?M|lfDHr\:NG ~c(ěx΂E_X[?B^ b/eBy<QpiiDek{A"$Ł}c AKeLtz֙c~7Z"i7GHobM(/rl$wû_ͩ.}H#27>T �3Qb7pF}2SDmZ /"BgM�qgGq(O!Cm#dg`IgN8;K%l N~~nlG0G␜]l. rHd�rvvE7Mj`obۓ&�ٱv!| -FG_/"L_ͯ D)h807h/nEfG0&MۛBDlE}!V/żEl;;^5 Btth!_l +?fW9}ѰsS# (%B')x -c:_1܆]_�Yfǎ@Z @GC:_ׄs@Sy�P( #GW~(f@ԧ*BH߰7׍n;\|<b$HIBQQ(T1HQ,!o d0ړ}_=bJg7Hp�Sd P iWn|° I^MmHXTU ̹9!B"M9Cw Q�~>yݺ'aZ#z<V=Epfؿ;}w:R2z@BG? t?pNJ"p@*{h[j[w@5b\*Ī9u]5:[*nv^~U*?}<Ʃ)nt֘෶\\=?{0:}7M�aH�ۺT@HVFWz.D0ѹ.切{' \HOВjo6Eg`Pz(륁V-}'&i� U;uѽ Ʉ>Uٰ1M\TׇbhMf(M-A[Gcj ?e{&Ui(e/% :'g+<%3�@RJjgUU2@,a >{pCt $0> f<5j~9YSyWwQ5=70+rlonT$ƦU9n =p9;8hRNѪyBEܴYR$~36d/zQA,Yl:"5'5d ǁ~L^($ްYxΙV#0pL-+/Pav3/0Y!MgG8ӸgÞ2M6?I2<Z&_V|6,Khb[@[ "-9#ɇ#;g kzQ! n1ԷqA)TI Q61BF &ShRN}Y@;N:GK-{DA}g8%"</93yRsQ^{^\dV2~i "bݭ1\ƶ'5v% .�[ ̜#59/V@Rda`l _#ߞKE-$KBY1} T!=nbPmi)n m2$!Ic"V"> tSA@4 c.S5H~]΃*dl\G6<C$B s'߬~P5Gns%+#Vv1ȫݐ@6G_":to[˕'l'sͰE.!h St?9<lBطX?dHL{WS!eWÍeQßƾE}rWD ņ0 Ѫ DŽU߂?=<Ky3^)!_1؏,t϶!Ʉ žޠj}-;?"<46_LDl*%a+?k Bc~5Ԧ< z6<( V/9˨M`xl䳡G&XUsl‚n}V- K?/8naf>2C$jjShdz#5>,IK;B= v,b !@|X pþ A9F )Nz 6o :䯣:rxGu=t'ɸ� :_StN ΂Q}y$Jg#=~QX6botvʔr&[WA}Ya+$`!4&6+@�G:sc!4lxDZx >, /jB)<Α0N?!v0Q\!l~�pRI=SPV*&sإ^.!dBߘζfKŪv#;m E3atv(\}>&D}%(hS&: ߢ)=K,jq���IDATf42[KI8E/?mk7!'o1c"_\h艶?Nţ%7*@ZDj圫KƝ�@_+B?~#Udn.a ^ͯ>ε jO�YODINų.;S:@L%挺ByX 9؁d!n L%vRϽa 9Ngt&'vEAP Mkp ՙ#$mDHZ: B„UX{0-L@ek!щ%2X'< d @c m/AvQcXh/ f]ؐJ8:י>q6f%.5X6d#F2~7[H!_S —R2T*`C!u=bC?DSߓf !a rŏ<#S/D@rץ/NLߟ<Etv!� Sp�>H.RLa)yJ !q^D�bB)4Bb3hb|9 ik+p!#`�!1+cd !4LKDl$(LWg]C<<&9U\/e9ĩےJ&N"*;!J$ZMҳLű]7sr`F!)O(:HX%wv!!Nؐ (9;b QJ\+G8ΗrP `ǷI* t@$umNX2rm*SA$5 `!!*d44bER\:}a@BH8od j#I}|{{p4B #)u4DM}̳gr2D+(9k)91GK`#Dψ'9GQeȁ-�yrئ !;G$@ Ki0#}oP:pL_�E.S_†.TQx(9Bt$:x<8O"MP1 tfBT$8a9ڑ`Hps:upNj9G 8Ǡ BQd g1�T JPLDHl$*@򆐐۲-۲-?\DGmr\,mrUUU9 sι3fr(@"J�FB [2Hȣh|` Sǟ\'_.PT ] zn)jX@Hcf9}7A' Dc]ڸc&j:*HMѼ"45'*ȉ6e!-yB4budzdjԱ(L /Kcr ة͞h B)gF@ABe )4lf+SbsR ī@.FR*IE%}=sBHl@I`NnXˀO!d# P !` D$k~7/Q̾t*HfA|�2Tp*#V!E}y!6O<gc<ecwP! 99D`b!"m ,U;~h!xMbj 63$09F,J- ΑU2+9\CXRJ)Z;dOas"Y!i,l&Jʨ rlBvv!#I!!#,�]vB !aa9B(<٬(PJNH0X$hre| ЗŠ_aT0!->, "9�9BĭBɳ)#;̹ JH1QH0:HF 8GF '#v,c&v,gq<Hʩg;̄!M(9GuB>9`HP/TܤTq#) `SHsd΁ L3A䢅M(br\1"AUh[;K" ps:sQIE+&%)Y)9JWvy0d#5Aؠ̀¿o&ݖmٖmq(0yzQkw f!"{Ҥ*y 6S(];_ sRAPruC,f`C2+u`iY&ɣr'5@PtL20ec$h,26Sz㋎BįC"[ ~>Q9i`EDٓc%`#D�z?""$jw2PJ{DƄXiey j3g6"hk{1X6nUr 27p$\jJe.gQ< Bl? rNȖm&\yvi}J&A'8E>md y�ЗVxB5GLc|5,Xƀ)ð8bKl@S (ɩ, DSb:ӟ1á !oDS*~6Ө:w�#2D%4@Kf9do5i EBݛb!&AFCv<s1BM\Dd&b_QzV6l.R_ܞD򀊳Eo!bݕ ,l:$Eb#0ղh2) @e 1+kʣ{|DTȍ,b4"$ѵL@Ltv<st~JOO`3O#A%9B_M}ɹf29u>BjB@#JUdO`{CCwtu0>qH|%ΚH\DO!Fwz a9S}V :GM}Hsc@V^/èߵgԗ/CkaH9lgH0>-TC-:Jq0T\lDCEm wt@RQE$'b)e�GH߰yk3T9\dğsrFv2M*{((�Ҹ3PӞiV:G EW1W DFMznB0Sw60_$M5e3rֶl˶lˏf!N*TUUuUՈ{4rZ,r^{B򋈽5Ob.7=꼜bǾ#?;Ta_rH) [I;`NaLdnU>6*Ԧ2__ibUC2T4 "op>).zXߜ *vhq;a5y+K[b"X@U]$"�+c�6,/l6M5PٽN÷o1nئ ـbŕQ_)+Y߳?Oʧjy0NyW9fXhYm7xMs/'JBYɪv4–NC6\x�(o)4 Kŝ=5MAY't?02:lPˢI ee&mEZI>F 9DDDPk %QDExǵp٢rPGd 9peroZ< n&LQ0 'Uʧ( HkBФLkBJeeBL>hiϕMCpVKCJJ6Q TʍiV&9B z}@]nN # K :f9|_ZS?'Zxg!lL Ҫ Pv(8`"!TwPȁ",Q!TpjF4v=[4^E>NzCܕacQՋ2E.S0&t>3kmY@rYg>lڶXL$ 7>EFfkf gg2Śwq"46Kq. 1~)bT'<[?06mٖmٖBZ1\ݗs5M\rw>WU�<ڀR:Ĵv|1vщ*n6 k!0?np?�2goSv5M6(6 gڲ<j̞7daxW/L uzQd7[/J1ݰjS+}yj_O,T8owZя-lس4WrIq=L(e1Ye 8QpqCi/4ʒ72l:&;x?qIpv6N[VAE(ؿV&$e dR&rf:"dBgj3&8SNy0z?$ F>[4 l,qOO*`u~۠pR]{6!4j4!ĖC !!.!Mf:,gT$o}"&[ T`j4L}Hvsl&wB=m= ip@4b("Bdc>r?L}|WS۽K2�:n ɜ#Ժ_sr핢ˎ 8fB,b;G!A_6M`!$m6|y4jږmٖmT > �mۮVb\.׫uۊ}9i.Bvʈ�vj,~? �wJ<@b;2H{|BRzy}|kޖ H[sowTͥwN>IPHԛ )m;:#xeR&FbNd2BɇhB8^fbZ_n7hE?v/&D txf%B5n%rd +y,L\f%,BCOXU)$W:!E 'CQ:ceAR;)ٙ3ㄡ"tm4!"BY!(a ņQ_ \jSflaAep'⯉mߟ`,^%o)NyHfN#enH[F4A < L�D!KGlgLr LFß"B !D)f!P('gg $< gD$[XЈp!l 9=Y!7( A!S ñH dˡhH⁒ߕH &zηTrHK9U(u ! #I ԗj|8S:?"܂+ΏuV- S#BJ[*!`!0K C:?HBBmЩGH fL#56jA)'4w#BH06�Q~c~-1 J < Q"D'мI_cSIq 9GHT2,=,<a}¹6EΟ F/#AN}O':^/J?ЀO8G/O/kM>vM)Rf7 BSG#ץطl.2NVP\3 r8"ɖs!s!s `J"kS$RAGs.8o}wFl2D%b$RL"Ҍ|ڟ{[e[G'ߒo|G\\}jX.j[પv gmQ1\Ar0)őrnVI͘Ԇy}#yʐb~V깘U_> G* (ϼqj>0Iƒ b:KU'"11j/Nl ĜF b%iE +.s N!9BR`"n)  8`CKC3XeIAN45sIK!$?}IUfןp`h5i]E;Sk0;hR'ʡy5c ! li.N#,)&Z8&R`LpYP%8nA BR"$Box  4%'"$ Bd.P#E�@!#zSG�#*s/$BvJԇQ_%>9tvB ;G(gg L: Z$emX.8C "$Bp!SLAH#D9RK nh r r$19!I1 OP!$\'SK!- r8)*N:;lK ƩiffVVqXPq2R$3Y/Y:?G`(|EKT Ne! ³"k0tv&Hp d $Bp!xA !sE%|eHrUFR\3#xKB`l� g$dH<:ܿ c+p*W<}p.y sq#1Fcy|4& | Y  ԇs^t^yܜ쎤>L}"LGt~F}aR%29ZAGOE;BE=(txI|Է'"A(|I};ǁHAּP-x *,š^0DrZ592Q)J-1]:p9SwB@-۲-.D@@-uo[جVյs#q6f[BFwEI 8O糮Gw㌗~G:  򕛘Q@`0A_+buR0XDVfR7X$1IHnH*qe7)|QN $ �1EvxYsf�M5 \B�X�V2KgL`*Joձ2fכhh6mFqA,14HP{~d g+7B&X_@,ی, 7 `�)XF0b&Z/[ !*E"!4ճB~6̪geĐDHoap�xrangUջ<[ Ӑ!٩ AP@nayG1/ vBQC $!>C! m9åOFk{^!SH0M}bz)d|8eeoGP7PO" g'AL"L{4nn9ʘؙ=unC ORY*T%@!BF"z5əǧĘ u>Pq! B秀DdžDFGcrdLg.[R$`#:_V>>gY:F|5emg'�oM`IO!<CDb"L]B_�m !h!D9GaAnQo� W'KR$՛ bwx8*xOmΑ#:daP~@6�".Hn1H`K+:VM.< :|B1=t>d׽lBh'4 PR >;4FNiTfL P@f!}Z9;JC;8\gj*BEH"A@ 걯[�r{ Muc G2W{t:Lp„avvQj˥! ¿X1v DH>BFu8+goB|q$+0XgZgd']~88|_zþ8�j[^jjs%"t[Ŗ8cgagW/W9&URg͑}"`B-C\HL MMn*sl#_-}$tc 0aȅqKn?om?>",īYX  2+&PDt:Ž`?=ҕY]㓇{-YMaDGn~ i!+$B4ȁ@HژAI} %܊=$L6!IBviȍ}qЦR r` a_d$Gqta=q^{b7r�!|e~<m>^?}~A- ]YC9JymJ<fˀm lVrl*I J66>LK1�4XgRͱ1R0*ts5%oVa5<tl"aȠ汄 ! „ddNQtK1Q_7 d1CHxĆHJ!! 09Ԡ198TY:&"Rr(#d!V"E8CPiX|$l39�TN=.P꣛k\ f&39o(yB o[k(7g9\ȥ u~Nf:_H r+` xIؐƒO'9Bp�!0KŔ9Oi{sB6"Cj!bL6 ]N!:)Pɵ(jk01H2q8Wwsx3 M#@}[ C9GzC^ 3<]S<; ! ~r-9H9c/|θmD}0D}bjhlA;lr 5BEQK ! 6GNk^y4>ʈP! fEH"5 2WAC=2c6A"[ۗ lE*<㉐):K-2^Ђla<| t 4&@ףs5ҙE%ovhVuz�**"C;?s|KQٱ�b� OA|9d]ۧ'g]rtsڛ_kLFw{=_wOueS\᭯\~_{~ѷ~|:Rq\.^߰\|wQHyOo^ �> \Onͼg飷(/J1qr1Se[e[\;9\OϺ۲-۲-?rp)&dݬ1|jK\e[]S:.ڻna9WE\4b*� :Y[UhARdSM '줲ҍ-;[4g+1.i /zYþUl#[;ٚ?ӇS]͚0A&ڌyb[XR[@PcY rUoU~kݯ~އK&8\6L4_l6HHM:,`m|~v@dl)pBZLP�jjLd#9"?/zqtٗƗƿ{_7D�?pGwл[ţx7(DS C!( VȲàsĠ̩@HN:A i (=^� 9&Mշ.?YfrЦ+"�he[m9![ kQ34@Hڴ j3ZcP)_|M{÷Oϊl`!97rH{ l5uEWLN *M4drn%&֎vNG"l8;t<tvc&Ύ#R)zUMB ֖FX4 erܜd)44ù8 LM \s/_2?;!+ Ƴ-o"y# ʞ%֯9r%6u̚ )F.OC2yB$h0Q8WK"Yp-8F{P矇2^9wRE=Tȧ ؃w|9ߝur/T;'9;MZj~̄n*&rC$-zā 0D}`ݖmٖsFm `�wvUw&`""6y6ŚL@9{P)~Eyv#YE �,ν?C8ԥ׈)(Gğ9ؤPfH,2ax?axQs"huG.~'j;A]h^Gf0^lxIla:}2Rj^}FnJE|~}4Y*?o}w?V+Kh&ˬp҄#h!mBqy3C8z?ΞA! .yt0)n {C*&2ʃ|5"@TT C?-봞sğoMY?L{o¥ʫ/~0Ww}?;wN4d#BbpeƆ!v� xi*B6B@Bb8S26O (,M  y#rC6 -BXh! H!�MB>!8ѼrHmT@R!d"$x cB $B`6P*b&6ˡ,a9rS5%y jsv*hgvL_BIK0`+Pf9|̓4\ 3#B$9^y|*O I!"%PdKI*c9BH!D:<!)1B t>o#ͨ,>B"iHPjYe| hIŠ3U`SQ_v*(P 9S~!81ճ4IH;G(9,,*F0$@@_t `VA ā<`oE:H Ed T0ER&H`L(9G |9`K:_tyধ8IqHo�r(p߳�r` `3s  -l"D K9r E^:?yk /Z[EcQs1!${yd ΏL Cym瘚W|!|�JS&``T3͓!A޶l˶lˏ\z, iez"lV9vi?sy@rvFgL:_8 iĹX7Br2:4wCwM�\ 炃j#y 6^)4r=4|b϶\ԤhH<_GYC\E9?AslquPR桑Q:S&QD莅L1 Wg7JUŗ5i29l>F+Vs*ng`t ! ApGH-%*ƒJei>ّ�o`;!<r"Â2R-B)Qcy28ȌFS'|=[Jx坿?sX^z/o|iW <!l#`v =}x \q!b"D><"AHP$7'_xMg2ӟ1L:AD V PϨN IBpBh!.ٛ &yG!$ ,7N&"3FD%_FOj10J#e! gg;G&99"sk2rт :J=c�v HGvCYBSǴHg3->r�H7uu81?puh)LI;{~`# | 楗8`Q"DrQȺ6q*eԿ34Bs b5q=>"*Iar3`sϧZGu~NZW=1+#4+ #AJ$&&7H,:lM}:~N-,W�+BH5"hC|!5lH"MF}�WxL*?,*F0ʔOYGaќR cmHVǖ�j|F7%̧K˃AQ@:H9G49HFt1x/xi9>KgNpΑ &%$CI ̣?;zA!c�e�GH߰ !0XV7Z,Q@lA$1O44@Hb_.ف|GUic+߃`*Wc,^+x-xMu�+ }0!ze[e[~, ҂�UUU yrj�'U r�۹,k0�K'"y B ]TܘfXc<PL/Fvt^ 1)g&\uU$axZ0iĨy`~f<T\*tx{ B毼/98l>g։}r@ qZ& y<(Bnqe"sv ̀3}1t8!XW&qeI9eILS, Q.cuBPWi^_i)uxe~f拯#fiT49جQa|pe$vB6CHJQ8&)Ø302|g${pWBd&Xf0,uF1 %�n"BDXz G_' ΎO%_sWr "E)1�Dx2!Zr(ؠ/ͬ&7\IE'2JL+•DHkPxn� Y_|޺cyCA+9G"u"@`rn]yRxmZ6(B)壹:??WS QE`#I $62f �L_QOO<A%&OiPa3m%`!lsͻ2YDdP9!5B%sL3E Uݱz맧Ft$9"0 T|@}H6�׌Dsd&l!)rT#]А0F*Nb�H#BHX$h8GJ1zEвJ%O귑DG!K#dG/%$u @R:_DRN�-\ rQl 1' *yϊdE ԧ8Rs 4`|>CTX$xX%j3,8G-l62/Js�yL%I !%÷e[e[~< Diַ�꺞U/NNNiڶ)gm3(FdDAAcZtvnbe[I#ћo]ſʏʒm*G? /\/_zٿٳlmٖmٖm47w_*+Gwfڪmٖmٖmٖmٖmٖmٖmٖ0蜫뺮몪h^,z9L"Px`'eQBjao<sCop?\5{rAJTƽ QԸ!36|'F'Ұ]ti[o5iڴcϏ'b'b@`{6_QW֗Ea_q?ۡaH: Gq\a -AD&ѫt<y_. 1ג_iT;G6o.&[k{qO&kmw?￾Po@᯾_Ze$Jy0X(afG"B@}l{._+._J{F|q@ړ-Rllâ{®&9ӅyLG#εp+"b;{t4FVmFk !v/z8?@~D�П@s,N\pgw;nQۯe[rTm;;GDgWVǃDp�Wg e|.z4'~j+Wg&D!ˆWC~cZ(3yC']҄E7>4p7 PόɃb!&I&[JBHY7&0Ϧ >_:7*6P Z;RHPR�+o*C6w'Ƙ,6sC2F$w4>o6DP4>㓨Ϣ </MeްMCQr  F~G@EE 0<Y$nn^s @ r,Dm/F{~4jh4֦"$i o[e[G"@x,G7 @m۶].='GY5ϻ{We9(R$U3&bRw Z?pdGp'`Ij`ߡO]wOd dN@/EŹvgc<?τqTѼb~" b~3K瑸Yx~:3B@ "B ^1LZ]M76a7>1€· >!/d `oPp 3!1> & W|4knuu7GH@љ`fпy{ܟ2BdnRPyl8p\my�={wN�BCes{6B&7ol+ *hg6{rv&A?s=' DO $ꋳBH!"]!`"RʃR"[ <Zor"&y <AHr o6 gO \ g]HrH$9 7Y I /Tq Rq9UC\q-!Wq c1spN&9`fRN8L@zc繗]ypg)%CI+^!0{u:_Q$`I_9BrF ΞJ<0b5J?WqLp"MH0r(B0Cei@4߭\\<m_-NJr g7!QDA0m9kI}0^yX*(F} /Uڎȣs@H9湂F¸rJ 4WCHqy5#T0TliSqф 'u>3-z\kF>L}"LQ_4IQ rŸDL8A#$UK!$wJR=?Z&F+ C65a"AAya) 1$+jl9u\#ՙ’OQ@O C DP@i6^u4}θ~[e[凯 �TUՑ�]U�Zۦih"g9 ڏS!AJH#t9Vy  'd3[VXV\6jg暾3ny! 6A"?O@EZWZƸ)6 bTwW7.ڥxŹbU5?kߏemǍEuZBRU L hQBc"Mu:<];�6G?8٫n<m Ocv?zkO'{rs;Ͽ-g4ǛHe IC=gA^no8i~|~!dـJlk>x!|y'$t2@,Rlh|8J1Fs&+7oH_SJҋb5qG*b'ra36�}y^/jz*ؠ|m^սu›~.(ʵ&r]]^"�\dˣ^>;JHO墵 ̜SH2!~ }fMDRSy#ծp!c" Y?oa?k,_{fX2Ɍ3M3P�_=(pEa2NM^dF(, .rFed0P&3?+)|\AqtHI\̐k~4>>4ppu>(MήY\~ɦ(-8;{uGh9*L蓋u,OI9ae-?vuW9^qG@Hϐ $@ ]ꀺw x�_u �D[ K|z\6UUu'@!C? /qbGg֌IݿL.S‚֛E|U^i[0;,{ M52sHW-, �Re]\G!a*t0Kz\,{cۛ2 ;a=*(^_~ݧO^ Y/_{]tU˦$o&@X?% @n zl c@w�[?  X}drgb b�"!ٲM!qZΜ3q7W~xav-iڣ_-Oڮ2}w郝=oŗQS֯B`z/}<\a#_׫Zؾ_͗n/6"2Co  Å(4|(4+Fͅk9q6XdSYHT$lh\`@HoFvH?#KIpÑ - !&ԗPF%2()B0GHAo)�0gL`rH阈)V#6H!h dB�rWH QBȐC�`J%Ѐw4R9Jvo~~7S+9/|mBex \ ωFZȳ~T�6B!S_AClΌoYxD; /A` !kQL !aQ&k΋n~/qp7V$5!?H)j8] ?sZ\G~?r0Q s@P_@qLۯfӠ>0X>-R 졜Ʈ)!Gbt?Y0ӦA.#App$ȵ_!L*NPa4˩/ &Bh$EVnl?-c#{#oa B]QRY#FJߤ'p) Rt`GlT1 L$[)GB#A;2{Q,le!DGssTb8; W?�HL.؈1c&-y <x\}3T^ޓb'v3=320V:/n<(>D ?ecKnjՎs|O=� 8 j[@m۶u{�ad��:t ڦKihoowgwgV;M!VU�Q̓^BDDדfքΎ'@A-y"۲-xyˇ{_<mop2/ھm+GC糿�p_:" L?Տi~<?{>*{X~zKϺ۲-۲-?Mqt[_<8,^wۖmO]gw^|֋{oW}nT�ݖmٖmٖma(@A[wyp5BPH=AvS/ϰJTp|W|yfW{.⾛D�;}{8Z(%_ %�>>[\UkahN''!ճyU+M:*t[tQMp@kHH+1ZSaeWZi&uXaQg3,K|aZX W>-*v'@]/!Vk"[XٯKK"T/{qT;a[7RF h~@H.-O]of+ �Qw |/^ n= 䲯96j�l\k @+. IX;qBbmoY'"c?v cS6W�mknByЁh"ZN6lP2`g1\qЗ+C'qAh0�pyھ~=|tkq*,JXpp{ !hx!C,& "BqHp3/<{ kޓ5r ě3`B{Prc!`�IVS]2 ]m?k=CP# <.c(wtH m!�`;;="_kaC gj(dXZ-!CҫBH ~qqa!3$#F#BKrsCQ(A[_폁В ̀Ͷ*mLS(tR(2L0W Ko[Ab{#"]ؐ ("Dr? 4PйtD&i`jW?I`|L`l-"u>IO$[FSvLPÞ�%UB4 N J [$ 7e_`4y6wo{KG7i;Qtv frX\ AH[]3mR;) }@]:Ɓ>H51ϞEB>q꓃\i4 yPl ;p`sLG=vs{U7:x }b0 Ptѿ @E e'P_0!> l/S D}&F]R PtZ> /!F E/43$B8߄zǟ f)DJ5a d`I8(_3QLq"zl\)x8$|DH>#&t1>Sgt vkaZgb s8m˧<3} uhz3/&g[6L�׭oª]-ǧ˧_v<ْ|.P:#[jz4M=9fmۦiҹ̉.,$ڂDG5i6!Io_DV-~^x eAĄE Je]<}KD<&GYgcI9; & !#CN>Ġe| !1Qw.KS= �oί-=ṗjqS-t)t><<!D=D"(h&.i"sϵ㧐H"yr63,.'(q{')!MH9Ad&?y+}}X ~| oBH1ѕґ?�2* [^mDxᵑ ןB@H r[VVXΰŀ2>e9D46o`K6_5*6�_i!1|&|-6<�wvj!</LH !P/6�ڄ4l;G[cCѿԗ|*,tKX;MNXQd!ҹ|R0Hl`#9 �Q,~-BTtĿ7+G|_$PP[{j$6�<9;L[F*!BҐ!l20GHH1;#8;u*{<R!E ~V"YG1ZҨ**Wo.>Ϻo&FdTdC`O|ZQW'wvKCk�9O1Bʑ`9 )U‚G0AR28)E:G#,\COG &H`L(9G |9`8+zDo "~HfαD}y3ɩ1屶 |R:G\>M:)IsQssqV/ &3P$?CWv)Gt>J&+jßZN D�Ơ6,lZwD�)`h83۲-۲-.�ȵTѭ�mGG`ܪk~=iryzr\,Atu=#mi`=y@pN,'AJmd{FbL 쵽lu^t\#R1qɲxIq_:/p.{.ejokбTu5ĢLмAsra/܈*:T+72Lt:dBtC ~7߹m覣s }@.4&k{sfoRՀG !H&Ž#~#qzrX 951 }_�[R,ƃsr-X9\<rɣ>"W!v~E!Σ <$)m^Es,Cb!}ֵ;:3ኣiR,Oa$, DS_DH 6}X,r̓Yd4�)R|B -c`$G "Dk aHB%Č#}@}T!$`rHBVd?tvYD@&c/2cJ{˼&?_ 2-8"5g'fYJt-D2&Ͷge*.B]:˧`ܽ86b I,é[ro}J;|՗ A^ umT CHrv c$"3${|DTȣP09Q|>M̍W b&|Ola Y f[$Fw`!$irSI_&NmÙ7&"YG FB\Bsb0s K:j+39bd)LȝD"rUO|FbkCIIacpaTN}"A+Ξ H9hH8 2̜p$z fC b{`4š"GvN;#tj�1] ·ʺ D k}Gr~HFH o؄" u~ =we1H"3xO:Mj;,M*j#Dh}NLW+K3 $`_/!%6koDgr*gI0E,5SZ*xG^;a'mSmٖmٖs�=` �6m8pfZsZY_r~^VmE"wsq^sI$+})08Ҍ@'=,L%ش={A/ϦALlm/(͜#KkԂI#FR-|JRd3ܐL#n\b.6bC)(C/!/V_Y{ ;ŻG�,FRAy$*H2ZB`z ŕl^% 2!tX)g@WO "Lbb].צvz|ijb0Q_7\I{Q#AMlS3XF4݉2ԙ K'Qe2!4&6쒻d]FIl #@{ȼm qCUUBFqk2@ CaCI&w,@Q;P1KWٕ(\\d@J @6LLfq)Z162رe 9IJ"ˡ>#P!&f$4q^&&;Bg `;s.;W �=_erU!\F@ʦ`9Ɛ70@Yd>ӳ\ ɣD@gn3^sTPC+$id&22f1 a iBX%P6Bؠ/Q!9~rt8}N6BDY?1]*s4#`J;N6Mtz.GcW| z%T3`vYC)(a92DFH9J0r]G8 t0h,\z p@@ 2ZQFƇNhQ~p`P(d HТ KԧH#)F}'.sd(6 byCb8d "l�NXt2W#!JXX{Dga%%t$h 1g8yTe rA46DA $57u t_K`n7p?1 <4$n˶l˶\L9h䐪xztнʕW߸vbi}aUUUU;爨Y7t8]iu]Ubs.b*Ss0X@͘K27RU2S@ﭾG;}{O'vӇm:#=7*DŽ�)&gE?LhFaDNT_�Rp+G+@PVe-7f)G\Bա,l|�p_|i;V'kbW+mĥ SxTUq>Ǻ-3aRq.)x߻x,e\ eY=y3gId|)^m/l\ا2@hPf,$mxUMiF4u?HL`߰U7vSsg7W1SE=`wަX46Wc93׃rC &Ta!k8;\Qd.(:7wʾ˳kYMu2YUCWL( dfO0>Y#2F%feBl9d:I8t' T{\-t8s$�C]Z\aIۆ$N.R't'FeJNvnA4yL%-0" loJ}n].d9;`{Gq<l=t`q%Vb"cYۄI91&gl9D `;vF6]<tSc>$Dr@Oc\@�FG mٖmٖO�8nh rHCVrz“kׯ~ͣ+O}ǷsVՙ_"}{߬V_"ٝWU&y" =#O[.KmBb{ե'饅S/m\Z~$o?o=VĖ� /jۋS}"+:�?W5dlLRܫ=E$9~; +]UbZ6 `ڮA6CX&J=b?jEN'$+v°Sͮe'I@C eAQօPg~f%|^hrr1�2T~/*th�VELh*b0ik? t!yg_z('!MKѝթEfl$ _/kٯ|,,K;k^d]kq�up Rr##d^\J'U% z\Σ$Ճy ?&pPjdS*MS<qMwHa{is8^!xOV/5)DEh8C6:7\&!q)vQ ai!D"tJ xϬ^BHFq� ް'_9t7-%4ϓTxK _'ISX"*߱7R*3#I(?b;+yi23\6Jx*PGђ i/#A#yUN\hzGoD!*�Dof.cVTmʬ؛騋0D[ Y5 _j1jX4h|] wD 9l3P%@!x膰:#ԙem[ r9n?u>h2zRؖYgf`LȉFvнKi ]N?SDO.bI}<gqFDoΆ 386kT4PΏA]&܄2䆋?'r8x0V�Zˠ=M gd8[ĦlPX/QAM.%D¯R+SجgcS˜~6 �t\e[e[>U@@Em!g݇Ǐv%]5?{΁z�l>6�@wsL3')(f쾐%/E`T@ݣwB �@BCة,<ʲXl-ɨ~DCvS(B$~MgP?(Ċy{bf璝'i<ސC1@ T!PcLQ[&U/3rN!/ 䱎6BRBù=k`Oh ,!Ȇ |7v:8Ls{`Pwg{xZiQAlp~b`=O1WW De}riSa޿ݯ=wBTkPY^!4\T&vvu ~P&8b]Pq<<+;G$$FCDH6ŞZ $4dn䩹dȾ B lȝN7/HJ!ٱ%,g[ 39!l(7%bذ?vqԗSq\{Rt]QE?nO�<;͑N@*?}_qTpgtB<Mt~)@vV:?!DW6Q]t^!r蕝!Mc%ZG*/ηD%)!ԱV1o&<yhQj?ZXnA'ExBPr1(\J'�=cokޠ>s.Rv\@V ;SW `ߝ"a(Gɜ�ǂ_;ULTp`CPRi�&G:X%ܘޛ)$~'RU'8;hrܹ).R Eu>Œ)Pbkp,Q!u>@Ik9*߿/BmFHٔLX_GE8syC9Lj AUGcTΎ=R&d>95l�v2�\㟱՗Бsŗ۲-۲-T^P#P4s4w4wvT!A^]_9|[WRuiV9"zbw>ѡ:GӬbuzr\.9ֹ<ƻbyHq." azX0:Ey_һX38/C!!%mE4rn`Sz_L CҊm`WշaE9Ϻj`RL$2DL’F$&z!  !h"%R7؅,tb?b4D~`F !!ֲt6$Acy2!ld"dBS]B#<Ɖgǎ,sdn"B&쏘!qHi?+d 7Ni 0^~a`$BbI}=@b,VD}b1 CH~?~%oKz?CHo V6 QJPB{@QvbJ t ! 2R� aw1l@BH$T˘Dd!)w!΅rj38;."r) >"r<=JȦ+ (9*.J& I$DsS&TKgJ&VӥT 5ф$+Htbgx9 5bT-!E27s7@s%@dY`P[e!PW@"ҚjAQ$`#:_V>>O:Ie0O:Y)"t5! a -Ft&ByюH_η(|W/O=I9zSQ!Cvt$w4~盿{Q'_=�/"*ɝ# ;GLIQR>q3lwʀiJЈv# D2 kFicL2q$c!#4TuFFH:h>gD+y$h|MqKZN!t17!@ZwF>;$"B`\q/2!$sa,]@BЅHA*+El|jXAB<]@\A BiO9O"L=:G  2y4 ĐO)Latl]]1S *xN: 8vݙ e[e[~�c4T#͐oc+G/<;y]!P; $p3 :** h[^5jXk=_OC ttHS|:u&`I2<%fYJJWKٜ.!aBco cEȢlm:MCyX3I-j0 k+ds,6&'Ub1cwti1s96B ,kw8[9s\pC9w�iW5 �]%l r` 7=6Ym[e0ANgT˓!ey8B29dR1PN}bkl (lٝNz)cCHa Y � a{;^٭|xN7}˓@1$  Ճ].RM<dBAͩ!!9&,g,{(a >C`8E})k0!8"@’eΎ!$eV!DI!9Bry9 @ ~My@01bI4AɡBF*d!Qs�m9X5GI2LC+6t6ę�S*Gx'6�"ʽr7'2\nw7~aTސ ! cDyoW\y{'ޙZJ] p!߰( :2`[BW*<3q !>!9B-#BH!!AҴwq%wy%s Bx*R,Αxǩ/P}?|k?~zt29 K>>xUYYZWw=ӣ0!\.($=5xvg]5[;ۥX\B3h3Z2u~D"{zY뗙EŧuQ$X R֧ G}1`g}bDXIl= hpT!X@iK9Ćw!D%S,AE Piq:6h،fl|t0h|f Y\YO -bm# jm"Qذ  viG*X) �$Ӆ# DP܂[ dZpԙjI@i &c%H!)-AW>q{S4(=~[džj8]W8 `@yr"`0 : tP B� ;? "0D ڐ?5wpll­T`ЃFR$@.8C':c7xC�X1�H ioK0�hI?X,]U4g!m rQI~:'Np[͟в/:k/t1Ƞ@͉ZXj]U ĭ,{g,$FmL{,Lں&W9[mUM'_azH\^Qp(2؉]67klBPT r{ x3߉4ld\J)S�N/nkHVxv-Wζ/iǃ=1[Pi6! P{ ΠK_$*l"`C)v&˺KҾe >2,ag2>t1<� \.yPI ߐƽ!a ; Gɚ M<k! \kb*4:B26Urc@V,y27Fܹ ')sڴorA}}ޢ+T~Bz~*+s6aFع�eT�!eu>\!i91+ N_[Ws ע@2ce},Kj*B(FAX_|OK!k7/a(`QAn*BԘ o@+y6Ӱ&EX_AΔg $gdz0oOg^f?;c)|9$P` ]BB g=v(6nzSj[!M�PJ]k+59. "`F@(xx5?3Ҽmx8j8'lyw'YĀ 2>wA :&'k5DJՙ6%Pnu]X5҃@( cWN/\8NRq9}?!1~\ JgUv}[5n>X=vCD.;c<nLOsXbڦB<C/ԯeoJy 79"13)H]ۣIA[ˏo~]ŒrE&whBv>BYs%oڀ1sF] >-e]r$sR`$T nl>Mz7]^?Pab;k[lVBac['`=! z#_ҳwDy˂R jw,Pz:prXl 6m^>06S �GNι!uRXKbxw0 S;a )4DA ԝ?B&e 6isD61*2.LX+UYMҦlזӧl|%Yk~/7Z4@soգ~>ˢƬ)JWoiՐvc_w3f#]1p%l_~�2lxYi #yc=?|SX۬YAc x,?E@b6l~1&iZ2ı ۧGnm,b`G:1q"G7x"U'fJ<J3Ϫ>mzʆc@ iD#&[_ �0xO �1VbXlaE ݥm B9`p_� +1 V<:cp(1hTY+U+fGA-1哱 A͢CUkxJ E\(EEc`Jpd$A iÉ 0=pgZe-V!EZ R5Rtر_ ^}+_mT2+V1I5A|HwUbS[5cr-)$I"D6 $Ѥ-BE<a{mvT䮅]."> =ߐ0π$B |< 9Hk0I!fOAr]X@kNsEİApr;!a}!i, K;9g]sy)IߚK> *]17dlx,u A0/!F TUQ ;5_[8QH"e6dBJۦ7OYaDbTDqhC&9xlPp4|l3=>O"]4a<p4dMR}H`-.DN0�L&f* I.Wù7)#B Dev&S=NA0i[@"$!$BcрM@@ ;ð@NX@o =uFt[٧lY"DatZH)DC8FEzOaF@6c%hnMo%6 !kCSJ\@T$6-M= [g}Z {2S;M8Z#Z\ X.߱ 줞o70m HheNJ*ZI',AșY V;O8 " Ayo‘ $3.l榜 3TSc*?eDH%B2KZ ltzĩC+`C @2c%F`.NJ bO]Kw.s~v�:/:t*u9Wu0 @f^+J)JE Nz'GDX(Vu 泰]E�4{WUcRs#hi^>0ҝ #HTWZE֖PssP v}I{Ѱ57گZ)Ӡ rn+"Qf.S# b+@x%WbPlH /ZXj2)(2xsvG-Dr 6 .$OG]Pz$H2鉠.+W;r�qWT[(S]�]Qex�ln l1̀hRd˩q\`>"AX_T$B+N6zFD^YB@A$| ~\hbQh7LԞ"4V#$q!1 ortu7B@EH *w')!X !"!.ABH$`^! Ht M%:$@$\E(!LS V.S.CH#hDr_cJ7V , %-NK#i�H=b164%#`k!$$K>VkN.{�#Ix\a!}6�'G7'1c% !@n dP AE*#O4$/P)؟ tFCAOCm!IK 룜OǸ+[.gFK$CŒ2T%(iI4H!� Bs%B %Y}@] !p _\>ꖔu!Qr)TH GaGL7R'") E8b)1!4c<4U!ԌJb+pL>LG*�p̶pD &c%r!KP∿!U?e8 K0ő(sqXX_ n S/h YIYE'(B@$@n9!*/ĒDIC|捱& S���IDATT@]n $Ewh1FHB8JKP]a?W@hJ ߐŽ n FLtGyo TiSPPi}wNo$J80tK%q9C'C @]KE( tzU!>{3LL8 Gjr.MVPE!niw~p�da dWd+ cPvizJTP ݘ&r =x5IS-7IFJ!&SٹDn/SʁIJ]PRk$3^kHK@#+ah@V׈육pǯYj{T1*2[e on*k|b^m\Hkw%!HGm❉YWFW0M_%Dr{5YAUa`!^Bؔ(>fbCZ]"lhFDxl!~J*%+ WfoIv ibN Yd쩆صs:+ @HN$EtŽLGoįE _7]Ah^` !`A!#W$! *芐\^0_ LHi +)#sa j)hbNSלB](%աZW|.HA<!&baU)@vo1@KSPB 'йt~oH5k kJ-G td4pOM҅cIJ|31бPl)N-3EHL@5'',) c9 !!$4t M#<)f![,) o6�՞ ;BLR rp̵A=$v Jև1a C8ʐd})> %'} xV05GHa"D!r4<KbBBϗؖQ˫E G%" PAL-A E8A%6xfiYt?3<ё% OXueYI=ߐ c0iI֧kPhå&�L[ B@Ok #uTD8 !1mmp}XP8j~_A~6H.HlAW[-H|6,`6bV܃ h,uĻ,Y_%=NPv~~׻n_TG\z#C"\#t]3 ӈ;CD"xJ[ds{&O><J!k4Z)mgS$`~HB0qc8\(&YWTbΈw'X'>!rlڴH=or{@!4 }6"J/OoiȯIb,)kP1jJ]i5u.z?TΔ=f"Ι#|vlWg{Av՞m!2 Z2>ef>'jjEhGcn4HeƄ_5 CWҐV|a3J-0XYp+_l S&oXrV$F4AE<wUC! 4.DCKM/%yx(`tT e}okŽFR)U!8ѧS*Gtڋvр+L amj ԏ H"$:BR3}-!R bxB [�*)a &6rWh7x*XY_4e]ILWAj|:�I5aPZ�F'ʚ - Te&W E(v@m<xc+*PK\֌!ZDXo7Ӛ/ =@!@P-/ITs:)r_, Mf ʘF1kh7\m; $X%d}yR\ۤk9V[OΙrn~t؄z6a KPjB6b&j^oM#2>]`}Yt/w֎U<!ƧA8D6iiM`#1\l/m![%&`s.fL^L? dbp`" =حa],Ub|w D�"xAKG>pGwZNA~Cpo]+MbBB_yAZx7}{hOL"iDr@ؾ)V&`Ȁ8s`0{Q6v 0%|ivFw~ q;el`XO9VH|,}@4 KNFlU4+M\q[ |l$G1܄>#zWa@#QQO>f]Nన+@lBb<"Zb)uǶuYwҧ ھ)o'ߒvL>HAHgaqn/Km%aD_օfCU !mu|Tn cl}Lw'ljh).hFaG]`={:as|OaB-unO^[vVkiJM2yjFw+YdL~&V�cÎj|F�+~Ǒrͬ Vkh:DaY| ށD9ϧ..Gz!e2Fe<DݶYy(c�Y{j0o;4uMIˬYZz ndAGnmwH>Ư1k$z>s69cnq@ `X_qX /&Q-QCPg}.<}ְj\X / @cGEuЬ*W8ڧ`2UF:e a"e6kJCCJ =T8LI鼛D}�lT``<F[[m-vz-| `q#!@<w.ݥTA_s<1>=1sCsG,2Ua6Jxjpä(|sA@# O&n4:hQ"#*$IjfZ$lwIОZqOYMj&4[&f%mI>N< d4Q^5ھFxlzGsʋ#hqs'-^ D.I7<XlS}ϣB=$WZ.l2eElD� P`k]_* !dn.+b˘t-8]` CB"e Nĕx4w"wLZno!6Iѩɐ46X_䭑(l()l?0)RSSR- [F?H4BH7iFZZl?z$BMT-bVY԰-@ !1(F6x%bw rY"Co)iqa!&sf@4åw+KTPak M8!֚H=?Ui\Z=B ;eU9+=?~&%bA)s0}ѫ#\%hXY?M.(B"u(ޖh"A 軔%b۴tJY %Ҕ)hM2d RCKw !T82#\c} d[!7@k p.d~JoYOy/`+`gRIr SE9Ve}InSwfeN+f EY_6~| *N* r٢盬/.8֤XcN�%hGD�?4crL|(r>j*I3+x9О1U"z_ỏM<{:<<QxހsY "ڎwKw.$=qܗs΃1xAt;~|='@qq.C4J-lms1."^'3r\ʻ Waڶ2i�ph#TU(udPRj}*2YdjBwZd4cԯohC.q^_vFB4,N sb% d W6I(Zj"ĂBa !,?9k U:�L H< )HxC zr7%&]Y K S6AҏCW1jĆ蒝W"T#hlHG ܼVx!rG!1\$Ē"Dz vP6Fv`C;!$Go!DPh6"Jn|&BR=Skdi,ӁM&pp$ !9~2S\Q}bl(T !sI�a}@*'"CDj$Hƹ)TɄ\C9(@7 ǎpUEk$"b�U4u:4agDcU8՗O~z_OMAvuUj %YNACCTz)%Y"TjpsyC2 WئkЕmvfTB$(v2$p !gA{zZ&y`ʌ]ITMOQ`L^Јt\uf>!),dk'GVl&p.>"GjƠ!Ѕl!Q!Y.ugZ-N|n DID&Qd GuiFa}6I"lWBL( (4h(ԌG}M(&AM8S9iKP1=> K0KI(th{tA &|o,`+mg]e}y.ihtUtF=JgKM>ƯI=d!vKP k) }Ί] dŠDH%H !$Y"!y`,53 bDPwDvj&AS4KPw)5T Q7bQta=Tu@SJA4Avp|P<}9Nwz AXQh*nw.ݥtG2=A=陡{'xdvnZr>���b9X�TP劓°F 1 :NҼl,tpnwI%XTQW0djLWzG"vZ/v^lBBj=C:pMS#ˇ H (AG�pFvjC%nyiuZ?V�GT+$j㈑GjM,UNt~׽+[^Yu' ZP^`ۂ2bl64HE:lZԝ 2ݵ �}:T#%Hp qƽm4J՚Z˷{WϷ*w r 6v|<1669Sm ZkRVϿBy1v@֬mjf+:1, gT~ʓ D F)؁C{ pk smm o_:|IH$Y%Dץ`#qi=qWċcDt{ MNY՝RuZƚ:XW7.un] Hb#fe:B?h>; #OͿTqo9<4<Z7z-Unlx WZB\ ;2T4 Ŝ`EHu Ƨ+7nY*W~/N[[\|gz, JI<!$ʞ靵jݭj)A?un'W:l/{BjQgRhk uZw5Gu^'vs:A@A&PE[ td!JW `!IlréC@=DҼZQƦwUwo\Ơ ݠk;^OAS[]gJԚs{!VwUg nv_h߾0t:D$%!%jI-bbF;4_lS'$!B]Mqtp96$E5hdcO}bV9S:A/y/޸noz>a}`@l{eZӝ?ܱQo>X6Vn;CAV=?DylRs*Ո_uRҙUS\TRs5Tv|_ݻut :D(IA� CY7JKe X^]n{z2"aIk=' C"dd2;_TAl n\n. KZrC!jq c𕲤,A@lPI' F+C#p9\j @@w~kݻrnsaU* t/@4fla}2h12Qn#P>Tuvka3S,$6@!ܣZs'f#J)YJ jvY|H@&IlXn :LLW 7~+^ CA@I0@^!$+5gb66Q)Wrq]po V{kcdSER8`l汾<GR8}'< !#呉J["^ A_[-$B6 )jy DB2VJ>9W*UTf2绱6X]yؠ.!!҉YD�C#J%斘2!ǻ]cuZh<+0L5sDjIiN$S-p̵d Y iJraTإyJI?3݌5b\~^Q1~ox[g:T�%C ?<cSOTElKH%-q;nȡZ �߫ǞdKD.?V9\@.DA6c'&xx}Z 8񑱨 p]1 4sK%u=pqqf<> / j>XjIK|ɮ-'`pį/޵AϬ֢ك%ImZqM9jd(HP0w `_n[)0m%�T~ߞ}xOlHN_k_Y'ZP_"H"VjOplrVmk+S~olWd\SLڇy�sZsnmF;4h:zӾ}_o}MQo?=<6ï.z}'_==\uL3ݸ_::1B  `蟟`zjUPJo^>꺱ג[ YG̊ x"2xf;w72B7WoÕS/S1`D}VvG^?;|׆ܿɽ7ྗհo@{#;YYֿ>Ɨ O]� �?<f^nlV헗j`�™_<^azERV>&)xzr~_qsԴW:/}{7a\X@\s0Z,.3,;q}fu$sg7^.̽VqIJLOW}lbmcזWε^aycӗk]ʤlt9xGEW:gX=FR-lNq�w鱴\/vļxv'w2ek|mzOs #{'}n𽣳R9ovxz*2G윜@gX};KƦ*>=#Ec4o+ 3T M3PWh)ÉG}dtz+pXvT'vX^so QL=?D�Tkvi4 q ӯ;{plnt[;r#+7μ27}\t33 eLvv͗n an_=9yu M#; a}ep\-gZo^P�hgnZ[g )+#;npR[k<.ubIɐCv<LϾz||%84Z:h<..^v`}-H�04d͑s|J~[]K�Jt-Liy{BO\)x`*&gs+΍+B |lV/ŕs7.B04V{hxx, /ټ1őec}sv7+;.iB3M~:p��TuzG}xŠ욀BzG'c6YSB:Lpjuy qXZwvjҭ2hrXKCSp 4*�X/\hj )IC_EeS)wYdB�SZ NLht ֗D˚lP@Qau|ʀݘ]Z eZv:xg^ά\0:Tx=.xTA C4(0ƬdSVO`>E|-aQfNs@9%.�r23 E֗ӻE1__ݬDPV)ؼ2_$m\ŻJzwL[툻[Q-3 �0�݊, .�8. D 8sFCLMW޳ojzvB�E嗮7_{5Sa-#"3D"4&-Ť 9C"\p.]שիfuc, !<\ B%;֞7^a B8~Pw{w~<KųKȼ�,jIKiLgl[M+dIT3|Ia3Rn~+y|80~䯵|O<:sswo{{?.l* @O]"L ~d?Q̀ id?>Wo}On:[Z&"Fy *WXvTܹjI`؊0F n=^Gܓ7ΆSF>2dҎݍ{_}aOJ)ĘaX+HkluJm#еTbZ�}rC0'#3>$lёGGn}?q͖srP.6ut,WpE.$g| ~-9iv%j3Ӡ'v=C/�09S};Ȏ _]�ɞ_*r%A YƕdžJI\9?r{��fHSa}(D)+_j|")1_; VUΡ{FyK? DFӓjĂi~v=R,cK\u IeD{#׼O?&[b'Wζ. ;ih!xyZ{]n)7{cz8TTDDS-Nk-7fW&ꛙ:LM{`,~m?d^I�L?6Rs㓇}7_hJ*r,}>SӲ?@FGFpwzg}lG~Ґȇ[x%6atʦ!�G=|rTDHzuܛkTRz͈-P3>=`xe spo߾tjC Bq�juwOWS.~uUĞuP9?9cVOL;2Wn:V�Gx)"{z�`x|=B?Zj>:(j'JPaKm+PBW`f\R?:kok+W/lְ ߡ 㝠fNBB2�RIKl˄s<xbtfڱwn.�|�({FBg)P%}GGynosvWWz` im%ޡ":Icws|S뽮OMԐ. {!`lHsx:2 }CϮ߾ցH'@wqį%J%'\b`h�NR0gѝg\Xd!dR# E$!blb 1 yfv ax2<Zo^tJ Y"^!+沝v P1T_9.'lr~NXh E 982Vo^nuQHɪƏ!֎ʌxʲ)uj=0|ĴQ ڊ|ؔC5PpNljV%(�㊊C/��,f@�k7At/G~�<#CBVĶ" Ĭߴ@`j2sBOr4Q,\&_(HŔ?""->|)EmL�(`BBBaMJ398x~:\ 2 7fevGرv WCe�.a7J!B Te<L BtXz09ΙG-q�.Ka("‘BGRL7iR~0 Ѭ.$UЋSm@% twp3j͖2v %97s~ozóʁc#~W3lAaa|7/vMRžܵs@rsJ@P H߯xThSȢ|Ss|+ ?.r{lTf˗<>`<_^@νO=ӛn))ifWmo\Y_Bh+D$lܶߍL== jM#?@JSr<x|;7t[GF}ln׾9usRXPr�"e,k0|3't9 cxO~\;MDc ԽN)=O997o2 BR)LT\n%&7v[k6.CŶ"D.7+vpq)*uHc&8O:+5l6˄R>̱ǿ7o^>8^EơQOͻ2tz[pmQa-ЦSRϾzh_7/ݒO VF?jB{!FebG06Uy;6{汤J9#uڶo$VL,yhښF8:Y~ق};'>*idw~/ntZFMQ3Ju@OMmݟsoJ Y>1+K L$pzz`/rչɹ}͗u&1'LG]3z~(PuOͼKjF3V t15uH<L1;.tkm oN8plt *\czGō -ycT#D$+U}c[7ʪ5 z}9ԑR7'ݓEұ&reRGUwO<8y^ꇶaj[dn9plt$:*Ugߑ慷W-o1�2`*6k#`cB7KGNN,\=?ד17<9LGF*ã7nt2 X>}B Z{%zÁdGM8^,7_Uc-(d&}۩(, @p.pik<Q=μr}ڭ`V); ΅cȈf4;+BW&Im7aocK f n0̎[ĕ\@ǹ 82D,bA{0[F*36盇 ;2 �8$2-2 (|MLwq$�t}@dqA&0l@DF6g)KIf hevϢ3vE|Bhm**qEyhrrEǺ�9EJ׸i5o#Dj"JЂ=z-0AO0A .>wo!DJ:4D*56Pٱ-G% ?9|al5 LHP}F&Pr<dT\>)ȳoS?d}OoD!ORzttSߐ?0[[{ԣ~g'Ľ+8҃-VhRɎ xC6_<6|N :hG )6.DAyiB_&| @W}N�$B@CHs !Gwm5|w>S3ٻCrjYsX(1_:#A5DdOqKBWR~{o8;.;i)S�RuU}S[J*~3sE!B4]BZ8C[{$+ivW3{h!.섮D碅ٹ/?_˷u<F<5rIt_hlLt51TsϝD%5K]GU^.MƯzI֗QOU>l6ǟ=xψ++j)H�{S-@feJ2֜oP*- DQZ} ug_nݸNX9~(@-zsrW fܧG'˒OvC~fW/�\8 ̮3+ ivq h 𦣿!՛?n J>`35ynfk.4#TH5%�}#9>-D%OUx~Gf{S<16�IF '7 T*[%]}"17+/ �cNlvNMVkM8EdL 5B 'ǎzWNᓏMez_ -NOMIWRYX fMG+>:ܲ#MMUrCspqzҝ`doɅå{诤Z=tDE03 ^C!_Hs 7ʡ{Ʒ45[t9(ůi ڶN&}G$_vڹw(&bH=L[ JwnF]sCci&O5I%W):6JT Ž jaW C�� @e6m a]t\R.U| ߏ=wwOW|eaFKpV U*u9c 3Ɓ ` �!�.0vKw.)Grt  ?'j�2!@A"/Wqe.A}o}mƕ�ǂ}G|l?>yu !xt 븥Ru�" #\w<t:No0B1nT MI]I�1 ;.e�`ҝXz_"@ _T7yՊQ�Qǩ`mRy NqVw9-TR.3:dP?:Ɓ"P"m6 :tq&ʬsu6E$@ƥ}1H77.4s�#|P:GEC/w~q0(#| !鰎>3?=wh>hiOG 2!ɬ T 8ʹL>P܉aCZ O>-PzάG%m)II1'e}VJiCQ˛9GG~nGtw<%_5c{v̥'F>{C.NuB >$Zs?xADݧTxgrn߹tgV[nH:郏@$9O'=!dȳ3O~tSL6Le0|ǒzzjhfO=э5aTH6%BvF TFg<8j!.1*7;r?Smz>'G؎z~5ٟ"%Մ!A.ORӯJTh4|G}wp}%+q&)F|z!ٴsOgYOA)vb,UL8hQ"I,0<VyKj zI6zv &U5H�LH|?2.TjZr:LPbEHSD{|lF7 a2<z߸07@h˫Y\ubjԑF'>= _( ސpqGRo|aƲV4,t q!<>V*'x@M|Gk-t'.��`rv5bLbP)"U ݌ ۨ[L;+#\@[ R<>{tq=4u{zDu *\nAIalmf7vEԧ&`*"1lj _KY{N$5pduˮ[.)!:zN |1|;44xou]C�0L0 DL }?ȣ ]KwI&)Q r@0@(A^BQBQrXJ@x^[s}ѽ><O}s #bnyJr-9 9r!yL$.< ^ c0Y9cb&ȣԜH*3ې^,-bxtpڑk _Hw_ӋҨd]TifӘWNϙԥ^f7z"Hvm>oR qcKʕmh�cgv1!Fu8@tUiQ56vS3t]/w߉#?Ruwa5ή W3͘]<;Cv?GUnA%hrNe>Os1Eۛ2 !x�i+{)5*;m,4J/)vyksM <ɹ=f+`W yDӿod| M> .Mm$Dp �� vϯ?K+B)B",ƾcC}rn;YML>ɝ1Xzpi]({FyT'.iqTBMU'2tqcへrug_ۑd¯ B]+NF[ֺl2PcMeb3{[b~pZgq=  EW杦e:1Zo"V!DKP;w7yd) 9'U9\ȀXYnd<&HT>IE+3Y$O9ˤmi 6KNmy5ޣ#h]ɔCG<Zsx(@#(dTb<T?1M}'2,عym%i׾'Tq0c,PS1e=~_p*k{wַ%#WRI7ƧÅVNy mKɌG)=2*[ hu2�ȝKUF's `rSv37?_Id6:FE8i "D9qcP P֔RؚvEp"yFiҏk@%F� H9<O;4QZ{  kà/Q% كw^r]z ALQo�G�w pwKz~vW|\OM?>SpccN&hB]d%-W*R)6 p΅amP c뺎KQ*"ӯr fJd!ug)k#As{T2Y DE?g�ܱ,ңMG1]і1?ؿ]nJn_ŕWKZ "ev OzB7#wr3+|@k$ZXCM{+4% d'w812X)c`;|!0e0k~SsŒQbώ#w= H =<@> 1֢8#pŽ:AHz{D\cؑ/uS")TjO|JRs60KxRX=p[sUy"ZB2(].'3..̅PiGE `]^AY{PF5xzC@Qewf#eY�TMy$+ugQ�ʷ%\~k+gXML;6^D*IbTS ZO 6LThXH\<$Z{~qW#.+% ⣋a�/N@R;P>Tt! *hgMb0Rh>*e `SΩ΂S+<xbH>7JR$eyarSyZM Ol{H{{A$=i{@Mz>fw5vm(O]!TtDz>.�٬LA~cME< U}Vir>;H4�* KL_Z_WT%]fuLl65n2m4Y*0V w^iGY?bH DpL;Xƕ*4 P}h.>e⃊w {- T>@MFŵ;aA�B`p|yW]>#'<8w8p +7W@!@ XX  z]xQ{7y]zA pԏ� D^!@�#p�_ jkca0X7d3:ǎzv=Pr9d%hRĀRRJ.2!D ݑgc~�q]1fҖGԴPOź=)Q1xݫRyp{ZluF`tr3G>sno~ +ś[JMVvkfdj\Q/I7;ӯnν#Z{:xz[# ~xxwzTvvT'gJ8�@O{~_Y/rHQq !V7{ 7v04v&g8U?}ep{z_^--ԎZc>?\*a ?]Z6V ۽5od<>]i<=Wv|wj<|ؤ7+Te|22Q)pOɯ]\^fkFuk߾Z _u1~3sN*�bme_Y |l2:Q xhbmypBQq|u[YDyd26U=..k1M�. 7\ቴ*cx@kͻzZ#grV뫃W9Rs49SˎLwkk[[6 .Pga_ycu_]蕫Lm|bm__4KcJSk++E. zf:#cR㯭 Vn0<Z/ߍ^wNNLҋ|֖5tãʻ>Fyn=ϽG|Zj6ݎ᝵c>tX_9Rs\nj=k[伨T*`Hsiy q.CP>TՑ�`ߑn_^UA=Z^{cZm"N_T+kݶm{97KFpl{uiw]~ﴽn=^o™Y{Z냌^)j=p.:^>Ru+U(eȩW{KKA0Ȁ18 x^4*C#x;޾_m38��8 C��QP(rKw.{aj "Ms\"�!y~V82-d}it2107I 1bYkRR)e'J>`�P3 s�| 0[* 0x*b*ޏ{I)Dp|~tkC iMVǬJʹbo X{o/Gm`FJߓyL㽏~y=k@ DS7eZvÙ\_kʑtG]ql,/.^sw#mHldķw͂شGH 'tRWϷ2v=|J9 ħ`o3ir x[}uYjg6B8%ܕpbi01q04R!:*/؛x /sie&wLE|?ߧk4587VˋV��9\/5;HkɾXzd#BNa Ža}߱vߓGNj@T™3D<Sͼԃ@|K7zqJMU>鹩¡k!EaFD YY߶ e]o.K)p=Ssw#o`p|C;q깶pJ>|虩�RHO޼y"U~ӻWzqumyJ()هvo9ܽΆ\ҹ?3Y_|/6|;S-2%& p ^XZ>[�hO xh"ifotH[o>ֆT&in_o.X!R_HU6ryы( 3jXyvwƥecl>Ԩ7S+\_wi'f+8[;-.]>|jG+:|rk<Цl;f8n,o}>4R8>22^ |q5GiOZkԎ╅K{MԒhѶf1\jI.ׁ#νz^7Es|܋Hp")w np9!V헗7<ݍBgF4 2}@e|WT)VvNXWr_%!k ,֮\h S8 ̵% !JeVMJo/GīZcc􃋧׮_p1a!'wv{o\<x9\ OґF*{kMe8‰'scw_|egTתVwfs{2m}/~v犹'#\.&ue2Ƨj�݀M{u.U^*eހwZ.D�28tx-޸v<i?N8J՝QΑl, z>b)oWt@Hϯ[_]h76Kd]~en F=g(wxK7~\F*gg|xa z>H[ UQ6PPao:B̦d>>-L٪Z^56 g\.g?%{aPrSʼn=WjpF ]Qvae� @0�8͟ �y ]K?28 D@(@!��B� _@NlOwO?wszGuh\mrY6�� {!p.sι,M9.8alپ͌ : E` 2hkr 2Ƃx%r(-ʵgi :6Trdwu}M]̨I;K=r׸\*X0;9fȪ `mˡY_z~yhpyFriWOl~7zmu/Ƶ#iD?:Z*zg$HbCCH  MW Mԯs^Աa'/ 1KWG>\xs›f^j{sQ�/aw־G7n]ƭiB'gÿNVxW/Nu͝T>Zs'Pm|hg>9u|quqfへ}'_ܛQq8>U}d o·?_ص9ڗu;be ~^PQo`/-X"/^}!y}٩Z׾?{\N7.]}ŕu6PQ乣0vޗӧw}u߾rr`#F"ŭ˽G =H:џAC}A.j&#M<d|Avj{⭛W:\[op5e"Dc-HV8Yn%.4A μv?0!"gϼ~v<dZBFHK{_WW<D1x]G^2((!YP@CdJե~JƃͨcX@+ gZ!o|8U@|Ϯ߸ؑS _WמlF_OM|폮!O${WVY 5;_{+D&աhW%!6=zM!Fub:lԣzu5#ћ;OqΆ C#e3z 'So/s!H)w붼xg?9WJ)*T=.I(_�tZ޷pI( Vl:Ь^קJ2ȥֺ/^Co?�w[A`vRl{g>3+<䶣.BWD!sXq! +Yu i7ּ#G 3@NFˤ% gso}cUsr}˷z=>UXl=2N,%tS֗=vt ָ'28'�3Wn>*_Ĩ**U>FzߑKgփKlϼrx8+6.[ĢHrFvƹ8' 5|vovo|Pys{.z�bm9I=C;�{/-t4vq� @\<~R#q><j:Z\y/;5M//=4</5yj j͟Hp, Gq|a:ntnt=22˞(68qF޵A?8rk͓!99 =֭k3R 4/^#De S!s|\⩵~GW>9ZwG+}%jz�Ͻmrbwm7`xl2Us/P{IS\TOpB�q7 !RJ%h"0@f &}K#DNYOKfVk<" `'pi\'@ss?>s}.2C`zPspqw:t%%D.�9. !` A�agX!�2ՔtƩ�@ y c�3{=<>Y5�ΑKG @Jx!B2Fȶw\ćhxz% 2 ^0Xa灪P+VSrPKzu%J%"CW-adirM:FDHD%K/mQ$"!'J/Tzwn2r 94KcJ^=vr17` Qk<m~|Bo~j?'K 9 *HO}!$ ʙDLyy0:*$-i#^^._u7[{!r]Ejm�/%jKErO8 DJv7/u_yq?4STXJc` Q}J`Y∑[Sk8`:—Ѡ˧[ܸҖ+"Fq 7K#g&/Z}=>\!$~_|no^;mZ2y%�H; !Df !@ eÅGt᭍/dw->9w  T귗8'bï-~폯e407ܓO+EcSf֟%�M�,tz7',WXB@] /ngvC19'"*jq:ֺuŎU2Xߠ|~}5vV:M\BȤu;F;N~"`jqVw4u$7� G]]aFMU:W0#M:4ooּk.gafCR=tsor$Zz�984j ez~,CN_n X]|73x h66_ka70B$8+g[_[EL"Y$_ai//C{ _{♬~൦D"oT3+o[פ,.n׾;Mx^lnnJ̄7ϼE# xnk7DI<, Ccʺb}"Е7"Y@p|ƕ3ⵋ>DS̈́S /R2^zqBs x�VJjc~ιKgZ9z>hWگI@{尦!\}0E{{廷Wdc`P_\ejTb} G:j$ ì;*<^|6RnueIXrwfziQFqBA4( ĩזngzX} OOytƙחPY+7tդ-!3sY8^鶃h]R,AŕsTeRuF˦ Z/v1hUAPtoJݲ A لASS&-;+P6d ca. ^{@p΀;B8[ꮷ>Ga'{xT={\B E(( �w;ȣNѣx@+J9"*y(={<|d2L� D@0\x~osQ&gءO=wRc�B$�agDRtK9"VP0G�6ٸ =$ȷH1^/Cn"eV.%Ҥ`B>m?Jc7i:I{*(k�g eh:Oc h (iEYJ-*w[;WtdE+ƪ.2<ZfLK*"3,/g@'|~bڥj ##+'(B1(B,/EV_*I և B#9ܨwsÕ1 %pbT bZCc%Qp_\|M.T茡ZdYG|fn\{uOኑs >3Cֽ?@Шsir׽?NPMi/$#4'Tl&ΌKU!$҈,!Ng!ʅomh_ң$1V�`kśa h1BrJx(wyvi8-Ɵ^<| BDce:BHƷU%XbB~ʭ+vWӽx1#�{bDߓ;f\,\x{C%<DG~m>:Qm$ #n__֯T9'ΎLHj<n�5.@%!0$hCx쓛ڦ:de}� _|;+)nG'zWq  ;Zu%ԅrrلWC,CWA %98ɵe8SdTZFSWgf6V %ntBwh _Rpޑ ޗnJ$(��+7~xO?R>>UޔSrh.Y.QvN6-v[H/vn_jYrk:qb;DNf\a^ʍnP%L_߸HT"%Mc#مȯ~oqf[[-0uئQx2SVRFH8-וW$Qy lQ%2gF|__, 3T.OqX@; BXw7 ν:*([� %gu}\^hz~"콺?j5gti$|@3'⭗ )el�5taSd{ e p5ռ_Y �4 DoTya[\Z3|Ow),.8JUC) ;nl_盾X}*Zxsr>{n\n-N7KaF )pKlt"ͥ3ݶݤxz5}11]| &- DHUT@w\uRXs"6=H)]9#À7 ɢTgx/A)nrɩs`UN;N=Py?gZݵ}s` P#!ݼHTǪ�8Rsj A8c �q0pcR)}x8?+~ x9u1VpqR-U嫭]{?GG*C#� \\5DǂaEo%(0&�xUea\p7G! fC�<k:VAzB8s0NyeH~\F0I&IĉW m7}NCʬ>,K_ZD[(sh/.'-Hހo{/Wk/;NqưpnGM--y/|59x?&."~o)-@Aހ/_Z >E?QjSeۯ,/^u+YTux<+wьGlm`ï-tZim\q'{Vzk gPR Чwepz狿}e vڟ웫mc,}zg}xYV~צFv�8JǬ-% {YakOڱ\9Ϭ_d<y4=l}߄P8ZƾPz]wW\=㷯ʹ*֚Zw�#줐SГ\ꅍM}eif.4. Sl+s0yn{4v*ڱyjGM?ٷVpٛW70YxF~B8ّ鉙[#ҭnAp6?,ԆGYƕvF�>2{?MVp׶@\ipr+(�FƳ)g;L˚/2 ;rҏP/((p\.  p=^g=,Cix5+-ommV.|@(+9 N\ E ܥSTBDƘ뺮r}@Q*�`s9B0އm"AD?BjqJ͛7ZF9phǏ<'1@ BD?nN\ $#ѶH0C0~ou�&pu0'9 ڶTj͝L(P�Qrʥ*Qv>4VĄ8mT-$ie:M<\2tsƞFV|r+KG.|gO%"2H;�W$n&ҙ R=ڻ5hzʙ{H,+4TМټJPI237ե/p޿E !4s<99uu)uv~zc0W;*;RK*ؐMdLjlciӛcߗUs?\%gdiȥ! K:<VFݼ @ I#�OVNͯb}!:3c#H[~S6 md} ~ߟ_]P`+?wh@;kO 6 !*M@_UjBGJ;sN+b>X)1GYЪP,o4^—ng�GIhtP_F�4_Z)qME @[٣"GF79p޼>ۥĜT[׿7əjh4;'7vW!첖�ObU*JY-$H4 RNq�/~c1\u8'u-� {2 ICNalft4"X�)Dk0!LbujqUNAӵpPŽ*ɮs<Z:.wD$RA#W@;7�+)HB-�(WYqwB|W ΦgjĺPu0Je(R"J2PJA _S̀G,Ӥ\>޵Kl親*ά8%h(ɐ0~isƚ J.tJZí9oT&,Aq"#Ė!d彔颔$#.ݒKpaƇCi'?szg-L7"Di"+h �{<u GאjC lCqԚð Ͼ5[d[v3zHIGHo2x T Qpkv�H�M?aX.\N0PofZ\!sבsb?�"-x#AE2 � 4SWR#, A<wF+I#t6pKRsT`S/K)w�M} [%?W`8b+ДdI ٦LP-gQz Pw � 7Msd%Kr@ J * J� �d>/AA|s؁7+Joxt@0!0.tKsߥ0re�XcT*aoMUx <(8p.xv^?z<pəR AY؋; ; 0̣stMe1a4Y" nmw <>L&@t:Nx�CK#%r"%IxE7imz(#pZdg$uKYF1:NChKd3K]8ق42itZg'9u}\Ǧ*WNwJM6{jkݺ9xPͮ<"ک-@w*UrB]T2;i0ڃmM#K 0r/.\ +^uFw>4qgO<4ï..D&DZ(4%LFb덠T+L/  -WF+xg:9x5Ca}NkJͯ|UHz /$Ǧ^ee׽@Bٛ;Z |$6_|nP2̆ӯf" lsҰNP+DL\5B7o4?^ɩ__̮+x+2tG'烞{zb"9iU,; "]oZWӔ]F^Stۓv=7{6@.E]^)B.cRq|J4U]א \?02A:fYzS?@ԛH>@_Ӆ&" �dEK�}iEJhA�@cU_jڟe/Q+gv2CK]%W8$�LLUXXJg[LThZDgag翶204\Cja hH Cd L֮ED!] νv1#:9"S^Dͪ\xzA(teu ~yɏL څ>eOkFpKq] t~ MǧW{^[XYʘ �ڭ1=L.μ:ז,Wzx:;EWs4`cmpJkn;Z)+IT1YHz&bG%"H๷WG'gҺOUw=VϪU^HKT(~fyӜ`>g.y|XRήWvmttKq)V(( ±@ ^׿}T}]NQ l#-^d~J � !qd`9~O5^|)^*'DD=U8LSJr6bnJ)SV.t[&t#X @P8a2@ |`�, ՚;4/NXZ׼fe^*c-(ώ�B.B;2]z/I= ��YQd�}izp].8 0㸮8Au�=7}}RE î,djEo�j6� D�S>M¤�b=΃ r\ [OZJo+KeTt$#H;+{Rۏ6t!LB4[~jnlP v׵a,eGNr \ p,}ͿKYX%d8~͖ۍTT-Z}yac|n .\M|/nؤfʹVw?]>;zK"RU2OWA= V)?h2vHk[ rR`^_4nߑ~vAAbsO[C1v9b*EFG. J4JOh#rgoA ;1 ~اq)"D/dIr 4uN<>%*k $iT9=מlZdhv=͹ άxbOD!\g#-�SR�ĝ{RkʗoV7r),|wzݠ?pn_o. -Wo|\d"/�) ܛUumHIP~߼I;2|cȃ~@NN CvUtN/vV8>Z]qr.μzIWuwwZo 1:RjJjUcT*1oJMχ٬f;4wN]RsjM"(LNjhr:{AB⇼�WFٕ Y{<]wZ~|_BCsETM X3tV%*̑G8v _^rbZ066 *wy3, Ϭ;:}ڱps֚y3~>! ڰ.]w$g̣G]ٽxzm}e$/go_pSkpw�01Sz~�$]ጰt[݄u K7i-&QHXlzSxűjC<c6*<.VGcF%bOR$ wE#c)쨰 D3<HqjE*.dZ T=BE�pK,mz]mj2 #W gA B!B|2e5a.Ќ)s݌/]inrp<l(`"0%qxYWuz|#@;Kxʎ9sM0q Or."`��a/c\. u]@8V'iQ]!.y%t8N٭VksJV?譭rU7v� ��G"F �t�*333$Q~@XYB@ <� `N�ʕ떄UǰS̓dM>wMQ 35H$%D�z"q=8c+%W^atZi)Z�41V"bbJuNz܌HTDZ}�I -PxН-P-W*k6h)/SR _958Qen}m{۷� ?sÓn4A !Rmc$TH>@37iYJϋܐGuKTtVO W<Ai@h,9yQL39i'X*Rɕ Y{G7�[ ۽0_KO4ԭtee:B whf+|G7DdbdYo RA!5Vaga}j r۩{3C8'YmԂ�Yxś={f lk!ɲd!՚}ud KT=[%d' B6On|?_ExZ~"@U *ڞTU^R!m JR"-c84Zւ"~;kq�00 %4u:=W���IDATȨ T$+uH4ad^agXh{v w$5hfwfW+[<od L\<VXTXb$*(HĠϩ7<!V�J>7!CTg5 )'EB@f0(6(�%Ìk!T )w~t{Dh.|h{(8OOL!$};K-%u3J_ID䡢4(1Bk QqzxM?Jx|+ N%_&HbK*\!ql1O}O bh(" ̳<;d G!uE1B nX0'kZ%V*1+21#]|�L#zJOJ'*Ol\qq`#FH5nB9d}qHLw/2bF G!@HR8 d,T+nwFD"f\*;h{㰤In$碢a{Jc'A1 !ʣb?@P G}R':ESƔCC]wqq$X8*o#I�\#3@.2�` ʮ[qAj~K=~C{&˝`5`@ |9:uT]zPCJR\."H1 :N<V(DarZr+� zmN{M" p�q_쓢"OO�0r �d[Hħ :)ax$ ]nz 0*ZߏŃdX Z\>ҫ͈r"MNf`I[}@{XZY_Mjoxw~oɭ^?3?G߷xRdPFp~b#ّ~+Tk:]uGl{?ִ2+dP B7__Sn4zim9u+U'-PߘX*0�N+i4mH잺?BLZO>x:щн#S){F'RF(*[-SE(;-4(v~np[<v\Zж[Wzbkûʄդ }~ 29[<5IRӯL.8挔�hYip0#+7܂�X.eg$O%Ju봷cr a9ۦ{�~x˙+r�Qp"Gp&+sdy.2+~pg٪Z݅`e} @X]K3 coD'T*C<,x3r\.+v?[ĐU5-;Xb`sF:&gO?9sXm|* s1w]x`+m ي;ԝGQD'Cǐ|t`yiBDCܬ|baתRKd[\+R"IQ?2de*2ZRx752qLhLVYo$d>]|>yZ w<\@@BЊI~3Ty !(2 irQxCרjXUer-@tZxS1j_oTd-HĪTE*7jD|s 4<%q-hV�.h4\%Klk by!#|!wѾ q)3III#-M~$BHtΎū |H7{M07G% /e#DPod/�q1*,I⯶Bjz@B?g)v8/!v ;P!!$֖CnZy �D�L>T"TeF�xu^ZV 4t[A΁d(~V`~"/r# !'>6#IOH=a)a9ݯ7!%4(hmX\j]];8!+Ȃ*�3XP_h2PJr4lad߯frSf18=ciX\;ߦ` 2?P!ѦV2K&&n .oRG lRdR @3J�monb<UCU Xz�֔]8i J%�ڙ2C%{KHW#BF.Bkm"b5i7:B&>"e H5j].[`שvC63޸y Ahbs;iF}w3r$@:�k/lnՇwt*jk"u�2kmeHl W|T+6o�K0'\8GZ1h*Em&^#nLKXĖEϗ> J]=M2$XYN3f}(rٚ a}}Z=(}wy!Cc2-1ͻSzŮYYiz k[IK'P%"UA&IWFn "`7)+2Evϔr(ŗ7܌� ;0 9r`�0�7.uXݲ:.ݍ#=̑F'+u~aDlw.$㻾 `GMJ%{yR?�Ft\XPNwׇб:><:nE�iಒJÞS!5biחcKapØ\ nt~�LGGM R#߂~,4Xإ$!}Q[#qSA v^d"d Wf d a3r\w5QQ'pZUj*"!ig,;# j\�J;G9p Qh]bn'LA>r@[Tm|z-ٗ)6w{A]<Y+RO'9Ah ee-,:m~# ��3D[[{U_BԱ6$s>1z_79 O!8 |%)j69* yFnjf1͞�6%>;9PZD!V.0@]+B촲_\%oHYIP;IT1jf +!B׍N2 U6,J91ZӉ{$С{F?4friρa3rC@=Y�`<0!#A0}/eW�29.VĈ+eS_"Pj:d$ �ceRt+-=h5y03ڃXKxy-z؉s1S(*2JI|H3tTl<gk*EڧKkYHk3{.)Ze5WԀx-g""b~<A:ʛ Bv hB8LY?;S-Oc} vcH$� 7:?& aёT. ㇼֽ�bVojoHaVJTd(HIIΜ%f~* D٥]`n01@秒7B`݃beQJ|WP-A r]/RfRT toV}НR1-AH>bМ /L�LMڬhh-)T�' >+tیK71A'ܞiAJ#sDRxnIWhQէ  @�@O0#ȸp9 v~C\KN +ޠ'J>[>O:rLc-?Q0A;ܥ$\{zݞycxɓ97Y.;NZtn-|w;BDv^hy~ws݈.> tPhTo+p2�.6m@̘_ =QJ[29>I:#"r^!Ca8lo=9cNX1" isBi)=;YXrOb($1fGR'Z"i H[ C.*ynۗJ(?'j2E*XQ`ex%rKDϋ'bw$[c5d @lzklA<֡uGTd|[�@iS? _޹tvvTg~q?KlX63WP=Tzz6KG%`̪!ҢSS/46M c`28GdȉZ@.Bz!Gמb& ZVmX d(BP}X5ia^). HIAk4 ]N'ȸEt$B:9 !̈́V)E&爌%u񫟾}SdB_a ЄKP#+ni+DV#Dnq^yT2zռ9JM#S.b/OkbUj ~ Dzc)rMbܭV婫dC P.uut5U.6rOW2ƵNW99^7tz>`FߑѲ%PG'oGH@"[.GClk=!Tχ[kRE Q*CȳO:$_Qd#5UYJ iX,dIx^͜[pڲ3f�!YdA)�|Od\-${Cܘb#BYf+d,|헗6Հwl;cz+>$K$A9"/SZi[ƪ< >xE @;.�/<c" TH~Rc3$)AE $R h'\_ࡷ,T<IuqBUi@3* 1UzW<YDN !6 sט|̨ OOuB<$2o]�?°u^"`3{y] ĆFZ!F|',G8j$>DHuJd5t`kuN$$ Yt!r�GotT.n �=@|B{lg8:`g=|`9`B8Yrh0R0K:]z T.FQoky ?'~O8~Єp;X,˞ו]k Y0RJ[)o jΙ�G`? h�W<2- "^07hA\L[ y^Ce.Ч{ŀiW>^ 6Ed5 uYxB ݰ3e![^qcb[%Ý?@�@#m5:ĴMJy",4Wxme *ȤnHN埥Z>E=܉-)6&*HFm##܈Jκ ܤ2XT ;;d )ϑJ(_J,U"mU�ix$R6_ DYߧjD`yV #rRGy3sSn81B>P~=*gc-k ٸorGAA:K/1 SfܢgTf-Q216#ukU#DC=B)ĔBFs-.=H`Q'5aAƧ7/T @�Dj7�h>\>�jT ]`:*Q'42QښSC 8<69jq!Lt~򎌕s= 2<}ݎd"jlZ a!Ƞҳ deiyFr ![%O^l6(LTk0]ko`hLԡᨆ)hVK1:l2rʠX*.b%tHN!!M%YSHuMaX�JwA W@�vWiOcܛ~u D!Skv QaA� 1IǺCAp0D!EBUD ]B9C4B(a}ps8ДdL_p~T~%_T:+47�zIu*IhJ6#bF%/-B:ͪR8aKE /!n+}Gw8PRw:WJQ1 x( !x֭k=s9z(Cuv6=OThA ^Tkt iUTof i4E%U' *\*C-.$I֧ ^ǵ*5vעʳl(,L(˛SNp�亯 WA5G5㴂%wN"S8jŽu[$L|:!QSݤg3iN@@݃$}BW)O\ITSwRtt10.�#GaA�9��^G%�@(U"zZKsG&ƚ7xqzg땽HcR 9�cDE<GO cPCG�'@&ΧeU|6wS?g~]" qoA��++on<LR}lrf~u뷮/w!:j1&� AdA-: 8svr11*e"�TBt,c̄\qB  <3Vb̅0 @V"sJCAV:s=S35 w!b5c [gYD-�%8!o~9*B :etJ�u\`EC!306K'Bp 8cfELvE,5REp/' GK AwEEya (W!+HN]%P I7Fu`Y!{rpZĀ K ;Qҽ7nᮩ\?m�3%/~=CAڅ6!LY 2g6-o 9YBKi_)!!O R 9کz򣳻5ßuA'ef.Cz3# {kYwZ)!:o[fWD}E f$P^knnmHE<i��Lk TgA4^dI�L楮!/�TF6+6$*KK\"42V );?|z EHލpre3m �";btrl([8f@-6+CӺVw?K']}a&iV-.RMWX [v̞a4uViRW.%5@]EQ[bhoHv٦ڣO@d>i_NgJ|o$d|NTN T?duvK}<c#(r a!r~˜Ĵk $]L &]@SQa*w7Yl=.YdlcnIi߅TI^: T9zgXpj}Cr~_Z{t[`*yϜrþϽvƮ}C"c{ ]xg&vFV[b劣zU9e}h=/K7]+$Y ᣦMJ&,gt.C;pq@bU mK&o c-,"2W -=ߜr2Unr17E,7fO+3+o^im0g OTA@P7+AQo|(˙M9-6Ũ]@!0|`32&@�DQ W0 Qm!pxAplLWӍqƥ GX)>s8s B&@Ľ0'Ί;Q1NЦJނ+c|8B0+X^=F؁leq91;Sumc}`C}qBp�Aað"n #e\pA�at(8 B`L� ϑEȹz{02ljn"rAԎ]pC0L�C � 9^36;0vJCDGC #KW`d ] |=B b ˄@Y`' 9�] TȘ 8{=\+8.c @p rMwTz7,lIdLT81@7S?NV�/H[H@Q\Zv- T1̀069yEylTmM/lWB"d69.Vz6rgJ 7YN9rj BW!"Kk3$2W6*kJ$TlKt0p浍3n;|c{ u}E6x/i%V:,wpUŅW#B0+2ӱtx e 5FT, 1f\~+Ϻje, ]D<NIZ]l LS ,unllz_"8?BÌ+'y8SPDW%d-ccpk ~'$!t '~މ0265/U!/bt2?Xn]*h s-^X<zXjbfg7O HA$} G|WޙUu'�h<@"E#FԌҎlVkښlGk6͚F5"�/�n*/+"npneQ_fFTive~X-(<Yn̍;\ѻm-:ԻmlT$}pZ& !Jʰ|J+6FD/?J!ՠ׼{gB4)�PY6=.G#YcN CߓR٫5u~w$&f]ޒo z9 Ѡ,D>1̾] lBlb7ݞR)VMj^4*> ?C ke~ 2V }!Bw:X,zgLbGNM87U.m'Oݹkmt%99"8۸qiȩcg&+|ݛ~7Y Gfd߃K ٙ<A"3cl\L~ O|h< FܸfwK)5OC<A6 HZ{,4w#[nO2ݬ<L2 U:ߋr8,Sjđ?`SvGm$+7zb&~! Lk%cy9eg!αTv(Bd˟-,< ? 8"̘"H $bG`=&HDHFha33Ow&&^vw98096oEf ,֦a3 IX3$3U1iՄ&HEAq~q=8>aa,X8:sCv^Z뛛aB)Ж2NsMS"��]uYf�%A$qP{ ՖO@Dt )EBF+ <C)H x,ca3ǣ$IPFK IFg_Fd4"LFQ4DO9xx .�MXy:_s"dq� ]F x5#+E}("!� b L6U,:xUj>\m6z2mŹ`H w*]"UQfW'cWo¬6=ffǴ!{bU&ZΙ2RR9Aˇ:~,{ev⡉;WuZ2�~)da)^m8l(qW~ZS j`_y{l։4��zx ol+꛽ƮSOB)]W]ln `!x_XoKv ɚ/�:.�&pY ~5ب)ef;гڼ6W`P]l6=aÑ�˷;YbDq T!/glRlLL5ξոBdJfPo+�um+�h6czt\BHy6 ~/TO-or�%6#Tj;|gXmg^7x({1 g;Vڨ33 dG u5[gfP ͎L.;:/ަ! �APǵQ.3ťw_YBv~DlPky|s0w}fR-;w*ʁMֵ25߱'tP&8'jj06ls- ��aCK"@IUC HhuA?1ZA#�Q!m4tyYC( p{#y7CKKܺYdT\=T;$Ad@DI/nܼSs G+<ٲ4G㓍v;'hJWE *ߊ̴& >Od$(K[m=製ö*_˨BϥOj+б}/ 46JքhAa0 /B�$r1hN?x2|oz4L[yx|" z%2w(T93q2Mf!xH*GÞyl(8Fr6A2ʮNX?o}"0HEh0Fw:a}љx=>Koo=L6�$&RHYNlqJ6H(I #T^mCD)eh�@4ڕ\s� >r;o_rF4^4hE Ħ&@!0@/@@D��1 Fha!P�L(!JI2@Q<J8Nbݾa[A DP&L qIBR""D@Rf@ ;�B �RBC`$VLsfy}sxpԔu �$ %I{*\RkBM7ӭۭv i@J’}רLq5Sr-ȾMs\ƗRz-ߊS[f s%.2sC_L18SҼB륵+\?1y&`D磟|qƜ!U)4<BD1 ͰX*ڼXrk\%VPy~.9tv+}œ7З2O ㄘnp6RKvN!4;?:?;, ] P9tG9`F*VJv߷О 7W#I&J!UƋ$Q_.|D-F i ?B++Zor**9PB sw6,]fÒ|۽"\Ѕ/vЉ\2[Z^{GBqn\yX v<:}p@+lXo@afʎn369(8m!*yrf_򽥧_rs_[޾e#A58$! }{@); �N+A/)eLVKk اFo e-@"*?~myXz9`O-ʷ[W66:$�QwmTTT`jFr�vfB#lsg8k2FRTl$I^){E?d"'cqОjLL77G'`|5˄#' K,f~VCA-&%bavώU;�#LV}ON)7^\ꮏ>6['+ mܓBD?\鮏>:[2&I<c\nr|O,8(z :cA6<Abɉ+CɎuJzEoJu*P9_ ^A�qmeX0lX8Ev>_`(=�_A;9ݼ{8_V Io)2# j4ohAL :18mEя+i)w5E_P<)Hp\B tb 0#*C[ņF$(PL@FqBQBؒjf6F35oypzك hက@�$�DYq$B$loI!5{mpiB!SsѠ]|̾ ��1#} ^WvVzkf4'�HƉF] Ⰱal6Zfh6F Cl&6" QD$DDqBF#`؇F#Dbues}uߏ6~4 F#!BF=4a#P2a (G# JKɕՅF� P0n8p@xUZRwc.I��c9Q󞈌?鉔r4ʶ`ja � �Lk|+~8(kCC:eLΪ^#�WZ݂ɖ%z $Nd�[6fc"ݩrc"q .ϘD#M}A}Ѝ [H6~gI|[ s~-Ý'??/&h#BB}B pL>ByM!A-{mrm€o |][kKCdQ#T,u|&`↚s:sI01Koo%cGᷖ Ưm"p3pO"/A32Щ@2jw5̈g`2�ll@R Q�C?;z^d,KG<lCOO!PI!ٺ׺EYv'x'w(݇ˑñO(_˗cXZF[UvgH0Ln{?1.IҨpFr&PR|jyB6עa"G KIDFg-PHh�`+Ft&`VSo Svy |`\~qE|)Tz]r< W~)\\T\_ 5$y_,яݿyH٢h ͇) ߾@WEDqۊʦQv9ĭ8WS#٘CDE}uWEދc ɵzWVVzDzT�iff��_+9A=rd $>WSO-TpPQGZq~RǓ! ٥{0">ѹ=F3\FAO͕x<H=<Ek1b)ҽ2(}l֕('A�¹̖Vn2bXȄ~3h<Z!K0k͒BfzaC&Гc:6PnTu;P~; ܂2v>ݸԕ!j\]X"}P}VV7xTQQ6[?e S #&/Iخ'xdQ�V\a *GDbQJ([8 Y[?S8 ƯnRiJY!;\E±Vzrt<Api#!yW0jj55Xh9Ѩ(#Bcb5p-ѠǑB"f;➠t<#,,،".R^9ZӸ~8l2E!r9hօƒqx]h|2S,eg/L)GWhF$+ !l٫P bHJ"c NsX\uZW/vgZ �� 3d@B%I#d@c{m;,Ӽo:4pCcr#wgM sE 쌇ӇNom za zqGþ: j4ViF6a(6 !zPh�H I I QH& SVwtoxsuG$!(i'1aL %$Bz>X�􊁀h8HفӧX;<cWLvl ^�d8q鑅Ӳ%*+8d�HU@p8o5D2Udʶۊ3:g]NyrPQBB[<ROb fAWaTƔ2ci1P3K�& ݼ=u�o=Eg{֣_=:�Kt߾柯9S,IB?WKrVDrCd ̭}娈~7yՒ`֖FN|C}E:pdmAol(ʳ+I Ưt�ܓS*{=ZUgl,-[ uzW%{}s?[?G'u搻܇ W'z׼h~qy#Q(;|KVY=D-uhʡD@ ;Q;��ڏ?7W 壮MpJ|rYmJ(/)AC%Cs&@\5pV>̾w~^qڱE;_ ;ʮj${ɒaNp5^ۯ&2a pFKâ*Lo. `t9s x盗cT>sR|*xR~3PRiH�beg5S\}OLS]xufxNбmMmVX>pj:2vk�{qw=oH:ps=CytL\vg?w3~9Ջ?9 @$*.he] ZʮB4CzNYtؾa>li|xjglTÒ}wV\T8 <:k>;_z79<zzs/-+LMQE.1��$8J+Z^^[׺g Ǝ9C#7J'f&_ 8Jd$׷<R7;T0"?;k5IpGFYwmכֿdG7.oI'gfz팅GN{~_|V\- }x;%Ƹ_WhI+[qɨ_};$yw`kše֖l/%ٕ (,�ةɷֆYVRo)8N9;ݍCm `�8|b⛫%Vl<}@gf_{;=û"Xη8!>VMy,zĺm8Yˋ]D]vl XV0|W @"HH( H1$r8ͱƣc0H뫷7W6N6f8Aig׃i)~Ȅ>2NZHJ>֍7JZcdthA S07 Mb`4! l4F3l݂F)t: �nP aym-X\\w}yi}} Dq($C ah$"Hsap'MMNY8yvzrz2zhP3Yj0~*hv�+^Ɩ }Mw&;@A-l�?X3!h}r, qn>Qg[#ɢ:l ^g+}ot�g7Q{Q@\,SQFfɓ_<o,s/;:vZͻ3Qu{IzX;͔uF8ɞ/D3O<vrExŕHhS >1Jޑ5_Xۙ}/#pŤ)SL6#6 l7e'r2"Gqj5;m.K+j+ѽ[>sÆ ~W8c:Wmd?S=]>rH|P~V4~*ѷC5ڌ3>%8�"O}ir/}ŅJgkyjCO<2Vt;\~sÐcӰ߼-z|b/<?QƮ7eF|8Ho%qYzn>T+'% @g;EBFx3=PFL<z^~KQ:D[E,ӝ߹Anqjlqfy! ʎ,2#y}etf٩"*2oeiE2�xL=FK0A +D<a{̾g'thb&նo*+S/o)Z3׍J~c8mZjl.,&,^*qNO.?Wb"gk '/}haqmW O({'O~S&-6stqN�Ĺ𓟘wEIK P8_狴v|qni:V[fc~v!-A?9%>#3h0,;UO㞠?b0 4vN5A-G?$.!̣&@ttɨmmF~s_7#c=$W=84P b_++Cï\ws̪j\buHY=A'Ns!)<2;q^zrP#$]8O7xi+$ٵ\70*@[k+ِ�Ih4V B'Iq4; g~S;Y[ݸ7JI";1 ! �tO0YYd㕟 ݋$I$D@Rlo]XS eL�!-0Ok?:t<ܿ�SѰ)r$Pa{0:O|l|y+З>G?~CZchqikQK " h-k(2%QG6Թ:he۠en^g})o8NF(b-v�{AHDq`0 F(IsN5~h"ftQ]WQ- &BYtY* ܶ[g:WS d5s:SE?dI%=_m6'c'푟,HXJzz& *`F#=|@. iSg.Ck g'N"'-a O1fX)d w W#8 Yў~Nɷ=O}fXj{%UW x8{YI̊;�ʛٱ-mzvwN #V1^oCMJccO~es<D6 :pͶ_=\9Ps^T8Gjx0llN**qMo6C3^Q !Y-@�X5z06OQH9娷�Mk<^r`/}s ?2سp !gp`XȄ^֢2@-6Q! Q!to?*�pǟ3 y6LS8Loߊ3:$ګ,ٯ8tI^ޢ2JF ∳O6#ʙCPuZgl8I�X_բk7on]R ̶7qRmz_#�\|s%﫲w{y�闎}|ƚ'+=-66JovNULrQk=9tdf9?}%HLZdO;%A'u3;Prw�_qTj>R Y�Zmq#3m֩_@Xp >T=֋4Vp汙O~GgZ`ry.k$Yjp`敲uۏ<=7!ZHFS̀Y_.*a&K%+̦ZUvf,?�eu_^*�k](W;\b-PUAnɨMN7O&(}-K #/)nr +%>>16ְC1ܥu|qtgK97&e㓭Vl?'b#ɇg q۴ !UTsu Ažݓ/ oN+d "9WG4mDvHd0GQ2JH%"Iq ݵ2Aܘ#L=S|f;cO`(!_F,D�(@�A^kQl%:�%!P{2FUtTR@�e'_]6ERR")I$2K Z86Ίg>K_9_|3䉧9>ޙHh=D(& �Ri5- Ka<1:|lfNHҔ~@ 4($I�LTP!P' ^F8%IHGG%P̩9+2viK.jD "LݲC=u"Wa3, KiK9 2s@UML ʳt䲭Q&աxN5աY]IkK>ԯ3SOlEKtщεڅmkQ) \6!jd Bx9r! +rUDżt<;&D_˞e#M/䑿Oms/4%"S%Y_Jfܴ_̐pP�޼ܻzIK?s2 �~׎?J|ois5a+4~֑1UҮtT?S(чg`b0[NQ @!<`H�*l �}lF3�Śx<`j6U&UՄng)M!&7ҽE|ȗX!:06;5x Zai:_-M�0i'KYШj+B�Y+og_9SDFi t>]Iu00B�?[,̾/ک}-K1@pl~t:8/}sɄTxڌۖ [&ps_8�ƟWVQr+y;vc4 A!e2Y͗95P@".\_h/9@@IBvO⑰) !`ࡧfJ*ۛWr(2eU1@KyhCJsQfVxwBfI֖`CUvkݺ�pU4jN1Wˊz\~z f+<G�8wl婇ԁ)Eq"<rj_X(I$*j :2%B0n4#U#n1'nF AY3L N�9Cfm |:6U);O<uQ++?w/y[pǟ)]5U fل}׏Q`>wCj||}<o%>L>S}|�" ɣcA 錇|t_:|S3-3A,9a8Hf[z\Qn 쾖%ClO[cS*W^WcG hD#'&yzN/'m<G8~v%/\].vI!1OP!ZVh1. q(;r$A2,G E΍nɋ?"Z+lw>pcuF'-7!9na 瞘lɵ~<xdGaB{<."3ΎO63xD3eS9JbY(ǕdH ~szxg~)Ge9òV AqkHf Z[>+\ㆅ`.�B`$@Q2NP�"$Q<zQxl_x>u#?X;k#܌0HbQ t PPn_)%"AAZZY-oIdL?8`CԎ^<vi7^- /2 F (E(&܁±3}O}'>2?9K׆0Z(ڒI$T8@ H=Jat{ؾ(O@*q-Jr��)8R*cwE �#(h4H&dJ~P+căkrd4e& ,JbGdAlx5U8[^?+"i z #2$bn1u-SƳrVЦ}EŠb cQ/=*M<zO萃6S6suo%_�\~kqF8F&0ְB,BQCzfJh#tҵ^9Ess8 86O_<6op%7>Rwo $nJU %L\ 5m )İ5)O}'?>w k/; |ٙ~g6-,>+[Z`b%3#D_N#r])} OǞՄ00[lO|rosV%^WT Ύ;;`}ett}��<̯3Mpv+xSs|_ᨨi%lPNrw<?+̩G&9BT ɇ'~p2GK+qBBX+ytק|ȐDٯy]ZlG c*qeG/U*x=uNzdM*}g)E҇RH?x_|+G&g`!zBFYX&#\9@tᵍx{Bۿ_?k}gQ|_AV FVv`+dM rtdRқ/c)|6!e1\] ƢC sЋud!(K*QX xjiy B+C�Gx f"�jǞP _\Y0Tf|餔FQ!u4:R  !u<)`.SJrB_|gͷmhGNgY Zj{k/YoZycǿp)p=Aís_xSꜢ+C̚![ЏhN4Îd#?/@ď<rO=<mJSOFn x-(K-'>S5-rdIWE܍Jbvlg|'?1scgO| ceGb/{wJ7-8ph.?+Gdm='ΕH�pu[yceX>tQvXq5sĴcm{BWe.A@;׷Q O||~|,t˽&<該cqƕ pt#p7+�V�� ';5%te.�0g;rrܶ }'h+hkms99_tju1'.h^|ZH9ycb̲�p[q|- H)3X?LZ h@9rԉ Xk$3TRkAxX69`vI0rKD!H@)Ba"! Ę;I5f#Ĺ DGh-}P@@4LR�[meX}:XӖ[`߹սs'� �ɬM*&a"D!0"{0Կ=s?ǟ?htzd?XxqK !D@Dd9`9쌅'kyXe&Mv5Dj^I6dfűLGCrph4F( BR~v8+0!o$EoNF g2CX 3g bn;kO [W|?;jf1ény 夑e%ҝO(yDޙr{7woG3s󭅣_yfͫ?v^N3uZ(;cW[;gͿQ_B~ꎳ! J?w䑧g~{7ݵx`g?7_:XŘ*6#G{*鱾k߻?Zұcή ߿plC;Setp}b㑻Ygý^oow?+n~闎}-S|9#9958|bӅ'q2쫅UC+/g&O;[IBn_?. yǷ)y+$9'�gwڦf?7w7{;ξ\KW0ZX;Aޙ?)ymե`p`cu4{o57ߞߚ= _ba!4pOʉz4X].,![hhhhOT�W �kmbNOblOoő4+ !IWAg%@qdkEg<~pui8\?r@k@kvkf_nZzg?(/šY%,$oISڼ y]z{faVFoEdXj �g \4c룢ald Q:xѲ=㓍;p}i4'STsv0iݼyb\0Ɔ{kYc}c*UbԠV�ƑvZ~Khei8$3ls[fA)/W6,ysZ_m WW[Tcj95ӚiO6vحIaĺSMD4J%IΐE[.PǿF?&¡7V7Fa(:ӓ%hv2 w+D~3>Cnt7"!`lqDy _o^ڜ.+plnu7FیcTs|1>՘lUl8HV_&|<{I6fI i&㓍Nzzo3&'^{Qsܶt7UiBt񍕇_V;8I^7uGRDcl16vNݼی_Fr.n k3OvtD?2XVیp|+ �qyƷ"޾=x ƦZ[~?o~,lfK蔯H{6ENoqLk!2&bl8=y*HfE\=!Wm^A,"*B"JG$�\8((%mcxsӓ3/~w_ s@$I&H$IbPT^ah/bHox;�**PμRJ) Ng" {ׯc'A/YZ:L@9^. {Vfo< �Aة‘CO<n߽jM7�;@AlZ@ Q$Xhfn艹Ӏ�(I Di*kS-% fF0S4QnڇRN"FFh0q  VF>dd~�?㓋' ?Gdz/ '(3ꭕFsҥŜw*D?}aLx<HX䦣S㕫㏜?r~Z Wۧ!t/[A5lyj 㼲i63Pj8o~s%̯h$_b=B֙Xb⽯΀'K;?lLa%?+'총FGV~Z[H@|f_+xxӓP9f˶_9^~x`s`c SB?r]w&Svl?nƑH xj$�o{Du?;߶6dKt.o67~ ^M7&Ԟv{WٳVC`I^6o/][?T̊K!J#n,~w>3e -/n_~3, tޝjtR5`, Xt7F26{k 5*z$tu8#y5Em03Z+L7/c  z/,ߪ:TZoE^?f-ՃHbz[>3GDkDnNN7zz!,+l�ope@rbV4Ϥ`B۞9i- W[/6ؙۚcgR|f/-ss_.� wzGOM=U$WR9eݛ/-=م(pb91<;iIBo`q4LfaxmT- /z  `vv޺qyS 4V:1eFjһl{kϔ +>m~-xС-p|PfgY2|n.( :ݾ9y�As/"fr$fUx_@Cz6vH4# ~^%5s�Be$TA\PJ SkE0�!A1qqFW/,n,ʙc)!8JL$t[Adǜ޽^`$f|wHszRk �w)2?eu817B!h>Tc~a;wmB19ޙk6B$cDl6$adڳ8P7A0I05"D<xٙ"2`�N["aJAF~ͨ)ɳTe /@6>3\= ژT>R](V*<,]+fR{ IG7ңv~_[+t)&F.,ںnSigӶ}$N-݁Ծw7V"_g81d\pKnKG<� ]7uo޺Vv./-/1dvdeiS_ BjJf#~֭P+VtʅW|y=;<_�`}|*"w~wހvXЇkK?gőomʩwu囄{wolE[|wWWc':LU2!_εK/,'>>hQpEƕwqx}e߻Cl'ܶiޡ u�`ʎ)Pəh�KGw+ny ը3Zη3G°|OOIҋ߸iu7<UYm;ۮ¨✦bNjnFoSyQz$g؞ %�@+],9}xҦY] qƥFTҖt:(}W.&|%ȮObz8yeY;?[m{c+GϦOLVcG\,%%;WUMwݻ>ZݍwrXgsV"O] BaPK½ݼҭ)RpFws}>g}e|_ė2T`.#=|"`,6H(Pvx0j@"Syxg.(H E"Gh.n+Ē$FA`<>>쑧?sS&յf,c �䔐%�$Bl;ڮ ץ7\3I/MA�Fyq?>{\J�� h��Z� � P@؂͇{ǟyܹGN�-}!P (ku_u{ 7ڝ5-'р~+wDAI V #"@0K L.w'^Wk+lf@v`m:9voy A<¦&bmP.;+k7#&Hdݮxwc`܌b>42TRz;q$_^y;lgm}0g!DŢU) :ۚ<R2Njbz{IO; ?Ynw} e~1cMQ^M5s<}ޢjI?W_zr퍗XZT@3:͆(+1Q!JQk1W~_]|vETRϊ|jQ߹�\>&wg\]lz2ȧs\_^,F溊=}zy5ls" '|(pvkyc΀-b{I_7b��ஞJ9W�f#lƋ+W/Tԩ珝g�H bXmőMm1??x_r+nF44 ,>U) ۊRʎ٧2nZeŁL5K<;+=�x}ef%v~+K]"zUf۵BX)N5KfY3wx 8v{24u^VxPu-^>;sR}ܾ)lK$9T]C9#[ޫUWsA*\8j;9`}`ʩѫ_nS*6 O9pTI /HN�Pjq,WW p(.ܨXGp H ア@| N9ČL+[|?nKIZtwΡ�timyI%I);HθQgjn%賔D9v~r,hW*G�va}o."%հ3Ιh|*5$^ [91Xza}ЏxV[g6!|KYh9 ԕ$Wn*Gp=AWq .\j>kXR֖k15ZX. 3:5v_-A R"@�1!% ~? q :=~Ht7+z D@@�BB2^{�  ޭזFv2Iȵ0(;9`﫜p/"J@6h@xG=>v`[ %QZc8w`bj`,ROQCוdSwǛ h�8Nao �PS� *f:VD"n'Y J3t �Syɂ|/qL(dՋ�m{r\ ?r씊0yj^"�xŵOm=03tk3+/;Bc%9h`\q0&6L�IBnhcmR+2Xu*Jָ DzjhLhГ.i2?n1Q+q {L0t*#qWdrqL0.;^ 3 `+O՗_#]!v,~_^]uYۛI( !S`);cK4* Ksҽn߿@v&{]F-!5V`�6__}PkҶ|o+[h,'pT4?vs9I`ّl!!�߿<,}|gO5r̃Pv r�. I KڝnWz9d V <,ǩd8<4#p#Ykd쁲HG'u8Lw^]uysoš_mF%C1=_`pp͍$~`nDo,(bŽodƗNJaaPGU> *^-"PIY�  /HwӒXծNdYӦ,"=<El SpˆKߺ<XS$yBF Zl$YBLl #.Ch,r7.um7:V`I<V�e@ o>߸yrL9r 6 6GR {ޭ&;~.v7^ZJ"ɶAUyƬ0Jr`KE7D q`AQD�W/_`Gޭw^]J-;]7ny x8rt<ݼ>�]xm9%<AF8^_~Jy"H&55vr a#)qp)Drd/]s2naR#u}[FQv@Aǘ ^L8B,!N {U�u8-I!h4@`B4hԏFFb0ws'“O}郭\[޸]Aa(P$@q$q,$+>FI"X[zwoz]v΁'Die>Kj?;8Fc@[<O}хxc`9}űL)8o0 P&V0\^lnO9Fp8X!Z$O)SE&lkMbdNF� kVF]#F-VF<2"~JV^2N+7r**}1ٵ꽞:+c^6+dlf0ty�pg`7K۽߿sf2A;*�[&uaYͽEDCg.T >"pÏ󞽿$[_�$NjM\(&g_rAO݈~o.sz[fL>7Tlkѧ`lF$}_ Ԟ^J�@I*=Wo~xjن{#ccPw}L92AHy{륵wW/ }n[KWK�ۖ ~rٗknEJO^5`|k;l?X"5�,+cYN!B+ı߾UǺ GMaRϊAB#7Xvf{>iIB/}z7I{ I6;J!_YBh c$k3l5{$a(0+'y}i'yUmc$@R*!eIvj 7Ү7~nDnw7U޼Rm=|صW Flؕ q[ A-eWuc)EHw_Y{ť Fڝ(J# 7 kAsDwӻI|i5Q:M^`[$c� �RpF7ۣo^ټH(ROn^qi}}{լ_W93p;H9(�X]½~%e>ߺKKKл\~{( +`ZVf»\pUBJG96rڽ[[ᄊ=V&tkﭫ8%xy*^x0׾XqO+ 廯-.*굹>z8|0ZS Η \zkeglt[+ u(BYA@)Dk{" X0f$[ؠڈ Hvjz,KI}g-`+;�! R���%! !D͠aH@$ $ݸ>6/<:,w.ZbJav6^k�$`x+k+zmM U E*./Rv7kMl)eL�`j s>qTؼ;o4fxszl'&�� l($Deyy+D{a4J*ض$I(0h"�paĐ7�t3p{0rG* hlpzzOe)Yܱ52ğPO~mrùgY,]k&cu:Qʆd$;֧';0y_[~ $zzXs㵸nVX̥UwyOw]x}~/AOVQ]: '6}>>:Ws ߼7coB:zS>+m-{ YpoI5@ѻ?ZvaKN,˛oh' + �߻s:zm4?KXJb?%RTA\b]n_?}tzܸ.: MeZ;j$Sv`u6/ylOϵjju_mqȭ_^v? p7~j^ Q<VZ_}?GK^3=}k[_CY(' |/"�ܿ5q<̾fk'ֈtWیKG' sHd6,9Tdfy]#̾©G(WI?JH{+%t\Kz4>v cA8v>0Y?o^3Nh\~{Q7Pߩ?eT0럚Vz3;U2׮|o3smYRҵ6/Z3#¨5Cwͤ<0ƻm/=>svU- |lF/}׆Je:r\vfWggg&|׷#4ȭ;\q9VLj@|mt7L'x[Wgݡ]}w}: 6*�`uq7;=ydDIIwwo\T,˘�R*RP?اEh[j}ܕ7m+Wwc;{m&1qїԻs1yRw/tܮKE͕{|&~LN ܸ48|b3ިjo\ݹ7/ Aʑ牘/���IDATR%ӽ\I�=sG98h+$lC6L�BD䕘<$*[$kv# (D RIJ$H@Y@c��xМj8o5޼QwDf'%R@Lk{�%bal5:ݍזOݙZ8jOJF~F87zZ~r fSg ѻoZ]ZX©F(ƛv#g;3A"+^u"S:��a6ַz)a5))IdA"r8afUl`BoT&3_WՙVϺ+BEݦa ],_e$u:H%"B<] ya:;Nj'?l.v ^zao.{5+J68FC>5A꒐{rs;v:zԧO/~t<x4ݛw_^lY<{NT KB4)X~_xO>SM7[u}[?\,r]3w�lkXl/޽bvb>z|ucEe}ب?l/0 n]?ssOjY;~6k+w}� @C�~kǖC<x7YJ>RK \zcG>:J:x֏tJ']1z ?_==Y_l.WFCLl 9Vv%2a~u뇖?쾒W?;'\1CV5 HƟ^xu#;D]Q3$7t_r;OxnIeDoC#3p 1"`uhl2l #ې^o]\M4Ao<`|2|\--Mk z,}Rmd� /_x}gfl4ߕ7n\L5D,vzxp|e>cmyϺ6;xs#35T9ܻ֏V{<M/*OmPÕ7zrڌ{}΍^!5)c 6<E_Qٿ9ѷ|<zzvn_^}wsЋ+�/.J}gR +''71%~cn/um՜D6yysNp{i%?*^ظ}{N\athʗTBg~Fdk;�Rѷ-[#S+nm9197n4Z4+;׷F؈6$ӵ{Nb:i8wotӓJЖ1y6ׇ6ߞ?2k& ,$ R`%l7 CR`GחuIUϢ󉾺hۆ_W�)�$ D*XDB%B HJ@F @$0e+hZOtZ+nBDP`3C!2!^[ ֽ۫7N=9uxoce:4q*O:@*>0=<"B{D4Dg3=7>6)B7A*رc�$�$H"n֠?J6iBto$Ep8 `'vTS̩9+h/߹ۭ˝;^AOV]݈6!n 3RYqz1W۪0SB,hB~Vs)94t)_ZmtT$81շU&m5�4,$D# XN,>e!?7~ӏLouBho+\mG+^Z&/붃=/*ɇ|*"!DY.h@:P"jF#JOdۥV;�;I GP}v܁lsrF\_7\ӿueڻ[�yg�5[0?JRa~Q˓]u%L1y:r ]-uęǦlth$xeqp^X?r= bWAS'#iEuC�8&lMB@ kqCK"�Tj}.C\!¾ɇ'Nj<>śhcutwRIv9, !nl_5|S'ON϶:Dߊܺ77FC"B[~CI)9șLHAhOq4L<JH˖FQ h8FM@ QDZAom~tɹm^BJ Konc>UҪY$FaA!Nh,p{7{/n޼܏GB\Qgks*;~v񱉰 #9'[W]_ jQ]0�P9(@Pdh4�$HbMRr g?|b|bdݹ޻uxg�2Qj g#e"e$N 1�Okeg3zK2"aPtR&PQ/?1OX_}ׯZm0>+!DѤ�)I&^2YE?o4~ߊ[q_{osuqZ"Q@k"$6>}G9lI"!h5Wc *B,Y5 Ih#lrÅcc 'va2s{F0H#<@JO> 0ke (*3Zvq,޽#A@��&! !,dyODrEʓb7I$ɏ>1`3h:8[Qw#ڌGYFO9; яllѱ};3ͅ~یqwcz8Eʱ*RՍowf-q$Gdsu8X?Hҵ^;%Wɒwƾv4h$xui8Gț4yAHR&�S[ ]gU8<*O2B>><A{`l1=5jFҌ$)pח[m&SAÙ~V | ^*ikMʹ&pmyیT6yOP{UAaCLϵ&gc0 h$G,hRuT29Bt|[?ZQ֞`MKQa`B,YKjʱ `wI}uøѣG0R&I2 AH )$ "A(H9")1 !H $ &lBL"mlv0hfu7Ƌz͍h%Zfk,D P ʒRv &wg%%\>NŏiۼTF8;o/@^DI{vh|#Ip(cm=ԡ~>9'D-XK+6P%nk~9{.-KHu\A�@@!ʋ߽7W ;S';s?3D1b $BϜfjwjC-� /H$Myu7^{; sAA*ּ8)`ٳS꓄bIBY#Dƈl5;vgj@F  A3K@B0IBtN<�pT&T.' JmgŖW斁c%WUMOeJJQdݝ`3ak^ XD89ې .>D9̻Gn2opm-ՀuHA{uSINo5N$Qa!ĵwWoGM*9�5HGB&�a|* mǣO} ca=a.5Hp"\tf+LX[FC} !aDL~/mI"xFyWv5Dg}AalmF^m|᳝ � lɠn%d*bdgZ2!B{,Lq$$.R!g�!Pgr=bs~+@_{Mљ IfQ O.Aȍ^ GC67+V=e>>Bԫ[f9/}CH)|(C*vILn"%[ t#oW ڇqpWY=B:)׍��lKHR~ \f'gƧ_"ҫEW^e2+C<.q�~4}Oʍlí$IW97<hwa?c4آڣ^#6["lh$G#]lr,Bs CBƓh"2vj�+&M' ҠˇGj@`R9f h$&I?ʔ̯v~FS$"<d}ʱf D#!A\ !NZ~kH.pOlT(k8 H(e&sFZ|(yB�$jHHA�DC0c"1 1@BJ%$P"(%xŽzڷo_yލK(۝T# D �1LVF � #Ƹo_ІY1% JΗ$ f!cl6{[;L~~gNQ $�$Àk5ؿ8.%9*k @V䛯|W_޻Ѡ5=3q}ұ'79ݐɨ )!A@ `>�7,L k; k],+ )Y)eAꌵ:AՁ&/h[س:O�86ʱHYgAU8_y{3sM՛kXr )1P_|8m/0sf;ۦ98Q�O32t_8xN`yyUeXt0jf;o<٦h$֓f"]uЩQ;̇QׂuTwu";zGuwR0%sQ36v7w# lB~�h6~7s ޱ\?0pQ̄rBr.B&!?|9\ZQШlmD$3T8Z9 =.BܨBhD[Q4y6D`[u#'7,`'R~\Sрz8^+[c%8ZN @")OI9Qt5nGJ}I(yF5B[J$Tk"XA?6T@ۙXWX a?#jC\E}]X,,a#x 8+.?im � gwǂa=ez)$!啷*fFےDٕ+G(T؝kh$Ja+ p]``Fr66l9mgGpi:ˌΜ$PF̤+vaߞ#?;256 % %Ig8!/5yfr]$>" ً<AA4\l�(%ٻ /6eB#8H&uhG`nҵ!" aG=>OިZ<A=F$z|gQަ_9UE+@;cLK8J(H܆B|۠m'"VXS6c dΗD(IJ1C3=23R'V~#NfX)rѕ!R`Ib\^z PSJ b"GSSSB4A~Cb( DLd$ (@  H($l=aBK0[Sa2\Y_jwZcK1  !DqB4$A!�DB$(?ZVf1;gColHGa g03@ޟ�Q�Yk# 9 FZ^Mﳗl @�B;h""QQ,N8=jL"+z㫹sF'es<F8ɘH !`f# EnhP#Zү"W^f �L,%rD"��_ܽpaue$ƦDLi " ꭵW O#"eD(8& f3BA*bGt2 NjNw=𶲿�_~ewRq,{_| y++7<Q &U}6. vm!${jO,-|jo30Mt_skKG!\ux+q!g!C[,={`$cT=9NlG-Ļ\C*Jt`b9aûjPLݯ򇶝~ǤgB`6 f~!KI<F zt$#j.(VvR#:7zsaWP^(I. C;A^(f?P!z=yChK5-C fڎf4Z;( #/�zI/qԫAp}<'\@�`7 dIf/6|@+Xg{]_<mdKմsr=;uӟ7'ꨌ"*BH-Q/3cmsI2&3Bc$on! QfE6K1R D#�5<\ٖ+r~k<^}tM )qvO{aݎYbJE\4ыCl`ްS~VLc)GpI}(W)G15{V/@7ذ+*U;uy*`r754cscU,5I6@2)GۊPI^m^s˃`QvIH"\\�DD(d(Iw"�@(\�dA�*q#%@ �8}=1錷F0 A4%$�A"��  D�zJ�cADmQgN}P t%�*yբ"7Sf9'~{eo4A$l@��Q<z8txf|%P Trfw㮇MU""�[:Av.|fN{УwMiW&B,�H$\].qfwC`0tҜ*@*؃ DJhdIYD$I$I(0 F#Re�J|;jyxzSfWvߜc\ñC^k{m^k{m^k{mصmdn '@mBQ�@�DD@RHb)A{68ܘtN\ν\;l8J P4aBHI $eUGp;[ n5s!$ hEfwݛP-,Oq�R;Bä97J D�jぅcOn߸~ E$D{{vn=t'뛃$5g0d !E|;!FQ85F#fU% G,4ŝ TEPjS-&+f:8 }8"z,! W I?]uStY̕u>=!CbXYNTOn%sz^΂~*jm�̪6fF5C&%m  :Av@ud8n/^`oΕGjO7z!z2eH1W a5핛^Yᝎ5ױWV*rcl ]btʹ:Y6W ;Ҍ զBf)B od΀`Nq0T$0F6۠!J& 8r+dNX ޚÖ(# JiIm@!BXL^jҨs:Z l[nh,0T(a);H� F�BKZ@FYzO@t y}i! BTn{!02F*eG~Ö",E`_-X/P52v$#T+⩠I@CkjˎPB,[NK 9 1r JY搩FY57\9d+;[qܖ@rgE&PWzTl3eǁV/&F �(!Dgv؞c6vRv$4z3{ |%<v K f=%ʊ>u|?Gh19"rB`'B,OFdE?Q HE_'h+G!|2b}O#L9<!4~΍+Gh>hSeIY%yy;'-| !'E t8vM_26{Gg)G/}&lGs$`xRLaN91Ü+(Vk(Gnl@ȴnۂrԩ5ArOydr/BFk`_I]_rtEF|2=Wb!lؑRA$s( "qOr+@hNP(LZpTc<'Ν~xa|N pmcOz$Mxfn 㤇0B!H$$ �&ﵽ@� )eD 0k˯r Pƴ8�$e:wxj^f3x#OxgN=4=iC!>ΣwI�JbƠ?" Oy""$ U 8~0DQd͛C&FlA$'c۸ʔbcؽ" #dodրbLi.u,<0 pѬ|�cm&6.51G [xe'h0[Qac#h?(E -px7p` \DBDgN9@AB1g;CI VIZy_`Y'. vVyb]veد+m #lTg!JM洅3THʇVW Ĺ !p^Ur"߬.eI?]Ȁ˾vNn*;/mTJH&j`*C8 !ڲB X+Rvk.yRmb޼-XzRX�KB9De(<!6 >g!%(ap3㽨˺7r.7mU`Sȣ XqX`Ź$^Fه(#Ėc.eFԿ)ndhCyrN_sW\gdqLC3n! s\w␜O 0O6B`qG٘鷓C쬽S$=X48Ƚ2cHWh:yX)<p|_GEXcWPĵ|�`賭�qW>n%;??sXt) H.pD_'2D_ r,E *HFz#[&e#_# "H\9B#oA)F*o"adN G9IqX0eGo0e%! `-]}C٣C=)!G apӚo;Q<\�F0-&MH$L@ JDR3>)D*;t%1aRӄzI_ET ,z� DZ @"$IQ<??ql؀4+Np)S"N4ӥ +ҿj+/Bbjw©ɩNxϑUrw^  pyixڅ wV#v^^ hGO[/у:Y3*.e"e!s=9@%% "H*q8)\|&gր6C ^uES7rSlke|_Ɲ.[V[@7 rh;k{I/pSݶv68.!(,U4̢<�qIEvpZ,Ķy3%IǨ3<iM�zY"nm|,,x ?/ϟ'AzVnzW;Kki3KmP ,fly9bOAt•BHm|k٦!Q,ly6޽7Ѻ{rk{FB!泶Fa .[K?mТOwޞ66J�71gG�-l)vQ&oRWkﯻ˓ Zδ|<Wj g eۻÝ�}v�!9PB7C� OF4D1G)l!AHC6'>> zUҠ2 >s`QvL4:-&Z5ZS,i!SoMeBud�p!)Er3fv@�y;`Yq! ږQℹ=|"s?cE`#|[l#+?>0F2*;K pFދ ~׃͑!Θ ɻQU<e猽%:?|~l6z>8]7 r4Z3гox,,9rrQ([S}mEhlVl)GS_19nT\ r; w@% =As`=A%u3PYp/NdZv )fyP zfNwΕ< @^H> @(@8LB2RnS {_ڡ2<~rQp<A{P R BJ<AF+<Œ*&1lcFkhyǤ)bQv˺m<5Y{6�:}liƬ$$hzíA?dPSG=($RB0DA$%C!ecB5\ͽLKQDR&�2Da՘dlN{뷯A* @B�<J $ B7>tƚ`GԘ$>X^n "pSk<h)�Dlq4 t)Ovࡸ)ekK8hkI_�Ne"F) z ̚tu0;A.X/kdVU c^mS5_3Eh3O2gQ`]2n\sߠ^w&xb# os$�s r` l}Imav!g H(yU堵/6<#Pax᝻CH16@X*UP{ Ü7|+'$GS6PEl0AW]j,�ǼjBEr3 !u3 "l0ic 5"jr8"s3^*^1nsCH0)F!]Y s^xGCVu8KpDL-9jТk>z7pP>B֤uAQV<bsv/*U^l>Thcjlyē!TԇҠ5(BH{cTq$/ByTm+BHFH+mїRT5D_- <r@A*l#\ȋ>Z,ǮQ<G?`` 71ΈC!B 3J*Ɂ=~}墬\9 �ׁDeB1BAH]A$،v~N60/&:_!PG/6[<r~\hyX r9S$39�yEJ\]# pw� ȶ!ꮄ遾Uv$hQN86N5;cm4F[(NLHbJ(@4!Bv);top#?;&IB$ l4$CXȱ(d `"|>MW`!@xs|ƇF>Gst ]Սޔq;lf}x�>'3\#m6qq(FAmm6*\,@[ڋ�0^k{m^k{m^k{m7"�!$ \L0Hhco6X{&<܁}g'. ޺kNgBD#H agvkibQ4 l6[IIǒdtVWn:{yh�@� ?$*ȃti*�(�@13 52 Q m,qkY5~ B(I`52A~ͳhB/bջ0|SYG; ')˳I`#]T<Q̦GbU@{tVEGe+SY;K+#U m߁�!EA(C<eIS hSFYH(G8xB J2M'Ի57|@4k(k { l ! AaoFr3W%.rI0 7klxg̯jdf qσ"x )mE5֦4�vo=Q;9@(Z؛>eGHǙ(1`nGh .<!(iFSLיhfMayЮp4G0ѧ2)( 6< dsYQ8B@#$CEB, d�Ĉx. @BP]RZBa̞&}-d-.ϜfZ܊S(3QU[#`%6W~M2'PIm<@fű<|662ɀ fmeqs,SذL 숁+Gs5ZAu58\]m#Il !Oϰa ̴3�<;_qFeBA15 <A5y(7H&KL#cvTs p~}C&:2�j6@i1BU㡰44V +fyr=Akښ+:\ѧ<)^!%l�l`+G2$F+C81O[ ?+TpQw !Wv{m{D ];wc{ lf?�ѧDb%,(Z!G EdQ%,�++ 2( "1|՟ #(G'CH'?(*7];9+B~K<c)VVIO`96l-@vEHT lG٨�[n�Ir"$B""IKe@()~ԑg|O>SDc `4h" )E�o kYH h'2Aah6Gƥ};�P&DH k_ddYI ��1 @l-nc( c��BҧL(c�h4V~(H3KM z o-gbV,# J@;*1 Sl<yr'n}ZXjG|@Ow'UK+x`Pȗ5/. nJ16lE.l4h7nD)Bи@v7bef ,`EctU1O.d@k'-wrik;EGmC<չ8 ؤ6&9_먓v0`6 σR{1gG; Brŝr忠&B3k DGWw!z yBULQ2p6]T`T/eÕJ0.,*|,̏~W"n!p BJfu$Els{WArM  qx9TP-Tk{Yn瀭 ^+l,xHmsHOLL �H+Y>eG8)8 59BlA@^X!O2G'S4q}9(TxbfPү\r9f?wax[b\F=rDX |k 4[/) s•#hq!̓)*K@TynW9ښm>[,G!G+W`>dc};?PG*G~ #[c{D)P#�ؘ<&ragA_D(Gq~mg9nkzrn>Q1B|ctkyFv9$V~[ʅlgGc<aR`!+,yOM@pZr̽^m"6 cny?;rj h6T, AZ!Z� HD )$$۝lgnvL G^?ƔR@ ;)₰ ){%/80lh'#D!PH8J} !Hq,ćU8I»'&Cu�RAQLW.m]|on4jZp{$>o{R:d(yDֆ&H$2c"(0 ;r*)6-嘷b-Xw6MwLG`>k{A-Tܵde^NUA 5 {7N]ǧQmHЋ܍/o:@fM�ɥXg0[h;<ͭP{ M Gkm/ �"DV8Bq' $G{ڸk{ h3Xk{kn|@uV2x;_Tes lS+;ek{!VE w6gonrW;S0 n|Eެz$_ 6Br=LâHQ^\+v!  !Ż@L!(FP0{E0LJB+Maw{+9WD2XKA>``*![#!JR U_mX7!)9ASczYԏI-R9#zeڢDʎ2b,eGzhMc,۪n4†e$[ۗ3 @F27 fٻ@"l `fJ.wc~q!vOw~hTإP` l3ηej{=Aac$}p(#H\tH6/Or'U;sB#OA)ģ!껴`TO=)u5R9<S&Z,v'{ nT!ÃmA96`#Yt[jFE_=O<$[5[y1W�r,r)rO*|TӠ-].x!\0+xj\K1LJ[TdqEG1䮝_GHTy;?r�)?B$1;߉x¤~ ZQʑo728eB Ɗs[9Xe$p֒Zq쇿C%F "s7050; iw45B�$ HBAw5}l'G瞞S'zjduorDbS`Q RD~1AR@@I%ID$A 0v< o|śWz� =O;5��� AGj } @bF�$ǰlC"R6 fF #-DALp8`4I)3Buɍ/Ʋ/ 2&�[ VkPK cѾE_9nY ]Ҹ's܅v^}f^vak!ٯv�W<cCy;f- ChwY o,khr ܷ!g!C[Vw<,lCnTKk!)k!72p' !(3k{s6 U\ޑxyqQ!j`|A1/�  6,Nԙe>[ab*\nʮPzGG:nQ`GoWB }-\وX4y]=4NԀ(\䕸N!l@'-Cahks̡l�I! P5M!\cU+λLd߆w1rr@�ã&PmeWdyQvܡT@nH :~g .C" U9AR [!ŶDB汏^("!![َOjRj _Z#vbC_]dT�SsT%�œ)Ϩ*T󾸢֤+2!>Z}clZݎr4*蛋&z},e#$QWpy4r/p \9Μ"ч+UOMxXm[Գ9B F ~Xs}^КMs7 ̉!,Lh3g&W:Lf"įm+B9֋7V!JtkKpvvVJ)tYPA`w !Mh)H?�0.,!B"bB?8>77h6$N 0AP�BRREQj\>|^8aEﲵ.NE@D %@0D! ∢! f{fvjvx33nd"Y..pH%DUgYo" I$ڂ+WѨlNJ � ]A@B)|d$Artxߒquf ls~.m^k{m^k{m^ڈHo4;4?&$f?$� (hƭGyl{s7^Xoζ0ݤ-% Z �vk),|K#luv<ݹѻqecش*g%?|^PM+>%+ >d44 Kf"BiH$j F E `y*[ciW&BI,8 ]Ë=?䵚9-N!&{M+_Q{c.˯׵+U>̦^CR9�{қM =.o@yq\tIյ2(Ѣ#z*FJٛTMebXYi"x n<Iz;Tb-'I꼿 iQ_3$x6BL .J1UnN2v؟-9`43Y% Tr]r]�w28f%x_3恷Xq'C)e' jh5 !b=/Ad.9*rͮkF<ϊ9w"5zG%O hoB�FtDp7C/&v/M^ڗW2r8B[>` ,V�[[=j(0#NgH !`bƴBTQv5j^4 >]ϕ#De[nbCȾ@I(,r#7#S9! !Ɗc-Y7npl(!F-#1=dbLeNk1m 1sUuq}vN8-%U-/@(Gkކd;E8Sv9;߸9hFGVJY) Dj!;oth0wQqPf" BhQm;-d?<4BN5r>B ?B!ĥk H!7-DUT$"\*OZ0#'h+G`c�N`•wk']y\0OX97ʯ)ȩL<)}^ga#o&\gA`r gېGA賔m痋>$m[dIqgUg/yT|ռy sXٜY"A$%/(#{PGc$#xb{M7y Xv~~^W cXѺz#+6B,s |* BDd^C^쪽?# ng4`̶HsI5Y>HiVBeRdH�AGIIcN=?}omlEh+#@M`I^ 轶_I�56vgәqw޸[룾LQtX|i] gڷ}ɚ`Qhkk;[DR(&P�va`HNkDQ4aE)8v6>=VHYݐ2&%55k,34m3+ӶLϐMVFf +,-fh׾17.u,<Nj9,!scX^4ٷpɯ |puaWvJGemIacT�%bJb{ 鿟dΑJ�wK!lYXG9fvf~Ejz܃#x2`geW~T 0Z_Iŝ .|3!Wj"9̮p[6s6>&R9Bᆽ&" 0|.`5s/;'7 %v퀄c](vdTD! *^#^s `].yRmb\?Bj1P`1gC.GHMO',sd+RvjRDYn:ߵⰤSl*RvXa:~L,m,\@cCH~|qI(;uF٪dX@6_9G!,DGzΚ(ג<5~"ę BXw+>bWv!<ۗ3|]"đM΢{l @S$2"W9Z"VzP^?<_`ṛr, /p^@pt>�O@v~Ǜ//rC_77KEOЯ߭UbT8bDr-}fPpc'} 4,^,W\ηb/đW<1gݽ^[(cK Rnت^(G3!!y]eGy`<R꫍iA60||Qei0Sf�@(�!@@�!�H )!X 86ӚlZ@(A& dDR&Bv}%/]WK@sJDx% h8@x`~ @K&*sF%QC6ڵ[o޽wo+ aS\G NřRw˽ uS&G:F`*(&VJJ@{r̛@vt׶Qb^>5wS~uE{Eoam7E}6W|8M.$!ǝ- k?\!|SEåFcT"Bkk3vrc@n-V§.({ƺH؜f-eE~O+SKS~n ^7<ʁb$I()L!Y–)e}Fg;wWBH1^^gRw_:xXn�w7~e߈{%/'N壼+X8q 7AGR%3}}Dx$oGOdmv^rU!Йo+GmgkIr2scc'�ULʮRyX'Y:ʱ*v ;#TɮJ{%eމLb;lw|Ƽp=)=nn4ݨ<B5#<K<Fv=rÌG 6JA^He=,m/&J&ؙ؎0_fW>gZK˃B%>;$D�y'Goߧ?PO/J`$gnDl5 ce_w�DP.p\ e~{S%v﫲3)z:Id)4|fw@rAѯ.El"bqqEQ 8I2-i#@Rt�DBL3m�PR55j5vuxrj398vQF�Q;^^#@ ,L oo]xCf08 �* !RF>ƞ Ε^@+]G( ޽k hA3!?�4&h4p%;DQN~$4dƔQrjuЕҫ^͜"ՀދYGN\+:W4]6T6Hyk�JS]3L� rCk2] jg'P F^X[`�U@*46� !6L^N BLlѹA; U>8 ̨%EktТ@AHI 0L 2xmk2Üg�`rqH%Wc4[1$L&` ߛO(#\5-x[Ӹ,DG !hTFl0w=/$hQf pyl(Qfb J_hljm`C>֑~- F( M,i #[)GE*@nlZ8F-lxQCb hE11k#|\0oqeCLz3`!\?瘜."+ 7aPCr!JAV#n!>1%F@aú2!!1p 9n`CyBT& }7X΃L·<=P1 yȵ;ۛ |&a{_o@R01v}Y+!ܓr$,AHUC#~t4k'qa'U!x0P!Bx7]ls/CȁѧW^ygUJEE_N9S>ѧ{mV D_-R`KG9ص<AG+G~ m)'~H�'A#= =QZ9Y+Gg}O)n[r[%xEt͑ ,P72AbA8aҏ3Uڷ7њk@$%BlGqlAH'CH'"LYv~$LY-(B\O0 (!p߂bA$66Ϙ3}/Q`Z/4 F!GQDZޤHZd � @B%@!P$9`0&'…Xk(ar+KVzݕQ2596nc�HJ^Y#4� @@QL3GwnvL1P6!1[ߞN:%1n8Ǡ"~{:k-wwj?I:A AH(q"d-f?B@D�D$X&2F.I[!x �(q0"{m^koݿb^k{mڏIy:%��i!4Ngw)�" @$2c 0DQ[X8֘;~Gn^GnGqJ;MrྲྀFYuM�Q@$a[FŻ3cSh4~CpȅY5K.a.:Fd۩/-n\1 l @@ @ǫ_}MBAH)( )Fםm gwYg,RJ+a%{zď/LSJ2(̌ [8/{TJH g&[f֫غ9lY1MKQ]دD8)+-≀r窛ZE묝T_BAX⛉lY! 9Zw.iBr$�$7 A r 1#T6CZ۫?[+7SYh^ job)d؊fg?4_VL#Fnd2xȭ3ض:ʽ>߫U@U@�"EP 2-f鈞?c33ŴFRkZHRp7By]5?̵2s λg}re~o4XhP[]P&X dS l8*cM}K ĭxp l w<"z5"@25-!l=7 Ʒz *Clӝ'絨׭tN̫ӭOxm1 K7؏Eޱ�lW/X#BEdlc([oqNXR(\]B=ΎlG@OV�9>d, !vupwݧ ѝ 7-*N۲/TvP.sr9v똿dá!4'zye+ r'%Sq `go!Ӽ > T-*zK}.]*7-&½ g"k)Bs;쮗޷M' b:8;lq<� B Bb+rȞb;l4g0h�1R'5K"Aө!BL!$qls̱>'{KbkH8o GH0nW؃_#xWF}]G6D "A9HPtQ]R g�֘�u'F 90(<)P{Pl(AvKs`GMs1`>(˓Seϩ8f:P61< M썡>dũςG? 2s|aT#D S>!Te_,1X$�$<pH0@H$:;=;ȡ跈sF}9ȶb=%Dc|DHްOt:n7M>#%l?� | 9QTQ#L=:]7l:]gcsO<඙Ŕ԰?\6GXg۶ʏYɧ~ǀc|VQ!r (I1MS[3 g7f?͆Ri Hkn/md:I[$iQR|C| Β{\{$IT)5fF|+𤵉tW#㯻WdP-qR1 ß{ ,=;!ΧABH,@6M,ؓ] p䔫V@THN_Bx畘ƈZB.Og|>BY!׼pzg<b k{-`60<!D=D"+h&.)piXFy)d` c<'!wy PA9} 'ƕ6kb2LbMQ G61a~_|*;js0&;9@!GY6(wG}ީe6§bήxp?Ωy6>1h$cE9@y)琺.tqZg8ib1gIk9FO}}+n 99=�r9Pst}d Zo-Բ9c l)5ĠEC$& ].8=*z"Z˗ξDD|@&B?(Vt>[.>pv%"A> &C48|TILpz[2nQDvꋘT0&ȒP!DH8C}svYVG9`7: R Q\EZ9FO~E"'=8)E:G! R_ R_`v e1z~9HXjRԸDT\MC)tX$X IF}}3 >`RHsΏ#k^ r$ .NGo4\puQDrsz({<UCB绶cBDqrtSl�60z2XlBv zh�"`ɔ[x!}Nd<:YnmFm6 E! QDDcMC±R$=q Fɠtfnwh{T{nnWY]5\\t7jiM *oIH!}u@#R+Mzӛ}ګ?M�&?x6 sGd5jE,a4 ze#ĩVK*kDdO89dr*Qx,?!I|}>D=h_*}i؊sQ�D4Y<n|$*;G rSFm0NF_!^UDlB`[h\֐ *qµ#ȅl09ɗP@<8y$k^+L6+D n+�l̍ehNlJ9l&_Fˏl|@V2x3{L& Ml6_xMf3}M-nip:M#V}lJ.H0AШ,W(@׻-<#ej/L,?<&C>".Ҡ!B6BX< F <G2<O!u|KIl '=A}ݽ"YE@#. r^�BHDKp-LR OCG&MO#/KXXvB"Gp@pIq�neHЈ*wvqXȡq!_b@N8;~oړM =+WAHf@"YH ;;$`[X:;ig ! 8; .kd6v*%P-;=@/p-jLJE< �SLpsc")tǙCaCH.0xy"0wP!yI_tu2)d>w!b%7Jc !9!z#)Svʝ#ZbtDEaT|bgO8q%ֹĜ#a.B}̳E"Wzͧ>y c�]K s.9VG#`YFq'R"GpNHqx}$H0{# c g !@}_)6DH<4* -l{~blLy?ƧiҸs Ҥ9ULWWf `.*S+` H~Vuv,W@&~"A<`{1sv 'ۿ|Xݾ�FeF dYJz8#PJTJ@zo[m۟Ï<u`ֳ֢>mj5h]❲Uzz<�H$Ifgg7S^~x<L(S۲U}.X4v#"Hƙa} no}HUt(t�&f4]>MdZǐYP[WJ)v5p~03@*A�}�:Wx 5.0WD2𤞭Lq95fLRkk ԧK{_`7{5?`^+ǹJ𜶕G&{&BBNG`9`aye&P]2*2˯ۄf@ݰrSV y+6JQkEr7.ޑs6]"&_*+NX m^V1qO}a{ 7@]+r!6eX-^Cxr\֟cA2}6t5Zf~[>Br$) �Q~{hbys6U\Jh4e!n\߸__Eqҗ&ٸK"k{CDēKVJz'1WRyIL\B7,ʽxQN9j${ȼ qU!{4mT1Exp5wvƪ"Y`)"aE]*/}F"H"}AA_A:;l,x-p^$q)ƙÉOz7&7'Wyk(r(0H9D&ڸ) COgyn`Ch9I\Aw:__o|8;8 gpo�V/@ ,+nRPYS$%:Oz|ΧYƶb\a $ա� $H*F&A%! o# Hu�mCGD_ !%`T>1Gf¯? h+c 9)K}%/@`#B}B>vAWP8G֝#9J0rݏ!BMKL ǐ�R� ipm< Fw�>oDQ%:Js`{-$XE$hu?`Iq8R8G+�Q$䲶aڍhyId2e !/whTd|B@ 6܃$%I$S<DHsd:?H$X CEA #q�)(HqN$H'lRiJDx8Fx-"WHsl/5@s{ )bFD:L2 PPh0Ný'f/W?te}cH;8nwZiJ�8 ig"b^dQ{;ǼEpsCo@!:=*h�j 2DPI JQv4m\g{xݽH /l^{s >Š~&*C�Y`> ƣ|Ҁ1Xū,mi$8E3 s÷hE* (N50ju!(4I{vl0Սƹٙn `eZgDDfDDt0ӈV Pj95.fLR յ~D'U\ɉ1 ". 259!ê_&:y `U:DjWZ"zcv+o64�_{&BH$Ftr;Ӡ5KM|+^Oˋu}Gn#G<ΤajPsu F(ݽ;?Ӧ-ymoZ[!>5ra/9k ZD\o7؁]$8/dJ}Ov�72n49 8#9]OΎ8iܾKv zIgנ0Ea Ć׼�I @DEzH , \Ô &(&rlA⣮t0E z=ҫMenn-J* <*�%n<:_p7:_3W|~{':1 TF}5 RڼgWi~#C45]&#(qtfYg&"XlU$Xr#(/|JC!u= 0Dח:d9}}gگA\P㾦M\J@w5OX&?CYi9||BJUU3 RߣgA^!wfS7ͶL3d鎲 ZDL$I"Jʌ,,^D:3Ww&��4Ҡ@&` 3=LVC {tE=}K燃:#=I;ISMq,ւ|Zj T7Z1>}# Kc4 vs2UJ!jՂ+/\LMwffzݩ:RI�д.k]!޵!� P)H�T@iՍO\4[JujiʳZ"-`"@-Ѷٝ2BPTQ6x?OVJ;iTD@� H#)ЀHX݂ ]ڊ�>if]޽z_p#l2x3C&Y`WZՙl~R1w`م\'ׅ{ڢVJ3($+%Qk9+܄DbmЃ!F/eKU74r9W춒bf@g6qK/4 }D3T ^ vx.4A)^?o_9tT._浅oP d~}$m:_Ϫ] P7u0_^tHh+F?Lt o?3$Nx؃&]PtM',XRډe.i\x'G 'ݚQr`54ɆuÏZdϧU6〡DML KZ^:jtٓ^q3grS/o ukҘ)Qbt~D;_`@ R8ܒyEw}svpd_p.j{bKC �@8X'.C`EOF] I6 saWPR+kǽOYS?Wpg¡};SBOD},@gj ]9H^&&=N}DŽB懄ɜ*GC/c^'iR(g;̹yJ7A}QdV(U�!*MruxH1| 3<%r< \r#TBꁻ/Lpzn7 �Z,_-ۑv}c!F $r�Y6Ffy Gv<|߱-v477x۝4ii !A!"qjʏ؃j߸� r  A)L iܾ~ek߸z?3MEG\ OTj5jxo/_xqyW@m0_K|[xj<_5eFB*I(Ӄpc'RJβ2lbr1"R 5ϱ6m;c<šp|ID Fг8&Z61>;!S:_d߃w]0H`!l(NL›&e~ vW9BDSGNF7[&:&cĀ޳e=܉ �Bb 18܉(f!X\�~<Pu+r9Ƈf8t=zkpԂۢ|ŇX|7/ec`O>T MFv y|Kl@ɇWb&>B!įs_W>(8;oήs ^D#E"O.kiXb=pl Ay)>KFX_J)sv<E%B_PUC!΄*qv @TnqtH@.6sP к}o Hvr{ҁJU\3v Ba@dGpW(tcrȵ6NvQ:!D:%i0izr#KBDsHhK"wz9B`KGppAЎ+�5!D lcI[`$aHOI}\AUG. PAnP!Α]6y!¸rO'%M/T ggH9JBLh�l׺Hswe7` !zS0]dyu C؛}RK,(5yQV8W BH0t<IRFbhί??@4Wg䃈@9:_ 횭9* DҶ&= 2];G 9ZT(+'ms3wvd 2ub=оBq4)v7pF ?ZkFY_oyXЊb"P!T)hC;w,iMuaյx;k*JU!$|3*�4(lx['cA@' R+:kp$i+l.V� �"9C6~_bx6oU jţ%xa䉫/Np4_j5ЏWZPT`u2R �iffF)L@!e&Z!<.Up>]Ny:_<;LH&S|Zeb.KƁ`eQVMTlb*_)דޓr@<LX.6YiŴKex=68şUUrj`\L$3\- `Zza<Dݔ"%Y8�3dP>^p  7�c&XxCl L0"a0<,YN֡� 1fGSmǶ$<gZRs9 `rus!` AjI/<瞔'޽7j"[LbHdIf- !` H`.9d%6"k&8pxD`L CB"S 2>@Q?luv t O $l\{s3* �BzF}2S>;HM» !S!l <DD1ȴ\ !vS' "Cbr'81K K,CI N8TT O$[bNx/'c" G҂Ę u>HgP!t>Q@>+a0r<{0P *s-1�hYI}&xaH'PD@1ǂwvq "AKBQaTBb =l ԁ-j")BޔaT$\"GQ##=S * ruqa&S(q7sNݫݢs  -~_$cΑJAnB's,|ھ64Xx${e$?tAY1uԇ Yp%c:_wXtԍX׈ / Gd)B:W #A①@5F:>$dFFP RB"A{rƱ$dҌ"#D<5C8GIDο[(PGy365'<΂-[,͔Jސ x+ !Tݞj hY&%�5!J�R87*ۉ>}??vSqWn,_|mzSV_�DDPH\V.vgRi;vPϟN~g/6ػ�Y6~냍u(� ͕@*…NzrSJQ!*B Mk.aR*˲-w���IDAT~9(T"�6Nכ.q@.!f`:9.~V)Q6$bz$^Xt! <UjϿQ|]np..]\'%6\jH={=%bdJM ߆rLk00B'b"h|rLp},ʓP%; ;n&Al%B|y!P`äDmg$EW"/z*oaq~7KJVm|K.J{)u (x` {1=/M}<APhwrl0xܦ">6 Ć2N<gDZr|6Rz1S@p@Xbك989cy =l+R Bow9Akb1g^%6XPb#�!a !Xx%ˢB;B0D2 ĆHJ!"ė5!6젏@[!fCMAF*!_F0.>ZXlG  pˡ{yBIergg#7_>!wDH _Ky1D%hU|!2Y`!ܫR!Tx +H*@V ,*GHL$GBB$rgB<�!r2P)B|#xǩ�q㨈 q@0jJ"9s1Q;�WK/)H2p1G67j !osP MT63dGc4sS%'A.j/Q_i$QwI yWy!FqĂR_8H�<p;! < R ) :II)? cm$ȝ)#A߃, .�Ćv(X=QA|B ["G@bk8'-no4�ij"zxIzZIg~w]]z.tesIgu#b>A}m*obDkI^wrz̉[D'ڽP/i!`6ڼC:#AL1:�cq]=|j>Q]jB,LND@H)l[?fVmlcJZm==!]#<q 5�Po g%=XR]i-ۑ^,aj\1Mչt6&c]>.R~`nq_GM1m4 aZqvyGW5&x֊Fe<m@'OIsɂC4@ M�t{/Ë;!.uf(*b0~8_d]mgDna, tq*|'+|=6xR'�(7 _n& .Fpvb$%rh(nɝ8?gBRKox !D"P'CK^pX>AngQd V'XjT BHj4x O4UUɦ\!D&#~ZM8!cC"HI&+w nCDC[% NO$*B,'-B#]D4!B [ CeĻ69F}Cx(Pa3Ǵ_A.쿗B7,Q h֛b98vcL_0 ǹ{Y.©PjB%9l^{G}sQ_%!$|!8*./QB]QTy<6;> .ΉRfErwxxt v>ci/Oj2%.Iy z\$]T8vn[V$yS盀d޽a)Mi? 5FD%�*xUMq}fǞg=NgFCZ]ٸvs L V 2a^*?y/z _8V5;R +īW/߸ym8iUzn!4Sq?8n[>?ykq3ٖRx-(oo?'kڝN `8rT$R b|Ez͉ /9-- o]ëR R|b!nV{*/gz3[O#&x%s؏;:)ܰ~4]5T1Gbd ް`n2>]֪ѽt_tzI&Um.vAG󏢉oPG ܄P4ُZ-ſ9!B@e5"cE .n\~$ýUm\G`ya&ҾDoTֽ.oJU\襲߱?L5^/,B{QIGuԘAVKD}( E3u.{D7=oѲqm_Af%&r5Urvhhoh wwu,$a#o7>ID6!Fe cMt2y$%VWf=p7dIcL Uu79oW$d_1㏪ !Q|(ydNl?nԝ&{'^ml򙰴ohit:V+M|0G0 �%\ Ԅ #FI�Ri$Zgz>a:}3~CO<􀖖6 XLkDJP|d*oQq0tf~fTgm<g}?DF�.; _C[`vvW67W^g>MJ) L7 +�R*M]Ԥfs?1*T1�Db.gQT}xzkĒϲm4 ܹ7;w[,wbۿ <G4AMjy#lda;yv1ή0A.Fv(uZvOJ,xk{cs!^l@Yap{ʥcY !/@&^|g=pPg6p;썐(Aqzyscޑe\+7KQ6z<̀R ޟsفg} L&{<h_>1k|okN!|YFSgAeNk߉9i˓Qy[u!!TI;;<K XdZgϩq5l1p g�N>?CN�QkC%֬nJg @@vraL ;;d iGH2t 0 d*>t>#;Z*١�Xy rg|�]i  Ȝ8`FQi ɕfg]FJN@! ƍpC{Iq7`s䨐g gAH0Tw|)y96q(S89 $R$S < jΑ+q$qeH0{Pq`S9AU/|"\o3r@r\ZBx$7F]9zǃ/wNkV L&l ,W{"% ̶c)#0-m"rol_EEmTDh482 �v33Ӏ Y &Vgc�$i[j<677ljjL&ǯ]:}k([@MH~EÍyonR;SnYAvqzes!}d9�@@l>\˔;|rOukzquZ$I0Ct4H Q$Uw-fPl4 Ŝ/i01z rUy}/##)? eʞkl1^, $^.�XxLzE\W\v* >n (n48,Fᵽ\_Sl5A cx=k!ڑ !uunT ~5:h)AɈl]`uT/<wr?D Sjn=3.ջ{�xr7l Ba㨖9;z&x3ߪU:kdhPQ+q`2h5cJ:8CHA'q=&7﫧(&�=E9or?kXyVFrtCUÚs +HMi7L?R⣫A 'lFd>҅*.2uW:wi#*ҙ`CLSH$[ \dBΏD ٠1] Zg ulh=POw9I(- f}-aX26׏ĄT4!ο߯HФ6fyH5pL5yWEj9�+%:L#$W~I`2gwgdB8Gw`B~ƀw߫`6^1{ J,t2-uCDDD&@@D; x ß�FiKeRTg A3qI:kb;ݛӝN{3Kn^:s[eb�*ߪѷOpÁL?W@)z3i^i^9M5NgL/a' ��\<8yV`yv? )D�0&1�"dh0I$rPb,Ƨ4U`_tr*<i�QD+W2H+u앭r-pJVѭRIny? ēȈlP;[t:9$n> dBl=l&0\z+5Of1Wv9W(ϼw gWnGrTٵ&H +n-_CxȚm*@ڄ䦦̟7rWoh@ JZl�{Uɂ 1 5#4  @,Cޅw~`Ƕv/pҭ v'@ jw�~ZJ�#@k6%xO\+QCg%nB~ [ Sx,Y4/c1'C>ͻvO[:;/ &DG !)XT2<E!Gw/*7쀿:@ @ e*sp3D_ycpsBy&�B L`!bwyM>AY!Gz0Bh9I\Q]G:;�s Ӑ�=`e8g!_ΗRPY|E$Vjx:bvO5!t瑶@^J^$CeA'4 B<-]x(B,[@%HauH0H0*#A)$ZJDcsV}ɧ8=InqH9$!LD"H h"Y)1$@3Ab7#9 H0etNߐ#4!B}DGIw [>C  ")1d�R8G+�Q$se|-LC)ֳT8G�| ! D $؅$L"99CHsd:?H$X CEA *M0gAR']db_,yU͙Eɧ,s`v8VxӨ Bs3�|&$24! B�DJgR�(�ƣt[\әRSsp`4V-Ta"@"oe7}*w?-,_&I#lIĜ21M[h^͵ gS)U\/{mQ2@@M0_u�n'IST�x(B7uab{;'�TZ`RѰh|NT"2 M@T$z\A!MG̩tS-^]e1ZB<DVtE7!D?9jCj+Xl}aϕOc2C^!| g"+ X2 vlGsVAU!Q.cV."}\m+!#ˑl%KSM Cn*an=<6_޿Sv}<:s^�ߙh" J ybU2_I6_u<I+߱gx*xҬ7 ˝]l2afA{@$ $_x^G؟cs đ Vܿ7C^7z4XAH4A8*E7荙|:Ŀי &LnJo/jңqgg>Qy̮Lscō 9<Dzp!eJ@SEa�Bgg~)Bb#G"%VP*JAa$�wsMx&9GЌwrµ)#h�"C/FpYX׬5&_Qһ UFިxr`nΑ@?HTT魒BH&s-rnuLαE YK3# Ic.DVSiFY ,_DE86OU?�)$?.Mi(EH�4fZ'4"Ȕhu:;vΏWn ,J:ALTi $h뙛ݬ>yx7^7jʛW6:{-؏cDF �Zlg=tʏel\70DZg�( 4e 3XZү|.>qs4i{ITJ��"! BNp�2_yXf IT~h8GZ�*zV Qa4w>@跊S\7+"wmLLdnƂXǠiE)/7%¢L ;qoOiDfPIxsqmZ?T3MpǸ�wmManyW`nDe!QbgW*alv/a9Q77LI9rx(Jp'n\٬CO;y󲶨6 F׳a!7&*^ Q`p #Ĩ/p gW>!1KXz޻Ye/duadMi5UIxבe>p' )f�<V� r}Sh~Xx!Sĝ/n&3䌦y[ai!yiUk)&/l'HR\9|̋ c&Gz[#Y쭻ŝ|S2gDs�Dd8B tΎqDlQ_pu}Yyogqv{LE<D~_iOOF] P9;Aq#@(Y a Fmw@%&w'=S9*5>Fd#X4+9R=C uO}qKR_xqqT u>܅i A2e`G*Fc7) mjw/WQ*BܭU2}I YsIX %doeҶR} \1҉ܧ|f |*יi˔voMIW{x¾S�`I� @$@ @RPR3 y Fhm&=GGǞ3'͕kJƭV0KMӼY{o`!$Œ +  L%4{s_y˫3]//0s{oڒ UhI,IP<Ԉ^1ՙgN=ts TF`D*~ O*ȗ `<ңh4Gʧ sBbD_bv ?G [g@lQlӬ\c<<U~!U=K}v-}U Yi.{0=[0')&^5{~b*d#BBC]dSUMK+$:Bwx Ā@.W %(CpWcL#@ƿ À&iȑ_=E+-+r\}`d_}yY)#, DvpNne+R{b~{2ԡA,M~9QT27-FPu~XM#i(Ŏtn\;mف">^;d!C|!@rvsրqcfu5e`rZX"ήT5 L:?HW[Uj6kEQg'#1ڞyl�ʍ,e 4f9;~%:8`] xD\8B"]s>i[)U󜣻{�"AG יN.�e*c @VW1~/8<9H.1'P- Uȱs1EB;?D&ւRKPP_Hm.(N}C<braί??@4|rOV8:vc]nkd􀥲2 KJhȰ1bICTsvdnbm_y2xG h֠L$v|7}*k[A=)%e49`sR @$i!bFh<Z^gם~әZLCiG߾9Z_iuZL֐7$VyË/1$ "P+76ϯ7V>{�n6W�P@?+WΜ|;kg M442йn݃B5 r@k`$D5&e"cMtoN|ކC6(*lSCMȜa\0lc9% f.Mu`Wj ýhP@<oX.T`<2=vN'\R0.&qZ*=n:3 6Qdq?pqkZl/AG5k|B7�c&XxC6+L@ː!,!LH"MymA&J5=`ʣ6cfn'b4r45˜28``ہ#~/+|ud�g_Ռ!N=A5tc7gnmox#|c$XH`.9d%6BD̏ yWB#DrmLI `?XQ_,ڣ@8;!p Ϩ, %vgȯ[g �sv!�=�>)EHM)B %Ӄ\ t!S"!E"o!9E'>/.J(O" gq"cd0؈$HxϦ] l- #H&89Ĝ^NǙHr l t7%L�a:1tގ3r]V|HkIHlP LJvRQ E2@:? Ձ`A; G'%(B0!cA[Sc48.@:;!"l¨H1Fw9S>%H*0J8G9 }[H 0F#[WpA~�$sk }y9܄@O :X}mhJHH0tA :CI},W`RD:_wVt>nV; 5doj Gd)B:W #A①@5Fk+e,H`HA*!4 E9ZHV$dӌ"#D.#$"A߭s#A#ֲAHD>IgW�_=Y'R�\<O!n bF_G{tn$?Q%uT *)�,}f_pB�КU+I:Jƚa]#.>OcY͍(d8V]wղ[ǹ&3T*L4UV2OÙk?|so\FdW8g�@;S@VMv+Ovh;v 4c+%�J$E,ӃhssaiK8^t ,A+x:Rc+yTHB1nl^RescX*CJm˻*ؾ2..1.]ǒwE5tĞ 1|AkZǽf Ć@<%^CNp]:Fg&ӈlPw-J BSVpWomż!4 "ubSh^B|[),⡗ !.MTWTRl ӻԍK=1nR c!?IRc !6lP 86XϲÆX1q) r@Xbك989�! ]st(9vr_GN (JlDRX C>!bݫ,YB!B9�!$6DT !~c#2!:8b&09 !OP`"Ge�}9$ >kh>īA˅P _&xBIebI!IzO4_C*7ı;@ОMt~Pj/$!& ȽJ F)/iAHIU +RF#$&# }-VpR B<�!uB!\>L.~FGElQLT W Qp%WK/)H7Ve$?$dc@v18q1B ~4WjVSq| Dh0> z1%f IZfW 2X̓!*o""a#2X0U#qh;K%\.[(#b@!`HGO# =C α6呠AÆ7o/d\A{l PvunJ>+Iۢ`D[V$?^tR7\Rƾg>l"\֔iiD%I6eco3J;iofG쎝vXӯ^yi}0C SRDO7*?9,(E P2өq;v.tZ V+ �!|qutW^xjjڝ^0c2Pjޛ"J>śsu$Yp8:i*E76&#AVH  pE$=,c'%dܰ\k9. `- 1xc,5ɩ2Vu5&:ĂdqЁ%OOtnLTDyҹ09ir#B]F%0үe߰&�&w y@@n~NXpoQ:b_Z'9 d!dأ VKXJLfa bQ_ nTkj&ET8NMGQ1d r&Psan73}d̃&.n^,HmP S$ Y &n~%*il^P$FX2#'}bwv̷H!<17 E+K!V <BXrؘp; BI,FV'\֩\b5+PD;:glV:o'-囜\r;@X 86$BrΎ=.3x:_P= `?ey�0`@R074rLŬ,v�yQ~D%!&A8dRCX p% p4 M@>SY-3FS~A$9G raUXq#_L:c&Zo%sTyZYjR"Tv!޶Ypp:?B}�Y/Vrcs*.N}>οW4;Hi%u&SZ,"|!:G_>0 WB&=>|@T8x$ ${jAn$u�@FH&)jkd2%.xǀ-}eSm ڸIᛀY $Iv{^۵DΏvVnnb�4aF��@FaI+U*A4cV+7Í w|O=?tmӋ(�Xk5UEBP, *PR [tzvzWc~~{0Z袪?& |8p|_8sbv3IKFc=D%yDHwǾ`Cs2 8_h0g`scs8T)Dg5HeyqNRgI2o٣}oDI^r}o"._6)Ai!Oin_S{j>`Ij`#]w 7@RVi c] [$BA׼FIȍmtVLY�`{\e Mpr+h { e32Q�E Py�PY\\gD|-f,rix _ AER�ۼN^S3Sd`F!(B � )bɐ|*k{e9Bop!A6k0Y 09yѣ>k];'Im2`:k ,@hx#[8;O(!!C!D g#H9GQK @Lq/X9dR1.Jxr>^{&xN*7z@ ly{r2`7 Jcs. ,T?P:;!"I!!$"n&[L+eC0iM`_^m c"A4,=v I1(ϬdN~8`#A-^(3@Nf{{Ȓ p"DV0>D$(D5OBFl%2?0&F+n\ y)(1-c[ 0EGu"܉I �Ysd O; cߖ%&H` 3H,?*HA=DE,cSq5)"9 19|a  <cWFy8�ߒ|U](09�'˝;GٕiW+3B\{{^st9:O )6�,7$U<� `Y$,eWb[R*IojfXGK6y7/iht"uJ!69uޅοv֥Fiw|V*^A,J TCҔ$4L(l,_8<\_>Gf 7ܑ~ FasΟ]z˧O\_V{۝IcҘ !f83>Nb5�dY4 .G0tNPo[el-/oVL�ѵ*[ǰ`I R~*[elUV*[el^ f�HOβl4F|�4vS2h$=4?S1B03MITM QkTl9ĬtZ{ζӽt,,]Y}{y<eYwjzjٔ7ʛ��T,b)!jTTjZ%`s,|{i9=sTjy7~CY7@6]9{1vk>M�U)֠3@!J2 ,*THYO[)V;M3¬d[7ۏVgN�ܚ)H*6{w̯ ?PÝ|�~v+@-+3؂50+МdgBpÝ\ͲP. N>m׵]ZUAMEY& un-{Uy {;E(k^ícc~Bwn__ Uq8YǬc1;6sGN>@5]D>B͊K)^nJM 6]` xj ~Ul G`o l|us#w]NW5#mrg=:ot`Ͷ'073H&>@ ! !l WExĐ@+ ? =ز'۪ atd݄NqqbpoxPB"Z#BY)B"B!}!@8Àmhȳ08B @g+$R17V]9r(0AF!wUt1N=g%uB` S{5 堵C`Cd 8{GE@qvf4γ3 lu>H~m^@"pO5ȓ_!my)Y;r} Hdqox$hĉ0 0'!|^e&E$ŷus!k Q\x!Dڅ<pXX$e^:G8 FFaT|wNFI̹Ĝ#vbjg r�!5y@%8~y c�]K1L&qpH~` Mq0ꋩ�D Q_%c -P%{ /w3sD;aC#AwL1N~Hv(<�ucD6/ƧiҸs Ҥ9PbC_L7]D+(M r,7s7.Ή(6l4o  D/Gp0k۝NnZ|l>7lhN%.(3HЀPdf5ZS,ӚtY Jꤪj pcsucss4<~mO۟>rؾmIz8F6Fw#/3!i$(C.LJ+QeIv^gg_|+~铗ֳq#j0d0@o)�E77_z7mq^l3�IǙ%-P (4@V-9kH)LI~8\ 0O 쓀 LqѬ',~^m XWv\%xN#4 .](OF28qm?H \&SXQJ4"[ OA.gMJl8a-yed%S"0k]x=#'rȮadX-^}xr՟x2}6tq>U=}9/'8զ6cDr@{Dw|?IEݽ{m9B l1;,zp�۽d?F !,~A|*xJ9'ˮr/^z HnNGunM۪8m3v}t<'b8F9 bXU=@dyT |F"H"}AA_A:;d Ajd7ah)E*oLnN!CXF)C |FG!Ct)Ssɾӯ&#﵊?RYx{QEκ8 gpF�=ZY:7dzuA|MtP#؝TA:ߗC: ,OS ,c[qjl|j㥜-lPB4 B<-]xo9߻1S,t}Nq@!R FS/` _j'C}�-as "A9G;og$lD/r.Hqxܢ㐘sdI>B,=qD#HUߛ>=n�9Ȧ-S H0et8&:YĎrJ/7Ltd | Ǔ`HУ>&.rI|KY�|G ЬB !Vs ,qQ父2j /Cvp$18Gc؈Du0Td y}?aC0G wSPPl>`74NesMt:T*:tqRLHgYf;6v{ӭ];w./G뭤mw[vN X BrA3UAn�GM˿krWv! ):P*nLZgbnOZX]]Z^񎧏v҅y *vH@rM#W;!O@Bưt+;uj.=eBҚUi+ƄY84zro eR$ɲLLkPI~N"�(ijhm4t?�'IBNp\*:/U{S -B8�?)Ծe㈘~V(&QbT3~ߡy*'׵E۫*9s5B 8 LFO0!xSk._#笂d[!Z>WmDŽ;玒67! ڼ &&.1O21T;u�;fZeXMb+owEdbi-QFl+2 6AC(Ew}k_VD 415u7^KL *JƠ.ȫ"aVJ~$�%f.ƕ^/)glF&L!f9�w.;2KNWujW@!2X oɁ瓋:?1sdž7&1uR7 vb3Z@B$s4,j� v< W&*9BP)BbN!&!j- f] iQrG}οEҿq$:GKUn E�h2X z^& 6s3DD:̿u~)*8ch_҅ˌ-5&;R_j>Cs b꫌+2HAsV ie6EQ$*HN9[JPs==PVp֡P!@RݟJY`d%ch4!]LkP?$In;`0'\tV$&Ds\D.s3Iʋ@0g. LAT(2@1MSk`G㑢tfv}v>sݾ:怔RJ& JB@!"UB@B?@Wю7]Fr$Yc`u9V{ȴ1*@4@VӴfN;Ӌ_^3'^x=.$i;iRI>:.{@!"*Tf ¤X !c*Ov>ˎ4�%fLkss^}{NXz]H:ShqFR PkD b` ATZv'4!@8"տ 'T,X�R$V'z4K5ѴpvAjKhiDJEfw&_tڬGVnzk{Mbm%n\DĶJf-^_=yꐴ? .'c9J`e~G{Bkf5=Gz}u<^[]>9܃m 潨6}jYԙ5/ +ņVG9ܝoMϥs4UkC1Z'b3B8j`bkvjph~1hB*RpX?.\[A]zvwV o\-HXNlRr` =F;3stf 6V񭫃[B4(0FszhRsgv[kv53Bhֵ&7,߻ZeezQe<h U߲&ĥgSwX&;8K\trھ==Ju}xkC m;S3lڛI`sm>X/]mti=|6+dMk.75i!tqW'g$Ux-Q6#1骅陴7NM'*Z6^5\_Kx)ugagqaG{z.ͤ3izcmmqgGHe)CHy[9`cA&DuJxvvfT:͍l1~yZnifҹvoJuTJz>^5`3ML:;_@CIt.0)b<_*"DV cz` l>n*A j9Ad'NP̮}gW=b&8g\N8F ԕ!bwdT,HK|Z0!-|Na / S ZI8.8!CH0ܸ="(HLk@,9EL-Ua'o^dg69] 9b 7:_RB39P^l\<\HF)qE{0pO�T5-P&fη-N}Rۧ#8G@R5> 893,!>n/T,u~ y6gUFsCAbUx;#ʸ&x-C\ IӊH0p U! ߡ:Zmy/Q8G.<k1DuLγ@[ȧgz)mC@ B(,y=|&gY67ny$~�dVoj"?1?ͬP~h4 43Nz9lu\h0j&IODue )@E ƼN>@)[D`KJ.[p@onAyTJҺzcs_}mmV޶-UI>Aͪ0He&@PU*ȑÕ$wJ�dfJ>.݆Ǘv⥍x75:=JSR@:2 FDdtU؄ӝ,z@lIZ`X m@{b**(M$Rz{羔CL~x&_[w/恷=mzo7ꗾw濛$xGC\1?z+/?{ ,vf:6uꕕ/.xa5ߗ>ǟY|5K7=⷗.V<Wvcf}zc;;Jō+.ƥe#?#/rVOpk/xmsscSqrq? s^ܶփo/:<՛{Dxv]u˴~+/h^[Duw7U]<wb+l4X&Fw{|l2~<Nze˫aAع{䑙rX18r˧7Czp3R0KϟX;s|u}y|kU[fZ%\^av+ý{,kmG?tlvn1n]_<ʳK+]zM?2Svܼyk7&}62#Y߸ҿ~:�}0/Sc3x&UV*[elUVPJZ|Kx<1@.[Dx7P2 rDZfcPzdOk==ۙ>{so B:-j0zv $LJ&$4ӽD`b<]|4.t]#)W uڕ +n<pNϥ&-˴4^~:@@]Abd)[PE*-bd5iS_68q\2Ss �hxǞӛt6j@?,Ggq̍~rc| Zg~%DرwmSwҗås7SP= _Oؾ[۬IG;W_X߹x\/w �Zv_%p&:(t3j[lݶuKtQaޗcSGglYӪ;}tnߜ_6pz0l\:L,oZ “X)ؽO_;Z�f`~etĎݽ{]7G^2T (y|YQ(9Dx ?.ݱ{?n}.#x�A^_c8#b?WƇ;}2za3zݝ|j=՛OC^>]/_;⊘pÿw&ݵko]uʹsj#JIҶzGw};iK}t_~s_ǺYXf~GwkR'߻ccmׯ\jwcEw:}z{uV=~~+ҵkbC켬p vQ@mk+W7p# F!+>Kzs8_N/yC;}b0^_qc4 O@ov}QOwGH.{z;oƍsGq ;;c| kJ6Pȓ Mo/IdG>) ʪwk?jB-T:*Ƭ&+VO] l.JM&FXxbPP:91 eb_uT5Mth$r< C6r`2pΓ&Fۃ*b6*A^+XjSXZXw5O1gWM}PE}^cR�v%YE \CWd<#T˳J6=I@ 1߿#*RF_dM?Q=HMW4XEI~%#j:&q$h7[vUO><(-ל8xkЏ bjJ><qx7G 1u:3d]w=pԹnZMHg].$0EBZ)49fUW I"NɥҴD{Jpc}r+.߸ȱEh�@ R@Kq�0/IAʪƵˊ*0hg ×^\z.!٩v;ez<|Lçrs *RMN qYN81'þXPďu3{}ZA=ܯc-<߈CӟGg;(>֍?=A)mۡcY8ҝUN�į{Cd+lsg^]'#A =_>hӖ߾pѹo}~wꢱ؇oE®>{G|{o?>uD޵]@N$}OgG/~t•s'vUa"�;w>Mǟ+up'kB hϐ{_wAȏxtB~HdV$ߜn_9Rϖ=?4sUq>-/ym "/O}8z~aryذW*i A|bÿvvG{{j񫟻|�wsss_6}Ll4?nޟ_{e!OdI :w>n$s{9dW̘gWOdk-Z 5PnBٹ/@qBhߑn/iؼI{~Uȍ0P <SY,l_vMCFW@�wybLxo86}ĺpW!lj1Dx~Z<'BG\K߽( T<-%br7'D6iA|k-9x#s1�Ks<ob<`} kL+t^C`GB!dᜣ'ܫ^M$mk*E�!X.<DHl9ΣqaX9Q!@">6|5%6PjrD �261T7¿ B BŕqӪ PB}{֡Q c,∏~h"ADBMKgEH :MR9 Egz$ȑse-qg'GN=E't1Wv>/!B6"!.Si2i:/]p{L!. Rae`)jR":@TAyݓCe�CqxH00<"8XĆv(՜8<`J$I$Zϧ$VX5x8lI`xgqC7^yJ_\ո=ӛvZN54bt "bFzy3B�R(0Ml`x8tko;:v*9x@$񚑃Ho9S9_DP*AD Ԛ$A[ "p~ҋ7_]ڭtݛF#=fk_ʛp/T8~bs{/$\֯h.2xX L(/f%F :!a5AeA|zo�gt+7!\ F@O|`oo^§>oOoO]AVS;ƒBե5<`o#`ז=~>, !Y!rIgC?7NOѝVk#CӶyiկckAwY]>w;޻n#3}'f 33;! X0W<>[ÓI>:D֛7Dc,PمI@2JEwWFk<pxA2W[T}c;&hO6]|b7x><Zsfm9v [ txf!Е_?4- ;??mآSm9;>W=?W;en_: qMBjGq|5�.h8vm營X:zi(`ki`h["pvsj_,vFDbneJ[}z9|ז'?{x,2NROO_[v}/zw(VlgN/߮۞  �<E~͵ZSC\iS0n^ݼtnAAEc)QHex/)"<@rl &tw+$̧�0فsvlqZF&dqT{GIPmQU>`-.+%zY찳LkQ`J8Y N AFR:U%MuxinY7H!@7Y6ugpK#$^-$sd% Ǵ0֗O\X`d7>!؀ PG}]MĜ#X ,&9B w-Mp`3un;jlNRH(u~9ǒ^@9S_$at=>.zgG,\E}Fp^WyM!Q"7/y8ZN9# +k[`N(uP`!s2@Nvfr9q8G`aX<ElR Ɏl*$*@F )JӴnLOOwV?-YeYDXϢ"j Ga=>޾kq_khi htH1� 2 h M@�@7MU~&3sgv0ںrnK~7r^9u|c -&�"g,g:ӤBbi _!_ h<O>]4~k/pܙՍ$Qs|j(lkp9$$T8͉ [|�fn8?lW."+Bp6MPu  uܶwѷ-ٱ13zSk.@Iٖ⮿W&=3'޻ԫ+k]X}f>}GwzmY�7�ܹG5Z]޹8B xJM">omg'n]<᫟Ȋ^Ma'_R#cA`@C&KcO/[*R|Ow3�;=4z{Tvhk63Wg/LpIm˰w"<S;;%5˷/oXEI_COhgrUK_+< -j?&g;lQ ybœwoܲȣiw,ܺtm(JğB !=9_v;;ҜCΪ\8ځ 5mO|߽pjm5L#|O&�7)I=I_2#Z�,-lLf! ;ZӗɗVx)bv"�fv;tz;^�ԁ3eƍū \jx{kԎ׳tpn<2g[έyV }ojcctwvA?{V)y~VFuE;ѧ˾~z# `f3,RU'{@^*'t|#di !,޳Ǩ#$nVωۛ u_/PBܯYa�:<qT[<¾"Ng d`epr`vqpp mJcYHTpH|7G:G*? " "5TSt.1# J89 $RFD m?bՖWFN !L9i 7V/iB C6Eh;AAxlTa  9CcI$q?\$!qrCƳ14)v B0@WoŸP~ {N߫1`7tm"Ɣ"L"$ѐpk׮|zMR4pX9bp~}FG� 1$Ml<GLgmnC`023ԙ"NIb*4]b̟‰m`[Q?||K ɭ @JR)PBZ8K7VWz4Y�1U<XQ!*dOuud/KG ʥW~x_<{jymE)5;5{i #jZ]ck:NzCe*hGZ&%jsK>0K bF)7[A5AWO_;|6k#団[󲸫_NM߻F_<0o}_}7͜S?wy1̇vw[-q_S }vA~pI,|곇$㥬<:M' *H*@Z-5/gZs 3}/ 2Cӿ[GԽyI[꓿ySNngJ#O,+]iK}deIu$[GDeqGW?sa ?mٽw:/޶߻t_oo/xp;�d}.'xJxFYm/O;Ճdy/|7XʮY_ze\kۗR} {Ʌ/,7)=>핶ҍMUV*[elUV*o֢g x<7zo1(#a h:,;SsS3[۸g$*@T)(cYe Df 5*ހ[!؅U~ t:u6}$IUzrڭWVΞ{pYر;MR*Iz^s~`7IߥE*`0.]Zy^sgn+nOmMQ6&y^V%Nǟy`Ϗm1q Y _%�>P>t[|j:?{QƬֵ'qVت^sJgrה环_:黒^޶˿unejco{K^[>�v_G-?No,]e�'_;xOfR1F%#GC�R+vIoXMơc=q x'ֽ%_ݠ쭵ۣ`>!bwJE"ܯWD}M#$#+po-zv\=qՉ\Ro^:пǧo :��HlL}{?j�mas#Ɵ\wveDΑ緷>#ճO�boS5x0RQԦ{|o\ʟ-7Eadcy_lW~=lt/[wbkyid$sJձ"{w̆B6d(Tl{z_A-331Jel/71l|E3zlx#GErɼ!3ɑkR?5ZcfOy=(5EH*`ǝc:?fw_)P";LV*m!Jz6jGiN}, +jQ5TCAAPA}~+V @Q25!;À=~_5@qvM`|xSmCߝYkG !QBCHcTW�ݪWwuTlP{sl �6&3.7Kb7Q޸+HЗoN$86W,H#ҀI&8L64݉Gs ^WFaR*!�hJP!(Bgʔk($H "|+VWQ;mele, 0lhfo^[_t7Z<νw,lNݔy #UPvu ?KZkX]N˗^}ڥ\.v:3xe*I�|VyS , �.4TCNw@5H.Am4Ya{-NAq͹u엖tܭ.>Yk+妛z?4_kyIiuoƒ"ciρfm4Էo#JR7;BlT<ҝ$6\B~&HКvrZO=aqg]t_x㳿O[/ME;+o��CCx[a&]^O4 e,,\�*sqgl0s~!~<lVtfUadžyT@eB̳hMkˣ-`A ~zߞSb86ͯ_CnR4ٰ}3ʨ!/wo] E sH fG#suS5"Y ?IR(NDes}48<䂬JҖاLlsc</ԧ˷SkF˭-_-:"<m $Bxc3eOP~TLsRGJgX58wBn%jlEΈd�*��%Ju:=< [x&ς'~ϥZ'I`>C߈! x{n.@nN42b/z !2:} 4 B< 1ڶ | Y=@w}Nq@!R 2D!r-5EFi#_]*A�y3XT�[usMO !l6�Nbq%B!D^i}Oar xM#ΑAH< FaC*/oǀt '\A\ ձ} ]p4.stA!6"ټ�-B/`R:9,2jx8LBj#1lH2\xdAc_I$/$=6H_moVnw:V}=@F00HgƚFYeA_Xzgvz|o{c ^ZshZ!-�5F"$DRH @XԟBa>1J I@H(i$jwӽTg+ֹ}?O~kN|k{ x~ '%76( 0;wϟz3ϮdTobvQ#Rx)2WPx~{p֬t-{/n:Kgos`>'+3Dɿ|hZk:dGf?s{U=?﹯\:dd DĖ,;`C vw9/_|fc4zݽ_+MO~*ڥӯ\<q7FmOw<<dG G{Nɜ?xfw~h{?_{a鋿ah>=S鉗7Wo&Ž֮wdc_wh]/I^3~u}sQϯ;vS+K#`wyxd60@*/n%;5R]Ւ/n2ZfvMhBiō[swr7AxD z=\_{~ܾvqsc-# isZ] qco;*K =E)B�.n^U{ڽwv'_?;) EUPɷy!V_ڼq4L$;vvm=lO|̧?k*~Z`iyx+7 n\gcBm:v9Ы%~bK7ikf4O~Htp|nӎ( DF!DVIWg�9^{~#DD t}tf5Q$CS[l[c}ڭk[ׇ7l64̵l]9L<,/|GJGFF%*'Bk}Ko�/} DdSf&P(z8;qHCg'du~39hpQ(EHPIY1Ub"&AXT"fKW `! جI0"fW!%b hEsGw�i&K C,9�4EH]Uy}0mQFzAjP1YzDkpG&{-ۘG>&udWЉ=rhH}:?HT�4h!1,S]Ge9Ɔ m"cI}w??IJx@h=XH X5V1�J:;OA:[A)5U= Z)ex<βd ~ uQB>5D5�i"$X4v^gqoNϵg[;}6o$vK;)j Ry%"ȈtEiҹU֡iKB4FHJ[-I(:U* W+kK6;w3cTw ZmHZ$ ^yWZN+H�Dk޼|a>0j"v5a5!B"ʴ&[x BRsAYԖt|bX%*1bfN\o4r[떁v#I߾\]layV[!m޿/|ׇ��A__>ݿ|t}?@ϭ+gk 3k^FroCo^wοEh}}tV?:=K]ί!Ss{> o|~fKX +y/m~vq|<)VF_+m/ 'ٲGm/DW/mw̫k|mtֵ_>OSm"-"Aު֚'k]Jܼ2qe_j"G`Vqz+{b+O>M2h"tL�u$ecmѩ@NƗws+Kv`އq#fc!~Ϯ/]];ӭ[׆|쉹侊-O}pljWJW!ַMs5,O\X >}}�pљ`¼7Гs_X1Foŷ5a~{׌ ׾+7.R$�܉s'6�;#;x J?xtѧ_}n9S ޏ=d~^Ŗ_n\߼:�XCϼcwyR ~?<5"gˋEŽ֧>{W9;g]醒&,u?_ _' 䜝P[__gsv ���IDAT@S}{˝oo*IVƼ~<2S�NzccmeoWF+s'pn1}v~Vo{S,ZȨ o ϝ\-CcO/>9二vm+w;2k ^:pު g^[K�F}BR$BIg'9G"پ&:HOCDfmoOF K )l:$|faOn^fW((¦|"4ȷ7E"( b&H2 AI`%B^"c)#n8eb:l"d$!09BV!!<:"d \ss 1!,Wɧ0W`¨\` "K\ @  \&<?$8X;۫hL@v l4'$C*t>#KG N# ݁>jL}<Taqs 7tgƙ+/j/4ܔlaK}r1HenC}EKDOLO9VDCu:9EBAPGѿܵh !�TGh^*{y\CA2,11m{mstZ."\Sq7P )K"B(V j�`4 |&x4isb;k'd 9_ gTDSF4NѨzٹ=Žζ=S]~yy4HFY+Ì[$jJl5" ̴֚�P!Z,syDP0ViZy8- @?!ɦH I3δ&M 7FW/?75vpڃs8=zJ*F sWDZkH�BT ZA2ͦ霦H1)|,�=rLT""=&H)џ{״ [ai2Vy ޗGI _}v~Kα/?bE~7˨gsiq^߾ ܺW-zi=m|wMes}kϭ̅_H×Õ3_{egɞū663N/^yG\>?tUlN__7u-Op__>Wlwyf.זG/Μ{m2:/W?{?! _~n<rb~yU;Y]~/gֱN7>uݫ| G[tFFuxrյ?8sO՞>+}?kod_'?Vp~z/c_zS@K7~/?T>/S/?{,l51}+˷]K{js=9}`�.+JӕK/�XY}/=w2ـOx~bM^͊)䇟Xx7Q}Bu=>6o ex>{n9V*[elUV*[e84M$Z.g ,LF&- u@R@i~)ED$*mͦSVwjC{̞:~ҹ[W-llLot{^izl�4F$Q &i!�lV ,T"G],WAA!AjijeC^zq׶l1c}vvTi  @czE(PխbEM@x!N"&*酙mݮ&$$@dlW !i3U~Bdt+ҳ¶![hpkv_hǙ.,0uEE7o?^}n԰]%LݛWlXpt`0ͥ?w&va+O,1 Bˋ[y&/+2_۪єjRgvMxqMM;=̇Zu_^~+&8B lye_qu GzX^ek! _7|qV.4:?[e['[Z,?<YPw`]M�05<u?^;:�6[Jhxa_[]ֶ6C_HY op,f_\m PF b1יvK͆{X#߿{ʈokR&wgCuyor!?\uK/L|[K*bԇv}K<2+d6hM;㘀Vn~:sjJlfuF}{u>:_qgz �sA}!环8C-<;~>zwWXr\Jؕ2eo.=Q\Ohgmwvwc}+-G<G2aޙgon <.5|y&ӱ@bG#OW^䳿|YAN/ps݂�KN}M~r"pۏڛi$GC‘Cf7Y[~e):ۮyxB`�;:;܏9btUV,f= |�{.ʱ@v+<okMXNNl$BĞb,(BZBJ D)Y%"wв,&$FLCna[y@(BdxEHl_w %&) sv#D#c!^9lbπ,=Lڕ| �+0TA%:?4۹"jN9$ "G0 .Poh9vpt @ΎA%| #y$'NI,`zUi?{<J&BHu>?IkLnD}v;dh0 2ꓹr Csm\߸v7 w#@T8;GӤ:G xl..9Aη0?@;G A`:G)VHPnNz/sěܗM< 4u�!C!oݒMNMMMMMuvQe|[0/wۄ� QJ/�H iisscu}isN@g<G禷N66fF7F$MQ@)Od!@ AB"juD-Df34S2$Tc *QiiΏS+ʥ͓~/WO^;KvZ ~G#4UͫM�JffepD8&!f J�R ~oxn(tme�ITN>djp'Y݃㿬t,V['#EM&D|鹊w?gHMsoNEg|^QvXpSke`A]2m_o[:$oYyy?T鮽-' y>T.,۴|r1zc5߽�w\@kX[E?[lWQz`Uk7=uI}./Ϯ.%j2n~ϯj=/ק>zwu:WXC#Aۀխ'^QMA'S85X9yY_}W{_EZPRߋ߾IoxAs}J%Rc&5(q浵מ_*ۡgQ t%6)0l5F5޺tZ1o٘ƣMOgwt⏥|ps^kB!o쭊۾;ʖ&;@ؿ+k#BA2K9*M_ܕ暞m=d8Jrlo]_ѿ<t}hǦW\ʣob[;+*..^{~>ׅQĻw9ru:Vu2&L_XzqO'\_ͪ#C}6,29Dc3 y"EHfQ_|m׼uLUIR٘@$ò' ݀E/T*@\8r Ў�w.\dTO@-SJ,ZbP&2Y`!J.X0Jl0��~<xB!]d#R RÉBc~ݔI=BB!̲�&I=2-<` qw0? AQYBsϧ> o,>^)oϿ!`�*~8ˣX\-oZ.eo xWSg rS#6("'A.j/󫩯KL.>/$ x !lG !6d g1 <_`% j�!=^u 6cs#A!W A$8S(8H`wpڧ% "&Ini^瀽ßP� @�Pd�c A+T%-JT!Ƕ?ԁ'Shi}p{e0T4D]#xM*o E !PAh T*$DcBBJnoݙO{kr\~+΅矻7NZ|ix^] lr $M'ZNf1-nR90# ?�4!ʷrJ+s(LWRŲGt�S[c^�l @ \^.]xr.bsAU;Kl\l/5h.~|t~�[LW׺"b~|u[(_5wnz{ lʭGq!<RժN !2.sLXW ش�",(={:6׆5W�@t�ث7μ@nT8a],a|hZF2;`լωOL3b ۗϭ״˓&,p?*Lnm^.RR ^{ 7ǧ^]{__箮ݔkoݴ@EEWoG|p=Y3Wn9;0(�Q̪1<ٝTmLīdeBX]UoO$<i>_]?{hlݞZ]tx. BE|6KdMg_?x!_: шˣQ\Gn4N%-MU.Y9b Y0"-徘sikK#\A]ـmE)U~=9�v{tO̦!RK�ӝ)mPKl$699e/^؉{T!�gZ!DC2wdQ#vW}tk?\ۛ36RK(L{2l (2Q(ߥ`[VNYFL3Xw9zO}%P"Dsdu ukqnpNm%B(IM.\fb>t]ALǡ/A"t`2(K%BVHtjF `!FABHm�O'h. ֒@@H#DMB=)OR,/,Isѧ>(Y\ 7T؄ c& P|b>+w<FhqT{uR]ERQ<p`3H\GOf F.>7N9J`=>30+aQuGz9G!"ď]5/yXZ9T"#A9Bs,FءIBy$XyK(R 9q!9G )fAe Ȧr`{H$o4 B%0pznZ-7�֦܋`b,߬f 2ct+I[IDaBDhc9\`f{#;~C<G9^dcQHǻVyG{bwrNovhDPJH%Z%^;f9Z^R'__owuz'6Νٸzi9&3L RΘIcN3kdτ7Wr(@"_*S?@D)9�l.ЭeO$6N}KCm .E3\;_nvq%ޢ<`*~I8G];xa21}V ~ [?+u;һxjZFFUsLj@tmU)}=W r^^K߻wFox|mF<FA'y͎q�>o/\@淘' 7P?pgz+p^ZAT`‘fu)@X=Gn?b͜|iLSP#U¿Bk"H~_;ݙ';\Džʂ7L/%{Y ~lsR.EY^(^[+cfݸҿpb=Xɮf_B�*UuxÁf'${`6DK?q\пr~}m^6 v;@!Sʷtu_2oBgr&w%uU}kﻧ# I h$HR\ɼX} Elex۷P%RKA#$h`H! 0?~{?24u㾌[&O/s2ΝZTyƓ4m~Zd ku`׊o~lo<B`fi[k^֛ϜbX3XOFG~;gg>0ptLLj s?+GfEz PQ)aM;AsԢh Py\[g#lIH.p:&7..3 -OQ ܅ߛpՔMjI2}ʾQ{tjI! :rT$�^nkղYwWت>}V{5#ɂ0s 3H HFImjǙYA8Aʘ􉥾|cݸa"O^kpx@8 T ;2, BD A!:A|~c�Ɉ> >Bs<8pbH ח" r,:Ap%tT� 47'O\z!qy#!>g yRP#_46V[!5cϏ>�ϾU 'T8%cYkj<A8ziOT_h T5"H`GDQ.P{GzR!T-\7B)`!gP0h BX4V2,+T_|0F�L0ce!q苠T�!N7,-ʆ~>J憒Bxah q6V I}`C؁q  3 ijWc)wnۃ{=łBJL}̟FtϢJZJAA6Z؝?169ݛ653;/?|eaq}1U궓n+$" P0A4끷 "5oba(i(� |@ R�Jv+MZE#"@Z]]VVt][8>:tdu7�@Tc@bJD 0;ۛ(W HuI1cS ֺWRcv 8$xÙں<D@KE3z8S֛n#I&`rH#[*U1XgXW~6iQ%I#7O=9},p{޺ o�tM6yܦ,O=:wت0[]y잚\:ރzSӷ|߲$~ho}9Oֱ#Ѻx{v_IlԬd5>Cѡ&Z(+|![N? 76nm{i}K@rGM69]+rxwmDi!\䮚 r'X Wts�{F5W(D7EIdME*hY|s^&&d/_Z\?~Ժ4 #;|A1m)~uN懎N|·z 'gm;>g??wqWՋH0~쉥k_oX]Y liXs5@ӾVm֞x^;.h\ߙc.Ei8-_xfbs?ԒI9^8vaƵmgwO:CfB�I3*MWg��cM-6lD7R '8ATkU8Bl_5|Bd~JTdmU[2]l/&AH*]E@@HUh\.rE $] \˵?D[{ S=Eux&I q=ù84Q4f2vp4W} bBL6Q@o^n�) 2"CATĜύb檗lDGؗ˛gqQ=WgjT߈^X "UǯOǀ_q>9`uUG>)6RA@p=(B|*n#,2!a94*t4fýQL Ќ "*Mp܂LʅJ@]XEQG$mʡX/ JLrmw~';wʐƇuRFTJbHEZoWs!$" B' �%ʤiuaT"&%��ʲә�(EkZj`J3SŅd�(rv ( J*noٛi-.� ZD "UAjFkNYJ 1l)1c'Xdq!QΏB�"6WAQ0 GcAT"9rҴvÛ+;C+# wWJY so沚l4&]]>ѵ6 HԜ90cKǟY<rTc{>r/ E ӎuM}5ٶ6q xj%�@ Ch/{͏)l >Bb%tȪ: SFc,QF0$21)TT;o}!:#|c|%&X]\:d[<zn{zZ&ۋBfc(,j(Xxvg;a=ųk!�xG9CweߑcO,4*W.'Nf~Tb�&W͍mRhgMiuvNV $;wi]obk[!.]/Ld|o]~9߷*C��;vwA=.2muk|d.(j%vn ܆Qe0,fyrH?Gz:=Hz#8'><z?& 藿䍈kC6Э3*3@d '2RޅYNX]:i/EFfH ;H!<j8BbY FHg'>3G?+~.N-t@|3 ~u7љ ҮvK9s@ rFc B%TZ 8]׫NK<:*$ew`v<GG{`NAA64b3>1<!s!\ :S>2}> ,x~û{^?kYsGsE̲ʏjΘNFX~ ~[~!Q w Fz0=- b. Ȑ$F\4HcgvD"Hh_T [*҅/b2äI6 ,˲,3irGhU$ P+3} *J˷MQkJ vw{|llng85=f42-�1tOVy(3[WLCJVF@A�e"VXEiߕR�"H",fy6\ɲ˫ޑv_$$-Z %,#ݞNͤx&� ,R㸔ګcadj\%Js,>J#?r4rί@vhg$relF{zzRACkFo">@D/Q鍧:g} (woxMJni�M$5;&ӎX�6o7}bu.:KTH~7pv= +[;6ɅӡGv!e+a:!HEbg$[y7}|4:>-w*[ Ѩ>pLNwME_U^w(+귀gJl[/b9w gգ#nR_n7fN":qrxJy:=p|cݎ ghaQPlUD2v?6UsdWB~C�Hw ;Iue}5It/,Nq`kԏ:+c 87%ik8\N^<zŵdƷ]웠-w_:/eo_ϟ~d $ i "a③^|oƮ!ϧIc6ERhTy^#^vQaL;UWs{3#™Tl$, :'66O D&BaY̨w@7h=rQN&Ԏ"DǍ:ʳh l8d@/blL1$i"˳MGlƑu'1vtݴHൂZx jQfsGVO??`E9 .-s?2 G9#x;;/2>.t=K4Q"!]rD2c9qW70sA=f<?n<lhGxBF lZqd6qtɝDf.h";ՠ k6`k b*sI$Iep8e"9 a{D@@P!*  �T|@Pnwgw'S3{~nϬ. ׇ@BP@I\m2 /TM;�fB̰*WSKT*� 2L@)J)( rBE0m$!*<UklyV_F@)CzzIMNVFYF@HT.K.JSnhE>ˍ}9o#6nMj=q{߆nb¯o;`F OQne9+ ]gq8+k5f ֧*_%:oeγN *%AMŠϟX D,`G8HڒWJ+?�ΝXz!ϚZ]?kދGuKjc@k(ƀyl"/W-LB9߸]l>@�͎^09{0q ri= W\DxRkVlx %HH)*ӕ/fܪaz,s ) }QFU!q?),f H2wϢ�$}梩n/g@LZF bF7Qa\�f-6F,/έsDeI ( ZFk,NO wV'ul^3t FG>}!`ƒ~^ |-ˠ_�fz`|^A '̼l' vʬ`ěo]o3t;ziaZmuFnlz[tÃgyǘA]J 9`61)1.'Y�ش6X{)7Bu[cg4vaoURŚ Gme{2Ƀy+ښ `G �!@8bGp >Cq`!qNzP.B.B 8B a@!`QxeAlF4:^R9:ĒdT|F 1!~ } qT28!EnT8:@S"LC5<O_Ώ xV 6b&iB\O>pU >Q}8g"0'ƪ|fD`IqՇqdG~ihm8Zg!:ȶ !IFV!hbq B1p{t@"UB!07zs#HpF>ٚ[!jyG<(EH5PVZ4MRDd |U7rBB]Jâ(� T4MVZ [ D`2̯^!Xӹo;nIׇ/f Z"I�@ IGO"x5gKYiʍT("deRI ((,P&>J%*MN+[cD3j,ϓ<| B4M 3&k� Bu0>U'͕ Ԃ"Jdot)t~N@;! 1�& A͕ M&3@3Y4#hLFP%^7$3*%'OU7Cl/^,9'vGt^gl2]_}ԴpeqA�Dd5;tl{ߜ[^95@o,>rS"8~kʕ´6k/2З�hDz37kxʹAluacS,5q"Θt/ X¼bF>FE X Uj]86 bcnVcbϴ ōG~JKW9L"$~ޕ ڹY~lrA]GtxYR_;%*T"۰xiW|& U`\ r6��,%ؙ@F̶{~|iw(!U;ha.pBA8[+!bΡCUl 26Qg.yN,obfXРsvBo" {3W._X K|׌̦z/tLכyRꠟ?BYS8Z A%I69s�63I0vjjsc|3 o« Epu\�G!@͍<d.hcxb p s5R aH7JBXxH$#$B!x-!TMa S H'93] B`XF} ă 'sBlBrc}.bҲ+1N擜X$vE :t݊ FŌHDK`t(ҵ"D``w j@%؄Cئ^P5vnW}'ȧOaqgA՝g!Vk3(>;-ly>A !h'LX 7:qhd n5G!(7 JՇqQ}vXȒʜ[$;ad;Σk!Hu Q5W>i4>B 3v.wH F�!Fky^&QX)$IY`V#mI�L H% *"H�$" �HRBȇlyyh UsXgj΃cǟ|N/./,YVc*:)%yyQ(UEQ �*X@  P6dHqk'iW:i\˦#Mohh@ � J~U;#$j0ڌ�AE`Pùp?@abkB�^*Xj rH�;Lv.˳AP�bB!GDDw^AAKx (�) %6_$]8MYWfK[emDg~і 6޼<&U6#jU_aaL/ 5<XYn�%Ɖ nNqDRf�-�2!9 V�Kk8_.9{??ط/ohmn={rX?�RzvQR!,EAK`,d<OԔkMP:X$NF]g]+W{s{nXě.^<jHINo��NK_UAQadXM;Jոin//B wqR]8h Z[Yg/'N]*Kd&P`7law17F>fkNg&Vm c'T_#%&mUzu9ja˂U}.*jV{@a#P&Yݦ;X)D!羷p𻺧fr?_4#Cp-7v8Є �zJ#{ٞ_}<l;`3L|Kľc)_YGHAK+;QHo%6,|C�Bȁh/.a1 UYXm`7iBAdtu K!2-&ƠGƒ&ݢqf)~R}f!bw #\ױf0 2,fe" Z$Z(|E)Olݵ| Ȫ(1@ {_=A=´?cq2f"@NMc Uk}ңAhACl]\O3eDEn(BșuB!+[4Ds_u8<iF�k'8b\dbfրi 1~$ (A1vhն )a%bH2MB^zD,Sjn[VJL>dV̑Z�%@REe;BP.Te (HA`TT" RDeYlVo}_mwܷmvہvkj0PKK +W<KӤJRE^ ` *@տ( -t"ͱB�GV+2�aMt-sU,K<�am* *r([&AQAVݏZDbPQb0mtɶٙVTD�0WKK^ׅ(`%.Ъgt^Ǻn|S7ĺna) װ6U TfiF/AP1&k/t1 TPK_/rQ[O_'cmgo逎q2x9:B;jk;O?A?7~O i427؞1yRWm~pJ[),J*S[&7ռ5A9+Y 'V# :^;'ֳh"P~3ο-5 /ynpk~XsC|o2DBBp_k+:ovbyJ/GG}9||t:M7j?pP�nr]3�p)}9I6($NP|Ո􊛡y~B4<Ŧmj#k"M( &i"3R].nE"7vDzoQ?85gZ+_r}b?w]R9lu R!Rɠ;#0ǡ[S}AϺ7ȹOx,8aZ*0}j U D֪br40?VS\է_\E]SçaZ,<wesE=("b xUHeq'׈,B!/DdS gbH{B%sqB~x?5Rmju:v]n i$67[I}BVsx4 V1LmK=w=pֻ~fbPzqarR@BEDE6peÜtsBP QJZ#9nZX&9OPWb䜍 /aguzhv+>n%>u D�~ 7Lǻ5`/rMf=l8jLºZ^٢ayb>�L5&ͨnj5ZhӫA~mUskF1a;rʆdENs `chg}\[)[OnYfT7- bֆm5=8,^=GJ\?P䍃Ni?v VXE`q~pM_xC�HlSb\C͐m;txcNe$)l` Z'Dn�Vozӡ͝>7SU㡹d* r6걍 5y 0Z\8E^ �ke@,5iq " L!xV!OLV swWfG,aAsԞ:_kuՕw/]skcMsc׈`7#be-"Y3;:χ3bK ^eY],B{^~jd"+<ݹ+󃩙@}sh�ߟ2l}TG=iP!Gon>2{6q<_AiAٮ6w`6.=#Omؽ|@�<HF4_(VL 15kz 6ۣ&GlH/GBNd_#,"e�B6-r/\X[E9lQ}a \qxQPl{$!2G#$"(hdQ]lrrG%ްEXGGԠFk 7bFzy"GT bA Y[$B46L^qCQ]!50cIx2% NVuMlP Pt{W)23.5_˽$(<<ϲ,˲(̙<|hsʕ7[Tr+;{na9} /, I[ERV"_* 쉞qA� jZ[5X<+a@ v2==snw ʔ"B (E$�^=4EgL&U׋4w#m1LbDpBQ&hl_11',mf?=SP*Ym̀dL5[:>?{{e㑥Ϭ/AH>Bd>@'Zt|"ؿSgrz/=7C{uz䝏2u3{,f\�8ul z,I?�l>׈I_ պ ^hǾh==rȺ ӭ*AGbN>9 gM-T!eDƵ: K;UjDqMРaG+4~̎NvgEN;ZEnoA.cU7Ё6`vg]xmɎwX]�fw.-Lj$ 0?�a*>)gm% m-ߴV/ syWGBHTpc izC6/!BvXDUgk a:tŻ޴#v߸P CS]g0bawDUw�a7sl 4&ɾnkfNX9BAuپa~pUh@ (I&5aBP3v|/Dp3{ v6uQ1Fd݈ۀȾ+t30KQCbF[GB"0K),A!=0BO1trEfMM)OrG`@ظMZ�ք8FhP^y=⛰& m,6#1Qvc:2J'4NzxazLY'oQcTDEE8rzꢢ IOT_D<p0\TTWi1;Y&�<~0/�./ : :L\E휜+!TQep_v:c)8x}wrfO/<7uDǺӓ&'AeU 2E]w ڭ*y`HĭK@oLN_H~tX�HHC|^U%̆p 4hꖦ` 6s{+?Xk>|ͮB\hjmzR�lsV4&<y$vYWNThM줼D/A<�wx\!:e͆74! O]]k՝ǟ\K$DAۼ(ƒ;+S =3x}o>o;"j>6N;4 ;Prap13lɀ]z_*<s3`G|1�9P#ALƯ�l`\Pl[MӳfF>d-U(KL˵o Adi6SUbD{D䪲BE@?}QgTqEH\mg<De@b*?vzdturT.G;"PAn6,e6B5 n[m;Ϯ gn 2jKQ�ƧVkYLcs~GјF{~b!`ka&pxq@iaQӷ! //r^HLoČV$sO�79 ާNO>|_;{QD7�xZƎ%Ɍ!a]b_K$b$P8; kH�$s9s!cL[G$9p6c.'27ryPeyBr" \2_zFJApyRa/*'<Ax!4\T<ANn 9&$V7K|:$_�>Bĥ"ѧ8淸� H8斱8z :$dYj<A8ZRblxaG/@ֲXiG{<B\ G16C[  ^mr<?,nTC�7B1OT#zpT{ 89E 4o<V2'ț7Oؼ(v(t3N7qE1N7#1>JEJB4vdz3v8uB1驣7􀒨v�6jx8  3aC3em[wWâ(ʕEQ/ֹf[t�*A}L[Noktxι'/>qneiu='5@6"XAS"*h(BXLX~P#*͂y`8�UaiKMLMt[,sPUiqr+0زM gP0OFL3��J?J#-dybs*yW?mm>7idK*fv~m\7Q]&+nH?=v/ w'g( DË2{c݋׉u eb6]]ȋ 5w}`虪a;k@mϾS5ܶ j/\;:cSbf_BA Ml0 sj@,7@}O#t <{p hD[>]ʄޅjFWSLbbyq81Np7P&ZZWcr&]^tB"x|j6,3É҆o:%sܺ(sV _;9np7l fW+7xJ8;;n R?֛BTvpZipP|O^S?Gb/8�G'oR)1F4R7�7t+*9]:sOx{{uSM ٠s2MNGu0∓1آ]Z?wzML8ǞZ7sz9Nz }l\>Hz8a g9i7h/D qC! u:\E>Hcgl#&P]hd?u~/nNHP�nv777Df&ҹ7qAVC(,8Q. r#l�X{p4W} b_W+8 kP�!@C[>'B|wh@_WOz]&QBZ ;\d72ǖ?@5ma<NH!uk"@Tktkc3vz TD{9kDnk!r^U{DݞmDj׈ Enc @ds1Mro~X1`hԖӈ J*Uy8Y>LTKt:556km9cش:{ܠ_W{)l'H"V!_& hnCS&UAzAVQ) 3kk:�"?4*tr鮭eE1TP>>Dit%LWFx~`]Udv~NbfI3; N߲H"pR%Ae~ /_Xr$JZJl(ҏEs;&鿼guoY<z0@H.\vqIܴ7қkY�.//F}'gkc:ȥ-;ۺß?EռiTB&-TЍ!X?o󛯻UK`¹Vrϻ߲C,ČNo{1y=?}tuUEw=C'tm[Jyk9=*dMD}b:tOu6^Ы,;kt^muJZU��pGv�[Pص{TSǖ}y.eGe)mggz/�6oiOam&|�?/rכwmRE�Sm=~cuZƋsxf{g[svʺK)(VM7afylG渾+Sorau9 Y o\}]ƥ2bG/rnZ9EFt0"OBgDKCaJRdmMGUvɹ7!Vyݯ?:v](!Q3)YXa_gHD =Em@0[ u].oHYDr5rbm5g͒]ry'vXFzXj;j}u߰OrX;,8",Q!F̋oL ՐԖ"Dܴvd@K4ΐ]<AY;Wժ:\A $)ԶD\m:$s-SG:??¢CO”s";'ݨۓ׈P(syx)ӟ|g^RN덍zvjpyUU�.@ (JR/JTTb/I'~ wwt3e/.ֆC4, + rg4Nb!2VyDTI9 l}FnlR06Sn/!b5G*rؚv /l=ژEyJ)pFu+xºZ\@h~ws'.ρKub8kA5yӴyr jכL~ꗎoW/skjR F{.|כ>6�m߽77CSǢiw>̾vP͡9s=5[,_$z摯^y2�8L] oڦzV"|l7sƏ;uV<+Ξ&ӷ[hޚ 6ltoҢ ,wFq]Y]�_sO \ʏ|%nvͺ_E@~`?2܁əT0:9`7,I]yĵB!mpmnv/.Dsg<Z;߼3D ρ�=>5Ӿp;}"Mur0vͬ^|�pO~۾KQS6dUvMCݭ:Jc&v}ۢ"x,9xw+Alis_\}%9/ٱ''\9( �EA?xtHQlX<=ߙ+??Е_6>)@ xCa{y<1<J3']#a"ߜ+!Kjxy BDbp*`37C` o*Xd\P^m)~\CC$1f1cǩٵ �gvT�>Gmos"ג7jXU4<([ൂITH] !'G S4u3"qZ!AnTԪ>SȪW}}ZV>(AFHf}SI94f+)U߈C("Kp@6lDmzPP Aڴ^P թ̍kM9Y)$IәzNL'\͟"P$$X~HrH2Jy1̋IR(JY:3[Ʒxnۆ^ _+b-/rB0]#(L>`U6V0IҢ __}ljhE`l&۝^0!bQ ,4w*B ط7/fsG r d3霩d~lȾ!KNyL@F O5Ɛ]e6eg/uy #{V[oUͅ@@9lޓ~x/xv&IEdrHSn9j=CO>I59� [nww~|xz{!I;ؾpO 敉6mIĖB�p#xhl2;FəV8rͺiM<If)Aȝov۽6pӿ??06kTm2޷ޞV|g9һ㾺5`AΒfaM2\GnOAYa0`h^zrO#8LW^ k%d(vԑV[@y<\ݞwiǾzzd cr߻w=�ns}hw LC!}KWSvkm[IT){kn{J 舛޹cdzD-o{̮<SϮ8C7!fM"ӪkbT o=5w>k4Y%��/^^sr %״\cFl|LAF}K֯XBo� VPyzϡ1ЪD;w~.R:9 @ߙf/CO06G䅧W3,ΧC.5,atM똔@>F-BvnI`]3My.ϗ{YˌB3\D Ϸ,pĦ!oH0;T�68"<|>'`؋]< F7!Bm!S!`EHG1rB 8B a@! TGjˎAGc5A nfT٪>F 1!~@ W~>ke2q4!Cx@Ww%!Վ8FsE` dž�L%T W}>7 PBQfX^'F h\ϊTt>Gi(D{R\gѦ<CO^1<F C tS@U8V-kQ$ܓePP "y-ԁR8B!AXܛvc Ch8 1 "Lo蓭E'78  =h3!bkLZNvnN4IB)3Vоa�"(1ELP% "<a`Aw&{m-G|Ggz3TK}|F+9 5  UM�ky:-_J l"(eM[W4ۃRÜ[#btyJ0' u<:dLV& hi2A򙙉K>y܀ %5iLb S0D퍧�fB\%ƫûo]d3>;~6^~S)m=>_sځ-d4Ww5v}!o l4*P2{!X!I: |Eb7L|?2cu3^]ʸX'K|�#(IM{޺Oû9뼕7%ie Y*G?XWY7/FYo^rTJ7Ǥx!2@v61 i$.sGs Ljkb5([VQЯɥ!>z IeB03T]7m *cy.BP4FH=nw}�{׎ٺMxxNQݿTWu˖E�D ݮz{<[Z�=vT4?9c.z+hj#$S$'�iSzXr٨ {!dBӧza"f:&մ8�x+5c ! G�ڶ{fk*w0XqW_?|Mڔ<3jf":wjmrM} %K @8N_%$I6N>fdQ8wع< HjNZW@f# ] U3/A4u ś!gq0c"( zV S�BH"k!B\!G1Ħ7D1B`XF}HOP^$O'8Cȍq@8ɏG'V0Ϸ :E +t# h' _ (Gyт<^J{qDx~w[?U}۷##UŸHGU > r8 9υB?{ 5s&'.BlƱ(B_GH|OI yT}GQ*g8XR|@qt'1lyt-d8'6Gq1Ȍn1l˝ H@,Mҷe8Mvv;N.l%@U @�$D ,r?\_ﯬWŚd:Gn~oݵs_7Q<- BLUFLPɉ|Y .�kWحR_L+7$)ece*8jLV&ciҢUX6)/w]UˏReC I!v D*Sdc}<ltiUy#�ø�<lM5s{h鑩%`4&aL/BV&եo\o4EDJw[?C?s(v{zijUvyڔv&|3k.tґXœ {;oVo7&��qm){u#7M}0>>BJ> oz l7V 񦙿/npu7M?ro-ڌP*۩@Y+"|X9>LR Xϸp፝nxU{w5;QpBI. |t279_> i>ASt~P[X:әxt5+-?w{٤i `՚bE&4gsNNks{nX[㡤 LB  rN|Nm}GհUnǏ$Jӷot;W 8BfYUËRm鍧?Gcv_·~p?Tg{KfS}ا[9j#{M,>XpP<hoP#[ l7Ͼm;k.fR(i�W_3?2q{wVN! BL0Ƃ,+3:D!۠s樾';ͪMء閮 ,vwjkRbyF,2zt)']\[y/ c#or٥兡L�!FM'~ێwȾ{ޱMeX"B$�X jֈ ՋcxJ�?s,xux8B dnS|f>/fqs6kD0&n'v |!geC<0C0Rq�)r!⨾�B*SB>e0_<hA !1ݨ�C7�i'h!^gDpڒ!nΫ'N\<,E\>vgadW,M0x[`mU6^F\P{и"0'Y&'�9_'!`U_Ů34ɂB@`` ܽ^ >&BL䦪Lq!p<:T BTeQgG 7D{lJ|8@�8 puE%GC`ULcHj}7Q#-C#ԄDډۻcH$Q֦!rMrB$IzR$IJt0??s(A^@QTǂ ( % AJ zueuiuu5شɻ8|[oCMlCa/a>̩ Pz I"IJb QZ"�F*r"Ÿ®MG^|k �@kkX؝A/T0>ўlwH0( �!IT4P_Q^'�@k/6.Մ8tDx ɺnPu#']H}4XBO$]W\*I�8 щ4";lχpMa{z,l&e@Jɖ}a'j.v]eƆ_g7Mԭ_x%ة ^_܅U4[2 [qb3M6)J/s`?}pzG+}mѽ.K/Jʋvٽ /n9xӕDhc?nOknϜ9wrͫ9ޠoy]�ncM{{4�`fGguq,h!bK>}^{޲?soXJm4*GQJ؞<1W>'6U֪޾yv|ݾc4*uM|oi^>SN`uD(D17 Ѳ{O=zEU&[#֦3_"4sB݈|;߲-Q;'Tlru;jn.ԭ-o|՚WMoя":kw;d?Ukbht"q'Y~미1%ƇkC˛xn Ě8*F2oM?| ;45Ђ#o3CEҡGj�zd6O~wN#/w~p"޷:m(wš�c{~b;?{8:qɃ3�y 5_5"RƸȢ6n>W'|/Ets`O,K>bO`9þk Re8e>wG\I&n6eÞ7r!R  P)WyOAnb#aէoԌNH[xwZљJr0�rQ: Ԩ3OM]t@x;@gox〜ǂwz$FY+ַa49o|s{ë=է[Z\rb3i$a⍥0/B 6;ÊUۃ4L z3+űTU5|`CU?0{׆n]ȶQc\d8jr@ f]̎**ulbVn}4-AUEeyrp$|[ �s ',JF)J<˲,z?Bvjoϭx=w}GfړF+pmy>l=׋"$T&eyn=� P`Q*LH�!P4V:S*ȊA@ռrJ~<+�KcO.Y{ې4jx |UD6sWGo<zTK xqFq h}u;E�عw+y= m?w/F=wjDIx_ yG\F{޺^r盶Oh-֖sgn.{'m9C5t;ߴ; ե,gk&÷;~oS~&?} vkL&Z?wF'[zW _ng7oMj4z^o6u0ucw2cؖV"##Tz{߹G~жu71e0(ŋqm红Ÿoc>j| _uJ|+x;wv"/\2x9>ب#D?"�w!DV+]`!*:|dMLLo&nOxv則|n. <€*{M�Ko㶙-T A0;IpׁލwNO1Vs٢U[WSZ;DJ&os P kEQJݝC7N{׮V/ LQ/[宙nٖR_/dᱛyO{N7p:W u:x<GqCx|eׁ^NN> 45+&B}o �`׾6/ACs*?\8:QmuL=<VN6nKScOoޛ0Ԏ3ǗeoHGPA*=qD]8ë6( %5S%N>c N 6l, IЎ'[N{bюGGApa07P#Y6eFq#" $ŌKyD`-l !lS!m do-BFKFUyqakȵ:ĭ > 4b#_4jU$qT\UDh#W}鿗^aWh#AFKz|f>BB iPkpTh\3\3Vk-5u:1rvy%@�9 vJ5,*?'Iitu֞%ze_H'X.-�A_a?؂*EJvʗ$RA%J3lMNMvݴ",  , PJ1I �DyQ�P%Ѽkʜ-[iQuR'_:Y׭}x7z4nhI!ʲv:}׮Vy)O: `@k2D&D@Ԧm#K٢Gʩl^SyMž T(\ݿSvdkS@^hIM` =L]M' e?-8|!6s>*7|MSk^&߀/3:1<7?X= >pZV_x|顯^otvENW._|q-/hf[gz[{r J=䯽g !!!~&4*o[޷\\?zMvF g<-Ow`jsow|Usϧ/E 7SYxs5[sD]<+/[Gl;6/+?͓zb~>>1Uwϴ{@D//]퍧;ꯊ6 %B}7s|@HB7A@/fWdj@h@#s6/j3<WWn}zL^[޻-ݓ K+֓iMδk6%6eR˟>'^d8f;gos�זvugL)rOΆO1bR?87rq=;3; k5S~'? nB0wa>:TsOfK5s WnP^xʓKk_XGjURɃkϟL Q#~ԨًR^#](:fI@"/GzH?V(hqn0w$839n-\O_ kU�<mnkw<GMƲ<ܭwVۗcU:ڀw5ֽ/F\՞a'{m%3Ac3a{B/7w M8kEh&r^s"{P5qd@e$*8hr'3\FIf#2DlVK˛mDd_,!R@*^k F^ׅD`+lj]A[.P$`NIՈAYSS@X�rTuш0#@c^5 B|W p kϳa'Nގщ Ԡvc!{tF���IDATDcVT^р?Rm7guǫJrSF6h욪ȵGGk7n6T}>pQ $x]"2!5@Z(p8̲LQQdsC'UjL0z=% .WABբt,efI$i2iwz̶ų/_84 VT+QJ@uAT� `!rWVy� T'zDx2z& tz8>[J"\! BUlVB9AȔqMÓGB5u֯$%͝4G"\`-{Cl{tվ(ͦk }:AݱOoV "^z74?ԯ/HGmU{tJþTFPDF/B �T;jVgs}�KB}ԯ-I:Ua]֘n V7_J{rQ �\X+5@(7OmV@=?ĉrTr'uc&1}Dܱ[bx*rXZqGmw<:1>,f6!Xv%u!`ZŴBnqa.kZf_1p</>󉓿nO%m{{{;%swr ]a"br<7˚d |Ν\eQ;ӤL"s'N߽L�m/i :u:by+{&hw l^_Ϟ4"�G4QD{%z:c?iӭ}~"Ѝ ̟ڀ̝+4B:d^Z.RrO7Oll<Z?<3F�G�wH�_<|://O=u"p č.秎- (:}lyR; T"^"uhro<qCaڛf�I(,KCcg@ qf|:QVG 3]+qBAsu_�,Hě`x k<i|7ʌMzdh]C/<'DSugb̜ XBIp=A]mtQ󳿚wN%>`Wxz,B#$BL0EKR d3" JfeGGrRXdsQ')zaê_ U8ee�m^) `w G=$#">S}h)rv>N'd*:PX\]6Q> VC38"=AvE s"i^#i^ yN�.l 3U&ŒYA�BXos_>FXpiOaIP#lm:<_l>�ްIi ß (l*s *FFl^%{OV\\</ @:@_9T`Q"R*%(0 ٰȇRiuޤ۶cs'ϝ=9JyB,RP-D w ow!+^b%NvO$c-P1ȋT)U^ =B(ϓK[3= x03u`j[Ok]m?aH1NYdͱǗ/Eﮭf_]yJ29n 玖K<c^/+W@` f<Z^VP)?;\-. hIv5_!$/xg>hFOn go~ܦҙBTvPwdW 06ȥFΪ>jDzzCDx}`x /9*XK ~Tmpj] έaBtm /.}XU}">Z]?'FtsO>2Lg =|o%j+)'Y`LhCiK_=4j™msyK@8ږx|!Qxڈ>ų_ٗ/ٰҟYpq93ш&bCsÐ|9""m zꑹ`U%5㲜XI>'[;-5CZ$+`@v!,k"qc'+Y1:Ɉ`f3]+.H6 &0GEf<-s3 VJf̶�]"H25pڥby (�1R6>=&kOSr�7xqwCY%eqU_XL00xC6s.B\.-$c QSC]'+Gɚ0Y쭪.EH%BHQFHB1­Su�暼Ɖc$WCBW}&Al쯹Z@ǀ-vWTA6`'#KG >  PMbYO OP>> 4d4B4BU>!�Oq�GHհ.B\x rߑ]n;P`t"DzuaҰq¤^ Dfd Zja}LcxX` ,z \}CHtkow{603=+fo9Vklll|||llZr}p勁BPT XEkanZI+m,+WH!)([Y[*u7yq]o>rZ../_^Z>X̋REJ(?|*Bv&wcvzioh֣+(& )a&?^sPx)MxqMfG15 ۓs{YB ۊ~/ [|Ggm^Op7),X6nl$W ~fyqx )r'NɏDS׊9 `3}gY2@y=PlX|?Ϝgԧ`b&?z~r/'M9 #Sb7pT|Xno}\^{MKӓgy"ȍE61b8GwΉk;M?T"g0DXƆcraZIt쩅|$g}3s9"p_~r-� ~ߚv#j W/\Zg7 Qr#ƿ?�\l<Ⓩ\m)j7G~0"T<P1wy 5͝`&�=j~'",- >;'ϝ\c7s]i3h-xqpzu&gO,_9?m^aSo&B&⤰Df$_a郤7'8n Yo]Co5v56DkTLFqHQyrm~5su J gwf($?� W+c�V(i#qH2FN8T �%( B\GyY�%_[];g^c1y\)ϱZLZwGFc'̡OBzFdsD"<fywlGX1$]qêA}dsEaO,wNihƶEyRuʼn[ tX8BhM> @r!Z(!�p)Etb(+M$J[l6M pa_[r~&Ǎ#i,I7/^v݈lD`3<Px~8. ESgH+J.f q'$-S}O^0|J~ߑ9$It&&&ƺݮsMQ5Z~V@VM �2\)HUj<A8pOa|!z_M;g6/.,\ZX\CDT*Q@?4u>xl`�Q4��$)tx'Mk*tm =�zRONmuM!/|OYvm/<\@r+O^8zMֿyqiss? "2^*ooo\UM/|l?gQhyq[ǿ5ktjW|\]�.V΋' JMyOk3Marw&S_rñw|O~69m%pOO] ˋ_C_;=F[,4,_ t>w羗r|oUʟs1y+ =QD=}Vry)_֟ k[elUV*[el.$INv:4M$ID)U3�j.)(CaMb`ҙ ̆ÕphP A!%E ȋ|X z?_ky2Lm7#~}vLXp0\ֲ<# D\@NXZz+%:-f#h\E^!IonRl"ҫZ, e7f2.;uls'6{RP}&ډw *ύ_#SS#C_Ϭ J~TБSi Rp�_W.翿-B𑿺[7Y{(`&?'M,$ًO{`͝O?Uu>sl"@ʍ/˿-l6B=w_3O~gad/I|hDkǗWs2\lAuĪZ#Qevs'䨨4#._'2W*m6UN !;wbϞ:vy/,šy{»sލ`3gtʅo?{byA?Ͽ>K4vvITW?͓¹խ3C?_0DZMc jx< S?;'U/{cJcWt}}*䩵-T'tuKF0"lJ=thoF=1]t&'W+?O=r*7ꅿԩa2�"@WCuYAqa^V<,Ds|qhc'*EƹӫBl9aq'[i/ NfQ$ Σ-0쬽sI_ ly]t|0H|MC<86o][K~*An7k+ 6b[6ʣ,Kc1I#D.$2Y"H`삥!Bm!S! (GdF_w$"]#Ba:wYoH1a6 {Ҿ?+ 8J CjQ}O#ΫΥ'h>{xqt&?D +4FsE6� T] q=AU}nÒ.u1>Q}8@!Thލ> W}Gvk^FRoq#+]3-8/LBhzʼnJA`8ؚ:AN"~HW8ǀq7$B&G\ox@J ` -5* Dv#S1!M6*/J4MvjZ4FED/}c[.Sy^ )EJ"&T 0!rL4dkjx6 =wwx=gǧZ Õ`ϋL@jBVyu6T )m%nNREQE95zV`N}[S~^g,"94`]x[4+C us&Z}7nd[i'V?h{>oz[gC} ǿs_pUdCztWixׇXFX׊Oꉿ(.ϜXy\ٸӦrz?% 밶}/~/Qh`؄<3ѽ:ݰW.wO=܉3Snm)z0ю8uluɇ.PcZ˚FC�zcO<zӻwMw Y_;ҥ<TMg/|CM⳿}7/XOLGٜqP ePlX$㹙͝ #-ش(i!fKs٧ oxv7!|O.q a ;CH49 ظRMY]~_Ωol,O=:ϟD3ZN ln�(~];[nl۟"Η..-d|2rׁ:/ǿyoz{z cC_K™7p|#xi>Fm>3ura`o/VG;˳:ķ􌷋 �zͿCs}[>S=p[3UVe&k8f!n@ǿ};f她yڃCw@=p˟_(VQ~2c.?21>[iu%W.YH\Yl> 'P}hU0 C`qf@:,0j븵@@%qy~i%7{=2\ <i.|Y!Fwax<|[@#@3pg-BZ"C':�BdS##xK`B #5�6gP\q78ȍq@ jn33ڮ6!bBy;[_`1FEhkv8wD vw8Uz{8zO4\]ǦCT}X Oа N3 6S}#EHp3FQ >^SL |G9W$RUs|.oB'qOP>Ͷ8D`P|MD#J_zt-d80}svZBN<# AU^v;@ B [{sV+ET%�g͘&EEHDTAV+M]ץwtvJ'w&%N\xnaia?"DwǗãx%mEC T#]MAU^.+Zl9.J@4IDT�yQ@^@@۝G!|YIq!ky֕3wb|L |"k#O=/7$sR&+Ⱦx鑯^m79}`Ko}riiW|ׄ<P^#Fs'C7vN?" ǿ{_xU`c#ϋu宷C7L`yS?Kk+z|+k6V1<ý}`-wϪH`8(./|[Ej#+3s䦩GlLZŋg'M)?HdCꟜ{kWx`;Iy;}r%7Džb_EETЧ~>Nrqs~Cp o$ǿ{7@HGࡂE ĉ ~3z9K<�>8SN>|։o:tԨjs~!^6kh#:ijK+KC|>nۦPqsgyluc>cV҉Zϝ{k}:eŋ'WN=K C?7:]f*yS;ptM9i K'[9wc'8߹agEg_X5ʮ=:Gھ3?NA+=._X{+P}f˲4?ʟ7.i{{5s�/Z9ʉg}aLUXYΎ=P';I0ӏmJᅳkO9!|{m/7ם(s7|_K1Zڷ{uz@G&A]/C^nH"G P�'3<=Zzyщq ~uSBT;y#?4oxg+,gqYִ q n+ˌ^4O6Zp窸A Q/G@L{L-,@lt/; s"[ .6X�jE8H׉% Gtikg ؅meNmD'6}Tl!Aft#<Cl0M12z5 H/%2vMESO3vLdaۦ,O)ruparmRөDDDY peQA""bف��PQ@y AðL+*@f" 2(3њhVv9r/8v¹P)E !U*MT+MT%HPeE3!$D @Tb‚W5*Z`_lb!MէB_ zK<"/3TjQL�6ȲC/M2- JY$iݯՂ©2^㿾eLC<qÕ<_G q.S6ct :_,�Q|m<::| vU Bn;pt||2L'[. / . ʝ96ZuAQ򗨘mpt{b*H{J07\_d _5H1uf'Vw,YYʖ W>pyXs&AO20>ٶ33ҋkή;6wq@nO#Z/w211LX-  W s Rx/3>^wLk|51jpyq47|a]oDdsGǷ.//Y{nv8FQh樌lH+6Ve!* +7deۮ&x26r0\Z, yNњn�AX6 #7OLooO&R�X]VV/EcGX]Vo<H{)k+JpepÁnx Ooo9MƓxz+ٹW4ԈP k6�7#Ball'Z7v{IZfϮk ڨjӭ[-\ofH׵}{4O:{|ͭ6oX*ر;1ZY^~ZhQ% *tդw"\s*EQ<^#Q3M:*@Y&+l]9k2}_4BHĝkNZVHW4W}[xH#&Q \5jjU {U!E>!i D60bF;#Ҭ4a TB)H!k FG6J'엖 VR..sYyeYw-o%P%\ͭK}�*qڭ$ELҹSOx~ o+hIn)dpPU \׋H 0@�,FJZePCܩUfD ,ͦz\U5چtLojU//0*I.̢T`++aoN{]H` Uvs$H`~}f_xkvZҖ*6 lzjyᯔ]cS6~AS_G7#{ Rjx[ӟ|C6 xT/*+TgVO=1f,KW|unc ԗk`Sle1;y]m+ ~m�eG _:2/sl��rapKظe^<"FZ/Y3:~+5..+Ve[5Vʼn+u0�!ryaӋϬmܥɇ'[gOt"O?54V*[elUV*[%*e^'MSDL4`0MMfK)Peʬ0}YLqJs!+hvo59369ݱkɹS'.`S6\)Ǽ(*iWTdJ%"+B&&׶̏u"*I)HTMAM[0#ARv&00b>Vn64鐜a b<̬qtZ @G,߇ l] `޹v7;6C5% W>5'?m<m ^ Gbʥem`�5l5̋FܭcL%"13`( hߠFEӶ!Վ(f! *!fGVD\j;B~ Pݗz܂*xfJd_پ37@llҠ5]E 7Gdo<p5a_긪�r*�d?A %·哾6*1UVi!hQZA4\pȌT8ЂQbydk7té!!  F!B!!QSr@u~gNgoc/2rc'b [i^ݰ$yQXFϮ.TE s}B 'YlJҚ*ݨP[yk"`(BP՛0Fx(B�Ņ b3CiT!pKcO-qc'vC@|n?!Fpbץډq萁(iZd @fT, ?jS8Nm,##\:4DcC"DS k숁GI4Bݪ2:kryn�N�@$yE$džE1ͰcYIMB,ՌxS}h7*BB" 0$2NJhn=AN} FHyg*yًj$wZʪ>2O�= e<A8JOE�\ D&ؠ=)\/� qC\zR{0x+ز0'U55ƾ oX]`"y~@Y ڹ 8bC|Of<>Y5GmbC$w>B\Oqtp`#?3z NkU 2jcR rxF\ !cbXe5 GAj`E'Ez 6OQhDG3(lITBn b$vznt:N.yNfU!J"?r"աmh;w;?xmZ\.-_Z PYFEYbXTir"L*Ph!HIE%0kCnWf!@$$QIJ&%IQN;MD *Lb Cb͡0(�r %D“KƒfA%f ?_|f7U& ձ{lUzRQx ,^nc(̅Y.ҍ 7'kE.H|O;;M4d[7x!q.6FDfƉ[,_l `1%_vXZXj+}q>x,}{>L N<A~mNa"{w X^ Q 1oCc+B#'֘ EֽoמOh% lp^B@�!*EFr\n5.*0�QeX yރ2Cr!M!GH;*o|/v`S h kE%b:|:7a:Q}67AA9R} :m]p-́ A�$[!30' �{66vB$2 cqBG@B�|e#d яN@|C[qT}B4*OYa-h|@0;v0B"`0];J`mymQ}c | xMF4@!q*G0:$o (z&d<4s!'T91yA#HR&i|sZNa"ƑDT PG)B> �Q P' A߾[:T :QgÞ`=!]NI̵s՚1.t:p"ј@;Ǹ`n,TCZ5ѻ^eF&-I<[?Av@m#4 ڵ+IѝUE)iZV2\\Χ]d0DI �* ;01۳DRV++Z^d*MvE NTD*_�׻ D�j'1}}f+@W#A?E^kS}S13 id)?Res͊Rς`u- 6īکaD767b֪z&P 1TW$! WT]?5= 䲄qY#,VhD33L.Clgi{=ROsmBʷ0s�y&-as{F'IJ`C\JWYjhM5� Ilb˚A V5r:,T.|w??@{`I7�=zPL۴d@ ,,:!Bhnm1TgV+EGN$O@ fbYCY^n L~g yt9# Mpd�Eުf$[ !G'>zXI&4 =󛕝rn/W}Ȁ!a!$ Ć9F"Dꁑ-}Q4B\X ^ 8U"X̂Vմ&怇! !Tcg5@G#Gg\P`06CH`+} E{�0p6f+: n# 0NcH;Ӥrw/ ~66kXjG l$6pGG9NzU [p!cz]rژT!w[ġ_\AYLJA FE/x:` C�(Ēd!QȎV":/#18$OA41,A�vdFu`ȓG�GG({]Dxq7*Bns|2$]X56UF'G&pT_` H@zOGog=A.p<!o0p<As IM'i;-ؾma!lWs<?GHkgQ-7P �BD"N & G/L*j@`U# 3rG IOL<V,<V c;s\67nl`fN{[e)$Inwlllll\\.<&%| YF*U@>rkoSwo<|mMZX_[<9�I+ISD,"lyG4@5 'iSo*BDR*m%I~Ao ��i -D$( >maTX%eq"̒'R{r@:ږ= ћ͎ _LEm葎q/ՍDWLG& eNzefyk 0 ѰFjyR$ʀ M+B=gsBl5pkIygUC@�%d0i{lA*V10sőlF c!d_PHX']!Xk8] Ή$ pl?HT0xM ȅc.,ȝ{!(GTYX Lh9䲟-qBU/ũ+a{B84LY!(@ `CV=3'.5p*B9aA%5ƎL> Sc@gq5v "RYDkۮ-a1~zee:xUb\ GA9AxDɧC<#E1D4 "9:w'̵ %NP(Ga,B< p#4vҲt#MxZx~TyO!x[` q<?B|Q]NF$} p�UG d 0!sn%:B lIp( B<vJ$wҪO*@)8z pۉ|^tlfk' 1PkYwlGXQ")t9;W#8X\8Z+@YڒǍG1#$fw`?5Zדr|Gy~tsl?@Q8O0xNukϵ=qOtņà\p)#$f䴶15TM#5 ,r̯Ix~8V:P 1lyόE(dD!##!l<QЪȋ&7Dr=AW8fX4RLgEQGcKPNEVZmv61ٱk3.^X\_[[YK4o%4A@XB^/t GN*BޫD9*JRjeFU';V^*5B7U^2*V�TWÅN$TV*[elUV*[elUV*[elU^悈iiZEey쁤E"/!`T ~<fn;5>1{Ծ;w|gN\r~ymimQNN$ b0A<,/[9WW!�"*PI i Py1M3GESxJ"$:vj@ɯaQl.fކN$L|^.&)Uvs'gxSdn=)o=I9Ry46`v$OElW==5}i%fgg1iZdggJ\;@̞F;3Tv(jzE| ̬T!L98NIY+NB:̈@a|v"Į;Rrw8G)! ;a_'+=G z ;U zLZaK > q>7<T̍v*85v1"0r6 B"<[k|PT*;Q` m~ WK=E;|6^ {g꟝u$̽rw2 kigndAk�C?3D ES!Eٵμ6|kFmD F +Hm #D!d0E!HB*h!7qB Q&A:V0ܛaai.!Yk3N@7,MuE-Mj:Y6N0DH܄Z`";<;l>TP � P|"<B"n7ݛ6.* |aWS}QPNV'`L(@w;_#w@#Dw"t\μhG0< BN=r!8B aN0KaiB~Y|Vi >=FxҾWG 6qdFa !xp)WfߵpVEL+خe$Y8:@c2+2OEfy~SO0|ŝ'% T{:#,cTAQzՇP}ޠ3MkQaTT v3/'Mmtd�@d6 "ڨh q BI5 x~ľ|,e_[n0zsCy FDd? C/[7l6`瞔01lk-,Bꬭ(JVv{^K4MU&r_>� TA*/TSV0'$P*[ﯞxA0yý{~onuۓXzYU8"PHXf?sRƷ */!2PRHR[@�N �rD[okPDLT?�Ȑ C,%{QvdBL!:Xn"Uy兜 + (]Y;EDT"Q*tD E]E5g!O:9"0x tW`@q≐`qvFb6wjsz#%^`{";IDuEq=cb3twtwe;�q`Ǧr`r_3 `n=8AX95,j\vY lADDfsZq'.*X�*c!5kl.BP4F/c,쁣9SLcQlNe lTJTJP}_"6;/ l! D�B A!H !QŠ�x"R4A c[B#Dv_{@Cc'UC bĨ>h#� gT0!TT ؜q鐳ͯ ؖ9o:w4, �[88p |ARY\CbF l!Lq Z5 BNqc'F8oI2 !}̨!>J!rqJ8g#8B`qv B|ćTo�JO9"js.-oBяphn'T]R f"Tx0W`M_+`K<8nHy m| l ?7 FTfqT7rX\gA'L59 O9'�` Ϗv!IN"$ B ͟x$  Bl0;?hct �65v x`M+|BalWT){\)nIBMH*DJ!TY^�dlRֲl꥽=11wsN__YQ �,Tض<~ vB�`*S*WI〗>E�Lg´("WV$aG8M7L) 9; Zs6ٲ7eF? '#wtux)iņ[ *qXY?4dچ2MM] ae C؍lXr\II%17>}|@MK0CѸ8.!�1mS1@ÛڽĐ�YE>78X靹h if�BLl,A'O0W"@ c;-B3:Tw9Cx Q,%N!PYY!ğ !NyRu1Q$wu @-|a !DYZ="2ZZm`c.B"0ŕ�F LI`[alw⨾H cԈ<,�S}2EEB�51>f@v!M),#ı!D"r"(O;pA.#D,z;ټB 0vNX5# U}`ԤYC KYhmW*Kd#C1ؙEp__dK868, B|0#DvH= :X &X`kT0>ϗ[Km2s@d@<# Li>)A�!V(O" B|7jBd Nv0(bZt8!6ҍ 8�f%H+=/{aPLjǐ3frrH7bA ق!Y bs?~K0?z$9H#2;(B|{SO#X}vjX|P'} xI"8άH8/ Gd!Xq/B$x>_. z$Y#$ R BFy8z[{Ygk2 jH> Owc*\O;M5B1v˪-WH"bTGDVyTGv)_L8vg*�sP UQjrQ0QJ Ҵ"dAcÙo]=oٶA:_YPLj'i'I;*i$y1Ϥc&Udb*tV�" bB�"&jRJk7m)>ՋGޙ jXmt!t إ~#"W}tXB9K$Ŭ^w0Oq K7<HrVje\N͑p+7=v˖YYކs}`�_`<oڋ y_Ⱥe9&r>6BLVBH^!koR^|߈t�A�VHlP"� ZqA T4!Q) om8ZWC(A "`-b�Y"6Q5]bcN �b `:ʜ Aς)N(HD<l%.$AnTb|lhU&b5(b|L`Ć؈`BBw ̵f0BsZfA*rIi,b`&Rb#Jz!6T>�"\ p4&G{ L{xRI|:Ao 7I8 ctK:d(.p `.vhl#SDD(@pG!B* (::=A�6k$"7ۣ@.:BzTcxWz/(&B|群?P�B|O!XGHB 7"C�$rϓ#T!Hr !>pbEsR6TZu4R}pT}> #8jV}qf"CiAw a76cpk'$dnC冽b5Os?6�-i3`kjWfD<AR}M<zamho],{`K$}XlB #$LE"~�!@p.G3QFB➠ZOEHؙ< 3aB zq'ȍc)=A C< 5sHi(\�.63ia ,,i03)aA>?�" R@ 2AT� l�@)N<g}]ΜX29" <SD "B �edMZLjUSlp!+DDTET06֙lx'/$}J`$ � k8 Q?]ayCO]�Lc. f|K147DnF4nltrp=YC='X ߡA[]Rz$(mEʘFqBMzRhϻFZѪyuzl2" Ľa_7)p~kT'SN*n"rtNa5T ~6l�66sG&tUA_ywjv)@i(As3g. 5v3 'e! EmUcH0pj%BW!8 !`mpDHؙsEڣ9+Md$mǍS5tfژ�|kFQh 0 j]ݨV:U}: gKLsМ{k D]񑶿&:)2pFK"rHEiUh9*2aSג5a a"Ī�*]6HDRfjUF]/G齬FQ}B6^;gmi>(lC^iVAA\3TT_N13G 7QSNk6(Z0Ħah$3JCvUߵ1B[[1IR(`Y2kru&I՜PP)'� P@@@P.\IE�Ч=>v:m;ٻ侹]:uյ5VChyF<�V"ύhb*m$UԴԆ''Q9["U^eSށg ^Օ @ëICE�ӾfR9a1�ȣֻb;/L%�Og:W#& mE=Ѯ!C<Pv Vr^m4zC'VmTA'chdudx!1vA#HPtt/bJ-7鼶~6X{5/UKN DPjC}q]{cuW �BEMjۘ5WFx lklQFdO{f6Qsj<v\ή&2&EslWW3GVtio"xb'\xW XWG+wrb<dU jA�# U|7ru鐀СzXQBNPDr_.23p*Fװ8{Ϝx|Ѐu7jՏ2z@u؛T[o{H|n"CP|'y>[<o@ ܇Q&[j>{ce;4[5xbR(W軈a촥ߴPY彾tZC }8ԗܡ Zys#ׯu#Sx܍( 䳵5bgچ"K@q+XA3R#:Q'9Cw~=d/WM>!Afg<48z!gDUⰊTF;?#Cu8</ۡOF Y<35#` (8lyOk6 3=Vy>{<"[Q`/͟k"AjpPFdHzX!фNB&FecNVyYR*Mvz^BD/_oBUK)E I(e2SQ|0. w[w>-?t->z۽IkJ<t<1>R|%/wcNYTl81S�R:NQk�T�&dVQN=JARbfZzWYjy,76'P-;}{YBwoa-Nm;)7�kvYukA}4̮,lѷkB[O2ڜ /d{gdW #םثyS\`"_]mMLԓ hyD^"@z\GZk6ry piPp#~ E0 G:U3ް 9 l!$>jr;@ܩJbUBBL[Dv`0r`Oն _mKVCB1@�!N}Jk9i/oPۃ3U&¶ (QanUFT&ϖHZ⠂x6v+G;z"1&0 !  z<;Kvl6q-EChС"3:$*642gm,5v`4.ItDAo.F䠱c}dع!_d^˨ȌYsڶd-B|X?'C)F\ rK�Fx o XAPd_H Z !EkyClQq <(mnN)A 9{7C*"DT|JpsH86(m€> b1~8:,r(fydq`oc`5$(8WbB!a1Ð'ҧOУOV6’#l<hϷDq(b1!=X77 Qe 6/j#2+y!bmΏ?�lp\3�!2OП*R&$IjE1,, ;] 9 �6v3RJ$" _Ͳ,M:*iw:v:>51mWɉ3'Ν]\_WVANg"M: [DUokU~ŤB*cn�5."B*A o0#"%yB*1ҥT ^i/,xMjZz7mԤI9mlm:A)l%LҸ[`v r+dM<T3; 81e0dz0oB+Fy0rlؓ6U ]&J'㪉 O4qЊ@\JBw\jk@E!k6S! (d&ҧcBN=�t,+s̀-\)9!8J�$WL7a!6fytrKPoH Lmc&tB|B<@!  !n}đzB NT_!HU !Viϱa\ Il WzBvw, XxjFl, }u p lEHq:P@£?."!(P�!!oEiYqP#L:r]8VtAF!dN 'Y f86hxԎ0v2lfil[Q<dA?lcI9C1=m"H},3v=mdN=~qiaYSLJAUeR0:Q|׆AY&U ўZ5aC-IQQ (_9A_t8H '%g�#skB, :Qr?Ǫ IY(FKņo1'w"GD8Z/C\q ,!f&hP1 �|d1g| c'Ȍ#j3呞ތ sy!p`4T}^3VƁr4gioe2#$`mr<D@#jX!aO$B8Ϗ:}o!f@x+I k q Gf$a* X c0Ǝ z|F68v|@kȞdO'U^]\jn-w:v�"*~&DUk|Ka @$G)p_[[_/+{krλ8p~COOoG^ 0_͋~^ ᠠd_6~ږ'�JSNNz=gpI �J*DUB RS ,I$!.1IXʳ�'=k]Xw{W,_UBxOTZIOzSy}/W;Z?vB<}X1:ذlع"88艵#ޟܒeaZ;wrUY]CwUWwu7�!DQ< & 6  ؆�0`6 փ,؀ !zbMQ"5YΉ{aoVfU?'ZZ{ U@&(ik((D(u$Gܣڽ+ro7C88 s) 1e '+솁L+O]Z,P Voy`[ x `�9PN1!lLJXk1eJI!vvUeEԏU3*ήa;$aBXY^&HU~$5_4mEQ"SnȲj*ծ~5^dF3t wa5�)Bk& '1VS|P+!Uv�w٧Cnab�77Yg1b8ϯ7<_ ej`WzREy`(()xWQmj tK.AHK"!.H B!Ds"Cq?:fDlc".^lA3@ qQ3uqʆd`;6C 4"19.t"gA.t0<2dF*YȆל#`L,c)*6He<_"6|*R8G@39.K2& }2}D1yTD~WE5q˲pN')A<yV"%zC*4M۶y/hX2p%O@(iX@q0B uD}i{+lh__>xqm>؞`gJp UKk_xׯJ &"�jGO8=:�Ok30 3w} L!uŽ&e t>w ܯΓ џl$B$ŀO|۫jWzn oLM jk/|3_Q(8A|~״mɧsEfV)r9ΆEfҲ*CJʛ̾Ehd[zqKK[Y>! rqŗi4CTZV~4q_(sb/yҶjqI`hq2ΤӖZR�U&LEp9 3@*N2A љVZD#/</)v@~YR7˼[>hޔi  =Ұ '+#'s]hhkhL7 1ĮC"gWSp#5!ۺuv*ȹ+;Fo؁)F;JqO?/җ/y'u'E"eE+"OiE雓(PUq1b3!n+W[\#.oC,Y07tyݐq3/Md/twqHpUXIUw=Gi4%}Se&^iT #Aid'XKq[KA"{kkVtv&U 2on`aZ2L1FzBfA_9js7]@ePBȜuE�[CȜ٤ \_djX푻m 3%Oޖ1ס| 0BX׻ݮﻮ#b`y�"@�@��)ma@0b�iڦ vvvWI۞]=9}o=z]o6nnab7CYJV;`; $L F4�iP^zήHm9Db2okgJen&`+]Ek*@Ts"'^=Q(mݤ{ R%Nc)j>1e=wA-[�Oe^g1N 97 3go0-eWd@I=dCAOuPw-P`?E>}s2V6(3/L:_"rרJHue{H9YH{4P͌J#V˰FDڜɥ"3.~壯Q BhJ%Q 9r+\/QQbψDD"xJYiE%̀hʚ{\!,r6/I-uDk9Kϑ^y!'vs)L奍~*3޾mwm2xV4y]d- !DN{\0ѓEJ]3 .3,,IK1zomYEn[ RqOF\ v" ŷ[UK> h VSͯL<d/ͼZ>J$$<V E5g9A�c]7>)0a#7}EQQ|`MSmWid )i [_q/Tkʎn1ϗJ_k9"Oq9Vo\d6 \ /"|c8 D"+BNUMPK3sWccJ>  0' l!� ) A@0;1 (Į#mжfznO7_Y?~{Oy h) RzN׫ӓU/eq\N5`>ͥJH+ӌOL㉽M=m3x@irsz_@#p0wyɸMuRA͝/9C)?lGAEII:`VOuK:o  c\(U}%]d.[,5,>{ ׳MGAc/$ in!Y~)T4%4J23s^^؁ glWpI`ueь20oQAݒeFCe?9w!y}O@EKjlB l%"-Ѽ C?I-xڜDH^ SLuEM]Pv lO[Nj%*fSl:.6*`I١P9!vU4#46߱@.}b< ww; \$} Ⱦ�٧C :Tt"W;k@_~ô`HdAN If:D4,nuXdgqXaq`=4I<ڻDBfOsvJ4#s2B& o,SHj{Y\ dzYRo]SUg'mx&�A&Sد‹allXI>h#A5)[BQy WlI)PN/ {+`w&'y~9j`rmnCr_2L"<\ VL7r朣nҸN2S }R-ie "WPQ> jS:jHPLv,?z*<_H0t")e|ϯ\9ǹ=T#8IsosB63_bp*M'yv6}"6YIH@ȡ"ag" ! 1^ ))1MA0<#E" Elb-}m[6흻=>zޏчv.a b�0qZ\L�{1$bb'/"@ H57* tu �i/OŸ~Ouͧ8ا:wV! H Ѹ%Rcrtz@:r2NL1)GISu G)cKsd"XAP&Ӝʔ�DE#027M $LSSY#b})/ƆAɬ6pa!d0_8A�I@O oZ a X-mXͽ!b�&a#!DHMރ‚$[TSe;t4|b8S#$Dxg�;!mDI'a0}u!r(bR$"BH"A}G $�+.1l$E.QPL! I|vv� ۑ-@6}r0}E&wPΌ�i)Z1n4HtS%l(g  *BB)@Ht"B(b<F!:-WCgd)Mrv`A<!@ I$Mc̚¡6mI4Hd/!$B.]SeP I"0xr0)H2pvtJ <aĄ y>bq!C!ɜCțp2HTZ  `+ hRF&r�U$+T ΗAJ6 \aBʆ-NYdb[!*l7a.hsԦFsdl ʉS3}Q *arse7s<W!kKӧ A[;@ lAswA)B9VxE$8d$}2OFO>.(y( lP>'LRE%P<_wXԲ)6ݘ[M_:<1}~$HU><_!#D`PW"AaH !^$Hs42 `N3HG^9GPIE߳sTpš&8I#dҿg!-V3nH * AȡDlvZVaw֖(B' dD /�%H@�D](B Du뷻?/ӯ~?=(6'gyAËv=DD87^G\K?RQȎH  B=@ jU6H=) q' O=etP  O`yrK v^ѤGd$dJTP�$8POBPV _24_^1^|Ct@�KAܰdn#>H@`nĹB1V-lgn2V1�h` H ! !:</'FH)?n *  SQ6-jX�R9S 3*y>fƸSA B|R"(D0<Bx?Z؋z(x5@e B">@!g ul ]2e&3E2l[,R aǠ!`%6)a J>6DO>LؐS1D@ΨNNxHD5 %#D88!#ݜ&8Qn ĺ/礘,!BF +R-F!2B tvBD Q $=@cCJ5*R 6օNVtH 1jI&BLj萪c�'Pi$Y:4bEtHx C :EX:y/EUV6TY9Yl8k4χ|lXxr)e�}D`kT,Ey@0 B q]no!ST@H-##B f@gp!Я]PB$}ذ7} EJXdR5}P> #U0}s"=ӧ;V 髻Ŋ"�m=s4CGG@.r5(Ɔza{α J 8 9l 8f'tA¬>/L[ L_54FTl BDcAs# Ql�$�HD8G $B܂ B`H"+<׀Db#9F9O1 lL:;A)' ؇ZifӶVcc$>BG"V#"b!QH1� ݳiZlC q0M 5)FBB >nvp'_|o}wU94'mcbG@mB"8cx�0XD"~7cV"(o\b�"t!  {^u݋߻~ic)@&D ;xD@bO}س{JSw'd-z+èΏfÚ=zjH8' +ɯi1ڮ<œXs{dY&/XV&.G.[(O I /u 邖&WTeN~"Kka9W+X&@"Dp} /*Ctn֤U*D3e s'ʍf _$OqIکtq&ԩ|[� Y]$bE"O@sx 4'�R[gӇ3(pPqC ImZ g@"Ħ<SPBo4aݜҳ]a( A!įn.1S=!O)P"*ʹ:;ybA'rN9NpEJօM=Cxp1 cmMA'/>4kcc?/*hR'DjJ8G^&KXPiIH L(.ge I2u3һ'O"+gXr (;y|)`;+k4y!*=zx4.&#Q/Pҡ?I n|4 tEЖcA5B#gOw>AtGhM~E$jkADhe l!5C,sLzo#h.*]<! l-B !P:G>ƆhʼnV~ 77}b Bd+8<_Iͩ_+l@H'ZEHqVƗ\ :G?,L_9 L!d:r0"##s|" Uat5*0/Y緄YVz3jB;ap$i/:�q)! (! ` (qqVI<k;_ ?Y.m?|~]0{۫0p#4B=4 D"R^��qX 8R%\ԣ>}aE�$DH<ߞƄ{G "}h<{6k #VhFSNCDMf+_?gv~eU`T9kgcR<RYy) dKn&c{TɛeYdJJgz IzcHW[Yh!rV˯cv{  փ^-A~VE%NuZWj͍ՐnQS'P!0&ʮ5)-9iaTzih&m)'B /[ȺDmAA^/q—">B6};3m9^O|^TޣVK/=iݒI6`n{Mg$ᱧs�Y=aNJDMx L�i,>__1%`U[ҍm?<`=K\[z���IDATcP{d=nk" z+fDN<YU;\w%0Kg'aA["$Z?g^Zc`rbYsUd�c7^FKa@UI(F>h;#Wm_%'�#U^ȰgS/ArII(gMw :ّ$/v4) e$hkn<yڿ2^2OO2E}s̨d&CSaMƖ.NUY*O34Ÿ�qY/YA`22(RLY;PUNˠBK%V;qgW̨6%=A<CISqiҦ0|1d^2ԊA"# Oַl>:ዟ{?9Yo"j¦iVW�'BCoshX)?i<9OSZ^F*_1`XA`V7&]+;=Y5sT߬VnOhJeҫ?^ rb-I[9N}6^9{9N=pet&j]. z5.ΐ<4?B^� fPbGs^CzDVSm@@rsz; P kZ̋pÔ 6wX-7Nɩr_ZB. bHy<gYr6nݓyy?d5ssZـST8=A!7w"pJIG!^h4'2V"j3Hm=-W^UITU,8-dYV֨ɕoY( ~=1n !8b4xpv,r]!F Gӡ$ؾYuvv٩ ӗE-ŐrօVIJiː|^堁lK<' ӂX"/rvig'0} !-svSE<_,Qjkg\ғ@B*M(<*diG'|FI;?+sWI`!I 'c:WBK?:6bcbPx/mHjuB=*H]S8oil"Lpۃ"M!څ+sLue3Hn$8-Ả\ 184sRT:GZ+}sTT:*WW=r]"du7G 4_uğ 7^8Qإ+5-ͿȄPZHq�4k̜:Y[(2:l `u+*sĺ&8_ǀ?Mn8=qjYٞB^yzo~?鏞8Ŧ9YӶifӴíbnmG |Ci)ί@-Xx `ڐy\M^ wnk''Mi#RLϥK.[@;ÔMI_*_F6'w>3ө hSLK[-.N 6wjpW he_|hc+ˆ\\mNʋmA'V '\LN2,ej@I/RG3Q�zs'Y)7*VL92K&3^@frFNlĠ6wc·4Bͬ9Jq!zߞ԰jsT'@  xYL9)3`;;_fTJq6w 0}vvFH鮟4.|~Sc HrATn$M_"!E#"DہEQL 9!lB3E"L>hl4zBrN5#9=0On<B%$BpBh!)e�Y.H-D@9A28!cu1AtN"$eFNqC602l"t:;9,`C7dOMt8NY 91w E0,!�$Ɋ H촜B@#pvY_9?V8;'v!JHނJH% a]S#B 퀠%ϗCk§x<E$%saaԑ!PQA$}I*FRa=3�@t1$YE$hQzTb8δ?H&#f+9]M$X*I8GE>(PO2(``;!9gg)r�[ X$0t$(ct#ʳ^Mřv~~ `Q" V8+,/ MSqxG2fP؎B@"dTl?$ /o!8< 44yr)U� f^GfT)c4a+SȹE56cN #$0f l061 ;$rIUs_!mlnݺu֭UXoFݰ 8o =\;%O?]v.}}{^|)>kǿ|||o>^\\}tvՋzlfC�"" ;C HF�6ֿ%5D]z2CD0%@"躮] zWWA_C}Оϼ&Pd0o:ή6b?& G# & W|b*zR$~m116/1O k&ܲ_+"]e"Ɠeu8N5Dl<2kK Y NzT1�\m4h9iR,qB29Po^\AZu "ik6zʉB>Il(/)>e26,4b0i)kTkѢxH2^V/|X8j;@6SL9Sm=y5ZdLFzH]ժbYc[ʔAfgWӰ @EЎ !SԬGVM\i|Ѵ-qDFO!mتT'"3ܜClK H^3r1cqf_û`S"tB-LRL@XRj<yj<|m-E: D UT2{ 7OX:!DBaPBIaѳB>$yHpNdkC�q];fDlc".^lA3@ 5}7pS6$۱!]URqsd9 rI(A1 s?7tTM߬@ըTE6<=f`ˆ`iKTZ}W%B Ⱦ t`N,ET3h3!P $o1H<U;Gf,5I`4O6=m <y"W/@+ns۶m&T%רI ۦmAm]zjoܻwպlHvwn' MB: B@D��E@GbiVϋ\~ݪ7�b<�^8XN^�tw?W7Ḡ̪}j2TF@�{?! ,B*f0s݋u?kלrwϟ>nWՀJoLM  ÛPH%@ImjzIe zn/мrTZSEVmqK s{/̒e `'Bd OC ++Z~Q+ i77wZ"VR7`7WPhLswޙۛ[<mn �EHgۂi[GIr;!zE q6E2P%yGy*pR CiTnχaS&A.P6 !빽%rE_z<;BGZS&#+Aܛɡ쀋 .J*z6p>@"`Vg$2"?\J7*89`pvU@vsf=x3 @~Md]Ng^ܳ�d.LW ( go~,31R\P VI *M@D]U,otȮLtH8%U%-~38sjrv(Cu�!0G oIoᔁjy~rv QS@d<DzJX3}UU̸ O ڗz^IM;og:,NG!KE"<;VnKʿ j$#A/2WfAbt`Vu@ݞ.G'QM""ZF+Hw܏77kSQiӇ>(2x!so}3+ (Ӈ雌}T}gZ6 )gU'rlkw0C=(LjJW0s'LdcP68GvI6-9NijZ\"S)P~Ę0̫NNNNNN7znv\ojn&ŋsx77}]ge#аYq@ci s^˼3d1!&[<Dh�Hn9w$t51,ΟjKdʂ I&[9rP2Љc�r*I5QQ9 U˃Q =C[UI7a cm8fp8D=F顐ROc_Ѷa`6CDs7f2M)[V#e-d)IǥO%e nEp#D#*%R"*zM"S>؅Tr?k; SfD$Ab u Zk q2ѭУL /p=(LYNq<d4G|dt'LB2B l, gq8m.p+k2IP,cH Oociȓh8;i7H/o{ <3?Ĕ#QzȨV uew&MYO f3E9ᕾ.�'D檉:!2�xv@|j^RG:, EOС*oBH@DŽB{\qkghJgM(;P'zYw `,soD^IWX8$)m ܹl|DT0< 3 G,)A\<*IY]�e%ϯ'fAHٰBԃ4_gtvբMًxJTEn[ґ MŔ1m$#AV„ki*TcBeM_axKmX]J۠U*_{wp~Q(ӧ1Aed&"AF߳N'y>T v\&1S oM_�` L_yr}TM8!)W PQ D涾$^ɷ6(~#Lj7V<!II050dg1>_p9abL|S9&Ǿ* >$rsb[/ L/ ,EjZF}qu]w@^RZ!A)1v}O 5 '>9~_l/η:OgK˒4؉$W98FnΐUE `5>||i22r&4LN}KImb袓jodt7bxFIi٘u7`!IYTHI*>]a&z;Xz<́:Cה(>fӅLhA0'HUuKƀƒ#!ltaBa D]fw"M%ce-v!J⋴uON.'4Wһ`"8__NJ˙!l4$+4WfO"yS!9 {R<KDsb[ƼLlWy޵⾤MK&`.]jȄGĵzS; �{_:DM+Tm{]dkf7, gWm !7Pd8Y&vvTe= !vր!_섧\g7gWeqHlev8CIIoMz?L!^ԓ]RB>fBF;^|% e(EP% sv!(KZfD:;ljMX5)mHB]ϦOmpHP5ճJyt|< ,p !M*^:0@?T1 f|)D@KŦ M_rvlxaTE0}׊1}sӫF ՎqHpi^"8PYfSj8v§1T5#[IktB$EU{!z;dA?="wl6?<,lۖv!kcrRyy,`4! ]66զ}n?o?ycgo۷~wquvHAA@HH80�`G/g!N Pqh[ǯ}<Ӧ&?e.5`n4e`!0N?|*;},i{cl@K]YQRT1͘weGdqI|"X"·:20iSAc xCnY\sT^4BҶ3I0A!"%Oց #2ƌHT@5 DV =2alkS1U4vVeGrzߞs=UٰrrCar r"p S3ې !P ۽VMRM9Ig�! d"@)N 1e56&퀄(56ekV!/")i�ȦOlK lf@ l K'^.3a@8;g/! LNTˆ/BC RjTcj@oK!$ `)4BExQT_5TS>\yoϧC blggl"'t@S2K:g~+YɉKFH9gg!YC)D($YԿa W0CbB<@ !{jdNP.Oaj" R1%*쩙*0 4I\$kk3 #ҸV"%BLTB.B0j!aQ$j"A$j&PMs}CQNcFHjQ> @T0}ٌh'|]yfTi9>xd $bݢ Ke8G~5<$قu"w8_ s|CHpHd$dtlP>'LRE%P<_w4TR˦8&�+ycH$"}r$yB-FIŤ%x8]C E4H09G) )`>Pt A' QF kЧ"=C:ēkR�\ * AȡB><pW]V^ЫjxC0$:]NѨjjbC}].ί.//wUկo>x_MXu.{b@R#2KiO_i aC;#�a� )@}^}uφ?'Y2%:QdJI' [ Z`r}9zfW8Vd"2`y50W)S/ڲe_+j7*&Ɗzӏ/Dt ,Ηh&Dc1aAPVNuv$Ak}ApqfI|ZATSsEu ^@N ç(Y>P^ I5l@:6DC(E6Rw3(d=)P@۱&g]go&.sz!#qB8GGd1G;6jb[ dD MnKc]'BufĔSccUn9ޑғ#J:T44: 9hPoڒN藺ej6tVGyՖt^E'7hs% <Ӌ@S<B*Z<\4g/-�A4I^%lRSo! |^K4B<B>\eD"M_SM!b$h;2֋S*H!M8TR7M9GPfpS0S6Q=^0+ؘ6}K]M#Ֆ JB TM!6)0!YV"c!n<cg#AKN }I2�AO[«'O4MURiM`%"3lY>MVi>0]�Rvw 6>so}G6!Ħ% q_H_PBhljD Hcc"=k`V󗿴Kن>"4uh>W>}dՂ3cT.&niBpC{9eaoT/ɋJKPw=�v<w^ՈxDH�� OvEk:tDx7Os{baOkxO!<+!8̕28T>N蹽9zgBIdyVDRNdhFa\�5;˓Fxղ00[S {2c];"�XD3a7HgMR3 RpE) ؐr%1tŕh @hbQ*Azڦ"[(_&vp129!&` #TW,뵌QE%*\&FcGlԚ�!yp$Bp{ J!z׋^5ᒔAH�1WBH6z! L4n>@dN$M:;!@3E1;X;;�q2y@)+"%Bl F+/g) L DoբRqKKP K$KC`v} :Tz{˛ggʼn\<hŒ*lz3[ee+k</|tvQk!s Wl)�a B4'Q|kZY�~n<R.MA0լDQK)I2xa"! * HQXP!K@>.˦CEHshDS0g@]w�9drvU To)~ؘ-@K$W9@;G <7\13}[`F{q)s"MYi cVWK(XgB$!6|V\u0H@T$hZ|̂\wqp>Fʎp� Z, q* MG(Ձ}hTm l\ b4Ús"b۶t^oadﻮn d0ByZw]D@aift}v]]n_]~x~!_~7~ϝ}ۣmgW݋]w ( �mZ"1ƞ8;Ur0X?B� 8@b۫H�}u>ZU5/&3jHgtu/.])1X<)h*,³2Ax Db*.J[ixܮLrS`G^2yU(Y菩 lV2{EHv gSE|dәT]bĦ7j`irۀRxR(&>7-BիU-P!% EL!DxW#BXPvIR2qRL%ip~.mWGu$>"e2QDC#mMR&6ȦO<;Y{1Z�[\?JAH6Z,g\@5A" vBBpb쀳:\^h8%ʦOnDU-1ή0}*I+ղ"!FM53X' ȖD! B+@ihgYg3Pcs$i>@['L̤�+w`EѧC4t(7}$i6t ]=;;�NryђdE0@wAi $&Y;;䮀Y@AJA.2 3bW8;k:v2.!,!ӄ !)*GI+S0%T3'F?;<_Q`H0GK@"2<YBόHFekBY -E(/è3Y\tDs,"A z$XT')G+KL߳d8e$H8@{<J r`7}jQ}(c 2KTx3)`S �@9OK,O87  '38ǒD$(\X4p6EljsT9P`?i<Ҩ^g�Z  jΑst+"S&WY_$iP `` O!3*fC9\'"ZV8"0< cmۺ CxVY#(@S`뻞B㶻<9YݼyrӏϾ}ٳ>8{քUsnvu="ԄдŶhz"\, @"ļ�"@�&֛ONV7X5CD�8ĉ١ʧ {NةNP[88C9C9C9C9C9C9C9C9C9C9C9C9TʗB0xyvx2_RS$�B$;q0\4-`hCۄu컮._ju^}|t+z뷾{mmY.`:4F@G_B(/ @C6t焗wnO<};^Xj#v]8˪T|bvLɹTij·f_'peIr`\iiyHEf͝@.NBŊF^`w>6Sy^izN(J~5ỊMP_ZUauFXif+m~B=r~=T' }ZJ)Xij7wbЎQ;qϑǹyJ2d&"~3ko&!<Q [ɳ˭{tQ&o?iZ rvZsW]LӁ!jVF 4B) Rej (M%k:b(] D`C Į_t6Yh;06Xӗ'!Z¦,!Ě>)Ԓ\"Kl4z(Ǽ/*3y2Y"B%$BpBh!H6 91p!m#D\P Da w,@. (OU!U)buvsP!CsftM(߬dd]0A*97@;;,Y] lE&[�a�AQ$9m*1QW1:NChNl<4 lk<ԘP"/ik#B 퀠j[Z ~gSOSq#)EC$(,(#C*LYXё\֙:d@!E$hQz܄xH`^&"td82bHGFU#zUOAqfP&v ;:Ox rviD<2l1E+ΧD�#Am~ 8 &x]Vxv;Hc*a"G(0`>jW$tzfġd2P=a1!bK8@ 8�Zj lMIαH'hM:]@\_4d+Is\"ndgm8(6�2A"%RX4ʡeط!y($f4MJL%m�?#�;D{1XѪ=].v;xloߧ;ן|7~ң<9SxY.^vAZXRBhBYh{샻WS W]D0Gp(R $h=I@ L7?{w2OO0{;#>} Z%W$~B[3R:ʧg5Ge_Ƚ*[&bqd[*_ 'cE:S)qBDWc"iRqų?:m er@5Gm}QEg7O{WdTѹB (b&8_}8AyA nhZyJվ!h;zA? qvl�RХ2fo铂h1eJI!vvUeEԏT*T2{]M' ]!B;F&-C5Qj *^⋦刌!buCPUv%/rsU.", Ez͔< V̽8]Qa*pZMdu 3f ryj<|umZ }<x ',EHK"TB_\=rB!Ds"[Cx~AߧYEԁPps4%�G~~58eC2!uH̗rg.ZG'4Bm .\pU.iX95Ӈ _<i}{VkKTZ}WW`BOӉJzm>>S"Bpⷊfq3qY`9:k`4I$Jr[V-Փ'OC9T ג0ܶm۶Ðsun"�O t�ʤ��p(~K!jn^߹w|ޭwOOoݺsԮ U>n#@"6٫*j8sé˯_? ��H<G�\mϷݳ[_xxf|*HIE_wg} Â2K߻$7$hw{ݵUOx}ه(6xqܽ|V�y7Rex^>�wP;16߆TZSEV(__ ^J_e _F%NB*+$A~�%bn[GZ"V⬷cNl� Y=~8@ !C1ǻ" ly& GlDH%#7$nKOV T ray^g b&ITT4el1= S&q"P6 ! l=sO"D_#7z^LL~r^ RPv9wk `FlCs'F3 *�-*,IDR�;>!9yMB܌q'U#!@\rivv!,qH{a  T EJ$FEP< Y{D"܆?,+5|S+#).t( vF@^9AJ1oLV |gy\jgfySCvgCI.Q4d)P8$У@! �<?#dnԤa'g-%=IGP@R ,]߉~EjB폐Ԩ7GHQ|_j%!G8!6+�y-IYӗhJ${272Ԧ ja&BXwɨ'cʆ\A|F�8ǥubrD`Q`f !6.{ⶮY�xSQiӇ>h_Y{"Om�!aa&#A>AR@iӓ̖HzL�uI9Gpbie<W^L�I*934B�i7 }903 zpQ#d$H !Bʡ"Z !ӣz= oJ6@ 0„DHj֡iAun%UEg]\|ǫI|Z/7~>o~kx/ܽыwG}5{F\ ]H.}F(�51Bw]Ļ6O^?} tS{1w5t]nw18�oCyI_1#&_̮�6x.I_'1mMj%jN#/'zɩJfҜb+e\Qe?EvZeoO?#+wRQ QтDȜ3Uz J2+fD(Vh-+] hCbÜwUPO1(ϫ0. 2sͱ'iԴM;:hxۡ�l? #?D D$4*d^95L!D.J)EU[>j!b3IzyT"^4EH 5qiТk(]؍SY .h*l={ !`3!r4w!PC)eA.9CBM,* $b >!B ӧPٕP0'VL_ʆ˗Y}%+b%k5UB gW!T+wQmaqXaqVD+{�=bg?gC +"_s`Y i]O; od[bzA2jE.DP.8B1vñ!51Wx2TEHk@:GeαԢnӹ jr  yKc%qPdtR|cvԥGӧy~QgToBD[ZZopoN>5HB;,4}EB4Y3}5mg(8 VtadLߴ~mu{d;8Je2}TTNE$]4X< cvѴ)R6DkR:<YO+A9�>b-d ^M [0 aC>�2n&@1R8 )j )nv(49 n7?|t{Gǫv]}{@R2,W'k@p bOr׿s} kM""=|)Qi5w?8?D )׽za]fH2C�(Dr(r(r(r(�5XY g,n<Ce�R&*@rnB|t 7YWF׎\~K:#76K)XzX2u]#\U{\ �'^Tj :Շ[txouxBpHʡʡʡʡ/cw(TaЗYV]v>`HAjy zm` �D@YC;~"Q5 vӮ7w=X~ŏ~gϺaB!+'S~JR�H ]w{p7Ih e{njb7< �1c1.oDe絕""*هv8W+* $j"ɛڶŸ}yO n*$NNV^͆.R!gM?VR)YR)rBgc'*N1}RbL[ȝ xsS}̠ڍ Bv.xS($9lH38ہ%"'Th1WE_ (5V'@MȮAif·9sfZ9W�f |#8-{v&CP#ķ!uuaJgm¢~K-^q<Kw;|n]]]  ~b5P~YKY/Ϛ_4{~~GwnF@,.7 _uM'b@9Γd`/`%ғHEVWM"]FoH #/T1woE$y/[b sDȾD2`1ȧD4i*,s/-#T|^2䩍�g ϩj{Sk|y+?,R;yRTkA|<7*#,z鑠`ׂTuݒNW$UP1XA saTP&KWK6Wba ]D0UqeB@D0 b@ >F E�b 11Mj7퇏n?>~@+ as]U-_n3|B+AwWۋ͓׎<j1ջ/7*">® B+i+')8EF.j@:9|-�+ߋ@WL J)sViO]HÓ.F4(H/*u"5@<\2zzK/zތM]:5J62#�Ɲc̟͌8( `ȥfl�Gl (f6l)L9UߗG v ! ,RkT5Le9;Rj!H!2sj?!҄ 9ΧMES܎(EƶN"dlQi-82�f`49Q5J-sw XadO#$Bvx�;3al\mdy(m<$B`x'Eb� O$Z3}0!l(MHA%kMAHiep ?`X Ad5)q$! B5E 'B� `O:WPPTnt#UxAwW|w sa[G%#YtfP]^|$25% :Gh0ϴG�fH J�UcrBNg"AMe8G^g+:BAX; G@m.cc@Q9:Е<DȂaGu}WD�槩oV#))#AX ϯu sQ`GH[`$sy2}2Um{0%U]EpMrY]�>B8%ײZJJ 15 q"Ax>�Q:"T~;0jX2.4Ul�d$s&BGیDNꅚReFәeN3=`K!$t(l6K {7M4ͰxC 0㿶]P?D`3VB� z{kq}k{v;?z~uŮ=Rl VmZ(r,t_$oڷsJ8ix.Kp�0Zo  teGGG''aFA_ R9@Q~iW;ꩉL,SUj` A=ꎘO=':f'Kiz kXpgJsRy2JδG^_&ऊ*W1J )7孼ﺮ{C)~:=a9˿?FBfg/*auwfMq]UUr0N3m#ډX:WzB#KWMҦ';L`vZg]_&P�#sy_Dh-,_<~5 !/Sz-PPl{nۿ �W{o~o"ep&E|pNEsY.R|3aetcnыe<6;j<y_u3Z 3JX1ދ8i\Y|{x_f"AB_F$X LlpL8/),M|Ceu8YL}#8נ!dyX$f5 }iRʞiC#򄳫˵!۩~W!qϹC,xwan`{u}컡` qK0P@D)RM@8L�&a ! jд;wΓ;y{㟼}ᖺͪ9ݬoo6a ]k۰Z& bH�0nb D80H�@H�]D"Z1GDMu}6]٬^n[}k<}Ay w*F�MN !_v}xŮM5:4m ׇ@%Y R$-((sAeWtς�x> _"M4< O~5Ü2J19AeXuAM{,=s{˹t6Oi$1/y!u*|/ O_$}JqR(N$vpѤQVހ<U7ի@.+7c`cFHq#*U$t@ o O5-:!Y1%-B8#}6@bCߎAΠB0uaTAAd:26Ѝ#Y jΦͽ {䤥|P$bC[GJ36oΘ:)8@a�SCj6b*!PZ:* 4ɹcs,PoBS4T#G�w9HY\ #hg_kl|r(r(e{{߃3x|Gl u٩0J!Ve<vvE$"LpH94I\}"A9HPG-e*J,h^sE$rYZGT_"I~Q8 ι[Q8 s%r&dI!:W�"raiPR{ؖT0")pؐ"@d'? j`;mWˠei6d l L~@W<737^h2RC @* &r`Q@1kBD 'zS9礒XGȈ(kU" ̤Is!ĺ9eo ,$2&#s,-d,AZȘ�n G7G2QRIS W1nP~6%6]}ch$_(FPWB��=�HQĸ&m>moVwݻw.~g;?xbuj۶ͪmWM @@Hͫ# LCup8ZHgN@%T CHDa]=\lNѫoɓӓ°5UuG"4B�>n[! 0l(q0XV9hbPxM0\h@bVPPPP盿OKAf!�"< r(r(/E 1BAgop//]6nO?iPPPPP>%& }*] ��DҨX8%cQijn?zɫ~?{?˳gWW )Fbľ+CH �l jmkD$$ �ӼRcGD] Yaz,dq5�y>(mv#<ML4!eUZ\b};.y LXԂ?>-Iy拜k"W7w몷;#9;&5pjcjLs6W/grD+LXers+~ug=]Q Hv,Ⱦ"`iɫJ)][kפ) W $}VL%* hU\WEKڹe?pJPhBF_̼DO4cWfb0eBjOl!6XlFh %^'KDvF}ضyo9 =1e Ng,љ<} tͿ'U84ʡʡ| ;maw"dN}{vG?^ >VFx2,R/9uu: 5j;G Jj7rܚ ̚1OQ%VٿEڿ_;5aٿ녟stH+@SdA|^Bin Tx- ,ClRJx`.<Y*-2HC͚ȕm%BDM06 m00z~VA$I0'7cbzփYGlQ@)(Fҁ#IϬPIJ!S5C9}zj!!A #b�oǸ> zꭷ}G?x|O/^l/v- l1RiG$ �H1FHŲ n#@؋OH�!" �a\`۬{Oܓ>{:ɈĔcwn]5&[#WA]Ԡ�SU͝l mQI]MO(d>>W�HLP~RώD`f?vA)7wBUWUmH_ )zIjg'�օlsYcfg$ Td �M d%VLyFL|! r!̽7IDۓh7 !E>He uPL8GF,s\]!�%*_")Ah y!,gy""I/y#l4!)DsI~D e'iai!I͝"z؞DҰie>F  6 ӧ-`]FEF6}{.G#&ǀS2N0QA LA9 Œ,ӘIQ 4BE ο_mGC `p=C9 1��v%`pCOӫ䯽}.FPuv2RN;;)瘒y!=mjQ9JI+"V"yNAT[\m α0*'�:)I)<?jb@${0(|h`+;= XN=#A lxKMA0?+P DdL""s�#Al"ȩ&.Oqx*EyX-aLaq$lB,Ϸ]!ϯf5ϗ"s+I #A1h$Zt"8d6Fp</ܘd7s̨@?Od()H& ƀ$j |ʡ|%Qu.}tiDJnNh�\^^\^]4 W;Wysx[w;?|Cn ؄\ͪijwA@�RdB$M�GC7�ϼ 6M}>F�$)u\'j-,4P/9+  vUv.qKPRRQ@œ)>b:*'j)W WIXpTXIqy�fD(`NSmozߢU<wiY ~7 >z:d}Mw\ DY>\SU؉Vvt"9GQô^ŸX)*�[8c!X1h@]4ִu]u-7}#Kc�Tl8줪Qk9b_6NA;V{b]eW ڥˣx5|k+aϪ])9PP~ j 5m n WpySÏpLSA"%Qwd't RI f\#ZHCA;9󭼈$/KV._s[g#M-dHВRړe J]qo/0T{43HI0_d2s<\?,2C}*r\d#GXqGR23Lt"Aj)gi%r%kס'V۶mu^|Ġ/mcm[�uvwvխ{W賟~{۟>8k7[(mׇ�ZAhLc#z! cE6y<)4͸#c.�r糟��x9&ùCa{]]q`>5E X#6YߑS = 0Gir8B>&*a ^ĢY1#ڲPJڍG>Z_JK;]$!OLD٣wtKC+y G@ H�װB ^H8G!5PVOM*Y,6t]kJ)l@:6DC(E6_k8N(2l2:<H|賮7h=E8]!G] #28jR% ӨBj(ziXŖl,v'P]񃯷n}?-\9opzVklC9C9qA߂v �;/ >?~zw^-Ýx�ug͓"%x>`yKQƋR dҨ/~qH N)sS"֜q2qg}M+jǒ؋a 0 g0BXȱ*Pp$8ڙ(Kx)-m&f"A lZ$5* JB TM}\a@t0XFe4 -Bv`X)#r\$(>v`sOII=l']P`@Ӗɓ'}=(RiSi&,b.4�m1Ʈa.#u}"u]I{у޻{ 6=]>ƾ]!ap)W0� PvYF''ǨX@�캮�B@�;iW_ͣ v-G:%2zL~'4a1 DssorO6Q7af]79!w<w^Ո0堃T`u}5 2p[SMƪؕkL"OMsICs=iȕԴ8T&N"*Vj{Yd[!Ez4kZP*;K'Qu/PC/=zL"kybN+Azse;-”":w!2FȌQ65}kI&. L3ެNխv ggE'l!sŌ”3ic6#CnJƼB^Y9X-֡ʡ/jA1l!F:3v;o<oNխd^eLFnm-HJub0 7!~KAA)N{ t-LBDhȎ5,.G*,rDB!Y3;  [2L #dYY)|F<R3#e/-=V?OZPgW7SK3C. !4M3l%=0a8 1\f<<i?+ǯqGO/Ξ]^]^R׮�61B! 6MH�Hr��aq8 Až'@ M}+oo>ڌp4[j,.쬿8]Dl6|4P>=Za&wc~R>;VCjb>/ آ1!cc)S`<WσcI~MP^bNڑYϩ� ?5!B궪[DdmnҢ.6!%*Tˤ}]ԿvE R?z ׵ _8%)0a^m˚<=;LPKPQK (,Ζ *&-SoQ!z(j.WR.26ayI+EQwAGdʌk .k2QuhMpv?HWWy$8"Jݒ8v p vNٛɋ ;yFi?W"-x*yp=C9CQ%8_`.g֫;aϖ"8!t$"t" 㔱4;MsiܟHZFEI C PE2)aڋ-+[Qg-!Dz6*2_,R +'9cGn*>1|To4WSp1W C),B?8V Rl8Jzj)X%Bl+]h&boa%!"h#!90�u" dP-˄!pGgk obkpSv`r4ˑV]ȶ|+i 9 E ڻnJdmq!2VvTD`>"@8C(âޣflVjj6/ 7v]!p氞ij{��kUq]\=;|q{ |w~̟ _7|˷? q.®v] -fݖz =a7U }04+lQ]zd󥯾߾?[QD@4XX%}am40@+>Oq1VGq2Tįu=8#`vVfIDb6%=i9Q"?#X}a349%376l'I �0DT{@,c|SXr�/O/u^:Z _:mObdf"idU T'ԛk+s ۇP[ /Wsy{R%:*mL. (\8Ե!<|n0N']p4v`BGd !8E*핁]" BrI!dFdc=b%jt !H;�z$1LMֽKM26}+L�\eR?q.6}µ1mNj!8s!B\TҬk?FVW/5"2~oA8lv(r(2YG>???y.21n/>HJ.G X HftLlQ;<kzS%E"@n-;9 d$X Lj"d2UM b!$VP �1I PE lN]AgHP8 `>2|?6&&Aٰ`m{02<?A3"A2W�!,[S:_H3<{^d`g sIE^~,M#!1=mwbʬNq({Dװ f 3�ԇ%ʧ }mz=hcqfZ geˀ!m[n &4m0p]жG'n?||grow"wChz'AĀ �Pmw=y~G�D�B@ɻEP~m*v;$pxا_yAg(A7}sDb3 >j2=k �f< qHG<26_%V W&E}<(NQʾ?U~i[A&^B\+ʓq Ęd2ٷ– H*F >I>;"$)VL<3,Br 7HxE )-;1`j"WsXH_h"~3kR\!DD8*{aT9� g l=*53`lkU(%\"$cY3I$GxS.!EcI,~SB9u(R\m9!ƚ!!D`C p ;8m!jM^>B\�K)Kx 5)}\NilȩZ,fgQp.> )8\B"!&2)X^:d ٟEdl|.dG<| NFPP>{O⏿QH9Y ,Kst$;$Y"4LAI,6bHK#f&?�9걥"Q$gQYAWwipr26 N@~ ! "A+px>V7C '{F ǂH0l$}eq&2MqHp6pՑЋ蘙 RKב`; #.PlT <&W2*D <_dBr"S\&U$ T$(IA(N4BHs$H#2\p+TҤbEQ 6u lHgps)<Cy)fɫ7z^׫* CrlҦЉ{"R 1m #1n_l.>ѭǯxxS?_fsv}g]]^."MF\A "] aXLD] Y-~)\v8n;1*6F^cx;򫯾A�qxW="b��0_רH�)Ku~}|jf 4!Fhg[\@gDĄ=P#'hct]mĤ׿)șp{cQ>@xW/*aO˟ƣ|NXsT&].RxI)7 go1D'N U@&yE#;:m er޼ιcܜ>{tV|[qESNE!hrq) 1e '+솁L+/VDR/-B�zA 6QrbB9@[`cJW'/Zdusf茾UŲ"ǪW�fgWӰ @EЎuv-<Ezd 7A Bտ; >qٚr(r(2_N`n לyyyvv#Ói72O$/"A щF>Vd$X;_/B- _O0Y [e[ŀL,IGgx-ʅnfЦ^ZT=3 :Ǚ%< !�#AGj T,AUdkI"AC\3BeMW M`#&@|J+�uNG7tKU]sJzf!P $o9’\A-2yXS&' P𞶄WO<޴z(/8n4Çg۶ 0y$Mzl"P:.mܜ4=}p tDz}CC0`0 sO"AhZ �{�ȲDQ�DmV-"vWWa8~ƛ^qw7H P?8hD :m[ot979Usq` p>_{pr$lB$$BBQ xqܽp빍18kÛ׿/"N?9}5Pʹqѵ< u+fm"=DxeU\1l^"4-W8󥥭,_$:;vZEH8ͳ:5vHuCkjrU1|@^"Z\3贎M.(f�q*" *�0,rZD jLI.DgZb-YM3fJ,n(] PQvliUvo-wq2ׅ)7$jyϏ ;NbT7+tH,,O_дp>7Kot(r(r(>s8.};?9o[V� )T�dtTXYu׎fKXߋx? ܱ=d$ȳ]OQ/$q\fb6Q > l!ZP"W"d!JZ T v5u 7i6<`<8*:P<r~f3oY~bF2 R5!C ڠ/B\I|՝c 6Sl̞x",PSRA\8 ë |�Dl6@� iazf-0F C\c~ѝ{_{?/~/NnЬVb~oNa 02Gͪ_"!]wŝkoۏ^zZ #Ǎ_@D�ag� vpy_^P##Q�� >M:;F)VlkqNnp/V*+<_�Wt\Y zx@ FGpeK>G b R s.iAj5mٿsڦZMVKYw̡97src_E,bEݭJ' F+;H-(ez@oK9ɲ[X+w4rb.&!dJd`C"8þVNKԽz2_SvZuvju6#^kCm>$UYso$z;"P!#Yɪ58jdy]_oA/E;p|FS,PPED8G'C^_޾t_]6Omgi2ne39n]ǼX^nci=Kuk"A*PSS ]$zjQ <7*+؉J7^kA ,#VU$uǑɩ*H!)9|xX!l$8{#yX׾�5~鷲%']GE-fm݉2-簾 *x~Ys[_q/T  Kٿٜ uQ#|խ͉,?iMmoQC7(h`!2jDV k,;5$4K(9Їr(�E�1vv"`lzx."�4lp "E@-`\!!`&^ _9z{o^{;?pwuafݴͺ]fh^S$C� x/{λx:^y|Ͻ-hR2[W lzY1iGaWWU컈CZx\z�Ԗ w+]v.DPE'C:ZRbxFIy"Nm9�J6t8ܜ$W'f$z!D2)TMh}(1hѥWXQsIg*—XkSهy@R.bZ6̞!I沅e-be-l- "EHC� !)B%z1D.U[PT,WpI`ZAg2 `l5TY˼LyLCEW6!! BZdny #M&6\B DĢ>,0(L LjT�{ӧZR5i`I١P9`EY!U4#46Q.w ܾM;0r(r(oiZ2E}oto+FPuvp3�EP"j<Aqf\bL‰?dJo1 @p| }&NO_6*sd/&\X%y~nDe\Iro2=x~|?fYT N|>sQ$> rgxoAh'9Οe�[F烉 ZA|ETDHG҆XgxURơ'l~�  H ޡE !b& r_V+S!9^#gcHp%acFpӲ B(DQeױ"baJH!r( Prx0m۶0<m7F)"@A^̻F"UBUF�@�vjf}ZN}[?g?3|<;f>:U۶nK@vVXBHvgf} >UBA�0xpb{yǾ]| BH^(PnX|:OVyn%T?Qf9B:bgfbtz@:rW�d/xXO"Csdf2ʛBd]|~rɳnS(s#'fb$cȩ)P1�×(k26 BEHhbT." " gkd`pO�DAݒ{8نYR#D Ȱ\܄YHS<jfQ]t4|b8S#$Dxg+3X%B@H:>Uh-y9 4BLDDRSY$4!!WD@�Yye56&퀄H ʔ)PT#iN@a;ȦONPȤ� seBJzofʗ n B�iL:SE#@!HNdWٺ_XEg6{|=C9CxJ~g쯾}o`P9̓E$%}i 0J&r38c(Q䲝H0;t3O1('LE:Gn<$%Oe%#A4}ґ 2=JVYdt$s*.$YQ<&N$| ,/GK`PP#F`Lq8` N<_QH<4 #AH/'ŪV= 2]y;ϏI"'W@+bp&]P"]@L$(lx B Bm���IDAT5 E#Aɕd U$HPNyaO2ԹNfPa#A~,m2BtsvX8 )vCG`09C+4j::::>>>>>>======99�"@1u18I/61B4#}yqq~qqqy~ruxK_{}~_7߾}I>E<v]\}xq>vr|K=fBD1W峎N_y@^ �(lt8ެ 9.H)9wW�Bl!?8^q(HIN KP)%= '7Ɵs<Qѭ56)Wywk񊩌|%T+'L2j >bzn̼.ZPQ11V(2`Ձ�0,OVU@!'J;qAUrhup  @5 gP$~v {"(jjP~K�yUl jQZ)�sR P VTa#ujRYP56pLPAHvLy yXhkwIx!#qB8GGd1G;6jb[ ;2$BaTyǷPPP~%8:"Vc)Ϛ'/ꑠx,{F-H h3A?5_\`ch?,r\$Dh>xL*41g V@^*O!Lx=rAq^-T twY0X H^05Vޕ<X@B B|o ZRײHpYԏ LF!uO $ 2~$X0 J縏X&崧IjR/{x� iKxɓiP CHz^׫ժ;՚D0FEFOGRa)HWNNW{>sYm 4}yjcjM n%ϟbwgN7?{7swk( /yioYhxB�Ow.W M^1m�Hv0&'}sٯqA{™wˎCH?ŀO|۫*lYGIrYIk139+/(O\ؼk'<)AWP!PTz\'2M-y>h6-OS[mg|)cQD?w�V.[\2G< իr)R�VJPHHOCVA1y<kQ[ۋh.;8VPCśX_ϝ4r"A<i|k`v~Omev55ޅ,ws2[to奦o9pX ʈKu|Bd~0$B Ž`+l}?+'jw@8r(r(?Âj?�M|Hpu +#ANMCP0@?ҿ;MPp҅eBC%xqESdՐm]*8-rUqE[`vx@& I^VK`cI:ZԂ)6'b_:<M#D . jl@g̶ʓѩ|͹B`:M#$*jiE6.7l ZXמiC92 }cb~x/�@q�q��j(]w 4 2juthszgu޸Og??ѻŋˋiEشM9ڬ<�<>cY1#yßJH]wy|ھ/|_ҽQ@w " C}?."""")fdP>2E^ ~W� ฆ|h![Ov-2ցGO%N6.+?Dr:eKOur"gu^3қ[U`ՉѿY|j8/z_ʚ*4u‡dgz\rMS?ЭEI`v UTn/Ny`s[nU zԿ~~r/^܏F_= xOZYsV8{"O_+k|= ,Uʡʡ~es >z]忻ûOjlye ]L/m8ST ! T tmec2]Z#P57g{-~<R~L{$ H9M~) 5$(CЗ4#Lq(u%e$hkn"e%#'?(k'#|JF'#ywy yJU8j5h:gzY%je;el5B̔ {"iy^qʼgWMIϳa Pe jնmK1Rž#;> g0N] C�aT1R)@72;7'wV4O^_FʏڟpuvHjն8x`)&"wv⮇n7>W+~]@?Z8P4mV-0b}n)n Zw0n?':㥀 d 鉵 @L1I0}NCDBqa%ݟ Z/|^@3gJ(ʏ_�~J$jno} Ge%</"$Ȃ=zڂDxD^OE�l8oz!([EQ"ܤ͝EQGBHoev@,D lMiL؄QHw0+=TBc!>\ !oK6!Dy`ZdcZ w lfl<@־g BZO;Ɵs�  zZ}L&_Yf Ng`AXr P(R N"dSJ{0τ]k \o;l|(r( waA?~?oo}HW�7نHF9~QMEsL  }Iw,9HD�>_>O+W ~B:6EH8|}"{|mR 9ݡ3Hn$jT0 8,[8&xPGb*WWe>B EHP# +<Qs>;Qq*+]!~p" +U)N8fFIqTZYi*`V*X'eZBr(H%m>@ >v]b:>!4/ Ĉ >MӬh>:ioܾkg>zOڿދ?jwmۮVzZB3=#P?zGۮB;ռG_7>lA,uM{s� xO/^]mM�[ˊ͟7 _y%@b;pf{|G掁t Pho ʻ5�3 h3nm"6T47kMA-\�ڣ*YY9V'L<Ȑ`=7pbI-(%c#EQbO9zVX2P/9Ē 7H 5@@E@R46<#B9r,ډ3O0Ys %B$qBT'@ g�.l=*c53`lkU(%\"$+A S 0}vvFH鮯x>Q)1B $ -'XW <lpd鈳v`B s�e2R2䃬DSHIqU� 9UK>ֻ~TIf$'g2pRA%$BpBh!"#G *yn߱wFPP>} #ݽ.@3"fP<)%\ CJCM pub dȑyi2#)v9"'M~ EUaT>yz~!(H,,26$YFRc0JqA 9O!dA$r%E`" r dH!}X VYx7]o) Φ8Hd$(":f*T$DۊH,_ tҰE <&W2*D $ & 9>H*#Hp*M2H!PAHPdd=`0])ͨ"H&$ґ 99W Bl+IGJ5#Dxi: 6u lHgps)Wp(UHoī Zz6hZ7ͪ mM^BaCz.ŵ҃! ]]mwgr}=|ys|_S3_|ޓ>=ᣫg8`=#"�! R;_)#y0tW7 wxcs0Nt{LD([ 0N"vG_<<w=*�{e?eV$r_ $&|+jL ,Onos4PN!ME}�_aX>$~(}xO k&:^.r8A5m]C,$M ؕW8SrѠ変9`a#ȋB29Pm^\A18Q}6h1d8qESNy7NbC~I1) D1e '+솁L+O]ZCrn lOQ`C  )&lm=Xk1eJI!vvUeEԏ4#kkfgWӰ (!Dh:eaf=zexx &�Dx? lwPPSRb>??: {LѴnI'{ OщF>V d$X;_/B- _OC'bc_\ Y)5h-t36Xe)A=-Ix.Tj+q8y،e!a&!m1%B*>hX"DYg& t@ե9LI=F3m($#,)XSN$e0H$ pq+[z^=yi8Cy(5n�! MhvZVm6MX\"bq%"@D$ �1h�bOp@hڰ9_6_]?z靰D ۮ;^]#!Rԇ؇Uu`aC@ �c}c n۝]^vwtڿ[;wq�GK40�w! \bC"{ӏ>l8j�; fR^8&ev4t(8Cn؀cHD�"QjICao!dk �["!!(<8|w^U>sK zcjqN0Mw*t)FirnC̴s{ uzeZBL{L[kjs{Il!YJc&XiBOTV\Uᗷu <arҺ\`]CHuI<{Nps4ww$isc�=-Bx0*y& -'B>=5mt ױ�  #ȓ<TnS«}rEߡc$*RU!ۛXdX*LL*<$Bʙ /(G`C g|(Tdp$BFT䇛tvpFk~ 'ݜY2?s!_e]^g^oܳPPSPn߇G7 N'%i2+D$8l^#<;VnKʿ"}<Hf"A'5"ZY~ G1H$Y5R7WPke!Ƨ-GS(Z3W P G2]͍_!g>z<)!&wEv@jg} MFi]+,6<u #L!>a!<'�İo*->.N|l#�68G(cKN�;5i�y?`1_!C9_‚1m6mYGxVjZWj E BMiU �5�!Fƌn.wY׿bs{zo<}֗[_1ً/._t.^5*F�vn~X1Ʈ� c~w;z랟|W_]ݿkhiq5 F$W^mGϻggݮCau㍫Z`eiA{D\}^`1L"g[sÍ_"QK13))ݨS򴖓ifBc8ݺ8�$^"w*D�Pጃ& ic_Ѷg-{nZÏtസ׶ZY.ݓ%gL7吧I�C)E<e*CaRc*´%]t HCGE͌ u ÜX׭L /Y%YWڄIȩ9ʳ`]Yz,8+p>Z,cM*Ύd <3?#QE_>N�&)BY[3E_9} jʡʡϲ�8x\G� dW�k22o Z17X/I ?HK' L,j$=s(mseJ)ķSOvMlŒy8~oU7t|[T;$ٺR+fY{2<gB!e#&ŤoH<&Tsy)y>14L{C(-y>R<_ZZ$^ɷJ& 9PN5ڈ- U\W6XFS5"i:+~eӭ NG/QsFdFx)28z,l</XK~C9_2ab ic~vfb!2;tZ@jBZW֭;O^{^=/~㳋nw(BVD@{:Є@]Qh�~zkoʯܿ}AKq:lph*w=_t}tŶ[��J!"IsZ'3{\ɀl 6MQbdZ@69{R/hAUrc 󦓼ٗKϦ!9Pg蚒x%dz("WՖs=~iT%Rr]1`A5[0é\5kB䢩dEծ D}⋴uO b:@v9@BUiVEu$Ybtne͌V6+J3qƴD-.^톕jWY"#`fb#$z#a䵢 .*2a=Mk؁g`ngۃ+32Qr/7wVbEXt|/[NwFPP>.gϝ?;WV:\ t7e; ?d<%^$2LoL P)ǧX\5zuщo2.IԩǍ"A{r<?%T@ -0!g s*r7@9xBn,x~c+E8xOM֋7vR "AV+s!{9){;GȖЭvQ {!*!ZDxA?=Ce+Øna1A_D@˛ȟ"EDo]ŶU{uz'wWm{{w/z~ruE +l>BMhm!D@ [l&D궻gݳvӽ_+_'zmµоn `%<{/.1K:g)SOվyIF|ذɜ=p�?|1 rN2-Ƅ+86b lJ bWqJ>͝, E#(BD�el26#Jm"ƜMP$8ċ ?'}{2+͍-!iL#�7 !!"$S41*lFM)HT[qr =2alkS1yêH.Bۣ:f'qfWaɛ;%26,B N7{^i*Bk-U>C͝dP �! d"@Rk$�;;AؘDH42Qv\# Z-(t o:1B$mO+7/bLݐ;}yvvŒJ�Aӧ8U0 "B$)՘sOz<PP_n7oj⋿$0Y/#F݄QN`R6E.D9<'bֈ(xrAy~ͫ}T\P d$4}ґ`eT/*d <tr6?$E%&NvgK`Q(U`PP|H08E$8d$@_TDNsN<_^5B$gxH0�H9˷V- fQ0'V| IDV H|ZIo rA. 6Re$e$H&2 )UKiF B519uӤ9*THd4!Dg G'窓H٥r-S e`09C9Z۶]Vz^V̻ݮ뺾1p6�`Ů M<+O˿v7̯ޟ~|1^n#İ MM컮>vYNf틋|_o<~# ] U) vAggv?^v}q/��(.8OGI uvtQ)%ONNM]HGÒ8ymgrÒ[3EB&a zΣ`5{cy5p> .Gf|sADBs#:c#Y_ʢik9�fG9@l(d""Z P)wFsiŠNRB}xT:`M! @ Fl0΄[U-&ʣx+e @%G*NPJVa; EЯ` 'i".+>@MAx"CLIA16DLuzL1 E*!x14ȳ)ckPb# !lAdž 'IMl",O5nrs&N5 %#D88!#9GUg!`nvS"Ԥv5lƆQ!T>D#|HfoaPPS]n?.Ϛ<I G$H0$ JIr9D5Z] R_q$g 9E:ǒݘ PSk"Aqk1DŽts28) j�X,$YGG5OplLQ2B&#AɄ"䠩Nth :vUyUɋS�¨" ,Tb$9#8ovكX"Y"  BSU( W3w!. !ڈ2*tҤ~$X d2FBi'K"`\$(AF{eR7al=S b*I$ li8 Peaƃmۮn'}c<� 4!&(R밋}mCBC04w;<;wG+@lBX7a6G ipBuۋ]b{vr <}>}G# H,?\�" =/v�+  PMu(5UlY E�ȝFkմs{GnRrznoI^ *c8Dȝ)"0s �e*CuBId1yVDRZfyyLA _zxcpP|N(Sc�"O"栟�Δre.A^/_f@hhÓAZ0{<94NT�RS4 6er7CB8Q ĊwQ#OOvCJ84Y/Ȅ@HЁDMy6Rkzͥ~zz!G2=a ^.<DǩU3vȜHpv yJA�>hoYC<1B ©7)+"%B 7S}{zNPPP> -GjCWK$eĀ  Hp.q"Lu^TRA֊UHPP{"Tw%k!񋐘Gx,OfS214\*.T!5.<X.`"=Og$7#|�[jRG^hO& cF* è淧̉,W<߮VA|9^l&"+A^CgB*fr 16A.P1Í"!N$Xk);0 rSI*3�@Gl7XmVnST*M["ʩظO"PP�qB4z! D. Mhlpcu}wnw>�wUnx/~oΣ7~w_?>xNoS˫>n_v}W?h}=̽__7yzr �Rɍ�"Ag^|y""" �@HD[)*S,3猞K׿NID-$[mՁt` R: UtXZtgUSC_|%e(kO)B;nrۀF>H!To8r ѠLΌե<HAEPANF"A:Y3gZ9{L`A=(-U)%qILlrۡ`HHY D(zFE l5I95e.@H&16 ۴I! \ DْV]ܢkf!KѻK`yh#*< m4B$^9X=˳_!8er uoPPSUas W9hwO68DΙ3_XqI_(<K sq1],uY:?aZdν%TȴJJ("GPOc VӔؾdV?RN??ǔ<۲xZknMҕtr" $01?l 66636؟ &؀1ƘL0HHBJW7sXa~gfϹWN=癳3鮷 .|l1!Ƚ0 z5]drq`g0xOIYI"$FC^e Q*|lN ]�=69La 䙠//`fhJfӛoyYvA9HR2GXw&-B$R .be4u>{n|_?qz}<)U=E-ȢUut4Zz}۟۟|uk(j.`<*S}եQ*}z{.ݗzਪWb(EYrI2.z\orY_ݤ 6�oy{Ɵv>1m}gaK]7x򙳧istߘT'b.o>dAdAT}kbU9S=dAr(}?qqV?n 2 2 BdRU%}4႙jZuUK5.G<˕SgwlZ|3p{7Υt"RtTqsgz]N/CZ5Ik*գD&]xpks*.F4"bQM‏9YfXRL"Ȁ$AW{O/ (BоB6_\X@KrP!*DP)4 abWɍ">Ϳ.(Teq'6WK‹F 男7eg`Oɰ{MC4"uϙ /ra߹$K'HC-S{^U,@ Dw O3M? $\5T 5r|/DjP$NuTxN#8*F@T9ş=Bz۾-ou=,>"0A\(.E!QJ~AI �*iyqOl[ !B`/H>!zDHmX .VA(ةϬ{(Ȕ=HcqSS_<89+O?F0c:̴~ %!!ҊJ愰Y}zC_LgTAdA2YgS=˸(˾71i$+:b.%GGMҋ#!M]$&)&eG{Fe`Fe'o8y;7<y &+0);K�nL8HW@SA?J@-"o il&=q_tq`a!W'gtq&^\ EN0[IiSG#p!8i[;Wtl4 }:{t?@ԅ +4ls*Ae"I_yS'tv87#LeaK< W� 2nRw%pLvTqJOLd loM)TLJi2 '$EQ+++,K!IHu5_,hz0-泺IײdRϏf;N- 7ҝw?EOzK~ғzʵu7~-yx)^s9ܘ*k[j:_iMR83ۄD$f.rEɤd"RA oldk1*,7Wj3/ ^`*o`kW=͟ )R�<38̲#}@o [8%R P4X cA!Qj,,hVԅӭ,;ؼ#AVӘ�re#c( n8"s\ۺC޿H.=0 wiBeC Blj?޾ ^y.I!`LAFOiq6 ZeDM،NlYik ) dj0o\sذZxEV}!Ij\2go9Rk=aGga4pZgz�r,s.b! W  ONjh9O×G2 *gh>lHU^\ռC2Ի0"#Onv1h`'2k^l;S:fq3A+*nSYNe^7ɤT llt!Tx`!h! X)&EcŠ@[eDrI3A&pt b8 u;:2^#&M9 B, z|9(WX;p`+ 7 3 vyk[}ȕi4s"DnRb OEʉ]CIdHI_Afqg7i%G}QN$4` dANV,dR\fuUu]յ qA$mD""&.,.\GuF7ܴrm_>pakkk}cg~맋Gjz$W_\ގbQ_8{Q=N֊reAURsHCCJT6QjRho6u+4ø2㭸}DLܸ ^Sm=bnx/a#*/lb`-FVIEəSδҹboHlL$ 4V 8*oFG$EX]d|ca VA-<B�AOC `X_ LM j0G'S'<gp*s7 OYn,$C *26Wn:SDyU�&úBwMk&] 3S~p"$ryy Lm&>sLWߢ3*-*Y٣C�Â�3/Vbg�_@B Fx sY)r_>2Iǎ^u:n>dAy әіrn;If0xL}mPG`4L.`&ܘQ78LJ$ ;:1A넵3K0~ ۗIaţ:ap|NF}hH(ުhktmtǨpFleWL`/WYxss_x3FYq@@&);F%6&`ǝ ,©OB05q42ADÍ@GS_eަ$R?$٩=z !v_H/sD#Y&rH!L0#n XB1I. !~dANHpg2x2&dLѸ(K*?.ZJꚥ⺒jQ/ZSt-㻞tϺ#? /|S^ҧ%OG';uDR%#TDn+5"*:</>y<^'䂉n蒯YurK30c\|Q!##NNu^2M yyރ95`]~a&.dmO@L"SJ*4|OlW=*HL˪ξ~aי_*6X]MDz[#&1FBm"1,�B 8gE3|# D*D[$ #B`噡΁pc)'# 8�B7c[mXg6vsF9<XŃJ+@Ddl4%1 "D"a ۋ*ct0Tֆ0q"EuWyPG`x&FU2fM}QTLz'!� "@|zcAZ$B!/C]݌#&s=OX-\W2 <(zϊpKCQ(,v3!28AXf*;k'Iy l\}-/hjv+p4*OH`x)�`Xs )_F%|#�LN̫A( *׾L;iVU;o\T!0pDza lB䌝O,H!>/|Ú k7&HCB:|(jU}`p]Q1У)8&Hy&{0AAJ<d恎G.1 3!fq Nܴ#!BR*ߐYX e"i 2 LFqY"઒jQWԵ Q fAZL`.ˢҹU>{ڭw-fT't ="T򲺲HF}Xy&hRy蠖z4 &aDB\y8EԆ`S¶T(ϙGDdAdAS_0 f 2ȣM&NӃOc~޷|5 2 2 s1(rogUUb>_TErAЬڥ`x4LVV&,dqALTD% &!bBoswVQ9i^KBTBDR,u[$yKAþfj$(ط^B*aSuL ŝؽFMMWe#fOSg*%|Smu*L:FriӢST&wkhr̍}'*K%FC 0K9];+]]IML5ɞ!DQ5ey&fX&T&leN_f`E%z*>k2Y'Bʐ ϸ8qâA@!HT_6^-4ٗ�z!5ut}ft_N!AH\܉4BL<Ҷ!o# `.w6ʇ}w b!~@xCF)ADzIXYZ&2; ar^t� ;qq7 A+`'-.  L}*ᑰ n�W!S Z!D"~C%n۷Ppm ?xdA0Sg`g) PG Lo,Jmhv޼ߒД9r&WdRdAL&`u;EQ1R4JOe@}hAؿȆk;`ox5:IAg02 ;"KL{#rgsBZ|4 #&f#ty ᦽ;8�o*U5@ &*rjqqpFQ}$Dd!t_niW".pv&9Pa LLPZl{Ʃa*#?ő j_ApQ2ao@q3PaȬs06#T87n +M! 25&biW(ƣdeuuu}uuu<eYEYrQ,몮l.Ғ몪u=Z,뢤rD嘊Qx(x9cQn`bD\ ĵ}~t[tU7\~V{J&b,B`-(Gtp浝>Cuv!RBl��h/a|#Ro G01g/`-۠O67 S|%-FZ+C5@b2&owc`C!`:P)wXGUYG Ѷπ6؈ Ă� P ! B T="aR<4ݬ,gy�U0e~!: 5? ‚ P)*ֆ klC<=*/0p^)?SPOe}ؠ&\T ԇ$ &6;*hMSj `~3.J#b[mcW9L%0Tc#( GIl$ǠUoE/tȭş]B 8O 2 |xIQIٻda\ޱ0- g#9|�%GfYLE }w8H"$_jg @>&YHqH֬|` ?Wɚ CVOZ[Z.(H6 sqd ~2ۂs(\kU>₂I1ARvd` kxSlAcڴOt ;:(FHF!dV_CX0/S6 E34BƦ BL0*%&0m^-?H9&) '#s$22 pN$6N؃ 2ȵ&*?f.Fx<LVVVVWVV'+drDEY/j,3v<*d:LkHDdY\ v<B=fSޜ=x|E9F<CO\1 m:U ?Z=-nD-x~]s;vק^,<K- 4 |zQIϳ5*�51ֱʦ nކIm'vhߞ p_vK!č $?&cRI  y2@o Qש!HUF<8S@FaA i{Fu6O}Ʒ 'x654ا˰9  aNt$?EXWwW\20l_g\Dnǁ3(£b(i_th<Tz2 n2g/-!B#B81%"ChiTz NWw*X!~a@a4}UWM"-IK (S@p?E6D隒eAdGtzO8 G  +J\ ő6iT`7*`FIN:^#&'Y (#Ra $ OHcDCHrQ[ &YwAסA !:avh;_c(cwMcy̺8.O# ,h A0{Nkb`pp_B" $Lk-=`QX31tbBZFvբ0%ɅA`1Q?<u:GAbA LШ +E: 8 Bu"If-Ҩ =ooAV(y4MV&k+k++kxZWфqIu .&d2* !ZTR/_& B$"R1LwC jQYpkA[k&baJg0 C?=D.6ۛX.4o$)4i3b\}֙b] ^G"af8i;Y}YI> fx*(fڌo ٘*EoT`5ES6\)NxX^D"pǘ0m34Bg'N~0$i$r{h ITB?z/ De"k4 k.HO +lqfr[7ǙΎ @UF�y_d[ic.Qb ̕vP,�v�;Fx-%Q"rAn2{ A�"DB$J y0ԇuoOe!0o$p֨�`zpީ2_M#XB/vX0Nf E5;V@ǁ\_Uy4S}4 2ȇz44 NfY4F2'8T3FFQX] qT` MWIns+L"ey3`'X[ ;t! C &rqLWЃ +> eN ƃb!1$m۝N9HRv~C `]؆ 6$x, `0с%I%b@aٜ�]wo+4BBc ıWKyT`P 4}M|I_A<spytJJD LP 6;85.5  aT*$7P04 lx )I`cgBH 2 '-9AiTxmmeccc}}moeeeh2YY]Y-g몚RqAeE g>RmnN`gd4.VbLDL ]<rUqϘos=f#FL8dAdAỷ<o?/tH`AdG'NG˟Vn?n 2 2 P%H> (h2de$eQ,(>d|E!9 *;RoB{>u_x )j1lzDKa)C%lG" [pTM}NwN(=ɥ RHD!_a:I%)}mL t'?ƫ Yű>|KPH7J<7 ut; �jg5ɛ3si忰di u{[?&ND_;+\m�NwRtB4GȻTy=鯲8Tg˻ƴwQ7bϐM L�lK [*8jpE f 2IP}\(.E!v A kVY@e =p?f/B�5Q;DK4j%sEH2oQSY)~V["FH˼ zn` 6h["BC"Kn9Ae187o?OVi< 2 Y??=y{**fq /jYXC#!8]achCmdP(%KD#oSy6؛l4*4 v[:?fK8<\#:( A7 N$+{BZ9VӖny il&%̢2)j.|x9hNa.EQa?j0uA}=Mp(ΡLv.vD K BŒ(*ACu|N3^8Chaߕ` &U$J $B5r굑Aх_SLj�^iW�_AM^2Ar0y.8PuQs5"1A U&*ˢx2LF/_컜(㊹,D"RTKwG\+DEEHzDSA*4${5$&Fsugysߘ&kőn+r`MqZN؜J7W^U֞y_Wyh�[6 "iC8#3ta>ҷ L 8Ѓ-@aEy3-4A7U`XkTZ8(́ ©^1O}M9ZMcȕy*27ʭ`dk L�xܵ4z]Ɔ:p&&~/y㨣6(`#9`#B1<LW@xl�yv lCe+35W1`#R g!*?封R!ks3�~Cv6v&0N^0)н/ռѥ*.BM}@Ά&B8F]O ^)KУA=&AdARhe^}_ Lh~Ȑf)#y)LP-chP*@K`.P~e0Ak>Q0AoEJ͋T8QB Tx`!hY([ aJr̄-2A"D9 $SWxct Ue.GGK``zQT ApzӨ Ͳ|D (NN!ީGlDZfaZ\šU@LK&fMz;N{NJ3)+, &u!2Ԏ W^a3+E 2 '%/v\)EY(Bod&) Qa`.)~!wޑeYNG(/2"ԬVR\R?Ձa�aƟ BTknIb|P.r{qkI{^oG[⽿G&Nw\^[T1`o<f<MAX-$ RJoL+o:.rG<B$؆īNXCxVX?v *hlM 36 # k+̀ AhbF<7xձ B�oB3=yǁ=|ﴎ퐁) AN}d qpCU�&ƃǭqslG?$ƫ0a5annS!ULZmC -}Xbn g;[@B�j  [=9*ﱆ D*�pk^쎇0hEa'}x-ş_Wh=Y 2 s'Yp$y3`i&my%G`4t> v-Bڍ ނ2A7Gd`@b_.;ߺ ő`RT49B"_k|LҾ`$#l:rb~F #L[ ! %FGFwA3!轿?|n7&` V.? &0!BS7EZ!j1:r"A3rƝ,h<HHS{:b`}P�1)';ˀk:FnR7ѺIaq$70AL{I_`bros"܌*- = pL7b37[]Lňh>/'.F\X2S| фy(ֈ[hQ.l땵沘mL&るe J-+5kD,ꕢ2zLd�eWXkb_ߥsdDD$,{..ߕ7^YTDpETɘtѽF+.G)%1) -<U^S1m^j{sM_دڞM5Jō%.pPx0\Lcu�fl琔BUIy*] WMכLb D6k0!!BLf:Y]AnQB^Bɉ@ I;P{p2M: )mk[!FI?' (U;< nib*Bp/~0[R019$۫@Q0!ڗGlª{B(066SΓXO7q&>֨36GIZ΁pv<OP/vqw�v2Q]!D!nfH�e33?o<ldAylhL+kSw=n s1IQs$Q-h`i|\P#,( pfd wADTc_QTLqmBl+FrW`yQ _�}%ʬFF;0 dI+1Ax2#q\ ltDz*; sqqW`Y}^]]L0Xn3L,B<`O)x-0 IMȤ-f 1A3A=18`΃D{' 0yc@oBELxqY7=G1B ?Zxu RwB24Bdk(| r^?/șKT<Bt4ޅ̓iEd4(EIhWfZ0ϩXMl}m"!@#$\7?\grYDcMQ:89bϙAdAdk#99~G>܍dA䚋 2 2 2 Io |*ݝښMLRV q&X݄xIji 3O8␊OR̈%!,BQ)!=t$S=B[roqUܩ v DrȢ>F->qL/qs}TIG:ʦ_LPoK!Hߙ*Pġ ?Bݛg'p!l=!DN噘ac StOXKE$`%(@|VW*d·eK`"e3ŝt\u!.*0g9]T&]S<*D!&GRisɪL8mƨ0jqZUv<tY{q0!6Z7děb� >p:%1WQ&�>T7MB ءaS [‚ <U&PY4㡂<)s;b @ $ >BSI=!>k^DΧa 2cSt7BvM5[BvRxYumk[Y(C`ˑlޒ@"jLgT_Bڂ kyQe:(ywǚHcbK v.5T7#)~ C exUᤋ?\ im>D8a&a|dh|x-?<7uɺX5@ &{,RL0*ǽͩNiUYw2P<T{ |h4:bd׃ 2𝦟*  R J BÎxqUCV_\Oi7qqZ2U%" a?rSܸ7}Jm? rDsٚ}=>- crUNB.bZ`^<'IqHš439mƙxvIr26*ˏjOnOD4JbKM#浝>Cuv!RBY鐗I �HXܩ Q>4oִVFB(N1Ўl!>jl46 [FGEB;xLg=PT%*G.� '�y!b.B=APPv}]]Oބ0 / $Q ވVڇ]<@~N)Qȉ56`gG^j*+œ<T}$2TDR"&\T bQ8~ N\,siP!ڌ_Pe!Ô=:xqάji_؉bh_^|}T]B�(I۬>x*?Ad[V7hv5kL0MdD ^ETR&^ `;(n /Hȧ$= dl+10Ga8i/DFrRWz- H�;M!Lm?]E Gȵ7sb(Y=Bs;ABC̯uc*)SCet0*;ߖVsB)yӆ ktK[B`\ƀB(<LJ `~�IFS9 qM)OF TYSd05{`Qf"6N؃ 2 WU ޞ};;TWbH)"DEAJUUD"6:JnB,EYPMijҶzgWh ip1j% $ΰfT6j{<,r' >`&0n@Ofxh֫.Ҝ?ajگ1tu!J`P{riiZqL7 qM�MDJo0#$nssTU>LcPQnvJeΖ<m 9=;PFeӽVOjBW+=ǔ.\Y'HTN?lMlN!iL}$I7<ж8vܴ-,vdQӯB{@,RP!B.+o-d ~l{D~/ݗr/n 2-+TT˟n?wo|QqeL҈!iYtDI;ZCT̤NLhT6F.B XF1Ge(q`BQnIy*t|rőpdveU<HqbN!.;?:AE+BZ J6;fUu;}W&Mco=ø :G3S_BVT6R3:<yIbi3iAeww.{`cTg ^k(!!*PsXhrD|nXWIt^ \pq"&˯(؄Ds~ &Nu~vK,jaɝƨ Ls!Lrf:msULeA;> #[BBR0:>Thgi %^·=E|t5ymFy 0iAH32qbl^EC >NhDKTq"ԧ=&s{h 뽿I^B.>q-s3A �Dj oZ٘րh>y`�%L}=,! * {`" !\1-n7 v /!F$"9P!f胐dwXlnBH4B`H.vQGNh+J=r#4 ܲ(P"0/Jъ—fԋ �2 CotFrnyNXq `vLA 9DNimn[ L D 8)QY&Q9)Ay#d)&e-V&66* -@A`2Y_A&Yq~k$ZʩQ@c!1;y 9tqh;š7�0ou5E=j5Mɠa$B }}:<e{u  eMC_{Y0Le͘fk{7)+&hT1p%Z_vYpq L1tqq97�یiflJ؀lJFdAegg{>wٔ FaZ[| Y *H &)X ɈdLdL2f\?/BTW Dr2BHfXй|֋]1YEݞ0m-s+dYœ<]NS(!x4km}DдD'4PLtx}=:۵#,QQ /O4B%]32~]繜 7襂2/'?Sc`/* Z\6{d@G{I>]mu>jՍV 9案f$8@pmhmF.f4M)qwJ B5+STUDc u`qzxRt8SEj{mҦDf$a7O$׻VWIhiuDHbu1W寇Mh4AdAyl.qQں]~D{:fW{Ln>ŋcӆ}tp׌ c>c,5 e/+携{LPT˷�GoX8ogl,F2C;g5 .u(_M=}|3{ c|q UL0<ܥ&\,*x5䶇z^OجcDI`@H o|>D2LT9R=B7)JlZ e] 2 WI677?pfu5z&2u%50I,%5 2� 3HJ8[C"F rf$7ƘϲY[us緛(n8wm.Wpyy36K۵N-_5iTT|օּ=IORAݗ21/2ZrVHkR{0z!L?FN,QD 1'٭ 9@<>FMUkҟW;8vp  A^вӳ'GLQy zTֿRإV{\~3s.Y7ePm䍰K`05a+u w<X ,yêݣMzMmXnቌ<rnbFt~< 2H_M H ibXv~nL;S+ւGѯ]$uÇq 6GXU"SwF( kIfeJb(2yTD_̍8ڇvqXo`͟4bTX8ǽ߱]Q?;xv>2õ0ŨȜ,Ll! =}] ;=m*yiTJ''9eVy%UY76*+>nVg֭cQ9/ϥ7 rrpp3X]]) /ޭ:)IMT.7o,2LXM .iy7p-\ pul %c%;2ڗ]W䢩}5-MtojĕeHx 1!^F9/s9E2D:*.l<- 5rS |wBS9harmZ1]%L?`jB0{H-P\SGJ6؀QG'1P>H=ѐBAf}\֠to*3?%|8ɩ x '=@A'<bSurxnB^e+moYPJÅx- 6�z"`WA uZ1\ QylpX栒aX4B(t=loY8!9+. OA%vZbl:a7,wh< 2nz36! ηy&襇afB X/4( 6K%&6^o&*-TOTO5^,BɺT8$kfխRUQ[\!ȳLB!i&&&>{\c`zQT(M|e3}>Z|1i&GyB,"Vv~1B Ovy@AߑI ~㩜q|kƆeҶ8ƾu,έwM}@ o:dAlll|qͷ>}Fro8_/.Uv]rXpUeLL&`V&?fls<`bŦm1lj)Q먊6y$",Rq-`KȄ?|ٓ`1`|Dx;/{_D3nk*kn"I*bQ\1j֙ yNMBlw GBXno~x|@C]jTP0UPA ekmԨ`31gX"ڏ\}Q~@ tC|aUG"Et=\'E`Q!RՁA)k$z{=CT8T*�BB0̒aVy,`CgD$ב*D޾Tr{=B¬F*o:M $oۚ{qcۢ08'|̑h`yë_/vT 0@bt ,$/Fg@NaN4 ݫ!D(!!@^X&&UodK1dAytqf0xLp)&�9L0bHmLDB;ubLPQ1A ШGP ő`RNz3iip|1J ЂLA V\`Ry&؈L[ ! RpV_I3A4#&p cW5@l b' 1?ɐF&0 SGS_+tO c%9B$-H)(wAډ(@* !N}fIMـDO}Bxؕ"r"&H ܤ8F (6"$< Dઐ# $dQ% :H97# dAbQmll<)O| )}mw}[âܪ/<px5fQ- "ᒊ1%Q! *f5Ok:e*4^YԲ d^Hjc\?L!ihN,SZMKTLpy/9Z"#3XG 3HJK&,eM0Lȵ=1 lE&TV4ɸ½[{7eVlg?İ2H+W%t5aԛ,τ]LfO !BI#B1Cd-# aP[T�P2@rb�Bgl?T5i!MS T B^E}z+8(3g !GN!  LJa HP! vw-)AHVM L ã$BB@HVh_Eu c8�LzԚIDZm{!:/v5*P@GIڦ>7. $F'8;�;F.J"!M?x\ 2 Q9rDb )⨢qR`#L,jDs ^md0Ɏg. 4* "̧WhT ēW@Ƃ2LqI_ e}(( Џ 0ѪBo`c2A G!$F9&?[;R (&hGB猝O9˸80wJ)wqqhw Tw1A  EH B)C)IsN$ٞfBXuo /s$+GHhohOi*'\S7�*̺IݼaM8`qi4N㑭ɀ$)U!! 2 WCZx<Ϝy^y̥ /lmLGGGłyx$dTѨ,&\pQ03TK-0LL#Le!fb?,E凢u_HU,_&\,|@UFL<J|9�/C2GaUy zߙ;χ%2M Ue {N:& X}$-l4S}- ̃DR/61ix[FF#>G iW܇EUJk吩;92Q _*,V]5#=2 *#rjH1 BEB(J"Ġ> LW923ǘ�>u%@n�Q .cL;6ax+'W~kƫ=0 2cC+>�|v#Y̚:Sf]EdD>"hM]PZ='z'5MtQ9d4jc)ZO~`L33 PQRd*P<RE���IDAT8v#P ңLYTS9 }S'v?J샭:?LVf6%!ߡ!ݫ QB!DurztB9^0 / !i}AdյTUUu-2f6Ο}nmv颪Guu4y]2 EᢁsQL(k)j.}V -#EIL חSVzdS:mZOo}Fxt.f@#+-d5dM:9cA'OQeT#Fjd>}kfHZNSpoNZq<,q˗[N4ݴ0Y]綖s8ϙ=^*TO̐3}QdtgQgΣ"6s޲caK4,l.cg520^&)%KŕhxN&,BR�ec*5 2ȇLVh~'|URCWwWCdj [2YZu-o eHsl\fg-=PBDm—�ͺ3>%rd q~$O%UH#89R9(0޳ _I!IM9eyR!c>M͎T_zDy &: yI! @$}EeUϪe afV.pdAy|>E] +񩍲,htͭ77vw|ࡋ󃃣鼞WLh%(Wu%u]uTh4*eȈkJDjb*(Ka_mI]dLoĔ ud9Z+[\ߌl+ '~;ŝڛ"0z^De$1Lg%r{(^m_>R׉HM&/I,y.cкʪqazM$Te1 ,?ǣ)؅6q\­], r'Bl{Y-*4G:!�C<w7Ǥ~6"$\w%)*A͈#j`?f/UaS=_oJ3쒅4P9y$xl$BzkoP9TY%Aa0gE((pߪs8ס+7$Tq埆/?2 2V A�+bܸ̯0Nz=,4$ʐAuD֍Yr@oãm >W`űsqDCkA Qf [ƺ!EYAzqy&o@`CWQ&%@D2xVoPp~@nZ'X \<�1 N ~#ŗ.ⰑAoUX)WLFHDXE_@H 6PGW{(,2�S3|(WexJ).Hy@['wdA<E&:)ʲ(b4.Ϝn\d>\^lo/^ؿxqwk`w`1ͫgE5 *SQ1KT\HLD%Q,Rו{ ''mKSv9H9Ją u4 NH(Ie-Z ^L�aB0$|<gd;ŵ_Y!{Q;5Fg+0UtnC䣀tv*z'A1 !\ oyuɩ`tR!ndB(]xRbJoD+xkB XPȪ�#@(L4= izI0&9e #h`EUa0oqE+}(A-B<4V0xu9x^V:RSY(S!!,Pᦲ!;뀨)n@=ߗ@ B|e$B߽!ĘDBGA�U` 2RN!O1BYX"a`aFBXC04K#$!>D<ACt!$</tֆ�dA( !nV0A`E BbK=8Rs~ GёAu$J2)\ñ *�=b|L QAƂ7ZPx9?X0IcB*cc �!+Q $ aI!* b;\�$̎Fy?�]I@*qqxudže s7Ht!#20 &݋ +DB( R=B 4\;&u7} Fiaa $Bv" Q`ҨDbhVQyX{<L{N=RP >. f-Ҩ =ooAą˲FѨ,ˢdEU{GG;G;n-{ᩍ껞tϸϹy?>g<qO~uݶ~ Jlq0[ꨒY-ZZH`jb rłPd),*1p48dYڍd13HG+W٤=ΈqKޟ ]^G"䭄ea9,)tQ@4$J-I7۷U [@* 6y퓷)@^ ko:F4#'ƆU[$1QP0*1؋ԣ,^'#Htd5h ITB`遾) 6! [\<!Q f!(n #9+Pe5ojD�lB`C30ITC� b ld (v1ZJ!nĽw2BK /~4B$!1@B(L΂>8*w*ip֨@s@! ڃ$3olHX)T79BBs!-+E@q?SkðÙs__ܫ ttyéEj%"ͽz=#9uTq]K3v{/UmqOLFW"taozpZ_;z{^.zϔן*Mz렾\yeY| g yۇoVn] pTqFqw'׮gKռ?ar: [^=_ O7.o:S\K>dB3l#ґM(}DjqQSdR \ L w RDL0OrSFA#XP-LZPL mlUZ0dL0�ф#H );43*�+1A RP Y;\O�[y lI&Y'" 䪇1  to&hjLLpm&�rtv*c!W�Ĕ'&%%r"iOi`WuzC(Z @=o_a0ӯ`S`Spස 2 '&eY0i>/j!RqUU,UQ1j*WWV'uke}o:ڼw⥃N4VټZLŢ,'%JA*TT4C֞$mArBH֦^5HAإdg%ΒkQGi9P2͝~mY\\),}vwV!X@Sݨ:J3Y?.WÈqĹUX*9-*`CSNn\Q:0m3+BZP=ԆtG_uL@H,=2$1tr~ *ۇiVS_fHT*]!a jOjfIFH(_we'6Rqtŏ~O`Hwc _4V=gkwjsԾŎz<![Ft:m^\[;~Ž:y΋|K?+Om?.K{3{{f׿g<Sųg~G?i<.?Eݏ]_ACC6 >];ҍ<ʯ|ުQ_+<se/sE/zʵH'?sC\{X(>+6>Y+_T?;?8o3|u<sOɋ\!>׾}3o8oF>fe\g|x!{.og>8~cr{jGf/c<g}z~UxB᧍ &S%,-~"tK.Q7zMWeNZ I0g=ez=`ez%ߏa;5;z 5$cE�B*@Edu5Ba+E1S4|bv~J`G-*LLV~bwߴk !~(D ؁6G3ϸ!P'x(z*?ygRCD*8qk,MZ>||A2(x2FZH]ՋEZ ɢZvFhm<Z;}z|ty볣vg;v|L4)h<* WTp]ňJ .YZ%<%i?R\ʌ?r_D$6zpAK};($E}l {v-5a`r̋l _/eP-7"ݥ쏐F刺]uhṽmd}MvS*02Pk VѷSRIj){?fSԪl;g-߃𰣐pv jޱW*cK|w7eH<ΏNӞ?9SnJhw2t;yC: X/Qm&CL}tF KGֱ(:S<�okajipfrl …D& WOv5;gѻgɓog?+1l?_wqwLoݧ:>qn?} זy%?LJ_wТnm֯og�?0_{<s׾}ڷOg~W7~x3o[6ͽo?ӶϿO9g]/73o?<?< 3wr93~p_ݿL }zݴ{?;#Bg}/<ʈO}ͫN_jܠ[%slvSPd-i?2-fxLV,V0'X{w1<c)/ 1"SַQ *?Q9h.C1H J�?7U9GPḚ; }[ɬ 5} TM?7j\ef FAIm[rC?rY-6 SG<M~"&g)o_%2R>PY m"ҍs1^T 2 \3a`撄јE&u]-y]B"TEUp5xm6)uqasv{`֥p:LT-xQXʒ[L$p=EO2eHZsBYfpbj:۸ & K^$dxuf-IQ8vd^Jc{oU-r:.O)X:Jq] DHc0Bflyf6Do*~V*JWcC ?rhK_Ȟ>V޾ Ǎ;S(.O6 m3b8SMxc<B�'\Jo;6 N}8o%/1-4N;p5~" C9W!�|:Z>?Wןuc~/o~b?o w޿+R'|i/܏WgN>ld^Y~u^~_ck쇷|я藿>yr[}BKyh?=vbUmӗ}^{(loBw_s/{G02PLʚOt5 Q-"&(~}'Zck.O)GTUJz;`sq[P&šTاv>bC!M D;:=qxA`OOԸ#6M}P3a S]pY <Q"gɈܤ}І.*7+d ȃctg쇂ҋ]NرF9RDYhAꉛz v=,ǵUr<뺮b!UQeQq1>=:Uoi2=Z??3taz楃pvDe2e\PQ  5I4G/GKK{\�gx#CzL-pit?]w"l4Mj]b3wx@.,?bkt+~&q-Qԅ|zs1%L.Y6x 6ET)4^)JʂUCB\y(]T]Lzԅ]-fno~@<-HS {k9 WA*GȲ5  B|^)&䏀 Axj+q1PEu�I^|G97*ClopBv8z\l `H&= =[fayb*C�*z�! =yy,`C`BqXS3֌΂C#Du* hx &fսjKILn*  B~]_ؑRp6váɾD-vd8}+H  q"J H3'j;kDDoSq^Wv?ϿyO_.#򽿳6{NO0Wץ_/+_#:).~xOo~~gw)W 1O;o>y_/og xW|t"vυ qo[q^yr_<P{c^0fb`s`L/iHf`ӶeY6oAѯNoA{sTL0A, 4*+m皑ģzkvIϺh&c_k|LҾ@ F22A@0Pb+.0)R<Dlv~_&-| rVN=E]ЌCHz?);?T5&` Pz L~0;9bRS8!hASBSN0ϪFH"=* DLJaX'F0nU"ABܣwLr @>Drp])ɸI$L0&ő4BS 7 D-!D n FGt"܌XG`2 \Uq_&*,x2ǫh4YYY]]Y]LQQ0Q]ճ`6ߟ!-fc^=}s}Gԝ/~]3O|ۊoΝ>ژOhXlMd'#Y̹^RD#yԵHM"\ 5s]\T1U# pB}GPWjJ"EWjLa"�N]ܒh?G@|dtOcy ^XPw40Leِkk{b`6_iq{w[ܾ.AU[U*ʜr6" ^�7?Y ̀BH!GbQ#;$ *p  $ T= $!�!8~Oހ>o qWAh 4}4^ rO)�P ~ĉMpN@EM@�_>` "!a["!lbV 1=!ڗGlª{BBIꩃ0<F�6.a&V&(Ir *3O#ԋ]# Bb@%WY6_uʰ}/|\}qool?W|y];mn?qrJP ɥKu#p_O1~XLng~MG5Ž~ϥ7ݻf ['|𚯺ڕ`&_^:^{Z|ַ_7L_|/tg<#\F#5CQ<ָ8h\Th/%H(Z(9/bgɠ0ٛ eZRS+p4W :ή"~(_ALEeKK�ejS7L[c2A G!$F9&p,&k݁H!P0>9c2.*Ҩ8@? "$4 D! ! ;Q{sd0D )$S <HWK D{JCP9@oBELlD7iG9i40IXHpS׫B24BdAp NADeY刈dYz 뺦BAU͹,VFMg&9O=3۾tЃܿu͋{;EMjVxe4.ƣMDdgj5SQP!R`aIբ(F娠»NEeYֵ,TsETHM wtWѳW,{$Hb9#d؈2 J`��K43dƙ*ig_DOMv=ܽj]:_c媲1(Rn[mUDuCR9GM{Wi^ i!dB!1Bj鵭!6n;eyc4M *xxaLf՜nFJ4fٛHdtH?4A;y)K*m!x%lGJg/aT{&Z;<%"&CHʢPmn*S"T|#ъ? !brA6p3xS_Fò B>`Џ0)D{S-<p sj`!B+ _! ȫ��?9Rv|QgzڷOw/|lݷyE?׽[|Tc7�5o<Eww?_.o|7IH5;I?W]WϿ-P"bz?2B9ÉE!V/x-4A ~!]Ȏ jυ'(Zw^K0;ḩP"H`2&P` BbZ`$Ц. '[KmlQ~ 0{"\Sv>l 8w~vGSUȁ -U2ē"p*TΠLP+B|(Wo'R#4D R)! Z\'`{%r2?&"?Co!d`pQ2𵌺afƮYDvfq3 HSAdk%SEQr\x2.emuuczj2YVKEՎ̷eztǯ?{<>iҧc~s|So3gOq9f[?}`w|v0*ecce< fk )K.Dž̵,ez&jLSA,%S)1+T$PWŜ],>IjOnx`1NVԚnFX%0BM,Z34) ;{!-M2>ؠ-ycs ֲh[s{!)U$3UQT&SزYG|$Da*hl@R,PJ!D`ab'L$`0@AaX~3*1-kX<kE�=4Eɸ#dCk{=$oC`Q�yb( (ͫGAxiTxOQa�d3Ѓ3Ea AE<-hSNJ?!R`xf5t^aSG̥Bi^rcE!K` C)'y bgV4B M;v $zCڟm-��W/7Oggp{N&޼od ;_QL`*?їC;ٹv퓍.+cCw-{K?JXviY+@2[#"!y&H˲1LWvnfAXLHOSܓ~6LyA T0V [{^ bƎ" uC.ء5 %PHNZt2}4>4*s=~!Lm?@7y`7 bEmNYˬ7f`#ՓcvyZ'X?&b([ħW9+BCO!d@H!|q4)!hwyekA%gJr &I AnTF+T!}q<< &UGkɚG?�y m8[AT{A eYh<^'+hc}6Z]LɘFEŴLElma;O[>x1/z_='}mo\w]:ڙ/ftk1"9 :j~gT3,h\,ʢ( .bTಠew)B,T&D+,,k,,ҕrf"PNdYx\iy#IZEBmTFGAdAdGx:-ʾO\T5}oGמ~3?r9wpS/owo=8w~ 8{(Ϭ?:U9O;oya;_/{Bǔ:S>Ou|?i/|\wO߮2_>r+y~O:b+Z'OuǨ`~۽7w[o=9lcPu3e13g>Z{\BvW؝%uJ}|ݦAdAI, 2 =YFoGTT\7i2\KUUDLuE *WSnX<hko G;{K/]=8:fp6e.ǵUM0F#1sY3Djyeo "Y,mt]f%4aqYk{"~HHL>թp޾�n>>w &RmMKQydb|b4o]Q.·,cgoBMuSgCwwWZӔ.u~hgd8+wHbCn>Xhj]9| jse8 t]`85cܕIa`P(;k'vo�G o7QFeӽVV EeJN3@0 VI+AHg;2Bf6hްB d<74C6PP!)\Fw)MKXӫcJrAD^i{(+_q?̹0կyyWوսlX>j?On8~`'_W,.#�|SNqzaM?xꖳQ_xw<ZQ􁋋73["+_q/Z3k;omŖ/�~|Keg߸x*O+m]ovox[z!޶FνY??Yg(_SцHga{IN(g-=21X5Md3)4<!";?_RXP= TZoS[>2ʱgT*t|%n4MY%.#,rA9)v~";?V$!Y! < 0AϪ܌>+vZ~2 [{M} [QZ<H ϰ(ۉ* >6`[-Q펦Adk#6f"LEIED%-JQU}E]Uu]拙4*h<YY/N0SS߽~wgyp ۗ.nmmoTSI\땢^ZJ*Z\pYBMWqDEreIg0bHX I %v> &\Q56k9I$ŝL<;] wj@J8U @U0xYr4.ɾ&̂Q̸bF #ֹϦ ɗeQD AE{Q+vI_&|F4#WF ݫbkbнN}"KhDvs1o'XN T#?BTP@ƿLc\U_RT6􍴕IֵSo)'0@*Q�7nOKgOnNp@9 f@ AdQ1B 7[O|ZZr;B\cH!@B y!]T0YZg;)L#b+f�aUƢ3  ! X?aP9DnnEHbAV1A�NlSNŃP_XدKO}ک<ƥyۦo;gxs:Zs_տkwX^QlJvcu_eg֊쳳}[k`== _1[ěFOi˾AW/o2(}j?I^mvoR[ف?;Z ?Se*Qdc}/͖;'?ϼs|zqvEhHH~ɿ鷍_xĈyCC_|3oO=f7>� @CϜ,/ `vL0),jq4'W&,(B+=L"ey3F⟷LZPL mlUZ0dL-(Dp�BoFE rLP8;fa!WL8mg]pqh;?lM26Ly$d`f6K!dK,U'b@7+1 ((1q꠨a*Sn44\ۻI)\1A3ݧݤǘD+1: R@O@b섛k8PW :g�6 l@6% l Wiw4 2 \i-%DVHjjY,EUWH]|V1#qQheBgύn~ܩ;׷nm^?=~{wztX.j>ӚGBB. f.""5Q!K,741l&a"bU ~d j#9Cʟ/B|3˵xG+$:9&?f$;L !zL9r4:0$*GߦB*ѵ2%l'JezLMU UΤuřNN#3Bsv�kC3rf>kf�5N>Pf)t16'y;DҴCcl2s%rHω*5|R кFJCׂ6+C q셐ԒҥO!!O 3Dx|]/~<OgOhyLC_޹s'�[\w)g׋?{7"]X+b ogq]C6ߥJW8z]{xYO} m/~޹0˞򝟯^pce|>wm.;;-L=)-'0?Q_?._O=ueN5w2'?cla{MF_S׾=Yg^M5H=CdͺQ+Te%Q7Vu`T(#}o$g#ta)C,0ܥM&Pb\)hA)`WBV G͏rOGk?\&.uj:zqoxx]a !ݴH!k0uy~BkLώ:a7i4yz[F-]n 5Rb/{;kߧp!< <EDćrb%TJ=*u%H-KYѨɘӧoqr4=={7-vg[.mLGGb>/jYި.iNuYԣc͂/""T-RUHxe`a&aiVfBtk ^& eZ]i؟|~_2)h/8hAbkސ ,`?AbQ#1&2&GLᘴ\L$\9}KK8fHy,C 26©V{H{4UuivS_K?;?Axr6�fq! GY�It HAeAjlIq. w-|T8:ۂO!$0:&$(!w T<z 1Me q[XHRdAxG>._2G l0LzS)`tK5ot)%Lvԩ11g]#vì)'䖉a5׿07L2Y/Y7}Ϛ1|ݻ_/]l8-p.>q}:~qIK�xu Y+r³^~ 0ymm�k{]tudvkQŽr_܍X^/7UM?�_]m꘿}Կy0w›?VGOH3 R¢7dPw,^ C"&H`8 _j&zoãီq8"ĩ}Q#(imHQ]Ek PUP L7' "BL j`‰2ÐZ)bRmv[x#ٻ8:/uQNX I 6W�,6|` v>R9W@ P #@ˣ#q8V P{1蕗Mx!IS*+7cH38l$`6T$*S/5S:M!$v% >&/@ 2#Y,f',˲,HE]ںjꪮE1OzQӚԼX>bgA}xHGG|XTuMu]dEX`r}bZXEh07q_5ffHc9ۂp5܆XܖIy~z"~LAdA1))oVт]=wLY/>w'Q}#:iyo=﫞ک=5笞]o{nC'<zClZ/?ٵ^ ͫN̝jv?3KD;HD~Zz}}^gLpMt˽ 2 2 2/">"!H,hv2uM,󪮉( * ᒨJLSn9?sO{;楣͝ݝK e`1NJd1[Șb悘 ErD\5n ܏RR-U27[0& S5V-74C"­`ng$F^,$x|4<̋ t5.6 ۿBxe�VB5sCfH.IE0d:]]Up`C!|sl qb]V&fH''U jךGȲ5!U'w>5dVl"$tax;ʁQ_Ymt@EԀpsV[Tno9Hp#SP:֫� >t6{qsl8<[7{`1AS#Du*vl!ӥDuo0Ru?&Y/vӂp*ST~P*:,ۄ`H:<.hb:l D\B!,fl㆞ sF{mbԚ򴯖Bl0U[?;8)MFWڷO?[/\ԉ1\!e#Oy#(srX!7L6ysh}?%~ n/:~?n9/[OuO}VZ痣£A1=ܲL0^4l(p\ †0~XNF )NoAEL },&樘 aXh3s9`6-f'AwK}1J (`õ-0.bTЪ`2Ao+X&Ha#v?G{80)v@q;?]nb bi'XF$2AژTI 'q{^qZ{J  U7{aDv"‰~ƍyF>v3Vj$Hk&\z ܤ8FX!QlD[/&R\m)/?$HVV!;kAaq[EY=LT,'>&!Lxmm|jcrjce}m:IYEӒrJםBwU>k7E'>S_ħ} p+U}R-GBGSiZЬ9ӜhAEUqETW5q%\\K Ⴈ$)EJKPQ?\ɘ`ة v)J`-ȈTBe$;stpGŝ=h? <,k Ig^ScSJK[{DX9.Īξ~a[Su3Tɰ5@q?puv;ӟ +DDe$i"nO{gG*{3QJP!ޢjşų @yC#N|!\]>h[U%g !>,GGNg<yq* Xa 8/v A%1 ߊSsjazvc;9 $f+BtEu! BY~1T<57�?#Bt�;^rSkTXM}S%i[: ..# Bb@%}b=d^#B>t%<qě6}w6;gvV%6y[{K ]q/~wߑ~SW6V:S'T-}PJ~t16?eK/#n=^Hӟ+ODo@6�;Ʒ]W|֞sI39�X#W-v3y28A01qmvtΠ4;2AJF))8ڙMLJ'B`|~ /0FrW`yQ _�}#&H`Y?狸Zkp~L&h R2AB;?;ǥ h;U�;3v>`,IH0b&4$,5($|5E!$ղN0{2qLLPO} Nn& XK3 ўTN8P>b 8'nzb~b7CN{JN$P(I#dAaȻ3Yt&*jJLTvp$%H=Fj܂n去n=;9:ݛNW5WTEYrQ2R*"Y(X^,TS]]Ls\ TUR"\;N!әez[ +@…S7▣rF��8؂i<qvݢ_.6srku3R:GuDJP0Xujj2d̛tux"3Hf0%D8?5=`NHji|b?>,6vGHX!ӤDJˠWϠ暝72yV2A^:@=̄dA~y"y%>9?]'irm �Q6t--] D�mށBH35 reNOx$~[<Y!Wrυ],q?~b+5~'z/IU>Yј;F|>{V>/cȞzɇ6_tww<|ᇮLi#8j{n#nY&ג ܥl?#9wON*Ɛ^Fr[倖 _;,K:zhLژ`+81ʞPI%pdl4L0A:R9ArF;A~,_iQ4: "CU '2AO7{R&؅,] mY얿S8.=V|8Ad/K .-xY(("")DКЩ-Ƌd:;}x8><:ٙ^<88Giz .qJdfZEZFx%b&) Bf)J`j\28T(L%O-IȆ]RH;3HH0w [-r.ͧ5yyx qju[7wt cx>2-YL(BRےv3%\R ކ(  bnEotb,IHXHD|'X`7] :Jk6]^1Cu4 h371V\fPbAN�BF6iָM<z'(kHw=*0jb xM<2DjIf!0DsֹO}1nFk1ֻ<gev! �fyk}ؠn* 3᧾l6'@Mz,ϸX9:Ma3.J#b[C/J!*¯2i�6+l$h!ĠXa3h!l9anlmԓfUk!G"\t�srk%WU>q% =_La'-ta ?}Gk!rc-< �M^)"BgD&<Ix OP*8gP%B(I:up0vCd^jg Zr?I#Y\1($Q`@ "#Y3Ac1Np0vőt4*s)Թ8Lm?g*{ANT֎څGG۹WϺ!D!)&HΗ樌LQ9E<)Ć9!bM}iCHLeN(6 $ JraL*Alp`V&$2>1eH9&gu1A\S,yZ%xAH3''AdIp\$BT;kc9+p./CDDT $5I]HMRUTSYDoLggSw6/\ܽti{w`v4ꊪEA2c٠bEYR,EQeQRY$\TRK] S̾,u]HYt|gK?v"dAdAyʜ6m?Z{t-R׼ag7 V>9l{oN4�|udw_(G�NZwdAdAdA@\ 쳗EY@T,k z$! rX,SFe9Oբ(;whvjYlolm]ܽw0?<8U4^e.e1.EaRKfႋb‰T/4q8 p?܃w2㿜J#\H´(vym:6ژ~>Vhw| ienAgFHOmB.>ؗIsZV(uU^1RӟvW2iN ~*4 !#OAeB*@HT8s@y8L/ ЖQh))m8~NԿ5 ĝo@]~N]?e"B*8Ө}6R9 " BBŝWN5uBkT恶űCKb. `pd+5i0fO+<B[S q 蹬>aՒ�I^*�,B?}:צ~UNk|әco<6| 6P4x\&IPjYtDIu2+_qvZڈT�sMM͹ IXP0q*Sejs y =*R i2kTDQ);nCC ;őpdveU<HX*+ƟvZx\AE+B>BC}Zf[V.'fJQ<7ir=yka x/r+*Rc)"z;3l02dAyDzθǀYOg3͙M&TafE`WVW׊ӧF7\Wn_;=;.\^p4GÃtzP͹D#.FhRD%/+kTu]Wu]԰̋"aӤ7W4jXw1-bDz)J+Nu~%;Ki X^`k,uCBH d} 7r$_\yTK@W8q&Dw?ү}ҕшwZ˾}VF ݫbkNB6YB�,M" N'#$R. Qej3YYs%Ee&ʱɅ`tOf�@% Fmş]HLYV KA ԉ}M2 w"G",�;FfK!AjR5[w`S,I#DB(3$3 ߐ]8$ $Le!0o$\yp֨ũ<V X,1`QؠҀ$ !v9DB{!܊.x s-\&5q M?u[=kϏ~u'S(qi'e5Ļ6>ݮ?N@yMa0-K@.SbsXQD(,噂`Xc3oRd([P^äXYE'ͧ$$hey4X') \h@</pтHH8L&+3A2C@JQoAiRv>>vFAJ2A�+4#.mw8�Q`m`H7:) O}G+D9 sӽ:^בSG~ă 0 Q 4}M)i(_A4~ BЉ?#*fk_bM%|Ps8FJe7.7 AlJ҇2 <D ioHp -7k(\\h,rkJd43Q]z|&Gәlm/mewg}}0;:z.RVRը.J* YK.FDCef$ˆ_]hRϗpa`\GqG)ř&?f$;`*a # o�P9"qUHly.^ʓ!=|Qh|f0R9kٙnz !ɹFQo,NJ6^cW97pBei`Q>wեc;CfUqnT9BHNJfS>l}H~r-?T(8W"NBRKJ>IX7�v�_-9v-\ {Q׽k?;/ <'Nvh\k>=^@ R{j/nxӽ]quc5�^rh!֢#j=`7Y&}xcQ{d ͻəx̱Kb]*D �pJ5:|@$6ET`! =A&.|o-~b W^'#4O1gp%'.J6E J:B=DWMM7 &xzU BNF.7;ZJN}ǀwJ>w9Db 2#_0Բ̉0T肌!gy!K0Ed*f^6 * )Y Me0jt}6zwwuuhs`g{??8fEU|A EQEYr9(~03cQhOv10>iYS2a KPDCӓ#H#@\#@\bSG ,!1c. 1COx>%mHD$o G)w sVO3\gSd(?*l IH{4#6M*˨^tT9| k4m} jTCACno}#MGLyB dr*Xxs@sN-B}lBb  ~k۷-!>5 =IϋǀMB5H'Y[lpm(Ax}�xy Q>` VI3:3^( P/pj q,p)!vOD1|Cp34X -.ꘘpqPoa=JaBؽ̀6v�_9`{M]e7H8]fW/ZųW_ɭו) ^:v�%7>J_S_S'-*<r6eg/vb9`Bf0AoLdniH)GfI^ C"&|^[� '"a|"c*:a{+.cz) Xk_s!߭SEk +NcULB!i&H5cG͏eR;Ɇ/uQNX }󝝏q5 Ov)TN0Eqr%0 B&Hs4N#A"DnRbB"D”!N8l$`6Ty v37oDŽp PӮ$PN$땴YhAS6Pjuz3i2sQ"!nܠDDe5BLT q-RQ%R5GV"T]WkGGkW-뽃={;>;< x4Qɫz4]ē,ʲMDav-?/u+W,B "dj 2 2ȇLL|leOM?~mf_U2_Ֆ̋FGdw8b%7ﹰcH(\dAd!CuA20]] N*;ɤ&.ɟ#.YD]7nLEYB1m;W͊f y]{|s`skok >NgQQy]UX,)A`2[U2g=X' (\U{ߐK] iK<Q~…hkP9[ܩi.!TE[D0j90m}f :%;(BHqc)xpHqT`*cUP&{FWmm-_¡ZՀ" l8OUayf1* hag$S*t's{ )GB<sQ6*P !B*3$ t!Ã5*e?hQL6SOـkD 왩fֿ ]7vM}v8SSGk-P#DW?p4#~+*N`+ FήEK29/}͟2__;s1 _W>;K6[d=6!穷%Ǒzp&k bZO~#8!gEu I!+-: ox Y2^`Ļ@e e3A4Ј簾덟]{b`w,a t< ɗ"R9Mf |ryjdM  Q/jg-ļ`QNo $iR!${ӨW: . x&ɬ @ Th>7V&xeNo�AJOL(H]|(ҨP .yY(<FeY�nPpQKyYcLrȭ׃ 2 tCG.jE)(A:hoK:_,ֻW3Ѩ&Zj- =5:=<8b88f£RqY^ޜ rY(PX:yQFRQ!Q~gj/r ImDP&TFr%;2ŝttU5|d@]9SD&p 16͍D'Weߨf$~59O*^/>Nf $*!u@FȱZVYC0Mdq'=I#$nڤƤ,ٺ=诚Idӭ¦{*+cJ~bAChgQ2A'/$w9D\w*\BB!"!aɨ$̾ M7F\p*kIlE)!b{:ۏ'FY>7A, /S_.7FG cɯYTljdB!jK B(2}Uخ:Z !]W>;_$*q_}QO_O745xzgW=o5�7b_y׾}oByBYw\\0G*h(Z'Lp)6dfqT e/9&Ҝ<1`?͆l\}-/K JGX==!m0$0Ts(p+m$ۡuF2EeZ,I&"MdI;%/6K{YqT�6 EL0&pW9PJ3Aif7&HCBSky2B}*!"KTGsrcFcg !4: +G!VّŁ؈3oѣ.s΍w]u: :b\{" !F 2#^oR\gwZ3sS%kМ];J*Kb!UT HXL+tp )]xtw);;h:Ws)ՅPA5 5B(ʢ(bT2SQQE.$ڿz"H k:)鈏J*7fUьC<Nyܒ[FٻL1Phn#|>ќDmSȕvWvtG&G#&m Du:d~/`#ܡuwx!)TiHS#T(g7=!dv21eI<Dd8E)D{ PjfQDד@7:ry/0-S<rrBԧ9gʭbv^[;jP&H!$ rٽ;!zkBۢ9;₃\Lw޿o*NKr4z`p CǐWw?e"r'<0}|"o�哏8j{2GNFOUMtdRˠQ=ͧNN blQe$aQ-.pnQ"a(M4Ճte! MCu~^S& 8R*o|W3^ !P$BZQ2(i$J^`*LPwuCDxJ[]BğdArYS#6Lc, Ff>ɘZ,cDD4ӫ$g7Yݕ snk`kkoskᴪi<Eŋ4*ɨ\.b!DDFc.Bj\8ʒˢpMTuQ]5-`qͫU1ůC]c<fqcǩ^HLa.!oRYv'GpwXov;M9"Szc ! JpqqOۄG*)׶@<diY:#L)pcC!={QaCm"B|�'IG.lIr21V\fPbAN�BFXj [q2O")q[QF5UX  FBHrz�x4jqݛ i27a*kԧvlĹoSM}]X h,dA16TfPIcO}�y;7LZUKF&|@!,siP!a3I e .9_5Y,r@6@H}b5z#BL5 rn*2 �;_[^[{ؗ\Lܯ[sMoB}CG$>u2B?xw~MG-'|3n�7ϺsLͽՕqɿ[w^9L?DsWUG7zRSl ڛH1A4 Trqp F#nM_6Y-Hނj 0A*Pڴ+{ ­L Y{ $N "dZd0&X}!hAK| QSRc;lq& sGHMeж)݊ R K`$v" );_2N~L2L뻓Z`ʁ\!#$`#2 mlH?(k?&&M@NOB(<-Bd*" $XHiX&gu1A\S,< zjyJSؠ  2ȣ]#^"? Z_ТMOްWn.b:]泣j!V6&UUI)( . fbLEQp z.Y(k)|1F;ԬQpRZ ^BYwX6ũݩKq%FG++iZ]6=ǜ"; ;I APIEz83F_fXC Ǽ{`LgB2vj<"uI#>J3v-:eO}_E};%] 00c횤TfGef!9 JO�Nea0gQ�sM>Ů;ǿm[G9FHO1:ة'éO*i+ZԊB˳j.w݇�0t!߇ά~J{6&~oϴmϿr}#|j~]{υkv !lG<l|کKُoؗ\۶ϾWV מ}݀Lr|ũW?9͝/>UU*I<d^7k QBPz,mDf$ :lp4mi  ERPw/5`_Bwd2PJ㸃Cg[d׭*f-B_߃)(~TjFH?I {cTRKΏAPT%?'vg?R<fZ?-@payxXdApGdI&%G˕kSzh*GS9:/\Z;ۻݽL EUU] eYK*J.ʲ(~)f*XJh4y<⢼,v-sޅFDlִ噒L6)\lVzމ̤͈`Pj37uy#"6r es3/M:FJ;3"iʸId2tq:n1|MM! DdqtM>}΁3�Uf5N"v`'ځ[.\f';H⏡Bw;XH~!#8!`:+=NMeұ3L"3s]t/X"2[l^*d#'! |(r@Bh-<ݣzww.}<> rHgӽ͗ 9ûJ0݇ =TC/ KIV]j|'+�p|ODnuM~~WwF:;|''f~b%?]3]7>=}z3ؼ5H\xyDIn?-?}V}sۥ`O>eq;ݪkWJVj>{"zSu7zȺ (MOBwռ,$ l>7DYq_c(X}xBN4Q*.U-g$orzF|m$yQ'/WQuCPtբvq(T4IkuhmKuŁ ؏ahSlT %"ʹ8Uj6s0*`UqO6'bh]j|U#U{aM)~"J:dMGƵ e)[C;>f j#Lyis/$&{ EpzvnQyκ5"{h 2 "RҭE OX5/*Z,|hFG|ghwpghghp*;{^u8tj&)f^P<Z] * !f*J₈&*D%#.eQ-&|ŋڥҵ\U|GLq'NTqF!_Te!X!,Kheg`حI6_7{�,=SHb(By(?Ҫco冦?VF ݫbkڔ 4;`j~/H:qq]J9&dCX*vINfn<Mgdt<@P@mş;"<yB垥bq'R ŝ`Rcρf�ʰnvI DrBL{N8g9a* 'y0Zl\yp֨__;a|f=;'m/װ@Wh1Hh"C�XidKՂ&A/_�0=g}_w4*n3??s\^:7>#W_l?}?oE[_"/;_?ŽㅯSg1~-%m_ٷKy3Wr?+mϟWgl4q4h_ zr w\_cPjS~DM2P(6)&,`&Doŋm-hT[�>Iz3AEZ18+Ǯ:Ya`cL 0v~ E!AU*h`gT$.BL$*E.m'a#ۨAQ?b+kk;_a j}aRǽ% &pnCu!?afOIq'F<>P9_٫?U.Da^D]1Uƈz `#`SBW҇2 L MQATeA1-_!\hVق`w{{ӣ|>_̎b6뚥XRVR0qYQQR/fT *EDH8Am*@Q0gj+}ԴaSN"<)2~M1A^ jk Nioonw>;ο,RtIjb#x(Gw4)]#BTHԱ^iivֆ6ucmv!TKsc=Wur䧎yuMʫl]B Q3*oFH恞<je.Y2)]$:nu#BHjWw T|LBg65*G:v;~->ι⣟89oxޮrD_xYwʺϾ}녯g>k_WV5{Oi| }:o9jܷ޷/+#οwn\^#_l%�LDcJDϺsFoimeͯ>gC̊ۺzC[i:&ofHδʘQ#V4.9&tLo] LP#$c1&8x*;ڏ ZRP1Cw60кr Z. #W3DoȠz.5F-]nEwsS} 2 <,R"*&*` Y*P-Tץԫ?=wp@;tvp09ͩ^b!5FER5$""R1T/bPf-ȑTpiNH/)h/8L GLţ*uU!Doǐff[ cY7|#5f4I<9mI">Sm<ffĈrx#9>1} G 1`(v;{` wdtuIyj<U&@g58o���IDAT:4=1}ڦNބ`(MV&f uttm&R!2plBb ~2G` g9$�18W !W!f|d c3n)=v8Bn/ [!v{l2'G:ba =p,p)=ws  $E(-uږ#ݶqI;NƓ58x<ǓxŎ׊=nur;NKZR$I| A\95|_U]չ o/ÃsG߷]U@C;;x l :"ĀBA {{(^<+ >\vI'~ O4lo9ڐ,drqʿ, vr@?4+r cnwEZ 3@Ya8`?8/bw vt-�,L0A>}X]$ $+)AYSp>!<W@EfBa  qD8tM0I&H! 0ABlh )W;GԜHd d}RI&|(I!`|%KA$UhC@ ĤK* RI:RJrmkCϲ iRBBX.�8hH js-\&Me 4lfrDADYIgdx+J+_Xpdk!CK!uCvl>Joyebiy}ap0_xꍅU_[\ZXtGhuf-RN+܉ bґn'oώ'^nEluxEZ=EDIn+s$y$VY="/x돇] hU|0rIe^ReLFF !R#>aaȆ/ !)Z5OqTևWGG8U4\:ުiX )Иj >3E⮶i)�³}UkEJrɘdeDeNL.nEoȆ5A.f83(3Q/:Jۈ TEhs@.8o|g$} L}MD/EQV+ ofݿ Vaٽ➏ٲJ}?/}'Sj^T+HS[{?mOou_xbC?o%U3t쪄+EWcZ8tQA9ٍg}3AT1AWcZY4$!\omsWgaacn*} (Z__I1c]'U-zO-RDB,OfחhP}'˅K0AHf K(YEFl4t "(xOݡ.w`+B!M*UN$!Ѻ"rBJ>M߆ Kk.X<D,�kJ+S,slK.jnK4ڥm4;?vd<>'};?ĝ?vףz#k}ݝ'ǖF#^gk.뫦Yt`8%r)S˳2ᦺ�=3dM'l`|3ZC\ qDT받T63_̎:jCwWPugbزXw=#x[!3YEu"nű8wf6X Auf-�fdS7K(fy+f?nS| nJBă$xLLgE鴔0@ k:5KpِT.c~R>Pn$s;Vp. >z |M;vwW&/c/9Wn?o{/1}}\Y?v7[2k0 Sc#o-g_xB/n[]t}{~y-}"|b览G<[ !nKJťY&h~O4`aDvk,+b#r*0Y#*k1TVP3t1o)]$-4I|wmir/gL *OIҚѣ"רw.bKW&hJ-i yfD ` C9z,Zͪ/P*:ashMeߖ^ \Z"&~+j Ij*5!u4eН[mVZi֋gL$Cu %kz!K.M`[:GL-"Źمo\>wmauvjֺ vON^.*XC)/8@ؘjBbS7w\m h)V=`s7q-##yš9Zes'_r ~;آo߱Ɇki? /umU/TºZ)xcHea/A`w~+=_Ғ᭪rL"\ǁ $4tp}dьf;-w6w ddA# {,BE.6<0n%t =8@ѧDe`SC+�I~*B6:BNF $!D){2g�!lg1F lTe`N g Blyx_D{ئV{~;_;_E~#/oH{ۮv{e+{뾓}GG|ЇMpǎq_ʎGnګCc_}c'aϟO4am ݣ^NDd8𱵟Ƥإ?`Lt #mwB(¢wLjO_](K|X(E!f*E:UQ7q-cÑ8E8 2Րq>ql l}O9(~I4&(_E e0ͱf-hP=DBX 2A3Alo2AJe*;Kq͟B`#BӜGE&ggEB*';kDP7;JZ!J+_PUGuKL0 Yv&c=%Mi]k++f {`aq}nznZ;;w<szs+):Be$E #$)ܧ]+w8IpazoLr6�?y'\5S5#\b$ jls'7 ޷pg3@_B%.GMB%;p"6;No—$⥰M(Yyl!>D$.!*" �< OMoJ2V,.>hfo`u[E 3XP$hWGʕ| ʙ!" �l@X!!*|^ Ԅq"EЏ"&C"Z:`@l b#oP(sA6)cB\1ŝ3`;ī,#$ @[>iq] D qr`NKANc $B## ־k:@ 1n_ͿgO{=z/WuoH{tڿȾ.ݹ=#3~unVIlmU:}.?gy^>yo_ܹkЯw?m'k- _:GP z49B.[a9"qr*RZƤ`~A^ v@%$KL0(>q&؏D,*QF(d\۝ށJ,W !H6@ |Q#|L~+dU% c& :cCapq6qLP& :2Jcʓq>NeIt6<X&hI0q>C-FQ d@b[J! R)m!MLr&HB .piF)qKL B;G mMG )Ύ  gORn7xDV22!GUɓ'_}չjVbBغ~k *&j*}uuC d{D]C=C(M]SCG=cO<:'}s߿9tE.12J�8Av BEDI:İX\:xqQ0.DJHĈt/Էbu'5~50.>3!ZX Bt j|H<79D>Z5KI�Ɵ!0RC]L.e`!$V'~UV&d焙U r+B3Afl&g@x>q+01�s#� VyBx?J% 'n=50̎616 韄46 CLHAl@=L!9VEvK( L! c$6(Ɔ3e!ZӇ$ <c۱" !lG88!#7IAss!HP}zHi"|rl@cCAH}bfV1M!gojWT2}ݿo:z!?8oo.]lO?89QZ2DokKɿ=^W~SO;q1W7[UݯkzV1a25Vxb4wn&oo'M w4ᑔajq/aۿxf_<8sϓc}b}rKw#w%|x{[ Ӌ /kX w{?9g>!-˘ Y2p4SL'Juu&HQW@u&.;]xhxu0b w%$'a8Gajd*(^ e3Im Y+db(Wgdx' HL#$1]8 '*D"@5#( %LC$D I0I&+)cDH PB!fr !,O"H H"1Ds.&0Iu&!$%Btmς$D"`@DeL(iO7`RR-]ΔI$i<fxd}}}uuu0LNNva`0XZZSSS\~W_=}t{'9ckz߯@vng(J+|To5$L"㊲.D>2D3Ifh@=ݎzȉg1Η4 nNDD< +KѮJ]0>n+d !onYb*91FQ ,Rې"v}ʻM mEM3-[9G`2p<Q|FWTP@o8-!Q5-QTHg!$b7~`rt(G kr( _0*sFG9y<�V\ l!D{3fg@,b\zlt@ߤal~`T8 fĜh2xnH4 wZ0z )QuiZnNXKM6"#KXD K,se:3~%}4:V6#sKϮ};3Ks ҡ=݃S};:|;voj5KgO_^};t}j_JRή=ճ3k3>߽mWT'}eZ{vuLu}裇Gڽ̓Ъ-pb&HxF,0`yA0AJ`vSITU$cť8#|&ћVaH뚁I:@<L\DlPA8 FeB "YI0-Q<9;Ʋ*~Q}2styq&K U$ӆQnӘ.u3ve@hGClȹYTsaUfv<"(O-3�ZYwfO8122BzcFGnܸqǏ bKKK˝NgbbbbbBm^{ndd~xMOO_~}ee&&&&zPoJ+yD2_1aQ-ȔLLz _c}"t/ujW#reL%~;#S븙2G>ںor�븣raO *~<O4{5oh Wt1E /QA9 S@7_qSʰ;]`'.)�7{ 0MB1 ͬC~3x}ײ!ca 7fX`ٷ>wڌaݣ}]\5kNE28lPs25iװ/Rb @xg)6}׾ӧH\14}kSx&]�͠,r 1Y"C�oLMt>{g/ݫysǏjU[�ıOnt {w/>9qA�te˝B"4mKH:?ĹL2.i`&ʖ4]Ib/ltXUt6V ɧha $ᓒaGP 5VPJƏ *oMSyeSf*7cZ-y"-% e']%ώeWnnc}1uBM)%JFG޳nR2ؘL#K"3%@ZiMerZ8;MS8Hs2\Y3k-:;Lqlr^{mvvСCٳg_Ns~P볳'O<u#<˗/_~GFFwUsرG}cݻWVZie3} ~x .Am,AKu.]lG"W6UbJ-I@05$Ao쿻1:Z1ϒ:2);�X]Ј_6|I'k,P xhMH �") :þ7{ BI66)TUg7#͟Co=V! hry=F'ȹ ؚ!$:Å|GEJC smp�CPSܑմ_GHLU* ;kkv�IzUr^C~g$rs'oʥ)AH(o9*`2փ2ß0ZuA7"`UPOoOȨ h8,<zb}vǧVZi`Ya[ӟ" :yHG9B oEGӡ:N3O{B~@2Aݥ D}Zd""ȯxu}J} Fهf(^"ܫdYְCO*̉,b(')+)ͯ9<=ձq>e|vG#FEHI`^"/@˸_+OE& `xPٚ2TR!!eLC kL Q l˴P@E ɲr…'ONOO?cG` //ݻw~~~׮]Я%t̙~g<gjFFFz^ɳ1feeezz^{.]:kvԩK.}ӟ;EJ+\1/hg_ UTlt%wv##d_JEq⽪G{> a1 Vl3\wuV=S$8Z_c`쥃& ٗ =(Uyp!rVS@xSi;exIMr|#l1Ī䃑F�&-2euC>u ч:)R" ȇ>PS/^$VAs=q�m,a“S8!>^q2l '@#B jBBdYGA.�623;P)>uJ= Aԅ.x>!Ă ai ]c+5?:T0;84'H!4�6�!�(B4"ہ"0KG\G&|`!9H'<7>qlT-nBsp?Z݌ wQ!J,1eYd<EH~־Ca꫕VZiDYྙxw IԃdF5#&(a y면S?J&>"^edB\'Ш$LӨD "Q Ȥ0L1^pb\؏! \Ai) T Oc `H~bJD0AjϦkLq&ؘⰐC&Y)JČ`H%5A.`=,"ꂆu/\ ccLЊ\4A+PB3hY6&0A%M2H!@eL0ddAw O4#C$31\8ǐ+�-HALv`OlV`"aL$w}78y믿>77'Y[[{w^z7n-ӱ^җ*wݪ\I;w<~g>zhdd7_|qffVJ+lTR'_?M¦0xq:DdhС~PaA2 x< ٥*&|^zԹO1"7̦KL % lT8܅c'.0̒#~g`CF NYcųkavPE,0!"h7$PO>@"p8c 99Pcg6>`7>\ (7.T]>jfnUdg]aD/3> -P3 ᄸ5g0|ƶ%\5#P.[ƈdYR@V@@xģpl(P=URփm= 5E b!|w3Q�UL1  OfsP/]!BX{ !|Iqc?5_vhEFJ+dJWRwL*fZ\I䱩MLPq&dq2LvWBF$tdk '4&('2 HHV*S2ʧ!|be:xR<0G�4 8_F)Jq*08a aKLB!:$`*S2LDG"K `ķ:L'B 8%d0fR]lK\I',@I!YJTε3 gY4S!oDa� !g&0 l(L EY&XoJփ=,--]rܹsO>y߿NQt^z… XZZ߿ܶm߿m6FGGGGGEƘ;vqޫW?|g^x{>(K[ifɿ#G|$6hPa`%\;QS nej}ҽS_= dd1%ޠx"=d|"tn oU\(ZEܲ_UJ p}?O<uzTB""C(äph@ ~"`}Gl7mgZZjcTBaLv r#yi`bsP.>?~7%FYUP wß-`;7[wfki*Bxlo6LYzKMpTnPj`3�S<اxx)r7}(cVγ/k+_nKZiV~"eYGbg瘧NTm"##/uE\TBHU* Gw#"~Й [yq짩,6M?1`L!s=܄!`Df8ߘ R�':"H`Q2TQy%BH1X=§$VbE/$,\0L%Q*Lp#OiR/PFgcL_C9ǐH9 Ju ,30)$󶀐BksZr+WLOOG?ԧ>@^z魷ZZZZ]]]^^bX>o߾/~###v<111111::vݮ0 z|>;;w޹xG>;wj][i-0/Nl,Sq Fx,gt:_D4 :;Vfũ$·O?3?? 'f9p4ΊL{=R݁5'H|}ha72fu>J %\\rwRW #NʈMD wi+ 뼉^¦V7\$ȡ ]=Bcڋp{e<>e ՟(�Hl�6o1Zgz> yw2UyU_[+Eƅ,'ޞH 8XB)$kvhVBtτq]dZv}\!. 0[uwgh qk|+S}ٟK;VZi---wΌ>]4g'}3"y1ߍD3 q !<xgX�{\\_ 9Olƥ+_K"0Jl"bcH+ ʟ߆%RƿFMKq>٠B [ cq|BK 2TߠZWZBxk vBf1&jFrp4:*_8wD0!5>K^KDrF$LcPhÝ`Y$$R'5թ;i4) `"48Tݒ*3;i⇼j 8ʲsA,|gv^ $ϲkꫯ~ٵk׮XkA_]]]YYY[[ܱzJl!WVVykkkǃ`yyyvv6nu:]vر#B՞7n ^otz^K'&&v޽}neBFj `0X]]|+|@{_o`ihhh WZ\O^X=.Qg`̀4<%Ju�Sg¤MvQK(>ZZ8 ?'c_,%voYX,ǟ5ۿ2aR Ct5 /YW|K4Xv.Lwe."lB:℻j ,b3Jzy�eښ[ \2N�#7$j㙛!,z$JYM!܉R/(RA#3[qx~B MJiMUT'!D){BJheLlm�O-l2eۃ]7gZ|(`FB^e~;-r}"MNQܛJ+|dِ;7×)BT٩n_�L;BM26gb>4sLtȇCD/ik"be1*&ԩ38_GE̊U,@ SFe-w끛|B(?4jT9 Xy&0\1Ay^d�]eFYƈuj @4P^eGSҤHi6;FEtP\쬻HXP fwZC ${x$%\Y[[[]]]]]]__6|ѣG͝>}_^YYJ~v7|7X[[ܿcm۶{ʕՙGNgffҥK0< nÇѻo.,,8pȑ#wy~ӧO_xZ{{۷oZ__x˗;wܱo߾nKDKKKNzׯ\BD;w4\vmddd|||dd/t:cccƘׯU󳳳ׯ__^^>v<p]wo[oU=wޣG{g}~ԩ^{###sѣG?66FDW^=wo}ܹ{o5vZi)>KX=i,kɚۉ.Y"G72D]tsc@Yʧ:EX>Tю%A ;fƔW[E|XlFBnSٲ"V ts*NWF7%p[xm4gl6�p0%&HQVb={sOHVK@ڂ K t<)\KwsiUFi*7}!T1-Qޔs8x-CQ^۰E[J;!"T)1{rK8OwQ+J+?9b--ꛉ&&#g; D!c/#"Q~j(NjBUD<EAr sjq<08P.Td&(R 2Bq6qųT{SA$֤Ln\/mP-4xrS$.PSaCТ zX x&҆aMH2AպX8;~V&*fgg@---vmKKKgϞ}y䑱`0==o^zuϞ=~_�o?/v~#<~رc;v֞?;K/877rq /?8;;>\Ն/\P-JO~ؾ}`0}~_|ŋGٳgO[[[{>Oرcee_~ǟ|ݻww݅z77_|yttSSS׮][ZZڻwHe;22rڵoVU޻wo_yK.]vm~~~dd _¾}{yϞ={ҥ}='~/^7wt:>藿< ^{g}^x7wO| _ػwRJ+7G*zHml?"^w%8? А1ɈQ8"g'B3DnCOxOg}ɽ?dQNm_Xu ,cC)ZijRdihH n>?̩@᳞d' U?ϠKmwo9C1anc9N)G`!F=1alDEi6p FEWi"ggA@98`|zٴu;jx'#ĆŎ<.} ưNf v�U�rVs6Q#$9k FCT?M gfqs#`Ma 9 Q6 l$&^7epl!$XPcÛ) l燜Hn;<6nNG!RΑYEV9xI,R@6ΰ >B@13}Ab<B7Lϑk?7nZ^)tVZiYA_ZI0)-HL0M$ H3BXu ,ɖ1)>;ZD^(CkL.m!ryP?,!XM@BA}@ %`(HLh!\xh9N9g<BLc?*{Xx<LWvg!㦝F1AbqM$ʘ 0G$' PCF"`*L! BH ̥L%¢}!a5*M tAaE XDHFJTgBLP"D fU읅D"`<C s2HI&XA"℧RR-]@H"!p`;wn~~?pU|饗|;cqqԩS/#<yU]XXo999911qڵK.Uv/}zηzvmw>tЎ;zŋzg~{ߛضmK/t{wlllmm_۷o߱cǹs^yN3::zqk/OOMMu]>h?{׿__xmׯ_߾}]w511Q3t:SSS믿~`#8qСCʯ̌۷СCUܹs_׿o\pJzzzgΜqW|K.Ul}`O>w܍7vq]w=ûvV3J+[( ;*"ƐMM5k:d jA;Gps"Z x/KdzlTЧ8 /}^^bi28A"}6ygl(5u*d-*"l客bblP?Ӗΐr̻�Ai T(Hh*#HmuԩA<C./'VM̔(fGUdEڼ4;w�9˻׸d G9t5CH]w0"D7nd}?ƹ O g Y{6SufفslP54#a.gͶؐ tXۯNc&N;i"J+Aki1,3~9p $<5bH<`˛�;n x8@J$YSe:f%;d@(\6U TZF!U(Z}&*`*G*dVЈ>GzS;W_RJ"8 TY �suBwҐq~Y(.DQ*ڏW�K`R*xLД<tTbPCePdМcA*PYF`{-$s[ 剈 ugffwu]'O|w^}[oƍ7?}̙3N~_g=wy~~C=z]Z;11qСO}SwyѣGO8{jѣGg~f޽/^|gz;v8qG~gO:u̙۷_zs=711O>~}{]tFGG1wcLU]wc]wuʕ7x瞛~w._|wرc۶mnow{_??^__?z?|ĉoz/7O|O<w駟Ϟ={<C?Ç;w?/?~ѣG[iJ[ Ň7x�cFI/D1Wn�UEG=ت\?Ra G&nD&V]Ef0*MA n.$ *@foOCB{Opé{BI,*cCcj�͂J <fٮdE?|/ O%r]@^Otyi&eq)T_`! J03ٍ�_WF٢ ʂu^4&�rs{!$# 7GP;w|@ªJ֯V~)ùBB)v/,/dP #R G�vkGO⨨AN>#'C- C7C1/V�"z'fMhJ+ʇBh:7Ǘ;`(%Q+% &b1[gM9^C?L}<*]u*$24b݇ӗGP#],?VjA8B&+|D]5LdPeB <2A(4cThԎR<WVy ` &HDijI<?/IS$&9<wfP3Ԙ G8W@ž`%dfUfdrGd`wӤ8eVGO{Fz ,Q 6[w!G'R̆I�:ӗV  qs)TAlR ,x l&}Hjދ/.--<x7LOO_pg9|ɓ'ϝ;}|3+W\~###˧O>{w߽};wѶmۖy3g\reΝnwddd׮]?kΝ;w]___ZZ"{瓟#G~z̙3;w|>^vmaag~l^{mnnĉ|m۶;vl0?… [Ƙ c̥K^~nٟ|׮]&~0j1۷o߿Աc>я>c{ ^#OOعs3g^{Gv{9pŋ.^xڵG*ڹ7nT{Y޽{ddՅ}СcǎU/B.]J+TӒV5s?Wp}<ՉW{VZiVZi/cXha}p+ʇ_¿{jpJ+J+qY__}w%<H{gΜ9ogff>}nΝovffʕ+z333W^]YY1ƼꭺUqw~~ޯݽ{cznT`tmvС;ȑ#`޽۷o߽{wq]wMMM:thjjjyyyeeennnzzzzzz۶m>C=twΝ;|#On1 ㄈfgggffVWWGyرc^ZW/jU%xiiilllϞ=G|ݻwvmڻw/]vmyy3>>~w>ǎzxii… ՗/_~7]v陙~~ƍ]v={ӧO>cǎj;cll+WN:uN3 ㎶J+lT`+~n/1.m=큓h*&Iaʮ,FriH) ʞElG 6 ѰQϨ(of4OԶhNqZҸ; MM[~);>\4I,RvQn:v ;CpκTvdЊT 2;;|Oi .ssTT˵ ̾ПRX.7>P !c@DK�--?,ݠmVZiV>IJ0o=?; %\9jh&/` lG%sHau)(λ˃9s D!Pz׬JZ!W_8?(kJو L#n K*;d+rL\L0+̢#bZ`"Oր,BTք!h[Gw|1ji$Å^IPVHڰ qv)ӗ"rSʀnHeK@R7M֮_>==sλ|^zɓ˗/۷>255v\} +++kkkU2{gϞ=wyg׫ՎNMM޽*QUsNLL޽{jj c̎;ٳk׮ȑW.--۷﮻ڳgOQٻwѣGjqUt:nW[__Gٹsg_"ܾ}{v"kkkcccGg>~d;wܹ}vj'OJ׻3::gϞO7n7+|_?}~Ǐ۾/ONN~;9uŋO<}_}|[i8.eQy$Ijs'~E&R#9=X%pqE&JፇN7nYF)"{OUljox3NZkL82lX~ Mp{pUxąi+G{z/@aCAC!orkM-/d8?&ouO7CXb+[!g]c Ӑ_53l@b6͝5:π 1Z|+B+'v0Vp;G-k\W �onBZ`V0}7w2SbÀYbgĠ)![L2aS9;Aml�saB^:BSωQdeŵ_+v:ЌVZiV>JK}3_5+ɱSߖ>!*gst_sKCDO92Kܿ{%xm`P'$]\}\) q1A2wdR|*Q@$$BC !6DGXG5`ܑ?@DG"K `(* Q`$q/l hY*8pɒ`+ b�ZĐ%1 Bdy-> yJҹzHmm!`Y!MB#o6ԒHan7HLLP$cl2i(K@V쏧KM'Ӥ1 xիWՏ<_xoccc>v1Z[mk|ʕ~<::zG}~mVUggg:rH[[[UI"=Qh"7\՘NN֖VWWˋUZ[YBsvD6~VVV|ojqAZtcU�t:Ƙ`PݢjIu`0?}رc;v  7nX[[;~}]<CO?oo=s333n۷o߿G}7{޵k?՞ۭʇXJ-Ż5ssX Q\T$먙b"lȁaS�q$E/N& |C,Oaj#Q R@`HuSNЪ.BVB u2"$(8բw(]>}_dRc8;$ĉ;J?B!*X]V!xz !NKJa!J6DTOI7 }P{󔕁q> a4F#rÔd>dS8aٺ_ d7ޘ,BMHP';܉jz;Bxggּ@ČoY:U޷dܪV K,@4l'|̀f]2@{u*<0  *gJus4ιX )$R} ,C`C8BTsGh dJ3Y{${m F+J+Lzs_Ytv>&;;+ᑗ Аz Q^9:2K@bܿן R 4F+ý؏B ryQ\LK4s1shP**e8OpF2A3H&Hab&X{ȱN~e_stpb`"k! 3&Hʊ8_yk2L HraL=%8 !GD/¾Ox 21`CXuagn'M{4jl^( IJ1GDԀQI9G (vDVPف IM�K"B"Dpxkҹsnܸ1::Z-%ÇX^^{ުcǎݻw^pa~~펏o۶mrrrlllttѣǎsҥT\ƍ KKK\ߌjkRveee0T57n"nuLݻСCwx/xԩ"ZXX8{k;,,,T1Չjm&&&^~zkvvjٳg/\0772Xk֪R.Kxaa/~Vo۶m}}}qqZC|V/=w\B啕C=Ն333gΜyw.\~}}+_y:ӧO<Ymd}J+0>b(3+&=|.R6K:xs1~xfiC'&FSťjaqݡ>=W237ɇVuʚ{XVy՜ VJpX@0Bjr $3DHf& wȍD*#0LFhT@rb�AM $2RpfQ5;3f %oJ'm 0"ρ*`= I(c!EuΆlv@H$-�fpln/X #nєLL!bn1{B(0>١Ã!w�k!;3�LNM[ C<g`!S(]]#&VӍYNNJ+|dڍ޽oMp1I(f@ RqQb8!"rQQd00)rP1AL4Ohkv+p4J6/&@~|2"(~ /A+(%W"@?|^Q<)@t` %8``q>=]J0HTzx*@iq> `,S*.`j .vO0A*f̆0(q>< r*r  'zTCcfH53TI>FsEe%ŁرsvC8ǐSHGHPkd' ] 2, (#}"Ν[YY~߹s#G>򑏜:uG:TQ'''mvƍ˗//..vɻΝ{_z饽{.//9s;Ν;?m6"Z__*j^g[gz/�/--UU۪Ղ۷>|я~k߿k׮W?x׮_WVDo߾;sjjwng}_xdj!UeZ_e1U5Zkٹs=swNOO<yzyןW^yett W^}gwU!pϞ=~llliiO?t߿wQmR+ VZi'l'8~#&aR.7Dy+J+ʇ[>}{YhavjVZieKeЧ9=0#oVZiVZҕ+W})p׻}W_}pubbݸqOLL<裧N~ϟ?̙zz^ܪͨh;WT'_Նwo?yo9sfNtXۭ_|Ϟ=oշ~ԩScccvx (N*W"o߾wy?~~۷^|D{۷߸q;}y;v8p{ݶm[J+l4:xkD/{^G\p<[g)XfZyRdaN*k H$gʵ p$gC:v[p`1/8ą0WƺbɌuB\`hIן *iE=ehX@~)2hC҆!�Tʵ%HZeՠj8Bm~av]�3p fFY(8ʛrήx1,RY(t_Ƨ!Z<ڵ6/0]-?-/8MVZi_%xձOΑ ԝcsLa*)L(H!+qCurٲ 9§\S܂忤0Q. KKº7V*J}hS ϩ�] ƹ-u2Et[ɉLP 5%֔Vyq@H3ȇ ODY.ZD�EIL*l!u&7Pd }q(I% iF_f#ׯ_7LMMDO~gϞ}8@n={/_<33szz ׿߬^cǎǏ?k."~!V.Ƙncǎ;w_Ƿo?׮]?;v5::s}۷ollڟLLLU={<ګW>s'O߳g瞝;wz~&&&&''GGGMd:dUrڳg?7snnGG?s?s<;c>K&''?я8q'G>rر_|񩧞ZYY{/| _җv]U[i8v㏣&F< eeckj5 "ik3D!sr$C+i0*>6nCTfMjIA2vD*h EJĬI G;DA<Ut)ԩAY .H7jk�ynA_$zؔiJEmrlF՞*"KRZA2y!l�Qͩ|;}'AdQh=6zX߅thVZiC!swlote& !$JAv-S9+ m@ oNq$➭ $*U69 J3)r Y4 �ds*akRR�0i E%A4 !T 2D*9SJ$RbM(W}3{ĉsXift~~wyWСCaKKK333Ν;<gc`0voONN9rȑ#w&ꍶ?}?#~cccgϞ}7oܸqx`N9̙3O};699977o\~}jj;<toyykw}ᩩ{W}Nsݻ*:tرc{]ZZzWϟ?vcǎ]|_|/^h뮻311111cǎ#G۷ξ׮]۾}w}w` .]K/ yVQߟk]xqfff׮]Gyy]vzK.?x嗯\2>>~Ѓॗ^z|o衇^WJ+S?ȆA"Zֽ%2橯W/F`m&EQƘXBMDZRmyMj+X7/ӚOݛQK$ jD5Y]CLUJkrfd%g[BB<]:[ݷni:\AHfڦg񐚹.kpWȦ*2@Mrjzn'd8{q ù{Q^]b`/p+ihg ]:|)�4$ƽ+2;s *è BUroT8j4Ѳ� B6] !q K:? Ю3jVZi})k+t2/ܦ 7`,%VZޣT$ƎFH_S2J=URej70A!0AEFT s(m^,\ClCId'*Gxb̆"듕7'PEbd|XY :Дkn:M=KZ{({&XhМc.$)e+SFBXW[Y�‚vbbb۶mcccam#NږzY`0N_XX81f۶mwqΝ;uǷmp_ZZZZZ;v6^^__^�ǫEZщGk+Wh;vV 7n,//QzիW]o>>>vբj祥ecxup+++W^Nઑ333׮]۳g:Ugfffff+ٳg޽UGܵk׮]vƍ]vݻw׮]c�CF5A UVLj.|EXyy;ꢕ-ޭM⏯Md{feoBzmBeUVk9{uJSWY#qJ^TAOqd; aduFB&ɘ2*`I 'ف:*4Es�4D-$Z` 973D 6fEs,y<BFyk$5ޒv#:AbƻkX`ݫ"$Hzl c??jOi^nVZi)]Dza3&M"HQ8ձ1A$y.st GTOH24JOC(9EL VfVyt7Jf/@U08?B(SJ$ɑYD QU)=T�^bN͐A :.[ L01:dd_4eiC٢ E.@H?Ep8*$Fy4y(7˭],z.u]|z-V:׫iv^J$Vǯ V8:AUٸb%U\m1Z[5ӌտW V@u8]uWWuZI%###{[i+VnBZ?](GuJ+J+  {᧥42־ VZi,W=zrt U+J+ARe1&.Ozqk_.% r^1^/*\(;|-Vhk nwrrR=/NJjJ+lF:jWUUc "k"M2dRJ=)gE -I&z.7$KDmh%W9v:%<*PfMmoX{q^D2z]пc&NBy<61lb"2qpN NwBBL B FMlF ɩ7b6Y�zRɳ[ax uVz`Ƞa *hX7!@M WYv 'L_@ 3cP�GH4?lP`&Tw=&N "B�?B}Fp;�[!]PrxL.i0><c.&zYf 5!BLB]l3#|~FkgJ+>YZ]wʺFѾ9SxhH$2"hG;;ribR3A$zr!oKTӄ@(4 |r+Kk*x<�"|S'VB4&H!R]QO[ 9_ il ɞ:T@)&H!P3ʇ #)S!LR>g$}Gr<G]B M$D2o8!r忡ӌ"ţ8sNS,@™`.M2H!1(~ L)3I L92&1  f&Zk<>hF 1#U`:dNVZjqԚL߰'js\j`0 1zVZi%;G^лsp˸ꎬر _P"$ycxUƷI)-d}% X bATBhT}:>�P*cct^5gHX0Ĉ@'0) P+n j"v j϶qQ@uD>HQ_!#c-o�*ZNtYx>V&b@'*<9�oF>]]Q͖`#3ʬ<Ta<Dx ?=ȉ[>̎\*%je\H6!$+e} SWR@V@O `�Xk𾎧G�0`�cփ +88+Raƙ=F*sv2 OfsP/]!BX=* c`Ub ,`|y04+_/D+J+YA\tyIDj:ԂJ §f&AOR^]߁&O 8=eDJ{屟B~+˟nEAa ̑#$�-ԁ  5T`D1-M2A"D9L bCc�tl#%I0Ua< v㮣8Ʒ:lpɒ`+ b�ZĐ%@a}Uv ڙ  =4I]JT( &#K{P`6P! n59+;;_ģ x?H\EJBX<A5͗?oZ 7L|o? lyVZi:;61b((Nn%^\%=^GK⵿m_pJ$~k-g]mAeY@`HĖ7GWƨK2!!/梒TI,վK4B21+8y!UAΞ.I~U`E Hf�!aJa!{b7՝ʮٮI�jm4/'8"dr; (u]Y>d S8T*�BBa3Y8`6�Մ<I}#6<}3Ss{f }j؀(@!Ӹu/c) ׀! 9nxB�lLb08H6gJŝAZ/"B( /n8X 6#�.603#v䩵jwi J+een\.ğ՘ :`HgL}S#0R!iL!V�cF�}SGP(dLJ`X-d5T>Xߧ 0š0)ŴT48DF$#$Q\`R|_ "68 !D2A$^i%:"Ÿ@81]PCH|/?8 3&HT"·,p">,tOI:\ iA(4I$wm%OB0nl|*t;iܣW>HђHӟy o=bH jiRpv rugl57 ̀]; L5T)fiWOjWVge|bRT[>J+RZ$5A">^Bd̔v_g:(i`C9!%L1Mdߜ@ӍqּXQ!처D~ģą%zX5jXW;#-X$BxW5)@~顲PUPFܤR�rMD9xFT8I4;<R4$,H=*8v盝ކ^$B`YbPltHuC!$k7QhVFuv B q3O sV=*4;l`P4<lB$C8;}C7J¬VZi[)4;o3u-bU>MDp5>-tvSR"<t i""N F*7 h}\AFPYË0B =nLCɍ׎׃x dVT5f Q 꿫6A"PAR\o ,(E8_B2.9&*73A+@H!@B [09|?DJ=_DwΔfp&=qxWGz_+~0t:F^v6'6jmսڶh^GmSVZ0E===}=bcYLZ k�:\P_;REùMgܚ/LK,my4b!V鰫oMrfnX?1 aZ2F;-&\S9}paf$k͎ieC= ֤$F7%6ͬtCMR!OmT]ULiӷ;07۬Y*!%CȆйwWin[iVZoB٩Q�LnJoE1v OKsxy~FMa/c*iTlMCfVEQ*Mm2T<,U`nvi MШ% Ib&({knwi|!_0T {%;P^e GE#cmM:cTDx}Bof o->%s;N׫nIJZq͡Vo@|+3{ڶvVZK._׃䡪D([�U)'"@ M_5w4ϐ3n,S;lܥ\y1tn ԰sIS#F/-~-k[D$KbAK lE|by0ZQi:zQr?|`.a!JkdbiߓB᳤txhv-n0 Sfp;( !*Lh#Fb  x E!@"& zfV[q6` 7rTBa\'ex}n@h|z0 ج7I-Ew.7ˁÓNv|s3jkUi!{T<ُ4wdA+J+Fh ΁gwOq^(X.:މ|("N.LE VQ `ZeO`I "I هʜRl`\ZK'\Jg%�CE.P9('%&g.:h"8iK! 7H683S9KQWi ;q_*& T1ΏH-R%<8RY8FBP">( GH2[=5xUOqO[Styh!$d n@YQ*' p VA" 򆡺nIeBV2 :g d'UeN<1|_:%eƿ_뢪uȩӷ( Zi[ ⢨L wR^,LVk}ߩ ^Iफ़avq  B5^Fd(|}ޟޫ!2+F4.l4 +.gE;#<q.̩`S%akraTLD>szdEB]pCF9ɚϊO6ހp&b_Û3T  Cyo`?i}= 'ñA>c <0FGGBօNq[9THlY0}{ HtugC]اps:BHGqgrp7U2Ύ= ~�(JWYCb$l!AK ٱs ӵtY JO+K4{l>VZii|e]RO).C0A|" I3pt}"A1|ҿqB\ȗ<YtV/�)&(i&Bɣ| 0 zG`x rIï"ZC7wԥ8Lc?*{XۃJLe5`ïaq# <0A= Vٺᗇ4s\(.L&orTj`~fG<E'MBL0Bpف&g >x &&QxJe 2w$-}Xz6d`[&*̼7>%UMŝ)w;?Zi-\􂑛KWx߫Xnϭ(O0Cv$f/%{х▋C D.nӺ4'J׀->P:H-O%Pj!R_\3Br~yK݋M{6HB<<B]` !$y9֒ 3CT~2?AOuzE" 0 1gB`aT;j)\@8uy`u53K9q(;Z[0\$CFk'`u! `6|2lx=1=WL`L !PLYS6!Z�L{SR2 xG`G{By?{ڈRb! ~+Ne^}@LpsY<wv !�͊B`Bj5r xAKb= wOS!Zp+bb, 4ʧB^֧k+t|���IDAT2 J+GV:[;0??�gA82A`E Ԙ`%5H G?G'ʤпF&{ I2Ar1R<LB$#(<dXcBl:c$Ù �!+QHL.@`Ct&``RlUvj0A(8?Ly,?q>$E)C,pq>I0ؐL%xC@+p$E"Η! LPEv/!ެ%`făX`LPpdœ `  փg /Em:0] ! MI$bvhp,dx3A=&<y0#H[" vÛ*Fͷ1Vυ-%VZi$E!QpM'|kkWX'ƫviÁ%:,2!.as{ &yCs[e5,җJL3uJDpbPUƛH&wcw*)w*؝;cgVYGC'=;@*TfT$|nzCBި_?]]WYAaP_򚽟;f!D>:iM> ;;?v + D/>׃mE{WVc! !ޡCvwv\G;QW4J+@73ԯ\q2&h=\QL e92;GR*l9Ro`i QrNT]6B(o<^P`B(SJ$ɑYD QU)=T�^bN͐A :.[-$Rg8h҆E{!d7]$I8P4(Nq$THiR=(Qn|̞8qbddVZiV~Ģۚ>}1 1y +ޣ/}~pnUأdR5|`(Ea[,.r:MV > U"+@1R2M%2e i#$Iq)=dt| f|7V *!d 7M!ka4UvQ`w-zx;^B3,v(ǑP:!Q~~M`_P{ SJNP`넼$g Td!$삾[R%uZ_i}�FJ+8'fw[^Ikb` *l,ฬɌαnͫ%!h K$ :1?Ľ DJ -u !W,Gy cy/;Y/9UZV#If]R()-ΏR>a5h5 &d9!":d_:mS竚% NHQ׸5U$w:* \MT.Bt#Ȏ2 2>IK`{tRhwsD|oVZi"w=\Kd;DVx);>NO뻿۹!&5ŅwS5\ gɄ6¥\4HyyIEK^2 +[2lĥqᯘ�߳kR٨Kpa,)ikUۧDי7*fH1zzMtxTۥ3m$z sV28S_Oj?+]$Un0ϥZ ,BEC wۛP\LO!Q#2-|kA =6H#,a~t_bt}7J+lBfha[{z?TuMD!S M<] YR"pָg`kg4z 0]e ScK +K\U%ȌIͲ3+�­\$KmQ0 [dz^s2l)~|8]!pZ,3nW~yoN}@N0ψz[q[BS ><4V#p9R6~O%Λ=<neeZ'b5VZiVn$b#SE"Njmtezzߊ{? XĴL |E-$2i/g|_3|.\SoꚍgQ)[ jĒ͟ce6^Ћ,_C\im'>TexMqfm̀ ~[(.9R#‹{J ?a޷ikcm&i|b6CHj񾜬P:._tOp- 'n <B b'ܔOFΡPWӊPz^@<\GI/Hg nc7bS6 x8q03SYR&Ftvi0pKA_ <^<di*_Q+J+yY_kӴ-voׯ΍<QxS97ǝa ' ޼LP\H iETABLP�o^ D{nfm*R I~t705J CLgo6qV՜W= &o 2LUÍb?o᧌SI02Ċl8?1ƍ/ &a�8E1! |D}:B.` B0ws1Br"bchP `CaT`F:rB@ o`VZiVʥ -٦xNPx9/s;Qns{u#$m\'ցOYvI2.kz:_\d BCDlKƕ1¹ 55433LcSS Ca)pYp~CuQـ+q8y~ S*X]VZnZ3~& B%07oPA;Sꀊ gpAχ�I!è8@jsPpp;=V{)CRp Ű�l~v,`^<ID:b;afʬGH0 p;DC"g0e#ˁW!P6v@ ��F;{Cc1'o- !Bޘ KpѽM8gIwAo<-/iAJ+,YA.S=~uw$ DT9ww`LP` )Ԑc292Ȋy&{ɘ 0AhT"WJODPQ�S BO˙ VB\k|L\�Z BRt24Dlq~)>Cd悻/fę ,xǁ"�^kZk`0 &`P` *dKML_ ǝBY1BH$QVAB4}%# H3BGQ)8GLPKs$8AQlDHhy@I!@b L- H4#N@`J+J5A"t.+*&dzǑv_g: ް~ʽѩ >CD#zk_ΜwO,VRXd~ģą{}E z,Jm!y\ Di?pPYvPIɖ\S9fNm ixFT ֛ 6KljOEI>Y {Up7;ӽ IVŠ)o?t\CHn(ܰΤP0SRЏ1} HQ7BC&qo !$A2#γ_Uy4>Y4*J+lL毉D4=ߛo(5NmƧNuJJ_cA2MdPC0Hb>+#*26 05SxArc 57 f su@W l"4DDEo3L`<$|yNx-$Bcr3tI$"+0PE@ Hş8C4;8ڹqEtGySdw5d?7'Ni>VZi,趧O:}GLsL9k)U upҞ#90Fx&[/"7Q`V2ENz/?P[XjRX?-.uhLu,85=K\mk닇!aO0@@2~>gc$Յs{x -_DU9}pa>'?9sSm64jf$B΃<<59a#e:<K!&<Ry p~o =͝5_q`ob#E16cxR%�TΏQl>I"7!̦o0yd'}<UANJ+l@V%Q}uÝ[/(^h#v?ҷsإseuKn]5Qn0;[ݷ<]H!J_:L w s}֩LXxv0 e`l [<8Cˆ | _  w�J%`䔌[]շ@p@HCI|yV]_)?�lV {%Kٽ@) jS c6 z&P@L8; lײP ևJ+JfCUV�+)ōtBxP`Ɇ= M?X!M!TO8�>7-:%ihjV�E K^qqW<V0Z %NnM*NBl㖛DˉQdPkp|= =429Fa~$a/!F�ZbCPR%>7x;qiZ&Iam6MODȖ:K*zj9oyZs#=`_Ey]}74NJ+$NWI6K۟/NM:X(5.MI%~$3kqwMD4ijdYřOZ+%9)->Br,t$S V6X;ES9KQϦ"^7qLh-*ouٯaϭڒp-{� zBF|$*/Y-Fhȼ@YQn!}nIj4녳BbJ+J+?DqtJ1gn-\Բ0boeg`)OEK V·3~ijztI<~ch)L$O &H8A\;Dxפ2Q z=_)2lPTL5|pZ A[)#@ΛPs94,@w h'[TNְ+h?_VJǤx F)B 'w pCWl6˗ |pVF8bScuug98DkY& !6OQPa~Xٱ'zIwj6@;42}6TQ;֡0] z@h@/=* tVZi]9vV_.~nj<\eȷl7,VG "D2QqBB_;e'mBR/=- ϨUo%l< 1lٱnFhM,UK9j Tݙ{Ɔ{t@HB7萯Kt gk{s ssvl 'IkֿV!xMDB |BaO>E $fs(4p>9DX2ê Oi*lf^VZiVZɹȤܜ^Pֱ"&0q  (7#1^5�B v^G$Ci]YߝƩ,uAO.c{A .&e>5!Ї\=r sQ"NV?ar*Hɿu߷aug$TG.f's&Og6wr DR�r_@,){'G ۓ}z3K9q(;Z[0\iCF9cнVGH odz`-GF0egg` eQ g"D oI \~}9r9;ڔM�Bpk_u h%4eXD_b6WB4�Bs$n7`o)cpB`B)r 2A~S8!Zp+bb.Gy, 4 6dsTX!BSj0[_ownVZ٨.ѵK8'*3zl?߯tv{/P&q'p &H!>3$ͱO"IL dd b9DrHIM\eg@OB A5ql@Mȓey $r!@bt!:L00)@[X6BgyQaQ$� "|Ȟ%S~_02 F $X2?�1'nĦ]D/B1B$=rSۃ`"Kg-$`.W@BMH!D0AiRxa5&!$E%RtHΑ12Hs$0}TY gzJ#@>. qTJ+J`8@FqN#Bd8ِ橯]Wϯ,U4c j\dYGuևө<!Cc-NfgK^w]hy7@ ju" JR0T&0yduQ9%Bsg4 $jR[BZe !pQT$|nzCBި_?]]WYAaP^p?wB|t 4ʛ0}zv#vv&~�@W4^}Yo/@w UB$C8b?WqsU9f|MnhZiVZ!%Z/WFl{t21FeTRPc(cst Gcs 4*> M 3. l^Qx(� W5RQIj#v9|Rz6� ǽŝ!:t\E L01:d.NEC^6- Y$IZ<é\ Aq#BbM@ lrfĉ###J+%S?ip)gD_Xyƪa'/L{g6^u]Tǣ uͭbtƫNe"\s{-4ֲ}XSO#mF+U,Fcu>F0nNM8c_!"&xvǫVĹati㹽C'A'lR@?>M=Bi9Tb+;B9!G37A7hflE5ε/Fs{Ƈmrp}7qD?\fġK;wbC; �W4`cb6L_:L7o=EX !䭇aLߦl0#h+C! `e�!dZ삾�O?xʝ4wUdJ+biyKs3\|~zs:V�2G / f &((pbXa_:w `d &h0z%)d<M5B Cq~ 7VM@ƲU: ɞx'8"&(e%*G͏|-Q}w lNqD`BR< 2}dq>luFz$A  &/qF,ηK{ Ҥ,$&]%G92GBDsva(Ý#cC� ʘKUp*9#k ܜcJ+R.zϼ^Kd;vpBpP Fqx[`[481UT4φ3-!J]ϢRd`=Ғ':L/JוP#g/>s@E'X@S@uG`>G_+PY+zo^}vOw0&|Mtv=/fMӭI*X[hi$yhGl(aɓ5Pؐ)XlBy ~]<?3lbM62o/u.Vk>q` 6?ޠYq[f*QC 5#?<ӛ]b9!H~q[}QיTb꿸bO(]Ykhn}7p+Ҋ"v@K t_#uOO{ c@w�@=ZgޙWE?.2noJ\0HvkvuG?i  gJ{+ 'K 6$S BFeq,OӬk89Lp0 #3& W,Q/hc )#Ha,\4+L<'c#hNx~84=Kfo y*p8l1f4 "l_oE$ Y˧2Q5G"4s`3}aM?[E.RWYbcⰲAճ':qsܵuwW[mVZiesuˎOX>z7kA7@ G3?$)8ID2+VMnqP9֔jn, 2S<L ۔R e` RYg;Z,]Fۄڝk:z9c"~?หc4qfXDI JK|͢??2*O�aie"&ž Vn QЕ2fn@g-V!93;;'͝+ B}JߚP`rbO|m~/ʄG,u{46IЭJ+Lˋ\+\OI_jLr'LЄد9<oyLP_^FQA$ Z2&]Mc\#*K`kbo %,t+P)U4֜`* aUO膫቎zc_IJpuo77XeEqGlXkQs;V7fcV5hD%B <QD|-*mF<&*[ α jڗ ?;;e% VZiVʥ&PtsNd4ND NJ]u�T\o;kca$V֗!u7wxs͝Le+Hubx@rp#KcL8l;#b}orQ6ܴپx͇Ut?u0U 5jB`XRW ȰOܸ 9Sك]yo_r@`-[͝p+Di<M! CNAϰ՞b'ċl_@y`ßE 6`ÂAjdհyxf 7wxߧac /v iVu/c/l PQW!P6v@ ��F; MNAa~߷!Bޘ Kpo,9@$ٜ,Bdvj~qޮ`Nst]>M dJ+&kt:\+VG~]l[Wy"CWP0^A{\}&;; '  А<T�kf|SGP[?&hsܹK` 0š0)DH b!$4J  D@LLG ! (!Ea)`b-#?8?T9k&Ϙ`" Pz[T `Ic8!h#1Sm.rr0aꞍsnz]*1yd#!DAB4}+@HQK"ϴI9dZ#qih7 CH�1yM5 SITVZiVZ)&Hܴs283+&[__Y3Z ^ܽWCipuDŐ729'6nEd~7:eͺ]MDMƢ&»w5 LBHe E/li15mE>BSSU(Ӑ*dzfM9'3 | ~nkv{z} UEtHuC!$k7QjHR0SRЏ1} HQ7BC^1bQݡ{?2gsW1ҡmVZ`@k+Lk+> ؗߜKsEL~@_\<j~[ju:;))~ 4AYN(gM'،sC H69w5ʪ ޅ 3nLCɍ׎O5C&hכep7LUQ]% ) *0RTn8ᵐ m L% xdP@+L"E1ddOh? Rlw5d?7'Ni>VZi,趧O:}GLsL9k)U upN}z|HsHds{Q*u$n돸k&~737P\^C"bs{ӯ@ʼnaRQ4cVÂ0ԡ!uh&|>sӝ`Tv-vDH mjT5۫TgkL\DK6Ib]s0yHΏi#h37B|{;5.X퀷!䛢9QZfAȣ Kl_D+WGs{#$@lf$U#Z\B�YD+@XD[{ l0(2ā9;p9Gb!DJI%�Hq~ 3au t'pM!VAy }/['ı@X#d`F_Woĝ-]+h -j [iV2ݸN.Tw@s?zn3;Ntv" ?&Q :wv}qH uB;n[9IAQڡD_C ΑȇX�tHf9bd ,BA8C C6HȅIl/:v s}d"| E5ΧI OW%e[<8Cˆ |dW7+vV>�o#J2AI-p\ CV4} @H XBq|$V~ۡB0A % Dg*d$@.TMy& _Ɯ#!4 4w  2ggmBe'4vL\ݾ SJ+J+墇녛D _;WaX5Dx]7.-S_qY5;I&w$TN!Un#\QòOz PLFMxUH^zAZ)wA{x .ԩAʙ5|,7Cp6@HJa5Ob)H].af_alQ%0C]if':6a�dw la|BV[ ޱ�n�$ <yο:7Uv;Bu{^LgJ+rZSk_urع_8sfwӐS 9Lј Q kmr&T[a\1ő{:jT<<$*U *g"u1*Wyn^L50}!א+7=R1!eRPL0A4 !T 2Dxp[y>D[l*+[iVZI0,\ueLJ+J+3cϬ?9|K3}+ut2J+rZ |/;Ϗ;cx{t9]J+J+J+ grsՌ݆0R[jv81aaکx<ۘO_-A;=z &ZwVLU-.Zۣ-F X4-L1..]f@W/ɉbr|̫;Bu]Mr.,s%.[♛Ӕʱ ~{t@EQ[]29UQPGY,8"wG E*]6V1?7LeĞ �ff047cugG!BR*{cb&!1g*z%XB[ (m tC4j]03#22 lOqۇ:߻<3Q&s@hVZiO;o]y|`Q$ Ȇ%;$<U1q9G s%QZ3)tFXZUITQx0r t rd<63AEFT K|C$*N%U2Hq"GKD}O֝V8?,B`#$3V8_fkV6;f&4%sN֞x*F>Y?+tvOQ9 92Hsxfyr)@plֵ]eJ+JN1jp<˅^1o.|WnvCT.J qDQ5mD^H^dp3w]W!RBx TV7VZdxHb6H.<Rwop:n1v8 I04#.R! n]P(ٺGGgC"ٜI|7PN܉RzsCnBSQޚ`ov#:=zQDd-a^ؽ*BHdgQ$]iNy6gGiht[iV>82ȕO]'.J!,`.NP*ZW/:"&2E�?z6si&Qih%蔘I V2t7Jf/@U08?B(SJ$ɑYD QU)=T�^bN͐A :.[ L01:dd_4eiC٢ E.@H?Ep8*$Fy4y(7l=#ЭJ+ʕ+gz2 1I(.s]\r.Kx:;/&fc?Fsws*G SA_˛ Ӏ#/Frnox(G7Pp|9E\Ml.fq3i(/YH_jjnC8Ec l)@Y.M_vXκulB"s&Ɔ".A r؉I!$RAev@G> usT$6*Ym6}NB4׸iXȇ\]ͮ&7)*Sұ{^5D7vӫ;;gv[;[Sl֨VZi#fBݣ7znt6؊ `ngQ1in59G_m i>u Gq,͎ [vT9pAr¿OAt]0A+ CJZ!W |T֨h78_yԴQB< p-2Vg$@β:CT7n�Q ZBiC| LoKRQ[&%xg$yt*g]G*֒jM*lj -VZiVZ!k!pw*OsWPup%EuAv"he2D͎gihVr.<u2&G̅F ! Rf`k5m|9#`6ޯRCniMNYrcR!"؞.98\BZeIy⢜NpՔm 8H >fxȪ^ Uuې#6Y<0ɕ['E}J  *2p,]tc]vsnG-v/~/D{(lzt%~͵5Cicٶnu}=gK GdwP z1A؉2DPTͥ8*v,ZxU8yBmxlMۅ:Fcғd߄Don)*7\KbC+5Ш,/vv¶lkgmfԢi1rJCH0)=wDdh,ԧ3rzJ++333o9sG,YԐCx-J+J+|`d@y{xp b]ٝwtdqr}4d;r]l(}Imf0r~[RFe�In÷qEma  iVZiVZʠ?X/_|ލm9wlVZi'MtŅ~n]^}eu.{2uWˤԯZ6M{ 3nIK}**h f{c:a˿ɍrf! nI̫whdM 9 a!>έĒکQ }37W zRaP:RivJw oTSU~TnUz|ʢ{|j~BF֗@t!GFG"#^hvnC|sH"$55�-3~'@ՊH,N[kΑ驪"!>\Suy!z^ivMފcq8$vnAĪ.!"=l18;jpaKJFG z(H( !`5VĩL_MɊ E%qSu sp$~*CI)#xbAF&Ut8DHbcI 1>'0}i%#>M  r4*X}ޝf)Cp1Q`󔎈gWB"4$o4}Nfjh ,Xs5}=r76`:QIF#hӗe RCFmnO%Rl)=ܴE +q~LIepx ByHqPl7Od6lTA$4 d}cqᢽ1#; ֛(cs9@&>[$TxV>D0N( U2H'S&@ǵ.~ί,3Bq>>IJ88 ԰&ذO=]rx=ZkY\ ^6Iy j^*\"@^kPnj?E.U!`f*(#nR)�rs$tf'\7IV9͚ !|8ʢ4@0aTxrDކ^$B꯿$@RtC%NeuyaTg 7c0g(qIfChy(0AbI48 OA*mlP!/; v@9&o碆DFC[*DqKFqeAeRe* Qݥ!YG tvު6 !fU!`mFIB"kWofE?A"j~7 !&st_h6 � E LP F1(00M] EYMq ۯ�h;L4?9fp7LUM_\JRQ( r ,(E8_Ar!Af s 9Gj("RQ0 \>H=+goj:Sx 犀F60NN4rs, f73Q֏O=$‰A=wC89SE!eh0-͆h3Psc(c_¢%zo+3;$2)B| 8?9 `q07jzn "F w}cZkP ө3JFM|eq85_:Yd*']-p Z ZcRbB/dU'H[2C"S@u|n#;Otډ֝\/GcBz]+itEa h'}ڴF`C Ĩ]]P;Rc*T"FHB 7TMxl7c]@\c\B r`-4먀7e!*BВS99hqvA��r!C[4!pYQ&�6~"j[T>jv(d !>vو  <;~c@pZ\+3L_Gc#oLW!<D~vaa �x{8 BHs$fB^)5}<$rcfUΎ!$@8IGaw xc�! AC#Dx RBB?DgOC>ru P¡ M:ul3:rT`A$SD*dBB9ɾw MΣ86\B$ |"y�*XO>C8sb2!\) 榏 q>q~!TE<H D/d¾(We0 -z&c@UӨ&c~4,NF&=@3"49r甶=-+EP`wїGC:Gwf`4ߙ,yε ؆$u*3c?(HAΙ`ߥ,  2Ώ`p8{sq>2ߥscK�Ne3)L=b R *O,+q~әED&B2> X !8_>7T!]`Y3$ ! FACm!ML07s Ta냙s$>1&w  Bx!$Oew]h6AbY͔lE?. v#�v]F ωd "D" ⬐e#I0pl3y; ~7묱ϔzlT`8hk�6ZӦ/c_@fR<JC4Q6 !MdD) DGO@" DeE4t-%R'1b["ĆDHcD$&%?%qgRp,K@Hc6 \ r g Q$D橯]Wϯ,+;Q@F"N$"Z ڥKh!OnTk[e*MłFC;.uʬfz{h?Q hCF*T*$/ G; fLN *UTUkʳoRA)lf=^,6ePAimiTDD< ue؄56IYR_l=6zl.#eֱ /U>zo<ĒC78TP,AzU�'&lлI(}?m2LLl!>H! `Ve2gп7 !#J[h9G[QnpFFJlA TdM]n{6}cYm!zb |BʤУD)Ӹ2P)H@Q7ΑrI${c&8txU9d)lqB͆RuI#̬@2y{zg~X@hh P6NLC}] %АL;lCGe2|\%i0<l/rبDi-hY7tbVZiVZiVZiVZiVZiVZiVZiV>l]Wd(fkUb72pb}MK鈈meUis%x7'UHxEQ<vF'X">Rw3pfwch{HeŻ0U6Ȉ[aCRbX! rqߍhF%㷀1V`XHPF<ό w@&9S_>s |88\G\�rw>:qoԶux5A ?)_'}3lS ]8` Dۼ"B`hp|S~6�ɵ!{*0lC!r!Gd$W[F@qq2}ocpB`(H?~ b486p3; g6;XSٱ r~uSY_僋$>JAb)g7<ž7!!D6W큣 #`*r y`ơ‹dD2pB?݄x8xy8D<`6,TֶR6'-B߹#rwa8M>%G �t<٬qVwPa"'J1`S||[ `Ȟ~gUl8~7#Bt#yDBTTfw*[_p$R N0]3Gf0Q͟'K7}u&h1A91JxB166T&Gv9!2LPu&Vw) &v8g {R9zBsw< R9(88?2}o N>K\(E9J|( 1|b4C¡ SHNb!Dqq:aL1;rPx?st L $YɇO9aL)0-lqT/6WdA"P?>&zh�1\g>PAn�ĭ}EVi&q48p7HO3[ji( qv ੅ ˆ232`̔iQ~C !I&hX $*>Hdx'G@a8�(MB UAr!cCꯉ9C8?qDo$Y8 Ύ8?8Go ,>xPnCU2k  %B!DQJzR<̕yk +}a,>ˊzŋ,ʄ�ݣ<&hŨъu4[QA?Z$.P9>:l~F9pU&v-nvܽ U`i2T-T.P!pRрIjKm iuT0$)}P:*4<#4"ٜ5w{L8e%*pEm.k#D>:iM> ;;?v + D/>7]"$)׽*BHdgQ$=B`Z3"Vc jS!p4͟('0$Q1`QvU%ӫ3C!`v7V?HK8;Z߀8^"`ڌ,3b-b.OPi>M!,U>q7`Ն(J/"@*a7s 9Ci&|.6}yGy 3wid0 t!v |Rz6� ǽ9F; :WsbEXLg!ߤs,ef $ir*) Q!U3!aӨH(Tw5%:ݠ1)9J* c,BT&\BoӷɌPQ\=;5!5;bݥA!"`9fxLr@y+B849/K:~BTb4o;kp&*.1\W#gjqn/[M?GS'jQ*T3a؈`R?Ys{ -f F,k h|RLo-٣GDaՈqՈ'\l)-q=ga1s3`.\:toOXXBd%Bȯ�v6 6"+jPgn:`/Ky6p>A + RZD!Brڦ�r2&5bGsɠopo6L.XKa fn/' #gGHvgClm�)v jR/Bil�Bҫ@}Fp;PD/0b#2H'<[ٌoo=càcT539XZ _!J,1eY<E=}1n!pBbb, hB ""^CGS&W 0_Q:;9P _,F6KarnK`=0 xKՃv`A2&$ Y֬32}wv\O !9;�پekW8H|D�lR!QB v�A&&M<rFvw`LJKsO>&!HN((#$SDLJ0Epypp$ v.@IDepFC�ƼcRFcR3Fh2shLӨDΑ9RӇ0)nCi cW1W=- <*wy&1Z9<tN(ND(!`c#'8EI0n:�{mz!c2O#!uљ |v=vigвlLveTwQo#@G:|B "虠<`s $sl2 _S/WyZnF؄&ps 4)i9XJsvjJ3 ]4eS [8 Ƙj H,ӟ]@hXkKqx6И)p|l $�؊slB, `1&%!K @/fIixkBHCHV(!JL'8`±yG$%.1d6!wvQou!<HQ J@hB -W,zwv<t(EǜM{ʠ%n ?xXx-M.]<+?(CÊTf,)S~j< Xâ7Lp6 )5<TPRXk :=f!ʪ9 D2l|r i'cnϑ҆QNa>UaC:*bS- b>lo Ɂ6�TeVIQb4B7 L?KW6ݱxLrߍ8ǂ(NSRTF/7֥�TNt$KlS0K|6e,w*Hrq÷.OB9=6Bp(-. 8yPޟL)vwL0l�Poc*W6;!sk8yBmxlMC9GEkIlYeYD+( س*/KŔ&8GѽWΑ6AO!$\IΑ([m(r&/�653;fT"E+;)P9l!Cf6ӁPYpk<BŇ Kbc ۏ=LWYus1s@Hq."ctnn8luoQ*ɶ"˨ l(,KKNA[iVZiV>b7VZiV> VZiVZVav[iHو.|<O}CxE]σ;U.lhw/K/?}S~s'36ϰm+T}"OCN跌KVvFnmv3RInՄ8!7Z L!GlmGFx?3 !a . O& oE+7.ÈL Ǚre]','a]YR쟹s n`( ApCU�GH l!YeϏG4|_;?jjgips'<~_#l['NؿKES7|DԨym-C« Ύ,"F m4�- ?׍fh!=ɻ9@$A# @C2֔7lg`@y87!7pփҞE 2ʢ#\Sr$N gĔ͝ ; b-O],ģ83 `G$ߺLJC͝0X"W@G&R8_ Å@!JO "DeZdOJ8D2xoUTqsv x*z bLx|8F~+p|21 -4lL}~0qZ6s Z*i\B#̵@O6k3 ~L}r'LB r.LLx@!"I5qmwFbC3{`督Bο+hЀIilP!XLG ! k_( }}[ <#LeLs<ϛ>cGB|w5>& "^Hg/QOk}}#dLw!ꋢ!"H֜#x<,Ow23O\۰O9d H!`7u62s *hFŰOG`C<x8(ā1A�Cfg�mh]%>E= `z't [&w@e3Hiro@ea<BFVs1 2A,1�Al-YlV"scMa 3}/ "Bbgs,H&b|4pW !$rs[6M0A r RX7?3UeK<QuWQ#`Z8 1rI@ ,4Γ/r"ηZ 3Sq!,!7L8puLT[@f-!2sӺ[,y42RCT[æ3#b (xg,&c׫gep3 ms{E zp ,Jm!y\ Di?qe &n2 , rMD1[lobU(Ӑ*2fmeC 0 I!7 ̊AM $E:]!OTflzs0SRЏ1} HQ Y案!$A2(B."lSP>5*$¡:-v@99"Pp.jHl4䍽%0XrAA8dWQ!U' Iң,KC!@B5O8;voUBSV_c>HAHd7X9$e^ٛAHQ\*ܞ!d ͆,@s~-g�O49Gelr̪ ^%Yb縱 7p~+i~0Msn(Ο>VRQ( r ,(E8_Ar!Af s 9Gj("RQ0$ş86$˞3X+j8qho^ D/7'Nov|3eCA"(Nsww8ϧ8B8h`X'b rЂ >E C+BXoIŽA$2)B| 8?9 `q07jzn "F w EXe $9gf:-k�("\Eꚤ*Pc\%_TgqN|n/L[/|HdjtZC'LD c _X*asBUGBw?cuJW "7ؽ!U0:�Z�Fx(VsB+VsxuX 3Lk#0]|lh|=s{ !lQBŸ`=JsVDEQ�0sjB5| <5;~c@X0r HW"}) v iS kvD]�=B8vх[>iq]8x^}E8;e8IX)Ԡg쎜 19h˛X"<G! !u福9; gᐿ! g'l":!"֟Ć, |B5Y<T !gsH$S: Ύ8aɨaOĢ8@{jD3';X(LAr@<4 Έ{sG&6Y@7}Q*E<H5 ,Ώd3H5P1I ĪiTBb$@CM*:\"Dsi4ƃ9rǙS= e"(0}9D&=8m$b  t2ΗƆ\MҨ(?@9%/A9GnC�D K`p8Ј 8dtgI<X`c OY' q>87PaI-!`q> ZDd!4Lbb%|\MI !Dc6&&tQp�"9Gbc{PoK]m$x2O({d D!AIZwttݠ v ; ! }Z0,\pr>*GB@auxQ b]�e &dg˝` au" u+f@9 ^`_ &+}OiCmwqD[wq5E%)^%rwqh#S`"Tҡ]7iFdK !d.y-Y!"l!',=I֖AIsp$KSk|A*KnϷy2w%$9$#6/4s%Q[ :gp@S@8nK9@S_b2mvO;ߦP"LX~'yU&y Z)HS f۠@[UO&M**Sj#I6w|av(hJ1)Ol>F~ lX"Dn\OszF°E�0Ti4bW:`憍b|$"s7XA車RTشrdN�!ņ;^'bYAIj)PIx:9"|w\2�nU#!JOBH] C_!.9f25臾"~/'._ B}> }v;| }rV}!7z!9Ϻb!(r_ m!D !$X;?eߟI<xD-~uTX ^ |&͚] a3LZ~Wyo}_3@Nؠ|] _6W NJ. !lXFqO_P7U> #~h+ѣ`y("㏭=s{OdJ\" G?E_G ~EP2NՔ�-aA9o61q6Jt׍>;U-"n^er|zkG*O d$EF!|Tt]#n x\h^NƚQq`#VhS!0Wtj@<Gl.4hO&;� KG8?WG1*idc4ѹJGOjMCAwFsgn榬'N]? :t\]:7wjdHGQrdD+GPWZe&isREB~p:<�Uo" X[qY ʰxW9M"Լ" }aC3^qFqaC9EͳMNjWB_N*rw x }i<J i!cзx AޚVj"Ŀ.*|2_5 ^^'Ç1j7<?V-t qoԾk,_Pdwso2Gl`Sg\y<8_iABK&IND<B^ic4WzJSE.6(_dg<B#hnuҜQr"|Z /}vPfE)p7-u[xldΟwрt;S^b{]^dqNB] "Eٿu?zp3kOut|V7C6G<H�\7ҷɿǭ_{ë)htZr4Nl?$_{TFDm0x+3Ş`s8dƋ}e�F,1!["2d!U_ȅ؂؎(|GTyzw͚Apg8}^[sk@(\* hۈ="Ov~/({Cļ$JGzSL0U7ps3l޺:vzv1f4uP!a}"Hy>\L$D1a΢)eԎƯ?,z 8LeTr2)㞇hqr鿲é1G;}CY #DrwvV)3E @u9Uqc PCo-]sq ><lN74v^UwY׬ç#G}IL瞖,\k:U^R|%Tƒ%nnvTYerw̞en+)i^E0`F 9 ygh|FQS(1qpvF[@w$ݤ {z^B+zWeΒx? Cj/-'oJ<`'v!xxw&Q[<2ӆnDimU乿 dv'o!#w]-\ʞس?Bhқ>ŠOJyI҃Fpܱ2S\ٰD irM]|%rxpxȼp$;wHS&mlBHBr BHoOs۵/9*2l@E) $i%L8.ǹ*.VbH[*@_Z"e{fF$kۜ_Wig!Ar,EH!B2 BcDт|&Ǧ )i'G8|泮Y{T^.>$ٱ Ivd3dy=`l\;^%v? Y !g8m+# -, eTMji?X_'+ߜg/NcH#e�'s_$GUYɱOJ|\ }{^~R#9e` /ɱAirJ1W :/8ޤJyr }O-N_+(|W- =,�HSAP\<=!{q3c =H0u-gT!٥T@%{BMJ\>:dql]tmXGTgseP_|'O`v�A90" %by~1v ?;4*A_^Tɚ g1Ҫ7-yZh6;kK6M>6y];Ny`anyv⟪xY !@͝L5Gl}$ŧ ~N/m{kQ\ toanZAjz5 Ć D`@*SIۈu1?tUfs'ݿ[||r1D:!AT="nz0xN v>8 @R_'u!nN9D! `) D ؊CV` !+'Y>aDo/ D2�6�!~d qDǁB =}drʉ{𞄐�jFal zQ~ Iib8)p D!dn�@iЊ'L@ B$ $Z)CoM #nWx*&<9>t(@!:4 9lKHvmIH4.uSXaH�#+� d@BXv&;dzfFHHv�؊"r{,$R<.Y �q q "l0Kۇ �ADE:)]r|+a#dd{eI˨(#ɌHs }ZYxWM\!BIvչB#J.G+)K\lK˨>Ar%G uC'CPb|CdW C_O1M\G q_ ./+%͔Źbvy@*A}:B]tda$1y B49zdN9`aW >B%aw?r&͓c&%Wr\ʫ !!9j%8'f !H2c=&;+\ .^*�SP!ؾ@R9){Rj%I2nR-Uݤ�SMv⛎~kB?Q2Tw2 *A׃WR{1G).EJб]. }2Xؠ#mBJ0"dS p8U\=ZMB| 擣 HB%- nR <zJ%C'!|&U/.q@bmbS2#B$;$ z�5 XLdEdW_oJ8\\8k�w(Ni|~*׻~k(.V/ T&EM! כJx+,X0m+|2yF|yWeu&p4usc;cB pN=jQ[EE({Y{˕ڡ 7=-čmP:v+�mle\!6Rw PFrԫrek>S<`q)R]*U ,ra$->rӔ:}Ce�G^$< BE]!$C[|\)rW z|ʟ9q'~/ �شU{O׵g`^8=E{TDc๯wi}Cz8Bȏ%Dý<6,^JMDmbӕ$G~*9' xb3}<9TɎ(�$?rr<i,Ł7Tފ"Ȃ[&ButW5mg#>4)6nX֎3zUN\CD(d.[o ̻iJ!/KT?`òeh6 $ureꃿ/H~',D5^j̟2byEWi~|ZdØ?,kYK5W_ i;ę{_o5?S^* }U!f`yTݛB?zM\zTIO<I'd2@0(5riF.!5ku& D!=j24d]f|#iV/O S˰\{Ɍ) [LD˩c_}qAj8Fq $я'lP#rķwdp z3"p6s{'@:9GAW@8thE,d>$;(=6x\&s? Wx/sS/ U8y~r�xN<߅2@U+k7˩"J(1^.@H[e;5;Di0xdwDU* ]5J$/2f{} ܭ>rk-]D~>?MxBBR UQIJ)? w~EQ }oTZSϽw7BWKf=BBrīM>ajD#Yr pqnTƛl,^ z|sSO[$N8 2]r 89 FW)~r9Љoj]06heg�nR8iz#7ɮ@>u)e/wqHš1~MJ7džDz-D6<t *GaɁuq `AW Hy kwQ pMv <x_Xvp?CTc9xh0DK}jWDH0D'oe;>nij-|4xfnSIs*{MZ3~z"ҹoob{+EǮ/~�eA$ ݆d8VcӘfC.kh 0I v@w=Y>av䫟Ͽ >?2ڝ:qP=/~>M{>"gL: ͛vvg 3hv_O4CP1N[d\ny=2!'nf*7yD~51S;{FG@>}vɻ2l[3B~& [_q%Hg IP3̷1O&Z*ogC5L@_%{]bwarUܯ /&}JI3œsTO3&:f&ihl&d<$Z.xϱ[f$nʞ !W5v [HnEOs}|=es+yiC;*:kB/ _<L!eo\]O*]Oݞ~ ]AޞefMKz0ޑwl6뿻W);*믒��#IDATϿ u ^ v8(=e;x.\Z 1=_K[إ|'w9dv3jVO�_B;vcItb3k@UH<>*4@\ W7mM+Nq榚egLH { n !S w@z7Ws{:U*H]? } H(Y,[BM[ ]#D<H.Ż)nӡ2U)PCC4myɵhQJz\.^ll eK]zyY.U .XW3W!OH^bɎj e=M' qdv%Hz x7e쯕6H-"26wmCJaJ0qWFQrY榯<yJi~ll`"!n{$(v~G%8 stw7,NUC|EGRVl#*QHŠ#eTtl%G98J%>P&0x${Kd׺d7;__XS5t5BV*2evɅؤN0rUG']~. nCkVKlhEС3/oE%K3kZLqr!sL?b0Eȁgy~ɷx~/ 7^GȀ8 /кNbX&bs'j4|8y#hy탺ÜH{T9<&&Bq;M].^Q/'y^'|(b~Z*h<2TK}�+ dB!2R,.dy=BTXPS`{ׇ$<%H1 bc'`Rϒ/l()Y4pu66q&Mj@n;zhF'V?i`EH@:q-0B\bǦ"q�2sD @>bc Os5 e !3 %8Q�ء@Cf`tmM--n BHA®Zؠdl D qNC|@!.^=Hd(wL;#IDI"B0?F?ƉxSX }9DP 蒝0mM萩 @QT,19H`te/#BBI 65SY|dTAx:bq@|LYd-B Jx# ϧPf'MpF(a\@ ը<'\!I"$Q'\H�RMFQ ̷չ !.9*B?#>_ .5�ՆA%:09fOAO((9(7092ϟ:B\kc18eTa5dragWbU<X|lܱ8-o+GaJwA%b%U<A:z`eʏ5$DD<2a/`m~ X UsS%ܹQd*T\ݤU59*|%BHB!da{JE8P#\!p B ذ=xQ b]�e &b3daTN0K0``e 4: BK A(B]>hK#H>|ǜK$A$8!TLPIvݤ-2ZB}H4Y!"l!Ч>KGL�$H d3ЃT Tݤ58#Ov= dB&ex`fnc8dHR<_, U ;/Qڹ T<XvLη)Tc!$zh}IB쨧Ʋ o/T6:P9j<FS U/8l\ I6w|av(hJ1)Ol>F~ lX"Dn\OszF°E�0Ti4bW:`憍b|$"s7XA車RTشrdN�!ņ;^'bYAIʖ~rƂ$<}ri>ɻQ.Qu�*y}m%dO.{3KWC_ Mt/>؆>~>A ӄ>9\>{]g]1k9/z6"]в$Gu"?H:*ox~{^Uy|fMͮT|ⰙUot&-׫<O7]GoC'lP.Ӆ/TpWe%a<6-{H ldqtm/vxCc_[C؈t &"Z۫܆W H>oӹ»B0|0_q2˫=[*1}Wдis&:kc_fd"!B|n!DB+xNo_ * JԱ@y47͠JITp_]U_ r}/:+k.Bv(9 M_Z#n  !"ԔL8ssPFk�!k㺁 +6)/e ]shpҺGMv 2MpWm'8 `i2BF@AE\%WE*A[t !+n(ݴ-g;^~G%nj@CY-t\_n.Yrd:$LynldHmx>'Al0Bd7YL <%;?_� �6!$>94ܦ!�N=bTWSYeT؛�Uo!�F9BnTBߗG1+d>Af:9M"t8Wl& C];!Yrue}证ܖH"SB$&G@89 "<oB6/>mbg/BI"1B/qq`:Y Ze}Bl:Gz $Ǽ a!'M [HBt[*ColEeYz.$$9)fq,F&Q&qegOQ?Ҭ֖Bie{.diԟb5Κ~L,OtRVPOl(m|V@LUA' d!94:;0`0y~%>lϟ> 3lz@x4쪜jW-:?^/.s*sh!bZG-^.'@ΟwEH+c􎠲Iֳi,?SaT^=>;Niݝl!<9kg4˯? , o{;)r RJl9ihBkoa%gu#|q@l܊ғ7lOm /hMӊmpC2S9AeSC>O>CF[dN}2`Rtpy3=L7KM~CsMfUJ:DHpOvj#oWP8d~-Yk `ϒDHoʁA#i% }&,nGz=(&n,d$9|ÄT6UUc Tn1Cx>IV3 S7.Q QUhLzM#DiPUr2]>0~0>2Y'Jkܳ Ӧo!^=$tRh3IefC" XAPf+2 ~Xyݠ<xz<=i.2|}CK<]y=A`H<{=|:x"2q'`X'>nE+]X2*Ã`[z<Ɠ0 }$*;SvY>b%]DU6r7p#bHp-AYn8XԜWj=b<ͱcO*{.~<}]GSwqthe>vg@/_Rhɛ;<Pf9|=p/N٣lY%DC̢<?_vZO�)PDʀ}1[kRNc4Y^_4"c_`Wkƍw2 }]Z&CZQ<ЂIvf2>P!8azf{[Tn,ʱg:KPVyH%Ed?r#Hz ?K`s1؊um\fM9<4fk ]6[Q�-)vT`]D&*@kvS!a:zЇݳ"EdlՎ;4�M)0z �kxO-vFBl黖Fcٷ»<첢p[KekGgqyVB &YK,i7ϒ뗫rRO`*^;p? NvB1UgBBYltll~l`v)o"-N.?G ?�0h B'V(FO�~DV?q`dRzy?B_r JN{Of4DCKO I>Ôs=BukLd]Oc3S׭m !K }k(>D5@l}n_DEEh<[Y5ҥQ :/.H+m|\:ChH?X Z m&DŽo`YY Z\arI�O@H<bӿS .HRhR/vlEȭcwrSB;_bVkC#FИ\FK#$ܼ8~k:{;xf!4� dh=Suqе?.hn?!J.QPHMxxdFT>%<nCH\qgdDQx>!uϗkBz|ϰ :@mw8 BoY7w斵M 5lC3XvD+KAz]IN}oNBI`ݺf9ssJk$*RSUcE`::P3CY|ƌk xI�3MP2i)%#Dc&ZA W0^rهI 빀^'J +LDeZabtaզAT'e?R z0T(\ys' wa_0 =*x!w@B[.hsn|/aMTP` !+hs'M~y  ! @ �zzGph!G:pmj!ć>)l(m(%]haD'l!d0B 'B.=-B6¨\T; ~-HDV8!$- DD+)DqZfBUqC tC2,&'o}?%WS` o_Šn*�3lIaت#+� d@bW΁DœX ! �r<_X#{i'?�$_1`+B:$o - @P+}< TIeYC%tH}b$.F(F$K(|gB7c$ϓUR}n H2ܱt()w?2Xr\?c%eɑ?$ǡQj6br(J. q@fi>dPvRIq } DbUWDLTp,w8ߩ  $ǰaHJpy dW~ ]]aEuqJP_9N0q*8MRbgT. {$ٶG{+Xy WF omO|Wt1t:R 3ʫ !!9j%8'G�IflRd}S+AlW&Yao_ F5}T>FKvi7i'[6s.eU7Cm훗Q0@%_Ļj;;?݋)>@ELQtq(B_:*Acq.]# c0`'1yexϧJ0"dS p8U>`1{JN0FT !pu#' SƆs7}qvjk{) َ!LBJ=B 8&&;ϓI8\\8k�w(Ni|VIfb㽜6nQ^_xkL�-B%˯7WX aV;%elLhgP[w P7rOZe(iqVQzr9b^rev(MO q#zy* .�*duۦ8impHMݠ*\ڰϡ|�k/'}'96X\ʁ)f $Pq ʅsL$S]OSz< $;X "K_Br:E͕"wŠɼ@ JPĝ ,N`ӊW=_מ\{8H}AT? }�zWy:o'XrLT>cuJMDmbӕ$G~*9' x<9QJvTw_DoU,'Hk\!O/V!WG5os?Iq vL }r*&B9wDH&sٚ}#]dMSjyYZaԷ-GaX <v?z-8u=Ҡ1 D&"Oq 9wM0/aYZZOOA|b)ˁKlzL6&ʀ !L]ĉ|Ņ"E(u W�G"ɏ7;so^;ķFl, zALw nϒlW_g@rȠ329bVU�"Ā Sݟ"~TCL{]D)ӷS ۉ6yPAglIT nuKv2!*+�FPY7J^_@$!Dpn/.dw)8u]pG|{Ghb C& "Ѐ:|[cSqI&s{+%s{k:"*:*b;6?xҡjn/8q`h7w�ŭd[C%Ć"D<co]<%;6> 3W!nyzTTjF\n)p7!woFH\<TdX"i"9B*g[ }m%yJP: Pz\3ů{lx ܍r,k$3-S;N6`h=V !'i'ttHO6#}3 }\hW<NѾSh!F}J0OvO<bâ*3,q$9K!x 3�/*9}sQ!7^ۣ&0)*A-`=H{`;ŏ^n4$xO z~X�Oك+UP X6S~Bg]B'GsU]얯L(*O@Dd}Dw >aLFՉiN,6^.YTK04�&р -1PJS2:1zL<x/BKAr ό 0"_L$S!qNv Uu? `[$D]�|n=mbc熍fZh޲g Ŏl yl>#~¦f@)m3KLTQ\NBfWY%l&\ 5(Ď]{rʇzq[UpS +t!B &%9HZBFW4Ni9 UǍ&! ;~PY&?BM3L"$]bP@B*bPCmӡ"$b!D_)p~x10T`qI+Y\:/˥v*^vʾ!Iu�<~٩6PCH?(AH$3W !$De\OREV e׶b!0xE%8p+(9,sW`<%4?nUk\{$(v~G%8 stw7,NUC yWeAr+}R 6| $bБO*AP\ xU XX:-98'ٵ.Mη*jS5t5BV*2evɅؤN0rUG']~}GFˍqbR| :tf=C6%*,.Y&Ŷ&B c9(B<?CEKOi6Ͽ?jfnElQ<}>~}>~}>~}>~G3ٳ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/class.png�������������������������������������������������������0000664�0000000�0000000�00000064450�14332737457�0021216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������hIDATxy\Uu  (@`$Kɍ-sɔFm&,3R[\2,5rRG\ L4  ?@sνsWp|MAAA"""""fDDDDDJCX""""bTEP*""""AX""""bTEP*""""AX""""bTEȍM}e1Z-xmc -\m׿i~K_UB W FEXRҌN!"""bUDDDD, W*\EDDD"pUDDDD, W*\EDDD"T8ד|U{Iu13tv I,}&19ȹwlJcD&ն !!= reIqyDDDD0kNF2t ct$t0y'Z{6ka$9{&1ې-̚K6䈈5 *\Yp+-vᯩA^N=f zG��9|1r�2Y ܽ95""""R,c M$&av\Ķ/JB'w6 I/?+oBg'fg3/+]\h&@v- CΌ5;=#b_ںF$Sʖ ZKôx"g5K`˕Y2H{qJDDDD,rTV;EF&zzkJdW\f"%M/Ŭ C WGgW\H'Tuv1gF$3~Gd:Hzа#Ʒ!#z/`U\FKwm1愋'CDDDDJŘ+L/;Haґ>htlG�"&*ԍV-޸'qRC4jaDDDD̘A]<1 KsVmܖ )IrӈǶO)<]!53::p+7nB?^\0Vncѿ1BDDDDJŰw'r#hѰp}~웷^+ӷ1";i[̨ulҧ'ΐb'=E%n94?uUDDDĬT}}aHIe?>0:ٱQDDDDQ*""""AXo7'VNZct[vjK1G*\l6QÌQ)vF(j7롶sSє,zi~9~;CDDD,UxZPP@A~i &p^uG}?i.*""""Ҩ""""bTE0p͉[ˠ6[Y{Lbp%S&)-⚲3"$ """"bÞ⩥_>6U&<C$J ԕ͋bb݈lc?lbؼb5x maT� gِw>)׍k1mg]툟3vExqK~<S|N%9YTW/3IwnǠx\l>\;.~E&ն !!= r9]^ݐ̯2<k Ӓ._YqYˠ=S%"Ȑ5hX@MO1HkMgz/x49IN ̲i)f+&q L&OxS2fͺb͔Hk1uE0H'f4&fy_Kj܌РvfkG &r\s('a# !,b ~�IٶT_<+r&v-dP"g15WgD9P,7kLt09#{rg.Ѿ,+emysw:?rRc1c5.zfǵ}oQF>9V>v0?1  &ȵ}8xҾs=|v= ;�WZnFFr7pwΙhFYk̚[iٷCBA\?0ԃ,oƠGqp#W: .䀏d#%e.̵ݤ̳-SŹ݋Bٻ7="lGw䘲 98 r*UIGjEoio6%^)Mݩ !z[Т} ٌ~XLᲫ&$ہSlۭ�[Ydb\ ֳL,T�찷"X -\oeqk>3Ǫβ8+@}JٲQki07>{bCWO/a:-4Ir;WؿoLUH̺\c̐.c<e k<WCϚy2׶<? mL[ӊΐ˪=@[Ϙ'*p=.M M%/pMDE' c߬%&rdWFv{wsCΛ\ÿN ^y-㒦=D"hLRqLА!4^Et$bd?E Z<hY{p"b ,ZG۞-` (_oՄ=Fm=wcTPIgռlssDuUr d�ҭ51m+7 hܑiXzDgThۗ KwR78@y }֌gY}cmבud"3B& bM +\]sי8mtц5fƍqLt74WH@1rѸ fvg0JQX$ bn }43�ŭ%OHs ݽqIO)\'QnŖ8\@XNAtUY@[$bp4 !b],H!Oz Bb\h"qj"e.xxCJ)4-gJ#&6@WHͼkWƯ޸ ~ z}2@vncѿ'd3g.�rI߹h{i㭢l[Keӓ؜ڊ:̵- e'bƬ|ODĺXLW9rQё Zt zh؎A }o2zHL_LjL,m9HC3ֱ?mBH:CNF"8bE]V| }`sRV{DG^<́x{a|ڒjGqBOem m{9?9CargSPPPPQ_b~sO<nqZu %͖(fO oFOQÌR)vDQnz-EU 'n-^2̙IJLvq@?HE>);?#b2IKDDDDa}\xj8MaHᚾm?=Ol\�$, B]ټ(nDjCc|L_޵c΢Ml1e_ҏnvϲN:E]zR7@Lr{7?]wWΫ EDDDR c yX)&2IcʹXżO\1'917( Sw19~lY˜/]fD"g,'gY<{SkM'"zo_6dJvl \rcU9Wv%f5V ߢԍ6m}x@x5I9pz7/z/Y}4h.Dvr-|= y镏>hwÿ #RaF#tntJʧʅz-EܘUz9{ʼ[}}qs !lqS\G{'))ՆFQӴa*75PY-\oJvD`{/1pw@ظnlkqn|ePDDDDn NptrؽӖ~#'jLGg+77{VȚmC*U7jC);)\=$ ^l.n@W;=Mp}Y;H4ξ#76nSr8]δeZtg{/3hV<  &Go""""ʰAÈ ɛg^g>Sznݪ'="&4Lkt{�"+vk331SS!#X< Fea1W\K'56/|z:MYq DDDD\YY8331ޔC:@X[E%"""b鬬pu壽ihoI#"rVU@DD]ã ?} yFbXW&zkeRYؖǗxKXg =G'HbˤvU-lxD7wVϢwD'y q3:H"""x8ħ~c:˘gHJ=jt,*Muxxq!{ ҃g#xѱD$u+P+((�ƦҏJgEPY?f`hĿ@@"UM%*o{q")iFGDżu%H̉~E;"Ѯi{tTu@䚹|jㆾڵ7WNv<kA3:ի+GSN FEqgt*|y^ |߉FGR8{זOg fEOg\#Ui+TjiÁټo#o/\ h"V ׂ >NPv[n .�6Dy[um%7y0z3v<:4v3p~dtJչe0[CZ57>?{=MTxzFEU@*ߋ ')(Pد.˔EuE4¯7�G?ţ~J=1>{ c^v#xs+?<wkt4Q۸>ٲ/M._[7no6啧2aU9Dz.}!CihԒ㗲0|)_YO3X"cX*Q$IJL)8bFzs)oxrygkmn1+z1-7׽<sQw61Y=y~WKĢ]A/m$x"l/YwHA\/9y\.itTLgQ%CDoDVI+prfN2~93?߁wct,dvky;%u-²vbW1Wk-O1|rwնZuy̐[7}גGF(fWug`|ck~qi蕵G>R1[_kIl\FѱWk--θatloSF-kޱܶi=*sMg ~ď~Ôs}xmTrԕMFyݔ=L*.hߟi}}޶'Y6.~^s? Y[2o�^E`^5 vf&ӫ!/߉ 9o ^7G2:v˿[B̏{vO.ʇ8Aѱҡ,߼(6ۘDě+`&8:8O,RaZGstנa,cI̥QD<b,˜�" #~7ܿGM#KWb"?q Yё}-RJ\n'xuj 2>|wnS!~wVϢӍpD̊!]\=5%+.RK%D|/q̷@wU~ ~72 䘲 dqbVOXFZuw6ᩇFU.%hEw&\53:UܑEծW y lq$-N͛{F1qmؑiې=*ts2g+aC.]!1eAr ^[~rɭIЕ-p}Wk)W?+w5%=u_QƭJi|sΝ?KOŪ=HoL9N9mt,v?3�ŭ%OHs1 f9o+>&;&N$vܒ y+ˀTyo2:J#yDgBM*J] k}eGUG@g~A7d`7kIrۤe]% ;3l7le@]]EbqURCOs8(ͼ)^{fE,!W\s6ymB$V3-) "}&19țㇲjJ#նm1*t\ಁOws܍8x1K |k-y9"`!J|c K4@h(\*VT1S {)nO y8F^G?Ѥj0p fb #byMWIaqI=iL$Ҿh߅j6՘:5jsw>Y"PARO2;z&wfFu8Cg7e|{}u&RZO?T_ƒR4%'n+˒,酾/Rv=u07R3E }s k1O$Քvc9ѱD*65&;u(A0Ղ^͌!e7$xw[ctG14ŏMF)wV_CV*h$!zc϶-^=LV1OF3ukO(, ϺwlDc&/~To_,J'HgI.qu'*ƨC7R,a=F8۝3Nt2;,J""R6K7-{#7 a9䥧qtpהrёDnI*q;Nz-!"U\~~>c"FGr26$!Ld tc)xxѱDʬB w" r"= M[Pgt �OLblp,DyW^(Z Ox.sl(bflҠ1ng-L?ANOeūY&dlp~2'HFG*_)G"f&BO3:ڭLz95lj dЙK亪\yFlllg+n}""Vbw n� ",7UyuѱDU ׏6Dq><?4:YpE7"i6|Zz<˳E;#=wc\v1^#oC@GNl.-i75S?~H"TSîƥget"cvFǐ2Rݚ;̶C[SFGQ[I8t3$R רǔcbڧ-3: Ƚkt )#ۭyk fct @miƆ_ O݂I*SΛ!nl�wF1ĖH;JP"f] fŧ/~⍋xdѱ 2?mL?snot<C&>1b!h//XF;獎%UH)\?\Οfz6qDD*]s"&}LDPkp}[_#IQ% ԌT.v PӾ&v~itLJ5m"jܼ' 'v{Ǵfۡ$VJ} %<w>2:limt )#[٭ W \Ami ^aĬd=ct$RUprrJ^Ɔ6'Y yOK2:ڭ殞7>rnxe=Ag糌$V ׄIϺ?k"R%|k-ukn&FG++7.L&#;g]Y}xBLY7\ܟgYW\a=5:XNeu[.Ͻ/\o^Zmуy""fߑd5nT /7oMZpp}1:X8.\?K|n^.lZbtl f.a=FC!]q`^<3<mt`FHֆ*^NÁݯYgHFU1nsi6y4nQjKTәW|R<ḅ1cGWۅy0:|23!ev+K۪~: WP5ۣ`#%)(( :㺊X& Ƴc<ڮ'vI,D,\ED/XM:԰atKSNbG, W*`ٖ4"רaWS7P9F3W% v5pur5:!j6aqnחu.mP1e|>8a㈙gCPA~nXn};7:F-VGP,\EDuKRZ? ﬞet13*\EDX‰_<{kct25~LeS"fJvv5]1DD*_D'!rS& {gQLT57<gΞ1:H[KC]Z3㗍"fJ"%n1n6es(�3:J-8};=mL\Q`?slnM_N>\7՝qarw!cinj!ev+ަ}ҥF(d|`ӆM7:" 9\Ⱥ piKۨncoiocc?1D0q7_ֹˣ}:3:,\o 666FP }#!R~8|͆=_j6Qj֨itt)UkAF0pL="RF?65kc7 h״V+R5 WTV :Fǐ2R]tm1Lm)7ԬPO5kbOYʑ W\'TcHݮ4e(U8'=ۅWʑ}OSzv\²mu[Rn'w柛lҲQ1D*Ā8tB6pFGrfg_y0a$Bk&y?;]>Bg<ktl C‰_h("eVf@u[-u 5:3+yfpoZ^ڳ<|oUDR=VZCB pMYP_Fǔrfk^VgsuU= ? bb?W>Dj+MvP[J)=mb�ctD�_f>a\+as{y׉o;oswloO/q~g$C#p9SHYݮ'-|hL:WV ltD�_H恍,@h7j�H: %HooIEDnB)KfI^{ʶ-@IչBV K;\{4ۜ/a~W8_Dl !RzwGj>g޿FG b+m uߧ;۾+ɹ=թQ3)`O DD,Kߨ[5/Xui8983FG b+:˦04MsycS:ξg,O뙽|&^B? Z׊¡=N9jժ(,/GN&c4ЮԼ\\Fǒ b+h4{cyhd7vz `QƿVLp•}D㢭<ߴ8:A~2P瓒qRFjI9B#FFǸijK)a)+ȶ-at$@V�gǘW+|G{r]!&~mē 7$b!lUWM5/`bYW)tdTJ3P;68RTXv5oFǸiбCF HG) <lt`VUL]ݖZ,rjժt1nټo>=7|y^�X*ht$C$L೭+aq<\sX1(]êdw!,r|ҳ~7:ڭPNnΟQnJA\�l\.Jzo6bQh Hdf-o8q4?RZnmu^?Γo~j6yDĊ[wcܔ<ORQ 2Y,ԍF+xoZdU=ի65PC)7Zn lYܿ^c\ȿ7o1:*p] jתct 1CիUv纷!TjBna<ZoΜ?%SDD,\srϗTm=1n,kA\+q~Ny"׼wUD@,\ED]q_kI.wk ۸YCȵWų1n2ҩ[1Je-\ѯ$6@^~.#~"b*Y35t\B~ɧo}CRn8NiN4omjy5xs,cd*"beT6Ep5j1uk8ZHQ.""úUQ1 VN7ocH eق W1rpwلitT|U{Iu13tv I,}&1946XMTaRmғ 7c<c_½Zoo~ukTՔ'ΤCP^%CHV(®Е-3kUl$l$|!E #)G>gbHV%rScyuF$#`˖Mf iNE;uxJ2.WKf­ۡh-ԝ=DA7cУ8?ȉ{sբ;2ԆAI)U򊫈52.W9HLV+|Jms_╄ONmГ^~WDž3%LN8~f_V0LKSnuGEVQ*"b%y7v:FǸ) |k-y9"P4}iV=O)[08j- gO }=H/a:-\ Rp=zUiMR1U@D \pqSzuܴ- j6Ex})22 _S"2_9^Vo&2+TY*\ED԰at[B[6~]̙Ɍ$4ȴmȈ~ XWђd][̺9rϙu_'k̊v:-((�`FG;rebfO _{{aw_vn{{;(\o{pmi.Q!7, &덗OA$M +ozlG�"V>e A%Lw%=@<�r9pF ]& n%캅veQ`OotrیWG 3:FPY&sj?ss`ڣbxc@4ADbBX ް9AاmaXS1yBjf.WGYGgWɸfoWLo܄~N^OHMtl3Oؗ5[~x}Ī,+`NW\w'r#hѰ>߾o?[FہWV iŴ-Iq`f:Mӓ@gȉHD1^"uBV ݟ/&ތ~J@* W+µpkv)fg c^8d\@l]Ǚ3݀_p\} %y̜h*@gXs* "RTX p""JȻKFVƭoHDČp/P|@D4TXU1:HҨ""V@W\˩?2Xc;q9yƭDE79=ec!$&Uq9YTW/3IwnǠx0ؼb5QImBHHOB܊ya:g}\0~F,3b˱mx{/[ؗA 򱱱h% f4BxhGР6Pot rP:qKkv.g 9܍>ʓ1?l[K|/U<ŸobHV%rScyuF$#%n%5g'ˌo"13'2V+}^^f%̀ȩ1:x%WۅzsT0K|-zoN01ҍ>J̚[iٷC?<YEk%0dy|3=]x=AN,sK 3DmlCfi \7p+Gsitn17AVeà,&/=H^8i d[p&}L{L,\GLZ�2o�^׭ K[ʹ-4mMVur۸0) _j<˖&:^t IXH.X~l^tT7"Fçh[LY<[n"1Y-esJB'w6 I/?+o_BW,5g'fg3/G3\mˉ@XHE}̈ٶ[:7ai["/{FǸ2}L$Hŷ-bW)M۲ ׇ?܏|>{B|rR6 Bn2˦-0f9pDG6;6 `qH.b]zNo%D@RLDXNϲx+4̛ND8,\&ow>^f"i6뽘 ^ZD?R,a̗.p#@Gpž?=O)[08j- gO }=`%LN7-A*i&J缭L3dmYJ:QeU^8 yˎȥ[ِ^tmLW\bL7.i &vEMg[o?Va9V3f{dtp,kjϑoCpL$9K&us]2E7W 'b#a fmlaׁ[Iԁ g>v~~ ~7. SGVc7<HS7~Xпk7=ЁmIlAEihև#GHMsZeo_^Y~=[>酯)]qj.yܺ 9ا2caڏJ}UT奧q;|3ߊO#Y| C?{*DLH㒜 ]F=׆9w#g[eJRl3{fa83Y֧g>IHبaubęn}UM);86E*%v2ԅ-&y^1eAr ^[~rͻl㶗_& <n/ǔnN\6 (mVFd_ѷ)!lpqGgW\H'_4]̙Ɍ$4ȴmȈ~ Xu[t1g]r%alKd s3v#qF43`D=;;~voEH@N}ʬRپ<ЁnY؜`trs̚{ַ'AE 98qVjgi9r]m8MҞ{v j9u& $}a0+lIPv~ы?E^;8,prmpqY/Ƃ5?3#"{[uи fvg0Jq#ys7%Q7K=`PZ[9<3{㒞qS �O8Dx0d&W<nsal my8eшkv!+FY@- #/Н &c*'-'oYMļsM#<O2]gPԷ|l{uc?.�Q2-3-n GXk-i;pzصlgdҷ|4hÑI :}KuRez4.̘16E4c7I' u"G@g~A7d`7kIܛӽV8LgRuwlܜ[S!35?֧t}FsؽӖ~#'jLG(<1 Ks񖤉mܖ )IrӈǶO)<]!5ߚ]U߸ ~ z}w8;y7ѱb̴6^6_" k'un=Ȍgμ]3䒾sѶ[E+\#TlaO/0.]ۅ3g3e(ӿ`[=9/[2sR3'= __:7eӦ̘915&p V-'Y6{&1Z(,;]{eb&ub'峟_0y}mov!(jZqࢾEuՌL̋ZˮױVePPAO^} ]?@tkx?UVhߍQA7ڧ-7E }R?BO/sf6DH-*U8=Zs{?6�NWFeߝȑ;dТSd֣Ev PXUۏ}k@bvՀB8=Fĸ`xg1mAR2ymB$r6Qt)d׸H-F-+]ugm㬊oEBu΄>9S^)֊q߿ݹ‘'Bgߤ6mN.{EW?ne2a#rb },Wy,iqn6g>B7;�WZnFƞtƾ+zFiykEU<[>22R^@u,M W;Zyyrn͋>x+"ٛ^Ib][`qցW)\IQnr_AÈTD{#b"=.Mc͔F�1Ưcٺg c^8d\@l]Ǚ3\tİKXo ߫4&fge9{k%d9W1JzZ;& 9ш>W%cw蜝h r_Ϡ,jN3z]|nF*ʍű]LY�&mv.w Ǵl',:]::r۲G[qY30 vs>&"B~Ӓn}Cb 6N`*$fѽO}Iv=TӠ7z% ҲȀrx3YnuKN}u3X8~uz,?` ݘRh66~3B :T>O+V\ԉ13͋V$Z3xjQLvaw7:7,~7z/ᶛN*v{H;rWyao#eJ?Fh_nԷy�kbW\]<3;޴|g@DDֽryo1 P.}AX^S<ɌQKZzgP/ZMk{Ix 1i0Wgnv7v=z%>g ۭs&n%OoPvo5'6UDDDבS;2عZ׹GoϠ`F=O:d?|ٞqtlʕϸu{Ŭ_s9[n{uywrXXþ׏_o0:Q+FG(?=BFǨ4j7d-Vތ='ͳތwdEo[}2B]p} ynKY=iF:j1*2YS7#j6yE;O &fz[""""bTEP*""""AX""""bTEP*""""A|6lpq7WM`^�$ĩSU7:FYVZ70Y&1 J7:%zs-|SχSޜee1zeR Y^mT0K;>""""bTHIeWQSqJbW*WRfʛQGEIbw3A7^<3y{i�@I}` ܢ?2:TQR { plK k=;ЯPwaXZ @ ury9ES+kM,qdb#&-�{{7�/K m/1{I>}ؽ/=S>wL7.\:}͜abܗx%pSBC19ؼb5QIŅ3�'n~.[LFE`*\EDD,An2˦-0f9�ĭdBFH:g*~L]._~4_v@}JٲQki07Wծ{bC\$;v:^6</])+u�v0߮/]ïS;f_&AdR+BjW8ޟ+"#y^IUrLYU]!9 OX4]q�9,H_˯ӌyFw+NETnrܚᘶd_`ÎL#>Bߥ@p�N${=NM>IF3p=`PZ[f,["""/_M2�8ZbR a&"S8.W7Z8@|r[2ؼإ9ic`J#&6@WH\SE,+W}&-.ٙ`[�MWKMCYh%akj[6T4ΓlJԔM<1q{n p^ X/cD wӶ$u�c߼eZ15DDc`ۄ>= ,jVdu[N?ͯu R*\ED 5k4:T4goz'JJ= |cx5۾a;&֎tsߋv%pl{{2uџ=351�x3sfpaqI=iL$ҾW\)+u;"'/cI)eImNrkTHhLH^⋺&؄}zxKn X)נavQ+h$Azc:"""RXg�㈕PW*""bfN>7C\rjPeUDDČuG#t 5:YB[ݏg;b1<]F("""f<7 M1:T qUDDDD, Wxukl!LX?sLP`t h*\EDDe΂*WkUDDDD, W+P-nFP*\ED<Ғ!"RTÇjժC* Wx'Ͽ`t `*\EDDD"pWzullkUDDD,ޅ ((8NX۝oG|~*\EDD;zS*""""AX<:n Wxiβz*\EDDD"pWV=Upm^"9s Up .G1DD* W*\EDDD"pUDDDD, Wxk֛�"""bΜ=7gU*\EDDD"pWN=llTX;[Xg?gt98Adr]wSbNq|cHӯ&""""bTsurըU W+a["IJרU W+w!"/nU WxŭjP*"R&9y{9{ƞ+ܷo$ޙxWKaߢ <tgɷ "FHӢmoס7Ο.+fc:=6ȕ|~|ý_`t(|ZucHS*"RF5|'o#/Nse1{2u4:nz�|F]b΃wiJx2 Fǐ Uͦ7O`űtBO|iƞhgw`fk/xqRVgаPf<5fKydaw>` QßaߠEe†q.&; lC:Wf=sS}:A{zփ}\/qdWԋv FϳiY-"]&`.ψ<bRTV  etUDibw'm0yzgM|t jeu+x0v2̝Nso[ DEί]'`l̘NX6o''xd:__3ǮXgڄhu.f/o#L}4o)Q<xU1E%YS[?ltߕOoŷy.".?? eTg߶<ù)iJ=u'lKwn[XlLpP+'4 fnw\3Ъ芧=Yǎ;6fxK1N)&_m/|X3xx>~?Rus47DĊͨݔFo?ƋeNMf+=m1m`Q5j5\:: C˾e23qN'?c)<\'祼71DfGxպޜUp)5'Fp%0ȑޟ|]=g)d_Lb+7ί)GD+?:k6D ;;W[a[VFGJ""7}5aE+ceڄ}>?Yuq%s1cp!vH>CwyXеbfN9WV*"rhC͡mӹ˧ ۩ٔWyogO"PRu<w�o.~{- �k s`SGDDn8rP7*`&\1 u{ }&E*HYN щOۅlm{``<YTHhQ6թS}m3 )?&*\+ W)W{MjhtJFGR4X]q)p]?%u/FG0*""""AX""""bTEP*"bW!"R4p!0: $dU^R]pL$ݹAƾC|ILr.ؼb5QImBHHOBܰLbU2'"ybVtUDDD*ENF2t ct$t0y'Z{6ka$9{&1ې@:1sawa,=Ht k}8*\EDD$fVZ퀟_S=ٽwz7�rbc`"==] uw×O7}¤* """h"1Y+ &}W ?;!d@Oz9\yZϴ>ؗ0=;0=~YG3Ƈ /–.qڧ%^;2T&"""R8+[q hLb>lYਵ4=1L!r|.[# \g5)TG73^ 9 f+N]DDDy})22 _S"2ɹl{267pJ/lN78*\EDD9:B:e:93";"ֱDҳ6 #|6ZtkY7'\eqR}BJP^n/KWJR*"""q9ڝ! ӁFv ,b"B݈yo%2KKz/ձO8Dnq\z@&d65TH%ǀ.$F/!j[&&r[&7$"IO#>4bbt+Z8RU޸ ~ z}2@vncѿ'ѕD_+=iӺ>F2Jaߝȑ;dТSd֣Ev P$T7oV $o^ X/cD wӶ$!Q؟6!OO!'n#LOz{yKr Z1ht:4'ld:}O>FNg褲BDDnͷ\3^Zmt₟oG;FGcgͧT * """"AX""Vzԭ]""J8u&""JVFPKD W"=w1:Jl""Vzu[v"�@AUAE+ W+`oWF] mu_Pp<|!"RTXG'v""Jprp"ˤDDĺpN5vkHAUDJ:Jz X/""V^m7=KD W+֐0:H8""V«) tAH7gIER*"b%|r4E,(*\EDYe1ӛ"hqW ""FW\ED;q J}\2~7:BUDĊ8ltv,$xֽR;[kY[U5+""Vcu?vQD*MBϴ׆McuFǑ >""V20:HB ؛G* W+Rv]9ERɻ ?y>*ԌTcIQ*"bek;!R歙XL9K.&Ds_?jt 3oFFv:NNԫㆍ �g0t@#JP*"be8݌[WEt} Y,T\6[g Yj`jTXɊCBړ ߪ+i+Hd;S]VO^"\SW+UD mrsl;QDOe&"WPPP@,]xC_RTX{חO5:H1N}#m{\K4lym3/5:#""V} |h %Vwk%%bjRTX(cTocchq1pb }yk T}}:C* W+7yN~(".%$;ϫQp3uJwc.]FǐJUD h\o ?gtrE<<RITTAN^nы :|3;ӠQpB愽GDCܲ gdC* W*f l*Ϝ2:M[u~^h(Rl !""SMg>M4:T"]q.:AM=QD$b:4먢 R*"R%->蹣wdQDJeۡ:zݟ1:@]DDN'<jtj4Nb{ڵE +""–;XRnot=g?PZp� zMy|\Qmry(b ""rؐ1޿G~vvxxQ`*""j/kgE_ԙS2?FG3UDDJH^\մ�rNW`2:Fw&ٞcoj۪bo[ÐrUDD+!gz%uz8r#atr7qO{z6jhHMۍ>)G*""nFϿ)ё<ignh+""Rjsv~AL-Uw!-oy[j}tUDDJ-=l}G{:|qёĊ,jըY.EX'""Rf=M]_́_I,)Ļ_&#fL궼ycL(?˅ %W9{ޘ”Ϙ֋rOD ?7BOuӨy4fUAYZp[om<c;ͼ\ 3?{HR|Ru6NbRho=eIy}?FUDDŰ9{s@]"5:RyfpoZkgy[s9ukRz*\ED\%?ӿqpo}ёĽ >\< ? /~e_&l|3 >۴b}2Ϩye3%[6~,ƏvT *\EDf:;f!6a74cJ<}øboW˯v:_́E3}Pe !`zTc;eŧsy3fNe[s 7$̘͂ BZ, W0;άQsY=y_^}ϵ F F 5�jzߴR/|f30:.y8}õp_g#U"dvX=->]׳LÈE5:X?/7oc?ц(^Zc/ƹB9sΥ{ٴ5]!Ηb~i#VmOd3qN'?c)<綶+w@NnQ__}5LKeR*""ϫ)oM,}q!>Ѭo[Bb5k™+3)ER/x 3=ñ/xrOΚMpm vzeLc+`_ *RWtMlÿ=fGB^7t�Ma֏Eh6Ʀt}ϙXcاg'_V #Ǯgz2oyB-Ο>~ ܞ;;s\ZדE9s~Gll4}!ƞ E׵aJ"Ŧ@JMYZ59ų=2.$Zeq2LG3/i`'1z1 M`]8l#}W)ݶ)==DŽލq.Z[iI{s<-wyo1uN{y`.74eƋ=NxFEP<?8.vs8e8a{Ԯѐ,RTYyY̊IO0[( d1+\+K￱z{4mCˁ WUDDҍy˷qw`dgx6:3pvN~p WUDDږxo9[<z2:٪5d>߾{|oF5TZ""bʼ5 yˬTftk0 pRPPtnlt,P/?z>Rj}Tzz$eXPv{Z2:a=Årssy}{o3poFuglN)=""b~M9‚(><ưnmrѱ.ټo#?}wD;[Ƃ?+ }h$!!*\EDʬ b8g6nFGb|U~c;q/M;ĺ]k7\?xE+�f]٧Mz嫈Xo'8t_@>N ~`(J@3,WwD+uyLh"a:ia3\N|̻9o>=ӟfѲQku/|5y q,-5?&:CWK:Ճmvh+""btƐ8t|߆{HG|Pkx^kd06䯨X"W2y7Й)l3>{?׿OjF*ԙ揱APW̋\3'GCOh'*Zlp*}Y=y+'}]&!}S  1J4o*zqw6*)yy 4:up*]~l ?}GaUx tRo'|a>v~i!]?z6y;zxz0fɗSQTUDD]?+g<'0nh^v 2%HGaOΡ~v:F%v:up/ct42WԺO=<ӿg|vQ 1Uu x?s=>+LZ4su. G'$FG)'OltsUtelȿc7 yax~Ldz|emX{ 8pmؼ#|(oж|>uq$m ʒOxw.v%q\J=/OK`~(( 8{,Dz޺HVͬGo)3gE|q1ka@A 2;[;| S {[{b^ۄL^<~)9  _a9NKٶ霷49v&-d|z7Vnc)r~z 7mwr.+7]`) W[,ݴг]/R2Rl G#};fQB̪>$on90gv0~_ؽ#=eϙg�]6 [}JEJ>"""myk;, iqI۩LW>HLV+bavTKCjըV?fYbT7VL3|�rh?]dq'KSfƳf jDa܂u;I)?sjתC3xWS%/z9k]ч,b"""7C[E&4]-x$A:Sκ+.mSXǴXF 1 Wp~Ԫ^TDM0; TB�SnťhhQKM[܊'=t!:j QNC{L$n!.9⍽-b0"""NDEG2h)2lѢa; p&'a#sv�N0Ybz]ҩp1_;c3\7;x"fCaEP*""""AX""""bTEШ"""_ϯt(;}"FH+(( *p6*\EDD*Xjo<JoTnч.RUDDDD, W*\EDDD"pUDDDD, W*\EDDD"hW 7g"""Lo)*\EDD*ޜ%R>UDDDD,T؟>U}\Ūp`[܏CZGڴ^vFH)(((0:ȍX""""bTEP*""""AX""""bTEf'~'x����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/er.png����������������������������������������������������������0000664�0000000�0000000�00000156400�14332737457�0020514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���� ���}a���sBITO���tEXtSoftware�gnome-screenshot>�� �IDATx{`e0I2mL �h a?]^EɊg ވ {HPX+ˬ. ۑ )6eF/Kt;O 7K@!B`B!X#B!G!B($a)B!PHR!B<B!B! KyB!B!Bftq!|D!e/#!Ph*?Bu `B!PHR!B<B!B! KyB!B!B$,B! IX#B!G!B($a)B!PHR!B<B!B! KyB!B!BèQ"xnY)7yX m"(Z.rVh-.}8t ! *yFһV˲,2+ZQ!POF(vݬ3 Lڬ6qU! )9&ϲ$��J0xUT(U*B��^)WY31&JVJɵ PȢTnBի*TJZTv8OJ3kאZ;�.xi,�:8�ZǴ}!Pw֞Rt*%` IQ�keYav[os20*qM gzFccȭz #R<k*A(,Nƨd-:ibt=:wZNKY'`6S(4J\ Pq �R$$Buv`:br�Uj̰W�PJMx�Xu95J �� 9A5xI-���A6 ,RI�r8YA!u:5j0��q:ݬG��GP,( W8@Z.t8"PӞR^yZAi-Ns!tW F@7JּepuJ!N\ rj8 qRNRmhB=lHQҚj{Vcd<Bp��88RNb\5[<�J%8ly`bp<B"*f��p`cPT.kթirJ6=c7�R&&;RRR;Lv^=B֮ 6XMz�Rld9*�TZhVhri% Bez xZ8\Buhԫ J^mW9 Tdٌ:JE<2(�jhQe@pZ<O!P%Bӭ999iii] BQ'B.w{E!B($a)B!PHR!B<B!B! KyB!B!B$,B! IX#B!G!B($a)B!PHR!B<B!B! KyB!BRDK8BOP$ɼ^o@R>--+@?Bu `B!PHR!B<B!B! KyB!B!B$,B! IX#B!G!B($a)B!PHR!B<B!B! KyB!B!BnBnp.\ifmx,*ZlusR8X CB!B("@AB!PRw[u:3K"jqF'tVAA۪՚X4�P ;`m: p<X N=mw.73u6kh3ñ,6یʺ9Ƥrp5[ J>jYpS��x,*ZM5y6xYxHRָjJ+<.*1QV e͢ZBhviAb\M6mgz2 BМSN5]ήO,<Lp(goٸPls]xl5=D<rez ׳m>p݅ˆ xjuA/3w[QlA17rA~`I po(\w-~xِȇ%\<y󞋂 7?8e;|x[Pb" lr6;+ac1bx,fS px7_)e/^o! h;A!Zݣq˵*�V)3Âx^e87O9`nRi�*eoՒʭjƻ�!W*� )$�yx��BRbeܠ;fN(-��<+X;UJ�ZICє۠U <n�ܮƤZ",b;RR;PӨA)1~J�Er��&y B!ڠ :h�FGe�p ZvP86Ҥ3rS[Q@i-N٦-h)mVӄ>nB|6xQhܲ~B!:L$j��X)r�%�c2<��=.' �4wYM6TuFIa\?46xs1,zN+9y��`b|+hqrΆ<A�6V,�s4c9J.'x[pݡ<mhB!PCw0*Zմ]i&T&UgrUJ3<X51jhudj +E$h9U25#hYC1,K:vP:^$kE@LNдBh8E5*:Z}JoΦW*4V(I ԪRFZo08^kU"F%^B!T/AnIKKh]CtMӉ8m.R*vB(u[_H" m|khF�PYlX#Bu<��4]N>B;R]]r{ 2$666Q P#9'7.؁tK.<B趰G!z靜(:N/V B!݋Q"B!KyB!BR&ܒ⪪N ($DFF&% >|DXXg!L_"B(Ͻz :)pӧO1R܂2kCB%%<ISUW af &!Bm|UUՍ7@'E*Ah83e04! Em^h..o?B!303AG!](4XҷqA񲎉`5DB_R�iwB!1Qnѯ>&4MkImy;-֯X?�3u}*r;y|E~KLE?bJA QϾhLe{|sn@_dO<PJw�;i)/_ϔ~j"yq#myS}de>yc/f|~(@!P F)/[+'��A-{|x�>Oh]'Ew|9.Bvg;g&~kS�Wfxgv<؝|yRܜ^iwʡ g^{ I=bm?;L;^6iROo%t"B(<y͟0$yal f;ώ[3wJ_^1'JS+aNT �^+ ҂?2)A3+^>Ȓ4 *ݒjG<Y=Lr̛{u8@*<c'̫?OzO[gur 3k.5f*ۗ.N ^3Y)R_ͻJ@?TyXŎcYg=5yYN9Igex.\r{eA^֧%Rʒy9߈~Id02|+qxJ| 7i/N[͏3 $}S?{y2}>so2kUe}'KWO.쵯z*(s^BWJA~BQyrƸ@:5S>:6fs΍m^3f-.).W5CedbM2]qpK->k�nY-b\|~js t8CF<V;KW|ʒO5K͖l5us٭+>zƊ?\8q7d]BC ?+#J5^}ϲD]qKZ"­+nj<MVځh Kreeu>7k\2Yq5;^Z$X et髗eӖ#U ]1ľlKՉݠJҟ^PŪMK2+ޚ�\ đSeULs98Z6BzlÊjlk|[*`?6L87S=cBL ּy�P BUIoȤDASW7S}s4'%.ɤVL A2p\DP[Xi0Q{!kzK/[˼%iWU%7k'O C&jXD|e8rT � \=_-UBYIItڬg؛\^W6vw!$Br _KHUB5ʥC$^Ο4OOn^i_>NwlpWZ&#c$�9Y–&NHԤPK�c={ĸ WIEA!PV;$Ilͽ${s]2cd'9-/I d>dNہ| j <+ܾƚ�H{SQ:`'J!zhFJxڨBw"DaH 12*!�$ 7f^"�ALTMH6ӸvLf_-?_�~fIJ7?K@`ض}ѿ4m^ D@5EK}pl3w/G�A'Yqk&K7 D{tzhbkgyvG?pZ�9@)JO Z8{In>,B!R@%uw1W=?!*�fl1r|bɽ@s?_]r;H$ @�!0xoNj p߻ >QO妧\v~/{t1cwIZ)znA!1bJ[4xiQ󞺩}@4;Jilb!)❗?{ Q@�+yoj 8YQ ٴް[ OզWV�ԅ)"F>OED7{ŋ{#Õ~?iC?}15G{i'MWMNs2vʢ7Z*' 7 �Լb ; o! iIKKk}Ϟ]Æ͜9[|ܕڸc$vnws]}`%q׼vG9D&<f;S_X}z!<y]`[<f,S<-z �ѣKbN!B!BO0&P]IϽ"j/WC78'Am5pΊW#B(0 #B.ԶR>22wR4!Fd$Q#f+aۯQB!V'% :w.76v�ADvR@!竮\4l؈-.o9Dnpbr�bf>\N}:83,�ͳwf-_n-!Rn"´t|"5zrR��b"tFn �K-㜶]9s"5� 2^Ҕj,CGT×[7΢ PѶR~+W.丼^o'd{F5|x).o9D㶿h,]u? jXiݖ%L'w,gAF{]Olg� t0zxc%~|0��5̇:C�p<{9S>KEO!ԣy|lllrЪΈ&F6m4paaa@ [RRi5EO~vsMSP8_R-_45}o(uQfiƓN9OkpB'ǹi@;:9k��<*y^dxPh[){ &EEEuR@=O>;bHq L`ZipOv.r<h\`V}F xN[k痚N�q4gkF["f UBm|IIqzz_ę 6|xw߹Lc#"$B!Y6}8*_bg!y ?,1c۳N 1SݗT�Ϸì$�íl&RFneuKbTcb5m+嫪nܸ Iuu  H`&6 gm4-UO7n�2|\="fTD�iIzP_^T# 1K,C��:_~|9a*qi�Bu]L7h̫ldB<W:n|MilSVQ-sy-t+1.CR3q%,��î��n:ܿn!:@KyA:# 0EI@!-a)="N:(^"LB!`eٿW*G?ڙorNߴiIF iKq}e~Ӟ=2B>NCћ_T>in2eܺ<7XoN+�L]>=0G6vl >{gyw�Ҫ=1 |x�$gV&x|0`hjiS7i |7M̓H>Kz嵇i Bs/_r/myB';״a鷟&G+JZG+L2~^˚xz(f;@>p*^z$)ޮǢuynX>V; y�К tVfxgv<^/#,yh1S=3 y+ޙ]9C(|Or=ͺd/u[+'Sdw_^B!Pдo?LvԅcJ��nZ#igR?沗<+ Rgod|EE{~QA}tꉉ?<Z:޹@'}yO RYw*dV?4O*%3\ܰ%g_7~ T�9P\g/ˎ)Q<2IK*@ކ;+̫OnG$vz>^aT,7LبsjHeiOwn;z;px .yߚ}e͕>~^^^>co*/ĒЈt$ͬr)/o]Z|m♏ 7i/N�Ώ>4//d,}Iډo,'.N ^82zr>B!PaT%V0z_�2�@ޚ:=y 4Tgç0wzWwMY4.*�� �IDATaӸD,h@)^3 wm>[FHmXqB]-M{y͜x�/Omzntm*qn\}첗Lۃ)O){sOXj[M(S<7+oFKe<=A*NsJB?-PݟTk6+?y%q6V+pI5 $?% McX@{zxpeB$�_伔Ȇw'eP2�Z;L֪}3txͺWXܛ N⟧Rv!P e1i6h8oېeBMm.w+P%P;{u�*A � $��\*ȤPU.p^O(aK'Jj*A3emdb\+qdǘXYYUA [ e9&$ʼBR}Lo5)o TOﶃuܒ;<?Y@ť\0�^ @+jA'!i֊ j+8Y֪lW7n.ZLʘq5gp?X] /O JGjϥy(/*AiWS!qI2o&;p騨`.Q|>T 1ibʼ mi'ۖ]h[!?$Q杹Qқ+Wo^. 6_I  dəd-BkZ֍MJՖWʓ;mg'A8f){ > DRgOM?8)R~_�Ah�|$vH�Is*u#*_5YvӁnfNHByiB>kۿ!mTmg-J@ܻ?+|}d6PcJOWҥAJ̈eo<ݗA}/y&y9yK>}z̙c%IxxxpCBWK{2�dȓ )wWvM}WS|2hyD7ZLo|/T=?@xD?敹Ɇ<d@OQӗ_)sqsSeRԟ>/�B �hR�@ �A:~ui;A&oQQW�!H.+''V֠vH@:[qEq~A@n; 3uڟ vh! D(ĻvKґ. N*I(�Ҿ�D$Nn5<?�m{=#jO }[_2pD JG{Ϥ^z|<W<ކNp4|�@kB.q…>}[q&L0�]WCd999iiiMٳkذ6ޕk?Z ƹsy3g|;B* Cwm[_wڄ/|9cތ`a NdffRUaA :�8ۿ#B[QPqy[y zvIl:Â.) ^!@ k]O>gϞ=vXJJJJJD"9J}?#L&9+^SCwx !nS3 3_XYCw `.]r\u{}?~{F9//oA !M%|i-L`''$$8q4vҳdcǎ;O?ݻ>tPTB׶R>22mU]}#20 (EncV+޸-###;;z+Ws=3f̨*((`&!!eYB(V'% :w.76v�A`@k|Օ+ Q0 4E.1nܸI&@bbbvv80N>]PP0;Q^^83>22rȐ!}<yȑC/1"mW\qy5K&gQÇ_ilSVh"tHKKQ70񤤤<>v(//eԸ';vL۴ <yS:)0EI@ywҥػd)yqXXذaÆ VVVVPP}Ab=%B4v <y2Au7nݩ@K=ӨӧO9sf)))ז a)B[/֍=Kٌ9qnn2dȐ!C*** ӿC&%%u~ ! i>/;;/կ~U^^_Sn^LIIm{gر:thAA;N<O?uA.!v [ō'NP*�x iZIIIIII_L&KNN2dH'zX#F~NNNAAرc]ؚ?iܸqR6Ǐ?}XWWWWU}<22rȑ#G,--=:tСCt!B<Bnƍ999Νk8߈x(q�<8رO U{du[pj;�0N1q!D2t?Bܢ.V(+BU*++÷o裏q\>}._<zvĉqLu@̙3gϞ3f̂ n2--m޽@=$<ͼԩSRtĈ?833n=x?G<#F1bĕ+WΝ;w1q$`jPe ŋ 77/[.<<|ƍO>kiŋ8�999gΜQ( .lM.e2ُ?x6?S.+gȑ#RtȐ!!}R)[>Am$iJE'}wkG2fePC讱zj�xgg?w=t'|"NE(**:xC=TZZk?w}r?D#痔TVV0g9p3g qΝ[]]0̨Q;c@gϞF__+..u򸸸g;|pIP([37S~+ #T@[YUeaTtBqڵjq~Œ3�EEE<<_TTr999�'6={իW;&6ׯ_tttuuuuu5�TVV+W֭[<G۷o| .QwC$qIՒ. S{]pL&o !t?*7ޕ~Sw[LNZfT�XDI rz8JPӒR:AzQ Qy}&z"ZNVR44s8Nj\ƙ mf5gO *p2ds.Z ;קOC}z衫W<��D}* �erD"ދ͋q Aԍ�,Xp(X=w\߾}̙#Hm]!HN)//AS3KKKϝ;ߊc !ԌK2OL$<Eoauuw-ͼˣp:m:1ES*sؤ?>Zpu;VY٬kXϺ@qvY4$ }@^ev�к-6-Qla BZ/*****zիWwY7*/8>*NYn]QQ'|t߾}/^Ǐx�HMMpBݏ /,òl[0񙙙gώꫯ$uC!3W?Q �<ǫ<�r��B�huGQX\&@[j[J$ku&c=J��I$EI�zB]QA8W^�G޷oѣ9=zCrrr~_oݺ5<<տ3pgp$:wscdžK*uәwk׮\7nL0AT*R)EQ999Mg%.#JG5jԨ .ǎKMMMMMmB(Bbvy<rgU5 lU:tf<N6薷yج&!QyZ25WؼXco֕_“�@ĉv0у6졇 :^4f̘_~Jrڴi<gǎ+//vP0SI.8aL[9V8�;y �hmup:-8ܼx'hvmG='.'N!I… 3?cizsιs犓`֭۷v~Þ)))իWT¼K?ҟ< gң.vYqɉ';v4iǧLR%???66.<d2BP(Ν;tPdddjjBw)a"qNl��Jk7[~$e hY �c&q>aZLEPM��&6Jn1׫QI} jqEȸ˗/7\F&AiEEE� �ܹs4MAh8waaa3ۧT*ѣGG=:ي?M[CK p q|iiM츂I4//ĉÇOMM v\uz#IK렛2jk?<лc>Oee\'"gY4mjj^n=p@ù2(_{5.\H$M#Ν4hPKjvJt[uH'&L v8);;["DFFΘ1#t#yyy4M>PWQQGi*|%u*q;qCz/**oasŋ߿ݻUTT4a„`222^1^QQO?UUUӧ}CQRV;PM5hox]vҥ_6M?| J^$'Nvf<wǏuۨW֚7|> ?s^kEhMv]sCN ޣ ŞA֌NjUfffݻW 斗4_~_]3モĉ͋)wWsm#"""""@ ܸ^QU%JL墳X#t'z.B~:IQQQ|ܹs:TUUuڵ۷իW OSNYfի׵krA&WWW{<@޽Fٳg333{OoٯQؼ@pd3Rs[W<l#L'��..!Wz9�fs; #Yͬ4l{*O5f3BȬ+62ixy��֬0xEAS4J zdE%kmpALrx,^Q�nSF/r&EA&PTE%kl*"JQed<6)z}ƛoC˚韛 :*W ӤJ zɍf{,bxbI(T�Zr^rymfhegfzL68D_JG n[�<V|ݩq.^F|6yїv-NCrKxtdNS7pV}0uԺeů]�c233 @\n^oH\o~v;w?~֭=~8Õ;7gΜZ37;իWmibM�T?m߆? q6͢MPjr$?`rkm6D[M�(xnGo9o7.߀7/S֞u4kyaVMܵe( b�f<5$�p8{X#2S 08^p8BB6k倠tvvsLBsFuQy6)ٝV'?\iVp07*zܣ#tek6=fFΠ#w:X^�Bcf6=VMqYMF 6PN&0ifatpJ�@jy*ֶH5˝�P6OUlFp6Z0f{4$xě5݂h:��:4wܑ#G9o߾O>dQQQuuu3O<٫W g̗_ΑDƄW{ ĥ^QqTÕί4'Op}*[Uh##sdH �9&~J+nK (hP{<%!tNEW~:dUg)�77RțUp3 V:�*%q;Zq0RVpZNwmhy�hV7_3\6^T+݌�^>5���RPW2n[70PgaKki:[mTٔ{Xh�R(f4sfVi⏘542x��Y!glbpM!3MDhzKz71]7c�b{y-<I/+<I[�ܲʕ+_|D"9sf%ɘV_J܁*{Ue5Ha��'|lmٲy7n4؛,�k>B٣CS��@m?U4pDaYK߲BWe()V\-a9RA�$EzX�C4ʓ欽) �M3�V3h �1FjIbye 7C'h=�{�@-YP>,+ţE�zneЈ7(m5#:j(UT x R6l[HqQfiJRZMɖV 2ʳܞm!jGNfZaE�)2-*G&bƭn=5n8;;s=AqO>)ػwo WGݿZ|0 ;ɓ'/_<m4~^5PzE+He+ pk- p@ƨv<7ˢUUUbAOirVk'8BgQk A(Dte~yӵ}p]v%0:Y[W7l 1zuDg!kfL#=WS,[Ptzir-e{]صQ C'S8#MG*b LtM?7O?8pV boapp)4 B+ܛNݺp qq* (V;l-o'?ouhVi�ˉ@n"Pj$xZQ@ Ì1"===رFeq�@yG3��hv;�hH~dW;DZ\Zudc\%G4M,p Ѱ'j)R, f^(X�<E'!;ܛoQ+qXr{33Uuz�ݨ>bn?g=E!W)98X\<{q!h�� �IDAT%ƺ W4=RkŸ1˂=n%-Js+v}V Z5ltX4nka˝ b�3sN-<�kQEL3=Yԍ|WСC iã+**~#B(tE)}qfU\[��t��ϺYAG<�rz(pz��xI5WUJxIXՊ+5fde[=R%շ͸Ƈx<Ly($Vno]o3OLY U.dٳ6q޽;B-tN{}]~ SJk^I657w3 �Ϻ@D3[ws@�59J>ˠ-]<:|˗̙#^|EFDDDD~~ѣG/\ ^_cV)q}.0@}4,lr�rYʓiZZ!gw @k*˲fGY5RYfwg)ŕTU62.ow~#X .lvKSpiYJkw*,[t��ﱪk0|=Q+lZ=,S4+(n7R6a_T#fdmx4`x��J$&=NQj eyLMԠF%cyqU Yj-];6WKyBRYdR3 rHemDŽ-ر#11qҤIz/_v=AF;vlQQ?񏒒`GP*Z999ii;k[>ӆ}"��NKg^ۀwuY36])mp(6))g--]Xta;wnРAGo:s݅=PK;?X\y uk׮<y*===.g "ԡ:>>s#_qyؤ߾q[5zGƩnSG/Z9"JgΜ@ݫO>SLr劌LOO)^5VA]Int ƦIb]s[K'n/; o B(ٳ'===111؁ ӧO/))9x`~ӣB wRܾU#{-!z]v=111o}W ]-)))))eٽ{6L`C[B!tґ#GϟX80Qܥhiܹsĉ@H<B~aΜ96l9RXXx.vfnj7(趜{ҝX^Lɴbp<Ni<��kVf�ˢ͠dZutE%268ƠJd<U(U`]UuQ e7mTK,!C3cDg3c!yCsޮt޳V0g9]M4aKOJ(H(]Wl@�aȬ,~q7|>BAFμTИK%Efk򊊷 (hH1UXReU1FHrC�"4JLjt@dCh,1Q)@cp%<�/_ .Y9R#q‡r8''믿?w߽e˖RpJ̠|YE =PdQҶ^Z 5 6lI ͤ팵d~03f/][(m5UA�PNj+!13XU5h"VmPn4=(&D/N]�@ک%{zCV'|13E.5Xɤ5R#C܍Ϟ=BL\PR?~yN<i&s-3|7�8 �{!ɂgS*�DDR0d wB^!p]h"�u�EaUU ٠d.WՌeMG�I1cyNh2$i .zs%`윇R-\gE*$* fů9zTgJgjQCJUT-) n�gb(L:9-ԊWb($ Up zӧOK*˹Zy}{w)4 )�6ߞzoq (>KTe,%h(�� X`�ܥɡ*((]R� tŕKDN)mLQg BCAݸ`yMTzVq"1 (@D3MW>Eoƾ|fQHwK*Z.lso��ЗLK%"@he ?h %4�U-q ؒsU TNDnVOh;!0[WsTNT-p7Ϛ5kܸqG-gmO-䗛~t{p)x! I)jBn-{yX}w& 7)w׹!D԰-t@P?jaƏ@tc歇pQFv-Ƶa$fe$0\L %q2 z] #I�))6n"ư ϥJ*wρ pz �F"�"kГ:k ~YYٔ)SJ-'Ќ#{p "u!aZqt?!w|n,g <�[w!Rڽ&z7Q' Qr7iDi�,8FM}Xy/AS%DĈo9Qf*-L0̌`范3(,`X${Xf[O_?((r��.ݹykaHnk 54ߒR#i9WgϞK-j�u}Go˿M$2N+믿=zoyRp6;K�7҂q�D4�B }a!\`Md.,/*r@YQbOv"iYV3u픶mZ$Rǡ�o{ G"a`-U"vAVH^QoL/d%Pk#,PI^u>/X/ G@<@.`ME)? (  �GB\ �e�*y[L!�FDtRGsUG8q-5/(ddmFSᄅS_?/g(lStWGpCAD�q1F^ эIJci9$۳1RC'KFYd;ZJoBH4s&!Uqw TԍgD!<)㲥dY;Tgd߮XyLj{$$f"cA<d5DҗL(3@:kPyZCLC2HJ "MYJ!U"Rc2;TbdJ.68s?n\ zDjx:|رc;SRkpBٳg+kkkkUUUU\MlMl5G@2JvZ 駤咷!~+n(|&L(++igϞ=^t2>|x޽ZU̩SN>=f̘R �xR p DMWyCQ ̙3r;9rQJU<0jԨ;wZ3a /I!N~ɽ RPj k6k֬R뮻R\w޽{}0{- p8kݻws=zkp8%C曥 ܔp8ѣGc{op8%#BZZZJ-ùpS~PKcĈT�B��թ� x51Bf� W#Pq,nI%FHLԲ~ e  Tj2$24Ah*hLrȃH5yE[BeJ4bdXyj1,b<Ӡi2�M*En"d~Z�N#B�[/v)mS1Bbbܢ�^293$Q4_9l]k5|��GߚM{xpCh'T#SB^mͯ]t뷭zլ;Kbj?/v4yRpJ̄ nwyB8o 6myn-ϩQgঀ`KJ�i&mg%I6+.x:OBi! �00Ǎ:^4%\iv8QAj3CΘn4=2icVl{.&ߴiH֤ͥd) Iģm^*J%�Ơs�03ӄFirs#gw1X;5˖6˓o})�j'My%{nQoR pJϤIFvo<rȇ~gϞ?\ CbZvP4T/YlJ�H \2!’XBM@r\V7p<J}[rJ!D*BbjBE� 3`u$��"ϥ*xDS1�Vւ'~)P&�� $z*(a(Qu6v_4;8թ?V9v۶*٬c woYU˂GVY�QּWglyk/vUr6R�F#otɓ'Z1oȹJ>rHW wĉQF<xp۶mL,cL;_GR )$JUZ]ی��F�]魂hXTn䆮ôrRI5P};^7򅘨3�H JNXQR�/=)P.%K}Er^e։a_ˏ<@"/r(?k6MgxI�0*[%mf-[U]*o J"Mny1wv.iSv�|{�1{X!_3tc׮]=PU +N<yxuUŒ3\={l_|#<R]]-?|n۶9cM6E;wᅼHJyt{:> ݗWyX}:HU:e$vݕ�"fjRL"~U ICϏ�X+ė^ܸHP1bEEaR3MM̓푗$0JN[fn3k)��$LVq#? Dσv6s;3<w7 &u u䞋}9tӧǏ/v\̜9׿#Gjjju]&Lػwoq8`M/9_<uAg!SJ=ʛƓ( i1B�D! 1E Qw>l|"$$Fxyh2VTPΒT9p׍d� 0Y aQ/[>פ$ZӖ{iȉ-V[nj_7p.| Io\TTT|7ɕ>|x%q8fMSGwZѕo&j&҂q�D4�B }a!\`Md.,/*r@Yٞ iYV3&ESFr"q(@۞ BH )WIHF򓢷Ҡ*�Lm0gc ͕ uy!w,?c FaT)u�с=G>$׿Ttns@o]*wߟJs)h賍Ow~.wqfϮcǖZsr=4GfGgMw77G(?p*%e!$&j/g~\i9WhDtcRĸ=XZ9&d{6U:[j䲽& r>bψpһE@j3 +!Pc8nrj ʓCNa- zJOvA[/ȸRΠt6.@.eMj{Y3%ѭ,1!15}$U,`傱㧋ǜ|prk==Ƶ!{wo~9?(tfPǪ7WܽTy32~)YU^ ݯ-jKUV VwW6r<O{}Jo;Jsѣۏ;9W# n޳gԩ_ց~/hѲ'4y勅fkd>ZBUj(<W"#J-(  gϞS^Kѣ~PB Εώ;n6Q<o]~EJùXw3Jͼ}"9N)ٷoߝwYjÁ3g;V|K'cƌ)™1cƿ뿞:uJcǎ;Zj][yIB@} QwK Njoo.ɓ'~ 6eʔkp.;O<ƍǏx<^jEEMa ' p8aR& xR "eee~[Qqռ9+!p8!wͣ9K8ܔ=Dަ�� #\�GZ^ĕhH$Tj(b}>{dix!!$(44&_42^(vfkw/hV4;*"+PI0� --5/�cĈ83�0^!D4[өh@RFS~#JI!䗩|g){Lal9KKsW_uttr-2l9t|Pjɸq?Z3pݔ묽ok䕯45أ BeZK"N8vƶ=4%I*YFG�{×̥`NMu U@ЖleZ:^(c=@:уb+Ue/H1ZݞF+TBbMd ϵt rHb T2H픶y2FCzˉ"pJ4[ie|^ [3SZdYyέAO?ݳgOUp.'7|sE--- !ʏj!R-\Ё.2s�JDBPT)d �D=-iM,U$Ln=սc5Dpw+DEr3J&��$ 1�QdS>0ՄĈ4rG� .20PdHp]zs?Ks2ᵏ,M\g+rBjR(VI? \%JՒF�f,VbB��f3e:#�WQQřIr(VRm #GL0*-loovYj-(=z[oUj-@61 (�@L-AjEaȪ;~s#E!βGBaZ\�@d\IDZ+f{/|<`F9Q8ĈMZM4.�@PI3Iȓj2!̛BY? !D` m>;RBýab溠>$6^ohi}f.JZ ri ]D�jo So�5c;o_}ۋ�sUA+5pJ+=mC^zRœ(0m0 ?|c|7s ( p 7;LJs)?sӺG h i<)[se!vƴI:J׆N˝$b(.ыUFDQBKVcadTPo^cB,F3)�[TFoK#QS�A+o�v|LK|O=3WіxKu 05<Swˆ1<*L0J,/4YT9B�� �IDAT�Rz?qU�:\#k/Q"$ :=c:\|+C,y?8�:u;qg}VjQK'[N<9uǏe\u )#?7:na"ق"ϵ'"Vެ4Uowi#fEvBRzi9F4[{F%Q"gw$.�QF+陗Dd4�LBbDjf}(3k[y0EÜh "; !-.kVPTǛ<Z`WV)'Rgyb-rGJv{ X!@r6jl&YlB9W91AaǎSN1bu]w7|`t›oQN< |Y9W'nʗ|-�0zh+��Pk#,Pɀ; W;P�I˲1i53hՊc�`HBim;9S`f^ p<`P(F( \`MD� p�0<tCJm+"-,F_|T�@"a`FT,k{DK�@?bσ(JS�$+5\H<e�5_$ )q3]aAΒU3l�Q/"F#,e)(6r.?Ǐ;Jb駟=:xr<zOBw�`Ĉ \9 )_w��|/Z 1Xt53|\JktE\^V$GT%9_Zgxz%h)%`.l)Ce5EJ\/$8r*kRR;#SXo1[Jc)f*q%5XHDHrĤTveoA *:'n<$M^|<ٯmf ЏXHikIW1F\*O ]C*)*�n -D1&Y@R=?;OV�.4)KV)J$չ\DZϦs8oꫯnR |qwvtt=zt%q. x#GO0!?t8cDI{:כ^n pݝkVj=Z[[.$N ٚ$nkd$i �QjE'LPVVV={L:,\,ܿ~!wC)eɲ\>l?Xȑ~8O?Ϻ^Θ1t9` S As"j*5wp ?7*!;Nkk_͟\]|ݟ={ozyw8qn(:(9C /I!N[x 98< ` [[8[omoo2IKo9~x4��ƍʹZ<g(&^ /曇f+Gg:t>2nܸÇ.%q z|Y9W ܔp83g?~/nqر-cǎ1\-?~e _VU`SB;.9P*=OݞQ;-I�PjL[Vvbae 8?SfP*eS2Ru沑#9bNjesg(] Wܮw yu^CH0ze AH(Bh*.�$&XE qWA2FF�BSu~>úrFL1#`%c75ıcdžSqG^!C>1cto9rv<y[JM74~Rl9s棏>ݶtMs~^SN}'m8rR>L2e�g )k^۽_u/kX,yɪ1�D�|Ӧ =4VRqdBsK Iģ IKR*L&��B.<DAޮTbQFCzˉ\м*lu %/[3NشIT2�Bef*ԪUYK�'ԕ܄dgIKs<]"N81j˼{G閛J-n�~}.Fvm[� v켖RwgJo߬.s:R-v믿~衇.o%d ƛ4iȑ/3Gyo?g<Ӄ=Z)A&X6*%To'e:WLn G䚮\#"�D�J]'ba*iHIB-AQ>R-]ФXNG`1"P+$EolB70iR@|JmtFhVV43հOKdI4Y)Y��d  qb#�AnϪ,=U^q{U\}i%\fƎ;N:xp? tm}m ؉+|Iwosb07A6Z%�UEPCQJ*JLz+3(?0\0&j'ôh"bP�ZV<5 \O k-v\;hE�3ڭn@4 6:�c*5tsթ7:/bn]V*ÖAklI~:ᔒ'Ndsm2^?~CCo<<y$(ɚ~" zɣ dHο=nŔ[�;>fz U4b(hф—|&ÐGZI`_1t$�� BJFD�DUg UԴXB�Q) @�@U�ȕ%AOFj*\q|ܔp8kʟӇZ?]_;y#(ϊKnz9t\ס*�Xs( !$ @q%#dvgf#RC1_f}(3k[L0EÜ+ 933/ASv',`X${Xf[O{esUPg=UJ� ok]Y%4B9Yl5)1a_p8`7fie0ꞻo/r+1HIHFIJ_z2~U`@[8R5� `0JO(ݒtK픶QE��HT$ c���˪^o +ܙҲgLB@%:]<`V*nKDM+� 4Au:N$J8w4@UN+CFDtR/p8ns8ε`7JG~%� akqRzjӫ-'TܙtOA|xd\)gP:�L OL V�d[51FHM � -Wb\qz0B�QQZԍgD!<)#4)%`yBk!1+1S�H<%Y|Xy4ָX%5)7RhU̴tE+t/s/n -D1&Y+evR*9 TDttt wqp8εȈUسgԩ_9wn[y@kVU]TÊA+d$i 78gD?0aB1={Nts̙W^y婧mvw 6`˛S2oW_5wV\6rlS2W_{uR5`syx_^YWb2J335pQӕU7EJDq8rSNZpJ*rC KźґX3;mp8ɓ'G]j) ܔ.`%ѳ 'IRpSNqSpY{+pӧO_wuVp8Myù9s 79eM/k䟯aS"* ̅R; �^X+1m �^JL䄙Vu RAF#J+E-�^h4[ݳ-n#dpM*1Bb#ނ1Wi^d1H%i=3pE\FDB%ĝ-8c2bf�dGNG79[VjRL99sQp<\ )??z?~㾛t 7T0+Fg!Wikk[b2=Vjs0rrەnՔ ߲#gs'<u J7(@!DY{`=&j͜1ĴX;cmvC&vj4ڬ�go auhJҹ֚x9( yyΕ3gxRyùf�S?Oņ.K T[H+Vi%+͹cR2"oM@r\N Fb"Ǔ3smuêTܒ u+c>S]uBSg'J+2^DZ%6�@h͖R>�@`ƥg&;{&Ub? "VbC_3<8s̷~[j) Cd ><\,!K(cJgNbL096ks!"D3YuAu( EV2 D��@S0"((WbңkX]魂h>hZ~qSkv;-聁z+ғTw[wZv`�O[55vdUb�yI4vAgIp̙3()p8и;~Q+"032@ 5JL ЖSe7ʦ<U.tP#1J/gf=f� >L;`? ۣMO0�` ,��?8 DM�UL�n�(D,Ru\MSyg`={s2$?�?aD�q\Dbs]kkk3( {ga HL!ۢzu)BO";!:%K$Fl ͮMh&BHC�(d!Ƹ/e ̅$NФ]Z|~yѫŹ0fqx^緺) �To>+rmINQFs85P_ Za['EPfz.zc"|!{>fnP]ЗUP2iXGQjuT}F閤X$Q<,.*r@YQf֕j6uϙ釼7RŹP|?r1!/A@]3 `1^. (" �(zË��S��FxjYB`79o=}tUp84 )k}V 7RQRKbv.%!r*kRR;仢1<QО P|DЧYN7ltI?+FXGDAZ%Tzx3SduE\^V$zѬfo.+OR=?;OV^!ndDJtnEjRJJ:_"bMZ05SU)m- *"ƈ�yX%%q88{#Jp8aٳg{ٳg^MVUUZEesg(}Iu%LWDʎsYr-ˏ?x„ ee} {:u%qY:?_}ӧǎ;d#6~ﺽR g>SjoW_5wV\6zB.Ivk ^Wx�>R2R\Y1JDq8+ WWϯ7VVVv 7D pJي:!su\DԓHNmgKpJMÙp|CQGy:m,/6v��|Nzm[MoJN�cZv�8mZvr�;+V ɩH@DZhR8њH^\�8Zk$`EB-eMK^!o>_vc";TaP~̪7pXQk8?x OYOoJ44ެgғSBI勹X?1ƴa��4hOr-k}uLk4JN[1Q��(^4 IG,:vLhE?&N�cx/E¾Fǿ&utIŏYn �_=N77M#&&VBclh4\>-zZ�p(B3Rfz}R:(۬?;(&߁^a>ҾuɆuADE+r?ʿEZx;yޥءCy1`͋iM$ ANh>\APC䬕'yxG@3wOnjd!{( T"C!5c&.u\^TpZLr̹<2NC }v"Ƭe5Y99�dw5'S寫/NsқeͤCeI9fh}K* O0v$٦4nJN8lt9kg!͛c�\ryR؋st9Rێs!anZ" s fwV9@484];wwfy&s"@O9Ʀ<sO/3+AŜl �5k7&҆^˜gDgin8;2$!ͩͻuk:?қ]En֝Spkjt̊Oo15=ݼs`_4=w;;fy&c"�_iW?Mw$M@vuI.>3k~r{鵃a79&BJ2c/^��ˆ$͔"8 )y:v)cഛBKKXap6Te,|eQ_<x# ^b��ͨg<X[TnnT[`wc: �P:}sv r@S_=חV8E7̚/+O~H;{NR1hFҘW˖_LgUX<i~6kY95ikj��nfs ;ǒ2NYlH|zzwaΔ?ëXΙhr"=m899��"BCrc$4vDEvWᱮӐh)-zbg {ޘui�i=sn?LD뇴hzv(Ez]@ y~_+T+1ɺM^X+15�P;QCHH - �HĤJNA�4+Wr)SXs<R `\1#rK G&$IM*hV}2Sa\)Hĸ9纍|canh%E�I%FHLԲ~�AF#J+E- E-߽ٚ-wuf(hH1:|Ҙn |qZ3w5� !4㘨VKV)QCS%u.��0^cĸEzWb< 7Ӡyes <]\?+D�Cؙ> G�!0�j8n&V"&3PÊ�@[47;vbc~t�hƲY$�N eN΅ԢhGyn2[ZLav3Zfn3-"HcQ95+n<¬Nsc{tbaG՛,.gq&i9cκc%]QŜlsvE5-VWB}JEӸ6%i3r|P(QEnz�q^uğy|{Om?̚ _d}{lqҥ3k~E}!ݠxui'BHԒ= lGۼTJZ!��RVFJ-U&QڒU1X; u e/d/R 6I6DF/�kw)rfcPn#>n`o%#KyJ[ a3NrەI 2P�� �IDAT�@Kw*FCzˉ #> /k&bf<�f%Ӑۨl78�V'"5iiMKv4*w%l;1k^*mdj$D}qadB*pP�lÿ-mYe( uQ6[fwpZOo Ч0ֱY|g䘘+7o?Tb"F�͛5kki;}}K:EZT5.rn\GdIJx^|ULSץ;Wiuՙm+WnD�Nmn>��Qf3#_d c_�3=>,^s.社-X_kY.51}��ݽM?W@s2zϴHI7S'zc!,˵ڵNs]Լk;1:s_sM|FHSay;7b:s. ��;/{-n v߼Ë^n~w}GjxC*4 ӆE\ |#Z#�uA %ރ\ӕkD�VϴB$!V*/KgXߕEV$ub� %dOVT%)m鉍&Y8(D�PnwEIn  "՗j%"ZޡuY.<:@eSI*>Q`^f D+8TXB4 񲓔S(Jp3 P3"@RXKd%L!310^FK�ԲX}U"7{A � HJu"٭?/UF0T"kq"!a25tPjz-hw}^3jsw7YqEg �Ź�i [y+�Iӎf%lu9Q`gc'wԂ4"n>^-y*椦=޼؀e˓?Jx>t N:'2�2u<f� 9U?�YH3a\vuŊ'JSVgylZEO!(+�JuJtEnQk�K<:*ʟξXhQߠ?5+B&+"%?#7!@xl~G܇|r>6'>_,J6<@9@k3/2=}/҆w(bO�pêN�@nDt FV*=B!WTBX,L0{PUPA$] "ZOF+ 7�Rdb\�H^*@{a4ܗFtuA%�@dftG{Pg 9e:]0-@h1EḐ۔>"hZ*jSC_2-"�,`# &7�0PVy&%SnW�fFyrڎqAJ:/t%%Ln3MKUPqJ G_ɓgG_$ {Xnu5E=ZPX+k;\}R{5cSqM]ƦH}\+�paIhQsf\$x݂gΜ+7%sq+6�0}{]>dznQʧ?勜ES}R<|瘞4=g"' ?Eݞr�@[inϽX�m<f|yyMJz{Ki鮞#]_g2 4#R]Q-㱂j8r==v*#(_ vwK1cR)4ZVrcDR %Cŵcb_=Dd!33LI�1SÕ eC푗$ގ<*{d2&^<yT�c`ae>SkMϻ=9`C�$ N.e~p8A.صvďn@8n6Jw9%g,c?2Ia,9#*d!;00ʅ0 ȋ#*e*4nK#ٻ&<o?.c" `�2P$4 YDH&"=ҳg"z.}ރ<{:r;Qt7J (t `)^"kcl0`l9>'U꫗2?]{Ky$l11J*BD*qz;W9a!c)҃PAvIxl7 ѱdU8F=( wDrHz @u{Lzo:7M^ybXC[}<+ruuu��RíIYDig^|-#X߲(rH0$O&}[Ci~xN d" %E :]!nALIܘejd# I$wtFθŠu z3ѩhPxc1!(}W�=tF6Ζ;0n`o8A[b  cWc_4 DjėpDE+DD$B?pZ}b "wE�aWd7$1Te[O3Dk';ʒ!Z[[N��ڈu)4NDU5iTV fN/6;_S4ߘj-Ra bͬ L>ikzmi xֿt"Ftnʯ^XeOY2#^Ω7-9d xF!C +ʯn_5m2IrsØc[JEr`.jӏ?ы�*uW`tqM b͛mF/,!o8y e׽jpsy *+"J[]V*7YfS_}&++Q_*Ddnb\+5�QT46Chk 5\aO CBRRRrr)��@^]^^^\<c@zkD&,hh@"AIRۭqcr|.t{ˋrʼy/'ΘX˝Ŷ-^^)LKKg>[|UU':͙3G f g>2$ًϿtߝ1_&Jb}U|Ǿ4ÿpK$4N٩u ��F<` ,όe63UX`HJJU��PC<^-{o0$''1B��/F ��鰂 �R(nIW`z%"c7K DR~G""[3x/2X!$a=og^I 8/2B!G)Ǎt]t}/N{,5~xF$X'4 <_$ ̈vLz0h+o<1[d9Rgq9S Fv<oEь..~ŧx0RDD[Lg^bQXm(^SqUGuwYEw{GC'`pINNXy�a+|녣_7-U>XݸҐx̧KDICO%M-"U!K{ʘ7Mkrٷ:#I8EV#e)$_zlH[MsJCN;B m1^uۼg#@DĚr"'䋲|Q"",[$[|+$XPb \\F [DW({eGn\mdi/)<Ћ,X:h!999k��RێfzM/sm $*>j=ɲJA_79"θZVsF~ow6+\/Pm~k\%"*Xd`ћD[7QȷIy'ݱ[A9Y+O1%NE͂W޻6aSF0Cdz`T]>Wҩ?ܳ~Kwnc]v~W7u]]E{;<Yܱ.kN{ڈ=Kh_l ?ÊP͖q蛓a&T&? K+�0źonF4*xrwJWyVvJWDVeX""cۯH,ɽ tB+[uvJR0(U+'~x6z}қ7},vߚ89$uu[σ9KG6�3FzQƻTu{w+ǭ! x=Doh)[#5ܲy )5Y὜)LD~μ+g߹U+Ahf S:|lڼ0nX}` O52&E̜pۦcw<J/򅉈qf &55Q��X`Q6 {ZKs+Qb\U=&+EыWTx'}h  %"q޺5D9}4Mw)nU]ߘXd8WzkP Z<yom%"VU'w徖i<5͘JDW(Z y"&WꅼI,MKD/Շ.yKCIN8"Jv*?n%p::]O|M!:C2D4rUi'µ@XJJJ[[)��@jռQ%З gJg$!F+XqX1*ѮxEV7ȒC CJ]y^ Iߨ x~ōDAR/Jk4Te=JNc%ڽ,K s5V>` {C2'<"+gܼZg~[B^K<*0I>Nj`i7O/›XҺPfO[y GnUٙbĈ?��B̧+?}y?|Q%7FeQ~ `4H^L$MW?(  D J1FtFG߸io3vs޾GH7 !)DkPX"DAq#TR^?Di :RWyǾhIݙXϯCnz{p ZT+è<A9k#j;U$M1R}Jԟ sZ߯:5ޞG~':rZ'倂g7)))iiiX�`xb-/Qw5,(iOo^Lܯ x)sY""o-Ra bͬ L>ikzmi xk\F?zbsovc3 g)X],E<&`|춡1h@7YqFn(g߶oNOoUuV__nϛzK=Vg?M{e>(y=KzIף ;Sz]3YRw vW;n㊽owjv=θi`pD"jg)��$0]W.///.1 h=3(艧%r_KEEEQQрDJLKj6~p-B%bN�}:}t~~~ZZ_?!d'eΝ{GyrgL:гm˶׽uٮϖ^uSuӜ9s2`v}pv#c䏏>g/>bR}wz+Mw@&}i>�edd&R��1/!NV߽5lkx?VC�bafS��L)5m r_ ,quS��b?��biȑ�L<��*333kb9)zw;6<# m[@|YK(qZpg{{{3HO.:th@i""j]K &��̺:S Yf͚5K9w… 2,8/=[?[ rEEҥK+=fԣV o]'jW=kӋLQ��0!6��@ x)`\F08ժťQړO K�FuUS��@zky5#Ok1>�04vئ&S��@e'qP�ʺt)�� bMj\=6!QY1>�04f̘'Oj"D"۷woijjjnnrJŋggg7<8 o۶V=jnnvZo c7Wĺ`jږcr{]Ob|8�(;;1'''{kNdɒ-ϟx?޽1###;wʕ+=M:tx}*++xb=ޱ*N]IX\f8k<g`_�`7nܥK8=&iԨQ9rdfffFrzxYF%+++_߁.{[|��Mnnnmm-JD"ZڊYgggbĸ+�@"oNP"]RQWF"%%%Ηŋ)))]kSSSmmm3f,\R� <#:-55U,c„ e&55G#!+<f̘xYoCCC8\oB)� ɓ'k$At-HG# -wǏ<y2֫I=^#F'iu� ϝ;u # <�@?~|]]]GGANr 6+ ׼Id:.%%�H'OF|D"p8u H.\xGN1D<�@8qbee)�K.=cZ�xp(�ǘ1cpCCA�4\0�� FIaD"IԩSN؟P�$ɓ'WVV&PD"6S =ēW{E)�hOk`P;qDII)�Jy�D3} S� ^<A�Jy�4k֬'Nh"`|bD"~ ��0L>= a`X_?Z8Xy��fϞ}aS� .'O9rd^^A�Jy�TPPֆ5444Ȳ<g� �� K߿_CӍ1BZ[[ٳd@\a<�� UYYY<?~\ "k޽{WZu 7�!lƌΝzA�/^ AA)�,Yw^S�hO>0A�Jy�ۧu!o̘1Zeʕ=Z";;{Z!��/???##ɓZRSS33SvO: իWm۶vdfF1jԨۚ$(C)�0,̞=ҥK/_:PLj#5G>s5ӟ[VA41u���EܹsG:᷊LNjyQ}nPVK&bNXlbZf׭S4y71nU<ftqKaH.'5|Ē K~m8~'G eZfqH V%$&9vJ\dgeAd2<VntB9 PP;Va. 0,m(�gyf۶mK,ppS XE+ţ\dyEdŕKZrwb�� �IDAT^zr&UMNiV>|ٯ^d0zA0!dzMj =^3>p!ioO*6]d}7d5Fw2z&lRdq{̬4[ �^VZ_hd!E$l6[= ʲ qܼ01Uo@{Ue)貘Lja&d+Ck/H}3fOtrCƔ, sDm"!cZm`y. qD a Xj3a+�0L>`͚5))WycH$JsM*:$"LF&G2',nȨ$y|2Z|߿?)):3._V [G~5d CE&P.:f �^xf ⶚,2ld1Ę7EZ^vyc{(Jv9q6+YfvSx8{cJJJ&LulfPeIܶ!?כDVye  =^b`"ȝ3�N�}:}t~~~_+L?!d'}>Gu#==] p<0R -##C ��TrrhO\uAtpsݻwO>u<Eb(�k:tٳZg+++N$'|jW8qB1��3<30nZ[[N1utt8p}ٲe <dP{{k״NC��ZpaggЧ?<??_E�Q(�h̙ƍ/2xE"$'O~Db ,SE%T � Fk.uҥK999Z.Μ9sر{. 2H$NC(�c.^xSN%3H$IRrrc=VQQ /^uwcǎ=zX�/(�6+WEiG{$={VŮ'Oɉ˗/=z455u…ZP�@/Ν{(;V8ill${ODӦM çN:uFS}}}UUUcccIIp~��@L&S0,//:f._ITfzQ�%��`JIIYl}=u/}]=###yOGGGsss8aFDh"b<��CqqqII^]]uxξz튢,<$Zķedd`/}C)��c4/]gϞVq$hpqܞdd4fW(Mfd)!SHr^U?~G"O^zj?t&d$Nl ��k}ӧMu8EqYYY (r+Vjmp :]dyEd91݌S(d=kƽy|h!Uzۤ^d ]H{KKKK[[[sss#F1"b<��܇5k>|/0 Z'9NO8qeҤIV;ɲ*pDĉfN8'"Հ,X 9T5㋬k]Η_&RXK 'Da-D3;\p8woiiiQG}?m4AHJy��os̹|/((&LΝ;7o< RG^Y%A>H匔:e|cgq)s}$&."IDDJcdx"%%e[dYXtVb c�A;vժUp|qA%̗򱠷a2-n97= /iwGzbC2 hl&dqծ{+~d6[}ED&)))--M1ua�10x'>}:???yrCeffΝ;7+ݚs-\P ]GGG[[[$IMMM ~��e˖quP(ueɼ#G)WsC)��^Um۶%d[___UUtQ :ׯ_?r+++ӓ@MMMǎKMM=tYb<�� ^/b(UUΟ?ܸqHZ',.^m+V>}zp8{'|r#GN(�` effXPP{߾}]cmz,˗.]6*++o~I&=쳂 $%Ad޽]ӛΟ?mXY��///h4N:C9pɓD"ju{:6>x]xbQӑ#GƏ?j(N`}uvvjm�X)**[hAȲD&MDD:.Z1?|J対j޽#G4s:@/뛚D"p8ھhѢ4KD�@ t9spȑ'O7NPرcwO8ӊ,TZUUUYY9nܸS?^D�P^^}ӧO_|yرO#(� 222x`08jԨiӦegg&766fggt?ȑ#G}u'N$2uuu'Oя~0$Յb=))an]tlԩ%K4J7P�@3駟>Y9sffff,O:uF6mZ0a©STU^($p8\YYYUU^XXOh>DDuvvv_MP(tڵR��*/////ٳ~ܸq3g<x`FF?۶m(mmmw/d/\I�._\UUUSS3eʔŋ'Lӧl0z'<��h`ĉ'N,Xн;//q޽(j9?''ŋCVHd ,:i{ɢD5��I&߿ĉ=A8qDsssrrѣ<QnxIL2w܄ ի,G}PR��4ԔXQF]~?|$p€gxbzzzk\|ի[Ο?Ό=:vcpUUUUUUJJ A+8q.^c["HN?qR��4ёߣs=SIkk'~R8p`u:[+*Z"IңvoWL0yܹw߬徆^t):fɥ }GExKt 'i:$y,gOkWY(SQ�fx?|󻷟;w.558z(EQ\r掎"9rdJJ#9{r^̙3k{n6bĈ[._|[[[uuuMMMRRɓ �%xpnjN⹋K?.Jy��?W_UVV<]ĉgΜy+**>裩S_p… iiiƍKMMTUMǡSNe .TWWM4��P�Ɩ,Yr^r%??ŊDTTTTTTݻwϘ1gUU=0mڴ>R,N4iѢEXC)��ڛ?E1n~…UUU|Sr31 3nܸ &D[Ξ={…˗/O4i&B)��E_0" /5& P(D"HjjѣnjSN=uTVV֙3g})S90�h<�� v l߾$:f8麛˯\2~)StsD"W7�a<�� vyyyO2e CUGLM=Ξ=k׮'Z]]=iҤٳg,�0L$i���.\{KQQ /駟F"ѣg̘1s̶ݻwggg'Oj�4R��}h/**2LD3Y'477O0>+++333zK�VP� B[[,wޤ'>˷n &LvٳgWTT~]`^���0d,].ipI9G?E1??d)SΜ9j=� (�`(YzѣG+**[ǏAXzuqqqFFFڵks̹.O=ԕ+W�4R��e˖ɲ_&lӧ?h߱cGRw0aBNNN (�`Yt$I~iffftIu|WZZ<�08�!yϜ9 TU:Nٳg̙yyyZAl��`+((Xt)0Z;w<:�z@<�� D<X]]SOj�>K� >*++�po.\~zaau봎�T|qqqs���@ٳg%կ�a ��3q{L�0a+����R����`H���rn)\zk--ZͿemQ[[km?s'DDi«u\V~B*i3l$S:'w_ӭW3ǷW"5q/ˌl10mme!U6l}R+jշߪC4SM3}nP�^=҇eDj-o?M̢7|]FD??:n[բ}LFܕm 7w })eTD^ N뫜_䠞ge6y zugrW:?l RéwxO?4=H=v|-Zkk)R��SˢKOU&׾^QW:~;~}s{Fx%3vm)\5CRjE6ע_� 9Ubzni>/z1֛jn̟[_w5_r_*hZC)��ÝThܾR%V4"([2[S N5\3<ݤw`z^Z4wC�68{{->؛16N9<ݷWCl/W~7� ߇>гJN7F2!Ce?m趙z]o23P-zkin"c{S*zʵ+��cܼ9ŷj6OS]Nkt2l oM%:tk 55w}檲?ļW:qgU*֪2r-{$mU|#ii*M%%Va(`u}D"Zg��H`vOYusLZxܹZ?n:ŀx%E|{�`0@��CHl� 7��^����$�����CJy����! <����R����`HB)����0$����P���� I(����$�����CJy����! <����R����`HB)����0$=T)r:STCǺ[|HN` ޾t[Ey _ߦۨj <����pwg&AW1Y"" ue2n_3J^Q0!$^M\]1Lg >����<�Q <2^d0Ԡ,Dh0~V^،+rb1F?PHX zĚD${A/MgG{.g ]&Hٍ(3mb2 6BV [Dr^VYopJzo|fQIvj6l>U L7BVLpXGeF}# ����@=Xyb$K6ZN`ŭw>c XD CA xÐ$ v6eN^\�,)2_ ,u@/z~סWjy%TQ߭a9H٭~'euRC$:n8}4 Gzf%3 #I=pYVMN z3H]6O}1����`y6DbQͮs#06""9I%""$bpc q8S㹐,:ꪖ!`3DDN 1 DzQrY@KkDĈ#gscvdY1ҿ$?: ����CDnϚ62ĈNح4 1̭߻ bըX%koH8O2z=W &Ԑ?8"Tgzz+onp񄜖2Y]����/PopzGpMyȒ;WYax#" dp9A ?HF=I~_H>6oZ>gH y&;9.ABH BgH+(SLV"bYU"JCK ',xjЭǟ$��pOmj۶-b}p89bĈX[�h(pvvvvtt@D4dv@ę,2Z/-VPƨ*#:<pvѢy^0[Dћ7vdx=s{76o(XU"bf2pamBr2,<x""FYV/p+p=X9n6o3vYDA��=1u/@555Ν[pa^ZR"rEEҥKp,M"ȝO3X(AD%c4x! ߀?Jy!'KO8 x,b12zu<���� >({Ou ����xu����@ ��E$ٽ{wk׮555to?Q �_v =gϞ#7W��ݬYZWWWWWcZszzz|C8m\?ȟoB)�� NӽG#� *=>m1V��_RRRN�U^y��^D"ÇwoQU… }]ƢF>8Cz4fee7W��]#Gјgh}}}vvvƔ)��� N7u>h"͙H0=N qVyb } ���q(Z�jkkKu'{R��F-˲)�_"HjjAb<��@?V�/,i"+_^^���ȑ#3fY�~yi",{\� *�\}}==Z 6���a/^ ZsăR��L:� fׯ_eyJy��STTT]]ѡu�KJJN(��ٳ[S�@/_>aJy��|KK ֘8`0N'(��O<N� SN9rA<��HMM}i�nxիWMuA)��4>��KIDAT{1e+++�%KW(��̙3eY>A�O?tҥZ7���eŕZ۷xbao)qȀ �WKoD>2~^o3fL!۟|QFi`ٽ{wqq#03z4u⫯|<5j}�1r]vj`ٹsܹsǎum$T)ODtP <n3uf2IUBEQXmhh(**JNN.//?|qqq07oNS>338Ft:NKJAwYRRqY�;vu N|eZc&kG`g}q�u<@\Dм|w-..nnnw߽/~ј1cbW <L(:{A�\GGG}p\ӠϙZX9>@3�⯦&zM7u׿s<� wϙ3G,�ȑ#+WLKK:A|NYT}RHaY�1w@|Ν;r?\ � ( }Fu< R~wE&h3a+@̭^Z�ڴifϞuֺ:�$CSOidHR~m|I���hر>lyyѣG0}ǏZgD'"Vг�`PHJJzꩧRSSwqu� U`{Ǵ2 i S^�`)**?~rrrfΜuDCbPMA/߼)G˿O٣0" ��`,SO%%%y .h`hoo߿(zꩧA: 5z/sp@3m-,Q��0̘1cҤI?>L ЗSN;vl޼y'N:ˠ6JРP-;�$ѣGk`HJOO_d?駟O6MD�K}}sssy SŢ"S���[~~~~~#G>;VD�¡CEYpavvY)��ٳgO4ȑ##F()):f***Ξ=;eʔyie(^g.CO ump ŽBtI[p+ NϻHЗ;Le2fK>1 ��%;;[|С6[UUں|)ShgѼ8gϾ~*iAtt2n qw l=ZCVi�M0aժU<ȶmێ=DN555۶m_r^OJҼ.zxgu5ևcX%bY6�}`HEChGxNX.kقP${$F~/2Z"O!"54HoaYa/utjm(6 xas^=,5!z "o_l擉BÍx帪uѰ'yR ��bi=\jj �PmmΝ;QC㽶߮s`_k<O{i?j7MH7M[Hy+%/~|!lJɋ|aڋ5ye?7|ڂ #Û<ޙHȦϼwc5:mveꉫ\D^]Vu/a"Hg{,| D3%tF"'6/x潆Hs+^7>{eچ='qJUU�=zS0._{ݻwk% iGҖADd`d@ DXasE!)R D\{6y[L$ &#KMz7Q0I D$p,�!h֬YEEEǏ/'MTPPu"PUUu\$ARʷuŬ%:1DaaoxkC  ]8R0wR6l |cbg)puHO ��$gpZ9stvv555v B\26vߐ\bsop8\{?g=SRRHr\p�ڏ'~q9ieYfh͋+9V~)T?:aTEex%R^aq+$" oeYVoÐ�or9rdgggcc#559)Bt;N7I9Z%LVfgwwok1O/=}gRīD`s~$U=7wbMMR#2jtaw5ٍ52|^fͥ!afr&`4 n@DdX~nv|>��^ntB9 PP;6.Pfq:;;" zxLf[}Vf.9FO$y,61/i. 0,mc-krqѡrY:dRR8)M f1d+3i - 7-t |Vyopq(*_~/~vO?yA^!Qk\|{3o_DZ>~/^|?nDٲK3g6W4lYz+%DlXH$iزz{GzfH˙3-Z?6lZaOK$ҲgÒMGl(yeOK$rȦ%hDZv[-.t$ixeH$rdS[~;\;i+^���qݘ.%I*gH+iD(QIm"+/pD,I~L*10Y.:e98dN",KA&RH1\a^{gC:]k+VV#".t%Ky���'g$I!]>HDdf$))I_iWd_X)$xdR$XY^ 3`ƌX#IVI )DnL)dYVf',nȴ\<sHgg E/9߷rH2}j=~/R��`vl6y en 71V-īM)9$GF.H[V%fw0lv z.R9KOeVdM&_HoF6o"-i?KLJrkZZnXVUx!Z 1(*XEz:tyyyqqJ g:)rtU~~~Zտ?} mmmpʕ�DRSSGu ��� "999===56[PTw7tB(E@ihXb@jCaG_d)'U68(ւ1T֠#1#h7@r[}hC;p-_d2FcLl<icttΝ;Fl6\-~??wtHV/)(3�c0,Krr`uؘ֡{ᱱ1I@_Y?w,~D/+4�0Y,r…@ eYvZ Br}$B1B B|${*��7gΜ9s ݻw˲,rRRֹ]]]@ >>^Jgh_k˚^8^xʚ%)o"r�0MXVdzx@ _Ȳu.Ģ7oߟWQQ1{lbʗotw^|Yj-)-8oת �`4/]N:XDk׮ɲ\WWu"<ALTy!0,_h}p}azog7LT.��쑑@ 駟ʲ<w\ͦu.h#ϛfY_~eii^]oN7Ǖl_R�dIIIn˥u.L+Wtvv^pv/Y$99YDx6Wzx X^�p8# vvvnYSSS΅ɢjgggggdr\^WDxNWYovF ]�gf=Ogggkkktߒ<sa".EQnwee%_N*?No^Kj��2 {aK/.+%EB[===Ν3 nhc:U�?qht\C\x6W^Nx<nnfS��,...ࠢ('Ot\.c\$Q+\DTy��dɓBh7 vo߾sd#{dz ]]]ϟjZ Ty��Fct%}ݻw\yйs***xÇ"H|,*]֮{SU===III .ɹp8ؔf昞!��`Rl6xE9};wNX|_,EBbD9|GGGx-Z$IR0lmm5 g9]xQQ^{g<��x~Nt^~]QtDž)N8 8p`krl6[mm޽{322v|W MP�JII))))))NJJJ?ϛ7OÐ:uez_XB:3U��LP(D o~)3WUucUUp0~jX,*��&$I'O|饗_×/_rJ0TU5  r}&ɧF(jjjRU5!!h4vݞ$I~qqLJFTEF�ɒQ^^ Gt @ ?D,((BUUUUݻo')T]]m6FƍW^ ===---n[ev%EQn޼D?//O @̠�e0`}}}(ReϞ=oh]m....>>~|N=999999/^666F"y9Ϊ`0ܼbŊ񏥵l6ku Ty��0z{{,b)--]`Ν;Z[[].ؙGQ[n[ l6[eeCFGGpvvvYYi ��`r{1L&\QD5w\ Cj( *(JnnSRR-iii`ptt499911Q)Ty��0Be=XVV}ϟ?`` p:6MSitt[Qt:Kn;Q�$ ?ԩS-?DEikkSU5MyҩjkkzVuWCCC7od~<%<��DEEE?{ѣjdYeڵk|0TSU5''W_}WS :v��@W_} =8?{Y445Fcnn}>_UUbH)<��oD/hC��1LoG}422u-=zn?WX+��d6}]gʢ9zzzΞ=[XX|<U��h̙3;v쨨HKK:ΤqիW%KjD��1oiooxq&۷>zӵ�R\\\\\qA&$IuoS��Ĝb~z_U���%<���K,��kذ}X"ZqKCufzoOV!B5[v3|H8|9-V!~U"<4jHwߡy }3ܢԢ-o>:!BGV-ܐ߷zX0P�}!# j{OJ>Ef6yßk>NЙuK>+56mR}ۖ !BG-{f]oh\S\!D>J,gb<:ܗ)gMՇ*��'tHʍw%oVo>E:5<]ݰ@_ Y~%Tt!V :ulRX 6żܖEu44) <*��tHzgI9UzK!ai>YбkfW෾iW#څk{OYjV5!W<��Jj2wECmRl,yڶ7.> [߼_dl5}kͼgɓǤG0ᘕ��:Ue +kC%YEoK־3gk~\ Ie%~Z#^Ym&#LBHYoxz~_$MbPU ,xk�f|5g|b�˽ Zz���@���.Q���]���D���t*���U���%<���KTy���@���.Q���]���D���t*���U���%<���KTy���@���.Q���]���D���t*���R���udSL0LbP�@Vx^S�o���.Q���]���D���t*���U���%<���KTy���@���.Q���]���D���t*���U���%<���KTy���@���.Q���]���D���t*���U���%<���KTy���@���.Q���]���u��n:::���0,Xu�L���@���.Q���]g����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/flow.png��������������������������������������������������������0000664�0000000�0000000�00000010757�14332737457�0021061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������~��IDATx{two$iBFũkD”悺iJk,kUg SUִ3=SZ=׸".IQEQ $Swr~w󟝵~~/dZ(ec(Ǥ))))))HzLoY@/u:#9[f;f!7:<~fm}h5 =S"4<%BS"4<%BS"4<%BS"4<%BS"4<%BS"4<%Bëk_5;U-HëS,3֜Dz){w&tmO+Ƽ4(d|FkOX?_z"$gAh]t~Bz*srW WDZ}@ҀG| chG*cNg-' VgJOfJzīG^rswpf@ no>.{ ќkąvM]{' Ù O O O O Op_=Oօ,n qM7 @օlrK~\Qzs* Y6gnmѳY/fdһBý:e $̜~sؽ};α`fmڏ+Oq}.P125r*SxM NNά/#l;^Aһ本VUz[Xzp)V #UICD̋\/Xz$rgo'j~AISϾMǹ!#!Jd3v"3/KӲaK_k�i&r.0rX /(x{2&JtX1tgȲ!TX㍺vޥKD͏1{Kt_}˼H) 'HcvKs8)ShٰHoOօ,flASHTX+qNӜ~\%=Nů2 kҁ$Q+;MI҃K[r86o<rrj4uCz®S˫^ebߥǩ+eW"xymHMxfȲ! ʸ8$=CɽK;SR^¾WȻH].~!icpwqȺE;_ǟݯ6rPM~9%B}O<2nhDsG&s8~>᝿zQ:&Gz4BҐ$ҳbVL�8+eW]Ibw@r0ՇW39e8)S,V Id|w'rI>!O?4KPL^¿H=JҐ$f>Ǚ~^\Azone֙3GQZ^j=[3NeHScZNIܟ5c>9H#R%:љ˹O4L^Tz/MlX_i=9E9 Ճv7b22"Іxy#Bf^&_F\/W2r ȾMh4jFw6~mX;|-fP ,VHUf J j!uLC'z` H=J¿A]NfFE}ɹÎw8ܻ#U' Noԧ)Ӟ&=R 5cuz#}55r*.bztZ4h6#Gz >Ԧe184#=i|Sy7"-;MzJ6 k/Ԅ)ީY%BS"4<%BS"4<%BS"4<%BS"4<%BS"4<%BS"4<%BS" B3EgnweWo<;PzLùsYS7ülQ"FuߟSR1 '@W]\(r1bڑmFvߟO$=! k=g_x]z{2Lx�;.77^bhS:;9kFEؓw&ux50:vI ==*<j{ܹb oTQOУ]U o=_<$y7Fͭ}e3kt=s%1y^ۭUwocUV' k7`eûxcվ޸_KѾj]Ӧ 1 b:Uz]|u@Yi>ÃW#M/m[љd[v!n! O O O O Oü"v%}Q\ _tpWZȮX3gb#&:_~x v/Х[gofWggezc%kOC>CAyX@9к]S4#] &qn>ўO7=?yL1+<?]. 9{549X83/Pߦ#@ddߧ'ab6r>c^&p ^1gh"=dzPB zlB3w1prɜ]m3|cs~ݒwyq0טpyE\.#is60湊4 NW?STKefZO`ۜlqISN>_@w63k1tBHwo ه?IE9L?$P^lgpe#ݍyPc O O O O OHJI 6n~lm-чo׫C=«} mJuvߖGR}#?ќ-W޶};``@>(QK@zDhxJDhxJDhxJDhxJDhxJDhxJDhxJDhxJDhxJDhxJDhxJasIzSfa7vžz2g]'=iLX?+ylSzY .VݧwKcxn4ӷMJ I�%tוϲw^BHdH Xգv /J @NQs©Zo_`3rb 1 bf݈u87<2&’BGsHd�m۲:niƯ k@,j`O=?'<Iʘ<\=GS# ^\[f8 -[LyaookGva6SR\/fHds%%DϏ峤NzMGS0dwiV a #LKCl'äG1Ӆɹ+v<ѻyolblȂ լ8Gz!m/i1qe lʘ:<}yϸ={KHu2 3//#iR ^مHwgiѠ;vnAL .09KP^Q.=C3qe"<F!=CMxp}yV,Z[_%=Nܺ@2&Ŵ ĕ1:ރL6yo{<bfb7 ĕfھ  =] K kqe_qmy遥~Ig ,SO7rܹ1k#Kjs-mDEi\1^ZƱ n2v\`.)/bo")SxpsqRa!&$Ʈ+cWj陋w#z6y[tp/Rnv kZr‹[Gҁ. /r.{ֽ_L?0Omd`aoa6I]{9$OйCw<H}➷y#G]DŽ.mWn)kYrp=V7Znn6!}|n)9�z.vk-l.%y,c;>ZA+VLʨwrq:LJrqqSg98`xtHUM7 O O O O Op>*=XǏC m)=)J wŴt֚P|Z̢|LIxUfgBh2?[2YXÑBJg.zīKp맲x?p0Xz2 W1 a]^GEë;Νbih#=蓋*sC :s2|4r2OA'}VE;nNc =S"4<%BS"4<%BS"4<%BS"4<%BS"4<%BS"4<%BS")˾j-:.|/L8 0E O O O O O O O Oj����IENDB`�����������������mermaid-js-mermaid-9bb0ed2/docs/img/gantt.png�������������������������������������������������������0000664�0000000�0000000�00000031022�14332737457�0021213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��(������B��1IDATx{\Tu èhhVPjb:۪-Ve ePkSR]/iziwUBe⦆ rc z~pǃ9=1 @DDDDDh�DDDDDDJ(AzC JPDDDDDP""""""7HEDDDDD %("""""Ro(Aby9y8k(#/');֧WvRgyy9J_7'a8HVsJ猈\[| 0<\kcY`6XdQjc_xAt͎X`[8.&aYB1L"z?�hv #Pu%);13 p2S%Ѽo4L] S渶M^:d;4r_؛1eZXK#F\FّJxpR`ڽ%>,J+`L O-"WW!"r9{a$swBrASmBk3NNpH,Ĉv$X�XIz?ձ\HfY4$/N%h>8)? ڑgg0.w؍=D|c^_S(XGe9E%n)o0cFYH A<mD2b_qE ͯpΈ5GCDij$3qrUݛ Y4;U xUϱ3֝DV ؁QK$ 0Y?%k}ߧ|~:#BgUeofxa~ �XZP0Va1׶\-,qd 0?.#Bk2ԙTB猈\sG"KeH|i$>>>0h|,s/ܡM\Ru}ExR3]ObRTY TKY]sH�/_r/@ψ#}'Rg6sE$,3ٔG5f5;Z+yz"#->`+N%e>ˎN_&^"Fi{2,I^D\l}2r%5`mlip`[1,6T6ٹɃhx"Ȉᄏ/;NGˎETVzLSI2|,#I> /=(KYU>gj'p'Q*2YS;gDl9#"CDS2 `0ja**0� F1sf_,]l^f5ň1 DK*l{ydi9cь׫ahIٽ,*+8% Sޡ0 #{̊U#zF8m-]:jeiʕO+mI1ڶ   ˨Ʋrm;eMP/GFE  m{Ř`3$)Fʟ3b),3K%3ȁ%m0Ř|}:i,[0ӰP8oS˨F̤ qYF,wZO7ܟPZfʜEFb/2jhKg9Qp~ >gDZED<`"0f&agX s*Y)6bVLP2e԰B kMe\w\+lSS )r%(c2 ?u6߱ZktǠ"|<0 v3%a [wbQ.!y\cՂFL  ϯ/)gimn*cʤcDZe%˪C%])+0F}:R]Wݑrgf+a_\N& z" -^3B[ދHccc.)3jRYvx^kx$Ǐ@a$gmr ]{axt g,*WM+b LVnFV9ZC@$;Jv>z-eFVaLjAl4oiԼ9,8gk H Ѱs,f 3XŸMHZ J`xٙfQ6 :n  ~8 l{p\BxwZBu-F;t*[yЯ{KDte^{ab�{*lzw.01;?-\ ] +Qmj ?oYPߋm'ܦȲW@U.inr.oED3N; .svu.Mb1]GKۊ4?G fn쮣Ŕ}"]7WRY 4󐹪* $ڲi<E1\\|\G0hh`&}WĮN%r]ELaդ͎bְl4qס\ o)4 8u$/=ƞKkJ8$3{ʟ.#g8RtQͲ�;~r8.Xڹ\Έ LBhBB@`X/HV{+}7ʝSums *ʞWC^LjM@?EX лtc~~B m„II&\`.YzGE(IR[UP]G@"<eT ;lPPILwuP/p8bcd'\*OsJx-S+% rsͥ vrYWRzJPD, E3g&˖ĺgq D0TrXf\&s*ţ.;0c:l5- gɫֶr&#W[\WJ*J`ټrr Y$W37Eˀ$.M20jұ3uPe~3ct"0Ќ9/utØ!Zb6qWIWKXF@(u9n{zf́b&Ŀ-yq1|猈x?%("rٓ,3 VZ`/sW+C>~.2uhsF,Y�S3//]LT&5=zX=`pF§iP,.u!SY4X:斑ľOxY/s5aί'Šݣٱ쾛,31@*ܥ.J# l`$3{\π)2;G2b\u=NDJJ~BJO⻱مY@t|t?LE@,MxE2I.fP.xv" ˝]F;_9#"�Oߥ/"מ}.4=oɌJq)c)7k)F)Qҩ:i7Za)|cI`#,JY*Ͼ#1ƈh5#)K>52Sk;U邊Se"cwniylVhcwQYvWQd f*ɽm\-g\d)n3V2vQm')ūZdƨRΟSĘ e:\3NUl ռG% YfaLXۨVT>=dosV6p\.^Z&Thڜ3"rm1 t$"R+̘5ss}+ǦIZ9lک4?eiDwGwǁxQkT,nSW_Jsǵ]T\N9W//ED&YkG,0s*adoK`h}47{!5E H-'1tL LR%ȵC EpXS/ImED74ͰJPDDDDDP""""""7BzzC&%JPDDDDDP""""""7HEDDDDD %("""""Ro(AzC JPDDDDDP""""""ou+Ot|iU~k߬&(ga`x<TQڳ60BOL&Z]~e"""5NqC_KP%~Wmt^g}ӡH=EEݕA  Y3}_N:Ezz:_miܤCz@ J GR\|N:ѡCO5nFHOO'QwjDDDD,^5(.: C:fŞEDDDD %(u0'̬#䟹;9s-_*aʯ񉈈ȵC J(d?rGD Ϣa$e^=}#G|;Ibҍc_v=ODDDDJP@Wo3rLcIOÃr XĖsJ9INN&>݀-3ِ]琙O΁]ll GJ2@p=[HJ@f+% bOOm �g:|I>} 4zuIn!\rJu0]_]DMDDDD:p,}' eCH۸΍@w;c?G6/&=HoWЈ;{!|ؐެ; GZAwI҄Į7!⯻0q?FAҷ<J 2{3k1hٴbݕY<M `< G72y>F, g0֬g""""R{ūdn@^zM :Ldyǽ- aD ޙәH lʧsnrX;oAߛa f// z/-Ved0NEzޗd G ;-{ :K?%/ Ͱ-n62Ԗԁv=VOB#-喦�8p g +$[JkvsKv;VV12y{¸Ve/\0ttXa  w:vvƲf/;^fɒll�"""""rQԁ[~z/[='[ݛ=g>> Y E"hUc[D|Xoq oG_!Dv9r(sBl);+kͽM$ҩ hvh^OKcÉl:lb͖DDDDDjMCH>|+]69v=ݚ'W$l2@(?zqٽf0 ଙл`a#N5CǟUx3<{BæX;/W]q7 2z佴45lWW7 #s(6` 5?ߙ%4m~'&;b!w+?GDDDD>aZy87b:Ye '?nB ô*wrjy7iwZ՘}8.1o/w("""?6oabk ՖZwqU7nEKڶQy]:jӗam<եEDDDDPR�{:ch,ӡH=!^5hyc n{5kШQ#O hut8""""RO(APKn%{ @;pgpOG"""""H kaOq>{{ty:狏-�?9leMP| qɤNuwn9dqӡU܄Am=+S-RK}>Gӡ؃#&.CZJPDja̎M`@�NÆ�Zs<RҶǥt8"""^K H-|!�3F=I[kՂ8e67JXOdӬI%'׸NmZpEDDk)AzC ).Y|]Jɫ2=_xm75<-}y䜾b-k/6(":Cz(A&vXWr_%?.jV]ׇn7wǡ+0O߷7v[x '}mɜ:0%:u&Y'<݈"""IJPDHl/ME~6tyV?? ?* g pc�`YȚ42\IF3|q8N/tG^/TBSi9Qҫr5c?;Rd5lL?krzߡ4kVO4"^YkyQ4CORɏ9w9g<E'W{x6Ch?~ !֚ߥr<=ß ?=?`K:wݬ5O+;s{clݕ†pA/hM6;1o)M~g("""+("d&˿)w=M,ؖ -FKL Zѩ"ZMb43INΆt[ -VY~*^]0 [fOrz})r-o?zB Z^g" !b뺗$? O&?$()x| ['D?7}J]gY4?q ChLlj,/ 8OW""""6%("^ )KgKr}tʑb?o=Oh4͗k :Oo 4.ݶ>~wn1 MGYh;gӴ�[Nf;!$gTzŸY[cLd,zr]y>ނ 0fy<h>9EDDe>aZy87bJoa=ңOY=)yVJfɖ}==>zለx%ٯ 7W[q*=>֭?xu%MvR{e?DDDD:KP6c_ ;WT8ެ\h7RG JixGؼ./6ْٛS9ZPپ./Rq,k'/r5uଫurTɾwsxVWݧ,-=^ 5ȕR7-Nc}i~e+C{Dg0 t<&UX }cu;xzCMO<Ec/؟dAs,Kʊ1mY=&%meL7$WVB[7'<AvM<5ټ{3Ӗ=waÆ_|ofsW׻<תD MmyƋ9AX@doiKp/ѭ|psEpSC Gߞ=o+u","Cs2N-(1Ѯ|%߇sJ8p;3C-?V{曣7cO#rSxɗ7_~e"""R:HP|A2oC H,Zq F)|n8O&g"Zw8 9PLѩᆲ"MZȴh愵7qnkȸ!{0K517g]~Fz&""r%՘Sz|~�C }3xlH| ^zNn9w1hZ5_C7@_V49uy?a'iq:S.L;>5vI_Y.[ޢ#.}kmojKۛz: /~7+:[XcgU"?<~DwCב<KF0cQ=?# _w?#{{ |}?~$ýg20Ό[7Q�XԽ1s(wDCσRo~-Iz:ュ'<AאG<N.oװaWA"WSlEg3]A"Ro7~oC_|5YH00(tcM˭]<x]ޭ6jK3Uݫ6 iYi|C5 ӭ<W9w50{lO#"TOne�ТYC:7GZVCS""R[>wS ,"rx[ʍCvfIvOGU yW1e--<Q"""{<uk p]wÙWU8h,o,vMfI3JPDD'_- ד :2aJN2eS/[š*nK,}k:ze=0dG�y|.˶c@i i3f 'v(:~\N|8GeΆO4p͇> =֟�OXX'iK�L jґ>-M֟w7te@aDu ưh0:B[”7Vnצf�hܔn7yO93 3M ?EO0DuwJNDDꊮgb S�p q+{ʰJgD?[oOc3S|i�ˀ'~ 8N_ߟg`@rOy }&<Տټv< S1 ]a& >V& @9hc9rؙ(AǙ9Ο\,lgMO~-)Slq_ojjS[ 8sXc|]7?i<!m:\ϰ(^6 g|3w@1t;x *< wER Lt~A&׍� q2>y/Jr 9QaGqLafmqx<t @;1 8gE0p]:]Kh3Xy-"Rw眫:clyp ¯I} Sgz^[CJV6Mbt]E9K9;Vv4mgζqBdz$?c b~uk�;4?ޮس6I%_tKx '"@LȠ}{}?&r -[x:־}^:\JA=vvk[kmt[W>}}Ieeӡ~M! 2EDDꝌZ̊eή:*Z#""uBCDDDDDP""RKgϝ̚D*a`3]~E"!^""v?il6{:$`9(*.O>GD<L H- E=k LO#u:HHO!"ED"<1 :<sxBo eC5KDOP|||1zOvqեt""^I.,.L az `8gX+ܹs O5j/vI5k0J`@ :P05xHp"cӡx%/a3`OR#%("""R/cƍ-׃ԉ3swuZJPDDD^HNMĭAx:e灝nOT-݁$"""AuMD-gӡHWPDDDDFG"ztlf'!aՠ['h*wTNAHQ""""-1L>zUU#~!]f{݅`}WCٵfG=x%l<|?93̶z귩\uJPDDDDEcALrX,۾=uqv9 ь<>u>x[䃏E)Bg/hWȶv}XBnI3ygmYïҲ)웘&_ Fسچ5pIa~pBɩD 0m,WO�@PGtԟͶl>ڛn@Z!&iE㦴7!-] ]{v?8iiq mi~&J_5Aۖ>iIDtr|ZEs>['N^ti "g6㹰ضfp-W�'.N4oqh3SX7Y8" B}0sp699p,d|Yۺ&)R6'r'1rY-î8O|oZĉci|!7ơb3has96ھG9),n&>O2g>~Э-+\+(""""ޢ1p.ק?r{s%'J^ .+xr&8c{C�gOн8H [/ <ຶDNyǡ䟃9_o<aJ90;=-ɶ鼸f[W]A2U j -Z8&2f�L`~7)W'b;̯?'ٕgc?4W06}Xiw>&_>Ń)k^gD7>^kӍ*Wxs߫IZ}q:8ρl;t_gId>7~axaz ʜMf>ߦ�so85'v7>m'ڊkam?HX6 pb۲noH M!r :(>ȜFh50 B+f``\L}^)##핷\Iw={猳tmӡxtk{HE`WFN;ܾdlwݬ߾{־)ʳ?ơyjcqpC@petEDDD䚰]29(W_YrTXڤ{PDDDDDP"""""r!H By/2 /$�mnjPj{PDDD^xlݳfG=ȏ"!:P(AzO>,_e~pC Gi]<tC<ӞVf~[OW/߿nax=[~7pP?Fj? $/"""""FCDDDDDD&]AzC JPDDDDDPrl7KH^DD.(o&M$@;<ش2ĵ9$p-s_VR)Aw2/T5IV1ӓY<9 ށȱ'桱ۚ6ϥy*`jF$t""9ܜ{ =Si><3Q0¼s*^Ltr\ JYYGz,]'mDbӫJ5$scy4I;HLw o > V$OI(N%#=KmU#f"mI̻do,m*""Y$]_dO"jrI_+k퀃Ie#.{qX1XROb)Ca5jRnDّYIW\&f(@}VX ֟\]zcwNeG'aReyϨ@qˈj{2Q\�DD.VP8z7gp*Ъ>~|wb&h|C'+i~/X'wv l\ƬHV-oDZ ،(Xp/z#os2IXԵɤЯ>ʤ;H>*nAt9 5O%yC2!CzW݃*sဠPpl>tM'(=FCRhobD{``?ו{ YnHdA�ɣ *g+("r צ(A0F#(v`U,I۲�H]s@k'F: z aD(Bb={`(PE ;*6nNx (|/P"zB`03K �&&t/LzCbw`ƧjU`/"WK Z- $Zu0r)0Ɣ~:l&]_a!d?LbVg3Ѷ9&"Wko,Xt0 Bow_~o(1/ D&SF%$ebǖW1 t?:\멝KD~lJְL7{PDDDDD~Q""""""7HEDDDDD %("""""Ro(AzC JPDDDDDP""""""7f17����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/git.png���������������������������������������������������������0000664�0000000�0000000�00000036221�14332737457�0020667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������Pd\��� pHYs����+�� �IDATx{t]A'GN8;iOh$6n Fn< S;IͣPf$ �`&?~ 0k€a0+)&B#A!Z,GN~Mc(ueGW:?}{od}r9����PP5�����8����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(݀600}e׮]9tPח$K]]].]իWgŊp0R ՠ_p6Jr<ۍygsرcS… s뭷oOmmm[�c+A\�k`` ۷o3<|Z;˗ս$[}v^KRJmŹ;smb+AݘVݻ7R9|,^|tJ?ztq~<-)Ks}`+Aݚ֑#GcY`\}T֫.Oܛeɒ%>+b[ �8H5WT~tC=4ۍ8[yGs^3?s.KM7Çd߾EM7ݔϻ=8jЯ�.s.Yzg>d޼yNf͚9thi[W^y%k׮MTV0R ՠ_0·۷o޽{l+GTR96lͲewl߾}`+A`:ͩ�رcy晧S*sO䢋O{ Ͻ>R<i�΅qjЯ 6/| ;9o8W_}(7|γ>[z�ljЯ�ns&s=;|uSIy200P�tT~E5W�TÜ ۗcǎeYh[h@;}U>�8 ՠ_Q �0g]v%IV=cu5\7� ՠ_Q �0gC%I/y+b+Av/IRW7cuս$_ݑf^�>8ȴӯť\͉_K't2rʙ@.*SS.T*T.T]J9:VSJsw<+jg�?s0zcA�8H5Wŷt"NJdQgQDɥ9y9哥O3sNUW,ל ��BpIDLgIۙ743 �.Ts&Ç׷(K=#uH=�0UAA]\[V*gItb4-f__�9`eɒ3Rg_ߢ$T.g@Nɓ81:ooh_>ڗ7__ɛx?]Ɵ,YuW`yGK/odNӯf|5{l[~ yu׾wUE,+geS{_, .].Ef‹s…̿xAjKJ̫If5&555)͛RҼJ45>h2KJp3ҥKK/es /H/|Hݓ*R3Yyy]y]9cO㧇ɼ{=#?W^~u0vdNӯfV/O/~>{+skkkr˯E,Rύ~@5̙�kݻWxvFܽ{HP{eo w|S_?Bt>~˕'?K=e7J�(qdW3_xK/ҵ YYUYhЯ�9`X" .YhU;ztq. .̊+ZװK\p^ۻ/+?ڗ?ͷi�ByUu|)LRMMu-չ)Lc�g~@5v&zkR~Sw%)[oMM3]y|#?{:իoxw;g]�̎ mdfWUR.KG~4?0*Քr7ߔ;'/?[l~NW~@u̩~8?K^}K ~Ug*5ȣ9|\ζG>?i�̾ quOr}ޯ4'/_(?9<p+�ۜ jkksw\.' 'M\wܙiljJh7,_Yj�3B.jyc?/e-˷|z+B g~tC=4ۍ8]w]8_>Çd͚gT*K?//tC}h\{|ϻ3pdd9◲ߖҼ9Gp.qѯ޽C;s|(o}H/pkz{SW�L9`J\2_җoߢ:4 =7*?/vUW]袋ӧ=KS.#zHNnŖ0.qЯޝCГ?Cyͷ*/Yup7f޼I>}ү�Ns.J秡!ٷoQzzV}7ϩW_]Ocydɒ|ϢE7]{stWFٛU,Xt, pT~un<t8ۯQq|凿5/?}/< R*nĹ?{T*曟]w=5G=8O=uW^xᖔ˥x㍹c}-[5G^9#ᓳ*�f҅<R=ԝ;o̫V8?r wkNXI200۷gNIʹYjwս'եoQ^~޽*\ڋswnS1yOZ.[~, t!T~5r?J~~[5~Wnf+�ލ9` ϳ>{.ǎg.\[ou1spf++s?6`6\ է_MG0+-{pj.?K+�y` Ⱦ}k׮:t(}}}SWW,]4WΊ+?_#7/Yx*�f˅623JGc|ok91rrc%.]2-[+�y`]hNcکn>[?V�|GʁCRooz,6 �oncq}خ?��ӭ뙊*In^@*m_R4jwFו*Y{vtT|~쫢M͓a]ζy=^́~qz `a;k+dҡ4WoYmsι*JD/tk)}S<4}xYqҥW>q,�XКS.SlNBi_אƑszp 6_Ls4wfsy]-)ݟ<:u3cks7|}ű]O|~f01n׈4{:'p|[z:צajQcsκTEȩ~5TLjg3o?%G^8-ETҲ̧p*H՛'t'fSСlN:]>-Is綑s7mKO[cұ]ݙm8iN\oHƻS?rVSk mAcx;�88ƍtTZI;]y;mdԦ؝G[24N=:f }YٙNw9>1S }xypv>Ǯeu"�$MV.c[rm3.ᔗeOfKwc6]yWi[9qSeSo,?<_�,Ƹ_l4<sgz?M\.gۦImTaiKUّ4o|Jİ=+z}u>:Tܘ뽳ST[?JUpFV.O];nygXJ<vy9Y7hv/=#9uWZJ>D8Q8{ sƤSSѻZ#ipܮɨ;% X];ypE lsWKi鿟87Qql氱c\{_ҽIÆ3?7>0zLn̚M^ggww<|{g]&uK6Nv 6LZx{N_V|w4*ΚKvcOF]-O2G-CmϺ֬ux{M6MTӺeMzs @q$ֹ6 C4C{1vP`tnQ7e[gs[KWV|~PI:5Fh-mͽy#i5X-3}Of}x0P�qc\ś_hCTJرgi%h 1ݻq׃;džJໜO { h[5Tww6t~N<uT76oU+F߽1o|XGw֎s:г3iNŽ0s~_l0VWK)95Sgc4f4wXښ5eLr~1m=gӃK#$M`]f*�sDc\FC!èe;gel&7"O'.E WgԻ';&ZzX^?#D'M\>_ZRAӆ4#맺,g�P]&4]{#%}jFk'tmH7f l;3TgfM^?ppf;7tiǯj  ?~|{93g]2O$h)p}5eU%?~?)ڒTS?g_'=mcFS6{ؑ'ԯ`L/LAЅ'xTЫ瀡 L)>CBϴD5\g/(r9,,c\rT.oR{90S.ǘBDqJWS6A]U}gqH7\W'Cqhji۩kT5T8#w4  /6y4~>4yܝяJ'X͙Y .֗>y w1n*/yؘ㣗ߝɎ1$Ļ^(.U]NO [NfMj*WfuUvTξ7Li_ԴskP�~SlNœJ۞u;Nm9QichG{3 rCo՞yhIaE{ZZ݉Tsx+?Z'�”Ƹ!v1phXwc;tUo/.$F][R44?8dқu /W=ߞ˖_3mu\0Jr]-ׇSY\p^(Fis9ּͣ>w.t[ҝ >4fA~Ӷ >A;9z ςn_m)?3 #u4d%gjY#mmUz ˮ[[*ݧ7 :%gCr:׶V;33ig۸D{\r:OmpD ӑʥ\S{ i]9qg\ζG>Uqhނ Sfp . "6W>{\_lʆO=<`L )ˣEs8◲76MG�ΠO_<n?1mz۳f,903^nz_n*=۟ͱ׾6K-�(w_?Zqlᕋ;:_5�s�<-*5ıߟ�g֫UgsefEL;nk"ylkpűOimYj�@qy᷷VoJÇn1ݚ6O?�Eg7~Gc_(/=Kges@ۗ]vСCK___.uuuYtiV^+VF6̙W�扏dviނkb�DuAh#ҫܘ/fނfUsC}<s9vؔ>pz뭹S[[[2W�r;'v8~ۏ/?2K�F`] of=Yql?3-I4K*l߾=<tNRj,_rRWFoQٽ{U.I);mf I+B*/m?|@$�(b|GW*'>l<ٻwoJrnySY><]y[R.r73k_Oy_q7^sc/A]-)ߑS{LKCk M9grNіmb,bpQ3^>~2]Uq|=ߙˑ#GO}*{ͲeOzSd⣹擟Y`ݛO}S9rH[NW�sy꒫wޥPim:;צa]{@=]-Y1mM`. \ETї2K-+<c9|pVޙWz]}|իwy?-f.Я�辯dt|/+_X/?K^9K-;_t4=CM;tH� Iuz<?/XyGB~3 Hg```Z\_~<?{^xvq]Y Ӹ9}]Jk]+or9ۦLtN)p\)e$SzNGc[ښX$�3Lu|/T?v?-|:'NR gۇw|dkJT*gÆ#˾o>meSl@1 8=OgG,Ή+޿l5\nGSRlzOkwc+5r&m=C;ܱ4zƕӖ6/=&mnʳ7Xo./8_l{~w'\6}zcǎgNTν>1-3dZxJ'Yuӯ�f߱׾>~sn/Ay#i<jtN6c%R) il{S*gxM6jz&*~Su6Zh؛]o�@u.` ]OΟ.|5ݿ[}">#BK _B-<&:>o~>ogZ=~0;|o~C?_WǝW.w;~dzKfsTt9*7m$j<4s'4=S-wOv$Yr dtmMG1e4Ic:uct��7IDAT(m?iˣ+`]JoC)Ռr|<󋿑]ȓ?sğȗ_Ny`D͆<sIʹΧ^]w={ΞE1 `9嗳?~Dȁ SJ55~(-ۓRiZ=wqϦ-yli̚ږAim(UКG-_n�pejbC^?ʗ>9%O偁Bo!IKrgWeWfچqپ}rر,_~ WGsur۷/7pCdW�shGOyzsͷ/6|Gn={h~sЬ=ɦ)ӝ=Y%KԘm. mߒt֊wZPjMsg9&,�3GE,ͺOOW^Ҥ9G]\,^~m.,\vlMߵkWdժ3VUsڵKpү�ޝo/%G_J^y赳*뚛ߗR{ܹVX kҘlڜQNŌkhڱвNYdǞޤii*dCìIMRTy;ҳͬ,`1+.ڍvqu՝{77q]tIm^8W,+,,̿6-z]Rg~)ͫITҼ Zzͫ >,8tPd.]usѯZO 9tr 偡ɁQ z;՟w N՟ocG^Os{hͱ#G[WOw~ `c-j$I7Ѷ-iX.kg5u;I96fyi8�Milܴ}*)5=<7Һ3Sgd(8,�E-ZvUn={orw'ty??Sfwߜ$I}63V/3L1*nZe_r7vk'01mmim=5{is9-4N-k,g[ٕ3$͝)M:z9QO@Jrynͬz|q0zy *WR,x{F;~/Lf>f~P/^+n57 nZK.f�UfʥKј~T@9o}9WrWrt?+ıw$��8_XkfkF~UWTɁ�p`1J5\tI.]$O9qd^;׎׾NqXO}<偁 <Y6NM([%KffL__݌ӯURMMj/^5TSy/8}.^/%W^++O9al`1/MԽgl7%I裏&/,YrxF[$'ү���Wl7�fҥK$_?cuusѯ���� ի$w:~��0X\VX frw8p].\+VT>f~��0X\jjjr뭷&)z}O=uWRn|_��L/?pS[{qUWnImŹ۫VŠ_��Lqǝ)Kyriy{S.rww��`An-7xc\[7\.M[r)[~$.K}}}ni+bӯ���� 2g}ݗ%Kd׮5g>:-3f_|fcvZ*w=. ��(l7ȑ#yr,[v0D9KeYdI>/3W���� ?{T*曟]w=ŋNG.SOݕ^%r)7xc>]+��s' dy晧vr@Vڝ9uuo/IWEy{8p]Rjk/wܙn.W���Jߟg}6=\;6,\0zknvc~��pvX0ٷo_vڕC/}}3eRWWKfYb1L~��05,���� |���� My+-RJc_-]M׵C]UN۾nT9rbz۳ԒӜ۞uRZ U̶��=ّƴS.zmn>!}ꜞt6 X43^5Mp[;צa+- >���`n`q~ٙI}2[m4tNmikL:N}Vt<ڝƶ2遴5v1tTZ) ���s�ZISaX\1'ԯ\dGR<bbtl.mdH!)Hc[Oʝͧ?i6lry؉v@G/'Zj:]-j)=#]gR‰v.-CZRzvnq Ǵ͒B��` 8N㎇z_ɨ[]-OĞt?TTNoK5mNy*AUӱ{\SKW{ڒֆW76&;S{v u8͞Iƻ3 wn ֝-kS.\ޜLߥܙunT���8,c]ڑtgwZ#uekGeT4;;{NW,ghVNCkwXF'2QYllNw#̼-yrNssPlnƻ'/h[Hy# ΦeY��`z8 ]޶) ~14/͝~@o򩽭Ւҙ6NrfY=ٸr9nWfﻶ#SaMӑ]I6yTH1k6Ic$ݶvFn-O<gmҿK옠)��`FԘͬ*�Ztq򧫜`sŌ; {OUGMМ;5nM+v(1fƬiSEÚ3socMP7�� `q}H4n_ڝe'~aeYsJ=*_ÙfÚtoy2]OnIڕOS64wg˓]|1w߳�M��Owh㞈6fy&Ճ?O)zt9ys6,T<prwoLclٝơ4u0z8[zڱr].Rq9pl���3M~SldA][;Nm>4K'' -9J$~rz6SpMy`'uR*:V2kӑSe nޝ O}e0,}r SoSTԝ޴+4.e��給tf}^D[7!t'nmܯ4*lz[gMO9ͧB*gk[0|pY]RmiK>X;9zS}2z}*&8mc #͝FLߥ!k;��PMr\F����d���X����� ���B`���Ph,���� M���@ �FWKJҤ]4}<gL;�� 8MS.Ǽ:Ӝ$͝4t^WKJwgεim֜gc4TO*lN?��`ry0 ?kYޜ7ecOm9Ly$zRZmKÖٶ)Cmi][Yoe[r��1 mil{ #1Oҝ]Y_qjÚƤck*Wf HKJ'umMGzWM*-Y��i,wt9nNc4T_3"5c}2qKʝiXug\؝=IR76&*%; ÑT��=g�sWWvrULw~fG&M]јS{c[[iNc[ONcM<wM1{vTXi[+[Rj(5IҘrFgnS9��`p&Y75M\v* jI5ݣOݓqD<؜Y[CK+RJi}Y},��0[X�kkGҸ15iSk3GUm>is"ִ6 Ӱ3;<<ܑ4wn>5K~SmkLw#qM��Y$8'C7ޝG AuJҾR͝{[mĻM/g}iݓAYtOr)��0X�tdǘggwҼa0ٙ4bN2k336-n\dh6d!P5s���f� \L2kiP}6=؜<կ1m %V oYוIFVMy}])ϔ֤M3Fj9=w|~*���̢R<8+�}]Zצsҥ ϩjL[϶MGJAרs+KܙZRZ7ד nҾIilɶ1'M�� ���,!���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���Xc����0�������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5���Z@@;d>7����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/header.png������������������������������������������������������0000664�0000000�0000000�00000207675�14332737457�0021351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������kf~���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE稛Ƹ5 cwn0fHeJF9.#ٺxgcHRpX=%*ijo323H7O򝄂ѰIjo ".ԓrUֺyyz� 4yh5MNMɜ뇕ͰnTM>?Z 3F5ccbnlK{wenN1޻d#Ogr<B人O֏Rӏյ8ziǼҹ̹hYe^׵Ȯ{oӌ}[ŨcTRG0l'W�IyDmjBx4!b{wH8CuFvFa7�,痪ֵpքZԊiOuuVأчUqސ䛨x݃쒘ƒ㍤ۣiexa1.ۦ\ꢤW n+'xiۨ7ѬegCF4*(!�j:4/���bKGD�H���tIME6;%!���IDATx @Sw>B oD *!BFMA"b0XJ0:rK8ª3#Aug뗩;SoiZW{љ9'ɹ&(=!$O}y!s<s<s<s<s<s<s<s<g\ϋ9GHB_!skxxaX`+ޞ[s<sFFj�,X_&#1ɋ#DNc6C4E(``2 xnSϙP�5IQH{Zn93h,u�1AHȊL^s<<3fr*H# /-hD!7�<s vH)7NYߠqx<|' d|`BaIb$  FTbd<.�!~X"hqDdU" F5l+q#5My\�9~{4zҘ`#$9bD4PߏVqx=/A| ~rl 2R"Y%y\+d'c5NN5!w!x͆kD1YڴŢ>Rm6͜lbY1CagJ6Os<MEڦk̬'##$[ܚ&dmKY#޸6zrl# 1¡%BXFfyI9uPh *@b$љO-[mYcqdRB~*NɪHIb¡2ϜI%TVFlC+"mt9ӅHK]~mOfE삞_%~&.eizJIyCvC^>6fljG$E!Xd@xϞgy<(H*AsݹvsIV,V6?͙#.QIV(H(X؟%W 9S!Bu =s<gjD+ E1"+YsS#%{B#7̈ٵ/uJv>CR(2ˠ='(3i>LٌE+P9 _DϙDw|(a <y`> Iq9vCPnhed8JI`qۡ'Py1b;ΤYEk1qǞ/ B|93iĒ5^ɻ/JE߹)D lM3oѹۣRs9ꇴvҬPsΤ9QR"'P@rϙF}3@; ߽ňXtI(s.`|'C^C Y_,O8(b^ Fvf#S,ư }=9p s[iːWH\l۲)$nRWz62j󟑬*C83g9M\ň=b^W B("Pߦt/"�^Os<gϜPF 툐IrTE/?詈ԗg?L"K[?6#J'MHOT#Q# mDח"8(z s<gϦe+xakxPDIlYܼdIW.h鳻v/_m;o `1+&K^l>>B1&\�,_Β`we'JxXNyfri;Sg='-۽72|^6V"I tn+hL1 �46plj 0LpyZmB N93&KFTXڔ.䈖%KژP3}9ڷvzI,hiQe颕9vH dC-]0J]! > Q!O@Oxbg)8ɪ!PSKוnmؙOX75^&/%^&>['0EDV:pk6u7QdrhekE!gS$,JO=m9;ST W Jcv@5Va'b93; "$ej wuy9* H5PzQH\jd2(`K3M1> 6j5cXt멮i:2 $-3k=%ڔ'"N$NP z8Kk"٪U2! ږUg΃^,ΕN3A![#ۀ,9FOJqC QsLCȰǖ @St{x ?x<>?*r[4975B*ڛ8#v-zAK,ID&?<"�Lĕ8X KEk  ||\ߦ}" d�yo=sl(3?36x+tǬ9y2)U]2O^["^6O"IYvK`%L 3 ;i‚N l4}12"+Ko{`TO{xl햠4h4:KV V,'udez _΍ۦN&Ňx^V@NQfNۮND,_ːiBE$ <-7ϙ'j({R{[+MM1LĒ(ɚȔK uXs喐A~xRKC$N@B6Չ0~I3Q<uB6D- *YO2zI~|h"~-\?1?kޒM6f rxB|d$$vp0%~}iyTE(D)67U JxGBIl. > yq{"vǫW<Xiڴ )LxNu/`@ "Ywqi. SFHؿHsā�u ňh1NU >J{l; Jڹ?fD"[5ŝ?*'l$5J^=$sִ#o3jΚcP<gWyyi] غ6zMJb`م$/]T%jL6:S;qӱk5},cԞmnǶ;Ti($1#e"�cLv>C$g>.<h-<זBk>)w~‰hh0sޮB`N`ƍ6d$9RqanqxΔ8I"K(ce'v@k{6`|%J&[ʎ%|Q؈D^sZsY+X3HlTgԀiyΣwfTϴȴY+%9 ^ڟP3J"Q@QbTQ|Ӷ8Dx<m,WClB2cuƍ]MErFhAy9 ?BmY)K@J$L-E wm t*y$6B$!~N=$F[_5^IJ@֮%] 9A6H�8!;nec-b zԣe9!ҝ{o$MytӅYݳd깻 (,uxSz\.SŖ'(-ÄXb* 5@ aB1sޗDLiʹ0VdW?{~^_F.+eD!-Q'b"WEEn/1F΃ k[U!hU; F#-[/x : S? wFHv I֖8�*GyC-Wȸ(ٮ*I ;hYHxP�*F[)eIc4avƚOb :n 50J@ #GWSSܡ=!?0I"&޷MI x+w/yU"ņcOB$G0g`% 9~s#хkH�qu[ 'FrWW7MM ]svH\B,\\o/YlIٖ5sI\@9{ snF`7vPƙ{!JحD 4Eghmjjjlll<흻mx-䶴7Wb-ݽB=oɞm1.^GS-eOf`Ty#vfYaˮc\�GǍC4PS]`�Ĩ "]k7{ӞP%GMYdZvrĉ!R@If dVFB%h5k]B10)~.K F|Hki`Qbz 3M9{u[#K 65']*925"z~@9!"dRq@H:i>$FOan$̴qsW�Ś@k Rh@wߌZ 00Bv p Mu<'}m)ji<ݑ4>kkة0L=Ks>gd ,d |9xt54r!Wx"ED,Xn"5slZ"č"hZo:y&4gdIB� e Wb$ҕC 40im-:}$AтF/FSN9 *onMwDB5B5^(פ3"t4@IƷqX;n rj4UԷDB $2S{xMK7`}\b a<2@egZ#v[)W'bFDZfi:FtJ,ȈWy0I H4_=ԩ4LE#%dĠĚ0ngA 8)/NDT@C+ň] F�xCF[_{xe,z [g퐶uͬ�ȿc@b >q 0E{MW`%v3z>K5XY$'+@͍07Ywv�J (qϠ� 0*x6FN(Ye5LF5OC<g 3#YRgH#Dp[ 5GqJŵa-DXu-4/j ҌFHkYfDF˻t-:읺య6eLx$F`X߇"Xmjю2dADKW JPM  1ߘ;pDl"̨mi`;ڀ`kl+:aobe$}[ڈœ9SV0bEP lㆰV88}IB0.t`R ЊfT=[|U\!Dp5&Ҩs :};ZVB"!vp6e&-Q,8)yy3E,4 aX᫱?NL 8_#Ɖi'55X L7`K v8+VHk<g4Tgiok0X VbQjcʴpeеN<m3UT#  g_">IbFr$(7x#(cm_`3 4ɚ,Ffwdi zg ־o70vDVFsțaF35e,̚H &�v: J7EC+0dyL0ӝiҍr TNDZb33LoRӲ$SOY]G2!*yxyLu,LgӻK!%&)@B앓lH @IQii02Ej08U� k`5Y5ꉂ7Pf5Nf]s%zj3ͪް BDZm *x|F354Y4n;nΑ%֗,:P `L-i\BR _@{1BHTk%#dx'795=s@  FBQ}sFR Ë<g*# dYlZn!B.%z DZﴊ'ͨ4n5ؚ� u*ժ́[g :T/ER\:|ŗXZO,F߽d^&ZڊPH)E,ל diPfj;q&OwNPcix:YFRbn4kIfnV![gdG_5YwcE/:Uw<vBZEZ}M"<Gϙ**YLU�Gqcr # DF;#`( REYުfIxW:fwD!ϖ֊Hr[7kkJ+JW}lKqO+.m QkT4ϙ*P4p rt#Ftߌfr' x[mN!J+lNiD~=`4?pNs7| g^O P F7&lk |<kϙ2"Ͳ@VphĮMVMfIv45H3B1(C; dZn0cQu7G5uzÆ0M*4'3@m |+ g8kD<"sF+蠄0;ȤDNw܈NZ>ZˀՋ-h-$84ps%Բ&ck]gtAK:{շDoH)Ì""3^7y$XIM "!nwDiva`+[zc:WM*,[eMd{M U˱wXwV#H3RDJ<`9SD},W\H4*;փ #قCTF{'\0 CĘJ^Zi:>6J^7^ۢfɰF"C;n7HBpe  _=<Z@Y!k2>.ΨoBI cl%#L^+pd#F32Pi NX@,-j@)QbH76B8ӈATBK^ d1"�Ĉσ4A{H7֫ΰ$Ke& 嵐"$i:ZԃV#(aêuXQ#zAs#k5)Bmؠ>IKhs54&H?XdfYh ąit٦<O%KˍM"wܒa}VK-zVf2d ," SOual2Mr! ʑ\-%^E4o/ٓnSwυ/5VWI<=g5Z{Me1bHaiumaAig{j__@Wcʎћו%'F%Ma}|r iC/5e+WV#B ` mlmб*mV#R xEIlp&2zJY}%I*_s%/l%*HENz}\Dfi$ Z\�+f FUhMTdsjpΠkhokYyVOԱ  1"Qwd Q2md!wZjW</#4 C&p_lBC S}sF'vS]˶ѸZ2 X'-&Қpcz@/@"Ɩ07l贚hk˰>XyBMT3pMPu۱2; u:ھW[' 4 &-uH'[<HkGqvť~YČP"+<&qVȲwX w5%AI#FHĨ 3Я7n$e%j`H&4R'28c@ xoCmW'^j|w^п4g$"8ZfTT`"c{&\.E٢f`i<(-FIod&Pj/LBSƃLdxVu,ٰw n1񵈴ƦV."wW0bdI?7Ud& 럤4%P n;&;[/kUe^o>KtbdUÖ́HÈ�LWUd6Qʒ*İ>]89Ta ~}4{z0d&AO ^9t^Sd9e՜C6�:i5笝 z@d;f]KB U_�TCnx8sr;;qsi/fh+kk $:iHcؽi2AkK}Ik@EZ*z?).%ɊJ$'dxSNYSRwh4zdEIA_?Y2OB o!}5�$^H-9s__liw5~; ÉK] :bpl1 �tĈz vV4vF F:MkhCI ]&BQnV" MXsVhʨx-&OKԆeKf)g;i\eҪƱP:iH�!@M&B3wfk:`eXߛs^d!`x -H]Ssg -bbd" #F0ـeא4`y,Pj05!bLi&?n_7x9D.47W{JY1i߀XtsYH*)+TVc]"II I"m�!S2R{C*IMRlmjL"zM&E͒,?y|JpViN5ΖVI^>g @xۍ6f i"yQLJjR#$ rs΂L(Yx-'ze%UUX xUyr2L 3Lä9i> }=̈́aQP@_jYtkƬ-(]:|_HꤝCkfv1e|z;g ge& ́h|U*HcCe㐾*oݯ9r'G5דIL&ZF.ھz'M.XJړɄ$O&Ҋpi~~sӇ^1TEևu{�h_hiTSw 2*kՁ>`P2u]xl(!DN \sbz XP;b;5re$c•DrIrk&Qd'~9 {iEl12xfSOe YԙL$ %y-k*=jnhXoY * �eXTU7|{q?_ՉkLD֟V֦FB]"D Fޞ>T]9wuGl;Qaٯ  bg382B$,f Oe##.B-mҰ>k'ɚImKHLVTt@ Ip@UcWMV({#sg T z уInZL= iװ%F"Vt}8F{7\t6AEZ!Π"@' ܡ̃1ft޶7Jjm?]^dE14DZ7xրč-�%y DvJ@Wfe}&;vĨ^#69=?FnB[ qXoFJZzA3_ay/Rߛ>6Z(G&[<11­| kZ1idV^W@ Ws~!ƓI}Bv@eNZ>#6yg+.g]hXYofZ. z0yp>3.03ڮd<WaGi; 4bD5Ar,3d2PT{za 8c4{7!e1 <] Zi{E+2}qD7ǩm }:dn I]5o@F˵e׈L@p#*'I.MN.QnSmUZpZ |k[a3g-"Z JWKZZ__*y>O7ott} ~L]&DZ#1UQ 󰒼xD |ue%iSvF#!҄<k'kX8lL_Q,R]O'a.$#>k]ƸJ"S/Y<$GfP91wBo6H;a%͞ @%T [U( Z2F 7#DǤK=WL(2jԦպu=meC]ށ>�i]Hk8AiwP UVe2adY䙴F[P`^#챻  $1Bpb>m o72elBȖj՟~EjWIj @&SWcю /?LI5.Ҫ%#-lE~A"Ȅ-yc"J;$2} oA�xmtMnۖmU~[O|W�>:gs5f8 I1*adl5;WV0,/l�.!)vG`:w=Á7%2IxdfUn_ZΓk9ZeoƻH <cQU145Qb_ -PJ+K R,JX�V,S ZJ60]xjy3Es慒VGI"Dl2"@,fm3#uH+5KTl?$k�&#ӽn+K F$E}JXX f̦?_xgs;ysw_A3nT/;m=.k܀k4K9& d}𚩼p^*JZVF΋W"ڬ(*D:';GTup1Qf+3\ N TzD'co eG*�&%q\%KPȺmnkjH{+;iafe'ĈINQ tBOW7L\Uj>a>΍ WxfG$s<^KGj$b%:I( (am(O* ^>M{pq@܈UyǨ,Hkc"E{A1lpT@`(?m)N@ `ܫ4`&WYfpeP2ziTr*҄$JZ`U]{FݓƈFE!۰>֯֒8�ɝ:i#?N^6e6Pd ','SӠiݬÍ*ХjGQGOZ L7)ܜ*&0sl2|ZTUfNQŽr* ּlՎ5܄ܬYQP[1 �+܋fIGU[cwMSF԰1l䃫CVքqU$b#TszD£~n`"iJLt醐=$XdX\NpmVd%<D�J94.Xճ(s4 Rs-=qs(3^[BHxsv~cC51 ՛Td%^+,ivx|ʱ*R>3[b0m/, ::\$)SUsS�i9٠?`&DZߞDt`rDWyvv"k'@嵐"!bXU2̾ud֊gNCՙz/ ! G.P5LH:n4GӇmI1; )3w=g2"iOH0Ckr CBK!lKV#ə-U关TbA 1DT*\VEC J0#!RlxDXnw4QEHzM}>Lt`x>Ya}CB<x''Aj1zxYl-By1L\m[-QD5)~KuXzKO Lj^=p)}]U,U.Նi_,H]>`1 FńH#sP!N:rbxe f+ Z/YF�p4Bɴx2$\M2El#A3f0&*cYzM&@߉1 Ku]Ts-]}w?$YOqE;m tP=�m^Ō `o[W;Oid#Z5I)+*ҐZURaz͜2JAZ$*;#\ 1,V8ir2 H4Zn1s "F"DHM{"-" IjU{M&:MI#6", BByH:i$YɌ6tVhbaM G3�z u4I^(OI9l dik@u~ʓ@ �"MIibD',6.Jb@e<30@ Di>En0@܅$˴ { T( j|aSDGy?ĈIPNn&J.dBUzQG9fg60(%pC&Q88MtJ14* &%:iHnŢ$˅ 6 f6fY=:t ŊDCU9Nh!{!r1bm;igq3c Dj |wDO.U8]dfYCȣ&NNڽP(t̹@{'oPZVN*6IK4z0Vأdk3^cy5Lulkڐ*Ipw5#O [ b h1%$݈E @Lג6cY3aq8Gy#,zqeXY 䛳)4%k'-IbDYAYPB(aMUF_SQEI߉5%@fs ;b0m�{XPd̫<σlu<dFsQ^K =x�&7kukhĈ{q^[ �4èȶ?M./SjvGIl4L;匈IX%wj3JRfy a}&V2vҦL ͞93zP]lZBָ7;q/$q;v~'dI=w4QaBg'b L 00iĈQɁVr3XDJBKe!,$Z ~:l,hv^H*wLp%..)|>XKӳqN4.uUgoP<wi%9`eywhê16J0#d10 9D Y(Zb_K/ \5:M2&ؑ1Wr'm9M8|+aY:츙~>2m^rcȑ<C4ݣ,//*bn1B&Xj0ve)؃4'kZL'}`.�FW=gm ]FMiH5^ߗJV}ÑglPh;2NC(!`Vd)BJq�M1[o{0fLcT9InƒufΎk?ݺ|37 ;&)<o]CygB7Zل5A,TcQ0a| ܠ$tDc 7[(Q[+`5X+IW8~u7u)7yɶ.Y߾S޼ɲ:K|Q:"n!s4),u[!5ND(J&0*T!HЮlc6s6In@&WKiwF^מ6;BV7_�&7;x3:I󒮒],%9l^ˇ)njI*/2p&۳} \%!$):!즥;{iHniHs^Dkʃ+'zHofnpz-]1wAR@C7,7 �UN∓M80 q8| TyX_쉚p|/5cKfo7'<�'gXFigq"P>g԰\qlm*!{v JM(zf f뀍?()kkyݎňM I[&È w^hh׃kd,X6N?I%n힞nHKff:.9k#Lތ*7.�� H$^ #lc-+eFruܜ�$3К 89rI$u CxY/L/\zNay5 ^6P/[db&04:9w6W�)nUfC3n=Ph:akUN:nՒ 4YQu&NWϳ'`rd"�@zXio56OXCaKzf!O?jTx<r$쌷 -^:㵙M776 m4ݡ/ &�"loQt@!q8l#^ )&/5ւԺ6J(?�.5 7ex�&?MOH^M{*(>\r<S3lkH&*4{$@ƶ(h\#VP‘q d=-c:pm#ۚ5We4ʈOɢe^B4p>ײm98eb[%^h%)4CKCPy_*w" M\˶z{_yH>OHVw\G0[Lh/qı<?8 I]("u.ή~,T[WQbl[-uI�I{n=LBvY,ym3O(VxqhSG#e\mMܵZ( :v. Q7hfSɓW;IU�F`˨.Mmc%:#\#d#Fc-7nq_y>ť%mJW |4um:=@7WPBk<rבٴ(/h%nkI#5xK*^ݑS.\]:%F�`&Tk?1Q&a}gq CR}4|x~w?uoHs[(=,@~#MMM 5ţ�J%Oߵg|(} U jBžX~nY +A"!ﴐ Mt'u=TF_|}̝WDޠ˚[3 %p/g02IQƶ$N<ӳD&T*i1x˰ǘևhL5W=?yqgJwo<B/4~xI֬cfgo|^8ol܀X$H1_2 JsDc-f*hvVp[q3ܿNo_kF1{MLy Xt(4d8d8G0VjJD]iL9gǍHi'm %!$-Fn]RoH~߿b*ZKe#g GISRkp8er_;̌_Aeژ'dWU &pBR+Ĭz9` 2oImMk>t@E!泭yy}smʿy}6Ӿi8!mSD=W(a|r4kVD9=r4D̉_ $ ]q=DOO?op]1v/ŨKDexu@lp$R戡WRS=-ؽ3()YtE*{s IkٳK_e6y}o}D(,7>08 AD=* s,.{lbޛkvSUD<N68 % qnc$LY$9{G͟n\o7"$O[wk-%j.ʵe2E)Ev"_R<)Kضp } %LP!EĆKL SYۡciTDr-}l�Wڒe-|#/$Lv^*+&q$  GٚJT!dn36Q1?(p8ןk YHjlokv4{Bӿ0uF+Zi�rⵤlmx S2;ȇ A37./-yu48s;D[wg4DN `$}_7?b,͋umO[gOWnTcv>x6"4OO[\_"fFWQq$rle&gYl}(3x$$@'#�2uw =�8[ r8֓Wy(2l.Ӳ!S4C<j:Zh+~[YT�e= +C|[ĸCI)pB6G;齑~d]vݼ?f2k޷sQJC$],~G1|X^sxepڋy Ks rr lmc$G=:_NBJ7F'mrcŏ$rb&Dyt k=%p/`A5iE&{%pV𡕥гKoZXEҢ�FB̋?^؞؈e?&H1Qg}*xFmmu7i];vﲘ)3r 3w @sNFY; ŗn,(.֜eG �o-ZU\хׁ9mt7wnݹ=TфylR΂L=�9>6K cXZ,qa/7"V7. J|l㼥 K_,^]D+O?$z7ko_)rk\5]_f/v?/:+0aOx6"̫,3W^H\ O9ԭ-~p!bZ%vƫEwܺu޷}ݭS}P==׻ӄ=^>&jCP`5p7%p^K?m82++f:4S -ݹ�ֈ-jO 럭|b &nRfuZ7rE \BӇ]5 ~,iDŁq�e9IOVdgjZDvXTqDos;XrӗR܌Is}CI fbw{Ix<o0A:-:$|э+WdBTeb y:PhjtkJФrSh !Ǯ R0S>Ki#%ba,ktqcuSm]ogkEsfn iAOsO!@WYW:jZnl{ 3Fwu1Q- JX4ηwDPQmF69>=|t S2V# }b!Á:Xas7AI M zތ7';4DГZk+X�][e_`W'?%=c~3#QX}@8;kal4\ooFXľ΋&bB=IĈE*(1BXs[$P5ؽ$$70dA)i<n-A>ں6xli<Q1KD. 됢PSa9ZV[ȹfFK5D79 N6-T |UԖcn8Rⷅ1A�l']o0x=IQ96ݾM`ѷPd9%ij[V zN`l&w0.$ %MW�4ueQ@{p@Z^>zc+S M3dg<MM>_HR"7# 0i%-˞d6 5L0׶Ҳ$v%qD"0.d[>0-uO�ICE-"nxxtFZvN׮koook!?&- gt2! 0l!{4Դ]JzJVHL1\+4s-{q6<n1$L5L`%~S3r�Y9@ !L7Qg8Ⱥlt3,vB F$H;Iizvc;q5}Rhz/#W_k@ |[Z^ ЫCG:K +M`@1pM"� k9K^/VNv~XCZD'7H";P iqo$E: +uu5}L>F]%H r-^Kq�X4SkY; k^CʵV;L4%z�M5`,1>KbKYাwDYƙgElWF͚5(h/蕘nIN" `YϽovQ \\QBiv aLjJ͵ͤGg[{Ioue>9BӨ@Q{-x-x /I%pZbDε6Jm YUa6ǀ� q�H dJӝ4uI8h`c$~⇥Y'&2Yc]r]ˍOXdL5#+Hd .q3bl`yXLNw MchO9*Kuv{@R9 By>,ײډBD^i5q[';nH;i3^"*o͂\ig҃qAPfB"Uv({:%7LX?rs1BIsHD!\�<.f!Fv#LdlN"k@N}~);6<<BD.4Q\kP\x-v^Ed*#kM 8A g&@KB96'xs,E'%Z3gWbr^JN+<ZxEL8A <kN~B0=+ =0fvyMj i`XW)DP;M4F'MgUhRd$#PZM5=�9� ќ + $ŇGL$R7${vKkIZO�Dр<q5) q�J{,5.f[af2-,LѳT&C^"iNŐD/8"xcdnOb3Ԣ9Y*CN ?>er>>mM5=tw`@0|ݷݺs&ҒЧMHP!meHF[kiΨnMStxmnk!q 3+q'L}ټe vF&^r7$'#/ISCx-߾2l>5K":Œ~'*1EWI[KJeNPAΞWs9p`oYireEL-Q6fŋr<SRH z!j kFG�_'F> FN{?|z;6= aX-Et$�$շܴumk5b$#[{}IR=Xc�`}ތe�tY_ÿ'n_҄Nq<۵W;!ؒF[S[r-[MIRgI`m79.ɱi1 9J:JXϜ\:[{p|9fš Kcӕ)<h\d^(3!Ea$ĊwXg,i|÷{晻O߾>O!F��~I2 iF212`8c)^[*ERʞ0,"J-mդgF`4m}퓠HD_P޳5 :G0dBISI^xKX,wȈDJ T#bIBn. 0Z1}*O6ǖ+S6SDˡ1DDJ�s-"`c1_%EƇe-h+fCUVq 8rL<gwv~i׭~g4�c#J�o{VnwK}s[ 1$v�量�:%bTrN# Fimے|mws{7|(XL-Νnr(@@ NU#$MQN>ZpuШ[|' D9ɼE쨼PBDJT28g6TFc7*zu(}JP4rAzǁ#PZT& Z!p ,`QO??x#['v}ޝ{;N@N-SoO;Hqyݞ-MFcWjjۓ0,jT_cВD6p%k$\#7Crt{u2ɪGZhs4=N/iJx-[mu~PJ ,w7Ho%G_F?gL'학bhΉJNU |ĉ#fA3rr V6s NΝ[ 2vMigxaybrf欀VgU&S)yY U� aXJ Hle>sxas OE+}w[oߺýSoJr ;"Ԧ�_LNjڵT&iig�1jj*P muI4VmInKzUgQ>I|z˹?N:?]gsk{4˅\Cy7\ �~nYo#i�m,B_ðeO}c@=uqnh\ʡd5T/KvCO5HVER@ˎQ<zmXtNTTP1hoQ-EW,U+E3s .ڛ3kbS|{DDZـ112:iȐp^~f>U{EMK}Snw{N1r|Zu$�2SUD" 'Fs5~{�B(Zl8s㈹u:#_]߯ew@ys긏s^yQF5vfr$"~{,7F(1Ќo N%X9C@7g)/(} p+e1Jur2zR<UбWr!.%6ލ ,zXXձ[@E<Ok1^]S-Mf%- 669%ETVC("mgwO>E6!{mil* qnߺi=u;w7Pt |Iu#N^KQg6^#-C[*4]&W-a?vJ_ޔ7(Zzǭ$stw+gl^DBgqbI$? #vlY�8!1>t6P"� OU84S)Trbρ3 rO{I"mcTc/Xd9Z߱[w7A3.-V.ܓ,,L8<+ycAtI9М(N7$,i/BA|L[[ߌ9 ݷz~�?|{w޹bط#k'a 8\>m֢joYmFJO 8x"Ld$94)p�^zDZ�zǒBoj"/S//ߔ]q7dIZaQb*XM+IK㖠?^OJc,fB.J' �.DǏp,1x7*lT>PrҊ`=W<]+jװ<T=zR6s̜kt>>%* ȢjH"cUU�Uzl#e9s2(&***؊iIG5"@z}nk y!+rݻwy[Lvz;P:iSQ [JL36m6Di֌4wr)l{Z;tb@>nxnOv󆇳r~$:OT"ER䆭˟Yu!`˸FZ3M~p/htJX-FE"{3(J:؆ǎ"Ý; (Wiibol:'P%]RW<S_QQIX'BVұ*6NL9~9'9/'*iCCl|@酪/b`tCi<?=3uN_pPbc!w Gw|{Ȧ;wPv(/B!)~^#3hXR'%GȚUD`EV,7"P\Irt*pڌ]&8uus-;e>!(tFfz_y??Hw8p>.+_/7%?G/znYv-ͼ'*|4u�߶?lˉlk$Hr4-?v Ä8c9[ )82Z\v kti i( yL?KC4 0(c-/8Ǣn8=kK KY@펧u)@t:8g~)H{u4xy\SPop3kVF"%9|̝�kJ;2{ow3nE?3.V[aB\x~i!yyDdiA6m~)s|`LpI$9+xU"n6p~<'l뾵O4GA)uK&)X_=^%<1_/qg*xjdԹ !~<.55m7x<�mgA@e Ru\DKV8 P�2CQK4 A6YcSŅ/a=7&ac,�5 ii܈PAnCVA/԰#D'v9 Fݽ}(92{v巘Kdm%J[?�zB'Fؽns6rw(NE$^4'QH; RnQQ_۫:P j㹱1KӼhn7ت#iZJSE9 $PþZăʹm G!=2NRQo�}A~ɒ[RU_.�KdsO_?\xeg\DFBJ Z65kpmm'Dj1{c,b1 #+A)RiFmSQ;Kyv[iV a1;11/̍kRz<g:iݸAL [v 7p~f:Yκ%==P0֤O>AN{4<ȩ[n;?M{6Sַ"N"k"ť,Bղbeird^$<3x J4 ꪝ"F<~:3DLzǡܸd4f#n=�8(7Ed/ݹc^cG[?af%OǒnHOI_Keϸ<[0`?<N.(L t?(z''d os$lxA Qu7Ц܄79R(vF#F<N<b`xs;~sJ>,F�b@h4/=# ~߷/7+d1|d|͇aLgr"88SO߻on] }{[Nbb|r~xTe_T/8FU8%2/)hVHl lD^DsE_).9P,) %qkR.4WxmPsUw4RG[W}G޿(y� hspք~j ?'D6C_ZTdݼt �*-vM9n`,r7\Z,$FGr쵝w9F"N8 vU*/sj1z%1R ejX_ATH>vi8}zŗށΞڞ%|?{Yu^͢]'89ʋP܏FY6<2k;-Jnoȟs- (O^}6zB hӉLT|/x?LWhCE!;rD|Vjrhq|*s 6g̚Rg 㥳S`x<߳'y?\,Z8 z�h$Rv"&% veK"$̇OdոC^T_Qhx�c@vDwoݹOޭ(+bʂK5œUAAQQw(+靴n'`tCS>y徽-#[ҟ?pS_N{\BI>g~l"l\&v9{MT{&1 8S0⽴ A꘬ De(T'oz-1݉T3g)@F,gE:g QYvmv$tЫ͚9h S$Ԯ _rCwŖz'_nxF$Ǘx-Y(΁9Hoi GTU !9['(Prsܺ@Sf1UP# ŢqA Hn{}&SW?|3dmW޻N}u].t:wSoվ�1Ԍ[6bDo}r!ϡ#0fij&= I%@ҟN &$\ )^@ҬK83 W"d)PPBJT\ڊdcQ/bez*e)?w; Ejy^oy#4A@  &z[Z6fōرn9ȝYJUlj Qϱb̑ (R{S_)HO.tv D;o\ȿ$j ;t+=(1F@-'�bC蝴Nur9+攭Y{ َ"hҰʜ=19ю'jn0T]T63*?+ܢX;zqEU )ڲ璛0'W=GtNwCBlT:w7G.7H&C}Dz@vƭ*z!,U(;JX99hbe1 1aSGkhֿ bϤ/Dý7G_v.$⬺v|^OBwWdKϺP�J>pDi?-JlL;;H^U+rrDsC[Xgf1+yʘ! #td)k׿8ZV7ka2X$.A;A"Ϗhv:䖐·-ujnEl,Ң6޽so-16r}^c#Ewce,7rwo]g>]}e{hƽ붩{ҷtzL}Ֆ՞?gRGPfuҬS6+{Ht*W߶\[O1UE*|{Ŕ0u_W#$R"SZˀ( ?1A]jK"(A{)t1X  ,^Kw%a.1;wil(J%{?OKoE(t^Wȋ`H!;u'h!F?{9z>bm]%7/ޏ(}~4zM\[;KFE֚zKRPbSVxU dF)˔1)(lH[pGMD%/?=X7W=M}5d煉Iq\Kw�@9-wo=Fp#'( ` nE=vfc$bd++:b vB8IFk`z=z Ά􃗁H#IUoڤ!X,_4H0xc^rBAE/M&޳'<JM"F</@mHJj¾=<N{x$sR??;zD _>x35KE0҆%AײY㖺 ) C!_U#ym#FǵN9ͭϭDwnh+ ɯ?x2b� l+wՎIrb7 _1YNĈt&uqTHz�X??2C?}_S?/#V*gbZnRߴ_Ƶ6Po cmnߺT9xXΦ;w6FUx N(kQIfK"tu7�}b63D/l[Fo1I(E>0X%"CRi{l`6~~.?9?λ/F~�ÛH?wQ�H_p̒::^qlZ^vdRldm\{hYDZ!�cH/ԭi$>>;bl=fg{=2 X̶V(BQ),&<K|<oEo3k3Z޾ݿKGںjx_{mo:dI%nnpU= Vi!j'2#ct#ƿf;!k:�U$,#R]*@1^LcyICIWEbD" 6( -O6mn 7A}Uzẗ́?CG޷Owqء@$vF)5/k91GT6V;NuҜwd3`jOLfxdoMv `KF5Kajʙ|yU?J7_K8W%#D=�nf3u^7 p=VH 5I"q֧ %"If4o)|Qi^C 3# !p7דr Z~d${^2<pPfz�t ߴzG[bZ^NʱxNʲh[" Hi{Ӿx+?J#j'- BEl{-30Clmxةˆ�Tu\Gd:.x�8و,PCY49 .�\ܾsR'_΢8 F>Y |q%ڃ+}tY`z`I2ypt�9�!EvY6lvjNұ>i7$)xw"M1y(#r' h4ڎ HP 7 �x C3i'99Mni=K,_o'Д=ֱ@wP}3"N# 1nmor�7{]Qd2dr" nc(S*E:$=X.l؃0);clԵp<N`w3 X=<�w%ݙQm&=d y:iBR'M(^ÌʑU hL&Z42rƍGϙ�p;Kkuq)uYfȝ4@B�_۸[xBc%s �<,1pM[i %@+^yH!ICh#Vl!kM]f8F@ :GXhbڒ! jVeW;)Xmy^^9!qT5b#Tb-pkF|}x <TwXhr]�~`4G[6Nұ2Y?$=D4N *(!"7{}I,q +4ur/4NʡGN3s=<pݳ{5ַ4k' + !B+ $Ɗc0(4uq% 4unUSo˵lhs7 @ң I^|,8_!e&F%H*m#0גw[ͱ8Z9#{�xWA39zf͘<.;i>NICh HBG nƶqQw߫ 0-pz/Zy\�$Qc)4VA`5ۨDq->/66OX +[ Ms=I7]>W(co$1-F3iN>$b_Q>#y[*ۛ&:' Ő=7؟ꚚXc܀?Zc!F6@H"^9aK �("Y&&$|wMwMǎ[vېǘ Irx׌kňx:r$Zbwnnp\ IM'?XN* %DTDV\" 9`I M`1 y&;=āUe F4+PtF6ti,݈Cنul Svj1* `ekN]8A~njp訯9,phhs/p[(c&@3iD~>h:nNPny�<伀u1$)Zt><f8ni3iV,BrC`y4;рq qq#&͔+УM2c-;f%M$ Icb$ 1@$X mHjr-I<�Lỹ4։0؅!}醠?tռ]4Idw^gva#  ) [ʒZ^<�h?zo'8yb.eCbCbdA,(;n 74x<�,OB(7G’, OtuAP?-n.�b9|1<ŤB-׾ňƝ&ǭz)p%0t˳L�r7_pǥN^kYDMz iT5IMgiAk$n֒M.{pH�@N$fF焿\\N̊fl$g 5Z{wd*2+rk-e�WW0em"y3/Q );pl,rK&SV k'͇m,l?a?[@lQ#bI\)Ơ}_Co/i{�\}er1/m-Q89:y� ˭Ly%^-Y#@sEJ1b_ ΋`s=R#d~H<�O]�ǧ0[\�\e zV]^+5#W}"lm~Ayrft͒MsFPŝ`wC^3�6AF Hijm?m3N]y<�pĔ-ۅk):-Y~G|(*:ysnrhOApߜTqbBv{m43(!JllD]˔w.tGoQaxx8st1W`4Ȟɓ`!Fk8T;{n H ѿd,n#W O4L'.6UUfW/:9UbNvYWI7d G JӴ\"!޸A 1Y_;X<9�8ޚzE,Z m4awBue,$6A+w!hl!qة*}5=&, m#M<{{" =�-~[T0sŨTo-YB/3Y1x׈wGVMpɍ@y=˞";@ד8LZGy]$Y K$+4^, !#$U&{Gv䜘q< i=5=YNe:x菔8^ ˺QH(4b[&tĒvsspFֽ uۋܨm1Ni8D@Nx�#~Qv8Z k}SqU+?8R&؊\p\+ؘtIXVn{8F%vgܲc~Nx,Zcwq4Zhl;s#p(.%r u@< [Ԝqˎ9~n-� hBelVHu�H7 Ĩ2!>qZiD&F<'Y* ?Aqp-;G͈@08ܘc5&z ʒ~*UN"vDZ37wSңWܠ�1e'ܲ"O6 FIu* dǞ!f ?-~i >!wIkq-*M^0>BfTۣq==I#nvIS<~G\bԷ6555*Ң4G dGFЄR5p!=WߪМʻy8~Y|K8%fTM tyBW *&hҬO3E=t̉.֦36655jT/:�$Kˍj "?8/;T*X5].CbVᆭws|�IȵsDNIw-ib@Z,4}XhnWA^1U6CR3nYTsx%eԵ5�ZϜtywW64b8@ 2Hj˫X Y,?f:_%VKW5THmnNKBq~#R"xLXDG^yf-Jyr!0TSIH)TJA{@8"zUV.yDkj�H)O�&tƦFKotu]վ!Bc5�yZJ I8]�ÿYJ7>R&OܜW7bIw8C} A\N$MӜܛ>GQR Iчe)Rl|]+JKECU55WCsnc}[⊺Huw�`m2L&Ĺ .�@!@a;ձkq 9PTA^(fia~*r(XP(uTgi[ IX/ڲ(}uZ(|+= *!g Bxw׳&ьI{�|ι,ZUNh4i]~bd6cpdv5yv� fM3 Znè :կ/-XUzz޼nF)y\QVu,جp@vN @ex���IDATŇJbi r3i97]4+6!eQvnP0IQw R8\oYN84ܖ[thj Hkj՟m�"ifn ,`3]36YXr 5Jա 4eEѿGf-K ^%kU'Ei_&kU*'@$(|ӒT*x}ĂbGXEDu5MbW\W6+cgAaq{OHzʒ~ V,M,[R-L (@Q Nvj>Z.�^qv =WL�hDJ&m錑:3A*k {wFYr/ 篁V</gδyVUN,"*:[ |9l]͂AVK%2T;~): >=a0‰^;:5.O'+#p*oOU݂@إ;yUvLeGx-{TZnINZիØH3̦>s I?ߡr?C}N3!O6OքktXD^]V[f2eO%]U,]P r9,G8TL^ ;G~UЁQzwȅJe/寊X&G ^ ň@<�G)%jb%͑强 /WWd,?5x~@/''ظpx� ?[Wܶv3x' iBP@g[yoƐ6x*/ TC{1I$mC /*�vm;q-1k[i2Kd '-yLazD+r&EG؆P[ZUU'ô5E{yE{fg4ǟD;5b {qe_yR,z-Q)ຬ[TYDZ+褡"m�� `ԋ7xyI˕uEm+8 4U,��<>ʌxWSSۢ346U֪0L|Q梂OEkce{jiBAHmGZXEbP),?-Luna;.K.$>#=&iU'ΩK}z͜HYiYm߆Eq9y\p]� ?^g(dʴ/߳)ϖ.ߋgZecuKBm-4f!Ff4d5Ϸտِ[d*mȺ ޡޡo7UNT<7`ejIe؋$w MGfAN !b厜sv8_斅h}bI[#?- ʓɕڞf@]]$[u: ZtҜ=S`:sef^\U.$EιO|\�>jLa4 zp60⏩w dڇme7?:/kKo))ɻE[V|}LAA (tФp&HJ̨o0b.ЮCOW+<-ª5^KKUrcԇӕ;Ӗ?.ʖ]_ʧC4 'tDP$(xrק+$('湢j(2?/ z._ewr̤qpԲYDDZ'US?2)vavGLݗQv4h^ەk+'uOtץ/Q_^3F(1p3tz jktV (ڱo`H$ږ(u(ˤk_+|loDiUaA6CX*Rj:J`ISɽTk#~َزR~Lib4(d}a(s᎗k{/FٛMQOIjqEC,o6JmC)B)||pyM $zk'M+桫s (uuuQ<)SĘv;}]sbgp <zcKm&Kci(1v34tUb_^/S]S.9z3~5iY?w 2Fit�Tv:oFnN } PP^,Hl+xݷhg^^^)Y TFCUܼŘvo!BeS F*�d4,-֓ ^JZ4 Ix NPB58</{M/\Fvu%wG:YUxԾ}ǢVcC}MIX P| i(\Ѩ^mVe~ VP =V\�hNGVFb5fKƋڀaߓkei2ufl47zEWX$L%V|@el)=} ^]vp&tQ+9ȸ^^"L:W55M9v8j{]aEl&m`hp^Pis-v]DD[~~?](XמT4d=ʢ<!�*VO.` Io"G#U]{S ZNXWXQYj*X#�>G_ lo&W@!E!ӬwrB[4+fсUo]@9G.],�\jXX4j~@zrz৔)' v3=N.�"Z[0dIv7kz{>,~#ko)ѝcyI^Iy_PG}dkѠHbVm~5J,P#0@%t^6iUrUU*Bi |tO×AzeAD4:69os؁caIZUٰH8ˡ[Tr66ո V +sF cT$NҤ={|nYWo d}꦳==`& XzYcoz]ĿEiѶڒUx)(}.+}iz}J3|Ci(\V BV CA ǩFמ"ʓB\!}}a܂1bSNO/]!9- 8@9sM|$LMi!;J$!'[z./wPLpVUU[#P,B g&�6ih*mfςxEZm{�Czkj'fnۓ&,EqɫqՁ!]6[g}~Ϡ.%_דwKvn{Β@'$@>1 pbD@ba}H`&lkm v r 7|N4J746xG8]CI* (V ڱޛ3 Ա>(1PPDU|m1:0D5 M2-J䕲 s w޿p"=0*&Y|iyu�w$I+x�\mg,,{Ikz$}۶],lI׷6  _5"I$�TTf9[PuDT$ �;˱i*iյH4:+@iR2 r#+҃7/MYkި^")5$ۛSE,t6F#[ Q7C(5*Ja:- @39ӒXm,P3[>;)-6b!y<m2,/=Vd?Qޮ~P?NPF @^ ^DIgj[H F P-BEV OMuP&bQbLuµʝRe4'9fH }ނiXTIY#,"^oOt$HXT^,+JQnQA'6Xp !RdP�A3QeM pIJ G8͔!~kY Ki633Bg4^jF6f2 v;70ЏQրF ҪW'"rH)`Ė :a&RŒNg�WJСu�iz\bLliѶU/wdUǷ,ټjm:'-1"|NZV0EZhi4Qm A"@I8A;xZv|J֤\ZJeZA~_ZćMHS`:'E\490m$Ж6"4[ۯmF,?mv |}`š_p3hl]7<sFoNM MVF#MhjP!y+Ӥ;~Qgm?E$9I]}a"ͻ8E#]l6x/㏪ʪgE)7/TzZr΢sQ6-7 �p?>d"-] I0eX,-ytP>3}&#Ո,v6TM4Lփ #sx gzLq,ˆz_(WDZ#lPNV|< ӼoWL/A74“ro l'D4R8gg -$$U ($W+,|%d y;Rf : YU An.TD2!.(FMy!~C BaAüAsd"L 4`ڊDf[>6–/nmlX}#HA/. LY@cGF[C웕1 owL;xQgYXE}+&H.3� z}y]K][]&`$א,4in|5Չr1x)(bU39)UǠ5nG?;4JiD^||ZU1a$\^S SWF,#Z*r`N1,`рIko֜U<HIG?>llj4T & PFHk"]cc?'SSU}x_HD/,,DG߃dK]O/\:wXUnGF zXvRbzm<qYq[etEGcg~cgv*z $d2,2 W:\Ss6/PLYgMa1L$� F`,i0^V ``f_a~MO;SU뛀H"| � 4,pUYsJ#4,&,`tV\q^OW,NzoCgF )@cIpqF z1zKfy3.H]8z%+eŁ*CgA+ (g| FP�2 8�DUI}<�-6�6rM18QJ;PuӥW9a3iI>4&3!k,@2H[D8C\@k'j5}N=z^dIw Hvptʌ~Թc^ K3+~Xc?Oƹ{-WL"Ғ4&tg BeFr,q@SXQt@,>})%J9xs00'CIiYȼ$juD,B]6yC�.Q][ (Bk;D.POY\˅X H;&eDZ;FGvD#I\ DS ?ɶ;z'vځ<C5w54eXv͋g[Q12]EA\1#~ ֪LDۭrf$,.9P}"i}Y򎤬`Hn,BCQeZT"Oժs'r #("WN(/׆'7Ĭ ,F2:4rP:T$"/pb$v5~׼2.вDȫ2$0HFE,8eom"Mk>΋^pJKkYXfuٖ<k8Ɔ-:u(vtg X 3聰Ha%v=n硲T{ Z*>-9'+a/R믰ŋu[9z55�w%Y Jypp9$,1+I, F>L&vb+5ug7K ^ID'�Xe)YGd{K�6krT2"`D,E,EDK' 'wAb%GUO[朿dx=quIUIuyKSR9Y+m5._Ѓ5be@\+< 7x+rc,hLX"VOI^|wڋY\�خxE*620~4VāCv t|Ik0#{g%okc`d-SM6BuPJ>fu�MoeΤ-41\j9ONj}`Ɇ5*.緶5m'4Pooω7)\Pz`ΊO'+ (9K Dް$m,6!NPS62mLc+a H`lFVJ i# 1Bn@ U[#Eh gh,X"3(f]ݳ - n?pe<)ޭx[̊j H q)Ei쏂&P3= ~z%!-*P|%2k8�MiA>%7k�E�:$]^SSs/"N㫱Òh^-e,'KBFΒ୭`D+Ұ2M5b _awԑv[ހ\?e66/up%៎-:FZbV[QȻ4 ^}$' MuJ\x (vBavz0r6-V-)Ros >WPTCj[v6XymMf1EZmT/s [_<ח? M<:?Bˆm+2 - jEXM&D&#n?S\s&!|J}lcc�wƑ%b.�a}{Ĕ %&ljqvܸkIG H3!7Fi#:vѹ:%hZw~v }b&Yte> in2`H˰x%2PHBH+Jms>t+ns[VZyc"1mp,i:m dq�sVAƹ 5DZ]F(W[T~3}Lൾ%#Ngz n�_"\uQu$ZdƈcDDI*HhFr4sue]~`{ͶblI#fZU(&fvHkїqqڬa{&{FmUAJ@&v=d ϙ؈CڳzĄ#f'M;= >xDFer) H>gI8 vjGbrq~٢s#zR}iiָ*U=2S;i.�f pS!B3XQb$j o3-FE.i G~Fߊٵ1谈4|S@1ZAޒp@' 7&Q:iDʌ[]::Cl|xK!Iwa`hր> -uߑe{!b)q a foQ/MvF�ՋF&@"TT d46ɏcs[(:WS}BbzY7c ;MШe FmS .I5GM@~A·*&Ls`d凃R)`.?;]�� Éx�5~[+ъ4V ݊t Ik;i~t~p&, <kW`HQh|Fj Yb\An=K$՗|^3sVͶI3GĮ/^O(1I,|a@mlAL�a`iI L0j%h@ >]v+ɋX(c2)%jj lWk7D7zM&f ihSg [V9M@~# IEo &Ɓ%!NT-ɺQ Hc&BaĨjwI лIxd^:KXr"9v`#FatM q9a5.RԛQ�1~^ߚ'o Rjy_o0[Qk!iY*k`lsffGHBr�& hCl4MG| kjVH[}YXn^БDʆjAG۩ѡhWX[8Nr¹+&6Z\APRE]R[-u/?t�&r�Vlc RS-  tx</ ]h$V쭀&K@_1l"$̕�WBR%_տoԗHI[D5* msQ#ӹ,0E~26\a 1qs4"P"﵄ x<D>*Zn"͇  ~|XeÑoI8F\U:kAC=`I%Lsm޺e|֝ .~܆%,7ǣ3e~fZ;i_3,.�VgrGBgMQțCS<g+eUAm-GN Q8vcԄ$cXSj^v߷uI-zψe.H1xME @.KMs5#g~J݁<I!fZn,eRE0EdQV% 74,9K[PP M^!QvZ0fFٵ=Xqg_׭tym`=N`x ֬UIFxJ@#981T.wȅre/;Kb {.$VM21p͝<^,hO詘xsyOZtDyh gl4 Q8F9$WPz0[|.I]_[8׎`WQf-gr(ܲJ_9}o@(@A$FUF_q`BӠ߸kăk8sTΊM9kc텕3*sv;<4۩4_=qddz\ZBIjPeusӍso0o+4_ZuIQe7kQxG á'';9&3ZQiK$k#bHLB,"NI|le>p"9y+,\t;W*=\J]T?kjoFlLhդhvzWꕊ&OS} yd\lLkG}* 漢2kB�AV", `Dw|27}!'rsȒXfFqէ^vAҞRhqLR|@ʍг 9ЦtY6-Uf!*_5X5m9x"m[OR9 =]1d"|I0'.k("0HD#~_DvXfA_Ŭ 6kVXT- a"caIV3N"J]zeripz)?HH^(Ht (Hlڟۯ5A> 4Xqzo2 J`1L]ݸ ku!WChܲU` Uo8�kߓa{ŗj b_O>E9ײ3r'$Z$GCpd#ۙHUef̋)Ul y'y/wCI#*K9$VZM4$�rx'3jQ97NKVJgZňZټ~�|wᎎb#Sڼ&YY\氢\梂c{Bo`ͽ%$d͎Sqw?00H|Z9Ojise9 ss27We.LAEJ?r�\ Ix[3ـn^0FK&kIb>rѭ+O ۑY:Gq7̚e͚bxz(w�, J0r3-7~Õh &:%* 퉉+,HIS@̾O<A/{76lQ~l^ql6Iun30FY]*sх=\l \NTͯm8 @00I3 hSY}`Kк-TE-xx>SDg4]W04i~ 6<5+%CI P>>F]73&N @uXӬpb>KBkNy`PrSUU)+ +R,J+̞yؙ;SKgMP(7K =�$ 5>\|4nz2R3$r XJ&67P@PeޔJKg+ J}35(-P/ D\ڮ6i 1=Y Uٱ"X*fړ#My XV(@w]p-Hpi|R7?=n}~ڗo/DE2pSp5uB 7S,+U4L Fr[naNdYD J$Nzxdg^?9 UX< mm9]>#F)+Z0L?/qޠ$$h�HG-^hk)y[/[͙FkcHJ<t9WO�Փ`;yhMPV'! C{rVl*< K -y(yKeeC!(`F9D@j\p0IaE}"y~|Hr!ZI$[%sD8Iď*V&(Y fribJc< :Bf�UY{D:"wb4$S"hN-|^4iās?{D+(Kbwe6susz,7~26n CU3[*A<TwɆd'"KJၯ.r&k٪k\K]h|ͲK6p �fّmtb$#u]w2/Haٜ)<((7[ybΊREqIrW7 6Z_O?;/wk{y! Wk=Uy^+X6JUh,F1O7co.m%wbhX~uтO)NQ<+>>'>?|^<%!h2q4{-MX4NE{GBJY e-zu4&zm}8mMѵ'{-+ƼکI;/+{=HXس5¤�7{$:iNJ>Gp@G+\p t�z8RM{Uqҹo{q"}! N[]˙* Z6r-G_mbMGm'&$CRa9?AҴ^U3u 7�UYDN`2bדQ|]{= \K-r8}|۹ \8(ݲ*|-Cal, #6['mj^󜂤-YZ]IGAme0Gx/uɋ (/ Qδ/eq["(D'[�1rɨؾ_%n7Gήm,L"O@,#wM.Kȧk{5...bOFM'wK֥@O&(Ғ@e+1ˢtur64?n qgl,'8hݲ^Jlwm}'F,$n1rXdaIД= .z{C"( v~b\u45` q?&0s>S02r%f[fO^k\KN i,{&}9K6̘IASLaH]VcvHRi˹USJ"aSxuX#2#g_w1_xʋ?N?%i M m~}/$Z͒IĈ&e^BneOG.)Qx,B/کl;btٮ'cϖzvCh9Ic^KbS5qmF-K a9߷4z͇<Pd{ Ј nt?WrӤr\-ƫ#d<i5U;LUG+c!(mIߵ4XYJt\} _pxך\_)n�%7h!L$ f>Ëa sA+x ᛕB&B0b=?_gIOƊ6<[4w "*$v2qzisURZez%N,I;׉\hKr%$)Q,)*<["Z9\Ydό,Sc?6@Kը{!`JmyЭ,wo[1CJը9Ʊ@UHrgƑ%o,GRݕ$�;( M\%E`R̢XU_ぶKE _N_]RHihv:HhDj3QQ<GHnŒN:E7O4kPdʓfk9,` Ui!{"PTד|}kq[Wٛs\V5aqQSi*#=@x$!SD3ǒFKb.]7Lõ\9(41J௨n(:-M۲q~+BUо]оz V?zvEobN1iL�21QcII:~E.&H|4J*٤Bel͂E^[>JT&`~QMZ3isp#K ֒FN\Wv-h2j*@Dx2-7QLAgߔ-r7HwmTfv(BxhbX&%9{4rQV-~ 5'G|_>o dy~8$FK`HqmR[58@T%3Yz�mN Sv@&%Ee=J.Ujp٭^_yq ZIi6Ϸ_9mlc @$<'%WJvMZ…^.aI:Akw[&:jRwCHwܶ%W4{7hLDy0OKzk7=7w$Xhص9� xf;q.|)JlHIeIС_JwY廲]=oW\ۖ'7+ M2K u 7"߶u,~QXq1pCLҼ9e]', Gk| /+6%MfYKBr�ocVeW7(UG$+Kzm&Բ2.D^f^J'Ф&U*וpQce`JE Jej-RDo\!RYsK/HM)8˔Y&bA+˚0GrQ[a�(xOі+KIHL)q2Ӿ^1DlBH^ پw_ cUY~F\G?U-U"ҵI;K+HLdHdQYApr'_ߌ/$BcIdfbdq!8͓c+8?p9$x|W-c-Zpd%UUu%!c7(qĒceI(->K!0!Hjxe]b<�>VTii LQ$XD̸M<K7#qƱR8<cHr#R$6INWXY�ʓIfbY1v;,Q6,i,!~'}\Wb'v6m_t̐{jq`Iٲ=R-$f6,I<; %?(wgֳ>MIcs_0!_KªHG$$c{YdMKrƲn,j Ʌ9�moŀ`S93m1D qlKmrYDǓfIxmbYs\= d-WcQSMsP$F6;~/-ƯaK{dIb'Y(-N~?,M0Koxgz *|z7Yڞ2V#&6L-UXSUy@vT|4DVdIٲXG%ۤռ] I ]QFzv^AL' |ۆcw뉉*5i!oL/hCeIUx#QfIV䤱$'a<�aK=C߿?<|G70d %v߇py[찜L0( ZY HºguDq%e˶ 2I,MKr%{{�2L2uhzOg ik?PfBbgA9YiӖ?wl<?뚀G#~[ qn(l<, l0q>,I쾐qY�Hug82t+4yG /"moB#;PX֎_hQ%2#tĜAXCIxD, HcI e,ܭXKs�&;4u>A) LI;n5Mc^Q# ūp?&LZ&=frG=^ @ f(%A(E ddLDyZm!6Ĩg|tj+{Or5v�|0~+ҽ1)+¤ˡ,�ѱ")ʒ7۰$6&{x�hy灥م2= ЄO^n'f @?TQ$hʲ$v[D֒+Z8?tG[OÚsx8fØ-B>Jıc,BS%?,W{Zc3fršϴ&LNK qh"m 1^U'ƪ^&%`ϱB,dZMM6H.|`?7^K8o+nok$E, p:8V4ەT= r7$�]'kJ_=2Y\VhZ,M _n#K>R<+E, mՒ8qoj'q I@֟>^|p]. 8=x`s^wCI%p|=qp_>b eI(Ei{xX&YRy|^7&R�a[vgWI+Q}G1`FQfr&|t=< hb۳ KܺÒjIK`Y֩Z!M֓`I=|ţ?]?G~>ng$I;7_FAd.wqņƸ?Nb,,BV`, vF˒ '%]y=�<�`@3G[wtx߾yGEeM"o>*}-_֍}3 0n<?rĒpD}zX-(IkIb7$7�Y$=2u_?mWs~󝏶c΂uG~c(` .�<֟f/KªH%YaѰ$H7(Ѱ$G�$e6辸,z0u/fn{K.sI.^ƑijmDӎD2p* - 46c5KLJ)6VsP@; 3<>V[u &US0ekkIrNrB~ $$sNy}>?;9s+/`(葷mSHNk sR$"x%-dPRJ><I{`åZ2nE*؎on"?2:Nh@6AH1AV`xM @!QRJbFޢ$ P.|%I�+(MBfQu4 WԜʣꍷUԭh0]3N68ԄjoCSFKRhcS$PBd$J IIˢeF"$_ԆsR8J"§PDeKy4{wzt=RX_N&A ZI~J4Je,.tִWBɍubK'ZYoߤ)IT$$JЅy"0$q8)jJ<�윮~#mn6Exp~qZ8VԞ7AvI[#wqh帪T@UT<ߎD$NI4ր(8s"%aFvyp,?in*ZImInOM#5YTV7ʩ~*2*><5G#?GF]gܭw sR�cKBk&A-nL6 JD$hD%E@IxL!%y$|4%%Z+z2Qz�[Rq'TN$>X|PF{2>Ή*i+/Tz Zk0&.?NoKkQ  EzQXYmr[$ČISRn-'`kjGj2<\ 8?,+ݹdpQEj3QP)i<ReG&Ө#dv{>z*8şf % "dN)) �f[8JbHw:D 48t`ϴb^*T5g6'KVHѣk*rnhP8L@PxG)<�9%DV>\>J%E%JsPR@)ro;yyKk6[KSざ�`q4rό֫26m='(j(]AH_Ip5C{�ttc9'lqq°"bD$hD"$J|&$8/#nhq?;v/'K'OT PsgզIrlWi],/֝zC35 \,a<�m,y*k/~dUkI$޷δDIQQo-4%xIRy�P0vCL''ADL/.OWn]T Fȼs7V}v;^Jjՙ=#Z-7=7x�N~(Б(kӡZqzJMڕׁRr)ɇH%EOI9oF<R 'EK"k-m|O'@ꪷ_3bgə%#E"vQݝz5-SW f{� I\�YRc[//f# Jb!DIPSmkB䑂IS}#t+Ӈ4왛qx�$G` YEF)<Awo܎̭TnP#5L7B4'虶I$<�^/q-Bx$c˳y!d1IĔ$J&=x(5-a8)"JZ AJ4}A[K&y�S?�P#iUǵd+u{75܀ P~FP=uw9f?6Z'$"AY\X]T7YTq2xʏM |Z] R*,ٺlS"H"$-WP%FrQ3-k#pҔf|X]LMQ& mKr,&s[ɺ}\qS9>K%I)Gd5|n{KuYud, pɬq+ ۏ孆v�g|.F$ bJf]ҪUk%ߜ7&OۆMP)8SLu�h[R]4K 9GU';$YXW1 I(΍;fOjcU)m]–DO${L0apVⅿ6C=AQF$DAIeyh׮]6ܵkW6DEINxIPR,nGbOKML675d&IJ Qq|(rRy{UNڌ6UUTMN?ř[BO~:XR]ݤj{Fߖr;o Ub$|$VJsZU$%Ej&ymH8)%H9tΟh6gbp{30a<�»uɛEh4vjԽ;EKϡ8r% i֧n/om Qؖ'Bcqd$Q7$ZJ:rqNWIJ&( ~^0dg ߗk| @Yۺ<{Wd$y2QZdh{1WI={83bF=�:mӇu#yK%ADR{( hsU^_HIo%ѶIVk<X:�L1D dܖA4ݘ^䨿 r=q{R]߰Ww:5;He~1^Q9Jjp|^Yh:�2zsbSB$.̂iW?%m`%( X aRy>n'*NX)^KbƄ �JZ<ՙG6qG!2$ԓuCEP jU&_7(Pu�J$ ˓0M�bSDKIdaQ[R$$I<rԘH j=Mh&w|]tsCuDydTۗaH7Ipչ撍W,p @NIN*Ji]0=؅J"$+6#<;4%~QeHIH~A7K<;JR<Iݡ{.WB"[;z26qdxj+5 HRQE.]VOs s7Pkmw4+(%X$VJBT5A7Mc%ibEB)BP$\Qb\h D^) Z�ucN KjWQHPkݜ$ WydѥѢv)@[$y:3 0-&)ɛE3%5U'#UfY)J]Xzo-9YS6Cp\5,& A!ۦ'yv1 "oAj$~k٥03Q:jXf [e΍lr+{1c@u.N"1@QIZD5H@JqIdq2⎌4GIʪ,8QrR.$= U,)Ӯ�`9#i\FÎ@-_n^K"03 , HNua٨9J*ݐ iU٢l7.½>l]zx!u]G4gPR~[@2˹71( è- *Jxc`$޺�A4ڥ~)}ʌB^X+ǥlOC[D̷0&Dh2\N|jpQCNP IjH:@SeM.ͺX=n6 #W&"W:ӦP5wEX %!EBk:c�]JF,^nZlQ sM_d˓,Q?URВu{ </P#Zc[;.M1ğ% S~; =o?#q 06%i|&ĐK2ixg`Nq H\N"xx% T彳Fl%U _BUs;=yjv#3EΗl m)R˓0$#,rAaJ;~՘tGxʸuCOԷ-B5o'\j4$9푦^^LCI]$؏DQq� Gwdhx6oٝ/F[?7RGw8w�kV$`_�'by|$dˀS {Ғ_GHm]iU4q{B-OX}V.�%%QD@IBlS'S=-S ,zX !s~{ 3v,=vvWnzaH:&mR? j G,I1(ϳkvMPPd^phIˏpm1o@Y/y$J"l(6zn rI #0D(l&5PkS+y˴﬩$F~^w-۽'˖.K a֥ma'9/itk 1Ɨ+1�m1AMoOJ+�i$Iky 䐖Iku04Ē_hoxJ2[ʲe5JYL&X:VLb_ct@g,:hZ7N\z�XPm'2dIvJ"fM rC-N7%S8 ?"w ,;r s~E'լEY+ˆwV`D+5dgJָZ[6 0MYn  |`H|jg<�BS'ޯTm;01N/%E;?|7 e<ozgX{;6DB w7@MnZ?]WӞxE 6iW G3o4GASɀ'%{'K:3濾@OI!�`Ub%%SDK"fs{L#7DIVK(J/<'M9zH&�*,8?1e6B7tKv,HWFW/y~xڭG0(Kd $5G?-@G0a:L@.�/%7Jø- v`9xJhW5A0DDM5Bzw-G^_-ۍ$iw V潓tdg}uz�bi{~_)^=e T3 |D)IX$uz�b.=)I$etSI)@IV,pQ֐(D6`2R7f" x5Ju#;uE'[ښZ;:p,DS=�1ߞ\R [QG;$nf?w$x?Z)uN6fʃۯl񣡤,ӷGh+]λ9P݀i6$4jXN ' .d;4DKJghP2(1+mPHx l{߭)/ ŠS="ZMXMc >ǽ}$N"Qj(Yf0H1D~I.ih +WPF掂N\mxKTeJJ]fs4<u4 q u5kQQVt $) 5N/4D*9$%hڥ)^)%x>e@UˌPOoUlY V>TIbPyCD&+5 RRds})pEL-^V`�<3`KN&F =>D5b _J YkUxaYyمv;W_CI^rM. ~;9\7mHCT9]*SPV#Q%ΗA)ZȂˆ)K�0<4O'>e GhblIN$`]�4'|ϏQ()^ʆ}vrgNz` ߶v{! F 5>*ju�fPY K" `zx&*xUOk*Ȣ+/YL2{rIt|b5k|IPI"ҐDqHI=NWMY;4E r_U-TEA<V"ʟG;7kK>SwMv߼ť$Բy$xi]A_TO&_v _$¯Cr�DI�i@]0G� M bW]gѬiU9:>%4Qxy䴅[P� �؁-h֓dfD:C$ E ~($y^npxurҸBɴasI8mUHJpе!gi+aԾA$N4mC~qHIPH^v56" JZHÖӷN/'YܜC~|:?Z(A~!z&n/ȇ&xoqGfP (={ OFEcYZ, LnMzG)7 Ma2hib}N)20s,6 }ňg 'M'QVYJ.r5JĤ*ZOU]o }~%7۰$K %)`:4ݢ"WE/5lyh0L{\QPmx`YdDmf.c;Rs(]7deOqKcV[i˟'JKדc 7 R,I+I0|ʳK.r9J^PÆ!;'wRgi_J X5n$tCtQ.'yYfփ (oi4gaMSHAK;"ʥdsSOꖀIƘKsZHᲫo\UYSx@!F"?0y{F2pޡJ,E`rCO@.z)IjߛՆ-r ?'uY9f{)ϿI9e#&g`5Q$<^o(#8i64+<TlTiֵEr(I?[QRFuGbFH{n_Bp'T9j I:Iix"v'''V_m4*sjKR<�1DsM ὖ,A8"%R:Dz�|)LquLVC‚^JB!n10jE~A>@O�%>Jz Q(?;c5LGW _C;SQu>IiB:z׉G~$ QsRP>9t|0%T"x{\<$w>xGv9 t8Շ}(MDC n^& 'l"(JÑcU){>3 =) �@IRn͟zգih$J7nmSB.1�[KŸɥ;A;/'/(ɹAcEI,J`9Qooykߒˇ Lyx%X$AN) Gߡ-pwO\&6DKIߥc|#/epz�1+$AfhJFˆ8D:PXRFGĔGu%j;CrY٤)ke61՚կrNSz-udp+Sd^Ke^˳l�m84rICdZ3EBs gwP. 7.-3?Q/CC@IO@"ډ0b9~ax]U UC?-B@EDxrIPYQ2ibH} f!è{12<|jvG]V$x4& 7s0ʶa?QF ?LKDawڇ>fo=xFr}NVܦ1[dD2)ap^- Ġ1VӹLAI&ỳZ�m4EHC)YKn@rc~$=8IP#N&:4Yu#nكQxиi}"/XC6>(|4ܒ JS5*$X&�46ԩRRw WзJɶaqҘm:"&eV +*r*FmrZHF^Jq2<Fi3LjQ4sDȶa;=%@v!rs!o>F#n1-%`2)8@d-7Q]K&A58J .Q% O-!+/M4^dPTo4<a,=^w#!oq|I50٩J1%k%A(zD;P@@ [ QB5*r2]/$H)r,:8.S(ɂ..fǿFm'˗ݘ|y'y@<>h#JB76<*L\AFx]�_8'JYxf(vݛ =c\ӗXdil61t)vV%ADS1l?L$loH3>0>g5 *OABCst&vsq%d ! BA-gۂ-.x83191zRUw9p:QR�櫠�Or{fb1gwi3-yA(hRҍ\NbSϴ{|�8/NJGS7YeLcXu)vVեZÔq4h:L@ ɣ$\^\-aex;-G"[cs^'MHLuD0" dTZx8i"*Zzp �QU1$)z BrVAxӟk>D34U$RzI[䔄:xU ԠJ�|Ev�ΰNΡ$,Hj @.IκRRL6HR)v]$gޥ5nˏdvS;Q/*boQRc.cep\S* dc咰 ͈9)zI�JHF-k&[R<h NMƶ?D~"UB c\ipWoFmB/7)`ʙМE36UY| 7fG0s/d{~EsK;YZPQ1I]Ӈ8,k̦ގOXb3o%T{CJծ1gRdTrjA`Ncm@cV*Wgi2FsI𾊝`ͪ3MgFdM&$LSGIQPmH�lyJ?Zkg[ mY)~*TkWܤ}'f8fw_u)Nq_B1ijoO7%n:n0n&� x)`JX~sI:U2oT[x_[6 5Oz}?aId҅.7ML�?%i;JYѯv,DIDJ#i6~J nsPL4FmQUże`Z~ %u}z�E|y`B_ե-KBUQJDJIq]M~LYkfieRN`պ2fl tRPg#7O9i)avR&E(&b)IN0RnV&o ?h3*e;pŦzg}-sW|ZټӐʷWl}Gh% =1vd^)IN0R3eRƃz{dQTyRu[Aljk/S6m1 vZAJMQP6q6%ICI%2`8ǛW/n]+g>Qnas[8`E޿3Tהә;Z#Xh%\ d3vy YH  %I7%q2@fU)pY N݆,Iw ݦæ[]eMf�.e:U6 mH~qPκS$,Vr+!J)&4ZBUW@;&26={QΫ)/Bz60&^V]BdH"Po\;OgiNF3$u Fn6DS8גvKBԂI~޲0]{EiZjj�^ۑ*zzIRBfaZa[d(uAk=KD`<؝TeDDIs#%M>kKk0jlP\u#^V2u6Y ) IfUF!¦Ͱ)D 5,1%V9XhIy-^˔\SDMy5fʡBvlݫP[ X{XXɇ"Q�OyeAI@f]Z3.;H"8X$#)pkiy86NNP=ZwJMv-�Sv+͕kG ŒF$J¨UJ"pi4ʔZb$^FbJgz-e|1ɸ)s?r~ a\ ${$aPd^V=( -!4iWԍBca#h()zN HM *yuqeūe.^rqݯVg [B`<�'^T$"s*Ԅ*d^[�"$k2dB0ek0,7 S> 3Wbl];M^ 5Ifv<Kn*0$k-�e'D&8+W>kh:f.~$tqzc$M %pV@IJn£dRg4Y'G,Ȼ-|RHF?"H~//7`pDe.T%)>HFIPkf�%5KlYfw:];4,3PͿΛ>|<rK{tFM@]TcJ$QҔuQ>#(S|j^tID:6#9fh$qc5h2zԲJ0( G4)RJ."WXd6r. *դ t_$#NL =kz(�ZK%,$@ʴBIflJf{Hb$S{6?HSLj-@WN8x"ۯZE%,$AiR̔Dz?;RB_mpkS><\cR86`R$Ci<DR$IөG$IMJ BB85qXy)C'dˀi㢤IRL1fźS,hJBq?2M4Jbm+%)fIzOIAk<W%j@(fZaB䳤Q6MJ$X.Ii#P[?)8)h-Ь!d(d\,h$[icdK;q[$II&QPzjH:wے 3k"D{1weOd/ae* ì$d<8(I0JRi8 :ijIȽ'�,Z:`^V* V;srxd&0)V(IJk H8s+ /de KcupNW;oWo&Fi"Po]K\&%JJ~Z$!S(D[lud&>M޹良ef.kyK$gZ ՔT(I�JB~ 'EQ^RRg(Fn+#~sVf@;B i9}Yź*7 y�DJ$oI$m?BEڼ{?=Sp0T2)9i4P\ּtby6ش1#K�$9u-!%I %GDIP呦4csRȵHt`S{޵{< [C{|}Q. w) k,LxaΖj -I oizo qmdTaSSi()>JRT))I!"5޿v]]3%ס25.o[ Xl lmoo2VxO-un<L)(AII:4)QR$BEBy;}z{N#irσty٣MW$@j 0C8"_AYP/~)ZP)Ҁ8D).kiR)IaV<*3r-ټyO~޼X@vǙn xa'G<)&#+d2ܹaACo$~J9jADI1R¨5Px8=Z$ 9{3=>h>c oz;~|΁z�4J@3S8|Ӓ>$S/QRl8hHBԐԽa:> 8(s8g 탃nWP2p.\IlYe!PiWp&% d()J "$I!l>}PN{J/|$ٻ(7WQ4퓖=L :T%IH%JFҤ4)i^oݡc$dO޵@ hےwql?httag^%q\qvvEԖ6 `Z;McRi#Ha)WiRh( 4=Wn˺y]c6&`CRo~mH֢n/.v _lK,X~BL24)$I( v/ҤKZcjt<BH͛'{ *҃O52%]۵YgdfKϩ. P6bd݀׎��XIr$GQsK%vk޼g睾wvH;Q Vd|_c^mS9et.rj뻆_3k107ZI<�RDS4)"$;!%s:逸~(ۃ3v9).lӾ;oƯv\}wf7PR/ ,8�[Am-q$y�3J>ӤDISSːDMI"6 h vH:z7gsPQ͌{@~K745#WD쵌P,SIpM%Je$J AI⦤y2|gØqm;/@3ۊv|`g�=⤔|t)TgiGZ#ZZߌhRIcQ½2!O"D)2J"2l()JDܔ$2gCD7)=݃=on{EH7qc|>. Scg)XK@pVI$Ҥ4l JIOLǙkǀk4vm~ tt6|HP&t88Q͇D|mZ㍙l`5gIZ `VnR2M$Jle^y)?pkHI:gP&i6fA$F,h\iv0^ײ|SˁrBqjVc&ݛ$&Q`DhP()ZVɸrIQhOyITeU;Ck@6_7rw7ReN45=P.WpN`5L@I�*Q&9Fn( Wl#$vMsOmj=yhWg(э'o qc p=<Ds?3DS?~rj (Mf%}JI7AI$.%mb6W!Gz]]o6c%?$a@gYP,vx $�Л0[&IJI1MJGI 5wcpG6Ic[ksGvu^Dǵpq٦p'F ֣^4Xq; H2ˬ, dK"%iҬ(leL]x()~:F,M:鴷=؝<�F 0,ńs^eŸrjM`vRt #M()-:'⧤h44w)QMPS7`.%qG7zH+L1Au-eJ%eƤ$I$�eFDIm=hs+ohiBt纻3Jv8Η/{9i� 1?e*L6ˁU%.R?2l%qDqR�d9Lg.h·84�mUN*0Եb k P&&QQk(2IbÍpQ&ŰIZ;caE]lVk)!ْDF $0&%J>덈 +ѳݽ#n<a<tR9vޛA.&(*aJ��0~{_RaѱOIA)->m]\@= ЛSX{=ފ+Ap|DO+^$X( k%9$j4EMeo+>kSD춳ഒO͂K46cT),"=d+ZX+%m˞Rnryu*?_E7>'2(lEKK$RB(c)ɬ>D p.y3;UeQP![!l:|]Y3Sn Һ`Q) %uΏ}f %m3qv%6JI;yq4ك6دvkGE&WFPjW\{-#k) 2RPI4yRM% *&6bh%ޯ/^,n.Dq=vl|B _RJ $44~Jb*KI"j, k Y <h-sAg{.Gj~7R%Wt]KFZJyRi*MZ[JZ(C]Ktc%L]43Tf97y斮ޠTHH]KD⢤X J>hW$7ُ<ww:<;o�14O:{>そ[nI6f(GI@':�� }IDAT <w̔dQo5kZ[j-"%YmPy`ρheO͟n3S-lK_}슻rG[$f&%lP HIjl|ƿE | wĿ֪,&JIM^I N4gMt*my�d! \ (7_1WRY!LqQ-%X4|z#+VǰV1mߗ)^HRjk^J�s7Mwu}Ǹq[oX0_/߬_%_iL3FEImP;vܐvr89P󦵢d-7\kn>E<8eZxi+DSNR( &P\o|/{ُK ⤤9�))XIDg[od8}݀b;֐/1ZtѷԦWy%!(IemQ%2+ rR<5jc*W]GJ ho)i9ky 2|݆ܶWqz+{^_sH9+V%no)au-R`ٴe)I1L"y6I՚rSR@Mt Ke{�Xq۷ -Б=譛g~0Gpsײ!Rj%!( O0Y؍}lސJ`QIlEIYQ]&Ե ܮ70K/{r6\ ~O{GuW0L^N׵lmkZ ɀEIJBOj();&Y@)%SbgkHI='z~Eu=ȷsm'?[Yxg9E9ꊝǫɧQ8և i%( AElIIɓ$sN̔tߴ%T/=T]�*fV^̹ѫqe].<wETrԉz93t||@�Q`+M b#Y()1 {�g~^ewI~rw +>|N7,CԴ(y2Jbr$Iܢ$%ѕ&e=SFә3g$5\o ]ve_'.nQ}uW2 >F}__ *—ڕZ3( HI�W;%%#8]VvQc-D2S$J|ـP3Y)Se{՟Bخ;FNYfQSw54O<^ٕΫ?i+$l%QXaTPna4 J6T+rHKAewMmcDI7y)fJtٵ}PQoUT?|ٛqgnrZ+kivs<J Jd.$kbsMTG0$FI렇Qi}q $6 rce7`U?ᩆqJEu.~7|̮V,[$Ti&$ SKuʌU$o,=??krN(fPڦP.Ȳ*3g<#n2AJZȦ/aZ~Z,%1,ؼ葯/u!l r-+5qSܔ3fX$-ف$7w! dzE2hb$7PyvdQ[aoiC7%$*>_Mͮ^%IẖmLBL^{vW=?<a=hltrg' FIH [i2kH8QTDsc5B~缋JgpM(쒳KTP&J Ήav9v4fbqX$5Y~9k@p!&nhf_5T^ X Mk}FI@Ra*MPjf'D!QUB)(MCPR%.9 =RnMw\Mt?q1'�(IjQ9rqL닮9z×ڕXI0J+MkXF3'48666y~ ) 媡ڌ`1dߌi^?�yněNoFvMO JZ h_+pqz7x�xQ~lX]vF4A1(@sHwJ+ٔ0\!n.iIwWz{(n$(I8^Rѡ(0ID{@3]nkrS6ÒJQ$q|IL2|n|)iET ܾe9N*/S! \R[Rڑ\J$.eԵȔYt6KmFpP O`z$$3ars{"kdQ]pۨ; gBEՔ?ehN%X%!T.I(AGr*y�f\:)))^(B#qUG};$i h2՞8N"�G\wА*A՗MdCI:fS MܕziM<�%EHICݢPB<(s{6QJw_?0=o,`BI(IB${|u-}K;HI�`ZJ.%�zJI_l\ҬN4W!1T&Ro$JM4mBBIRK^K&)piD$DoIb'II)I.tpJ R& ̏ޒLI.XJԤ&,:63sIW&5 J3dN/IjRZRrJ4%IMjRK.%� KԤ6 pJh;HMJԤ6}hJ"4sUH$YqԤ6pJjFĶ;f&h4R���%tEXtdate:create�2019-06-08T15:54:59+00:009���%tEXtdate:modify�2019-06-08T15:54:59+00:00nd$���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/n00b-firstFlow.png����������������������������������������������0000664�0000000�0000000�00000030634�14332737457�0022622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������!���orNTϢw��1VIDATxy|߳ܛ{oV!$$6AAwJoD'"PjmպTXZ- YEDIX ]fܛ#L$9+;w̙9999E!H$ H$R#BHD�% (8�)DH!J$@ Q"q�RBHhJ!h3wEil4)9["ixdXds8ߏ4-r]m}tiRH!![VqIZ8!~r \n%):$ƫ2_ z H$RM! )fh49aAܤhYrj4=ۣ<BDMRqDH!J$@ Q"q�RBHD�% (8�)D ,,ˢbG4=̚D(\fo3M0 {׫#Bs\. !~<3; i�jH!6B4MCQС"mێVZ( k֮%G^nsssINnѭcLeA8lJ1604m�J(dҽ{*;ɓӳg;ۍ_b;( J^^.}vDMד?#y/ٿ?UMr-bi *s/aò,ڵi vIbb ^бc~9;\ i\ 4u@ @VV?-[M>8~\4ePH!ecxٿqWb;#40 O"n݌[\:lڴtF~IL"vAFFWn̑#ٳ}0L>:wn֭)..{^I3YBN^�FeA(&6)/7*ĈG`ŋ Fg.|>ImY9ǔ)cޟ()9ʕqZ=w6G5o߆o?GUI>E<(a@AA}e TU(J*۷;)%!nN<>fzh5L'3�3gʥ^" G+6lf~w\3c-B! EusC @ZY }wܰSa>|:tfѢ')//wo6;O|v,s?UUB<!uhݺ-۷ѣHKK#0P]0 @AU>`UUI(@UU.}{Eb42O%' 44RgEQ0MHKʕa֬[\( vuWE0˥V7IVHO+& ^Sð[o~~vUUx4]h(2 t_"s, "c+1u굴iӞ_F:iCɱ<ȓ\y$IO`?^ĕWN9p8eYx<^F#!!or}dP\u4^| ^ƎȤI#ѣ7ફ'?=a4MgР躆eԩyg;_~; Vֵ>_))Bts|?;!DܯC{u?;ѽ25 +$66tn5#便hp8먪( DLa}w !p\�hʉ'$$$F_~1;qR.֩owB *1B=۷G00a1j4m9Bb'>>"ϳ~QEIBB"JM$R HŴ, mDð{A<dvfBtLjH HgD�% (8�)DH!J$@ Q"q�RBHD�̚:^Ivަ3>z]Mbjx}v z=�,KJ{}!x5):$XnyQ@lхCyyP(\F*9;JIJ<.p'ny>G%=A}a\Wj[&6?1ӽ[vn]{7tv$?i!"ܳsMS E>#E˧):^[籬"bR HD�% (8�)DH!J$@ Q"q�RBHD�% (8�)DH!J$@ Q"q�RBHD�% (8�)DH!J$@ Q"q�RBHD�% (8�)DH!J$@ Q"q�RBHD�% B gIBo HNEQ4 �U3]BlDXE^^Bbbb //d Ю];TU; EH[QO`F^Dk׮g Mi"FBKu==_RH˗… Yn>�ǺuXp!!P,9 !_|1.E8FQ0._Y!R|u֑Ⱥuxְ,B4>MS)̛7ӰEwES�,ASѡ(MZ~f!DE uddtŗfNj/?MFF�4M9&-D!la. KqL?$&4/ P_(D|+ZM&=/}][BDFmĸ<aTUiME(Ǹ涎t,MEMQ o,#&n);lQզs]8VBZM[XI8hQ@|AD EnOf#D*jkl(Uife$]lBHD�% (8�)DH!J$@ Q"q�g@4Lr+r^I[jH!րe%4 !@5\.*cΜ:2 0M(4$ub imeAqDGf۶-sZ$'cEbLvӶmOYAD޵+ >UU覊[ Ec+}~B,ˊ~Vͪ5r rUpatz>,g՗;K/%di5=#"6]͛sVՔNMy?cUB.+-wh܊D̾Ȳ#E`Њn=DIU!"675n@0B!ϿAii ?g~yx4[ti4!2|X.`r4-UՈUUz6MN/O(T)bUUzg O\s8 FEV^ؿ$`?]ط/[7N߾up8Ν5eetҕx0MK'//a`${wϯ`& lHN? & yeί?H˖0`0m۶CaPU6mξ}{�ի=zA5;Ν֭9r0zO? eAQ4uAffwKؼsOJJkDjj*ڵkK@46lXIOO'nsB[3/̀\~ x"4 2rd~uz'W_,n]՞zoEBMsQPΝ|,^E^#11 3\u۷;!믿ti,\.ر+&N=z�k| EEG|OX]6n\˸qظq11*~Ǝ_f͇zr3'OϹv'''Mx?3vl_{[ 4Q"[Z`feexn>,Wg,.<FOff7*mۣi YY62Zx{Cj 2iHPx׿^%?�/ 74�UQy̟7 ̜y }tdǎ/h5E%=kaZN! ӹs.}c'`[C>}FO?⡇Ͼw$''ˋe˖$0wq-̝{:ӷ�ͣmۖp$皛/RD!7+Wp] _s�8p`?}vCQ-z;HM7x>XO˖ W^iZVVW`{|J?8~9C&>>ի?˪t<mq෼“:ϑ#\nLo{�{$0X#ͻ{6brr2A֮d^e�^={ gϧ/mb4GY-}vFXD\cYG^f#݁}vsu72nD* C@\\n2 FͦM ,}w\sELt \r5CQuU>dĈ>$'g3thV;[cu]zA !ibYa;z ҭ[/dtktؙ ~{4M0EHjFn7^= "pxn~m� _=vBBB�E!jŽ:n#%>Lc='la̘AQEEXZZ0=ݣ̙3X8q8K<W-jBulذoKl ӌu6x<.Ӵ'UnJe)ēL9۹s;|Q/d>yǙ=2<ʠAڵcǎ]dgCn_~! oe֬)oЮ]{֮]=cl6oL8wIAA Cf ];hݺ k~̲e1n$L\cǞOپ vDZcE<h@eĉȑOsy lذ鳙4i$ud;VW_}O%..`0Y\ Xm-s0f۶/YkOn*|8z.%>È3gSN #7?Ln>??G3dhtE]ASS+ޟQVVt /.gӦMg.*y-ZWLeРa~Lz1;w0{ϸ>R22zp뭿atޓ=2狣Mv&{V+A\sp.2 ҥÿbѢΘ1GEɭk"u<M<m]§ˏ2'ku\8w<{r'N0 Zri& 9~8c)/RRRLRR2aǏC4 t]Q|ؑl3R DcNJ�h"E#G0L㦴OYY -uSXx'BAt͇aC6vXU'N!>>UU+Wsۯ,p؈tX[F]ЊN"ҷlkvjȌ$HF DuRSS,L\.7Z`Vؖ-[FªU>,K Qd�Lv`Y|$'4=YNVFTᰉ"55!EZpyʩpDMky2abU~k:T5 |DIM4+Wr@1sO>oNGdnihz5;%ߏr*ɿǩ+K|uKjGHD�% (8�)DH!J$@ Q"q�RBH@Y#@Xb/ks@brP]Hf#DWקB ~EJ|2o�P#ﺯkLuŨͪlB! 2>oTJGcY]SztP0L?4"^_ a/ `ZG[Q. 2\&LXXr"cͺ+V{}JKOtALd꠩<?( +Q?i31ѵ*D|YGDH~%z@�e z\<OAQZv$h-beeSwрK6mfq@ k~ƈÁ#w7"fڵ5lظ찒i*JXɆDC 4BB!X`BaY,YT|1|W_}UBjIR{kAUq<xPr-K.pXad9s戃FYS9XVetO?۳j*mW_Yk^2pԩSٶm~!۷g횵pOk'SO=%�^ !d=(,,wz/ !p&H!@Uq޽[\q^t|S~w^ieOՂ+$?Eŋ;%T}=)Sصkeeet҅+WHST4tMXEEEx'Eii®e~j,ˊ%%%b…<8~xty#(U۷o OjGT_}�ѣŎ;*=Ӳ,ӻwoHnn.cƌ)z&T5UǍ%={[o]QkyTPP NW^yEA!l} _/~!>,dT۸q#C !%%˗3p#T9Cu,[Ls HaA^z% =8p`}/"!CPPP4h/& E͒nUMӧ @N=;Da7馛ā47SYTU?c:uDNN;v/IJ<;Di\uUl߾7ҡC>S96tMPjLĉ}[N}{]SO=%ʄJiB*]v .@�>no.tòe .rgϞ^Y6I[)[n$%%Ä "4EB1 .ݻw# ##+V�Tm蚠.j-<] _h T]٬xi2B*[LuոĹT-իW @Gl۶}M6fa,Y3e6lldT5UG?~tRLӬOkKLz�믿lCX45x1o<'h:NFD!P]vѮ];6lm۸kmF?֭[Yz5ڵ#;;EQDبHݻw}}JSQuz\~XlPYRAuwNV۔fyP<SRR֭5t&!D!ǎ0 @)W0(**jR/iB4M ( !%ƌD�% (8�)DH!J$@ Q"q�RBHD�##W,IȗT"Ƭ9l> 3pDѵ. @.jD^rk& Q 1p�^/rôhтaI$R~;v,Z:tGR^^ˣ<OCghT/JYY7|3k֬u֘=..UVfF)W7r"vZ3f U4>LVV>,mTOh$ell,3f ''h@uϴi߿I%R~gڴi߿?j !!''3f[-mcQ * fȑ\wuvLa̙P$T|gΜINN^�MAA]w#GiB, ˌ3v:L6ÇG4~"8|pMFnn.vfƌxF]6:!w |>̙3|P$ՉT>3gw^|>h2i;kpF,!rLx>NFf:/uq>,�xrFP UU(+3c,Ǧ-xy3*^{ < Nj;zV7tv$g0-^X"gZ# G Y( GXvdz>=iZvsԠ_^QqhY(_v=4I.$-{BJw,!=6^j}3-K ?)`?&`7@X/Ei6I (7qn'.wY<y Ms}Ba71^>1cDR[N{f(ӂ[S?= }#�UMШ*-  O_QXQe?{JLpB@ܤ~Flu o`NpqX CePg6 暊gHUW.QXi7v1 /[^3+yHRBHD�% (8�)DH!J$FrɟhqP Q%ac+zVYPp5T՞gDS:!.a{52]ר+ia8UUVQ4*gA72ϊ Ua&vر"ر3/6رQU;@˖)tj5keN(,,o"m:UTv0 3HLL0,4M%??ƒ0_GT`0s-dȐg3172FHTs aEoUNV,ˊX]zju׍sO4bbT֯_˂7U9%ձrۿbҤs?~W_=^ړ]̫rEnYqaFǸqkAU^zlǬY՗áCpz|Eev+l۶{ze6z7bm"|:11>^cbt<^[p5bcUC>>z.=x{:b^ylxٳ_ǣYt \ELEqF'*`c/b|a/֘}n-Zf>(JӣG>#@ekǣiKϰo_6۷/3CV/7TQĉ� :$/vpDt�6ld߾=$&&ѯ@:te lقa$%`u$&&i:iidfv4?!>>~FrrNkСfqL887'_F|v Ͽom6QO<.GJ׮)+6mRVɥk|_lL롰m69u6ÉD_~aòhٲ~0\tʢE_az2KϿ B8B `飼7THMmoBaa `w3# /MnnWW_mRX&LG/cŊwx{ \.\|8c?^&OV/"'g/ÆAu ͈9p @�̪U>|4;wnf`Yef>%%0Mvkl޲bϞL4 4EEG={*Ko(--K's׸+1[?>\@qq֭ َÔ�AQ0 ѻwn"BիƬY+O㉏c|:ulC �?�=T�222uرݻ+}ѣǐ5?\;wOn]  ߜsPTU3Kii)aҧO_\.(/kA4vp4f^@~A)](*:7/1mtt2;S\A˖�k5h7cM<x0{?,3/Uz70Gcݺൗ/ C5B;nݺ0`` C5ֳT+~x7)<П96maÆ$('66ݻaɒO g`YpXk=M6йsyQn7ʚ51|p21 aiDeU֨j%R"(&iii<\l~;/sKٺu{d& ⪈~ȡh4|(<0^.K/7osgO6{ezBTE>#- eپ-[pwU狼W!ڞJHOwѾ}Gnq?`0DFFO2ޭNOoFu ...4M8/fo/%5 0l( CPXxnz"=UPVZsȡ*yy <MS0͊<AS+"bzwyzlǚ5ѭ[O�3iݺ pUUY=zK(HCƣ1MݻgfǬ] O<,n=Q"_ ǣPTt{nȑc ͳrUa#F(c<-^8L -H5lX/ 3gN◿|V --]v"=b^gϾw/qs+1o/*uEB4Y)L4.v2m1xgϾ{ Bɴܹ0 -Y7g?mtf͚i5={˸qNOQ!=a྄7_qM֬^xh_Ervn{=!ggذat܅cs.=ĉS|gL|m۶0„jᢋ?`�4 /7ӳ0p0ϒ%/1zx^} J +eqpNBSAo.狥[K^}%dfvf,[)mڴ믿D]L<]c1[ѱcg~.y8N6AMZnÜ9 Khj%%,X0_71_ynonمatޛzc=B~�>}O?*^o ]`O~k=O||zcҤK�'9e]eÆbܹ a={uz Yݏ7\#_ɓOʛaA> -=/s3vQ=@v7BNAΉr-8 -ڷȝwQU8L\.g/*4w躋k= ?PZjo0aD 7gӾ}*p cv 8qL0⼶)EfvӢEK\.-\*AN8EULӪp#븫i@9qqO7=EQPUDnwj>4+\ZTUU(YZ;/Z:2YpMs"'NL||,eC]&'N09L @XVQJKKrEgnzcLӢesJp4. 'PU/|Z( s B<:t�4E&2qܤaUM45M'>>;c;ð_y,Q:Zܒ-[VL7[&%%D x܈ >>;:N7Ǵha MBT *ԔޗAYtҒtȊEo9":Xiè4\UW~AIz5TۿrJG!LSSINYާ\/8�)DH!J$@ Q"q�RBHD�% (83Y exk%DFTg8}DXD8{*䙵m-Dja?46Sut);ǧ٫%>[gi  rE2@Ia^sS( x )/uln]u(ZG,9RgbTEA ߏ�_^Ok]Ӱ,_/ KKtO rZ_[!D9i [!N ,i{Mw:-D"E"q�RBHD�% (8�)DH!J$_ Y����IENDB`����������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/new-diagrams.png������������������������������������������������0000664�0000000�0000000�00000076741�14332737457�0022475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� ��'���ވ��}IDATxwxչ0slUe[.`c`0$@&%\ҸvI @ Ƹ`%ٖm6|e[%YҮљݙwNy& �����0rd�����`� ����`A����0 ����a`����0�����FX�����# ,��������c]���� %H?NtIIbi:مX����:xW\ՕAc;;;Zm%h"��0٭_~޼yBfJvag���(&)ᨩZ.&g ��#/By<?0eX���&/Bȣ>::|A ���L^BLv1��ɋi5:.& ��0=nݺd?0��jZZՒGRG� ��dDrrr^/uuu9d?��z}MM׾%=C`+0<P���]]]ce0]0A����0 ����`A����0 ���NXXIv)���pھ|s》����� ����`A����0 ���`1. ���Π. ����a`����0�����FX�����# ,��������� ����`A����0 ����a0�y>:]!w]���c.`TjvMvARZ Iv!���!hh[&٥HZ�}�����FX�����# ,��������� ����`A����0 LHG]luk a9A‘?RȬ���@,0HZ$*LϻZ+J"Q )��ł� 'c]Hd1jE2QQKph u6!QMvPG}T(\W킻P):SQETZw'"+`2!*"P`E&1|� 'MG w]jVm,ץQ@Qo9OӛYVC:\xmZz.%6H1k]٥d�`hHhK՗mʛ[v3م `ܐEPЙ͟aj= yr{:֌_uUȞb(%^"uoML/d ] f^jN$@�U#Aٟԇ~Z欴&`� -5XX,pb91`ÊFb0P4h1I$LuxswGCa,;�; +/OcCuK'_|Iov,0> [ODiwńrJC:RG]teJA!Q� F4W~f?Bh<?߮lg暒]J0@HOK,앦/-"ZOEvA՚膪P{]TBLQ$Uk`!YN�h /t*ٶޣ5Ƒ`Ow1�&#jiز\VN/[VC! ʍ GQ)3 .1ʰx2" *LMx%N8o11K]"ɥdfWNWgY|K%`qi,.MSJ{d?Xx^ݕ}KJҞ왼=EX�|_5*^4t 7\`X9��Ζ5]2r+© X����B]v4Zm. ���z,֞xδdo`���=Y]z&3F"pw삤B�`\3i*!ѠW D y)�%`"� ,4;B.��1}pU,1ezl��< $SL5R+;_2�.Ab]edGMb͚),LSWS$*C TP "y֎&I"(E&)(_48ꨏaS}e:T4mW[f5sͪBZNFd{k {bA,{]MqLB}^Sfw5j(1L[j3ٹCΆJͭ)m0 x&o~L83Jʗĸsͯ<|w]pc$Kj[ v*Ib4)-#rcUHoa-MS°% SCU(쓼Bӱp<Kf>9 U_j ̷LY`l5T�LR{.=QԪ*8ݥc$7>,!tbO|=g{'Le[G(qZd}7BQf;}.AS$0eI0nY"uHjBBT t 80jD*V:(~~RKwϮ 50" cDgb~5PTXa:CunHP>'wa=lO|GxeIufiM6N=CS4۔xF@t@R-Ov)& G6/TY$ �M` az ;`>1t% bhHV$id,e6L2Uh3p@rp+ "j 1lvPpó-ӖX gTGLlz`eMNMwk] %)Վ!l}#l>���؀� )>vvڞov~Z+DYGQ4Zq{"=q)a8RUZ6(сZqaDC�@x(F2EzH ǘBv&ӅQ4ErpFGc 4hN�x̙s6n{-WM/~?:;xNN^F3b]45:R^�[NE4CyFBHeEihEQ! èz׬[w˗&,?xb$iSHofnitV16R�`ĘLffL&og_!+VTX~^KA塇~>wȁ_Sӓ]v0@06*!"ⵇ M;weYдtޔWȆE$EQ9�Lk.itonY򪜜|IBXtŊϷVۚ5K/_wZa'߫{첃,0B"!BN`e fqO<*?4:X7Н2cGc̖Ϋ*js<z2j蜩^OKx4faqt#iWzE&uGQlrrR2LѸ*m6aʐL5&:xu6k~ZJ GBJm|'yiL30*�ß)!xVÝ|g33B?wy쳯tzeFNvxM`Lu5ŻbS<u hifh(!X[XwuQ7;yQ=ˏ:?P_4'T}*VoWy}CEc>ƪ'+"97 G:<!r<6[⊬"|ZEAAm}.DR6<&ۛ�r r}4Zj͞='XV3{v,aQ]p0@ #6 w5"4C3y[x.۩%6{`2B(-L%VC92HOaR[& ų9S  ȪJzo=)gɟaW v5sW;6ho;P2[f^g~=}9xDi;%*i \RA. M3 Vܞ Ix^}`Lb"l^'!䳟/w``Y Ͱf)VC%bi_㲸wtux73*BP"1mqƞw5źbɅ2"HԀGf^ Q%^K!($Qh<b#i!dtE %\f={>Bnv84MoٲAb۶hUU`��!5X`0,Κ !(D߻iBTAc{c<nwl=:}-o[/mWkiX"" Y!hS 43MӘP6PG}t �QON<oܻpݺ[֭iFF֟d3`1.>n7Vyv*U+G[z;wlꨏlV^P'\o8P285-iO|ExHvjݹCv_$ <(8gÛ<Z#Km>���RX`LLrZcMJlszS`a\Ula{,wV EFEL| B]q/国;`V^rdw5YmXP19fvr!x`e33spj Nͽ"D<Bf}8��(@LLtYiڞy KO$Z>ǙM<"B%mgO1I8SG})"QS J3л&3AY5tMB��$Y?_IofTnXig-,~V^N3?���8܂qϞ3~_rd�p#?&  YN`�� _2jS'ERV � ��h ShH9͟R BUUJ;7H ��(� I$5{ID1e��0 B^B.٥���0 iug W`҂3iR =��0*Z? J`����0�����FX�����# ,����H&!Hb\M̱5zT=bߴLT(2IZ���RX ;g-$*9/D{bSCO|ѠxȤr7u5 ' �� TXavZ(UOs<٨ 9u0bO+C2,eqGzCb�`DD`)y_lBru#cfWj/앴Fz!Hq`a.HmA|hsw<l`O4n")w1]=/kwmcOSlnM뉰FLYdxPD8D;طbLm _B1)3 ξe�0]m8o,��,0|DE"$%QERa%'" A Bؕm:Gdo[P4Gn]BWc,m1ؙ5؆;/Lf'w5*Vٻ[=tͿiskvՙjЌvK⹖;Z&t%SNr w*7aEofOveO+-}Q*� a?:#Ӗ.A(x'uH˟OvXD WOo D!HD+[cxX6!+CeY%zBl/!a`Lv2 e#ٖtT^4 G*-wfkiBe(M0ZYJLz]giyKt!$Ծ) W͌,!r:�N/jtCE/5Ӹ(&{'�臯S<'(61ӕ0BDBSt|7g52ͮ=$VNW|.cږߖF Qg73F+Kvߜ+~+7" a3+Ɖ41QI/}+HW\a:[U } 0"\d? YR7Y;`K\9Zi4):_DQ�ݡ_Zt֖/m}sǸpCdddP7 P$R{8D'8_tʝ:pFZCS" xŒCe[:33+34 V.]bzΕm !BdSO7ɒ*DSV$ SrLMS|GCh �BcdvZ#huh 4oy=h u`pIk/xhcw'C!ÜPQzgJKKE^{_W-Z,ku™e;fFO?+O:Q,^O;24*01(lvr"Ӎ[_lu:3졅z37]kFd$@Vme&Pb\M4_FC` 1257xG]R:YEa1&Zofmndm.No_+8Ez!>ZY"/iZ{T`a3﨏`ݑuNK}'Χnp:?O,YY?䓷v__eA0 A3xbŚ,m%%:h_p}.Xxpg30,F-ɝXSOe3K!wN +Bn/HT:]Uwg!(_K BhNITYB)(\<\XaBiM3o1Zj", ;0]iDE稪 bDQ-�zC8?Cy<j}G.v}kk.^v[+$Qe؋1S %C;O緾/2r.c***?[wݺubB7ͱc̙Cʠ5/-. r婋LV.] �cXHagFY/8g Oo?Q2%ln>xd a_똽Ҫtc" Of6p�,_MDW!/}d2C2Ov7T{g!EX] _Bmw]O,˷r?vGy$]!N<nݺkVVVڵgM΁@k`bklw5MLťvL_f XYZf,`7TlEv ȲlzC^Pt[Y3՞O=X^?A?X,Z{ꄪ|ѬÅ5Mb{/<뭷fddb?Y7n/y_W|>߈8k󲹹`*[\>$gUY)H$/o `>^"q<5J[A`k\,9;F?uuu;wf9 uݗ3%A|Q6V/kjcYlFcKJ4no~n~|~ |'%Iزeh@?!Hd N%<r]OAv!!o0GnP0F+H+c/a \f4;>: =Q=:Am?u\O<?}ԩ?̬Y=;"o0hx'<MseiOe3f;$i۶mW\qů~7q5kرcxG ( Ǣ5„]Ӿ}sל2w*AF+d_1uLFKE-.MZbUhi`Xw8iL=Ӿv6J18Xo!o[\UlCe$ak MBh0A|Owv cAfpIɡ-SWܝ/ ť| /<KoW]8==tYo? *hpT!|zu[~)5'Z9~d$) CM>F @U!yŸ:g QYrkm.,>DM 1i H;w)oW3W~cJgTO|FvB6ESE,pKܱ#\2ڹ֚0 FLeI ^ Mc! Jk]l �He'N`;7:A+myo3󮰦?_Os.ʵoZKO]v ݙKxg£mB_{^nޮ&rwM@ 0`@5ErةÑXP4ec\o!&(O[d6JHG]. ZOD. "Hkdf\jg5T{mx)k(!3հ`$FSΆX~Qg.MV!CWZ6ktno`sb5O[w^Ꞁ8s=p4zvNW|~.0DI�&/~Xp w>ie/2/þƒBYh8Hj09cyt:{o^g?ي+`A5R}UhbpT}fhej̛_J/1ͻܖH:$D%" *B(Q | vKBlF1<% g騋!lEɢ!D3SX>Y_Ρ*]5gciuԅƂr}]UdF/R% S)['/?8_ma֭[76VGa\ٚ+?NThHyo)\O@7O<XnxΝ=P XW 0,EZ]lE: ֱp cDJd슞w_S<elGCҧ-Z#7s͉X KPdBT2.X?i{c,G&H0qf[T#]_'喼i1 ?&^g?(g`_}U5|s`!79gQ%տ!붹e %\;Lz~߾}կfϞ]^^*$T*#k%|Lg]jl]eȴiZB.h_.2uw,͌OZCHQHQadt%*~]sok S{R493Gslo|ŞM �Fmp8np80&[p06X_Sh<ӥ 9>ys:J<x9Ao?* *kYt&GӧOכ co߾G>#uuu#UH0 D<BCu.jpRsFV;1E3 eCof>.gIT>6BpыKjzzU@*$XH7ٌ"-V#KC[E&4AŞɏNK s=/u94QYuYÑoz ft1X7�$ݪU<O]]ݶm0K.LsEϴ[]캯dd{>𶜌^iYpR7#ox<ӹi&{vM+VlzGmhhL΁7W:=pb8L7g L3fF8Xљ٦゙=,.B3[htd#pAwjb}zyiYڎW8u]ዝot0h1J㝙XG6?k9 upJKKKKK/r;zs75_`K~v'mC;L_d*o<}Qlڵ .Ș?ٳ[[Z?=z.p:?k5`MdL"AzW2jKc۝_f>ag>Fi tL'4Cܹ:{h?(- ݋3,snpΉSms-.v�03Sm3H1 uK>ij4,EQ ,BڳgOcc#7̙SPP0&&Y&hw3ˮw#>K ~Yԙ;Bɾ.]w[Oƪw?z3D[\ai0pwfЩ1GT)󍃬-͛7o޼y)0 hTt6Əl<RT5va``ĥzw>z*~lwHt|&\}9 %s-hzۅ<z#j{�`MLҡY%:tq\$./(:HxeܩzÜ; n~=oAkdU.)7-Җ@Ԏx]U.sq'HU]r�12ϘY=>5ppd1#@6�>e03WVU9JgMJ[ 7Y"-ۃLM_8ر"p>f~*R6he/>E ge2}}u&_'Tť֌|>�NA5^%&A(_jĜ:4Cd qJ*[]$8ي9}|>V:׸Z34<���.XSbG"MBvkL+HƋBBIUFeO�Zd#\d{? f;'��1xȤ6VI0SrJt-gJ4 Y$'Av1T Uei\gP#P-e('1�gq#w]{$:}\GuAh<dx=SsG";>Ϳ:GNn�Wԧ*$O5TG./ercZNŢ!!$K:Y3 5fil xdv|ٖƱ4 ��FX)-N 7«l>1g�v]edɵd*,+m{B[_J7ҡ'��RWsdps/5IbaTi#UE]B38-ghηu)0��FX$Ĕ!.Xc+3yI'ֺX,Y+waY+t \Xaudh&ô��0 J!HFNǣJ4} pOS4Bǂ^lt"m'ox4Qpĸ"LTr2v`? +Z= 1&3' *\fNvR="ӗ-2C.s?Ov&LH8 ?)0,ir:/_!RUt<R68=w縏 o;aa8گձoS\˓FUHwx|_U5WN]q/"DgW\ِ0ycΝ+0!CXXx:` A'䈆큺HZ.:MވhǣwDdO� Y]+ ‘O]e+Q`hrp2[ 2)Ꝺ S|cMȩ<|@x5e78qd i 1|:V2ĭN^43 U5mzs[XXAp-^w0KvA&pk.8 1"Ԯx`ȯU&AIAsԝ?aFr{ 2NvPw$]9e^#$+'ޗ΃~&)1APgpp/i,e` kL[osa_kš쒎KP=q 5гWZ.X%%mwUbʐ.8+(FO7t&I-`]oy9e\&'Tm{nFdt[j: !9>��.HUIGp@wJ[lF }F(5B\M2];^q<uɵ x<#Te�z?Zba'ozx.fFթChP̚udv|c9\2۸4U&up@i��8`fa˿;t3X FAn{C<6ӹEWkD>zu^l*]@��aѐr`f8@[ܢ^c.g%'Z.YgO9cd `aXPNi^!,nO RU njH5VϟZL6vMNkO`E& M9:xRjם] =FS|;\Pg9^'v1,Iƒ$^+os IM#&}9X8x0yhԬW-oK $]z LZ4d:XZٴ7l2g)|;P*b L>4sJXXMkɥ)3f'{O!NiL9wm\~gMXu=3δDW`23ٕho|*:|Ckb/gBttF{wJu0tJ ( U렫�!]p4nq3`v N=*?`kJ Y|tߏ5+5 )?~ݳou)s ]Ћaq }\ϴ{Z{Z]`DW)>p>Ն|R3a8= G]Lk4oЏKz7>|f_/ed`XOʢ|׳N H㢫3[]!QP/ĬC7^�k ly T<ː*o5Tz0hHWliܛO6D8C&~YW * ox&&,`dt_u#Ss7DW={ل㨃�k:]y/1]iMvY�7.0-oZkc. Xxu*e(ox=}EמhYYG| VseM. �̬K-:U8En]qgx6G;_cȜMXP5(M;K˗a+�P2X0]z"èGUȻ϶:]M�DMvi&(.!nSP/_ >�Ä1k /t"J@˿o x[m@aK| /vmh�n^O/ڞ�0i 5G:/KpB< KlH7p<u[kܢakQǯ{V�lgW]Wh',$Q}L _Ϥ` r8YV < h8/U%ջB50�#fg.0yͮ~W2 (,wiKvY&+쓏 Yi*&,�L(E3 :#]3삀RUmZ=}!Kǰx}鱐de�뼎:d1`x*P=|"첀| +~)IPWnOvY& UK ѐUM+? \Z jћ5 yde"{ﶦsl>`bu*AzԢd:djtܒ<ӚL`#O6r<�F+(OH$:L!>L {*01Tw> ~f&00FZ#R,7u$ i(_{_[k4\Iu4`aN ' ǎ36dqq fgH`-h&T08Jk!h8u8\4Ntg?xR^ H'лQ1sN :O\ `eR 2Au6QPa-�ƌitH Цu-�BƪddHlBLh)8�06t&ƑWC1uU%.ɕuzZx'U#g!2(`:�0Y`B .c7K *%8;t;=w;Z#1OSLy 0p0 :!DqeiTc)on׻ /v&!ko;35 vӽ񟝙Ex LZ{֪=::ieg<d-7;!`@$qB"`04<EE';2}מhITS3J/-6ÕbF"h]CU=B(-릖12הbI Q$B>1;B"<hXn2 ecBhJFW+ԂoPZ{p@,<H�dBIP5J 5DEA}' _]]mKvAr]m=Տn}~ߛx)L7C0XP�H2FKP5.Y3%!&+Њ[PK1ii/d$ wHdn<� �li`={:7ҹƬb])Tk=]Ҽ+l,1$oԢTs ugFcrUP-bC8A$G/gFJʹwhӘZfrB0d+٥�`aaֳKoqt[F+ 4%.ÿ*9\|}e8�`$Oקh:.#Aw5#ŦBm3@{*��LjIGL[8pڂ+l )o ��¬iqq.H-KpQzWPUߧFUH}U$[ eL)qXBVIRxd1Y"/.̠L0=L`Q( L۠5:ԡ($HyFR:’%R-I ꄱDE �,h)e ZQcuxﻝ.Šht5.{rݰ Kv)�� X��0QeF_'CQE3Xo]a͜yɊ ߍQTF?}qJwO�o>QUb0E:àӽB|!YHN��R-]z|Z6MOsO_b五?3#߮w:G6ϰ|`s&Ϥ%9 |m±~{-]`BrBpkm̞Cl��up7AҠP:;jWg3C|_yW#r@+GxzodɼjO zծ7-h#ʩHPF|RѰWB\{0X'kz *j==�G,z׻7DWc\Cmud异++QVPar;N�@.0ڄ_:;BvNUa;~$!P۩Ȟw Oe۷Ӻr!kF?X3삜=!{Fg\MF5eQdVLϛ0d*Q*.6Y)2 Ce)с#b.Ut.$;٥8B0zzښ9ٟ&o+BLi3Gk2!B1"pBdQ4nl%Qd;kƮX'τƈC"JS^O[*Di8oYE$a8,KjKq^r\uj,,Oog&GH&<QDE@Bb WEAhO�gS UۼmF>;B(?OGSY~[z[m*`Kk8 '*:u  `ψW <d�Km>wnX��d v!U)̵8x t5:#y}۝nvq<jBHg f;{ZyF )ShNg!(j({hg5Z$E! KȪ !(2a5}ҬUJln>+ɖ(kt4"H"ѐ1u!P V$B3b\QDi4@E� M֔-`Ɩg TbCNKgp 1jVq,H35R{Ce(!J 1Ƣ2` y=tUG<GyWBѠH@6W kmBWS|%6E5VO ʂJѨ.!ZOF}킪R}|K4(mwH^+ewDf +LcѣG}XtڏKlAںuSO^KazR%&?}y}^bUWoSu_w,Y}JQ+Dpd*3x[:Wb}z5e%f\jOĸrdf̻e2|]GCԡ+l S*[d =vEƦ6Pt,i9&]AWtc cӱ𑏽ge -'Uۼ+krA31W;u&fU!'# uAg Tu]dɊ.r֍4=)Z?g032";ZmzYk,GQ%۷+%{R J8-=2=h32{ȝjf瑏sW;=x#c-iv,caHheBS~YReQ$X79XP-]GGêBh+bvgN.z/X;?lϕ!v7_ ^{ʕW<Y5_qŵW\qu0xݾ}o"DQ|: n60K^tem>ťwy!nE1`=w Kؽz5k-fŢޛ#`ta4Aa31&;kg L//)6;ӥKQFTTdr{k1BhcZw~ekJeYP !ʫ u5^\p|S+;;owߵ*I"BNs뮹f ī+׮]0LYE|Ysύ۷oC>{#/s)[[`44<y~Vsw^BȓO~pqqٌ^2F"QAH䮩�jHK9-SQ =\WS*d뎄0Fz |5]3 u 4N`3D kcά�΂1~/̃~痏<xP3e˧MY\Rlݺ?=?_;B^_!?3~Ν/]~?ǟBmݺqÆk4o~~^{Bۯ ?;pԤ�5X`ÈY F]N 3;== 0h?jUu5ŏl;2ee=:O 2BSP>ۅe':JXX kahxZ(1g=r뮫;EPe塚%mm͗_~uxb&Bp@;#FŬd FIų':ub0t`u5gĘ29kwYY&%VL!ק%Vh|srkH*R#BЪ8RťEoa.L"ʼnՒg'?,d56OZ,'?x/#GUT̫=Qs:/c?wJ.d c,=�+!^3tD UOB QbcBg-,j\(ܾ}kzo~f3 b< ga_/~7xGgg[~oLmAAQ$WCϘ]R2UQd'%'*cʙ:F&XPٚR z6wFvF&r4~YfK(z?'p[fEQIr<~ăigTWIi4+H)nwz琉Zf]ӏ>ڗxp7t qܳ;< KNqO�TB,esQd"FK %Q5ٹ!\z&;ky<1%ܕ/c jB��g߾rQY H) ѧ[F]&+<GzÉ%OO (CXt,R7ԂC=}:c=Qwݑ~`҂O��&M^m/{l±Bݹ+ꙡ*o EQeiW=BtaT[0˔QCӆ���`J�+#)f0P*!IRw (9;,wG_b?˧/XHGԼr@+52@fkt[^i[BD͙fȞbi<cNotv_wKbpTc~cݭ8sFot|O &x:].j}e6JQ8T= DO|u SYꕠcP4&*EcqFQo_TB>Z��_XFCth1|Fnכӌӌ K2ؔVd!fsk,Z\3j"~)6u5ji\Cu8.6VEE9w s X1}MoelYԚLK4( }b!fO XiPhI7.j'>/Do^zKFmіHWO ,[j"%,.NfƑ_v;šn3h[w0#ZIv_7ș#U1#%}oSˏ/F#:ғyIM3SU"MeEY;:Gwm+Ű!"qt!Vғx3xm>j4 l=b=UATsIL*t6~ITOsI ʒ8swC^1C>!*h۝4KBJ*ԐWaqqFjWc̙M)2i=n u =EL adK5'Xn>g*FCՑfX!қGol=@u6n� [:/"$ǘFK7!m,2tOmWv3Yo`F#L!BPV="}gg19X(T@Xb[K曋?~MUExXgA.rz3oJpo!!4F|䊂QipdCqT&UD1zZ!VCA FGuv4(ktYi`R[)2A,d>B2,ZbE[ϵ%ܜ][IjB5O=W[ⱰIp<-ĕ_R$2Ykb UȚb(8' Ub{mԚƥbYQ,l/,.chD+!u#w"g*ѐhb5tGCL1_%՚ģ!)E[- 7o*QMP |̾vԁ ;=-RHyn9;TA1= D oaH6i:;s`GE%nWB[Y@mw|�$H3zKE1qѬJ~J+/1{DEVIF|o7,YV& P3pT 1iNl=o5aQ(ҵ.L]b={lS؝͛n,g}@fVLa{&Ri<,[_iCexdת @K晩Z;of5؁FPWS,ܶD%e6kb FZào=ڙ9TI:䀑 !;Isz\j A 1~$Љ3�0PEѸխ3BTa5=mg4qIJ3M/}cZ6-_*oI,!U%+ʤE[FOY)J>-%EMBzXz[SE"4Wݕb8ju=e3KbLYhHզݙ%ioe+2I,YQn@S{[+nhJ+7f;]MouZ4S[z?O:yFwv{]tle盝)U tEM!ttO(B]ll!◎r |]̞H]gfv}: K/WnF3W[:jXH>klꏄcWn,'. +IRAyxDΝn̛nIw;OW<T<mn~" 'l=u0v*Z4뙚=Ζ/Sg*h;S[Lv.%Audb\=ӧ5m'"9 .D%#GB&''Kc^IYSd݅_ODo CzǡM{fVgbn ~9{ OY]=8>7O J9yhP8BM^YRMNNgdfrhgQ+DF(\bt^TC cz6,..v;vS!h@.e:/TN,??pxs^P$ }`,<rn."9𡇦){ovrSXlj6!HUH[4T$:Br 9S u U!zhvK*S[EA9G-ؙE5TmmrRDbB•[UQ%-WK {HQ{(Tݗ?Ӥ71d ]pv 03)ʘ\H 촥V)r<0D3WOENlhg{C[K&{Aڃ!o`g6i#AD3(lvpJ/)2z{^əWoI(BLa8!HWق&NKuǺ:-Ccv ,K50j<)m SU^CLFO3'xPXJ=%6f֙sZZUP{m̕劕 v]75Fc}{<O;j4BH9w,#XQ6fhP=,m6Y錓* SVt|`{鍈 n<RLiX G3&%p1;8L5D>PDm:e -67]NYdEr"@9x^O5z4єh'==w|*ɂӎWT,vdjrOd|VbܢҚ}b2B(S]1қf$D("!` 'gcE` v}й酖UweWPv_<,ua_gL(B\ mQ��q)D&k&ʹ@z qE&{H@6;53Μo;!YT]yhPu=כYRۍHq70 `a]Z(p#78GYJ(^pcxzom,Db!U0S.Ȣi.J1Xy= *R$3W:(w53Pk9 k0u9zNg"(i ÊW J�5X`<by:D_|<R2ltPWS !QtFG<Q7ȑ1:}x8 E3xeysϝnvV` Z[ S6FӖlxz ~BKr+G=C['"!h 6VC4?+2Ī3ӖZb\) ,M"L%^k!txS7FGp#7;9NKKWtNےC!{2ov24 �`;-7r ڐ1V/;R={W0CՐ!HTT"FD%b\%it,U!D!(LTf,b4UHqP1F F'hbk Ʋ wQ"1rZf)!HU!r:aDòFG5*,v~< !(>1c}LBĘ1V DEJ҉NE" O(Jg +Qd)1V$U Q43:lQ洔,)FL0F,"#ń|j}^|/3 h246q׏]=`wA1ZJs.&�ɩj=nC*DY%0IQO_>fLaB!=IAeܷc 3I1F K13dg7}E܁9B,OG`V]rn$zz\-G1Bqfou6loG:χۻD9�'92og䭯t|:?HOͿzҥo�L< hm^T Nf&���� ��[4$ ވ12؂r}#O4S`~`CU4ƍa)w?e1=� BQMm>4tZz0BPS8۾L5`HO5XWn<CɢRy"eR9~AFA']KN'XHZdIvbr$t[mAob2mbmg5;;m򿲇״+[dLw=-ٻ Ş( Uh<Jv)P&<1o?6Zvt+P;7=Wߓ}#c˫]ָ.f΃z㉆XF~&u&c#[SX9P#n<M Ge΃5`&jY#{|E~LoA~?PHEaz ?^l2iba5xɝf8q0<fVeeu]F !h4_Ǧ�CC� ]_[?|C:|}EFKsڑ霎)h{϶lْ7mǽ^}ٳg99ȕIo@ٞ>t?~p|opHe{]l#<R]] hccׯ_?uSNЁI>hfXX$!4�Rƻᄏb ɲlVVֵ^[]]=M/1 O\Y ͎:H M[h;y|ˆ g}?ӧ<}wfgg<x?0D%\bXͽk(Yi|''.8LEI f jjurv7ዝ%=oǎz]w2 ,xꩧyx`ƌG#kXBL '7b]E& C HON7-[x<Y[ZZ|iӦZTH@J׫77zfVn XXپob'|͘1㭷jjjRn۶x͛7o޼9;wQTU}M7m߾ɲoΝ;W^ f\ixVo]e925b/<Ҹ}hkk{'?|_޻woɓO>KKK|K.DSkS(G@W!*j9m<ER' ɉuPh[BP͞S[75{'bԁ�b55a%�0<j>z͊&P[]m'g/1\fFyZמhX~p-dff~s~=ӟndEy{sv͹ܚ[C5?;jg- ֮w>-u=nRr`O&,_|޾vkM6H GJ XAVݵ)o[Vj#jC!_TfXR騍"*zwp,D]w Jl" v5e ,0vd#}7 wKoqfjBā2ĖZGN.Q w}=$[hQ,D"޳aD"/??ROG"lmjjصk{W_'}_h7wv0뿒S*DXV_G?O.\ok?O_|o)/%,E&U]h y1r:ʑɗ/*D! ']ZWg) ,F{|}o )!,ƉVӧfq,$_Z��-5mٲ!)|OܖE/6`á@F|>�!E!K/OU{5$tttmܸq?ֶwn7r|^w;v֒AjMM +oߏ5]W(ͧc(LԹ0H|7F[o}t^ IgjZN^U'ox+V_fͪOW%6U4AӮ*:)79im,.z|w]X[mtbYIڣY*ӄ YR%A\O4IQX%ǣHoMFG3xzycaYk`dQE1\JTLBDA`iS=z鮮.۝x +O?XՁ=km⋏6N[dޢ(ʺuۡ{>hS??!0>h�b_?%kHvK/t\eNg({WUUմiӆ=V ?> }F3]2C$<WZ筶GVzm߾S͛7I׿mWɖ4�z;}Ys?=p׳Y=b"HFF'|2A,fsaDE38w!ƶ z2sV\tE>7ps] f'k 60BCU`0L4}3O!,.٣NFdM1$U!4T,$eqkTmO쬆工O:ZBZ=}#}_?;N:dq ;6=کyo߾Z^R߻k~o|$4 -5|{cߋ^Q[Ofdp<;6m3R4̐jh.)_b6M+Z_9N-_?c?䂻6 nr 1ٟ]i?wR&e#Y\4M#TUejR(f3%R[YżxʖaX0kt<Wz3i)!O Gd*BLp<(1֙AD38QzF1Fg\jO/8;Q&6tfi17;5fFof0F v!3TΝ~a\dIUkU ExTI ,BHhH6ڸxDfX*iLLPB$nV`\swkt,;@Ch}q}+n5zv=gN5c},pJ1orkKcIɴS1 b vm>qWܝfskeY=wܽ{5k<l6JY+Vxé^h:]925WWzk=E4M~Z<?l49ז,w˭/s9pիZ^^(H*PҚOshgZiPf>DVWnχ3@3hƥ6Eub8j6\Pa zz:(D#gq}bv}ORb0Sz+W+ ,ef'GT .cdvp )4o+aB۩htpgSd!)of>5X!蓊fBNe4؝;?F7Ea_xxg-vhRtcf^ԆpisoN3TԤ֬Y~'nHxz`i3 S??[fhr:/<>xh!ig@M5Mt>] Cᬬ 6w}X_~.--Bk78 7#{jB^~p[ k(4 *h#gn:y{ '?)//?rH[c7,BeP՗` 9]h>jދUZ^OeF잸ՖAHܻp"=8]y椴Y"5{:#=u0ƈfp|3FH7:B^њKq5`6z<1E6/Q,O; !4ec轿5v5 z+kO +La%zi|R+Yßkx鷍HXHD)ETZ|<BJl.Kj4 ~9gѝm 5d9z V.~6,/O~5kvmlWN"Q%Wx`(w}ҥ+E$ _/>}ߜ:sϽ<K}yyh@;`/6/\߮ݻwz׿]ַuw\|ْOSuuɓ'}sܽ;mv5 <ݖx<gu֥ {/r]VE 7ygΝ:?xꩧ:0R4J8MԠ/VXH4SSXHq5`rp=} Hktl*d-KuD%]P<ғp!D1Q2ڸhP!<5JWo!!(-"JH,$QcD(эZTBPイFG#ay5NkFO$ KiW\i59p:#*!QPh=gV"Ƈ|t7_z:�e%b϶ Q5=_νp+YV\sxշk:nÆ=/|,[&PZ{ÆݯH$|?b\}XXqK9.Ps^wuvK/TVV#֮kO?C;n|ܲe}o.4Lwal0PVuGƐgw黻=VoeY!1,~_/`ڻG3x2̅?\veeeeҗԷûxwXo[J.$>ꞾfO\mhZw,,M3 t,{4mn}ÝնĻ0F98(!rz;<)ctg4:e6P/%*B#,M;b0,G!U&Irct:_|_|A{{{aaUW]u>mLY-;}_黤ODȐ_GK9*[?_rʧ~?vSu߿<EFF[oUSSa3eʔj0}Zvc oct U};$N]p 17ԙ][~Ts^~~믿v;^kiiٲeK$9s%Klٲp[n{1:&xEECn }q̒7$z[?`Œ-,`$o} `Y EX)V&U~9B67e@3E3X4SBzsi VƱ~xS9erqZXHiP40 5;`%//oण&pA-t4UK ^t vBboc|w{/}K+++GXr\xt͕|<Z#-F`_C[ۿow̜9s{oIIի/˵q/}K&oe]v3R( yH@rDrv$Ez_0R۾=SZ.׵`! H.Ж̳0,cOSP%͉M!1Vm敛i\2,'3;P.[d=ٻ0:L~KmFWn zL:qm`9JUB8sW;*Vڷhc-ʢZPa47y+7;5 XXD5zsevrOc ktt G1lЦ;_k#h&`a^ɞA} > ee1|=c-"A_~{{z׶lr~\~)YBi|#Bro4 O_8ACo(J+ڳgOFFEђ*"_ul-P<|BKf>ZĈ<qIPBD:bJ܅Z9gqʭBT-cs|Od(7{mEu{8wlʡ$Xscb'ڒʗ٦.&Ka -痓?/䜵yLaQLˆ[U &vUdiʗu"t&fY;3U6ν'sd!L9' g9\;w\KU.j#C7mڴiӦ X 5oZRΰ7R{( HSMsxhoÖQSw.I$ "FKq|( OKs۳@|,,DOK̚yۅyk\ݭ"jVo$(/X,K$O9-(!JC^t?FzߕxY;DB+w *ˈj#9r겠Q~L/5c[?ze|cT&YY:7lP&nmN~*8-Ά]D+^sNLo윎& QdBӘ=B4(a^˞O{%4iqt!dMco` py3]C[B<Q1ϥN~ E+L;'ff *G)̅a4SKImQG(!:#mLvGq%-ιiUDU4n=*5$ZFF[2גWn:ϖћҧH*Do `t $Plca!-quH #1F-eqrCQEi MS]R"ޅ FoJ!e12;8 lFgzӸxf.褬EyͰTgCq|K'0M, EaB,=k -ZYtXY\t"'8�g`YlsYf="s ._nĪȤ1^q7B(TYW°xj'hk\ E#E u:12ĕm {bņWJtx}")%�a��0PuDշSz:/'Gzbqځ:oIU'30GѨT6r�66k0FEμ.#< Y*$�7N+4n%8i LtbBPtoaܙ2T:"©P'9#��#n:3Fv/28WgE8-g2R��@��������KNY4H?z���@JBeskZ^FAHg ���`d5��<Gj>퀡 dB%ݘl` ��Í"R<NP4yrh zĬm ����e-Ea*$h?=˗R=+mq]Z\L5��� {db %>u/gt 6!(,dNH��GJBd,*C#zMgXlqlL,X`�peir5֞L:[T,Nv].d!՝;^nKn10��F(o_(yk\ִdMLѠ!\ 9 1_5LkL66řꏄl\n,��($A=?wW ECʺQDT*喙,8h%rdF?ADTWf)� ��F!(ή`f8 T"nR%چ� ����`J����0a@����0 ����a`����0�����FX�����# ,��������� ����`A����0 ����a`����0�����FX�����# ,��������� ����`A����0 ����a`����0�����F.ѕ����IENDB`�������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/object.assign without depth.png���������������������������������0000664�0000000�0000000�00000013663�14332737457�0025413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��v�����Re���NPLTEYYYEDEutuhghYXYͻޠgfgq�� IDATx흋v:@{0l:9z)lM%:'! K]%׿N�OA;�@�xvŹTҿ(|'UrQ]bˋh-kbP3fsS`m]#ۓuO ک~/h#rUj7+YiT=ow'U׍2:94uu_չPָ[8ۣ�icV^]95Oa,q39v`­grkgvv\vf?v0b 37t~&kg\t1x5Y.R@�@�@;�@�@;�@\[]rYQ�Y^E�Yvϴmfl>lz(-K:UR?7X.$-c.Zlݵ:nx+iY{]iِZn<.gU괡/iו )v:anfJa;h7땵9dY5mMrc;s.v]i٨ZŔ,i&VIҮ+-+7=ٹ. ȋcuf9R;E' ]=se!@;�@�@;�@�]p,hW]2e3Ov\杻ѮEx.l,joc\a7~K8 ]R哸E n]qhKMvcnv1y< X.n)3 c PvM _ 0njyzcV8+L) L6l)*Bb}-Z(ίVBA;ey]t1xTH�O �ځ�hv �ځ�hv ڥuÞPx E[֮vxv.<۵S1w8y^VGK &kx6kWfvZbvqRrkvN S8gPޓq<۵e]`k0Y;_=Uł`ځgvÒN=zc )E;oպ?WL[E pql~�[v �( �ځ�hv �ځ�h)Y`fEzݡ�ֲB;3hB-6J`Wv �c;�@�@*�@v �ځ�hv �ځ�h+&N�2vLIA; bG13 Nh1wEyK>S ֔׮׮n"qp" 9mAv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv S+ά}U"7kÐi+CFܡkÈgh7>"=YlokZ٦(Km`kc ΢iW]T{4vvo[{zQO,rP:Y馾ϊxmrծbBPOSvhӮO]ώ0v3܌jgwڹNLDMPf0U6ٻ{x1NÈ\ !� @;�@�@;�@�]NCwK!랪3xEks՟4hmuIݠ8+.ݮn66Υ~3i_j٢sa\S  vu!N»Y9\HA-ؙL%xsqU*hg& LhMٴlŨ`1v2+bV;o)dXɆN\㔛ɪRr\\D;Ȱ.p<OՎcyv'�@�@;�@�@;`v\҃DOK=T iRE_jgi׭v<ΠK\]ݮ߇;{?MZm{=jSNFKinUx|{!kk0.|Ub vMpSEN&>A q_'kz݆P_ؓ;+w}QUS;lwlAƸ-)G\j/h:ܧɌ.iS}wDtvlrܥl6㰷A3w,ˌsr {N^l<e g{s3Y;Cu3#Dg8W/@�@;�@�@;�@�X^JIx5VD;M 3hB;g`o֜@ `lv �ځ�\H�H|@;�@�@;�@vncF;pU@vALV-b*fP0R�D=8vՅlv8vq:_.@ȦhNav �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�h gڢaD;Uve;[S?g4#R%֯]%M[2Ί`\n-Y!6hW7z-iW7v 6v%He1jÁMG1zWu*V=۫NAM{r;<m?nT]3?}?1,]?f5~$^ʿucSڵĞE>ݪc;Ghĸ{G5{ÏiM.*EvV3=4.ƍ1 ُO1]\?s)^8N;O.8C#$f 85QT$;kt]`xڹnLmShBӼvx8?Q:BkIܜRQ?8F90V.vn:’vюb|\|'ɒvwA%6KUƝvIܤ]F:hsx<~;40LNʪ8-_Ddvժ0馟ML Qpuv}b8Dgc֍4KƤa8{~u \3n=gDiB<x N{+:ّF7Sw f?@�@;�@�@;՟w^O_ϪOEwkeӍv3lRK)Y \sY:ܸTJqY.mܛLb}B]ꋿnx7h#d mӸjg=YzIkq:TWe/jgoOӃ|g>]NY0LFN]* _RS>!KU?Z?çV]OӸv#t&°TU\ه~.Y94.u;J3"8*PT]ԇY|1JjvzM1/D MԳcG3Z+r.&$avh~cRX(re]:޸?YJ; !oG*NBaZ;E p0 PkK7YƬ&c,˙?o-ͬG@nvg)~#xvo]`V??V:µq/N/?)*0F i:b6^"y'қ\3P4 ΍bb]6U&Z7jI>-&v6>fv*-d~Nq;h:Yc_OM]zvM.}kg4OkGÏa&ڽvh\2vُq'Rgrc;G,ssS>FS ?[./0ҮٛKo1n]8菻зg]cQ@;Vdolz׋#tQWihlgO.Tݧߤ_Zϫ_¤F"vwIo{`~0Ν57e9/+YR,L6XcjK5P\A 4uo0)Ӥ_׼v*?yNG6PLi f N&:-~㫫'nu_Q~*eF TI7.sɟ ^8>r1hg>F4هk/)4knpn΋f4>MRyuFzO0Ƌ@9�]JS"d^v*Za2fS1v �ځ�hv �ځ�hv vR߉hj;ct.~ Ea_VD;?YdaoR�@8] v �ځ�hv �ځ�hv ک4cvRIûsv3X6'>mnflN4͇Ovd)^ +n/"K!T;slslJm&ԛA͕c^;%S+2lsڵٽ|21ݾ!v5vL)`-O'48bpv\ �$>�hv �ځ�hv 7׎ίکRۋjMe:^T.nBr&p#L<dvrCUӨ[G uUo�gcf2fAۻ&.Xh]Ҳ^ss'yEٻ۞cfte# Z={YvsǭLe# vDe=džNvgvv/nS 7tdvAr0eJ.瘝ZKL(-蓟Ҷ^;Nnˢݻű=t؋#E(v �ځ�hv �ځ�h]4ŠfG&1c ^#]ʓ,hӟ ڽ$%>%o]rL^*&MRmNv-ӃIڽ(UMH%+z SMحrlR-EA{Qv7%jו@eʱ iSv6]8,v r݋rܔ"mJ׮W9o`l.p%7%c2n[Үe 3݅BZ<�Nv �( �ځ�hv �ځ�hv`+{D;MlcI"=6G'Flcʱ솱�Q9FQ96㔢8sֱ =Oؤ ~�BjX O �ځ�hv �ځ�hv w Q]Ln5Yp;h1lLuQv)Z6xSnǰ Ywa l>C^7WVe|er;IS~{Űh(Φn97~W=-;ߞcw~el_clzkqhcw ڽ;9f''?|SF;ҍq4;We=ھt>EVJٱ]uQunPd[ b=ǴY,P)m6s?m{+8v �ځ�hv �ځ�hv f3kv£XHG# QHD;x{*?1vǸrhrGc;x �'P@�N�\H�H|@;�@�LcPo����IENDB`�����������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/python-mermaid-integration.png����������������������������������0000664�0000000�0000000�00000114203�14332737457�0025357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��C���������IDATxw}>gfK#PDz۲q\Iy=I'NJM͒ .wmwgg傮43/QDEQDEQDEQDEQDEQDEQDEQDEQD3Md(".$("Ny> FO�w]-"8=]绁+Owpuu۷ 5B}E\Ƹ\]Z{| öpe˖]S9ZF))qBqᡵ+RB\sQt/a{3.]6~V:pI$y"' �d� a(�/\싽аN>5" H\+2뺸{ur }+ρub/40BR8Nd2_+qv>ZkEH_8#0'.k؉&Iq_ayZbqN^�'vrA2Zɓ(.)q?u)++}\-j!.?(4y/-h |Eqfܸqw}t!/g_#nVbQGĝqaw1fϞMII ݻw'LEvRJ7o7nk_'JEqyDQ49>^}U2 ?<x0F&"|Eq`�VGxԩSt]ysO^DXA<y$ ,`РATWWG͔baV9øq?3c=Ư~+mv ƸIFQGSxbˌ3V&X۷/;Yl?OX|9 ,]6Jgfy뭷ѣC*P$)JlzMYYsַPJ#0{leX}D+7m6*++Z"VD큭R(ftЁgy^z;wrw2`˪RGX$iƌCYY" `q`;àAxᇹ΂ 8vXO:yDoǎ]qѹsӚaq_t'Zk:vNyy'رc7|35[|��<t2ZH15@at7nN7|M @ @@hK<h… d2\yTVV J�,|">`WJL&ꪫڵ+se۷[gdai0 A*iP BW@Wh2Ҡ Z(A6S( #lÇYr%W^y".% yѣs嗿~n'OB$@8ٽ'2xp?\QJ1A�%Mn#ξThЫu!)>BHtP^^Be4R 6OQghYbGe̙TWW_S*V:uČ3aˏ }zՏlIßٟѡTwǶ;hLuY]4JhPP#D#B6=1C9"4JIJ/ F-[Fuu5$JEѼY\ĥxM*--+k2~ z{;wdú<eF].oAcc#\ݺ"S?x %X C)%' p@ƺn<Bڵkٱc7t555M6?[ qN1}}&>SJ?AYW � t;7~A-P"j@Rr8|IQ G7ړZ xX!npP [y,Y)%Ç4!".`^P c.\ݍ3^Ǟ{�FaZ,y_5#Zh|Ռ&reLd4 J#EЪMqC.U7򏀱vn޼M61azU%,⒆ZaKZ+VYISs=+QA#$:p@.4(ܳ޴JU Z:ewtK#@A@�m# +LJh"ɴl2,G*Nfr-&.Nw *�m}ql^*MM͸ 2\vlϖMi)ߦÜݦqEkD#VB8ɂ̀A4#d# o/0X>ㅙMkݻٰa o߾Wż"-<ϋK,!C<ߚ\.o+߂h%ݳn!R]S$%d}V\%�!p4& Сl MhmaV_cos@)«~E}:tN'ŅB|˜RY0uTvzY1qq`ّ%A</"s > !=z$#ed9<ȑCXJMAdH(mwg !TM�E8s�b>+@&07f潟Ʌ&E}}=W!Cu+RBJ 8Ofcc# .ĉ9޽{H$HR1s U"U @ z>W_q DM&SZ%qd/L[ΤՄvh"L P)SDSLaUn0_?b�Kڞ}qFl_OƍZU8l>rRt:Mee%cȑ 2SUUY7qjHGO\{퍌9d%EFYA6 r$\v\D iY� "ࣈ)5?D5Z;cxqSS+VqNIIIt Pq^a` 7t҅˿ȑ#Y7_\.GUUݻwgĈL4!CP^^Z5!+ضc+K.7'g\}$ $D)9 |I tLYBjM$\ ?7*,]-b#Ό&&Nj'߶mؼy3#Fo߾o°8NPRm6|M~a ĠA7nΝ;yY~=/2O<D3j(FQcPɶhnR{??[o#@6J d2><S/̘SBmPh@ &㷕m(V#7ranV:txT(8Wh.?[nqaii)%%%hܹ3G&عs'Wf̙3zGݧ7\=6rOx?u{׾ nl%ir9M (c5CcQN=7-Ʌ2aWݻwzh57z6Xm3k֬aٲe?<%_JKKԩF}vlҥY~+V' |}q)IW{&ʝDžl6G"H847gihW^᭷ȑ8C>}<y2:}<12ղ(6D"th&dW@|Auغu+~;555yǴ"8HRVfB$& Bk5֚#3l0vl֯uJ(/+W<NVp NlɐN|vSS}+ =L&˂ xزe {?ݺԴFEqkp|_0<PJQ__|@yyyQąyQ_5dyuV9 Bs;zM oN6\p]AMPQYK0ɤDF}_y/2?wMnݘ?>[>~EaHlݺ˗GQ8k:Qą6>}:Ǐ<Dl-KBn;Jss3#e℉9cFѩ+$ 2}L&+ׯɤCCCqHRL2ɓ .P0<fl޼l6㋭>h}uROr >"t*,~p$*#G77=J x^ R),H mw>r 49G:q$ຮ1(AFQڵK2rHF+EqaG裏/Gf1ĭ3Ek\}@Fz8!#&;8JH@lKƧԄ;`iss8.Aq N϶mػw/#Gd2׎".'կH$u]y\\vk~} �?" JHM4q }ǁ49N CGiiIX"(`3COnѣGY|9]taĉ1oEq6hm.͖=|6ld O(~gڹj%j~邇T2߇\ 3-hcwЉ2֬YC."׹Gi|( ۈք"ݻy1byDž+bUOv.A=|_㼅^aqthcS4@+ \&,"!q$7p֭rl6ʕ+%K/[m-iǏgժUi&Of'5H<w~SGG62\Nn:.\__Bɍi ' tKZ9FE)&֭ɮmYƎ*2KK4aJ355̜y6m__5kcǎEkʕkѿ<DQZGaҥ 8aÆJj7y^gH$a vQa=0`�f̘j/`Iw8hr/ lkVod5lذLs#iٙApŤi.d 5y rD"IcGNǼyxyp}a̙L|5:( �;!d L͛7sa>ϓL&OW];AiEĉZe>Y_ xwZ Y`[=>AdRǺX*LZtgL9]r47˨px>&p{QPktڙO<BJskAM. 35 cǎ[oѫW/ƏW[ m5ufrVy?O>}:W_}u?N5yfOsssTgzjn݊iteQ 680P{Ce&d3&"0 IFL8+TLPmB\ӳ&Ν;ٴi=PDIq>/ "+mNc=Ν;Y0֬.$MMM444wވpǎ466RRRB>}1c#gБt!MӚSuVuqD2 N:E.H$,G5z ,r Lsi_ ( 1O8[oEMM W]uUTzw9b2G%}Eq39knn뮣={D)Ecc#wfƍlذ={ypM71zh Duu5zA`MF)!$q7!x<t5 ʌ0m'$HQi.\VD$kv>s¦:c|t=<ӥT'N3ϰrJCb[" a-ʰi/w料ݻw:}Fkjj(++Gz >AѹshaXFp\h@Jt @82V>*�MB@"a湡I|Fz9+La'k BjM IzԖ" l|A\=>:z'B<ҥKqkB4_͛oK/СCرcL h ]vW\9tԉA1x`:wZ{⏅ 0\!Ȃ�I; |af@uG(tВ@HPS� [2{_6J $2vЎr|Pemt9/3./ Q)ő#Gx>|8>P]f O< 6]v=Ŝ)6/tf^z =NGo,{ؐI[+<RLl 25mg{$TOkJtǣĜtm΅AW}nt>/2`٥79^ dظq#Ǐ禛nP-ػw/_E"~ܹ)9_Eq&].˗/gɒ%<CTTT|h Ƕj͘i~6Od(BI#�Dhr\h�{<`c7K;w.i4N놆|I?̀* ?3,qtCCCdaL2#$l\a!4W#gccLcTe4[; 0ڞ@ ʉNIDH s.4=߃+0kk;M cƍtM}x7`ɒ%tM\q$]a뭷b֭<C$6ą^6fآE@j@1=z3ABjDA! Ppg@4l{j>|<!EL�d2̙3Z&OPJb y mFyyy^%AkY$-V>|zɓ'3v<t hk6iL\"</ӻXBQ;8ξN rF8R D(jG?+ aAYs/;05[x޽{yg>CXRJoKyy9sO( 7E΋_~f͚I? Vkd #ޘ6nƑcoQh=U$LdDDcܜa^a# rD\.ǼyHRx{ .jly:t|3 6,ZO+ g*m /̙30`@4ڋwS-Zb)̞.2¤%Q*(i Pf:tZZ /rj 5 zkݻX8RQ{kI&QZZ XEV@˼g} OGJh ; fHo@EU)Ǐg8vm;7qCDD:YCJTuH*B#x0D<#.\ɓ'�3IyZ9s0`�OI8Z3c5kְh">PSSs?Cu,� UЩK'M5wͺҶGu[kDWJKpR@+pЧr C+Z*hjjbܹ3AT^I8?矧={bak6kϓ'OSOѧO&OL:>-#yvZdPK=qʫ$ei^z)oZȟ|O?D{: ?4ӡE 'DI&A+(4 ~xi{֚e˖sN뮈50Q>Bp^}U1bDKe ס x{dž ;}A}ERz*yqjo6|6ݼM),IÑV� #\rkBSH.}yȸq⦵R XhSNeԩi|ϫDWD!nE8Áx=z4Feh=w^ 0)H! |M.G~F.|Шn|24PJqlŦȐD~FB*uq>{.'СC]6EaO `߿[owv<"$~K2Mvdޗ̠A=PA~D]󟰶Dz@ke>5 xС_=ozuuu<3R).z葷*>EaZCk1a7o >J9t8F$nܴ Nl?~K9YAFƩqRg_\iNdU.{ahgRraϟσ>Heee:;|0o6;w{a̘1yv񖊅YDm@̝;'NpM7ѱcS+qOժ&J),?Ӕo~h*"II[icLDG`x{ CM_xZs]w-~x/ˡbժUL6-+AMx78pis /LDDDđˇǗ^z˗!d$(,N.{8xǡyq 7ХKEڣ8yf~_Я_?>OETJ\">*f֚yQRRɓ*qU裏2vX*[[\ ꫯr!(!z3Xp޽<hyٳg_K)Yz5˖-kw}Nskm Q0-?l6SYYyJ Qe/ mPRmiy5jTdZCcc#>3gd„ 8s`D^y8qb['.u>,˗/K_C˞?셡rtRndHl6_yw}bq +Vi&LB>}ZxA!Z*=z0sHHk\R)�~ӧO&L:L{n_={/})Jk(�۴)F͛Guu5&Lzr_dV!<e׮]?͋t/V\!Am߾|0/߮Dcǎ#K_gĻ}HEKRWWɓݻiI/4yo&+W_~yG3l*`<90b_ y())a̙y~qd2!xXd t\E|ZR!ӴpBzѣsDqBGOPZZwUg}[WGloƆ^d!X<3̘1#d2ڵk / R"8~Eh"6oɓׯ_T YNuRF9J)~_eЭ[S{\7uS__Elݺ/~<x>CjkkE(hb=p�/W^5˅k2x<r8êUxw>}:Fjs3?�<{ `5s;[_Dz믿Ν;Gqׯ</A&6555QqEV3{sΈMkd,v]d2I6رc̚5S>80 6|�Ӽi"?|>g?hE|7�8vWŋ/=ÕW^I6#m(+yg-ZD>}?~|dt rdMs{VwcÆ |_W^h\Ù Ld¿L3`"0і] hy'ٳ'#F̑ݻwG+M~8z(dD"E\8+ `ٲe۷iӦѩS' ȫ縞OX8N4fZWWǼyׯW^yenK> ¹o"^<6m|<@II `&틄5֮]׿u.] |2&@Ȱ]dmҥK4hcƌqɫ\{ʼn-l&SO=šCxh8.О&7_{Zc8bw Ӆ;; v?6o)‡s ԁ(HT^+!N-\?{OmQ~^DƆA .M;4Nsc:'ԣǞ;kKI9ex⽁8X8A 7طo3fBjSf!vAjV[XrrJn6 GBK8°.!:?( h׀d,`zO%gGHt0ͥ=W3d8gŊ-Dqz[>wKMMw/M*m[ZZR! >"2a_NPhNM\@"tFSVw(gA*9rhrhHR͑BMÖKJ)#m6* W8ـO@h7NjPEf8 :~R)6'?+(4DlذK0aB/4+BhAD+RWhٻw/sΥiӦQ]]K" {Z!'NēE2(7\`}Z%4u^zn>ds"۔67YRNy`3gNmm_@i CGxk,N9®gID:"%@ hhT nJ{D|tt;!ЁBD:kdP{qs-LDK%p, jŅ`<űi*Z n8&.僦dځ@eM)AC\|˹pDgfM ]qNhQx-yPd2^z%oWUxJ'ȸ&q/ ahL"rЀgҩR<)H=gI$\|R)>-غEkb>CO߀jGwѡv! q A q\' W: A531#=EJb(M;4lQ2@:Y@PA8gI)6)D3�)(?5=%8n E+OdrVr啴[g 5jǑxYAk[ W=|rR82uAzμi*JN:'Nph_)cGNCi:w`NN[4}k KrW2~<!g\"'Ѧ\Nqa9JmM!eFSԶ_"܄gRH9~2I/#NH%~vѱcPG]c!mcǎUUUyZykto-F}xIq&gBH7^!lt蜦KM9cyc}.g9o!> !q04\VZfKS#Fv<AN唔@z0AYJҌ0f2FrtLEG@ta'ycE<x_馛{TۋKDS%?&MjzbЎHG[JkG@$)?'[eq dR8lJJ:i-Fj|O|݈ )uHq Vs<C~;xf9ž={xihh`ڴi׏.]DVL;$Ѵ4{y PR.Wr6>uc&JP+)'=6oʡu7Qn#`SOf9r;w_u]nFKN(++Oy=h9eI;-. QK-MtI2xpU@- LkC$&с ,R nL0D#FOa+!ozjf͚ň#N Ǣ| E*h |A&4Z*4J5%jp{Z()�j2$^. 娪,߯D&2cQ:mQh C~z|MvE2DJɚ5kcĉtڕN:Ej8|QZi#L24D#MȡDPgߗB22M Tk=Z-"!>D9vǎck8pΝ;>\7]ұcS|q[J'/"27&pD%Yq=BA;\ �D3>H" h?*\DϯZ XhCeʔ)Fs$uKFk?h;Z0i.2!Pxa}d!LPi-LTYH)4t8Y)$ )S 8U0pQÊ+Xx1'OW^|S⦛n pB̙?2e }:QN ql񏅓mI1)gf2Z8 PyA(] -ZE}gϞ=ر vZ2 {kAJɼyxw={6='Nk$@;lYD./)̯jH#P~�h}Q]Mk urpF<Uŷ{ɸgcx9x f͢o߾ ('!\*0F( A J;H7$оF 6ZHc�ZIv!+9477&1A{#YSMMM߿[l2֭[ 2ɓ'3i$#y-0}t֬Y… Yr%JMM ]w O>yJR hlhc*ZK/P~$ A!(BӵݵO4Z@"A+T k9 Z(j-۷ 6;o>:vȤI1bD$�f͚Y%KDUÆ 6u`ƿ)JSb,fn/Q$&ۥ9* pI7/:I}"4"*qhvxTl6˲eXr%7p&M:aKC9F�3y_frh xk-fhm~i82!Hk֘pСf( jsQv Xl뮻ɓ'3`�t'ϨQ5j`ɒ% A3f W^y!|lsmQݹ9gm|cZሲkjFEha4mF)pњ }^: X؛2r!nʪUXjlZ>O3ydjkkL߸i.&L`„ ޽ŋl2{9̙øq7n}k׮P(k2,\q+)+)e !d)A^^G Na<NkT`,د:Aĥhtǎt҅뮻+ OR}u%RGa0fݎRH@L#YC@J !%dݷ:VZŦM<޽{3m4&NH#t<&COiڵ+wqӧOgŊX׳b vĉ>|8zsu7yy̙ Zif}.*ʫ@oҀP 4�7"]P&xnvuV<yݻwi&VZŶm(--eС\y啌1N:E1:{MϞ=Yv-֭cҥ AݧUl߾9s^$W^u5I7 BYVIE"$'UD -Ah(\ϼjvvO8oΝ;>5CQQpi üTX)P-"�F>I: 'Ara׉]mgڍ^{RVVѣ;vlt#F +&jjmƊ+Xf o& fԨIѣ Tu(g4T4 #"̫kGƯ%"[ex0PÇi&֯ڵk9~8ݻwg7!CJ"g=׼0M8%ѺcǎL:I&Ek /N2fx̆ ٴiO*F hh!�-͜s\@lN/΍ *L V\… 4iSL[qt\:P1A #T0l�阼.My ouؿo?kׯeÆlڴcGOҧo-3gdر 0 SⰯœケ_~׏o?B7rziصs={ORUYAWaϬQ,#!7t CTVaaP\];-Y͛7 ]MMM^^a|..>nt:͈#2dcռz W,cᢷ9yGAVPV_~9*8NBN/8AĒvZ,JDO[*ض_~'}WI̘1;Ru9&6qT81a^;D�?U~) |+G&}ES|a=k֮alݾTeyXFG}nq4մQL:+[%<>Lcyk9U}qIh k8=Z0>e|_/%-W'ذy5k׮fÆط�]tbɌ9!Cбc o\_,dTn-DУGwՓ'nzf<oP.AY]*k8Q 0 FEsv&@'#ṇx0\-c2}}AͶRϟ֭[{6lX뗃ylqCSna|(:*:7rREncXa)WϾr >өcuh^™&Vams #.@KJJ4h!P^K!P*`úEz7פFL)I}nOJi.1OfVĜWֱe</K~1j8q:ݢcqvB00qC|@EfMkd+?b*Z%R 8km)hlP8Pax#6oF}gƍk :믿>_KfK>)3g%$ ! CJZ|-+/q5 :2ʰrYQ4h={u\TN+̷BPP_oƾ/igqQG�_eسg;bhƥy B=B o*K˖/)qF3jHBmm0Bm59Z5lݺ+X%BtM0x04}PxH'>)1dle&@*  ]Fi0>>B9‹/;3Ν;[z1r8L %X '\CMΟ!%d/_ΐ!+)/3KJȰ3k-BmI(86_Cֵ Th!AP̿ R,Z|V1ޢԛ[P^ځoRNtС*K~7+g[^R7|kGNlU݇ɓc"p"LV?PRR52xX5C*b-gZN!5~}3x`**RR^^BG:Uu0 I(+u:7`K/i&@.#qdԨpÍ&3{DL tEaƻ(\4䞱u]F,X{&Tv>\Vasv 02 7/>a:Vj D=jja2+ ZnRm&˶m8UUr Jx@ܨʔE:#. sD:L#ǭ=//ݔd:4.T}<69eH:em#}6nZʕqбcGr\l7 )[hBpIc -: ٦(cXزץ 8T H%]JJJqpYj?g^Jæ&҄y>+V,c|k_ <0׽{Oh4yZ;yaE%"$ґuB~ص!-ݻy0`�7|s;}Va__}x?DnWbD]y.q"�PTlv+`رZJҥVi⣅Ŷht' ߛ,QH] 4C0>.!280 0#DE)EEEӦM 0O穧 {cc$)ONLRPYQIeeE)x- BD^{: &v̸R:p 7� M6 ?G<}wvҵk׈P)kcǎO<At)p>F./0.b/ʾq*T<#"_EII _='N`ٲe 6M$ <OJBVG8<$!R(!6daTh!x<d[gM$XQQA.innV=1<H pa UHe1B:Ս!4#^*$3.t:Ha)-ΙmBUxwyg"궯AT'lIk"./fȑ=>nsq}E8سg׭O>ۗѣGkq :Ww!É*< .lNS[yA$BGj7^1ݢ042<q FDؽ{7oFT&tZ+ ?y}#l"&ƪPDI7jnLMfs(K|_# sLáGygBz n TR@Ei9p�կ0`�f#q(gS/pqb[5yfBoذ9N:1yd^{5-ZDMZ** |fdtAq5 [[i+fyq]Rp ":r}&<</@UK'gMkeRBRuyh}-i*+_J(Ji*�ɷ]zѦa[ {Q:w ?Op*څ1;5kvMCC7O W{ax\3W]t>kTH44ԳnZ*EAn2dk֬n<g5&pٗf ؍f}snQps01ѷI&pD=k֬ηСÍvra'vIBǪL@J ӎ&4IǑQ9v6ƪ?󿀐u]rYIP[5\3M)4ݷ'@&`ѣ;v,/ﲰt֑ ?k,Ǝ&_h0|"&Eo�O`''8o&`7n;DtS;|0Ƕm[Ak&} ˂B7J***ѣGh}eɒx6,d<>•|3#L78&OxN (--O fsH2lI?5)Ǝel6ǎ7ѣТٖm(E3* K:c|# �l||^ xV7n J?#F <466ew9r;V}heTmU†CiTYU*xEP*} 㦌ֺ5h&TsI$|Jr-H[:#Gg΄(bCS4VBPlֹ@e FVcul,"G*n-K2)in6#8 H&L9'6u@B& <636ϿEiGԩ]t9%&>acZO". <. !ر͛?`A;Gq~q6Gt:I&] (M;8N?e2PFCla#�97tI. P6 8(C€S}?jJ ! |J&hj8.IT({@"aX`֮.L֔f I@ SBT�‰3]tak=/H0a%5y>A`,R|N@.¬H$ rGRP$;*8fht0~#Ge%܊/mz@9;B*͛9ykRFZ6u/~7|}sd2TO+D¤?hmH\3D{HkS1zpy L 6) @G+$.ɤN s@& ;ab0,Jilk\.G*BAmm-wM.^F<kZdz:yH':GD i&>3i3^ "!M ӵl J)& ӂ6ڵkԧ>5J Zkv/d2BLRʜFJH$%W\95t-`1-X&L-[nE'6,])GD;-Jr<q42d2^h-0xd"A& kց@ $;B;ɌEOs~ ~ҒjnkRM1]Hf/$^N#YihUp󽻶6iIzD)|#s2Y%$A�$fsd2MDEEl@ii)ld0u'l2%vRhV_Sߝ#9r8‘;v{2vxOq|[**> +{ Ev0Dw �P|@sàa=)ef $TRGOJ%MQHza?l[Kbvc(2@�lozHMϴa 9(m7ϗ{!r`bk}5 Р$T*~)H09Nl6ؕ._@<Op |xg_3M!d_7 OpsZRWp A8p!^yeKWxN$…t6nMM9 JJh ]R_DYYJAii �4kD}aϟfH &ds9|?K޽ٳw kZsYD?۲:6koeDl7-H\2ptN̅[RVVf~&B7EL98Ni\!`,t RpqJFWۏ0B*q](%q]\y%% $LdBƤt\�moH'4EQ5 hh:FLУw7&O7)$km⚒Qx-ug_gĠS0+T2 `h,A9v|]00ljӔ˩I*AI s.Lf<?&$CW^yVgҡ*p =g{ۧ`\9R5=KG}}T)^!H]r9Urd!LN&aS|)K: u@Ĝ{8>3c/ a0ҬйYrDQ'&挦J&q4p]wq{{H7AEyn[׮L461Q!ṹ|.{>=4KINYPS=m4 kk5( #tQRFy1J44()IVjn9ٳoT ? 6~EB.$Aan c+<v$^{ymAΝ5kw~/44QVY/Cyy9/()I4k$ZfSRB&cܙ'% cZ2 ^#%# j%rFJ0U܆d5!S8RJR<)mɓ')It*?#|4\+WK>5jeeeq: neG},X'S^{宻>E~5!9jnB(zYp4677{%"j1&u|P?8Uu!C|𑃀V93<áCGׯ_Xؖqcr&}Zk3O?W^0o}[xutВ!W(əܜ<E.hl̅+T*Y@qK |O�&kW$I!ZPcQE#SYa $$Z\?TTrXk0o,LUqBR)ο\VRʀK7P:&?'Kp%3Tw`UXb-z2k,n:tp'ɛ墾vǃ w'dܹ466g`gҡ3JiȀP*PO=3 [0M5(4yq1Cc ,;f) L:/|kׄFMEY%/<y2<�#FXX∏]<(>ncjN5֭%KQ&ýS* I"@-5JK?LGf 'D,@d$89X @14hRĮ%(F$z@%PbmiǤ( ۇKD J #p [y á_d kEKSq$Mj�/ N=8HǎJJ[!'+<s/7̭J޽#-1N_́&t\.ŋyYjBjxAƌ+}$rq 9#r:uE,(7䅴7*BfB >l8e d $%̜y=O/t>ˌٺe =:gذaqxTVV?Dp<M&1?o~bX… o˚5kڵ+vw)+B <!ti�*c: !$[Z,c Sz ]2lg�'>F<y-XG%# [s ?79T?DL7Y}s DP&́S 1h/qSo~<Lz-{z뭬Zgy'x"x>O1tH+Td2<쳼Klݺ.]~ロ\7 7$kEB!\d$8wm&R6U'ɳΙBkS7K`w0tξ{QZ0fh0h /}y_tMqQxI T0={6/"`|{oSuzǤ8RBanRzC`n!YḶmf$Ù^uޟ4\20e2.r@sJY'̩h@h\'ɬYܥƎ06ayy9SLaҤIر^z^{7xaÆq=pWRYYyFf7 o͌9cʔ);Bx)B!r_%@%" AR-@>eIpfݫ7_oh4 ]:t{w'cڴi{ <8vCDڴy ctR|g̘1_%cƌTh! S)]¾N!Th\3? K 3n)P<PI%%ɔ w!q Ck PgiL ֮^#fh3"T>CmΓ82 AYˌעtάʐZ8J1x` >9^{5^}UΝ;smq-еkר<YhO=k׮K.x|3ay6֔A@"#: T2MP0׮*GLֲB@MҊ}ҷ}VK} ?uTN͛y饗7o ,`zL>(zf}7|'|ݻwS^^̙3:th)+f= Ӊt5B k|B'AN� ӫ[Gkvi@/ &:jpSk~"pI,=&L{/r-C #DBPgMЉ43Αde)rZ-8 EP"?YaD@,,˗/^`ժUW\=CUUg7Ջ;3o;晆&y<62ac&*9WyM=:UУ_ZZ2sJta;;2B2\MMY6oN*E t5JQEi~SS?< ;v젤ӧsw | 4[n3fPQQ}NtzhjZa>gАޔjS"׎1 ?"ThCh0xx%0f.1֊}%q~|1@< B |RtkOnZ(Lt]%́CSY4WATlه?︴S2e={67L>q?Sƍ`I$Z蟬 $J Oa75'&FZ\B#cq'R(ΐɺ?halüNoВbGR> wK.W_eΜ9w#ѱcGƏẅ́ ix| hX ҟq (V0 cO> 2̭o._%# MÛWN٦�-M� -H8n@i6)Hkslo!p.@|8ǡ|[<o p ; 2ă1Z8Im ]C+Sd3~,`FcB@׬AI*L4eo=h0j!&&'Ofĉ;vٳg#d̙t-m=+cTh J|\V:&Jiu~ؘ暙^pfhYtiyW~Yg%# GY 'p ;B�d"kIv:t2TcJZ&`Csf)))СhpCΫ'rijػk?#1QG b쇆~!l-Pbo.]pNE~9rpy;rXhi@ gZ�a5E@ya;d #ZI~'D%Lҭ[7/:^ύrq2~amnhlؼd)*P %Z3i%´ues$I@sD#APFIJYG*R% Gsa rj6Ʋ"ڍKH5=ӛ$rٻ3n"H"0th<iyXK)M2 i2~ 8-q%֯b%0 kp\snq%aUhO服SZZ�VݿƆ,~. .Ŝ^DB6 *HḊ5U7A"j7Eu#RSl`S~hacU�Yו455{F/ƈC2t׼O._EEy ]TQ^^JYU* Z·Ʌ@[ak p0l1D7�_o۩uar4NҡC>ieU HXf斵tOvi v>ګб#]jdO 7]O E2'BBcҎ]" . V ![,r h4H?(_f&P(Hc"0 !"BݹVҹ6LPh2ޖمN pUpc {ac\LUV"T�dtHw-3 fbcíM*(si@IBN4 5{ Fp3nZh'@ LP 8ٸ'@?_Cwѵ6k4'O6Zlѫ`MOG2N(ȡe@f2 QBqp['9ps4eG!\kIĆ5b"vNZ4Ei@|ظ�-2 >#_9Xt6ܚpZDEnpE{ڹŘx7M:&%!qE>4nr`noZ8g%H%\ /&xgGgkƌ˃~Eg [F\h(d7q$@$4R!>d>tIyT),cFi[Gl(|/AKzJdbD@b+eUڤ4ߌk3LCK=o-Zw,h#q9Xߣ {KQ/΅'c+9ɇ ŊB B"kVo m1ar\&斅UH'+:,V/n7?͖-xg??NiwACBD7t%Da" #hdXgt R\tyXp%OjEaY\Cꑺ ~.�)ٵ$Gn$]ƒwW3n;-l@1r>^a 7}@o0xM)Ulê/JѦJĮ:J1yk&R&Ḡo\C9Y~ Gk_{{]:1jh{ ѱz%2=h+6YݾAdaBPrLuJ4-̜j l)cZN-䰬0"Y؇% O(t%vEB:]RyykT&' > |B|h24BSC.߭o"2%M!cG*Nd* TV%W>wO.]:}D"/+8 T3舺޲5+(QG G#|[ԥ4L,5f.RwP U�Z"iɣH!E}wЗ>CYj%[nCc+%6ɵ g�\l_ `k[>0嘅@:&!mJo*6UA{>*;0WFM]]{Se^)R FG}z/Qmqu" N7 d$[W;L.Ilq!B{z"=iU|FCR !ǎ SNlٲC>Dii)5dɒeߔj2Υ|RaZ?R2L~x|@^5@Ng?K0a+V;.^{ms]ӧ}v^~e̙3 zZf_*F|=zrȑ#Yjƍc̘1Ql,-°gBk4񵵵<Qܘ1c6l=^{-Apqjkk7n\xE|`㥁`jS8j(VXO>}ka,\޽{S]]RSqrc k{CO׳j*^555w}R)x vj{KC,jԩbuٳ';vdÆ d2 4'n:6o,]8 C ϔ.\J|ߏL]kZ~SzJX€Cr}QWW3<CCC)¯z_77kjj>|8۶mc퀩2e eee,ZÇ"H8,a!9ghu],Y͛7B�`N<3go3wܖ,6)'kBͱ5k"٧O&MĆ X~}qqC; -5? in6gΛVJ)`̙7^zw}7s7B⋧%-mt={ҭ[76nɓ'`ԩSС .dgq~qYCh1_~Df̘OSfZkjkk;HӼ ر#T.' a5hc>|8۷og֭1555L6m۶a桝[q1)pY ø<]w5wu'NLiˈ#g-Yy7n8m4u/́'8{\6tG>}0e}Y<ϋmĚĉDɓ'3cƌh}EXzwlڴCEM***[ٿ?+WH;ߠhJ0#^5|ꫯ-u\CBPYYM7رcyWxEaa]X { 2;vm۶7&MbȐ!̝;CP[p CYs} 2#Fϒ˙h9d}̙H)y饗ؽ{ž".QeI&uٺTZ38L2k,yij2T6xp CaeRn:e}?VS;v,3f`͚5̙3'EaPBzMMM 6l}h1'2w\j{Q(\0Vcg2L< ~ir\4I L&馛;w.z?"�[T1bvbƍ.wy'J)^(Hg_N18;\O&4�},]GF+- ]ee%z+Æ _dĠb,G`qׯ�{ɳ>�u]ǼyسgO^IixpJ xg#'ac̙4551gΜ<&D<nAп 룚wJ~Gcc#o@1Ŧ!pOĪ*n6^z%Z«5gΜ;믿Nss3\.J-ϗ7sVWWS[[ݻٳgO^jOo=:> H0}t7oZklEIJ̙32e < K,*,$7+aH)ٺuk䷎o?]t?i;}u,"m?L^?=p5ڟ[0o^!4h#GdΜ9O*|=Fy}E,8[ln[Zo^j:t( bƍ߿?O; T*ϺuشiS^@8۾�??ppL1ne'i2ncX"Z57h nvvܹs9vXDV /?KYY b׮]} |ӟ<aZDp}O'0a4+.EC̝;+\ PJq72}t̙ŋ".OK CL&ٲe y.l6K2K_[neAmh3cFw �vŎk ˀep 'c2[naŊ:t  /'Fd4$>|8N]]]eA Iٰakd!7p G)rl0&>3~L&vbiaWRnVrO?4.D":.^wjWVVӡC~_r<B¼">y\,//ܹ}ED!|_eKySk决0@-W츞ᾏ-⓬뮻7|S&^<ﰰ*`ذa̚57/I~GqxovNobTUUi&Zc&NȤI/ISSSxKBrg+ kcgi~@I0}^lveee|r9fϞV.c'p<f<c,_</E2;N޽YjUo}7!8N&f`<۾aLd lx XhKWD"ֆW^,XYfE$xپ>BO~G?[n#".o؅q ʕ+ٿ?z4C!$ :w 7 /ҥKćhmZc6?~N8rѵ_�0a^l>S`'X�ͼ[g?kN ͞BooRRRR@+E-. ɰw^4]t!JErD\.G*ѣ|ЧO2L϶Z\;ǍOyyi[$I!rLU6 0rH***x7ꪫBS 7˗h7n_XdI4a[3M> kUKCCTUUQRRxy�C !LqF:vH׮])--LjqH ^/| ?F ޗKBwQ}+섪dڴi1xVWR+-Kvܙ=c n~/\^&JZ3g}L2D"Wƴr<t֍뿎uxYb?я;>qWSQQwbmr`WaUVVrUWoGLqiaR*"j(G< �'Ns,_<1+))waѢEQYۿw8qD={<޽l6shEa!ӅuƨQXlGIC LkX!{~{n۷/k׮ȑ#aBn̙ >Gy䔴x\-ٓ|Sbɒ%G?bڵyLy9i.֠0Ws ڱ)hu3}-)J*:ׂSn° (d"S,Z(rlrmkB", ]$W]u'Odxw.�_صk/bi2V[s=MMM'?_kMڢ)jC+:@i f?Y�~^plFi?| >( 3tɨBRݻwO>,_'N9/70[kȑ#ѣ/ɓymm.)%W_}5'NgZ\,,PJL&7ɀxꩧ/~A]]L&6ZeAMRAĵ8h�.\N.iǖ0Ni A+ 0O:9g( ? C0k۷lٲ<`a'"0عoG[]]ͰaXv-G2~<y<澱СCyᇹظq#<˖-XA"E DpHtQP%J2/"> &esY hԶQ~ WJ4heee,_fڽ)=s+ 6lB~RСC;y穫>ҥ y衇<_̞=}4Z%<\ 5@aLd+q nH[&s =>�8N`:�<3>6( ?eĉձy*/sBW; FϞ=yw7nyj> 7L];',Ko<&J1yd~#F+MzFGSJFJX Zqh@Fs<Mk*!T E&s Z!3ۂbp|Jƍ… Yb#Gl5y"> ն1~x~߱o>:utJmq|Nv҅/| ۿ7|3ӦM;k0p@/УG^y8ȍ7)WRV^B#<xz+]*r 4> !^g"V*j((CDBHsXnâ0<Z3s[׻woFڵkٽ{7}- " *2e ?<+V`Y+r̙׿f̘1TUU5rSN~‹=etF6Oq`^BeE5{v6kQR.8Z~D;E?5@FzeRtEaF%Tj&L/~ /_N>}Za`ׯcѢE~V<1CsD|skn5x뭷yٽg/~7엩?~Mi38q߃J9P3T%4'e8y<V%0#1 hMu]GϞ=YjSL(a*ܢpu]&O/~ nJUUU^j`t]I&1qDy&OLOl-?4p8;ky?{8z$Jӏ3q4Q[2~Ȅ׾q!4EC& G69p4BdqN(�kرݻk#EsL<t:͂ ry.yL&9v/b^^iS6g̸Yfn+�!Ra:-X HE~Zh J޴�`E9PFILY('@4~$ W�ZktPzjN8VE 0tШp *9iӦ/uVTA&HRs6Mٛ2eq 䡕IIˢamZ%PEk$_I" .p o1ۈ$-=ͱ~z>'ǥݛ},ĉ^:'*OqxZڡI|$pd( 7i&MN"ܦm'۱BB-%:<FA洩^l&OKggc^  S=z4jժEXD{!`ĉTUUoF$AK߾}Yx1˗/++ 1|U|4fLANLlk׮u >IG\hžݦev4ZhdZ6-”oF:GȹnS�e>Fk}> ?5.U68p`f3`bs!\uU<x޽{0XSxQѣI@~3w�H&La}}456rN{p|_8)9pd͇@mJ섏i')A0fn+MAl_?`%p;K6-AA5jO=| اW'VyYz5Q}E!Ak2K.|3__x9r$:u[n@0mД;(ӽ<?)W:x\G 8 `m4X8@"'酌i eEAL(}@o0xx8ܸȟ  5j .dʕ7nݺENx"h+R :^z+pM7ZRh' &O;ã>J*]2dFŐ!C&HU!@�!#T)W_ǘѣN%RJ0MGNgT.I"Q; "ฦNpqRAU:h"P2p7QiB P% ]Sg 7`nO? 7tu9][[ː!CxWټy3555y*\DV8ÕW^3<ӧOz8tЁ|;>|m۶e̙ó>KEE 4c2btU(]6m̂ b+&rL" Egt ! �ad6c?L*Y_PM`y M0l |]=&`#}E(f?,-Ԡ��>IDATo 8_.(Z#eHǏgѢElܸѣGSQQ_L.6xBpwSO;ЫW/S)pvʀ6m\'OuV֯_y7;w.Dݻ3|pF\}{ihh7>&mat A`k I<ZVyβr TsmG1/8vC D;>(,p�<x0#F`\y啌3HPD`{$3o<( r:X9oJ:F)Euu5zbr9cժU_W^yIѳWOr~'Nq>??RW_o$Mc#TZdR8zA"a'nh CFh`.OV=nlx u]ƌҥKcСQ[+Zw-??m6 vE8AC2$LRVVFǎ޽;W]uͱ >`+`<ϣq\SOcaPZ q&ՔFJA*@J͡CGg֭[yH))--iӦ1yd;ĭ;ZU @ƏOY`woBmh1[i"u]ZRJJvk bxFqH&p|d~^zS) w]̓O>iZ:d2 ~@ssǑxGy_ 7^o->) vt< ѣGgvp,A!u;v,'͞QhY/vqB0q )q{9L.L&C*q%i* F46je9D"[ZjLT*E~>}:hhl`/e( v5D)E"M2]tR9/^OZD֟r cg|O<uS+$%_ǎN?~<0{l^<_WHRS8@:-pk{u\TxĈ\s6ouk(Rxsىc2j(~mK׮]>4㿈"ZC<-KԩSdٌ?U&ŹԵ5 VaRcƌC=j[B*Se.9/~'Igf=gˑH8(e4Ǝ;.G\lQ3l'Zkm[L0qlagF%%%\q,^82 I\ ٭!t5&oҤILz2eI4~? #|?0_mwHS* 8g$Byۋ^vԨQߟEqY">*;ٷo/Z->j:W/B8RX ԬT"읜JP )a r(rr96WRR @.}sȔ} [:uTÖ-[hjj(Shp?~<=z^8嘶Z 8ɄQ5;S+~(؈Ls!LzaNaC丮Ks <x!]0<h&MDϞ=y뭷/ ">2_ܒ4L:˗sqfq#*M.FF)e Ri:$.R< ^4H$TTZ4g|qgݺu3F ɰ.yD|keڵٳmTEC!V?xwrI,XwQUi{ow &00Z 1`0֖jܩڭZUcnZ5D-UkgfA%.de0Z1`:}$!N_UoNϹ_|>@%f_0k6 R{vOnwۇae ,SmLvH$Ba"=)So>`ݺרGcc#17"yl޼;v0uTƌg�;Z9s&ӦMc,__P֧J #mOiݵCb]twQlMvj=͏ ]HI! qכłaXIwwP?IR\\ɓYz/Qť;hexSudrJƌUF3l6RJn&yΞ=Keee,5r~pv2Ķm9J{{{~BgmĺcD¥DVҸٳ먛6%>HJضh4C=LbZt\\WܠS)/u:dK+ËHf2uYx1RUUEIIy ҩv=M~fUx饗X~=sODH$r$8#m8v~)DERf̜Ο_3.8nP\ C�Z3T9 ;6"lL7\WI E%~vk% @,W2g͚ŤIضm7x#1~\F3㮻J#Ֆx<N,㴵qA9BWWp.]J̫!g$QZDJܤ+v%J f!Uf5ٮU&Oˢ8RTsn�e1Z^D0iժU<S:t!p84lI$,Xg}6SK5侾>;FGG?~^JJJ˨gΜ9L> &)UiPM`!̐pJ'ŰLzT$$}Ia8A ~E<@)<#eJ$BxS$BP"R /"ASPdn7|gy2 5l,n�{1***())!H$0Mn:;;I$RUUŒ%Kꪫe„ vK=<ieҐ:M@(d?.?w5PWD^zڧʉJ)x!+E("&u6ʰ 01/�OWj'I4Tb$4uc?5khmmM)`F]@s!N:ŬYé$7Zf̘رcs8%`;.)*ڴ@B\s1R$E'``XVʅǩGMet,(C{B+G6قRr[n,G<$_Vo`65COc~7[3sO?6 axԆ a(ӧٷ(-Ӱh9 Qe ׺�WN!$<(JmAzN$ЈL?NuWfLR@հ{: d}h_?>&Mb!R&r*7a sMꌌ7AOZ6T餁 CXZx E¡roJ ;'4�+mc<S2tA$B4�@[źScPx='s'EHF3P)P(bѢElڴNhd*`*u@:),nW^'v,vuv]Ior8 1y2X^9Q LTE䳽0UoKίm UBtwM>2!z.x)k.%K|Ga/;7s"l5'N _=E{~~ť&uzDy/&=~8 C\C_&p--#HdQ`d;3 :w޹PIwKŧ;ɨьƴiӘ<y26mbŊYʹXsi$6f_\s k֬ NڄC\ *NJ sH @l6u"PY Ov3C* dNN;Q&Fs)a2e˖_|3k3Det=O[Vs}?P!2Jp$- P i`H! 5BeZuHlO),=s6d33k`;ʋSP5�Pa5P5wfhh4m۩z^~emweQG~ζ[`S]]ê\Ys)j/T2Ÿ3* %0F³U_D )]IH"Dlg3f _-W+Q2D󦁾SrFsAJOUSSW_MKK vH$+x<'|uN#_e˛ 4A**:㫯8nCVx[. CibzEb�aĀab^@UEEXJ`Y˖-̞=;ߛz9}6nHii|+ 60fX$jpv\!&O)%:•6BFn)3Y3VJ %a m" K E\%p0F)0eq;w.eeelٲ%+e>|M6gMƊ&fLAQq1T~^m@/p)SBYEK !dbJGV{= ["4 {HW AiVF3Jh4ʼyعs'X.O?&H{n6nHgg' ,^IU0 3`Z&*MYRuDAe(R{S)ÔP P0PEg|tRoή]hllL,IKK h[o9sFhitZTIJž g(ѺZj4&3gΤ-Zt&u9ro燐fL2$KF3 ,\Μ9DڿW^yX,FSS^ta!y4Q `ɒ%b1vܙZ_'IJ,^V\ĉKU虡F3=*fֲyf9q=`޼y^,ά3P%dVyXn[nٳ~466S3-BZ9m&k4`x?D",\۶Yv-HGy+VFS2YKQ8虡F3gwl<n8Z&NȚ5k?~|_04vSh ZדRRQQ>eYgMheaFS&?.7k4ͥ#L\RP)!Js 9 Zj4o'*2S(;L 5 e0e.TE)�2u0Bf̍�׹d\6 #]s-; .hhCʯ 5 5^aZ4! mw5Fh4 8ȵ0CKڃV l>2idP\kQKT?=Xk`�;O}0X%aDb)Zm\ %P1UAB�\ A= *dn6.@kDG3Q)5rF^EZ̧> ?0 &Eb͹RA3w*ps`;M27$ FьOq(jͱ'=qp9a0Fb? H|;(ϼsQx372#ג61GW�sP|` ?!Ea>�e.,~2HOS?C)͵@YPKی2ېЏ\+/Q >޹|4🨩W͘*﹑`2K|8 HPJd@kC>yZ~ \ZX rdA)j?^Z�靿x+ׂf`2o� x)7sej< WcYj|ڐO0biByZ,򐵡 |[Q!-oQSvY�F>\ ?׎ÞQfnJ>`mȧ~h4Fh4Fh4Fh4Fh4Fh4P%j8>yQ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/sequence.png����������������������������������������������������0000664�0000000�0000000�00000054572�14332737457�0021725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������6*��YAIDATx}\Ue {<%[+1@&@HM:pLj 5EwTfIJca7Nv͌5N <ͭrѣͺֺk-͵v/FDDDD`ȹPCRCRCRCRCRCFؿ8S>_10?sCc2]P4>DZSLJ@@ss}}b`U|s?#z;BC:ƇHzN {_1i<C\2`Uzg_`/kh"-ICtق|nBa.0[GSP7h"-ICtj<}{z9 "-)C""""bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH ^:YYrg{$b0UNVy"݃ƃ\d;s*ޱ>L *0'户*X2k KfYprjǡ Zخ}ElfOA.T , ߔ7)|�-c۴KY.:#2큱L?Otމ zD:ՉߓZ;LHvzy/Cy?a*رʛ [^!9`Pbge}֯J ZFbxaDj%}t d1p>;np9oKBKݿfs4Jœ(+JbfϱQĎi4 rU9;>'|5S"߀'g{9!J{EHZɉ?vC۰OʣAfl'۫o筡gmSQ$2rX"g+OE]Ÿ_a8}"答cUPYd?W<EqCd:$Lc?0kg|?8oH"I {q&b|es7.$ ߩ[ _ŌʈEk'tNc)O{Y@l"?tur ͜ɘ}N8-3>šq*mVBr JIVO`DE,bu]K#;}}5W{Ɖ}pǃdnF7$^_ˍu~? YLُb:TQK\ͶM06;&ch;bCdnQ9x< m=L9O �b‡ =265LI!a<zY&]Q�;�\䐊oTB5e!-Viĉ*]Wb+KNGTQ5D]M~aJkB\5~$WnPZ v.m)vۖQPL5"jP  ,P<_.�Lxj/*LfƊb科O_"oPx#zЯ$~V;>PY0{0 �@YyukfMu+6Sä'P]JN]x+w]Kk|bށ3pU0c甝/tk.4xWo_ʊ 6> :AYr^3p-A (ZXN^ \&LXPWpVWa߾~,;71lpWwcsL2*u?r\ws<JûszTCl:[h<qlƥ l!G$lHtJ:㬞GI ed$j{tXuש� oYTzG<w{z/8<&S7f7q'f\-8\#<F*�x3޳za[<_l病 WW54� SoovݝUrby<ҳ|?5Usa/)X>,,Jr^4>BcD㣇8YKf~9)ChtW-U0\!V.PmO2i}A3]Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!uj3(=LEe~>yΠ!Ҳ2>A>ܹyJñc|sѡ1y!Ҳ4>OgV>2d?#>í3z|**p.!ݝ!ICe=m|H^nٍEAq>}?3ow3!:4hG4>.\mC(JJJJ�vWDi|ȅLO-CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRIj\83_wetvMEDĐdEyh ]%y$VTtiϕ`ϪS^Ltt4YՔ2G3>1=oHDīdEj )qV6^R*:lLO}*|Eq(>fX1tdVx^vY<$mFe(Ȋt'Hh6yWuHNIf<xWuy$$l}!Κvܴ71_me^J2b+A ?cIJ2R3),iܭ?/MV %$$<{mkYv] G+9˒ǒINI#V? ,=;vVu\$,ۓK]"2(ą2bY~9CM9BD.\ "݌8, W Nj,9%IHJi|=}9=`nK_ f1e'0 I˘77Su*yaoGH<p?i)r6\Bٖ1%zr"2~_"⥏yN˗w1s\} S.|TNʲI}eIYDď i7Y Eֽ_1^kY;嶆Y{zF%&b.%rx*l5$ED-i'Xqd^p"�\%Cg!&@nl|]-ih\wSc1Q1@SZ1�Da"BzCU3~ dBk<aQ@:^ !Y ,~eFB8y{8e\w==m.~C$`1�ŹE xc1QSr\?_bxJ۝S_ڙ3:*c]jOQ,|d'°�-_K96?}6cXv�K( k("ғ)Ȋt3N MRYYoV![1PȔ1窬E.lذfmp&ώJ=A:.޵eMXw`%?8!D+ÃL�@@ 8TbD H`%eE_xF{GR%Lx*̳sY KB1מ9\XZ?Laz1.Ƶ҆,zGHO +T-L&L&OP z ٴc1.(M]ퟥ@gق'|˰i>3mW` [xōQ=fL'V26},ZBsfgb1>!L~n?^X¦,? b <纶z-M}ONӮp6 ""Z#+=�ː@.>aL *̴X+xX?ܝ\e=xbMÐV3op9lyQڪ^G2d$dE8˝`>v'm}1B\fDs;.\�3f{y=|.tfπi;ڵG(*q:ng t|/kW "Ynų6dnf@^"g%Ϧ DZk-CVjɳX@ϽKzzޛKųnku4i gذ0Om"fdעYYHW/&ql=esDl'Y# FǍ ,+9rfyܥXM#m`` 7Fm6\挺}^¢#뷵3wO4�@r:g#qh\zn;!PRR@pp"FQU gs W KZr:h1I|o'1dƇ&L9o.(XBBشs1Aµty\_z fdE Ss8dB#xj#Q1!\jMÒ/!MTG ײՀ+"(ȊرDӛH<CoS9Ye+vի!(Ȋts%%%;h|}}%nAAVDD�}}|}}"2=())']v***�4>p88|{EINN&!!A3r"!iFs�EZ!W_}W_}4>¤5"""0n8%rYnD5"""ݜBHdEDDDĐdEDDDĐdEDDDĐdEDDDĐ1']`|`x ""xB߃ owq?H"D(̞'YgAyge?o;cһCkdEDDDĐdEDDDĐdEDDDĐdED*pUz=_OUT[rܹS+(ȊHٳ憬F8ςs{X/ҙ$lu ߝGMKvVQQz#?5Կ҇vqgKo+vnBk^dEDl^tR;l c<tSJvqs߭E?&2ˍbПk9tǵ-tC߰1[Vmfpc)Ȋ9++MWX8-vi_ٿleþsh }!4&Wpiߙ~�}皦_ٙ͂L~ _6?^,Xͷg6{MI�iIû^ )im$LNX@vAәǭzqY ) In`/z{Ǜ\Gvfl|/RB#Op ""rNʶ2n+p] w'5Is2׏??pOZ..Y=kwǵ_V_x5TTTPQQkt̑tE&1Ι$EAq8閡$a칄Hʋ_i-_vgsF\`1̼3_k{N4jo24w")JR޶7{\Jܕ<b>' fLn`ngwr%}%fn1F""å͆ Ny{)=6sPEQbV.eNl p56ظBkl2�xd2!>5f-b'v� �TXz_0]7ܜǎ@ȭ<3+7sHt"I$&E�*'Թ9eCWguw >5~<XHs 7~[S-U[ÈVqa-/reC,:F3""r(Y&s?_0Vj*ևGoY:)78<a^�Ϻj;Cիz"|n8왛`{]| Ǚ *a1Pm'KϬoKOdm#=nЈ|f ?jk� lfa 7ឞb3Iqu$)Ċ(Ȋ Wo2[V�z_d%Q<@\ ."?g5u( øܜ:]uSF'-`AaNU9u@ u ! oTKqoK=m=|ӿ*7SxklalO,=B]ǀule$qw]w ""r|:̉`W9;ڹYpm[+ dgeIϻW;\Wz4c̲0ǭUaUbƼ>4hl(10nXTg `в6E!$<~pRaߎ_319S3A8�L$lt +]GI/8HWYi7ٗT~$ml+keWs;գK懟Yu1'|Mfe?t>4{t3Oʋ<apDn�|*0m\s زS3ZʴaYw8!S^`on�*Z9Ο3w-me5�-pYҮjTqE50<ah n8&3U"Qzn;!PRR@pp"h|t97E݁u[i_Bn] UyMY&/w5R3!&?;WzgyTVAߙqmڵS㣺 |Z+kgX6vb519qEiFVDDΏYTU�}_w ʱ<>=-+&h Pߥγ2gv;뷰έ&`P i2\!V:t)c)?z{;ގߥ]6.v/Ryw~ͻw>wtM>#Yga{f!p!kp˽"YgowU΂{tM]"b\ ""ă?.>ADDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDD܁ٮ]\;2W5Pqgϲ\N\5 Ng׳ӯt ""ҽd=6y%/iby%.lqLlmb)ni?gGW]k7>Ve8[]t>mkt4+k>;[vcvDDDvB*g,fH 5rDH{lh"oubo9D,ƎS1u &b{{[5v½w|`6wEޝܗ& [- +""݋T:- p~OƋkԔX­ DZ<ۋ ٚ2+(ۙ˒eZnbμNK<Β"6[v'o̻c^uÜ}΍3b q1$\\>>H|ZvO@7װꃝXBndꌩD^RJPS\4} 7y*UI ̙KE+qFM#rEqC3))|>PJ rFFxk}y~"3I9]e?|E_sɵ92Pq^=7KBh)XlϪ ?antIX׏q^2I32ʥhit;f3 !s*WI.bXfie)^@lZES9H0 jzeD3fNOE�4,`m LNI,yy *[?ι'e;K,aY<rdQd-ǼMv�f2?3;n AWx^`P63;id~̤XFkE Ӂ,^,ߵh"`̛LFoOfjo{(XBܬ4.Xؔn)3A~~# muq)-#x&\bc^jP);ϧhCSFӿw]$$!jHnnv!-i|t]HD;Vݕ߭qGDqW'#p\VwDD{'ʽĈ;CԈOn{ ݕ͵_]>qDC;"bҽ~B/;O#"fl8{qz;b5|]~wҭ:QZꮬv3"";vы#f6\C +xXz*pظ>?>T{3O_tGDUז5:Чoέp{+OYu~]h/{M<.mtM_''/!U'mƛiit;N 6%RY`fp]oamp,!65E5{ \yG!:~sσZ?]@% @'QdXĘQ,~_\YJhfgU4zk?ᨧjS$6!} )$\n\CLhX[\J(4:WS6:.x֞8\fpRg^W4�gTRSLhöBK DD۩"(8C<fb؊*T7n|{k9QIj /]viy,8\` $f 95Sǵ 3`{;wRiȒqu ]-6P6哿q G oUo �DZFe<3yJW^xT6X+uv]k|\i'{kaF% vs&cP1y,y7E,MNuː8jܳFk@3/f<7"Jc~V\gem.*qvha !4,SRf?gD&4ÜfA3i8qx8b0rF�92(rxV> Yǹɼy<q/~F/Zba*+JR^??\E_>ƴ@DD줩ǁY{/[X8kIX:kzF Y>ϛA2=BI6)ѹ@�nOuj^d0{n2 gx,K%`m8il AX"̚͘垢,b bgE17I|⽔(|}}[N�ћ!L"ݰ_Y!h�%!5Y,v$2;6]3lF6Hd eF.,xjtuZ61W\r|E Wk|N!9(9`1^nN�t;]#bN�_d~@!+ *6=Ƴ>ґ踧yoW.&SUk"]Ȩ%-L5wmlԎ5]ljX].k'?`&\.L}˅ ?' &t[\zl׸ָp՜C?;[wY1$#y {1B,4,\d̘BVm؎BMMn4: 4(ϑܻ Hfϟ= '=7ئrZ=s;mQ ƣ +""d$6;d8!b[jrTv`+)D% b8A^!ش/ 8-̙cjR,)Ȋqre(!_SY :zBPKUS۷~6jm=<<iHt:fqaGϗbaذaDDD`Z 4;-==|gl袋6lqۇ t=a�lmc_|pW`߾}۱c#dEDD v�Q.EDDD_/l۷>ܾq}qwE:=S]刈&!tm6}]yyƎ}b9_Z9o;3W_}M6`xygq:@ """ҡx#;;&mE:t ?Nvv6]t>¬t(YTÆ W^aذa,XC& """, +Vv`owGzYAAA<9_ """eŵsNowEz�Y2AAA 4H3!dEDDK]BAVDDDpG4 +"""]9GvWP.p8xg6lfdC(ȊHs:,X�͊+!dEDDS۷|}3.IHt:yfРA+ϑ """ҡ__bxk(Ȋ PRR?JJJ~:Nw}O<YX4 """oҷo_?lR>vNiw׮]l6WaÆcqwjV:ۿN{`&ZgK/mNVÇV.aÆ0vX=VKEDDow^V^ߤ<((ƶmλơYzxHKll,7n_СC�go߾3 8N'V~b tk """=ȤI4ik֬kv©n#"@ӦMcΝHRCRCRCRCRCRCRCRCRCRCRCRCRCRCvDD{.fdED/2vD.(sO3""ROX`owEiFVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IϑV}],s>VAVDDDV{ =:\AVDDD%vX =H޾]]Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)ȊH͛wƷNwedA*:Go!%cYs$ 2trΔ:vt,~[|ۧs˄_s~WaICM7317NNǾŪG[=G;=h7UőXgjD """||&S?cV$ؽ$͇qO%e%lKx[c_'.$z.5ח )ȊH~>a9�.S{GLKW!7T}a�\FxtUaߔMMdo�Ay~ H~6Ծ)vtV}~o-MT g~nէ]hIE+}:?a꣤ݰ}UqN73O=^s^[w]z_7LW>u6ҏΦ +"""].U${�F 2֭)xqI`��0i\8 ^l!mej )AX/I-_3&iqV-Hg|f"%z)Hm@P� HsI,l?`i[=IştCjUlO6ZbwS@QXa!/F:[κٽ1;pVdMl4uϠWĽ �`CPöI+~KLuHa'Q憇x<I`rp+'웷 Xw$󅸑\nI}oZ~Oê G7~[Co"mRԨi>_Ik-,socG 1+رq~y[[v @]+&\_+T�aׅ7ē7a3n2+_y:uE?H{2~6>C3[[QTu55 3'6Է~[Сj�hX~~۪gNմMebmm$k 76~ F\iv/y^7dhEw +"""]0)VfHd(d]qm0>C~Mq8Xh)Yh.6{U@&սnOvE;3p 8 doË3Lͮj߼;l%)z&)9_#- """e**\�̟L }WCp ԂI0<8zf&x?;/+^ dpS&<ɪCCYWWw0"&V~T`UϺ+Yz~D-殱0�O~ O?Rp'2&)B{t1.ŘIN6cRw6fH{E%,&M~l=޵? eŠD&smr_ɤa{9p=yt_@yiLfƇo$[WªO2t< g]8:D?--臟0cgbq6cBg3f[L\0cGֶh:cy@}w.iq,/Kq`}~?Tzm7l/X:f<IM/%\|=aśx荽)\Q+*ڊ^*nawoC/v'JJJ�vWDuzT}K?ڇdUMg,U7ʳֶmkOm= =gCߊ*9CGd wN|Fzw}wW%szt>O/]ٴߎ:Vm.TVdyl&߀?\_O?n@]�|.cG>2s6Y4<y"%"""" +"""" +"""" +"""" +"""" +"""" +"""|\C~\p͙ǘmPWo+9[@%<֫`Pvj+ޣY|GI{:L~G-Sn!?er귀WU|=CU�p4jZ@>⧃z"o=W[g\훲 {8^ #CAVDDD]ǃLBV.+2@EMxaKs/I&d֭f̰e|rҟ1ؼdm⇽L1CNʊw>Ǖ\@ˆVVoV54--.' q3fx&Wd[T[%NЧܲ̕ϱ�H !|蓬|�?JX@ݜ\qo ~ ?빴b,مobţ{8㤖t # lT5$|<E`U<VV*d$&A4z6>)a+<^b IyACkEIo_� """M\ψK}YR_$3F�. e⣿/os^cLVfH%5JW[N[+e"""eֿ}v[  aDL*!;LO%�UV7w'aXC;GhAsێ:1K En.[]vsb}o`߰p^)3IƌMTO[�xڥXQc"38C60�xfI6<oAapG4= 6?[8dEDDK �6䖛pˌl.G{N;s ^!<ɕ )aC/j׈7qLW-'Vn͕7e0y/zy\J,z�?^ׯmnjoT�o_ P/v'JJJ�vWDuzT}Ks lvC},ފifI@EE6d~e4*onߖl}wW%s"""ujY'mF-o~li>m)JK DDDK э]"ODDD\Ɗ+ a4#+"""" +"""" +""""5""".yvy "M(ȊH|Gx"gPVE:Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)ȊH(wѣ=z4SQXvj8AfJ2y\StC "\vncA,[ _b%[wOtݝJ'_SUHgeÎ�BI} i%6%gY=~#/b*w:g5H0A:?e\'M]VLeE,u�O/\Gu^DD:fdE(PL[DBNvPYCos|(cBXR؟ wN#8K2w 曦2uP-LbN'^e +}}""ҙ4#+"8D^X+)* $LJXrb,g/-'p| ~I/JBRejR<!}"")dEK4䇟?g翈Kw9d+ 2ftz\v֤/$k{YG<qUS TՕ-""=t2!`s!V,;H \15sT@<v,CoK7dMo&?u OXY{XO}:*""5""p4\Nr'Eo/az1!#\V}hp-W.\�3f{y=\{?a?P5@YO3e묈fdEGXx"[R1n`H �& ^^D$rk7%o b9w){ӈ~EͰKBs ;Z;j'H WBDD:P/v'JJJ�vWD:gbԻԸra2cɀ C.d.eM6[Ԯ ""=Ȋ!)V4XUUl۶`xowIDDDPfׂ�bEDDDNtUUU石cǎf 4 �^y>`km�~~~ݢ?ڮi{EEIkdEDDDĐ4#M=p-.-P9"- v37q5Y/+""""M)vcC&EDDDYի """ҭ(Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)ȊHN۽iYr<e6Y{gJm-kqvt2emd&1zhS(v(D ""^VZP<[guwlL;ZDr8YƲ[<5Vč2IˠK +"m&[]mb^J2ɩ(|] |> $9b/?ngIYHNIf|'́.#-%yY5,wSI[.b.~1 vdy{5>72!ȻJ\YXNy,y,4r+~;ܝ 3َrXps~?ȑ$?ʡ. +" ؜'pոp<Ai}1V$>h/&{&d=YPc'wy^ b++$l50sz/bkE&8I-D&%`=9n#0}*AeL\?:j*KYz` $d`_5^YXXh"`K%0uRBvEkd~p{VL!,zv!&זhwYD:W!""X=1O/ >Uo7WlQ1/3P2{M<=[Ok? {g ڐi%ksMf;GC]LHo`x29Xn5 !\?l bPr_%abwgTb'+ko;9oâO  �LhjM45]Gx>\D"dED;Eee%6c>wϠp9b#A [J%A /}c'2ԗH9BBb ֔RiV7̂r͢肁޷Lx(tq82w]aom"S$6!} )$\n£c\f~szwʺwc5!"=H7`d2a2&.+dMԧ5%G'SZ?DHgZΜtdKo0*B47ZzR`:@^q#+fϬ(@oFUJJʔM 5�85:qE-dI`^6y3"chH7PZaߡ }.oH[n#vލ�˕7/ܣ7x/L}5NLjyץ=PHB.,sC I�Y<vr'2X)h8V)ԎIkOQ~ː8j^s BgviauӻF gVE'2+^gbk"f+]8Ky2Vcq"=fdED[6 ,MK&.z �Q7kL'8Eށuh)h|MaJt.@Q ?EOj񗛀HW/&ql={yvA& D1)dׄ6m34Pf4cYۘ(Ҏ$QbG"r=Æ�:g3LJU:E hZV'v@II �Hr&L\.WRwB[. z0n11M,n, 4_W Stk՝i|ȅL3""bTf]&=cZ>1.ts h/}[nX xi6mKΜiW^+ =UD΁RUUl۶`xowIDDFZPP@UUBJAVD* ĉ4w}/]񊊊  } fdE[%**(҂;S UY /ƍcܸqMˊȅIAVD q\FVD Oϐ0)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ\hʝ8˛y͸ʝ\tg ""=,+p-;g^\sO4cް؞Irz>ʵ"ҘHQZP63gn`5y^;K ).tPNH +"SC`/;XX2)iloo<Y`-3em٦k̼]GYMmUJGrJ2i^+e8,O#9e9E5*2Lt-"ޢ +"9 7+ K` =6-`2XAGuK]gFG4,`m LNI,yy *G>cQ̜~0[+q$z vI2ydn:Y,"݄; ""s }j'�P�sW[1LI e�%EʆΨ<!@,=3`h\wSc1Q1uGe1|rbÚńGUeӶ+/ti\(< 1?Ni+LCgþe|C3ά;(D5;@% mֆY@JY%aX{׊u5APH ""*cw4x5M` d8(/jا%X< >,de313ln*,avݮ23WJ<ް:};^l4 +"bP>LcJBl]8K>&sL90rF�92(r8qX2?kj43/#b.o.6Z/+%Y1rI] &&wWyyϦa#2+ot(~i26??ŝ s�&"5""rRrt�^J9+ŎDfzvfRc�0+h6(p.'vW%saX<Ƴd^*9d<+%�Dۿ$7Z^C$^+yf<ʶ WZn۝()) 88]v4>Z<f,f˅ 0ڗ\|-b{; h~k"Q)ؙnmDsE0FN!2ȊruLY^Lϵb,\d̘BVm؎BM4EoSˡbEt&H4>YFDP흝l%W '_{Ƈ\4#+""�,'` :2;rvdEDD^{ƎKtt4H +""b�>>DGGׇZ O<�J|k{Oֿz$''3x`G """"tTer{WyWXZp!@C.LZZ ""b�ƍ^"Q~=~KZ#+"")Ċ4OAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD ɧ+c|**Oy|gJgCth #CFy+Jmmpi|^nݙ < Ýx8qQ4>DZLJxtjcIKn}p<Yk|HGiYOҠSspsɀ::|owi|HGiYOҠSlE)$#i|HgiYO@O-CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR*\՞Β#8#u۽4 ɜşȬ8$VarlUPy7>5GUwƒYkX2z֐w�W;u}_ v+bTe۷0~rRTUffQ(IIhۦ]Ίt9y/5iey:%N}po_ۧ ҩN-m`vE;УkmL]V_Th7ǎ=TE�U yE}=;V /~UJur0 #V+!>@[H<#yuE~XX_Ux73?AVDaXVz34x7~D L"vLI)9o૙@!k?9 WJ;6.F2ONiF߆xR7c;^U|;o G=k2&19p?>F^ P}U/"uG_J n/9o*%ټX)"yl%az{}^;; _ĉcDb!'Lb+-3+۞˸uQ$՟Ԅ'YNݲ4_-fTF(^=pKyz zbY=OGCh>ӔSnlNߗ|tűܵnA֬S n2UPLشz} *b(Zb f=ɾ3N?;$Ww3" $e||ZniXb~d-Ց-Ĭ\ʜ@jmq1 @"3tʱPijXmxgaʀ�oyR,%6�X>|\�ᗱQ-a:O 6YP&TxDEV)({ WnboDvOîfm'NTA**s]a_Bw*}>"!ꊟo2SZડ\\[ Q?uCŅ/pJ0unKAضlx d 筡pQZ8h d,偸s�`PS}qUVa2k6V.K<?|y(_7)ۗƇ~'QJe?r!$so _`ʫ[3k]O[2&=vRr[Zb'_KH|9K?dlXu9!?#zRV\ WiI o7O Jꟁk AŠtO,7)d7]^ĂB~چ mfqύg+넟c—QCȜ#yWޝӣ'Ќl'pteҨGIe3.o`?^%aC*SgŤ>JJx_`(6''YU{ܣĪNXxˢ;Y۳~ĉuQ\4�1`3W>5bla<j1R5%H bӯ<,Lf_Dgz{dE_/ʗ/;i<gQ {Id`Q¯ݕq>P/ =r5X7^YO@àj) rj'~IOӯo"FVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD SU>Ga**3v7ΛƇt! :5F]p옷SzÝvWΛƇt4! |:!x8qyn+VQYŇ;wp 7H"-iCrnd+ <3!:4!Ҳ:>HGS DDDDĐdEDDDĐdEDDDĐdEDDDĐdEDDDĐdEDDDĐGp/^W<����IENDB`��������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/simple-er.png���������������������������������������������������0000664�0000000�0000000�00000017533�14332737457�0022006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����I���-��"IDATxoTSg/_ -($slMTV:efMJ]}qo8ʼnyqYEɝuFZzGKgJYBKآHF"H@eG1E#X�;;~^%Ov6/;{?[F �X"v�I `````````````%MCZ^vU$9|wZ vf|lҏttݗ̌U,H)H~`````````````````````cB-j@$Vƚ▪""ƏvT**j0ī_ݗRvhkU_?{,*ï[Gmj" ZjY_XW)rm5cApWj*MJ ]f^#w696x{s$44!F&AƷJ;-J"U[u~NN1Yln i5DDݲxf1**+w`*^"t-Y!Z{ ',o..2hfXrowW`Ѵ6VjnWl剈HhRMDUGGV]n'~`+rxDt-{MmW=}mY7)ɵk,Cn?Wvc|ETgUvVyWBQEkbw\=wODD^nV׸:hlϊRImQ=`YSݩ/1(QP]#�"BߵxފbH^URS.>5G\GDJ{Ϭ.3UVTaVp=J-qzKޱ n ޘtfː3Tsfg~5D'Fb _ϥbWhB#SGN Ir2```````````````JQW\t{b̐eZ\rqkIZHWJKK۶mL&Į%9!]`0LNN]HBo~W]Hk駟yYׯ_  T2"Ȭ_W/إ%6+W ===yyy%O?4K%v`jj* }[ [juvvvNtE"{GnnUb-'NЮ}ٲe7o|SS#<Vg}nka… ---3OKJJ<{ܜ.hQAA^R]]]]]]3k׮{0|_#GXbӦMGD"F177Wo||_=qZhb-cǎedd,X ]7l۶=$-"|MOO}駟ʺ3{EKNH- Dtݻw_rܹsb׵P˗/X,|S澚18;;sy>9E&/h4:"rjƶO<9::z&&&_>998222]\pѣ֭F7XB&"vuށe˖edddff^v-voٵkڵkg׿^[tصKuBc_~ fM۷]bJOO_tL&tҳ>>ۼy>*vt} }>I4db477]vbbB& ˑTOm۶5kķ}?w ;|SSS/؅HXJkpp{ G<44DDR?"??HjM{ѥnzzz;.$}?JiK#GѺ֧zjV.]$v]ғ:tի~G2Lj|rwwILjkzz?~ꩧ6l v-H;OD"vkzg}0~?h4]4J?konpp0 b~D_]H8OW__0_{|||֭b(vuuE"DgF"')%mBO?-v!In]0sdc!#|?|r I,IH$e I-.]Zr\."-NvW"NCk׮%?HB(~ NE*jUF<T>^󘦿W[e\./t9u-ؽH*tZQ%GI"+D2S3Ԗ8Q{lN\[&xSrH%]DrZǻL:s^ct~}z7>,յ:=nXkFhY ohk![m]'sTNdhLU .NpD*mBn|$uNpD2.lhvfdHgs&}|lO^VVRtH=�Ҩ(@Dm/9Z+y:<RQS+zTW]#>,V/cGD gN^WsyRqH&]sؼ=y.:(Ϩs9m}Sj3\GT5d/+޼E*t6oׇCc4%'(Pp9N ??~j*˽vJU ߻ZNgCw{kle˖]A4O埘%uGV’d7;HﺃqB&4::*:w9s~@ߊ+R3Z$tutt]H2]'Nشi Nz ?> Oz:ydu -}̍sS%¹sZ؅jU<TKWooAArrr EJu_H<<֭GJ:sc=߸k.\v؅<$~yOKK7oޜKr<EbNܾ+655]xqҥ!ZR"ѢD'|rڵ3-4}ɓ'ׯ_-"ھ}ȈܗMpVVvBq/ h4>]PLOO],ŮaHt\իsƔJcǎU .7:FjBegg~3yJ%B(M$J${ldJrɒ?> m߾@Iי3gN>=իccck֬5َ;װDO嗯؅|rGGNj/(v!lIUbZjUAAU0't ,<LrJ`NbWȑ#.\ =]mmm###boU}}}@2%uԩ-[tvvB!+EpIRvq$^/NLLlڴizzZ.LoV`.^899iӦѩ_|mML ׯ+-Ydҥ2lͭb7==}j=~\.'>,viL$h۟{p8{vsΉ]S{{{QQQB jiiiIy^o"kxx8_%b6o-v0CCC׮]{GbOc=O՚?-~D댌+V={Vuwwoذailk?8##cɷZ.]H$ x≤܊HncccӳVkIIZn/eUV</ǥ=Bnj/~UFFFl&\544jժORRjH$0<<<ԧYwQT.]Ŕp隚RTw&''W.Cº՚=::*vi[Pi,gϞɉO5"bPލ7&{?%߿z껯p8 ?''';;{3]VkڐKdXg8-]dVoyvU]~aZaaYпߠ߰9$d;Q8Kl t ,|> $%                    Fa""kXa^睊,lVv7Sq=rs(_ U%:bK߮r(}zǀ^q[>oW| Ɓ HhzԺǧwݾ^Ѧݨ"BaM;uE ԗ嶁 _EvjY$jw ʭw\&ܖeǭYe!%' kYTU61NI,P_Y`9h@r&Qa~UID_ۅ[-Aw47whhSZ*=<n.PR᫯!;j:7_yhwh 8 5]:kשK<D7[zb@:uϟ6RhmNUCCĪ!o.[59-4gf] i_̑fcA(^%qz[;Ve-jk[{IMmz"fޠ.+6&i+("eiTaOњe$".;M\iLڰū%YEAW6׾<"SYhko q o 5R {[9-ܜ8쒝e¿UE G|OEyqygqY$=P ΪR8#>5!LJ4q/ x-{HW43y9d~ڧ!gNlw(֮wT( Ֆ".аVݫUYWZL0@Y+fܕ~{٤mW=}mŕšwˍTXY"Q }qÝ} 3/ 5=!XnHs(vA$y&O֜,ӬܵP86BgRU4%=;ۿW B{OYmٕ.k ANoq 6|U5RWPl{\oT+ߵViBIc}ǛOę_j(loI[@ijmW޾rf\[PRtcJ+͕U&%nmb- 2YHcuo~o_/fa"_ۤ6=֚ z]MUlUC4喙U;\GDJ{VCmZHAsb݂ҰdŒdG dKsUHOlߥwttttttttttttttttttttt2 U*UѶ.%4y<MH&3+d?(ved>4j֭-C�V.�V.�V.�V󭭭-`033s%%%2Lb&5===11裏Y&qŊbW p vI"\>+9YYYHpu�# N8rYJTv{]n0==]ƷLLLZ*77W�L"kIO8 $G]�%t%y:$iK� @.�V$.B!v �!taK� @.�V$.wDI ]@�$ `ER( Hµ QHD!]�$ܸs gdddff]@ߵ|PZFA�%~寧Ǘ% �w'W$hl^؜m :[X7xj<^w299<FsPh3{Ty|O'뼆Wyf؋(*QFKg~~Oɏ_{z0՛/QwOFgvqtݑ|ͯhwKo~?nHw8 `6q@hHg2^NWh4Dvd2"m]ht"8""ۥF/ *8K=D5>ODJ5whȟ^Pu3r:{mcC 1etؼHeNnn2km ?ǿQ ~o9NwKP!яҥ8f#߻p /H{�x`H(.O)@�$J`. kzz6@$.�B�XA�XFpTHQ "i @.�Vk׮E"H$"D|e˰ .@O< /_>kĵ_|qٲeb p7 >j׭['v!�F]KH҅4DI ]@bW=]r###b`:]}}}DzovrrR�@khh(  ^xСCb�7]_m=G.ضm[l Ùk7lF ҐyyV;'|r֙� +յqƙ3&+JΟ?/v�parr2D"&?ΝL{Kt]pATeիW_xqy� ( sss>ZR{HtE"JuiV^=::*v�0''&&Xt…LJիKGpʕɬZf LJ2:::ed/nAҥKet+(ŷL_FiEGU,- ߬ߠ GX4^ $~@@�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XyXXB7Kj$. u,RciԴmM.Si`Xjq\+9I2c ZV!e-ۚt{[m};$)Pc+,[:m 56mV5[BZR[Jkj.7Y,&\*{޷,&dhW`Ѵ6~<Hm]D޹y`fKរ[}W^@oWw)ɵk,CnRXЕmwB;ldΚN}A oXdjmW)M.Nt|dD4>^[jAD-y*}z.> KÒKi/|_JqX, e.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V?Jj;%GXLr\ y<C�;ltttttttttttttt86Z$J[����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/user-journey.png������������������������������������������������0000664�0000000�0000000�00000110150�14332737457�0022545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��U��X���b���sRGB����gAMA�� a��� pHYs��t��tfx��IDATx^|wH $$ {Q*BEjZ[uTj*p0D$, N !!;%] $'x{w:"�������OK�������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*zzLKoMђ/ ٚP_�����uE 4%7N=%9�����IBF!c^%ۃJ obd#czA=a������hiާY\Mɚ-V�����p2zd+VMr2NA4)T54h�����BJgJSD胍Gu}$����P e-cU7%k6S�����P *{&f[~a|մQڂJ;Öz)^Cm�����BU4:)Fj܍,}ɖ+0S=d% LJrΠ yn_:i/]V~ݠk^m'^/Yϡ Kog2c7]=u邛 վٚP8|{M5ǩojTY4~ٮߎGfO,?#e*<4ϓg$~ c54o.cfNMHno[cK|'&~Kk:P,3MwN}Ad2yB>sdyO�����hUl/Uy_GteVӟ~9\LjHڊ3jY5CK>Z֖6TIe%JEo<mKFScMgleyC=uMW\ zd-J~i~>Z%ީ뫋v+KWV5e%6PX8=:[7_`yP:bz۪2t0+KK>A.z4-yAMW7YSxԗ~HpӚq_1邻t4YZa[k]_~ mV߱k-ӬOk JW. et[����a#TE㓟ƕ-0NG䎒buؑRNMR&ޫ(uZw&k2cm I쒑UFզhh%V r$;+6 4m1FB.}Z7L-=VX+^}L7L|ۤ}mrI7h!^YsPbIW#Wq컟Rr5?b*馪?Ӊ1%%ܩyՎv[Ӛg5Iyf~^ЄIs1A7{FrNx˒Or߲ޡCl����PϗiJoT\!JQ+6FYI:XǐR[vyjg, &kya\yJItϛVh3=;Vdf..bԯ-;R4;t׸?-͎t-~ѡzS$֫i\؛g렦9cGi  k>Sz.Tߡ2ӼO+SCO4%9]y)t{%+ʎ=^=}ר\ĻfUbd%UëpM6so~KK@񺓥S5w&Z~7gj�Hⲵkc1�����BU4>fwʖ�H{[Y6D2%+O xYӖdi͒#}5d&x_sWV\� +5n{sSfiI,_R68+uO^5?0OsxψаX%>{|RV>)okdXy6,Za!b4%z`/|>YX]M䇦.sV/uI]D^O=3gi/+%X?YO\_]¤*z>|X;>wS߲u7isSg腯*E 3A:MT[8]?H����xъ3^=S^)g<)Kr<R Bek-"LPm%u^SKCmؖ5?UK^E34 lܬNxJ?1Y.) O7W=# M0;.)cYx[_y-Jh~;N }yLmFk)0[{HҔ_;6[?FITlMvp=_ǜ J<UCHf~K+g�����6BU4^^LMqNQl AIvڰjirٲ{I_C0 =|+U)v3-MPn}5V?]RmMՊJc)kWMTBMg ȫmXBi} )mרI4`b)^mlp$EW.M)oۢ'0ߗ%oiݩ ]~qC`m;(͚񂒗xiJv==1���� ȱ7)v5J{uJV}8:)Kgْ{coS#¼ZƆ[^uxEUXw]o. eZuȸaδ;G+V8[t1p#&<)VtYHp zlA<.kl{Gol\ 8CKSx~9OOkާJVaê ⲟU;h'8w=^�����BU4jac.ӝ6'K~;Yg(f*O3f1EXjȌ@1ֽjFJ} 9<x -ۀhRֻKik jز]{)U5o4ųT|= Z%ܠDG(m;ϋ&y.5Uky]5b3|P_s.c?����!TE#qׇ?wFd&ocG;J.TTO;{K#$SRZlے>Ra7 k]bL)aw7b)bZl&$Km 8fũܻKϔfZ"uǣLk5jm՗i/)6w =]fOW'o/7kiIU{ho�����BU4z co# Ӕf|˄:V}:_KvJ̷#J]7W%.|=T? E,IUߺ:kdB/^G,6W_~5G#h?W|t^ܡie;ףuOK$=OG$Ggiu{Wxj3V(ܩ5kS4gX&xN:Zjn cT����*0$I7Tؐf; +lX5OsLъ/=tغM;+IUP4z^BH%B֛ժ6ոIe1 Ē3:My9n֜x͚#ܵIjj٨%#MO$Mzc=-K>^S{,7OS-dl\_Sªy8iOS{ê&kŚ7SI ����PPߞd.AQ =E/<c+CnPR}vޟuV=;VI cjUWV};~d!hwxRʟk_c3ɟ[FdM.cyk3Tlё;fL)\w>cT<I^ {=dx}JyU{qMB4%2i-MaU\M͸n<����ƇPps b5y|}s^Yp}Ro*d|/ J`e-9sfҽSPxF=J4QSޞ$;d qx?{5{\yzX4keU7zܬ)ӽp]?MSrcX:{yGǾ tg4sY8Ft����p#T7gw9! CS='gz^zT\*cvf-e\k|jqi(Zz4 @_%^;H'^ Oŗ ?׶Sn~q>s-$;Z5iкٞw-+ ����P8 *lXe!ڮQa=UJ1vT񚚜-öU5wt0y'Pz=53zpN}ĪaJiM9V쒶4YW7$ƩMϔfr|G{-zƾm=P1S4=7vHuf#|Qi*KG2����h5;�8豸zTLzn>DA@Zntmds0jHN;#WƜ ޳d}7UI����@1R8wH8]?@t1;&>X|u+|Ԗ&{Ԍ,[>]ei@U8$P����4b ltx&xq4,1?iLٶzaъVjE dWS5%[QT����@#@ v4Ϳ8֞<+k-<?*YiZ21MNyWx=_Zn汲?~P7�����XS8nY{+]z1ēP˨F6^LookJԔ%z`i X9MCF[{^YKfn����@#HUล*m[\"Pm0ocdJ= UI �����kkzx%^sJNזǻjh8gJ۱X&w#QIco'fiqZ̟zn$\K ����8�������~`*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?ueAZ UᄏR4iû[G;e��а]Wk^\C~FCnn�Ph^~+\[NSoy�h;l 8u u_\6}�+/H;Z-ڨW^Ydk��!Zb[N-y-5�@]2믿o^}Q\8r4g{ ?7fրSϪU;l ��4D;ZS׮El �PΟ?_M>׿s'k~{s~}ٻ[�aa x�аNeGKy~Pge]ոi>s9qx@]~zꩧ-������~[o-Sn5~n뮻oV�������z UuϯtW߈~v} wMpn�������^B*mRQW-9s^x/~5S)O2ao������V/wm?x< bt۳YJ������%T]bjk13?<GnSm3.{X>2Nq~L `�����F^BլYjܾҕ,]:JM5J <3L/S������РK2rl?Gr8 mϐZ:-pۙz� n3PS������РK:x`m~g4hAF`cpAiW*.cR|������� PW]yRښj[8s^K�]P������z UoF{H>^f[|ڷkn&R+|sP5&LZ+} ������@T/jf4c J.Ͷn[63Pxxm8%'}n٦SJyWfGX+������@z UnAxz9#Pkg:o'.M׻)<Lu(N^6?E3+Ow������h4rxW{~vک߹ԵoWl#Gm6[N[3?N >wLj6Rq|<مYSf~.]e,pXj.tӯ5��Lm2UO[@͢Gͷ�_G /oժUȨH <HoYڀoUq#T�a#TũP�OMּysu]ZPTII8|_W�������ND ������� BU�������*�������P�������pJk֬kg}ֹ\z=�������S"T5!j4-ۓ˳Fg������U5zm%aQ&|\wXo<u.<ٳ�������G1T7JAAA?nZm9˳G������� -T_*]jm^.TQVqm�������^B+V_ϾrmoL?E|m������PuΜ9j6(:^JYfϙe[&_Bn[h/8_P?}1C.ƪ��4PL]GՍ/:��z U?Y_uQ>Y0֎O*i*ŖSŒi>aխki���սGNt�8K-mZ?m߲֎Ù JX [w+eY\ǀS3:H}=~=Q1Yoj���3tdԠe_k2htJ��4l=zڝ}angnvuQ3ӵ[)Z.+$]�8fNz髇l?էC6T-���uQ5cqߩU��h%Tҭl?u`k'ᬄ K�LgWq/fJ=gu]= d7.61<u]5Ow~uݷb4r~O5yZi9o,縹kN㬳 ��8/Tm+,pWo \구@5_%U~+ܮQ=U歎�иKzK!柭k R0k �3_SS{Wgަۼ%\qWq(&R^.^s,-["E%&r]LW)SsϿ~QيTcjX<egWnsS3]s *+kW/cx-:B=7k}��-Bw#7%(gjCRomnWۼ_3BhjcrƳo+u*v&.FMPZ܏Ym3g�*Puu%a|tx7ؖ㕠+}/=_g+!*]ogOw:V �׭mdƒVPigmoVO*`g^׹?VynV kGǜSTjS2SMZM:'\ً>}7o[_5*2imX��p %JVmVu U%z,X/9!i/MrҼ꥛lrBlyDcެohɂXqiv-,[c^ﺨ-4{\]5nx��z UrL-Y09L?8^sm9~qg82xlW%Nˌ%h1~]MZ5yR6>O~j)r`?mc;Ikiⷙ"w*ل6(ܹ_/gb1$}qy/���N\or\=Qp]l]{8!iZ cگ,[4pݺ@klZ~5BQd)=P)6��Kj<Lo-&Oxֶ :;6E'}fuj:ګɗl百4Vdzq~&iVpw`jBR{}fYNVNdO#S_-Skk^���'9RtOxR6'Ir^_Px�[_ЍCε*YOP[GN8%'V7Y?5T)JaAU4vhiUmt]J9))U~Q16ìΛk6ze#S*xO+`Y,KIUb��IeGvgRJxbQ2߯cD&uc\۳l@]89T13&�pl;wϗIkmDl޼޻}d\n!}evjoyb]}d\S;N?{*:S3ߙU4e>\iJμflzy΍Wa|j0]t?z]7I1Vϲtk΢<Ess>lZj-ʖ'X7*Lje��uQVpzHC$zzn~:~67Svg[xZ\ic/V+��.AG]l-^Xk׮աC?맢qYj.tU&x,c6qRi6or5Y(i_Фrw3R1;?l@[o{*ͤ*<ng8#mQz_Gpu5}u��MJ̧lP5Z]mXFS6^Q *XPO&0JkzxoTeOLJۙ]N [\znBiU~F4=Jl��:BUDj0*,BU��tG �ǧ^������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@+44ĖSSxxS[�� Qfzx~!TEէOhk')-�kB/[�*QNl 8u7 ��hFu^րSG(D[�EQ[%'С<ԟ&M4p`'k[��@C:+G:Ì>�8^�������������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U������^^qb:Qhx3F>ldyWuńKաK;jsƜoڳg7']N1 s6-5M2E;vr/}{yjBӯ~+}Z�{LT<TZhz衇qF{-�'ާ[eTs Gof{-�p :b@oɿTp\qM:JJ[E(cunoDOto~#G絮>x+dK)R;-oSxbq-J߿MU\)s\{1r-;;ꬋR3{mǶ2o)ܫ?Z?SO+""~�5Yjnϵ~wsC/Eu =k\}p�NM6-Zt@ݒnRiw~Lf_ݥ<ƎPޓO>[>%ymwoH3T?ɶ8^~ӟꂿJjl@tMzOV�˜X?~FAGX O~\EC#.j٪=Z=U]?X>3]Kp{.mƮe҂_Eh`[m+7UՇ5vjBJu{"<PwBCC�*_W\q&} qmEJKB)/~ QFilDX4W~siX�8$a.}T >LxPwCRקЂP-L^h[�x۾} ~()޺8BI'i?�СCtf_uUշEzs۶@cEFG.::nԹBc.iƶ֨lҒYY[G@]\|y*my=Nqm͌f~;m �r^,-fN0>70D}oƎk[ů~}>~m9,z/kDF�hب ֜9s~F R @]�6mWj'I&_mP˗/W'_:7хٚFp?>�xl޼Ys^}C#=P5㥳~]'f[�%{jEK~O?"TEs}|s{sl @]q$=z]S@Ӈ~W4u>/ 5Հwg^xӕb[�b "ԪmÀ l �R Pl -b"TEjي:-]jk�UKwfpi:rĿ�ʭX ͷڙ;ץG[�eVIQ!9vQʹ~z_k׮U!V"Fj߽m@#ǚhl٫?^<]+VlwJOtLyWMֆ-;;0K]t-&MU]߶4|wg]+~p|[5j-UlkÖ={(>>޶.:?l[>}7Eٶzݕ؆Z,to-ywϫW5|*sNr>W0PIU}/tl?%MӠ΃lKVT\-iիmA^[j?k<EKK+)kcmq{ǵy;6ẽ:W>PJjM:38>,Qݣb[p"TEGktM/ZEYG^e/Rl2V^DG}6@\wٚ>}5\_}Q?s*,,-_dxew*(7#e ֿ3[kV.ws8=5yOΊgͯ\3t@-hFV4s?y)kK0x;xJT6#Ws7<NOPX00jڳrm)I t%?Ouhܤ3\�郑"m NGLGvsm^f+~ڵT k^[^ak N/يv.## TQg|J/5\=jU#8N;և pu[7Μܾ[Mr_||p}WF\IGe|2ZX?.ҿNג?P5pY\mjK^.)kO!}u?uqtEk]8dkU5 565zKmd&[jv<ݶVUXhֽD5dY5n-hK SNN~?chh7mXϑBJUw>^аh- VozmPLҀоs|Cݥ}fK ז[l*n+Ԏ:Z#?6xFURR8aa=U|6h,iZysw@mEIIS5묦MjCG 7h[).tű^6mnZGFuO>}[Mii>4a 5>h3r;AF['-.wmꦶgCQZTkaߨIw?蜜1†y1 TEK߶ ǰcM6FAAufU `NhEF@]neOچZ1*[,rl/?C{'A\Z|6C~:s_ﷶދ^LiƍPZhhEE[HK\D϶8MƨU|\-l+JQ-mX K74wk}HU[3䯟QښjvmP:㼛͟CA*̱,rf3ŤG�Gߏroϴ{+Wf_*lMWM,l86vGj]zt[]A6$i#"u.5o vVSe Qٹ'u Zóm>%&6p~44A3~XHq9M"| sE?С#[]Q^s`s]RjiMR棜>rѐgٽնC[uۻs[^kTDli'mC:4|Cvk[k6*W8}ﵘ4iNdg$_fU.uKrNQe-0=r3߰[{s]z Aza\3U<H]"wNGh U=6XL(8FpiOׇH3:8qU߬ *Q $81<3Bq"VUPU%r|W vjRrU&a 6?{mb2HME>vpN@?jGZ&׿55|svMڪWn utNBժZt5Q_ ]PG.*H@"T*PUEzcMU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?p7/u�z3wڽzV[u{u㋶ڐ3Qw5ԟ |KKaP8 Mb }>6xvw`<o5tۛvZiz8~iD.ڷmyͫU#�vz=xa u]Dt#bB}k=O|P#BU4̪E�͇֜lauo~>L.6O3c`M_ =vJ&fM/9LZn@3huX՗h8UTLe\a=qSחmo^s#35_5ٶ9:Tn; /O_ϔz`*Pź6*XRȲ\oj˰nF鮘mc`||N,BU4lΎ033{2nU|<,#P>j^~Jz\˧;ƕG%욎^@V W>sl{x1%=Zu<K}*_ǝ\*h=GV} cpR}]yFG}:Wxm18}Gjzs?Yʼn3,h6:k(zM+>+9ʶ{<]F׭< Skis9fd^}.vmɲ^=&Tα4s=nS篲Ve5>Sska^yZm_ojl)[oI-?#PU~%ɫqڙ1^N;l) ܩG=S#ިF`ҢwaNpW>bsT:futb'q=KyΕqWj{ף\?ߵ5N[(FyZBP $x뮯9{zZ_þӧb4+ŕ:WNZMeʙkcިwugWM6?1^ӭP;.6!Yj5&Rj-'?e3A+I?Kfr{?+3z>|&>g&.T'ǵhgZo+Z '6˧"/q=n&(8]y , v덷K-ogF@* 3Z5wm4lmIEZ`#t.(ksI1ÄOR~}s67V jQqzCJKX'7a9W$Bjz^_ ڭ&℮7Fx]grch{V\/Nl*mZqmyc9S*pN%�̇L}pM h5W\'Mկ|j}>(^0Ac}uӯk NDZPS=]f^J]o+NjWY8kgo^ɣ:ˎw榥^aLߨȞdOB8Kl_'͔g{:_O2Sm?8l̓"#zEsLz.ϼ}sTMxnVƙ-;zO65/#b޸`F)*T V3QH_z<8jÛoP-:'m~[6<#eTm U[=An'f6TfV6k<]Q( 9[G~w^Vgz 58l[Vop؜(pHw?0 .w֘08&T TK/}z$ْݞD0 SM*HKQ)۳LWKZ )P89foJw04mX?(='Dq}|*GdfçܛxCWm{zy,@f+=@Ҍ*3;m[u-GseƟt2 Y(RW*Lݱ=՜MLMƩg%;[+-tf|T| pt9vNҚumfJvN(c~]<9:ae/`kLᄖ]c;܈PTc68TkXX%`t�u47uDwjF_scݟ�@͍NK� tK}hg5;d0Aӏ:#C+D9)R.ߚ#EǨ:Ԗ$uۢ ~-9f^S*pl?qf6~5̛]{ׇ*zteT^|*qZFUeFTsv{8%� ҟQ5696l?jkw?H6\ejj 9aGVf^_F+i`2w.t}�LF{}Ԛ%wyO\^4''hiµ9I#ʦ{#'u%EU-Oz=E6\}mS:K�%\/vplYDr6'HG֏^!cx1#fej w8;^O#S˫}s8Zo\L%0:f:tE}8#s*g94z/�YvΈclps+3(r: 8FU?G7LN)3F8&zN6z/P8*Լ:Dz^c3lN81kS8NH6uQlkrn"گUQeM焺k:{Bŵ^iFObF9mmM/}lS6]L{6Pjѣk:^#OKqQfdyu~P8 V^Vy]翞s3+mLuCeNinS;F߸Xaja`?gIG`VZo˴/ il[^Z}nvߴʮ]jGLor"ďbFz/7`�N9u=kt<n{"Sӌ k̥q/f1zAe볺{xV.JӃ+꺞�LLTjd̎^{qj)uI7r}DuflQ =v-6pqn3m~l3hUzF-mѥeJ`d3{a̤iGSWq}~jTyW97X7%6b{W2Ή>::N5@Lŭe>=dQ>qFժlDwpcGT_C׎Tp`zfuU]^i]$M7;;wgq;S*y;Cڛk`r4;W7~#ӌ2[ccMv|_(Բ!cfY:4ev-WpOeu59J{ O^S}peg~n&'3f^&rOt;kzMs@lޙ^gz6rӌ�}i݉}Kk<3S]mˮ3zLTف=54:RK\j+( Z}3l!efة@E,XX8t_toS$JVY|q]v-k0NisfsN:V?5<m{3<7!ie[R귡6ls8 n;pz :b@j]zt[N=]7\ӧ_gk ϶mwf:wW⢋nk ϡCGԷz׶0Mm2UNQQݣt[laz&fpjiLwp:b*�������P�������@ �)e&}d����@"T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@+87Nm!! 9Jĩ.$$ؖ& NuM6>h7lҔB4y7k53b0uZ}p9眞0EDiz;-5\g\ް_qzvI7[j_ݖSOx~UѠ=[N-'ϴGjqz7nn\[kxrEG75aջsnQ:bϊUmJc ngku:sl . 4H7GQVԟ&MhЮ۹>`;l[;ˇؖwIQf!ԧ gÄ ĢGavZٶGA0g\E]ƠTkVYl PG+ymPO8={>-�);;[۷o׀'N%Gц 4dH SIaaV^aÆ�TZZ+V8!!�>ٴi{=[h;woak�m߾}zWl @>|X׿Ę ~9}0//϶� T�������?������U������lT'U6ml @*((p֓k۶mHf-}@ h޽-�DG`& BU��������d֭Ol @߷5�v[ ̌Yf@+..v=PO٣+W@3ӎ[h999Zx4_|LAxf  m �BU�������*�������PO5k-Z@ Q˖-m @+22�m<**�ZPP(�������N1�������Ud׿ek�mӦM?ak�m_bk�-++K=o`nnm@ ':x4Fv Њw^[h%%%̴5�fNh>XZZj[�������U�������|ҦM�ZTT dk�y:tP} -�)88M6-�7��������|b6ɱ5�f6ζ5�f69t萭49NVV43AUdʕ?ik�mÆ :u]vG5�vA%dc mr�������BU�������*�������!a[5kL-�iӦj߾:t`[�Rpp;ud[�m۶U׮]m @ R֭խ[7?p �������>c?�߿_}CiժU rss@+((_mk�EEE�*�l޼Y|]viܹ Yf@ы/(&ZÄ��������BU�������*�������lh rZje[�Rqqa\6ml @2䘵۵kg[�6i< T�������?pzO@۽{y[hfkfk�xWl @?PPOݫ5k@Ҋ+l @@gٲe Lh"g 2+))q`QQm@ �������~ T�������?Ihh"##m @5mTQQQ ЂժU+[hn�ZPP(�������N1�������UdժUzgm @mܸQӧO5�k.M2�ZVV~vIaasssm �BU�>)((СCl @9(ԏ8p�5�fNh>XZZj[�������U�������|Ҷm[ 0�Zttl @hBguP9RAAA@ ;}iӦ@QV�������1ROب _f@+..f*qgk�͌3}r�|j*=쳶 6nܨ3f@۽{Lbk�͜X|`@:}077׶� T�������?������U������2�(44Tqqqj߾mH͚5s`llmH!!!NСmHk`Νm @jҤYK.N駟V-leo������4i nn4zh3FG޽{f[hYYYZb-[�ZAA-Zdk�EEE[_OS?SO=/U$--M~ݻwwޱ5�vk ̉W^yELGqqm ֵkڣ *������g?&L@Z BU�������l۶�������jT9`}'}hRRRtWSa4\ P@+-->/`кuk3uƁP Ujk������[~nk'V.]4f=Z *,BU�����r'3Th۶^s5޽mmxU`�����;YjppƏR>|mmU`PxݻW4hmHԖ-[tg�l0b |rs9 �Ŭd',kڴmh˳c QQQV˖-iUdٲeZp> ֭[^{M>mH۷o?ӧ�~9s&*PFDw}Ng8}M4I7n5kj}ٶqb6�> SVl @5k٩@0�3} q2AY#U�����FבH=6BU������-T%Hdʕl#]vG5�f6l4MԏB4&H8q"SPŐ@(**Çm @]:dk�TYYY M_rj6&H*������s='*������8�|Ҿ}{ <�ZV4l0[hJLL5�;OAAA@ ;}iӦ������� ':p4Yܾ}l @kk�lik�͌3}r�|zj= 6mڤ'x�Zzz@3?CN ~sssm �BU�������*�������P�������-@ԩS'kζ�PuQ111@ 8qqq@ >h^kҤعsg @ :J�������3N/�ɞ={rJ[h7|ck�-''G/5�/�ZIIl �BU�>ٺu>[hzm @8p@o\͚5KLGqq �n�������BU�������*�������,H^XX-Z�dֱ2kXEDD�d68rZli[�Riia\ddmH&::|:d[ƍP�������@ ZfTjff<蜑ܷo:]:UԮ];EGG[�8vܩŋkĉ@ '?mpeddhvFW^ wFmy? سggi&uݙ9e`6mc 4>�*ذa6oެ;vؖڙp5>>yK <֭kG}Զ�۷m ݸqn,}s,aaa֭z쩸8 v儧֚5k=zPNl+8p|wZrrssm[hаjdV-QQ~~ VE /BU2y/jFyl|7Sp&*.)Q^^pN[ǎ:t-�|efE(==ݶlhWln`pJJJ_G}8^-66VC Q.]l а޽{)fGXu^:VHHmjں}6nɨ:b 4�@"TN3μ5S=:ރ-F]:u)-C{V9r$�>01>j[h-lkUf9-S3VwNlڴm&BU3S.\hkRޝ4x@W&oܭ:on 3c̘1N,Y-�ɌyWֶ�8^  $ 즘zڹkRlUzfS7k,ON4kZkΥL3}E=Y *HYFK,qQ-tޮVNJKj]NL���L5裏\KդI;<iۦor͛7%\lh"sR?V~{gҀXN}{lF>zhUFh/rNmtkm-^)wY^zS���̺38e.8ڵGת٥/W˖-Q�YYYNSxX3v=6rbrs󝍬LlӦ= 4M%F"##,Pک.` T ssȾNh" r_m @Qu="g'P!'4P5:uhܯySa+�r TB:}DYc~[4Uaaͨt!TOivp@|2[g%ᔿ;mٲ)b9r�0h�ls!eF pv?bE)N٬78e[tYa`6'gwfVPhDRRR!?wDW'`C*)L{ĽOe kgV��h who߶fH /+;|Uü:8){+իYCPoHu0rǒ\:q11S^nshHve� j'8#m{T`-t7lB]:أ?pH3_xGLk_VomZt+/((Phhڷoo�QvZgU�gF֙=fF�u_&Tl,=zc^X}{wGzuGz;wQ~jڴfZm{_~h,hQt^Z.=һƧe9ݳcL˵yNUY `g8bNTT'X VoN 7d]SC*{}n֤߰OWKg=itr$iݺnk�lvs�uw q[.Y*{\Q*|7*;^hl<4<>; 6 Lq|h>[X~,mzcgVm߾l! TM69ff*7T^^KVU7y\vr�.�91~x[/{rlFz96Vr[m굛m^g)ES޼� uw~6buofK_ꪷ7vn֭"2} *)sg2M�i&ږʵjU"筣# svf,�0#�Ͷm`{ꗂ2ܡ_iUu=ֶm7oq�MYVrlV׺xմoʖ|_ BU| kiSua6x` P:_z-73֪H`qrnYz�yfk�af+:8չⲊKliQ5L:*^2v-Uپ5'(I1Ӂr5q%ڒ[05*:EFVs%#m?fme!`*ذa,ߣ{mx׋l;oJ$+ηGԱ֮7Cu?PjI`jSZ9C*(( 6Uug2k96- :]:Ũo(ԄQB=Wκ$:=ZUXX3\!ץKgd0͚ƨľ5~mApf &]3ѧ-ijQW]>JuGj<GUǎ]uT,pa*xF w.kc^yyJ<{mKF:#\kZ&#:|y[��@Cy/{;DmD vFuXf)м{WrދM>kX]vHM:<I sFv,3!#UP@~~si���3CXhShlNσFXz&�;BU(--u.uVdj\͔�ԩ:[hm۶~3[SὨ4A T"%e}(.*Wׯ͛kРA{QìoxXPhA#H,n۩_|mk3Om~�Tdvl5�f/�ޯ˯ε9{Q46σ>P=h(UF **ʹ<\V':*R濭viT[A�e/�|@;x~m[{ѬC*e_{]䩰){XOƑB幾jr<}Ш~hP@v̽TRR5ё7u߅ьr=jU'˹<���4fMbֵ3.珰3߷iӦjݺS zBu Wً+W:IM�Nw@#gK{mn];ϗjȠVˎ;:���hT_ω;k~/:dp::fߋs.Ə@cӤI羧/TٚV^ܾ&vljNn� *4kLݺusd8y_g?|缉Z;e���@\nڒ\Vg?ǟ|ٙ3B ꊱ"3y=Nh<Mi*,t/Q泝msْ}�hUFW^Υ93i9hM=K̛^s۶Tzr.]X?޽{43gʔ)_={t. 6uS̜|-rnW۝˰46ov/-=55A{]ML/**v !!T sf3jŪ4:&5gmE78/5R5g$wp p./88RzdN"Pw-ZP~Slu5 #V1?g=>k9:@cdUOXꃞ6O{1G>5M7'RL77 E. 37oެyj߮QfYKw]ZE)6_L>\9SݺU&6?H.\z\ݻkȐ!�ر@ػwx %$$�jӦ֭[L=+R.o`jvǿVxxZV8o�g:'/h=R¯9j˖-um4F۷׆ \}P9:[=R9ansXaN0a~ߎ\^{g;Kҙ>h]:b�/Bׯwʗ]q5~ꬍ<'`ݺm0/nMVy|*gPՏfplCkG}Զ�۷m h"xVO )Wnj{չek@||5Rͨ_uf3ƎZƍ`|:sp,fթj~i6sFxB3 L?4F>}8e T;ڿ5 % Vlh{Yweb3sD /BUYp3ZW}zup'w3x` >)/^k:zjPOnԕWc;}s@Cš@#ce uԫ>IіmPO}~,P= T��PfoKR[<Q.Xу@dȑe#Mە[ծ]bMU2;vQ;wT~~l{!q3m>]F{78묳X{8A> _#Gh۶mQ�Ϭo>eggkwA8vm#ujJ;gTÜOJJr�*:3*cO2fM7_֡\-\w;uY_씁@#? WC}{uTHH ڶcS7;$5sz��|W7wU>2"ܶہgql4tP 6�믿֪UlMja[lZnmqhk@D @+WԲel,ٍS\kg@Tds#H3 =㠶ܧY{zb}i��@ói&hNNm:ulZ+]}e 5kZcxAAfҎ]eH[vދvٶ�83ÄfGV1*:BYF|{fٜA6Cc@ aĮ^)PZZj[5m&AA**.qgC0`3kܹm @ڱcfΜ{̶�8R3ZsfSUffQ7 RqIJ\_w�ԍټ|e9* n )q},v}&e˖N4hm>BU�i˖-.ϷGj߾69 ٶm[ d`~?8[nuFΙՅ;&H5EL)W�9h]t!ZUTT3K.N?BU�2#(5k8_'NT͝Pv* T*P? ~Y={+;Txx3ŸYo7N4'8}Y|jժCCCƉD@ZhEӌb5̋(*���N0kNzfD!E  NM3Ms$*@ G,;M6 #Vok�͌N d[�Rpp9c?��������|reff@3kʙ ;�ԏBܹ�Zqq1a>XZZj[�ڵk�ږ-[3@`*{1'xf#c�n�������BU�������*�������$++KS=l @:|vޭ޽{�mܿ zׯנAl @2T}6말 4n�������o5�~-Z�Zvv.\hk�-??_~Q�UdZ`L}Ƕ 28\[b%P?>XPP`[�������U�������������vRgqM�dY˪Yf@ EEEA>h6 -�ͬj^l и������'6lpv{P?o߮? ݫ�ÇSO@35L˳-�U$++K[l5��P?̇u@3S׬Y,� RT�������U�������|8[hر4q.]l @[n:ԓ&M8}088ض�`�������#U�������||rM>�?�ڎ;�ځt]w?PO >c[�Iiim @>XTTdk�9A>hB�9#T�������?������ve�zܢE uͶ�$3ժYf:3l @2}088Xz-�C~l @o߾ -@zȂ�������#qݶ P̹ÇkΝZvq^^= P m6[hfԴ4[h=f*�7Fɲe˴pBw}b۷+##C]vر,Gdd=d0}m @ڿ~͜9SAAA@w}N-[Vqc*���ssz4|gTjM;vhҥm>cڵ����L��ԳM69 Hؘh ]^8D׍o4F?n&\~ƜO}{uTʹ>@}\�����!T�}JNN. B묉W%Kܱ"[iH(,ڴng>s5v@um~z뭷K�����|r!gxxu>Ӳ ⻶3{8j]mܜݨ#yN}<xSp|̒U>}l @***҆ Կ JKK޽{+$$Ķ*��f>uS333a=5|LuڱkS'X����|@5',P57saԿkmܸ);ޱY@G}dk�郅Q�U2n~p|[gS)}գ{S>ђF PNmf �ul~9rDoh ԏb%�� sBUcPݳS>YFO-œf*���� T� @RRR֭"4bX\/S}\Q/gڴym-ڴ v<#d����LJP��سgҜAee^DsTWGZS#yhE_-Yg[K՗V7lGu8k:�����|bT*88ض�W_}u֩mٶCZHbkˋڝ:~m܎]V: &Mw w,gC}�| (p<T{QTETQ~A;VWfjtT l�?^G}PO{f^^SڹsYYl_u㪾REÇrCtrNݹګ�g}�Zvvq[hEEEN@ GbPG{u.#[;_5?=qb֛Tъ&\5ZI矩f͚eDs]u(7r=ZU\L+C/??9~@'550%pL,..-�U�8ɲVeMڵxM:sHo{zN@ONGS|.;¶VM+6FI����@�p9rĹh\և0[*<����!T-[cǎiRMCwqgP@kڴ8 g�פIYP.(��pR}Gھ}jLd{? TRRK/T;w�����1R�̌p3 PTT�����POM:�,adg9Pv:o*3{5�vd:}0''Ƕ� T= Zn\;pع{e;-ZP͝2�:ދ9#T�$q.Ksh766ֹ����*��' 3lt.Xi8.]8����#T:(11�3p.ߔB(t.6mݻ;e�رcm @k.2�A6<eA ��N?QAAijz#U-_^jפI>vUev3w 4x` >����*�>|XRNl �ZJ_S3>)W}Kt^:_-^ߩ`] G�ÜٵkzR\\4YII�'٤jy_ �|ٳg0#E۶m-^%%blBRjqsg}6*p233SO@3'N@=)**r#Gl �BU��sq.>_OhWrn4p@ ����8~��PLLF唷ثOWueV9VZ}?����A �@G#Fp[w;,WCNx\U۠6**J]tQ����FU�|,uŶ�8^f/֤j mj[|+VJSzfSURR""":㓟;wG@ l٢޽{�d6ڸq:FU*��(##C/־}zppAgtkVN[M m^mܒm4`�9�����'*�ڵK[n-drJ竰жH͚]HE WxX35 Rqqrs tPȱtСԱcGD1;Β�///O}~�TRR?yl֬m7T.Z�hC я~#gi흶bgZ]Z:M߮ܢUkiSZFYj_Sƍs>h' U?#[hG/�*��gUW]I&9k<XݻwWtt&szrg}.2tM3f:ud����p�p jٲu:a޽{u饗wFQAAA����@!T�������?Q��������������BU�>Y~̙ck�m۶mzm @eff駟5�iӦ@+**r`^^m@ ';l @j֭ yf[h&ٰaXN,..-�U�������������BU�>T.]l @hB BCCգG[hM6U޽d[�R&M>b[�eQ�������#Us0@>/ P@E�|l25�n:5�}vM<�um�郇-�U�������������BU�������C. �5 Rdd:wl[�-ZPnl @ gak�ɼ6kLz-�`K�~q������gLlm۶�Znnlbk�-??_7n5�VTT@+--u`IIm@ '_5�fNj˶ ٣gy�9?c 1ĆG-�U�������������BU�������Çu!uɶ�$~վ}ԥK {n�T\\[G@ ̦u088ض*��������|sN}嗶 },}ᇶ ̌w}�ZII m �BU�>1S,Ybk�Lm @eggO?5�狉@0Kp>hF �������~ T�������?IPP4OP_@ccA P<}\pc�������C^�������Tu)%%E7pmH[nuv[l Ё޽{չsg+**Jm۶UԴiS{+�'3g}g[�RQQf̘;S͛7@HU�>Ѯ]l @9rD;v5�'CII;3g,XUV)--Mw566mҷ~?X/>:7ocQZZAZ P���ի5k,-ZHN[f!ZzwҙCg(aP7AE91Ljy��4���h̔wyGK.U~~q^ge%ux Mg%髫 M? F Pmڷo.\U��POqݺu5�=zaƍzg>ogh:/:ĶrjDg겳Ե;\ݰaԚ%�͚5S~�,c`HHmFU���ht_}SjsG˺w髥rXX.oީ�� T0sl[�fc�F�lg9NZ:맞(YkW|;3>�@+..^'˗/״il @G5�uugWlB5nl Th]r`ȑ#�uew@=)((pÇm �BU���4/vf_D w6:YڵԘ;匌 }7N��� *���3{N){+))ՖsжnLmߙikuVC;唔<}��G ��FaժUeԹcmC/쑪>iOcۿ5הgXzs ��*�tY4{رcm 6mڤl<d@W粲9o~ù&-b6*zoWڰiIoخ~*{?�ߙM߮j�d62}044Զ� T8 >�Z۶muy�]+*=rۡC9okȰ6z!>:-5eu%@ v`fl �BU�>9tz7�h۶mN9[{粲hfkڷkeKuΖukkKUwq۷;�STT�bPO̔ŷz� b^}U[:w5lɭ_x:gUt5)e ]jItO<=j[�9a`^^ÁƊP��� ځVQ-ԬYSNߤ_w~y#Uu^>stnVjFzo\>��*���Ç;-[,I:w` ӶԬEp8Wta v6y���F ��lU+W/i붝_XX\��tEi� 77Y*..ζ�$~թS'W ,p6zӳFk[>#=Ȗ2#uN'Xm*J|nW7{"kիm 9Ν;խ[7 Ltd6}ܹm+и��A/3֚eee[]:vL{h#;f[kk_(HcǎU||m���|c-\�ٽO>5�hѢss$߹< J`ѭk'Lvc)*.qUy%�9rDsε5�fF>YR�*�kٲe �#**ʹ<\F5ܶΌd5V~mSy�ߙepE&Z郬 #T��@֮];粰X{e;`W]1ֶ cͲ5I<\FGG+,,)��E ��-22RZr۶u.c6z_ٚ&mK6��hUشiS[hM4ǡ{-euVZnr+WZEftlCNˁ Rhh4O4���� ^vv^{5|׻cOgۚryUe_զLmVǏ���81R��� Yo_(:WV@0K�Tܽ T:���8w}W^y�ZZZfά�]BBƑ#Zz򔔖j7rԳgO ҟg[hEEEN<rm@ 'Ȩy:�'W^^vmk�"""BNMmNdY:uÇw.Mqqm&VGiiKJ�+BU���4W޽7;Tm]vN��� *���?_]tqʋ^S8X J8!-~4 aBDEqnt!Bpޥ WŵkqVDFA*n-ՙLKRt@w=/-<YyذaC�QcxxN@ۖ.]uk׮Xn]ğegb_WOf޲eKlݺ :/7FWWW]T$/`OOO]) ��ׯH">GLJ,+?ƛm=ϝ;w�&)�оr8@9u�oK9x͛19EU?Xb_݋W155OM}53m۶5ox�oOu~~> жwQOQȍ7ʕ+qرݻqܹ8qD]޶{5D]\٣544TW\ǏӧO :G'O6RT�cwشiS^:TyZ۷c݂*�{DT�f͚}ő#GСCcǎÇ={4v,[~'�� Q��~%KW^r+V#��gU^\re M4s^ Fñ<ZW~uhS9800\?5oT����#Ϟ= htܿN@fggΝ;uŋ}vy_zUW�Qȃ… u666gϞж8sLN /Z»,7*����@ ���� ����$8cff&VZUW6T]�m*}U Цr8Γ'Obhh�m*E< ����БG˗ӧqҥ:m+O_xN@[Sϟжx )A֭[u699׮]жzj67h ׯkl,U����DU����QHOOO h[www h[9鸿N@5800P'm]]]5X8���� ����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����t,{)߫p����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/without wrap.png������������������������������������������������0000664�0000000�0000000�00000465527�14332737457�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� ��0���BR���IDATxg`[K5,Y-Y当8q6IHHB=*F[耲WKP,-a迌RBI =<=񼰭X<QϛDG}Gѹ>2u ��������������D��������������mD��������������#@��������������#@��������������#@��������������#@��������������#@��������������#���RFYnwƺ �� gŴX7c1 �����CceܨͫǺ#W3uź���7a&_b %#_ Zb��d}X7c1 �����CKWZX7;)p+|Ϋ��;+ŗO] TnF5n��)MmUn&M�����`N8iyr%&ź#S4ĺ<��&�����������(�������������`(�������������`(�������������`(�������������`(�������������`(�������������`(�������������`(�������������`(�������������`(��a4!VZZڨ.>}ϛ��  Q<lXw�����DhW̽HرcG5{),(Т p8u} ���B(**ɓGu.կ.Ot:ugj*%%%z�@:sGuϟ/����x 2eʨ!<1Kݮ?^ţ֧c>ZtP֝/ht;7b���駟3fh[oAC>X6MO>jkjt'+M7ި8'믿S[oI?8-^X~_q6lؠ뮽VtPڲu-\Z-\Hjlly~٬?JHHd ۇ,'<>A1glx2L:NR]~ez��سeff귿Fn}׺f_K.QzzyAo$CѼsoK^L&}׺ӟDƍSEeJ]{5uWK/};1�����uΝO<Q 袋kZfY3= d裎RVV_릛ns9'PT\TK.D~_/}9]wuJHHЇ~Ac e4ޮ.X۶m Zy睧I'*999l/_[Ƕ~Gr\ACK. Ӭ3uaC9ٺ{?]F,YO.o~>-^H{キ6oެ?y.B|>]sպb/~[u5/>ー{:��0Ѩys3Ԥp8xبSO;M:lmܸQVU{$i[y^x͙3:K曁kzl2;uI'iɲX,;tR*VBB}>y^=dR\\T>W_-1Ծ hͺӖ-[t50 �w17|SO<N:$IRvv.R◿Ԍ34vX\RG}7/R]xt+/7Wn[f;CnA `h�����`)7*+`YVn~tI'l6k˖-:3^~Y+BEEaybHv~N? ~l**,Գ>o$8od0GiĉAZ<iN=4uvvP}Ϗ  ~w}WJ;I_7-szri)UVLiii[n:,oݮtI/#{!=x���09loogwKd+?zg֦VUm.:ijlTmm~=S tԑGjkee!D565^2P_֬Y;n=p�w��|$:ohPmmm^%ǣ͛77v|N{{t /TfV^I YzFr�����FlVssr$I[lQggr'G~544YKFQ---+x"]ss--jjjRss Al}Nb>Hp:;;e`e…:cƨo\IIjkko+R6lPGgg`=~b6b󇮱~ Z��qqq%I?lެSMMM~P_|Qgy=Tzfjjk%I/̙3~Z.A( K]k CґGoA]]]jmm ۇO.]wީoe>:쳕f577c=>PW\q{~?a ��0]]gΜ3<=WzG=_aSO;MA?_1s9GO<,utthݺu׫K5Ւ۷;3"�����WSs>x}[dZu+!!!h'睧zau= sZ|n~ӟ]k֬ٹZ{Q||$Cﲳ:KaLPh}⋕rλ z rtꩧ-jmmUtg(nׯk[N^Wv׿1{|[̮x yy߽C���IeezaXljii~,ժq9hzWr+ݮaň`P||݇xTUUq%)oL]ሞ ��FO4?FL&~q\_>C9N$9#�����E[μDRRjjj"nǤuk l2LA "=whϽEjs1C~_mmmCoO-{o;..N&I^hK/З/\��`:x~̻ァ;q,)n8=g>DP҈��wCgg:{~~ <xNvvv[_4�����@t g^b$Iq&W {H>>s/;sDҰ8_kq!hd��ا~&���|<n�����MUUUދu3Q{cu��������������6���������������������������������������������������������������������������������������������������������֖X7�����`imnuo ��wVkKR2c݌6�[r&ʙu3vKdb �����vk 5qa_dNP}My[ڴF{-> yy]n��@M)fHZjou3FBW/u3��@%ĺ  N54Ǻ_~$M�����`Q8A {xҷyf ow~nϫQ��-UVVe˖ź��������;JMMUy9WsiO�������������0�������������0ˣBov:m?C T4io۠1zNG?C5,$kƨS)2)ɛ!=A I)r$e;S"/ORrǨMEejiSθjPATlRɴ}}zO-?KMu3Ym-M嗪ïB&%fb+!+3I .%zdڔ#buQ8AM ;UUPj+7x|m߲^%SUmfO[MU;MMu(vRe0#ժDO;*-^IY2┒UƩY%\_ 3U_UEi*j7p>Pnt4)xZ=_f\)ٝrr$yd'ȕ!SY|uuv*=wm-,Z NG}kѤ߾MygFYœҬcSR3e5ޑDO,Vy|AJ)V{뻷kM fmג)UWEVSv匙F ƫ/oVQglW;MNIJLN lWѨ"uv+`Z=f+,VnUyھeJ/PMfNJޮej*5DcO6Sd%$yew()5SFY)Pz8[U<I !Y?;30nWLf<yRWfwQMyWo[)T_ս]w.;N2 dv]2e'5xvN ' Na ;3g'{bv) dh4*9m$ٙ:dvNf\t;GT4y촷gUjeNg0+A4;\;c NG|;S&;Eu8fg'o}3~9nvlaS2ٮԠ p3uj*Nv7;^Yl>uGvZ/;^jn'ޮCgJew";Ac4+g7;œomVz^ov 9dX<8;):4woS0qj*}DIjQSSgd1|vLqfQ%,;I^9Ɂ-6%NvmjPةj0;[_ꆙ$eO _cw*S2ٱLiQv&߶7;[k)toבfFY1NG_좝vM5`vj*3.o᳓7V5N0X<59ҳ]}<A=vx|W0瀢IɩY;k'H4`v2drPpvRsHnvzkpvz :8;_6e鈲ӳOܩ7;{jiHvJF=;#Ng ;qJNlu*jmji N$ȎgGv<s@ Y{ؕI2; $f.;= 3;As2=cpyZM6;NAi ΎΎQN0]$ Nfayaeg8j 94`vz%\v;9oWҽ뛝AvLSCme$9#΀vG4og3+eݝFvF{{m16;wdggFvJNˎɜwpvdvQ/ҳ]fgkWJoٜw4]9p="{ʜ0SS1z^/!)E2d25fd4(t/I厛.cIY%g*LV[H7XG)r&))-G R2+gRXl\e˛U8Mi9cd2[/hTFAF|2ř3FfMYEW%OZT+E=r&{d(>#wj .dw(%@fkҲKd6[7VFS2 $A2J+*oV,Nysdw%+EܩJpʕÕ,ٝ.ysd;Q -^bu`PfA8U6kR2 dwȝ'{BܩيOɐ3٫DO=>%RT|br8\dtqjV̽cg72-J)Q&oVaeKpɝ-3YL%${NWBWI 9\%e+=6CL.Q5M&2 d0/ɬ1tֽ]mDsdOLR7[ Iՙ&gr\)<Jf)>!I< =աԬřJ'ɤ ȟ ɤq3[U"w&ȓ$%{dwyJfǧ%{ew&ɝ#)OFvyg*-w&|e0td/TqfRsJd,͞ wz.%ePBWNw=JH*ɛ)3Ydf;;y;0e'_vf'7;F2{kbߑpIFvJ Nx7;{c뛝\ٝ?;02[3&|v҇Nb޼NNwvR{+d'wɩrdvg'5$;)V٪>1NvNvN`ى7PV{<>N(;c<pvLٱ Nb7;I!f(>-wj=c>;N\Cΐ3Lv{Ɏ%d0x 3.0ƁCFvcyvN֠ٱ;CS8AFS\wv,!qtq|Br ;I}Nkvd/;q3pvRΎ#$;kPvz_`0ɗ)ޑ>Ԡ'$뛝84;q!ى(;A,OidlviqFӎd#GbHv<}VrZ7@v&;@vl!S(mf'ovd/;!ce\|;ǽcgNKiYNܾAc";AcwdǞ:`vJeN8(;xf'dVhv,e{G.Oɩ8Ȏ) ;c뛝 7;=egɌJvz͎ݩ|Y*>;yI$;ɡɒ閻w3e>;fsg:Dvav.;@vrΎ7$;ɩrA}~"\v֠tNvWv Ɏ!lvbG ;iIfd'_v3&qGv2Nx|w,+W{Ss7;;N9 o8Օ~(d'gɎ7;ى8;t+ɛ#;$e)>5dv2Ȏ'#섞 >f3[0Დ_&iegǓ<;I=߱Ύ/| ;)Gb8{cNzN96;!ꗝϝ9XCiFLqݟCfgӠ? ad79:}۵ifgvu|$$y4`v N9cfb ʎ?;a${3:0HvC/; A 96;2 ?퓝N+(;pAi'N'])erp {s@N0<`t/;fNVv? df'[Dώ츃cw&B1K|HvCn.NNJغ3]2o dxǼ]pvzO!ߑ1$;'z >4o7;O!v Ü3{!*2/;sy)Qv;ΟFaygDk;͎9$;Ngޮ_vή jλNH6;;ݻn{Nى3gfwYvϟZH Ea3îNTGV/j;m9agg찳0zI V%4;èΜwd"y'F\/Htkg(=olD5sܼhMq*Vh)P- ~��o2-[,���5�����Qjjc Ң [:;ڇ^/-wR->}ϛ������������� NrDmf+-Ot:ugvt������o 믗f$Y,vhBdgG}:c= ������.Wh7+"zNT |LN%K}{y}ޫx@v ������eeZsnC=w߭{'Pח9.N̝#8"j-hYb= ������.q˗?>D�oۺj1FQgI'tv8x<:ӕ+۽G������z!꫕3fH.u֙gJ?<>33Sv|*.*$]{5uHy=p:#:%I7O^m������?hۺ='xEr<4$IfYv%&&ݶjooWWW~9*^4������vNSgu>;VrJ^:9z'uI'iԩ2 9cng?\k˓nW[[[ ������R ;WE='xQS]u>]TwyrssefujjjҦMnWTTb{QɤuI2 'W8A_~$F ������N}}+*٩+ w5ڰqc1~_fYtAr8JNNVss~ӂhTcct{ ������r>Un&En_NWn/bl6]]S_jll$L_ ������K/騣R{{nFIim+%IN< /sUgg~}:t]wG{[˗/$=So^=������vYe5D�z&uJ/ة˕9nFU_]������vo˖-%K^Ы?σ_WWS~N?]&I~_tivĉZbZ566nkΜ9Ï>0�������'o?5n9Q-KJIWmTǕ�������7oݷn8:;;W(6nڤJW(kj裏{!�������v sʏ^SŦ5~NT +7w~E�������FUUU{튊 =n������3>~3_j5F[gz��������������Hr='xMX��������������R5F Jq�������������� "9ces$D57jX��������������ںNmM='xqɩ��������������"LNUsZѮ֦X��������������imWGG{Dωj`)q�������������� "8 CDωrI8S�������������L2"j^g_- ��������������"ؠDωfLfRc=���J #z|Qa:ڛbl��QMu������|K%$r7='x&Uo[q���ֱZzsź)���Zw?𖮿X7������TuDvNX���| uJu#����������;)=wj*T_=ـri�������������rk"zNT \͎8��������������Jpy"zNT oz��������������ȗ&9$�����Bggn񣭱Uuuͣ:6V]jQ}��������{0%"zNT jm'o=q����=7cѩ`հ[W׬ /˨iz͖Qn}!ՍG�������铷VͶ='. pr5qazX����@TTW7_VGG~rznGgg~C6TjѾ5n}]]_U ctͷP~n<|x_:zi߹ZjS@w?*+USۤ?^u}槊3tqs~.>R?+';EGTZK8}Xr]/kjs,MR?Y5Է橺1ЇNu7]]]]ZtE?PbblZ>[8I{^цMUr8õn}hԵW %q;_k*rP㎞Np^ݠ6>g^|s^~kZ9r~}: oO��������E3<IE (_rz���� j^ZI:9ȧLo [VirY|+u+`x|` Z_GG럚8!Wo,Yf}Zutt>WjjR[lu:[Ӫ/7G'/ЄCI}k߹}{ؠ{f~r~zJ~~Z<1L֘|6uuI\vzmIRMM\v|4qBnPo 9Ђ曭֙NREe]kY?^1Y+IReU-ZR?8roM+6[q7}諳K/V=S& ��������_ODysc=����5uMr-r8o^ӊW%˴oҸٚWn+-I2 Aە̽NǓ})/I^ v55J.kTW,IINPNWmm$*ݪںưM֘74ad2o,8>Wԇ,r''fmXc[ǽYstORmmq&jhfnU|E]"&,0`:;zƷS&Id ��������{='x֭kc����fIz/Kt۝/d2*'+EVY6E'櫶I=/=Cfhc'ӝNh:dia'';EWiUTJ~-4G_Kt Ѓkekޑ$=+ ~F].1eu~2VQڇGJO=^~ruuuӋD>y< XT6!Wm}am%W=!Ѡ9`28u*.Τt'J~F;��������\ڶneD1uEAdN/X���|XVuJXc�atvvK&&<v\PU_ߢcOQ/<[Z̒g23ܚ6Pf)jw HꂋU+,{LZ~ҷ]fic%CKܰ0�v/w?X7�����RSSU^^f�AʴlٲX7[ﰳǯ?ͫ9q~0lf^~X����DUwE^i}=诂 z$iB[^H6"Cc[K\NRP񝤠B0 3T(�������TG?D'hrjS~q����د8\RS]nfDV4+��������~Zic#zNTW+-yX��������������Yjkn9Q@Jfvz�������������9tdD^ou蕿z��������������GM='xIY?� ��o_DDOMKUX7��`DzqsU ������[lꂣb~NT ꪶh/z���uZ[[ڛE2-[,M��5�������ؕGvc4LNUɴz��������������HɴəsZP[5ߏ8��������������5WCmUD1%%%]$zҔ7n6i1h*j+(lo5U)g465(`:f`0*9=GfM4'dw&+!9UkӲd4UΎveQ%S\]yfj&T2}j7p5T*gt4)LVQWW<<R|ٝrr$yd;fg'@]J+k2'VRCu 'U 3mmP᤹.WjQf$[[7V]J,1.NILYJHJ#-ݩDOq<\I]Jv2 '^9㦫ResTSI%U<e꫶(o,5U+{4WPvR e4--^ ɩ;R'UMi92J.VG_ܠST]VmfO[֩dVnVjٮu(vRsJd0Hn_f=w$ʞd,6Rd4)%wǩY%\_3U}[v]l}Ǹt/57)x[[zk<|řffOP+EG6{\)=5_]]]J+[2'N9RCu 'QMFL[mU4e꫶)oL5(dZ/Ugg{LJN͒fWBWd;Ibۗ+=ƽ۵A9cJeU[Y%S~Oiv"N]Veg 'ԜI $N^Ov&fS)g'ŧ8s씩.fiݮjv:;8;͍ݩ)95s'iLUkSNfgZ"N`gPRhg'CV{nf 8;2[d.;3aNn^jok ʎl+;;xb٠)s89 2' 8{f18;;khv+g6G);c?ajNS2 j&;D!;y;lם֝Ncg'=\;N[s|Nx%Ύ3L׽]>q8HLVBwe6촵)X|+䗪OvR#ND~NmHvJ.";NrK\v:;IsU=4;Jqvrǎ0ٙdaegn1Q^QȎ] cXC*-^IYJNv';=cw*;c#NCrK{Os@}S횚)mae'p<1;hL-ʟ';-1JN N3I;";FY);[';cjS:C eǕl'#OꓝΎﱱN9IS#iϝN {h pt>qS2~ݹL2;f˓x(d9'N�O8PS}=4dvre=OG-;=s!)807V>pcٮ>OFyG);}3C ;{H;FQNvΎ}ȳSɼd[Tv Οf'5|v ! جyddkzSSaȹ|= 톕$@vdgy섟Ns޾=5;}wUv<)VgG9fgyf'̼] ;:";#Ű^ě;V߲zy,VniȘy^/zȳxn0zH4jF^d <oW~oZr57f.Wki׶L#OFϐe"٬2[+(Tjٝf*ۗDO.o\YJt˝$YE;;VxJ-TjvLshSF`PfA8S٪bmJ,͞ wzNܩY<ry2LNU;M.OWL;IQ#Q_6Rdڔ3VFY2 ((h/Lqfej7Hx<y%#G[I %${IWǧdr$#[K<Yf叓hyMCwLf匕jn.i9w&+ٛ)+ǧDwɩry2ewyN\ J,břĴ2`PFLqJ+ŪbYly3 ds8Iy,9\R|JHN39M 9\%{dw&ɝ+ݩY*nceT{M횚S"զBY Գ]ry3_ӓDOR͔=-wZv"YJ#,_^ 16Ld(-Dq=5#O6Gi9;Jf)!{:iJHN˛!˭,'jOPJFa)`0WP*S\r*l7Hxy2e;N˕ݙDwiJHN+%C1OH'=W6GfN~cOzNd'1(;I6Hv|1fv!IOvr$NY0;!ꗝĐ'g2pvrC:xv҃c$;Ȏo- ?;n_ovew&+ɛ9x3wˎ&oV,8Q۷ȟ0$NJpvR_sXA1g'5LvC<;g'.8;x<~IʎW.O) ;e2e'%4;!qi9᳓ӛaS"5;;'N೽Ov<Aٱ W`IΎQrZv|2f~ovtI NR$NVwv҆kR2 ͎3Lva>; Nqgt˝͎1(;ONe7dvrQvl!1NvHvd?d'GvƐݮ|A옃cdwg3NRq=$;>Ԭb' S<p #;E3&8;Ivv30옭͎;;ŎIpwoW+%OXř-Cd#'$; d'5lvvqz~hv e?Bܛq!Sى dԝNZnovJoovc 8spvlFΫ%(;2pv9?=!1vg`0WꛝTR|}s\ȎCެ⁳cSzX{cۑw ;ف8f'9|v7}$ d')lvzcYmJCwiSHvlI;=Gq7;Ceg�;Nrpv8ȗ9.ot)(;9=W$f'-$;IqNBxd'.ىdS3N뗝x_vRCS8>@=:PvJJKd 1eћ$O}ӛװNjov|Cd'UٮY;f'p}~d Ɏ#N€avcy3? !qfiϝ`0g{~7;I Ɏ7CsS Ii 3;Ɏ%d0$~B3v qզBYq8Ɏg) ;YfNIs=ٱN\q@;g'ufb NkΟNfovzdݛԠNw^N\Hvʎg?,;;Οcv}o_vt? ʎovθ@vƾ+sxO gHvld;;;zie3Dvlq߹$20`v q ONOCPvvdiz@ opvan;섛뛝漇9tf'%xλovsNȼ]9 Nf~)Fvx[;x9}w3"Ȏv;|v҇A3w͎gfHZpȘQ&"YCԋ7m^$!zAEE)^dİ^JRspEJ3zZ >]0i&=,mUjifΐ<7Sy3w ,J,ˣYd}Q[?��L˖-��8�����TǺ@ΥEbKZ&?BkW|ڊM^OToUCmEв E jĉl��������������Bkj+oh=Q-3̲}ljj;]0T�����|7\uU:X1rJKK?~|ӧOy}Bv˓fnѨ5p#zhy$ O.‚-ZPc<?.**;0aBݮ‚~ˇWTM6m؏ۇpgCym6z}oQ3�����~m6[&sDuvv->g }5螻ց}ޫx@?�����233ts>;c׿z{4yQ ~N}٣ڧJIIIQ[1G:hWEC1cЫv?~آ^,5msNv.aoڴizuW΍E#Լssk_E t/nۼsfώ| 7D}¯~˘߯/H . ??u[>>aC7߬a?o} oiiѻC2~����7{GmTWWGD뉋flg;fL*s>m۶-?Oy<uѺv}_�����~.r˾7o~9@駟3fh[oAC>X6MO>)){オyf]szv=z׃WRRrz-Iŋ;І tݵJ~B[nբ U[[]:o6?A 2L%Kt'jk̙=['x&>~}:4T_v^z~c0w\pX,TVV֯O^r;hݺu:ѡl}=Cnٳg㏗ly矯N:)W\~p8ӟL{MԧY3gOW^Z]~JKM>X---A}tfԸqꫯt[oյ\.Xo淿UEEEP:%\Х];O&NTrr$CѼsoK*y^ꢋ/VFFFv n+TCCBb6[oUcC~_h4?~w=Szgp}ۜ /P>O\}.ܮwt@z}õn:K]s2gO> zI~x;> 3kNmny>?TYY֬Y~˗k֭Afdgэ7ܠ .PnP'pϟ%K)]|j]r:4n8UTV+]B];O<Q 袋|47oG,555髯 ?K.D~_/}~。S~p{֭[ue/3n~}ᅲzu%4-ZPqۧ|P%%%z+=t}BC]v*###htM{٥l6Ph4jɒ%z-Zԇϳ6yn�����B+D x8e2 d577h4ݹvuuu+ٌo&�����0ZZZiӦe6oFQgI'p񨱱Qv,YZj4fLm+/ /9s[_~7|3w^W-[?yN>$M<YEwq.]T%JHHP'׫^]]]2L }Gպe4cZ`6oެ.,l{1mٲEW_sM;I󟪮1ӯO{キƎ+W裏~w}Wʰ$SOſ~~9_ׯ̙3鬳ƍeZuܱj2OxI'l6k˖-:3oە.Iedtө~}xGOUVVM4Iv:;;%I/*++%I{_kŋm>I*e/55U˗-{L|N8=z|3[8}\SS[nE֭V$eeei۾tFɕ$*ۭ8Cv[$}nɧүϡﵝnCGQee.駟{ӷ͡P~}p***b^{5v cJk45k,;w\{_Zk׮O9EoTUYa~3yJKKK/_|"v~~:þN93:K2LC3~x)zuO~~8v gӦMr:a}T[[Z~:C+p} W-Զmt=諯 7ܠ:o?ᄐu>~�����mն;\2'h[[T=/UWJǶ^r}]GORON{=3n:IRY_~d����om[jʕa3)vjoogyOjU[[x ]yڰaڪeZՆFp힫7]p:#eX~Rmmmf ZWbbTW_/uuc>IR pxk͚5Iz¹WR~AVZ%SOa>iz7E2Yܐ vMMM ǵkת^N_qqzW?Y<n$)p}t\Oscd1eXdS4gөK/D~ە@RWWThh)Ԧ͛USS#.[|'vCp::;ޗ9:s|M4aŽ?:f -[FWZcCe }k;ݬVk>%׻-KLJ3Bm߾]:?֋/4?1 {wǃl6Y r\ڇ<~54496a4vw?{EPDUUU^ ]~h?nQwSDBpDyn f…:cw_>_>y����wъ_WV}[["ZOT ,y|AJoǟw:ui_B~{ےT]S_O*kC%hڼz�����@oANS79~?..Nw}nM<Y[6o]wީ?aSP__V3йjtv:CV$I/֥\^zI.A( ua>?7zK&Nԍ7ܠ'I.]S1>['OVss?W\߿׬Y kþ[KpN: '?n8nv;d2q>:3uYgi|i^}Uoԙgٯ?̙SO;MtPW^-ϧ[o%XsqnhhP{{N9dY,թNs{Bv9稠@?O5c  ]|Ew|+KhC4vX]~ez~ׯgYg#8"l_~ۭkuz?A4T߀3q:?֟^eeemwڢEtYO9MR>%'ua֯͡p,YRNCپ}N9$I\p232TS]xLUenV魷ݦSIkI.O222twka4vf u}O<SO=U7tΝnkѢE6Fk׮}Ǡ04_?h^ڰa\.N=@v{>~ ~�����Эdնy|;"Z!7//D|B23YcOwjΞ$əꊝZ'��YYY-[+�1j-]TO?̈o2_9"6s9G֯׫x ˥vO C4 +N r.ltbJ=>l64>l6j3111pոpTSS8L&{ws}W\WzztЁ+u[\.ֆP5 :{4[½>giԩ$Я}4r:mP ׇ4iD{챺k9{/dDچ}Eb4>BYVuvv#5Um6Jz7wɸ���{TǺ@#gw&KwefQo]憡%jǗ,++>xuk��@8D�M&O:Y&MVzlOx球+S>x<:ʕzc=؅<L}郞?5ǣR{nw W����<쎘;\mUmY;D�jOP'],sS%I���D��`O�����Q"͛]jmޯ6H1Jti^ W0>c�������������@@q{-V;-EQ5_-XU�������������յ-jzzlM]xl2/On_ޮ!��������������W6uJNˎh=Q-kˏ-������������� pumZ#ZOTYG,WJ �������������յ=,dF^|×z[57f��������������#\][OܢvkDi.hbb�������������_;獋h=Q5kW-�������������_B'W. Zޮ ��������������k;K/h=ˣըj[<\řU[9#��IKKSyyy��0j8����`gj)w^JNRVdW0Ai9%JRy Y<Il匝 OM+{bL 7s?Y >4Ul\鋏Um9DM*@]]̶x +!+/On_I)受Ԙi T9j-:NCOƯ>ӾG\V-m^4jؽɨ.eLlQVDJ,TrZJ#ݩdAESڤ{rM]x|YG\WW][kʾGRW{[ '͕hRvT'$*5DJ.-I2ũp>jooQX]=R5〓uJ;l[=ڴzfz*7ԅ?P}u&9Hm *d=jȅk[UW5_}Oz4y_XT_�����������@sz;>yG$6իC[~v)k*7QksUsCoTKC:mjokhhTMm-jnhTsc6Uks*6}-[_v]m^L]]ڲv:mڶKb=,k jVWgZdHRgGZT/uuVU[֪AVڢ_זoVk~BڶnUknJmMZ}:Ԡ֦uvK]]2YҤjTuZTy*:ZmJuvk7˥.mf:;ƯomT5jijP16řuҫ\XW6wmkW{=ܼƙ9PSXV0q$igp��yʴlٲX7��`p����m9j(ͫǺ~'4ISCM:;:bȅkKH򪥱NaFs4cՔoTMX������������̓o֢ !s'$ź@ԄkrDTlҧ<,%@)1&������������m-3isuGĺy\uU:dUXY-5޼/7NFp|><ODϙ0a  uGa亽CjiX W;ϪbSDj^'] Zuں ������������F+%߲m333umwܡ⢢~G߯#Gh/+3SO?tgDDSg}vvNv.;Ov}m;#4oPFQ^p[YQi  =!jb-\][Ih=Q-kWKZY8Ib3J������������ۆ|17|SO<N:~v~N? ~ỬEzuqI.?@tu;ԕW\!IzkHujʔ)t}bn`>3owݥY3gJhĉJKK vM2Et;ԩXϔ)St5hŋu҉'JnӟdX>fښv6F[ꊈ<˭ҙA֯XW~<5�����������`wpT/,q w[Z[[x,Qk{MMOxb͘1Ccǎʕ+uGKy-SҫNr֭[{Gׯ̙3Zx9h{^~[g'Z駒>H{1|:d6ey={f~ӟk&&^?[/V^^vڢ>fc.?jյΔh=qlTSC6,hYAlIҲ{1�����������QT_v￯O8A8|= :s٩yDA%)##C}/_.Ir&{7~~J~_QG7oo7xCNS^rnV-^HVU~_2 *kת^NS/K+W{DUUUI.@M7l'?TVV:IR[[F:::T[[3f7TUU.1[#6vpumVڈ<[|RO˾ IZ������������|ΰt}d2uܞ4qVXkVJȗ;#O5+믿=Tv:N:䓃~ӥKuםwꑿE~^?7mXa,yݰMx'Gg{N]!mz'tylD^Z;PtZj~5667.SO=zGe|S=DԬb5Typ yy]~.rJfe=Rn���@eeeZlY��0j8����`6m1PGp9/VKkʵvkZK.<-.pCA_t8]r%:4p].|$n'&&חnO>[fY%IB{L_o}(kί Qǹȅk+([ڪa'W3[dO ,�����������YWW[vj=EBpwUTTnqpo񝤰wRw`uM}$W.Z WfOt+lh=Q-hW[Hkoǯ?������������QnnF'tèЃ>8X]/`4kkkmx< 2AS1"������������( nvѸ+v#F_j2F,֠eS �����������`ę2Lnv&"<9յY2#ۯE x65-c3B������������5M hou34oWggGDM#ۯE,b-+uJg!�����������hqyeb "I2z/ յ<kQMEks*7 Zoh������������0Z*7X7ȶuYk"ޯE x6SA 'Q91"������������_~lg]$gY!|#ޯE xM5ZeV'FC�����������Ѳ~ju3|ٿomu3 W6ZTQ᤹A˲'+x. ������������Isu3,6{DMעzr}kA˶]�����������Ykju3f�Qעz$ƠY$ofQ ������������lJb "{wlvgDMIsWR^zF}!h������������0Zjiu3=GG_ܾ\}%zҕI#�����������Q?ۗf`ޱݙf�Qm$^bAh������������0Z}n[c ">rkc jյjp+k Zf'fO�����������`,<J)u3vr<n5 F_~^ye ������������F+_ΎX7Ǻ@Ԅk{k"ޯE x:+b;2������������u~|qz^όү/P {VV>Aӟ$uQ:eʰO ;wNp8s=WWQiO8]g9]oOB='x[B|eqqYb=6������������>t|EGuɤI'ke_v."I҄ tG:(xyp^|ATPPN=uiϛ>۬V>#nP穡bjakj^Zn\Iܠ ������������Fâ.PZnIr=(==]SLѳ<_xA'|8 :JVXx睧ӧk{ uI /虧<CO>DO<vN:$ zPQQ$)>>^O=.~}_xAvZP^ƎkFfYRw1^|uQ:~N<O /PIIIz4v̘~ORggg)~~hڴiA)9\X퀨 W׶_ _HT *7ֻ̑#a�����������hx?b~;;;#hӦM:uYgS:GO>QKK9~Ͽ['C$7JJJ4a.\ե?^E4n8YF:Ccѯy晪$͙=[պ+u9P=A}VK/js_}}=-w_yzWr*ƈ(I>_Bjnn7߬FrZjՐW^ G?wj/>Z'p`u띷Ruձ~QgT'xn_feu۷n ������������Fއ*OF^FQ|ZZZdZeU^^?P?u޹*99Y $uvtf%]dZ٩&YFd0Ԥ.\.uuu/ mڴI[mSSS$Q^WcȾb ں:47lb^Ms>;VΟ͛7K,::;?.}W^Nl~%i{UZ[?y':u'[~)3)! յ:r"ZOT mǯ?,95Gɩ9%������������_\6 xϳJOO׾3gRJze2$IƏG~XUPV|P `4/PCCO/Ai0~:k}ŋe2b =zU\\,ɤ?@uM7msszIytwl6[6L&{:ꨣ4uTui_R4o@ݚ5kdZ+';;:o߮>~hͺ_xNs9*--՛os~sM2EE ޳wv]!\]Pp yy]=cެB<@<27CT[9��)++Ӳeb ��Q�����GL+>xE!?טʪ*x<jljRUUr+VISLQUO ϳ큟W~x<YUdURRZ}7;fVZcWRR:JVcS eەJ9@vUVVʛxlEO_$aD&MҬ3OuuׅxUURSS<))ZaCJ~J'NTMuu`L~SOiҥZnvƍ۷oOyN5m[ap.-r3~m0Q-'(ѓԀ{-$3��= ��`O�����7oVꪶaW-A3c qzj~ab.c?.qܴZX7ap.-rF_fST4y~PƯ>P����������� ڊ&ח+>H}Q1k6Ǐ@Cam$5c4T]yҽb3J������������kW|ϑ.X _򗒤2_ayn}[w+#mE3QRFm^<l/�����������ѐYXZ57ź)1uM7I.~BvmGq}X7r_�Q-`j0ZTܨMO[i FF������������*6}X7#&,Y2-]4x[Yv?�&\][ŦעZgڔ_a�����������hHJɔju3}~֓+f�Q-)%#ZT :mj Z6qC4qCb3J������������uou3߆ה=�&\][c]Mh6`2l-dɳ1"������������5^F)#,]T/uM7ź)'`굾 WfZepT$dZ6m1]?B������������5]RWٝﺱg WfW6^CmA>}+�����������iu3yyж6"<9յ63ZTg2[Ht-0Ms�����������ݑ#1I&%#,X M31EF#?A=G6G;ZTomQM妠e_|Z������������r-nƷւ 4uxMzbݜ!Um]X7pum5"ޯE,7(hY}U2u]?B������������5"Yn._Z}Q=z'#z tƺ;ÖW89�&\]HkQ-kiզ˂^o^،������������F5Xfr?\/R_R/K, [SS ۆUQ{[kDMM!ZTr+tYX7n$i?E �����������7C jnuSv^zI=> s1 oUqa-tliPskQ-kןl8�����������`|;ju3b楗_K/f2O4ƺ@Ԅk~-?AIS*=4C�����������R:�%zb "S%K|BDMYעz炖Ul:FC�����������ϩ:.?~݅kkQ^rZ/>>dYrb0D������������-X7#V|+�&\]HkQ^zo!�����������hŇf`y\_f�QTkscDمςݲ'c0D������������-R c "'&Ǻ@Ԅk͎l+m[x솠eT:�����������yxFb "w6Ǻ@Ԅk{G^ϗ?Ne8Lq ������������Fˁ?|b "V%$yc jյK"ޯE x[֬K_�����������({f`yO?SGGdWmF_]ߦ.7 �����������G9G)=l]_ܬX7pum#ٯE xқjO�����������`jkmu3<Tf�Qo?ZTYyGJU1"������������yG-oVA]_$G;�&\]ۼ#VJfd^ouzR2$I`������������0a4źE|f5ĺ@Ԅk~-WKJҴE-۾uo]a�����������h8%eźE~n5ڦ-:NIעz-Z?y%I6`������������0>{ju3|Tf�QmkQӓ3 ZeڲX������������FIu3LYb jյd*{A˲(xJ ������������aSCMU]_U[KSDMעZgw&)gekW|+>0�����������`4䌝.3).R4iX7pum#ٯE�^[Yp>*OlF ������������b7>.~'joku3 W׶עZg+%#?hٗ}K_ ������������FCJFX7HZX̖X7pum)עZڢڪAJgYh������������0j+}Wl[ΎX7pumU[#ޯ.V _UlZ֯RWgglG ��`X7��`p����p*g44*d )=,6<\9\9ݩJJ͒TjvLqq,TKSWr�mߺ^S=R[}鋎U/5q.ߠRE檭I㦫SX,P3I)>R|w&ɛY8URWrMS[s&SCmJg 8poR@[׭}U:�5TWx|4+o  yJdSjvlRt˕RIRΘi5p5Wk􅪭ܬ}Q՚mY.8Zф9jLkTPVeLhPZYNQBW ^rdOPjL&eLVMfVc/Pm?@m߲VS߬дEǪr*0VlX]EY9c pQmMj08pumePksð+uuulʂ4eQ1.������������DSTfrV5Mlƞ+\][U]]ǐF9NЗ/ ,3LΎ��iٲen��x�����RSSv;K\ erWW =mT,6GвIФGr��������������Wf9d4E=vk-c4D��������������JcJJJ<ZJpy-߬,0@y3 m؍��(--˛�v{gdo̗ҘbWgt;4ftx<%$`ry|7]leOVJf|㕖SeWyr&‰ߢҙn&{׌Oֵ+4ȟhkc~MiCNU5.ׄAS R卓ӝldr+pOH 54pTn^_iІ/jcѦ>՜P/5}ܤsSKSJ-PWg&̔Jpȓ/wzn|2+K]R}T9n6M[t*7COզ? >#Ҷu'|&k܌oS2*$3I)EJN͒˓1:S2EFQ���IDATڤYRS-4SeO5﨟i5jZMYpj*4~ցjkmV23U6SicIWRjYE;Y4QnO2Ǩݯq{-VS}&?B5cUn9,__-8m3>TUn\iU*sZU<u_I]6|yr&{˓ӕ"_xl/N=6i>j-:NNƯ>վG_.՜T/'b&;\5"utUP6K&EYEewYl%Ӕ7FxrMAM'k}꫷ij}e2?ZwOuyھu{*U:k;7;Mҙn()KPe)*T8AE-PP {B){imȽmh"kMN;ҜދfzCP :3| ~NHB 4:Z;Bܹ٩+q sĝH=i]r0Q$\tTsD_pBT!MBBv=;ӻrHehBd&jrېs)wRSDV;=8Bt> i*s SRYϹw{݂rZfzUku㋘nrKs̑;/*w&wo3Eu;Y8r�zNNc.Bu;ɝqJC#k;ܱ;M 8)wb[@ɑȝ}!Q'٬ ɝ)izTi$ w|%ry0it2w">w: 9; -;{9wBj;i9{|T W;C<\ܹ9uNx,"^MۈsgԥZ;ιc@L^!M_c\SϹX}ypհ8s}n)GŹs]E~vܱ!@/Ng_}֘;`ɝ#{T$K-u;|v r3ϢːL9>;Ξ 3t?wRD/N3Xmtl)F ~u;ytצۅ 1r' F iK͝{~ꐛQ Eg5;QC;U;.!wBȦ0K 8^8x;]fu;-#UW�v$VNPXs'vRDaN:J j{:݀'aP(+9dXJ7DDDDWn#".4&ư=98{l7rϧ .eEM? '-NCv)܏s'tgO !d#8(2C#k)PRr+��9)LRBZ䤝Gd4f@R +29m(By\X(-)@Yi1JKPZ\�%y[+`(72 YiP(UHRAvz2ZdJE(UjgBP <d2;`+/GqA1l*ee0jAI~6v s PBP5I?LgPqP݆[-0b6\R2XP\e@Av:d 2ST{ -SOC!'4 3BT"?+2 (̢\X0Tᣒ#33EYݎœt dB^5qUT9SP Bœ �}\^nEia.3JƵBXJa*̃܂*Uc-*53sWq~fjE2;r3a+r\a1TefLEy(Z*^ }\P㚝V9瓡TiZb\6J r`UTVZ9ETRve\ɀL~!wrϧ@ ;b. rGYs ri\k;* r_c)w2˝l)ٰ]tjKkX0UkN,eZ厢^sVNYC=͝Z.c9Hs;KΝÎ|1ɝ;ijΝLl?w�TL@A#W0|r"QS~fmrTK厲vSR B&ȝ˝u;9 r,Tjm5B~fd yʝ"Qk;j̝<T&w(̽'q3er r*57b\94xS!'ܱ r;1W͂ʝNv .wdnrH;%R#Ayyy=NINAMrkY%wL(-)r;vfF)+($w k;JN; Z[1ǔ*gA&w͝ jΝkϝRajʝט;ɵ¹Α;V3LsGYϹS&\Jh{ v;YNy"w|ϝܩKɝd7^yfStT۹WZLܱ9rG!|KXf8+cCQn ;; ȝk28*r'2-4k:~-MT07ãnظ8{_1" c/emz]�8M>]vؿADDT-;šmg3\PzP$.fZTwIk~$Ӓk].ZӇ ʒJwDBs)ڵ+:ؼM$"""""""""+@Xl Gc2}mmCq~Gu벡$v (Jh ]DDDDDDDGYIK/M5:1ј;w.:NNry_RPPsڴi#Y޵kWﲌJ&5nqqqj]D$$$H<hڷ~ղe:f<hz} Fxxx}fcfxu֐d2wk\.GbbGSsMVE߾}k71aA(! ;_y[DD?_8:{1ydoFDDTg%ԁeR;!0ģ_8jAY#H;}!0>6l܈Rϓ'OG9s…?o """7!0b}֭ޝ?.׆EM رcc>*Y^1uZc`uGbΜ9㞒;6cDGcҥ{jk>�BCC%:ǏGͫ}M||<zǩF xXrˆK)=gwZưa<j[]5)ZjvCsQTO߾=coRkTL՝m׷GgozЈL`X4[tIk;jd{Tw>6 ( n�<א}FDDDDDDD^VR2rn~ |}}?zcw:d~GoFDDToߎ۷#** sg}#|?ydt ļy0|p:hZ,;gϞHMMK/O>JVK.źu%&&Ia�CBB`61cL( �> ͚!33i<h"##?qo~J^} �K/h4bO?aذq#nZǸvZg 'N\i\b9c5ksb8}}ńV1|r-.1=d5 rDGc^zaPTxp뭷 b`( Y\bѽ;&Nłfφxqt:|o mZf_ž}cAO?EVǏ?믿/3g'Ddd$ |)dff bp}2n#F@}i&GDD^zE|}Lt�0aAso߾[Qf6Idd-_A93}tfW^y۶mW_}%?,4ӦM gGUpU׮:p�ӫҮG4i~w�7端x:|r8`}x'!`Z1cL8g 8W^yN()88/"T*ۇy >O|jn#μycǎ4x0*ޙ7?Pc6l2k2T*NL&5DfLz f3y5CʜٳQTTGqLbsyB}YX,/]b_|\0nϟsh4YBr9MC&'^9gd`ǎh/`n޽%nV xg1=skkB-71cܹ둜Çx>Z3c:_9J Qn>-[ې%w~st&M�r Z,X�{qU*t:ēOkRQVZ"(ihduuz3ؾVxqgӈȻz(U<fN* 6�jOs' PTT;~ĵ¼ oIDDT{Q,_�p.5|]զ)wߍCh4wu6n܈nGEvТE �-V\޽{y1Ep 2:vZ{gݻw#44AA0 @XXXFÇ\1}Ann.^|E t2 Oqczo"55f͒饗_Fnn.x w�sN^]b֭Zl#G`̘1غmؼk׬;�;1gpX,.1S LipYh4;OM6a=`=o_z ֭m J4=eqNx,jDFlٲwuUV!++ zyyyxw\w�0rlܴ Jb[lm۰⧟ej Z ͚~_h֬j5:t耤$m۰qFKK7ߌK.ŭR8qz:u 2 ۶oGa4qɈEhhKLAAA<e ϟRǷoߎ]wKCCCq`~^zAR{W_}2ݍ]vaWԩSkv>G\fH=g"+sE`X0y\1FDD8 1n.=۱+Cףo߾.k18&1Z!{9s\b.kׯw71\0= qL8BBB?nCPyPo;ur/85ր;wbm$طOT5iLDD_`EHdLj__!'Gu<c}aCa rUf*FL؞ݻEZj*>X�%%%8wLd2̜1ǚ5k#@dm<3s&N&%aժU�8rkśګ6ܰhPVVcHIIAYYf3srhj&M*$cѣaXQȴX,(**dr3???j6c.1w\$%%wulq!Ѷ*=(ѣP(.1Fb6 ;$L:=PjJJJ`XT*]b[Qyy9 KL*k֬ᅬ?�???dgg�fo]vīr j j*M$۶mg>pׯ6pQШ(w WVkƥT7NjXZZfƐr坾vލgfDRRZK~Uau#/q~(,*B~~$q R}`.-EII L&V+v;,KƔ&oRϥ"//:NǃPPP�bԸcn~=|0f͚5D悂`0jĜc \.cU+i3p>#h4k|TTǤfM|||`Z*ຖW,.(Zm6Z-|}}t>rG|ʧ,Z9@K~9Z*PTXmkG�Si՞CL>Uj_[ؤGu33]a`*k"""""""@BPJ7>^;v 3fÏ<~�\~xqǝw"-- "dvDDDf޽;ڴi/��:l>kF#.\ BPlb�Tnd(,,đG1e<.w2jH9&l<h_{-d2223?`ԨQњlذڷǛoݎ͛7#.. ?�6c2m4t& &%&�y$muAλ�?>|8瞊q:R֬Yw}^XCLVwߍSMvyxnۆ^xÆ ÷Kw޸0|p'ODDD`~qKLLӧ#>>{/udW_u~Ȑ!h)q縀�d2Lk߿KݑjjEaaaEؤs"66{/|}}!zg%KsXw׆ 0mT5m#/q?\['Nă<~٥ A Ս3ZE~BCId!ůY||ڵh|w}\�C6v| b/q;~)\=p ֬]+f8kٲ%5 !!!xxzDFFÅ qsrr 320rDGG!?rQjn:/|;wy/b1gx}\kLӎ;SMfK~5`UjwѪeK}5mjDDD%`AԾ?)'<[J"۠X9GYtN�߈ڵk{DDD2eA\OعGwK.!+MLt4x,^رaSZX,y>£=B*(..vHd2j �d21;.f4w{q@2#G駟V~J^mbǤRhG~~~u //ORBXAcIZ- k]'iSbXv-�痘\.Bbu 5g}_KY3.@ƪ'3.RRS~i4X,:W:oc⥗_v$^1wkDMM)zfOct]>:_]'ίڜoI&A9l0uxN~#/?-~$/ EFFA$ߥ C`(]l.mݳcR%uu2d29rGQdB_�%^DQc87o7.S!"j\F\w֬]ц BBB y1jH(JXlZ5j~ш֭[c˖-n ]NJK?x*p5F]ZB41 IvIkm5m]==]uJ""""""+LKU&\Hʕnkeggsy'5ܙ?rΤ<v_ԓj]unK?}kxEPRk+"""""""""""2X&AԾ_Qr^Fht"� UDDDDDDDX(Tjn]Zt2}mW{щ]w:w[~PP _DDDDDDDX&exDDDDDDDDDDt3C&WʤmCK =Nod +!- """"""""""aIk1v^N/| vTPVՠ-"""""""jLy8{bADDDDDDDDDDWtXJKeRvE9]w @ޣeg!̱/"""""""jF4m """""""""+\`h4$tIkk{#=NW#; "��È s3plo7pYP!(vdz:߈f{ ݍ3Gw7h#жun]Bc#c?AԾf{o:݀WRcF5mMvo"""""""F /,vm\f.aLj_[ʱ():}Vo@xlK;Qvbϟ _DDDDDDDEĢ]Xn [CuC&n,_' ݌+^dB{$U9ʤǶDIALEyN7J,(kj�?V4`eK_?fM7Đn|o^ىԓeRڲӒQf*:}R_`?kp5 _DDDDDDDD7[{DDDDDDDDDDtk݆MIk R:^yBAY��;:|[< """""""""+ɽeRL%(/zTwndP*U]5hgQѴ5vS ּS?DƷ9ʤ)*d2 x ȕ AYA7�v_`FDDDDDDDޗv~dADDDDDDDDDDW= ʤɕ d eCm {XѐEDDDDDDD@XlK ADDDDDDDlvv\~./n{\_}).6TQZZBc{F.&r6ߩ95633KyqkL_}eRJK`+xTwnS4067`wQcrv3ƿV �xϱ} >&1wp[WA ۜIigbvc9Řܷ~,Zsw%pc}y+ǟj|QTTZznJ56au۰}W2}m(TGZJK{n}GaW{)DDDDDDDD׵iA\%wĒe;Āq9lƆ Daa)^z}9̥7)<i#�7zuoǞޟG~A _�#,#Z6W{KfXf>"~v,<hAʛ+`ۡQ+1k-ԗlA��)粡k#L&ZV^~a>dm ("#n^9�=ڶƸ1gdcނ_]n]$cקVQm;vOR6:w|Ɗ۱@2"1.1}x#J닐Ww<h|?]R>?NĪ;_C;cnqADྩͣ{K`X46&uMs1? ? %}@ ܼ,Y'4g8~LR` cێad7((43-hii{mvhg o9E(+[@2�ŰXѱCS>?qkAM%MV0 ? YY/ks&";o ri"hsAI0nM56;nZBZz.F]NE산gէ2}mRZQuz<-e !S/"""""""jrҒMDDDDDDDD͎UwbKGѨgi۰iAV}X߸ii9ZqD|vKЫlbSҒ³s`̍=%Ѣy$תͧN4k<>[ �|&sgf}c`6H:Rgxx ̬H;u(}o=x+gf##3E&>[FDq8p(ťUkvb޸.Ƽbfmq1ﶁh:L�i} '˚0- '7mqUL6Vmqv8L<eV;܊R`1\_w``6x o W#>. %%fiK QPXSi�ۏacc7Ġժ1i|\%_|EO>|㑲7&S=[ݎGϢ،& :*f三cLL-#pX*Vށ AfIqnsb\?*7]fߋ,(ZGu<9GPvV:(tzADDDDDDDtl6 �@Q̂}֣SǦX ԣU꜉0��;A.A&Թi]9ر ^CwlG ժͅE&uj(rX,VGy��\�|jըQ9&:zE&L8�Mc0_REwjU4QnUT\ }e}5`+x}X�܆<G5c3@bCPVfu)/ݻ6{;a_3/ A \rED�TJl6 &_ =�@Th.-Cޭ0ߧKUXTdr'6&~~>}oi,]:jCqq)z-Z�?_d2|*LTLb!5Pb2TF V%ZqskRd2ʝ߇A[D|k>TP&=():݀g7"p7vL.i"k$""""""UAV """""""hJ%wܷˆa]ժѳ{ |d ,Z [7as~~�\~{_mecc�ϿބUkvUΝ0c714OCg1ot&nsĆ8w?_†?n7~ĪջXr;;�Z=Zbo{ju{ ~�iB!苗 yxWegp\6%c`ym23]4 +Ķ1ymWߴ|'z�зW+ص'3wko(~5'Dז㽅%^M1IQ]Eëoplsq~ M8vmck5!HK'_RG%U]Uq׻wWd*Cfv|+X6a{Q|8~"e1Iuƻ W/7Hn7&vmb-Xr;�`ӟjG=g?eRQݲظ8G度GPdrG��㈈ڵk{DDD lĮ{)t5{C&JXʡR)}lR)BQA$f,ƜgBQ96` hj-\.lFtl6;f ||ݧjV N#yy?Mh\;SKM1J$5&SYq`WWY*͍άrd2vX,PG?/OvT7n5,?im^;{<nF=CAAA=-ߥ,Eg#b2}mMQug@^ BcZ 4W:(?Iv3.M^Qm6'j`滪=T*&n*2x)�|M\Sa;~TLRZS Ƹje72w�p븾5ΕƭcPqp jU;�gpAԾFQݞvne.]�Ԁ]EDDDDDDD7�1~ꐷBDDDDDDDDu. neI1WW5 -näF/8ưd;(׶k2 s=N_EĢ BՐEDDDDDDD@iq!ғxDDDDDDDDDDt+Bf)AԾފX xY犏ey(h"""""""F@CPg """"""""""k> IksG:_!1oh"""""""RfFa.(. �*o7Cd:ݚETAԾc ː~PQ>|}b.i"""""""BPAv3j{ t EFjM � *Lj_o_rGuuxpL&W4d_Q#afDDDDDDDDM2T[Z2c`/ ʤ 9X-ROuu/!g@.DvVWDDDDDDDDDDDt 6l xR~dweCb[b'es CKDDDDDDtR(Z"""""""""".Z (6tғmYu̔ظtЀ]EDDDDDDĎ ֭yitHhr+*@ffADDDDDDDDTEق2}mGYiGu&hw}(/j$""""""˕Gcx,N(h4lyyDnaLADDDDDDDDH()طgO>Zt^NZ2JP�:wA;gH(v󈈈 Q[EP&m`*ny]64 4 $(IMBNjRvyщ """"""""""G ,Lj_[7! 4ʣxi8/�܌s aDDDDDDD}9HADDDDDDDDDDW).wv_PQuz<P$vZPvr?No#"""""""3EAn]#"MAԾĮW70ԣt^Q~6#(i1-4dQ#jm삟WO999E(--s)/.6c)b" م�*kzznt\23aI[32wiVGYq5""""""""?s voIkK:=N7|ӼQ[t`k5 aM꛽&4o?ݱhW b܆ ~E3?֪oS{P/kw؉4r{ۧ8߇c:[?OG]"|xEXgbv�c֣5ӹ{iI[K|Mi98ta^.X%%:'""""""""DķAneRbw7uB' ׼S?�-?7TQ#v[,kss_Q^n=S!lf joO)Y<=mn3.gGPc惘8/BC [+@2>{3OxO|^f9<,�/ MSŇCqq)nIX_h4*[e{ o�xbbX,ء)n+VnǾɈĔ;c{㽅qÈnx`ۡQ+1k-ɮ=IzNDv8t,Zz<HsHNɬU3üA^~1lA b:v< Z\Uم ¨]ʛ+1ÒeBQ{c鲿=Pm\_?Ysݣz\(Q!\.Èkb`6.1}z\}~lra㶁xؽKqk!4 -7r9'pm?GȈ rK-գnSCd Vy ~AVv!uM2'6q?/4Z2 1.sMsLM8sǦ�gf/bEPL<zr}N>?v<M0n1h{Qjf �Xz1|h'tдVk s#2}mGQZ\Quz<VAّȿÈ4E6Ő;`Mbvnv<pd:z��db`6x{`0h]}~L6s�gf/s9h*Zݻ5wlZ�u1xl4~Ff'f bB*{C.rGtCL {8|,X~O��8t2or I]l&}6t�tF<`(fb=p.1%6#˜zHnoW%ǟӻ W#>. %%fiw@mG滣RQfa.1VT }6˿.1?&6r;^|nM Niw E-pkQ^n{FXq?Trl6;22QXdZ'櫷c̍=\bHhQvAxX VމUkvb޸ 5H:�-DgP6q( �Ꚁ`-�cRڜ[qP ,+6uodHx1tPdf��WuIiù.YL.<H}ma1Piu]w+Q)(kk8�`e aDDDDDDD})'qZzz5P(dXqmUht9_-+6d2A}K9;c'PXhBh?f?3rvl NsQmؘP]ѽksj#4*�QCTb)BQF Ud29a={ L��Ah5j8mbZPaUlX,--Z^q<ZTb)Ub*o2 +VmdžM}׹F&f|ii-~l4Zm.1Kзw+ ~z�fs` b%YPP�)rDAZnsOXVfFtW#`+zF?;ṗ¢GYq/?=ڴi(*.^^_44/(v;nw9%&*(++Z��h5jKR@Zme2NC @HyԁmH>CP&(?Gu :l+ _DDDDDDDŶIOCv'_na� VlCMѱ}SIJoǮ77y 5srLw~g1e=9N&K)3f}Hkb}?֣ꇷ]Uq׻wWd*Cfv|+X6agp\6�QMxf>rVO>V �0oi!\եѥ[Fa߇tnc+.6cg둗W@ɘڵ7K`.hThTzK͖/76Lrc1e�<8&Νq Z5Fў7qLFrp5� 8IIx_ժѳ{ |d ,Z &8�{3\o~hӸ0V0lPGp >7�@jj/X}O㋯�PqWqAq.([֣qoZbcB_x4n}{‚Ekq|?u.l@^?bמ܀\'""""""""r֬co5YP&M3@PyT,6.;j8}q�4tkv3'A&n+wi4lYw&5d*Vr㝷Ԧ%%ZUOl⍗'AQ:>l]fxm_oCR\R,rlv䮍b6X,j]VXXeO2hZ(x.V(jqO"j-\.k[$2]:5vbtfgB!'_/]ua^""""""")v3ad2 t}m {QSGvXA˽iDDDDDDD]M[XZbP75in[le.}F7k|W=b(PT)LSŏ4V61J8\q 7){N㣮qly&Sg'Tƍ>54�b:ʤYϮN7)J|eDDDDDDDu>(~[<͸upQ(0nFRѥS3tۡI:/:MP&G ³-uuZfFA{YӠEDDDDDDDCht:kxM!"""""""""+XӶLj_[Anefg>}t0F Zt-^ݐEDDDDDDD@ֹS_fyCʑؽqLj_1"jGu"''N!t6o7pۣ]2}mGPZ\QuZ?;}6��mN#"""""""8� yit E o7.gS""""""""jOBvjLj_[tb'TWt^Q~6NKPrlwC5~p6[~\(3n]&ڵk{DDDDDDDDDt NDpd<v~ĥ=c:}_PZ]5DPm(ѝ """"""""""eCeRZ]5~Aa]wL?e9ސ}EDDDDDDD?MDƙcn ]B` CvڅJk(nE@@u&4NQ$=||{+,, nQ d0缷BQ0BA@h VV(+-Ftb' s׶; ӑбr �eC}P]QZ\&ZfFXl v#R z iRcdSm6ǶM(BQnu)he rϧY(96`*CT(+5!iKmn rM`/>z?áTk`d@XLsX-elBĴꊢ,ķ논sH2"NQm{ -:Qn $*raPi|_/0ja1J܊6(+-Bt()AӶ=!'-]"/#Bq^bZu�MbFhL"d2 ("*p} ! j=B@P!I<rǵԄ`*G\n(9}sSAanZ_SQ>4�r\mlZ! }lVgp*5qݎѤy{ U(DQǹ S?fG\()EtbG ik۬j\h:C ~ư>LF7GR1%Enوo Yh޹?r �gi(FL.0!2 V BC�<*~0 \DpT3ʭhBsj\%r'b\/*wZbvʝ65Nnǹ̝z̝q ;2!͝YsΝzq;e&DNrrMlS1;rš1I6w4ل܉]M@IAKNhrT15N|^(˪:ʝ0!MwH)RZkEb;!:rG"0)wƵ1-;ICv=QRP1s'0,Jp=_׹Hr'J^sGoSEN[X-e;+%slNŸ^l )Zp=͝LĴft\;!Mq0wPy=Qiީ? W1:] sq=!;iZ;܉1w.>w\[}#B;WNqQ(u!wU\Nb}|PmDJNAV: rZ(/ˣ1NոVNHlK"2w:ENmsGp-IrrM&:NOeGr'r%C\bȝd$vNgK%sh UN;_ 0PxY}mGMAAyܩG椝_g"?+[}GDDDDDDD^͠Ā[?4 ~A?y&timR 2=J[vL.GlnA] W**B#,:A3 g?McX |0F6GШ4ZŴBBd֐刌o\PJ!Q͠Z?£ D`HCgoP8 !ψh!M*>34: 3 DƷL&CD6+T 49TZ�D\a p !�8hu7JGhTs(Uǵ\@dӶLȦm!W( QPiVg1<>�DAop$ a `DCXh0F6GP5mQod}P(Ѵ5*Bc I3ht#G`X4FDߠ0 t cDSG+5Z$BR#"¸dPVJEHTBŸF6ư~pC  FAWRi|x 46P(Ti J>}신|0"CP(#W_c"82j͡Pk*VѬ I|;JǵJFXt"TZ7iAns'0D;iYMr#wt U/:wɝsG+U;jX;AUSAarG;JD4m]ChNhZ#ȝϔN܉s;1!ʝrGY;ʪ.w5N Suy&_aܑBDWwމO;F B`X0wĹӪi D%rm4J>w«r'9w|]r%wnrG[J%"/>V4ҹcG`XtAXS!("Q#w$r(wt"i ϝ�GE7P;! %"&wɝ& u^2w]sGAy;Z \;m zasm4iڮr'zQ|jD%@s8<N;NtAHrG8G5ȝZNrGȝjs'"wBDX;FjrGrGsΝqus;2Qi ȝHGT] r/;-#_ȝȦG:r_"w*s'(<V;ιDr9Z=B$rGȝP7_}6w*)w_ET; DPq$̝Ni&wY&D fSi0RӴ }%ʝXu8w着c]ȝ r')w*kDT!$Yſc%sG^C48g sgDPh#w4>Q#<K(ʊs~u[;!H;5N wd;ƪ9w.H:w.Q1Aa88N8wD;;j-BC] ^;;MÐ۞ ?8AԾ~7"buV8FeGY\n�7pkv37"49NemVbׁ8c$""""""P>KPTAۡԋЊMsIk3gӏH?}u2RaÒweCDDDDDDDS0xtIt)kA{yDDDDDDDDDiq؇݌z5 ʤmX2RyTwn ka?-(SP _DDDDDDD[a6ytH?uȥGѼyso7؜9s0榛��:uU iFk׮߯e 5..Zmߋy:.r~; Be\AAAuC&k׮0.ǤH!I,!!ǭ1k۶Nf.k=,4]tc:cNܹhҤIDDD~|񊷛Qo2KeRچ4ZyTw55 V}nn5`wQc + LD4sHOOwܷo_,\ojǍç|.쾰#"D5ie˗#11ϝa. G{{бcz}TӦMט|:1c0|:K1g\<ܴUӹV1lذ:kkhh(|Asc1sƌZץK|ǘ k=nѣѯocV_xy 4.ǤH!Iw^^ۣ<_߯f=>#oڴyݚX}|}}o#&&qA|VSwlFhhhDDDMfL\&(׶瑚tУuЈuX\EDDDDDDDLRv32tkn4 > 87#9$$dž pۭɧvXDDƱcpϽO>[G~H5&Oݺ7o]V}`xCTjbҥXnD>i6l��?n łw{)))x�}15Cff&1x DFF"** %%%8~z-A* * ?Nx`4⧟zjlظv[c\v3zꅉ'BP`ڴi.1͜1͚5ܹs`>}Z}bP՘?>n{Y?@rr2Fky9bݎu^0axT*<C[1^ǽ݇vԣ{wL8/̞ <t߬ڴng/}V'~VZ ?~_=͛_z 3fSO>H <S+ xn,<о=�#F@}iӦh 8W^ye\.im3{6**}14x0*ޙ7EEx' b&!q[wX|9 8怀�<㈈K/<v\Ǐw�<;w.nz$''cxRw>ڵK0�[n^ `}{t.kk֮q{oGv퐔�'#�6 ֌SOoE~~>{Q<nIl„ ߿?6nXSf̜^|>MVZ!3+ gvY1qDaƌ(++/!55UOcnIF n^Ǣ?Dzz:5e]AAAks ),,ag9O>㏱f|l˚ &>P(kȋs $$f3f΄BUXXf=T*5k???>w.r96n܈oe-<x Lx#"%!tQor% 﫥< ;/Ex瓏bWse"k$""""""U %En]&{jZ]1JɄb �%χ`׌&<ض};�\j*C._߾rо=z=F#q]waƍpQk-Z��ʕ+ѻwo:;H /Xn:vZ{gݻw#44AA0 @XX~W:|\ӧrss/BPsΐdt;7 8UaCK/\<.�`ΝXz5rssq7ԭ[7lG1cu6y3֮YSw�pםwb3aX\b G3gΠ{.1M6 gϞFcqIشisvكoiiix񥗰n:vPTHKKSt�DDFVDlق; YYY.1|ؽgڵk:λVBVVT6kd"((e\1cs }8?\wu0a.][H>R<nRۜwyɵ|�QQQ8pRDC.#,, h4 )S0|�;vļqۤI.1ڥ[qq? deea3`Ϟ=.sOskءÇq7c̘18Tqo _.G?F]k&'DvVR8q>)qs2 wOX( k8sQo3g�S~~>1y9%;bd.!p"?qC qq(((W_:br^f1z:DD԰b[bȭOxRV PP&mWsq>Guy0%y ]DDDDDDD5Z{t8s\|Æ 6u*F 6ѹsg]g�2d{Y/��$vi'acm$ :�p>=G|JByf' ]*7i4a={6RRRPVVٌh4ZyCʻ7=cihX,hjǣ- `2$7Lݎ@L&X,N_T]Uwbr6w\$%%wulNr!Ѷ*=(ѣP(.1FbM6 ;Q%*X,(JO>BĤR*fXCvv6�l6;.صk~Gk.ʠVVR^x`Զm$=, ???;bbZaQfH>TTLbRSNJJJPj2Iq0m6ӫ}sжm[6 ZVoZZl6v\"B[M~:ϵK7F;W5U$"&^3~k={e.jĪQW?&QQXo$9R14NU׹; Cպ]3#R-܂^zUۯ\�]c2Ͱ3NkM PTTK>_ 4ƎŶ[w^˫ǚ7:_dǦv3Fg?XP&#$:x^S'}Bg]i̦䤟v32/Y͸?/ă=;.?W_k֬ApdSD4kDan'!"2t,{^yÆsh4b…Xp! RS())M�8r(L|J :5r$FYX �7t4ï2 0j(Lrz^M6l؀7ހn͛|xݞݻ1F)ӦMCǎa2`2$cy$muAλ�?>|8瞊q:R֬Yw}^XCLVwߍSMvyxnۆ^xÆ ÷Kw޸0|p'ODDD`~.**jŤnZFAA SyOG||<^t j>Jⱽq(e˖x~,駟v?`i%-5nVqK999!!!xW�Zvl{ヒk؁Evqn\<x0fU>Xx]p$"nxZʂr,j3N k0��{14D^n5k8 ObTL5d,6n q8�nmNRR �ڵ9|pc#8!2 3gf͚K>_wy#rN'C,118Q$FMv3ꍩ0geRcdڲظ8GAhtsu6,}Q�I?FDDD֮];߿ ""VPx :5_y)t5.&]]Z$4Eq gelvhDD$_ݻlr XVZzX,yܶOG3Xv3Q\\әNd?"2 >w+m Fݟ.`p}:(((sq|վ_R9T1T*h4A; //ORBnsRz=g}￿R1&*HHHk-[f4nuŹ5 :d24M{]枻p^3jڎSΝCa=8rQ.׷y.b.MOcڬ5K]'kӆKkc(K=_i4l6X,Gx-8t ƏǼqً[BCCf \w*:@gy;zsLj_cAFZ]Z=Q��#"""O<""jz?4An ]n~|C2^7tHJJvS.+!!!vl!`ԨQ~ш&#Xnåtwc޽غq MquXvG=p5Fq 6-{ۡ C@0z?dp"-0,Y(+fsE@@uh1 gtY(φT!""" ?Q DNrtBTz!==Nm)));]=ZL&l۾@;ws qqnz&򢆼%Qm]-eNEIq~Lj_UCǡ07ã~eCr3]tפY;4iK]GDDDDDDDR#NT;]&] h^yGsIH:Lj_۱]PQuOeg#; @ L{@DDDDDDDDt*郍!4Zt((׺;A]J q>AYv=Ѵ]φ/"""""""jΟŮߗzthީ@DDDDDDDDtGTB{o7ޤ%ġmkeRΞ؇| xZaewoݛE{t8sd@DDDDDDDDt*-)FFqo7D%v@ ʤE7Vg:݀Wf6!7󬠬UhmpC5Y環n]&b""""""""+JE@hQoށOlזyefGu<J QPv_p_nAv32yM """"""""b[Pfԛ=c$AԾ6JڣuP[ełG�v_`FDDDDDDDޗ~|񲷛A @DDDDDDDDtŒ+hunF9g )(VVZ [գtd2e›]C5uxpBM """"""""bfv3MbosIkLQuO.W@:�;7]INOxt(3""""""""+njv3ݛqr_2}mJ2£tR|Aپ-?7hgQo¯e7 M """"""""b)*݌z߮7"–:ʤZQr^Z1\Pֺ5h㚆/"""""""j2SNb{tN=&]R{&v72}mp5Z xfS D,=sАEDDDDDDD@pdz͠DdB;o7芥#8Qo[tB7 ʤeTQuOEDւ}бOC59S\:IvXH=uͨ7'c߫eR"VQu0g>no"""""""F $v32!nK]݌z -,(vyTwn3ѬC_AYTjޱz8uA=&]pbo7d=5�Gu ,A:؀EDDDDDDD!0 xtvmVwV͚5C˖-3F#6M<}*s=0+~ۣGVZO`0o߾~}MF#xqL8QP͵D˘/^&[n.txqDGGK'njAddW>{=^-Z@h4"i17R.<ͿX;uӧ1HܵRb Fppp8ҹS'x .]cLz7lذ_5UWG~euq~k-Z\{Ǐ722wBBB\]: qh}Pt:ZThǿj"u _k}ȑy̘Z*gu.]ahmQom%wԾ#CavGu<{,$*!Q _DDDDDDDmn]&zW^1BK!CիhЧOz雯F׮ugŒ3ꥯ. <!_O.mӦz:qםwY[#""0em߯Z>i><otMs]ϵ޻Gt. v튎;VK%5NbݺuCxxx\re! >ܫo։ܹxWݾ]vIb35q>_lfng|)1=x?b/ :6k¥_uνX'￿{sMP(б#(so7x wqƌc5  "" Ŭ')w}m۶Ƀ `umx7<$u _գ<߿qA|V"ѕ./3ͨ2}2}m^VeCsϟŎKDeլ=Ғxg|roͫSn.W_E6mr,̘1=w\.dž֭[*f�@&aMxMn </�'t|ig!993g̀ZCxڷlFaX��o%%%0o<zAaчlތ7|s_?,_^z-A F�k1}hYHNN}/9LGByy9/^޽{ b<e ϛ=z)))/:W\#G[oƎf#>ɓ' b믡!pԩquǣOϘӧO㣏>#O><~} l+ॗ^Mc`_ 3y{İ|rhj`>@tTc~`_~gfӧkxܲ1-X�/T|!ܹsgr|(50er9sXѢEq{ɧbӗmڵ+qǸ>c8rh:|p|_cܹ#%%7fΘ\tl۾]0׀dVĒ%KcA=`曗4n}m!жm[4̽on٢]tE_h0Lxӊx'0j'-BDD| A._ <,}7PZZ17TjJb, tL&|! pA>pP(//Gvv6[L> {K/2܍x & cǍsYkFdd$9j? ,l\㸈YV 8(((\ca0jJG5AL|\x\.|&&O߳gO̜16 ݮ Zk݋g{e-G1g6;_II;Vi9xska!ʫqk!Cm~Ws/??:uPuuÇ㮻Jr_~ꩊs\J&Q*ym޻"..eee?>~aAL6m{_-6}5nfM$qΝx!q<.1UwuF-T{:Xj2 &8%ȟ{VfnT|yUuW<h`ݜ3.sM8]} kzr 7nmԩ`/^ B^qM|Nvwx0%%%t.oQ7mk?l6^36 O>[5nff%[vvW\ ݎ: 44<`y:sF~ OSYfDtM+')smk&M'|_O_;\1ܜ8a#>XqǪ5Cuh4T8s+~ Vā0{uq5^;cҋ/BTjH1?qBp_{)x.렘x YP*(,*]枧G}}RD\.\/[\4f lk\qt:NDâѮH͛nJ GPx42SN8ʤXE]w E'( _gg6#qo7.>zA>'66-qر Eǎ鐕#Gb֭hժcCV޽Q^^"ᅭwp"�T*:}}9nz\=p V+>ci |t:hj({YXVXV4ۤI{\' w}7I<]˖-syO>}W^}%%.1MnL&yE/oߎ]v#FpiԩERRpAڵV�oO>%FR/Νĉ]b[Պ~;N ł#GbG8mTl6deeQ\kZ5�_29-cܹs.1lٲB`` FP2vc=ދ"hZ�F8a˸ctQ<sT`0ؼe ѣGc͚58r(_N6I=˹;vob9;�j8t�*v;ƍsHεIIO0|pߙ7O0.uL&'OB̘9Yf-_:t#`2pu&IlwUd226moVn֭#GO>Fٳ;?1 �Rp1AբcǍC۶m{5x7jtf}غu+n;l2ݍfL&�TvWŔł!!!:eM$V+q…8<F l۶ RSѡC�µ<//m=w=nz%~~HMMB#G$nmyiZ!Go#GT0aك5kb(_5ӵ͛gd2 ܝsi۶-+s|ϻĨjaXSO!11%x#\xRc1k,Lە8_UuWRsM<n#^Cz聻NEQa!�ɵݙs;?LqxwkUW_}cǎaرnq/uj㈑#kEEE.sO̓u.;;7v,ztտvk\svJHH^URstʧwY#TL5SsnYYcMZ#Zl?(ɝ\\NX19_ǩ6(^k\.q㠐.|obΝغmNr]/^=Qjn[UNil]Qo ,(!("֣t^ֹ$la9(i"""""""F@" 4++M ky _W%d2nXf ϜfL&C$IIJIq1,]0qDL8P*8^_Vy8!FѠbAVv6� 00((,t+Ns3g\;{ddd'D-|/+c dÇ믿:ʝ7@>H-p9?R\.ǩSPZZ F\.ǡC~zlt:T5sRRK:ի][-e2(U _<i4?QRR,A[l#55/wit2~~~nǭdJZAaa!J%_:n6[yP^/U7|Mahݺ@V 6f̙3slFnNT*g8ϵK7Z;Tl2T}NLfm_vL0Ʃ\1 'Of8%AOvV`[,C&!<<%Ʃ:'e0ܮ* iii())AZZ\wuWGMRksLEEEl>q:Gx2~1Ն'+qmފm|z#g6I;J긻qrnt*jL&bq9Wymjswh"�^ǹT8yMpT~[ܭ'L@aQˡP(\brw &`qk4l6 )o���IDAT)I22Nw;t),4TpwQsUjmL&={$"nJgV\BŤV^^Zoɘsu|<הJ%r9srPVVVXUߥT5 w{+:n: 6 ZE3Ӿ}b O<DE9[ęxn:Ӯݻ%=uS* p=: RkuB.6v2x7W+VhK]#^ݱ(..M.|%&mrs|8M{.FJ1\P&m u.ɓv^hLs ::EHDDDDDDDrK(j{r˾˾={fòᅦL&þ}=r( 1`� 2 sfFΝxUVcݘ~ܩj5 pQozBp/qqxg?ŋD� ''_-^z ͛7\.G^^dLgϝã<Yf?++  iƍPT~ƱGѶ];|�*׻wjx!|Xldry1V}8gϞ8p ZjoM4%Ku_Exx8 nݻ?v8Z-fت٘R_߾d B?,_.x,^ǔ)Sp͆ӧu}q(iرx駡j/Q(زe n&tYrCͷK۩ӧVҥvisRR4 |-bѫW/HLDHpd]Ə}|x'Ym?:ϵ|{G{nɘڥ�8WU6nX̙=ۥ5Cʁŋj)--Ųw}݇( Ǘ& -]ѣG#55bcc1Ij]˗#??_|KL5SMd2Rϝsf^G%Kp=Eqi߾=w&r9~W;v rڵ9&VlxuK=_vSg<JMKVEǎ㼖7o\2-vsw8@Ν_'qKKnmY<ǣk׮P(ط?F\w&v'�ք;vb5/VZZ.; 9� AI(**²/tGd} \|\?E|%~ �XRkx1I 5$)) _~%moM6ݞ{n;dIIcW_~@۶m]W�}hӦ 6H\KڥTR^od~2t:>}VکUWaĈ0 ;J`.-uotΧqq.kxݔ6hMnw+qv Fbb"z)B?fJJrs URE|<"d՜WkHտUt>>ؼy%�@t"R1:ϺwrJ2߾}5R ʤ 0Bc{T,6.VWLBr녿lVqԓ߈ڵk{DDD3!*#m[e`+euuYY0LHHHs琝cHND -=1())AqI :Τꏉv|II nv⫯ƾ}ЪU+ԩS�:l6Ky,+;ˀ\Z#Gh4I&8q:1ѵQh4Yf8y$]beu ܕ*+;>>>CrrcSS9zcU;mڴR޽{1DG#+;Fq\1U_Vcݎcccxs1 áC|iӦ0 ѣ6TehDtt4r}Ryswݻ2.%%.1:@-i|:'&Cѽ;vكW^yEq3 ls|:%&:!8|0� 11&c.9<׊KJZ}9>J՝dڥ[II F=T\%m3)).kXUWnۨ0x`yxgGUs1$$8|#/7Wr=Zy] FBBFヒcǎ99ڌ�A.9z-[p5(5u:cn瘪WKu:RW:N0nRuXv;*kTsMոf]i֌Iovƪ58v9:dBQq1 z}!@5jEqQΤ 66tjm)FX 5n5:-Z@vVlvdLι?k|wm|:uJ0�l4"r9z%&뿓w^rUvq9X#?9u1b``pY˝c�r 7@aРA;w.o6K[UYYn]6m@RI|_5ת@� $q/u1JqSjyJj'q###1t=�\ڷo\={8�s8YVhp^#^{5)qskx_Gݵx=p&69&(歪::R</_ѢE=gRRRkgRRk%ck5Fjj.^Pddd\r=DuR٬-  v("$8fg}m rZ]"E!™56.7Qc87o7. JG{s1X|rYѣ8x3g7~[&Kխ[7L<'NĻ˻@\!b?ħ}��ڷk!C7vS(<_yG}E::t?4 nN0ÆŚkm]1|p\ k֬vs�pw~=W x]d2drld$$|‘/GԾQ^Žuz׭n'W@Rb.uE �H9{=HDDDt~!MDDWC@0"? Lye>zz;DDDDDDDq5F62hCƈXB|xLj_Jbٻ}ozBz.EAXP˱ػ{XQ'( "" PBze@&dtyso&k޵feokuU>YcgoQVRj����]f@3cW�����k kvҒg̎`\=gk;vEDwolGسC}ܘk�����RfČ[^_l3F3?h������rww׶0Xa$ݕ+uTgiOA 7PW}96Qgkjs�����@声핼iQ |}uj �����MW_~ο<%y pc4`Go6dڰ̢ۡIۣU?fG)(< �����(Own2;4;�����1M1@ Ҁ3͎` rҕgq6Vr5CZȳ }ەo?�����4W~h&~#�������-Vn>m1L@hkjP{ kmmJS V1qjט�����Lm_h&q������?$Rnvs E{VjW4vhoP:iݶN{k�����MH ov 4k}mv������*ж5j:)ߠPvh^q^v'4Ԣ Pt^����� دK3;O3;������b+@c4IJZfmwJe5C<}ԦCsڹ\/�����ESq|������0Ovl0;Fiݡ2P֦C<}ۡ xe%EطPw:ݘ�����Z1L������@嫰͎`l]u5leۮ"vhCjI1 �����4m;hĴ̎f"c6#�������-VyY2D Pq3 5[}mmim(WQC')~\/�����%oO5; VfG������&k KXhO֠qy),,_Ç|m۶ >4}n 6;FٵqV3ޱV_[Q~*ۡ x..r2,FkӘ�����Vqp}f@3QV\`v�����=[sO'N+.\=wǯ`4|GѴ>n9L6Mm۶w9۷]VsG 24/U*/+6;F{ufK..vȠVIVY ~cfHV< �����4;7i۳͎fINfG������ҨQt-Y7nÏ<7xCmUUV6M<YwߩDw^{UEFFPLŢ. 2DUZh^z%CÍk ~֭[K˒`x~~t=]6nܨﻯ篿Zo^Pg޾>>JXqFuz'խ[7/7߬Y.ZȈǝ$=Zm۶=c_+WGU^^$n2{~䑚9'%%o=cs=g tRGubm[PfvbJeeښEh"����@Kۍ+ܽ|̎������%OOOUTTλRΝu\W]uF ^|Q7mիkV;|k׮TXX(OOO<XW]} Q'q'MwyG̜k 4u:?uhUVVo뚫Vuu23353uѬYΝ;䧀:c̹}Ν;ɓ&[4y\'Cuu۷O\p t$%ǡ>ԞC9wY!!!9|Wf�]\ivөH ?jCV_[EYUUv+๸?Pv(rZ�����Z$-YcN3;�����p UUVJ+YV99ʖeZ\:RG?쬂UTT+6lܨ<y{{yW_ 7ܠ .@qqqVzz6lؠrEDDD7oVQ  ժ͛7kڒ={:vڥRyxxpNG߇s͛ksx)))I(WqA1 ˕yf?P.nv+U*7sϟϟu�����vԈiיDXfG������ȍ5o<EGG>Rjj$ikRzw5f{O>>>+u%y|Ν*"KJJkԩZa&q.5KK-^} 5|EFFjԨQ8h>3Gnnn5jb[Xsޒ5Jƍi<<Dۚann�O4p>úQs=q)++>B0B[Dw~7lfWEY]c;E{c h=iϟw nXO�� ڰa1��8&7wy '(h:j�����мx{{+4$DYYjN[6mh*..$Ek'ooomIJR.]j3eEkW3^FfBC ֘1cSOmjNRtt|}}i&ύSvvvU/<"B*..VHHbbbԡX_}zKN`:w|عS!!!TvZsVfVBCBTT\|9=///<v{߇={lo111JNNVfff9ߥy*u$5{* Gn*Ϯk?|XL9i{=C|;6Լ%Iŵ���4u:)͎f`¥kq�����6sL6~~\@}ٿ/Y;^P_+,.-82Z{?2{* "`?~\SֺC夥0c:2bK -�����-Jn>[2h&\�����'O?T~1Nq~74;F9{Ӓ 5[}mqUVRhW#dj =i϶uh�����\!6tc3z������f=z$ig8!ߠ0u3 &muf^mTimPA/[tSn^����� (ɨz������65Km6}3]"?~ۭ[o5;>P#? &@R2ZEk6tD5CoA_kLƾ퍹V�����RT�HN2; O?s1������ռE5~jh"?܌sԦ}bcc 5QS&j/AVpD2睊k[dsۡW h?\/�����(u&c'͎������`oέi;|Z夥hOdg(cV_[q+(]c;/;uV$gdPA\/�����xxy+M{c|#fG�������ZV22c4o:uV$vж4buGp#.�����h Jjv 4_x������Lw[ -cv-Uc4jFLNm;5CҒj×1 �����4n 4; ~������Me^jv@]4̎`<<`k[JKjmk gս1 �����4UU(+5;w������M»gv@v%j5;FTeefm¥Ul]c;/u&{{I�����ĕiv�����&+ wפ+2;Fޞԝס xq:{ rUU7����Uf@3l����� q<ὓ xήnrs4l~ɽ4 xi˧j޾m�����M@eE͎f0;�����݆3&Nԍ7ܠ|sۭ=pѝ5v9(-VIAfOWZ6vh^X1C8?/����h=h&~v#������e:sP]{?~BBB4쳏;GyNg{項ܻCK~ _~ᆚӮQXvd1}C/$R~!\�����)(-)Tf@31͎������`O.ЦDUTTD̝+Iz5vG7ڽ[MwhZ[hK͎`sbkcNMklWG hC&j/r����@s6wZ͎������`W~/ZȀM9i{9fh0~ R-GlJS?.wr3RnwZX kӱ �����(/[Wȩך������hZ)fh0oFCV_ۺ)7#ծڀ ݉Jݝؘ������ߠ0u3h&V������+?+Mdv 5[}mq?$ܮڀWj:RNs�����@u@+~4;#6;������bcfh0{whe떪07ˮڀ:w'ݛj�����M@`X yfG�������Zl%oYevU]5lEu/o@vh^iQRwm2:=5r���� '-E1Lbv������ P͎`ؠjRwmRiQ]c;[j[U[1 �����4c5tf@3oz#�������-VYI24;Fiۥjk m^^vȠeJ5Ժ >]f׍`�����|{뷯^1;6̎�������Xn ievinYckJUyY]c;ͽ=p/1 �����4]o9JxkQ d������h*Ukv>~Z߾_MV__\ۡ xU,/3&IZF[0�����`5G̎f������@"Wwc4mk~K 5[}mekl6jUPZ˗V�����hվ;O3; 'g'#�������-]~#զ}}RMV_[ZZۡ x.r0rQS%Ik~����̎f(������@U]Ubc4ki? 5[}m>rvΡ x*26Ш�����=j~|Qmmv������rqsO@1Ll!Ӳoߨk+ReE]c;;2jq+n\/�����dۡs_7;mfG���'Cjf����R5;FI^f-0=ۡ x%JktۚEڶfQc�����h[hD.}̎���NbguN?tc����Mv2;Fi׹zbkK߻M%v[zMڻumM}ϡMh5�����&Iۣ uK͎���O?D>>>rrrUW_ki*))M7߬(bQuuVuV1E~ PRRnv}~t㍆��YiaXov&eakkӡJ rTR[zlNPK޼JɛW5�����V)~ ݇L0;��h\]]j߾} 43+##C^r$jjٺmuV-YTGEfO;wTΝ"IZr9\r)6���NV> &":=P׶;Oe5CN}F)-9ֶcOIҖ~i5�����&J?_4;��hœk.C...ڱc)IrrrҚk9F^~JKJ`hڼy$C˖-Sqq<��� s2}bc4̽;TfkgJ =Cu@+MݽE4�����caf@31dҥfG���̀$iz-pqqgsMFҸq㔕%IZ%阏���'+u;Rv]jWvcuTv3/:.Iھvic��I->>^6l0;��믠h 'ڦ248��Ek̬,XYYYٳrsrg$k.ڒdkB[){($$D111JNNVfffkN��&^xvgO`KW.4;Ks_2S͞J oSlzڸ|lm\הE����� Pn4^Nn}ؕf���M&Cq~zs|'p2Fq;���?L-4p54k[5CoA&VCϼP _pxc�����hKh&^#�������-VZ;fh0%9gkz ikmس]}QsURۈ�����WOGČ[^S 駝|S_}�����VX5̎`<}jkWg]c;/"^x-wOF\.�����TUV(h&>yxp]wժU+yzz*bQ5zh%X, ԴSe{IW\_;='IzKxu]H/4sLyyy)bфOW֭`hРAѣ,uIÇWŢАM2E u%>$vz$I}=W_yE7t$igYE&MRDD,r)U v)EtJX榋fҜ>$tzЃ$饗^m*It%Y LА%X,1|:uE=zР`u:ӕ`K3gԗ_|!IOo$?.Iz;$}+$IM@%X,=zڷoEzR~`(];7N |}}u9蛯$]s5z%I}~)I3O?[;蚫$s9SŢc***J ޽{+bQllN=y дiwIJ{;=w$Io$I_}?駝6m(bE;vԈ#`($$Dgu,999K/G~xtmz%IzplIkoiͺB+bgH%X,2d`k.:t,kIJXꪋ.H}$n+$#<"Izu-ܫK.X...JXtg*44T Ν;+bQ5x %X,jժ&LE Knzkx@?$>5EFR`gϞ߿,kNǏW"w$I^{~-Iҽܣ|R3讻$;$IΝ3f_ ƌh%X,ۧE111sJXӧo$]uzw%Iwy}YIғO>=xз|S]{$믾y'ooo%X,:mxmV  >O:tȑ#`(88Xg},I]}nv }Tx@kn$}>g.yxx(bĉժU+%X,<xuE]tѰaÔ`(,,LgNE...'Hnf%I<~aI^~Y|$O>_,WWW%X,<y”`hСҥ,uMCVŢHM8Q <<<t9s$I7p^;y={{QIҋ/oMч.$%X,:E#GTCx 0@ ڶmN;M uy4_wuz7%I{| Is>S޻+[M>]JXtꩧ*&&F 飾}*bQttƎs3f۹s%IW_u}U).=C=S{$Io=yuG Əv)bQիgσ5j(%X, Գ>rr};C/<$3c^낙3k&LPCA{JXԹs#PM9̚%\O>Xt-=$Iz͇}.袚cIECUظ82dSD8tuww׬ /4c_{UI҃g_4c/R999)bYS(1vuG <tmӦ{5ӛoq{}c$ӕӦ)ih*bQ޽c4nX%X,9眣|s{Նc3O?-Iztcok9ƞ{9UŢqw^bc뜳ck?sxxV{jsm@9[K ll}Yfc'q1kW =|Ico&9cK/ß?{v[{w :tmݺ&<yzzl__sCxV[m(9[cskٮ暚c=c<g}=|6wΙ1pVs}Sc4}ڴcls'}|9[19ۀs>Os.9gj>19ĉsX9ۡc.袚c7l<g}=9[19[n|۪U+M<tqs<19ȑs>Om۶5w^9u^{19sX9cfL^sꪫlO>{sVs}ֿz>vQقꞳ>~^8|csl&ٺ<uxV{5[nxV[ lsHq]^x19ۋ/9g9>g1Bc59[6my]7wᜭ1p6m-_qs4E Wdpe 8%oRj^x"5StLaIʚR;64��aX�/8Bm;?5Ob9y5fif�����PxxiCoz=ֶ#sZs*Z:WGmݾ;OUu\�����h>$'''cxsvޭ 6hΡ.�������h;5͎ѠYlݾ3|P<Gwl]{jnruso�����MBuUJ̎f⒇>2;������bEvcvSUYrն~|1صٮڀYcοP+-.TQ�����'?7wgO^kv������JO٦_>{ [޾1ߢv[fۡ߼fE;�����-SEYrG�����?v5S2oIϡmګ׈)飧̞J(-Wfm7ľ9/UM/>[SLm̵�����MvRUfGA30fG������-T!7ھ+^MSXb6٩cfO(8Rwnk<RmXfQzz[ jA1 i%�����f+-͎fbw������h#ڪ̎` (:[}mQNvh^`Xk6PػU{�����N>h&}������@ K3;F o6zjMQ`Xkvh^~V6Pk]b7z����&0'S,6;2;������bfh0YJ޼P׶yOJkl6cmkwF\.�����D f@3fG������hVWUUvLVc~κax|FOCj9gozzz֭߭F= scRc4ա}m{ o`]c; [I }`#.�����h r3ko̎f뀱fG������hVKKtC?7]dJ~T*=\]}u$\=<Gϼ|\S^oxo/;Pk}W'?̋Ҳ }o:p 3/PQ]ެ--4l%'Rq}M ֱݴ{�����@NO1; W�����|OьS֚2]u8}2MIdYbuɬZz J5k0^ZZwҒ5e�I]NцM{ӯuaSf?B4&M诅$):*0UիGfLRS1,N ?߮к:a_=;umǞ+gg'M_tAkRaQfrrtmwoך%nޫ,Q`nq_B R]<s-X-[+0G=yӇǿNCW)7HÆĩg(-^SkzoeZ#/_~󇖯HsjcY= J{hҢjD.#὚ֱTRz+)s.CKSեߩf�����dvkDfG������hvj}hvnUUUkM ^A={Dk JMVnnSO:c.^TYYJK+$ܗskh߳V˹q<~cdžx5X%%咤mS|Ez7~TYY\ԣk.!k&H]5rxzۻ-wMWdDmح*m۞gXy? D靏iwJΙ:D}zhcΡB^zٗJSQ=TVVه{@e#JUUU=v:`Jآ矺D6p9JҊ[uSug;3X^ mj$њE_j2RyI]c; x4Wؘk�����vw4fGA3uu�����, K.gUTTJF뮷[>cUQQ  ItRH$ghIS1/ݨ _eh풤n@#st+IJٓ)g''mڹ+]t0^uxŊڮ&RrqqVeURﻹWz[ii]RIR^1rv>yEԿ⺶$7|y{{]zTQq/ҷ + :oPUZe<+Owj;Jnn[9W7z<:*ΕCyY踁js_kTN^v*+TRg~z?1 �����4i[~�����hwҦĽO5~L/Iic{Ӥ]Cus7pT]mգԣ6H\\~-٨_^iiژ?M?^ߒA:jd=5ㅄѧ$=r6&蹗ԥs/髹+$QCCsy"w \'''=?ՂjtCiD sj pz}2"^E9VhͺO48*7HA Ж{5/ 宰P?yڱ+Mla86]޾fhH;7nd(OUvsOH=Gm^ڼ#/|ps׷��� 6�cjݡ;_߿~Q ?S�����h ^4QyF+J:9>TA5ryy{ryzYL:ؐa)n_pyjkUUղZruuee5_9g '6_=KcTnE_XS7pn_z[:9IN ~+�����L3Q~h&̎������РNdUi1unujO?yӘO$)$OcG4ѯO!~O43lZUm=y/uoھvfI:tVWUP[۷T�����骾мwhÉyķ������hnki|}=-1 gW{t=\c鷯_k++-Vu},<7wj=N$]< �����4{9ϛDn>#�������-VeE̎`voC)Wj|Bfߕz芲R56\+6�����iS1;.fG�������Z,w/W~c5lUEY]c;G:jP>#s�����@?0;fG�������ZBfvw:_f-]'yzw+^ނ O{7vm1 �����4m}D-%g^lv �����efhsRocJffgo�S5;Zhվvlݾ^%yv<`tԝjjQ]K6Q �����+?#U~ov 4`v�����BY/ez??<<\f aÆEyڽO`SP}(c;9uRyߎ ڷ㟿�����y W̎ffG�������Z,ߠ0u; &M{qfm*ɴkl6Dǐ ZdtEFwi�����M@a^v_fv 4-������hhfh0RgjCV_[!amا512T^����� TT~f@31̎�������Xamg4c4jP׶f7gm ր.0*0mc�����hJ t`w1L,Q#�������-V\1LQn20l 8GF5C26 Uޘ������/oGƚę>nv������ iS4;F TPV_V>v4j _q�����@SP^Vf@3s7������h2l/_6;F)+.Ta^fmԌ֮]c;/-y~)cb7r����]޾f@31w̎�������X]4{PO)-y]c;Ul7MCU..^����� ZTYQnv 4o{������+uW~ RUUmMfmKݙyGNrrv�����fjh&|K#�������-V5͎`VՆyo?ԝvθȘ: RU6z����&U^f@3C�����-ooN;_R߾}qFؽY >x ]>/[1]ۡ x{ϟ7Լ|ߘ�����ʊrfywbv�����#?c6p zƎS^{kȑ 6g=sl u֩lvS^Z,CV_ۯ?=ծg@h9b~詚Zanfc�����h=]W������'nٿ}]_%X,jՃ=O/ԷOuI .Pņ1,3F7p\\\n:{}zձcGjJX4id}WZ<hVO?0ۭjȑZڳg."M6M%%%NJ:u8嬳 {{{wޑm߮[n0oIɓ~[TZ: c4O@Ҿmkjچ}/NiIۡWNM֟?0B[+ uc�����0YiQK l/������' fڵk:u$jjٺuWZr晒{R3f4OOOS=$IZ|}9999M6ob6#FUW_IҔ3C? ]z%vh;v, z7_Mz꓾N[Ekċ̎`2Plm hkeVQ����/@:6;_>{������'-ۿ_tnڵJII~$j _BEEErrrRHH^z%jJwqGkJ+UVVI6wvvV~~$;T]]-OOOIRuUUͿO4ǣ_^~N2D3XV9995}Z˗fh0~jk{ hkmHՆejaQթ �����4Eyڹ?ZaS4;�����IY]zK=SZa&q.5KK-+22RFAvڵӜ>$3EFF_|򔕕SXX\]\T\\R}rqq$5RSSG)<<\~[nয়Խ{w}'I&WUUuԭ[7mMJRxf .04R=N2;FM߫}j6,^vcuTֱ~횚_MP��pR׆ ̎�1itfGA3եRVj�����(<<\M&]+eEGGW6m$uE[ DRqqqފj׮nݺiҤIz嗵uV+::ZڼyvکDEErvr223%IYYYVΝUZRLeeegϞQʞ=u%)s<ZϞ=쬵k֙Sʞ=*..6ߔ<=̞J/_l = %Ew{l6y+0Ju|$)qV��$ �h==~0θb�����hC^cqg5;JoK iN}Giż̞J\V_[dl7UiQ~v-hչ{J޴Ҕ����� o>DҪEfG������?~<ٺ &23lEu#o@v'PZT[ I6,4z����& ;5E+h&bK̎�����P/fG@ ߣOrرC>}֛=z6FV_ہ-*-*kl6yxy+82Z)[% �����/Mz<[ >x(hRwm2;�����@DDD(Gc _W^Rd`ujjڂ#U}@9ۡ xe1%Ik}ݨ�����̕g1LGD�����^Օ�GWXh֬Yv\=n̮*y߆t5C\\g_}.�����h"sey(2;������l6UUUؾ[6'zUZ?'7vhZ CiU?i�����Kݕ4; 7#�������-\\k<kNXVfkZen`_5b����Ul7z;����4mfG@3v+++SY}6mLNN.rvu1;FoT+kjkl߂U޾ZgIЈ����@>|h&s̎�����h>{Nu 3;ܤO*qcSuUJ ͎`v]60lyxž:6UV07P۴|~c�����h"uTQg7; vfG�����XU*,!9 EiٷolfܮKQZcu\/�����dۥ߾ev 4vo6;������bU+'- &eZ˗({z5CJ u %P۶fYҘ�����VQ|,c������@.fh0m:Ra 5[}mRCԮSoC}jcp#.�����h ri_"l{������ W)[ךܤM+ju-o�vh^Q^vnPKI[)I7z����& 4R=N2;����Qu着ꚟփ?WUUj=Ⲛ;~C)**S~~IΞ6VrJFkFF**=~4G>kg7j5.߀? &":ek۹q{ڀ.N5ZuWZ�����I(P߿Ī?3;����� nO뻄$I=]}ڵ+M6k^+Uzٹ7p_;?5[w6<f=;H/6As9tW\2/ҿp96TuUXXz9i۲Ě/[YVp '][WfߥݛVjں#ߠ0vudڸ<PHIj̵�����MO@ǟmfGA30tʕ̎����@ VkMЯNZ.ϾXQû)1i,KTlt.5ZVwRaAfKKUQZ{L I)ڰi~u|f?Ry4$i҄ZzG("<@&^zmhكկO:srj0~L/=췲Zpw{Αar%?$7~Ԟ}Y7MQrJ>|*C3lf*$Gڮe~Gv:oPUUzS s1,N ?~j+/[gNH ~Y+W7:oŒLܼW~L%%eډ_e}ƻ?T])Jar4q|{Eh&]}8cUTT*6:\\1ΜnK՜M7^;Qz_/+~̅E(D~^玩z/U]U jİ:_kµzޏTQQ޽bu#<u᳕Wl}|Yܼb=*sKPuUF3&3d/1AllD߮к:aں-U}DnJ='2V>xQDPD;GF++5fmsF}F0Ԃ[WppD�����\i5f@3͎�����@j~[O=:KW$MkVUU/ݤ@ԳG.ڠl)[?uhZ4QOJlBz;KK+?tޒ.Z]za׮4Yң{-$Cƞ= sHٛ=TUU#kuƌ 153tcխK[fآpuْ̬BSs;%SL>=c1qOUh,UTTٜ=s>,XV졋/esNݢt 4IR:sB?EF)ᇿiޏB1QazE:ud Q7\3^wUU՚kY>pb|bYYnݯ'Pj֙˯1*../2FGuxGbVsT}u鮋:Oy_%i@j6Te=ڜWEEeu?u~w'g袙#յs+%m/4a?|2*))$uJS& wW &/3Uiɛ 5[}m}FP`xvh^vj#cۘ������O_EFu5; ov�����jTWWE ]oP}zǪRAA>4xKzv$999sҍZps jvIm7N֫/\#<Z<2G\?I6_9]..ΪXYYeCP<+Owj4:ooxD]0JהW,7WUTTD&ooyyZ]]gRxMNNǜCu^s><,u7uz>td{\[UVVՙSn^櫓Ma37XmҔW -]\m~[ $ZgNe>4NW^:V#Pn^|$I.uxG./k~n}:-~rrrJJϖ9-<,@~*.)SqI<=f֠g'''UgeoW nA.4;F Uh+c?H٩)v6~֕Go`xc�����hKKB+w����.1R=<Gic{Ӥ]Cus7P1T]mգԣ6H:`uغNjW˵bV}bmLLчY/IzJq1sz:ulM{uܖvƣPe!h+ڦ/C\_(Z=3W ?]e֮ߥ_*G>d|z{1Z|dԽ[T98+$O>Ǐ>HқԶM9IRTP=Wȫ1י<.^OXWSijsz΃j|n|^^Ա?,hN7B~xRd3~~[W{'l/ruuJo|E~m۞|yǪVhǏl='[cmgW/WM֠gM9^NPIIGϗ[JIR qGj2Բo5QJ5l ?J9*ks*7w"HҒ���!>>^6l0;��JQ]k2Q \9z 5w�����a7+K**r-+i9~Gzs&CUyNyy\WjUEE]>s8UW[UVV!//Ǽae3/~q4a|chkNUUժ2,))?JNNN5mpۻz汋z1lgN+@~u 骾|qѤO+q]Zdl7=upe4SDtgՋjyxLUۡG.?nr6e�����y*UV\hv 4>r�����DM]Mp!rwwiTAݵM[ݤu9ԷNU6I:n՗ic{~_7G[srqqD>^f{GWWC~[km7wRV}T{=6mޣDkpKKޢ>| \Ei̫/Rw&* *UWW5r����I.-cv�����`:6ĦдiЀN :5X{wkіUl7Mc4'gg9זփJݙhoViҕjJYI>�����prprrT�������Oē<'UmMAjͮڀ>2^[����2UUUh&.]#�������-VDtW?fh0Ue*/9-hI%'5CuԨsn4J sURۈ�����ww������d٦E_lv+߀`CV_ۨsnTxvj׳O s.--C/{7z����&X͎fǏ^av ����@ շ+̎f&""\iif@3䢽2̎q\m+~ZfGi% 5[}m˾{Kevš xIu5܌\�����)SdtWl(h~|Q#�����Z>ov43JO'dcc4PDDĚA JOVz }Z+C-u{nk�����LV\k̎fb7������h۪ifh0:{fm͢Ϯڀa$)=%1 �����4!j1Lny������@3;F Rν 5[}m=N9C!vœ %ֺ}Zo�����MAANVbv 4Ǟkv������ W~dۥ]VjڒU9vȠ>jcSRn�����Mh+u<A|(h6~u-�����h>p1 PyK̎pyYڹc4N oQ+|ZS־m[Xۡ xyڳmc$i#_����Т_2;}Fj׆ >�����r)K1 !fGh~jױL4;JHݙ}; 5[}m{UqA]c;>bm_Dל|]�����[EkЄ ͎f"e*#�������-ViQR̎`tagj"Ǿ&K6(;-P2` ۘ�����};7̎f"":������@魠(c4=[Viͯ_jڲRT^Zbmsuso`i|mZ>1 �����4a:iDN#�������-VUE 2̎`bz j|nmTYqkY5F\.�����ޢ<nv 4޾AfG������0]QQm_}k,UW[k8c>^5e>.))k;"}ߟ(s2qvq}^mN]߿{PVV\Jvh\\] տ|տ|و�����V+fDUU������L?5[w|orccЫo.PqqY_v^{'|:uƒij՝}_'Iz<=\I'VO}^Ӯ]i -Kl8XU2;FwFLP"'''vudP''j}O.I/ɐ�����Jݕ}h&*K͎������ШVޡ‚R͚9B#%?r|TU&J|n #eJar4q|k?'H/>_UUպӔ]W\ ?_/edKu2-ZQFtW)h=hgt5t nnw4Ik/^%I:j^X5HܼWY@vd8뱧Q~Atƻ?Ty Vk QntuZ1Y3Lr_]S !]+WaC4ft^zmnv:k@=wZpw{ΑFaZUYY67,юu 5[}m.nrrrkl߂BEku����GDtW?f@3fv�����F[�o=%+VA?22%I}XOw"Tt*w:U];R:ud Q7\3N$:;Ν6T&T0Λ1TNj3jҍ+th萮rqf5$U#w"tEFj݆ݒ+ּۧVYYbG;%SL>=c1q15涸eet3_Ͼ]U$M2X!Iڱ3?KJճG4zdwuHcrquO1L2rCV_[qQwph nCNW!7z����& c6-ec:������ghIyJ9;;(⒲߳Z6/(||<TPplLLQVNvE4dP=Lz$Z|r$EzD{rww f WA;i=uu&ooyyZ]]񐓓***gHlKΗ$UUD _yz"*J}6NSf?(\vbeH6ԒVU6z����& M{rf@3*������]ƻm?֯mٓ?ԯ7vSijsz:K|H/:_gY-٤G?O*1/|MǿTUU.?Seerst%/g/~{f?Ք3އ>⥉ЯcO_ ק_,+굦Ͽ)zVhͺO48*7HAmBtsyyӛ(w/5QS 5[}mUVRlN11V~8#Ա\qMЃF_8��Y||6l`v ��S~AL5; kڥ;�����) Wzzz?~ EvNrJ*++ W«jV1oTTT)..}W%w՗kUW[k~JȓއM~h~r~'WOdl <Bm_DR=CwWqARmvmӔ����� k>"t?������MVݥr?j$gg&|'wQ$i쨞:77:vm;y+K?c48 gkKI[v .}եO#.�����h Ryf@3nwfG������hRڅj!j6(͖ŵ5;FP뗙lK 5[}m7 ĮڀW-l߹Iwnj�����MoP:mv 4N������@Q q'16P׶察U][LKnkagjQչ1 �����4yڽ?Zes0;������bf׆eߛ旾W7l;Saۡ xi{ N݈�����/�h&̼������@N}ǜkvhcտ~ܴvȠsS55֒\3�����`"fv 4y������ L?/jv 8HfVDvn1LQ^ՆA/%)-9c;/sN-1|nf/�����0*y*zzof������pߖoKך86{̎ |ԝjjږ}]%v[І1byǿ1 �����4U*2;Ϟ������@g~1Lyi r 5[}mcνE:5Cޢ?xP(/UEyi#.�����h ]\mv 4>yoo������4u1q:͎`\\eku`vh^t 5'gg99;e�����@3`Jj1L͎�������Xwl͎рZ [}mg\1[wkd0/S;-SuUUM-0u��8yEDD(==��|lv4O?DcP)U^Vܨ܌tCڷcνem[.yc[<WW=6-A{G67<=I:{Tg_-kU}̐_6jץSHd&Oo?w*5b*IׄKՁ[4gsr]t{ڰ,AW=/^P.ь[_TM:Q3WeE)wOur)@K:KVS䤡SPQ~Nu2mYv'ԅw?ǿsu?SҪ_uj5|1ݢB >b+~P^VqsC"?LkċUVR1ߢMڳuϫJZ.3Yzk%X ~SɛW{R{k;US>' XVXێj۱b TPD;urܽ5`(+?3Ug\RwmҌ[^Ku~woaY.z=\ެާtz*ܹSjץB[Ǫ뀱 T1eZ5쬫T/G{t h?4winwᏵmbsڷc&]rj7X&\(wO8 V!jݾ£s UgELL%Ey{ڿKg^$w-+~~-+̻Pʖ5ǔ^pJtʤ^#ϒo`:Ȩ.jݡa︹{iЄ U^Ztdl7UO;vm\qd\t 4Nww;5s6ھnf¿;æ\c񯎱wQvZJݽ3V1qqqqא3jdys_)qONANBrrVQSN݇Lvd;8{g&^z1xG(:Smհk흔{gסtCG+Rn^>FgtV>#kN>j\l9wx 9wY3|I=j︺׈vAf읜|޹Ᏽ{(/KS/GQquh߸j4M~؝hslXj9wn~A6i(/9_^>V{tNz:MNN:w.S{?uo)qŏ6+ڻum=Pc9Ve8j.gZk]J\.Ml^{R =rw;m}D{sf򒶯]Kw~OEдՁ-p*8w+Wq nNHXN} 2w'>yPӏ;=M#{' TF;ŅNMq%o[3:z|-RlKZw:.jމf;wrҏ;ußc<=tEwcQXj׹(9:gZ{gǺew*+ʏ+( kA]Zwdc}xsdm.{ٷSZTGN޵ad;sNw읞>XAam{Lf\:sKvh;]7<ͺ]pd~{gXyߘsdר ޙz3ڹͺ]m}qMؠ3Nw`jw(sNes|+c{̼]E2钃{gY :wZP! maqN^j{gӟzSGN~udxKSnNFNz:{Mx:Pw?_G흶z)轣Ξm:?j흇?Uߋ읫r{}ϡj}9L9iȤKTV\k\sytzhY{<;5;ߚIm;+`Q:{f;{UUWߘsSktw_Ɯ*7{'sFS{x)F=MG=l99hOw<޹ME;>~B#?l\=4I۫W=};;O|?j;SjUS稽mjWeey{#{gڰYvٝ;�8{'K]tҏwersK5h,{;Gp>)*Иj״娽ϟWw{TSߑ6)yxj97g|k󸓖E]r r2wSH{''C_rShw>Ҷ5K4֗Z{̸Q%xrQ!{]gu[{8qw~C[IW<.F?:GIΞkUVj̼UeƽJ(2Zv;٣W=RgJAxKykjv]i¼cb葱w4ZDtIRZr��p׆ ̎�1VtZ{|�����4E\$Mߥ_DtU 56z:+c:2hƞmZˆok�����LVYVl�������0WYq s3 5[}mJ ٮg@hXrZaN s����qQHXc��������Z8/ 1lr mc^=k'Z@x[IR]`�����|EyJ]������� sUUYnkk'*.ȵkl6VkW2l�����M_̎������4yO?%h"^|u~Z1N*F)[kjM+~Tۡ xYiZ}h�����\ھn1������f[u 1;pR9lCV_ۦ?~P~v]c;;2oP:eݾ^{o�����MH7;������� mA=N1lu;JAvldat\?Ek�����M@n~mX1��������-\ZrP׶{ӟ*˶gh6ymǞ+s\/�����ES߱�������µn]݇L0lS^~v"fu3Bh�����M@vn1������fmJN8s**y5Vv<c>LVUEEeZ~ k[:/{_!�sٺV~3ޱV_[m*-.kl6yx*0yBm^1 �����4m:hט������hֲskX;wjUvvh];?k[URRVr=rUUUk_ojSUUW$-߬Uw]JC-?ÿO'sqo칆rklWG(WQ^c5~h �����̗U|1������fmİ8%_oВe%Fjj&DO)}���IDATAkRaQfB7s(0G8Y ]1zWڮ^=5cꐚZ^Js|/:O~^5?B%Q=խk=\9;;i҄j:X}DnJ=+'H7>~zx& Q3QAA}kV]+>FsZ&7xDg*+f7B{IKn.T/2OyE6$N={DiD͘:D/6_[_pS`sZkoL;k?PVrv]\mF]0�����`8~=f�������NUUk?gh-\Aٺұ-J0I^21hk"#nn6z&)::oLVӵsw$iT-_1zUVV)77=,}?/uJS& k$wwWޭ^kP]mUGgi$UJ۶'.P%'}l5D~9dhȠκ?UQQH)u*+C=?c*UUU}+:{uf[..v+Y{.=u$ism�����RwnҼ4;������UWǩTP A:)$ĿsjcU>*,,=kw]קCMYU6_Pj2*i,gUjLsrrRU&577]ˡ)wWWHz$\ÇiԈ ъM*-|="/ҷ + :oPUZe 𑗗\]]TQQ%#E}cm7m_Pf޷šWVWx/5֚E_7z����& 2&^v1������fY!!~zo!9K T]]]ڹ^<M9c}3-^: u_hWKum7klZa>7b}2}5wTwQr𖠹E:TTT;wSH{mcjл?^Z= RUTT7["EF)<<@[GWDS>ZCV_[eyU -RVtZZj��qac��pL.rRiqQLq�����p;|y<.!znYY\] WYGEEfIIz;CUU**f_BmZ_5QQQj<<\kƷZru:]sӇiҎ]..n*+-k9L%oYۑA+J}PK\)�����֮z8K >|(������Ip?eo$=ޠؿOyy^'c \t߿f-?*N|kz Zw/5:;Uژ�����c�������]`v 8ޤ5ZCV_[hrkl6iDCmǺeڱnYc�����h"4`Lc��������Z㔉6(Ϯڀ. nm`c�����hr3ios͎�������hޢUjڢ_]c;07S-5l[=4z����&?$Rnv �������@ ֶ:fk۾n s3ՑAC"7p2nj]Tި�����Umk~3;������,ddHIYf@Y`vJցdgj c;/7c/Pس �����' X1*-9(������@wɕ8iQHd睊k[;e3coANƞgG(82 �����4Ņyڷc1��������-\AvҎjoy hgmNݭ jy �����4^ k�������?HQ );u]c;/M z"F\.�����(/c1��������-\YQ 5[}mç^6ՑASϞ7/.l̵�����M͎������$tEն ;,<<\͎d|r%nQ󳛧 ϱgϫ̮rh^dl;O﫩7ʢ����Ref�������p<ƍlv&?jhPEy9N߱ޯԝ4y�����@$'9�������z}_=ek\gGgUU�����4%..r4;�������svufme)2]c; xiIZɳoc�����h"*+U\kv �������@ WQV<CV_OUyY]c; xa:j lg7Z����&S̎�������h<nk9:hm޿K-j~ l�����M@YI20;�������8TUUJK+$IyZ~*k/**S~}WQ;jk)##OU 6~uU97Eފsbk[nyWw5C"LC-'-Nx�����p Pxc�������x=B~ljL@e6/~Zn Klj"mYbͿ-߬U~ kPLED5#*7c6P kP=|)�����g+yJc�������hA^zmhكU]mUYYNwr%Q=5rx7ZCK5sb#tmwo9_7_g??OF9xKu[|Lnډ{_F%%3cW~Xܼ"MG{5~}:ϖhwJ czoeZ#/xڮ תo?jϾ,x莛(9%CDUz졙z㝟u$n]-[+0G=yӇwu +7HaIZ1Y3L[ϖMr4x@'-^Sk'yn5اg㝪?ܛ'rSAZ\8p+u֪mZbնZk[bŭ( ʼl.^޹+ qG -{'|ysjݶk7T_]1+Eŧhݶڠ]s�����*"6QFLv7�������'v/Kz`e3w+[u[>PÇ~WT]ݠ(yj+9D'VZZۺCJJ2Le^"$Y-Vu=b,ݠ'֘Q}ugsLS'#]*165j,9M<HwxsHPSsmuw* לz6}&f'gxTNKe5kgQ.>F Ѻ /v kRI_zol獕"I/UN 6+n=햭%>׭')0mcOWT|J,W*Ӗ՟m^͹@�����(ц�������uv2jmmSxE&A/1Ju*ӉcݎtlI`PhIghIPrPSyM-8@S& RtT>ZRbu\5ƃx[Zf5+.6BVYzbYnQ]]WΜOmu?bRkCu$5T6EaafdoQ"5 ǁ}&éCn=)۳M5ܶk۲Wj lQq.8m΍+s@ �����ILװI3 �������ljA~u =z}r CsUSۨ^Y]]z_|K._b\׷MWǟxOWlW+׿;ǟK'g?3-Qn߅]O*VWm׬/hԯo;jݙ7K}e|#mZ,˩ -\Jckcu}/jkz}*ڝh\}zf?LGP6/ޢ!K5WJJ֦{4WT؛»Rr()n|յ [T\+I윜ޕO-2Fq9ڳ?]z���H2d֮]n��ХPE(�����.JJJRiiiqc?XkC.-ZC*p)w7u8jmuj 1kY,27)"^ߗUkI j].BBLػtϟ.Pj+;k?\;XW x%fu۶ym^$/�����Rs5n������Lwif>;I2~Lƀ1^r8!w܊$Q$쯖ԏ:W7.% r6_um}e kG6Z)붭 5K^K����︲=[ǃ �������ƌ{;<cڵal^W][M^4w@j->[u~����NrvNy{�������8 9IcϺm6[dBB~;Ws:mKc5_�����;d �������qnOuRmZtG9�����1y4�������cN{)Jůc[Zg4lm9v�����|?بEs������c֓wJ~~ ݍfTۿm6&ɿ൵m۷�����YRvry ]������?6]NijjbN;$h櫮Rm-~Ȏ-aNHwVp48X�����(߳Mg�������8ڸB+?xmt-a~;xzm׋r�����w@\jL<;��������b35ln|յ٪f{_6F%+mǶ1'+6%Ke��)99Y��]jPT\ZZp*US/]6V[,ՙޣ݅u?W-TWY\f=]&S$[T Q\JRsg£7$CB4hjikjN:G*ݳU'_sټZg^{Dg_[N ڤݠ경3r55j钤~'Č>J)PDlrPK9E <C{U(ޡ)L{iWݩ~_~ӮSi?Ue.= 5Uiؤst8?dٔS0ZQ)JWRf_E')39Y.KC&p*ݣ3nT whu2q]ڳMfݡqӯQ}uOP-Mx4B4V1 J3P MRF! Uae45hܙjnS/QmEƟcެS.U6~k>YVѦueiQƟcVkԩ^ΔhTadVzaIP|ZRs)"6A9*.!Q}GY#^2=jۮߢ[ܥkiޡ4H'C5WkijKGN%,BY#~Je %KXG,ӡΕJ'~*֤ ~4;}:tUw뷚|M(ޡqg^ 2C>Ur$dPBz&f(pYãoD`gNc~p:;'NHtNRg£gNT{vҕgvg~g'HC2cv~ЋLhࣖIT|ZN{vb3xBB*8G-; iJrhYlni҉9eG>gNrϵ@vV|(;wm҄.3IncՀ1&;ϕ);F+*w}YimzNL/sg'\2;gvj?R1.-Ҥ k�egk3;5䋎0;%mvVԙ{g|ӯm.";ENN8퇪*&(-SvivnUif rN9lYTg_쌙6SM 5r0;#&bNfn{Ujаɝ敝쑝$oDY#9;]g!Wv*oT vڱn_Ev: Mv2w"g|eUZ);?x"cΕܿȲc SN蜝(>(ggSsCv*=`v>6;Z >,]v{ڳsu9Gva6eyd'*!MYnqjsdDvxd'gҎBv*ݳc4g'.%Kq>3MmM]dgM7ٹQե{ωGJ8ۮILiWv:;۳sTQ(dgN.SguqNF|9zU՘iNIev);RtOUH');.GM9,=; )J<ٹ-;c~)69wvU#;QѦu򥷪twW1ϰJJ͔->+;);#O3}]+;ىaScmN<_ٙ4CV>쌐5<;;.Wu^zBr:U6`T[_^nq=" ;E$Hˏ���ӆ k��t+1)69S;GwmVjnoPJ�mQBz*w)69C5eŊOR}ul1jj%̦&Brr\2B"%LMEFR(QLR*[7Pw*)P\jK**>EUe Sc]4j& $G[퍲GZ1(UtbQ\jnWRV?ؤԼ*ޱQUgRsTbT[_ j5<ZZr`4`Lf67j F8W+*>Ye{&T J݇8&9CŊMR}͡9hm>-2P+[dk쾮}TZY)*޾^)sWv(69KeYͱ&I2vZ׬T).u_tU/R\Z J_{=r"5<B-F-ntjQkSuW]URUi]3i΃A8W%ZS)kM&\yh]-ajj->;17;0558m)۳]TcR줨l츭d8$ܲd-";~*9٩طSN,;;6(5;5NvzeHNBjJqp]N٢fgsadT1n٦|pSy"P Q[=;뼮d'lq_^g'_enc48;ImvBt3;\^vjK}v3bťk`=[+;-";%;N dvUbR,;7h ~Ev׵l6%r?9V\jgU1HqrNNF_UNlǺfefh箢ghD%vstEݾUז}jj-KHӀ1j': s$iӊ���(�������Ks.&w6P{z?!TmE6,m[΍'��������������k۰]WwWc ;afmKLA"��������������k6ibO@WH+}[i󢢢ty\��|/̛L����������U׶o-KհIvlK$Uٱ-#=QIc8e���e&-_Q ���������Q竮mkͧojMO@ lէwP[i�������������O=f_1S:un۬aEa��������������櫮ԙ+9;߯ x%;6蝧維%HS�������������7_um<;+ Y?7�������������JWبwm[HY!^ohh7Tee}SRvm߱c%u_FUgEu^{1=o_eqO\G_ǚRII {TxeY/<к;n^vm;p},}&Kuuݶ&_<'tͷ;̯1~����������=ޝ{~Z_\v۶z55p['k|Ϊ5'WuM$'Sccs//VI?}4W4W@桇s^a?VSMG5vk¯f]tLzfch9-Om==)Ǧcp/ ;w]CO"+zݖ}Q+Wm΃ zu1הWwد!'ܦV7şӷvm̗/<'97:Ax,ރ����������Uve*)_ dn-<*4rXvnLm]~544'ԪǟxOa*+J-\R5 :s GWcկO7U_߬t|FN?@/LS&T]}^zm,P3N5z'z5 5K'*11ZշOJsPUՠ9Nǧ)%9Fs_T;JUYQD/Lv)CphXBmݿk+Vn{˻檵աru*ܼOϽmNO}kϾ(TZjx5b NU^QF9.Fcddk_]K)5Y{V١&t^sryE1lVu=[>ZVWjr~vncHF1ZS'GKeܪ_~7o)v˯}vWn?M몭+*2L8߭6 .ެ[~r2翽ʪzJR߬ۥ.պ*j瞨=k:{.՚ovz}<}vyZZ>y<G&{k{mE8>d_ZW~ؽ'g-O?]lכoP}]|~QeuHӍMo~msU]ݠ^TN&Izfbu+ܲO1 [u'nm2CU\R5gAcolDty<gxz7՚ovAinǪS{ULMRÖ,ݠ1۪iЄqH;ҒOk̨q^ylzߺ#>PV(<ܢ;~~v=?,:Ir{&/ U93?|=cW'3pjll8{SĄ[ΖdtsA~3 iJt˗/ ee5^c~a-?YSh 3:MP9FIn)Sxs ����������U׶]>z~۶ڊV~k57*'+QO]:c]zxM8@'O1YHc~\/ӜK:ELuzmzmjͷ;p8dzZd566%j2]yd 蟪tS5x`ny%I'Я>aWUT鑇VqI>PÇ~Wu26dW jjn/ZH?x6QCC>rrt3mWNJjTWo R^n.<o"w%r ݭ#"^mpN<XW͜5&͢4MNY|'I' ҔTYYuv{s]{:<9N+7yM&=z^cr8z쟋4tp>\Vŕzbmٗ)*5F>{{^(˯6k/ׯ1k }3F)%9V } (!>R['^pX:ͭ ?\_q_yL!!Fc3Os.CBIjq:s/7p,$uS^$m۶}w\nPtM<tF E3i옾zr82 S5tpتXM;ek%k+T[({SWnctyc$y}{<[5 .:V{bYt hOŁcMk::ܱ:y`1;.-\z }eۼ^9bǮ2pͩWo99ىޜ3<y,z'OH%IzzbsJI7kwSO>/_cX|W#<SyZZ\Q$y^nǦ1N����������W](.5ǯ�jn}Knb}B>5 :qt?zPO| zmfLF7b#Nn8]FA' |\Ԣ kN ?'%F+2¦F{{ޟdYzu nQ]ݡ 1:qL?=Upb꘻DEd0f ެ+gNQnv?USرYd*:ʦ&"&, t9պ`zB%@rvqHҬ{_P|l25&_yl.מAZZd1_Pd2czZL&IvSkkbcu~3f!22 ^cǞ:JRvV|/,ѮT6n*K-"e<sLtS[[FPu|>VuS^-kGq"׃E4tPv4^T~tEGw#f-̢F߷n֭Yct8 _Ǟg<y3<M?}/JJJyN&é?\şӣ5f)$I2[B:ؙG_=ہ\]瘺['_w>'csLuZd4ʒMM-2Cnt.ճlþ=z~9F߯<y槶Q1c#;MO=���������� _um_k?-ILЉm+ۻUe{zdhk3F%W/ }>I_Ъ5۽40K7]q%h4k *-iC駵_!h楓疨'fe&_SYY$~m}@ z/4k zԳFz=\6W7.l/z򙏴ek*j{SkS Q+v#d6h|}ߋZ^S}I9z8Ĝgo2})!!J۷诏}^n Kݯ} 3_Tyz_VƝ^ZǟxONS?^feyW;{cnNV|UJ24|h}I <WB55j鲍7kI^-^9&u4_?}u|WG_o.Y^O?9 SnN%OK2u}/i=;Xdb //}5z띕wBZEyw>d׺ >XOM //_ױ'I'^RII:y3<&:|ש'IIڴyf?.ĜU]ݠX1ԯo%EGټni-ySz:\NohU;&W8'csLv鎻vۍĎ>1/j 3?zOt|˓9U=s<yg<PVznodT||xu+꼎M1y����������چN<W1i~ǐE7,aOQٞC0TIҦvlXG _CR~+Ph)PÔTk˫r)%wY]^i;7+e*orkss=iksh4xP7cg]NW-Ȯ=MMݮYOz֣F))]M!!Ǝqw7F_clp8p8}9\.:|2 p._{k9?=pE<sDO<ץy|3=iiiUgoӱ}8c9'7kkbyvMhrҞVNWo/f\"%c{AOEt>q].ڜ}OUWMs|姩EVcOfd  k�������TZZz;竮-1j+Jl~k"bwD=[~&Ѕ&STG{qG7GR`K'zx[p(Ɵ1.F,"n9oݍט<ԧw=`0tY(S 5|џ ZCnhǞq|7ʼn�cş;ɿu$]=s[zs7 lq+<=5;[ Γ=`8fwUoΛ-z@����������k;l6ZƺJڴm[$I?'_N/]^xaY LPq&+779p-Yqt~����������8Z|յڴRu~'xh Ҿm.ge'��������������kK${}O@loPپnGQ'i��������������p竮lv5O@j*:.mۆ/������������+ڢRU]ǯ�"{]۶ϑ$}+۶mߣ~q ��{9]����������ク6{]-~'xI!f۶U_z^ss3?0�������������W]["~z3A2 nFrFrq��������������o F +945m[��������������>kkijk?-3m]v���>��8[`w�������|ֵGjk?-kmnRumz?Xs��N*ȏ?��>G<��������umե{~Zg+)vm\ٱ)-<��N����������oڒ2jk+{jgn۶<x�������������_um{~+{]_1S8 :m[ր0:S�������������7_um9N-:ί xUںj۶۾ �������������ܯ xQ4 m)J.��pWcEҶ%o:&=tTRRu_gm{o׵Y.:h ͇ծgsBwf}NUVwl;i#^@k=+�������U6hOk?-.ۧK^wVom4��p|lCnWV뙹@/,ݻ(歷W</|V_{?9}>9N}eQ?m zGuL?Hʗ9[u_qn/==)Ǧcm7;; ];;?M}]:}n繣n=fwwt8r}ZmG{<}ȯL4c_W]oԘws||s�������|Wk[uUk?m\JL8G>m1Iʒ`���1OTKGut$I>Pmk~usNҕOc^kvI7x7lܣ^T11ꍷ)COO' RxUϾΜ6B6Es.Mֿ@ MɊzCFA8}S͡*.g76W׫9yUZzW?NuuMzOԪkؐ2Y,'g߾6Y,!I>,k{mEEI^oBk~Ӕr*"ª%K7A`,PDt.uZVLLD6Ƌ˟{ט>d.Z9m45߿*é3ӓ|]uꔡ3OǖܪT[?|:U4gj1ݎd{oƏ͗5}NMu;Ǝ綎LEoNiqi^ZRR^TN&Iǿ 莟zcsLgLᶎee5ny4@[iPrbny׼wzk+Vn{jll{]罹\7prsf>ߨDžkʭ:?:"t«d7떟)IϜ+);+Qqۼu[j|{t4rx^z5 5K'*11}<yK9%**L#j2_يUN*C;n=GOnǟ;YS+/ +InsYy[L&}W9⺫O}xUaV?D7i<~vuӼ΋&U[ۨfNUiY۱xکû]_vPM]CeJ;W\fը}gon328K^y[|<g.x������ _umcN]{^|N}Sn*KUWY̹��@7viAz䡫a獕^Чm#]]ENZa̺G4. iXyRcڝ:5lHny}B6Km,ܣ}SGjꓗZͭJSsM&=z/UN -IJLҐAYӥC\Ͽ,TssڲXUpX_f}[ &iʭ>{ k9Ӹ'Mo.׶ekd57i_q1l-Qyy.h5q8nnkshCWb9skII>t3nLVYW^6YcF_5>$G,=[~uyz`e 1zq2]yd zylnާ67j)üƸek[==u7Ocꍷm]%)%%VNZIҎ]eS50?C_9&u_zo]2ft_ef$ow*+йNu7j_qm2jf|3ԷO9cRcpגiMן}.Inެ[uulz䡫5ybm7O*u:y<pVSsn+q<<yvX+RiY^g<y3{c¬fWW?yNw~?s\=3RS'^$cu%7+IUU٬ڱc\.ٗi%>ڦ*mV:[|<'xc-W�������]⫮Rޝ~'x}4墟mEI��@ ~ල!$IZ̒W> 1t`.Wnjjp[uv#NטQ}5fT_}P-^)A'SOiխd2v~ Џ1ꓛҫv:2la 57hS5y`Yd*:ʦ^N͢pE5 <(S?dM 5MS0BBLjmuաH[cp:u<FOWΜd] \] ߮ݩ}aCrSeU d1W؟p8bVqt,9D&QaSkLVmmb%*QX[χ=_(u}ߋp56kWl6-{=ylyj(jX>N*+}>l\ wovVd0 Kkwd=+l.oڛu:(Wv0́'s$B^Yj]=[d2kk<<շ9sLwcunw;9e `01uN|?Q]Ӡ 1ye,ts]$ޮpY&ѳ϶0Fl"RuSo �������K|յMgJ~ZW>xOnۚx{��j݆"=rDj OH%co|ܳ߾%K7h̨ó/|Y_Ћ~&ɨY,Z:pɷzeBGŐAYz奚+I[otzuM5͚(U)eE ͼt~c=uEdWԣ/ҷkw" t:۝zothmڼGxƃW)9m۱_!!&c<@wJJ|A._csLO*V>)1ZUzُϐaCUSۨ^YUSӨKz"{{IZZz<<ylupJ1Ǟhb //}^*I_آW^B[JN.SZhƎz:zÇ4W|cm/z򙏴eks/~N }Z]Cg/s>ܜdzU{gTi>s$ҫu몠sL9e -|^~su\W_N?u^\Çjz2~lE-zxyeuoē SWԛ{9gs>2_6:}~O?k[:8h`oأ} }ׯyNmJJʗ'sBO�������|k?iBc 7i}k.[c[z[=��!Chڵ~ۯߧx_g=2z8_766ftp!5}ϛ4jDװ[:vp.K!!6Y,T]&M6 CW^;8Vk"eoԇ޻.(iyl55j5VwYsu=b 軰͘:[fꚴpnns(v{~ܮ^-.Kmm^X7{N񵮽iuڱc|=us=zʟ1tunUT7^և@{9/vw,κۇ#=q4ޯnzw������$�4k;o[m zߺm3z=���cf[ua#wj]ol2b> 3bgAFOcw]NR3<硳#h̨~ݶ\kLVOj9]%e]Wm$쯖j֏: P:FW=4>"6uÙsڬߴ[r۸<99՟q:uP>qݱԇcU|'+�������.U~mJ�<"ԡ"֖ M���aԈ>5O?%;;1]^hx:3Oa"1:]pa`w������eNZ*ޱ h^-Gܶ٢4E��������������xUK~z<M<Fm5媯)�������������W]oTBz_ h^e.-nۢi�������������WŻO@oAAcԒWVY3x��ϿI���s_~1]��������IF|vo~ZW[VrۖOTU'��^x`w����������|յ]O@oAc~තxzo_y�������������c~ȸ$ m[m[f?"H�������������;_um.S}M_1NE'+wXݺc[E.&gHGNQMyrScmRsc֪̾2MRŪdED$-aMΐhTBF_9mJe!{mrU]Eʒ]?zK.WVh55*6+9;_.K9 5+:!UV[£/-\щ2*>-O.C)9lWza({Wϰڿ[jn6QuUtuJ7LMJ ӡ<CB.KM1 T͊O͖RrvZ[gU0Z2^e{U߈ɪ(VjRf45(5omJ#ѤLaM-2FaъObUlr 2֪Aj+sH5V*w8ՔSUYKGNUM>=IֵVi}EIYe0Hq (*>EaQE*"6Qfkb2d4(!ɮeRΠUW)uB#{C U[sӁuu*>5W!!NLGjPtBځu͕RJ�4)P55*`gxUQQSUH}GLR]~ :QjeF>&b2dXG)*>EfR%6+kHT(oI)ߧ##7;1~eDܲO}3;IY%gv"beEvrdﰉmv\N%vT57-; 5UvƩ∳t:j}D QlRfgo7Ɔ# 4sXbvvdE|g'6%[Nى>3DUtcω-;NhNxt;bb)Pdd a1f'li_W4gкzfRY#lPv۳;xjzNc&; nI2;'jL@vr0;59G#NNJnAgw{Rf'`v2j ST\"۳ovFNj_^dDG*<*V1,;dE},>ZUe]ggGvr蔝$?swxdUIzȎS쁣,;Ng3l*=cWJ�߱FGv& ;]fWN~�3&�ٱ)"6Nv,I );{D9X?S_3;瑝>뚔.пc{'kU[QѨdE(*пc)T 釾jm+Sv;Q3NtBLfŧHN瞝>^9f; IVXw4;n;;ΉGYvFnPt|#ۿ: <'Nsߟϱw@uUw@=f'[ŽsӣGRs;ꙝο=xd.~{EvrSvzCoc=9q?5x9;=I]dgߟ|촯ώ:'~vavwjm{nwDEv3;IcȎv9Ue]@u=Nu{HH˕ofzDGvd'lUlJt{v|nמN_N߼Uv=ON߼{~mv|nב=Nnv< Fv^$5"PS=9ï֋7Ԁ׋8^/vf=":*"]f6Dտ {Jeu\@Pݶ/ F )$DjQbF_”+-RqٲE(61CKSdl"bx&f(,"V)ٲG*!-Op%elQJ�M!J3X27DFSRr jQrf?ZÔGV[ReV\RlOWdlD&+,2V)Y R|jB6%eUŪ2B;PFAiyCd4[ SH3j*1,aOɑ5"ZY SLb"bTE&*&1MQqMΒ5"Z)9+kfih)TYjjS|j^{ߓtG'*:>UQqɊMRt|lKllYmJHPk3)$Ԣ9N" J3X&SRd()p%پ MRdl-2FqٲČ=@ `l_Wc]+bUBZYlOQXD́uStbZk'+*>E1 IL-*Nq5U٢|BC3PqlRj@BJE5-G(%g EĴkd܁81M8&g(,"Z9"֧}C]v{Nd6;}g'wCsឝ"#;QnىQ|Jd'5wPGvL($)Svbٱ)1B̎D{e'#;aQٱg'4uvzyd'줸eMvzjg'ىK=L"c$gzelUbF?l wNDLR8;i{CIpNDLBkv-;wv|d'3;1g'5 qώ9̦\De'Qi=d$)+; IN\ݲ,:A>_섅e',Pv:;e'-;cNސJSΠJc=;;1 WlrfzNRsdߞnى8$&;0%uHى󑝃3=;TxTĹgL$NVݲc);QىO9,xo+;VBNGvRrdNb9x~N鼮Gwx uNhNf{vz߉icNhNRF?ZݲSv2NN\J£{X$vNYN{vܳg (svl98<Pv";6#;>c6;j!;Nt{v:ݑ$94)#ˁ5#;3;q㞳3dQvB:cjώe'9`vg'#;on摝쮳#;ч>ӞW[v,]f'D(sc{v R<ѷDwNR;e+1_1(%gBfz(;qNΎ=;^s9;IiNlGvR;3;e*)Wv 6ydz0;QKRgv9;I=e Eve'=;D*>-Wa6%vN8?e'`v~瞝hى9d줻g'gvB{NWv"|d'GvB:c!;aiީSv앝h$ezd OONbc.xى:S̫dg'`vRzN}g'f;t|fk~dN.}i7VbzO}f ?ߟv~9=;ONwԶىNb¢ڿi,CߟNH/]v=c#;yE*;;Ev :8bUBFYl Uv;;}NFٱef'[aى霝Ct|z ;f세}.}$u1[ܲs5;?휝i~"3;q䖝0xd'wOΡOOݲ9;u3@>ߑND_ىȎiΡf'핝cݮw-;ъMD).5zNxىOUdon\ݡUv;tݮsvݳ3;~';~뜝~Ev}0;Ipͻsv:~Ev<~ΎvNe{푝!=d'7ܮ֡979N#;>^dO7^$"EѬIvrBER#"=ԋxm^$znEzE2zMH b-:!@"^d`"MUy;m^o%;7ί9CvN+PxIx,y=u}���8f*"-<![ ?]��!ChڵG#������JJJRiiiỴ>|ڰ\U{{&$hinRm%'��i_ 3-����������|Vɯ6),[?��������������_l2j<!G[k��������������8Zr9j<mu��������������`s9rj[КBdE{��������������!)į6-kkmQ}uY��������������Wů6-3[y��������������/qY2[jz{��������������KIQj<[d2 <���ti߿@ /kivD;vbcc2?;f����������7\h�R}y���韏?K4yҤǽgk֬Y /z7tDG?A6^G>1zj����������}}jMH ;Q'hs��KZZhҥl=z~}睒gyFW_}f***?{[fY/: .XEkZnpכ2enVƎǟֶ6;Э|qd2i@~|AI`%K4愱TNSy1BSNu3&*)) t:rTZZ(;{vڥ5|s9GCsUyE[KJJ8쳽s͓lVee* ^]v3/\]v~=k.`0n9#I馛T{w����������ǁQ'kW﫩mzڊ`��On6+ۧf^~֬Yw{O$i_q 7oVrrn9Ns_7[^V(Lkiiѯ㶶 ֬VZ[[;2dt%d1'?eZ%ICZbF-z]ٻWM'_L\}$riٺ[믗n~vMꫯj*555i^}5FOc^toؠX 4HFQ\zLFN3/XjkkW]gw^͜9S&LPqq?1؇ ���������ĺVmE_mZS%��nzuތڿf̘pݷOlr\rrIl6JKK|r-ZHR{q`gKkmm]fCCC%I~9N 52(ګUkke4UZY+Qg0zu`۟rbccUРccwc0`L}If\.p(=#oѨ 6?ԒO>hԎ;$Ţ_WR~~~����������ǕS/TLR_mZWY\ <���'+/,}vZM?,]yZlYGARRR4ep≒ͅ<d<tPO F23ҋ/J^zE=i&577_9s:묳rtх*7'G+WTyy9oVvg^~m={˕DL&1xѓ%I&N`O?kܸq:ut`ShTuuu����������ljUeq_m 99.Zt#%gM`��xG%*ڽ[_^بF%&$hSa23 6t\.+3S6MEw+!>^Txrlo*,]ftjܸq˼7ѧpM~y_x.Go<1TXFޭ#F@\yE;8Fl6+33S*ssݻUQQs[ $٬իW++3o9ۧOm۶��4d]6������p`wpwiqU7z&xFSB5=���I{룏?O-zU+.ؖ9d}?=}߭v7��@o!�����.�E|p4hu@v 9;_OD M��;{=Lヒ<(���������}0_i/x^ h^ Z��NLLbcb{cb|>ZcNUWUiΝ>����������' eZ;+��c2ZC-RuucN^vϘu~lvءիWS���������5{{ =���Ǖ/vF1BSNz;����������Nj>֖fف̾z-���izz=:ƌ`w����������ܢ̾~ h^Z:?���j==gΟ1C99����������3KG{w&xqY{���xCSN v7����������{KMH ;PV}j���.����������1WU_SW^/:!EO<��� �V^.����������13xtE'&xUe*`���@LLn6 ����������3_2�/<:NyO <���0M:U?Zᇃ����������88ڄu5ڽeM��/5B7߬!C(44TW_sMhĈQnnV^M���������-kXWWY#[ \���7 HJn6UUUIݞ#IULLjjn7 ���������ท {&x-MvU/ <���W>zv."p;����������8 dM@ BB͊I <���W_/vW����������{+"&Q%jc d657{��������������Ksc6�`0b <��������������SI6.3y��������������/ƐP ].m.��������������_ ur8Zj<٢ؤ`��������������~MlM@ 퍪,y��������������/%loM@ Jy��������������/)d M@ Uyu��������������m^ƺj�/":^yCN <��������������!')":ޯ6!@]U W~y��������������/+?R}U_mzT ?=��������������_T xhǯ{��������������˪_Ư6^\jN<`��8 >\ȾƏN8m[DD&Nr->ӕ>O`w����������z3R\�|v-{_��pM4kђ睧O?<kgŢ &>&ٳ5k֬^?Izn.?37����������8ږ/Wނ6)F|~ ��pIKKӟ-]T6MW^y.vG_Rd0x-YD}f^~M8QQQQwlڵKv]cF 4g~:TS~)S[ohԺu׿U=Vv.b>>8pu~'>o^}WMMM4uep׳fiÆ n;s5fhmܸQ)zs|1ZQQQ~}睒gyF . t:rxą _R񏒤oF}ۘ_7OwqG_hSa׸zMv]rzWNNZZZtmޫ9Ntͺ﷿u{ nspEiȑ23ڹs5cvS ����������=9[WUcC x%;7!���3n6+ۧ=TVVg%ázXBG֍7 өr{9nN?&I͛ҥ:e67,$jUN_W^yJKK裏*44ԫyyy*((OzNnn>s%I_|JKK֦|S7nT&I^c Վ;5gt޹jk͚5ztK\.fϞoEߴnzZJ>[Z|ۧaÆyyʕzGРgr.lրɧj͚52 9s,;W[n/s"""e˖u9yT''K0���������=jԼ:��pyuތڿf̘!ɤm۶tl6t`0nhf(0[hQ~Cjjkd+l-rIfZT]]1r\ڸq}]b5ہG}T;dd4a}Z'=΁%A Sxxۧʎ4 Zf$ I?%%:Y^+Ar\2y媫PHH++*ܬ(}AuU4sL͜9q����������ul M@oA[c=}_��gjkkj[ (99YO? s(//."ǫFO=ݫoMk׭s{d%\ /@VUs}V?|Q .Ff͒ߦBiʔ) 򯾒$UVV깹s/K.QKKBL&566j7n+;nuש_߾8 4`�}|4d2ͅ:s5駵weZ5|";m̒}vY,/ݻ}`^SSF)*ho$tWm0s]n&1BfYu���������fկ6_-;P#^w?s��#ӧJ;*WT(+3SjhlTͦݻdmذA;(fSCc:ޭx}_>s}\fն;eef\JHHƍ;3h f^c?'6SE,[&sUW]H=o%Iي;yجLl6m*,T>}rd vJLHP>wK~~*بw+Zzvڥ_xo9w[ R;va��!Chڵ�����$K 3GSɎ n<SH,aj\���3n?O>[:XYГpvхri޼y.5k^xŎ9Ͽ�������|Q"K [d rqނ6!=OC&s��-?y^ vz����������p,tuZl*uUҊ<���W&rsr+IQlll111jIRUUU;vt-����������Vjt {#���zԉclkΝŋwwwFܜ>\Zz/^����������@PrluVh{���+,Y^wիWw\.&&F#Fе\;wR���������ำE,1MTS=���Suu/^xC4u*����������_�R;/<���0,ċ=pE<����������8^\\5~ h^Xd2 <���1|x����������LFߡ M@ T{K���P]].����������1S{jPU1I���S<����������Ǒ Z~ hE5���#F(7'G/vW����������ů6!dj <���03T]] vw����������Xm2L~ h%`��qeL<`fK.U1Btԩ_~8���������p9]rY<ښ=���-^$}xccc#I֪ի%I7����������U[[\._mZg UXxt��า5Z ?Ԕ)S(���������-SH_m@[sj+K=���ǝ*= .vW����������{DmM~ h9,\ i��������������+sX_mZP};6{��������������˾PW"㔝?*��������������_GWWk7˂=��������������e7T_]WE'i��������������Rp4E'&$.ۧ <��������������T}M_mzL<`��������������~yꥊMM@WYS_L��������������|3jnM@Ggy��������������/gܨ>~ J6 <��������������^|Df x):Y��������������r5[W^xz{=��������������+W�_oμ`��8 >\ȾƏN8m[DD&Nr->ӕ>O`w����������zkQJ@�oB}=��8wݥ?<iaѣ%I3;O~yyyѵVE&L8}L?˽gk֬Y~Iܹ]>~go����������p}W_mz ̾><=��8?/Ztl6J]xۣW$`0h%Zdnf+4qtڵkvƌ h3huF4ev2Zn׿jnE_LJ|PT}}яПx<}I^tf^~.29z,mذm{ƌ7*%>ZoΟ6FQ9***үS3h…Z`N\./^Qp_?oytwt<6z}7euɥ걿]999jiiѭݦ{t:u7&]#Gh4j3hΝk֬uM1 ����������d?ӚOkMn+Uۡ<y���Ǚ?Xv^}Gs~{}*++ΒP}}VXѣGnTyy=eu~t$itRM2E FEdZڪ_y+RzGտ<h ӧ{='77WÒ/XjkkW]o7*f$1jΝ3:s5˵f{:%I.KgͷܢoZ~VZgR-_\{ӰaüƼrJ=#jhhY|rtel6kOf ͜9SEΝ-[j{9ڲeKǺ<uO%K}���������lSܷï6-MҘi{��qy3fh1cL&m&),)F]FQ6lѢE1}4UݮPk&I2jmkSuuDGriƍzw݊l }Q;_)��jIDATfhԆ j'8cƆU+,,Lڻo*++;^`0h5***^0g0$IW<xtl<fIrxͮ 566rd4j嗫^C!!bPKs5?W̙35scx���������_4fMM@ O<��xBŗ_j߾}z?Qvv.[VX'IRRR4ep≒={nٳݞk2t%׿V>ru<n0`Befdh֬Yr:^TX:M2E?d2$Izn\]|~DLjll5n8M:U S~~23u^czZz]V:KW^q.[s7j!W\,ժÇyYo.Ţ^|QY]"&9RVUR{7߬꣏?90L4rfc���������o>yCe{jcqբ y0T-D��GէOhnIСCU]U eefQ T{23 6Q4 ?yljhlTbBBǶݻgTzZul6_uڶ}{ǶL+""B ڸqcG $٬իWwfhe=pK>yncꪫ^~$);;[Z~}x=o)ͦMӧ\.̡^c>.>>^ *ڽuWEy_yEW֮] /9nR^QUVVj. �� k������nTZZn�n.-0&w6P{M@ HE'i#��D||f7ϓOj֭Gu9d}?ܶ]tr\7o^Kw͚^|xo���4�����EỈ#9;_5eX6!@xtr@��8TTT薟<pk =zo����������8rk> ^^c}n��XJMԩS%I99ULL$111۪T]];w����������G{Uc}_mZg PbF_ټ&s��p _I/^j;_rsrܜ<uvءx#���������H諆r{&x-vՔ <���W٨ŋnΝҁ(77W^svyX���������ﳚjie <���OZzuΟ1#]���������cP_mZt1���T]]q۩S;����������p̴47hM@ $ 2{���p/^ܜ`w����������7Zg4j{��������������3&_mZڢƺ`���е\իW����������p4Uů6-3[NH <���L:Uc`w����������TlH ;loT��Nll}LLF#FhzzΜ` ����������loM@ QJ݅ܮ ��XьIjXfl6|ͪVuuuF(66VVSO?c;����������_;X 5jOZX[] <���WVoޫXHjll졿%ut;TU]ŋsY����������ǽ]Rcm_mZ~#&k`��qcmz7Yg.���������a7b6PMunڊmXn��;w v7����������{iwU_UWc ;af{��������������˰I3W^jVB��������������|55&WKո{��������������˸*.5ׯ6^ٞt��������������lM@Sgy��������������/μ]~ JvlТ9 <��������������Es~'W^/5oκ��������������ruUj  x�������������{gќW^/)N`��������������~9۔߯6^mt?=��������������yTޯ6^\jN&��������������_NFq9~ ^ <��������������J x1i>`��������������~>\$&xa��������������aWE$ﰉ��������������wDE$&xuڵie��������������ڴRu~ h5<Ziy=��������������%-o~ h^Ae{��������������Kپj7&xS=��������������%:>U_mZhm:��������������_rso:`0=pH&]}%_Y&5p4WjjWN r:J3D!f%fUXD8ŧ)lQj INeRKSJ 8)ݫQٞu*ٵIç4 VW)jjQr(pL&%e E&)":^2ٔ3@AGYyCNJOVmE?K{whdF:"ݦ!㧫|ǜ"{]򆜤&e!2[mOVxt"!-RId2(P9tkoUנqgxFL9_%6j)l tJB}MTKS FK.R)lQbzl1JHUtB"bY}HN ƨ^~'\O:\m֨S/B <CU%E8tW߈j)g r:ڔwL!!J짰H$+2.EqO˕QjijҀ1lL=4ꔋTsFLPvhT[Q'^_!ڢe4/KXRD%g|L&e.GkFۻ{o{CaKޢ KP[gqxQmk[ NQZj[@CF}{˽͔pGͽs~>L;}GLu2Y'QtAu2NWÔyF-:-?WtARdVL VDt=E6TpXĵ) H wTQQ塚sjy eM8wz]Nd R+w:Wv/͝�6n;̝oN;CD3T/H6X>sgN%T7(=|_ɝ(ExNRAsC=eN~s"arhedԪr3wV;caasZRӰ#Y͝'ժTt>;[U?w5QhT9SX{; {mxqtp2NU;KN4j;M||_}߹Ӹ!eX6}_9L!1U miZ_:wbZPat4A';:}w;s'5 w:sWP [vtĵ*W SFqw\3lR\s:) wLjآ˅͝`̝z|Dx'ʝ2rgT|`iԪLUΝJʝι6lJ)X}NDs󹓚|@JN.THuP@`|3wãTJs93Hyߡgq8;sM3Y)?wkR;(d4.;9j}r;z*D9΃*;kbQ)9(?w ]sr^N\n2|N]E6Rphxs&UT2w:W!wV;\3N|u:wZUΝrl2s'V69$L[;}+;5nʝv 4[;Qu;m2rgr=DķF޹Z;v<A;678w*;uhTV]Ud˯^;VPV(":VQd!k.;+;m{ԣ˝|܉;R\nɩq'|/Ν s; TJk]wJwlUrVݒM`,wler_er{ qN{3wݹ&mW/wrsԢKegk.^*w&PYWTq;`W;>O;$52r^TT|M,;k@yʝ0߹Si;INUn47;CM;9~3wj+ ;9{^Ӷil#;^v=ɝ+wV.wWRXBU*w׀lj{罇kT%wBK{J CNUT*wRծus'3wƗ;+ȝU7wL%s'VaQ1sGt;Z}߮t\SyΕ;۹rhv˝**;{̝r'Z1V+w|޷+;Fխ};ܙTA/ރgĵP@TNqϻ d{ޭyG(S=oܩ{.=o7yW*w^{^EvR0;pHdz uq>%ry;>y_E"*oWSE*]"wiܪ 5rϻuy_{/rX2TTXMxj$fԱC�.w�?]vs.S\4\g1"r3^t,e˴5+<\\^gB/r\#۸;Xm\w]3\3P) tG\pF+ha/MQ^5.yÅ!硺=z^F9JPOoWy G_]-\3Ѫ}34'��.=GTfV: ՗��\p;vΝ; ������/JMMw7�/��������������r<��������������!������ա]Uz~q**w�����J.�^v)effW6�����ʹj:�������z?^{cqE`������."�������`w���������������������������j`��������������<���������"v8**.Q1rrݿ߾#AI~Tcp9s&KyyOM /(c�� x���������E4iofO>ݢy_֯ܝ^[-K6/@XgD$l^=ϙ3YǛTa9Y*cOتSJ=o|'x���py w���������K/jÿwG9Vn;B{ N{ӿߣMbu!:w.O+lۻLu'վ}c?{4nLI)ԷWK4{ edWyAuպϷھ+Q3$_)1AeiX͹qϴ#ٳZr֫K+u=V[QQkXLF=y.Wc˫_*;;O78H~UWTT:Js 'Nk=[4q\/FϿ3տO[ Q/i.?3SOaAzdTED{O)!:wlRj jiJq=���>���������nwhg?ꙕߍe6 **kw?3uD_}S))gTXXwOݤz:ڡ_<$i{C }*ӎ]j4L[_w~u$zYڵ'YAZ4ZZw,^AU<7zɪW7Jw&H6n>wOoO?Q67Nk>)^$W8|-Az:GlEk:$+PUTT!ڛեs|c��p����������vL&$)ovi*PjWգbb".e4|sw]+LgΞӖ_1;uR_yMHJ>-FbԱ}>n]{rԶMT~-IR`IvCdw}`I;4y+PPPBCʓ$5iԹlRm4s{yBB nT!f l 4Y}nްSnʕ$[]+Lsr<d2*,RM*Vj���z x���������&lQOXȈk.zk4fd7Y,AӫZ^~ ٝ .''_vC+Q+)I^H?ڠw6n> Iz}GIR-}W]O~?$ɨp|CI^\]{שuѪ~?_kGzJӳ5</?GV/Ҹ=chw{ԣ[R{}w}aV{gJ{1{uok@߶+}lի[Q=b;ZE=À>m+_h?W8F���\ M0���z̤^u/}]��ЧP1��@lE 4Be2g_L{-WUXe0* y !!*;1|νVfs=Y*~<HW4ʌ��rӟ7W���������(GE:R_uZwy~UUfcZu6IRLtu}W+��� _A ���������\JnڄYԮm#w��� x��������������T��������������6�������������P �������Ͽi'm������/YRTո<z촿|`������.jS߱cGܹ�����TwZ��������������T����������������a6+|Nɨ LFC^ ��p1s�����%h4fKNU+I|ߝ���ڙf}êS;ג-c>���������ȟ^{cqE���.ujvLE*%G 2x$����������gw���������������������������j`��������������<�������%_MɗPvvHЙ3Y^?~Lm;jtl6N8[$= mߑnL�����<�������%odYO=̭12WWֳWEEvmg}N}JwL7ȑ5z5چ$=Z;^ s%jCU}����W�w��������pyOu<嬦L-ݡ|mg~F)1AiCZ:75]y/V,Ng~Fz~~DgҳըAV@-]<Jڠӧ)=#GO?>SoV_'4{�թu[s&2k:7Ub)|Qw%j+ڵi'F\]ztDYyc:{6[KzuiួG+**Tw-ϳo1k_wยBա]OWϿ"ƒ%I'Nk=[4q\/FϿ3տO[uXۣ)?qer82Su>qvI$b6{ztk)q\m5m[1z['P4w5mZkL~Nћ[AAJ9qVcGuz}^^}=ًkdwd6**2D7IڰS~6I}K�����x��������ԑ#'pH+ܠvm-:y2]y:xqtK\ȈᙛյsR<?ި?(!Kpm?S׿6PB)͹qڴCԡ]czɘR$iǮD5k[&ISƐ_@Y9[|BBZ4Zڽi+((@y|oUnLPaa~>=u&O]zI5ubu]{}pB$)?ߦ`K;G6[8BO9 ԩCciȠ:|ױ ,sPv}Y9[ݸV4ƒ>\MS5nLM߻;IX4g BN>Sh(AAԩC}Neddz����'�������.sY dVPL&s}7eQ6qգzh~]M$I1kv'IҘ6*Lbc#Wjۯ:  QNn$nwx3)5QMtHum)(K!5l-ɨ"sq@:whRW�'I9^Fc)9?THYArj#$, x9xf}aOBٕW0Za܌b)0CDxvL&$)�T`+K>N_z_6c0TTwLk6i洁ZIRTd`RNNj u11z����'�������.kzUvXgIuûÏ7Kҩ22s6_kK -d?Jjִi I9}^}k JXOjשSWmк$Bw%ѕ#Ijצ^%IxqvI_\֭zGk׎'?T)o~1 oDY/IF Qn-Pe3zϴcg^[Iw}*;;_ӳUn-Fj߁zd?+-88Huj뾇ҡ#'`RՊQkbi_B~1}G>jjESͥ^['R))g7ҷH,@ZoN/v{�����O&-���?3Kjǘ����`?Tss d*يdVSg^/<{իէJyPsX1{JL:5snnw.*p( T__1Trs?5dg `0B����\SzwW�������jDEѭ2LmˋtPRE簪c;ym+^uyʌ*_~+�����( t �������pU*jfQ �����.kl�������������؀�������������@5�������������jw���P7Sa>n|2SA��jՊٳ�����XPUҎOw&w���sLe&mz,P}K��ױcGܹ������<\&̻OgϞz:~pv�������������2{sl VdtcW;�������������� x��������������T��������������6�������������P l�������������؀�������������@5�������������j`��������5}vjӦM_xϓ'Mҽܣ8c͛7/3OW:u=L�����jl�������<ZcԼYR=jAfw.]3f&&MRFjt >/_~����� 6�������PCN M2E֮$}j۶֭]CZJ.V>\AAA5kɚ5j}TYzjk׮nZ͞=[Z뮻N۷ך?VHH~-[V{Y <XYuk)Uw.[ݻo>�����ol�������{UK}1 I>cFzUy $_)))>srd_ױc4sR_pvN>q7ܠ={hر={٣9g+<<\VVT;&F6MZj^v֭[5fXJ�����.Il�������<Ú?o~h,^7 Raa%Iv]aaa>ǕO[hԑ#G'\!!!JMMզMg长U6TVo(::Zڻw֯_/I*TTX>Y�������������pڻw{d2d4aIݻ5}4kVԩS' =SVxxFWl{2ebbb}իս{w <XzWܯ587 ؿ_7^}U̝ ����%$>N���rz̤^u/}]��:v쨝;w�PmmZ־?(..NyJJNV8Y4H*;IQvN7oC)--Mt:-Mcbu qq[W{QNNbbbdw㕘Վi]}o����WXnW?[£`v��������%7ym+kC[y<_DܬKRryPgױ<z�������������������p9�������������2't25U}m@)**Qw���ӰE'gx= ^O?kvIyf <XÆնm4fuUwִSմiS8p@rkґ-Iӧd;wN"-\P'NPxxΝCIƚ5kvءN:iԩڸikG֭[5սGڵK'OV-~|M][G&ɤԓ'dRdg+@-RjjBBB4o<9rD6ٳk.o^ӧOצM4]wuuȑݻvܩ'Mڷo̞غuua-^H ?~\˖-Snnrssxb>}ZfYWRb֫9shϞ=jӦf̘~A}јѣe1B;4axkN{̙3հA<tHzB;Smݦg( @ ,PrrԩnIS-5uVCnA? Au 7Sǎڳgf̘qqA-?_aaaJLLԲeTTX ~Ȑ`Эުcǎ)::Z7|~>p@͚5̙3m6uM'L(!C4tmxҥ8Msܹs-YDRYq̔n/EDF[n)&M4k,m߾]]tє)Si& 4H#m4j(u]vҔ)SԢys?p@7|bۋ)5UK,QvVl6;BCC5w\>|X5rS4mڴx0@׍nu]^ziΝ4qZj}kΜ9-ŋ'tR*//OESbBׯmhڼyxvW;vЄ 4k,կ__[oUŢǎiٲe^t&-MAA?OZiƌիW/Æiھ}ƍxq 5jHԂ te*33S~e4`x:p7ooQ۶mSn4axm :TO?cƨ3O&5o\E:i%;:{lxJIIQTTn<xPMhg<MM6i6lmۦѣF[nڵkNf͚_oYxe0u)-YDYtI53vY|M6M7ntȑꊧ=sNM4I-[uӜ9S>/V@`N8)''GZhN:`͛7O {noNӧO?OFiˏ?jתO>ڱc&N6mj߾}T:E l3򔝝nMiii rSRRjM7i޽jݺf̘-[رa>\?O:h޽yjذ<[,PHhtwVPgd2i:zbbbt7kjѢnt]w׸+ *cեsg޳G3OWƍi<EFD(!1Q˖.UQQ;222$IzRw?Mj̙駟ԵkWM4I6o.'W=Z]Fw.JجsTXFm쬱xQczC;˩vL&<yT<y؄5hg߿wؑ#GgmFٳUn]:|X-lYc<klR֭[nٲE{ ǫ}Y56$]c uUcϞU3<kղeT:醱cթS5OSxx[TR5UVqg5sƓN螳yXלͳrj9g=qB5gs;vskk56&{檱^5kYc۷4לm�9[޽2lAAAJIIqX9&&~s}x~Jؙ3UA59ۙ3gl5gOwW\c=lj9ہԼY3c6t 2T6m@5̙3ksvs6W4HÆ6W<j)jּy{d4*GM=yRaaklǎ[jΙ3GeܜsSdQcޭؾ;akV{+e$Ɩ5vPFm䬱 ,PXh]5f;Og&;vgݶuw=g󬱞s&MXg<rj&n߾]]t񮱮9v5媱9-x 56+K6.Z5Ê󮱮9kkuyؖ-jaW YcO:]c9sۣn޼Y_͞5K\䬱9[nr\56-Mf9ݻWm<l{Ҙc댧Ʃ}kl9\fn1g]9gCƍ+&]c;w.s)<"yب(cVuܢZY񬱝:ij"S.⺈Vw]b6k^"}/uqXs2uChHUE^q .s:8k%.RVr]$u5%Eb\sUc.Qc.Y".u/YUc}ĺH\FuEB.к Erug]5(V.'zQc.⪱^Qc/ںȱc媱孋PֺHTԕ.Yc+X:eڴio߾ז-[ԼCOe<⾇`Vua��2k^Lv:vpd2ThHBfrrs,٬L?~\:sN<LMUZZBCCu1gdo<fgg+((HIII*((hTbbv9mȑ# Rn^dXu<{V'OTpHRSSu6t6'TfQ$)!!AFf`P<ұcdXt6=]'NPpHN>SNgϺʒlvfbb$@(11QYY:z,ҝmx'tYѣ̔bQRrrssm`0(11QIvfAAmvN͌L($8X8qBgΜQXh;vͤ$*00MHLp`2fsdYfe;玧46]j3xJHH#Fcq 9Rܦ-YW +)w<;vLx:zTYYY6ˍÇx2c1{S6SOIII))I6 W<+11QfEYY:lO:}Tq ;̙3 u;w,mxJHH<) @JHL,OJIIQpHNVMW<hr2񔜜*11Q6}�ٜ1W<9<ROgθ)SX'WI>99rD&I6S^nmsƓb&<kmMNVG {Ɠ# k\ܦ3ιOJ?{V'mrSGܹsxrB g ':,6=)):q}lIIIyē̈́fY9x V+_CCShm$lR1 S@53\DWKMM-aW<{ŰMw<wxKjyMϗD<bWX,x X|ؐOI9Ml5TOyyJt^سgO6=x*Yc %g+FݻMOW:|:-|MIqǓWMJRGȑ# w9J.ƆJsmzưWs8d|o=l^53tX{Y5swj19[UklP9R\\59[kbcnӣƺl>9gw6+>laa:z222,Oj+J\=ɫƺOؤ$pX{kw'לRO^59WfcVƺ扥jl9s@56޹k+mVƺ)bYc]<ǜ}MtœMלwEmSc}Sbbls]cKy%l'=<VNOG#Dgg=l5sΖs%uM,9g%)s69gKL5k&{4wGȑs65U5ޖII9[Bo*UZ)*:MEr.b\"KE.HNv/ºHFz+XqEd`]$(0P5" E *X we8孋קEY)V{]yMh]$Z">jl8ԺHh襽.R<R^9wGxjx\Y E\"cƌnWZZvܩ?ϒ<?24w���#g*3icqw_w���.;jΝ�����XJ#ݮ_G+_ڻ+wgw��������������c祇 x��������������TC;������QTvx_nww�����~W__n�!l�����Ehmn������\T{��������������T��������������6�������������P l�������������؀��������R^/*.9*((,|JS֤xgd)/㩩ھ#A8���\-؀��������R~'zw$I|E_}}aӻW?Loy[=>refe%_c'[ch]Ȯ^^ރG3X#GNy=5Ƨ_lՁ)˷wՉgklLwl=Tc���T����������~={VTTZ:V{~8ΤgQ~{́Zxo?T\Ek=KHIL&'MO}{ݿy]#uL5cJ?I7̙,=nDR{uA߻5s�։ԓݨvJԯ zIשEzU>&kw,^yKeg/j߁㊊ Uvq>_c~FmߕSt`K&~}㵛cW׫ ZGLX#!sPY>U^awJH<Cj$g׫Ȯ F^ݨ _Tߧ 5?w@8;����������p{oUnL%8P~N~PqzϟY|]_vH6n>wOoPxTԥSmߙ IZ5yB2wڰSK+IJ=WcgԮmR?G߸7JH:kxړVnnWl ҳ9zH' A7,I:ts ԩCciȠ:|D=lu_<}vY&6W>lEk:C1jY_|���T��������p+PPPBCӘ6*Lbc#Wj$5i[\.>rBs3rԲy}MWF^Sf^}kn@=$xkH6[~ڑ^ܹ\։Ԋh4y6-($\sPrսڶi1@=z$^6BB2 %IO?>[_|nˋݟx.+Wl Rt0YAqnzTXX(ɨKc4^)4ԬsJ@6 ;ѥc0TT���(O��������̍C<6|G=PuM5g3ԫo|AIɧ*<w٫?}tX6efꉧ-swӏ?I-?$IڲOGE'u>v=܏y?t }4>?J_|SsP ;?Wuڵ'Iql5o[I+}Ԩa$Q=b;ZE=}Qi_B~Y#tF/^ 钝W^J٪WV1cZwx檄����'Cx;��9r2z=i|%w ��B~Bm[��\l"}Q]6[,ҟgDk^2@rr+zNiͧ?hke6ɔ(j ݿϯh vCC&S>gf+R��wFO|nĴەkϖh+X{7]i��������\*xf2+iBX8wBC-9Tw;ymd3 ^$Uy[W4O 4*sN����T���������p TXE6w7����\b.?s������������� <�������������������Ebr������� l�����EqV[m������/uz?u:]P؀�����bCUz) ʯ�����i)55�p0��������������\؀�������������@5�������������j`��������������<�������������� x��������������T��������������6�������������P l�������oNmڴ)/yI{~yecS ����U x��������Ԁ~Z+{L~7kVG9lVեKccƌф}ҤIjԨQG/����r<��������jiӔ)Shڵ_m۶кkwUV)==څުÇ+((H4<}f>YFأ5kT^RmwU~֭]ٳgUtuש}Z oukw>5knZ=eeԽ{ww����� x��������Ԑ{OQj?w?f0d4$Ig̐hT^J/~Aᒤ+%%E֧RvNv:vfΜY.nӧ5g;Vg֞={4gljժjfWVkںuƌS ����% x��������Ԑ~XݏKAYYY*,,Ttt$n+,,V<RSSu}u2:rd6K=?$$Dڴi>3׿QÆjݪ^ EGG+77W{%I6 p8287 ������������T{uw^^=L&c~F6l Iڽ{OvmJ:u$zJ h@m_^SLQLL32W_U^^o>zw+00P&qګꖹs}:����; ���TNϑ3뱸NC/k���\ǎsNw�Mڷ瘘)/7WIj'KpIşb'I999Qu!q\NvLsr8.NujϞ=QLLBCBS||11:<5���jTw2bJgKxw׮x|��������5䆵4Mremh+o]蒜|IJNv?WJ:g<_��������\XQQQ2d$k׮8aw ����������eLQQQ���-:)?#ȺM$6LmZ}ݧI'w^O jԨu6[+;'G'NPQQԩ"IRڵed2|)::Z VZpEDD(''G Unnjժ%٬|( @SG2TXXXv9թSGj3,,fDDWEyyyQ``UNih4v*((P``bbbWRmFEEیjh496VCv6-PEEE s\ڵkj6 6\EFF*$$fPPMT6zoCBBʎOV5=d {ƓͪSymFaxO6<W"=۰PEO>bx2sA*Þ⩒1ޚ]9'G!1Ocbd*+sMS<&zSkg<UO%XQ< U&zSkg<UOfWO%.j(.VNḰ56<\ae]^UKAeSujlyTQ-oV[^<(r59/&^)s59eRc+]k1Wk4*v`DE\c+[n<{lPc][C"ժWH5j,"֜uklhhWcY'9}*:&FyXIjޡ2OqC 0H:}찿oq^<��ȹ'ӢbZV۾7(Eoe9stw~ S``nFI҈#Կ_?կ__&NԠA"ժnݺnݺZjժZl)ժz5j*4$D '$=Z{$3xbI[oٳ%I}Ə/Iz4tPY,YV]uԑjU֭լiSYV5lP;wjUDD/*I=j7iӦiwHϛ̑$Wr#?#F(00PVU{VLLVڷkxYVũcǎZT>}dZe24rH=)'kٲeysjܹe˖iɒx@#GdjU>})ժ;*..NVUj߮VbջwoYVjĈz%Z~+IM7ݤIqM&Iz`r5JdZ5EDDjsjذV5m֭[jN:ѣV, {L4~xsݒٳgk᭷Jn[X3f̐$w3z$iOhРA j5\zje˖jժV֭nݺj*$8X ?.I;fIotӢ 5{֬x7N4tj{n^ԼYxj@]tjUxx OG<q풤k35O>F  YVKԶm[5upF_߾x3NeKӼy[4y$IC>k+ԸqcYV5iDڷjUtZက�1B?$iĉ՝wJn&s%K4mxzz YVÝ:urSӦMզMw<SVUfYÇ sӄ t]w $IvfL.I4OO\A)O]~ZjѢ;ccc+$I7{4kLw<-^Hft 7 Iz| <OݺuSll;Z4o.ժk׮Z Ӡʕx%IӧO&Iu5rc>Æl6jgϞSvq<i㎧ SNx߯VFzw<M:UK,9O7,Is2M8QCiĈ pSZdZաC5iDVU7VdZU+*O&I׎|P4y$&rxZtz]'(ժ~}z]yS۶meZUvmrSPPF }Owג9gkt&d}I 8PaaZڥ4h ժ͛{]{Ӑ!Cn|<͚EŚ鬱sƎ뎧yœWmBVU5Z}3f65;̳&i+:;ɳ 5J,_|M_yg늧޽]\c۷Yc"#i׺kd;[4ϳN⎧<jlרQq<ǫĨw^^5G)kW3GtG]x.ժ.5Y3۽;zqj종 tg3F㏗yXלͳ:l5לm…lܣX۽b=l۰8l0`9^s6W?לͫƎ לW/]veؾ5vH5qʔ)s6뚳=FScs&MUc9gsXd9WScl5vx5gQcW:kͳƺl%kA;vXsŋiYcW<xSs6Wm@]s0 8{檱Ӧk |{Q ڮ1gkذͳz٦NyX9ۈ^YcsƍUc=l&ԜW]tלͫz:v􊧶x][r>r 0Wg-9g2xYcgb9geZR W__8l5gsukYc˻z<kl6jqMys6[Μͳƺl5kl^5sVUc6U;-&&F56((ȻNறsqv9g0@ۥK5g2}M7n;fϚ]c=lXeK"!%Eʨ =kw{ꬋxQ9[޺HKh]$ĺHSxX9[peE-*s]dH%E\)V{]G-k]h4^u.Ru;]s6[b] .QcZ^޺G"+.RH5u+.Ҧ"u.Yc=E*Xq]o)Vg]ijG+X>E<j/Y=kǺ?~AE`]佇JPѺM孋տL)o]۷d-k]D5gi5纈Vj]b)w]da"랳Pu{]s*.Ru*XY0攷.⬱]qOIrd#q&Uy&w���UױcGܹSR6mTzRkQppf98a$$HÏ>w��*s�����pUj*pia-���rڶmmk]�������������`%?펍x����������p��������������.Gl�������������؀�������������@5�������������j`��������������<��������������$>N���CӕsU'<*V;_n��:ܨA򍿻����%+C%DX )+`;���/WDRߡ���|8]ݍKVc�����.iz).>~]}twB|W_C݅W�����������`sd7|a��������������<�������������� x��������������T��������������6�������������P l�������������؀�������������@5�������������j`��������������<��ƚ"EGGnݺ5N}>޽{w 8��  o'>>^�����Ut1HR6mj4oLÇ Shhe7&27؀��PoUmhB]tv.GkѢE5:\QQQ5>F��3fҥKkA)&&�����UgU׮]k1Gxe{  ь3ԲeӔɓ5jԨ vqqz`9QW���nճvޭ^FҘѣeX?t͜9S6MXw PaaVKjJ7͙Z4ct1B6M/JNN'%IԢys:uJ)'NhaаUTXl-N駞RXXL&1|7={v_xѯo_͜9SFI-*5oQ۵ӣ<Oׯ/u��aÆd4s`_J?իoVo$i̘18`6l I+d2eZuj۶N>+Vɕ+'믯R �����\< ̙3˗+""B+xBھcV^{[EUM4I5RNN~>xPKsɒ%A-[C=$ͦO?T~V´i&[^koZ{GFAZ:y-[Ν:VZ>ǰk.8q1Zuh۶m^cݫnq\x>""B}F}7ںm>1>\}/{Q';,^ƍ?'WoY*.v|_<��rF 0@ nU;uRhhbbbp"=zTfYӧM$LMڵkկ_R<pN:ڱs^ze͞5K]tQPP?j۶mUh^S>9L&xٳz'd4|c,i!:~ycZjRRRʕ�*4e_wլY$Iqqqz_Z={T6mo>M<$[NOVhH$)&&FW|&V޽g$կ_)o�����.}ݧӧ5dfEGGkz4{,*%%E.Xug^l1_|EIBBBd47NE-7ׇ~~[AXh9"M7sN^6ҹΛ's Q^)cڸi矗|'Izkn;V%tM׮?~߯;nݺz甘 zI7hP*W:6��#00PEΉfaaB7|w-Ir8 ^zI| 3gd6+NNv222 ~wO}ݚ4ql6AA^_ziHXQsQd0Tz%=3:| |I��sYYpo<wN'SSp8Ǐ뫯ro/o~Kaa l6{QF+H{]s>V9�����UVv"##%I)))r8֭[G驧fSVVrssepߨH~~F؊1|t~\ɵ<(77Waa^DzX,***T&Q ݛ|s}|2qeذa>m6m>GcRAA+XB*㻠@A R;t|-��@ ,Ik)q嗕SN?cn:z*,,ԇ~Xo;VcǎU``32$I#FP^kau2 J=uJF6MI믿 gP~~1msU8ƒ-ZFRcZj6nڤ{L}Q��WC+ Shҥ믗z_~ƎyTTXeYd5knMo_"%&&<#ág%IgΜџ^~Y%����p8;TNn6 /(l֝wީ0M;^;-SNtСJOVZzgGA˟]v)::Zv uaIU[;Pff^_,Izl…WߗcZr6Z듓s�}k  ѽޫDթSGO?WK-:s Gy.F|_ M㯾m���:߯s-}``f܏K(1)I_|񅻍HeggIHHrss+/F S1TbbbVJR|^JصZ��5Bh($Vs"##Yk;Pvvpe8$!Te����ը*k /*sN6mV>{mbd2yTu/l6n*ͦ }tmrur%; @&I>nMwCt`7UO��&6?fSffW7%ym Q5*�J;��pu;,%<UGy-Rǻ�����Uٜ$IGg6૽|KJ$Uj%㻰9k:dl��~]���|'�����Dw7A|_z���������������#6�������������P l�������������؀�������������@5�������������j`��������������<�������������� x��������������T��������������6�V~^p w��Awfw�����fAP#Τ*C/wd 5$>N���KCQq9~xn��:+fejw����K^Cdp`-4z{l������������� Z�������������� x��������������T��������������6�������������P l�������������؀�������������@5?k{Wv����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/img/wrapped text.png������������������������������������������������0000664�0000000�0000000�00000315541�14332737457�0022520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� �� ���0@K���IDATxw`SUo$M[:(P@6Vv U{U "/" (dOF{ҘIۤ|iܜ{'OyXVB!tBݤ BIgA!)΂B!R$!BH: B!HtB",x_\Hs=]ᆜ3EO (Sun_=jx\>F[ٲk$Ths ۳mrΤMv3?&?2t}zH]'ZJr՞nvPQl]3i]쏴ϰ$?C!"EYB!D BIgA!)΂B!R$!BH: B!HtD-R OWCC"Hg! Ue]ժUpBnOD"# OO \rɀ%F._E2x0jm۶/_>իJ`4ҹsgFChтE0glBCC1L48&M.!M7siuYx15r$J(M% 猷$Q*T\.]T*)W, FC>`{hZnܸヒϏ5kעp%Kt)w֭>}___�Xh6myf)RZ͆駟PT -h8w:uQR%OoJ <]K"{Ig)cd2p=]wp" @|\:e4ˁ9s&M70TA+:zt: z=ͦOFW^ɖu5|MO77ǒsƻ^3D²K<y2.\`(J9Bpp0Vն2x0U*W<|0uӇJ(v~ZL>ӲE t2!!,Y?/ΈQ(Y;v0v+R`^Tj֤B f ꯾BPY`KSL!$$Ù2e 1>}S2d`+N1}:ӧO_&W\T^<L&߿O=3EGΠ(Vl{.bޱߟ u譧ǒŋ7~<nݲ6N`0�DFNmgӧMd�|ҿ?W\ᏽ{5r$wδi8~Fu8r(eJfӼ9.\`4o֌={]ת+cGʕ-ة_ZENXt)ƍ,\&P~}V}=իUH"|پ2BmX#?C<)W9{!!!DFF'44mwDCRl-Kd971i4›�'N�@RXd ?hDo0𞔘f>>>ۗ11̏BVc2#4wn q?`0P(Lחre˺}zDFFza|ar7E/s&rKKӾuGGIg)գgO򇅹<VZ ڷp7nt{2vI֭=<GlRĖ͛yw4i??ez?q#F0nX/j/3s >m�yaҥ\|1c`2ط?GnݺDh@k!!!tL_Y3g&{dԬ33c0Oo3{< dSfȑ<V-[bX3v,W^e4hycDEEѴIZidb,_ao-[l63r(n޼y5ym[T*%Kd),A\Թ3^ e&OOKy碣t@reͨѣK\ؾYM6^OM9YrPTܿp=ηoNN0eo.Y0>�gϝcܹ.SF Nɒ%9ck׭?tx\7w.fׯsUiu0eA)ȾMm:}+Id)j cN<z|1hղ%foѬiSTZNG]Y&8tɥ�PL>|ȼ(n޼ !C`lݺ~($j: ɉp[cCGbϝ; OV-[vV|%8wsyʞ3JEXX{aɒ% 'ç?z 6p%*T2 TR\q<DFFZ.6-1EꤳkX�P~+Wk4@ Z d+#w'Yg_>l5[,(Nwe֭WPTM&ofvaww4Nd2ɀ(Xnf8˝ Wj? 000e,Kje>һo2SN>͟"qqqܼu/-$=ke �pBL0ƒŋ9sӫgO^o 1tzK:u!v6osN|];wp֭\Ii\G`` GXѢ\v w^vhܸ1�/^dET^ݥhBCC=O֧ݎeI̧]zmZl18r31f'3I/SiBZ6vZ*˛7/w*%=0'Ʃ3<-=___4 nZNL#OTcYb[=}ϸSN�ǧoiII䉎a? .Ijyz/z>q(q;p&ٷ !BIgA!)΂B!R$!BH: B!HtB",!"EY=]debtE2I:gdMve&I8^_\sHo{&w)[ 0EGٞRΙɮsFGdgXft­N8j'aaa�ܺuUN.?2 !BIgA!)΂B!R-0~NY@>z]yE=VzE=7041K- �O=՟f28;�G%wyGuE{M3B!RBHHm BdSgAZj*k@gGݺ1}4cZ 6V͚ZÆ1x`Oo !r%: "n߾ͮݻ7/-O>�|:`�_,[Y�3{6VdKDB X"QQQ�4mڔ)VһwL)S(_79wȂUҵ+5kDTRretR\ٲp"6mDf<фxX<m۴aYΝm0ax&o[vڵX,c|jQ#GRn]T*+/O\]yB<�^o j}}1LTo[a2j0}}mb2B P*tԉ]w+Wbn_wם;]޾#_|T;lU˖4i҄yB@pd.T&w>Xx1gN`0p,^LPPG~nݚM7PI ȱ]?xl# ݽ{GXf/�bbbqɄcwG;wn6iW_}& y6MwmdcN]vߟx�F`Сܺu HɊĻ !2fӦMo!Cğ&�<h[,ZÆ:J:<[VMK/ĕ+W<d!r 1: MOT]MɪoR`?r>Cӣ{w۷knzOty pȧֱϓ'eʔMl8cǎyzSCx.�YĞ'<u쩭O+V8<(}O۶q}Ď}ɒ%9r7n-3c Oo!rg$ xvw 4DBQYB!D$ BIdA!)ȂB!R$!BH" B!HDB",!"EY (((˧="%N%wI!DN!ł8oVUbo,"gȂ!"C$ BIdA!)ȂB!R2{Vӽ"ltB3pn!<{ͦ΂ODδj.n~w&˾yNXN-Btʘ:{3V`ӴFaV(9ZdV&\L@/o\ʝ#wPT!iR0fxk~/;eΜ;wbs7i:pE۸iP/ʻcܻȴ :\Zbwȟ?9Í[x:�,X�>ns߬Y;>>JlA|2K�&3guqhkW3xjzCIsJPС[2OTXmۏrNѡm]jTP\QmFax+[ԦXV Ӵ%!DuT" :E1kCJ%ibb덨*-F"yx6ݏeIn; g^c/ƺo/w=">^ώ_S\Q2c%н뛴hV#A^~,=鶣�вiMʗ-¹ܼ|]'m>n2ԭ]&g; o6x]ҕ;.guqikLluj!o@> ΜsӮM]%�3vêL؞lp.j 4o �f ":zӇ"Ky:*c ||&4׿V* Mu3CT* @ES,ZiӲV@b(Y"?2CsE7�P*0-r<�&F_OWSH>&3�j*}^ -tl3*uHAU䏯 .m-T*J%F%Kw PbIw/qVWC^rht1 RIвY-�GVe_xvY4E0{&`CLḭPq:oe̍( ^{5Q?8je*vRL%81n-�*Xg:sŶ~`ګܸi6̘ adn2Z8+Ҫy-]˷nx綪|R?͗e|>�^#VNtH7x!<' 2hW:zB:B<[<{U+^<\xE�EXCeAAA;28ZVf *O & ju8KH0v>In#$8Zl{N3j�2kҜ ?|pN+ќjSkkJ~r�j*oP"Ɍd )IՊ$s6ĉxiJBH�ѤpӤzzle6}Q�ԙI)Xʡ#RvO (D%pv] v =C<]d%Bd6O싕;x0y±AOWQ!Y"Ö} G_K8mNZK9%*Fg?s`ZЧ|Bx!,!FG/0VŸ/�ω`9@|M3V(!DŊRM.'ZhzcN$% x9B뫢d|:t%^�DHH00fXk qטx+͛`ըhټ i$!Ȱ};Wkvd.Q3?t)1OcO7C!R!!sr"%Bx,!"EYB!D$ BIdA!)Ȃ UjȦkB,$z=/<mw}ZΝZͭ[^j !DD` 'Z7B<s$ BIdA!)z:Ya;+oz6jU~+!dx."W>xܺyUBdÁm_=ȂXYUy.<k'ȵY_HfCx0t͆C䮣%~P+rj !22=1BOѰku4;yl̂cx%Zj*kcĝ'ҫW/OWE e=ʖeWĿ (@lSE!(((]p{̧E8Umϗ,IŊ^:ed?$<<Hɓr*U۾vs,ܾ}]w;<5o_,[F>}�t�Xٳf0glV\Ɋ ϢD…Yp!�Fd ԭ[jaòe6|lYO=~eeξmi:Sϊ2^#GȲu7j8Zj.T(]c6~!!!L?>]>)'3sƌ իi&4x۞z&-e 6… '[F?tx.#9%4o֌U\W_MWf̴:z7F<gS|XjUt:}e,Xʕ+ӾCΙCecEȟ͚1#5 :dJſ;m_w߱qF7;FTTM4u6M&vލVK 0 0_}B !!`2{EZl׮Yh$..zI-0͌57x]Bvfh|}deF'88Hj˜cz*vAin[o9͛L2�jլ{mۢR(Y$Lqg=3n8ж3f0d`j5۶mڵkΌ3̕K.1q$^]B .]2d`+NhРZDT2{N>P;\իgOcO)R3fv:ʔ)_?8_|;urii BRq4o֌7&0W.~G�}Bx8SL!&6ӧO3uT"##iѢ-pik"E6l _~oΡŋ3}4=zą 7~x _\zաޅ v؏6nt9ϋ`ƏG…9cF&...}7o^/Yt=xbw X|9˗w8T|E5j�4oN7dƍiS;f ӧO_&W\\*+W.͝l̜5+ն֭[?H0m4x"Lat|9gw竽f͚Qpa,Xŋ4hڷw8??>ȕ+cnj!00vt֍Çdb>x1|8%Kw᳁1Y;vǹ ss8#"##OH` l޲eyV"γUH6V'@dR۷1Lj�NaÒkg<߭[9u:<]vf͚�h4ܾMNXz5:o Ohhɓ'Yv-ʗw[ HHH=cN<xիSL>|ȼ(n޼Z??J%i+Ν;Kp:vģ:Zd75m;q 0x[֭[ߓo޲'N`2y7\{jqntVvmF#wIܶWGa0(\0JԩSL6 :tF>Lzi4c#j|=zħW@F嶣�v:7!!!ӴiSw+@V#:wLQ*lݺӧO9綾{lg>ޝoΥLJEll,?RJjmǛNGS;/>|ȸyjG!ssJv9?o$N!zMT/>>jm~|6lҥKTP!Mm_ϩU%T^֑缟ݝoN5ɟ??j Nr &>|WTz|l'mmĉ΋w7=+e;ל?9tyn_jwi卑�pa * ػoaaa,Y3Oc0pK/&((#G�п_?Znͦ͛EosF.;<'Ncɒ%|2`�?3F@llC)-lbZ1i̚=aèU&zVK|�X,`0luT*mŒObhD�)ws=1[,n/I&MȱcLj>wJ6FîݻYh}u[RMֶ nj][Zt:ӷ/cbZFTb OS]pc~.@ӹ|+O>c-<z_BbTzͶ}||\^wnFh0X XT틤Ιh%WocgOw^ \Ε+9c:z [zL&͝;MADFF)5%~~~\t%KУgO[ qŒxxbbb׷/ܙ1l4mz`{7y|nd?CKpSd_Jwi%c$Y0Ltԉ#F`Xҵ+  �9j @4!CҥkWN<_. P+Ǹsw޽zQT)}ժUsԩSǶL*UXt)\:< e9~#F`ر/^<M>mAAA̜1Q*, .̞?WϞޠAb س40y_,[fƱ=ke rι8pfΘAPPkطw/uan˸r *UruSW2x0={p[f`` :tp ם;ɗ7/e!ɶ5je1TzEbbb0L||g 6F\tWrիWYhիWw_Sڿqqq Kpp0m[hA<yXt)._h4ҷO"""h׮7viuhѢsVܖi_xV,_NPPwys:֫Gň'&&3gΰlR�7n`矓/_>tn{v,\oOSѣ[nctt4焻dΝhZ رc<vdԭ[e?;lݺ6nܘ1ˎje|;._&8$%:ŋmŖ͛[.&MmeĤs_f~T۷oOve# 9>;ömۈz9be<cp5> ocr[,t:]_r%=zt?͛;wkZ NI倀�2ZmuLΜo ޽{n_ut92}VRIHH:J%<|02mϤc]䶗~WlYto tNZ|ҿ?tr)l݀-퓴=/0?8KIѪ'hpp0i>~2r-O<˼Vm,RDޟfbDgΞMv+#zуifQγMoǠFv)_g꺞Lmu2-Ij" iy'2ɓ5ju,]O&M([,gf[2˳vdիRZ_OpgZ* _ow]GG# {{ bܕPR%=\PP!\|9UP'Oy=i)33<_$r9 Lky8p�w4֢EC\v®;ﳴ"uOg 3NM7#=\re ,s&N  *d{FHKO*|+O[d67x!,x4ς.((ϗ,h4re~-&}=6mJ5߂s_%7‚8{sM^qqqt?$E1|8 6|1-V B(Xr%Ջŋӯ_?N>zRˍ%Աtnڴa(F[(|9FM hۦ JS`Xn}[}Z MHY#$M {<7OSιT*aaaٳ%K^/]v<p�HLm6y~:vġC�Թ3wݣv}<֯w,8<7ݹs5 ΝCӱn:)8�h 2.]:"1< ]9wo-8p΍`2d� ,:=e2h`$+Oʁa?7[Պbb6 %~ns[͡t:lR.Jh4Z'Ғ#D< v$ r в<[p9!00ѣFQhQ^@ڵy3ϣm۲y3˼r$(\;7}vDDDW쥖weMwn̙=^snd$ፑ !zFg䖰9FjfC$dҼR;y}F93Oj49i'9*UD}Ϟd#h6 pt G*DN$T9/zXTΎHHHpXs[$Yw?9X, wDfOm(=*̆BdBYB!DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\IdtBWY{C!V`hm?[@Fy,\xEz L{g0OZ7"x?-R7(CYOr<+9eYB!Y#!DFK/}碣=]!2Y#cVZ ڷtU�8q"zBPLt7$$H^OvJ*y"y㘅l,XqDvmv\Լy|l}b2fϚٳYr%+/'< sF)\ /_>ztDFFҦuk|Wxu4;IdAUZNG]Y&Jʕ+ӥkWJ%ʖϏi&7kuZ?ċ-ʊ5r$�zd…DEEV٣/Ux!<ܥSfMkۖf͚1t�Xt)_,[˖Oʕ4q7Y1 BGףVb2lT~L&|Z�Fcc__끡aͱ]?dJ߿χ]h49z2K-[P(TVxež)Q!sh"> Ppa;ƻZQlYzzW, cHdAQpBL0ƒŋ9s4 .db8r�ulڼJR8L(�`XPTt:,Y'?3iD;Fswj;>�f XVt:k^{5.o]!DHdAQ&:w9jc!Cr-F#%+3^I?G�s FFf9\r{|ٓ&0|ԩS a V{q=DB6%eD,x-YL|Dm qOTKKsy#�O3cnjkݻ9bAh@dDɒ%8afO'.93u4;IdA>_u=f xqr><QGrJ,]4C3xcdA28 !D&TGM!!!r|юڶv:%ςBdFR2|Aˬ[ O7Mdo̳ !xBzzj$$$УgO[nBA]iРZDT2{N>͌3̕K.w^�vJ|8z(˕c̙̏bI\~# 2fA!FV͚L>a@}n:tիA`4q'B.L]Qthߞ|+t12fDO$PIs#(JVXALl, TZ!͛7 B <y .0axoIdtOxN9C~OHphZtٳo֭[3o\_u6ffqtܙU_}Ō=D$`G" BĉVǏ'΁cG�>0�gϲyy!�{ ((XV+W�{}|}}+<u ^@-s玧*DH'A4 d_X,BǤIl}aofl ;YBn߾y<] !Y#!•DHdA!p%;IB!\IdDBWY#!•DHdA!p%;IB!\IdDBWY#!•DHdA!p%;IB!\IdDBWY#!•7Fٳν zOBmKҼ|<y2d=O"E\s=G6mUϖ-[RZT'O޽{,SJi<˶M+ν۾≴lْ *8\daa꫶ʕcʔ)ԡ(W,-[p`�9<xAGѷOF 'Omϕ.U+W:9u4;ɘ!De6ۧKG~ԩSܿ_~BÇ;nK,a�TZ1G-9ҥ̃pj5JܹscN̝3ŋ4>mꫯP(j|DGG3dPv׏ڵkѸIV+_,[bGwh֬W\`„ X"&Çs tÇiߡw `G: B5ԬYW֥@X"#G"_X%K ""彇bĉ SZ2˖-K\|<~!eJp w7SByknTV#G7O^UjժqMs ߟ>|j*ʕ+eɝŋV:tDl۶ +"7YȂ"ʕ+T(_Vhslܸ/={ѣG:tի-b6P(-SRa4d2d2qF.^۷^111<)"66yRpa[tjEiWBA\\& ???uݻ(JP(XX,O1 c9j_(]W^\~%KK/ٖ?} &.]ڥuד?,o֯g̙.?wѦM>04ɓ̛;oc8z(sfvێGϳܶqر\ +^-ooO"1 bŋgڟ Os-9,xN8j'aaa�ܺuUυ'tp-XHܽk}])By޽KJtqe._&>><y/o^.]L<y\̓'ŊҥKǓ7O.]Lҥ9} 曜??ʖ-V#G(Zq$$$8]{9}挭6ux�ț'χS1"+O}3M93u4;eSg88&9D{Ig{yQݻw'#&Nȍ7.lo2fALE 1¯;wrƍdߓ-]T�_߾slmρ8p@Sd `G,!<)-~H2qDjԨlZ??^U|yڞs.2e&o !3'-ڴnMpp0*KҴiSrO?㣏?v)wԩlܰxСYf"W` uRm8w,l6CO>aҥ;u ;YBxJR~NG&M8z(_ R.?l7ZR>8wQpzL2s4k֌zcǎ`* L Ŋӌ0ӛIx7FBgRr=BVөcG9Q*KjE7LP`Z1&F 1 eҲ>ʴS=x!$d_aQc~8"5Bp=�u+0x^|1GӶm={#FP(Xt)AAAiӆjժw>�4 7lh4bZܩSbC&"Ș!'ݽ{.]/o^._̀s.gΜ)]x[NٞKN)S4ݻTXf]9q6D1aDΞ=K||<#GBRqq=ij,HdA̺{m�#G\ޓ2II\tk8ymT#;YB<뎟8q'Y#!•7Fd6BdUЪU+�&OIluVZֵ+ߎzg+7Ά{CO 7zs&wܔ,QC38t0;vȒzm$0O7,!ݿCt2%KtՄxcdA,!-PjU_*lcd6BxU !H'A!RתU+4<c$`G" B!+,ؑNBN o,l!RI9ijEfCؑȂBנAvؑewȂ,!&4oΪ+Yr%~MߠAd# Y+:k.!F ???BCCcg9`sZ$Qx>^ĞBL?c4h@ՙ6}56tD aG: B́8p!r8o !‹HdtBWY#!•DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\ycdA=+:k(!R{&eU,[ b)p}tf',!V[radn{!REų\x�עOx""""8qB -6rxmx:*!‹xcdAfC!^DfCؑȂ&at5R?, ,s HS1$Y#M2d:xODeefBd {5Q" v$ {}<KQ8N+ &9eDH'AxBG۫^:ye֭)clJʤWTa;FӮ݇=ZzBTTE-R,_O(P6lH53}*TvD!!!DFFBxUVkoqKzNQGoN||qdd$_,[?PB/^eKŲe4hЀXbΔzreFI}5s&a/$$VʖUZ5 *뉌QÆn_J޽3} |HHƏu̚93|Rii!C(^xSVSJڵozI'jM)gxBq-3whG,or5 mjْA[oѬiS|}}ٶm˨#;w.=s|jJ䕳&~@?0~)u￷}9[?0r'K`4|2 -bjmF|W* HΝ1eFFFҢE -Zٳ l63q$4i6mӧ֭Çg̋bȑ(Jط˶~qcsx>Bkٱck֮QFin]ς8{sΥw^ԪU `ƏG…9cFv`ZWh׮Z}Q\GݺQBLf3 `A,Y3fv:T^zbŊfz3fD@@�C `08샟~iӦŋ<eCCuikZhղ%JsPZ5UFѢEٽ{7{sدwN&Mhݦ f]w|rv4hӧOkn4h`[&7^+WVd$׮]㽶mQT,YS,ߩcGj֨ɛ' v8/6lr9o-[l63r(nLی%w@o !pY�0[,h4b2Qk4h|}mU~l_. JPBlڼ_wם;.T*\2]vETRlY |yjܸqw}k֮EsJ,R֭[9}mp"6mDf(Rj 7O?R`[Vp9t:֭RJ.hڴ)ݻwA4oζm5z4}7CmuR cϞ=,Y8f$$$η{!Ə[|:pۋԟ߸u6kp~J_ %22 'çhU&}1=ztV??/Y]x^=}PV-J/εש^:s(][?Ёc4CV^?yXn~M۷ةKGp)ӝg kƾٺu+ێ+WrUM/;v8e˔Ç̋JsG$D" »%Yصs' ,˕+O̞5 Zرce4i҄�òKty`h%#jslOTŋӣ{w&Ml+;&&&;+& !{ٞh4ڽLv툏Ca4OS݌Fc:|}9p�3gΤsNTouzNGBB^ ɔXO7ՙdhݺ5 ,.]\1(N<xmP D:#>o]z5J.MP`>8|.]#bR[J%+V &6ֶjǠ׻WmR*SףV}}0p@nʩS\h4jْ`T*f%HYgӨQ#ܹs]e) !G\/W=a&t:qΝh4zʕ-KttCqP S߰m�pA eK0yd.\ŋQ*9r`u3d`TmӇJ(oj2mtׯO-db|||֟_wdEΝ͛7efYp!C K=j\v Ӧ3Xx1碣h4̛;Æ|=} TZ5q]N?q#FQm/x"XQnl޲6>>gΰp }qi+`kju;wU˖ :_ݻy=~|gt:o?`gӶmYa&Ii+ٓ&0|Ĉ4W+n; ʕ\x|@ٷw/SNM0qۺt^{sAAb(Qf7nz')!FRKd=m7aIMF9'*#O<ԨQ6ղl7xxo[.4oYzj,; t'444o)Yx1Ə֭[GPP:�$~h48\~VOV{h4bcc3zSBd,մk>0?&ɶMSk>1�4e:S*&ۉ~M̒a=/˝;wI:)z: le̙$ލL7&ezwضm[.O30\&<UrgXZ8{:*c�t2EÆ yA?)ܸqVr刎N[0  b1!P'OL BtrםZjժܾu+uhiik%rDg!YBYx%s=Nj/22GՋ<̙.}aڵ(J6M6M=M4믻<o{… QZt/23Cj Rhiiktn O$ [N,|l#GrTT/WLu.jժQn_�o]Bvf|:pCQw`)߼eKm:j(V|_|$ةzL????Bp3}4=zą 7~K>ŋӽ{w&N)]L'z٣:BAdd$Zb0fXbccA\xw7oqF~ش!;ϗ,I~8}m6jwϦM\\5k0ѳW/"##o8+gϞM5's=zP gܸqfƌťK8iKoNMmuwՋr%4h@6mP*L2yɕ++Wr9ƎCbP*̋zR<J" $ [N,\pzo/i.?o6%J�swP< ι dQn; ~Els5T*bccᇔ*U%Aā*:CsGÆ m9#{75m6ğѫwo5o8pY~=rСC7w2}}}ة<z.mu>VҒ9-[8q&xڵkc4{w&N:oIe43xtJtt4(}|jm9#7?v ;uȑ#iS" ro!SWƾms.ZD}3T`@Ւ/_> d�sԓo/iƍt�ls{I||< ㏟0)Szjqzx5=z MYm@҅ilfO[ol\'f 8'|"=ݾsX[ҠXVV+f?֥ &NرcD;ZBq.'Gs|JrL&͝-i DZ΃{C8Ȃn9!p.:`78+0d`za[.i.xZn:Ǟ=ޠj(V-{S#h4۫_>]>�V˰C;vlInG֭ٴym>aÈ|JZ38/a{`ͼ;L4ɖL|QQQ�ܸqN|Zٓ4pKߨQ#Z+22lq۶ڵkp~޾p|%ƍӾ];"""ۧORSne*J fX! yW\ޣRJXI̧/o C$֤huuiTF@@@k?0gl̟Oxx8gԭ[IJyV9% y[9eѳ/Z;w |W@b=`{1ߞ\ Y1?s8{Hn.}zVjnfU+Wңg|dD``˱Dlll:;RI?$%#;y=,HG!H,䄟"IOҘիsE֯_o{S~@KCEmlcX,LOcZ6 Hf$IK(@Rkkz/%]'4i[,dd{gFG!dp1 B3,d7l˕+.ƍ=)44u-R e (@<Zϔ/_> !!!DFF+T޵ֹ-SVE-=ݼYp cw cDj,?R/`{Zj.TaH5l&w^jVB; Fo4G]N yى,< Lbt|2`KnI&P(HHH,x<#I޼y3z4|y SТE -Z$Nw|qcsp9.a>wXG]rKK"XڵC?/_Ty1ctLf3'Oٳڽ `ȑ<Я*VիK R'yHdAx7,\JԩSL6 p͍ɓ'Yv-ʗwy;w6mW]c<[nӶzM6{\ 9.Z~޾sh4.%sIy[ofÆ1H.ŋٸa-ycj cNt:|J<"kIdDwBէo_Zh({}F@ll\ iP(X,Hq?c64q"qq 9H%KBBy6Z?NRF&za=]聻<"Ȃ̆=Y7v 111L&ѷO"""(Qs'-"wl޼u3d`TS-]=rIt:3gjժPS\Ri߷OV+3fٓ&0|</aaXly j5cǎ}gA%y7ޢӔJ%!!!SH"G2s\dq%@|||:9sj5 "3^jժ^cG1Jb)gaԝ&yH'Ax,\%DV(pWfzr\$Ww\1ydjlٲL8}>ħ>) 2fA<6oiE1 $ D YM: BOȂ,&!'HdDw$@" »IdA Yp ݤ ,8ȂnYBxDHdAx7(!<A" $ Dr___ h X<]sp~%OWt5D2$@" »IG!s:@?]ӕ)Ȃ,&!'HdDw$@" »IdA Yp ݤ ,8ȂnYBxBN,(g5 {E5m$!<M: "% ?}�pC=1alW;qE7Zŗ_f /p`.GhvȂHdiqCތbczwFWH i;0+GލtB|~=<+~Av*DY٥c'!0ПGt�TT1[ӵ"n|@Ϗ޿5]�bcu~:\i0&5KӲy-z*o6d2ӷ{$Knjx`(# YM: O:E1k˵mc*U,ط,ŋ߉c0(Y"?guqQr. n2_�3OTsV͐ONS_/3'wdG�\ BM}wHV.IOozAYp $t0Mh4Q(s+13^G*ӦeڴV %[vʕ<zd4SRIjT gɾG܁(ip7ͨ~[Vz&Z/'~C_ų:EȂ̆,<-R)3WeZ�T~ǎChh.rໍ{Z8ƾjy>BycĉS8+&jhKυ7@?nؼ]!W/˷3d׼T gf=GrJr"bŋgyw�EhcEEDDpijrJd!,, [ny*ѽ3H.ݳjlR$[FB__ugFw8Ŋ^oOTzi3yo/ΞJdA$4Q()vt\lWJ�RuS" 4ъ-u)ltD&tNn ܽ-m`FGhvB ͞}ge=SfmtG L}XNj{j.n~-mYCfC8»1 "us޻uض(+$Oh֥F=a=�/1l&}ҺEm^l%o ;Mk8o6[>v-11ܺ8`{p43Tz s߬Y;>>JlA|2K�&3guqiWkws5rhisnz%?Qb �vz6luԋ~"rl,D&{Çq�$ ݰ*'g{0-˼Z͛$v?x8=f|yy>>w)]D0fvh4aXu fNdջ.YwƎhÛ ^d�t붣�pyT*AoL6uySA^~,=),Dd̂ȘJRh2dܼAÿg�ܻ8@U!_A:dV'Q*m9�4jFzULf� F3* $wd=e|{r( Lɼ&r2fAfCD7n>`׻UfLx|~7坦5 L ^/ 4+=6XNʕJ0dXJ@FU<r5]>h@>v-  k ybx0Jf{z!l^5K1ymQUSfCHVNYrʘɳz{?l9@pP�k7dd2۲7&ir$$fiIK@b#!@@l-ɳ$ς,: "*V(FrT>.yQpr$�'( Dd6ȂH[l2Bx7(g<] Y,ˬZxڷ}a~ ʥeIly<jO6eV=M\~ YM: "9^D$$ѵ!TTh6K9e>ݘgЀfQ)Ȃ,&$wH.|"VMp? MuhӲ~~ -B.\P‚=$E$@" »IGA$TsX(A~f¤}!'?;$M~=e$@" »IdA$畗Qz)4M&v_D~  6E>^oX)/S" gA$ Rq)YPlX_.$ς,&||t5) Y+-yV=]Ua2fDw³c;xZńQmY<M 9foΝ܍aڄT*F_Gp?-֠J̊wc(]_'a0[,tȳpٸLu*m4ArYɐQ_3e\;<+~Av*DYӛNdY1 B glGX1x_wݙ0{\Kw};}#x|$$A}*X3goYhPuNXN&~v/Oz7F32h@3�>_R/޽G|i}{š#i߶.=͛I�8� F%Kgg-<D1 $ D fgFhH;-qq:^/Z5*+B**h#>>~+J< F-jF8[BT`z\Zxl+sd"ȂY,<+4;||TT!J<T IN5xp?P\uD-ʔQ*o Ǯeܼ%B=G.FPf)&v$44WcȨO{z3lS,(/O߇[_N|f)0�nݺxLPPG�.`0Gi{G΀Z-`WRnX1heX,Vz#~~ɿn6[}+딩@bbb2̜!|'yO_GêHdY1H��8_JEד($TffGA9eB6 aw!<&+W_|'u:wƦk^ݽNg%<O$c@" OX{Iq;wc9}j֑Za3lrx٫ܱLCm1rʘ !9ĝp-8g4w2vDLF3SgoB3Pp�6lMy:�tE@@Əl1_+�Q|YK6{? ѩC}2\DHH. 3t?bwA:NpP^yٰ#rN>mGPe<_7x2DwBJrTFfs|PٖiѴ&yrJAD}`ڵˣ|AX`z}Ԉ ?ΜFŔqԡ2?cr#^vW+!)gCbaw]gBT<jBxjF24t9% c@,tǮlBTTɌdGJ͝"Qbx_^Vy~Ư FꔃaP( Т'v P*&[Άu+8@ҞySyo12fDwBVLa7�o6xEK1+jms7L7dЗ>{2 qh\+wqvzZEh�"굻r[=BAV/Зlô$r6�~#ƭ#>^?_31GC >f � {Γ "rJdA,r̒S,H,toI]z9>Lѱ:.UP}] nc@v9 G,x;ɳ@,: "e!: IZbGp([OJf >K�A<rJ !9' 2Oz|Ŋ 2B" B !gHdDwȂ$@" »IGA Yp $X"wj8Q-DHdAx7(111"LE" $ D YM: BOȂ,&!'HdDwsQxԬ^UshtGÖzߠC!DHdAx7wKѹ}-OW-GXY"$@" »OBOȂ,&c YM: BOȂ,&!'HdDw$@" »yCdA3P'lf02f71[,th  Ý֐#R-sXG%HDHdAxv~?G/o0>jy[35kC Q}LfvBdЗ�MfRҽ˛bZ=v^ƏlK9q꒭`O�Q}߬Y;>>JlA.#wPT!R#WכOSꅂ]B<5rJdA=+:k({4/kXu fNdaL<w=">^ώ_bDq>_|Ah}|i�awv�~q._lM+vЦE[ ukIs׬#f)z9{}RX*C<|9wӻJJl$$!H_djըU &"_%KGhu�7O s-d2syfEmX_ Ё-(Z$ouצJF٥^jUM:iYwbjB3z`) 㣤r 5%S@nTS̞#riyv9-R~yU#˯Q(?~"n =[ a~� h\asn٬&bص$$35C*+wx+qq:> O!j9êXY^+p-xHxN8jxȡRLl0ho[,Vz#~~O7ŁhFIq;8V_yi%wu4;IdA26"$~cjGz 4) ˳pn,hY{a}0`u C!K8VB9rʘ ! ٫ܹu{ uylpE6x0׹gzM!D$ [z# ;_S�:v" @Khh GБwT*֒UbDq-re a~ ʥeI8/+Wнܾ7cXخ#Sz)~/{M1ԮYkq9>_ ZU!x O5R$6gn ̘={O_ͦ !Yp YZyj,ސ8JAD}s ,_0>jDP:ބ cHH0ңkCR$n=pYcԎY:E1k 7el8d̟ťX$$iլ&U*EӚɓ HIT<4,DWn )OYAPQb0h۪6׏`u=wZ`8{|/h|/X( j5xq'rb %[ 2lkt@�J%&Eu4;IdAY}qV~FdЗ>{2 qvzZEh�*Fcߙ?(Ji87_Jy^c'}CfS:Kϙטx+/ҥ 5/,咧.r.܏h<�̘N_eڬMܸ�_ zӻJJN,HVNYR˳`Gϙ3C0}l3,f||i]�כʴZT?Ng@VHɳ 猷C,ؑN&Oz-oQ7p\BH�pS?ɓ< d6nO:f~n"d̂nɳ V=] !D1 Y',ds7s##&tCyXV {HȪtF۸iP/BB@9% c,dMk~7o> _`"y(�z >?/ʥ}8t<B=  cHdAx7Owz#ǯgڄ=pɌVWCވ`/R k � b+xE_zpG69% cc|}UpuenX~9¥X}b5K1y$�'"#ƭh[i'cHdAx7OG�NgMe:i;�0cRP2ym.ѩ}}O7EF9% c;,@r$uie< !DɘY: !w�OWA9% cc2*< z,B$C,8ȂnYw3mlҸQJSgojб]= MO`D/BNݜ9w\Z|ڜ'ᛍ0sυ2m&DH.yfEݻ1.Uwys7gi6?|.odЗ�Mf]!3%Dd̂dn;ۍRVi�W|٢LzBυ2{Z'>굘^}, E�z =MhؠS->™ط,o4ȺoUZ|һ1:AbEo0�t0�@" »evdAo0:8`4ハ16yJ5p|[3DElujKY0MT<mZ֡M:h Lf ȃqߐ*o@(!9% c ,ݨ*k΄Q|7No{p:-/^x0Jg??MD\vSc՚]c #jV܈R ~^oN26?=Bd2fAQx,_pKd{gC;й}'*#>^TGՊlIHŊ^o):__5 |BBuz˭Ԋ?L-3sƻ:d̂d]BH�"w \ ;쎂"rʘlB-B/Bxʓv\k{76/]RfzܼCG#KdzNYp%c7y1 _Ç�ܹWS\~Ͼ3*?-eNoۍz:tovN!YlG:Pd̂&i,tFڇ%ӽ,Sq$n=d\�۶e嚝 CۺԨ6gn�FOX@rEyK?baPf( 2wzATйC}W gؘ51M,إ9G23?ܸޭsYz#/yz TJlOYp xcI<YjռeJz9h ̟Յ �L6uy�@ 2}b{~Mk'O.�f '2֭@&5�XNFkɟ?ĥL@; z.Qxsw-?_|Ah}|ie~�(BAZC5 DJ_duʇY$-'ǭhV5 qRx $*T>(Jv(Y:;7o?`z? ϗ=V"r6 ӄ:Z`J=>> {XfWBO,<% IZfC<W0n3uf qVAtJ�?Y^GHp�>>J^}NUDVY'y! �۾kg\|ǡLvJ)J"*u0dKҦ$I9rJrԫ[5K3uܹKJ%Y.:}s73_S*+'WA~n?doxI 4Q!DfHlC< VE;U,x<G9˳`6[ZS S[ÖPVd1̘Lf)[V8u -=el,gAoGy)Y[5ςR[PB14jU˨T>.JE; �}& BJ{d<]XR&,o �Jȟ-O)Y>t7ɪ B2fA,AE"%9%ςY,!<C,81 »(=+<]b9Yp cwsY<]5aaa�ܺuUBd@" »OBOȂ,&c 2Bx/(!<!̆N A:Chj4j;RQ{u߱=ΌυW__704qPV)w̦{CD�Ƚ!rWix(}<S1,sƻdpw ᙺ$1 B c!c\ȘrJG!$$^zs8!Yp!c1 IjVB=Zuciyh}-R,_O(P6lH53}*Tv g }NM+" HOȂ뷈۷okneӧ�˖1{,�̞ͪ+Y|9R+@:dV`.ˆժUٲŪUFB|=4jkyBCݻwo aZ~V]5sfڕu _.)1 BcRQjUt:}e,Xʕ+ӾCΙCecEȟ͚1#>X-9sPxqFr~}ȑn5o=v(6iB6m0Lڽ/ҪeKJ%̡W^ d2q}Rfdd$-Z`ѢE=Pf3'MTRlQx7%$kn ٳgW* HΝ1hղ%o7nL`\/^ÇP(o8q5kҨQ4u(X &MB͛駟ݫj 88QpafΘѣs(gT|E7n}s~ӦM#(0/pѢTtW^X"f={uP(tڕzaj Zf۶mlظѡ!CԫVZF-)Y$3g`u)S]B7od|:p cnjhb( EEqСL;TN?CHdAx/(@r"z=j�/&Jod2`4^ z3e&D= {Ds'v٤N]8\hs6;ub|Сh4Ai+Ν;rnӧmmL$mڴ͚QL>|ȼ(n޼Z??J%hXv-z .PdIu4mڔݻsx6{ysmƨѣj"EVٰq#?�, !!2nxn޺ŧo޲'N`2y7\_Z(Q8׮_z(TthU&}1=ztV_n}`p.Cr }]2ݵؘ0q"111|:p m*W�?v ;uJGG+TϐN AΊ,>|^={2qFŇ~Ȓŋ9s4 .dbJ%G~XVM@B%Wy!Sj:h`C-3g111.Q(yysJ+VKBB3O'6&`[>-;I&OQF 6s7j˗϶||\:Q(X,_뛸 ف9s&;ubD3dl6Lޤ|RBQTX,ǥKXd �111o}4&$$`Zt0kl}hص{7?3f٥Lwmu>6+`ۯ!!!dl7E>ɑ{C7G\?L&;u=ҵ+0r(�C֭[FJV _gJ-CT1c�hۦ �w^t)�SN%,,>9S>CӱgϞ4գo>DDDPD $ٓ%J`6~weTkuN/ZDܹټy3[6of4i҄{ږ~:.d9wmuV~}Zh���IDAT�ӧM#((3fxbEGh7w.C s\r{|7כܹV-[2lP|Zwν{\[76oⶳ3gX`f~mk֭_ϐR2geǥ^oŋ,^//={?~<FG YM>"2U/9ȳ`# υW=Q9/U.S?\=Devܙg( Ý;wUsƙR$00fK/fN$ڰV`0`X\n@@YPh(UTLjmuNKdP`` ).Lllմk>ş%1LV}�ʽ{-YjdžVTR2*;]ih6v1y: ]6Euڽ;l۶-]'30\dӗ:$ςxsώ +[8|AAA-R$]pWƍ3Q^:R2\Vt.gUn Bhh(uuZxx8ɓBdd$/dDg!Yo)3Cѣ}�w *DjҵL|s9;m6D͛ :OiUhQOZHLV˂) n_yfTRoY̛fCH!<,䴨~Fg}Z��֮Yh$..zQD ӧ9f̘A`\\t&<U˖4i___6noq}΁S}v:]ts8>aniڴ)ڷ 1}:ӧO_&W\\_|˗/]vhZ~N:E%XbgϞeɩ+)@R.>mAAU*>ޝ!ּy2fh|}})�ٓ *`20`�Ǐ L2uیw^|=j8y&!ӧٵ{7 4ģڛfC<y$ u$yn-Yf +Ҷ}�HcN<xի[\r9j׮hݙ8i27mڔwɓns48pr9FѠRfW+00FѱS'<tݿƭ۷yqȘ:wLeQT9s`uoBBBOwaڴi\vÇhx׹~yBC]~I2x[喰wmr"$$U믿[YH"!BfpۯR0LsYVV+f 98rH.s㎻�f___z9{hk)R.  F#6d2Ghܶ6t:^ $~?oF֭d6ڣL&ς$  3ƌKhܶ5%* Ng۞I3F#Z7~v[bgqm | 2DHG!BfH_R%͛ܩn/pJ%˿B ?hܸ1۵#""}P~}|!?s'Ms?d2_>_ʕ+cv3EpΝhZ رcmw [-Cvhܸ1mnQ ^{-q,Y?RJۿѣGSn/uhN9C*Uh׮P-]ʕ+W0 ={xA>ߡ䎪8 %88ضs[S'1bƎx�cZˇBx83g ((Ӧgw /V͛sq 6>LB8aB&YHgH6 ,5YpwxIŒl4`ʕ3yrl^rPTՋiӧ̭S9i9gJ%rE/s68  >>ޡYFrI%GCjX,t4-)[Ȝg!I6{v,!u在B Lj[nM.utJ餝i4~-d; @?bq{jmwzz: @/�{jziŒ͛28fO}#y@,dJ*<vݺ,_ѣG8i˭VL2Yn%Ezs%d$H$2fA9 qwWƔdEVpazt:TTl!88ĉ|ڞ4HoD:)9fi* :*+3{/Nn>|8K//V:O ppF B`ڵرee4ha1clwB<p qI|B7l`-.6iB6m0Lڽ-r#hZFMѢEY|9.\`D͛?G#**%D"E6l _~_%7‚8{sMu{ѭkWQ�ŋw~Xr%Ջŋ;p>Eř>m=%K:٩cG}ŋӽ{w&N˙4i~\`A4"{,DɓmT*?g_T)N:i�|4oζm5z4}:pɓ'Yv-ʗߟCѯ_?7o6߂FtmG͍0y�߿O?TRTZNG]Y&c?q|w.T*aaaٳ615/]v<p�soSܽwڵkp>DžJ"66vwtGVǬ%$2fAdBv2TAͤy}aL lk|}1F{94 L:ш` 66Vhd2oGϞwnl>7;8bu >Fh797d(P .\0C }V }R~V+ٜ\mO+}஭IAR~:2f!̆o,<}.]LpHK/ALL4ٲy3I&-׹y:={}/LDD۷ogΝjْaC؃M{?dŜ9}֭cСgǏZ0 2z(zS˾"YѶm?$P(4nܘw7'00}0/*e9.:չLܵƍ,s˗KfC$< -ɳy91ς;Ӈ*J4mZR$$${%[B@$Q])٣<`3o!s?թ!!!<x�p͍Fy)m?H'nkkF%y2D@" Y)00Wcԩ眓X,; -< 2R\.BY1o?-9: AקHmwMU_Yi)#̖i! | Ȕ-2d "!("CTdOq+ -(2:f(himy>>͹6'󹹯p kA?,8Ȝ!9 )11oѣG};g]T)xo@%h۶G4hЀEQ7' !.MXx15Ws2h44jؐ>n 38t/\B >"FVC8H!9 E!Uۄ3uR*p!VצLUVR_nr Zrx֔�|0n ud΂s DΝK3i$�mF hР�}zfK/̯ذq#k"v/YB&M_רQeV_r'sd΂Ȝ?ZjE۶mhcjٜFcեA,8Ȝ!dA̙҅3*U7S[oɒŋV۷o>DGGȑ�<x 3kLAj՘6u*֯RB uWRgJEVG5on{MG,- ,G6 ,ה8r/C-d΂Ld&!$YIH ɂH FI@!7,8H ,!dA!dA$ ,$ Bo$YpdA$YBx#ɂ$ B ɂI$YIH ɂH FI@!7,8H ,!dA!dA$ ʂەg /F]BATdZ6:thՈ#>>xWty ҹS'Qy~N"# s%|MA~oҺspwB<$kCtydɒ[jZl;E8DqF.o_fl{y NM^͚qOxx}vy0PF bbb_Ϛ5&Md|Vrν?V벏YfQvmDQc'{d}}9 BY]8 6cY`{OvjK/1}t0 w/mZFTbٽ{7K}ץZ5k2o<, �7k111XV8weX,z= ]hߡ׭O?{�v.]]Qti/_nw{+Whd30go|W^z#G$.>e?^MHH*:1h@:vHBB�+/dɒ;޽z1x7hЀiSbZ1 GBAGTުUo׎%Kң{w<YpdA7YpW~}YgбcG�l6K,Wt҅(VeʔҥKX,.\@*U<<q$ƍs^x"ӦOQFR8q3ftyJBR9OpR^~ϐvڄӱS'f3=n62Yk^񜐐y{"�V\?f`hb8OZZaaaU*D۶L&V+Ouls2P(r$Yp9 Bs_7vBR@Tŗ_l\zK0T, 6 ՊJ01--ҥKj%Kb9.i4~Y- w?* Պ^GP8ߩL&BCChrtIII7>z}Sk׭s>~V+7ofo7)9mѢ&N̟_ Qd΂M ={66Ǐs9^9+Vx<cƍ4-ƌZo^4^ OuFQlX˗/SreNM5yf wz:�lۺZnGPV1^ ~)ӧM>�رczm݊B`�3u>߳SN( Ǔn'99ӦQ~}�>x}< '  \>.~ q=J>}0L\tҡ}{W&أҠA_;&!+U1#>;P;,CTd$/@דn4Rvm:wy}59qy:J*Hjj*!7'ot:IFP>|}Ш՜8y^N#22t+l_պ!*2R:'NDRzu\RZ5kr%1$bbb~ZbŊs$%%yLvt<V͚zsPJBBB0L\ILzj׮V=dzwIOOgѾ5k߰v􍳯8Xs?8I6XGEn"""�|r~L&oSPd~уݺk`5X]]G Y3g |zuej*[,zt~=llPvԉ jj36l("A,8j!9 Rӹ>oMVϩSk̛7/G}nV~tXFXcbbYFomfw>EQ'!΂眅ܾxgʕ+RdL2Zya(v܉jf1h` B&M̙;ZQPT;vI'ҥ>Ovbr4p_|%Xf>߳1GӣgO֭]KhbجV>۽˗VQxqj5+V@VϢ c}ݎVV=z4Vd׏w,B �0qDc=u,YFATҩsg65[.J2eT_|'u$YŸ,ԫWrѩsgyYZiCJJ zbŊw}2z6n3R0xyfΚEzz:;t5w�@xѨը5 s!=Ǐөsg>;vϿbyxm[|9оCg);uXbԮ]aÇcׯiz=]vet|֭aÈs.E$ ,AOT*n`@Ra6CBP(aXfӇO=E1͜:}۷fpp06ei@… F~YVj5e˖u>ղ�Fп?~!Z-*F`jfyvԄ.܏Uss'\qΗ}q7dA,?' 9siغe �ơGfضu+7nĉ-L6`T*7QD]ڜ4igϝCRiF^}55]ƶ[ٹko߾ԮU #KKKm6t*GTd$so~l2c >L@@�۷ml6s1>x}J,I JTT˱矼p!6nDP0vX67mqΞ=wARq,;H ۖNcuIG݂ԔΞ;NB >}^QIbRTV.^tÏL2:mu5+&2J0ͤVZzaHII!fzѳgOfΚũSI=UQbE.m:jGd>_=w'X#|G.^3N,- ?|: MLt4]vej>O8|o_Zn͉'Xyd΂g'u: "`୅ :69Sp<hZ~lV+~]EجV~ٷ;WfGbc9vQIZ޽z;Q/6$˗Gkp?e*" !,de^_:"~xVe4p #FȶRzk$t|Ix /VebQ9isӦMJ(|sf.k֨ALLR{(,AKx˖-cm2 hԨSLq>>W}J۶mh4Y5Qɮ]ЁֱrJ]δSf]j$�{ャz=bcc꫷+&[oId.犇#G$ 4`ԩXV ,屎;7VV˪#((@޽3g۷ms>gtؑvCjjaDdA!(|ɂ{Mo2 =j$JIY \T*Tj5 N^3fGNFzr/JRBV;Jl6,YB޽Is ..FXXXu9rXw !--bŊѸqcXYv($YpdA _^!'k$DEF ㏬y̎?}d ZKG=8 HlnbP_6@0L�(JK.}RN֬]aüy+We�?X2  ?SI ɂd᫯f57K08y–͛yeK6_Tn.5j֬VbTk/^mXf ʶ[Q^ 9j$t:gϣxc\.\@Td-_1rH*W"H aAۼ7Ƙѣyi8tJ)S4hӧM-ZP|y>x}OFDQ$ɂY^m1YUK 2H�\!x㬳ٳgtDFFn08ȼF=saYF ;jDdJ*`6۹׃p瘘8vNGJHLLt& q+0JbK톻5Bޒ: +{Rgp׌: y�? /Fs rNc„ 5*7nr眴[ٓ2ek0}Q,SD^zz WF:uC慑#gNpnBԺE~vJz<ަ~o8x%sd5׌VeL8'|ze˗߲ނ^x{Y/`̙Xf>߳1GbJFjoai޼9{+Whd3x xG]XpKM(Jv;w]vXVv; ⩧㏣T*yo*vؑmɓ&ѴiSV+VFfe( R={(_<cbX,<x3gΒ%+WRɈ#xw\jK4m̥/_od5$ BP8^ϕ+Wҵ+=(|M-{ٻwQQk4( T*ժVbw^/_[ rA8A]6t L=ކ{2ep%, .\J*�<7p W^O><Ѷ-& Sݺ[�P\~N;;Lk׭_'?Xd yZ͙3gXjԫWrѩsgyY}8jKH}$ ,AH�~'ڷoFaƍ4m4YVj5e˖`-XVZlIj>bvͺ4�d2Ѧ{?R͆jEus)^bQZl޼ 0}gUoʕ+�ǣRHHH^ݺa۱ZTfWJILJBTRf0֖pwys&&Lo,8H #Y�oh4\r^z uֽ^:DZ߯g}6m\uqaVʚ>رczmJ%X祠{u 2*5޼`k[֮YCҥٺmGO>=g Ysn?ӨQ#&L86pn{iغe ^ QQQDQ ɂY^m1YȪBr刋wȮނM4aȐ!?L<f3i$&%QV-L&Gu>q'O:/$$$xѠj=\ 55YѿwyɯJ|c]6ZǏoYovBTd$II΄ ))(/Nlls{-s<jKWZ ˗oI,-  (,̚9P~mΞ;tZl u7nfY[RgA GNG՛"#s{1I'Nt :4Wmذ!;u@A2vWƍyW&sz;uaÆ}l: 2gA ǜ^z1i$4i… 2u*n�W;M5j֨`!DqF^ˊ6[+4xnӦMJ(|{0dZn:j*cugLL 5kp9.p79 Bs΂wV}hYm֥nҥKYv-ŊaZlnv;{BsҩcG:v謳V̛͚7y~/b!99^&8Х5: wYb^O5֯[ǹsWK݅벏cfO 6u*V@>}=j?0 -[ү}ѢE WXu:G?Y *ĉ]CVC8H #Y�qf��tN?NΝ|w+ Jb"~+W?`ټɓ7ι@Ra6ӷo ŋL>FJĉ̘9* JBfȑ#ҾCؿ?iiiвeK^}5z}caÇ p7dA,Aᘳ�EnHy?� iiiXf*mN;7Ҝ.]{VQT)Ι㲝~{݅[yo_ԩu\ONNζ%]?/X@ll,ݟz#o~PCx& "oJTgѫgOѣ7}|5kP*hN�πgqn޽;j ׳m[Խěo:e 7jX,/�]8~a|,Q^_~Id ǺsNZ>0׭c۶m.xߧdɒTP顡DEEQgQ8J%N50Y~n[s_7:H.\j%D%.>ޥn�W[V͚;8%8-tJbs_Y9posT*>\ÇS'O]T(\.7B*U l29Uvm8xP8+.OժU]y^'M: Y[RgAxu Q~Y(d2~_wkƿH%s,DEFe{r;uY>8z^y<_^=m Q9?9 Bw#PdI-k dwNx5 qՅ^Ѧuk f\>֞zG{YfѤI,^sm1k,j׮(jd5Y� >ÆQ~}v; ,`?ɮ]U/ӧO'(({ҦulmO?7oSm۹t2vGҥY|9vyL\Ixx8F<Ü9sؾm9_y뱎9c^GWJcNV,_Nɒ%7v,{^a?z? Z?8JV}v,YݻWKV wRgA!dCygRN9CǎK,Wt҅(VeʔeZT'\@)/Ggةf7w}~,5Ȑy{"àIKKc^/^?<Ѷ-& Sݺ9ܶ} Id΂?v=cYT*/l6^%KGjjj@k$8eXP(<T*V+zB|`2 u ѱzIMMe /xe7j7?͛,xMve�-Z`ĉk! Yp: BɂB`l6?ιsxaH�VX73z4j޲~{]˗/SrH3V1^ ~)ӧM>�رczm݊B`�3u>߳SN( Ǔn'99kM?Ѓ .w`dzѣGӧ&K.qAO:oOjxy{Q4h_ qǤ΂Y^mqBj1DEFr cHڵ95kt:*UDbb"ܜU FPFV}Ve-R:'NDRzu\RZ5kr%1$bbb~ZbŊs֔U&zk-̵5&_ڵj?~x' 66x.=׿Fw-΂n,#_Yk$̯=z[w-d΂󜅂2 n VK,oWٲeճaCfsN4l0WU9aF( 2gAVCYg:%vwymzN:ux]^s`޼y9kvZ-קK.5jDH6C5=V>xk3):Y u?,];KP\9J%'Ofʔ)jΟ? FkNV+6A3d6ingܹjFJرcL<٥w.e�|k_}ߥ/b6==={nZBf,_8_ŋVYb*g}4vZ-jѣZ$''t~d *T %%'Sxg4 JN; x/HݺuQ*<x)SD; ɂd^z+WN;̳ҺMRRRջ7+Vtӷ/@׳q&0�Jh$&&ƣ0s,iߡ9оC�woFFѠP( 8~N;nϏ>ޱ΃=m۲lng:8Ho.gةŊv >x-ݏ_~tڕ 7WDdn![.C #..ιdTu,8H ?YPTκJlFg[ APb!88 зO?%l6sioNP`GجV .xEjEVSlYc!Z-~ggբR*h4 VkiGMRX57y g|9wI΂s3O&--[�Ƽy4k֌m[r N8ڲiFRH߾}EߥI&q9T*6n^Zsڵklۺvq!KZ0 9:4ڶiC@@�IWr!zDEF2&3f}6f3ǎߧdɒTP顡DEE iF cǎuisӦMٳ,}T*G2Yp: «m?& ^7-t-HMIst:*TӧQ$&%LjE;Hʔ)S&W!.>^Qsb"sLZj*qg^: 8ڨWvoOpW={dY:uyz4Xu:+V$..^ҦvDգ{wZZ=G}5Bޒ: +{PDGӥkWçu֜8qo1ؑ׌: yK,& |R1h ZCٸi3%ȊVfwZhj}\~ev$6#njݫ; hCBX|9III|f QQY"9 ByB_u#"x]n j,_A2bĈl-eGFB''Op;jY9p/6><mڴD^gPp07kR fĸl/2Y ɂd𨉰l2fϞ&s݀F1u_}y߇mFCUZ-EXn+WL:ݎl&99٥F˪#66ɯz~2ao?8L4Ovrx9rKbРAMj`00[رciys`jz=0 ݛ9s}6s HǎIHH�<k7F9I$Y—,D&s݀ݣF­Ԩ^ԛEuJBVP(Ջ1cxH�HHH`iԭW/GRT(U*jsfcɒ%ݛ4�ؿ?iiiXϟϑ#G} <(V7xΊ+k7HI% 5r½FBTd$/O?w}@F5�;psYpK͆*Ee $,, R/<"<ݷ/uaڵ 6khz*.[灌%�qO?',$ ,AK+j֨Q~'X,lټGZdκOuR#f͚hZ*FEQV-/l߶kpOx8lۺZ@FNs<**7… DEF޲_#Gr9*t>.|̽[ٸq#aaa=ƍCW�L2A1}4ע˗giԯ_YAE,8Hݶ [Yp�8<1Q s7: ={NGdd$̫k$�NPp0UjԨAFDVTBHHfɹ{=wctTTDg�wѼH $&n^3N,- ?|'u y c9 2Pb[1< Qt:&LQݮq.{Iq`=)S! ܿsGY_e΂>oAd祷zjԭS'\0d`^92} 8&d~̽M[yqk׮ԫWcmz6/'[2gAVCYphZV,_ĉy'yX|--{xǜfΜl={3z4+VdXV͛8,r%F<ǜG}ԥ 1a^ڴnRn{nڵkjn3p z)Z?8JVbǎ[�<iM6j?`ZyaHl6.[B`A(J>߳S?&1s&,YBrP*1wyǥDf\+/EFVC8H #Y\r.]أ7ނ~{:/FB@RQjU,V+{e張p!ЁڵkNN0cm1(S .]bpTsrUmb2Z<խ}�ZԹsv:>�x?%KGШ՜9sUVMz(W:wguهWH ɂdয়~}h46lHӦMs]ojEVSlY�6oقje˖TV#F`Qެ[H�L&m.u aXlXVT7bz, ͛IpwV\@\|<*խKPPvJJJ Je{4Ĥ$J%*ylkm K}7,h21a ɂ$ BP8oFÕ+WPn[СCԮUaXxgiӦ !!!Ujժ#;^g֭(Qu^ :^ 0 R Fe5.]۶qQØѣyf\5o^v;?35b„ zc綧O&--[^kKx1A,8Hݶ ,/Wxg}-x1дI ?äɓl6JbRjd2qQ7:qBBB Z֣u RSSu {wg:ڵkj9~8zk'DEFLx:7 z))=wΣDppK}ȨP|y_ڈBޒ: «m¬3 s>L˖1x_wkƿH%upYvkt9*g 0b�&M̨ѣ9{ 6sN>oСZ&6@K.}-s7n+8ccYp9 BPx,�+[̘>s8B,M߯Y-WQ4jԈL5nU[uNTdd혘=x^!sj5uԡUV㣗M-u2gAVCY]b!::U:˖V9</źk -V gwcY{( 8N;ұcGgo>ٵ `ڹՊfc ͚ELLLFX\ł^ ׭O?ͥvK/3x`}4mڔWoεW-Z`saZ1 ӇѣFP(زu+A.ڷo-ZzjYGWJcN6qDz yNVC8H +Y MJJ zbŊDEFbHOtܙwg|2p $&Yr% owbqyO߾�Rҽ̀�.^ȴiԨaaaT*N83]RPT .PdI}߿7x@駟ؿ?iiiвeK^}5z}w[B||<o/Zؤ@ k΂ٸifz}ƻBZ~ B -- ٌR9ڰX\jd'--Y�ҥKj%Krc`۱X,X-[zo_ԩu\ONNβd3ٝy瓚ʨ^pr9 K~u>9 1g8)B& ) ~ٷk׮ѣ{w>Z+VmVnܸ'vJ%o/Z�3g\dܹjf̘gso3mNM5yf�, �u  s8~a|,Q^_~Id ǺsNZ>0׭_8־}n'99 ciz wޮY_΂3w20U`"#9q$: *pizƀu5 v1p^}D ɓm;9p@T*^Ç-Z͉'.u pN:"�TR&sڵkC<VN={khh(#"+۸rs 䨷pfY[RgAx%|/,a2Xa5_BޒBɂ/?+^.qd5Y7gA^DDK4H9 ,AJmՊKc,::G[d3iii\t$Ç�\3*$YpdA$Yw% kb(2X($YpdA W_ EYDDp3\xouDޑdA!dA˗Yn=+F+"H ɂdAQP$YpdA$YBx#ɂ$ B ɂI$YIH ɂH FI@!7,8H ,!dAYpL'I_df$](o?]\9zͰCtNwG_d}}߃,x& .1ݾ $]:9p|٬YhҤ �ujצk.DEFlӨQ#B t~]xl0d`^9ң_6Z zd}}9 B& NڹՊfc < Я_?J,ɸcݫ6mBղpB?`�څnw8mv~SJ '0g.}=j͛7]hߡ\Ixx8F<^wyĉiڤ v9sV=j*cǎ1UGPP^{TA2gA!dӷ/�ucs:vȠIKKc 2�D}wbfd2TR7˨T*p!ЁڵkNN09#"lܴ?g @Ra4aFbhܸOs$ɂ$ B BQP(HKKbnbn0ZsyNkV�lv;v{?3ݎR^T:5Lzl?CDfN> }qU] TA,8H ,-v;Nɓ믾?dAyuDEFazj53fn<LpQtibpaVʚ>رczmJ%X~ӧM~T*o+j֨Q>|87n$,,1GҸqJ-$YpbJ>T)W-sL rm+W-u ΅Z5krI"#ILJBk׈wNדDNG\|<j$.>eD ɓ4nъ4S@5jįzV.9Ǫ'Oj^: $%%ylV\gTd$eʔs$%%T,ɋa^u I!: Eى'\Gr;A8=yqx ZDGGsi~,z?zۤ$AD\|K޶yI,8H!9 2ov1"j.)C[R",a|ᇘL\۹S'6lV͚hт￿Ϟ ud΂ȜMַxV8ԩS3khȃDU(Rc! 7fί͛:Ю];龍S2gAVC?' vv[Y_W_bŊ(JL6u*v[ 14yK{5b)@FɯfcDؾc cǎ(PYtKZ֣6;KPBRRRm;ŗ_P?&7__ɓ&ѴiSV+C /"d5$ B BQ娅кukVJZZ� BP`٫cƌcgYӾC> ŋ~}?.vǴz6F6|8wo 3gXj^P\~N;3{l_"DI@Ƚba%�\r7kzz:جV`J^\xqXvzJbj#\T*lʕ+$Jq$Yp(d$ ŸIP¦2nXƾ"j屍{oΞ;Jbƍ4 29z#ܿ78|o>x}*T@->m�׮]c֭ 0flp_5J<z&΂F,Y3�Wnȑ#hZg=:t: '.>: '$8.p jDGJ |G\!^O\|sŕD m8&;2H%u@,E+dk!3:dmਲ਼p $]=?s?3^w׽ $ s@,!9 4X>gA!ɂ“?% P@HGo�Rjޤ߳4p taK/9FU—u ɜ!dA䭟=+':bJu_z{SP0ɊYN< sH៮]w*DA: $ B ɂq/H ɂH I $ ,$ ptI !@VC!1Y uDf2Ou 2gA%K:42J_9 2gA9Y?BzUjZ&88]U*Wr*| 8ׇt9 ,$ "ĝ=ItL J",, ಊ!s-8Bj7p)$ $ =WT)߇*-ɂˋ{;SZ4&""˗/{m+FqYc%U%5%t)j5ü 룷hAB !DJz_O>uW2gAd΂ ɂH FI@!7,8`$ ŸI Oɂu `A$ Ÿ@$Y)Y$ ,!d` ,!d`I@!7,8H ,!dA!dA$ ,$ Bo$YpdA$YBx#ɂ$ B ɂ/h/I+dA _xkO"#]th׮]jhZ_+kI>CGI)Irf/bXHNNűcYlj¨QL4MbZ:lG;cbXp!dz=0 ۣ#~qJ%ZŎ;|}*D&ɂ$ B BnU*f3}EѧwoRRRջ7+V$*2ZԹ3gΙ3gXj <(V7h㉶m1LXVקAy,8H ,ł^@Vc6v!!�\rxm$&%T*h4\zw-mXV6oL… F_QI !@VCܩ֬alۺ7np mqFcFFV3qD6=J>}0L\tE&!{XRUU\< #::;oHܶrբ\^7�\|٧}jtSfMN<NB >}^ -NGJHLL^ۨ]6ZǏ; _)W-vr|ivy7k x>z$I@ݼP8yȸgg5H}G[9i>|qאdA,YBx#s$Y™,DDD_ QDIPK'="B  5ym[ϛ X{ Y ^=z%.whJQ\+[׿8"xeY_%Y§ K˗P;'K8z zɍE$ =j፬[ts/"oI 'Y>_B)D&ɂ Y ɂdA䯰\os;?VF\I@*,,?nuWDQ(o`AI@)c`u7D5^dA!dA$ ,$ Bo$YpdA$YBx#ɂ$ B ɂ(ҌfhARV8s_n$ѨAUR $((ׇ,8Ƚ!IDwae�\|V1u&f}L`V~o-aWla΂̜T3_͉SHLJq??t8|Oo,$ "\r9onѿC &:l)xn|a~;tZ䗻a6[8]BB['>St�[3pR.]ΰS� (�K}Α]KII8ޜ;ؽ+SL ׿:ˇkc'87bm9~B[Rd1V~5FW!RRy䉩|{*A>1ѕx/8gvG.oc t~I4%YpdA$Yyѩ}c&܍uUC$'0h4jCp]᷃g-uD :h^?0QKڗD=Mkz|ًDFg{,TYMKH5aˎ}h2i{շԨ^]Zб}~ v"0PCN?�DxsT^G~-<iJ ɂH lARR)1-)S'Z7jQLIztmA-bRvTm~QHMMb*4i\9W`札̝4*U`4YQ,ujU`_y<OVcXQU3-tmp *6p]1 ŌT*VJ,RgPJ�o d,8j!dA6-?&0@MN�h߶}% @Mˇys. f^x-%Kݵbyٷ1=+K}s7#f֓7j`Ɯr?5֝L~+AA4m\q?j:?hߦ!/ǎӳk mɛ?!44~+zu\Ƴ`0ܰwc< z|vBC8?¡nQ (v]L2nI&-E / vݹdAPѨr?hwF.P*53͎h&88VGiq$'';k9}h% $Y $Y([_| 0ؽY(~GP*:P�:,x^G RNp /F]B[ىOJbx\7{麯OE>נɌY_e5>ɂ "k?;Y yïqCj䀯OE>Bs΂ ";vgz1!$$R1~7ZbK]9ԏ_Pvy؏^o"44e8WM8+9cqҖeQ2 %K�goFMkҵS3~=pEPP�4 |}rAVC8H ,§˓MB__ILfɛ'<3g8!,,tFn$a0:5ŋkixo._ҾlX9UXnL܃[y_j??8d,R4<W  h`G,&sDaV2&LzvkΣ-ymNFd4s4"=ufGys9#q0JT*fsF\i6[h [|}zn?Y,x_ !ɂ,f?q vfƌ.Rfy=JFM!DWdYSJ%[\wT\|ЭS3&M[?2,T\.TV+Lxm-7V;{,v5DY"oIߓ: su|a5Y{gNbݏlR)s\M2J͌ e&'KCYuT*8 ?' BL.-\.@Fm植7PȊ?Y(d~,/1Y "7Z>T](i5o,HG!dA?% u@!7,L"s@!7,L"s@IPbk| Q@ oCJd΂^($ c4\=n[nnydJd΂>'ɂh4b4sd/+yd` ,!d` ,!dA,pH S s9I)Y(dE,$ Bo)Y(dE,$ Bo)Y9 >;x!o�,k,s$YM!'Iɂ$ k7P׌ Vf͚Ν:Ѱa|Oi޼: &0zԨ<簡Ct@9,{z _},`{ #.x@҅¯N:yu>ǴZm"#j.wC5_oVEy[>uhߞyG~\{?٨Q#Bnn_N^rN^ _e΂^MDQ`,[pF#yZj1mTv;f.dQT*;FZh4vl6t;KPBRRR�شq#l6V\Izz:#Gjr_2x0z]hӺ5JݻY.Y[.JXڶmAP*|gK.eٲe̞=;ڵ[7}<.={6څnGҨQ#N'v1W9|p~wYdA$YvڄӱS'f3=wGP`٫cƌPTFbbb�HHH… T*ȇ N||<ju{@Rhۦ ժVbw^/_ZBR9Vt .PJ}ԩS%!!vO<%Kh#u оC, �;3g"==:@$Y$ B ɂ(8w�&P�f3z8̩ӧپ};A1łBl6ɉ'ݏf#MfyV+-[Zjlڴ B2X,l6V+*kz= EEncZIIIATzVνG<6ه%ɂ$ B ɂ_[ujת^g֭(Qu{lW_QF FÝFZ SBZhiӰݛg}6m˗9z#v;v@R9x,\pUG �iԨ&L�8q$-7Xݹ3*2 ףV1cOusPTlڸ1'J<+UJj1g$ v/Vj�.�._ 7Yf']IL`0PzuHJJB.*22ep9 G]V%.>CLM^ς زe 8sjԪU ѣGX"ŋd4r%1mgc5j `Jb"IIIDEEQxqcw:V}d󗔔Np"Gnx{ oGoтT@h@3G|r"?YF ^33gd՜:u],xZN8:*s@,gɾB sg ȹJ.TptdA$Yw.""VZwhm DZZ/_fqwت$ ,$ Bv/]rd2Q,8H ,;wexf͚w/_5yЪ$ ,$ Bv/_fԩyܪ$ ,$ Bo$YpdA$Y(l|}~FFQHI ɂHPǾ-S(o n$ ,$ M@n=].r,8`qdA($ B?% ӟ`A$YBxd` ,!dA,s,`1+"OSpWYdA7($ 7`b_9-?Qzж1sb2G8uB1Z[,[4ׇ*dA!dYmJ+㺰aˏy^"#Ù8esg=͂EL!~=pEPP�4 \ڼv-2eJr3<�:vhBvѡlzvk]OHd3?-B7K8Q7c>{374oZy|ْlھ Ϸe_q> AA+[/wdAY0,8NxH6ȴ=xU}k^O}'72'O]dST?1-T\ (�|1yJr �6l?`eٗ~Le@�x*"rtV!�~.k" #(PÖHI524jPTELݳcp(ɂ>'Bf2[QT*f+uXS.^e\*VGڂ95˲ͯ%44dŊѳ{ <4v,_~{XXX0MԚVmvG?f ݻ4GH@)6 "0@&˼%ɂ$ B Ba׭S3&M[?�Р~e&PT(DOgѻy}v &t^އ7 o&%%W^[KxVg_`b5$%�0-9q?bď(^\K\&@瀾-ys',\)/$YpbJrբف܉nBj1�.8˾τqyWpxW@- f2Y: ?d_Rˋa^y-}}Bɂȩ[ B1R(4Rj(1ݾ d퉋O,?gMΏ7DAנ_e΂>ɂ }' d?/T3_ߚKLJĩ ίW+Wnȱޝd΂ yk{:j/Е LzuxL֛{~}lV;az8O6qij1iz\1` /΄~eʔ)|{%C3�+<q/Ą|}N@-ԙhP4-S_jI@dvܸ!D֍xcV_o ?yzt1v=4#V{‹#<ۯ%>?\1El`Xb%Bs@�%$+Oy(�<tVf(NQKUhwm |\ F 2g(SU(J+*ҕ댟�Ռ�AAa2=ڳXmɔ*Y  @lܯ xց�dɐ,3`bVmJ,'YpBɂȍ/]g9~Z2~=E'n RZY�W+Is^[|M *VfkkYmT\mkx_+gԉn|a٩T1RΰaO\pCک͛`m<ե9<TקνKY=]Vuxׯ yf7XX,VgG�~N?VrR"3͎`"$$ΖYRg?,$ EULh.uZZz@snU!7Hl $ B3Y w͏=¡&8:?B((z#K}n;O!J@$YY9g<Or=T؏^o"44e94j%c_xv/'HK32jxCJ ?YdA$YYV,?RʕJ1 ؚŵ4 s+P12qW8v<1#ӨAUƿQ $ ,$ "k%Byl ôM-S][Уk 0, reKQׇ$rL(,ըVA�R E]߼m\r@3lh(4cV=Oɂ$YYyuhz_ T.EzʕKc2YP(%8RxE_J^( #'V+ٶ%PHI@T*%J"$Yp9 Bɂ QN,^=WuWEd΂$ B d_wd /΄ILJf̧Qռ:cŋkd[>!))5ӯC5b^Kش}oزNVESN6lϷekky}z~=pEPP�4 |}B,8Ȝ!dA%_b٢!@͚.Kg札$\H"%o*UsZroʜ<u}OX6lnG1sJ/ƌhOz/v`_SzY^Meˎ}0 ~?t=\R\td�7n`2[R4_v9 ,$ w �)ccjHKKzLz k6ԫIUu0̨TJKB.ZBT`FɔqkҜϫYO]N ,H4:ۄJZ|S usZQtԫI>EQ* g̍\tݣ€-ys',\)y̞o?JR\x Eo04 '{J}ᄒȽ|aBj1�.�._LXXo ɂJDR:ncz F`0AYlvL&3AA^۰fjǑmy7k0#y__Ge΂s u�~W*YjRqd΂C} }΂ n_w 2oX,V.$9OvtII)ǭ̭q?.%%n%<kGޯ2gAdA҅;qzV}'>1).jj3n00.8uL9 >Χ3&\ɜY !9gARxׯ0mr,f+s܁1D :�T �ZDHHJcƫ=r%>ALe�~;xDV1饮3\JtK6[Jm6ޟ>Ά-?szy7{͆eӶY>\cG= ߰{!(ک)U/d5C% $ Ÿ@$Yȹ[Fаi>kɈ8dStJ._ILfɛ'<3g%"8}z<@jZFg% ܆`NH`קa-yzoK6WSYq/o#1fCl#zJF Ҭi 7V>j*;@!So`A,%s IQfy[ŊbCVVgwsHUJL7+dֳ[smk36p?Mf4؈{P(a4f  P*MffÆ_vdf6E>M4gߐdA$Y(jתM{l!�oU+`.6 ]/]h43f8uZ5s3|[[?]G Ш)U2Q\Č9[X{mfP(;>9[3yz#[?Wõq෌ 1*2i:ΜM~PI uWRg΂wYYHO73wTkv:j9o}6FSX~5(~f{xqD{J.u; yG, Y $U ?AC.-(�oɎjүCYl/_: ӟ`AVCɂW_-XdHQjOV$YIH ɂH F7H Ɵ(IP(Jv $J|[Q!d01o_ߍ&$ ,$ hh4yCy,99Y.E$ ,dA($ B% #ɂH FI@aaaBᛏ$YpdA$Y/,,?nƊ8BIf/` ɂ$ B ɂ)|LVI@!7,8Ƚ!@!7,L"ISP0ɊΛ)dq5(@kF).>1%$$axV?'7s*l6;Q{z >A<In_w .o~w2-{KRR]\rdfY!#p ZY1g iiF}L`_0q:,7B >ʜ!|q3�+<Ƕپc?j\Īw0cf]Kȩos vjJ*e<1}fn$i޴&];5c{_ogׅa~?bX1-FVa Tw%>!A< 3ވVȳ/aGiެOsd΂$ B ɂ_q S,^�]lN lCX9 fa6tؔCͳvׁ¹.2vvq!=|NRIHHB4ޟogʇԨVҥKx=~Le@�x*"|}!ɂ$ B ɂ_b,{v"Pw!)UZmiimf+kY懣$$$lѽUhҸsg=s~;x/=M|,,,eGI@῔J߁y wr.kԫȨ8ʌ?k1*2i:Μףw 5n9P�X sf̮Ukk=w>jK0L�f#G|}!ɂs+UJj�\<߽%YoyCy{DDdD/_uܾf8<S ШxcNykmc2Yw\nü 룯 u@,ƍ4N&tvwKRgA !2gA^MN[II)C74g˜Od΂(LzA~;q7}i΂o<H ,o /΄HO71pػRN$}{<K?#hCF\ʶMlT*:ˇkc'7p! Fq (^\K'Y^dž?3Lxm-W`4Z(Y"c:QzY_\dA!dAn6oeX,V.$ak),[4>/fR{XK 3Cxq- =mԠ*͚hʘb`԰vւo?ʕ FulJ{`IN6�s),f+-"\W!>|}rII@QhԘMKԎr>n4ih}4N P<LK@*hTJF3իeK]Xi/O]un,]K >yv<’,`>2HDVC7#�Ə~VfkkYmT\D Z7䍅9u(r}lx_}{c5T*xe\bű}TP.\ʄ֢7u /Z y-3Q0ub�xH'H{RgpUrR+!-HHHm?ᵵ<aa &4k͎jCQqIт$ɂH J݁O4&$$e"JRR_dA !2gA߻CP0ɊTpISP0Ɋ$ B ɂI|tR Ÿg (r,5K']I /(Jv{' wEQ&9 ŸI h~}ݍB#7& A,%QЌF#F>&s<H $ B_d$ @!%_wAZA KP=(w=ǣI_|r~IdAd/I DA:K%Y(IE �Cv#2gAn$׌+,?quT!dAQdAVCAIE ɂ_2P.E.$ $YKQc[_w)J7{H$Y ɂ_2P1P0~(?CrI$YBu҅uR7(!|A:B$YBBaI ܳosK\ +2PD7{zۥxVmX6M�\t%55eD_B[igGhA*7gzoqwZm{r1+;.^odɲs6}O7wp!tq?.d;g>8)$ ,RX0ޟpj*o/tmS+78% _Nfdvyrs܉f\K|[[: ⿋TZ\yk{:jEL![Jm6ޟUaC(PеSSV) ק9 ,$ ���IDAT¿iF*U嫾X F>ߖUgm `̈4jP/v(�|1:o䗻nOmZm&7Gƍ4�NȾT1 D7rzoK6WSy#ԮU/vj2�<м4,dA7IhT&3mOA+J,kT**օT*%AX6TWj*L&Khܰ*=GqO А ƌ65A I\H $ T\.ݴkݐϿwVa<71g FżuYq/o];6چgn0~G?MklAt vp-I:Yn^ҵ}bUdu9/�vgێ>>QXEu `n*ɂ+,w-Wn_3aaaef$$$h۱Zmժ?fc2 s pHNN3 0oGoтTCȽ!: 0d@@Tj�f9y-Hro!9 B'nu ˽! hȜd΂G?|>@Z yA-fH I 7s#YO5ک8"((vmRlI6m߇b2njlV;az8O6hsl߱Y+EQT1fڃcQULz+~?C`ѕX .϶Ml�CV2n|;z w#I<H $ 08%@/T.,k" #(PÖ'8>ͳZs^dStPWY@ 9}_")m &=݄hni flMZ[˗oXb#9wZon$ɂIdAf?v{՚eB.bʬM d Z1Rdг[s>k360h4j&3oc P<LK@tX6ʖ)鬿�^onTX,jd5WvBCy핧XK&Z'a@ߖBCxyc?q vЯCfƌ�g_9s_4jJ !,"^YMkEԴ|(7nR\)gg~jUt!!@,S(eRgDB@@l6;F0>R6:%%bh6[Q`2YP(h4[)u: ɂg,$dFZݻDp[nTX 2gAZ>T]kȜ,%ɂ$Y ɂ_2PB$ $YK!/HAd |APbk| P݉,xdA/IDA3oQhfda"ɂI(hFnd$ I I<H  ɂIdA.x?'I\x$YD Bܞ0v]{ ^t,<Y:%YInm$ d΂_2PBY ɂ_,!|A,%!/HA$YhZmt: Y<Am I K,]y& $@A2e&澹 Il޾3gq}'sܦ^odɲ󬏿Y18Xѐ$ ŸH D>{374oZ[gۻ:;7DeQlھ ϷTP{@։䅡O8/Ç~{KPw S6o-/_S-�XY<mcޣlْD׍Op'?r4##0.9O|*@% v$YL Bs]B dŊt5~t%5aˎ}pZ  ᅡO�@Z<м}X6z@#qF�'O]dST?7R\) 8Cpp�cFQ 7ɂu I ,Qf+NGoR4*B.n:\j܇J$44ՆJbZ佀lqêڂ][קQRhCTbX\HAd D^,qqWZoZB#GOh߶�şp?p�rێl۱?<tKF>+�4oZ~g{]'.0oNՉ$M΢ww( ܃@3lh󪕅e΂bJrb�xTNtt4F),BDD�/_uW5_q;M& Y6Lppmfc2 y@ Je^pHNNv>2J!dA_n�T*hh#7RgY$ BۓBHH`M,x9 @A2rYĩ $&=9 ,$ Bⷃg'8v"=R_oy{gthۈkSٶc?z -Cgpw$�6.$Ѩ83:cŋkd"ذgF>ߖ eּF %K0~L'jT/'+ɂIgXb%BG}_"5H|՗ flMZ[˗{ۨAU5є1 39a٭|+70tؔVfl�ƍ4,f+-"\W!>%Y ɂ_,{v�z+Mf<Z&ӧ|!4"==g24jLjeRlSiݪ>k2 6G`:ȉ’,j!dA_9x/M񣟤ZlV+`0Wh׺!o,o D[c#;OϮe,R+{,#%@TJrU&R!|aY !uWwۚ’,HufBVnU -HHHm?ᵵ<aa &4k͎jCQْ: 9dA0Pnqp'hLHHDH%J2/ <Y]�ro!“,q7KO7fD+6qDEgNf5}}(NrorId KLJĩW"zyk%wt!ɂo,._e 2� x}l6j(ϨaOm~OZ`0p'?r4#1Lj=vcb3�+<WUX ,""ӧi�vqgDQ}gƝ'<ٔ/ȸØIO73Ŏ�$3nNen4%C)Y֫*Yp!ɂo,Qlv JE︕J%u@ihu|6P�IH o~;Æ?qUJ x}vV2&4['.0wy2K71g GwEZLzzw@>܆:w K uWwۚ’,HufBNu~;xŵ<Ѻag4Z ,z.-H [a(!P(w4Q_Z9~ dA,AIBCx׃9 @A rI!dArI,%!/HA$Y)Jv K$ $YK BHf/u)ke ɂ,%ɂh4b4} f$ɂI$Y ɂ_,!|ARQ\h_wJG@v]nB9{! /IZ]*8f"!r/--]B䳻$ ¿\1Gr#) goݪ0<$YD B!'I2dA!$B&Y |y>,] -•$ x9Ǿ->=)EB~e $ d,d ><%ElBCLd΂BILd Bxd!IBO,d׃3gFrTv˗o`H7Q1׹.QxJBqdAY0S^HM50ns1W3n[|\?ٞx|Mc̘嶏erF!u d)S#i>,+/<ߖ7�tSa_c49~hs /΄ao}qFL'*WM ШII10]LԝfUJ~ٸd;i=ϖp?z(}'YWzwxB?& xjdoF\ʖxat ;v<�]Zc<oX/ysp!֏N3lPkýJJJRF9#tr?^zߥ_)8X~?t=\R�TA܏J!d}},cVX*f ݻ4GH@*{v?�)gW+KZ8nh}[ U*FRzk(UZmiigJb_<?_B!OGߥ 4g{@6 y5y<}[OXS8uzuرWV{*VfkkILJr@ƅ<;?rq?bď0-<p4o.mxf7oZG8r4!GG% *U#n_Wm6;FndL^+w4{8shbc ]2E׌)j?^GKJ<N r^_B!&LԜBHH AA{QqC@Z<|А`jT/!s΂^ode.דݸa`[; xBI^% ~=pEPP�4|ْ.u V|@rW6?t|QOol#B:36P.O6ڵ4ԏ_Pvy؏^o"44eR~8BBB"|+Wn0͝m6yJ|.cmxq !7XgP% b%B&*Kxs}{ ܬk`dmiԠ )6jPfMk`4eLLN10jX;zvk7J #:6UHO7a4ZFr[SVXq/oO ctjߘ/wcnXB~,dBVjV/|ܽYnhTJF3իeK]Xi/O]DW2i4"=sufGPh�0-T*g-9V!?& Ÿ0~Z6ʕKs៫.;`:9֏շG8v<]3 ,Y1JWu!X[?GJ :V)øWVS:8@gtЄ>F kG PӵS3v5g L*ǻN: pu &t",,9 =݄Fv~m6[Q(9njV|}: EY_/E: .YV;k t辤RQYBvcBQcP,䥸D"ý~yB?Y(ԫ!ON:Y<m??BQjL|,\w*l۹; &-O -Ȩ<>.8g<Or=oxnXY<Oum ! ɂ#Jk$�ty):](�ўF 2Ŏ^/ժGSRi>G톓.o)*U`lS!�I\*Yp(J,km|;JGbXGT*KBUѵ= ((�?\RDDɹB$YWB8>\=ׯUA;9~sK Do01cFI5㻽oR^H,zw7ߎR9[9r|!"Qg!k$B@ E6 F Rg: K^3<: -Y�|>jm_ B!\d}},sPT*%JB!LG[(9 /susʍ,/uBDGIի{'VmRz9漹F>QLIyeK]7?pEBC0Gbf}X,V^x-ʕb;z-ZY!-ԙhP4-{: o/!>F&kØ�`XYโ!,{Cd=iצd-?ө}c֎bΛ3fx;ʗ+śs0x (զC�,kjT/իlٱ֭%0@~}{>@rukÆ?ҭS3ƌhOz/v 9Eq+t DV.Jɒ!cBwT`4]nd2[PTTJ%a�ʼ>/{e8f ݻ4GH@SgAq RjsVuԘLfHCsQb2PBYȤ,kӈud札qZ>X26ѵc3�W?3J#P* ے7¥Fqb3lah޴mBf2k#[nno-h: >jX,om1L<f4]CgQȪBvu B,: EY_/EqYݜ@ۻ󸨪X4A7ܗ~ZjKm13-Ŭ5s),5r)\rC RdaL 3` _/_2w={g\�Bq@\V0o5˳� "c]A…T\Z^o$;@HHB ]~a,Kp!)wSMK!D c]c>[ �)Y<vN”Yzu{[~BxoP"{zoFExXeڙOcq3Ft%99Fa�(VLH@=-[flڼɷ[ @5ߧ b5bZ; ¡]?Űv^JO?ޑ"* Lf9BkT~j|8.&_8}>b<1C2!!= ?? Kdl &?Y"j@JA ؞9�t{3u{ӳ!!)-+J ݣ%�`֔'\SzN1i@v? Y3&9u6şR@|5߼:^FFF6�ujWa@vR!HB>gXl~FtaZm(q'I*J%|TJV0gS&T*\h}1`P*ܯ_0gFh4_wJjNKʶhv I!(MgDΆZ<q6g ; <28x(5F�T*%+¾ygn̹[8q273_[.@-#�00i5ex~C'8竱?RITPVѯ/sJڔ'/gC2~׶>קmH,6 gݜ8̹[rO֯+>ʕly/g_H,!D)㍳!JlŊfs.o[@֑]l`6[DZ6FSkg<6M[.q< Y^.|HvQ]GV9_P*�Ξ/:r6!= %jBN?gLt|pYou>Eu%P|L?ujW/KM" HBcJl{60{6Z8t۝@3`wnYMVV32rfe'O'uK*d6D>EY8x ah{�._`͆x񹮼J;ϰЭKS ŒŤX;6niӪCW ƿ& b'Ч- }|iP:/|ء?<9~fOmus ㇣WZ4JF6eoLڌvmұCڸ׾#gYϼrCgYnj %0пxNB[{JĘ'hXj#33|Fʌ;fwg3T zhIGڄiU>=[î?dfս�Wp5ۀbf,\v8v< _㹡y&Ǝr aQB +l*xkSifԢu8 ܁g^R  BQy㘅b `Tt`B.4mƩ3I ezz}yd'LZEȻi$ j JbqYO|VkIK~mg^7�+ `4 ߞjGQ5y SmBx'Ghq*`˘&ÈOHa;o)_ IiJt9ԫ[_ʷ;ؗWNXA^< /]alzvDNX*nU�rLu%EB=Ԕv%;Xa}ydt:Οl<˦q|4j)Bq]ޅgA7;jaXhi4[].W7#;lw-ww%Bi!y|gKi;g_JJ)ʅfwn((�n!%7Y(!nƥKWJd)SҸ˄V, B܀7Ά(yn`bݦ}Ğu?o3E*wo[BɳYw4\#=[2UF?(CV2q\?BkT~jnYr7l?~m]nXNILڛd#(Pзw+3mlV+O@Nu,X|ifʘ ˱ZlTHlτGӲEmfFjj&uArJt|OF!,_z6 `BQV@\eE-T9O@HHnzeWi0F 3O<@w3vt/jŏwL׏U`?EjXy+Q<DG=GH1!^Sط45C+ft:=J ,_z||U_jb] ێ}ҤQ0ͅ*U޿xj|֯J^DP*Unu=0 />>*~+|}}a4֯VP*&3ֲ͛[ޠ9%BسPfC׽k3CNGMQ̙Jժi*is&%-j<W>[lV5C+Bըa(Yӏ?@0uۻr Ԑ̙2em}۬\ 摞-iX:7μOI !o Q,܈hFPͽlpdf8nZmNcr^^WeX6 T�Am0m3''7DŽRy3ѥY(-$ςw)mC,)>>ߝMM|}Y J LP*.Ѩ;\o}!7,1 leO )TR)ZZnE@˄SB!J>oP"gC7u7ZCgٴ�>1P,ZlZwv'O'BIfCs= |=u|91W`Z5IVˡX*VW{3}fRR2IId{SB l&-*ukW[7̯p# Uǟ7 uddh*[;F�xmr||4Lx++<ֿz9˲/՗{0)W}߅B|ҳ,tFzhV_KJJ&?ì)Ob6[Jڙ>Zq䏿9u: _5SSw,T~`X~ws/2kʓl>r#~?ڞ~3n6ZnUC+}OKZ<R!m= ,8? '".ϕ*P((^o/Ѩ1]˱P>,Zz17SW,ScXXv RۦFt`2YrOp*9n$ ƛ*C!wq}}t׳Z&aJRR3 v| jPĤT&O[U_!y ]MK׭;0>vD/[+iӪ <|G:KW>{3'N&2soz;:Ʋ?sP{׫C!D= *B|iz}nBqSnE;z-ncO,g{wƻ!ynã o!Ûɯp+q!%YV ŕ{K |2Z?>!+�{"4}Hv*C!D'!c#տhr M W 理fqtbBQy㘅߳P0Ge@9u{PULx/뫦qTM>^=錔)Ǣy#n("տ,_LCvm:nxlܲMs&4i]wEqO0�\5iӳ%M;QB!JYV,=p9%sRB g/rE*U û^o`0cAFf699&F} -M|ũ [ҸQM"jU Yov�Чg+BBR lk '@^h$eE ƞgZp'̣`(ޚgAQc0/@->>*XgddFM oUZ~w\U!7Y(!ry"G`0/0[<73 6">5 e˩\)/MOh:UYi?'Z`LybPf‰L'wޥ)gDv5F�ԮʆCk*XƊտ`?!(]q6D˳0|8G<ge)[dR)`0rH?wh4Ng< K3ޥɳpoE !P�|(Xnh[A!ƞb ՘ۡcŷKB!-vc6dz!BRggA!(ɤg!YB!IB>׋ %6c4R(4 !Og"= xP [(͊2mR!\,�`B!<{d̂BEdB>2B!p= ^5fAlnB"݄Ș|$H(]c߇lfO7DP(4n=Z!YGzJ@v'B둞|$HB!ycς̆B!̆GzBgҳ,,z\ёsKIN .wW! Ezqt"5*R~??:u/;|,Wо~8Ȓ/vX{ Q {C:[R~LzgAfCbq??uiJ,g^}'�{~;qJ6Þ~~櫍)\O؅`".2O T#gYv*7់|8�/lWXh% f}w& `D֮ZM0-\WNJd(++KOߡL?Oz!D #! b4 ؗn;r_h泬X~kᇚѡ}}>be@vdfս:Väw4I-ۻ56lt{\n(Kd]E3c ӆ_:vQfe:ul]~~^72=RQtҳ,y"kWuBJſ_ !eHR`ZdAVR0,jS*<ֿu Jd23O[S ۥP@(b !J.oY(= (ܹ6|?cʟ9x(G˨_yATkk2u5ؼ�K~[3ajmnO2f ƌ_`3oݻ6!3s?c ծ#>N3 !GY*U#r%ؗIςw"&&rl RX,\/trr7UdAQca0LR54i3"mUR%�o>q{:Zd̂ ~9u@RŁB\YGzD~yRW|B 5W. !K8fAzW9w ]ԯ~ڻ B%= Hςp قjhUO>?fc9v<CGΡQ+8F t?Gzt*p1 oKW'֨D<}X $Q&_͌0#8t:#?I\e|Z<B2س !Wqޜj^�t:#{`g Q z/s(,+Q<DG=Q/t###�B7vFs4mȡp4d]5s]ivO8YWoM:j!gCȳ!W2̨T*{<w"p34m__~ Q; f1uX,V||&\ 0T*Z?|}4ج<"U͙r$*5`꬯Qӷwku}|tŜ[ћx鹮7,+,_'9w kǁCg3~ @R2{6lV5C+T*h׺.oLC$xɳ \*< l6,+jCf MMʪ{x͍V99F| fY(mJҨ$ɳ F @r{nV�:ul( @ B\7,ȘQ.$b6;?ҥ+u'\^C"q̂̆e9-L۴س:;ey\qK?|,,!gCHQ,>b'Gqx^ѕr(:xބ֨H&BxXe:Ee=*&֗@ ~a9:DѱCvΜ&S磏Eo0ѣk3*V/va0K:xP !J8o̳ cmg2Y>zccZ/xmBb*q&/Bz56kEմYtzΜHA<^ܼ #_^ @Q>r!j.۳? {t +ՠ:Mqt:W DԪ?lɋ ӎ,B2f!pZm(=YRbYѨ1s(h*~QWז;F5>vBl|`0t5Wd8n0Mty1gaIoVݿ`F!J,#cj*ˈ>zJ=MxfvvBV|gMrL+j]z6m=QS>80}f{^:0eF~}e;Y8uejw;`ݰky.�-@3x !J o yK#B|FY((+KOٲ~iz#~~Impb|nzM g)K|>$B>$y +QY( ກ@jL,؄7,l!n1"cyl (7ʳX;O7Sq1 ҳ BZUf}F.M]!B+QJ0Q 3YNILڛc1զ}^z+Ugͤ_nTV)yHM$ 3na'62#8t:#ש�z !JoY1 +|#n]Ѷu$�kgu3)> Gzt;g绨S iiWYyuj;~ Sط4שk_ּBwzcG 3Kj`47§ F&(dB>ҳ 3MOtgB@�TܻgS'׽_5̀>mt?h4y&3͛b`v ??rrϮQc4` !e%PB6ҳ "n]1mO0u;7ς@PbڨZ RSC:2g6ʔ㾶z]Z"O `ϳпO[:׀~g'A12yzƎMuydd4^ ɔBqxcςY.ݎ<  ngjcth0L;Q7ApE}zA@Y(mJҨ$ɳ •ogAT8;P*8oB B\7,ȳ!G\HL 덤f]?>!H̢t UjB܈<"ɳpgl.22t�fqt;U SfQ &mGYTo#g_ !J9ɳY(zoFExXeڙOcq3Ft%99Fa�(VLH@=-[flڼpߧ b5bZ; ¡]?Űv^JO?ޑ"* Lf9BkT~j|8.&_8}>b<1ҳ n?? Kdl &?Y"j>jR l�rF=Ԍa�ي2�X,VһGK�>_3o)ORr92z#:6bā)Vsg<Mrl?EjXyuFЍl�Ԯ€>ս B{d̂mͶps wRSSU(JLQ,._a@nBHYl(0 A�4jFۨT ,VuZUv!(,lqTRLȝUVWXF�<˚ {ILL\P�*ka߁<3`-8ٛЯ- }G`U�}L2~<?!R?~ X __攴)O קmH,6 gݜ8̹[rO֯+>ʕly/g_H7|¦BgAt,X,Vl6Hwy z�ڶ:f0%ja4 xi?Ylzp Y(mJҨ$ɳ wW-h0:j)R(t�pE�^}uqA!n7oY+dg%<rLhhEezl!!e]n78R!̆GfCL|w s~/{n.G̳ٛ|n._(J7t;Bo != £6lGd@nN__5j;|=uFtag?8nHLJQK.#%%)Ms::uaj/>וZws??uiJ88p(Դ,&Mȟ%8ٱCOJ!D)= 2fAx3rhgk9 t:#{| c>CY;NIn ؞�ЩccȣZ<.]!337C^LxXeƿe;kW ~}Ы{ 2V1 gAxTfɗBYQc0r"'"<7S �*RZ:7Bl0sgm[OdmIy7͚ٟiL!U$B>ҳ �zwo쏶PƏ{DҤQcXNJAk}/r22 +ß? }{m:L}@$&[+ zu_9u*8)7,HҭʳPX:xjɂJ[JQs7bڰXh4Bo4==ɳPڔyQI>g! D~|75w+Jp !>oY1 X,V:q޹ҥ+>rWRnY:Gr%'gcBܡq̂Y捷VrL&Azuo#}nY?bؼΜ+WGβכ!I|deg?pP,B1g8tZ"Vsp1 oaƩWXL?䣏Eo0ѣk3ڵKumOd_xmT/Tna3G̟qtFZ4k ҧgK0L%\AXn/cX!_C/(a1ς,b1^ݻ;AAZ>^̡.B7{}jnP:GαuamSjYBcjQ>=23K@) rr ՊM©S W<1V~a֔'1-\HLB0س cDXT+}gh$�ZhvJdt c'p5eC:HU0Mty1gauhTMp'7'C^އUZ~w^k57߂Gd,|]B2f,ܹ||tŜ[`Fڶ䋕?h.^ٛ9q2s:kg/R;r\˴iUn5廝pn@xXeNNb' vkYwG[/[+Ԩټ�KJ&aJRR3 c !lس yKőgh4P( l`6[<1qB*lf҄/_ph.p7wC$BiSF%|H|$H/jC"*l�(s+E7!yd6c\CTunf !p8Bzc'S(O7E!Kz򑞅;ˊտpLexNyV tZ<h{ZyHM$<1a;[t|S�BkU?xnYw##SGVݚLreY̚$iiW,Vݻ4_hU|ѽnA!{d6(GѴI#vb:YX!':r9rF=Ԍa:ľZ50̄Ufg] �Rx̟,�?ԌIΝVˬ)O#�_fCvowDӭK3;{C7b0 #3P(q6Yb!1Ny4hȝQVP*&3͛b`vY6>0vUV)Kppk/99L& Ϳk6JQ( `0b0fkh4j .vv_7gByd̂(}-6,M\W۬\ 摞-iX:7μOI UcT(Ԏ?[+iӪ n]1mOPƼʕ?j/g_H2+BQd8fA,nuFNa< _o=@P`�m[G:L]1qD}becM& *ކ yJ<4*C,#AET8;pwn0)ǁ2Fa �f?!+س cW Lj!L'FRSTgjjzӻ.y !͆1䙏Zm{`6,[N.%5ԾI)b!7Ά< =m f𑳬ZJca>|h޴O-ٴy?o粞 /{֮ߋBW(,g^}'�ȅT45<BBb*AV1ᵾ<o~ٸy?:2eX4ogG!H|gԫ{ Dj&MHNٽO97Bz՘7~wJ )s:*U b\roItȞ_fԢu:43rxn<گ?>ΙT1 B`S#>DPMINC-(gA,bUJ0ֿﵙFZJd�ιr!+FBVb0x_[[p?N�|4jQB7YU\sޭ0i599F?�p eԫ[ J̹[8q27ܕ<bYa/i W_ _cODͽ1m( ӇM[{:[Px.B28B,nuwr3)zL[+Joc-F,6%y^iTχYGFP@χ0H1Pv !DQycς̆…#=!gCHςBEgAfC!^DfC#= B!3oY1 Q(lO7DP(BdB>$.ƭG{%JQM ! ҳ,.B&= H B8ƞ !Bxo ѧN;(/.CWC/:1 ;Uhݵ݈gc(r%ItMBx箣 )I<ƪF4IH'־̿lyN?*KȃWI~pQiT·ҳ KzTtB,!(B!( YB![ҳ BgA!nIςB!ܒ!B%= 6h֬}yիtB]viiG$$$ӻ+,[ѣ8azbq/Ze>>>_ӝF гGu|4k֌�֡mB!+y6jשC˼[deeEPqI<J (W[Po޶m)!ӸQ#ΝKtt4{m[b-[X,XV ΫGӠAJ%Ѽ;>4BQBIς.\H�/Zkc0x xl BCC)ĥK0$&&N-1XVؑ)Ӧa0Y&@ll,K.%** =z`6<$קA|yh4>,BQIς<d￟^z_ɄNfV큁bAVcZϞh2`ÆRoLӑ,?BAvv6f2lrb g8M2`T* K>]6A+TV~ר՜9{Zܼ ii:u IHwԋ-8߅FL>Zɓꫯ`8{,/\J1yrB<YˣFQn]F#ǏgZj9shhZt:�f`ڵi)+�Xy;jĝ!z999=T7rJcƌ!%5jwMٳtzN:"%,[L,55Ty?̅] )!aY`�Wff3m۴ȑ#lذӇE!J0ɳ \ N,y Z*t/d{0B !\ȟUN~W@v�#_txndkY(~z)B2nwkQSBqg1 F[nX,l6C cahٳg=lۺmJ=ضu+zF#XV6mL,MO2w\233y򩧜ʜG疹Oiۦ 5bpAfϙ>Ϗ4)WÇsJWޞ>5B!ҳ ȟ@R9D�xvP<x0-Z`ԩW^�XV,XcɢEDGGsI'33RI&MP*III4ieF# *sӦM:t]CRR}f͚1|pΦlٲ4op@BB͛"$c ̉`tf4^f99(U*�J%}0fCEFFؼe VZJ$5-(gU"*jaZdgg{<4 iii_?8\ 3gիK@I!<ҳ Q:kV/ CR9D�XT\ 7riޜ8FkN=zZj�!T*`< ӦNa]i<h-Z�DDDovZye(^3a1nX"""ldffz!x:Y*U#rS'xlGKV0hl`4r",\oIBB}bFnX72ijc@NBht:OЧ'ApZ< OjZ*``˗-c8xs1s T*˖/ѣ@`ƚ5kB\\իJŊ\gϝsyT�ɞn( **ʞgDx^i;J/n())~S0C2_]�HtP?222qg!-,SD9¹s�h4:6Gܵ$QBq7L8=$!(d̂B!ܒڶ[Nzz: &==ss9H=-‹vIEbdpp0aaӴiS�|wG!J(YPzz:9P:u`׮]nB02fAry$򂄱& !D #d׮]L1aCz)BQHς{ BQHςI E!= өS'v G!(YwfM&3"H$ςӯo_ү\| BQdgAx;?>3:V>} m^Rr<ةL1ӻ$%,/:u�bϑPt1~wE!J8Y^D]Hh2 Z-Bҳ XjZ1~f۶mnBd6B!ܒ< B!pKzB,!-YB![ҳ BgA!nIςB!ܒ!B%= B!pKzB,!-YB^hѢZ ~։e߯o-[,&,B ayƍKQ:Z!ȿΈy<!!!ڗU^ڵj9[=o/M7恎/jBquQ-= U*UPլ^V7ޠE�̞=QFhlXV>ϏO۶mضu+{f٧bxZ}ۓ|2�|1DGGd/^fCTңgO9:wFTҥ\6[yX,<ts:A<}Hς(Ǐsa16H-2u*gbcի�.\ 11J?O@@�ٔ-[={͉'ޣC�P]lٺ#GbZШUƲtRx'IJJbĈm]b4X,Z0[,,^Ç;y>BegAVe̙t:}O<6 ٌ>'2e`6Q(L&IKKE�PS(dggcXѸ;[#%5RBf=uq!1`_V~֭_bcǎDDDw\S;B'= jTUXWsiޜ8FkNׂ�ZRd]ʨQ6f !sQjժŗ+V8a4bŊ8tHu} wu]]9~8Qx�9~f͚1kLytB@@�ɬ]֩B!uTZmUFD--BCC\gϝ#55Fq%=FFܞY&)))A<u<u:9iv,[nN<ſOCk?M﹇Gqzj9qℽMySRS[.FǏ S8T�ɞn( **-JuoCH­t!=v瓧N9mEm.]&ϟK5gdڷ !,, Lzݶ8qiYzKMMujB<gAȑt*a Q!$aJ%^ԟ0q"aaa>LBq1 …f͚p-OVu  �u##^d=Ow5}գo>N Y0CaMm!slQ[lhZFIBTbؾ};ݺub`:lÇ sȷ=lۺhӦ=zmVz=#F0 hZlڼ:P&@˳C{bVeܹdffSO99-sɧҶM5j_Afϙ_a-X,V+Æ9s@RѫwoO!Yt ZҥKf ١CIKKc.-XV,XcɢENv|=(J4iRdHJJIL6 Ȋ6 �F# *sӦM:t]CRR}f͚]7B^އ@BB͛"$c fV+ZfCa6\{oART*WyV+RIjZ:999a#7KvtpUj%[z-@vvCѐ x7ٌ?3gիK@I!<ҳ Q:kVFV3ydPTZb_~IʕٰqSWWHII!CPTN.1Ls3!2m6 E>|ymWl;l6>=B!gASKfVpB&& .-� ϯBht:OЧ'ApZw:ac^;+;*se_r9fΘJb=zpίWVIIMbŊN%Tg{y%]i;J/\K/))~͓?ι_0A^ m] @kK^]<yGp9�bbb0mwM-!w !h8y':^|$%YB![ҳ Xۖ|K�IOO_Ppp0syΟ;B箣2fAo{FXx8M6`ɧzzwQ s8=ѹ ѩS'�v !D #cD)wK"/HknB0QAv36t"%,;Ppp %,; BQҳ 0:ub rB"qiִ)aa2#B!D,;@pp0%ɷ E&yz3ӈ*jӧP%e*̃:3<KBQBIςRgOѩS'hX, M{zW᥎MdхV*ÀQ; != ‹sgm!LfC!-ɳ BgA!n= B!($XB![,!- B B!pK!B%B!ܒ`A!nI B$X(aBBBի-Z@t!!!/:w}7ޠe˖ЄB', !!!,Y><¸cQ}y~5WG:1|8/u"$$?_իSV-r ǝmI<бE-S!D+GTJ*jVYw}VeoТE �fϞͨQh4l6V+ agGNNm۶�lۺ=z`Ol|l-{I|WF>CfYd /fT*ѳS[GC;T*lRV\I֭? X,:ܹsؠA>B!:|F` ҢE LʙXz HLLDR@vv6e˖e޽DGGsIa/{!�Tz[nѣجV�4j,](|I1bup׮F, sz?V- +/fl޼Bkgj̜9NDz/'fa6PlY�f3 DP` iii|h�qqq=uP(lqYwNGJj*JBfs3ºu븐`/Ss?r֯bбcG""";.ΩB!, 5WgU+9}4oNHFصs'kAZFTs.ye(^39z(j+l {YEEQbE^:$ :۾.?~ʨQ<S�?Nf͘5s&< ]t! d֮]N!AZm@vՈ(�bc<%^hh(+UsШQ#@Ht:?5k$%%{ ȓNQ72NѼ]' ' ?e+͉ rrrpm�=H>.Z^=Z-'N)o@cJj*uh4rq wpcv G*U 99MDEE#Ei;m&..Bz1'OrF< N$]L?. 6kHȴoBXXL:m=qӲFGG;N!'!#Gҩ+F`){Qcĉy0 !$Xb͚5#ZVt/xwm�FF:!((zp4jPe׫G>}r%,`·´=$$a&B!܆R۶nfj9r$]zRfct łfca 6!¯{mV, �M6[h4&jif:v@�-@eZs璙ɓO=T漏>?%~J6mhԨQn~=gS~[`XZ >! �JE޽=}j#= ^{f�*.]l6Hxx8�JZZvoj`4O-rʯDTҤIJ%?DRRM7fʴi FV|e�`4<dgU6mСCt4k>ԯ_�h<O!#IPBfV+ZfCa6\{oART*WyV+RIjZ:999a#7KvtpUj%[z-@vvCѐ x7ٌ?3gիK@I!D` ը^5WV<y2aaaT*E[s-/rlظ)߂++�!T*Ky/$]b#ݙfCWel6D-8|0�7̯`7v,l6233=}z#yP,-ZW… $$$̷�'?BHH5jOH=m B@FFUkJiyb˖~z<ȹs9c*e˗sQ9B^Y5W'%5+:喸SIUt|x:*Ns/!$6O| :B ~yy2229wB^;/yu,SD9¹s�h4:6*B#B 5Cĉ^/[MBQD2fA!nIς-!�``IOO?wR; !(9$X7ہ#$+vNӦMX駞!E$m9ކrԩ�vtBY"D^0<$!$(vvb :MBQ, tB c$XBA:ub rBAQ5mJxẌBBNbL}IrE-!D "pL#ΫjyOBm\p0vDzz:g. !(" [gOѩS'hX, M{zWB$ [&BB+a@jB; R҈93۶mtSBx̆B![,!- B B!pK!B%B!ܒ`A!nI B$XB![,!- B B!pK!B%B!ܒ`A!nI B$XB![,!- B B!pK!BU,BV%?�Z>4Xi @x^{] v_g]"+.JҒ=Bɗ{$ĝ(+-٣+Bkִy P55HO:k_\qq$tPR%�=C8"&&d̂B!ܒ`A!n˘!kz@�z.  y7s> MJ,AcG?CyB %[`:$X£Ӎgi<&cB B!pK!B%T8|,/]qx?>!M%z#Y…TŞ#gX($XBx;"�3m';ﭥEYN_fk~?bؼz{*RHzb9^)Y<xr%tի97uC2BQ(e=TJӇ5&T^ob3{6RS3s7O gXN|֥)];T1SWssG4k;0z5 cp!aO?]6G#NU-o'7nϦy4կБshJ&ǬIJj&{-b#(Pзw+jłE]nx/�0-̟*錔)Ǣy#PKN`︧Q�;~8ʲU?R>mOy�4_}0U|0i?΀>m5s*(ҡ R6g3jB�xw:22umIޭi8*W}%,! e=L8Ν{ϟ۶}h(Sط45C+ft:F̟@…TU }ۺC2DTrr7lSzي2�X,V>^̡d]ṡӫGgxzuf^ mҾmݛ>^�Rx̟񺒡cЇ ҴI8WʬT)s5;n5cCXn/%p_ lx(y#s㻝Gx\nPt%Z_fMy}% BB1,JT*&58zo] FMk1o;,�^9΅ ;}XY̚$cGrjca0h,3gqXGQa4]noXrW0дI8�ˢ7Rk;/_? AZ||T˿VP*T*%K?ǥW;a~sCيJBx6,h4vBlk1-WQI (~[3ajmafQ|֯NNϼO3u&J xip)9獷Vgs~ `hݽ/r ̩Id;�3nDLZU:vb|0s#/g�ܼ5 e;={qdevy9^ŗ?îclz�+¸_HϖFDًԎ@*GϡPܸΝ̞վ}|e^k%mZձѽKSƽ%p}%<Z#ߛo<CZ{W:99F|}5bqYr7f=\39FBqжu$fg`0/ 0fh4s2 MC6ctC pBZa.>(ՋƴɃ%P�^n}5 ͽ}/PUՎ%P�VWčH (Qfa=q1 B!pK!B%B!ܒ1 Bx ⎧P9:Bx`sFѐ馋t357s>dI 999K effy"r>n- B$XB![rxu_+;zMċ0  O7+Ip }bo< Bq[)J-uHp  [!l2 B$XB![,!- (,+zKpY^u)fY}22tdd\}s,-H^,q%'gЩ$ޝt9W뾿׿x>g3SL۴سNNEi/.G_'O'u)8򽌌f~X܅(SYd6;e:ڶsh+Lu{]9Fd~Lf> 4_F>TfXh% 2*%_mڇlrT"kET6~NءSVg?B/_:Wx;�fFjj&uAǔ+W{o?̹[I ny }Aڶ,\n/cX!_^ot8^CG`GfqjLשGβ˟y�|0c#ShԌ>9y AAZlICX7^|+ qo~`&\�c_MU n Rxnhg._`ڜ-جV܁FQ5ء_m[}-ٸrEΦMٸe?61<WW&3SǐG#U6nޏNgL?o?ԓ-SqG;wZ/<P?iW  %;^>iY,7e�]JtlSj]TԱ&dO1tŽm.ŊNgt\B7228u:}OS3kA3~%_KNW^N{j1vt/eYPj1̚$f NkGmfhE/^x+ 'jrS֭`0Nhv8S21ЯW+6 j[VFF6fvR!,#?NItc_3Ium wL׏UԾT�}z"$ �>.A~Ƅլ7EcbЇ ҴI8D FS#h&߯f˃lU] ێ}l~n˭Q<PJd23O[S Bʢ%''7)Bl˸rEǙ$Z4@RRߘ_Va4Ne4i޴}_|T1BA�? #;6FZ[/DӲym'@뇯Vz�4jD*Lx_~+'N'P@-jz#V BF/Je?_7>ۙ3GT:Vre@#\�kB3:}fF2YwUoM:( ?9ѽk3||tŜ[`F?Iƌ_+0e<5#soc߰`lFT(sm[a̍8�c⻫u<xGFVw6|gKW>{3'N&2s֯NNϼO3u&vBP.i1r/~k}MM&aJRR3 p寪CMn,\<mz;:Ʋ?sP6k."x͕ljT |2$&[+P*ows\+>Z׋}7]`T�3nDKW\DT_e?T@%FQB܈"f‡D 3 g4Q}?N-ja0)/A�pCF ?•cW,J7:�|oZɸWzoYh4jkՆb-936[nj(̾W7`0r{v|fK7 MڌZ_܆n˾(R*�w/Ne%P�T*@ u<Jhʂ @_QWay+%;i!5d̂B!ܒ`A!nI BdBPڅ: #S'�xyu NzR}YPP<Fѐ馈t35m;t".rwdI(u0  WF';*e>z%~~~B=.#)s-TхK&I gta]AU=ݬK8 !- B B!pK!B%B!ܒ`A!nI B$ς®nd$6 G#>!vaX}>�BBB6l>;׾#{Ott2V~ۺ/!!!�z Q:H 9s&999T*> n~=1 >s~\aaaBF /={d6xˀ$OHH V@ٗը^^waē`A,\{۵c|t|&Mψaoh"Lb~TV,�ƏO-lL>ƍ1w\{kZ~=%Kx~HI|dRgKҢE 7jl&::,ڶm [ޣ%YB8ذ~=UT;PT(U*j5MSK/\;&ѠaC?ZHJt+�bccYt)QQQN>�)[,YYY57oN5Xhwhbп_?4jC^ DN<),!L0t:#{?__1�XVPYg3d`O �u:RRSQ*^h4ɢE�q9ƾW^ŋX,֭[DžD  p*fTBwgASq�ϟ_$,, -i5j`$&&7ͬ_ SZ5ڵN-��IDATkǻ&I4nJέZY]@^5ƌ!|yVZVeߵǏg2jO?2=JZr OR!J<Eh͚^( F4"4Óڂ"..$7πŧRJ�$''ߖFFr)kVK:up9%*ѣG\XzurNGNGDD$%`옓CCBBY&)))ۖP^=Z-'Ne5WG:ELLmG}sįמ7.tJ$ !+xQtAۺ0&f2\`==qCt7BQxrB!nI r5FzrʽFP|eʕ Bn__<iQwd=졟 <\& SNyM{'NȠO>4kڔpYWSɯLP>qQt2fA$%= !sy9̆v2lϘܵqyr qkIςB=݄; pB![ҳ T�zO7]h??e00 n7$4v<=!<@PҸh D eLn�M&Qh2fA!nI B$XB![,! jct3nO7A$wgvG4ODŽwVf^ ZZ%`;=o]sʼ=?ػ/DRHfCQ>rUkR)ycL֬CPzƿ?yHM$<1|=uV١l+cy�գ%G)<گ%B Þ~a h̬,=<?m2e u<ޝLm[Eҷwk}=v<CGΡQ+8F t?Gzt*slڼc@˗e9|AV1ᵾ,Z#?bC3_χU3q\_OlegA`=L8Ν{ϟ۶}h(Sط45C+ft::=Z0N=} )\ �|Qc`3wݶ)ƍœ-O׷pS ϝVˬ)O#�Z"/Ah _PY*Vx扎>AC}z"$LJ ĞșT1 B`?Y:VHU/<וfu5!nY0,JT*&5.$1vT/IyZ ێ}[Οb(SƏL~Oʖӳu9}~: /;yV)OJA7UBˢT* u,L& Ϳl6þZ,Vl?>lܲ__~ kVP(UJF3kKs5y _닏ĕl4j*�>lVy>(]gA_Lu~ýqiY/_3Lޜ#:fδ?[+3 bs 12v◤f0y2 鮟pwUoM:(㣦c(37rrF̹[8q27s y7`OѨ)@uy;9BXja'.~o8Oi]usV]''LjWzNfǖ7-ގJь zF?_YYzʖw\`I1dffqS#o- !D QOIVqk(�n¼#sگ6s1@:Grҕ[^gqBءA#DI }l:?bؼ-3.Gβ׿<}(MQd~8g</"88-o'̍p??uiJ8q(C^@> Xv>~ D\eӇERKzEb2Y>z%Vtły rh2Vu ��^FFF6�ujWa@vR!n3 EbP*suT2&3p^GQ5y rJj!ԓ`AQ$j*ˈ>zp"<2N'17̍J/]a͜8̹[�hX?Bq{Ha'y_Q,x9 F *נt< YgAqS (L>(% B!pK!B%B!ܒ`A!nIG!<NP(ׯ(9*] 6z`4 ɞn( **"m#&EI!Tԋ999rBr^D%cB B!pK!B%B!ܒ`A!nI B$XB![,!-I$ OHpz]vX-~߷ >'εH KHH�<B,!fΜINN*Ͽ[:߫gO Ϝ_+WDXXCШQ#B w=0$^2 Bjte5W9bp|}}yw<}X($XB8?`� ,v2x0~!;w&Mψaoh"Lb~TV,�ƏO-lL>ƍ1w\{kZ~=%Kx~HI|dRgKҢE 7jl&::,ڶm [ޣ%YB8ذ~=UT;PT(U*j5M1/\;&ѠaC?ZHJt+�bccYt)QQQN>�)[,YYY57oN5Xhwhbп_?4jC^ DN<),!L0t:#{?__1�XVPYg3d`O �u:RRSQ*^h4ɢE�q9ƾW^ŋX,֭[DžD  p*fTBwgASq�ϟ_$,, @51}:f3׭A|TVvI;i7FRqs+V+k׮%00WF1c)_Vjwm`<x0O=̣GRV-\ӇTOZ#J AzYવ')'J*|[ʯS쯵Z-uA�*V?GuX/opau::D|B}cNNBB\r f͚go[^@zj8qe֨^VOKTT111Q8:,^{~޸M+6®EU9z*Noœ?Pp,ĉ*l !Dm!B%(`:uĨQ8a}^ <,aCzB!n1  ZU"�Oye(~woœO>Ivv6�Q 2sT ?;6Ϲ?q]V~e#nYvYi9y(�QQ 9nh2]pp0ɗ/Vw᎐ !vq˲tJ, !\r5;88֭[hd…ѩS'|) :3fx !n̆.r>n-Yپ}}Y^ BQȘ B!J/ B B!pK!B%B!ܒ`A!nI|x :F4t .r>J?Iwsn *_ V< Ez~2pV|g 3r> J \N<GR1O7%~q}*T w_zzK]k})(v+m!B%B!ܒ`A!nI B$XB![,!- B PjTN``!D!"㿑`+W+//7oN. wƻ(9$c)ԯ_L^=@/Zd"!!ơhرc+VCj&O?4&ɡ̮]ҧO>c�>3cXx>@-[8y$Æ c„ ,>7|RhdyۿӇJ@3F·wRDTr=С(J׫BLJǟx&0ŋ?V^`󄇇;}vN</�,c6oL^^:6wߡV)`_LJ3gΠYf M4*U6l&X.r> Jl6 --;LJݿ?ŗ^@^d4j Udʭח0k,ztΫGc4Ps;`0ɱ41}:XzsgOn%"{m\r|d �SL,J%G!((YǍ=NFF x",, h{/c٘>c;vo>@Pr,T*Cw5k2q Vf׮]LzjT(h<ZjEÆ 1[,=/W@PÁY`SӦN\r�Ԏ`ԩdfeqIM^ѣ9c3f{L24oт1ͤQ>T|gAQF4Oljt:/_!Z/E|»'l7^h4݉>>>z>V2䦟:9ctm_~Qp;o&#{ӧs?rJ|||Xf Gnd$k֮޽9<w^|yu-_'|1n8|)V,_ΓO=ŧK x" ,`{ѱcG˖y߰͛SzuQfwsǪ8}6D)_\~ʕk׮/c233Sj_7dwo�V,ZWFd2a0rbYRK/yh4frSVf&FBtR^=hт]j3y&L~9م:(: J?OJk45m!CnM62w޵kWQÆ%K7v,[lG>`7taĉ;i5kּa#"5s&̘>>]L&y&lf۴oZ뮻9rʕ+dz<s,8EoYܬٳfUs{ǝ@,2o&j"((Ƚh;&_~SNm}Zy٣b6_XtC?0}b[oq%{[GEVΔS=}Xkc:-{`0�0:SLAK~s*Ll,c]^=bccyέc8ʕ+gxժUl޼~./ׯkF&==p</h.]r7~z̟3g;w&ά3Yf rؾL2|4w.DiÇ s2nXev7sno4չg#""'z.eqif͚yvPZj6N|'z)P�W.|4o.]`پ};sG ct]}^0P(U/�ןsWWZRJݻES{}233yuWqFiذ4:uŋ/O׮]oXfiWs[$X(EڵY�(U*r;H�lwܹs׭g9s'Əu~ZVTJxTofxZl߃b/쮾+)f^=Ta*rSNtڕ_;844e:eQ]QmacHvv6Ov|sfϦk׮lۺh}7GJX':y`M={y)E;ڵcD6oO=ňkr9,\ۻQlY~-Bk 1) w޽;�qqq|Ǵh©Xʗ/@}XwevE=[O ȑ#�wĘ[INz[=& ]ۅ_ HII)ʝXyIV_7滒/>>>deeh44nnQr;UowRRN�R=)E\}΋z16 7r#c7\͜[9܆B![,!- B B!pK!B%B!ܒ`Arz BH/TP"7j/JYi<%1x7!ߙ))a$e}6;׿ղ.xTH'@GYE!*xLwFG[I= !- !B$XB![,!- B B!pK!B%B!ܒ`A!nI B$XB![,!- BVb;#����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/docs/index.html����������������������������������������������������������0000664�0000000�0000000�00000014713�14332737457�0020621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html> <html lang="en"> <!--# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs.--><head> <meta charset="UTF-8" /> <title> mermaid - Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.
mermaid-js-mermaid-9bb0ed2/docs/integrations.md000066400000000000000000000411361433273745700216530ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Integrations The following list is a compilation of different integrations and plugins that allow the rendering of mermaid definitions within other applications. They also serve as proof of concept, for the variety of things that can be built with mermaid. ## Productivity - [GitHub](https://github.com) (**Native support**) - [Using code blocks](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/) (**Native support**) - [GitHub action: Compile mermaid to image](https://github.com/neenjaw/compile-mermaid-markdown-action) - [svg-generator](https://github.com/SimonKenyonShepard/mermaidjs-github-svg-generator) - [GitLab](https://docs.gitlab.com/ee/user/markdown.html#diagrams-and-flowcharts) (**Native support**) - [Gitea](https://gitea.io) (**Native support**) - [Azure Devops](https://docs.microsoft.com/en-us/azure/devops/project/wiki/wiki-markdown-guidance?view=azure-devops#add-mermaid-diagrams-to-a-wiki-page) (**Native support**) - [Tuleap](https://docs.tuleap.org/user-guide/writing-in-tuleap.html#graphs) (**Native support**) - [Joplin](https://joplinapp.org) (**Native support**) - [Notion](https://notion.so) (**Native support**) - [Observable](https://observablehq.com/@observablehq/mermaid) (**Native support**) - [Obsidian](https://help.obsidian.md/How+to/Format+your+notes#Diagram) (**Native support**) - [GitBook](https://gitbook.com) - [Mermaid Plugin](https://github.com/JozoVilcek/gitbook-plugin-mermaid) - [Markdown with Mermaid CLI](https://github.com/miao1007/gitbook-plugin-mermaid-cli) - [Mermaid plugin for GitBook](https://github.com/wwformat/gitbook-plugin-mermaid-pdf) - [LiveBook](https://livebook.dev) (**Native support**) - [Atlassian Products](https://www.atlassian.com) - [Mermaid Plugin for Confluence](https://marketplace.atlassian.com/apps/1214124/mermaid-plugin-for-confluence?hosting=server&tab=overview) - [CloudScript.io Addon](https://marketplace.atlassian.com/apps/1219878/cloudscript-io-mermaid-addon?hosting=cloud&tab=overview) - [Auto convert diagrams in Jira](https://github.com/coddingtonbear/jirafs-mermaid) - [Redmine](https://redmine.org) - [Mermaid Macro](https://www.redmine.org/plugins/redmine_mermaid_macro) - [redmine-mermaid](https://github.com/styz/redmine_mermaid) - [markdown-for-mermaid-plugin](https://github.com/jamieh-mongolian/markdown-for-mermaid-plugin) - [JetBrains IDE eg Pycharm](https://www.jetbrains.com/go/guide/tips/mermaid-js-support-in-markdown/) - [mermerd](https://github.com/KarnerTh/mermerd) ## CRM/ERP/Similar - [coreBOS](https://blog.corebos.org/blog/december2019) ## Blogs - [Wordpress](https://wordpress.org) - [WordPress Markdown Editor](https://wordpress.org/plugins/wp-githuber-md) - [WP-ReliableMD](https://wordpress.org/plugins/wp-reliablemd/) - [Hexo](https://hexo.io) - [hexo-filter-mermaid-diagrams](https://github.com/webappdevelp/hexo-filter-mermaid-diagrams) - [hexo-tag-mermaid](https://github.com/JameChou/hexo-tag-mermaid) - [hexo-mermaid-diagrams](https://github.com/mslxl/hexo-mermaid-diagrams) ## CMS - [VitePress](https://vitepress.vuejs.org/) - [Plugin for Mermaid.js](https://emersonbottero.github.io/vitepress-plugin-mermaid/) - [VuePress](https://vuepress.vuejs.org/) - [Plugin for Mermaid.js](https://github.com/eFrane/vuepress-plugin-mermaidjs) - [Grav CMS](https://getgrav.org/) - [Mermaid Diagrams](https://github.com/DanielFlaum/grav-plugin-mermaid-diagrams) - [Gitlab Markdown Adapter](https://github.com/Goutte/grav-plugin-gitlab-markdown-adapter) ## Communication - [Discourse](https://discourse.org) - [Mermaid Plugin](https://github.com/pnewell/discourse-mermaid), [And](https://github.com/unfoldingWord-dev/discourse-mermaid) - [Mattermost](https://mattermost.com/) - [Mermaid Plugin](https://github.com/SpikeTings/Mermaid) - [phpBB](https://phpbb.com) - [phpbb-ext-mermaid](https://github.com/AlfredoRamos/phpbb-ext-mermaid) - [NodeBB](https://nodebb.org) - [Mermaid Plugin](https://www.npmjs.com/package/nodebb-plugin-mermaid) ## Wikis - [MediaWiki](https://www.mediawiki.org) - [Mermaid Extension](https://www.mediawiki.org/wiki/Extension:Mermaid) - [Flex Diagrams Extension](https://www.mediawiki.org/wiki/Extension:Flex_Diagrams) - [Semantic Media Wiki](https://semantic-mediawiki.org) - [Mermaid Plugin](https://github.com/SemanticMediaWiki/Mermaid) - [FosWiki](https://foswiki.org) - [Mermaid Plugin](https://foswiki.org/Extensions/MermaidPlugin) - [DokuWiki](https://dokuwiki.org) - [Flowcharts](https://www.dokuwiki.org/plugin:flowcharts?s[]=mermaid) - [ComboStrap](https://combostrap.com/mermaid) - [TiddlyWiki](https://tiddlywiki.com/) - [mermaid-tw5: full js library](https://github.com/efurlanm/mermaid-tw5) - [tw5-mermaid: wrapper for Mermaid Live](https://github.com/jasonmhoule/tw5-mermaid) ## Editor Plugins - [Vs Code](https://code.visualstudio.com/) - [Markdown Preview Mermaid Support](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-mermaid) - [Mermaid Preview](https://marketplace.visualstudio.com/items?itemName=vstirbu.vscode-mermaid-preview) - [Mermaid Markdown Syntax Highlighting](https://marketplace.visualstudio.com/items?itemName=bpruitt-goddard.mermaid-markdown-syntax-highlighting) - [Mermaid Editor](https://marketplace.visualstudio.com/items?itemName=tomoyukim.vscode-mermaid-editor) - [Mermaid Export](https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.mermaid-export) - [Markdown PDF](https://marketplace.visualstudio.com/items?itemName=yzane.markdown-pdf) - [Preview](https://marketplace.visualstudio.com/items?itemName=searKing.preview-vscode) - [Preview Sequence Diagrams](https://marketplace.visualstudio.com/items?itemName=arichika.previewseqdiag-vscode) - [Markdown-It](https://github.com/markdown-it/markdown-it) - [Textual UML Parser](https://github.com/manastalukdar/markdown-it-textual-uml) - [Mermaid Plugin](https://github.com/tylingsoft/markdown-it-mermaid) - [md-it-mermaid](https://github.com/iamcco/md-it-mermaid) - [markdown-it-mermaid-fence-new](https://github.com/Revomatico/markdown-it-mermaid-fence-new) - [markdown-it-mermaid-less](https://github.com/searKing/markdown-it-mermaid-less) - [Atom](https://atom.io) - [Markdown Preview Enhanced](https://atom.io/packages/markdown-preview-enhanced) - [Atom Mermaid](https://atom.io/packages/atom-mermaid) - [Language Mermaid Syntax Highlighter](https://atom.io/packages/language-mermaid) - [Sublime Text 3](https://sublimetext.com) - [Mermaid Package](https://packagecontrol.io/packages/Mermaid) - [Astah](https://astah.net) - [Export to Mermaid](https://github.com/Avens666/Astah_Jude_UML_export_to_Markdown-mermaid-Plantuml-) - [Light Table](http://lighttable.com/) - [Mermaid Plugin](https://github.com/cldwalker/Mermaid) - [Draw.io](https://draw.io) - [Plugin](https://github.com/nopeslide/drawio_mermaid_plugin) - [Inkdrop](https://www.inkdrop.app) - [Plugin](https://github.com/inkdropapp/inkdrop-mermaid) - [Vim](https://www.vim.org) - [Vim Diagram Syntax](https://github.com/zhaozg/vim-diagram) - [GNU Emacs](https://www.gnu.org/software/emacs/) - [Major mode for .mmd files](https://github.com/abrochard/mermaid-mode) - [Org-Mode integration](https://github.com/arnm/ob-mermaid) - [Brackets](https://brackets.io/) - [Mermaid Preview](https://github.com/AlanHohn/mermaid-preview) - [Iodide](https://github.com/iodide-project/iodide) - [iodide-mermaid-plugin](https://github.com/iodide-project/iodide-mermaid-plugin) - [Google docs](https://docs.google.com/) - [Mermaid plugin for google docs](https://workspace.google.com/marketplace/app/mermaid/636321283856) - [Podlite](https://github.com/zag/podlite-desktop) - [Named block =Diagram](https://github.com/zag/podlite/tree/main/packages/podlite-diagrams) - [GNU Nano](https://www.nano-editor.org/) - [Nano Mermaid](https://github.com/Yash-Singh1/nano-mermaid) ## Document Generation - [Sphinx](https://www.sphinx-doc.org/en/master/) - [sphinxcontrib-mermaid](https://github.com/mgaitan/sphinxcontrib-mermaid) - [remark.js](https://remark.js.org/) - [remark-mermaid](https://github.com/temando/remark-mermaid) - [jSDoc](https://jsdoc.app/) - [jsdoc-mermaid](https://github.com/Jellyvision/jsdoc-mermaid) - [MkDocs](https://mkdocs.org) - [mkdocs-mermaid2-plugin](https://github.com/fralau/mkdocs-mermaid2-plugin) - [mkdocs-material](https://github.com/squidfunk/mkdocs-material), check the [docs](https://squidfunk.github.io/mkdocs-material/reference/diagrams/) - [Type Doc](https://typedoc.org/) - [typedoc-plugin-mermaid](https://www.npmjs.com/package/typedoc-plugin-mermaid) - [Docsy Hugo Theme](https://www.docsy.dev/docs/adding-content/lookandfeel/#diagrams-with-mermaid) (Native support in theme) - [Codedoc](https://codedoc.cc/) - [codedoc-mermaid-plugin](https://www.npmjs.com/package/codedoc-mermaid-plugin) - [mdbook](https://rust-lang.github.io/mdBook/index.html) - [mdbook-mermaid](https://github.com/badboy/mdbook-mermaid) ## Browser Extensions | Name | Chrome Web Store | Firefox Add-ons | Opera | Edge | Source/Repository | | ------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | GitHub + Mermaid | - | [🦊🔗](https://addons.mozilla.org/firefox/addon/github-mermaid/) | - | - | [🐙🔗](https://github.com/BackMarket/github-mermaid-extension) | | Asciidoctor Live Preview | [🎡🔗](https://chrome.google.com/webstore/detail/asciidoctorjs-live-previe/iaalpfgpbocpdfblpnhhgllgbdbchmia) | - | - | [🌀🔗](https://microsoftedge.microsoft.com/addons/detail/asciidoctorjs-live-previ/pefkelkanablhjdekgdahplkccnbdggd?hl=en-US) | - | | Diagram Tab | - | - | - | - | [🐙🔗](https://github.com/khafast/diagramtab) | | Markdown Diagrams | [🎡🔗](https://chrome.google.com/webstore/detail/markdown-diagrams/pmoglnmodacnbbofbgcagndelmgaclel/) | [🦊🔗](https://addons.mozilla.org/en-US/firefox/addon/markdown-diagrams/) | [🔴🔗](https://addons.opera.com/en/extensions/details/markdown-diagrams/) | [🌀🔗](https://microsoftedge.microsoft.com/addons/detail/markdown-diagrams/hceenoomhhdkjjijnmlclkpenkapfihe) | [🐙🔗](https://github.com/marcozaccari/markdown-diagrams-browser-extension/tree/master/doc/examples) | | Markdown Viewer | - | [🦊🔗](https://addons.mozilla.org/en-US/firefox/addon/markdown-viewer-chrome/) | - | - | [🐙🔗](https://github.com/simov/markdown-viewer) | | Extensions for Mermaid | - | [🦊🔗](https://addons.mozilla.org/en-US/firefox/addon/markdown-viewer-chrome/) | [🔴🔗](https://addons.opera.com/en/extensions/details/extensions-for-mermaid/) | - | [🐙🔗](https://github.com/Stefan-S/mermaid-extension) | | Chrome Diagrammer | [🎡🔗](https://chrome.google.com/webstore/detail/chrome-diagrammer/bkpbgjmkomfoakfklcjeoegkklgjnnpk) | - | - | - | - | | Mermaid Diagrams | [🎡🔗](https://chrome.google.com/webstore/detail/mermaid-diagrams/phfcghedmopjadpojhmmaffjmfiakfil) | - | - | - | - | | Mermaid Markdown | [🎡🔗](https://chrome.google.com/webstore/detail/mermaid-markdown/mboeoikjijmjcjgpccghbcoegikliijg) | - | - | - | - | | Monkeys | [🎡🔗](https://chrome.google.com/webstore/detail/monkeys-mermaid-for-githu/cplfdpoajbclbgphaphphcldamfkjlgi) | - | - | - | - | | Mermaid Previewer | [🎡🔗](https://chrome.google.com/webstore/detail/mermaid-previewer/oidjnlhbegipkcklbdfnbkikplpghfdl) | - | - | - | - | ## Other - [Jekyll](https://jekyllrb.com/) - [jekyll-mermaid](https://rubygems.org/gems/jekyll-mermaid) - [jekyll-mermaid-diagrams](https://github.com/fuzhibo/jekyll-mermaid-diagrams) - [Reveal.js](https://github.com/hakimel/reveal.js) - [reveal.js-mermaid-plugin](https://github.com/ludwick/reveal.js-mermaid-plugin) - [Bisheng](https://www.npmjs.com/package/bisheng) - [bisheng-plugin-mermaid](https://github.com/yct21/bisheng-plugin-mermaid) - [Reveal CK](https://github.com/jedcn/reveal-ck) - [reveal-ck-mermaid-plugin](https://github.com/tmtm/reveal-ck-mermaid-plugin) - [mermaid-server: Generate diagrams using a HTTP request](https://github.com/TomWright/mermaid-server) - [ExDoc](https://github.com/elixir-lang/ex_doc) - [Rendering Mermaid graphs](https://github.com/elixir-lang/ex_doc#rendering-mermaid-graphs) mermaid-js-mermaid-9bb0ed2/docs/introduction.md000066400000000000000000000001571433273745700216640ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. mermaid-js-mermaid-9bb0ed2/docs/landing/000077500000000000000000000000001433273745700202325ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/docs/landing/class.png000066400000000000000000001042121433273745700220450ustar00rootroot00000000000000PNG  IHDRhuIDATx{|ט01a!;9I%EJCI'QR_tPQb(IB;e{ivv3~\}x׵}>S:B@!ʎyܮ_oP2>3I%Zy>)b\.Rb,"\؊} ˒ Se+!T!)Od-/n/7EF\ H%i7yn2Msj)4Ktk@ѦylӿTh^q/70|p:}DH%h]A8> {A' iطK܇׿jxrFUKW+1 "DI )sQ$XH%?m`I 7SCKjp,DY }Xbm#i4O$}=c7>*P$sg)0bݤ; ̘ea&* \5 `~*@olK8'J+pW,#c0h6 .9PRBjyjy˲~R~Wt\BFR(ZY [^1OnٟpVL-o5~zX@rGy*!@$/tM ZX6ѭE0]>UɅ(ZD`)0 -?o,U !)OH-GA>K܀1dyJCe_0V3$,!JT!|!rqt,V7(w&~eGwZ/P2 )͹ 6;*G}BC'Icg0'f;S q'7HwhoS@;Ap2pp 0;q~G`4FEy}fHwRY¤esTÚ57rS5+?;]m`SG7 +S 71Xs 4C.lE!EEiOH}~o!u t~v;t+?R>B3'rW! qֵ-T]< uHNn ep:ʖ|'#D'r>c0z: *7@J~hM} D'#K4$P|(!-'rpٛh7Y@`VP6> _B.`fw<7䉲")OP |Z@,]l30al.&la -'/-%[m3`&3) )O@:⻔}.x;˒f*z;vB'2pIJ/wwo]8 {)[/(;R6yzA6k,0Xyp[ǔo R͹ޝq»V:? Z(I+sb٣=z6<_נS#$_|4 Q$剂YyAܳ_fwSt:u}q/_π ۩NuW¹*ukfG|'5'ף;cN;yvc2>;G ["Dթs=*r[P[ȅȅ( i_pvQ;]R/H :L9-BBR(۹ڵ [Qobj>Q&W<x}B$割:}BȅBK$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ %Vhc.[Vݳ]/"wD@@۴zZ.k jpxDWyܡ+7:մUO'HDr9|v:$Ӱiigk5jzM7ӧ~yemp~ѷ[NwWocYŸ 2dT^'lzhv`VI{ZG 폕ޛ3O :Av?`iS?Qʖi#ˁeXǫ} [Kѝ̓M!vLSox$r`w%+Mm`xGxXQx|>R{s@?0-b'=x,a>–H-O?^ϙ*[E7h,*8ȳ^cLNøʈKz(mM~`Y)XE Ӏ~7vcg0'f;S w:y42{ K@Ԥ,au )OIG0˗s 0X̵@޻CϞZ,\ z'+N] #,} TL_6/0cea *aw\ l:z!<\}y5|(KXBd [-yY'JSopv϶ps(Pk"/^`+T|*u t~v;t+?REEiOHn (=bR^NxU?5y%MR!ǰvЭ[ _Z[4Ipk4BN`y/=E9 BMV6Q~0Cbq69}41`~cVKkܡCŚep5 @`hߓL -6 e!GC`V%VI6fBdzsk~4O$X_|(Ka\1@,K, Kh<4D5/81,{5yjZH X}/!DWgѯĭqŽ|ȱ,Pra @->]0)BtbGʯY g6Oxxjͳ,WR%ur+ @R(n༒R Il='ˊoπWXNy0jz}v=[Q逩BZkuyaz/yU֥Y.i vAjy⚗H] bBލk7X;ۊwo]8 MPX YO yxcP̺n7e*kG)~sw'`[+oǭDMKxx%>ų{t;ȅ<%kP!64U.cK-ZW;eNz:$VJ^mKw!YK ['&&L<2ehl/vinKxmQxe:8xpzO(o*t)oPy-,!̜FC8M';ogN_]Ǣa u/ܡN<w]YM}j5ȯp/BQ>; -+/he]Lzw](_ym/qiiO.lE1EIYߤX)g>oNjyL\+u~c"xXn^չe nHe$2FH-xQڵvɅ(fd|D{5b,JҤGoկ#ۚ+S ՎQhy伞j&J%}sVOy2mPy0wh1Ƴ8Vb)#glֿ) Ezl5ocq$2M7}'7 wx:lKʧ6E)IyCtzdIyE{^Xk);s*j֬ :1(q.uZA5q1sUxGr~\ev)_flI6~hpdıc[;*#eERGG',08#EXnx#+ ^IyIR2ժm윇,s^P"1ȷHIyfo~bQ/X廀sNWn`ۥ[:*=Z+sG.pb_ wmZGYuΝ=soUf-%1=A,KS! >׮]APa$9'T/RݪBe?/7M5NY d `#'h9pjD;ϟe=y5%#๨?/bkX yŽf2!j+2|߾&A%6@R9u}PzlpPҎf{'F:`qi6pS&0_cv6L0WFV}3bdݾ%D=YxpbdԽ ( i&ly߰   FWs\x9{h M (j=(,M?uJJh NCˣLatF#4ڌSVA\J1 7Z\;X[g@/hD3/,/f?a3nFG'1ꞱH` VV[f PisFզê ݍhZ,g#w;[ڧ玹b ٬2KݤHshȿwhԶ?&>9Y5Gsx4Qb x,8>!u<3=`)^+ ozn;Π| Gr)*g5N5hmƽz_Ř[2PIjy/.:*y 00/hM_ 0@.wcyB3`ЅmaP kfh@`PZmۖZ50Dbv,UZyl0ӹ}d^GP g$ٹQ lf 3-Rޘ/aHŰmf (YwLqz6f@Jޥ$Ņ;pDe:r{EFo .jg QQ#0N}c`۶;@sŰn/0H;Z/' uGڙ3%sxo汲B"mJ2&)ώo=c4J l]UL<ƺWЅxpw&w3#(+xvԕg25,[Xw<OOަZXζV+X߯hoO+F^Ivs8`0Sc m[`H&J<s H˖"#A4")6$GF+(C@Dɪ?Wdԁ>eHOR-8yAEAXش*zEDTMPlȨZ(-#bm *wp$mock&!2-A~jGyTu#2e פIȈ6 uISȨ˴ T;Q&  .9J[xRGW-~ah$$: j!ʔSHHl??m R;cdIy({m#"6o nv$$)읉B yV|}{FDKصKR^Y7*2A65(cuܷ7HZ2ʜ[yUo g2ʘ2t-*j;u;-҆U$啙Qhv Vo("z˖jG!ȡH"-GGF WIye!=*|D؜ƍ{G<%(HޓQ&$啾둑T[@M=GxDbAjJ[RdUYUz8j$啮4NMv*ͨеktġ˛OJYjG]v y_m+O<اuS뭐zuC ^PԳg9ӷJjy&9*8Ul;ߕƁv<7s(Z{Sy.SV v$LR^)1DF^^P\?6ϔwe#keHõ)M뷅J")TM M'QRb~^{PkXSaTV;%)FAԎ6GFn0Ιv孅4Xv?@Oh;7}sWg|@JY@/Sel V;#)$0#i977\ O|ôAlOG{cP6oI~ گ%LRUDžݹ3(D^Y$啜CQr{Cs ʿ. 8Oǿi |1z;ca̖{{ĞC )v(BR^ /"2 fթ~TuWF@նpH\W wU&h$H2osN}FR%BR^##Rv%3Q/e8}}pliR}_-$CPbZG3_hzuyQrMCWNi6\ɀVE9wvER^q܍S)7 x5uP=zcX % ܕcgHCuqWu=RT1N&Wf/XW le5R äҶۃC}WT'##o3xq }&_%$f[U,)CUռ}QX[t"PKϛmĆwcDڙ ƍjGb$8q g͋2H ޟ,NQ~j72v ¨;=qqBԎ^I+4 t;k+_7Z@3.FŰewm4ad;g gϑ#CCwrQH+$CxCu;]Ϟبw"օ&q4{ZY`uWb7<2+W@n{?=4_J"Iyr* >`"Wq2p_[g<_[$0?8X~9rϑCCe$qJ/~q 3^pZNy{RhY~eE Q`/1*@JA~!;vkWyvSޑ=2ܜ}1UjǦ֮ln.l;^JC!;޵_Քw <o(?Oevks?vhC!;vk׊jG*mR)$qfo~nFܯl;g~k鯍|\t4Iݼ&kG Z޾[3GUY;wTzQErBVkΩS1>h)_.=Կqخk>-Q3;b?ܢҹ'j8Ġvza{vnv6˘{U;urnWUv}.kyw~.ƃ{M[6_P"&Nov6\V7=v f)/h)Zr[bq!WRޫ콓<߮DT`.NjaУ^$vco)/ߟ?tP5uI:MRb,\Z];yTM󳳔mYKOD|jakjNLlJyߙ{|=_h[ޚMmw;o:@>2$wa:V18vwVf qj]GZޯKKEa}sy}vM5OTJsjbOm8Xi(Vv +]dHxt--:>v|*qg7M~%UH_t{A8k y7K`uQS^̷Jhn0@N[{_N0t Y}}jx>p[ l^93wz!AP[4UK@\_c=sqazE?d"ږ@k)c-oyȏKO6%eS7cpDZsHBCQæR0dT; {g3?NFR^57Ԏ"w7r}.O R; Y^JZW?t^nN9vwM.esўT+sU;F;53${xXŖ]Z-cpXm8v>>v]~ Vͼx+’)/r'YIZ^i!إ7HS; ꥼ k;$j`>1XP/5;7Ҙ>UvTKy9Xw r][j;mꞔ??׫DRީ,o*9zQʶgcA"Acw$g%:-v&*}2jWtjELTJy7}I-<F.mIyW’aKCw[U'E\h'/)Q^ݥMR^q hh#ꤼh䕰[R+u=%\ڪJw0r/ͼh6.mUIy4TL] jʶX4=EP)`nvP+j`=KjR;.&}TB]kNcP)I&e U%hIZ^YuCoBnf[9i- R+nvU;9rF@4jwTIyij>ᤪ&ɕm1C&IɶjwKU')OWlbnOia,OX,ev/6Qex,*kC~z-/8X㘨Jj=ΑF[-_Qe)*}buoJ=R$;;m;vfl^ !O\:G|y?Wbk|ޓt_T' K Fer>۝ ϟ?/V2jѬ[l1BxN佚c>#N0 s̍J|}O^UԎ^ՕUHo  acS(D ZbZ:E- miU\4[+O2Ky}2nz;ΐj p&3GeL(}[(N*ycnE~UjUqs}ӂf^jn̚$:5o ?P. Z_3!LCψpښ Fa2K~,O eV˻P3]ZT x'X`@&K@9t/@" yOh4&`RՎZQ)ϯqpP׻f/O;`_@ggXvB؈Jyہp )\ gN@mOPښD^O e7Mv]Ytn^+ u7m$\/RލpBY?>.Y5 ׳%-aڑ a&mmS| . ̛Mql0y\1}4".?T0ڱ a J=%\X)M;;@ԗ@`uymf؁Ynjv?Z 06ƣWw7yi7]%ڼ Vʠ+SoZ> =3\wh>pb#ĉm&ռ,Zd`Z{62{==yEƮê}B̞}2Bi'~y/O}X0kfm|i&Fy+'b+#Eynlb%j[r_뜖̜ٞ90S؅P_i<ÉE{>Ψ>@i㛮t}Bl2wlϼ0(n@LT[Sq3=~^pTyaqbin/3ws;AO}6l՟V69A9~M5'Ϛzdt>!l:/QpI[qASIQ,@S½[MQ1Sb P/1nڡ!)rsv8BՋ>j`wO:@).sr -zABԿ`wE>昵;⺭U;^۱7%l[kO$.eSC}=˩x Q\Wzg_e!ٷsc)wzeFvS&?yr lRڧC]TW;l 偳Oc"W20_#&R6?sz獞ϩ+7|/o#tɅ.߅&++ N푹'6i(Ce09c6ġM|-Pzdj&Ms]wW׽@E.[G`4`1 x8UJZɖeϫo5l D:c"tӻ|gλ gBطt`#JMKLov6"u3q-M5+㜭W^1Hm|'^*'DNLaY%wyj{.W*>xC=8sŒ˶.xܺo3}DROR93x0ƇX#ƹ=F16lݙ x>$OX`5Oo |>4<{{&@^ߴV J"^Iy7F匕KG0=k~"݃pߣ ? L1WFy67'DAuc2F` 1ó7xJ3'Xf~k'DNZ)gY㫇~>K`V;h[xӔV.ʓF-*Wg4嗏2ϳ#'DNx8 yG@;s۷g>mBFN*i>ssJ>D|U}+FmZ`fCJ̾rF`zF-S2)7OK(8̍P;tv>Эywծ ,7>@ u҉QRPn`'p>100 ~WTdJՔcٝ$;Q W8l~ 0( c!@Xn)TRR Q`7':J6Zs7`4S/4/fv`|a݁h%IZӰcc\.~[e8߯AiY9mބ6SMd [ Lo G3޴JǷ]n6.8U Qʽ3ѿcxj2z>7Tۮ4I̘VGTϱm9M}=smGr0d`Z@?Ô'D3Pdz62]& Ki.S*u;xS;F:?(1s>~t|HsJϱ(}R-VR_J]:qWV.ΠRb^S tRS]n?Ԣ2xƷv?"wfm"{yBBu!jȜ87lFT.h^Bhc-۝ZX^ƙ)7*֨չQ e}[Vǯ՝f%ey΄(MELyw2MVGj#[ʹ)_~ oӌgk5jz󨷝FMx:qz'SoOj$@\ҕ;Tu_罚V5$םqif]?^Q*P9'ռ咋qg61v|s xp{No{NZX~-&:OS75!d2Ub̈́%^.[Z Nbw~6 `?^5~;%a$=-4X!mmOFq,'Y̪j>H[{T*uM_M~Z|yc˴D,Fi8=ˎ* F~LнS5we~#'])Dm}:Xp6 vHX$&~=D<[l6Fxl\^j;*G}-ݹ<bWq. H|^@̽0DٿSVM{S'`9N>) ݲo40bUXWuՉvy'-O؋5_< 9__{4<]^,N&f sTSމ;Z B.̫ bW0 {cg¦;? DM vw~̽=^?T#"[91Ӿ\s!=Ҿ0Ưe֟vh)0'_}@6bO>ua\8lAEX:y6u~M͚fwBܬг究iZWB/Aʗobњݶ/_z=[+?;7Vy'[7UmaM{Ūz3l~N+r;r[OpϖN}Qx!u t~ve۽ Y矂ei e+ͿN{9]6@.v'@O` P4Wmyqzk \1fmt_Z6 z6G[I a .Av~@?xmk;E9 pN`yY7sDXX/>@aaaa!,,,,8[0| k;л t-Jw?E0#Q32pH 7{3p\P9f&/* ??i!lWWՏhpuw[$rOՆsPPf&zYwpzk]6.wS kj^l9NVHv#$)烾`je!0\8^ƫ惯rp)[YBo`t<tU&x'LkO]ɹ.(e]O{9,G.=9 8 DD} m_̈́ďg\0Ğt'JU\r X:pix@@YnNeU1MO$4 p  @c:y Tm*tg# KɲAo]^-)}125P<.{ӀW P׼Đ^M;uM]1n&l9P2̟yle=^vhl]Ekk).uJy}Lw>x6<]ͬ.~yzzhs;Gb6gۂ}RR0)B<wIE,7T:CPQ{R= |u#ϾorO:9`h)Y\ |5xDn4p6%[}K:A,k<3ےgo2)v7%P^D+k{NFh~4S{zi:`zFg)tWr+ЈoYGo̕0%xLMZu7.R3=m١OPjGh T+"|6mr*+IE%ӌX4SȚSىS Rt?&1\oAܜh /y Q<ɐr!f &Oy?z@ n @L"Z_).d)a Ldyخ3ܠY~![S:DTؖ&ksڕ01Ҁ SCnSK_͓W:IlnՊt VgG@FD(`M`}(mf}+=kQB:vS|! sfBڬ0~G"TΜ\ʶmx]3<0FuxƭWXWbb{ޙKOL,0m '{o#{ajL=3_ax*ֹE;K nƘr4xF{; `kU2w-Sމɷ͘@R~ t^'y$l qީ^V< Q4E ph;ض"c-Sd,VlW'oe$R4? i95`~0O͊vZfv;1N[s 8rmɔiXOQST_[(u>]e\Y#=NZo-Evo}u,B7/./zsg1ng`>gsjqÌg*`¾@I{3 |޿ Jo`!Dq67yaV)7`{D;u=+~Bhj)o7`X> *0nV\PhH@߫xZ!,6 )%O;0RgBcù1CH~wUKySj7j׶nl)SȷDdI3J)Q \bmŕYf? )@;sne_tm)tIL?T2-ݡb7wh})/q/QqRrc#KJ+E߻T#X 1Nj<,E8jC?^TBEoO0}{JfǟuK*@h^ybpE--[Q9Υ :}Xp!w(Hhg)Fp$ G9QE*fq8I7Tu U]I?~_#gWG־w^I˽oܰ}_&9zۭ2gm׈6lbxeifKRj^r>~Z廀rJMm 4ץ'3mp2YsQnoJJRp8G>|1~w7^ވ6; C+d[|1:Ci@5;'ߵ$#s k˴D쑦 YK-4UMMf1;=ϗ3Yι-Ȯ pjJ'dr{xI#O?,jw!X%![_]y[]X3+oSYehs]S1J:<Kh ߹r= SF³ʀX]tGy qid5+#fKBGk2.!I-O8]ؙ9~[aoj\T,ŷ'A68ganq5@=vٺ||bÜ1Gį0{ K@Ԥ0rf=4ھXz'9៌_'-ȩfiUgέm#10".#0,?Z^d$ 㵎VIsqO`G4mxw{W zҧnq/`SFvCi؂uXcLwi|F w=˫C9Km`t98eaE P"o=˹%LZN ~[ae7ah-1߁p\ ѳN: ۏ1@{YY;ŀns>ejQ1@ ~&lr@ߟiw`&0~meA><}YY1@M[ :lzX+$m:=Pm^AARp驩9+uۮMONr:6t7:XT -?@P8i^Sz\R+M}Π x"qg;Sh s.ȓ?>P]??H1{ z.Z.lX_]G5=G~O|i#=KxFr2斤jg+`!0\RTt4~<@}S` Qr,Ә/a llƷV*āITaȭ>з"0Θ1C7y܉į2XRxXÀe#SJQ>QuMK@|Zy^C~=m0n#fҹ]rG! [X;<ּ 0] _U8ת:Ng]5?u_+MEFGGGG{A$ṡ {{OOv([|"VgGLyQ+:7N{>!<[Y^Rʂ/@eYyc5jUr,#:X-++;l2lqK~ ^f͚5kKo7ہ, /?~*ӕTZg-RZل4Λ9?f󭥬 $:{ i 9m朷*73N1bsvf?)[%K;_ԵhD}0 \Jr8\n0 F02=+f[!'*.f_x@ula= 7M6^6WRs)jh6E𵒵Ì-r)FI ̺Z Q<-̀K떣> ⲾE.a{Gv`M>}j(kef;c&(}s 02 _HբO7tRW^֗qekqLA_\~ -< |u]2%/I{R4cssΟcV}JiZKYgr4hJvzleo R- V?{kξz˾ryVATG6$ m G2SEb-K50*ozb>}z$pJMo3)/u*.57U;J`1}'N^d@olC4\7֐qj'(MTFHyq -u{W5׷+ ?4ku5Jfqxx9Jڧ:.剌5&-C/(ݫ9qVN>|Cr9T ӏ]a蹄wrHO_Tj!Ͳ®,Zg|!YRYZg*,@ pĽI~rsGohԠ|^Y 7\ҋ;y嘺-I=qwt7|/<;_J7}KYHr{-Oh`師f=ra+4oοM gƥe~Y FT>S^\~.%c_:? PV pkbݩaߙf5XQlT;! ٗ /g^B]9^SZ+O{yR(0 !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4h)oG ӊy2y K^ Sj+=+Zʻ boƳ8IP})vkgvYO!>n?W4FaF}4Sx(c YveD{y 71 q-O*B7[.@՗vB-jy)_flI%σ<,ߍR^w8Ojx''+AYx,>ePT~\Zޛ2ժ-sNxN9nmO(_Ongc^Vڙ7&nS4|ʤ8Ram x{L 2SODH8i'V%(+ޢ+\rK{5q|7ͷ3~.~ BQ75!d<_( iksU>C5޳X>M3QB<Vccʷ^ O?,jᓰG.6_+%m5k*ΘW)}*ąm}`/W2}2&/5Ogct +y4PD;7'VIҼs5jeRP&z*7L^;+RŖ?}Bةb0-t?k0im6׫ycJSbhk>`&;~qUE# ZKt{ Cs\_36k+R>8!S}0ll`)a\6Ѽ'1ӵGPTf2oTRT࿽164mj۰>wa a-c~/p9_+DI szfN@UUjJ_ 0.z7_fJa2#ٴnNgpZ>(оA0?3eX5|5ͤ$Y ULgL7fs0h3>66[N gw|J@+r)G+}*vWd(pj+GiU3(U;7sϞpk8Vb_@ZВa%L׻B*P-hAI4βN$Õz5._v.`љp[3Ql.{ӀW P Zp`r⎭~>㧰U(;YW9BZ\}*S7k@#I+Cr)${ Uɀg|jY6E?!yJwr#1BtDG騢8 Ygr4{'2k]hIGR 0m9pp<0sTz̘\άCҶ |MWc( 1w tZ:_b(΅ @K$䲇 8n^S͵m`ܼ/4=-S;KkEMy]kft p-j]Fu6/8!SW/r] c$ĩ)tBme< \M#0M/L%zT[.)a;ݤ3NfSRl7s+>o~;[:g|0WVRM-Ry{a}16k׈] UPo;^on=RĔ YV/c2pՙ>?Lw~Y6ajiNưIyu<16G{Z=\eѽiynlY [VݻVIXc0ayzV zR <.@WZڛ^^xw7 hk"ļҊ;`2>.;Oj )O8ɽuFB_uXede]^aZr")ݐN~!970rܸqXY]q̾MAW\_36)jra+/@ק l̃c%Y֯W0/B3ޕZs#7;UM;s~s~Iҭi'`Ѕ#:?RhV :@}z?Lx^h?(ZK~os|Θ[Opϭ95A9B嬩NjyA+7kSʹ\sC*t^Lo 6UbSdQN}%3+ڥ4$D7sHJXP< Ƭ>gkYwq6Kw) \ug 7[qX9i_+Þ^B;.򂪬)Lv/u05( ie]>Ϙ m!V߇)i,0#˞x|̑<7G93@+^pDg /OC1{r#U{b˥v}7bl޻ށm_m *ӧg`S'>Rt.,:59%}R]{'҄ـa1'$}y,`ʂhO0 !5PI+s#f ੉Gl3${t#sݦrO˔wDKRp@GR { 5{(q}S'YNuNM p_3nT`Yy,}`2*2A/gEN\RwJîTRVڟtM?POMugOw#-_OkzCjԭ$q,,Mmi`S;֍7-NTp{S=-εæx躸:}lo#j Q[>Uf!G.loONm6Cƿ'A ߮3gMA xdm7o[Fxm-RtEIDATWgILCEp(.("xw~o=<3ӆưBM<yccy{t碠yƜ/𫃤W!WNZ&|ީ  }*0 }歮=bUJMIR2U[#(5?4߂ 9C 8> ^yd4=1W˱ږoqeܶ)@C&Y^Yp1ѼQ8=Tf.sHFXH.GjyAпRSF[(7MSPSO'lxje4ٜpT`?6ff~{\.Sн}ٛaDTZ}B؍7=񝧍m 2-kz>3ť!=Rv3M-헕z=:j8mUYLJRN+Z"0Θ1"ʜ幜Ә:J>fnJ( m=9o̜GڙP3Rwo4OǚzMiK̮Y%:w1M_M4@]ғ x|~6ro}YV9G.(PsLŠ#0k0~o5|97Qޒl|je:y(p3$/.ت$Sn0"dNB)35o/ڦ55YXMw >+%uF'$fߨa(' a?1@UymXz~fMn \5=Ix*,}ZY!QJ'1~0#`Stf}+ڃjXiBTΘJ^“9uIdsfI[zp!;xmE|.'>+гgƤ'`w_k3;;v\&qj}`ъ־'v3˝-~2V =a^yn:nSN iH}-1KOyĖ?X)=u`X"aJ3kY@*O0F|Ѣ,a/(Kcڇ))R8Ϗ:[sΨ5LS>z:k郿{ռ[OH̸>+%(~o߈^^~Y*t>c@QJ:d^JAgPjBqEN晤< 0wXHNx@ʹ3*tcY?eejK:\Rî-&'NըWmpt.mbљ8Y倻;k_:Bݺ.i~饓龺~Po hTXjfBu x?=jA&ML]2~5 *vƳ%}.elwnfz*BfMLN!4f.O8J/|*nQ]@ͱ7~gb28[ט&) HHH%0LdG!iKVm2}[}ڶg3lőbQ}YNɯDx6O9A;1R9߼{$@$ ѯC_%4l|jދlu]g]挎&qK9~xԶ[e4c,V-[}ѷEj]Zqӯ%u b DR 2Cu:5 ^$TM93(H$Ja$DL"=:Ϥ3$&DHĆĞʭ4̢q @G!tkQz@DGw{Am[zi砵O?ӽyWϯX~Ng5Ӽa=n>zV @%"A+YM DdG!j+:1;1a~?i:ɣ`ݹfY;mas,[~7m7\&v]n\nZ+o&漲̎6'n]VGkLJA"R LJiCe ȎCԬ{n9(G{WV(jSĕ%8X[Ѯk23]RJbjA$ LJ^\eVd19z\۷% U|5-NxU{Nsi,fk`v')׼?_b=Td.0~q^b3v4kW7:xb1cH!1( L/ǿr#ͿoDeb-.fK3kM%[MڣMZLkU3V&yF:d=j9wwwA^,-g1RtD28.{oqo:hu:Zu혼L6 NgixhvZt쑮ҙ,5٩]kkl7c+Yo:ⱱa;XD:uLXתV 0|\Huv'iqNWQdu )ڬ0n>u E y}M2u˭x R &%D '+ҝMxLL@1G[[vbs"C ΰH&BA!S! İ%`OZ|ӄ H@1GgH)1(J% &! &11Q!BbXLJ9[ɮ(_)׋!=MÚtpu^7 H%19JbR ĄxLJ(&%?Ov/<3/ѾK3MAgm{t K % >v CcCۚ~x=m=21|R7%=`ζgS|#2LKLKX'w'8 KA 'v޶XIf+f alR,"=r?=yw'8$`K\LMLHJ$󮜉W|鐐`3؏s;ˁz@WOǙ7Nd0 i*A İ t~S;K[\cǺW%4L:bR bR 1Ha܊RsZ^e % :Өm.=zt2bR bR }^>MPɌZȡ7\At(U! İ%vN[k}ӨLJA!;H}^>MPcg#b`4.t"} HbPThtgçc^; G!l-F1OzE'5:Xx{[p^Ht,N8[`m20`o*ďOPtH$3m#6<$v WK虉1!"SC$xYh:aKW5[G,^~|{z'iԇ˴@- @S*t}sJ$-{#|sdz:y{{y{]k]Hq뾪9\A]Xr*Xi9WD4NrBOf@2 !012B"3@AP#Q$4CqDRS%Uڮv]WjUڮv]WjUڮv]WjUڮv]W5v\\\\\\\\}wGMe7qtQwGMywqY5fƳƳVjY\|黎fƳ+ŏqۚ~UfqSU$b2+m!=r|TX"IYqbC8ri>{H CT]GMۉ-b5Jk֌lJх@:=(EL"EVZu`Eg"uc07n("s>Yb;8VJ[ThE%Ta45^Grgewwb,g$NA;qDΠ=)tqwTFtLTۑb!(ua5,j0̋O>T:qAOEJL+wTz*F'?8ply|0O\gtCۈ[U P?OvlՂۍw݇ʇA>7/ѝ#IEhrBvv;P7fe2*C*H$2ʙXt5Sl>Ug7پm}R @af>%ș *^Ѵ6?3pl 1dq,f,سr<{Fݒ4YH,\M$"\$+]_:^ѼTWM ݏW;(MXÊƦh/AOrHXdQOr\*27v6نYsptSʮ,aYx0یnΗsnIrwI>"îwS$IRC,}y`f`( 6PU&'$2דL9_:^,(&' 7a  9y_:^V;i?InΗ| )\i7|'6WN4wŶH; K>fQEMev5 AѹʄbI|{G<(̈́ѡzt֧-qwtETl$G`s K?\ul'`Šz3{F2SIU6хR#VY.b\2$b2ڸX!2BlNPX >^ѹ4R`ciHbƿeCD([F T0kt=px_h0,+-Exa:pV<DK7Qӆ ZK Z6Q{tOK?e? X Vֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳ1~) !02134@"A`T][%lJؕkbŭ[-lZصkbŭ[-lZصkbŭW}& yIyI+m`V`V`Vm{w|bU(aM4jpL IU!i(YAfIcrB.Eӡ}Rx2C*( lwI="fA8LĆQ88w2*5j1mzHEy>)Da$Se ^ k I{ 9G55cQMKϾJO6KB82[HP~M8 vk,e8I- #}Rh>k u":YƛHVqX쑍/>)is eTOQ|iO$2 01!@A"Q`@ZB( ( %ITt8ðPX'u,B;`:ل xE(;`9 |@t Oy`:,B\FkJ/E CCjX5@zsI +I A}U]\H^g;fwn:. vF*YY`՚8)  =J6دr + bdHs;꼫S]@Ȭb4^EU4 f03;+h`Un6!̪Ic\s@u@cfu^bϙ$s^cvwGn6ݸJ`ܯwmECB;^!R,!3{G"໗Y&IFefpB+6vO`hj|3C$U#1!ւȦOXrc0TϮٲ757FTFothUXk#zׂFG }GUkc?1Z;NQ~ MOVꩦM%44 3@0*Kit l0 JC`Lފ EHHLܠP%S5E;c2Ơ"aoU,7N~j&kQ] hLIgdLrRe ?u[>j"!1oDq4 q.DSpDFi>O N""%`4Eg8Qw aSQlDC fHm)8mtKDGfRŹ*>艠c .̢oewTaMۢG5c}w;T (ш~T`"!>-UWBOڗO%C^c-|KE?0T|SUneEpePnrA$_u} N0wrŹջX\MRcwr;pYogߔq.ӿM\;˂<[Tose¾Un϶ w}eè_ q*G YqoUor6+.?T9,eG=tYrB`qܸ|NDf86euNDf8Vgseu]Ba߹;tYsB0w?naeQ( {im6m>V^iFTbq4Yx;AD&@+/ 4}"+-˅bUbJsH=Sz%FOdqv fI{zl!PrsL/p r>zV{(I+xp}i9SC5k?Wcaoe LrUؖ{(n7O oj |u4~:G-Dn@x/eZQJRTU*JRTU*JRTU*JRTU*JRTU*JRTU*J_* !1AQa 0@qP?!:W+_m}_m}_m}_m}_i}_m}_A}_A}_Q}E_Q}E_Q}E_Q2$ҫ2.uucͺKfnwY]&.5Ru˃Ao=64no^Z JuwY]< ^iv;bQ6)P1ߨݠULtC@F5ERזAƇmMzH3h/1:A :%0`$AF`"1*ӥ@!TH'`W &W IiASR$CEqqVV)bqyQH,44v;}~n#"8 &/aDtۊt;Oa*HX"ЌhFјKy A I T x!D(Vg*V" Fϑ6#hFC.J;}~͵d" 6nu MB7~㣃]c(+fcٿADa@gApngc8 "JB챝 X+tDhfcQRL1E(C74!y ez!, QotoZ p8>X?pMcsQlG "ʑͮejLMޣm)ĬDMHn&ި0az8"!ʿ "YP#8<7QEݎ_  v4ށ0LbZ.o/hAʉM488f1i!ZD"zWbn'MoG5ꙛNkv;FQ;'*wWu. R AܚM^uoj5㎛Zza~B'@`pB夡DK=)~ 4 LV&-&(Y $,-Nuoj$S$ҟǚ?V,l*F@p L#`'E@`D,P; HE1GCIXNlܲ6D)P9Z/FA07|Cŋf$pO!D~WbC\A#VRiC@Y!+uHDzHpd?1T0ս&j ¡=9X*I;U񆌃D@A!(̅df kGy  Y9k1NDN| Ppɸ c$(1dMI@&]dJ%(YZ \?&bd_Mb+j:\}21Zw^"6ps@"B fBNDP:Df|'iڶ '<Ƴ Zη3΂%)LDgmU {\T͋Dt 6v7E{o!!&Pݍ,K\Ap׽9" ߁ @s^$>kI As^ɱ.;g5}I|?h$)K5QNrY[ـc p] F j5H+2 nDx_C"Upma4($HusY!=WX/D.XPeY>/=# 0|,7ƀ~1n.Npdj{9J!9U*]b*Z5"Cu 4f!MfOg5`{n{Uk \U w->hk5U J/KشWG˺.(5jzŅ]vRu6 \T ke4rfӂA_=APr(W]#0\=J˺jj\B'7V1Z~8 5Peqh˺kH(V@T[APw?k[ j{qe60*5ET >w'h8m.`j51 ANȧVإ i SlYwMD"`Pja}YwOn ke?$U=V5hYwOM4j˩ !cK.#*XR>/fODX,lA犦BN(]RqU"fU$$ c+A28-SU&7 KXFXAZQbsը%(vYC!WA8Qet ZbpEHl d.AuԪK180 A` ܩW>*joW n79# zFi{QOע {9,v)jPf30'\TXN/ (pԀU J,HՇ=]^K./g$X Vo+7`f3yX Vo+7`f3yX Vo+7`f3yX Vo+7`f3yX Vo+7`f3yX Vo+7`f3yX *!1 AQ0aq@P?) ϗ}}}}}}}}}}}}}}}}k߼SgOuxg>|?wz<ϼ Os'Cg!N}~#+'l'=9.<Ui9'q9;*B=UnWz_ 1*r&Iߗ BikӉ9YA/<G eA'v'hz(iP6n"ȼ-eU;".5XYY+~Mcȴ=xiIک~O7s %R=h9H/)z$2>c^N*fgV.`j;."W՚44QK(,\<ګ3s".GAj7TWƢr/[kCI'v4FQ,n/xTv͖MUK_1 vܽ]T#c FRhe ^Vj܏FKڌ 2F&ז/.FfJyR Gj(Iנ=ImkבÉfF1c&|(Q(U@8 pTTJ*%SGS3Nˢf=Oj7eZ`Gx/ 286F0뇡I'#.) |jjF-K%g %^;ZjT L-67p4>xuNcy>Oz .L~ N%ХsHxA:QR v,`"[Ղk <9yt乕o~ 4G٣ R UapτZ#g>| 5zFX7E 썓u :²[`azG7Q! %+A3lQ&/_6X8@M=o[,Fn`Gp<ʩZOE!4F*RtX .bv o4-Ll- ruijt:c=;bTi<رsz NEŚ&c"2(F@Zg"*r´"Foj:h>v:a#z^dO$;nY=6|2US ¶iӃ)BkpػEPvCLB[mWJDȝ֒!o'{XQ.WvtD4BMJ@ٺ2s~J4s_ی뇜QvzQu ;iE)j"w:rs(B5)Td/'k*jYED~tŽe.Y$E{L24iS+E_UHے(up2 .WEL p dNeݓ {euߎf\,Fmi[/u?'<ӦTRuв5)읒AlDZyBbF7vʗNW6h;b 6Ү]M:]Bڭ7NLo+k4(|lZ;z,("S{0+PDU;D^m,CI+|8,)6dBCA.FHngPŝ]h"ǬorOu11V&7Lǒ/mj!¼fMN6-lRiBq& 䅂٦Z[+HXUY?$ "|c@L6?Aau"5"mͧS;'t#xMwH\y1v2l"YT)Xp-J$[UetA 4q,gRUa-Ld BlKSSɔYnU՚FC54.ŽTl9h.]15ra ;VR)djM]Ds, 2ED WECh{05FmƠjj2,0={ f<6-om< 4Pʗ #)zpP+;Ev6E$_'TibcRa *g9UeUXV|)H,1eHQ !T0f]큋Rp-vU 9Rneco!ѦЍtP0J A+\ ч7kӕJ *fcѼT$hn&-lӸLUCW MTL^ MhAٹ\Q‰D%(J%(G !!ׂB4p*b\Nt!n`@[5 B-Q ˓m)&GRo"pe@WRV@ ]b5g:I;H y˙yowÎc0<=brST(;w*~;EH( jnuw3l3k7 YAA3@%wT4KjCC5O ~C᜝c(`lӳ˼ۅH 33tDŰX(4 WG7`G#_L~ dߕa&'zע4<]y#7~wd`ǭ1nhC/-{ %hY}2;<] G EӸ|RuӍO1;}n $, %sY߹yFڧaP"G2dddrxVV1[͉P| ɜqWYA)O 0Es &=x~? NHdu#5;u/+Jez.rqXif:ݽ{ |<P񢟸NM 4<MJbް *g?#)F$i>?;5F6y 蔎1}Hu筶U|yv?)L6lH %dt#,ޞ2x~b ű(ĥ?j6pr6|gjQkF}N.|guz3_loK rtOM ؏U)}c!.?X'RЊ ?sgiAtO,`j_ G@ɁQc*%/VcƧU!*e0"(0Q);\QSjYx}1m@Ksd=JM^0A SRϏTjj{(TR Wf]d:4΋u߆^5-J;a~aK-J70=BV"#3i;H>K{2L:aߏT$LZ- lj e~2@a[`V@?T @ ؚM ֌p^[_:3g{i T~?UGQT~?UGQT~?UGQT~?UGQT~?UGQT~?UGQTpfn״=!1AaQRq "02@brBCS` ?k|"& ܂kr & ܂kr & ܂kr & ܂kr & ܂kr & ܂kr *ƭ=[V9m[#pl!AV4:EM!3u r$ M"Fd8F2uXc\y+]g: Ż9m[#h,׌\g$6,}*9N.8u4T`]S~h+u,NwIt?|6JbE56WŨ6QJ*ƳKiYV"t}|5sBs=0tV::"H8.6pl!ݙwrڶGYQ ~ {jQ0_3cĺʊ ƠzG8L i k )Z\+B\n4ErڶG`e\Il9wĘE&7~ׂ~<`PޚL54怦c D8$^zIPOɪ(4ɞ ;9m[#h(PkՆP0l!fލbӊ<&Y&SN8 D+L"fz~GWr5Ru{Gtt~Iu-dyh_tEVDfx">芭.D"3D[R"=Q[پ캴lB "[0l`-Sr{N2s^`"heV8' M-t*$9L"dE"(I='WEO8]IY(E(M۽Q>)qӝR=OA[VՌ $6sl3_^g\g*tUfНWQ4{K`Öղp?긫&^0We7Gum&鱕񻭇-CaW{3z`xo>l9mv{>mo!#B0F*n{r%ZܫҼNGÔձr?FW7dE'ոU\4\ÔnՁvgi=Ͽp$rߺ0dkvmyu7@Ӄ[S}uLj{w_Ӈ)*4?,!@Q1a Aq2R`r ?J J*T*T*T*T^ RJ>@皒JϾpJ6Jx/˶? R|+SdWu%8 rHrL,E:([*Dە*c5RMRM+Dۜ="-Fi ######{0'mermaid-js-mermaid-9bb0ed2/docs/landing/er.png000066400000000000000000000321531433273745700213520ustar00rootroot00000000000000PNG  IHDR(&j42IDATxy`?w \ $A TDQ"PRVZ~URjE1ȱ@!7${9M~$ dwٙwg3>"!"R> 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! y.lfJ񈂈xDN.!>]]9QD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! y.\̴Q3u鷣2eGJŠЖfk%RRzhs@rwlUƀ9875VI%rшm'|pF̻fo4mD}y{ s+/?PaPhH>a;ao<ÖoZ% ?Ace׃\8hq@8}@?7DԛuVLI<]/'NG_{ ޸`TK'\cPu ԥ] ;5@'tj(4$(T, `gn/2%2̸Mj<А04:Vpg!x;3eO\ӛ P=8k ҩOa0. ݲׁh]u "^{R*/L5ߢp,su_3|X70vEnx829܌t5xD)OI&ߧA*~4fx%\%&Y rG<0(A$[+l1.}Gen`JJÜ}@p|[+r2ӘQe˄I1Y"w0*a+eWt>='s_v*y(BIL=J< #1y?̑]Y?xVF_v`%Q{ 8XA )yk~ n3EDm?;K$g`P(`!BaKPHn C:}"{ E: L2Zclڃ@?ܻWo0]`P(@άs 64_o EnꜪ(Fah0ˮZ0(;eְ5WYڼX9UQ͙a4$qZ&nK񷾉N/UO=蓒kܝ9ʠS/wX!fL^LcU:Q. uo7q!^*BS,3B  KRBXFC5 %,1~X ٥:h niܿykeu ).G`6RSdW,5F@&1G ei ʍFt:WvX 臔 顚0}a4=f.X.whEDiZX;Kle<,uiK,3f0r1(\e10we\ê٨\D;!x|Ӧ^.u1Fhŝƣ¯&l. ̗9vu;'+R .|5aC/d*wS3qXutUx[v ]k L0tI$(*3| zمTlIM >KQ?geCP|o0Oڔ!q"+"F =(WrS&F!NHs gؗa:F#1+AxYo0Ȯ*gPEY Nݬ.Šp3|erU5(1B Řs0(1c dq7(dg_||:TA@FHuP3A( ƬC蝘&p33.!:ݮ6)1*蟘>(̌ o#2'RAP?ed—Oq(E3Up*8 pxbPtSCf`T:}UIPؕ#eH薪"`|م8z؟$&csg3!#W)8Y$.W$= A 0솒̟7)ѝ{ t2# }CATff31?.U9LH]ԣICV`RHم5Uؓ]1(e&va Ԟ ZfJW7s<3kٕ-Q\0 >aBCGPY$xUW&}G1']8(sVf!''i멮 :r $'RuPؑ~&BR1(bG9D%)j &M]aPt)}G%F']?(?_d>0($}G5bTx= ->'ʮÝ0(N7FPskrPuF'Eʮ) wg0#)i:*_ޏ1DFرcbQ\ΞJJVN=NϸIp eeF$w/h+(T!ȇ.)B\JkA\H0AOA!sFF BvI(DPbjwE.l8D6!Š3c`T>s v۶Ǩ$}~hwh3(4h)S#0(ڨ޶ 2Vvrh6([cД)}dסP ;m-Ǩ) IA#L[ve4;h(:/٫BZ 6{ͩ7b#F5WO``M7`dHHyOE_u(SMPt[i~*⎺hҒʣ%ei @ r t埌\+ #M+?<,4RåAw!X#Rݹßh;ɴPɜf"|.kj^/' kb̈́3%MgfʮGHPqIEEiPy}!K5lϹs  h:]䢎4^juXR|48x`۹.Y#z:uCmuz-U?H[ȼS?H V8f؂!8񴡿n]ٽ2 s NkEuA?r k7zuy/n/`Hkט_KUڒg"{/X,bd4O϶\k`6}JRҥKp*W~.vw4{yVW^3GSE9X!nIA3_x>Nlmmx_c<|jEZl|(ݐe99&c;#^v wJ?|T]VjuYy!{M7^tp9zg? 0bV=)Aið,cw& ;k@PS^`P3_i-ӴYgyr1 `} 0zGfD *cC[@ߙGKik)vUd9X =q6[Sy/.pxs4Z+'IqK h\ 83b`ূZ}rB=AѸӬFF ʦ [z[ k@Tn,{ȩN3l^kfE`z[]n,ZN8S0r0(mz άHgzoÑ~od9 eߜ{oœ{`yM?|:jMv+Y[_~tmKu`v=HwLI;f<l .Ƙ/"k.X'kh9=a ^ n.S^j#ct*`U w<6p`u{ XX.k?X%{N5AD\B( Lp~:eh3D!K/E.74q cw2{M%yȭfxXSqu=_%qVg6yxfa$*?08^Jj BxmeF{M{MNjw{ȾQ-[Wi,4]zb<?r~_8XaY2ŲL?b؝.,Zw#{x̳X,B`^J󝙭{xgrIݲdx~ =pOaO u:5p ߡh/<'O!3WAmh:kbuk?~/^j9j׭iPw1ؚ -_^TMoO4Xp17PM' -- ǿdJՍN[iرk* KK#":|(m}ݐ衶g̩+(:v,|CY ݿЌLP}.,Ak٠P+/,Ch!:ڳr**Bw\h*0jcvUŹ  ]H]х#(SqP 'ck T\TQ18TOAWMP`.#k}LyWBj"uB5;SHϐ$Us7?ޔ^y\NaND̈]}v!_rF]ƚ3ftAD]36-͘7c/0(v#a:uC3Ozs0z\=i'?CWTvDѐVg &ŸiiY{gܠΝO]Ag DsVLqMތXم8N=J26c|]<覜$P]*:ؼ5cViiy7]'S߫\L1 "^7ǤZutߧZf'ȮCNsd4u8:$57g =:[U"(Vp#`qTjћʮÁTex8AʒCd0S/p&`qTꮣ'ˮQ=(LFN%Df~tdKR7p)`qTDu8[EWsBZ^.{odWqLոGλ;g'MJe 3^c"`9~ser2g10.WjvO>>3OvWŽ(V9qVC;@OC,Ėz~F~z۽9vS[,0'}V.⪸SP,nѲp?1z @I[ Mv D%?%Gd[{hHΟͲ ner, 7ta?` P2x}NR7<.+>Aqg/vTpzP8t6ʮ1~tĥ~d[z<bn{n]{=a ^',U/SUWM?|)+.Ar%5JD:%n=OG tʀW jr+AW㮻\vWMƼZ 7|*8< _(?(*.­qLe>+Rǜ zh]DW)=(LOa r&IwBAQ,~)"X?u1(\Ų rœ"Et"OPvDγ(/ŐJc/;dALwNǟǤ >q 쇔ˣGs03AB!.-JH(_~H t\vZϐml~dȮKflKS`?dEaORI>g{+tҏ> !#(ZS{\xI?4)!BCU~ iٕi!#( CP)qChX'<@WeJ쇌oG}Q%qCh,~=JD##(|`h}%o IV ECFP BiGKj`?Eנ7PB:5+&ECFPDb_Ym؋(B:!"!#(Bêv^W@>Z~("!G{I$JI?fY}J쇔1k~W/}/k0a캴J3Ed~2o}?>;/*R`?$p]XPO_v|Q_)uCh,u\zboCM?&$ SZ?1\ݝ$o>v^-;f_d}Jx ?L*2O|B٥7 Ax[vddJ=]Z5)khE\O5)Mȕ]C+Ed@<Gv EqGgGYZ|]yAA K R t!"?(JOPC]IQyDѪ# Nv V"h޲7YYzTqm 82!7(j>,Gۀj>]5 iD2!ԣvey_^575]YPPjOOCjP|\sC'>.9sO!W7 O!x;lUNVx/NjPO z)PH?$7G{bPciGdoj0nC9뮺C^Pe{,B  }5PC =D!EHCZ9whTs?J+I}5D}j%4~ Ϫt?jpՒ75yxC~A ~H B5(wcKkP`_27!Ok?G!#(LYk} R5("$sKhm?Z5(dCFPorrDkKfۏV,6c= Aq-oZ{%4ˮ69lrD!ƍ%[Eka®}lBn?\sɭjZ(s.[چ,~b?dͩ~<(a͐=6蕌m'!}?l(AqD(kChU~a?\Ͼq3pyPD\6Vʢ~:(J =:У]PA~OQOzCYW^qQ҆(CYEװ}(%4PAq=/{vjۏWR!D]~h!PõAQcs C" 쇲( bx_~o?K~(ڠ(Ch I~(D I쇲( $f I쇲( jf9, h/~(ڠʆʒeQp?<.3 )9R8,ꇴe.aeP?xDADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$ۅgv`ѣ'dA@O3^}Ԙm;K8K.եA&xuTu]WeB⽯'.>%Tw.kuG]&M3ׯ]@_Z/ʮ\yDO>roLW]>ڀ͹cdWC0#5t+(rvGuGYu7Zռܺs36HAj}n ;}ӁF׵•Al~y<lJNN.N><8$`JNޚv/* „}S!Yp"99Ǿo.ḥ@o =`a[M"*7 ;A m̮3NS7ruSLk׮K.ǫtaU/v@_sXka~i|rpQ{۸ O '-]:t<=q۷oχfO6VvUiq PCF4x/_3_wVX^X({ETpK%fݿ26.āI7Nl8+(ݷNx!=G= ޵ʇ9.(lQgnE-@Ҷ11c-0VzȰ=[^?e>b>8ɼlh8K̜]@MO5N ù=G"meߔ4W=A2|PoçC8_vvG;d33ߧXvviA2Td}Y \cF2&<6 t?N:_2MKV W' IM8/T)oƔ;[v..HK0_h~Y mm##G쉫:uP+ ,`?ئ3N# 9B;zvAa߈k5wze|\cu_s ޝ\ |0e>ֻMxUW4s16㟉V#}?<;Ҡ(@c p,EF͂@ůG1iDu'S .,^Mwgx 7 ^pqg\Q -H0oiNDYm;.,E=5w@ ƺ{ukN~ 7 kTwon=t Z٥#K7 F! ŝh?4W}0åX[]iZw}_ fSjfm#D4~YـfKD\}w=؏f h}/߿46oRfLwtYG f虋1Αa=zfv8[7,S/ZG~WwrRtfiXT `(4Lˣl<•G+ʥhH`lӆ rasԮɺ_v߾QB?!Cla\kQd# Hv!.\)gKv.Z!r#< "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bP@ͷ|~Wݽ+"njc|>ٳ"} ԁG"y}ƍ39>I(D$6|bDvPc6nv|>EtԐD2vBRBD2ϾlT>l_ \(VQHD tH~۞{b! HDoXzڌI6Dvs#vDLA "] pvDKA "]qC{HR)DEt@fSHwz |fw/$"ҭ]F@cmvJ Zg|gwJ hcSD~+0 e|ʶW. yCF(%&D$gxivq!O!?{XCD/ԯWieݝk(D$7aLͿ7=w YtILlw$m`HO5!ovwPbw1s;>Ž;uTXА)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"".mwD$V `%v_FA f^H TWHHZil$//?/RQ !"iw yyPSUuT+""dy'$''QdA3yJ I#Ub>H2@$}T2ؒPH;hw9"飁|ZRE A"飑D@A 6,AA "r S@D"". q9)DD\N7 Կڶٽ~"aT@D"". q9!ζQ;w]?; Ҡ=,i:~Z-[Zu{FXjӿ I&KA ٷf- )-=}r)9Mg'#t!Ԙ}ijާ> 59W^MH*p[Q>]Zj}-n?%xvl^NH ,s̝בTLFn#ͮ])DsZkօ>g" Cߘc׿{44$bJۺOZQޘ^^{ 9 w+]^[tᏧɉ"1Y95zgC/;wanXޯ..%}l Wk̛?<VK? ޙ ;a^GͼE.2#OuD 1apKsuEƼ{G z:l`W)fZB^3W#yj S`Saulc>-ƯSgƼyMo ȇjᩝnN2@Ĕ~yeO4cV>j6UCus/A0%H>2I 3 F>3 XM5𷠹&Gc_Cn.)DLy;=@1`;m%?^w>gc"ѽ3 =p)f`8h7(HW,~[\ /wqh=0=AG:e[2v>}ƛ0pĸ~bV"ѽuu2+PF܆-7"A x9=kSuc隂@c뗛X6]32sͿlO")= ZKҊ@$5NX#aA,_}? /nF( Ko[Wj7%vzV"]}u`~悲lW`Sƻq[?i{]|TΣ@Q o'!98کKȟk.~`}y&GkON9qFaRCI%o_Lҋ@!zrܩϾrW`j\nLէxVzC0#(0rA 6zw9^PvjK d%aNHm ưCla~5t95Զd7*7ox!oU+wTAHڹgj)ca cكmc^MA d@D"". q9!pm[/DEGA Ћ•0C)DbV($)DbL MP #0H,B" AH9 1;/b@2 vD37xTH%s(LY (hZJTHR侃ϷBAh{YfII~ ҆z%s,dۨP>;UJN[$p0}I.Mŕ&⤿IJrF9eYK*$* )0z5-51gKIA4۽ܠ(a^|%5GQDRqt@v;P0jKaͫ"NRTh/# 9j PA TD@%%4ՇQ~ܯuBB`m}Ȗh?SIōC7dAҏJ3g%c4j7 8:b`JY<ɫ =K6~~37٪ {'hٴ oT'VT~AmMdjLnH"Vv62 ٻ@Y7m yrL֧o'倸]!{ n ^\Az? QvώR=O9Eˇwt\xGHnO+xh%Sxuϓ_8eA5w6cfqHA` Hu @- Loԓ3X^rOTP}ۣ EmQN$8fY^m]85.z9kwNtبӂ 1` h(_g|/9KF1gy7)34P:uuN$P=x$~D;{pwy{xq@MK~)DpZ8"L8^>]Ѿ|poR<'hX߱yy1IcyudoL95-}7}v88+f ֿA`pț0XQtbu5V? >%}<-F&8^$R{)K},L9 n 00b` t5LK]́^!s["~NA!_ ֿ'om&Ӹ#t13%A=_ͷZ:KX jS[^D SrTI4t??boL-U`? 4$݄fcCmKfS{km&S  1Q<ߘ^W5-^]oL ޛƜ\`ѩ;#7F. 6fBG`;j&P/QF~ DaT?O )' 0o%Ӌ5٢)n-#I"!TD$x8>`<^+jG?xw~ٷ,(`k̺TQRDe/A۽'E듣6 0v|x xZP贈E؂%d;8׀`9wҥ{ʹRLpH E6Ye?ˀ Ɇ;d ۓ/B=XSp;K5xdzka. UGOYYY̙ ,Ǟ pYQﭞ ڧX_7)IMoY}AA?ּתcuڝB'9]fZ׏hkUsbo8-^&R@9 v1s;P̝^>Qe p8 {Ĉv/DnfhɦLCC]zPY!i BtlLݗri_8@9 3AZiG缋 _o;<]@3t- 7sSp.bo{9L.k" vi_8r@ .aV{zn4ƂӶ$H"qh[Mj3-$PAn92bhE(P HH >_`ʼn[YeV7t`d@sUi:h+q WlnPSWyT*" ,?}!6>-_ p_-@=JY鸪N}.{=CLǸ$PA`=H4qg者m8/'b|`2N|xOrB7U-pwU,}le@Ԗ**,kj ƗJ9i(({O9X>z\YP'`ʈެe;2yek_}Y4Ԥ*H9 Ɨؽ' ι}~S/ߞf¸غxrٴ&t,,:sƀ\- ;v=h^033 @*KF[Ԑo)xU0:xj5QS(#. d][zq[zp=~?rCȹMX88fSH9] t=';ȾUo)’@A(2\e \6/*\q[Y䴷hԸ,Dpúa{K-*3X3ow8zuqb_c+oЫ1&#Ckrڗ;|y<|3ܲ[^\eg@H؂U sv]nOi]peӬDjJ"i`pyy7%cf8VO0= $.یuK`M'V>E@$N[àҿ]| x>Δ%_?Xm0"+ƺHCC^Nzˬ%Zcnlqy\=cWq͉jhSXА$)DH]Hs&7_׶`^Sʹv1|z܍p{7n;gn:8Z/cP^cE3ݿGAD$Are9˒o^A1aK}-͞sC}{F[ì'~|=s&+=T"\kt˖zW S7^Ɓ_שx`aXEJ+~xGs]D2? ۿq? ,MY~#~ ,MTocvqݽ]""iLEz9܍_ L6n[]_оi7W\uUd]W77 gE,ED2T,C$޵OҀ9eqV,""Io""]@d-6$"q9)DD\NA "r QC&VGp`ݲ^Gli_|Anxx(rW\9?m6ץuyn:FHƙc1pY#Cf6nq?Ƕ[gs:k=n=_ios_(?3ihHUk z.9@ӹݗXyO^ .9@ڽ:N 44d};~jwDk ̍1 ¿.WonX^PHɫ| g̚bwŠS?7q) :}]~uy=#vC($=)=vw(}}p^{}{ЯK`+ I[{.h~8΅ZV<ȫU![ǟo+.(5&v/^:@u n\ uPhwݝT{M=ǽ>?y&zqq{Y{Mc]6ؽΠ 4v`lZv˷1*Yxi'F̏H-FA ptR>t1f}hSi0hϖi?/៼Lɻ z}q}#4kR.l[uY \lwBA il `3ZJ xm@cK'6sΧN>5IXEE?_n{{*%΃;a9&W;?tϔq?x?u v* 4[$ Brpw1`L+*܎~馝N+3ow8zuL3 pƜ- L:델.L`~t2Z̴!}HDץ'ӟ€@w;a\ 5L~jO_tvDJ}GƳ*13($}k`텋5wt4/\:HK#>{O^PHZ8}Xe#s&܎ۻaЕvFj}]rjw!-|=`GG|K 0$I^Z2yrl]6He<<1m s:D oiQvuQeX^=EQ U&hw7lc Tn;&5,MbjcSZ { `⠯q`?W( $ͯ)kK ׺T1xRhdP?Q+#`ڃ˹5]W//v4]uڎmO{)G -* $nsѵ%;v;~f=@̈́%kW4d?P ܽϖ73`5Ty|z!ЎGtA9"k>@$L 0JzVly!A"eZQ # xY^o=)OG=3^`I"~C}^/@蒱'?=x(r>u!C=,&6@Qcxo_QA; DepʠN?&l>'e8̱A; D1qBA ҥ{ۣ(k4Xy"9*e'ARt+4 *PHQDQJU't"4 hJ[X "ѕ5nc, 3B*PHFQ! @ĬcI £TJS"< m1Jr6}")- < 5D$LA R IZSĮ"*PHRĥ "q꼳@HJ) `{s7 zE9h\cVK{R>o>޲ ¬qy^yH"JKpQdp|>Ȩ i.CO ETX)@ ɴDh[IcQ#7)5 9jo]mvF>JyPѱ{حlcwOMG"*[Gw*x2&k~3\?0kcF.`5ElnX6yvW*D,t7JԮD#X쟺uQU?4<4> ;ZgҠnv:``]1хpy=/l>-l& .=\!>Z6|zwo\ tzaIy+H:20~M և>ql Ԇ>y3Wܨvcu8C S'?! 02ᭀ;\ f৫Y!2`GM/7ut=LLt;ygxd˾wuS+̞# g:/o~!l1RH\3XY Tg\p^ok:l[`Ik`bFt] Iβ 99i⫭r pɓc!W׋h.(K^\y[? ϸj߃/.h^\|{7ojY)B!Wy9w=ԟH>`oI$'*h~?&\̸w0{rʃ*}{UTAי3kr_oo߲dm54$"1(/ȝ w {Efxy.+@g3^׻;wRԷN'!-- l )_zw 52YjҒuAˊ䦚͞]ݱom [?_;dhHfl[`:֯"ohfY(l$;^ț[+[2o"=$gأyD :{ hكG~"Sp;`}FuihHD"". q9)DD\NA "r:|TDbԶT@D"". q9)DD\NA "r S@D"". I|V5v"")5$hb%(DDR*&FA "R㩱$Ē"")U0jKa5=RVI[xk HP4ѡ꥾nU)"jGU6.M~^ |>HVVPHJ9""v()1W (.""l`'qY,"r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S\Wxe{ "]RE "rYmv@DDl@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "rؐIIENDB`mermaid-js-mermaid-9bb0ed2/docs/landing/gantt.png000066400000000000000000001243471433273745700220700ustar00rootroot00000000000000PNG  IHDR@5 .IDATx{\Uu%'tio5unc$FeObӌbYdIN%v ,ЦN*&zPGL3Q:DT`| vHC np;$@! vHC np;$@! vHC nLNzU1#'E16Yu` -&Vv#T(t =Enl6B,u?fl6")1%CLYq6:^\Aeo/Fwʈfܫsb fQlBs*3:Rx,~~Q|TVY y^m6lVl1JʸgL$d7Z-)=WiYz:ANz[WhMu:PST*7ަ[WlePY,R5AI5:+PJd?Elcs0͍KPYR~3ZM_fbt\Ee,aZU,͟w{S )I m eM.nKZiWBo3@Т{6[/M;)JQ\CäaWVVrTmWRWޡ1J/2:Kr\|-_ٕ˞qHbIޑgNqmS`F5!I6ق'+@G ժ/UZZZ>|_)|ɩ]WG*&耻ݴ(I)XMJsM+`v'kfTR{BMi%Dur2{6)3H6%e\RU\iߞn059Ցk-)%*D3t7Xዶ(@5m[%o' EGU"__ߺmMTݮm ^p+56^eFɞWI1$UVosb{_BeW+61[eHPF{"-FGs*+Sn8moOWVٕuk'"Jq)v$mLWJ+MRth]/X!Vkm;ospAMm፻_TzNсu5bt<2G(>#E+s IY5:.Je+ev%vg85nkoaQV:Nېٗz h%r8m^;)u^FvUIRQ_,Rmʔ )c.1V!5 hYV.^&{Fbcl R^?fMX%qK8R٫z2+Ω@#'E.ZXEW\JL6ߩ~ѫWr.5 %.jvqJjCE>JYf7֕ lX+IW}^bK%[~.yu-j?,ͦ$e/5.WI5/FImiqiKYF6-M]{ke(Ƅi-9.:X)x=ڴ=[VMZ=N,6ŵ@2rT"e,QqZIqQI],Wޡ%/Tdz玛d*岂%zqAlL6u—kQzl~Z۳K'u0{6-ָ~E&CeeYqi\J3[[ggk{tG, qvdwf޳I۳][yN\<\QHb3 yJmUڕqsQYGV:<*]3,+(+EΫ PK+"EqևE,][[Ћ/tHN{lUN\'|- $MjUY"´j$Exq&Erd+j/SV|PY*U}P'c|e)*r~Jj1X+eOTߦa=+)R#diІ]k9ڸ%@:sYs(K ehqz2)ķ.?+NX|C\|F", Te-]2mMom8·YsDQ n[@p`]5ZopuZo]́; ߯/m~\溚p VeKK!vR)|]M;-=P1.f[^&_z kjIؚEɟ4f@EKd1I5&Kj>miv;z̚qH+&o&Q_hs0# psiskj536f|(6vcͧ@ͺ@mWQm5+B,zlZEM*l j*YTQs.?fۊ1&˖r%LYNi,38E\E(ڕ!of[RTcO;H*S8E47D)NE(#sQtMZ~-c)#gwך;/.Vi22)%&JH,P@kW^feefn2ת,ehxb36QYYY,1V2sk,_Y#┑a\26Mꆙc@mfy"%6` %5?_O6ibOɺ%vFԤvM*InѧItv*6C,yi HPee.+TVq殉RU]KkRTN\ .o"6nڋ:h$/ƹ~ZڋmK֬ jܓK\aAvZ~"T1TaWVJ"-7):)1vb[ZAX֋-.A37+McZۦUZcmK?N5I2ИPкņ\.,+] OH9C-F wbak QDKՕ@BGک{Mlo??tL-ٞR`t%Ev ѸY(2;m:ԩs@r4f%5{)8 &/]E_)y~[߯_¢Wks) \%eKkng/ uL6E9=3/f&*+qALd D4n6/hL"hbMrM-jh a+)eܩMܡ@?l͓V.blWUoI#G)d5׽X7[eSzQށv=G,Qc a-54-{kg,S3)}Y\O=BQ̲8/VtI.]YNK,׫rMb5$a/6THwYɹV(,`D9-?3嫴O3~F- 0ٛf*$"Iv櫜4,t%g"%X/1k2(!"~dggx+{v]2GV,mymvNH_D \WW!suYI!vɳ 5LKWnQ-F*@TVb6$?*9'K 1]~EG2[і\jX۴n0y5-fuʘͰFlVhN^zZ2[6s>I(RVʞ xqt'(=}QfsN9? !QN`e+!%`HٕtFBBŲ݉9Xd/)M ,rې0hR8j:frJ9Wљ,fޞo;KU퓌(r)br- ͼkRwAݎ":}I<'hXekxQ[K.SFҦȺezmQ$e]t%8N_|ux(rUDe]yw[ӌMJH ]"< N4)~~%6%]xݘrR 8Bڣ{KQNkR3fo;*/Ҟt/~UvmްU>oe3G\ln%4+1ne u uռd8/.D*nQcbgb%^.S6fqcgr~\KZ/KKUzsiNI+mWR,U܄:?D$ojJжpWk-N_L(v8te$@pehx[ziUMqknC9Ie V.XX⵮m,Ge,Vpc7jMT-S˦Ĺ 7ɶ8~G#lZҰ\IXSbUJKن"$f*ũK\[mIRGcꦘ.5߮ŋSTԤ2G-CR\&W1G8'I&rsew!{Nғbe֕{hFȷY/$&;uG?"'*=+WEu;9 }ޓbIW.V|[{@p`]5箾O7uS5fX芚Ϲ4F5a55jLN熆:7f݁R Kqp.yFc3k/55555_&5޿Ll`5=6&NWI˺W1TWkÉuM+ [ 35;6v݁to`]˚5sk!u5.DŁu5MMu-vVQ[0j>|MKShͶ/]֬S{i_~/k Mji{bXpl vSE37cqY!Idzu۲4cVKT9KRrҴ"N:55R=oB2r~N{f;M`-ؖFE$f(?&qB".R֋π4yY</31ܹ:XbIyv9.vsT#(.B!qzHDrxJHϽ7Pr~"-7D))7_+BejS4wٳ{U! `QdRHE3:אxԖE34` ]W~ib Q\min4,T3mTs*ʊ`_/NWQi߶B B:%"Zxn:(kLJl!j-JW#K Qjr3 0Т/Þ؋ Vl]n[c7#T VG3M+62*ئ 򒲔{Y Zj>='GVm _TtSm[rP.Xmi\]);>z?e?!I9q5n}u`caG(;-fz _e6#In7V$FDiS}r"^6n@M-6E,RMբ55:HRYfMjMJ!N@{atJP ׿8,עΝ;dt(Ao]wuFe|o%ЮΞ=;w߿~WF4۳g BM$A\ &nI *++ A*,,tя~dtHtlٳg]oC2vӱt hWFe4]C np;=Щ¾8aOӠvo;{Gi9g*#}=]o$4fPzwoJy~?zw-`:ߠi溯~V;{Gm2:J{넾=Tw>tF>[gf8cЊGNِ>"%}{Py_T& f2,ytLvᔎfe铼:WGiͦ/ҔuL_UJ}ihDMxnk}FW['w{GOgu` _޺9ht섎~qN3W@{ȱ,YߋAÇk94f|.؛Z\-hSD%t /pHKcԫI j~ɏ}C4TR +ٻsnhZ2RW5{5m,oIl@7y5@<}d>]q/|ړw]*B: ^>V -Pg['rPԑ'MTߥn[#;">8ZwX%UtLÖifgykW;$mm>/U<7d&͋Q̤"6ii~h6{X4iBLoTNPқPi}ڶccdtn[_ãjS .جgjy^}*Xk[^?[aN2J2UDWSU9[†L9.dB5k5x)0bGhKOlVx&Ss:zDNd}K;дѠjx|{6Ks_Ъ+I@ G>ʓ pXeΜf3J>b ѫTDccCԳfQ^7^dy)Fzu^[ jZ#Yo~2OkGӴ>)i]>}̞zpM&qg/ OC5Z+Rc 5gZcb7OԮafɏUfeVK-tJ~3|rMT޻:Tzy1Mb Иbo/$ICFJR:w'vRHM*վ?Tu}~IB9Kw}q~3?0OSsZJ(95Y Q-i$p?@&I:UK4\c<$U)@Nz[;_S6Y~Q{CSA8ܧ %*-I- gL垺to97h$ĩ.+R։V8[K^w!D3#~(}nnE%ޕ 9j=gvzbS@%<4dxDќ-֤hVw@ՒtI{ Jm`֠`I!G_OZi Rz~<[8TpX5q $tQXSčڗ~HsGu􄷆ֱ/1fyToA[;zT'$pD Z'ܩ _о]::^|f=N[(z_Jʿ+zڏc WiSWW>`s+ +.Tc['}-ѫscR:DW:= M[P}zS:qP_ `n(_[٧t/tZk´G9VTy?4__ޟ?ձs>8͌d?K"ɿ~C@biIʕGɧkt6FK:S S\cwHn6c4OkXeW5;\ϬV;4/V/g佊1a3Mz4&@yEЯԠ`IR'mZ)XJǨKzH:Ur9lTC-(?O$iwty?(U~$Gǔ[rfiQ\m߫X0B?HKu2޽CR'Ԇz "b4ZRpںU$ 1]t%$)`Sz/=O*$M4Q|S}e5g,0Iʑ>Wi401=8~ h~ZO"eC*>A=tYkt=8:Yoҥ6K\yAr'}Z?>PO 22tZ?c1ۿ:n[$@$&ƽIjkқdt ѼyҊPOnM>!!4{^b&y97zI=eȯ7f~3'X>oWتoSm6^UjkfvK%%%›'F)>RRқ(#Yk5l^ \X33u֞2is>'iIm{Păz!w鯈2і<44G<̋t0Is[룵c_2A2:.eC.ߍ0eee.MqH] 2e0ǎsn:6 3Í1bROgϞվ}W_5[]}WW_}հK#F0:41zK;w6;{Ξ=kth g ,Dn9wUVVFXntУ0U]]=6p` 0K>SaaΞ=///_C ш#X B$ ӧ1 ?W<_q7o X1wc0WjǍ7n,1wc1`܁ vt'NPvvΜ9o*//o}TT!h1wc1ƸظoԀCӑoVڵkjjjMnn룏>uwwo]c=/0XMMvܩ?\oNC JMM%h7z뭷N  *((PZZ˾[nE'OV~//FOΝSFF>;vȑ#u7" @l1BK,ѐ!CH~.__4d-[L?]}F@ tAgϞuپ; MM2eH]ЩS\otHnnp>s!)H]7|}u]ϟ?otHt  np;$@mt7n 2N}Tt=5wz8U/|ǞڤG\ 4Qr8An8bt tgzXV82֣k$@T/< Umt(j$@]CI(- K%? m̨(6+RMڔ_ i{{WaQ {Zd=#]XNy\Uz :҆3F5F$7ZQQ>s]4QVizxL?fu@_$E̒GkCGvk˦@- o8i z(d[_/=f!m 9wچGIÓȱw̌v)"wZ 0^I(U5sCҟ}DsI^^n7遻fMeyTӯVե#@7G`8]:R-{TK||Ϡъz&]=_S%8OM 9K5d*VڦWO8Jt$uFy^R4o_o ʝvTkI|<[РZq@t^{@mtO(Ӽɚ5-@yZ"Ѧ a.,mAQ5!9MQ@e^?|>oX؋],Ltnp;$@! vHC肾lF覚wH]neT曍 NA첝atHn˶b1:$:  4i<<<?3=/TQQatx.\_|6oެ =<<ftxtF9ɤ9s(99a?OSp F@`e{N;@f̘G6mai:fgi=UCe4yE}\O3QCazoIZvU|2Sl͚5JMMծ]TSSct8nW^>}NCSuXU.I >uh}W2RSo^T ֻwoFl9sFT^^nth.G7x 0fz2qe<7M?o.쉽ںfvܥn;b4\}GqG:tzvw}$^3:7n,;y5@#fkMo*I'wqok*ڱFIǿ1: /gl$YՖ{F Q4jx{Hϼ!{Z{G1 _wNZWU(U\34*fyFͶնCIGbUCes̺]ں5KYtX-ڔ=OPM]`Q]Љ]Dv}.\?h;o>#Rv&G7'viׁwļs|i򶶿N-wB{9s-%Үg5nl-NG۫͋Tta]WϒtϢ:QWȖ?K/mz_:?rq0mGÆizf:DJ{W{ק~Ih ozBш?׈Kv[7̖>ӱ TNnOց"XY')7Ⱥ{yByTI#-ĉ֙3gMFԭDEEB0k,7ƿcoԀCZ-l 9ylm5QoqO];6nI:wD.}+f/tJ~HkMhQݾuRtoi~N*m @}z7?n'@T^^.ݮ?Poұ3@nS6w}v%%ՁT|׮u?%t,EfnCɮ E:!IO^F= hΝύ*5tHi#^=D=U 뮓zkUQs׆0w}oVo\7UAgURZkC cv4i*N>뮻NF k)TUUUñ+ҵ <4nK;nҢ{\P-fbF^Ξ=ݧ|@۷4lpELSRg:Q$'t\# j{R7]7~?P댎SNle' .i 论 kϵn<]ZPش0z$o=G5uPpBvϸPl}WGn@N8uP<Φa .y=Iի!¨wE Ұ$l^=PP]z@l?ɏ3k] 4rZwZ6A}`~Ըs(ȈtCyR ^h?Ș'm*)˩#Zc۾#:rKǮ6O׬7EyOe[+Ktp٘\g#%.|s31J%w\?{@{Jt =Kv6.m~fB'd#](*`M ]EiePC+NmZ VEA}V`<0b CX4;)CCKV,g%y~Zy gkdweZ>3@uRCC0?Јi?׈i?7:tEZt:G=>chD!OK%OY @GU m}F$@wRbz)uжZ'Cehfw,:tQufNTQbTۤ we]N[PIqKަ n*~SD}*]3@nc J1+w2=23@c4c]*-Iً땺 ~#5Ӌ_bHM U|譆bJ?NwI~Lg*$_u;U/NmkEVEyLRE.|nVu?u2ٕm_wjC:zK8*.0z8p܀5:Nw>Pښjy Єy_P-w?^G7@oSDߩ[Mۖi}Z *$y4f5iV]C>Wk)#t-@9N=$@$ocY}g*R,NyWjI#"=ĵ_}?CR?M3zHݝPΕi'pֻkw~\L:Mz Q/\:_3ՒINx-)?~@W%)=!6:Wgcd0A Tjy5߻ZWˣLw˪d2U#D|-خ?mJJOTcdLм)Ce/g})yxmG @O '?BL&Xٯ]/$Uؕ_k/ g+d/udDɝ 8=G2轩1.2C_SZ8b'?v>֥&c|"<=~ؼ͸q\/7tfC np;$@!lwF k7+BtM.~!šo#',Fm0j@s!:~vJJJ]z4ƿcjjꮻҨQ nUUUz's3:mPRRkھ}bcczj[ =Dxx=jtO<󌲲t7]5@x'I~nѣF@ psGO?;< ժ}{F"Wv]7n޽{?~\fҘn_vocǒ}{;vRRRt+**2:<4 e4:$Wv.//7:$4 ;htH@@@6 ZG\ӗ>>>F l7F@F n)מv)@`8p$@!jjjTSSct=n,Yo]mS҆MzL]{|pE7T{V߮o]/O>,Qfݽ:D޻X'RS;o,c0`܍q: @30hz(ZJq|}PwowG)*Xx6:.XAax3^UrJyY/k˖(g. v=]GѳPfjөOjAa>9t8f=Z=wmz8U]>*KѦM)kOCF$vnm{hʆt5D{VՆ#&ݷuE4{g^J'{iu84 { _+ûO]y2 S?%]?:_Kf5YªDy))ej?!mYdlóP=/i{k6KaJQ^OL~6ɴ!]ΖϮ}@c sj(S Xw= m\͜`cMY_5qDXM5uQ}6ܷX):{J/-]oQi&̜3'TrXik3f(e5^Rvg5د]G$YdO~Tw-Y:mskǡp.KgvOM$U=Bp3]K*pܹSBemyXw-~I 7Xw9JS mЮºF> %|.-ٰ[ Ҕs5%\7ibݲbmmAv^YYNǕIuu%fnOkc[@M?P%{ HS˅6Ԇĥ 0kjݻJR(4$L^VAuWԞպ{OS9A1_$q=Z(zX RWզ=AZ/ 4cvޥ}VS@Y)K?VG2H]u =kcV߻AnҞu Ȋh#ՅrHRUKzt~}=p6Kb=߾4A, ga=R-ixU,]rJ<}.,{YOZBZ76b=vZ*jvlEZ0~`Ԕ{#zyon p/{uZҐ/%|lToH~Ե)hU^}5^)Q{u?6y_$3HS$Wr:XY|~UO?_,sY1J?)Y+}!Ue}.u|$O.}D3==ʫWõ3AtɌTU)&;'y.3S$Ijh׬P2I*+@~H5wZI}xTT+m?o7P6tPxX{%5Iԇ;DA&Iy:]E*i;Y Żvbɺ4JA ^它TisxJRI%yD IGTxJhMyHڭ-ಂ-WI݄O&$IhKFO;i@c ,[rtiRND% 닍;RׅrW*qZ׶Ҳ\516IkTM5W)?s5^lsJ(Vmsz뉴Һ3e_-u=WwtىQRbI(S]dՒd)!U1kB A $Q֮M˻7遽4N"J٫'jr*+EYmx=QQ] $iᄎm [U*~U?_Fдkj%.J٢Mu>jkG*Iy*d~m~.=ݩڝ' 򰶼X M?srjv> ]<崔T3As(U֖M E+6KUji,[->檶-ڔ٬gi׵i<^]ʤ@{~@Q+sZ+@S!^x:E͊;(פyUK\*UOO^e yB=  W@XPRÅ*>O{)t9dbӨ 2w$nWEZ(D՚ӏj޵{ko>RZ_Yg5_*gfM5kBKovN?F{ޭ}m@\gi5dJU߳FOHv?SZW!=ڋτGzOߑuMA&OU)k]xvKUvvvvU*ܻWG$ 9Eޯ!ڕkQ4HAp$@?L-ң/V_L!O?=CK#nnj޳gt!?Dܹs?a^]ZotnIqqqZfMþ{j޽F 6L_aХ CoN@ >Fet1c`tty9U3y/m@y%U'Wұμ0t-57vZ=ht(t V.Ua^ 2_?INCM PnM˒z0OOON7xCǏnWIIѡYVYVu]2tl ѫK8vѓK4ɿoqW;2M3Fcƌ1:vs]wI^uCUu:(2^ժRaosjS*]u rQoꣅ5e)徽Y[DՒy11SyA>U4FӧӤItlso=[g.pKg՛Nkyo͙3\(wEfRc?V*U}U[25aރzp^:|" h3c*hz$cNkWL2Oh͞hVɡzgQG[g^~f+:z̧>[GhEG)VJ4(lgOٱO_{Wo>+!)xg)P+/@a I2kP<)B %WJ.FJSB;2g"uZҐe/9j.\S5*jcڜ|һWaI7u3K/\8A*1]/3]9hv$ѤSF$);ɓm6߿VRRW^߮'xBUU@ Ox% eZIji"@L sO\I1(ps:.o S*$fWЖ>d| w ty 8*W%QP-I:l=کɎyJ(ׯ~zobkAJT wD%KکAd6@O0pGڵk裏 ( $y(`Pma 6r<%бw{U _LRk]IR^~=4]KTһIŒ5 :ߑ#GOt;t뭷 C U2n$ $ $c*שO>Ҿ_kȲzi I$ߘky:rY(yV̤KVC.Qn*p>dФ1`&#rC.端2:tQ6C0Fs(bˍR&UIo~I^(:fMBPm;?-sh5i2}z/9dyhW@:&2|23_ٹf̹T`M0Xd0ZxS4Hթ :~>&H×gb1`/yIT+s >қj>ʕa )hU>}m 7:&@N'?Ӵgj֭zW55zWTcLt-_555) c_SRevrOE忯- :1EJTppb~/ 得deTڸUM:exl{:' {JsRcw PE,4:͔)+Oa$)Hb8R6ʬ_tRiC 6qTt%*[lg@ߴbkoZaM [S :+Ut{V%?(%HYqNN#spd e9 (^%9 @G 8[,$ɮ%'Ϊ]Hf"$IەRQ dHr&G,!Z\X,_Ie~~bk/k{ 7I, KS)ך J$F+[HVڑ]#sRu33,Vo3++VQM+x5/B8?Y+B/dy|%I*v=(׬@QYYÐk_p9jgF4Hu󗥮}6mTcXfI@ EJr('9MNkjjTӴv,v|m6R]SO̒CWpdm Hrd)a}kԴwJyvG4>hQM+{"/y%\$_kTusېIw&+܋Ǖޡ#-zЭ W}ۓU!V)fle+CQl[U_I\l+Acdeh=^Yk"e QFa"(+Y$eE)^<'CYq+>(&xCoZu7}hE"5Rq)! 1(lɋwq2Q9EQX̲mTPeS6DNBpP5h"n*z~graV8yyI9)]AkRrbJyIr4I,ܣ^CTH|%GbnyيU`cnL8 eշR@[z OZkQnR]9P{Z8Smk)O/3N/$EYͲ%j;tTdKHj}.Jn{:K`E"DX^t)ijR2X^j\;a)__/IvIj8TJ iՖRm.jFHi>*s^ɨ[˹醛OUtbNCmۥo ST\g*_V|UE!]\> J*䥐řZ40K=#^Χ+,;8+#WIPߖ%JA.Gkdm mJri$Obo$ Ujº*R&C5cUsiJSⴲ>AX)7*s(W(93Y - VYWSV|IqҫzMa+W@A=M 5-) Ib(Q׶T_+R>(MR=M9VB f5Yv)Ir&&N./x.{M2Ww\^2G+./UZQQZ޷g~iihpbsU&_/NQQ9+?Jkrش-g׹4WmtEYJWʔ{8=qpT ~|}YZŊZ^H[ڝ=6X^ʲplV$/Cb&>Q4S4I:0  *}eZe̡ܔŲݺD{Z8-;!WE9JY|% p8t鏶E)=ס2yU:dH)8,Ue/SYVUVY^eEIUL+jReٳ8O.Im^d&/RqrybjūR{/V]IQzN*ۙUنmd5*j`⒔1(@]VZyGV^5g&ܮ;]WWP$}zܳI-ҭ^\\V~޽:^oZgѥd&Ek[{{i4'7ݡZ8=hARd(~=ڳRwњ p o{tC/_@.Gx>w-.I&+"I*$6([(;rI5j$&i>1lmQOQQY|u^*sؕ[ha`\Z=3U@ nd2t9mŐ&nC.'88E&Fat( Ă etex{{뮻2: tQ$@nIqqqF]/KY,@Eygt`1c0: ta$@ &( @\\{z?P6:\kFÇWbbx ?~\v]%%%F_VUVUwuFetHHtScƌј1cǨ/Jl?c;cvz+Ÿ7n,1sq7o c0@cp;'N(;;[gΜ7_Ufrَj8۫\XFnF 0@aaa 0zHڄЃ}JMMծ]TSSct8rvv}G>}N+еV_|atܹS~@P$?\B[F*f=PAA\]wuQ޽u5]~}w}oVoرC#G7lt-b}.]w5\#OOφ>C( ={eO>F۷vӿ%] :uvެ ҮZ3gEz u%W^FhD HC n,]OhՐ6-[Q7nT\Ul6nܨnkn[k{"U74|}%0:TW˧@ЭCYW!W5`ѱv?Y0:t7$@Hշ?@$ok{^׊$?pzh4.4 @i-#$}zx͙y% +UphJTMw"M՘V*v =\ek53[iz5RwQ[>wyS?v3[.g'mP `:mݠSjq?mZȝ`GJU\R!oCeVMb+4_ުbW".w2U[%*..VIwXE[]V*ӫ+%՝M0 u3g5`IH]{x` Igt4@ ֝yTxK*^>w2=23@S5'kӇ4Dы*><ۤ}Gh-Vk3SqwI1>ڛgo&+$ 0x:]3<~ȔT|2[K.oSt^I*y+!˭;GDV}jcg:S󓩷!!$ٓ_ԧŒdR@hRJ$@(CLu/?TQmD?d1yH*Ɍ:SR-Bֺ燛w%mƏԶ/.P3or|]E*>v$*|m#:309$3& -2J% o(P;| I}4@.pUq:wnK4f6ii.DHHg& UޠOfTRiA*FBЯHEIηRϼdNM#p*83A k|v^3%B%5SR__[ԼNJ{< ɻZצ 4z$j!ƫ6Q†g$yȣ*= D%_!MOL~I)~m.c"oм~c)$ 6]h$@1*t3*[&~ZV 釲KwFԅ5>ۀھ K T,IM[3~j_Lw;[ܧ17SaFf%wQWuN+.ɞ3U2L2PuE򳓕c9waOW[VqEj&=t>3h![b}{oL&yWџڬKkAOOW+JT4F `מ.rp&bZdzm~)/~7tz~ۗ?X-7p np;$@! vHC聾lwFhtM.~!曍 H=o~cڼ2@H!**ŝ2#`Z *57pKigHt;<(T%[vBN)AqvZ<ӆ[*[Spg1Rw:㬊SDg\_;__>_s?;wX+l6]pX333Z\\d9,k|7Z\\))):}a;љ3gv k7ibbSd<>%f BC oO> wj=*YZ&O}QSM*--U~UMy/PPSFw;ikkSuu:dtWCOŋFw`G,eeᐆueV.gq2ThOWTrjOQ(#`'֏c=>s6Eȑ#ӧO3s +s_xd5( WںEj\Cz>{$PIk7\s׿]\_9?a`92ߤjF%M]j,Wii+kJmuTl'^# zTR:TЮ.Y5RQ^75կj'!cW;~JV9ϯI›>ct3:9;BR8fu4Ys hۥ*m#CmmpCu t-unU:KImdJv58zw rԪ> G5*;,u =u>p@]tulAG*T[+M`ܫʼ5]s7 oL5*;zzeW_W#RQV$ЕRVZ SeW}WQ*튶'!O!o:WU*cnLn<اUs`=YT.{eψW^_/^niQ5gV*'ֵUT9;+!Iy55eW#*VmSӆMMjrbǬ5j+ ʭf쌞+곻V=+8ccc>sݹs.%ų>kt$n,o#GW~~N> 3d2grCgW]TQzFI҄? TvҀl5jn,t[W;%4ЩUŏX[jM&[̩'!{$TVQ\4{ѓP0va2 u3W-e qίْ]kw#KMtSj3[z駍 ,ƚ,,HR~Tm y[r7wQE'T} @^ԝ2]֥{#%޹uy5ȑ#:|}`_o_Ν; Wn׷m fd"($*wcKS gQפ۽`l6IRay5m2⽪ےN]lmHzK' iJ :c˾0L0o}[JMMUffׯSARYk~$ w=B{16{$iW.&L)"'ִwܘdɪBdG>IRWυB532jf=zt12ydNsj힐RXjcؚÉfUJ#mr67ޅ GK owó?\ѻE7 )l S%hhyoUmPC:Q\Io;&`7{}5콿Xs{||.bL~2*:U-cA~|#ZqUrtU #]l#ORC{:׭sr9TaU„^FW=j+O7ZNuI x]9 MS;*|zllv ?PUU24al״_sZ\i/XNjpxXᐪʖYa޾MTU0cNcv]lfFUoU9U*T}0{Gtg ?^]:dt&~ߨY1yJ/dOWoߑRTxVϫĺEC]VaGo?+HJ;==h[eUjsʾGyj}O}ݺrէJ:r՟v&{e7+5P6ۄl)ZzζNukq:3F{uVYK-ڛuU> }UéY*kq=BW侺]8D"Fw"qu[깱28瞓$Fw@!" " y7~g=o ng}v\05_%X؈HO]WG/]ӗ.綺5}'=xLϷPwaAop+WS[?W I`_aLːo6RfK1=)?(h~T}g jqCFwC<*I?xR9G%)S咆^PwsQdr߼ntG`O1V<+S߮ݼvI\/Mߞ$2'ucz9vROU鑂.j~r\:/ȼnӪ[zfc'ӕ '])K=g}կcqq0XU'VsVng?>-S)󚙜̼RsSgw?c:Ut-jvrR:cSfԱǞߜ=+e~FҏK;n b\`8fĎxlP||R9/xBo?~q+?g}'U*H4;GbԱǞ@U:uIzP U*8*i]C߫|V U:EMέ˿ZPKGrSgrE?㙒t= X23$iV4.)%@K@(Wۃ7BOd~Y}JCQpQRl'z('EҌR)xIHxMCn/SnC^)37as׃9:"Is'V@T$=&[NI~,jF6OF>o<GfT-z-s^dy"M_۸'͙hW37SS*Δy|M`yg*SffЗ |=.>%M_Jss!3ڬ9+GʗWs!V#}dCo׃zdR$z_Gu Idt_A?tT/oh8393]xPOǖZ qCPl\lk5󏫼`iؐ`V?c;3*]:ri,c3鶤p=>qK9鋚/?u2ZT? *W1[-qI)J~yiy#3L=acz<'3ϙq I DI/_bteol?3=&IJQ~%SIytw~8X(Ƙl`~`l寢>Ttte9)IzZ=Jm]Ig4)I)6=z)\]8XB)U3?#)hdY?~YI)G3'A_5g}u3X022k&7VOfYY*ܼI$}(_?G/irf^JTQ43NOSW&ۏOu:Yv&gr4G󚙙Wz8ʂhfQ׮K/~Z&gU=ЇH=qVlK _w/]3Y= 34q-^*f(:$ng5Q-OAMo{w_T~&.//woukpfoc_nMk1=ל:mt`109sFn{p8f D=3, !O> "墨n(Z2+:t萞|I]xX $~XΦm9rDuifbOQVXXB4=$_7+ q77qK`aħ~jt$n,o n,o n n,o n,o n n,o =fˡ,CH$bt'X˛o3ڿ**oi"8j9@8HB_ x%3+&|Vr@e?Ma?гg?=5:1S4w<y詷ٽJ?⼮򴨢gǫ*s0I׎)Taq?g@P94Q{X]#lS'ﶴ;\rž˺qFΎ> /=tPn]8Ө8?=򴨮S#;vLc?{|悺F;J#>u4s!>hQC}ëPC]{/S.:=CC!ZjΨջ G]yFn}߻&LcyǤFãv&4mL3@O*:(Öm_ 7Kn[!ߓo뭖ov}^eM:at,SVjʳqmSq_u4u^Vz[^_30?L8`XL@_EڳW?|U/>z5r$RRϑf/}?RRR))y-mȫ/|G~j䥟9=~II?~/1RRRym2Dk%%ߏ|lG^,)|{7c4{7n~~RO#KW_|ylIacGlՏ=_M;3881%%#o_wDJ|䍛_E'#_!,q%D~ٞ _F\:iW.o_>7͚?{H$|`Md=x睮SRQNTשZS+߀Gg{͒T~3#M7,[- f75,6~%״pVkU!Z6atwиGşSU|YNՕڌ\r&*v8$X嗔U]r-j 3 (@S$)/k#ʒZNK vn7 UƷ %X'_RcfS=C['x7qל_U,oݯm7R* $)W!S*IKIeղtr?0m636Q'\P;]u5-r.o<||$<5$wOE1բ1s;B ?(X"ѧaV(ycqW'#|w/otP^}3Kreu2[^OK,j+$sUlMQ+d7鈥q;gֹR-3?Yr5TMsFҦFu/R~í?~$(oÁ躢WN7i@Uqq|xT\Y[̽Ȁ,1޸K}r{JkS6wGr7ܙWik;Y]]LWlڌqI⟧MͪIN55{L-mu?o~πdrM7^CȣfJ/w<7aR;~9 @oGjo \նȧ޶ eiZN}8#(PesHH\;!G6>$٦!:;rάW+g\,Tr]v{*\͹ qDP^IR]K?$OSEO7L~3~9Gcp?O|*V1|jȒFuٻه$o{M?dn蚺Ǥ"gX'Ө.Um*@O:դ˝uvOq) 6'f9rФ3 Y(`n8o߱?NuKճ>;%g}Á^]yof_PJ-㚖MjKQȄ+EwI:ݡ앍uV m D􈦽m:Sn_<]RfиU_{YNuvSivKRc_͝2.Q!q H PvMmdTr5s{$G˪cޭG+͓̈́vg=KyIԆ7iM$ei!OZYr7T%fvi^'/OMycTS02d=67}]l iW@f7q_iMy4,_`*iO9Wɳl`Yw;%iwV79/#^Ƥ,gr^O!$n]z5-060MCcHpCH+VuCS<7q?`g@Q9 4kt $U~";Q&\j$5ܚdАkLPg\cѩ{  HR2tmgܷTNqS}+_`7oLRElUKOV7{C2_W?nG-^M;4'UC㞀o $eI j}&/~o}>+.4 K5,ie7+.%qy囄>ߥiYaiԧaIU5~d >O{$GG ;L)%ibnÌʅF2A"p H2 Q^e:sCѷ9OwNOiU7k;?-][t]]~IUe*6XpBqP%/F=rK*T}m|{aSY: Ŷ֞RW[ʒӱjz;5RhLm_mɪ0q[Fʪ$o>E]nIY*]7߇ogTC n\V$՜ز@//Ra͍zI*}i^WP~uuktE77.%X3 <Z{D|Wq+[-ߘ-KB>E\$w2F¯nx]S.3gp<}չ^ԍwZ Ad"HN zt٭ +\euEgͿ؝V\s*aݸT` ylwvyb߄ TٽɁqs;S5WndnMܭH㌻B8պI׶V缜۬Z?SC]jmsɯ ]nS(elWR>=\ݽenRť^u6х*?|Rcچ79&Bu#ѥצn5t]?6uErnf{H5?g܃]?f/urLIU]]m: >E d9ui~)O*[}r{Yi|olDq=;Ff:RX=UxBn%^9mO28x H&fPi}]0WEUtkIqnHnf= &yS\ݮT-E{͙{v/5l,Ujtmu\q The Official Guide to Mermaid.js

Get up to speed with using Mermaid diagrams along with real-world examples and expert tips from the authors to facilitate a seamless development workflow

Flowcharts is a diagram type that visualizes a process or an algorithm by showing the steps in order, as well as the different paths the execution can take.

Sequence diagrams lets you model and visualize interactions between different actors or objects in a system, as well as the order of those interactions

A class diagram is a graphical representation that is used to visualize and describe an object-oriented system.

An entity-relationship diagram is a graphical representation that is used to visualize the different types of entities that exist within a system.

Use State diagrams to model and document state machines, an abstract way of representing a system or an algorithm.

A Gantt chart is a graphical representation that is used to visualize and describe tasks (events or activities) over time.

These were a few of the diagrams supported by Mermaid.

Book description

Mermaid lets you represent diagrams using text and code which simplifies the maintenance of complex diagrams. This is a great option for developers as they’re more familiar with code, rather than special tools for generating diagrams. Besides, diagrams in code simplify maintenance and ensure that the code is supported by version control systems. In some cases, Mermaid makes refactoring support for name changes possible while also enabling team collaboration for review distribution and updates.

Developers working with any system will be able to put their knowledge to work with this practical guide to using Mermaid for documentation. The book is also a great reference for looking up the syntax for specific diagrams when authoring diagrams.

You’ll start by getting up to speed with the importance of accurate and visual documentation. Next, the book introduces Mermaid and establishes how to use it to create effective documentation. By using different tools, editors, or a custom documentation platform, you’ll also learn how to use Mermaid syntax for various diagrams. Later chapters cover advanced configuration settings and theme options to manipulate your diagram as per your needs.

By the end of this Mermaid book, you’ll have become well-versed with the different types of Mermaid diagrams and how they can be used in your workflows.

What you will learn

  • Understand good and bad documentation, and the art of effective documentation
  • Become well-versed with maintaining complex diagrams with ease
  • Learn how to set up a custom documentation system
  • Learn how to implement Mermaid diagrams in your workflows
  • Understand how to set up themes for a Mermaid diagram for an entire site
  • Discover how to draw different types of diagrams such as flowcharts, class diagrams, Gantt charts, and more

Purchase The Official Guide to Mermaid.js

Written by Knut Sveidqvist and Ashish Jain.

Knut is the creator of Mermaid and both authors are active core team members of the Mermaid open-source project.

mermaid-js-mermaid-9bb0ed2/docs/landing/sequence-diagram.png000066400000000000000000000465571433273745700241730ustar00rootroot00000000000000PNG  IHDR0JM6IDATxy|սי$"[",Jd-V.vѪmV[ꭷV+,%,$=3s~$$$@ g~>w9;'g|XDD5x ""N-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" _l&TZSw[OpD]~d.Ů?MLx4|y.CߣJ?Ix,Ɵ5hln~;F3һuaG(et{TwgTbן`rf &d&]CQGˍ~WF+F&#ϒLߣF?Mx'YxqQs՟QM"ZM-/xqQs՟QM;DDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DAxqVsZNx&&WU0:#޵I[L>㽬&%Ż*9~kGcNH~U?+R{k5*;Mw9fŏr]y+6]19%ЯaMxv)m$>jz'ޥH*{] ~᭵\ :$N^x")]w2Ɲ)»gҽ'1+tNwe'kG7JWŻ  Kna3s]M%үqw?q (ly|%Jvն8rwx84o4ﶥ;8$bL+nupw}vQI7ϲv k;Gr§ <+s+f/y _^Mߛ>lsv89f.]xm5F}\ueI R}p'ƻ^ڔ1+X`#+aĹ z ^}owD S0:7hQka,"W^L`[qƏ6q5_XLw|x8@ҥ7&ޭcD]k9ŷ[L}<8[_.Xv >x^֮}@WVUWH\XX0adw"Ҿ| †$ So_dLĻur* ϛƄH0/.aI8.A!KΏwLW~Lw&"FܑIחǻXH7,`apϗP r(}f0§o,w䘙T 9;lDos Y9kgs9]Or&j닉 aH@Q%` V=Ű04 ?=7`*At& gD̹_`M]f upii‡9/&j?fŊo1Rx0 CAxQW9>^TY ⒁}/B7 TAf*]Һ³xnD&7Sr;ßQ ތ^֬"&O_A~79" Z4<hs~F$q#k >4k ӪsĻT9!Bx٢܍WzvSxfl/tmvR8ݭQH;5䑅ƻ%!<¢i{#}Ykvy?]P;BbP,l@79b/qAXY^uD;_#0~`p؞y0z=Ő酭TǻXH7,e !<`ɧ4|AtGlwI%LkYت.vCg UA2w1XJ> sBGNUv^z AF5 YYgunz Q٬ZP _vܐX& k]\o_{rOG|d[8_~S[.QwdAvk)pL ;SҷWB0n9މ}Iqa[J=<œOL{V9Yn^wK WZGM[_sb-]ā=ttW4q[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DAx*Z%CNU%OІrH'mY8*71>̖ šeA0oH"Qx_ydQْ¯zy8iտdsܻ a\h cA=ݣo+oFDh|Zk_}}e ֑hZkCooeyZ[k}v׮[h"ZTqu@NJt |o%{o~Gc{ȴRk(s4soc̴h'~B%O^zȍ$s|nv"ҙiڤkn#9dކC0FdLj|99j9/(:%)ʇ`WG-"NN55g~&fٓLꭉrB #v ;-Ƽ|@j [ v8PiFNk OϦn߻_ϣ>Z TtfGu-sYו p^0ʲu`ej26 YGVkn-'y$z@ +V Xb xNmo $aǧڤ:Zk Fy >lvdn>־yF P9/:LWe42ZܖUXnֆcOjUآ[|=-Ԭ܆8nbnwFꮻ-ڴ $/u"»M2qdc xNo m c133ٖڗc ؏(%>c 5o0&<3TZžvXsMOc & ZmÏsի!~c0c0)=cZp}D?6Z5u 5U#o4mN)c{o-!m39aY‹ /tV#[~Ś %myְց)-/ Xqvp]f'0fgl7mXtrG0vU瞧Coa=1ɹ73KRNd߸i=sL^Ρqtؿ)sn+#[&4oʔKK$As֐3.lҁm=>;c?p`v:c3dցWGزwӔǾpgҙ5m4rDB}]t#"iڤu/W^y%sַ NX2<=|#YoMy1vVhkfnt)CƄ oag{6`c?q15UQut:[qp9 ;w ޢÂX<_L:rndiB9I#iN#vK>k aׇ^uߚv&jAuv, m!<@R~Jnt0~7]R.k iho|QP/&+؆}-[;m`_oR6;]Fn]'+8E#31U-*;k"kJL`2G5@^277K^&+Pw0|=( *=Ғ |݁e[<'vVy5]=I}:u`ǀ0)Zi8=]Iu#s[j2S0eon_e-5%Ճ7`uZCex1yGx ?@?J){@6gC5֘g=^cfk,1)Z;%[-Ғ»dLTʀ׬禳=H}+S%`o0 UxS} ڒŌ9o?tѪw-c1|OǘTJ ؁GiTkzӗeҿui=ff)EZkB7lW *7<x5j7&UU!;o0 S +[(1k8E^KpC@ ,yG6d#7[ ݓNJ>nV.4dvADZPxWCe!k2<&v:,9*-V)K %QQX!oC$%'n}'uOãqԿ30s! MA[V I׎k Z5g(| _-'n>'5*4E~l_:XĤiڽ睕~o1vX'^ZmԁIJﰠkvכ>{n:)wܿhf͝U`3<;uo7[g4}II_fU|qЅgd}P)yuBGdLj^x5VΜ_n_}-y.vh|:b f÷3ՙ'0c.>wڴȅwU3 _hXYQ)S?k0[5B}Q.64hP׾ ,Cnfb #ͨ$OȺA?k `h/^qcmcĎ* sP8BK8CN~wPxkSH;RL;0N^HiڤS ޞ' g 7w'2r5;PxSxw]w VHi[DA o)EDq[DA o)EDuޒĻOFޒlmĻf[[Q|KBRxKS|K"RxK'ģNA-F-D$WŻщy3Hl,%ϼn[A'E]̘f7nDMDDԉGSƻq㷭~kiNgǻ9!iDDA o).@u9o,,&%t8$8gp6fy.i"G#oIl5Z*H- M-J- M&4-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" _ I$j19>U >y&ޭ=Fz@)a oV̯g10ʖt~ЎNd[n9n푍߆k.nڣ=#tkZv޹ xگ5P煮9ovb:걡'/bkj}I ovcΝG=wwqvc>7$H;]t4.><@;P֬xu0!Qۜ:Z/2'KիYknm2Э 8KOԽ[''>:`ǟ4_x&~!>rXx]rz5@itSZ$[i5~4N> ُ[/ NXil嵵i٠,JbmxJ-Y>;yqXm -^G@ūX;!h<Á ~2׆w],6\oRZ{#zFw&RxxnH[Q#ɭ|dvտ`b^ NT?(E:Bz,Yf{̡a~c0c0)Pj W_\u[ *yP&0g#O` GˠȺw;!c&*kް`"ڹmc`"wfMSw-PVR0@ jJƍjx^HcMOA&"ۀ!G<"Ə~߀ox/I9/ZcU#B #ښ@>ƾ_Ş=uJk^Q[/~q4߽(rYg73m Mio0l|,,9gNk1=GYSR +\:؏>sXў{,6O6,O;O}*V._c=>;c?J_>wa˖3ܟu;1͡]i,Sr+g7[B[ <׭|yObM ʰg79r.Xכ3kBWmSzޮ6}̇WfxeD js%l'>UGxb;ztRt{6``L2'BhMU[4 c,,YT\ 鷕}ۋ,fv=@s,`ІV oɫܸu[ecwE~|'df~|Ӗb8I>yeފW-Luxoݜ<UD,Ƃ!뽢|Pho|Qm.8=S5guAmܭVlK`9m:D*o^zxf}OE3;!UnM&l{Ksk㉴ 01юlZk3 \XŋMNkk:c+=kZBz$q{#+ /5<]B,lJsigX{m.s^к54[PU/8t+N}=d6ntddiw;(E[CL` jR۴Asʍ/=bG zisDV6mX'/z.تJoEw?4RO|ci6]NC}dƓq0'] oI5 cSێ1i=ogj 0ofrɸoh:꽍BE˰3ކ}~1imD7C-  D PQ Ǻ<+Sħ9'Vx@yP=X2{3`M8k!iDlI큃#C琍Ю {R%$vaSѠ BV&λ#'}(%hH^`mxses9pȅb=^Cpg2@ݲbH:-[ g|T9>` o5 !ym \ @p]uAxi[^<3&"l-A*n̙zÆo^4C& Ϥ88MANir 羳Ss7{Y{#7+>q/ `xM_]Yـ%MTaCnKS7E:tgl"Md^ڴȅwU:xA3LH1ÿ1ssn֞;{#^9彦ōK1e-½h  |w tЪA>:fk1_Tp$L&A-ri<#mߗic<ï3c1+&|ž?d^|{ Gda}{12"4hO*3; \15#Z(K1Cn? xra+I>c{ J9kᇚȵ=}F02OI5StYidh/0q)a_\~Va`zM2w0g\:;d = e b3Y@2Ƿ+r.>s,m{)|Շ73?{m7]*Nnՠd &k2osypkogg3p;;%H\o[>JVyv4@}Y09)PVOrNdW}Y+ҭ k3#^Wv+`#,$e6=մLz87Xz `Y'H}YrVӽ['~k-њB)wNjvݡMshmƠ kyrr}`;YһY^on-"'>?SL>zX 29.r9C)tC)k |nC'ȉ˙-`>I~m|4>b`tiQx2.w7yXzϮxҿ3)@4-" ""Rx8H-" "":oqXz]xq[DaKn E"c oqQ|G(E)08F oq[-"Nx?Z-]R릳VxKUxW cTv'؎MDiƻ[:^s洖,Y YώwQqN5@Uz/٭iqu#~4X =鴃n@-"Qt[DSxCݍ"nwEw#8C}[Dѩ{}HGDA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DAx "qSS&:8(E\T7\1(ޟ_OFqp{Ļ9r4m">zVQQ+Z)n<}[k+]XZ `KXkv vkqдr&3xw/Yj -TR4s[I)Í~d_0(녪%n̚[sѷrCDp+WI!XvuP0۲2𜝃'])$Euǰ~WB;`,K>F`^cƦ+^O'hl&iI o7<`h{O*Iu-sxU,7ᚉn$&_~wK:.6`S! pZk}j4|~|ZXl!I-ub,J;1ڗc ؏(%n c 5l}ƀ`MDet+ؽm0HOz][UICR ;AlۯTy $,ztCPRx{0S}5!غz߈4l]-')=^kԴ"ʚ`l^4LR!X^mxXãPXx E<21ߠX: ~`o T`jVV[z;O](,o|?t¨ª*w7RTESx+g<@^RZ iL:5+7!-`hސ$ؿ$ЭO4[] 'À!I@$h]Xܡ{/7[gcO" WgL@) m P~`q\k, XLxW.rZ=?̓.ˆz\2kϜ  }Cnx0A?k `h/^14u4M8̛߯Hէ <ߒV`\Ͼ}MV+q9PFUroW7miہMgY e:km/mFmGoc}<^:' 1iD:Y^MCT~-mۛ4m"AiuSU'~kD:4t8N-lŷ8K-[\NN-nRxK)E -}HGٝvI#o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDwg t=Pm!9[?1"']X;خ?~^? o  G`=h%Y>ص| Շi WC5ͳZt_7ڰ_km*%K"F=pwciv!Z,bע'"' 2gbNlo{CS"[ {L?b5֫ 0=~X0)I XȉAE7nZS:Lm~o0/Ś螖^?}9$IM?F/"1vѡq5/5pu/n!^Ճ@-]W\՞Fл<=>;c?1iJLV4"_oMy1vz*^SJIS3 eFĠע7Cyw{(Gv1xgtLOnLFF"'MЇtJ^dغ<.9c I3I}{Z2(EN y.P!=܏5T-:l1qr_cŻ"v7Ku8Ccc"/R\ Sx.) `+-iOP{1U Cx!O9A(]e S;\Y'6Tx OG"rPx?$ /v= t드c-ˁԵo^5<&xS{/"r"Px7?p{fK<?1;aʟ""7oqhoWt6Ӯi-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8ؘ>X s|n.(}ghPXȘWoh௏TxLJۊ3oYT/]c:9VOT)ص_\|[%$WCl%jcg`ڷo T(eUuuOD U]`9 c|F6Ny*"+.}NXKa\&M^P̃OO-}~ K/(a{<opx SgfX,Eoq.8x,E{aǪv)ݷ+w}1H͸B hx~<Ί>i z;5w <Wߨ.lHb>p0E @޸O['jHkLrν?Û x,ʄ!Op`̔J}g/,b錞t}y DzÒQ68ao gz`1\|kN0 /MRgS*|ʫ¾x7NA#Fd_.>Hc~6@U,kҁƻHJ( U@`ٓ] ;( CS2n>~O^AgpFdϜOah-RYxF!|Hab"McV.`;Mu@O3|E%j-.gk},djzӾM[m%! !< [Ndr3%3Pl*b"w #Eñf;wgǻIg?RM&:qO8MKc!-Hyk7kFFxq rKVlg</ՊCSOYxk["b#,*x w;0rpٗŻ6i Y}]`,$VxL. 5bN t#U> ߛ^NLЯoM@=m 7S ^j @uy+zX־c~|JAGzz/q'T?Y´ƛU~b=}&@^5.xތ`1g.k^xT`Gנ>M0$mT EV;KͪEUEo~n; 5m0q؅o'q Oe<MyM?噹%kn|Z@kҮۿ<%}}%\ F~ͬmch'gmfntOmcS<$7Xm uut)}{-nYݴ+:)s?p/U? YA'ʻ6a"Lj\=7?YNs2Zi+ߐ˟dj)kv2d&, \ =ͺ[NDQ6xO_HTwjnژk888kq%}\=Ojwϵ;gX'F.w w *Oj+M$||[ S>]^]t!Mw-E.x'tFMHg՟Gƿ5-[Hdg-"m\6.cy L=M#oI o7ǻ[D٣S{N0VxHR+!M8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-"X` xqQs՟QM"Si$xqQs՟QM"TY=Hjk8hhŨ?c]=1xpޓ:=Zn3Z1Occіmx3R1x&2:=3Ϙ7w譎hx\x GOW]gl›PiM輩rS\w'](ED#Ԁ@ 1IENDB`mermaid-js-mermaid-9bb0ed2/docs/landing/state.png000066400000000000000000000363261433273745700220720ustar00rootroot00000000000000PNG  IHDRx2et^GkA~ypDj"EXx஺h]m~xڮwtoD^eM>}zQz׎avI{kjf;@?0$xEg'6m;L:GBӉ6 Ld|_:nWOe: pB8#D;|]z3YjNMAӂn.1hMzP&t Z^ 2Bָw!hG3ڗ2'l ?ϟm$jVAs-/*D ky[k|],;9kr hw^۵-C;fO-YP.}uVa$"ke|v+@?hD&!2,}ɠ4`'g;PBŗ@>8A펴f릯0̵ ~8j6tv l~$^Y+6owiV,z +WƬ1zCű-1 n^Q{٪>/k׿FpҧgY:=a2>^|bcp-ۼ_@X_P;:PV*Xƨ8W/zu:}y`C|i~"H ?*NM45!$xBgB3 ^!ЙBLW!t&+:BI !dt# );8B@ U!ЙBLW!t&+:BI !$xBgB3 ^!Йܹr̪Ζm2O. HkFtYwp YQLE&XBO7 ~yP^I6䏀?k8`.3* Ed+0$Nw $xҵd ŰR п 7}N.S&h%Z@t',@jA[G&8l[%rwij`qd_T+@45&#V=d]q;{oNNMuOd! #4d*ܔZ\kBpg6mBml?ִyl"e9Pnl=wPQ{o` eXpl; \]D@) `_{Ӈ -o֋Q lw >: +^FsyE>jReRU4535%Ι+ ZX }ⲶhWȼ'΍ wO6^-wYzk;YQdN(7rM7@~ݖ'vmN7RۦǤnI&u)BOƅ,ɗJ@XcѰks֪>\bWdS)OZӕl< w Wry=w'a&+gq9ƽ\ g$[&:/yp] H;~ koCŒ ,^~?z&W'z55#bR ];`e6e~㽰*Z`k Ou'9C[8s$Pip }? 6hW*5֣umA_rq-P,$ݴTŭzoZ:qi -h8 /k+=([n<7Iz+ |êgC(ݴ߅K7PnU7-;sU-/x>Q 2s { ha0ڒ=a[},?Y^+޶[yԂÞqeo- KXH2 ^9jJ'SekC- ɟ``*c^TZo^:>YT#iUO^0ݙlk[ u*S!WVld?Y@ tM|DUoh[ n{bX4hK*@v ^\SI@EEU`@>!kx&_hL7``t*d4{ē\Xr(J4uRR V&C iW kԞl[xt6W$_W hikFUU`-+$xVa<{<;ث/:,DGm0G/8:g \b:}7 Z#jdaTz̪uJ jHl \gwvSl9D_M/i ,y RPkն@6Ⱥ^,|HΘ˄d f2A7pjCfCf{˶!XD@ZZ*_0'3VQi<}e͈!l]z*o^N%Off8nYsWbL,+z7[&v0Z ̅+v ͐9o`ѓ‡9;{qGs}CLռ>l6`cFǟν\۷*W:fɔ~' +Gw a&^С_T-YmӠC[ls oE!RPGv=СvAB7m7eߓѯ гš0w kr˰7 Q@jAMX_2YO,#T۷#lɛ@d^}}_ZR?!g?vr`>Z*ZQi~=ݼ!#H+CəE j" N.o-~9ca,dաڠZ Nw R6bbF4?^Nc>hoj= 8XmCvtw.U'L&E`&M Ikj`ɛKr~ng׏z-=ݽbMsjXH^wet)n 11f\A4H9]Ia*zt2R+M VޏNfF%|E`Y-kT)\ە*ΰfEz))1bUx+WP$]fSуd2E&`$[Yog>p^)9X]jwW E4Tzob Rj^Cz.c˺I*AJ,K/muCJoW~Yn:XOJ7HIYZ}>>T'0C .`32~CБ-,RUע¤[eb//PUT$xkn٪Z]wUR{#,pu7Q,+L-@Оq;M4}_{ףmrÇ`s/dޠ"[fhAM,s[M$N,&ǾM۵FܵPjkuppmx[5˱f;xx6>! AEl]MwI|m~:_kz pɶW6Ɏ:m 驪g-mO:|,gMʣ>'cӴ5p'0$|p!|/˯q]-ͺ-&x&\ӗ8pC1j@$$x˂F韯V/ґ0 X_ ,ʌiA0b@K'|3Jpdd2N/'?0_,Lmٶ Szy }'ެ[p HׯU(!xcW }7#mt~K6O6YBFOQSm GX:1t/4j>g[t娹͆$ AC n1Ĩb+cP@ZU*ׇS@Cג$90ӕ/;>w{+s }ˤ @72{Jt>|iH4ОofDv,إg8o7_{8$0=ɋnL }L7HH-ke,.S`Ӄ~sa. -i /{gc}rCE.M ?s\D }N78H'\*Knv?1*_B7 ü,SYO6 }b, _ FѨWv-͟v˵F>Z${g}=2Uy'[< Z] }ΐgP%yoб51~ Ekݿy iW[u xo,xGa;^Ӱj[ o: ް4K< S֯a-./8.5Ӈ==Qg<ܺ,@k28@VPAkF.a7!j)_o0QezZ#`,תNpn1w웴6ͅ*-S[ P @5k˱v!GxF4 JH7xFR+3 m=9zu9pcMWw/=ɼ,upzOe׍ܼ,vՇ֪\Owa) prZ0j?ͦI5lۣzk߬,XйޯYՆ` m2<;Xd04}=dMvJ=bsJ[C_{ݳ[ `T*\~xb,ӿxj QԲ^<8AJϕYG.Ǖ?Time7jZ+TPˌa7fX,-+խU@' ^9q"hVδ߮*-z~pbދtD>)MnX$yYg}gߨ ]Rys^K.x(^l~67 {avqfu2n-:y ~w6^8~"a'YZH6|u >L׬P>~Y!i lY--UoS`B=dUo9\t|,w=:\hcSyv@%M \1P9'g@Wo,!`I7p~ >2o=*{ `K $xTlc(_wiIU %oDR%M I7XL߅ PA-ޞ/I7Im8z:sk+Z$ި `(ޞIzB-Vb̬<j׾;)s⍪@O5U~O՜PmA"]SEWfUMQSBD)O^UxK^dTF]Q:L-yU@5@Bz5dLdrǑ|fǏ Q~ t&|FlɓQTSF57C}@wq+W\}Lv%-vAk.H𺠔M8WI^Q ,'{iWqC~BoimЍn`_S|Ş:Շ,d^}JGW rp-Fɔg=XܕՍ] $哥3cܕՋ.$vcA$N$xH: l$>< $22$LLw?>ǹ+[GIӵ}u)Q1nO1g;)2$nn|q7od\.kNU(Ɲk!)$O~nOT#K|3q0:6V^.n0%%CWdm]kg[FS;צݜt U{ ‘t5ZS4xm-+.|X75+n>&o`or\HLmZB헵=.x8ڪ` >M\&5/`l|ܫZnVUU%vL Sw;qza]z{;#.-'K2n]}~TIH$ {Ǐז4wk?pX >7a:b m[d]W3ìһ"?xσ?3 .It;l(`nC{ /|6C`MW7Khlp͝|hmw-w߅)O!ᗞnxCЇ*yԼS)@y~kn =6DVg6^ɛ4>.=H^;l坾s 8 1 ^_Vvk;O\-$0ØLiMq b$v? NDfTp6R" @ؑLwlةvguʞ۶f_fه 9) _Vm& #4dphg kܝm~rR'{wTi"j)غU~>)P'ifTnKjS{#pL*P~0Ҳ, .D1a8|"xjpuInCqi6ީ{zktmf.3fSq "@ Mmordx<\]UBo^R6 ?Ln.%6ְ@Om>4ʓvt`k؟䥸ip&hi~Ʋ) 8zE[UOфjT_=&}8>gS;f/;M>ê<.m,`f.?nz y>ڿ [,^3 sFkT/oXK+^o) YV8()Ϸ]0:@&ꄶt~ "y2<Z^qmF۵jlj-QgCuh1\kK"Nk*1z-h-=yk=,c$AXdu5IvwxO WP `v1ځlHf G\v8Qd}9[ k'Cjvlʼ/*X6yy!yzq=~0}ܚ֒ @-*â $o2*y竵' 1fhӁ6jӽD@Z 0 {ug :Xʖmo;!tcfb| X_l/ޝ (``={f$MavDu=N 7)F(šg!E04s6dLӽ̅+PHss͂Uo`,zܙ4x:&ỳg2 {p<ݻ1 V9yeP;nr boUkET:7i- lb{2lNWYԃviвGLu]h X ܒȤWiС-o{:onaGj|<޳]k&Vv~++@=[uSՄT}q;# t20v6^- xu,:jS¢° gW;k(棆$/Z UVٳAz@4`W2]}lj {<;fQh7O0۵W.;6 :o rܟL rS}x{ʻw@>dcucĴ $wa:Y^[khK-$i juw9*T\6>hNIClvҬྕ_e,zCo-|H>#!tY0wݟhSޡ"Rz72ViڌQo,pVv$9aO wΟPkd?n@󻯴 cŘ&shT^t:ǻFlClM7rOF֏(XD񠵡d)@Zw+w:sy WwWp{]{ ^xK=\Y)cu:!+-a}70Ny ^謣 mwss =YА l & .zqן e!>g2_{pMnUs5`WCRe:os70Ny}T6*/Lb]9߅ ^PAuZ$^\$o뻁q{eT=Nm]ГjK[!ig(/Azr;VC9۱*XG4+ ?BϝjWDHjz6)HWIbGrWWz1(I ?0:KWC䮮$x31)DГt5IIx3Kzb?>dHG6QWŨЁBjHngٟR%IjB/D׹845$چ5yLy &JYC\0${ lj, yz)rVdVaB ޞh׈kV?iM:%XԒ6LMScפw(Uh~&5^*%jmX75`EC5:!]Diqt' ^ Lxٻ.q]"q*ZJc1݀#Y)Kc9#떚?W 8 ^o%+|Kr7Iiq>$$x ^ I7@i-qC7$x 3I7IWj PMT#B@!+ "H Iw@&j2L7XQjN7Ui$x6f )\f'lۉRpD B+^d@78i+^Qjf` +ڄ\U L^ 4Q. '+,T*`!+5"o1K. ޲BMPU(\3t=2 ޲`0[E >eŷ:HUi :ePnu-@5҅,IQo٫Jڑ Ve[:;HH/ ޲MM|7 ^jVe%[T}B/XcWz2- r+k-Gl A=xU[H7v Mr2@\2c\WWͤ%CѶ~=ץsJ%xU eo&cׯv4:о^9Q>x5 [6Hsv鋁 __uva _.~% .X8bm`ೝ _-QS{Ͳ` &@|0Z]﮷x)p5t%u ^a&`2}To7}<ovT +WI>޲y$xEQ*  d]1'j{D tGu% ^REjepP l {VкuiVI9u<!M+qnmZT8~aFFLW찙u-`b3.'/x#W*eZ%@** Zq+s?^~b[u&`X =̻5EX{7_:b)@9́ ٳO^I#ՠAvf­ڂ.@J/ߒ f>_~KWa`k`[tOǬ_09o-柿jdeZO>z";Яm3dhT9t쭨`qJcVIZVKaK]8J1/MNnNT6Cq9h>zra~*|: m>;A<}fхʢ8M*PKD fT '[H ibIaK ִ,~;n,㻉"D&Yulx.}w޹Ie+W@# -/ÖT Bx6_Thk? lH1P4&}!;{߄߄t|_ T2Wro-ki|[ O]PYͦ޸Zdkt_iQ$x,iAY\8l_Z7O`M8-8I $ p Φ>l M#zwX@bMڐcV}2#(Mv#ڗ*E(2 ܷf/|M?`6 | )d_\۳Ξ=N :~@-̀)1cE3hp452K='A 2 Ֆ @&дu1@5Shל6o'^5.-ς#NE[+y Mǻ`$+$WCǟ-m=0w?*\}‡;}.X Ū i \F<DM~/ DkdYOQw* 0ð nl&ث-8 E$xEfC]@S<!v8M4i @xK"ȴv`e{p-v&K]J'XzUжx%0BK"r 9p+l_pvn>J1x`0"DoS>H"I i l2f!{/ab]Nv-k[\b2a( _\]I8R+2nLzfӯzL] En8j[{}MM_?ji {}@t*? l"~l< v>V#0e 8{5#y+f)>| L(U酥m<t"X3%Q/%F' Y8I6oŁҴ]XZt@"IS.'P\sayF7JwbV] )˻n`Tg.z{)ȏBLW!t&+:BI !$xBgB3 ^!ЙBLW!t&+:B 9B3 !$xBgB3 ^!ЙBLW!t&+:BI !$xBgB3 ^!ЙBLW!t&+:BI !$xBgBm[r#IENDB`mermaid-js-mermaid-9bb0ed2/docs/mermaidCLI.md000066400000000000000000000003761433273745700211140ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # mermaid CLI mermaid CLI has been moved to [mermaid-cli](https://github.com/mermaid-js/mermaid-cli). Please read its documentation instead. mermaid-js-mermaid-9bb0ed2/docs/mindmap.md000066400000000000000000000143351433273745700205730ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Mindmap > Mindmap: This is an experimental diagram for now. The syntax and properties can change in future releases. The syntax is stable except for the icon integration which is the experimental part. "A mind map is a diagram used to visually organize information into a hierarchy, showing relationships among pieces of the whole. It is often created around a single concept, drawn as an image in the center of a blank page, to which associated representations of ideas such as images, words and parts of words are added. Major ideas are connected directly to the central concept, and other ideas branch out from those major ideas." Wikipedia ### An example of a mindmap. ```mermaid-example mindmap root((mindmap)) Origins Long history ::icon(fa fa-book) Popularisation British popular psychology author Tony Buzan Research On effectivness
and eatures On Automatic creation Uses Creative techniques Strategic planning Argument mapping Tools Pen and paper Mermaid ``` ```mermaid mindmap root((mindmap)) Origins Long history ::icon(fa fa-book) Popularisation British popular psychology author Tony Buzan Research On effectivness
and eatures On Automatic creation Uses Creative techniques Strategic planning Argument mapping Tools Pen and paper Mermaid ``` ## Syntax The syntax for creating Mindmaps is simple and relies on indentation for setting the levels in the hierarchy. In the following example you can see how there are 3 different levels of indentation. The leftmost indentation is the root of the mindmap. There can only be one root and if you by misstake add two of them on the same level there will be a syntax error. Rows with larger indentation will be connected as children to the previous row with lower indentation. Based on that you can see in the example how the nodes B and C both are children to node A whci in turn is a child of the node Root. mindmap Root A B C In the diagram below you can see the example rendered as a mindmap. ```mermaid-example mindmap Root A B C ``` ```mermaid mindmap Root A B C ``` In this way we can use a text outline to generate a hierarchical mindmap. ## Different shapes Mermaids mindmaps can show node using different shapes. When specifying a shape for a node the syntax for the is similar to flowchart nodes, with an id followed by the shape definition and with the text within the shape delimiters. Where possible we try/will try to keep the same shapes as for flowcharts even though they are not all supported from the start. Mindmap can show the following shapes: ### Square ```mermaid-example mindmap id[I am a square] ``` ```mermaid mindmap id[I am a square] ``` ### Rounded square ```mermaid-example mindmap id(I am a rounded square) ``` ```mermaid mindmap id(I am a rounded square) ``` ### Circle ```mermaid-example mindmap id((I am a circle)) ``` ```mermaid mindmap id((I am a circle)) ``` ### Bang ```mermaid-example mindmap id))I am a bang(( ``` ```mermaid mindmap id))I am a bang(( ``` ### Cloud ```mermaid-example mindmap id)I am a cloud( ``` ```mermaid mindmap id)I am a cloud( ``` ### Default ```mermaid-example mindmap I am the default shape ``` ```mermaid mindmap I am the default shape ``` More shapes will be added, beginning with the shapes available in flowcharts. # Icons and classes ## icons As with flowcharts you can add icons to your nodes but with an updated syntax. The styling for the font based icons are added during the integration so that they are available for the web page. _This is not something a diagram author can do but has to be done with the site administrator or the integrator_. Once the icon fonts are in place you add them to the mind map nodes using the `::icon()` syntax. You place the classes for the icon within the parenthesis like in the following example where icons for material design and fontawesome 4 are displayed. The intention is that this approach should be used for all diagrams supporting icons. **Experimental feature:** This wider scope is also the reason Mindmaps are experimental as this syntax and approach could change. ```mermaid-example mindmap Root A ::icon(fa fa-book) B(B) ::icon(mdi mdi-skull-outline) ``` ```mermaid mindmap Root A ::icon(fa fa-book) B(B) ::icon(mdi mdi-skull-outline) ``` ## Classes Again the syntax for adding classes is similar to flowcharts. You can add classes using a triple colon following a number of css classes separated by space. In the following example one of the nodes has two custom classes attached urgent turning the background red and the text white and large increasing the font size: ```mermaid-example mindmap Root A[A] :::urgent large B(B) C ``` ```mermaid mindmap Root A[A] :::urgent large B(B) C ``` _These classes needs top be supplied by the site administrator._ ## Unclear indentation The actual indentation does not really matter only compared with the previous rows. If we take the previous example and disrupt it a little we can se how the calculations are performed. Let us start with placing C with a smaller indentation than `B`but larger then `A`. mindmap Root A B C This outline is unclear as `B` clearly is a child of `A` but when we move on to `C` the clarity is lost. `C` is not a child of `B` with a higher indentation nor does it have the same indentation as `B`. The only thing that is clear is that the first node with smaller indentation, indicating a parent, is A. Mermaid will rely on this known truth and compensates for the unclear indentation and selects `A` as a parent of `C` leading till the same diagram with `B` and `C` as siblings. ```mermaid-example mindmap Root A B C ``` ```mermaid mindmap Root A B C ``` mermaid-js-mermaid-9bb0ed2/docs/n00b-advanced.md000066400000000000000000000007601433273745700214450ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Advanced n00b mermaid (Coming soon..) ## splitting mermaid code from html A more condensed html code can be achieved by embedding the mermaid code in its own .js file, which is referenced like so: stuff stuff
The actual mermaid file could for example look like this: mermaid content... --- ## mermaid configuration options ... mermaid-js-mermaid-9bb0ed2/docs/n00b-gettingStarted.md000066400000000000000000000166671433273745700227050ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # A Mermaid User-Guide for Beginners Mermaid is composed of three parts: Deployment, Syntax and Configuration. This section talks about the different ways to deploy Mermaid. Learning the [Syntax](./n00b-syntaxReference.md) would be of great help to the beginner. > Generally the live editor is enough for most general uses of mermaid, and is a good place to start learning. **Absolute beginners are advised to view the Video [Tutorials](./Tutorials.md) on the Live Editor, to gain a better understanding of mermaid.** ## Four ways of using mermaid: 1. Using the Mermaid Live Editor at [mermaid.live](https://mermaid.live). 2. Using [mermaid plugins](./integrations.md) with programs you are familiar with. 3. Calling the Mermaid JavaScript API. 4. Deploying Mermaid as a dependency. **Note: It is our recommendation that you review all approaches, and choose the one that is best for your project.** > More in depth information can be found at [Usage](./usage.md). ## 1. Using the Live Editor Available at [mermaid.live](https://mermaid.live) ![EditingProcess](./img/Editing-process.png) In the `Code` section one can write or edit raw mermaid code, and instantly `Preview` the rendered result on the panel beside it. The `Configuration` Section is for changing the appearance and behavior of mermaid diagrams. An easy introduction to mermaid configuration is found in the [Advanced usage](./n00b-advanced.md) section. A complete configuration reference cataloging the default values can be found on the [mermaidAPI](Setup.md) page. ![Code,Config and Preview](./img/Code-Preview-Config.png) ### Editing History Your code will be autosaved every minute into the Timeline tab of History which shows the most recent 30 items. You can manually save code by clicking the Save icon in the History section. It can also be accessed in the Saved tab. This is stored in the browser storage only. ### Saving a Diagram: You may choose any of the methods below, to save it **We recommend that you save your diagram code on top of any method you choose, in order to make edits and modifications further down the line.** ![Flowchart](./img/Live-Editor-Choices.png) ### Editing your diagrams Editing is as easy as pasting your **Diagram code**, into the `code` section of the `Live Editor`. ### Loading from Gists The Gist you create should have a code.mmd file and optionally a config.json. [Example](https://gist.github.com/sidharthv96/6268a23e673a533dcb198f241fd7012a) To load a gist into the Editor, you can use https://mermaid.live/edit?gist=https://gist.github.com/sidharthv96/6268a23e673a533dcb198f241fd7012a and to View, https://mermaid.live/view?gist=https://gist.github.com/sidharthv96/6268a23e673a533dcb198f241fd7012a ## 2. Using Mermaid Plugins: You can generate mermaid diagrams from within popular applications using plug-ins. It can be done in the same way, you would use the Live Editor. Here's a list of [Mermaid Plugins](./integrations.md). **This is covered in greater detail in the [Usage section](usage.md)** ## 3. Calling the JavaScript API This method can be used with any common web server like Apache, IIS, nginx, node express. You will also need a text editing tool like Notepad++ to generate a .html file. It is then deployed by a web browser (such as Firefox, Chrome, Safari, but not Internet Explorer). The API works by pulling rendering instructions from the source `mermaid.js` in order to render diagrams on the page. ### Requirements for the Mermaid API. When writing the .html file, we give two instructions inside the html code to the web browser: a. The mermaid code for the diagram we want to create. b. The importing of mermaid library through the `mermaid.esm.js` or `mermaid.esm.min.mjs` and the `mermaid.initialize()` call, which dictates the appearance of diagrams and also starts the rendering process . **a. The embedded mermaid diagram definition inside a `
`:**

```html

  Here is a mermaid diagram:
  
        graph TD 
        A[Client] --> B[Load Balancer] 
        B --> C[Server01] 
        B --> D[Server02]
  
``` **Notes**: Every Mermaid chart/graph/diagram definition, should have separate `
` tags.

**b. The import of mermaid and the `mermaid.initialize()` call.**

`mermaid.initialize()` call takes all the definitions contained in all the `
` tags that it finds in the html body and renders them into diagrams. Example:

```html

  

```

**Notes**:
Rendering in Mermaid is initialized by `mermaid.initialize()` call. You can place `mermaid.initialize()` inside `mermaid.min.js` for brevity. However, doing the opposite lets you control when it starts looking for `
`tags inside the web page with `mermaid.initialize()`. This is useful when you think that not all `
` tags may have loaded on the execution of `mermaid.min.js` file. `startOnLoad` is one of the parameters that can be defined by `mermaid.initialize()` | Parameter | Description | Type | Values | | ----------- | --------------------------------- | ------- | ----------- | | startOnLoad | Toggle for Rendering upon loading | Boolean | true, false | ### Working Examples **Here is a full working example of the mermaidAPI being called through the CDN:** ```html Here is one mermaid diagram:
            graph TD 
            A[Client] --> B[Load Balancer] 
            B --> C[Server1] 
            B --> D[Server2]
    
And here is another:
            graph TD 
            A[Client] -->|tcp_123| B
            B(Load Balancer) 
            B -->|tcp_456| C[Server1] 
            B -->|tcp_456| D[Server2]
    
``` **Another Option:** In this example mermaid.js is referenced in `src` as a separate JavaScript file, in an example Path. ```html
            graph LR 
            A --- B 
            B-->C[fa:fa-ban forbidden] 
            B-->D(fa:fa-spinner);
    
            graph TD 
            A[Client] --> B[Load Balancer] 
            B --> C[Server1] 
            B --> D[Server2]
    
``` --- ## 4. Adding Mermaid as a dependency. 1. install node v16, which would have npm 2. download yarn using npm by entering the command below: npm install -g yarn 3. After yarn installs, enter the following command: yarn add mermaid 4. To add Mermaid as a Dev Dependency yarn add --dev mermaid **Comments from Knut Sveidqvist, creator of mermaid:** - In early versions of mermaid, the ` ``` It can also be be turned on via the diagram code as in the diagram: ```mermaid-example sequenceDiagram autonumber Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ```mermaid sequenceDiagram autonumber Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ## Actor Menus Actors can have popup-menus containing individualized links to external pages. For example, if an actor represented a web service, useful links might include a link to the service health dashboard, repo containing the code for the service, or a wiki page describing the service. This can be configured by adding one or more link lines with the format: link : @ ```mermaid-example sequenceDiagram participant Alice participant John link Alice: Dashboard @ https://dashboard.contoso.com/alice link Alice: Wiki @ https://wiki.contoso.com/alice link John: Dashboard @ https://dashboard.contoso.com/john link John: Wiki @ https://wiki.contoso.com/john Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` ```mermaid sequenceDiagram participant Alice participant John link Alice: Dashboard @ https://dashboard.contoso.com/alice link Alice: Wiki @ https://wiki.contoso.com/alice link John: Dashboard @ https://dashboard.contoso.com/john link John: Wiki @ https://wiki.contoso.com/john Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` #### Advanced Menu Syntax There is an advanced syntax that relies on JSON formatting. If you are comfortable with JSON format, then this exists as well. This can be configured by adding the links lines with the format: links : An example is below: ```mermaid-example sequenceDiagram participant Alice participant John links Alice: {"Dashboard": "https://dashboard.contoso.com/alice", "Wiki": "https://wiki.contoso.com/alice"} links John: {"Dashboard": "https://dashboard.contoso.com/john", "Wiki": "https://wiki.contoso.com/john"} Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` ```mermaid sequenceDiagram participant Alice participant John links Alice: {"Dashboard": "https://dashboard.contoso.com/alice", "Wiki": "https://wiki.contoso.com/alice"} links John: {"Dashboard": "https://dashboard.contoso.com/john", "Wiki": "https://wiki.contoso.com/john"} Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` ## Styling Styling of a sequence diagram is done by defining a number of css classes. During rendering these classes are extracted from the file located at src/themes/sequence.scss ### Classes used | Class | Description | | ------------ | ----------------------------------------------------------- | | actor | Style for the actor box at the top of the diagram. | | text.actor | Styles for text in the actor box at the top of the diagram. | | actor-line | The vertical line for an actor. | | messageLine0 | Styles for the solid message line. | | messageLine1 | Styles for the dotted message line. | | messageText | Defines styles for the text on the message arrows. | | labelBox | Defines styles label to left in a loop. | | labelText | Styles for the text in label for loops. | | loopText | Styles for the text in the loop box. | | loopLine | Defines styles for the lines in the loop box. | | note | Styles for the note box. | | noteText | Styles for the text on in the note boxes. | ### Sample stylesheet ```css body { background: white; } .actor { stroke: #ccccff; fill: #ececff; } text.actor { fill: black; stroke: none; font-family: Helvetica; } .actor-line { stroke: grey; } .messageLine0 { stroke-width: 1.5; stroke-dasharray: '2 2'; marker-end: 'url(#arrowhead)'; stroke: black; } .messageLine1 { stroke-width: 1.5; stroke-dasharray: '2 2'; stroke: black; } #arrowhead { fill: black; } .messageText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; font-size: 14px; } .labelBox { stroke: #ccccff; fill: #ececff; } .labelText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; } .loopText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; } .loopLine { stroke-width: 2; stroke-dasharray: '2 2'; marker-end: 'url(#arrowhead)'; stroke: #ccccff; } .note { stroke: #decc93; fill: #fff5ad; } .noteText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; font-size: 14px; } ``` ## Configuration Is it possible to adjust the margins for rendering the sequence diagram. This is done by defining `mermaid.sequenceConfig` or by the CLI to use a json file with the configuration. How to use the CLI is described in the [mermaidCLI](mermaidCLI) page. `mermaid.sequenceConfig` can be set to a JSON string with config parameters or the corresponding object. ```javascript mermaid.sequenceConfig = { diagramMarginX: 50, diagramMarginY: 10, boxTextMargin: 5, noteMargin: 10, messageMargin: 35, mirrorActors: true, }; ``` ### Possible configuration parameters: | Parameter | Description | Default value | | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------ | | mirrorActors | Turns on/off the rendering of actors below the diagram as well as above it | false | | bottomMarginAdj | Adjusts how far down the graph ended. Wide borders styles with css could generate unwanted clipping which is why this config param exists. | 1 | | actorFontSize | Sets the font size for the actor's description | 14 | | actorFontFamily | Sets the font family for the actor's description | "Open Sans", sans-serif | | actorFontWeight | Sets the font weight for the actor's description | "Open Sans", sans-serif | | noteFontSize | Sets the font size for actor-attached notes | 14 | | noteFontFamily | Sets the font family for actor-attached notes | "trebuchet ms", verdana, arial | | noteFontWeight | Sets the font weight for actor-attached notes | "trebuchet ms", verdana, arial | | noteAlign | Sets the text alignment for text in actor-attached notes | center | | messageFontSize | Sets the font size for actor<->actor messages | 16 | | messageFontFamily | Sets the font family for actor<->actor messages | "trebuchet ms", verdana, arial | | messageFontWeight | Sets the font weight for actor<->actor messages | "trebuchet ms", verdana, arial | mermaid-js-mermaid-9bb0ed2/docs/stateDiagram.md000066400000000000000000000234771433273745700215620ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # State diagrams > "A state diagram is a type of diagram used in computer science and related fields to describe the behavior of systems. State diagrams require that the system described is composed of a finite number of states; sometimes, this is indeed the case, while at other times this is a reasonable abstraction." Wikipedia Mermaid can render state diagrams. The syntax tries to be compliant with the syntax used in plantUml as this will make it easier for users to share diagrams between mermaid and plantUml. ```mermaid-example stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] ``` ```mermaid stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] ``` Older renderer: ```mermaid-example stateDiagram [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] ``` ```mermaid stateDiagram [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] ``` In state diagrams systems are described in terms of its states and how the systems state can change to another state via a transitions. The example diagram above shows three states **Still**, **Moving** and **Crash**. You start in the state of Still. From Still you can change the state to Moving. In Moving you can change the state either back to Still or to Crash. There is no transition from Still to Crash. ## States A state can be declared in multiple ways. The simplest way is to define a state id as a description. ```mermaid-example stateDiagram-v2 s1 ``` ```mermaid stateDiagram-v2 s1 ``` Another way is by using the state keyword with a description as per below: ```mermaid-example stateDiagram-v2 state "This is a state description" as s2 ``` ```mermaid stateDiagram-v2 state "This is a state description" as s2 ``` Another way to define a state with a description is to define the state id followed by a colon and the description: ```mermaid-example stateDiagram-v2 s2 : This is a state description ``` ```mermaid stateDiagram-v2 s2 : This is a state description ``` ## Transitions Transitions are path/edges when one state passes into another. This is represented using text arrow, "-->". When you define a transition between two states and the states are not already defined the undefined states are defined with the id from the transition. You can later add descriptions to states defined this way. ```mermaid-example stateDiagram-v2 s1 --> s2 ``` ```mermaid stateDiagram-v2 s1 --> s2 ``` It is possible to add text to a transition. To describe what it represents. ```mermaid-example stateDiagram-v2 s1 --> s2: A transition ``` ```mermaid stateDiagram-v2 s1 --> s2: A transition ``` ## Start and End There are two special states indicating the start and stop of the diagram. These are written with the \[\*] syntax and the direction of the transition to it defines it either as a start or a stop state. ```mermaid-example stateDiagram-v2 [*] --> s1 s1 --> [*] ``` ```mermaid stateDiagram-v2 [*] --> s1 s1 --> [*] ``` ## Composite states In a real world use of state diagrams you often end up with diagrams that are multi-dimensional as one state can have several internal states. These are called composite states in this terminology. In order to define a composite state you need to use the state keyword followed by an id and the body of the composite state between {}. See the example below: ```mermaid-example stateDiagram-v2 [*] --> First state First { [*] --> second second --> [*] } ``` ```mermaid stateDiagram-v2 [*] --> First state First { [*] --> second second --> [*] } ``` You can do this in several layers: ```mermaid-example stateDiagram-v2 [*] --> First state First { [*] --> Second state Second { [*] --> second second --> Third state Third { [*] --> third third --> [*] } } } ``` ```mermaid stateDiagram-v2 [*] --> First state First { [*] --> Second state Second { [*] --> second second --> Third state Third { [*] --> third third --> [*] } } } ``` You can also define transitions also between composite states: ```mermaid-example stateDiagram-v2 [*] --> First First --> Second First --> Third state First { [*] --> fir fir --> [*] } state Second { [*] --> sec sec --> [*] } state Third { [*] --> thi thi --> [*] } ``` ```mermaid stateDiagram-v2 [*] --> First First --> Second First --> Third state First { [*] --> fir fir --> [*] } state Second { [*] --> sec sec --> [*] } state Third { [*] --> thi thi --> [*] } ``` _You can not define transitions between internal states belonging to different composite states_ ## Choice Sometimes you need to model a choice between two or more paths, you can do so using <\>. ```mermaid-example stateDiagram-v2 state if_state <> [*] --> IsPositive IsPositive --> if_state if_state --> False: if n < 0 if_state --> True : if n >= 0 ``` ```mermaid stateDiagram-v2 state if_state <> [*] --> IsPositive IsPositive --> if_state if_state --> False: if n < 0 if_state --> True : if n >= 0 ``` ## Forks It is possible to specify a fork in the diagram using <\> <\>. ```mermaid-example stateDiagram-v2 state fork_state <> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] ``` ```mermaid stateDiagram-v2 state fork_state <> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] ``` ## Notes Sometimes nothing says it better then a Post-it note. That is also the case in state diagrams. Here you can choose to put the note to the _right of_ or to the _left of_ a node. ```mermaid-example stateDiagram-v2 State1: The state with a note note right of State1 Important information! You can write notes. end note State1 --> State2 note left of State2 : This is the note to the left. ``` ```mermaid stateDiagram-v2 State1: The state with a note note right of State1 Important information! You can write notes. end note State1 --> State2 note left of State2 : This is the note to the left. ``` ## Concurrency As in plantUml you can specify concurrency using the -- symbol. ```mermaid-example stateDiagram-v2 [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvScrollLockPressed ScrollLockOn --> ScrollLockOff : EvScrollLockPressed } ``` ```mermaid stateDiagram-v2 [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvScrollLockPressed ScrollLockOn --> ScrollLockOff : EvScrollLockPressed } ``` ## Setting the direction of the diagram With state diagrams you can use the direction statement to set the direction which the diagram will render like in this example. ```mermaid-example stateDiagram direction LR [*] --> A A --> B B --> C state B { direction LR a --> b } B --> D ``` ```mermaid stateDiagram direction LR [*] --> A A --> B B --> C state B { direction LR a --> b } B --> D ``` ## Comments Comments can be entered within a state diagram chart, which will be ignored by the parser. Comments need to be on their own line, and must be prefaced with `%%` (double percent signs). Any text after the start of the comment to the next newline will be treated as a comment, including any diagram syntax ```mermaid-example stateDiagram-v2 [*] --> Still Still --> [*] %% this is a comment Still --> Moving Moving --> Still %% another comment Moving --> Crash Crash --> [*] ``` ```mermaid stateDiagram-v2 [*] --> Still Still --> [*] %% this is a comment Still --> Moving Moving --> Still %% another comment Moving --> Crash Crash --> [*] ``` ## Styling Styling of the a state diagram is done by defining a number of css classes. During rendering these classes are extracted from the file located at src/themes/state.scss ## Spaces in state names Spaces can be added to a state by defining it at the top and referencing the acronym later. ```mermaid-example stateDiagram-v2 Yswsii: Your state with spaces in it [*] --> Yswsii ``` ```mermaid stateDiagram-v2 Yswsii: Your state with spaces in it [*] --> Yswsii ``` mermaid-js-mermaid-9bb0ed2/docs/theme.css000066400000000000000000000354511433273745700204420ustar00rootroot00000000000000@import url('https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600'); * { -webkit-font-smoothing: antialiased; -webkit-overflow-scrolling: touch; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: none; -webkit-touch-callout: none; box-sizing: border-box; } body:not(.ready) { overflow: hidden; } body:not(.ready) .app-nav, body:not(.ready) > nav, body:not(.ready) [data-cloak] { display: none; } div#app { font-size: 30px; font-weight: lighter; margin: 40vh auto; text-align: center; } div#app:empty:before { content: 'Loading...'; } .emoji { height: 1.2rem; vertical-align: middle; } .progress { background-color: var(--theme-color, #42b983); height: 2px; left: 0; position: fixed; right: 0; top: 0; transition: width 0.2s, opacity 0.4s; width: 0; z-index: 999999; } .search .search-keyword, .search a:hover { color: var(--theme-color, #42b983); } .search .search-keyword { font-style: normal; font-weight: 700; } body, html { height: 100%; } body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; color: #34495e; font-family: Source Sans Pro, Helvetica Neue, Arial, sans-serif; font-size: 15px; letter-spacing: 0; margin: 0; overflow-x: hidden; } img { max-width: 100%; } a[disabled] { cursor: not-allowed; opacity: 0.6; } kbd { border: 1px solid #ccc; border-radius: 3px; display: inline-block; font-size: 12px !important; line-height: 12px; margin-bottom: 3px; padding: 3px 5px; vertical-align: middle; } li input[type='checkbox'] { margin: 0 0.2em 0.25em 0; vertical-align: middle; } .app-nav { margin: 25px 60px 0 0; position: absolute; right: 0; text-align: right; z-index: 10; } .app-nav.no-badge { margin-right: 25px; } .app-nav p { margin: 0; } .app-nav > a { margin: 0 1rem; padding: 5px 0; } .app-nav li, .app-nav ul { display: inline-block; list-style: none; margin: 0; } .app-nav a { color: inherit; font-size: 16px; text-decoration: none; transition: color 0.3s; } .app-nav a.active, .app-nav a:hover { color: var(--theme-color, #42b983); } .app-nav a.active { border-bottom: 2px solid var(--theme-color, #42b983); } .app-nav li { display: inline-block; margin: 0 1rem; padding: 5px 0; position: relative; cursor: pointer; } .app-nav li ul { background-color: #fff; border: 1px solid; border-color: #ddd #ddd #ccc; border-radius: 4px; box-sizing: border-box; display: none; max-height: calc(100vh - 61px); overflow-y: auto; padding: 10px 0; position: absolute; right: -15px; text-align: left; top: 100%; white-space: nowrap; } .app-nav li ul li { display: block; font-size: 14px; line-height: 1rem; margin: 8px 14px; white-space: nowrap; } .app-nav li ul a { display: block; font-size: inherit; margin: 0; padding: 0; } .app-nav li ul a.active { border-bottom: 0; } .app-nav li:hover ul { display: block; } .github-corner { border-bottom: 0; position: fixed; right: 0; text-decoration: none; top: 0; z-index: 1; } .github-corner:hover .octo-arm { -webkit-animation: octocat-wave 0.56s ease-in-out; animation: octocat-wave 0.56s ease-in-out; } .github-corner svg { color: #fff; fill: var(--theme-color, #42b983); height: 80px; width: 80px; } main { display: block; position: relative; width: 100vw; height: 100%; z-index: 0; } main.hidden { display: none; } .anchor { display: inline-block; text-decoration: none; transition: all 0.3s; } .anchor span { color: #34495e; } .anchor:hover { text-decoration: underline; } .sidebar { border-right: 1px solid rgba(0, 0, 0, 0.07); overflow-y: auto; padding: 40px 0 0; position: absolute; top: 0; bottom: 0; left: 0; transition: transform 0.25s ease-out; width: 300px; z-index: 20; } .sidebar > h1 { margin: 0 auto 1rem; font-size: 1.5rem; font-weight: 300; text-align: center; } .sidebar > h1 a { color: inherit; text-decoration: none; } .sidebar > h1 .app-nav { display: block; position: static; } .sidebar .sidebar-nav { line-height: 2em; padding-bottom: 40px; } .sidebar li.collapse .app-sub-sidebar { display: none; } .sidebar ul { margin: 0 0 0 15px; padding: 0; } .sidebar li > p { font-weight: 700; margin: 0; } .sidebar ul, .sidebar ul li { list-style: none; } .sidebar ul li a { border-bottom: none; display: block; } .sidebar ul li ul { padding-left: 20px; } .sidebar::-webkit-scrollbar { width: 4px; } .sidebar::-webkit-scrollbar-thumb { background: transparent; border-radius: 4px; } .sidebar:hover::-webkit-scrollbar-thumb { background: hsla(0, 0%, 53.3%, 0.4); } .sidebar:hover::-webkit-scrollbar-track { background: hsla(0, 0%, 53.3%, 0.1); } .sidebar-toggle { background-color: transparent; background-color: hsla(0, 0%, 100%, 0.8); border: 0; outline: none; padding: 10px; position: absolute; bottom: 0; left: 0; text-align: center; transition: opacity 0.3s; width: 284px; z-index: 30; cursor: pointer; } .sidebar-toggle:hover .sidebar-toggle-button { opacity: 0.4; } .sidebar-toggle span { background-color: var(--theme-color, #42b983); display: block; margin-bottom: 4px; width: 16px; height: 2px; } body.sticky .sidebar, body.sticky .sidebar-toggle { position: fixed; } .content { padding-top: 60px; position: absolute; top: 0; right: 0; bottom: 0; left: 300px; transition: left 0.25s ease; } .markdown-section { margin: 0 auto; max-width: 80%; padding: 30px 15px 40px; position: relative; } .markdown-section > * { box-sizing: border-box; font-size: inherit; } .markdown-section > :first-child { margin-top: 0 !important; } .markdown-section hr { border: none; border-bottom: 1px solid #eee; margin: 2em 0; } .markdown-section iframe { border: 1px solid #eee; width: 1px; min-width: 100%; } .markdown-section table { border-collapse: collapse; border-spacing: 0; display: block; margin-bottom: 1rem; overflow: auto; width: 100%; } .markdown-section th { font-weight: 700; } .markdown-section td, .markdown-section th { border: 1px solid #ddd; padding: 6px 13px; } .markdown-section tr { border-top: 1px solid #ccc; } .markdown-section p.tip, .markdown-section tr:nth-child(2n) { background-color: #f8f8f8; } .markdown-section p.tip { border-bottom-right-radius: 2px; border-left: 4px solid #f66; border-top-right-radius: 2px; margin: 2em 0; padding: 12px 24px 12px 30px; position: relative; } .markdown-section p.tip:before { background-color: #f66; border-radius: 100%; color: #fff; content: '!'; font-family: Dosis, Source Sans Pro, Helvetica Neue, Arial, sans-serif; font-size: 14px; font-weight: 700; left: -12px; line-height: 20px; position: absolute; height: 20px; width: 20px; text-align: center; top: 14px; } .markdown-section p.tip code { background-color: #efefef; } .markdown-section p.tip em { color: #34495e; } .markdown-section p.warn { background: rgba(66, 185, 131, 0.1); border-radius: 2px; padding: 1rem; } .markdown-section ul.task-list > li { list-style-type: none; } body.close .sidebar { transform: translateX(-300px); } body.close .sidebar-toggle { width: auto; } body.close .content { left: 0; } @media print { .app-nav, .github-corner, .sidebar, .sidebar-toggle { display: none; } } @media screen and (max-width: 768px) { .github-corner, .sidebar, .sidebar-toggle { position: fixed; } .app-nav { margin-top: 16px; } .app-nav li ul { top: 30px; } main { height: auto; overflow-x: hidden; } .sidebar { left: -300px; transition: transform 0.25s ease-out; } .content { left: 0; max-width: 100vw; position: static; padding-top: 20px; transition: transform 0.25s ease; } .app-nav, .github-corner { transition: transform 0.25s ease-out; } .sidebar-toggle { background-color: transparent; width: auto; padding: 30px 30px 10px 10px; } body.close .sidebar { transform: translateX(300px); } body.close .sidebar-toggle { background-color: hsla(0, 0%, 100%, 0.8); transition: background-color 1s; width: 284px; padding: 10px; } body.close .content { transform: translateX(300px); } body.close .app-nav, body.close .github-corner { display: none; } .github-corner:hover .octo-arm { -webkit-animation: none; animation: none; } .github-corner .octo-arm { -webkit-animation: octocat-wave 0.56s ease-in-out; animation: octocat-wave 0.56s ease-in-out; } } @-webkit-keyframes octocat-wave { 0%, to { transform: rotate(0); } 20%, 60% { transform: rotate(-25deg); } 40%, 80% { transform: rotate(10deg); } } @keyframes octocat-wave { 0%, to { transform: rotate(0); } 20%, 60% { transform: rotate(-25deg); } 40%, 80% { transform: rotate(10deg); } } section.cover { align-items: center; background-position: 50%; background-repeat: no-repeat; background-size: cover; height: 100vh; width: 100vw; display: none; } section.cover.show { display: flex; } section.cover.has-mask .mask { background-color: #fff; opacity: 0.8; position: absolute; top: 0; height: 100%; width: 100%; } section.cover .cover-main { flex: 1; margin: -20px 16px 0; text-align: center; } section.cover a { color: inherit; } section.cover a, section.cover a:hover { text-decoration: none; } section.cover p { line-height: 1.5rem; margin: 1em 0; } section.cover h1 { color: inherit; font-size: 2.5rem; font-weight: 300; margin: 0.625rem 0 2.5rem; position: relative; text-align: center; } section.cover h1 a { display: block; } section.cover h1 small { bottom: -0.4375rem; font-size: 1rem; position: absolute; } section.cover blockquote { font-size: 1.5rem; text-align: center; } section.cover ul { line-height: 1.8; list-style-type: none; margin: 1em auto; max-width: 500px; padding: 0; } section.cover .cover-main > p:last-child a { border-radius: 2rem; border: 1px solid var(--theme-color, #42b983); box-sizing: border-box; color: var(--theme-color, #42b983); display: inline-block; font-size: 1.05rem; letter-spacing: 0.1rem; margin: 0.5rem 1rem; padding: 0.75em 2rem; text-decoration: none; transition: all 0.15s ease; } section.cover .cover-main > p:last-child a:last-child { background-color: var(--theme-color, #42b983); color: #fff; } section.cover .cover-main > p:last-child a:last-child:hover { color: inherit; opacity: 0.8; } section.cover .cover-main > p:last-child a:hover { color: inherit; } section.cover blockquote > p > a { border-bottom: 2px solid var(--theme-color, #42b983); transition: color 0.3s; } section.cover blockquote > p > a:hover { color: var(--theme-color, #42b983); } .sidebar, body { background-color: #fff; } .sidebar { color: #364149; } .sidebar li { margin: 6px 0; } .sidebar ul li a { color: #505d6b; font-size: 14px; font-weight: 400; overflow: hidden; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; } .sidebar ul li a:hover { text-decoration: underline; } .sidebar ul li ul { padding: 0; } .sidebar ul li.active > a { border-right: 2px solid; color: var(--theme-color, #42b983); font-weight: 600; } .app-sub-sidebar li:before { content: '-'; padding-right: 4px; float: left; } .markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section strong { color: #2c3e50; font-weight: 600; } .markdown-section a { color: var(--theme-color, #42b983); font-weight: 600; } .markdown-section h1 { font-size: 2rem; margin: 0 0 1rem; } .markdown-section h2 { font-size: 1.75rem; margin: 45px 0 0.8rem; } .markdown-section h3 { font-size: 1.5rem; margin: 40px 0 0.6rem; } .markdown-section h4 { font-size: 1.25rem; } .markdown-section h5 { font-size: 1rem; } .markdown-section h6 { color: #777; font-size: 1rem; } .markdown-section figure, .markdown-section p { margin: 1.2em 0; } .markdown-section ol, .markdown-section p, .markdown-section ul { line-height: 1.6rem; word-spacing: 0.05rem; } .markdown-section ol, .markdown-section ul { padding-left: 1.5rem; } .markdown-section blockquote { border-left: 4px solid var(--theme-color, #42b983); color: #858585; margin: 2em 0; padding-left: 20px; } .markdown-section blockquote p { font-weight: 600; margin-left: 0; } .markdown-section iframe { margin: 1em 0; } .markdown-section em { color: #7f8c8d; } .markdown-section code { border-radius: 2px; color: #e96900; font-size: 0.8rem; margin: 0 2px; padding: 3px 5px; white-space: pre-wrap; } .markdown-section code, .markdown-section pre { background-color: #f8f8f8; font-family: Roboto Mono, Monaco, courier, monospace; } .markdown-section pre { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; line-height: 1.5rem; margin: 1.2em 0; overflow: auto; padding: 0 1.4rem; position: relative; word-wrap: normal; } .token.cdata, .token.comment, .token.doctype, .token.prolog { color: #8e908c; } .token.namespace { opacity: 0.7; } .token.boolean, .token.number { color: #c76b29; } .token.punctuation { color: #525252; } .token.property { color: #c08b30; } .token.tag { color: #2973b7; } .token.string { color: var(--theme-color, #42b983); } .token.selector { color: #6679cc; } .token.attr-name { color: #2973b7; } .language-css .token.string, .style .token.string, .token.entity, .token.url { color: #22a2c9; } .token.attr-value, .token.control, .token.directive, .token.unit { color: var(--theme-color, #42b983); } .token.function, .token.keyword { color: #e96900; } .token.atrule, .token.regex, .token.statement { color: #22a2c9; } .token.placeholder, .token.variable { color: #3d8fd1; } .token.deleted { text-decoration: line-through; } .token.inserted { border-bottom: 1px dotted #202746; text-decoration: none; } .token.italic { font-style: italic; } .token.bold, .token.important { font-weight: 700; } .token.important { color: #c94922; } .token.entity { cursor: help; } .markdown-section pre > code { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; background-color: #f8f8f8; border-radius: 2px; color: #525252; display: block; font-family: Roboto Mono, Monaco, courier, monospace; font-size: 0.8rem; line-height: inherit; margin: 0 2px; max-width: inherit; overflow: inherit; padding: 2.2em 5px; white-space: inherit; } .markdown-section code:after, .markdown-section code:before { letter-spacing: 0.05rem; } code .token { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; min-height: 1.5rem; position: relative; left: auto; } pre:after { color: #ccc; content: attr(data-lang); font-size: 0.6rem; font-weight: 600; height: 15px; line-height: 15px; padding: 5px 10px 0; position: absolute; right: 0; text-align: right; top: 0; } mermaid-js-mermaid-9bb0ed2/docs/theme_themed.css000066400000000000000000001012711433273745700217620ustar00rootroot00000000000000@import url('https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600'); * { -webkit-font-smoothing: antialiased; -webkit-overflow-scrolling: touch; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: none; -webkit-touch-callout: none; box-sizing: border-box; } @media (prefers-color-scheme: dark2) { body:not(.ready) { overflow: hidden; } body:not(.ready) .app-nav, body:not(.ready) > nav, body:not(.ready) [data-cloak] { display: none; } div#app { font-size: 30px; font-weight: lighter; margin: 40vh auto; text-align: center; } div#app:empty:before { content: 'Loading...'; } .emoji { height: 1.2rem; vertical-align: middle; } .progress { background-color: var(--theme-color, #ea6f5a); height: 2px; left: 0; position: fixed; right: 0; top: 0; transition: width 0.2s, opacity 0.4s; width: 0; z-index: 999999; } .search .search-keyword, .search a:hover { color: var(--theme-color, #ea6f5a); } .search .search-keyword { font-style: normal; font-weight: 700; } body, html { height: 100%; } body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; color: #c8c8c8; font-family: Source Sans Pro, Helvetica Neue, Arial, sans-serif; font-size: 15px; letter-spacing: 0; margin: 0; overflow-x: hidden; } img { max-width: 100%; } a[disabled] { cursor: not-allowed; opacity: 0.6; } kbd { border: 1px solid #ccc; border-radius: 3px; display: inline-block; font-size: 12px !important; line-height: 12px; margin-bottom: 3px; padding: 3px 5px; vertical-align: middle; } li input[type='checkbox'] { margin: 0 0.2em 0.25em 0; vertical-align: middle; } .app-nav { margin: 25px 60px 0 0; position: absolute; right: 0; text-align: right; z-index: 10; } .app-nav.no-badge { margin-right: 25px; } .app-nav p { margin: 0; } .app-nav > a { margin: 0 1rem; padding: 5px 0; } .app-nav li, .app-nav ul { display: inline-block; list-style: none; margin: 0; } .app-nav a { color: inherit; font-size: 16px; text-decoration: none; transition: color 0.3s; } .app-nav a.active, .app-nav a:hover { color: var(--theme-color, #ea6f5a); } .app-nav a.active { border-bottom: 2px solid var(--theme-color, #ea6f5a); } .app-nav li { display: inline-block; margin: 0 1rem; padding: 5px 0; position: relative; cursor: pointer; } .app-nav li ul { background-color: #fff; border: 1px solid; border-color: #ddd #ddd #ccc; border-radius: 4px; box-sizing: border-box; display: none; max-height: calc(100vh - 61px); overflow-y: auto; padding: 10px 0; position: absolute; right: -15px; text-align: left; top: 100%; white-space: nowrap; } .app-nav li ul li { display: block; font-size: 14px; line-height: 1rem; margin: 8px 14px; white-space: nowrap; } .app-nav li ul a { display: block; font-size: inherit; margin: 0; padding: 0; } .app-nav li ul a.active { border-bottom: 0; } .app-nav li:hover ul { display: block; } .github-corner { border-bottom: 0; position: fixed; right: 0; text-decoration: none; top: 0; z-index: 1; } .github-corner:hover .octo-arm { -webkit-animation: octocat-wave 0.56s ease-in-out; animation: octocat-wave 0.56s ease-in-out; } .github-corner svg { color: #3f3f3f; fill: var(--theme-color, #ea6f5a); height: 80px; width: 80px; } main { display: block; position: relative; width: 100vw; height: 100%; z-index: 0; } main.hidden { display: none; } .anchor { display: inline-block; text-decoration: none; transition: all 0.3s; } .anchor span { color: #c8c8c8; } .anchor:hover { text-decoration: underline; } .sidebar { border-right: 1px solid rgba(0, 0, 0, 0.07); overflow-y: auto; padding: 40px 0 0; position: absolute; top: 0; bottom: 0; left: 0; transition: transform 0.25s ease-out; width: 300px; z-index: 20; } .sidebar > h1 { margin: 0 auto 1rem; font-size: 1.5rem; font-weight: 300; text-align: center; } .sidebar > h1 a { color: inherit; text-decoration: none; } .sidebar > h1 .app-nav { display: block; position: static; } .sidebar .sidebar-nav { line-height: 2em; padding-bottom: 40px; } .sidebar li.collapse .app-sub-sidebar { display: none; } .sidebar ul { margin: 0 0 0 15px; padding: 0; } .sidebar li > p { font-weight: 700; margin: 0; } .sidebar ul, .sidebar ul li { list-style: none; } .sidebar ul li a { border-bottom: none; display: block; } .sidebar ul li ul { padding-left: 20px; } .sidebar::-webkit-scrollbar { width: 4px; } .sidebar::-webkit-scrollbar-thumb { background: transparent; border-radius: 4px; } .sidebar:hover::-webkit-scrollbar-thumb { background: hsla(0, 0%, 53.3%, 0.4); } .sidebar:hover::-webkit-scrollbar-track { background: hsla(0, 0%, 53.3%, 0.1); } .sidebar-toggle { background-color: transparent; background-color: rgba(63, 63, 63, 0.8); border: 0; outline: none; padding: 10px; position: absolute; bottom: 0; left: 0; text-align: center; transition: opacity 0.3s; width: 284px; z-index: 30; cursor: pointer; } .sidebar-toggle:hover .sidebar-toggle-button { opacity: 0.4; } .sidebar-toggle span { background-color: var(--theme-color, #ea6f5a); display: block; margin-bottom: 4px; width: 16px; height: 2px; } body.sticky .sidebar, body.sticky .sidebar-toggle { position: fixed; } .content { padding-top: 60px; position: absolute; top: 0; right: 0; bottom: 0; left: 300px; transition: left 0.25s ease; } .markdown-section { margin: 0 auto; max-width: 80%; padding: 30px 15px 40px; position: relative; } .markdown-section > * { box-sizing: border-box; font-size: inherit; } .markdown-section > :first-child { margin-top: 0 !important; } .markdown-section hr { border: none; border-bottom: 1px solid #eee; margin: 2em 0; } .markdown-section iframe { border: 1px solid #eee; width: 1px; min-width: 100%; } .markdown-section table { border-collapse: collapse; border-spacing: 0; display: block; margin-bottom: 1rem; overflow: auto; width: 100%; } .markdown-section th { font-weight: 700; } .markdown-section td, .markdown-section th { border: 1px solid #ddd; padding: 6px 13px; } .markdown-section tr { border-top: 1px solid #ccc; } .markdown-section p.tip, .markdown-section tr:nth-child(2n) { background-color: #f8f8f8; } .markdown-section p.tip { border-bottom-right-radius: 2px; border-left: 4px solid #f66; border-top-right-radius: 2px; margin: 2em 0; padding: 12px 24px 12px 30px; position: relative; } .markdown-section p.tip:before { background-color: #f66; border-radius: 100%; color: #3f3f3f; content: '!'; font-family: Dosis, Source Sans Pro, Helvetica Neue, Arial, sans-serif; font-size: 14px; font-weight: 700; left: -12px; line-height: 20px; position: absolute; height: 20px; width: 20px; text-align: center; top: 14px; } .markdown-section p.tip code { background-color: #efefef; } .markdown-section p.tip em { color: #c8c8c8; } .markdown-section p.warn { background: rgba(234, 111, 90, 0.1); border-radius: 2px; padding: 1rem; } .markdown-section ul.task-list > li { list-style-type: none; } body.close .sidebar { transform: translateX(-300px); } body.close .sidebar-toggle { width: auto; } body.close .content { left: 0; } @media print { .app-nav, .github-corner, .sidebar, .sidebar-toggle { display: none; } } @media screen and (max-width: 768px) { .github-corner, .sidebar, .sidebar-toggle { position: fixed; } .app-nav { margin-top: 16px; } .app-nav li ul { top: 30px; } main { height: auto; overflow-x: hidden; } .sidebar { left: -300px; transition: transform 0.25s ease-out; } .content { left: 0; max-width: 100vw; position: static; padding-top: 20px; transition: transform 0.25s ease; } .app-nav, .github-corner { transition: transform 0.25s ease-out; } .sidebar-toggle { background-color: transparent; width: auto; padding: 30px 30px 10px 10px; } body.close .sidebar { transform: translateX(300px); } body.close .sidebar-toggle { background-color: rgba(63, 63, 63, 0.8); transition: background-color 1s; width: 284px; padding: 10px; } body.close .content { transform: translateX(300px); } body.close .app-nav, body.close .github-corner { display: none; } .github-corner:hover .octo-arm { -webkit-animation: none; animation: none; } .github-corner .octo-arm { -webkit-animation: octocat-wave 0.56s ease-in-out; animation: octocat-wave 0.56s ease-in-out; } } @-webkit-keyframes octocat-wave { 0%, to { transform: rotate(0); } 20%, 60% { transform: rotate(-25deg); } 40%, 80% { transform: rotate(10deg); } } @keyframes octocat-wave { 0%, to { transform: rotate(0); } 20%, 60% { transform: rotate(-25deg); } 40%, 80% { transform: rotate(10deg); } } section.cover { align-items: center; background-position: 50%; background-repeat: no-repeat; background-size: cover; height: 100vh; width: 100vw; display: none; } section.cover.show { display: flex; } section.cover.has-mask .mask { background-color: #3f3f3f; opacity: 0.8; position: absolute; top: 0; height: 100%; width: 100%; } section.cover .cover-main { flex: 1; margin: -20px 16px 0; text-align: center; } section.cover a { color: inherit; } section.cover a, section.cover a:hover { text-decoration: none; } section.cover p { line-height: 1.5rem; margin: 1em 0; } section.cover h1 { color: inherit; font-size: 2.5rem; font-weight: 300; margin: 0.625rem 0 2.5rem; position: relative; text-align: center; } section.cover h1 a { display: block; } section.cover h1 small { bottom: -0.4375rem; font-size: 1rem; position: absolute; } section.cover blockquote { font-size: 1.5rem; text-align: center; } section.cover ul { line-height: 1.8; list-style-type: none; margin: 1em auto; max-width: 500px; padding: 0; } section.cover .cover-main > p:last-child a { border-radius: 2rem; border: 1px solid var(--theme-color, #ea6f5a); box-sizing: border-box; color: var(--theme-color, #ea6f5a); display: inline-block; font-size: 1.05rem; letter-spacing: 0.1rem; margin: 0.5rem 1rem; padding: 0.75em 2rem; text-decoration: none; transition: all 0.15s ease; } section.cover .cover-main > p:last-child a:last-child { background-color: var(--theme-color, #ea6f5a); color: #fff; } section.cover .cover-main > p:last-child a:last-child:hover { color: inherit; opacity: 0.8; } section.cover .cover-main > p:last-child a:hover { color: inherit; } section.cover blockquote > p > a { border-bottom: 2px solid var(--theme-color, #ea6f5a); transition: color 0.3s; } section.cover blockquote > p > a:hover { color: var(--theme-color, #ea6f5a); } .sidebar, body { background-color: #3f3f3f; } .sidebar { color: #c8c8c8; } .sidebar li { margin: 6px 15px 6px 0; } .sidebar ul li a { color: #c8c8c8; font-size: 14px; overflow: hidden; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; } .sidebar ul li a:hover { text-decoration: underline; } .sidebar ul li ul { padding: 0; } .sidebar ul li.active > a { color: var(--theme-color, #ea6f5a); font-weight: 600; } .markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section strong { color: #657b83; font-weight: 600; } .markdown-section a { color: var(--theme-color, #ea6f5a); font-weight: 600; } .markdown-section h1 { font-size: 2rem; margin: 0 0 1rem; } .markdown-section h2 { font-size: 1.75rem; margin: 45px 0 0.8rem; } .markdown-section h3 { font-size: 1.5rem; margin: 40px 0 0.6rem; } .markdown-section h4 { font-size: 1.25rem; } .markdown-section h5 { font-size: 1rem; } .markdown-section h6 { color: #777; font-size: 1rem; } .markdown-section figure, .markdown-section ol, .markdown-section p, .markdown-section ul { margin: 1.2em 0; } .markdown-section ol, .markdown-section p, .markdown-section ul { line-height: 1.6rem; word-spacing: 0.05rem; } .markdown-section ol, .markdown-section ul { padding-left: 1.5rem; } .markdown-section blockquote { border-left: 4px solid var(--theme-color, #ea6f5a); color: #858585; margin: 2em 0; padding-left: 20px; } .markdown-section blockquote p { font-weight: 600; margin-left: 0; } .markdown-section iframe { margin: 1em 0; } .markdown-section em { color: #7f8c8d; } .markdown-section code { border-radius: 2px; color: #657b83; font-size: 0.8rem; margin: 0 2px; padding: 3px 5px; white-space: pre-wrap; } .markdown-section code, .markdown-section pre { background-color: #282828; font-family: Roboto Mono, Monaco, courier, monospace; } .markdown-section pre { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; line-height: 1.5rem; margin: 1.2em 0; overflow: auto; padding: 0 1.4rem; position: relative; word-wrap: normal; } .token.cdata, .token.comment, .token.doctype, .token.prolog { color: #8e908c; } .token.namespace { opacity: 0.7; } .token.boolean, .token.number { color: #c76b29; } .token.punctuation { color: #525252; } .token.property { color: #c08b30; } .token.tag { color: #2973b7; } .token.string { color: var(--theme-color, #ea6f5a); } .token.selector { color: #6679cc; } .token.attr-name { color: #2973b7; } .language-css .token.string, .style .token.string, .token.entity, .token.url { color: #22a2c9; } .token.attr-value, .token.control, .token.directive, .token.unit { color: var(--theme-color, #ea6f5a); } .token.keyword { color: #e96900; } .token.atrule, .token.regex, .token.statement { color: #22a2c9; } .token.placeholder, .token.variable { color: #3d8fd1; } .token.deleted { text-decoration: line-through; } .token.inserted { border-bottom: 1px dotted #202746; text-decoration: none; } .token.italic { font-style: italic; } .token.bold, .token.important { font-weight: 700; } .token.important { color: #c94922; } .token.entity { cursor: help; } .markdown-section pre > code { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; background-color: #282828; border-radius: 2px; color: #657b83; display: block; font-family: Roboto Mono, Monaco, courier, monospace; font-size: 0.8rem; line-height: inherit; margin: 0 2px; max-width: inherit; overflow: inherit; padding: 2.2em 5px; white-space: inherit; } .markdown-section code:after, .markdown-section code:before { letter-spacing: 0.05rem; } code .token { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; min-height: 1.5rem; position: relative; left: auto; } pre:after { color: #ccc; content: attr(data-lang); font-size: 0.6rem; font-weight: 600; height: 15px; line-height: 15px; padding: 5px 10px 0; position: absolute; right: 0; text-align: right; top: 0; } .markdown-section p.tip { background-color: #282828; color: #657b83; } input[type='search'] { background: #4f4f4f; border-color: #4f4f4f; color: #c8c8c8; } } @media (prefers-color-scheme: light or prefers-color-scheme: dark) { /* @media (screen) { */ body:not(.ready) { overflow: hidden; } body:not(.ready) .app-nav, body:not(.ready) > nav, body:not(.ready) [data-cloak] { display: none; } div#app { font-size: 30px; font-weight: lighter; margin: 40vh auto; text-align: center; } div#app:empty:before { content: 'Loading...'; } .emoji { height: 1.2rem; vertical-align: middle; } .progress { background-color: var(--theme-color, #42b983); height: 2px; left: 0; position: fixed; right: 0; top: 0; transition: width 0.2s, opacity 0.4s; width: 0; z-index: 999999; } .search .search-keyword, .search a:hover { color: var(--theme-color, #42b983); } .search .search-keyword { font-style: normal; font-weight: 700; } body, html { height: 100%; } body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; color: #34495e; font-family: Source Sans Pro, Helvetica Neue, Arial, sans-serif; font-size: 15px; letter-spacing: 0; margin: 0; overflow-x: hidden; } img { max-width: 100%; } a[disabled] { cursor: not-allowed; opacity: 0.6; } kbd { border: 1px solid #ccc; border-radius: 3px; display: inline-block; font-size: 12px !important; line-height: 12px; margin-bottom: 3px; padding: 3px 5px; vertical-align: middle; } li input[type='checkbox'] { margin: 0 0.2em 0.25em 0; vertical-align: middle; } .app-nav { margin: 25px 60px 0 0; position: absolute; right: 0; text-align: right; z-index: 10; } .app-nav.no-badge { margin-right: 25px; } .app-nav p { margin: 0; } .app-nav > a { margin: 0 1rem; padding: 5px 0; } .app-nav li, .app-nav ul { display: inline-block; list-style: none; margin: 0; } .app-nav a { color: inherit; font-size: 16px; text-decoration: none; transition: color 0.3s; } .app-nav a.active, .app-nav a:hover { color: var(--theme-color, #42b983); } .app-nav a.active { border-bottom: 2px solid var(--theme-color, #42b983); } .app-nav li { display: inline-block; margin: 0 1rem; padding: 5px 0; position: relative; cursor: pointer; } .app-nav li ul { background-color: #fff; border: 1px solid; border-color: #ddd #ddd #ccc; border-radius: 4px; box-sizing: border-box; display: none; max-height: calc(100vh - 61px); overflow-y: auto; padding: 10px 0; position: absolute; right: -15px; text-align: left; top: 100%; white-space: nowrap; } .app-nav li ul li { display: block; font-size: 14px; line-height: 1rem; margin: 8px 14px; white-space: nowrap; } .app-nav li ul a { display: block; font-size: inherit; margin: 0; padding: 0; } .app-nav li ul a.active { border-bottom: 0; } .app-nav li:hover ul { display: block; } .github-corner { border-bottom: 0; position: fixed; right: 0; text-decoration: none; top: 0; z-index: 1; } .github-corner:hover .octo-arm { -webkit-animation: octocat-wave 0.56s ease-in-out; animation: octocat-wave 0.56s ease-in-out; } .github-corner svg { color: #fff; fill: var(--theme-color, #42b983); height: 80px; width: 80px; } main { display: block; position: relative; width: 100vw; height: 100%; z-index: 0; } main.hidden { display: none; } .anchor { display: inline-block; text-decoration: none; transition: all 0.3s; } .anchor span { color: #34495e; } .anchor:hover { text-decoration: underline; } .sidebar { border-right: 1px solid rgba(0, 0, 0, 0.07); overflow-y: auto; padding: 40px 0 0; position: absolute; top: 0; bottom: 0; left: 0; transition: transform 0.25s ease-out; width: 300px; z-index: 20; } .sidebar > h1 { margin: 0 auto 1rem; font-size: 1.5rem; font-weight: 300; text-align: center; } .sidebar > h1 a { color: inherit; text-decoration: none; } .sidebar > h1 .app-nav { display: block; position: static; } .sidebar .sidebar-nav { line-height: 2em; padding-bottom: 40px; } .sidebar li.collapse .app-sub-sidebar { display: none; } .sidebar ul { margin: 0 0 0 15px; padding: 0; } .sidebar li > p { font-weight: 700; margin: 0; } .sidebar ul, .sidebar ul li { list-style: none; } .sidebar ul li a { border-bottom: none; display: block; } .sidebar ul li ul { padding-left: 20px; } .sidebar::-webkit-scrollbar { width: 4px; } .sidebar::-webkit-scrollbar-thumb { background: transparent; border-radius: 4px; } .sidebar:hover::-webkit-scrollbar-thumb { background: hsla(0, 0%, 53.3%, 0.4); } .sidebar:hover::-webkit-scrollbar-track { background: hsla(0, 0%, 53.3%, 0.1); } .sidebar-toggle { background-color: transparent; background-color: hsla(0, 0%, 100%, 0.8); border: 0; outline: none; padding: 10px; position: absolute; bottom: 0; left: 0; text-align: center; transition: opacity 0.3s; width: 284px; z-index: 30; cursor: pointer; } .sidebar-toggle:hover .sidebar-toggle-button { opacity: 0.4; } .sidebar-toggle span { background-color: var(--theme-color, #42b983); display: block; margin-bottom: 4px; width: 16px; height: 2px; } body.sticky .sidebar, body.sticky .sidebar-toggle { position: fixed; } .content { padding-top: 60px; position: absolute; top: 0; right: 0; bottom: 0; left: 300px; transition: left 0.25s ease; } .markdown-section { margin: 0 auto; max-width: 80%; padding: 30px 15px 40px; position: relative; } .markdown-section > * { box-sizing: border-box; font-size: inherit; } .markdown-section > :first-child { margin-top: 0 !important; } .markdown-section hr { border: none; border-bottom: 1px solid #eee; margin: 2em 0; } .markdown-section iframe { border: 1px solid #eee; width: 1px; min-width: 100%; } .markdown-section table { border-collapse: collapse; border-spacing: 0; display: block; margin-bottom: 1rem; overflow: auto; width: 100%; } .markdown-section th { font-weight: 700; } .markdown-section td, .markdown-section th { border: 1px solid #ddd; padding: 6px 13px; } .markdown-section tr { border-top: 1px solid #ccc; } .markdown-section p.tip, .markdown-section tr:nth-child(2n) { background-color: #f8f8f8; } .markdown-section p.tip { border-bottom-right-radius: 2px; border-left: 4px solid #f66; border-top-right-radius: 2px; margin: 2em 0; padding: 12px 24px 12px 30px; position: relative; } .markdown-section p.tip:before { background-color: #f66; border-radius: 100%; color: #fff; content: '!'; font-family: Dosis, Source Sans Pro, Helvetica Neue, Arial, sans-serif; font-size: 14px; font-weight: 700; left: -12px; line-height: 20px; position: absolute; height: 20px; width: 20px; text-align: center; top: 14px; } .markdown-section p.tip code { background-color: #efefef; } .markdown-section p.tip em { color: #34495e; } .markdown-section p.warn { background: rgba(66, 185, 131, 0.1); border-radius: 2px; padding: 1rem; } .markdown-section ul.task-list > li { list-style-type: none; } body.close .sidebar { transform: translateX(-300px); } body.close .sidebar-toggle { width: auto; } body.close .content { left: 0; } @media print { .app-nav, .github-corner, .sidebar, .sidebar-toggle { display: none; } } @media screen and (max-width: 768px) { .github-corner, .sidebar, .sidebar-toggle { position: fixed; } .app-nav { margin-top: 16px; } .app-nav li ul { top: 30px; } main { height: auto; overflow-x: hidden; } .sidebar { left: -300px; transition: transform 0.25s ease-out; } .content { left: 0; max-width: 100vw; position: static; padding-top: 20px; transition: transform 0.25s ease; } .app-nav, .github-corner { transition: transform 0.25s ease-out; } .sidebar-toggle { background-color: transparent; width: auto; padding: 30px 30px 10px 10px; } body.close .sidebar { transform: translateX(300px); } body.close .sidebar-toggle { background-color: hsla(0, 0%, 100%, 0.8); transition: background-color 1s; width: 284px; padding: 10px; } body.close .content { transform: translateX(300px); } body.close .app-nav, body.close .github-corner { display: none; } .github-corner:hover .octo-arm { -webkit-animation: none; animation: none; } .github-corner .octo-arm { -webkit-animation: octocat-wave 0.56s ease-in-out; animation: octocat-wave 0.56s ease-in-out; } } @-webkit-keyframes octocat-wave { 0%, to { transform: rotate(0); } 20%, 60% { transform: rotate(-25deg); } 40%, 80% { transform: rotate(10deg); } } @keyframes octocat-wave { 0%, to { transform: rotate(0); } 20%, 60% { transform: rotate(-25deg); } 40%, 80% { transform: rotate(10deg); } } section.cover { align-items: center; background-position: 50%; background-repeat: no-repeat; background-size: cover; height: 100vh; width: 100vw; display: none; } section.cover.show { display: flex; } section.cover.has-mask .mask { background-color: #fff; opacity: 0.8; position: absolute; top: 0; height: 100%; width: 100%; } section.cover .cover-main { flex: 1; margin: -20px 16px 0; text-align: center; } section.cover a { color: inherit; } section.cover a, section.cover a:hover { text-decoration: none; } section.cover p { line-height: 1.5rem; margin: 1em 0; } section.cover h1 { color: inherit; font-size: 2.5rem; font-weight: 300; margin: 0.625rem 0 2.5rem; position: relative; text-align: center; } section.cover h1 a { display: block; } section.cover h1 small { bottom: -0.4375rem; font-size: 1rem; position: absolute; } section.cover blockquote { font-size: 1.5rem; text-align: center; } section.cover ul { line-height: 1.8; list-style-type: none; margin: 1em auto; max-width: 500px; padding: 0; } section.cover .cover-main > p:last-child a { border-radius: 2rem; border: 1px solid var(--theme-color, #42b983); box-sizing: border-box; color: var(--theme-color, #42b983); display: inline-block; font-size: 1.05rem; letter-spacing: 0.1rem; margin: 0.5rem 1rem; padding: 0.75em 2rem; text-decoration: none; transition: all 0.15s ease; } section.cover .cover-main > p:last-child a:last-child { background-color: var(--theme-color, #42b983); color: #fff; } section.cover .cover-main > p:last-child a:last-child:hover { color: inherit; opacity: 0.8; } section.cover .cover-main > p:last-child a:hover { color: inherit; } section.cover blockquote > p > a { border-bottom: 2px solid var(--theme-color, #42b983); transition: color 0.3s; } section.cover blockquote > p > a:hover { color: var(--theme-color, #42b983); } .sidebar, body { background-color: #fff; } .sidebar { color: #364149; } .sidebar li { margin: 6px 0; } .sidebar ul li a { color: #505d6b; font-size: 14px; font-weight: 400; overflow: hidden; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; } .sidebar ul li a:hover { text-decoration: underline; } .sidebar ul li ul { padding: 0; } .sidebar ul li.active > a { border-right: 2px solid; color: var(--theme-color, #42b983); font-weight: 600; } .app-sub-sidebar li:before { content: '-'; padding-right: 4px; float: left; } .markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section strong { color: #2c3e50; font-weight: 600; } .markdown-section a { color: var(--theme-color, #42b983); font-weight: 600; } .markdown-section h1 { font-size: 2rem; margin: 0 0 1rem; } .markdown-section h2 { font-size: 1.75rem; margin: 45px 0 0.8rem; } .markdown-section h3 { font-size: 1.5rem; margin: 40px 0 0.6rem; } .markdown-section h4 { font-size: 1.25rem; } .markdown-section h5 { font-size: 1rem; } .markdown-section h6 { color: #777; font-size: 1rem; } .markdown-section figure, .markdown-section p { margin: 1.2em 0; } .markdown-section ol, .markdown-section p, .markdown-section ul { line-height: 1.6rem; word-spacing: 0.05rem; } .markdown-section ol, .markdown-section ul { padding-left: 1.5rem; } .markdown-section blockquote { border-left: 4px solid var(--theme-color, #42b983); color: #858585; margin: 2em 0; padding-left: 20px; } .markdown-section blockquote p { font-weight: 600; margin-left: 0; } .markdown-section iframe { margin: 1em 0; } .markdown-section em { color: #7f8c8d; } .markdown-section code { border-radius: 2px; color: #e96900; font-size: 0.8rem; margin: 0 2px; padding: 3px 5px; white-space: pre-wrap; } .markdown-section code, .markdown-section pre { background-color: #f8f8f8; font-family: Roboto Mono, Monaco, courier, monospace; } .markdown-section pre { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; line-height: 1.5rem; margin: 1.2em 0; overflow: auto; padding: 0 1.4rem; position: relative; word-wrap: normal; } .token.cdata, .token.comment, .token.doctype, .token.prolog { color: #8e908c; } .token.namespace { opacity: 0.7; } .token.boolean, .token.number { color: #c76b29; } .token.punctuation { color: #525252; } .token.property { color: #c08b30; } .token.tag { color: #2973b7; } .token.string { color: var(--theme-color, #42b983); } .token.selector { color: #6679cc; } .token.attr-name { color: #2973b7; } .language-css .token.string, .style .token.string, .token.entity, .token.url { color: #22a2c9; } .token.attr-value, .token.control, .token.directive, .token.unit { color: var(--theme-color, #42b983); } .token.function, .token.keyword { color: #e96900; } .token.atrule, .token.regex, .token.statement { color: #22a2c9; } .token.placeholder, .token.variable { color: #3d8fd1; } .token.deleted { text-decoration: line-through; } .token.inserted { border-bottom: 1px dotted #202746; text-decoration: none; } .token.italic { font-style: italic; } .token.bold, .token.important { font-weight: 700; } .token.important { color: #c94922; } .token.entity { cursor: help; } .markdown-section pre > code { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; background-color: #f8f8f8; border-radius: 2px; color: #525252; display: block; font-family: Roboto Mono, Monaco, courier, monospace; font-size: 0.8rem; line-height: inherit; margin: 0 2px; max-width: inherit; overflow: inherit; padding: 2.2em 5px; white-space: inherit; } .markdown-section code:after, .markdown-section code:before { letter-spacing: 0.05rem; } code .token { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; min-height: 1.5rem; position: relative; left: auto; } pre:after { color: #ccc; content: attr(data-lang); font-size: 0.6rem; font-weight: 600; height: 15px; line-height: 15px; padding: 5px 10px 0; position: absolute; right: 0; text-align: right; top: 0; } } mermaid-js-mermaid-9bb0ed2/docs/theming.md000066400000000000000000000713121433273745700205770ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Theme Configuration With Version 8.7.0 Mermaid comes out with a system for dynamic and integrated configuration of themes. The intent is to increase the customizability and ease of styling for mermaid diagrams. The theme can be altered by changing the root level variable `theme` variable in the configuration. To change it for the whole site you must use the `initialize` call. To do it for just for a single diagram you can use the `%%init%%` directive Themes follow and build upon the Levels of Configuration, and employ `directives` to modify and create custom configurations, as they were introduced in Version [8.6.0](./8.6.0_docs.md). ## Deployable Themes The following are a list of **Deployable themes**, sample `%%init%%` directives and `initialize` calls. 1. **base**- Designed to be modified, as the name implies it is supposed to be used as the base for making custom themes. 2. **forest**- A theme full of light greens that is easy on the eyes. 3. **dark**- A theme that would go well with other dark-colored elements. 4. **default**- The default theme for all diagrams. 5. **neutral**- The theme to be used for black and white printing. ## Site-wide Themes Site-wide themes are declared via `initialize` by site owners. Example of `Initialize` call setting `theme` to `base`: ```javascript mermaidAPI.initialize({ securityLevel: 'loose', theme: 'base', }); ``` **Notes**: Only site owners can use the `mermaidAPI.initialize` call, to set values. Site-Users will have to use `%%init%%` to modify or create the theme for their diagrams. ## Themes at the Local or Current Level When Generating a diagram using on a webpage that supports mermaid. It is also possible to override site-wide theme settings locally, for a specific diagram, using directives, as long as it is not prohibited by the `secure` array. ```mermaid-example %%{init: {'theme':'base'}}%% graph TD a --> b ``` ```mermaid %%{init: {'theme':'base'}}%% graph TD a --> b ``` Here is an example of how `%%init%%` can set the theme to 'base', this assumes that `themeVariables` are set to default: ```mermaid-example %%{init: {'theme':'base'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ```mermaid %%{init: {'theme':'base'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` # List of Themes # Customizing Themes with `themeVariables` The easiest way to make a custom theme is to start with the base theme, and just modify theme variables through `themeVariables`, via `%%init%%`. | Parameter | Description | Type | Required | Objects contained | | -------------- | ------------------------------------------------------------------ | ----- | -------- | ---------------------------------- | | themeVariables | Array containing objects, modifiable with the `%%init%%` directive | Array | Required | primaryColor, lineColor, textColor | **Here is an example of overriding `primaryColor` through `themeVariables` and giving everything a different look, using `%%init%%`.** ```mermaid-example %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` **Notes:** Leaving it empty will set all variable values to default. ## Color and Color Calculation: Color definitions have certain interactions in mermaid, this is in order to ensure visibility for diagrams. Mermaid will adjust some variables automatically, when colors are changed in order to compensate and maintain readability. **The Default Value Column** to the right of the Variable column will denote the Variable paired/associated with the Variable on the left and the nature of this pairing or association. If it for instance says primaryColor it means that it gets primaryColor as default value. If it says "based on primaryColor" it means that it is calculated/ derived from primaryColor. This calculation can be primary color inversion, a change of hue, darkening or lightening by 10%, etc. You can create your own themes, by changing any of the given variables below. If you are using a dark background, set dark mode to true to adjust the colors. It is possible to override the calculations using the variable names below, with `%%init%%` if you wish to style it differently. ## Theme Variables Reference Table ```note Variables that are unique to some diagrams can be affected by changes in Theme Variables ``` | Variable | Default/Base/Factor value | Calc | Description | | -------------------- | ------------------------------ | ---- | -------------------------------------------------------------------------------------------------------------------------------- | | darkMode | false | | Boolean Value that dictates how to calculate colors. "true" will activate darkmode. | | background | #f4f4f4 | | Used to calculate color for items that should either be background colored or contrasting to the background. | | fontFamily | "trebuchet ms", verdana, arial | | | | fontSize | 16px | | Font Size, in pixels | | primaryColor | #fff4dd | | Color to be used as background in nodes, other colors will be derived from this | | primaryBorderColor | based on primaryColor | \* | Color to be used as border in nodes using primaryColor | | primaryTextColor | based on darkMode #ddd/#333 | \* | Color to be used as text color in nodes using primaryColor | | secondaryColor | based on primaryColor | \* | | | secondaryBorderColor | based on secondaryColor | \* | Color to be used as border in nodes using secondaryColor | | secondaryTextColor | based on secondaryColor | \* | Color to be used as text color in nodes using secondaryColor | | tertiaryColor | based on primaryColor | \* | | | tertiaryBorderColor | based on tertiaryColor | \* | Color to be used as border in nodes using tertiaryColor | | tertiaryTextColor | based on tertiaryColor | \* | Color to be used as text color in nodes using tertiaryColor | | noteBkgColor | #fff5ad | | Color used as background in notes | | noteTextColor | #333 | | Text color in note rectangles. | | noteBorderColor | based on noteBkgColor | \* | Border color in note rectangles. | | lineColor | based on background | \* | | | textColor | based on primaryTextColor | \* | Text in diagram over the background for instance text on labels and on signals in sequence diagram or the title in gantt diagram | | mainBkg | based on primaryColor | \* | Background in flowchart objects like rects/circles, class diagram classes, sequence diagram etc | | errorBkgColor | tertiaryColor | \* | Color for syntax error message | | errorTextColor | tertiaryTextColor | \* | Color for syntax error message | # What follows are Variables, specific to different diagrams and charts. ## Some Theme Variables serve as, or affect the Default Values for Specific Diagram Variables, unless changed using `%%init%%` . ## Flowchart | Variable | Default/ Associated Value | Calc | Description | | ------------------- | ------------------------- | ---- | ---------------------------- | | nodeBorder | primaryBorderColor | \* | Node Border Color | | clusterBkg | tertiaryColor | \* | Background in subgraphs | | clusterBorder | tertiaryBorderColor | \* | Cluster Border Color | | defaultLinkColor | lineColor | \* | Link Color | | titleColor | tertiaryTextColor | \* | Title Color | | edgeLabelBackground | based on secondaryColor | \* | | | nodeTextColor | primaryTextColor | \* | Color for text inside Nodes. | # sequence diagram | name | Default value | Calc | Description | | --------------------- | ----------------------- | ---- | --------------------------- | | actorBorder | primaryBorderColor | \* | Actor Border Color | | actorBkg | mainBkg | \* | Actor Background Color | | actorTextColor | primaryTextColor | \* | Actor Text Color | | actorLineColor | grey | \* | Actor Line Color | | signalColor | textColor | \* | Signal Color | | signalTextColor | textColor | \* | Signal Text Color | | labelBoxBkgColor | actorBkg | \* | Label Box Background Color | | labelBoxBorderColor | actorBorder | \* | Label Box Border Color | | labelTextColor | actorTextColor | \* | Label Text Color | | loopTextColor | actorTextColor | \* | Loop ext Color | | activationBorderColor | based on secondaryColor | \* | Activation Border Color | | activationBkgColor | secondaryColor | \* | Activation Background Color | | sequenceNumberColor | based on lineColor | \* | Sequence Number Color | # state colors | name | Default value | Calc | Description | | ------------- | ---------------- | ---- | -------------------------------------------- | | labelColor | primaryTextColor | \* | | | altBackground | tertiaryColor | \* | Used for background in deep composite states | # class colors | name | Default value | Calc | Description | | --------- | ------------- | ---- | ------------------------------- | | classText | textColor | \* | Color of Text in class diagrams | # User journey colors | name | Default value | Calc | Description | | --------- | ----------------------- | ---- | --------------------------------------- | | fillType0 | primaryColor | \* | Fill for 1st section in journey diagram | | fillType1 | secondaryColor | \* | Fill for 2nd section in journey diagram | | fillType2 | based on primaryColor | \* | Fill for 3rd section in journey diagram | | fillType3 | based on secondaryColor | \* | Fill for 4th section in journey diagram | | fillType4 | based on primaryColor | \* | Fill for 5th section in journey diagram | | fillType5 | based on secondaryColor | \* | Fill for 6th section in journey diagram | | fillType6 | based on primaryColor | \* | Fill for 7th section in journey diagram | | fillType7 | based on secondaryColor | \* | Fill for 8th section in journey diagram | \*\*Notes: Values are meant to create an alternating look. # Here is an example of overriding `primaryColor` and giving everything a different look, using `%%init%%`. ```mermaid-example %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` \*\*This got a bit too dark and bit too colorful. With some easy steps this can be fixed: - Make the primary color a little lighter - set the tertiary color to a reddish shade as well - make the edge label background differ from the subgraph by setting the edgeLabelBackground ```mermaid-example %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ffcccc', 'edgeLabelBackground':'#ffffee', 'tertiaryColor': '#fff0f0'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ffcccc', 'edgeLabelBackground':'#ffffee', 'tertiaryColor': '#fff0f0'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` The Theming Engine does not admit color codes and will only accept proper color values. Color Names is not supported so for instance, the color value 'red' will not work, but '#ff0000' will work. # Common theming activities ## How to change the color of the arrows # Examples: When adjusting a theme it might be helpful to look at how your preferred theme goes with the diagrams, to evaluate whether everything is visible and looks good. In the following examples, the directive `init` is used, with the `theme` being declared as `base`. For more information on using directives, read the documentation for [Version 8.6.0](/8.6.0_docs.md) ### Flowchart ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ```mermaid %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ```mermaid %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ### Flowchart (beta) ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% flowchart TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[Another] C ==>|One| D[Laptop] C x--x|Two| E[iPhone] C o--o|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ```mermaid %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% flowchart TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[Another] C ==>|One| D[Laptop] C x--x|Two| E[iPhone] C o--o|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ### Sequence diagram ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% sequenceDiagram autonumber par Action 1 Alice->>John: Hello John, how are you? and Action 2 Alice->>Bob: Hello Bob, how are you? end Alice->>+John: Hello John, how are you? Alice->>+John: John, can you hear me? John-->>-Alice: Hi Alice, I can hear you! Note right of John: John is perceptive John-->>-Alice: I feel great! loop Every minute John-->Alice: Great! end ``` ```mermaid %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% sequenceDiagram autonumber par Action 1 Alice->>John: Hello John, how are you? and Action 2 Alice->>Bob: Hello Bob, how are you? end Alice->>+John: Hello John, how are you? Alice->>+John: John, can you hear me? John-->>-Alice: Hi Alice, I can hear you! Note right of John: John is perceptive John-->>-Alice: I feel great! loop Every minute John-->Alice: Great! end ``` ### Class diagram ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% classDiagram Animal "1" <|-- Duck Animal <|-- Fish Animal <--o Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } ``` ```mermaid %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% classDiagram Animal "1" <|-- Duck Animal <|-- Fish Animal <--o Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } ``` ### Gantt ```mermaid-example gantt dateFormat YYYY-MM-DD title Adding GANTT diagram functionality to mermaid excludes :excludes the named dates/days from being included in a charted task.. section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page :20h Add another diagram to demo page :48h ``` ```mermaid gantt dateFormat YYYY-MM-DD title Adding GANTT diagram functionality to mermaid excludes :excludes the named dates/days from being included in a charted task.. section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page :20h Add another diagram to demo page :48h ``` ### State diagram ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% stateDiagram [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } state SomethingElse { A --> B B --> A } Active --> SomethingElse note right of SomethingElse : This is the note to the right. SomethingElse --> [*] ``` ```mermaid %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% stateDiagram [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } state SomethingElse { A --> B B --> A } Active --> SomethingElse note right of SomethingElse : This is the note to the right. SomethingElse --> [*] ``` ### State diagram (beta) ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% stateDiagram-v2 [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } state SomethingElse { A --> B B --> A } Active --> SomethingElse2 note right of SomethingElse2 : This is the note to the right. SomethingElse2 --> [*] ``` ```mermaid %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% stateDiagram-v2 [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } state SomethingElse { A --> B B --> A } Active --> SomethingElse2 note right of SomethingElse2 : This is the note to the right. SomethingElse2 --> [*] ``` ### Entity Relations diagram ```mermaid-example erDiagram CUSTOMER }|..|{ DELIVERY-ADDRESS : has CUSTOMER ||--o{ ORDER : places CUSTOMER ||--o{ INVOICE : "liable for" DELIVERY-ADDRESS ||--o{ ORDER : receives INVOICE ||--|{ ORDER : covers ORDER ||--|{ ORDER-ITEM : includes PRODUCT-CATEGORY ||--|{ PRODUCT : contains PRODUCT ||--o{ ORDER-ITEM : "ordered in" ``` ```mermaid erDiagram CUSTOMER }|..|{ DELIVERY-ADDRESS : has CUSTOMER ||--o{ ORDER : places CUSTOMER ||--o{ INVOICE : "liable for" DELIVERY-ADDRESS ||--o{ ORDER : receives INVOICE ||--|{ ORDER : covers ORDER ||--|{ ORDER-ITEM : includes PRODUCT-CATEGORY ||--|{ PRODUCT : contains PRODUCT ||--o{ ORDER-ITEM : "ordered in" ``` ### User journey diagram ```mermaid-example journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` ```mermaid journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` mermaid-js-mermaid-9bb0ed2/docs/upgrading.md000066400000000000000000000007551433273745700211270ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Upgrading Some of the interfaces has been upgraded. ## From version 0.4.0 to 0.5.0 ### Initialization `mermaid_config` is no longer used. Instead a call to mermaid initialize is done as in the example below: #### version 0.4.0 ```javascript mermaid_config = { startOnLoad: true, }; ``` #### version 0.5.0 ```javascript mermaid.initialize({ startOnLoad: true, }); ``` mermaid-js-mermaid-9bb0ed2/docs/usage.md000066400000000000000000000325111433273745700202460ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # Usage Mermaid is a JavaScript tool that makes use of a Markdown based syntax to render customizable diagrams, charts and visualizations. Diagrams can be re-rendered/modified by modifying their descriptions. ### CDN Please note that you can switch versions through the dropdown box at the top right. ## Using mermaid For the majority of users, Using the [Live Editor](https://mermaid.live/) would be sufficient, however you may also opt to deploy mermaid as a dependency or using the [Mermaid API](./Setup.md). We have compiled some Video [Tutorials](./Tutorials.md) on how to use the mermaid Live Editor. **Installing and Hosting Mermaid on a Webpage** **Using the npm package** 1. You will need to install node v16, which would have npm. 2. download yarn using npm. 3. enter the following command: yarn add mermaid 4. At this point, you can add mermaid as a dev dependency using this command: yarn add --dev mermaid 5. Alternatively, you can also deploy mermaid using the script tag in an HTML file with mermaid diagram descriptions. as is shown in the example below **Hosting mermaid on a web page.** > Note:This topic explored in greater depth in the [User Guide for Beginners](./n00b-gettingStarted.md) The easiest way to integrate mermaid on a web page requires two elements: - A graph definition, inside `
` tags labeled `class=mermaid`. Example:

```html
    graph LR
    A --- B
    B-->C[fa:fa-ban forbidden]
    B-->D(fa:fa-spinner);
``` - Inclusion of the mermaid address in the html page body using a `script` tag as an ESM import, and the `mermaidAPI` call. Example: ```html ``` **Following these directions, mermaid starts at page load and (when the page has loaded) it will locate the graph definitions inside the `pre` tags with `class="mermaid"` and return diagrams in SVG form, following given definitions.** ## Simple full example: ```html
  graph LR
      A --- B
      B-->C[fa:fa-ban forbidden]
      B-->D(fa:fa-spinner);
    
``` ## Notes: An id attribute is also added to mermaid tags without one. Mermaid can load multiple diagrams, in the same page. > Try it out, save this code as HTML and load it using any browser.(Except Internet Explorer, please don't use Internet Explorer.) ## Enabling Click Event and Tags in Nodes A `securityLevel` configuration has to first be cleared, `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduce in version 8.2 as a security improvement, aimed at preventing malicious use. **It is the site owner's responsibility to discriminate between trustworthy and untrustworthy user-bases and we encourage the use of discretion.** ## securityLevel | Parameter | Description | Type | Required | Values | | ------------- | --------------------------------- | ------ | -------- | ------------------------------------------ | | securityLevel | Level of trust for parsed diagram | String | Required | 'sandbox', 'strict', 'loose', 'antiscript' | Values: - **strict**: (**default**) tags in text are encoded, click functionality is disabled - **loose**: tags in text are allowed, click functionality is enabled - **antiscript**: html tags in text are allowed, (only script element is removed), click functionality is enabled - **sandbox**: With this security level all rendering takes place in a sandboxed iframe. This prevent any JavaScript running in the context. This may hinder interactive functionality of the diagram like scripts, popups in sequence diagram or links to other tabs/targets etc. ```note This changes the default behaviour of mermaid so that after upgrade to 8.2, unless the `securityLevel` is not changed, tags in flowcharts are encoded as tags and clicking is disabled. **sandbox** security level is still in the beta version. ``` **If you are taking responsibility for the diagram source security you can set the `securityLevel` to a value of your choosing . This allows clicks and tags are allowed.** **To change `securityLevel`, you have to call `mermaidAPI.initialize`:** ```javascript mermaidAPI.initialize({ securityLevel: 'loose', }); ``` ### Labels out of bounds If you use dynamically loaded fonts that are loaded through CSS, such as Google fonts, mermaid should wait for the whole page to load (dom + assets, particularly the fonts file). ```javascript $(document).load(function () { mermaid.initialize(); }); ``` or ```javascript $(document).ready(function () { mermaid.initialize(); }); ``` Not doing so will most likely result in mermaid rendering graphs that have labels out of bounds. The default integration in mermaid uses the window.load event to start rendering. If your page has other fonts in its body those might be used instead of the mermaid font. Specifying the font in your styling is a workaround for this. ```css div.mermaid { font-family: 'trebuchet ms', verdana, arial; } ``` ### Calling `mermaid.init` By default, `mermaid.init` will be called when the document is ready, finding all elements with `class="mermaid"`. If you are adding content after mermaid is loaded, or otherwise need finer-grained control of this behavior, you can call `init` yourself with: - a configuration object - some nodes, as - a node - an array-like of nodes - or W3C selector that will find your nodes Example: ```javascript mermaid.init({ noteMargin: 10 }, '.someOtherClass'); ``` Or with no config object, and a jQuery selection: ```javascript mermaid.init(undefined, $('#someId .yetAnotherClass')); ``` ```warning This type of integration is deprecated. Instead the preferred way of handling more complex integration is to use the mermaidAPI instead. ``` ## Usage with webpack mermaid fully supports webpack. Here is a [working demo](https://github.com/mermaidjs/mermaid-webpack-demo). ## API usage The main idea of the API is to be able to call a render function with the graph definition as a string. The render function will render the graph and call a callback with the resulting SVG code. With this approach it is up to the site creator to fetch the graph definition from the site (perhaps from a textarea), render it and place the graph somewhere in the site. The example below show an outline of how this could be used. The example just logs the resulting SVG to the JavaScript console. ```html ``` ### Binding events Sometimes the generated graph also has defined interactions like tooltip and click events. When using the API one must add those events after the graph has been inserted into the DOM. The example code below is an extract of what mermaid does when using the API. The example shows how it is possible to bind events to an SVG when using the API for rendering. ```javascript var insertSvg = function (svgCode, bindFunctions) { element.innerHTML = svgCode; if (typeof callback !== 'undefined') { callback(id); } bindFunctions(element); }; var id = 'theGraph'; mermaidAPI.render(id, txt, insertSvg, element); ``` 1. The graph is generated using the render call. 2. After generation the render function calls the provided callback function, in this case it's called insertSvg. 3. The callback function is called with two parameters, the SVG code of the generated graph and a function. This function binds events to the SVG **after** it is inserted into the DOM. 4. Insert the SVG code into the DOM for presentation. 5. Call the binding function that binds the events. ## Example of a marked renderer This is the renderer used for transforming the documentation from Markdown to html with mermaid diagrams in the html. ```javascript var renderer = new marked.Renderer(); renderer.code = function (code, language) { if (code.match(/^sequenceDiagram/) || code.match(/^graph/)) { return '
' + code + '
'; } else { return '
' + code + '
'; } }; ``` Another example in CoffeeScript that also includes the mermaid script tag in the generated markup. ```coffee marked = require 'marked' module.exports = (options) -> hasMermaid = false renderer = new marked.Renderer() renderer.defaultCode = renderer.code renderer.code = (code, language) -> if language is 'mermaid' html = '' if not hasMermaid hasMermaid = true html += '' html + '
'+code+'
' else @defaultCode(code, language) renderer ``` ## Advanced usage **Syntax validation without rendering (Work in Progress)** The **mermaid.parse(txt)** function validates graph definitions without rendering a graph. **[This function is still a work in progress](https://github.com/mermaid-js/mermaid/issues/1066), find alternatives below.** The function **mermaid.parse(txt)**, takes a text string as an argument and returns true if the definition follows mermaid's syntax and false if it does not. The parseError function will be called when the parse function returns false. When the parser encounters invalid syntax the **mermaid.parseError** function is called. It is possible to override this function in order to handle the error in an application-specific way. The code-example below in meta code illustrates how this could work: ```javascript mermaid.parseError = function (err, hash) { displayErrorInGui(err); }; var textFieldUpdated = function () { var textStr = getTextFromFormField('code'); if (mermaid.parse(textStr)) { reRender(textStr); } }; bindEventHandler('change', 'code', textFieldUpdated); ``` **Alternative to mermaid.parse():** One effective and more future-proof method of validating your graph definitions, is to paste and render them via the [Mermaid Live Editor](https://mermaid.live/). This will ensure that your code is compliant with the syntax of Mermaid's most recent version. ## Configuration Mermaid takes a number of options which lets you tweak the rendering of the diagrams. Currently there are three ways of setting the options in mermaid. 1. Instantiation of the configuration using the initialize call 2. _Using the global mermaid object_ - **Deprecated** 3. _using the global mermaid_config object_ - **Deprecated** 4. Instantiation of the configuration using the **mermaid.init** call- **Deprecated** The list above has two ways too many of doing this. Three are deprecated and will eventually be removed. The list of configuration objects are described [in the mermaidAPI documentation](Setup.md). ## Using the `mermaidAPI.initialize`/`mermaid.initialize` call The future proof way of setting the configuration is by using the initialization call to mermaid or mermaidAPI depending on what kind of integration you use. ```html ``` ```tip This is the preferred way of configuring mermaid. ``` ### The following methods are deprecated and are kept only for backwards compatibility. ## Using the mermaid object Is it possible to set some configuration via the mermaid object. The two parameters that are supported using this approach are: - mermaid.startOnLoad - mermaid.htmlLabels ```javascript mermaid.startOnLoad = true; ``` ```warning This way of setting the configuration is deprecated. Instead the preferred way is to use the initialize method. This functionality is only kept for backwards compatibility. ``` ## Using the mermaid_config It is possible to set some configuration via the mermaid object. The two parameters that are supported using this approach are: - mermaid_config.startOnLoad - mermaid_config.htmlLabels ```javascript mermaid_config.startOnLoad = true; ``` ```warning This way of setting the configuration is deprecated. Instead the preferred way is to use the initialize method. This functionality is only kept for backwards compatibility. ``` ## Using the mermaid.init call To set some configuration via the mermaid object. The two parameters that are supported using this approach are: - mermaid_config.startOnLoad - mermaid_config.htmlLabels ```javascript mermaid_config.startOnLoad = true; ``` ```warning This way of setting the configuration is deprecated. Instead the preferred way is to use the initialize method. This functionality is only kept for backwards compatibility. ``` mermaid-js-mermaid-9bb0ed2/docs/user-journey.md000066400000000000000000000020731433273745700216110ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in packages/mermaid/src/docs. # User Journey Diagram > User journeys describe at a high level of detail exactly what steps different users take to complete a specific task within a system, application or website. This technique shows the current (as-is) user workflow, and reveals areas of improvement for the to-be workflow. (Wikipedia) Mermaid can render user journey diagrams: ```mermaid-example journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` ```mermaid journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` Each user journey is split into sections, these describe the part of the task the user is trying to complete. Tasks syntax is `Task name: : ` mermaid-js-mermaid-9bb0ed2/img/000077500000000000000000000000001433273745700164425ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/img/GitHub-Mark-32px.png000066400000000000000000000054421433273745700220210ustar00rootroot00000000000000PNG  IHDRxxPLTE:ދ7tRNSHl C~pqr\`K&'z*k % 3´v9u]D ?"T#Ǽ)(E6InW!^ mLGeZ;o7F/@dAy趉1Qg:J[ xYO0P45NwϢc$sB.U8:NIDAThCUyr/ *lB rJgJi"Z)fvi]Vvg?Xܙ{3xyFW 1?0x{ 3l`0,005L!БaXWr""RD [FWbtFe֢58OX)2cyJ1.Cؖ`bq+ <>"qav vcpRVQIF'y$S-+,zt.i|]3&'f O IZpit8qT ?,tGyG]|nN:Ο- Dby %JWͮuOL|x"2ݼ:BZ.'&TNy0 V7Fbs$8$1qtSY>ML+MHK0q_cqÇַYO8Ӵ%Dg4J[e掅)،: V|޵lwLaJc4Iۥ6hދDJ(T%rt!{SuB-:ݫ )fۮ7K$:_7#%{STjc+Z[ፊgb_P6md8I0F*##y-J>t*԰ Z3ʅ]4i`o%t۲k|WulAUHGY3Bڿ\~ռ EʗYQκ@þrtoMVF$SVqX—{dV".˯don"}Ga k%.KFUl2ty5$|!mnU47hҹr60P]kՋs !qN5Xym^̭+Ƃ<3{ ѣ#qQBO#7~h 2>^hzyHKcGS﷎t?(=s_ؗ:Z?g$^$ iiS5MxuL=Ԟ?}yf ӿUٱH[% [ӗ}?>g5IENDB`mermaid-js-mermaid-9bb0ed2/img/bomb-svgrepo-com.svg000066400000000000000000000034121433273745700223410ustar00rootroot00000000000000 mermaid-js-mermaid-9bb0ed2/img/gray-class.png000066400000000000000000000364371433273745700212320ustar00rootroot00000000000000PNG  IHDRTZsRGBgAMA a pHYsod>_x8u(9mJo$Ir6 uy/h%} ?#phҔnz(žFX+jn@~4u*CI9َХ>z*(2tEK4HjzȔl@~>^h{N)Gq"$CTRĖ2=G>LnOO[I. ?Z g/Od>)b6I~$R|Ʃ[%@~>ޓ CV-cRCIE<S!'G˦}r؆o| ?Z gU›EUj~;4E~@{(?^HDW,pԲx[1VNG讏DucoURaLlmOfA>߫@'Eid+̏5"*٦(t1d{ՖևWg-b,%?%d2Hm ]ٙ!y [g*zB1FZe=9 dy*5ËxR~3v,ӿL5֜L~P:]uiwV@+i, :=RqA 'pyENL=/><'̊G)a7Ae_hĹHh6N~A&:d^vՂY!#gC|H`q6NݙHWGGRGYѱtp\lDVWdX7bg,4&$? Htpx%/oa=S(vu.2ȏ;z %:d|RKW^k`6<)ޅ?J!?=T14X5>ʀ ͖Ǻ꯿q[q ?ǃzNJX= [Ӥ~(g5ňv ?k ?Z g% ԥx/S3Xk(pWG8ؕxESPd @+=mXP:Zba#B'u:h59P '3!ց3xcGH(9@K=1u:㣏6ٵ"W;x1>+'Vsgb#6:GWx`k/E }5oǃ+F4NTn,Ctͧ-_C3kr6/tiG^H ?kt-n_X7Ey=#rARc;ɾ-ޞGcCc9ڪw<5[x %(h=I]l\NSx ?A7qj.NB~E<)4 c@~X89KhǀžA4c@~1 ?MqHX)=@~@~s8}\+ȭ`6p2/7!?/9=b é*?ROѪkb?::nj B)(|>:%jK߷yj~bD>/ T0vn͔cIeNmjFnuBtr*/2_a I%&I_P]I *q tau5]R)ETu}Isqcuv@NN6ʇǓlRoy#OJYb, /@gr*^.v羯GI3'Ec4ܨ%O2tjx*>UgI駸TެŵcT_6?H)ce+VF{7/W˵ZܲJ)#b$VǻJd|{<+)XNP5\X>+y5XY#?˶=V~5;0Ǩ()V*}UƲK#6c3eTlұل*4[8wε`a1{_ionhD@ZΔmSjYm"smjo5yU|l@ ?QQ~d5"w rf{Ibڎ y 2鲬WgvvUx8R~,FM&Y:BUZG^OyPH:8\d'Jv5eʯaw3QY<'D*l;r! ?Q]~ 2ε_`u"#ZJ,`WzMYj^Uä]lMU%@,ژZRɏqRPƆ&tUw^mŚ<@H7] vUT@6L~<@M^Gbܗt?8{{ hla:8KWg,4F[21 ?J5Fɯ8 "ur-/?=[Lž-B~w hWs#U+"ˌ"[Ku!D{ЮN5Ni.)J0a7.$)0m@4B~bgn\}CQj(P+ZsU{c23xz4$lM?OmM6<p@~O7'+-hL7JcO~"UeZ ?9>_dR~&oi[3c[~tp ?p ?㋌AHxu<ÁE2RJLmFEC7zc#ʏ/ j+y薕<6 O17ɓ U #tw!?[)؏A14߂ٱ|kJ~fM"vxGn ?AwBq% ?xQ~)\y o](Nnˡ/go/v^.} T+EV3-<7wĥOc]l:%}Ma=u`Z<7{{;W7|)+}Y7^n1FbdW;]}8Fqce6?D ?AG.z{Fޓ!{<Q1?-E/|#- rf }5okW&K_h"eJ^JMb6nz;cH6 k ?'s$}h?$29Rl % \.-ep }\,ϓ.恓/Gn/c }&+RzC [&Hmdqa6&L V rGaOD+oG61l %͑_^ؓ28>h" uFǢl'7)!Ϭ6ET|JNv ?@~@~oKI}{{-^+?| ݿ/פ[ u,4>B#H̀#nwzO&)dX~4˦8fqh"}$Ⱦ/?^/󝋋hn)4 vn_4<]қٝ[)v~ }?TXZl٭ {EщKu:4ՄM;wxGwɏߺy>K,YkΞM=f/74 EY@~@~%vVMvFq³%G muwjpjo f;gXTYj 4ύ⠛ kZ_ʏǯk?AA!?f8GwRY-^ ?;;o{\JꇰݞB# =y Z{֝>oQwЪaO4,?U GV1IeA~ͤ&Y=؇^ ?wo_Rz+!q6VNz/z"9RS͏*vd1{vd. r;o{\ur.}[ 9ȏSNJhjwP#}UBWž-aOSXTs |fӊثCcjo;M)sOWX*,RI2ck1^{k/rE*O:^ ?Wg՗9Oʏyqv7wQM~b`얍 eh'J#K®=5}?ݴܹH#k5ChAu;4_c0:t237?'m͐ROƖNA~'v JYpSaO.Cd,?tm/7)s 9$?ȏ!#FqcqaZ*?^%--TS#x ӛ(Y~^ ɻw{K9*ȏSH]O._!WG`ˏ0=O-xV~yFO!aw6ENISm܋u=gx ϼԝ@~N!,.zNc8dȁ_/+1Ec6#E^ ?GRTyOh a򳏗k~ 2%;o{bQ#IeRXؓeDhՁy ֗ߒ Aؓ9 r.%NA+^ ?'ZF!mr5@HڼuG&[\y vrHܔ2.A7h@m@~!o1)@~U.& 6OP]hAJw8߾!xM@~"&g )@~6& 'dw JC'qD %ȯp]JKn‡ ߁ =G" ߚgQ7~51x鄔 YW8_m;tj_eNԉ"?R/7wJJWk" M<+﯐[6p,*`Lt;Q|'#ȯN=Q$ ó#w*_ ޻\ז~"׈trZ H1" )?22pxrNZ T n_4|ȯFxS~\a  r=pMZB:9k,kKo `AxS~ɏ}FTn?6|ȯ,̽K:Gd:1;i j pr#H'@~crbT.c\PAuwlf / 'yK7q}IJo i-_SY6ERd<(?㼜^&"z>#FɧCzzkX].t$W*7[M:9ko~rk>A:݇`RNDҟAxQUH;䷱o},-&?c'4!\7v9w/I~D>[XS`>RC~S+|K=)fh-+Z[Z G&N)?hbH݌j@'ыG7MFeӕ$6fHҠaX-O*bLWL>z4.b ;x 9S{9\&A݄XsZƆ".[#߆#%'Q|dkYS׾|@O߻žEAVURyi-__7g ipѡ>-YU~X"B~V2p"6h2KŞ#'c".#&˶3SL#|_B 8 c,*p&'1YkR!}MP;AaϊH'@~_ޓD1L֖ԵvoV F*U:` S )1n&Ee><}Oz66?PŸ? c%ih1tZ;?DHQ!$Zʏ‰=rۈSU~k2Ok/Z.~p;FۈGwtB)lHczdxGJoi-3Y+9zqGwPl^6u;0mJvyA_l?ߒ[trZ d~_9A-xA~ԵvMG*J:KGj~RzNNkN:Y:(6- #?omvE*G)ṽu޽H'@~;*`+q`zۦ#mbcޯWJ[] i-[xx=x>ǣ \/?1Ql$MD*ܣ7-eRzNNk\r~V_Nw..nz6~ܴgV\).Hڔn[:eIr~@C)]\{Bj'p,󕼔C ?72?w"FJYxË%{{ȭɏdG#R )}FMטL.<9{)^ߟMC~o߾>[Rs$r?^s;/&W%rxAF~rx݃kKѹm)nW˟%6ty;&?~E7Ya: ]"D醔g ?oO\`gIG'P<ûwL&oW/@-bz0p8FJWSS[7H@X~ڔԞ*LRj:d7>M,$g_U~tmAxO) ?/1WY\& Y)ĝ{:|*|B!s$@ɤXo.!Qx{ WN'?AR:č3H΀qIaD<ϭ<*?>@~brH$ޒҁW\#:zlH:Q0p׺}'bo0{>@~b{s/ILl/.9L#9;yNIUuU0p\_yc ?_A~+y#rx< LJE],6?MP [\ؖҁWvOsOGğbc<Վ0- ?_U&&bwD@~V887gYe> Fgs֝?- ?#ŸC~V8efIJVQm$o@~V8ե0v|ܹ؍|^9V ~w/7?)A;pcw@~>nV};W{{u}ܧՓ_&*@~F>$@~5;7w"x~bzG\%^N7 ,*KkŅmrAO7tPϷrI9< pRvnA6ȯ'F>H [}١/R"+|˕ Mu_2  '~ LuB~oy`EH0 XB<F7Ϸ-< p/[C6ȯ3LD.|i$ ?~V~A~1Op#ék@~>@ ^Wm}8u˟'fR@~>G֟Sך h$51|Եf ?t6ȥ,e1iz[N 6{NJ " ӷSךәw"&%;~a?}6o5II ;[eC1:nv? `t >3~o-ǢR0 p:׺fK">o236n8gǖD`gD~#G?;ROxpm c*5m_ -Vc/\NDRv#Y OV!??9_>&=JgRsٵ O T`Tx k%R:͞;DXo úVX#Y*O?<9LgO2]4_4"WEV눏nj;)M?}^ivSvѡkYR˭O&ti// |[bfe'=½+RÁkxڡRfoavv$ ?^z2?83s$gakRK]*Sf] R&buX-#0-& 1Am)'Dž+ĔgX迵I6"3O/Jwi;Jt?μVf^ n?reCv46>[bHWGd^VR5_}nt+P-ǧ'X ͩsǵQmI_A~Wn ;x@~u :s_@~ȯN zW'_=@~{@~ȯ-_-o" :#'s͑S$n* s0'X='y<i$_^z *OD_/BNT'*R9 ss:1>+̌jEѽ5+J7CCy~&7ȯN +B'Ǫ4V#*v6^i]/],\1xe$/j ͗"+)"q\ؚ)C~QM~UN{nuI:}>cV*ݙ>Vc89jiim*S@~{4K~lx('lʤq rIfϸ(eT'oج+tUagi"T0Gq Mlt:$yGՄꌍL+a|0NEGd M\y4(?>H+a#힓$JCط/L|+j{XjVNWArwu g,67L~YI*>ه#CӍ3鰲+4iJ >u-*>ߴ+0sT͑_DK|QY&z;?96YVX?-q`s3je3:Va {ǯOqUijNg0/{~/F0st~,cJU~UO /K>3*J~466'-XMn~lLJ*葸E~ggU sRlDsǾ u:!q> a3-&Ŏ ^m>JU"HhBa rWoWgr*F~{̲_OW2s|r d_h-6 MOLY>姑/=9]J㶈_Wk!RLN[|*?vgsQG|}+? fjxq7l+DtF(nL;Cײ6gzX%ZI6HtT<ʳEP%|+j]k-6,#Jns*+ F+X A,EN %?f,!]_N_C26̔a tHҮ_P#/*e)?ca^E~Uh]7ЏHq݄韡t ,Be;G;L* \*#m$h(ҏx,tk9NH8D/l\RVL\#{&lQg,4VWGp giG"gRSaZ /N'Yi],F 1k1"X&?q]I~V$^Y~V],3Cݩ!t̼VUjiFf~RTc_ 'v'RMu?Au^Hm_Ư%TtX+uXlSȮG~\啰dC~S<<!H~t,` [u:A\T6-mɼ'4h_@~[)Qvl-m#󙐒6mBٲa/ȏghVC#?Ipؖ3R]ќs:  '\zޒlJU~sy}5RF :0)!aZě&P& Q00c$?:qL&VյɖE.6yS d=)'g6W'_=@~{@~ȯ ?=j_߉+5y[~tƤXux\~+7Τ=&3@~vuVΠexX~DNҗm,v Nb˖hUZUI|q6Q*\K UG@NUKDXݪ֔LNHm4UbP*W&0WrX%ioMԔg/rUَB'D!V 2XXXe6J Jl```*-* *UZUUf4ViViV哳V m? E&Xr* _dIX RVԁU*u`*JX RVԁU*u`*JX RVԁU,t%AF`*JX RVԁU*u`*JX RVԁU*u`*JX RVԁU*u`*JX RVM+ '܅qYQV  X`Ua\O XsU[ñi$^K4X`U,V5Wɣaswd%Mx*X5Uπ$'3y:_WUl9 &0W*X< Vᄻ+[D X RVTU*U`:JXRVTU*U`:JXRVTU*U`:JXRVTU*UYdVԁU*u`U6~]p5*})=)x<裮G$kd0QeVMWrræ+LT9UJx&*`tJ˭:u‘oKeR%u:ƺjZqpN_>߶ipG.QǨ{Im;Ӫn\=u:o6Z5%?BU0Xhm}mB]!V}oaB u:̆`:ZG -U0**3UځUUf4ViViV 2Zߎմ5cMeLUfhU]l)X򵪽<mIi J[n7s325|E,:ojw$x _#`ʤ\늕ŪXqɋ+U6hd̤ qg1UlR_eXeU~RUIXeX嗃Y./J`5gOaFwz+8U"JO2|2q-!\%;Fz@ViViV 2XXXeJ;J3 `v`f`l{o_l*u t,j?wmB]!V ^ܰtl$u:̆`:ZE6{zNZ,u:ovZEae}e?l޻3\Pc=}k" Lunoyb+ӃD[Vߜ`IX RVԁU*u`*JX RVԁU*u`*JX RVԁU*u`*JX RVԁU*u`*JX RVԁU*u`*JX RVԁU*u`* .U*U-Z`U?, 2T;w.K*Uzꩻロ%AF`*UUUwqK*Uy[n%AF`*?7̒ #JD"q 7$R套^kYdV+̚5%AF`*̙3YdVnݺ3f$ReÆ X%AF`*7n$.^>VR__OVkjjڼysee%YEo׬YZX )=>SxN{VhJ*&,z"c9/_DT(*+vBgU;)8()J9l9ȍXl],Els䚧J,**)?\*YӤߴ&[]5%k3 F^|nE( UDM$#dw>%<ќjSi UTR*!j C*[*B]v"R'XE0 0*ĊH)S~}jUDaLJtm"kfG)CdUD~(e̳XLԱVQ_J/{7*wH̽VB,4P;maUѤRxˎ+8oq26XEXpYT*+cKOA=V^U"LTj=JYEtw$ԙ", '7WӶ)EiNJȺmZER^;"l v7o>k",8"\mV*"$bI G$"Nwj>ǒJrwJbm˞ZĒJmzïJbU__… /OXR;3 GTZjU,;t]c˻Tסߨ>^1+U1mη~[.4Vv:+͘1/2VbUmmmw}>OXڌTjܤR ̛7m~fΜy=1V/I•":::hL$,o[;&ܶmK#Tjt8RFՖ-[Xlo뫫YOɱ`L*/뮻v`U>̳|:%0C)b``ફZ|9ہV+timme/R󹕒lݺz`U}m7|I_UjTU)ɳ>{M7۷MB?~>#,!֓ӹTj%\0{|b")Ъ~+eyN#TTXJ9G Vx 7۬石:B%bJOS)ImmYvbU 7ܰrJϗuOTjbAJIΝpsαcKq_U,o`/)&-7{Zz5m9sz\@ -O\&QJBX is=GUWWǺu뮾j~lU>| z衑3Yuٳg ,o1hժU,f jŷ~0ͦMH,~lUtAoX> 4w~'X{3gnذ#BggUW]ESX>aٳg͛WVVb˖-4Ug3Zr_?|Xbŭ?`G?C t^u7WVV|Us1|'AB[UQQqm |y嗯Ç|xUo_}Gw}:o"Vٳꫯ^v-BshRFGGϟYx͜9g0R^z3f9r,X06[5*ya{ _<ΪnO<ȈZɮ]X^/[ocy0K,{BuˉpY%cYkCYuYf,r"駟.bo7'{ bŊ9s[uiZQWWG8}qV<%D{]'ؚ sՅ 4@_~+IL[s*SU XhZV0}.qz3`U.]vˢ٭j5NjN$Gw>7jlͅS6c%!XYu}|fr+8HXuNoqéBfDaIdy6#))U=48&&v,K>J* SU^{2EySBX3HXpg; f#(՛T)6{5bSƔU4Q_.qdJ)YV9g&iQ0 S W$fJ,c8LfROL * S[%a~*DKYp3[s*g17RLa##*YEN7?9p [sϪVeoU\8T"gU8ᄻ0u,Un:5NR`, GWa3]uU6ΰftVٌ:*UgXe3 lFWa3]uU6ΰftVٌ:*UgXe3 lFWa3]u.UݾBw7nR TLiu`D:p+8z(k -kZ&`DIK,q狪* -/Y(U~5B%u닒MTDt|r-R[Ŧ+LTEMWR[Ex&MW% Vy&MW%ٯ?,[_7XHa:Y$Tj,$7@nծ̓- U1U!mrX585*UUUfJ2XU`~`VXXe64**UVV1&śyiqL܊,-?5*퍵JwkݷsO4X m`2AQК֔UV髳xm&bV9F77XE%.UJKf9Y؍d_,U|ږke}1kJл' ZU:{:HDw,ۙ;AzF;r *muvs^~=*5:NV"ujJSt,ӌB,h͟4i)!(Ed>-ū`C>Vc=uv^msUaC yUr")'w5ީ]]$ZV騳FEVɞ7jړ%p(oJS A$jV49&2 c2 XXe64**UVV * J?l`UiUUfJ2XU`~`Ґ۪/?0[źj49ڳm2iLi@*< Jځ pIENDB`mermaid-js-mermaid-9bb0ed2/img/gray-gantt.png000066400000000000000000000135251433273745700212330ustar00rootroot00000000000000PNG  IHDREPsRGBgAMA a pHYsodIDATx^ PTW˳y E$IgwZ6K&7NlU&f2[cvj&bR8 bTb Fi4{W+h|ǡo@kHe/QmMRÂbXP +zr(zr(zr(zr(zr(zr7Cn\ͩZ` Űbxz ÃtǮ]t/>>S2 Ű gܻ@6!r={'\-pdA"ʯ_nnniiitٳ$ssׄQ,r]lnn$111q@l!3G FFFE5V`ȵ0,(^`қ ԛ= 2ݞ}3 Qnڋ6BY`ѭŽ[(X(+6ŲMEtr&iKGoIL-G[N"oTKC[֛5g=Y{s 60vV2vbkcض-@mĆCmOYwlSOrr_Q(>48si Cۆ '6Iݹ̉b A;[lC—z<" Iz|\|[ӥ.;! 憜23G/=UD ;!+ڰK^8> \ ʭw=OJڋd.}N)i-O0^(tCCԀKcU{S1stv?rp.H/f'?_Q+LX5k+/w,xm"y 'L5#'-4GG.N{crɋx:dڋO34&TWW?hŏ!*++o(Œg6D \hl E{zz۷o˻߫\{xx˻ g=_3 QQQtA644]<\L# N{eA⪪0MEYt7' \f/QNQQzIɼ}͋r*,Â(qxÂbX,YJ%8 ʹRZ111/^h}LwxC1,(f??`gKj+OQ|GpHY٥Q>f mTgx`~pp;iմ;|d QΟr9}y06䉕JXOTU[ݒ{?С6!nOvCC?pOBfDyVQ`|+L^E'ܞ~ZJ_px(~a[y%ݛRhBr.|_0m8.^H~`a[X)T +ޜJHGS6^.D9Gʯ$eewRc9WcF>;7>2-oBd7/^X߼-&4'}`r.r,w:c`_tZ,#@HK*vE挜$]/6/~Ͷ+¶5)i3rWrUɫv`G:Zbg eNNMZ&NC+8tD 1+rNNLܼM8RSS*O_:9sWI=iɽVM),D9U, yS%WCIf*쎾$Qtn˹,iyȧ=MgD3X8PN1G2LJCp.}Xv6e_.C3 `kVQnלV'C/#@E۵h9+˛m)& v=9PT1}lݷ}dU;ңStᢠ2-USZ1;g=Fbz{GyMMMll, Ű ݝ DCÂbX,Y ?âb{}^֤m%522 ܈ۣ? sad1xw}p䊦s=ljvMG쫦$9@1,)oq^Boξڊ֡A?hB:ʛ>ѕ|:ul三[h/h9 r3  8Jo6F]P,BXL];K+* Q`A%}Z:+ؤm aQ]] OU]@XNrH[(vb>@+ƹN5WoV!x3f]44_`T젗Wj=s<|X0{t GUZ/5``+H:{:G'ݣ]+ G'V(^^?B v QYC+L:H^cPL<}ܞ!,+NլӪTmN:*wx yP.VL>)$t>âb>:vã1"jnlcÞ! `5rwGQ~yOL鲧Mx㯊twGww{/-\tPsEu%=ݣg!߼i꽋 #RγVm6RezŽG6>}^~DBn{,(,}Me#Aa^>^֤sqq/P>DGy'=)G1 /2J׊?Q /n^za4dkW 8MrCsͣ뫤y/3_%#g,ѯ?dNN{j1˒2$7>뫥_}mM4*<:"KK3d܌p!XP )f/|z2Zmz?\RRBnxΰX{rB B'vQnaA1,(nQ{r: ̍1g2wulqetD1,ΐ&XܠR̼yqη޾Oimm ;TNxΰXM4M'9,O{ yr;)f:ߗw(EӞmܠ?u_q]S'869c%,Vłb0l~^o+Xdz@F| (ovFbXSٲW17󴆢Uu?ӧ- va~il3ž/ VQ`Ƶ=i HVuKᔰz>Q`A%}Z:+ؤmIG"w7c#myrITiKbÑ 4bA`9QsZfKzF9> CXcR^>\i[hFΐ#`sm[aa,'g1KEX=D9pXlz*gnLfU*D9{JZӮB~62 \+~QfV@*H٫Mv;;'JZɸzݴf.yxªAw1.tjpkkIG n:(q<ʘu!"ltkX;D9W(UG^?iNȸL_ƪurS . rW]rV47ˆC&4/-gpbXP B9I{͎ cm_-7iSx:4,Q`VQJ{ةt'=<%*N{rbXP BY}`P%Nh萿VHGg؄ӞrP aQN1_kO0/-i؏ QaA1,*//j>WڎuOnTQ>oQ^QQÂbXP *8+ ŰPFWJw8!]`WGK0aA1,)a_5-cBbXP r_h4޾ntu{\V/Z@Gg?ÂbXR{~_Ir|~"9 Mۦy:5!!½|򉼤tVQ`S."/L6& dڞθglELΉJ3_q5{IngDm]?~ӟN K NܳAw1.tj˪Y­.mdtPRZy3!f{t bG:M=u#ͷȸ,+BjՑ*G@:6NZpz޲]5q}*{PXLl1Ε43c47/i4=`h8c#9BSqIqkTy.ofcRuXP>,ٴ!h;nO2}gpbXP B9I{͎ cCZnt]Ӧ,\%th3Xl !`k4Od'⷇D9LWori=}& v=9@1,(E9SrsGo\'M`F~L8 w`EnnN$p/..K#ЕsbXP u)bobϧ;x1MFyyyyRR>Űb 0܆}S]9?N)M aA1,(%lN{X9AAtMǻ@mIENDB`mermaid-js-mermaid-9bb0ed2/img/gray-journey.png000066400000000000000000000375301433273745700216130ustar00rootroot00000000000000PNG  IHDR" ?IDATx{]u}/$L$LFr!@b,m,ޞ=c+`RK[{^"6L Q0(!LHF  L$珼fJL6$3&/f^kk_MRQe8r@aE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&PT*`(B|0_򖷼%~zw'~|K^;6[n-{C꘲$˗/{Μ9뮻5k׮ͬYv뭷敯|堍UzUw޽_|;y_϶~zP?FȠɞ={C-@aE0"P@(̢,Vߞ{'sOvܙ?1cFfϞ3f̐駟Wլ\2{oZ[[А3gf̙s嗗"G| 7ܰwuW$ɧ>|d\>`7dŊlߺuky|;IȿfҤIe#?;/]w~az`\>o=g/L sΟfΝl5jTZZZO}}[nG?1 $"CꩧҥK8_mg?\xI]v5\ݻ79VʨQG>l޼ym\rIgĉI_~yx6?}-}k|L-qzzzlj)SW@w=9gy怏R췭j=>. E8v~7f̘1җtu+ {챜xlqM>}0qr%::kmmmmU]6ӦM+[9(P]vt{,϶O?=#7"G>{۞oꫯ>`nݺ/ q_9眓馛Y9ٻ[׿7 #N]]]>.g_^L6-[nM[[[-[<䓹;xѣGwkkkz{{Y8w$=ܓWIQF3L.ꪫW:~|9Ω9 9"a|lߴiSnfYdI,X߾}aOOO|_MCC$ ._$ܹs׼&7tSJ[n%rKrǖ<'2jԨ8Em}3fۧΝ;l򗿜:F=wy=ymݖWeTϼe@ȁ&9r 7dŊY`AN81o|vڪogQFxGo;vlo2eJn}UWWϒ%K8ƍۯS oxCZ[[Wr(W JR){0P:::nݺ<䓙:ujN9唌?k|ɬZ*=== 3v۰aC֮]38# ys˹[xLÍ@(-@aE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&P (Sz{έ<7xWV~p=͗+Km貇yzYuYWceG6I?g?>;̯8x5JR y>oiI`yE}?O?ӲEy_\08 HёKfÆ IN;-ϤI>?Jr֭;#Ȅ >Z04|?gc#HEtXPL;mZ>dYny>di71n8 h>S턉 4)!?C'?I.^0;rMʧ̒. ^vm袋d{Iggg2~R<8Rё˯1uu,]4[fʕu~7=Pz{{3{̛7/ӧOO|s˶mRSSIw0aоp;6lؐ&p0lذ_qT*/̱[]kkk֯_h}$p:P4iRzUY%_Krk:^s=dWJG?Ѽo=`[#O^KVgV=gU?XKVO^wH:ujOtMT*֮]<ٺuk<̜uYI$ouuuٶm[x≡{`9EY&Mn-_qy{,x݂ԍۧvgWdչ>zիO:?яޞӧg֭rqDL~8SSS|;I{7ٳ~7:+Ǐ_\8b*]tQ\ޫ+?Y OHw5wU*saIrg}o/eƍyGRSSSu{]9\y啹=sL.ر#W!Ν~8֭[s=W{QGGG.] 6$ٻ;H޽;?оkp:@#7\=_szW)]xfϞK" ~ҥKse gWې}YC.]׿=Ⱦ@qΝyrYgRCWUoα38#W^ye栯PܰaCjٰa! H{$'tRV^$YfM䬳ݻoW$y{ޓ=%/Ν;sw}*pD;@NK/?莺y|N;~]ooolْN:)~C3w${ՕG}4o}+LܼyP03ϟ,ܵوEJݾ+iApӦMٳgON:餜wy7˗硇ʥ^O>9(?~oqN89@qҤIWߒK?Zl?>*WL4ēN:)'NԩS;/'xbjkkCK.I/ȟٟHuHPcMۗ{[c=>3PLIؘ3<3Fʔ)SqL81YvmgϞ #!&Mm7ߞ|`|ڿMO>0>|!] kjj2eʔ$(Ξ=;FԩSӓ\~G>x׾=~wз<袋rug&ޚ/kHY;]erkM>{abttt9IzqӦMY`Aٓo=w}wO $CWST*{,]46lHw%Vlvؑ? T*yА1c G5S!0m鲇ʻGCB&M׿C6c>g455 ٘hpHPNE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&P ( &_a|85G#{N}JR){:::rߙvkξ!gLt}WzcQI}@uE#I~չ3Y9a I7?5wU*}:uĈSGH)~.K˛vImþ{w%w|Tھ46|{.袲 CF}@uE4dTs[1u,꒬^:z:bDթ%Pdutt矝ݖsm'{WK!GɿΪU9?1W`U{G4PxEGyh-{ rjǕeǷZyq.{+ ;wr\)!թ'PdHuttd'm~Tӻ+cGJȈ>#ܙw|lۜ|}C:ScTtҜ}YC/$mHξ!K.-{0TW>}$SYRG|@u`pR6l_M`436l({0TW>mH&Nz?a #N} c#Soӹ֟o߹g=|s,bg7\qy]p`gu4ŒxzYuYWceGǩ룲s^_1&]0)ggt8qAȠi~G{j>uSѣǕ}Z`ꇳzyG[`aS %^[2z_5ߝ~moJSE}x])i*(Aʎ|ww/ϋ?ⲇ3 e$ <3(՟p{}ԴUX6w4:/^~x0=5/wgjղ93g}ZgH>h#>`0[9%FƝ_[SX?&Ǎ;3FWiQj#`rdU~pw|آFT;p"ҘƼuw][ԝ4}ZgH>h#>`0rǎ4>Woɪї=l+Z>;wGYUyU?XӌӃr̚Sc?eOaÐPOȐ5_y5wWoj'+̷?s\e#^c'$?cYcjÿ<6ozO\}QC} J2xK&rԚ2]fϞ'wdKɤ&ٻDƝcG_y۴ea@ؿ>?3'&ٻ/Y[2"ut)q}s6۝~7s2}^]~'&~lw^Pwn.{0 a "?Dzz6駷'ٻg}Tc?#>ׇ:bGOw@HW]̜)(a?#%0Q R0){0jq9ؖÒև:hԘƼ0/,{0,@aE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&PdPLp|C`It. #35΅a$}PaFgj$ Ã<;"u{QC`It. #35΅a$}s#HLsaxg7#G#Ϝ9gS'd˖^p8͞}J:7G@E}@u#>ΝM;sβlw^FH 5JR #Jx,^a>:թN}E&P (Y(@aE(U֠:թN}@u(E0"P@(*@aP (BթN}@uS@( @aVy s"P@Jd5N}@uSP@(L&P 3P+P"AuSP0P@aE0"PU\&PYe SPT>"P ( ¬  E0"*kPT>: "P@(Lfg0W( DVYT>:թ`@aE0<5yM^җ/}iN?Jr駟.\ PhѢÎT>:1<=3P|&"1e}׿ο˿__ ;EaLp#P8B:1<Z6S"Bp`QBQp EaFp&Py T>:թN} BDE9 JrM7=8hp3P+PŋK}@uSP@(L&P 3P+P"AuSP0P@aE0"PU\vLEooo۳ytvv;===I4669'OδiR[[[T}+.Z>`/+88?"PAՕִzzzӓά_>555iii̙3T) +WP." +Vd͚5OҔ'Mq77w<-۳7[qSW֯_g֬Y3gN٧0,_@0lٲtvv&Iig~̘S'ˬsNɶҺ߶1k֬ɦM2o<G-+> #ӓ –L-K:p0gTdٲeM/_ؗhb~0P0@VX4Oh3HtvvfŊe.3IK.lrҕctU8֮&\ؒ$YfM>mAc~×Ua&ٻ> {|/ek׎$<{x|Ax⸜25mLkkkΝ[ +\7mmmIg?[?M];gk]_mmm-a,Z(-*{0,F:+?"PޞJS2~\9אSRT^ 8+p6oޜ$z҄sLhsCn̾*P`3(3I2y7ߐM̹p~9v쫯o 7"$ɸVmx|C^6`$1M1I}Ǔ'9~~Aw˵뫯oBթF:+?"Pܜ$ҹO9eJ}pN9e7Hb~Û@ɓ$Źm}ߑ/{7Hb~Û@ӴiRSSm 4>?[yoct彙4>'>o~mߕRSSiӦ} JR){p[|y֯_sZ۶7#_gs X?=};?~~-m̝;SW0|B̙3$m̖Gcs'ߟ+/g%+?dwˣs}̯`r" +Vd͚5iИW RSS_]r͵6fMw?_iN͇>W4~V*|+ӹ;fʜ9s>eT}+.Z>8Z_ csɦMٙf=i|>{z/ӺIK^7<:KM477G+0͛ŋ-IsgN_rA^|yJ-ϼy>M!c~Ïg(jjj… S__۷^ygƷWOv.\O`Ș_0lٲtvv&Iig ~]i]H›3o<]e~Ç@Q߃LҔ'Mq7&Izzz}Ǔҹ=57uO+ikkKrIKKKfΜWsZV!G;+84?bQdMMM;wn.袴gLwwwzzz$illLsss&OiӦ KWP." L>=ӧOBCg~3Pg(B(L%Zxqs~}N}@uS@( @aVy s"P@Jd5N}@uSP@(L&P 3P+P"AuSP0P@aE0"PU\&PYe SPT>"P ( ¬  EcVX[hQCR=7oNgggӓ$Occc3yL6-eJS0+ikkK'p'Y~}jjjҒ3gSV̯ P+VȚ5k:)SO2n챩+yOOox2[:gof㦮_>ׯϬY2gΜO`X0@!Օe˖3IrN<pce̘L]Ag~I_m [{ܱteX2;wU=γ%$I֬YO`И_e35;w)[v$I~y߻ߔ圖mcZ[[3wܲO`P_es"hѢEYhQÀAۛ$̳Oo&֮Y񳵇ܮ}0h|@uꃑ  T*LҔaLҔJO`_Á@JdBF͛7'I4\8#=il\8=a$թF:+`8 EMgggdbo`$1W(B@թ|P`%IzzzϾI̯@% !#]cccd'ϾT>̯@innNl>d}7Hb~ Eɓ$u뫯o  iӦ&7ue]߶qSWjjj2mڴO`_ÁUDV!dMKKK֯_uTm;w:?u$IZZZR[[[àթF:+`8p"j̙I6fˣ-nm`$2VST*eV}+%nŊYfM'4U +JڝYfeΜ9e2 *Pha~ 9s椹9[t?kӹ;&Q (@!1o޼-YrgkJ%w-ϼy>M!c~Ehjj… 'zϖG^?]pa>M!c~3R]]]YlY:;;$L̳Oq ^m{͙7o.p2@R=H)Mz҄LlqcM}}m7w<-۳7[qSWk< ࿘_CE% !G3jjjҒ3g՜N}p31eWSSSΝ.(ټys:;;ݝ$I}}}ܜɓ'gڴi-{Ò06ӧOЙ_*@a E0"h1>:թN}E&P (Y(@aE(U֠:թN}@u(E0"P@(*@aP (BթN}@uS@( @aVy s"P@Jd5N}@uSP@(L&P 3P+Ž){p4[amѢEe{=7oNgggӓ$Occc3yL6-eJS@( C]]]immM[[[='===SSS̜93MMMe#@`YbE֬Y)Mz҄LlqcM}ޫ{zz}Ǔҹ=57ueY~}f͚9s}*@Ea+˖-Kggg䜖y?nj˘1ux:l۾+mf͚lڴ)s"*@GGG不'sɅ-xC:֖G箟skwpL4S`(+/NOOOΘ61HMMaRdy}Kh"W*0 F=8-^5`_ꃣɲe<01Ijjjҙ9cdٲee& P@D+VHggg'4f~sgyBc:;;bŊO@P՜/e+wKW接+ӽsW<[\raKd͚5*8Y$I tܕ_lڑ$}~So8vOsZimmܹs>u`e(Aooo/R5_ X2}]yKRmw~-oImmmoG(<=J%S4&2uJS*J>}`E(U֠:Hy$ԓ&p gdB'4͜ grg7D?: P(AgggdbolږkǴ?17+wn??v| M*T>"P(A]]]zzzӛ1cꪶk]ջ|E`}/I7W/pf8zzzCeg(U֠:Hؘ$پɪmmۑyr~a3{?mvTmW_00P%hnnNl^~SU'0.|]ۏ|jC!P(ɓ$}lkvm˅rez/֮myPJ0mڴd㦮l۾k߻G|/zYwǏ۾mlԕL6fQ(U֠:HW[[_>igo—{0Pl]H%e> PJMR=QWWWn$+L<񹟕x(<=Ϊ$ɕW^O#[DVYG̚5+Ir2V*$ɬYx?: "@̙tnkKM477gΜ9e.#@dK}}}lߒ%wȕJ%Kl̓[R__y}E555e…72[~|+ą cQa+˖-Kggg䜖y?mߕuI̛7O( 3+VȚ5k:)SO2n챩Mf's{6fk6nͬY<3A!PhѢÎhՕִ_&---9s9j0P){쯩)sE]l޼9NOOO>innɓ3mڴ֖=tF8"0V[[ӧg\a@ @aP (B/^,`_SP0P@aE0"PU\&PYe SPT>"P ( ¬  E0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&P ( @aE0"P@(L&P ( @a?;3Z"IENDB`mermaid-js-mermaid-9bb0ed2/img/gray-pie.png000066400000000000000000000320011433273745700206610ustar00rootroot00000000000000PNG  IHDRݟ%sRGBgAMA a pHYsod3IDATx^XTG/[,IA4H X5jXƼRy? ٢QEc.bҫ ,o+Pva]s3sfcsLQh1? *A@ ^x u*A3REUY677 ͛7[[[ǎF@ᳳNRɁT!ׂo'UUU ?% h4xB@[B~o*y/m ȱ7`UTՔi4MYI4atjk6OGA^ESMaB RE)CG+_VuTgjj0 M ?l3/98g؞yHUԷKK:@6'^f_`bfAZBT!dJ5?:zFtu&9 ¨;Z5A7TW41RuuR6 H&2b Z&@@ @Jb7)mhN/}R^^^SRDZ1 dPÇ75$@ {III tu#Schf#CxncKz9THm~^[cDHoЙ*pll %KN/SyUGU mll6BZ:2A z p΄֍ -F:xĒ@hqrrCM/`ϋ}vII ZڹYٸjEjH_TF?ȯeBwww???OawP1xU(zsL6 &Gۣ+UT@DAUS̸|a~=yWҋ\CC}Ҥ@$\zHKK];/zTSGDTD<m `QwΜ9P5 T$rzr8І<*$:uӧ˱wz6^N/H/]gg)S݁@VEa~ӧcccAuq UmGd's}||̙ρ*nܸ**tW@c U@;s'sLifϞ=`^6AK.p?c&|Mj>Avxt钻wnQyg@G:w8\$V+I9/8 8O'DM>|669Nk$r+dR\8k,&[ !rJ %%qQ_= Alٲ !ߪVӾ}, }nqEP9V洵;vni:5cUڱ}Ŋt5 ߠc&`K{=MXj tՠǯ]&=rLNKU$%9pY5pI!H3]S<}8Mͻv:o*4ɟ*r&jJ0Ui;/WY&;3Q9SŹa۶m䯬v3Lr09e>pÆ rˍ*'@{Xϥ> ڡGv?+!>(VN~+A ӏ?P<UdV̭G8sTr@PK<}AFU LljNE򄖚։}8MM|vB!UܸveΝapQ$&\YE9>֝kgIBN=g̷gϞQVPE·ac?EEoqȮgEЈz|߭q[cYA U\q1ph5[ ) =lAEA*"o^HWhSeYO$^< {fsY *bc۷4l'2t~Q>s0\KoߞDHIJرch %mCC'vOс í%~i:y.Ԑ*23l۶ 4,|GXzCywj#s"& Eܶ퇼,*daHM#fªEylB-hA{ۏb㵀o˳B*yd%x<@*,GyNVqTC*x%G9X444ap+H*hݻkkk m\T|hbcU_[(ehLu\.B_H[!!!lSwH^u:*x+_ucoΞ={H$*9w/r8;I/s t N0 $ҩoCc]kx9qJJJ:DĄTTL^s3GdWGo?{9B6,x {Tc'+m+3hf~s#͉w4B[aIo}Ovkd!6lXpx݅DTzxnn.ؠc0C܇4Aͬ𛏏}#44)9-I⟷=X`vUY|5c ޼VHtV7o0:ZswGx|5ƾ6h{ n!}ޥq?8Gߥ%EOį x4O- h,tFboAYwxg#$Rx( F"'⇕s$1^@}Dg=e1NlSΐi:iYƄ(x@xs=ћt6 =OvUVx~X?ċKoaCx.Xw+z:\! ͦR/kOOLXb*/ͧO+ B4 k]4 %NU[.fF"/# ޷I|xZfۇ6YVިJZev-?- >ku_3fLVFeekĦ d߹sGAA^Z'_X6=|ɣjʰ_?mK?FUSDP'4>Xc[<3~w("HӸw^?W*N:@tΠBZxe]M#!'<3zo0)Ćx u4QV"q^s%zZXeD6V j("T:i%ɟQ7Α Z꿾9|<#_><2e8ðk!X}vsz\ &lwIG0Bk9,xUV=n8`3 Uz̝;~G m 8ص5/T{k&'p4a{z}fuxLaUVe:v>tr; ^f13_ S\.'=/k,FGA㟰?%{BBbh,))0RE{+ez}+hN OXg& @go2ᐦ”k 0QV׮&*"""TLP+#o_ K|'p/愈r٦zv׋]і!BߑYUU%jwU@G!kIgQr t/^]!*sssյF$b#! agAMB\,i>N=z QsA a 1z!x޺%_}QE~nvRRb)9rC0ѣG\}Qt P/`;rx@"C6#Ym;wȁg(x#;=DPZUq.@WւɄAQ^q.hA .ZJ.7)!4ȪwxrSS(7)Mu5U S𽧷P[m"66|DSEPRVݍ-?Tn @_Ta8X$h"#=yTے>%L%* rssUz֤i2?Ӕi\ 򃛑"=-4uykX7J A}< H}g4k7&ja&E),*23p\ܝ (9;Q[~p2dU*ISWdkC@1g^@oX<{vª"%% *@gxfeekT|)J*d5LFz꣈sGHzXj;I`5zQE]MUcc*!zIu6+`^>wT,*J anzQA/bbrT"XX=l]|\0!RhwQA&*xSD +D'hDobϾ 2BBtlGxAՄ ROEVEG#JJ |r!*.6@;) _B{]=tFQI?Vb_w҄*Z0L-zRJ*^34w!4"(t REx{t+7gzoIR~q:$%)E7=j˻Y~0>Q{; K^I-Ҳ68L'+((/}{{;x*"_!y;oF666B u K[Vdνů vq#n40e~Eܛ7zI(\ 4=GUqCE >=@ ]ׯWYjEyy?Rb&ĸ؋Uo7@HOp8!#MWHq~dhe^WmnD:xB CyeʒT6Rcgm548!!J+zhJXuRQQihF&Azai!UH|*^kSc ^Z]N"$Hy.Pb\)/miC]y^Tъas[OZ:f+"MINo>o"M ڎBIUݪא .܅Ԩi¿ڰ -BB1*J5/줷R0,U/~f,$n@&Sc+I+*DMP4UPW] ?|MQ:WR/5m}Ww3 |*Ar  br%Tj+9K{s{qݿϝXW?P߹4[צ PmȊڴr =ʔ16 WH W+zxuaNqˈd.oݱduEXߍQꤍ+QҼШ3{a~q*< Y]zP^!5DFFF}Djcfa !7]-y O|4Ӧd լw6~B dai@fn5K~a@2PCBj+,M*/#h_nmaYQjES5t[4 ~UTgbWp°z|AiJNô؂XKv0*GC`uWp#;30/]u48cCfEߨ5ί/fjk}"va8&۽ppC5}QPEG0aRX[%)Y6 9upmm Z3lFȶiGV?KKV(*[j<1@2F ~sƍSjGCrB5Yl,m AOc_9nǴ9w MK[GK.m­_KEB۷i'-7]I2w| tvs y5ZH*<,N= kz`uћV&y4Ք0:ǩ#9τ aNaVB !Z; aaa"AfARԔ w%|0̘A0{h)#'ss$Ig] %G}jcٸ{n9 `hk'Z %irOTk |4]kwx" CO& &U L 4%a5~PE!R`EWH\n_#(pԿP|6 }S[ۘb.EMz}Ҡ)ӚZ[u"mRV(&.$* k K`!ԈhH,9::k ]}64UrBrЉ QBBU?/o6" 2R(4 %!mÇ㷅tPpqqʌ\EHuMt҇/ç<+s<!v7WH: __Utlmmt.C|$Hx>wJ#GgœEHZ %)z ªEE^(L43+~pww.V#sss~csUViBH EPb'Yu#BKG4uAT: $C[KQI"wF a'ARtPU'ڽ-^:SmTajnpx5h!}B|6jiiYؑnA2JC9Qc¥PWYT %q;НFE\zn1Y%Qf^Ic҄ IW[Y|Ĉں&`!!4ȥP("׏d-(䢏H VU7꺏Q{EdU@ADa᪨BB@G1F8G*mܒM,@"OBWv.$.@<<===ZF p;l=Mh_@U(}TZ*IBܨ]KBqUQm#"*0ȿCPOT Erbʔ) !N*}}&2f&*:,?*Z.@T OM:*zU!VV>q/;vE7A__YYJiB&"^\\heeGDD (I'} _!"( QތJ PQO|8+DŠ<{{Fz&*̫wyucDSR;:Q-u<"6U5jT{k[敻 oTE]`ȑ"zz0|VQ84!Z!*i}wJv!Ut((;mt}}`׻ UtMZyYbb'DT'wC#BTRN>ۡE,HJhooPM N"&}K<ʬ3771kiT`劊%q&&((*[jx Ap+n@]x1ɪcdb H;wY4"DBU:{g-Y ňdU=n8x>wA%Nm0aB`xh/W ++n&Ш1۝I6:;;#$n QIŏR!$䢏zt 3 6zj$ e@#ʧЈxQ%[v:>fRRR`L`4gЈ&x"aON,\%T9{ѣZPH ңA>oo%Ik{G```N=UMܚ;0t}0Ѣ W`oodr$I nnn^_E҄\1QK:~B_~=,K̸x"m,{e6l3 F"c%tLkjFhRAD|Gx@*c?Ⱦ NᢏA+?.< lh>PQk׮ Gh  -|ǀsu|2*x? y:EWD+$FFYA!U_Fǧ@#3P}EJR:qFK@-U  Ѩ$zb@ /Kq)Ϫm&7*槟~233/yxDU>o=aqGmGla%DI]СCGcSsr@PQ#ãycSȁA C[KQQEJ䟈m7ymGްi="PT%{vZ+zb .0C~i>^ uU|5Σhl>4}ϋ&7;}lhTW`L`7|fg>ɺRr`0A'NP UkcnenذoWK9Pvvv *b5~)_]K,ks;v:"h}ü6qk`Ir//ŝI͞=zpȍ* ,ꫯtuuyC ) y,Y\xRÌZSS~i3UGٳ߿--zKƁA^"O%斟n/m?~<[wCGTPRV]իW!GR] =b? _d0֭[p~\c"ψ#ZvZK݀r^NGg ׄ &q4$_6[U$J]y9_oOYBN%u'}-Zh܄I._ U*O8q.~7C_:Л"+Y)*&*q;441f͚_$ U@Rl|3uHJ'I,55%+z!dbNj)>Q`  ȍkW6g^4UU8$2kEme ]L"Фܛ5:3g?5PV>ɓ.\mu5 ̽iJpTNy?5Ɋ47=&恠tg̘\m<0U).F\\h+ͼ{S&#};=}>dbp}b$n@]P__J$P-6UE')I >h6ҽ I?ʟʘV ^e R \Gf&mlcckkei-u۸ "M&MObooMdN*^0ʣZ:6@6=~K p$h(=CAE<֋`URE&%%%&&&@L8:<̵,d@Bf|\_Usk{#ѾUM-@ ucJAWCHP[MHH^26`鳌YF KIۢ Oi \ %TDAAӓcDj U]DRT_K"_ko{o^Qi754u5M-9881@̂% TGZs^ PTRkl&f5&nQRQ&?$:g6xr?cr.oh*o.eP̩.H s\T!z˨4i4EeMIQYYLע[[m-V'_[odddbzb19Cn9HAkrـO>_˳~()=$BRWW% t6ܼCA7P uBB U T@R*qel vIENDB`mermaid-js-mermaid-9bb0ed2/img/gray-sequence.png000066400000000000000000000165631433273745700217330ustar00rootroot00000000000000PNG  IHDR4PLTE֚RzҥL츄ORLRzxOLLOzOzLOLxҥ֚xxLOё33mя33nn333яϏ33333nn3n33ϏmϏm3n333n3mnnяnmn3mn쏑3mm3찑3yyy888aaafffLLL444CCCUƂUƄRRRRDŽRyUUԗNURԘK祂Ƃnm3۱nn鰏n챏ͦMMM@@@???eeeYYY```sss׷xxxrrrGGGPPP===KKKVVVNNNԙpRRpZZ8}}Rp8ڭRRZR}ZR8Z}8RpچnI4wIDATx흋uWk206~Ő'^ikvlc%Ae!&`+}1 $mHV8WWzν3]yGs`I;;3{Н\NRT*J՗_CL>AI9ki?֚]u䴮?{Ts8̑赣VHsYkCvMbk9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9XRl)9Қ/#˲2C5C_8y7Gܔdmr4yAZͨ 4ݔB*G)ٶmwXh<(~Yy[9j1tgr?l 5)ۢEt&Gyِdؼ?`56to۞ioy{7at1z5 d¦s.Hgrl"h.~ =c|`a/Pի6M 41Mh^P A",4'6݄f(UOMN2?$hr=6i޵043HƢL`^~~"G!`mԋJyW\}=f.'xv&]=jjWOYIRr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)RrzmI9_kGZߗؚe|ZbOnstG]ץ?5iRCMjbaRs X¤%&5-09hIAK,LjZbaRs X¤%&5-09hIAKmL'rdaبxJW(NNwmgcQ"/h@{`'9A3sBk]bh _^Ghp̀ 7LŽJx}vݯ ?~p*8iW_^ ! sg"7;WIXhoTʕ'14@IP7BCx6@ ж8YilhCv8"xa!pFhnHXxOSAS7A`(tM}012p+O % 4bw 9.6ƙnf;6$g4pm!#(;`_̨[q?C8N`'9:z^WO#]=-&7 ~rة#\؋/>«'|fV3Y;RY[JLfͧxs8dMv'anbɕt9F9X\IqHBP,r0}N}P,r<[Ģw}ϡ^;(4ۃ4L$dbDXM&^rIkRLjZbaRs X{c{p0y陸8ӽF5:4on.r̦d#~r&9șTh g2fhexQ\.w_lG;~>ǃ=Ox^]dShQjh"JV桓GCnlЬF M4ܶȕט 6>l.`?y?yr<[ဧP5[v ]~>Ƈ۶oƇЃ@@@OǎO'= :h˯X+7AqS<`3B_ O? Mև>ǏF'Whl{a1_@s8 όOМ wS&ԺE{G-YD[h,fCB4;D\.BĆG/=48{ ~hpoxĞR!jRx723˿Rx_ūC`S49~#hí>Th\MәAADWh4_~'&q L,Gl M6rXltk:W9fShDpMm6FD9fShDpMm6FD9fShDpMm6FDv*'My^]moZe۾FGRJiΩfh[USF(4Shj&eMl)дSM뗊v]ʦ{Ž07MI4b4so{wŻmٛFwIs9M|ᱏȶ Ӕ̍|'+ = nĻyFxkplxknif3^x/q8'g1yOWrnd'hlԺy7O~L24vWhFh}& G*<ѱ8n1*9IJwUh2RgTY!,9T&†fhrܴfNN[h,14P }s8>)43hh&hp 8 AxQM[?zpL#*M=Aи74{['F;}@AԾˡH#xk 9S<հe욚- sB- /ko\MeZ`468l _P2)-z q7?F=X켰#,G{ilItީiOj9``)4vh?eٚrT khpMUǟ=$~Mqc濱p_:%B2a3>7??A=w֒8l /=O Y2ҿy2xy{ ᮯZaO񱉗'4hs#!(s%盇'x27ρiv}UBCWzېfHyl:h[CB񰧩 ; U%,}94K14Y1S// 0 %#8?ùP||e I r||DpRh*!48ek¯A)υdoFOsT]縙:)4tEKm?ThhМBB}BC\$Rh(HPlfRh( f&BIPlfRh( f&]>BIjPlfjRsP X¤%&5-09hIAK,LjZbaRs X¤%&5-09hIAK,LjZ~߽g=f* rD,rtd՟ʥO'9n89³ ]7Y5T_ɕ}t=DG ]7Y~D`eJ4rdMgs` `Shdhx~njGTQhDIE i8Y4rH,rtd{jTP9@xZaOO|XdշLvJMo%~8V)4s09hIAK,LjZLk#]],r}FCXع=we>=~=̠؝HqUqjR'JbC'´"^r,LjZbaRs X¤%&5-09hIAK,LjZbaRs X¤%&5-0Quڨ [C{9ɌrzQ&.z.p.&3ʑ54UAkL#~p*dv.\fǸ/\4Ztv€CpUJ.\a_\p.&3ʁ#@.kL"HqRK]S!4qOS+~ ?uܮg|WON*4 3 C1(s r2I;..͢=Xr( B8% By߿aNr^#`w}ϡ^b+44hIs$N5Gb%IAK,LjZbaRs X¤%&5-09hIAK,LjZbaRs X¤u?v'ٸDϑXtCcYFIg9 %4e\(\=8>HbW ( hUݽ'׹$AZ"xBN] fJ!%LZMC8L7B3sp*\>8izhpѵG Y Cu iq,4sӅp>hpѵ!#c0$vf1O;c(-[ˬgQ]+4Zϳ9I79ՓYv,=S[` ^=)4a4r\b&{v´]ŞgKd/s>f>3 m6ҥd9q|t#u0Q NWhd:tw_shWijrDXM&^rIAQ,LjZbaRs X¤%&5-09hIAK,LjZbaRs X¤%&5GWԗ_]w]Ns@>y5}i]p#?kG4-9X׆Zi횤s0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr0)Rr594 _F eeEj.q6n\)Hir󖭃 uMAQh)&U:RBm۶ yPm=6r,=t՞cpykREL!ɰyjl޶={ F7n4bjN1hȄMc]̑VEЄ]zL5 4>-_ڡW=7litc1`YCc+<B%@EX"hROl PHG&;d~H4.zm8 QӼkaifE&Fa 4&E4&Cڨz y{\WOL8zzԮЏߥ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJ`aRJP+ [s8׿׎/i54П 9˯!|栗CRT*J$gyIENDB`mermaid-js-mermaid-9bb0ed2/img/gray-state.png000066400000000000000000000275121433273745700212370ustar00rootroot00000000000000PNG  IHDR sRGBgAMA a pHYsod.IDATx^}PT3IL6MF;ii215cdN6CmmMMKĨ$1(ThxAPDP| /Ȼ9.ٻwws3z9=9{߽aP* TaWǏ[ҥK?=uw0 6m'͜9s&\*\ti޼yo{ T8s̃>JcݸqccjkkY9۞|{}Q1 ˗/g%c Ν;Ν;ܧS[hh(iF*<`ߞyӌUhmmeCqhTBYY+UO.3 U(//gE}!1 ===H=y)ƹs粂u[d iF*u۹s'iF*ܹs7 pfTLvZVl,\= D*XrvA888}1 @_Vڎ7Sݐ1 e˖b-_-9@XMF8~Mj0j;o,7ç<w6ܹ@ԝOssaQ%M{ t]2;3zU!ym;9}˅T|ѥ Ck*ˆReEK8|uTh?7-7 vUvp )Ґ< v>M 040yi+-P}gNo߻UiPUJ*=M\hmpp\LЄ @;d ׈W{3>:S8)7 DZ77K.ekXdTAP@ r ^UP *F.G_ܜQTQ/p߬&RR6\8'$k☒-o dH*WP lJ&h,H\>D^R BI„TAVZaAp X_+Cx-DjTA۸V$~)vQ(u\PPbvIʢ_vlW^/c FF|Pf3dYE`Rh朲fJ43XHF,qaf e>, @sSʆa9/% 0 7܉TWA 'UpUWlmAD/+ѥ[ ' Saq6+0Vq`EkBƹ$aޚ+M G~:٠{TA%d v|ٙ,ZT`r0Ŭu1s~!T]J,)U+]3UP bATUP@+ @;%ghљ Őѧ?o @;ŐnopT=^v?2x]=A3:]\h0OsS)\FTWpn_r20::\[ONBCԔCҴb#ZPStpr!9ѷӯ^R/9W[[NƷO,R㝙[Ϧg}OcE9wE!|᭵} Z?Xv:jWz:3/Q>@0P* TtJͩP{_lIi<{.--J֑ˋT tTtFDdkuG˟kHKAz;K9 ӽ?v|[՝KiX7M6||o#ͯk^EQB~'@Uql ߫PSr/q[]k7R!a6h !F&9<4[!%·U/UOeu9gk)B٥n<+Hyr.@W$z R,WπؓL }I;:d_qn'>}I"2;D,%}Tjfoˆ3dHK>PbS"VxoyUUBJȦ!M¥Gc3"upAܹN fBi!27r|Hi9ԲhVŴ+Ҫ>iT"9-.BC {EhCCpE["PLb ^&ˋHmҽ}Stj4*EYiFTe+o¹)TW~wm}P듎5IU!=YCu䙻&.+\c+Od䮱H#9*&U89.vi!8Chp^CcqIZ^ PJz95=gN*j.[L nvmAhMZ]R.ETu2ۥ5߇;U<%”BB|Uyy&1l .+(!v@8@O=9a|L]΁k3|}*յctcZpP5V{F*<Ч1L携Pw4aM]!-kVV>*N w2珑>ȸBDoU# ^d4bUEMDVRZ'*+$E?"qf :9yD {*T\#uij߀v BM5)Rc)8V!IoVٖ@FSi e-Q2QWw$7{J+* nuR}dP]S|*1븡^_K-tT 040vrNUz^9pՋD׫P\ iq#h+|ky ޗO*>A }tDvr m%l}H0 MY*ЇOPr3Lwd4mȥ{Y*ЁV*O+_6R %z*Y G֗ |MȠJB(ky_ꎃsW5'u\@g̞;  *#rľw JwPp9 BoJ^B:avJո2S068xoL6-JOL*TmI҅ȝ߶i(4={ Jҹqh|ސ*'53 V!buҏ8S**w+> P7ßTå{g*d"gtqۖ~>q%EUh%}v+~ԙ t tF)ɉEUAmq@HAZg|T9e.꠴ Q* tB-ңpbJˁ=}x܎))222UX 0nBAlXUa;@pz*)u}䁂HQ:^Ts0֡ W%( G+j۫ [ڑVNpڙsV A h- WN#B0 Q\ɎoX垆J&E\UDptjUKp*i˂\QH,W(N⃮a:/w$}W9uVԑVW} J]hq0B_|Zϥ+ QN’_>+EVЖ"܇x:ͬj?Hia Z^Ai!^a=oמP$ _ӧ&i %Z}e>LBKW hKRgu!.ew4OzV|<-*fp{v+ aӤJa#(*O#i=I 0M&U?&B<ʋҿ1 us[2J#Ba"Ať#K#*Uu$T8.ЩIhP!9D\"bx$THZ{m% > lCB=o[T B 䶤:ClFW|6ig٤Vs*t4  U$!M5U#._D[Nn+_gil3ֺъ/ lg7M2c$'UhMŒ>A\Zd|ksX{}s/VXF1ygVVj!_( iR:[ [ 27 zѤ*;\iQ&HX[$E^)4U0$\A䪐CpҮW` rU8`Y䫐~ss&}?K&EgZKW*hj=5%BSr??Eۯ&Vm_*M&MQ/gS*KVcv8"[R@wXK :]< hV8 U(fR|D% J& \Pa'e`"8&K{5b{|Yf /n)k/&B'n]!$CM\`p,e9K_.¤$;g^ʒ*`_q\.5+ '׿ %l65+lK {"!o_beǷ_X*D!UL_]LC ]fPcpI  ${VĖ GZ B ےʔ xpʸNsCN3G3v*<]lmL ~VH |b5_(\!Arg B@ږ~3VEd<'#o;V1XJ8Ӛ|7M/M^ I*!mBWmנ Y*%3Je 8!hȊ9'YeҔڜ'G$ k&?$ ^k E IҀJ \# 9蕂PRA( 8U >n +, Ax3PX.[ $O_ "3SʒF6,z /7Li8U`Pa"fd BȮ~ (Ʋ',]` -,~qW*YUwA2T`1d\&\#lXG$-Im+T]v6ٕr+TZ=KkmW)]LB½U DyNȒ9_M#w 6Δ5B=1 CPVlL ݋I dP]'*掔u#MBo|͸M\谕QИ\28@^p5<+g;0Ť*GHF<2 qd҂ə7̫BQ2.@k8]4U\,!GjG2EPE|- $~|稂8}- j#?Bs6kF"}- >=Q;Y*z"jK!πrK!H * Ta U@@ iE|\`se*DGi很KPg$Xo?Y~cfvTTvD\ Ew}UUiu*8$}o#dĔꢳh3Z/*HE+áu.up*ڬ<؃*HPSlZbqs2*)$A$HEƜ]x; VLCҠ ],UX6mKMS/=RBz!),SLU*N5DS8_1uj s"ڄR*d IbCZlKB>}b1%\ɘ4FDTP~nI)*nMe)*]4RZ0bFH*9*$Bq1k(K [/6U]N(\A?f!Pϰ°dо a d@VXn36l+{nSh4^ ` FTTPV0މ`EXTd/A[f= Pj$&EhڶՈ[/pC=*x*oé͐% mDVk#B~Jn.yV %j:CWV!h+nʋz 6syG,C6rQiN'LY@T vU66q9;r9;J"4*tS m\a:KGV&.T@|+_W8,7Vx&-!7/穁<=G<4FǹiR#Na`.dghʖnҧ!Zj㿔x _|Zϥ//v^˖>Úq)i-rD牸D\{ݛW,r nZFSڜ5v451~&^^KT߹w-x;4ȥWzܺ"p*tw9nc ^naʚ1 @h-t8KG @{+s鈱PP5#!Bbx NP!m1*G$TȎ'#Oxݖ 4pPBU\:EkȽ( PL'eMAB*ܾB8ť#^D*ԕ5R2#^D*7Ӧ4P^/#u V -OCTX7'T&s)uVaHT\=GU}e!/{XEUH&}wq鈷:, =.i 0KGŕl:N.݇HPN3, JCs@C?6i&#H)$ayQCUn'c߫oyBCј @*8~ˤբ44>ȡ iQ؈P5ZKPAMs6aFt{F C}9[pO|x/L4xUD"ι2dPk=xTYxW/C6zԙ J].G["VW iL6tǰxZ2Iʮ.8S8 鹋OJyY^օ B&zjYҶE`.T.Rbh`l窊 Z,B{cA*{ܛ fǝ {o]TrfṺjw,P+@T?{ G)nAۣ'8dOGhcD/{{5e\v`Vq LsU8O{$k)Pv$}CRnN-%87\ pup $G4@bFTky85Y$nX5![lw!  @M= U 3ȣwYR9;Op5'* 'k:ސ*M= OT*oebx6or zzC38.9; F{BwgջVWeZӡzlo{@WMǑ 4b߫*Rw,Sq`?Elo5Bg3=xwEVf/{s`O/=UhGn*ukp^3=LƟ%t1pe(zYX@M@nq4HVwR:mflq?uA@v$hr.p]0ҫ@6gsaY”] ccb !V=1Ww#*%)1QxWQ"VWHvPDvyR{{2̥@-bLCUAx7RDb+f.EeIy'!=TG~^1I-f.\\@' k. -a:`GY]$T)hCR&3 ڜ+(@G{ `mlKI$6@ =ZK)7s*@PyKYl'G4gBhz|;)vLWYC@q&@7= e2].頩 m=@1] !Qv@C ˝| ؄E/$f-yph#g:ޘ9x 1/" }oc@wV T~4qrH8U 順 ^i!`5L|-:h TsFe|P* Ta U@:V۶mSO=/bpppZZ00]駟>~~7(//ވ8Ag*$''? 5uRSSKKK***rss?e˖`{wO@'BBBh/]̙3^[֬YCo~S__أ^{5(x ::UVVn޼w}G/+;;P\\»x E}~z(G}Pmmm?O_Z̟?hAsTHIIWE =]laaaԆϿo'#@'PQQQpB(hYۆ ]:|[߂8qpDD*ܹ^xDž"vc;tw>Ѻ ?ϠPmwgφrhZ"(yAAVWW %G'lܸ^;_A(V?[v-mۄbdF&|- P4_W(GBA.]T(VVz׿~Ѵ -R_3gۅ ӟkA@*@L=پ'ٳP4Bvv6PBz'ٳ^GhZVo߆|u{+//?s:55E*P~ŋuo~#GlѺ <ٳgzwJ/ϡ]vph]`֭PO>dOO.^CWZ":PB\x ؐN l7n#a >ׯ_>E*@}3@B=MZr̙aÆzѢKA B||Pii ^Ja;v/~ 8ܧ!Fڵk9[o>}l6@G E( Й @aa+BKn=O<bI~~sݷo^ SR^^e˖%KϟEvv6w<`K?D Z_RA+ U@?( G豨bIENDB`mermaid-js-mermaid-9bb0ed2/img/gray-user-journey.png000066400000000000000000000770361433273745700225740ustar00rootroot00000000000000PNG  IHDR-m}IDATxwxTߤBBHB-tQ^^{Q^{.(tJ B HB`<>2g9{̚6`0N@eHZC"i 0$HZC"i 0$HZC"i j35b0 -]T˗-ӲVfV7mf֯_@5EnN^5]6oެ#)`H$-p^]F$;N}>qhedd~ڹ{/CWZѣl޵K&I]#{_yww7 Cp^_N*--/|2TIIIJJJ%v%2/Ԯ;-FպuX}-ϝ;qaʪXV-bAumϝ3Ӽrǯ%j C#iھ}ͶSIII_NٶFZ\_/иC?``$-plڴI6Ҵ+y*lczȅw>)zɊww~'uAwWCpެ"0glӧysVؖDEGGKfLQb}d2O>>U/ҥK]\\9_Nмy =c~כo]9L\^j}ܤIS=ē۱}͛M6iӦx>|XM7Q֭Բe+7^O4{L㐐P+_iSFMIQz;vVknNx1ϳ~ 7޽Sҿ*>u?~~zͷtQ޻ڼinݢ\5oL-[ҸK_?m[i׮rrvVxx:t={'WnnYs*.]*۷m? 6hÆJMMUպu;Gܹs`|bdõk%%%3z.\`s|.]-7ߤiSlV~fΘJ7L˯ۻԃߧ_~Z?_IҥԤijsפ<Ϫ|=wƍx܄kѫ*;L}gl͙ XCpެ"ڵkm͛7RˇA6UҥM} q~~~ /XoE6 mizG!8++Srj]KU ֭h:ǃW!aѤiSM9[^^^~]GV,IO?XO=D?Q#(aN5q_ tzj̥{WkN]{ȊofVy  _gy;W|UDN89Y7xV6Wzi<==uU]CR6fL^X<c%%%Olj96NeqaK6ϻ?ցCIZr'Gyw \$-Yk֩73st=$m>>9{bbblGJNI/XTAAAou0鈶ܭicl)--y} _~S֬k>/\ϲ:SN5f8m߬4INтu6g<_^Oזm;tP6oݮ4g*ô6?qc캺寧}wuu<==kZj9juTI@@>SsN뿷l٬"}y⢽.T?>ڱcjgoOMzZSR4L&z[oФ#Eg%KB'qm_nSDW_Vhgԩ6uMs΋CƪE˖6F+7W^|?eeej̙6ۦְaC۷r%T(8s)"~IǥiSUzY/X~}]_E¶۫#I>|;fm Gp͇2j0mNIZؾ1ڵ}I׸Vyz?7'G}^~i}ǿ4+4h`-vUZ;ul/I4mٲY[l_8HZ(Mp5a2sfVNv,YlKl;demʔϬԂ_}IRrr,|ϝ;l?xۯҚԪU \vڥzYtǮJXO-YGHҪ++l Q?rssumcǍ{---M/<7kv^~i+-OXܦ^d)Z~ͷ&ݫ%[eѣG׺@\nnvޡC?&ief{6S(BBBte+L;(?I7[tgͮCCMp4B͛;O?0ͦ&BNm1YF?`Ss" PW\yqFFFSrPFFQQQ%3*k߾}"V kHRVjԏ]vV8oF5_}̑#GԷϥzQffF)7hر}Lz1i6 1ҥ{{"is";vRddz]zcEَ ذaCp\\\l}H+jH^je w>6fΘO?-;m?05ꫯf`Ig5b?e_ݷߞU].fۢ?ЫЬ34o=􈨨(֨CUXsjܘo 4hnݻ_jذa>xyyi 6͝4-_HZ+?*Bwh/Iӏvpe Iz9965 $K͇SG+Hw~}Km_{g}]'\pMF骡tmۺoP|q +333O۟eA.]TأTB; x"]wDM?NRxDDDTV>!P]V?ּE -صGH~EoNwKZ/o4mm,::Z]>I s?7$iĈiּ`+>[nՕ^Ѹ\bl;99iѳcY[u6ڵͶ?P3xugI sfvo__]yJ;Pgppp?`5jtFY#FTJw}OE?Q_KhT*lkZI1ʳ7z[ޭPsٚ5sF[[7\-իVZ_aDǴSϸzKe< P`VWr*[lXݷoMd2隳K$-pNU6Ce&8q&I˭.R~J&I7|iTsO)s7$Fb7[|'''Mfb(_l6{))YI|m- 4ή+y+0b+/׿nEEEEm{Y&h䨳[5ץS+u5zj%%%߸>^>1ruΩ,N-ySxzzjd%ڷPa?k+N,Kg2N[){}|4lӞMc -21`:۸&=Lsw,СCk|={tm8IzuUR,""BosA\]]+$7~'͞5u^i"mѧ-& I SYttvjժ$+PQ"##dmWϊS@zSiQóu=z0T#FN'9rd>0vYWҝwݭƍ+L}T/W_W:-hSR H>7^s9;;W_~{cƎ{VZkWa2%%%2Ole|%H6>lJue-ڽkZj}Q7nPbBwX$J^^m۪d5mTב\yyy)++S^^rss>WRR&Wc-Y.]U%%%ڳ{v٭0hѲƣ2g>|XcY6?ZrrrR۸F_g믽j}۸7m9/?HZ!͝3[L89O{&T:גŋ5z}Ͻzɧ^aY3gkm,_Jqqی?~\W\~֬Yc3ǟw"ipAݳGIII6+At{ۻ8ui•M6ըQվ}{j۶ڸq O t!())Ѻu딞 kڴڹT*gggmٶʕkp9S>9///w"Σ\sJw0 2G~}.{ﻟ.9p⫯CzzKk|#[oۻѓOMw7j!i/׊+װaC^>lƞq(++`(ohYwwj§~,PDjҤFZ XVԎ;sڹSEjذ6R5xKnNxC@Q.i/nHZC"i 0$HZC"i 0$HZC"i 0$HZC"i 0$\8b͙F}\u55|X8D~ڬI.`m"m\']L9yf{wÏػp w>X?<ȂOۻp }ow7ZxIbbO߾ uN.s 8 ^0ɗ܌<{w;K>hnPմHNNmݬV-)U[Ҫ)V-nVrrv@uGu'^JǏQmWO%ޭNQtZ'/--Ujj\hW3gHNNc4xB_uۡ}tA DǏъkjHVV ؾ] >B]uyRSRz.^SPjzȤIOC6U&,NեouF&=QRSRҋkS|իw*)-wo7_×ԵZHNN3WOVAWS׿ɓ_h9sf)++K].骛oUNN\ZGcubj׵Mv]h;n\KKK՚ի^gt0LoۺUTTT;ojڴ$wO2LzI{@R _Ke6աcGyzzV͛}6*^=]Fou,ɤEٙQYr=*IWJ.2DZV˖ q]6xF_=Fk׬nV{_B11y5>.#9K1W4q%%%˾~ PrrRR,Ɏ:}Uy}UUXPXc qf۷HRSSNߖ-s#L%)Kz Caaauh6}ImztV_?\~:V()**ҷ_-٬yT/nJ-)-ԭ@9y+ZfYY^ڬɓ_U[jڴm9ݲy6oޤ IӦj֬$);;[T\\l]=0*SctP]ݧmkNV,ʌ=Zo.K jڴҴ)~W_WDD'&j_e24/֫h\]ԾC:}чjּԣg/{,)zKvՊk4izծkRYڸjF]=Z+VN9$5nD= IF{Ɋ(--M!!!rss|ZZd)oo/733CnnI;8ݻ޷wD+'ٻ T#-NƝ+""烃mT' Y8WHZC"i NkZBHdvjժ>3I>ƼIjժnz%''ZGZ^J&Tz7ܽl yѳv. .g5"99Y&Ԉ44Ј4aȳqChxmvx q!P mؕ^Y\]櫰ơruۭ6S}YP'qҳDor}{ё#ïj^ff;u֩M8[Py_B\hL&nenyd2I9GJW86Zj-[Rip}῵a> rҨPM%I2ecJ 쥯+#)ޗ g#-5YjsZ8x!p*--noyd_ޫPi׮*((RէOncҗg}ņ_Vc)9JILLRܠvLN&{_*ZXx: _锐{9ZxƎW6˦h]j֬fuHbbvԬ3~yzzq&zX4aܥ2J磏j?T!!~7+=ɤRsڈmv}krڪNeLs3W?Wdzӵeeg f` zLN&kqps9qNN*-)Z'-)Cʺ$jM֩Y:p`ϗI۷oo!ImXYZ~vک^|I>>uA=pI9 ӬSS?k2t.ӵVFaJM;m3~J?{c, e,I_k &^쫽{hez_e6W7^-[s5uߒWum Q{sƺOzC?}J9ڱ㐆 "__/_lvssgܥFa=g^{ct8F&oeMXHҾoR/~ 5X>A:/U]éƽ8L#stxgr}l' W/me:hp$i U-㳭upՕ P+(0_m.}m2p%OϗG Dju%I͚7Waa9"I%I>} M~?rrrdb{_ $O$Io3?h=XƆ)99SB5jDW͞\\*rXE󔫫z\FvIpMzj=بJu()M=u-7 P.MҖkzUgjϞ#g쳛5Pt)I6m5p@||=KaDL>n=ήκ[yx;yxvjc骇ENNP# VF!> VqQņhNrtE[֞ $κ|A}`~爉i]5?.eؚ***RrrDFs.JOOWbb6mW@@z+Iڟt=,wmݺE?͛IIՅ4n\_TXXNl:Jc?//w $=Wa rrդIF |ˆ I*-5߀go3Zz&&MuX |Fm?6KtmU\f$u\AA>j,B]6$tIҰ줥oF}25oyZGGSYq`S)))?:FX-S@lRzc:*q+CW?$=qڶ~~=%6f5H~5:޵z4'IZ>uw"Ijէܼj޳ Ou_g΄T\Xm"ԢW{.@NZW,8S++? O߾5n/))Ij R:u$dԾCG5lP' }Y۵sp_b$K]:73Zkݺڴ 5cJIҚ5feDBQ5jSƒnՁ***R]մI ݛ!;Z4"#5reƌ+k{g?^|HڰvS@O܏lwsx|F<>XC| rcTIQj̥f(봭AfY-5:߷0PdzDI?wl6k׊}IϕIWn^n:ƿ4\h/7ˌg^qʫuM03R?BiPc~zFWVϢA __{_N:^0)11A={]*Ij׾nE1%$H||tEFWyYsV]ZjR͝ZFvOQN__W~m紴l[*>N'*NyP.&i3$YV9/fcu=ܼ$IOz]"ͷ*--[; ԝ#{,_`vR#$ii;e1NN#qW@}˒e:WN˕$O= Y%-4txPSE J5ClvVFYH&IQeI;r*((PjjF=$}M;=C/zÎJK%I74Pw>cXPعRKd)zKMUN~~L&:tn۱ݲ\=[)$rCprvvRqq9R鹎$gjʓU?w%%kj_Mlڔޘgcp.ީouV"G ܧ ji]J4y8̹:-{Kjb梖ףVZO)sI׮Zl&=N[BM%F^uB9P[ه)aCu]W]YYYyMs4Z3f1=VzkuPZR/>Vzp%/;5K0P-}XٯƗD[~0fM]zmW7 S UҎdC~L_/? Y'-$K瓵db%$X o{VɊ2Vm||Oι0` 8e/נ+##C^B_k/heժen;ha{4~p5lEEڳvIJx^quԠe}5b-~iyǎ+X嶝,]ίpǎۜ\jV~N uS4jڭ"Tw՞5 ~\L9yT9ӤBL&FU)*,,t?WgEFhJrs } CWl~ Ձ*);Q Ct8]' SaamHm|ؽ}{w` Ol.ԚBclV8;~(Sռsu^7/7UFR͓l6k3,*.Ѿ5>*},e׬zveLMhm ίbk9_騇u[W:?/Y8WHZC"i 0$HZC"i 0$HZC"i 0$HZC"i 0$HZC"i 0$HZC"is*(]!yzٻ p0`$-pN]!u]!0 8b͙F}\u55|Xػ;))*ц6ktps XduIj#gWg{wHZbz0$HZC"i 0$HZC"i 0$HZC"i 0$HZC"i $''kJH'Ii>}*,,]jx#n<p$3.|;[rr&=f8KWhS]? hԘk@<ÑT7%iҤ'4s Fa,m\Yɓ_!aW?Ñϸ]^J&T޺p{X*+OostI׮2P%tJ$u^#7w7 %ZfM#qxņ&99Y=zvЈs|i]65UMeÐg8sVrE#n.};kׂk5=+ޟHg\HZnnz六gTk/Wrw}W:P GRxDy5UW?O>%"3 I ErrZjw:TVR^[&[ C!HYEzFTPO]nIxŊ%OaK/V+I^N4,^l6g8ֿԺkj',$M!q GB_Ii|k>t/ Y\\"WWuϨ+UJ;#sIQ6Y+dЛjϥZ.ln:Uml>Ϩ+F@;?ZPa75qc\}}YD}Gu9,9Rv;*zvfF[ş.%@6|6)%.:9I7')51Mo>Ϩ+FS?nڶ$]yjےt`GUŔ=&Q[r<-vmjgNA3PHmZVMKcUSlxFm3I S9nwr#yP5Co$'gO{_쨪g3jBg0WuU?,ocA3s3*A-5s_=A-cUSlxFm3I ؍KQMM=˦*E<ÑT7ǾԚx5k/kޗLWZQFߟ|mR3.F$-`7NΞ/8;PPR}!y{9 GRx^G?k **RXPy_/Џ"o=;/g Hҏ;H`|+ "q12 8&M<>%UPFYԲO۹I)ܶ$]҅]X]%q.8B(8\\Pg8ijWOw}u`w~Ҏ!x9u JY)I u 1|xń S^P'g83q w7:Ay6 [6Ӑ+'y?[j-[t6rr{lQJK=7ԱCnZ6{_Σ mԬģZl^zejھ+K?~wwPM&I}n>7tSPd5I|toM]i{ Fk݃onrvqsB4D˦e,zx<]%I%ZRv.+#I]GWߛzh?鯯Vq5p6mխk3Y5h֭Ծ]'IZe-Y{wp>3 u+gK8cиqݽ3zgk4] }}#G2T\\Fa>kdD׳wGD9IzFM*/V^lZ\ڤ4ȹƗh4rҐ-WWK rtUc:LN&99_o{;KΩL&>^ i⧰z!w,$ h@[_>>ɱ;9TzpkrFagI%%~W?,@?;NNڰqn=>!gg'Ms*=.*;wٍ|zf2d2s^=5EGjʿ,㕵 [II:t~XN߯^ K޶|u.qnuQ6$-lwJKJҲTzTIV>9+{/G>okr ?K;Wӡuk%rrvҞ5 l6+IOASI^T:O;cğ]NhݺW^ٚlP{I6rNh@?4\]/i`_%'gjou,xsORl0͞J1G4lh{ϕjެ(>>A/?Ak٣`uX%2[ԇ!gg'gZ{(HI^>9';-Wf_ɤ~Pq\\W3_E9U1_=ɤӝuapҡm5Յ:.999Q*;WG)%!M ߷xxw P{ٵvE WQ٬g+73O-;{e2{>-B9WUdp/far_?5# /;MмWxv_$2-V4Ө(a6Pl(}Th{Npt$ʴ~Oޝb}n_=ȏoVnUNUհG.Sdpe$eUq߹s4 [LZBrW-۝"ҵk3]yE'd2~@]]_=Jqз/dwurqqzlWfdQ¢bR)+""Hk'Ѵ|}<]099i?ds^\ڶ$}&NcL ר]5{crq@`bcjejѼL&'5jFa Lj4\/%I "ki MDDbcCդIKxɖ*ۇx%͒$5kb5scҥetn?&M5驫c$IQQ! 1=ԣ{sImwvpr6 Ϻ~9Qo|%I ]|>2H#\u4[~><,NMbzxjyky*7>RMEt<@ήNj1J|{7UQA"wY+Ih>7ve+Z+arrzB4^j#V%rrSܠK7V+Y^nCN'WIQ`.jyk{d2?OO\.IrpQHT5 Q@ekpkKFuPӮ£IۏhWV>cϚIRqe𱽯 WF.nΧʴLw~q Pn^n tswI ֭vqqګwV6ntL?_cǿ%ICwp;nqc{*?P7?%%KL#IzjߺZz\]]t+eC^d.o37^K#_ޗR^^"ުbEOJ>IO-VϪX S8ֲ-L&ni}`ճIy+u򰆍|E99j$\#w=Zls.mwZ$զz)Zp|k~]A_߀g$Izϫ'ղͽ{Y>HvXh%U^OY7lС4IRd`=h8EԩúZ|*=~lK1,IxͥrvvRH^e6jDԄԤISϨmfInml(͛m.;D}' ?6zdgqa rV[/n^n~7$M4W|MoD kN*m㲻(0_Yog3줭KvꙞoh}rrv?%IX=u|6N,^h=|5=%fI$I_;MO^},mcvڧook^޿KIҪKuS`5ՅZJw~y*_[=naܡ nd/KVkX:b<'g'~J99;iキzh _$-ڜi!W^IX޼>Ƕ,i_/4{Vˇ  ׾]#=%9~Nh&JQ=pPEFK6PMtf]ck^nM4i.I={""٧w铏m}lt.e?"붠 M~=3i4VW6ruuQaaf\)IZf֬-IjsJo'٬4_(GZ ovF3Vر3o#z鱚51iɭN2K8Bת}\=$IrS9e*..ՑL͘BɑJ>ѽBCt5|EDKX?:ul,IkV8b}*-5UM\t붃*-5+/(]-un]?^h(&&۱F<>_dl.gWgklˇ,IȖ/sۺ%VܠR%惞dRt\I@iIfy[G蟹fM5ozl=u]Q*.,_ZKٗd6$P_Z0<,Nkfoc_(HkfnPat[$@/~vz#0̥fgת}_EEth<<4aг>wF! **(ViIJS߹Eƍl6+''_}]URRUyyjԨ|}=ժe~[&vq1/8YVhpvĜn?rDWCcFPH 3PSWv1{X̑fNT<4\zrs *3/!$I799ϴloO~HO~ھR+,,NUPPdj$镗RlӞWTIΔ*j]6k>.L|t8C..N)zOܟ핋^Fկիwi_Qug&dXqWBoޏeWRRzvfeF ;O87R[~i"qV}Le%m22?+9[E'ˇwX>dUFh勋ywNw=_Prrv҄?O{&*%1]1je2u*LML?q-Mw:zP=?Mc-[,̚7еXG`i2L!֦I־_6;1 .ؠ-[zcjOlVtT>NkկhSTv0^2g3$O]/ C.湼-:v~1ܼ,[y)fL8S߹ÒV'>_d23si]fa͟NK'*7'_11v_m|☒R㌙+4vL^yZx4EzHQ:p U{=ai.4b%{}!%%Ѝ7StT.mADG ?4zUgEG~Xbc-䯛G}oMꖛhvJSTPkLKO?UWvַ_߯~Xݕ3VTz={h$5o+^U*j>0L}zV\hȌ?Zb 5kvYSKl.X1WM7W ֈQQFF}4GTZj֥,5-:vUV ,Y}?In>QE}p&^[ULogsoS>ŗT5u5Z2_~Xw9DQQ!ZU^[ݺY|D9:O}Zk0>K.ozB45*<^XaGJB6ߢCZϯSƃ󓻗2giͬ O)J/,{D6%~Sۑ7 ?K78Y6ӱي:Q6fhjqi-fJKJSש p U&'&6J~>~ob:q%as^ȯ]gkpJ 9~z:iyXƾ8L#\9yUoK +]UJ>u?mRqro?Rdsu$I[Zhe#-""b56mtpfY-,??/ m)kieժeq{ U?,@QJI9o6KkfoTIQE?W׻NCQ­y:/'g'oVOGvYFVfZyM 裡:/AVLȮ"-ֺVl6k휓+#>UR\b,\WyYjڵ=]@ i˿l7 Tdpk?ZݫV_iN{w|ڢ-ތ(/svvRd`eSffnk0Dyya:x(MT|=i-*ooj}#hwovjҬsuqVdddUY2aW`_'wы/WYIIn&IQ CtHF1#//7%'gaIQ CtPe2cǎ+j8SF<{\ZYEaaiRebiJSz*(WV9Rb`x~ڞdRPd\]?æĩ]_RrTP͚&IN˵)*X%y{}*P ̨P7כ]::+(_Y)96+ кڇw 3yykT;늗)`uřT;quwiW9\]n\Hu!@,632jTSj|܁n+}Uw,򡯠FISff^E%ڗpg<:Tl>mgd(WI%%6}5:t(V͙ڇ;r$FWHXHRBbտ?[f9JKX.\Ue.([RTR9VA-):317vKNW}eW^V1u߹YUH @|?u-ۮ I @ݛ{D@ 0$HZC"i 0$HZC"i 0$HZC"i 0$HZC"i 0$HZ w`S3 GbϘ3gԵ =HZ;cϘ"Q׈g8{T}p0)uB)';եK5lGen+gg[gܨS"u,%Gǎf%,M.z\{g\uow'ʻp-7w͝cnux#!Hg8AI `H$-!Q#-! p$3 GB<ÑHZC"i C!1I ~ GB<Ñp$3 | i 0$X=#-! p$3 GB<ÑHZC"i C!1I ~ GB<Ñp$3 | i 0$X=#-! p$3 GB<ÑHZC"i C!1I ~ GB<Ñp$3 | i 0$X=#-! p$3 GB<ÑHZC"i C]3~*66ݩI .BݻvQFL` ap$3 GB<׍S2RŮCٷo>}'vO`w8#{$0is]Tm۶ureee?y)`Lu8U]p p&Դv.9o.\Xgx#!Hg8ntڥǞB$-cS qpH {$*NH `eDũHZ<8x#!HgDũHZp2jT$-}7{wጜʰz0$FZC"is  GB<Ñp$Ń0$HZCb`HD0Ñp$3 GB<_ QtT=(["efprھmoۦvխ{{_ 0(7Hg'pi?"Ikq1 9-Pן1 p$3.o(p9|X WA~o Xs>oє,{xh!nKv ʐ΁4͛;Gj$Bl/tV4 ڹ;I:l8c.boϨ KEZp pod24dP5k|-^/ԼsC  #~xFUHZulJMIQP]>}U/_))Zb/p$3NPӬUj]!C|,;W+t,;n?ɤZK7nPzz/Go8';85W)55UqնusDzsOzVm޲WnUnmV|}NMҲޯ۷ޗX 6!0g p$3PGd6RuF`"Cd6`p$3PG'$EGիo}쯞jߩm -07HgT;8TIRxX@zIZ'?_Zwj[em iԑlIRwzkexWVYqGB<:ԑ‚Iykc~xFu0PXixi7wwIR~~ykc~xFuꈯ$)3+_Znsϻvf*}#`8F iԑIJj{{WTÈJ+kmظ߀#!Q$-:@h_6f=w]6WϕU6ploϨ@d̩|`hjs՚ P edhTL&Dy iW775oB!>}^|~=;izxP]:Um%IkmҚ6)&:RO?y*k65u2MR\ֽ/QN0*7HgI 9GY ԡ22iڲe$ujӺ}0 ڹ;I:l<8F P85x{xh$M9zuHXf}ϸPqGB<_\b榦Mifm |qc`HLH `H$-7wu^p#Hg8xxDI `H HZ@c8x#!HI `H$-!!i `T?#!Hg8xxDI `H HZ@c8x#!HI `H$-!!i  kÆۻ+@*!1A)55U*ϗ${xW!!! hٻ@ GB<ÑKOOMڱ}g ?_))ھmL&h6mlKFVX"CUOa $)?HY:G`oۦ۶)]{uޗ#i4-^RSR$Iq>.F>&OO7Tv ߒtH}g!3:r,| W^^?V:|$Cޢ)YrCT?<ޗ"i84͛;Gj$Bl/tV4 ڹ;I:l8#.PK0okdh/Ӛ2Y',$d2iȠj$BZO{_&P)ޟHg8AP++5%EBuu~WPh\ I @Ӭպcٹp/\cٹUtL&Zq}0VTjxIUB<&Դ,Iosnw ъߒ͛ջO?{_: B Ŕd6u>5p7mҐ˺j}L&x-rusK`zfEETHX > lVBb/A0h'$EGիo}쯞jߩm p$3 |TIRxX@zIj K݋*Գ~U6@PAvv$)߻}|+Ԧ8*k`z‚IykFZ0tp{wP ޟHg8H @nfY[em$-1W{,kmx#!HI @!!!əͲHZ*h IJYVYI @112L0U9缽?*ɤ{_> ”ow'גEھmZG_6U7sjoU>͊ߒ-[w~t#-j6N%QdvPD6!U>fiqk2Luz~٬3hJڵW=}ɀ ޟHg8H @uPMүoMRHh( T@pZ}vNl>zfY[᡾2`@$-XSg,;dheքClQP-iZOHZG}\|u|Ff6'Xno$,P%)+Y&*2DQoyxJ󋔙əJTZ&`T?ƅ&==M7kծqa2ԼE i \0x#!H狇;w~޽t8RSS|I|}} I @ifjڴu|z0$jZCb0$̛;Zp$3 GB<_k ?_JMImd2ԼE i`{_h\\7XGE(:-WIR~~2ru89SjTm߶M۷mS\ֽ/D\tӴxџJMI$ŵVT<=^?P5RFf6'(~K7nPR!ןQ1V#k*WPZkuG2-:%w +5%E+W,HZf]%oFX+4 έ5p7mҐ˺j}L&x-rusK!%$&l6+*2B\ QTdf}\HZ@c8Fs8$):^``WNmmx#!/Դ-55UP~znҭZRg ,jߩm jphْ*Pl+kmP;$-C+,($yxVcڼel%Ijݺڴnj_VYvHZ0tp{w33.dizxP]:Um%I-]7L1ёzɻ`53 | i _$OϪݼe{4 q@c8F-Zhm~<@.ti-}C|$yrusYsg8a7ۻRzz0M4vd<'>f-$]=v}\ИՏHgQPPڵ$-{l6k[$Iqړ GB<_Q>3YaZuB࢓ŋTjJ$)u(0ZgdhC|$JBBCշ_1ࢵrro`}z  P<<\%IEL%?SĵkO U>fi84m۷WƅdR-Ԧm+pxxػ}{JHLCJMMUvv %IUHH#(&:Fnn:$W775mLM6n<C!Q#-! `9yx#!Hg8AI `H$-!z0$FZC"iՏHg8x#!/$-!DCb0$HZC"i 0$HZC"i 0$HZC"i 0$HZC"i 0$HZC"i 0$HZC"i >  IENDB`mermaid-js-mermaid-9bb0ed2/img/header.png000066400000000000000000002076751433273745700204210ustar00rootroot00000000000000PNG  IHDRkf~gAMA a cHRMz&u0`:pQ<PLTE稛Ƹ5 cwn0fHeJF9.#ٺxgcHRpX=%*ijo323H7O򝄂ѰIjo ".ԓrUֺyyz 4yh5MNMɜ뇕ͰnTM>?Z 3F5ccbnlK{wenN1޻d#OgrB oD *!BFMA"b0XJ0:rK8ª3#Aug뗩;SoiZW{љ9'ɹ&(=!$O}y!sRm6͜lbY1CagJ6Os6fljG$E!Xd@xϞgy<(H*AsݹvsIV,V6?͙#.QIV(H(X؟%W 9S!Bu =sCR(2ˠ='(3i>LٌE+P9 _DϙDw|(a <y`> Iq9vCPnhed8JI`qۡ'Py1b;ΤYEk1qǞ/ B|93iĒ5^ɻ/JE߹)D lM3oѹۣRs9ꇴvҬPsΤ9QR"'P@rϙF}3@; ߽ňXtI(s.`|'C^C Y_,O8(b^ Fvf#S,ư }=9p s[iːWH\l۲)$nRWz62j󟑬*C83g9M\ň=b^W B("Pߦt/"^Os>B1&\,_Β`we'JxXNyfri;Sg='-۽72|^6V"I tn+hL1 46plj 0LpyZmB N93&KFTXڔ.䈖%KژP3}9ڷvzI,hiQe颕9vH dC-]0J]! > Q!O@Oxbg)8ɪ!PSKוnmؙOX75^&/%^&>['0EDV:pk6u7QdrhekE!gS$,JO=m9;ST W Jcv@5Va'b93; "$ej wuy9* H5PzQH\jd2(`K3M1> 6j5cXt멮i:2 $-3k=%ڔ'"N$NP z8Kk"٪U2! ږUg΃^,ΕN3A![#ۀ,9FOJqC QsLCȰǖ @St{x ?x<>?*r[4975B*ڛ8#v-zAK,ID&?<"Lĕ8X KEk  ||\ߦ}" dyo=sl(3?36x+tǬ9y2)U]2O^["^6O"IYvK`%L 3 ;i‚N l4}12"+Ko{`TO{xl햠4h4:KV V,'udez _΍ۦN&Ňx^V@NQfNۮND,_ːiBE$ <-7ϙ'j({R{[+MM1LĒ(ɚȔK uXs喐A~xRKC$N@B6Չ0~I3Q yq{"vǫW<Xiڴ )LxNu/`@ "Ywqi. SFHؿHsāu ňh1NU >J{l; Jڹ?fD"[5ŝ?*'l$5J^=$sִ#o3jΚcPC$g>.)w~‰hh0sޮB`N`ƍ6d$9RqanqxΔ8I"K(ce'v@k{6`|%J&[ʎ%|Q؈D^sZsY+X3HlTgԀiyΣwfTϴȴY+%9 ^ڟP3J"Q@QbTQ|Ӷ8Dx$FOan$̴qsWŚ@k Rh@wߌZ 00Bv p Mu<'}m)ji<ݑ4>kkة0L=Ks>gd ,d |9xt54r!Wx"ED,Xn"5slZ"č"hZo:y&4gdIB e Wb$ҕC 40im-:}$AтF/FSN9 *onMwDB5B5^(פ3"t4@IƷqX;n rj4UԷDB $2S{xMK7`}\b a<2@egZ#v[)W'bFDZfi:FtJ,ȈWy0I H4_=ԩ4LE#%dĠĚ0ngA 8)/NDT@C+ň] FxCF[_{xe,z [g퐶uͬȿc@b >q 0E{MW`%v3z>K5XY$'+@͍07YwvJ (qϠ 0*x6FN(Ye5LF5OCIbFr$(7x#(cm_`3 4ɚ,Ffwdi zg ־o70vDVFsțaF35e,̚H &v: J7EC+0dyL0ӝiҍr TNDZb33LoRӲ$SOY]G2!*yxyLu,LgӻK!%&)@B앓lH @IQii02Ej08U k`5Y5ꉂ7Pf5Nf]s%zj3ͪް BDZm *x|F354Y4n;nΑ%֗,:P `L-i\BR _@{1BHTk%#dx'795=s@  FBQ}sFR ËZˀՋ-h-$84ps%Բ&ck]gtAK:{շDoH)Ì""3^7y$XIM "!nwDiva`+[zc:WM*,[eMd{M U˱wXwV#H3RDJ<`9SD},W\H4*;փ #قCTF{'\0 CĘJ^Zi:>6J^7^ۢfɰF"C;n7HBpe  _=<Z@Y!k2>.ΨoBI cl%#L^+pd#F32Pi NX@,-j@)QbH76B8ӈATBK^ d1"Ĉσ4A{H7֫ΰ$Ke& 嵐"$i:ZԃV#(aêuXQ#zAs#k5)Bmؠ>IKhs54&H?XdfYh ąit٦<O%KˍM"wܒa}VK-zVf2d ," SOual2Mr! ʑ\-%^E4o/ٓnSwυ/5VWI<=g5Z{Me1bHaiumaAig{j__@Wcʎћו%'F%Ma}|r iC/5e+WV#B ` mlmб*mV#R xEIlp&2zJY}%I*_s%/l%*HENz}\Dfi$ Z\+f FUhMTdsjpΠkhokYyVOԱ  1"Qwd Q2md!wZjWXyBMT3pMPu۱2; u:ھW[' 4 &-uH'[<HkGqvť~YČP"+<&qVȲwX w5%AI#FHĨ 3Я7n$e%j`H&4R'28c@ xoCmW'^j|w^п4g$"8ZfTT`"c{&\.E٢f`i<(-FIod&Pj/LBSƃLdxVu,ٰw n1񵈴ƦV."wW0bdI?7Ud& 럤4%P n;&;[/kUe^o>KtbdUÖ́HÈLWUd6Qʒ*İ>]89Ta ~}4{z0d&AO ^9t^Sd9e՜C6:i5笝 z@d;f]KB U_TCnx8sr;;qsi/fh+kk $:iHcؽi2AkK}Ik@EZ*z?).%ɊJ$'dxSNYSRwh4zdEIA_?Y2OB o!}5$^H-9s__liw5~; ÉK] :bpl1 tĈz vV4vF F:MkhCI ]&BQnV" MXsVhʨx-&OKԆeKf)g;i\eҪƱP:iH!@M&B3wfk:`eXߛs^d!`x -H]Ssg -bbd" #F0ـeא4`y,Pj05!bLi&?n_7x9D.47W{JY1i߀XtsYH*)+TVc]"II I"m!S2R{C*IMRlmjL"zM&E͒,?y|JpViN5ΖVI^>g @xۍ6f i"yQLJjR#$ rs΂L(Yx-'ze%UUX xUyr2L 3Lä9i> }=̈́aQP@_jYtkƬ-(]:|_HꤝCkfv1e|z;g ge& ́h|U*HcCe㐾*oݯ9r'G5דIL&ZF.ھz'M.XJړɄ$O&Ҋpi~~sӇ^1TEևu{h_hiTSw 2*kՁ>`P2u]xl(!DN \sbz XP;b;5re$c•DrIrk&Qd'~9 {iEl12xfSOe YԙL$ %y-k*=jnhXoY * eXTU7|{q?_ՉkLD֟V֦FB]"D Fޞ>T]9wuGl;Qaٯ  bg382B$,f Oe##.B-mҰ>k'ɚImKHLVTt@ Ip@UcWMV({#sg T z уInZL= iװ%F"Vt}8F{7\t6AEZ!Π"@' ܡ̃1ft޶7Jjm?]^dE14DZ7xրč-%y DvJ@Wfe}&;vĨ^#69=?FnB[ qXoFJZzA3_ay/Rߛ>6Z(G&[<11­| kZ1idV^W@ Ws~!ƓI}Bv@eNZ>#6yg+.g]hXYofZ. z0yp>3.03ڮdO7ott} ~L]&DZ#1UQ 󰒼xD |ue%iSvF#!҄k]ƸJ"S/Y<$GfP91wBo6H;a%͞ @%T [U( Z2F 7#DǤK=WL(2jԦպu=meC]ށ>i]Hk8AiwP UVe2adY䙴F[P`^#챻  $1Bpb>m o72elBȖj՟~EjWIj @&SWcю /?LI5.Ҫ%#-lE~A"Ȅ-yc"J;$2} oAxmtMnۖmU~[O|W>:gs5f8 I1*adl5;WV0,/l.!)vG`:w=Á7%2IxdfUn_ZΓk9ZeoƻH a>΍ WxfG$s<^KGj$b%:I( (am(O* ^>M{pq@܈UyǨ,Hkc"E{A1lpT@`(?m)N@ `ܫ4`&WYfpeP2ziTr*҄$JZ`U]{FݓƈFE!۰>֯֒8ɝ:i#?N^6e6Pd ','SӠiݬÍ*ХjGQGOZ L7)ܜ*&0sl2|ZTUfNQŽr* ּlՎ5܄ܬYQP[1 +܋fIGU[cwMSF԰1l䃫CVքqU$b#TszD£~n`"iJLt醐=$XdX\NpmVd%3[b0m/, ::\$)SUsSi9٠?`&DZߞDt`rDWyvv"k'@嵐"!bXU2̾ud֊gNCՙz/ ! G.P5LH:n4GӇmI1; )3w=g2"iOH0Ckr CBK!lKV#ə-U关TbA 1DT*\VEC J0#!RlxDXnw4QEHzM}>Lt`x>Ya}CB`1 FńH#sP!N:rbxe f+ Z/YFp4Bɴx2$\M2El#A3f0&*cYzM&@߉1 Ku]Ts-]}w?$YOqE;m tP=m^Ō `o[W;Oid#Z5I)+*ҐZURaz͜2JAZ$*;#\ 1,V8ir2 H4Zn1s "F"DHM{"-" IjU{M&:MI#6", BByH:i$YɌ6tVhbaM G3z u4I^(OI9l dik@u~ʓ@ "MIibD',6.Jb@e<30@ Di>En0@܅$˴ { T( j|aSDGy?ĈIPNn&J.dBUzQG9fg60(%pC&Q88MtJ14* &%:iHnŢ$˅ 6 f6fY=:t ŊDCU9Nh!{!r1bm;igq3c Dj |wDO.U8]dfYCȣ&NNڽP(t̹@{'oPZVN*6IK4z0Vأdk3^cy5Lulkڐ*Ipw5#O [ b h1%$݈E @Lג6cY3aq8Gy#,zqeXY 䛳)4%k'-IbDYAYPB(aMUF_SQEI߉5%@fs ;b0m{XPd̫<σluXKӳqN4.uUgoP2m^rcȑ<C4ݣ,//*bn1B&Xj0ve)؃4'kZL'}`.FW=gm ]FMiH5^ߗJV}ÑglPh;2NC(!`Vd)BJqM1[o{0fLcT9InƒufΎk?ݺ|37 ;&)g԰\qlm*!{v JM(zf f뀍?()kkyݎňM I[&È w^hh׃kd,X6N?I%n힞nHKff:.9k#Lތ*7. H$^ #lc-+eFruܜ$3К 89rI$u CxY/L/\zNay5 ^6P/[db&04:9w6W)nUfC3n=Ph:akUN:nՒ 4YQu&NWϳ'`rd"@zXio56OXCaKzf!O?jTx<r$쌷 -^:㵙M776 m4ݡ/ &"loQt@!q8l#^ )&/5ւԺ6J(?.5 7ex&?MOH^M{*(>\rײm98eb[%^h%)4CKCPy_*w" M\˶z{_yH>OHVw\G0[Lh/qıť%mJW |4um:=@7WPBk<rבٴ(/h%nkI#5xK*^ݑS.\]:%F`&Tk?1Q&a}gq CR}4|x~w?uoHs[(=,@~#MMM 5ţJ%Oߵg|(} U jBžX~nY +A"!ﴐ Mt'u=TF_|}̝WDޠ˚[3 %p/g02IQƶ$N<ӳD&T*i1x˰ǘևhL5W=?yqgJwot@E!泭yy}smʿy}6Ӿi8!mSD=W(a|r4kVD9=r4D̉_ $ ]q=DOO?op]1v/ŨKDexu@lp$R戡WRS=-ؽ3()YtE*{s IkٳK_e6y}o}D(,7>08 AD=* s,.{lbޛkvSUD<N68 % qnc$LY$9{G͟n\o7"$O[wk-%j.ʵe2E)Ev"_R<)Kضp } %LP!EĆKL SYۡciTDr-}lWڒe-|#/$Lv^*+&q$  GٚJT!dn36Q1?(p8ןk YHjlokv4{Bӿ0uF+Zirⵤlmx S2;ȇ A37./-yu48s;D[wg4DN `$}_7?b,͋umO[gOWnTcv>x6"4OO[\_"fFWQq$rle&gYl}(3x$$@'#2uw =8[ r8֓Wy(2l.Ӳ!S4C6K cXZ,qa/7"V7. J|l㼥 K_,^]D+O?$z7ko_)rk\5]_f/v?/:+0aOx6"̫,3W^H\ O9ԭ-~p!bZ%vƫEwܺu޷}ݭS}P==׻ӄ=^>&jCP`5p7%p^K?m82++f:4S -ݹֈ-jO 럭|b &nRfuZ7rE \BӇ]5 ~,iDŁqe9IOVdgjZDvXTqDos;XrӗR܌Is}CI fbw{IxKi#%ba,ktqcuSm]ogkEsfn iAOsO!@WYW:jZnl{ 3Fwu1Q- JX4ηwDPQmF69>=|t S2V# }b!Á:Xas7AI M zތ7';4DГZk+X][e_`W'?%=c~3#QX}@8;kal4\ooFXľ΋&bB=IĈE*(1BXs[$P5ؽ$$70dA)iں6xlizc+S M3dg_HR"7# 0i%-˞d6 5L0׶Ҳ$v%qD"0.d[>0-uOICE-"nxxtFZvN׮koook!?&- gt2! 0l!{4Դ]JzJVHL1\+4s-{q6F]%H r-^KqX4SkY; k^CʵV;L4%zM5`,1>KbKYাwDYƙgElWF͚5(h/蕘nIN" `YϽovQ \\QBiv aLjJ͵ͤGg[{Ioue>9BӨ@Q{-x-x /I%pZbDε6Jm YUa6ǀ qH dJӝ4uI8h`c$~⇥Y'&2Yc]r]ˍOXdL5#+Hd .q3bl`yXLNw MchO9*Kuv{@R9 By>,ײډBD^i5q[';nH;i3^"*o͂\ig҃qAPfB"Uv({:%7LX?rs1BIsHD!\<.f!Fv#LdlN"k@N}~);6<er>>mM5=tw`@0|ݷݺs&ҒЧMHP!meHF[kiΨnMStxmnk!q 3+q'L}ټe vF&^r7$'#/ISCx-߾2l>5K":Œ~'*1EWI[KJeNPAΞWs9p`oYireEL-Q6fŋr FN{?|z;6= aX-Et$$շܴumk5b$#[{}IR=Xc`}ތetY_ÿ'n_҄Nq<۵W;!ؒF[S[r-[MIRgI`m79.ɱi1 9J:JXϜ\:[{p|9fš Kcӕ)O!F~I2 iF212`8c)^[*ERʞ0,"J-mդgF`4m}퓠HD_P޳5 :G0dBISI^xKX,wȈDJ T#bIBn. 0Z1}*O6ǖ+S6SDˡ1DDJs-"`c1_%EƇe-h+fCUVq 8rLZpuШ[|' D9ɼE쨼PBDJT28g6TFc7*zu(}JP4rAzǁ#PZT& Z!p ,`QO??x#['v}ޝ{;N@N-SoO;Hqyݞ-MFcWjjۓ0,jT_cВD6p%k$\#7Crt{u2ɪGZhs4=N/iJx-[mu~PJ ,w7Ho%G_F?gL'학bhΉJNU |ĉ#fA3rr V6s NΝ[ 2vMigxaybrf欀VgU&S)yY U aXJ Hle>sxas OE+}w[oߺýSoJr ;"Ԧ_LNjڵT&iig1jj*P muI4VmInKzUgQ>I|z˹?N:?]gsk{4˅\Cy7\ ~nYo#im,B_ðeO}c@=uqnh\ʡd5T/KvCO5HVER@ˎQU{EMK}Snw{N1r|Zu$2SUD" 'Fs5~{B(Zl8s㈹u:#_]߯ew@ys긏s^yQF5vfr$"~{,7F(1Ќo N%X9C@7g)/(} p+e1Jur2zR<UбWr!.%6ލ ,zXXձ[@EE6!{mil* qnߺi=u;w7Pt |Iu#N^KQg6^#-C[*4]&W-a?vJ_ޔ7(Zzǭ$stw+gl^DBgqbI$? #vlY8!1>t6P" OU84S)Trbρ3 rO{I"mcTc/Xd9Z߱[w7A3.-V.ܓ,,L8<+ycAtI9М(N7$,i/BA|L[[ߌ9 ݷz~?|{w޹bط#k'a 8\>m֢joYmFJO 8x"Ld$94)p^zDZzǒBoj"/S//ߔ]q7dIZaQb*XM+IK㖠?^OJc,fB.J' .DǏp,1x7*lT>PrҊ`=W<]+jװ>%* ȢjH"cUUUzl#e9s2(&***؊iIG5"@z}nk y!+rݻwy[Lvz;P:iSQ [JL36m6Di֌4wr)l{Z;tb@>nxnOv󆇳r~$:OT"ER䆭˟Yu!`˸FZ3M~p/htJX-FE"{3(J:؆ǎ"Ý; (Wiibol:'P%]RW!(tFfz_y??Hw8p>.+_/7%?G/znYv-ͼ'*|4u߶?lˉlk$Hr4-?v Ä8c9[ )82Z\v kti i( yL?KC4 0(c-/8Ǣn8=kK KY@펧u)@t:8g~)H{u4xy\SPop3kVF"%9|̝kJ;2{ow3nE?3.V[aB\x~i!yyDdiA6m~)s|`LpI$9+xU"n6p~<'l뾵O4GA)uK&)X_=^%<1_/qg*xjdԹ !~<.55m7x<mgA@e Ru\DKV8 P2CQK4 A6YcSŅ/a=7&ac,5 ii܈PAnCVA/԰#D'v9 Fݽ}(92{v巘Kdm%J[?zB'Fؽns6rw(NE$^4'QH; RnQQ_۫:P j㹱1KӼhn7ت#iZJSE9 $PþZăʹm G!=2NRQo}A~ɒ[RU_.KdsO_?\xeg\DFBJ Z65kpmm'Dj1{c,b1 #+A)RiFmSQ;Kyv[iV a1;11/̍kRzAN{4<ȩ[n;?M{6Sַ"N"k"ť,Bղbeird^$<3x J4 ꪝ"F<~:3DLzǡܸd4f#n=8(7Ed/ݹc^cG[?af%OǒnHOI_Keϸ<[0`?,Fb@h4/=# ~߷/7+d1|d|͇aLgr"88SO߻on] }{[Nbb|r~xTe_T/8FU8%2/)hVHl lD^DsE_).9P,) %qkR.4WxmPsUw4RG[W}G޿(y hspք~j ?'D6C_ZTdݼt *-vM9n`,r7\Z,$FGr쵝w9F"N8 vU*/sj1z%1R ejX_ATH>vi8}zŗށΞڞ%|?{Yu^͢]'89ʋP܏FY6<2k;-Jnoȟs- (O^}6zB hӉLT|/x?LWhCE!;rD|Vjrhq|*s 6g̚Rg 㥳S`x<߳'y?\,Z8 zh$Rv"&% veK"$̇OdոC^T_Qhxc@vDwoݹOޭ(+bʂK5œUAAQQw(+靴n'`tCS>y徽-#[ҟ?pS_N{\BI>g~l"l\&v9{MT{&1 8S0⽴ A꘬ De(T'oz-1݉T3g)@F,gE:g QYvmv$tЫ͚9h S$Ԯ _rCwŖz'_nxF$Ǘx-Y(΁9Hoi GTU !9['(Prsܺ@Sf1UP# ŢqA Hn{}&SW?|3dmW޻N}u].t:wSoվ1Ԍ[6bDo}r!ϡ#0fij&= I%@ҟN &$\ )^@ҬK83 W"d)PPBJT\ڊdcQ/bez*e)?w; Ejy^oy#4A@  &z[Z6fōرn9ȝYJUlj Qϱb̑ (R{S_)HO.tv D;o\ȿ$j ;t+=(1F@-'bC蝴Nur9+攭Y{ َ"hҰʜ=19ю'jn0T]T63*?+ܢX;zqEU )ڲ璛0'W=GtNwCBlT:w7G.7H&C}Dz@vƭ*z!,U(;JX99hbe1 1aSGkhֿ bϤ/Dý7G_v.$⬺v|^OBwWdKϺPJ>pDi?-JlL;;H^U+rrDsC[Xgf1+yʘ! #td)k׿8ZV7ka2X$.A;A"Ϗhv:䖐·-ujnEl,Ң6޽so-16r}^c#Ewce,7rwo]g>]}e{hƽ붩{ҷtzL}Ֆ՞?gRGPfuҬS6+{Ht*W߶\[O1UE*|{Ŕ0u_W#$R"SZˀ( ?1A]jK"(A{)t1X  ,^Kw%a.1;wil(J%{?OKoE(t^Wȋ`H!;u'h!F?{9z>bm]%7/ޏ(}~4zM\[;KFE֚zKRPbSVxU dF)˔1)(lH[pGMD%/?=X7W=M}5d煉Iq\Kw@9-wo=Fp#'( ` nE=vfc$bd++:b vB8IFk`z=z Ά􃗁H#IUoڤ!X,_4H0xc^rBAE/M&޳'<JM"Fx35KE0҆%AײY㖺 ) C!_U#ym#FǵN9ͭϭDwnh+ ɯ?x2b l+wՎIrb7 _1YNĈt&uqTHzX??2C?}_S?/#V*gbZnRߴ_Ƶ6Po cmnߺT9xXΦ;w6FUx N(kQIfK"tu7}b63D/l[Fo1I(E>0X%"CRi{l`6~~.?9?λ/F~ÛH?wQH_p̒::^qlZ^vdRldm\{hYDZ!cH/ԭi$>>;bl=fg{=2 X̶V(BQ),&<K|Y |q%ڃ+}tY`z`I2ypt9!EvY6lvjNұ>i7$)xw"M1y(#r' h4ڎ HP 7 x C3i'99Mni=K,_o'Д=ֱ@wP}3"N# 1nmor7{]Qd2dr" nc(S*E:$=X.l؃0);clԵpNICh HBG nƶqQw߫ 0-pz/Zy\$Qc)4VA`5ۨDq->/66OX +[ Ms=I7]>W(co$1-F3iN>$b_Q>#y[*ۛ&:' Ő=7؟ꚚXc܀?Zc!F6@H"^9aK ("Y&&$|wMwMǎ[vېǘ Irx׌kňx:r$Zbwnnp\ IM'?XN* %DTDV\" 9`I M`1 y&;=āUe F4+PtF6ti,݈Cنul Svj1* `ekN]8A~njp訯9,phhs/p[(c&@3iD~>h:nNPny<伀u1$)Zt>qZiD&F<'Y* ?Aqp-;G͈@08ܘc5&z ʒ~*UN"vDZ37wSңWܠ1e'ܲ"O6 FIu* dǞ!f ?-~i >!wIkq-*M^0>BfTۣq==I#nvIS<~G\bԷ6555*Ң4G dGFЄR5p!=WߪМʻy8~Y|K8%fTM tyBW *&hҬO3E=t̉.֦36655jT/:$Kˍj "?8/;T*X5].CbVᆭws|IȵsDNIw-ib@Z,4}XhnWA^1U6CR3nYTsx%eԵ5ZϜtywW64b8@ 2Hj˫X Y,?f:_%VKW5THmnNKBq~#R"xLXDG^yf-Jyr!0TSIH)TJA{@8"zUV.yDkjH)O&tƦFKotu]վ!Bc5yZJ I8]ÿYJ7>R&OܜW7bIw8C} A\N$MӜܛ>GQR Iчe)Rl|]+JKECU55WCsnc}[⊺Huw`m2L&Ĺ .@!@a;ձkq 9PTA^(fia~*r(XP(uTgi[ IX/ڲ(}uZ(|+= *!g Bxw׳&ьI{|ι,ZUNh4i]~bd6cpdv5yv fM3 Znè :կ/-XUzz޼nF)y\QVu,جp@vN @exIDATŇJbi r3i97]4+6!eQvnP0IQw R8\oYN84ܖ[thj Hkj՟m"ifn ,`3]36YXr 5Jա 4eEѿGf-K ^%kU'Ei_&kU*'@$(|ӒT*x}ĂbGXEDu5MbW\W6+cgAaq{OHzʒ~ V,M,[R-L (@Q Nvj>Z.^qv =WLhDJ&m錑:3A*k {wFYr/ 篁V=a0‰^;:5.O'+#p*oOU݂@إ;yUvLeGx-{TZnINZիØH3̦>s I?ߡr?C}N3!O6OքktXD^]V[f2eO%]U,]P r9,G8TL^ ;G~UЁQzwȅJe/寊X&G ^ ň@<G)%jb%͑强 /WWd,?5x~@/''ظpx ?[Wܶv3x' iBP@g[yoƐ6x*/ TC{1I$mC /*vm;q-1k[i2Kd '-yLazD+r&EG؆P[ZUU'ô5E{yE{fg4ǟD;5b {qe_yR,z-Q)ຬ[TYDZ+褡"m `ԋ7xyI˕uEm+8 4U,<>ʌxWSSۢ346U֪0L|Q梂OEkce{jiBAHmGZXEbP),?-Luna;.K.$>#=&iU'ΩK}z͜HYiYm߆Eq9y\p] ?^g(dʴ/߳)ϖ.ߋgZecuKBm-4f!Ff4d5Ϸտِ[d*mȺ ޡޡo7UNT<7`ejIe؋$w MGfAN !b厜sv8_斅h}bI[#?- ʓɕڞf@]]$[u: ZtҜ=S`:sef^\U.$EιO|\>jLa4 zp60⏩w dڇme7?:/kKo))ɻE[V|}LAA (tФp&HJ̨o0b.ЮCOW+<-ª5^KKUrcԇӕ;Ӗ?.ʖ]_ʧC4 'tDP$(xrק+$('湢j(2?/ z._ewr̤qpԲYDDZ'US?2)vavGLݗQv4h^ەk+'uOtץ/Q_^3F(1p3tz jktV (ڱo`H$ږ(u(ˤk_+|loDiUaA6CX*Rj:J`ISɽTk#~َزR~Lib4(d}a(s᎗k{/FٛMQOIjqEC,o6JmC)B)||pyM $zk'M+桫s (uuuQ<)SĘv;}]sbgp G_ lo&W@!E!ӬwrB[4+fсUo]@9G.],\jXX4j~@zrz৔)' v3=N."Z[0dIv7kz{>,~#ko)ѝcyI^Iy_PG}dkѠHbVm~5J,P#0@%t^6iUrUU*Bi |tO×AzeAD4:69os؁caIZUٰH8ˡ[Tr66ո V +sF cT$NҤ={|nYWo d}꦳==`& XzYcoz]ĿEiѶڒUx)(}.+}iz}J3|Ci(\V BV CA ǩFמ"ʓB\!}}a܂1bSNO/]!9- 8@9sM|$LMi!;J$!'[z./wPLpVUU[#P,B g&6ih*mfςxEZm{Czkj'fnۓ&,EqɫqՁ!]6[g}~Ϡ.%_דwKvn{Β@'$@>1 pbD@ba}H`&lkm v r 7|N4J746xG8]CI* (V ڱޛ3 Ա>(1PPDU|m1:0D5 M2-J䕲 s w޿p"=0*&Y|iyuw$I+x\mg,,{Ikz$}۶],lI׷6  _5"I$TTf9[PuDT$ ;˱i*iյH4:+@iR2 r#+҃7/MYkި^")5$ۛSE,t6F#[ Q7C(5*Ja:- @39ӒXm,P3[>;)-6b!yd"-] I0eX,-ytP>3}&#Ո,v6TM4Lփ #sx gzLq,ˆz_(WDZ#lPNV|< ӼoWL/A74“ro l'D4R8gg -$$U ($W+,|%d y;Rf : YU An.TD2!.(FMy!~C BaAüAsd"L 4`ڊDf[>6–/nmlX}#HA/. LY@cGF[C웕1 owL;xQgYXE}+&H.3 z}y]K][]&`$א,4in|5Չr1x)(bU39)UǠ5nG?;4JiD^||ZU1a$\^S SWF,#Z*r`N1,`рIko֜Ullj4T & PFHk"]cc?'SSU}x_HD/,,DG߃dK]O/\:wXUnGF zXvRbzm4&3!k,@2H[D8C\@k'j5}N=z^dIw Hvptʌ~Թc^ K3+~Xc?Oƹ{-WL"Ғ4&tg BeFr,q@SXQt@,>})%J9xs00'CIiYȼ$juD,B]6yC.Q][ (Bk;D.POY\˅X H;&eDZ;FGvD#I\ DS ?ɶ;z'vځ΋^pJKkYXfuٖ-9'+a/R믰ŋu[9z55w%Y Jypp9$,1+I, F>L&vb+5ug7K ^ID'Xe)YGd{K6krT2"`D,E,EDK' 'wAb%GUO[朿dx=quIUIuyKSR9Y+m5._Ѓ5be@\+< 7x+rc,hLX"VOI^|wڋY\خxE*620~4VāCv t|Ik0#{g%okc`d-SM6BuPJ>fuMoeΤ-41\j9ONj}`Ɇ5*.緶5m'4Pooω7)\Pz`ΊO'+ (9K Dް$m,6!NPS62mLc+a H`lFVJ i# 1Bn@ U[#Eh gh,X"3(f]ݳ - n?pe<)ޭx[̊j H q)Ei쏂&P3= ~z%!-*P|%2k8MiA>%7kE:$]^SSs/"N㫱Òh^-e,'KBFΒ୭`D+Ұ2M5b _awԑv[ހ\?e66/up%៎-:FZbV[QȻ4 ^}$' MuJ\x (vBavz0r6-V-)Ros >WPTCj[v6XymMf1EZmT/s [_<ח? M<:?Bˆm+2 - jEXM&D&#n?S\s&!|J}lccwƑ%b.a}{Ĕ %&ljqvܸkIG H3!7Fi#:vѹ:%hZw~v }b&Yte> in2`H˰x%2PHBH+Jms>t+ns[VZyc"1mp,i:m dqsVAƹ 5DZ]F(W[T~3}Lൾ%#Ngz n_"\uQu$ZdƈcDDI*HhFr4sue]~`{ͶblI#fZU(&fvHkїqqڬa{&{FmUAJ@&v=d ϙ؈CڳzĄ#f'M;= >xDFer) H>gI8 vjGbrq~٢s#zR}iiָ*U=2S;i.f pS!B3XQb$j o3-FE.i G~Fߊٵ1谈4|S@1ZAޒp@' 7&Q:iDʌ[]::Cl|xK!Iwa`hր> -uߑe{!b)q a foQ/MvFՋF&@"TT d46ɏcs[(:WS}BbzY7c ;MШe FmS .I5GM@~A·*&Ls`d凃R)`.?;] Éx5~[+ъ4V ݊t Ik;i~t~p&, ]v+ɋX(c2)%jj lWk7D7zM&f ihSg [V9M@~# IEo &Ɓ%!NT-ɺQ Hc&BaĨjwI лIxd^:KXr"9v`#FatM q9a5.RԛQ1~^ߚ'o Rjy_o0[Qk!iY*k`lsffGHBr& hCl4MG| kjVH[}YXn^БDʆjAG۩ѡhWX[8Nr¹+&6Z\APRE]R[-u/?t&rVlc RS-  tx*Zn"͇  ~|XeÑoI8F\U:kAC=`I%Lsm޺e|֝ .~܆%,7ǣ3e~fZ;i_3,.VgrGBgMQțCS<g+eUAm-GN Q8vcԄ$cXSj^v߷uI-zψe.H1xME @.KMs5#g~J݁p"9y+,\t;W*=\J]T?kjoFlLhդhvzWꕊ&OS} yd\lLkG}* 漢2kBAV", `Dw|27}!'rsȒXfFqէ^vAҞRhqLR|@ʍг 9ЦtY6-Uf!*_5X5m9x"m[OR9 =]1d"|I0'.k("0HD#~_DvXfA_Ŭ 6kVXT- a"caIV3N"J]zeripz)?HH^(Ht (Hlڟۯ5A> 4Xqzo2 J`1L]ݸ ku!WChܲU` Uo8kߓa{ŗj b_O>E9ײ3r'$Z$GCpd#ۙHUef̋)Ul y'y/wCI#*K9$VZM4$rx'3jQ97NKVJgZňZټ~|wᎎb#Sڼ&YY\氢\梂c{Bo`ͽ%$d͎Sqw?00H|Z9Ojise9 ss27We.LAEJ?r\ Ix[3ـn^0FK&kIb>rѭ+O ۑY:Gq7̚e͚bxz(w, J0r3-7~Õh &:%* 퉉+,HIS@̾OSDg4]W04i~ 6<5+%CI P>>F]73&N @uXӬpb>KBkNy`PrSUU)+ +R,J+̞yؙ;SKgMP(7K =$ 5>\|4nz2R3$r XJ&67P@PeޔJKg+ J}35(-P/ D\ڮ6i 1=Y Uٱ"X*fړ#My XV(@w]p-Hpi|R7?=n}~ڗo/DE2pSp5uB 7S,+U4L Fr[naNdYD J$Nzxdg^?9 UX< mm9]>#F)+Z0L?/qޠ$$hHG-^hk)y[/[͙FkcHJ<t9WOՓ`;yhMPV'! C{rVl*< K -y(yKeeC!(`F9D@j\p0IaE}"y~|Hr!ZI$[%sD8Iď*V&(Y fribJc< :BfUY{D:"wb4$S"hN-|^4iās?{D+(Kbwe6susz,7~26n CU3[*A>'>?|^<%!h2q4{-MX4NE{GBJY e-zu4&zm}8mMѵ'{-+ƼکI;/+{=HXس5¤7{$:iNJ>Gp@G+\p tz8RM{Uqҹo{q"}! N[]˙* Z6r-G_mbMGm'&$CRa9?AҴ^U3u 7UYDN`2bדQ|]{= \K-r8}|۹ \8(ݲ*|-Cal, #6['mj^󜂤-YZ]IGAme0Gx/uɋ (/ Qδ/eq["(D'[1rɨؾ_%n7Gήm,L"O@,#wM.Kȧk{5...bOFM'wK֥@O&(Ғ@e+1ˢtur64?n qgl,'8hݲ^Jlwm}'F,$n1rXdaIД= .z{C"( v~b\u45` q?&0s>S02r%f[fO^k\KN i,{&}9K6̘IASLaH]VcvHRi˹USJ"aSxuX#2#g_w1_xʋ?N?%i M m~}/$Z͒IĈ&e^BneOG.)Qx,B/کl;btٮ'cϖzvCh9Ic^KbS5qmF-K a9߷4z͇Ëa sA+x ᛕB&B0b=?_gIOƊ6<[4w "*$v2qzisURZez%N,I;׉\hKr%$)Q,)*<["Z9\Ydό,Sc?6@Kը{!`JmyЭ,wo[1CJը9Ʊ@UHrgƑ%o,GRݕ$;( M\%E`R̢XU_ぶKE _N_]RHihv:HhDj3QQ<GHnŒN:E7O4kPdʓfk9,` Ui!{"PTד|}kq[Wٛs\V5aqQSi*#=@x$!SD3ǒFKb.]7Lõ\9(41J௨n(:-M۲q~+BUо]оz V?zvEobN1iL21QcII:~E.&H|4J*٤Bel͂E^[>JT&`~QMZ3isp#K ֒FN\Wv-h2j*@Dx2-7QLAgߔ-r7HwmTfv(BxhbX&%9{4rQV-~ 5'G|_>o dy~8$FK`HqmR[58@T%3YzmN Sv@&%Ee=J.Ujp٭^_yq ZIi6Ϸ_9mlc @$<'%WJvMZ…^.aI:Akw[&:jRwCHwܶ%W4{7hLDy0OKzk7=7w$Xhص9 xf;q.|)JlHIeIС_JwY廲]=oW\ۖ'7+ M2K u 7"߶u,~QXq1pCLҼ9e]', Gk| /+6%MfYKBrocVeW7(UG$+Kzm&Բ2.D^f^J'Ф&U*וpQce`JE Jej-RDo\!RYsK/HM)8˔Y&bA+˚0GrQ[a(xOі+KIHL)q2Ӿ^1DlBH^ پw_ cUY~F\G?U-U"ҵI;K+HLdHdQYApr'_ߌ/$BcIdfbdq!8͓c+8?p9$x|W-c-Zpd%UUu%!c7(qĒceI(->K!0!Hjxe]b<>VTii LQ$XD̸MMIcs_0!_KªHG$$c{YdMKrƲn,j Ʌ9moŀ`S93m1D qlKmrYDǓfIxmbYs\= d-WcQSMsP$F6;~/-ƯaK{dIb'Y(-N~?,M0Koxgz *|z7Yڞ2V#&6L-UXSUy@vT|4DVdIٲXG%ۤռ] I ]QFzv^AL' |ۆcw뉉*5i!oL/hCeIUx#QfIV䤱$'a<aK=C߿?<|G70d %v߇py[찜L0( ZY HºguDq%e˶ 2I,MKr%{{2L2uhzOg ik?PfBbgA9YiӖ?wl,I쾐qYHug82t+4yG /"moB#;PX֎_hQ%2#tĜAXCIxD, HcI e,ܭXKs&;4u>A) LI;n5Mc^Q# ūp?&LZ&=frG=^ @ f(%A(E ddLDyZm!6Ĩg|tj+{Or5v|0~+ҽ1)+¤ˡ,ѱ")ʒ7۰$6&{xhy灥م2= ЄO^n'f @?TQ$hʲ$v[D֒+Z8?tG[OÚsx8fØ-B>Jıc,BS%?,W{Zc3fršϴ&LNK qh"m 1^U'ƪ^&%`ϱB,dZMM6H.|`?7^K8o+nok$E, p:8V4ەT= r7$]'kJ_=2Y\VhZ,M _n#K>R<+E, mՒ8qoj'q I@֟>^|p]. 8=x`s^wCI%p|=qp_>b eI(Ei{xX&YRy|^7&Ra[vgWI+Q}G1`FQfr&|t=< hb۳ KܺÒjIK`Y֩Z!M֓`I=|ţ?]?G~>ng$I;7_FAd.wqņƸ?Nb,,BV`, vF˒ '%]y=<`@3G[wtx߾yGEeM"o>*}-_֍}3 0n<?rĒpD}zX-(IkIb7$7Y$=2u_?mWs~󝏶c΂uG~c(` .<֟f/KªH%YaѰ$H7(Ѱ$G$e6辸,z0u/fn{K.sI.^ƑijmDӎD2p* - 46c5KLJ)6VsP@; 3<>V[u &US0ekkIrNrB~ $$sNy}>?;9s+/`(葷mSHNk sR$"x%-dPRJ><5G#?GF]gܭw sRcKBk&A-nL6 JD$hD%E@IxL!%y$|4%%Z+z2Qz[Rq'TN$>X|PF{2>Ή*i+/Tz Zk0&.?NoKkQ  EzQXYmr[$ČISRn-'`kjGj2<\ 8?,+ݹdpQEj3QP)iz*8şf % "dN)) f[8JbHw:D 48t`ϴb^*T5g6'KVHѣk*rnhP8L@PxG)<9%DV>\>J%E%JsPR@)ro;yyKk6[KSざ`q4rό֫26m='(j(]AH_Ip5C{ttc9'lqq°"bD$hD"$J|&$8/#nhq?;v/'K'OT PsgզIrlWi],/֝zC35 \,a<m,y*k/~dUkI$޷δDIQQo-4%xIRyP0vCL''ADL/.OWn]T Fȼs7V}v;^Jjՙ=#Z-7=7xN~(Б(kӡZqzJMڕׁRr)ɇH%EOI9oFK%I)Gd5|n{KuYud, pɬq+ ۏ孆vg|.F$ bJf]ҪUk%ߜ7&OۆMP)8SLuh[R]4K 9GU';$YXW1 I(΍;fOjcU)m]–DO${L0apVⅿ6C=AQF$DAIeyh׮]6ܵkW6DEINxIPR,nGbOKML675d&IJ Qq|(rRy{UNڌ6UUTMN?ř[BO~:XR]ݤj{Fߖr;o Ub$|$VJsZU$%Ej&ymH8)%H9tΟh6gbp{30a<»uɛEh4vjԽ;EKϡ8r% i֧n/om Qؖ'Bcqd$Q7$ZJ:rqNWIJ&( ~^0dg ߗk| @Yۺ<{Wd$y2QZdh{1WI={83bF=:mӇu#yK%ADR{( hsU^_HIo%ѶIVk<X:L1D dܖA4ݘ^䨿 r=q{R]߰Ww:5;He~1^Q9Jjp|^Yh:2zsbSB$.̂iW?%m`%( X aRy>n'*NX)^KbƄ JZ<ՙG6qG!2$ԓuCEP jU&_7(PuJ$ ˓0MbSDKIdaQ[R$$I<rԘH j=Mh&w|]tsCuDydTۗaH7Ipչ撍W,p @NIN*Ji]0=؅J"$+6#<;4%~QeHIH~A7K<;JRl]zx!u]G4gPR~[@2˹71( è- *Jxc`$޺A4ڥ~)}ʌB^X+ǥlOC[D̷0&Dh2\N|jpQCNP IjH:@SeM.ͺX=n6 #W&"W:ӦP5wEX %!EBk:c]JF,^nZlQ sM_d˓,Q?URВu{ e@UˌPOoUlY V>TIbPyCD&+5 RRds})pEL-^V`<3`KN&F =>D5b _J YkUxaYyمv;W_CI^rM. ~;9\7mHCT9]*SPV#Q%ΗA)ZȂˆ)K0<4O'>e GhblIN$`]4'|ϏQ()^ʆ}vrgNz` ߶v{! F 5>*jufPY K" `zx&*xUOk*Ȣ+/YL2{rIt|b5k|IPI"ҐDqHI=NWMY;4E r_U-TEASwMv߼ť$Բy$xi]A_TO&_v _$¯CrDIi@]0G M bW]gѬiU9:>%4Qxy䴅[P ؁-h֓dfD:C$ E ~($y^npxurҸBɴasI8mUHJpе!gi+aԾA$N4mC~qHIPH^v56" JZHÖӷN/'YܜC~|:?Z(A~!z&n/ȇ&xoqGfP (={ OFEcYZ, LnMzG)7 Ma2hib}N)20s,6 }ňg 'M'QVYJ.r5JĤ*ZOU]o }~%7۰$K %)`:4ݢ"WE/5lyh0L{\QPmx`YdDmf.c;Rs(]7deOqKcV[i˟'JKדc 7 R,I+I0|ʳK.r9J^PÆ!;'wRgi_J X5n$tCtQ.'yYfփ (oi4gaMSHAK;"ʥdsSOꖀIƘKsZHᲫo\UYSx@!F"?0y{F2pޡJ,E`rCO@.z)IjߛՆ-r ?'uY9f{)ϿI9e#&g`5Q$<^o(#8i64+@O%>Jz Q(?;c5LGW _C;SQu>IiB:z׉G~$ QsRP>9t|0%T"x{\<$w>xGv9 t8Շ}(MDC n^& 'l"(JÑcU){>3 =) @IRn͟zգih$J7nmSB.1[KŸɥ;A;/'/(ɹAcEI,J`9Qooykߒˇ Lyx%X$AN) Gߡ-pwO\&6DKIߥc|#/epz1+$AfhJFˆ8D:PXRFGĔGu%j;CrY٤)ke61՚կrNSz-udp+Sd^Ke^˳lm84rICdZ3EBs gwP. 7.-3?Q/CC@IO@"ډ0b9~ax]U UC?-B@EDxrIPYQ2ibH} f!è{12<|jvG]V$x4& 7s0ʶa?QF ?LKDawڇ>fo=xFr}NVܦ1[dD2)ap^- Ġ1VӹLAI&ỳZm4EHC)YKn@rc~$=8IP#N&:4Yu#nكQxиi}"/XC6>(|4ܒ JS5*$X&46ԩRRw WзJɶaqҘm:"&eV +*r*FmrZHF^Jq2F#n1-%`2)8@d-7Q]K&A58J .Q% O-!+/M4^dPTo4h#JB76<*L\AFx]_8'JYxf(vݛ =c\ӗXdil61t)vV%ADS1l?L$loH3>0>g5 *OABCst&vsq%d ! BA-gۂ-.x83191zRUw9p:QR櫠Or{fb1gwi3-yA(hRҍ\NbSϴ{|8/NJGS7YeLcXu)vVեZÔq4h:L@ ɣ$\^\-aex;-G"[cs^'MHLuD0" dTZx8i"*Zzp QU1$)z BrVAxӟk>D34U$RzI[䔄:xU ԠJ|EvΰNΡ$,Hj @.IκRRL6HR)v]$gޥ5nˏdvS;Q/*boQRc.cep\S* dc咰 ͈9)zIJHF-k&[RQnas[8`E޿3Tהә;Z#Xh%\ d3vy YH  %I7%q2@fU)pY N݆,Iw ݦæ[]eMf.e:U6 mH~qPκS$,Vr+!J)&4ZBUW@;&26={QΫ)/Bz60&^V]BdH"Po\;OgiNF3$u Fn6DS8גvKBԂI~޲0]{EiZjj^ۑ*zzIRBfaZa[d(uAk=KD`<؝TeDDIs#%M>kKk0jlP\u#^V2u6Y ) IfUF!¦Ͱ)D 5,1%V9XhIy-^˔\SDMy5fʡBvlݫP[ X{XXɇ"QOyeAI@f]Z3.;H"8X$#)pkiy86NNP=ZwJMv-Sv+͕kG ŒF$J¨UJ"pi4ʔZb$^FbJgz-e|1ɸ)s?r~ a\ ${$aPd^V=( -!4iWԍBca#h()zN HM *yuqeūe.^rqݯVg [B`<'^T$"s*Ԅ*d^["$k2dB0ek0,7 S> 3Wbl];M^ 5Ifvkh:f.~$tqzc$M %pV@IJn£dRg4Y'G,Ȼ-|RHF?"H~//7`pDe.T%)>HFIPkf%5KlYfw:];4,3PͿΛ>|#(S|j^tID:6#9fh$qc5h2zԲJ0( G4)RJ."WXd6r. *դ t_$#NL =kz(ZK%,$@ʴBIflJf{Hb$S{6?HSLj-@WN8x"ۯZE%,$AiR̔Dz?;RB_mpkS><\cR86`R$CiM޹良ef.kyK$gZ ՔT(IJB~ 'EQ^RRg(Fn+#~sVf@;B i9}Yź*7 yDJ$oI$m?BEڼ{?=Sp0T2)9i4P\ּtby6ش1#K$9u-!%I %GDIP呦4csRȵHt`S{޵{< [C{|}Q. w) k,LxaΖj -I oizo qmdTaSSi()>JRT))I!"5޿v]]3%ס25.o[ Xl lmoo2VxO-un<L)(AII:4)QR$BEBy;}z{N#irσty٣MW$@j 0C8"_AYP/~)ZP)Ҁ8D).kiR)IaV<*3r-ټyO~޼X@vǙn xa'G<)&#+d2ܹaACo$~J9jADI1R¨5Px8=Z$ 9{3=>h>c oz;~|΁z4J@3S8|Ӓ>$S/QRl8hHBԐԽa:> 8(s8g 탃nWP2p.\IlYe!PiWp&% d()J "$I!l>}PN{J/|$ٻ(7WQ4퓖=L :T%IH%JFҤ4)i^oݡc$dO޵@ hےwql?httag^%q\qvvEԖ6 `Z;McRi#Ha)WiRh( 4=Wn˺y]c6&`CRo~mH֢n/.v _lK,X~BL24)$I( v/ҤKZcjtӤDISSːDMI"6 h vH:z7gsPQ͌{@~K745#WD쵌P,SIpM%Je$J AI⦤y2|gØqm;/@3ۊv|`g=⤔|t)TgiGZ#ZZߌhRIcQ½2!O"D)2J"2l()JDܔ$2gCD7)=݃=on{EH7qc|>. Scg)XK@pVI$Ҥ4l JIOLǙkǀk4vm~ tt6|HP&t88Q͇D|mZ㍙l`5gIZ `VnR2M$Jle^y)?pkHI:gP&i6fA$F,h\iv0^ײ|SˁrBqjVc&ݛ$&Q`DhP()ZVɸrIQhOyITeU;Ck@6_7rw7ReN45=P.WpN`5L@I*Q&9Fn( Wl#$vMsOmj=yhWg(э'o qc p=덈 +ѳݽ#nm]\@= ЛSX{=ފ+Ap|DO+^$X( k%9$j4EMeo+>kSD춳ഒO͂K46cT),"=d+ZX+%m˞Rnryu*?_E7>'2(lEKK$RB(c)ɬ>D p.y3;UeQP![!l:|]Y3Sn Һ`Q) %uΏ}f %m3qv%6JI;yq4ك6دvkGE&WFPjW\{-#k) 2RPI4yRM% *&6bh%ޯ/^,n.Dq=vl|B _RJ $44~Jb*KI"j, k Y hW$7ُそ[nI6f(GI@': }IDAT E<8eZxi+DSNR( &P\o|/{ُK ⤤9))XIDg[od8}݀b;֐/1ZtѷԦWy%!(IemQ%2+ rR<5jc*W]GJ ho)i9ky 2|݆ܶWqz+{^_sH9+V%no)au-R`ٴe)I1L"y6I՚rSR@Mt Ke{Xq۷ -Б=譛g~0Gpsײ!Rj%!( O0Y؍}lސJ`QIlEIYQ]&Ե ܮ70K/{r6\ ~O{GuW0L^N׵lmkZ ɀEIJBOj();&Y@)%SbgkHI='z~Eu=ȷsm'?[Yxg9E9ꊝǫɧQ8և i%( AElIIɓ$sN̔tߴ%T/=T]*fV^̹ѫqe].|N7,CԴ(y2Jbr$Iܢ$%ѕ&e=SFә3g$5\o ]ve_'.nQ}uW2 >F}__ *—ڕZ3( HIW;%%#8]VvQc-D2S$J|ـP3Y)Se{՟Bخ;FNYfQSw54O<^ٕΫ?i+$l%QXaTPna4 J6T+rHKAewMmcDI7y)fJtٵ}PQoUT?|ٛqgnrZ+kivs<J Jd.$kbsMTG0$FI렇Qi}q $6 rce7`U?ᩆqJEu.~7|̮V,[$Ti&$ SKuʌU$o,=??krN(fPڦP.Ȳ*3g<#n2AJZȦ/aZ~Z,%1,ؼ葯/u!l r-+5qSܔ3fX$-ف$7w! dzE2hb$7PyvdQ[aoiC7%$*>_Mͮ^%IẖmLBL^{vW=? src/docs/Setup.md && prettier --write src/docs/Setup.md", "release": "pnpm build", "lint": "eslint --cache --ignore-path .gitignore . && pnpm lint:jison && prettier --check .", "vdocs:dev": "vitepress dev vdocs", "vdocs:build": "vitepress build vdocs", "vdocs:serve": "vitepress serve vdocs", "postbuild": "echo 'building docs from code here soon'", "lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write .", "lint:jison": "ts-node-esm --transpileOnly packages/mermaid/src/jison/lint.mts", "cypress": "cypress run", "cypress:open": "cypress open", "e2e": "start-server-and-test dev http://localhost:9000/ cypress", "ci": "vitest run", "test": "pnpm lint && vitest run", "test:watch": "vitest --watch", "test:coverage": "vitest --coverage", "prepublishOnly": "pnpm build && pnpm test", "prepare": "concurrently \"husky install\" \"pnpm build\"", "pre-commit": "lint-staged" }, "repository": { "type": "git", "url": "https://github.com/mermaid-js/mermaid" }, "author": "Knut Sveidqvist", "license": "MIT", "standard": { "ignore": [ "**/parser/*.js", "dist/**/*.js", "cypress/**/*.js" ], "globals": [ "page" ] }, "dependencies": { "@braintree/sanitize-url": "^6.0.0", "@types/node": "^18.8.1", "@types/uuid": "^8.3.4", "d3": "^7.0.0", "dagre": "^0.8.5", "dagre-d3": "^0.6.4", "dompurify": "2.4.0", "fast-clone": "^1.5.13", "graphlib": "^2.1.8", "khroma": "^2.0.0", "lodash": "^4.17.21", "moment-mini": "^2.24.0", "non-layered-tidy-tree-layout": "^2.0.2", "rollup": "^2.79.1", "stylis": "^4.1.2", "uuid": "^9.0.0" }, "devDependencies": { "@applitools/eyes-cypress": "^3.27.1", "@commitlint/cli": "^17.1.2", "@commitlint/config-conventional": "^17.1.0", "@types/d3": "^7.4.0", "@types/dompurify": "^2.3.4", "@types/eslint": "^8.4.6", "@types/express": "^4.17.14", "@types/jsdom": "^20.0.0", "@types/lodash": "^4.14.186", "@types/mdast": "^3.0.10", "@types/prettier": "^2.7.1", "@types/stylis": "^4.0.2", "@typescript-eslint/eslint-plugin": "^5.39.0", "@typescript-eslint/parser": "^5.39.0", "@vitest/coverage-c8": "^0.23.4", "@vitest/ui": "^0.23.4", "concurrently": "^7.4.0", "coveralls": "^3.1.1", "cypress": "^10.0.0", "cypress-image-snapshot": "^4.0.1", "documentation": "13.2.0", "esbuild": "^0.15.10", "eslint": "^8.24.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-cypress": "^2.12.1", "eslint-plugin-html": "^7.1.0", "eslint-plugin-jest": "^27.1.0", "eslint-plugin-jsdoc": "^39.3.6", "eslint-plugin-json": "^3.1.0", "eslint-plugin-markdown": "^3.0.0", "express": "^4.18.1", "globby": "^13.1.2", "husky": "^8.0.1", "identity-obj-proxy": "^3.0.0", "jest": "29.x", "jison": "^0.4.18", "jsdom": "^20.0.1", "lint-staged": "^13.0.3", "markdown-it": "^13.0.1", "path-browserify": "^1.0.1", "pnpm": "^7.13.2", "prettier": "^2.7.1", "prettier-plugin-jsdoc": "^0.4.2", "remark": "^14.0.2", "rimraf": "^3.0.2", "start-server-and-test": "^1.14.0", "ts-node": "^10.9.1", "typescript": "^4.8.4", "unist-util-flatmap": "^1.0.0", "vite": "^3.1.4", "vitepress": "^1.0.0-alpha.19", "vitepress-plugin-mermaid": "^2.0.8", "vitepress-plugin-search": "^1.0.4-alpha.11", "vitest": "^0.23.4" }, "resolutions": { "d3": "^7.0.0" }, "sideEffects": [ "**/*.css", "**/*.scss" ], "volta": { "node": "18.5.0" } } mermaid-js-mermaid-9bb0ed2/packages/000077500000000000000000000000001433273745700174445ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/000077500000000000000000000000001433273745700241155ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/Readme.md000066400000000000000000000001241433273745700256310ustar00rootroot00000000000000### Do not refer this package. It is not ready. ### Refer mermaid-mindmap instead. mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/package.json000066400000000000000000000034041433273745700264040ustar00rootroot00000000000000{ "name": "@mermaid-js/mermaid-example-diagram", "version": "9.2.0-rc2", "description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "main": "dist/mermaid-mindmap.core.mjs", "module": "dist/mermaid-mindmap.core.mjs", "type": "module", "exports": { ".": { "require": "./dist/mermaid-example-diagram.min.js", "import": "./dist/mermaid-example-diagram.core.mjs" }, "./*": "./*" }, "keywords": [ "diagram", "markdown", "mindmap", "mermaid" ], "scripts": { "clean": "rimraf dist", "build:types": "tsc -p ./tsconfig.json --emitDeclarationOnly", "build:watch": "yarn build:code --watch", "build:esbuild": "concurrently \"yarn build:code\" \"yarn build:types\"", "build": "yarn clean; yarn build:esbuild", "dev": "node .esbuild/serve.cjs", "release": "yarn build", "lint": "eslint --cache --ignore-path .gitignore . && yarn lint:jison && prettier --check .", "lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write .", "lint:jison": "ts-node-esm src/jison/lint.mts", "todo-prepare": "concurrently \"husky install ../../.husky\" \"yarn build\"", "todo-pre-commit": "lint-staged" }, "repository": { "type": "git", "url": "https://github.com/mermaid-js/mermaid" }, "author": "Knut Sveidqvist", "license": "MIT", "standard": { "ignore": [ "**/parser/*.js", "dist/**/*.js", "cypress/**/*.js" ], "globals": [ "page" ] }, "dependencies": {}, "devDependencies": { "concurrently": "^7.4.0", "rimraf": "^3.0.2" }, "resolutions": { "d3": "^7.0.0" }, "files": [ "dist" ], "sideEffects": [ "**/*.css", "**/*.scss" ] } mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/src/000077500000000000000000000000001433273745700247045ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/src/detector.ts000066400000000000000000000010431433273745700270630ustar00rootroot00000000000000// @ts-ignore: TODO Fix ts errors export const id = 'example-diagram'; /** * Detector function that will be called by mermaid to determine if the diagram is this type of digram. * * @param txt The diagram text will be passed to the detector * @returns True if the diagram text matches a diagram of this type */ export const detector = (txt: string) => { return txt.match(/^\s*example-diagram/) !== null; }; export const loadDiagram = async () => { const { diagram } = await import('./diagram-definition'); return { id, diagram }; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/src/diagram-definition.ts000066400000000000000000000005661433273745700310150ustar00rootroot00000000000000// @ts-ignore: TODO Fix ts errors import parser from './parser/exampleDiagram'; import * as db from './exampleDiagramDb'; import renderer from './exampleDiagramRenderer'; import styles from './styles'; import { injectUtils } from './mermaidUtils'; export const diagram = { db, renderer, parser, styles, injectUtils, }; export { detector, id } from './detector'; mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/src/exampleDiagram.spec.js000066400000000000000000000005521433273745700311150ustar00rootroot00000000000000import { parser } from './parser/exampleDiagram'; import db from './exampleDiagramDb'; describe('when parsing an info graph it', function () { let ex; beforeEach(function () { ex = parser; ex.yy = db; }); it('should handle an example-diagram definition', function () { let str = `example-diagram showInfo`; ex.parse(str); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/src/exampleDiagramDb.js000066400000000000000000000011421433273745700304260ustar00rootroot00000000000000/** Created by knut on 15-01-14. */ import { log } from './mermaidUtils'; var message = ''; var info = false; export const setMessage = (txt) => { log.debug('Setting message to: ' + txt); message = txt; }; export const getMessage = () => { return message; }; /** * Sets the info flag * * @param {boolean} inf */ export const setInfo = (inf) => { info = inf; }; /** @returns Returns the info flag */ export const getInfo = () => { return info; }; export const clear = () => { message = ''; info = false; }; export default { setMessage, getMessage, setInfo, getInfo, clear, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/src/exampleDiagramRenderer.js000066400000000000000000000042521433273745700316540ustar00rootroot00000000000000/** Created by knut on 14-12-11. */ import { select } from 'd3'; import { log, getConfig, setupGraphViewbox } from './mermaidUtils'; /** * Draws a an info picture in the tag with id: id based on the graph definition in text. * * @param {any} text * @param {any} id * @param {any} version * @param diagObj */ export const draw = (text, id, version) => { try { const conf = getConfig(); log.debug('Rendering example diagram\n' + text, 'Conf: '); const THEME_COLOR_LIMIT = getConfig().themeVariables.THEME_COLOR_LIMIT; const securityLevel = getConfig().securityLevel; // Handle root and Document for when rendering in sanbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); const svg = root.select('#' + id); const g = svg.append('g'); let i; for (i = 0; i < THEME_COLOR_LIMIT; i++) { const section = g.append('g').attr('class', 'section-' + i); section .append('rect') .attr('x', (i % 5) * 110) .attr('y', Math.floor(i / 5) * 90 + 60) .attr('width', 100) .attr('height', 60); section .append('rect') .attr('x', (i % 5) * 110) .attr('y', Math.floor(i / 5) * 90 + 120) .attr('class', 'inverted') .attr('width', 100) .attr('height', 20); section .append('text', 'section-' + i) .text('Section ' + i) .attr('x', (i % 5) * 110 + 15) .attr('y', Math.floor(i / 5) * 90 + 95) .attr('class', 'section-text-' + i); } g.append('text') // text label for the x axis .attr('x', 100) .attr('y', 40) .attr('class', 'version') .attr('font-size', '32px') .style('text-anchor', 'middle') .text('v ' + version); // Setup the view box and size of the svg element setupGraphViewbox(undefined, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth); } catch (e) { log.error('Error while rendering info diagram'); log.error(e.message); } }; export default { draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/src/mermaidUtils.ts000066400000000000000000000030501433273745700277110ustar00rootroot00000000000000const warning = () => null; export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'; export const LEVELS: Record = { trace: 0, debug: 1, info: 2, warn: 3, error: 4, fatal: 5, }; export const log: Record = { trace: warning, debug: warning, info: warning, warn: warning, error: warning, fatal: warning, }; export let setLogLevel: (level: keyof typeof LEVELS | number | string) => void; export let getConfig: () => object; export let sanitizeText: (str: string) => string; /** * Placeholder for the real function that will be injected by mermaid. */ // eslint-disable @typescript-eslint/no-explicit-any export let setupGraphViewbox: ( graph: any, svgElem: any, padding: any, useMaxWidth: boolean ) => void; /** * Function called by mermaid that injects utility functions that help the diagram to be a good citizen. * @param _log * @param _setLogLevel * @param _getConfig * @param _sanitizeText * @param _setupGraphViewbox */ export const injectUtils = ( _log: Record, _setLogLevel: any, _getConfig: any, _sanitizeText: any, _setupGraphViewbox: any ) => { _log.debug('Mermaid utils injected into example-diagram'); log.trace = _log.trace; log.debug = _log.debug; log.info = _log.info; log.warn = _log.warn; log.error = _log.error; log.fatal = _log.fatal; setLogLevel = _setLogLevel; getConfig = _getConfig; sanitizeText = _sanitizeText; setupGraphViewbox = _setupGraphViewbox; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/src/parser/000077500000000000000000000000001433273745700262005ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/src/parser/exampleDiagram.jison000066400000000000000000000011251433273745700321630ustar00rootroot00000000000000%lex %options case-insensitive %{ // Pre-lexer code can go here %} %% "example-diagram" return 'example-diagram' ; [\s\n\r]+ return 'NL' ; [\s]+ return 'space'; "showInfo" return 'showInfo'; <> return 'EOF' ; . return 'TXT' ; /lex %start start %% /* language grammar */ start // %{ : example-diagram document 'EOF' { return yy; } } : example-diagram document 'EOF' { return yy; } ; document : /* empty */ | document line ; line : statement { } | 'NL' ; statement : showInfo { yy.setInfo(true); } ; %% mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/src/styles.js000066400000000000000000000011271433273745700265660ustar00rootroot00000000000000import { darken, lighten, isDark } from 'khroma'; const genSections = (options) => { let sections = ''; for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { sections += ` .section-${i} rect { fill: ${options['cScale' + i]}; stroke: ${options['cScalePeer' + i]}; stroke-width: 4; } .section-${i} rect.inverted { fill: ${options['cScaleInv' + i]}; } .section-${i} text { fill: ${options['cScaleLabel' + i]}; } `; } return sections; }; const getStyles = (options) => ` ${genSections(options)} `; export default getStyles; mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/src/types/000077500000000000000000000000001433273745700260505ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/src/types/index.d.ts000066400000000000000000000001541433273745700277510ustar00rootroot00000000000000export {}; declare global { interface Window { mermaid: any; // 👈️ turn off type checking } } mermaid-js-mermaid-9bb0ed2/packages/mermaid-example-diagram/tsconfig.json000066400000000000000000000002621433273745700266240ustar00rootroot00000000000000{ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", "outDir": "./dist" }, "include": ["./src/**/*.ts"], "typeRoots": ["./src/types"] } mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/000077500000000000000000000000001433273745700225055ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/package.json000066400000000000000000000037101433273745700247740ustar00rootroot00000000000000{ "name": "@mermaid-js/mermaid-mindmap", "version": "9.2.2-rc.2", "description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "module": "dist/mermaid-mindmap.core.mjs", "types": "dist/detector.d.ts", "type": "module", "exports": { ".": { "import": "./dist/mermaid-mindmap.core.mjs", "types": "./dist/detector.d.ts" }, "./*": "./*" }, "keywords": [ "diagram", "markdown", "mindmap", "mermaid" ], "scripts": { "clean": "rimraf dist", "build:types": "tsc -p ./tsconfig.json --emitDeclarationOnly", "build:watch": "yarn build:code --watch", "build:esbuild": "concurrently \"yarn build:code\" \"yarn build:types\"", "build": "yarn clean; yarn build:esbuild", "dev": "node .esbuild/serve.cjs", "release": "yarn build", "lint": "eslint --cache --ignore-path .gitignore . && yarn lint:jison && prettier --check .", "lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write .", "lint:jison": "ts-node-esm src/jison/lint.mts", "todo-prepare": "concurrently \"husky install ../../.husky\" \"yarn build\"", "todo-pre-commit": "lint-staged" }, "repository": { "type": "git", "url": "https://github.com/mermaid-js/mermaid" }, "author": "Knut Sveidqvist", "license": "MIT", "standard": { "ignore": [ "**/parser/*.js", "dist/**/*.js", "cypress/**/*.js" ], "globals": [ "page" ] }, "dependencies": { "@braintree/sanitize-url": "^6.0.0", "cytoscape": "^3.23.0", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.1.0", "d3": "^7.0.0", "non-layered-tidy-tree-layout": "^2.0.2" }, "devDependencies": { "concurrently": "^7.4.0", "mermaid": "workspace:*", "rimraf": "^3.0.2" }, "resolutions": { "d3": "^7.0.0" }, "files": [ "dist" ], "sideEffects": [ "**/*.css", "**/*.scss" ] } mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/000077500000000000000000000000001433273745700232745ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/detector.ts000066400000000000000000000006001433273745700254510ustar00rootroot00000000000000import type { ExternalDiagramDefinition } from 'mermaid'; const id = 'mindmap'; const detector = (txt: string) => { return txt.match(/^\s*mindmap/) !== null; }; const loader = async () => { const { diagram } = await import('./diagram-definition'); return { id, diagram }; }; const plugin: ExternalDiagramDefinition = { id, detector, loader, }; export default plugin; mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/diagram-definition.ts000066400000000000000000000006131433273745700273760ustar00rootroot00000000000000// @ts-ignore: TODO Fix ts errors import mindmapParser from './parser/mindmap'; import * as mindmapDb from './mindmapDb'; import mindmapRenderer from './mindmapRenderer'; import mindmapStyles from './styles'; import { injectUtils } from './mermaidUtils'; export const diagram = { db: mindmapDb, renderer: mindmapRenderer, parser: mindmapParser, styles: mindmapStyles, injectUtils, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/mermaidUtils.ts000066400000000000000000000026311433273745700263050ustar00rootroot00000000000000import type { MermaidConfig } from 'mermaid'; const warning = (s: string) => { // Todo remove debug code console.error('Log function was called before initialization', s); // eslint-disable-line }; export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'; export const LEVELS: Record = { trace: 0, debug: 1, info: 2, warn: 3, error: 4, fatal: 5, }; export const log: Record = { trace: warning, debug: warning, info: warning, warn: warning, error: warning, fatal: warning, }; export let setLogLevel: (level: keyof typeof LEVELS | number | string) => void; export let getConfig: () => MermaidConfig; export let sanitizeText: (str: string) => string; // eslint-disable @typescript-eslint/no-explicit-any export let setupGraphViewbox: ( graph: any, svgElem: any, padding: any, useMaxWidth: boolean ) => void; export const injectUtils = ( _log: Record, _setLogLevel: any, _getConfig: any, _sanitizeText: any, _setupGraphViewbox: any ) => { _log.info('Mermaid utils injected'); log.trace = _log.trace; log.debug = _log.debug; log.info = _log.info; log.warn = _log.warn; log.error = _log.error; log.fatal = _log.fatal; setLogLevel = _setLogLevel; getConfig = _getConfig; sanitizeText = _sanitizeText; setupGraphViewbox = _setupGraphViewbox; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/mindmap.spec.js000066400000000000000000000243641433273745700262210ustar00rootroot00000000000000import { parser as mindmap } from './parser/mindmap'; import * as mindmapDB from './mindmapDb'; import { injectUtils } from './mermaidUtils'; // Todo fix utils functions for tests import { log, setLogLevel, getConfig, sanitizeText, setupGraphViewBox, } from '../../mermaid/src/diagram-api/diagramAPI'; injectUtils(log, setLogLevel, getConfig, sanitizeText, setupGraphViewBox); describe('when parsing a mindmap ', function () { beforeEach(function () { mindmap.yy = mindmapDB; mindmap.yy.clear(); setLogLevel('trace'); }); describe('hiearchy', function () { it('MMP-1 should handle a simple root definition abc122', function () { let str = `mindmap root`; mindmap.parse(str); // console.log('Time for checks', mindmap.yy.getMindmap().descr); expect(mindmap.yy.getMindmap().descr).toEqual('root'); }); it('MMP-2 should handle a hierachial mindmap definition', function () { let str = `mindmap root child1 child2 `; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.descr).toEqual('root'); expect(mm.children.length).toEqual(2); expect(mm.children[0].descr).toEqual('child1'); expect(mm.children[1].descr).toEqual('child2'); }); it('3 should handle a simple root definition with a shape and without an id abc123', function () { let str = `mindmap (root)`; mindmap.parse(str); // console.log('Time for checks', mindmap.yy.getMindmap().descr); expect(mindmap.yy.getMindmap().descr).toEqual('root'); }); it('MMP-4 should handle a deeper hierachial mindmap definition', function () { let str = `mindmap root child1 leaf1 child2`; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.descr).toEqual('root'); expect(mm.children.length).toEqual(2); expect(mm.children[0].descr).toEqual('child1'); expect(mm.children[0].children[0].descr).toEqual('leaf1'); expect(mm.children[1].descr).toEqual('child2'); }); it('5 Multiple roots are illegal', function () { let str = `mindmap root fakeRoot`; try { mindmap.parse(str); // Fail test if above expression doesn't throw anything. expect(true).toBe(false); } catch (e) { expect(e.message).toBe( 'There can be only one root. No parent could be found for ("fakeRoot")' ); } }); it('MMP-6 real root in wrong place', function () { let str = `mindmap root fakeRoot realRootWrongPlace`; try { mindmap.parse(str); // Fail test if above expression doesn't throw anything. expect(true).toBe(false); } catch (e) { expect(e.message).toBe( 'There can be only one root. No parent could be found for ("fakeRoot")' ); } }); }); describe('nodes', function () { it('MMP-7 should handle an id and type for a node definition', function () { let str = `mindmap root[The root] `; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.nodeId).toEqual('root'); expect(mm.descr).toEqual('The root'); expect(mm.type).toEqual(mindmap.yy.nodeType.RECT); }); it('MMP-8 should handle an id and type for a node definition', function () { let str = `mindmap root theId(child1)`; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.descr).toEqual('root'); expect(mm.children.length).toEqual(1); const child = mm.children[0]; expect(child.descr).toEqual('child1'); expect(child.nodeId).toEqual('theId'); expect(child.type).toEqual(mindmap.yy.nodeType.ROUNDED_RECT); }); it('MMP-9 should handle an id and type for a node definition', function () { let str = `mindmap root theId(child1)`; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.descr).toEqual('root'); expect(mm.children.length).toEqual(1); const child = mm.children[0]; expect(child.descr).toEqual('child1'); expect(child.nodeId).toEqual('theId'); expect(child.type).toEqual(mindmap.yy.nodeType.ROUNDED_RECT); }); it('MMP-10 mutiple types (circle)', function () { let str = `mindmap root((the root)) `; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.descr).toEqual('the root'); expect(mm.children.length).toEqual(0); expect(mm.type).toEqual(mindmap.yy.nodeType.CIRCLE); }); it('MMP-11 mutiple types (cloud)', function () { let str = `mindmap root)the root( `; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.descr).toEqual('the root'); expect(mm.children.length).toEqual(0); expect(mm.type).toEqual(mindmap.yy.nodeType.CLOUD); }); it('MMP-12 mutiple types (bang)', function () { let str = `mindmap root))the root(( `; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.descr).toEqual('the root'); expect(mm.children.length).toEqual(0); expect(mm.type).toEqual(mindmap.yy.nodeType.BANG); }); }); describe('decorations', function () { it('MMP-13 should be possible to set an icon for the node', function () { let str = `mindmap root[The root] ::icon(bomb) `; // ::class1 class2 mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.nodeId).toEqual('root'); expect(mm.descr).toEqual('The root'); expect(mm.type).toEqual(mindmap.yy.nodeType.RECT); expect(mm.icon).toEqual('bomb'); }); it('MMP-14 should be possible to set classes for the node', function () { let str = `mindmap root[The root] :::m-4 p-8 `; // ::class1 class2 mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.nodeId).toEqual('root'); expect(mm.descr).toEqual('The root'); expect(mm.type).toEqual(mindmap.yy.nodeType.RECT); expect(mm.class).toEqual('m-4 p-8'); }); it('MMP-15 should be possible to set both classes and icon for the node', function () { let str = `mindmap root[The root] :::m-4 p-8 ::icon(bomb) `; // ::class1 class2 mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.nodeId).toEqual('root'); expect(mm.descr).toEqual('The root'); expect(mm.type).toEqual(mindmap.yy.nodeType.RECT); expect(mm.class).toEqual('m-4 p-8'); expect(mm.icon).toEqual('bomb'); }); it('MMP-16 should be possible to set both classes and icon for the node', function () { let str = `mindmap root[The root] ::icon(bomb) :::m-4 p-8 `; // ::class1 class2 mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.nodeId).toEqual('root'); expect(mm.descr).toEqual('The root'); expect(mm.type).toEqual(mindmap.yy.nodeType.RECT); expect(mm.class).toEqual('m-4 p-8'); expect(mm.icon).toEqual('bomb'); }); }); describe('descriptions', function () { it('MMP-17 should be possible to use node syntax in the descriptions', function () { let str = `mindmap root["String containing []"] `; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.nodeId).toEqual('root'); expect(mm.descr).toEqual('String containing []'); }); it('MMP-18 should be possible to use node syntax in the descriptions in children', function () { let str = `mindmap root["String containing []"] child1["String containing ()"] `; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.nodeId).toEqual('root'); expect(mm.descr).toEqual('String containing []'); expect(mm.children.length).toEqual(1); expect(mm.children[0].descr).toEqual('String containing ()'); }); it('MMP-19 should be possible to have a child after a class assignment', function () { let str = `mindmap root(Root) Child(Child) :::hot a(a) b[New Stuff]`; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.nodeId).toEqual('root'); expect(mm.descr).toEqual('Root'); expect(mm.children.length).toEqual(1); const child = mm.children[0]; expect(child.nodeId).toEqual('Child'); expect(child.children[0].nodeId).toEqual('a'); expect(child.children.length).toEqual(2); expect(child.children[1].nodeId).toEqual('b'); }); }); it('MMP-20 should be possible to have meaningless empty rows in a mindmap abc124', function () { let str = `mindmap root(Root) Child(Child) a(a) b[New Stuff]`; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.nodeId).toEqual('root'); expect(mm.descr).toEqual('Root'); expect(mm.children.length).toEqual(1); const child = mm.children[0]; expect(child.nodeId).toEqual('Child'); expect(child.children[0].nodeId).toEqual('a'); expect(child.children.length).toEqual(2); expect(child.children[1].nodeId).toEqual('b'); }); it('MMP-21 should be possible to have comments in a mindmap', function () { let str = `mindmap root(Root) Child(Child) a(a) %% This is a comment b[New Stuff]`; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.nodeId).toEqual('root'); expect(mm.descr).toEqual('Root'); expect(mm.children.length).toEqual(1); const child = mm.children[0]; expect(child.nodeId).toEqual('Child'); expect(child.children[0].nodeId).toEqual('a'); expect(child.children.length).toEqual(2); expect(child.children[1].nodeId).toEqual('b'); }); it('MMP-22 should be possible to have comments at the end of a line', function () { let str = `mindmap root(Root) Child(Child) a(a) %% This is a comment b[New Stuff]`; mindmap.parse(str); const mm = mindmap.yy.getMindmap(); expect(mm.nodeId).toEqual('root'); expect(mm.descr).toEqual('Root'); expect(mm.children.length).toEqual(1); const child = mm.children[0]; expect(child.nodeId).toEqual('Child'); expect(child.children[0].nodeId).toEqual('a'); expect(child.children.length).toEqual(2); expect(child.children[1].nodeId).toEqual('b'); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/mindmapDb.ts000066400000000000000000000070211433273745700255370ustar00rootroot00000000000000/** Created by knut on 23-07-2022. */ import { sanitizeText, getConfig, log } from './mermaidUtils'; import type { DetailedError } from 'mermaid'; interface Node { id: number; nodeId: string; level: number; descr: string; type: number; children: Node[]; width: number; padding: number; icon?: string; class?: string; } let nodes: Node[] = []; let cnt = 0; export const clear = () => { nodes = []; cnt = 0; }; const getParent = function (level: number) { for (let i = nodes.length - 1; i >= 0; i--) { if (nodes[i].level < level) { return nodes[i]; } } // No parent found return null; }; export const getMindmap = () => { return nodes.length > 0 ? nodes[0] : null; }; export const addNode = (level: number, id: string, descr: string, type: number) => { log.info('addNode', level, id, descr, type); const conf = getConfig(); const padding = conf.mindmap?.padding ?? 15; const node: Node = { id: cnt++, nodeId: sanitizeText(id), level, descr: sanitizeText(descr), type, children: [], width: getConfig().mindmap?.maxNodeWidth ?? 200, padding: type === nodeType.ROUNDED_RECT || type === nodeType.RECT ? 2 * padding : padding, }; const parent = getParent(level); if (parent) { parent.children.push(node); // Keep all nodes in the list nodes.push(node); } else { if (nodes.length === 0) { // First node, the root nodes.push(node); } else { // Syntax error ... there can only bee one root const error = new Error( 'There can be only one root. No parent could be found for ("' + node.descr + '")' ); // @ts-ignore TODO: Add mermaid error error.hash = { text: 'branch ' + name, token: 'branch ' + name, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ['"checkout ' + name + '"'], }; throw error; } } }; export const nodeType = { DEFAULT: 0, NO_BORDER: 0, ROUNDED_RECT: 1, RECT: 2, CIRCLE: 3, CLOUD: 4, BANG: 5, }; export const getType = (startStr: string, endStr: string): number => { log.debug('In get type', startStr, endStr); switch (startStr) { case '[': return nodeType.RECT; case '(': return endStr === ')' ? nodeType.ROUNDED_RECT : nodeType.CLOUD; case '((': return nodeType.CIRCLE; case ')': return nodeType.CLOUD; case '))': return nodeType.BANG; default: return nodeType.DEFAULT; } }; export const decorateNode = (decoration: { icon: string; class: string }) => { const node = nodes[nodes.length - 1]; if (decoration && decoration.icon) { node.icon = sanitizeText(decoration.icon); } if (decoration && decoration.class) { node.class = sanitizeText(decoration.class); } }; export const type2Str = (type: number) => { switch (type) { case nodeType.DEFAULT: return 'no-border'; case nodeType.RECT: return 'rect'; case nodeType.ROUNDED_RECT: return 'rounded-rect'; case nodeType.CIRCLE: return 'circle'; case nodeType.CLOUD: return 'cloud'; case nodeType.BANG: return 'bang'; default: return 'no-border'; } }; export type ParseErrorFunction = (err: string | DetailedError, hash?: any) => void; export let parseError: ParseErrorFunction; export const setErrorHandler = (handler: ParseErrorFunction) => { parseError = handler; }; // Expose logger to grammar export const getLogger = () => log; export const getNodeById = (id: number): Node => nodes[id]; mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/mindmapRenderer.js000066400000000000000000000135071433273745700267540ustar00rootroot00000000000000/** Created by knut on 23-07-2022. */ import { select } from 'd3'; import { log, getConfig, setupGraphViewbox } from './mermaidUtils'; import svgDraw, { getElementById, clearElementRefs } from './svgDraw'; import cytoscape from 'cytoscape'; import coseBilkent from 'cytoscape-cose-bilkent'; // Inject the layout algorithm into cytoscape cytoscape.use(coseBilkent); /** * @param {any} svg The svg element to draw the diagram onto * @param {object} mindmap The maindmap data and hierarchy * @param section * @param {object} conf The configuration object */ function drawNodes(svg, mindmap, section, conf) { svgDraw.drawNode(svg, mindmap, section, conf); if (mindmap.children) { mindmap.children.forEach((child, index) => { drawNodes(svg, child, section < 0 ? index : section, conf); }); } } /** * @param edgesElem * @param mindmap * @param parent * @param depth * @param section * @param edgesEl * @param cy */ function drawEdges(edgesEl, cy) { cy?.edges().map((edge, id) => { const data = edge.data(); if (edge[0]._private.bodyBounds) { const bounds = edge[0]._private.rscratch; log.trace('Edge: ', id, data); edgesEl .insert('path') .attr( 'd', `M ${bounds.startX},${bounds.startY} L ${bounds.midX},${bounds.midY} L${bounds.endX},${bounds.endY} ` ) .attr('class', 'edge section-edge-' + data.section + ' edge-depth-' + data.depth); } }); } /** * @param {any} svg The svg element to draw the diagram onto * @param {object} mindmap The maindmap data and hierarchy * @param section * @param cy * @param {object} conf The configuration object * @param level */ function addNodes(mindmap, cy, conf, level) { cy.add({ group: 'nodes', data: { id: mindmap.id, labelText: mindmap.descr, height: mindmap.height, width: mindmap.width, level: level, nodeId: mindmap.id, padding: mindmap.padding, type: mindmap.type, }, position: { x: mindmap.x, y: mindmap.y, }, }); if (mindmap.children) { mindmap.children.forEach((child) => { addNodes(child, cy, conf, level + 1); cy.add({ group: 'edges', data: { id: `${mindmap.id}_${child.id}`, source: mindmap.id, target: child.id, depth: level, section: child.section, }, }); }); } } /** * @param node * @param conf * @param cy */ function layoutMindmap(node, conf) { return new Promise((resolve) => { // if (node.children.length === 0) { // resolve(node); // return; // } // Add temporary render element const renderEl = select('body').append('div').attr('id', 'cy').attr('style', 'display:none'); const cy = cytoscape({ container: document.getElementById('cy'), // container to render in style: [ { selector: 'edge', style: { 'curve-style': 'bezier', }, }, ], }); // Remove element after layout renderEl.remove(); addNodes(node, cy, conf, 0); // Make cytoscape care about the dimensisions of the nodes cy.nodes().forEach(function (n) { n.layoutDimensions = () => { const data = n.data(); return { w: data.width, h: data.height }; }; }); cy.layout({ name: 'cose-bilkent', quality: 'proof', // headless: true, styleEnabled: false, animate: false, }).run(); cy.ready((e) => { log.info('Ready', e); resolve(cy); }); }); } /** * @param node * @param cy * @param positionedMindmap * @param conf */ function positionNodes(cy) { cy.nodes().map((node, id) => { const data = node.data(); data.x = node.position().x; data.y = node.position().y; svgDraw.positionNode(data); const el = getElementById(data.nodeId); log.info('Id:', id, 'Position: (', node.position().x, ', ', node.position().y, ')', data); el.attr( 'transform', `translate(${node.position().x - data.width / 2}, ${node.position().y - data.height / 2})` ); el.attr('attr', `apa-${id})`); }); } /** * Draws a an info picture in the tag with id: id based on the graph definition in text. * * @param {any} text * @param {any} id * @param {any} version * @param diagObj */ export const draw = async (text, id, version, diagObj) => { const conf = getConfig(); // This is done only for throwing the error if the text is not valid. diagObj.db.clear(); clearElementRefs(); // Parse the graph definition diagObj.parser.parse(text); log.debug('Renering info diagram\n' + text); const securityLevel = getConfig().securityLevel; // Handle root and Document for when rendering in sanbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); // Parse the graph definition const svg = root.select('#' + id); svg.append('g'); const mm = diagObj.db.getMindmap(); // Draw the graph and start with drawing the nodes without proper position // this gives us the size of the nodes and we can set the positions later const edgesElem = svg.append('g'); edgesElem.attr('class', 'mindmap-edges'); const nodesElem = svg.append('g'); nodesElem.attr('class', 'mindmap-nodes'); drawNodes(nodesElem, mm, -1, conf); // Next step is to layout the mindmap, giving each node a position const cy = await layoutMindmap(mm, conf); // // After this we can draw, first the edges and the then nodes with the correct position drawEdges(edgesElem, cy, conf); positionNodes(cy, conf); // Setup the view box and size of the svg element setupGraphViewbox(undefined, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth); }; export default { draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/parser/000077500000000000000000000000001433273745700245705ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/parser/mindmap.jison000066400000000000000000000100751433273745700272640ustar00rootroot00000000000000/** mermaid * https://knsv.github.io/mermaid * (c) 2015 Knut Sveidqvist * MIT license. */ %lex %options case-insensitive %{ // Pre-lexer code can go here %} %x NODE %x NSTR %x ICON %x CLASS %% \s*\%\%.* {yy.getLogger().trace('Found comment',yytext);} // \%\%[^\n]*\n /* skip comments */ "mindmap" return 'MINDMAP'; ":::" { this.begin('CLASS'); } .+ { this.popState();return 'CLASS'; } \n { this.popState();} // [\s]*"::icon(" { this.begin('ICON'); } "::icon(" { yy.getLogger().trace('Begin icon');this.begin('ICON'); } [\n]+ return 'NL'; [^\)]+ { return 'ICON'; } \) {yy.getLogger().trace('end icon');this.popState();} "-)" { yy.getLogger().trace('Exploding node'); this.begin('NODE');return 'NODE_DSTART'; } "(-" { yy.getLogger().trace('Cloud'); this.begin('NODE');return 'NODE_DSTART'; } "))" { yy.getLogger().trace('Explosion Bang'); this.begin('NODE');return 'NODE_DSTART'; } ")" { yy.getLogger().trace('Cloud Bang'); this.begin('NODE');return 'NODE_DSTART'; } "((" { this.begin('NODE');return 'NODE_DSTART'; } "(" { this.begin('NODE');return 'NODE_DSTART'; } "[" { this.begin('NODE');return 'NODE_DSTART'; } [\s]+ return 'SPACELIST' /* skip all whitespace */ ; // !(-\() return 'NODE_ID'; [^\(\[\n\-\)]+ return 'NODE_ID'; <> return 'EOF'; ["] { yy.getLogger().trace('Starting NSTR');this.begin("NSTR");} [^"]+ { yy.getLogger().trace('description:', yytext); return "NODE_DESCR";} ["] {this.popState();} [\)]\) {this.popState();yy.getLogger().trace('node end ))');return "NODE_DEND";} [\)] {this.popState();yy.getLogger().trace('node end )');return "NODE_DEND";} [\]] {this.popState();yy.getLogger().trace('node end ...',yytext);return "NODE_DEND";} "(-" {this.popState();yy.getLogger().trace('node end (-');return "NODE_DEND";} "-)" {this.popState();yy.getLogger().trace('node end (-');return "NODE_DEND";} "((" {this.popState();yy.getLogger().trace('node end ((');return "NODE_DEND";} "(" {this.popState();yy.getLogger().trace('node end ((');return "NODE_DEND";} [^\)\]\(]+ { yy.getLogger().trace('Long description:', yytext); return 'NODE_DESCR';} .+(?!\(\() { yy.getLogger().trace('Long description:', yytext); return 'NODE_DESCR';} // [\[] return 'NODE_START'; // .+ return 'TXT' ; /lex %start start %% /* language grammar */ start // %{ : info document 'EOF' { return yy; } } : MINDMAP document { return yy; } | MINDMAP NL document { return yy; } | SPACELIST MINDMAP document { return yy; } ; stop : NL {yy.getLogger().trace('Stop NL ');} | EOF {yy.getLogger().trace('Stop EOF ');} | stop NL {yy.getLogger().trace('Stop NL2 ');} | stop EOF {yy.getLogger().trace('Stop EOF2 ');} ; document : document statement stop | statement stop ; statement : SPACELIST node { yy.getLogger().trace('Node: ',$2.id);yy.addNode($1.length, $2.id, $2.descr, $2.type); } | SPACELIST ICON { yy.getLogger().trace('Icon: ',$2);yy.decorateNode({icon: $2}); } | SPACELIST CLASS { yy.decorateNode({class: $2}); } | node { yy.getLogger().trace('Node: ',$1.id);yy.addNode(0, $1.id, $1.descr, $1.type); } | ICON { yy.decorateNode({icon: $1}); } | CLASS { yy.decorateNode({class: $1}); } | SPACELIST ; node :nodeWithId |nodeWithoutId ; nodeWithoutId : NODE_DSTART NODE_DESCR NODE_DEND { yy.getLogger().trace("node found ..", $1); $$ = { id: $2, descr: $2, type: yy.getType($1, $3) }; } ; nodeWithId : NODE_ID { $$ = { id: $1, descr: $1, type: yy.nodeType.DEFAULT }; } | NODE_ID NODE_DSTART NODE_DESCR NODE_DEND { yy.getLogger().trace("node found ..", $1); $$ = { id: $1, descr: $3, type: yy.getType($2, $4) }; } ; %% mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/styles.js000066400000000000000000000033041433273745700251550ustar00rootroot00000000000000import { darken, lighten, isDark } from 'khroma'; const genSections = (options) => { let sections = ''; for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { options['lineColor' + i] = options['lineColor' + i] || options['cScaleInv' + i]; if (isDark(options['lineColor' + i])) { options['lineColor' + i] = lighten(options['lineColor' + i], 20); } else { options['lineColor' + i] = darken(options['lineColor' + i], 20); } } for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { const sw = '' + (17 - 3 * i); sections += ` .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${ i - 1 } path { fill: ${options['cScale' + i]}; } .section-${i - 1} text { fill: ${options['cScaleLabel' + i]}; } .node-icon-${i - 1} { font-size: 40px; color: ${options['cScaleLabel' + i]}; } .section-edge-${i - 1}{ stroke: ${options['cScale' + i]}; } .edge-depth-${i - 1}{ stroke-width: ${sw}; } .section-${i - 1} line { stroke: ${options['cScaleInv' + i]} ; stroke-width: 3; } .disabled, .disabled circle, .disabled text { fill: lightgray; } .disabled text { fill: #efefef; } `; } return sections; }; const getStyles = (options) => ` .edge { stroke-width: 3; } ${genSections(options)} .section-root rect, .section-root path, .section-root circle { fill: ${options.git0}; } .section-root text { fill: ${options.gitBranchLabel0}; } .icon-container { height:100%; display: flex; justify-content: center; align-items: center; } .edge { fill: none; } `; export default getStyles; mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/svgDraw.js000066400000000000000000000223151433273745700252520ustar00rootroot00000000000000import { select } from 'd3'; import * as db from './mindmapDb'; const MAX_SECTIONS = 12; /** * @param {string} text The text to be wrapped * @param {number} width The max width of the text */ function wrap(text, width) { text.each(function () { var text = select(this), words = text .text() .split(/(\s+|
)/) .reverse(), word, line = [], lineHeight = 1.1, // ems y = text.attr('y'), dy = parseFloat(text.attr('dy')), tspan = text .text(null) .append('tspan') .attr('x', 0) .attr('y', y) .attr('dy', dy + 'em'); for (let j = 0; j < words.length; j++) { word = words[words.length - 1 - j]; line.push(word); tspan.text(line.join(' ').trim()); if (tspan.node().getComputedTextLength() > width || word === '
') { line.pop(); tspan.text(line.join(' ').trim()); if (word === '
') { line = ['']; } else { line = [word]; } tspan = text .append('tspan') .attr('x', 0) .attr('y', y) .attr('dy', lineHeight + 'em') .text(word); } } }); } const defaultBkg = function (elem, node, section) { const rd = 5; elem .append('path') .attr('id', 'node-' + node.id) .attr('class', 'node-bkg node-' + db.type2Str(node.type)) .attr( 'd', `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${ node.width - 2 * rd } q5,0 5,5 v${node.height - rd} H0 Z` ); elem .append('line') .attr('class', 'node-line-' + section) .attr('x1', 0) .attr('y1', node.height) .attr('x2', node.width) .attr('y2', node.height); }; const rectBkg = function (elem, node) { elem .append('rect') .attr('id', 'node-' + node.id) .attr('class', 'node-bkg node-' + db.type2Str(node.type)) .attr('height', node.height) .attr('width', node.width); }; const cloudBkg = function (elem, node) { const w = node.width; const h = node.height; const r1 = 0.15 * w; const r2 = 0.25 * w; const r3 = 0.35 * w; const r4 = 0.2 * w; elem .append('path') .attr('id', 'node-' + node.id) .attr('class', 'node-bkg node-' + db.type2Str(node.type)) .attr( 'd', `M0 0 a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1} a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1} a${r2},${r2} 1 0,1 ${w * 0.35},${1 * w * 0.2} a${r1},${r1} 1 0,1 ${w * 0.15},${1 * h * 0.35} a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${1 * h * 0.65} a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15} a${r3},${r3} 1 0,1 ${-1 * w * 0.5},${0} a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15} a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35} a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65} H0 V0 Z` ); }; const bangBkg = function (elem, node) { const w = node.width; const h = node.height; const r = 0.15 * w; elem .append('path') .attr('id', 'node-' + node.id) .attr('class', 'node-bkg node-' + db.type2Str(node.type)) .attr( 'd', `M0 0 a${r},${r} 1 0,0 ${w * 0.25},${-1 * h * 0.1} a${r},${r} 1 0,0 ${w * 0.25},${0} a${r},${r} 1 0,0 ${w * 0.25},${0} a${r},${r} 1 0,0 ${w * 0.25},${1 * h * 0.1} a${r},${r} 1 0,0 ${w * 0.15},${1 * h * 0.33} a${r * 0.8},${r * 0.8} 1 0,0 ${0},${1 * h * 0.34} a${r},${r} 1 0,0 ${-1 * w * 0.15},${1 * h * 0.33} a${r},${r} 1 0,0 ${-1 * w * 0.25},${h * 0.15} a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} a${r},${r} 1 0,0 ${-1 * w * 0.25},${-1 * h * 0.15} a${r},${r} 1 0,0 ${-1 * w * 0.1},${-1 * h * 0.33} a${r * 0.8},${r * 0.8} 1 0,0 ${0},${-1 * h * 0.34} a${r},${r} 1 0,0 ${w * 0.1},${-1 * h * 0.33} H0 V0 Z` ); }; const circleBkg = function (elem, node) { elem .append('circle') .attr('id', 'node-' + node.id) .attr('class', 'node-bkg node-' + db.type2Str(node.type)) .attr('r', node.width / 2); }; const roundedRectBkg = function (elem, node) { elem .append('rect') .attr('id', 'node-' + node.id) .attr('class', 'node-bkg node-' + db.type2Str(node.type)) .attr('height', node.height) .attr('rx', node.padding) .attr('ry', node.padding) .attr('width', node.width); }; /** * @param {object} elem The D3 dom element in which the node is to be added * @param {object} node The node to be added * @param section * @param fullSection * @param {object} conf The configuration object * @returns {number} The height nodes dom element */ export const drawNode = function (elem, node, fullSection, conf) { const section = (fullSection % MAX_SECTIONS) - 1; const nodeElem = elem.append('g'); node.section = section; nodeElem.attr( 'class', (node.class ? node.class + ' ' : '') + 'mindmap-node ' + (section < 0 ? 'section-root' : 'section-' + section) ); const bkgElem = nodeElem.append('g'); // Create the wrapped text element const textElem = nodeElem.append('g'); const txt = textElem .append('text') .text(node.descr) .attr('dy', '1em') .attr('alignment-baseline', 'middle') .attr('dominant-baseline', 'middle') .attr('text-anchor', 'middle') .call(wrap, node.width); const bbox = txt.node().getBBox(); const fontSize = conf.fontSize.replace ? conf.fontSize.replace('px', '') : conf.fontSize; node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; node.width = bbox.width + 2 * node.padding; if (node.icon) { if (node.type === db.nodeType.CIRCLE) { node.height += 50; node.width += 50; const icon = nodeElem .append('foreignObject') .attr('height', '50px') .attr('width', node.width) .attr('style', 'text-align: center;'); icon .append('div') .attr('class', 'icon-container') .append('i') .attr('class', 'node-icon-' + section + ' ' + node.icon); textElem.attr( 'transform', 'translate(' + node.width / 2 + ', ' + (node.height / 2 - 1.5 * node.padding) + ')' ); } else { node.width += 50; const orgHeight = node.height; node.height = Math.max(orgHeight, 60); const heightDiff = Math.abs(node.height - orgHeight); const icon = nodeElem .append('foreignObject') .attr('width', '60px') .attr('height', node.height) .attr('style', 'text-align: center;margin-top:' + heightDiff / 2 + 'px;'); icon .append('div') .attr('class', 'icon-container') .append('i') .attr('class', 'node-icon-' + section + ' ' + node.icon); textElem.attr( 'transform', 'translate(' + (25 + node.width / 2) + ', ' + (heightDiff / 2 + node.padding / 2) + ')' ); } } else { textElem.attr('transform', 'translate(' + node.width / 2 + ', ' + node.padding / 2 + ')'); } switch (node.type) { case db.nodeType.DEFAULT: defaultBkg(bkgElem, node, section, conf); break; case db.nodeType.ROUNDED_RECT: roundedRectBkg(bkgElem, node, section, conf); break; case db.nodeType.RECT: rectBkg(bkgElem, node, section, conf); break; case db.nodeType.CIRCLE: bkgElem.attr('transform', 'translate(' + node.width / 2 + ', ' + +node.height / 2 + ')'); circleBkg(bkgElem, node, section, conf); break; case db.nodeType.CLOUD: cloudBkg(bkgElem, node, section, conf); break; case db.nodeType.BANG: bangBkg(bkgElem, node, section, conf); break; } // Position the node to its coordinate // if (typeof node.x !== 'undefined' && typeof node.y !== 'undefined') { // nodeElem.attr('transform', 'translate(' + node.x + ',' + node.y + ')'); // } setElementById(node.id, nodeElem); return node.height; }; export const drawEdge = function drawEdge(edgesElem, mindmap, parent, depth, fullSection) { const section = (fullSection % MAX_SECTIONS) - 1; const sx = parent.x + parent.width / 2; const sy = parent.y + parent.height / 2; const ex = mindmap.x + mindmap.width / 2; const ey = mindmap.y + mindmap.height / 2; const mx = ex > sx ? sx + Math.abs(sx - ex) / 2 : sx - Math.abs(sx - ex) / 2; const my = ey > sy ? sy + Math.abs(sy - ey) / 2 : sy - Math.abs(sy - ey) / 2; const qx = ex > sx ? Math.abs(sx - mx) / 2 + sx : -Math.abs(sx - mx) / 2 + sx; const qy = ey > sy ? Math.abs(sy - my) / 2 + sy : -Math.abs(sy - my) / 2 + sy; edgesElem .append('path') .attr( 'd', parent.direction === 'TB' || parent.direction === 'BT' ? `M${sx},${sy} Q${sx},${qy} ${mx},${my} T${ex},${ey}` : `M${sx},${sy} Q${qx},${sy} ${mx},${my} T${ex},${ey}` ) .attr('class', 'edge section-edge-' + section + ' edge-depth-' + depth); }; export const positionNode = function (node) { const nodeElem = getElementById(node.id); const x = node.x || 0; const y = node.y || 0; // Position the node to its coordinate nodeElem.attr('transform', 'translate(' + x + ',' + y + ')'); }; let elements = {}; const setElementById = (id, element) => { elements[id] = element; }; export const getElementById = (id) => { return elements[id]; }; export const clearElementRefs = () => { elements = {}; }; export default { drawNode, positionNode, drawEdge }; mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/types/000077500000000000000000000000001433273745700244405ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/src/types/index.d.ts000066400000000000000000000001541433273745700263410ustar00rootroot00000000000000export {}; declare global { interface Window { mermaid: any; // 👈️ turn off type checking } } mermaid-js-mermaid-9bb0ed2/packages/mermaid-mindmap/tsconfig.json000066400000000000000000000003101433273745700252060ustar00rootroot00000000000000{ "extends": "../../tsconfig.json", "module": "esnext", "compilerOptions": { "rootDir": "./src", "outDir": "./dist" }, "include": ["./src/**/*.ts"], "typeRoots": ["./src/types"] } mermaid-js-mermaid-9bb0ed2/packages/mermaid/000077500000000000000000000000001433273745700210625ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/README.md000077700000000000000000000000001433273745700242412../../README.mdustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/package.json000066400000000000000000000100451433273745700233500ustar00rootroot00000000000000{ "name": "mermaid", "version": "9.2.2-rc.2", "description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "main": "./dist/mermaid.min.js", "module": "./dist/mermaid.core.mjs", "types": "./dist/mermaid.d.ts", "type": "commonjs", "exports": { ".": { "require": "./dist/mermaid.min.js", "import": "./dist/mermaid.core.mjs", "types": "./dist/mermaid.d.ts" }, "./*": "./*" }, "keywords": [ "diagram", "markdown", "flowchart", "sequence diagram", "gantt", "class diagram", "git graph" ], "scripts": { "clean": "rimraf dist", "build:code": "node .esbuild/esbuild.cjs", "build:types": "tsc -p ./tsconfig.json --emitDeclarationOnly", "build:watch": "yarn build:code --watch", "build:esbuild": "concurrently \"yarn build:code\" \"yarn build:types\"", "build": "yarn clean; yarn build:esbuild", "dev": "node .esbuild/serve.cjs", "docs:build": "ts-node-esm src/docs.mts", "docs:verify": "yarn docs:build --verify", "todo-postbuild": "documentation build src/mermaidAPI.ts src/config.ts src/defaultConfig.ts --shallow -f md --markdown-toc false > src/docs/Setup.md && prettier --write src/docs/Setup.md", "release": "yarn build", "lint": "eslint --cache --ignore-path .gitignore . && yarn lint:jison && prettier --check .", "lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write .", "lint:jison": "ts-node-esm src/jison/lint.mts", "cypress": "cypress run", "cypress:open": "cypress open", "e2e": "start-server-and-test dev http://localhost:9000/ cypress", "todo-prepare": "concurrently \"husky install\" \"yarn build\"", "pre-commit": "lint-staged" }, "repository": { "type": "git", "url": "https://github.com/mermaid-js/mermaid" }, "author": "Knut Sveidqvist", "license": "MIT", "standard": { "ignore": [ "**/parser/*.js", "dist/**/*.js", "cypress/**/*.js" ], "globals": [ "page" ] }, "dependencies": { "@braintree/sanitize-url": "^6.0.0", "d3": "^7.0.0", "dagre": "^0.8.5", "dagre-d3": "^0.6.4", "dompurify": "2.4.0", "fast-clone": "^1.5.13", "graphlib": "^2.1.8", "khroma": "^2.0.0", "lodash": "^4.17.21", "moment-mini": "^2.24.0", "non-layered-tidy-tree-layout": "^2.0.2", "stylis": "^4.1.2", "uuid": "^9.0.0" }, "devDependencies": { "@applitools/eyes-cypress": "^3.25.7", "@commitlint/cli": "^17.1.2", "@commitlint/config-conventional": "^17.0.0", "@types/d3": "^7.4.0", "@types/dompurify": "^2.3.4", "@types/eslint": "^8.4.6", "@types/express": "^4.17.13", "@types/jsdom": "^20.0.0", "@types/lodash": "^4.14.185", "@types/prettier": "^2.7.0", "@types/stylis": "^4.0.2", "@types/uuid": "^8.3.4", "@typescript-eslint/eslint-plugin": "^5.37.0", "@typescript-eslint/parser": "^5.37.0", "concurrently": "^7.4.0", "coveralls": "^3.1.1", "cypress": "^10.0.0", "cypress-image-snapshot": "^4.0.1", "documentation": "13.2.0", "esbuild": "^0.15.8", "eslint": "^8.23.1", "eslint-config-prettier": "^8.5.0", "eslint-plugin-cypress": "^2.12.1", "eslint-plugin-html": "^7.1.0", "eslint-plugin-jest": "^27.0.4", "eslint-plugin-jsdoc": "^39.3.6", "eslint-plugin-json": "^3.1.0", "eslint-plugin-markdown": "^3.0.0", "express": "^4.18.1", "globby": "^13.1.2", "husky": "^8.0.0", "identity-obj-proxy": "^3.0.0", "jison": "^0.4.18", "js-base64": "3.7.2", "jsdom": "^20.0.0", "lint-staged": "^13.0.0", "moment": "^2.23.0", "path-browserify": "^1.0.1", "prettier": "^2.7.1", "prettier-plugin-jsdoc": "^0.4.2", "remark": "^14.0.2", "rimraf": "^3.0.2", "start-server-and-test": "^1.12.6", "ts-node": "^10.9.1", "typescript": "^4.8.3", "unist-util-flatmap": "^1.0.0" }, "resolutions": { "d3": "^7.0.0" }, "files": [ "dist", "README.md" ], "sideEffects": [ "**/*.css", "**/*.scss" ] } mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/000077500000000000000000000000001433273745700216515ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/Diagram.ts000066400000000000000000000064031433273745700235700ustar00rootroot00000000000000import * as configApi from './config'; import { log } from './logger'; import { DiagramNotFoundError, getDiagram, registerDiagram } from './diagram-api/diagramAPI'; import { detectType, getDiagramLoader } from './diagram-api/detectType'; import { isDetailedError } from './utils'; export class Diagram { type = 'graph'; parser; renderer; db; private detectTypeFailed = false; // eslint-disable-next-line @typescript-eslint/ban-types constructor(public txt: string, parseError?: Function) { const cnf = configApi.getConfig(); this.txt = txt; try { this.type = detectType(txt, cnf); } catch (e) { this.handleError(e, parseError); this.type = 'error'; this.detectTypeFailed = true; } const diagram = getDiagram(this.type); log.debug('Type ' + this.type); // Setup diagram this.db = diagram.db; this.db.clear?.(); this.renderer = diagram.renderer; this.parser = diagram.parser; this.parser.parser.yy = this.db; if (diagram.init) { diagram.init(cnf); log.debug('Initialized diagram ' + this.type, cnf); } this.txt += '\n'; this.parse(this.txt, parseError); } // eslint-disable-next-line @typescript-eslint/ban-types parse(text: string, parseError?: Function): boolean { if (this.detectTypeFailed) { return false; } try { text = text + '\n'; this.db.clear(); this.parser.parse(text); return true; } catch (error) { this.handleError(error, parseError); } return false; } // eslint-disable-next-line @typescript-eslint/ban-types handleError(error: unknown, parseError?: Function) { // Is this the correct way to access mermiad's parseError() // method ? (or global.mermaid.parseError()) ? if (parseError) { if (isDetailedError(error)) { // handle case where error string and hash were // wrapped in object like`const error = { str, hash };` parseError(error.str, error.hash); } else { // assume it is just error string and pass it on parseError(error); } } else { // No mermaid.parseError() handler defined, so re-throw it throw error; } } getParser() { return this.parser; } getType() { return this.type; } } export const getDiagramFromText = ( txt: string, // eslint-disable-next-line @typescript-eslint/ban-types parseError?: Function ): Diagram | Promise => { const type = detectType(txt, configApi.getConfig()); try { // Trying to find the diagram getDiagram(type); return new Diagram(txt, parseError); } catch (error) { if (!(error instanceof DiagramNotFoundError)) { log.error(error); throw error; } const loader = getDiagramLoader(type); if (!loader) { throw new Error(`Loader for ${type} not found.`); } // TODO: Uncomment for v10 // // Diagram not available, loading it // const { diagram } = await loader(); // registerDiagram(type, diagram, undefined, diagram.injectUtils); // // new diagram will try getDiagram again and if fails then it is a valid throw return loader().then(({ diagram }) => { registerDiagram(type, diagram, undefined); return new Diagram(txt, parseError); }); } }; export default Diagram; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/__mocks__/000077500000000000000000000000001433273745700235615ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/__mocks__/mermaidAPI.ts000066400000000000000000000025031433273745700261010ustar00rootroot00000000000000/** * Mocks for `./mermaidAPI`. * * We can't easily use `vi.spyOn(mermaidAPI, "function")` since the object is frozen with `Object.freeze()`. */ import * as configApi from '../config'; import { vi } from 'vitest'; import { addDiagrams } from '../diagram-api/diagram-orchestration'; import Diagram from '../Diagram'; // Normally, we could just do the following to get the original `parse()` // implementation, however, requireActual returns a promise and it's not documented how to use withing mock file. /** * @param text * @param parseError */ // eslint-disable-next-line @typescript-eslint/ban-types function parse(text: string, parseError?: Function): boolean { addDiagrams(); const diagram = new Diagram(text, parseError); return diagram.parse(text, parseError); } // original version cannot be modified since it was frozen with `Object.freeze()` export const mermaidAPI = { render: vi.fn(), renderAsync: vi.fn(), parse, parseDirective: vi.fn(), initialize: vi.fn(), getConfig: configApi.getConfig, setConfig: configApi.setConfig, getSiteConfig: configApi.getSiteConfig, updateSiteConfig: configApi.updateSiteConfig, reset: () => { configApi.reset(); }, globalReset: () => { configApi.reset(configApi.defaultConfig); }, defaultConfig: configApi.defaultConfig, }; export default mermaidAPI; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/accessibility.js000066400000000000000000000017641433273745700250460ustar00rootroot00000000000000/** * This method will add a basic title and description element to a chart. The yy parser will need to * respond to getAccTitle and getAccDescription, where the title is the title element on the chart, * which is generally not displayed and the accDescription is the description element on the chart, * which is never displayed. * * The following charts display their title as a visual and accessibility element: gantt * * @param yy_parser * @param svg * @param id */ export default function addSVGAccessibilityFields(yy_parser, svg, id) { if (typeof svg.insert === 'undefined') { return; } let title_string = yy_parser.getAccTitle(); let description = yy_parser.getAccDescription(); svg.attr('role', 'img').attr('aria-labelledby', 'chart-title-' + id + ' chart-desc-' + id); svg .insert('desc', ':first-child') .attr('id', 'chart-desc-' + id) .text(description); svg .insert('title', ':first-child') .attr('id', 'chart-title-' + id) .text(title_string); } mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/assignWithDepth.js000066400000000000000000000053341433273745700253210ustar00rootroot00000000000000'use strict'; /** * @function assignWithDepth Extends the functionality of {@link ObjectConstructor.assign} with the * ability to merge arbitrary-depth objects For each key in src with path `k` (recursively) * performs an Object.assign(dst[`k`], src[`k`]) with a slight change from the typical handling of * undefined for dst[`k`]: instead of raising an error, dst[`k`] is auto-initialized to {} and * effectively merged with src[`k`]

Additionally, dissimilar types will not clobber unless the * config.clobber parameter === true. Example: * * ```js * let config_0 = { foo: { bar: 'bar' }, bar: 'foo' }; * let config_1 = { foo: 'foo', bar: 'bar' }; * let result = assignWithDepth(config_0, config_1); * console.log(result); * //-> result: { foo: { bar: 'bar' }, bar: 'bar' } * ``` * * Traditional Object.assign would have clobbered foo in config_0 with foo in config_1. If src is a * destructured array of objects and dst is not an array, assignWithDepth will apply each element * of src to dst in order. * @param {any} dst - The destination of the merge * @param {any} src - The source object(s) to merge into destination * @param {{ depth: number; clobber: boolean }} [config={ depth: 2, clobber: false }] - Depth: depth * to traverse within src and dst for merging - clobber: should dissimilar types clobber (default: * { depth: 2, clobber: false }). Default is `{ depth: 2, clobber: false }` * @returns {any} */ const assignWithDepth = function (dst, src, config) { const { depth, clobber } = Object.assign({ depth: 2, clobber: false }, config); if (Array.isArray(src) && !Array.isArray(dst)) { src.forEach((s) => assignWithDepth(dst, s, config)); return dst; } else if (Array.isArray(src) && Array.isArray(dst)) { src.forEach((s) => { if (dst.indexOf(s) === -1) { dst.push(s); } }); return dst; } if (typeof dst === 'undefined' || depth <= 0) { if (dst !== undefined && dst !== null && typeof dst === 'object' && typeof src === 'object') { return Object.assign(dst, src); } else { return src; } } if (typeof src !== 'undefined' && typeof dst === 'object' && typeof src === 'object') { Object.keys(src).forEach((key) => { if ( typeof src[key] === 'object' && (dst[key] === undefined || typeof dst[key] === 'object') ) { if (dst[key] === undefined) { dst[key] = Array.isArray(src[key]) ? [] : {}; } dst[key] = assignWithDepth(dst[key], src[key], { depth: depth - 1, clobber }); } else if (clobber || (typeof dst[key] !== 'object' && typeof src[key] !== 'object')) { dst[key] = src[key]; } }); } return dst; }; export default assignWithDepth; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/commonDb.ts000066400000000000000000000021101433273745700237510ustar00rootroot00000000000000import { sanitizeText as _sanitizeText } from './diagrams/common/common'; import { getConfig } from './config'; let title = ''; let diagramTitle = ''; let description = ''; const sanitizeText = (txt: string): string => _sanitizeText(txt, getConfig()); export const clear = function (): void { title = ''; description = ''; diagramTitle = ''; }; export const setAccTitle = function (txt: string): void { title = sanitizeText(txt).replace(/^\s+/g, ''); }; export const getAccTitle = function (): string { return title || diagramTitle; }; export const setAccDescription = function (txt: string): void { description = sanitizeText(txt).replace(/\n\s+/g, '\n'); }; export const getAccDescription = function (): string { return description; }; export const setDiagramTitle = function (txt: string): void { diagramTitle = sanitizeText(txt); }; export const getDiagramTitle = function (): string { return diagramTitle; }; export default { setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle: getDiagramTitle, getAccDescription, setAccDescription, clear, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/config.spec.js000066400000000000000000000041421433273745700244060ustar00rootroot00000000000000import * as configApi from './config'; describe('when working with site config', function () { beforeEach(() => { // Resets the site config to default config configApi.setSiteConfig({}); }); it('should set site config and config properly', function () { let config_0 = { foo: 'bar', bar: 0 }; configApi.setSiteConfig(config_0); let config_1 = configApi.getSiteConfig(); let config_2 = configApi.getConfig(); expect(config_1.foo).toEqual(config_0.foo); expect(config_1.bar).toEqual(config_0.bar); expect(config_1).toEqual(config_2); }); it('should respect secure keys when applying directives', function () { let config_0 = { foo: 'bar', bar: 'cant-be-changed', secure: [...configApi.defaultConfig.secure, 'bar'], }; configApi.setSiteConfig(config_0); const directive = { foo: 'baf', bar: 'should-not-be-allowed' }; const cfg = configApi.updateCurrentConfig(config_0, [directive]); expect(cfg.foo).toEqual(directive.foo); expect(cfg.bar).toBe(config_0.bar); }); it('should set reset config properly', function () { let config_0 = { foo: 'bar', bar: 0 }; configApi.setSiteConfig(config_0); let config_1 = { foo: 'baf' }; configApi.setConfig(config_1); let config_2 = configApi.getConfig(); expect(config_2.foo).toEqual(config_1.foo); configApi.reset(); let config_3 = configApi.getConfig(); expect(config_3.foo).toEqual(config_0.foo); let config_4 = configApi.getSiteConfig(); expect(config_4.foo).toEqual(config_0.foo); }); it('should set global reset config properly', function () { let config_0 = { foo: 'bar', bar: 0 }; configApi.setSiteConfig(config_0); let config_1 = configApi.getSiteConfig(); expect(config_1.foo).toEqual(config_0.foo); let config_2 = configApi.getConfig(); expect(config_2.foo).toEqual(config_0.foo); configApi.setConfig({ foobar: 'bar0' }); let config_3 = configApi.getConfig(); expect(config_3.foobar).toEqual('bar0'); configApi.reset(); let config_4 = configApi.getConfig(); expect(config_4.foobar).toBeUndefined(); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/config.ts000066400000000000000000000221631433273745700234720ustar00rootroot00000000000000import assignWithDepth from './assignWithDepth'; import { log } from './logger'; import theme from './themes'; import config from './defaultConfig'; import type { MermaidConfig } from './config.type'; export const defaultConfig: MermaidConfig = Object.freeze(config); let siteConfig: MermaidConfig = assignWithDepth({}, defaultConfig); let configFromInitialize: MermaidConfig; let directives: any[] = []; let currentConfig: MermaidConfig = assignWithDepth({}, defaultConfig); export const updateCurrentConfig = (siteCfg: MermaidConfig, _directives: any[]) => { // start with config being the siteConfig let cfg: MermaidConfig = assignWithDepth({}, siteCfg); // let sCfg = assignWithDepth(defaultConfig, siteConfigDelta); // Join directives let sumOfDirectives: MermaidConfig = {}; for (let i = 0; i < _directives.length; i++) { const d = _directives[i]; sanitize(d); // Apply the data from the directive where the the overrides the themeVariables sumOfDirectives = assignWithDepth(sumOfDirectives, d); } cfg = assignWithDepth(cfg, sumOfDirectives); if (sumOfDirectives.theme && sumOfDirectives.theme in theme) { const tmpConfigFromInitialize = assignWithDepth({}, configFromInitialize); const themeVariables = assignWithDepth( tmpConfigFromInitialize.themeVariables || {}, sumOfDirectives.themeVariables ); if (cfg.theme && cfg.theme in theme) { cfg.themeVariables = theme[cfg.theme as keyof typeof theme].getThemeVariables(themeVariables); } } currentConfig = cfg; checkConfig(currentConfig); return currentConfig; }; /** * ## setSiteConfig * * | Function | Description | Type | Values | * | ------------- | ------------------------------------- | ----------- | --------------------------------------- | * | setSiteConfig | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | * * **Notes:** Sets the siteConfig. The siteConfig is a protected configuration for repeat use. Calls * to reset() will reset the currentConfig to siteConfig. Calls to reset(configApi.defaultConfig) * will reset siteConfig and currentConfig to the defaultConfig Note: currentConfig is set in this * function _Default value: At default, will mirror Global Config_ * * @param conf - The base currentConfig to use as siteConfig * @returns {object} - The siteConfig */ export const setSiteConfig = (conf: MermaidConfig): MermaidConfig => { siteConfig = assignWithDepth({}, defaultConfig); siteConfig = assignWithDepth(siteConfig, conf); // @ts-ignore: TODO Fix ts errors if (conf.theme && theme[conf.theme]) { // @ts-ignore: TODO Fix ts errors siteConfig.themeVariables = theme[conf.theme].getThemeVariables(conf.themeVariables); } updateCurrentConfig(siteConfig, directives); return siteConfig; }; export const saveConfigFromInitialize = (conf: MermaidConfig): void => { configFromInitialize = assignWithDepth({}, conf); }; export const updateSiteConfig = (conf: MermaidConfig): MermaidConfig => { siteConfig = assignWithDepth(siteConfig, conf); updateCurrentConfig(siteConfig, directives); return siteConfig; }; /** * ## getSiteConfig * * | Function | Description | Type | Values | * | ------------- | ------------------------------------------------- | ----------- | -------------------------------- | * | setSiteConfig | Returns the current siteConfig base configuration | Get Request | Returns Any Values in siteConfig | * * **Notes**: Returns **any** values in siteConfig. * * @returns {object} - The siteConfig */ export const getSiteConfig = (): MermaidConfig => { return assignWithDepth({}, siteConfig); }; /** * ## setConfig * * | Function | Description | Type | Values | * | ------------- | ------------------------------------- | ----------- | --------------------------------------- | * | setSiteConfig | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | * * **Notes**: Sets the currentConfig. The parameter conf is sanitized based on the siteConfig.secure * keys. Any values found in conf with key found in siteConfig.secure will be replaced with the * corresponding siteConfig value. * * @param {any} conf - The potential currentConfig * @returns {any} - The currentConfig merged with the sanitized conf */ export const setConfig = (conf: MermaidConfig): MermaidConfig => { // sanitize(conf); // Object.keys(conf).forEach(key => { // const manipulator = manipulators[key]; // conf[key] = manipulator ? manipulator(conf[key]) : conf[key]; // }); checkConfig(conf); assignWithDepth(currentConfig, conf); return getConfig(); }; /** * ## getConfig * * | Function | Description | Type | Return Values | * | --------- | ------------------------- | ----------- | ------------------------------ | * | getConfig | Obtains the currentConfig | Get Request | Any Values from current Config | * * **Notes**: Returns **any** the currentConfig * * @returns {any} - The currentConfig */ export const getConfig = (): MermaidConfig => { return assignWithDepth({}, currentConfig); }; /** * ## sanitize * * | Function | Description | Type | Values | * | -------- | -------------------------------------- | ----------- | ------ | * | sanitize | Sets the siteConfig to desired values. | Put Request | None | * * Ensures options parameter does not attempt to override siteConfig secure keys **Notes**: modifies * options in-place * * @param {any} options - The potential setConfig parameter */ export const sanitize = (options: any) => { // Checking that options are not in the list of excluded options ['secure', ...(siteConfig.secure ?? [])].forEach((key) => { if (typeof options[key] !== 'undefined') { // DO NOT attempt to print options[key] within `${}` as a malicious script // can exploit the logger's attempt to stringify the value and execute arbitrary code log.debug(`Denied attempt to modify a secure key ${key}`, options[key]); delete options[key]; } }); // Check that there no attempts of prototype pollution Object.keys(options).forEach((key) => { if (key.indexOf('__') === 0) { delete options[key]; } }); // Check that there no attempts of xss, there should be no tags at all in the directive // blocking data urls as base64 urls can contain svgs with inline script tags Object.keys(options).forEach((key) => { if (typeof options[key] === 'string') { if ( options[key].indexOf('<') > -1 || options[key].indexOf('>') > -1 || options[key].indexOf('url(data:') > -1 ) { delete options[key]; } } if (typeof options[key] === 'object') { sanitize(options[key]); } }); }; /** * Pushes in a directive to the configuration * * @param {object} directive The directive to push in */ export const addDirective = (directive: any) => { if (directive.fontFamily) { if (!directive.themeVariables) { directive.themeVariables = { fontFamily: directive.fontFamily }; } else { if (!directive.themeVariables.fontFamily) { directive.themeVariables = { fontFamily: directive.fontFamily }; } } } directives.push(directive); updateCurrentConfig(siteConfig, directives); }; /** * ## reset * * | Function | Description | Type | Required | Values | * | -------- | ---------------------------- | ----------- | -------- | ------ | * | reset | Resets currentConfig to conf | Put Request | Required | None | * * ## conf * * | Parameter | Description | Type | Required | Values | * | --------- | -------------------------------------------------------------- | ---------- | -------- | -------------------------------------------- | * | conf | base set of values, which currentConfig could be **reset** to. | Dictionary | Required | Any Values, with respect to the secure Array | * * **Notes**: (default: current siteConfig ) (optional, default `getSiteConfig()`) * * @param config */ export const reset = (config = siteConfig): void => { // Replace current config with siteConfig directives = []; updateCurrentConfig(config, directives); }; enum ConfigWarning { 'LAZY_LOAD_DEPRECATED' = 'The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.', } type ConfigWarningStrings = keyof typeof ConfigWarning; const issuedWarnings: { [key in ConfigWarningStrings]?: boolean } = {}; const issueWarning = (warning: ConfigWarningStrings) => { if (issuedWarnings[warning]) { return; } log.warn(ConfigWarning[warning]); issuedWarnings[warning] = true; }; const checkConfig = (config: MermaidConfig) => { if (!config) { return; } if (config.lazyLoadedDiagrams || config.loadExternalDiagramsAtStartup) { issueWarning('LAZY_LOAD_DEPRECATED'); } }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/config.type.ts000066400000000000000000000256611433273745700244600ustar00rootroot00000000000000// TODO: This was auto generated from defaultConfig. Needs to be verified. import DOMPurify from 'dompurify'; export interface MermaidConfig { /** @deprecated use mermaid.registerLazyDiagrams instead */ lazyLoadedDiagrams?: string[]; /** @deprecated use mermaid.registerLazyDiagrams instead */ loadExternalDiagramsAtStartup?: boolean; theme?: string; themeVariables?: any; themeCSS?: string; maxTextSize?: number; darkMode?: boolean; htmlLabels?: boolean; fontFamily?: string; altFontFamily?: string; logLevel?: number; securityLevel?: string; startOnLoad?: boolean; arrowMarkerAbsolute?: boolean; secure?: string[]; deterministicIds?: boolean; deterministicIDSeed?: string; flowchart?: FlowchartDiagramConfig; sequence?: SequenceDiagramConfig; gantt?: GanttDiagramConfig; journey?: JourneyDiagramConfig; class?: ClassDiagramConfig; state?: StateDiagramConfig; er?: ErDiagramConfig; pie?: PieDiagramConfig; requirement?: RequirementDiagramConfig; mindmap?: MindmapDiagramConfig; gitGraph?: GitGraphDiagramConfig; c4?: C4DiagramConfig; dompurifyConfig?: DOMPurify.Config; wrap?: boolean; fontSize?: number; } // TODO: More configs needs to be moved in here export interface BaseDiagramConfig { useWidth?: number; useMaxWidth?: boolean; } export interface C4DiagramConfig extends BaseDiagramConfig { diagramMarginX?: number; diagramMarginY?: number; c4ShapeMargin?: number; c4ShapePadding?: number; width?: number; height?: number; boxMargin?: number; c4ShapeInRow?: number; nextLinePaddingX?: number; c4BoundaryInRow?: number; personFontSize?: string | number; personFontFamily?: string; personFontWeight?: string | number; external_personFontSize?: string | number; external_personFontFamily?: string; external_personFontWeight?: string | number; systemFontSize?: string | number; systemFontFamily?: string; systemFontWeight?: string | number; external_systemFontSize?: string | number; external_systemFontFamily?: string; external_systemFontWeight?: string | number; system_dbFontSize?: string | number; system_dbFontFamily?: string; system_dbFontWeight?: string | number; external_system_dbFontSize?: string | number; external_system_dbFontFamily?: string; external_system_dbFontWeight?: string | number; system_queueFontSize?: string | number; system_queueFontFamily?: string; system_queueFontWeight?: string | number; external_system_queueFontSize?: string | number; external_system_queueFontFamily?: string; external_system_queueFontWeight?: string | number; boundaryFontSize?: string | number; boundaryFontFamily?: string; boundaryFontWeight?: string | number; messageFontSize?: string | number; messageFontFamily?: string; messageFontWeight?: string | number; containerFontSize?: string | number; containerFontFamily?: string; containerFontWeight?: string | number; external_containerFontSize?: string | number; external_containerFontFamily?: string; external_containerFontWeight?: string | number; container_dbFontSize?: string | number; container_dbFontFamily?: string; container_dbFontWeight?: string | number; external_container_dbFontSize?: string | number; external_container_dbFontFamily?: string; external_container_dbFontWeight?: string | number; container_queueFontSize?: string | number; container_queueFontFamily?: string; container_queueFontWeight?: string | number; external_container_queueFontSize?: string | number; external_container_queueFontFamily?: string; external_container_queueFontWeight?: string | number; componentFontSize?: string | number; componentFontFamily?: string; componentFontWeight?: string | number; external_componentFontSize?: string | number; external_componentFontFamily?: string; external_componentFontWeight?: string | number; component_dbFontSize?: string | number; component_dbFontFamily?: string; component_dbFontWeight?: string | number; external_component_dbFontSize?: string | number; external_component_dbFontFamily?: string; external_component_dbFontWeight?: string | number; component_queueFontSize?: string | number; component_queueFontFamily?: string; component_queueFontWeight?: string | number; external_component_queueFontSize?: string | number; external_component_queueFontFamily?: string; external_component_queueFontWeight?: string | number; wrap?: boolean; wrapPadding?: number; person_bg_color?: string; person_border_color?: string; external_person_bg_color?: string; external_person_border_color?: string; system_bg_color?: string; system_border_color?: string; system_db_bg_color?: string; system_db_border_color?: string; system_queue_bg_color?: string; system_queue_border_color?: string; external_system_bg_color?: string; external_system_border_color?: string; external_system_db_bg_color?: string; external_system_db_border_color?: string; external_system_queue_bg_color?: string; external_system_queue_border_color?: string; container_bg_color?: string; container_border_color?: string; container_db_bg_color?: string; container_db_border_color?: string; container_queue_bg_color?: string; container_queue_border_color?: string; external_container_bg_color?: string; external_container_border_color?: string; external_container_db_bg_color?: string; external_container_db_border_color?: string; external_container_queue_bg_color?: string; external_container_queue_border_color?: string; component_bg_color?: string; component_border_color?: string; component_db_bg_color?: string; component_db_border_color?: string; component_queue_bg_color?: string; component_queue_border_color?: string; external_component_bg_color?: string; external_component_border_color?: string; external_component_db_bg_color?: string; external_component_db_border_color?: string; external_component_queue_bg_color?: string; external_component_queue_border_color?: string; personFont?: FontCalculator; external_personFont?: FontCalculator; systemFont?: FontCalculator; external_systemFont?: FontCalculator; system_dbFont?: FontCalculator; external_system_dbFont?: FontCalculator; system_queueFont?: FontCalculator; external_system_queueFont?: FontCalculator; containerFont?: FontCalculator; external_containerFont?: FontCalculator; container_dbFont?: FontCalculator; external_container_dbFont?: FontCalculator; container_queueFont?: FontCalculator; external_container_queueFont?: FontCalculator; componentFont?: FontCalculator; external_componentFont?: FontCalculator; component_dbFont?: FontCalculator; external_component_dbFont?: FontCalculator; component_queueFont?: FontCalculator; external_component_queueFont?: FontCalculator; boundaryFont?: FontCalculator; messageFont?: FontCalculator; } export interface GitGraphDiagramConfig extends BaseDiagramConfig { diagramPadding?: number; nodeLabel?: NodeLabel; mainBranchName?: string; mainBranchOrder?: number; showCommitLabel?: boolean; showBranches?: boolean; rotateCommitLabel?: boolean; arrowMarkerAbsolute?: boolean; } export interface NodeLabel { width?: number; height?: number; x?: number; y?: number; } export interface RequirementDiagramConfig extends BaseDiagramConfig { rect_fill?: string; text_color?: string; rect_border_size?: string; rect_border_color?: string; rect_min_width?: number; rect_min_height?: number; fontSize?: number; rect_padding?: number; line_height?: number; } export interface MindmapDiagramConfig extends BaseDiagramConfig { useMaxWidth: boolean; padding: number; maxNodeWidth: number; } export type PieDiagramConfig = BaseDiagramConfig; export interface ErDiagramConfig extends BaseDiagramConfig { diagramPadding?: number; layoutDirection?: string; minEntityWidth?: number; minEntityHeight?: number; entityPadding?: number; stroke?: string; fill?: string; fontSize?: number; } export interface StateDiagramConfig extends BaseDiagramConfig { arrowMarkerAbsolute?: boolean; dividerMargin?: number; sizeUnit?: number; padding?: number; textHeight?: number; titleShift?: number; noteMargin?: number; forkWidth?: number; forkHeight?: number; miniPadding?: number; fontSizeFactor?: number; fontSize?: number; labelHeight?: number; edgeLengthFactor?: string; compositTitleSize?: number; radius?: number; defaultRenderer?: string; } export interface ClassDiagramConfig extends BaseDiagramConfig { arrowMarkerAbsolute?: boolean; dividerMargin?: number; padding?: number; textHeight?: number; defaultRenderer?: string; } export interface JourneyDiagramConfig extends BaseDiagramConfig { diagramMarginX?: number; diagramMarginY?: number; leftMargin?: number; width?: number; height?: number; boxMargin?: number; boxTextMargin?: number; noteMargin?: number; messageMargin?: number; messageAlign?: string; bottomMarginAdj?: number; rightAngles?: boolean; taskFontSize?: string | number; taskFontFamily?: string; taskMargin?: number; activationWidth?: number; textPlacement?: string; actorColours?: string[]; sectionFills?: string[]; sectionColours?: string[]; } export interface GanttDiagramConfig extends BaseDiagramConfig { titleTopMargin?: number; barHeight?: number; barGap?: number; topPadding?: number; rightPadding?: number; leftPadding?: number; gridLineStartPadding?: number; fontSize?: number; sectionFontSize?: string | number; numberSectionStyles?: number; axisFormat?: string; topAxis?: boolean; } export interface SequenceDiagramConfig extends BaseDiagramConfig { arrowMarkerAbsolute?: boolean; hideUnusedParticipants?: boolean; activationWidth?: number; diagramMarginX?: number; diagramMarginY?: number; actorMargin?: number; width?: number; height?: number; boxMargin?: number; boxTextMargin?: number; noteMargin?: number; messageMargin?: number; messageAlign?: string; mirrorActors?: boolean; forceMenus?: boolean; bottomMarginAdj?: number; rightAngles?: boolean; showSequenceNumbers?: boolean; actorFontSize?: string | number; actorFontFamily?: string; actorFontWeight?: string | number; noteFontSize?: string | number; noteFontFamily?: string; noteFontWeight?: string | number; noteAlign?: string; messageFontSize?: string | number; messageFontFamily?: string; messageFontWeight?: string | number; wrap?: boolean; wrapPadding?: number; labelBoxWidth?: number; labelBoxHeight?: number; messageFont?: FontCalculator; noteFont?: FontCalculator; actorFont?: FontCalculator; } export interface FlowchartDiagramConfig extends BaseDiagramConfig { arrowMarkerAbsolute?: boolean; diagramPadding?: number; htmlLabels?: boolean; nodeSpacing?: number; rankSpacing?: number; curve?: string; padding?: number; defaultRenderer?: string; } export interface FontConfig { fontSize?: string | number; fontFamily?: string; fontWeight?: string | number; } export type FontCalculator = () => Partial; export {}; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/000077500000000000000000000000001433273745700244115ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/GraphObjects.md000066400000000000000000000142341433273745700273120ustar00rootroot00000000000000# Cluster handling Dagre does not support edges between nodes and clusters or between clusters to other clusters. In order to remedy this shortcoming the dagre wrapper implements a few work-arounds. In the diagram below there are two clusters and there are no edges to nodes outside the own cluster. ```mermaid flowchart subgraph C1 a --> b end subgraph C2 c end C1 --> C2 ``` In this case the dagre-wrapper will transform the graph to the graph below. ```mermaid flowchart C1 --> C2 ``` The new nodes C1 and C2 are a special type of nodes, clusterNodes. ClusterNodes have have the nodes in the cluster including the cluster attached in a graph object. When rendering this diagram it it beeing rendered recursively. The diagram is rendered by the dagre-mermaid:render function which in turn will be used to render the node C1 and the node C2. The result of those renderings will be inserted as nodes in the "root" diagram. With this recursive approach it would be possible to have different layout direction for each cluster. ``` { clusterNode: true, graph } ``` _Data for a clusterNode_ When a cluster has edges to or from some of its nodes leading outside the cluster the approach of recursive rendering can not be used as the layout of the graph needs to take responsibility for nodes outside of the cluster. ```mermaid flowchart subgraph C1 a end subgraph C2 b end a --> C2 ``` To handle this case a special type of edge is inserted. The edge to/from the cluster is replaced with an edge to/from a node in the cluster which is tagged with toCluster/fromCluster. When rendering this edge the intersection between the edge and the border of the cluster is calculated making the edge start/stop there. In practice this renders like an an edge to/from the cluster. In the diagram above the root diagram would be rendered with C1 whereas C2 would be rendered recursively. Of these two approaches the top one renders better and is used when possible. When this is not possible, ie an edge is added crossing the border the non recursive approach is used. # Graph objects and their properties Explains the representation of various objects used to render the flow charts and what the properties mean. This ofc from the perspective of the dagre-wrapper. ## node Sample object: ```json { "shape": "rect", "labelText": "Test", "rx": 0, "ry": 0, "class": "default", "style": "", "id": "Test", "type": "group", "padding": 15 } ``` This is set by the renderer of the diagram and insert the data that the wrapper neds for rendering. | property | description | | ---------- | ------------------------------------------------------------------------------------------------ | | labelStyle | Css styles for the label. User for instance for styling the labels for clusters | | shape | The shape of the node. | | labelText | The text on the label | | rx | The corner radius - maybe part of the shape instead? Used for rects. | | ry | The corner radius - maybe part of the shape instead? Used for rects. | | classes | Classes to be set for the shape. Not used | | style | Css styles for the actual shape | | id | id of the shape | | type | if set to group then this node indicates _a cluster_. | | padding | Padding. Passed from the render as this might differ between different diagrams. Maybe obsolete. | | data | Non-generic data specific to the shape. | # edge arrowType sets the type of arrows to use. The following arrow types are currently supported: arrow_cross double_arrow_cross arrow_point double_arrow_point arrow_circle double_arrow_circle Lets try to make these types semantic free so that diagram type semantics does not find its way in to this more generic layer. Required edgeData for proper rendering: | property | description | | ---------- | -------------------------------------------------------------------- | | id | Id of the edge | | arrowHead | overlap between arrowHead and arrowType? | | arrowType | overlap between arrowHead and arrowType? | | style | | | labelStyle | | | label | overlap between label and labelText? | | labelPos | | | labelType | overlap between label and labelText? | | thickness | Sets the thinkess of the edge. Can be \['normal', 'thick'\] | | pattern | Sets the pattern of the edge. Can be \['solid', 'dotted', 'dashed'\] | # Markers Define what markers that should be included in the diagram with the insert markers function. The function takes two arguments, first the element in which the markers should be included and a list of the markers that should be added. Ex: insertMarkers(el, \['point', 'circle'\]) The example above adds the markers point and cross. This means that edges with the arrowTypes arrow_cross, double_arrow_cross, arrow_point and double_arrow_cross will get the corresponding markers but arrowType arrow_cross will have no impact. Current markers: - point - the standard arrow from flowcharts - circle - Arrows ending with circle - cross - arrows starting and ending with a cross // Todo - in case of common renderer # Common functions used by the renderer to be implemented by the Db getDirection getClasses mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/clusters.js000066400000000000000000000153471433273745700266250ustar00rootroot00000000000000import intersectRect from './intersect/intersect-rect'; import { log } from '../logger'; import createLabel from './createLabel'; import { select } from 'd3'; import { getConfig } from '../config'; import { evaluate } from '../diagrams/common/common'; const rect = (parent, node) => { log.trace('Creating subgraph rect for ', node.id, node); // Add outer g element const shapeSvg = parent .insert('g') .attr('class', 'cluster' + (node.class ? ' ' + node.class : '')) .attr('id', node.id); // add the rect const rect = shapeSvg.insert('rect', ':first-child'); // Create the label and insert it after the rect const label = shapeSvg.insert('g').attr('class', 'cluster-label'); const text = label .node() .appendChild(createLabel(node.labelText, node.labelStyle, undefined, true)); // Get the size of the label let bbox = text.getBBox(); if (evaluate(getConfig().flowchart.htmlLabels)) { const div = text.children[0]; const dv = select(text); bbox = div.getBoundingClientRect(); dv.attr('width', bbox.width); dv.attr('height', bbox.height); } const padding = 0 * node.padding; const halfPadding = padding / 2; const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; if (node.width <= bbox.width + padding) { node.diff = (bbox.width - node.width) / 2 - node.padding / 2; } else { node.diff = -node.padding / 2; } log.trace('Data ', node, JSON.stringify(node)); // center the rect around its coordinate rect .attr('style', node.style) .attr('rx', node.rx) .attr('ry', node.ry) .attr('x', node.x - width / 2) .attr('y', node.y - node.height / 2 - halfPadding) .attr('width', width) .attr('height', node.height + padding); // Center the label label.attr( 'transform', 'translate(' + (node.x - bbox.width / 2) + ', ' + (node.y - node.height / 2 + node.padding / 3) + ')' ); const rectBox = rect.node().getBBox(); node.width = rectBox.width; node.height = rectBox.height; node.intersect = function (point) { return intersectRect(node, point); }; return shapeSvg; }; /** * Non visible cluster where the note is group with its * * @param {any} parent * @param {any} node * @returns {any} ShapeSvg */ const noteGroup = (parent, node) => { // Add outer g element const shapeSvg = parent.insert('g').attr('class', 'note-cluster').attr('id', node.id); // add the rect const rect = shapeSvg.insert('rect', ':first-child'); const padding = 0 * node.padding; const halfPadding = padding / 2; // center the rect around its coordinate rect .attr('rx', node.rx) .attr('ry', node.ry) .attr('x', node.x - node.width / 2 - halfPadding) .attr('y', node.y - node.height / 2 - halfPadding) .attr('width', node.width + padding) .attr('height', node.height + padding) .attr('fill', 'none'); const rectBox = rect.node().getBBox(); node.width = rectBox.width; node.height = rectBox.height; node.intersect = function (point) { return intersectRect(node, point); }; return shapeSvg; }; const roundedWithTitle = (parent, node) => { // Add outer g element const shapeSvg = parent.insert('g').attr('class', node.classes).attr('id', node.id); // add the rect const rect = shapeSvg.insert('rect', ':first-child'); // Create the label and insert it after the rect const label = shapeSvg.insert('g').attr('class', 'cluster-label'); const innerRect = shapeSvg.append('rect'); const text = label .node() .appendChild(createLabel(node.labelText, node.labelStyle, undefined, true)); // Get the size of the label let bbox = text.getBBox(); if (evaluate(getConfig().flowchart.htmlLabels)) { const div = text.children[0]; const dv = select(text); bbox = div.getBoundingClientRect(); dv.attr('width', bbox.width); dv.attr('height', bbox.height); } bbox = text.getBBox(); const padding = 0 * node.padding; const halfPadding = padding / 2; const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; if (node.width <= bbox.width + node.padding) { node.diff = (bbox.width + node.padding * 0 - node.width) / 2; } else { node.diff = -node.padding / 2; } // center the rect around its coordinate rect .attr('class', 'outer') .attr('x', node.x - width / 2 - halfPadding) .attr('y', node.y - node.height / 2 - halfPadding) .attr('width', width + padding) .attr('height', node.height + padding); innerRect .attr('class', 'inner') .attr('x', node.x - width / 2 - halfPadding) .attr('y', node.y - node.height / 2 - halfPadding + bbox.height - 1) .attr('width', width + padding) .attr('height', node.height + padding - bbox.height - 3); // Center the label label.attr( 'transform', 'translate(' + (node.x - bbox.width / 2) + ', ' + (node.y - node.height / 2 - node.padding / 3 + (evaluate(getConfig().flowchart.htmlLabels) ? 5 : 3)) + ')' ); const rectBox = rect.node().getBBox(); node.height = rectBox.height; node.intersect = function (point) { return intersectRect(node, point); }; return shapeSvg; }; const divider = (parent, node) => { // Add outer g element const shapeSvg = parent.insert('g').attr('class', node.classes).attr('id', node.id); // add the rect const rect = shapeSvg.insert('rect', ':first-child'); const padding = 0 * node.padding; const halfPadding = padding / 2; // center the rect around its coordinate rect .attr('class', 'divider') .attr('x', node.x - node.width / 2 - halfPadding) .attr('y', node.y - node.height / 2) .attr('width', node.width + padding) .attr('height', node.height + padding); const rectBox = rect.node().getBBox(); node.width = rectBox.width; node.height = rectBox.height; node.diff = -node.padding / 2; node.intersect = function (point) { return intersectRect(node, point); }; return shapeSvg; }; const shapes = { rect, roundedWithTitle, noteGroup, divider }; let clusterElems = {}; export const insertCluster = (elem, node) => { log.trace('Inserting cluster'); const shape = node.shape || 'rect'; clusterElems[node.id] = shapes[shape](elem, node); }; export const getClusterTitleWidth = (elem, node) => { const label = createLabel(node.labelText, node.labelStyle, undefined, true); elem.node().appendChild(label); const width = label.getBBox().width; elem.node().removeChild(label); return width; }; export const clear = () => { clusterElems = {}; }; export const positionCluster = (node) => { log.info('Position cluster (' + node.id + ', ' + node.x + ', ' + node.y + ')'); const el = clusterElems[node.id]; el.attr('transform', 'translate(' + node.x + ', ' + node.y + ')'); }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/createLabel.js000066400000000000000000000053131433273745700271540ustar00rootroot00000000000000import { select } from 'd3'; import { log } from '../logger'; import { getConfig } from '../config'; import { evaluate } from '../diagrams/common/common'; import { decodeEntities } from '../mermaidAPI'; /** * @param dom * @param styleFn */ function applyStyle(dom, styleFn) { if (styleFn) { dom.attr('style', styleFn); } } /** * @param {any} node * @returns {SVGForeignObjectElement} Node */ function addHtmlLabel(node) { const fo = select(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject')); const div = fo.append('xhtml:div'); const label = node.label; const labelClass = node.isNode ? 'nodeLabel' : 'edgeLabel'; div.html( '' + label + '' ); applyStyle(div, node.labelStyle); div.style('display', 'inline-block'); // Fix for firefox div.style('white-space', 'nowrap'); div.attr('xmlns', 'http://www.w3.org/1999/xhtml'); return fo.node(); } const createLabel = (_vertexText, style, isTitle, isNode) => { let vertexText = _vertexText || ''; if (typeof vertexText === 'object') vertexText = vertexText[0]; if (evaluate(getConfig().flowchart.htmlLabels)) { // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that? vertexText = vertexText.replace(/\\n|\n/g, '
'); log.info('vertexText' + vertexText); const node = { isNode, label: decodeEntities(vertexText).replace( /fa[lrsb]?:fa-[\w-]+/g, (s) => `` ), labelStyle: style.replace('fill:', 'color:'), }; let vertexNode = addHtmlLabel(node); // vertexNode.parentNode.removeChild(vertexNode); return vertexNode; } else { const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text'); svgLabel.setAttribute('style', style.replace('color:', 'fill:')); let rows = []; if (typeof vertexText === 'string') { rows = vertexText.split(/\\n|\n|/gi); } else if (Array.isArray(vertexText)) { rows = vertexText; } else { rows = []; } for (let j = 0; j < rows.length; j++) { const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan'); tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'); tspan.setAttribute('dy', '1em'); tspan.setAttribute('x', '0'); if (isTitle) { tspan.setAttribute('class', 'title-row'); } else { tspan.setAttribute('class', 'row'); } tspan.textContent = rows[j].trim(); svgLabel.appendChild(tspan); } return svgLabel; } }; export default createLabel; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/edges.js000066400000000000000000000444671433273745700260550ustar00rootroot00000000000000import { log } from '../logger'; import createLabel from './createLabel'; import { line, curveBasis, select } from 'd3'; import { getConfig } from '../config'; import utils from '../utils'; import { evaluate } from '../diagrams/common/common'; let edgeLabels = {}; let terminalLabels = {}; export const clear = () => { edgeLabels = {}; terminalLabels = {}; }; export const insertEdgeLabel = (elem, edge) => { // Create the actual text element const labelElement = createLabel(edge.label, edge.labelStyle); // Create outer g, edgeLabel, this will be positioned after graph layout const edgeLabel = elem.insert('g').attr('class', 'edgeLabel'); // Create inner g, label, this will be positioned now for centering the text const label = edgeLabel.insert('g').attr('class', 'label'); label.node().appendChild(labelElement); // Center the label let bbox = labelElement.getBBox(); if (evaluate(getConfig().flowchart.htmlLabels)) { const div = labelElement.children[0]; const dv = select(labelElement); bbox = div.getBoundingClientRect(); dv.attr('width', bbox.width); dv.attr('height', bbox.height); } label.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')'); // Make element accessible by id for positioning edgeLabels[edge.id] = edgeLabel; // Update the abstract data of the edge with the new information about its width and height edge.width = bbox.width; edge.height = bbox.height; let fo; if (edge.startLabelLeft) { // Create the actual text element const startLabelElement = createLabel(edge.startLabelLeft, edge.labelStyle); const startEdgeLabelLeft = elem.insert('g').attr('class', 'edgeTerminals'); const inner = startEdgeLabelLeft.insert('g').attr('class', 'inner'); fo = inner.node().appendChild(startLabelElement); const slBox = startLabelElement.getBBox(); inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')'); if (!terminalLabels[edge.id]) { terminalLabels[edge.id] = {}; } terminalLabels[edge.id].startLeft = startEdgeLabelLeft; setTerminalWidth(fo, edge.startLabelLeft); } if (edge.startLabelRight) { // Create the actual text element const startLabelElement = createLabel(edge.startLabelRight, edge.labelStyle); const startEdgeLabelRight = elem.insert('g').attr('class', 'edgeTerminals'); const inner = startEdgeLabelRight.insert('g').attr('class', 'inner'); fo = startEdgeLabelRight.node().appendChild(startLabelElement); inner.node().appendChild(startLabelElement); const slBox = startLabelElement.getBBox(); inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')'); if (!terminalLabels[edge.id]) { terminalLabels[edge.id] = {}; } terminalLabels[edge.id].startRight = startEdgeLabelRight; setTerminalWidth(fo, edge.startLabelRight); } if (edge.endLabelLeft) { // Create the actual text element const endLabelElement = createLabel(edge.endLabelLeft, edge.labelStyle); const endEdgeLabelLeft = elem.insert('g').attr('class', 'edgeTerminals'); const inner = endEdgeLabelLeft.insert('g').attr('class', 'inner'); fo = inner.node().appendChild(endLabelElement); const slBox = endLabelElement.getBBox(); inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')'); endEdgeLabelLeft.node().appendChild(endLabelElement); if (!terminalLabels[edge.id]) { terminalLabels[edge.id] = {}; } terminalLabels[edge.id].endLeft = endEdgeLabelLeft; setTerminalWidth(fo, edge.endLabelLeft); } if (edge.endLabelRight) { // Create the actual text element const endLabelElement = createLabel(edge.endLabelRight, edge.labelStyle); const endEdgeLabelRight = elem.insert('g').attr('class', 'edgeTerminals'); const inner = endEdgeLabelRight.insert('g').attr('class', 'inner'); fo = inner.node().appendChild(endLabelElement); const slBox = endLabelElement.getBBox(); inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')'); endEdgeLabelRight.node().appendChild(endLabelElement); if (!terminalLabels[edge.id]) { terminalLabels[edge.id] = {}; } terminalLabels[edge.id].endRight = endEdgeLabelRight; setTerminalWidth(fo, edge.endLabelRight); } }; /** * @param {any} fo * @param {any} value */ function setTerminalWidth(fo, value) { if (getConfig().flowchart.htmlLabels && fo) { fo.style.width = value.length * 9 + 'px'; fo.style.height = '12px'; } } export const positionEdgeLabel = (edge, paths) => { log.info('Moving label abc78 ', edge.id, edge.label, edgeLabels[edge.id]); let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; if (edge.label) { const el = edgeLabels[edge.id]; let x = edge.x; let y = edge.y; if (path) { // // debugger; const pos = utils.calcLabelPosition(path); log.info('Moving label from (', x, ',', y, ') to (', pos.x, ',', pos.y, ') abc78'); // x = pos.x; // y = pos.y; } el.attr('transform', 'translate(' + x + ', ' + y + ')'); } //let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; if (edge.startLabelLeft) { const el = terminalLabels[edge.id].startLeft; let x = edge.x; let y = edge.y; if (path) { // debugger; const pos = utils.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, 'start_left', path); x = pos.x; y = pos.y; } el.attr('transform', 'translate(' + x + ', ' + y + ')'); } if (edge.startLabelRight) { const el = terminalLabels[edge.id].startRight; let x = edge.x; let y = edge.y; if (path) { // debugger; const pos = utils.calcTerminalLabelPosition( edge.arrowTypeStart ? 10 : 0, 'start_right', path ); x = pos.x; y = pos.y; } el.attr('transform', 'translate(' + x + ', ' + y + ')'); } if (edge.endLabelLeft) { const el = terminalLabels[edge.id].endLeft; let x = edge.x; let y = edge.y; if (path) { // debugger; const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, 'end_left', path); x = pos.x; y = pos.y; } el.attr('transform', 'translate(' + x + ', ' + y + ')'); } if (edge.endLabelRight) { const el = terminalLabels[edge.id].endRight; let x = edge.x; let y = edge.y; if (path) { // debugger; const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, 'end_right', path); x = pos.x; y = pos.y; } el.attr('transform', 'translate(' + x + ', ' + y + ')'); } }; const outsideNode = (node, point) => { // log.warn('Checking bounds ', node, point); const x = node.x; const y = node.y; const dx = Math.abs(point.x - x); const dy = Math.abs(point.y - y); const w = node.width / 2; const h = node.height / 2; if (dx >= w || dy >= h) { return true; } return false; }; export const intersection = (node, outsidePoint, insidePoint) => { log.warn(`intersection calc abc89: outsidePoint: ${JSON.stringify(outsidePoint)} insidePoint : ${JSON.stringify(insidePoint)} node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); const x = node.x; const y = node.y; const dx = Math.abs(x - insidePoint.x); // const dy = Math.abs(y - insidePoint.y); const w = node.width / 2; let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; const h = node.height / 2; // const edges = { // x1: x - w, // x2: x + w, // y1: y - h, // y2: y + h // }; // if ( // outsidePoint.x === edges.x1 || // outsidePoint.x === edges.x2 || // outsidePoint.y === edges.y1 || // outsidePoint.y === edges.y2 // ) { // log.warn('abc89 calc equals on edge', outsidePoint, edges); // return outsidePoint; // } const Q = Math.abs(outsidePoint.y - insidePoint.y); const R = Math.abs(outsidePoint.x - insidePoint.x); // log.warn(); if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { // Intersection is top or bottom of rect. // let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; r = (R * q) / Q; const res = { x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q, }; if (r === 0) { res.x = outsidePoint.x; res.y = outsidePoint.y; } if (R === 0) { res.x = outsidePoint.x; } if (Q === 0) { res.y = outsidePoint.y; } log.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); return res; } else { // Intersection onn sides of rect if (insidePoint.x < outsidePoint.x) { r = outsidePoint.x - w - x; } else { // r = outsidePoint.x - w - x; r = x - w - outsidePoint.x; } let q = (Q * r) / R; // OK let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x + dx - w; // OK let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : outsidePoint.x + r; let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; // let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : outsidePoint.x + r; let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; log.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); if (r === 0) { _x = outsidePoint.x; _y = outsidePoint.y; } if (R === 0) { _x = outsidePoint.x; } if (Q === 0) { _y = outsidePoint.y; } return { x: _x, y: _y }; } }; /** * This function will page a path and node where the last point(s) in the path is inside the node * and return an update path ending by the border of the node. * * @param {Array} _points * @param {any} boundryNode * @returns {Array} Points */ const cutPathAtIntersect = (_points, boundryNode) => { log.warn('abc88 cutPathAtIntersect', _points, boundryNode); let points = []; let lastPointOutside = _points[0]; let isInside = false; _points.forEach((point) => { // const node = clusterDb[edge.toCluster].node; log.info('abc88 checking point', point, boundryNode); // check if point is inside the boundry rect if (!outsideNode(boundryNode, point) && !isInside) { // First point inside the rect found // Calc the intersection coord between the point anf the last point outside the rect const inter = intersection(boundryNode, lastPointOutside, point); log.warn('abc88 inside', point, lastPointOutside, inter); log.warn('abc88 intersection', inter); // // Check case where the intersection is the same as the last point let pointPresent = false; points.forEach((p) => { pointPresent = pointPresent || (p.x === inter.x && p.y === inter.y); }); // // if (!pointPresent) { if (!points.find((e) => e.x === inter.x && e.y === inter.y)) { points.push(inter); } else { log.warn('abc88 no intersect', inter, points); } // points.push(inter); isInside = true; } else { // Outside log.warn('abc88 outside', point, lastPointOutside); lastPointOutside = point; // points.push(point); if (!isInside) points.push(point); } }); log.warn('abc88 returning points', points); return points; }; //(edgePaths, e, edge, clusterDb, diagramtype, graph) export const insertEdge = function (elem, e, edge, clusterDb, diagramType, graph) { let points = edge.points; let pointsHasChanged = false; const tail = graph.node(e.v); var head = graph.node(e.w); log.info('abc88 InsertEdge: ', edge); if (head.intersect && tail.intersect) { points = points.slice(1, edge.points.length - 1); points.unshift(tail.intersect(points[0])); log.info( 'Last point', points[points.length - 1], head, head.intersect(points[points.length - 1]) ); points.push(head.intersect(points[points.length - 1])); } if (edge.toCluster) { log.info('to cluster abc88', clusterDb[edge.toCluster]); points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); // log.trace('edge', edge); // points = []; // let lastPointOutside; // = edge.points[0]; // let isInside = false; // edge.points.forEach(point => { // const node = clusterDb[edge.toCluster].node; // log.warn('checking from', edge.fromCluster, point, node); // if (!outsideNode(node, point) && !isInside) { // log.trace('inside', edge.toCluster, point, lastPointOutside); // // First point inside the rect // const inter = intersection(node, lastPointOutside, point); // let pointPresent = false; // points.forEach(p => { // pointPresent = pointPresent || (p.x === inter.x && p.y === inter.y); // }); // // if (!pointPresent) { // if (!points.find(e => e.x === inter.x && e.y === inter.y)) { // points.push(inter); // } else { // log.warn('no intersect', inter, points); // } // isInside = true; // } else { // // outside // lastPointOutside = point; // if (!isInside) points.push(point); // } // }); pointsHasChanged = true; } if (edge.fromCluster) { log.info('from cluster abc88', clusterDb[edge.fromCluster]); points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); pointsHasChanged = true; } // The data for our line const lineData = points.filter((p) => !Number.isNaN(p.y)); // This is the accessor function we talked about above let curve; // Currently only flowcharts get the curve from the settings, perhaps this should // be expanded to a common setting? Restricting it for now in order not to cause side-effects that // have not been thought through if (diagramType === 'graph' || diagramType === 'flowchart') { curve = edge.curve || curveBasis; } else { curve = curveBasis; } // curve = curveLinear; const lineFunction = line() .x(function (d) { return d.x; }) .y(function (d) { return d.y; }) .curve(curve); // Contruct stroke classes based on properties let strokeClasses; switch (edge.thickness) { case 'normal': strokeClasses = 'edge-thickness-normal'; break; case 'thick': strokeClasses = 'edge-thickness-thick'; break; case 'invisible': strokeClasses = 'edge-thickness-thick'; break; default: strokeClasses = ''; } switch (edge.pattern) { case 'solid': strokeClasses += ' edge-pattern-solid'; break; case 'dotted': strokeClasses += ' edge-pattern-dotted'; break; case 'dashed': strokeClasses += ' edge-pattern-dashed'; break; } const svgPath = elem .append('path') .attr('d', lineFunction(lineData)) .attr('id', edge.id) .attr('class', ' ' + strokeClasses + (edge.classes ? ' ' + edge.classes : '')) .attr('style', edge.style); // DEBUG code, adds a red circle at each edge coordinate // edge.points.forEach(point => { // elem // .append('circle') // .style('stroke', 'red') // .style('fill', 'red') // .attr('r', 1) // .attr('cx', point.x) // .attr('cy', point.y); // }); let url = ''; // // TODO: Can we load this config only from the rendered graph type? if (getConfig().flowchart.arrowMarkerAbsolute || getConfig().state.arrowMarkerAbsolute) { url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search; url = url.replace(/\(/g, '\\('); url = url.replace(/\)/g, '\\)'); } log.info('arrowTypeStart', edge.arrowTypeStart); log.info('arrowTypeEnd', edge.arrowTypeEnd); switch (edge.arrowTypeStart) { case 'arrow_cross': svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-crossStart' + ')'); break; case 'arrow_point': svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-pointStart' + ')'); break; case 'arrow_barb': svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-barbStart' + ')'); break; case 'arrow_circle': svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-circleStart' + ')'); break; case 'aggregation': svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-aggregationStart' + ')'); break; case 'extension': svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-extensionStart' + ')'); break; case 'composition': svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-compositionStart' + ')'); break; case 'dependency': svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-dependencyStart' + ')'); break; case 'lollipop': svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-lollipopStart' + ')'); break; default: } switch (edge.arrowTypeEnd) { case 'arrow_cross': svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-crossEnd' + ')'); break; case 'arrow_point': svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-pointEnd' + ')'); break; case 'arrow_barb': svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-barbEnd' + ')'); break; case 'arrow_circle': svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-circleEnd' + ')'); break; case 'aggregation': svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-aggregationEnd' + ')'); break; case 'extension': svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-extensionEnd' + ')'); break; case 'composition': svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-compositionEnd' + ')'); break; case 'dependency': svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-dependencyEnd' + ')'); break; case 'lollipop': svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-lollipopEnd' + ')'); break; default: } let paths = {}; if (pointsHasChanged) { paths.updatedPath = points; } paths.originalPath = edge.points; return paths; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/edges.spec.js000066400000000000000000000036021433273745700267700ustar00rootroot00000000000000import { intersection } from './edges'; import { setLogLevel } from '../logger'; describe('Graphlib decorations', () => { let node; beforeEach(function () { setLogLevel(1); node = { x: 171, y: 100, width: 210, height: 184 }; }); describe('intersection', function () { it('case 1 - intersection on left edge of box', function () { const o = { x: 31, y: 143.2257070163421 }; const i = { x: 99.3359375, y: 100 }; const int = intersection(node, o, i); expect(int.x).toBe(66); expect(int.y).toBeCloseTo(122.139); }); it('case 2 - intersection on left edge of box', function () { const o = { x: 310.2578125, y: 169.88002060631462 }; const i = { x: 127.96875, y: 100 }; const node2 = { height: 337.5, width: 184.4609375, x: 100.23046875, y: 176.75, }; const int = intersection(node2, o, i); expect(int.x).toBeCloseTo(192.4609375); expect(int.y).toBeCloseTo(145.15711441743503); }); it('case 3 - intersection on top of box outside point greater then inside point', function () { const o = { x: 157, y: 39 }; const i = { x: 104, y: 105 }; const node2 = { width: 212, x: 114, y: 164, height: 176, }; const int = intersection(node2, o, i); expect(int.x).toBeCloseTo(133.71); expect(int.y).toBeCloseTo(76); // expect(int.y).toBeCloseTo(67.833) }); it('case 4 - intersection on top of box inside point greater then inside point', function () { const o = { x: 144, y: 38 }; const i = { x: 198, y: 105 }; const node2 = { width: 212, x: 114, y: 164, height: 176, }; const int = intersection(node2, o, i); expect(int.x).toBeCloseTo(174.626); expect(int.y).toBeCloseTo(76); // expect(int.y).toBeCloseTo(67.833) }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/index.js000066400000000000000000000144051433273745700260620ustar00rootroot00000000000000import dagre from 'dagre'; import graphlib from 'graphlib'; import insertMarkers from './markers'; import { updateNodeBounds } from './shapes/util'; import { clear as clearGraphlib, clusterDb, adjustClustersAndEdges, findNonClusterChild, sortNodesByHierarchy, } from './mermaid-graphlib'; import { insertNode, positionNode, clear as clearNodes, setNodeElem } from './nodes'; import { insertCluster, clear as clearClusters } from './clusters'; import { insertEdgeLabel, positionEdgeLabel, insertEdge, clear as clearEdges } from './edges'; import { log } from '../logger'; const recursiveRender = (_elem, graph, diagramtype, parentCluster) => { log.info('Graph in recursive render: XXX', graphlib.json.write(graph), parentCluster); const dir = graph.graph().rankdir; log.trace('Dir in recursive render - dir:', dir); const elem = _elem.insert('g').attr('class', 'root'); if (!graph.nodes()) { log.info('No nodes found for', graph); } else { log.info('Recursive render XXX', graph.nodes()); } if (graph.edges().length > 0) { log.trace('Recursive edges', graph.edge(graph.edges()[0])); } const clusters = elem.insert('g').attr('class', 'clusters'); const edgePaths = elem.insert('g').attr('class', 'edgePaths'); const edgeLabels = elem.insert('g').attr('class', 'edgeLabels'); const nodes = elem.insert('g').attr('class', 'nodes'); // Insert nodes, this will insert them into the dom and each node will get a size. The size is updated // to the abstract node and is later used by dagre for the layout graph.nodes().forEach(function (v) { const node = graph.node(v); if (typeof parentCluster !== 'undefined') { const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); // data.clusterPositioning = true; log.info('Setting data for cluster XXX (', v, ') ', data, parentCluster); graph.setNode(parentCluster.id, data); if (!graph.parent(v)) { log.trace('Setting parent', v, parentCluster.id); graph.setParent(v, parentCluster.id, data); } } log.info('(Insert) Node XXX' + v + ': ' + JSON.stringify(graph.node(v))); if (node && node.clusterNode) { // const children = graph.children(v); log.info('Cluster identified', v, node.width, graph.node(v)); const o = recursiveRender(nodes, node.graph, diagramtype, graph.node(v)); const newEl = o.elem; updateNodeBounds(node, newEl); node.diff = o.diff || 0; log.info('Node bounds (abc123)', v, node, node.width, node.x, node.y); setNodeElem(newEl, node); log.warn('Recursive render complete ', newEl, node); } else { if (graph.children(v).length > 0) { // This is a cluster but not to be rendered recursively // Render as before log.info('Cluster - the non recursive path XXX', v, node.id, node, graph); log.info(findNonClusterChild(node.id, graph)); clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; // insertCluster(clusters, graph.node(v)); } else { log.info('Node - the non recursive path', v, node.id, node); insertNode(nodes, graph.node(v), dir); } } }); // Insert labels, this will insert them into the dom so that the width can be calculated // Also figure out which edges point to/from clusters and adjust them accordingly // Edges from/to clusters really points to the first child in the cluster. // TODO: pick optimal child in the cluster to us as link anchor graph.edges().forEach(function (e) { const edge = graph.edge(e.v, e.w, e.name); log.info('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(e)); log.info('Edge ' + e.v + ' -> ' + e.w + ': ', e, ' ', JSON.stringify(graph.edge(e))); // Check if link is either from or to a cluster log.info('Fix', clusterDb, 'ids:', e.v, e.w, 'Translateing: ', clusterDb[e.v], clusterDb[e.w]); insertEdgeLabel(edgeLabels, edge); }); graph.edges().forEach(function (e) { log.info('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(e)); }); log.info('#############################################'); log.info('### Layout ###'); log.info('#############################################'); log.info(graph); dagre.layout(graph); log.info('Graph after layout:', graphlib.json.write(graph)); // Move the nodes to the correct place let diff = 0; sortNodesByHierarchy(graph).forEach(function (v) { const node = graph.node(v); log.info('Position ' + v + ': ' + JSON.stringify(graph.node(v))); log.info( 'Position ' + v + ': (' + node.x, ',' + node.y, ') width: ', node.width, ' height: ', node.height ); if (node && node.clusterNode) { // clusterDb[node.id].node = node; positionNode(node); } else { // Non cluster node if (graph.children(v).length > 0) { // A cluster in the non-recursive way // positionCluster(node); insertCluster(clusters, node); clusterDb[node.id].node = node; } else { positionNode(node); } } }); // Move the edge labels to the correct place after layout graph.edges().forEach(function (e) { const edge = graph.edge(e); log.info('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(edge), edge); const paths = insertEdge(edgePaths, e, edge, clusterDb, diagramtype, graph); positionEdgeLabel(edge, paths); }); graph.nodes().forEach(function (v) { const n = graph.node(v); log.info(v, n.type, n.diff); if (n.type === 'group') { diff = n.diff; } }); return { elem, diff }; }; export const render = (elem, graph, markers, diagramtype, id) => { insertMarkers(elem, markers, diagramtype, id); clearNodes(); clearEdges(); clearClusters(); clearGraphlib(); log.warn('Graph at first:', graphlib.json.write(graph)); adjustClustersAndEdges(graph); log.warn('Graph after:', graphlib.json.write(graph)); // log.warn('Graph ever after:', graphlib.json.write(graph.node('A').graph)); recursiveRender(elem, graph, diagramtype); }; // const shapeDefinitions = {}; // export const addShape = ({ shapeType: fun }) => { // shapeDefinitions[shapeType] = fun; // }; // const arrowDefinitions = {}; // export const addArrow = ({ arrowType: fun }) => { // arrowDefinitions[arrowType] = fun; // }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/intersect.js000066400000000000000000000003371433273745700267520ustar00rootroot00000000000000module.exports = { node: require('./intersect-node'), circle: require('./intersect-circle'), ellipse: require('./intersect-ellipse'), polygon: require('./intersect-polygon'), rect: require('./intersect-rect'), }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/intersect/000077500000000000000000000000001433273745700264115ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/intersect/index.js000066400000000000000000000005511433273745700300570ustar00rootroot00000000000000/* * Borrowed with love from from dagrge-d3. Many thanks to cpettitt! */ import node from './intersect-node.js'; import circle from './intersect-circle.js'; import ellipse from './intersect-ellipse.js'; import polygon from './intersect-polygon.js'; import rect from './intersect-rect.js'; export default { node, circle, ellipse, polygon, rect, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/intersect/intersect-circle.js000066400000000000000000000003501433273745700322040ustar00rootroot00000000000000import intersectEllipse from './intersect-ellipse'; /** * @param node * @param rx * @param point */ function intersectCircle(node, rx, point) { return intersectEllipse(node, rx, rx, point); } export default intersectCircle; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/intersect/intersect-ellipse.js000066400000000000000000000011141433273745700323770ustar00rootroot00000000000000/** * @param node * @param rx * @param ry * @param point */ function intersectEllipse(node, rx, ry, point) { // Formulae from: https://mathworld.wolfram.com/Ellipse-LineIntersection.html var cx = node.x; var cy = node.y; var px = cx - point.x; var py = cy - point.y; var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); var dx = Math.abs((rx * ry * px) / det); if (point.x < cx) { dx = -dx; } var dy = Math.abs((rx * ry * py) / det); if (point.y < cy) { dy = -dy; } return { x: cx + dx, y: cy + dy }; } export default intersectEllipse; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/intersect/intersect-line.js000066400000000000000000000037601433273745700317020ustar00rootroot00000000000000/** * Returns the point at which two lines, p and q, intersect or returns undefined if they do not intersect. * * @param p1 * @param p2 * @param q1 * @param q2 */ function intersectLine(p1, p2, q1, q2) { // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994, // p7 and p473. var a1, a2, b1, b2, c1, c2; var r1, r2, r3, r4; var denom, offset, num; var x, y; // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x + // b1 y + c1 = 0. a1 = p2.y - p1.y; b1 = p1.x - p2.x; c1 = p2.x * p1.y - p1.x * p2.y; // Compute r3 and r4. r3 = a1 * q1.x + b1 * q1.y + c1; r4 = a1 * q2.x + b1 * q2.y + c1; // Check signs of r3 and r4. If both point 3 and point 4 lie on // same side of line 1, the line segments do not intersect. if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { return /*DONT_INTERSECT*/; } // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0 a2 = q2.y - q1.y; b2 = q1.x - q2.x; c2 = q2.x * q1.y - q1.x * q2.y; // Compute r1 and r2 r1 = a2 * p1.x + b2 * p1.y + c2; r2 = a2 * p2.x + b2 * p2.y + c2; // Check signs of r1 and r2. If both point 1 and point 2 lie // on same side of second line segment, the line segments do // not intersect. if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { return /*DONT_INTERSECT*/; } // Line segments intersect: compute intersection point. denom = a1 * b2 - a2 * b1; if (denom === 0) { return /*COLLINEAR*/; } offset = Math.abs(denom / 2); // The denom/2 is to get rounding instead of truncating. It // is added or subtracted to the numerator, depending upon the // sign of the numerator. num = b1 * c2 - b2 * c1; x = num < 0 ? (num - offset) / denom : (num + offset) / denom; num = a2 * c1 - a1 * c2; y = num < 0 ? (num - offset) / denom : (num + offset) / denom; return { x: x, y: y }; } /** * @param r1 * @param r2 */ function sameSign(r1, r2) { return r1 * r2 > 0; } export default intersectLine; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/intersect/intersect-node.js000066400000000000000000000002631433273745700316730ustar00rootroot00000000000000/** * @param node * @param point */ function intersectNode(node, point) { // console.info('Intersect Node'); return node.intersect(point); } export default intersectNode; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/intersect/intersect-polygon.js000066400000000000000000000034461433273745700324430ustar00rootroot00000000000000/* eslint "no-console": off */ import intersectLine from './intersect-line'; export default intersectPolygon; /** * Returns the point ({x, y}) at which the point argument intersects with the node argument assuming * that it has the shape specified by polygon. * * @param node * @param polyPoints * @param point */ function intersectPolygon(node, polyPoints, point) { var x1 = node.x; var y1 = node.y; var intersections = []; var minX = Number.POSITIVE_INFINITY; var minY = Number.POSITIVE_INFINITY; if (typeof polyPoints.forEach === 'function') { polyPoints.forEach(function (entry) { minX = Math.min(minX, entry.x); minY = Math.min(minY, entry.y); }); } else { minX = Math.min(minX, polyPoints.x); minY = Math.min(minY, polyPoints.y); } var left = x1 - node.width / 2 - minX; var top = y1 - node.height / 2 - minY; for (var i = 0; i < polyPoints.length; i++) { var p1 = polyPoints[i]; var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; var intersect = intersectLine( node, point, { x: left + p1.x, y: top + p1.y }, { x: left + p2.x, y: top + p2.y } ); if (intersect) { intersections.push(intersect); } } if (!intersections.length) { // console.log('NO INTERSECTION FOUND, RETURN NODE CENTER', node); return node; } if (intersections.length > 1) { // More intersections, find the one nearest to edge end point intersections.sort(function (p, q) { var pdx = p.x - point.x; var pdy = p.y - point.y; var distp = Math.sqrt(pdx * pdx + pdy * pdy); var qdx = q.x - point.x; var qdy = q.y - point.y; var distq = Math.sqrt(qdx * qdx + qdy * qdy); return distp < distq ? -1 : distp === distq ? 0 : 1; }); } return intersections[0]; } mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/intersect/intersect-rect.js000066400000000000000000000013171433273745700317040ustar00rootroot00000000000000const intersectRect = (node, point) => { var x = node.x; var y = node.y; // Rectangle intersection algorithm from: // https://math.stackexchange.com/questions/108113/find-edge-between-two-boxes var dx = point.x - x; var dy = point.y - y; var w = node.width / 2; var h = node.height / 2; var sx, sy; if (Math.abs(dy) * w > Math.abs(dx) * h) { // Intersection is top or bottom of rect. if (dy < 0) { h = -h; } sx = dy === 0 ? 0 : (h * dx) / dy; sy = h; } else { // Intersection is left or right of rect. if (dx < 0) { w = -w; } sx = w; sy = dx === 0 ? 0 : (w * dy) / dx; } return { x: x + sx, y: y + sy }; }; export default intersectRect; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/markers.js000066400000000000000000000163221433273745700264170ustar00rootroot00000000000000/** Setup arrow head and define the marker. The result is appended to the svg. */ import { log } from '../logger'; // Only add the number of markers that the diagram needs const insertMarkers = (elem, markerArray, type, id) => { markerArray.forEach((markerName) => { markers[markerName](elem, type, id); }); }; const extension = (elem, type, id) => { log.trace('Making markers for ', id); elem .append('defs') .append('marker') .attr('id', type + '-extensionStart') .attr('class', 'marker extension ' + type) .attr('refX', 0) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('path') .attr('d', 'M 1,7 L18,13 V 1 Z'); elem .append('defs') .append('marker') .attr('id', type + '-extensionEnd') .attr('class', 'marker extension ' + type) .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 1,1 V 13 L18,7 Z'); // this is actual shape for arrowhead }; const composition = (elem, type) => { elem .append('defs') .append('marker') .attr('id', type + '-compositionStart') .attr('class', 'marker composition ' + type) .attr('refX', 0) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); elem .append('defs') .append('marker') .attr('id', type + '-compositionEnd') .attr('class', 'marker composition ' + type) .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); }; const aggregation = (elem, type) => { elem .append('defs') .append('marker') .attr('id', type + '-aggregationStart') .attr('class', 'marker aggregation ' + type) .attr('refX', 0) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); elem .append('defs') .append('marker') .attr('id', type + '-aggregationEnd') .attr('class', 'marker aggregation ' + type) .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); }; const dependency = (elem, type) => { elem .append('defs') .append('marker') .attr('id', type + '-dependencyStart') .attr('class', 'marker dependency ' + type) .attr('refX', 0) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('path') .attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z'); elem .append('defs') .append('marker') .attr('id', type + '-dependencyEnd') .attr('class', 'marker dependency ' + type) .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z'); }; const lollipop = (elem, type) => { elem .append('defs') .append('marker') .attr('id', type + '-lollipopStart') .attr('class', 'marker lollipop ' + type) .attr('refX', 0) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('circle') .attr('stroke', 'black') .attr('fill', 'white') .attr('cx', 6) .attr('cy', 7) .attr('r', 6); }; const point = (elem, type) => { elem .append('marker') .attr('id', type + '-pointEnd') .attr('class', 'marker ' + type) .attr('viewBox', '0 0 10 10') .attr('refX', 10) .attr('refY', 5) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 12) .attr('markerHeight', 12) .attr('orient', 'auto') .append('path') .attr('d', 'M 0 0 L 10 5 L 0 10 z') .attr('class', 'arrowMarkerPath') .style('stroke-width', 1) .style('stroke-dasharray', '1,0'); elem .append('marker') .attr('id', type + '-pointStart') .attr('class', 'marker ' + type) .attr('viewBox', '0 0 10 10') .attr('refX', 0) .attr('refY', 5) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 12) .attr('markerHeight', 12) .attr('orient', 'auto') .append('path') .attr('d', 'M 0 5 L 10 10 L 10 0 z') .attr('class', 'arrowMarkerPath') .style('stroke-width', 1) .style('stroke-dasharray', '1,0'); }; const circle = (elem, type) => { elem .append('marker') .attr('id', type + '-circleEnd') .attr('class', 'marker ' + type) .attr('viewBox', '0 0 10 10') .attr('refX', 11) .attr('refY', 5) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 11) .attr('markerHeight', 11) .attr('orient', 'auto') .append('circle') .attr('cx', '5') .attr('cy', '5') .attr('r', '5') .attr('class', 'arrowMarkerPath') .style('stroke-width', 1) .style('stroke-dasharray', '1,0'); elem .append('marker') .attr('id', type + '-circleStart') .attr('class', 'marker ' + type) .attr('viewBox', '0 0 10 10') .attr('refX', -1) .attr('refY', 5) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 11) .attr('markerHeight', 11) .attr('orient', 'auto') .append('circle') .attr('cx', '5') .attr('cy', '5') .attr('r', '5') .attr('class', 'arrowMarkerPath') .style('stroke-width', 1) .style('stroke-dasharray', '1,0'); }; const cross = (elem, type) => { elem .append('marker') .attr('id', type + '-crossEnd') .attr('class', 'marker cross ' + type) .attr('viewBox', '0 0 11 11') .attr('refX', 12) .attr('refY', 5.2) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 11) .attr('markerHeight', 11) .attr('orient', 'auto') .append('path') // .attr('stroke', 'black') .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9') .attr('class', 'arrowMarkerPath') .style('stroke-width', 2) .style('stroke-dasharray', '1,0'); elem .append('marker') .attr('id', type + '-crossStart') .attr('class', 'marker cross ' + type) .attr('viewBox', '0 0 11 11') .attr('refX', -1) .attr('refY', 5.2) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 11) .attr('markerHeight', 11) .attr('orient', 'auto') .append('path') // .attr('stroke', 'black') .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9') .attr('class', 'arrowMarkerPath') .style('stroke-width', 2) .style('stroke-dasharray', '1,0'); }; const barb = (elem, type) => { elem .append('defs') .append('marker') .attr('id', type + '-barbEnd') .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 14) .attr('markerUnits', 'strokeWidth') .attr('orient', 'auto') .append('path') .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z'); }; // TODO rename the class diagram markers to something shape descriptive and semantic free const markers = { extension, composition, aggregation, dependency, lollipop, point, circle, cross, barb, }; export default insertMarkers; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js000066400000000000000000000332351433273745700301610ustar00rootroot00000000000000/** Decorates with functions required by mermaids dagre-wrapper. */ import { log } from '../logger'; import graphlib from 'graphlib'; export let clusterDb = {}; let decendants = {}; let parents = {}; export const clear = () => { decendants = {}; parents = {}; clusterDb = {}; }; const isDecendant = (id, ancenstorId) => { // if (id === ancenstorId) return true; log.trace( 'In isDecendant', ancenstorId, ' ', id, ' = ', decendants[ancenstorId].indexOf(id) >= 0 ); if (decendants[ancenstorId].indexOf(id) >= 0) return true; return false; }; const edgeInCluster = (edge, clusterId) => { log.info('Decendants of ', clusterId, ' is ', decendants[clusterId]); log.info('Edge is ', edge); // Edges to/from the cluster is not in the cluster, they are in the parent if (edge.v === clusterId) return false; if (edge.w === clusterId) return false; if (!decendants[clusterId]) { log.debug('Tilt, ', clusterId, ',not in decendants'); return false; } if (decendants[clusterId].indexOf(edge.v) >= 0) return true; if (isDecendant(edge.v, clusterId)) return true; if (isDecendant(edge.w, clusterId)) return true; if (decendants[clusterId].indexOf(edge.w) >= 0) return true; return false; }; const copy = (clusterId, graph, newGraph, rootId) => { log.warn( 'Copying children of ', clusterId, 'root', rootId, 'data', graph.node(clusterId), rootId ); const nodes = graph.children(clusterId) || []; // Include cluster node if it is not the root if (clusterId !== rootId) { nodes.push(clusterId); } log.warn('Copying (nodes) clusterId', clusterId, 'nodes', nodes); nodes.forEach((node) => { if (graph.children(node).length > 0) { copy(node, graph, newGraph, rootId); } else { const data = graph.node(node); log.info('cp ', node, ' to ', rootId, ' with parent ', clusterId); //,node, data, ' parent is ', clusterId); newGraph.setNode(node, data); if (rootId !== graph.parent(node)) { log.warn('Setting parent', node, graph.parent(node)); newGraph.setParent(node, graph.parent(node)); } if (clusterId !== rootId && node !== clusterId) { log.debug('Setting parent', node, clusterId); newGraph.setParent(node, clusterId); } else { log.info('In copy ', clusterId, 'root', rootId, 'data', graph.node(clusterId), rootId); log.debug( 'Not Setting parent for node=', node, 'cluster!==rootId', clusterId !== rootId, 'node!==clusterId', node !== clusterId ); } const edges = graph.edges(node); log.debug('Copying Edges', edges); edges.forEach((edge) => { log.info('Edge', edge); const data = graph.edge(edge.v, edge.w, edge.name); log.info('Edge data', data, rootId); try { // Do not copy edges in and out of the root cluster, they belong to the parent graph if (edgeInCluster(edge, rootId)) { log.info('Copying as ', edge.v, edge.w, data, edge.name); newGraph.setEdge(edge.v, edge.w, data, edge.name); log.info('newGraph edges ', newGraph.edges(), newGraph.edge(newGraph.edges()[0])); } else { log.info( 'Skipping copy of edge ', edge.v, '-->', edge.w, ' rootId: ', rootId, ' clusterId:', clusterId ); } } catch (e) { log.error(e); } }); } log.debug('Removing node', node); graph.removeNode(node); }); }; export const extractDecendants = (id, graph) => { // log.debug('Extracting ', id); const children = graph.children(id); let res = [].concat(children); for (let i = 0; i < children.length; i++) { parents[children[i]] = id; res = res.concat(extractDecendants(children[i], graph)); } return res; }; /** * Validates the graph, checking that all parent child relation points to existing nodes and that * edges between nodes also ia correct. When not correct the function logs the discrepancies. * * @param graph */ export const validate = (graph) => { const edges = graph.edges(); log.trace('Edges: ', edges); for (let i = 0; i < edges.length; i++) { if (graph.children(edges[i].v).length > 0) { log.trace('The node ', edges[i].v, ' is part of and edge even though it has children'); return false; } if (graph.children(edges[i].w).length > 0) { log.trace('The node ', edges[i].w, ' is part of and edge even though it has children'); return false; } } return true; }; /** * Finds a child that is not a cluster. When faking an edge between a node and a cluster. * * @param id * @param {any} graph */ export const findNonClusterChild = (id, graph) => { // const node = graph.node(id); log.trace('Searching', id); // const children = graph.children(id).reverse(); const children = graph.children(id); //.reverse(); log.trace('Searching children of id ', id, children); if (children.length < 1) { log.trace('This is a valid node', id); return id; } for (let i = 0; i < children.length; i++) { const _id = findNonClusterChild(children[i], graph); if (_id) { log.trace('Found replacement for', id, ' => ', _id); return _id; } } }; const getAnchorId = (id) => { if (!clusterDb[id]) { return id; } // If the cluster has no external connections if (!clusterDb[id].externalConnections) { return id; } // Return the replacement node if (clusterDb[id]) { return clusterDb[id].id; } return id; }; export const adjustClustersAndEdges = (graph, depth) => { if (!graph || depth > 10) { log.debug('Opting out, no graph '); return; } else { log.debug('Opting in, graph '); } // Go through the nodes and for each cluster found, save a replacement node, this can be used when // faking a link to a cluster graph.nodes().forEach(function (id) { const children = graph.children(id); if (children.length > 0) { log.warn( 'Cluster identified', id, ' Replacement id in edges: ', findNonClusterChild(id, graph) ); decendants[id] = extractDecendants(id, graph); clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; } }); // Check incoming and outgoing edges for each cluster graph.nodes().forEach(function (id) { const children = graph.children(id); const edges = graph.edges(); if (children.length > 0) { log.debug('Cluster identified', id, decendants); edges.forEach((edge) => { // log.debug('Edge, decendants: ', edge, decendants[id]); // Check if any edge leaves the cluster (not the actual cluster, that's a link from the box) if (edge.v !== id && edge.w !== id) { // Any edge where either the one of the nodes is decending to the cluster but not the other // if (decendants[id].indexOf(edge.v) < 0 && decendants[id].indexOf(edge.w) < 0) { const d1 = isDecendant(edge.v, id); const d2 = isDecendant(edge.w, id); // d1 xor d2 - if either d1 is true and d2 is false or the other way around if (d1 ^ d2) { log.warn('Edge: ', edge, ' leaves cluster ', id); log.warn('Decendants of XXX ', id, ': ', decendants[id]); clusterDb[id].externalConnections = true; } } }); } else { log.debug('Not a cluster ', id, decendants); } }); // For clusters with incoming and/or outgoing edges translate those edges to a real node // in the cluster in order to fake the edge graph.edges().forEach(function (e) { const edge = graph.edge(e); log.warn('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(e)); log.warn('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(graph.edge(e))); let v = e.v; let w = e.w; // Check if link is either from or to a cluster log.warn( 'Fix XXX', clusterDb, 'ids:', e.v, e.w, 'Translateing: ', clusterDb[e.v], ' --- ', clusterDb[e.w] ); if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { log.warn('Fixing and trixing link to self - removing XXX', e.v, e.w, e.name); log.warn('Fixing and trixing - removing XXX', e.v, e.w, e.name); v = getAnchorId(e.v); w = getAnchorId(e.w); graph.removeEdge(e.v, e.w, e.name); const specialId = e.w + '---' + e.v; graph.setNode(specialId, { domId: specialId, id: specialId, labelStyle: '', labelText: edge.label, padding: 0, shape: 'labelRect', style: '', }); const edge1 = JSON.parse(JSON.stringify(edge)); const edge2 = JSON.parse(JSON.stringify(edge)); edge1.label = ''; edge1.arrowTypeEnd = 'none'; edge2.label = ''; edge1.fromCluster = e.v; edge2.toCluster = e.v; graph.setEdge(v, specialId, edge1, e.name + '-cyclic-special'); graph.setEdge(specialId, w, edge2, e.name + '-cyclic-special'); } else if (clusterDb[e.v] || clusterDb[e.w]) { log.warn('Fixing and trixing - removing XXX', e.v, e.w, e.name); v = getAnchorId(e.v); w = getAnchorId(e.w); graph.removeEdge(e.v, e.w, e.name); if (v !== e.v) edge.fromCluster = e.v; if (w !== e.w) edge.toCluster = e.w; log.warn('Fix Replacing with XXX', v, w, e.name); graph.setEdge(v, w, edge, e.name); } }); log.warn('Adjusted Graph', graphlib.json.write(graph)); extractor(graph, 0); log.trace(clusterDb); // Remove references to extracted cluster // graph.edges().forEach(edge => { // if (isDecendant(edge.v, clusterId) || isDecendant(edge.w, clusterId)) { // graph.removeEdge(edge); // } // }); }; export const extractor = (graph, depth) => { log.warn('extractor - ', depth, graphlib.json.write(graph), graph.children('D')); if (depth > 10) { log.error('Bailing out'); return; } // For clusters without incoming and/or outgoing edges, create a new cluster-node // containing the nodes and edges in the custer in a new graph // for (let i = 0;) let nodes = graph.nodes(); let hasChildren = false; for (let i = 0; i < nodes.length; i++) { const node = nodes[i]; const children = graph.children(node); hasChildren = hasChildren || children.length > 0; } if (!hasChildren) { log.debug('Done, no node has children', graph.nodes()); return; } // const clusters = Object.keys(clusterDb); // clusters.forEach(clusterId => { log.debug('Nodes = ', nodes, depth); for (let i = 0; i < nodes.length; i++) { const node = nodes[i]; log.debug( 'Extracting node', node, clusterDb, clusterDb[node] && !clusterDb[node].externalConnections, !graph.parent(node), graph.node(node), graph.children('D'), ' Depth ', depth ); // Note that the node might have been removed after the Object.keys call so better check // that it still is in the game if (!clusterDb[node]) { // Skip if the node is not a cluster log.debug('Not a cluster', node, depth); // break; } else if ( !clusterDb[node].externalConnections && // !graph.parent(node) && graph.children(node) && graph.children(node).length > 0 ) { log.warn( 'Cluster without external connections, without a parent and with children', node, depth ); const graphSettings = graph.graph(); let dir = graphSettings.rankdir === 'TB' ? 'LR' : 'TB'; if (clusterDb[node]) { if (clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { dir = clusterDb[node].clusterData.dir; log.warn('Fixing dir', clusterDb[node].clusterData.dir, dir); } } const clusterGraph = new graphlib.Graph({ multigraph: true, compound: true, }) .setGraph({ rankdir: dir, // Todo: set proper spacing nodesep: 50, ranksep: 50, marginx: 8, marginy: 8, }) .setDefaultEdgeLabel(function () { return {}; }); log.warn('Old graph before copy', graphlib.json.write(graph)); copy(node, graph, clusterGraph, node); graph.setNode(node, { clusterNode: true, id: node, clusterData: clusterDb[node].clusterData, labelText: clusterDb[node].labelText, graph: clusterGraph, }); log.warn('New graph after copy node: (', node, ')', graphlib.json.write(clusterGraph)); log.debug('Old graph after copy', graphlib.json.write(graph)); } else { log.warn( 'Cluster ** ', node, ' **not meeting the criteria !externalConnections:', !clusterDb[node].externalConnections, ' no parent: ', !graph.parent(node), ' children ', graph.children(node) && graph.children(node).length > 0, graph.children('D'), depth ); log.debug(clusterDb); } } nodes = graph.nodes(); log.warn('New list of nodes', nodes); for (let i = 0; i < nodes.length; i++) { const node = nodes[i]; const data = graph.node(node); log.warn(' Now next level', node, data); if (data.clusterNode) { extractor(data.graph, depth + 1); } } }; const sorter = (graph, nodes) => { if (nodes.length === 0) return []; let result = Object.assign(nodes); nodes.forEach((node) => { const children = graph.children(node); const sorted = sorter(graph, children); result = result.concat(sorted); }); return result; }; export const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.spec.js000066400000000000000000000351541433273745700311140ustar00rootroot00000000000000import graphlib from 'graphlib'; import dagre from 'dagre'; import { validate, adjustClustersAndEdges, extractDecendants, sortNodesByHierarchy, } from './mermaid-graphlib'; import { setLogLevel, log } from '../logger'; describe('Graphlib decorations', () => { let g; beforeEach(function () { setLogLevel(1); g = new graphlib.Graph({ multigraph: true, compound: true, }); g.setGraph({ rankdir: 'TB', nodesep: 10, ranksep: 10, marginx: 8, marginy: 8, }); g.setDefaultEdgeLabel(function () { return {}; }); }); describe('validate', function () { it('Validate should detect edges between clusters', function () { /* subgraph C1 a --> b end subgraph C2 c end C1 --> C2 */ g.setNode('a', { data: 1 }); g.setNode('b', { data: 2 }); g.setNode('c', { data: 3 }); g.setParent('a', 'C1'); g.setParent('b', 'C1'); g.setParent('c', 'C2'); g.setEdge('a', 'b'); g.setEdge('C1', 'C2'); expect(validate(g)).toBe(false); }); it('Validate should not detect edges between clusters after adjustment', function () { /* subgraph C1 a --> b end subgraph C2 c end C1 --> C2 */ g.setNode('a', {}); g.setNode('b', {}); g.setNode('c', {}); g.setParent('a', 'C1'); g.setParent('b', 'C1'); g.setParent('c', 'C2'); g.setEdge('a', 'b'); g.setEdge('C1', 'C2'); adjustClustersAndEdges(g); log.info(g.edges()); expect(validate(g)).toBe(true); }); it('Validate should detect edges between clusters and transform clusters GLB4', function () { /* a --> b subgraph C1 subgraph C2 a end b end C1 --> c */ g.setNode('a', { data: 1 }); g.setNode('b', { data: 2 }); g.setNode('c', { data: 3 }); g.setNode('C1', { data: 4 }); g.setNode('C2', { data: 5 }); g.setParent('a', 'C2'); g.setParent('b', 'C1'); g.setParent('C2', 'C1'); g.setEdge('a', 'b', { name: 'C1-internal-link' }); g.setEdge('C1', 'c', { name: 'C1-external-link' }); adjustClustersAndEdges(g); log.info(g.nodes()); expect(g.nodes().length).toBe(2); expect(validate(g)).toBe(true); }); it('Validate should detect edges between clusters and transform clusters GLB5', function () { /* a --> b subgraph C1 a end subgraph C2 b end C1 --> */ g.setNode('a', { data: 1 }); g.setNode('b', { data: 2 }); g.setParent('a', 'C1'); g.setParent('b', 'C2'); // g.setEdge('a', 'b', { name: 'C1-internal-link' }); g.setEdge('C1', 'C2', { name: 'C1-external-link' }); log.info(g.nodes()); adjustClustersAndEdges(g); log.info(g.nodes()); expect(g.nodes().length).toBe(2); expect(validate(g)).toBe(true); }); it('adjustClustersAndEdges GLB6', function () { /* subgraph C1 a end C1 --> b */ g.setNode('a', { data: 1 }); g.setNode('b', { data: 2 }); g.setNode('C1', { data: 3 }); g.setParent('a', 'C1'); g.setEdge('C1', 'b', { data: 'link1' }, '1'); // log.info(g.edges()) adjustClustersAndEdges(g); log.info(g.edges()); expect(g.nodes()).toEqual(['b', 'C1']); expect(g.edges().length).toBe(1); expect(validate(g)).toBe(true); expect(g.node('C1').clusterNode).toBe(true); const C1Graph = g.node('C1').graph; expect(C1Graph.nodes()).toEqual(['a']); }); it('adjustClustersAndEdges GLB7', function () { /* subgraph C1 a end C1 --> b C1 --> c */ g.setNode('a', { data: 1 }); g.setNode('b', { data: 2 }); g.setNode('c', { data: 3 }); g.setParent('a', 'C1'); g.setNode('C1', { data: 4 }); g.setEdge('C1', 'b', { data: 'link1' }, '1'); g.setEdge('C1', 'c', { data: 'link2' }, '2'); log.info(g.node('C1')); adjustClustersAndEdges(g); log.info(g.edges()); expect(g.nodes()).toEqual(['b', 'c', 'C1']); expect(g.nodes().length).toBe(3); expect(g.edges().length).toBe(2); expect(g.edges().length).toBe(2); const edgeData = g.edge(g.edges()[1]); expect(edgeData.data).toBe('link2'); expect(validate(g)).toBe(true); const C1Graph = g.node('C1').graph; expect(C1Graph.nodes()).toEqual(['a']); }); it('adjustClustersAndEdges GLB8', function () { /* subgraph A a end subgraph B b end subgraph C c end A --> B A --> C */ g.setNode('a', { data: 1 }); g.setNode('b', { data: 2 }); g.setNode('c', { data: 3 }); g.setParent('a', 'A'); g.setParent('b', 'B'); g.setParent('c', 'C'); g.setEdge('A', 'B', { data: 'link1' }, '1'); g.setEdge('A', 'C', { data: 'link2' }, '2'); // log.info(g.edges()) adjustClustersAndEdges(g); expect(g.nodes()).toEqual(['A', 'B', 'C']); expect(g.edges().length).toBe(2); expect(g.edges().length).toBe(2); const edgeData = g.edge(g.edges()[1]); expect(edgeData.data).toBe('link2'); expect(validate(g)).toBe(true); const CGraph = g.node('C').graph; expect(CGraph.nodes()).toEqual(['c']); }); it('adjustClustersAndEdges the extracted graphs shall contain the correct data GLB10', function () { /* subgraph C subgraph D d end end */ g.setNode('C', { data: 1 }); g.setNode('D', { data: 2 }); g.setNode('d', { data: 3 }); g.setParent('d', 'D'); g.setParent('D', 'C'); // log.info('Graph before', g.node('D')) // log.info('Graph before', graphlib.json.write(g)) adjustClustersAndEdges(g); // log.info('Graph after', graphlib.json.write(g), g.node('C').graph) const CGraph = g.node('C').graph; const DGraph = CGraph.node('D').graph; expect(CGraph.nodes()).toEqual(['D']); expect(DGraph.nodes()).toEqual(['d']); expect(g.nodes()).toEqual(['C']); expect(g.nodes().length).toBe(1); }); it('adjustClustersAndEdges the extracted graphs shall contain the correct data GLB11', function () { /* subgraph A a end subgraph B b end subgraph C subgraph D d end end A --> B A --> C */ g.setNode('C', { data: 1 }); g.setNode('D', { data: 2 }); g.setNode('d', { data: 3 }); g.setNode('B', { data: 4 }); g.setNode('b', { data: 5 }); g.setNode('A', { data: 6 }); g.setNode('a', { data: 7 }); g.setParent('a', 'A'); g.setParent('b', 'B'); g.setParent('d', 'D'); g.setParent('D', 'C'); g.setEdge('A', 'B', { data: 'link1' }, '1'); g.setEdge('A', 'C', { data: 'link2' }, '2'); log.info('Graph before', g.node('D')); log.info('Graph before', graphlib.json.write(g)); adjustClustersAndEdges(g); log.trace('Graph after', graphlib.json.write(g)); expect(g.nodes()).toEqual(['C', 'B', 'A']); expect(g.nodes().length).toBe(3); expect(g.edges().length).toBe(2); const AGraph = g.node('A').graph; const BGraph = g.node('B').graph; const CGraph = g.node('C').graph; // log.info(CGraph.nodes()); const DGraph = CGraph.node('D').graph; // log.info('DG', CGraph.children('D')); log.info('A', AGraph.nodes()); expect(AGraph.nodes().length).toBe(1); expect(AGraph.nodes()).toEqual(['a']); log.trace('Nodes', BGraph.nodes()); expect(BGraph.nodes().length).toBe(1); expect(BGraph.nodes()).toEqual(['b']); expect(CGraph.nodes()).toEqual(['D']); expect(CGraph.nodes().length).toEqual(1); expect(AGraph.edges().length).toBe(0); expect(BGraph.edges().length).toBe(0); expect(CGraph.edges().length).toBe(0); expect(DGraph.nodes()).toEqual(['d']); expect(DGraph.edges().length).toBe(0); // expect(CGraph.node('D')).toEqual({ data: 2 }); expect(g.edges().length).toBe(2); // expect(g.edges().length).toBe(2); // const edgeData = g.edge(g.edges()[1]); // expect(edgeData.data).toBe('link2'); // expect(validate(g)).toBe(true); }); it('adjustClustersAndEdges the extracted graphs shall contain the correct links GLB20', function () { /* a --> b subgraph b [Test] c --> d -->e end */ g.setNode('a', { data: 1 }); g.setNode('b', { data: 2 }); g.setNode('c', { data: 3 }); g.setNode('d', { data: 3 }); g.setNode('e', { data: 3 }); g.setParent('c', 'b'); g.setParent('d', 'b'); g.setParent('e', 'b'); g.setEdge('a', 'b', { data: 'link1' }, '1'); g.setEdge('c', 'd', { data: 'link2' }, '2'); g.setEdge('d', 'e', { data: 'link2' }, '2'); log.info('Graph before', graphlib.json.write(g)); adjustClustersAndEdges(g); const bGraph = g.node('b').graph; // log.trace('Graph after', graphlib.json.write(g)) log.info('Graph after', graphlib.json.write(bGraph)); expect(bGraph.nodes().length).toBe(3); expect(bGraph.edges().length).toBe(2); }); it('adjustClustersAndEdges the extracted graphs shall contain the correct links GLB21', function () { /* state a { state b { state c { e } } } */ g.setNode('a', { data: 1 }); g.setNode('b', { data: 2 }); g.setNode('c', { data: 3 }); g.setNode('e', { data: 3 }); g.setParent('b', 'a'); g.setParent('c', 'b'); g.setParent('e', 'c'); log.info('Graph before', graphlib.json.write(g)); adjustClustersAndEdges(g); const aGraph = g.node('a').graph; const bGraph = aGraph.node('b').graph; log.info('Graph after', graphlib.json.write(aGraph)); const cGraph = bGraph.node('c').graph; // log.trace('Graph after', graphlib.json.write(g)) expect(aGraph.nodes().length).toBe(1); expect(bGraph.nodes().length).toBe(1); expect(cGraph.nodes().length).toBe(1); expect(bGraph.edges().length).toBe(0); }); }); it('adjustClustersAndEdges should handle nesting GLB77', function () { /* flowchart TB subgraph A b-->B a-->c end subgraph B c end */ const exportedGraph = JSON.parse( '{"options":{"directed":true,"multigraph":true,"compound":true},"nodes":[{"v":"A","value":{"labelStyle":"","shape":"rect","labelText":"A","rx":0,"ry":0,"class":"default","style":"","id":"A","width":500,"type":"group","padding":15}},{"v":"B","value":{"labelStyle":"","shape":"rect","labelText":"B","rx":0,"ry":0,"class":"default","style":"","id":"B","width":500,"type":"group","padding":15},"parent":"A"},{"v":"b","value":{"labelStyle":"","shape":"rect","labelText":"b","rx":0,"ry":0,"class":"default","style":"","id":"b","padding":15},"parent":"A"},{"v":"c","value":{"labelStyle":"","shape":"rect","labelText":"c","rx":0,"ry":0,"class":"default","style":"","id":"c","padding":15},"parent":"B"},{"v":"a","value":{"labelStyle":"","shape":"rect","labelText":"a","rx":0,"ry":0,"class":"default","style":"","id":"a","padding":15},"parent":"A"}],"edges":[{"v":"b","w":"B","name":"1","value":{"minlen":1,"arrowhead":"normal","arrowTypeStart":"arrow_open","arrowTypeEnd":"arrow_point","thickness":"normal","pattern":"solid","style":"fill:none","labelStyle":"","arrowheadStyle":"fill: #333","labelpos":"c","labelType":"text","label":"","id":"L-b-B","classes":"flowchart-link LS-b LE-B"}},{"v":"a","w":"c","name":"2","value":{"minlen":1,"arrowhead":"normal","arrowTypeStart":"arrow_open","arrowTypeEnd":"arrow_point","thickness":"normal","pattern":"solid","style":"fill:none","labelStyle":"","arrowheadStyle":"fill: #333","labelpos":"c","labelType":"text","label":"","id":"L-a-c","classes":"flowchart-link LS-a LE-c"}}],"value":{"rankdir":"TB","nodesep":50,"ranksep":50,"marginx":8,"marginy":8}}' ); const gr = graphlib.json.read(exportedGraph); log.info('Graph before', graphlib.json.write(gr)); adjustClustersAndEdges(gr); const aGraph = gr.node('A').graph; const bGraph = aGraph.node('B').graph; log.info('Graph after', graphlib.json.write(aGraph)); // log.trace('Graph after', graphlib.json.write(g)) expect(aGraph.parent('c')).toBe('B'); expect(aGraph.parent('B')).toBe(undefined); }); }); describe('extractDecendants', function () { let g; beforeEach(function () { setLogLevel(1); g = new graphlib.Graph({ multigraph: true, compound: true, }); g.setGraph({ rankdir: 'TB', nodesep: 10, ranksep: 10, marginx: 8, marginy: 8, }); g.setDefaultEdgeLabel(function () { return {}; }); }); it('Simple case of one level decendants GLB9', function () { /* subgraph A a end subgraph B b end subgraph C c end A --> B A --> C */ g.setNode('a', { data: 1 }); g.setNode('b', { data: 2 }); g.setNode('c', { data: 3 }); g.setParent('a', 'A'); g.setParent('b', 'B'); g.setParent('c', 'C'); g.setEdge('A', 'B', { data: 'link1' }, '1'); g.setEdge('A', 'C', { data: 'link2' }, '2'); // log.info(g.edges()) const d1 = extractDecendants('A', g); const d2 = extractDecendants('B', g); const d3 = extractDecendants('C', g); expect(d1).toEqual(['a']); expect(d2).toEqual(['b']); expect(d3).toEqual(['c']); }); }); describe('sortNodesByHierarchy', function () { let g; beforeEach(function () { setLogLevel(1); g = new graphlib.Graph({ multigraph: true, compound: true, }); g.setGraph({ rankdir: 'TB', nodesep: 10, ranksep: 10, marginx: 8, marginy: 8, }); g.setDefaultEdgeLabel(function () { return {}; }); }); it('should sort proper en nodes are in reverse order', function () { /* a -->b subgraph B b end subgraph A B end */ g.setNode('a', { data: 1 }); g.setNode('b', { data: 2 }); g.setParent('b', 'B'); g.setParent('B', 'A'); g.setEdge('a', 'b', '1'); expect(sortNodesByHierarchy(g)).toEqual(['a', 'A', 'B', 'b']); }); it('should sort proper en nodes are in correct order', function () { /* a -->b subgraph B b end subgraph A B end */ g.setNode('a', { data: 1 }); g.setParent('B', 'A'); g.setParent('b', 'B'); g.setNode('b', { data: 2 }); g.setEdge('a', 'b', '1'); expect(sortNodesByHierarchy(g)).toEqual(['a', 'A', 'B', 'b']); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/nodes.js000066400000000000000000000707251433273745700260720ustar00rootroot00000000000000import { select } from 'd3'; import { log } from '../logger'; import { labelHelper, updateNodeBounds, insertPolygonShape } from './shapes/util'; import { getConfig } from '../config'; import intersect from './intersect/index.js'; import createLabel from './createLabel'; import note from './shapes/note'; import { parseMember } from '../diagrams/class/svgDraw'; import { evaluate } from '../diagrams/common/common'; const question = (parent, node) => { const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true); const w = bbox.width + node.padding; const h = bbox.height + node.padding; const s = w + h; const points = [ { x: s / 2, y: 0 }, { x: s, y: -s / 2 }, { x: s / 2, y: -s }, { x: 0, y: -s / 2 }, ]; log.info('Question main (Circle)'); const questionElem = insertPolygonShape(shapeSvg, s, s, points); questionElem.attr('style', node.style); updateNodeBounds(node, questionElem); node.intersect = function (point) { log.warn('Intersect called'); return intersect.polygon(node, points, point); }; return shapeSvg; }; const choice = (parent, node) => { const shapeSvg = parent .insert('g') .attr('class', 'node default') .attr('id', node.domId || node.id); const s = 28; const points = [ { x: 0, y: s / 2 }, { x: s / 2, y: 0 }, { x: 0, y: -s / 2 }, { x: -s / 2, y: 0 }, ]; const choice = shapeSvg.insert('polygon', ':first-child').attr( 'points', points .map(function (d) { return d.x + ',' + d.y; }) .join(' ') ); // center the circle around its coordinate choice.attr('class', 'state-start').attr('r', 7).attr('width', 28).attr('height', 28); node.width = 28; node.height = 28; node.intersect = function (point) { return intersect.circle(node, 14, point); }; return shapeSvg; }; const hexagon = (parent, node) => { const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true); const f = 4; const h = bbox.height + node.padding; const m = h / f; const w = bbox.width + 2 * m + node.padding; const points = [ { x: m, y: 0 }, { x: w - m, y: 0 }, { x: w, y: -h / 2 }, { x: w - m, y: -h }, { x: m, y: -h }, { x: 0, y: -h / 2 }, ]; const hex = insertPolygonShape(shapeSvg, w, h, points); hex.attr('style', node.style); updateNodeBounds(node, hex); node.intersect = function (point) { return intersect.polygon(node, points, point); }; return shapeSvg; }; const rect_left_inv_arrow = (parent, node) => { const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true); const w = bbox.width + node.padding; const h = bbox.height + node.padding; const points = [ { x: -h / 2, y: 0 }, { x: w, y: 0 }, { x: w, y: -h }, { x: -h / 2, y: -h }, { x: 0, y: -h / 2 }, ]; const el = insertPolygonShape(shapeSvg, w, h, points); el.attr('style', node.style); node.width = w + h; node.height = h; node.intersect = function (point) { return intersect.polygon(node, points, point); }; return shapeSvg; }; const lean_right = (parent, node) => { const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true); const w = bbox.width + node.padding; const h = bbox.height + node.padding; const points = [ { x: (-2 * h) / 6, y: 0 }, { x: w - h / 6, y: 0 }, { x: w + (2 * h) / 6, y: -h }, { x: h / 6, y: -h }, ]; const el = insertPolygonShape(shapeSvg, w, h, points); el.attr('style', node.style); updateNodeBounds(node, el); node.intersect = function (point) { return intersect.polygon(node, points, point); }; return shapeSvg; }; const lean_left = (parent, node) => { const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true); const w = bbox.width + node.padding; const h = bbox.height + node.padding; const points = [ { x: (2 * h) / 6, y: 0 }, { x: w + h / 6, y: 0 }, { x: w - (2 * h) / 6, y: -h }, { x: -h / 6, y: -h }, ]; const el = insertPolygonShape(shapeSvg, w, h, points); el.attr('style', node.style); updateNodeBounds(node, el); node.intersect = function (point) { return intersect.polygon(node, points, point); }; return shapeSvg; }; const trapezoid = (parent, node) => { const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true); const w = bbox.width + node.padding; const h = bbox.height + node.padding; const points = [ { x: (-2 * h) / 6, y: 0 }, { x: w + (2 * h) / 6, y: 0 }, { x: w - h / 6, y: -h }, { x: h / 6, y: -h }, ]; const el = insertPolygonShape(shapeSvg, w, h, points); el.attr('style', node.style); updateNodeBounds(node, el); node.intersect = function (point) { return intersect.polygon(node, points, point); }; return shapeSvg; }; const inv_trapezoid = (parent, node) => { const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true); const w = bbox.width + node.padding; const h = bbox.height + node.padding; const points = [ { x: h / 6, y: 0 }, { x: w - h / 6, y: 0 }, { x: w + (2 * h) / 6, y: -h }, { x: (-2 * h) / 6, y: -h }, ]; const el = insertPolygonShape(shapeSvg, w, h, points); el.attr('style', node.style); updateNodeBounds(node, el); node.intersect = function (point) { return intersect.polygon(node, points, point); }; return shapeSvg; }; const rect_right_inv_arrow = (parent, node) => { const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true); const w = bbox.width + node.padding; const h = bbox.height + node.padding; const points = [ { x: 0, y: 0 }, { x: w + h / 2, y: 0 }, { x: w, y: -h / 2 }, { x: w + h / 2, y: -h }, { x: 0, y: -h }, ]; const el = insertPolygonShape(shapeSvg, w, h, points); el.attr('style', node.style); updateNodeBounds(node, el); node.intersect = function (point) { return intersect.polygon(node, points, point); }; return shapeSvg; }; const cylinder = (parent, node) => { const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true); const w = bbox.width + node.padding; const rx = w / 2; const ry = rx / (2.5 + w / 50); const h = bbox.height + ry + node.padding; const shape = 'M 0,' + ry + ' a ' + rx + ',' + ry + ' 0,0,0 ' + w + ' 0 a ' + rx + ',' + ry + ' 0,0,0 ' + -w + ' 0 l 0,' + h + ' a ' + rx + ',' + ry + ' 0,0,0 ' + w + ' 0 l 0,' + -h; const el = shapeSvg .attr('label-offset-y', ry) .insert('path', ':first-child') .attr('style', node.style) .attr('d', shape) .attr('transform', 'translate(' + -w / 2 + ',' + -(h / 2 + ry) + ')'); updateNodeBounds(node, el); node.intersect = function (point) { const pos = intersect.rect(node, point); const x = pos.x - node.x; if ( rx != 0 && (Math.abs(x) < node.width / 2 || (Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) ) { // ellipsis equation: x*x / a*a + y*y / b*b = 1 // solve for y to get adjustion value for pos.y let y = ry * ry * (1 - (x * x) / (rx * rx)); if (y != 0) y = Math.sqrt(y); y = ry - y; if (point.y - node.y > 0) y = -y; pos.y += y; } return pos; }; return shapeSvg; }; const rect = (parent, node) => { const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, 'node ' + node.classes, true); log.trace('Classes = ', node.classes); // add the rect const rect = shapeSvg.insert('rect', ':first-child'); const totalWidth = bbox.width + node.padding; const totalHeight = bbox.height + node.padding; rect .attr('class', 'basic label-container') .attr('style', node.style) .attr('rx', node.rx) .attr('ry', node.ry) .attr('x', -bbox.width / 2 - halfPadding) .attr('y', -bbox.height / 2 - halfPadding) .attr('width', totalWidth) .attr('height', totalHeight); if (node.props) { const propKeys = new Set(Object.keys(node.props)); if (node.props.borders) { applyNodePropertyBorders(rect, node.props.borders, totalWidth, totalHeight); propKeys.delete('borders'); } propKeys.forEach((propKey) => { log.warn(`Unknown node property ${propKey}`); }); } updateNodeBounds(node, rect); node.intersect = function (point) { return intersect.rect(node, point); }; return shapeSvg; }; const labelRect = (parent, node) => { const { shapeSvg } = labelHelper(parent, node, 'label', true); log.trace('Classes = ', node.classes); // add the rect const rect = shapeSvg.insert('rect', ':first-child'); // Hide the rect we are only after the label const totalWidth = 0; const totalHeight = 0; rect.attr('width', totalWidth).attr('height', totalHeight); shapeSvg.attr('class', 'label edgeLabel'); if (node.props) { const propKeys = new Set(Object.keys(node.props)); if (node.props.borders) { applyNodePropertyBorders(rect, node.props.borders, totalWidth, totalHeight); propKeys.delete('borders'); } propKeys.forEach((propKey) => { log.warn(`Unknown node property ${propKey}`); }); } updateNodeBounds(node, rect); node.intersect = function (point) { return intersect.rect(node, point); }; return shapeSvg; }; /** * @param rect * @param borders * @param totalWidth * @param totalHeight */ function applyNodePropertyBorders(rect, borders, totalWidth, totalHeight) { const strokeDashArray = []; const addBorder = (length) => { strokeDashArray.push(length); strokeDashArray.push(0); }; const skipBorder = (length) => { strokeDashArray.push(0); strokeDashArray.push(length); }; if (borders.includes('t')) { log.debug('add top border'); addBorder(totalWidth); } else { skipBorder(totalWidth); } if (borders.includes('r')) { log.debug('add right border'); addBorder(totalHeight); } else { skipBorder(totalHeight); } if (borders.includes('b')) { log.debug('add bottom border'); addBorder(totalWidth); } else { skipBorder(totalWidth); } if (borders.includes('l')) { log.debug('add left border'); addBorder(totalHeight); } else { skipBorder(totalHeight); } rect.attr('stroke-dasharray', strokeDashArray.join(' ')); } const rectWithTitle = (parent, node) => { // const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, 'node ' + node.classes); let classes; if (!node.classes) { classes = 'node default'; } else { classes = 'node ' + node.classes; } // Add outer g element const shapeSvg = parent .insert('g') .attr('class', classes) .attr('id', node.domId || node.id); // Create the title label and insert it after the rect const rect = shapeSvg.insert('rect', ':first-child'); // const innerRect = shapeSvg.insert('rect'); const innerLine = shapeSvg.insert('line'); const label = shapeSvg.insert('g').attr('class', 'label'); const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; // const text2 = typeof text2prim === 'object' ? text2prim[0] : text2prim; let title = ''; if (typeof text2 === 'object') { title = text2[0]; } else { title = text2; } log.info('Label text abc79', title, text2, typeof text2 === 'object'); const text = label.node().appendChild(createLabel(title, node.labelStyle, true, true)); let bbox = { width: 0, height: 0 }; if (evaluate(getConfig().flowchart.htmlLabels)) { const div = text.children[0]; const dv = select(text); bbox = div.getBoundingClientRect(); dv.attr('width', bbox.width); dv.attr('height', bbox.height); } log.info('Text 2', text2); const textRows = text2.slice(1, text2.length); let titleBox = text.getBBox(); const descr = label .node() .appendChild( createLabel(textRows.join ? textRows.join('
') : textRows, node.labelStyle, true, true) ); if (evaluate(getConfig().flowchart.htmlLabels)) { const div = descr.children[0]; const dv = select(descr); bbox = div.getBoundingClientRect(); dv.attr('width', bbox.width); dv.attr('height', bbox.height); } // bbox = label.getBBox(); // log.info(descr); const halfPadding = node.padding / 2; select(descr).attr( 'transform', 'translate( ' + // (titleBox.width - bbox.width) / 2 + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ', ' + (titleBox.height + halfPadding + 5) + ')' ); select(text).attr( 'transform', 'translate( ' + // (titleBox.width - bbox.width) / 2 + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ', ' + 0 + ')' ); // Get the size of the label // Bounding box for title and text bbox = label.node().getBBox(); // Center the label label.attr( 'transform', 'translate(' + -bbox.width / 2 + ', ' + (-bbox.height / 2 - halfPadding + 3) + ')' ); rect .attr('class', 'outer title-state') .attr('x', -bbox.width / 2 - halfPadding) .attr('y', -bbox.height / 2 - halfPadding) .attr('width', bbox.width + node.padding) .attr('height', bbox.height + node.padding); innerLine .attr('class', 'divider') .attr('x1', -bbox.width / 2 - halfPadding) .attr('x2', bbox.width / 2 + halfPadding) .attr('y1', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding) .attr('y2', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); updateNodeBounds(node, rect); node.intersect = function (point) { return intersect.rect(node, point); }; return shapeSvg; }; const stadium = (parent, node) => { const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true); const h = bbox.height + node.padding; const w = bbox.width + h / 4 + node.padding; // add the rect const rect = shapeSvg .insert('rect', ':first-child') .attr('style', node.style) .attr('rx', h / 2) .attr('ry', h / 2) .attr('x', -w / 2) .attr('y', -h / 2) .attr('width', w) .attr('height', h); updateNodeBounds(node, rect); node.intersect = function (point) { return intersect.rect(node, point); }; return shapeSvg; }; const circle = (parent, node) => { const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, undefined, true); const circle = shapeSvg.insert('circle', ':first-child'); // center the circle around its coordinate circle .attr('style', node.style) .attr('rx', node.rx) .attr('ry', node.ry) .attr('r', bbox.width / 2 + halfPadding) .attr('width', bbox.width + node.padding) .attr('height', bbox.height + node.padding); log.info('Circle main'); updateNodeBounds(node, circle); node.intersect = function (point) { log.info('Circle intersect', node, bbox.width / 2 + halfPadding, point); return intersect.circle(node, bbox.width / 2 + halfPadding, point); }; return shapeSvg; }; const doublecircle = (parent, node) => { const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, undefined, true); const gap = 5; const circleGroup = shapeSvg.insert('g', ':first-child'); const outerCircle = circleGroup.insert('circle'); const innerCircle = circleGroup.insert('circle'); // center the circle around its coordinate outerCircle .attr('style', node.style) .attr('rx', node.rx) .attr('ry', node.ry) .attr('r', bbox.width / 2 + halfPadding + gap) .attr('width', bbox.width + node.padding + gap * 2) .attr('height', bbox.height + node.padding + gap * 2); innerCircle .attr('style', node.style) .attr('rx', node.rx) .attr('ry', node.ry) .attr('r', bbox.width / 2 + halfPadding) .attr('width', bbox.width + node.padding) .attr('height', bbox.height + node.padding); log.info('DoubleCircle main'); updateNodeBounds(node, outerCircle); node.intersect = function (point) { log.info('DoubleCircle intersect', node, bbox.width / 2 + halfPadding + gap, point); return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point); }; return shapeSvg; }; const subroutine = (parent, node) => { const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true); const w = bbox.width + node.padding; const h = bbox.height + node.padding; const points = [ { x: 0, y: 0 }, { x: w, y: 0 }, { x: w, y: -h }, { x: 0, y: -h }, { x: 0, y: 0 }, { x: -8, y: 0 }, { x: w + 8, y: 0 }, { x: w + 8, y: -h }, { x: -8, y: -h }, { x: -8, y: 0 }, ]; const el = insertPolygonShape(shapeSvg, w, h, points); el.attr('style', node.style); updateNodeBounds(node, el); node.intersect = function (point) { return intersect.polygon(node, points, point); }; return shapeSvg; }; const start = (parent, node) => { const shapeSvg = parent .insert('g') .attr('class', 'node default') .attr('id', node.domId || node.id); const circle = shapeSvg.insert('circle', ':first-child'); // center the circle around its coordinate circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14); updateNodeBounds(node, circle); node.intersect = function (point) { return intersect.circle(node, 7, point); }; return shapeSvg; }; const forkJoin = (parent, node, dir) => { const shapeSvg = parent .insert('g') .attr('class', 'node default') .attr('id', node.domId || node.id); let width = 70; let height = 10; if (dir === 'LR') { width = 10; height = 70; } const shape = shapeSvg .append('rect') .attr('x', (-1 * width) / 2) .attr('y', (-1 * height) / 2) .attr('width', width) .attr('height', height) .attr('class', 'fork-join'); updateNodeBounds(node, shape); node.height = node.height + node.padding / 2; node.width = node.width + node.padding / 2; node.intersect = function (point) { return intersect.rect(node, point); }; return shapeSvg; }; const end = (parent, node) => { const shapeSvg = parent .insert('g') .attr('class', 'node default') .attr('id', node.domId || node.id); const innerCircle = shapeSvg.insert('circle', ':first-child'); const circle = shapeSvg.insert('circle', ':first-child'); circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14); innerCircle.attr('class', 'state-end').attr('r', 5).attr('width', 10).attr('height', 10); updateNodeBounds(node, circle); node.intersect = function (point) { return intersect.circle(node, 7, point); }; return shapeSvg; }; const class_box = (parent, node) => { const halfPadding = node.padding / 2; const rowPadding = 4; const lineHeight = 8; let classes; if (!node.classes) { classes = 'node default'; } else { classes = 'node ' + node.classes; } // Add outer g element const shapeSvg = parent .insert('g') .attr('class', classes) .attr('id', node.domId || node.id); // Create the title label and insert it after the rect const rect = shapeSvg.insert('rect', ':first-child'); const topLine = shapeSvg.insert('line'); const bottomLine = shapeSvg.insert('line'); let maxWidth = 0; let maxHeight = rowPadding; const labelContainer = shapeSvg.insert('g').attr('class', 'label'); let verticalPos = 0; const hasInterface = node.classData.annotations && node.classData.annotations[0]; // 1. Create the labels const interfaceLabelText = node.classData.annotations[0] ? '«' + node.classData.annotations[0] + '»' : ''; const interfaceLabel = labelContainer .node() .appendChild(createLabel(interfaceLabelText, node.labelStyle, true, true)); let interfaceBBox = interfaceLabel.getBBox(); if (evaluate(getConfig().flowchart.htmlLabels)) { const div = interfaceLabel.children[0]; const dv = select(interfaceLabel); interfaceBBox = div.getBoundingClientRect(); dv.attr('width', interfaceBBox.width); dv.attr('height', interfaceBBox.height); } if (node.classData.annotations[0]) { maxHeight += interfaceBBox.height + rowPadding; maxWidth += interfaceBBox.width; } let classTitleString = node.classData.id; if (node.classData.type !== undefined && node.classData.type !== '') { if (getConfig().flowchart.htmlLabels) { classTitleString += '<' + node.classData.type + '>'; } else { classTitleString += '<' + node.classData.type + '>'; } } const classTitleLabel = labelContainer .node() .appendChild(createLabel(classTitleString, node.labelStyle, true, true)); select(classTitleLabel).attr('class', 'classTitle'); let classTitleBBox = classTitleLabel.getBBox(); if (evaluate(getConfig().flowchart.htmlLabels)) { const div = classTitleLabel.children[0]; const dv = select(classTitleLabel); classTitleBBox = div.getBoundingClientRect(); dv.attr('width', classTitleBBox.width); dv.attr('height', classTitleBBox.height); } maxHeight += classTitleBBox.height + rowPadding; if (classTitleBBox.width > maxWidth) { maxWidth = classTitleBBox.width; } const classAttributes = []; node.classData.members.forEach((str) => { const parsedInfo = parseMember(str); let parsedText = parsedInfo.displayText; if (getConfig().flowchart.htmlLabels) { parsedText = parsedText.replace(//g, '>'); } const lbl = labelContainer .node() .appendChild( createLabel( parsedText, parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, true, true ) ); let bbox = lbl.getBBox(); if (evaluate(getConfig().flowchart.htmlLabels)) { const div = lbl.children[0]; const dv = select(lbl); bbox = div.getBoundingClientRect(); dv.attr('width', bbox.width); dv.attr('height', bbox.height); } if (bbox.width > maxWidth) { maxWidth = bbox.width; } maxHeight += bbox.height + rowPadding; classAttributes.push(lbl); }); maxHeight += lineHeight; const classMethods = []; node.classData.methods.forEach((str) => { const parsedInfo = parseMember(str); let displayText = parsedInfo.displayText; if (getConfig().flowchart.htmlLabels) { displayText = displayText.replace(//g, '>'); } const lbl = labelContainer .node() .appendChild( createLabel( displayText, parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, true, true ) ); let bbox = lbl.getBBox(); if (evaluate(getConfig().flowchart.htmlLabels)) { const div = lbl.children[0]; const dv = select(lbl); bbox = div.getBoundingClientRect(); dv.attr('width', bbox.width); dv.attr('height', bbox.height); } if (bbox.width > maxWidth) { maxWidth = bbox.width; } maxHeight += bbox.height + rowPadding; classMethods.push(lbl); }); maxHeight += lineHeight; // 2. Position the labels // position the interface label if (hasInterface) { let diffX = (maxWidth - interfaceBBox.width) / 2; select(interfaceLabel).attr( 'transform', 'translate( ' + ((-1 * maxWidth) / 2 + diffX) + ', ' + (-1 * maxHeight) / 2 + ')' ); verticalPos = interfaceBBox.height + rowPadding; } // Position the class title label let diffX = (maxWidth - classTitleBBox.width) / 2; select(classTitleLabel).attr( 'transform', 'translate( ' + ((-1 * maxWidth) / 2 + diffX) + ', ' + ((-1 * maxHeight) / 2 + verticalPos) + ')' ); verticalPos += classTitleBBox.height + rowPadding; topLine .attr('class', 'divider') .attr('x1', -maxWidth / 2 - halfPadding) .attr('x2', maxWidth / 2 + halfPadding) .attr('y1', -maxHeight / 2 - halfPadding + lineHeight + verticalPos) .attr('y2', -maxHeight / 2 - halfPadding + lineHeight + verticalPos); verticalPos += lineHeight; classAttributes.forEach((lbl) => { select(lbl).attr( 'transform', 'translate( ' + -maxWidth / 2 + ', ' + ((-1 * maxHeight) / 2 + verticalPos + lineHeight / 2) + ')' ); verticalPos += classTitleBBox.height + rowPadding; }); verticalPos += lineHeight; bottomLine .attr('class', 'divider') .attr('x1', -maxWidth / 2 - halfPadding) .attr('x2', maxWidth / 2 + halfPadding) .attr('y1', -maxHeight / 2 - halfPadding + lineHeight + verticalPos) .attr('y2', -maxHeight / 2 - halfPadding + lineHeight + verticalPos); verticalPos += lineHeight; classMethods.forEach((lbl) => { select(lbl).attr( 'transform', 'translate( ' + -maxWidth / 2 + ', ' + ((-1 * maxHeight) / 2 + verticalPos) + ')' ); verticalPos += classTitleBBox.height + rowPadding; }); // // let bbox; // if (evaluate(getConfig().flowchart.htmlLabels)) { // const div = interfaceLabel.children[0]; // const dv = select(interfaceLabel); // bbox = div.getBoundingClientRect(); // dv.attr('width', bbox.width); // dv.attr('height', bbox.height); // } // bbox = labelContainer.getBBox(); // log.info('Text 2', text2); // const textRows = text2.slice(1, text2.length); // let titleBox = text.getBBox(); // const descr = label // .node() // .appendChild(createLabel(textRows.join('
'), node.labelStyle, true, true)); // if (evaluate(getConfig().flowchart.htmlLabels)) { // const div = descr.children[0]; // const dv = select(descr); // bbox = div.getBoundingClientRect(); // dv.attr('width', bbox.width); // dv.attr('height', bbox.height); // } // // bbox = label.getBBox(); // // log.info(descr); // select(descr).attr( // 'transform', // 'translate( ' + // // (titleBox.width - bbox.width) / 2 + // (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + // ', ' + // (titleBox.height + halfPadding + 5) + // ')' // ); // select(text).attr( // 'transform', // 'translate( ' + // // (titleBox.width - bbox.width) / 2 + // (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + // ', ' + // 0 + // ')' // ); // // Get the size of the label // // Bounding box for title and text // bbox = label.node().getBBox(); // // Center the label // label.attr( // 'transform', // 'translate(' + -bbox.width / 2 + ', ' + (-bbox.height / 2 - halfPadding + 3) + ')' // ); rect .attr('class', 'outer title-state') .attr('x', -maxWidth / 2 - halfPadding) .attr('y', -(maxHeight / 2) - halfPadding) .attr('width', maxWidth + node.padding) .attr('height', maxHeight + node.padding); // innerLine // .attr('class', 'divider') // .attr('x1', -bbox.width / 2 - halfPadding) // .attr('x2', bbox.width / 2 + halfPadding) // .attr('y1', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding) // .attr('y2', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); updateNodeBounds(node, rect); node.intersect = function (point) { return intersect.rect(node, point); }; return shapeSvg; }; const shapes = { question, rect, labelRect, rectWithTitle, choice, circle, doublecircle, stadium, hexagon, rect_left_inv_arrow, lean_right, lean_left, trapezoid, inv_trapezoid, rect_right_inv_arrow, cylinder, start, end, note, subroutine, fork: forkJoin, join: forkJoin, class_box, }; let nodeElems = {}; export const insertNode = (elem, node, dir) => { let newEl; let el; // Add link when appropriate if (node.link) { let target; if (getConfig().securityLevel === 'sandbox') { target = '_top'; } else if (node.linkTarget) { target = node.linkTarget || '_blank'; } newEl = elem.insert('svg:a').attr('xlink:href', node.link).attr('target', target); el = shapes[node.shape](newEl, node, dir); } else { el = shapes[node.shape](elem, node, dir); newEl = el; } if (node.tooltip) { el.attr('title', node.tooltip); } if (node.class) { el.attr('class', 'node default ' + node.class); } nodeElems[node.id] = newEl; if (node.haveCallback) { nodeElems[node.id].attr('class', nodeElems[node.id].attr('class') + ' clickable'); } }; export const setNodeElem = (elem, node) => { nodeElems[node.id] = elem; }; export const clear = () => { nodeElems = {}; }; export const positionNode = (node) => { const el = nodeElems[node.id]; log.trace( 'Transforming node', node.diff, node, 'translate(' + (node.x - node.width / 2 - 5) + ', ' + node.width / 2 + ')' ); const padding = 8; const diff = node.diff || 0; if (node.clusterNode) { el.attr( 'transform', 'translate(' + (node.x + diff - node.width / 2) + ', ' + (node.y - node.height / 2 - padding) + ')' ); } else { el.attr('transform', 'translate(' + node.x + ', ' + node.y + ')'); } return diff; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/patterns.js000066400000000000000000000026711433273745700266150ustar00rootroot00000000000000/** Setup arrow head and define the marker. The result is appended to the svg. */ // import { log } from '../logger'; // Only add the number of markers that the diagram needs const insertPatterns = (elem, patternArray, type, id) => { patternArray.forEach((patternName) => { patterns[patternName](elem, type, id); }); }; { /* {' '} {' '} {' '} {' '} {' '} {' '} {' '} ; */ } const dots = (elem, type) => { elem .append('defs') .append('marker') .attr('id', type + '-barbEnd') .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 14) .attr('markerUnits', 0) .attr('orient', 'auto') .append('path') .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z'); }; // TODO rename the class diagram markers to something shape descriptive and semantic free const patterns = { dots, }; export default insertPatterns; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/shapes/000077500000000000000000000000001433273745700256745ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/shapes/note.js000066400000000000000000000014331433273745700272000ustar00rootroot00000000000000import { updateNodeBounds, labelHelper } from './util'; import { log } from '../../logger'; import intersect from '../intersect/index.js'; const note = (parent, node) => { const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, 'node ' + node.classes, true); log.info('Classes = ', node.classes); // add the rect const rect = shapeSvg.insert('rect', ':first-child'); rect .attr('rx', node.rx) .attr('ry', node.ry) .attr('x', -bbox.width / 2 - halfPadding) .attr('y', -bbox.height / 2 - halfPadding) .attr('width', bbox.width + node.padding) .attr('height', bbox.height + node.padding); updateNodeBounds(node, rect); node.intersect = function (point) { return intersect.rect(node, point); }; return shapeSvg; }; export default note; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/dagre-wrapper/shapes/util.js000066400000000000000000000042411433273745700272100ustar00rootroot00000000000000import createLabel from '../createLabel'; import { getConfig } from '../../config'; import { decodeEntities } from '../../mermaidAPI'; import { select } from 'd3'; import { evaluate, sanitizeText } from '../../diagrams/common/common'; export const labelHelper = (parent, node, _classes, isNode) => { let classes; if (!_classes) { classes = 'node default'; } else { classes = _classes; } // Add outer g element const shapeSvg = parent .insert('g') .attr('class', classes) .attr('id', node.domId || node.id); // Create the label and insert it after the rect const label = shapeSvg.insert('g').attr('class', 'label').attr('style', node.labelStyle); // Replace labelText with default value if undefined let labelText; if (typeof node.labelText === 'undefined') { labelText = ''; } else { labelText = typeof node.labelText === 'string' ? node.labelText : node.labelText[0]; } const text = label .node() .appendChild( createLabel( sanitizeText(decodeEntities(labelText), getConfig()), node.labelStyle, false, isNode ) ); // Get the size of the label let bbox = text.getBBox(); if (evaluate(getConfig().flowchart.htmlLabels)) { const div = text.children[0]; const dv = select(text); bbox = div.getBoundingClientRect(); dv.attr('width', bbox.width); dv.attr('height', bbox.height); } const halfPadding = node.padding / 2; // Center the label label.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')'); return { shapeSvg, bbox, halfPadding, label }; }; export const updateNodeBounds = (node, element) => { const bbox = element.node().getBBox(); node.width = bbox.width; node.height = bbox.height; }; /** * @param parent * @param w * @param h * @param points */ export function insertPolygonShape(parent, w, h, points) { return parent .insert('polygon', ':first-child') .attr( 'points', points .map(function (d) { return d.x + ',' + d.y; }) .join(' ') ) .attr('class', 'label-container') .attr('transform', 'translate(' + -w / 2 + ',' + h / 2 + ')'); } mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/defaultConfig.ts000066400000000000000000002016241433273745700250000ustar00rootroot00000000000000import theme from './themes'; import { MermaidConfig } from './config.type'; /** * **Configuration methods in Mermaid version 8.6.0 have been updated, to learn more[[click * here](8.6.0_docs.md)].** * * ## **What follows are config instructions for older versions** * * These are the default options which can be overridden with the initialization call like so: * * **Example 1:**

 mermaid.initialize({ flowchart:{ htmlLabels: false } }); 
* * **Example 2:**
  
* * A summary of all options and their defaults is found [here](#mermaidapi-configuration-defaults). * A description of each option follows below. * * @name Configuration */ const config: Partial = { /** * Theme , the CSS style sheet * * | Parameter | Description | Type | Required | Values | * | --------- | --------------- | ------ | -------- | ---------------------------------------------- | * | theme | Built in Themes | string | Optional | 'default', 'forest', 'dark', 'neutral', 'null' | * * **Notes:** To disable any pre-defined mermaid theme, use "null".
 "theme": "forest",
   * "themeCSS": ".node rect { fill: red; }" 
*/ theme: 'default', themeVariables: theme['default'].getThemeVariables(), themeCSS: undefined, /* **maxTextSize** - The maximum allowed size of the users text diagram */ maxTextSize: 50000, darkMode: false, /** * | Parameter | Description | Type | Required | Values | * | ---------- | ------------------------------------------------------ | ------ | -------- | --------------------------- | * | fontFamily | specifies the font to be used in the rendered diagrams | string | Required | Any Possible CSS FontFamily | * * **Notes:** Default value: '"trebuchet ms", verdana, arial, sans-serif;'. */ fontFamily: '"trebuchet ms", verdana, arial, sans-serif;', /** * | Parameter | Description | Type | Required | Values | * | --------- | ----------------------------------------------------- | ---------------- | -------- | --------------------------------------------- | * | logLevel | This option decides the amount of logging to be used. | string \| number | Required | 'trace','debug','info','warn','error','fatal' | * * **Notes:** * * - Trace: 0 * - Debug: 1 * - Info: 2 * - Warn: 3 * - Error: 4 * - Fatal: 5 (default) */ logLevel: 5, /** * | Parameter | Description | Type | Required | Values | * | ------------- | --------------------------------- | ------ | -------- | ------------------------------------------ | * | securityLevel | Level of trust for parsed diagram | string | Required | 'sandbox', 'strict', 'loose', 'antiscript' | * * **Notes**: * * - **strict**: (**default**) tags in text are encoded, click functionality is disabled * - **loose**: tags in text are allowed, click functionality is enabled * - **antiscript**: html tags in text are allowed, (only script element is removed), click * functionality is enabled * - **sandbox**: With this security level all rendering takes place in a sandboxed iframe. This * prevent any JavaScript from running in the context. This may hinder interactive functionality * of the diagram like scripts, popups in sequence diagram or links to other tabs/targets etc. */ securityLevel: 'strict', /** * | Parameter | Description | Type | Required | Values | * | ----------- | -------------------------------------------- | ------- | -------- | ----------- | * | startOnLoad | Dictates whether mermaid starts on Page load | boolean | Required | true, false | * * **Notes:** Default value: true */ startOnLoad: true, /** * | Parameter | Description | Type | Required | Values | * | ------------------- | ---------------------------------------------------------------------------- | ------- | -------- | ----------- | * | arrowMarkerAbsolute | Controls whether or arrow markers in html code are absolute paths or anchors | boolean | Required | true, false | * * **Notes**: * * This matters if you are using base tag settings. * * Default value: false */ arrowMarkerAbsolute: false, /** * This option controls which currentConfig keys are considered _secure_ and can only be changed * via call to mermaidAPI.initialize. Calls to mermaidAPI.reinitialize cannot make changes to the * `secure` keys in the current currentConfig. This prevents malicious graph directives from * overriding a site's default security. * * **Notes**: * * Default value: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize'] */ secure: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize'], /** * This option controls if the generated ids of nodes in the SVG are generated randomly or based * on a seed. If set to false, the IDs are generated based on the current date and thus are not * deterministic. This is the default behaviour. * * **Notes**: * * This matters if your files are checked into sourcecontrol e.g. git and should not change unless * content is changed. * * Default value: false */ deterministicIds: false, /** * This option is the optional seed for deterministic ids. if set to undefined but * deterministicIds is true, a simple number iterator is used. You can set this attribute to base * the seed on a static string. */ deterministicIDSeed: undefined, /** The object containing configurations specific for flowcharts */ flowchart: { /** * | Parameter | Description | Type | Required | Values | * | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ | * | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value | * * **Notes:** * * The amount of padding around the diagram as a whole so that embedded diagrams have margins, * expressed in pixels * * Default value: 8 */ diagramPadding: 8, /** * | Parameter | Description | Type | Required | Values | * | ---------- | -------------------------------------------------------------------------------------------- | ------- | -------- | ----------- | * | htmlLabels | Flag for setting whether or not a html tag should be used for rendering labels on the edges. | boolean | Required | true, false | * * **Notes:** Default value: true. */ htmlLabels: true, /** * | Parameter | Description | Type | Required | Values | * | ----------- | --------------------------------------------------- | ------- | -------- | ------------------- | * | nodeSpacing | Defines the spacing between nodes on the same level | Integer | Required | Any positive Number | * * **Notes:** * * Pertains to horizontal spacing for TB (top to bottom) or BT (bottom to top) graphs, and the * vertical spacing for LR as well as RL graphs.** * * Default value: 50 */ nodeSpacing: 50, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ----------------------------------------------------- | ------- | -------- | ------------------- | * | rankSpacing | Defines the spacing between nodes on different levels | Integer | Required | Any Positive Number | * * **Notes**: * * Pertains to vertical spacing for TB (top to bottom) or BT (bottom to top), and the horizontal * spacing for LR as well as RL graphs. * * Default value 50 */ rankSpacing: 50, /** * | Parameter | Description | Type | Required | Values | * | --------- | -------------------------------------------------- | ------ | -------- | ----------------------------- | * | curve | Defines how mermaid renders curves for flowcharts. | string | Required | 'basis', 'linear', 'cardinal' | * * **Notes:** * * Default Value: 'basis' */ curve: 'basis', // Only used in new experimental rendering // represents the padding between the labels and the shape padding: 15, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ----------- | ------- | -------- | ----------- | * | useMaxWidth | See notes | boolean | 4 | true, false | * * **Notes:** * * When this flag is set the height and width is set to 100% and is then scaling with the * available space if not the absolute space required is used. * * Default value: true */ useMaxWidth: true, /** * | Parameter | Description | Type | Required | Values | * | --------------- | ----------- | ------- | -------- | ----------------------- | * | defaultRenderer | See notes | boolean | 4 | dagre-d3, dagre-wrapper | * * **Notes:** * * Decides which rendering engine that is to be used for the rendering. Legal values are: * dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid * * Default value: 'dagre-wrapper' */ defaultRenderer: 'dagre-wrapper', }, /** The object containing configurations specific for sequence diagrams */ sequence: { hideUnusedParticipants: false, /** * | Parameter | Description | Type | Required | Values | * | --------------- | ---------------------------- | ------- | -------- | ------------------ | * | activationWidth | Width of the activation rect | Integer | Required | Any Positive Value | * * **Notes:** Default value :10 */ activationWidth: 10, /** * | Parameter | Description | Type | Required | Values | * | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ | * | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value | * * **Notes:** Default value: 50 */ diagramMarginX: 50, /** * | Parameter | Description | Type | Required | Values | * | -------------- | ------------------------------------------------- | ------- | -------- | ------------------ | * | diagramMarginY | Margin to the over and under the sequence diagram | Integer | Required | Any Positive Value | * * **Notes:** Default value: 10 */ diagramMarginY: 10, /** * | Parameter | Description | Type | Required | Values | * | ----------- | --------------------- | ------- | -------- | ------------------ | * | actorMargin | Margin between actors | Integer | Required | Any Positive Value | * * **Notes:** Default value: 50 */ actorMargin: 50, /** * | Parameter | Description | Type | Required | Values | * | --------- | -------------------- | ------- | -------- | ------------------ | * | width | Width of actor boxes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 150 */ width: 150, /** * | Parameter | Description | Type | Required | Values | * | --------- | --------------------- | ------- | -------- | ------------------ | * | height | Height of actor boxes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 65 */ height: 65, /** * | Parameter | Description | Type | Required | Values | * | --------- | ------------------------ | ------- | -------- | ------------------ | * | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 10 */ boxMargin: 10, /** * | Parameter | Description | Type | Required | Values | * | ------------- | -------------------------------------------- | ------- | -------- | ------------------ | * | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 5 */ boxTextMargin: 5, /** * | Parameter | Description | Type | Required | Values | * | ---------- | ------------------- | ------- | -------- | ------------------ | * | noteMargin | margin around notes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 10 */ noteMargin: 10, /** * | Parameter | Description | Type | Required | Values | * | ------------- | ---------------------- | ------- | -------- | ------------------ | * | messageMargin | Space between messages | Integer | Required | Any Positive Value | * * **Notes:** Default value: 35 */ messageMargin: 35, /** * | Parameter | Description | Type | Required | Values | * | ------------ | --------------------------- | ------ | -------- | ------------------------- | * | messageAlign | Multiline message alignment | string | Required | 'left', 'center', 'right' | * * **Notes:** Default value: 'center' */ messageAlign: 'center', /** * | Parameter | Description | Type | Required | Values | * | ------------ | --------------------------- | ------- | -------- | ----------- | * | mirrorActors | Mirror actors under diagram | boolean | Required | true, false | * * **Notes:** Default value: true */ mirrorActors: true, /** * | Parameter | Description | Type | Required | Values | * | ---------- | ----------------------------------------------------------------------- | ------- | -------- | ----------- | * | forceMenus | forces actor popup menus to always be visible (to support E2E testing). | Boolean | Required | True, False | * * **Notes:** * * Default value: false. */ forceMenus: false, /** * | Parameter | Description | Type | Required | Values | * | --------------- | ------------------------------------------ | ------- | -------- | ------------------ | * | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | Required | Any Positive Value | * * **Notes:** * * Depending on css styling this might need adjustment. * * Default value: 1 */ bottomMarginAdj: 1, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ----------- | ------- | -------- | ----------- | * | useMaxWidth | See Notes | boolean | Required | true, false | * * **Notes:** When this flag is set to true, the height and width is set to 100% and is then * scaling with the available space. If set to false, the absolute space required is used. * * Default value: true */ useMaxWidth: true, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ------------------------------------ | ------- | -------- | ----------- | * | rightAngles | display curve arrows as right angles | boolean | Required | true, false | * * **Notes:** * * This will display arrows that start and begin at the same node as right angles, rather than a * curve * * Default value: false */ rightAngles: false, /** * | Parameter | Description | Type | Required | Values | * | ------------------- | ------------------------------- | ------- | -------- | ----------- | * | showSequenceNumbers | This will show the node numbers | boolean | Required | true, false | * * **Notes:** Default value: false */ showSequenceNumbers: false, /** * | Parameter | Description | Type | Required | Values | * | ------------- | -------------------------------------------------- | ------- | -------- | ------------------ | * | actorFontSize | This sets the font size of the actor's description | Integer | Require | Any Positive Value | * * **Notes:** **Default value 14**.. */ actorFontSize: 14, /** * | Parameter | Description | Type | Required | Values | * | --------------- | ---------------------------------------------------- | ------ | -------- | --------------------------- | * | actorFontFamily | This sets the font family of the actor's description | string | Required | Any Possible CSS FontFamily | * * **Notes:** Default value: "'Open Sans", sans-serif' */ actorFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of the actor's description * * **Notes:** Default value: 400. */ actorFontWeight: 400, /** * | Parameter | Description | Type | Required | Values | * | ------------ | ----------------------------------------------- | ------- | -------- | ------------------ | * | noteFontSize | This sets the font size of actor-attached notes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 14 */ noteFontSize: 14, /** * | Parameter | Description | Type | Required | Values | * | -------------- | -------------------------------------------------- | ------ | -------- | --------------------------- | * | noteFontFamily | This sets the font family of actor-attached notes. | string | Required | Any Possible CSS FontFamily | * * **Notes:** Default value: ''"trebuchet ms", verdana, arial, sans-serif' */ noteFontFamily: '"trebuchet ms", verdana, arial, sans-serif', /** * This sets the font weight of the note's description * * **Notes:** Default value: 400 */ noteFontWeight: 400, /** * | Parameter | Description | Type | Required | Values | * | --------- | ---------------------------------------------------- | ------ | -------- | ------------------------- | * | noteAlign | This sets the text alignment of actor-attached notes | string | required | 'left', 'center', 'right' | * * **Notes:** Default value: 'center' */ noteAlign: 'center', /** * | Parameter | Description | Type | Required | Values | * | --------------- | ----------------------------------------- | ------- | -------- | ------------------- | * | messageFontSize | This sets the font size of actor messages | Integer | Required | Any Positive Number | * * **Notes:** Default value: 16 */ messageFontSize: 16, /** * | Parameter | Description | Type | Required | Values | * | ----------------- | ------------------------------------------- | ------ | -------- | --------------------------- | * | messageFontFamily | This sets the font family of actor messages | string | Required | Any Possible CSS FontFamily | * * **Notes:** Default value: '"trebuchet ms", verdana, arial, sans-serif' */ messageFontFamily: '"trebuchet ms", verdana, arial, sans-serif', /** * This sets the font weight of the message's description * * **Notes:** Default value: 400. */ messageFontWeight: 400, /** * This sets the auto-wrap state for the diagram * * **Notes:** Default value: false. */ wrap: false, /** * This sets the auto-wrap padding for the diagram (sides only) * * **Notes:** Default value: 0. */ wrapPadding: 10, /** * This sets the width of the loop-box (loop, alt, opt, par) * * **Notes:** Default value: 50. */ labelBoxWidth: 50, /** * This sets the height of the loop-box (loop, alt, opt, par) * * **Notes:** Default value: 20. */ labelBoxHeight: 20, messageFont: function () { return { fontFamily: this.messageFontFamily, fontSize: this.messageFontSize, fontWeight: this.messageFontWeight, }; }, noteFont: function () { return { fontFamily: this.noteFontFamily, fontSize: this.noteFontSize, fontWeight: this.noteFontWeight, }; }, actorFont: function () { return { fontFamily: this.actorFontFamily, fontSize: this.actorFontSize, fontWeight: this.actorFontWeight, }; }, }, /** The object containing configurations specific for gantt diagrams */ gantt: { /** * ### titleTopMargin * * | Parameter | Description | Type | Required | Values | * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ | * | titleTopMargin | Margin top for the text over the gantt diagram | Integer | Required | Any Positive Value | * * **Notes:** Default value: 25 */ titleTopMargin: 25, /** * | Parameter | Description | Type | Required | Values | * | --------- | ----------------------------------- | ------- | -------- | ------------------ | * | barHeight | The height of the bars in the graph | Integer | Required | Any Positive Value | * * **Notes:** Default value: 20 */ barHeight: 20, /** * | Parameter | Description | Type | Required | Values | * | --------- | ---------------------------------------------------------------- | ------- | -------- | ------------------ | * | barGap | The margin between the different activities in the gantt diagram | Integer | Optional | Any Positive Value | * * **Notes:** Default value: 4 */ barGap: 4, /** * | Parameter | Description | Type | Required | Values | * | ---------- | -------------------------------------------------------------------------- | ------- | -------- | ------------------ | * | topPadding | Margin between title and gantt diagram and between axis and gantt diagram. | Integer | Required | Any Positive Value | * * **Notes:** Default value: 50 */ topPadding: 50, /** * | Parameter | Description | Type | Required | Values | * | ------------ | ----------------------------------------------------------------------- | ------- | -------- | ------------------ | * | rightPadding | The space allocated for the section name to the right of the activities | Integer | Required | Any Positive Value | * * **Notes:** Default value: 75 */ rightPadding: 75, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ---------------------------------------------------------------------- | ------- | -------- | ------------------ | * | leftPadding | The space allocated for the section name to the left of the activities | Integer | Required | Any Positive Value | * * **Notes:** Default value: 75 */ leftPadding: 75, /** * | Parameter | Description | Type | Required | Values | * | -------------------- | -------------------------------------------- | ------- | -------- | ------------------ | * | gridLineStartPadding | Vertical starting position of the grid lines | Integer | Required | Any Positive Value | * * **Notes:** Default value: 35 */ gridLineStartPadding: 35, /** * | Parameter | Description | Type | Required | Values | * | --------- | ----------- | ------- | -------- | ------------------ | * | fontSize | Font size | Integer | Required | Any Positive Value | * * **Notes:** Default value: 11 */ fontSize: 11, /** * | Parameter | Description | Type | Required | Values | * | --------------- | ---------------------- | ------- | -------- | ------------------ | * | sectionFontSize | Font size for sections | Integer | Required | Any Positive Value | * * **Notes:** Default value: 11 */ sectionFontSize: 11, /** * | Parameter | Description | Type | Required | Values | * | ------------------- | ---------------------------------------- | ------- | -------- | ------------------ | * | numberSectionStyles | The number of alternating section styles | Integer | 4 | Any Positive Value | * * **Notes:** Default value: 4 */ numberSectionStyles: 4, /** * | Parameter | Description | Type | Required | Values | * | ---------- | --------------------------- | ---- | -------- | ---------------- | * | axisFormat | Datetime format of the axis | 3 | Required | Date in yy-mm-dd | * * **Notes:** * * This might need adjustment to match your locale and preferences * * Default value: '%Y-%m-%d'. */ axisFormat: '%Y-%m-%d', /** * | Parameter | Description | Type | Required | Values | * | ----------- | ----------- | ------- | -------- | ----------- | * | useMaxWidth | See notes | boolean | 4 | true, false | * * **Notes:** * * When this flag is set the height and width is set to 100% and is then scaling with the * available space if not the absolute space required is used. * * Default value: true */ useMaxWidth: true, /** * | Parameter | Description | Type | Required | Values | * | --------- | ----------- | ------- | -------- | ----------- | * | topAxis | See notes | Boolean | 4 | True, False | * * **Notes:** when this flag is set date labels will be added to the top of the chart * * **Default value false**. */ topAxis: false, useWidth: undefined, }, /** The object containing configurations specific for journey diagrams */ journey: { /** * | Parameter | Description | Type | Required | Values | * | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ | * | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value | * * **Notes:** Default value: 50 */ diagramMarginX: 50, /** * | Parameter | Description | Type | Required | Values | * | -------------- | -------------------------------------------------- | ------- | -------- | ------------------ | * | diagramMarginY | Margin to the over and under the sequence diagram. | Integer | Required | Any Positive Value | * * **Notes:** Default value: 10 */ diagramMarginY: 10, /** * | Parameter | Description | Type | Required | Values | * | ----------- | --------------------- | ------- | -------- | ------------------ | * | actorMargin | Margin between actors | Integer | Required | Any Positive Value | * * **Notes:** Default value: 50 */ leftMargin: 150, /** * | Parameter | Description | Type | Required | Values | * | --------- | -------------------- | ------- | -------- | ------------------ | * | width | Width of actor boxes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 150 */ width: 150, /** * | Parameter | Description | Type | Required | Values | * | --------- | --------------------- | ------- | -------- | ------------------ | * | height | Height of actor boxes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 65 */ height: 50, /** * | Parameter | Description | Type | Required | Values | * | --------- | ------------------------ | ------- | -------- | ------------------ | * | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 10 */ boxMargin: 10, /** * | Parameter | Description | Type | Required | Values | * | ------------- | -------------------------------------------- | ------- | -------- | ------------------ | * | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 5 */ boxTextMargin: 5, /** * | Parameter | Description | Type | Required | Values | * | ---------- | ------------------- | ------- | -------- | ------------------ | * | noteMargin | Margin around notes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 10 */ noteMargin: 10, /** * | Parameter | Description | Type | Required | Values | * | ------------- | ----------------------- | ------- | -------- | ------------------ | * | messageMargin | Space between messages. | Integer | Required | Any Positive Value | * * **Notes:** * * Space between messages. * * Default value: 35 */ messageMargin: 35, /** * | Parameter | Description | Type | Required | Values | * | ------------ | --------------------------- | ---- | -------- | ------------------------- | * | messageAlign | Multiline message alignment | 3 | 4 | 'left', 'center', 'right' | * * **Notes:** Default value: 'center' */ messageAlign: 'center', /** * | Parameter | Description | Type | Required | Values | * | --------------- | ------------------------------------------ | ------- | -------- | ------------------ | * | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | 4 | Any Positive Value | * * **Notes:** * * Depending on css styling this might need adjustment. * * Default value: 1 */ bottomMarginAdj: 1, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ----------- | ------- | -------- | ----------- | * | useMaxWidth | See notes | boolean | 4 | true, false | * * **Notes:** * * When this flag is set the height and width is set to 100% and is then scaling with the * available space if not the absolute space required is used. * * Default value: true */ useMaxWidth: true, /** * | Parameter | Description | Type | Required | Values | * | ----------- | --------------------------------- | ---- | -------- | ----------- | * | rightAngles | Curved Arrows become Right Angles | 3 | 4 | true, false | * * **Notes:** * * This will display arrows that start and begin at the same node as right angles, rather than a * curves * * Default value: false */ rightAngles: false, taskFontSize: 14, taskFontFamily: '"Open Sans", sans-serif', taskMargin: 50, // width of activation box activationWidth: 10, // text placement as: tspan | fo | old only text as before textPlacement: 'fo', actorColours: ['#8FBC8F', '#7CFC00', '#00FFFF', '#20B2AA', '#B0E0E6', '#FFFFE0'], sectionFills: ['#191970', '#8B008B', '#4B0082', '#2F4F4F', '#800000', '#8B4513', '#00008B'], sectionColours: ['#fff'], }, class: { arrowMarkerAbsolute: false, dividerMargin: 10, padding: 5, textHeight: 10, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ----------- | ------- | -------- | ----------- | * | useMaxWidth | See notes | boolean | 4 | true, false | * * **Notes:** * * When this flag is set the height and width is set to 100% and is then scaling with the * available space if not the absolute space required is used. * * Default value: true */ useMaxWidth: true, /** * | Parameter | Description | Type | Required | Values | * | --------------- | ----------- | ------- | -------- | ----------------------- | * | defaultRenderer | See notes | boolean | 4 | dagre-d3, dagre-wrapper | * * **Notes**: * * Decides which rendering engine that is to be used for the rendering. Legal values are: * dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid * * Default value: 'dagre-d3' */ defaultRenderer: 'dagre-wrapper', }, state: { dividerMargin: 10, sizeUnit: 5, padding: 8, textHeight: 10, titleShift: -15, noteMargin: 10, forkWidth: 70, forkHeight: 7, // Used miniPadding: 2, // Font size factor, this is used to guess the width of the edges labels before rendering by dagre // layout. This might need updating if/when switching font fontSizeFactor: 5.02, fontSize: 24, labelHeight: 16, edgeLengthFactor: '20', compositTitleSize: 35, radius: 5, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ----------- | ------- | -------- | ----------- | * | useMaxWidth | See notes | boolean | 4 | true, false | * * **Notes:** * * When this flag is set the height and width is set to 100% and is then scaling with the * available space if not the absolute space required is used. * * Default value: true */ useMaxWidth: true, /** * | Parameter | Description | Type | Required | Values | * | --------------- | ----------- | ------- | -------- | ----------------------- | * | defaultRenderer | See notes | boolean | 4 | dagre-d3, dagre-wrapper | * * **Notes:** * * Decides which rendering engine that is to be used for the rendering. Legal values are: * dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid * * Default value: 'dagre-d3' */ defaultRenderer: 'dagre-wrapper', }, /** The object containing configurations specific for entity relationship diagrams */ er: { /** * | Parameter | Description | Type | Required | Values | * | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ | * | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value | * * **Notes:** * * The amount of padding around the diagram as a whole so that embedded diagrams have margins, * expressed in pixels * * Default value: 20 */ diagramPadding: 20, /** * | Parameter | Description | Type | Required | Values | * | --------------- | ---------------------------------------- | ------ | -------- | ---------------------- | * | layoutDirection | Directional bias for layout of entities. | string | Required | "TB", "BT", "LR", "RL" | * * **Notes:** * * 'TB' for Top-Bottom, 'BT'for Bottom-Top, 'LR' for Left-Right, or 'RL' for Right to Left. * * T = top, B = bottom, L = left, and R = right. * * Default value: 'TB' */ layoutDirection: 'TB', /** * | Parameter | Description | Type | Required | Values | * | -------------- | ---------------------------------- | ------- | -------- | ------------------ | * | minEntityWidth | The minimum width of an entity box | Integer | Required | Any Positive Value | * * **Notes:** Expressed in pixels. Default value: 100 */ minEntityWidth: 100, /** * | Parameter | Description | Type | Required | Values | * | --------------- | ----------------------------------- | ------- | -------- | ------------------ | * | minEntityHeight | The minimum height of an entity box | Integer | 4 | Any Positive Value | * * **Notes:** Expressed in pixels Default value: 75 */ minEntityHeight: 75, /** * | Parameter | Description | Type | Required | Values | * | ------------- | ------------------------------------------------------------ | ------- | -------- | ------------------ | * | entityPadding | Minimum internal padding between text in box and box borders | Integer | 4 | Any Positive Value | * * **Notes:** * * The minimum internal padding between text in an entity box and the enclosing box borders, * expressed in pixels. * * Default value: 15 */ entityPadding: 15, /** * | Parameter | Description | Type | Required | Values | * | --------- | ----------------------------------- | ------ | -------- | -------------------- | * | stroke | Stroke color of box edges and lines | string | 4 | Any recognized color | * * **Notes:** Default value: 'gray' */ stroke: 'gray', /** * | Parameter | Description | Type | Required | Values | * | --------- | -------------------------- | ------ | -------- | -------------------- | * | fill | Fill color of entity boxes | string | 4 | Any recognized color | * * **Notes:** Default value: 'honeydew' */ fill: 'honeydew', /** * | Parameter | Description | Type | Required | Values | * | --------- | ------------------- | ------- | -------- | ------------------ | * | fontSize | Font Size in pixels | Integer | | Any Positive Value | * * **Notes:** * * Font size (expressed as an integer representing a number of pixels) Default value: 12 */ fontSize: 12, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ----------- | ------- | -------- | ----------- | * | useMaxWidth | See Notes | boolean | Required | true, false | * * **Notes:** * * When this flag is set to true, the diagram width is locked to 100% and scaled based on * available space. If set to false, the diagram reserves its absolute width. * * Default value: true */ useMaxWidth: true, }, /** The object containing configurations specific for pie diagrams */ pie: { useWidth: undefined, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ----------- | ------- | -------- | ----------- | * | useMaxWidth | See Notes | boolean | Required | true, false | * * **Notes:** * * When this flag is set to true, the diagram width is locked to 100% and scaled based on * available space. If set to false, the diagram reserves its absolute width. * * Default value: true */ useMaxWidth: true, }, /** The object containing configurations specific for req diagrams */ requirement: { useWidth: undefined, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ----------- | ------- | -------- | ----------- | * | useMaxWidth | See Notes | boolean | Required | true, false | * * **Notes:** * * When this flag is set to true, the diagram width is locked to 100% and scaled based on * available space. If set to false, the diagram reserves its absolute width. * * Default value: true */ useMaxWidth: true, rect_fill: '#f9f9f9', text_color: '#333', rect_border_size: '0.5px', rect_border_color: '#bbb', rect_min_width: 200, rect_min_height: 200, fontSize: 14, rect_padding: 10, line_height: 20, }, gitGraph: { diagramPadding: 8, nodeLabel: { width: 75, height: 100, x: -25, y: 0, }, mainBranchName: 'main', mainBranchOrder: 0, showCommitLabel: true, showBranches: true, rotateCommitLabel: true, }, /** The object containing configurations specific for c4 diagrams */ c4: { useWidth: undefined, /** * | Parameter | Description | Type | Required | Values | * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ | * | diagramMarginX | Margin to the right and left of the c4 diagram | Integer | Required | Any Positive Value | * * **Notes:** Default value: 50 */ diagramMarginX: 50, /** * | Parameter | Description | Type | Required | Values | * | -------------- | ------------------------------------------- | ------- | -------- | ------------------ | * | diagramMarginY | Margin to the over and under the c4 diagram | Integer | Required | Any Positive Value | * * **Notes:** Default value: 10 */ diagramMarginY: 10, /** * | Parameter | Description | Type | Required | Values | * | ------------- | --------------------- | ------- | -------- | ------------------ | * | c4ShapeMargin | Margin between shapes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 50 */ c4ShapeMargin: 50, /** * | Parameter | Description | Type | Required | Values | * | -------------- | ---------------------- | ------- | -------- | ------------------ | * | c4ShapePadding | Padding between shapes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 20 */ c4ShapePadding: 20, /** * | Parameter | Description | Type | Required | Values | * | --------- | --------------------- | ------- | -------- | ------------------ | * | width | Width of person boxes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 216 */ width: 216, /** * | Parameter | Description | Type | Required | Values | * | --------- | ---------------------- | ------- | -------- | ------------------ | * | height | Height of person boxes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 60 */ height: 60, /** * | Parameter | Description | Type | Required | Values | * | --------- | ------------------- | ------- | -------- | ------------------ | * | boxMargin | Margin around boxes | Integer | Required | Any Positive Value | * * **Notes:** Default value: 10 */ boxMargin: 10, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ----------- | ------- | -------- | ----------- | * | useMaxWidth | See Notes | boolean | Required | true, false | * * **Notes:** When this flag is set to true, the height and width is set to 100% and is then * scaling with the available space. If set to false, the absolute space required is used. * * Default value: true */ useMaxWidth: true, /** * | Parameter | Description | Type | Required | Values | * | ------------ | ----------- | ------- | -------- | ------------------ | * | c4ShapeInRow | See Notes | Integer | Required | Any Positive Value | * * **Notes:** How many shapes to place in each row. * * Default value: 4 */ c4ShapeInRow: 4, nextLinePaddingX: 0, /** * | Parameter | Description | Type | Required | Values | * | --------------- | ----------- | ------- | -------- | ------------------ | * | c4BoundaryInRow | See Notes | Integer | Required | Any Positive Value | * * **Notes:** How many boundarys to place in each row. * * Default value: 2 */ c4BoundaryInRow: 2, /** * This sets the font size of Person shape for the diagram * * **Notes:** Default value: 14. */ personFontSize: 14, /** * This sets the font family of Person shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ personFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of Person shape for the diagram * * **Notes:** Default value: normal. */ personFontWeight: 'normal', /** * This sets the font size of External Person shape for the diagram * * **Notes:** Default value: 14. */ external_personFontSize: 14, /** * This sets the font family of External Person shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ external_personFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of External Person shape for the diagram * * **Notes:** Default value: normal. */ external_personFontWeight: 'normal', /** * This sets the font size of System shape for the diagram * * **Notes:** Default value: 14. */ systemFontSize: 14, /** * This sets the font family of System shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ systemFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of System shape for the diagram * * **Notes:** Default value: normal. */ systemFontWeight: 'normal', /** * This sets the font size of External System shape for the diagram * * **Notes:** Default value: 14. */ external_systemFontSize: 14, /** * This sets the font family of External System shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ external_systemFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of External System shape for the diagram * * **Notes:** Default value: normal. */ external_systemFontWeight: 'normal', /** * This sets the font size of System DB shape for the diagram * * **Notes:** Default value: 14. */ system_dbFontSize: 14, /** * This sets the font family of System DB shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ system_dbFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of System DB shape for the diagram * * **Notes:** Default value: normal. */ system_dbFontWeight: 'normal', /** * This sets the font size of External System DB shape for the diagram * * **Notes:** Default value: 14. */ external_system_dbFontSize: 14, /** * This sets the font family of External System DB shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ external_system_dbFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of External System DB shape for the diagram * * **Notes:** Default value: normal. */ external_system_dbFontWeight: 'normal', /** * This sets the font size of System Queue shape for the diagram * * **Notes:** Default value: 14. */ system_queueFontSize: 14, /** * This sets the font family of System Queue shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ system_queueFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of System Queue shape for the diagram * * **Notes:** Default value: normal. */ system_queueFontWeight: 'normal', /** * This sets the font size of External System Queue shape for the diagram * * **Notes:** Default value: 14. */ external_system_queueFontSize: 14, /** * This sets the font family of External System Queue shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ external_system_queueFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of External System Queue shape for the diagram * * **Notes:** Default value: normal. */ external_system_queueFontWeight: 'normal', /** * This sets the font size of Boundary shape for the diagram * * **Notes:** Default value: 14. */ boundaryFontSize: 14, /** * This sets the font family of Boundary shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ boundaryFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of Boundary shape for the diagram * * **Notes:** Default value: normal. */ boundaryFontWeight: 'normal', /** * This sets the font size of Message shape for the diagram * * **Notes:** Default value: 12. */ messageFontSize: 12, /** * This sets the font family of Message shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ messageFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of Message shape for the diagram * * **Notes:** Default value: normal. */ messageFontWeight: 'normal', /** * This sets the font size of Container shape for the diagram * * **Notes:** Default value: 14. */ containerFontSize: 14, /** * This sets the font family of Container shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ containerFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of Container shape for the diagram * * **Notes:** Default value: normal. */ containerFontWeight: 'normal', /** * This sets the font size of External Container shape for the diagram * * **Notes:** Default value: 14. */ external_containerFontSize: 14, /** * This sets the font family of External Container shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ external_containerFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of External Container shape for the diagram * * **Notes:** Default value: normal. */ external_containerFontWeight: 'normal', /** * This sets the font size of Container DB shape for the diagram * * **Notes:** Default value: 14. */ container_dbFontSize: 14, /** * This sets the font family of Container DB shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ container_dbFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of Container DB shape for the diagram * * **Notes:** Default value: normal. */ container_dbFontWeight: 'normal', /** * This sets the font size of External Container DB shape for the diagram * * **Notes:** Default value: 14. */ external_container_dbFontSize: 14, /** * This sets the font family of External Container DB shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ external_container_dbFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of External Container DB shape for the diagram * * **Notes:** Default value: normal. */ external_container_dbFontWeight: 'normal', /** * This sets the font size of Container Queue shape for the diagram * * **Notes:** Default value: 14. */ container_queueFontSize: 14, /** * This sets the font family of Container Queue shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ container_queueFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of Container Queue shape for the diagram * * **Notes:** Default value: normal. */ container_queueFontWeight: 'normal', /** * This sets the font size of External Container Queue shape for the diagram * * **Notes:** Default value: 14. */ external_container_queueFontSize: 14, /** * This sets the font family of External Container Queue shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ external_container_queueFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of External Container Queue shape for the diagram * * **Notes:** Default value: normal. */ external_container_queueFontWeight: 'normal', /** * This sets the font size of Component shape for the diagram * * **Notes:** Default value: 14. */ componentFontSize: 14, /** * This sets the font family of Component shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ componentFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of Component shape for the diagram * * **Notes:** Default value: normal. */ componentFontWeight: 'normal', /** * This sets the font size of External Component shape for the diagram * * **Notes:** Default value: 14. */ external_componentFontSize: 14, /** * This sets the font family of External Component shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ external_componentFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of External Component shape for the diagram * * **Notes:** Default value: normal. */ external_componentFontWeight: 'normal', /** * This sets the font size of Component DB shape for the diagram * * **Notes:** Default value: 14. */ component_dbFontSize: 14, /** * This sets the font family of Component DB shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ component_dbFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of Component DB shape for the diagram * * **Notes:** Default value: normal. */ component_dbFontWeight: 'normal', /** * This sets the font size of External Component DB shape for the diagram * * **Notes:** Default value: 14. */ external_component_dbFontSize: 14, /** * This sets the font family of External Component DB shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ external_component_dbFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of External Component DB shape for the diagram * * **Notes:** Default value: normal. */ external_component_dbFontWeight: 'normal', /** * This sets the font size of Component Queue shape for the diagram * * **Notes:** Default value: 14. */ component_queueFontSize: 14, /** * This sets the font family of Component Queue shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ component_queueFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of Component Queue shape for the diagram * * **Notes:** Default value: normal. */ component_queueFontWeight: 'normal', /** * This sets the font size of External Component Queue shape for the diagram * * **Notes:** Default value: 14. */ external_component_queueFontSize: 14, /** * This sets the font family of External Component Queue shape for the diagram * * **Notes:** Default value: "Open Sans", sans-serif. */ external_component_queueFontFamily: '"Open Sans", sans-serif', /** * This sets the font weight of External Component Queue shape for the diagram * * **Notes:** Default value: normal. */ external_component_queueFontWeight: 'normal', /** * This sets the auto-wrap state for the diagram * * **Notes:** Default value: true. */ wrap: true, /** * This sets the auto-wrap padding for the diagram (sides only) * * **Notes:** Default value: 0. */ wrapPadding: 10, personFont: function () { return { fontFamily: this.personFontFamily, fontSize: this.personFontSize, fontWeight: this.personFontWeight, }; }, external_personFont: function () { return { fontFamily: this.external_personFontFamily, fontSize: this.external_personFontSize, fontWeight: this.external_personFontWeight, }; }, systemFont: function () { return { fontFamily: this.systemFontFamily, fontSize: this.systemFontSize, fontWeight: this.systemFontWeight, }; }, external_systemFont: function () { return { fontFamily: this.external_systemFontFamily, fontSize: this.external_systemFontSize, fontWeight: this.external_systemFontWeight, }; }, system_dbFont: function () { return { fontFamily: this.system_dbFontFamily, fontSize: this.system_dbFontSize, fontWeight: this.system_dbFontWeight, }; }, external_system_dbFont: function () { return { fontFamily: this.external_system_dbFontFamily, fontSize: this.external_system_dbFontSize, fontWeight: this.external_system_dbFontWeight, }; }, system_queueFont: function () { return { fontFamily: this.system_queueFontFamily, fontSize: this.system_queueFontSize, fontWeight: this.system_queueFontWeight, }; }, external_system_queueFont: function () { return { fontFamily: this.external_system_queueFontFamily, fontSize: this.external_system_queueFontSize, fontWeight: this.external_system_queueFontWeight, }; }, containerFont: function () { return { fontFamily: this.containerFontFamily, fontSize: this.containerFontSize, fontWeight: this.containerFontWeight, }; }, external_containerFont: function () { return { fontFamily: this.external_containerFontFamily, fontSize: this.external_containerFontSize, fontWeight: this.external_containerFontWeight, }; }, container_dbFont: function () { return { fontFamily: this.container_dbFontFamily, fontSize: this.container_dbFontSize, fontWeight: this.container_dbFontWeight, }; }, external_container_dbFont: function () { return { fontFamily: this.external_container_dbFontFamily, fontSize: this.external_container_dbFontSize, fontWeight: this.external_container_dbFontWeight, }; }, container_queueFont: function () { return { fontFamily: this.container_queueFontFamily, fontSize: this.container_queueFontSize, fontWeight: this.container_queueFontWeight, }; }, external_container_queueFont: function () { return { fontFamily: this.external_container_queueFontFamily, fontSize: this.external_container_queueFontSize, fontWeight: this.external_container_queueFontWeight, }; }, componentFont: function () { return { fontFamily: this.componentFontFamily, fontSize: this.componentFontSize, fontWeight: this.componentFontWeight, }; }, external_componentFont: function () { return { fontFamily: this.external_componentFontFamily, fontSize: this.external_componentFontSize, fontWeight: this.external_componentFontWeight, }; }, component_dbFont: function () { return { fontFamily: this.component_dbFontFamily, fontSize: this.component_dbFontSize, fontWeight: this.component_dbFontWeight, }; }, external_component_dbFont: function () { return { fontFamily: this.external_component_dbFontFamily, fontSize: this.external_component_dbFontSize, fontWeight: this.external_component_dbFontWeight, }; }, component_queueFont: function () { return { fontFamily: this.component_queueFontFamily, fontSize: this.component_queueFontSize, fontWeight: this.component_queueFontWeight, }; }, external_component_queueFont: function () { return { fontFamily: this.external_component_queueFontFamily, fontSize: this.external_component_queueFontSize, fontWeight: this.external_component_queueFontWeight, }; }, boundaryFont: function () { return { fontFamily: this.boundaryFontFamily, fontSize: this.boundaryFontSize, fontWeight: this.boundaryFontWeight, }; }, messageFont: function () { return { fontFamily: this.messageFontFamily, fontSize: this.messageFontSize, fontWeight: this.messageFontWeight, }; }, // ' Colors // ' ################################## person_bg_color: '#08427B', person_border_color: '#073B6F', external_person_bg_color: '#686868', external_person_border_color: '#8A8A8A', system_bg_color: '#1168BD', system_border_color: '#3C7FC0', system_db_bg_color: '#1168BD', system_db_border_color: '#3C7FC0', system_queue_bg_color: '#1168BD', system_queue_border_color: '#3C7FC0', external_system_bg_color: '#999999', external_system_border_color: '#8A8A8A', external_system_db_bg_color: '#999999', external_system_db_border_color: '#8A8A8A', external_system_queue_bg_color: '#999999', external_system_queue_border_color: '#8A8A8A', container_bg_color: '#438DD5', container_border_color: '#3C7FC0', container_db_bg_color: '#438DD5', container_db_border_color: '#3C7FC0', container_queue_bg_color: '#438DD5', container_queue_border_color: '#3C7FC0', external_container_bg_color: '#B3B3B3', external_container_border_color: '#A6A6A6', external_container_db_bg_color: '#B3B3B3', external_container_db_border_color: '#A6A6A6', external_container_queue_bg_color: '#B3B3B3', external_container_queue_border_color: '#A6A6A6', component_bg_color: '#85BBF0', component_border_color: '#78A8D8', component_db_bg_color: '#85BBF0', component_db_border_color: '#78A8D8', component_queue_bg_color: '#85BBF0', component_queue_border_color: '#78A8D8', external_component_bg_color: '#CCCCCC', external_component_border_color: '#BFBFBF', external_component_db_bg_color: '#CCCCCC', external_component_db_border_color: '#BFBFBF', external_component_queue_bg_color: '#CCCCCC', external_component_queue_border_color: '#BFBFBF', }, mindmap: { useMaxWidth: true, padding: 10, maxNodeWidth: 200, }, fontSize: 16, }; if (config.class) config.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute; if (config.gitGraph) config.gitGraph.arrowMarkerAbsolute = config.arrowMarkerAbsolute; const keyify = (obj: any, prefix = ''): string[] => Object.keys(obj).reduce((res: string[], el): string[] => { if (Array.isArray(obj[el])) { return res; } else if (typeof obj[el] === 'object' && obj[el] !== null) { return [...res, prefix + el, ...keyify(obj[el], '')]; } return [...res, prefix + el]; }, []); export const configKeys: string[] = keyify(config, ''); export default config; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagram-api/000077500000000000000000000000001433273745700240245ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagram-api/detectType.ts000066400000000000000000000033231433273745700265070ustar00rootroot00000000000000import { MermaidConfig } from '../config.type'; import { log } from '../logger'; import { DetectorRecord, DiagramDetector, DiagramLoader } from './types'; const directive = /[%]{2}[{]\s*(?:(?:(\w+)\s*:|(\w+))\s*(?:(?:(\w+))|((?:(?![}][%]{2}).|\r?\n)*))?\s*)(?:[}][%]{2})?/gi; const anyComment = /\s*%%.*\n/gm; const detectors: Record = {}; /** * @function detectType Detects the type of the graph text. Takes into consideration the possible * existence of an %%init directive * * ```mermaid * %%{initialize: {"startOnLoad": true, logLevel: "fatal" }}%% * graph LR * a-->b * b-->c * c-->d * d-->e * e-->f * f-->g * g-->h * ``` * @param {string} text The text defining the graph * @param {{ * class: { defaultRenderer: string } | undefined; * state: { defaultRenderer: string } | undefined; * flowchart: { defaultRenderer: string } | undefined; * }} [config] * @returns {string} A graph definition key */ export const detectType = function (text: string, config?: MermaidConfig): string { text = text.replace(directive, '').replace(anyComment, '\n'); for (const [key, { detector }] of Object.entries(detectors)) { const diagram = detector(text, config); if (diagram) { return key; } } throw new Error(`No diagram type detected for text: ${text}`); }; export const addDetector = (key: string, detector: DiagramDetector, loader?: DiagramLoader) => { if (detectors[key]) { throw new Error(`Detector with key ${key} already exists`); } detectors[key] = { detector, loader }; log.debug(`Detector with key ${key} added${loader ? ' with loader' : ''}`); }; export const getDiagramLoader = (key: string) => detectors[key].loader; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagram-api/diagram-orchestration.ts000066400000000000000000000236241433273745700306710ustar00rootroot00000000000000import { registerDiagram } from './diagramAPI'; // @ts-ignore: TODO Fix ts errors import gitGraphParser from '../diagrams/git/parser/gitGraph'; import { gitGraphDetector } from '../diagrams/git/gitGraphDetector'; import gitGraphDb from '../diagrams/git/gitGraphAst'; import gitGraphRenderer from '../diagrams/git/gitGraphRenderer'; import gitGraphStyles from '../diagrams/git/styles'; // @ts-ignore: TODO Fix ts errors import c4Parser from '../diagrams/c4/parser/c4Diagram'; import { c4Detector } from '../diagrams/c4/c4Detector'; import c4Db from '../diagrams/c4/c4Db'; import c4Renderer from '../diagrams/c4/c4Renderer'; import c4Styles from '../diagrams/c4/styles'; // @ts-ignore: TODO Fix ts errors import classParser from '../diagrams/class/parser/classDiagram'; import { classDetector } from '../diagrams/class/classDetector'; import { classDetectorV2 } from '../diagrams/class/classDetector-V2'; import classDb from '../diagrams/class/classDb'; import classRenderer from '../diagrams/class/classRenderer'; import classRendererV2 from '../diagrams/class/classRenderer-v2'; import classStyles from '../diagrams/class/styles'; // @ts-ignore: TODO Fix ts errors import erParser from '../diagrams/er/parser/erDiagram'; import { erDetector } from '../diagrams/er/erDetector'; import erDb from '../diagrams/er/erDb'; import erRenderer from '../diagrams/er/erRenderer'; import erStyles from '../diagrams/er/styles'; // @ts-ignore: TODO Fix ts errors import flowParser from '../diagrams/flowchart/parser/flow'; import { flowDetector } from '../diagrams/flowchart/flowDetector'; import { flowDetectorV2 } from '../diagrams/flowchart/flowDetector-v2'; import flowDb from '../diagrams/flowchart/flowDb'; import flowRenderer from '../diagrams/flowchart/flowRenderer'; import flowRendererV2 from '../diagrams/flowchart/flowRenderer-v2'; import flowStyles from '../diagrams/flowchart/styles'; // @ts-ignore: TODO Fix ts errors import ganttParser from '../diagrams/gantt/parser/gantt'; import { ganttDetector } from '../diagrams/gantt/ganttDetector'; import ganttDb from '../diagrams/gantt/ganttDb'; import ganttRenderer from '../diagrams/gantt/ganttRenderer'; import ganttStyles from '../diagrams/gantt/styles'; // @ts-ignore: TODO Fix ts errors import infoParser from '../diagrams/info/parser/info'; import infoDb from '../diagrams/info/infoDb'; import infoRenderer from '../diagrams/info/infoRenderer'; import { infoDetector } from '../diagrams/info/infoDetector'; import infoStyles from '../diagrams/info/styles'; // @ts-ignore: TODO Fix ts errors import pieParser from '../diagrams/pie/parser/pie'; import { pieDetector } from '../diagrams/pie/pieDetector'; import pieDb from '../diagrams/pie/pieDb'; import pieRenderer from '../diagrams/pie/pieRenderer'; import pieStyles from '../diagrams/pie/styles'; // @ts-ignore: TODO Fix ts errors import requirementParser from '../diagrams/requirement/parser/requirementDiagram'; import { requirementDetector } from '../diagrams/requirement/requirementDetector'; import requirementDb from '../diagrams/requirement/requirementDb'; import requirementRenderer from '../diagrams/requirement/requirementRenderer'; import requirementStyles from '../diagrams/requirement/styles'; // @ts-ignore: TODO Fix ts errors import sequenceParser from '../diagrams/sequence/parser/sequenceDiagram'; import { sequenceDetector } from '../diagrams/sequence/sequenceDetector'; import sequenceDb from '../diagrams/sequence/sequenceDb'; import sequenceRenderer from '../diagrams/sequence/sequenceRenderer'; import sequenceStyles from '../diagrams/sequence/styles'; // @ts-ignore: TODO Fix ts errors import stateParser from '../diagrams/state/parser/stateDiagram'; import { stateDetector } from '../diagrams/state/stateDetector'; import { stateDetectorV2 } from '../diagrams/state/stateDetector-V2'; import stateDb from '../diagrams/state/stateDb'; import stateRenderer from '../diagrams/state/stateRenderer'; import stateRendererV2 from '../diagrams/state/stateRenderer-v2'; import stateStyles from '../diagrams/state/styles'; // @ts-ignore: TODO Fix ts errors import journeyParser from '../diagrams/user-journey/parser/journey'; import { journeyDetector } from '../diagrams/user-journey/journeyDetector'; import journeyDb from '../diagrams/user-journey/journeyDb'; import journeyRenderer from '../diagrams/user-journey/journeyRenderer'; import journeyStyles from '../diagrams/user-journey/styles'; import { setConfig } from '../config'; import errorRenderer from '../diagrams/error/errorRenderer'; import errorStyles from '../diagrams/error/styles'; let hasLoadedDiagrams = false; export const addDiagrams = () => { if (hasLoadedDiagrams) { return; } // This is added here to avoid race-conditions. // We could optimize the loading logic somehow. hasLoadedDiagrams = true; registerDiagram( 'error', // Special diagram with error messages but setup as a regular diagram { db: { clear: () => { // Quite ok, clear needs to be there for error to work as a regular diagram }, }, styles: errorStyles, renderer: errorRenderer, parser: { parser: { yy: {} }, parse: () => { // no op }, }, init: () => { // no op }, }, (text) => text.toLowerCase().trim() === 'error' ); registerDiagram( 'c4', { parser: c4Parser, db: c4Db, renderer: c4Renderer, styles: c4Styles, init: (cnf) => { c4Renderer.setConf(cnf.c4); }, }, c4Detector ); registerDiagram( 'class', { parser: classParser, db: classDb, renderer: classRenderer, styles: classStyles, init: (cnf) => { if (!cnf.class) { cnf.class = {}; } cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; classDb.clear(); }, }, classDetector ); registerDiagram( 'classDiagram', { parser: classParser, db: classDb, renderer: classRendererV2, styles: classStyles, init: (cnf) => { if (!cnf.class) { cnf.class = {}; } cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; classDb.clear(); }, }, classDetectorV2 ); registerDiagram( 'er', { parser: erParser, db: erDb, renderer: erRenderer, styles: erStyles, }, erDetector ); registerDiagram( 'gantt', { parser: ganttParser, db: ganttDb, renderer: ganttRenderer, styles: ganttStyles, }, ganttDetector ); registerDiagram( 'info', { parser: infoParser, db: infoDb, renderer: infoRenderer, styles: infoStyles, }, infoDetector ); registerDiagram( 'pie', { parser: pieParser, db: pieDb, renderer: pieRenderer, styles: pieStyles, }, pieDetector ); registerDiagram( 'requirement', { parser: requirementParser, db: requirementDb, renderer: requirementRenderer, styles: requirementStyles, }, requirementDetector ); registerDiagram( 'sequence', { parser: sequenceParser, db: sequenceDb, renderer: sequenceRenderer, styles: sequenceStyles, init: (cnf) => { if (!cnf.sequence) { cnf.sequence = {}; } cnf.sequence.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; if ('sequenceDiagram' in cnf) { throw new Error( '`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.' ); } sequenceDb.setWrap(cnf.wrap); sequenceRenderer.setConf(cnf.sequence); }, }, sequenceDetector ); registerDiagram( 'state', { parser: stateParser, db: stateDb, renderer: stateRenderer, styles: stateStyles, init: (cnf) => { if (!cnf.state) { cnf.state = {}; } cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; stateDb.clear(); }, }, stateDetector ); registerDiagram( 'stateDiagram', { parser: stateParser, db: stateDb, renderer: stateRendererV2, styles: stateStyles, init: (cnf) => { if (!cnf.state) { cnf.state = {}; } cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; stateDb.clear(); }, }, stateDetectorV2 ); registerDiagram( 'journey', { parser: journeyParser, db: journeyDb, renderer: journeyRenderer, styles: journeyStyles, init: (cnf) => { journeyRenderer.setConf(cnf.journey); journeyDb.clear(); }, }, journeyDetector ); registerDiagram( 'flowchart', { parser: flowParser, db: flowDb, renderer: flowRendererV2, styles: flowStyles, init: (cnf) => { if (!cnf.flowchart) { cnf.flowchart = {}; } // TODO, broken as of 2022-09-14 (13809b50251845475e6dca65cc395761be38fbd2) cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; flowRenderer.setConf(cnf.flowchart); flowDb.clear(); flowDb.setGen('gen-1'); }, }, flowDetector ); registerDiagram( 'flowchart-v2', { parser: flowParser, db: flowDb, renderer: flowRendererV2, styles: flowStyles, init: (cnf) => { if (!cnf.flowchart) { cnf.flowchart = {}; } cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; // flowchart-v2 uses dagre-wrapper, which doesn't have access to flowchart cnf setConfig({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } }); flowRendererV2.setConf(cnf.flowchart); flowDb.clear(); flowDb.setGen('gen-2'); }, }, flowDetectorV2 ); registerDiagram( 'gitGraph', { parser: gitGraphParser, db: gitGraphDb, renderer: gitGraphRenderer, styles: gitGraphStyles }, gitGraphDetector ); }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagram-api/diagramAPI.spec.ts000066400000000000000000000020361433273745700272640ustar00rootroot00000000000000import { detectType } from './detectType'; import { getDiagram, registerDiagram } from './diagramAPI'; import { addDiagrams } from './diagram-orchestration'; import { DiagramDetector } from './types'; addDiagrams(); describe('DiagramAPI', () => { it('should return default diagrams', () => { expect(getDiagram('sequence')).not.toBeNull(); }); it('should throw error if diagram is not defined', () => { expect(() => getDiagram('loki')).toThrow(); }); it('should handle diagram registrations', () => { expect(() => getDiagram('loki')).toThrow(); expect(() => detectType('loki diagram')).toThrow( 'No diagram type detected for text: loki diagram' ); const detector: DiagramDetector = (str: string) => { return str.match('loki') !== null; }; registerDiagram( 'loki', { db: {}, parser: {}, renderer: {}, styles: {}, }, detector ); expect(getDiagram('loki')).not.toBeNull(); expect(detectType('loki diagram')).toBe('loki'); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagram-api/diagramAPI.ts000066400000000000000000000051361433273745700263370ustar00rootroot00000000000000import { addDetector } from './detectType'; import { log as _log, setLogLevel as _setLogLevel } from '../logger'; import { getConfig as _getConfig } from '../config'; import { sanitizeText as _sanitizeText } from '../diagrams/common/common'; import { setupGraphViewbox as _setupGraphViewbox } from '../setupGraphViewbox'; import { addStylesForDiagram } from '../styles'; import { DiagramDefinition, DiagramDetector } from './types'; /* Packaging and exposing resources for externa diagrams so that they can import diagramAPI and have access to selct parts of mermaid common code reqiored to create diagrams worling like the internal diagrams. */ export const log = _log; export const setLogLevel = _setLogLevel; export const getConfig = _getConfig; export const sanitizeText = (text: string) => _sanitizeText(text, getConfig()); export const setupGraphViewbox = _setupGraphViewbox; const diagrams: Record = {}; export interface Detectors { [key: string]: DiagramDetector; } /** * Registers the given diagram with Mermaid. * * Can be used for third-party custom diagrams. * * @param id - A unique ID for the given diagram. * @param diagram - The diagram definition. * @param detector - Function that returns `true` if a given mermaid text is this diagram definition. */ export const registerDiagram = ( id: string, diagram: DiagramDefinition, detector?: DiagramDetector ) => { log.debug(`Registering diagram ${id}`); if (diagrams[id]) { log.warn(`Diagram ${id} already registered.`); // The error throw is commented out to as it breaks pages where you have multiple diagrams, // it can happen that rendering of the same type of diagram is initiated while the previous // one is still being imported. import deals with this and only one diagram is imported in // the end. // throw new Error(`Diagram ${id} already registered.`); } diagrams[id] = diagram; if (detector) { addDetector(id, detector); } addStylesForDiagram(id, diagram.styles); if (diagram.injectUtils) { diagram.injectUtils(log, setLogLevel, getConfig, sanitizeText, setupGraphViewbox); } log.debug(`Registered diagram ${id}. ${Object.keys(diagrams).join(', ')} diagrams registered.`); }; export const getDiagram = (name: string): DiagramDefinition => { log.debug(`Getting diagram ${name}. ${Object.keys(diagrams).join(', ')} diagrams registered.`); if (name in diagrams) { return diagrams[name]; } throw new DiagramNotFoundError(name); }; export class DiagramNotFoundError extends Error { constructor(message: string) { super(`Diagram ${message} not found.`); } } mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagram-api/types.ts000066400000000000000000000017001433273745700255360ustar00rootroot00000000000000import { MermaidConfig } from '../config.type'; export interface InjectUtils { _log: any; _setLogLevel: any; _getConfig: any; _sanitizeText: any; _setupGraphViewbox: any; } export interface DiagramDefinition { db: any; renderer: any; parser: any; styles: any; init?: (config: MermaidConfig) => void; injectUtils?: ( _log: InjectUtils['_log'], _setLogLevel: InjectUtils['_setLogLevel'], _getConfig: InjectUtils['_getConfig'], _sanitizeText: InjectUtils['_sanitizeText'], _setupGraphViewbox: InjectUtils['_setupGraphViewbox'] ) => void; } export interface DetectorRecord { detector: DiagramDetector; loader?: DiagramLoader; } export interface ExternalDiagramDefinition { id: string; detector: DiagramDetector; loader: DiagramLoader; } export type DiagramDetector = (text: string, config?: MermaidConfig) => boolean; export type DiagramLoader = () => Promise<{ id: string; diagram: DiagramDefinition }>; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/000077500000000000000000000000001433273745700234405ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/000077500000000000000000000000001433273745700237465ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/c4Db.js000066400000000000000000000500031433273745700250560ustar00rootroot00000000000000import mermaidAPI from '../../mermaidAPI'; import * as configApi from '../../config'; import { sanitizeText } from '../common/common'; import { setAccTitle, getAccTitle, getAccDescription, setAccDescription } from '../../commonDb'; let c4ShapeArray = []; let boundaryParseStack = ['']; let currentBoundaryParse = 'global'; let parentBoundaryParse = ''; let boundarys = [ { alias: 'global', label: { text: 'global' }, type: { text: 'global' }, tags: null, link: null, parentBoundary: '', }, ]; let rels = []; let title = ''; let wrapEnabled = false; let c4ShapeInRow = 4; let c4BoundaryInRow = 2; var c4Type; export const getC4Type = function () { return c4Type; }; export const setC4Type = function (c4TypeParam) { let sanitizedText = sanitizeText(c4TypeParam, configApi.getConfig()); c4Type = sanitizedText; }; export const parseDirective = function (statement, context, type) { mermaidAPI.parseDirective(this, statement, context, type); }; //type, from, to, label, ?techn, ?descr, ?sprite, ?tags, $link export const addRel = function (type, from, to, label, techn, descr, sprite, tags, link) { // Don't allow label nulling if ( type === undefined || type === null || from === undefined || from === null || to === undefined || to === null || label === undefined || label === null ) return; let rel = {}; const old = rels.find((rel) => rel.from === from && rel.to === to); if (old) { rel = old; } else { rels.push(rel); } rel.type = type; rel.from = from; rel.to = to; rel.label = { text: label }; if (techn === undefined || techn === null) { rel.techn = { text: '' }; } else { if (typeof techn === 'object') { let [key, value] = Object.entries(techn)[0]; rel[key] = { text: value }; } else { rel.techn = { text: techn }; } } if (descr === undefined || descr === null) { rel.descr = { text: '' }; } else { if (typeof descr === 'object') { let [key, value] = Object.entries(descr)[0]; rel[key] = { text: value }; } else { rel.descr = { text: descr }; } } if (typeof sprite === 'object') { let [key, value] = Object.entries(sprite)[0]; rel[key] = value; } else { rel.sprite = sprite; } if (typeof tags === 'object') { let [key, value] = Object.entries(tags)[0]; rel[key] = value; } else { rel.tags = tags; } if (typeof link === 'object') { let [key, value] = Object.entries(link)[0]; rel[key] = value; } else { rel.link = link; } rel.wrap = autoWrap(); }; //type, alias, label, ?descr, ?sprite, ?tags, $link export const addPersonOrSystem = function (typeC4Shape, alias, label, descr, sprite, tags, link) { // Don't allow label nulling if (alias === null || label === null) return; let personOrSystem = {}; const old = c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias); if (old && alias === old.alias) { personOrSystem = old; } else { personOrSystem.alias = alias; c4ShapeArray.push(personOrSystem); } // Don't allow null labels, either if (label === undefined || label === null) { personOrSystem.label = { text: '' }; } else { personOrSystem.label = { text: label }; } if (descr === undefined || descr === null) { personOrSystem.descr = { text: '' }; } else { if (typeof descr === 'object') { let [key, value] = Object.entries(descr)[0]; personOrSystem[key] = { text: value }; } else { personOrSystem.descr = { text: descr }; } } if (typeof sprite === 'object') { let [key, value] = Object.entries(sprite)[0]; personOrSystem[key] = value; } else { personOrSystem.sprite = sprite; } if (typeof tags === 'object') { let [key, value] = Object.entries(tags)[0]; personOrSystem[key] = value; } else { personOrSystem.tags = tags; } if (typeof link === 'object') { let [key, value] = Object.entries(link)[0]; personOrSystem[key] = value; } else { personOrSystem.link = link; } personOrSystem.typeC4Shape = { text: typeC4Shape }; personOrSystem.parentBoundary = currentBoundaryParse; personOrSystem.wrap = autoWrap(); }; //type, alias, label, ?techn, ?descr ?sprite, ?tags, $link export const addContainer = function (typeC4Shape, alias, label, techn, descr, sprite, tags, link) { // Don't allow label nulling if (alias === null || label === null) return; let container = {}; const old = c4ShapeArray.find((container) => container.alias === alias); if (old && alias === old.alias) { container = old; } else { container.alias = alias; c4ShapeArray.push(container); } // Don't allow null labels, either if (label === undefined || label === null) { container.label = { text: '' }; } else { container.label = { text: label }; } if (techn === undefined || techn === null) { container.techn = { text: '' }; } else { if (typeof techn === 'object') { let [key, value] = Object.entries(techn)[0]; container[key] = { text: value }; } else { container.techn = { text: techn }; } } if (descr === undefined || descr === null) { container.descr = { text: '' }; } else { if (typeof descr === 'object') { let [key, value] = Object.entries(descr)[0]; container[key] = { text: value }; } else { container.descr = { text: descr }; } } if (typeof sprite === 'object') { let [key, value] = Object.entries(sprite)[0]; container[key] = value; } else { container.sprite = sprite; } if (typeof tags === 'object') { let [key, value] = Object.entries(tags)[0]; container[key] = value; } else { container.tags = tags; } if (typeof link === 'object') { let [key, value] = Object.entries(link)[0]; container[key] = value; } else { container.link = link; } container.wrap = autoWrap(); container.typeC4Shape = { text: typeC4Shape }; container.parentBoundary = currentBoundaryParse; }; //type, alias, label, ?techn, ?descr ?sprite, ?tags, $link export const addComponent = function (typeC4Shape, alias, label, techn, descr, sprite, tags, link) { // Don't allow label nulling if (alias === null || label === null) return; let component = {}; const old = c4ShapeArray.find((component) => component.alias === alias); if (old && alias === old.alias) { component = old; } else { component.alias = alias; c4ShapeArray.push(component); } // Don't allow null labels, either if (label === undefined || label === null) { component.label = { text: '' }; } else { component.label = { text: label }; } if (techn === undefined || techn === null) { component.techn = { text: '' }; } else { if (typeof techn === 'object') { let [key, value] = Object.entries(techn)[0]; component[key] = { text: value }; } else { component.techn = { text: techn }; } } if (descr === undefined || descr === null) { component.descr = { text: '' }; } else { if (typeof descr === 'object') { let [key, value] = Object.entries(descr)[0]; component[key] = { text: value }; } else { component.descr = { text: descr }; } } if (typeof sprite === 'object') { let [key, value] = Object.entries(sprite)[0]; component[key] = value; } else { component.sprite = sprite; } if (typeof tags === 'object') { let [key, value] = Object.entries(tags)[0]; component[key] = value; } else { component.tags = tags; } if (typeof link === 'object') { let [key, value] = Object.entries(link)[0]; component[key] = value; } else { component.link = link; } component.wrap = autoWrap(); component.typeC4Shape = { text: typeC4Shape }; component.parentBoundary = currentBoundaryParse; }; //alias, label, ?type, ?tags, $link export const addPersonOrSystemBoundary = function (alias, label, type, tags, link) { // if (parentBoundary === null) return; // Don't allow label nulling if (alias === null || label === null) return; let boundary = {}; const old = boundarys.find((boundary) => boundary.alias === alias); if (old && alias === old.alias) { boundary = old; } else { boundary.alias = alias; boundarys.push(boundary); } // Don't allow null labels, either if (label === undefined || label === null) { boundary.label = { text: '' }; } else { boundary.label = { text: label }; } if (type === undefined || type === null) { boundary.type = { text: 'system' }; } else { if (typeof type === 'object') { let [key, value] = Object.entries(type)[0]; boundary[key] = { text: value }; } else { boundary.type = { text: type }; } } if (typeof tags === 'object') { let [key, value] = Object.entries(tags)[0]; boundary[key] = value; } else { boundary.tags = tags; } if (typeof link === 'object') { let [key, value] = Object.entries(link)[0]; boundary[key] = value; } else { boundary.link = link; } boundary.parentBoundary = currentBoundaryParse; boundary.wrap = autoWrap(); parentBoundaryParse = currentBoundaryParse; currentBoundaryParse = alias; boundaryParseStack.push(parentBoundaryParse); }; //alias, label, ?type, ?tags, $link export const addContainerBoundary = function (alias, label, type, tags, link) { // if (parentBoundary === null) return; // Don't allow label nulling if (alias === null || label === null) return; let boundary = {}; const old = boundarys.find((boundary) => boundary.alias === alias); if (old && alias === old.alias) { boundary = old; } else { boundary.alias = alias; boundarys.push(boundary); } // Don't allow null labels, either if (label === undefined || label === null) { boundary.label = { text: '' }; } else { boundary.label = { text: label }; } if (type === undefined || type === null) { boundary.type = { text: 'container' }; } else { if (typeof type === 'object') { let [key, value] = Object.entries(type)[0]; boundary[key] = { text: value }; } else { boundary.type = { text: type }; } } if (typeof tags === 'object') { let [key, value] = Object.entries(tags)[0]; boundary[key] = value; } else { boundary.tags = tags; } if (typeof link === 'object') { let [key, value] = Object.entries(link)[0]; boundary[key] = value; } else { boundary.link = link; } boundary.parentBoundary = currentBoundaryParse; boundary.wrap = autoWrap(); parentBoundaryParse = currentBoundaryParse; currentBoundaryParse = alias; boundaryParseStack.push(parentBoundaryParse); }; //alias, label, ?type, ?descr, ?sprite, ?tags, $link export const addDeploymentNode = function ( nodeType, alias, label, type, descr, sprite, tags, link ) { // if (parentBoundary === null) return; // Don't allow label nulling if (alias === null || label === null) return; let boundary = {}; const old = boundarys.find((boundary) => boundary.alias === alias); if (old && alias === old.alias) { boundary = old; } else { boundary.alias = alias; boundarys.push(boundary); } // Don't allow null labels, either if (label === undefined || label === null) { boundary.label = { text: '' }; } else { boundary.label = { text: label }; } if (type === undefined || type === null) { boundary.type = { text: 'node' }; } else { if (typeof type === 'object') { let [key, value] = Object.entries(type)[0]; boundary[key] = { text: value }; } else { boundary.type = { text: type }; } } if (descr === undefined || descr === null) { boundary.descr = { text: '' }; } else { if (typeof descr === 'object') { let [key, value] = Object.entries(descr)[0]; boundary[key] = { text: value }; } else { boundary.descr = { text: descr }; } } if (typeof tags === 'object') { let [key, value] = Object.entries(tags)[0]; boundary[key] = value; } else { boundary.tags = tags; } if (typeof link === 'object') { let [key, value] = Object.entries(link)[0]; boundary[key] = value; } else { boundary.link = link; } boundary.nodeType = nodeType; boundary.parentBoundary = currentBoundaryParse; boundary.wrap = autoWrap(); parentBoundaryParse = currentBoundaryParse; currentBoundaryParse = alias; boundaryParseStack.push(parentBoundaryParse); }; export const popBoundaryParseStack = function () { currentBoundaryParse = parentBoundaryParse; boundaryParseStack.pop(); parentBoundaryParse = boundaryParseStack.pop(); boundaryParseStack.push(parentBoundaryParse); }; //elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite export const updateElStyle = function ( typeC4Shape, elementName, bgColor, fontColor, borderColor, shadowing, shape, sprite, techn, legendText, legendSprite ) { let old = c4ShapeArray.find((element) => element.alias === elementName); if (old === undefined) { old = boundarys.find((element) => element.alias === elementName); if (old === undefined) { return; } } if (bgColor !== undefined && bgColor !== null) { if (typeof bgColor === 'object') { let [key, value] = Object.entries(bgColor)[0]; old[key] = value; } else { old.bgColor = bgColor; } } if (fontColor !== undefined && fontColor !== null) { if (typeof fontColor === 'object') { let [key, value] = Object.entries(fontColor)[0]; old[key] = value; } else { old.fontColor = fontColor; } } if (borderColor !== undefined && borderColor !== null) { if (typeof borderColor === 'object') { let [key, value] = Object.entries(borderColor)[0]; old[key] = value; } else { old.borderColor = borderColor; } } if (shadowing !== undefined && shadowing !== null) { if (typeof shadowing === 'object') { let [key, value] = Object.entries(shadowing)[0]; old[key] = value; } else { old.shadowing = shadowing; } } if (shape !== undefined && shape !== null) { if (typeof shape === 'object') { let [key, value] = Object.entries(shape)[0]; old[key] = value; } else { old.shape = shape; } } if (sprite !== undefined && sprite !== null) { if (typeof sprite === 'object') { let [key, value] = Object.entries(sprite)[0]; old[key] = value; } else { old.sprite = sprite; } } if (techn !== undefined && techn !== null) { if (typeof techn === 'object') { let [key, value] = Object.entries(techn)[0]; old[key] = value; } else { old.techn = techn; } } if (legendText !== undefined && legendText !== null) { if (typeof legendText === 'object') { let [key, value] = Object.entries(legendText)[0]; old[key] = value; } else { old.legendText = legendText; } } if (legendSprite !== undefined && legendSprite !== null) { if (typeof legendSprite === 'object') { let [key, value] = Object.entries(legendSprite)[0]; old[key] = value; } else { old.legendSprite = legendSprite; } } }; //textColor, lineColor, ?offsetX, ?offsetY export const updateRelStyle = function ( typeC4Shape, from, to, textColor, lineColor, offsetX, offsetY ) { const old = rels.find((rel) => rel.from === from && rel.to === to); if (old === undefined) { return; } if (textColor !== undefined && textColor !== null) { if (typeof textColor === 'object') { let [key, value] = Object.entries(textColor)[0]; old[key] = value; } else { old.textColor = textColor; } } if (lineColor !== undefined && lineColor !== null) { if (typeof lineColor === 'object') { let [key, value] = Object.entries(lineColor)[0]; old[key] = value; } else { old.lineColor = lineColor; } } if (offsetX !== undefined && offsetX !== null) { if (typeof offsetX === 'object') { let [key, value] = Object.entries(offsetX)[0]; old[key] = parseInt(value); } else { old.offsetX = parseInt(offsetX); } } if (offsetY !== undefined && offsetY !== null) { if (typeof offsetY === 'object') { let [key, value] = Object.entries(offsetY)[0]; old[key] = parseInt(value); } else { old.offsetY = parseInt(offsetY); } } }; //?c4ShapeInRow, ?c4BoundaryInRow export const updateLayoutConfig = function (typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) { let c4ShapeInRowValue = c4ShapeInRow; let c4BoundaryInRowValue = c4BoundaryInRow; if (typeof c4ShapeInRowParam === 'object') { const value = Object.values(c4ShapeInRowParam)[0]; c4ShapeInRowValue = parseInt(value); } else { c4ShapeInRowValue = parseInt(c4ShapeInRowParam); } if (typeof c4BoundaryInRowParam === 'object') { const value = Object.values(c4BoundaryInRowParam)[0]; c4BoundaryInRowValue = parseInt(value); } else { c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam); } if (c4ShapeInRowValue >= 1) c4ShapeInRow = c4ShapeInRowValue; if (c4BoundaryInRowValue >= 1) c4BoundaryInRow = c4BoundaryInRowValue; }; export const getC4ShapeInRow = function () { return c4ShapeInRow; }; export const getC4BoundaryInRow = function () { return c4BoundaryInRow; }; export const getCurrentBoundaryParse = function () { return currentBoundaryParse; }; export const getParentBoundaryParse = function () { return parentBoundaryParse; }; export const getC4ShapeArray = function (parentBoundary) { if (parentBoundary === undefined || parentBoundary === null) return c4ShapeArray; else return c4ShapeArray.filter((personOrSystem) => { return personOrSystem.parentBoundary === parentBoundary; }); }; export const getC4Shape = function (alias) { return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias); }; export const getC4ShapeKeys = function (parentBoundary) { return Object.keys(getC4ShapeArray(parentBoundary)); }; export const getBoundarys = function (parentBoundary) { if (parentBoundary === undefined || parentBoundary === null) return boundarys; else return boundarys.filter((boundary) => boundary.parentBoundary === parentBoundary); }; export const getRels = function () { return rels; }; export const getTitle = function () { return title; }; export const setWrap = function (wrapSetting) { wrapEnabled = wrapSetting; }; export const autoWrap = function () { return wrapEnabled; }; export const clear = function () { c4ShapeArray = []; boundarys = [ { alias: 'global', label: { text: 'global' }, type: { text: 'global' }, tags: null, link: null, parentBoundary: '', }, ]; parentBoundaryParse = ''; currentBoundaryParse = 'global'; boundaryParseStack = ['']; rels = []; boundaryParseStack = ['']; title = ''; wrapEnabled = false; c4ShapeInRow = 4; c4BoundaryInRow = 2; }; export const LINETYPE = { SOLID: 0, DOTTED: 1, NOTE: 2, SOLID_CROSS: 3, DOTTED_CROSS: 4, SOLID_OPEN: 5, DOTTED_OPEN: 6, LOOP_START: 10, LOOP_END: 11, ALT_START: 12, ALT_ELSE: 13, ALT_END: 14, OPT_START: 15, OPT_END: 16, ACTIVE_START: 17, ACTIVE_END: 18, PAR_START: 19, PAR_AND: 20, PAR_END: 21, RECT_START: 22, RECT_END: 23, SOLID_POINT: 24, DOTTED_POINT: 25, }; export const ARROWTYPE = { FILLED: 0, OPEN: 1, }; export const PLACEMENT = { LEFTOF: 0, RIGHTOF: 1, OVER: 2, }; export const setTitle = function (txt) { let sanitizedText = sanitizeText(txt, configApi.getConfig()); title = sanitizedText; }; export default { addPersonOrSystem, addPersonOrSystemBoundary, addContainer, addContainerBoundary, addComponent, addDeploymentNode, popBoundaryParseStack, addRel, updateElStyle, updateRelStyle, updateLayoutConfig, autoWrap, setWrap, getC4ShapeArray, getC4Shape, getC4ShapeKeys, getBoundarys, getCurrentBoundaryParse, getParentBoundaryParse, getRels, getTitle, getC4Type, getC4ShapeInRow, getC4BoundaryInRow, setAccTitle, getAccTitle, getAccDescription, setAccDescription, parseDirective, getConfig: () => configApi.getConfig().c4, clear, LINETYPE, ARROWTYPE, PLACEMENT, setTitle, setC4Type, // apply, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/c4Detector.ts000066400000000000000000000003271433273745700263200ustar00rootroot00000000000000import type { DiagramDetector } from '../../diagram-api/types'; export const c4Detector: DiagramDetector = (txt) => { return txt.match(/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/) !== null; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/c4Renderer.js000066400000000000000000000543311433273745700263070ustar00rootroot00000000000000import { select } from 'd3'; import svgDraw from './svgDraw'; import { log } from '../../logger'; import { parser } from './parser/c4Diagram'; import common from '../common/common'; import c4Db from './c4Db'; import * as configApi from '../../config'; import assignWithDepth from '../../assignWithDepth'; import { wrapLabel, calculateTextWidth, calculateTextHeight } from '../../utils'; import { configureSvgSize } from '../../setupGraphViewbox'; import addSVGAccessibilityFields from '../../accessibility'; let globalBoundaryMaxX = 0, globalBoundaryMaxY = 0; let c4ShapeInRow = 4; let c4BoundaryInRow = 2; parser.yy = c4Db; let conf = {}; class Bounds { constructor(diagObj) { this.name = ''; this.data = {}; this.data.startx = undefined; this.data.stopx = undefined; this.data.starty = undefined; this.data.stopy = undefined; this.data.widthLimit = undefined; this.nextData = {}; this.nextData.startx = undefined; this.nextData.stopx = undefined; this.nextData.starty = undefined; this.nextData.stopy = undefined; this.nextData.cnt = 0; setConf(diagObj.db.getConfig()); } setData(startx, stopx, starty, stopy) { this.nextData.startx = this.data.startx = startx; this.nextData.stopx = this.data.stopx = stopx; this.nextData.starty = this.data.starty = starty; this.nextData.stopy = this.data.stopy = stopy; } updateVal(obj, key, val, fun) { if (typeof obj[key] === 'undefined') { obj[key] = val; } else { obj[key] = fun(val, obj[key]); } } insert(c4Shape) { this.nextData.cnt = this.nextData.cnt + 1; let _startx = this.nextData.startx === this.nextData.stopx ? this.nextData.stopx + c4Shape.margin : this.nextData.stopx + c4Shape.margin * 2; let _stopx = _startx + c4Shape.width; let _starty = this.nextData.starty + c4Shape.margin * 2; let _stopy = _starty + c4Shape.height; if ( _startx >= this.data.widthLimit || _stopx >= this.data.widthLimit || this.nextData.cnt > c4ShapeInRow ) { _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX; _starty = this.nextData.stopy + c4Shape.margin * 2; this.nextData.stopx = _stopx = _startx + c4Shape.width; this.nextData.starty = this.nextData.stopy; this.nextData.stopy = _stopy = _starty + c4Shape.height; this.nextData.cnt = 1; } c4Shape.x = _startx; c4Shape.y = _starty; this.updateVal(this.data, 'startx', _startx, Math.min); this.updateVal(this.data, 'starty', _starty, Math.min); this.updateVal(this.data, 'stopx', _stopx, Math.max); this.updateVal(this.data, 'stopy', _stopy, Math.max); this.updateVal(this.nextData, 'startx', _startx, Math.min); this.updateVal(this.nextData, 'starty', _starty, Math.min); this.updateVal(this.nextData, 'stopx', _stopx, Math.max); this.updateVal(this.nextData, 'stopy', _stopy, Math.max); } init(diagObj) { this.name = ''; this.data = { startx: undefined, stopx: undefined, starty: undefined, stopy: undefined, widthLimit: undefined, }; this.nextData = { startx: undefined, stopx: undefined, starty: undefined, stopy: undefined, cnt: 0, }; setConf(diagObj.db.getConfig()); } bumpLastMargin(margin) { this.data.stopx += margin; this.data.stopy += margin; } } export const setConf = function (cnf) { assignWithDepth(conf, cnf); if (cnf.fontFamily) { conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily; } if (cnf.fontSize) { conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize; } if (cnf.fontWeight) { conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight; } }; const c4ShapeFont = (cnf, typeC4Shape) => { return { fontFamily: cnf[typeC4Shape + 'FontFamily'], fontSize: cnf[typeC4Shape + 'FontSize'], fontWeight: cnf[typeC4Shape + 'FontWeight'], }; }; const boundaryFont = (cnf) => { return { fontFamily: cnf.boundaryFontFamily, fontSize: cnf.boundaryFontSize, fontWeight: cnf.boundaryFontWeight, }; }; const messageFont = (cnf) => { return { fontFamily: cnf.messageFontFamily, fontSize: cnf.messageFontSize, fontWeight: cnf.messageFontWeight, }; }; /** * @param textType * @param c4Shape * @param c4ShapeTextWrap * @param textConf * @param textLimitWidth */ function calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) { if (!c4Shape[textType].width) { if (c4ShapeTextWrap) { c4Shape[textType].text = wrapLabel(c4Shape[textType].text, textLimitWidth, textConf); c4Shape[textType].textLines = c4Shape[textType].text.split(common.lineBreakRegex).length; // c4Shape[textType].width = calculateTextWidth(c4Shape[textType].text, textConf); c4Shape[textType].width = textLimitWidth; // c4Shape[textType].height = c4Shape[textType].textLines * textConf.fontSize; c4Shape[textType].height = calculateTextHeight(c4Shape[textType].text, textConf); } else { let lines = c4Shape[textType].text.split(common.lineBreakRegex); c4Shape[textType].textLines = lines.length; let lineHeight = 0; c4Shape[textType].height = 0; c4Shape[textType].width = 0; for (let i = 0; i < lines.length; i++) { c4Shape[textType].width = Math.max( calculateTextWidth(lines[i], textConf), c4Shape[textType].width ); lineHeight = calculateTextHeight(lines[i], textConf); c4Shape[textType].height = c4Shape[textType].height + lineHeight; } // c4Shapes[textType].height = c4Shapes[textType].textLines * textConf.fontSize; } } } export const drawBoundary = function (diagram, boundary, bounds) { boundary.x = bounds.data.startx; boundary.y = bounds.data.starty; boundary.width = bounds.data.stopx - bounds.data.startx; boundary.height = bounds.data.stopy - bounds.data.starty; boundary.label.y = conf.c4ShapeMargin - 35; let boundaryTextWrap = boundary.wrap && conf.wrap; let boundaryLabelConf = boundaryFont(conf); boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2; boundaryLabelConf.fontWeight = 'bold'; let textLimitWidth = calculateTextWidth(boundary.label.text, boundaryLabelConf); calcC4ShapeTextWH('label', boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth); svgDraw.drawBoundary(diagram, boundary, conf); }; export const drawC4ShapeArray = function (currentBounds, diagram, c4ShapeArray, c4ShapeKeys) { // Upper Y is relative point let Y = 0; // Draw the c4ShapeArray for (let i = 0; i < c4ShapeKeys.length; i++) { Y = 0; const c4Shape = c4ShapeArray[c4ShapeKeys[i]]; // calc c4 shape type width and height let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2; c4Shape.typeC4Shape.width = calculateTextWidth( '<<' + c4Shape.typeC4Shape.text + '>>', c4ShapeTypeConf ); c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2; c4Shape.typeC4Shape.Y = conf.c4ShapePadding; Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4; // set image width and height c4Shape.x + c4Shape.width / 2 - 24, c4Shape.y + 28 // let imageWidth = 0, // imageHeight = 0, // imageY = 0; // c4Shape.image = { width: 0, height: 0, Y: 0 }; switch (c4Shape.typeC4Shape.text) { case 'person': case 'external_person': c4Shape.image.width = 48; c4Shape.image.height = 48; c4Shape.image.Y = Y; Y = c4Shape.image.Y + c4Shape.image.height; break; } if (c4Shape.sprite) { c4Shape.image.width = 48; c4Shape.image.height = 48; c4Shape.image.Y = Y; Y = c4Shape.image.Y + c4Shape.image.height; } // Y = conf.c4ShapePadding + c4Shape.image.height; let c4ShapeTextWrap = c4Shape.wrap && conf.wrap; let textLimitWidth = conf.width - conf.c4ShapePadding * 2; let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2; c4ShapeLabelConf.fontWeight = 'bold'; calcC4ShapeTextWH('label', c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth); c4Shape['label'].Y = Y + 8; Y = c4Shape['label'].Y + c4Shape['label'].height; if (c4Shape.type && c4Shape.type.text !== '') { c4Shape.type.text = '[' + c4Shape.type.text + ']'; let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); calcC4ShapeTextWH('type', c4Shape, c4ShapeTextWrap, c4ShapeTypeConf, textLimitWidth); c4Shape['type'].Y = Y + 5; Y = c4Shape['type'].Y + c4Shape['type'].height; } else if (c4Shape.techn && c4Shape.techn.text !== '') { c4Shape.techn.text = '[' + c4Shape.techn.text + ']'; let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text); calcC4ShapeTextWH('techn', c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth); c4Shape['techn'].Y = Y + 5; Y = c4Shape['techn'].Y + c4Shape['techn'].height; } let rectHeight = Y; let rectWidth = c4Shape.label.width; if (c4Shape.descr && c4Shape.descr.text !== '') { let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); calcC4ShapeTextWH('descr', c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth); c4Shape['descr'].Y = Y + 20; Y = c4Shape['descr'].Y + c4Shape['descr'].height; rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width); rectHeight = Y - c4Shape['descr'].textLines * 5; } rectWidth = rectWidth + conf.c4ShapePadding; // let rectHeight = c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width); c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height); c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin; currentBounds.insert(c4Shape); svgDraw.drawC4Shape(diagram, c4Shape, conf); } currentBounds.bumpLastMargin(conf.c4ShapeMargin); }; class Point { constructor(x, y) { this.x = x; this.y = y; } } /* * * * Get the intersection of the line between the center point of a rectangle and a point outside the rectangle. * Algorithm idea. * Using a point outside the rectangle as the coordinate origin, the graph is divided into four quadrants, and each quadrant is divided into two cases, with separate treatment on the coordinate axes * 1. The case of coordinate axes. * 1. The case of the negative x-axis * 2. The case of the positive x-axis * 3. The case of the positive y-axis * 4. The negative y-axis case * 2. Quadrant cases. * 2.1. first quadrant: the case where the line intersects the left side of the rectangle; the case where it intersects the lower side of the rectangle * 2.2. second quadrant: the case where the line intersects the right side of the rectangle; the case where it intersects the lower edge of the rectangle * 2.3. third quadrant: the case where the line intersects the right side of the rectangle; the case where it intersects the upper edge of the rectangle * 2.4. fourth quadrant: the case where the line intersects the left side of the rectangle; the case where it intersects the upper side of the rectangle * */ let getIntersectPoint = function (fromNode, endPoint) { let x1 = fromNode.x; let y1 = fromNode.y; let x2 = endPoint.x; let y2 = endPoint.y; let fromCenterX = x1 + fromNode.width / 2; let fromCenterY = y1 + fromNode.height / 2; let dx = Math.abs(x1 - x2); let dy = Math.abs(y1 - y2); let tanDYX = dy / dx; let fromDYX = fromNode.height / fromNode.width; let returnPoint = null; if (y1 == y2 && x1 < x2) { returnPoint = new Point(x1 + fromNode.width, fromCenterY); } else if (y1 == y2 && x1 > x2) { returnPoint = new Point(x1, fromCenterY); } else if (x1 == x2 && y1 < y2) { returnPoint = new Point(fromCenterX, y1 + fromNode.height); } else if (x1 == x2 && y1 > y2) { returnPoint = new Point(fromCenterX, y1); } if (x1 > x2 && y1 < y2) { if (fromDYX >= tanDYX) { returnPoint = new Point(x1, fromCenterY + (tanDYX * fromNode.width) / 2); } else { returnPoint = new Point( fromCenterX - ((dx / dy) * fromNode.height) / 2, y1 + fromNode.height ); } } else if (x1 < x2 && y1 < y2) { // if (fromDYX >= tanDYX) { returnPoint = new Point(x1 + fromNode.width, fromCenterY + (tanDYX * fromNode.width) / 2); } else { returnPoint = new Point( fromCenterX + ((dx / dy) * fromNode.height) / 2, y1 + fromNode.height ); } } else if (x1 < x2 && y1 > y2) { if (fromDYX >= tanDYX) { returnPoint = new Point(x1 + fromNode.width, fromCenterY - (tanDYX * fromNode.width) / 2); } else { returnPoint = new Point(fromCenterX + ((fromNode.height / 2) * dx) / dy, y1); } } else if (x1 > x2 && y1 > y2) { if (fromDYX >= tanDYX) { returnPoint = new Point(x1, fromCenterY - (fromNode.width / 2) * tanDYX); } else { returnPoint = new Point(fromCenterX - ((fromNode.height / 2) * dx) / dy, y1); } } return returnPoint; }; let getIntersectPoints = function (fromNode, endNode) { let endIntersectPoint = { x: 0, y: 0 }; endIntersectPoint.x = endNode.x + endNode.width / 2; endIntersectPoint.y = endNode.y + endNode.height / 2; let startPoint = getIntersectPoint(fromNode, endIntersectPoint); endIntersectPoint.x = fromNode.x + fromNode.width / 2; endIntersectPoint.y = fromNode.y + fromNode.height / 2; let endPoint = getIntersectPoint(endNode, endIntersectPoint); return { startPoint: startPoint, endPoint: endPoint }; }; export const drawRels = function (diagram, rels, getC4ShapeObj, diagObj) { let i = 0; for (let rel of rels) { i = i + 1; let relTextWrap = rel.wrap && conf.wrap; let relConf = messageFont(conf); let diagramType = diagObj.db.getC4Type(); if (diagramType === 'C4Dynamic') rel.label.text = i + ': ' + rel.label.text; let textLimitWidth = calculateTextWidth(rel.label.text, relConf); calcC4ShapeTextWH('label', rel, relTextWrap, relConf, textLimitWidth); if (rel.techn && rel.techn.text !== '') { textLimitWidth = calculateTextWidth(rel.techn.text, relConf); calcC4ShapeTextWH('techn', rel, relTextWrap, relConf, textLimitWidth); } if (rel.descr && rel.descr.text !== '') { textLimitWidth = calculateTextWidth(rel.descr.text, relConf); calcC4ShapeTextWH('descr', rel, relTextWrap, relConf, textLimitWidth); } let fromNode = getC4ShapeObj(rel.from); let endNode = getC4ShapeObj(rel.to); let points = getIntersectPoints(fromNode, endNode); rel.startPoint = points.startPoint; rel.endPoint = points.endPoint; } svgDraw.drawRels(diagram, rels, conf); }; /** * @param diagram * @param parentBoundaryAlias * @param parentBounds * @param currentBoundarys * @param diagObj */ function drawInsideBoundary(diagram, parentBoundaryAlias, parentBounds, currentBoundarys, diagObj) { let currentBounds = new Bounds(diagObj); // Calculate the width limit of the boundar. label/type 的长度, currentBounds.data.widthLimit = parentBounds.data.widthLimit / Math.min(c4BoundaryInRow, currentBoundarys.length); // Math.min( // conf.width * conf.c4ShapeInRow + conf.c4ShapeMargin * conf.c4ShapeInRow * 2, // parentBounds.data.widthLimit / Math.min(conf.c4BoundaryInRow, currentBoundarys.length) // ); for (let i = 0; i < currentBoundarys.length; i++) { let currentBoundary = currentBoundarys[i]; let Y = 0; currentBoundary.image = { width: 0, height: 0, Y: 0 }; if (currentBoundary.sprite) { currentBoundary.image.width = 48; currentBoundary.image.height = 48; currentBoundary.image.Y = Y; Y = currentBoundary.image.Y + currentBoundary.image.height; } let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap; let currentBoundaryLabelConf = boundaryFont(conf); currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2; currentBoundaryLabelConf.fontWeight = 'bold'; calcC4ShapeTextWH( 'label', currentBoundary, currentBoundaryTextWrap, currentBoundaryLabelConf, currentBounds.data.widthLimit ); currentBoundary['label'].Y = Y + 8; Y = currentBoundary['label'].Y + currentBoundary['label'].height; if (currentBoundary.type && currentBoundary.type.text !== '') { currentBoundary.type.text = '[' + currentBoundary.type.text + ']'; let currentBoundaryTypeConf = boundaryFont(conf); calcC4ShapeTextWH( 'type', currentBoundary, currentBoundaryTextWrap, currentBoundaryTypeConf, currentBounds.data.widthLimit ); currentBoundary['type'].Y = Y + 5; Y = currentBoundary['type'].Y + currentBoundary['type'].height; } if (currentBoundary.descr && currentBoundary.descr.text !== '') { let currentBoundaryDescrConf = boundaryFont(conf); currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2; calcC4ShapeTextWH( 'descr', currentBoundary, currentBoundaryTextWrap, currentBoundaryDescrConf, currentBounds.data.widthLimit ); currentBoundary['descr'].Y = Y + 20; Y = currentBoundary['descr'].Y + currentBoundary['descr'].height; } if (i == 0 || i % c4BoundaryInRow === 0) { // Calculate the drawing start point of the currentBoundarys. let _x = parentBounds.data.startx + conf.diagramMarginX; let _y = parentBounds.data.stopy + conf.diagramMarginY + Y; currentBounds.setData(_x, _x, _y, _y); } else { // Calculate the drawing start point of the currentBoundarys. let _x = currentBounds.data.stopx !== currentBounds.data.startx ? currentBounds.data.stopx + conf.diagramMarginX : currentBounds.data.startx; let _y = currentBounds.data.starty; currentBounds.setData(_x, _x, _y, _y); } currentBounds.name = currentBoundary.alias; let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias); let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias); if (currentPersonOrSystemKeys.length > 0) { drawC4ShapeArray( currentBounds, diagram, currentPersonOrSystemArray, currentPersonOrSystemKeys ); } parentBoundaryAlias = currentBoundary.alias; let nextCurrentBoundarys = diagObj.db.getBoundarys(parentBoundaryAlias); if (nextCurrentBoundarys.length > 0) { // draw boundary inside currentBoundary // bounds.init(); // parentBoundaryWidthLimit = bounds.data.stopx - bounds.startx; drawInsideBoundary( diagram, parentBoundaryAlias, currentBounds, nextCurrentBoundarys, diagObj ); } // draw boundary if (currentBoundary.alias !== 'global') drawBoundary(diagram, currentBoundary, currentBounds); parentBounds.data.stopy = Math.max( currentBounds.data.stopy + conf.c4ShapeMargin, parentBounds.data.stopy ); parentBounds.data.stopx = Math.max( currentBounds.data.stopx + conf.c4ShapeMargin, parentBounds.data.stopx ); globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx); globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy); } } /** * Draws a sequenceDiagram in the tag with id: id based on the graph definition in text. * * @param {any} _text * @param {any} id * @param {any} _version * @param diagObj */ export const draw = function (_text, id, _version, diagObj) { conf = configApi.getConfig().c4; const securityLevel = configApi.getConfig().securityLevel; // Handle root and Document for when rendering in sanbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); let db = diagObj.db; diagObj.db.setWrap(conf.wrap); c4ShapeInRow = db.getC4ShapeInRow(); c4BoundaryInRow = db.getC4BoundaryInRow(); log.debug(`C:${JSON.stringify(conf, null, 2)}`); const diagram = securityLevel === 'sandbox' ? root.select(`[id="${id}"]`) : select(`[id="${id}"]`); svgDraw.insertComputerIcon(diagram); svgDraw.insertDatabaseIcon(diagram); svgDraw.insertClockIcon(diagram); let screenBounds = new Bounds(diagObj); screenBounds.setData( conf.diagramMarginX, conf.diagramMarginX, conf.diagramMarginY, conf.diagramMarginY ); screenBounds.data.widthLimit = screen.availWidth; globalBoundaryMaxX = conf.diagramMarginX; globalBoundaryMaxY = conf.diagramMarginY; const title = diagObj.db.getTitle(); let currentBoundarys = diagObj.db.getBoundarys(''); // switch (c4type) { // case 'C4Context': drawInsideBoundary(diagram, '', screenBounds, currentBoundarys, diagObj); // break; // } // The arrow head definition is attached to the svg once svgDraw.insertArrowHead(diagram); svgDraw.insertArrowEnd(diagram); svgDraw.insertArrowCrossHead(diagram); svgDraw.insertArrowFilledHead(diagram); drawRels(diagram, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj); screenBounds.data.stopx = globalBoundaryMaxX; screenBounds.data.stopy = globalBoundaryMaxY; const box = screenBounds.data; // Make sure the height of the diagram supports long menus. let boxHeight = box.stopy - box.starty; let height = boxHeight + 2 * conf.diagramMarginY; // Make sure the width of the diagram supports wide menus. let boxWidth = box.stopx - box.startx; const width = boxWidth + 2 * conf.diagramMarginX; if (title) { diagram .append('text') .text(title) .attr('x', (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX) .attr('y', box.starty + conf.diagramMarginY); } configureSvgSize(diagram, height, width, conf.useMaxWidth); const extraVertForTitle = title ? 60 : 0; diagram.attr( 'viewBox', box.startx - conf.diagramMarginX + ' -' + (conf.diagramMarginY + extraVertForTitle) + ' ' + width + ' ' + (height + extraVertForTitle) ); addSVGAccessibilityFields(parser.yy, diagram, id); log.debug(`models:`, box); }; export default { drawPersonOrSystemArray: drawC4ShapeArray, drawBoundary, setConf, draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/parser/000077500000000000000000000000001433273745700252425ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/parser/c4Boundary.spec.js000066400000000000000000000051301433273745700305420ustar00rootroot00000000000000import c4Db from '../c4Db'; import c4 from './c4Diagram.jison'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe.each(['Boundary'])('parsing a C4 %s', function (macroName) { beforeEach(function () { c4.parser.yy = c4Db; c4.parser.yy.clear(); }); it('should parse a C4 diagram with one Boundary correctly', function () { c4.parser.parse(`C4Context title System Context diagram for Internet Banking System ${macroName}(b1, "BankBoundary") { System(SystemAA, "Internet Banking System") }`); const yy = c4.parser.yy; const boundaries = yy.getBoundarys(); expect(boundaries.length).toBe(2); const boundary = boundaries[1]; expect(boundary).toEqual({ alias: 'b1', label: { text: 'BankBoundary', }, // TODO: Why are link, and tags undefined instead of not appearing at all? // Compare to Person where they don't show up. link: undefined, tags: undefined, parentBoundary: 'global', type: { // TODO: Why is this `system` instead of `boundary`? text: 'system', }, wrap: false, }); }); it('should parse the alias', function () { c4.parser.parse(`C4Context ${macroName}(b1, "BankBoundary") { System(SystemAA, "Internet Banking System") }`); expect(c4.parser.yy.getBoundarys()[1]).toMatchObject({ alias: 'b1', }); }); it('should parse the label', function () { c4.parser.parse(`C4Context ${macroName}(b1, "BankBoundary") { System(SystemAA, "Internet Banking System") }`); expect(c4.parser.yy.getBoundarys()[1]).toMatchObject({ label: { text: 'BankBoundary', }, }); }); it('should parse the type', function () { c4.parser.parse(`C4Context ${macroName}(b1, "", "company") { System(SystemAA, "Internet Banking System") }`); expect(c4.parser.yy.getBoundarys()[1]).toMatchObject({ type: { text: 'company' }, }); }); it('should parse a link', function () { c4.parser.parse(`C4Context ${macroName}(b1, $link="https://github.com/mermaidjs") { System(SystemAA, "Internet Banking System") }`); expect(c4.parser.yy.getBoundarys()[1]).toMatchObject({ label: { text: { link: 'https://github.com/mermaidjs', }, }, }); }); it('should parse tags', function () { c4.parser.parse(`C4Context ${macroName}(b1, $tags="tag1,tag2") { System(SystemAA, "Internet Banking System") }`); expect(c4.parser.yy.getBoundarys()[1]).toMatchObject({ label: { text: { tags: 'tag1,tag2', }, }, }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/parser/c4Diagram.jison000066400000000000000000000372121433273745700301060ustar00rootroot00000000000000/** mermaid * https://mermaidjs.github.io/ * (c) 2022 mzhx.meng@gmail.com * MIT license. */ /* lexical grammar */ %lex /* context */ %x person %x person_ext %x system %x system_db %x system_queue %x system_ext %x system_ext_db %x system_ext_queue %x boundary %x enterprise_boundary %x system_boundary %x rel %x birel %x rel_u %x rel_d %x rel_l %x rel_r /* container */ %x container %x container_db %x container_queue %x container_ext %x container_ext_db %x container_ext_queue %x container_boundary /* component */ %x component %x component_db %x component_queue %x component_ext %x component_ext_db %x component_ext_queue /* Dynamic diagram */ %x rel_index %x index /* Deployment diagram */ %x node %x node_l %x node_r /* Relationship Types */ %x rel %x rel_bi %x rel_u %x rel_d %x rel_l %x rel_r %x rel_b /* Custom tags/stereotypes */ %x update_el_style %x update_rel_style %x update_layout_config %x attribute %x string %x string_kv %x string_kv_key %x string_kv_value %x open_directive %x type_directive %x arg_directive %x close_directive %x acc_title %x acc_descr %x acc_descr_multiline %% \%\%\{ { this.begin('open_directive'); return 'open_directive'; } .*direction\s+TB[^\n]* return 'direction_tb'; .*direction\s+BT[^\n]* return 'direction_bt'; .*direction\s+RL[^\n]* return 'direction_rl'; .*direction\s+LR[^\n]* return 'direction_lr'; ((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } ":" { this.popState(); this.begin('arg_directive'); return ':'; } \}\%\% { this.popState(); this.popState(); return 'close_directive'; } ((?:(?!\}\%\%).|\n)*) return 'arg_directive'; "title"\s[^#\n;]+ return 'title'; "accDescription"\s[^#\n;]+ return 'accDescription'; accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} [\}] { this.popState(); } [^\}]* return "acc_descr_multiline_value"; \%\%(?!\{)*[^\n]*(\r?\n?)+ /* skip comments */ \%\%[^\n]*(\r?\n)* c /* skip comments */ \s*(\r?\n)+ return 'NEWLINE'; \s+ /* skip whitespace */ "C4Context" return 'C4_CONTEXT'; "C4Container" return 'C4_CONTAINER'; "C4Component" return 'C4_COMPONENT'; "C4Dynamic" return 'C4_DYNAMIC'; "C4Deployment" return 'C4_DEPLOYMENT'; "Person_Ext" { this.begin("person_ext"); return 'PERSON_EXT';} "Person" { this.begin("person"); return 'PERSON';} "SystemQueue_Ext" { this.begin("system_ext_queue"); return 'SYSTEM_EXT_QUEUE';} "SystemDb_Ext" { this.begin("system_ext_db"); return 'SYSTEM_EXT_DB';} "System_Ext" { this.begin("system_ext"); return 'SYSTEM_EXT';} "SystemQueue" { this.begin("system_queue"); return 'SYSTEM_QUEUE';} "SystemDb" { this.begin("system_db"); return 'SYSTEM_DB';} "System" { this.begin("system"); return 'SYSTEM';} "Boundary" { this.begin("boundary"); return 'BOUNDARY';} "Enterprise_Boundary" { this.begin("enterprise_boundary"); return 'ENTERPRISE_BOUNDARY';} "System_Boundary" { this.begin("system_boundary"); return 'SYSTEM_BOUNDARY';} "ContainerQueue_Ext" { this.begin("container_ext_queue"); return 'CONTAINER_EXT_QUEUE';} "ContainerDb_Ext" { this.begin("container_ext_db"); return 'CONTAINER_EXT_DB';} "Container_Ext" { this.begin("container_ext"); return 'CONTAINER_EXT';} "ContainerQueue" { this.begin("container_queue"); return 'CONTAINER_QUEUE';} "ContainerDb" { this.begin("container_db"); return 'CONTAINER_DB';} "Container" { this.begin("container"); return 'CONTAINER';} "Container_Boundary" { this.begin("container_boundary"); return 'CONTAINER_BOUNDARY';} "ComponentQueue_Ext" { this.begin("component_ext_queue"); return 'COMPONENT_EXT_QUEUE';} "ComponentDb_Ext" { this.begin("component_ext_db"); return 'COMPONENT_EXT_DB';} "Component_Ext" { this.begin("component_ext"); return 'COMPONENT_EXT';} "ComponentQueue" { this.begin("component_queue"); return 'COMPONENT_QUEUE';} "ComponentDb" { this.begin("component_db"); return 'COMPONENT_DB';} "Component" { this.begin("component"); return 'COMPONENT';} "Deployment_Node" { this.begin("node"); return 'NODE';} "Node" { this.begin("node"); return 'NODE';} "Node_L" { this.begin("node_l"); return 'NODE_L';} "Node_R" { this.begin("node_r"); return 'NODE_R';} "Rel" { this.begin("rel"); return 'REL';} "BiRel" { this.begin("birel"); return 'BIREL';} "Rel_Up" { this.begin("rel_u"); return 'REL_U';} "Rel_U" { this.begin("rel_u"); return 'REL_U';} "Rel_Down" { this.begin("rel_d"); return 'REL_D';} "Rel_D" { this.begin("rel_d"); return 'REL_D';} "Rel_Left" { this.begin("rel_l"); return 'REL_L';} "Rel_L" { this.begin("rel_l"); return 'REL_L';} "Rel_Right" { this.begin("rel_r"); return 'REL_R';} "Rel_R" { this.begin("rel_r"); return 'REL_R';} "Rel_Back" { this.begin("rel_b"); return 'REL_B';} "RelIndex" { this.begin("rel_index"); return 'REL_INDEX';} "UpdateElementStyle" { this.begin("update_el_style"); return 'UPDATE_EL_STYLE';} "UpdateRelStyle" { this.begin("update_rel_style"); return 'UPDATE_REL_STYLE';} "UpdateLayoutConfig" { this.begin("update_layout_config"); return 'UPDATE_LAYOUT_CONFIG';} <> return "EOF_IN_STRUCT"; [(][ ]*[,] { this.begin("attribute"); return "ATTRIBUTE_EMPTY";} [(] { this.begin("attribute"); } [)] { this.popState();this.popState();} ",," { return 'ATTRIBUTE_EMPTY';} "," { } [ ]*["]["] { return 'ATTRIBUTE_EMPTY';} [ ]*["] { this.begin("string");} ["] { this.popState(); } [^"]* { return "STR";} [ ]*[\$] { this.begin("string_kv");} [^=]* { this.begin("string_kv_key"); return "STR_KEY";} [=][ ]*["] { this.popState(); this.begin("string_kv_value"); } [^"]+ { return "STR_VALUE";} ["] { this.popState(); this.popState(); } [^,]+ { return "STR";} '{' { /* this.begin("lbrace"); */ return "LBRACE";} '}' { /* this.popState(); */ return "RBRACE";} [\s]+ return 'SPACE'; [\n\r]+ return 'EOL'; <> return 'EOF'; /lex /* operator associations and precedence */ %left '^' %start start %% /* language grammar */ start : mermaidDoc | direction | directive start ; direction : direction_tb { yy.setDirection('TB');} | direction_bt { yy.setDirection('BT');} | direction_rl { yy.setDirection('RL');} | direction_lr { yy.setDirection('LR');} ; mermaidDoc : graphConfig ; directive : openDirective typeDirective closeDirective NEWLINE | openDirective typeDirective ':' argDirective closeDirective NEWLINE ; openDirective : open_directive { yy.parseDirective('%%{', 'open_directive'); } ; typeDirective : type_directive { } ; argDirective : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } ; closeDirective : close_directive { yy.parseDirective('}%%', 'close_directive', 'c4Context'); } ; graphConfig : C4_CONTEXT NEWLINE statements EOF {yy.setC4Type($1)} | C4_CONTAINER NEWLINE statements EOF {yy.setC4Type($1)} | C4_COMPONENT NEWLINE statements EOF {yy.setC4Type($1)} | C4_DYNAMIC NEWLINE statements EOF {yy.setC4Type($1)} | C4_DEPLOYMENT NEWLINE statements EOF {yy.setC4Type($1)} ; statements : otherStatements | diagramStatements | otherStatements diagramStatements ; otherStatements : otherStatement | otherStatement NEWLINE | otherStatement NEWLINE otherStatements ; otherStatement : title {yy.setTitle($1.substring(6));$$=$1.substring(6);} | accDescription {yy.setAccDescription($1.substring(15));$$=$1.substring(15);} | acc_title acc_title_value { $$=$2.trim();yy.setTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } ; boundaryStatement : boundaryStartStatement diagramStatements boundaryStopStatement ; boundaryStartStatement : boundaryStart LBRACE NEWLINE | boundaryStart NEWLINE LBRACE | boundaryStart NEWLINE LBRACE NEWLINE ; boundaryStart : ENTERPRISE_BOUNDARY attributes {$2.splice(2, 0, 'ENTERPRISE'); yy.addPersonOrSystemBoundary(...$2); $$=$2;} | SYSTEM_BOUNDARY attributes {$2.splice(2, 0, 'ENTERPRISE'); yy.addPersonOrSystemBoundary(...$2); $$=$2;} | BOUNDARY attributes {yy.addPersonOrSystemBoundary(...$2); $$=$2;} | CONTAINER_BOUNDARY attributes {$2.splice(2, 0, 'CONTAINER'); yy.addContainerBoundary(...$2); $$=$2;} | NODE attributes {yy.addDeploymentNode('node', ...$2); $$=$2;} | NODE_L attributes {yy.addDeploymentNode('nodeL', ...$2); $$=$2;} | NODE_R attributes {yy.addDeploymentNode('nodeR', ...$2); $$=$2;} ; boundaryStopStatement : RBRACE { yy.popBoundaryParseStack() } ; diagramStatements : diagramStatement | diagramStatement NEWLINE | diagramStatement NEWLINE statements ; diagramStatement : PERSON attributes {yy.addPersonOrSystem('person', ...$2); $$=$2;} | PERSON_EXT attributes {yy.addPersonOrSystem('external_person', ...$2); $$=$2;} | SYSTEM attributes {yy.addPersonOrSystem('system', ...$2); $$=$2;} | SYSTEM_DB attributes {yy.addPersonOrSystem('system_db', ...$2); $$=$2;} | SYSTEM_QUEUE attributes {yy.addPersonOrSystem('system_queue', ...$2); $$=$2;} | SYSTEM_EXT attributes {yy.addPersonOrSystem('external_system', ...$2); $$=$2;} | SYSTEM_EXT_DB attributes {yy.addPersonOrSystem('external_system_db', ...$2); $$=$2;} | SYSTEM_EXT_QUEUE attributes {yy.addPersonOrSystem('external_system_queue', ...$2); $$=$2;} | CONTAINER attributes {yy.addContainer('container', ...$2); $$=$2;} | CONTAINER_DB attributes {yy.addContainer('container_db', ...$2); $$=$2;} | CONTAINER_QUEUE attributes {yy.addContainer('container_queue', ...$2); $$=$2;} | CONTAINER_EXT attributes {yy.addContainer('external_container', ...$2); $$=$2;} | CONTAINER_EXT_DB attributes {yy.addContainer('external_container_db', ...$2); $$=$2;} | CONTAINER_EXT_QUEUE attributes {yy.addContainer('external_container_queue', ...$2); $$=$2;} | COMPONENT attributes {yy.addComponent('component', ...$2); $$=$2;} | COMPONENT_DB attributes {yy.addComponent('component_db', ...$2); $$=$2;} | COMPONENT_QUEUE attributes {yy.addComponent('component_queue', ...$2); $$=$2;} | COMPONENT_EXT attributes {yy.addComponent('external_component', ...$2); $$=$2;} | COMPONENT_EXT_DB attributes {yy.addComponent('external_component_db', ...$2); $$=$2;} | COMPONENT_EXT_QUEUE attributes {yy.addComponent('external_component_queue', ...$2); $$=$2;} | boundaryStatement | REL attributes {yy.addRel('rel', ...$2); $$=$2;} | BIREL attributes {yy.addRel('birel', ...$2); $$=$2;} | REL_U attributes {yy.addRel('rel_u', ...$2); $$=$2;} | REL_D attributes {yy.addRel('rel_d', ...$2); $$=$2;} | REL_L attributes {yy.addRel('rel_l', ...$2); $$=$2;} | REL_R attributes {yy.addRel('rel_r', ...$2); $$=$2;} | REL_B attributes {yy.addRel('rel_b', ...$2); $$=$2;} | REL_INDEX attributes {$2.splice(0, 1); yy.addRel('rel', ...$2); $$=$2;} | UPDATE_EL_STYLE attributes {yy.updateElStyle('update_el_style', ...$2); $$=$2;} | UPDATE_REL_STYLE attributes {yy.updateRelStyle('update_rel_style', ...$2); $$=$2;} | UPDATE_LAYOUT_CONFIG attributes {yy.updateLayoutConfig('update_layout_config', ...$2); $$=$2;} ; attributes : attribute { $$ = [$1]; } | attribute attributes { $2.unshift($1); $$=$2;} ; attribute : STR { $$ = $1.trim(); } | STR_KEY STR_VALUE { let kv={}; kv[$1.trim()]=$2.trim(); $$=kv; } | ATTRIBUTE { $$ = $1.trim(); } | ATTRIBUTE_EMPTY { $$ = ""; } ; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/parser/c4Diagram.spec.js000066400000000000000000000030611433273745700303240ustar00rootroot00000000000000import c4Db from '../c4Db'; import c4 from './c4Diagram.jison'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('parsing a C4 diagram', function () { beforeEach(function () { c4.parser.yy = c4Db; c4.parser.yy.clear(); }); it('should handle a trailing whitespaces after statements', function () { const whitespace = ' '; const rendered = c4.parser.parse(`C4Context${whitespace} title System Context diagram for Internet Banking System${whitespace} Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")${whitespace}`); expect(rendered).toBe(true); }); it('should handle parameter names that are keywords', function () { c4.parser.parse(`C4Context title title Person(Person, "Person", "Person")`); const yy = c4.parser.yy; expect(yy.getTitle()).toBe('title'); const shapes = yy.getC4ShapeArray(); expect(shapes.length).toBe(1); const onlyShape = shapes[0]; expect(onlyShape.alias).toBe('Person'); expect(onlyShape.descr.text).toBe('Person'); expect(onlyShape.label.text).toBe('Person'); }); it('should allow default in the parameters', function () { c4.parser.parse(`C4Context Person(default, "default", "default")`); const yy = c4.parser.yy; const shapes = yy.getC4ShapeArray(); expect(shapes.length).toBe(1); const onlyShape = shapes[0]; expect(onlyShape.alias).toBe('default'); expect(onlyShape.descr.text).toBe('default'); expect(onlyShape.label.text).toBe('default'); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/parser/c4Person.spec.js000066400000000000000000000051741433273745700302350ustar00rootroot00000000000000import c4Db from '../c4Db'; import c4 from './c4Diagram.jison'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('parsing a C4 Person', function () { beforeEach(function () { c4.parser.yy = c4Db; c4.parser.yy.clear(); }); it('should parse a C4 diagram with one Person correctly', function () { c4.parser.parse(`C4Context title System Context diagram for Internet Banking System Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")`); const yy = c4.parser.yy; const shapes = yy.getC4ShapeArray(); expect(shapes.length).toBe(1); const onlyShape = shapes[0]; expect(onlyShape).toEqual({ alias: 'customerA', descr: { text: 'A customer of the bank, with personal bank accounts.', }, label: { text: 'Banking Customer A', }, parentBoundary: 'global', typeC4Shape: { text: 'person', }, wrap: false, }); }); it('should parse the alias', function () { c4.parser.parse(`C4Context Person(customerA, "Banking Customer A")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ alias: 'customerA', }); }); it('should parse the label', function () { c4.parser.parse(`C4Context Person(customerA, "Banking Customer A")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ label: { text: 'Banking Customer A', }, }); }); it('should parse the description', function () { c4.parser.parse(`C4Context Person(customerA, "", "A customer of the bank, with personal bank accounts.")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ descr: { text: 'A customer of the bank, with personal bank accounts.', }, }); }); it('should parse a sprite', function () { c4.parser.parse(`C4Context Person(customerA, $sprite="users")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ label: { text: { sprite: 'users', }, }, }); }); it('should parse a link', function () { c4.parser.parse(`C4Context Person(customerA, $link="https://github.com/mermaidjs")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ label: { text: { link: 'https://github.com/mermaidjs', }, }, }); }); it('should parse tags', function () { c4.parser.parse(`C4Context Person(customerA, $tags="tag1,tag2")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ label: { text: { tags: 'tag1,tag2', }, }, }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/parser/c4PersonExt.spec.js000066400000000000000000000056041433273745700307140ustar00rootroot00000000000000import c4Db from '../c4Db'; import c4 from './c4Diagram.jison'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('parsing a C4 Person_Ext', function () { beforeEach(function () { c4.parser.yy = c4Db; c4.parser.yy.clear(); }); it('should parse a C4 diagram with one Person_Ext correctly', function () { c4.parser.parse(`C4Context title System Context diagram for Internet Banking System Person_Ext(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")`); const yy = c4.parser.yy; const shapes = yy.getC4ShapeArray(); expect(shapes.length).toBe(1); const onlyShape = shapes[0]; expect(onlyShape).toEqual({ alias: 'customerA', descr: { text: 'A customer of the bank, with personal bank accounts.', }, label: { text: 'Banking Customer A', }, // TODO: Why are link, sprite, and tags undefined instead of not appearing at all? // Compare to Person where they don't show up. link: undefined, sprite: undefined, tags: undefined, parentBoundary: 'global', typeC4Shape: { text: 'external_person', }, wrap: false, }); }); it('should parse the alias', function () { c4.parser.parse(`C4Context Person_Ext(customerA, "Banking Customer A")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ alias: 'customerA', }); }); it('should parse the label', function () { c4.parser.parse(`C4Context Person_Ext(customerA, "Banking Customer A")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ label: { text: 'Banking Customer A', }, }); }); it('should parse the description', function () { c4.parser.parse(`C4Context Person_Ext(customerA, "", "A customer of the bank, with personal bank accounts.")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ descr: { text: 'A customer of the bank, with personal bank accounts.', }, }); }); it('should parse a sprite', function () { c4.parser.parse(`C4Context Person_Ext(customerA, $sprite="users")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ label: { text: { sprite: 'users', }, }, }); }); it('should parse a link', function () { c4.parser.parse(`C4Context Person_Ext(customerA, $link="https://github.com/mermaidjs")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ label: { text: { link: 'https://github.com/mermaidjs', }, }, }); }); it('should parse tags', function () { c4.parser.parse(`C4Context Person_Ext(customerA, $tags="tag1,tag2")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ label: { text: { tags: 'tag1,tag2', }, }, }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/parser/c4System.spec.js000066400000000000000000000063771433273745700302610ustar00rootroot00000000000000import c4Db from '../c4Db'; import c4 from './c4Diagram.jison'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe.each([ ['System', 'system'], ['SystemDb', 'system_db'], ['SystemQueue', 'system_queue'], ['System_Ext', 'external_system'], ['SystemDb_Ext', 'external_system_db'], ['SystemQueue_Ext', 'external_system_queue'], ])('parsing a C4 %s', function (macroName, elementName) { beforeEach(function () { c4.parser.yy = c4Db; c4.parser.yy.clear(); }); it('should parse a C4 diagram with one System correctly', function () { c4.parser.parse(`C4Context title System Context diagram for Internet Banking System ${macroName}(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")`); const yy = c4.parser.yy; const shapes = yy.getC4ShapeArray(); expect(shapes.length).toBe(1); const onlyShape = shapes[0]; expect(onlyShape).toEqual({ alias: 'SystemAA', descr: { text: 'Allows customers to view information about their bank accounts, and make payments.', }, label: { text: 'Internet Banking System', }, // TODO: Why are link, sprite, and tags undefined instead of not appearing at all? // Compare to Person where they don't show up. link: undefined, sprite: undefined, tags: undefined, parentBoundary: 'global', typeC4Shape: { text: elementName, }, wrap: false, }); }); it('should parse the alias', function () { c4.parser.parse(`C4Context ${macroName}(SystemAA, "Internet Banking System")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ alias: 'SystemAA', }); }); it('should parse the label', function () { c4.parser.parse(`C4Context ${macroName}(SystemAA, "Internet Banking System")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ label: { text: 'Internet Banking System', }, }); }); it('should parse the description', function () { c4.parser.parse(`C4Context ${macroName}(SystemAA, "", "Allows customers to view information about their bank accounts, and make payments.")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ descr: { text: 'Allows customers to view information about their bank accounts, and make payments.', }, }); }); it('should parse a sprite', function () { c4.parser.parse(`C4Context ${macroName}(SystemAA, $sprite="users")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ label: { text: { sprite: 'users', }, }, }); }); it('should parse a link', function () { c4.parser.parse(`C4Context ${macroName}(SystemAA, $link="https://github.com/mermaidjs")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ label: { text: { link: 'https://github.com/mermaidjs', }, }, }); }); it('should parse tags', function () { c4.parser.parse(`C4Context ${macroName}(SystemAA, $tags="tag1,tag2")`); expect(c4.parser.yy.getC4ShapeArray()[0]).toMatchObject({ label: { text: { tags: 'tag1,tag2', }, }, }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/styles.js000066400000000000000000000002231433273745700256240ustar00rootroot00000000000000const getStyles = (options) => `.person { stroke: ${options.personBorder}; fill: ${options.personBkg}; } `; export default getStyles; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/c4/svgDraw.js000066400000000000000000001173341433273745700257320ustar00rootroot00000000000000import common from '../common/common'; import { sanitizeUrl } from '@braintree/sanitize-url'; export const drawRect = function (elem, rectData) { const rectElem = elem.append('rect'); rectElem.attr('x', rectData.x); rectElem.attr('y', rectData.y); rectElem.attr('fill', rectData.fill); rectElem.attr('stroke', rectData.stroke); rectElem.attr('width', rectData.width); rectElem.attr('height', rectData.height); rectElem.attr('rx', rectData.rx); rectElem.attr('ry', rectData.ry); if (rectData.attrs !== 'undefined' && rectData.attrs !== null) { for (let attrKey in rectData.attrs) rectElem.attr(attrKey, rectData.attrs[attrKey]); } if (rectData.class !== 'undefined') { rectElem.attr('class', rectData.class); } return rectElem; }; export const drawImage = function (elem, width, height, x, y, link) { const imageElem = elem.append('image'); imageElem.attr('width', width); imageElem.attr('height', height); imageElem.attr('x', x); imageElem.attr('y', y); let sanitizedLink = link.startsWith('data:image/png;base64') ? link : sanitizeUrl(link); imageElem.attr('xlink:href', sanitizedLink); }; export const drawEmbeddedImage = function (elem, x, y, link) { const imageElem = elem.append('use'); imageElem.attr('x', x); imageElem.attr('y', y); var sanitizedLink = sanitizeUrl(link); imageElem.attr('xlink:href', '#' + sanitizedLink); }; export const drawText = function (elem, textData) { let prevTextHeight = 0, textHeight = 0; const lines = textData.text.split(common.lineBreakRegex); let textElems = []; let dy = 0; let yfunc = () => textData.y; if ( typeof textData.valign !== 'undefined' && typeof textData.textMargin !== 'undefined' && textData.textMargin > 0 ) { switch (textData.valign) { case 'top': case 'start': yfunc = () => Math.round(textData.y + textData.textMargin); break; case 'middle': case 'center': yfunc = () => Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2); break; case 'bottom': case 'end': yfunc = () => Math.round( textData.y + (prevTextHeight + textHeight + 2 * textData.textMargin) - textData.textMargin ); break; } } if ( typeof textData.anchor !== 'undefined' && typeof textData.textMargin !== 'undefined' && typeof textData.width !== 'undefined' ) { switch (textData.anchor) { case 'left': case 'start': textData.x = Math.round(textData.x + textData.textMargin); textData.anchor = 'start'; textData.dominantBaseline = 'text-after-edge'; textData.alignmentBaseline = 'middle'; break; case 'middle': case 'center': textData.x = Math.round(textData.x + textData.width / 2); textData.anchor = 'middle'; textData.dominantBaseline = 'middle'; textData.alignmentBaseline = 'middle'; break; case 'right': case 'end': textData.x = Math.round(textData.x + textData.width - textData.textMargin); textData.anchor = 'end'; textData.dominantBaseline = 'text-before-edge'; textData.alignmentBaseline = 'middle'; break; } } for (let i = 0; i < lines.length; i++) { let line = lines[i]; if ( typeof textData.textMargin !== 'undefined' && textData.textMargin === 0 && typeof textData.fontSize !== 'undefined' ) { dy = i * textData.fontSize; } const textElem = elem.append('text'); textElem.attr('x', textData.x); textElem.attr('y', yfunc()); if (typeof textData.anchor !== 'undefined') { textElem .attr('text-anchor', textData.anchor) .attr('dominant-baseline', textData.dominantBaseline) .attr('alignment-baseline', textData.alignmentBaseline); } if (typeof textData.fontFamily !== 'undefined') { textElem.style('font-family', textData.fontFamily); } if (typeof textData.fontSize !== 'undefined') { textElem.style('font-size', textData.fontSize); } if (typeof textData.fontWeight !== 'undefined') { textElem.style('font-weight', textData.fontWeight); } if (typeof textData.fill !== 'undefined') { textElem.attr('fill', textData.fill); } if (typeof textData.class !== 'undefined') { textElem.attr('class', textData.class); } if (typeof textData.dy !== 'undefined') { textElem.attr('dy', textData.dy); } else if (dy !== 0) { textElem.attr('dy', dy); } if (textData.tspan) { const span = textElem.append('tspan'); span.attr('x', textData.x); if (typeof textData.fill !== 'undefined') { span.attr('fill', textData.fill); } span.text(line); } else { textElem.text(line); } if ( typeof textData.valign !== 'undefined' && typeof textData.textMargin !== 'undefined' && textData.textMargin > 0 ) { textHeight += (textElem._groups || textElem)[0][0].getBBox().height; prevTextHeight = textHeight; } textElems.push(textElem); } return textElems; }; export const drawLabel = function (elem, txtObject) { /** * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} cut * @returns {any} */ function genPoints(x, y, width, height, cut) { return ( x + ',' + y + ' ' + (x + width) + ',' + y + ' ' + (x + width) + ',' + (y + height - cut) + ' ' + (x + width - cut * 1.2) + ',' + (y + height) + ' ' + x + ',' + (y + height) ); } const polygon = elem.append('polygon'); polygon.attr('points', genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7)); polygon.attr('class', 'labelBox'); txtObject.y = txtObject.y + txtObject.height / 2; drawText(elem, txtObject); return polygon; }; export const drawRels = (elem, rels, conf) => { const relsElem = elem.append('g'); let i = 0; for (let rel of rels) { let textColor = rel.textColor ? rel.textColor : '#444444'; let strokeColor = rel.lineColor ? rel.lineColor : '#444444'; let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0; let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0; let url = ''; if (i === 0) { let line = relsElem.append('line'); line.attr('x1', rel.startPoint.x); line.attr('y1', rel.startPoint.y); line.attr('x2', rel.endPoint.x); line.attr('y2', rel.endPoint.y); line.attr('stroke-width', '1'); line.attr('stroke', strokeColor); line.style('fill', 'none'); if (rel.type !== 'rel_b') line.attr('marker-end', 'url(' + url + '#arrowhead)'); if (rel.type === 'birel' || rel.type === 'rel_b') line.attr('marker-start', 'url(' + url + '#arrowend)'); i = -1; } else { let line = relsElem.append('path'); line .attr('fill', 'none') .attr('stroke-width', '1') .attr('stroke', strokeColor) .attr( 'd', 'Mstartx,starty Qcontrolx,controly stopx,stopy ' .replaceAll('startx', rel.startPoint.x) .replaceAll('starty', rel.startPoint.y) .replaceAll( 'controlx', rel.startPoint.x + (rel.endPoint.x - rel.startPoint.x) / 2 - (rel.endPoint.x - rel.startPoint.x) / 4 ) .replaceAll('controly', rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2) .replaceAll('stopx', rel.endPoint.x) .replaceAll('stopy', rel.endPoint.y) ); if (rel.type !== 'rel_b') line.attr('marker-end', 'url(' + url + '#arrowhead)'); if (rel.type === 'birel' || rel.type === 'rel_b') line.attr('marker-start', 'url(' + url + '#arrowend)'); } let messageConf = conf.messageFont(); _drawTextCandidateFunc(conf)( rel.label.text, relsElem, Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX, Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + offsetY, rel.label.width, rel.label.height, { fill: textColor }, messageConf ); if (rel.techn && rel.techn.text !== '') { messageConf = conf.messageFont(); _drawTextCandidateFunc(conf)( '[' + rel.techn.text + ']', relsElem, Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX, Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + conf.messageFontSize + 5 + offsetY, Math.max(rel.label.width, rel.techn.width), rel.techn.height, { fill: textColor, 'font-style': 'italic' }, messageConf ); } } }; /** * Draws an boundary in the diagram * * @param {any} elem - The diagram we'll draw to. * @param {any} boundary - The boundary to draw. * @param {any} conf - DrawText implementation discriminator object */ const drawBoundary = function (elem, boundary, conf) { const boundaryElem = elem.append('g'); let fillColor = boundary.bgColor ? boundary.bgColor : 'none'; let strokeColor = boundary.borderColor ? boundary.borderColor : '#444444'; let fontColor = boundary.fontColor ? boundary.fontColor : 'black'; let attrsValue = { 'stroke-width': 1.0, 'stroke-dasharray': '7.0,7.0' }; if (boundary.nodeType) attrsValue = { 'stroke-width': 1.0 }; let rectData = { x: boundary.x, y: boundary.y, fill: fillColor, stroke: strokeColor, width: boundary.width, height: boundary.height, rx: 2.5, ry: 2.5, attrs: attrsValue, }; drawRect(boundaryElem, rectData); // draw label let boundaryConf = conf.boundaryFont(); boundaryConf.fontWeight = 'bold'; boundaryConf.fontSize = boundaryConf.fontSize + 2; boundaryConf.fontColor = fontColor; _drawTextCandidateFunc(conf)( boundary.label.text, boundaryElem, boundary.x, boundary.y + boundary.label.Y, boundary.width, boundary.height, { fill: '#444444' }, boundaryConf ); // draw type if (boundary.type && boundary.type.text !== '') { boundaryConf = conf.boundaryFont(); boundaryConf.fontColor = fontColor; _drawTextCandidateFunc(conf)( boundary.type.text, boundaryElem, boundary.x, boundary.y + boundary.type.Y, boundary.width, boundary.height, { fill: '#444444' }, boundaryConf ); } // draw descr if (boundary.descr && boundary.descr.text !== '') { boundaryConf = conf.boundaryFont(); boundaryConf.fontSize = boundaryConf.fontSize - 2; boundaryConf.fontColor = fontColor; _drawTextCandidateFunc(conf)( boundary.descr.text, boundaryElem, boundary.x, boundary.y + boundary.descr.Y, boundary.width, boundary.height, { fill: '#444444' }, boundaryConf ); } }; export const drawC4Shape = function (elem, c4Shape, conf) { let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf[c4Shape.typeC4Shape.text + '_bg_color']; let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf[c4Shape.typeC4Shape.text + '_border_color']; let fontColor = c4Shape.fontColor ? c4Shape.fontColor : '#FFFFFF'; let personImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII='; switch (c4Shape.typeC4Shape.text) { case 'person': personImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII='; break; case 'external_person': personImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII='; break; } const c4ShapeElem = elem.append('g'); c4ShapeElem.attr('class', 'person-man'); // // draw rect of c4Shape const rect = getNoteRect(); switch (c4Shape.typeC4Shape.text) { case 'person': case 'external_person': case 'system': case 'external_system': case 'container': case 'external_container': case 'component': case 'external_component': rect.x = c4Shape.x; rect.y = c4Shape.y; rect.fill = fillColor; rect.width = c4Shape.width; rect.height = c4Shape.height; rect.style = 'stroke:' + strokeColor + ';stroke-width:0.5;'; rect.rx = 2.5; rect.ry = 2.5; drawRect(c4ShapeElem, rect); break; case 'system_db': case 'external_system_db': case 'container_db': case 'external_container_db': case 'component_db': case 'external_component_db': c4ShapeElem .append('path') .attr('fill', fillColor) .attr('stroke-width', '0.5') .attr('stroke', strokeColor) .attr( 'd', 'Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height' .replaceAll('startx', c4Shape.x) .replaceAll('starty', c4Shape.y) .replaceAll('half', c4Shape.width / 2) .replaceAll('height', c4Shape.height) ); c4ShapeElem .append('path') .attr('fill', 'none') .attr('stroke-width', '0.5') .attr('stroke', strokeColor) .attr( 'd', 'Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10' .replaceAll('startx', c4Shape.x) .replaceAll('starty', c4Shape.y) .replaceAll('half', c4Shape.width / 2) ); break; case 'system_queue': case 'external_system_queue': case 'container_queue': case 'external_container_queue': case 'component_queue': case 'external_component_queue': c4ShapeElem .append('path') .attr('fill', fillColor) .attr('stroke-width', '0.5') .attr('stroke', strokeColor) .attr( 'd', 'Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half' .replaceAll('startx', c4Shape.x) .replaceAll('starty', c4Shape.y) .replaceAll('width', c4Shape.width) .replaceAll('half', c4Shape.height / 2) ); c4ShapeElem .append('path') .attr('fill', 'none') .attr('stroke-width', '0.5') .attr('stroke', strokeColor) .attr( 'd', 'Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half' .replaceAll('startx', c4Shape.x + c4Shape.width) .replaceAll('starty', c4Shape.y) .replaceAll('half', c4Shape.height / 2) ); break; } // draw type of c4Shape let c4ShapeFontConf = getC4ShapeFont(conf, c4Shape.typeC4Shape.text); c4ShapeElem .append('text') .attr('fill', fontColor) .attr('font-family', c4ShapeFontConf.fontFamily) .attr('font-size', c4ShapeFontConf.fontSize - 2) .attr('font-style', 'italic') .attr('lengthAdjust', 'spacing') .attr('textLength', c4Shape.typeC4Shape.width) .attr('x', c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2) .attr('y', c4Shape.y + c4Shape.typeC4Shape.Y) .text('<<' + c4Shape.typeC4Shape.text + '>>'); // draw image/sprite switch (c4Shape.typeC4Shape.text) { case 'person': case 'external_person': drawImage( c4ShapeElem, 48, 48, c4Shape.x + c4Shape.width / 2 - 24, c4Shape.y + c4Shape.image.Y, personImg ); break; } // draw label let textFontConf = conf[c4Shape.typeC4Shape.text + 'Font'](); textFontConf.fontWeight = 'bold'; textFontConf.fontSize = textFontConf.fontSize + 2; textFontConf.fontColor = fontColor; _drawTextCandidateFunc(conf)( c4Shape.label.text, c4ShapeElem, c4Shape.x, c4Shape.y + c4Shape.label.Y, c4Shape.width, c4Shape.height, { fill: fontColor }, textFontConf ); // draw techn/type textFontConf = conf[c4Shape.typeC4Shape.text + 'Font'](); textFontConf.fontColor = fontColor; if (c4Shape.thchn && c4Shape.thchn.text !== '') { _drawTextCandidateFunc(conf)( c4Shape.thchn.text, c4ShapeElem, c4Shape.x, c4Shape.y + c4Shape.thchn.Y, c4Shape.width, c4Shape.height, { fill: fontColor, 'font-style': 'italic' }, textFontConf ); } else if (c4Shape.type && c4Shape.type.text !== '') { _drawTextCandidateFunc(conf)( c4Shape.type.text, c4ShapeElem, c4Shape.x, c4Shape.y + c4Shape.type.Y, c4Shape.width, c4Shape.height, { fill: fontColor, 'font-style': 'italic' }, textFontConf ); } // draw descr if (c4Shape.descr && c4Shape.descr.text !== '') { textFontConf = conf.personFont(); textFontConf.fontColor = fontColor; _drawTextCandidateFunc(conf)( c4Shape.descr.text, c4ShapeElem, c4Shape.x, c4Shape.y + c4Shape.descr.Y, c4Shape.width, c4Shape.height, { fill: fontColor }, textFontConf ); } return c4Shape.height; }; export const insertDatabaseIcon = function (elem) { elem .append('defs') .append('symbol') .attr('id', 'database') .attr('fill-rule', 'evenodd') .attr('clip-rule', 'evenodd') .append('path') .attr('transform', 'scale(.5)') .attr( 'd', 'M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z' ); }; export const insertComputerIcon = function (elem) { elem .append('defs') .append('symbol') .attr('id', 'computer') .attr('width', '24') .attr('height', '24') .append('path') .attr('transform', 'scale(.5)') .attr( 'd', 'M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z' ); }; export const insertClockIcon = function (elem) { elem .append('defs') .append('symbol') .attr('id', 'clock') .attr('width', '24') .attr('height', '24') .append('path') .attr('transform', 'scale(.5)') .attr( 'd', 'M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z' ); }; /** * Setup arrow head and define the marker. The result is appended to the svg. * * @param elem */ export const insertArrowHead = function (elem) { elem .append('defs') .append('marker') .attr('id', 'arrowhead') .attr('refX', 9) .attr('refY', 5) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 12) .attr('markerHeight', 12) .attr('orient', 'auto') .append('path') .attr('d', 'M 0 0 L 10 5 L 0 10 z'); // this is actual shape for arrowhead }; export const insertArrowEnd = function (elem) { elem .append('defs') .append('marker') .attr('id', 'arrowend') .attr('refX', 1) .attr('refY', 5) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 12) .attr('markerHeight', 12) .attr('orient', 'auto') .append('path') .attr('d', 'M 10 0 L 0 5 L 10 10 z'); // this is actual shape for arrowhead }; /** * Setup arrow head and define the marker. The result is appended to the svg. * * @param {any} elem */ export const insertArrowFilledHead = function (elem) { elem .append('defs') .append('marker') .attr('id', 'filled-head') .attr('refX', 18) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z'); }; /** * Setup node number. The result is appended to the svg. * * @param {any} elem */ export const insertDynamicNumber = function (elem) { elem .append('defs') .append('marker') .attr('id', 'sequencenumber') .attr('refX', 15) .attr('refY', 15) .attr('markerWidth', 60) .attr('markerHeight', 40) .attr('orient', 'auto') .append('circle') .attr('cx', 15) .attr('cy', 15) .attr('r', 6); // .style("fill", '#f00'); }; /** * Setup arrow head and define the marker. The result is appended to the svg. * * @param {any} elem */ export const insertArrowCrossHead = function (elem) { const defs = elem.append('defs'); const marker = defs .append('marker') .attr('id', 'crosshead') .attr('markerWidth', 15) .attr('markerHeight', 8) .attr('orient', 'auto') .attr('refX', 16) .attr('refY', 4); // The arrow marker .append('path') .attr('fill', 'black') .attr('stroke', '#000000') .style('stroke-dasharray', '0, 0') .attr('stroke-width', '1px') .attr('d', 'M 9,2 V 6 L16,4 Z'); // The cross marker .append('path') .attr('fill', 'none') .attr('stroke', '#000000') .style('stroke-dasharray', '0, 0') .attr('stroke-width', '1px') .attr('d', 'M 0,1 L 6,7 M 6,1 L 0,7'); // this is actual shape for arrowhead }; export const getTextObj = function () { return { x: 0, y: 0, fill: undefined, anchor: undefined, style: '#666', width: undefined, height: undefined, textMargin: 0, rx: 0, ry: 0, tspan: true, valign: undefined, }; }; export const getNoteRect = function () { return { x: 0, y: 0, fill: '#EDF2AE', stroke: '#666', width: 100, anchor: 'start', height: 100, rx: 0, ry: 0, }; }; const getC4ShapeFont = (cnf, typeC4Shape) => { return { fontFamily: cnf[typeC4Shape + 'FontFamily'], fontSize: cnf[typeC4Shape + 'FontSize'], fontWeight: cnf[typeC4Shape + 'FontWeight'], }; }; const _drawTextCandidateFunc = (function () { /** * @param {any} content * @param {any} g * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} textAttrs */ function byText(content, g, x, y, width, height, textAttrs) { const text = g .append('text') .attr('x', x + width / 2) .attr('y', y + height / 2 + 5) .style('text-anchor', 'middle') .text(content); _setTextAttrs(text, textAttrs); } /** * @param {any} content * @param {any} g * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} textAttrs * @param {any} conf */ function byTspan(content, g, x, y, width, height, textAttrs, conf) { const { fontSize, fontFamily, fontWeight } = conf; const lines = content.split(common.lineBreakRegex); for (let i = 0; i < lines.length; i++) { const dy = i * fontSize - (fontSize * (lines.length - 1)) / 2; const text = g .append('text') .attr('x', x + width / 2) .attr('y', y) .style('text-anchor', 'middle') .attr('dominant-baseline', 'middle') .style('font-size', fontSize) .style('font-weight', fontWeight) .style('font-family', fontFamily); text .append('tspan') // .attr('x', x + width / 2) .attr('dy', dy) .text(lines[i]) // .attr('y', y + height / 2) .attr('alignment-baseline', 'mathematical'); _setTextAttrs(text, textAttrs); } } /** * @param {any} content * @param {any} g * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} textAttrs * @param {any} conf */ function byFo(content, g, x, y, width, height, textAttrs, conf) { const s = g.append('switch'); const f = s .append('foreignObject') .attr('x', x) .attr('y', y) .attr('width', width) .attr('height', height); const text = f .append('xhtml:div') .style('display', 'table') .style('height', '100%') .style('width', '100%'); text .append('div') .style('display', 'table-cell') .style('text-align', 'center') .style('vertical-align', 'middle') .text(content); byTspan(content, s, x, y, width, height, textAttrs, conf); _setTextAttrs(text, textAttrs); } /** * @param {any} toText * @param {any} fromTextAttrsDict */ function _setTextAttrs(toText, fromTextAttrsDict) { for (const key in fromTextAttrsDict) { if (fromTextAttrsDict.hasOwnProperty(key)) { toText.attr(key, fromTextAttrsDict[key]); } } } return function (conf) { return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan; }; })(); export default { drawRect, drawText, drawLabel, drawBoundary, drawC4Shape, drawRels, drawImage, drawEmbeddedImage, insertArrowHead, insertArrowEnd, insertArrowFilledHead, insertDynamicNumber, insertArrowCrossHead, insertDatabaseIcon, insertComputerIcon, insertClockIcon, getTextObj, getNoteRect, sanitizeUrl, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/000077500000000000000000000000001433273745700245455ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/classDb.js000066400000000000000000000246171433273745700264700ustar00rootroot00000000000000import { select } from 'd3'; import { log } from '../../logger'; import * as configApi from '../../config'; import common from '../common/common'; import utils from '../../utils'; import mermaidAPI from '../../mermaidAPI'; import { setAccTitle, getAccTitle, getAccDescription, setAccDescription, clear as commonClear, } from '../../commonDb'; const MERMAID_DOM_ID_PREFIX = 'classid-'; let relations = []; let classes = {}; let classCounter = 0; let funs = []; const sanitizeText = (txt) => common.sanitizeText(txt, configApi.getConfig()); export const parseDirective = function (statement, context, type) { mermaidAPI.parseDirective(this, statement, context, type); }; const splitClassNameAndType = function (id) { let genericType = ''; let className = id; if (id.indexOf('~') > 0) { let split = id.split('~'); className = split[0]; genericType = common.sanitizeText(split[1], configApi.getConfig()); } return { className: className, type: genericType }; }; /** * Function called by parser when a node definition has been found. * * @param id * @public */ export const addClass = function (id) { let classId = splitClassNameAndType(id); // Only add class if not exists if (typeof classes[classId.className] !== 'undefined') return; classes[classId.className] = { id: classId.className, type: classId.type, cssClasses: [], methods: [], members: [], annotations: [], domId: MERMAID_DOM_ID_PREFIX + classId.className + '-' + classCounter, }; classCounter++; }; /** * Function to lookup domId from id in the graph definition. * * @param id * @public */ export const lookUpDomId = function (id) { const classKeys = Object.keys(classes); for (let i = 0; i < classKeys.length; i++) { if (classes[classKeys[i]].id === id) { return classes[classKeys[i]].domId; } } }; export const clear = function () { relations = []; classes = {}; funs = []; funs.push(setupToolTips); commonClear(); }; export const getClass = function (id) { return classes[id]; }; export const getClasses = function () { return classes; }; export const getRelations = function () { return relations; }; export const addRelation = function (relation) { log.debug('Adding relation: ' + JSON.stringify(relation)); addClass(relation.id1); addClass(relation.id2); relation.id1 = splitClassNameAndType(relation.id1).className; relation.id2 = splitClassNameAndType(relation.id2).className; relation.relationTitle1 = common.sanitizeText( relation.relationTitle1.trim(), configApi.getConfig() ); relation.relationTitle2 = common.sanitizeText( relation.relationTitle2.trim(), configApi.getConfig() ); relations.push(relation); }; /** * Adds an annotation to the specified class Annotations mark special properties of the given type * (like 'interface' or 'service') * * @param className The class name * @param annotation The name of the annotation without any brackets * @public */ export const addAnnotation = function (className, annotation) { const validatedClassName = splitClassNameAndType(className).className; classes[validatedClassName].annotations.push(annotation); }; /** * Adds a member to the specified class * * @param className The class name * @param member The full name of the member. If the member is enclosed in <> it is * treated as an annotation If the member is ending with a closing bracket ) it is treated as a * method Otherwise the member will be treated as a normal property * @public */ export const addMember = function (className, member) { const validatedClassName = splitClassNameAndType(className).className; const theClass = classes[validatedClassName]; if (typeof member === 'string') { // Member can contain white spaces, we trim them out const memberString = member.trim(); if (memberString.startsWith('<<') && memberString.endsWith('>>')) { // Remove leading and trailing brackets // theClass.annotations.push(memberString.substring(2, memberString.length - 2)); theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2))); } else if (memberString.indexOf(')') > 0) { theClass.methods.push(sanitizeText(memberString)); } else if (memberString) { theClass.members.push(sanitizeText(memberString)); } } }; export const addMembers = function (className, members) { if (Array.isArray(members)) { members.reverse(); members.forEach((member) => addMember(className, member)); } }; export const cleanupLabel = function (label) { if (label.substring(0, 1) === ':') { return common.sanitizeText(label.substr(1).trim(), configApi.getConfig()); } else { return sanitizeText(label.trim()); } }; /** * Called by parser when a special node is found, e.g. a clickable element. * * @param ids Comma separated list of ids * @param className Class to add */ export const setCssClass = function (ids, className) { ids.split(',').forEach(function (_id) { let id = _id; if (_id[0].match(/\d/)) id = MERMAID_DOM_ID_PREFIX + id; if (typeof classes[id] !== 'undefined') { classes[id].cssClasses.push(className); } }); }; /** * Called by parser when a tooltip is found, e.g. a clickable element. * * @param ids Comma separated list of ids * @param tooltip Tooltip to add */ const setTooltip = function (ids, tooltip) { const config = configApi.getConfig(); ids.split(',').forEach(function (id) { if (typeof tooltip !== 'undefined') { classes[id].tooltip = common.sanitizeText(tooltip, config); } }); }; export const getTooltip = function (id) { return classes[id].tooltip; }; /** * Called by parser when a link is found. Adds the URL to the vertex data. * * @param ids Comma separated list of ids * @param linkStr URL to create a link for * @param target Target of the link, _blank by default as originally defined in the svgDraw.js file */ export const setLink = function (ids, linkStr, target) { const config = configApi.getConfig(); ids.split(',').forEach(function (_id) { let id = _id; if (_id[0].match(/\d/)) id = MERMAID_DOM_ID_PREFIX + id; if (typeof classes[id] !== 'undefined') { classes[id].link = utils.formatUrl(linkStr, config); if (config.securityLevel === 'sandbox') { classes[id].linkTarget = '_top'; } else if (typeof target === 'string') { classes[id].linkTarget = sanitizeText(target); } else { classes[id].linkTarget = '_blank'; } } }); setCssClass(ids, 'clickable'); }; /** * Called by parser when a click definition is found. Registers an event handler. * * @param ids Comma separated list of ids * @param functionName Function to be called on click * @param functionArgs Function args the function should be called with */ export const setClickEvent = function (ids, functionName, functionArgs) { ids.split(',').forEach(function (id) { setClickFunc(id, functionName, functionArgs); classes[id].haveCallback = true; }); setCssClass(ids, 'clickable'); }; const setClickFunc = function (domId, functionName, functionArgs) { const config = configApi.getConfig(); let id = domId; let elemId = lookUpDomId(id); if (config.securityLevel !== 'loose') { return; } if (typeof functionName === 'undefined') { return; } if (typeof classes[id] !== 'undefined') { let argList = []; if (typeof functionArgs === 'string') { /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */ argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); for (let i = 0; i < argList.length; i++) { let item = argList[i].trim(); /* Removes all double quotes at the start and end of an argument */ /* This preserves all starting and ending whitespace inside */ if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { item = item.substr(1, item.length - 2); } argList[i] = item; } } /* if no arguments passed into callback, default to passing in id */ if (argList.length === 0) { argList.push(elemId); } funs.push(function () { const elem = document.querySelector(`[id="${elemId}"]`); if (elem !== null) { elem.addEventListener( 'click', function () { utils.runFunc(functionName, ...argList); }, false ); } }); } }; export const bindFunctions = function (element) { funs.forEach(function (fun) { fun(element); }); }; export const lineType = { LINE: 0, DOTTED_LINE: 1, }; export const relationType = { AGGREGATION: 0, EXTENSION: 1, COMPOSITION: 2, DEPENDENCY: 3, LOLLIPOP: 4, }; const setupToolTips = function (element) { let tooltipElem = select('.mermaidTooltip'); if ((tooltipElem._groups || tooltipElem)[0][0] === null) { tooltipElem = select('body').append('div').attr('class', 'mermaidTooltip').style('opacity', 0); } const svg = select(element).select('svg'); const nodes = svg.selectAll('g.node'); nodes .on('mouseover', function () { const el = select(this); const title = el.attr('title'); // Dont try to draw a tooltip if no data is provided if (title === null) { return; } const rect = this.getBoundingClientRect(); tooltipElem.transition().duration(200).style('opacity', '.9'); tooltipElem .text(el.attr('title')) .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px') .style('top', window.scrollY + rect.top - 14 + document.body.scrollTop + 'px'); tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, '
')); el.classed('hover', true); }) .on('mouseout', function () { tooltipElem.transition().duration(500).style('opacity', 0); const el = select(this); el.classed('hover', false); }); }; funs.push(setupToolTips); let direction = 'TB'; const getDirection = () => direction; const setDirection = (dir) => { direction = dir; }; export default { parseDirective, setAccTitle, getAccTitle, getAccDescription, setAccDescription, getConfig: () => configApi.getConfig().class, addClass, bindFunctions, clear, getClass, getClasses, addAnnotation, getRelations, addRelation, getDirection, setDirection, addMember, addMembers, cleanupLabel, lineType, relationType, setClickEvent, setCssClass, setLink, getTooltip, setTooltip, lookUpDomId, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/classDetector-V2.ts000066400000000000000000000010571433273745700302040ustar00rootroot00000000000000import type { DiagramDetector } from '../../diagram-api/types'; export const classDetectorV2: DiagramDetector = (txt, config) => { // If we have confgured to use dagre-wrapper then we should return true in this function for classDiagram code thus making it use the new class diagram if (txt.match(/^\s*classDiagram/) !== null && config?.class?.defaultRenderer === 'dagre-wrapper') return true; // We have not opted to use the new renderer so we should return true if we detect a class diagram return txt.match(/^\s*classDiagram-v2/) !== null; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/classDetector.ts000066400000000000000000000007041433273745700277150ustar00rootroot00000000000000import type { DiagramDetector } from '../../diagram-api/types'; export const classDetector: DiagramDetector = (txt, config) => { // If we have confgured to use dagre-wrapper then we should never return true in this function if (config?.class?.defaultRenderer === 'dagre-wrapper') return false; // We have not opted to use the new renderer so we should return true if we detect a class diagram return txt.match(/^\s*classDiagram/) !== null; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/classDiagram-styles.spec.js000066400000000000000000000036241433273745700317540ustar00rootroot00000000000000import { parser } from './parser/classDiagram'; import classDb from './classDb'; describe('class diagram, ', function () { describe('when parsing data from a classDiagram it', function () { beforeEach(function () { parser.yy = classDb; parser.yy.clear(); }); it('should be possible to apply a css class to a class directly', function () { const str = 'classDiagram\n' + 'class Class01:::exClass'; parser.parse(str); expect(parser.yy.getClass('Class01').cssClasses[0]).toBe('exClass'); }); it('should be possible to apply a css class to a class directly with struct', function () { const str = 'classDiagram\n' + 'class Class1:::exClass {\n' + 'int : test\n' + 'string : foo\n' + 'test()\n' + 'foo()\n' + '}'; parser.parse(str); const testClass = parser.yy.getClass('Class1'); expect(testClass.cssClasses[0]).toBe('exClass'); }); it('should be possible to apply a css class to a class with relations', function () { const str = 'classDiagram\n' + 'Class01 <|-- Class02\ncssClass "Class01" exClass'; parser.parse(str); expect(parser.yy.getClass('Class01').cssClasses[0]).toBe('exClass'); }); it('should be possible to apply a cssClass to a class', function () { const str = 'classDiagram\n' + 'class Class01\n cssClass "Class01" exClass'; parser.parse(str); expect(parser.yy.getClass('Class01').cssClasses[0]).toBe('exClass'); }); it('should be possible to apply a cssClass to a comma separated list of classes', function () { const str = 'classDiagram\n' + 'class Class01\n class Class02\n cssClass "Class01,Class02" exClass'; parser.parse(str); expect(parser.yy.getClass('Class01').cssClasses[0]).toBe('exClass'); expect(parser.yy.getClass('Class02').cssClasses[0]).toBe('exClass'); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/classDiagram.spec.js000066400000000000000000000662171433273745700304420ustar00rootroot00000000000000import { parser } from './parser/classDiagram'; import classDb from './classDb'; import { vi } from 'vitest'; const spyOn = vi.spyOn; describe('class diagram, ', function () { describe('when parsing an info graph it', function () { beforeEach(function () { parser.yy = classDb; }); it('should handle backquoted class names', function () { const str = 'classDiagram\n' + 'class `Car`'; parser.parse(str); }); it.skip('should handle a leading newline axa', function () { const str = '\nclassDiagram\n' + 'class Car'; try { parser.parse(str); // Fail test if above expression doesn't throw anything. } catch (e) { expect(true).toBe(false); } }); it('should handle relation definitions', function () { const str = 'classDiagram\n' + 'Class01 <|-- Class02\n' + 'Class03 *-- Class04\n' + 'Class05 o-- Class06\n' + 'Class07 .. Class08\n' + 'Class09 -- Class1'; parser.parse(str); }); it('should handle backquoted relation definitions', function () { const str = 'classDiagram\n' + '`Class01` <|-- Class02\n' + 'Class03 *-- Class04\n' + 'Class05 o-- Class06\n' + 'Class07 .. Class08\n' + 'Class09 -- Class1'; parser.parse(str); }); it('should handle relation definition of different types and directions', function () { const str = 'classDiagram\n' + 'Class11 <|.. Class12\n' + 'Class13 --> Class14\n' + 'Class15 ..> Class16\n' + 'Class17 ..|> Class18\n' + 'Class19 <--* Class20'; parser.parse(str); }); it('should handle cardinality and labels', function () { const str = 'classDiagram\n' + 'Class01 "1" *-- "many" Class02 : contains\n' + 'Class03 o-- Class04 : aggregation\n' + 'Class05 --> "1" Class06'; parser.parse(str); }); it('should handle visibility for methods and members', function () { const str = 'classDiagram\n' + 'class TestClass\n' + 'TestClass : -int privateMember\n' + 'TestClass : +int publicMember\n' + 'TestClass : #int protectedMember\n' + 'TestClass : -privateMethod()\n' + 'TestClass : +publicMethod()\n' + 'TestClass : #protectedMethod()\n'; parser.parse(str); }); it('should handle generic class', function () { const str = 'classDiagram\n' + 'class Car~T~\n' + 'Driver -- Car : drives >\n' + 'Car *-- Wheel : have 4 >\n' + 'Car -- Person : < owns'; parser.parse(str); }); it('should handle generic class with a literal name', function () { const str = 'classDiagram\n' + 'class `Car`~T~\n' + 'Driver -- `Car` : drives >\n' + '`Car` *-- Wheel : have 4 >\n' + '`Car` -- Person : < owns'; parser.parse(str); }); it('should break when another `{`is encountered before closing the first one while defining generic class with brackets', function () { const str = 'classDiagram\n' + 'class Dummy_Class~T~ {\n' + 'String data\n' + ' void methods()\n' + '}\n' + '\n' + 'class Dummy_Class {\n' + 'class Flight {\n' + ' flightNumber : Integer\n' + ' departureTime : Date\n' + '}'; let testPassed = false; try { parser.parse(str); } catch (error) { testPassed = true; } expect(testPassed).toBe(true); }); it('should break when EOF is encountered before closing the first `{` while defining generic class with brackets', function () { const str = 'classDiagram\n' + 'class Dummy_Class~T~ {\n' + 'String data\n' + ' void methods()\n' + '}\n' + '\n' + 'class Dummy_Class {\n'; let testPassed = false; try { parser.parse(str); } catch (error) { testPassed = true; } expect(testPassed).toBe(true); }); it('should handle generic class with brackets', function () { const str = 'classDiagram\n' + 'class Dummy_Class~T~ {\n' + 'String data\n' + ' void methods()\n' + '}\n' + '\n' + 'class Flight {\n' + ' flightNumber : Integer\n' + ' departureTime : Date\n' + '}'; parser.parse(str); }); it('should handle generic class with brackets and a literal name', function () { const str = 'classDiagram\n' + 'class `Dummy_Class`~T~ {\n' + 'String data\n' + ' void methods()\n' + '}\n' + '\n' + 'class Flight {\n' + ' flightNumber : Integer\n' + ' departureTime : Date\n' + '}'; parser.parse(str); }); it('should handle class definitions', function () { const str = 'classDiagram\n' + 'class Car\n' + 'Driver -- Car : drives >\n' + 'Car *-- Wheel : have 4 >\n' + 'Car -- Person : < owns'; parser.parse(str); }); it('should handle method statements', function () { const str = 'classDiagram\n' + 'Object <|-- ArrayList\n' + 'Object : equals()\n' + 'ArrayList : Object[] elementData\n' + 'ArrayList : size()'; parser.parse(str); }); it('should handle parsing of method statements grouped by brackets', function () { const str = 'classDiagram\n' + 'class Dummy_Class {\n' + 'String data\n' + ' void methods()\n' + '}\n' + '\n' + 'class Flight {\n' + ' flightNumber : Integer\n' + ' departureTime : Date\n' + '}'; parser.parse(str); }); it('should handle return types on methods', function () { const str = 'classDiagram\n' + 'Object <|-- ArrayList\n' + 'Object : equals()\n' + 'Object : -Object[] objects\n' + 'Object : +getObjects() Object[]\n' + 'ArrayList : Dummy elementData\n' + 'ArrayList : getDummy() Dummy'; parser.parse(str); }); it('should handle return types on methods grouped by brackets', function () { const str = 'classDiagram\n' + 'class Dummy_Class {\n' + 'string data\n' + 'getDummy() Dummy\n' + '}\n' + '\n' + 'class Flight {\n' + ' int flightNumber\n' + ' datetime departureTime\n' + ' getDepartureTime() datetime\n' + '}'; parser.parse(str); }); it('should handle parsing of separators', function () { const str = 'classDiagram\n' + 'class Foo1 {\n' + ' You can use\n' + ' several lines\n' + '..\n' + 'as you want\n' + 'and group\n' + '==\n' + 'things together.\n' + '__\n' + 'You can have as many groups\n' + 'as you want\n' + '--\n' + 'End of class\n' + '}\n' + '\n' + 'class User {\n' + '.. Simple Getter ..\n' + '+ getName()\n' + '+ getAddress()\n' + '.. Some setter ..\n' + '+ setName()\n' + '__ private data __\n' + 'int age\n' + '-- encrypted --\n' + 'String password\n' + '}'; parser.parse(str); }); it('should handle a comment', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + '%% Comment\n' + 'int : test\n' + 'string : foo\n' + 'test()\n' + 'foo()\n' + '}'; parser.parse(str); }); it('should handle comments at the start', function () { const str = `%% Comment classDiagram class Class1 { int : test string : foo test() foo() }`; parser.parse(str); }); it('should handle comments at the end', function () { const str = `classDiagram class Class1 { int : test string : foo test() foo() } %% Comment `; parser.parse(str); }); it('should handle comments at the end no trailing newline', function () { const str = `classDiagram class Class1 { int : test string : foo test() foo() } %% Comment`; parser.parse(str); }); it('should handle a comment with multiple line feeds', function () { const str = `classDiagram %% Comment class Class1 { int : test string : foo test() foo() }`; parser.parse(str); }); it('should handle a comment with mermaid class diagram code in them', function () { const str = `classDiagram %% Comment Class01 <|-- Class02 class Class1 { int : test string : foo test() foo() }`; parser.parse(str); }); it('should handle a comment inside brackets', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + '%% Comment Class01 <|-- Class02\n' + 'int : test\n' + 'string : foo\n' + 'test()\n' + 'foo()\n' + '}'; parser.parse(str); }); it('should handle click statement with link', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + '%% Comment Class01 <|-- Class02\n' + 'int : test\n' + 'string : foo\n' + 'test()\n' + 'foo()\n' + '}\n' + 'link Class01 "google.com" '; parser.parse(str); }); it('should handle click statement with click and href link', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + '%% Comment Class01 <|-- Class02\n' + 'int : test\n' + 'string : foo\n' + 'test()\n' + 'foo()\n' + '}\n' + 'click Class01 href "google.com" '; parser.parse(str); }); it('should handle click statement with link and tooltip', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + '%% Comment Class01 <|-- Class02\n' + 'int : test\n' + 'string : foo\n' + 'test()\n' + 'foo()\n' + '}\n' + 'link Class01 "google.com" "A Tooltip" '; parser.parse(str); }); it('should handle click statement with click and href link and tooltip', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + '%% Comment Class01 <|-- Class02\n' + 'int : test\n' + 'string : foo\n' + 'test()\n' + 'foo()\n' + '}\n' + 'click Class01 href "google.com" "A Tooltip" '; parser.parse(str); }); it('should handle click statement with callback', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + '%% Comment Class01 <|-- Class02\n' + 'int : test\n' + 'string : foo\n' + 'test()\n' + 'foo()\n' + '}\n' + 'callback Class01 "functionCall" '; parser.parse(str); }); it('should handle click statement with click and call callback', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + '%% Comment Class01 <|-- Class02\n' + 'int : test\n' + 'string : foo\n' + 'test()\n' + 'foo()\n' + '}\n' + 'click Class01 call functionCall() '; parser.parse(str); }); it('should handle click statement with callback and tooltip', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + '%% Comment Class01 <|-- Class02\n' + 'int : test\n' + 'string : foo\n' + 'test()\n' + 'foo()\n' + '}\n' + 'callback Class01 "functionCall" "A Tooltip" '; parser.parse(str); }); it('should handle click statement with click and call callback and tooltip', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + '%% Comment Class01 <|-- Class02\n' + 'int : test\n' + 'string : foo\n' + 'test()\n' + 'foo()\n' + '}\n' + 'click Class01 call functionCall() "A Tooltip" '; parser.parse(str); }); it('should handle dashed relation definition of different types and directions', function () { const str = 'classDiagram\n' + 'Class11 <|.. Class12\n' + 'Class13 <.. Class14\n' + 'Class15 ..|> Class16\n' + 'Class17 ..> Class18\n' + 'Class19 .. Class20'; parser.parse(str); }); it('should handle generic types in members', function () { const str = 'classDiagram\n' + 'class Car~T~\n' + 'Car : -List~Wheel~ wheels\n' + 'Car : +setWheels(List~Wheel~ wheels)\n' + 'Car : +getWheels() List~Wheel~'; parser.parse(str); }); it('should handle generic types in members in class with brackets', function () { const str = 'classDiagram\n' + 'class Car {\n' + 'List~Wheel~ wheels\n' + 'setWheels(List~Wheel~ wheels)\n' + '+getWheels() List~Wheel~\n' + '}'; parser.parse(str); }); }); describe('when fetching data from a classDiagram graph it', function () { beforeEach(function () { parser.yy = classDb; parser.yy.clear(); }); it('should handle relation definitions EXTENSION', function () { const str = 'classDiagram\n' + 'Class01 <|-- Class02'; parser.parse(str); const relations = parser.yy.getRelations(); expect(parser.yy.getClass('Class01').id).toBe('Class01'); expect(parser.yy.getClass('Class02').id).toBe('Class02'); expect(relations[0].relation.type1).toBe(classDb.relationType.EXTENSION); expect(relations[0].relation.type2).toBe('none'); expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE); }); it('should handle accTitle and accDescr', function () { const str = `classDiagram accTitle: My Title accDescr: My Description Class01 <|-- Class02 `; parser.parse(str); expect(parser.yy.getAccTitle()).toBe('My Title'); expect(parser.yy.getAccDescription()).toBe('My Description'); }); it('should handle accTitle and multiline accDescr', function () { const str = `classDiagram accTitle: My Title accDescr { This is mu multi line description } Class01 <|-- Class02 `; parser.parse(str); expect(parser.yy.getAccTitle()).toBe('My Title'); expect(parser.yy.getAccDescription()).toBe('This is mu multi\nline description'); }); it('should handle relation definitions AGGREGATION and dotted line', function () { const str = 'classDiagram\n' + 'Class01 o.. Class02'; parser.parse(str); const relations = parser.yy.getRelations(); expect(parser.yy.getClass('Class01').id).toBe('Class01'); expect(parser.yy.getClass('Class02').id).toBe('Class02'); expect(relations[0].relation.type1).toBe(classDb.relationType.AGGREGATION); expect(relations[0].relation.type2).toBe('none'); expect(relations[0].relation.lineType).toBe(classDb.lineType.DOTTED_LINE); }); it('should handle relation definitions COMPOSITION on both sides', function () { const str = 'classDiagram\n' + 'Class01 *--* Class02'; parser.parse(str); const relations = parser.yy.getRelations(); expect(parser.yy.getClass('Class01').id).toBe('Class01'); expect(parser.yy.getClass('Class02').id).toBe('Class02'); expect(relations[0].relation.type1).toBe(classDb.relationType.COMPOSITION); expect(relations[0].relation.type2).toBe(classDb.relationType.COMPOSITION); expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE); }); it('should handle relation definitions no types', function () { const str = 'classDiagram\n' + 'Class01 -- Class02'; parser.parse(str); const relations = parser.yy.getRelations(); expect(parser.yy.getClass('Class01').id).toBe('Class01'); expect(parser.yy.getClass('Class02').id).toBe('Class02'); expect(relations[0].relation.type1).toBe('none'); expect(relations[0].relation.type2).toBe('none'); expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE); }); it('should handle relation definitions with type only on right side', function () { const str = 'classDiagram\n' + 'Class01 --|> Class02'; parser.parse(str); const relations = parser.yy.getRelations(); expect(parser.yy.getClass('Class01').id).toBe('Class01'); expect(parser.yy.getClass('Class02').id).toBe('Class02'); expect(relations[0].relation.type1).toBe('none'); expect(relations[0].relation.type2).toBe(classDb.relationType.EXTENSION); expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE); }); it('should handle multiple classes and relation definitions', function () { const str = 'classDiagram\n' + 'Class01 <|-- Class02\n' + 'Class03 *-- Class04\n' + 'Class05 o-- Class06\n' + 'Class07 .. Class08\n' + 'Class09 -- Class10'; parser.parse(str); const relations = parser.yy.getRelations(); expect(parser.yy.getClass('Class01').id).toBe('Class01'); expect(parser.yy.getClass('Class10').id).toBe('Class10'); expect(relations.length).toBe(5); expect(relations[0].relation.type1).toBe(classDb.relationType.EXTENSION); expect(relations[0].relation.type2).toBe('none'); expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE); expect(relations[3].relation.type1).toBe('none'); expect(relations[3].relation.type2).toBe('none'); expect(relations[3].relation.lineType).toBe(classDb.lineType.DOTTED_LINE); }); it('should handle generic class with relation definitions', function () { const str = 'classDiagram\n' + 'Class01~T~ <|-- Class02'; parser.parse(str); const relations = parser.yy.getRelations(); expect(parser.yy.getClass('Class01').id).toBe('Class01'); expect(parser.yy.getClass('Class01').type).toBe('T'); expect(parser.yy.getClass('Class02').id).toBe('Class02'); expect(relations[0].relation.type1).toBe(classDb.relationType.EXTENSION); expect(relations[0].relation.type2).toBe('none'); expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE); }); it('should handle class annotations', function () { const str = 'classDiagram\n' + 'class Class1\n' + '<> Class1'; parser.parse(str); const testClass = parser.yy.getClass('Class1'); expect(testClass.annotations.length).toBe(1); expect(testClass.members.length).toBe(0); expect(testClass.methods.length).toBe(0); expect(testClass.annotations[0]).toBe('interface'); }); it('should handle class annotations with members and methods', function () { const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : int test\n' + 'Class1 : test()\n' + '<> Class1'; parser.parse(str); const testClass = parser.yy.getClass('Class1'); expect(testClass.annotations.length).toBe(1); expect(testClass.members.length).toBe(1); expect(testClass.methods.length).toBe(1); expect(testClass.annotations[0]).toBe('interface'); }); it('should handle class annotations in brackets', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + '<>\n' + '}'; parser.parse(str); const testClass = parser.yy.getClass('Class1'); expect(testClass.annotations.length).toBe(1); expect(testClass.members.length).toBe(0); expect(testClass.methods.length).toBe(0); expect(testClass.annotations[0]).toBe('interface'); }); it('should handle class annotations in brackets with members and methods', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + '<>\n' + 'int : test\n' + 'test()\n' + '}'; parser.parse(str); const testClass = parser.yy.getClass('Class1'); expect(testClass.annotations.length).toBe(1); expect(testClass.members.length).toBe(1); expect(testClass.methods.length).toBe(1); expect(testClass.annotations[0]).toBe('interface'); }); it('should add bracket members in right order', function () { const str = 'classDiagram\n' + 'class Class1 {\n' + 'int : test\n' + 'string : foo\n' + 'test()\n' + 'foo()\n' + '}'; parser.parse(str); const testClass = parser.yy.getClass('Class1'); expect(testClass.members.length).toBe(2); expect(testClass.methods.length).toBe(2); expect(testClass.members[0]).toBe('int : test'); expect(testClass.members[1]).toBe('string : foo'); expect(testClass.methods[0]).toBe('test()'); expect(testClass.methods[1]).toBe('foo()'); }); it('should handle abstract methods', function () { const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()*'; parser.parse(str); const testClass = parser.yy.getClass('Class1'); expect(testClass.annotations.length).toBe(0); expect(testClass.members.length).toBe(0); expect(testClass.methods.length).toBe(1); expect(testClass.methods[0]).toBe('someMethod()*'); }); it('should handle static methods', function () { const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()$'; parser.parse(str); const testClass = parser.yy.getClass('Class1'); expect(testClass.annotations.length).toBe(0); expect(testClass.members.length).toBe(0); expect(testClass.methods.length).toBe(1); expect(testClass.methods[0]).toBe('someMethod()$'); }); it('should associate link and css appropriately', function () { const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'link Class1 "google.com"'; parser.parse(str); const testClass = parser.yy.getClass('Class1'); expect(testClass.link).toBe('google.com'); expect(testClass.cssClasses.length).toBe(1); expect(testClass.cssClasses[0]).toBe('clickable'); }); it('should associate click and href link and css appropriately', function () { const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'click Class1 href "google.com"'; parser.parse(str); const testClass = parser.yy.getClass('Class1'); expect(testClass.link).toBe('google.com'); expect(testClass.cssClasses.length).toBe(1); expect(testClass.cssClasses[0]).toBe('clickable'); }); it('should associate link with tooltip', function () { const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'link Class1 "google.com" "A tooltip"'; parser.parse(str); const testClass = parser.yy.getClass('Class1'); expect(testClass.link).toBe('google.com'); expect(testClass.tooltip).toBe('A tooltip'); expect(testClass.cssClasses.length).toBe(1); expect(testClass.cssClasses[0]).toBe('clickable'); }); it('should associate click and href link with tooltip', function () { const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'click Class1 href "google.com" "A tooltip"'; parser.parse(str); const testClass = parser.yy.getClass('Class1'); expect(testClass.link).toBe('google.com'); expect(testClass.tooltip).toBe('A tooltip'); expect(testClass.cssClasses.length).toBe(1); expect(testClass.cssClasses[0]).toBe('clickable'); }); it('should associate click and href link with tooltip and target appropriately', function () { spyOn(classDb, 'setLink'); spyOn(classDb, 'setTooltip'); const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'click Class1 href "google.com" "A tooltip" _self'; parser.parse(str); expect(classDb.setLink).toHaveBeenCalledWith('Class1', 'google.com', '_self'); expect(classDb.setTooltip).toHaveBeenCalledWith('Class1', 'A tooltip'); }); it('should associate click and href link appropriately', function () { spyOn(classDb, 'setLink'); const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'click Class1 href "google.com"'; parser.parse(str); expect(classDb.setLink).toHaveBeenCalledWith('Class1', 'google.com'); }); it('should associate click and href link with target appropriately', function () { spyOn(classDb, 'setLink'); const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'click Class1 href "google.com" _self'; parser.parse(str); expect(classDb.setLink).toHaveBeenCalledWith('Class1', 'google.com', '_self'); }); it('should associate link appropriately', function () { spyOn(classDb, 'setLink'); spyOn(classDb, 'setTooltip'); const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'link Class1 "google.com" "A tooltip" _self'; parser.parse(str); expect(classDb.setLink).toHaveBeenCalledWith('Class1', 'google.com', '_self'); expect(classDb.setTooltip).toHaveBeenCalledWith('Class1', 'A tooltip'); }); it('should associate callback appropriately', function () { spyOn(classDb, 'setClickEvent'); const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'callback Class1 "functionCall"'; parser.parse(str); expect(classDb.setClickEvent).toHaveBeenCalledWith('Class1', 'functionCall'); }); it('should associate click and call callback appropriately', function () { spyOn(classDb, 'setClickEvent'); const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'click Class1 call functionCall()'; parser.parse(str); expect(classDb.setClickEvent).toHaveBeenCalledWith('Class1', 'functionCall'); }); it('should associate callback appropriately with an arbitrary number of args', function () { spyOn(classDb, 'setClickEvent'); const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'click Class1 call functionCall("test0", test1, test2)'; parser.parse(str); expect(classDb.setClickEvent).toHaveBeenCalledWith( 'Class1', 'functionCall', '"test0", test1, test2' ); }); it('should associate callback with tooltip', function () { spyOn(classDb, 'setClickEvent'); spyOn(classDb, 'setTooltip'); const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'click Class1 call functionCall() "A tooltip"'; parser.parse(str); expect(classDb.setClickEvent).toHaveBeenCalledWith('Class1', 'functionCall'); expect(classDb.setTooltip).toHaveBeenCalledWith('Class1', 'A tooltip'); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/classDiagramGrammar.spec.js000066400000000000000000000007431433273745700317410ustar00rootroot00000000000000// eslint-disable-next-line @typescript-eslint/no-var-requires const fs = require('fs'); import { LALRGenerator } from 'jison'; describe('class diagram grammar', function () { it('should introduce no new conflicts', function () { const file = require.resolve('./parser/classDiagram.jison'); const grammarSource = fs.readFileSync(file, 'utf8'); const grammarParser = new LALRGenerator(grammarSource, {}); expect(grammarParser.conflicts < 16).toBe(true); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/classRenderer-v2.js000066400000000000000000000306231433273745700302300ustar00rootroot00000000000000import { select } from 'd3'; import graphlib from 'graphlib'; import { log } from '../../logger'; import { getConfig } from '../../config'; import { render } from '../../dagre-wrapper/index.js'; import { curveLinear } from 'd3'; import { interpolateToCurve, getStylesFromArray } from '../../utils'; import { setupGraphViewbox } from '../../setupGraphViewbox'; import common from '../common/common'; import addSVGAccessibilityFields from '../../accessibility'; let idCache = {}; const sanitizeText = (txt) => common.sanitizeText(txt, getConfig()); let conf = { dividerMargin: 10, padding: 5, textHeight: 10, }; /** * Function that adds the vertices found during parsing to the graph to be rendered. * * @param {Object< * string, * { cssClasses: string[]; text: string; id: string; type: string; domId: string } * >} classes * Object containing the vertices. * @param {SVGGElement} g The graph that is to be drawn. * @param _id * @param diagObj */ export const addClasses = function (classes, g, _id, diagObj) { // const svg = select(`[id="${svgId}"]`); const keys = Object.keys(classes); log.info('keys:', keys); log.info(classes); // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition keys.forEach(function (id) { const vertex = classes[id]; /** * Variable for storing the classes for the vertex * * @type {string} */ let cssClassStr = ''; if (vertex.cssClasses.length > 0) { cssClassStr = cssClassStr + ' ' + vertex.cssClasses.join(' '); } // if (vertex.classes.length > 0) { // classStr = vertex.classes.join(' '); // } const styles = { labelStyle: '' }; //getStylesFromArray(vertex.styles); // Use vertex id as text in the box if no text is provided by the graph definition let vertexText = vertex.text !== undefined ? vertex.text : vertex.id; // We create a SVG label, either by delegating to addHtmlLabel or manually // let vertexNode; // if (evaluate(getConfig().flowchart.htmlLabels)) { // const node = { // label: vertexText.replace( // /fa[lrsb]?:fa-[\w-]+/g, // s => `` // ) // }; // vertexNode = addHtmlLabel(svg, node).node(); // vertexNode.parentNode.removeChild(vertexNode); // } else { // const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text'); // svgLabel.setAttribute('style', styles.labelStyle.replace('color:', 'fill:')); // const rows = vertexText.split(common.lineBreakRegex); // for (let j = 0; j < rows.length; j++) { // const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan'); // tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'); // tspan.setAttribute('dy', '1em'); // tspan.setAttribute('x', '1'); // tspan.textContent = rows[j]; // svgLabel.appendChild(tspan); // } // vertexNode = svgLabel; // } let radious = 0; let _shape = ''; // Set the shape based parameters switch (vertex.type) { case 'class': _shape = 'class_box'; break; default: _shape = 'class_box'; } // Add the node g.setNode(vertex.id, { labelStyle: styles.labelStyle, shape: _shape, labelText: sanitizeText(vertexText), classData: vertex, rx: radious, ry: radious, class: cssClassStr, style: styles.style, id: vertex.id, domId: vertex.domId, tooltip: diagObj.db.getTooltip(vertex.id) || '', haveCallback: vertex.haveCallback, link: vertex.link, width: vertex.type === 'group' ? 500 : undefined, type: vertex.type, padding: getConfig().flowchart.padding, }); log.info('setNode', { labelStyle: styles.labelStyle, shape: _shape, labelText: vertexText, rx: radious, ry: radious, class: cssClassStr, style: styles.style, id: vertex.id, width: vertex.type === 'group' ? 500 : undefined, type: vertex.type, padding: getConfig().flowchart.padding, }); }); }; /** * Add edges to graph based on parsed graph definition * * @param relations * @param {object} g The graph object */ export const addRelations = function (relations, g) { const conf = getConfig().flowchart; let cnt = 0; let defaultStyle; let defaultLabelStyle; // if (typeof relations.defaultStyle !== 'undefined') { // const defaultStyles = getStylesFromArray(relations.defaultStyle); // defaultStyle = defaultStyles.style; // defaultLabelStyle = defaultStyles.labelStyle; // } relations.forEach(function (edge) { cnt++; const edgeData = {}; //Set relationship style and line type edgeData.classes = 'relation'; edgeData.pattern = edge.relation.lineType == 1 ? 'dashed' : 'solid'; edgeData.id = 'id' + cnt; // Set link type for rendering if (edge.type === 'arrow_open') { edgeData.arrowhead = 'none'; } else { edgeData.arrowhead = 'normal'; } log.info(edgeData, edge); //Set edge extra labels //edgeData.startLabelLeft = edge.relationTitle1; edgeData.startLabelRight = edge.relationTitle1 === 'none' ? '' : edge.relationTitle1; edgeData.endLabelLeft = edge.relationTitle2 === 'none' ? '' : edge.relationTitle2; //edgeData.endLabelRight = edge.relationTitle2; //Set relation arrow types edgeData.arrowTypeStart = getArrowMarker(edge.relation.type1); edgeData.arrowTypeEnd = getArrowMarker(edge.relation.type2); let style = ''; let labelStyle = ''; if (typeof edge.style !== 'undefined') { const styles = getStylesFromArray(edge.style); style = styles.style; labelStyle = styles.labelStyle; } else { style = 'fill:none'; if (typeof defaultStyle !== 'undefined') { style = defaultStyle; } if (typeof defaultLabelStyle !== 'undefined') { labelStyle = defaultLabelStyle; } } edgeData.style = style; edgeData.labelStyle = labelStyle; if (typeof edge.interpolate !== 'undefined') { edgeData.curve = interpolateToCurve(edge.interpolate, curveLinear); } else if (typeof relations.defaultInterpolate !== 'undefined') { edgeData.curve = interpolateToCurve(relations.defaultInterpolate, curveLinear); } else { edgeData.curve = interpolateToCurve(conf.curve, curveLinear); } edge.text = edge.title; if (typeof edge.text === 'undefined') { if (typeof edge.style !== 'undefined') { edgeData.arrowheadStyle = 'fill: #333'; } } else { edgeData.arrowheadStyle = 'fill: #333'; edgeData.labelpos = 'c'; if (getConfig().flowchart.htmlLabels) { edgeData.labelType = 'html'; edgeData.label = '' + edge.text + ''; } else { edgeData.labelType = 'text'; edgeData.label = edge.text.replace(common.lineBreakRegex, '\n'); if (typeof edge.style === 'undefined') { edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none'; } edgeData.labelStyle = edgeData.labelStyle.replace('color:', 'fill:'); } } // Add the edge to the graph g.setEdge(edge.id1, edge.id2, edgeData, cnt); }); }; /** * Merges the value of `conf` with the passed `cnf` * * @param {object} cnf Config to merge */ export const setConf = function (cnf) { const keys = Object.keys(cnf); keys.forEach(function (key) { conf[key] = cnf[key]; }); }; /** * Draws a flowchart in the tag with id: id based on the graph definition in text. * * @param {string} text * @param {string} id * @param _version * @param diagObj */ export const draw = function (text, id, _version, diagObj) { log.info('Drawing class - ', id); // diagObj.db.clear(); // const parser = diagObj.db.parser; // parser.yy = classDb; // Parse the graph definition // try { // parser.parse(text); // } catch (err) { // log.debug('Parsing failed'); // } // Fetch the default direction, use TD if none was found //let dir = 'TD'; const conf = getConfig().flowchart; const securityLevel = getConfig().securityLevel; log.info('config:', conf); const nodeSpacing = conf.nodeSpacing || 50; const rankSpacing = conf.rankSpacing || 50; // Create the input mermaid.graph const g = new graphlib.Graph({ multigraph: true, compound: true, }) .setGraph({ rankdir: diagObj.db.getDirection(), nodesep: nodeSpacing, ranksep: rankSpacing, marginx: 8, marginy: 8, }) .setDefaultEdgeLabel(function () { return {}; }); // let subG; // const subGraphs = flowDb.getSubGraphs(); // log.info('Subgraphs - ', subGraphs); // for (let i = subGraphs.length - 1; i >= 0; i--) { // subG = subGraphs[i]; // log.info('Subgraph - ', subG); // flowDb.addVertex(subG.id, subG.title, 'group', undefined, subG.classes); // } // Fetch the vertices/nodes and edges/links from the parsed graph definition const classes = diagObj.db.getClasses(); const relations = diagObj.db.getRelations(); log.info(relations); addClasses(classes, g, id, diagObj); addRelations(relations, g); // Add custom shapes // flowChartShapes.addToRenderV2(addShape); // Set up an SVG group so that we can translate the final graph. let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); const svg = root.select(`[id="${id}"]`); // Run the renderer. This is what draws the final graph. const element = root.select('#' + id + ' g'); render( element, g, ['aggregation', 'extension', 'composition', 'dependency', 'lollipop'], 'classDiagram', id ); setupGraphViewbox(g, svg, conf.diagramPadding, conf.useMaxWidth); // Add label rects for non html labels if (!conf.htmlLabels) { const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); for (let k = 0; k < labels.length; k++) { const label = labels[k]; // Get dimensions of label const dim = label.getBBox(); const rect = doc.createElementNS('http://www.w3.org/2000/svg', 'rect'); rect.setAttribute('rx', 0); rect.setAttribute('ry', 0); rect.setAttribute('width', dim.width); rect.setAttribute('height', dim.height); // rect.setAttribute('style', 'fill:#e8e8e8;'); label.insertBefore(rect, label.firstChild); } } addSVGAccessibilityFields(diagObj.db, svg, id); // If node has a link, wrap it in an anchor SVG object. // const keys = Object.keys(classes); // keys.forEach(function(key) { // const vertex = classes[key]; // if (vertex.link) { // const node = select('#' + id + ' [id="' + key + '"]'); // if (node) { // const link = document.createElementNS('http://www.w3.org/2000/svg', 'a'); // link.setAttributeNS('http://www.w3.org/2000/svg', 'class', vertex.classes.join(' ')); // link.setAttributeNS('http://www.w3.org/2000/svg', 'href', vertex.link); // link.setAttributeNS('http://www.w3.org/2000/svg', 'rel', 'noopener'); // const linkNode = node.insert(function() { // return link; // }, ':first-child'); // const shape = node.select('.label-container'); // if (shape) { // linkNode.append(function() { // return shape.node(); // }); // } // const label = node.select('.label'); // if (label) { // linkNode.append(function() { // return label.node(); // }); // } // } // } // }); }; /** * Gets the arrow marker for a type index * * @param {number} type The type to look for * @returns {'aggregation' | 'extension' | 'composition' | 'dependency'} The arrow marker */ function getArrowMarker(type) { let marker; switch (type) { case 0: marker = 'aggregation'; break; case 1: marker = 'extension'; break; case 2: marker = 'composition'; break; case 3: marker = 'dependency'; break; case 4: marker = 'lollipop'; break; default: marker = 'none'; } return marker; } export default { setConf, draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/classRenderer.js000066400000000000000000000147761433273745700277160ustar00rootroot00000000000000import { select } from 'd3'; import dagre from 'dagre'; import graphlib from 'graphlib'; import { log } from '../../logger'; import svgDraw from './svgDraw'; import { configureSvgSize } from '../../setupGraphViewbox'; import { getConfig } from '../../config'; import addSVGAccessibilityFields from '../../accessibility'; let idCache = {}; const padding = 20; /** * Gets the ID with the same label as in the cache * * @param {string} label The label to look for * @returns {string} The resulting ID */ const getGraphId = function (label) { const foundEntry = Object.entries(idCache).find((entry) => entry[1].label === label); if (foundEntry) { return foundEntry[0]; } }; /** * Setup arrow head and define the marker. The result is appended to the svg. * * @param {SVGSVGElement} elem The SVG element to append to */ const insertMarkers = function (elem) { elem .append('defs') .append('marker') .attr('id', 'extensionStart') .attr('class', 'extension') .attr('refX', 0) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('path') .attr('d', 'M 1,7 L18,13 V 1 Z'); elem .append('defs') .append('marker') .attr('id', 'extensionEnd') .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 1,1 V 13 L18,7 Z'); // this is actual shape for arrowhead elem .append('defs') .append('marker') .attr('id', 'compositionStart') .attr('class', 'extension') .attr('refX', 0) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); elem .append('defs') .append('marker') .attr('id', 'compositionEnd') .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); elem .append('defs') .append('marker') .attr('id', 'aggregationStart') .attr('class', 'extension') .attr('refX', 0) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); elem .append('defs') .append('marker') .attr('id', 'aggregationEnd') .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); elem .append('defs') .append('marker') .attr('id', 'dependencyStart') .attr('class', 'extension') .attr('refX', 0) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('path') .attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z'); elem .append('defs') .append('marker') .attr('id', 'dependencyEnd') .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z'); }; /** * Draws a flowchart in the tag with id: id based on the graph definition in text. * * @param {string} text * @param {string} id * @param {any} _version * @param diagObj */ export const draw = function (text, id, _version, diagObj) { const conf = getConfig().class; idCache = {}; // diagObj.db.clear(); // diagObj.parser.parse(text); log.info('Rendering diagram ' + text); const securityLevel = getConfig().securityLevel; // Handle root and Document for when rendering in sanbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); // Fetch the default direction, use TD if none was found const diagram = root.select(`[id='${id}']`); insertMarkers(diagram); // Layout graph, Create a new directed graph const g = new graphlib.Graph({ multigraph: true, }); // Set an object for the graph label g.setGraph({ isMultiGraph: true, }); // Default to assigning a new object as a label for each new edge. g.setDefaultEdgeLabel(function () { return {}; }); const classes = diagObj.db.getClasses(); const keys = Object.keys(classes); for (let i = 0; i < keys.length; i++) { const classDef = classes[keys[i]]; const node = svgDraw.drawClass(diagram, classDef, conf, diagObj); idCache[node.id] = node; // Add nodes to the graph. The first argument is the node id. The second is // metadata about the node. In this case we're going to add labels to each of // our nodes. g.setNode(node.id, node); log.info('Org height: ' + node.height); } const relations = diagObj.db.getRelations(); relations.forEach(function (relation) { log.info( 'tjoho' + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation) ); g.setEdge( getGraphId(relation.id1), getGraphId(relation.id2), { relation: relation, }, relation.title || 'DEFAULT' ); }); dagre.layout(g); g.nodes().forEach(function (v) { if (typeof v !== 'undefined' && typeof g.node(v) !== 'undefined') { log.debug('Node ' + v + ': ' + JSON.stringify(g.node(v))); root .select('#' + diagObj.db.lookUpDomId(v)) .attr( 'transform', 'translate(' + (g.node(v).x - g.node(v).width / 2) + ',' + (g.node(v).y - g.node(v).height / 2) + ' )' ); } }); g.edges().forEach(function (e) { if (typeof e !== 'undefined' && typeof g.edge(e) !== 'undefined') { log.debug('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(g.edge(e))); svgDraw.drawEdge(diagram, g.edge(e), g.edge(e).relation, conf, diagObj); } }); const svgBounds = diagram.node().getBBox(); const width = svgBounds.width + padding * 2; const height = svgBounds.height + padding * 2; configureSvgSize(diagram, height, width, conf.useMaxWidth); // Ensure the viewBox includes the whole svgBounds area with extra space for padding const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; log.debug(`viewBox ${vBox}`); diagram.attr('viewBox', vBox); addSVGAccessibilityFields(diagObj.db, diagram, id); }; export default { draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/parser/000077500000000000000000000000001433273745700260415ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/parser/classDiagram.jison000066400000000000000000000370041433273745700315030ustar00rootroot00000000000000/** mermaid * https://mermaidjs.github.io/ * (c) 2015 Knut Sveidqvist * MIT license. */ /* lexical grammar */ %lex %x string %x bqstring %x generic %x struct %x href %x callback_name %x callback_args %x open_directive %x type_directive %x arg_directive %x acc_title %x acc_descr %x acc_descr_multiline %% \%\%\{ { this.begin('open_directive'); return 'open_directive'; } .*direction\s+TB[^\n]* return 'direction_tb'; .*direction\s+BT[^\n]* return 'direction_bt'; .*direction\s+RL[^\n]* return 'direction_rl'; .*direction\s+LR[^\n]* return 'direction_lr'; ((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } ":" { this.popState(); this.begin('arg_directive'); return ':'; } \}\%\% { this.popState(); this.popState(); return 'close_directive'; } ((?:(?!\}\%\%).|\n)*) return 'arg_directive'; \%\%(?!\{)*[^\n]*(\r?\n?)+ /* skip comments */ \%\%[^\n]*(\r?\n)* /* skip comments */ accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} [\}] { this.popState(); } [^\}]* return "acc_descr_multiline_value"; \s*(\r?\n)+ return 'NEWLINE'; \s+ /* skip whitespace */ "classDiagram-v2" return 'CLASS_DIAGRAM'; "classDiagram" return 'CLASS_DIAGRAM'; [{] { this.begin("struct"); /*console.log('Starting struct');*/ return 'STRUCT_START';} "[*]" { /*console.log('EDGE_STATE=',yytext);*/ return 'EDGE_STATE';} <> return "EOF_IN_STRUCT"; [{] return "OPEN_IN_STRUCT"; [}] { /*console.log('Ending struct');*/this.popState(); return 'STRUCT_STOP';}} [\n] /* nothing */ [^{}\n]* { /*console.log('lex-member: ' + yytext);*/ return "MEMBER";} "class" return 'CLASS'; "cssClass" return 'CSSCLASS'; "callback" return 'CALLBACK'; "link" return 'LINK'; "click" return 'CLICK'; "<<" return 'ANNOTATION_START'; ">>" return 'ANNOTATION_END'; [~] this.begin("generic"); [~] this.popState(); [^~]* return "GENERICTYPE"; ["] this.begin("string"); ["] this.popState(); [^"]* return "STR"; [`] this.begin("bqstring"); [`] this.popState(); [^`]+ return "BQUOTE_STR"; /* ---interactivity command--- 'href' adds a link to the specified node. 'href' can only be specified when the line was introduced with 'click'. 'href ""' attaches the specified link to the node that was specified by 'click'. */ "href"[\s]+["] this.begin("href"); ["] this.popState(); [^"]* return 'HREF'; /* ---interactivity command--- 'call' adds a callback to the specified node. 'call' can only be specified when the line was introduced with 'click'. 'call ()' attaches the function 'callback_name' with the specified arguments to the node that was specified by 'click'. Function arguments are optional: 'call ()' simply executes 'callback_name' without any arguments. */ "call"[\s]+ this.begin("callback_name"); \([\s]*\) this.popState(); \( this.popState(); this.begin("callback_args"); [^(]* return 'CALLBACK_NAME'; \) this.popState(); [^)]* return 'CALLBACK_ARGS'; "_self" return 'LINK_TARGET'; "_blank" return 'LINK_TARGET'; "_parent" return 'LINK_TARGET'; "_top" return 'LINK_TARGET'; \s*\<\| return 'EXTENSION'; \s*\|\> return 'EXTENSION'; \s*\> return 'DEPENDENCY'; \s*\< return 'DEPENDENCY'; \s*\* return 'COMPOSITION'; \s*o return 'AGGREGATION'; \s*\(\) return 'LOLLIPOP'; \-\- return 'LINE'; \.\. return 'DOTTED_LINE'; ":"{1}[^:\n;]+ return 'LABEL'; ":"{3} return 'STYLE_SEPARATOR'; \- return 'MINUS'; "." return 'DOT'; \+ return 'PLUS'; \% return 'PCT'; "=" return 'EQUALS'; \= return 'EQUALS'; \w+ return 'ALPHA'; [!"#$%&'*+,-.`?\\/] return 'PUNCTUATION'; [0-9]+ return 'NUM'; [\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]| [\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]| [\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]| [\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]| [\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]| [\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]| [\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]| [\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]| [\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]| [\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]| [\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]| [\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]| [\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]| [\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]| [\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]| [\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]| [\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]| [\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]| [\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]| [\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]| [\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]| [\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]| [\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]| [\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]| [\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]| [\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]| [\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]| [\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]| [\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]| [\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]| [\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]| [\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]| [\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]| [\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]| [\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]| [\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]| [\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]| [\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]| [\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]| [\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]| [\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]| [\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]| [\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]| [\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]| [\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]| [\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]| [\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]| [\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]| [\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]| [\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]| [\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]| [\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]| [\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]| [\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]| [\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]| [\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]| [\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]| [\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]| [\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]| [\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]| [\uFFD2-\uFFD7\uFFDA-\uFFDC] return 'UNICODE_TEXT'; \s return 'SPACE'; <> return 'EOF'; /lex /* operator associations and precedence */ %left '^' %start start %% /* language grammar */ start : mermaidDoc | statments | direction | directive start ; direction : direction_tb { yy.setDirection('TB');} | direction_bt { yy.setDirection('BT');} | direction_rl { yy.setDirection('RL');} | direction_lr { yy.setDirection('LR');} ; mermaidDoc : graphConfig ; directive : openDirective typeDirective closeDirective NEWLINE | openDirective typeDirective ':' argDirective closeDirective NEWLINE ; openDirective : open_directive { yy.parseDirective('%%{', 'open_directive'); } ; typeDirective : type_directive { yy.parseDirective($1, 'type_directive'); } ; argDirective : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } ; closeDirective : close_directive { yy.parseDirective('}%%', 'close_directive', 'class'); } ; graphConfig : CLASS_DIAGRAM NEWLINE statements EOF ; statements : statement | statement NEWLINE | statement NEWLINE statements ; className : alphaNumToken { $$=$1; } | classLiteralName { $$=$1; } | alphaNumToken className { $$=$1+$2; } | alphaNumToken GENERICTYPE { $$=$1+'~'+$2; } | classLiteralName GENERICTYPE { $$=$1+'~'+$2; } ; statement : relationStatement { yy.addRelation($1); } | relationStatement LABEL { $1.title = yy.cleanupLabel($2); yy.addRelation($1); } | classStatement | methodStatement | annotationStatement | clickStatement | cssClassStatement | directive | direction | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } ; classStatement : CLASS className {yy.addClass($2);} | CLASS className STYLE_SEPARATOR alphaNumToken {yy.addClass($2);yy.setCssClass($2, $4);} | CLASS className STRUCT_START members STRUCT_STOP {/*console.log($2,JSON.stringify($4));*/yy.addClass($2);yy.addMembers($2,$4);} | CLASS className STYLE_SEPARATOR alphaNumToken STRUCT_START members STRUCT_STOP {yy.addClass($2);yy.setCssClass($2, $4);yy.addMembers($2,$6);} ; annotationStatement :ANNOTATION_START alphaNumToken ANNOTATION_END className { yy.addAnnotation($4,$2); } ; members : MEMBER { $$ = [$1]; } | MEMBER members { $2.push($1);$$=$2;} ; methodStatement : className {/*console.log('Rel found',$1);*/} | className LABEL {yy.addMember($1,yy.cleanupLabel($2));} | MEMBER {/*console.warn('Member',$1);*/} | SEPARATOR {/*console.log('sep found',$1);*/} ; relationStatement : className relation className { $$ = {'id1':$1,'id2':$3, relation:$2, relationTitle1:'none', relationTitle2:'none'}; } | className STR relation className { $$ = {id1:$1, id2:$4, relation:$3, relationTitle1:$2, relationTitle2:'none'}} | className relation STR className { $$ = {id1:$1, id2:$4, relation:$2, relationTitle1:'none', relationTitle2:$3}; } | className STR relation STR className { $$ = {id1:$1, id2:$5, relation:$3, relationTitle1:$2, relationTitle2:$4} } ; relation : relationType lineType relationType { $$={type1:$1,type2:$3,lineType:$2}; } | lineType relationType { $$={type1:'none',type2:$2,lineType:$1}; } | relationType lineType { $$={type1:$1,type2:'none',lineType:$2}; } | lineType { $$={type1:'none',type2:'none',lineType:$1}; } ; relationType : AGGREGATION { $$=yy.relationType.AGGREGATION;} | EXTENSION { $$=yy.relationType.EXTENSION;} | COMPOSITION { $$=yy.relationType.COMPOSITION;} | DEPENDENCY { $$=yy.relationType.DEPENDENCY;} | LOLLIPOP { $$=yy.relationType.LOLLIPOP;} ; lineType : LINE {$$=yy.lineType.LINE;} | DOTTED_LINE {$$=yy.lineType.DOTTED_LINE;} ; clickStatement : CALLBACK className STR {$$ = $1;yy.setClickEvent($2, $3);} | CALLBACK className STR STR {$$ = $1;yy.setClickEvent($2, $3);yy.setTooltip($2, $4);} | LINK className STR {$$ = $1;yy.setLink($2, $3);} | LINK className STR LINK_TARGET {$$ = $1;yy.setLink($2, $3,$4);} | LINK className STR STR {$$ = $1;yy.setLink($2, $3);yy.setTooltip($2, $4);} | LINK className STR STR LINK_TARGET {$$ = $1;yy.setLink($2, $3, $5);yy.setTooltip($2, $4);} | CLICK className CALLBACK_NAME {$$ = $1;yy.setClickEvent($2, $3);} | CLICK className CALLBACK_NAME STR {$$ = $1;yy.setClickEvent($2, $3);yy.setTooltip($2, $4);} | CLICK className CALLBACK_NAME CALLBACK_ARGS {$$ = $1;yy.setClickEvent($2, $3, $4);} | CLICK className CALLBACK_NAME CALLBACK_ARGS STR {$$ = $1;yy.setClickEvent($2, $3, $4);yy.setTooltip($2, $5);} | CLICK className HREF {$$ = $1;yy.setLink($2, $3);} | CLICK className HREF LINK_TARGET {$$ = $1;yy.setLink($2, $3, $4);} | CLICK className HREF STR {$$ = $1;yy.setLink($2, $3);yy.setTooltip($2, $4);} | CLICK className HREF STR LINK_TARGET {$$ = $1;yy.setLink($2, $3, $5);yy.setTooltip($2, $4);} ; cssClassStatement : CSSCLASS STR alphaNumToken {yy.setCssClass($2, $3);} ; commentToken : textToken | graphCodeTokens ; textToken : textNoTagsToken | TAGSTART | TAGEND | '==' | '--' | PCT | DEFAULT; textNoTagsToken: alphaNumToken | SPACE | MINUS | keywords ; alphaNumToken : UNICODE_TEXT | NUM | ALPHA; classLiteralName : BQUOTE_STR; %% mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/styles.js000066400000000000000000000051231433273745700264270ustar00rootroot00000000000000const getStyles = (options) => `g.classGroup text { fill: ${options.nodeBorder}; fill: ${options.classText}; stroke: none; font-family: ${options.fontFamily}; font-size: 10px; .title { font-weight: bolder; } } .nodeLabel, .edgeLabel { color: ${options.classText}; } .edgeLabel .label rect { fill: ${options.mainBkg}; } .label text { fill: ${options.classText}; } .edgeLabel .label span { background: ${options.mainBkg}; } .classTitle { font-weight: bolder; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; stroke-width: 1px; } .divider { stroke: ${options.nodeBorder}; stroke: 1; } g.clickable { cursor: pointer; } g.classGroup rect { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; } g.classGroup line { stroke: ${options.nodeBorder}; stroke-width: 1; } .classLabel .box { stroke: none; stroke-width: 0; fill: ${options.mainBkg}; opacity: 0.5; } .classLabel .label { fill: ${options.nodeBorder}; font-size: 10px; } .relation { stroke: ${options.lineColor}; stroke-width: 1; fill: none; } .dashed-line{ stroke-dasharray: 3; } #compositionStart, .composition { fill: ${options.lineColor} !important; stroke: ${options.lineColor} !important; stroke-width: 1; } #compositionEnd, .composition { fill: ${options.lineColor} !important; stroke: ${options.lineColor} !important; stroke-width: 1; } #dependencyStart, .dependency { fill: ${options.lineColor} !important; stroke: ${options.lineColor} !important; stroke-width: 1; } #dependencyStart, .dependency { fill: ${options.lineColor} !important; stroke: ${options.lineColor} !important; stroke-width: 1; } #extensionStart, .extension { fill: ${options.lineColor} !important; stroke: ${options.lineColor} !important; stroke-width: 1; } #extensionEnd, .extension { fill: ${options.lineColor} !important; stroke: ${options.lineColor} !important; stroke-width: 1; } #aggregationStart, .aggregation { fill: ${options.mainBkg} !important; stroke: ${options.lineColor} !important; stroke-width: 1; } #aggregationEnd, .aggregation { fill: ${options.mainBkg} !important; stroke: ${options.lineColor} !important; stroke-width: 1; } #lollipopStart, .lollipop { fill: ${options.mainBkg} !important; stroke: ${options.lineColor} !important; stroke-width: 1; } #lollipopEnd, .lollipop { fill: ${options.mainBkg} !important; stroke: ${options.lineColor} !important; stroke-width: 1; } .edgeTerminals { font-size: 11px; } `; export default getStyles; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/svgDraw.js000066400000000000000000000304201433273745700265170ustar00rootroot00000000000000import { line, curveBasis } from 'd3'; import utils from '../../utils'; import { log } from '../../logger'; import { parseGenericTypes } from '../common/common'; let edgeCount = 0; export const drawEdge = function (elem, path, relation, conf, diagObj) { const getRelationType = function (type) { switch (type) { case diagObj.db.relationType.AGGREGATION: return 'aggregation'; case diagObj.db.EXTENSION: return 'extension'; case diagObj.db.COMPOSITION: return 'composition'; case diagObj.db.DEPENDENCY: return 'dependency'; case diagObj.db.LOLLIPOP: return 'lollipop'; } }; path.points = path.points.filter((p) => !Number.isNaN(p.y)); // The data for our line const lineData = path.points; // This is the accessor function we talked about above const lineFunction = line() .x(function (d) { return d.x; }) .y(function (d) { return d.y; }) .curve(curveBasis); const svgPath = elem .append('path') .attr('d', lineFunction(lineData)) .attr('id', 'edge' + edgeCount) .attr('class', 'relation'); let url = ''; if (conf.arrowMarkerAbsolute) { url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search; url = url.replace(/\(/g, '\\('); url = url.replace(/\)/g, '\\)'); } if (relation.relation.lineType == 1) { svgPath.attr('class', 'relation dashed-line'); } if (relation.relation.type1 !== 'none') { svgPath.attr( 'marker-start', 'url(' + url + '#' + getRelationType(relation.relation.type1) + 'Start' + ')' ); } if (relation.relation.type2 !== 'none') { svgPath.attr( 'marker-end', 'url(' + url + '#' + getRelationType(relation.relation.type2) + 'End' + ')' ); } let x, y; const l = path.points.length; // Calculate Label position let labelPosition = utils.calcLabelPosition(path.points); x = labelPosition.x; y = labelPosition.y; let p1_card_x, p1_card_y; let p2_card_x, p2_card_y; if (l % 2 !== 0 && l > 1) { let cardinality_1_point = utils.calcCardinalityPosition( relation.relation.type1 !== 'none', path.points, path.points[0] ); let cardinality_2_point = utils.calcCardinalityPosition( relation.relation.type2 !== 'none', path.points, path.points[l - 1] ); log.debug('cardinality_1_point ' + JSON.stringify(cardinality_1_point)); log.debug('cardinality_2_point ' + JSON.stringify(cardinality_2_point)); p1_card_x = cardinality_1_point.x; p1_card_y = cardinality_1_point.y; p2_card_x = cardinality_2_point.x; p2_card_y = cardinality_2_point.y; } if (typeof relation.title !== 'undefined') { const g = elem.append('g').attr('class', 'classLabel'); const label = g .append('text') .attr('class', 'label') .attr('x', x) .attr('y', y) .attr('fill', 'red') .attr('text-anchor', 'middle') .text(relation.title); window.label = label; const bounds = label.node().getBBox(); g.insert('rect', ':first-child') .attr('class', 'box') .attr('x', bounds.x - conf.padding / 2) .attr('y', bounds.y - conf.padding / 2) .attr('width', bounds.width + conf.padding) .attr('height', bounds.height + conf.padding); } log.info('Rendering relation ' + JSON.stringify(relation)); if (typeof relation.relationTitle1 !== 'undefined' && relation.relationTitle1 !== 'none') { const g = elem.append('g').attr('class', 'cardinality'); g.append('text') .attr('class', 'type1') .attr('x', p1_card_x) .attr('y', p1_card_y) .attr('fill', 'black') .attr('font-size', '6') .text(relation.relationTitle1); } if (typeof relation.relationTitle2 !== 'undefined' && relation.relationTitle2 !== 'none') { const g = elem.append('g').attr('class', 'cardinality'); g.append('text') .attr('class', 'type2') .attr('x', p2_card_x) .attr('y', p2_card_y) .attr('fill', 'black') .attr('font-size', '6') .text(relation.relationTitle2); } edgeCount++; }; /** * Renders a class diagram * * @param {SVGSVGElement} elem The element to draw it into * @param classDef * @param conf * @param diagObj * @todo Add more information in the JSDOC here */ export const drawClass = function (elem, classDef, conf, diagObj) { log.debug('Rendering class ', classDef, conf); const id = classDef.id; const classInfo = { id: id, label: classDef.id, width: 0, height: 0, }; // add class group const g = elem.append('g').attr('id', diagObj.db.lookUpDomId(id)).attr('class', 'classGroup'); // add title let title; if (classDef.link) { title = g .append('svg:a') .attr('xlink:href', classDef.link) .attr('target', classDef.linkTarget) .append('text') .attr('y', conf.textHeight + conf.padding) .attr('x', 0); } else { title = g .append('text') .attr('y', conf.textHeight + conf.padding) .attr('x', 0); } // add annotations let isFirst = true; classDef.annotations.forEach(function (member) { const titleText2 = title.append('tspan').text('«' + member + '»'); if (!isFirst) titleText2.attr('dy', conf.textHeight); isFirst = false; }); let classTitleString = classDef.id; if (classDef.type !== undefined && classDef.type !== '') { classTitleString += '<' + classDef.type + '>'; } const classTitle = title.append('tspan').text(classTitleString).attr('class', 'title'); // If class has annotations the title needs to have an offset of the text height if (!isFirst) classTitle.attr('dy', conf.textHeight); const titleHeight = title.node().getBBox().height; const membersLine = g .append('line') // text label for the x axis .attr('x1', 0) .attr('y1', conf.padding + titleHeight + conf.dividerMargin / 2) .attr('y2', conf.padding + titleHeight + conf.dividerMargin / 2); const members = g .append('text') // text label for the x axis .attr('x', conf.padding) .attr('y', titleHeight + conf.dividerMargin + conf.textHeight) .attr('fill', 'white') .attr('class', 'classText'); isFirst = true; classDef.members.forEach(function (member) { addTspan(members, member, isFirst, conf); isFirst = false; }); const membersBox = members.node().getBBox(); const methodsLine = g .append('line') // text label for the x axis .attr('x1', 0) .attr('y1', conf.padding + titleHeight + conf.dividerMargin + membersBox.height) .attr('y2', conf.padding + titleHeight + conf.dividerMargin + membersBox.height); const methods = g .append('text') // text label for the x axis .attr('x', conf.padding) .attr('y', titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight) .attr('fill', 'white') .attr('class', 'classText'); isFirst = true; classDef.methods.forEach(function (method) { addTspan(methods, method, isFirst, conf); isFirst = false; }); const classBox = g.node().getBBox(); var cssClassStr = ' '; if (classDef.cssClasses.length > 0) { cssClassStr = cssClassStr + classDef.cssClasses.join(' '); } const rect = g .insert('rect', ':first-child') .attr('x', 0) .attr('y', 0) .attr('width', classBox.width + 2 * conf.padding) .attr('height', classBox.height + conf.padding + 0.5 * conf.dividerMargin) .attr('class', cssClassStr); const rectWidth = rect.node().getBBox().width; // Center title // We subtract the width of each text element from the class box width and divide it by 2 title.node().childNodes.forEach(function (x) { x.setAttribute('x', (rectWidth - x.getBBox().width) / 2); }); if (classDef.tooltip) { title.insert('title').text(classDef.tooltip); } membersLine.attr('x2', rectWidth); methodsLine.attr('x2', rectWidth); classInfo.width = rectWidth; classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; return classInfo; }; export const parseMember = function (text) { const fieldRegEx = /^(\+|-|~|#)?(\w+)(~\w+~|\[\])?\s+(\w+) *(\*|\$)?$/; const methodRegEx = /^([+|\-|~|#])?(\w+) *\( *(.*)\) *(\*|\$)? *(\w*[~|[\]]*\s*\w*~?)$/; let fieldMatch = text.match(fieldRegEx); let methodMatch = text.match(methodRegEx); if (fieldMatch && !methodMatch) { return buildFieldDisplay(fieldMatch); } else if (methodMatch) { return buildMethodDisplay(methodMatch); } else { return buildLegacyDisplay(text); } }; const buildFieldDisplay = function (parsedText) { let cssStyle = ''; let displayText = ''; try { let visibility = parsedText[1] ? parsedText[1].trim() : ''; let fieldType = parsedText[2] ? parsedText[2].trim() : ''; let genericType = parsedText[3] ? parseGenericTypes(parsedText[3].trim()) : ''; let fieldName = parsedText[4] ? parsedText[4].trim() : ''; let classifier = parsedText[5] ? parsedText[5].trim() : ''; displayText = visibility + fieldType + genericType + ' ' + fieldName; cssStyle = parseClassifier(classifier); } catch (err) { displayText = parsedText; } return { displayText: displayText, cssStyle: cssStyle, }; }; const buildMethodDisplay = function (parsedText) { let cssStyle = ''; let displayText = ''; try { let visibility = parsedText[1] ? parsedText[1].trim() : ''; let methodName = parsedText[2] ? parsedText[2].trim() : ''; let parameters = parsedText[3] ? parseGenericTypes(parsedText[3].trim()) : ''; let classifier = parsedText[4] ? parsedText[4].trim() : ''; let returnType = parsedText[5] ? ' : ' + parseGenericTypes(parsedText[5]).trim() : ''; displayText = visibility + methodName + '(' + parameters + ')' + returnType; cssStyle = parseClassifier(classifier); } catch (err) { displayText = parsedText; } return { displayText: displayText, cssStyle: cssStyle, }; }; const buildLegacyDisplay = function (text) { // if for some reason we dont have any match, use old format to parse text let displayText = ''; let cssStyle = ''; let memberText = ''; let returnType = ''; let methodStart = text.indexOf('('); let methodEnd = text.indexOf(')'); if (methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length) { let visibility = ''; let methodName = ''; let firstChar = text.substring(0, 1); if (firstChar.match(/\w/)) { methodName = text.substring(0, methodStart).trim(); } else { if (firstChar.match(/\+|-|~|#/)) { visibility = firstChar; } methodName = text.substring(1, methodStart).trim(); } const parameters = text.substring(methodStart + 1, methodEnd); const classifier = text.substring(methodEnd + 1, 1); cssStyle = parseClassifier(text.substring(methodEnd + 1, methodEnd + 2)); displayText = visibility + methodName + '(' + parseGenericTypes(parameters.trim()) + ')'; if (methodEnd < text.length) { returnType = text.substring(methodEnd + 2).trim(); if (returnType !== '') { returnType = ' : ' + parseGenericTypes(returnType); displayText += returnType; } } } else { // finally - if all else fails, just send the text back as written (other than parsing for generic types) displayText = parseGenericTypes(text); } return { displayText, cssStyle, }; }; /** * Adds a for a member in a diagram * * @param {SVGElement} textEl The element to append to * @param {string} txt The member * @param {boolean} isFirst * @param {{ padding: string; textHeight: string }} conf The configuration for the member */ const addTspan = function (textEl, txt, isFirst, conf) { let member = parseMember(txt); const tSpan = textEl.append('tspan').attr('x', conf.padding).text(member.displayText); if (member.cssStyle !== '') { tSpan.attr('style', member.cssStyle); } if (!isFirst) { tSpan.attr('dy', conf.textHeight); } }; /** * Gives the styles for a classifier * * @param {'+' | '-' | '#' | '~' | '*' | '$'} classifier The classifier string * @returns {string} Styling for the classifier */ const parseClassifier = function (classifier) { switch (classifier) { case '*': return 'font-style:italic;'; case '$': return 'text-decoration:underline;'; default: return ''; } }; export default { drawClass, drawEdge, parseMember, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/class/svgDraw.spec.js000066400000000000000000000132251433273745700274540ustar00rootroot00000000000000import svgDraw from './svgDraw'; describe('class member Renderer, ', function () { describe('when parsing text to build method display string', function () { it('should handle simple method declaration', function () { const str = 'foo()'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('foo()'); expect(actual.cssStyle).toBe(''); }); it('should handle public visibility', function () { const str = '+foo()'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('+foo()'); expect(actual.cssStyle).toBe(''); }); it('should handle private visibility', function () { const str = '-foo()'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('-foo()'); expect(actual.cssStyle).toBe(''); }); it('should handle protected visibility', function () { const str = '#foo()'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('#foo()'); expect(actual.cssStyle).toBe(''); }); it('should handle package/internal visibility', function () { const str = '~foo()'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('~foo()'); expect(actual.cssStyle).toBe(''); }); it('should ignore unknown character for visibility', function () { const str = '!foo()'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('foo()'); expect(actual.cssStyle).toBe(''); }); it('should handle abstract method classifier', function () { const str = 'foo()*'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('foo()'); expect(actual.cssStyle).toBe('font-style:italic;'); }); it('should handle static method classifier', function () { const str = 'foo()$'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('foo()'); expect(actual.cssStyle).toBe('text-decoration:underline;'); }); it('should ignore unknown character for classifier', function () { const str = 'foo()!'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('foo()'); expect(actual.cssStyle).toBe(''); }); it('should handle simple method declaration with parameters', function () { const str = 'foo(int id)'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('foo(int id)'); expect(actual.cssStyle).toBe(''); }); it('should handle simple method declaration with multiple parameters', function () { const str = 'foo(int id, object thing)'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('foo(int id, object thing)'); expect(actual.cssStyle).toBe(''); }); it('should handle simple method declaration with single item in parameters', function () { const str = 'foo(id)'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('foo(id)'); expect(actual.cssStyle).toBe(''); }); it('should handle simple method declaration with single item in parameters with extra spaces', function () { const str = ' foo ( id) '; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('foo(id)'); expect(actual.cssStyle).toBe(''); }); it('should handle method declaration with return value', function () { const str = 'foo(id) int'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('foo(id) : int'); expect(actual.cssStyle).toBe(''); }); it('should handle method declaration with generic return value', function () { const str = 'foo(id) List~int~'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('foo(id) : List'); expect(actual.cssStyle).toBe(''); }); it('should handle method declaration with generic parameter', function () { const str = 'foo(List~int~)'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('foo(List)'); expect(actual.cssStyle).toBe(''); }); it('should handle method declaration with all possible markup', function () { const str = '+foo ( List~int~ ids )* List~Item~'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('+foo(List ids) : List'); expect(actual.cssStyle).toBe('font-style:italic;'); }); it('should handle method declaration with nested markup', function () { const str = '+foo ( List~List~int~~ ids )* List~List~Item~~'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('+foo(List> ids) : List>'); expect(actual.cssStyle).toBe('font-style:italic;'); }); }); describe('when parsing text to build field display string', function () { it('should handle simple field declaration', function () { const str = 'int[] ids'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('int[] ids'); expect(actual.cssStyle).toBe(''); }); it('should handle field declaration with generic type', function () { const str = 'List~int~ ids'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('List ids'); expect(actual.cssStyle).toBe(''); }); it('should handle static field classifier', function () { const str = 'String foo$'; let actual = svgDraw.parseMember(str); expect(actual.displayText).toBe('String foo'); expect(actual.cssStyle).toBe('text-decoration:underline;'); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/common/000077500000000000000000000000001433273745700247305ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/common/common.spec.js000066400000000000000000000044041433273745700275110ustar00rootroot00000000000000import { sanitizeText, removeScript, parseGenericTypes } from './common'; describe('when securityLevel is antiscript, all script must be removed', function () { /** * @param {string} original The original text * @param {string} result The expected sanitized text */ function compareRemoveScript(original, result) { expect(removeScript(original).trim()).toEqual(result); } it('should remove all script block, script inline.', function () { const labelString = `1 Act1: Hello 11 Act2: 11 1`; const exactlyString = `1 Act1: Hello 11 Act2: 11 1`; compareRemoveScript(labelString, exactlyString); }); it('should remove all javascript urls', function () { compareRemoveScript( `This is a
clean link + clean link and me too`, `This is a clean link + clean link and me too` ); }); it('should detect malicious images', function () { compareRemoveScript(``, ``); }); it('should detect iframes', function () { compareRemoveScript( ` `, '' ); }); }); describe('Sanitize text', function () { it('should remove script tag', function () { const maliciousStr = 'javajavascript:script:alert(1)'; const result = sanitizeText(maliciousStr, { securityLevel: 'strict', flowchart: { htmlLabels: true }, }); expect(result).not.toContain('javascript:alert(1)'); }); }); describe('generic parser', function () { it('should parse generic types', function () { expect(parseGenericTypes('test~T~')).toEqual('test'); expect(parseGenericTypes('test~Array~Array~string~~~')).toEqual('test>>'); expect(parseGenericTypes('test~Array~Array~string[]~~~')).toEqual( 'test>>' ); expect(parseGenericTypes('test ~Array~Array~string[]~~~')).toEqual( 'test >>' ); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/common/common.ts000066400000000000000000000104241433273745700265710ustar00rootroot00000000000000import DOMPurify from 'dompurify'; import { MermaidConfig } from '../../config.type'; /** * Gets the rows of lines in a string * * @param {string | undefined} s The string to check the lines for * @returns {string[]} The rows in that string */ export const getRows = (s?: string): string[] => { if (!s) return ['']; const str = breakToPlaceholder(s).replace(/\\n/g, '#br#'); return str.split('#br#'); }; /** * Removes script tags from a text * * @param {string} txt The text to sanitize * @returns {string} The safer text */ export const removeScript = (txt: string): string => { return DOMPurify.sanitize(txt); }; const sanitizeMore = (text: string, config: MermaidConfig) => { if (config.flowchart?.htmlLabels !== false) { const level = config.securityLevel; if (level === 'antiscript' || level === 'strict') { text = removeScript(text); } else if (level !== 'loose') { text = breakToPlaceholder(text); text = text.replace(//g, '>'); text = text.replace(/=/g, '='); text = placeholderToBreak(text); } } return text; }; export const sanitizeText = (text: string, config: MermaidConfig): string => { if (!text) return text; if (config.dompurifyConfig) { text = DOMPurify.sanitize(sanitizeMore(text, config), config.dompurifyConfig).toString(); } else { text = DOMPurify.sanitize(sanitizeMore(text, config)); } return text; }; export const sanitizeTextOrArray = ( a: string | string[] | string[][], config: MermaidConfig ): string | string[] => { if (typeof a === 'string') return sanitizeText(a, config); // TODO: Refactor to avoid flat. return a.flat().map((x: string) => sanitizeText(x, config)); }; export const lineBreakRegex = //gi; /** * Whether or not a text has any linebreaks * * @param {string} text The text to test * @returns {boolean} Whether or not the text has breaks */ export const hasBreaks = (text: string): boolean => { return lineBreakRegex.test(text); }; /** * Splits on
tags * * @param {string} text Text to split * @returns {string[]} List of lines as strings */ export const splitBreaks = (text: string): string[] => { return text.split(lineBreakRegex); }; /** * Converts placeholders to linebreaks in HTML * * @param {string} s HTML with placeholders * @returns {string} HTML with breaks instead of placeholders */ const placeholderToBreak = (s: string): string => { return s.replace(/#br#/g, '
'); }; /** * Opposite of `placeholderToBreak`, converts breaks to placeholders * * @param {string} s HTML string * @returns {string} String with placeholders */ const breakToPlaceholder = (s: string): string => { return s.replace(lineBreakRegex, '#br#'); }; /** * Gets the current URL * * @param {boolean} useAbsolute Whether to return the absolute URL or not * @returns {string} The current URL */ const getUrl = (useAbsolute: boolean): string => { let url = ''; if (useAbsolute) { url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search; url = url.replaceAll(/\(/g, '\\('); url = url.replaceAll(/\)/g, '\\)'); } return url; }; /** * Converts a string/boolean into a boolean * * @param {string | boolean} val String or boolean to convert * @returns {boolean} The result from the input */ export const evaluate = (val?: string | boolean): boolean => val === false || ['false', 'null', '0'].includes(String(val).trim().toLowerCase()) ? false : true; /** * Makes generics in typescript syntax * * @example
* // returns "Array>" * parseGenericTypes('Array~Array~string~~'); * * @param {string} text The text to convert * @returns {string} The converted string */ export const parseGenericTypes = function (text: string): string { let cleanedText = text; if (text.indexOf('~') !== -1) { cleanedText = cleanedText.replace(/~([^~].*)/, '<$1'); cleanedText = cleanedText.replace(/~([^~]*)$/, '>$1'); return parseGenericTypes(cleanedText); } else { return cleanedText; } }; export default { getRows, sanitizeText, sanitizeTextOrArray, hasBreaks, splitBreaks, lineBreakRegex, removeScript, getUrl, evaluate, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/er/000077500000000000000000000000001433273745700240465ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/er/erDb.js000066400000000000000000000043231433273745700252620ustar00rootroot00000000000000import { log } from '../../logger'; import mermaidAPI from '../../mermaidAPI'; import * as configApi from '../../config'; import { setAccTitle, getAccTitle, getAccDescription, setAccDescription, clear as commonClear, } from '../../commonDb'; let entities = {}; let relationships = []; const Cardinality = { ZERO_OR_ONE: 'ZERO_OR_ONE', ZERO_OR_MORE: 'ZERO_OR_MORE', ONE_OR_MORE: 'ONE_OR_MORE', ONLY_ONE: 'ONLY_ONE', }; const Identification = { NON_IDENTIFYING: 'NON_IDENTIFYING', IDENTIFYING: 'IDENTIFYING', }; export const parseDirective = function (statement, context, type) { mermaidAPI.parseDirective(this, statement, context, type); }; const addEntity = function (name) { if (typeof entities[name] === 'undefined') { entities[name] = { attributes: [] }; log.info('Added new entity :', name); } return entities[name]; }; const getEntities = () => entities; const addAttributes = function (entityName, attribs) { let entity = addEntity(entityName); // May do nothing (if entity has already been added) // Process attribs in reverse order due to effect of recursive construction (last attribute is first) let i; for (i = attribs.length - 1; i >= 0; i--) { entity.attributes.push(attribs[i]); log.debug('Added attribute ', attribs[i].attributeName); } }; /** * Add a relationship * * @param entA The first entity in the relationship * @param rolA The role played by the first entity in relation to the second * @param entB The second entity in the relationship * @param rSpec The details of the relationship between the two entities */ const addRelationship = function (entA, rolA, entB, rSpec) { let rel = { entityA: entA, roleA: rolA, entityB: entB, relSpec: rSpec, }; relationships.push(rel); log.debug('Added new relationship :', rel); }; const getRelationships = () => relationships; const clear = function () { entities = {}; relationships = []; commonClear(); }; export default { Cardinality, Identification, parseDirective, getConfig: () => configApi.getConfig().er, addEntity, addAttributes, getEntities, addRelationship, getRelationships, clear, setAccTitle, getAccTitle, setAccDescription, getAccDescription, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/er/erDetector.ts000066400000000000000000000002501433273745700265130ustar00rootroot00000000000000import type { DiagramDetector } from '../../diagram-api/types'; export const erDetector: DiagramDetector = (txt) => { return txt.match(/^\s*erDiagram/) !== null; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/er/erMarkers.js000066400000000000000000000076301433273745700263450ustar00rootroot00000000000000const ERMarkers = { ONLY_ONE_START: 'ONLY_ONE_START', ONLY_ONE_END: 'ONLY_ONE_END', ZERO_OR_ONE_START: 'ZERO_OR_ONE_START', ZERO_OR_ONE_END: 'ZERO_OR_ONE_END', ONE_OR_MORE_START: 'ONE_OR_MORE_START', ONE_OR_MORE_END: 'ONE_OR_MORE_END', ZERO_OR_MORE_START: 'ZERO_OR_MORE_START', ZERO_OR_MORE_END: 'ZERO_OR_MORE_END', }; /** * Put the markers into the svg DOM for later use with edge paths * * @param elem * @param conf */ const insertMarkers = function (elem, conf) { let marker; elem .append('defs') .append('marker') .attr('id', ERMarkers.ONLY_ONE_START) .attr('refX', 0) .attr('refY', 9) .attr('markerWidth', 18) .attr('markerHeight', 18) .attr('orient', 'auto') .append('path') .attr('stroke', conf.stroke) .attr('fill', 'none') .attr('d', 'M9,0 L9,18 M15,0 L15,18'); elem .append('defs') .append('marker') .attr('id', ERMarkers.ONLY_ONE_END) .attr('refX', 18) .attr('refY', 9) .attr('markerWidth', 18) .attr('markerHeight', 18) .attr('orient', 'auto') .append('path') .attr('stroke', conf.stroke) .attr('fill', 'none') .attr('d', 'M3,0 L3,18 M9,0 L9,18'); marker = elem .append('defs') .append('marker') .attr('id', ERMarkers.ZERO_OR_ONE_START) .attr('refX', 0) .attr('refY', 9) .attr('markerWidth', 30) .attr('markerHeight', 18) .attr('orient', 'auto'); marker .append('circle') .attr('stroke', conf.stroke) .attr('fill', 'white') .attr('cx', 21) .attr('cy', 9) .attr('r', 6); marker.append('path').attr('stroke', conf.stroke).attr('fill', 'none').attr('d', 'M9,0 L9,18'); marker = elem .append('defs') .append('marker') .attr('id', ERMarkers.ZERO_OR_ONE_END) .attr('refX', 30) .attr('refY', 9) .attr('markerWidth', 30) .attr('markerHeight', 18) .attr('orient', 'auto'); marker .append('circle') .attr('stroke', conf.stroke) .attr('fill', 'white') .attr('cx', 9) .attr('cy', 9) .attr('r', 6); marker.append('path').attr('stroke', conf.stroke).attr('fill', 'none').attr('d', 'M21,0 L21,18'); elem .append('defs') .append('marker') .attr('id', ERMarkers.ONE_OR_MORE_START) .attr('refX', 18) .attr('refY', 18) .attr('markerWidth', 45) .attr('markerHeight', 36) .attr('orient', 'auto') .append('path') .attr('stroke', conf.stroke) .attr('fill', 'none') .attr('d', 'M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27'); elem .append('defs') .append('marker') .attr('id', ERMarkers.ONE_OR_MORE_END) .attr('refX', 27) .attr('refY', 18) .attr('markerWidth', 45) .attr('markerHeight', 36) .attr('orient', 'auto') .append('path') .attr('stroke', conf.stroke) .attr('fill', 'none') .attr('d', 'M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18'); marker = elem .append('defs') .append('marker') .attr('id', ERMarkers.ZERO_OR_MORE_START) .attr('refX', 18) .attr('refY', 18) .attr('markerWidth', 57) .attr('markerHeight', 36) .attr('orient', 'auto'); marker .append('circle') .attr('stroke', conf.stroke) .attr('fill', 'white') .attr('cx', 48) .attr('cy', 18) .attr('r', 6); marker .append('path') .attr('stroke', conf.stroke) .attr('fill', 'none') .attr('d', 'M0,18 Q18,0 36,18 Q18,36 0,18'); marker = elem .append('defs') .append('marker') .attr('id', ERMarkers.ZERO_OR_MORE_END) .attr('refX', 39) .attr('refY', 18) .attr('markerWidth', 57) .attr('markerHeight', 36) .attr('orient', 'auto'); marker .append('circle') .attr('stroke', conf.stroke) .attr('fill', 'white') .attr('cx', 9) .attr('cy', 18) .attr('r', 6); marker .append('path') .attr('stroke', conf.stroke) .attr('fill', 'none') .attr('d', 'M21,18 Q39,0 57,18 Q39,36 21,18'); return; }; export default { ERMarkers, insertMarkers, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/er/erRenderer.js000066400000000000000000000565761433273745700265240ustar00rootroot00000000000000import graphlib from 'graphlib'; import { line, curveBasis, select } from 'd3'; import dagre from 'dagre'; import { getConfig } from '../../config'; import { log } from '../../logger'; import erMarkers from './erMarkers'; import { configureSvgSize } from '../../setupGraphViewbox'; import addSVGAccessibilityFields from '../../accessibility'; import { parseGenericTypes } from '../common/common'; import { v4 as uuid4 } from 'uuid'; /** Regex used to remove chars from the entity name so the result can be used in an id */ const BAD_ID_CHARS_REGEXP = /[^A-Za-z0-9]([\W])*/g; // Configuration let conf = {}; // Map so we can look up the id of an entity based on the name let entityNameIds = new Map(); /** * Allows the top-level API module to inject config specific to this renderer, storing it in the * local conf object. Note that generic config still needs to be retrieved using getConfig() * imported from the config module * * @param cnf */ export const setConf = function (cnf) { const keys = Object.keys(cnf); for (let i = 0; i < keys.length; i++) { conf[keys[i]] = cnf[keys[i]]; } }; /** * Draw attributes for an entity * * @param groupNode The svg group node for the entity * @param entityTextNode The svg node for the entity label text * @param attributes An array of attributes defined for the entity (each attribute has a type and a * name) * @returns {object} The bounding box of the entity, after attributes have been added. The bounding * box has a .width and .height */ const drawAttributes = (groupNode, entityTextNode, attributes) => { const heightPadding = conf.entityPadding / 3; // Padding internal to attribute boxes const widthPadding = conf.entityPadding / 3; // Ditto const attrFontSize = conf.fontSize * 0.85; const labelBBox = entityTextNode.node().getBBox(); const attributeNodes = []; // Intermediate storage for attribute nodes created so that we can do a second pass let hasKeyType = false; let hasComment = false; let maxTypeWidth = 0; let maxNameWidth = 0; let maxKeyWidth = 0; let maxCommentWidth = 0; let cumulativeHeight = labelBBox.height + heightPadding * 2; let attrNum = 1; // Check to see if any of the attributes has a key or a comment attributes.forEach((item) => { if (item.attributeKeyType !== undefined) { hasKeyType = true; } if (item.attributeComment !== undefined) { hasComment = true; } }); attributes.forEach((item) => { const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`; let nodeHeight = 0; const attributeType = parseGenericTypes(item.attributeType); // Add a text node for the attribute type const typeNode = groupNode .append('text') .attr('class', 'er entityLabel') .attr('id', `${attrPrefix}-type`) .attr('x', 0) .attr('y', 0) .attr('dominant-baseline', 'middle') .attr('text-anchor', 'left') .attr( 'style', 'font-family: ' + getConfig().fontFamily + '; font-size: ' + attrFontSize + 'px' ) .text(attributeType); // Add a text node for the attribute name const nameNode = groupNode .append('text') .attr('class', 'er entityLabel') .attr('id', `${attrPrefix}-name`) .attr('x', 0) .attr('y', 0) .attr('dominant-baseline', 'middle') .attr('text-anchor', 'left') .attr( 'style', 'font-family: ' + getConfig().fontFamily + '; font-size: ' + attrFontSize + 'px' ) .text(item.attributeName); const attributeNode = {}; attributeNode.tn = typeNode; attributeNode.nn = nameNode; const typeBBox = typeNode.node().getBBox(); const nameBBox = nameNode.node().getBBox(); maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width); maxNameWidth = Math.max(maxNameWidth, nameBBox.width); nodeHeight = Math.max(typeBBox.height, nameBBox.height); if (hasKeyType) { const keyTypeNode = groupNode .append('text') .attr('class', 'er entityLabel') .attr('id', `${attrPrefix}-key`) .attr('x', 0) .attr('y', 0) .attr('dominant-baseline', 'middle') .attr('text-anchor', 'left') .attr( 'style', 'font-family: ' + getConfig().fontFamily + '; font-size: ' + attrFontSize + 'px' ) .text(item.attributeKeyType || ''); attributeNode.kn = keyTypeNode; const keyTypeBBox = keyTypeNode.node().getBBox(); maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width); nodeHeight = Math.max(nodeHeight, keyTypeBBox.height); } if (hasComment) { const commentNode = groupNode .append('text') .attr('class', 'er entityLabel') .attr('id', `${attrPrefix}-comment`) .attr('x', 0) .attr('y', 0) .attr('dominant-baseline', 'middle') .attr('text-anchor', 'left') .attr( 'style', 'font-family: ' + getConfig().fontFamily + '; font-size: ' + attrFontSize + 'px' ) .text(item.attributeComment || ''); attributeNode.cn = commentNode; const commentNodeBBox = commentNode.node().getBBox(); maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width); nodeHeight = Math.max(nodeHeight, commentNodeBBox.height); } attributeNode.height = nodeHeight; // Keep a reference to the nodes so that we can iterate through them later attributeNodes.push(attributeNode); cumulativeHeight += nodeHeight + heightPadding * 2; attrNum += 1; }); let widthPaddingFactor = 4; if (hasKeyType) { widthPaddingFactor += 2; } if (hasComment) { widthPaddingFactor += 2; } const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth; // Calculate the new bounding box of the overall entity, now that attributes have been added const bBox = { width: Math.max( conf.minEntityWidth, Math.max( labelBBox.width + conf.entityPadding * 2, maxWidth + widthPadding * widthPaddingFactor ) ), height: attributes.length > 0 ? cumulativeHeight : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2), }; if (attributes.length > 0) { // There might be some spare width for padding out attributes if the entity name is very long const spareColumnWidth = Math.max( 0, (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2) ); // Position the entity label near the top of the entity bounding box entityTextNode.attr( 'transform', 'translate(' + bBox.width / 2 + ',' + (heightPadding + labelBBox.height / 2) + ')' ); // Add rectangular boxes for the attribute types/names let heightOffset = labelBBox.height + heightPadding * 2; // Start at the bottom of the entity label let attribStyle = 'attributeBoxOdd'; // We will flip the style on alternate rows to achieve a banded effect attributeNodes.forEach((attributeNode) => { // Calculate the alignment y co-ordinate for the type/name of the attribute const alignY = heightOffset + heightPadding + attributeNode.height / 2; // Position the type attribute attributeNode.tn.attr('transform', 'translate(' + widthPadding + ',' + alignY + ')'); // TODO Handle spareWidth in attr('width') // Insert a rectangle for the type const typeRect = groupNode .insert('rect', '#' + attributeNode.tn.node().id) .attr('class', `er ${attribStyle}`) .attr('fill', conf.fill) .attr('fill-opacity', '100%') .attr('stroke', conf.stroke) .attr('x', 0) .attr('y', heightOffset) .attr('width', maxTypeWidth + widthPadding * 2 + spareColumnWidth) .attr('height', attributeNode.height + heightPadding * 2); const nameXOffset = parseFloat(typeRect.attr('x')) + parseFloat(typeRect.attr('width')); // Position the name attribute attributeNode.nn.attr( 'transform', 'translate(' + (nameXOffset + widthPadding) + ',' + alignY + ')' ); // Insert a rectangle for the name const nameRect = groupNode .insert('rect', '#' + attributeNode.nn.node().id) .attr('class', `er ${attribStyle}`) .attr('fill', conf.fill) .attr('fill-opacity', '100%') .attr('stroke', conf.stroke) .attr('x', nameXOffset) .attr('y', heightOffset) .attr('width', maxNameWidth + widthPadding * 2 + spareColumnWidth) .attr('height', attributeNode.height + heightPadding * 2); let keyTypeAndCommentXOffset = parseFloat(nameRect.attr('x')) + parseFloat(nameRect.attr('width')); if (hasKeyType) { // Position the key type attribute attributeNode.kn.attr( 'transform', 'translate(' + (keyTypeAndCommentXOffset + widthPadding) + ',' + alignY + ')' ); // Insert a rectangle for the key type const keyTypeRect = groupNode .insert('rect', '#' + attributeNode.kn.node().id) .attr('class', `er ${attribStyle}`) .attr('fill', conf.fill) .attr('fill-opacity', '100%') .attr('stroke', conf.stroke) .attr('x', keyTypeAndCommentXOffset) .attr('y', heightOffset) .attr('width', maxKeyWidth + widthPadding * 2 + spareColumnWidth) .attr('height', attributeNode.height + heightPadding * 2); keyTypeAndCommentXOffset = parseFloat(keyTypeRect.attr('x')) + parseFloat(keyTypeRect.attr('width')); } if (hasComment) { // Position the comment attribute attributeNode.cn.attr( 'transform', 'translate(' + (keyTypeAndCommentXOffset + widthPadding) + ',' + alignY + ')' ); // Insert a rectangle for the comment groupNode .insert('rect', '#' + attributeNode.cn.node().id) .attr('class', `er ${attribStyle}`) .attr('fill', conf.fill) .attr('fill-opacity', '100%') .attr('stroke', conf.stroke) .attr('x', keyTypeAndCommentXOffset) .attr('y', heightOffset) .attr('width', maxCommentWidth + widthPadding * 2 + spareColumnWidth) .attr('height', attributeNode.height + heightPadding * 2); } // Increment the height offset to move to the next row heightOffset += attributeNode.height + heightPadding * 2; // Flip the attribute style for row banding attribStyle = attribStyle === 'attributeBoxOdd' ? 'attributeBoxEven' : 'attributeBoxOdd'; }); } else { // Ensure the entity box is a decent size without any attributes bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight); // Position the entity label in the middle of the box entityTextNode.attr('transform', 'translate(' + bBox.width / 2 + ',' + bBox.height / 2 + ')'); } return bBox; }; /** * Use D3 to construct the svg elements for the entities * * @param svgNode The svg node that contains the diagram * @param entities The entities to be drawn * @param graph The graph that contains the vertex and edge definitions post-layout * @returns {object} The first entity that was inserted */ const drawEntities = function (svgNode, entities, graph) { const keys = Object.keys(entities); let firstOne; keys.forEach(function (entityName) { const entityId = generateId(entityName, 'entity'); entityNameIds.set(entityName, entityId); // Create a group for each entity const groupNode = svgNode.append('g').attr('id', entityId); firstOne = firstOne === undefined ? entityId : firstOne; // Label the entity - this is done first so that we can get the bounding box // which then determines the size of the rectangle const textId = 'text-' + entityId; const textNode = groupNode .append('text') .attr('class', 'er entityLabel') .attr('id', textId) .attr('x', 0) .attr('y', 0) .attr('dominant-baseline', 'middle') .attr('text-anchor', 'middle') .attr( 'style', 'font-family: ' + getConfig().fontFamily + '; font-size: ' + conf.fontSize + 'px' ) .text(entityName); const { width: entityWidth, height: entityHeight } = drawAttributes( groupNode, textNode, entities[entityName].attributes ); // Draw the rectangle - insert it before the text so that the text is not obscured const rectNode = groupNode .insert('rect', '#' + textId) .attr('class', 'er entityBox') .attr('fill', conf.fill) .attr('fill-opacity', '100%') .attr('stroke', conf.stroke) .attr('x', 0) .attr('y', 0) .attr('width', entityWidth) .attr('height', entityHeight); const rectBBox = rectNode.node().getBBox(); // Add the entity to the graph using the entityId graph.setNode(entityId, { width: rectBBox.width, height: rectBBox.height, shape: 'rect', id: entityId, }); }); return firstOne; }; // drawEntities const adjustEntities = function (svgNode, graph) { graph.nodes().forEach(function (v) { if (typeof v !== 'undefined' && typeof graph.node(v) !== 'undefined') { svgNode .select('#' + v) .attr( 'transform', 'translate(' + (graph.node(v).x - graph.node(v).width / 2) + ',' + (graph.node(v).y - graph.node(v).height / 2) + ' )' ); } }); }; /** * Construct a name for an edge based on the names of the 2 entities and the role (relationship) * between them. Remove any spaces from it * * @param rel - A (parsed) relationship (e.g. one of the objects in the list returned by * erDb.getRelationships) * @returns {string} */ const getEdgeName = function (rel) { return (rel.entityA + rel.roleA + rel.entityB).replace(/\s/g, ''); }; /** * Add each relationship to the graph * * @param relationships The relationships to be added * @param {Graph} g The graph * @returns {Array} The array of relationships */ const addRelationships = function (relationships, g) { relationships.forEach(function (r) { g.setEdge( entityNameIds.get(r.entityA), entityNameIds.get(r.entityB), { relationship: r }, getEdgeName(r) ); }); return relationships; }; // addRelationships let relCnt = 0; /** * Draw a relationship using edge information from the graph * * @param svg The svg node * @param rel The relationship to draw in the svg * @param g The graph containing the edge information * @param insert The insertion point in the svg DOM (because relationships have markers that need to * sit 'behind' opaque entity boxes) * @param diagObj */ const drawRelationshipFromLayout = function (svg, rel, g, insert, diagObj) { relCnt++; // Find the edge relating to this relationship const edge = g.edge( entityNameIds.get(rel.entityA), entityNameIds.get(rel.entityB), getEdgeName(rel) ); // Get a function that will generate the line path const lineFunction = line() .x(function (d) { return d.x; }) .y(function (d) { return d.y; }) .curve(curveBasis); // Insert the line at the right place const svgPath = svg .insert('path', '#' + insert) .attr('class', 'er relationshipLine') .attr('d', lineFunction(edge.points)) .attr('stroke', conf.stroke) .attr('fill', 'none'); // ...and with dashes if necessary if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) { svgPath.attr('stroke-dasharray', '8,8'); } // TODO: Understand this better let url = ''; if (conf.arrowMarkerAbsolute) { url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search; url = url.replace(/\(/g, '\\('); url = url.replace(/\)/g, '\\)'); } // Decide which start and end markers it needs. It may be possible to be more concise here // by reversing a start marker to make an end marker...but this will do for now // Note that the 'A' entity's marker is at the end of the relationship and the 'B' entity's marker is at the start switch (rel.relSpec.cardA) { case diagObj.db.Cardinality.ZERO_OR_ONE: svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_ONE_END + ')'); break; case diagObj.db.Cardinality.ZERO_OR_MORE: svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_MORE_END + ')'); break; case diagObj.db.Cardinality.ONE_OR_MORE: svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ONE_OR_MORE_END + ')'); break; case diagObj.db.Cardinality.ONLY_ONE: svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ONLY_ONE_END + ')'); break; } switch (rel.relSpec.cardB) { case diagObj.db.Cardinality.ZERO_OR_ONE: svgPath.attr( 'marker-start', 'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_ONE_START + ')' ); break; case diagObj.db.Cardinality.ZERO_OR_MORE: svgPath.attr( 'marker-start', 'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_MORE_START + ')' ); break; case diagObj.db.Cardinality.ONE_OR_MORE: svgPath.attr( 'marker-start', 'url(' + url + '#' + erMarkers.ERMarkers.ONE_OR_MORE_START + ')' ); break; case diagObj.db.Cardinality.ONLY_ONE: svgPath.attr('marker-start', 'url(' + url + '#' + erMarkers.ERMarkers.ONLY_ONE_START + ')'); break; } // Now label the relationship // Find the half-way point const len = svgPath.node().getTotalLength(); const labelPoint = svgPath.node().getPointAtLength(len * 0.5); // Append a text node containing the label const labelId = 'rel' + relCnt; const labelNode = svg .append('text') .attr('class', 'er relationshipLabel') .attr('id', labelId) .attr('x', labelPoint.x) .attr('y', labelPoint.y) .attr('text-anchor', 'middle') .attr('dominant-baseline', 'middle') .attr( 'style', 'font-family: ' + getConfig().fontFamily + '; font-size: ' + conf.fontSize + 'px' ) .text(rel.roleA); // Figure out how big the opaque 'container' rectangle needs to be const labelBBox = labelNode.node().getBBox(); // Insert the opaque rectangle before the text label svg .insert('rect', '#' + labelId) .attr('class', 'er relationshipLabelBox') .attr('x', labelPoint.x - labelBBox.width / 2) .attr('y', labelPoint.y - labelBBox.height / 2) .attr('width', labelBBox.width) .attr('height', labelBBox.height) .attr('fill', 'white') .attr('fill-opacity', '85%'); }; /** * Draw en E-R diagram in the tag with id: id based on the text definition of the diagram * * @param text The text of the diagram * @param id The unique id of the DOM node that contains the diagram * @param _version * @param diagObj */ export const draw = function (text, id, _version, diagObj) { conf = getConfig().er; log.info('Drawing ER diagram'); // diag.db.clear(); const securityLevel = getConfig().securityLevel; // Handle root and Document for when rendering in sandbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); // const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; // Parse the text to populate erDb // try { // parser.parse(text); // } catch (err) { // log.debug('Parsing failed'); // } // Get a reference to the svg node that contains the text const svg = root.select(`[id='${id}']`); // Add cardinality marker definitions to the svg erMarkers.insertMarkers(svg, conf); // Now we have to construct the diagram in a specific way: // --- // 1. Create all the entities in the svg node at 0,0, but with the correct dimensions (allowing for text content) // 2. Make sure they are all added to the graph // 3. Add all the edges (relationships) to the graph as well // 4. Let dagre do its magic to lay out the graph. This assigns: // - the centre co-ordinates for each node, bearing in mind the dimensions and edge relationships // - the path co-ordinates for each edge // But it has no impact on the svg child nodes - the diagram remains with every entity rooted at 0,0 // 5. Now assign a transform to each entity in the svg node so that it gets drawn in the correct place, as determined by // its centre point, which is obtained from the graph, and it's width and height // 6. And finally, create all the edges in the svg node using information from the graph // --- // Create the graph let g; // TODO: Explore directed vs undirected graphs, and how the layout is affected // An E-R diagram could be said to be undirected, but there is merit in setting // the direction from parent to child in a one-to-many as this influences graphlib to // put the parent above the child (does it?), which is intuitive. Most relationships // in ER diagrams are one-to-many. g = new graphlib.Graph({ multigraph: true, directed: true, compound: false, }) .setGraph({ rankdir: conf.layoutDirection, marginx: 20, marginy: 20, nodesep: 100, edgesep: 100, ranksep: 100, }) .setDefaultEdgeLabel(function () { return {}; }); // Draw the entities (at 0,0), returning the first svg node that got // inserted - this represents the insertion point for relationship paths const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g); // TODO: externalise the addition of entities to the graph - it's a bit 'buried' in the above // Add all the relationships to the graph const relationships = addRelationships(diagObj.db.getRelationships(), g); dagre.layout(g); // Node and edge positions will be updated // Adjust the positions of the entities so that they adhere to the layout adjustEntities(svg, g); // Draw the relationships relationships.forEach(function (rel) { drawRelationshipFromLayout(svg, rel, g, firstEntity, diagObj); }); const padding = conf.diagramPadding; const svgBounds = svg.node().getBBox(); const width = svgBounds.width + padding * 2; const height = svgBounds.height + padding * 2; configureSvgSize(svg, height, width, conf.useMaxWidth); svg.attr('viewBox', `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); addSVGAccessibilityFields(diagObj.db, svg, id); }; // draw /** * Return a unique id based on the given string. Start with the prefix, then a hyphen, then the * simplified str, then a hyphen, then a unique uuid. (Hyphens are only included if needed.) * Although the official XML standard for ids says that many more characters are valid in the id, * this keeps things simple by accepting only A-Za-z0-9. * * @param {string} [str?=''] Given string to use as the basis for the id. Default is `''` * @param {string} [prefix?=''] String to put at the start, followed by '-'. Default is `''` * @param str * @param prefix * @returns {string} * @see https://www.w3.org/TR/xml/#NT-Name */ export function generateId(str = '', prefix = '') { const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, ''); return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${uuid4()}`; } /** * Append a hyphen to a string only if the string isn't empty * * @param {string} str * @returns {string} * @todo This could be moved into a string utility file/class. */ function strWithHyphen(str = '') { return str.length > 0 ? `${str}-` : ''; } export default { setConf, draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/er/parser/000077500000000000000000000000001433273745700253425ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/er/parser/erDiagram.jison000066400000000000000000000147701433273745700303120ustar00rootroot00000000000000%lex %options case-insensitive %x open_directive type_directive arg_directive block %x acc_title %x acc_descr %x acc_descr_multiline %% accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} [\}] { this.popState(); } [^\}]* return "acc_descr_multiline_value"; \%\%\{ { this.begin('open_directive'); return 'open_directive'; } ((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } ":" { this.popState(); this.begin('arg_directive'); return ':'; } \}\%\% { this.popState(); this.popState(); return 'close_directive'; } ((?:(?!\}\%\%).|\n)*) return 'arg_directive'; \%%(?!\{)[^\n]* /* skip comments */ [^\}]\%\%[^\n]* /* skip comments */ [\n]+ return 'NEWLINE'; \s+ /* skip whitespace */ [\s]+ return 'SPACE'; \"[^"%\r\n\v\b\\]+\" return 'ENTITY_NAME'; \"[^"]*\" return 'WORD'; "erDiagram" return 'ER_DIAGRAM'; "{" { this.begin("block"); return 'BLOCK_START'; } \s+ /* skip whitespace in block */ \b((?:PK)|(?:FK))\b return 'ATTRIBUTE_KEY' (.*?)[~](.*?)*[~] return 'ATTRIBUTE_WORD'; [A-Za-z][A-Za-z0-9\-_\[\]]* return 'ATTRIBUTE_WORD' \"[^"]*\" return 'COMMENT'; [\n]+ /* nothing */ "}" { this.popState(); return 'BLOCK_STOP'; } . return yytext[0]; \|o return 'ZERO_OR_ONE'; \}o return 'ZERO_OR_MORE'; \}\| return 'ONE_OR_MORE'; \|\| return 'ONLY_ONE'; o\| return 'ZERO_OR_ONE'; o\{ return 'ZERO_OR_MORE'; \|\{ return 'ONE_OR_MORE'; \.\. return 'NON_IDENTIFYING'; \-\- return 'IDENTIFYING'; \.\- return 'NON_IDENTIFYING'; \-\. return 'NON_IDENTIFYING'; [A-Za-z][A-Za-z0-9\-_]* return 'ALPHANUM'; . return yytext[0]; <> return 'EOF'; /lex %start start %% /* language grammar */ start : 'ER_DIAGRAM' document 'EOF' { /*console.log('finished parsing');*/ } | directive start ; document : /* empty */ { $$ = [] } | document line {$1.push($2);$$ = $1} ; line : SPACE statement { $$ = $2 } | statement { $$ = $1 } | NEWLINE { $$=[];} | EOF { $$=[];} ; directive : openDirective typeDirective closeDirective 'NEWLINE' | openDirective typeDirective ':' argDirective closeDirective 'NEWLINE' ; statement : directive | entityName relSpec entityName ':' role { yy.addEntity($1); yy.addEntity($3); yy.addRelationship($1, $5, $3, $2); /*console.log($1 + $2 + $3 + ':' + $5);*/ } | entityName BLOCK_START attributes BLOCK_STOP { /* console.log('detected block'); */ yy.addEntity($1); yy.addAttributes($1, $3); /* console.log('handled block'); */ } | entityName BLOCK_START BLOCK_STOP { yy.addEntity($1); } | entityName { yy.addEntity($1); } | title title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } ; entityName : 'ALPHANUM' { $$ = $1; } | 'ENTITY_NAME' { $$ = $1.replace(/"/g, ''); } ; attributes : attribute { $$ = [$1]; } | attribute attributes { $2.push($1); $$=$2; } ; attribute : attributeType attributeName { $$ = { attributeType: $1, attributeName: $2 }; } | attributeType attributeName attributeKeyType { $$ = { attributeType: $1, attributeName: $2, attributeKeyType: $3 }; } | attributeType attributeName attributeComment { $$ = { attributeType: $1, attributeName: $2, attributeComment: $3 }; } | attributeType attributeName attributeKeyType attributeComment { $$ = { attributeType: $1, attributeName: $2, attributeKeyType: $3, attributeComment: $4 }; } ; attributeType : ATTRIBUTE_WORD { $$=$1; } ; attributeName : ATTRIBUTE_WORD { $$=$1; } ; attributeKeyType : ATTRIBUTE_KEY { $$=$1; } ; attributeComment : COMMENT { $$=$1.replace(/"/g, ''); } ; relSpec : cardinality relType cardinality { $$ = { cardA: $3, relType: $2, cardB: $1 }; /*console.log('relSpec: ' + $3 + $2 + $1);*/ } ; cardinality : 'ZERO_OR_ONE' { $$ = yy.Cardinality.ZERO_OR_ONE; } | 'ZERO_OR_MORE' { $$ = yy.Cardinality.ZERO_OR_MORE; } | 'ONE_OR_MORE' { $$ = yy.Cardinality.ONE_OR_MORE; } | 'ONLY_ONE' { $$ = yy.Cardinality.ONLY_ONE; } ; relType : 'NON_IDENTIFYING' { $$ = yy.Identification.NON_IDENTIFYING; } | 'IDENTIFYING' { $$ = yy.Identification.IDENTIFYING; } ; role : 'WORD' { $$ = $1.replace(/"/g, ''); } | 'ENTITY_NAME' { $$ = $1.replace(/"/g, ''); } | 'ALPHANUM' { $$ = $1; } ; openDirective : open_directive { yy.parseDirective('%%{', 'open_directive'); } ; typeDirective : type_directive { yy.parseDirective($1, 'type_directive'); } ; argDirective : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } ; closeDirective : close_directive { yy.parseDirective('}%%', 'close_directive', 'er'); } ; %% mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js000066400000000000000000000536601433273745700305360ustar00rootroot00000000000000import { setConfig } from '../../../config'; import erDb from '../erDb'; import erDiagram from './erDiagram'; // jison file setConfig({ securityLevel: 'strict', }); describe('when parsing ER diagram it...', function () { beforeEach(function () { erDiagram.parser.yy = erDb; erDiagram.parser.yy.clear(); }); it('should allow stand-alone entities with no relationships', function () { const line1 = 'ISLAND'; const line2 = 'MAINLAND'; erDiagram.parser.parse(`erDiagram\n${line1}\n${line2}`); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(erDb.getRelationships().length).toBe(0); }); describe('entity name', () => { it('cannot be empty quotes ""', function () { const name = '""'; expect(() => { erDiagram.parser.parse(`erDiagram\n ${name}\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(name)).toBe(false); }).toThrow(); }); describe('has non A-Za-z0-9_- chars', function () { // these were entered using the Mac keyboard utility. const chars = "~ ` ! @ # $ ^ & * ( ) - _ = + [ ] { } | / ; : ' . ? ¡ ⁄ ™ € £ ‹ ¢ › ∞ fi § ‡ • ° ª · º ‚ ≠ ± œ Œ ∑ „ ® † ˇ ¥ Á ¨ ˆ ˆ Ø π ∏ “ « » å Å ß Í ∂ Î ƒ Ï © ˙ Ó ∆ Ô ˚  ¬ Ò … Ú æ Æ Ω ¸ ≈ π ˛ ç Ç √ ◊ ∫ ı ˜ µ  ≤ ¯ ≥ ˘ ÷ ¿"; const allowed = chars.split(' '); allowed.forEach((allowedChar) => { const singleOccurrence = `Blo${allowedChar}rf`; const repeatedOccurrence = `Blo${allowedChar}${allowedChar}rf`; const cannontStartWith = `${allowedChar}Blorf`; const endsWith = `Blorf${allowedChar}`; it(`${singleOccurrence} fails if not surrounded by quotes`, function () { const name = singleOccurrence; expect(() => { erDiagram.parser.parse(`erDiagram\n ${name}\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(name)).toBe(false); }).toThrow(); }); it(`"${singleOccurrence}" single occurrence`, function () { const name = singleOccurrence; erDiagram.parser.parse(`erDiagram\n "${name}"\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(name)).toBe(true); }); it(`"${repeatedOccurrence}" repeated occurrence`, function () { const name = repeatedOccurrence; erDiagram.parser.parse(`erDiagram\n "${name}"\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(name)).toBe(true); }); it(`"${singleOccurrence}" ends with`, function () { const name = endsWith; erDiagram.parser.parse(`erDiagram\n "${name}"\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(name)).toBe(true); }); it(`"${cannontStartWith}" cannot start with the character`, function () { const name = repeatedOccurrence; expect(() => { erDiagram.parser.parse(`erDiagram\n "${name}"\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(name)).toBe(false); }).toThrow(); }); }); const allCombined = allowed.join(''); it(`a${allCombined} (all non-alphanumerics) in one, starting with 'a'`, function () { const name = 'a' + allCombined; erDiagram.parser.parse(`erDiagram\n "${name}"\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(name)).toBe(true); }); }); it('cannot contain % because it interfers with parsing comments', function () { expect(() => { erDiagram.parser.parse(`erDiagram\n "Blo%rf"\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(name)).toBe(false); }).toThrow(); }); it('cannot contain \\ because it could start and escape code', function () { expect(() => { erDiagram.parser.parse(`erDiagram\n "Blo\\rf"\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(name)).toBe(false); }).toThrow(); }); it('cannot newline, backspace, or vertical characters', function () { const disallowed = ['\n', '\r', '\b', '\v']; disallowed.forEach((badChar) => { const badName = `Blo${badChar}rf`; expect(() => { erDiagram.parser.parse(`erDiagram\n "${badName}"\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(badName)).toBe(false); }).toThrow(); }); }); // skip this: jison cannot handle non-english letters it.skip('[skipped test] can contain àáâäæãåā', function () { const beyondEnglishName = 'DUCK-àáâäæãåā'; erDiagram.parser.parse(`erDiagram\n${beyondEnglishName}\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(beyondEnglishName)).toBe(true); }); it('can contain - _ without needing ""', function () { const hyphensUnderscore = 'DUCK-BILLED_PLATYPUS'; erDiagram.parser.parse(`erDiagram\n${hyphensUnderscore}\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(hyphensUnderscore)).toBe(true); }); }); it('should allow an entity with a single attribute to be defined', function () { const entity = 'BOOK'; const attribute = 'string title'; erDiagram.parser.parse(`erDiagram\n${entity} {\n${attribute}\n}`); const entities = erDb.getEntities(); expect(Object.keys(entities).length).toBe(1); expect(entities[entity].attributes.length).toBe(1); }); it('should allow an entity with a single attribute to be defined with a key', function () { const entity = 'BOOK'; const attribute = 'string title PK'; erDiagram.parser.parse(`erDiagram\n${entity} {\n${attribute}\n}`); const entities = erDb.getEntities(); expect(Object.keys(entities).length).toBe(1); expect(entities[entity].attributes.length).toBe(1); }); it('should allow an entity with a single attribute to be defined with a comment', function () { const entity = 'BOOK'; const attribute = `string title "comment"`; erDiagram.parser.parse(`erDiagram\n${entity} {\n${attribute}\n}`); const entities = erDb.getEntities(); expect(Object.keys(entities).length).toBe(1); expect(entities[entity].attributes.length).toBe(1); expect(entities[entity].attributes[0].attributeComment).toBe('comment'); }); it('should allow an entity with a single attribute to be defined with a key and a comment', function () { const entity = 'BOOK'; const attribute = `string title PK "comment"`; erDiagram.parser.parse(`erDiagram\n${entity} {\n${attribute}\n}`); const entities = erDb.getEntities(); expect(Object.keys(entities).length).toBe(1); expect(entities[entity].attributes.length).toBe(1); }); it('should allow an entity with attribute starting with fk or pk and a comment', function () { const entity = 'BOOK'; const attribute1 = 'int fk_title FK'; const attribute2 = 'string pk_author PK'; const attribute3 = 'float pk_price PK "comment"'; erDiagram.parser.parse( `erDiagram\n${entity} {\n${attribute1} \n\n${attribute2}\n${attribute3}\n}` ); const entities = erDb.getEntities(); expect(entities[entity].attributes.length).toBe(3); }); it('should allow an entity with attribute that has a generic type', function () { const entity = 'BOOK'; const attribute1 = 'type~T~ type'; const attribute2 = 'option~T~ readable "comment"'; const attribute3 = 'string id PK'; erDiagram.parser.parse( `erDiagram\n${entity} {\n${attribute1}\n${attribute2}\n${attribute3}\n}` ); const entities = erDb.getEntities(); expect(Object.keys(entities).length).toBe(1); expect(entities[entity].attributes.length).toBe(3); }); it('should allow an entity with attribute that is an array', function () { const entity = 'BOOK'; const attribute1 = 'string[] readers FK "comment"'; const attribute2 = 'string[] authors FK'; erDiagram.parser.parse(`erDiagram\n${entity} {\n${attribute1}\n${attribute2}\n}`); const entities = erDb.getEntities(); expect(Object.keys(entities).length).toBe(1); expect(entities[entity].attributes.length).toBe(2); }); it('should allow an entity with multiple attributes to be defined', function () { const entity = 'BOOK'; const attribute1 = 'string title'; const attribute2 = 'string author'; const attribute3 = 'float price'; erDiagram.parser.parse( `erDiagram\n${entity} {\n${attribute1}\n${attribute2}\n${attribute3}\n}` ); const entities = erDb.getEntities(); expect(entities[entity].attributes.length).toBe(3); }); it('should allow attribute definitions to be split into multiple blocks', function () { const entity = 'BOOK'; const attribute1 = 'string title'; const attribute2 = 'string author'; const attribute3 = 'float price'; erDiagram.parser.parse( `erDiagram\n${entity} {\n${attribute1}\n}\n${entity} {\n${attribute2}\n${attribute3}\n}` ); const entities = erDb.getEntities(); expect(entities[entity].attributes.length).toBe(3); }); it('should allow an empty attribute block', function () { const entity = 'BOOK'; erDiagram.parser.parse(`erDiagram\n${entity} {}`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty('BOOK')).toBe(true); expect(entities[entity].attributes.length).toBe(0); }); it('should allow an attribute block to start immediately after the entity name', function () { const entity = 'BOOK'; erDiagram.parser.parse(`erDiagram\n${entity}{}`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty('BOOK')).toBe(true); expect(entities[entity].attributes.length).toBe(0); }); it('should allow an attribute block to be separated from the entity name by spaces', function () { const entity = 'BOOK'; erDiagram.parser.parse(`erDiagram\n${entity} {}`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty('BOOK')).toBe(true); expect(entities[entity].attributes.length).toBe(0); }); it('should allow whitespace before and after attribute definitions', function () { const entity = 'BOOK'; const attribute = 'string title'; erDiagram.parser.parse(`erDiagram\n${entity} {\n \n\n ${attribute}\n\n \n}`); const entities = erDb.getEntities(); expect(Object.keys(entities).length).toBe(1); expect(entities[entity].attributes.length).toBe(1); }); it('should allow no whitespace before and after attribute definitions', function () { const entity = 'BOOK'; const attribute = 'string title'; erDiagram.parser.parse(`erDiagram\n${entity}{${attribute}}`); const entities = erDb.getEntities(); expect(Object.keys(entities).length).toBe(1); expect(entities[entity].attributes.length).toBe(1); }); it('should associate two entities correctly', function () { erDiagram.parser.parse('erDiagram\nCAR ||--o{ DRIVER : "insured for"'); const entities = erDb.getEntities(); const relationships = erDb.getRelationships(); expect(entities.hasOwnProperty('CAR')).toBe(true); expect(entities.hasOwnProperty('DRIVER')).toBe(true); expect(relationships.length).toBe(1); expect(relationships[0].relSpec.cardA).toBe(erDb.Cardinality.ZERO_OR_MORE); expect(relationships[0].relSpec.cardB).toBe(erDb.Cardinality.ONLY_ONE); expect(relationships[0].relSpec.relType).toBe(erDb.Identification.IDENTIFYING); }); it('should not create duplicate entities', function () { const line1 = 'CAR ||--o{ DRIVER : "insured for"'; const line2 = 'DRIVER ||--|| LICENSE : has'; erDiagram.parser.parse(`erDiagram\n${line1}\n${line2}`); const entities = erDb.getEntities(); expect(Object.keys(entities).length).toBe(3); }); it('should create the role specified', function () { const teacherRole = 'is teacher of'; const line1 = `TEACHER }o--o{ STUDENT : "${teacherRole}"`; erDiagram.parser.parse(`erDiagram\n${line1}`); const rels = erDb.getRelationships(); expect(rels[0].roleA).toBe(`${teacherRole}`); }); it('should allow recursive relationships', function () { erDiagram.parser.parse('erDiagram\nNODE ||--o{ NODE : "leads to"'); expect(Object.keys(erDb.getEntities()).length).toBe(1); }); it('should allow for a accessibility title and description (accDescr)', function () { const teacherRole = 'is teacher of'; const line1 = `TEACHER }o--o{ STUDENT : "${teacherRole}"`; erDiagram.parser.parse( `erDiagram accTitle: graph title accDescr: this graph is about stuff ${line1}` ); expect(erDb.getAccTitle()).toBe('graph title'); expect(erDb.getAccDescription()).toBe('this graph is about stuff'); }); it('should allow for a accessibility title and multi line description (accDescr)', function () { const teacherRole = 'is teacher of'; const line1 = `TEACHER }o--o{ STUDENT : "${teacherRole}"`; erDiagram.parser.parse( `erDiagram accTitle: graph title accDescr { this graph is about stuff }\n ${line1}` ); expect(erDb.getAccTitle()).toBe('graph title'); expect(erDb.getAccDescription()).toBe('this graph is about stuff'); }); it('should allow more than one relationship between the same two entities', function () { const line1 = 'CAR ||--o{ PERSON : "insured for"'; const line2 = 'CAR }o--|| PERSON : "owned by"'; erDiagram.parser.parse(`erDiagram\n${line1}\n${line2}`); const entities = erDb.getEntities(); const rels = erDb.getRelationships(); expect(Object.keys(entities).length).toBe(2); expect(rels.length).toBe(2); }); it('should limit the number of relationships between the same two entities', function () { /* TODO */ }); it('should not allow multiple relationships between the same two entities unless the roles are different', function () { /* TODO */ }); it('should handle only-one-to-one-or-more relationships', function () { erDiagram.parser.parse('erDiagram\nA ||--|{ B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ONE_OR_MORE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ONLY_ONE); }); it('should handle only-one-to-zero-or-more relationships', function () { erDiagram.parser.parse('erDiagram\nA ||..o{ B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ZERO_OR_MORE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ONLY_ONE); }); it('should handle zero-or-one-to-zero-or-more relationships', function () { erDiagram.parser.parse('erDiagram\nA |o..o{ B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ZERO_OR_MORE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ZERO_OR_ONE); }); it('should handle zero-or-one-to-one-or-more relationships', function () { erDiagram.parser.parse('erDiagram\nA |o--|{ B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ONE_OR_MORE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ZERO_OR_ONE); }); it('should handle one-or-more-to-only-one relationships', function () { erDiagram.parser.parse('erDiagram\nA }|--|| B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ONLY_ONE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ONE_OR_MORE); }); it('should handle zero-or-more-to-only-one relationships', function () { erDiagram.parser.parse('erDiagram\nA }o--|| B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ONLY_ONE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ZERO_OR_MORE); }); it('should handle zero-or-more-to-zero-or-one relationships', function () { erDiagram.parser.parse('erDiagram\nA }o..o| B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ZERO_OR_ONE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ZERO_OR_MORE); }); it('should handle one-or-more-to-zero-or-one relationships', function () { erDiagram.parser.parse('erDiagram\nA }|..o| B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ZERO_OR_ONE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ONE_OR_MORE); }); it('should handle zero-or-one-to-only-one relationships', function () { erDiagram.parser.parse('erDiagram\nA |o..|| B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ONLY_ONE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ZERO_OR_ONE); }); it('should handle only-one-to-only-one relationships', function () { erDiagram.parser.parse('erDiagram\nA ||..|| B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ONLY_ONE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ONLY_ONE); }); it('should handle only-one-to-zero-or-one relationships', function () { erDiagram.parser.parse('erDiagram\nA ||--o| B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ZERO_OR_ONE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ONLY_ONE); }); it('should handle zero-or-one-to-zero-or-one relationships', function () { erDiagram.parser.parse('erDiagram\nA |o..o| B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ZERO_OR_ONE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ZERO_OR_ONE); }); it('should handle zero-or-more-to-zero-or-more relationships', function () { erDiagram.parser.parse('erDiagram\nA }o--o{ B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ZERO_OR_MORE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ZERO_OR_MORE); }); it('should handle one-or-more-to-one-or-more relationships', function () { erDiagram.parser.parse('erDiagram\nA }|..|{ B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ONE_OR_MORE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ONE_OR_MORE); }); it('should handle zero-or-more-to-one-or-more relationships', function () { erDiagram.parser.parse('erDiagram\nA }o--|{ B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ONE_OR_MORE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ZERO_OR_MORE); }); it('should handle one-or-more-to-zero-or-more relationships', function () { erDiagram.parser.parse('erDiagram\nA }|..o{ B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); expect(rels.length).toBe(1); expect(rels[0].relSpec.cardA).toBe(erDb.Cardinality.ZERO_OR_MORE); expect(rels[0].relSpec.cardB).toBe(erDb.Cardinality.ONE_OR_MORE); }); it('should represent identifying relationships properly', function () { erDiagram.parser.parse('erDiagram\nHOUSE ||--|{ ROOM : contains'); const rels = erDb.getRelationships(); expect(rels[0].relSpec.relType).toBe(erDb.Identification.IDENTIFYING); }); it('should represent non-identifying relationships properly', function () { erDiagram.parser.parse('erDiagram\n PERSON ||..o{ POSSESSION : owns'); const rels = erDb.getRelationships(); expect(rels[0].relSpec.relType).toBe(erDb.Identification.NON_IDENTIFYING); }); it('should not accept a syntax error', function () { const doc = 'erDiagram\nA xxx B : has'; expect(() => { erDiagram.parser.parse(doc); }).toThrowError(); }); describe('relationship labels', function () { it('should allow an empty quoted label', function () { erDiagram.parser.parse('erDiagram\nCUSTOMER ||--|{ ORDER : ""'); const rels = erDb.getRelationships(); expect(rels[0].roleA).toBe(''); }); it('should allow an non-empty quoted label', function () { erDiagram.parser.parse('erDiagram\nCUSTOMER ||--|{ ORDER : "places"'); const rels = erDb.getRelationships(); expect(rels[0].roleA).toBe('places'); }); it('should allow an non-empty unquoted label', function () { erDiagram.parser.parse('erDiagram\nCUSTOMER ||--|{ ORDER : places'); const rels = erDb.getRelationships(); expect(rels[0].roleA).toBe('places'); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/er/styles.js000066400000000000000000000011511433273745700257250ustar00rootroot00000000000000const getStyles = (options) => ` .entityBox { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; } .attributeBoxOdd { fill: ${options.attributeBackgroundColorOdd}; stroke: ${options.nodeBorder}; } .attributeBoxEven { fill: ${options.attributeBackgroundColorEven}; stroke: ${options.nodeBorder}; } .relationshipLabelBox { fill: ${options.tertiaryColor}; opacity: 0.7; background-color: ${options.tertiaryColor}; rect { opacity: 0.5; } } .relationshipLine { stroke: ${options.lineColor}; } `; export default getStyles; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/error/000077500000000000000000000000001433273745700245715ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/error/errorRenderer.ts000066400000000000000000000066341433273745700277720ustar00rootroot00000000000000/** Created by knut on 14-12-11. */ import { select } from 'd3'; import { log } from '../../logger'; import { getErrorMessage } from '../../utils'; let conf = {}; /** * Merges the value of `conf` with the passed `cnf` * * @param {object} cnf Config to merge */ export const setConf = function (cnf: any) { conf = { ...conf, ...cnf }; }; /** * Draws a an info picture in the tag with id: id based on the graph definition in text. * * @param text * @param {string} id The text for the error * @param {string} mermaidVersion The version */ export const draw = (text: string, id: string, mermaidVersion: string) => { try { log.debug('Renering svg for syntax error\n'); const svg = select('#' + id); const g = svg.append('g'); g.append('path') .attr('class', 'error-icon') .attr( 'd', 'm411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z' ); g.append('path') .attr('class', 'error-icon') .attr( 'd', 'm459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z' ); g.append('path') .attr('class', 'error-icon') .attr( 'd', 'm340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z' ); g.append('path') .attr('class', 'error-icon') .attr( 'd', 'm400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z' ); g.append('path') .attr('class', 'error-icon') .attr( 'd', 'm496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z' ); g.append('path') .attr('class', 'error-icon') .attr( 'd', 'm436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z' ); g.append('text') // text label for the x axis .attr('class', 'error-text') .attr('x', 1440) .attr('y', 250) .attr('font-size', '150px') .style('text-anchor', 'middle') .text('Syntax error in graph'); g.append('text') // text label for the x axis .attr('class', 'error-text') .attr('x', 1250) .attr('y', 400) .attr('font-size', '100px') .style('text-anchor', 'middle') .text('mermaid version ' + mermaidVersion); svg.attr('height', 100); svg.attr('width', 500); svg.attr('viewBox', '768 0 912 512'); } catch (e) { log.error('Error while rendering info diagram'); log.error(getErrorMessage(e)); } }; export default { setConf, draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/error/styles.js000066400000000000000000000000671433273745700264550ustar00rootroot00000000000000const getStyles = () => ``; export default getStyles; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/000077500000000000000000000000001433273745700254315ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/flowChartShapes.js000066400000000000000000000202741433273745700310710ustar00rootroot00000000000000import dagreD3 from 'dagre-d3'; /** * @param parent * @param bbox * @param node */ function question(parent, bbox, node) { const w = bbox.width; const h = bbox.height; const s = (w + h) * 0.9; const points = [ { x: s / 2, y: 0 }, { x: s, y: -s / 2 }, { x: s / 2, y: -s }, { x: 0, y: -s / 2 }, ]; const shapeSvg = insertPolygonShape(parent, s, s, points); node.intersect = function (point) { return dagreD3.intersect.polygon(node, points, point); }; return shapeSvg; } /** * @param parent * @param bbox * @param node */ function hexagon(parent, bbox, node) { const f = 4; const h = bbox.height; const m = h / f; const w = bbox.width + 2 * m; const points = [ { x: m, y: 0 }, { x: w - m, y: 0 }, { x: w, y: -h / 2 }, { x: w - m, y: -h }, { x: m, y: -h }, { x: 0, y: -h / 2 }, ]; const shapeSvg = insertPolygonShape(parent, w, h, points); node.intersect = function (point) { return dagreD3.intersect.polygon(node, points, point); }; return shapeSvg; } /** * @param parent * @param bbox * @param node */ function rect_left_inv_arrow(parent, bbox, node) { const w = bbox.width; const h = bbox.height; const points = [ { x: -h / 2, y: 0 }, { x: w, y: 0 }, { x: w, y: -h }, { x: -h / 2, y: -h }, { x: 0, y: -h / 2 }, ]; const shapeSvg = insertPolygonShape(parent, w, h, points); node.intersect = function (point) { return dagreD3.intersect.polygon(node, points, point); }; return shapeSvg; } /** * @param parent * @param bbox * @param node */ function lean_right(parent, bbox, node) { const w = bbox.width; const h = bbox.height; const points = [ { x: (-2 * h) / 6, y: 0 }, { x: w - h / 6, y: 0 }, { x: w + (2 * h) / 6, y: -h }, { x: h / 6, y: -h }, ]; const shapeSvg = insertPolygonShape(parent, w, h, points); node.intersect = function (point) { return dagreD3.intersect.polygon(node, points, point); }; return shapeSvg; } /** * @param parent * @param bbox * @param node */ function lean_left(parent, bbox, node) { const w = bbox.width; const h = bbox.height; const points = [ { x: (2 * h) / 6, y: 0 }, { x: w + h / 6, y: 0 }, { x: w - (2 * h) / 6, y: -h }, { x: -h / 6, y: -h }, ]; const shapeSvg = insertPolygonShape(parent, w, h, points); node.intersect = function (point) { return dagreD3.intersect.polygon(node, points, point); }; return shapeSvg; } /** * @param parent * @param bbox * @param node */ function trapezoid(parent, bbox, node) { const w = bbox.width; const h = bbox.height; const points = [ { x: (-2 * h) / 6, y: 0 }, { x: w + (2 * h) / 6, y: 0 }, { x: w - h / 6, y: -h }, { x: h / 6, y: -h }, ]; const shapeSvg = insertPolygonShape(parent, w, h, points); node.intersect = function (point) { return dagreD3.intersect.polygon(node, points, point); }; return shapeSvg; } /** * @param parent * @param bbox * @param node */ function inv_trapezoid(parent, bbox, node) { const w = bbox.width; const h = bbox.height; const points = [ { x: h / 6, y: 0 }, { x: w - h / 6, y: 0 }, { x: w + (2 * h) / 6, y: -h }, { x: (-2 * h) / 6, y: -h }, ]; const shapeSvg = insertPolygonShape(parent, w, h, points); node.intersect = function (point) { return dagreD3.intersect.polygon(node, points, point); }; return shapeSvg; } /** * @param parent * @param bbox * @param node */ function rect_right_inv_arrow(parent, bbox, node) { const w = bbox.width; const h = bbox.height; const points = [ { x: 0, y: 0 }, { x: w + h / 2, y: 0 }, { x: w, y: -h / 2 }, { x: w + h / 2, y: -h }, { x: 0, y: -h }, ]; const shapeSvg = insertPolygonShape(parent, w, h, points); node.intersect = function (point) { return dagreD3.intersect.polygon(node, points, point); }; return shapeSvg; } /** * @param parent * @param bbox * @param node */ function stadium(parent, bbox, node) { const h = bbox.height; const w = bbox.width + h / 4; const shapeSvg = parent .insert('rect', ':first-child') .attr('rx', h / 2) .attr('ry', h / 2) .attr('x', -w / 2) .attr('y', -h / 2) .attr('width', w) .attr('height', h); node.intersect = function (point) { return dagreD3.intersect.rect(node, point); }; return shapeSvg; } /** * @param parent * @param bbox * @param node */ function subroutine(parent, bbox, node) { const w = bbox.width; const h = bbox.height; const points = [ { x: 0, y: 0 }, { x: w, y: 0 }, { x: w, y: -h }, { x: 0, y: -h }, { x: 0, y: 0 }, { x: -8, y: 0 }, { x: w + 8, y: 0 }, { x: w + 8, y: -h }, { x: -8, y: -h }, { x: -8, y: 0 }, ]; const shapeSvg = insertPolygonShape(parent, w, h, points); node.intersect = function (point) { return dagreD3.intersect.polygon(node, points, point); }; return shapeSvg; } /** * @param parent * @param bbox * @param node */ function cylinder(parent, bbox, node) { const w = bbox.width; const rx = w / 2; const ry = rx / (2.5 + w / 50); const h = bbox.height + ry; const shape = 'M 0,' + ry + ' a ' + rx + ',' + ry + ' 0,0,0 ' + w + ' 0 a ' + rx + ',' + ry + ' 0,0,0 ' + -w + ' 0 l 0,' + h + ' a ' + rx + ',' + ry + ' 0,0,0 ' + w + ' 0 l 0,' + -h; const shapeSvg = parent .attr('label-offset-y', ry) .insert('path', ':first-child') .attr('d', shape) .attr('transform', 'translate(' + -w / 2 + ',' + -(h / 2 + ry) + ')'); node.intersect = function (point) { const pos = dagreD3.intersect.rect(node, point); const x = pos.x - node.x; if ( rx != 0 && (Math.abs(x) < node.width / 2 || (Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) ) { // ellipsis equation: x*x / a*a + y*y / b*b = 1 // solve for y to get adjustion value for pos.y let y = ry * ry * (1 - (x * x) / (rx * rx)); if (y != 0) y = Math.sqrt(y); y = ry - y; if (point.y - node.y > 0) y = -y; pos.y += y; } return pos; }; return shapeSvg; } /** @param render */ export function addToRender(render) { render.shapes().question = question; render.shapes().hexagon = hexagon; render.shapes().stadium = stadium; render.shapes().subroutine = subroutine; render.shapes().cylinder = cylinder; // Add custom shape for box with inverted arrow on left side render.shapes().rect_left_inv_arrow = rect_left_inv_arrow; // Add custom shape for box with inverted arrow on left side render.shapes().lean_right = lean_right; // Add custom shape for box with inverted arrow on left side render.shapes().lean_left = lean_left; // Add custom shape for box with inverted arrow on left side render.shapes().trapezoid = trapezoid; // Add custom shape for box with inverted arrow on left side render.shapes().inv_trapezoid = inv_trapezoid; // Add custom shape for box with inverted arrow on right side render.shapes().rect_right_inv_arrow = rect_right_inv_arrow; } /** @param addShape */ export function addToRenderV2(addShape) { addShape({ question }); addShape({ hexagon }); addShape({ stadium }); addShape({ subroutine }); addShape({ cylinder }); // Add custom shape for box with inverted arrow on left side addShape({ rect_left_inv_arrow }); // Add custom shape for box with inverted arrow on left side addShape({ lean_right }); // Add custom shape for box with inverted arrow on left side addShape({ lean_left }); // Add custom shape for box with inverted arrow on left side addShape({ trapezoid }); // Add custom shape for box with inverted arrow on left side addShape({ inv_trapezoid }); // Add custom shape for box with inverted arrow on right side addShape({ rect_right_inv_arrow }); } /** * @param parent * @param w * @param h * @param points */ function insertPolygonShape(parent, w, h, points) { return parent .insert('polygon', ':first-child') .attr( 'points', points .map(function (d) { return d.x + ',' + d.y; }) .join(' ') ) .attr('transform', 'translate(' + -w / 2 + ',' + h / 2 + ')'); } export default { addToRender, addToRenderV2, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/flowChartShapes.spec.js000066400000000000000000000074251433273745700320250ustar00rootroot00000000000000import { addToRender } from './flowChartShapes'; describe('flowchart shapes', function () { // rect-based shapes [['stadium', useWidth, useHeight]].forEach(function ([shapeType, getW, getH]) { it(`should add a ${shapeType} shape that renders a properly positioned rect element`, function () { const mockRender = MockRender(); const mockSvg = MockSvg(); addToRender(mockRender); [ [100, 100], [123, 45], [71, 300], ].forEach(function ([width, height]) { const shape = mockRender.shapes()[shapeType](mockSvg, { width, height }, {}); const w = width + height / 4; const h = height; const dx = -getW(w, h) / 2; const dy = -getH(w, h) / 2; expect(shape.__tag).toEqual('rect'); expect(shape.__attrs).toHaveProperty('x', dx); expect(shape.__attrs).toHaveProperty('y', dy); }); }); }); // path-based shapes [['cylinder', useWidth, useHeight]].forEach(function ([shapeType, getW, getH]) { it(`should add a ${shapeType} shape that renders a properly positioned path element`, function () { const mockRender = MockRender(); const mockSvg = MockSvg(); addToRender(mockRender); [ [100, 100], [123, 45], [71, 300], ].forEach(function ([width, height]) { const shape = mockRender.shapes()[shapeType](mockSvg, { width, height }, {}); expect(shape.__tag).toEqual('path'); expect(shape.__attrs).toHaveProperty('d'); }); }); }); // polygon-based shapes [ [ 'question', 4, function (w, h) { return (w + h) * 0.9; }, function (w, h) { return (w + h) * 0.9; }, ], [ 'hexagon', 6, function (w, h) { return w + h / 2; }, useHeight, ], ['rect_left_inv_arrow', 5, useWidth, useHeight], ['rect_right_inv_arrow', 5, useWidth, useHeight], ['lean_right', 4, useWidth, useHeight], ['lean_left', 4, useWidth, useHeight], ['trapezoid', 4, useWidth, useHeight], ['inv_trapezoid', 4, useWidth, useHeight], ['subroutine', 10, useWidth, useHeight], ].forEach(function ([shapeType, expectedPointCount, getW, getH]) { it(`should add a ${shapeType} shape that renders a properly translated polygon element`, function () { const mockRender = MockRender(); const mockSvg = MockSvg(); addToRender(mockRender); [ [100, 100], [123, 45], [71, 300], ].forEach(function ([width, height]) { const shape = mockRender.shapes()[shapeType](mockSvg, { width, height }, {}); const dx = -getW(width, height) / 2; const dy = getH(width, height) / 2; const points = shape.__attrs.points.split(' '); expect(shape.__tag).toEqual('polygon'); expect(shape.__attrs).toHaveProperty('transform', `translate(${dx},${dy})`); expect(points).toHaveLength(expectedPointCount); }); }); }); }); /** * */ function MockRender() { const shapes = {}; return { shapes() { return shapes; }, }; } /** * * @param tag * @param {...any} args */ function MockSvg(tag, ...args) { const children = []; const attributes = {}; return { get __args() { return args; }, get __tag() { return tag; }, get __children() { return children; }, get __attrs() { return attributes; }, insert: function (tag, ...args) { const child = MockSvg(tag, ...args); children.push(child); return child; }, attr(name, value) { this.__attrs[name] = value; return this; }, }; } /** * @param w * @param h */ function useWidth(w, h) { return w; } /** * * @param w * @param h */ function useHeight(w, h) { return h; } mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/flowDb.js000066400000000000000000000443511433273745700272130ustar00rootroot00000000000000import { select } from 'd3'; import utils from '../../utils'; import * as configApi from '../../config'; import common from '../common/common'; import mermaidAPI from '../../mermaidAPI'; import { log } from '../../logger'; import { setAccTitle, getAccTitle, getAccDescription, setAccDescription, clear as commonClear, } from '../../commonDb'; const MERMAID_DOM_ID_PREFIX = 'flowchart-'; let vertexCounter = 0; let config = configApi.getConfig(); let vertices = {}; let edges = []; let classes = []; let subGraphs = []; let subGraphLookup = {}; let tooltips = {}; let subCount = 0; let firstGraphFlag = true; let direction; let version; // As in graph // Functions to be run after graph rendering let funs = []; const sanitizeText = (txt) => common.sanitizeText(txt, config); export const parseDirective = function (statement, context, type) { mermaidAPI.parseDirective(this, statement, context, type); }; /** * Function to lookup domId from id in the graph definition. * * @param id * @public */ export const lookUpDomId = function (id) { const veritceKeys = Object.keys(vertices); for (let i = 0; i < veritceKeys.length; i++) { if (vertices[veritceKeys[i]].id === id) { return vertices[veritceKeys[i]].domId; } } return id; }; /** * Function called by parser when a node definition has been found * * @param _id * @param text * @param type * @param style * @param classes * @param dir * @param props */ export const addVertex = function (_id, text, type, style, classes, dir, props = {}) { let txt; let id = _id; if (typeof id === 'undefined') { return; } if (id.trim().length === 0) { return; } // if (id[0].match(/\d/)) id = MERMAID_DOM_ID_PREFIX + id; if (typeof vertices[id] === 'undefined') { vertices[id] = { id: id, domId: MERMAID_DOM_ID_PREFIX + id + '-' + vertexCounter, styles: [], classes: [], }; } vertexCounter++; if (typeof text !== 'undefined') { config = configApi.getConfig(); txt = sanitizeText(text.trim()); // strip quotes if string starts and ends with a quote if (txt[0] === '"' && txt[txt.length - 1] === '"') { txt = txt.substring(1, txt.length - 1); } vertices[id].text = txt; } else { if (typeof vertices[id].text === 'undefined') { vertices[id].text = _id; } } if (typeof type !== 'undefined') { vertices[id].type = type; } if (typeof style !== 'undefined') { if (style !== null) { style.forEach(function (s) { vertices[id].styles.push(s); }); } } if (typeof classes !== 'undefined') { if (classes !== null) { classes.forEach(function (s) { vertices[id].classes.push(s); }); } } if (typeof dir !== 'undefined') { vertices[id].dir = dir; } vertices[id].props = props; }; /** * Function called by parser when a link/edge definition has been found * * @param _start * @param _end * @param type * @param linktext */ export const addSingleLink = function (_start, _end, type, linktext) { let start = _start; let end = _end; // if (start[0].match(/\d/)) start = MERMAID_DOM_ID_PREFIX + start; // if (end[0].match(/\d/)) end = MERMAID_DOM_ID_PREFIX + end; // log.info('Got edge...', start, end); const edge = { start: start, end: end, type: undefined, text: '' }; linktext = type.text; if (typeof linktext !== 'undefined') { edge.text = sanitizeText(linktext.trim()); // strip quotes if string starts and exnds with a quote if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { edge.text = edge.text.substring(1, edge.text.length - 1); } } if (typeof type !== 'undefined') { edge.type = type.type; edge.stroke = type.stroke; edge.length = type.length; } edges.push(edge); }; export const addLink = function (_start, _end, type, linktext) { let i, j; for (i = 0; i < _start.length; i++) { for (j = 0; j < _end.length; j++) { addSingleLink(_start[i], _end[j], type, linktext); } } }; /** * Updates a link's line interpolation algorithm * * @param positions * @param interp */ export const updateLinkInterpolate = function (positions, interp) { positions.forEach(function (pos) { if (pos === 'default') { edges.defaultInterpolate = interp; } else { edges[pos].interpolate = interp; } }); }; /** * Updates a link with a style * * @param positions * @param style */ export const updateLink = function (positions, style) { positions.forEach(function (pos) { if (pos === 'default') { edges.defaultStyle = style; } else { if (utils.isSubstringInArray('fill', style) === -1) { style.push('fill:none'); } edges[pos].style = style; } }); }; export const addClass = function (id, style) { if (typeof classes[id] === 'undefined') { classes[id] = { id: id, styles: [], textStyles: [] }; } if (typeof style !== 'undefined') { if (style !== null) { style.forEach(function (s) { if (s.match('color')) { const newStyle1 = s.replace('fill', 'bgFill'); const newStyle2 = newStyle1.replace('color', 'fill'); classes[id].textStyles.push(newStyle2); } classes[id].styles.push(s); }); } } }; /** * Called by parser when a graph definition is found, stores the direction of the chart. * * @param dir */ export const setDirection = function (dir) { direction = dir; if (direction.match(/.*/)) { direction = 'LR'; } if (direction.match(/.*v/)) { direction = 'TB'; } }; /** * Called by parser when a special node is found, e.g. a clickable element. * * @param ids Comma separated list of ids * @param className Class to add */ export const setClass = function (ids, className) { ids.split(',').forEach(function (_id) { // let id = version === 'gen-2' ? lookUpDomId(_id) : _id; let id = _id; // if (_id[0].match(/\d/)) id = MERMAID_DOM_ID_PREFIX + id; if (typeof vertices[id] !== 'undefined') { vertices[id].classes.push(className); } if (typeof subGraphLookup[id] !== 'undefined') { subGraphLookup[id].classes.push(className); } }); }; const setTooltip = function (ids, tooltip) { ids.split(',').forEach(function (id) { if (typeof tooltip !== 'undefined') { tooltips[version === 'gen-1' ? lookUpDomId(id) : id] = sanitizeText(tooltip); } }); }; const setClickFun = function (id, functionName, functionArgs) { let domId = lookUpDomId(id); // if (_id[0].match(/\d/)) id = MERMAID_DOM_ID_PREFIX + id; if (configApi.getConfig().securityLevel !== 'loose') { return; } if (typeof functionName === 'undefined') { return; } let argList = []; if (typeof functionArgs === 'string') { /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */ argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); for (let i = 0; i < argList.length; i++) { let item = argList[i].trim(); /* Removes all double quotes at the start and end of an argument */ /* This preserves all starting and ending whitespace inside */ if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { item = item.substr(1, item.length - 2); } argList[i] = item; } } /* if no arguments passed into callback, default to passing in id */ if (argList.length === 0) { argList.push(id); } if (typeof vertices[id] !== 'undefined') { vertices[id].haveCallback = true; funs.push(function () { const elem = document.querySelector(`[id="${domId}"]`); if (elem !== null) { elem.addEventListener( 'click', function () { utils.runFunc(functionName, ...argList); }, false ); } }); } }; /** * Called by parser when a link is found. Adds the URL to the vertex data. * * @param ids Comma separated list of ids * @param linkStr URL to create a link for * @param target */ export const setLink = function (ids, linkStr, target) { ids.split(',').forEach(function (id) { if (typeof vertices[id] !== 'undefined') { vertices[id].link = utils.formatUrl(linkStr, config); vertices[id].linkTarget = target; } }); setClass(ids, 'clickable'); }; export const getTooltip = function (id) { return tooltips[id]; }; /** * Called by parser when a click definition is found. Registers an event handler. * * @param ids Comma separated list of ids * @param functionName Function to be called on click * @param functionArgs */ export const setClickEvent = function (ids, functionName, functionArgs) { ids.split(',').forEach(function (id) { setClickFun(id, functionName, functionArgs); }); setClass(ids, 'clickable'); }; export const bindFunctions = function (element) { funs.forEach(function (fun) { fun(element); }); }; export const getDirection = function () { return direction.trim(); }; /** * Retrieval function for fetching the found nodes after parsing has completed. * * @returns {{} | any | vertices} */ export const getVertices = function () { return vertices; }; /** * Retrieval function for fetching the found links after parsing has completed. * * @returns {{} | any | edges} */ export const getEdges = function () { return edges; }; /** * Retrieval function for fetching the found class definitions after parsing has completed. * * @returns {{} | any | classes} */ export const getClasses = function () { return classes; }; const setupToolTips = function (element) { let tooltipElem = select('.mermaidTooltip'); if ((tooltipElem._groups || tooltipElem)[0][0] === null) { tooltipElem = select('body').append('div').attr('class', 'mermaidTooltip').style('opacity', 0); } const svg = select(element).select('svg'); const nodes = svg.selectAll('g.node'); nodes .on('mouseover', function () { const el = select(this); const title = el.attr('title'); // Dont try to draw a tooltip if no data is provided if (title === null) { return; } const rect = this.getBoundingClientRect(); tooltipElem.transition().duration(200).style('opacity', '.9'); tooltipElem .text(el.attr('title')) .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px') .style('top', window.scrollY + rect.top - 14 + document.body.scrollTop + 'px'); tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, '
')); el.classed('hover', true); }) .on('mouseout', function () { tooltipElem.transition().duration(500).style('opacity', 0); const el = select(this); el.classed('hover', false); }); }; funs.push(setupToolTips); /** * Clears the internal graph db so that a new graph can be parsed. * * @param ver */ export const clear = function (ver = 'gen-1') { vertices = {}; classes = {}; edges = []; funs = [setupToolTips]; subGraphs = []; subGraphLookup = {}; subCount = 0; tooltips = []; firstGraphFlag = true; version = ver; commonClear(); }; export const setGen = (ver) => { version = ver || 'gen-1'; }; /** @returns {string} */ export const defaultStyle = function () { return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;'; }; /** * Clears the internal graph db so that a new graph can be parsed. * * @param _id * @param list * @param _title */ export const addSubGraph = function (_id, list, _title) { // console.log('addSubGraph', _id, list, _title); let id = _id.trim(); let title = _title.trim(); if (id === title && title.match(/\s/)) { id = undefined; } /** @param a */ function uniq(a) { const prims = { boolean: {}, number: {}, string: {} }; const objs = []; let dir; // = undefined; direction.trim(); const nodeList = a.filter(function (item) { const type = typeof item; if (item.stmt && item.stmt === 'dir') { dir = item.value; return false; } if (item.trim() === '') { return false; } if (type in prims) { return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); } else { return objs.indexOf(item) >= 0 ? false : objs.push(item); } }); return { nodeList, dir }; } let nodeList = []; const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); nodeList = nl; if (version === 'gen-1') { for (let i = 0; i < nodeList.length; i++) { nodeList[i] = lookUpDomId(nodeList[i]); } } id = id || 'subGraph' + subCount; // if (id[0].match(/\d/)) id = lookUpDomId(id); title = title || ''; title = sanitizeText(title); subCount = subCount + 1; const subGraph = { id: id, nodes: nodeList, title: title.trim(), classes: [], dir }; log.info('Adding', subGraph.id, subGraph.nodes, subGraph.dir); /** Deletes an id from all subgraphs */ // const del = _id => { // subGraphs.forEach(sg => { // const pos = sg.nodes.indexOf(_id); // if (pos >= 0) { // sg.nodes.splice(pos, 1); // } // }); // }; // // Removes the members of this subgraph from any other subgraphs, a node only belong to one subgraph // subGraph.nodes.forEach(_id => del(_id)); // Remove the members in the new subgraph if they already belong to another subgraph subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; subGraphs.push(subGraph); subGraphLookup[id] = subGraph; return id; }; const getPosForId = function (id) { for (let i = 0; i < subGraphs.length; i++) { if (subGraphs[i].id === id) { return i; } } return -1; }; let secCount = -1; const posCrossRef = []; const indexNodes2 = function (id, pos) { const nodes = subGraphs[pos].nodes; secCount = secCount + 1; if (secCount > 2000) { return; } posCrossRef[secCount] = pos; // Check if match if (subGraphs[pos].id === id) { return { result: true, count: 0, }; } let count = 0; let posCount = 1; while (count < nodes.length) { const childPos = getPosForId(nodes[count]); // Ignore regular nodes (pos will be -1) if (childPos >= 0) { const res = indexNodes2(id, childPos); if (res.result) { return { result: true, count: posCount + res.count, }; } else { posCount = posCount + res.count; } } count = count + 1; } return { result: false, count: posCount, }; }; export const getDepthFirstPos = function (pos) { return posCrossRef[pos]; }; export const indexNodes = function () { secCount = -1; if (subGraphs.length > 0) { indexNodes2('none', subGraphs.length - 1, 0); } }; export const getSubGraphs = function () { return subGraphs; }; export const firstGraph = () => { if (firstGraphFlag) { firstGraphFlag = false; return true; } return false; }; const destructStartLink = (_str) => { let str = _str.trim(); let type = 'arrow_open'; switch (str[0]) { case '<': type = 'arrow_point'; str = str.slice(1); break; case 'x': type = 'arrow_cross'; str = str.slice(1); break; case 'o': type = 'arrow_circle'; str = str.slice(1); break; } let stroke = 'normal'; if (str.indexOf('=') !== -1) { stroke = 'thick'; } if (str.indexOf('.') !== -1) { stroke = 'dotted'; } return { type, stroke }; }; const countChar = (char, str) => { const length = str.length; let count = 0; for (let i = 0; i < length; ++i) { if (str[i] === char) { ++count; } } return count; }; const destructEndLink = (_str) => { const str = _str.trim(); let line = str.slice(0, -1); let type = 'arrow_open'; switch (str.slice(-1)) { case 'x': type = 'arrow_cross'; if (str[0] === 'x') { type = 'double_' + type; line = line.slice(1); } break; case '>': type = 'arrow_point'; if (str[0] === '<') { type = 'double_' + type; line = line.slice(1); } break; case 'o': type = 'arrow_circle'; if (str[0] === 'o') { type = 'double_' + type; line = line.slice(1); } break; } let stroke = 'normal'; let length = line.length - 1; if (line[0] === '=') { stroke = 'thick'; } if (line[0] === '~') { stroke = 'invisible'; } let dots = countChar('.', line); if (dots) { stroke = 'dotted'; length = dots; } return { type, stroke, length }; }; const destructLink = (_str, _startStr) => { const info = destructEndLink(_str); let startInfo; if (_startStr) { startInfo = destructStartLink(_startStr); if (startInfo.stroke !== info.stroke) { return { type: 'INVALID', stroke: 'INVALID' }; } if (startInfo.type === 'arrow_open') { // -- xyz --> - take arrow type from ending startInfo.type = info.type; } else { // x-- xyz --> - not supported if (startInfo.type !== info.type) return { type: 'INVALID', stroke: 'INVALID' }; startInfo.type = 'double_' + startInfo.type; } if (startInfo.type === 'double_arrow') { startInfo.type = 'double_arrow_point'; } startInfo.length = info.length; return startInfo; } return info; }; // Todo optimizer this by caching existing nodes const exists = (allSgs, _id) => { let res = false; allSgs.forEach((sg) => { const pos = sg.nodes.indexOf(_id); if (pos >= 0) { res = true; } }); return res; }; /** * Deletes an id from all subgraphs * * @param sg * @param allSubgraphs */ const makeUniq = (sg, allSubgraphs) => { const res = []; sg.nodes.forEach((_id, pos) => { if (!exists(allSubgraphs, _id)) { res.push(sg.nodes[pos]); } }); return { nodes: res }; }; export default { parseDirective, defaultConfig: () => configApi.defaultConfig.flowchart, setAccTitle, getAccTitle, getAccDescription, setAccDescription, addVertex, lookUpDomId, addLink, updateLinkInterpolate, updateLink, addClass, setDirection, setClass, setTooltip, getTooltip, setClickEvent, setLink, bindFunctions, getDirection, getVertices, getEdges, getClasses, clear, setGen, defaultStyle, addSubGraph, getDepthFirstPos, indexNodes, getSubGraphs, destructLink, lex: { firstGraph, }, exists, makeUniq, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/flowDb.spec.js000066400000000000000000000027511433273745700301420ustar00rootroot00000000000000import flowDb from './flowDb'; describe('flow db subgraphs', () => { let subgraphs; beforeEach(() => { subgraphs = [ { nodes: ['a', 'b', 'c', 'e'] }, { nodes: ['f', 'g', 'h'] }, { nodes: ['i', 'j'] }, { nodes: ['k'] }, ]; }); describe('exist', () => { it('should return true when the is exists in a subgraph', () => { expect(flowDb.exists(subgraphs, 'a')).toBe(true); expect(flowDb.exists(subgraphs, 'h')).toBe(true); expect(flowDb.exists(subgraphs, 'j')).toBe(true); expect(flowDb.exists(subgraphs, 'k')).toBe(true); }); it('should return false when the is exists in a subgraph', () => { expect(flowDb.exists(subgraphs, 'a2')).toBe(false); expect(flowDb.exists(subgraphs, 'l')).toBe(false); }); }); describe('makeUniq', () => { it('should remove ids from sungraph that already exists in another subgraph even if it gets empty', () => { const subgraph = flowDb.makeUniq({ nodes: ['i', 'j'] }, subgraphs); expect(subgraph.nodes).toEqual([]); }); it('should remove ids from sungraph that already exists in another subgraph', () => { const subgraph = flowDb.makeUniq({ nodes: ['i', 'j', 'o'] }, subgraphs); expect(subgraph.nodes).toEqual(['o']); }); it('should not remove ids from subgraph if they are unique', () => { const subgraph = flowDb.makeUniq({ nodes: ['q', 'r', 's'] }, subgraphs); expect(subgraph.nodes).toEqual(['q', 'r', 's']); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/flowDetector-v2.ts000066400000000000000000000006751433273745700307770ustar00rootroot00000000000000import type { DiagramDetector } from '../../diagram-api/types'; export const flowDetectorV2: DiagramDetector = (txt, config) => { // If we have confgured to use dagre-wrapper then we should return true in this function for graph code thus making it use the new flowchart diagram if (config?.flowchart?.defaultRenderer === 'dagre-wrapper' && txt.match(/^\s*graph/) !== null) return true; return txt.match(/^\s*flowchart/) !== null; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/flowDetector.ts000066400000000000000000000006171433273745700304460ustar00rootroot00000000000000import type { DiagramDetector } from '../../diagram-api/types'; export const flowDetector: DiagramDetector = (txt, config) => { // If we have confired to only use new flow charts this function shohuld always return false // as in not signalling true for a legacy flowchart if (config?.flowchart?.defaultRenderer === 'dagre-wrapper') return false; return txt.match(/^\s*graph/) !== null; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js000066400000000000000000000356171433273745700307660ustar00rootroot00000000000000import graphlib from 'graphlib'; import { select, curveLinear, selectAll } from 'd3'; import flowDb from './flowDb'; import { getConfig } from '../../config'; import { render } from '../../dagre-wrapper/index.js'; import addHtmlLabel from 'dagre-d3/lib/label/add-html-label.js'; import { log } from '../../logger'; import common, { evaluate } from '../common/common'; import { interpolateToCurve, getStylesFromArray } from '../../utils'; import { setupGraphViewbox } from '../../setupGraphViewbox'; import addSVGAccessibilityFields from '../../accessibility'; const conf = {}; export const setConf = function (cnf) { const keys = Object.keys(cnf); for (let i = 0; i < keys.length; i++) { conf[keys[i]] = cnf[keys[i]]; } }; /** * Function that adds the vertices found during parsing to the graph to be rendered. * * @param vert Object containing the vertices. * @param g The graph that is to be drawn. * @param svgId * @param root * @param doc * @param diagObj */ export const addVertices = function (vert, g, svgId, root, doc, diagObj) { const svg = root.select(`[id="${svgId}"]`); const keys = Object.keys(vert); // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition keys.forEach(function (id) { const vertex = vert[id]; /** * Variable for storing the classes for the vertex * * @type {string} */ let classStr = 'default'; if (vertex.classes.length > 0) { classStr = vertex.classes.join(' '); } const styles = getStylesFromArray(vertex.styles); // Use vertex id as text in the box if no text is provided by the graph definition let vertexText = vertex.text !== undefined ? vertex.text : vertex.id; // We create a SVG label, either by delegating to addHtmlLabel or manually let vertexNode; if (evaluate(getConfig().flowchart.htmlLabels)) { // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that? const node = { label: vertexText.replace( /fa[lrsb]?:fa-[\w-]+/g, (s) => `` ), }; vertexNode = addHtmlLabel(svg, node).node(); vertexNode.parentNode.removeChild(vertexNode); } else { const svgLabel = doc.createElementNS('http://www.w3.org/2000/svg', 'text'); svgLabel.setAttribute('style', styles.labelStyle.replace('color:', 'fill:')); const rows = vertexText.split(common.lineBreakRegex); for (let j = 0; j < rows.length; j++) { const tspan = doc.createElementNS('http://www.w3.org/2000/svg', 'tspan'); tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'); tspan.setAttribute('dy', '1em'); tspan.setAttribute('x', '1'); tspan.textContent = rows[j]; svgLabel.appendChild(tspan); } vertexNode = svgLabel; } let radious = 0; let _shape = ''; // Set the shape based parameters switch (vertex.type) { case 'round': radious = 5; _shape = 'rect'; break; case 'square': _shape = 'rect'; break; case 'diamond': _shape = 'question'; break; case 'hexagon': _shape = 'hexagon'; break; case 'odd': _shape = 'rect_left_inv_arrow'; break; case 'lean_right': _shape = 'lean_right'; break; case 'lean_left': _shape = 'lean_left'; break; case 'trapezoid': _shape = 'trapezoid'; break; case 'inv_trapezoid': _shape = 'inv_trapezoid'; break; case 'odd_right': _shape = 'rect_left_inv_arrow'; break; case 'circle': _shape = 'circle'; break; case 'ellipse': _shape = 'ellipse'; break; case 'stadium': _shape = 'stadium'; break; case 'subroutine': _shape = 'subroutine'; break; case 'cylinder': _shape = 'cylinder'; break; case 'group': _shape = 'rect'; break; case 'doublecircle': _shape = 'doublecircle'; break; default: _shape = 'rect'; } // Add the node g.setNode(vertex.id, { labelStyle: styles.labelStyle, shape: _shape, labelText: vertexText, rx: radious, ry: radious, class: classStr, style: styles.style, id: vertex.id, link: vertex.link, linkTarget: vertex.linkTarget, tooltip: diagObj.db.getTooltip(vertex.id) || '', domId: diagObj.db.lookUpDomId(vertex.id), haveCallback: vertex.haveCallback, width: vertex.type === 'group' ? 500 : undefined, dir: vertex.dir, type: vertex.type, props: vertex.props, padding: getConfig().flowchart.padding, }); log.info('setNode', { labelStyle: styles.labelStyle, shape: _shape, labelText: vertexText, rx: radious, ry: radious, class: classStr, style: styles.style, id: vertex.id, domId: diagObj.db.lookUpDomId(vertex.id), width: vertex.type === 'group' ? 500 : undefined, type: vertex.type, dir: vertex.dir, props: vertex.props, padding: getConfig().flowchart.padding, }); }); }; /** * Add edges to graph based on parsed graph definition * * @param {object} edges The edges to add to the graph * @param {object} g The graph object * @param diagObj */ export const addEdges = function (edges, g, diagObj) { log.info('abc78 edges = ', edges); let cnt = 0; let linkIdCnt = {}; let defaultStyle; let defaultLabelStyle; if (typeof edges.defaultStyle !== 'undefined') { const defaultStyles = getStylesFromArray(edges.defaultStyle); defaultStyle = defaultStyles.style; defaultLabelStyle = defaultStyles.labelStyle; } edges.forEach(function (edge) { cnt++; // Identify Link var linkIdBase = 'L-' + edge.start + '-' + edge.end; // count the links from+to the same node to give unique id if (typeof linkIdCnt[linkIdBase] === 'undefined') { linkIdCnt[linkIdBase] = 0; log.info('abc78 new entry', linkIdBase, linkIdCnt[linkIdBase]); } else { linkIdCnt[linkIdBase]++; log.info('abc78 new entry', linkIdBase, linkIdCnt[linkIdBase]); } let linkId = linkIdBase + '-' + linkIdCnt[linkIdBase]; log.info('abc78 new link id to be used is', linkIdBase, linkId, linkIdCnt[linkIdBase]); var linkNameStart = 'LS-' + edge.start; var linkNameEnd = 'LE-' + edge.end; const edgeData = { style: '', labelStyle: '' }; edgeData.minlen = edge.length || 1; //edgeData.id = 'id' + cnt; // Set link type for rendering if (edge.type === 'arrow_open') { edgeData.arrowhead = 'none'; } else { edgeData.arrowhead = 'normal'; } // Check of arrow types, placed here in order not to break old rendering edgeData.arrowTypeStart = 'arrow_open'; edgeData.arrowTypeEnd = 'arrow_open'; /* eslint-disable no-fallthrough */ switch (edge.type) { case 'double_arrow_cross': edgeData.arrowTypeStart = 'arrow_cross'; case 'arrow_cross': edgeData.arrowTypeEnd = 'arrow_cross'; break; case 'double_arrow_point': edgeData.arrowTypeStart = 'arrow_point'; case 'arrow_point': edgeData.arrowTypeEnd = 'arrow_point'; break; case 'double_arrow_circle': edgeData.arrowTypeStart = 'arrow_circle'; case 'arrow_circle': edgeData.arrowTypeEnd = 'arrow_circle'; break; } let style = ''; let labelStyle = ''; switch (edge.stroke) { case 'normal': style = 'fill:none;'; if (typeof defaultStyle !== 'undefined') { style = defaultStyle; } if (typeof defaultLabelStyle !== 'undefined') { labelStyle = defaultLabelStyle; } edgeData.thickness = 'normal'; edgeData.pattern = 'solid'; break; case 'dotted': edgeData.thickness = 'normal'; edgeData.pattern = 'dotted'; edgeData.style = 'fill:none;stroke-width:2px;stroke-dasharray:3;'; break; case 'thick': edgeData.thickness = 'thick'; edgeData.pattern = 'solid'; edgeData.style = 'stroke-width: 3.5px;fill:none;'; break; case 'invisible': edgeData.thickness = 'invisible'; edgeData.pattern = 'solid'; edgeData.style = 'stroke-width: 0;fill:none;'; break; } if (typeof edge.style !== 'undefined') { const styles = getStylesFromArray(edge.style); style = styles.style; labelStyle = styles.labelStyle; } edgeData.style = edgeData.style += style; edgeData.labelStyle = edgeData.labelStyle += labelStyle; if (typeof edge.interpolate !== 'undefined') { edgeData.curve = interpolateToCurve(edge.interpolate, curveLinear); } else if (typeof edges.defaultInterpolate !== 'undefined') { edgeData.curve = interpolateToCurve(edges.defaultInterpolate, curveLinear); } else { edgeData.curve = interpolateToCurve(conf.curve, curveLinear); } if (typeof edge.text === 'undefined') { if (typeof edge.style !== 'undefined') { edgeData.arrowheadStyle = 'fill: #333'; } } else { edgeData.arrowheadStyle = 'fill: #333'; edgeData.labelpos = 'c'; } edgeData.labelType = 'text'; edgeData.label = edge.text.replace(common.lineBreakRegex, '\n'); if (typeof edge.style === 'undefined') { edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none;'; } edgeData.labelStyle = edgeData.labelStyle.replace('color:', 'fill:'); edgeData.id = linkId; edgeData.classes = 'flowchart-link ' + linkNameStart + ' ' + linkNameEnd; // Add the edge to the graph g.setEdge(edge.start, edge.end, edgeData, cnt); }); }; /** * Returns the all the styles from classDef statements in the graph definition. * * @param text * @param diagObj * @returns {object} ClassDef styles */ export const getClasses = function (text, diagObj) { log.info('Extracting classes'); diagObj.db.clear(); try { // Parse the graph definition diagObj.parse(text); return diagObj.db.getClasses(); } catch (e) { return; } }; /** * Draws a flowchart in the tag with id: id based on the graph definition in text. * * @param text * @param id */ export const draw = function (text, id, _version, diagObj) { log.info('Drawing flowchart'); diagObj.db.clear(); flowDb.setGen('gen-2'); // Parse the graph definition diagObj.parser.parse(text); // Fetch the default direction, use TD if none was found let dir = diagObj.db.getDirection(); if (typeof dir === 'undefined') { dir = 'TD'; } const { securityLevel, flowchart: conf } = getConfig(); const nodeSpacing = conf.nodeSpacing || 50; const rankSpacing = conf.rankSpacing || 50; // Handle root and document for when rendering in sandbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; // Create the input mermaid.graph const g = new graphlib.Graph({ multigraph: true, compound: true, }) .setGraph({ rankdir: dir, nodesep: nodeSpacing, ranksep: rankSpacing, marginx: 0, marginy: 0, }) .setDefaultEdgeLabel(function () { return {}; }); let subG; const subGraphs = diagObj.db.getSubGraphs(); log.info('Subgraphs - ', subGraphs); for (let i = subGraphs.length - 1; i >= 0; i--) { subG = subGraphs[i]; log.info('Subgraph - ', subG); diagObj.db.addVertex(subG.id, subG.title, 'group', undefined, subG.classes, subG.dir); } // Fetch the vertices/nodes and edges/links from the parsed graph definition const vert = diagObj.db.getVertices(); const edges = diagObj.db.getEdges(); log.info(edges); let i = 0; for (i = subGraphs.length - 1; i >= 0; i--) { // for (let i = 0; i < subGraphs.length; i++) { subG = subGraphs[i]; selectAll('cluster').append('text'); for (let j = 0; j < subG.nodes.length; j++) { log.info('Setting up subgraphs', subG.nodes[j], subG.id); g.setParent(subG.nodes[j], subG.id); } } addVertices(vert, g, id, root, doc, diagObj); addEdges(edges, g, diagObj); // Add custom shapes // flowChartShapes.addToRenderV2(addShape); // Set up an SVG group so that we can translate the final graph. const svg = root.select(`[id="${id}"]`); // Adds title and description to the flow chart addSVGAccessibilityFields(diagObj.db, svg, id); // Run the renderer. This is what draws the final graph. const element = root.select('#' + id + ' g'); render(element, g, ['point', 'circle', 'cross'], 'flowchart', id); setupGraphViewbox(g, svg, conf.diagramPadding, conf.useMaxWidth); // Index nodes diagObj.db.indexNodes('subGraph' + i); // Add label rects for non html labels if (!conf.htmlLabels) { const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); for (let k = 0; k < labels.length; k++) { const label = labels[k]; // Get dimensions of label const dim = label.getBBox(); const rect = doc.createElementNS('http://www.w3.org/2000/svg', 'rect'); rect.setAttribute('rx', 0); rect.setAttribute('ry', 0); rect.setAttribute('width', dim.width); rect.setAttribute('height', dim.height); label.insertBefore(rect, label.firstChild); } } // If node has a link, wrap it in an anchor SVG object. const keys = Object.keys(vert); keys.forEach(function (key) { const vertex = vert[key]; if (vertex.link) { const node = select('#' + id + ' [id="' + key + '"]'); if (node) { const link = doc.createElementNS('http://www.w3.org/2000/svg', 'a'); link.setAttributeNS('http://www.w3.org/2000/svg', 'class', vertex.classes.join(' ')); link.setAttributeNS('http://www.w3.org/2000/svg', 'href', vertex.link); link.setAttributeNS('http://www.w3.org/2000/svg', 'rel', 'noopener'); if (securityLevel === 'sandbox') { link.setAttributeNS('http://www.w3.org/2000/svg', 'target', '_top'); } else if (vertex.linkTarget) { link.setAttributeNS('http://www.w3.org/2000/svg', 'target', vertex.linkTarget); } const linkNode = node.insert(function () { return link; }, ':first-child'); const shape = node.select('.label-container'); if (shape) { linkNode.append(function () { return shape.node(); }); } const label = node.select('.label'); if (label) { linkNode.append(function () { return label.node(); }); } } } }); }; export default { setConf, addVertices, addEdges, getClasses, draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/flowRenderer.addEdges.spec.js000066400000000000000000000120621433273745700330560ustar00rootroot00000000000000import flowDb from './flowDb'; import flowParser from './parser/flow'; import flowRenderer from './flowRenderer'; import Diagram from '../../Diagram'; import { addDiagrams } from '../../diagram-api/diagram-orchestration'; addDiagrams(); describe('when using mermaid and ', function () { describe('when calling addEdges ', function () { beforeEach(function () { flowParser.parser.yy = flowDb; flowDb.clear(); flowDb.setGen('gen-2'); }); it('should handle edges with text', function () { const diag = new Diagram('graph TD;A-->|text ex|B;'); diag.db.getVertices(); const edges = diag.db.getEdges(); const mockG = { setEdge: function (start, end, options) { expect(start).toContain('flowchart-A-'); expect(end).toContain('flowchart-B-'); expect(options.arrowhead).toBe('normal'); expect(options.label.match('text ex')).toBeTruthy(); }, }; flowRenderer.addEdges(edges, mockG, diag); }); it('should handle edges without text', function () { const diag = new Diagram('graph TD;A-->B;'); diag.db.getVertices(); const edges = diag.db.getEdges(); const mockG = { setEdge: function (start, end, options) { expect(start).toContain('flowchart-A-'); expect(end).toContain('flowchart-B-'); expect(options.arrowhead).toBe('normal'); }, }; flowRenderer.addEdges(edges, mockG, diag); }); it('should handle open-ended edges', function () { const diag = new Diagram('graph TD;A---B;'); diag.db.getVertices(); const edges = diag.db.getEdges(); const mockG = { setEdge: function (start, end, options) { expect(start).toContain('flowchart-A-'); expect(end).toContain('flowchart-B-'); expect(options.arrowhead).toBe('none'); }, }; flowRenderer.addEdges(edges, mockG, diag); }); it('should handle edges with styles defined', function () { const diag = new Diagram('graph TD;A---B; linkStyle 0 stroke:val1,stroke-width:val2;'); diag.db.getVertices(); const edges = diag.db.getEdges(); const mockG = { setEdge: function (start, end, options) { expect(start).toContain('flowchart-A-'); expect(end).toContain('flowchart-B-'); expect(options.arrowhead).toBe('none'); expect(options.style).toBe('stroke:val1;stroke-width:val2;fill:none;'); }, }; flowRenderer.addEdges(edges, mockG, diag); }); it('should handle edges with interpolation defined', function () { const diag = new Diagram('graph TD;A---B; linkStyle 0 interpolate basis'); diag.db.getVertices(); const edges = diag.db.getEdges(); const mockG = { setEdge: function (start, end, options) { expect(start).toContain('flowchart-A-'); expect(end).toContain('flowchart-B-'); expect(options.arrowhead).toBe('none'); expect(options.curve).toBe('basis'); // mocked as string }, }; flowRenderer.addEdges(edges, mockG, diag); }); it('should handle edges with text and styles defined', function () { const diag = new Diagram( 'graph TD;A---|the text|B; linkStyle 0 stroke:val1,stroke-width:val2;' ); diag.db.getVertices(); const edges = diag.db.getEdges(); const mockG = { setEdge: function (start, end, options) { expect(start).toContain('flowchart-A-'); expect(end).toContain('flowchart-B-'); expect(options.arrowhead).toBe('none'); expect(options.label.match('the text')).toBeTruthy(); expect(options.style).toBe('stroke:val1;stroke-width:val2;fill:none;'); }, }; flowRenderer.addEdges(edges, mockG, diag); }); it('should set fill to "none" by default when handling edges', function () { const diag = new Diagram('graph TD;A---B; linkStyle 0 stroke:val1,stroke-width:val2;'); diag.db.getVertices(); const edges = diag.db.getEdges(); const mockG = { setEdge: function (start, end, options) { expect(start).toContain('flowchart-A-'); expect(end).toContain('flowchart-B'); expect(options.arrowhead).toBe('none'); expect(options.style).toBe('stroke:val1;stroke-width:val2;fill:none;'); }, }; flowRenderer.addEdges(edges, mockG, diag); }); it('should not set fill to none if fill is set in linkStyle', function () { const diag = new Diagram( 'graph TD;A---B; linkStyle 0 stroke:val1,stroke-width:val2,fill:blue;' ); diag.db.getVertices(); const edges = diag.db.getEdges(); const mockG = { setEdge: function (start, end, options) { expect(start).toContain('flowchart-A-'); expect(end).toContain('flowchart-B-'); expect(options.arrowhead).toBe('none'); expect(options.style).toBe('stroke:val1;stroke-width:val2;fill:blue;'); }, }; flowRenderer.addEdges(edges, mockG, diag); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/flowRenderer.js000066400000000000000000000362341433273745700304350ustar00rootroot00000000000000import graphlib from 'graphlib'; import { select, curveLinear, selectAll } from 'd3'; import { getConfig } from '../../config'; import dagreD3 from 'dagre-d3'; import addHtmlLabel from 'dagre-d3/lib/label/add-html-label.js'; import { log } from '../../logger'; import common, { evaluate } from '../common/common'; import { interpolateToCurve, getStylesFromArray } from '../../utils'; import { setupGraphViewbox } from '../../setupGraphViewbox'; import flowChartShapes from './flowChartShapes'; import addSVGAccessibilityFields from '../../accessibility'; const conf = {}; export const setConf = function (cnf) { const keys = Object.keys(cnf); for (let i = 0; i < keys.length; i++) { conf[keys[i]] = cnf[keys[i]]; } }; /** * Function that adds the vertices found in the graph definition to the graph to be rendered. * * @param vert Object containing the vertices. * @param g The graph that is to be drawn. * @param svgId * @param root * @param _doc * @param diagObj */ export const addVertices = function (vert, g, svgId, root, _doc, diagObj) { const svg = !root ? select(`[id="${svgId}"]`) : root.select(`[id="${svgId}"]`); const doc = !_doc ? document : _doc; const keys = Object.keys(vert); // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition keys.forEach(function (id) { const vertex = vert[id]; /** * Variable for storing the classes for the vertex * * @type {string} */ let classStr = 'default'; if (vertex.classes.length > 0) { classStr = vertex.classes.join(' '); } const styles = getStylesFromArray(vertex.styles); // Use vertex id as text in the box if no text is provided by the graph definition let vertexText = vertex.text !== undefined ? vertex.text : vertex.id; // We create a SVG label, either by delegating to addHtmlLabel or manually let vertexNode; if (evaluate(getConfig().flowchart.htmlLabels)) { // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that? const node = { label: vertexText.replace( /fa[lrsb]?:fa-[\w-]+/g, (s) => `` ), }; vertexNode = addHtmlLabel(svg, node).node(); vertexNode.parentNode.removeChild(vertexNode); } else { const svgLabel = doc.createElementNS('http://www.w3.org/2000/svg', 'text'); svgLabel.setAttribute('style', styles.labelStyle.replace('color:', 'fill:')); const rows = vertexText.split(common.lineBreakRegex); for (let j = 0; j < rows.length; j++) { const tspan = doc.createElementNS('http://www.w3.org/2000/svg', 'tspan'); tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'); tspan.setAttribute('dy', '1em'); tspan.setAttribute('x', '1'); tspan.textContent = rows[j]; svgLabel.appendChild(tspan); } vertexNode = svgLabel; } let radious = 0; let _shape = ''; // Set the shape based parameters switch (vertex.type) { case 'round': radious = 5; _shape = 'rect'; break; case 'square': _shape = 'rect'; break; case 'diamond': _shape = 'question'; break; case 'hexagon': _shape = 'hexagon'; break; case 'odd': _shape = 'rect_left_inv_arrow'; break; case 'lean_right': _shape = 'lean_right'; break; case 'lean_left': _shape = 'lean_left'; break; case 'trapezoid': _shape = 'trapezoid'; break; case 'inv_trapezoid': _shape = 'inv_trapezoid'; break; case 'odd_right': _shape = 'rect_left_inv_arrow'; break; case 'circle': _shape = 'circle'; break; case 'ellipse': _shape = 'ellipse'; break; case 'stadium': _shape = 'stadium'; break; case 'subroutine': _shape = 'subroutine'; break; case 'cylinder': _shape = 'cylinder'; break; case 'group': _shape = 'rect'; break; default: _shape = 'rect'; } // Add the node log.warn('Adding node', vertex.id, vertex.domId); g.setNode(diagObj.db.lookUpDomId(vertex.id), { labelType: 'svg', labelStyle: styles.labelStyle, shape: _shape, label: vertexNode, rx: radious, ry: radious, class: classStr, style: styles.style, id: diagObj.db.lookUpDomId(vertex.id), }); }); }; /** * Add edges to graph based on parsed graph definition * * @param {object} edges The edges to add to the graph * @param {object} g The graph object * @param diagObj */ export const addEdges = function (edges, g, diagObj) { let cnt = 0; let defaultStyle; let defaultLabelStyle; if (typeof edges.defaultStyle !== 'undefined') { const defaultStyles = getStylesFromArray(edges.defaultStyle); defaultStyle = defaultStyles.style; defaultLabelStyle = defaultStyles.labelStyle; } edges.forEach(function (edge) { cnt++; // Identify Link var linkId = 'L-' + edge.start + '-' + edge.end; var linkNameStart = 'LS-' + edge.start; var linkNameEnd = 'LE-' + edge.end; const edgeData = {}; // Set link type for rendering if (edge.type === 'arrow_open') { edgeData.arrowhead = 'none'; } else { edgeData.arrowhead = 'normal'; } let style = ''; let labelStyle = ''; if (typeof edge.style !== 'undefined') { const styles = getStylesFromArray(edge.style); style = styles.style; labelStyle = styles.labelStyle; } else { switch (edge.stroke) { case 'normal': style = 'fill:none'; if (typeof defaultStyle !== 'undefined') { style = defaultStyle; } if (typeof defaultLabelStyle !== 'undefined') { labelStyle = defaultLabelStyle; } break; case 'dotted': style = 'fill:none;stroke-width:2px;stroke-dasharray:3;'; break; case 'thick': style = ' stroke-width: 3.5px;fill:none'; break; } } edgeData.style = style; edgeData.labelStyle = labelStyle; if (typeof edge.interpolate !== 'undefined') { edgeData.curve = interpolateToCurve(edge.interpolate, curveLinear); } else if (typeof edges.defaultInterpolate !== 'undefined') { edgeData.curve = interpolateToCurve(edges.defaultInterpolate, curveLinear); } else { edgeData.curve = interpolateToCurve(conf.curve, curveLinear); } if (typeof edge.text === 'undefined') { if (typeof edge.style !== 'undefined') { edgeData.arrowheadStyle = 'fill: #333'; } } else { edgeData.arrowheadStyle = 'fill: #333'; edgeData.labelpos = 'c'; if (evaluate(getConfig().flowchart.htmlLabels)) { edgeData.labelType = 'html'; edgeData.label = `${edge.text.replace( /fa[lrsb]?:fa-[\w-]+/g, (s) => `` )}`; } else { edgeData.labelType = 'text'; edgeData.label = edge.text.replace(common.lineBreakRegex, '\n'); if (typeof edge.style === 'undefined') { edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none'; } edgeData.labelStyle = edgeData.labelStyle.replace('color:', 'fill:'); } } edgeData.id = linkId; edgeData.class = linkNameStart + ' ' + linkNameEnd; edgeData.minlen = edge.length || 1; // Add the edge to the graph g.setEdge(diagObj.db.lookUpDomId(edge.start), diagObj.db.lookUpDomId(edge.end), edgeData, cnt); }); }; /** * Returns the all the styles from classDef statements in the graph definition. * * @param text * @param diagObj * @returns {object} ClassDef styles */ export const getClasses = function (text, diagObj) { log.info('Extracting classes'); diagObj.db.clear(); try { // Parse the graph definition diagObj.parse(text); return diagObj.db.getClasses(); } catch (e) { return; } }; /** * Draws a flowchart in the tag with id: id based on the graph definition in text. * * @param text * @param id * @param _version * @param diagObj */ export const draw = function (text, id, _version, diagObj) { log.info('Drawing flowchart'); diagObj.db.clear(); const { securityLevel, flowchart: conf } = getConfig(); let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; // Parse the graph definition try { diagObj.parser.parse(text); } catch (err) { log.debug('Parsing failed'); } // Fetch the default direction, use TD if none was found let dir = diagObj.db.getDirection(); if (typeof dir === 'undefined') { dir = 'TD'; } const nodeSpacing = conf.nodeSpacing || 50; const rankSpacing = conf.rankSpacing || 50; // Create the input mermaid.graph const g = new graphlib.Graph({ multigraph: true, compound: true, }) .setGraph({ rankdir: dir, nodesep: nodeSpacing, ranksep: rankSpacing, marginx: 8, marginy: 8, }) .setDefaultEdgeLabel(function () { return {}; }); let subG; const subGraphs = diagObj.db.getSubGraphs(); for (let i = subGraphs.length - 1; i >= 0; i--) { subG = subGraphs[i]; diagObj.db.addVertex(subG.id, subG.title, 'group', undefined, subG.classes); } // Fetch the vertices/nodes and edges/links from the parsed graph definition const vert = diagObj.db.getVertices(); log.warn('Get vertices', vert); const edges = diagObj.db.getEdges(); let i = 0; for (i = subGraphs.length - 1; i >= 0; i--) { subG = subGraphs[i]; selectAll('cluster').append('text'); for (let j = 0; j < subG.nodes.length; j++) { log.warn( 'Setting subgraph', subG.nodes[j], diagObj.db.lookUpDomId(subG.nodes[j]), diagObj.db.lookUpDomId(subG.id) ); g.setParent(diagObj.db.lookUpDomId(subG.nodes[j]), diagObj.db.lookUpDomId(subG.id)); } } addVertices(vert, g, id, root, doc, diagObj); addEdges(edges, g, diagObj); // Create the renderer const Render = dagreD3.render; const render = new Render(); // Add custom shapes flowChartShapes.addToRender(render); // Add our custom arrow - an empty arrowhead render.arrows().none = function normal(parent, id, edge, type) { const marker = parent .append('marker') .attr('id', id) .attr('viewBox', '0 0 10 10') .attr('refX', 9) .attr('refY', 5) .attr('markerUnits', 'strokeWidth') .attr('markerWidth', 8) .attr('markerHeight', 6) .attr('orient', 'auto'); const path = marker.append('path').attr('d', 'M 0 0 L 0 0 L 0 0 z'); dagreD3.util.applyStyle(path, edge[type + 'Style']); }; // Override normal arrowhead defined in d3. Remove style & add class to allow css styling. render.arrows().normal = function normal(parent, id) { const marker = parent .append('marker') .attr('id', id) .attr('viewBox', '0 0 10 10') .attr('refX', 9) .attr('refY', 5) .attr('markerUnits', 'strokeWidth') .attr('markerWidth', 8) .attr('markerHeight', 6) .attr('orient', 'auto'); marker .append('path') .attr('d', 'M 0 0 L 10 5 L 0 10 z') .attr('class', 'arrowheadPath') .style('stroke-width', 1) .style('stroke-dasharray', '1,0'); }; // Set up an SVG group so that we can translate the final graph. const svg = root.select(`[id="${id}"]`); // Adds title and description to the flow chart addSVGAccessibilityFields(diagObj.db, svg, id); // Run the renderer. This is what draws the final graph. const element = root.select('#' + id + ' g'); render(element, g); element.selectAll('g.node').attr('title', function () { return diagObj.db.getTooltip(this.id); }); // Index nodes diagObj.db.indexNodes('subGraph' + i); // reposition labels for (i = 0; i < subGraphs.length; i++) { subG = subGraphs[i]; if (subG.title !== 'undefined') { const clusterRects = doc.querySelectorAll( '#' + id + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"] rect' ); const clusterEl = doc.querySelectorAll( '#' + id + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"]' ); const xPos = clusterRects[0].x.baseVal.value; const yPos = clusterRects[0].y.baseVal.value; const _width = clusterRects[0].width.baseVal.value; const cluster = select(clusterEl[0]); const te = cluster.select('.label'); te.attr('transform', `translate(${xPos + _width / 2}, ${yPos + 14})`); te.attr('id', id + 'Text'); for (let j = 0; j < subG.classes.length; j++) { clusterEl[0].classList.add(subG.classes[j]); } } } // Add label rects for non html labels if (!conf.htmlLabels) { const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); for (let k = 0; k < labels.length; k++) { const label = labels[k]; // Get dimensions of label const dim = label.getBBox(); const rect = doc.createElementNS('http://www.w3.org/2000/svg', 'rect'); rect.setAttribute('rx', 0); rect.setAttribute('ry', 0); rect.setAttribute('width', dim.width); rect.setAttribute('height', dim.height); // rect.setAttribute('style', 'fill:#e8e8e8;'); label.insertBefore(rect, label.firstChild); } } setupGraphViewbox(g, svg, conf.diagramPadding, conf.useMaxWidth); // If node has a link, wrap it in an anchor SVG object. const keys = Object.keys(vert); keys.forEach(function (key) { const vertex = vert[key]; if (vertex.link) { const node = root.select('#' + id + ' [id="' + diagObj.db.lookUpDomId(key) + '"]'); if (node) { const link = doc.createElementNS('http://www.w3.org/2000/svg', 'a'); link.setAttributeNS('http://www.w3.org/2000/svg', 'class', vertex.classes.join(' ')); link.setAttributeNS('http://www.w3.org/2000/svg', 'href', vertex.link); link.setAttributeNS('http://www.w3.org/2000/svg', 'rel', 'noopener'); if (securityLevel === 'sandbox') { link.setAttributeNS('http://www.w3.org/2000/svg', 'target', '_top'); } else if (vertex.linkTarget) { link.setAttributeNS('http://www.w3.org/2000/svg', 'target', vertex.linkTarget); } const linkNode = node.insert(function () { return link; }, ':first-child'); const shape = node.select('.label-container'); if (shape) { linkNode.append(function () { return shape.node(); }); } const label = node.select('.label'); if (label) { linkNode.append(function () { return label.node(); }); } } } }); }; export default { setConf, addVertices, addEdges, getClasses, draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/flowRenderer.spec.js000066400000000000000000000204521433273745700313610ustar00rootroot00000000000000import { addVertices, addEdges } from './flowRenderer'; import { setConfig } from '../../config'; setConfig({ flowchart: { htmlLabels: false, }, }); describe('the flowchart renderer', function () { describe('when adding vertices to a graph', function () { [ ['round', 'rect', 5], ['square', 'rect'], ['diamond', 'question'], ['hexagon', 'hexagon'], ['odd', 'rect_left_inv_arrow'], ['lean_right', 'lean_right'], ['lean_left', 'lean_left'], ['trapezoid', 'trapezoid'], ['inv_trapezoid', 'inv_trapezoid'], ['odd_right', 'rect_left_inv_arrow'], ['circle', 'circle'], ['ellipse', 'ellipse'], ['stadium', 'stadium'], ['subroutine', 'subroutine'], ['cylinder', 'cylinder'], ['group', 'rect'], ].forEach(function ([type, expectedShape, expectedRadios = 0]) { it(`should add the correct shaped node to the graph for vertex type ${type}`, function () { const fakeDiag = { db: { lookUpDomId: () => { return 'my-node-id'; }, }, }; const addedNodes = []; const mockG = { setNode: function (id, object) { addedNodes.push([id, object]); }, }; addVertices( { v1: { type, id: 'my-node-id', classes: [], styles: [], text: 'my vertex text', }, }, mockG, 'svg-id', undefined, undefined, fakeDiag ); expect(addedNodes).toHaveLength(1); expect(addedNodes[0][0]).toEqual('my-node-id'); expect(addedNodes[0][1]).toHaveProperty('id', 'my-node-id'); expect(addedNodes[0][1]).toHaveProperty('labelType', 'svg'); expect(addedNodes[0][1]).toHaveProperty('shape', expectedShape); expect(addedNodes[0][1]).toHaveProperty('rx', expectedRadios); expect(addedNodes[0][1]).toHaveProperty('ry', expectedRadios); }); }); ['Multi
Line', 'Multi
Line', 'Multi
Line', 'MultiLine'].forEach(function ( labelText ) { it('should handle multiline texts with different line breaks', function () { const addedNodes = []; const fakeDiag = { db: { lookUpDomId: () => { return 'my-node-id'; }, }, }; const mockG = { setNode: function (id, object) { addedNodes.push([id, object]); }, }; addVertices( { v1: { type: 'rect', id: 'my-node-id', classes: [], styles: [], text: 'Multi
Line', }, }, mockG, 'svg-id', false, document, fakeDiag ); expect(addedNodes).toHaveLength(1); expect(addedNodes[0][0]).toEqual('my-node-id'); expect(addedNodes[0][1]).toHaveProperty('id', 'my-node-id'); expect(addedNodes[0][1]).toHaveProperty('labelType', 'svg'); expect(addedNodes[0][1].label).toBeDefined(); expect(addedNodes[0][1].label).toBeDefined(); // node expect(addedNodes[0][1].label.firstChild.innerHTML).toEqual('Multi'); // node, line 1 expect(addedNodes[0][1].label.lastChild.innerHTML).toEqual('Line'); // node, line 2 }); }); [ [['fill:#fff'], 'fill:#fff;', ''], [['color:#ccc'], '', 'color:#ccc;'], [['fill:#fff', 'color:#ccc'], 'fill:#fff;', 'color:#ccc;'], [ ['fill:#fff', 'color:#ccc', 'text-align:center'], 'fill:#fff;', 'color:#ccc;text-align:center;', ], ].forEach(function ([style, expectedStyle, expectedLabelStyle]) { it(`should add the styles to style and/or labelStyle for style ${style}`, function () { const addedNodes = []; const fakeDiag = { db: { lookUpDomId: () => { return 'my-node-id'; }, }, }; const mockG = { setNode: function (id, object) { addedNodes.push([id, object]); }, }; addVertices( { v1: { type: 'rect', id: 'my-node-id', classes: [], styles: style, text: 'my vertex text', }, }, mockG, 'svg-id', undefined, undefined, fakeDiag ); expect(addedNodes).toHaveLength(1); expect(addedNodes[0][0]).toEqual('my-node-id'); expect(addedNodes[0][1]).toHaveProperty('id', 'my-node-id'); expect(addedNodes[0][1]).toHaveProperty('labelType', 'svg'); expect(addedNodes[0][1]).toHaveProperty('style', expectedStyle); expect(addedNodes[0][1]).toHaveProperty('labelStyle', expectedLabelStyle); }); }); it(`should add default class to all nodes which do not have another class assigned`, function () { const addedNodes = []; const mockG = { setNode: function (id, object) { addedNodes.push([id, object]); }, }; const fakeDiag = { db: { lookUpDomId: () => { return 'my-node-id'; }, }, }; addVertices( { v1: { type: 'rect', id: 'my-node-id', classes: [], styles: [], text: 'my vertex text', }, v2: { type: 'rect', id: 'myNode', classes: ['myClass'], styles: [], text: 'my vertex text', }, }, mockG, 'svg-id', undefined, undefined, fakeDiag ); expect(addedNodes).toHaveLength(2); expect(addedNodes[0][0]).toEqual('my-node-id'); expect(addedNodes[0][1]).toHaveProperty('class', 'default'); expect(addedNodes[1][0]).toEqual('my-node-id'); expect(addedNodes[1][1]).toHaveProperty('class', 'myClass'); }); }); describe('when adding edges to a graph', function () { it('should handle multiline texts and set centered label position', function () { const addedEdges = []; const fakeDiag = { db: { lookUpDomId: () => { return 'my-node-id'; }, }, }; const mockG = { setEdge: function (s, e, data, c) { addedEdges.push(data); }, }; addEdges( [ { text: 'Multi
Line' }, { text: 'Multi
Line' }, { text: 'Multi
Line' }, { text: 'MultiLine' }, { style: ['stroke:DarkGray', 'stroke-width:2px'], text: 'Multi
Line' }, { style: ['stroke:DarkGray', 'stroke-width:2px'], text: 'Multi
Line' }, { style: ['stroke:DarkGray', 'stroke-width:2px'], text: 'Multi
Line' }, { style: ['stroke:DarkGray', 'stroke-width:2px'], text: 'MultiLine' }, ], mockG, fakeDiag ); addedEdges.forEach(function (edge) { expect(edge).toHaveProperty('label', 'Multi\nLine'); expect(edge).toHaveProperty('labelpos', 'c'); }); }); [ [['stroke:DarkGray'], 'stroke:DarkGray;', ''], [['color:red'], '', 'fill:red;'], [['stroke:DarkGray', 'color:red'], 'stroke:DarkGray;', 'fill:red;'], [ ['stroke:DarkGray', 'color:red', 'stroke-width:2px'], 'stroke:DarkGray;stroke-width:2px;', 'fill:red;', ], ].forEach(function ([style, expectedStyle, expectedLabelStyle]) { it(`should add the styles to style and/or labelStyle for style ${style}`, function () { const addedEdges = []; const fakeDiag = { db: { lookUpDomId: () => { return 'my-node-id'; }, }, }; const mockG = { setEdge: function (s, e, data, c) { addedEdges.push(data); }, }; addEdges([{ style: style, text: 'styling' }], mockG, fakeDiag); expect(addedEdges).toHaveLength(1); expect(addedEdges[0]).toHaveProperty('style', expectedStyle); expect(addedEdges[0]).toHaveProperty('labelStyle', expectedLabelStyle); }); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/000077500000000000000000000000001433273745700267255ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/backup000066400000000000000000000442761433273745700301320ustar00rootroot00000000000000/** mermaid * https://mermaidjs.github.io/ * (c) 2015 Knut Sveidqvist * MIT license. */ /* lexical grammar */ %lex %x string %% \%\%[^\n]* /* do nothing */ ["] this.begin("string"); ["] this.popState(); [^"]* return "STR"; "style" return 'STYLE'; "default" return 'DEFAULT'; "linkStyle" return 'LINKSTYLE'; "interpolate" return 'INTERPOLATE'; "classDef" return 'CLASSDEF'; "class" return 'CLASS'; "click" return 'CLICK'; "graph" return 'GRAPH'; "subgraph" return 'subgraph'; "end"\b\s* return 'end'; "LR" return 'DIR'; "RL" return 'DIR'; "TB" return 'DIR'; "BT" return 'DIR'; "TD" return 'DIR'; "BR" return 'DIR'; [0-9]+ return 'NUM'; \# return 'BRKT'; ":" return 'COLON'; ";" return 'SEMI'; "," return 'COMMA'; "*" return 'MULT'; \s*\-\-[x]\s* return 'ARROW_CROSS'; \s*[x]\-\-[x]\s* return 'DOUBLE_ARROW_CROSS'; \s*\-\-\>\s* return 'ARROW_POINT'; \s*\<\-\-\>\s* return 'DOUBLE_ARROW_POINT'; \s*\-\-[o]\s* return 'ARROW_CIRCLE'; \s*[o]\-\-[o]\s* return 'DOUBLE_ARROW_CIRCLE'; \s*\-\-\-\s* return 'ARROW_OPEN'; \s*\-\.\-[x]\s* return 'DOTTED_ARROW_CROSS'; \s*[x]\-\.\-[x]\s* return 'DOUBLE_DOTTED_ARROW_CROSS'; \s*\-\.\-\>\s* return 'DOTTED_ARROW_POINT'; \s*\<\-\.\-\>\s* return 'DOUBLE_DOTTED_ARROW_POINT'; \s*\-\.\-[o]\s* return 'DOTTED_ARROW_CIRCLE'; \s*[o]\-\.\-[o]\s* return 'DOUBLE_DOTTED_ARROW_CIRCLE'; \s*\-\.\-\s* return 'DOTTED_ARROW_OPEN'; \s*.\-[x]\s* return 'DOTTED_ARROW_CROSS'; \s*[x].\-[x]\s* return 'DOUBLE_DOTTED_ARROW_CROSS'; \s*\.\-\>\s* return 'DOTTED_ARROW_POINT'; \s*\<\.\-\>\s* return 'DOUBLE_DOTTED_ARROW_POINT'; \s*\.\-[o]\s* return 'DOTTED_ARROW_CIRCLE'; \s*[o]\.\-[o]\s* return 'DOUBLE_DOTTED_ARROW_CIRCLE'; \s*\.\-\s* return 'DOTTED_ARROW_OPEN'; \s*\=\=[x]\s* return 'THICK_ARROW_CROSS'; \s*[x]\=\=[x]\s* return 'DOUBLE_THICK_ARROW_CROSS'; \s*\=\=\>\s* return 'THICK_ARROW_POINT'; \s*\<\=\=\>\s* return 'DOUBLE_THICK_ARROW_POINT'; \s*\=\=[o]\s* return 'THICK_ARROW_CIRCLE'; \s*[o]\=\=[o]\s* return 'DOUBLE_THICK_ARROW_CIRCLE'; \s*\=\=[\=]\s* return 'THICK_ARROW_OPEN'; \s*\-\-\s* return '--'; \s*\-\.\s* return '-.'; \s*\=\=\s* return '=='; %\s*\<\-\-\s* return 'START_DOUBLE_ARROW_POINT'; %\s*\[x]\-\-\s* return 'START_DOUBLE_ARROW_CROSS'; %\s*\[o]\-\-\s* return 'START_DOUBLE_ARROW_CIRCLE'; %\s*\<\-\.\s* return 'START_DOUBLE_DOTTED_ARROW_POINT'; %\s*\[x]\-\.\s* return 'START_DOUBLE_DOTTED_ARROW_CROSS'; %\s*\[o]\-\.\s* return 'START_DOUBLE_DOTTED_ARROW_CIRCLE'; %\s*\<\=\=\s* return 'START_DOUBLE_THICK_ARROW_POINT'; %\s*\[x]\=\=\s* return 'START_DOUBLE_THICK_ARROW_CROSS'; %\s*\[o]\=\=\s* return 'START_DOUBLE_THICK_ARROW_CIRCLE'; "(-" return '(-'; "-)" return '-)'; \- return 'MINUS'; "." return 'DOT'; \+ return 'PLUS'; \% return 'PCT'; "=" return 'EQUALS'; \= return 'EQUALS'; "<" return 'TAGSTART'; ">" return 'TAGEND'; "^" return 'UP'; "v" return 'DOWN'; [A-Za-z]+ return 'ALPHA'; [!"#$%&'*+,-.`?\\_/] return 'PUNCTUATION'; [\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]| [\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]| [\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]| [\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]| [\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]| [\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]| [\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]| [\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]| [\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]| [\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]| [\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]| [\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]| [\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]| [\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]| [\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]| [\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]| [\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]| [\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]| [\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]| [\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]| [\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]| [\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]| [\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]| [\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]| [\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]| [\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]| [\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]| [\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]| [\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]| [\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]| [\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]| [\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]| [\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]| [\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]| [\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]| [\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]| [\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]| [\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]| [\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]| [\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]| [\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]| [\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]| [\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]| [\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]| [\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]| [\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]| [\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]| [\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]| [\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]| [\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]| [\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]| [\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]| [\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]| [\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]| [\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]| [\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]| [\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]| [\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]| [\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]| [\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]| [\uFFD2-\uFFD7\uFFDA-\uFFDC] return 'UNICODE_TEXT'; "|" return 'PIPE'; "(" return 'PS'; ")" return 'PE'; "[" return 'SQS'; "]" return 'SQE'; "{" return 'DIAMOND_START' "}" return 'DIAMOND_STOP' "\"" return 'QUOTE'; \n+ return 'NEWLINE'; \s return 'SPACE'; <> return 'EOF'; /lex /* operator associations and precedence */ %left '^' %start mermaidDoc %% /* language grammar */ mermaidDoc: graphConfig document; document : /* empty */ { $$ = [];} | document line { if($2 !== []){ $1.push($2); } $$=$1;} ; line : statement {$$=$1;} | SEMI | NEWLINE | SPACE | EOF ; graphConfig : SPACE graphConfig | NEWLINE graphConfig | GRAPH SPACE DIR FirstStmtSeperator { yy.setDirection($3);$$ = $3;} | GRAPH SPACE TAGEND FirstStmtSeperator { yy.setDirection("LR");$$ = $3;} | GRAPH SPACE TAGSTART FirstStmtSeperator { yy.setDirection("RL");$$ = $3;} | GRAPH SPACE UP FirstStmtSeperator { yy.setDirection("BT");$$ = $3;} | GRAPH SPACE DOWN FirstStmtSeperator { yy.setDirection("TB");$$ = $3;} ; ending: endToken ending | endToken ; endToken: NEWLINE | SPACE | EOF; FirstStmtSeperator : SEMI | NEWLINE | spaceList NEWLINE ; spaceListNewline : SPACE spaceListNewline | NEWLINE spaceListNewline | NEWLINE | SPACE ; spaceList : SPACE spaceList | SPACE ; statement : verticeStatement separator {$$=$1} | styleStatement separator {$$=[];} | linkStyleStatement separator {$$=[];} | classDefStatement separator {$$=[];} | classStatement separator {$$=[];} | clickStatement separator {$$=[];} | subgraph SPACE alphaNum SQS text SQE separator document end {$$=yy.addSubGraph($3,$8,$5);} | subgraph SPACE STR separator document end {$$=yy.addSubGraph(undefined,$5,$3);} | subgraph SPACE alphaNum separator document end {$$=yy.addSubGraph($3,$5,$3);} | subgraph separator document end {$$=yy.addSubGraph(undefined,$3,undefined);} ; separator: NEWLINE | SEMI | EOF ; verticeStatement: vertex link vertex { yy.addLink($1,$3,$2);$$ = [$1,$3];} | vertex {$$ = [$1];} ; vertex: alphaNum SQS text SQE {$$ = $1;yy.addVertex($1,$3,'square');} | alphaNum SQS text SQE spaceList {$$ = $1;yy.addVertex($1,$3,'square');} | alphaNum PS PS text PE PE {$$ = $1;yy.addVertex($1,$4,'circle');} | alphaNum PS PS text PE PE spaceList {$$ = $1;yy.addVertex($1,$4,'circle');} | alphaNum '(-' text '-)' {$$ = $1;yy.addVertex($1,$3,'ellipse');} | alphaNum '(-' text '-)' spaceList {$$ = $1;yy.addVertex($1,$3,'ellipse');} | alphaNum PS text PE {$$ = $1;yy.addVertex($1,$3,'round');} | alphaNum PS text PE spaceList {$$ = $1;yy.addVertex($1,$3,'round');} | alphaNum DIAMOND_START text DIAMOND_STOP {$$ = $1;yy.addVertex($1,$3,'diamond');} | alphaNum DIAMOND_START text DIAMOND_STOP spaceList {$$ = $1;yy.addVertex($1,$3,'diamond');} | alphaNum TAGEND text SQE {$$ = $1;yy.addVertex($1,$3,'odd');} | alphaNum TAGEND text SQE spaceList {$$ = $1;yy.addVertex($1,$3,'odd');} /* | alphaNum SQS text TAGSTART {$$ = $1;yy.addVertex($1,$3,'odd_right');} | alphaNum SQS text TAGSTART spaceList {$$ = $1;yy.addVertex($1,$3,'odd_right');} */ | alphaNum {$$ = $1;yy.addVertex($1);} | alphaNum spaceList {$$ = $1;yy.addVertex($1);} ; alphaNum : alphaNumStatement {$$=$1;} | alphaNum alphaNumStatement {$$=$1+''+$2;} ; alphaNumStatement : DIR {$$=$1;} | alphaNumToken {$$=$1;} | DOWN {$$='v';} | MINUS {$$='-';} ; link: linkStatement arrowText {$1.text = $2;$$ = $1;} | linkStatement TESTSTR SPACE {$1.text = $2;$$ = $1;} | linkStatement arrowText SPACE {$1.text = $2;$$ = $1;} | linkStatement {$$ = $1;} | '--' text ARROW_POINT {$$ = {"type":"arrow","stroke":"normal","text":$2};} | 'START_DOUBLE_ARROW_POINT' text ARROW_POINT {$$ = {"type":"double_arrow_point","stroke":"normal","text":$2};} | '--' text ARROW_CIRCLE {$$ = {"type":"arrow_circle","stroke":"normal","text":$2};} | '--' text ARROW_CROSS {$$ = {"type":"arrow_cross","stroke":"normal","text":$2};} | '--' text ARROW_OPEN {$$ = {"type":"arrow_open","stroke":"normal","text":$2};} | '-.' text DOTTED_ARROW_POINT {$$ = {"type":"arrow","stroke":"dotted","text":$2};} | '-.' text DOTTED_ARROW_CIRCLE {$$ = {"type":"arrow_circle","stroke":"dotted","text":$2};} | '-.' text DOTTED_ARROW_CROSS {$$ = {"type":"arrow_cross","stroke":"dotted","text":$2};} | '-.' text DOTTED_ARROW_OPEN {$$ = {"type":"arrow_open","stroke":"dotted","text":$2};} | '==' text THICK_ARROW_POINT {$$ = {"type":"arrow","stroke":"thick","text":$2};} | '==' text THICK_ARROW_CIRCLE {$$ = {"type":"arrow_circle","stroke":"thick","text":$2};} | '==' text THICK_ARROW_CROSS {$$ = {"type":"arrow_cross","stroke":"thick","text":$2};} | '==' text THICK_ARROW_OPEN {$$ = {"type":"arrow_open","stroke":"thick","text":$2};} ; linkStatement: ARROW_POINT {$$ = {"type":"arrow","stroke":"normal"};} | DOUBLE_ARROW_POINT {$$ = {"type":"double_arrow_point","stroke":"normal"};} | ARROW_CIRCLE {$$ = {"type":"arrow_circle","stroke":"normal"};} % | DOUBLE_ARROW_CIRCLE % {$$ = {"type":"double_arrow_circle","stroke":"normal"};} | ARROW_CROSS {$$ = {"type":"arrow_cross","stroke":"normal"};} % | DOUBLE_ARROW_CROSS % {$$ = {"type":"double_arrow_cross","stroke":"normal"};} | ARROW_OPEN {$$ = {"type":"arrow_open","stroke":"normal"};} | DOTTED_ARROW_POINT {$$ = {"type":"arrow","stroke":"dotted"};} % | DOUEBL_DOTTED_ARROW_POINT % {$$ = {"type":"doueble_arrow_point","stroke":"dotted"};} | DOTTED_ARROW_CIRCLE {$$ = {"type":"arrow_circle","stroke":"dotted"};} % | DOTTED_ARROW_CIRCLE % {$$ = {"type":"double_arrow_circle","stroke":"dotted"};} | DOTTED_ARROW_CROSS {$$ = {"type":"arrow_cross","stroke":"dotted"};} % | DOTTED_ARROW_CROSS % {$$ = {"type":"double_arrow_cross","stroke":"dotted"};} | DOTTED_ARROW_OPEN {$$ = {"type":"arrow_open","stroke":"dotted"};} | THICK_ARROW_POINT {$$ = {"type":"arrow","stroke":"thick"};} % | THICK_ARROW_POINT % {$$ = {"type":"double_arrow_point","stroke":"thick"};} | THICK_ARROW_CIRCLE {$$ = {"type":"arrow_circle","stroke":"thick"};} % | THICK_ARROW_CIRCLE % {$$ = {"type":"double_arrow_circle","stroke":"thick"};} | THICK_ARROW_CROSS {$$ = {"type":"arrow_cross","stroke":"thick"};} % | THICK_ARROW_CROSS % {$$ = {"type":"double_arrow_cross","stroke":"thick"};} | THICK_ARROW_OPEN {$$ = {"type":"arrow_open","stroke":"thick"};} ; arrowText: PIPE text PIPE {$$ = $2;} ; text: textToken {$$=$1;} | text textToken {$$=$1+''+$2;} | STR {$$=$1;} ; commentText: commentToken {$$=$1;} | commentText commentToken {$$=$1+''+$2;} ; keywords : STYLE | LINKSTYLE | CLASSDEF | CLASS | CLICK | GRAPH | DIR | subgraph | end | DOWN | UP; textNoTags: textNoTagsToken {$$=$1;} | textNoTags textNoTagsToken {$$=$1+''+$2;} ; classDefStatement:CLASSDEF SPACE DEFAULT SPACE stylesOpt {$$ = $1;yy.addClass($3,$5);} | CLASSDEF SPACE alphaNum SPACE stylesOpt {$$ = $1;yy.addClass($3,$5);} ; classStatement:CLASS SPACE alphaNum SPACE alphaNum {$$ = $1;yy.setClass($3, $5);} ; clickStatement : CLICK SPACE alphaNum SPACE alphaNum {$$ = $1;yy.setClickEvent($3, $5, undefined);} | CLICK SPACE alphaNum SPACE alphaNum SPACE STR {$$ = $1;yy.setClickEvent($3, $5, $7) ;} | CLICK SPACE alphaNum SPACE STR {$$ = $1;yy.setLink($3, $5, undefined);} | CLICK SPACE alphaNum SPACE STR SPACE STR {$$ = $1;yy.setLink($3, $5, $7 );} ; styleStatement:STYLE SPACE alphaNum SPACE stylesOpt {$$ = $1;yy.addVertex($3,undefined,undefined,$5);} | STYLE SPACE HEX SPACE stylesOpt {$$ = $1;yy.updateLink($3,$5);} ; linkStyleStatement : LINKSTYLE SPACE DEFAULT SPACE stylesOpt {$$ = $1;yy.updateLink([$3],$5);} | LINKSTYLE SPACE numList SPACE stylesOpt {$$ = $1;yy.updateLink($3,$5);} | LINKSTYLE SPACE DEFAULT SPACE INTERPOLATE SPACE alphaNum SPACE stylesOpt {$$ = $1;yy.updateLinkInterpolate([$3],$7);yy.updateLink([$3],$9);} | LINKSTYLE SPACE numList SPACE INTERPOLATE SPACE alphaNum SPACE stylesOpt {$$ = $1;yy.updateLinkInterpolate($3,$7);yy.updateLink($3,$9);} | LINKSTYLE SPACE DEFAULT SPACE INTERPOLATE SPACE alphaNum {$$ = $1;yy.updateLinkInterpolate([$3],$7);} | LINKSTYLE SPACE numList SPACE INTERPOLATE SPACE alphaNum {$$ = $1;yy.updateLinkInterpolate($3,$7);} ; commentStatement: PCT PCT commentText; numList: NUM {$$ = [$1]} | numList COMMA NUM {$1.push($3);$$ = $1;} ; stylesOpt: style {$$ = [$1]} | stylesOpt COMMA style {$1.push($3);$$ = $1;} ; style: styleComponent |style styleComponent {$$ = $1 + $2;} ; styleComponent: ALPHA | COLON | MINUS | NUM | UNIT | SPACE | HEX | BRKT | DOT | STYLE | PCT ; /* Token lists */ commentToken : textToken | graphCodeTokens ; textToken : textNoTagsToken | TAGSTART | TAGEND | '==' | '--' | PCT | DEFAULT; textNoTagsToken: alphaNumToken | SPACE | MINUS | keywords ; alphaNumToken : ALPHA | PUNCTUATION | UNICODE_TEXT | NUM | COLON | COMMA | PLUS | EQUALS | MULT | DOT | BRKT ; graphCodeTokens: PIPE | PS | PE | SQS | SQE | DIAMOND_START | DIAMOND_STOP | TAG_START | TAG_END | ARROW_CROSS | ARROW_POINT | ARROW_CIRCLE | ARROW_OPEN | QUOTE | SEMI ; %% mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/flow-arrows.spec.js000066400000000000000000000221271433273745700325020ustar00rootroot00000000000000import flowDb from '../flowDb'; import flow from './flow'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('[Arrows] when parsing', () => { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); }); it('should handle a nodes and edges', function () { const res = flow.parser.parse('graph TD;\nA-->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it("should handle angle bracket ' > ' as direction LR", function () { const res = flow.parser.parse('graph >;A-->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); const direction = flow.parser.yy.getDirection(); expect(direction).toBe('LR'); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it("should handle angle bracket ' < ' as direction RL", function () { const res = flow.parser.parse('graph <;A-->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); const direction = flow.parser.yy.getDirection(); expect(direction).toBe('RL'); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it("should handle caret ' ^ ' as direction BT", function () { const res = flow.parser.parse('graph ^;A-->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); const direction = flow.parser.yy.getDirection(); expect(direction).toBe('BT'); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].length).toBe(1); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it("should handle lower-case 'v' as direction TB", function () { const res = flow.parser.parse('graph v;A-->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); const direction = flow.parser.yy.getDirection(); expect(direction).toBe('TB'); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it('should handle a nodes and edges and a space between link and node', function () { const res = flow.parser.parse('graph TD;A --> B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it('should handle a nodes and edges, a space between link and node and each line ending without semicolon', function () { const res = flow.parser.parse('graph TD\nA --> B\n style e red'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it('should handle statements ending without semicolon', function () { const res = flow.parser.parse('graph TD\nA-->B\nB-->C'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(2); expect(edges[1].start).toBe('B'); expect(edges[1].end).toBe('C'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); describe('it should handle multi directional arrows', function () { describe('point', function () { it('should handle double edged nodes and edges', function () { const res = flow.parser.parse('graph TD;\nA<-->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes with text', function () { const res = flow.parser.parse('graph TD;\nA<-- text -->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_point'); expect(edges[0].text).toBe('text'); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes and edges on thick arrows', function () { const res = flow.parser.parse('graph TD;\nA<==>B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('thick'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes with text on thick arrows', function () { const res = flow.parser.parse('graph TD;\nA<== text ==>B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_point'); expect(edges[0].text).toBe('text'); expect(edges[0].stroke).toBe('thick'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes and edges on dotted arrows', function () { const res = flow.parser.parse('graph TD;\nA<-.->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('dotted'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes with text on dotted arrows', function () { const res = flow.parser.parse('graph TD;\nA<-. text .->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_point'); expect(edges[0].text).toBe('text'); expect(edges[0].stroke).toBe('dotted'); expect(edges[0].length).toBe(1); }); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/flow-comments.spec.js000066400000000000000000000113351433273745700330110ustar00rootroot00000000000000import flowDb from '../flowDb'; import flow from './flow'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('[Comments] when parsing', () => { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); }); it('should handle comments', function () { const res = flow.parser.parse('graph TD;\n%% Comment\n A-->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); }); it('should handle comments at the start', function () { const res = flow.parser.parse('%% Comment\ngraph TD;\n A-->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); }); it('should handle comments at the end', function () { const res = flow.parser.parse('graph TD;\n A-->B\n %% Comment at the end\n'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); }); it('should handle comments at the end no trailing newline', function () { const res = flow.parser.parse('graph TD;\n A-->B\n%% Comment'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); }); it('should handle comments at the end many trailing newlines', function () { const res = flow.parser.parse('graph TD;\n A-->B\n%% Comment\n\n\n'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); }); it('should handle no trailing newlines', function () { const res = flow.parser.parse('graph TD;\n A-->B'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); }); it('should handle many trailing newlines', function () { const res = flow.parser.parse('graph TD;\n A-->B\n\n'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); }); it('should handle a comment with blank rows in-between', function () { const res = flow.parser.parse('graph TD;\n\n\n %% Comment\n A-->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); }); it('should handle a comment with mermaid flowchart code in them', function () { const res = flow.parser.parse( 'graph TD;\n\n\n %% Test od>Odd shape]-->|Two line
edge comment|ro;\n A-->B;' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/flow-direction.spec.js000066400000000000000000000053201433273745700331410ustar00rootroot00000000000000import flowDb from '../flowDb'; import flow from './flow'; import filter from 'lodash/filter'; import { setConfig } from '../../../config'; // import DOMPurify from 'dompurify'; // const domPurify = DOMPurify.createDOMPurify(window); // const clean = DOMPurify.sanitize(dirty); setConfig({ securityLevel: 'strict', }); describe('when parsing directions', function () { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); it('should use default direction from top level', function () { const res = flow.parser.parse(`flowchart TB subgraph A a --> b end`); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.nodes.length).toBe(2); expect(subgraph.nodes[0]).toBe('b'); expect(subgraph.nodes[1]).toBe('a'); expect(subgraph.id).toBe('A'); expect(subgraph.dir).toBe(undefined); }); it('should handle a subgraph with a direction', function () { const res = flow.parser.parse(`flowchart TB subgraph A direction BT a --> b end`); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.nodes.length).toBe(2); expect(subgraph.nodes[0]).toBe('b'); expect(subgraph.nodes[1]).toBe('a'); expect(subgraph.id).toBe('A'); expect(subgraph.dir).toBe('BT'); }); it('should use the last defined direction', function () { const res = flow.parser.parse(`flowchart TB subgraph A direction BT a --> b direction RL end`); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.nodes.length).toBe(2); expect(subgraph.nodes[0]).toBe('b'); expect(subgraph.nodes[1]).toBe('a'); expect(subgraph.id).toBe('A'); expect(subgraph.dir).toBe('RL'); }); it('should handle nested subgraphs 1', function () { const res = flow.parser.parse(`flowchart TB subgraph A direction RL b-->B a end a-->c subgraph B direction LR c end`); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(2); const subgraphA = filter(subgraphs, (o) => o.id === 'A')[0]; const subgraphB = filter(subgraphs, (o) => o.id === 'B')[0]; expect(subgraphB.nodes[0]).toBe('c'); expect(subgraphB.dir).toBe('LR'); expect(subgraphA.nodes).toContain('B'); expect(subgraphA.nodes).toContain('b'); expect(subgraphA.nodes).toContain('a'); expect(subgraphA.nodes).not.toContain('c'); expect(subgraphA.dir).toBe('RL'); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js000066400000000000000000000543311433273745700322560ustar00rootroot00000000000000import flowDb from '../flowDb'; import flow from './flow'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('[Edges] when parsing', () => { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); }); it('should handle open ended edges', function () { const res = flow.parser.parse('graph TD;A---B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_open'); }); it('should handle cross ended edges', function () { const res = flow.parser.parse('graph TD;A--xB;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); }); it('should handle open ended edges', function () { const res = flow.parser.parse('graph TD;A--oB;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_circle'); }); describe('cross', function () { it('should handle double edged nodes and edges', function () { const res = flow.parser.parse('graph TD;\nA x--x B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_cross'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes with text', function () { const res = flow.parser.parse('graph TD;\nA x-- text --x B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_cross'); expect(edges[0].text).toBe('text'); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes and edges on thick arrows', function () { const res = flow.parser.parse('graph TD;\nA x==x B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_cross'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('thick'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes with text on thick arrows', function () { const res = flow.parser.parse('graph TD;\nA x== text ==x B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_cross'); expect(edges[0].text).toBe('text'); expect(edges[0].stroke).toBe('thick'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes and edges on dotted arrows', function () { const res = flow.parser.parse('graph TD;\nA x-.-x B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_cross'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('dotted'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes with text on dotted arrows', function () { const res = flow.parser.parse('graph TD;\nA x-. text .-x B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_cross'); expect(edges[0].text).toBe('text'); expect(edges[0].stroke).toBe('dotted'); expect(edges[0].length).toBe(1); }); }); describe('circle', function () { it('should handle double edged nodes and edges', function () { const res = flow.parser.parse('graph TD;\nA o--o B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_circle'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes with text', function () { const res = flow.parser.parse('graph TD;\nA o-- text --o B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_circle'); expect(edges[0].text).toBe('text'); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes and edges on thick arrows', function () { const res = flow.parser.parse('graph TD;\nA o==o B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_circle'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('thick'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes with text on thick arrows', function () { const res = flow.parser.parse('graph TD;\nA o== text ==o B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_circle'); expect(edges[0].text).toBe('text'); expect(edges[0].stroke).toBe('thick'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes and edges on dotted arrows', function () { const res = flow.parser.parse('graph TD;\nA o-.-o B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_circle'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('dotted'); expect(edges[0].length).toBe(1); }); it('should handle double edged nodes with text on dotted arrows', function () { const res = flow.parser.parse('graph TD;\nA o-. text .-o B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_circle'); expect(edges[0].text).toBe('text'); expect(edges[0].stroke).toBe('dotted'); expect(edges[0].length).toBe(1); }); }); it('should handle multiple edges', function () { const res = flow.parser.parse( 'graph TD;A---|This is the 123 s text|B;\nA---|This is the second edge|B;' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(2); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_open'); expect(edges[0].text).toBe('This is the 123 s text'); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(1); expect(edges[1].start).toBe('A'); expect(edges[1].end).toBe('B'); expect(edges[1].type).toBe('arrow_open'); expect(edges[1].text).toBe('This is the second edge'); expect(edges[1].stroke).toBe('normal'); expect(edges[1].length).toBe(1); }); describe('edge length', function () { for (let length = 1; length <= 3; ++length) { it(`should handle normal edges with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA -${'-'.repeat(length)}- B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_open'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle normal labelled edges with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA -- Label -${'-'.repeat(length)}- B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_open'); expect(edges[0].text).toBe('Label'); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle normal edges with arrows with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA -${'-'.repeat(length)}> B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle normal labelled edges with arrows with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA -- Label -${'-'.repeat(length)}> B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe('Label'); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle normal edges with double arrows with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA <-${'-'.repeat(length)}> B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle normal labelled edges with double arrows with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA <-- Label -${'-'.repeat(length)}> B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_point'); expect(edges[0].text).toBe('Label'); expect(edges[0].stroke).toBe('normal'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle thick edges with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA =${'='.repeat(length)}= B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_open'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('thick'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle thick labelled edges with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA == Label =${'='.repeat(length)}= B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_open'); expect(edges[0].text).toBe('Label'); expect(edges[0].stroke).toBe('thick'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle thick edges with arrows with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA =${'='.repeat(length)}> B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('thick'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle thick labelled edges with arrows with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA == Label =${'='.repeat(length)}> B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe('Label'); expect(edges[0].stroke).toBe('thick'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle thick edges with double arrows with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA <=${'='.repeat(length)}> B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('thick'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle thick labelled edges with double arrows with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA <== Label =${'='.repeat(length)}> B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_point'); expect(edges[0].text).toBe('Label'); expect(edges[0].stroke).toBe('thick'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle dotted edges with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA -${'.'.repeat(length)}- B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_open'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('dotted'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle dotted labelled edges with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA -. Label ${'.'.repeat(length)}- B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_open'); expect(edges[0].text).toBe('Label'); expect(edges[0].stroke).toBe('dotted'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle dotted edges with arrows with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA -${'.'.repeat(length)}-> B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('dotted'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle dotted labelled edges with arrows with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA -. Label ${'.'.repeat(length)}-> B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe('Label'); expect(edges[0].stroke).toBe('dotted'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle dotted edges with double arrows with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA <-${'.'.repeat(length)}-> B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_point'); expect(edges[0].text).toBe(''); expect(edges[0].stroke).toBe('dotted'); expect(edges[0].length).toBe(length); }); } for (let length = 1; length <= 3; ++length) { it(`should handle dotted edges with double arrows with length ${length}`, function () { const res = flow.parser.parse(`graph TD;\nA <-. Label ${'.'.repeat(length)}-> B;`); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(1); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('double_arrow_point'); expect(edges[0].text).toBe('Label'); expect(edges[0].stroke).toBe('dotted'); expect(edges[0].length).toBe(length); }); } }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/flow-huge.spec.js000066400000000000000000010627301433273745700321220ustar00rootroot00000000000000import flowDb from '../flowDb'; import flow from './flow'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('[Text] when parsing', () => { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); }); describe('it should handle huge files', function () { it.skip('it should handlehuge diagrams', function () { const res = flow.parser.parse( 'graph LR;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); expect(edges.length).toBe(47917); expect(Object.keys(vert).length).toBe(2); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/flow-interactions.spec.js000066400000000000000000000133731433273745700336720ustar00rootroot00000000000000import flowDb from '../flowDb'; import flow from './flow'; import { setConfig } from '../../../config'; import { vi } from 'vitest'; const spyOn = vi.spyOn; setConfig({ securityLevel: 'strict', }); describe('[Interactions] when parsing', () => { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); }); it('should be possible to use click to a callback', function () { spyOn(flowDb, 'setClickEvent'); const res = flow.parser.parse('graph TD\nA-->B\nclick A callback'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setClickEvent).toHaveBeenCalledWith('A', 'callback'); }); it('should be possible to use click to a click and call callback', function () { spyOn(flowDb, 'setClickEvent'); const res = flow.parser.parse('graph TD\nA-->B\nclick A call callback()'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setClickEvent).toHaveBeenCalledWith('A', 'callback'); }); it('should be possible to use click to a callback with toolip', function () { spyOn(flowDb, 'setClickEvent'); spyOn(flowDb, 'setTooltip'); const res = flow.parser.parse('graph TD\nA-->B\nclick A callback "tooltip"'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setClickEvent).toHaveBeenCalledWith('A', 'callback'); expect(flowDb.setTooltip).toHaveBeenCalledWith('A', 'tooltip'); }); it('should be possible to use click to a click and call callback with toolip', function () { spyOn(flowDb, 'setClickEvent'); spyOn(flowDb, 'setTooltip'); const res = flow.parser.parse('graph TD\nA-->B\nclick A call callback() "tooltip"'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setClickEvent).toHaveBeenCalledWith('A', 'callback'); expect(flowDb.setTooltip).toHaveBeenCalledWith('A', 'tooltip'); }); it('should be possible to use click to a callback with an arbitrary number of args', function () { spyOn(flowDb, 'setClickEvent'); const res = flow.parser.parse('graph TD\nA-->B\nclick A call callback("test0", test1, test2)'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setClickEvent).toHaveBeenCalledWith('A', 'callback', '"test0", test1, test2'); }); it('should handle interaction - click to a link', function () { spyOn(flowDb, 'setLink'); const res = flow.parser.parse('graph TD\nA-->B\nclick A "click.html"'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html'); }); it('should handle interaction - click to a click and href link', function () { spyOn(flowDb, 'setLink'); const res = flow.parser.parse('graph TD\nA-->B\nclick A href "click.html"'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html'); }); it('should handle interaction - click to a link with tooltip', function () { spyOn(flowDb, 'setLink'); spyOn(flowDb, 'setTooltip'); const res = flow.parser.parse('graph TD\nA-->B\nclick A "click.html" "tooltip"'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html'); expect(flowDb.setTooltip).toHaveBeenCalledWith('A', 'tooltip'); }); it('should handle interaction - click to a click and href link with tooltip', function () { spyOn(flowDb, 'setLink'); spyOn(flowDb, 'setTooltip'); const res = flow.parser.parse('graph TD\nA-->B\nclick A href "click.html" "tooltip"'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html'); expect(flowDb.setTooltip).toHaveBeenCalledWith('A', 'tooltip'); }); it('should handle interaction - click to a link with target', function () { spyOn(flowDb, 'setLink'); const res = flow.parser.parse('graph TD\nA-->B\nclick A "click.html" _blank'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html', '_blank'); }); it('should handle interaction - click to a click and href link with target', function () { spyOn(flowDb, 'setLink'); const res = flow.parser.parse('graph TD\nA-->B\nclick A href "click.html" _blank'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html', '_blank'); }); it('should handle interaction - click to a link with tooltip and target', function () { spyOn(flowDb, 'setLink'); spyOn(flowDb, 'setTooltip'); const res = flow.parser.parse('graph TD\nA-->B\nclick A "click.html" "tooltip" _blank'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html', '_blank'); expect(flowDb.setTooltip).toHaveBeenCalledWith('A', 'tooltip'); }); it('should handle interaction - click to a click and href link with tooltip and target', function () { spyOn(flowDb, 'setLink'); spyOn(flowDb, 'setTooltip'); const res = flow.parser.parse('graph TD\nA-->B\nclick A href "click.html" "tooltip" _blank'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html', '_blank'); expect(flowDb.setTooltip).toHaveBeenCalledWith('A', 'tooltip'); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/flow-lines.spec.js000066400000000000000000000070321433273745700322750ustar00rootroot00000000000000import flowDb from '../flowDb'; import flow from './flow'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('[Lines] when parsing', () => { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); }); it('should handle line interpolation default definitions', function () { const res = flow.parser.parse('graph TD\n' + 'A-->B\n' + 'linkStyle default interpolate basis'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.defaultInterpolate).toBe('basis'); }); it('should handle line interpolation numbered definitions', function () { const res = flow.parser.parse( 'graph TD\n' + 'A-->B\n' + 'A-->C\n' + 'linkStyle 0 interpolate basis\n' + 'linkStyle 1 interpolate cardinal' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].interpolate).toBe('basis'); expect(edges[1].interpolate).toBe('cardinal'); }); it('should handle line interpolation multi-numbered definitions', function () { const res = flow.parser.parse( 'graph TD\n' + 'A-->B\n' + 'A-->C\n' + 'linkStyle 0,1 interpolate basis' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].interpolate).toBe('basis'); expect(edges[1].interpolate).toBe('basis'); }); it('should handle line interpolation default with style', function () { const res = flow.parser.parse( 'graph TD\n' + 'A-->B\n' + 'linkStyle default interpolate basis stroke-width:1px;' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.defaultInterpolate).toBe('basis'); }); it('should handle line interpolation numbered with style', function () { const res = flow.parser.parse( 'graph TD\n' + 'A-->B\n' + 'A-->C\n' + 'linkStyle 0 interpolate basis stroke-width:1px;\n' + 'linkStyle 1 interpolate cardinal stroke-width:1px;' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].interpolate).toBe('basis'); expect(edges[1].interpolate).toBe('cardinal'); }); it('should handle line interpolation multi-numbered with style', function () { const res = flow.parser.parse( 'graph TD\n' + 'A-->B\n' + 'A-->C\n' + 'linkStyle 0,1 interpolate basis stroke-width:1px;' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].interpolate).toBe('basis'); expect(edges[1].interpolate).toBe('basis'); }); describe('it should handle new line type notation', function () { it('should handle regular lines', function () { const res = flow.parser.parse('graph TD;A-->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].stroke).toBe('normal'); }); it('should handle dotted lines', function () { const res = flow.parser.parse('graph TD;A-.->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].stroke).toBe('dotted'); }); it('should handle dotted lines', function () { const res = flow.parser.parse('graph TD;A==>B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].stroke).toBe('thick'); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/flow-singlenode.spec.js000066400000000000000000000200151433273745700333060ustar00rootroot00000000000000import flowDb from '../flowDb'; import flow from './flow'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('[Singlenodes] when parsing', () => { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); }); it('should handle a single node', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;A;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['A'].styles.length).toBe(0); }); it('should handle a single node with white space after it (SN1)', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;A ;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['A'].styles.length).toBe(0); }); it('should handle a single square node', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a[A];'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].styles.length).toBe(0); expect(vert['a'].type).toBe('square'); }); it('should handle a single round square node', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a[A];'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].styles.length).toBe(0); expect(vert['a'].type).toBe('square'); }); it('should handle a single circle node', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a((A));'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].type).toBe('circle'); }); it('should handle a single round node', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a(A);'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].type).toBe('round'); }); it('should handle a single odd node', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a>A];'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].type).toBe('odd'); }); it('should handle a single diamond node', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a{A};'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].type).toBe('diamond'); }); it('should handle a single diamond node with whitespace after it', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a{A} ;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].type).toBe('diamond'); }); it('should handle a single diamond node with html in it (SN3)', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a{A
end};'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].type).toBe('diamond'); expect(vert['a'].text).toBe('A
end'); }); it('should handle a single hexagon node', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a{{A}};'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].type).toBe('hexagon'); }); it('should handle a single hexagon node with html in it', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a{{A
end}};'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].type).toBe('hexagon'); expect(vert['a'].text).toBe('A
end'); }); it('should handle a single round node with html in it', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a(A
end);'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].type).toBe('round'); expect(vert['a'].text).toBe('A
end'); }); it('should handle a single double circle node', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a(((A)));'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].type).toBe('doublecircle'); }); it('should handle a single double circle node with whitespace after it', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a(((A))) ;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].type).toBe('doublecircle'); }); it('should handle a single double circle node with html in it (SN3)', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;a(((A
end)));'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['a'].type).toBe('doublecircle'); expect(vert['a'].text).toBe('A
end'); }); it('should handle a single node with alphanumerics starting on a char', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;id1;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['id1'].styles.length).toBe(0); }); it('should handle a single node with a single digit', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;1;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['1'].text).toBe('1'); }); it('should handle a single node with a single digit in a subgraph', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;subgraph "hello";1;end;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['1'].text).toBe('1'); }); it('should handle a single node with alphanumerics starting on a num', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;1id;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['1id'].styles.length).toBe(0); }); it('should handle a single node with alphanumerics containing a minus sign', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;i-d;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['i-d'].styles.length).toBe(0); }); it('should handle a single node with alphanumerics containing a underscore sign', function () { // Silly but syntactically correct const res = flow.parser.parse('graph TD;i_d;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(0); expect(vert['i_d'].styles.length).toBe(0); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js000066400000000000000000000272221433273745700323260ustar00rootroot00000000000000import flowDb from '../flowDb'; import flow from './flow'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('[Style] when parsing', () => { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); // log.debug(flow.parser.parse('graph TD;style Q background:#fff;')); it('should handle styles for vertices', function () { const res = flow.parser.parse('graph TD;style Q background:#fff;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); const style = vert['Q'].styles[0]; expect(vert['Q'].styles.length).toBe(1); expect(vert['Q'].styles[0]).toBe('background:#fff'); }); // log.debug(flow.parser.parse('graph TD;style Q background:#fff;')); it('should handle styles for edges', function () { const res = flow.parser.parse('graph TD;a-->b;\nstyle #0 stroke: #f66;'); const edges = flow.parser.yy.getEdges(); expect(edges.length).toBe(1); }); it('should handle multiple styles for a vortex', function () { const res = flow.parser.parse('graph TD;style R background:#fff,border:1px solid red;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['R'].styles.length).toBe(2); expect(vert['R'].styles[0]).toBe('background:#fff'); expect(vert['R'].styles[1]).toBe('border:1px solid red'); }); it('should handle multiple styles in a graph', function () { const res = flow.parser.parse( 'graph TD;style S background:#aaa;\nstyle T background:#bbb,border:1px solid red;' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['S'].styles.length).toBe(1); expect(vert['T'].styles.length).toBe(2); expect(vert['S'].styles[0]).toBe('background:#aaa'); expect(vert['T'].styles[0]).toBe('background:#bbb'); expect(vert['T'].styles[1]).toBe('border:1px solid red'); }); it('should handle styles and graph definitions in a graph', function () { const res = flow.parser.parse( 'graph TD;S-->T;\nstyle S background:#aaa;\nstyle T background:#bbb,border:1px solid red;' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['S'].styles.length).toBe(1); expect(vert['T'].styles.length).toBe(2); expect(vert['S'].styles[0]).toBe('background:#aaa'); expect(vert['T'].styles[0]).toBe('background:#bbb'); expect(vert['T'].styles[1]).toBe('border:1px solid red'); }); it('should handle styles and graph definitions in a graph', function () { const res = flow.parser.parse('graph TD;style T background:#bbb,border:1px solid red;'); // const res = flow.parser.parse('graph TD;style T background: #bbb;'); const vert = flow.parser.yy.getVertices(); expect(vert['T'].styles.length).toBe(2); expect(vert['T'].styles[0]).toBe('background:#bbb'); expect(vert['T'].styles[1]).toBe('border:1px solid red'); }); it('should keep node label text (if already defined) when a style is applied', function () { const res = flow.parser.parse( 'graph TD;A(( ));B((Test));C;style A background:#fff;style D border:1px solid red;' ); const vert = flow.parser.yy.getVertices(); expect(vert['A'].text).toBe(''); expect(vert['B'].text).toBe('Test'); expect(vert['C'].text).toBe('C'); expect(vert['D'].text).toBe('D'); }); it('should be possible to declare a class', function () { const res = flow.parser.parse( 'graph TD;classDef exClass background:#bbb,border:1px solid red;' ); // const res = flow.parser.parse('graph TD;style T background: #bbb;'); const classes = flow.parser.yy.getClasses(); expect(classes['exClass'].styles.length).toBe(2); expect(classes['exClass'].styles[0]).toBe('background:#bbb'); expect(classes['exClass'].styles[1]).toBe('border:1px solid red'); }); it('should be possible to declare a class with a dot in the style', function () { const res = flow.parser.parse( 'graph TD;classDef exClass background:#bbb,border:1.5px solid red;' ); // const res = flow.parser.parse('graph TD;style T background: #bbb;'); const classes = flow.parser.yy.getClasses(); expect(classes['exClass'].styles.length).toBe(2); expect(classes['exClass'].styles[0]).toBe('background:#bbb'); expect(classes['exClass'].styles[1]).toBe('border:1.5px solid red'); }); it('should be possible to declare a class with a space in the style', function () { const res = flow.parser.parse( 'graph TD;classDef exClass background: #bbb,border:1.5px solid red;' ); // const res = flow.parser.parse('graph TD;style T background : #bbb;'); const classes = flow.parser.yy.getClasses(); expect(classes['exClass'].styles.length).toBe(2); expect(classes['exClass'].styles[0]).toBe('background: #bbb'); expect(classes['exClass'].styles[1]).toBe('border:1.5px solid red'); }); it('should be possible to apply a class to a vertex', function () { let statement = ''; statement = statement + 'graph TD;' + '\n'; statement = statement + 'classDef exClass background:#bbb,border:1px solid red;' + '\n'; statement = statement + 'a-->b;' + '\n'; statement = statement + 'class a exClass;'; const res = flow.parser.parse(statement); const classes = flow.parser.yy.getClasses(); expect(classes['exClass'].styles.length).toBe(2); expect(classes['exClass'].styles[0]).toBe('background:#bbb'); expect(classes['exClass'].styles[1]).toBe('border:1px solid red'); }); it('should be possible to apply a class to a vertex with an id containing _', function () { let statement = ''; statement = statement + 'graph TD;' + '\n'; statement = statement + 'classDef exClass background:#bbb,border:1px solid red;' + '\n'; statement = statement + 'a_a-->b_b;' + '\n'; statement = statement + 'class a_a exClass;'; const res = flow.parser.parse(statement); const classes = flow.parser.yy.getClasses(); expect(classes['exClass'].styles.length).toBe(2); expect(classes['exClass'].styles[0]).toBe('background:#bbb'); expect(classes['exClass'].styles[1]).toBe('border:1px solid red'); }); it('should be possible to apply a class to a vertex directly', function () { let statement = ''; statement = statement + 'graph TD;' + '\n'; statement = statement + 'classDef exClass background:#bbb,border:1px solid red;' + '\n'; statement = statement + 'a-->b[test]:::exClass;' + '\n'; const res = flow.parser.parse(statement); const vertices = flow.parser.yy.getVertices(); const classes = flow.parser.yy.getClasses(); expect(classes['exClass'].styles.length).toBe(2); expect(vertices['b'].classes[0]).toBe('exClass'); expect(classes['exClass'].styles[0]).toBe('background:#bbb'); expect(classes['exClass'].styles[1]).toBe('border:1px solid red'); }); it('should be possible to apply a class to a vertex directly : usecase A[text].class ', function () { let statement = ''; statement = statement + 'graph TD;' + '\n'; statement = statement + 'classDef exClass background:#bbb,border:1px solid red;' + '\n'; statement = statement + 'b[test]:::exClass;' + '\n'; const res = flow.parser.parse(statement); const vertices = flow.parser.yy.getVertices(); const classes = flow.parser.yy.getClasses(); expect(classes['exClass'].styles.length).toBe(2); expect(vertices['b'].classes[0]).toBe('exClass'); expect(classes['exClass'].styles[0]).toBe('background:#bbb'); expect(classes['exClass'].styles[1]).toBe('border:1px solid red'); }); it('should be possible to apply a class to a vertex directly : usecase A[text].class-->B[test2] ', function () { let statement = ''; statement = statement + 'graph TD;' + '\n'; statement = statement + 'classDef exClass background:#bbb,border:1px solid red;' + '\n'; statement = statement + 'A[test]:::exClass-->B[test2];' + '\n'; const res = flow.parser.parse(statement); const vertices = flow.parser.yy.getVertices(); const classes = flow.parser.yy.getClasses(); expect(classes['exClass'].styles.length).toBe(2); expect(vertices['A'].classes[0]).toBe('exClass'); expect(classes['exClass'].styles[0]).toBe('background:#bbb'); expect(classes['exClass'].styles[1]).toBe('border:1px solid red'); }); it('should be possible to apply a class to a vertex directly 2', function () { let statement = ''; statement = statement + 'graph TD;' + '\n'; statement = statement + 'classDef exClass background:#bbb,border:1px solid red;' + '\n'; statement = statement + 'a-->b[1 a a text!.]:::exClass;' + '\n'; const res = flow.parser.parse(statement); const vertices = flow.parser.yy.getVertices(); const classes = flow.parser.yy.getClasses(); expect(classes['exClass'].styles.length).toBe(2); expect(vertices['b'].classes[0]).toBe('exClass'); expect(classes['exClass'].styles[0]).toBe('background:#bbb'); expect(classes['exClass'].styles[1]).toBe('border:1px solid red'); }); it('should be possible to apply a class to a comma separated list of vertices', function () { let statement = ''; statement = statement + 'graph TD;' + '\n'; statement = statement + 'classDef exClass background:#bbb,border:1px solid red;' + '\n'; statement = statement + 'a-->b;' + '\n'; statement = statement + 'class a,b exClass;'; const res = flow.parser.parse(statement); const classes = flow.parser.yy.getClasses(); const vertices = flow.parser.yy.getVertices(); expect(classes['exClass'].styles.length).toBe(2); expect(classes['exClass'].styles[0]).toBe('background:#bbb'); expect(classes['exClass'].styles[1]).toBe('border:1px solid red'); expect(vertices['a'].classes[0]).toBe('exClass'); expect(vertices['b'].classes[0]).toBe('exClass'); }); it('should handle style definitions with more then 1 digit in a row', function () { const res = flow.parser.parse( 'graph TD\n' + 'A-->B1\n' + 'A-->B2\n' + 'A-->B3\n' + 'A-->B4\n' + 'A-->B5\n' + 'A-->B6\n' + 'A-->B7\n' + 'A-->B8\n' + 'A-->B9\n' + 'A-->B10\n' + 'A-->B11\n' + 'linkStyle 10 stroke-width:1px;' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); }); it('should handle multi-numbered style definitions with more then 1 digit in a row', function () { const res = flow.parser.parse( 'graph TD\n' + 'A-->B1\n' + 'A-->B2\n' + 'A-->B3\n' + 'A-->B4\n' + 'A-->B5\n' + 'A-->B6\n' + 'A-->B7\n' + 'A-->B8\n' + 'A-->B9\n' + 'A-->B10\n' + 'A-->B11\n' + 'A-->B12\n' + 'linkStyle 10,11 stroke-width:1px;' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); }); it('should handle classDefs with style in classes', function () { const res = flow.parser.parse('graph TD\nA-->B\nclassDef exClass font-style:bold;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); }); it('should handle classDefs with % in classes', function () { const res = flow.parser.parse( 'graph TD\nA-->B\nclassDef exClass fill:#f96,stroke:#333,stroke-width:4px,font-size:50%,font-style:bold;' ); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/flow-text.spec.js000066400000000000000000000412721433273745700321530ustar00rootroot00000000000000import flowDb from '../flowDb'; import flow from './flow'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('[Text] when parsing', () => { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); }); describe('it should handle text on edges', function () { it('should handle text without space', function () { const res = flow.parser.parse('graph TD;A--x|textNoSpace|B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); }); it('should handle with space', function () { const res = flow.parser.parse('graph TD;A--x|text including space|B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); }); it('should handle text with /', function () { const res = flow.parser.parse('graph TD;A--x|text with / should work|B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].text).toBe('text with / should work'); }); it('should handle space and space between vertices and link', function () { const res = flow.parser.parse('graph TD;A --x|textNoSpace| B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); }); it('should handle space and CAPS', function () { const res = flow.parser.parse('graph TD;A--x|text including CAPS space|B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); }); it('should handle space and dir', function () { const res = flow.parser.parse('graph TD;A--x|text including URL space|B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); expect(edges[0].text).toBe('text including URL space'); }); it('should handle space and send', function () { const res = flow.parser.parse('graph TD;A--text including URL space and send-->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe('text including URL space and send'); }); it('should handle space and send', function () { const res = flow.parser.parse('graph TD;A-- text including URL space and send -->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe('text including URL space and send'); }); it('should handle space and dir (TD)', function () { const res = flow.parser.parse('graph TD;A--x|text including R TD space|B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); expect(edges[0].text).toBe('text including R TD space'); }); it('should handle `', function () { const res = flow.parser.parse('graph TD;A--x|text including `|B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); expect(edges[0].text).toBe('text including `'); }); it('should handle v in node ids only v', function () { // only v const res = flow.parser.parse('graph TD;A--xv(my text);'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); expect(vert['v'].text).toBe('my text'); }); it('should handle v in node ids v at end', function () { // v at end const res = flow.parser.parse('graph TD;A--xcsv(my text);'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); expect(vert['csv'].text).toBe('my text'); }); it('should handle v in node ids v in middle', function () { // v in middle const res = flow.parser.parse('graph TD;A--xava(my text);'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); expect(vert['ava'].text).toBe('my text'); }); it('should handle v in node ids, v at start', function () { // v at start const res = flow.parser.parse('graph TD;A--xva(my text);'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); expect(vert['va'].text).toBe('my text'); }); it('should handle keywords', function () { const res = flow.parser.parse('graph TD;A--x|text including graph space|B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].text).toBe('text including graph space'); }); it('should handle keywords', function () { const res = flow.parser.parse('graph TD;V-->a[v]'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['a'].text).toBe('v'); }); it('should handle quoted text', function () { const res = flow.parser.parse('graph TD;V-- "test string()" -->a[v]'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].text).toBe('test string()'); }); }); describe('it should handle text on lines', () => { it('should handle normal text on lines', function () { const res = flow.parser.parse('graph TD;A-- test text with == -->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].stroke).toBe('normal'); }); it('should handle dotted text on lines (TD3)', function () { const res = flow.parser.parse('graph TD;A-. test text with == .->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].stroke).toBe('dotted'); }); it('should handle thick text on lines', function () { const res = flow.parser.parse('graph TD;A== test text with - ==>B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].stroke).toBe('thick'); }); }); describe('it should handle text on edges using the new notation', function () { it('should handle text without space', function () { const res = flow.parser.parse('graph TD;A-- textNoSpace --xB;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); }); it('should handle text with multiple leading space', function () { const res = flow.parser.parse('graph TD;A-- textNoSpace --xB;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); }); it('should handle with space', function () { const res = flow.parser.parse('graph TD;A-- text including space --xB;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); }); it('should handle text with /', function () { const res = flow.parser.parse('graph TD;A -- text with / should work --x B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].text).toBe('text with / should work'); }); it('should handle space and space between vertices and link', function () { const res = flow.parser.parse('graph TD;A -- textNoSpace --x B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); }); it('should handle space and CAPS', function () { const res = flow.parser.parse('graph TD;A-- text including CAPS space --xB;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); }); it('should handle space and dir', function () { const res = flow.parser.parse('graph TD;A-- text including URL space --xB;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); expect(edges[0].text).toBe('text including URL space'); }); it('should handle space and dir (TD2)', function () { const res = flow.parser.parse('graph TD;A-- text including R TD space --xB;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_cross'); expect(edges[0].text).toBe('text including R TD space'); }); it('should handle keywords', function () { const res = flow.parser.parse('graph TD;A-- text including graph space and v --xB;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].text).toBe('text including graph space and v'); }); it('should handle keywords', function () { const res = flow.parser.parse('graph TD;A-- text including graph space and v --xB[blav]'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].text).toBe('text including graph space and v'); }); // it.skip('should handle text on open links',function(){ // const res = flow.parser.parse('graph TD;A-- text including graph space --B'); // // const vert = flow.parser.yy.getVertices(); // const edges = flow.parser.yy.getEdges(); // // expect(edges[0].text).toBe('text including graph space'); // // }); }); describe('it should handle text in vertices, ', function () { it('should handle space', function () { const res = flow.parser.parse('graph TD;A-->C(Chimpansen hoppar);'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['C'].type).toBe('round'); expect(vert['C'].text).toBe('Chimpansen hoppar'); }); it('should handle åäö and minus', function () { const res = flow.parser.parse('graph TD;A-->C{Chimpansen hoppar åäö-ÅÄÖ};'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['C'].type).toBe('diamond'); expect(vert['C'].text).toBe('Chimpansen hoppar åäö-ÅÄÖ'); }); it('should handle with åäö, minus and space and br', function () { const res = flow.parser.parse('graph TD;A-->C(Chimpansen hoppar åäö
- ÅÄÖ);'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['C'].type).toBe('round'); expect(vert['C'].text).toBe('Chimpansen hoppar åäö
- ÅÄÖ'); }); // it.skip('should handle åäö, minus and space and br',function(){ // const res = flow.parser.parse('graph TD; A[Object(foo,bar)]-->B(Thing);'); // // const vert = flow.parser.yy.getVertices(); // const edges = flow.parser.yy.getEdges(); // // expect(vert['C'].type).toBe('round'); // expect(vert['C'].text).toBe(' A[Object(foo,bar)]-->B(Thing);'); // }); it('should handle unicode chars', function () { const res = flow.parser.parse('graph TD;A-->C(Начало);'); const vert = flow.parser.yy.getVertices(); expect(vert['C'].text).toBe('Начало'); }); it('should handle backslask', function () { const res = flow.parser.parse('graph TD;A-->C(c:\\windows);'); const vert = flow.parser.yy.getVertices(); expect(vert['C'].text).toBe('c:\\windows'); }); it('should handle CAPS', function () { const res = flow.parser.parse('graph TD;A-->C(some CAPS);'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['C'].type).toBe('round'); expect(vert['C'].text).toBe('some CAPS'); }); it('should handle directions', function () { const res = flow.parser.parse('graph TD;A-->C(some URL);'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['C'].type).toBe('round'); expect(vert['C'].text).toBe('some URL'); }); }); it('should handle multi-line text', function () { const res = flow.parser.parse('graph TD;A--o|text space|B;\n B-->|more text with space|C;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_circle'); expect(edges[1].type).toBe('arrow_point'); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(vert['C'].id).toBe('C'); expect(edges.length).toBe(2); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); // expect(edges[0].text).toBe('text space'); expect(edges[1].start).toBe('B'); expect(edges[1].end).toBe('C'); expect(edges[1].text).toBe('more text with space'); }); it('should handle text in vertices with space', function () { const res = flow.parser.parse('graph TD;A[chimpansen hoppar]-->C;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].type).toBe('square'); expect(vert['A'].text).toBe('chimpansen hoppar'); }); it('should handle text in vertices with space with spaces between vertices and link', function () { const res = flow.parser.parse('graph TD;A[chimpansen hoppar] --> C;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].type).toBe('square'); expect(vert['A'].text).toBe('chimpansen hoppar'); }); it('should handle text including _ in vertices', function () { const res = flow.parser.parse('graph TD;A[chimpansen_hoppar] --> C;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].type).toBe('square'); expect(vert['A'].text).toBe('chimpansen_hoppar'); }); it('should handle quoted text in vertices ', function () { const res = flow.parser.parse('graph TD;A["chimpansen hoppar ()[]"] --> C;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].type).toBe('square'); expect(vert['A'].text).toBe('chimpansen hoppar ()[]'); }); it('should handle text in circle vertices with space', function () { const res = flow.parser.parse('graph TD;A((chimpansen hoppar))-->C;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].type).toBe('circle'); expect(vert['A'].text).toBe('chimpansen hoppar'); }); it('should handle text in ellipse vertices', function () { const res = flow.parser.parse('graph TD\nA(-this is an ellipse-)-->B'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].type).toBe('ellipse'); expect(vert['A'].text).toBe('this is an ellipse'); }); it('should handle text in diamond vertices with space', function () { const res = flow.parser.parse('graph TD;A(chimpansen hoppar)-->C;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].type).toBe('round'); expect(vert['A'].text).toBe('chimpansen hoppar'); }); it('should handle text in with ?', function () { const res = flow.parser.parse('graph TD;A(?)-->|?|C;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].text).toBe('?'); expect(edges[0].text).toBe('?'); }); it('should handle text in with éèêàçô', function () { const res = flow.parser.parse('graph TD;A(éèêàçô)-->|éèêàçô|C;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].text).toBe('éèêàçô'); expect(edges[0].text).toBe('éèêàçô'); }); it('should handle text in with ,.?!+-*', function () { const res = flow.parser.parse('graph TD;A(,.?!+-*)-->|,.?!+-*|C;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].text).toBe(',.?!+-*'); expect(edges[0].text).toBe(',.?!+-*'); }); }); flow-vertice-chaining.spec.js000066400000000000000000000164731433273745700343340ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parserimport flowDb from '../flowDb'; import flow from './flow'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('when parsing flowcharts', function () { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); it('should handle chaining of vertices', function () { const res = flow.parser.parse(` graph TD A-->B-->C; `); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(vert['C'].id).toBe('C'); expect(edges.length).toBe(2); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[1].start).toBe('B'); expect(edges[1].end).toBe('C'); expect(edges[1].type).toBe('arrow_point'); expect(edges[1].text).toBe(''); }); it('should handle chaining of vertices', function () { const res = flow.parser.parse(` graph TD A & B --> C; `); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(vert['C'].id).toBe('C'); expect(edges.length).toBe(2); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('C'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[1].start).toBe('B'); expect(edges[1].end).toBe('C'); expect(edges[1].type).toBe('arrow_point'); expect(edges[1].text).toBe(''); }); it('should multiple vertices in link statement in the begining', function () { const res = flow.parser.parse(` graph TD A-->B & C; `); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(vert['C'].id).toBe('C'); expect(edges.length).toBe(2); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[1].start).toBe('A'); expect(edges[1].end).toBe('C'); expect(edges[1].type).toBe('arrow_point'); expect(edges[1].text).toBe(''); }); it('should multiple vertices in link statement at the end', function () { const res = flow.parser.parse(` graph TD A & B--> C & D; `); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(vert['C'].id).toBe('C'); expect(vert['D'].id).toBe('D'); expect(edges.length).toBe(4); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('C'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[1].start).toBe('A'); expect(edges[1].end).toBe('D'); expect(edges[1].type).toBe('arrow_point'); expect(edges[1].text).toBe(''); expect(edges[2].start).toBe('B'); expect(edges[2].end).toBe('C'); expect(edges[2].type).toBe('arrow_point'); expect(edges[2].text).toBe(''); expect(edges[3].start).toBe('B'); expect(edges[3].end).toBe('D'); expect(edges[3].type).toBe('arrow_point'); expect(edges[3].text).toBe(''); }); it('should handle chaining of vertices at both ends at once', function () { const res = flow.parser.parse(` graph TD A & B--> C & D; `); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(vert['C'].id).toBe('C'); expect(vert['D'].id).toBe('D'); expect(edges.length).toBe(4); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('C'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[1].start).toBe('A'); expect(edges[1].end).toBe('D'); expect(edges[1].type).toBe('arrow_point'); expect(edges[1].text).toBe(''); expect(edges[2].start).toBe('B'); expect(edges[2].end).toBe('C'); expect(edges[2].type).toBe('arrow_point'); expect(edges[2].text).toBe(''); expect(edges[3].start).toBe('B'); expect(edges[3].end).toBe('D'); expect(edges[3].type).toBe('arrow_point'); expect(edges[3].text).toBe(''); }); it('should handle chaining and multiple nodes in in link statement FVC ', function () { const res = flow.parser.parse(` graph TD A --> B & B2 & C --> D2; `); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(vert['B2'].id).toBe('B2'); expect(vert['C'].id).toBe('C'); expect(vert['D2'].id).toBe('D2'); expect(edges.length).toBe(6); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); expect(edges[1].start).toBe('A'); expect(edges[1].end).toBe('B2'); expect(edges[1].type).toBe('arrow_point'); expect(edges[1].text).toBe(''); expect(edges[2].start).toBe('A'); expect(edges[2].end).toBe('C'); expect(edges[2].type).toBe('arrow_point'); expect(edges[2].text).toBe(''); expect(edges[3].start).toBe('B'); expect(edges[3].end).toBe('D2'); expect(edges[3].type).toBe('arrow_point'); expect(edges[3].text).toBe(''); expect(edges[4].start).toBe('B2'); expect(edges[4].end).toBe('D2'); expect(edges[4].type).toBe('arrow_point'); expect(edges[4].text).toBe(''); expect(edges[5].start).toBe('C'); expect(edges[5].end).toBe('D2'); expect(edges[5].type).toBe('arrow_point'); expect(edges[5].text).toBe(''); }); it('should handle chaining and multiple nodes in in link statement with extra info in statements', function () { const res = flow.parser.parse(` graph TD A[ h ] -- hello --> B[" test "]:::exClass & C --> D; classDef exClass background:#bbb,border:1px solid red; `); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); const classes = flow.parser.yy.getClasses(); expect(classes['exClass'].styles.length).toBe(2); expect(classes['exClass'].styles[0]).toBe('background:#bbb'); expect(classes['exClass'].styles[1]).toBe('border:1px solid red'); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(vert['B'].classes[0]).toBe('exClass'); expect(vert['C'].id).toBe('C'); expect(vert['D'].id).toBe('D'); expect(edges.length).toBe(4); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe('hello'); expect(edges[1].start).toBe('A'); expect(edges[1].end).toBe('C'); expect(edges[1].type).toBe('arrow_point'); expect(edges[1].text).toBe('hello'); expect(edges[2].start).toBe('B'); expect(edges[2].end).toBe('D'); expect(edges[2].type).toBe('arrow_point'); expect(edges[2].text).toBe(''); expect(edges[3].start).toBe('C'); expect(edges[3].end).toBe('D'); expect(edges[3].type).toBe('arrow_point'); expect(edges[3].text).toBe(''); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/flow.jison000066400000000000000000000532701433273745700307470ustar00rootroot00000000000000/** mermaid * https://mermaidjs.github.io/ * (c) 2015 Knut Sveidqvist * MIT license. */ /* lexical grammar */ %lex %x string %x acc_title %x acc_descr %x acc_descr_multiline %x dir %x vertex %x click %x href %x callbackname %x callbackargs %x open_directive %x type_directive %x arg_directive %x close_directive %% \%\%\{ { this.begin('open_directive'); return 'open_directive'; } ((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } ":" { this.popState(); this.begin('arg_directive'); return ':'; } \}\%\% { this.popState(); this.popState(); return 'close_directive'; } ((?:(?!\}\%\%).|\n)*) return 'arg_directive'; \%\%(?!\{)[^\n]* /* skip comments */ [^\}]\%\%[^\n]* /* skip comments */ accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} [\}] { this.popState(); } [^\}]* return "acc_descr_multiline_value"; // .*[^\n]* { return "acc_descr_line"} ["] this.begin("string"); ["] this.popState(); [^"]* return "STR"; "style" return 'STYLE'; "default" return 'DEFAULT'; "linkStyle" return 'LINKSTYLE'; "interpolate" return 'INTERPOLATE'; "classDef" return 'CLASSDEF'; "class" return 'CLASS'; /* ---interactivity command--- 'href' adds a link to the specified node. 'href' can only be specified when the line was introduced with 'click'. 'href ""' attaches the specified link to the node that was specified by 'click'. */ "href"[\s]+["] this.begin("href"); ["] this.popState(); [^"]* return 'HREF'; /* ---interactivity command--- 'call' adds a callback to the specified node. 'call' can only be specified when the line was introduced with 'click'. 'call ()' attaches the function 'callbackname' with the specified arguments to the node that was specified by 'click'. Function arguments are optional: 'call ()' simply executes 'callbackname' without any arguments. */ "call"[\s]+ this.begin("callbackname"); \([\s]*\) this.popState(); \( this.popState(); this.begin("callbackargs"); [^(]* return 'CALLBACKNAME'; \) this.popState(); [^)]* return 'CALLBACKARGS'; /* 'click' is the keyword to introduce a line that contains interactivity commands. 'click' must be followed by an existing node-id. All commands are attached to that id. 'click ' can be followed by href or call commands in any desired order */ "click"[\s]+ this.begin("click"); [\s\n] this.popState(); [^\s\n]* return 'CLICK'; "graph" {if(yy.lex.firstGraph()){this.begin("dir");} return 'GRAPH';} "flowchart" {if(yy.lex.firstGraph()){this.begin("dir");} return 'GRAPH';} "subgraph" return 'subgraph'; "end"\b\s* return 'end'; "_self" return 'LINK_TARGET'; "_blank" return 'LINK_TARGET'; "_parent" return 'LINK_TARGET'; "_top" return 'LINK_TARGET'; (\r?\n)*\s*\n { this.popState(); return 'NODIR'; } \s*"LR" { this.popState(); return 'DIR'; } \s*"RL" { this.popState(); return 'DIR'; } \s*"TB" { this.popState(); return 'DIR'; } \s*"BT" { this.popState(); return 'DIR'; } \s*"TD" { this.popState(); return 'DIR'; } \s*"BR" { this.popState(); return 'DIR'; } \s*"<" { this.popState(); return 'DIR'; } \s*">" { this.popState(); return 'DIR'; } \s*"^" { this.popState(); return 'DIR'; } \s*"v" { this.popState(); return 'DIR'; } .*direction\s+TB[^\n]* return 'direction_tb'; .*direction\s+BT[^\n]* return 'direction_bt'; .*direction\s+RL[^\n]* return 'direction_rl'; .*direction\s+LR[^\n]* return 'direction_lr'; [0-9]+ { return 'NUM';} \# return 'BRKT'; ":::" return 'STYLE_SEPARATOR'; ":" return 'COLON'; "&" return 'AMP'; ";" return 'SEMI'; "," return 'COMMA'; "*" return 'MULT'; \s*[xo<]?\-\-+[-xo>]\s* return 'LINK'; \s*[xo<]?\=\=+[=xo>]\s* return 'LINK'; \s*[xo<]?\-?\.+\-[xo>]?\s* return 'LINK'; \s*\~\~[\~]+\s* return 'LINK'; \s*[xo<]?\-\-\s* return 'START_LINK'; \s*[xo<]?\=\=\s* return 'START_LINK'; \s*[xo<]?\-\.\s* return 'START_LINK'; "(-" return '(-'; "-)" return '-)'; "([" return 'STADIUMSTART'; "])" return 'STADIUMEND'; "[[" return 'SUBROUTINESTART'; "]]" return 'SUBROUTINEEND'; "[|" return 'VERTEX_WITH_PROPS_START'; "[(" return 'CYLINDERSTART'; ")]" return 'CYLINDEREND'; "(((" return 'DOUBLECIRCLESTART'; ")))" return 'DOUBLECIRCLEEND'; \- return 'MINUS'; "." return 'DOT'; [\_] return 'UNDERSCORE'; \+ return 'PLUS'; \% return 'PCT'; "=" return 'EQUALS'; \= return 'EQUALS'; "<" return 'TAGSTART'; ">" return 'TAGEND'; "^" return 'UP'; "\|" return 'SEP'; "v" return 'DOWN'; [A-Za-z]+ return 'ALPHA'; "\\]" return 'TRAPEND'; "[/" return 'TRAPSTART'; "/]" return 'INVTRAPEND'; "[\\" return 'INVTRAPSTART'; [!"#$%&'*+,-.`?\\_/] return 'PUNCTUATION'; [\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]| [\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]| [\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]| [\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]| [\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]| [\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]| [\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]| [\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]| [\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]| [\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]| [\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]| [\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]| [\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]| [\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]| [\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]| [\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]| [\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]| [\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]| [\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]| [\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]| [\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]| [\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]| [\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]| [\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]| [\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]| [\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]| [\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]| [\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]| [\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]| [\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]| [\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]| [\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]| [\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]| [\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]| [\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]| [\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]| [\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]| [\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]| [\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]| [\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]| [\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]| [\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]| [\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]| [\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]| [\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]| [\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]| [\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]| [\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]| [\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]| [\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]| [\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]| [\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]| [\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]| [\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]| [\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]| [\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]| [\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]| [\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]| [\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]| [\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]| [\uFFD2-\uFFD7\uFFDA-\uFFDC] return 'UNICODE_TEXT'; "|" return 'PIPE'; "(" return 'PS'; ")" return 'PE'; "[" return 'SQS'; "]" return 'SQE'; "{" return 'DIAMOND_START' "}" return 'DIAMOND_STOP' "\"" return 'QUOTE'; (\r?\n)+ return 'NEWLINE'; \s return 'SPACE'; <> return 'EOF'; /lex /* operator associations and precedence */ %left '^' %start start %% /* language grammar */ start : mermaidDoc | directive start ; directive : openDirective typeDirective closeDirective separator | openDirective typeDirective ':' argDirective closeDirective separator ; openDirective : open_directive { yy.parseDirective('%%{', 'open_directive'); } ; typeDirective : type_directive { yy.parseDirective($1, 'type_directive'); } ; argDirective : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } ; closeDirective : close_directive { yy.parseDirective('}%%', 'close_directive', 'flowchart'); } ; mermaidDoc : graphConfig document ; document : /* empty */ { $$ = [];} | document line { if(!Array.isArray($2) || $2.length > 0){ $1.push($2); } $$=$1;} ; line : statement {$$=$1;} | SEMI | NEWLINE | SPACE | EOF ; graphConfig : SPACE graphConfig | NEWLINE graphConfig | GRAPH NODIR { yy.setDirection('TB');$$ = 'TB';} | GRAPH DIR FirstStmtSeperator { yy.setDirection($2);$$ = $2;} // | GRAPH SPACE TAGEND FirstStmtSeperator // { yy.setDirection("LR");$$ = $3;} // | GRAPH SPACE TAGSTART FirstStmtSeperator // { yy.setDirection("RL");$$ = $3;} // | GRAPH SPACE UP FirstStmtSeperator // { yy.setDirection("BT");$$ = $3;} // | GRAPH SPACE DOWN FirstStmtSeperator // { yy.setDirection("TB");$$ = $3;} ; ending: endToken ending | endToken ; endToken: NEWLINE | SPACE | EOF; FirstStmtSeperator : SEMI | NEWLINE | spaceList NEWLINE ; spaceListNewline : SPACE spaceListNewline | NEWLINE spaceListNewline | NEWLINE | SPACE ; spaceList : SPACE spaceList | SPACE ; statement : verticeStatement separator { /* console.warn('finat vs', $1.nodes); */ $$=$1.nodes} | styleStatement separator {$$=[];} | linkStyleStatement separator {$$=[];} | classDefStatement separator {$$=[];} | classStatement separator {$$=[];} | clickStatement separator {$$=[];} | subgraph SPACE text SQS text SQE separator document end {$$=yy.addSubGraph($3,$8,$5);} | subgraph SPACE text separator document end {$$=yy.addSubGraph($3,$5,$3);} // | subgraph SPACE text separator document end // {$$=yy.addSubGraph($3,$5,$3);} | subgraph separator document end {$$=yy.addSubGraph(undefined,$3,undefined);} | direction | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } ; separator: NEWLINE | SEMI | EOF ; verticeStatement: verticeStatement link node { /* console.warn('vs',$1.stmt,$3); */ yy.addLink($1.stmt,$3,$2); $$ = { stmt: $3, nodes: $3.concat($1.nodes) } } | verticeStatement link node spaceList { /* console.warn('vs',$1.stmt,$3); */ yy.addLink($1.stmt,$3,$2); $$ = { stmt: $3, nodes: $3.concat($1.nodes) } } |node spaceList {/*console.warn('noda', $1);*/ $$ = {stmt: $1, nodes:$1 }} |node { /*console.warn('noda', $1);*/ $$ = {stmt: $1, nodes:$1 }} ; node: vertex { /* console.warn('nod', $1); */ $$ = [$1];} | node spaceList AMP spaceList vertex { $$ = $1.concat($5); /* console.warn('pip', $1[0], $5, $$); */ } | vertex STYLE_SEPARATOR idString {$$ = [$1];yy.setClass($1,$3)} ; vertex: idString SQS text SQE {$$ = $1;yy.addVertex($1,$3,'square');} | idString DOUBLECIRCLESTART text DOUBLECIRCLEEND {$$ = $1;yy.addVertex($1,$3,'doublecircle');} | idString PS PS text PE PE {$$ = $1;yy.addVertex($1,$4,'circle');} | idString '(-' text '-)' {$$ = $1;yy.addVertex($1,$3,'ellipse');} | idString STADIUMSTART text STADIUMEND {$$ = $1;yy.addVertex($1,$3,'stadium');} | idString SUBROUTINESTART text SUBROUTINEEND {$$ = $1;yy.addVertex($1,$3,'subroutine');} | idString VERTEX_WITH_PROPS_START ALPHA COLON ALPHA PIPE text SQE {$$ = $1;yy.addVertex($1,$7,'rect',undefined,undefined,undefined, Object.fromEntries([[$3, $5]]));} | idString CYLINDERSTART text CYLINDEREND {$$ = $1;yy.addVertex($1,$3,'cylinder');} | idString PS text PE {$$ = $1;yy.addVertex($1,$3,'round');} | idString DIAMOND_START text DIAMOND_STOP {$$ = $1;yy.addVertex($1,$3,'diamond');} | idString DIAMOND_START DIAMOND_START text DIAMOND_STOP DIAMOND_STOP {$$ = $1;yy.addVertex($1,$4,'hexagon');} | idString TAGEND text SQE {$$ = $1;yy.addVertex($1,$3,'odd');} | idString TRAPSTART text TRAPEND {$$ = $1;yy.addVertex($1,$3,'trapezoid');} | idString INVTRAPSTART text INVTRAPEND {$$ = $1;yy.addVertex($1,$3,'inv_trapezoid');} | idString TRAPSTART text INVTRAPEND {$$ = $1;yy.addVertex($1,$3,'lean_right');} | idString INVTRAPSTART text TRAPEND {$$ = $1;yy.addVertex($1,$3,'lean_left');} | idString { /*console.warn('h: ', $1);*/$$ = $1;yy.addVertex($1);} ; link: linkStatement arrowText {$1.text = $2;$$ = $1;} | linkStatement TESTSTR SPACE {$1.text = $2;$$ = $1;} | linkStatement arrowText SPACE {$1.text = $2;$$ = $1;} | linkStatement {$$ = $1;} | START_LINK text LINK {var inf = yy.destructLink($3, $1); $$ = {"type":inf.type,"stroke":inf.stroke,"length":inf.length,"text":$2};} ; linkStatement: LINK {var inf = yy.destructLink($1);$$ = {"type":inf.type,"stroke":inf.stroke,"length":inf.length};} ; arrowText: PIPE text PIPE {$$ = $2;} ; text: textToken {$$=$1;} | text textToken {$$=$1+''+$2;} | STR {$$=$1;} ; keywords : STYLE | LINKSTYLE | CLASSDEF | CLASS | CLICK | GRAPH | DIR | subgraph | end | DOWN | UP; textNoTags: textNoTagsToken {$$=$1;} | textNoTags textNoTagsToken {$$=$1+''+$2;} ; classDefStatement:CLASSDEF SPACE DEFAULT SPACE stylesOpt {$$ = $1;yy.addClass($3,$5);} | CLASSDEF SPACE alphaNum SPACE stylesOpt {$$ = $1;yy.addClass($3,$5);} ; classStatement:CLASS SPACE alphaNum SPACE alphaNum {$$ = $1;yy.setClass($3, $5);} ; clickStatement : CLICK CALLBACKNAME {$$ = $1;yy.setClickEvent($1, $2);} | CLICK CALLBACKNAME SPACE STR {$$ = $1;yy.setClickEvent($1, $2);yy.setTooltip($1, $4);} | CLICK CALLBACKNAME CALLBACKARGS {$$ = $1;yy.setClickEvent($1, $2, $3);} | CLICK CALLBACKNAME CALLBACKARGS SPACE STR {$$ = $1;yy.setClickEvent($1, $2, $3);yy.setTooltip($1, $5);} | CLICK HREF {$$ = $1;yy.setLink($1, $2);} | CLICK HREF SPACE STR {$$ = $1;yy.setLink($1, $2);yy.setTooltip($1, $4);} | CLICK HREF SPACE LINK_TARGET {$$ = $1;yy.setLink($1, $2, $4);} | CLICK HREF SPACE STR SPACE LINK_TARGET {$$ = $1;yy.setLink($1, $2, $6);yy.setTooltip($1, $4);} | CLICK alphaNum {$$ = $1;yy.setClickEvent($1, $2);} | CLICK alphaNum SPACE STR {$$ = $1;yy.setClickEvent($1, $2);yy.setTooltip($1, $4);} | CLICK STR {$$ = $1;yy.setLink($1, $2);} | CLICK STR SPACE STR {$$ = $1;yy.setLink($1, $2);yy.setTooltip($1, $4);} | CLICK STR SPACE LINK_TARGET {$$ = $1;yy.setLink($1, $2, $4);} | CLICK STR SPACE STR SPACE LINK_TARGET {$$ = $1;yy.setLink($1, $2, $6);yy.setTooltip($1, $4);} ; styleStatement:STYLE SPACE alphaNum SPACE stylesOpt {$$ = $1;yy.addVertex($3,undefined,undefined,$5);} | STYLE SPACE HEX SPACE stylesOpt {$$ = $1;yy.updateLink($3,$5);} ; linkStyleStatement : LINKSTYLE SPACE DEFAULT SPACE stylesOpt {$$ = $1;yy.updateLink([$3],$5);} | LINKSTYLE SPACE numList SPACE stylesOpt {$$ = $1;yy.updateLink($3,$5);} | LINKSTYLE SPACE DEFAULT SPACE INTERPOLATE SPACE alphaNum SPACE stylesOpt {$$ = $1;yy.updateLinkInterpolate([$3],$7);yy.updateLink([$3],$9);} | LINKSTYLE SPACE numList SPACE INTERPOLATE SPACE alphaNum SPACE stylesOpt {$$ = $1;yy.updateLinkInterpolate($3,$7);yy.updateLink($3,$9);} | LINKSTYLE SPACE DEFAULT SPACE INTERPOLATE SPACE alphaNum {$$ = $1;yy.updateLinkInterpolate([$3],$7);} | LINKSTYLE SPACE numList SPACE INTERPOLATE SPACE alphaNum {$$ = $1;yy.updateLinkInterpolate($3,$7);} ; numList: NUM {$$ = [$1]} | numList COMMA NUM {$1.push($3);$$ = $1;} ; stylesOpt: style {$$ = [$1]} | stylesOpt COMMA style {$1.push($3);$$ = $1;} ; style: styleComponent |style styleComponent {$$ = $1 + $2;} ; styleComponent: ALPHA | COLON | MINUS | NUM | UNIT | SPACE | HEX | BRKT | DOT | STYLE | PCT ; /* Token lists */ textToken : textNoTagsToken | TAGSTART | TAGEND | START_LINK | PCT | DEFAULT; textNoTagsToken: alphaNumToken | SPACE | MINUS | keywords ; idString :idStringToken {$$=$1} | idString idStringToken {$$=$1+''+$2} ; alphaNum : alphaNumStatement {$$=$1;} | alphaNum alphaNumStatement {$$=$1+''+$2;} ; alphaNumStatement : DIR {$$=$1;} | alphaNumToken {$$=$1;} | DOWN {$$='v';} | MINUS {$$='-';} ; direction : direction_tb { $$={stmt:'dir', value:'TB'};} | direction_bt { $$={stmt:'dir', value:'BT'};} | direction_rl { $$={stmt:'dir', value:'RL'};} | direction_lr { $$={stmt:'dir', value:'LR'};} ; alphaNumToken : PUNCTUATION | AMP | UNICODE_TEXT | NUM| ALPHA | COLON | COMMA | PLUS | EQUALS | MULT | DOT | BRKT| UNDERSCORE ; idStringToken : ALPHA|UNDERSCORE |UNICODE_TEXT | NUM| COLON | COMMA | PLUS | MINUS | DOWN |EQUALS | MULT | BRKT | DOT | PUNCTUATION | AMP | DEFAULT; graphCodeTokens: STADIUMSTART | STADIUMEND | SUBROUTINESTART | SUBROUTINEEND | VERTEX_WITH_PROPS_START | CYLINDERSTART | CYLINDEREND | TRAPSTART | TRAPEND | INVTRAPSTART | INVTRAPEND | PIPE | PS | PE | SQS | SQE | DIAMOND_START | DIAMOND_STOP | TAGSTART | TAGEND | ARROW_CROSS | ARROW_POINT | ARROW_CIRCLE | ARROW_OPEN | QUOTE | SEMI; %% mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/flow.spec.js000066400000000000000000000133651433273745700311730ustar00rootroot00000000000000import flowDb from '../flowDb'; import flow from './flow'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('parsing a flow chart', function () { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); }); it('should handle a trailing whitespaces after statements', function () { const res = flow.parser.parse('graph TD;\n\n\n %% Comment\n A-->B; \n B-->C;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); expect(edges.length).toBe(2); expect(edges[0].start).toBe('A'); expect(edges[0].end).toBe('B'); expect(edges[0].type).toBe('arrow_point'); expect(edges[0].text).toBe(''); }); it('should handle node names with "end" substring', function () { const res = flow.parser.parse('graph TD\nendpoint --> sender'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['endpoint'].id).toBe('endpoint'); expect(vert['sender'].id).toBe('sender'); expect(edges[0].start).toBe('endpoint'); expect(edges[0].end).toBe('sender'); }); it('should handle node names ending with keywords', function () { const res = flow.parser.parse('graph TD\nblend --> monograph'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['blend'].id).toBe('blend'); expect(vert['monograph'].id).toBe('monograph'); expect(edges[0].start).toBe('blend'); expect(edges[0].end).toBe('monograph'); }); it('should allow default in the node name/id', function () { const res = flow.parser.parse('graph TD\ndefault --> monograph'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['default'].id).toBe('default'); expect(vert['monograph'].id).toBe('monograph'); expect(edges[0].start).toBe('default'); expect(edges[0].end).toBe('monograph'); }); describe('special characters should be be handled.', function () { const charTest = function (char, result) { const res = flow.parser.parse('graph TD;A(' + char + ')-->B;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(vert['A'].id).toBe('A'); expect(vert['B'].id).toBe('B'); if (result) { expect(vert['A'].text).toBe(result); } else { expect(vert['A'].text).toBe(char); } flow.parser.yy.clear(); }; it("should be able to parse a '.'", function () { charTest('.'); charTest('Start 103a.a1'); }); // it('should be able to parse text containing \'_\'', function () { // charTest('_') // }) it("should be able to parse a ':'", function () { charTest(':'); }); it("should be able to parse a ','", function () { charTest(','); }); it("should be able to parse text containing '-'", function () { charTest('a-b'); }); it("should be able to parse a '+'", function () { charTest('+'); }); it("should be able to parse a '*'", function () { charTest('*'); }); it("should be able to parse a '<'", function () { charTest('<', '<'); }); // it("should be able to parse a '>'", function() { // charTest('>', '>'); // }); // it("should be able to parse a '='", function() { // charTest('=', '='); // }); it("should be able to parse a '&'", function () { charTest('&'); }); }); it('should be possible to use direction in node ids', function () { let statement = ''; statement = statement + 'graph TD;' + '\n'; statement = statement + ' node1TB\n'; const res = flow.parser.parse(statement); const vertices = flow.parser.yy.getVertices(); const classes = flow.parser.yy.getClasses(); expect(vertices['node1TB'].id).toBe('node1TB'); }); it('should be possible to use direction in node ids', function () { let statement = ''; statement = statement + 'graph TD;A--x|text including URL space|B;'; const res = flow.parser.parse(statement); const vertices = flow.parser.yy.getVertices(); const classes = flow.parser.yy.getClasses(); expect(vertices['A'].id).toBe('A'); }); it('should be possible to use numbers as labels', function () { let statement = ''; statement = statement + 'graph TB;subgraph "number as labels";1;end;'; const res = flow.parser.parse(statement); const vertices = flow.parser.yy.getVertices(); const classes = flow.parser.yy.getClasses(); expect(vertices['1'].id).toBe('1'); }); it('should add accTitle and accDescr to flow chart', function () { const flowChart = `graph LR accTitle: Big decisions accDescr: Flow chart of the decision making process A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] C -->|Two| E[Result 2] `; flow.parser.parse(flowChart); expect(flow.parser.yy.getAccTitle()).toBe('Big decisions'); expect(flow.parser.yy.getAccDescription()).toBe('Flow chart of the decision making process'); }); it('should add accTitle and a multi line accDescr to flow chart', function () { const flowChart = `graph LR accTitle: Big decisions accDescr { Flow chart of the decision making process with a second line } A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] C -->|Two| E[Result 2] `; flow.parser.parse(flowChart); expect(flow.parser.yy.getAccTitle()).toBe('Big decisions'); expect(flow.parser.yy.getAccDescription()).toBe( `Flow chart of the decision making process with a second line` ); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js000066400000000000000000000243341433273745700320350ustar00rootroot00000000000000import flowDb from '../flowDb'; import flow from './flow'; import filter from 'lodash/filter'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('when parsing subgraphs', function () { beforeEach(function () { flow.parser.yy = flowDb; flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); it('should handle subgraph with tab indentation', function () { const res = flow.parser.parse('graph TB\nsubgraph One\n\ta1-->a2\nend'); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.nodes.length).toBe(2); expect(subgraph.nodes[0]).toBe('a2'); expect(subgraph.nodes[1]).toBe('a1'); expect(subgraph.title).toBe('One'); expect(subgraph.id).toBe('One'); }); it('should handle subgraph with chaining nodes indentation', function () { const res = flow.parser.parse('graph TB\nsubgraph One\n\ta1-->a2-->a3\nend'); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.nodes.length).toBe(3); expect(subgraph.nodes[0]).toBe('a3'); expect(subgraph.nodes[1]).toBe('a2'); expect(subgraph.nodes[2]).toBe('a1'); expect(subgraph.title).toBe('One'); expect(subgraph.id).toBe('One'); }); it('should handle subgraph with multiple words in title', function () { const res = flow.parser.parse('graph TB\nsubgraph "Some Title"\n\ta1-->a2\nend'); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.nodes.length).toBe(2); expect(subgraph.nodes[0]).toBe('a2'); expect(subgraph.nodes[1]).toBe('a1'); expect(subgraph.title).toBe('Some Title'); expect(subgraph.id).toBe('subGraph0'); }); it('should handle subgraph with id and title notation', function () { const res = flow.parser.parse('graph TB\nsubgraph some-id[Some Title]\n\ta1-->a2\nend'); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.nodes.length).toBe(2); expect(subgraph.nodes[0]).toBe('a2'); expect(subgraph.nodes[1]).toBe('a1'); expect(subgraph.title).toBe('Some Title'); expect(subgraph.id).toBe('some-id'); }); it.skip('should handle subgraph without id and space in title', function () { const res = flow.parser.parse('graph TB\nsubgraph Some Title\n\ta1-->a2\nend'); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.nodes.length).toBe(2); expect(subgraph.nodes[0]).toBe('a1'); expect(subgraph.nodes[1]).toBe('a2'); expect(subgraph.title).toBe('Some Title'); expect(subgraph.id).toBe('some-id'); }); it('should handle subgraph id starting with a number', function () { const res = flow.parser.parse(`graph TD A[Christmas] -->|Get money| B(Go shopping) subgraph 1test A end`); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.nodes.length).toBe(1); expect(subgraph.nodes[0]).toBe('A'); expect(subgraph.id).toBe('1test'); }); it('should handle subgraphs1', function () { const res = flow.parser.parse('graph TD;A-->B;subgraph myTitle;c-->d;end;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); }); it('should handle subgraphs with title in quotes', function () { const res = flow.parser.parse('graph TD;A-->B;subgraph "title in quotes";c-->d;end;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.title).toBe('title in quotes'); expect(edges[0].type).toBe('arrow_point'); }); it('should handle subgraphs in old style that was broken', function () { const res = flow.parser.parse('graph TD;A-->B;subgraph old style that is broken;c-->d;end;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.title).toBe('old style that is broken'); expect(edges[0].type).toBe('arrow_point'); }); it('should handle subgraphs with dashes in the title', function () { const res = flow.parser.parse('graph TD;A-->B;subgraph a-b-c;c-->d;end;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.title).toBe('a-b-c'); expect(edges[0].type).toBe('arrow_point'); }); it('should handle subgraphs with id and title in brackets', function () { const res = flow.parser.parse('graph TD;A-->B;subgraph uid1[text of doom];c-->d;end;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.title).toBe('text of doom'); expect(subgraph.id).toBe('uid1'); expect(edges[0].type).toBe('arrow_point'); }); it('should handle subgraphs with id and title in brackets and quotes', function () { const res = flow.parser.parse('graph TD;A-->B;subgraph uid2["text of doom"];c-->d;end;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.title).toBe('text of doom'); expect(subgraph.id).toBe('uid2'); expect(edges[0].type).toBe('arrow_point'); }); it('should handle subgraphs with id and title in brackets without spaces', function () { const res = flow.parser.parse('graph TD;A-->B;subgraph uid2[textofdoom];c-->d;end;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(1); const subgraph = subgraphs[0]; expect(subgraph.title).toBe('textofdoom'); expect(subgraph.id).toBe('uid2'); expect(edges[0].type).toBe('arrow_point'); }); it('should handle subgraphs2', function () { const res = flow.parser.parse('graph TD\nA-->B\nsubgraph myTitle\n\n c-->d \nend\n'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); }); it('should handle subgraphs3', function () { const res = flow.parser.parse('graph TD\nA-->B\nsubgraph myTitle \n\n c-->d \nend\n'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); }); it('should handle nested subgraphs', function () { const str = 'graph TD\n' + 'A-->B\n' + 'subgraph myTitle\n\n' + ' c-->d \n\n' + ' subgraph inner\n\n e-->f \n end \n\n' + ' subgraph inner\n\n h-->i \n end \n\n' + 'end\n'; const res = flow.parser.parse(str); }); it('should handle subgraphs4', function () { const res = flow.parser.parse('graph TD\nA-->B\nsubgraph myTitle\nc-->d\nend;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); }); it('should handle subgraphs5', function () { const res = flow.parser.parse('graph TD\nA-->B\nsubgraph myTitle\nc-- text -->d\nd-->e\n end;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); }); it('should handle subgraphs with multi node statements in it', function () { const res = flow.parser.parse('graph TD\nA-->B\nsubgraph myTitle\na & b --> c & e\n end;'); const vert = flow.parser.yy.getVertices(); const edges = flow.parser.yy.getEdges(); expect(edges[0].type).toBe('arrow_point'); }); it('should handle nested subgraphs 1', function () { const res = flow.parser.parse(`flowchart TB subgraph A b-->B a end a-->c subgraph B c end`); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(2); const subgraphA = filter(subgraphs, (o) => o.id === 'A')[0]; const subgraphB = filter(subgraphs, (o) => o.id === 'B')[0]; expect(subgraphB.nodes[0]).toBe('c'); expect(subgraphA.nodes).toContain('B'); expect(subgraphA.nodes).toContain('b'); expect(subgraphA.nodes).toContain('a'); expect(subgraphA.nodes).not.toContain('c'); }); it('should handle nested subgraphs 2', function () { const res = flow.parser.parse(`flowchart TB b-->B a-->c subgraph B c end subgraph A a b B end`); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(2); const subgraphA = filter(subgraphs, (o) => o.id === 'A')[0]; const subgraphB = filter(subgraphs, (o) => o.id === 'B')[0]; expect(subgraphB.nodes[0]).toBe('c'); expect(subgraphA.nodes).toContain('B'); expect(subgraphA.nodes).toContain('b'); expect(subgraphA.nodes).toContain('a'); expect(subgraphA.nodes).not.toContain('c'); }); it('should handle nested subgraphs 3', function () { const res = flow.parser.parse(`flowchart TB subgraph B c end a-->c subgraph A b-->B a end`); const subgraphs = flow.parser.yy.getSubGraphs(); expect(subgraphs.length).toBe(2); const subgraphA = filter(subgraphs, (o) => o.id === 'A')[0]; const subgraphB = filter(subgraphs, (o) => o.id === 'B')[0]; expect(subgraphB.nodes[0]).toBe('c'); expect(subgraphA.nodes).toContain('B'); expect(subgraphA.nodes).toContain('b'); expect(subgraphA.nodes).toContain('a'); expect(subgraphA.nodes).not.toContain('c'); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/flowchart/styles.ts000066400000000000000000000042101433273745700273210ustar00rootroot00000000000000/** Returns the styles given options */ export interface FlowChartStyleOptions { arrowheadColor: string; border2: string; clusterBkg: string; clusterBorder: string; edgeLabelBackground: string; fontFamily: string; lineColor: string; mainBkg: string; nodeBorder: string; nodeTextColor: string; tertiaryColor: string; textColor: string; titleColor: string; } const getStyles = (options: FlowChartStyleOptions) => `.label { font-family: ${options.fontFamily}; color: ${options.nodeTextColor || options.textColor}; } .cluster-label text { fill: ${options.titleColor}; } .cluster-label span { color: ${options.titleColor}; } .label text,span { fill: ${options.nodeTextColor || options.textColor}; color: ${options.nodeTextColor || options.textColor}; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; stroke-width: 1px; } .node .label { text-align: center; } .node.clickable { cursor: pointer; } .arrowheadPath { fill: ${options.arrowheadColor}; } .edgePath .path { stroke: ${options.lineColor}; stroke-width: 2.0px; } .flowchart-link { stroke: ${options.lineColor}; fill: none; } .edgeLabel { background-color: ${options.edgeLabelBackground}; rect { opacity: 0.5; background-color: ${options.edgeLabelBackground}; fill: ${options.edgeLabelBackground}; } text-align: center; } .cluster rect { fill: ${options.clusterBkg}; stroke: ${options.clusterBorder}; stroke-width: 1px; } .cluster text { fill: ${options.titleColor}; } .cluster span { color: ${options.titleColor}; } /* .cluster div { color: ${options.titleColor}; } */ div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: ${options.fontFamily}; font-size: 12px; background: ${options.tertiaryColor}; border: 1px solid ${options.border2}; border-radius: 2px; pointer-events: none; z-index: 100; } `; export default getStyles; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/gantt/000077500000000000000000000000001433273745700245555ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/gantt/ganttDb.js000066400000000000000000000403421433273745700265010ustar00rootroot00000000000000import moment from 'moment-mini'; import { sanitizeUrl } from '@braintree/sanitize-url'; import { log } from '../../logger'; import * as configApi from '../../config'; import utils from '../../utils'; import mermaidAPI from '../../mermaidAPI'; import { setAccTitle, getAccTitle, getAccDescription, setAccDescription, clear as commonClear, setDiagramTitle, getDiagramTitle, } from '../../commonDb'; let dateFormat = ''; let axisFormat = ''; let todayMarker = ''; let includes = []; let excludes = []; let links = {}; let sections = []; let tasks = []; let currentSection = ''; const tags = ['active', 'done', 'crit', 'milestone']; let funs = []; let inclusiveEndDates = false; let topAxis = false; // The serial order of the task in the script let lastOrder = 0; export const parseDirective = function (statement, context, type) { mermaidAPI.parseDirective(this, statement, context, type); }; export const clear = function () { sections = []; tasks = []; currentSection = ''; funs = []; taskCnt = 0; lastTask = undefined; lastTaskID = undefined; rawTasks = []; dateFormat = ''; axisFormat = ''; todayMarker = ''; includes = []; excludes = []; inclusiveEndDates = false; topAxis = false; lastOrder = 0; links = {}; commonClear(); }; export const setAxisFormat = function (txt) { axisFormat = txt; }; export const getAxisFormat = function () { return axisFormat; }; export const setTodayMarker = function (txt) { todayMarker = txt; }; export const getTodayMarker = function () { return todayMarker; }; export const setDateFormat = function (txt) { dateFormat = txt; }; export const enableInclusiveEndDates = function () { inclusiveEndDates = true; }; export const endDatesAreInclusive = function () { return inclusiveEndDates; }; export const enableTopAxis = function () { topAxis = true; }; export const topAxisEnabled = function () { return topAxis; }; export const getDateFormat = function () { return dateFormat; }; export const setIncludes = function (txt) { includes = txt.toLowerCase().split(/[\s,]+/); }; export const getIncludes = function () { return includes; }; export const setExcludes = function (txt) { excludes = txt.toLowerCase().split(/[\s,]+/); }; export const getExcludes = function () { return excludes; }; export const getLinks = function () { return links; }; export const addSection = function (txt) { currentSection = txt; sections.push(txt); }; export const getSections = function () { return sections; }; export const getTasks = function () { let allItemsPricessed = compileTasks(); const maxDepth = 10; let iterationCount = 0; while (!allItemsPricessed && iterationCount < maxDepth) { allItemsPricessed = compileTasks(); iterationCount++; } tasks = rawTasks; return tasks; }; export const isInvalidDate = function (date, dateFormat, excludes, includes) { if (includes.indexOf(date.format(dateFormat.trim())) >= 0) { return false; } if (date.isoWeekday() >= 6 && excludes.indexOf('weekends') >= 0) { return true; } if (excludes.indexOf(date.format('dddd').toLowerCase()) >= 0) { return true; } return excludes.indexOf(date.format(dateFormat.trim())) >= 0; }; const checkTaskDates = function (task, dateFormat, excludes, includes) { if (!excludes.length || task.manualEndTime) return; let startTime = moment(task.startTime, dateFormat, true); startTime.add(1, 'd'); let endTime = moment(task.endTime, dateFormat, true); let renderEndTime = fixTaskDates(startTime, endTime, dateFormat, excludes, includes); task.endTime = endTime.toDate(); task.renderEndTime = renderEndTime; }; const fixTaskDates = function (startTime, endTime, dateFormat, excludes, includes) { let invalid = false; let renderEndTime = null; while (startTime <= endTime) { if (!invalid) { renderEndTime = endTime.toDate(); } invalid = isInvalidDate(startTime, dateFormat, excludes, includes); if (invalid) { endTime.add(1, 'd'); } startTime.add(1, 'd'); } return renderEndTime; }; const getStartDate = function (prevTime, dateFormat, str) { str = str.trim(); // Test for after const re = /^after\s+([\d\w- ]+)/; const afterStatement = re.exec(str.trim()); if (afterStatement !== null) { // check all after ids and take the latest let latestEndingTask = null; afterStatement[1].split(' ').forEach(function (id) { let task = findTaskById(id); if (typeof task !== 'undefined') { if (!latestEndingTask) { latestEndingTask = task; } else { if (task.endTime > latestEndingTask.endTime) { latestEndingTask = task; } } } }); if (!latestEndingTask) { const dt = new Date(); dt.setHours(0, 0, 0, 0); return dt; } else { return latestEndingTask.endTime; } } // Check for actual date set let mDate = moment(str, dateFormat.trim(), true); if (mDate.isValid()) { return mDate.toDate(); } else { log.debug('Invalid date:' + str); log.debug('With date format:' + dateFormat.trim()); const d = new Date(str); if (typeof d === 'undefined' || isNaN(d.getTime())) { throw new Error('Invalid date:' + str); } return d; } }; /** * Parse a string as a moment duration. * * The string have to be compound by a value and a shorthand duration unit. For example `5d` * representes 5 days. * * Shorthand unit supported are: * * - `y` for years * - `M` for months * - `w` for weeks * - `d` for days * - `h` for hours * - `s` for seconds * - `ms` for milliseconds * * @param {string} str - A string representing the duration. * @returns {moment.Duration} A moment duration, including an invalid moment for invalid input * string. */ const parseDuration = function (str) { const statement = /^(\d+(?:\.\d+)?)([yMwdhms]|ms)$/.exec(str.trim()); if (statement !== null) { return moment.duration(Number.parseFloat(statement[1]), statement[2]); } return moment.duration.invalid(); }; const getEndDate = function (prevTime, dateFormat, str, inclusive) { inclusive = inclusive || false; str = str.trim(); // Check for actual date let mDate = moment(str, dateFormat.trim(), true); if (mDate.isValid()) { if (inclusive) { mDate.add(1, 'd'); } return mDate.toDate(); } const endTime = moment(prevTime); const duration = parseDuration(str); if (duration.isValid()) { endTime.add(duration); } return endTime.toDate(); }; let taskCnt = 0; const parseId = function (idStr) { if (typeof idStr === 'undefined') { taskCnt = taskCnt + 1; return 'task' + taskCnt; } return idStr; }; // id, startDate, endDate // id, startDate, length // id, after x, endDate // id, after x, length // startDate, endDate // startDate, length // after x, endDate // after x, length // endDate // length const compileData = function (prevTask, dataStr) { let ds; if (dataStr.substr(0, 1) === ':') { ds = dataStr.substr(1, dataStr.length); } else { ds = dataStr; } const data = ds.split(','); const task = {}; // Get tags like active, done, crit and milestone getTaskTags(data, task, tags); for (let i = 0; i < data.length; i++) { data[i] = data[i].trim(); } let endTimeData = ''; switch (data.length) { case 1: task.id = parseId(); task.startTime = prevTask.endTime; endTimeData = data[0]; break; case 2: task.id = parseId(); task.startTime = getStartDate(undefined, dateFormat, data[0]); endTimeData = data[1]; break; case 3: task.id = parseId(data[0]); task.startTime = getStartDate(undefined, dateFormat, data[1]); endTimeData = data[2]; break; default: } if (endTimeData) { task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates); task.manualEndTime = moment(endTimeData, 'YYYY-MM-DD', true).isValid(); checkTaskDates(task, dateFormat, excludes, includes); } return task; }; const parseData = function (prevTaskId, dataStr) { let ds; if (dataStr.substr(0, 1) === ':') { ds = dataStr.substr(1, dataStr.length); } else { ds = dataStr; } const data = ds.split(','); const task = {}; // Get tags like active, done, crit and milestone getTaskTags(data, task, tags); for (let i = 0; i < data.length; i++) { data[i] = data[i].trim(); } switch (data.length) { case 1: task.id = parseId(); task.startTime = { type: 'prevTaskEnd', id: prevTaskId, }; task.endTime = { data: data[0], }; break; case 2: task.id = parseId(); task.startTime = { type: 'getStartDate', startData: data[0], }; task.endTime = { data: data[1], }; break; case 3: task.id = parseId(data[0]); task.startTime = { type: 'getStartDate', startData: data[1], }; task.endTime = { data: data[2], }; break; default: } return task; }; let lastTask; let lastTaskID; let rawTasks = []; const taskDb = {}; export const addTask = function (descr, data) { const rawTask = { section: currentSection, type: currentSection, processed: false, manualEndTime: false, renderEndTime: null, raw: { data: data }, task: descr, classes: [], }; const taskInfo = parseData(lastTaskID, data); rawTask.raw.startTime = taskInfo.startTime; rawTask.raw.endTime = taskInfo.endTime; rawTask.id = taskInfo.id; rawTask.prevTaskId = lastTaskID; rawTask.active = taskInfo.active; rawTask.done = taskInfo.done; rawTask.crit = taskInfo.crit; rawTask.milestone = taskInfo.milestone; rawTask.order = lastOrder; lastOrder++; const pos = rawTasks.push(rawTask); lastTaskID = rawTask.id; // Store cross ref taskDb[rawTask.id] = pos - 1; }; export const findTaskById = function (id) { const pos = taskDb[id]; return rawTasks[pos]; }; export const addTaskOrg = function (descr, data) { const newTask = { section: currentSection, type: currentSection, description: descr, task: descr, classes: [], }; const taskInfo = compileData(lastTask, data); newTask.startTime = taskInfo.startTime; newTask.endTime = taskInfo.endTime; newTask.id = taskInfo.id; newTask.active = taskInfo.active; newTask.done = taskInfo.done; newTask.crit = taskInfo.crit; newTask.milestone = taskInfo.milestone; lastTask = newTask; tasks.push(newTask); }; const compileTasks = function () { const compileTask = function (pos) { const task = rawTasks[pos]; let startTime = ''; switch (rawTasks[pos].raw.startTime.type) { case 'prevTaskEnd': { const prevTask = findTaskById(task.prevTaskId); task.startTime = prevTask.endTime; break; } case 'getStartDate': startTime = getStartDate(undefined, dateFormat, rawTasks[pos].raw.startTime.startData); if (startTime) { rawTasks[pos].startTime = startTime; } break; } if (rawTasks[pos].startTime) { rawTasks[pos].endTime = getEndDate( rawTasks[pos].startTime, dateFormat, rawTasks[pos].raw.endTime.data, inclusiveEndDates ); if (rawTasks[pos].endTime) { rawTasks[pos].processed = true; rawTasks[pos].manualEndTime = moment( rawTasks[pos].raw.endTime.data, 'YYYY-MM-DD', true ).isValid(); checkTaskDates(rawTasks[pos], dateFormat, excludes, includes); } } return rawTasks[pos].processed; }; let allProcessed = true; for (let i = 0; i < rawTasks.length; i++) { compileTask(i); allProcessed = allProcessed && rawTasks[i].processed; } return allProcessed; }; /** * Called by parser when a link is found. Adds the URL to the vertex data. * * @param ids Comma separated list of ids * @param _linkStr URL to create a link for */ export const setLink = function (ids, _linkStr) { let linkStr = _linkStr; if (configApi.getConfig().securityLevel !== 'loose') { linkStr = sanitizeUrl(_linkStr); } ids.split(',').forEach(function (id) { let rawTask = findTaskById(id); if (typeof rawTask !== 'undefined') { pushFun(id, () => { window.open(linkStr, '_self'); }); links[id] = linkStr; } }); setClass(ids, 'clickable'); }; /** * Called by parser when a special node is found, e.g. a clickable element. * * @param ids Comma separated list of ids * @param className Class to add */ export const setClass = function (ids, className) { ids.split(',').forEach(function (id) { let rawTask = findTaskById(id); if (typeof rawTask !== 'undefined') { rawTask.classes.push(className); } }); }; const setClickFun = function (id, functionName, functionArgs) { if (configApi.getConfig().securityLevel !== 'loose') { return; } if (typeof functionName === 'undefined') { return; } let argList = []; if (typeof functionArgs === 'string') { /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */ argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); for (let i = 0; i < argList.length; i++) { let item = argList[i].trim(); /* Removes all double quotes at the start and end of an argument */ /* This preserves all starting and ending whitespace inside */ if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { item = item.substr(1, item.length - 2); } argList[i] = item; } } /* if no arguments passed into callback, default to passing in id */ if (argList.length === 0) { argList.push(id); } let rawTask = findTaskById(id); if (typeof rawTask !== 'undefined') { pushFun(id, () => { utils.runFunc(functionName, ...argList); }); } }; /** * The callbackFunction is executed in a click event bound to the task with the specified id or the * task's assigned text * * @param id The task's id * @param callbackFunction A function to be executed when clicked on the task or the task's text */ const pushFun = function (id, callbackFunction) { funs.push(function () { // const elem = d3.select(element).select(`[id="${id}"]`) const elem = document.querySelector(`[id="${id}"]`); if (elem !== null) { elem.addEventListener('click', function () { callbackFunction(); }); } }); funs.push(function () { // const elem = d3.select(element).select(`[id="${id}-text"]`) const elem = document.querySelector(`[id="${id}-text"]`); if (elem !== null) { elem.addEventListener('click', function () { callbackFunction(); }); } }); }; /** * Called by parser when a click definition is found. Registers an event handler. * * @param ids Comma separated list of ids * @param functionName Function to be called on click * @param functionArgs Function args the function should be called with */ export const setClickEvent = function (ids, functionName, functionArgs) { ids.split(',').forEach(function (id) { setClickFun(id, functionName, functionArgs); }); setClass(ids, 'clickable'); }; /** * Binds all functions previously added to fun (specified through click) to the element * * @param element */ export const bindFunctions = function (element) { funs.forEach(function (fun) { fun(element); }); }; export default { parseDirective, getConfig: () => configApi.getConfig().gantt, clear, setDateFormat, getDateFormat, enableInclusiveEndDates, endDatesAreInclusive, enableTopAxis, topAxisEnabled, setAxisFormat, getAxisFormat, setTodayMarker, getTodayMarker, setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle, setAccDescription, getAccDescription, addSection, getSections, getTasks, addTask, findTaskById, addTaskOrg, setIncludes, getIncludes, setExcludes, getExcludes, setClickEvent, setLink, getLinks, bindFunctions, parseDuration, isInvalidDate, }; /** * @param data * @param task * @param tags */ function getTaskTags(data, task, tags) { let matchFound = true; while (matchFound) { matchFound = false; tags.forEach(function (t) { const pattern = '^\\s*' + t + '\\s*$'; const regex = new RegExp(pattern); if (data[0].match(regex)) { task[t] = true; data.shift(1); matchFound = true; } }); } } mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts000066400000000000000000000474461433273745700274600ustar00rootroot00000000000000// @ts-nocheck TODO: Fix TS import moment from 'moment-mini'; import ganttDb from './ganttDb'; import { convert } from '../../tests/util'; describe('when using the ganttDb', function () { beforeEach(function () { ganttDb.clear(); }); describe('when using duration', function () { it.each([{ str: '1d', expected: moment.duration(1, 'd') }])( 'should %s resulting in $o duration', ({ str, expected }) => { expect(ganttDb.parseDuration(str)).toEqual(expected); } ); it.each( convert` str | expected ${'1d'} | ${moment.duration(1, 'd')} ${'2w'} | ${moment.duration(2, 'w')} ${'1ms'} | ${moment.duration(1, 'ms')} ${'0.1s'} | ${moment.duration(100, 'ms')} ${'1f'} | ${moment.duration.invalid()} ` )('should $str resulting in $expected duration', ({ str, expected }) => { expect(ganttDb.parseDuration(str)).toEqual(expected); }); }); describe('when calling the clear function', function () { beforeEach(function () { ganttDb.setDateFormat('YYYY-MM-DD'); ganttDb.enableInclusiveEndDates(); ganttDb.setTodayMarker('off'); ganttDb.setExcludes('weekends 2019-02-06,friday'); ganttDb.addSection('weekends skip test'); ganttDb.addTask('test1', 'id1,2019-02-01,1d'); ganttDb.addTask('test2', 'id2,after id1,2d'); ganttDb.clear(); }); it.each(convert` fn | expected ${'getTasks'} | ${[]} ${'getAccTitle'} | ${''} ${'getAccDescription'} | ${''} ${'getDateFormat'} | ${''} ${'getAxisFormat'} | ${''} ${'getTodayMarker'} | ${''} ${'getExcludes'} | ${[]} ${'getSections'} | ${[]} ${'endDatesAreInclusive'} | ${false} `)('should clear $fn', ({ fn, expected }) => { expect(ganttDb[fn]()).toEqual(expected); }); }); // prettier-ignore it.each(convert` testName | section | taskName | taskData | expStartDate | expEndDate | expId | expTask ${'should handle fixed dates'} | ${'testa1'} | ${'test1'} | ${'id1,2013-01-01,2013-01-12'} | ${new Date(2013, 0, 1)} | ${new Date(2013, 0, 12)} | ${'id1'} | ${'test1'} ${'should handle duration (days) instead of fixed date to determine end date'} | ${'testa1'} | ${'test1'} | ${'id1,2013-01-01,2d'} | ${new Date(2013, 0, 1)} | ${new Date(2013, 0, 3)} | ${'id1'} | ${'test1'} ${'should handle duration (hours) instead of fixed date to determine end date'} | ${'testa1'} | ${'test1'} | ${'id1,2013-01-01,2h'} | ${new Date(2013, 0, 1)} | ${new Date(2013, 0, 1, 2)} | ${'id1'} | ${'test1'} ${'should handle duration (minutes) instead of fixed date to determine end date'} | ${'testa1'} | ${'test1'} | ${'id1,2013-01-01,2m'} | ${new Date(2013, 0, 1)} | ${new Date(2013, 0, 1, 0, 2)} | ${'id1'} | ${'test1'} ${'should handle duration (seconds) instead of fixed date to determine end date'} | ${'testa1'} | ${'test1'} | ${'id1,2013-01-01,2s'} | ${new Date(2013, 0, 1)} | ${new Date(2013, 0, 1, 0, 0, 2)} | ${'id1'} | ${'test1'} ${'should handle duration (weeks) instead of fixed date to determine end date'} | ${'testa1'} | ${'test1'} | ${'id1,2013-01-01,2w'} | ${new Date(2013, 0, 1)} | ${new Date(2013, 0, 15)} | ${'id1'} | ${'test1'} ${'should handle fixed dates without id'} | ${'testa1'} | ${'test1'} | ${'2013-01-01,2013-01-12'} | ${new Date(2013, 0, 1)} | ${new Date(2013, 0, 12)} | ${'task1'} | ${'test1'} ${'should handle duration instead of a fixed date to determine end date without id'} | ${'testa1'} | ${'test1'} | ${'2013-01-01,4d'} | ${new Date(2013, 0, 1)} | ${new Date(2013, 0, 5)} | ${'task1'} | ${'test1'} `)('$testName', ({ section, taskName, taskData, expStartDate, expEndDate, expId, expTask }) => { ganttDb.setDateFormat('YYYY-MM-DD'); ganttDb.addSection(section); ganttDb.addTask(taskName, taskData); const tasks = ganttDb.getTasks(); expect(tasks[0].startTime).toEqual(expStartDate); expect(tasks[0].endTime).toEqual(expEndDate); expect(tasks[0].id).toEqual(expId); expect(tasks[0].task).toEqual(expTask); }); // prettier-ignore it.each(convert` section | taskName1 | taskName2 | taskData1 | taskData2 | expStartDate2 | expEndDate2 | expId2 | expTask2 ${'testa1'} | ${'test1'} | ${'test2'} | ${'id1,2013-01-01,2w'} | ${'id2,after id1,1d'} | ${new Date(2013, 0, 15)} | ${undefined} | ${'id2'} | ${'test2'} ${'testa1'} | ${'test1'} | ${'test2'} | ${'id1,2013-01-01,2w'} | ${'id2,after id3,1d'} | ${new Date(new Date().setHours(0, 0, 0, 0))} | ${undefined} | ${'id2'} | ${'test2'} ${'testa1'} | ${'test1'} | ${'test2'} | ${'id1,2013-01-01,2w'} | ${'after id1,1d'} | ${new Date(2013, 0, 15)} | ${undefined} | ${'task1'} | ${'test2'} ${'testa1'} | ${'test1'} | ${'test2'} | ${'id1,2013-01-01,2w'} | ${'2013-01-26'} | ${new Date(2013, 0, 15)} | ${new Date(2013, 0, 26)} | ${'task1'} | ${'test2'} ${'testa1'} | ${'test1'} | ${'test2'} | ${'id1,2013-01-01,2w'} | ${'2d'} | ${new Date(2013, 0, 15)} | ${new Date(2013, 0, 17)} | ${'task1'} | ${'test2'} `)( '$testName', ({ section, taskName1, taskName2, taskData1, taskData2, expStartDate2, expEndDate2, expId2, expTask2, }) => { ganttDb.setDateFormat('YYYY-MM-DD'); ganttDb.addSection(section); ganttDb.addTask(taskName1, taskData1); ganttDb.addTask(taskName2, taskData2); const tasks = ganttDb.getTasks(); expect(tasks[1].startTime).toEqual(expStartDate2); if (!expEndDate2 === undefined) { expect(tasks[1].endTime).toEqual(expEndDate2); } expect(tasks[1].id).toEqual(expId2); expect(tasks[1].task).toEqual(expTask2); } ); it('should handle milliseconds', function () { ganttDb.setDateFormat('x'); ganttDb.addSection('testa1'); ganttDb.addTask('test1', 'id1,0,20ms'); ganttDb.addTask('test2', 'id2,after id1,5ms'); ganttDb.addSection('testa2'); ganttDb.addTask('test3', 'id3,20,10ms'); ganttDb.addTask('test4', 'id4,after id3,0.005s'); const tasks = ganttDb.getTasks(); expect(tasks[0].startTime.toISOString()).toEqual('1970-01-01T00:00:00.000Z'); expect(tasks[0].endTime.toISOString()).toEqual('1970-01-01T00:00:00.020Z'); expect(tasks[1].startTime.toISOString()).toEqual('1970-01-01T00:00:00.020Z'); expect(tasks[1].endTime.toISOString()).toEqual('1970-01-01T00:00:00.025Z'); expect(tasks[2].startTime.toISOString()).toEqual('1970-01-01T00:00:00.020Z'); expect(tasks[2].endTime.toISOString()).toEqual('1970-01-01T00:00:00.030Z'); expect(tasks[3].startTime.toISOString()).toEqual('1970-01-01T00:00:00.030Z'); expect(tasks[3].endTime.toISOString()).toEqual('1970-01-01T00:00:00.035Z'); }); it('should handle relative start date based on id regardless of sections', function () { ganttDb.setDateFormat('YYYY-MM-DD'); ganttDb.addSection('testa1'); ganttDb.addTask('test1', 'id1,2013-01-01,2w'); ganttDb.addTask('test2', 'id2,after id3,1d'); ganttDb.addSection('testa2'); ganttDb.addTask('test3', 'id3,after id1,2d'); const tasks = ganttDb.getTasks(); expect(tasks[1].startTime).toEqual(new Date(2013, 0, 17)); expect(tasks[1].endTime).toEqual(new Date(2013, 0, 18)); expect(tasks[1].id).toEqual('id2'); expect(tasks[1].task).toEqual('test2'); expect(tasks[2].id).toEqual('id3'); expect(tasks[2].task).toEqual('test3'); expect(tasks[2].startTime).toEqual(new Date(2013, 0, 15)); expect(tasks[2].endTime).toEqual(new Date(2013, 0, 17)); }); it('should ignore weekends', function () { ganttDb.setDateFormat('YYYY-MM-DD'); ganttDb.setExcludes('weekends 2019-02-06,friday'); ganttDb.addSection('weekends skip test'); ganttDb.addTask('test1', 'id1,2019-02-01,1d'); ganttDb.addTask('test2', 'id2,after id1,2d'); ganttDb.addTask('test3', 'id3,after id2,7d'); ganttDb.addTask('test4', 'id4,2019-02-01,2019-02-20'); // Fixed endTime ganttDb.addTask('test5', 'id5,after id4,1d'); ganttDb.addSection('full ending taks on last day'); ganttDb.addTask('test6', 'id6,2019-02-13,2d'); ganttDb.addTask('test7', 'id7,after id6,1d'); const tasks = ganttDb.getTasks(); expect(tasks[0].startTime).toEqual(moment('2019-02-01', 'YYYY-MM-DD').toDate()); expect(tasks[0].endTime).toEqual(moment('2019-02-04', 'YYYY-MM-DD').toDate()); expect(tasks[0].renderEndTime).toEqual(moment('2019-02-02', 'YYYY-MM-DD').toDate()); expect(tasks[0].id).toEqual('id1'); expect(tasks[0].task).toEqual('test1'); expect(tasks[1].startTime).toEqual(moment('2019-02-04', 'YYYY-MM-DD').toDate()); expect(tasks[1].endTime).toEqual(moment('2019-02-07', 'YYYY-MM-DD').toDate()); expect(tasks[1].renderEndTime).toEqual(moment('2019-02-06', 'YYYY-MM-DD').toDate()); expect(tasks[1].id).toEqual('id2'); expect(tasks[1].task).toEqual('test2'); expect(tasks[2].startTime).toEqual(moment('2019-02-07', 'YYYY-MM-DD').toDate()); expect(tasks[2].endTime).toEqual(moment('2019-02-20', 'YYYY-MM-DD').toDate()); expect(tasks[2].renderEndTime).toEqual(moment('2019-02-20', 'YYYY-MM-DD').toDate()); expect(tasks[2].id).toEqual('id3'); expect(tasks[2].task).toEqual('test3'); expect(tasks[3].startTime).toEqual(moment('2019-02-01', 'YYYY-MM-DD').toDate()); expect(tasks[3].endTime).toEqual(moment('2019-02-20', 'YYYY-MM-DD').toDate()); expect(tasks[3].renderEndTime).toBeNull(); // Fixed end expect(tasks[3].id).toEqual('id4'); expect(tasks[3].task).toEqual('test4'); expect(tasks[4].startTime).toEqual(moment('2019-02-20', 'YYYY-MM-DD').toDate()); expect(tasks[4].endTime).toEqual(moment('2019-02-21', 'YYYY-MM-DD').toDate()); expect(tasks[4].renderEndTime).toEqual(moment('2019-02-21', 'YYYY-MM-DD').toDate()); expect(tasks[4].id).toEqual('id5'); expect(tasks[4].task).toEqual('test5'); expect(tasks[5].startTime).toEqual(moment('2019-02-13', 'YYYY-MM-DD').toDate()); expect(tasks[5].endTime).toEqual(moment('2019-02-18', 'YYYY-MM-DD').toDate()); expect(tasks[5].renderEndTime).toEqual(moment('2019-02-15', 'YYYY-MM-DD').toDate()); expect(tasks[5].id).toEqual('id6'); expect(tasks[5].task).toEqual('test6'); expect(tasks[6].startTime).toEqual(moment('2019-02-18', 'YYYY-MM-DD').toDate()); expect(tasks[6].endTime).toEqual(moment('2019-02-19', 'YYYY-MM-DD').toDate()); expect(tasks[6].id).toEqual('id7'); expect(tasks[6].task).toEqual('test7'); }); it('should maintain the order in which tasks are created', function () { ganttDb.setAccTitle('Project Execution'); ganttDb.setDateFormat('YYYY-MM-DD'); ganttDb.addSection('section A section'); ganttDb.addTask('Completed task', 'done, des1, 2014-01-06,2014-01-08'); ganttDb.addTask('Active task', 'active, des2, 2014-01-09, 3d'); ganttDb.addTask('Future task', 'des3, after des2, 5d'); ganttDb.addTask('Future task2', 'des4, after des3, 5d'); ganttDb.addSection('section Critical tasks'); ganttDb.addTask('Completed task in the critical line', 'crit, done, 2014-01-06,24h'); ganttDb.addTask('Implement parser and jison', 'crit, done, after des1, 2d'); ganttDb.addTask('Create tests for parser', 'crit, active, 3d'); ganttDb.addTask('Future task in critical line', 'crit, 5d'); ganttDb.addTask('Create tests for renderer', '2d'); ganttDb.addTask('Add to mermaid', '1d'); ganttDb.addSection('section Documentation'); ganttDb.addTask('Describe gantt syntax', 'active, a1, after des1, 3d'); ganttDb.addTask('Add gantt diagram to demo page', 'after a1 , 20h'); ganttDb.addTask('Add another diagram to demo page', 'doc1, after a1 , 48h'); ganttDb.addSection('section Last section'); ganttDb.addTask('Describe gantt syntax', 'after doc1, 3d'); ganttDb.addTask('Add gantt diagram to demo page', '20h'); ganttDb.addTask('Add another diagram to demo page', '48h'); const tasks = ganttDb.getTasks(); // Section - A section expect(tasks[0].startTime).toEqual(moment('2014-01-06', 'YYYY-MM-DD').toDate()); expect(tasks[0].endTime).toEqual(moment('2014-01-08', 'YYYY-MM-DD').toDate()); expect(tasks[0].order).toEqual(0); expect(tasks[0].id).toEqual('des1'); expect(tasks[0].task).toEqual('Completed task'); expect(tasks[1].startTime).toEqual(moment('2014-01-09', 'YYYY-MM-DD').toDate()); expect(tasks[1].endTime).toEqual(moment('2014-01-12', 'YYYY-MM-DD').toDate()); expect(tasks[1].order).toEqual(1); expect(tasks[1].id).toEqual('des2'); expect(tasks[1].task).toEqual('Active task'); expect(tasks[2].startTime).toEqual(moment('2014-01-12', 'YYYY-MM-DD').toDate()); expect(tasks[2].endTime).toEqual(moment('2014-01-17', 'YYYY-MM-DD').toDate()); expect(tasks[2].order).toEqual(2); expect(tasks[2].id).toEqual('des3'); expect(tasks[2].task).toEqual('Future task'); expect(tasks[3].startTime).toEqual(moment('2014-01-17', 'YYYY-MM-DD').toDate()); expect(tasks[3].endTime).toEqual(moment('2014-01-22', 'YYYY-MM-DD').toDate()); expect(tasks[3].order).toEqual(3); expect(tasks[3].id).toEqual('des4'); expect(tasks[3].task).toEqual('Future task2'); // Section - Critical tasks expect(tasks[4].startTime).toEqual(moment('2014-01-06', 'YYYY-MM-DD').toDate()); expect(tasks[4].endTime).toEqual(moment('2014-01-07', 'YYYY-MM-DD').toDate()); expect(tasks[4].order).toEqual(4); expect(tasks[4].id).toEqual('task1'); expect(tasks[4].task).toEqual('Completed task in the critical line'); expect(tasks[5].startTime).toEqual(moment('2014-01-08', 'YYYY-MM-DD').toDate()); expect(tasks[5].endTime).toEqual(moment('2014-01-10', 'YYYY-MM-DD').toDate()); expect(tasks[5].order).toEqual(5); expect(tasks[5].id).toEqual('task2'); expect(tasks[5].task).toEqual('Implement parser and jison'); expect(tasks[6].startTime).toEqual(moment('2014-01-10', 'YYYY-MM-DD').toDate()); expect(tasks[6].endTime).toEqual(moment('2014-01-13', 'YYYY-MM-DD').toDate()); expect(tasks[6].order).toEqual(6); expect(tasks[6].id).toEqual('task3'); expect(tasks[6].task).toEqual('Create tests for parser'); expect(tasks[7].startTime).toEqual(moment('2014-01-13', 'YYYY-MM-DD').toDate()); expect(tasks[7].endTime).toEqual(moment('2014-01-18', 'YYYY-MM-DD').toDate()); expect(tasks[7].order).toEqual(7); expect(tasks[7].id).toEqual('task4'); expect(tasks[7].task).toEqual('Future task in critical line'); expect(tasks[8].startTime).toEqual(moment('2014-01-18', 'YYYY-MM-DD').toDate()); expect(tasks[8].endTime).toEqual(moment('2014-01-20', 'YYYY-MM-DD').toDate()); expect(tasks[8].order).toEqual(8); expect(tasks[8].id).toEqual('task5'); expect(tasks[8].task).toEqual('Create tests for renderer'); expect(tasks[9].startTime).toEqual(moment('2014-01-20', 'YYYY-MM-DD').toDate()); expect(tasks[9].endTime).toEqual(moment('2014-01-21', 'YYYY-MM-DD').toDate()); expect(tasks[9].order).toEqual(9); expect(tasks[9].id).toEqual('task6'); expect(tasks[9].task).toEqual('Add to mermaid'); // Section - Documentation expect(tasks[10].startTime).toEqual(moment('2014-01-08', 'YYYY-MM-DD').toDate()); expect(tasks[10].endTime).toEqual(moment('2014-01-11', 'YYYY-MM-DD').toDate()); expect(tasks[10].order).toEqual(10); expect(tasks[10].id).toEqual('a1'); expect(tasks[10].task).toEqual('Describe gantt syntax'); expect(tasks[11].startTime).toEqual(moment('2014-01-11', 'YYYY-MM-DD').toDate()); expect(tasks[11].endTime).toEqual( moment('2014-01-11 20:00:00', 'YYYY-MM-DD HH:mm:ss').toDate() ); expect(tasks[11].order).toEqual(11); expect(tasks[11].id).toEqual('task7'); expect(tasks[11].task).toEqual('Add gantt diagram to demo page'); expect(tasks[12].startTime).toEqual(moment('2014-01-11', 'YYYY-MM-DD').toDate()); expect(tasks[12].endTime).toEqual(moment('2014-01-13', 'YYYY-MM-DD').toDate()); expect(tasks[12].order).toEqual(12); expect(tasks[12].id).toEqual('doc1'); expect(tasks[12].task).toEqual('Add another diagram to demo page'); // Section - Last section expect(tasks[13].startTime).toEqual(moment('2014-01-13', 'YYYY-MM-DD').toDate()); expect(tasks[13].endTime).toEqual(moment('2014-01-16', 'YYYY-MM-DD').toDate()); expect(tasks[13].order).toEqual(13); expect(tasks[13].id).toEqual('task8'); expect(tasks[13].task).toEqual('Describe gantt syntax'); expect(tasks[14].startTime).toEqual(moment('2014-01-16', 'YYYY-MM-DD').toDate()); expect(tasks[14].endTime).toEqual( moment('2014-01-16 20:00:00', 'YYYY-MM-DD HH:mm:ss').toDate() ); expect(tasks[14].order).toEqual(14); expect(tasks[14].id).toEqual('task9'); expect(tasks[14].task).toEqual('Add gantt diagram to demo page'); expect(tasks[15].startTime).toEqual( moment('2014-01-16 20:00:00', 'YYYY-MM-DD HH:mm:ss').toDate() ); expect(tasks[15].endTime).toEqual( moment('2014-01-18 20:00:00', 'YYYY-MM-DD HH:mm:ss').toDate() ); expect(tasks[15].order).toEqual(15); expect(tasks[15].id).toEqual('task10'); expect(tasks[15].task).toEqual('Add another diagram to demo page'); }); it('should work when end date is the 31st', function () { ganttDb.setDateFormat('YYYY-MM-DD'); ganttDb.addSection('Task endTime is on the 31st day of the month'); ganttDb.addTask('test1', 'id1,2019-09-30,11d'); ganttDb.addTask('test2', 'id2,after id1,20d'); const tasks = ganttDb.getTasks(); expect(tasks[0].startTime).toEqual(moment('2019-09-30', 'YYYY-MM-DD').toDate()); expect(tasks[0].endTime).toEqual(moment('2019-10-11', 'YYYY-MM-DD').toDate()); expect(tasks[1].renderEndTime).toBeNull(); // Fixed end expect(tasks[0].id).toEqual('id1'); expect(tasks[0].task).toEqual('test1'); expect(tasks[1].startTime).toEqual(moment('2019-10-11', 'YYYY-MM-DD').toDate()); expect(tasks[1].endTime).toEqual(moment('2019-10-31', 'YYYY-MM-DD').toDate()); expect(tasks[1].renderEndTime).toBeNull(); // Fixed end expect(tasks[1].id).toEqual('id2'); expect(tasks[1].task).toEqual('test2'); }); describe('when setting inclusive end dates', function () { beforeEach(function () { ganttDb.setDateFormat('YYYY-MM-DD'); ganttDb.enableInclusiveEndDates(); ganttDb.addTask('test1', 'id1,2019-02-01,1d'); ganttDb.addTask('test2', 'id2,2019-02-01,2019-02-03'); }); it('should automatically add one day to all end dates', function () { const tasks = ganttDb.getTasks(); expect(tasks[0].startTime).toEqual(moment('2019-02-01', 'YYYY-MM-DD').toDate()); expect(tasks[0].endTime).toEqual(moment('2019-02-02', 'YYYY-MM-DD').toDate()); expect(tasks[0].id).toEqual('id1'); expect(tasks[0].task).toEqual('test1'); expect(tasks[1].startTime).toEqual(moment('2019-02-01', 'YYYY-MM-DD').toDate()); expect(tasks[1].endTime).toEqual(moment('2019-02-04', 'YYYY-MM-DD').toDate()); expect(tasks[1].renderEndTime).toBeNull(); // Fixed end expect(tasks[1].manualEndTime).toBeTruthy(); expect(tasks[1].id).toEqual('id2'); expect(tasks[1].task).toEqual('test2'); }); }); it.each(convert` type | expected ${'hide'} | ${'off'} ${'style'} | ${'stoke:stroke-width:5px,stroke:#00f,opacity:0.5'} `)('should ${type} today marker', ({ expected }) => { ganttDb.setTodayMarker(expected); expect(ganttDb.getTodayMarker()).toEqual(expected); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/gantt/ganttDetector.ts000066400000000000000000000002471433273745700277370ustar00rootroot00000000000000import type { DiagramDetector } from '../../diagram-api/types'; export const ganttDetector: DiagramDetector = (txt) => { return txt.match(/^\s*gantt/) !== null; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/gantt/ganttRenderer.js000066400000000000000000000436331433273745700277300ustar00rootroot00000000000000import moment from 'moment-mini'; import { log } from '../../logger'; import { select, scaleTime, min, max, scaleLinear, interpolateHcl, axisBottom, axisTop, timeFormat, } from 'd3'; import common from '../common/common'; import { getConfig } from '../../config'; import { configureSvgSize } from '../../setupGraphViewbox'; import addSVGAccessibilityFields from '../../accessibility'; export const setConf = function () { log.debug('Something is calling, setConf, remove the call'); }; let w; export const draw = function (text, id, version, diagObj) { const conf = getConfig().gantt; // diagObj.db.clear(); // parser.parse(text); const securityLevel = getConfig().securityLevel; // Handle root and Document for when rendering in sanbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; const elem = doc.getElementById(id); w = elem.parentElement.offsetWidth; if (typeof w === 'undefined') { w = 1200; } if (typeof conf.useWidth !== 'undefined') { w = conf.useWidth; } const taskArray = diagObj.db.getTasks(); // Set height based on number of tasks const h = taskArray.length * (conf.barHeight + conf.barGap) + 2 * conf.topPadding; // Set viewBox elem.setAttribute('viewBox', '0 0 ' + w + ' ' + h); const svg = root.select(`[id="${id}"]`); // Set timescale const timeScale = scaleTime() .domain([ min(taskArray, function (d) { return d.startTime; }), max(taskArray, function (d) { return d.endTime; }), ]) .rangeRound([0, w - conf.leftPadding - conf.rightPadding]); let categories = []; for (let i = 0; i < taskArray.length; i++) { categories.push(taskArray[i].type); } const catsUnfiltered = categories; // for vert labels categories = checkUnique(categories); /** * @param a * @param b */ function taskCompare(a, b) { const taskA = a.startTime; const taskB = b.startTime; let result = 0; if (taskA > taskB) { result = 1; } else if (taskA < taskB) { result = -1; } return result; } // Sort the task array using the above taskCompare() so that // tasks are created based on their order of startTime taskArray.sort(taskCompare); makeGant(taskArray, w, h); configureSvgSize(svg, h, w, conf.useMaxWidth); svg .append('text') .text(diagObj.db.getDiagramTitle()) .attr('x', w / 2) .attr('y', conf.titleTopMargin) .attr('class', 'titleText'); addSVGAccessibilityFields(diagObj.db, svg, id); /** * @param tasks * @param pageWidth * @param pageHeight */ function makeGant(tasks, pageWidth, pageHeight) { const barHeight = conf.barHeight; const gap = barHeight + conf.barGap; const topPadding = conf.topPadding; const leftPadding = conf.leftPadding; const colorScale = scaleLinear() .domain([0, categories.length]) .range(['#00B9FA', '#F95002']) .interpolate(interpolateHcl); drawExcludeDays( gap, topPadding, leftPadding, pageWidth, pageHeight, tasks, diagObj.db.getExcludes(), diagObj.db.getIncludes() ); makeGrid(leftPadding, topPadding, pageWidth, pageHeight); drawRects(tasks, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight); vertLabels(gap, topPadding, leftPadding, barHeight, colorScale); drawToday(leftPadding, topPadding, pageWidth, pageHeight); } /** * @param theArray * @param theGap * @param theTopPad * @param theSidePad * @param theBarHeight * @param theColorScale * @param w */ function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w) { // Draw background rects covering the entire width of the graph, these form the section rows. svg .append('g') .selectAll('rect') .data(theArray) .enter() .append('rect') .attr('x', 0) .attr('y', function (d, i) { // Ignore the incoming i value and use our order instead i = d.order; return i * theGap + theTopPad - 2; }) .attr('width', function () { return w - conf.rightPadding / 2; }) .attr('height', theGap) .attr('class', function (d) { for (let i = 0; i < categories.length; i++) { if (d.type === categories[i]) { return 'section section' + (i % conf.numberSectionStyles); } } return 'section section0'; }); // Draw the rects representing the tasks const rectangles = svg.append('g').selectAll('rect').data(theArray).enter(); const links = diagObj.db.getLinks(); // Render the tasks with links // Render the other tasks rectangles .append('rect') .attr('id', function (d) { return d.id; }) .attr('rx', 3) .attr('ry', 3) .attr('x', function (d) { if (d.milestone) { return ( timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight ); } return timeScale(d.startTime) + theSidePad; }) .attr('y', function (d, i) { // Ignore the incoming i value and use our order instead i = d.order; return i * theGap + theTopPad; }) .attr('width', function (d) { if (d.milestone) { return theBarHeight; } return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime); }) .attr('height', theBarHeight) .attr('transform-origin', function (d, i) { // Ignore the incoming i value and use our order instead i = d.order; return ( ( timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) ).toString() + 'px ' + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + 'px' ); }) .attr('class', function (d) { const res = 'task'; let classStr = ''; if (d.classes.length > 0) { classStr = d.classes.join(' '); } let secNum = 0; for (let i = 0; i < categories.length; i++) { if (d.type === categories[i]) { secNum = i % conf.numberSectionStyles; } } let taskClass = ''; if (d.active) { if (d.crit) { taskClass += ' activeCrit'; } else { taskClass = ' active'; } } else if (d.done) { if (d.crit) { taskClass = ' doneCrit'; } else { taskClass = ' done'; } } else { if (d.crit) { taskClass += ' crit'; } } if (taskClass.length === 0) { taskClass = ' task'; } if (d.milestone) { taskClass = ' milestone ' + taskClass; } taskClass += secNum; taskClass += ' ' + classStr; return res + taskClass; }); // Append task labels rectangles .append('text') .attr('id', function (d) { return d.id + '-text'; }) .text(function (d) { return d.task; }) .attr('font-size', conf.fontSize) .attr('x', function (d) { let startX = timeScale(d.startTime); let endX = timeScale(d.renderEndTime || d.endTime); if (d.milestone) { startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; } if (d.milestone) { endX = startX + theBarHeight; } const textWidth = this.getBBox().width; // Check id text width > width of rectangle if (textWidth > endX - startX) { if (endX + textWidth + 1.5 * conf.leftPadding > w) { return startX + theSidePad - 5; } else { return endX + theSidePad + 5; } } else { return (endX - startX) / 2 + startX + theSidePad; } }) .attr('y', function (d, i) { // Ignore the incoming i value and use our order instead i = d.order; return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad; }) .attr('text-height', theBarHeight) .attr('class', function (d) { const startX = timeScale(d.startTime); let endX = timeScale(d.endTime); if (d.milestone) { endX = startX + theBarHeight; } const textWidth = this.getBBox().width; let classStr = ''; if (d.classes.length > 0) { classStr = d.classes.join(' '); } let secNum = 0; for (let i = 0; i < categories.length; i++) { if (d.type === categories[i]) { secNum = i % conf.numberSectionStyles; } } let taskType = ''; if (d.active) { if (d.crit) { taskType = 'activeCritText' + secNum; } else { taskType = 'activeText' + secNum; } } if (d.done) { if (d.crit) { taskType = taskType + ' doneCritText' + secNum; } else { taskType = taskType + ' doneText' + secNum; } } else { if (d.crit) { taskType = taskType + ' critText' + secNum; } } if (d.milestone) { taskType += ' milestoneText'; } // Check id text width > width of rectangle if (textWidth > endX - startX) { if (endX + textWidth + 1.5 * conf.leftPadding > w) { return classStr + ' taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType; } else { return ( classStr + ' taskTextOutsideRight taskTextOutside' + secNum + ' ' + taskType + ' width-' + textWidth ); } } else { return classStr + ' taskText taskText' + secNum + ' ' + taskType + ' width-' + textWidth; } }); const securityLevel = getConfig().securityLevel; // Wrap the tasks in an a tag for working links without javascript if (securityLevel === 'sandbox') { let sandboxElement; sandboxElement = select('#i' + id); const doc = sandboxElement.nodes()[0].contentDocument; rectangles .filter(function (d) { return typeof links[d.id] !== 'undefined'; }) .each(function (o) { var taskRect = doc.querySelector('#' + o.id); var taskText = doc.querySelector('#' + o.id + '-text'); const oldParent = taskRect.parentNode; var Link = doc.createElement('a'); Link.setAttribute('xlink:href', links[o.id]); Link.setAttribute('target', '_top'); oldParent.appendChild(Link); Link.appendChild(taskRect); Link.appendChild(taskText); }); } } /** * @param theGap * @param theTopPad * @param theSidePad * @param w * @param h * @param tasks * @param excludes * @param includes */ function drawExcludeDays(theGap, theTopPad, theSidePad, w, h, tasks, excludes, includes) { const minTime = tasks.reduce( (min, { startTime }) => (min ? Math.min(min, startTime) : startTime), 0 ); const maxTime = tasks.reduce((max, { endTime }) => (max ? Math.max(max, endTime) : endTime), 0); const dateFormat = diagObj.db.getDateFormat(); if (!minTime || !maxTime) return; const excludeRanges = []; let range = null; let d = moment(minTime); while (d.valueOf() <= maxTime) { if (diagObj.db.isInvalidDate(d, dateFormat, excludes, includes)) { if (!range) { range = { start: d.clone(), end: d.clone(), }; } else { range.end = d.clone(); } } else { if (range) { excludeRanges.push(range); range = null; } } d.add(1, 'd'); } const rectangles = svg.append('g').selectAll('rect').data(excludeRanges).enter(); rectangles .append('rect') .attr('id', function (d) { return 'exclude-' + d.start.format('YYYY-MM-DD'); }) .attr('x', function (d) { return timeScale(d.start) + theSidePad; }) .attr('y', conf.gridLineStartPadding) .attr('width', function (d) { const renderEnd = d.end.clone().add(1, 'day'); return timeScale(renderEnd) - timeScale(d.start); }) .attr('height', h - theTopPad - conf.gridLineStartPadding) .attr('transform-origin', function (d, i) { return ( ( timeScale(d.start) + theSidePad + 0.5 * (timeScale(d.end) - timeScale(d.start)) ).toString() + 'px ' + (i * theGap + 0.5 * h).toString() + 'px' ); }) .attr('class', 'exclude-range'); } /** * @param theSidePad * @param theTopPad * @param w * @param h */ function makeGrid(theSidePad, theTopPad, w, h) { let bottomXAxis = axisBottom(timeScale) .tickSize(-h + theTopPad + conf.gridLineStartPadding) .tickFormat(timeFormat(diagObj.db.getAxisFormat() || conf.axisFormat || '%Y-%m-%d')); svg .append('g') .attr('class', 'grid') .attr('transform', 'translate(' + theSidePad + ', ' + (h - 50) + ')') .call(bottomXAxis) .selectAll('text') .style('text-anchor', 'middle') .attr('fill', '#000') .attr('stroke', 'none') .attr('font-size', 10) .attr('dy', '1em'); if (diagObj.db.topAxisEnabled() || conf.topAxis) { let topXAxis = axisTop(timeScale) .tickSize(-h + theTopPad + conf.gridLineStartPadding) .tickFormat(timeFormat(diagObj.db.getAxisFormat() || conf.axisFormat || '%Y-%m-%d')); svg .append('g') .attr('class', 'grid') .attr('transform', 'translate(' + theSidePad + ', ' + theTopPad + ')') .call(topXAxis) .selectAll('text') .style('text-anchor', 'middle') .attr('fill', '#000') .attr('stroke', 'none') .attr('font-size', 10); // .attr('dy', '1em'); } } /** * @param theGap * @param theTopPad */ function vertLabels(theGap, theTopPad) { const numOccurances = []; let prevGap = 0; for (let i = 0; i < categories.length; i++) { numOccurances[i] = [categories[i], getCount(categories[i], catsUnfiltered)]; } svg .append('g') // without doing this, impossible to put grid lines behind text .selectAll('text') .data(numOccurances) .enter() .append(function (d) { const rows = d[0].split(common.lineBreakRegex); const dy = -(rows.length - 1) / 2; const svgLabel = doc.createElementNS('http://www.w3.org/2000/svg', 'text'); svgLabel.setAttribute('dy', dy + 'em'); for (let j = 0; j < rows.length; j++) { const tspan = doc.createElementNS('http://www.w3.org/2000/svg', 'tspan'); tspan.setAttribute('alignment-baseline', 'central'); tspan.setAttribute('x', '10'); if (j > 0) tspan.setAttribute('dy', '1em'); tspan.textContent = rows[j]; svgLabel.appendChild(tspan); } return svgLabel; }) .attr('x', 10) .attr('y', function (d, i) { if (i > 0) { for (let j = 0; j < i; j++) { prevGap += numOccurances[i - 1][1]; return (d[1] * theGap) / 2 + prevGap * theGap + theTopPad; } } else { return (d[1] * theGap) / 2 + theTopPad; } }) .attr('font-size', conf.sectionFontSize) .attr('font-size', conf.sectionFontSize) .attr('class', function (d) { for (let i = 0; i < categories.length; i++) { if (d[0] === categories[i]) { return 'sectionTitle sectionTitle' + (i % conf.numberSectionStyles); } } return 'sectionTitle'; }); } /** * @param theSidePad * @param theTopPad * @param w * @param h */ function drawToday(theSidePad, theTopPad, w, h) { const todayMarker = diagObj.db.getTodayMarker(); if (todayMarker === 'off') { return; } const todayG = svg.append('g').attr('class', 'today'); const today = new Date(); const todayLine = todayG.append('line'); todayLine .attr('x1', timeScale(today) + theSidePad) .attr('x2', timeScale(today) + theSidePad) .attr('y1', conf.titleTopMargin) .attr('y2', h - conf.titleTopMargin) .attr('class', 'today'); if (todayMarker !== '') { todayLine.attr('style', todayMarker.replace(/,/g, ';')); } } /** * From this stackexchange question: * http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript * * @param arr */ function checkUnique(arr) { const hash = {}; const result = []; for (let i = 0, l = arr.length; i < l; ++i) { if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) { // it works with objects! in FF, at least hash[arr[i]] = true; result.push(arr[i]); } } return result; } /** * From this stackexchange question: * http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array * * @param arr */ function getCounts(arr) { let i = arr.length; // const to loop over const obj = {}; // obj to store results while (i) { obj[arr[--i]] = (obj[arr[i]] || 0) + 1; // count occurrences } return obj; } /** * Get specific from everything * * @param word * @param arr */ function getCount(word, arr) { return getCounts(arr)[word] || 0; } }; export default { setConf, draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/gantt/parser/000077500000000000000000000000001433273745700260515ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/gantt/parser/gantt.jison000066400000000000000000000160231433273745700302340ustar00rootroot00000000000000/** mermaid * https://mermaidjs.github.io/ * (c) 2015 Knut Sveidqvist * MIT license. */ %lex %options case-insensitive %x click %x href %x callbackname %x callbackargs %x open_directive %x type_directive %x arg_directive %x close_directive %x acc_title %x acc_descr %x acc_descr_multiline %% \%\%\{ { this.begin('open_directive'); return 'open_directive'; } ((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } ":" { this.popState(); this.begin('arg_directive'); return ':'; } \}\%\% { this.popState(); this.popState(); return 'close_directive'; } ((?:(?!\}\%\%).|\n)*) return 'arg_directive'; accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} [\}] { this.popState(); } [^\}]* return "acc_descr_multiline_value"; \%\%(?!\{)*[^\n]* /* skip comments */ [^\}]\%\%*[^\n]* /* skip comments */ \%\%*[^\n]*[\n]* /* do nothing */ [\n]+ return 'NL'; \s+ /* skip whitespace */ \#[^\n]* /* skip comments */ \%%[^\n]* /* skip comments */ /* ---interactivity command--- 'href' adds a link to the specified task. 'href' can only be specified when the line was introduced with 'click'. 'href ""' attaches the specified link to the task that was specified by 'click'. */ "href"[\s]+["] this.begin("href"); ["] this.popState(); [^"]* return 'href'; /* ---interactivity command--- 'call' adds a callback to the specified task. 'call' can only be specified when the line was introdcued with 'click'. 'call ()' attaches the function 'callbackname' with the specified arguments to the task that was specified by 'click'. Function arguments are optional: 'call ()' simply executes 'callbackname' without any arguments. */ "call"[\s]+ this.begin("callbackname"); \([\s]*\) this.popState(); \( this.popState(); this.begin("callbackargs"); [^(]* return 'callbackname'; \) this.popState(); [^)]* return 'callbackargs'; /* 'click' is the keyword to introduce a line that contains interactivity commands. 'click' must be followed by an existing task-id. All commands are attached to that id. 'click ' can be followed by href or call commands in any desired order */ "click"[\s]+ this.begin("click"); [\s\n] this.popState(); [^\s\n]* return 'click'; "gantt" return 'gantt'; "dateFormat"\s[^#\n;]+ return 'dateFormat'; "inclusiveEndDates" return 'inclusiveEndDates'; "topAxis" return 'topAxis'; "axisFormat"\s[^#\n;]+ return 'axisFormat'; "includes"\s[^#\n;]+ return 'includes'; "excludes"\s[^#\n;]+ return 'excludes'; "todayMarker"\s[^\n;]+ return 'todayMarker'; \d\d\d\d"-"\d\d"-"\d\d return 'date'; "title"\s[^#\n;]+ return 'title'; "accDescription"\s[^#\n;]+ return 'accDescription' "section"\s[^#:\n;]+ return 'section'; [^#:\n;]+ return 'taskTxt'; ":"[^#\n;]+ return 'taskData'; ":" return ':'; <> return 'EOF'; . return 'INVALID'; /lex %left '^' %start start %% /* language grammar */ start : directive start | gantt document 'EOF' { return $2; } ; document : /* empty */ { $$ = [] } | document line {$1.push($2);$$ = $1} ; line : SPACE statement { $$ = $2 } | statement { $$ = $1 } | NL { $$=[];} | EOF { $$=[];} ; statement : dateFormat {yy.setDateFormat($1.substr(11));$$=$1.substr(11);} | inclusiveEndDates {yy.enableInclusiveEndDates();$$=$1.substr(18);} | topAxis {yy.TopAxis();$$=$1.substr(8);} | axisFormat {yy.setAxisFormat($1.substr(11));$$=$1.substr(11);} | excludes {yy.setExcludes($1.substr(9));$$=$1.substr(9);} | includes {yy.setIncludes($1.substr(9));$$=$1.substr(9);} | todayMarker {yy.setTodayMarker($1.substr(12));$$=$1.substr(12);} | title {yy.setDiagramTitle($1.substr(6));$$=$1.substr(6);} | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } | section {yy.addSection($1.substr(8));$$=$1.substr(8);} | clickStatement | taskTxt taskData {yy.addTask($1,$2);$$='task';} | directive ; directive : openDirective typeDirective closeDirective 'NL' | openDirective typeDirective ':' argDirective closeDirective 'NL' ; /* click allows any combination of href and call. */ clickStatement : click callbackname {$$ = $1;yy.setClickEvent($1, $2, null);} | click callbackname callbackargs {$$ = $1;yy.setClickEvent($1, $2, $3);} | click callbackname href {$$ = $1;yy.setClickEvent($1, $2, null);yy.setLink($1,$3);} | click callbackname callbackargs href {$$ = $1;yy.setClickEvent($1, $2, $3);yy.setLink($1,$4);} | click href callbackname {$$ = $1;yy.setClickEvent($1, $3, null);yy.setLink($1,$2);} | click href callbackname callbackargs {$$ = $1;yy.setClickEvent($1, $3, $4);yy.setLink($1,$2);} | click href {$$ = $1;yy.setLink($1, $2);} ; clickStatementDebug : click callbackname {$$=$1 + ' ' + $2;} | click callbackname href {$$=$1 + ' ' + $2 + ' ' + $3;} | click callbackname callbackargs {$$=$1 + ' ' + $2 + ' ' + $3;} | click callbackname callbackargs href {$$=$1 + ' ' + $2 + ' ' + $3 + ' ' + $4;} | click href callbackname {$$=$1 + ' ' + $2 + ' ' + $3;} | click href callbackname callbackargs {$$=$1 + ' ' + $2 + ' ' + $3 + ' ' + $4;} | click href {$$=$1 + ' ' + $2;} ; openDirective : open_directive { yy.parseDirective('%%{', 'open_directive'); } ; typeDirective : type_directive { yy.parseDirective($1, 'type_directive'); } ; argDirective : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } ; closeDirective : close_directive { yy.parseDirective('}%%', 'close_directive', 'gantt'); } ; %% mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/gantt/parser/gantt.spec.js000066400000000000000000000151251433273745700304610ustar00rootroot00000000000000import { parser } from './gantt'; import ganttDb from '../ganttDb'; import { convert } from '../../../tests/util'; import { vi } from 'vitest'; const spyOn = vi.spyOn; const parserFnConstructor = (str) => { return () => { parser.parse(str); }; }; describe('when parsing a gantt diagram it', function () { beforeEach(function () { parser.yy = ganttDb; parser.yy.clear(); }); it('should handle a dateFormat definition', function () { const str = 'gantt\ndateFormat yyyy-mm-dd'; expect(parserFnConstructor(str)).not.toThrow(); }); it('should handle a inclusive end date definition', function () { const str = 'gantt\ndateFormat yyyy-mm-dd\ninclusiveEndDates'; expect(parserFnConstructor(str)).not.toThrow(); }); it('should handle a title definition', function () { const str = 'gantt\ndateFormat yyyy-mm-dd\ntitle Adding gantt diagram functionality to mermaid'; expect(parserFnConstructor(str)).not.toThrow(); }); it('should handle an excludes definition', function () { const str = 'gantt\ndateFormat yyyy-mm-dd\ntitle Adding gantt diagram functionality to mermaid\nexcludes weekdays 2019-02-01'; expect(parserFnConstructor(str)).not.toThrow(); }); it('should handle a todayMarker definition', function () { spyOn(ganttDb, 'setTodayMarker'); const str = 'gantt\ndateFormat yyyy-mm-dd\ntitle Adding gantt diagram functionality to mermaid\nexcludes weekdays 2019-02-01\ntodayMarker off'; expect(parserFnConstructor(str)).not.toThrow(); expect(ganttDb.setTodayMarker).toHaveBeenCalledWith('off'); }); it('should handle a section definition', function () { const str = 'gantt\n' + 'dateFormat yyyy-mm-dd\n' + 'title Adding gantt diagram functionality to mermaid\n' + 'excludes weekdays 2019-02-01\n' + 'section Documentation'; expect(parserFnConstructor(str)).not.toThrow(); }); it('should handle multiline section titles with different line breaks', function () { const str = 'gantt\n' + 'dateFormat yyyy-mm-dd\n' + 'title Adding gantt diagram functionality to mermaid\n' + 'excludes weekdays 2019-02-01\n' + 'section Line1
Line2
Line3
Line4Line5'; expect(parserFnConstructor(str)).not.toThrow(); }); /** * Beslutsflöde inligt nedan. Obs bla bla bla * * graph TD * A[Hard pledge] -- text on link -->B(Round edge) * B --> C{to do or not to do} * C -->|Too| D[Result one] * C -->|Doo| E[Result two] * * Params bapa - a unique bapap */ it('should handle a task definition', function () { const str = 'gantt\n' + 'dateFormat YYYY-MM-DD\n' + 'title Adding gantt diagram functionality to mermaid\n' + 'section Documentation\n' + 'Design jison grammar:des1, 2014-01-01, 2014-01-04'; expect(parserFnConstructor(str)).not.toThrow(); const tasks = parser.yy.getTasks(); expect(tasks[0].startTime).toEqual(new Date(2014, 0, 1)); expect(tasks[0].endTime).toEqual(new Date(2014, 0, 4)); expect(tasks[0].id).toEqual('des1'); expect(tasks[0].task).toEqual('Design jison grammar'); }); it.each(convert` tags | milestone | done | crit | active ${'milestone'} | ${true} | ${false} | ${false} | ${false} ${'done'} | ${false} | ${true} | ${false} | ${false} ${'crit'} | ${false} | ${false} | ${true} | ${false} ${'active'} | ${false} | ${false} | ${false} | ${true} ${'crit,milestone,done'} | ${true} | ${true} | ${true} | ${false} `)('should handle a task with tags $tags', ({ tags, milestone, done, crit, active }) => { const str = 'gantt\n' + 'dateFormat YYYY-MM-DD\n' + 'title Adding gantt diagram functionality to mermaid\n' + 'section Documentation\n' + 'test task:' + tags + ', 2014-01-01, 2014-01-04'; const allowedTags = ['active', 'done', 'crit', 'milestone']; expect(parserFnConstructor(str)).not.toThrow(); const tasks = parser.yy.getTasks(); allowedTags.forEach(function (t) { if (eval(t)) { expect(tasks[0][t]).toBeTruthy(); } else { expect(tasks[0][t]).toBeFalsy(); } }); }); it('should parse callback specifier with no args', function () { spyOn(ganttDb, 'setClickEvent'); const str = 'gantt\n' + 'dateFormat YYYY-MM-DD\n' + 'section Clickable\n' + 'Visit mermaidjs :active, cl1, 2014-01-07, 3d\n' + 'Calling a callback :cl2, after cl1, 3d\n\n' + 'click cl1 href "https://mermaidjs.github.io/"\n' + 'click cl2 call ganttTestClick()\n'; expect(parserFnConstructor(str)).not.toThrow(); expect(ganttDb.setClickEvent).toHaveBeenCalledWith('cl2', 'ganttTestClick', null); }); it('should parse callback specifier with arbitrary number of args', function () { spyOn(ganttDb, 'setClickEvent'); const str = 'gantt\n' + 'dateFormat YYYY-MM-DD\n' + 'section Clickable\n' + 'Visit mermaidjs :active, cl1, 2014-01-07, 3d\n' + 'Calling a callback :cl2, after cl1, 3d\n\n' + 'click cl1 href "https://mermaidjs.github.io/"\n' + 'click cl2 call ganttTestClick("test0", test1, test2)\n'; expect(parserFnConstructor(str)).not.toThrow(); const args = '"test1", "test2", "test3"'; expect(ganttDb.setClickEvent).toHaveBeenCalledWith( 'cl2', 'ganttTestClick', '"test0", test1, test2' ); }); it('should allow for a accessibility title and description (accDescr)', function () { const expectedTitle = 'Gantt Diagram'; const expectedAccDescription = 'Tasks for Q4'; const ganttString = `gantt accTitle: ${expectedTitle} accDescr: ${expectedAccDescription} dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d\n`; parser.parse(ganttString); expect(ganttDb.getAccTitle()).toBe(expectedTitle); expect(ganttDb.getAccDescription()).toBe(expectedAccDescription); }); it('should allow for a accessibility title and multiline description (accDescr)', function () { const expectedTitle = 'Gantt Diagram'; const expectedAccDescription = `Tasks for Q4 row1 row2`; const ganttString = `gantt accTitle: ${expectedTitle} accDescr { ${expectedAccDescription} } dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d\n`; parser.parse(ganttString); expect(ganttDb.getAccTitle()).toBe(expectedTitle); expect(ganttDb.getAccDescription()).toBe(expectedAccDescription); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/gantt/styles.js000066400000000000000000000111471433273745700264420ustar00rootroot00000000000000const getStyles = (options) => ` .mermaid-main-font { font-family: "trebuchet ms", verdana, arial, sans-serif; font-family: var(--mermaid-font-family); } .exclude-range { fill: ${options.excludeBkgColor}; } .section { stroke: none; opacity: 0.2; } .section0 { fill: ${options.sectionBkgColor}; } .section2 { fill: ${options.sectionBkgColor2}; } .section1, .section3 { fill: ${options.altSectionBkgColor}; opacity: 0.2; } .sectionTitle0 { fill: ${options.titleColor}; } .sectionTitle1 { fill: ${options.titleColor}; } .sectionTitle2 { fill: ${options.titleColor}; } .sectionTitle3 { fill: ${options.titleColor}; } .sectionTitle { text-anchor: start; // font-size: ${options.ganttFontSize}; // text-height: 14px; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); } /* Grid and axis */ .grid .tick { stroke: ${options.gridColor}; opacity: 0.8; shape-rendering: crispEdges; text { font-family: ${options.fontFamily}; fill: ${options.textColor}; } } .grid path { stroke-width: 0; } /* Today line */ .today { fill: none; stroke: ${options.todayLineColor}; stroke-width: 2px; } /* Task styling */ /* Default task */ .task { stroke-width: 2; } .taskText { text-anchor: middle; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); } // .taskText:not([font-size]) { // font-size: ${options.ganttFontSize}; // } .taskTextOutsideRight { fill: ${options.taskTextDarkColor}; text-anchor: start; // font-size: ${options.ganttFontSize}; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); } .taskTextOutsideLeft { fill: ${options.taskTextDarkColor}; text-anchor: end; // font-size: ${options.ganttFontSize}; } /* Special case clickable */ .task.clickable { cursor: pointer; } .taskText.clickable { cursor: pointer; fill: ${options.taskTextClickableColor} !important; font-weight: bold; } .taskTextOutsideLeft.clickable { cursor: pointer; fill: ${options.taskTextClickableColor} !important; font-weight: bold; } .taskTextOutsideRight.clickable { cursor: pointer; fill: ${options.taskTextClickableColor} !important; font-weight: bold; } /* Specific task settings for the sections*/ .taskText0, .taskText1, .taskText2, .taskText3 { fill: ${options.taskTextColor}; } .task0, .task1, .task2, .task3 { fill: ${options.taskBkgColor}; stroke: ${options.taskBorderColor}; } .taskTextOutside0, .taskTextOutside2 { fill: ${options.taskTextOutsideColor}; } .taskTextOutside1, .taskTextOutside3 { fill: ${options.taskTextOutsideColor}; } /* Active task */ .active0, .active1, .active2, .active3 { fill: ${options.activeTaskBkgColor}; stroke: ${options.activeTaskBorderColor}; } .activeText0, .activeText1, .activeText2, .activeText3 { fill: ${options.taskTextDarkColor} !important; } /* Completed task */ .done0, .done1, .done2, .done3 { stroke: ${options.doneTaskBorderColor}; fill: ${options.doneTaskBkgColor}; stroke-width: 2; } .doneText0, .doneText1, .doneText2, .doneText3 { fill: ${options.taskTextDarkColor} !important; } /* Tasks on the critical line */ .crit0, .crit1, .crit2, .crit3 { stroke: ${options.critBorderColor}; fill: ${options.critBkgColor}; stroke-width: 2; } .activeCrit0, .activeCrit1, .activeCrit2, .activeCrit3 { stroke: ${options.critBorderColor}; fill: ${options.activeTaskBkgColor}; stroke-width: 2; } .doneCrit0, .doneCrit1, .doneCrit2, .doneCrit3 { stroke: ${options.critBorderColor}; fill: ${options.doneTaskBkgColor}; stroke-width: 2; cursor: pointer; shape-rendering: crispEdges; } .milestone { transform: rotate(45deg) scale(0.8,0.8); } .milestoneText { font-style: italic; } .doneCritText0, .doneCritText1, .doneCritText2, .doneCritText3 { fill: ${options.taskTextDarkColor} !important; } .activeCritText0, .activeCritText1, .activeCritText2, .activeCritText3 { fill: ${options.taskTextDarkColor} !important; } .titleText { text-anchor: middle; font-size: 18px; fill: ${options.textColor} ; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); } `; export default getStyles; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/000077500000000000000000000000001433273745700242235ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/gitGraphAst.js000066400000000000000000000366351433273745700270130ustar00rootroot00000000000000import { log } from '../../logger'; import { random } from '../../utils'; import mermaidAPI from '../../mermaidAPI'; import * as configApi from '../../config'; import { getConfig } from '../../config'; import common from '../common/common'; import { setAccTitle, getAccTitle, getAccDescription, setAccDescription, clear as commonClear, } from '../../commonDb'; let mainBranchName = getConfig().gitGraph.mainBranchName; let mainBranchOrder = getConfig().gitGraph.mainBranchOrder; let commits = {}; let head = null; let branchesConfig = {}; branchesConfig[mainBranchName] = { name: mainBranchName, order: mainBranchOrder }; let branches = {}; branches[mainBranchName] = head; let curBranch = mainBranchName; let direction = 'LR'; let seq = 0; /** * */ function getId() { return random({ length: 7 }); } export const parseDirective = function (statement, context, type) { mermaidAPI.parseDirective(this, statement, context, type); }; // /** // * @param currentCommit // * @param otherCommit // */ // function isfastforwardable(currentCommit, otherCommit) { // log.debug('Entering isfastforwardable:', currentCommit.id, otherCommit.id); // let cnt = 0; // while (currentCommit.seq <= otherCommit.seq && currentCommit !== otherCommit && cnt < 1000) { // cnt++; // // only if other branch has more commits // if (otherCommit.parent == null) break; // if (Array.isArray(otherCommit.parent)) { // log.debug('In merge commit:', otherCommit.parent); // return ( // isfastforwardable(currentCommit, commits[otherCommit.parent[0]]) || // isfastforwardable(currentCommit, commits[otherCommit.parent[1]]) // ); // } else { // otherCommit = commits[otherCommit.parent]; // } // } // log.debug(currentCommit.id, otherCommit.id); // return currentCommit.id === otherCommit.id; // } /** * @param currentCommit * @param otherCommit */ // function isReachableFrom(currentCommit, otherCommit) { // const currentSeq = currentCommit.seq; // const otherSeq = otherCommit.seq; // if (currentSeq > otherSeq) return isfastforwardable(otherCommit, currentCommit); // return false; // } /** * @param list * @param fn */ function uniqBy(list, fn) { const recordMap = Object.create(null); return list.reduce((out, item) => { const key = fn(item); if (!recordMap[key]) { recordMap[key] = true; out.push(item); } return out; }, []); } export const setDirection = function (dir) { direction = dir; }; let options = {}; export const setOptions = function (rawOptString) { log.debug('options str', rawOptString); rawOptString = rawOptString && rawOptString.trim(); rawOptString = rawOptString || '{}'; try { options = JSON.parse(rawOptString); } catch (e) { log.error('error while parsing gitGraph options', e.message); } }; export const getOptions = function () { return options; }; export const commit = function (msg, id, type, tag) { log.debug('Entering commit:', msg, id, type, tag); id = common.sanitizeText(id, configApi.getConfig()); msg = common.sanitizeText(msg, configApi.getConfig()); tag = common.sanitizeText(tag, configApi.getConfig()); const commit = { id: id ? id : seq + '-' + getId(), message: msg, seq: seq++, type: type ? type : commitType.NORMAL, tag: tag ? tag : '', parents: head == null ? [] : [head.id], branch: curBranch, }; head = commit; commits[commit.id] = commit; branches[curBranch] = commit.id; log.debug('in pushCommit ' + commit.id); }; export const branch = function (name, order) { name = common.sanitizeText(name, configApi.getConfig()); if (typeof branches[name] === 'undefined') { branches[name] = head != null ? head.id : null; branchesConfig[name] = { name, order: order ? parseInt(order, 10) : null }; checkout(name); log.debug('in createBranch'); } else { let error = new Error( 'Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ' + name + '")' ); error.hash = { text: 'branch ' + name, token: 'branch ' + name, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ['"checkout ' + name + '"'], }; throw error; } }; export const merge = function (otherBranch, custom_id, override_type, custom_tag) { otherBranch = common.sanitizeText(otherBranch, configApi.getConfig()); custom_id = common.sanitizeText(custom_id, configApi.getConfig()); const currentCommit = commits[branches[curBranch]]; const otherCommit = commits[branches[otherBranch]]; if (curBranch === otherBranch) { let error = new Error('Incorrect usage of "merge". Cannot merge a branch to itself'); error.hash = { text: 'merge ' + otherBranch, token: 'merge ' + otherBranch, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ['branch abc'], }; throw error; } else if (typeof currentCommit === 'undefined' || !currentCommit) { let error = new Error( 'Incorrect usage of "merge". Current branch (' + curBranch + ')has no commits' ); error.hash = { text: 'merge ' + otherBranch, token: 'merge ' + otherBranch, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ['commit'], }; throw error; } else if (typeof branches[otherBranch] === 'undefined') { let error = new Error( 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ') does not exist' ); error.hash = { text: 'merge ' + otherBranch, token: 'merge ' + otherBranch, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ['branch ' + otherBranch], }; throw error; } else if (typeof otherCommit === 'undefined' || !otherCommit) { let error = new Error( 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ') has no commits' ); error.hash = { text: 'merge ' + otherBranch, token: 'merge ' + otherBranch, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ['"commit"'], }; throw error; } else if (currentCommit === otherCommit) { let error = new Error('Incorrect usage of "merge". Both branches have same head'); error.hash = { text: 'merge ' + otherBranch, token: 'merge ' + otherBranch, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ['branch abc'], }; throw error; } else if (custom_id && typeof commits[custom_id] !== 'undefined') { let error = new Error( 'Incorrect usage of "merge". Commit with id:' + custom_id + ' already exists, use different custom Id' ); error.hash = { text: 'merge ' + otherBranch + custom_id + override_type + custom_tag, token: 'merge ' + otherBranch + custom_id + override_type + custom_tag, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: [ 'merge ' + otherBranch + ' ' + custom_id + '_UNIQUE ' + override_type + ' ' + custom_tag, ], }; throw error; } // if (isReachableFrom(currentCommit, otherCommit)) { // log.debug('Already merged'); // return; // } // if (isfastforwardable(currentCommit, otherCommit)) { // branches[curBranch] = branches[otherBranch]; // head = commits[branches[curBranch]]; // } else { // create merge commit const commit = { id: custom_id ? custom_id : seq + '-' + getId(), message: 'merged branch ' + otherBranch + ' into ' + curBranch, seq: seq++, parents: [head == null ? null : head.id, branches[otherBranch]], branch: curBranch, type: commitType.MERGE, customType: override_type, customId: custom_id ? true : false, tag: custom_tag ? custom_tag : '', }; head = commit; commits[commit.id] = commit; branches[curBranch] = commit.id; // } log.debug(branches); log.debug('in mergeBranch'); }; export const cherryPick = function (sourceId, targetId, tag) { log.debug('Entering cherryPick:', sourceId, targetId, tag); sourceId = common.sanitizeText(sourceId, configApi.getConfig()); targetId = common.sanitizeText(targetId, configApi.getConfig()); tag = common.sanitizeText(tag, configApi.getConfig()); if (!sourceId || typeof commits[sourceId] === 'undefined') { let error = new Error( 'Incorrect usage of "cherryPick". Source commit id should exist and provided' ); error.hash = { text: 'cherryPick ' + sourceId + ' ' + targetId, token: 'cherryPick ' + sourceId + ' ' + targetId, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ['cherry-pick abc'], }; throw error; } let sourceCommit = commits[sourceId]; let sourceCommitBranch = sourceCommit.branch; if (sourceCommit.type === commitType.MERGE) { let error = new Error( 'Incorrect usage of "cherryPick". Source commit should not be a merge commit' ); error.hash = { text: 'cherryPick ' + sourceId + ' ' + targetId, token: 'cherryPick ' + sourceId + ' ' + targetId, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ['cherry-pick abc'], }; throw error; } if (!targetId || typeof commits[targetId] === 'undefined') { // cherry-pick source commit to current branch if (sourceCommitBranch === curBranch) { let error = new Error( 'Incorrect usage of "cherryPick". Source commit is already on current branch' ); error.hash = { text: 'cherryPick ' + sourceId + ' ' + targetId, token: 'cherryPick ' + sourceId + ' ' + targetId, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ['cherry-pick abc'], }; throw error; } const currentCommit = commits[branches[curBranch]]; if (typeof currentCommit === 'undefined' || !currentCommit) { let error = new Error( 'Incorrect usage of "cherry-pick". Current branch (' + curBranch + ')has no commits' ); error.hash = { text: 'cherryPick ' + sourceId + ' ' + targetId, token: 'cherryPick ' + sourceId + ' ' + targetId, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ['cherry-pick abc'], }; throw error; } const commit = { id: seq + '-' + getId(), message: 'cherry-picked ' + sourceCommit + ' into ' + curBranch, seq: seq++, parents: [head == null ? null : head.id, sourceCommit.id], branch: curBranch, type: commitType.CHERRY_PICK, tag: tag ?? 'cherry-pick:' + sourceCommit.id, }; head = commit; commits[commit.id] = commit; branches[curBranch] = commit.id; log.debug(branches); log.debug('in cherryPick'); } }; export const checkout = function (branch) { branch = common.sanitizeText(branch, configApi.getConfig()); if (typeof branches[branch] === 'undefined') { let error = new Error( 'Trying to checkout branch which is not yet created. (Help try using "branch ' + branch + '")' ); error.hash = { text: 'checkout ' + branch, token: 'checkout ' + branch, line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ['"branch ' + branch + '"'], }; throw error; //branches[branch] = head != null ? head.id : null; //log.debug('in createBranch'); } else { curBranch = branch; const id = branches[curBranch]; head = commits[id]; } }; // export const reset = function (commitRef) { // log.debug('in reset', commitRef); // const ref = commitRef.split(':')[0]; // let parentCount = parseInt(commitRef.split(':')[1]); // let commit = ref === 'HEAD' ? head : commits[branches[ref]]; // log.debug(commit, parentCount); // while (parentCount > 0) { // commit = commits[commit.parent]; // parentCount--; // if (!commit) { // const err = 'Critical error - unique parent commit not found during reset'; // log.error(err); // throw err; // } // } // head = commit; // branches[curBranch] = commit.id; // }; /** * @param arr * @param key * @param newval */ function upsert(arr, key, newval) { const index = arr.indexOf(key); if (index === -1) { arr.push(newval); } else { arr.splice(index, 1, newval); } } /** @param commitArr */ function prettyPrintCommitHistory(commitArr) { const commit = commitArr.reduce((out, commit) => { if (out.seq > commit.seq) return out; return commit; }, commitArr[0]); let line = ''; commitArr.forEach(function (c) { if (c === commit) { line += '\t*'; } else { line += '\t|'; } }); const label = [line, commit.id, commit.seq]; for (let branch in branches) { if (branches[branch] === commit.id) label.push(branch); } log.debug(label.join(' ')); if (commit.parents && commit.parents.length == 2) { const newCommit = commits[commit.parents[0]]; upsert(commitArr, commit, newCommit); commitArr.push(commits[commit.parents[1]]); } else if (commit.parents.length == 0) { return; } else { const nextCommit = commits[commit.parents]; upsert(commitArr, commit, nextCommit); } commitArr = uniqBy(commitArr, (c) => c.id); prettyPrintCommitHistory(commitArr); } export const prettyPrint = function () { log.debug(commits); const node = getCommitsArray()[0]; prettyPrintCommitHistory([node]); }; export const clear = function () { commits = {}; head = null; let mainBranch = getConfig().gitGraph.mainBranchName; let mainBranchOrder = getConfig().gitGraph.mainBranchOrder; branches = {}; branches[mainBranch] = null; branchesConfig = {}; branchesConfig[mainBranch] = { name: mainBranch, order: mainBranchOrder }; curBranch = mainBranch; seq = 0; commonClear(); }; export const getBranchesAsObjArray = function () { const branchesArray = Object.values(branchesConfig) .map((branchConfig, i) => { if (branchConfig.order !== null) return branchConfig; return { ...branchConfig, order: parseFloat(`0.${i}`, 10), }; }) .sort((a, b) => a.order - b.order) .map(({ name }) => ({ name })); return branchesArray; }; export const getBranches = function () { return branches; }; export const getCommits = function () { return commits; }; export const getCommitsArray = function () { const commitArr = Object.keys(commits).map(function (key) { return commits[key]; }); commitArr.forEach(function (o) { log.debug(o.id); }); commitArr.sort((a, b) => a.seq - b.seq); return commitArr; }; export const getCurrentBranch = function () { return curBranch; }; export const getDirection = function () { return direction; }; export const getHead = function () { return head; }; export const commitType = { NORMAL: 0, REVERSE: 1, HIGHLIGHT: 2, MERGE: 3, CHERRY_PICK: 4, }; export default { parseDirective, getConfig: () => configApi.getConfig().gitGraph, setDirection, setOptions, getOptions, commit, branch, merge, cherryPick, checkout, //reset, prettyPrint, clear, getBranchesAsObjArray, getBranches, getCommits, getCommitsArray, getCurrentBranch, getDirection, getHead, setAccTitle, getAccTitle, getAccDescription, setAccDescription, commitType, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/gitGraphDetector.ts000066400000000000000000000002551433273745700300340ustar00rootroot00000000000000import type { DiagramDetector } from '../../diagram-api/types'; export const gitGraphDetector: DiagramDetector = (txt) => { return txt.match(/^\s*gitGraph/) !== null; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/gitGraphParser.spec000066400000000000000000000217131433273745700300250ustar00rootroot00000000000000 // Todo reintroduce without cryptoRandomString import gitGraphAst from './gitGraphAst'; import { parser } from './parser/gitGraph'; import randomString from 'crypto-random-string'; import cryptoRandomString from 'crypto-random-string'; jest.mock('crypto-random-string'); describe('when parsing a gitGraph', function() { let randomNumber; beforeEach(function() { parser.yy = gitGraphAst; parser.yy.clear(); randomNumber = 0; cryptoRandomString.mockImplementation(() => { randomNumber = randomNumber + 1; return String(randomNumber); }); }); afterEach(function() { cryptoRandomString.mockReset(); }); it('should handle a gitGraph definition', function() { const str = 'gitGraph:\n' + 'commit\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('master'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); }); it('should handle a gitGraph definition with empty options', function() { const str = 'gitGraph:\n' + 'options\n' + 'end\n' + 'commit\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(parser.yy.getOptions()).toEqual({}); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('master'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); }); it('should handle a gitGraph definition with valid options', function() { const str = 'gitGraph:\n' + 'options\n' + '{"key": "value"}\n' + 'end\n' + 'commit\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(parser.yy.getOptions()['key']).toBe('value'); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('master'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); }); it('should not fail on a gitGraph with malformed json', function() { const str = 'gitGraph:\n' + 'options\n' + '{"key": "value"\n' + 'end\n' + 'commit\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('master'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); }); it('should handle set direction', function() { const str = 'gitGraph BT:\n' + 'commit\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('master'); expect(parser.yy.getDirection()).toBe('BT'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); }); it('should checkout a branch', function() { const str = 'gitGraph:\n' + 'branch new\n' + 'checkout new\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(0); expect(parser.yy.getCurrentBranch()).toBe('new'); }); it('should add commits to checked out branch', function() { const str = 'gitGraph:\n' + 'branch new\n' + 'checkout new\n' + 'commit\n' + 'commit\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(2); expect(parser.yy.getCurrentBranch()).toBe('new'); const branchCommit = parser.yy.getBranches()['new']; expect(branchCommit).not.toBeNull(); expect(commits[branchCommit].parent).not.toBeNull(); }); it('should handle commit with args', function() { const str = 'gitGraph:\n' + 'commit "a commit"\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe('a commit'); expect(parser.yy.getCurrentBranch()).toBe('master'); }); it('should reset a branch', function() { const str = 'gitGraph:\n' + 'commit\n' + 'commit\n' + 'branch newbranch\n' + 'checkout newbranch\n' + 'commit\n' + 'reset master\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(3); expect(parser.yy.getCurrentBranch()).toBe('newbranch'); expect(parser.yy.getBranches()['newbranch']).toEqual(parser.yy.getBranches()['master']); expect(parser.yy.getHead().id).toEqual(parser.yy.getBranches()['newbranch']); }); it('reset can take an argument', function() { const str = 'gitGraph:\n' + 'commit\n' + 'commit\n' + 'branch newbranch\n' + 'checkout newbranch\n' + 'commit\n' + 'reset master^\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(3); expect(parser.yy.getCurrentBranch()).toBe('newbranch'); const master = commits[parser.yy.getBranches()['master']]; expect(parser.yy.getHead().id).toEqual(master.parent); }); it('should handle fast forwardable merges', function() { const str = 'gitGraph:\n' + 'commit\n' + 'branch newbranch\n' + 'checkout newbranch\n' + 'commit\n' + 'commit\n' + 'checkout master\n' + 'merge newbranch\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(3); expect(parser.yy.getCurrentBranch()).toBe('master'); expect(parser.yy.getBranches()['newbranch']).toEqual(parser.yy.getBranches()['master']); expect(parser.yy.getHead().id).toEqual(parser.yy.getBranches()['newbranch']); }); it('should handle cases when merge is a noop', function() { const str = 'gitGraph:\n' + 'commit\n' + 'branch newbranch\n' + 'checkout newbranch\n' + 'commit\n' + 'commit\n' + 'merge master\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(3); expect(parser.yy.getCurrentBranch()).toBe('newbranch'); expect(parser.yy.getBranches()['newbranch']).not.toEqual(parser.yy.getBranches()['master']); expect(parser.yy.getHead().id).toEqual(parser.yy.getBranches()['newbranch']); }); it('should handle merge with 2 parents', function() { const str = 'gitGraph:\n' + 'commit\n' + 'branch newbranch\n' + 'checkout newbranch\n' + 'commit\n' + 'commit\n' + 'checkout master\n' + 'commit\n' + 'merge newbranch\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(5); expect(parser.yy.getCurrentBranch()).toBe('master'); expect(parser.yy.getBranches()['newbranch']).not.toEqual(parser.yy.getBranches()['master']); expect(parser.yy.getHead().id).toEqual(parser.yy.getBranches()['master']); }); it('should handle ff merge when history walk has two parents (merge commit)', function() { const str = 'gitGraph:\n' + 'commit\n' + 'branch newbranch\n' + 'checkout newbranch\n' + 'commit\n' + 'commit\n' + 'checkout master\n' + 'commit\n' + 'merge newbranch\n' + 'commit\n' + 'checkout newbranch\n' + 'merge master\n'; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(6); expect(parser.yy.getCurrentBranch()).toBe('newbranch'); expect(parser.yy.getBranches()['newbranch']).toEqual(parser.yy.getBranches()['master']); expect(parser.yy.getHead().id).toEqual(parser.yy.getBranches()['master']); parser.yy.prettyPrint(); }); it('should generate a secure random ID for commits', function() { const str = 'gitGraph:\n' + 'commit\n' + 'commit\n'; const EXPECTED_LENGTH = 7; const EXPECTED_CHARACTERS = '0123456789abcdef'; let idCount = 0; randomString.mockImplementation(options => { if ( options.length === EXPECTED_LENGTH && options.characters === EXPECTED_CHARACTERS && Object.keys(options).length === 2 ) { const id = `abcdef${idCount}`; idCount += 1; return id; } return 'unexpected-ID'; }); parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits)).toEqual(['abcdef0', 'abcdef1']); Object.keys(commits).forEach(key => { expect(commits[key].id).toEqual(key); }); }); it('should generate an array of known branches', function() { const str = 'gitGraph:\n' + 'commit\n' + 'branch b1\n' + 'checkout b1\n' + 'commit\n' + 'commit\n' + 'branch b2\n'; parser.parse(str); const branches = gitGraphAst.getBranchesAsObjArray(); expect(branches).toHaveLength(3); expect(branches[0]).toHaveProperty('name', 'master'); expect(branches[1]).toHaveProperty('name', 'b1'); expect(branches[2]).toHaveProperty('name', 'b2'); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/gitGraphParserV2.spec.js000066400000000000000000000667351433273745700306650ustar00rootroot00000000000000/* eslint-env jasmine */ // Todo reintroduce without cryptoRandomString import gitGraphAst from './gitGraphAst'; import { parser } from './parser/gitGraph'; //import randomString from 'crypto-random-string'; //import cryptoRandomString from 'crypto-random-string'; //jest.mock('crypto-random-string'); describe('when parsing a gitGraph', function () { let randomNumber; beforeEach(function () { parser.yy = gitGraphAst; parser.yy.clear(); randomNumber = 0; }); // afterEach(function() { // cryptoRandomString.mockReset(); // }); it('should handle a gitGraph commit with NO pararms, get auto-genrated reandom ID', function () { const str = `gitGraph: commit `; parser.parse(str); const commits = parser.yy.getCommits(); //console.info(commits); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe(''); expect(commits[key].id).not.toBeNull(); expect(commits[key].tag).toBe(''); expect(commits[key].type).toBe(0); }); it('should handle a gitGraph commit with custom commit id only', function () { const str = `gitGraph: commit id:"1111" `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe(''); expect(commits[key].id).toBe('1111'); expect(commits[key].tag).toBe(''); expect(commits[key].type).toBe(0); }); it('should handle a gitGraph commit with custom commit tag only', function () { const str = `gitGraph: commit tag:"test" `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe(''); expect(commits[key].id).not.toBeNull(); expect(commits[key].tag).toBe('test'); expect(commits[key].type).toBe(0); }); it('should handle a gitGraph commit with custom commit type HIGHLIGHT only', function () { const str = `gitGraph: commit type: HIGHLIGHT `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe(''); expect(commits[key].id).not.toBeNull(); expect(commits[key].tag).toBe(''); expect(commits[key].type).toBe(2); }); it('should handle a gitGraph commit with custom commit type REVERSE only', function () { const str = `gitGraph: commit type: REVERSE `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe(''); expect(commits[key].id).not.toBeNull(); expect(commits[key].tag).toBe(''); expect(commits[key].type).toBe(1); }); it('should handle a gitGraph commit with custom commit type NORMAL only', function () { const str = `gitGraph: commit type: NORMAL `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe(''); expect(commits[key].id).not.toBeNull(); expect(commits[key].tag).toBe(''); expect(commits[key].type).toBe(0); }); it('should handle a gitGraph commit with custom commit msg only', function () { const str = `gitGraph: commit "test commit" `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe('test commit'); expect(commits[key].id).not.toBeNull(); expect(commits[key].tag).toBe(''); expect(commits[key].type).toBe(0); }); it('should handle a gitGraph commit with custom commit "msg:" key only', function () { const str = `gitGraph: commit msg: "test commit" `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe('test commit'); expect(commits[key].id).not.toBeNull(); expect(commits[key].tag).toBe(''); expect(commits[key].type).toBe(0); }); it('should handle a gitGraph commit with custom commit id, tag only', function () { const str = `gitGraph: commit id:"1111" tag: "test tag" `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe(''); expect(commits[key].id).toBe('1111'); expect(commits[key].tag).toBe('test tag'); expect(commits[key].type).toBe(0); }); it('should handle a gitGraph commit with custom commit type, tag only', function () { const str = `gitGraph: commit type:HIGHLIGHT tag: "test tag" `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe(''); expect(commits[key].id).not.toBeNull(); expect(commits[key].tag).toBe('test tag'); expect(commits[key].type).toBe(2); }); it('should handle a gitGraph commit with custom commit tag and type only', function () { const str = `gitGraph: commit tag: "test tag" type:HIGHLIGHT `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe(''); expect(commits[key].id).not.toBeNull(); expect(commits[key].tag).toBe('test tag'); expect(commits[key].type).toBe(2); }); it('should handle a gitGraph commit with custom commit id, type and tag only', function () { const str = `gitGraph: commit id:"1111" type:REVERSE tag: "test tag" `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe(''); expect(commits[key].id).toBe('1111'); expect(commits[key].tag).toBe('test tag'); expect(commits[key].type).toBe(1); }); it('should handle a gitGraph commit with custom commit id, type, tag and msg', function () { const str = `gitGraph: commit id:"1111" type:REVERSE tag: "test tag" msg:"test msg" `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe('test msg'); expect(commits[key].id).toBe('1111'); expect(commits[key].tag).toBe('test tag'); expect(commits[key].type).toBe(1); }); it('should handle a gitGraph commit with custom type,tag, msg, commit id,', function () { const str = `gitGraph: commit type:REVERSE tag: "test tag" msg: "test msg" id: "1111" `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe('test msg'); expect(commits[key].id).toBe('1111'); expect(commits[key].tag).toBe('test tag'); expect(commits[key].type).toBe(1); }); it('should handle a gitGraph commit with custom tag, msg, commit id, type,', function () { const str = `gitGraph: commit tag: "test tag" msg:"test msg" id:"1111" type:REVERSE `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe('test msg'); expect(commits[key].id).toBe('1111'); expect(commits[key].tag).toBe('test tag'); expect(commits[key].type).toBe(1); }); it('should handle a gitGraph commit with custom msg, commit id, type,tag', function () { const str = `gitGraph: commit msg:"test msg" id:"1111" type:REVERSE tag: "test tag" `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); const key = Object.keys(commits)[0]; expect(commits[key].message).toBe('test msg'); expect(commits[key].id).toBe('1111'); expect(commits[key].tag).toBe('test tag'); expect(commits[key].type).toBe(1); }); it('should handle 3 straight commits', function () { const str = `gitGraph: commit commit commit `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(3); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(1); }); it('should handle new branch creation', function () { const str = `gitGraph: commit branch testBranch `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('testBranch'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(2); }); it('should allow _-./ characters in branch names', function () { const str = `gitGraph: commit branch azAZ_-./test `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('azAZ_-./test'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(2); }); it('should allow branch names starting with numbers', function () { const str = `gitGraph: commit %% branch names starting with numbers are not recommended, but are supported by git branch 1.0.1 `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('1.0.1'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(2); }); it('should allow branch names starting with unusual prefixes', function () { const str = `gitGraph: commit %% branch names starting with numbers are not recommended, but are supported by git branch branch01 branch checkout02 branch cherry-pick03 branch branch/example-branch branch merge/test_merge %% single character branch name branch A `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('A'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(7); expect(Object.keys(parser.yy.getBranches())).toEqual( expect.arrayContaining([ 'branch01', 'checkout02', 'cherry-pick03', 'branch/example-branch', 'merge/test_merge', 'A', ]) ); }); it('should handle new branch checkout', function () { const str = `gitGraph: commit branch testBranch checkout testBranch `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('testBranch'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(2); }); it('should handle new branch checkout with order', function () { const str = `gitGraph: commit branch test1 order: 3 branch test2 order: 2 branch test3 order: 1 `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('test3'); expect(Object.keys(parser.yy.getBranches()).length).toBe(4); expect(parser.yy.getBranchesAsObjArray()).toStrictEqual([ { name: 'main' }, { name: 'test3' }, { name: 'test2' }, { name: 'test1' }, ]); }); it('should handle new branch checkout with and without order', function () { const str = `gitGraph: commit branch test1 order: 1 branch test2 branch test3 `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); expect(parser.yy.getCurrentBranch()).toBe('test3'); expect(Object.keys(parser.yy.getBranches()).length).toBe(4); expect(parser.yy.getBranchesAsObjArray()).toStrictEqual([ { name: 'main' }, { name: 'test2' }, { name: 'test3' }, { name: 'test1' }, ]); }); it('should handle new branch checkout & commit', function () { const str = `gitGraph: commit branch testBranch checkout testBranch commit `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(2); expect(parser.yy.getCurrentBranch()).toBe('testBranch'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(2); const commit1 = Object.keys(commits)[0]; const commit2 = Object.keys(commits)[1]; expect(commits[commit1].branch).toBe('main'); expect(commits[commit1].parents).toStrictEqual([]); expect(commits[commit2].branch).toBe('testBranch'); expect(commits[commit2].parents).toStrictEqual([commit1]); }); it('should handle new branch checkout & commit and merge', function () { const str = `gitGraph: commit branch testBranch checkout testBranch commit commit checkout main merge testBranch `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(4); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(2); const commit1 = Object.keys(commits)[0]; const commit2 = Object.keys(commits)[1]; const commit3 = Object.keys(commits)[2]; const commit4 = Object.keys(commits)[3]; expect(commits[commit1].branch).toBe('main'); expect(commits[commit1].parents).toStrictEqual([]); expect(commits[commit2].branch).toBe('testBranch'); expect(commits[commit2].parents).toStrictEqual([commits[commit1].id]); expect(commits[commit3].branch).toBe('testBranch'); expect(commits[commit3].parents).toStrictEqual([commits[commit2].id]); expect(commits[commit4].branch).toBe('main'); expect(commits[commit4].parents).toStrictEqual([commits[commit1].id, commits[commit3].id]); expect(parser.yy.getBranchesAsObjArray()).toStrictEqual([ { name: 'main' }, { name: 'testBranch' }, ]); }); it('should handle merge tags', function () { const str = `gitGraph: commit branch testBranch checkout testBranch commit checkout main merge testBranch tag: "merge-tag" `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(3); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); expect(Object.keys(parser.yy.getBranches()).length).toBe(2); const commit1 = Object.keys(commits)[0]; const commit2 = Object.keys(commits)[1]; const commit3 = Object.keys(commits)[2]; expect(commits[commit1].branch).toBe('main'); expect(commits[commit1].parents).toStrictEqual([]); expect(commits[commit2].branch).toBe('testBranch'); expect(commits[commit2].parents).toStrictEqual([commits[commit1].id]); expect(commits[commit3].branch).toBe('main'); expect(commits[commit3].parents).toStrictEqual([commits[commit1].id, commits[commit2].id]); expect(commits[commit3].tag).toBe('merge-tag'); expect(parser.yy.getBranchesAsObjArray()).toStrictEqual([ { name: 'main' }, { name: 'testBranch' }, ]); }); it('should handle merge with custom ids, tags and typr', function () { const str = `gitGraph: commit branch testBranch checkout testBranch commit checkout main %% Merge Tag and ID merge testBranch tag: "merge-tag" id: "2-222" branch testBranch2 checkout testBranch2 commit checkout main %% Merge ID and Tag (reverse order) merge testBranch2 id: "4-444" tag: "merge-tag2" type:HIGHLIGHT branch testBranch3 checkout testBranch3 commit checkout main %% just Merge ID merge testBranch3 id: "6-666" `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(7); expect(parser.yy.getCurrentBranch()).toBe('main'); expect(parser.yy.getDirection()).toBe('LR'); // The order of these commits is in alphabetical order of IDs const [ mainCommit, testBranchCommit, testBranchMerge, testBranch2Commit, testBranch2Merge, testBranch3Commit, testBranch3Merge, ] = Object.values(commits); expect(mainCommit.branch).toBe('main'); expect(mainCommit.parents).toStrictEqual([]); expect(testBranchCommit.branch).toBe('testBranch'); expect(testBranchCommit.parents).toStrictEqual([mainCommit.id]); expect(testBranchMerge.branch).toBe('main'); expect(testBranchMerge.parents).toStrictEqual([mainCommit.id, testBranchCommit.id]); expect(testBranchMerge.tag).toBe('merge-tag'); expect(testBranchMerge.id).toBe('2-222'); expect(testBranch2Merge.branch).toBe('main'); expect(testBranch2Merge.parents).toStrictEqual([testBranchMerge.id, testBranch2Commit.id]); expect(testBranch2Merge.tag).toBe('merge-tag2'); expect(testBranch2Merge.id).toBe('4-444'); expect(testBranch2Merge.customType).toBe(2); expect(testBranch2Merge.customId).toBe(true); expect(testBranch3Merge.branch).toBe('main'); expect(testBranch3Merge.parents).toStrictEqual([testBranch2Merge.id, testBranch3Commit.id]); expect(testBranch3Merge.id).toBe('6-666'); expect(parser.yy.getBranchesAsObjArray()).toStrictEqual([ { name: 'main' }, { name: 'testBranch' }, { name: 'testBranch2' }, { name: 'testBranch3' }, ]); }); it('should support cherry-picking commits', function () { const str = `gitGraph commit id: "ZERO" branch develop commit id:"A" checkout main cherry-pick id:"A" `; parser.parse(str); const commits = parser.yy.getCommits(); const cherryPickCommitID = Object.keys(commits)[2]; expect(commits[cherryPickCommitID].tag).toBe('cherry-pick:A'); expect(commits[cherryPickCommitID].branch).toBe('main'); }); it('should support cherry-picking commits with custom tag', function () { const str = `gitGraph commit id: "ZERO" branch develop commit id:"A" checkout main cherry-pick id:"A" tag:"MyTag" `; parser.parse(str); const commits = parser.yy.getCommits(); const cherryPickCommitID = Object.keys(commits)[2]; expect(commits[cherryPickCommitID].tag).toBe('MyTag'); expect(commits[cherryPickCommitID].branch).toBe('main'); }); it('should support cherry-picking commits with no tag', function () { const str = `gitGraph commit id: "ZERO" branch develop commit id:"A" checkout main cherry-pick id:"A" tag:"" `; parser.parse(str); const commits = parser.yy.getCommits(); const cherryPickCommitID = Object.keys(commits)[2]; expect(commits[cherryPickCommitID].tag).toBe(''); expect(commits[cherryPickCommitID].branch).toBe('main'); }); it('should throw error when try to branch existing branch: main', function () { const str = `gitGraph commit branch testBranch commit branch main commit checkout main merge testBranch `; try { parser.parse(str); // Fail test if above expression doesn't throw anything. expect(true).toBe(false); } catch (e) { expect(e.message).toBe( 'Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout main")' ); } }); it('should throw error when try to branch existing branch: testBranch', function () { const str = `gitGraph commit branch testBranch commit branch testBranch commit checkout main merge testBranch `; try { parser.parse(str); // Fail test if above expression doesn't throw anything. expect(true).toBe(false); } catch (e) { expect(e.message).toBe( 'Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout testBranch")' ); } }); it('should throw error when try to checkout unknown branch: testBranch', function () { const str = `gitGraph commit checkout testBranch commit branch testBranch commit checkout main merge testBranch `; try { parser.parse(str); // Fail test if above expression doesn't throw anything. expect(true).toBe(false); } catch (e) { expect(e.message).toBe( 'Trying to checkout branch which is not yet created. (Help try using "branch testBranch")' ); } }); it('should throw error when trying to merge, when current branch has no commits', function () { const str = `gitGraph merge testBranch commit checkout testBranch commit branch testBranch commit checkout main merge testBranch `; try { parser.parse(str); // Fail test if above expression doesn't throw anything. expect(true).toBe(false); } catch (e) { expect(e.message).toBe('Incorrect usage of "merge". Current branch (main)has no commits'); } }); it('should throw error when trying to merge unknown branch', function () { const str = `gitGraph commit merge testBranch commit checkout testBranch commit branch testBranch commit checkout main merge testBranch `; try { parser.parse(str); // Fail test if above expression doesn't throw anything. expect(true).toBe(false); } catch (e) { expect(e.message).toBe( 'Incorrect usage of "merge". Branch to be merged (testBranch) does not exist' ); } }); it('should throw error when trying to merge branch to itself', function () { const str = `gitGraph commit branch testBranch merge testBranch `; try { parser.parse(str); // Fail test if above expression doesn't throw anything. expect(true).toBe(false); } catch (e) { expect(e.message).toBe('Incorrect usage of "merge". Cannot merge a branch to itself'); } }); it('should throw error when using existing id as merge ID', function () { const str = `gitGraph commit id: "1-111" branch testBranch commit id: "2-222" commit id: "3-333" checkout main merge testBranch id: "1-111" `; try { parser.parse(str); // Fail test if above expression doesn't throw anything. expect(true).toBe(false); } catch (e) { expect(e.message).toBe( 'Incorrect usage of "merge". Commit with id:1-111 already exists, use different custom Id' ); } }); it('should throw error when trying to merge branches having same heads', function () { const str = `gitGraph commit branch testBranch checkout main merge testBranch `; try { parser.parse(str); // Fail test if above expression doesn't throw anything. expect(true).toBe(false); } catch (e) { expect(e.message).toBe('Incorrect usage of "merge". Both branches have same head'); } }); it('should throw error when trying to merge branch which has no commits', function () { const str = `gitGraph branch test1 checkout main commit merge test1 `; try { parser.parse(str); // Fail test if above expression doesn't throw anything. expect(true).toBe(false); } catch (e) { expect(e.message).toBe( 'Incorrect usage of "merge". Branch to be merged (test1) has no commits' ); } }); describe('accessibility', () => { it('should handle a title and a description (accDescr)', () => { const str = `gitGraph: accTitle: This is a title accDescr: This is a description commit `; parser.parse(str); expect(parser.yy.getAccTitle()).toBe('This is a title'); expect(parser.yy.getAccDescription()).toBe('This is a description'); }); it('should handle a title and a multiline description (accDescr)', () => { const str = `gitGraph: accTitle: This is a title accDescr { This is a description using multiple lines } commit `; parser.parse(str); expect(parser.yy.getAccTitle()).toBe('This is a title'); expect(parser.yy.getAccDescription()).toBe('This is a description\nusing multiple lines'); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/gitGraphRenderer-old.js000066400000000000000000000245311433273745700305760ustar00rootroot00000000000000import { curveBasis, line, select } from 'd3'; import db from './gitGraphAst'; import gitGraphParser from './parser/gitGraph'; import { logger } from '../../logger'; import { interpolateToCurve } from '../../utils'; let allCommitsDict = {}; let branchNum; let config = { nodeSpacing: 150, nodeFillColor: 'yellow', nodeStrokeWidth: 2, nodeStrokeColor: 'grey', lineStrokeWidth: 4, branchOffset: 50, lineColor: 'grey', leftMargin: 50, branchColors: ['#442f74', '#983351', '#609732', '#AA9A39'], nodeRadius: 10, nodeLabel: { width: 75, height: 100, x: -25, y: 0, }, }; let apiConfig = {}; export const setConf = function (c) { apiConfig = c; }; /** @param svg */ function svgCreateDefs(svg) { svg .append('defs') .append('g') .attr('id', 'def-commit') .append('circle') .attr('r', config.nodeRadius) .attr('cx', 0) .attr('cy', 0); svg .select('#def-commit') .append('foreignObject') .attr('width', config.nodeLabel.width) .attr('height', config.nodeLabel.height) .attr('x', config.nodeLabel.x) .attr('y', config.nodeLabel.y) .attr('class', 'node-label') .attr('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Extensibility') .append('p') .html(''); } /** * @param svg * @param points * @param colorIdx * @param interpolate */ function svgDrawLine(svg, points, colorIdx, interpolate) { const curve = interpolateToCurve(interpolate, curveBasis); const color = config.branchColors[colorIdx % config.branchColors.length]; const lineGen = line() .x(function (d) { return Math.round(d.x); }) .y(function (d) { return Math.round(d.y); }) .curve(curve); svg .append('svg:path') .attr('d', lineGen(points)) .style('stroke', color) .style('stroke-width', config.lineStrokeWidth) .style('fill', 'none'); } // Pass in the element and its pre-transform coords /** * @param element * @param coords */ function getElementCoords(element, coords) { coords = coords || element.node().getBBox(); const ctm = element.node().getCTM(); const xn = ctm.e + coords.x * ctm.a; const yn = ctm.f + coords.y * ctm.d; return { left: xn, top: yn, width: coords.width, height: coords.height, }; } /** * @param svg * @param fromId * @param toId * @param direction * @param color */ function svgDrawLineForCommits(svg, fromId, toId, direction, color) { logger.debug('svgDrawLineForCommits: ', fromId, toId); const fromBbox = getElementCoords(svg.select('#node-' + fromId + ' circle')); const toBbox = getElementCoords(svg.select('#node-' + toId + ' circle')); switch (direction) { case 'LR': // (toBbox) // +-------- // + (fromBbox) if (fromBbox.left - toBbox.left > config.nodeSpacing) { const lineStart = { x: fromBbox.left - config.nodeSpacing, y: toBbox.top + toBbox.height / 2, }; const lineEnd = { x: toBbox.left + toBbox.width, y: toBbox.top + toBbox.height / 2 }; svgDrawLine(svg, [lineStart, lineEnd], color, 'linear'); svgDrawLine( svg, [ { x: fromBbox.left, y: fromBbox.top + fromBbox.height / 2 }, { x: fromBbox.left - config.nodeSpacing / 2, y: fromBbox.top + fromBbox.height / 2 }, { x: fromBbox.left - config.nodeSpacing / 2, y: lineStart.y }, lineStart, ], color ); } else { svgDrawLine( svg, [ { x: fromBbox.left, y: fromBbox.top + fromBbox.height / 2, }, { x: fromBbox.left - config.nodeSpacing / 2, y: fromBbox.top + fromBbox.height / 2, }, { x: fromBbox.left - config.nodeSpacing / 2, y: toBbox.top + toBbox.height / 2, }, { x: toBbox.left + toBbox.width, y: toBbox.top + toBbox.height / 2, }, ], color ); } break; case 'BT': // + (fromBbox) // | // | // + (toBbox) if (toBbox.top - fromBbox.top > config.nodeSpacing) { const lineStart = { x: toBbox.left + toBbox.width / 2, y: fromBbox.top + fromBbox.height + config.nodeSpacing, }; const lineEnd = { x: toBbox.left + toBbox.width / 2, y: toBbox.top }; svgDrawLine(svg, [lineStart, lineEnd], color, 'linear'); svgDrawLine( svg, [ { x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + fromBbox.height }, { x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + fromBbox.height + config.nodeSpacing / 2, }, { x: toBbox.left + toBbox.width / 2, y: lineStart.y - config.nodeSpacing / 2 }, lineStart, ], color ); } else { svgDrawLine( svg, [ { x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + fromBbox.height, }, { x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + config.nodeSpacing / 2, }, { x: toBbox.left + toBbox.width / 2, y: toBbox.top - config.nodeSpacing / 2, }, { x: toBbox.left + toBbox.width / 2, y: toBbox.top, }, ], color ); } break; } } /** * @param svg * @param selector */ function cloneNode(svg, selector) { return svg.select(selector).node().cloneNode(true); } /** * @param svg * @param commitid * @param branches * @param direction */ function renderCommitHistory(svg, commitid, branches, direction) { let commit; const numCommits = Object.keys(allCommitsDict).length; if (typeof commitid === 'string') { do { commit = allCommitsDict[commitid]; logger.debug('in renderCommitHistory', commit.id, commit.seq); if (svg.select('#node-' + commitid).size() > 0) { return; } svg .append(function () { return cloneNode(svg, '#def-commit'); }) .attr('class', 'commit') .attr('id', function () { return 'node-' + commit.id; }) .attr('transform', function () { switch (direction) { case 'LR': return ( 'translate(' + (commit.seq * config.nodeSpacing + config.leftMargin) + ', ' + branchNum * config.branchOffset + ')' ); case 'BT': return ( 'translate(' + (branchNum * config.branchOffset + config.leftMargin) + ', ' + (numCommits - commit.seq) * config.nodeSpacing + ')' ); } }) .attr('fill', config.nodeFillColor) .attr('stroke', config.nodeStrokeColor) .attr('stroke-width', config.nodeStrokeWidth); let branch; for (let branchName in branches) { if (branches[branchName].commit === commit) { branch = branches[branchName]; break; } } if (branch) { logger.debug('found branch ', branch.name); svg .select('#node-' + commit.id + ' p') .append('xhtml:span') .attr('class', 'branch-label') .text(branch.name + ', '); } svg .select('#node-' + commit.id + ' p') .append('xhtml:span') .attr('class', 'commit-id') .text(commit.id); if (commit.message !== '' && direction === 'BT') { svg .select('#node-' + commit.id + ' p') .append('xhtml:span') .attr('class', 'commit-msg') .text(', ' + commit.message); } commitid = commit.parent; } while (commitid && allCommitsDict[commitid]); } if (Array.isArray(commitid)) { logger.debug('found merge commmit', commitid); renderCommitHistory(svg, commitid[0], branches, direction); branchNum++; renderCommitHistory(svg, commitid[1], branches, direction); branchNum--; } } /** * @param svg * @param commit * @param direction * @param branchColor */ function renderLines(svg, commit, direction, branchColor) { branchColor = branchColor || 0; while (commit.seq > 0 && !commit.lineDrawn) { if (typeof commit.parent === 'string') { svgDrawLineForCommits(svg, commit.id, commit.parent, direction, branchColor); commit.lineDrawn = true; commit = allCommitsDict[commit.parent]; } else if (Array.isArray(commit.parent)) { svgDrawLineForCommits(svg, commit.id, commit.parent[0], direction, branchColor); svgDrawLineForCommits(svg, commit.id, commit.parent[1], direction, branchColor + 1); renderLines(svg, allCommitsDict[commit.parent[1]], direction, branchColor + 1); commit.lineDrawn = true; commit = allCommitsDict[commit.parent[0]]; } } } export const draw = function (txt, id, ver) { try { const parser = gitGraphParser.parser; parser.yy = db; parser.yy.clear(); logger.debug('in gitgraph renderer', txt + '\n', 'id:', id, ver); // Parse the graph definition parser.parse(txt + '\n'); config = Object.assign(config, apiConfig, db.getOptions()); logger.debug('effective options', config); const direction = db.getDirection(); allCommitsDict = db.getCommits(); const branches = db.getBranchesAsObjArray(); if (direction === 'BT') { config.nodeLabel.x = branches.length * config.branchOffset; config.nodeLabel.width = '100%'; config.nodeLabel.y = -1 * 2 * config.nodeRadius; } const svg = select(`[id="${id}"]`); svgCreateDefs(svg); branchNum = 1; for (let branch in branches) { const v = branches[branch]; renderCommitHistory(svg, v.commit.id, branches, direction); renderLines(svg, v.commit, direction); branchNum++; } svg.attr('height', function () { if (direction === 'BT') return Object.keys(allCommitsDict).length * config.nodeSpacing; return (branches.length + 1) * config.branchOffset; }); } catch (e) { logger.error('Error while rendering gitgraph'); logger.error(e.message); } }; export default { setConf, draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/gitGraphRenderer.js000066400000000000000000000377011433273745700300250ustar00rootroot00000000000000import { select } from 'd3'; import { getConfig, setupGraphViewbox } from '../../diagram-api/diagramAPI'; import { log } from '../../logger'; import addSVGAccessibilityFields from '../../accessibility'; let allCommitsDict = {}; const commitType = { NORMAL: 0, REVERSE: 1, HIGHLIGHT: 2, MERGE: 3, CHERRY_PICK: 4, }; const THEME_COLOR_LIMIT = 8; let branchPos = {}; let commitPos = {}; let lanes = []; let maxPos = 0; const clear = () => { branchPos = {}; commitPos = {}; allCommitsDict = {}; maxPos = 0; lanes = []; }; /** * Draws a text, used for labels of the branches * * @param {string} txt The text * @returns {SVGElement} */ const drawText = (txt) => { const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text'); let rows = []; // Handling of new lines in the label if (typeof txt === 'string') { rows = txt.split(/\\n|\n|/gi); } else if (Array.isArray(txt)) { rows = txt; } else { rows = []; } for (let j = 0; j < rows.length; j++) { const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan'); tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'); tspan.setAttribute('dy', '1em'); tspan.setAttribute('x', '0'); tspan.setAttribute('class', 'row'); tspan.textContent = rows[j].trim(); svgLabel.appendChild(tspan); } /** * @param svg * @param selector */ return svgLabel; }; /** * Draws the commits with its symbol and labels. The function has two modes, one which only * calculates the positions and one that does the actual drawing. This for a simple way getting the * vertical layering correct in the graph. * * @param {any} svg * @param {any} commits * @param {any} modifyGraph */ const drawCommits = (svg, commits, modifyGraph) => { const gitGraphConfig = getConfig().gitGraph; const gBullets = svg.append('g').attr('class', 'commit-bullets'); const gLabels = svg.append('g').attr('class', 'commit-labels'); let pos = 0; const keys = Object.keys(commits); const sortedKeys = keys.sort((a, b) => { return commits[a].seq - commits[b].seq; }); sortedKeys.forEach((key) => { const commit = commits[key]; const y = branchPos[commit.branch].pos; const x = pos + 10; // Don't draw the commits now but calculate the positioning which is used by the branch lines etc. if (modifyGraph) { let typeClass; let commitSymbolType = typeof commit.customType !== 'undefined' && commit.customType !== '' ? commit.customType : commit.type; switch (commitSymbolType) { case commitType.NORMAL: typeClass = 'commit-normal'; break; case commitType.REVERSE: typeClass = 'commit-reverse'; break; case commitType.HIGHLIGHT: typeClass = 'commit-highlight'; break; case commitType.MERGE: typeClass = 'commit-merge'; break; case commitType.CHERRY_PICK: typeClass = 'commit-cherry-pick'; break; default: typeClass = 'commit-normal'; } if (commitSymbolType === commitType.HIGHLIGHT) { const circle = gBullets.append('rect'); circle.attr('x', x - 10); circle.attr('y', y - 10); circle.attr('height', 20); circle.attr('width', 20); circle.attr( 'class', `commit ${commit.id} commit-highlight${ branchPos[commit.branch].index % THEME_COLOR_LIMIT } ${typeClass}-outer` ); gBullets .append('rect') .attr('x', x - 6) .attr('y', y - 6) .attr('height', 12) .attr('width', 12) .attr( 'class', `commit ${commit.id} commit${ branchPos[commit.branch].index % THEME_COLOR_LIMIT } ${typeClass}-inner` ); } else if (commitSymbolType === commitType.CHERRY_PICK) { gBullets .append('circle') .attr('cx', x) .attr('cy', y) .attr('r', 10) .attr('class', `commit ${commit.id} ${typeClass}`); gBullets .append('circle') .attr('cx', x - 3) .attr('cy', y + 2) .attr('r', 2.75) .attr('fill', '#fff') .attr('class', `commit ${commit.id} ${typeClass}`); gBullets .append('circle') .attr('cx', x + 3) .attr('cy', y + 2) .attr('r', 2.75) .attr('fill', '#fff') .attr('class', `commit ${commit.id} ${typeClass}`); gBullets .append('line') .attr('x1', x + 3) .attr('y1', y + 1) .attr('x2', x) .attr('y2', y - 5) .attr('stroke', '#fff') .attr('class', `commit ${commit.id} ${typeClass}`); gBullets .append('line') .attr('x1', x - 3) .attr('y1', y + 1) .attr('x2', x) .attr('y2', y - 5) .attr('stroke', '#fff') .attr('class', `commit ${commit.id} ${typeClass}`); } else { const circle = gBullets.append('circle'); circle.attr('cx', x); circle.attr('cy', y); circle.attr('r', commit.type === commitType.MERGE ? 9 : 10); circle.attr( 'class', `commit ${commit.id} commit${branchPos[commit.branch].index % THEME_COLOR_LIMIT}` ); if (commitSymbolType === commitType.MERGE) { const circle2 = gBullets.append('circle'); circle2.attr('cx', x); circle2.attr('cy', y); circle2.attr('r', 6); circle2.attr( 'class', `commit ${typeClass} ${commit.id} commit${ branchPos[commit.branch].index % THEME_COLOR_LIMIT }` ); } if (commitSymbolType === commitType.REVERSE) { const cross = gBullets.append('path'); cross .attr('d', `M ${x - 5},${y - 5}L${x + 5},${y + 5}M${x - 5},${y + 5}L${x + 5},${y - 5}`) .attr( 'class', `commit ${typeClass} ${commit.id} commit${ branchPos[commit.branch].index % THEME_COLOR_LIMIT }` ); } } } commitPos[commit.id] = { x: pos + 10, y: y }; // The first iteration over the commits are for positioning purposes, this // is required for drawing the lines. The circles and labels is drawn after the labels // placing them on top of the lines. if (modifyGraph) { const px = 4; const py = 2; // Draw the commit label if ( commit.type !== commitType.CHERRY_PICK && ((commit.customId && commit.type === commitType.MERGE) || commit.type !== commitType.MERGE) && gitGraphConfig.showCommitLabel ) { const wrapper = gLabels.append('g'); const labelBkg = wrapper.insert('rect').attr('class', 'commit-label-bkg'); const text = wrapper .append('text') .attr('x', pos) .attr('y', y + 25) .attr('class', 'commit-label') .text(commit.id); let bbox = text.node().getBBox(); // Now we have the label, lets position the background labelBkg .attr('x', pos + 10 - bbox.width / 2 - py) .attr('y', y + 13.5) .attr('width', bbox.width + 2 * py) .attr('height', bbox.height + 2 * py); text.attr('x', pos + 10 - bbox.width / 2); if (gitGraphConfig.rotateCommitLabel) { let r_x = -7.5 - ((bbox.width + 10) / 25) * 9.5; let r_y = 10 + (bbox.width / 25) * 8.5; wrapper.attr( 'transform', 'translate(' + r_x + ', ' + r_y + ') rotate(' + -45 + ', ' + pos + ', ' + y + ')' ); } } if (commit.tag) { const rect = gLabels.insert('polygon'); const hole = gLabels.append('circle'); const tag = gLabels .append('text') // Note that we are delaying setting the x position until we know the width of the text .attr('y', y - 16) .attr('class', 'tag-label') .text(commit.tag); let tagBbox = tag.node().getBBox(); tag.attr('x', pos + 10 - tagBbox.width / 2); const h2 = tagBbox.height / 2; const ly = y - 19.2; rect.attr('class', 'tag-label-bkg').attr( 'points', ` ${pos - tagBbox.width / 2 - px / 2},${ly + py} ${pos - tagBbox.width / 2 - px / 2},${ly - py} ${pos + 10 - tagBbox.width / 2 - px},${ly - h2 - py} ${pos + 10 + tagBbox.width / 2 + px},${ly - h2 - py} ${pos + 10 + tagBbox.width / 2 + px},${ly + h2 + py} ${pos + 10 - tagBbox.width / 2 - px},${ly + h2 + py}` ); hole .attr('cx', pos - tagBbox.width / 2 + px / 2) .attr('cy', ly) .attr('r', 1.5) .attr('class', 'tag-hole'); } } pos += 50; if (pos > maxPos) { maxPos = pos; } }); }; /** * Detect if there are other commits between commit1's x-position and commit2's x-position on the * same branch as commit2. * * @param {any} commit1 * @param {any} commit2 * @param allCommits * @returns {boolean} If there are commits between commit1's x-position and commit2's x-position */ const hasOverlappingCommits = (commit1, commit2, allCommits) => { // Find commits on the same branch as commit2 const keys = Object.keys(allCommits); const overlappingComits = keys.filter((key) => { return ( allCommits[key].branch === commit2.branch && allCommits[key].seq > commit1.seq && allCommits[key].seq < commit2.seq ); }); return overlappingComits.length > 0; }; /** * This function find a lane in the y-axis that is not overlapping with any other lanes. This is * used for drawing the lines between commits. * * @param {any} y1 * @param {any} y2 * @param {any} _depth * @returns {number} Y value between y1 and y2 */ const findLane = (y1, y2, _depth) => { const depth = _depth || 0; const candidate = y1 + Math.abs(y1 - y2) / 2; if (depth > 5) { return candidate; } let ok = true; for (let i = 0; i < lanes.length; i++) { if (Math.abs(lanes[i] - candidate) < 10) { ok = false; } } if (ok) { lanes.push(candidate); return candidate; } const diff = Math.abs(y1 - y2); return findLane(y1, y2 - diff / 5, depth + 1); }; /** * Draw the lines between the commits. They were arrows initially. * * @param {any} svg * @param {any} commit1 * @param {any} commit2 * @param {any} allCommits */ const drawArrow = (svg, commit1, commit2, allCommits) => { const p1 = commitPos[commit1.id]; const p2 = commitPos[commit2.id]; const overlappingCommits = hasOverlappingCommits(commit1, commit2, allCommits); // log.debug('drawArrow', p1, p2, overlappingCommits, commit1.id, commit2.id); let arc = ''; let arc2 = ''; let radius = 0; let offset = 0; let colorClassNum = branchPos[commit2.branch].index; let lineDef; if (overlappingCommits) { arc = 'A 10 10, 0, 0, 0,'; arc2 = 'A 10 10, 0, 0, 1,'; radius = 10; offset = 10; // Figure out the color of the arrow,arrows going down take the color from the destination branch colorClassNum = branchPos[commit2.branch].index; const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y); if (p1.y < p2.y) { lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${ p2.x - radius } ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`; } else { lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${ p1.x + offset } ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`; } } else { if (p1.y < p2.y) { arc = 'A 20 20, 0, 0, 0,'; radius = 20; offset = 20; // Figure out the color of the arrow,arrows going down take the color from the destination branch colorClassNum = branchPos[commit2.branch].index; lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${ p2.x } ${p2.y}`; } if (p1.y > p2.y) { arc = 'A 20 20, 0, 0, 0,'; radius = 20; offset = 20; // Arrows going up take the color from the source branch colorClassNum = branchPos[commit1.branch].index; lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${ p2.x } ${p2.y}`; } if (p1.y === p2.y) { colorClassNum = branchPos[commit1.branch].index; lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${ p2.x } ${p2.y}`; } } svg .append('path') .attr('d', lineDef) .attr('class', 'arrow arrow' + (colorClassNum % THEME_COLOR_LIMIT)); }; const drawArrows = (svg, commits) => { const gArrows = svg.append('g').attr('class', 'commit-arrows'); Object.keys(commits).forEach((key) => { const commit = commits[key]; if (commit.parents && commit.parents.length > 0) { commit.parents.forEach((parent) => { drawArrow(gArrows, commits[parent], commit, commits); }); } }); }; /** * Adds the branches and the branches' labels to the svg. * * @param svg * @param branches */ const drawBranches = (svg, branches) => { const gitGraphConfig = getConfig().gitGraph; const g = svg.append('g'); branches.forEach((branch, index) => { const adjustIndexForTheme = index % THEME_COLOR_LIMIT; const pos = branchPos[branch.name].pos; const line = g.append('line'); line.attr('x1', 0); line.attr('y1', pos); line.attr('x2', maxPos); line.attr('y2', pos); line.attr('class', 'branch branch' + adjustIndexForTheme); lanes.push(pos); let name = branch.name; // Create the actual text element const labelElement = drawText(name); // Create outer g, edgeLabel, this will be positioned after graph layout const bkg = g.insert('rect'); const branchLabel = g.insert('g').attr('class', 'branchLabel'); // Create inner g, label, this will be positioned now for centering the text const label = branchLabel.insert('g').attr('class', 'label branch-label' + adjustIndexForTheme); label.node().appendChild(labelElement); let bbox = labelElement.getBBox(); bkg .attr('class', 'branchLabelBkg label' + adjustIndexForTheme) .attr('rx', 4) .attr('ry', 4) .attr('x', -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)) .attr('y', -bbox.height / 2 + 8) .attr('width', bbox.width + 18) .attr('height', bbox.height + 4); label.attr( 'transform', 'translate(' + (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)) + ', ' + (pos - bbox.height / 2 - 1) + ')' ); bkg.attr('transform', 'translate(' + -19 + ', ' + (pos - bbox.height / 2) + ')'); }); }; /** * @param txt * @param id * @param ver * @param diagObj */ export const draw = function (txt, id, ver, diagObj) { clear(); const conf = getConfig(); const gitGraphConfig = getConfig().gitGraph; // try { log.debug('in gitgraph renderer', txt + '\n', 'id:', id, ver); allCommitsDict = diagObj.db.getCommits(); const branches = diagObj.db.getBranchesAsObjArray(); // Position branches vertically let pos = 0; branches.forEach((branch, index) => { branchPos[branch.name] = { pos, index }; pos += 50 + (gitGraphConfig.rotateCommitLabel ? 40 : 0); }); const diagram = select(`[id="${id}"]`); // Adds title and description to the flow chart addSVGAccessibilityFields(diagObj.db, diagram, id); drawCommits(diagram, allCommitsDict, false); if (gitGraphConfig.showBranches) { drawBranches(diagram, branches); } drawArrows(diagram, allCommitsDict); drawCommits(diagram, allCommitsDict, true); // Setup the view box and size of the svg element setupGraphViewbox(undefined, diagram, gitGraphConfig.diagramPadding, conf.useMaxWidth); }; export default { draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/layout.js000066400000000000000000000010161433273745700260740ustar00rootroot00000000000000import { getConfig } from '../../config'; export default (dir, _branches, _commits) => { const config = getConfig().gitGraph; const branches = []; const commits = []; for (let i = 0; i < _branches.length; i++) { const branch = Object.assign({}, _branches[i]); if (dir === 'TB' || dir === 'BT') { branch.x = config.branchOffset * i; branch.y = -1; } else { branch.y = config.branchOffset * i; branch.x = -1; } branches.push(branch); } return { branches, commits }; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/mockDb.js000066400000000000000000000072001433273745700257570ustar00rootroot00000000000000export const getDirection = () => 'LR'; export const getCommits = () => { return { '0000001': { id: '0000001', seq: 1, message: '', branch: 'master', parents: null, tag: 'v0.1', commitType: 'normal', note: null, }, '0000002': { id: '0000002', seq: 2, message: '', branch: 'develop', parents: ['0000001'], tag: null, commitType: 'normal', note: null, }, '0000003': { id: '0000003', seq: 3, message: '', branch: 'featureB', parents: ['0000002'], tag: null, commitType: 'normal', note: null, }, '0000004': { id: '0000004', seq: 4, message: '', branch: 'hotfix', parents: ['0000001'], tag: null, commitType: 'normal', note: null, }, '0000005': { id: '0000005', seq: 5, message: '', branch: 'develop', parents: ['0000002'], tag: null, commitType: 'normal', note: null, }, '0000006': { id: '0000006', seq: 6, message: '', branch: 'featureB', parents: ['0000003'], tag: null, commitType: 'normal', note: null, }, '0000007': { id: '0000007', seq: 7, message: '', branch: 'master', parents: ['0000004'], tag: 'v0.2', commitType: 'normal', note: null, }, '0000008': { id: '0000008', seq: 8, message: '', branch: 'featureB', parents: ['0000006'], tag: null, commitType: 'normal', note: null, }, '0000009': { id: '0000009', seq: 9, message: '', branch: 'featureA', parents: ['0000005'], tag: null, commitType: 'normal', note: null, }, '0000010': { id: '0000010', seq: 10, message: '', branch: 'develop', parents: ['0000004', '0000005'], tag: null, commitType: 'normal', note: null, }, '0000011': { id: '0000011', seq: 11, message: '', branch: 'featureA', parents: ['0000009'], tag: null, commitType: 'normal', note: '', }, '0000012': { id: '0000012', seq: 12, message: '', branch: 'featureB', parents: ['0000008'], tag: null, commitType: 'normal', note: null, }, '0000013': { id: '0000013', seq: 13, message: '', branch: 'develop', parents: ['0000010', '0000011'], tag: null, commitType: 'normal', note: null, }, '0000014': { id: '0000014', seq: 14, message: '', branch: 'release', parents: ['0000013'], tag: null, commitType: 'normal', note: null, }, '0000015': { id: '0000015', seq: 15, message: '', branch: 'master', parents: ['0000007'], tag: null, commitType: 'normal', note: null, }, '0000016': { id: '0000016', seq: 16, message: '', branch: 'release', parents: ['0000014', '0000015'], tag: 'v1.0', commitType: 'normal', note: null, }, '0000017': { id: '0000017', seq: 17, message: '', branch: 'develop', parents: ['0000013', '0000016'], tag: null, commitType: 'normal', note: null, }, }; }; export const clear = () => { //no-op }; export const getBranchesAsObjArray = () => [ { name: 'master', }, { name: 'hotfix', }, { name: 'release', }, { name: 'develop', }, { name: 'featureA', }, { name: 'featureB', }, ]; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/parser/000077500000000000000000000000001433273745700255175ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/parser/desired syntax000066400000000000000000000010051433273745700303640ustar00rootroot00000000000000commit branch develop checkout develop commit branch featureB checkout featureB commit checkout master branch hotfix checkout hotfix commit checkout develop commit checkout featureB commit checkout master merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout master commit checkout release merge master checkout develop merge releasemermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/parser/gitGraph.jison000066400000000000000000000337651433273745700303460ustar00rootroot00000000000000/* * Parse following * gitGraph: * commit * commit * branch */ %lex %x string %x options %x open_directive %x type_directive %x arg_directive %x close_directive %x acc_title %x acc_descr %x acc_descr_multiline %options case-insensitive %% \%\%\{ { this.begin('open_directive'); return 'open_directive'; } ((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } ":" { this.popState(); this.begin('arg_directive'); return ':'; } \}\%\% { this.popState(); this.popState(); return 'close_directive'; } ((?:(?!\}\%\%).|\n)*) return 'arg_directive'; accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} [\}] { this.popState(); } [^\}]* return "acc_descr_multiline_value"; (\r?\n)+ /*{console.log('New line');return 'NL';}*/ return 'NL'; \#[^\n]* /* skip comments */ \%%[^\n]* /* skip comments */ "gitGraph" return 'GG'; commit(?=\s|$) return 'COMMIT'; "id:" return 'COMMIT_ID'; "type:" return 'COMMIT_TYPE'; "msg:" return 'COMMIT_MSG'; "NORMAL" return 'NORMAL'; "REVERSE" return 'REVERSE'; "HIGHLIGHT" return 'HIGHLIGHT'; "tag:" return 'COMMIT_TAG'; branch(?=\s|$) return 'BRANCH'; "order:" return 'ORDER'; merge(?=\s|$) return 'MERGE'; cherry\-pick(?=\s|$) return 'CHERRY_PICK'; // "reset" return 'RESET'; checkout(?=\s|$) return 'CHECKOUT'; "LR" return 'DIR'; "BT" return 'DIR'; ":" return ':'; "^" return 'CARET' "options"\r?\n this.begin("options"); // [ \r\n\t]+"end" this.popState(); // not used anymore in the renderer, fixed for backward compatibility [\s\S]+(?=[ \r\n\t]+"end") return 'OPT'; // ["]["] return 'EMPTYSTR'; ["] this.begin("string"); ["] this.popState(); [^"]* return 'STR'; [0-9]+(?=\s|$) return 'NUM'; \w([-\./\w]*[-\w])? return 'ID'; // only a subset of https://git-scm.com/docs/git-check-ref-format <> return 'EOF'; \s+ /* skip all whitespace */ // lowest priority so we can use lookaheads in earlier regex /lex %left '^' %start start %% /* language grammar */ start : eol start | directive start | GG document EOF{ return $3; } | GG ':' document EOF{ return $3; } | GG DIR ':' document EOF {yy.setDirection($2); return $4;} ; document : /*empty*/ | options body { yy.setOptions($1); $$ = $2} ; options : options OPT {$1 +=$2; $$=$1} | NL ; body : /*emmpty*/ {$$ = []} | body line {$1.push($2); $$=$1;} ; line : statement eol {$$ =$1} | NL ; statement : commitStatement | mergeStatement | cherryPickStatement | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } | section {yy.addSection($1.substr(8));$$=$1.substr(8);} | branchStatement | CHECKOUT ID {yy.checkout($2)} // | RESET reset_arg {yy.reset($2)} ; branchStatement : BRANCH ID {yy.branch($2)} | BRANCH ID ORDER NUM {yy.branch($2, $4)} ; cherryPickStatement : CHERRY_PICK COMMIT_ID STR {yy.cherryPick($3, '', undefined)} | CHERRY_PICK COMMIT_ID STR COMMIT_TAG STR {yy.cherryPick($3, '', $5)} | CHERRY_PICK COMMIT_ID STR COMMIT_TAG EMPTYSTR {yy.cherryPick($3, '', '')} | CHERRY_PICK COMMIT_TAG STR COMMIT_ID STR {yy.cherryPick($5, '', $3)} | CHERRY_PICK COMMIT_TAG EMPTYSTR COMMIT_ID STR {yy.cherryPick($3, '', '')} ; mergeStatement : MERGE ID {yy.merge($2,'','','')} | MERGE ID COMMIT_ID STR {yy.merge($2, $4,'','')} | MERGE ID COMMIT_TYPE commitType {yy.merge($2,'', $4,'')} | MERGE ID COMMIT_TAG STR {yy.merge($2, '','',$4)} | MERGE ID COMMIT_TAG STR COMMIT_ID STR {yy.merge($2, $6,'', $4)} | MERGE ID COMMIT_TAG STR COMMIT_TYPE commitType {yy.merge($2, '',$6, $4)} | MERGE ID COMMIT_TYPE commitType COMMIT_TAG STR {yy.merge($2, '',$4, $6)} | MERGE ID COMMIT_ID STR COMMIT_TYPE commitType {yy.merge($2, $4, $6, '')} | MERGE ID COMMIT_ID STR COMMIT_TAG STR {yy.merge($2, $4, '', $6)} | MERGE ID COMMIT_TYPE commitType COMMIT_ID STR {yy.merge($2, $6,$4, '')} | MERGE ID COMMIT_ID STR COMMIT_TYPE commitType COMMIT_TAG STR {yy.merge($2, $4, $6, $8)} | MERGE ID COMMIT_TYPE commitType COMMIT_TAG STR COMMIT_ID STR {yy.merge($2, $8, $4, $6)} | MERGE ID COMMIT_ID STR COMMIT_TAG STR COMMIT_TYPE commitType {yy.merge($2, $4, $8, $6)} | MERGE ID COMMIT_TYPE commitType COMMIT_ID STR COMMIT_TAG STR {yy.merge($2, $6, $4, $8)} | MERGE ID COMMIT_TAG STR COMMIT_TYPE commitType COMMIT_ID STR {yy.merge($2, $8, $6, $4)} | MERGE ID COMMIT_TAG STR COMMIT_ID STR COMMIT_TYPE commitType {yy.merge($2, $6, $8, $4)} ; commitStatement : COMMIT commit_arg {yy.commit($2)} | COMMIT COMMIT_TAG STR {yy.commit('','',yy.commitType.NORMAL,$3)} | COMMIT COMMIT_TYPE commitType {yy.commit('','',$3,'')} | COMMIT COMMIT_TAG STR COMMIT_TYPE commitType {yy.commit('','',$5,$3)} | COMMIT COMMIT_TYPE commitType COMMIT_TAG STR {yy.commit('','',$3,$5)} | COMMIT COMMIT_ID STR {yy.commit('',$3,yy.commitType.NORMAL,'')} | COMMIT COMMIT_ID STR COMMIT_TAG STR {yy.commit('',$3,yy.commitType.NORMAL,$5)} | COMMIT COMMIT_TAG STR COMMIT_ID STR {yy.commit('',$5,yy.commitType.NORMAL,$3)} | COMMIT COMMIT_ID STR COMMIT_TYPE commitType {yy.commit('',$3,$5,'')} | COMMIT COMMIT_TYPE commitType COMMIT_ID STR {yy.commit('',$5,$3,'')} | COMMIT COMMIT_ID STR COMMIT_TYPE commitType COMMIT_TAG STR {yy.commit('',$3,$5,$7)} | COMMIT COMMIT_ID STR COMMIT_TAG STR COMMIT_TYPE commitType {yy.commit('',$3,$7,$5)} | COMMIT COMMIT_TYPE commitType COMMIT_ID STR COMMIT_TAG STR {yy.commit('',$5,$3,$7)} | COMMIT COMMIT_TYPE commitType COMMIT_TAG STR COMMIT_ID STR {yy.commit('',$7,$3,$5)} | COMMIT COMMIT_TAG STR COMMIT_TYPE commitType COMMIT_ID STR {yy.commit('',$7,$5,$3)} | COMMIT COMMIT_TAG STR COMMIT_ID STR COMMIT_TYPE commitType {yy.commit('',$5,$7,$3)} | COMMIT COMMIT_MSG STR {yy.commit($3,'',yy.commitType.NORMAL,'')} | COMMIT COMMIT_TAG STR COMMIT_MSG STR {yy.commit($5,'',yy.commitType.NORMAL,$3)} | COMMIT COMMIT_MSG STR COMMIT_TAG STR {yy.commit($3,'',yy.commitType.NORMAL,$5)} | COMMIT COMMIT_MSG STR COMMIT_TYPE commitType {yy.commit($3,'',$5,'')} | COMMIT COMMIT_TYPE commitType COMMIT_MSG STR {yy.commit($5,'',$3,'')} | COMMIT COMMIT_ID STR COMMIT_MSG STR {yy.commit($5,$3,yy.commitType.NORMAL,'')} | COMMIT COMMIT_MSG STR COMMIT_ID STR {yy.commit($3,$5,yy.commitType.NORMAL,'')} | COMMIT COMMIT_MSG STR COMMIT_TYPE commitType COMMIT_TAG STR {yy.commit($3,'',$5,$7)} | COMMIT COMMIT_MSG STR COMMIT_TAG STR COMMIT_TYPE commitType {yy.commit($3,'',$7,$5)} | COMMIT COMMIT_TYPE commitType COMMIT_MSG STR COMMIT_TAG STR {yy.commit($5,'',$3,$7)} | COMMIT COMMIT_TYPE commitType COMMIT_TAG STR COMMIT_MSG STR {yy.commit($7,'',$3,$5)} | COMMIT COMMIT_TAG STR COMMIT_TYPE commitType COMMIT_MSG STR {yy.commit($7,'',$5,$3)} | COMMIT COMMIT_TAG STR COMMIT_MSG STR COMMIT_TYPE commitType {yy.commit($5,'',$7,$3)} | COMMIT COMMIT_MSG STR COMMIT_TYPE commitType COMMIT_ID STR {yy.commit($3,$7,$5,'')} | COMMIT COMMIT_MSG STR COMMIT_ID STR COMMIT_TYPE commitType {yy.commit($3,$5,$7,'')} | COMMIT COMMIT_TYPE commitType COMMIT_MSG STR COMMIT_ID STR {yy.commit($5,$7,$3,'')} | COMMIT COMMIT_TYPE commitType COMMIT_ID STR COMMIT_MSG STR {yy.commit($7,$5,$3,'')} | COMMIT COMMIT_ID STR COMMIT_TYPE commitType COMMIT_MSG STR {yy.commit($7,$3,$5,'')} | COMMIT COMMIT_ID STR COMMIT_MSG STR COMMIT_TYPE commitType {yy.commit($5,$3,$7,'')} | COMMIT COMMIT_MSG STR COMMIT_TAG STR COMMIT_ID STR {yy.commit($3,$7,yy.commitType.NORMAL,$5)} | COMMIT COMMIT_MSG STR COMMIT_ID STR COMMIT_TAG STR {yy.commit($3,$5,yy.commitType.NORMAL,$7)} | COMMIT COMMIT_TAG STR COMMIT_MSG STR COMMIT_ID STR {yy.commit($5,$7,yy.commitType.NORMAL,$3)} | COMMIT COMMIT_TAG STR COMMIT_ID STR COMMIT_MSG STR {yy.commit($7,$5,yy.commitType.NORMAL,$3)} | COMMIT COMMIT_ID STR COMMIT_TAG STR COMMIT_MSG STR {yy.commit($7,$3,yy.commitType.NORMAL,$5)} | COMMIT COMMIT_ID STR COMMIT_MSG STR COMMIT_TAG STR {yy.commit($5,$3,yy.commitType.NORMAL,$7)} | COMMIT COMMIT_MSG STR COMMIT_ID STR COMMIT_TYPE commitType COMMIT_TAG STR {yy.commit($3,$5,$7,$9)} | COMMIT COMMIT_MSG STR COMMIT_ID STR COMMIT_TAG STR COMMIT_TYPE commitType {yy.commit($3,$5,$9,$7)} | COMMIT COMMIT_MSG STR COMMIT_TYPE commitType COMMIT_ID STR COMMIT_TAG STR {yy.commit($3,$7,$5,$9)} | COMMIT COMMIT_MSG STR COMMIT_TYPE commitType COMMIT_TAG STR COMMIT_ID STR {yy.commit($3,$9,$5,$7)} | COMMIT COMMIT_MSG STR COMMIT_TAG STR COMMIT_ID STR COMMIT_TYPE commitType {yy.commit($3,$7,$9,$5)} | COMMIT COMMIT_MSG STR COMMIT_TAG STR COMMIT_TYPE commitType COMMIT_ID STR {yy.commit($3,$9,$7,$5)} | COMMIT COMMIT_ID STR COMMIT_MSG STR COMMIT_TYPE commitType COMMIT_TAG STR {yy.commit($5,$3,$7,$9)} | COMMIT COMMIT_ID STR COMMIT_MSG STR COMMIT_TAG STR COMMIT_TYPE commitType {yy.commit($5,$3,$9,$7)} | COMMIT COMMIT_ID STR COMMIT_TYPE commitType COMMIT_MSG STR COMMIT_TAG STR {yy.commit($7,$3,$5,$9)} | COMMIT COMMIT_ID STR COMMIT_TYPE commitType COMMIT_TAG STR COMMIT_MSG STR {yy.commit($9,$3,$5,$7)} | COMMIT COMMIT_ID STR COMMIT_TAG STR COMMIT_MSG STR COMMIT_TYPE commitType {yy.commit($7,$3,$9,$5)} | COMMIT COMMIT_ID STR COMMIT_TAG STR COMMIT_TYPE commitType COMMIT_MSG STR {yy.commit($9,$3,$7,$5)} | COMMIT COMMIT_TAG STR COMMIT_ID STR COMMIT_TYPE commitType COMMIT_MSG STR {yy.commit($9,$5,$7,$3)} | COMMIT COMMIT_TAG STR COMMIT_ID STR COMMIT_MSG STR COMMIT_TYPE commitType {yy.commit($7,$5,$9,$3)} | COMMIT COMMIT_TAG STR COMMIT_TYPE commitType COMMIT_ID STR COMMIT_MSG STR {yy.commit($9,$7,$5,$3)} | COMMIT COMMIT_TAG STR COMMIT_TYPE commitType COMMIT_MSG STR COMMIT_ID STR {yy.commit($7,$9,$5,$3)} | COMMIT COMMIT_TAG STR COMMIT_MSG STR COMMIT_ID STR COMMIT_TYPE commitType {yy.commit($5,$7,$9,$3)} | COMMIT COMMIT_TAG STR COMMIT_MSG STR COMMIT_TYPE commitType COMMIT_ID STR {yy.commit($5,$9,$7,$3)} | COMMIT COMMIT_TYPE commitType COMMIT_ID STR COMMIT_MSG STR COMMIT_TAG STR {yy.commit($7,$5,$3,$9)} | COMMIT COMMIT_TYPE commitType COMMIT_ID STR COMMIT_TAG STR COMMIT_MSG STR {yy.commit($9,$5,$3,$7)} | COMMIT COMMIT_TYPE commitType COMMIT_TAG STR COMMIT_MSG STR COMMIT_ID STR {yy.commit($7,$9,$3,$5)} | COMMIT COMMIT_TYPE commitType COMMIT_TAG STR COMMIT_ID STR COMMIT_MSG STR {yy.commit($9,$7,$3,$5)} | COMMIT COMMIT_TYPE commitType COMMIT_MSG STR COMMIT_ID STR COMMIT_TAG STR {yy.commit($5,$7,$3,$9)} | COMMIT COMMIT_TYPE commitType COMMIT_MSG STR COMMIT_TAG STR COMMIT_ID STR {yy.commit($5,$9,$3,$7)} // | COMMIT COMMIT_ID STR {yy.commit('',$3,yy.commitType.NORMAL,'')} // | COMMIT COMMIT_TYPE commitType {yy.commit('','',$3,'')} // | COMMIT COMMIT_TAG STR {yy.commit('','',yy.commitType.NORMAL,$3)} // | COMMIT COMMIT_MSG STR {yy.commit($3,'',yy.commitType.NORMAL,'')} // | COMMIT COMMIT_TAG STR COMMIT_TYPE commitType {yy.commit('','',$5,$3)} // | COMMIT COMMIT_TYPE commitType COMMIT_TAG STR {yy.commit('','',$3,$5)} // | COMMIT COMMIT_ID STR COMMIT_TYPE commitType {yy.commit('',$3,$5,'')} // | COMMIT COMMIT_ID STR COMMIT_TAG STR {yy.commit('',$3,yy.commitType.NORMAL,$5)} // | COMMIT COMMIT_ID STR COMMIT_TYPE commitType COMMIT_TAG STR {yy.commit('',$3,$5,$7)} // | COMMIT COMMIT_ID STR COMMIT_TAG STR COMMIT_TYPE commitType {yy.commit('',$3,$7,$5)} ; commit_arg : /* empty */ {$$ = ""} | STR {$$=$1} ; commitType : NORMAL { $$=yy.commitType.NORMAL;} | REVERSE { $$=yy.commitType.REVERSE;} | HIGHLIGHT { $$=yy.commitType.HIGHLIGHT;} ; directive : openDirective typeDirective closeDirective | openDirective typeDirective ':' argDirective closeDirective ; openDirective : open_directive { yy.parseDirective('%%{', 'open_directive'); } ; typeDirective : type_directive { yy.parseDirective($1, 'type_directive'); } ; argDirective : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } ; closeDirective : close_directive { yy.parseDirective('}%%', 'close_directive', 'gitGraph'); } ; eol : NL | ';' | EOF ; // reset_arg // : 'HEAD' reset_parents{$$ = $1+ ":" + $2 } // | ID reset_parents{$$ = $1+ ":" + yy.count; yy.count = 0} // ; // reset_parents // : /* empty */ {yy.count = 0} // | CARET reset_parents { yy.count += 1 } // ; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/git/styles.js000066400000000000000000000032251433273745700261060ustar00rootroot00000000000000const getStyles = (options) => ` .commit-id, .commit-msg, .branch-label { fill: lightgrey; color: lightgrey; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); } ${[0, 1, 2, 3, 4, 5, 6, 7] .map( (i) => ` .branch-label${i} { fill: ${options['gitBranchLabel' + i]}; } .commit${i} { stroke: ${options['git' + i]}; fill: ${options['git' + i]}; } .commit-highlight${i} { stroke: ${options['gitInv' + i]}; fill: ${options['gitInv' + i]}; } .label${i} { fill: ${options['git' + i]}; } .arrow${i} { stroke: ${options['git' + i]}; } ` ) .join('\n')} .branch { stroke-width: 1; stroke: ${options.lineColor}; stroke-dasharray: 2; } .commit-label { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelColor};} .commit-label-bkg { font-size: ${options.commitLabelFontSize}; fill: ${ options.commitLabelBackground }; opacity: 0.5; } .tag-label { font-size: ${options.tagLabelFontSize}; fill: ${options.tagLabelColor};} .tag-label-bkg { fill: ${options.tagLabelBackground}; stroke: ${options.tagLabelBorder}; } .tag-hole { fill: ${options.textColor}; } .commit-merge { stroke: ${options.primaryColor}; fill: ${options.primaryColor}; } .commit-reverse { stroke: ${options.primaryColor}; fill: ${options.primaryColor}; stroke-width: 3; } .commit-highlight-outer { } .commit-highlight-inner { stroke: ${options.primaryColor}; fill: ${options.primaryColor}; } .arrow { stroke-width: 8; stroke-linecap: round; fill: none} } `; export default getStyles; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/info/000077500000000000000000000000001433273745700243735ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/info/info.spec.js000066400000000000000000000005101433273745700266110ustar00rootroot00000000000000import { parser } from './parser/info'; import infoDb from './infoDb'; describe('when parsing an info graph it', function () { let ex; beforeEach(function () { ex = parser; ex.yy = infoDb; }); it('should handle an info definition', function () { let str = `info showInfo`; ex.parse(str); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/info/infoDb.js000066400000000000000000000011311433273745700261260ustar00rootroot00000000000000/** Created by knut on 15-01-14. */ import { log } from '../../logger'; import { clear } from '../../commonDb'; var message = ''; var info = false; export const setMessage = (txt) => { log.debug('Setting message to: ' + txt); message = txt; }; export const getMessage = () => { return message; }; export const setInfo = (inf) => { info = inf; }; export const getInfo = () => { return info; }; // export const parseError = (err, hash) => { // global.mermaidAPI.parseError(err, hash) // } export default { setMessage, getMessage, setInfo, getInfo, clear, // parseError }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/info/infoDetector.ts000066400000000000000000000002451433273745700273710ustar00rootroot00000000000000import type { DiagramDetector } from '../../diagram-api/types'; export const infoDetector: DiagramDetector = (txt) => { return txt.match(/^\s*info/) !== null; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/info/infoRenderer.js000066400000000000000000000030401433273745700273500ustar00rootroot00000000000000/** Created by knut on 14-12-11. */ import { select } from 'd3'; import { log } from '../../logger'; import { getConfig } from '../../config'; /** * Draws a an info picture in the tag with id: id based on the graph definition in text. * * @param {any} text * @param {any} id * @param {any} version * @param diagObj */ export const draw = (text, id, version, diagObj) => { try { // const parser = infoParser.parser; // parser.yy = db; log.debug('Rendering info diagram\n' + text); const securityLevel = getConfig().securityLevel; // Handle root and Document for when rendering in sanbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); // Parse the graph definition // parser.parse(text); // log.debug('Parsed info diagram'); // Fetch the default direction, use TD if none was found const svg = root.select('#' + id); const g = svg.append('g'); g.append('text') // text label for the x axis .attr('x', 100) .attr('y', 40) .attr('class', 'version') .attr('font-size', '32px') .style('text-anchor', 'middle') .text('v ' + version); svg.attr('height', 100); svg.attr('width', 400); // svg.attr('viewBox', '0 0 300 150'); } catch (e) { log.error('Error while rendering info diagram'); log.error(e.message); } }; export default { draw, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/info/parser/000077500000000000000000000000001433273745700256675ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/info/parser/info.jison000066400000000000000000000012121433273745700276620ustar00rootroot00000000000000/** mermaid * https://knsv.github.io/mermaid * (c) 2015 Knut Sveidqvist * MIT license. */ %lex %options case-insensitive %{ // Pre-lexer code can go here %} %% "info" return 'info' ; [\s\n\r]+ return 'NL' ; [\s]+ return 'space'; "showInfo" return 'showInfo'; <> return 'EOF' ; . return 'TXT' ; /lex %start start %% /* language grammar */ start // %{ : info document 'EOF' { return yy; } } : info document 'EOF' { return yy; } ; document : /* empty */ | document line ; line : statement { } | 'NL' ; statement : showInfo { yy.setInfo(true); } ; %% mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/info/styles.js000066400000000000000000000000671433273745700262570ustar00rootroot00000000000000const getStyles = () => ``; export default getStyles; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/pie/000077500000000000000000000000001433273745700242155ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/pie/parser/000077500000000000000000000000001433273745700255115ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/pie/parser/pie.jison000066400000000000000000000076161433273745700273440ustar00rootroot00000000000000/** mermaid * https://knsv.github.io/mermaid * (c) 2015 Knut Sveidqvist * MIT license. */ %lex %options case-insensitive %x string %x title %x open_directive %x type_directive %x arg_directive %x close_directive %x acc_title %x acc_descr %x acc_descr_multiline %% \%\%\{ { this.begin('open_directive'); return 'open_directive'; } ((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } ":" { this.popState(); this.begin('arg_directive'); return ':'; } \}\%\% { this.popState(); this.popState(); return 'close_directive'; } ((?:(?!\}\%\%).|\n)*) return 'arg_directive'; \%\%(?!\{)[^\n]* /* skip comments */ [^\}]\%\%[^\n]* /* skip comments */{ /*console.log('');*/ } [\n\r]+ return 'NEWLINE'; \%\%[^\n]* /* do nothing */ [\s]+ /* ignore */ title { this.begin("title");return 'title'; } (?!\n|;|#)*[^\n]* { this.popState(); return "title_value"; } accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } <acc_title>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } <acc_descr>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} <acc_descr_multiline>[\}] { this.popState(); } <acc_descr_multiline>[^\}]* return "acc_descr_multiline_value"; ["] { this.begin("string"); } <string>["] { this.popState(); } <string>[^"]* { return "txt"; } "pie" return 'PIE'; "showData" return 'showData'; ":"[\s]*[\d]+(?:\.[\d]+)? return "value"; <<EOF>> return 'EOF'; /lex %start start %% /* language grammar */ start : eol start | directive start | PIE document | PIE showData document {yy.setShowData(true);} ; document : /* empty */ | document line ; line : statement eol { $$ = $1 } ; statement : | txt value { yy.addSection($1,yy.cleanupValue($2)); } | title title_value { $$=$2.trim();yy.setDiagramTitle($$); } | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } | section {yy.addSection($1.substr(8));$$=$1.substr(8);} | directive ; directive : openDirective typeDirective closeDirective | openDirective typeDirective ':' argDirective closeDirective ; eol : NEWLINE | ';' | EOF ; openDirective : open_directive { yy.parseDirective('%%{', 'open_directive'); } ; typeDirective : type_directive { yy.parseDirective($1, 'type_directive'); } ; argDirective : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } ; closeDirective : close_directive { yy.parseDirective('}%%', 'close_directive', 'pie'); } ; %% ������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/pie/parser/pie.spec.js���������������������0000664�0000000�0000000�00000006756�14332737457�0027573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import pieDb from '../pieDb'; import pie from './pie'; import { setConfig } from '../../../config'; setConfig({ securityLevel: 'strict', }); describe('when parsing pie', function () { beforeEach(function () { pie.parser.yy = pieDb; pie.parser.yy.clear(); }); it('should handle very simple pie', function () { const res = pie.parser.parse(`pie "ash" : 100 `); const sections = pieDb.getSections(); const section1 = sections['ash']; expect(section1).toBe(100); }); it('should handle simple pie', function () { const res = pie.parser.parse(`pie "ash" : 60 "bat" : 40 `); const sections = pieDb.getSections(); const section1 = sections['ash']; expect(section1).toBe(60); }); it('should handle simple pie with comments', function () { const res = pie.parser.parse(`pie %% comments "ash" : 60 "bat" : 40 `); const sections = pieDb.getSections(); const section1 = sections['ash']; expect(section1).toBe(60); }); it('should handle simple pie with a directive', function () { const res = pie.parser.parse(`%%{init: {'logLevel':0}}%% pie "ash" : 60 "bat" : 40 `); const sections = pieDb.getSections(); const section1 = sections['ash']; expect(section1).toBe(60); }); it('should handle simple pie with a title', function () { const res = pie.parser.parse(`pie title a 60/40 pie "ash" : 60 "bat" : 40 `); const sections = pieDb.getSections(); const title = pieDb.getDiagramTitle(); const section1 = sections['ash']; expect(section1).toBe(60); expect(title).toBe('a 60/40 pie'); }); it('should handle simple pie without an acc description (accDescr)', function () { const res = pie.parser.parse(`pie title a neat chart "ash" : 60 "bat" : 40 `); const sections = pieDb.getSections(); const title = pieDb.getDiagramTitle(); const description = pieDb.getAccDescription(); const section1 = sections['ash']; expect(section1).toBe(60); expect(title).toBe('a neat chart'); expect(description).toBe(''); }); it('should handle simple pie with an acc description (accDescr)', function () { const res = pie.parser.parse(`pie title a neat chart accDescr: a neat description "ash" : 60 "bat" : 40 `); const sections = pieDb.getSections(); const title = pieDb.getDiagramTitle(); const description = pieDb.getAccDescription(); const section1 = sections['ash']; expect(section1).toBe(60); expect(title).toBe('a neat chart'); expect(description).toBe('a neat description'); }); it('should handle simple pie with a multiline acc description (accDescr)', function () { const res = pie.parser.parse(`pie title a neat chart accDescr { a neat description on multiple lines } "ash" : 60 "bat" : 40 `); const sections = pieDb.getSections(); const title = pieDb.getDiagramTitle(); const description = pieDb.getAccDescription(); const section1 = sections['ash']; expect(section1).toBe(60); expect(title).toBe('a neat chart'); expect(description).toBe('a neat description\non multiple lines'); }); it('should handle simple pie with positive decimal', function () { const res = pie.parser.parse(`pie "ash" : 60.67 "bat" : 40 `); const sections = pieDb.getSections(); const section1 = sections['ash']; expect(section1).toBe(60.67); }); it('should handle simple pie with negative decimal', function () { expect(() => { pie.parser.parse(`pie "ash" : 60.67 "bat" : 40..12 `); }).toThrowError(); }); }); ������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/pie/pieDb.js�������������������������������0000664�0000000�0000000�00000002650�14332737457�0025601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { log } from '../../logger'; import mermaidAPI from '../../mermaidAPI'; import * as configApi from '../../config'; import common from '../common/common'; import { setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle, getAccDescription, setAccDescription, clear as commonClear, } from '../../commonDb'; let sections = {}; let showData = false; export const parseDirective = function (statement, context, type) { mermaidAPI.parseDirective(this, statement, context, type); }; const addSection = function (id, value) { id = common.sanitizeText(id, configApi.getConfig()); if (typeof sections[id] === 'undefined') { sections[id] = value; log.debug('Added new section :', id); } }; const getSections = () => sections; const setShowData = function (toggle) { showData = toggle; }; const getShowData = function () { return showData; }; const cleanupValue = function (value) { if (value.substring(0, 1) === ':') { value = value.substring(1).trim(); return Number(value.trim()); } else { return Number(value.trim()); } }; const clear = function () { sections = {}; showData = false; commonClear(); }; export default { parseDirective, getConfig: () => configApi.getConfig().pie, addSection, getSections, cleanupValue, clear, setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle, setShowData, getShowData, getAccDescription, setAccDescription, }; ����������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/pie/pieDetector.ts�������������������������0000664�0000000�0000000�00000000243�14332737457�0027033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import type { DiagramDetector } from '../../diagram-api/types'; export const pieDetector: DiagramDetector = (txt) => { return txt.match(/^\s*pie/) !== null; }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/pie/pieRenderer.js�������������������������0000664�0000000�0000000�00000012044�14332737457�0027020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** Created by AshishJ on 11-09-2019. */ import { select, scaleOrdinal, pie as d3pie, arc } from 'd3'; import { log } from '../../logger'; import { configureSvgSize } from '../../setupGraphViewbox'; import * as configApi from '../../config'; import addSVGAccessibilityFields from '../../accessibility'; let conf = configApi.getConfig(); /** * Draws a Pie Chart with the data given in text. * * @param text * @param id */ let width; const height = 450; export const draw = (txt, id, _version, diagObj) => { try { conf = configApi.getConfig(); log.debug('Rendering info diagram\n' + txt); const securityLevel = configApi.getConfig().securityLevel; // Handle root and Document for when rendering in sanbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; // Parse the Pie Chart definition diagObj.db.clear(); diagObj.parser.parse(txt); log.debug('Parsed info diagram'); const elem = doc.getElementById(id); width = elem.parentElement.offsetWidth; if (typeof width === 'undefined') { width = 1200; } if (typeof conf.useWidth !== 'undefined') { width = conf.useWidth; } if (typeof conf.pie.useWidth !== 'undefined') { width = conf.pie.useWidth; } const diagram = root.select('#' + id); configureSvgSize(diagram, height, width, conf.pie.useMaxWidth); addSVGAccessibilityFields(diagObj.db, diagram, id); // Set viewBox elem.setAttribute('viewBox', '0 0 ' + width + ' ' + height); // Fetch the default direction, use TD if none was found var margin = 40; var legendRectSize = 18; var legendSpacing = 4; var radius = Math.min(width, height) / 2 - margin; var svg = diagram .append('g') .attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')'); var data = diagObj.db.getSections(); var sum = 0; Object.keys(data).forEach(function (key) { sum += data[key]; }); const themeVariables = conf.themeVariables; var myGeneratedColors = [ themeVariables.pie1, themeVariables.pie2, themeVariables.pie3, themeVariables.pie4, themeVariables.pie5, themeVariables.pie6, themeVariables.pie7, themeVariables.pie8, themeVariables.pie9, themeVariables.pie10, themeVariables.pie11, themeVariables.pie12, ]; // Set the color scale var color = scaleOrdinal().range(myGeneratedColors); // Compute the position of each group on the pie: var pie = d3pie().value(function (d) { return d[1]; }); var dataReady = pie(Object.entries(data)); // Shape helper to build arcs: var arcGenerator = arc().innerRadius(0).outerRadius(radius); // Build the pie chart: each part of the pie is a path that we build using the arc function. svg .selectAll('mySlices') .data(dataReady) .enter() .append('path') .attr('d', arcGenerator) .attr('fill', function (d) { return color(d.data[0]); }) .attr('class', 'pieCircle'); // Now add the percentage. // Use the centroid method to get the best coordinates. svg .selectAll('mySlices') .data(dataReady) .enter() .append('text') .text(function (d) { return ((d.data[1] / sum) * 100).toFixed(0) + '%'; }) .attr('transform', function (d) { return 'translate(' + arcGenerator.centroid(d) + ')'; }) .style('text-anchor', 'middle') .attr('class', 'slice'); svg .append('text') .text(diagObj.db.getDiagramTitle()) .attr('x', 0) .attr('y', -(height - 50) / 2) .attr('class', 'pieTitleText'); // Add the legends/annotations for each section var legend = svg .selectAll('.legend') .data(color.domain()) .enter() .append('g') .attr('class', 'legend') .attr('transform', function (d, i) { var height = legendRectSize + legendSpacing; var offset = (height * color.domain().length) / 2; var horz = 12 * legendRectSize; var vert = i * height - offset; return 'translate(' + horz + ',' + vert + ')'; }); legend .append('rect') .attr('width', legendRectSize) .attr('height', legendRectSize) .style('fill', color) .style('stroke', color); legend .data(dataReady) .append('text') .attr('x', legendRectSize + legendSpacing) .attr('y', legendRectSize - legendSpacing) .text(function (d) { if (diagObj.db.getShowData() || conf.showData || conf.pie.showData) { return d.data[0] + ' [' + d.data[1] + ']'; } else { return d.data[0]; } }); } catch (e) { log.error('Error while rendering info diagram'); log.error(e); } }; export default { draw, }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/pie/styles.js������������������������������0000664�0000000�0000000�00000001255�14332737457�0026101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const getStyles = (options) => ` .pieCircle{ stroke: ${options.pieStrokeColor}; stroke-width : ${options.pieStrokeWidth}; opacity : ${options.pieOpacity}; } .pieTitleText { text-anchor: middle; font-size: ${options.pieTitleTextSize}; fill: ${options.pieTitleTextColor}; font-family: ${options.fontFamily}; } .slice { font-family: ${options.fontFamily}; fill: ${options.pieSectionTextColor}; font-size:${options.pieSectionTextSize}; // fill: white; } .legend text { fill: ${options.pieLegendTextColor}; font-family: ${options.fontFamily}; font-size: ${options.pieLegendTextSize}; } `; export default getStyles; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/requirement/�������������������������������0000775�0000000�0000000�00000000000�14332737457�0026000�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/requirement/parser/������������������������0000775�0000000�0000000�00000000000�14332737457�0027274�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/requirement/parser/requirementDiagram.jison0000664�0000000�0000000�00000015605�14332737457�0034174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** mermaid * https://knsv.github.io/mermaid * (c) 2015 Knut Sveidqvist * MIT license. */ %lex %options case-insensitive %x string %x token %x unqString %x open_directive %x type_directive %x arg_directive %x close_directive %x acc_title %x acc_descr %x acc_descr_multiline %% \%\%\{ { this.begin('open_directive'); return 'open_directive'; } <open_directive>((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } <type_directive>":" { this.popState(); this.begin('arg_directive'); return ':'; } <type_directive,arg_directive>\}\%\% { this.popState(); this.popState(); return 'close_directive'; } <arg_directive>((?:(?!\}\%\%).|\n)*) return 'arg_directive'; "title"\s[^#\n;]+ return 'title'; accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } <acc_title>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } <acc_descr>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} <acc_descr_multiline>[\}] { this.popState(); } <acc_descr_multiline>[^\}]* return "acc_descr_multiline_value"; (\r?\n)+ return 'NEWLINE'; \s+ /* skip all whitespace */ \#[^\n]* /* skip comments */ \%%[^\n]* /* skip comments */ <<EOF>> return 'EOF'; "requirementDiagram" return 'RD'; "{" return 'STRUCT_START'; "}" return 'STRUCT_STOP'; ":" return 'COLONSEP'; "id" return 'ID'; "text" return 'TEXT'; "risk" return 'RISK'; "verifyMethod" return 'VERIFYMTHD'; "requirement" return 'REQUIREMENT'; "functionalRequirement" return 'FUNCTIONAL_REQUIREMENT'; "interfaceRequirement" return 'INTERFACE_REQUIREMENT'; "performanceRequirement" return 'PERFORMANCE_REQUIREMENT'; "physicalRequirement" return 'PHYSICAL_REQUIREMENT'; "designConstraint" return 'DESIGN_CONSTRAINT'; "low" return 'LOW_RISK'; "medium" return 'MED_RISK'; "high" return 'HIGH_RISK'; "analysis" return 'VERIFY_ANALYSIS'; "demonstration" return 'VERIFY_DEMONSTRATION'; "inspection" return 'VERIFY_INSPECTION'; "test" return 'VERIFY_TEST'; "element" return 'ELEMENT'; "contains" return 'CONTAINS'; "copies" return 'COPIES'; "derives" return 'DERIVES'; "satisfies" return 'SATISFIES'; "verifies" return 'VERIFIES'; "refines" return 'REFINES'; "traces" return 'TRACES'; "type" return 'TYPE'; "docref" return 'DOCREF'; "<-" return 'END_ARROW_L'; "->" {return 'END_ARROW_R';} "-" {return 'LINE';} ["] { this.begin("string"); } <string>["] { this.popState(); } <string>[^"]* { return "qString"; } [\w][^\r\n\{\<\>\-\=]* { yytext = yytext.trim(); return 'unqString';} /lex %start start %% /* language grammar */ start : directive NEWLINE start | directive start | RD NEWLINE diagram EOF; directive : openDirective typeDirective closeDirective | openDirective typeDirective ':' argDirective closeDirective | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } ; openDirective : open_directive { yy.parseDirective('%%{', 'open_directive'); }; typeDirective : type_directive { yy.parseDirective($1, 'type_directive'); }; argDirective : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); }; closeDirective : close_directive { yy.parseDirective('}%%', 'close_directive', 'pie'); }; diagram : /* empty */ { $$ = [] } | requirementDef diagram | elementDef diagram | relationshipDef diagram | directive diagram | NEWLINE diagram; requirementDef : requirementType requirementName STRUCT_START NEWLINE requirementBody { yy.addRequirement($2, $1) }; requirementBody : ID COLONSEP id NEWLINE requirementBody { yy.setNewReqId($3); } | TEXT COLONSEP text NEWLINE requirementBody { yy.setNewReqText($3); } | RISK COLONSEP riskLevel NEWLINE requirementBody { yy.setNewReqRisk($3); } | VERIFYMTHD COLONSEP verifyType NEWLINE requirementBody { yy.setNewReqVerifyMethod($3); } | NEWLINE requirementBody | STRUCT_STOP; requirementType : REQUIREMENT { $$=yy.RequirementType.REQUIREMENT;} | FUNCTIONAL_REQUIREMENT { $$=yy.RequirementType.FUNCTIONAL_REQUIREMENT;} | INTERFACE_REQUIREMENT { $$=yy.RequirementType.INTERFACE_REQUIREMENT;} | PERFORMANCE_REQUIREMENT { $$=yy.RequirementType.PERFORMANCE_REQUIREMENT;} | PHYSICAL_REQUIREMENT { $$=yy.RequirementType.PHYSICAL_REQUIREMENT;} | DESIGN_CONSTRAINT { $$=yy.RequirementType.DESIGN_CONSTRAINT;}; riskLevel : LOW_RISK { $$=yy.RiskLevel.LOW_RISK;} | MED_RISK { $$=yy.RiskLevel.MED_RISK;} | HIGH_RISK { $$=yy.RiskLevel.HIGH_RISK;}; verifyType : VERIFY_ANALYSIS { $$=yy.VerifyType.VERIFY_ANALYSIS;} | VERIFY_DEMONSTRATION { $$=yy.VerifyType.VERIFY_DEMONSTRATION;} | VERIFY_INSPECTION { $$=yy.VerifyType.VERIFY_INSPECTION;} | VERIFY_TEST { $$=yy.VerifyType.VERIFY_TEST;}; elementDef : ELEMENT elementName STRUCT_START NEWLINE elementBody { yy.addElement($2) }; elementBody : TYPE COLONSEP type NEWLINE elementBody { yy.setNewElementType($3); } | DOCREF COLONSEP ref NEWLINE elementBody { yy.setNewElementDocRef($3); } | NEWLINE elementBody | STRUCT_STOP; relationshipDef : id END_ARROW_L relationship LINE id { yy.addRelationship($3, $5, $1) } | id LINE relationship END_ARROW_R id { yy.addRelationship($3, $1, $5) }; relationship : CONTAINS { $$=yy.Relationships.CONTAINS;} | COPIES { $$=yy.Relationships.COPIES;} | DERIVES { $$=yy.Relationships.DERIVES;} | SATISFIES { $$=yy.Relationships.SATISFIES;} | VERIFIES { $$=yy.Relationships.VERIFIES;} | REFINES { $$=yy.Relationships.REFINES;} | TRACES { $$=yy.Relationships.TRACES;}; requirementName: unqString | qString; id : unqString | qString; text : unqString | qString; elementName : unqString | qString; type : unqString | qString; ref : unqString | qString; %% ���������������������������������������������������������������������������������������������������������������������������requirementDiagram.spec.js��������������������������������������������������������������������������0000664�0000000�0000000�00000045043�14332737457�0034337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/requirement/parser��������������������������������������������������������������������������������������������import { setConfig } from '../../../config'; import requirementDb from '../requirementDb'; import reqDiagram from './requirementDiagram'; setConfig({ securityLevel: 'strict', }); describe('when parsing requirement diagram it...', function () { beforeEach(function () { reqDiagram.parser.yy = requirementDb; reqDiagram.parser.yy.clear(); }); it('will accept full requirement definition', function () { const expectedName = 'test_req'; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.HIGH_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_ANALYSIS; let lines = [ `requirementDiagram`, ``, `requirement ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); expect(Object.keys(requirementDb.getRequirements()).length).toBe(1); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.id).toBe(expectedId); expect(foundReq.text).toBe(expectedText); expect(Object.keys(requirementDb.getElements()).length).toBe(0); expect(Object.keys(requirementDb.getRelationships()).length).toBe(0); }); it('will accept full element definition', function () { const expectedName = 'test_el'; const expectedType = 'test_type'; const expectedDocRef = 'test_ref'; let lines = [ `requirementDiagram`, ``, `element ${expectedName} {`, `type: ${expectedType}`, `docref: ${expectedDocRef}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); expect(Object.keys(requirementDb.getRequirements()).length).toBe(0); expect(Object.keys(requirementDb.getElements()).length).toBe(1); let foundElement = requirementDb.getElements()[expectedName]; expect(foundElement).toBeDefined(); expect(foundElement.type).toBe(expectedType); expect(foundElement.docRef).toBe(expectedDocRef); expect(Object.keys(requirementDb.getRelationships()).length).toBe(0); }); it('will use a accessibility title and description (accDescr)', function () { const expectedTitle = 'test title'; const expectedAccDescription = 'my chart description'; const doc = `requirementDiagram accTitle: ${expectedTitle} accDescr: ${expectedAccDescription} element test_name { type: test_type docref: test_ref }`; reqDiagram.parser.parse(doc); expect(requirementDb.getAccTitle()).toBe(expectedTitle); expect(requirementDb.getAccDescription()).toBe(expectedAccDescription); }); it('will use a accessibility title and multiline description (accDescr)', function () { const expectedTitle = 'test title'; const expectedAccDescription = `my chart description line 2`; const doc = `requirementDiagram accTitle: ${expectedTitle} accDescr { ${expectedAccDescription} } element test_name { type: test_type docref: test_ref }`; reqDiagram.parser.parse(doc); expect(requirementDb.getAccTitle()).toBe(expectedTitle); expect(requirementDb.getAccDescription()).toBe(expectedAccDescription); }); it('will accept full relationship definition', function () { const expectedSrc = 'a'; const expectedDest = 'b'; const expectedType = requirementDb.Relationships.CONTAINS; let lines = [`requirementDiagram`, ``, `${expectedSrc} - ${expectedType} -> ${expectedDest}`]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); expect(Object.keys(requirementDb.getRequirements()).length).toBe(0); expect(Object.keys(requirementDb.getElements()).length).toBe(0); expect(Object.keys(requirementDb.getRelationships()).length).toBe(1); let foundRelationship = requirementDb.getRelationships()[0]; expect(foundRelationship.src).toBe(expectedSrc); expect(foundRelationship.dst).toBe(expectedDest); }); it('will accept "requirement" type of requirement definition', function () { const expectedName = 'test_req'; const expectedType = requirementDb.RequirementType.REQUIREMENT; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.HIGH_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_ANALYSIS; let lines = [ `requirementDiagram`, ``, `requirement ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.type).toBe(expectedType); }); it('will accept "functionalRequirement" type of requirement definition', function () { const expectedName = 'test_req'; const expectedType = requirementDb.RequirementType.FUNCTIONAL_REQUIREMENT; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.HIGH_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_ANALYSIS; let lines = [ `requirementDiagram`, ``, `functionalRequirement ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.type).toBe(expectedType); }); it('will accept "interfaceRequirement" type of requirement definition', function () { const expectedName = 'test_req'; const expectedType = requirementDb.RequirementType.INTERFACE_REQUIREMENT; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.HIGH_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_ANALYSIS; let lines = [ `requirementDiagram`, ``, `interfaceRequirement ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.type).toBe(expectedType); }); it('will accept "performanceRequirement" type of requirement definition', function () { const expectedName = 'test_req'; const expectedType = requirementDb.RequirementType.PERFORMANCE_REQUIREMENT; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.HIGH_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_ANALYSIS; let lines = [ `requirementDiagram`, ``, `performanceRequirement ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.type).toBe(expectedType); }); it('will accept "physicalRequirement" type of requirement definition', function () { const expectedName = 'test_req'; const expectedType = requirementDb.RequirementType.PHYSICAL_REQUIREMENT; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.HIGH_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_ANALYSIS; let lines = [ `requirementDiagram`, ``, `physicalRequirement ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.type).toBe(expectedType); }); it('will accept "designConstraint" type of requirement definition', function () { const expectedName = 'test_req'; const expectedType = requirementDb.RequirementType.DESIGN_CONSTRAINT; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.HIGH_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_ANALYSIS; let lines = [ `requirementDiagram`, ``, `designConstraint ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.type).toBe(expectedType); }); it('will accept "low" type of risk requirement definition', function () { const expectedName = 'test_req'; const expectedType = 'designConstraint'; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.LOW_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_ANALYSIS; let lines = [ `requirementDiagram`, ``, `${expectedType} ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.risk).toBe(expectedRisk); }); it('will accept "medium" type of risk requirement definition', function () { const expectedName = 'test_req'; const expectedType = 'designConstraint'; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.MED_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_ANALYSIS; let lines = [ `requirementDiagram`, ``, `${expectedType} ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.risk).toBe(expectedRisk); }); it('will accept "high" type of risk requirement definition', function () { const expectedName = 'test_req'; const expectedType = 'designConstraint'; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.HIGH_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_ANALYSIS; let lines = [ `requirementDiagram`, ``, `${expectedType} ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.risk).toBe(expectedRisk); }); it('will accept "Analysis" type of verification method requirement definition', function () { const expectedName = 'test_req'; const expectedType = 'designConstraint'; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.HIGH_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_ANALYSIS; let lines = [ `requirementDiagram`, ``, `${expectedType} ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.verifyMethod).toBe(expectedVerifyMethod); }); it('will accept "Inspection" type of verification method requirement definition', function () { const expectedName = 'test_req'; const expectedType = 'designConstraint'; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.HIGH_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_INSPECTION; let lines = [ `requirementDiagram`, ``, `${expectedType} ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.verifyMethod).toBe(expectedVerifyMethod); }); it('will accept "Test" type of verification method requirement definition', function () { const expectedName = 'test_req'; const expectedType = 'designConstraint'; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.HIGH_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_TEST; let lines = [ `requirementDiagram`, ``, `${expectedType} ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.verifyMethod).toBe(expectedVerifyMethod); }); it('will accept "Demonstration" type of verification method requirement definition', function () { const expectedName = 'test_req'; const expectedType = requirementDb.RequirementType.DESIGN_CONSTRAINT; const expectedId = 'test_id'; const expectedText = 'the test text.'; const expectedRisk = requirementDb.RiskLevel.HIGH_RISK; const expectedVerifyMethod = requirementDb.VerifyType.VERIFY_DEMONSTRATION; let lines = [ `requirementDiagram`, ``, `designConstraint ${expectedName} {`, `id: ${expectedId}`, `text: ${expectedText}`, `risk: ${expectedRisk}`, `verifymethod: ${expectedVerifyMethod}`, `}`, ]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundReq = requirementDb.getRequirements()[expectedName]; expect(foundReq).toBeDefined(); expect(foundReq.verifyMethod).toBe(expectedVerifyMethod); }); it('will accept contains relationship definition', function () { const expectedSrc = 'a'; const expectedDest = 'b'; const expectedType = requirementDb.Relationships.CONTAINS; let lines = [`requirementDiagram`, ``, `${expectedSrc} - ${expectedType} -> ${expectedDest}`]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundRelationship = requirementDb.getRelationships()[0]; expect(foundRelationship.type).toBe(expectedType); }); it('will accept copies relationship definition', function () { const expectedSrc = 'a'; const expectedDest = 'b'; const expectedType = requirementDb.Relationships.COPIES; let lines = [`requirementDiagram`, ``, `${expectedSrc} - ${expectedType} -> ${expectedDest}`]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundRelationship = requirementDb.getRelationships()[0]; expect(foundRelationship.type).toBe(expectedType); }); it('will accept derives relationship definition', function () { const expectedSrc = 'a'; const expectedDest = 'b'; const expectedType = requirementDb.Relationships.DERIVES; let lines = [`requirementDiagram`, ``, `${expectedSrc} - ${expectedType} -> ${expectedDest}`]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundRelationship = requirementDb.getRelationships()[0]; expect(foundRelationship.type).toBe(expectedType); }); it('will accept satisfies relationship definition', function () { const expectedSrc = 'a'; const expectedDest = 'b'; const expectedType = requirementDb.Relationships.SATISFIES; let lines = [`requirementDiagram`, ``, `${expectedSrc} - ${expectedType} -> ${expectedDest}`]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundRelationship = requirementDb.getRelationships()[0]; expect(foundRelationship.type).toBe(expectedType); }); it('will accept verifies relationship definition', function () { const expectedSrc = 'a'; const expectedDest = 'b'; const expectedType = requirementDb.Relationships.VERIFIES; let lines = [`requirementDiagram`, ``, `${expectedSrc} - ${expectedType} -> ${expectedDest}`]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundRelationship = requirementDb.getRelationships()[0]; expect(foundRelationship.type).toBe(expectedType); }); it('will accept refines relationship definition', function () { const expectedSrc = 'a'; const expectedDest = 'b'; const expectedType = requirementDb.Relationships.REFINES; let lines = [`requirementDiagram`, ``, `${expectedSrc} - ${expectedType} -> ${expectedDest}`]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundRelationship = requirementDb.getRelationships()[0]; expect(foundRelationship.type).toBe(expectedType); }); it('will accept traces relationship definition', function () { const expectedSrc = 'a'; const expectedDest = 'b'; const expectedType = requirementDb.Relationships.TRACES; let lines = [`requirementDiagram`, ``, `${expectedSrc} - ${expectedType} -> ${expectedDest}`]; let doc = lines.join('\n'); reqDiagram.parser.parse(doc); let foundRelationship = requirementDb.getRelationships()[0]; expect(foundRelationship.type).toBe(expectedType); }); }); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/requirement/requirementDb.js���������������0000664�0000000�0000000�00000006665�14332737457�0031161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import * as configApi from '../../config'; import { log } from '../../logger'; import mermaidAPI from '../../mermaidAPI'; import { setAccTitle, getAccTitle, getAccDescription, setAccDescription, clear as commonClear, } from '../../commonDb'; let relations = []; let latestRequirement = {}; let requirements = {}; let latestElement = {}; let elements = {}; const RequirementType = { REQUIREMENT: 'Requirement', FUNCTIONAL_REQUIREMENT: 'Functional Requirement', INTERFACE_REQUIREMENT: 'Interface Requirement', PERFORMANCE_REQUIREMENT: 'Performance Requirement', PHYSICAL_REQUIREMENT: 'Physical Requirement', DESIGN_CONSTRAINT: 'Design Constraint', }; const RiskLevel = { LOW_RISK: 'Low', MED_RISK: 'Medium', HIGH_RISK: 'High', }; const VerifyType = { VERIFY_ANALYSIS: 'Analysis', VERIFY_DEMONSTRATION: 'Demonstration', VERIFY_INSPECTION: 'Inspection', VERIFY_TEST: 'Test', }; const Relationships = { CONTAINS: 'contains', COPIES: 'copies', DERIVES: 'derives', SATISFIES: 'satisfies', VERIFIES: 'verifies', REFINES: 'refines', TRACES: 'traces', }; export const parseDirective = function (statement, context, type) { mermaidAPI.parseDirective(this, statement, context, type); }; const addRequirement = (name, type) => { if (typeof requirements[name] === 'undefined') { requirements[name] = { name, type, id: latestRequirement.id, text: latestRequirement.text, risk: latestRequirement.risk, verifyMethod: latestRequirement.verifyMethod, }; } latestRequirement = {}; return requirements[name]; }; const getRequirements = () => requirements; const setNewReqId = (id) => { if (typeof latestRequirement != 'undefined') { latestRequirement.id = id; } }; const setNewReqText = (text) => { if (typeof latestRequirement != 'undefined') { latestRequirement.text = text; } }; const setNewReqRisk = (risk) => { if (typeof latestRequirement != 'undefined') { latestRequirement.risk = risk; } }; const setNewReqVerifyMethod = (verifyMethod) => { if (typeof latestRequirement != 'undefined') { latestRequirement.verifyMethod = verifyMethod; } }; const addElement = (name) => { if (typeof elements[name] === 'undefined') { elements[name] = { name, type: latestElement.type, docRef: latestElement.docRef, }; log.info('Added new requirement: ', name); } latestElement = {}; return elements[name]; }; const getElements = () => elements; const setNewElementType = (type) => { if (typeof latestElement != 'undefined') { latestElement.type = type; } }; const setNewElementDocRef = (docRef) => { if (typeof latestElement != 'undefined') { latestElement.docRef = docRef; } }; const addRelationship = (type, src, dst) => { relations.push({ type, src, dst, }); }; const getRelationships = () => relations; const clear = () => { relations = []; latestRequirement = {}; requirements = {}; latestElement = {}; elements = {}; commonClear(); }; export default { RequirementType, RiskLevel, VerifyType, Relationships, parseDirective, getConfig: () => configApi.getConfig().req, addRequirement, getRequirements, setNewReqId, setNewReqText, setNewReqRisk, setNewReqVerifyMethod, setAccTitle, getAccTitle, setAccDescription, getAccDescription, addElement, getElements, setNewElementType, setNewElementDocRef, addRelationship, getRelationships, clear, }; ���������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/requirement/requirementDetector.ts���������0000664�0000000�0000000�00000000275�14332737457�0032406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import type { DiagramDetector } from '../../diagram-api/types'; export const requirementDetector: DiagramDetector = (txt) => { return txt.match(/^\s*requirement(Diagram)?/) !== null; }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/requirement/requirementMarkers.js����������0000664�0000000�0000000�00000003417�14332737457�0032230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const ReqMarkers = { CONTAINS: 'contains', ARROW: 'arrow', }; const insertLineEndings = (parentNode, conf) => { let containsNode = parentNode .append('defs') .append('marker') .attr('id', ReqMarkers.CONTAINS + '_line_ending') .attr('refX', 0) .attr('refY', conf.line_height / 2) .attr('markerWidth', conf.line_height) .attr('markerHeight', conf.line_height) .attr('orient', 'auto') .append('g'); containsNode .append('circle') .attr('cx', conf.line_height / 2) .attr('cy', conf.line_height / 2) .attr('r', conf.line_height / 2) // .attr('stroke', conf.rect_border_color) // .attr('stroke-width', 1) .attr('fill', 'none'); containsNode .append('line') .attr('x1', 0) .attr('x2', conf.line_height) .attr('y1', conf.line_height / 2) .attr('y2', conf.line_height / 2) // .attr('stroke', conf.rect_border_color) .attr('stroke-width', 1); containsNode .append('line') .attr('y1', 0) .attr('y2', conf.line_height) .attr('x1', conf.line_height / 2) .attr('x2', conf.line_height / 2) // .attr('stroke', conf.rect_border_color) .attr('stroke-width', 1); parentNode .append('defs') .append('marker') .attr('id', ReqMarkers.ARROW + '_line_ending') .attr('refX', conf.line_height) .attr('refY', 0.5 * conf.line_height) .attr('markerWidth', conf.line_height) .attr('markerHeight', conf.line_height) .attr('orient', 'auto') .append('path') .attr( 'd', `M0,0 L${conf.line_height},${conf.line_height / 2} M${conf.line_height},${conf.line_height / 2} L0,${conf.line_height}` ) .attr('stroke-width', 1); // .attr('stroke', conf.rect_border_color); }; export default { ReqMarkers, insertLineEndings, }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/requirement/requirementRenderer.js���������0000664�0000000�0000000�00000023423�14332737457�0032371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { line, select } from 'd3'; import dagre from 'dagre'; import graphlib from 'graphlib'; import { log } from '../../logger'; import { configureSvgSize } from '../../setupGraphViewbox'; import common from '../common/common'; import markers from './requirementMarkers'; import { getConfig } from '../../config'; import addSVGAccessibilityFields from '../../accessibility'; let conf = {}; let relCnt = 0; const newRectNode = (parentNode, id) => { return parentNode .insert('rect', '#' + id) .attr('class', 'req reqBox') .attr('x', 0) .attr('y', 0) .attr('width', conf.rect_min_width + 'px') .attr('height', conf.rect_min_height + 'px'); }; const newTitleNode = (parentNode, id, txts) => { let x = conf.rect_min_width / 2; let title = parentNode .append('text') .attr('class', 'req reqLabel reqTitle') .attr('id', id) .attr('x', x) .attr('y', conf.rect_padding) .attr('dominant-baseline', 'hanging'); // .attr( // 'style', // 'font-family: ' + configApi.getConfig().fontFamily + '; font-size: ' + conf.fontSize + 'px' // ) let i = 0; txts.forEach((textStr) => { if (i == 0) { title .append('tspan') .attr('text-anchor', 'middle') .attr('x', conf.rect_min_width / 2) .attr('dy', 0) .text(textStr); } else { title .append('tspan') .attr('text-anchor', 'middle') .attr('x', conf.rect_min_width / 2) .attr('dy', conf.line_height * 0.75) .text(textStr); } i++; }); let yPadding = 1.5 * conf.rect_padding; let linePadding = i * conf.line_height * 0.75; let totalY = yPadding + linePadding; parentNode .append('line') .attr('class', 'req-title-line') .attr('x1', '0') .attr('x2', conf.rect_min_width) .attr('y1', totalY) .attr('y2', totalY); return { titleNode: title, y: totalY, }; }; const newBodyNode = (parentNode, id, txts, yStart) => { let body = parentNode .append('text') .attr('class', 'req reqLabel') .attr('id', id) .attr('x', conf.rect_padding) .attr('y', yStart) .attr('dominant-baseline', 'hanging'); // .attr( // 'style', // 'font-family: ' + configApi.getConfig().fontFamily + '; font-size: ' + conf.fontSize + 'px' // ); let currentRow = 0; const charLimit = 30; let wrappedTxts = []; txts.forEach((textStr) => { let currentTextLen = textStr.length; while (currentTextLen > charLimit && currentRow < 3) { let firstPart = textStr.substring(0, charLimit); textStr = textStr.substring(charLimit, textStr.length); currentTextLen = textStr.length; wrappedTxts[wrappedTxts.length] = firstPart; currentRow++; } if (currentRow == 3) { let lastStr = wrappedTxts[wrappedTxts.length - 1]; wrappedTxts[wrappedTxts.length - 1] = lastStr.substring(0, lastStr.length - 4) + '...'; } else { wrappedTxts[wrappedTxts.length] = textStr; } currentRow = 0; }); wrappedTxts.forEach((textStr) => { body.append('tspan').attr('x', conf.rect_padding).attr('dy', conf.line_height).text(textStr); }); return body; }; const addEdgeLabel = (parentNode, svgPath, conf, txt) => { // Find the half-way point const len = svgPath.node().getTotalLength(); const labelPoint = svgPath.node().getPointAtLength(len * 0.5); // Append a text node containing the label const labelId = 'rel' + relCnt; relCnt++; const labelNode = parentNode .append('text') .attr('class', 'req relationshipLabel') .attr('id', labelId) .attr('x', labelPoint.x) .attr('y', labelPoint.y) .attr('text-anchor', 'middle') .attr('dominant-baseline', 'middle') // .attr('style', 'font-family: ' + conf.fontFamily + '; font-size: ' + conf.fontSize + 'px') .text(txt); // Figure out how big the opaque 'container' rectangle needs to be const labelBBox = labelNode.node().getBBox(); // Insert the opaque rectangle before the text label parentNode .insert('rect', '#' + labelId) .attr('class', 'req reqLabelBox') .attr('x', labelPoint.x - labelBBox.width / 2) .attr('y', labelPoint.y - labelBBox.height / 2) .attr('width', labelBBox.width) .attr('height', labelBBox.height) .attr('fill', 'white') .attr('fill-opacity', '85%'); }; const drawRelationshipFromLayout = function (svg, rel, g, insert, diagObj) { // Find the edge relating to this relationship const edge = g.edge(elementString(rel.src), elementString(rel.dst)); // Get a function that will generate the line path const lineFunction = line() .x(function (d) { return d.x; }) .y(function (d) { return d.y; }); // Insert the line at the right place const svgPath = svg .insert('path', '#' + insert) .attr('class', 'er relationshipLine') .attr('d', lineFunction(edge.points)) .attr('fill', 'none'); if (rel.type == diagObj.db.Relationships.CONTAINS) { svgPath.attr( 'marker-start', 'url(' + common.getUrl(conf.arrowMarkerAbsolute) + '#' + rel.type + '_line_ending' + ')' ); } else { svgPath.attr('stroke-dasharray', '10,7'); svgPath.attr( 'marker-end', 'url(' + common.getUrl(conf.arrowMarkerAbsolute) + '#' + markers.ReqMarkers.ARROW + '_line_ending' + ')' ); } addEdgeLabel(svg, svgPath, conf, `<<${rel.type}>>`); return; }; export const drawReqs = (reqs, graph, svgNode) => { Object.keys(reqs).forEach((reqName) => { let req = reqs[reqName]; reqName = elementString(reqName); log.info('Added new requirement: ', reqName); const groupNode = svgNode.append('g').attr('id', reqName); const textId = 'req-' + reqName; const rectNode = newRectNode(groupNode, textId); let nodes = []; let titleNodeInfo = newTitleNode(groupNode, reqName + '_title', [ `<<${req.type}>>`, `${req.name}`, ]); nodes.push(titleNodeInfo.titleNode); let bodyNode = newBodyNode( groupNode, reqName + '_body', [ `Id: ${req.id}`, `Text: ${req.text}`, `Risk: ${req.risk}`, `Verification: ${req.verifyMethod}`, ], titleNodeInfo.y ); nodes.push(bodyNode); const rectBBox = rectNode.node().getBBox(); // Add the entity to the graph graph.setNode(reqName, { width: rectBBox.width, height: rectBBox.height, shape: 'rect', id: reqName, }); }); }; export const drawElements = (els, graph, svgNode) => { Object.keys(els).forEach((elName) => { let el = els[elName]; const id = elementString(elName); const groupNode = svgNode.append('g').attr('id', id); const textId = 'element-' + id; const rectNode = newRectNode(groupNode, textId); let nodes = []; let titleNodeInfo = newTitleNode(groupNode, textId + '_title', [`<<Element>>`, `${elName}`]); nodes.push(titleNodeInfo.titleNode); let bodyNode = newBodyNode( groupNode, textId + '_body', [`Type: ${el.type || 'Not Specified'}`, `Doc Ref: ${el.docRef || 'None'}`], titleNodeInfo.y ); nodes.push(bodyNode); const rectBBox = rectNode.node().getBBox(); // Add the entity to the graph graph.setNode(id, { width: rectBBox.width, height: rectBBox.height, shape: 'rect', id: id, }); }); }; const addRelationships = (relationships, g) => { relationships.forEach(function (r) { let src = elementString(r.src); let dst = elementString(r.dst); g.setEdge(src, dst, { relationship: r }); }); return relationships; }; const adjustEntities = function (svgNode, graph) { graph.nodes().forEach(function (v) { if (typeof v !== 'undefined' && typeof graph.node(v) !== 'undefined') { svgNode.select('#' + v); svgNode .select('#' + v) .attr( 'transform', 'translate(' + (graph.node(v).x - graph.node(v).width / 2) + ',' + (graph.node(v).y - graph.node(v).height / 2) + ' )' ); } }); return; }; const elementString = (str) => { return str.replace(/\s/g, '').replace(/\./g, '_'); }; export const draw = (text, id, _version, diagObj) => { conf = getConfig().requirement; diagObj.db.clear(); diagObj.parser.parse(text); const securityLevel = conf.securityLevel; // Handle root and Document for when rendering in sanbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); const svg = root.select(`[id='${id}']`); markers.insertLineEndings(svg, conf); const g = new graphlib.Graph({ multigraph: false, compound: false, directed: true, }) .setGraph({ rankdir: conf.layoutDirection, marginx: 20, marginy: 20, nodesep: 100, edgesep: 100, ranksep: 100, }) .setDefaultEdgeLabel(function () { return {}; }); let requirements = diagObj.db.getRequirements(); let elements = diagObj.db.getElements(); let relationships = diagObj.db.getRelationships(); drawReqs(requirements, g, svg); drawElements(elements, g, svg); addRelationships(relationships, g); dagre.layout(g); adjustEntities(svg, g); relationships.forEach(function (rel) { drawRelationshipFromLayout(svg, rel, g, id, diagObj); }); const padding = conf.rect_padding; const svgBounds = svg.node().getBBox(); const width = svgBounds.width + padding * 2; const height = svgBounds.height + padding * 2; configureSvgSize(svg, height, width, conf.useMaxWidth); svg.attr('viewBox', `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); // Adds title and description to the requirements diagram addSVGAccessibilityFields(diagObj.db, svg, id); }; export default { draw, }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/requirement/styles.js����������������������0000664�0000000�0000000�00000001667�14332737457�0027673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const getStyles = (options) => ` marker { fill: ${options.relationColor}; stroke: ${options.relationColor}; } marker.cross { stroke: ${options.lineColor}; } svg { font-family: ${options.fontFamily}; font-size: ${options.fontSize}; } .reqBox { fill: ${options.requirementBackground}; fill-opacity: 100%; stroke: ${options.requirementBorderColor}; stroke-width: ${options.requirementBorderSize}; } .reqTitle, .reqLabel{ fill: ${options.requirementTextColor}; } .reqLabelBox { fill: ${options.relationLabelBackground}; fill-opacity: 100%; } .req-title-line { stroke: ${options.requirementBorderColor}; stroke-width: ${options.requirementBorderSize}; } .relationshipLine { stroke: ${options.relationColor}; stroke-width: 1; } .relationshipLabel { fill: ${options.relationLabelColor}; } `; // fill', conf.rect_fill) export default getStyles; �������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/sequence/����������������������������������0000775�0000000�0000000�00000000000�14332737457�0025250�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/sequence/parser/���������������������������0000775�0000000�0000000�00000000000�14332737457�0026544�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/sequence/parser/sequenceDiagram.jison������0000664�0000000�0000000�00000033431�14332737457�0032711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** mermaid * https://mermaidjs.github.io/ * (c) 2014-2015 Knut Sveidqvist * MIT license. * * Based on js sequence diagrams jison grammr * https://bramp.github.io/js-sequence-diagrams/ * (c) 2012-2013 Andrew Brampton (bramp.net) * Simplified BSD license. */ %lex %options case-insensitive // Special states for recognizing aliases // A special state for grabbing text up to the first comment/newline %x ID ALIAS LINE // Directive states %x open_directive type_directive arg_directive %x acc_title %x acc_descr %x acc_descr_multiline %% \%\%\{ { this.begin('open_directive'); return 'open_directive'; } <open_directive>((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } <type_directive>":" { this.popState(); this.begin('arg_directive'); return ':'; } <type_directive,arg_directive>\}\%\% { this.popState(); this.popState(); return 'close_directive'; } <arg_directive>((?:(?!\}\%\%).|\n)*) return 'arg_directive'; [\n]+ return 'NEWLINE'; \s+ /* skip all whitespace */ <ID,ALIAS,LINE>((?!\n)\s)+ /* skip same-line whitespace */ <INITIAL,ID,ALIAS,LINE,arg_directive,type_directive,open_directive>\#[^\n]* /* skip comments */ \%%(?!\{)[^\n]* /* skip comments */ [^\}]\%\%[^\n]* /* skip comments */ [0-9]+(?=[ \n]+) return 'NUM'; "participant" { this.begin('ID'); return 'participant'; } "actor" { this.begin('ID'); return 'participant_actor'; } <ID>[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+"as"(?!\n)\s|[#\n;]|$) { yytext = yytext.trim(); this.begin('ALIAS'); return 'ACTOR'; } <ALIAS>"as" { this.popState(); this.popState(); this.begin('LINE'); return 'AS'; } <ALIAS>(?:) { this.popState(); this.popState(); return 'NEWLINE'; } "loop" { this.begin('LINE'); return 'loop'; } "rect" { this.begin('LINE'); return 'rect'; } "opt" { this.begin('LINE'); return 'opt'; } "alt" { this.begin('LINE'); return 'alt'; } "else" { this.begin('LINE'); return 'else'; } "par" { this.begin('LINE'); return 'par'; } "and" { this.begin('LINE'); return 'and'; } "critical" { this.begin('LINE'); return 'critical'; } "option" { this.begin('LINE'); return 'option'; } "break" { this.begin('LINE'); return 'break'; } <LINE>(?:[:]?(?:no)?wrap:)?[^#\n;]* { this.popState(); return 'restOfLine'; } "end" return 'end'; "left of" return 'left_of'; "right of" return 'right_of'; "links" return 'links'; "link" return 'link'; "properties" return 'properties'; "details" return 'details'; "over" return 'over'; "note" return 'note'; "activate" { this.begin('ID'); return 'activate'; } "deactivate" { this.begin('ID'); return 'deactivate'; } "title"\s[^#\n;]+ return 'title'; "title:"\s[^#\n;]+ return 'legacy_title'; accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } <acc_title>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } <acc_descr>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} <acc_descr_multiline>[\}] { this.popState(); } <acc_descr_multiline>[^\}]* return "acc_descr_multiline_value"; "sequenceDiagram" return 'SD'; "autonumber" return 'autonumber'; "off" return 'off'; "," return ','; ";" return 'NEWLINE'; [^\+\->:\n,;]+((?!(\-x|\-\-x|\-\)|\-\-\)))[\-]*[^\+\->:\n,;]+)* { yytext = yytext.trim(); return 'ACTOR'; } "->>" return 'SOLID_ARROW'; "-->>" return 'DOTTED_ARROW'; "->" return 'SOLID_OPEN_ARROW'; "-->" return 'DOTTED_OPEN_ARROW'; \-[x] return 'SOLID_CROSS'; \-\-[x] return 'DOTTED_CROSS'; \-[\)] return 'SOLID_POINT'; \-\-[\)] return 'DOTTED_POINT'; ":"(?:(?:no)?wrap:)?[^#\n;]+ return 'TXT'; "+" return '+'; "-" return '-'; <<EOF>> return 'NEWLINE'; . return 'INVALID'; /lex %left '^' %start start %% /* language grammar */ start : SPACE start | NEWLINE start | directive start | SD document { yy.apply($2);return $2; } ; document : /* empty */ { $$ = [] } | document line {$1.push($2);$$ = $1} ; line : SPACE statement { $$ = $2 } | statement { $$ = $1 } | NEWLINE { $$=[]; } ; directive : openDirective typeDirective closeDirective 'NEWLINE' | openDirective typeDirective ':' argDirective closeDirective 'NEWLINE' ; statement : 'participant' actor 'AS' restOfLine 'NEWLINE' {$2.type='addParticipant';$2.description=yy.parseMessage($4); $$=$2;} | 'participant' actor 'NEWLINE' {$2.type='addParticipant';$$=$2;} | 'participant_actor' actor 'AS' restOfLine 'NEWLINE' {$2.type='addActor';$2.description=yy.parseMessage($4); $$=$2;} | 'participant_actor' actor 'NEWLINE' {$2.type='addActor'; $$=$2;} | signal 'NEWLINE' | autonumber NUM NUM 'NEWLINE' { $$= {type:'sequenceIndex',sequenceIndex: Number($2), sequenceIndexStep:Number($3), sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER};} | autonumber NUM 'NEWLINE' { $$ = {type:'sequenceIndex',sequenceIndex: Number($2), sequenceIndexStep:1, sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER};} | autonumber off 'NEWLINE' { $$ = {type:'sequenceIndex', sequenceVisible:false, signalType:yy.LINETYPE.AUTONUMBER};} | autonumber 'NEWLINE' {$$ = {type:'sequenceIndex', sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER}; } | 'activate' actor 'NEWLINE' {$$={type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $2};} | 'deactivate' actor 'NEWLINE' {$$={type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $2};} | note_statement 'NEWLINE' | links_statement 'NEWLINE' | link_statement 'NEWLINE' | properties_statement 'NEWLINE' | details_statement 'NEWLINE' | title {yy.setDiagramTitle($1.substring(6));$$=$1.substring(6);} | legacy_title {yy.setDiagramTitle($1.substring(7));$$=$1.substring(7);} | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } | 'loop' restOfLine document end { $3.unshift({type: 'loopStart', loopText:yy.parseMessage($2), signalType: yy.LINETYPE.LOOP_START}); $3.push({type: 'loopEnd', loopText:$2, signalType: yy.LINETYPE.LOOP_END}); $$=$3;} | 'rect' restOfLine document end { $3.unshift({type: 'rectStart', color:yy.parseMessage($2), signalType: yy.LINETYPE.RECT_START }); $3.push({type: 'rectEnd', color:yy.parseMessage($2), signalType: yy.LINETYPE.RECT_END }); $$=$3;} | opt restOfLine document end { $3.unshift({type: 'optStart', optText:yy.parseMessage($2), signalType: yy.LINETYPE.OPT_START}); $3.push({type: 'optEnd', optText:yy.parseMessage($2), signalType: yy.LINETYPE.OPT_END}); $$=$3;} | alt restOfLine else_sections end { // Alt start $3.unshift({type: 'altStart', altText:yy.parseMessage($2), signalType: yy.LINETYPE.ALT_START}); // Content in alt is already in $3 // End $3.push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END}); $$=$3;} | par restOfLine par_sections end { // Parallel start $3.unshift({type: 'parStart', parText:yy.parseMessage($2), signalType: yy.LINETYPE.PAR_START}); // Content in par is already in $3 // End $3.push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END}); $$=$3;} | critical restOfLine option_sections end { // critical start $3.unshift({type: 'criticalStart', criticalText:yy.parseMessage($2), signalType: yy.LINETYPE.CRITICAL_START}); // Content in critical is already in $3 // critical end $3.push({type: 'criticalEnd', signalType: yy.LINETYPE.CRITICAL_END}); $$=$3;} | break restOfLine document end { $3.unshift({type: 'breakStart', breakText:yy.parseMessage($2), signalType: yy.LINETYPE.BREAK_START}); $3.push({type: 'breakEnd', optText:yy.parseMessage($2), signalType: yy.LINETYPE.BREAK_END}); $$=$3;} | directive ; option_sections : document | document option restOfLine option_sections { $$ = $1.concat([{type: 'option', optionText:yy.parseMessage($3), signalType: yy.LINETYPE.CRITICAL_OPTION}, $4]); } ; par_sections : document | document and restOfLine par_sections { $$ = $1.concat([{type: 'and', parText:yy.parseMessage($3), signalType: yy.LINETYPE.PAR_AND}, $4]); } ; else_sections : document | document else restOfLine else_sections { $$ = $1.concat([{type: 'else', altText:yy.parseMessage($3), signalType: yy.LINETYPE.ALT_ELSE}, $4]); } ; note_statement : 'note' placement actor text2 { $$ = [$3, {type:'addNote', placement:$2, actor:$3.actor, text:$4}];} | 'note' 'over' actor_pair text2 { // Coerce actor_pair into a [to, from, ...] array $2 = [].concat($3, $3).slice(0, 2); $2[0] = $2[0].actor; $2[1] = $2[1].actor; $$ = [$3, {type:'addNote', placement:yy.PLACEMENT.OVER, actor:$2.slice(0, 2), text:$4}];} ; links_statement : 'links' actor text2 { $$ = [$2, {type:'addLinks', actor:$2.actor, text:$3}]; } ; link_statement : 'link' actor text2 { $$ = [$2, {type:'addALink', actor:$2.actor, text:$3}]; } ; properties_statement : 'properties' actor text2 { $$ = [$2, {type:'addProperties', actor:$2.actor, text:$3}]; } ; details_statement : 'details' actor text2 { $$ = [$2, {type:'addDetails', actor:$2.actor, text:$3}]; } ; spaceList : SPACE spaceList | SPACE ; actor_pair : actor ',' actor { $$ = [$1, $3]; } | actor { $$ = $1; } ; placement : 'left_of' { $$ = yy.PLACEMENT.LEFTOF; } | 'right_of' { $$ = yy.PLACEMENT.RIGHTOF; } ; signal : actor signaltype '+' actor text2 { $$ = [$1,$4,{type: 'addMessage', from:$1.actor, to:$4.actor, signalType:$2, msg:$5}, {type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $4} ]} | actor signaltype '-' actor text2 { $$ = [$1,$4,{type: 'addMessage', from:$1.actor, to:$4.actor, signalType:$2, msg:$5}, {type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $1} ]} | actor signaltype actor text2 { $$ = [$1,$3,{type: 'addMessage', from:$1.actor, to:$3.actor, signalType:$2, msg:$4}]} ; // actor // : actor_participant // | actor_actor // ; actor: ACTOR {$$={ type: 'addParticipant', actor:$1}}; // actor_actor: ACTOR {$$={type: 'addActor', actor:$1}}; signaltype : SOLID_OPEN_ARROW { $$ = yy.LINETYPE.SOLID_OPEN; } | DOTTED_OPEN_ARROW { $$ = yy.LINETYPE.DOTTED_OPEN; } | SOLID_ARROW { $$ = yy.LINETYPE.SOLID; } | DOTTED_ARROW { $$ = yy.LINETYPE.DOTTED; } | SOLID_CROSS { $$ = yy.LINETYPE.SOLID_CROSS; } | DOTTED_CROSS { $$ = yy.LINETYPE.DOTTED_CROSS; } | SOLID_POINT { $$ = yy.LINETYPE.SOLID_POINT; } | DOTTED_POINT { $$ = yy.LINETYPE.DOTTED_POINT; } ; text2 : TXT {$$ = yy.parseMessage($1.trim().substring(1)) } ; openDirective : open_directive { yy.parseDirective('%%{', 'open_directive'); } ; typeDirective : type_directive { yy.parseDirective($1, 'type_directive'); } ; argDirective : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } ; closeDirective : close_directive { yy.parseDirective('}%%', 'close_directive', 'sequence'); } ; %% ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/sequence/sequenceDb.js���������������������0000664�0000000�0000000�00000030410�14332737457�0027662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import mermaidAPI from '../../mermaidAPI'; import * as configApi from '../../config'; import { log } from '../../logger'; import { sanitizeText } from '../common/common'; import { setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle, getAccDescription, setAccDescription, clear as commonClear, } from '../../commonDb'; let prevActor = undefined; let actors = {}; let messages = []; const notes = []; let sequenceNumbersEnabled = false; let wrapEnabled; export const parseDirective = function (statement, context, type) { mermaidAPI.parseDirective(this, statement, context, type); }; export const addActor = function (id, name, description, type) { // Don't allow description nulling const old = actors[id]; if (old && name === old.name && description == null) return; // Don't allow null descriptions, either if (description == null || description.text == null) { description = { text: name, wrap: null, type }; } if (type == null || description.text == null) { description = { text: name, wrap: null, type }; } actors[id] = { name: name, description: description.text, wrap: (description.wrap === undefined && autoWrap()) || !!description.wrap, prevActor: prevActor, links: {}, properties: {}, actorCnt: null, rectData: null, type: type || 'participant', }; if (prevActor && actors[prevActor]) { actors[prevActor].nextActor = id; } prevActor = id; }; const activationCount = (part) => { let i; let count = 0; for (i = 0; i < messages.length; i++) { if (messages[i].type === LINETYPE.ACTIVE_START) { if (messages[i].from.actor === part) { count++; } } if (messages[i].type === LINETYPE.ACTIVE_END) { if (messages[i].from.actor === part) { count--; } } } return count; }; export const addMessage = function (idFrom, idTo, message, answer) { messages.push({ from: idFrom, to: idTo, message: message.text, wrap: (message.wrap === undefined && autoWrap()) || !!message.wrap, answer: answer, }); }; export const addSignal = function ( idFrom, idTo, message = { text: undefined, wrap: undefined }, messageType ) { if (messageType === LINETYPE.ACTIVE_END) { const cnt = activationCount(idFrom.actor); if (cnt < 1) { // Bail out as there is an activation signal from an inactive participant let error = new Error('Trying to inactivate an inactive participant (' + idFrom.actor + ')'); error.hash = { text: '->>-', token: '->>-', line: '1', loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ["'ACTIVE_PARTICIPANT'"], }; throw error; } } messages.push({ from: idFrom, to: idTo, message: message.text, wrap: (message.wrap === undefined && autoWrap()) || !!message.wrap, type: messageType, }); return true; }; export const getMessages = function () { return messages; }; export const getActors = function () { return actors; }; export const getActor = function (id) { return actors[id]; }; export const getActorKeys = function () { return Object.keys(actors); }; export const enableSequenceNumbers = function () { sequenceNumbersEnabled = true; }; export const disableSequenceNumbers = function () { sequenceNumbersEnabled = false; }; export const showSequenceNumbers = () => sequenceNumbersEnabled; export const setWrap = function (wrapSetting) { wrapEnabled = wrapSetting; }; export const autoWrap = () => { // if setWrap has been called, use that value, otherwise use the value from the config // TODO: refactor, always use the config value let setWrap update the config value if (typeof wrapEnabled !== 'undefined') { return wrapEnabled; } return configApi.getConfig().sequence.wrap; }; export const clear = function () { actors = {}; messages = []; sequenceNumbersEnabled = false; commonClear(); }; export const parseMessage = function (str) { const _str = str.trim(); const message = { text: _str.replace(/^[:]?(?:no)?wrap:/, '').trim(), wrap: _str.match(/^[:]?wrap:/) !== null ? true : _str.match(/^[:]?nowrap:/) !== null ? false : undefined, }; log.debug('parseMessage:', message); return message; }; export const LINETYPE = { SOLID: 0, DOTTED: 1, NOTE: 2, SOLID_CROSS: 3, DOTTED_CROSS: 4, SOLID_OPEN: 5, DOTTED_OPEN: 6, LOOP_START: 10, LOOP_END: 11, ALT_START: 12, ALT_ELSE: 13, ALT_END: 14, OPT_START: 15, OPT_END: 16, ACTIVE_START: 17, ACTIVE_END: 18, PAR_START: 19, PAR_AND: 20, PAR_END: 21, RECT_START: 22, RECT_END: 23, SOLID_POINT: 24, DOTTED_POINT: 25, AUTONUMBER: 26, CRITICAL_START: 27, CRITICAL_OPTION: 28, CRITICAL_END: 29, BREAK_START: 30, BREAK_END: 31, }; export const ARROWTYPE = { FILLED: 0, OPEN: 1, }; export const PLACEMENT = { LEFTOF: 0, RIGHTOF: 1, OVER: 2, }; export const addNote = function (actor, placement, message) { const note = { actor: actor, placement: placement, message: message.text, wrap: (message.wrap === undefined && autoWrap()) || !!message.wrap, }; // Coerce actor into a [to, from, ...] array const actors = [].concat(actor, actor); notes.push(note); messages.push({ from: actors[0], to: actors[1], message: message.text, wrap: (message.wrap === undefined && autoWrap()) || !!message.wrap, type: LINETYPE.NOTE, placement: placement, }); }; export const addLinks = function (actorId, text) { // find the actor const actor = getActor(actorId); // JSON.parse the text try { let sanitizedText = sanitizeText(text.text, configApi.getConfig()); sanitizedText = sanitizedText.replace(/&/g, '&'); sanitizedText = sanitizedText.replace(/=/g, '='); const links = JSON.parse(sanitizedText); // add the deserialized text to the actor's links field. insertLinks(actor, links); } catch (e) { log.error('error while parsing actor link text', e); } }; export const addALink = function (actorId, text) { // find the actor const actor = getActor(actorId); try { const links = {}; let sanitizedText = sanitizeText(text.text, configApi.getConfig()); var sep = sanitizedText.indexOf('@'); sanitizedText = sanitizedText.replace(/&/g, '&'); sanitizedText = sanitizedText.replace(/=/g, '='); var label = sanitizedText.slice(0, sep - 1).trim(); var link = sanitizedText.slice(sep + 1).trim(); links[label] = link; // add the deserialized text to the actor's links field. insertLinks(actor, links); } catch (e) { log.error('error while parsing actor link text', e); } }; /** * @param {any} actor * @param {any} links */ function insertLinks(actor, links) { if (actor.links == null) { actor.links = links; } else { for (let key in links) { actor.links[key] = links[key]; } } } export const addProperties = function (actorId, text) { // find the actor const actor = getActor(actorId); // JSON.parse the text try { let sanitizedText = sanitizeText(text.text, configApi.getConfig()); const properties = JSON.parse(sanitizedText); // add the deserialized text to the actor's property field. insertProperties(actor, properties); } catch (e) { log.error('error while parsing actor properties text', e); } }; /** * @param {any} actor * @param {any} properties */ function insertProperties(actor, properties) { if (actor.properties == null) { actor.properties = properties; } else { for (let key in properties) { actor.properties[key] = properties[key]; } } } export const addDetails = function (actorId, text) { // find the actor const actor = getActor(actorId); const elem = document.getElementById(text.text); // JSON.parse the text try { const text = elem.innerHTML; const details = JSON.parse(text); // add the deserialized text to the actor's property field. if (details['properties']) { insertProperties(actor, details['properties']); } if (details['links']) { insertLinks(actor, details['links']); } } catch (e) { log.error('error while parsing actor details text', e); } }; export const getActorProperty = function (actor, key) { if (typeof actor !== 'undefined' && typeof actor.properties !== 'undefined') { return actor.properties[key]; } return undefined; }; export const apply = function (param) { if (param instanceof Array) { param.forEach(function (item) { apply(item); }); } else { switch (param.type) { case 'sequenceIndex': messages.push({ from: undefined, to: undefined, message: { start: param.sequenceIndex, step: param.sequenceIndexStep, visible: param.sequenceVisible, }, wrap: false, type: param.signalType, }); break; case 'addParticipant': addActor(param.actor, param.actor, param.description, 'participant'); break; case 'addActor': addActor(param.actor, param.actor, param.description, 'actor'); break; case 'activeStart': addSignal(param.actor, undefined, undefined, param.signalType); break; case 'activeEnd': addSignal(param.actor, undefined, undefined, param.signalType); break; case 'addNote': addNote(param.actor, param.placement, param.text); break; case 'addLinks': addLinks(param.actor, param.text); break; case 'addALink': addALink(param.actor, param.text); break; case 'addProperties': addProperties(param.actor, param.text); break; case 'addDetails': addDetails(param.actor, param.text); break; case 'addMessage': addSignal(param.from, param.to, param.msg, param.signalType); break; case 'loopStart': addSignal(undefined, undefined, param.loopText, param.signalType); break; case 'loopEnd': addSignal(undefined, undefined, undefined, param.signalType); break; case 'rectStart': addSignal(undefined, undefined, param.color, param.signalType); break; case 'rectEnd': addSignal(undefined, undefined, undefined, param.signalType); break; case 'optStart': addSignal(undefined, undefined, param.optText, param.signalType); break; case 'optEnd': addSignal(undefined, undefined, undefined, param.signalType); break; case 'altStart': addSignal(undefined, undefined, param.altText, param.signalType); break; case 'else': addSignal(undefined, undefined, param.altText, param.signalType); break; case 'altEnd': addSignal(undefined, undefined, undefined, param.signalType); break; case 'setAccTitle': setAccTitle(param.text); break; case 'parStart': addSignal(undefined, undefined, param.parText, param.signalType); break; case 'and': addSignal(undefined, undefined, param.parText, param.signalType); break; case 'parEnd': addSignal(undefined, undefined, undefined, param.signalType); break; case 'criticalStart': addSignal(undefined, undefined, param.criticalText, param.signalType); break; case 'option': addSignal(undefined, undefined, param.optionText, param.signalType); break; case 'criticalEnd': addSignal(undefined, undefined, undefined, param.signalType); break; case 'breakStart': addSignal(undefined, undefined, param.breakText, param.signalType); break; case 'breakEnd': addSignal(undefined, undefined, undefined, param.signalType); break; } } }; export default { addActor, addMessage, addSignal, addLinks, addDetails, addProperties, autoWrap, setWrap, enableSequenceNumbers, disableSequenceNumbers, showSequenceNumbers, getMessages, getActors, getActor, getActorKeys, getActorProperty, getAccTitle, getDiagramTitle, setDiagramTitle, parseDirective, getConfig: () => configApi.getConfig().sequence, clear, parseMessage, LINETYPE, ARROWTYPE, PLACEMENT, addNote, setAccTitle, apply, setAccDescription, getAccDescription, }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/sequence/sequenceDetector.ts���������������0000664�0000000�0000000�00000000264�14332737457�0031124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import type { DiagramDetector } from '../../diagram-api/types'; export const sequenceDetector: DiagramDetector = (txt) => { return txt.match(/^\s*sequenceDiagram/) !== null; }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js�����������0000664�0000000�0000000�00000165545�14332737457�0031654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import * as configApi from '../../config'; import mermaidAPI from '../../mermaidAPI'; import Diagram from '../../Diagram'; import { addDiagrams } from '../../diagram-api/diagram-orchestration'; addDiagrams(); /** * @param conf * @param key * @param value */ function addConf(conf, key, value) { if (value !== undefined) { conf[key] = value; } return conf; } // const parser = sequence.parser; let diagram; describe('more than one sequence diagram', () => { it('should not have duplicated messages', () => { const diagram1 = new Diagram(` sequenceDiagram Alice->Bob:Hello Bob, how are you? Bob-->Alice: I am good thanks!`); expect(diagram1.db.getMessages()).toMatchInlineSnapshot(` [ { "from": "Alice", "message": "Hello Bob, how are you?", "to": "Bob", "type": 5, "wrap": false, }, { "from": "Bob", "message": "I am good thanks!", "to": "Alice", "type": 6, "wrap": false, }, ] `); const diagram2 = new Diagram(` sequenceDiagram Alice->Bob:Hello Bob, how are you? Bob-->Alice: I am good thanks!`); expect(diagram2.db.getMessages()).toMatchInlineSnapshot(` [ { "from": "Alice", "message": "Hello Bob, how are you?", "to": "Bob", "type": 5, "wrap": false, }, { "from": "Bob", "message": "I am good thanks!", "to": "Alice", "type": 6, "wrap": false, }, ] `); // Add John actor const diagram3 = new Diagram(` sequenceDiagram Alice->John:Hello John, how are you? John-->Alice: I am good thanks!`); expect(diagram3.db.getMessages()).toMatchInlineSnapshot(` [ { "from": "Alice", "message": "Hello John, how are you?", "to": "John", "type": 5, "wrap": false, }, { "from": "John", "message": "I am good thanks!", "to": "Alice", "type": 6, "wrap": false, }, ] `); }); }); describe('when parsing a sequenceDiagram', function () { beforeEach(function () { // diagram.db = sequenceDb; // diagram.db.clear(); diagram = new Diagram(` sequenceDiagram Alice->Bob:Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`); diagram.db.clear(); }); it('should handle a sequenceDiagram definition', function () { const str = ` sequenceDiagram Alice->Bob:Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; mermaidAPI.parse(str, diagram); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); }); it('should not show sequence numbers per default', function () { const str = ` sequenceDiagram Alice->Bob:Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); // needs to be rendered for the correct value of visibility autonumbers expect(diagram.db.showSequenceNumbers()).toBe(false); }); it('should show sequence numbers when autonumber is enabled', function () { const str = ` sequenceDiagram autonumber Alice->Bob:Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); // needs to be rendered for the correct value of visibility autonumbers expect(diagram.db.showSequenceNumbers()).toBe(true); }); it('should handle a sequenceDiagram definition with a title:', function () { const str = ` sequenceDiagram title: Diagram Title Alice->Bob:Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; expect(diagram.db.getAccDescription()).toBe(''); const messages = diagram.db.getMessages(); const title = diagram.db.getDiagramTitle(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); expect(title).toBe('Diagram Title'); }); it('should handle a sequenceDiagram definition with a title without a :', function () { const str = ` sequenceDiagram title Diagram Title Alice->Bob:Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; expect(diagram.db.getAccDescription()).toBe(''); const messages = diagram.db.getMessages(); const title = diagram.db.getDiagramTitle(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); expect(title).toBe('Diagram Title'); }); it('should handle a sequenceDiagram definition with a accessibility title and description (accDescr)', function () { const str = ` sequenceDiagram title: Diagram Title accTitle: This is the title accDescr: Accessibility Description Alice->Bob:Hello Bob, how are you? `; mermaidAPI.parse(str); expect(diagram.db.getDiagramTitle()).toBe('Diagram Title'); expect(diagram.db.getAccTitle()).toBe('This is the title'); expect(diagram.db.getAccDescription()).toBe('Accessibility Description'); const messages = diagram.db.getMessages(); }); it('should handle a sequenceDiagram definition with a accessibility title and multiline description (accDescr)', function () { const str = ` sequenceDiagram accTitle: This is the title accDescr { Accessibility Description } Alice->Bob:Hello Bob, how are you? `; mermaidAPI.parse(str); expect(diagram.db.getAccTitle()).toBe('This is the title'); expect(diagram.db.getAccDescription()).toBe('Accessibility\nDescription'); const messages = diagram.db.getMessages(); }); it('should space in actor names', function () { const str = ` sequenceDiagram Alice->Bob:Hello Bob, how are - you? Bob-->Alice: I am good thanks!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages.length).toBe(2); expect(messages[0].from).toBe('Alice'); expect(messages[1].from).toBe('Bob'); }); it('should handle dashes in actor names', function () { const str = ` sequenceDiagram Alice-in-Wonderland->Bob:Hello Bob, how are - you? Bob-->Alice-in-Wonderland:I am good thanks!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors['Alice-in-Wonderland'].description).toBe('Alice-in-Wonderland'); expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(2); expect(messages[0].from).toBe('Alice-in-Wonderland'); expect(messages[1].from).toBe('Bob'); }); it('should handle dashes in participant names', function () { const str = ` sequenceDiagram participant Alice-in-Wonderland participant Bob Alice-in-Wonderland->Bob:Hello Bob, how are - you? Bob-->Alice-in-Wonderland:I am good thanks!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(Object.keys(actors)).toEqual(['Alice-in-Wonderland', 'Bob']); expect(actors['Alice-in-Wonderland'].description).toBe('Alice-in-Wonderland'); expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(2); expect(messages[0].from).toBe('Alice-in-Wonderland'); expect(messages[1].from).toBe('Bob'); }); it('should alias participants', function () { const str = ` sequenceDiagram participant A as Alice participant B as Bob A->B:Hello Bob, how are you? B-->A: I am good thanks!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(Object.keys(actors)).toEqual(['A', 'B']); expect(actors.A.description).toBe('Alice'); expect(actors.B.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(2); expect(messages[0].from).toBe('A'); expect(messages[1].from).toBe('B'); }); it('should alias a mix of actors and participants apa12', function () { const str = ` sequenceDiagram actor Alice as Alice2 actor Bob participant John as John2 participant Mandy Alice->>Bob: Hi Bob Bob->>Alice: Hi Alice Alice->>John: Hi John John->>Mandy: Hi Mandy Mandy ->>Joan: Hi Joan`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(Object.keys(actors)).toEqual(['Alice', 'Bob', 'John', 'Mandy', 'Joan']); expect(actors.Alice.description).toBe('Alice2'); expect(actors.Alice.type).toBe('actor'); expect(actors.Bob.description).toBe('Bob'); expect(actors.John.type).toBe('participant'); expect(actors.Joan.type).toBe('participant'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(5); expect(messages[0].from).toBe('Alice'); expect(messages[4].to).toBe('Joan'); }); it('should alias actors apa13', function () { const str = ` sequenceDiagram actor A as Alice actor B as Bob A->B:Hello Bob, how are you? B-->A: I am good thanks!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(Object.keys(actors)).toEqual(['A', 'B']); expect(actors.A.description).toBe('Alice'); expect(actors.B.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(2); expect(messages[0].from).toBe('A'); expect(messages[1].from).toBe('B'); }); it('should handle in async messages', function () { const str = ` sequenceDiagram Alice-xBob:Hello Bob, how are you?`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(1); expect(messages[0].type).toBe(diagram.db.LINETYPE.SOLID_CROSS); }); it('should handle in async dotted messages', function () { const str = ` sequenceDiagram Alice--xBob:Hello Bob, how are you?`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(1); expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED_CROSS); }); it('should handle in sync messages', function () { const str = ` sequenceDiagram Alice-)Bob:Hello Bob, how are you?`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(1); expect(messages[0].type).toBe(diagram.db.LINETYPE.SOLID_POINT); }); it('should handle in sync dotted messages', function () { const str = ` sequenceDiagram Alice--)Bob:Hello Bob, how are you?`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(1); expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED_POINT); }); it('should handle in arrow messages', function () { const str = ` sequenceDiagram Alice->>Bob:Hello Bob, how are you?`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(1); expect(messages[0].type).toBe(diagram.db.LINETYPE.SOLID); }); it('should handle in arrow messages', function () { const str = 'sequenceDiagram\n' + 'Alice-->>Bob:Hello Bob, how are you?'; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(1); expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED); }); it('should handle actor activation', function () { const str = ` sequenceDiagram Alice-->>Bob:Hello Bob, how are you? activate Bob Bob-->>Alice:Hello Alice, I'm fine and you? deactivate Bob`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(4); expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED); expect(messages[1].type).toBe(diagram.db.LINETYPE.ACTIVE_START); expect(messages[1].from.actor).toBe('Bob'); expect(messages[2].type).toBe(diagram.db.LINETYPE.DOTTED); expect(messages[3].type).toBe(diagram.db.LINETYPE.ACTIVE_END); expect(messages[3].from.actor).toBe('Bob'); }); it('should handle actor one line notation activation', function () { const str = ` sequenceDiagram Alice-->>+Bob:Hello Bob, how are you? Bob-->>- Alice:Hello Alice, I'm fine and you?`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(4); expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED); expect(messages[1].type).toBe(diagram.db.LINETYPE.ACTIVE_START); expect(messages[1].from.actor).toBe('Bob'); expect(messages[2].type).toBe(diagram.db.LINETYPE.DOTTED); expect(messages[3].type).toBe(diagram.db.LINETYPE.ACTIVE_END); expect(messages[3].from.actor).toBe('Bob'); }); it('should handle stacked activations', function () { const str = ` sequenceDiagram Alice-->>+Bob:Hello Bob, how are you? Bob-->>+Carol:Carol, let me introduce Alice? Bob-->>- Alice:Hello Alice, please meet Carol? Carol->>- Bob:Oh Bob, I'm so happy to be here!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(8); expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED); expect(messages[1].type).toBe(diagram.db.LINETYPE.ACTIVE_START); expect(messages[1].from.actor).toBe('Bob'); expect(messages[2].type).toBe(diagram.db.LINETYPE.DOTTED); expect(messages[3].type).toBe(diagram.db.LINETYPE.ACTIVE_START); expect(messages[3].from.actor).toBe('Carol'); expect(messages[5].type).toBe(diagram.db.LINETYPE.ACTIVE_END); expect(messages[5].from.actor).toBe('Bob'); expect(messages[7].type).toBe(diagram.db.LINETYPE.ACTIVE_END); expect(messages[7].from.actor).toBe('Carol'); }); it('should handle fail parsing when activating an inactive participant', function () { const str = ` sequenceDiagram participant user as End User participant Server as Server participant System as System participant System2 as System2 user->>+Server: Test user->>+Server: Test2 user->>System: Test Server->>-user: Test Server->>-user: Test2 %% The following deactivation of Server will fail Server->>-user: Test3`; let error = false; try { mermaidAPI.parse(str); } catch (e) { error = true; } expect(error).toBe(true); }); it('should handle comments in a sequenceDiagram', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); }); it('should handle new lines in a sequenceDiagram', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment Note right of Bob: Bob thinks Bob-->Alice: I am good thanks! `; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); }); it('should handle semicolons', function () { const str = ` sequenceDiagram;Alice->Bob: Hello Bob, how are you?;Note right of Bob: Bob thinks;Bob-->Alice: I am good thanks!;`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); }); it('should handle one leading space in lines in a sequenceDiagram', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); }); it('should handle several leading spaces in lines in a sequenceDiagram', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); }); it('should handle several leading spaces in lines in a sequenceDiagram', function () { const str = ` sequenceDiagram participant Alice participant Bob Alice->John: Hello John, how are you? loop Healthcheck John->John: Fight against hypochondria end Note right of John: Rational thoughts<br/>prevail... John-->Alice: Great! John->Bob: How about you? Bob-->John: Jolly good!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages.length).toBe(8); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('John'); }); it('should handle different line breaks', function () { const str = ` sequenceDiagram participant 1 as multiline<br>text participant 2 as multiline<br/>text participant 3 as multiline<br />text participant 4 as multiline<br \t/>text 1->>2: multiline<br>text note right of 2: multiline<br>text 2->>3: multiline<br/>text note right of 3: multiline<br/>text 3->>4: multiline<br />text note right of 4: multiline<br />text 4->>1: multiline<br \t/>text note right of 1: multiline<br \t/>text `; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors['1'].description).toBe('multiline<br>text'); expect(actors['2'].description).toBe('multiline<br/>text'); expect(actors['3'].description).toBe('multiline<br />text'); expect(actors['4'].description).toBe('multiline<br \t/>text'); const messages = diagram.db.getMessages(); expect(messages[0].message).toBe('multiline<br>text'); expect(messages[1].message).toBe('multiline<br>text'); expect(messages[2].message).toBe('multiline<br/>text'); expect(messages[3].message).toBe('multiline<br/>text'); expect(messages[4].message).toBe('multiline<br />text'); expect(messages[5].message).toBe('multiline<br />text'); expect(messages[6].message).toBe('multiline<br \t/>text'); expect(messages[7].message).toBe('multiline<br \t/>text'); }); it('should handle notes and messages without wrap specified', function () { const str = ` sequenceDiagram participant 1 participant 2 participant 3 participant 4 1->>2: single-line text note right of 2: single-line text 2->>3:nowrap: single-line text note right of 3:nowrap: single-line text 3->>4: multiline<br/>text note right of 4: multiline<br/>text 4->>1:nowrap: multiline<br/>text note right of 1:nowrap: multiline<br/>text `; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[0].message).toBe('single-line text'); expect(messages[1].message).toBe('single-line text'); expect(messages[2].message).toBe('single-line text'); expect(messages[3].message).toBe('single-line text'); expect(messages[4].message).toBe('multiline<br/>text'); expect(messages[5].message).toBe('multiline<br/>text'); expect(messages[6].message).toBe('multiline<br/>text'); expect(messages[7].message).toBe('multiline<br/>text'); // wrap indicates whether wrap is specified expect(messages[0].wrap).toBe(false); expect(messages[1].wrap).toBe(false); expect(messages[2].wrap).toBe(false); expect(messages[3].wrap).toBe(false); expect(messages[4].wrap).toBe(false); expect(messages[5].wrap).toBe(false); expect(messages[6].wrap).toBe(false); expect(messages[7].wrap).toBe(false); }); it('should handle notes and messages with wrap specified', function () { const str = ` sequenceDiagram participant 1 participant 2 participant 3 participant 4 1->>2:wrap: single-line text note right of 2:wrap: single-line text 2->>3:wrap: multiline<br/>text note right of 3:wrap: multiline<br/>text `; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[0].message).toBe('single-line text'); expect(messages[1].message).toBe('single-line text'); expect(messages[2].message).toBe('multiline<br/>text'); expect(messages[3].message).toBe('multiline<br/>text'); expect(messages[0].wrap).toBe(true); expect(messages[1].wrap).toBe(true); expect(messages[2].wrap).toBe(true); expect(messages[3].wrap).toBe(true); }); it('should handle notes and messages with nowrap or line breaks', function () { const str = ` sequenceDiagram participant 1 participant 2 1->>2: single-line text note right of 2: single-line text `; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[0].message).toBe('single-line text'); expect(messages[1].message).toBe('single-line text'); expect(messages[0].wrap).toBe(false); expect(messages[1].wrap).toBe(false); }); it('should handle notes over a single actor', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? Note over Bob: Bob thinks `; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[1].from).toBe('Bob'); expect(messages[1].to).toBe('Bob'); }); it('should handle notes over multiple actors', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? Note over Alice,Bob: confusion Note over Bob,Alice: resolution `; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[1].from).toBe('Alice'); expect(messages[1].to).toBe('Bob'); expect(messages[2].from).toBe('Bob'); expect(messages[2].to).toBe('Alice'); }); it('should handle loop statements', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment Note right of Bob: Bob thinks loop Multiple happy responses Bob-->Alice: I am good thanks! end`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages.length).toBe(5); expect(messages[0].from).toBe('Alice'); expect(messages[1].from).toBe('Bob'); }); it('should add a rect around sequence', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment rect rgb(200, 255, 200) Note right of Bob: Bob thinks Bob-->Alice: I am good thanks end `; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages[1].type).toEqual(diagram.db.LINETYPE.RECT_START); expect(messages[1].message).toBe('rgb(200, 255, 200)'); expect(messages[2].type).toEqual(diagram.db.LINETYPE.NOTE); expect(messages[3].type).toEqual(diagram.db.LINETYPE.DOTTED_OPEN); expect(messages[4].type).toEqual(diagram.db.LINETYPE.RECT_END); }); it('should allow for nested rects', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment rect rgb(200, 255, 200) rect rgb(0, 0, 0) Note right of Bob: Bob thinks end Bob-->Alice: I am good thanks end `; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages[1].type).toEqual(diagram.db.LINETYPE.RECT_START); expect(messages[1].message).toBe('rgb(200, 255, 200)'); expect(messages[2].type).toEqual(diagram.db.LINETYPE.RECT_START); expect(messages[2].message).toBe('rgb(0, 0, 0)'); expect(messages[3].type).toEqual(diagram.db.LINETYPE.NOTE); expect(messages[4].type).toEqual(diagram.db.LINETYPE.RECT_END); expect(messages[5].type).toEqual(diagram.db.LINETYPE.DOTTED_OPEN); expect(messages[6].type).toEqual(diagram.db.LINETYPE.RECT_END); }); it('should handle opt statements', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment Note right of Bob: Bob thinks opt Perhaps a happy response Bob-->Alice: I am good thanks! end`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages.length).toBe(5); expect(messages[0].from).toBe('Alice'); expect(messages[1].from).toBe('Bob'); }); it('should handle alt statements', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment Note right of Bob: Bob thinks alt isWell Bob-->Alice: I am good thanks! else isSick Bob-->Alice: Feel sick... end`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; const messages = diagram.db.getMessages(); expect(messages.length).toBe(7); expect(messages[0].from).toBe('Alice'); expect(messages[1].from).toBe('Bob'); }); it('should handle alt statements with multiple elses', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment Note right of Bob: Bob thinks alt isWell Bob-->Alice: I am good thanks! else isSick Bob-->Alice: Feel sick... else default Bob-->Alice: :-) end`; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages.length).toBe(9); expect(messages[1].from).toBe('Bob'); expect(messages[2].type).toBe(diagram.db.LINETYPE.ALT_START); expect(messages[3].from).toBe('Bob'); expect(messages[4].type).toBe(diagram.db.LINETYPE.ALT_ELSE); expect(messages[5].from).toBe('Bob'); expect(messages[6].type).toBe(diagram.db.LINETYPE.ALT_ELSE); expect(messages[7].from).toBe('Bob'); expect(messages[8].type).toBe(diagram.db.LINETYPE.ALT_END); }); it('should handle critical statements without options', function () { const str = ` sequenceDiagram critical Establish a connection to the DB Service-->DB: connect end`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Service.description).toBe('Service'); expect(actors.DB.description).toBe('DB'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(3); expect(messages[0].type).toBe(diagram.db.LINETYPE.CRITICAL_START); expect(messages[1].from).toBe('Service'); expect(messages[2].type).toBe(diagram.db.LINETYPE.CRITICAL_END); }); it('should handle critical statements with options', function () { const str = ` sequenceDiagram critical Establish a connection to the DB Service-->DB: connect option Network timeout Service-->Service: Log error option Credentials rejected Service-->Service: Log different error end`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Service.description).toBe('Service'); expect(actors.DB.description).toBe('DB'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(7); expect(messages[0].type).toBe(diagram.db.LINETYPE.CRITICAL_START); expect(messages[1].from).toBe('Service'); expect(messages[2].type).toBe(diagram.db.LINETYPE.CRITICAL_OPTION); expect(messages[3].from).toBe('Service'); expect(messages[4].type).toBe(diagram.db.LINETYPE.CRITICAL_OPTION); expect(messages[5].from).toBe('Service'); expect(messages[6].type).toBe(diagram.db.LINETYPE.CRITICAL_END); }); it('should handle break statements', function () { const str = ` sequenceDiagram Consumer-->API: Book something API-->BookingService: Start booking process break when the booking process fails API-->Consumer: show failure end API-->BillingService: Start billing process`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Consumer.description).toBe('Consumer'); expect(actors.API.description).toBe('API'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(6); expect(messages[0].from).toBe('Consumer'); expect(messages[1].from).toBe('API'); expect(messages[2].type).toBe(diagram.db.LINETYPE.BREAK_START); expect(messages[3].from).toBe('API'); expect(messages[4].type).toBe(diagram.db.LINETYPE.BREAK_END); expect(messages[5].from).toBe('API'); }); it('should handle par statements a sequenceDiagram', function () { const str = ` sequenceDiagram par Parallel one Alice->>Bob: Hello Bob, how are you? Bob-->>Alice: I am good thanks! and Parallel two Alice->>Bob: Are you OK? Bob-->>Alice: Fine! and Parallel three Alice->>Bob: What do you think about it? Bob-->>Alice: It's good! end`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.Alice.description).toBe('Alice'); expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages(); expect(messages.length).toBe(10); expect(messages[0].message).toBe('Parallel one'); expect(messages[1].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); }); it('should handle special characters in signals', function () { const str = 'sequenceDiagram\n' + 'Alice->Bob: -:<>,;# comment'; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[0].message).toBe('-:<>,'); }); it('should handle special characters in notes', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? Note right of Bob: -:<>,;# comment`; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[1].message).toBe('-:<>,'); }); it('should handle special characters in loop', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? loop -:<>,;# comment Bob-->Alice: I am good thanks! end`; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[1].message).toBe('-:<>,'); }); it('should handle special characters in opt', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? opt -:<>,;# comment Bob-->Alice: I am good thanks! end`; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[1].message).toBe('-:<>,'); }); it('should handle special characters in alt', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? alt -:<>,;# comment Bob-->Alice: I am good thanks! else ,<>:-#; comment Bob-->Alice: I am good thanks! end`; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[1].message).toBe('-:<>,'); expect(messages[3].message).toBe(',<>:-'); }); it('should handle special characters in par', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? par -:<>,;# comment Bob-->Alice: I am good thanks! and ,<>:-#; comment Bob-->Alice: I am good thanks! end`; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[1].message).toBe('-:<>,'); expect(messages[3].message).toBe(',<>:-'); }); it('should handle no-label loop', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? loop Bob-->Alice: I am good thanks! end`; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[1].message).toBe(''); expect(messages[2].message).toBe('I am good thanks!'); }); it('should handle no-label opt', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? opt # comment Bob-->Alice: I am good thanks! end`; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[1].message).toBe(''); expect(messages[2].message).toBe('I am good thanks!'); }); it('should handle no-label alt', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? alt;Bob-->Alice: I am good thanks! else # comment Bob-->Alice: I am good thanks! end`; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[1].message).toBe(''); expect(messages[2].message).toBe('I am good thanks!'); expect(messages[3].message).toBe(''); expect(messages[4].message).toBe('I am good thanks!'); }); it('should handle no-label par', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? par;Bob-->Alice: I am good thanks! and # comment Bob-->Alice: I am good thanks! end`; mermaidAPI.parse(str); const messages = diagram.db.getMessages(); expect(messages[1].message).toBe(''); expect(messages[2].message).toBe('I am good thanks!'); expect(messages[3].message).toBe(''); expect(messages[4].message).toBe('I am good thanks!'); }); it('should handle links', function () { const str = ` sequenceDiagram participant a as Alice participant b as Bob participant c as Charlie links a: { "Repo": "https://repo.contoso.com/", "Dashboard": "https://dashboard.contoso.com/" } links b: { "Dashboard": "https://dashboard.contoso.com/" } links a: { "On-Call": "https://oncall.contoso.com/?svc=alice" } link a: Endpoint @ https://alice.contoso.com link a: Swagger @ https://swagger.contoso.com link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com `; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.a.links['Repo']).toBe('https://repo.contoso.com/'); expect(actors.b.links['Repo']).toBe(undefined); expect(actors.a.links['Dashboard']).toBe('https://dashboard.contoso.com/'); expect(actors.b.links['Dashboard']).toBe('https://dashboard.contoso.com/'); expect(actors.a.links['On-Call']).toBe('https://oncall.contoso.com/?svc=alice'); expect(actors.c.links['Dashboard']).toBe(undefined); expect(actors.a.links['Endpoint']).toBe('https://alice.contoso.com'); expect(actors.a.links['Swagger']).toBe('https://swagger.contoso.com'); expect(actors.a.links['Tests']).toBe('https://tests.contoso.com/?svc=alice@contoso.com'); }); it('should handle properties EXPERIMENTAL: USE WITH CAUTION', function () { //Be aware that the syntax for "properties" is likely to be changed. const str = ` sequenceDiagram participant a as Alice participant b as Bob participant c as Charlie properties a: {"class": "internal-service-actor", "icon": "@clock"} properties b: {"class": "external-service-actor", "icon": "@computer"} `; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors.a.properties['class']).toBe('internal-service-actor'); expect(actors.b.properties['class']).toBe('external-service-actor'); expect(actors.a.properties['icon']).toBe('@clock'); expect(actors.b.properties['icon']).toBe('@computer'); expect(actors.c.properties['class']).toBe(undefined); }); }); describe('when checking the bounds in a sequenceDiagram', function () { beforeAll(() => { let conf = { diagramMarginX: 50, diagramMarginY: 10, actorMargin: 50, width: 150, // Height of actor boxes height: 65, boxMargin: 10, messageMargin: 40, boxTextMargin: 15, noteMargin: 25, }; mermaidAPI.initialize({ sequence: conf }); }); let conf; beforeEach(function () { mermaidAPI.reset(); // diagram.db = sequenceDb; // diagram.db.clear(); diagram.renderer.bounds.init(); conf = diagram.db.getConfig(); }); it('should handle a simple bound call', function () { diagram.renderer.bounds.insert(100, 100, 200, 200); const { bounds } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(100); expect(bounds.starty).toBe(100); expect(bounds.stopx).toBe(200); expect(bounds.stopy).toBe(200); }); it('should handle an expanding bound', function () { diagram.renderer.bounds.insert(100, 100, 200, 200); diagram.renderer.bounds.insert(25, 50, 300, 400); const { bounds } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(25); expect(bounds.starty).toBe(50); expect(bounds.stopx).toBe(300); expect(bounds.stopy).toBe(400); }); it('should handle inserts within the bound without changing the outer bounds', function () { diagram.renderer.bounds.insert(100, 100, 200, 200); diagram.renderer.bounds.insert(25, 50, 300, 400); diagram.renderer.bounds.insert(125, 150, 150, 200); const { bounds } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(25); expect(bounds.starty).toBe(50); expect(bounds.stopx).toBe(300); expect(bounds.stopy).toBe(400); }); it('should handle a loop without expanding the area', function () { diagram.renderer.bounds.insert(25, 50, 300, 400); diagram.renderer.bounds.verticalPos = 150; diagram.renderer.bounds.newLoop(); diagram.renderer.bounds.insert(125, 150, 150, 200); const loop = diagram.renderer.bounds.endLoop(); expect(loop.startx).toBe(125 - conf.boxMargin); expect(loop.starty).toBe(150 - conf.boxMargin); expect(loop.stopx).toBe(150 + conf.boxMargin); expect(loop.stopy).toBe(200 + conf.boxMargin); // Check bounds of first loop const { bounds } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(25); expect(bounds.starty).toBe(50); expect(bounds.stopx).toBe(300); expect(bounds.stopy).toBe(400); }); it('should handle multiple loops withtout expanding the bounds', function () { diagram.renderer.bounds.insert(100, 100, 1000, 1000); diagram.renderer.bounds.verticalPos = 200; diagram.renderer.bounds.newLoop(); diagram.renderer.bounds.newLoop(); diagram.renderer.bounds.insert(200, 200, 300, 300); // Check bounds of first loop let loop = diagram.renderer.bounds.endLoop(); expect(loop.startx).toBe(200 - conf.boxMargin); expect(loop.starty).toBe(200 - conf.boxMargin); expect(loop.stopx).toBe(300 + conf.boxMargin); expect(loop.stopy).toBe(300 + conf.boxMargin); // Check bounds of second loop loop = diagram.renderer.bounds.endLoop(); expect(loop.startx).toBe(200 - 2 * conf.boxMargin); expect(loop.starty).toBe(200 - 2 * conf.boxMargin); expect(loop.stopx).toBe(300 + 2 * conf.boxMargin); expect(loop.stopy).toBe(300 + 2 * conf.boxMargin); // Check bounds of first loop const { bounds } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(100); expect(bounds.starty).toBe(100); expect(bounds.stopx).toBe(1000); expect(bounds.stopy).toBe(1000); }); it('should handle a loop that expands the area', function () { diagram.renderer.bounds.insert(100, 100, 200, 200); diagram.renderer.bounds.verticalPos = 200; diagram.renderer.bounds.newLoop(); diagram.renderer.bounds.insert(50, 50, 300, 300); const loop = diagram.renderer.bounds.endLoop(); expect(loop.startx).toBe(50 - conf.boxMargin); expect(loop.starty).toBe(50 - conf.boxMargin); expect(loop.stopx).toBe(300 + conf.boxMargin); expect(loop.stopy).toBe(300 + conf.boxMargin); // Check bounds after the loop const { bounds } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(loop.startx); expect(bounds.starty).toBe(loop.starty); expect(bounds.stopx).toBe(loop.stopx); expect(bounds.stopy).toBe(loop.stopy); }); }); describe('when rendering a sequenceDiagram APA', function () { beforeAll(() => { let conf = { diagramMarginX: 50, diagramMarginY: 10, actorMargin: 50, width: 150, // Height of actor boxes height: 65, boxMargin: 10, messageMargin: 40, boxTextMargin: 15, noteMargin: 25, wrap: false, mirrorActors: false, }; configApi.setSiteConfig({ logLevel: 5, sequence: conf }); }); let conf; beforeEach(function () { mermaidAPI.reset(); // }); conf = { diagramMarginX: 50, diagramMarginY: 10, actorMargin: 50, width: 150, // Height of actor boxes height: 65, boxMargin: 10, messageMargin: 40, boxTextMargin: 15, noteMargin: 25, wrap: false, mirrorActors: false, }; configApi.setSiteConfig({ logLevel: 5, sequence: conf }); diagram = new Diagram(` sequenceDiagram Alice->Bob:Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`); diagram.db.clear(); }); ['tspan', 'fo', 'old', undefined].forEach(function (textPlacement) { it(` it should handle one actor, when textPlacement is ${textPlacement}`, function () { const str = ` sequenceDiagram participant Alice`; // mermaidAPI.reinitialize({ sequence: { textPlacement: textPlacement } }); mermaidAPI.parse(str); // diagram.renderer.setConf(mermaidAPI.getConfig().sequence); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width); expect(bounds.stopy).toBe(conf.height); }); }); it('should handle same actor with different whitespace properly', function () { const str = ` sequenceDiagram participant Alice participant Alice participant Alice `; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(Object.keys(actors)).toEqual(['Alice']); }); it('should handle one actor and a centered note', function () { const str = ` sequenceDiagram participant Alice Note over Alice: Alice thinks `; expect(mermaidAPI.getConfig().sequence.mirrorActors).toBeFalsy(); mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width); // 10 comes from mock of text height expect(bounds.stopy).toBe(models.lastNote().stopy); }); it('should handle one actor and a note to the left', function () { const str = ` sequenceDiagram participant Alice Note left of Alice: Alice thinks`; mermaidAPI.parse(str, diagram); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width); // 10 comes from mock of text height expect(bounds.stopy).toBe(models.lastNote().stopy); }); it('should handle one actor and a note to the right', function () { const str = ` sequenceDiagram participant Alice Note right of Alice: Alice thinks`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width / 2 + conf.actorMargin / 2 + conf.width); // 10 comes from mock of text height expect(bounds.stopy).toBe(models.lastNote().stopy); }); it('should handle two actors', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you?`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); expect(bounds.stopy).toBe(models.lastMessage().stopy + 10); }); it('should handle two actors with init directive', function () { const str = ` %%{init: {'logLevel': 0}}%% sequenceDiagram Alice->Bob: Hello Bob, how are you?`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); const mermaid = mermaidAPI.getConfig(); expect(mermaid.logLevel).toBe(0); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); expect(bounds.stopy).toBe(models.lastMessage().stopy + 10); }); it('should handle two actors with init directive with multiline directive', function () { const str = ` %%{init: { 'logLevel': 0}}%% sequenceDiagram %%{ wrap }%% Alice->Bob: Hello Bob, how are you?`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const msgs = diagram.db.getMessages(); const { bounds, models } = diagram.renderer.bounds.getBounds(); const mermaid = mermaidAPI.getConfig(); expect(mermaid.logLevel).toBe(0); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); expect(bounds.stopy).toBe(models.lastMessage().stopy + 10); expect(msgs.every((v) => v.wrap)).toBe(true); }); it('should handle two actors and two centered shared notes', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? Note over Alice,Bob: Looks Note over Bob,Alice: Looks back `; // mermaidAPI.initialize({logLevel:0}) mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); expect(bounds.stopy).toBe(models.lastNote().stopy); }); it('should draw two actors and two messages', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine!`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); expect(bounds.stopy).toBe(models.lastMessage().stopy + 10); }); it('should draw two actors notes to the right', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? Note right of Bob: Bob thinks Bob->Alice: Fine!`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); const expStopX = conf.actorMargin + conf.width + conf.width / 2 + conf.noteMargin + conf.width; expect(bounds.stopx).toBe(expStopX); expect(bounds.stopy).toBe(models.lastMessage().stopy + 10); }); it('should draw two actors notes to the left', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? Note left of Alice: Bob thinks Bob->Alice: Fine!`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); expect(bounds.stopy).toBe(models.lastMessage().stopy + 10); }); it('should draw two actors notes to the left with text wrapped (inline)', function () { const str = ` sequenceDiagram Alice->>Bob:wrap: Hello Bob, how are you? If you are not available right now, I can leave you a message. Please get back to me as soon as you can! Note left of Alice: Bob thinks Bob->>Alice: Fine!`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); const msgs = diagram.db.getMessages(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); expect(bounds.starty).toBe(0); expect(msgs[0].wrap).toBe(true); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); expect(bounds.stopy).toBe(models.lastMessage().stopy + 10); }); it('should draw two actors notes to the left with text wrapped (directive)', function () { const str = ` %%{init: { 'theme': 'dark' } }%% sequenceDiagram %%{wrap}%% Alice->>Bob: Hello Bob, how are you? If you are not available right now, I can leave you a message. Please get back to me as soon as you can! Note left of Alice: Bob thinks Bob->>Alice: Fine!`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); const msgs = diagram.db.getMessages(); const mermaid = mermaidAPI.getConfig(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); expect(bounds.starty).toBe(0); expect(mermaid.theme).toBe('dark'); expect(msgs.every((v) => v.wrap)).toBe(true); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); expect(bounds.stopy).toBe(models.lastMessage().stopy + 10); }); it('should draw two actors notes to the left with text wrapped and the init directive sets the theme to dark', function () { const str = ` %%{init:{'theme':'dark'}}%% sequenceDiagram %%{wrap}%% Alice->>Bob: Hello Bob, how are you? If you are not available right now, I can leave you a message. Please get back to me as soon as you can! Note left of Alice: Bob thinks Bob->>Alice: Fine!`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); const msgs = diagram.db.getMessages(); const mermaid = mermaidAPI.getConfig(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); expect(bounds.starty).toBe(0); expect(mermaid.theme).toBe('dark'); expect(msgs.every((v) => v.wrap)).toBe(true); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); expect(bounds.stopy).toBe(models.lastMessage().stopy + 10); }); it('should draw two actors, notes to the left with text wrapped and the init directive sets the theme to dark and fontFamily to Menlo, fontSize to 18, and fontWeight to 800', function () { const str = ` %%{init: { "theme": "dark", 'config': { "fontFamily": "Menlo", "fontSize": 18, "messageFontWeight": 400, "wrap": true }}}%% sequenceDiagram Alice->>Bob: Hello Bob, how are you? If you are not available right now, I can leave you a message. Please get back to me as soon as you can! Note left of Alice: Bob thinks Bob->>Alice: Fine!`; // mermaidAPI.initialize({ logLevel: 0 }); mermaidAPI.parse(str, diagram); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); const msgs = diagram.db.getMessages(); const mermaid = mermaidAPI.getConfig(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); expect(bounds.starty).toBe(0); expect(mermaid.theme).toBe('dark'); expect(mermaid.sequence.fontFamily).toBe('Menlo'); expect(mermaid.sequence.fontSize).toBe(18); expect(mermaid.sequence.messageFontWeight).toBe(400); expect(msgs.every((v) => v.wrap)).toBe(true); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); expect(bounds.stopy).toBe(models.lastMessage().stopy + 10); }); it('should draw two loops', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, how are you? loop Cheers Bob->Alice: Fine! end`; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); expect(bounds.stopy).toBe(models.lastLoop().stopy); }); it('should draw background rect', function () { const str = ` sequenceDiagram Alice->Bob: Hello Bob, are you alright? rect rgb(0, 0, 0) Bob->Alice: I feel surrounded by darkness end `; mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); expect(bounds.stopy).toBe(models.lastLoop().stopy); }); }); describe('when rendering a sequenceDiagram with actor mirror activated', function () { beforeAll(() => { let conf = { diagramMarginX: 50, diagramMarginY: 10, actorMargin: 50, width: 150, // Height of actor boxes height: 65, boxMargin: 10, messageMargin: 40, boxTextMargin: 15, noteMargin: 25, mirrorActors: true, // Depending on css styling this might need adjustment // Prolongs the edge of the diagram downwards bottomMarginAdj: 1, }; mermaidAPI.initialize({ sequence: conf }); }); let conf; beforeEach(function () { mermaidAPI.reset(); // diagram.db = sequenceDb; diagram.db.clear(); conf = diagram.db.getConfig(); diagram.renderer.bounds.init(); }); ['tspan', 'fo', 'old', undefined].forEach(function (textPlacement) { it('should handle one actor, when textPlacement is' + textPlacement, function () { mermaidAPI.initialize(addConf(conf, 'textPlacement', textPlacement)); diagram.renderer.bounds.init(); const str = ` sequenceDiagram participant Alice`; diagram.renderer.bounds.init(); mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width); expect(bounds.stopy).toBe(models.lastActor().y + models.lastActor().height + conf.boxMargin); }); }); }); describe('when rendering a sequenceDiagram with directives', function () { beforeAll(function () { let conf = { diagramMarginX: 50, diagramMarginY: 10, actorMargin: 50, width: 150, height: 65, boxMargin: 10, messageMargin: 40, boxTextMargin: 15, noteMargin: 25, }; mermaidAPI.initialize({ sequence: conf }); }); let conf; beforeEach(function () { mermaidAPI.reset(); // diagram.db = sequenceDb; diagram.db.clear(); conf = diagram.db.getConfig(); diagram.renderer.bounds.init(); }); it('should handle one actor, when theme is dark and logLevel is 1 DX1 (dfg1)', function () { const str = ` %%{init: { "theme": "dark", "logLevel": 1 } }%% sequenceDiagram %%{wrap}%% participant Alice `; diagram = new Diagram(str); diagram.renderer.bounds.init(); mermaidAPI.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); const mermaid = mermaidAPI.getConfig(); expect(mermaid.theme).toBe('dark'); expect(mermaid.logLevel).toBe(1); expect(bounds.startx).toBe(0); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopy).toBe( models.lastActor().y + models.lastActor().height + mermaid.sequence.boxMargin ); }); it('should handle one actor, when logLevel is 3 (dfg0)', function () { const str = ` %%{initialize: { "logLevel": 3 }}%% sequenceDiagram participant Alice `; diagram.parse(str); diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); const mermaid = mermaidAPI.getConfig(); expect(mermaid.logLevel).toBe(3); expect(bounds.startx).toBe(0); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopy).toBe( models.lastActor().y + models.lastActor().height + mermaid.sequence.boxMargin ); }); it('should hide sequence numbers when autonumber is removed when autonumber is enabled', function () { const str1 = ` sequenceDiagram autonumber Alice->Bob:Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; mermaidAPI.parse(str1, diagram); diagram.renderer.draw(str1, 'tst', '1.2.3', diagram); // needs to be rendered for the correct value of visibility autonumbers expect(diagram.db.showSequenceNumbers()).toBe(true); const str2 = ` sequenceDiagram Alice->Bob:Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; mermaidAPI.parse(str2, diagram); diagram.renderer.draw(str2, 'tst', '1.2.3', diagram); expect(diagram.db.showSequenceNumbers()).toBe(false); }); }); �����������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts���������������0000664�0000000�0000000�00000125003�14332737457�0031120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// @ts-nocheck TODO: fix file import { select, selectAll } from 'd3'; import svgDraw, { drawText, fixLifeLineHeights } from './svgDraw'; import { log } from '../../logger'; // import { parser } from './parser/sequenceDiagram'; import common from '../common/common'; // import sequenceDb from './sequenceDb'; import * as configApi from '../../config'; import assignWithDepth from '../../assignWithDepth'; import utils from '../../utils'; import { configureSvgSize } from '../../setupGraphViewbox'; import addSVGAccessibilityFields from '../../accessibility'; let conf = {}; export const bounds = { data: { startx: undefined, stopx: undefined, starty: undefined, stopy: undefined, }, verticalPos: 0, sequenceItems: [], activations: [], models: { getHeight: function () { return ( Math.max.apply( null, this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0) ) + (this.loops.length === 0 ? 0 : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.messages.length === 0 ? 0 : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.notes.length === 0 ? 0 : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h)) ); }, clear: function () { this.actors = []; this.loops = []; this.messages = []; this.notes = []; }, addActor: function (actorModel) { this.actors.push(actorModel); }, addLoop: function (loopModel) { this.loops.push(loopModel); }, addMessage: function (msgModel) { this.messages.push(msgModel); }, addNote: function (noteModel) { this.notes.push(noteModel); }, lastActor: function () { return this.actors[this.actors.length - 1]; }, lastLoop: function () { return this.loops[this.loops.length - 1]; }, lastMessage: function () { return this.messages[this.messages.length - 1]; }, lastNote: function () { return this.notes[this.notes.length - 1]; }, actors: [], loops: [], messages: [], notes: [], }, init: function () { this.sequenceItems = []; this.activations = []; this.models.clear(); this.data = { startx: undefined, stopx: undefined, starty: undefined, stopy: undefined, }; this.verticalPos = 0; setConf(configApi.getConfig()); }, updateVal: function (obj, key, val, fun) { if (typeof obj[key] === 'undefined') { obj[key] = val; } else { obj[key] = fun(val, obj[key]); } }, updateBounds: function (startx, starty, stopx, stopy) { // eslint-disable-next-line @typescript-eslint/no-this-alias const _self = this; let cnt = 0; /** @param {any} type */ function updateFn(type) { return function updateItemBounds(item) { cnt++; // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems const n = _self.sequenceItems.length - cnt + 1; _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min); _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max); _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min); _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max); if (!(type === 'activation')) { _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min); _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max); _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min); _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max); } }; } this.sequenceItems.forEach(updateFn()); this.activations.forEach(updateFn('activation')); }, insert: function (startx, starty, stopx, stopy) { const _startx = Math.min(startx, stopx); const _stopx = Math.max(startx, stopx); const _starty = Math.min(starty, stopy); const _stopy = Math.max(starty, stopy); this.updateVal(bounds.data, 'startx', _startx, Math.min); this.updateVal(bounds.data, 'starty', _starty, Math.min); this.updateVal(bounds.data, 'stopx', _stopx, Math.max); this.updateVal(bounds.data, 'stopy', _stopy, Math.max); this.updateBounds(_startx, _starty, _stopx, _stopy); }, newActivation: function (message, diagram, actors) { const actorRect = actors[message.from.actor]; const stackedSize = actorActivations(message.from.actor).length || 0; const x = actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2; this.activations.push({ startx: x, starty: this.verticalPos + 2, stopx: x + conf.activationWidth, stopy: undefined, actor: message.from.actor, anchored: svgDraw.anchorElement(diagram), }); }, endActivation: function (message) { // find most recent activation for given actor const lastActorActivationIdx = this.activations .map(function (activation) { return activation.actor; }) .lastIndexOf(message.from.actor); return this.activations.splice(lastActorActivationIdx, 1)[0]; }, createLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) { return { startx: undefined, starty: this.verticalPos, stopx: undefined, stopy: undefined, title: title.message, wrap: title.wrap, width: title.width, height: 0, fill: fill, }; }, newLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) { this.sequenceItems.push(this.createLoop(title, fill)); }, endLoop: function () { return this.sequenceItems.pop(); }, addSectionToLoop: function (message) { const loop = this.sequenceItems.pop(); loop.sections = loop.sections || []; loop.sectionTitles = loop.sectionTitles || []; loop.sections.push({ y: bounds.getVerticalPos(), height: 0 }); loop.sectionTitles.push(message); this.sequenceItems.push(loop); }, bumpVerticalPos: function (bump) { this.verticalPos = this.verticalPos + bump; this.data.stopy = this.verticalPos; }, getVerticalPos: function () { return this.verticalPos; }, getBounds: function () { return { bounds: this.data, models: this.models }; }, }; /** * Draws an note in the diagram with the attached line * * @param {any} elem - The diagram to draw to. * @param {{ x: number; y: number; message: string; width: number }} noteModel - Startx: x axis * start position, verticalPos: y axis position, messsage: the message to be shown, width: Set * this with a custom width to override the default configured width. */ const drawNote = function (elem, noteModel) { bounds.bumpVerticalPos(conf.boxMargin); noteModel.height = conf.boxMargin; noteModel.starty = bounds.getVerticalPos(); const rect = svgDraw.getNoteRect(); rect.x = noteModel.startx; rect.y = noteModel.starty; rect.width = noteModel.width || conf.width; rect.class = 'note'; const g = elem.append('g'); const rectElem = svgDraw.drawRect(g, rect); const textObj = svgDraw.getTextObj(); textObj.x = noteModel.startx; textObj.y = noteModel.starty; textObj.width = rect.width; textObj.dy = '1em'; textObj.text = noteModel.message; textObj.class = 'noteText'; textObj.fontFamily = conf.noteFontFamily; textObj.fontSize = conf.noteFontSize; textObj.fontWeight = conf.noteFontWeight; textObj.anchor = conf.noteAlign; textObj.textMargin = conf.noteMargin; textObj.valign = 'center'; const textElem = drawText(g, textObj); const textHeight = Math.round( textElem .map((te) => (te._groups || te)[0][0].getBBox().height) .reduce((acc, curr) => acc + curr) ); rectElem.attr('height', textHeight + 2 * conf.noteMargin); noteModel.height += textHeight + 2 * conf.noteMargin; bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin); noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin; noteModel.stopx = noteModel.startx + rect.width; bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy); bounds.models.addNote(noteModel); }; const messageFont = (cnf) => { return { fontFamily: cnf.messageFontFamily, fontSize: cnf.messageFontSize, fontWeight: cnf.messageFontWeight, }; }; const noteFont = (cnf) => { return { fontFamily: cnf.noteFontFamily, fontSize: cnf.noteFontSize, fontWeight: cnf.noteFontWeight, }; }; const actorFont = (cnf) => { return { fontFamily: cnf.actorFontFamily, fontSize: cnf.actorFontSize, fontWeight: cnf.actorFontWeight, }; }; /** * Process a message by adding its dimensions to the bound. It returns the Y coordinate of the * message so it can be drawn later. We do not draw the message at this point so the arrowhead can * be on top of the activation box. * * @param {any} diagram - The parent of the message element * @param {any} msgModel - The model containing fields describing a message * @returns {number} LineStarty - The Y coordinate at which the message line starts */ const boundMessage = function (diagram, msgModel) { bounds.bumpVerticalPos(10); const { startx, stopx, message } = msgModel; const lines = common.splitBreaks(message).length; const textDims = utils.calculateTextDimensions(message, messageFont(conf)); const lineHeight = textDims.height / lines; msgModel.height += lineHeight; bounds.bumpVerticalPos(lineHeight); let lineStarty; let totalOffset = textDims.height - 10; const textWidth = textDims.width; if (startx === stopx) { lineStarty = bounds.getVerticalPos() + totalOffset; if (!conf.rightAngles) { totalOffset += conf.boxMargin; lineStarty = bounds.getVerticalPos() + totalOffset; } totalOffset += 30; const dx = Math.max(textWidth / 2, conf.width / 2); bounds.insert( startx - dx, bounds.getVerticalPos() - 10 + totalOffset, stopx + dx, bounds.getVerticalPos() + 30 + totalOffset ); } else { totalOffset += conf.boxMargin; lineStarty = bounds.getVerticalPos() + totalOffset; bounds.insert(startx, lineStarty - 10, stopx, lineStarty); } bounds.bumpVerticalPos(totalOffset); msgModel.height += totalOffset; msgModel.stopy = msgModel.starty + msgModel.height; bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy); return lineStarty; }; /** * Draws a message. Note that the bounds have previously been updated by boundMessage. * * @param {any} diagram - The parent of the message element * @param {any} msgModel - The model containing fields describing a message * @param {number} lineStarty - The Y coordinate at which the message line starts * @param diagObj */ const drawMessage = function (diagram, msgModel, lineStarty, diagObj) { const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel; const textDims = utils.calculateTextDimensions(message, messageFont(conf)); const textObj = svgDraw.getTextObj(); textObj.x = startx; textObj.y = starty + 10; textObj.width = stopx - startx; textObj.class = 'messageText'; textObj.dy = '1em'; textObj.text = message; textObj.fontFamily = conf.messageFontFamily; textObj.fontSize = conf.messageFontSize; textObj.fontWeight = conf.messageFontWeight; textObj.anchor = conf.messageAlign; textObj.valign = 'center'; textObj.textMargin = conf.wrapPadding; textObj.tspan = false; drawText(diagram, textObj); const textWidth = textDims.width; let line; if (startx === stopx) { if (conf.rightAngles) { line = diagram .append('path') .attr( 'd', `M ${startx},${lineStarty} H ${startx + Math.max(conf.width / 2, textWidth / 2)} V ${ lineStarty + 25 } H ${startx}` ); } else { line = diagram .append('path') .attr( 'd', 'M ' + startx + ',' + lineStarty + ' C ' + (startx + 60) + ',' + (lineStarty - 10) + ' ' + (startx + 60) + ',' + (lineStarty + 30) + ' ' + startx + ',' + (lineStarty + 20) ); } } else { line = diagram.append('line'); line.attr('x1', startx); line.attr('y1', lineStarty); line.attr('x2', stopx); line.attr('y2', lineStarty); } // Make an SVG Container // Draw the line if ( type === diagObj.db.LINETYPE.DOTTED || type === diagObj.db.LINETYPE.DOTTED_CROSS || type === diagObj.db.LINETYPE.DOTTED_POINT || type === diagObj.db.LINETYPE.DOTTED_OPEN ) { line.style('stroke-dasharray', '3, 3'); line.attr('class', 'messageLine1'); } else { line.attr('class', 'messageLine0'); } let url = ''; if (conf.arrowMarkerAbsolute) { url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search; url = url.replace(/\(/g, '\\('); url = url.replace(/\)/g, '\\)'); } line.attr('stroke-width', 2); line.attr('stroke', 'none'); // handled by theme/css anyway line.style('fill', 'none'); // remove any fill colour if (type === diagObj.db.LINETYPE.SOLID || type === diagObj.db.LINETYPE.DOTTED) { line.attr('marker-end', 'url(' + url + '#arrowhead)'); } if (type === diagObj.db.LINETYPE.SOLID_POINT || type === diagObj.db.LINETYPE.DOTTED_POINT) { line.attr('marker-end', 'url(' + url + '#filled-head)'); } if (type === diagObj.db.LINETYPE.SOLID_CROSS || type === diagObj.db.LINETYPE.DOTTED_CROSS) { line.attr('marker-end', 'url(' + url + '#crosshead)'); } // add node number if (sequenceVisible || conf.showSequenceNumbers) { line.attr('marker-start', 'url(' + url + '#sequencenumber)'); diagram .append('text') .attr('x', startx) .attr('y', lineStarty + 4) .attr('font-family', 'sans-serif') .attr('font-size', '12px') .attr('text-anchor', 'middle') .attr('class', 'sequenceNumber') .text(sequenceIndex); } }; export const drawActors = function ( diagram, actors, actorKeys, verticalPos, configuration, messages ) { if (configuration.hideUnusedParticipants === true) { const newActors = new Set(); messages.forEach((message) => { newActors.add(message.from); newActors.add(message.to); }); actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey)); } // Draw the actors let prevWidth = 0; let prevMargin = 0; let maxHeight = 0; for (let i = 0; i < actorKeys.length; i++) { const actor = actors[actorKeys[i]]; // Add some rendering data to the object actor.width = actor.width || conf.width; actor.height = Math.max(actor.height || conf.height, conf.height); actor.margin = actor.margin || conf.actorMargin; actor.x = prevWidth + prevMargin; actor.y = verticalPos; // Draw the box with the attached line const height = svgDraw.drawActor(diagram, actor, conf); maxHeight = Math.max(maxHeight, height); bounds.insert(actor.x, verticalPos, actor.x + actor.width, actor.height); prevWidth += actor.width; prevMargin += actor.margin; bounds.models.addActor(actor); } // Add a margin between the actor boxes and the first arrow bounds.bumpVerticalPos(maxHeight); }; export const drawActorsPopup = function (diagram, actors, actorKeys, doc) { let maxHeight = 0; let maxWidth = 0; for (let i = 0; i < actorKeys.length; i++) { const actor = actors[actorKeys[i]]; const minMenuWidth = getRequiredPopupWidth(actor); const menuDimensions = svgDraw.drawPopup( diagram, actor, minMenuWidth, conf, conf.forceMenus, doc ); if (menuDimensions.height > maxHeight) { maxHeight = menuDimensions.height; } if (menuDimensions.width + actor.x > maxWidth) { maxWidth = menuDimensions.width + actor.x; } } return { maxHeight: maxHeight, maxWidth: maxWidth }; }; export const setConf = function (cnf) { assignWithDepth(conf, cnf); if (cnf.fontFamily) { conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily; } if (cnf.fontSize) { conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize; } if (cnf.fontWeight) { conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight; } }; const actorActivations = function (actor) { return bounds.activations.filter(function (activation) { return activation.actor === actor; }); }; const activationBounds = function (actor, actors) { // handle multiple stacked activations for same actor const actorObj = actors[actor]; const activations = actorActivations(actor); const left = activations.reduce(function (acc, activation) { return Math.min(acc, activation.startx); }, actorObj.x + actorObj.width / 2); const right = activations.reduce(function (acc, activation) { return Math.max(acc, activation.stopx); }, actorObj.x + actorObj.width / 2); return [left, right]; }; /** * @param {any} loopWidths * @param {any} msg * @param {any} preMargin * @param {any} postMargin * @param {any} addLoopFn */ function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) { bounds.bumpVerticalPos(preMargin); let heightAdjust = postMargin; if (msg.id && msg.message && loopWidths[msg.id]) { const loopWidth = loopWidths[msg.id].width; const textConf = messageFont(conf); msg.message = utils.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf); msg.width = loopWidth; msg.wrap = true; // const lines = common.splitBreaks(msg.message).length; const textDims = utils.calculateTextDimensions(msg.message, textConf); const totalOffset = Math.max(textDims.height, conf.labelBoxHeight); heightAdjust = postMargin + totalOffset; log.debug(`${totalOffset} - ${msg.message}`); } addLoopFn(msg); bounds.bumpVerticalPos(heightAdjust); } /** * Draws a sequenceDiagram in the tag with id: id based on the graph definition in text. * * @param {any} _text The text of the diagram * @param {any} id The id of the diagram which will be used as a DOM element id¨ * @param {any} _version Mermaid version from package.json * @param {any} diagObj A stanard diagram containing the db and the text and type etc of the diagram */ export const draw = function (_text, id, _version, diagObj) { const { securityLevel, sequence } = configApi.getConfig(); conf = sequence; // Handle root and Document for when rendering in sanbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; bounds.init(); log.debug(diagObj.db); const diagram = securityLevel === 'sandbox' ? root.select(`[id="${id}"]`) : select(`[id="${id}"]`); // Fetch data from the parsing const actors = diagObj.db.getActors(); const actorKeys = diagObj.db.getActorKeys(); const messages = diagObj.db.getMessages(); const title = diagObj.db.getDiagramTitle(); const maxMessageWidthPerActor = getMaxMessageWidthPerActor(actors, messages, diagObj); conf.height = calculateActorMargins(actors, maxMessageWidthPerActor); svgDraw.insertComputerIcon(diagram); svgDraw.insertDatabaseIcon(diagram); svgDraw.insertClockIcon(diagram); drawActors(diagram, actors, actorKeys, 0, conf, messages); const loopWidths = calculateLoopBounds(messages, actors, maxMessageWidthPerActor, diagObj); // The arrow head definition is attached to the svg once svgDraw.insertArrowHead(diagram); svgDraw.insertArrowCrossHead(diagram); svgDraw.insertArrowFilledHead(diagram); svgDraw.insertSequenceNumber(diagram); /** * @param {any} msg * @param {any} verticalPos */ function activeEnd(msg, verticalPos) { const activationData = bounds.endActivation(msg); if (activationData.starty + 18 > verticalPos) { activationData.starty = verticalPos - 6; verticalPos += 12; } svgDraw.drawActivation( diagram, activationData, verticalPos, conf, actorActivations(msg.from.actor).length ); bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos); } // Draw the messages/signals let sequenceIndex = 1; let sequenceIndexStep = 1; const messagesToDraw = []; messages.forEach(function (msg) { let loopModel, noteModel, msgModel; switch (msg.type) { case diagObj.db.LINETYPE.NOTE: noteModel = msg.noteModel; drawNote(diagram, noteModel); break; case diagObj.db.LINETYPE.ACTIVE_START: bounds.newActivation(msg, diagram, actors); break; case diagObj.db.LINETYPE.ACTIVE_END: activeEnd(msg, bounds.getVerticalPos()); break; case diagObj.db.LINETYPE.LOOP_START: adjustLoopHeightForWrap( loopWidths, msg, conf.boxMargin, conf.boxMargin + conf.boxTextMargin, (message) => bounds.newLoop(message) ); break; case diagObj.db.LINETYPE.LOOP_END: loopModel = bounds.endLoop(); svgDraw.drawLoop(diagram, loopModel, 'loop', conf); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.RECT_START: adjustLoopHeightForWrap(loopWidths, msg, conf.boxMargin, conf.boxMargin, (message) => bounds.newLoop(undefined, message.message) ); break; case diagObj.db.LINETYPE.RECT_END: loopModel = bounds.endLoop(); svgDraw.drawBackgroundRect(diagram, loopModel); bounds.models.addLoop(loopModel); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); break; case diagObj.db.LINETYPE.OPT_START: adjustLoopHeightForWrap( loopWidths, msg, conf.boxMargin, conf.boxMargin + conf.boxTextMargin, (message) => bounds.newLoop(message) ); break; case diagObj.db.LINETYPE.OPT_END: loopModel = bounds.endLoop(); svgDraw.drawLoop(diagram, loopModel, 'opt', conf); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.ALT_START: adjustLoopHeightForWrap( loopWidths, msg, conf.boxMargin, conf.boxMargin + conf.boxTextMargin, (message) => bounds.newLoop(message) ); break; case diagObj.db.LINETYPE.ALT_ELSE: adjustLoopHeightForWrap( loopWidths, msg, conf.boxMargin + conf.boxTextMargin, conf.boxMargin, (message) => bounds.addSectionToLoop(message) ); break; case diagObj.db.LINETYPE.ALT_END: loopModel = bounds.endLoop(); svgDraw.drawLoop(diagram, loopModel, 'alt', conf); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.PAR_START: adjustLoopHeightForWrap( loopWidths, msg, conf.boxMargin, conf.boxMargin + conf.boxTextMargin, (message) => bounds.newLoop(message) ); break; case diagObj.db.LINETYPE.PAR_AND: adjustLoopHeightForWrap( loopWidths, msg, conf.boxMargin + conf.boxTextMargin, conf.boxMargin, (message) => bounds.addSectionToLoop(message) ); break; case diagObj.db.LINETYPE.PAR_END: loopModel = bounds.endLoop(); svgDraw.drawLoop(diagram, loopModel, 'par', conf); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.AUTONUMBER: sequenceIndex = msg.message.start || sequenceIndex; sequenceIndexStep = msg.message.step || sequenceIndexStep; if (msg.message.visible) diagObj.db.enableSequenceNumbers(); else diagObj.db.disableSequenceNumbers(); break; case diagObj.db.LINETYPE.CRITICAL_START: adjustLoopHeightForWrap( loopWidths, msg, conf.boxMargin, conf.boxMargin + conf.boxTextMargin, (message) => bounds.newLoop(message) ); break; case diagObj.db.LINETYPE.CRITICAL_OPTION: adjustLoopHeightForWrap( loopWidths, msg, conf.boxMargin + conf.boxTextMargin, conf.boxMargin, (message) => bounds.addSectionToLoop(message) ); break; case diagObj.db.LINETYPE.CRITICAL_END: loopModel = bounds.endLoop(); svgDraw.drawLoop(diagram, loopModel, 'critical', conf); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.BREAK_START: adjustLoopHeightForWrap( loopWidths, msg, conf.boxMargin, conf.boxMargin + conf.boxTextMargin, (message) => bounds.newLoop(message) ); break; case diagObj.db.LINETYPE.BREAK_END: loopModel = bounds.endLoop(); svgDraw.drawLoop(diagram, loopModel, 'break', conf); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; default: try { // lastMsg = msg msgModel = msg.msgModel; msgModel.starty = bounds.getVerticalPos(); msgModel.sequenceIndex = sequenceIndex; msgModel.sequenceVisible = diagObj.db.showSequenceNumbers(); const lineStarty = boundMessage(diagram, msgModel); messagesToDraw.push({ messageModel: msgModel, lineStarty: lineStarty }); bounds.models.addMessage(msgModel); } catch (e) { log.error('error while drawing message', e); } } // Increment sequence counter if msg.type is a line (and not another event like activation or note, etc) if ( [ diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN, diagObj.db.LINETYPE.SOLID, diagObj.db.LINETYPE.DOTTED, diagObj.db.LINETYPE.SOLID_CROSS, diagObj.db.LINETYPE.DOTTED_CROSS, diagObj.db.LINETYPE.SOLID_POINT, diagObj.db.LINETYPE.DOTTED_POINT, ].includes(msg.type) ) { sequenceIndex = sequenceIndex + sequenceIndexStep; } }); messagesToDraw.forEach((e) => drawMessage(diagram, e.messageModel, e.lineStarty, diagObj)); if (conf.mirrorActors) { // Draw actors below diagram bounds.bumpVerticalPos(conf.boxMargin * 2); drawActors(diagram, actors, actorKeys, bounds.getVerticalPos(), conf, messages); bounds.bumpVerticalPos(conf.boxMargin); fixLifeLineHeights(diagram, bounds.getVerticalPos()); } // only draw popups for the top row of actors. const requiredBoxSize = drawActorsPopup(diagram, actors, actorKeys, doc); const { bounds: box } = bounds.getBounds(); // Adjust line height of actor lines now that the height of the diagram is known log.debug('For line height fix Querying: #' + id + ' .actor-line'); const actorLines = selectAll('#' + id + ' .actor-line'); actorLines.attr('y2', box.stopy); // Make sure the height of the diagram supports long menus. let boxHeight = box.stopy - box.starty; if (boxHeight < requiredBoxSize.maxHeight) { boxHeight = requiredBoxSize.maxHeight; } let height = boxHeight + 2 * conf.diagramMarginY; if (conf.mirrorActors) { height = height - conf.boxMargin + conf.bottomMarginAdj; } // Make sure the width of the diagram supports wide menus. let boxWidth = box.stopx - box.startx; if (boxWidth < requiredBoxSize.maxWidth) { boxWidth = requiredBoxSize.maxWidth; } const width = boxWidth + 2 * conf.diagramMarginX; if (title) { diagram .append('text') .text(title) .attr('x', (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX) .attr('y', -25); } configureSvgSize(diagram, height, width, conf.useMaxWidth); const extraVertForTitle = title ? 40 : 0; diagram.attr( 'viewBox', box.startx - conf.diagramMarginX + ' -' + (conf.diagramMarginY + extraVertForTitle) + ' ' + width + ' ' + (height + extraVertForTitle) ); addSVGAccessibilityFields(diagObj.db, diagram, id); log.debug(`models:`, bounds.models); }; /** * Retrieves the max message width of each actor, supports signals (messages, loops) and notes. * * It will enumerate each given message, and will determine its text width, in relation to the actor * it originates from, and destined to. * * @param {any} actors - The actors map * @param {Array} messages - A list of message objects to iterate * @param diagObj * @returns {any} */ const getMaxMessageWidthPerActor = function (actors, messages, diagObj) { const maxMessageWidthPerActor = {}; messages.forEach(function (msg) { if (actors[msg.to] && actors[msg.from]) { const actor = actors[msg.to]; // If this is the first actor, and the message is left of it, no need to calculate the margin if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) { return; } // If this is the last actor, and the message is right of it, no need to calculate the margin if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) { return; } const isNote = msg.placement !== undefined; const isMessage = !isNote; const textFont = isNote ? noteFont(conf) : messageFont(conf); const wrappedMessage = msg.wrap ? utils.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont) : msg.message; const messageDimensions = utils.calculateTextDimensions(wrappedMessage, textFont); const messageWidth = messageDimensions.width + 2 * conf.wrapPadding; /* * The following scenarios should be supported: * * - There's a message (non-note) between fromActor and toActor * - If fromActor is on the right and toActor is on the left, we should * define the toActor's margin * - If fromActor is on the left and toActor is on the right, we should * define the fromActor's margin * - There's a note, in which case fromActor == toActor * - If the note is to the left of the actor, we should define the previous actor * margin * - If the note is on the actor, we should define both the previous and next actor * margins, each being the half of the note size * - If the note is on the right of the actor, we should define the current actor * margin */ if (isMessage && msg.from === actor.nextActor) { maxMessageWidthPerActor[msg.to] = Math.max( maxMessageWidthPerActor[msg.to] || 0, messageWidth ); } else if (isMessage && msg.from === actor.prevActor) { maxMessageWidthPerActor[msg.from] = Math.max( maxMessageWidthPerActor[msg.from] || 0, messageWidth ); } else if (isMessage && msg.from === msg.to) { maxMessageWidthPerActor[msg.from] = Math.max( maxMessageWidthPerActor[msg.from] || 0, messageWidth / 2 ); maxMessageWidthPerActor[msg.to] = Math.max( maxMessageWidthPerActor[msg.to] || 0, messageWidth / 2 ); } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { maxMessageWidthPerActor[msg.from] = Math.max( maxMessageWidthPerActor[msg.from] || 0, messageWidth ); } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { maxMessageWidthPerActor[actor.prevActor] = Math.max( maxMessageWidthPerActor[actor.prevActor] || 0, messageWidth ); } else if (msg.placement === diagObj.db.PLACEMENT.OVER) { if (actor.prevActor) { maxMessageWidthPerActor[actor.prevActor] = Math.max( maxMessageWidthPerActor[actor.prevActor] || 0, messageWidth / 2 ); } if (actor.nextActor) { maxMessageWidthPerActor[msg.from] = Math.max( maxMessageWidthPerActor[msg.from] || 0, messageWidth / 2 ); } } } }); log.debug('maxMessageWidthPerActor:', maxMessageWidthPerActor); return maxMessageWidthPerActor; }; const getRequiredPopupWidth = function (actor) { let requiredPopupWidth = 0; const textFont = actorFont(conf); for (const key in actor.links) { const labelDimensions = utils.calculateTextDimensions(key, textFont); const labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin; if (requiredPopupWidth < labelWidth) { requiredPopupWidth = labelWidth; } } return requiredPopupWidth; }; /** * This will calculate the optimal margin for each given actor, for a given actor->messageWidth map. * * An actor's margin is determined by the width of the actor, the width of the largest message that * originates from it, and the configured conf.actorMargin. * * @param {any} actors - The actors map to calculate margins for * @param {any} actorToMessageWidth - A map of actor key -> max message width it holds */ const calculateActorMargins = function (actors, actorToMessageWidth) { let maxHeight = 0; Object.keys(actors).forEach((prop) => { const actor = actors[prop]; if (actor.wrap) { actor.description = utils.wrapLabel( actor.description, conf.width - 2 * conf.wrapPadding, actorFont(conf) ); } const actDims = utils.calculateTextDimensions(actor.description, actorFont(conf)); actor.width = actor.wrap ? conf.width : Math.max(conf.width, actDims.width + 2 * conf.wrapPadding); actor.height = actor.wrap ? Math.max(actDims.height, conf.height) : conf.height; maxHeight = Math.max(maxHeight, actor.height); }); for (const actorKey in actorToMessageWidth) { const actor = actors[actorKey]; if (!actor) { continue; } const nextActor = actors[actor.nextActor]; // No need to space out an actor that doesn't have a next link if (!nextActor) { continue; } const messageWidth = actorToMessageWidth[actorKey]; const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2; actor.margin = Math.max(actorWidth, conf.actorMargin); } return Math.max(maxHeight, conf.height); }; const buildNoteModel = function (msg, actors, diagObj) { const startx = actors[msg.from].x; const stopx = actors[msg.to].x; const shouldWrap = msg.wrap && msg.message; let textDimensions = utils.calculateTextDimensions( shouldWrap ? utils.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message, noteFont(conf) ); const noteModel = { width: shouldWrap ? conf.width : Math.max(conf.width, textDimensions.width + 2 * conf.noteMargin), height: 0, startx: actors[msg.from].x, stopx: 0, starty: 0, stopy: 0, message: msg.message, }; if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { noteModel.width = shouldWrap ? Math.max(conf.width, textDimensions.width) : Math.max( actors[msg.from].width / 2 + actors[msg.to].width / 2, textDimensions.width + 2 * conf.noteMargin ); noteModel.startx = startx + (actors[msg.from].width + conf.actorMargin) / 2; } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { noteModel.width = shouldWrap ? Math.max(conf.width, textDimensions.width + 2 * conf.noteMargin) : Math.max( actors[msg.from].width / 2 + actors[msg.to].width / 2, textDimensions.width + 2 * conf.noteMargin ); noteModel.startx = startx - noteModel.width + (actors[msg.from].width - conf.actorMargin) / 2; } else if (msg.to === msg.from) { textDimensions = utils.calculateTextDimensions( shouldWrap ? utils.wrapLabel(msg.message, Math.max(conf.width, actors[msg.from].width), noteFont(conf)) : msg.message, noteFont(conf) ); noteModel.width = shouldWrap ? Math.max(conf.width, actors[msg.from].width) : Math.max(actors[msg.from].width, conf.width, textDimensions.width + 2 * conf.noteMargin); noteModel.startx = startx + (actors[msg.from].width - noteModel.width) / 2; } else { noteModel.width = Math.abs(startx + actors[msg.from].width / 2 - (stopx + actors[msg.to].width / 2)) + conf.actorMargin; noteModel.startx = startx < stopx ? startx + actors[msg.from].width / 2 - conf.actorMargin / 2 : stopx + actors[msg.to].width / 2 - conf.actorMargin / 2; } if (shouldWrap) { noteModel.message = utils.wrapLabel( msg.message, noteModel.width - 2 * conf.wrapPadding, noteFont(conf) ); } log.debug( `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]` ); return noteModel; }; const buildMessageModel = function (msg, actors, diagObj) { let process = false; if ( [ diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN, diagObj.db.LINETYPE.SOLID, diagObj.db.LINETYPE.DOTTED, diagObj.db.LINETYPE.SOLID_CROSS, diagObj.db.LINETYPE.DOTTED_CROSS, diagObj.db.LINETYPE.SOLID_POINT, diagObj.db.LINETYPE.DOTTED_POINT, ].includes(msg.type) ) { process = true; } if (!process) { return {}; } const fromBounds = activationBounds(msg.from, actors); const toBounds = activationBounds(msg.to, actors); const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0; const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1; const allBounds = fromBounds.concat(toBounds); const boundedWidth = Math.abs(toBounds[toIdx] - fromBounds[fromIdx]); if (msg.wrap && msg.message) { msg.message = utils.wrapLabel( msg.message, Math.max(boundedWidth + 2 * conf.wrapPadding, conf.width), messageFont(conf) ); } const msgDims = utils.calculateTextDimensions(msg.message, messageFont(conf)); return { width: Math.max( msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding, boundedWidth + 2 * conf.wrapPadding, conf.width ), height: 0, startx: fromBounds[fromIdx], stopx: toBounds[toIdx], starty: 0, stopy: 0, message: msg.message, type: msg.type, wrap: msg.wrap, fromBounds: Math.min.apply(null, allBounds), toBounds: Math.max.apply(null, allBounds), }; }; const calculateLoopBounds = function (messages, actors, _maxWidthPerActor, diagObj) { const loops = {}; const stack = []; let current, noteModel, msgModel; messages.forEach(function (msg) { msg.id = utils.random({ length: 10 }); switch (msg.type) { case diagObj.db.LINETYPE.LOOP_START: case diagObj.db.LINETYPE.ALT_START: case diagObj.db.LINETYPE.OPT_START: case diagObj.db.LINETYPE.PAR_START: case diagObj.db.LINETYPE.CRITICAL_START: case diagObj.db.LINETYPE.BREAK_START: stack.push({ id: msg.id, msg: msg.message, from: Number.MAX_SAFE_INTEGER, to: Number.MIN_SAFE_INTEGER, width: 0, }); break; case diagObj.db.LINETYPE.ALT_ELSE: case diagObj.db.LINETYPE.PAR_AND: case diagObj.db.LINETYPE.CRITICAL_OPTION: if (msg.message) { current = stack.pop(); loops[current.id] = current; loops[msg.id] = current; stack.push(current); } break; case diagObj.db.LINETYPE.LOOP_END: case diagObj.db.LINETYPE.ALT_END: case diagObj.db.LINETYPE.OPT_END: case diagObj.db.LINETYPE.PAR_END: case diagObj.db.LINETYPE.CRITICAL_END: case diagObj.db.LINETYPE.BREAK_END: current = stack.pop(); loops[current.id] = current; break; case diagObj.db.LINETYPE.ACTIVE_START: { const actorRect = actors[msg.from ? msg.from.actor : msg.to.actor]; const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length; const x = actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2; const toAdd = { startx: x, stopx: x + conf.activationWidth, actor: msg.from.actor, enabled: true, }; bounds.activations.push(toAdd); } break; case diagObj.db.LINETYPE.ACTIVE_END: { const lastActorActivationIdx = bounds.activations .map((a) => a.actor) .lastIndexOf(msg.from.actor); delete bounds.activations.splice(lastActorActivationIdx, 1)[0]; } break; } const isNote = msg.placement !== undefined; if (isNote) { noteModel = buildNoteModel(msg, actors, diagObj); msg.noteModel = noteModel; stack.forEach((stk) => { current = stk; current.from = Math.min(current.from, noteModel.startx); current.to = Math.max(current.to, noteModel.startx + noteModel.width); current.width = Math.max(current.width, Math.abs(current.from - current.to)) - conf.labelBoxWidth; }); } else { msgModel = buildMessageModel(msg, actors, diagObj); msg.msgModel = msgModel; if (msgModel.startx && msgModel.stopx && stack.length > 0) { stack.forEach((stk) => { current = stk; if (msgModel.startx === msgModel.stopx) { const from = actors[msg.from]; const to = actors[msg.to]; current.from = Math.min( from.x - msgModel.width / 2, from.x - from.width / 2, current.from ); current.to = Math.max(to.x + msgModel.width / 2, to.x + from.width / 2, current.to); current.width = Math.max(current.width, Math.abs(current.to - current.from)) - conf.labelBoxWidth; } else { current.from = Math.min(msgModel.startx, current.from); current.to = Math.max(msgModel.stopx, current.to); current.width = Math.max(current.width, msgModel.width) - conf.labelBoxWidth; } }); } } }); bounds.activations = []; log.debug('Loop type widths:', loops); return loops; }; export default { bounds, drawActors, drawActorsPopup, setConf, draw, }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/sequence/styles.js�������������������������0000664�0000000�0000000�00000004430�14332737457�0027132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const getStyles = (options) => `.actor { stroke: ${options.actorBorder}; fill: ${options.actorBkg}; } text.actor > tspan { fill: ${options.actorTextColor}; stroke: none; } .actor-line { stroke: ${options.actorLineColor}; } .messageLine0 { stroke-width: 1.5; stroke-dasharray: none; stroke: ${options.signalColor}; } .messageLine1 { stroke-width: 1.5; stroke-dasharray: 2, 2; stroke: ${options.signalColor}; } #arrowhead path { fill: ${options.signalColor}; stroke: ${options.signalColor}; } .sequenceNumber { fill: ${options.sequenceNumberColor}; } #sequencenumber { fill: ${options.signalColor}; } #crosshead path { fill: ${options.signalColor}; stroke: ${options.signalColor}; } .messageText { fill: ${options.signalTextColor}; stroke: none; } .labelBox { stroke: ${options.labelBoxBorderColor}; fill: ${options.labelBoxBkgColor}; } .labelText, .labelText > tspan { fill: ${options.labelTextColor}; stroke: none; } .loopText, .loopText > tspan { fill: ${options.loopTextColor}; stroke: none; } .loopLine { stroke-width: 2px; stroke-dasharray: 2, 2; stroke: ${options.labelBoxBorderColor}; fill: ${options.labelBoxBorderColor}; } .note { //stroke: #decc93; stroke: ${options.noteBorderColor}; fill: ${options.noteBkgColor}; } .noteText, .noteText > tspan { fill: ${options.noteTextColor}; stroke: none; } .activation0 { fill: ${options.activationBkgColor}; stroke: ${options.activationBorderColor}; } .activation1 { fill: ${options.activationBkgColor}; stroke: ${options.activationBorderColor}; } .activation2 { fill: ${options.activationBkgColor}; stroke: ${options.activationBorderColor}; } .actorPopupMenu { position: absolute; } .actorPopupMenuPanel { position: absolute; fill: ${options.actorBkg}; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); } .actor-man line { stroke: ${options.actorBorder}; fill: ${options.actorBkg}; } .actor-man circle, line { stroke: ${options.actorBorder}; fill: ${options.actorBkg}; stroke-width: 2px; } `; export default getStyles; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/sequence/svgDraw.js������������������������0000664�0000000�0000000�00000120547�14332737457�0027234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import common from '../common/common'; import { addFunction } from '../../interactionDb'; import { sanitizeUrl } from '@braintree/sanitize-url'; export const drawRect = function (elem, rectData) { const rectElem = elem.append('rect'); rectElem.attr('x', rectData.x); rectElem.attr('y', rectData.y); rectElem.attr('fill', rectData.fill); rectElem.attr('stroke', rectData.stroke); rectElem.attr('width', rectData.width); rectElem.attr('height', rectData.height); rectElem.attr('rx', rectData.rx); rectElem.attr('ry', rectData.ry); if (typeof rectData.class !== 'undefined') { rectElem.attr('class', rectData.class); } return rectElem; }; // const sanitizeUrl = function (s) { // return s // .replace(/&/g, '&') // .replace(/</g, '<') // .replace(/javascript:/g, ''); // }; const addPopupInteraction = (id, actorCnt) => { addFunction(() => { const arr = document.querySelectorAll(id); // This will be the case when running in sandboxed mode if (arr.length === 0) return; arr[0].addEventListener('mouseover', function () { popupMenuUpFunc('actor' + actorCnt + '_popup'); }); arr[0].addEventListener('mouseout', function () { popupMenuDownFunc('actor' + actorCnt + '_popup'); }); }); }; export const drawPopup = function (elem, actor, minMenuWidth, textAttrs, forceMenus) { if (actor.links === undefined || actor.links === null || Object.keys(actor.links).length === 0) { return { height: 0, width: 0 }; } const links = actor.links; const actorCnt = actor.actorCnt; const rectData = actor.rectData; var displayValue = 'none'; if (forceMenus) { displayValue = 'block !important'; } const g = elem.append('g'); g.attr('id', 'actor' + actorCnt + '_popup'); g.attr('class', 'actorPopupMenu'); g.attr('display', displayValue); addPopupInteraction('#actor' + actorCnt + '_popup', actorCnt); var actorClass = ''; if (typeof rectData.class !== 'undefined') { actorClass = ' ' + rectData.class; } let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth; const rectElem = g.append('rect'); rectElem.attr('class', 'actorPopupMenuPanel' + actorClass); rectElem.attr('x', rectData.x); rectElem.attr('y', rectData.height); rectElem.attr('fill', rectData.fill); rectElem.attr('stroke', rectData.stroke); rectElem.attr('width', menuWidth); rectElem.attr('height', rectData.height); rectElem.attr('rx', rectData.rx); rectElem.attr('ry', rectData.ry); if (links != null) { var linkY = 20; for (let key in links) { var linkElem = g.append('a'); var sanitizedLink = sanitizeUrl(links[key]); linkElem.attr('xlink:href', sanitizedLink); linkElem.attr('target', '_blank'); _drawMenuItemTextCandidateFunc(textAttrs)( key, linkElem, rectData.x + 10, rectData.height + linkY, menuWidth, 20, { class: 'actor' }, textAttrs ); linkY += 30; } } rectElem.attr('height', linkY); return { height: rectData.height + linkY, width: menuWidth }; }; export const drawImage = function (elem, x, y, link) { const imageElem = elem.append('image'); imageElem.attr('x', x); imageElem.attr('y', y); var sanitizedLink = sanitizeUrl(link); imageElem.attr('xlink:href', sanitizedLink); }; export const drawEmbeddedImage = function (elem, x, y, link) { const imageElem = elem.append('use'); imageElem.attr('x', x); imageElem.attr('y', y); var sanitizedLink = sanitizeUrl(link); imageElem.attr('xlink:href', '#' + sanitizedLink); }; export const popupMenu = function (popid) { return ( "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = 'block'; }" ); }; export const popdownMenu = function (popid) { return ( "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = 'none'; }" ); }; const popupMenuUpFunc = function (popupId) { var pu = document.getElementById(popupId); if (pu != null) { pu.style.display = 'block'; } }; const popupMenuDownFunc = function (popupId) { var pu = document.getElementById(popupId); if (pu != null) { pu.style.display = 'none'; } }; export const drawText = function (elem, textData) { let prevTextHeight = 0, textHeight = 0; const lines = textData.text.split(common.lineBreakRegex); let textElems = []; let dy = 0; let yfunc = () => textData.y; if ( typeof textData.valign !== 'undefined' && typeof textData.textMargin !== 'undefined' && textData.textMargin > 0 ) { switch (textData.valign) { case 'top': case 'start': yfunc = () => Math.round(textData.y + textData.textMargin); break; case 'middle': case 'center': yfunc = () => Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2); break; case 'bottom': case 'end': yfunc = () => Math.round( textData.y + (prevTextHeight + textHeight + 2 * textData.textMargin) - textData.textMargin ); break; } } if ( typeof textData.anchor !== 'undefined' && typeof textData.textMargin !== 'undefined' && typeof textData.width !== 'undefined' ) { switch (textData.anchor) { case 'left': case 'start': textData.x = Math.round(textData.x + textData.textMargin); textData.anchor = 'start'; textData.dominantBaseline = 'middle'; textData.alignmentBaseline = 'middle'; break; case 'middle': case 'center': textData.x = Math.round(textData.x + textData.width / 2); textData.anchor = 'middle'; textData.dominantBaseline = 'middle'; textData.alignmentBaseline = 'middle'; break; case 'right': case 'end': textData.x = Math.round(textData.x + textData.width - textData.textMargin); textData.anchor = 'end'; textData.dominantBaseline = 'middle'; textData.alignmentBaseline = 'middle'; break; } } for (let i = 0; i < lines.length; i++) { let line = lines[i]; if ( typeof textData.textMargin !== 'undefined' && textData.textMargin === 0 && typeof textData.fontSize !== 'undefined' ) { dy = i * textData.fontSize; } const textElem = elem.append('text'); textElem.attr('x', textData.x); textElem.attr('y', yfunc()); if (typeof textData.anchor !== 'undefined') { textElem .attr('text-anchor', textData.anchor) .attr('dominant-baseline', textData.dominantBaseline) .attr('alignment-baseline', textData.alignmentBaseline); } if (typeof textData.fontFamily !== 'undefined') { textElem.style('font-family', textData.fontFamily); } if (typeof textData.fontSize !== 'undefined') { textElem.style('font-size', textData.fontSize); } if (typeof textData.fontWeight !== 'undefined') { textElem.style('font-weight', textData.fontWeight); } if (typeof textData.fill !== 'undefined') { textElem.attr('fill', textData.fill); } if (typeof textData.class !== 'undefined') { textElem.attr('class', textData.class); } if (typeof textData.dy !== 'undefined') { textElem.attr('dy', textData.dy); } else if (dy !== 0) { textElem.attr('dy', dy); } if (textData.tspan) { const span = textElem.append('tspan'); span.attr('x', textData.x); if (typeof textData.fill !== 'undefined') { span.attr('fill', textData.fill); } span.text(line); } else { textElem.text(line); } if ( typeof textData.valign !== 'undefined' && typeof textData.textMargin !== 'undefined' && textData.textMargin > 0 ) { textHeight += (textElem._groups || textElem)[0][0].getBBox().height; prevTextHeight = textHeight; } textElems.push(textElem); } return textElems; }; export const drawLabel = function (elem, txtObject) { /** * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} cut * @returns {any} */ function genPoints(x, y, width, height, cut) { return ( x + ',' + y + ' ' + (x + width) + ',' + y + ' ' + (x + width) + ',' + (y + height - cut) + ' ' + (x + width - cut * 1.2) + ',' + (y + height) + ' ' + x + ',' + (y + height) ); } const polygon = elem.append('polygon'); polygon.attr('points', genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7)); polygon.attr('class', 'labelBox'); txtObject.y = txtObject.y + txtObject.height / 2; drawText(elem, txtObject); return polygon; }; let actorCnt = -1; export const fixLifeLineHeights = (diagram, bounds) => { if (!diagram.selectAll) return; diagram .selectAll('.actor-line') .attr('class', '200') .attr('y2', bounds - 55); }; /** * Draws an actor in the diagram with the attached line * * @param {any} elem - The diagram we'll draw to. * @param {any} actor - The actor to draw. * @param {any} conf - DrawText implementation discriminator object */ const drawActorTypeParticipant = function (elem, actor, conf) { const center = actor.x + actor.width / 2; const boxpluslineGroup = elem.append('g'); var g = boxpluslineGroup; if (actor.y === 0) { actorCnt++; g.append('line') .attr('id', 'actor' + actorCnt) .attr('x1', center) .attr('y1', 5) .attr('x2', center) .attr('y2', 2000) .attr('class', 'actor-line') .attr('stroke-width', '0.5px') .attr('stroke', '#999'); g = boxpluslineGroup.append('g'); actor.actorCnt = actorCnt; if (actor.links != null) { g.attr('id', 'root-' + actorCnt); addPopupInteraction('#root-' + actorCnt, actorCnt); } } const rect = getNoteRect(); var cssclass = 'actor'; if (actor.properties != null && actor.properties['class']) { cssclass = actor.properties['class']; } else { rect.fill = '#eaeaea'; } rect.x = actor.x; rect.y = actor.y; rect.width = actor.width; rect.height = actor.height; rect.class = cssclass; rect.rx = 3; rect.ry = 3; const rectElem = drawRect(g, rect); actor.rectData = rect; if (actor.properties != null && actor.properties['icon']) { const iconSrc = actor.properties['icon'].trim(); if (iconSrc.charAt(0) === '@') { drawEmbeddedImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1)); } else { drawImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc); } } _drawTextCandidateFunc(conf)( actor.description, g, rect.x, rect.y, rect.width, rect.height, { class: 'actor' }, conf ); let height = actor.height; if (rectElem.node) { const bounds = rectElem.node().getBBox(); actor.height = bounds.height; height = bounds.height; } return height; }; const drawActorTypeActor = function (elem, actor, conf) { const center = actor.x + actor.width / 2; if (actor.y === 0) { actorCnt++; elem .append('line') .attr('id', 'actor' + actorCnt) .attr('x1', center) .attr('y1', 80) .attr('x2', center) .attr('y2', 2000) .attr('class', 'actor-line') .attr('stroke-width', '0.5px') .attr('stroke', '#999'); } const actElem = elem.append('g'); actElem.attr('class', 'actor-man'); const rect = getNoteRect(); rect.x = actor.x; rect.y = actor.y; rect.fill = '#eaeaea'; rect.width = actor.width; rect.height = actor.height; rect.class = 'actor'; rect.rx = 3; rect.ry = 3; // drawRect(actElem, rect); actElem .append('line') .attr('id', 'actor-man-torso' + actorCnt) .attr('x1', center) .attr('y1', actor.y + 25) .attr('x2', center) .attr('y2', actor.y + 45); actElem .append('line') .attr('id', 'actor-man-arms' + actorCnt) .attr('x1', center - 18) .attr('y1', actor.y + 33) .attr('x2', center + 18) .attr('y2', actor.y + 33); actElem .append('line') .attr('x1', center - 18) .attr('y1', actor.y + 60) .attr('x2', center) .attr('y2', actor.y + 45); actElem .append('line') .attr('x1', center) .attr('y1', actor.y + 45) .attr('x2', center + 16) .attr('y2', actor.y + 60); const circle = actElem.append('circle'); circle.attr('cx', actor.x + actor.width / 2); circle.attr('cy', actor.y + 10); circle.attr('r', 15); circle.attr('width', actor.width); circle.attr('height', actor.height); const bounds = actElem.node().getBBox(); actor.height = bounds.height; _drawTextCandidateFunc(conf)( actor.description, actElem, rect.x, rect.y + 35, rect.width, rect.height, { class: 'actor' }, conf ); return actor.height; }; export const drawActor = function (elem, actor, conf) { switch (actor.type) { case 'actor': return drawActorTypeActor(elem, actor, conf); case 'participant': return drawActorTypeParticipant(elem, actor, conf); } }; export const anchorElement = function (elem) { return elem.append('g'); }; /** * Draws an activation in the diagram * * @param {any} elem - Element to append activation rect. * @param {any} bounds - Activation box bounds. * @param {any} verticalPos - Precise y cooridnate of bottom activation box edge. * @param {any} conf - Sequence diagram config object. * @param {any} actorActivations - Number of activations on the actor. */ export const drawActivation = function (elem, bounds, verticalPos, conf, actorActivations) { const rect = getNoteRect(); const g = bounds.anchored; rect.x = bounds.startx; rect.y = bounds.starty; rect.class = 'activation' + (actorActivations % 3); // Will evaluate to 0, 1 or 2 rect.width = bounds.stopx - bounds.startx; rect.height = verticalPos - bounds.starty; drawRect(g, rect); }; /** * Draws a loop in the diagram * * @param {any} elem - Elemenet to append the loop to. * @param {any} loopModel - LoopModel of the given loop. * @param {any} labelText - Text within the loop. * @param {any} conf - Diagrom configuration * @returns {any} */ export const drawLoop = function (elem, loopModel, labelText, conf) { const { boxMargin, boxTextMargin, labelBoxHeight, labelBoxWidth, messageFontFamily: fontFamily, messageFontSize: fontSize, messageFontWeight: fontWeight, } = conf; const g = elem.append('g'); const drawLoopLine = function (startx, starty, stopx, stopy) { return g .append('line') .attr('x1', startx) .attr('y1', starty) .attr('x2', stopx) .attr('y2', stopy) .attr('class', 'loopLine'); }; drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty); drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy); drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy); drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy); if (typeof loopModel.sections !== 'undefined') { loopModel.sections.forEach(function (item) { drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style( 'stroke-dasharray', '3, 3' ); }); } let txt = getTextObj(); txt.text = labelText; txt.x = loopModel.startx; txt.y = loopModel.starty; txt.fontFamily = fontFamily; txt.fontSize = fontSize; txt.fontWeight = fontWeight; txt.anchor = 'middle'; txt.valign = 'middle'; txt.tspan = false; txt.width = labelBoxWidth || 50; txt.height = labelBoxHeight || 20; txt.textMargin = boxTextMargin; txt.class = 'labelText'; drawLabel(g, txt); txt = getTextObj(); txt.text = loopModel.title; txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2; txt.y = loopModel.starty + boxMargin + boxTextMargin; txt.anchor = 'middle'; txt.valign = 'middle'; txt.textMargin = boxTextMargin; txt.class = 'loopText'; txt.fontFamily = fontFamily; txt.fontSize = fontSize; txt.fontWeight = fontWeight; txt.wrap = true; let textElem = drawText(g, txt); if (typeof loopModel.sectionTitles !== 'undefined') { loopModel.sectionTitles.forEach(function (item, idx) { if (item.message) { txt.text = item.message; txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2; txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin; txt.class = 'loopText'; txt.anchor = 'middle'; txt.valign = 'middle'; txt.tspan = false; txt.fontFamily = fontFamily; txt.fontSize = fontSize; txt.fontWeight = fontWeight; txt.wrap = loopModel.wrap; textElem = drawText(g, txt); let sectionHeight = Math.round( textElem .map((te) => (te._groups || te)[0][0].getBBox().height) .reduce((acc, curr) => acc + curr) ); loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin); } }); } loopModel.height = Math.round(loopModel.stopy - loopModel.starty); return g; }; /** * Draws a background rectangle * * @param {any} elem Diagram (reference for bounds) * @param {any} bounds Shape of the rectangle */ export const drawBackgroundRect = function (elem, bounds) { const rectElem = drawRect(elem, { x: bounds.startx, y: bounds.starty, width: bounds.stopx - bounds.startx, height: bounds.stopy - bounds.starty, fill: bounds.fill, class: 'rect', }); rectElem.lower(); }; export const insertDatabaseIcon = function (elem) { elem .append('defs') .append('symbol') .attr('id', 'database') .attr('fill-rule', 'evenodd') .attr('clip-rule', 'evenodd') .append('path') .attr('transform', 'scale(.5)') .attr( 'd', 'M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z' ); }; export const insertComputerIcon = function (elem) { elem .append('defs') .append('symbol') .attr('id', 'computer') .attr('width', '24') .attr('height', '24') .append('path') .attr('transform', 'scale(.5)') .attr( 'd', 'M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z' ); }; export const insertClockIcon = function (elem) { elem .append('defs') .append('symbol') .attr('id', 'clock') .attr('width', '24') .attr('height', '24') .append('path') .attr('transform', 'scale(.5)') .attr( 'd', 'M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z' ); }; /** * Setup arrow head and define the marker. The result is appended to the svg. * * @param elem */ export const insertArrowHead = function (elem) { elem .append('defs') .append('marker') .attr('id', 'arrowhead') .attr('refX', 9) .attr('refY', 5) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 12) .attr('markerHeight', 12) .attr('orient', 'auto') .append('path') .attr('d', 'M 0 0 L 10 5 L 0 10 z'); // this is actual shape for arrowhead }; /** * Setup arrow head and define the marker. The result is appended to the svg. * * @param {any} elem */ export const insertArrowFilledHead = function (elem) { elem .append('defs') .append('marker') .attr('id', 'filled-head') .attr('refX', 18) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z'); }; /** * Setup node number. The result is appended to the svg. * * @param {any} elem */ export const insertSequenceNumber = function (elem) { elem .append('defs') .append('marker') .attr('id', 'sequencenumber') .attr('refX', 15) .attr('refY', 15) .attr('markerWidth', 60) .attr('markerHeight', 40) .attr('orient', 'auto') .append('circle') .attr('cx', 15) .attr('cy', 15) .attr('r', 6); // .style("fill", '#f00'); }; /** * Setup arrow head and define the marker. The result is appended to the svg. * * @param {any} elem */ export const insertArrowCrossHead = function (elem) { const defs = elem.append('defs'); const marker = defs .append('marker') .attr('id', 'crosshead') .attr('markerWidth', 15) .attr('markerHeight', 8) .attr('orient', 'auto') .attr('refX', 16) .attr('refY', 4); // The arrow marker .append('path') .attr('fill', 'black') .attr('stroke', '#000000') .style('stroke-dasharray', '0, 0') .attr('stroke-width', '1px') .attr('d', 'M 9,2 V 6 L16,4 Z'); // The cross marker .append('path') .attr('fill', 'none') .attr('stroke', '#000000') .style('stroke-dasharray', '0, 0') .attr('stroke-width', '1px') .attr('d', 'M 0,1 L 6,7 M 6,1 L 0,7'); // this is actual shape for arrowhead }; export const getTextObj = function () { return { x: 0, y: 0, fill: undefined, anchor: undefined, style: '#666', width: undefined, height: undefined, textMargin: 0, rx: 0, ry: 0, tspan: true, valign: undefined, }; }; export const getNoteRect = function () { return { x: 0, y: 0, fill: '#EDF2AE', stroke: '#666', width: 100, anchor: 'start', height: 100, rx: 0, ry: 0, }; }; const _drawTextCandidateFunc = (function () { /** * @param {any} content * @param {any} g * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} textAttrs */ function byText(content, g, x, y, width, height, textAttrs) { const text = g .append('text') .attr('x', x + width / 2) .attr('y', y + height / 2 + 5) .style('text-anchor', 'middle') .text(content); _setTextAttrs(text, textAttrs); } /** * @param {any} content * @param {any} g * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} textAttrs * @param {any} conf */ function byTspan(content, g, x, y, width, height, textAttrs, conf) { const { actorFontSize, actorFontFamily, actorFontWeight } = conf; let _actorFontSize = actorFontSize && actorFontSize.replace ? actorFontSize.replace('px', '') : actorFontSize; const lines = content.split(common.lineBreakRegex); for (let i = 0; i < lines.length; i++) { const dy = i * _actorFontSize - (_actorFontSize * (lines.length - 1)) / 2; const text = g .append('text') .attr('x', x + width / 2) .attr('y', y) .style('text-anchor', 'middle') .style('font-size', actorFontSize) .style('font-weight', actorFontWeight) .style('font-family', actorFontFamily); text .append('tspan') .attr('x', x + width / 2) .attr('dy', dy) .text(lines[i]); text .attr('y', y + height / 2.0) .attr('dominant-baseline', 'central') .attr('alignment-baseline', 'central'); _setTextAttrs(text, textAttrs); } } /** * @param {any} content * @param {any} g * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} textAttrs * @param {any} conf */ function byFo(content, g, x, y, width, height, textAttrs, conf) { const s = g.append('switch'); const f = s .append('foreignObject') .attr('x', x) .attr('y', y) .attr('width', width) .attr('height', height); const text = f .append('xhtml:div') .style('display', 'table') .style('height', '100%') .style('width', '100%'); text .append('div') .style('display', 'table-cell') .style('text-align', 'center') .style('vertical-align', 'middle') .text(content); byTspan(content, s, x, y, width, height, textAttrs, conf); _setTextAttrs(text, textAttrs); } /** * @param {any} toText * @param {any} fromTextAttrsDict */ function _setTextAttrs(toText, fromTextAttrsDict) { for (const key in fromTextAttrsDict) { if (fromTextAttrsDict.hasOwnProperty(key)) { toText.attr(key, fromTextAttrsDict[key]); } } } return function (conf) { return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan; }; })(); const _drawMenuItemTextCandidateFunc = (function () { /** * @param {any} content * @param {any} g * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} textAttrs */ function byText(content, g, x, y, width, height, textAttrs) { const text = g .append('text') .attr('x', x) .attr('y', y) .style('text-anchor', 'start') .text(content); _setTextAttrs(text, textAttrs); } /** * @param {any} content * @param {any} g * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} textAttrs * @param {any} conf */ function byTspan(content, g, x, y, width, height, textAttrs, conf) { const { actorFontSize, actorFontFamily, actorFontWeight } = conf; const lines = content.split(common.lineBreakRegex); for (let i = 0; i < lines.length; i++) { const dy = i * actorFontSize - (actorFontSize * (lines.length - 1)) / 2; const text = g .append('text') .attr('x', x) .attr('y', y) .style('text-anchor', 'start') .style('font-size', actorFontSize) .style('font-weight', actorFontWeight) .style('font-family', actorFontFamily); text.append('tspan').attr('x', x).attr('dy', dy).text(lines[i]); text .attr('y', y + height / 2.0) .attr('dominant-baseline', 'central') .attr('alignment-baseline', 'central'); _setTextAttrs(text, textAttrs); } } /** * @param {any} content * @param {any} g * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} textAttrs * @param {any} conf */ function byFo(content, g, x, y, width, height, textAttrs, conf) { const s = g.append('switch'); const f = s .append('foreignObject') .attr('x', x) .attr('y', y) .attr('width', width) .attr('height', height); const text = f .append('xhtml:div') .style('display', 'table') .style('height', '100%') .style('width', '100%'); text .append('div') .style('display', 'table-cell') .style('text-align', 'center') .style('vertical-align', 'middle') .text(content); byTspan(content, s, x, y, width, height, textAttrs, conf); _setTextAttrs(text, textAttrs); } /** * @param {any} toText * @param {any} fromTextAttrsDict */ function _setTextAttrs(toText, fromTextAttrsDict) { for (const key in fromTextAttrsDict) { if (fromTextAttrsDict.hasOwnProperty(key)) { toText.attr(key, fromTextAttrsDict[key]); } } } return function (conf) { return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan; }; })(); export default { drawRect, drawText, drawLabel, drawActor, drawPopup, drawImage, drawEmbeddedImage, anchorElement, drawActivation, drawLoop, drawBackgroundRect, insertArrowHead, insertArrowFilledHead, insertSequenceNumber, insertArrowCrossHead, insertDatabaseIcon, insertComputerIcon, insertClockIcon, getTextObj, getNoteRect, popupMenu, popdownMenu, fixLifeLineHeights, sanitizeUrl, }; ���������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/sequence/svgDraw.spec.js�������������������0000664�0000000�0000000�00000012216�14332737457�0030156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import svgDraw from './svgDraw'; import { MockD3 } from 'd3'; describe('svgDraw', function () { describe('drawRect', function () { it('should append a rectangle', function () { const svg = MockD3('svg'); svgDraw.drawRect(svg, { x: 10, y: 10, fill: '#ccc', stroke: 'red', width: '20', height: '20', rx: '10', ry: '10', class: 'unitTestRectangleClass', }); expect(svg.__children.length).toBe(1); const rect = svg.__children[0]; expect(rect.__name).toBe('rect'); expect(rect.attr).toHaveBeenCalledWith('x', 10); expect(rect.attr).toHaveBeenCalledWith('y', 10); expect(rect.attr).toHaveBeenCalledWith('fill', '#ccc'); expect(rect.attr).toHaveBeenCalledWith('stroke', 'red'); expect(rect.attr).toHaveBeenCalledWith('width', '20'); expect(rect.attr).toHaveBeenCalledWith('height', '20'); expect(rect.attr).toHaveBeenCalledWith('rx', '10'); expect(rect.attr).toHaveBeenCalledWith('ry', '10'); expect(rect.attr).toHaveBeenCalledWith('class', 'unitTestRectangleClass'); }); it('should not add the class attribute if a class isn`t provided', () => { const svg = MockD3('svg'); svgDraw.drawRect(svg, { x: 10, y: 10, fill: '#ccc', stroke: 'red', width: '20', height: '20', rx: '10', ry: '10', }); expect(svg.__children.length).toBe(1); const rect = svg.__children[0]; expect(rect.__name).toBe('rect'); expect(rect.attr).toHaveBeenCalledWith('fill', '#ccc'); expect(rect.attr).not.toHaveBeenCalledWith('class', expect.anything()); }); }); describe('drawText', function () { it('should append a single element', function () { const svg = MockD3('svg'); svgDraw.drawText(svg, { x: 10, y: 10, dy: '1em', text: 'One fine text message', class: 'noteText', fontFamily: 'courier', fontSize: '10px', fontWeight: '500', }); expect(svg.__children.length).toBe(1); const text = svg.__children[0]; expect(text.__name).toBe('text'); expect(text.attr).toHaveBeenCalledWith('x', 10); expect(text.attr).toHaveBeenCalledWith('y', 10); expect(text.attr).toHaveBeenCalledWith('dy', '1em'); expect(text.attr).toHaveBeenCalledWith('class', 'noteText'); expect(text.text).toHaveBeenCalledWith('One fine text message'); expect(text.style).toHaveBeenCalledWith('font-family', 'courier'); expect(text.style).toHaveBeenCalledWith('font-size', '10px'); expect(text.style).toHaveBeenCalledWith('font-weight', '500'); }); it('should append a multiple elements', function () { const svg = MockD3('svg'); svgDraw.drawText(svg, { x: 10, y: 10, text: 'One fine text message<br>with multiple<br>fine lines', }); expect(svg.__children.length).toBe(3); const text1 = svg.__children[0]; expect(text1.__name).toBe('text'); expect(text1.attr).toHaveBeenCalledWith('x', 10); expect(text1.attr).toHaveBeenCalledWith('y', 10); expect(text1.text).toHaveBeenCalledWith('One fine text message'); const text2 = svg.__children[1]; expect(text2.__name).toBe('text'); expect(text2.attr).toHaveBeenCalledWith('x', 10); expect(text2.attr).toHaveBeenCalledWith('y', 10); expect(text2.text).toHaveBeenCalledWith('with multiple'); const text3 = svg.__children[2]; expect(text3.__name).toBe('text'); expect(text3.attr).toHaveBeenCalledWith('x', 10); expect(text3.attr).toHaveBeenCalledWith('y', 10); expect(text3.text).toHaveBeenCalledWith('fine lines'); }); }); describe('drawBackgroundRect', function () { it('should append a rect before the previous element within a given bound', function () { const svg = MockD3('svg'); const boundingRect = { startx: 50, starty: 200, stopx: 150, stopy: 260, title: undefined, fill: '#ccc', }; svgDraw.drawBackgroundRect(svg, boundingRect); expect(svg.__children.length).toBe(1); const rect = svg.__children[0]; expect(rect.__name).toBe('rect'); expect(rect.attr).toHaveBeenCalledWith('x', 50); expect(rect.attr).toHaveBeenCalledWith('y', 200); expect(rect.attr).toHaveBeenCalledWith('width', 100); expect(rect.attr).toHaveBeenCalledWith('height', 60); expect(rect.attr).toHaveBeenCalledWith('fill', '#ccc'); expect(rect.attr).toHaveBeenCalledWith('class', 'rect'); expect(rect.lower).toHaveBeenCalled(); }); }); describe('sanitizeUrl', function () { it('should sanitize malicious urls', function () { const maliciousStr = 'javascript:script:alert(1)'; const result = svgDraw.sanitizeUrl(maliciousStr); expect(result).not.toContain('javascript:alert(1)'); }); it('should not sanitize non dangerous urls', function () { const maliciousStr = 'javajavascript:script:alert(1)'; const result = svgDraw.sanitizeUrl(maliciousStr); expect(result).not.toContain('javascript:alert(1)'); }); }); }); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/�������������������������������������0000775�0000000�0000000�00000000000�14332737457�0024560�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/id-cache.js��������������������������0000664�0000000�0000000�00000000404�14332737457�0026551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const idCache = {}; export const set = (key, val) => { idCache[key] = val; }; export const get = (k) => idCache[k]; export const keys = () => Object.keys(idCache); export const size = () => keys().length; export default { get, set, keys, size, }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/parser/������������������������������0000775�0000000�0000000�00000000000�14332737457�0026054�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/parser/stateDiagram.jison������������0000664�0000000�0000000�00000026020�14332737457�0031525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** mermaid * https://mermaidjs.github.io/ * (c) 2014-2021 Knut Sveidqvist * MIT license. * * Based on js sequence diagrams jison grammr * https://bramp.github.io/js-sequence-diagrams/ * (c) 2012-2013 Andrew Brampton (bramp.net) * Simplified BSD license. */ %lex %options case-insensitive // Special states for recognizing aliases %x ID %x STATE %x FORK_STATE %x STATE_STRING %x STATE_ID %x ALIAS %x SCALE %x acc_title %x acc_descr %x acc_descr_multiline %x NOTE %x NOTE_ID %x NOTE_TEXT %x FLOATING_NOTE %x FLOATING_NOTE_ID %x struct %x open_directive %x type_directive %x arg_directive %x close_directive // A special state for grabbing text up to the first comment/newline %x LINE %% .*direction\s+TB[^\n]* return 'direction_tb'; .*direction\s+BT[^\n]* return 'direction_bt'; .*direction\s+RL[^\n]* return 'direction_rl'; .*direction\s+LR[^\n]* return 'direction_lr'; \%\%\{ { this.begin('open_directive'); return 'open_directive'; } <open_directive>((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } <type_directive>":" { this.popState(); this.begin('arg_directive'); return ':'; } <type_directive,arg_directive>\}\%\% { this.popState(); this.popState(); return 'close_directive'; } <arg_directive>((?:(?!\}\%\%).|\n)*) return 'arg_directive'; \%\%(?!\{)[^\n]* /* skip comments */ [^\}]\%\%[^\n]* /* skip comments */{ /*console.log('Crap after close');*/ } [\n]+ return 'NL'; [\s]+ /* skip all whitespace */ <ID,STATE,struct,LINE,open_directive,type_directive,arg_directive,close_directive>((?!\n)\s)+ /* skip same-line whitespace */ <INITIAL,ID,STATE,struct,LINE,open_directive,type_directive,arg_directive,close_directive>\#[^\n]* /* skip comments */ \%%[^\n]* /* skip comments */ "scale"\s+ { this.pushState('SCALE'); /* console.log('Got scale', yytext);*/ return 'scale'; } <SCALE>\d+ return 'WIDTH'; <SCALE>\s+"width" {this.popState();} accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } <acc_title>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } <acc_descr>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} <acc_descr_multiline>[\}] { this.popState(); } <acc_descr_multiline>[^\}]* return "acc_descr_multiline_value"; <INITIAL,struct>"state"\s+ { /*console.log('Starting STATE zxzx'+yy.getDirection());*/this.pushState('STATE'); } <STATE>.*"<<fork>>" {this.popState();yytext=yytext.slice(0,-8).trim(); /*console.warn('Fork Fork: ',yytext);*/return 'FORK';} <STATE>.*"<<join>>" {this.popState();yytext=yytext.slice(0,-8).trim();/*console.warn('Fork Join: ',yytext);*/return 'JOIN';} <STATE>.*"<<choice>>" {this.popState();yytext=yytext.slice(0,-10).trim();/*console.warn('Fork Join: ',yytext);*/return 'CHOICE';} <STATE>.*"[[fork]]" {this.popState();yytext=yytext.slice(0,-8).trim();/*console.warn('Fork Fork: ',yytext);*/return 'FORK';} <STATE>.*"[[join]]" {this.popState();yytext=yytext.slice(0,-8).trim();/*console.warn('Fork Join: ',yytext);*/return 'JOIN';} <STATE>.*"[[choice]]" {this.popState();yytext=yytext.slice(0,-10).trim();/*console.warn('Fork Join: ',yytext);*/return 'CHOICE';} <struct>.*direction\s+TB[^\n]* { return 'direction_tb';} <struct>.*direction\s+BT[^\n]* { return 'direction_bt';} <struct>.*direction\s+RL[^\n]* { return 'direction_rl';} <struct>.*direction\s+LR[^\n]* { return 'direction_lr';} <STATE>["] { /*console.log('Starting STATE_STRING zxzx');*/this.begin("STATE_STRING");} <STATE>\s*"as"\s+ {this.popState();this.pushState('STATE_ID');return "AS";} <STATE_ID>[^\n\{]* {this.popState();/* console.log('STATE_ID', yytext);*/return "ID";} <STATE_STRING>["] this.popState(); <STATE_STRING>[^"]* { /*console.log('Long description:', yytext);*/return "STATE_DESCR";} <STATE>[^\n\s\{]+ {/*console.log('COMPOSIT_STATE', yytext);*/return 'COMPOSIT_STATE';} <STATE>\n {this.popState();} <INITIAL,STATE>\{ {this.popState();this.pushState('struct'); /*console.log('begin struct', yytext);*/return 'STRUCT_START';} <struct>\} { /*console.log('Ending struct');*/ this.popState(); return 'STRUCT_STOP';}} <struct>[\n] /* nothing */ <INITIAL,struct>"note"\s+ { this.begin('NOTE'); return 'note'; } <NOTE>"left of" { this.popState();this.pushState('NOTE_ID');return 'left_of';} <NOTE>"right of" { this.popState();this.pushState('NOTE_ID');return 'right_of';} <NOTE>\" { this.popState();this.pushState('FLOATING_NOTE');} <FLOATING_NOTE>\s*"as"\s* {this.popState();this.pushState('FLOATING_NOTE_ID');return "AS";} <FLOATING_NOTE>["] /**/ <FLOATING_NOTE>[^"]* { /*console.log('Floating note text: ', yytext);*/return "NOTE_TEXT";} <FLOATING_NOTE_ID>[^\n]* {this.popState();/*console.log('Floating note ID', yytext);*/return "ID";} <NOTE_ID>\s*[^:\n\s\-]+ { this.popState();this.pushState('NOTE_TEXT');/*console.log('Got ID for note', yytext);*/return 'ID';} <NOTE_TEXT>\s*":"[^:\n;]+ { this.popState();/*console.log('Got NOTE_TEXT for note',yytext);*/yytext = yytext.substr(2).trim();return 'NOTE_TEXT';} <NOTE_TEXT>[\s\S]*?"end note" { this.popState();/*console.log('Got NOTE_TEXT for note',yytext);*/yytext = yytext.slice(0,-8).trim();return 'NOTE_TEXT';} "stateDiagram"\s+ { /*console.log('Got state diagram', yytext,'#');*/return 'SD'; } "stateDiagram-v2"\s+ { /*console.log('Got state diagram', yytext,'#');*/return 'SD'; } "hide empty description" { /*console.log('HIDE_EMPTY', yytext,'#');*/return 'HIDE_EMPTY'; } <INITIAL,struct>"[*]" { /*console.log('EDGE_STATE=',yytext);*/ return 'EDGE_STATE';} <INITIAL,struct>[^:\n\s\-\{]+ { /*console.log('=>ID=',yytext);*/ return 'ID';} // <INITIAL,struct>\s*":"[^\+\->:\n;]+ { yytext = yytext.trim(); /*console.log('Descr = ', yytext);*/ return 'DESCR'; } <INITIAL,struct>\s*":"[^:\n;]+ { yytext = yytext.trim(); /*console.log('Descr = ', yytext);*/ return 'DESCR'; } <INITIAL,struct>"-->" return '-->'; <struct>"--" return 'CONCURRENT'; <<EOF>> return 'NL'; . return 'INVALID'; /lex %left '^' %start start %% /* language grammar */ start : SPACE start | NL start | directive start | SD document { /*console.warn('Root document', $2);*/ yy.setRootDoc($2);return $2; } ; document : /* empty */ { $$ = [] } | document line { if($2!='nl'){ $1.push($2);$$ = $1 } // console.warn('Got document',$1, $2); } ; line : SPACE statement { $$ = $2 } | statement { $$ = $1 } | NL { $$='nl';} ; statement : idStatement { /*console.warn('got id and descr', $1);*/$$={ stmt: 'state', id: $1, type: 'default', description: ''};} | idStatement DESCR { /*console.warn('got id and descr', $1, $2.trim());*/$$={ stmt: 'state', id: $1, type: 'default', description: yy.trimColon($2)};} | idStatement '-->' idStatement { /*console.warn('got id', $1);yy.addRelation($1, $3);*/ $$={ stmt: 'relation', state1: { stmt: 'state', id: $1, type: 'default', description: '' }, state2:{ stmt: 'state', id: $3 ,type: 'default', description: ''}}; } | idStatement '-->' idStatement DESCR { /*yy.addRelation($1, $3, $4.substr(1).trim());*/ $$={ stmt: 'relation', state1: { stmt: 'state', id: $1, type: 'default', description: '' }, state2:{ stmt: 'state', id: $3 ,type: 'default', description: ''}, description: $4.substr(1).trim()}; } | HIDE_EMPTY | scale WIDTH | COMPOSIT_STATE | COMPOSIT_STATE STRUCT_START document STRUCT_STOP { /* console.warn('Adding document for state without id ', $1);*/ $$={ stmt: 'state', id: $1, type: 'default', description: '', doc: $3 } } | STATE_DESCR AS ID { var id=$3; var description = $1.trim(); if($3.match(':')){ var parts = $3.split(':'); id=parts[0]; description = [description, parts[1]]; } $$={stmt: 'state', id: id, type: 'default', description: description}; } | STATE_DESCR AS ID STRUCT_START document STRUCT_STOP { // console.warn('Adding document for state with id zxzx', $3, $4, yy.getDirection()); yy.addDocument($3); $$={ stmt: 'state', id: $3, type: 'default', description: $1, doc: $5 } } | FORK { $$={ stmt: 'state', id: $1, type: 'fork' } } | JOIN { $$={ stmt: 'state', id: $1, type: 'join' } } | CHOICE { $$={ stmt: 'state', id: $1, type: 'choice' } } | CONCURRENT { $$={ stmt: 'state', id: yy.getDividerId(), type: 'divider' } } | note notePosition ID NOTE_TEXT { /* console.warn('got NOTE, position: ', $2.trim(), 'id = ', $3.trim(), 'note: ', $4);*/ $$={ stmt: 'state', id: $3.trim(), note:{position: $2.trim(), text: $4.trim()}}; } | note NOTE_TEXT AS ID | directive | direction | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } ; directive : openDirective typeDirective closeDirective | openDirective typeDirective ':' argDirective closeDirective ; direction : direction_tb { yy.setDirection('TB');$$={stmt:'dir', value:'TB'};} | direction_bt { yy.setDirection('BT');$$={stmt:'dir', value:'BT'};} | direction_rl { yy.setDirection('RL'); $$={stmt:'dir', value:'RL'};} | direction_lr { yy.setDirection('LR');$$={stmt:'dir', value:'LR'};} ; eol : NL | ';' ; idStatement : ID {$$=$1;} | EDGE_STATE {$$=$1;} ; notePosition : left_of | right_of ; openDirective : open_directive { yy.parseDirective('%%{', 'open_directive'); } ; typeDirective : type_directive { yy.parseDirective($1, 'type_directive'); } ; argDirective : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } ; closeDirective : close_directive { yy.parseDirective('}%%', 'close_directive', 'state'); } ; %% ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/shapes.js����������������������������0000664�0000000�0000000�00000036012�14332737457�0026403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { line, curveBasis } from 'd3'; import idCache from './id-cache.js'; import stateDb from './stateDb'; import utils from '../../utils'; import common from '../common/common'; import { getConfig } from '../../config'; import { log } from '../../logger'; /** * Draws a start state as a black circle * * @param {any} g */ export const drawStartState = (g) => g .append('circle') // .style('stroke', 'black') // .style('fill', 'black') .attr('class', 'start-state') .attr('r', getConfig().state.sizeUnit) .attr('cx', getConfig().state.padding + getConfig().state.sizeUnit) .attr('cy', getConfig().state.padding + getConfig().state.sizeUnit); /** * Draws a start state as a black circle * * @param {any} g */ export const drawDivider = (g) => g .append('line') .style('stroke', 'grey') .style('stroke-dasharray', '3') .attr('x1', getConfig().state.textHeight) .attr('class', 'divider') .attr('x2', getConfig().state.textHeight * 2) .attr('y1', 0) .attr('y2', 0); /** * Draws a an end state as a black circle * * @param {any} g * @param {any} stateDef */ export const drawSimpleState = (g, stateDef) => { const state = g .append('text') .attr('x', 2 * getConfig().state.padding) .attr('y', getConfig().state.textHeight + 2 * getConfig().state.padding) .attr('font-size', getConfig().state.fontSize) .attr('class', 'state-title') .text(stateDef.id); const classBox = state.node().getBBox(); g.insert('rect', ':first-child') .attr('x', getConfig().state.padding) .attr('y', getConfig().state.padding) .attr('width', classBox.width + 2 * getConfig().state.padding) .attr('height', classBox.height + 2 * getConfig().state.padding) .attr('rx', getConfig().state.radius); return state; }; /** * Draws a state with descriptions * * @param {any} g The d3 svg object to add the state to * @param {any} stateDef * @returns {any} The d3 svg state */ export const drawDescrState = (g, stateDef) => { const addTspan = function (textEl, txt, isFirst) { const tSpan = textEl .append('tspan') .attr('x', 2 * getConfig().state.padding) .text(txt); if (!isFirst) { tSpan.attr('dy', getConfig().state.textHeight); } }; const title = g .append('text') .attr('x', 2 * getConfig().state.padding) .attr('y', getConfig().state.textHeight + 1.3 * getConfig().state.padding) .attr('font-size', getConfig().state.fontSize) .attr('class', 'state-title') .text(stateDef.descriptions[0]); const titleBox = title.node().getBBox(); const titleHeight = titleBox.height; const description = g .append('text') // text label for the x axis .attr('x', getConfig().state.padding) .attr( 'y', titleHeight + getConfig().state.padding * 0.4 + getConfig().state.dividerMargin + getConfig().state.textHeight ) .attr('class', 'state-description'); let isFirst = true; let isSecond = true; stateDef.descriptions.forEach(function (descr) { if (!isFirst) { addTspan(description, descr, isSecond); isSecond = false; } isFirst = false; }); const descrLine = g .append('line') // text label for the x axis .attr('x1', getConfig().state.padding) .attr('y1', getConfig().state.padding + titleHeight + getConfig().state.dividerMargin / 2) .attr('y2', getConfig().state.padding + titleHeight + getConfig().state.dividerMargin / 2) .attr('class', 'descr-divider'); const descrBox = description.node().getBBox(); const width = Math.max(descrBox.width, titleBox.width); descrLine.attr('x2', width + 3 * getConfig().state.padding); // const classBox = title.node().getBBox(); g.insert('rect', ':first-child') .attr('x', getConfig().state.padding) .attr('y', getConfig().state.padding) .attr('width', width + 2 * getConfig().state.padding) .attr('height', descrBox.height + titleHeight + 2 * getConfig().state.padding) .attr('rx', getConfig().state.radius); return g; }; /** Adds the creates a box around the existing content and adds a panel for the id on top of the content. */ /** * Function that creates an title row and a frame around a substate for a composit state diagram. * The function returns a new d3 svg object with updated width and height properties; * * @param {any} g The d3 svg object for the substate to framed * @param {any} stateDef The info about the * @param {any} altBkg */ export const addTitleAndBox = (g, stateDef, altBkg) => { const pad = getConfig().state.padding; const dblPad = 2 * getConfig().state.padding; const orgBox = g.node().getBBox(); const orgWidth = orgBox.width; const orgX = orgBox.x; const title = g .append('text') .attr('x', 0) .attr('y', getConfig().state.titleShift) .attr('font-size', getConfig().state.fontSize) .attr('class', 'state-title') .text(stateDef.id); const titleBox = title.node().getBBox(); const titleWidth = titleBox.width + dblPad; let width = Math.max(titleWidth, orgWidth); // + dblPad; if (width === orgWidth) { width = width + dblPad; } let startX; // const lineY = 1 - getConfig().state.textHeight; // const descrLine = g // .append('line') // text label for the x axis // .attr('x1', 0) // .attr('y1', lineY) // .attr('y2', lineY) // .attr('class', 'descr-divider'); const graphBox = g.node().getBBox(); // descrLine.attr('x2', graphBox.width + getConfig().state.padding); if (stateDef.doc) { // cnsole.warn( // stateDef.id, // 'orgX: ', // orgX, // 'width: ', // width, // 'titleWidth: ', // titleWidth, // 'orgWidth: ', // orgWidth, // 'width', // width // ); } startX = orgX - pad; if (titleWidth > orgWidth) { startX = (orgWidth - width) / 2 + pad; } if (Math.abs(orgX - graphBox.x) < pad) { if (titleWidth > orgWidth) { startX = orgX - (titleWidth - orgWidth) / 2; } } const lineY = 1 - getConfig().state.textHeight; // White color g.insert('rect', ':first-child') .attr('x', startX) .attr('y', lineY) .attr('class', altBkg ? 'alt-composit' : 'composit') .attr('width', width) .attr( 'height', graphBox.height + getConfig().state.textHeight + getConfig().state.titleShift + 1 ) .attr('rx', '0'); title.attr('x', startX + pad); if (titleWidth <= orgWidth) title.attr('x', orgX + (width - dblPad) / 2 - titleWidth / 2 + pad); // Title background g.insert('rect', ':first-child') .attr('x', startX) .attr( 'y', getConfig().state.titleShift - getConfig().state.textHeight - getConfig().state.padding ) .attr('width', width) // Just needs to be higher then the descr line, will be clipped by the white color box .attr('height', getConfig().state.textHeight * 3) .attr('rx', getConfig().state.radius); // Full background g.insert('rect', ':first-child') .attr('x', startX) .attr( 'y', getConfig().state.titleShift - getConfig().state.textHeight - getConfig().state.padding ) .attr('width', width) .attr('height', graphBox.height + 3 + 2 * getConfig().state.textHeight) .attr('rx', getConfig().state.radius); return g; }; const drawEndState = (g) => { g.append('circle') // .style('stroke', 'black') // .style('fill', 'white') .attr('class', 'end-state-outer') .attr('r', getConfig().state.sizeUnit + getConfig().state.miniPadding) .attr( 'cx', getConfig().state.padding + getConfig().state.sizeUnit + getConfig().state.miniPadding ) .attr( 'cy', getConfig().state.padding + getConfig().state.sizeUnit + getConfig().state.miniPadding ); return ( g .append('circle') // .style('stroke', 'black') // .style('fill', 'black') .attr('class', 'end-state-inner') .attr('r', getConfig().state.sizeUnit) .attr('cx', getConfig().state.padding + getConfig().state.sizeUnit + 2) .attr('cy', getConfig().state.padding + getConfig().state.sizeUnit + 2) ); }; const drawForkJoinState = (g, stateDef) => { let width = getConfig().state.forkWidth; let height = getConfig().state.forkHeight; if (stateDef.parentId) { let tmp = width; width = height; height = tmp; } return g .append('rect') .style('stroke', 'black') .style('fill', 'black') .attr('width', width) .attr('height', height) .attr('x', getConfig().state.padding) .attr('y', getConfig().state.padding); }; export const drawText = function (elem, textData) { // Remove and ignore br:s const nText = textData.text.replace(common.lineBreakRegex, ' '); const textElem = elem.append('text'); textElem.attr('x', textData.x); textElem.attr('y', textData.y); textElem.style('text-anchor', textData.anchor); textElem.attr('fill', textData.fill); if (typeof textData.class !== 'undefined') { textElem.attr('class', textData.class); } const span = textElem.append('tspan'); span.attr('x', textData.x + textData.textMargin * 2); span.attr('fill', textData.fill); span.text(nText); return textElem; }; const _drawLongText = (_text, x, y, g) => { let textHeight = 0; const textElem = g.append('text'); textElem.style('text-anchor', 'start'); textElem.attr('class', 'noteText'); let text = _text.replace(/\r\n/g, '<br/>'); text = text.replace(/\n/g, '<br/>'); const lines = text.split(common.lineBreakRegex); let tHeight = 1.25 * getConfig().state.noteMargin; for (const line of lines) { const txt = line.trim(); if (txt.length > 0) { const span = textElem.append('tspan'); span.text(txt); if (tHeight === 0) { const textBounds = span.node().getBBox(); tHeight += textBounds.height; } textHeight += tHeight; span.attr('x', x + getConfig().state.noteMargin); span.attr('y', y + textHeight + 1.25 * getConfig().state.noteMargin); } } return { textWidth: textElem.node().getBBox().width, textHeight }; }; /** * Draws a note to the diagram * * @param text - The text of the given note. * @param g - The element the note is attached to. */ export const drawNote = (text, g) => { g.attr('class', 'state-note'); const note = g.append('rect').attr('x', 0).attr('y', getConfig().state.padding); const rectElem = g.append('g'); const { textWidth, textHeight } = _drawLongText(text, 0, 0, rectElem); note.attr('height', textHeight + 2 * getConfig().state.noteMargin); note.attr('width', textWidth + getConfig().state.noteMargin * 2); return note; }; /** * Starting point for drawing a state. The function finds out the specifics about the state and * renders with appropriate function. * * @param {any} elem * @param {any} stateDef */ export const drawState = function (elem, stateDef) { const id = stateDef.id; const stateInfo = { id: id, label: stateDef.id, width: 0, height: 0, }; const g = elem.append('g').attr('id', id).attr('class', 'stateGroup'); if (stateDef.type === 'start') drawStartState(g); if (stateDef.type === 'end') drawEndState(g); if (stateDef.type === 'fork' || stateDef.type === 'join') drawForkJoinState(g, stateDef); if (stateDef.type === 'note') drawNote(stateDef.note.text, g); if (stateDef.type === 'divider') drawDivider(g); if (stateDef.type === 'default' && stateDef.descriptions.length === 0) drawSimpleState(g, stateDef); if (stateDef.type === 'default' && stateDef.descriptions.length > 0) drawDescrState(g, stateDef); const stateBox = g.node().getBBox(); stateInfo.width = stateBox.width + 2 * getConfig().state.padding; stateInfo.height = stateBox.height + 2 * getConfig().state.padding; idCache.set(id, stateInfo); // stateCnt++; return stateInfo; }; let edgeCount = 0; export const drawEdge = function (elem, path, relation) { const getRelationType = function (type) { switch (type) { case stateDb.relationType.AGGREGATION: return 'aggregation'; case stateDb.relationType.EXTENSION: return 'extension'; case stateDb.relationType.COMPOSITION: return 'composition'; case stateDb.relationType.DEPENDENCY: return 'dependency'; } }; path.points = path.points.filter((p) => !Number.isNaN(p.y)); // The data for our line const lineData = path.points; // This is the accessor function we talked about above const lineFunction = line() .x(function (d) { return d.x; }) .y(function (d) { return d.y; }) .curve(curveBasis); const svgPath = elem .append('path') .attr('d', lineFunction(lineData)) .attr('id', 'edge' + edgeCount) .attr('class', 'transition'); let url = ''; if (getConfig().state.arrowMarkerAbsolute) { url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search; url = url.replace(/\(/g, '\\('); url = url.replace(/\)/g, '\\)'); } svgPath.attr( 'marker-end', 'url(' + url + '#' + getRelationType(stateDb.relationType.DEPENDENCY) + 'End' + ')' ); if (typeof relation.title !== 'undefined') { const label = elem.append('g').attr('class', 'stateLabel'); const { x, y } = utils.calcLabelPosition(path.points); const rows = common.getRows(relation.title); let titleHeight = 0; const titleRows = []; let maxWidth = 0; let minX = 0; for (let i = 0; i <= rows.length; i++) { const title = label .append('text') .attr('text-anchor', 'middle') .text(rows[i]) .attr('x', x) .attr('y', y + titleHeight); const boundstmp = title.node().getBBox(); maxWidth = Math.max(maxWidth, boundstmp.width); minX = Math.min(minX, boundstmp.x); log.info(boundstmp.x, x, y + titleHeight); if (titleHeight === 0) { const titleBox = title.node().getBBox(); titleHeight = titleBox.height; log.info('Title height', titleHeight, y); } titleRows.push(title); } let boxHeight = titleHeight * rows.length; if (rows.length > 1) { const heightAdj = (rows.length - 1) * titleHeight * 0.5; titleRows.forEach((title, i) => title.attr('y', y + i * titleHeight - heightAdj)); boxHeight = titleHeight * rows.length; } const bounds = label.node().getBBox(); label .insert('rect', ':first-child') .attr('class', 'box') .attr('x', x - maxWidth / 2 - getConfig().state.padding / 2) .attr('y', y - boxHeight / 2 - getConfig().state.padding / 2 - 3.5) .attr('width', maxWidth + getConfig().state.padding) .attr('height', boxHeight + getConfig().state.padding); log.info(bounds); //label.attr('transform', '0 -' + (bounds.y / 2)); // Debug points // path.points.forEach(point => { // g.append('circle') // .style('stroke', 'red') // .style('fill', 'red') // .attr('r', 1) // .attr('cx', point.x) // .attr('cy', point.y); // }); // g.append('circle') // .style('stroke', 'blue') // .style('fill', 'blue') // .attr('r', 1) // .attr('cx', x) // .attr('cy', y); } edgeCount++; }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/stateDb.js���������������������������0000664�0000000�0000000�00000014236�14332737457�0026512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { log } from '../../logger'; import { generateId } from '../../utils'; import mermaidAPI from '../../mermaidAPI'; import common from '../common/common'; import * as configApi from '../../config'; import { setAccTitle, getAccTitle, getAccDescription, setAccDescription, clear as commonClear, } from '../../commonDb'; const clone = (o) => JSON.parse(JSON.stringify(o)); let rootDoc = []; export const parseDirective = function (statement, context, type) { mermaidAPI.parseDirective(this, statement, context, type); }; const setRootDoc = (o) => { log.info('Setting root doc', o); // rootDoc = { id: 'root', doc: o }; rootDoc = o; }; const getRootDoc = () => rootDoc; const docTranslator = (parent, node, first) => { if (node.stmt === 'relation') { docTranslator(parent, node.state1, true); docTranslator(parent, node.state2, false); } else { if (node.stmt === 'state') { if (node.id === '[*]') { node.id = first ? parent.id + '_start' : parent.id + '_end'; node.start = first; } } if (node.doc) { const doc = []; // Check for concurrency let i = 0; let currentDoc = []; for (i = 0; i < node.doc.length; i++) { if (node.doc[i].type === 'divider') { // debugger; const newNode = clone(node.doc[i]); newNode.doc = clone(currentDoc); doc.push(newNode); currentDoc = []; } else { currentDoc.push(node.doc[i]); } } // If any divider was encountered if (doc.length > 0 && currentDoc.length > 0) { const newNode = { stmt: 'state', id: generateId(), type: 'divider', doc: clone(currentDoc), }; doc.push(clone(newNode)); node.doc = doc; } node.doc.forEach((docNode) => docTranslator(node, docNode, true)); } } }; const getRootDocV2 = () => { docTranslator({ id: 'root' }, { id: 'root', doc: rootDoc }, true); return { id: 'root', doc: rootDoc }; // Here }; const extract = (_doc) => { // const res = { states: [], relations: [] }; let doc; if (_doc.doc) { doc = _doc.doc; } else { doc = _doc; } // let doc = root.doc; // if (!doc) { // doc = root; // } log.info(doc); clear(true); log.info('Extract', doc); doc.forEach((item) => { if (item.stmt === 'state') { addState(item.id, item.type, item.doc, item.description, item.note); } if (item.stmt === 'relation') { addRelation(item.state1.id, item.state2.id, item.description); } }); }; const newDoc = () => { return { relations: [], states: {}, documents: {}, }; }; let documents = { root: newDoc(), }; let currentDocument = documents.root; let startCnt = 0; /** * Function called by parser when a node definition has been found. * * @param {any} id * @param {any} type * @param {any} doc * @param {any} descr * @param {any} note */ export const addState = function (id, type, doc, descr, note) { if (typeof currentDocument.states[id] === 'undefined') { currentDocument.states[id] = { id: id, descriptions: [], type, doc, note, }; } else { if (!currentDocument.states[id].doc) { currentDocument.states[id].doc = doc; } if (!currentDocument.states[id].type) { currentDocument.states[id].type = type; } } if (descr) { log.info('Adding state ', id, descr); if (typeof descr === 'string') addDescription(id, descr.trim()); if (typeof descr === 'object') { descr.forEach((des) => addDescription(id, des.trim())); } } if (note) { currentDocument.states[id].note = note; currentDocument.states[id].note.text = common.sanitizeText( currentDocument.states[id].note.text, configApi.getConfig() ); } }; export const clear = function (saveCommon) { documents = { root: newDoc(), }; currentDocument = documents.root; currentDocument = documents.root; startCnt = 0; classes = []; if (!saveCommon) { commonClear(); } }; export const getState = function (id) { return currentDocument.states[id]; }; export const getStates = function () { return currentDocument.states; }; export const logDocuments = function () { log.info('Documents = ', documents); }; export const getRelations = function () { return currentDocument.relations; }; export const addRelation = function (_id1, _id2, title) { let id1 = _id1; let id2 = _id2; let type1 = 'default'; let type2 = 'default'; if (_id1 === '[*]') { startCnt++; id1 = 'start' + startCnt; type1 = 'start'; } if (_id2 === '[*]') { id2 = 'end' + startCnt; type2 = 'end'; } addState(id1, type1); addState(id2, type2); currentDocument.relations.push({ id1, id2, title: common.sanitizeText(title, configApi.getConfig()), }); }; const addDescription = function (id, _descr) { const theState = currentDocument.states[id]; let descr = _descr; if (descr[0] === ':') { descr = descr.substr(1).trim(); } theState.descriptions.push(common.sanitizeText(descr, configApi.getConfig())); }; export const cleanupLabel = function (label) { if (label.substring(0, 1) === ':') { return label.substr(2).trim(); } else { return label.trim(); } }; export const lineType = { LINE: 0, DOTTED_LINE: 1, }; let dividerCnt = 0; const getDividerId = () => { dividerCnt++; return 'divider-id-' + dividerCnt; }; let classes = []; const getClasses = () => classes; let direction = 'TB'; const getDirection = () => direction; const setDirection = (dir) => { direction = dir; }; export const relationType = { AGGREGATION: 0, EXTENSION: 1, COMPOSITION: 2, DEPENDENCY: 3, }; const trimColon = (str) => (str && str[0] === ':' ? str.substr(1).trim() : str.trim()); export default { parseDirective, getConfig: () => configApi.getConfig().state, addState, clear, getState, getStates, getRelations, getClasses, getDirection, addRelation, getDividerId, setDirection, cleanupLabel, lineType, relationType, logDocuments, getRootDoc, setRootDoc, getRootDocV2, extract, trimColon, getAccTitle, setAccTitle, getAccDescription, setAccDescription, }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/stateDetector-V2.ts������������������0000664�0000000�0000000�00000000504�14332737457�0030226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import type { DiagramDetector } from '../../diagram-api/types'; export const stateDetectorV2: DiagramDetector = (text, config) => { if (text.match(/^\s*stateDiagram-v2/) !== null) return true; if (text.match(/^\s*stateDiagram/) && config?.state?.defaultRenderer === 'dagre-wrapper') return true; return false; }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/stateDetector.ts���������������������0000664�0000000�0000000�00000000631�14332737457�0027742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import type { DiagramDetector } from '../../diagram-api/types'; export const stateDetector: DiagramDetector = (txt, config) => { // If we have confired to only use new state diagrams this function should always return false // as in not signalling true for a legacy state diagram if (config?.state?.defaultRenderer === 'dagre-wrapper') return false; return txt.match(/^\s*stateDiagram/) !== null; }; �������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js��������������0000664�0000000�0000000�00000022565�14332737457�0031013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { parser } from './parser/stateDiagram'; import stateDb from './stateDb'; describe('state diagram, ', function () { describe('when parsing an info graph it', function () { beforeEach(function () { parser.yy = stateDb; }); it('super simple', function () { const str = ` stateDiagram-v2 [*] --> State1 State1 --> [*] `; parser.parse(str); }); it('simple', function () { const str = `stateDiagram-v2\n State1 : this is another string [*] --> State1 State1 --> [*] `; parser.parse(str); const description = stateDb.getAccDescription(); expect(description).toBe(''); }); it('simple with accDescription', function () { const str = `stateDiagram-v2\n accDescr: a simple description of the diagram State1 : this is another string [*] --> State1 State1 --> [*] `; parser.parse(str); const description = stateDb.getAccDescription(); expect(description).toBe('a simple description of the diagram'); }); it('simple with title', function () { const str = `stateDiagram-v2\n accTitle: a simple title of the diagram State1 : this is another string [*] --> State1 State1 --> [*] `; parser.parse(str); const title = stateDb.getAccTitle(); expect(title).toBe('a simple title of the diagram'); }); it('simple with directive', function () { const str = `%%{init: {'logLevel': 0 }}%% stateDiagram-v2\n State1 : this is another string [*] --> State1 State1 --> [*] `; parser.parse(str); }); it('should handle relation definitions', function () { const str = `stateDiagram-v2\n [*] --> State1 State1 --> [*] State1 : this is a string State1 : this is another string State1 --> State2 State2 --> [*] `; parser.parse(str); }); it('hide empty description', function () { const str = `stateDiagram-v2\n hide empty description [*] --> State1 State1 --> [*] State1 : this is a string State1 : this is another string State1 --> State2 State2 --> [*] `; parser.parse(str); }); it('handle "as" in state names', function () { const str = `stateDiagram-v2 assemble state assemble `; parser.parse(str); }); it('handle "as" in state names 1', function () { const str = `stateDiagram-v2 assemble state assemble `; parser.parse(str); }); it('handle "as" in state names 2', function () { const str = `stateDiagram-v2 assemblies state assemblies `; parser.parse(str); }); it('handle "as" in state names 3', function () { const str = `stateDiagram-v2 state "as" as as `; parser.parse(str); }); it('scale', function () { const str = `stateDiagram-v2\n scale 350 width [*] --> State1 State1 --> [*] State1 : this is a string with - in it State1 : this is another string State1 --> State2 State2 --> [*] `; parser.parse(str); }); it('description after second state', function () { const str = `stateDiagram-v2\n scale 350 width [*] --> State1 : This is the description with - in it State1 --> [*] `; parser.parse(str); }); it('shall handle descriptions including minus signs', function () { const str = `stateDiagram-v2\n scale 350 width [*] --> State1 : This is the description +-! State1 --> [*] `; parser.parse(str); }); it('should handle state statements', function () { const str = `stateDiagram-v2\n state Configuring { [*] --> NewValueSelection NewValueSelection --> NewValuePreview : EvNewValue NewValuePreview --> NewValueSelection : EvNewValueRejected NewValuePreview --> NewValueSelection : EvNewValueSaved1 } `; parser.parse(str); }); it('should handle recursive state definitions', function () { const str = `stateDiagram-v2\n state Configuring { [*] --> NewValueSelection NewValueSelection --> NewValuePreview : EvNewValue NewValuePreview --> NewValueSelection : EvNewValueRejected NewValuePreview --> NewValueSelection : EvNewValueSaved state NewValuePreview { State1 --> State2 } } `; parser.parse(str); }); it('should handle multiple recursive state definitions', function () { const str = `stateDiagram-v2\n scale 350 width [*] --> NotShooting state NotShooting { [*] --> Idle Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig } state Configuring { [*] --> NewValueSelection NewValueSelection --> NewValuePreview : EvNewValue NewValuePreview --> NewValueSelection : EvNewValueRejected NewValuePreview --> NewValueSelection : EvNewValueSaved state NewValuePreview { State1 --> State2 } } `; parser.parse(str); }); it('should handle state definitions with separation of id', function () { const str = `stateDiagram-v2\n state "Long state description" as state1 `; parser.parse(str); }); it('should handle state definitions with separation of id', function () { const str = `stateDiagram-v2 state "Not Shooting State" as NotShooting { state "Idle mode" as Idle state "Configuring mode" as Configuring [*] --> Idle Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig } `; parser.parse(str); }); it('should State definition with quotes', function () { const str = `stateDiagram-v2\n scale 600 width [*] --> State1 State1 --> State2 : Succeeded State1 --> [*] : Aborted State2 --> State3 : Succeeded State2 --> [*] : Aborted state State3 { state "Accumulate Enough Data\nLong State Name" as long1 long1 : Just a test [*] --> long1 long1 --> long1 : New Data long1 --> ProcessData : Enough Data } State3 --> State3 : Failed State3 --> [*] : Succeeded / Save Result State3 --> [*] : Aborted `; parser.parse(str); }); it('should handle fork statements', function () { const str = `stateDiagram-v2\n state fork_state <<fork>> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <<join>> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] `; parser.parse(str); }); it('should handle concurrent state', function () { const str = `stateDiagram-v2\n [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } `; parser.parse(str); }); it('should handle concurrent state', function () { const str = `stateDiagram-v2\n [*] --> Active state Active { [*] --> NumLockOff -- [*] --> CapsLockOff -- [*] --> ScrollLockOff } `; parser.parse(str); }); // it('should handle arrow directions definitions', function() { // const str = `stateDiagram-v2\n // [*] -up-> First // First -right-> Second // Second --> Third // Third -left-> Last // `; // parser.parse(str); // }); it('should handle note statements', function () { const str = `stateDiagram-v2\n [*] --> Active Active --> Inactive note left of Active : this is a short<br/>note note right of Inactive A note can also be defined on several lines end note `; parser.parse(str); }); it('should handle multiline notes with different line breaks', function () { const str = `stateDiagram-v2 State1 note right of State1 Line1<br>Line2<br/>Line3<br />Line4<br />Line5 end note `; parser.parse(str); }); it('should handle floating notes', function () { const str = `stateDiagram-v2 foo: bar note "This is a floating note" as N1 `; parser.parse(str); }); it('should handle floating notes', function () { const str = `stateDiagram-v2\n state foo note "This is a floating note" as N1 `; parser.parse(str); }); it('should handle notes for composit states', function () { const str = `stateDiagram-v2\n [*] --> NotShooting state "Not Shooting State" as NotShooting { state "Idle mode" as Idle state "Configuring mode" as Configuring [*] --> Idle Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig } note right of NotShooting : This is a note on a composite state `; parser.parse(str); }); }); }); �������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/stateDiagram.spec.js�����������������0000664�0000000�0000000�00000025176�14332737457�0030467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { parser } from './parser/stateDiagram'; import stateDb from './stateDb'; describe('state diagram, ', function () { describe('when parsing an info graph it', function () { beforeEach(function () { parser.yy = stateDb; }); it('super simple', function () { const str = ` stateDiagram [*] --> State1 State1 --> [*] `; parser.parse(str); }); it('simple', function () { const str = `stateDiagram\n State1 : this is another string [*] --> State1 State1 --> [*] `; parser.parse(str); const description = stateDb.getAccDescription(); expect(description).toBe(''); }); it('simple with accDescription (accDescr)', function () { const str = `stateDiagram\n accDescr: a simple description of the diagram State1 : this is another string [*] --> State1 State1 --> [*] `; parser.parse(str); const description = stateDb.getAccDescription(); expect(description).toBe('a simple description of the diagram'); }); it('simple with multiline accDescription (accDescr)', function () { const str = `stateDiagram\n accDescr { a simple description of the diagram using multiple lines } State1 : this is another string [*] --> State1 State1 --> [*] `; parser.parse(str); const description = stateDb.getAccDescription(); expect(description).toBe('a simple description of the diagram\nusing multiple lines'); }); it('simple with title (accDescr)', function () { const str = `stateDiagram\n accTitle: a simple title of the diagram State1 : this is another string [*] --> State1 State1 --> [*] `; parser.parse(str); const title = stateDb.getAccTitle(); expect(title).toBe('a simple title of the diagram'); }); it('simple with directive', function () { const str = `%%{init: {'logLevel': 0 }}%% stateDiagram\n State1 : this is another string [*] --> State1 State1 --> [*] `; parser.parse(str); }); it('should handle relation definitions', function () { const str = `stateDiagram\n [*] --> State1 State1 --> [*] State1 : this is a string State1 : this is another string State1 --> State2 State2 --> [*] `; parser.parse(str); }); it('hide empty description', function () { const str = `stateDiagram\n hide empty description [*] --> State1 State1 --> [*] State1 : this is a string State1 : this is another string State1 --> State2 State2 --> [*] `; parser.parse(str); }); it('handle "as" in state names', function () { const str = `stateDiagram assemble state assemble `; parser.parse(str); }); it('handle "as" in state names 1', function () { const str = `stateDiagram assemble state assemble `; parser.parse(str); }); it('handle "as" in state names 2', function () { const str = `stateDiagram assemblies state assemblies `; parser.parse(str); }); it('handle "as" in state names 3', function () { const str = `stateDiagram state "as" as as `; parser.parse(str); }); it('scale', function () { const str = `stateDiagram\n scale 350 width [*] --> State1 State1 --> [*] State1 : this is a string with - in it State1 : this is another string State1 --> State2 State2 --> [*] `; parser.parse(str); }); it('description after second state', function () { const str = `stateDiagram\n scale 350 width [*] --> State1 : This is the description with - in it State1 --> [*] `; parser.parse(str); }); it('shall handle descriptions including minus signs', function () { const str = `stateDiagram\n scale 350 width [*] --> State1 : This is the description +-! State1 --> [*] `; parser.parse(str); }); it('should handle state statements', function () { const str = `stateDiagram\n state Configuring { [*] --> NewValueSelection NewValueSelection --> NewValuePreview : EvNewValue NewValuePreview --> NewValueSelection : EvNewValueRejected NewValuePreview --> NewValueSelection : EvNewValueSaved1 } `; parser.parse(str); }); it('should handle recursive state definitions', function () { const str = `stateDiagram\n state Configuring { [*] --> NewValueSelection NewValueSelection --> NewValuePreview : EvNewValue NewValuePreview --> NewValueSelection : EvNewValueRejected NewValuePreview --> NewValueSelection : EvNewValueSaved state NewValuePreview { State1 --> State2 } } `; parser.parse(str); }); it('should handle multiple recursive state definitions', function () { const str = `stateDiagram\n scale 350 width [*] --> NotShooting state NotShooting { [*] --> Idle Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig } state Configuring { [*] --> NewValueSelection NewValueSelection --> NewValuePreview : EvNewValue NewValuePreview --> NewValueSelection : EvNewValueRejected NewValuePreview --> NewValueSelection : EvNewValueSaved state NewValuePreview { State1 --> State2 } } `; parser.parse(str); }); it('should handle state defintions with separation of id', function () { const str = `stateDiagram\n state "Long state description" as state1 `; parser.parse(str); }); it('should handle state defintions with separation of id', function () { const str = `stateDiagram state "Not Shooting State" as NotShooting { state "Idle mode" as Idle state "Configuring mode" as Configuring [*] --> Idle Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig } `; parser.parse(str); }); it('should State definition with quotes', function () { const str = `stateDiagram\n scale 600 width [*] --> State1 State1 --> State2 : Succeeded State1 --> [*] : Aborted State2 --> State3 : Succeeded State2 --> [*] : Aborted state State3 { state "Accumulate Enough Data\nLong State Name" as long1 long1 : Just a test [*] --> long1 long1 --> long1 : New Data long1 --> ProcessData : Enough Data } State3 --> State3 : Failed State3 --> [*] : Succeeded / Save Result State3 --> [*] : Aborted `; parser.parse(str); }); it('should handle fork statements', function () { const str = `stateDiagram\n state fork_state <<fork>> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <<join>> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] `; parser.parse(str); }); it('should handle concurrent state', function () { const str = `stateDiagram\n [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } `; parser.parse(str); }); it('should handle concurrent state', function () { const str = `stateDiagram\n [*] --> Active state Active { [*] --> NumLockOff -- [*] --> CapsLockOff -- [*] --> ScrollLockOff } `; parser.parse(str); }); // it('should handle arrow directions definitions', function() { // const str = `stateDiagram\n // [*] -up-> First // First -right-> Second // Second --> Third // Third -left-> Last // `; // parser.parse(str); // }); it('should handle note statements', function () { const str = `stateDiagram\n [*] --> Active Active --> Inactive note left of Active : this is a short<br/>note note right of Inactive A note can also be defined on several lines end note `; parser.parse(str); }); it('should handle multiline notes with different line breaks', function () { const str = `stateDiagram State1 note right of State1 Line1<br>Line2<br/>Line3<br />Line4<br />Line5 end note `; parser.parse(str); }); it('should handle floating notes', function () { const str = `stateDiagram foo: bar note "This is a floating note" as N1 `; parser.parse(str); }); it('should handle floating notes', function () { const str = `stateDiagram\n state foo note "This is a floating note" as N1 `; parser.parse(str); }); it('should handle notes for composit states', function () { const str = `stateDiagram\n [*] --> NotShooting state "Not Shooting State" as NotShooting { state "Idle mode" as Idle state "Configuring mode" as Configuring [*] --> Idle Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig } note right of NotShooting : This is a note on a composite state `; parser.parse(str); }); }); describe('when parsing an ignored info graph it', function () { it.skip('should handle if statements', function () { const str = `stateDiagram\n [*] --> "Order Submitted" if "Payment Accepted" then -->[yes] "Pack products" --> "Send parcel" -right-> (*) else ->[no] "Send error message" -->[Cancel Order] [*] endif } note right of NotShooting : This is a note on a composite state `; parser.parse(str); }); }); }); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/stateRenderer-v2.js������������������0000664�0000000�0000000�00000023032�14332737457�0030252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import graphlib from 'graphlib'; import { select } from 'd3'; import { getConfig } from '../../config'; import { render } from '../../dagre-wrapper/index.js'; import { log } from '../../logger'; import { configureSvgSize } from '../../setupGraphViewbox'; import common from '../common/common'; import addSVGAccessibilityFields from '../../accessibility'; const conf = {}; export const setConf = function (cnf) { const keys = Object.keys(cnf); for (let i = 0; i < keys.length; i++) { conf[keys[i]] = cnf[keys[i]]; } }; let nodeDb = {}; /** * Returns the all the styles from classDef statements in the graph definition. * * @param {any} text * @param diag * @returns {object} ClassDef styles */ export const getClasses = function (text, diag) { log.trace('Extracting classes'); diag.sb.clear(); // Parse the graph definition diag.parser.parse(text); return diag.sb.getClasses(); }; const setupNode = (g, parent, node, altFlag) => { // Add the node if (node.id !== 'root') { let shape = 'rect'; if (node.start === true) { shape = 'start'; } if (node.start === false) { shape = 'end'; } if (node.type !== 'default') { shape = node.type; } if (!nodeDb[node.id]) { nodeDb[node.id] = { id: node.id, shape, description: common.sanitizeText(node.id, getConfig()), classes: 'statediagram-state', }; } // Build of the array of description strings accordinging if (node.description) { if (Array.isArray(nodeDb[node.id].description)) { // There already is an array of strings,add to it nodeDb[node.id].shape = 'rectWithTitle'; nodeDb[node.id].description.push(node.description); } else { if (nodeDb[node.id].description.length > 0) { // if there is a description already transformit to an array nodeDb[node.id].shape = 'rectWithTitle'; if (nodeDb[node.id].description === node.id) { // If the previous description was the is, remove it nodeDb[node.id].description = [node.description]; } else { nodeDb[node.id].description = [nodeDb[node.id].description, node.description]; } } else { nodeDb[node.id].shape = 'rect'; nodeDb[node.id].description = node.description; } } nodeDb[node.id].description = common.sanitizeTextOrArray( nodeDb[node.id].description, getConfig() ); } // if (nodeDb[node.id].description.length === 1 && nodeDb[node.id].shape === 'rectWithTitle') { nodeDb[node.id].shape = 'rect'; } // Save data for description and group so that for instance a statement without description overwrites // one with description // group if (!nodeDb[node.id].type && node.doc) { log.info('Setting cluster for ', node.id, getDir(node)); nodeDb[node.id].type = 'group'; nodeDb[node.id].dir = getDir(node); nodeDb[node.id].shape = node.type === 'divider' ? 'divider' : 'roundedWithTitle'; nodeDb[node.id].classes = nodeDb[node.id].classes + ' ' + (altFlag ? 'statediagram-cluster statediagram-cluster-alt' : 'statediagram-cluster'); } const nodeData = { labelStyle: '', shape: nodeDb[node.id].shape, labelText: nodeDb[node.id].description, // typeof nodeDb[node.id].description === 'object' // ? nodeDb[node.id].description[0] // : nodeDb[node.id].description, classes: nodeDb[node.id].classes, //classStr, style: '', //styles.style, id: node.id, dir: nodeDb[node.id].dir, domId: 'state-' + node.id + '-' + cnt, type: nodeDb[node.id].type, padding: 15, //getConfig().flowchart.padding }; if (node.note) { // Todo: set random id const noteData = { labelStyle: '', shape: 'note', labelText: node.note.text, classes: 'statediagram-note', //classStr, style: '', //styles.style, id: node.id + '----note-' + cnt, domId: 'state-' + node.id + '----note-' + cnt, type: nodeDb[node.id].type, padding: 15, //getConfig().flowchart.padding }; const groupData = { labelStyle: '', shape: 'noteGroup', labelText: node.note.text, classes: nodeDb[node.id].classes, //classStr, style: '', //styles.style, id: node.id + '----parent', domId: 'state-' + node.id + '----parent-' + cnt, type: 'group', padding: 0, //getConfig().flowchart.padding }; cnt++; g.setNode(node.id + '----parent', groupData); g.setNode(noteData.id, noteData); g.setNode(node.id, nodeData); g.setParent(node.id, node.id + '----parent'); g.setParent(noteData.id, node.id + '----parent'); let from = node.id; let to = noteData.id; if (node.note.position === 'left of') { from = noteData.id; to = node.id; } g.setEdge(from, to, { arrowhead: 'none', arrowType: '', style: 'fill:none', labelStyle: '', classes: 'transition note-edge', arrowheadStyle: 'fill: #333', labelpos: 'c', labelType: 'text', thickness: 'normal', }); } else { g.setNode(node.id, nodeData); } } if (parent) { if (parent.id !== 'root') { log.trace('Setting node ', node.id, ' to be child of its parent ', parent.id); g.setParent(node.id, parent.id); } } if (node.doc) { log.trace('Adding nodes children '); setupDoc(g, node, node.doc, !altFlag); } }; let cnt = 0; const setupDoc = (g, parent, doc, altFlag) => { // cnt = 0; log.trace('items', doc); doc.forEach((item) => { if (item.stmt === 'state' || item.stmt === 'default') { setupNode(g, parent, item, altFlag); } else if (item.stmt === 'relation') { setupNode(g, parent, item.state1, altFlag); setupNode(g, parent, item.state2, altFlag); const edgeData = { id: 'edge' + cnt, arrowhead: 'normal', arrowTypeEnd: 'arrow_barb', style: 'fill:none', labelStyle: '', label: common.sanitizeText(item.description, getConfig()), arrowheadStyle: 'fill: #333', labelpos: 'c', labelType: 'text', thickness: 'normal', classes: 'transition', }; let startId = item.state1.id; let endId = item.state2.id; g.setEdge(startId, endId, edgeData, cnt); cnt++; } }); }; const getDir = (nodes, defaultDir) => { let dir = defaultDir || 'TB'; if (nodes.doc) { for (let i = 0; i < nodes.doc.length; i++) { const node = nodes.doc[i]; if (node.stmt === 'dir') { dir = node.value; } } } return dir; }; /** * Draws a flowchart in the tag with id: id based on the graph definition in text. * * @param {any} text * @param {any} id * @param _version * @param diag */ export const draw = function (text, id, _version, diag) { log.info('Drawing state diagram (v2)', id); // diag.sb.clear(); nodeDb = {}; // Fetch the default direction, use TD if none was found let dir = diag.db.getDirection(); if (typeof dir === 'undefined') { dir = 'LR'; } const { securityLevel, state: conf } = getConfig(); const nodeSpacing = conf.nodeSpacing || 50; const rankSpacing = conf.rankSpacing || 50; log.info(diag.db.getRootDocV2()); diag.db.extract(diag.db.getRootDocV2()); log.info(diag.db.getRootDocV2()); // Create the input mermaid.graph const g = new graphlib.Graph({ multigraph: true, compound: true, }) .setGraph({ rankdir: getDir(diag.db.getRootDocV2()), nodesep: nodeSpacing, ranksep: rankSpacing, marginx: 8, marginy: 8, }) .setDefaultEdgeLabel(function () { return {}; }); setupNode(g, undefined, diag.db.getRootDocV2(), true); // Set up an SVG group so that we can translate the final graph. let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); const svg = root.select(`[id="${id}"]`); // Run the renderer. This is what draws the final graph. const element = root.select('#' + id + ' g'); render(element, g, ['barb'], 'statediagram', id); const padding = 8; const bounds = svg.node().getBBox(); const width = bounds.width + padding * 2; const height = bounds.height + padding * 2; // Zoom in a bit svg.attr('class', 'statediagram'); const svgBounds = svg.node().getBBox(); configureSvgSize(svg, height, width, conf.useMaxWidth); // Ensure the viewBox includes the whole svgBounds area with extra space for padding const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; log.debug(`viewBox ${vBox}`); svg.attr('viewBox', vBox); // Add label rects for non html labels // if (!evaluate(conf.htmlLabels) || true) { const labels = document.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); for (let k = 0; k < labels.length; k++) { const label = labels[k]; // Get dimensions of label const dim = label.getBBox(); const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); rect.setAttribute('rx', 0); rect.setAttribute('ry', 0); rect.setAttribute('width', dim.width); rect.setAttribute('height', dim.height); label.insertBefore(rect, label.firstChild); // } } addSVGAccessibilityFields(diag.db, svg, id); }; export default { setConf, getClasses, draw, }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/stateRenderer.js���������������������0000664�0000000�0000000�00000021326�14332737457�0027731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { select } from 'd3'; import dagre from 'dagre'; import graphlib from 'graphlib'; import { log } from '../../logger'; import common from '../common/common'; import { drawState, addTitleAndBox, drawEdge } from './shapes'; import { getConfig } from '../../config'; import { configureSvgSize } from '../../setupGraphViewbox'; import addSVGAccessibilityFields from '../../accessibility'; // TODO Move conf object to main conf in mermaidAPI let conf; const transformationLog = {}; export const setConf = function () { //no-op }; /** * Setup arrow head and define the marker. The result is appended to the svg. * * @param {any} elem */ const insertMarkers = function (elem) { elem .append('defs') .append('marker') .attr('id', 'dependencyEnd') .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z'); }; /** * Draws a flowchart in the tag with id: id based on the graph definition in text. * * @param {any} text * @param {any} id * @param _version * @param diagObj */ export const draw = function (text, id, _version, diagObj) { conf = getConfig().state; const securityLevel = getConfig().securityLevel; // Handle root and Document for when rendering in sanbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; // diagObj.db.clear(); // parser.parse(text); log.debug('Rendering diagram ' + text); // Fetch the default direction, use TD if none was found const diagram = root.select(`[id='${id}']`); insertMarkers(diagram); // Layout graph, Create a new directed graph const graph = new graphlib.Graph({ multigraph: true, compound: true, // acyclicer: 'greedy', rankdir: 'RL', // ranksep: '20' }); // Default to assigning a new object as a label for each new edge. graph.setDefaultEdgeLabel(function () { return {}; }); const rootDoc = diagObj.db.getRootDoc(); renderDoc(rootDoc, diagram, undefined, false, root, doc, diagObj); const padding = conf.padding; const bounds = diagram.node().getBBox(); const width = bounds.width + padding * 2; const height = bounds.height + padding * 2; // zoom in a bit const svgWidth = width * 1.75; configureSvgSize(diagram, height, svgWidth, conf.useMaxWidth); diagram.attr( 'viewBox', `${bounds.x - conf.padding} ${bounds.y - conf.padding} ` + width + ' ' + height ); addSVGAccessibilityFields(diagObj.db, diagram, id); }; const getLabelWidth = (text) => { return text ? text.length * conf.fontSizeFactor : 1; }; const renderDoc = (doc, diagram, parentId, altBkg, root, domDocument, diagObj) => { // Layout graph, Create a new directed graph const graph = new graphlib.Graph({ compound: true, multigraph: true, }); let i; let edgeFreeDoc = true; for (i = 0; i < doc.length; i++) { if (doc[i].stmt === 'relation') { edgeFreeDoc = false; break; } } // Set an object for the graph label if (parentId) graph.setGraph({ rankdir: 'LR', multigraph: true, compound: true, // acyclicer: 'greedy', ranker: 'tight-tree', ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor, nodeSep: edgeFreeDoc ? 1 : 50, isMultiGraph: true, // ranksep: 5, // nodesep: 1 }); else { graph.setGraph({ rankdir: 'TB', multigraph: true, compound: true, // isCompound: true, // acyclicer: 'greedy', // ranker: 'longest-path' ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor, nodeSep: edgeFreeDoc ? 1 : 50, ranker: 'tight-tree', // ranker: 'network-simplex' isMultiGraph: true, }); } // Default to assigning a new object as a label for each new edge. graph.setDefaultEdgeLabel(function () { return {}; }); diagObj.db.extract(doc); const states = diagObj.db.getStates(); const relations = diagObj.db.getRelations(); const keys = Object.keys(states); let first = true; for (let i = 0; i < keys.length; i++) { const stateDef = states[keys[i]]; if (parentId) { stateDef.parentId = parentId; } let node; if (stateDef.doc) { let sub = diagram.append('g').attr('id', stateDef.id).attr('class', 'stateGroup'); node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument, diagObj); if (first) { // first = false; sub = addTitleAndBox(sub, stateDef, altBkg); let boxBounds = sub.node().getBBox(); node.width = boxBounds.width; node.height = boxBounds.height + conf.padding / 2; transformationLog[stateDef.id] = { y: conf.compositTitleSize }; } else { // sub = addIdAndBox(sub, stateDef); let boxBounds = sub.node().getBBox(); node.width = boxBounds.width; node.height = boxBounds.height; // transformationLog[stateDef.id] = { y: conf.compositTitleSize }; } } else { node = drawState(diagram, stateDef, graph); } if (stateDef.note) { // Draw note note const noteDef = { descriptions: [], id: stateDef.id + '-note', note: stateDef.note, type: 'note', }; const note = drawState(diagram, noteDef, graph); // graph.setNode(node.id, node); if (stateDef.note.position === 'left of') { graph.setNode(node.id + '-note', note); graph.setNode(node.id, node); } else { graph.setNode(node.id, node); graph.setNode(node.id + '-note', note); } // graph.setNode(node.id); graph.setParent(node.id, node.id + '-group'); graph.setParent(node.id + '-note', node.id + '-group'); } else { // Add nodes to the graph. The first argument is the node id. The second is // metadata about the node. In this case we're going to add labels to each of // our nodes. graph.setNode(node.id, node); } } log.debug('Count=', graph.nodeCount(), graph); let cnt = 0; relations.forEach(function (relation) { cnt++; log.debug('Setting edge', relation); graph.setEdge( relation.id1, relation.id2, { relation: relation, width: getLabelWidth(relation.title), height: conf.labelHeight * common.getRows(relation.title).length, labelpos: 'c', }, 'id' + cnt ); }); dagre.layout(graph); log.debug('Graph after layout', graph.nodes()); const svgElem = diagram.node(); graph.nodes().forEach(function (v) { if (typeof v !== 'undefined' && typeof graph.node(v) !== 'undefined') { log.warn('Node ' + v + ': ' + JSON.stringify(graph.node(v))); root .select('#' + svgElem.id + ' #' + v) .attr( 'transform', 'translate(' + (graph.node(v).x - graph.node(v).width / 2) + ',' + (graph.node(v).y + (transformationLog[v] ? transformationLog[v].y : 0) - graph.node(v).height / 2) + ' )' ); root .select('#' + svgElem.id + ' #' + v) .attr('data-x-shift', graph.node(v).x - graph.node(v).width / 2); const dividers = domDocument.querySelectorAll('#' + svgElem.id + ' #' + v + ' .divider'); dividers.forEach((divider) => { const parent = divider.parentElement; let pWidth = 0; let pShift = 0; if (parent) { if (parent.parentElement) pWidth = parent.parentElement.getBBox().width; pShift = parseInt(parent.getAttribute('data-x-shift'), 10); if (Number.isNaN(pShift)) { pShift = 0; } } divider.setAttribute('x1', 0 - pShift + 8); divider.setAttribute('x2', pWidth - pShift - 8); }); } else { log.debug('No Node ' + v + ': ' + JSON.stringify(graph.node(v))); } }); let stateBox = svgElem.getBBox(); graph.edges().forEach(function (e) { if (typeof e !== 'undefined' && typeof graph.edge(e) !== 'undefined') { log.debug('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(graph.edge(e))); drawEdge(diagram, graph.edge(e), graph.edge(e).relation); } }); stateBox = svgElem.getBBox(); const stateInfo = { id: parentId ? parentId : 'root', label: parentId ? parentId : 'root', width: 0, height: 0, }; stateInfo.width = stateBox.width + 2 * conf.padding; stateInfo.height = stateBox.height + 2 * conf.padding; log.debug('Doc rendered', stateInfo, graph); return stateInfo; }; export default { setConf, draw, }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/state/styles.js����������������������������0000664�0000000�0000000�00000007374�14332737457�0026454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const getStyles = (options) => ` defs #statediagram-barbEnd { fill: ${options.transitionColor}; stroke: ${options.transitionColor}; } g.stateGroup text { fill: ${options.nodeBorder}; stroke: none; font-size: 10px; } g.stateGroup text { fill: ${options.textColor}; stroke: none; font-size: 10px; } g.stateGroup .state-title { font-weight: bolder; fill: ${options.stateLabelColor}; } g.stateGroup rect { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; } g.stateGroup line { stroke: ${options.lineColor}; stroke-width: 1; } .transition { stroke: ${options.transitionColor}; stroke-width: 1; fill: none; } .stateGroup .composit { fill: ${options.background}; border-bottom: 1px } .stateGroup .alt-composit { fill: #e0e0e0; border-bottom: 1px } .state-note { stroke: ${options.noteBorderColor}; fill: ${options.noteBkgColor}; text { fill: ${options.noteTextColor}; stroke: none; font-size: 10px; } } .stateLabel .box { stroke: none; stroke-width: 0; fill: ${options.mainBkg}; opacity: 0.5; } .edgeLabel .label rect { fill: ${options.labelBackgroundColor}; opacity: 0.5; } .edgeLabel .label text { fill: ${options.transitionLabelColor || options.tertiaryTextColor}; } .label div .edgeLabel { color: ${options.transitionLabelColor || options.tertiaryTextColor}; } .stateLabel text { fill: ${options.stateLabelColor}; font-size: 10px; font-weight: bold; } .node circle.state-start { fill: ${options.specialStateColor}; stroke: ${options.specialStateColor}; } .node .fork-join { fill: ${options.specialStateColor}; stroke: ${options.specialStateColor}; } .node circle.state-end { fill: ${options.innerEndBackground}; stroke: ${options.background}; stroke-width: 1.5 } .end-state-inner { fill: ${options.compositeBackground || options.background}; // stroke: ${options.background}; stroke-width: 1.5 } .node rect { fill: ${options.stateBkg || options.mainBkg}; stroke: ${options.stateBorder || options.nodeBorder}; stroke-width: 1px; } .node polygon { fill: ${options.mainBkg}; stroke: ${options.stateBorder || options.nodeBorder};; stroke-width: 1px; } #statediagram-barbEnd { fill: ${options.lineColor}; } .statediagram-cluster rect { fill: ${options.compositeTitleBackground}; stroke: ${options.stateBorder || options.nodeBorder}; stroke-width: 1px; } .cluster-label, .nodeLabel { color: ${options.stateLabelColor}; } .statediagram-cluster rect.outer { rx: 5px; ry: 5px; } .statediagram-state .divider { stroke: ${options.stateBorder || options.nodeBorder}; } .statediagram-state .title-state { rx: 5px; ry: 5px; } .statediagram-cluster.statediagram-cluster .inner { fill: ${options.compositeBackground || options.background}; } .statediagram-cluster.statediagram-cluster-alt .inner { fill: ${options.altBackground ? options.altBackground : '#efefef'}; } .statediagram-cluster .inner { rx:0; ry:0; } .statediagram-state rect.basic { rx: 5px; ry: 5px; } .statediagram-state rect.divider { stroke-dasharray: 10,10; fill: ${options.altBackground ? options.altBackground : '#efefef'}; } .note-edge { stroke-dasharray: 5; } .statediagram-note rect { fill: ${options.noteBkgColor}; stroke: ${options.noteBorderColor}; stroke-width: 1px; rx: 0; ry: 0; } .statediagram-note rect { fill: ${options.noteBkgColor}; stroke: ${options.noteBorderColor}; stroke-width: 1px; rx: 0; ry: 0; } .statediagram-note text { fill: ${options.noteTextColor}; } .statediagram-note .nodeLabel { color: ${options.noteTextColor}; } .statediagram .edgeLabel { color: red; // ${options.noteTextColor}; } #dependencyStart, #dependencyEnd { fill: ${options.lineColor}; stroke: ${options.lineColor}; stroke-width: 1; } `; export default getStyles; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/user-journey/������������������������������0000775�0000000�0000000�00000000000�14332737457�0026107�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/user-journey/journeyDb.js������������������0000664�0000000�0000000�00000005165�14332737457�0030415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import mermaidAPI from '../../mermaidAPI'; import * as configApi from '../../config'; import { setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle, getAccDescription, setAccDescription, clear as commonClear, } from '../../commonDb'; let currentSection = ''; const sections = []; const tasks = []; const rawTasks = []; export const parseDirective = function (statement, context, type) { mermaidAPI.parseDirective(this, statement, context, type); }; export const clear = function () { sections.length = 0; tasks.length = 0; currentSection = ''; rawTasks.length = 0; commonClear(); }; export const addSection = function (txt) { currentSection = txt; sections.push(txt); }; export const getSections = function () { return sections; }; export const getTasks = function () { let allItemsProcessed = compileTasks(); const maxDepth = 100; let iterationCount = 0; while (!allItemsProcessed && iterationCount < maxDepth) { allItemsProcessed = compileTasks(); iterationCount++; } tasks.push(...rawTasks); return tasks; }; const updateActors = function () { const tempActors = []; tasks.forEach((task) => { if (task.people) { tempActors.push(...task.people); } }); const unique = new Set(tempActors); return [...unique].sort(); }; export const addTask = function (descr, taskData) { const pieces = taskData.substr(1).split(':'); let score = 0; let peeps = []; if (pieces.length === 1) { score = Number(pieces[0]); peeps = []; } else { score = Number(pieces[0]); peeps = pieces[1].split(','); } const peopleList = peeps.map((s) => s.trim()); const rawTask = { section: currentSection, type: currentSection, people: peopleList, task: descr, score, }; rawTasks.push(rawTask); }; export const addTaskOrg = function (descr) { const newTask = { section: currentSection, type: currentSection, description: descr, task: descr, classes: [], }; tasks.push(newTask); }; const compileTasks = function () { const compileTask = function (pos) { return rawTasks[pos].processed; }; let allProcessed = true; for (let i = 0; i < rawTasks.length; i++) { compileTask(i); allProcessed = allProcessed && rawTasks[i].processed; } return allProcessed; }; const getActors = function () { return updateActors(); }; export default { parseDirective, getConfig: () => configApi.getConfig().journey, clear, setDiagramTitle, getDiagramTitle, setAccTitle, getAccTitle, setAccDescription, getAccDescription, addSection, getSections, getTasks, addTask, addTaskOrg, getActors, }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/user-journey/journeyDb.spec.js�������������0000664�0000000�0000000�00000005505�14332737457�0031344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import journeyDb from './journeyDb'; import { convert } from '../../tests/util'; describe('when using the journeyDb', function () { beforeEach(function () { journeyDb.clear(); }); describe('when calling the clear function', function () { beforeEach(function () { journeyDb.addSection('weekends skip test'); journeyDb.addTask('test1', '4: id1, id3'); journeyDb.addTask('test2', '2: id2'); journeyDb.clear(); }); it.each(convert` fn | expected ${'getTasks'} | ${[]} ${'getAccTitle'} | ${''} ${'getSections'} | ${[]} ${'getActors'} | ${[]} `)('should clear $fn', ({ fn, expected }) => { expect(journeyDb[fn]()).toEqual(expected); }); }); describe('when calling the clear function', function () { beforeEach(function () { journeyDb.addSection('weekends skip test'); journeyDb.addTask('test1', '3: id1, id3'); journeyDb.addTask('test2', '1: id2'); journeyDb.clear(); }); it.each(convert` fn | expected ${'getTasks'} | ${[]} ${'getAccTitle'} | ${''} ${'getAccDescription'} | ${''} ${'getSections'} | ${[]} `)('should clear $fn', ({ fn, expected }) => { expect(journeyDb[fn]()).toEqual(expected); }); }); it('tasks and actors should be added', function () { journeyDb.setAccTitle('Shopping'); journeyDb.setAccDescription('A user journey for family shopping'); journeyDb.addSection('Journey to the shops'); journeyDb.addTask('Get car keys', ':5:Dad'); journeyDb.addTask('Go to car', ':3:Dad, Mum, Child#1, Child#2'); journeyDb.addTask('Drive to supermarket', ':4:Dad'); journeyDb.addSection('Do shopping'); journeyDb.addTask('Go shopping', ':5:Mum'); expect(journeyDb.getAccTitle()).toEqual('Shopping'); expect(journeyDb.getAccDescription()).toEqual('A user journey for family shopping'); expect(journeyDb.getTasks()).toEqual([ { score: 5, people: ['Dad'], section: 'Journey to the shops', task: 'Get car keys', type: 'Journey to the shops', }, { score: 3, people: ['Dad', 'Mum', 'Child#1', 'Child#2'], section: 'Journey to the shops', task: 'Go to car', type: 'Journey to the shops', }, { score: 4, people: ['Dad'], section: 'Journey to the shops', task: 'Drive to supermarket', type: 'Journey to the shops', }, { score: 5, people: ['Mum'], section: 'Do shopping', task: 'Go shopping', type: 'Do shopping', }, ]); expect(journeyDb.getActors()).toEqual(['Child#1', 'Child#2', 'Dad', 'Mum']); expect(journeyDb.getSections()).toEqual(['Journey to the shops', 'Do shopping']); }); }); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/user-journey/journeyDetector.ts������������0000664�0000000�0000000�00000000253�14332737457�0031644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import type { DiagramDetector } from '../../diagram-api/types'; export const journeyDetector: DiagramDetector = (txt) => { return txt.match(/^\s*journey/) !== null; }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/user-journey/journeyRenderer.ts������������0000664�0000000�0000000�00000017301�14332737457�0031643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// @ts-nocheck TODO: fix file import { select } from 'd3'; import svgDraw from './svgDraw'; import { getConfig } from '../../config'; import { configureSvgSize } from '../../setupGraphViewbox'; import addSVGAccessibilityFields from '../../accessibility'; export const setConf = function (cnf) { const keys = Object.keys(cnf); keys.forEach(function (key) { conf[key] = cnf[key]; }); }; const actors = {}; /** @param {any} diagram */ function drawActorLegend(diagram) { const conf = getConfig().journey; // Draw the actors let yPos = 60; Object.keys(actors).forEach((person) => { const colour = actors[person].color; const circleData = { cx: 20, cy: yPos, r: 7, fill: colour, stroke: '#000', pos: actors[person].position, }; svgDraw.drawCircle(diagram, circleData); const labelData = { x: 40, y: yPos + 7, fill: '#666', text: person, textMargin: conf.boxTextMargin | 5, }; svgDraw.drawText(diagram, labelData); yPos += 20; }); } // TODO: Cleanup? const conf = getConfig().journey; const LEFT_MARGIN = conf.leftMargin; export const draw = function (text, id, version, diagObj) { const conf = getConfig().journey; diagObj.db.clear(); diagObj.parser.parse(text + '\n'); const securityLevel = getConfig().securityLevel; // Handle root and Document for when rendering in sanbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } const root = securityLevel === 'sandbox' ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); // const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; bounds.init(); const diagram = root.select('#' + id); svgDraw.initGraphics(diagram); const tasks = diagObj.db.getTasks(); const title = diagObj.db.getDiagramTitle(); const actorNames = diagObj.db.getActors(); for (const member in actors) delete actors[member]; let actorPos = 0; actorNames.forEach((actorName) => { actors[actorName] = { color: conf.actorColours[actorPos % conf.actorColours.length], position: actorPos, }; actorPos++; }); drawActorLegend(diagram); bounds.insert(0, 0, LEFT_MARGIN, Object.keys(actors).length * 50); drawTasks(diagram, tasks, 0); const box = bounds.getBounds(); if (title) { diagram .append('text') .text(title) .attr('x', LEFT_MARGIN) .attr('font-size', '4ex') .attr('font-weight', 'bold') .attr('y', 25); } const height = box.stopy - box.starty + 2 * conf.diagramMarginY; const width = LEFT_MARGIN + box.stopx + 2 * conf.diagramMarginX; configureSvgSize(diagram, height, width, conf.useMaxWidth); // Draw activity line diagram .append('line') .attr('x1', LEFT_MARGIN) .attr('y1', conf.height * 4) // One section head + one task + margins .attr('x2', width - LEFT_MARGIN - 4) // Subtract stroke width so arrow point is retained .attr('y2', conf.height * 4) .attr('stroke-width', 4) .attr('stroke', 'black') .attr('marker-end', 'url(#arrowhead)'); const extraVertForTitle = title ? 70 : 0; diagram.attr('viewBox', `${box.startx} -25 ${width} ${height + extraVertForTitle}`); diagram.attr('preserveAspectRatio', 'xMinYMin meet'); diagram.attr('height', height + extraVertForTitle + 25); addSVGAccessibilityFields(diagObj.db, diagram, id); }; export const bounds = { data: { startx: undefined, stopx: undefined, starty: undefined, stopy: undefined, }, verticalPos: 0, sequenceItems: [], init: function () { this.sequenceItems = []; this.data = { startx: undefined, stopx: undefined, starty: undefined, stopy: undefined, }; this.verticalPos = 0; }, updateVal: function (obj, key, val, fun) { if (typeof obj[key] === 'undefined') { obj[key] = val; } else { obj[key] = fun(val, obj[key]); } }, updateBounds: function (startx, starty, stopx, stopy) { const conf = getConfig().journey; // eslint-disable-next-line @typescript-eslint/no-this-alias const _self = this; let cnt = 0; /** @param {any} type */ function updateFn(type) { return function updateItemBounds(item) { cnt++; // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems const n = _self.sequenceItems.length - cnt + 1; _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min); _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max); _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min); _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max); if (!(type === 'activation')) { _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min); _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max); _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min); _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max); } }; } this.sequenceItems.forEach(updateFn()); }, insert: function (startx, starty, stopx, stopy) { const _startx = Math.min(startx, stopx); const _stopx = Math.max(startx, stopx); const _starty = Math.min(starty, stopy); const _stopy = Math.max(starty, stopy); this.updateVal(bounds.data, 'startx', _startx, Math.min); this.updateVal(bounds.data, 'starty', _starty, Math.min); this.updateVal(bounds.data, 'stopx', _stopx, Math.max); this.updateVal(bounds.data, 'stopy', _stopy, Math.max); this.updateBounds(_startx, _starty, _stopx, _stopy); }, bumpVerticalPos: function (bump) { this.verticalPos = this.verticalPos + bump; this.data.stopy = this.verticalPos; }, getVerticalPos: function () { return this.verticalPos; }, getBounds: function () { return this.data; }, }; const fills = conf.sectionFills; const textColours = conf.sectionColours; export const drawTasks = function (diagram, tasks, verticalPos) { const conf = getConfig().journey; let lastSection = ''; const sectionVHeight = conf.height * 2 + conf.diagramMarginY; const taskPos = verticalPos + sectionVHeight; let sectionNumber = 0; let fill = '#CCC'; let colour = 'black'; let num = 0; // Draw the tasks for (let i = 0; i < tasks.length; i++) { const task = tasks[i]; if (lastSection !== task.section) { fill = fills[sectionNumber % fills.length]; num = sectionNumber % fills.length; colour = textColours[sectionNumber % textColours.length]; const section = { x: i * conf.taskMargin + i * conf.width + LEFT_MARGIN, y: 50, text: task.section, fill, num, colour, }; svgDraw.drawSection(diagram, section, conf); lastSection = task.section; sectionNumber++; } // Collect the actors involved in the task const taskActors = task.people.reduce((acc, actorName) => { if (actors[actorName]) { acc[actorName] = actors[actorName]; } return acc; }, {}); // Add some rendering data to the object task.x = i * conf.taskMargin + i * conf.width + LEFT_MARGIN; task.y = taskPos; task.width = conf.diagramMarginX; task.height = conf.diagramMarginY; task.colour = colour; task.fill = fill; task.num = num; task.actors = taskActors; // Draw the box with the attached line svgDraw.drawTask(diagram, task, conf); bounds.insert(task.x, task.y, task.x + task.width + conf.taskMargin, 300 + 5 * 30); // stopy is the length of the descenders. } }; export default { setConf, draw, }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/user-journey/parser/�����������������������0000775�0000000�0000000�00000000000�14332737457�0027403�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/user-journey/parser/journey.jison����������0000664�0000000�0000000�00000006525�14332737457�0032152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** mermaid * https://mermaidjs.github.io/ * (c) 2015 Knut Sveidqvist * MIT license. */ %lex %options case-insensitive %x acc_title %x acc_descr %x acc_descr_multiline // Directive states %x open_directive type_directive arg_directive %% \%\%\{ { this.begin('open_directive'); return 'open_directive'; } <open_directive>((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } <type_directive>":" { this.popState(); this.begin('arg_directive'); return ':'; } <type_directive,arg_directive>\}\%\% { this.popState(); this.popState(); return 'close_directive'; } <arg_directive>((?:(?!\}\%\%).|\n)*) return 'arg_directive'; \%%(?!\{)[^\n]* /* skip comments */ [^\}]\%\%[^\n]* /* skip comments */ [\n]+ return 'NEWLINE'; \s+ /* skip whitespace */ \#[^\n]* /* skip comments */ "journey" return 'journey'; "title"\s[^#\n;]+ return 'title'; accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } <acc_title>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } <acc_descr>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} <acc_descr_multiline>[\}] { this.popState(); } <acc_descr_multiline>[^\}]* return "acc_descr_multiline_value"; "section"\s[^#:\n;]+ return 'section'; [^#:\n;]+ return 'taskName'; ":"[^#\n;]+ return 'taskData'; ":" return ':'; <<EOF>> return 'EOF'; . return 'INVALID'; /lex %left '^' %start start %% /* language grammar */ start : journey document 'EOF' { return $2; } | directive start ; document : /* empty */ { $$ = [] } | document line {$1.push($2);$$ = $1} ; line : SPACE statement { $$ = $2 } | statement { $$ = $1 } | NEWLINE { $$=[];} | EOF { $$=[];} ; directive : openDirective typeDirective closeDirective 'NEWLINE' | openDirective typeDirective ':' argDirective closeDirective 'NEWLINE' ; statement : title {yy.setDiagramTitle($1.substr(6));$$=$1.substr(6);} | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } | section {yy.addSection($1.substr(8));$$=$1.substr(8);} | taskName taskData {yy.addTask($1, $2);$$='task';} | directive ; openDirective : open_directive { yy.parseDirective('%%{', 'open_directive'); } ; typeDirective : type_directive { yy.parseDirective($1, 'type_directive'); } ; argDirective : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } ; closeDirective : close_directive { yy.parseDirective('}%%', 'close_directive', 'journey'); } ; %% ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/user-journey/parser/journey.spec.js��������0000664�0000000�0000000�00000010410�14332737457�0032361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { parser } from './journey'; import journeyDb from '../journeyDb'; const parserFnConstructor = (str) => { return () => { parser.parse(str); }; }; describe('when parsing a journey diagram it', function () { beforeEach(function () { parser.yy = journeyDb; parser.yy.clear(); }); it('should handle a title definition', function () { const str = 'journey\ntitle Adding journey diagram functionality to mermaid'; expect(parserFnConstructor(str)).not.toThrow(); }); it('should handle an accessibility description (accDescr)', function () { const str = 'journey\n' + 'accDescr: A user journey for family shopping\n' + 'title Adding journey diagram functionality to mermaid\n' + 'section Order from website'; expect(parserFnConstructor(str)).not.toThrow(); }); it('should handle an accessibility multiline description (accDescr)', function () { const str = 'journey\n' + `accDescr { A user journey for family shopping }` + 'title Adding journey diagram functionality to mermaid\n' + 'accTitle: Adding acc journey diagram functionality to mermaid\n' + 'section Order from website'; expect(parserFnConstructor(str)).not.toThrow(); expect(journeyDb.getAccDescription()).toBe('A user journey for\nfamily shopping'); expect(journeyDb.getDiagramTitle()).toBe('Adding journey diagram functionality to mermaid'); expect(journeyDb.getAccTitle()).toBe('Adding acc journey diagram functionality to mermaid'); }); it('should handle an accessibility title (accDescr)', function () { const str = `journey accTitle: The title section Order from website`; expect(parserFnConstructor(str)).not.toThrow(); expect(journeyDb.getAccDescription()).toBe(''); expect(journeyDb.getAccTitle()).toBe('The title'); }); it('should handle a section definition', function () { const str = 'journey\n' + 'title Adding journey diagram functionality to mermaid\n' + 'section Order from website'; expect(parserFnConstructor(str)).not.toThrow(); }); it('should handle multiline section titles with different line breaks', function () { const str = 'journey\n' + 'title Adding gantt diagram functionality to mermaid\n' + 'section Line1<br>Line2<br/>Line3</br />Line4<br\t/>Line5'; expect(parserFnConstructor(str)).not.toThrow(); }); it('should handle a task definition', function () { const str = 'journey\n' + 'title Adding journey diagram functionality to mermaid\n' + 'section Documentation\n' + 'A task: 5: Alice, Bob, Charlie\n' + 'B task: 3:Bob, Charlie\n' + 'C task: 5\n' + 'D task: 5: Charlie, Alice\n' + 'E task: 5:\n' + 'section Another section\n' + 'P task: 5:\n' + 'Q task: 5:\n' + 'R task: 5:'; expect(parserFnConstructor(str)).not.toThrow(); const tasks = parser.yy.getTasks(); expect(tasks.length).toEqual(8); expect(tasks[0]).toEqual({ score: 5, people: ['Alice', 'Bob', 'Charlie'], section: 'Documentation', task: 'A task', type: 'Documentation', }); expect(tasks[1]).toEqual({ score: 3, people: ['Bob', 'Charlie'], section: 'Documentation', type: 'Documentation', task: 'B task', }); expect(tasks[2]).toEqual({ score: 5, people: [], section: 'Documentation', type: 'Documentation', task: 'C task', }); expect(tasks[3]).toEqual({ score: 5, people: ['Charlie', 'Alice'], section: 'Documentation', task: 'D task', type: 'Documentation', }); expect(tasks[4]).toEqual({ score: 5, people: [''], section: 'Documentation', type: 'Documentation', task: 'E task', }); expect(tasks[5]).toEqual({ score: 5, people: [''], section: 'Another section', type: 'Another section', task: 'P task', }); expect(tasks[6]).toEqual({ score: 5, people: [''], section: 'Another section', type: 'Another section', task: 'Q task', }); expect(tasks[7]).toEqual({ score: 5, people: [''], section: 'Another section', type: 'Another section', task: 'R task', }); }); }); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/user-journey/styles.js���������������������0000664�0000000�0000000�00000005475�14332737457�0030003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const getStyles = (options) => `.label { font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); color: ${options.textColor}; } .mouth { stroke: #666; } line { stroke: ${options.textColor} } .legend { fill: ${options.textColor}; } .label text { fill: #333; } .label { color: ${options.textColor} } .face { ${options.faceColor ? `fill: ${options.faceColor}` : 'fill: #FFF8DC'}; stroke: #999; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; stroke-width: 1px; } .node .label { text-align: center; } .node.clickable { cursor: pointer; } .arrowheadPath { fill: ${options.arrowheadColor}; } .edgePath .path { stroke: ${options.lineColor}; stroke-width: 1.5px; } .flowchart-link { stroke: ${options.lineColor}; fill: none; } .edgeLabel { background-color: ${options.edgeLabelBackground}; rect { opacity: 0.5; } text-align: center; } .cluster rect { } .cluster text { fill: ${options.titleColor}; } div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); font-size: 12px; background: ${options.tertiaryColor}; border: 1px solid ${options.border2}; border-radius: 2px; pointer-events: none; z-index: 100; } .task-type-0, .section-type-0 { ${options.fillType0 ? `fill: ${options.fillType0}` : ''}; } .task-type-1, .section-type-1 { ${options.fillType0 ? `fill: ${options.fillType1}` : ''}; } .task-type-2, .section-type-2 { ${options.fillType0 ? `fill: ${options.fillType2}` : ''}; } .task-type-3, .section-type-3 { ${options.fillType0 ? `fill: ${options.fillType3}` : ''}; } .task-type-4, .section-type-4 { ${options.fillType0 ? `fill: ${options.fillType4}` : ''}; } .task-type-5, .section-type-5 { ${options.fillType0 ? `fill: ${options.fillType5}` : ''}; } .task-type-6, .section-type-6 { ${options.fillType0 ? `fill: ${options.fillType6}` : ''}; } .task-type-7, .section-type-7 { ${options.fillType0 ? `fill: ${options.fillType7}` : ''}; } .actor-0 { ${options.actor0 ? `fill: ${options.actor0}` : ''}; } .actor-1 { ${options.actor1 ? `fill: ${options.actor1}` : ''}; } .actor-2 { ${options.actor2 ? `fill: ${options.actor2}` : ''}; } .actor-3 { ${options.actor3 ? `fill: ${options.actor3}` : ''}; } .actor-4 { ${options.actor4 ? `fill: ${options.actor4}` : ''}; } .actor-5 { ${options.actor5 ? `fill: ${options.actor5}` : ''}; } `; export default getStyles; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/diagrams/user-journey/svgDraw.js��������������������0000664�0000000�0000000�00000025703�14332737457�0030071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { arc as d3arc } from 'd3'; export const drawRect = function (elem, rectData) { const rectElem = elem.append('rect'); rectElem.attr('x', rectData.x); rectElem.attr('y', rectData.y); rectElem.attr('fill', rectData.fill); rectElem.attr('stroke', rectData.stroke); rectElem.attr('width', rectData.width); rectElem.attr('height', rectData.height); rectElem.attr('rx', rectData.rx); rectElem.attr('ry', rectData.ry); if (typeof rectData.class !== 'undefined') { rectElem.attr('class', rectData.class); } return rectElem; }; export const drawFace = function (element, faceData) { const radius = 15; const circleElement = element .append('circle') .attr('cx', faceData.cx) .attr('cy', faceData.cy) .attr('class', 'face') .attr('r', radius) .attr('stroke-width', 2) .attr('overflow', 'visible'); const face = element.append('g'); //left eye face .append('circle') .attr('cx', faceData.cx - radius / 3) .attr('cy', faceData.cy - radius / 3) .attr('r', 1.5) .attr('stroke-width', 2) .attr('fill', '#666') .attr('stroke', '#666'); //right eye face .append('circle') .attr('cx', faceData.cx + radius / 3) .attr('cy', faceData.cy - radius / 3) .attr('r', 1.5) .attr('stroke-width', 2) .attr('fill', '#666') .attr('stroke', '#666'); /** @param {any} face */ function smile(face) { const arc = d3arc() .startAngle(Math.PI / 2) .endAngle(3 * (Math.PI / 2)) .innerRadius(radius / 2) .outerRadius(radius / 2.2); //mouth face .append('path') .attr('class', 'mouth') .attr('d', arc) .attr('transform', 'translate(' + faceData.cx + ',' + (faceData.cy + 2) + ')'); } /** @param {any} face */ function sad(face) { const arc = d3arc() .startAngle((3 * Math.PI) / 2) .endAngle(5 * (Math.PI / 2)) .innerRadius(radius / 2) .outerRadius(radius / 2.2); //mouth face .append('path') .attr('class', 'mouth') .attr('d', arc) .attr('transform', 'translate(' + faceData.cx + ',' + (faceData.cy + 7) + ')'); } /** @param {any} face */ function ambivalent(face) { face .append('line') .attr('class', 'mouth') .attr('stroke', 2) .attr('x1', faceData.cx - 5) .attr('y1', faceData.cy + 7) .attr('x2', faceData.cx + 5) .attr('y2', faceData.cy + 7) .attr('class', 'mouth') .attr('stroke-width', '1px') .attr('stroke', '#666'); } if (faceData.score > 3) { smile(face); } else if (faceData.score < 3) { sad(face); } else { ambivalent(face); } return circleElement; }; export const drawCircle = function (element, circleData) { const circleElement = element.append('circle'); circleElement.attr('cx', circleData.cx); circleElement.attr('cy', circleData.cy); circleElement.attr('class', 'actor-' + circleData.pos); circleElement.attr('fill', circleData.fill); circleElement.attr('stroke', circleData.stroke); circleElement.attr('r', circleData.r); if (typeof circleElement.class !== 'undefined') { circleElement.attr('class', circleElement.class); } if (typeof circleData.title !== 'undefined') { circleElement.append('title').text(circleData.title); } return circleElement; }; export const drawText = function (elem, textData) { // Remove and ignore br:s const nText = textData.text.replace(/<br\s*\/?>/gi, ' '); const textElem = elem.append('text'); textElem.attr('x', textData.x); textElem.attr('y', textData.y); textElem.attr('class', 'legend'); textElem.style('text-anchor', textData.anchor); if (typeof textData.class !== 'undefined') { textElem.attr('class', textData.class); } const span = textElem.append('tspan'); span.attr('x', textData.x + textData.textMargin * 2); span.text(nText); return textElem; }; export const drawLabel = function (elem, txtObject) { /** * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} cut */ function genPoints(x, y, width, height, cut) { return ( x + ',' + y + ' ' + (x + width) + ',' + y + ' ' + (x + width) + ',' + (y + height - cut) + ' ' + (x + width - cut * 1.2) + ',' + (y + height) + ' ' + x + ',' + (y + height) ); } const polygon = elem.append('polygon'); polygon.attr('points', genPoints(txtObject.x, txtObject.y, 50, 20, 7)); polygon.attr('class', 'labelBox'); txtObject.y = txtObject.y + txtObject.labelMargin; txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; drawText(elem, txtObject); }; export const drawSection = function (elem, section, conf) { const g = elem.append('g'); const rect = getNoteRect(); rect.x = section.x; rect.y = section.y; rect.fill = section.fill; rect.width = conf.width; rect.height = conf.height; rect.class = 'journey-section section-type-' + section.num; rect.rx = 3; rect.ry = 3; drawRect(g, rect); _drawTextCandidateFunc(conf)( section.text, g, rect.x, rect.y, rect.width, rect.height, { class: 'journey-section section-type-' + section.num }, conf, section.colour ); }; let taskCount = -1; /** * Draws an actor in the diagram with the attaced line * * @param {any} elem The HTML element * @param {any} task The task to render * @param {any} conf The global configuration */ export const drawTask = function (elem, task, conf) { const center = task.x + conf.width / 2; const g = elem.append('g'); taskCount++; const maxHeight = 300 + 5 * 30; g.append('line') .attr('id', 'task' + taskCount) .attr('x1', center) .attr('y1', task.y) .attr('x2', center) .attr('y2', maxHeight) .attr('class', 'task-line') .attr('stroke-width', '1px') .attr('stroke-dasharray', '4 2') .attr('stroke', '#666'); drawFace(g, { cx: center, cy: 300 + (5 - task.score) * 30, score: task.score, }); const rect = getNoteRect(); rect.x = task.x; rect.y = task.y; rect.fill = task.fill; rect.width = conf.width; rect.height = conf.height; rect.class = 'task task-type-' + task.num; rect.rx = 3; rect.ry = 3; drawRect(g, rect); let xPos = task.x + 14; task.people.forEach((person) => { const colour = task.actors[person].color; const circle = { cx: xPos, cy: task.y, r: 7, fill: colour, stroke: '#000', title: person, pos: task.actors[person].position, }; drawCircle(g, circle); xPos += 10; }); _drawTextCandidateFunc(conf)( task.task, g, rect.x, rect.y, rect.width, rect.height, { class: 'task' }, conf, task.colour ); }; /** * Draws a background rectangle * * @param {any} elem The html element * @param {any} bounds The bounds of the drawing */ export const drawBackgroundRect = function (elem, bounds) { const rectElem = drawRect(elem, { x: bounds.startx, y: bounds.starty, width: bounds.stopx - bounds.startx, height: bounds.stopy - bounds.starty, fill: bounds.fill, class: 'rect', }); rectElem.lower(); }; export const getTextObj = function () { return { x: 0, y: 0, fill: undefined, 'text-anchor': 'start', width: 100, height: 100, textMargin: 0, rx: 0, ry: 0, }; }; export const getNoteRect = function () { return { x: 0, y: 0, width: 100, anchor: 'start', height: 100, rx: 0, ry: 0, }; }; const _drawTextCandidateFunc = (function () { /** * @param {any} content * @param {any} g * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} textAttrs * @param {any} colour */ function byText(content, g, x, y, width, height, textAttrs, colour) { const text = g .append('text') .attr('x', x + width / 2) .attr('y', y + height / 2 + 5) .style('font-color', colour) .style('text-anchor', 'middle') .text(content); _setTextAttrs(text, textAttrs); } /** * @param {any} content * @param {any} g * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} textAttrs * @param {any} conf * @param {any} colour */ function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) { const { taskFontSize, taskFontFamily } = conf; const lines = content.split(/<br\s*\/?>/gi); for (let i = 0; i < lines.length; i++) { const dy = i * taskFontSize - (taskFontSize * (lines.length - 1)) / 2; const text = g .append('text') .attr('x', x + width / 2) .attr('y', y) .attr('fill', colour) .style('text-anchor', 'middle') .style('font-size', taskFontSize) .style('font-family', taskFontFamily); text .append('tspan') .attr('x', x + width / 2) .attr('dy', dy) .text(lines[i]); text .attr('y', y + height / 2.0) .attr('dominant-baseline', 'central') .attr('alignment-baseline', 'central'); _setTextAttrs(text, textAttrs); } } /** * @param {any} content * @param {any} g * @param {any} x * @param {any} y * @param {any} width * @param {any} height * @param {any} textAttrs * @param {any} conf */ function byFo(content, g, x, y, width, height, textAttrs, conf) { const body = g.append('switch'); const f = body .append('foreignObject') .attr('x', x) .attr('y', y) .attr('width', width) .attr('height', height) .attr('position', 'fixed'); const text = f .append('xhtml:div') .style('display', 'table') .style('height', '100%') .style('width', '100%'); text .append('div') .attr('class', 'label') .style('display', 'table-cell') .style('text-align', 'center') .style('vertical-align', 'middle') .text(content); byTspan(content, body, x, y, width, height, textAttrs, conf); _setTextAttrs(text, textAttrs); } /** * @param {any} toText * @param {any} fromTextAttrsDict */ function _setTextAttrs(toText, fromTextAttrsDict) { for (const key in fromTextAttrsDict) { if (key in fromTextAttrsDict) { // noinspection JSUnfilteredForInLoop toText.attr(key, fromTextAttrsDict[key]); } } } return function (conf) { return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan; }; })(); const initGraphics = function (graphics) { graphics .append('defs') .append('marker') .attr('id', 'arrowhead') .attr('refX', 5) .attr('refY', 2) .attr('markerWidth', 6) .attr('markerHeight', 4) .attr('orient', 'auto') .append('path') .attr('d', 'M 0,0 V 4 L6,2 Z'); // this is actual shape for arrowhead }; export default { drawRect, drawCircle, drawSection, drawText, drawLabel, drawTask, drawBackgroundRect, getTextObj, getNoteRect, initGraphics, }; �������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs.mts��������������������������������������������0000664�0000000�0000000�00000023033�14332737457�0023327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* eslint-disable no-console */ /** * @file Transform documentation source files into files suitable for publishing and optionally copy * the transformed files from the source directory to the directory used for the final, published * documentation directory. The list of files transformed and copied to final documentation * directory are logged to the console. If a file in the source directory has the same contents in * the final directory, nothing is done (the final directory is up-to-date). * @example * docs * Run with no option flags * * @example * docs --verify * If the --verify option is used, it only _verifies_ that the final directory has been updated with the transformed files in the source directory. * No files will be copied to the final documentation directory, but the list of files to be changed is shown on the console. * If the final documentation directory does not have the transformed files from source directory * - a message to the console will show that this command should be run without the --verify flag so that the final directory is updated, and * - it will return a fail exit code (1) * * @example * docs --git * If the --git option is used, the command `git add docs` will be run after all transformations (and/or verifications) have completed successfully * If not files were transformed, the git command is not run. * * @todo Ensure that the documentation source and final paths are correct by using process.cwd() to * get their absolute paths. Ensures that the location of those 2 directories is not dependent on * where this file resides. * * @todo Write a test file for this. (Will need to be able to deal .mts file. Jest has trouble with * it.) */ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs'; import { exec } from 'child_process'; import { globby } from 'globby'; import { JSDOM } from 'jsdom'; import type { Code, Root } from 'mdast'; import { join, dirname } from 'path'; import prettier from 'prettier'; import { remark } from 'remark'; // @ts-ignore No typescript declaration file import flatmap from 'unist-util-flatmap'; const MERMAID_MAJOR_VERSION = ( JSON.parse(readFileSync('packages/mermaid/package.json', 'utf8')).version as string ).split('.')[0]; // These paths are from the root of the mono-repo, not from the // mermaid sub-directory const SOURCE_DOCS_DIR = 'packages/mermaid/src/docs'; const FINAL_DOCS_DIR = 'docs'; const AUTOGENERATED_TEXT = `# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. Please edit the corresponding file in ${SOURCE_DOCS_DIR}.`; const LOGMSG_TRANSFORMED = 'transformed'; const LOGMSG_TO_BE_TRANSFORMED = 'to be transformed'; const LOGMSG_COPIED = `, and copied to ${FINAL_DOCS_DIR}`; const WARN_DOCSDIR_DOESNT_MATCH = `Changed files were transformed in ${SOURCE_DOCS_DIR} but do not match the files in ${FINAL_DOCS_DIR}. Please run yarn docs:build after making changes to ${SOURCE_DOCS_DIR} to update the ${FINAL_DOCS_DIR} directory with the transformed files.`; const verifyOnly: boolean = process.argv.includes('--verify'); const git: boolean = process.argv.includes('--git'); // TODO: Read from .prettierrc? const prettierConfig: prettier.Config = { useTabs: false, tabWidth: 2, endOfLine: 'auto', printWidth: 100, singleQuote: true, }; let filesWereTransformed = false; /** * Given a source file name and path, return the documentation destination full path and file name * Create the destination path if it does not already exist. * * @param {string} file - Name of the file (including full path) * @returns {string} Name of the file with the path changed from the source directory to final * documentation directory * @todo Possible Improvement: combine with lint-staged to only copy files that have changed */ const changeToFinalDocDir = (file: string): string => { const newDir = file.replace(SOURCE_DOCS_DIR, FINAL_DOCS_DIR); mkdirSync(dirname(newDir), { recursive: true }); return newDir; }; /** * Log messages to the console showing if the transformed file copied to the final documentation * directory or still needs to be copied. * * @param {string} filename Name of the file that was transformed * @param {boolean} wasCopied Whether or not the file was copied */ const logWasOrShouldBeTransformed = (filename: string, wasCopied: boolean) => { const changeMsg = wasCopied ? LOGMSG_TRANSFORMED : LOGMSG_TO_BE_TRANSFORMED; let logMsg: string; logMsg = ` File ${changeMsg}: ${filename}`; if (wasCopied) { logMsg += LOGMSG_COPIED; } console.log(logMsg); }; /** * If the file contents were transformed, set the _filesWereTransformed_ flag to true and copy the * transformed contents to the final documentation directory if the doCopy flag is true. Log * messages to the console. * * @param {string} filename Name of the file that will be verified * @param {boolean} [doCopy=false] Whether we should copy that transformedContents to the final * documentation directory. Default is `false` * @param {string} [transformedContent] New contents for the file */ const copyTransformedContents = (filename: string, doCopy = false, transformedContent?: string) => { const fileInFinalDocDir = changeToFinalDocDir(filename); const existingBuffer = existsSync(fileInFinalDocDir) ? readFileSync(fileInFinalDocDir) : Buffer.from('#NEW FILE#'); const newBuffer = transformedContent ? Buffer.from(transformedContent) : readFileSync(filename); if (existingBuffer.equals(newBuffer)) { return; // Files are same, skip. } filesWereTransformed = true; if (doCopy) { writeFileSync(fileInFinalDocDir, newBuffer); } logWasOrShouldBeTransformed(fileInFinalDocDir, doCopy); }; const readSyncedUTF8file = (filename: string): string => { return readFileSync(filename, 'utf8'); }; /** * Transform a markdown file and write the transformed file to the directory for published * documentation * * 1. Add a `mermaid-example` block before every `mermaid` or `mmd` block On the docsify site (one * place where the documentation is published), this will show the code used for the mermaid * diagram * 2. Add the text that says the file is automatically generated * 3. Use prettier to format the file Verify that the file has been changed and write out the changes * * @param file {string} name of the file that will be verified */ const transformMarkdown = (file: string) => { const doc = readSyncedUTF8file(file).replace(/<MERMAID_VERSION>/g, MERMAID_MAJOR_VERSION); const ast: Root = remark.parse(doc); const out = flatmap(ast, (c: Code) => { if (c.type !== 'code') { return [c]; } if (c.lang === 'mermaid' || c.lang === 'mmd') { c.lang = 'mermaid-example'; } if (c.lang !== 'mermaid-example') { return [c]; } return [c, Object.assign({}, c, { lang: 'mermaid' })]; }); // Add the AUTOGENERATED_TEXT to the start of the file const transformed = `${AUTOGENERATED_TEXT}\n${remark.stringify(out)}`; const formatted = prettier.format(transformed, { parser: 'markdown', ...prettierConfig, }); copyTransformedContents(file, !verifyOnly, formatted); }; /** * Transform an HTML file and write the transformed file to the directory for published * documentation * * - Add the text that says the file is automatically generated Verify that the file has been changed * and write out the changes * * @param filename {string} name of the HTML file to transform */ const transformHtml = (filename: string) => { /** * Insert the '...auto generated...' comment into an HTML file after the<html> element * * @param fileName {string} file name that should have the comment inserted * @returns {string} The contents of the file with the comment inserted */ const insertAutoGeneratedComment = (fileName: string): string => { const fileContents = readSyncedUTF8file(fileName).replace( /<MERMAID_VERSION>/g, MERMAID_MAJOR_VERSION ); const jsdom = new JSDOM(fileContents); const htmlDoc = jsdom.window.document; const autoGeneratedComment = jsdom.window.document.createComment(AUTOGENERATED_TEXT); const rootElement = htmlDoc.documentElement; rootElement.prepend(autoGeneratedComment); return jsdom.serialize(); }; const transformedHTML = insertAutoGeneratedComment(filename); const formattedHTML = prettier.format(transformedHTML, { parser: 'html', ...prettierConfig, }); copyTransformedContents(filename, !verifyOnly, formattedHTML); }; /** Main method (entry point) */ (async () => { if (verifyOnly) { console.log('Verifying that all files are in sync with the source files'); } const sourceDirGlob = join('.', SOURCE_DOCS_DIR, '**'); const includeFilesStartingWithDot = true; console.log('Transforming markdown files...'); const mdFiles = await globby([join(sourceDirGlob, '*.md')], { dot: includeFilesStartingWithDot, }); mdFiles.forEach(transformMarkdown); console.log('Transforming html files...'); const htmlFiles = await globby([join(sourceDirGlob, '*.html')], { dot: includeFilesStartingWithDot, }); htmlFiles.forEach(transformHtml); console.log('Transforming all other files...'); const otherFiles = await globby([sourceDirGlob, '!**/*.md', '!**/*.html'], { dot: includeFilesStartingWithDot, }); otherFiles.forEach((file: string) => { copyTransformedContents(file, !verifyOnly); // no transformation }); if (filesWereTransformed) { if (verifyOnly) { console.log(WARN_DOCSDIR_DOESNT_MATCH); process.exit(1); } if (git) { console.log('Adding changes in ${FINAL_DOCS_DIR} folder to git'); exec('git add docs'); } } })(); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/�����������������������������������������������0000775�0000000�0000000�00000000000�14332737457�0022601�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/.nojekyll��������������������������������������0000664�0000000�0000000�00000000000�14332737457�0024417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/8.6.0_docs.md����������������������������������0000664�0000000�0000000�00000024027�14332737457�0024611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Version 8.6.0 Changes ## [New Mermaid Live-Editor Beta](https://mermaid-js.github.io/docs/mermaid-live-editor-beta/#/edit/eyJjb2RlIjoiJSV7aW5pdDoge1widGhlbWVcIjogXCJmb3Jlc3RcIiwgXCJsb2dMZXZlbFwiOiAxIH19JSVcbmdyYXBoIFREXG4gIEFbQ2hyaXN0bWFzXSAtLT58R2V0IG1vbmV5fCBCKEdvIHNob3BwaW5nKVxuICBCIC0tPiBDe0xldCBtZSB0aGlua31cbiAgQyAtLT58T25lfCBEW0xhcHRvcF1cbiAgQyAtLT58VHdvfCBFW2lQaG9uZV1cbiAgQyAtLT58VGhyZWV8IEZbZmE6ZmEtY2FyIENhcl1cblx0XHQiLCJtZXJtYWlkIjp7InRoZW1lIjoiZGFyayJ9fQ) ## [CDN](https://unpkg.com/mermaid/) With version 8.6.0 comes the release of directives for mermaid, a new system for modifying configurations, with the aim of establishing centralized, sane defaults and simple implementation. `directives` allow for a single-use overwriting of `config`, as it has been discussed in [Configurations](./Setup.md). This allows site Diagram Authors to instantiate temporary modifications to `config` through the use of [Directives](), which are parsed before rendering diagram definitions. This allows the Diagram Authors to alter the appearance of the diagrams. **A likely application for this is in the creation of diagrams/charts inside company/organizational webpages, that rely on mermaid for diagram and chart rendering.** the `init` directive is the main method of configuration for Site and Current Levels. The three levels of are Configuration, Global, Site and Current. | Level of Configuration | Description | | ---------------------- | ----------------------------------- | | Global Configuration | Default Mermaid Configurations | | Site Configuration | Configurations made by site owner | | Current Configuration | Configurations made by Implementors | # Limits to Modifying Configurations **secure Array** | Parameter | Description | Type | Required | Values | | --------- | ------------------------------------------------ | ----- | -------- | -------------- | | secure | Array of parameters excluded from init directive | Array | Required | Any parameters | The modifiable parts of the Configuration are limited by the secure array, which is an array of immutable parameters, this array can be expanded by site owners. **Notes**: secure arrays work like nesting dolls, with the Global Configurations’ secure array holding the default and immutable list of immutable parameters, or the smallest doll, to which site owners may add to, but implementors may not modify it. # Secure Arrays Site owners can add to the **secure** array using this command: mermaidAPI.initialize( { startOnLoad: true, secure: ['parameter1', 'parameter2'] } ); Default values for the `secure array` consists of: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize']. These default values are immutable. Implementors can only modify configurations using directives, and cannot change the `secure` array. # Modifying Configurations and directives: The Two types of directives: are `init` (or `initialize`) and `wrap`. ```note All directives are enclosed in `%%{ }%%` ``` Older versions of mermaid will not parse directives because `%%` will comment out the directive. This makes the update backwards-compatible. # Init `init`, or `initialize`: this directive gives the user the ability to overwrite and change the values for any configuration parameters not set in the secure array. | Parameter | Description | Type | Required | Values | | --------- | ----------------------- | --------- | -------- | ----------------------------------------------- | | init | modifies configurations | Directive | Optional | Any parameters not included in the secure array | ```note init would be an argument-directive: `%%{init: { **insert argument here**}}%%` The json object that is passed as {**argument** } must be valid, quoted json or it will be ignored. **for example**: `%%{init: {"theme": "default", "logLevel": 1 }}%%` Configurations that are passed through init cannot change the parameters in a secure array at a higher level. In the event of a collision, mermaid will give priority to secure arrays and parse the request without changing the values of those parameters in conflict. When deployed within code, init is called before the graph/diagram description. ``` **for example**: ```mmd %%{init: {"theme": "default", "logLevel": 1 }}%% graph LR a-->b b-->c c-->d d-->e e-->f f-->g g--> ``` # Wrap | Parameter | Description | Type | Required | Values | | --------- | ----------------------------- | --------- | -------- | ---------- | | wrap | a callable text-wrap function | Directive | Optional | %%{wrap}%% | ```note Wrap is a function that is currently only deployable for sequence diagrams. Wrap respects a manually added <br\>, so if the user wants to break up their text, they have full control over line breaks by adding <br\> tags. It is a non-argument directive and can be executed thusly: `%%{wrap}%%` . ``` **An example of text wrapping in a sequence diagram**: ![Image showing wrapped text](img/wrapped%20text.png) # Resetting Configurations: There are two more functions in the mermaidAPI that can be called by site owners: **reset** and **globalReset**. **reset**: resets the configuration to whatever the last configuration was. This can be done to undo more recent changes set from the last mermaidAPI.initialize({...}) configuration. **globalReset** will reset both the current configuration AND the site configuration back to the global defaults. **Notes**: Both `reset` and `globalReset` are only available to site owners, and as such implementors have to edit their configs using `init`. # Additional Utils to mermaid • **memoize**: simple caching for computationally expensive functions, reducing rendering time by about 90%. • **assignWithDepth** - an improvement on previous functions with config.js and `Object.assign`. The purpose of this function is to provide a sane mechanism for merging objects, similar to `object.assign`, but with depth. Example of **assignWithDepth**: ![Image showing assignWithDepth](img/assignWithDepth.png) Example of **object.Assign**: ![Image showing object.assign without depth](img/object.assign%20without%20depth.png) • **calculateTextDimensions**, **calculateTextWidth**, and **calculateTextHeight** - for measuring text dimensions, width and height. **Notes**: For more information on usage, parameters, and return info for these new functions take a look at the jsdocs for them in the utils package. # New API Requests Introduced in Version 8.6.0 ## setSiteConfig | Function | Description | Type | Values | Parameters | Returns | | --------------- | ------------------------------------- | ----------- | --------------------------------------- | ---------- | ---------- | | `setSiteConfig` | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | conf | siteConfig | ```note Sets the siteConfig. The siteConfig is a protected configuration for repeat use. Calls to reset() will reset the currentConfig to siteConfig. Calls to reset(configApi.defaultConfig) will reset siteConfig and currentConfig to the defaultConfig Note: currentConfig is set in this function。 Default value: will mirror Global Config ``` ## getSiteConfig | Function | Description | Type | Values | | --------------- | --------------------------------------------------- | ----------- | ---------------------------------- | | `getSiteConfig` | Returns the current `siteConfig` base configuration | Get Request | Returns Any Values in `siteConfig` | ```note Returns any values in siteConfig. ``` ## setConfig | Function | Description | Type | Values | Parameters | Returns | | ----------- | ------------------------------------------ | ----------- | --------------------------------- | ---------- | ---------------------------------------------- | | `setConfig` | Sets the `currentConfig` to desired values | Put Request | Any Values, those in secure array | conf | `currentConfig` merged with the sanitized conf | ```note Sets the currentConfig. The parameter conf is sanitized based on the siteConfig.secure keys. Any values found in conf with key found in siteConfig.secure will be replaced with the corresponding siteConfig value. ``` ## getConfig | Function | Description | Type | Return Values | | ----------- | --------------------------- | ----------- | ------------------------------- | | `getConfig` | Obtains the `currentConfig` | Get Request | Any Values from `currentConfig` | ```note Returns any values in currentConfig. ``` ## sanitize | Function | Description | Type | Values | | ---------- | ---------------------------------------- | -------------- | ------ | | `sanitize` | Sets the `siteConfig` to desired values. | Put Request(?) | None | ```note modifies options in-place Ensures options parameter does not attempt to override siteConfig secure keys. ``` ## reset | Function | Description | Type | Required | Values | Parameter | | -------- | ------------------------------ | ----------- | -------- | ------ | --------- | | `reset` | Resets `currentConfig` to conf | Put Request | Required | None | conf | ## conf | Parameter | Description | Type | Required | Values | | --------- | ------------------------------------------------------------ | ---------- | -------- | -------------------------------------------- | | `conf` | base set of values, which `currentConfig` could be reset to. | Dictionary | Required | Any Values, with respect to the secure Array | ```note default: current siteConfig (optional, default `getSiteConfig()`) ``` ## For more information, read [Setup](Setup.md). ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/CHANGELOG.md�����������������������������������0000664�0000000�0000000�00000207330�14332737457�0024417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Change Log All changes are in descending order, beginning with the newest (latest) version. ## Unreleased [Full Changelog](https://github.com/knsv/mermaid/compare/8.7.0...HEAD) ## 8.7.0 (2020-08-09) 🔖 [Release Notes](https://github.com/mermaid-js/mermaid/releases/tag/8.7.0) | 📜 [Full Changelog](https://github.com/mermaid-js/mermaid/compare/8.6.0...8.7.0) This version brings with it a system for [dynamic and integrated configuration of the diagram themes](./theming.md). The objective of this is to increase the customizability of mermaid and the ease of Styling, with the customization of themes through the `%%init%%` directive and `initialize` calls. Themes follow and build upon the Levels of Configuration and employ `directives` to modify and create custom configurations, as they were introduced in Version [8.6.0](../getting-started/8.6.0_docs.md). **These Theming Configurations, similar to directives, will also be made applicable in the Live-Editor, for easier styling.** ### Site-wide Themes Site-wide themes are still declared via `initialize` by site owners. Example of `Initalize` call setting `theme` to `base`: ```javascript mermaidAPI.initialize({ securityLevel: 'loose', theme: 'base', }); ``` **Notes**: Only site owners can use the `mermaidAPI.initialize` call, to set values. Site-Users will have to use `%%init%%` to modify or create the theme for their diagrams. ### Themes at the Local or Current Level When Generating a diagram using on a webpage that supports mermaid. It is also possible to override site-wide theme settings locally, for a specific diagram, using directives, as long as it is not prohibited by the `secure` array. **Following is an example:** ```mmd %%{init: {'theme':'base'}}%% graph TD a --> b ``` ### Making a Custom Theme with `themeVariables` The easiest way to make a custom theme is to start with the base theme, and just modify theme variables through `themeVariables`, via `%%init%%`. | Parameter | Description | Type | Required | Objects contained | | -------------- | ------------------------------------------------------------------ | ----- | -------- | ---------------------------------- | | themeVariables | Array containing objects, modifiable with the `%%init%%` directive | Array | Required | primaryColor, lineColor, textColor | Here is an example of overriding `primaryColor` and giving everything a different look, using `%%init%%`. ```mmd %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` **Notes:** Leaving it empty will set all variable values to default. ## 8.6.0 (2020-07-13) 🔖 [Release Notes](https://github.com/mermaid-js/mermaid/releases/tag/8.6.0) [Version 8.6.0](../getting-started/8.6.0_docs.md) introduces New Configuration Protocols and Directives and a Beta for the [New Mermaid Live-Editor](https://mermaid-js.github.io/docs/mermaid-live-editor-beta/#/edit/eyJjb2RlIjoiJSV7aW5pdDoge1widGhlbWVcIjogXCJmb3Jlc3RcIiwgXCJsb2dMZXZlbFwiOiAxIH19JSVcbmdyYXBoIFREXG4gIEFbQ2hyaXN0bWFzXSAtLT58R2V0IG1vbmV5fCBCKEdvIHNob3BwaW5nKVxuICBCIC0tPiBDe0xldCBtZSB0aGlua31cbiAgQyAtLT58T25lfCBEW0xhcHRvcF1cbiAgQyAtLT58VHdvfCBFW2lQaG9uZV1cbiAgQyAtLT58VGhyZWV8IEZbZmE6ZmEtY2FyIENhcl1cblx0XHQiLCJtZXJtYWlkIjp7InRoZW1lIjoiZGFyayJ9fQ) **With version 8.6.0 comes the release of directives for mermaid, a new system for modifying configurations, with the aim of establishing centralized, sane defaults and simple implementation.** Directives allow for a diagram specific overriding of config, as it has been discussed in Configurations. This allows site users to input modifications to config alongside diagram definitions, when creating diagrams on a private webpage that supports Mermaid. ## 8.5.0 (2020-04-11) 🔖 [Release Notes](https://github.com/mermaid-js/mermaid/releases/tag/untagged-31c93788afe260d914bb) This version introduces New diagrams! **New diagrams in 8.5** With version 8.5 there are some bug fixes and enhancements, plus a new diagram type, entity relationship diagrams. ![Image showing the new ER diagram type](./img/er.png) ## 8.2.0 (2019-07-17) 🏷️ [Tag](https://github.com/mermaid-js/mermaid/tree/8.2.0) Version 8.2.0, introduces a security improvement. A `securityLevel` configuration has to first be cleared, `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduced in version 8.2 as a security improvement, aimed at preventing malicious use. ### securityLevel | Parameter | Description | Type | Required | Values | | ------------- | --------------------------------- | ------ | -------- | ------------------------- | | securitylevel | Level of trust for parsed diagram | String | Required | Strict, Loose, antiscript | **Notes:** - **strict**: (**default**) tags in text are encoded, click functionality is disabled - **loose**: tags in text are allowed, click functionality is enabled - **antiscript**: html tags in text are allowed, (only script element is removed), click functionality is enabled ⚠️ **Note**: This changes the default behaviour of mermaid so that after upgrade to 8.2, if the `securityLevel` is not configured, tags in flowcharts are encoded as tags and clicking is prohibited. If you are taking responsibility for the diagram source security you can set the `securityLevel` to a value of your choosing. By doing this clicks and tags are again allowed. ### To change `securityLevel` with `mermaidAPI.initialize`: ```javascript mermaidAPI.initialize({ securityLevel: 'loose', }); ``` **Closed issues:** - please add tag for 8.0.0 release [\#863](https://github.com/knsv/mermaid/issues/863) - classDiagram breaks on any edit [\#858](https://github.com/knsv/mermaid/issues/858) ## [8.1.0](https://github.com/knsv/mermaid/tree/8.1.0) (2019-06-25) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.5...8.1.0) **Implemented enhancements:** - Theme for dark background [\#301](https://github.com/knsv/mermaid/issues/301) - \[Feature request\] gantt diagram axis format [\#269](https://github.com/knsv/mermaid/issues/269) - Implement render function for server side rendering using phantomjs [\#169](https://github.com/knsv/mermaid/issues/169) **Fixed bugs:** - mermaid -v filename.mmd gives You must specify at least one source file. [\#328](https://github.com/knsv/mermaid/issues/328) - Not Able to See Labels even htmlLabels:false added [\#268](https://github.com/knsv/mermaid/issues/268) **Closed issues:** - Gantt and sequence diagram do not render [\#853](https://github.com/knsv/mermaid/issues/853) - margins around flowchart are not balanced [\#852](https://github.com/knsv/mermaid/issues/852) - Smaller bundles [\#843](https://github.com/knsv/mermaid/issues/843) - unicode in labels [\#776](https://github.com/knsv/mermaid/issues/776) - Hard-changing drawing of arrows per edge type [\#775](https://github.com/knsv/mermaid/issues/775) - SequenceDiagram wrong [\#773](https://github.com/knsv/mermaid/issues/773) - Render mermaid on github pages with simple code [\#772](https://github.com/knsv/mermaid/issues/772) - FlowChart - large space between text and the image [\#754](https://github.com/knsv/mermaid/issues/754) - Class Diagram Issues when using Mermaid in Stackedit [\#748](https://github.com/knsv/mermaid/issues/748) - Multi-platform CI [\#744](https://github.com/knsv/mermaid/issues/744) - gantt: sections can't have a colon [\#742](https://github.com/knsv/mermaid/issues/742) - Yarn build does not add mermaid.min.css to dist [\#732](https://github.com/knsv/mermaid/issues/732) - Is there a grammar / keyword / more than just the basic examples? [\#718](https://github.com/knsv/mermaid/issues/718) - Click event and react component [\#717](https://github.com/knsv/mermaid/issues/717) - Long text going outside the box [\#706](https://github.com/knsv/mermaid/issues/706) - How to migrate from yUML to mermaid? [\#704](https://github.com/knsv/mermaid/issues/704) - Issue on Dynamic Creation in PHP [\#690](https://github.com/knsv/mermaid/issues/690) - `click "\#target"` and `click "http://url"` should create regular links [\#689](https://github.com/knsv/mermaid/issues/689) - Support Chinese punctuation [\#687](https://github.com/knsv/mermaid/issues/687) - \[Question\] Proper way to install on Mac? [\#681](https://github.com/knsv/mermaid/issues/681) - Has Mermaid a graphical interface to make diagrams? [\#668](https://github.com/knsv/mermaid/issues/668) - mermaid installation on debian [\#649](https://github.com/knsv/mermaid/issues/649) - "Cannot activate" in sequenceDiagram [\#647](https://github.com/knsv/mermaid/issues/647) - Link \("click" statement\) in flowchart does not work in exported SVG [\#646](https://github.com/knsv/mermaid/issues/646) - How to pass styling [\#639](https://github.com/knsv/mermaid/issues/639) - The live editor cant show seq diagram with notes for 8.0.0-alpha.3 [\#638](https://github.com/knsv/mermaid/issues/638) - import mermaid.css with ES6 + NPM [\#634](https://github.com/knsv/mermaid/issues/634) - Actor line cuts through other elements [\#633](https://github.com/knsv/mermaid/issues/633) - Graph TD line out of the picture \(left side\) [\#630](https://github.com/knsv/mermaid/issues/630) - Flowchart labels appear "cutoff" [\#628](https://github.com/knsv/mermaid/issues/628) - Uncaught TypeError: \_.constant is not a function \(mermaid.js\) [\#626](https://github.com/knsv/mermaid/issues/626) - Missing tags and releases for newer versions [\#623](https://github.com/knsv/mermaid/issues/623) - Mermaid and Leo / Leo Vue [\#622](https://github.com/knsv/mermaid/issues/622) - mermaidAPI gantt Vue.js [\#621](https://github.com/knsv/mermaid/issues/621) - Gantt sections are not separated by colors - Fix: set numberSectionStyles to 4 instead of 3 [\#620](https://github.com/knsv/mermaid/issues/620) - how to get mermaidAPI? [\#617](https://github.com/knsv/mermaid/issues/617) - Error in startOnLoad documentation? [\#616](https://github.com/knsv/mermaid/issues/616) - Example export to SVG generates error [\#614](https://github.com/knsv/mermaid/issues/614) - The new online editor does not support previously generated links [\#613](https://github.com/knsv/mermaid/issues/613) - Grammar / Syntax documentation for flowcharts [\#607](https://github.com/knsv/mermaid/issues/607) - Mermaid does not work with d3.js [\#606](https://github.com/knsv/mermaid/issues/606) - Why does this code's flowchart lines get cut-off on screen? [\#604](https://github.com/knsv/mermaid/issues/604) - click keyword does not fire my callback \(on the demo Website too\) [\#603](https://github.com/knsv/mermaid/issues/603) - Online Editor fails to show exported SVG [\#601](https://github.com/knsv/mermaid/issues/601) - Just saying thanks! [\#597](https://github.com/knsv/mermaid/issues/597) - stylesheet crashed with other library like abcjs [\#596](https://github.com/knsv/mermaid/issues/596) - Missing connection [\#594](https://github.com/knsv/mermaid/issues/594) - How to use mermaid on node.js restful api? [\#593](https://github.com/knsv/mermaid/issues/593) - Remove status code [\#589](https://github.com/knsv/mermaid/issues/589) - Golang based editor [\#588](https://github.com/knsv/mermaid/issues/588) - sequenceDiagram -\> notetext css font is hardcoded [\#587](https://github.com/knsv/mermaid/issues/587) - Multiple graph in the live editor [\#586](https://github.com/knsv/mermaid/issues/586) - All \<svg\> elements in page are colored black [\#584](https://github.com/knsv/mermaid/issues/584) - Styling: classes aren't applied to elements. [\#582](https://github.com/knsv/mermaid/issues/582) - Rounded connections [\#580](https://github.com/knsv/mermaid/issues/580) - Arrows are not being shown correctly in the dark theme [\#578](https://github.com/knsv/mermaid/issues/578) - The documentation for CLI seems outdated. [\#572](https://github.com/knsv/mermaid/issues/572) - No effect of click event:can not open link [\#571](https://github.com/knsv/mermaid/issues/571) - Text colors are not correct in VSCODE [\#570](https://github.com/knsv/mermaid/issues/570) - Nodes aren't aligned properly \(just need an explanation\) [\#568](https://github.com/knsv/mermaid/issues/568) - setting margin around figure in R [\#567](https://github.com/knsv/mermaid/issues/567) - Arrows should Come out in upward and Downward direction from decision Node [\#566](https://github.com/knsv/mermaid/issues/566) - TypeError: Cannot read property 'select' of undefined [\#563](https://github.com/knsv/mermaid/issues/563) - A little bug [\#557](https://github.com/knsv/mermaid/issues/557) - Japanese text appears garbled [\#554](https://github.com/knsv/mermaid/issues/554) - classdiagram not works in mermaid live_editor [\#553](https://github.com/knsv/mermaid/issues/553) - font awesome in link text? [\#546](https://github.com/knsv/mermaid/issues/546) - q: heard of the cosmogol standard? [\#545](https://github.com/knsv/mermaid/issues/545) - Arrow heads missing \(cli, 7.0.3\) [\#544](https://github.com/knsv/mermaid/issues/544) - No Edge Boxes if useHtmlLabels=false [\#541](https://github.com/knsv/mermaid/issues/541) - how to change mermaid text color or line text block color? [\#534](https://github.com/knsv/mermaid/issues/534) - FlowChart visualization broken when downloading from live editor [\#533](https://github.com/knsv/mermaid/issues/533) - Can't get flowchart to render paths at the top of the diagram; I even tried the online editor and that shows the same issue. Thoughts? [\#532](https://github.com/knsv/mermaid/issues/532) - live editor make browser\(safari on macOS&iOS\) not longer respond [\#531](https://github.com/knsv/mermaid/issues/531) - css classes need a prefix/namespace [\#527](https://github.com/knsv/mermaid/issues/527) - input activate/deactivate cause safari unresponding [\#521](https://github.com/knsv/mermaid/issues/521) - Cannot Render the Mermaid Graph to PDF ? [\#520](https://github.com/knsv/mermaid/issues/520) - clicking links works from inset in subgraph but not from nodes [\#516](https://github.com/knsv/mermaid/issues/516) - Strange syntax error - when importing mermaid.js [\#515](https://github.com/knsv/mermaid/issues/515) - gantt x-axis display [\#510](https://github.com/knsv/mermaid/issues/510) - phantomjs renamed to phantomjs-prebuilt [\#508](https://github.com/knsv/mermaid/issues/508) - issue when using sphinxcontrib-mermaid extension for sphinx [\#507](https://github.com/knsv/mermaid/issues/507) - layout of docs page looks broken [\#504](https://github.com/knsv/mermaid/issues/504) - Problem showing graph with php on localhost [\#502](https://github.com/knsv/mermaid/issues/502) - logLevel's option doesn't work at 7.0.0 [\#501](https://github.com/knsv/mermaid/issues/501) - How do I get the log for a render or parse attempt? [\#500](https://github.com/knsv/mermaid/issues/500) - Mermaid neutral style style to built in latest release [\#499](https://github.com/knsv/mermaid/issues/499) - Any plans for adding a typescript definition file? [\#495](https://github.com/knsv/mermaid/issues/495) - Gantt diagrams too narrow [\#493](https://github.com/knsv/mermaid/issues/493) - Flowchart edge labels placement [\#490](https://github.com/knsv/mermaid/issues/490) - Very different styles when rendering as png vs. svg [\#489](https://github.com/knsv/mermaid/issues/489) - New editor that supports mermaid: Caret [\#488](https://github.com/knsv/mermaid/issues/488) - Gant PNG margin [\#486](https://github.com/knsv/mermaid/issues/486) - ReferenceError: window is not defined [\#485](https://github.com/knsv/mermaid/issues/485) - Menu and layout bugs in docs [\#484](https://github.com/knsv/mermaid/issues/484) - Mermaid resets some of the page CSS styles [\#482](https://github.com/knsv/mermaid/issues/482) - Arrows rendering incorrectly in online editor [\#480](https://github.com/knsv/mermaid/issues/480) - CSS stroke-dasharray ignored by browsers but not other viewers [\#474](https://github.com/knsv/mermaid/issues/474) - mermaid - Browser Support issue [\#472](https://github.com/knsv/mermaid/issues/472) - Totally love mermaid I might pop! [\#471](https://github.com/knsv/mermaid/issues/471) - Sequence Diagram: Missing x on async arrows \(png\) [\#469](https://github.com/knsv/mermaid/issues/469) - live editor: the svg file rendered from graph is not supported by browsers [\#468](https://github.com/knsv/mermaid/issues/468) - Not found css [\#462](https://github.com/knsv/mermaid/issues/462) - Phantomjs Dependency [\#461](https://github.com/knsv/mermaid/issues/461) - Mermaid cli not working for subgraphs [\#459](https://github.com/knsv/mermaid/issues/459) - Support for notes across multiple participants? [\#458](https://github.com/knsv/mermaid/issues/458) - Related to Issue \#329: Phantomjs issues. [\#455](https://github.com/knsv/mermaid/issues/455) - Add a click style [\#426](https://github.com/knsv/mermaid/issues/426) - Add Parallel block \(par\) to sequence diagrams [\#425](https://github.com/knsv/mermaid/issues/425) - updating shapes after the flow chart rendering complete [\#424](https://github.com/knsv/mermaid/issues/424) - can't catch parse error Maximum call stack size exceeded on safari [\#421](https://github.com/knsv/mermaid/issues/421) - Arrows endings are missing [\#419](https://github.com/knsv/mermaid/issues/419) - shouldn't mermaid become more like Markdown ? [\#417](https://github.com/knsv/mermaid/issues/417) - Live editor show rendered diagram if syntax invalid [\#415](https://github.com/knsv/mermaid/issues/415) - Linkstyle stroke does not work [\#410](https://github.com/knsv/mermaid/issues/410) - flowchart id's with dots in them .. break links [\#408](https://github.com/knsv/mermaid/issues/408) - Flowchart: Link text beginning with lowercase 'o' causes flowchart to break [\#407](https://github.com/knsv/mermaid/issues/407) - Some Chinese character will case Safari no responding. [\#405](https://github.com/knsv/mermaid/issues/405) - Cannot center-justify text in nodes? [\#397](https://github.com/knsv/mermaid/issues/397) - Edge labels should have white background in live editor [\#396](https://github.com/knsv/mermaid/issues/396) - Live editor does not support activate/deactivate [\#394](https://github.com/knsv/mermaid/issues/394) - Styling subgraph? [\#391](https://github.com/knsv/mermaid/issues/391) - Update live editor to version 6.0.0 [\#387](https://github.com/knsv/mermaid/issues/387) - sequence diagram config issue [\#385](https://github.com/knsv/mermaid/issues/385) - How to add newline in the text [\#384](https://github.com/knsv/mermaid/issues/384) - PhantomJS crashes on a large graph [\#380](https://github.com/knsv/mermaid/issues/380) - Finnish support for class diagrams using plantuml syntax [\#377](https://github.com/knsv/mermaid/issues/377) - mermaidAPI.render generated different svg code from mermaid.int\(\) [\#374](https://github.com/knsv/mermaid/issues/374) - Put your own action on the chart [\#372](https://github.com/knsv/mermaid/issues/372) - when declaring participants the elements are generated twice [\#370](https://github.com/knsv/mermaid/issues/370) - Example Flowchart is cut in display \(Chrome\). [\#368](https://github.com/knsv/mermaid/issues/368) - Add shebang support to diagrams [\#365](https://github.com/knsv/mermaid/issues/365) - Silencing CLI output [\#352](https://github.com/knsv/mermaid/issues/352) - SequenceDiagram: 3+ Alternative Paths [\#348](https://github.com/knsv/mermaid/issues/348) - Smaller height of actor boxes [\#342](https://github.com/knsv/mermaid/issues/342) - Question: lib/phantomscript.js - foreignObjects in SVG - related to \#58 [\#340](https://github.com/knsv/mermaid/issues/340) - npm test fails on osx being blocked at Can not load "PhantomJS", it is not registered! [\#337](https://github.com/knsv/mermaid/issues/337) - Tabs & subgraphs cause rendering error [\#336](https://github.com/knsv/mermaid/issues/336) - Display question: right angles [\#335](https://github.com/knsv/mermaid/issues/335) - No Arrows rendered v0.5.8 [\#330](https://github.com/knsv/mermaid/issues/330) - You had errors in your syntax. Use --help for further information. [\#327](https://github.com/knsv/mermaid/issues/327) - Allow alternate arrow syntax that doesn't close html comments [\#322](https://github.com/knsv/mermaid/issues/322) - Comment in subgraph [\#319](https://github.com/knsv/mermaid/issues/319) - Update graph [\#311](https://github.com/knsv/mermaid/issues/311) - css conflicts with boostrap's css [\#308](https://github.com/knsv/mermaid/issues/308) - Can not get click event to fire. [\#306](https://github.com/knsv/mermaid/issues/306) - Fix phantomjs2 compatibility [\#304](https://github.com/knsv/mermaid/issues/304) - Flowcharts do not work in native IE11 [\#303](https://github.com/knsv/mermaid/issues/303) - Integration with remark.js - tutorial added [\#302](https://github.com/knsv/mermaid/issues/302) - Sequence diagram Loops: changing boxMargin spoils the "loop" notation [\#299](https://github.com/knsv/mermaid/issues/299) - src/mermaid.js generates bad code [\#297](https://github.com/knsv/mermaid/issues/297) - Fresh fork: jasmine tests fail [\#294](https://github.com/knsv/mermaid/issues/294) - CSS clash [\#292](https://github.com/knsv/mermaid/issues/292) - Mermaid does not work in Chrome 48 [\#281](https://github.com/knsv/mermaid/issues/281) - circle and ellipse cannot change color by classDef [\#271](https://github.com/knsv/mermaid/issues/271) - npm run watch doesn't work due missing dependencies [\#266](https://github.com/knsv/mermaid/issues/266) - label out of node [\#262](https://github.com/knsv/mermaid/issues/262) - IE11 Support issue [\#261](https://github.com/knsv/mermaid/issues/261) - mermaid without browser [\#260](https://github.com/knsv/mermaid/issues/260) - Insufficient capacity of gantt diagrams [\#226](https://github.com/knsv/mermaid/issues/226) - some WARN about installation [\#222](https://github.com/knsv/mermaid/issues/222) - Live editor offline access [\#217](https://github.com/knsv/mermaid/issues/217) - suggest: code highlight mode config for editors [\#212](https://github.com/knsv/mermaid/issues/212) - Uncaught RangeError: Maximum call stack size exceeded [\#189](https://github.com/knsv/mermaid/issues/189) - Styling label texts [\#50](https://github.com/knsv/mermaid/issues/50) **Merged pull requests:** - Remove console.log in classDB. [\#861](https://github.com/knsv/mermaid/pull/861) ([Arthaey](https://github.com/Arthaey)) - Bump sshpk from 1.13.1 to 1.16.1 [\#851](https://github.com/knsv/mermaid/pull/851) ([dependabot[bot]](https://github.com/apps/dependabot)) - Significantly smaller bundles [\#850](https://github.com/knsv/mermaid/pull/850) ([fabiospampinato](https://github.com/fabiospampinato)) - Support styling of subgraphs [\#845](https://github.com/knsv/mermaid/pull/845) ([Qix-](https://github.com/Qix-)) - fix dark theme loop labels not visible [\#837](https://github.com/knsv/mermaid/pull/837) ([jnnnnn](https://github.com/jnnnnn)) - fix draw function can only call once [\#832](https://github.com/knsv/mermaid/pull/832) ([vaniship](https://github.com/vaniship)) - Fix dotted lines not appearing in flowcharts when HTML labels disabled [\#828](https://github.com/knsv/mermaid/pull/828) ([stanhu](https://github.com/stanhu)) - Fix issue with XML line breaks inside vertex labels [\#824](https://github.com/knsv/mermaid/pull/824) ([jsyang](https://github.com/jsyang)) - fixed diagrams [\#810](https://github.com/knsv/mermaid/pull/810) ([0xflotus](https://github.com/0xflotus)) - Clickable gantt tasks [\#804](https://github.com/knsv/mermaid/pull/804) ([abzicht](https://github.com/abzicht)) - linkStyle now supports list of indexes with a few tests [\#798](https://github.com/knsv/mermaid/pull/798) ([ivan-danilov](https://github.com/ivan-danilov)) - fix class diagram mermaid [\#795](https://github.com/knsv/mermaid/pull/795) ([DanShai](https://github.com/DanShai)) - Added exclude weekdays to definition [\#792](https://github.com/knsv/mermaid/pull/792) ([jopapo](https://github.com/jopapo)) - SVG link rendering [\#791](https://github.com/knsv/mermaid/pull/791) ([flying-sheep](https://github.com/flying-sheep)) - Gantt milestones [\#788](https://github.com/knsv/mermaid/pull/788) ([gijswijs](https://github.com/gijswijs)) - Remove duplicate code [\#768](https://github.com/knsv/mermaid/pull/768) ([znxkznxk1030](https://github.com/znxkznxk1030)) - Render nodes as real links [\#765](https://github.com/knsv/mermaid/pull/765) ([flying-sheep](https://github.com/flying-sheep)) - Fix issue with marker-end. [\#757](https://github.com/knsv/mermaid/pull/757) ([gjlubbertsen](https://github.com/gjlubbertsen)) - Make Class Diagrams usable in Stackedit and Live Editor [\#749](https://github.com/knsv/mermaid/pull/749) ([monsterkrampe](https://github.com/monsterkrampe)) - Adding trapezoid and inverse trapezoid vertex options. [\#741](https://github.com/knsv/mermaid/pull/741) ([adamwulf](https://github.com/adamwulf)) - Add option for right angles [\#721](https://github.com/knsv/mermaid/pull/721) ([paulbland](https://github.com/paulbland)) - Add nested activation classes [\#720](https://github.com/knsv/mermaid/pull/720) ([paulbland](https://github.com/paulbland)) - wip: class diagram cardinality display [\#705](https://github.com/knsv/mermaid/pull/705) ([Vrixyz](https://github.com/Vrixyz)) - add comments about CSS in config [\#688](https://github.com/knsv/mermaid/pull/688) ([imma90](https://github.com/imma90)) - SequenceDiagram: Add support for multiple alt else statements [\#641](https://github.com/knsv/mermaid/pull/641) ([sechel](https://github.com/sechel)) - fix \#426 - add class .clickable on nodes with click function or link [\#598](https://github.com/knsv/mermaid/pull/598) ([thomasleveil](https://github.com/thomasleveil)) - Spec fix 1 [\#595](https://github.com/knsv/mermaid/pull/595) ([frankschmitt](https://github.com/frankschmitt)) ## [7.0.5](https://github.com/knsv/mermaid/tree/7.0.5) (2017-09-01) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.3...7.0.5) **Closed issues:** - live editor latin error after update [\#560](https://github.com/knsv/mermaid/issues/560) - Simple full example in online documentation is broken [\#558](https://github.com/knsv/mermaid/issues/558) - Graph No Arrow Head v7.0.3 [\#543](https://github.com/knsv/mermaid/issues/543) - Conflict while using mermaid along with core-js [\#512](https://github.com/knsv/mermaid/issues/512) - Export to pdf on website [\#496](https://github.com/knsv/mermaid/issues/496) - New downstream project: Mermaid Preview for VSCode [\#442](https://github.com/knsv/mermaid/issues/442) - Can't Zoom the flowchart ? [\#399](https://github.com/knsv/mermaid/issues/399) - line labels are not rendered correctly in live editor [\#366](https://github.com/knsv/mermaid/issues/366) - mermaid-loader [\#361](https://github.com/knsv/mermaid/issues/361) - Are there any documentation or examples for classDiagram and gitGraph? [\#359](https://github.com/knsv/mermaid/issues/359) - \# character broken in 0.5.8 [\#347](https://github.com/knsv/mermaid/issues/347) - Documentation issue: CSS example is not visible [\#345](https://github.com/knsv/mermaid/issues/345) - Include documentation for command line usage [\#326](https://github.com/knsv/mermaid/issues/326) - Fresh fork: can't build dist [\#296](https://github.com/knsv/mermaid/issues/296) - Invalid value for \<svg\> attribute viewBox="0 0 -Infinity -Infinity" [\#291](https://github.com/knsv/mermaid/issues/291) - Webpack require fails [\#277](https://github.com/knsv/mermaid/issues/277) - New documentation - need improved logo [\#216](https://github.com/knsv/mermaid/issues/216) ## [7.0.3](https://github.com/knsv/mermaid/tree/7.0.3) (2017-06-04) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.2...7.0.3) **Closed issues:** - the documentation website is down [\#539](https://github.com/knsv/mermaid/issues/539) - Good example of interactivity with mermaidAPI [\#514](https://github.com/knsv/mermaid/issues/514) ## [7.0.2](https://github.com/knsv/mermaid/tree/7.0.2) (2017-06-01) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.0...7.0.2) **Closed issues:** - CDN is not working [\#511](https://github.com/knsv/mermaid/issues/511) - A sampe sequenceDiagram crashes mermaid-cli [\#492](https://github.com/knsv/mermaid/issues/492) - Mermaid doesn't delete nodes when called multiple times [\#491](https://github.com/knsv/mermaid/issues/491) - API crashes on 2nd render\(\) call [\#478](https://github.com/knsv/mermaid/issues/478) - sequenceDiagram: dotted line for alt and empty bracket should be hidden [\#456](https://github.com/knsv/mermaid/issues/456) - SVG output \(almost\) not correct [\#434](https://github.com/knsv/mermaid/issues/434) - How to set axisFormatter of gantt in mermaid CLI? [\#428](https://github.com/knsv/mermaid/issues/428) - customizing link style with any color sets `fill` property to `black` instead of `none` [\#416](https://github.com/knsv/mermaid/issues/416) - New line at the end of SVG file [\#400](https://github.com/knsv/mermaid/issues/400) - CLI doesn't work [\#389](https://github.com/knsv/mermaid/issues/389) - Can't render subgraphs with htmlLabels: false [\#367](https://github.com/knsv/mermaid/issues/367) - Color arrowhead [\#362](https://github.com/knsv/mermaid/issues/362) - CLI: Invisible text, lines in SVG output [\#341](https://github.com/knsv/mermaid/issues/341) **Merged pull requests:** - Support Multi-line Actor Descriptions [\#764](https://github.com/knsv/mermaid/pull/764) ([watsoncj](https://github.com/watsoncj)) - Update Travis config [\#538](https://github.com/knsv/mermaid/pull/538) ([tylerlong](https://github.com/tylerlong)) - Fix spelling of 'you' in sequenceDiagram docs [\#537](https://github.com/knsv/mermaid/pull/537) ([ctruelson](https://github.com/ctruelson)) - Improve CLI output [\#536](https://github.com/knsv/mermaid/pull/536) ([gibson042](https://github.com/gibson042)) - Modernize mermaid [\#524](https://github.com/knsv/mermaid/pull/524) ([tylerlong](https://github.com/tylerlong)) - Modernize mermaid [\#519](https://github.com/knsv/mermaid/pull/519) ([tylerlong](https://github.com/tylerlong)) - Update CLI instructions [\#509](https://github.com/knsv/mermaid/pull/509) ([filipedeschamps](https://github.com/filipedeschamps)) - Add style for classDiagram to dark/default theme [\#503](https://github.com/knsv/mermaid/pull/503) ([yudenzel](https://github.com/yudenzel)) - Fix documentation for git graph. [\#498](https://github.com/knsv/mermaid/pull/498) ([gomlgs](https://github.com/gomlgs)) - Fix links in documentations [\#497](https://github.com/knsv/mermaid/pull/497) ([saveman71](https://github.com/saveman71)) - Update README.md with git graph sample [\#481](https://github.com/knsv/mermaid/pull/481) ([raghur](https://github.com/raghur)) - Fix misspelling of “another” [\#479](https://github.com/knsv/mermaid/pull/479) ([stevenschobert](https://github.com/stevenschobert)) - Fixed \#456 sequenceDiagram: dotted line for alt and empty bracket sho… [\#477](https://github.com/knsv/mermaid/pull/477) ([brookhong](https://github.com/brookhong)) - Add viewbox attr to class diagram [\#473](https://github.com/knsv/mermaid/pull/473) ([gnkm](https://github.com/gnkm)) - add par statement to sequenceDiagram [\#470](https://github.com/knsv/mermaid/pull/470) ([u-minor](https://github.com/u-minor)) ## [7.0.0](https://github.com/knsv/mermaid/tree/7.0.0) (2017-01-29) [Full Changelog](https://github.com/knsv/mermaid/compare/6.0.0...7.0.0) **Implemented enhancements:** - npm install -g mermaid does not install phantomjs [\#329](https://github.com/knsv/mermaid/issues/329) - activation boxes [\#313](https://github.com/knsv/mermaid/issues/313) **Closed issues:** - demos on io site not working [\#466](https://github.com/knsv/mermaid/issues/466) - Can not be generated PNG pictures through CLI with Chinese [\#451](https://github.com/knsv/mermaid/issues/451) - Round nodes cannot be styled with CSS classes [\#443](https://github.com/knsv/mermaid/issues/443) - webpack gulp UglifyJsPlugin error. [\#440](https://github.com/knsv/mermaid/issues/440) - String concatenation isn't working [\#432](https://github.com/knsv/mermaid/issues/432) - text flow/wrap in actor box of sequence diagram [\#422](https://github.com/knsv/mermaid/issues/422) - Online live editor still use old version [\#402](https://github.com/knsv/mermaid/issues/402) - uncaught TypeError: t.getTransformToElement is not a function [\#401](https://github.com/knsv/mermaid/issues/401) - Only works when using browserify'd code [\#373](https://github.com/knsv/mermaid/issues/373) - document the use of shebang line in mmd files [\#364](https://github.com/knsv/mermaid/issues/364) - Diagrams are small and unreadable in IE 11 - since 0.5.1 [\#356](https://github.com/knsv/mermaid/issues/356) - \[Feature Request\] ER-Diagram Support [\#354](https://github.com/knsv/mermaid/issues/354) - The need for mermaid.css should be mentioned explicitly in the intro docs... [\#273](https://github.com/knsv/mermaid/issues/273) **Merged pull requests:** - Update index.html [\#465](https://github.com/knsv/mermaid/pull/465) ([bmsleight](https://github.com/bmsleight)) - Fix for \#416, customizing link style with any color sets `fill` property to `black` instead of `none` [\#452](https://github.com/knsv/mermaid/pull/452) ([joshuacolvin](https://github.com/joshuacolvin)) - Allow .node\>circle to receive css styles [\#449](https://github.com/knsv/mermaid/pull/449) ([bfriedz](https://github.com/bfriedz)) - Fix spelling [\#447](https://github.com/knsv/mermaid/pull/447) ([jawn](https://github.com/jawn)) - added tests and fix cli css style selector lowercase problem [\#445](https://github.com/knsv/mermaid/pull/445) ([whyzdev](https://github.com/whyzdev)) - Update d3.js [\#441](https://github.com/knsv/mermaid/pull/441) ([hetz](https://github.com/hetz)) - added tests to reproduce \#434 in flowchart [\#439](https://github.com/knsv/mermaid/pull/439) ([whyzdev](https://github.com/whyzdev)) - Code Climate config [\#437](https://github.com/knsv/mermaid/pull/437) ([larkinscott](https://github.com/larkinscott)) - fix gantt and sequence digram cli cfg [\#435](https://github.com/knsv/mermaid/pull/435) ([whyzdev](https://github.com/whyzdev)) - fix gantt chart cli configuration broken [\#433](https://github.com/knsv/mermaid/pull/433) ([whyzdev](https://github.com/whyzdev)) - fix gantt chart cli configuration parsing including functions [\#430](https://github.com/knsv/mermaid/pull/430) ([whyzdev](https://github.com/whyzdev)) - Uses an empty text node instead of a string for svg group labels [\#429](https://github.com/knsv/mermaid/pull/429) ([daveaglick](https://github.com/daveaglick)) - use tspan via d3.textwrap to place actor text in sequence diagram [\#427](https://github.com/knsv/mermaid/pull/427) ([whyzdev](https://github.com/whyzdev)) - \#422 use foreignObject/div to place actor label in sequence diagram [\#423](https://github.com/knsv/mermaid/pull/423) ([whyzdev](https://github.com/whyzdev)) - Clarify the need for a CSS stylesheet [\#413](https://github.com/knsv/mermaid/pull/413) ([sifb](https://github.com/sifb)) - Added hads downstream project [\#412](https://github.com/knsv/mermaid/pull/412) ([sinedied](https://github.com/sinedied)) - update usage and fix \#273 [\#406](https://github.com/knsv/mermaid/pull/406) ([jinntrance](https://github.com/jinntrance)) - Add https://github.com/raghur/mermaid-filter to downstream projects docs page [\#404](https://github.com/knsv/mermaid/pull/404) ([raghur](https://github.com/raghur)) - New neutral theme [\#395](https://github.com/knsv/mermaid/pull/395) ([sinedied](https://github.com/sinedied)) - fix cli issues [\#390](https://github.com/knsv/mermaid/pull/390) ([ben-page](https://github.com/ben-page)) - Add missing space for 'Labels out of bounds' section [\#386](https://github.com/knsv/mermaid/pull/386) ([The-Alchemist](https://github.com/The-Alchemist)) - Fix typo: `pats` -\> `paths` [\#382](https://github.com/knsv/mermaid/pull/382) ([swhgoon](https://github.com/swhgoon)) - Added class diagram example to README.md [\#379](https://github.com/knsv/mermaid/pull/379) ([HustLion](https://github.com/HustLion)) - override normal flowchart arrowhead to allow css styling [\#376](https://github.com/knsv/mermaid/pull/376) ([dodoinblue](https://github.com/dodoinblue)) - added sphinx extension [\#371](https://github.com/knsv/mermaid/pull/371) ([mgaitan](https://github.com/mgaitan)) - Fix typo in the sequence diagram documentation [\#369](https://github.com/knsv/mermaid/pull/369) ([ggpasqualino](https://github.com/ggpasqualino)) ## [6.0.0](https://github.com/knsv/mermaid/tree/6.0.0) (2016-05-29) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.8...6.0.0) **Closed issues:** - Docs css: code hard to read [\#324](https://github.com/knsv/mermaid/issues/324) - About Markpad integration [\#323](https://github.com/knsv/mermaid/issues/323) - How to link backwards in flowchart? [\#321](https://github.com/knsv/mermaid/issues/321) - Help with editor [\#310](https://github.com/knsv/mermaid/issues/310) - +1 [\#293](https://github.com/knsv/mermaid/issues/293) - Basic chart does not render on Chome, but does in Firefox [\#290](https://github.com/knsv/mermaid/issues/290) - Live editor is broken [\#285](https://github.com/knsv/mermaid/issues/285) - "No such file or directory" trying to run mermaid 0.5.7 on OS X [\#284](https://github.com/knsv/mermaid/issues/284) - participant name as "Long Long Name" [\#283](https://github.com/knsv/mermaid/issues/283) - Windows - cli - could not find phantomjs at the specified path [\#236](https://github.com/knsv/mermaid/issues/236) **Merged pull requests:** - The option of gantt for the spaces for the section names. [\#353](https://github.com/knsv/mermaid/pull/353) ([zeroyonichihachi](https://github.com/zeroyonichihachi)) - Gitgraph: Make reset work with parent ref carets [\#350](https://github.com/knsv/mermaid/pull/350) ([raghur](https://github.com/raghur)) - Remove the text-shadows that make the text look blurry [\#349](https://github.com/knsv/mermaid/pull/349) ([AsaAyers](https://github.com/AsaAyers)) - add line interpolation to linkStyle in flowchart [\#346](https://github.com/knsv/mermaid/pull/346) ([AlanHohn](https://github.com/AlanHohn)) - Support git graph diagrams in mermaid [\#344](https://github.com/knsv/mermaid/pull/344) ([raghur](https://github.com/raghur)) - Build and test execution changes [\#338](https://github.com/knsv/mermaid/pull/338) ([ssbarnea](https://github.com/ssbarnea)) - Reformatting of css files [\#331](https://github.com/knsv/mermaid/pull/331) ([Jmuccigr](https://github.com/Jmuccigr)) - \(WIP\) Sequence Diagram Title Support [\#320](https://github.com/knsv/mermaid/pull/320) ([bronsoja](https://github.com/bronsoja)) - activations doc + few fixes [\#318](https://github.com/knsv/mermaid/pull/318) ([ciekawy](https://github.com/ciekawy)) - Dark theme for better contrast on darker backgrounds [\#317](https://github.com/knsv/mermaid/pull/317) ([crodriguez1a](https://github.com/crodriguez1a)) - Activations [\#316](https://github.com/knsv/mermaid/pull/316) ([ciekawy](https://github.com/ciekawy)) - Support leading comments for sequenceDiagrams [\#312](https://github.com/knsv/mermaid/pull/312) ([ashsearle](https://github.com/ashsearle)) - Show a little lenience for white-space around names [\#309](https://github.com/knsv/mermaid/pull/309) ([ashsearle](https://github.com/ashsearle)) - Update list of downstream projects [\#307](https://github.com/knsv/mermaid/pull/307) ([maxArturo](https://github.com/maxArturo)) - Issue 299: Sequence diagram Loops: changing boxMargin spoils the "loop" notation [\#300](https://github.com/knsv/mermaid/pull/300) ([LarryKlugerDS](https://github.com/LarryKlugerDS)) - Issue 297 - src/mermaid.js generates bad code [\#298](https://github.com/knsv/mermaid/pull/298) ([LarryKlugerDS](https://github.com/LarryKlugerDS)) - Updated instructions for running tests [\#295](https://github.com/knsv/mermaid/pull/295) ([LarryKlugerDS](https://github.com/LarryKlugerDS)) - Add Markdown Plus to Downstream projects [\#288](https://github.com/knsv/mermaid/pull/288) ([tylerlong](https://github.com/tylerlong)) - Quote phantomPath so that it doesn't fail on window [\#286](https://github.com/knsv/mermaid/pull/286) ([raghur](https://github.com/raghur)) ## [0.5.8](https://github.com/knsv/mermaid/tree/0.5.8) (2016-01-27) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.7...0.5.8) ## [0.5.7](https://github.com/knsv/mermaid/tree/0.5.7) (2016-01-25) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.6...0.5.7) **Closed issues:** - Mermaid + LightPaper = ❤️ [\#280](https://github.com/knsv/mermaid/issues/280) - Bower Integration [\#278](https://github.com/knsv/mermaid/issues/278) - Mermaid breaks when variables end in 'v' [\#276](https://github.com/knsv/mermaid/issues/276) - sequence diagrams don't support participant aliasing [\#263](https://github.com/knsv/mermaid/issues/263) - One diagram that fails to render stops further execution on the page [\#259](https://github.com/knsv/mermaid/issues/259) - Where to find line layout algorithm? [\#258](https://github.com/knsv/mermaid/issues/258) - Compatibility with node.js [\#257](https://github.com/knsv/mermaid/issues/257) - Label resizing with dynamically loaded fonts [\#255](https://github.com/knsv/mermaid/issues/255) - SVG arrowheads are broken in the CLI [\#249](https://github.com/knsv/mermaid/issues/249) - Cannot read property 'replace' of undefined [\#239](https://github.com/knsv/mermaid/issues/239) **Merged pull requests:** - gh-50 Allow styling of edge labels in css [\#267](https://github.com/knsv/mermaid/pull/267) ([Anoia](https://github.com/Anoia)) - Allow sequenceDiagram participant aliasing [\#265](https://github.com/knsv/mermaid/pull/265) ([gibson042](https://github.com/gibson042)) ## [0.5.6](https://github.com/knsv/mermaid/tree/0.5.6) (2015-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.5...0.5.6) **Implemented enhancements:** - Add download SVG link to the live editor [\#144](https://github.com/knsv/mermaid/issues/144) **Fixed bugs:** - Live Editor: Permalink address not being parsed [\#202](https://github.com/knsv/mermaid/issues/202) **Closed issues:** - title doesn't work in sequenceDiagram [\#248](https://github.com/knsv/mermaid/issues/248) - hypen-minus should be valid in sequence diagram alt/else/etc. descriptions [\#247](https://github.com/knsv/mermaid/issues/247) - Broken in firefox? [\#245](https://github.com/knsv/mermaid/issues/245) - When there is a Chinese symbol in the flowchart, it will crash。 [\#238](https://github.com/knsv/mermaid/issues/238) - Non-alpha characters included in ALPHA token \(flow graph jison\) [\#232](https://github.com/knsv/mermaid/issues/232) - subgraph not rendering with change to sample [\#231](https://github.com/knsv/mermaid/issues/231) - sequence diagram requires a new line at the end? [\#229](https://github.com/knsv/mermaid/issues/229) **Merged pull requests:** - Make sequenceDiagram terminal newline optional [\#253](https://github.com/knsv/mermaid/pull/253) ([gibson042](https://github.com/gibson042)) - Support sequenceDiagram "over" notes [\#252](https://github.com/knsv/mermaid/pull/252) ([gibson042](https://github.com/gibson042)) - Properly handle "rest of line" statements [\#251](https://github.com/knsv/mermaid/pull/251) ([gibson042](https://github.com/gibson042)) - CLI: Propagate exit code from lib \(i.e., phantomjs\) [\#250](https://github.com/knsv/mermaid/pull/250) ([gibson042](https://github.com/gibson042)) - flowRender.js - Fix FontAwesome icon insert [\#244](https://github.com/knsv/mermaid/pull/244) ([ma-zal](https://github.com/ma-zal)) - updated sequence diagram link in live editor [\#242](https://github.com/knsv/mermaid/pull/242) ([r-a-v-a-s](https://github.com/r-a-v-a-s)) - updated links in README.md [\#240](https://github.com/knsv/mermaid/pull/240) ([r-a-v-a-s](https://github.com/r-a-v-a-s)) - Ellipse syntax [\#237](https://github.com/knsv/mermaid/pull/237) ([spect88](https://github.com/spect88)) - Allow keywords as suffixes of node ids [\#235](https://github.com/knsv/mermaid/pull/235) ([spect88](https://github.com/spect88)) - Highlighted the editor in the nav [\#234](https://github.com/knsv/mermaid/pull/234) ([knsv](https://github.com/knsv)) - Live editor tweaks [\#233](https://github.com/knsv/mermaid/pull/233) ([spect88](https://github.com/spect88)) - Add a Gitter chat badge to README.md [\#230](https://github.com/knsv/mermaid/pull/230) ([gitter-badger](https://github.com/gitter-badger)) ## [0.5.5](https://github.com/knsv/mermaid/tree/0.5.5) (2015-10-21) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.4...0.5.5) **Closed issues:** - sequence diagram, arrowhead instead of crosshead [\#227](https://github.com/knsv/mermaid/issues/227) **Merged pull requests:** - Fix a typo: crosshead --\> arrowhead [\#228](https://github.com/knsv/mermaid/pull/228) ([tylerlong](https://github.com/tylerlong)) ## [0.5.4](https://github.com/knsv/mermaid/tree/0.5.4) (2015-10-19) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.3...0.5.4) **Implemented enhancements:** - Set log level from mermaid configuration [\#220](https://github.com/knsv/mermaid/issues/220) - Links in sequence diagrams [\#159](https://github.com/knsv/mermaid/issues/159) - Add syntax for double headed arrows [\#123](https://github.com/knsv/mermaid/issues/123) **Fixed bugs:** - comment characters `%%` cause parse error [\#141](https://github.com/knsv/mermaid/issues/141) **Closed issues:** - Marker-end arrow cannot be shown for URL with query parameter [\#225](https://github.com/knsv/mermaid/issues/225) - Please update bower's D3 version [\#221](https://github.com/knsv/mermaid/issues/221) - Width fixed to 400px [\#204](https://github.com/knsv/mermaid/issues/204) - render to png from the cli does not display the marker-end arrow heads [\#181](https://github.com/knsv/mermaid/issues/181) **Merged pull requests:** - Allow `end` as a substring of vertex id [\#224](https://github.com/knsv/mermaid/pull/224) ([spect88](https://github.com/spect88)) - Remove duplicate npm dependencies: d3 and he [\#223](https://github.com/knsv/mermaid/pull/223) ([spect88](https://github.com/spect88)) ## [0.5.3](https://github.com/knsv/mermaid/tree/0.5.3) (2015-10-04) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.2...0.5.3) ## [0.5.2](https://github.com/knsv/mermaid/tree/0.5.2) (2015-10-04) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.1...0.5.2) **Implemented enhancements:** - Support for hyperlink and tooltip [\#34](https://github.com/knsv/mermaid/issues/34) **Closed issues:** - Installing “atom-mermaid@0.1.3” failed [\#218](https://github.com/knsv/mermaid/issues/218) - node feature request [\#211](https://github.com/knsv/mermaid/issues/211) - Please add prefix for styles [\#208](https://github.com/knsv/mermaid/issues/208) - Bad handling of block arguments [\#207](https://github.com/knsv/mermaid/issues/207) - please consider port to mac osx [\#203](https://github.com/knsv/mermaid/issues/203) - allow phantomjs \>=1.9.x [\#201](https://github.com/knsv/mermaid/issues/201) - syntax for venn diagrams? [\#200](https://github.com/knsv/mermaid/issues/200) - Broken CLI Graphs? \(v0.5.1\) [\#196](https://github.com/knsv/mermaid/issues/196) - Static site does not render under HTTPS [\#194](https://github.com/knsv/mermaid/issues/194) - Error on simple graph [\#192](https://github.com/knsv/mermaid/issues/192) - Escape "~" [\#191](https://github.com/knsv/mermaid/issues/191) - Trying to add link using 'click' to flowchart [\#188](https://github.com/knsv/mermaid/issues/188) - cli: no lines and arrowheads rendered / only dotted lines [\#187](https://github.com/knsv/mermaid/issues/187) - text of mermaid div displayed on page [\#186](https://github.com/knsv/mermaid/issues/186) - using mermaid with laravel [\#185](https://github.com/knsv/mermaid/issues/185) - Atom editor package [\#183](https://github.com/knsv/mermaid/issues/183) - Auto linewrap for notes in sequence diagrams [\#178](https://github.com/knsv/mermaid/issues/178) - Execute code after initialize [\#176](https://github.com/knsv/mermaid/issues/176) - Autoscaling for all diagram types [\#175](https://github.com/knsv/mermaid/issues/175) - Problem wit click event callback [\#174](https://github.com/knsv/mermaid/issues/174) - How to escape characters? [\#170](https://github.com/knsv/mermaid/issues/170) - it can not work [\#167](https://github.com/knsv/mermaid/issues/167) - Broken subgraph using the CLI [\#153](https://github.com/knsv/mermaid/issues/153) - IE Support issue [\#142](https://github.com/knsv/mermaid/issues/142) - Flowchart truncated [\#140](https://github.com/knsv/mermaid/issues/140) - Double Quote as text is not working [\#219](https://github.com/knsv/mermaid/issues/219) - classDef / class not working with htmlLabels? [\#210](https://github.com/knsv/mermaid/issues/210) - Links in graph missing [\#209](https://github.com/knsv/mermaid/issues/209) - Last word in comment boxes getting cut off by word wrap library : \( [\#195](https://github.com/knsv/mermaid/issues/195) - Escaping characters in sequence diagram [\#193](https://github.com/knsv/mermaid/issues/193) - SVG foreignObject rendering [\#180](https://github.com/knsv/mermaid/issues/180) - IE9 issue [\#179](https://github.com/knsv/mermaid/issues/179) - inoperable in an AMD/requirejs environment: IPython Notebook [\#127](https://github.com/knsv/mermaid/issues/127) - \[Parser\] Hyphen in participant name bring TypeError [\#74](https://github.com/knsv/mermaid/issues/74) **Merged pull requests:** - Update flowchart.md [\#214](https://github.com/knsv/mermaid/pull/214) ([orschiro](https://github.com/orschiro)) - Default style when using the CLI [\#205](https://github.com/knsv/mermaid/pull/205) ([gillesdemey](https://github.com/gillesdemey)) - Gantt chart - add minutes and seconds durations [\#198](https://github.com/knsv/mermaid/pull/198) ([dbrans](https://github.com/dbrans)) - Using QUnit for AMD testing [\#190](https://github.com/knsv/mermaid/pull/190) ([bollwyvl](https://github.com/bollwyvl)) - Update phantomscript.js [\#182](https://github.com/knsv/mermaid/pull/182) ([phairow](https://github.com/phairow)) ## [0.5.1](https://github.com/knsv/mermaid/tree/0.5.1) (2015-06-21) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.0...0.5.1) **Implemented enhancements:** - To SVG Export [\#146](https://github.com/knsv/mermaid/issues/146) - Possibility to set the width of the generated flowchart [\#129](https://github.com/knsv/mermaid/issues/129) - Special characters break parsing [\#54](https://github.com/knsv/mermaid/issues/54) - Responsive graph layout for mobile viewers [\#51](https://github.com/knsv/mermaid/issues/51) - Styling connector lines [\#31](https://github.com/knsv/mermaid/issues/31) **Fixed bugs:** - flowchart - styling of edges via css overrides specific styles set in the graph definition [\#128](https://github.com/knsv/mermaid/issues/128) **Closed issues:** - Live editor is broken [\#173](https://github.com/knsv/mermaid/issues/173) - 0.5.0 no longer respects custom date definitions in Gantt diagrams [\#171](https://github.com/knsv/mermaid/issues/171) - Drop label character restrictions [\#162](https://github.com/knsv/mermaid/issues/162) - can't nest subgraphs in flowchart [\#161](https://github.com/knsv/mermaid/issues/161) - Unable to generate gantt diagram with mermaid CLI [\#158](https://github.com/knsv/mermaid/issues/158) - Inline css by "mermaid" [\#157](https://github.com/knsv/mermaid/issues/157) - Finite State Machine Diagram [\#152](https://github.com/knsv/mermaid/issues/152) - How to center align gantt diagram [\#150](https://github.com/knsv/mermaid/issues/150) - Security concern regarding class definition [\#148](https://github.com/knsv/mermaid/issues/148) - File Extension [\#147](https://github.com/knsv/mermaid/issues/147) - `setTimeout` with clusters problematic with programmatic edits and no callback [\#133](https://github.com/knsv/mermaid/issues/133) - module.exports.cloneCssStyles\(\) in combination with Angularjs breaks display in Chrome and IE [\#126](https://github.com/knsv/mermaid/issues/126) - Gantt - suitable xAxis for longer project [\#125](https://github.com/knsv/mermaid/issues/125) - How to get started with this project ? [\#64](https://github.com/knsv/mermaid/issues/64) **Merged pull requests:** - Remove moot `version` property from bower.json [\#172](https://github.com/knsv/mermaid/pull/172) ([kkirsche](https://github.com/kkirsche)) ## [0.5.0](https://github.com/knsv/mermaid/tree/0.5.0) (2015-06-07) [Full Changelog](https://github.com/knsv/mermaid/compare/0.4.0...0.5.0) **Implemented enhancements:** - Add a css file, mermaid.css, with default styling [\#122](https://github.com/knsv/mermaid/issues/122) - software architecture diagram [\#36](https://github.com/knsv/mermaid/issues/36) - Support for bar charts and pie diagrams [\#22](https://github.com/knsv/mermaid/issues/22) **Closed issues:** - uglifyjs wanrings which means we can improve the code [\#156](https://github.com/knsv/mermaid/issues/156) - New\(er\) features unavailable in downloadable js files? [\#151](https://github.com/knsv/mermaid/issues/151) - Add gh-gapes link to description [\#143](https://github.com/knsv/mermaid/issues/143) - Some examples not displayed on Firefox 36.0.1 [\#138](https://github.com/knsv/mermaid/issues/138) - tags ending in a "v" don't render [\#132](https://github.com/knsv/mermaid/issues/132) - Links in flowchart [\#131](https://github.com/knsv/mermaid/issues/131) - Using the library for iOS development [\#130](https://github.com/knsv/mermaid/issues/130) - Add capability for gantt diagrams [\#118](https://github.com/knsv/mermaid/issues/118) - lower case v causes error in the parser [\#108](https://github.com/knsv/mermaid/issues/108) - Label's css conflict with boostrap's .label [\#67](https://github.com/knsv/mermaid/issues/67) - TypeError: Cannot read property 'layout' of undefined [\#37](https://github.com/knsv/mermaid/issues/37) **Merged pull requests:** - Dev 0.5.0 [\#168](https://github.com/knsv/mermaid/pull/168) ([knsv](https://github.com/knsv)) - Fix spacing [\#164](https://github.com/knsv/mermaid/pull/164) ([rhcarvalho](https://github.com/rhcarvalho)) - Fixing typo: "Think" -\> "Thick" [\#160](https://github.com/knsv/mermaid/pull/160) ([it0a](https://github.com/it0a)) - IE, local html, cssRules access is denied [\#155](https://github.com/knsv/mermaid/pull/155) ([tylerlong](https://github.com/tylerlong)) - Add automatically generated change log file. [\#139](https://github.com/knsv/mermaid/pull/139) ([skywinder](https://github.com/skywinder)) - Adding init argument to the global API [\#137](https://github.com/knsv/mermaid/pull/137) ([bollwyvl](https://github.com/bollwyvl)) - Add description of manual calling of init [\#136](https://github.com/knsv/mermaid/pull/136) ([bollwyvl](https://github.com/bollwyvl)) - Allow other forms of node selection for init\(\) [\#135](https://github.com/knsv/mermaid/pull/135) ([bollwyvl](https://github.com/bollwyvl)) - Use a library-level variable for assigning ids [\#134](https://github.com/knsv/mermaid/pull/134) ([bollwyvl](https://github.com/bollwyvl)) ## [0.4.0](https://github.com/knsv/mermaid/tree/0.4.0) (2015-03-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.5...0.4.0) **Implemented enhancements:** - Assymetric shapes not documented [\#82](https://github.com/knsv/mermaid/issues/82) - Improve arrows [\#3](https://github.com/knsv/mermaid/issues/3) **Fixed bugs:** - NoModificationAllowedError [\#23](https://github.com/knsv/mermaid/issues/23) **Closed issues:** - subgraph background is black in rendered flowchart PNG via CLI [\#121](https://github.com/knsv/mermaid/issues/121) - Integrate editor at https://github.com/naseer/mermaid-webapp [\#110](https://github.com/knsv/mermaid/issues/110) - Internet Explorer Support [\#99](https://github.com/knsv/mermaid/issues/99) ## [0.3.5](https://github.com/knsv/mermaid/tree/0.3.5) (2015-02-15) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.4...0.3.5) ## [0.3.4](https://github.com/knsv/mermaid/tree/0.3.4) (2015-02-15) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.3...0.3.4) **Implemented enhancements:** - Apply styling from css when using the CLI utility [\#85](https://github.com/knsv/mermaid/issues/85) - Generated SVG works poorly outside web browsers [\#58](https://github.com/knsv/mermaid/issues/58) - Generating SVG text blob for use in Node [\#2](https://github.com/knsv/mermaid/issues/2) **Closed issues:** - Subgraph syntax bug? [\#120](https://github.com/knsv/mermaid/issues/120) - Live editor [\#115](https://github.com/knsv/mermaid/issues/115) - Error in "Basic Syntax" wiki page [\#113](https://github.com/knsv/mermaid/issues/113) - semicolons, anyone? [\#111](https://github.com/knsv/mermaid/issues/111) - undefined `sequenceConfig` fails [\#109](https://github.com/knsv/mermaid/issues/109) - Sequence Diagrams: Show Actors below as well [\#106](https://github.com/knsv/mermaid/issues/106) - Allow overriding sequence diagram configuration \(SVG properties\) [\#103](https://github.com/knsv/mermaid/issues/103) - Error when rendering A-- This is the text -- B [\#102](https://github.com/knsv/mermaid/issues/102) - Clipping in documentation [\#97](https://github.com/knsv/mermaid/issues/97) - isolate class styling to the svg container [\#92](https://github.com/knsv/mermaid/issues/92) - Make the new graph declaration more visual [\#40](https://github.com/knsv/mermaid/issues/40) **Merged pull requests:** - Add live editor [\#119](https://github.com/knsv/mermaid/pull/119) ([naseer](https://github.com/naseer)) - Adds CSS option to the CLI [\#116](https://github.com/knsv/mermaid/pull/116) ([fardog](https://github.com/fardog)) - Update flowchart.md in response Issue \#113 [\#114](https://github.com/knsv/mermaid/pull/114) ([vijay40](https://github.com/vijay40)) - Ignore all files except the license and dist/ folder when installing with Bower. [\#112](https://github.com/knsv/mermaid/pull/112) ([jasonbellamy](https://github.com/jasonbellamy)) ## [0.3.3](https://github.com/knsv/mermaid/tree/0.3.3) (2015-01-25) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.2...0.3.3) **Implemented enhancements:** - Support for dotted links [\#26](https://github.com/knsv/mermaid/issues/26) **Closed issues:** - Missing arrows in sequence diagram [\#98](https://github.com/knsv/mermaid/issues/98) - Error with \>9 linkStyles [\#95](https://github.com/knsv/mermaid/issues/95) **Merged pull requests:** - Require d3 directly to better support Node usage [\#107](https://github.com/knsv/mermaid/pull/107) ([markdalgleish](https://github.com/markdalgleish)) - update doc with -c option [\#105](https://github.com/knsv/mermaid/pull/105) ([jjmr](https://github.com/jjmr)) - Add new parameter to the console client to override the svg configuration in sequence diagrams [\#104](https://github.com/knsv/mermaid/pull/104) ([jjmr](https://github.com/jjmr)) - Text based labels, new shape [\#101](https://github.com/knsv/mermaid/pull/101) ([bjowes](https://github.com/bjowes)) - fix html tags in example usage [\#100](https://github.com/knsv/mermaid/pull/100) ([deiwin](https://github.com/deiwin)) ## [0.3.2](https://github.com/knsv/mermaid/tree/0.3.2) (2015-01-11) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.1...0.3.2) **Implemented enhancements:** - Make link text look like it is on the line [\#53](https://github.com/knsv/mermaid/issues/53) **Closed issues:** - disable auto render [\#91](https://github.com/knsv/mermaid/issues/91) - Tidy breaks mermaid \(linebreaks in \<div\>\) [\#87](https://github.com/knsv/mermaid/issues/87) - Bug: \<br\> being rendered as text in node [\#73](https://github.com/knsv/mermaid/issues/73) - Graph edges appear to render outside of the canvas [\#70](https://github.com/knsv/mermaid/issues/70) **Merged pull requests:** - Merge pull request \#1 from knsv/master [\#96](https://github.com/knsv/mermaid/pull/96) ([gkchic](https://github.com/gkchic)) - Removed duplicated section in flowchart docs [\#94](https://github.com/knsv/mermaid/pull/94) ([kaime](https://github.com/kaime)) - Grammar changes to sequence page [\#93](https://github.com/knsv/mermaid/pull/93) ([gkchic](https://github.com/gkchic)) - Github buttons [\#89](https://github.com/knsv/mermaid/pull/89) ([gkchic](https://github.com/gkchic)) - Template change [\#88](https://github.com/knsv/mermaid/pull/88) ([gkchic](https://github.com/gkchic)) ## [0.3.1](https://github.com/knsv/mermaid/tree/0.3.1) (2015-01-05) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.0...0.3.1) **Implemented enhancements:** - Support for sequence diagrams [\#16](https://github.com/knsv/mermaid/issues/16) - Client utility for mermaid [\#6](https://github.com/knsv/mermaid/issues/6) **Closed issues:** - Non ASCII chars in labels [\#84](https://github.com/knsv/mermaid/issues/84) - 'undefined' titles of Quicklinks on the usage page [\#80](https://github.com/knsv/mermaid/issues/80) - \[cli\] Enhancement proposal: not fail --version / --help if phantomjs isn't installed [\#71](https://github.com/knsv/mermaid/issues/71) **Merged pull requests:** - Flowchart doc: Text in the circle now in a circle [\#81](https://github.com/knsv/mermaid/pull/81) ([Grahack](https://github.com/Grahack)) - Fix for issue \#73 [\#79](https://github.com/knsv/mermaid/pull/79) ([it0a](https://github.com/it0a)) - Ink template [\#78](https://github.com/knsv/mermaid/pull/78) ([gkchic](https://github.com/gkchic)) - Show help and version even if phantom isn't present. Fixes \#71 [\#75](https://github.com/knsv/mermaid/pull/75) ([fardog](https://github.com/fardog)) - Add apostrophe & 'and' [\#72](https://github.com/knsv/mermaid/pull/72) ([sudodoki](https://github.com/sudodoki)) ## [0.3.0](https://github.com/knsv/mermaid/tree/0.3.0) (2014-12-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.16...0.3.0) **Implemented enhancements:** - How do I do comments? [\#47](https://github.com/knsv/mermaid/issues/47) - Improve readability with new line as terminator and whitespace [\#38](https://github.com/knsv/mermaid/issues/38) **Fixed bugs:** - This characters failed the lexical parsing [\#46](https://github.com/knsv/mermaid/issues/46) **Closed issues:** - Trailing whitespace at the end of lines is not ignored [\#55](https://github.com/knsv/mermaid/issues/55) - Use classes instead of inline style for easy styling [\#24](https://github.com/knsv/mermaid/issues/24) **Merged pull requests:** - Adds Command Line Interface for generating PNGs from mermaid description files [\#69](https://github.com/knsv/mermaid/pull/69) ([fardog](https://github.com/fardog)) - Allow special symbols for direction along with acronyms [\#66](https://github.com/knsv/mermaid/pull/66) ([vijay40](https://github.com/vijay40)) ## [0.2.16](https://github.com/knsv/mermaid/tree/0.2.16) (2014-12-15) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.15...0.2.16) **Fixed bugs:** - Lines routed outside visible area [\#19](https://github.com/knsv/mermaid/issues/19) **Closed issues:** - Mermaid not rendering properly on Wordpress pages [\#59](https://github.com/knsv/mermaid/issues/59) - Improve example page with live demo [\#52](https://github.com/knsv/mermaid/issues/52) - Does not render upon AngularJS Updates [\#45](https://github.com/knsv/mermaid/issues/45) - Download link in README.MD doesn't work. [\#42](https://github.com/knsv/mermaid/issues/42) - linkStyle usage is not obvious [\#41](https://github.com/knsv/mermaid/issues/41) - Move \*.spec.js in src/ to test/ [\#35](https://github.com/knsv/mermaid/issues/35) **Merged pull requests:** - New grammar will allow statements ending without semicolon as disccused in Issue \#38 [\#63](https://github.com/knsv/mermaid/pull/63) ([vijay40](https://github.com/vijay40)) - Class based styling [\#62](https://github.com/knsv/mermaid/pull/62) ([bjowes](https://github.com/bjowes)) - Fix typos [\#60](https://github.com/knsv/mermaid/pull/60) ([sublimino](https://github.com/sublimino)) - Included .DS_Store in gitignore [\#57](https://github.com/knsv/mermaid/pull/57) ([alvynmcq](https://github.com/alvynmcq)) - Improves readability discussed in issue \#38 [\#56](https://github.com/knsv/mermaid/pull/56) ([vijay40](https://github.com/vijay40)) - Added a linting task for gulp [\#43](https://github.com/knsv/mermaid/pull/43) ([serv](https://github.com/serv)) ## [0.2.15](https://github.com/knsv/mermaid/tree/0.2.15) (2014-12-05) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.14...0.2.15) **Fixed bugs:** - Error with some characters [\#25](https://github.com/knsv/mermaid/issues/25) - Cap-cased words break parser [\#8](https://github.com/knsv/mermaid/issues/8) **Closed issues:** - Question marks don't render properly with /dist/mermaid.full.min.js [\#30](https://github.com/knsv/mermaid/issues/30) - Provide parse function in browser widthout `require`? [\#21](https://github.com/knsv/mermaid/issues/21) - Better label text support [\#18](https://github.com/knsv/mermaid/issues/18) **Merged pull requests:** - Include bower_components/ to .gitignore [\#33](https://github.com/knsv/mermaid/pull/33) ([serv](https://github.com/serv)) - Fixed reference to Git repo. [\#32](https://github.com/knsv/mermaid/pull/32) ([guyellis](https://github.com/guyellis)) ## [0.2.14](https://github.com/knsv/mermaid/tree/0.2.14) (2014-12-03) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.13...0.2.14) ## [0.2.13](https://github.com/knsv/mermaid/tree/0.2.13) (2014-12-03) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.10...0.2.13) **Implemented enhancements:** - Publish to NPM [\#7](https://github.com/knsv/mermaid/issues/7) **Closed issues:** - modified init to be applied more than once [\#29](https://github.com/knsv/mermaid/issues/29) - Wanted to know build process for the project. [\#28](https://github.com/knsv/mermaid/issues/28) - can not support Chinese description [\#20](https://github.com/knsv/mermaid/issues/20) - Support unicode chars in labels [\#9](https://github.com/knsv/mermaid/issues/9) ## [0.2.10](https://github.com/knsv/mermaid/tree/0.2.10) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.9...0.2.10) ## [0.2.9](https://github.com/knsv/mermaid/tree/0.2.9) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.8...0.2.9) **Closed issues:** - Add link to jsbin playground to README [\#11](https://github.com/knsv/mermaid/issues/11) - What are the requirements ? [\#10](https://github.com/knsv/mermaid/issues/10) **Merged pull requests:** - Allow unicode chars in labels [\#13](https://github.com/knsv/mermaid/pull/13) ([codebeige](https://github.com/codebeige)) ## [0.2.8](https://github.com/knsv/mermaid/tree/0.2.8) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.7...0.2.8) ## [0.2.7](https://github.com/knsv/mermaid/tree/0.2.7) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.6...0.2.7) **Closed issues:** - Provide parser as separate module [\#4](https://github.com/knsv/mermaid/issues/4) ## [0.2.6](https://github.com/knsv/mermaid/tree/0.2.6) (2014-11-27) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.5...0.2.6) ## [0.2.5](https://github.com/knsv/mermaid/tree/0.2.5) (2014-11-27) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.4...0.2.5) **Merged pull requests:** - Added new shapes! [\#1](https://github.com/knsv/mermaid/pull/1) ([bjowes](https://github.com/bjowes)) ## [0.2.4](https://github.com/knsv/mermaid/tree/0.2.4) (2014-11-25) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.3...0.2.4) ## [0.2.3](https://github.com/knsv/mermaid/tree/0.2.3) (2014-11-24) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.2...0.2.3) ## [0.2.2](https://github.com/knsv/mermaid/tree/0.2.2) (2014-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.1...0.2.2) ## [0.2.1](https://github.com/knsv/mermaid/tree/0.2.1) (2014-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.0...0.2.1) ## [0.2.0](https://github.com/knsv/mermaid/tree/0.2.0) (2014-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.1.1...0.2.0) ## [0.1.1](https://github.com/knsv/mermaid/tree/0.1.1) (2014-11-17) [Full Changelog](https://github.com/knsv/mermaid/compare/0.1.0...0.1.1) ## [0.1.0](https://github.com/knsv/mermaid/tree/0.1.0) (2014-11-16) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/Configuration.md�������������������������������0000664�0000000�0000000�00000002331�14332737457�0025731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configuration Configuration is the second half of Mermaid, after deployment. Together Deployment and Configuration constitute the whole of Mermaid. This section will introduce the different methods of configuring of the behaviors and appearances of Mermaid Diagrams. The Following are the most commonly used methods, and are all tied to Mermaid [Deployment](./n00b-gettingStarted.md) methods. ## Configuration Section in the [Live Editor](https://mermaid.live/). ## The `initialize()` call, for when Mermaid is called via an API, or through a <script> tag. ## [Directives](./directives.md), Directives allows limited reconfiguration of a diagram just before it is rendered. It can alter the font style, color and other aesthetic aspects of the diagram. You can pass a directive alongside your definition inside `%%{ }%%`, either above or below your diagram definition. ## Theme Creation: An application of using Directives to change [Themes](./theming.md). `Theme` is an value within mermaid's configuration that dictates the color scheme for diagrams. If you are interested in altering and customizing your Mermaid Diagrams, you will find the methods and values available for [Configuration](./Setup.md) here. It includes themes �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/README.md��������������������������������������0000664�0000000�0000000�00000036037�14332737457�0024071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# About Mermaid **Mermaid lets you create diagrams and visualizations using text and code.** It is a JavaScript based diagramming and charting tool that renders Markdown-inspired text definitions to create and modify diagrams dynamically. > If you are familiar with Markdown you should have no problem learning [Mermaid's Syntax](./n00b-syntaxReference.md). <img src="img/header.png" alt="" /> [![Build CI Status](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml/badge.svg)](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [![NPM](https://img.shields.io/npm/v/mermaid)](https://www.npmjs.com/package/mermaid) [![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) [![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) [![Join our Slack!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=slack&label=slack)](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_) <!-- Mermaid book banner --> [![Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!](img/book-banner-post-release.jpg)](https://mermaid-js.github.io/mermaid/landing/) <!-- <Main description> --> Mermaid is a JavaScript based diagramming and charting tool that uses Markdown-inspired text definitions and a renderer to create and modify complex diagrams. The main purpose of Mermaid is to help documentation catch up with development. > Doc-Rot is a Catch-22 that Mermaid helps to solve. Diagramming and documentation costs precious developer time and gets outdated quickly. But not having diagrams or docs ruins productivity and hurts organizational learning.<br/> Mermaid addresses this problem by enabling users to create easily modifiable diagrams, it can also be made part of production scripts (and other pieces of code).<br/> <br/> Mermaid allows even non-programmers to easily create detailed and diagrams through the [Mermaid Live Editor](https://mermaid.live/).<br/> [Tutorials](./Tutorials.md) has video tutorials. Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](./integrations.md). For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](./n00b-overview.md) and [Usage](./usage.md). 🌐 [CDN](https://unpkg.com/mermaid/) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](https://github.com/mermaid-js/mermaid/blob/develop/docs/development.md) | 📜 [Version Log](./CHANGELOG.md) | 🔌 [Plug-Ins](./integrations.md) > 🖖 Keep a steady pulse: mermaid needs more Collaborators, [Read More](https://github.com/knsv/mermaid/issues/866). :trophy: **Mermaid was nominated and won the [JS Open Source Awards (2019)](https://osawards.com/javascript/#nominees) in the category "The most exciting use of technology"!!!** **Thanks to all involved, people committing pull requests, people answering questions and special thanks to Tyler Long who is helping me maintain the project 🙏** In our release process we rely heavily on visual regression tests using [applitools](https://applitools.com/). Applitools is a great service which has been easy to use and integrate with our tests. <a href="https://applitools.com/"> <svg width="170" height="32" viewBox="0 0 170 32" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="a" maskUnits="userSpaceOnUse" x="27" y="0" width="143" height="32"><path fill-rule="evenodd" clip-rule="evenodd" d="M27.732.227h141.391v31.19H27.733V.227z" fill="#fff"></path></mask><g mask="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M153.851 22.562l1.971-3.298c1.291 1.219 3.837 2.402 5.988 2.402 1.971 0 2.903-.753 2.903-1.829 0-2.832-10.253-.502-10.253-7.313 0-2.904 2.51-5.45 7.099-5.45 2.904 0 5.234 1.004 6.955 2.367l-1.829 3.226c-1.039-1.075-3.011-2.008-5.126-2.008-1.65 0-2.725.717-2.725 1.685 0 2.546 10.289.395 10.289 7.386 0 3.19-2.724 5.52-7.528 5.52-3.012 0-5.916-1.003-7.744-2.688zm-5.7 2.259h4.553V.908h-4.553v23.913zm-6.273-8.676c0-2.689-1.578-5.02-4.446-5.02-2.832 0-4.409 2.331-4.409 5.02 0 2.724 1.577 5.055 4.409 5.055 2.868 0 4.446-2.33 4.446-5.055zm-13.588 0c0-4.912 3.442-9.07 9.142-9.07 5.736 0 9.178 4.158 9.178 9.07 0 4.911-3.442 9.106-9.178 9.106-5.7 0-9.142-4.195-9.142-9.106zm-5.628 0c0-2.689-1.577-5.02-4.445-5.02-2.832 0-4.41 2.331-4.41 5.02 0 2.724 1.578 5.055 4.41 5.055 2.868 0 4.445-2.33 4.445-5.055zm-13.587 0c0-4.912 3.441-9.07 9.142-9.07 5.736 0 9.178 4.158 9.178 9.07 0 4.911-3.442 9.106-9.178 9.106-5.701 0-9.142-4.195-9.142-9.106zm-8.425 4.338v-8.999h-2.868v-3.98h2.868V2.773h4.553v4.733h3.514v3.979h-3.514v7.78c0 1.111.574 1.936 1.578 1.936.681 0 1.326-.251 1.577-.538l.968 3.478c-.681.609-1.9 1.11-3.8 1.11-3.191 0-4.876-1.648-4.876-4.767zm-8.962 4.338h4.553V7.505h-4.553V24.82zm-.43-21.905a2.685 2.685 0 012.688-2.69c1.506 0 2.725 1.184 2.725 2.69a2.724 2.724 0 01-2.725 2.724c-1.47 0-2.688-1.219-2.688-2.724zM84.482 24.82h4.553V.908h-4.553v23.913zm-6.165-8.676c0-2.976-1.793-5.02-4.41-5.02-1.47 0-3.119.825-3.908 1.973v6.094c.753 1.111 2.438 2.008 3.908 2.008 2.617 0 4.41-2.044 4.41-5.055zm-8.318 6.453v8.82h-4.553V7.504H70v2.187c1.327-1.685 3.227-2.618 5.342-2.618 4.446 0 7.672 3.299 7.672 9.07 0 5.773-3.226 9.107-7.672 9.107-2.043 0-3.907-.86-5.342-2.653zm-10.718-6.453c0-2.976-1.793-5.02-4.41-5.02-1.47 0-3.119.825-3.908 1.973v6.094c.753 1.111 2.438 2.008 3.908 2.008 2.617 0 4.41-2.044 4.41-5.055zm-8.318 6.453v8.82H46.41V7.504h4.553v2.187c1.327-1.685 3.227-2.618 5.342-2.618 4.446 0 7.672 3.299 7.672 9.07 0 5.773-3.226 9.107-7.672 9.107-2.043 0-3.908-.86-5.342-2.653zm-11.758-1.936V18.51c-.753-1.004-2.187-1.542-3.657-1.542-1.793 0-3.263.968-3.263 2.617 0 1.65 1.47 2.582 3.263 2.582 1.47 0 2.904-.502 3.657-1.506zm0 4.159v-1.829c-1.183 1.434-3.227 2.259-5.485 2.259-2.761 0-5.988-1.864-5.988-5.736 0-4.087 3.227-5.593 5.988-5.593 2.33 0 4.337.753 5.485 2.115V13.85c0-1.756-1.506-2.904-3.8-2.904-1.829 0-3.55.717-4.984 2.044L28.63 9.8c2.115-1.901 4.84-2.726 7.564-2.726 3.98 0 7.6 1.578 7.6 6.561v11.186h-4.588z" fill="#00A298"></path></g><path fill-rule="evenodd" clip-rule="evenodd" d="M14.934 16.177c0 1.287-.136 2.541-.391 3.752-1.666-1.039-3.87-2.288-6.777-3.752 2.907-1.465 5.11-2.714 6.777-3.753.255 1.211.39 2.466.39 3.753m4.6-7.666V4.486a78.064 78.064 0 01-4.336 3.567c-1.551-2.367-3.533-4.038-6.14-5.207C11.1 4.658 12.504 6.7 13.564 9.262 5.35 15.155 0 16.177 0 16.177s5.35 1.021 13.564 6.915c-1.06 2.563-2.463 4.603-4.507 6.415 2.607-1.169 4.589-2.84 6.14-5.207a77.978 77.978 0 014.336 3.568v-4.025s-.492-.82-2.846-2.492c.6-1.611.93-3.354.93-5.174a14.8 14.8 0 00-.93-5.174c2.354-1.673 2.846-2.492 2.846-2.492" fill="#00A298"></path></svg> </a> ## Diagram Types ### [Flowchart](./flowchart.md?id=flowcharts-basic-syntax) ```mmd graph TD; A-->B; A-->C; B-->D; C-->D; ``` ![Flowchart](img/flow.png) ### [Sequence diagram](./sequenceDiagram.md) ```mmd sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts <br/>prevail! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ![Sequence diagram](img/sequence.png) ### [Gantt diagram](./gantt.md) ```mmd gantt dateFormat YYYY-MM-DD title Adding GANTT diagram to mermaid excludes weekdays 2014-01-10 section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d ``` ![Gantt diagram](img/gantt.png) ### [Class diagram](./classDiagram.md) ```mmd classDiagram Class01 <|-- AveryLongClass : Cool Class03 *-- Class04 Class05 o-- Class06 Class07 .. Class08 Class09 --> C2 : Where am i? Class09 --* C3 Class09 --|> Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label ``` ![Class diagram](img/class.png) ### Git graph ```mermaid-example gitGraph commit commit branch develop commit commit commit checkout main commit commit ``` ### [Entity Relationship Diagram - :exclamation: experimental](./entityRelationshipDiagram.md) ```mmd erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses ``` ![ER diagram](img/simple-er.png) ### [User Journey Diagram](./user-journey.md) ```mmd journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` ![Journey diagram](img/user-journey.png) ## Installation **In depth guides and examples can be found at [Getting Started](/n00b-gettingStarted) and [Usage](/usage).** **It would also be helpful to learn more about mermaid's [Syntax](/n00b-syntaxReference).** ### CDN ``` https://unpkg.com/mermaid@<version>/dist/ ``` To select a version: Replace `<version>` with the desired version number. Latest Version: [https://unpkg.com/browse/mermaid@8.8.0/](https://unpkg.com/browse/mermaid@8.8.0/) ## Deploying Mermaid To Deploy Mermaid: 1. You will need to install node v16, which would have npm 2. Download yarn using npm 3. Enter the following command: `yarn add mermaid` 4. You can then add mermaid as a dev dependency using this command: `yarn add --dev mermaid` ### [Mermaid API](./Setup.md): **To deploy mermaid without a bundler, one can insert a `script` tag with an absolute address and a `mermaid.initialize` call into the HTML like so:** ```html <script type="module"> import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@<MERMAID_VERSION>/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true }); </script> ``` **Doing so will command the mermaid parser to look for the `<div>` or `<pre>` tags with `class="mermaid"`. From these tags mermaid will try to read the diagram/chart definitions and render them into SVG charts.** **Examples can be found at** [Other examples](/examples) ## Sibling projects - [Mermaid Live Editor](https://github.com/mermaid-js/mermaid-live-editor) - [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli) - [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo) - [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo) ## Request for Assistance Things are piling up and I have a hard time keeping up. It would be great if we could form a core team of developers to cooperate with the future development of mermaid. As part of this team you would get write access to the repository and would represent the project when answering questions and issues. Together we could continue the work with things like: - Adding more types of diagrams like mindmaps, ert diagrams, etc. - Improving existing diagrams Don't hesitate to contact me if you want to get involved! ## For contributors ### Setup ```sh yarn install ``` ### Build ```sh yarn build:watch ``` ### Lint ```sh yarn lint ``` We use [eslint](https://eslint.org/). We recommend you to install [editor plugins](https://eslint.org/docs/user-guide/integrations) to get real time lint result. ### Test ```sh yarn test ``` Manual test in browser: open `dist/index.html` ### Release For those who have the permission to do so: Update version number in `package.json`. ```sh npm publish ``` The above command generates files into the `dist` folder and publishes them to <npmjs.org>. ## Related projects - [Command Line Interface](https://github.com/mermaid-js/mermaid-cli) - [Live Editor](https://github.com/mermaid-js/mermaid-live-editor) - [HTTP Server](https://github.com/TomWright/mermaid-server) ## Contributors [![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out. Detailed information about how to contribute can be found in the [contribution guide](CONTRIBUTING.md) ## Security and safe diagrams For public sites, it can be precarious to retrieve text from users on the internet, storing that content for presentation in a browser at a later stage. The reason is that the user content can contain embedded malicious scripts that will run when the data is presented. For Mermaid this is a risk, specially as mermaid diagrams contain many characters that are used in html which makes the standard sanitation unusable as it also breaks the diagrams. We still make an effort to sanitize the incoming code and keep refining the process but it is hard to guarantee that there are no loop holes. As an extra level of security for sites with external users we are happy to introduce a new security level in which the diagram is rendered in a sandboxed iframe preventing JavaScript in the code from being executed. This is a great step forward for better security. _Unfortunately you can not have a cake and eat it at the same time which in this case means that some of the interactive functionality gets blocked along with the possible malicious code._ ## Reporting vulnerabilities To report a vulnerability, please e-mail security@mermaid.live with a description of the issue, the steps you took to create the issue, affected versions, and if known, mitigations for the issue. ## Appreciation A quick note from Knut Sveidqvist: > _Many thanks to the [d3](https://d3js.org/) and [dagre-d3](https://github.com/cpettitt/dagre-d3) projects for providing the graphical layout and drawing libraries!_ >_Thanks also to the [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) project for usage of the grammar for the sequence diagrams. Thanks to Jessica Peter for inspiration and starting point for gantt rendering._ >_Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._ > > _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_ --- _Mermaid was created by Knut Sveidqvist for easier documentation._ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/SUMMARY.md�������������������������������������0000664�0000000�0000000�00000000652�14332737457�0024263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Summary - [mermaid](README.md) - [FAQ](faq.md) - [Breaking changes](breakingChanges.md) - [Usage](usage.md) - [Flowchart](flowchart.md) - [Sequence diagram](sequenceDiagram.md) - [Gantt diagram](gantt.md) - [mermaid CLI](mermaidCLI.md) - [Demos](demos.md) - [mermaidAPI](mermaidAPI.md) - [Development](development.md) - [Upgrading](upgrading.md) - [Contribute to this website](https://github.com/mermaidjs/mermaid-gitbook) ��������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/Setup.md���������������������������������������0000664�0000000�0000000�00000151230�14332737457�0024225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!-- Generated by documentation.js. Update this documentation by updating the source code. --> ## mermaidAPI This is the API to be used when optionally handling the integration with the web page, instead of using the default integration provided by mermaid.js. The core of this api is the [**render**][1] function which, given a graph definition as text, renders the graph/diagram and returns an svg element for the graph. It is then up to the user of the API to make use of the svg, either insert it somewhere in the page or do something completely different. In addition to the render function, a number of behavioral configuration options are available. ## Configuration **Configuration methods in Mermaid version 8.6.0 have been updated, to learn more\[[click here][2]].** ## **What follows are config instructions for older versions** These are the default options which can be overridden with the initialization call like so: **Example 1:**<pre> mermaid.initialize({ flowchart:{ htmlLabels: false } }); </pre> **Example 2:**<pre> <script> var config = { startOnLoad:true, flowchart:{ useMaxWidth:true, htmlLabels:true, curve:'cardinal', }, securityLevel:'loose', }; mermaid.initialize(config); </script> </pre> A summary of all options and their defaults is found [here][3]. A description of each option follows below. ## theme Theme , the CSS style sheet | Parameter | Description | Type | Required | Values | | --------- | --------------- | ------ | -------- | ---------------------------------------------- | | theme | Built in Themes | string | Optional | 'default', 'forest', 'dark', 'neutral', 'null' | **Notes:** To disable any pre-defined mermaid theme, use "null".<pre> "theme": "forest", "themeCSS": ".node rect { fill: red; }" </pre> ## fontFamily | Parameter | Description | Type | Required | Values | | ---------- | ------------------------------------------------------ | ------ | -------- | --------------------------- | | fontFamily | specifies the font to be used in the rendered diagrams | string | Required | Any Possible CSS FontFamily | **Notes:** Default value: '"trebuchet ms", verdana, arial, sans-serif;'. ## logLevel | Parameter | Description | Type | Required | Values | | --------- | ----------------------------------------------------- | ---------------- | -------- | --------------------------------------------- | | logLevel | This option decides the amount of logging to be used. | string \| number | Required | 'trace','debug','info','warn','error','fatal' | **Notes:** - Trace: 0 - Debug: 1 - Info: 2 - Warn: 3 - Error: 4 - Fatal: 5 (default) ## securityLevel | Parameter | Description | Type | Required | Values | | ------------- | --------------------------------- | ------ | -------- | ------------------------------------------ | | securityLevel | Level of trust for parsed diagram | string | Required | `sandbox`, `strict`, `loose`, `antiscript` | **Notes**: - **`strict`**: (**default**) tags in text are encoded, click functionality is disabled - **`loose`**: tags in text are allowed, click functionality is enabled - **`antiscript`**: html tags in text are allowed, (only script element is removed), click functionality is enabled - **`sandbox`**: With this security level all rendering takes place in a sandboxed iframe. This prevent any JavaScript from running in the context. This may hinder interactive functionality of the diagram like scripts, popups in sequence diagram or links to other tabs/targets etc. ## startOnLoad | Parameter | Description | Type | Required | Values | | ----------- | -------------------------------------------- | ------- | -------- | ----------- | | startOnLoad | Dictates whether mermaid starts on Page load | boolean | Required | true, false | **Notes:** Default value: true ## arrowMarkerAbsolute | Parameter | Description | Type | Required | Values | | ------------------- | ---------------------------------------------------------------------------- | ------- | -------- | ----------- | | arrowMarkerAbsolute | Controls whether or arrow markers in html code are absolute paths or anchors | boolean | Required | true, false | **Notes**: This matters if you are using base tag settings. Default value: false ## secure This option controls which currentConfig keys are considered _secure_ and can only be changed via call to mermaidAPI.initialize. Calls to mermaidAPI.reinitialize cannot make changes to the `secure` keys in the current currentConfig. This prevents malicious graph directives from overriding a site's default security. **Notes**: Default value: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize'] ## deterministicIds This option controls if the generated ids of nodes in the SVG are generated randomly or based on a seed. If set to false, the IDs are generated based on the current date and thus are not deterministic. This is the default behavior. **Notes**: This matters if your files are checked into source control e.g. git and should not change unless content is changed. Default value: false ## deterministicIDSeed This option is the optional seed for deterministic ids. if set to undefined but deterministicIds is true, a simple number iterator is used. You can set this attribute to base the seed on a static string. ## flowchart The object containing configurations specific for flowcharts ### diagramPadding | Parameter | Description | Type | Required | Values | | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ | | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value | **Notes:** The amount of padding around the diagram as a whole so that embedded diagrams have margins, expressed in pixels Default value: 8 ### htmlLabels | Parameter | Description | Type | Required | Values | | ---------- | -------------------------------------------------------------------------------------------- | ------- | -------- | ----------- | | htmlLabels | Flag for setting whether or not a html tag should be used for rendering labels on the edges. | boolean | Required | true, false | **Notes:** Default value: true. ### nodeSpacing | Parameter | Description | Type | Required | Values | | ----------- | --------------------------------------------------- | ------- | -------- | ------------------- | | nodeSpacing | Defines the spacing between nodes on the same level | Integer | Required | Any positive Number | **Notes:** Pertains to horizontal spacing for TB (top to bottom) or BT (bottom to top) graphs, and the vertical spacing for LR as well as RL graphs.\*\* Default value: 50 ### rankSpacing | Parameter | Description | Type | Required | Values | | ----------- | ----------------------------------------------------- | ------- | -------- | ------------------- | | rankSpacing | Defines the spacing between nodes on different levels | Integer | Required | Any Positive Number | **Notes**: Pertains to vertical spacing for TB (top to bottom) or BT (bottom to top), and the horizontal spacing for LR as well as RL graphs. Default value 50 ### curve | Parameter | Description | Type | Required | Values | | --------- | -------------------------------------------------- | ------ | -------- | ----------------------------- | | curve | Defines how mermaid renders curves for flowcharts. | string | Required | 'basis', 'linear', 'cardinal' | **Notes:** Default Value: 'basis' ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ### defaultRenderer | Parameter | Description | Type | Required | Values | | --------------- | ----------- | ------- | -------- | --------------------------- | | defaultRenderer | See notes | boolean | 4 | `dagre-d3`, `dagre-wrapper` | **Notes:** Decides which rendering engine that is to be used for the rendering. Legal values are: `dagre-d3` `dagre-wrapper` - wrapper for `dagre` implemented in mermaid Default value: `dagre-wrapper` ## sequence The object containing configurations specific for sequence diagrams ### activationWidth | Parameter | Description | Type | Required | Values | | --------------- | ---------------------------- | ------- | -------- | ------------------ | | activationWidth | Width of the activation rect | Integer | Required | Any Positive Value | **Notes:** Default value :10 ### diagramMarginX | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### diagramMarginY | Parameter | Description | Type | Required | Values | | -------------- | ------------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginY | Margin to the over and under the sequence diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### actorMargin | Parameter | Description | Type | Required | Values | | ----------- | --------------------- | ------- | -------- | ------------------ | | actorMargin | Margin between actors | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### width | Parameter | Description | Type | Required | Values | | --------- | -------------------- | ------- | -------- | ------------------ | | width | Width of actor boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 150 ### height | Parameter | Description | Type | Required | Values | | --------- | --------------------- | ------- | -------- | ------------------ | | height | Height of actor boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 65 ### boxMargin | Parameter | Description | Type | Required | Values | | --------- | ------------------------ | ------- | -------- | ------------------ | | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### boxTextMargin | Parameter | Description | Type | Required | Values | | ------------- | -------------------------------------------- | ------- | -------- | ------------------ | | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 5 ### noteMargin | Parameter | Description | Type | Required | Values | | ---------- | ------------------- | ------- | -------- | ------------------ | | noteMargin | margin around notes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### messageMargin | Parameter | Description | Type | Required | Values | | ------------- | ---------------------- | ------- | -------- | ------------------ | | messageMargin | Space between messages | Integer | Required | Any Positive Value | **Notes:** Default value: 35 ### messageAlign | Parameter | Description | Type | Required | Values | | ------------ | --------------------------- | ------ | -------- | ------------------------- | | messageAlign | Multiline message alignment | string | Required | 'left', 'center', 'right' | **Notes:** Default value: 'center' ### mirrorActors | Parameter | Description | Type | Required | Values | | ------------ | --------------------------- | ------- | -------- | ----------- | | mirrorActors | Mirror actors under diagram | boolean | Required | true, false | **Notes:** Default value: true ### forceMenus | Parameter | Description | Type | Required | Values | | ---------- | ----------------------------------------------------------------------- | ------- | -------- | ----------- | | forceMenus | forces actor popup menus to always be visible (to support E2E testing). | Boolean | Required | True, False | **Notes:** Default value: false. ### bottomMarginAdj | Parameter | Description | Type | Required | Values | | --------------- | ------------------------------------------ | ------- | -------- | ------------------ | | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | Required | Any Positive Value | **Notes:** Depending on css styling this might need adjustment. Default value: 1 ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the height and width is set to 100% and is then scaling with the available space. If set to false, the absolute space required is used. Default value: true ### rightAngles | Parameter | Description | Type | Required | Values | | ----------- | ------------------------------------ | ------- | -------- | ----------- | | rightAngles | display curve arrows as right angles | boolean | Required | true, false | **Notes:** This will display arrows that start and begin at the same node as right angles, rather than a curve Default value: false ### showSequenceNumbers | Parameter | Description | Type | Required | Values | | ------------------- | ------------------------------- | ------- | -------- | ----------- | | showSequenceNumbers | This will show the node numbers | boolean | Required | true, false | **Notes:** Default value: false ### actorFontSize | Parameter | Description | Type | Required | Values | | ------------- | -------------------------------------------------- | ------- | -------- | ------------------ | | actorFontSize | This sets the font size of the actor's description | Integer | Require | Any Positive Value | **Notes:** **Default value 14**.. ### actorFontFamily | Parameter | Description | Type | Required | Values | | --------------- | ---------------------------------------------------- | ------ | -------- | --------------------------- | | actorFontFamily | This sets the font family of the actor's description | string | Required | Any Possible CSS FontFamily | **Notes:** Default value: "'Open Sans", sans-serif' ### actorFontWeight This sets the font weight of the actor's description **Notes:** Default value: 400. ### noteFontSize | Parameter | Description | Type | Required | Values | | ------------ | ----------------------------------------------- | ------- | -------- | ------------------ | | noteFontSize | This sets the font size of actor-attached notes | Integer | Required | Any Positive Value | **Notes:** Default value: 14 ### noteFontFamily | Parameter | Description | Type | Required | Values | | -------------- | -------------------------------------------------- | ------ | -------- | --------------------------- | | noteFontFamily | This sets the font family of actor-attached notes. | string | Required | Any Possible CSS FontFamily | **Notes:** Default value: ''"trebuchet ms", verdana, arial, sans-serif' ### noteFontWeight This sets the font weight of the note's description **Notes:** Default value: 400 ### noteAlign | Parameter | Description | Type | Required | Values | | --------- | ---------------------------------------------------- | ------ | -------- | ------------------------- | | noteAlign | This sets the text alignment of actor-attached notes | string | required | 'left', 'center', 'right' | **Notes:** Default value: 'center' ### messageFontSize | Parameter | Description | Type | Required | Values | | --------------- | ----------------------------------------- | ------- | -------- | ------------------- | | messageFontSize | This sets the font size of actor messages | Integer | Required | Any Positive Number | **Notes:** Default value: 16 ### messageFontFamily | Parameter | Description | Type | Required | Values | | ----------------- | ------------------------------------------- | ------ | -------- | --------------------------- | | messageFontFamily | This sets the font family of actor messages | string | Required | Any Possible CSS FontFamily | **Notes:** Default value: '"trebuchet ms", verdana, arial, sans-serif' ### messageFontWeight This sets the font weight of the message's description **Notes:** Default value: 400. ### wrap This sets the auto-wrap state for the diagram **Notes:** Default value: false. ### wrapPadding This sets the auto-wrap padding for the diagram (sides only) **Notes:** Default value: 0. ### labelBoxWidth This sets the width of the loop-box (loop, alt, opt, par) **Notes:** Default value: 50. ### labelBoxHeight This sets the height of the loop-box (loop, alt, opt, par) **Notes:** Default value: 20. ## gantt The object containing configurations specific for gantt diagrams ### titleTopMargin ### titleTopMargin | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ | | titleTopMargin | Margin top for the text over the gantt diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 25 ### barHeight | Parameter | Description | Type | Required | Values | | --------- | ----------------------------------- | ------- | -------- | ------------------ | | barHeight | The height of the bars in the graph | Integer | Required | Any Positive Value | **Notes:** Default value: 20 ### barGap | Parameter | Description | Type | Required | Values | | --------- | ---------------------------------------------------------------- | ------- | -------- | ------------------ | | barGap | The margin between the different activities in the gantt diagram | Integer | Optional | Any Positive Value | **Notes:** Default value: 4 ### topPadding | Parameter | Description | Type | Required | Values | | ---------- | -------------------------------------------------------------------------- | ------- | -------- | ------------------ | | topPadding | Margin between title and gantt diagram and between axis and gantt diagram. | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### rightPadding | Parameter | Description | Type | Required | Values | | ------------ | ----------------------------------------------------------------------- | ------- | -------- | ------------------ | | rightPadding | The space allocated for the section name to the right of the activities | Integer | Required | Any Positive Value | **Notes:** Default value: 75 ### leftPadding | Parameter | Description | Type | Required | Values | | ----------- | ---------------------------------------------------------------------- | ------- | -------- | ------------------ | | leftPadding | The space allocated for the section name to the left of the activities | Integer | Required | Any Positive Value | **Notes:** Default value: 75 ### gridLineStartPadding | Parameter | Description | Type | Required | Values | | -------------------- | -------------------------------------------- | ------- | -------- | ------------------ | | gridLineStartPadding | Vertical starting position of the grid lines | Integer | Required | Any Positive Value | **Notes:** Default value: 35 ### fontSize | Parameter | Description | Type | Required | Values | | --------- | ----------- | ------- | -------- | ------------------ | | fontSize | Font size | Integer | Required | Any Positive Value | **Notes:** Default value: 11 ### sectionFontSize | Parameter | Description | Type | Required | Values | | --------------- | ---------------------- | ------- | -------- | ------------------ | | sectionFontSize | Font size for sections | Integer | Required | Any Positive Value | **Notes:** Default value: 11 ### numberSectionStyles | Parameter | Description | Type | Required | Values | | ------------------- | ---------------------------------------- | ------- | -------- | ------------------ | | numberSectionStyles | The number of alternating section styles | Integer | 4 | Any Positive Value | **Notes:** Default value: 4 ### axisFormat | Parameter | Description | Type | Required | Values | | ---------- | --------------------------- | ---- | -------- | ---------------- | | axisFormat | Datetime format of the axis | 3 | Required | Date in yy-mm-dd | **Notes:** This might need adjustment to match your locale and preferences Default value: '%Y-%m-%d'. ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ### topAxis | Parameter | Description | Type | Required | Values | | --------- | ----------- | ------- | -------- | ----------- | | topAxis | See notes | Boolean | 4 | True, False | **Notes:** when this flag is set date labels will be added to the top of the chart **Default value false**. ## journey The object containing configurations specific for journey diagrams ### diagramMarginX | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### diagramMarginY | Parameter | Description | Type | Required | Values | | -------------- | -------------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginY | Margin to the over and under the sequence diagram. | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### leftMargin | Parameter | Description | Type | Required | Values | | ----------- | --------------------- | ------- | -------- | ------------------ | | actorMargin | Margin between actors | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### width | Parameter | Description | Type | Required | Values | | --------- | -------------------- | ------- | -------- | ------------------ | | width | Width of actor boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 150 ### height | Parameter | Description | Type | Required | Values | | --------- | --------------------- | ------- | -------- | ------------------ | | height | Height of actor boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 65 ### boxMargin | Parameter | Description | Type | Required | Values | | --------- | ------------------------ | ------- | -------- | ------------------ | | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### boxTextMargin | Parameter | Description | Type | Required | Values | | ------------- | -------------------------------------------- | ------- | -------- | ------------------ | | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 5 ### noteMargin | Parameter | Description | Type | Required | Values | | ---------- | ------------------- | ------- | -------- | ------------------ | | noteMargin | Margin around notes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### messageMargin | Parameter | Description | Type | Required | Values | | ------------- | ----------------------- | ------- | -------- | ------------------ | | messageMargin | Space between messages. | Integer | Required | Any Positive Value | **Notes:** Space between messages. Default value: 35 ### messageAlign | Parameter | Description | Type | Required | Values | | ------------ | --------------------------- | ---- | -------- | ------------------------- | | messageAlign | Multiline message alignment | 3 | 4 | 'left', 'center', 'right' | **Notes:** Default value: 'center' ### bottomMarginAdj | Parameter | Description | Type | Required | Values | | --------------- | ------------------------------------------ | ------- | -------- | ------------------ | | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | 4 | Any Positive Value | **Notes:** Depending on css styling this might need adjustment. Default value: 1 ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ### rightAngles | Parameter | Description | Type | Required | Values | | ----------- | --------------------------------- | ---- | -------- | ----------- | | rightAngles | Curved Arrows become Right Angles | 3 | 4 | true, false | **Notes:** This will display arrows that start and begin at the same node as right angles, rather than a curves Default value: false ## useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ## defaultRenderer | Parameter | Description | Type | Required | Values | | --------------- | ----------- | ------- | -------- | --------------------------- | | defaultRenderer | See notes | boolean | 4 | `dagre-d3`, `dagre-wrapper` | **Notes**: Decides which rendering engine that is to be used for the rendering. Legal values are: `dagre-d3` `dagre-wrapper` - wrapper for `dagre` implemented in mermaid Default value: `dagre-d3` ## useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ## defaultRenderer | Parameter | Description | Type | Required | Values | | --------------- | ----------- | ------- | -------- | --------------------------- | | defaultRenderer | See notes | boolean | 4 | `dagre-d3`, `dagre-wrapper` | **Notes:** Decides which rendering engine that is to be used for the rendering. Legal values are: `dagre-d3` `dagre-wrapper` - wrapper for `dagre` implemented in mermaid Default value: `dagre-d3` ## er The object containing configurations specific for entity relationship diagrams ### diagramPadding | Parameter | Description | Type | Required | Values | | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ | | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value | **Notes:** The amount of padding around the diagram as a whole so that embedded diagrams have margins, expressed in pixels Default value: 20 ### layoutDirection | Parameter | Description | Type | Required | Values | | --------------- | ---------------------------------------- | ------ | -------- | ---------------------- | | layoutDirection | Directional bias for layout of entities. | string | Required | "TB", "BT", "LR", "RL" | **Notes:** 'TB' for Top-Bottom, 'BT'for Bottom-Top, 'LR' for Left-Right, or 'RL' for Right to Left. T = top, B = bottom, L = left, and R = right. Default value: 'TB' ### minEntityWidth | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------- | ------- | -------- | ------------------ | | minEntityWidth | The minimum width of an entity box | Integer | Required | Any Positive Value | **Notes:** Expressed in pixels. Default value: 100 ### minEntityHeight | Parameter | Description | Type | Required | Values | | --------------- | ----------------------------------- | ------- | -------- | ------------------ | | minEntityHeight | The minimum height of an entity box | Integer | 4 | Any Positive Value | **Notes:** Expressed in pixels Default value: 75 ### entityPadding | Parameter | Description | Type | Required | Values | | ------------- | ------------------------------------------------------------ | ------- | -------- | ------------------ | | entityPadding | Minimum internal padding between text in box and box borders | Integer | 4 | Any Positive Value | **Notes:** The minimum internal padding between text in an entity box and the enclosing box borders, expressed in pixels. Default value: 15 ### stroke | Parameter | Description | Type | Required | Values | | --------- | ----------------------------------- | ------ | -------- | -------------------- | | stroke | Stroke color of box edges and lines | string | 4 | Any recognized color | **Notes:** Default value: 'gray' ### fill | Parameter | Description | Type | Required | Values | | --------- | -------------------------- | ------ | -------- | -------------------- | | fill | Fill color of entity boxes | string | 4 | Any recognized color | **Notes:** Default value: 'honeydew' ### fontSize | Parameter | Description | Type | Required | Values | | --------- | ------------------- | ------- | -------- | ------------------ | | fontSize | Font Size in pixels | Integer | | Any Positive Value | **Notes:** Font size (expressed as an integer representing a number of pixels) Default value: 12 ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the diagram width is locked to 100% and scaled based on available space. If set to false, the diagram reserves its absolute width. Default value: true ## pie The object containing configurations specific for pie diagrams ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the diagram width is locked to 100% and scaled based on available space. If set to false, the diagram reserves its absolute width. Default value: true ## requirement The object containing configurations specific for req diagrams ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the diagram width is locked to 100% and scaled based on available space. If set to false, the diagram reserves its absolute width. Default value: true ## c4 The object containing configurations specific for c4 diagrams ### diagramMarginX | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginX | Margin to the right and left of the c4 diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### diagramMarginY | Parameter | Description | Type | Required | Values | | -------------- | ------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginY | Margin to the over and under the c4 diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### c4ShapeMargin | Parameter | Description | Type | Required | Values | | ------------- | --------------------- | ------- | -------- | ------------------ | | c4ShapeMargin | Margin between shapes | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### c4ShapePadding | Parameter | Description | Type | Required | Values | | -------------- | ---------------------- | ------- | -------- | ------------------ | | c4ShapePadding | Padding between shapes | Integer | Required | Any Positive Value | **Notes:** Default value: 20 ### width | Parameter | Description | Type | Required | Values | | --------- | --------------------- | ------- | -------- | ------------------ | | width | Width of person boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 216 ### height | Parameter | Description | Type | Required | Values | | --------- | ---------------------- | ------- | -------- | ------------------ | | height | Height of person boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 60 ### boxMargin | Parameter | Description | Type | Required | Values | | --------- | ------------------- | ------- | -------- | ------------------ | | boxMargin | Margin around boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the height and width is set to 100% and is then scaling with the available space. If set to false, the absolute space required is used. Default value: true ### c4ShapeInRow | Parameter | Description | Type | Required | Values | | ------------ | ----------- | ------- | -------- | ------------------ | | c4ShapeInRow | See Notes | Integer | Required | Any Positive Value | **Notes:** How many shapes to place in each row. Default value: 4 ### c4BoundaryInRow | Parameter | Description | Type | Required | Values | | --------------- | ----------- | ------- | -------- | ------------------ | | c4BoundaryInRow | See Notes | Integer | Required | Any Positive Value | **Notes:** How many boundaries to place in each row. Default value: 2 ### personFontSize This sets the font size of Person shape for the diagram **Notes:** Default value: 14. ### personFontFamily This sets the font family of Person shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### personFontWeight This sets the font weight of Person shape for the diagram **Notes:** Default value: normal. ### external_personFontSize This sets the font size of External Person shape for the diagram **Notes:** Default value: 14. ### external_personFontFamily This sets the font family of External Person shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_personFontWeight This sets the font weight of External Person shape for the diagram **Notes:** Default value: normal. ### systemFontSize This sets the font size of System shape for the diagram **Notes:** Default value: 14. ### systemFontFamily This sets the font family of System shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### systemFontWeight This sets the font weight of System shape for the diagram **Notes:** Default value: normal. ### external_systemFontSize This sets the font size of External System shape for the diagram **Notes:** Default value: 14. ### external_systemFontFamily This sets the font family of External System shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_systemFontWeight This sets the font weight of External System shape for the diagram **Notes:** Default value: normal. ### system_dbFontSize This sets the font size of System DB shape for the diagram **Notes:** Default value: 14. ### system_dbFontFamily This sets the font family of System DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### system_dbFontWeight This sets the font weight of System DB shape for the diagram **Notes:** Default value: normal. ### external_system_dbFontSize This sets the font size of External System DB shape for the diagram **Notes:** Default value: 14. ### external_system_dbFontFamily This sets the font family of External System DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_system_dbFontWeight This sets the font weight of External System DB shape for the diagram **Notes:** Default value: normal. ### system_queueFontSize This sets the font size of System Queue shape for the diagram **Notes:** Default value: 14. ### system_queueFontFamily This sets the font family of System Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### system_queueFontWeight This sets the font weight of System Queue shape for the diagram **Notes:** Default value: normal. ### external_system_queueFontSize This sets the font size of External System Queue shape for the diagram **Notes:** Default value: 14. ### external_system_queueFontFamily This sets the font family of External System Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_system_queueFontWeight This sets the font weight of External System Queue shape for the diagram **Notes:** Default value: normal. ### boundaryFontSize This sets the font size of Boundary shape for the diagram **Notes:** Default value: 14. ### boundaryFontFamily This sets the font family of Boundary shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### boundaryFontWeight This sets the font weight of Boundary shape for the diagram **Notes:** Default value: normal. ### messageFontSize This sets the font size of Message shape for the diagram **Notes:** Default value: 12. ### messageFontFamily This sets the font family of Message shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### messageFontWeight This sets the font weight of Message shape for the diagram **Notes:** Default value: normal. ### containerFontSize This sets the font size of Container shape for the diagram **Notes:** Default value: 14. ### containerFontFamily This sets the font family of Container shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### containerFontWeight This sets the font weight of Container shape for the diagram **Notes:** Default value: normal. ### external_containerFontSize This sets the font size of External Container shape for the diagram **Notes:** Default value: 14. ### external_containerFontFamily This sets the font family of External Container shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_containerFontWeight This sets the font weight of External Container shape for the diagram **Notes:** Default value: normal. ### container_dbFontSize This sets the font size of Container DB shape for the diagram **Notes:** Default value: 14. ### container_dbFontFamily This sets the font family of Container DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### container_dbFontWeight This sets the font weight of Container DB shape for the diagram **Notes:** Default value: normal. ### external_container_dbFontSize This sets the font size of External Container DB shape for the diagram **Notes:** Default value: 14. ### external_container_dbFontFamily This sets the font family of External Container DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_container_dbFontWeight This sets the font weight of External Container DB shape for the diagram **Notes:** Default value: normal. ### container_queueFontSize This sets the font size of Container Queue shape for the diagram **Notes:** Default value: 14. ### container_queueFontFamily This sets the font family of Container Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### container_queueFontWeight This sets the font weight of Container Queue shape for the diagram **Notes:** Default value: normal. ### external_container_queueFontSize This sets the font size of External Container Queue shape for the diagram **Notes:** Default value: 14. ### external_container_queueFontFamily This sets the font family of External Container Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_container_queueFontWeight This sets the font weight of External Container Queue shape for the diagram **Notes:** Default value: normal. ### componentFontSize This sets the font size of Component shape for the diagram **Notes:** Default value: 14. ### componentFontFamily This sets the font family of Component shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### componentFontWeight This sets the font weight of Component shape for the diagram **Notes:** Default value: normal. ### external_componentFontSize This sets the font size of External Component shape for the diagram **Notes:** Default value: 14. ### external_componentFontFamily This sets the font family of External Component shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_componentFontWeight This sets the font weight of External Component shape for the diagram **Notes:** Default value: normal. ### component_dbFontSize This sets the font size of Component DB shape for the diagram **Notes:** Default value: 14. ### component_dbFontFamily This sets the font family of Component DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### component_dbFontWeight This sets the font weight of Component DB shape for the diagram **Notes:** Default value: normal. ### external_component_dbFontSize This sets the font size of External Component DB shape for the diagram **Notes:** Default value: 14. ### external_component_dbFontFamily This sets the font family of External Component DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_component_dbFontWeight This sets the font weight of External Component DB shape for the diagram **Notes:** Default value: normal. ### component_queueFontSize This sets the font size of Component Queue shape for the diagram **Notes:** Default value: 14. ### component_queueFontFamily This sets the font family of Component Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### component_queueFontWeight This sets the font weight of Component Queue shape for the diagram **Notes:** Default value: normal. ### external_component_queueFontSize This sets the font size of External Component Queue shape for the diagram **Notes:** Default value: 14. ### external_component_queueFontFamily This sets the font family of External Component Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_component_queueFontWeight This sets the font weight of External Component Queue shape for the diagram **Notes:** Default value: normal. ### wrap This sets the auto-wrap state for the diagram **Notes:** Default value: true. ### wrapPadding This sets the auto-wrap padding for the diagram (sides only) **Notes:** Default value: 0. ## parse ### Parameters - `text` **[string][4]** - `parseError` **[Function][5]?** Returns **[boolean][6]** ## setSiteConfig ## setSiteConfig | Function | Description | Type | Values | | ------------- | ------------------------------------- | ----------- | --------------------------------------- | | setSiteConfig | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | **Notes:** Sets the siteConfig. The siteConfig is a protected configuration for repeat use. Calls to reset() will reset the currentConfig to siteConfig. Calls to reset(configApi.defaultConfig) will reset siteConfig and currentConfig to the defaultConfig Note: currentConfig is set in this function _Default value: At default, will mirror Global Config_ ### Parameters - `conf` **MermaidConfig** The base currentConfig to use as siteConfig Returns **[object][7]** The siteConfig ## getSiteConfig ## getSiteConfig | Function | Description | Type | Values | | ------------- | ------------------------------------------------- | ----------- | -------------------------------- | | setSiteConfig | Returns the current siteConfig base configuration | Get Request | Returns Any Values in siteConfig | **Notes**: Returns **any** values in siteConfig. Returns **[object][7]** The siteConfig ## setConfig ## setConfig | Function | Description | Type | Values | | ------------- | ------------------------------------- | ----------- | --------------------------------------- | | setSiteConfig | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | **Notes**: Sets the currentConfig. The parameter conf is sanitized based on the siteConfig.secure keys. Any values found in conf with key found in siteConfig.secure will be replaced with the corresponding siteConfig value. ### Parameters - `conf` **any** The potential currentConfig Returns **any** The currentConfig merged with the sanitized conf ## render Function that renders an svg with a graph from a chart definition. Usage example below. ```javascript mermaidAPI.initialize({ startOnLoad: true, }); $(function () { const graphDefinition = 'graph TB\na-->b'; const cb = function (svgGraph) { console.log(svgGraph); }; mermaidAPI.render('id1', graphDefinition, cb); }); ``` ### Parameters - `id` **[string][4]** The id of the element to be rendered - `text` **[string][4]** The graph definition - `cb` **function (svgCode: [string][4], bindFunctions: function (element: [Element][8]): void): void** - `container` **[Element][8]** Selector to element in which a div with the graph temporarily will be inserted. If one is provided a hidden div will be inserted in the body of the page instead. The element will be removed when rendering is completed. Returns **void** ## getConfig ## getConfig | Function | Description | Type | Return Values | | --------- | ------------------------- | ----------- | ------------------------------ | | getConfig | Obtains the currentConfig | Get Request | Any Values from current Config | **Notes**: Returns **any** the currentConfig Returns **any** The currentConfig ## sanitize ## sanitize | Function | Description | Type | Values | | -------- | -------------------------------------- | ----------- | ------ | | sanitize | Sets the siteConfig to desired values. | Put Request | None | Ensures options parameter does not attempt to override siteConfig secure keys **Notes**: modifies options in-place ### Parameters - `options` **any** The potential setConfig parameter ## addDirective Pushes in a directive to the configuration ### Parameters - `directive` **[object][7]** The directive to push in ## reset ## reset | Function | Description | Type | Required | Values | | -------- | ---------------------------- | ----------- | -------- | ------ | | reset | Resets currentConfig to conf | Put Request | Required | None | ## conf | Parameter | Description | Type | Required | Values | | --------- | -------------------------------------------------------------- | ---------- | -------- | -------------------------------------------- | | conf | base set of values, which currentConfig could be **reset** to. | Dictionary | Required | Any Values, with respect to the secure Array | **Notes**: (default: current siteConfig ) (optional, default `getSiteConfig()`) ### Parameters - `config` (optional, default `siteConfig`) Returns **void** ## initialize ### Parameters - `options` **MermaidConfig** ## ## mermaidAPI configuration defaults ```html <script> const config = { theme: 'default', logLevel: 'fatal', securityLevel: 'strict', startOnLoad: true, arrowMarkerAbsolute: false, er: { diagramPadding: 20, layoutDirection: 'TB', minEntityWidth: 100, minEntityHeight: 75, entityPadding: 15, stroke: 'gray', fill: 'honeydew', fontSize: 12, useMaxWidth: true, }, flowchart: { diagramPadding: 8, htmlLabels: true, curve: 'basis', }, sequence: { diagramMarginX: 50, diagramMarginY: 10, actorMargin: 50, width: 150, height: 65, boxMargin: 10, boxTextMargin: 5, noteMargin: 10, messageMargin: 35, messageAlign: 'center', mirrorActors: true, bottomMarginAdj: 1, useMaxWidth: true, rightAngles: false, showSequenceNumbers: false, }, gantt: { titleTopMargin: 25, barHeight: 20, barGap: 4, topPadding: 50, leftPadding: 75, gridLineStartPadding: 35, fontSize: 11, fontFamily: '"Open Sans", sans-serif', numberSectionStyles: 4, axisFormat: '%Y-%m-%d', topAxis: false, }, }; mermaid.initialize(config); </script> ``` [1]: Setup.md?id=render [2]: 8.6.0_docs.md [3]: #mermaidapi-configuration-defaults [4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String [5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function [6]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean [7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object [8]: https://developer.mozilla.org/docs/Web/API/Element ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/Tutorials.md�����������������������������������0000664�0000000�0000000�00000004625�14332737457�0025120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Tutorials This is list of publicly available Tutorials for using Mermaid.JS . This is intended as a basic introduction for the use of the Live Editor for generating diagrams, and deploying Mermaid.JS through HTML. **Note that these tutorials might display an older interface, but the usage of the live-editor will largely be the same.** For most purposes, you can use the [Live Editor](https://mermaid-js.github.io/mermaid-live-editor), to quickly and easily render a diagram. ## Live-Editor Tutorials The definitions that can be generated the Live-Editor are also backwards-compatible as of version 8.7.0. [Chris Chinchilla: Hands on - Text-based diagrams with Mermaid](https://www.youtube.com/watch?v=4_LdV1cs2sA) [GitLab Unfiltered: How to Create Mermaid Diagrams](https://www.youtube.com/watch?v=SQ9QmuTHuSI&t=438s) [GitLab Unfiltered: Emilie adds a mermaid diagram to the handbook](https://www.youtube.com/watch?v=5RQqht3NNSE) [World of Zero: I Learn How To Build Flowcharts and Signal Diagram's in Mermaid.JS](https://www.youtube.com/watch?v=7_2IroEs6Is&t=207s) [Eddie Jaoude: Can you code your diagrams?](https://www.youtube.com/watch?v=9HZzKkAqrX8) ## Mermaid with HTML Examples are provided in [Getting Started](n00b-gettingStarted.md) **CodePen Examples:** https://codepen.io/CarlBoneri/pen/BQwZzq https://codepen.io/tdkn/pen/vZxQzd https://codepen.io/janzeteachesit/pen/OWWZKN ## Mermaid with Text Area https://codepen.io/Ryuno-Ki/pen/LNxwgR ## Mermaid in open source docs [K8s.io Diagram Guide](https://kubernetes.io/docs/contribute/style/diagram-guide/) [K8s.dev blog: Improve your documentation with Mermaid.js diagrams](https://www.kubernetes.dev/blog/2021/12/01/improve-your-documentation-with-mermaid.js-diagrams/) ## Jupyter Integration with mermaid-js Here's an example of Python integration with mermaid-js which uses the mermaid.ink service, that displays the graph in a Jupyter notebook. ```python import base64 from IPython.display import Image, display import matplotlib.pyplot as plt def mm(graph): graphbytes = graph.encode("ascii") base64_bytes = base64.b64encode(graphbytes) base64_string = base64_bytes.decode("ascii") display(Image(url="https://mermaid.ink/img/" + base64_string)) mm(""" graph LR; A--> B & C & D; B--> A & E; C--> A & E; D--> A & E; E--> B & C & D; """) ``` **Output** ![Example graph of the Python integration](img/python-mermaid-integration.png) �����������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/_navbar.md�������������������������������������0000664�0000000�0000000�00000000546�14332737457�0024540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������- Getting started - [Quick start](quickstart.md) - [Writing more pages](more-pages.md) - [Custom navbar](custom-navbar.md) - [Cover page](cover.md) - Configuration - [Configuration](configuration.md) - [Themes](themes.md) - [Using plugins](plugins.md) - [Markdown configuration](markdown.md) - [Language highlight](language-highlight.md) ����������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/_sidebar.md������������������������������������0000664�0000000�0000000�00000002435�14332737457�0024677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������- 📔 Introduction - [About Mermaid](README.md) - [Deployment](n00b-gettingStarted.md) - [Syntax and Configuration](n00b-syntaxReference.md) - 📊 Diagram Syntax - [Flowchart](flowchart.md) - [Sequence Diagram](sequenceDiagram.md) - [Class Diagram](classDiagram.md) - [State Diagram](stateDiagram.md) - [Entity Relationship Diagram](entityRelationshipDiagram.md) - [User Journey](user-journey.md) - [Gantt](gantt.md) - [Pie Chart](pie.md) - [Requirement Diagram](requirementDiagram.md) - [Gitgraph (Git) Diagram 🔥](gitgraph.md) - [C4C Diagram (Context) Diagram 🦺⚠️](c4c.md) - [Mindmaps 🦺⚠️](mindmap.md) - [Other Examples](examples.md) - ⚙️ Deployment and Configuration - [Tutorials](Tutorials.md) - [API-Usage](usage.md) - [Mermaid API Configuration](Setup.md) - [Directives](directives.md) - [Theming](theming.md) - [Accessibility](accessibility.md) - [Mermaid CLI](mermaidCLI.md) - [Advanced usage](n00b-advanced.md) - 📚 Misc - [Use-Cases and Integrations](integrations.md) - [FAQ](faq.md) - 🙌 Contributions and Community - [Overview for Beginners](n00b-overview.md) - [Development and Contribution ](development.md) - [Changelog](CHANGELOG.md) - [Adding Diagrams ](newDiagram.md) - [Security ](security.md) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/accessibility.md�������������������������������0000664�0000000�0000000�00000011761�14332737457�0025760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Accessibility Options ## Accessibility Now with Mermaid library in much wider use, we have started to work towards more accessible features, based on the feedback from the community. To begin with, we have added a new feature to Mermaid library, which is to support accessibility options, **Accessibility Title** and **Accessibility Description**. This support for accessibility options is available for all the diagrams/chart types. Also, we have tired to keep the same format for the accessibility options, so that it is easy to understand and maintain. ## Defining Accessibility Options ### Single line accessibility values The diagram authors can now add the accessibility options in the diagram definition, using the `accTitle` and `accDescr` keywords, where each keyword is followed by `:` and the string value for title and description like: - `accTitle: "Your Accessibility Title"` or - `accDescr: "Your Accessibility Description"` **When these two options are defined, they will add a corresponding `<title>` and `<desc>` tag in the SVG.** Let us take a look at the following example with a flowchart diagram: ```mermaid-example graph LR accTitle: Big decisions accDescr: Flow chart of the decision making process A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] ``` See in the code snippet above, the `accTitle` and `accDescr` are defined in the diagram definition. They result in the following tags in SVG code: ![Accessibility options rendered inside SVG](img/accessibility-div-example.png) ### Multi-line Accessibility title/description You can also define the accessibility options in a multi-line format, where the keyword is followed by opening curly bracket `{` and then multiple lines, followed by a closing `}`. `accTitle: My single line title value` (**_single line format_**) vs `accDescr: { My multi-line description of the diagram }` (**_multi-line format_**) Let us look at it in the following example, with same flowchart: ```mermaid-example graph LR accTitle: Big decisions accDescr { My multi-line description of the diagram } A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] ``` See in the code snippet above, the `accTitle` and `accDescr` are defined in the diagram definition. They result in the following tags in SVG code: ![Accessibility options rendered inside SVG](img/accessibility-div-example-2.png) ### Sample Code Snippet for other diagram types #### Sequence Diagram ```mermaid-example sequenceDiagram accTitle: My Sequence Diagram accDescr: My Sequence Diagram Description Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` #### Class Diagram ```mermaid-example classDiagram accTitle: My Class Diagram accDescr: My Class Diagram Description Vehicle <|-- Car ``` #### State Diagram ```mermaid-example stateDiagram accTitle: My State Diagram accDescr: My State Diagram Description s1 --> s2 ``` #### Entity Relationship Diagram ```mermaid-example erDiagram accTitle: My Entity Relationship Diagram accDescr: My Entity Relationship Diagram Description CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses ``` #### User Journey Diagram ```mermaid-example journey accTitle: My User Journey Diagram accDescr: My User Journey Diagram Description title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` #### Gantt Chart ```mermaid-example gantt accTitle: My Gantt Chart Accessibility Title accDescr: My Gantt Chart Accessibility Description title A Gantt Diagram dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d ``` #### Pie Chart ```mermaid-example pie accTitle: My Pie Chart Accessibility Title accDescr: My Pie Chart Accessibility Description title Key elements in Product X "Calcium" : 42.96 "Potassium" : 50.05 "Magnesium" : 10.01 "Iron" : 5 ``` #### Requirement Diagram ```mermaid-example requirementDiagram accTitle: My Requirement Diagram accDescr: My Requirement Diagram Description requirement test_req { id: 1 text: the test text. risk: high verifymethod: test } element test_entity { type: simulation } test_entity - satisfies -> test_req ``` #### Gitgraph ```mermaid-example gitGraph accTitle: My Gitgraph Accessibility Title accDescr: My Gitgraph Accessibility Description commit commit branch develop checkout develop commit commit checkout main merge develop commit commit ``` ���������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/breakingChanges.md�����������������������������0000664�0000000�0000000�00000001334�14332737457�0026177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Breaking changes ### Breaking changes from history version to latest version: ## #1 ```javascript mermaid.initialize({ sequenceDiagram:{ ... } }) ``` has been changed to ```javascript mermaid.initialize({ sequence:{ ... } }) ``` ## #2 In old versions you needed to reference a CSS file in your HTML: ```html <link rel="stylesheet" href="mermaid.min.css" /> ``` or ```html <link rel="stylesheet" href="mermaid.forest.min.css" /> ``` Now it is not needed, and there are no more CSS files in the distribution files. You just: ```javascript mermaid.initialize({ theme: 'forest', }); ``` and it works like a charm because now the CSS is inline with the SVG to allow simpler portability. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/c4c.md�����������������������������������������0000664�0000000�0000000�00000044255�14332737457�0023606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# C4 Diagrams > C4 Diagram: This is an experimental diagram for now. The syntax and properties can change in future releases. Proper documentation will be provided when the syntax is stable. Mermaid's c4 diagram syntax is compatible with plantUML. See example below: ```mermaid-example C4Context title System Context diagram for Internet Banking System Enterprise_Boundary(b0, "BankBoundary0") { Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") Person(customerB, "Banking Customer B") Person_Ext(customerC, "Banking Customer C", "desc") Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1") ``` For an example, see the source code demos/index.html 5 types of C4 charts are supported. - System Context (C4Context) - Container diagram (C4Container) - Component diagram (C4Component) - Dynamic diagram (C4Dynamic) - Deployment diagram (C4Deployment) Please refer to the linked document [C4-PlantUML syntax](https://github.com/plantuml-stdlib/C4-PlantUML/blob/master/README.md) for how to write the c4 diagram. C4 diagram is fixed style, such as css color, so different css is not provided under different skins. updateElementStyle and UpdateElementStyle are written in the diagram last part. updateElementStyle is inconsistent with the original definition and updates the style of the relationship, including the offset of the text label relative to the original position. The layout does not use a fully automated layout algorithm. The position of shapes is adjusted by changing the order in which statements are written. So there is no plan to support the following Layout statements. The number of shapes per row and the number of boundaries can be adjusted using UpdateLayoutConfig. - Layout - - Lay_U, Lay_Up - - Lay_D, Lay_Down - - Lay_L, Lay_Left - - Lay_R, Lay_Right The following unfinished features are not supported in the short term. - [ ] sprite - [ ] tags - [ ] link - [ ] Legend - [x] System Context - - [x] Person(alias, label, ?descr, ?sprite, ?tags, $link) - - [x] Person_Ext - - [x] System(alias, label, ?descr, ?sprite, ?tags, $link) - - [x] SystemDb - - [x] SystemQueue - - [x] System_Ext - - [x] SystemDb_Ext - - [x] SystemQueue_Ext - - [x] Boundary(alias, label, ?type, ?tags, $link) - - [x] Enterprise_Boundary(alias, label, ?tags, $link) - - [x] System_Boundary - [x] Container diagram - - [x] Container(alias, label, ?techn, ?descr, ?sprite, ?tags, $link) - - [x] ContainerDb - - [x] ContainerQueue - - [x] Container_Ext - - [x] ContainerDb_Ext - - [x] ContainerQueue_Ext - - [x] Container_Boundary(alias, label, ?tags, $link) - [x] Component diagram - - [x] Component(alias, label, ?techn, ?descr, ?sprite, ?tags, $link) - - [x] ComponentDb - - [x] ComponentQueue - - [x] Component_Ext - - [x] ComponentDb_Ext - - [x] ComponentQueue_Ext - [x] Dynamic diagram - - [x] RelIndex(index, from, to, label, ?tags, $link) - [x] Deployment diagram - - [x] Deployment_Node(alias, label, ?type, ?descr, ?sprite, ?tags, $link) - - [x] Node(alias, label, ?type, ?descr, ?sprite, ?tags, $link): short name of Deployment_Node() - - [x] Node_L(alias, label, ?type, ?descr, ?sprite, ?tags, $link): left aligned Node() - - [x] Node_R(alias, label, ?type, ?descr, ?sprite, ?tags, $link): right aligned Node() - [x] Relationship Types - - [x] Rel(from, to, label, ?techn, ?descr, ?sprite, ?tags, $link) - - [x] BiRel (bidirectional relationship) - - [x] Rel_U, Rel_Up - - [x] Rel_D, Rel_Down - - [x] Rel_L, Rel_Left - - [x] Rel_R, Rel_Right - - [x] Rel_Back - - [x] RelIndex \* Compatible with C4-Plantuml syntax, but ignores the index parameter. The sequence number is determined by the order in which the rel statements are written. - [ ] Custom tags/stereotypes support and skin param updates - - [ ] AddElementTag(tagStereo, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): Introduces a new element tag. The styles of the tagged elements are updated and the tag is displayed in the calculated legend. - - [ ] AddRelTag(tagStereo, ?textColor, ?lineColor, ?lineStyle, ?sprite, ?techn, ?legendText, ?legendSprite): Introduces a new Relationship tag. The styles of the tagged relationships are updated and the tag is displayed in the calculated legend. - - [x] UpdateElementStyle(elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): This call updates the default style of the elements (component, ...) and creates no additional legend entry. - - [x] UpdateRelStyle(from, to, ?textColor, ?lineColor, ?offsetX, ?offsetY): This call updates the default relationship colors and creates no additional legend entry. Two new parameters, offsetX and offsetY, are added to set the offset of the original position of the text. - - [ ] RoundedBoxShape(): This call returns the name of the rounded box shape and can be used as ?shape argument. - - [ ] EightSidedShape(): This call returns the name of the eight sided shape and can be used as ?shape argument. - - [ ] DashedLine(): This call returns the name of the dashed line and can be used as ?lineStyle argument. - - [ ] DottedLine(): This call returns the name of the dotted line and can be used as ?lineStyle argument. - - [ ] BoldLine(): This call returns the name of the bold line and can be used as ?lineStyle argument. - - [x] UpdateLayoutConfig(?c4ShapeInRow, ?c4BoundaryInRow): New. This call updates the default c4ShapeInRow(4) and c4BoundaryInRow(2). There are two ways to assign parameters with question marks. One uses the non-named parameter assignment method in the order of the parameters, and the other uses the named parameter assignment method, where the name must start with a $ symbol. Example: UpdateRelStyle(from, to, ?textColor, ?lineColor, ?offsetX, ?offsetY) ``` UpdateRelStyle(customerA, bankA, "red", "blue", "-40", "60") UpdateRelStyle(customerA, bankA, $offsetX="-40", $offsetY="60", $lineColor="blue", $textColor="red") UpdateRelStyle(customerA, bankA, $offsetY="60") ``` ## C4 System Context Diagram (C4Context) ```mermaid-example C4Context title System Context diagram for Internet Banking System Enterprise_Boundary(b0, "BankBoundary0") { Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") Person(customerB, "Banking Customer B") Person_Ext(customerC, "Banking Customer C", "desc") Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1") ``` ## C4 Container diagram (C4Container) ```mermaid-example C4Container title Container diagram for Internet Banking System System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system", $tags="v1.0") Person(customer, Customer, "A customer of the bank, with personal bank accounts", $tags="v1.0") Container_Boundary(c1, "Internet Banking") { Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to cutomers via their web browser") Container_Ext(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device") Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA") ContainerDb(database, "Database", "SQL Database", "Stores user registration information, hashed auth credentials, access logs, etc.") ContainerDb_Ext(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API") } System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") Rel(customer, web_app, "Uses", "HTTPS") UpdateRelStyle(customer, web_app, $offsetY="60", $offsetX="90") Rel(customer, spa, "Uses", "HTTPS") UpdateRelStyle(customer, spa, $offsetY="-40") Rel(customer, mobile_app, "Uses") UpdateRelStyle(customer, mobile_app, $offsetY="-30") Rel(web_app, spa, "Delivers") UpdateRelStyle(web_app, spa, $offsetX="130") Rel(spa, backend_api, "Uses", "async, JSON/HTTPS") Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS") Rel_Back(database, backend_api, "Reads from and writes to", "sync, JDBC") Rel(email_system, customer, "Sends e-mails to") UpdateRelStyle(email_system, customer, $offsetX="-45") Rel(backend_api, email_system, "Sends e-mails using", "sync, SMTP") UpdateRelStyle(backend_api, email_system, $offsetY="-60") Rel(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS") UpdateRelStyle(backend_api, banking_system, $offsetY="-50", $offsetX="-140") ``` ## C4 Component diagram (C4Component) ```mermaid-example C4Component title Component diagram for Internet Banking System - API Application Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.") Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile mobile device.") ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") Container_Boundary(api, "API Application") { Component(sign, "Sign In Controller", "MVC Rest Controller", "Allows users to sign in to the internet banking system") Component(accounts, "Accounts Summary Controller", "MVC Rest Controller", "Provides customers with a summary of their bank accounts") Component(security, "Security Component", "Spring Bean", "Provides functionality related to singing in, changing passwords, etc.") Component(mbsfacade, "Mainframe Banking System Facade", "Spring Bean", "A facade onto the mainframe banking system.") Rel(sign, security, "Uses") Rel(accounts, mbsfacade, "Uses") Rel(security, db, "Read & write to", "JDBC") Rel(mbsfacade, mbs, "Uses", "XML/HTTPS") } Rel_Back(spa, sign, "Uses", "JSON/HTTPS") Rel(spa, accounts, "Uses", "JSON/HTTPS") Rel(ma, sign, "Uses", "JSON/HTTPS") Rel(ma, accounts, "Uses", "JSON/HTTPS") UpdateRelStyle(spa, sign, $offsetY="-40") UpdateRelStyle(spa, accounts, $offsetX="40", $offsetY="40") UpdateRelStyle(ma, sign, $offsetX="-90", $offsetY="40") UpdateRelStyle(ma, accounts, $offsetY="-40") UpdateRelStyle(sign, security, $offsetX="-160", $offsetY="10") UpdateRelStyle(accounts, mbsfacade, $offsetX="140", $offsetY="10") UpdateRelStyle(security, db, $offsetY="-40") UpdateRelStyle(mbsfacade, mbs, $offsetY="-40") ``` ## C4 Dynamic diagram (C4Dynamic) ```mermaid-example C4Dynamic title Dynamic diagram for Internet Banking System - API Application ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.") Container_Boundary(b, "API Application") { Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.") Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.") } Rel(c1, c2, "Submits credentials to", "JSON/HTTPS") Rel(c2, c3, "Calls isAuthenticated() on") Rel(c3, c4, "select * from users where username = ?", "JDBC") UpdateRelStyle(c1, c2, $textColor="red", $offsetY="-40") UpdateRelStyle(c2, c3, $textColor="red", $offsetX="-40", $offsetY="60") UpdateRelStyle(c3, c4, $textColor="red", $offsetY="-40", $offsetX="10") ``` ## C4 Deployment diagram (C4Deployment) ```mermaid-example C4Deployment title Deployment Diagram for Internet Banking System - Live Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){ Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.") } Deployment_Node(comp, "Customer's computer", "Mircosoft Windows or Apple macOS"){ Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox,<br/> Apple Safari or Microsoft Edge"){ Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.") } } Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){ Deployment_Node(dn, "bigbank-api*** x8", "Ubuntu 16.04 LTS"){ Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){ Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.") } } Deployment_Node(bb2, "bigbank-web*** x4", "Ubuntu 16.04 LTS"){ Deployment_Node(apache2, "Apache Tomcat", "Apache Tomcat 8.x"){ Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.") } } Deployment_Node(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS"){ Deployment_Node(oracle, "Oracle - Primary", "Oracle 12c"){ ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") } } Deployment_Node(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS") { Deployment_Node(oracle2, "Oracle - Secondary", "Oracle 12c") { ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") } } } Rel(mobile, api, "Makes API calls to", "json/HTTPS") Rel(spa, api, "Makes API calls to", "json/HTTPS") Rel_U(web, spa, "Delivers to the customer's web browser") Rel(api, db, "Reads from and writes to", "JDBC") Rel(api, db2, "Reads from and writes to", "JDBC") Rel_R(db, db2, "Replicates data to") UpdateRelStyle(spa, api, $offsetY="-40") UpdateRelStyle(web, spa, $offsetY="-40") UpdateRelStyle(api, db, $offsetY="-20", $offsetX="5") UpdateRelStyle(api, db2, $offsetX="-40", $offsetY="-20") UpdateRelStyle(db, db2, $offsetY="-10") ``` ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/classDiagram.md��������������������������������0000664�0000000�0000000�00000040325�14332737457�0025521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Class diagrams > "In software engineering, a class diagram in the Unified Modeling Language (UML) is a type of static structure diagram that describes the structure of a system by showing the system's classes, their attributes, operations (or methods), and the relationships among objects." > Wikipedia The class diagram is the main building block of object-oriented modeling. It is used for general conceptual modeling of the structure of the application, and for detailed modeling to translate the models into programming code. Class diagrams can also be used for data modeling. The classes in a class diagram represent both the main elements, interactions in the application, and the classes to be programmed. Mermaid can render class diagrams. ```mermaid-example classDiagram Animal <|-- Duck Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } ``` ## Syntax ### Class UML provides mechanisms to represent class members, such as attributes and methods, and additional information about them. A single instance of a class in the diagram contains three compartments: - The top compartment contains the name of the class. It is printed in bold and centered, and the first letter is capitalized. It may also contain optional annotation text describing the nature of the class. - The middle compartment contains the attributes of the class. They are left-aligned and the first letter is lowercase. - The bottom compartment contains the operations the class can execute. They are also left-aligned and the first letter is lowercase. ```mermaid-example classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount) ``` ## Define a class There are two ways to define a class: - Explicitly using keyword **class** like `class Animal` which would define the Animal class. - Via a **relationship** which defines two classes at a time along with their relationship. For instance, `Vehicle <|-- Car`. ```mermaid-example classDiagram class Animal Vehicle <|-- Car ``` Naming convention: a class name should be composed only of alphanumeric characters (including unicode), and underscores. ## Defining Members of a class UML provides mechanisms to represent class members such as attributes and methods, as well as additional information about them. Mermaid distinguishes between attributes and functions/methods based on if the **parenthesis** `()` are present or not. The ones with `()` are treated as functions/methods, and all others as attributes. There are two ways to define the members of a class, and regardless of whichever syntax is used to define the members, the output will still be same. The two different ways are : - Associate a member of a class using **:** (colon) followed by member name, useful to define one member at a time. For example: ```mermaid-example classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount) ``` - Associate members of a class using **{}** brackets, where members are grouped within curly brackets. Suitable for defining multiple members at once. For example: ```mermaid-example classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) } ``` #### Return Type Optionally you can end a method/function definition with the data type that will be returned (note: there must be a space between the final `)` and the return type). An example: ```mermaid-example classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int } ``` #### Generic Types Members can be defined using generic types, such as `List<int>`, for fields, parameters, and return types by enclosing the type within `~` (**tilde**). Note: **nested** type declarations such as `List<List<int>>` are not currently supported. Generics can be represented as part of a class definition and also in the parameters or the return value of a method/function: ```mermaid-example classDiagram class Square~Shape~{ int id List~int~ position setPoints(List~int~ points) getPoints() List~int~ } Square : -List~string~ messages Square : +setMessages(List~string~ messages) Square : +getMessages() List~string~ ``` #### Return Type Optionally you can end the method/function definition with the data type that will be returned. #### Visibility To describe the visibility (or encapsulation) of an attribute or method/function that is a part of a class (i.e. a class member), optional notation may be placed before that members' name: - `+` Public - `-` Private - `#` Protected - `~` Package/Internal > _note_ you can also include additional _classifiers_ to a method definition by adding the following notation to the _end_ of the method, i.e.: after the `()`: > > - `*` Abstract e.g.: `someAbstractMethod()*` > - `$` Static e.g.: `someStaticMethod()$` > _note_ you can also include additional _classifiers_ to a field definition by adding the following notation to the end of its name: > > - `$` Static e.g.: `String someField$` ## Defining Relationship A relationship is a general term covering the specific types of logical connections found on class and object diagrams. ``` [classA][Arrow][ClassB] ``` There are eight different types of relations defined for classes under UML which are currently supported: | Type | Description | | ----- | ------------- | | <\|-- | Inheritance | | \*-- | Composition | | o-- | Aggregation | | --> | Association | | -- | Link (Solid) | | ..> | Dependency | | ..\|> | Realization | | .. | Link (Dashed) | ```mermaid-example classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP ``` We can use the labels to describe the nature of the relation between two classes. Also, arrowheads can be used in the opposite direction as well: ```mermaid-example classDiagram classA --|> classB : Inheritance classC --* classD : Composition classE --o classF : Aggregation classG --> classH : Association classI -- classJ : Link(Solid) classK ..> classL : Dependency classM ..|> classN : Realization classO .. classP : Link(Dashed) ``` ### Labels on Relations It is possible to add label text to a relation: ``` [classA][Arrow][ClassB]:LabelText ``` ```mermaid-example classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation ``` ### Two-way relations Relations can logically represent an N:M association: ```mmd classDiagram Animal <|--|> Zebra ``` Here is the syntax: ``` [Relation Type][Link][Relation Type] ``` Where `Relation Type` can be one of: | Type | Description | | ---- | ----------- | | <\| | Inheritance | | \* | Composition | | o | Aggregation | | > | Association | | < | Association | | \|> | Realization | And `Link` can be one of: | Type | Description | | ---- | ----------- | | -- | Solid | | .. | Dashed | ## Cardinality / Multiplicity on relations Multiplicity or cardinality in class diagrams indicates the number of instances of one class that can be linked to an instance of the other class. For example, each company will have one or more employees (not zero), and each employee currently works for zero or one companies. Multiplicity notations are placed near the end of an association. The different cardinality options are : - `1` Only 1 - `0..1` Zero or One - `1..*` One or more - `*` Many - `n` n {where n>1} - `0..n` zero to n {where n>1} - `1..n` one to n {where n>1} Cardinality can be easily defined by placing the text option within quotes `"` before or after a given arrow. For example: ``` [classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText ``` ```mermaid-example classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains ``` ## Annotations on classes It is possible to annotate classes with markers to provide additional metadata about the class. This can give a clearer indication about its nature. Some common annotations include: - `<<Interface>>` To represent an Interface class - `<<Abstract>>` To represent an abstract class - `<<Service>>` To represent a service class - `<<Enumeration>>` To represent an enum Annotations are defined within the opening `<<` and closing `>>`. There are two ways to add an annotation to a class, and either way the output will be same: - In a **_separate line_** after a class is defined: ```mermaid-example classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw() ``` - In a **_nested structure_** along with the class definition: ```mermaid-example classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK } ``` ## Comments Comments can be entered within a class diagram, which will be ignored by the parser. Comments need to be on their own line, and must be prefaced with `%%` (double percent signs). Any text until the next newline will be treated as a comment, including any class diagram syntax. ```mmd classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() } ``` ## Setting the direction of the diagram With class diagrams you can use the direction statement to set the direction in which the diagram will render: ```mermaid-example classDiagram direction RL class Student { -idCard : IdCard } class IdCard{ -id : int -name : string } class Bike{ -id : int -name : string } Student "1" --o "1" IdCard : carries Student "1" --o "1" Bike : rides ``` ## Interaction It is possible to bind a click event to a node. The click can lead to either a javascript callback or to a link which will be opened in a new browser tab. **Note**: This functionality is disabled when using `securityLevel='strict'` and enabled when using `securityLevel='loose'`. You would define these actions on a separate line after all classes have been declared. ``` action className "reference" "tooltip" click className call callback() "tooltip" click className href "url" "tooltip" ``` - _action_ is either `link` or `callback`, depending on which type of interaction you want to have called - _className_ is the id of the node that the action will be associated with - _reference_ is either the url link, or the function name for callback. - (_optional_) tooltip is a string to be displayed when hovering over element (note: The styles of the tooltip are set by the class .mermaidTooltip.) - note: callback function will be called with the nodeId as parameter. ### Examples _URL Link:_ ```mmd classDiagram class Shape link Shape "https://www.github.com" "This is a tooltip for a link" class Shape2 click Shape2 href "https://www.github.com" "This is a tooltip for a link" ``` _Callback:_ ```mmd classDiagram class Shape callback Shape "callbackFunction" "This is a tooltip for a callback" class Shape2 click Shape2 call callbackFunction() "This is a tooltip for a callback" ``` ```html <script> const callbackFunction = function () { alert('A callback was triggered'); }; </script> ``` ```mermaid classDiagram class Class01 class Class02 callback Class01 "callbackFunction" "Callback tooltip" link Class02 "https://www.github.com" "This is a link" class Class03 class Class04 click Class03 call callbackFunction() "Callback tooltip" click Class04 href "https://www.github.com" "This is a link" ``` > **Success** The tooltip functionality and the ability to link to urls are available from version 0.5.2. Beginner's tip—a full example using interactive links in an HTML page: ```html <body> <pre class="mermaid"> classDiagram Animal <|-- Duck Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } callback Duck callback "Tooltip" link Zebra "https://www.github.com" "This is a link" </pre> <script> const callback = function () { alert('A callback was triggered'); }; const config = { startOnLoad: true, securityLevel: 'loose', }; mermaid.initialize(config); </script> </body> ``` ## Styling ### Styling a node It is possible to apply specific styles such as a thicker border or a different background color to individual nodes. This is done by predefining classes in css styles that can be applied from the graph definition: ```html <style> .cssClass > rect { fill: #ff0000; stroke: #ffff00; stroke-width: 4px; } </style> ``` Then attaching that class to a specific node: ``` cssClass "nodeId1" cssClass; ``` It is also possible to attach a class to a list of nodes in one statement: ``` cssClass "nodeId1,nodeId2" cssClass; ``` A shorter form of adding a class is to attach the classname to the node using the `:::` operator: ```mermaid-example classDiagram class Animal:::cssClass ``` Or: ```mermaid-example classDiagram class Animal:::cssClass { -int sizeInFeet -canEat() } ``` ?> cssClasses cannot be added using this shorthand method at the same time as a relation statement. ?> Due to limitations with existing markup for class diagrams, it is not currently possible to define css classes within the diagram itself. **_Coming soon!_** ### Default Styles The main styling of the class diagram is done with a preset number of css classes. During rendering these classes are extracted from the file located at src/themes/class.scss. The classes used here are described below: | Class | Description | | ------------------ | ----------------------------------------------------------------- | | g.classGroup text | Styles for general class text | | classGroup .title | Styles for general class title | | g.classGroup rect | Styles for class diagram rectangle | | g.classGroup line | Styles for class diagram line | | .classLabel .box | Styles for class label box | | .classLabel .label | Styles for class label text | | composition | Styles for composition arrow head and arrow line | | aggregation | Styles for aggregation arrow head and arrow line(dashed or solid) | | dependency | Styles for dependency arrow head and arrow line | #### Sample stylesheet ```scss body { background: white; } g.classGroup text { fill: $nodeBorder; stroke: none; font-family: 'trebuchet ms', verdana, arial; font-family: var(--mermaid-font-family); font-size: 10px; .title { font-weight: bolder; } } g.classGroup rect { fill: $nodeBkg; stroke: $nodeBorder; } g.classGroup line { stroke: $nodeBorder; stroke-width: 1; } .classLabel .box { stroke: none; stroke-width: 0; fill: $nodeBkg; opacity: 0.5; } .classLabel .label { fill: $nodeBorder; font-size: 10px; } .relation { stroke: $nodeBorder; stroke-width: 1; fill: none; } @mixin composition { fill: $nodeBorder; stroke: $nodeBorder; stroke-width: 1; } #compositionStart { @include composition; } #compositionEnd { @include composition; } @mixin aggregation { fill: $nodeBkg; stroke: $nodeBorder; stroke-width: 1; } #aggregationStart { @include aggregation; } #aggregationEnd { @include aggregation; } #dependencyStart { @include composition; } #dependencyEnd { @include composition; } #extensionStart { @include composition; } #extensionEnd { @include composition; } ``` ## Configuration `Coming soon` �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/developer-docs/��������������������������������0000775�0000000�0000000�00000000000�14332737457�0025514�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/developer-docs/configuration.md����������������0000664�0000000�0000000�00000002226�14332737457�0030707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configuration When mermaid starts, configuration is extracted to determine a configuration to be used for a diagram. There are 3 sources for configuration: - The default configuration - Overrides at the site level are set by the initialize call, and will be applied to all diagrams in the site/app. The term for this is the **siteConfig**. - Directives - diagram authors can update select configuration parameters directly in the diagram code via directives. These are applied to the render config. **The render config** is configuration that is used when rendering by applying these configurations. ## Theme configuration ## Starting mermaid ```mermaid sequenceDiagram Site->>mermaid: initialize Site->>mermaid: content loaded mermaid->>mermaidAPI: init ``` ## Initialize The initialize call is applied **only once**. It is called by the site integrator in order to override the default configuration at a site level. ## configApi.reset This method resets the configuration for a diagram to the overall site configuration, which is the configuration provided by the site integrator. Before each rendering of a diagram, reset is called at the very beginning. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/development.md���������������������������������0000664�0000000�0000000�00000015470�14332737457�0025454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Development and Contribution 🙌 So you want to help? That's great! ![Image of happy people jumping with excitement](https://media.giphy.com/media/BlVnrxJgTGsUw/giphy.gif) Here are a few things to get you started on the right path. **The Docs Structure is dictated by [sidebar.md](https://github.com/mermaid-js/mermaid/edit/develop/src/docs/_sidebar.md)** **Note: Commits and Pull Requests should be directed to the develop branch.** ## Branching Mermaid uses a [Git Flow](https://guides.github.com/introduction/flow/)–inspired approach to branching. So development is done in the `develop` branch. Once development is done we branch a `release` branch from `develop` for testing. Once the release happens we merge the `release` branch with `master` and kill the `release` branch. This means that **you should branch off your pull request from develop** and direct all Pull Requests to it. ## Contributing Code We make all changes via Pull Requests. As we have many Pull Requests from developers new to mermaid, we have put in place a process, wherein _knsv, Knut Sveidqvist_ is the primary reviewer of changes and merging pull requests. The process is as follows: - Large changes reviewed by knsv or other developer asked to review by knsv - Smaller, low-risk changes like dependencies, documentation, etc. can be merged by active collaborators - Documentation (we encourage updates to the `src/docs` folder; you can submit them via direct commits) When you commit code, create a branch with the following naming convention: Start with the type, such as **feature** or **bug**, followed by the issue number for reference, and a text that describes the issue. **One example:** `feature/945_state_diagrams` **Another example:** `bug/123_nasty_bug_branch` ## Contributing to Documentation If it is not in the documentation, it's like it never happened. Wouldn't that be sad? With all the effort that was put into the feature? The docs are located in the `src/docs` folder and are written in Markdown. Just pick the right section and start typing. If you want to propose changes to the structure of the documentation, such as adding a new section or a new file you do that via the **[sidebar](https://github.com/mermaid-js/mermaid/edit/develop/src/docs/_sidebar.md)**. > **All the documents displayed in the GitHub.io page are listed in [sidebar.md](https://github.com/mermaid-js/mermaid/edit/develop/src/docs/_sidebar.md)**. The contents of [https://mermaid-js.github.io/mermaid/](https://mermaid-js.github.io/mermaid/) are based on the docs from the `master` branch. Updates committed to the `master` branch are reflected in the [Mermaid Docs](https://mermaid-js.github.io/mermaid/) once released. ## How to Contribute to Documentation We are a little less strict here, it is OK to commit directly in the `develop` branch if you are a collaborator. The documentation is located in the `src/docs` directory and organized according to relevant subfolder. The `docs` folder will be automatically generated when committing to `src/docs` and should not be edited manually. We encourage contributions to the documentation at [mermaid-js/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/src/docs). We publish documentation using GitHub Pages with [Docsify](https://www.youtube.com/watch?v=TV88lp7egMw&t=3s) ### Add Unit Tests for Parsing This is important so that, if someone that does not know about this great feature suggests a change to the grammar, they get notified early on when that change breaks the parser. Another important aspect is that, without proper parsing, tests refactoring is pretty much impossible. ### Add E2E Tests This tests the rendering and visual appearance of the diagrams. This ensures that the rendering of that feature in the e2e will be reviewed in the release process going forward. Less chance that it breaks! To start working with the e2e tests: 1. Run `pnpm run dev` to start the dev server 2. Start **Cypress** by running `pnpm exec cypress open` in the **mermaid** folder. The rendering tests are very straightforward to create. There is a function `imgSnapshotTest`, which takes a diagram in text form and the mermaid options, and it renders that diagram in Cypress. When running in CI it will take a snapshot of the rendered diagram and compare it with the snapshot from last build and flag it for review if it differs. This is what a rendering test looks like: ```js it('should render forks and joins', () => { imgSnapshotTest( ` stateDiagram state fork_state <<fork>> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <<join>> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] `, { logLevel: 0 } ); cy.get('svg'); }); ``` ### Any Questions or Suggestions? After logging in at [GitHub.com](https://www.github.com), open or append to an issue [using the GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Documentation%22). ### How to Contribute a Suggestion Markdown is used to format the text, for more information about Markdown [see the GitHub Markdown help page](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax). To edit Docs on your computer: 1. Find the Markdown file (.md) to edit in the [mermaid-js/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/src/docs) directory in the `develop` branch. 2. Create a fork of the develop branch. 3. Make changes or add new documentation. 4. Commit changes to your fork and push it to GitHub. 5. Create a Pull Request of your fork. To edit Docs on GitHub: 1. Login to [GitHub.com](https://www.github.com). 2. Navigate to [mermaid-js/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/src/docs). 3. To edit a file, click the pencil icon at the top-right of the file contents panel. 4. Describe what you changed in the **Propose file change** section, located at the bottom of the page. 5. Submit your changes by clicking the button **Propose file change** at the bottom (by automatic creation of a fork and a new branch). 6. Create a Pull Request of your newly forked branch by clicking the green **Create Pull Request** button. ## Last Words Don't get daunted if it is hard in the beginning. We have a great community with only encouraging words. So, if you get stuck, ask for help and hints in the Slack forum. If you want to show off something good, show it off there. [Join our Slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) ![Image of superhero wishing you good luck](https://media.giphy.com/media/l49JHz7kJvl6MCj3G/giphy.gif) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/diagrams-and-syntax-and-examples/��������������0000775�0000000�0000000�00000000000�14332737457�0031030�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/diagrams-and-syntax-and-examples/flowchart.md��0000664�0000000�0000000�00000035222�14332737457�0033347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- sort: 3 title: Flowchart --- # Flowcharts - Basic Syntax ## Graph This statement declares the direction of the flowchart, either from top to bottom (`TD` or `TB`): ```mermaid-example graph TD Start --> Stop ``` or left to right (`LR`): ```mermaid-example graph LR Start --> Stop ``` ## Flowchart Orientation Possible FlowChart orientations are: - TB - top to bottom - TD - top-down (same as top to bottom) - BT - bottom to top - RL - right to left - LR - left to right ## Flowcharts This renders a flowchart that allows for features such as: more arrow types, multi directional arrows, and linking to and from subgraphs. Apart from the graph type, the syntax is the same. This is currently experimental. When the beta period is over, both the graph and flowchart keywords will render in this new way. At this point it is OK to start beta testing flowcharts. > **Important note** Do not type the word "end" as a Flowchart node. Capitalize all or any one the letters to keep the flowchart from breaking, i.e, "End" or "END". Or you can apply this [workaround](https://github.com/mermaid-js/mermaid/issues/1444#issuecomment-639528897).\*\* ## Nodes and shapes ### A node (default) ```mermaid-example graph LR id ``` > **Note** The id is what is displayed in the box. ### A node with text It is also possible to set text in the box that differs from the id. If this is done several times, only the last text found for the node will be rendered. Also if you define edges for the node later on, you can omit text definitions. The text previously defined will be used when rendering the box. ```mermaid-example graph LR id1[This is the text in the box] ``` ## Node Shapes ### A node with round edges ```mermaid-example graph LR id1(This is the text in the box) ``` ### A stadium-shaped node ```mermaid-example graph LR id1([This is the text in the box]) ``` ### A node in a subroutine shape ```mermaid-example graph LR id1[[This is the text in the box]] ``` ### A node in a cylindrical shape ```mermaid-example graph LR id1[(Database)] ``` ### A node in the form of a circle ```mermaid-example graph LR id1((This is the text in the circle)) ``` ### A node in an asymmetric shape ```mermaid-example graph LR id1>This is the text in the box] ``` Currently it is only possible to render the shape above, and not its mirror. _This might change with future releases._ ### A node (rhombus) ```mermaid-example graph LR id1{This is the text in the box} ``` ### A hexagonal node ```mermaid-example graph LR id1{{This is the text in the box}} ``` ### Parallelogram ```mermaid-example graph TD id1[/This is the text in the box/] ``` ### Parallelogram alt ```mermaid-example graph TD id1[\This is the text in the box\] ``` ### Trapezoid ```mermaid-example graph TD A[/Christmas\] ``` ### Trapezoid alt ```mermaid-example graph TD B[\Go shopping/] ``` ## Links between nodes Nodes can be connected with links/edges. It is possible to have different types of links, or attach a text string on a link. ### Link with arrow head ```mermaid-example graph LR A-->B ``` ### Open link ```mermaid-example graph LR A --- B ``` ### Text on links ```mermaid-example graph LR A-- This is the text! ---B ``` or ```mermaid-example graph LR A---|This is the text|B ``` ### Link with arrow head and text ```mermaid-example graph LR A-->|text|B ``` or ```mermaid-example graph LR A-- text -->B ``` ### Dotted link ```mermaid-example graph LR; A-.->B; ``` ### Dotted link with text ```mermaid-example graph LR A-. text .-> B ``` ### Thick link ```mermaid-example graph LR A ==> B ``` ### Thick link with text ```mermaid-example graph LR A == text ==> B ``` ### Chaining of links It is possible to declare many links on the same line as per below: ```mermaid-example graph LR A -- text --> B -- text2 --> C ``` It is also possible to declare multiple nodes links in the same line as per below: ```mermaid-example graph LR a --> b & c--> d ``` You can then describe dependencies in a very expressive way. Like the one-liner below: ```mermaid-example graph TB A & B--> C & D ``` If you describe the same diagram using the the basic syntax, it will take four lines: ```mmd graph TB A --> C A --> D B --> C B --> D ``` A word of warning, one could go overboard with this, making the graph harder to read in markdown form. The Swedish word `lagom` comes to mind. It means, not too much and not too little. This goes for expressive syntaxes as well. ### New arrow types When using flowchart instead of graph there are new types of arrows supported as per below: ```mermaid-example flowchart LR A --o B B --x C ``` ### Multi directional arrows When using flowchart instead of graph there is the possibility to use multidirectional arrows. ```mermaid-example flowchart LR A o--o B B <--> C C x--x D ``` ### Minimum length of a link Each node in the flowchart is ultimately assigned to a rank in the rendered graph, i.e. to a vertical or horizontal level (depending on the flowchart orientation), based on the nodes to which it is linked. By default, links can span any number of ranks, but you can ask for any link to be longer than the others by adding extra dashes in the link definition. In the following example, two extra dashes are added in the link from node _B_ to node _E_, so that it spans two more ranks than regular links: ```mermaid-example graph TD A[Start] --> B{Is it?}; B -->|Yes| C[OK]; C --> D[Rethink]; D --> B; B ---->|No| E[End]; ``` > **Note** The rendering engine may cause some links to be longer than > the number of ranks requested in order to accommodate the overall topology. When the link label is written in the middle of the link, the extra dashes must be added on the right side of the link. The following example is equivalent to the previous one: ```mermaid-example graph TD A[Start] --> B{Is it?}; B -- Yes --> C[OK]; C --> D[Rethink]; D --> B; B -- No ----> E[End]; ``` For dotted or thick links, the characters to add are equals signs or dots, as summed up in the following table: | Length | 1 | 2 | 3 | | ----------------- | :----: | :-----: | :------: | | Normal | `---` | `----` | `-----` | | Normal with arrow | `-->` | `--->` | `---->` | | Thick | `===` | `====` | `=====` | | Thick with arrow | `==>` | `===>` | `====>` | | Dotted | `-.-` | `-..-` | `-...-` | | Dotted with arrow | `-.->` | `-..->` | `-...->` | ## Special characters that break syntax Use quotes around text in order to render more troublesome characters, as in the example below: ```mermaid-example graph LR id1["This is the (text) in the box"] ``` ### Entity codes to escape characters Special characters (including Unicode) can be included by using HTML escaping syntax: ```mermaid-example graph LR A["A double quote:#quot;"] -->B["A dec char:#9829;"] ``` ## Subgraphs ``` subgraph title graph definition end ``` An example: ```mermaid-example graph TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end ``` You can also set an explicit id for the subgraph: ```mermaid-example graph TB c1-->a2 subgraph ide1 [one] a1-->a2 end ``` ## Flowcharts With the graphtype `flowchart` it is also possible to set edges to and from subgraphs: ```mermaid-example flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end one --> two three --> two two --> c2 ``` ## Interaction A node can have click events bound that lead to either a JavaScript callback or to open a new browser tab. **Note**: This functionality is disabled when using `securityLevel='strict'` and enabled when using `securityLevel='loose'`. ``` click nodeId callback click nodeId call callback() ``` - nodeId is the id of the node - `callback` is the name of a JavaScript function defined on the page displaying the graph. The function will be called with the nodeId as an incoming parameter. ```html <script> const callback = function (nodeId) { alert('A callback was triggered on ' + nodeId); }; </script> ``` Examples of tooltip usage: The tooltip text is surrounded in double quotes. The styles of the tooltip are set by the class .mermaidTooltip. ```mermaid-example graph LR; A-->B; B-->C; C-->D; click A callback "Tooltip for a callback" click B "https://www.github.com" "This is a tooltip for a link" click A call callback() "Tooltip for a callback" click B href "https://www.github.com" "This is a tooltip for a link" ``` > **Success** The tooltip functionality and the ability to link to urls are available from version 0.5.2. ?> Due to limitations with how Docsify handles JavaScript callback functions, an alternate working demo for the above code can be viewed at [this jsfiddle](https://jsfiddle.net/s37cjoau/3/). Links are opened in the same browser tab/window by default. It is possible to change this by adding a link target to the click definition (`_self`, `_blank`, `_parent` and `_top` are supported): ```mermaid-example graph LR; A-->B; B-->C; C-->D; D-->E; click A "https://www.github.com" _blank click B "https://www.github.com" "Open this in a new tab" _blank click C href "https://www.github.com" _blank click D href "https://www.github.com" "Open this in a new tab" _blank ``` Beginner's tip—here's a full example of using interactive links in HTML: ```html <body> <pre class="mermaid"> graph LR; A-->B; B-->C; C-->D; click A callback "Tooltip" click B "https://www.github.com" "This is a link" click C call callback() "Tooltip" click D href "https://www.github.com" "This is a link" </pre> <script> const callback = function () { alert('A callback was triggered'); }; const config = { startOnLoad: true, flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'cardinal', }, securityLevel: 'loose', }; mermaid.initialize(config); </script> </body> ``` ### Comments Comments can be entered within a flow diagram, which will be ignored by the parser. Comments need to be on their own line, and must be prefaced with `%%` (double percent signs). Any text until the next newline will be treated as a comment, including all punctuation and any flow syntax. ```mmd graph LR %% this is a comment A -- text --> B{node} A -- text --> B -- text2 --> C ``` ## Styling and classes ### Styling links It is possible to style links. For instance, you might want to style a link that is going backwards in the flow. As links have no ids in the same way as nodes, some other way of attaching style is required. So instead of ids, the order number of when the link was defined in the graph is used, starting with zero. Here's a linkStyle statement that would apply style to the fourth link in the graph: ``` linkStyle 3 stroke:#ff3,stroke-width:4px,color:red; ``` You can specify a `default` to apply to all links, or you can give a comma-separated list of link order numbers. Instead of giving a styles option, you can also use custom d3 curve types with the following syntax: ``` linkStyle default|numList|num interpolate curveType ``` If you want to add both D3 and style options, instead of writing: ``` linkStyle default interpolate cardinal linkStyle default stroke:#ff3,stroke-width:4px,color:red; ``` You can combine them: ``` linkStyle default interpolate cardinal stroke:#ff3,stroke-width:4px,color:red; ``` ### Styling a node It is possible to apply specific styles such as a thicker border or a different background color to a node. ```mermaid-example graph LR id1(Start)-->id2(Stop) style id1 fill:#f9f,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5 ``` #### Classes More convenient than defining the style every time is to define a class of styles and attach this class reference to multiple nodes. here's a class definition: ``` classDef className fill:#f9f,stroke:#333,stroke-width:4px; ``` and then attaching this class to a node is simply: ``` class nodeId1 className; ``` It is also possible to attach a class to multiple nodes in one statement: ``` class nodeId1,nodeId2 className; ``` An even shorter form of adding a class is to attach the classname to the node using the `:::`operator: ```mermaid-example graph LR A:::someclass --> B classDef someclass fill:#f96; ``` ### Css classes It is also possible to predefine classes in css styles that can be applied from the graph definition: **Example style** ```css .cssClass > rect { fill: #ff0000; stroke: #ffff00; stroke-width: 4px; } ``` **Example definition** ```mermaid-example graph LR; A-->B[AAA<span>BBB</span>]; B-->D; class A cssClass; ``` ### Default class If a class is named `default` it will be assigned to all nodes that do not have a specific class definition. ``` classDef default fill:#f9f,stroke:#333,stroke-width:4px; ``` ## Basic support for fontawesome It is possible to add icons from fontawesome. These are accessed via the syntax fa:#icon-class-name#. ```mermaid-example graph TD B["fa:fa-twitter for peace"] B-->C[fa:fa-ban forbidden] B-->D(fa:fa-spinner); B-->E(A fa:fa-camera-retro perhaps?); ``` ## Graph declarations with spaces between vertices and link and without semicolon - After release 0.2.16, graph declaration statements do not need to end with a semicolon. (And they can continue to have the ending semicolon—it has now just become optional.) So the below graph declaration is valid along with the old declarations. - A single space is allowed between vertices and the link, however there should not be any space between a vertex and its text, or a link and its text. The old syntax of graph declarations will also work, so this new feature is optional and is introduced to improve readability. Below is an example of the new way to declare graph edges. This is valid alongside any old-style declarations of graph edges. ```mermaid-example graph LR A[Hard edge] -->|Link text| B(Round edge) B --> C{Decision} C -->|One| D[Result one] C -->|Two| E[Result two] ``` ## Configuration... Is it possible to adjust the width of the rendered flowchart. This is done by defining **mermaid.flowchartConfig**, or by the CLI to use a json file with the configuration (which is described in the mermaidCLI page). In Javascript config parameters can be set by using `mermaid.flowchartConfig`: ```javascript mermaid.flowchartConfig = { width: '100%', }; ``` ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/directives.md����������������������������������0000664�0000000�0000000�00000017410�14332737457�0025267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Directives ## Directives Directives gives a diagram author the capability to alter the appearance of a diagram before rendering by changing the applied configuration. The significance of having directives is that you have them available while writing the diagram, and can modify the default global and diagram specific configurations. So, directives are applied on top of the default configurations. The beauty of directives is that you can use them to alter configuration settings for a specific diagram, i.e. at an individual level. While directives allow you to change most of the default configuration settings, there are some that are not available, that too for security reasons. Also, you do have the _option to define the set of configurations_ that you would allow to be available to the diagram author for overriding with help of directives. ## Types of Directives options Mermaid basically supports two types of configuration options to be overridden by directives. 1. _General/Top Level configurations_ : These are the configurations that are available and applied to all the diagram. **Some of the most important top-level** configurations are: - theme - fontFamily - logLevel - securityLevel - startOnLoad - secure 2. _Diagram specific configurations_ : These are the configurations that are available and applied to a specific diagram. For each diagram there are specific configuration that will alter how that particular diagram looks and behaves. For example, `mirrorActors` is a configuration that is specific to the `SequenceDiagram` and alter whether the actors are mirrored or not. So this config is available only for the `SequenceDiagram` type. **NOTE:** These options listed here are not all the configuration options. To get hold of all the configuration options, please refer to the [defaultConfig.js](https://github.com/mermaid-js/mermaid/blob/develop/src/defaultConfig.js) in the source code. ``` Soon we plan to publish a complete list of top-level configurations & all the diagram specific configurations, with their possible values in the docs ``` ## Declaring directives Now that we have defined the types of configurations that are available, we can learn how to declare directives. A directive always starts and end `%%` sign with directive text in between, like `%% {directive_text} %%`. Here the structure of a directive text is like a nested key-value pair map or a JSON object with root being _init_. Where all the general configurations are defined in the top level, and all the diagram specific configurations are defined one level deeper with diagram type as key/root for that section. Following code snippet shows the structure of a directive: ``` %%{ init: { "theme": "dark", "fontFamily": "monospace", "logLevel": "info", "flowchart": { "htmlLabels": true, "curve": "linear" }, "sequence": { "mirrorActors": true } } }%% ``` You can also define the directives in a single line, like this: ``` %%{init: { **insert argument here**}}%% ``` For example, the following code snippet: ``` %%{init: { "sequence": { "mirrorActors":false }}}%% ``` **Notes:** The json object that is passed as {**argument** } must be valid key value pairs and encased in quotation marks or it will be ignored. Valid Key Value pairs can be found in config. Example with a simple graph: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'dark' } }%% graph LR A-->B ``` Here the directive declaration will set the `logLevel` to `debug` and the `theme` to `dark` for a rendered mermaid diagram, changing the appearance of the diagram itself. Note: You can use 'init' or 'initialize' as both acceptable as init directives. Also note that `%%init%%` and `%%initialize%%` directives will be grouped together after they are parsed. This means: ```mmd2 %%{init: { 'logLevel': 'debug', 'theme': 'forest' } }%% %%{initialize: { 'logLevel': 'fatal', "theme":'dark', 'startOnLoad': true } }%% ... ``` parsing the above generates a single `%%init%%` JSON object below, combining the two directives and carrying over the last value given for `loglevel`: ```json5 { logLevel: 'fatal', theme: 'dark', startOnLoad: true, } ``` This will then be sent to `mermaid.initialize(...)` for rendering. ## Directive Examples More directive examples for diagram specific configuration overrides Now that the concept of directives has been explained, Let us see some more examples for directives usage: ### Changing Theme via directive The following code snippet changes theme to forest: `%%{init: { "theme": "forest" } }%%` Possible themes value are: `default`,`base`, `dark`, `forest` and `neutral`. Default Value is `default`. Example: ```mermaid-example %%{init: { "theme": "forest" } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing fontFamily via directive The following code snippet changes fontFamily to rebuchet MS, Verdana, Arial, Sans-Serif: `%%{init: { "fontFamily": "Trebuchet MS, Verdana, Arial, Sans-Serif" } }%%` Example: ```mermaid-example %%{init: { "fontFamily": "Trebuchet MS, Verdana, Arial, Sans-Serif" } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing logLevel via directive The following code snippet changes logLevel to 2: `%%{init: { "logLevel": 2 } }%%` Possible logLevel values are: - `1` for _debug_, - `2` for _info_ - `3` for _warn_ - `4` for _error_ - `5` for _only fatal errors_ Default Value is `5`. Example: ```mermaid-example %%{init: { "logLevel": 2 } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing flowchart config via directive Some common flowchart configurations are: - _htmlLabels_: true/false - _curve_: linear/curve - _diagramPadding_: number - _useMaxWidth_: number For complete list of flowchart configurations, see [defaultConfig.js](https://github.com/mermaid-js/mermaid/blob/develop/src/defaultConfig.js) in the source code. _Soon we plan to publish a complete list all diagram specific configurations updated in the docs_ The following code snippet changes flowchart config: `%%{init: { "flowchart": { "htmlLabels": true, "curve": "linear" } } }%%` Here were are overriding only the flowchart config, and not the general config, where HtmlLabels is set to true and curve is set to linear. ```mermaid-example %%{init: { "flowchart": { "htmlLabels": true, "curve": "linear" } } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing Sequence diagram config via directive Some common sequence configurations are: - _width_: number - _height_: number - _messageAlign_: left, center, right - _mirrorActors_: boolean - _useMaxWidth_: boolean - _rightAngles_: boolean - _showSequenceNumbers_: boolean - _wrap_: boolean For complete list of sequence diagram configurations, see _defaultConfig.js_ in the source code. _Soon we plan to publish a complete list all diagram specific configurations updated in the docs_ So, `wrap` by default has a value of `false` for sequence diagrams. Let us see an example: ```mermaid-example sequenceDiagram Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine, How did you mother like the book I suggested? And did you catch with the new book about alien invasion? Alice->Bob: Good. Bob->Alice: Cool ``` Now let us enable wrap for sequence diagrams. The following code snippet changes sequence diagram config for `wrap` to `true`: `%%{init: { "sequence": { "wrap": true} } }%%` Using in the diagram above, the wrap will be enabled. ```mermaid-example %%{init: { "sequence": { "wrap": true, "width":300 } } }%% sequenceDiagram Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine, How did you mother like the book I suggested? And did you catch with the new book about alien invasion? Alice->Bob: Good. Bob->Alice: Cool ``` ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/entityRelationshipDiagram.md�������������������0000664�0000000�0000000�00000023727�14332737457�0030321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Entity Relationship Diagrams > An entity–relationship model (or ER model) describes interrelated things of interest in a specific domain of knowledge. A basic ER model is composed of entity types (which classify the things of interest) and specifies relationships that can exist between entities (instances of those entity types). Wikipedia. Note that practitioners of ER modelling almost always refer to _entity types_ simply as _entities_. For example the `CUSTOMER` entity _type_ would be referred to simply as the `CUSTOMER` entity. This is so common it would be inadvisable to do anything else, but technically an entity is an abstract _instance_ of an entity type, and this is what an ER diagram shows - abstract instances, and the relationships between them. This is why entities are always named using singular nouns. Mermaid can render ER diagrams ```mermaid-example erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses ``` Entity names are often capitalised, although there is no accepted standard on this, and it is not required in Mermaid. Relationships between entities are represented by lines with end markers representing cardinality. Mermaid uses the most popular crow's foot notation. The crow's foot intuitively conveys the possibility of many instances of the entity that it connects to. ER diagrams can be used for various purposes, ranging from abstract logical models devoid of any implementation details, through to physical models of relational database tables. It can be useful to include attribute definitions on ER diagrams to aid comprehension of the purpose and meaning of entities. These do not necessarily need to be exhaustive; often a small subset of attributes is enough. Mermaid allows them to be defined in terms of their _type_ and _name_. ```mermaid-example erDiagram CUSTOMER ||--o{ ORDER : places CUSTOMER { string name string custNumber string sector } ORDER ||--|{ LINE-ITEM : contains ORDER { int orderNumber string deliveryAddress } LINE-ITEM { string productCode int quantity float pricePerUnit } ``` When including attributes on ER diagrams, you must decide whether to include foreign keys as attributes. This probably depends on how closely you are trying to represent relational table structures. If your diagram is a _logical_ model which is not meant to imply a relational implementation, then it is better to leave these out because the associative relationships already convey the way that entities are associated. For example, a JSON data structure can implement a one-to-many relationship without the need for foreign key properties, using arrays. Similarly an object-oriented programming language may use pointers or references to collections. Even for models that are intended for relational implementation, you might decide that inclusion of foreign key attributes duplicates information already portrayed by the relationships, and does not add meaning to entities. Ultimately, it's your choice. ## Syntax ### Entities and Relationships Mermaid syntax for ER diagrams is compatible with PlantUML, with an extension to label the relationship. Each statement consists of the following parts: ``` <first-entity> [<relationship> <second-entity> : <relationship-label>] ``` Where: - `first-entity` is the name of an entity. Names must begin with an alphabetic character and may also contain digits, hyphens, and underscores. - `relationship` describes the way that both entities inter-relate. See below. - `second-entity` is the name of the other entity. - `relationship-label` describes the relationship from the perspective of the first entity. For example: ``` PROPERTY ||--|{ ROOM : contains ``` This statement can be read as _a property contains one or more rooms, and a room is part of one and only one property_. You can see that the label here is from the first entity's perspective: a property contains a room, but a room does not contain a property. When considered from the perspective of the second entity, the equivalent label is usually very easy to infer. (Some ER diagrams label relationships from both perspectives, but this is not supported here, and is usually superfluous). Only the `first-entity` part of a statement is mandatory. This makes it possible to show an entity with no relationships, which can be useful during iterative construction of diagrams. If any other parts of a statement are specified, then all parts are mandatory. ### Relationship Syntax The `relationship` part of each statement can be broken down into three sub-components: - the cardinality of the first entity with respect to the second, - whether the relationship confers identity on a 'child' entity - the cardinality of the second entity with respect to the first Cardinality is a property that describes how many elements of another entity can be related to the entity in question. In the above example a `PROPERTY` can have one or more `ROOM` instances associated to it, whereas a `ROOM` can only be associated with one `PROPERTY`. In each cardinality marker there are two characters. The outermost character represents a maximum value, and the innermost character represents a minimum value. The table below summarises possible cardinalities. | Value (left) | Value (right) | Meaning | | :----------: | :-----------: | ----------------------------- | | `\|o` | `o\|` | Zero or one | | `\|\|` | `\|\|` | Exactly one | | `}o` | `o{` | Zero or more (no upper limit) | | `}\|` | `\|{` | One or more (no upper limit) | ### Identification Relationships may be classified as either _identifying_ or _non-identifying_ and these are rendered with either solid or dashed lines respectively. This is relevant when one of the entities in question can not have independent existence without the other. For example a firm that insures people to drive cars might need to store data on `NAMED-DRIVER`s. In modelling this we might start out by observing that a `CAR` can be driven by many `PERSON` instances, and a `PERSON` can drive many `CAR`s - both entities can exist without the other, so this is a non-identifying relationship that we might specify in Mermaid as: `PERSON }|..|{ CAR : "driver"`. Note the two dots in the middle of the relationship that will result in a dashed line being drawn between the two entities. But when this many-to-many relationship is resolved into two one-to-many relationships, we observe that a `NAMED-DRIVER` cannot exist without both a `PERSON` and a `CAR` - the relationships become identifying and would be specified using hyphens, which translate to a solid line: ```mmd erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON ||--o{ NAMED-DRIVER : is ``` ### Attributes Attributes can be defined for entities by specifying the entity name followed by a block containing multiple `type name` pairs, where a block is delimited by an opening `{` and a closing `}`. For example: ```mermaid-example erDiagram CAR ||--o{ NAMED-DRIVER : allows CAR { string registrationNumber string make string model } PERSON ||--o{ NAMED-DRIVER : is PERSON { string firstName string lastName int age } ``` The attributes are rendered inside the entity boxes: ```mermaid-example erDiagram CAR ||--o{ NAMED-DRIVER : allows CAR { string registrationNumber string make string model } PERSON ||--o{ NAMED-DRIVER : is PERSON { string firstName string lastName int age } ``` The `type` and `name` values must begin with an alphabetic character and may contain digits, hyphens or underscores. Other than that, there are no restrictions, and there is no implicit set of valid data types. #### Attribute Keys and Comments Attributes may also have a `key` or comment defined. Keys can be "PK" or "FK", for Primary Key or Foreign Key. And a `comment` is defined by double quotes at the end of an attribute. Comments themselves cannot have double-quote characters in them. ```mermaid-example erDiagram CAR ||--o{ NAMED-DRIVER : allows CAR { string allowedDriver FK "The license of the allowed driver" string registrationNumber string make string model } PERSON ||--o{ NAMED-DRIVER : is PERSON { string driversLicense PK "The license #" string firstName string lastName int age } ``` ### Other Things - If you want the relationship label to be more than one word, you must use double quotes around the phrase - If you don't want a label at all on a relationship, you must use an empty double-quoted string ## Styling ### Config options For simple color customization: | Name | Used as | | :------- | :------------------------------------------------------------------- | | `fill` | Background color of an entity or attribute | | `stroke` | Border color of an entity or attribute, line color of a relationship | ### Classes used The following CSS class selectors are available for richer styling: | Selector | Description | | :------------------------- | :---------------------------------------------------- | | `.er.attributeBoxEven` | The box containing attributes on even-numbered rows | | `.er.attributeBoxOdd` | The box containing attributes on odd-numbered rows | | `.er.entityBox` | The box representing an entity | | `.er.entityLabel` | The label for an entity | | `.er.relationshipLabel` | The label for a relationship | | `.er.relationshipLabelBox` | The box surrounding a relationship label | | `.er.relationshipLine` | The line representing a relationship between entities | �����������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/examples.md������������������������������������0000664�0000000�0000000�00000007774�14332737457�0024760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Examples This page contains a collection of examples of diagrams and charts that can be created through mermaid and its myriad applications. **If you wish to learn how to support mermaid on your webpage, read the [Beginner's Guide](/usage?id=usage).** **If you wish to learn about mermaid's syntax, Read the [Diagram Syntax](/flowchart?id=flowcharts-basic-syntax) section.** ## Basic Pie Chart ```mermaid-example pie title NETFLIX "Time spent looking for movie" : 90 "Time spent watching it" : 10 ``` ```mermaid-example pie title What Voldemort doesn't have? "FRIENDS" : 2 "FAMILY" : 3 "NOSE" : 45 ``` ## Basic sequence diagram ```mermaid-example sequenceDiagram Alice ->> Bob: Hello Bob, how are you? Bob-->>John: How about you John? Bob--x Alice: I am good thanks! Bob-x John: I am good thanks! Note right of John: Bob thinks a long<br/>long time, so long<br/>that the text does<br/>not fit on a row. Bob-->Alice: Checking with John... Alice->John: Yes... John, how are you? ``` ## Basic flowchart ```mermaid-example graph LR A[Square Rect] -- Link text --> B((Circle)) A --> C(Round Rect) B --> D{Rhombus} C --> D ``` ## Larger flowchart with some styling ```mermaid-example graph TB sq[Square shape] --> ci((Circle shape)) subgraph A od>Odd shape]-- Two line<br/>edge comment --> ro di{Diamond with <br/> line break} -.-> ro(Rounded<br>square<br>shape) di==>ro2(Rounded square shape) end %% Notice that no text in shape are added here instead that is appended further down e --> od3>Really long text with linebreak<br>in an Odd shape] %% Comments after double percent signs e((Inner / circle<br>and some odd <br>special characters)) --> f(,.?!+-*ز) cyr[Cyrillic]-->cyr2((Circle shape Начало)); classDef green fill:#9f6,stroke:#333,stroke-width:2px; classDef orange fill:#f96,stroke:#333,stroke-width:4px; class sq,e green class di orange ``` ## SequenceDiagram: Loops, alt and opt ```mermaid-example sequenceDiagram loop Daily query Alice->>Bob: Hello Bob, how are you? alt is sick Bob->>Alice: Not so good :( else is well Bob->>Alice: Feeling fresh like a daisy end opt Extra response Bob->>Alice: Thanks for asking end end ``` ## SequenceDiagram: Message to self in loop ```mermaid-example sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts<br/>prevail... John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ## Sequence Diagram: Blogging app service communication ```mermaid-example sequenceDiagram participant web as Web Browser participant blog as Blog Service participant account as Account Service participant mail as Mail Service participant db as Storage Note over web,db: The user must be logged in to submit blog posts web->>+account: Logs in using credentials account->>db: Query stored accounts db->>account: Respond with query result alt Credentials not found account->>web: Invalid credentials else Credentials found account->>-web: Successfully logged in Note over web,db: When the user is authenticated, they can now submit new posts web->>+blog: Submit new post blog->>db: Store post data par Notifications blog--)mail: Send mail to blog subscribers blog--)db: Store in-site notifications and Response blog-->>-web: Successfully posted end end ``` ## A commit flow diagram. ```mermaid gitGraph: commit "Ashish" branch newbranch checkout newbranch commit id:"1111" commit tag:"test" checkout main commit type: HIGHLIGHT commit merge newbranch commit branch b2 commit ``` ����mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/faq.md�����������������������������������������0000664�0000000�0000000�00000001751�14332737457�0023676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Frequently Asked Questions 1. [How to add title to flowchart?](https://github.com/knsv/mermaid/issues/556#issuecomment-363182217) 1. [How to specify custom CSS file?](https://github.com/mermaidjs/mermaid.cli/pull/24#issuecomment-373402785) 1. [How to fix tooltip misplacement issue?](https://github.com/knsv/mermaid/issues/542#issuecomment-3343564621) 1. [How to specify gantt diagram xAxis format?](https://github.com/knsv/mermaid/issues/269#issuecomment-373229136) 1. [How to bind an event?](https://github.com/knsv/mermaid/issues/372) 1. [How to add newline in the text?](https://github.com/knsv/mermaid/issues/384#issuecomment-281339381) 1. [How to have special characters in link text?](https://github.com/knsv/mermaid/issues/407#issuecomment-329944735) 1. [How to change Flowchart curve style?](https://github.com/knsv/mermaid/issues/580#issuecomment-373929046) 1. [How to create a Flowchart end-Node that says "End"](https://github.com/mermaid-js/mermaid/issues/1444#issuecomment-639528897) �����������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/flowchart.md�����������������������������������0000664�0000000�0000000�00000040505�14332737457�0025120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Flowcharts - Basic Syntax All Flowcharts are composed of **nodes**, the geometric shapes and **edges**, the arrows or lines. The mermaid code defines the way that these **nodes** and **edges** are made and interact. It can also accommodate different arrow types, multi directional arrows, and linking to and from subgraphs. > **Important note**: Do not type the word "end" as a Flowchart node. Capitalize all or any one the letters to keep the flowchart from breaking, i.e, "End" or "END". Or you can apply this [workaround](https://github.com/mermaid-js/mermaid/issues/1444#issuecomment-639528897).\*\* ### A node (default) ```mermaid-example flowchart LR id ``` > **Note** The id is what is displayed in the box. ### A node with text It is also possible to set text in the box that differs from the id. If this is done several times, it is the last text found for the node that will be used. Also if you define edges for the node later on, you can omit text definitions. The one previously defined will be used when rendering the box. ```mermaid-example flowchart LR id1[This is the text in the box] ``` ## Graph This statement declares the direction of the Flowchart. This declares the flowchart is oriented from top to bottom (`TD` or `TB`). ```mermaid-example flowchart TD Start --> Stop ``` This declares the flowchart is oriented from left to right (`LR`). ```mermaid-example flowchart LR Start --> Stop ``` ## Flowchart Orientation Possible FlowChart orientations are: - TB - top to bottom - TD - top-down/ same as top to bottom - BT - bottom to top - RL - right to left - LR - left to right ## Node shapes ### A node with round edges ```mermaid-example flowchart LR id1(This is the text in the box) ``` ### A stadium-shaped node ```mermaid-example flowchart LR id1([This is the text in the box]) ``` ### A node in a subroutine shape ```mermaid-example flowchart LR id1[[This is the text in the box]] ``` ### A node in a cylindrical shape ```mermaid-example flowchart LR id1[(Database)] ``` ### A node in the form of a circle ```mermaid-example flowchart LR id1((This is the text in the circle)) ``` ### A node in an asymmetric shape ```mermaid-example flowchart LR id1>This is the text in the box] ``` Currently only the shape above is possible and not its mirror. _This might change with future releases._ ### A node (rhombus) ```mermaid-example flowchart LR id1{This is the text in the box} ``` ### A hexagon node ```mermaid-example flowchart LR id1{{This is the text in the box}} ``` ### Parallelogram ```mermaid-example flowchart TD id1[/This is the text in the box/] ``` ### Parallelogram alt ```mermaid-example flowchart TD id1[\This is the text in the box\] ``` ### Trapezoid ```mermaid-example flowchart TD A[/Christmas\] ``` ### Trapezoid alt ```mermaid-example flowchart TD B[\Go shopping/] ``` ### Double circle ```mermaid-example flowchart TD id1(((This is the text in the circle))) ``` ## Links between nodes Nodes can be connected with links/edges. It is possible to have different types of links or attach a text string to a link. ### A link with arrow head ```mermaid-example flowchart LR A-->B ``` ### An open link ```mermaid-example flowchart LR A --- B ``` ### An invisisble link This can be a usefull tool in some instances where you want to alter the default positining of a node. ```mermaid-example flowchart LR A ~~~ B ``` ### Text on links ```mermaid-example flowchart LR A-- This is the text! ---B ``` or ```mermaid-example flowchart LR A---|This is the text|B ``` ### A link with arrow head and text ```mermaid-example flowchart LR A-->|text|B ``` or ```mermaid-example flowchart LR A-- text -->B ``` ### Dotted link ```mermaid-example flowchart LR; A-.->B; ``` ### Dotted link with text ```mermaid-example flowchart LR A-. text .-> B ``` ### Thick link ```mermaid-example flowchart LR A ==> B ``` ### Thick link with text ```mermaid-example flowchart LR A == text ==> B ``` ### Chaining of links It is possible declare many links in the same line as per below: ```mermaid-example flowchart LR A -- text --> B -- text2 --> C ``` It is also possible to declare multiple nodes links in the same line as per below: ```mermaid-example flowchart LR a --> b & c--> d ``` You can then describe dependencies in a very expressive way. Like the one-liner below: ```mermaid-example flowchart TB A & B--> C & D ``` If you describe the same diagram using the the basic syntax, it will take four lines. A word of warning, one could go overboard with this making the flowchart harder to read in markdown form. The Swedish word `lagom` comes to mind. It means, not too much and not too little. This goes for expressive syntaxes as well. ```mmd flowchart TB A --> C A --> D B --> C B --> D ``` ### New arrow types There are new types of arrows supported as per below: ```mermaid-example flowchart LR A --o B B --x C ``` ### Multi directional arrows There is the possibility to use multidirectional arrows. ```mermaid-example flowchart LR A o--o B B <--> C C x--x D ``` ### Minimum length of a link Each node in the flowchart is ultimately assigned to a rank in the rendered graph, i.e. to a vertical or horizontal level (depending on the flowchart orientation), based on the nodes to which it is linked. By default, links can span any number of ranks, but you can ask for any link to be longer than the others by adding extra dashes in the link definition. In the following example, two extra dashes are added in the link from node _B_ to node _E_, so that it spans two more ranks than regular links: ```mermaid-example flowchart TD A[Start] --> B{Is it?} B -->|Yes| C[OK] C --> D[Rethink] D --> B B ---->|No| E[End] ``` > **Note** Links may still be made longer than the requested number of ranks > by the rendering engine to accommodate other requests. When the link label is written in the middle of the link, the extra dashes must be added on the right side of the link. The following example is equivalent to the previous one: ```mermaid-example flowchart TD A[Start] --> B{Is it?} B -- Yes --> C[OK] C --> D[Rethink] D --> B B -- No ----> E[End] ``` For dotted or thick links, the characters to add are equals signs or dots, as summed up in the following table: | Length | 1 | 2 | 3 | | ----------------- | :----: | :-----: | :------: | | Normal | `---` | `----` | `-----` | | Normal with arrow | `-->` | `--->` | `---->` | | Thick | `===` | `====` | `=====` | | Thick with arrow | `==>` | `===>` | `====>` | | Dotted | `-.-` | `-..-` | `-...-` | | Dotted with arrow | `-.->` | `-..->` | `-...->` | ## Special characters that break syntax It is possible to put text within quotes in order to render more troublesome characters. As in the example below: ```mermaid-example flowchart LR id1["This is the (text) in the box"] ``` ### Entity codes to escape characters It is possible to escape characters using the syntax exemplified here. ```mermaid-example flowchart LR A["A double quote:#quot;"] -->B["A dec char:#9829;"] ``` Numbers given are base 10, so `#` can be encoded as `#35;`. It is also supported to use HTML character names. ## Subgraphs ``` subgraph title graph definition end ``` An example below: ```mermaid-example flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end ``` You can also set an explicit id for the subgraph. ```mermaid-example flowchart TB c1-->a2 subgraph ide1 [one] a1-->a2 end ``` ## flowcharts With the graphtype flowchart it is also possible to set edges to and from subgraphs as in the flowchart below. ```mermaid-example flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end one --> two three --> two two --> c2 ``` ## Direction in subgraphs With the graphtype flowcharts you can use the direction statement to set the direction which the subgraph will render like in this example. ```mermaid-example flowchart LR subgraph TOP direction TB subgraph B1 direction RL i1 -->f1 end subgraph B2 direction BT i2 -->f2 end end A --> TOP --> B B1 --> B2 ``` **A clarification is in order here.** The direction statement affects the layout of a subgraph but only as long as it does not have any links leading in or out of it. The reason for this is that if you have links in or out then the graph of nodes is not longer the set of nodes in the subgraph but actually the set of nodes of the parent including the ones in the subgraph. One can see it as that the direction of the container gets injected in the subgraph with a link. ## Interaction It is possible to bind a click event to a node, the click can lead to either a javascript callback or to a link which will be opened in a new browser tab. **Note**: This functionality is disabled when using `securityLevel='strict'` and enabled when using `securityLevel='loose'`. ``` click nodeId callback click nodeId call callback() ``` - nodeId is the id of the node - callback is the name of a javascript function defined on the page displaying the graph, the function will be called with the nodeId as parameter. Examples of tooltip usage below: ```html <script> const callback = function () { alert('A callback was triggered'); }; </script> ``` The tooltip text is surrounded in double quotes. The styles of the tooltip are set by the class `.mermaidTooltip`. ```mermaid-example flowchart LR A-->B B-->C C-->D click A callback "Tooltip for a callback" click B "https://www.github.com" "This is a tooltip for a link" click A call callback() "Tooltip for a callback" click B href "https://www.github.com" "This is a tooltip for a link" ``` > **Success** The tooltip functionality and the ability to link to urls are available from version 0.5.2. ?> Due to limitations with how Docsify handles JavaScript callback functions, an alternate working demo for the above code can be viewed at [this jsfiddle](https://jsfiddle.net/s37cjoau/3/). Links are opened in the same browser tab/window by default. It is possible to change this by adding a link target to the click definition (`_self`, `_blank`, `_parent` and `_top` are supported): ```mermaid-example flowchart LR A-->B B-->C C-->D D-->E click A "https://www.github.com" _blank click B "https://www.github.com" "Open this in a new tab" _blank click C href "https://www.github.com" _blank click D href "https://www.github.com" "Open this in a new tab" _blank ``` Beginner's tip—a full example using interactive links in a html context: ```html <body> <pre class="mermaid"> flowchart LR A-->B B-->C C-->D click A callback "Tooltip" click B "https://www.github.com" "This is a link" click C call callback() "Tooltip" click D href "https://www.github.com" "This is a link" </pre> <script> const callback = function () { alert('A callback was triggered'); }; const config = { startOnLoad: true, flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'cardinal' }, securityLevel: 'loose', }; mermaid.initialize(config); </script> </body> ``` ### Comments Comments can be entered within a flow diagram, which will be ignored by the parser. Comments need to be on their own line, and must be prefaced with `%%` (double percent signs). Any text after the start of the comment to the next newline will be treated as a comment, including any flow syntax ```mmd flowchart LR %% this is a comment A -- text --> B{node} A -- text --> B -- text2 --> C ``` ## Styling and classes ### Styling links It is possible to style links. For instance, you might want to style a link that is going backwards in the flow. As links have no ids in the same way as nodes, some other way of deciding what style the links should be attached to is required. Instead of ids, the order number of when the link was defined in the graph is used, or use default to apply to all links. In the example below the style defined in the linkStyle statement will belong to the fourth link in the graph: ``` linkStyle 3 stroke:#ff3,stroke-width:4px,color:red; ``` ### Styling line curves It is possible to style the type of curve used for lines between items, if the default method does not meet your needs. Available curve styles include `basis`, `bump`, `linear`, `monotoneX`, `monotoneY`, `natural`, `step`, `stepAfter`, and `stepBefore`. In this example, a left-to-right graph uses the `stepBefore` curve style: ``` %%{ init: { 'flowchart': { 'curve': 'stepBefore' } } }%% graph LR ``` For a full list of available curves, including an explanation of custom curves, refer to the [Shapes](https://github.com/d3/d3-shape/blob/main/README.md#curves) documentation in the [d3-shape](https://github.com/d3/d3-shape/) project. ### Styling a node It is possible to apply specific styles such as a thicker border or a different background color to a node. ```mermaid-example flowchart LR id1(Start)-->id2(Stop) style id1 fill:#f9f,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5 ``` #### Classes More convenient than defining the style every time is to define a class of styles and attach this class to the nodes that should have a different look. a class definition looks like the example below: ``` classDef className fill:#f9f,stroke:#333,stroke-width:4px; ``` Attachment of a class to a node is done as per below: ``` class nodeId1 className; ``` It is also possible to attach a class to a list of nodes in one statement: ``` class nodeId1,nodeId2 className; ``` A shorter form of adding a class is to attach the classname to the node using the `:::`operator as per below: ```mermaid-example flowchart LR A:::someclass --> B classDef someclass fill:#f96; ``` ### Css classes It is also possible to predefine classes in css styles that can be applied from the graph definition as in the example below: **Example style** ```html <style> .cssClass > rect { fill: #ff0000; stroke: #ffff00; stroke-width: 4px; } </style> ``` **Example definition** ```mermaid-example flowchart LR; A-->B[AAA<span>BBB</span>] B-->D class A cssClass ``` ### Default class If a class is named default it will be assigned to all classes without specific class definitions. ``` classDef default fill:#f9f,stroke:#333,stroke-width:4px; ``` ## Basic support for fontawesome It is possible to add icons from fontawesome. The icons are accessed via the syntax fa:#icon class name#. ```mermaid-example flowchart TD B["fab:fa-twitter for peace"] B-->C[fa:fa-ban forbidden] B-->D(fa:fa-spinner); B-->E(A fa:fa-camera-retro perhaps?) ``` ?> Mermaid is now only compatible with Font Awesome versions 4 and 5. Check that you are using the correct version of Font Awesome. ## Graph declarations with spaces between vertices and link and without semicolon - In graph declarations, the statements also can now end without a semicolon. After release 0.2.16, ending a graph statement with semicolon is just optional. So the below graph declaration is also valid along with the old declarations of the graph. - A single space is allowed between vertices and the link. However there should not be any space between a vertex and its text and a link and its text. The old syntax of graph declaration will also work and hence this new feature is optional and is introduced to improve readability. Below is the new declaration of the graph edges which is also valid along with the old declaration of the graph edges. ```mermaid-example flowchart LR A[Hard edge] -->|Link text| B(Round edge) B --> C{Decision} C -->|One| D[Result one] C -->|Two| E[Result two] ``` ## Configuration... Is it possible to adjust the width of the rendered flowchart. This is done by defining **mermaid.flowchartConfig** or by the CLI to use a JSON file with the configuration. How to use the CLI is described in the mermaidCLI page. mermaid.flowchartConfig can be set to a JSON string with config parameters or the corresponding object. ```javascript mermaid.flowchartConfig = { width: 100% } ``` �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/gantt.md���������������������������������������0000664�0000000�0000000�00000030514�14332737457�0024243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Gantt diagrams > A Gantt chart is a type of bar chart, first developed by Karol Adamiecki in 1896, and independently by Henry Gantt in the 1910s, that illustrates a project schedule and the amount of time it would take for any one project to finish. Gantt charts illustrate number of days between the start and finish dates of the terminal elements and summary elements of a project. ## A note to users Gantt Charts will record each scheduled task as one continuous bar that extends from the left to the right. The x axis represents time and the y records the different tasks and the order in which they are to be completed. It is important to remember that when a date, day, or collection of dates specific to a task are "excluded", the Gantt Chart will accommodate those changes by extending an equal number of days, towards the right, not by creating a gap inside the task. As shown here ![](./img/Gantt-excluded-days-within.png) However, if the excluded dates are between two tasks that are set to start consecutively, the excluded dates will be skipped graphically and left blank, and the following task will begin after the end of the excluded dates. As shown here ![](./img/Gantt-long-weekend-look.png) A Gantt chart is useful for tracking the amount of time it would take before a project is finished, but it can also be used to graphically represent "non-working days", with a few tweaks. Mermaid can render Gantt diagrams as SVG, PNG or a MarkDown link that can be pasted into docs. ```mermaid-example gantt title A Gantt Diagram dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d ``` ## Syntax ```mermaid-example gantt dateFormat YYYY-MM-DD title Adding GANTT diagram functionality to mermaid excludes weekends %% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".) section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d Functionality added :milestone, 2014-01-25, 0d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page :20h Add another diagram to demo page :48h ``` It is possible to set multiple dependencies separated by space: ```mermaid-example gantt apple :a, 2017-07-20, 1w banana :crit, b, 2017-07-23, 1d cherry :active, c, after b a, 1d ``` ### Title The `title` is an _optional_ string to be displayed at the top of the Gantt chart to describe the chart as a whole. ### Section statements You can divide the chart into various sections, for example to separate different parts of a project like development and documentation. To do so, start a line with the `section` keyword and give it a name. (Note that unlike with the [title for the entire chart](#title), this name is _required_. ### Milestones You can add milestones to the diagrams. Milestones differ from tasks as they represent a single instant in time and are identified by the keyword `milestone`. Below is an example on how to use milestones. As you may notice, the exact location of the milestone is determined by the initial date for the milestone and the "duration" of the task this way: _initial date_+_duration_/2. ```mermaid-example gantt dateFormat HH:mm axisFormat %H:%M Initial milestone : milestone, m1, 17:49,2min taska2 : 10min taska3 : 5min Final milestone : milestone, m2, 18:14, 2min ``` ## Setting dates `dateFormat` defines the format of the date **input** of your gantt elements. How these dates are represented in the rendered chart **output** are defined by `axisFormat`. ### Input date format The default input date format is `YYYY-MM-DD`. You can define your custom `dateFormat`. ``` dateFormat YYYY-MM-DD ``` The following formatting options are supported: ``` Input Example Description: YYYY 2014 4 digit year YY 14 2 digit year Q 1..4 Quarter of year. Sets month to first month in quarter. M MM 1..12 Month number MMM MMMM January..Dec Month name in locale set by moment.locale() D DD 1..31 Day of month Do 1st..31st Day of month with ordinal DDD DDDD 1..365 Day of year X 1410715640.579 Unix timestamp x 1410715640579 Unix ms timestamp H HH 0..23 24 hour time h hh 1..12 12 hour time used with a A. a A am pm Post or ante meridiem m mm 0..59 Minutes s ss 0..59 Seconds S 0..9 Tenths of a second SS 0..99 Hundreds of a second SSS 0..999 Thousandths of a second Z ZZ +12:00 Offset from UTC as +-HH:mm, +-HHmm, or Z ``` More info in: https://momentjs.com/docs/#/parsing/string-format/ ### Output date format on the axis The default output date format is YYYY-MM-DD. You can define your custom `axisFormat`, like `2020-Q1` for the first quarter of the year 2020. ``` axisFormat %Y-%m-%d ``` The following formatting strings are supported: ``` %a - abbreviated weekday name. %A - full weekday name. %b - abbreviated month name. %B - full month name. %c - date and time, as "%a %b %e %H:%M:%S %Y". %d - zero-padded day of the month as a decimal number [01,31]. %e - space-padded day of the month as a decimal number [ 1,31]; equivalent to %_d. %H - hour (24-hour clock) as a decimal number [00,23]. %I - hour (12-hour clock) as a decimal number [01,12]. %j - day of the year as a decimal number [001,366]. %m - month as a decimal number [01,12]. %M - minute as a decimal number [00,59]. %L - milliseconds as a decimal number [000, 999]. %p - either AM or PM. %S - second as a decimal number [00,61]. %U - week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. %w - weekday as a decimal number [0(Sunday),6]. %W - week number of the year (Monday as the first day of the week) as a decimal number [00,53]. %x - date, as "%m/%d/%Y". %X - time, as "%H:%M:%S". %y - year without century as a decimal number [00,99]. %Y - year with century as a decimal number. %Z - time zone offset, such as "-0700". %% - a literal "%" character. ``` More info in: https://github.com/mbostock/d3/wiki/Time-Formatting ## Comments Comments can be entered within a gantt chart, which will be ignored by the parser. Comments need to be on their own line and must be prefaced with `%%` (double percent signs). Any text after the start of the comment to the next newline will be treated as a comment, including any diagram syntax ```mmd gantt title A Gantt Diagram %% this is a comment dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d ``` ## Styling Styling of the a gantt diagram is done by defining a number of css classes. During rendering, these classes are extracted from the file located at src/themes/gantt.scss ### Classes used | Class | Description | | --------------------- | ---------------------------------------------------------------------- | | grid.tick | Styling for the Grid Lines | | grid.path | Styling for the Grid's borders | | .taskText | Task Text Styling | | .taskTextOutsideRight | Styling for Task Text that exceeds the activity bar towards the right. | | .taskTextOutsideLeft | Styling for Task Text that exceeds the activity bar, towards the left. | | todayMarker | Toggle and Styling for the "Today Marker" | ### Sample stylesheet ```css .grid .tick { stroke: lightgrey; opacity: 0.3; shape-rendering: crispEdges; } .grid path { stroke-width: 0; } #tag { color: white; background: #fa283d; width: 150px; position: absolute; display: none; padding: 3px 6px; margin-left: -80px; font-size: 11px; } #tag:before { border: solid transparent; content: ' '; height: 0; left: 50%; margin-left: -5px; position: absolute; width: 0; border-width: 10px; border-bottom-color: #fa283d; top: -20px; } .taskText { fill: white; text-anchor: middle; } .taskTextOutsideRight { fill: black; text-anchor: start; } .taskTextOutsideLeft { fill: black; text-anchor: end; } ``` ## Today marker You can style or hide the marker for the current date. To style it, add a value for the `todayMarker` key. ``` todayMarker stroke-width:5px,stroke:#0f0,opacity:0.5 ``` To hide the marker, set `todayMarker` to `off`. ``` todayMarker off ``` ## Configuration It is possible to adjust the margins for rendering the gantt diagram. This is done by defining the `ganttConfig` part of the configuration object. How to use the CLI is described in the [mermaidCLI](mermaidCLI.html) page. mermaid.ganttConfig can be set to a JSON string with config parameters or the corresponding object. ```javascript mermaid.ganttConfig = { titleTopMargin: 25, barHeight: 20, barGap: 4, topPadding: 75, sidePadding: 75, }; ``` ### Possible configuration params: | Param | Description | Default value | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------- | | mirrorActor | Turns on/off the rendering of actors below the diagram as well as above it | false | | bottomMarginAdj | Adjusts how far down the graph ended. Wide borders styles with css could generate unwanted clipping which is why this config param exists. | 1 | ## Interaction It is possible to bind a click event to a task. The click can lead to either a javascript callback or to a link which will be opened in the current browser tab. **Note**: This functionality is disabled when using `securityLevel='strict'` and enabled when using `securityLevel='loose'`. ``` click taskId call callback(arguments) click taskId href URL ``` - taskId is the id of the task - callback is the name of a javascript function defined on the page displaying the graph, the function will be called with the taskId as the parameter if no other arguments are specified. Beginner's tip—a full example using interactive links in an html context: ```html <body> <pre class="mermaid"> gantt dateFormat YYYY-MM-DD section Clickable Visit mermaidjs :active, cl1, 2014-01-07, 3d Print arguments :cl2, after cl1, 3d Print task :cl3, after cl2, 3d click cl1 href "https://mermaidjs.github.io/" click cl2 call printArguments("test1", "test2", test3) click cl3 call printTask() </pre> <script> const printArguments = function (arg1, arg2, arg3) { alert('printArguments called with arguments: ' + arg1 + ', ' + arg2 + ', ' + arg3); }; const printTask = function (taskId) { alert('taskId: ' + taskId); }; const config = { startOnLoad: true, securityLevel: 'loose', }; mermaid.initialize(config); </script> </body> ``` ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/gitgraph.md������������������������������������0000664�0000000�0000000�00000101240�14332737457�0024726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Gitgraph Diagrams > A Git Graph is a pictorial representation of git commits and git actions(commands) on various branches. These kind of diagram are particularly helpful to developers and devops teams to share their Git branching strategies. For example, it makes it easier to visualize how git flow works. Mermaid can render Git diagrams ```mermaid-example gitGraph commit commit branch develop checkout develop commit commit checkout main merge develop commit commit ``` In Mermaid, we support the basic git operations like: - _commit_ : Representing a new commit on the current branch. - _branch_ : To create & switch to a new branch, setting it as the current branch. - _checkout_ : To checking out an existing branch and setting it as the current branch. - _merge_ : To merge an existing branch onto the current branch. With the help of these key git commands, you will be able to draw a gitgraph in Mermaid very easily and quickly. Entity names are often capitalized, although there is no accepted standard on this, and it is not required in Mermaid. ## Syntax Mermaid syntax for a gitgraph is very straight-forward and simple. It follows a declarative-approach, where each commit is drawn on the timeline in the diagram, in order of its occurrences/presence in code. Basically, it follows the insertion order for each command. First thing you do is to declare your diagram type using the **gitgraph** keyword. This `gitgraph` keyword, tells Mermaid that you wish to draw a gitgraph, and parse the diagram code accordingly. Each gitgraph, is initialized with **_main_** branch. So unless you create a different branch, by-default the commits will go to the main branch. This is driven with how git works, where in the beginning you always start with the main branch (formerly called as **_master_** branch). And by-default, `main` branch is set as your **_current branch_**. You make use of **_commit_** keyword to register a commit on the current branch. Let see how this works: A simple gitgraph showing three commits on the default (**_main_**) branch: ```mermaid-example gitGraph commit commit commit ``` If you look closely at the previous example, you can see the default branch `main` along with three commits. Also, notice that by default each commit has been given a unique & random ID. What if you wanted to give your own custom ID to a commit? Yes, it is possible to do that with Mermaid. ### Adding custom commit id For a given commit you may specify a custom ID at the time of declaring it using the `id` attribute, followed by `:` and your custom value within a `""` quote. For example: `commit id: "your_custom_id"` Let us see how this works with the help of the following diagram: ```mermaid-example gitGraph commit id: "Alpha" commit id: "Beta" commit id: "Gamma" ``` In this example, we have given our custom IDs to the commits. ### Modifying commit type In Mermaid, a commit can be of three type, which render a bit different in the diagram. These types are: - `NORMAL` : Default commit type. Represented by a solid circle in the diagram - `REVERSE` : To emphasize a commit as a reverse commit. Represented by a crossed solid circle in the diagram. - `HIGHLIGHT` : To highlight a particular commit in the diagram. Represented by a filled rectangle in the diagram. For a given commit you may specify its type at the time of declaring it using the `type` attribute, followed by `:` and the required type option discussed above. For example: `commit type: HIGHLIGHT` NOTE: If no commit type is specified, `NORMAL` is picked as default. Let us see how these different commit type look with the help of the following diagram: ```mermaid-example gitGraph commit id: "Normal" commit commit id: "Reverse" type: REVERSE commit commit id: "Highlight" type: HIGHLIGHT commit ``` In this example, we have specified different types to each commit. Also, see how we have included both `id` and `type` together at the time of declaring our commits. ### Adding Tags For a given commit you may decorate it as a **tag**, similar to the concept of tags or release version in git world. You can attach a custom tag at the time of declaring a commit using the `tag` attribute, followed by `:` and your custom value within `""` quote. For example: `commit tag: "your_custom_tag"` Let us see how this works with the help of the following diagram: ```mermaid-example gitGraph commit commit id: "Normal" tag: "v1.0.0" commit commit id: "Reverse" type: REVERSE tag: "RC_1" commit commit id: "Highlight" type: HIGHLIGHT tag: "8.8.4" commit ``` In this example, we have given custom tags to the commits. Also, see how we have combined all these attributes in a single commit declaration. You can mix-match these attributes as you like. ### Create a new branch In Mermaid, in-order to create a new branch, you make use of the `branch` keyword. You also need to provide a name of the new branch. The name has to be unique and cannot be that of an existing branch. Usage example: `branch develop` When Mermaid, reads the `branch` keyword, it creates a new branch and sets it as the current branch. Equivalent to you creating a new branch and checking it out in Git world. Let see this in an example: ```mermaid-example gitGraph commit commit branch develop commit commit commit ``` In this example, see how we started with default `main` branch, and pushed two commits on that. Then we created the `develop` branch, and all commits afterwards are put on the `develop` branch as it became the current branch. ### Checking out an existing branch In Mermaid, in order to switch to an existing branch, you make use of the `checkout` keyword. You also need to provide a name of an existing branch. If no branch is found with the given name, it will result in console error. Usage example: `checkout develop` When Mermaid, reads the `checkout` keyword, it finds the given branch and sets it as the current branch. Equivalent to checking out a branch in the Git world. Let see modify our previous example: ```mermaid-example gitGraph commit commit branch develop commit commit commit checkout main commit commit ``` In this example, see how we started with default `main` branch, and pushed two commits on that. Then we created the `develop` branch, and all three commits afterwards are put on the `develop` branch as it became the current branch. After this we made use of the `checkout` keyword to set the current branch as `main`, and all commit that follow are registered against the current branch, i.e. `main`. ### Merging two branches In Mermaid, in order to merge or join to an existing branch, you make use of the `merge` keyword. You also need to provide the name of an existing branch to merge from. If no branch is found with the given name, it will result in console error. Also, you can only merge two separate branches, and cannot merge a branch with itself. In such case an error is throw. Usage example: `merge develop` When Mermaid, reads the `merge` keyword, it finds the given branch and its head commit (the last commit on that branch), and joins it with the head commit on the **current branch**. Each merge results in a **_merge commit_**, represented in the diagram with **filled double circle**. Let us modify our previous example to merge our two branches: ```mermaid-example gitGraph commit commit branch develop commit commit commit checkout main commit commit merge develop commit commit ``` In this example, see how we started with default `main` branch, and pushed two commits on that. Then we created the `develop` branch, and all three commits afterwards are put on the `develop` branch as it became the current branch. After this we made use of the `checkout` keyword to set the current branch as `main`, and all commits that follow are registered against the current branch, i.e. `main`. After this we merge the `develop` branch onto the current branch `main`, resulting in a merge commit. Since the current branch at this point is still `main`, the last two commits are registered against that. You can also decorate your merge with similar attributes as you did for the commit using: - `id`--> To override the default ID with custom ID - `tag`--> To add a custom tag to your merge commit - `type`--> To override the default shape of merge commit. Here you can use other commit type mentioned earlier. And you can choose to use none, some or all of these attributes together. For example: `merge develop id: "my_custom_id" tag: "my_custom_tag" type: REVERSE` Let us see how this works with the help of the following diagram: ```mermaid-example gitGraph commit id: "1" commit id: "2" branch nice_feature checkout nice_feature commit id: "3" checkout main commit id: "4" checkout nice_feature branch very_nice_feature checkout very_nice_feature commit id: "5" checkout main commit id: "6" checkout nice_feature commit id: "7" checkout main merge nice_feature id: "customID" tag: "customTag" type: REVERSE checkout very_nice_feature commit id: "8" checkout main commit id: "9" ``` ### Cherry Pick commit from another branch Similar to how 'git' allows you to cherry-pick a commit from **another branch** onto the **current** branch, Mermaid also supports this functionality. You can also cherry-pick a commit from another branch using the `cherry-pick` keyword. To use the `cherry-pick` keyword, you must specify the id using the `id` attribute, followed by `:` and your desired commit id within a `""` quote. For example: `cherry-pick id: "your_custom_id"` Here, a new commit representing the cherry-pick is created on the current branch, and is visually highlighted in the diagram with a **cherry** and a tag depicting the commit id from which it is cherry-picked from. A few important rules to note here are: 1. You need to provide the `id` for an existing commit to be cherry-picked. If given commit id does not exist it will result in an error. For this, make use of the `commit id:$value` format of declaring commits. See the examples from above. 2. The given commit must not exist on the current branch. The cherry-picked commit must always be a different branch than the current branch. 3. Current branch must have at least one commit, before you can cherry-pick, otherwise it will cause an error is throw. Let see an example: ```mermaid-example gitGraph commit id: "ZERO" branch develop commit id:"A" checkout main commit id:"ONE" checkout develop commit id:"B" checkout main commit id:"TWO" cherry-pick id:"A" commit id:"THREE" checkout develop commit id:"C" ``` ## Gitgraph specific configuration options In Mermaid, you have the option to configure the gitgraph diagram. You can configure the following options: - `showBranches` : Boolean, default is `true`. If set to `false`, the branches are not shown in the diagram. - `showCommitLabel` : Boolean, default is `true`. If set to `false`, the commit labels are not shown in the diagram. - `mainBranchName` : String, default is `main`. The name of the default/root branch. - `mainBranchOrder` : Position of the main branch in the list of branches. default is `0`, meaning, by default `main` branch is the first in the order. Let's look at them one by one. ## Hiding Branch names and lines Sometimes you may want to hide the branch names and lines from the diagram. You can do this by using the `showBranches` keyword. By default its value is `true`. You can set it to `false` using directives. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': false}} }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ## Commit labels Layout: Rotated or Horizontal Mermaid supports two types of commit labels layout. The default layout is **rotated**, which means the labels are placed below the commit circle, rotated at 45 degrees for better readability. This is particularly useful for commits with long labels. The other option is **horizontal**, which means the labels are placed below the commit circle centred horizontally, and are not rotated. This is particularly useful for commits with short labels. You can change the layout of the commit labels by using the `rotateCommitLabel` keyword in the directive. It defaults to `true`, which means the commit labels are rotated. Usage example: Rotated commit labels ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'rotateCommitLabel': true}} }%% gitGraph commit id: "feat(api): ..." commit id: "a" commit id: "b" commit id: "fix(client): .extra long label.." branch c2 commit id: "feat(modules): ..." commit id: "test(client): ..." checkout main commit id: "fix(api): ..." commit id: "ci: ..." branch b1 commit branch b2 commit ``` Usage example: Horizontal commit labels ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'rotateCommitLabel': false}} }%% gitGraph commit id: "feat(api): ..." commit id: "a" commit id: "b" commit id: "fix(client): .extra long label.." branch c2 commit id: "feat(modules): ..." commit id: "test(client): ..." checkout main commit id: "fix(api): ..." commit id: "ci: ..." branch b1 commit branch b2 commit ``` ## Hiding commit labels Sometimes you may want to hide the commit labels from the diagram. You can do this by using the `showCommitLabel` keyword. By default its value is `true`. You can set it to `false` using directives. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': false,'showCommitLabel': false}} }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ## Customizing main branch name Sometimes you may want to customize the name of the main/default branch. You can do this by using the `mainBranchName` keyword. By default its value is `main`. You can set it to any string using directives. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'MetroLine1'}} }%% gitGraph commit id:"NewYork" commit id:"Dallas" branch MetroLine2 commit id:"LosAngeles" commit id:"Chicago" commit id:"Houston" branch MetroLine3 commit id:"Phoenix" commit type: HIGHLIGHT id:"Denver" commit id:"Boston" checkout MetroLine1 commit id:"Atlanta" merge MetroLine3 commit id:"Miami" commit id:"Washington" merge MetroLine2 tag:"MY JUNCTION" commit id:"Boston" commit id:"Detroit" commit type:REVERSE id:"SanFrancisco" ``` Look at the imaginary railroad map created using Mermaid. Here, we have changed the default main branch name to `MetroLine1`. ## Customizing branch ordering In Mermaid, by default the branches are shown in the order of their definition or appearance in the diagram code. Sometimes you may want to customize the order of the branches. You can do this by using the `order` keyword next the branch definition. You can set it to a positive number. Mermaid follows the given precedence order of the `order` keyword. - Main branch is always shown first as it has default order value of `0`. (unless its order is modified and changed from `0` using the `mainBranchOrder` keyword in the config) - Next, All branches without an `order` are shown in the order of their appearance in the diagram code. - Next, All branches with an `order` are shown in the order of their `order` value. To fully control the order of all the branches, you must define `order` for all the branches. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true}} }%% gitGraph commit branch test1 order: 3 branch test2 order: 2 branch test3 order: 1 ``` Look at the diagram, all the branches are following the order defined. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchOrder': 2}} }%% gitGraph commit branch test1 order: 3 branch test2 branch test3 branch test4 order: 1 ``` Look at the diagram, here, all the branches without a specified order are drawn in their order of definition. Then, `test4` branch is drawn because the order of `1`. Then, `main` branch is drawn because the order of `2`. And, lastly `test1`is drawn because the order of `3`. NOTE: Because we have overridden the `mainBranchOrder` to `2`, the `main` branch is not drawn in the beginning, instead follows the ordering. Here, we have changed the default main branch name to `MetroLine1`. ## Themes Mermaid supports a bunch of pre-defined themes which you can use to find the right one for you. PS: you can actually override an existing theme's variable to get your own custom theme going. Learn more about theming your diagram [here](./theming.md). The following are the different pre-defined theme options: - `base` - `forest` - `dark` - `default` - `neutral` **NOTE**: To change theme you can either use the `initialize` call or _directives_. Learn more about [directives](./directives.md) Let's put them to use, and see how our sample diagram looks in different themes: ### Base Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ### Forest Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'forest' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ### Default Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' } }%% gitGraph commit type:HIGHLIGHT branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ### Dark Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'dark' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ### Neutral Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'neutral' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ## Customize using Theme Variables Mermaid allows you to customize your diagram using theme variables which govern the look and feel of various elements of the diagram. For understanding let us take a sample diagram with theme `default`, the default values of the theme variables is picked automatically from the theme. Later on we will see how to override the default values of the theme variables. See how the default theme is used to set the colors for the branches: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` > #### IMPORTANT: > > Mermaid supports the theme variables to override the default values for **up to 8 branches**, i.e., you can set the color/styling of up to 8 branches using theme variables. After this threshold of 8 branches, the theme variables are reused in the cyclic manner, i.e. the 9th branch will use the color/styling of the 1st branch, or the branch at index position '8' will use the color/styling of the branch at index position '0'. > _More on this in the next section. See examples on **Customizing branch label colors** below_ ### Customizing branch colors You can customize the branch colors using the `git0` to `git7` theme variables. Mermaid allows you to set the colors for up-to 8 branches, where `git0` variable will drive the value of the first branch, `git1` will drive the value of the second branch and so on. NOTE: Default values for these theme variables are picked from the selected theme. If you want to override the default values, you can use the `initialize` call to add your custom theme variable values. Example: Now let's override the default values for the `git0` to `git3` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'git0': '#ff0000', 'git1': '#00ff00', 'git2': '#0000ff', 'git3': '#ff00ff', 'git4': '#00ffff', 'git5': '#ffff00', 'git6': '#ff00ff', 'git7': '#00ffff' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the branch colors are changed to the values specified in the theme variables. ### Customizing branch label colors You can customize the branch label colors using the `gitBranchLabel0` to `gitBranchLabel7` theme variables. Mermaid allows you to set the colors for up-to 8 branches, where `gitBranchLabel0` variable will drive the value of the first branch label, `gitBranchLabel1` will drive the value of the second branch label and so on. Lets see how the default theme is used to set the colors for the branch labels: Now let's override the default values for the `gitBranchLabel0` to `gitBranchLabel2` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'gitBranchLabel0': '#ffffff', 'gitBranchLabel1': '#ffffff', 'gitBranchLabel2': '#ffffff', 'gitBranchLabel3': '#ffffff', 'gitBranchLabel4': '#ffffff', 'gitBranchLabel5': '#ffffff', 'gitBranchLabel6': '#ffffff', 'gitBranchLabel7': '#ffffff', 'gitBranchLabel8': '#ffffff', 'gitBranchLabel9': '#ffffff' } } }%% gitGraph checkout main branch branch1 branch branch2 branch branch3 branch branch4 branch branch5 branch branch6 branch branch7 branch branch8 branch branch9 checkout branch1 commit ``` Here, you can see that `branch8` and `branch9` colors and the styles are being picked from branch at index position `0` (`main`) and `1`(`branch1`) respectively, i.e., **branch themeVariables are repeated cyclically**. ### Customizing Commit colors You can customize commit using the `commitLabelColor` and `commitLabelBackground` theme variables for changes in the commit label color and background color respectively. Example: Now let's override the default values for the `commitLabelColor` to `commitLabelBackground` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'commitLabelColor': '#ff0000', 'commitLabelBackground': '#00ff00' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the commit label color and background color are changed to the values specified in the theme variables. ### Customizing Commit Label Font Size You can customize commit using the `commitLabelFontSize` theme variables for changing in the font soze of the commit label . Example: Now let's override the default values for the `commitLabelFontSize` variable: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'commitLabelColor': '#ff0000', 'commitLabelBackground': '#00ff00', 'commitLabelFontSize': '16px' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the commit label font size changed. ### Customizing Tag Label Font Size You can customize commit using the `tagLabelFontSize` theme variables for changing in the font soze of the tag label . Example: Now let's override the default values for the `tagLabelFontSize` variable: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'commitLabelColor': '#ff0000', 'commitLabelBackground': '#00ff00', 'tagLabelFontSize': '16px' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the tag label font size changed. ### Customizing Tag colors You can customize tag using the `tagLabelColor`,`tagLabelBackground` and `tagLabelBorder` theme variables for changes in the tag label color,tag label background color and tag label border respectively. Example: Now let's override the default values for the `tagLabelColor`, `tagLabelBackground` and to `tagLabelBorder` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'tagLabelColor': '#ff0000', 'tagLabelBackground': '#00ff00', 'tagLabelBorder': '#0000ff' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the tag colors are changed to the values specified in the theme variables. ### Customizing Highlight commit colors You can customize the highlight commit colors in relation to the branch it is on using the `gitInv0` to `gitInv7` theme variables. Mermaid allows you to set the colors for up-to 8 branches specific highlight commit, where `gitInv0` variable will drive the value of the first branch's highlight commits, `gitInv1` will drive the value of the second branch's highlight commit label and so on. Example: Now let's override the default values for the `git0` to `git3` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'gitInv0': '#ff0000' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the highlighted commit color on the first branch is changed to the value specified in the theme variable `gitInv0`. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/�������������������������������������������0000775�0000000�0000000�00000000000�14332737457�0023355�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/Code-Preview-Config.png��������������������0000664�0000000�0000000�00000442611�14332737457�0027567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������O���tIME�8ms���IDATxwt]W~ 7" �9g*Q*IUQUn۩g׼׶g{~35cvURUJRER$��o:i?� YK" {9{oo5B!B!B!, !B!B!h�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!By+ B!B!Һg TwJ2gBB!B!B 0R*uf,Dd&h!B!B!`fKb K)H02q\ɮk!a8h @ !B!B!GະaM[cL5"6l6 B!B!#BkO<c;HrEZ8M6?}#hVֽ/B!B!B|T&,w<0s.+ۆc<%*r9zE\NbǞLYپ D)=猐ڶO8IZeAB!Bqh)%υ%gg5縛Ol%+9`jΥ�L\N,61<q~m l{OlΛf1V[$ny]6s]pEnobNwLvk 8<5m_́28#\WQYqvlf˪.})5`F;gk -b8?3<2uJc߶ax4"3 '}ݶw{u]0XŋXȨuU.=!G;}9 B!bbtJˢ0 f>J)H& ~�=;㦍M@"x|{%wx93`ְdÒ1cc#'f︱ pvuJ[bKWBM~L_lj; ۻ@T\Сm !g7c5/̉=6uSYs-/±5ӊK]ηR>pJXϕڿc:ߦcC>}Vua{k!## B* XQd:=`e5.O :6�]WLc8ub k\RIñsmÓƱ,saڳߛ2X[]e%P{{俯5ÃN/w.UUkWSeJMt|3Ijk{{~clX2<qbhD2pCE1zeB!B9SvIBU)K{֝xCtٰ7vղf߫ysLhu.7pgDX8y_ ! 63^ޭnjE6O<F)x&6:N7}tLVhyR$xL͸fLk磦ttds<<T<Xv]] iOuNL۝SJqctҹ9GqE2n:M,>mΤ^~Mw?_0߱-^cqb۵j u56di+< Uٜ.6qޒ{j[+o*_E&it L^NɭuSwm2޾Q_\fC*i8慄S]u&T_[gT)v>tN7)�=yʴ{LwMOLwoHb=!O:q8O>HNwM!B!ăѲ9MwomAMEMEKͧNt%,?9VJ&[gzsb2p]oσ7I$O9qLe!T(̰{e)qE5&Lb2a&xb|ug)#M.%'m[<Qbfr9MT,jk,,*cو 0a3b9˂}PSmLDxfASgMy n׾J`eCCkM E7q\@A*hi,a)>aۊIX+_ۆx1FQ43E$r)q�Em.Y~*ʼlAӞccѤc4WX"t9|X4M 4[,h9u&(fy ֔Զ8x6ld}*me99G&~Rڴi"=FqE,f:&7l݊L~i =RUhsHO=gp02A?QSTrt%$ѓ⢷zV j`QÁ>~p-8aan۰)gj,s(@/Ns Qh~O c.qݩ/\`6$P0Isלϐ-]B^z5R20ۂ|sU 3Ki>nT\؂pӭ7`un"D eA[C 6)zJ\ 'mS*plŤ._tK~jOh {Jz0 E4^3:Q&sr#B!\ yG9|\?3eՕduSE l\<[Aό<Ӯ^aMjUN:|XO<xSIj-xWΒ}l['4}&A2 X5=}s6aX14fۦ 8"3}=F4K ,'4ϳ M׹wv'TW_J<hض)ƢVdŒX ٽZȓٰ&@SYlmM${ݲ}# gN`sRP̲ .^ؖ}N fB/.I<8q] Zl]  }Slhiٴvr^Wsds7Ę`Tq?wc,8:PYif!l6b?3<pAM<(4[z4+[ΜK۝i8={>yŻ=PckSg65͡ͻ \ر%NUb,c:=0VSIŦ1V,uHy:`ۊG'fRmLm9fem&zj~o qL}O~W9NUWY, S]QEWCV,5YUibIw< FͦQKn^&~˺.UEW`V D\r֔/xͅ+`RG+V.w-zْ6[6hj4\NsRȮG4Z>Dۆwv<N)nrK<f.g/3nD\1mN7uMZm)"S;frtRpr7uN (Um1ѼVǷhlk%2xj-Μ;ylOsܺ'Iw&w"\�7uY%T DtvX7,pZk\}4k_Hq{{ be tBkM<N Xa8c$W_sܭw$B!?O^&(׼nՕ [m SO%hgxBQ_g {%p 1>DQȚjAyU5VҢiiqyZ 2uAWՎ$iz@c?.g6545TWZ锢e¶U1X<w&T:jSj 4B޴GCE}_Q6ֱ"m&Cb^l)hln۾igS_gQ[bluE,\7 ! M2r|ϴ%XuM `\EZl i`y?$40TUjW^wǏzx 1-m2ic64ϳ #YUiֱZf6ݞGٮ%&nu}0f<W}k㴩q|(Po1&暑UPlUѪJxzgKWB瑭&rkbƢ&|%Dž! E6}6IEz`:mf֦}ϵ2Y:}ׇRײL|CM(pZN)bbݺ�tRoI’E6aX<PK&țk,[á8w1ڜl KLXF+4֏_,\6XЦ*yplrX<$5A�A`Ny6jN䨬0ٱ5;}RSm`!SyXy(eiyÑ~fS*ee'|XlZcp8)tRvK'h_䰰&RCwӫ*E"ёĄis\Ɇoi[l:'4/i.<eq2ēeJřZ5^XLQUi3M]ub຦֍b`[*yky󩬴`Xop*|{4B!BQ)#JkׯvigE q ج^r1G14{�a #y'' TU)vls4v0'J*, XڥLJ `ljN$lGhv˓+'P/9z?Mtwo3iVt;u.`[7D6o_4[6BxwwSAYܶ}׬p9pԛ>غ$5[Zd3xgʫNܑ:2RAxshmsSIE.ygWnf l2A9pħ 7,vK#kMJw#CgJ-6m߿٬L|mj,Mɒ [4_>+!;[ .\ 9qgZU=ѶatETW)zB.^9pħXp@1{Jt6:V,ug KezrT)7-`)^sZgq\grlEE(�R_gzG*-2],D K7smӃ**XZ\^ 9q'ӌא4@>y|G &;q'd-M6MlIECEp9dA=aQS̈&/׬tQr!BAy}:gp/*8jo3<bz1 :g.ȎmfU}}BHYAczR5y'̤d\d=|pcYsOՀJǡ&8{X%Tηl٬_Oڜ>L[}Z6aVxlXkڨiXeA=k cW~'47 GVވ-6kW ̕wwx8bBƏ͑LOO(B!)}bQ o E!Ј UU؀>�d2:dszRfNGMbJjťfŒn_LZTThLFPH)ZtgAT,kByŹYKlw~dsaTS \7:^3Ʉb E)PY#Ms[lKWB5Lq0?8K*Z\49zv<xT'Lkb�^H@xg[&s~}s.])8}6` SsqzkoʱR|tМ+,2??zeL4/4OUEuyE*C)87k0ko8)iI J`2s}S|. aR7‡|GzږeoYBwT9 I~G+!aht*-0=>gχ哳T"mfGe)FhiMp1k~mL}ސ=<ԗYat\JCZL6s2<s;JQhnAWXh"ҒN<V| spk3}MU6_�z C5:8F1gsYjM],TMU ._ h7XQʳ^ duyi/<M6ӞX"/)J*/opė?,Op:հ<SDG4kV 0}<N mWoyT]5^[4o*p_T _B!B!&3e-U9f¿Rn,QLP0ȫ*3iU²K3O.9ob55jσu+ɲy],i'hH+aJ#K5dfb=Q~?i]Rfd[\N[ϹJɏӶ۵oqNѲLX|8L 384-&s'PT 0/fO>cC8XyPΜ X¥uL$P.Z0",M^ 38N74sMLe9JꂧI^mSR[i,K+V/4mbpi0b+W;T&E\g@ 0j +r_s,*;ĩMnQ�:Ӝ>볨fYKmmH*8qʧo DM&{$;!5/4G4a4hSD;_NZИl?gQSp"5E4Tųgh$*4}!LwU) ?8ɚǧ73aZ VMAI;Zυ걄/rJlR|X3>,̕�?.<;;O?,QdT.@\kZD @}Bɗҿ'Fy63Z&zd8{ V(@wOX."B!b&4uS6�`pHSț@yrH<dMG[kj 5&5c<R;3dm3&qS!Һ\P}obc._O+nM3K1K]o6w}.] iX6V~qS wbQPK̨yaY7lm� LJ!TVZ8Ŋ2nRX:Ƶ.Ah{0CHU].^ YGӊѤ"fzwXz-T~pjȩ�ei6K<Қ 4NZ.dsf3H1ئ"~9qK5%] r7m_YoI)3OFqOe3$hst9ZH@T> h)g?OBu.%fPMMN;Q bp4tdCnۂbZR4y_h_Li""S/ۂ V_7eFF#5t63Zp) Z+_ 72KymxRit_&ag/l\RYؼ>F:ef!=wє݅J^8t/K+J/z<SlǦ<[eޅ9-' !B!;R)SXk3u*uhgSWcjKgUnymWCr93yzg%WC^i$aKm�q& 硻7o4<q)vIp=_WkhRUe!;O>3^1%!._5#'Y[ooDSVΙb{}rhȔz(u*ܪ Ja)e8\ظ%3qhrǦ<)e>gbU#QJ QpϊbYRLOab&W{#qzz;s>`!K[v TnSM]ŶM1 XʡffT ] >Q_kbh$T@:xd[\Q`h8k[pMઠX|v E2'b~Ma:u\~fk^9NyzswtUxp}0pJ*ejB&sֲkV嚽]ggAʦFspZA�ڧTDVuf.8[7mvTVX ЗN3ZL]jodT⌻%)Ww⮔iE.Dt_ o)WMݣy6+WCL ]x_uby;gp8b,iR)Ŋe.W{BG<=vGǩXM/Nuc\돨X^?h B!B;PznjgXJϵ63vŌҥiOyl{T4<ygp(t-f_J Qlŀራnl]׾Ƴ(o,yqM h#'<uugj**LNHh5ͲPļZ_r7-08iO%}]e#|a:|Mp􄙏j=qjr}0}({Os;diC:gDl  ,<MuW>LgL| B TT(\)ɣS_ 6ԡs?z/;=N'6RL>)q*+;6XҥbĆq*SZ)K1ţl#S{mYU<^vx)l8u;q=!4W<Tׯ4nnx!1s.o1;- qST1N6Gn3 @OY]2#Is{<q7ں `^ WDXv32i4=",2K=I=pD׹M\jk,xՄш Ь[rB@kI3tTR Ӹ9�3mUyRᑈ,"\nvy: l}xs+ǟ'o&9w!y]B?w!o#kV\:~Ybρ?{>;SO?$'ޘ \6>AxIس셀+9,6;|g,'_B!B9#&u4ÅM Mi#}r9e ^}-ccX$ ?0.p̩�+Zx>{==j,癹G:JMm015f4Lq39M&˘uQ\bȨ))YdP'-KkSzrGk[fp逖&\\׬S> mb`dxɑL9f;.\ oپWC3z,"Pd\׸iG#<whFF5~(9ţi͢Vdž̅$�Zf4Ql\RV$&`xRۻ dJn:JӆQGki[+FG5'|ZLu?0#G",˺iywPdiuٴ6FiѱDB1HLX2?75QDhaf(xsLm+'8s>֢"m)Ѯso[`F(4#$\Wd36vwN10llڦ"m%ٜ)qbLPd2ăc-39n~<` |T9}slNFZ7/xcGw�t r\\NuD.(A`n0,/imO# 4|T< o1E;'[N8pJ;3|;Cu5 ݽm0ulsxgWׁE&?ӜX43{MwwoX8{>dbseYg&ƻ{ldi3Q\|_ex$"<ͅɤb | 9a5zEahڸpEΙm<8{!(gr` _eḭH&+/|AsϢ֦}EKuEKc. -=/ΒE;衋m5b(B!S~\Sg'+O)jk,RIE&kt6ѼV-j-@34jм?䨭C<bM�w2XJ/OxXu9 goxg X{&&92˛ !7,Teo}7[Yk koٳ#U,iq3Qa9yOmE䟼 LV*ay5/0m$}'.\ M.?y{=Nz|~72WsT+RI8u6۵N39^<ϼw` t>߲LtP^^?SUaãfʸf\޼5[8}Y<Oo5{컉{7鍟[~2%|/]1B`RE͋۬5;q˧Ң׌ib.ضI}s:cx<PYiQ캪ey6U0\@vJ5fh$̹�g<H(>D[bl^j^x)՞[<ƻu^o/hBqTRQd&~+L(XZTYTWYYD2Xl"71<T W"LadzptF"n˙/x\Q]i^;4bJ2^-5'/J)FLP;PTȲ S哵$T&؎ O\ 4n:4=>CfK3zx/Mu`-bd3Ķ(_-ˬeݼ?ͬS]x:mtL>8fT|1zl̈Z()~H$&/.3*Ua`J~Jŧh!B!ޭN)gbJT֯' w{t1ϧ?vg-v˾6n{th&hZo.wrdX/[<ٌ7mZmNWjf&ײu(e?=΂6\2m[eԇyMpq�t0ӟ~>ZN^npNN;8K*gڶ;r`ĜLeB)?KoS,s&7ĒB!B!JMlSx]g`OHg3V6�B!B!BO)qmQ.w{?4g4 B!B!BO)N3\M~lrB!B!B!$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/*!B!B!(r*+ԃ^!B&�~H!B!ݛh!BQϕ˗�Xкq%B!B&B!L 48.HB!B>-B;(MB!Be=B!B!B$h!B!B!B!B!B_']j% !AS &Ox'!!B!ϧ}m�Zk h|_S(@ !B R P(5hB!B[hݣ9|z4~7R!b"hWkZ`ZZB!Ο @D6ҬB!냚Nf  !B!КB!1E�X2]B!0L1 I$p{#CB!Bq;y1Jk4|ĵ>B!A)S"#Б.n;r?$B!ӛ״y<MDxL#B@FY$PB!bz3y>�QkyB!DOEB!BLo_δmL,>2Z!Veb.CB!B<<}xMyvY_S<o7ZB2aԽ=O\>,5D<V GU2w&B!sɼD& u>^nX²T߷y(Zm61uլ O)k?qJ8B.bt(+DDу q+EeM<iB!B2"ِ̈+h:0 X\R$R6`>} hmϟ}6IC`_]Z&¥Yt\@ɕag: \ B !B!s`&} 6j){ BKC⺰y}x4Yl^u?ɴѡP!ӌ,]!B!s& CƆ# >'cQr/eM$!|l?Uw&~(x B!B!FkMރ^6߃0 ˵EoY>2Еbn9ӟhR%N6 "5z ni F齆B!b:(_{3w3/>QQq/г\5T[XrCS E*(xLFr7hJr#Ìd !fFW ]\pI#ǣ[~CFr옶3K3ދm54[t9\>UB!b} ה‮̟Q<M,EfY5sWVZRpn&R{�*֯vH+FF5GNo۰~KmE69tǛõrׯvy8ݽ!BLVԸQֺ<#NgW^o<?zz5 4 `"EWb0 d �nDla%.uTL*�|a=<\Wx?T@h#._ mö1lqL/}B!sVw]Y_gr:j8x}.,ش1Nsͮy_&V 1:<gSXm'9{|Oh![bZr޾+,Z?B12yڧP T2ՎHo|קppĵ zba<kR)K۝'�dRI@CœNHYg"7 CGӸlc y6=[vzHkx N ص׻팗ͽszZ~hG~Fx9 \6 #FF#Bjdݍ_gB!;DBIv>֦Z@oO>b8Hp?p|0}q_b|^Iؕ_|*=2L&2]*07n Kp!ɤbY՞CITVF^L(.DcUX ƶM7:"L{2P r9~ˢk&hۆD\,}ʙGJ3LWǼ'Ґ`C{<vYORW+#u 鴅*<O36M:|(2r.?|93㞳33)}f鼟k|B&M/<yՊ׏[bsnm쵊38T˶LT<[*SնMשI1l\"=q]2F Cs}s]O.}eA<>>䭴9G.n &Kݶf"6xB8|ŀLlwi{ca~`}|6n �04˰,|s+<v1qYQd4ϙ}l-tB!P]mlߞe6Bx= ͛<x;|1)-I֬{y s5,^b{Oހ~' p4)Ny(w)^jf9l˴ƤMγ> =2fRI?&3UW0ꂧ9s>`!dB5ڴ̳ygwdžMcF'OYeY.\ y#fG-hٸ.&8qXg@YmSސ7)P4-M6[7XbU(h/pG@#;P{wˊ"ikauh "l"X&ן `rYu1R) bÇ tv.{bu(_gaDBQUiQYeoogp0ܬw$](ubU 1si'׆5|/q:}`fnm1,U _0z[ɠvEb/|:>'iźU.K9$;dA90:in_eBk!O\ پ9N:xgwl(oL(v-vK*is-cCM QR=&\Zl<Os'x`4g/~R$M\>3Nk.o*bæubFzV4۠o QrݲvMMu&9~ҧޢfSg~*Nc͙U% wcŲ?�ۆGh_p+ mQD9`uCŋ@u6`~lN!B!ttJUvm(kg㚭}>ME/ É_JCIJAOOHWҥ.MM6.夝5kbX9uK6`L$]cٌF:\`>33)bq+f4sMy8K>I\kB~'7݇eV $|MCGOy y,xlGGAC&N[4ϋ3?a[eUE6ORŦ*?'8TށdRh?y#OC>*gKw9,^AifYf=k->L-6Zlh\qzXP_sП?06H(-rز9AMͽf8t'1mK\7k*X\ȾsM8_/VI#)ܴ|f8Nш|6[~e]RIo.˕\00pmkT *k&{61s.㭐=N<H(jfYC&gY%,v+ϛ٪J k\S?$2#bBẊx\S ֭6d5V,uxz7SU|bgkbBָXH&6Ÿt;6Ǹc[2YX&m:|&CxA>֢z*x$NᅳB+-\4-qXd͞$J|b? Wo8\.psJN{tZҜ�mϜ-%4f~m +·>f<ϦuMCU<u]j-shi)xB!adYsg | % M)Ū :| i\ 8g1;U<\ TU"#Y*ƅbbIuŚ1CΘQ.۷O2il˿Tm+z[WȦvdZ8|$`o˗Z[z2O_v6; PsdZp'`ECU<x Ty6^CG}7|K2 ѱ]x\ؾٌ{"X% mjjU܅'z˒֦Py|^'[岬q<\44yR-6ٵel==wLľ/<d>wgd$*bboOwO|s= }P^矯u=V2WZ:A>'G߻YcX\zu(c=Cv>tҥMhaժ_Z ['ﯭ[a~au?F)m[Ӧp9SK'7Pu-T=*Rv~Yt⍀?'e, 45Z4Y:{--]lΜ ʟ[My:`,8u xfr5+]Ξx<LcKC:.pK92وe.׺SSg|lpYdO’TO0~= ^~|gk]ڌFlg8xCkغ)#[c,ms=͑hV͡ʌ*H:C/|p#T|mZ\شδPض)nyL3_[Jwf gXJwX~i~z\^O$hQ]iO\Oi_жa=B!Sd8Ixm%8gS]c|?a^I$3߭'I#C֮[92vF4HT,ˡe,>4~�Ü9S_gkVǞJo3g|vlOpOGK,pEGŋ>Kh g|^Y+05kk,,r}3lxx$. l)U_Xb0TV� CG}>8,YFrT@.91`Bc>#V-wMFfxo2HN1>[U&Tp\hg^pJȮfzfYbrF" ;cD9<iEG}y1b13`d>8|أɝIZ[z{}/#A0of5О<W} u,K*GhLl J.mi/M6_rEv?K\Rh…ラ7s7}F}WfaPĻhiyPV'r:JPCQ 뵖.t CS>E)fd Ŭ]>y1Pm+חTLJ)/ )P-\+V.Pln`::NE9DՑl)XbYpRP,+u)3uBpPLphS[x@qV3 رŔi|^S[cn˙s.9:Ѷ)Ϸ-Dh2qY61dBզ 1F{y\MG} ,ވZ>aASb^E*7i҈#'|7o ,nyұN?3uϰ&SgNvD2h1tt4//qHMfHaO)B!T,Eqivw70\r֭ Z;=fM 05L||&f|AwwHGΓf|tڢ…TZdC*e02qg/�0A9;LG`K8q3Rfq\aE &faf(*.(?>qQ^ZSYaq9$[hplE:e~dZ* \�zh8ؽ'Oz3C^s恵ަ7=2وQ5;'ϱcK_Hsg4Fŋ\s)xfmm.?`,Nw{-bƸKsn9s\샆 ]{,Ҏi.!ab9! ZI:֭%hmu}3IgWϵpR^kظ!FBAؽ;Oo__/B%Vtt8p@u'ذ!Nu)sǛo6C?Wؿ@2X.S>(K`l,_fW*^Yш~&o~sѱfO|<Ɋ&pwpĦq._ ΋cQͿ(v,3+>T33)b+^mR/vP3Xnz뎥Sf#3 Ų"5y%lN;8n10q>Y3"8>3<s2tV)hm&SIB @= z֩Jm :?bqٸin5ߙ &Tc]hiԟqc{+w8!sёFY1B!R&9y&>o)GIຓo/__B74:#<`CVq5jkM)c,Z䖟\$p㊡+W؅oBfu&%g=ɬFOdlZ~M  nߙy-e3&j>89&[QM.W\gt,}S1HS(+P89xlלKB10=( <|R�ͥSL9#1'7e=h-rذ!>wW/TrzHcײY@SUeyS}N]g_L*z{iQ3]g|'d֞;LZ),mk<y1h1W~Eh/pRw!_ִ-q8vpSgB,ʽxW;ffFݽ;m+ /KE06QScpa%m.# G,Z,l^~%KCɤb<tZ,V8f/b%kdEItZ6-.|zj/ESvȌrʓUW)ZFX,ju<m::h5(k4wcfz`;qLgL#}.\ XjjOXD8s>m%*#b.t&5-?Ҥ oBV@2iFAs|R/a^Es tVEkH&O=`B BN}Xƥu]lw_S=Eޤ"mv]gN3B!0lض⭷s8P`|'w&I-.]XVP[c}tR牔3g}zzB֬ET[g9Y}#=kW\ WyMW'ٰ!m+N2 mMa}tBA? V<Xu,)Ǯt\X?ޢ M1:\Ŋea{lLbzbrgAL JK .^YjӶxd? G|F9|\~rp3g|9M,f?[)o/I?aog <drRHDilgIu/_ 9@Ox$}!c9kJv|Kiߝ7_`<7;e#ȻCmW+PbwyK;`L)v-4,߳'O__e>Y]?|9C>ٵ;_^ιsMYZ�n \4):33lgVʫ}/ϲe._jK;\vHdg@8{ O}{Ub/SIx;c G<#QaiX.ƪU맯ؽ;ҥ._x.M<&b.\(̳( vHk^iWryf>dYsal,"jSYa1<b>.bpZC<f2tbeTV*,4מ޾kHmk!G>|)ϼ>qᒙ4otL38vy00l�4,msx|{#'|yȦv-hyd[:9u& !ﺊsm;qgAy 6ۊ](VxfdLjɄQVOS!B!>│шo}{+<4.ogoi*N}B@i|'O}G >(#xdlVs7uh*gg+hnSY'L FF#z{B"|_O]ޜxn*dV]A9�}L@6Q >*=bMpiK"8 u'&Mk)mvKME:h. 律 uLSUiܧf4iEXFd.5gΘ!*-t&j%E G46|cIllo7D\c)޲dU3):Oz`X&Yǁ*K͓{~]]PʔQ}cp}1gM3V?8$S)Ȣ)._x#B<d]yg#vش)ڢCaW\3�(f967;X\d|%L \UI: }Os`ڢ}õKWBr&er5XgҢ/bO9u&b*Y: 5K>3Ng6 ٺ!FU D,Zж1k7$e5K9;p=$L+TW; d?] > Zl> KkVӊwxzWO㍽ec5+MGo" x`Bǟk5Um94[ZE!=ddQiYM*wm?c>rnX( V !BR08h;/\ xrg tqŖqZ[bDϏqAXv o|_y/dX*:;=R)GI'LPҥ\VdsPLDS\es3g}gts�ZG0ZsݽfbgL0`dT<\fߏӶء}MAo_}]gIFЕ˙)LLV3iFF"2YMi񨯳X8fሓ] ZrĂgS7 <#FuEEZqJH6Y)~ރTSm˿T.?+X.@+f_:יe&+Yx#G`Je| ix"9�mHCR %A`bl̔_I&nm\הq(5ٌui<M/h1B 3a�0^0Ԣm YʱH2a(W|jU+c !K;\/tQ Mf4XSM<(&J&eSźfxA ~4"+"4M�.l�" C.fi:,r#K8&YkMi\~9/hNvn1XOKͲvy6Lǖ 16sصGh0 |3%J*629yoOGrK!c̹<֦ty hT^S>Ʉb;6Lj4i~z oaEiVh \rɮBAq^ ||g m ,\+^B~<miE.8TT6#2%Ĕ2o_OL�d:M赴 WosG;X!B*=3Y*vMcF_xj++ef8pPϛ\~#5#G#mb.?a`8.a y W1X,NWG{NeK]LRxv�t),w˂ሿ~1<X ,ogL=ל|i`0?S]0 Dds'|{b6xVRǑ>ofhkh, Ξ6˙^QU^~`&= C6q9>/TWY)yW&(m~*r5Y\5.񸩡ꏲYjk-i'!7u==ׯ&f5i=$0l6*4G{&cӱ^vcf=5chȺc床O~2EL~KJd@kSxٲؤ<+PPDCMMJ+8xsϥTilVۛ-g+WVѺƢڔy )_͔3+*rh(w@ q;=3t9*+,ـD¢yb: ht#B}k459ԲKW̨z<my =TtfsDt$Y۳xg@,fnVl _ Q]eF7Kc>.T cŎ∊0k:/{BzLD p9&c&̵`A>Uޱ5&+x;J8sd`!"8w1;!Јc_ڥmC@{=r9*͚K(u`&L3@[y~_;u 9u. 7njB!ϣٻ-^ZowQQd\=ox?b1yc'?[rnx8o9O~ 48Ɍ{edƗ<f36-lld@ORfHh_Z4y8gq97,PXw'Mffr2<xZu ^ʺjjXLλ9[li<}m)XLUys|mY"FcMoo_/281WI:Sސ#G=m32qp0,lupϾ}yVQUeoZĠG!Y%S=sGUEےF`Ҳ…}ܙ5m642&%ˁ oqH&O GlgrΓ}}(=x<Ic>dd"**,|͛&3WaGz4;[k_E^(Eӓ;jySN&j]0ӽ:^> AG Fߗ5ubeLb k\V.sIFY2'ȨfdtEC7ѩڳ'nӍm F✫\֮]9M])'vR&StQzm6!7StJB!B|8Jaɥg,_TA)f<ύ2=)<Q6'e+y{4Bz&Lpx{K*'ݿO3ֹwJn:3YӖxvNM6 UVX|i/vX<F<n�&[mkQ$իc\ns3Ox;c +Ml\`Y;h y<{p1fɤb˖8G<{?D:mkkmc1%8ws\6Yw':=#>mkR?L ˯fdMreǟ2 ^YxBL(#~*"x{lّ`h(kYp{S<hZ7  Dtu,[\Zz'Ց 'dZ +'ٺ%-q<O36?:Z|cwt1d㊷wytf^nʝLN4ŨRT[E?ghtL!BT-Y-cw\o3ܔN[<LvuRQ1UcYy̲J;\ٛ9] m<3[/I$,EG3$Y7/U70yd/yغ5NӼf3gdT >gRU<Ju>a1IͶ_�5?|%޽FC lg8lΟ<yd]Kr9͎ j-56CM^λyo`]-r3+?㺊шh\45blּnXfPC}?Å --f=ϦbJJ o~7kJ_M,1;9}&uTT !BQU Z80B,K`읟gd2)qCc~$ǹ21.55ٓĺ:_ >c&G%ٴ)hD2O8LqcASҢں홫JG, ?{i ŵ+WIz{C^Q5kb<Aq]+d8|ػ)@2~ *LKw/…?MlVoꊗ /KwbN<bĶС<мn"=5?sj@,ض- ![nd rgR2E!BlE2xa =`LX{O9c{͝eVWYInq7R jk,jk&܏˂]>?a;f }шLmm..iK)ܾv-:7.?\pA{4`ӃQF6(;,\eKkBf={j !97/i_!B!J),Oh] 7f6`2xqJ!ɊxRJ)h h1_cJBAN|o?*nj7cD,ƚAϙ3|on` bg>ݥ+h*y+H�F!B!PH4n, ="];,l qʲ3H�rmfpQ?~u /GI%UI8ü]B!B!w&#²捒3LpR6ʲQ*ݑ�Q{Pþ]B!B! J`bYwOUƽAB9NB!B!xz{@̍`c1�B!B!!W*qă%3 !B!B!/nmhdP�]<L>'B|t߻܏eB!Bk�`YPpl\GE9²$aeY IBEh`;* G ZL{T~AoB!B Z3/5:Q!HTcYd#˂tJɃCJkd5Qt2ad=ض@uB<ܔ( 燉bضe\q,|.?%m8{k&"!B!`(k_έ [2w9"}@!+HQ(&^!B!Jfu<GͅNN^S!ϥ5'_B!Bq<+ኧHGdC̱ ^}T65Ӵj j:r,L)Z0 rضM*"O)OB!B!BgNH}ԕ>|O[ƃ '{&n^o5ay;}>lW_"M> H`6ۿͩS'yPWWGCC=_h B !B!B!9Vt_MbžAF2l]l'vl3 Q{(B^&8?4n2帀& ta.A>L!^f+zAMo qF~w~aYb1V\~X_޽2<<oo=vB!B!B<hMe2c4VWƫf-_a7˶iZϱϱs_`%yhn[Hw7pY�:oZm_i\+fۯm~P eY ]ee<E6b9*M[[;mmDQȋ/e|_D)( /^׿u?cկPWWdA !B!B!9t m g5~TuWHO7 6nfgF{{]՟A~E##Դ.f"NSکN<N87`5OÇ+5 o}\?wy+WQd=~,y :nUĔ5Zk0q,6"Mbq{q~W @ !B!B! ܊~>W?KV~s�0 '~/?Ev=zA+j9H~he(b/ ߾|;,tѼv=_ĊO~uz{fu۪�k`!B!B!Gޜ̀ F>˖77b֑fU,ظ 7& =c#,!Q]Malxe~!hDHӸt9G^ Q]֚K^Ji mˠA7B!B!#lNg@[JLcԽ/jP x C.L0aׯs{! _oRށ"1Zj c9n*5ݶ]쥀+ݿ5466~*B!B!1'3#rGgh"}(p6jZ[9Q0FGQr8$Q2t"N4*J( ХK% 4.]Nnxיz""R7bϞ=|/ۿ�L@(B!B!?dtF|o!8ǿv>lhMӪ5|nBP(мz-`.�j|uѤx7U--ǩy+VR҂hmJp$jj8wQͣҸ|Eq HՂdM-$3^z'SN?孷w~w{>B!B!BRcٛR`(" C|ߣ\â5<*N'9ƺ(B7^v]mG~__eB#;05W.˶ }tC#?]|7Yۍz2pIUGFrYRu8 M388RŶm****d? ! ÐCn ۶ۃs�,^҆7fP~?$B!syל,TJ/`z/8{�,K{%=T6L^mShɔQD؎K}[DŽkX%kHTxRߴNҥB!B!BiN ոOǟ$jϒGzAuӷ\˞~dM WL:}eMIY!AΝ|N*E+Ҵv!!2e,=ro%Y,}YXB!xh9{lny;_Z9C)r& h!B @OAkMEX5,-AoY{Y!!R,^UuAwβ+YB!cBtww҂H 0 GqGIZ!#_IBx8IB!DW& CÚA(~̍cRs#5>G}B!B0�ʭy7FQ"F)嶻q ?+>[-n^iXG!0h&qb{^潸lI0n<==;&?5 hB!B!Ϸ9|FPNw]N@*d2***b~EvEebI<UxID}c=L�F�7^A,Q_^#nA0(Fl',g^Q3x$#HhZvHo*F#7GcfM.n1Ɗ$3| _f嶿u˼7cccs946b1􄂛QqL,QG~(sh 1 `:K^.<}B!B!2Њz}@Q4o~EW>;+`#F/jb�k79}[nl}_csc"s>Mj _~&xz`o'ZGNz߳ߥ3H> 0Ʃ}ߠio{ο7~XXN>No>T Z7غ 6 {DKۣo]o+]orM%)~d,Oe'i==oym;$+XW9ƿ#;7MWOyߢuY?k֔_0Nʖg `,\qnnbxg>o?[tA4,[oо~B!B! @h@Gs_yta?şן%U%\.+ѣGyWyL 6) ]?e"U[r5Ɋl'(] Ҁ&|9],{ƅAr : cX.aP@YJYxl'&o^a+#={KTw: AkG~1 u'Qގ(ͧX~ae94Qq෰$V�`;[BnX+sG^b4>O֔>/?hxU9C:/˕3oQΖĒn{f_ ]3§j e~(q'dkZ7SY',& =NuoM`Y΄ke٬[yӾ É%r! XCAXe9qS4n"Yx(9BMX)MsY�oe2Ju?&]EƏcl >I^#!d52_,/1d~a( &ODQe_B?Ϣȟ80m4giOZن eǨi\ƼE[p|MB!B!\3l[U Pr"W?8.^ĩSM}._LG)Iiԕ $*YslqI|7^>s+?2n.zTTg7^t~ ^;&h[ r'v7eQ s>*j[Te~aū?@sc(? Zs't +"W}#珽_#aϰxէ,s\=]ƆR\D5w#.w(d8{\լN[S`ъ=ū>C!7CϹ]h8˷DWz7ꆥy)~_`ɚS״Pr~q4#ϓӶ,<w/?BUCKx tMxgYӠ#yg²]:{q^-[p?4k^uSŶKLj;9/֌Ch&K2k@ 7Şsx)vd~M+r&Rں|{C @Bnދ{h]n˲iXū?KӒGvq׻ѱ^#o'Z#=_=Bm <(eq\>3 Oろ}HWgƯK{el80q .8w),YV~!5KY(ˡqdFz2Z!B!hpl7M8ϒ:v`]8ï{gϞ7PJ16t?wnE4.Uflge`Ou:%~_P]NKۣ n >E<Q{_cW~Co:ZG}Wwi? }%?M>;Hx\.:^C |/Pi|g{ۉ%ep3usCo< Z3x]^`~,\,aPy5a3se4-N e䘊"S?azl'�_t, 5'5CeBZ'3M<]'IV4V5 oYGAu2.0YO 'dƯqwWma)N,ͼE[8~['vb4-J16|[IV4PUtPU\=N4-(2W/tK7| '~̾%O}p8'g_!uSwJ7?8ry?˿ oۄQ {{BoC,~W_Svϲe=UeY>|a?�/?!ni4&^U|/SO';âdɚR^' < _1﯈Mbኧ'krmz..מ8PxϿ7xBvKpųhbY^~'Bz<v:8+h!B!B<s2�=яwuW>~VϛoشiW7_:mv : aEADu;!5)䆸t5BT.ܱoYCDŽ V~ rH gߥqP q)[]np,us,ˡcYkTԴOm|L<UGe4hRQhCUbE[%nS,ˎL?NVbjIjt,UjSUsSQ:35uMYœ?X ww`t K'ki[2#=\q-`gq$gcOSYxv6nvg|}g7ZRӸ_y#�,\ kM\z3wvX`b#:`M:ذp+kȉ#>y ?=`)EfPJ18x!fGAY$B=v3t`ҧJ�͋w&:sK$Ӎ$ (!Y9˧ƚ~>ƅq8M}]-Lf-G8^et|hwWWS]߆B0]yyX$B!Bqp�Z.A~lhqҷ^};7�ڵk̿{5څlywMmbAg;n\vDQP,@1h{7YW CU�[֒_4k"א(Nv718v:*Mw*�p(& Ao#]�KYAR.7}U֋s}&^H#BD^WUEU@;FHH'le9&M M}0gy<gƜwO0{.zZ*J՘<e1lNVDh}[pziW*D)>���IDAT>E7lRG ҡ -Y>*ʲ<RǞ3Z'�`n#rMKVzijn؎,b6*k['( blc9q= /M,a {]h"eY7׸NQ~]Ʉq9<qQJ"=Q >cyCRuΓw+#OUپ(YCpW:M7PȁfTߓ._XVU߾Dbw TB!B!O˷x+cQgw�>Cm|N^hh#pj}7DJ`+gԌ/_RiF*@%k$/fSƱlMv{ɨ_|hk[Oy̸ @`p^㡭`͉)~C&ބL4Tv8j #)uT?{unzvAD<BvS+ H<{{W`tJp;ߗ=MPCYL*MlO/OMC)iecȐXEm]-�wM~%2/:3Tٖ YyW˙3l@p n~P^rK'uOD 6VDÍz̼E;_R4A#YzE!B!/�Ʀ5<BfPUCNy~^8)eo1|pz! \wu[\z%t jxE8g9z*JnVhSa8pyۿ]~l GpٶiFL<npz5brƤGG/lr6,};)8-SުSuRD͍ CEup0nj|*v;SmWDUVbG0'Y7]8}[&l"no. 6Q4pzn',"mDBfXptfRVip|,Ҍ'4k8.o&fLDٿ}1ͅcYqB-n$zGv44v}1`gA*9&(uX v\v77NG\y;$kf^[,UamL(;@>%_?8].JJJ�p3+G}pjΏ߲/#.. w)߱A3d\Hs 'E}s 1ܾuuasKT\| P:t.nK,k6(TZ!8VGt{GrB!0� kEcm/R,\?/Zݻwq }AA^x!6l?�$ojVB-qr4;j@/X̴ɀMg^>M { /R <§I|=˩n<Y8fdy  /9pu z!>x^$SmFBs¡?͖gsBn8ξKw)݃eò66f|U `ɋCmf1hT4TV 7|O 5  q`#`Kqe4fO/s $D+^S.W,Y :ka<*|pa�_eַ2FɟaOw[`Y Y9ģ}9؝Ԑtܾcˊj9H";Ӧ7`jTVu=ǟ|eWJUː Nn^S>p ):~J݁ .A]N r+p34:S\19�+Om+g{ݽG\Nդtdԗ!^{td]2d 8YB!renO]GIu8h�ÉnDz,8M\n<o3s{98 Áe kF$& axeY65Mc+Bh-cX,4MYZ�iDY*]18c‡e&ͩз4Fnn.a2c毨ޱJ\o<ģ-ģt73%kB VxpD<^,F$TO[>,(A7lHn;&(w|h3mMIpyÍ؝ ˌ4p x](ėQL #A&iA) ;@WJYDC f <nt"!i T:G[imG<҂۟ۗ' ]7w+eiDzyNe}^NP=6݃R NE,B<֚*AO]di 3%nR& H[}jQ#l^mM,B 2SK=nfwcsxi粒n'c?iwrj)DFZZZa O |Olx~/X̨_LoDB ؝NYGv +zاD<L[S5Pno6~`v,҂HuҢDx<˓eƉE[p3S%B4v}_c?;D4MD"];(+v2O8{Xb58}O²dMhllgFkkQAh>8nQ4L3e)lSwix>Xλ.�1mL2m6_\r%]iLgj&ev~;wb t ++ʡL0/:%ݵi:z1v}}߿ _碋bq4Cjx0bh;X,fO߳v辶+:ǣ1rN!B_ =~n3go�0 tH+tY_ft+( bWsf{=6vљNwN7J-2xs tڦiz*}NmvYûliu;n.K0؝>2٧94#zn,4c+pTFT6'сBm;XM3e(^5>{ELǠ}sdfy:D=L/{3ͻ;>O6`N%nf3:%ݞo\m.:J̡|i&B!>*«>Okk3eYp57]k/0}lFe}AvD{L3AIIv[7v{2ex49;x�/$Çfƌ9ݎU46lX/?M~~f&M[Ȁz4:r.RJJxlٲ^{*iC/Hę:u&Joyzn6`ꞦSB!D/IbDbÕÕq=͗:~NfכH?>y=98sqGv߾wWx|aQN렷8B!/ Mɓ/~AA :*H$߃6We1:(L.l'�mJPt,l?rLuV^O/`&wy7#FEujkt0 =:}2MD"f|rA`ٵk/$99F3箻Ɉc9| <aǛ hZa`zzt]cmܹO}stgRE̙s1V2p`%K)Ő!N^^nDxW657kF:0~M5Mf3e{w$Bqq�ZtOnEs&&>\\nrsq8mJ)Ld7hnn|s\JNN.6mwH$xWذa-Fcԙ2,Z6۶mB41}l 0Mwy꽌3+r?.'OOg'kGx|He' q56sOe^?3fahZ܊q:ZZfҤ=z<a# fŊ%ĉ1<ᄏTT a֬-i:~rrr(..efL6 ˂{wx[TWv3l(LcɒS1֭G}uVn*nٹx>/~e/~˲0a 99y,X0] $`+ZY-,b)'EY__ˢEocVt]b(3g^@0A,㭷^rywB 2ٳB!ɒ�t?=_?]kF~EKB3A(Fu^dj4[,-[̒% vFy㍗9p/}_hiif=6SPP~+(--4z5,Y׿= XtohZ2|EiYٰa-ee0aJێޞ?V  c6-[wSuFf ft"|U_~ԩ3D¼򳴶q:Ǝā՘IM~LLg0=8nY@Λ{[>}60` --̛^xwUeF8[n"s%WR]^{X,JU {^_P…osvl6GO4ضm3@3/8fI&SSsV^AC0Mz5kV|΂ؾ}+>/@sso2͍tmvqK!B$�O(ф2gQ6MB@Ӓ#B t`el 7ʍ7B",gFOrį~c,Yu}p/7x+ӧ0 ,+/?˪U˹/sEiğ o 7tn:t8r'*̤nkkj8^1YEEo_믿CK2t0*+NUH =~h[L0M0 nV.2,+7OkR%(zQG)f@SS3?M{O9r,pCL0_?y?"n7W]umm<A] MӰ 6mZOM~`,xWX]nV>,3/4OaA"`ʔg?.3}-BSB,h +`BqPʢ3/0l(e1l(Ӧ&##@ CGkv)))ti.׋eASS~�,fc;عsXPA.rs:e6wF, Ӆ=0R9L43L2k?`ǎ455b8| h4Fyy%s\J0tд>']+DXR lذ!B,_]$}fϞEt^Dv{O׫) tb0 כwW#z s䒏4;r^%6n\QJQPPĤIaZH$L0B!ĩЏ#I΍?};3zVGGU7NEԇܧ7B!YbР|8Tg:e '), t\.WzN{tlkk0mm<c2z}ddd$33;^@`v:Xza$# P]?֭nXX,NPdgt:,৥}"4 4dgPWwX,Νy챇;\\|>Q9RSwm)mұ bQjS"Y\ncR*J),+w(\Q!ThK)"QBp9}VJܒx}B/p:dggc{D6oLuu57h4J(Bu<.W{Gq}5X~=cǎUP|>|X,ƲeÔQYYb6B!`i&0MzQ3jk_nEt:qtN{4Yҹyl߾}PU5<rlOmjF"a O{/p%WHO{L=nmnNKK il3/@)<y<^}޻n/n.X,+MӈF#$ \.at17GQ~E&BS5?#/pSe1 7\0EyAh ի>Kdv222'ꫯT8D"?$Ç| _s=c=~ 8cƌOz,233 馛G,m~?QQQq o:mm!xA,Yw\r%'=gB!'l$& Wy(/A4'v{c"` <| _'//`߿I%H$Ν[c+͢X~ܾ ˲hjj@0nˆze$&͍S\ɓ3|hdMfBP(i i:aH$ahX_2妴%K{ƍRzJZ[)--p !Bt3{`}J}k9߽b\,ٺu } L8ޕ89,Zx^taxg>cl۶ Mӱ,+pM c=ƬY3ڵP(׾v[l?;߹/3P 2immfx9:0FønNWD"Nqq1{yyG͏I<'wP\ܧәV~SOqxT�Z!ڲeo٫J) ҫ*9?� .+>ƍky3w_0.>{DMӹx%̟?Ì=x<ΊKF#˳jG2-N'%[?+Xdvm'##%&:/ hћdddiSΤ t$gocl߾*nx>N]v ۟Œ1rX&tX]Ϯ˂~:p8)--cɒ<RY9lMj39w9lbkhmm"f̸�8Rzs?I۳.B[?*f2 7+ekamN4esfjnΟ=cFblW9|pG8-cnj5M08њa)'NC/p>g Gh4c=ѣ{xL42ӵpĉJkz}8NqnSd׮<Cl޼u]W_a0*O> dee/I& ?<ƍ ;hbQ׿˯MSSS�ׯ㡇bϞn\pNnn&LDE"BR Fnn>uu,^v9˲<.JsS3ɄGNN>v˂!C/?c=LFF&cNbu׷x'xa̜y!W 2~w/+_6_Yj9;vlfQXX5\O~~{DOGPAvv@UW]GM~^{y\.7o7_e͚3rrrB׵NRTT 7|z'<sf۶~ ۸),,N-gpcc NVV~0ݦ!77)xLf$yyA5.cܹ%Kt"Nq:kY0v$gG(JJʸR^^A$!## ;rrrlg3B!8i-c4,+E<#;+OjF o,ZC˸) 7~xj;3>4^~uwY.2Y]탿 JQ_ڢh Bps7xb#߅])Sr<M܌Q7YC2u, {}=%\W_tUg9 O~UV{QRR],y@ osm׿sww~ 63gb޼yu]\}̜9u1j(jb(K,GW_a*�^~%k|s# _<S~ >Ox;[/a�X /oQ!Dc&u liHٽk'�eLY@4RYd4MXp0YV# ESk<j# f`4x<NM~@̬tZt]';hN4ZZRA,`1q=_%c8N|>?q:]dgp8ُ&33 S_ڲ,:@[[+>_̬.KOBmit\\TgØY u44r 3z}sGZ[[.\NjICjlA1477Q__adeKLfc4cY`-H2?N5VuGcey #B3JWCa4F$`l{H<NUii >5K)Z;(KDhiin 3:hD5v\ƕM,"n70#bŮwyw^X?k\:Z F1Ysϳ| ƍ,ehjjbڵ,^~283f駟bȑ'?pW`9\.~tJY5j$q:]][:SիWsF c=ƛo@Q^^o~;.2BQKfrlcTj e^^/=z㎥5 222|{,᢬l`mGڴujS8 3:m+.wVVvut)NSG꼿R Mvܸ\cxx=n?vگu tB2q^۝uB!84�s,±8_>ad}A?>o~>Ǝϖ-yν8qxzkasbX(Z#d J2h 74Pp|47t?9_?illbI sC`j"۶mSLaȐo_5GNezY4Nc$3oߎi޽˲Xj57nB)Ŝ9)**JɓyG/~A^^n*�-BK9VWww${j}+Y<'3O]d棧Ⱦ'r>!BZ? @kht2QJ^ Kˣc7Fk%dVJpg %`Ot 03B~` }uիPbxu*xNGEEk׮!Fw| ^x{#?4-3+0l |[bȑfa$ @&#S|^1Mðܜ RAAAoJIII:ۥcݻw+0}tx 2!B!B!>*0�E *!3M\N2}|?ذa=x-cӆ \{{<f@@rw[Ђ>nZt Fa=}\>Zf ʼ*\vO)n_{?0W\q;v  qe2e #F`eD#G+hlldɒwؾ};k(++p_W{u5kPVVȑ3g6xg9ؾ}.'hhhDQz1yd~߲xb|>y(e1eT4s-'Xz5cƌNg9777ĉ;vqG!B!B2� xr*4Mô,N͝JNs|>~q:]x<n|{8Jf֐#__!ϟH޸k8p?OŸ;+c~ Imm-3 wytݠGp7�r7Ȟ={O~B)w&l2~H"_dgg_O|,[_ddd(,,D)ňo[,J4MRF[} !B!BQZZCD:qW}%L[B41t܀ ?S]]Mqq1O4D4M4]Kf4@>ipbA磏,p|> IfP]w}?|[+?ɓikk ]zVVvػw/iRXXHnn.6 H$ݻZ)))p QWWԪ ]tΝ;q:b&Yzr:ľ}u"rrrH$̟?w{%tH*̉DݻvPV>ؿ;e!q,gkp e}8ʷhL,7(BBWCefP 3aY~%%G6uZDpuK:m0 Mٳ{h4ʸq镼:=Nr޹aw=FcQݎ?//NφB/k֬ꫯ:EA!B!BO @'.GPgdFLg͚Ÿqhkktt:ݵ=>#:�>�iS3 !B!Bq�8[l3+x:99YB!B!/I�bLڞB!B!oH�4pڴB!B!B37q`}M_!B!B!Ĺ @k{3!Xz>fxb\S]uƪE[14݆G>=!B!B!v>�0-BnD:A Z?K,&Lpu5;vmNM!bq#㊆Qqb<λ'8=YB!B!g~V 6w *pv 5<o~_,X6JKK#GLvơCLff&ee;vl=#:B-8>r�}>S WgP8p:ϻC�*+[vxm )K!Biz,XbZ{tC;K !Th{kxy6uNx?o6(--eŊ٫㻦}N)h3^]u(֭>ɨQ?N}QJa-ۗ @$TOKP5X>gx } nOŠ6N~i(ei: z{PY)D<GmBtكT⾻B!8'Yb- ٜOG Hβ,,.u4 Q9]B!CO/YE:ݖ-[xַu]ԩaY&=fHO3s BVhMӰC졗PU8 33nۘ4i_3g+⩧{1*C40RMflvG^EtᖃlZ8իtCR16'<GMc6V[2Sn92'BL4^$W^СC(1bӧOGeZzB!8�ƛ7cyoi}Ldʔ)-`i7[j~@[-F9<BOHfE8vr|yi2yØ5t.S͢0XͰ_Hg3j(6lH,pvcM#ryw<B�bFVKV*|]^ .oeYAnb눆ٰ; y% 7}3 p#Yؼqlv7g~/B!a4]9+54?.b(KQ5`ע!h!B5v6s(@?EQJ؇;fMDXme\r*vs*j \<*Vzw/ᅿeƥ#%9l6@}{ @iDZk8NWh_Km*T]pyI|?;!d6< `ַPuh FN'P!o_Љ7tgB!e*4tt@D TB!g~KcZz~"81b@ .@  q>㈛ J ӓŰQFu J2h 74PiَR o ʠi?i?:� G Ұӌne@)Y,+ݮaw 7a>B!B!B]�4-t O֚erت)3p`9J)֬Yȑܓ=u;y͟iIR|xtS3]}Y[g|^[W11U9n5 Tf\q8.z^Ptg?`2K_W~#λ+gԌ/_R/"tAl.N!ih'S\bfJ.ژ1l4M_B!B! .�mrdn@46G_憙55`ذa̚5xRy9rUUú|7*#}ݴF5` /z||!yUt=I$Ln¼y'O|}5c >RJU΢l%l^%)d۪13Jd—Q® 7K݁u8=N@tnwgb Gpu(irrB!B!wh xINy~r^6go�Zrۏ뮻u@ ׯ{<.Óͬ!wG 3m3B??O2!Y9''Nii);vl ˊja{p8}9hh躝ɟVvy1%b1z.͘ʚEgsDt,+𩷓W:�%c&8 )t"m!jD!!B!B!~>"$y͗u98{G\QQC}LAA͋Ͱ1hl6zێ^xD"$rivæJٰK<+Y۟Y-ð9)<15òL\@W:Y/ZGqsS9c=.V8=Y�fuKDB!B!BSt]#>Sx<^ i۩<0 ¢㴥(ENRR ӏy1I;C ' W*xܹm$ L�躽qd:ftÆӓyU!B!BIZLo/JuQh25 J_d B!B!B @3 jWsJY!B!BI,"f!B!B!; B!B!$4:d): !B!BӏQϵיӺ~#m;6Wv7Naq2m>k'ivm !B!B_ @E[$;N{GL#SWWG8!##H0DӴGH$‘ˤp\Xjv.eߣۜ | C.2c"(ep {Z9{9E#q{sIT5wn9Lnأ9qxx 4\؝>oۿPA2rU0"DC> + 7m<D<Lv(4s4":k6[2w캽 Y;­uTM m !B!BsA?jo7/ O`JSFrءA/ ,R?gQh'h="H_^z%^/ir_6[ j9ĹS4 ,3xM7hϪpѽd=p ne2o>To[k ;#}Lsl~c?ӓՋi lc?ELlˊvسin_NIA=k>Șp`Ns}Mhi+~O_[cȄO杏m2g]2tͬx~B-O"B!B!M0� X}|rJr3,EY^V_wӈc|ߣ+V`f9,Zx^taK)֭[q}lJ) a԰䖌 m%|A!3(ʲ `QD<eQVӌRXf3J9ܩ>+,3Fl[Ec]ґ:"F"p#V=MK^&_} ;u^XMqk-3F}[fйTM467=fwQ59:ͽe haw%SP~ bVfORZ5M {& 0l- Qh #&"6X,@5p- !B!B_6ʢ\v9L3ɖ-[xַu]ԩaYfcqZ"M(yM9b!L+N@iXbK*y$x< k9cXn@9)4{pr6(H32D,ly?H3OE7"ͬYXG4l ;<7'uKD]J'n9ȦS[ M70t.c>lYw.&rhmt yf"S 6`n%[زxڻ zf�pp#?[: CY{%nd?fwS1Z*f~ɟhߍÝA $[V_aBdcؔ[en=ȺwɤC'Ȁa˿(e:߃B!B!omy1.y|rX3Aw`&SLImIU{f=xE[RAf" roIJG[ =]C8}ysT cйL4`1dҥK7]70MK/suҴdpvߨ޾RٶC'}D,o 'k+"Mh7`sx0]^z&&3 #4Z/ۗC Ws YiFNhV-|<:F6,N?G~aX*AC&2r+/L {`rNfPV=ŀd  z]^%d,e׆WYaGpp0^f2*~p`sx(8D"B)8x3SNvhbVΧj͸Yු C0-x)X{6?#?XM"Z!B!B OϙHNˡVYH_3'QJuXįwLE4c^C7qeS(˩H ̩䪱7pȫX]ݾ'=<Bsx6t]DzLXbxDt)ӝy?KwdȫhkaϦy ҡsرl>ؗvWrVZr`;䖌fwGɒU7`l[4y&R1s꺍g`W9j- Άp8xETuhۙ>Q62Vc+;A ;<Z|wӝ_2lZ8P=:b̵T_F H[B!B!IhEnǵIo%khh qfA4M# q>㈛DaA'ah4K) b7dn`-hǡ=eL6|�ݎR*u\0.MAQ [FT3`{:i}TI#M[(ʲ:b6 mk>ne@)YeE,LN<cz�ݍ/U$NuqJ]紎z V7XHgMGÍO]  ϟB!B!a� x\X4l0p`9J)֬Yȑܓ=u;y͟iPWpg %`Ot e o[xms^RËpǬ{V1W}u=!ݻora= M?2;}"Oᣑ&,cVSCKgNy>v*uR[eʱ.N! oqÎ}/�R'#Ժ:V;qoo_OfҰK@< Ja{hi={B!B!�ƺi G)ˢ</ 5`ذa̚5xRy9rUUú|7*#}ݴF5` /z||!yURǛkKb۱,Effԭ>:iql@m(Bu9d G v}1`׺E=iLQB5Xf7Mda&߾=3Q^A$\ϖ't<Y#P/]^!#ovp30l'wtHfp[փ8\#:ah3%m!t�ˏӓ$b!^F^.?vD<D<Bˌn="`6Bd` fj>Rd']хB!B!F? @î} Rdm<N'go�Zrۏ뮻u@ ׯ{<.Óͬ!wGnff|<~jf0'Kmh"40M9spxR{*,+NӇpl_ ;׽H^Q3D9TM4[ p0lN�vk_ `&,}_ rٿd*gйl_ ;׿7P9=a־tFATM#sWY,z蚎e%>t�Zuܾ\OV5mfEZ�ؼ1~S?Me'q}yh ˌR]6efE [:?y iʇ_AͮeZҩ 5v1!Ro5k]a\U^ۗas`}yHC-1cB!B!BtGki M, L.(*pD 5vus<b^YhBm۷f (,,<fSJHkkkmNس韬[�æJٰKSkW�݃6#iƗQRv$i!kMg*e.o6,b&X<~t<F<,Gv ncX}$<T֑E4TM.Tb&DÍGjc2�n#mDm0X+NO 7;08#-@2:֖'u\NwͅҰxFIzAJ 7bw0lN,3F,҄D7ڻ i?æ 7kF!N4onw`1H$޵l}~( !zロu֡{B!i~(Eq!C5SwiYdffЦb9cPJpʮ?n*M+͉۟s];|l#N Y.47͙^L ~ČӝӝqGwվJnK;tݖCr?ݰwz]8W<Y3:uB!B!8~N:\g؏"~.9~=GWdsnw/B!B!"AgB!B! !B!G4ڃB!oHB!jmm-ugD"Ho Ba rЄB! A RA׎nBsղeo)ܑRtYrefggAЄB! g@�\ @ǬuHM3F< Jawz1lv5>՘Od˄ޟLDMa&!Bcǒի1 :Gh);:  ,O΀zXB!~ֈ4"h@iD"aZ[4px<33hkkȽpR4jv.eߣۜ | C.JL"mb؜}2,HHfdigk@mZ?`"a?JDC $a ;8F}z0%3veK"fԌ/Q2x BS';;M6af8:jRq5`ݟ+B!~{e!6%7`)哆ic{yxWկ~%33i3 9vmk<Swi1~x~b) @"ƦkKS ͨ_NeH+ϴZ@ƥicɋ%r,4gڕts\WZ/m{s\|h=<Md]8=_#kcǮ `q@1r(qE?_67=]좑 x3+^H[ ̍B!6g^HgA gfذa}=!BsJ? @k4+38V9}ÇӟfWlv?o]S>EkË:;`0eYt:а䖌zB6c?A~$ښ 7,3v<ڌiƱ@aY T6'xJptqdw2&Y51xu䖌TL`14ݎ$!N*W#% v`Lb #eTlc 3! aΙ 0ֆIMu,bf ehιc l|/ &Q_M7Q"mNg=sZf)ۛKnɸ6!B˲ꪫظq#iJ)rrrꪫN:-B!NN? @úki7\LQva`?xrWGnn.?я2anqZ"M]9b!L+N@iXbK*Hѻ@h^^.{lERSv nJg+ei:f"–`E$aܾs^u/0r@Yl_4:FLel_,[<ɟa< M 1ll~KرYmu8ݙ؝^j3l- o';} àQ`EٴQ\7PۗǟЉB7ܽ<I[ 77`q缧s\ 6cqn$#wf~ �3aO{8]AⱶA 7}sLjiG "Ml^wjv.4`p8( VH~9B!ĹdAKB!D} [Ou]#^kA}ݵSN)YSN4mC�ZcKz~h Ee~zn23)5O憗Ƭs:hblǩ ;w;.n˲˹‹)  7j MV<<@2cDC7P@ğY˛ŁK*q 7uՓU0l16-1`ʿcY ]/2{{PHVMKn\Bٹ%Fpرy*fn##(im%p)1v{<ɐ7`Yq6(cȄh<~FfP}[f囿d/nxx+V=Ő7P2d{`nUna_F]aGSY,L/G龵z?7c]TM ;׽UO2d$o_Di齘!B#N6 ZB!V @Eb쨩edY?Cÿ >L$׋eY_НA&"t{2l e9t9\5.y+v˻IJG_ґrVJFu2{atE5g׆W޶�;HդP1ZN?&Bs.ښ 4ph3e.%x v.b̵_G,LIlfv{ 77Ͱo dA:<FYv>x 3|av4R4hf|D<J݁@2|Ek55dq`;ڳ8Wڰs8zȩd;ٽ޷(+Aͮs1rڝZppq4 wL_-b#m (v Q8p:#D<L݁:fBq:,h~B![2�m7 29 n'??[ۘ @0 {3xq3NJ ӓŰQFY1/PpPY@Spi(//?J)Ыp%Cټ]rF _P_oPf +C *ffiŁKe;xHCE tqLL7lhh6'n6JO\"@I"ea&j)6'`1($VFmjSq{֖cصN<RB %dk3%n=/4^N?ɺc3Q"mu <@eS_XHkmjI ŸY@!͂g!B/9A/-y4HF=իWbPɃoHK:Ȭ"+ǣK:+XW ,Y0bN<֫})+pp\,~[4쥭 wǔ4gJLİعE]I˱9lN+g1z]2azi�ॖFkc+6DÍ.R +@4ܘs$Tih/`B4=U*&Ϲcs uUsҡFR+?uÆO/h[xx( :̏n#mţ^ K<֚h^WB!87Hd? !B~1�Mxk6挪۰ ~M x7-fb=5 { _;x#}ݴF5` /z||!yUt=V),Kw?CPWzwST1Mh7PA,3A$@k%nH'oz Gi�8A ʧb ]Ns."zJA74c4L0c*⎊#YƠwEE[طu>u(KIX<S1Y^`/d;>o0`%ģmXKi}yi<?}M:PJa؜ddf2Nbtz2)vW>Nv ϣf=vA)CE2޾A3 )CV"i䖌pL־B!Do%Y!hEin&,ōƧgo@ 9dees%/KOex5nt=aƹmW9R?7�> e 5`w=fkeǚ@Qʤjҧ7PHAT.=~Y�hAq,o_DI2�u;æJ,y?Emf⊙TIqiMZ[ښk0nz;a5e6\lv6 7/ײ}ͳ~+@FZɕc?Ak^V-NOn^|| U?5ϱc (ed[2W< s ;<9@2[LDh8hRP6RjWb؝~lv7n_n ճq_ش1DSotj}�3<z4F؏Xw_>6o' A""rˊ#BQo%Y!ZZCD,4MY}1pS+ ma2nrӖ ǩ~FCC�`0aTpbAǵ4&g?Y58\Mab1"d(Gӓ߇ģ-4Bmx31lO:mY  +U0mMDB xG,HeY cM7py�HsX'eiM"ƗY.!awPV^` &\t/I mMٜxɀqa ˌv{Xe8A@#iiЈZi߅aKѕzqj9ӝ/X'6RMKqC-q8JOa ldž 71vW)~IN"4onw`FG%qv @Y@lc|?)B3< ?ϻ̂VJͯkF]B!8k%?5Sߧ/Wck`׉xX ۋvECW}n8o,GuGumb?p!ja%ߧ=پv_zx|<ޱ'z={z>\"J5 +B!GB7eeY|{B!)ԛ�t?,Q=~mvQCՋc{3C{95ܾ\rKj>ǟK@ɽlds{|{"yË-ŇB!6ՂB!K?@3߹4Lk6l%s%B]xᅼ,]4m#B!~KJuhG!B|T 7x#~d? !BC-NRMn OӦq֋B!e/uMcĈ (-c (7n<S}']nB!:�8)n~[!`&w;>N,fɭ`,cPNNf@Ybm j p8t:-rr,Bs[?@wuv.08sƭ&B!k:w.ppm}r\v%ih$3-ꛉ 1ٹu0˄998RP!~Dcdr`A&b&MMMXjtu:QX,yv;@O2MB! A4`RvqCQ6W{oK0l2GB!87�[yy ]4.]3ҜLkFwMM wy'-8R\.0sS4n4ֶV{߽l\ǃ`)/QZw*B!UMD#)t(KIL74r8f?kصQB!DhQVDKehh p,Z$aݺtӍ̚u>eb|huxB><׭arnslڴ_/z=oT !BS ػ5ĀtYtͲl'E|~B!99Lgh Gۂ>lA=p0m4.c壥?iw1{%Tl4VUqes7aO vލ,tMnB!6шIsCnVG 8ٹ.L<jt}!BӮHScjj[ZUם:-b#,AQQ1O.9dںxsT cйL4`16l߾ƆFjtMl@!\T2W7$٠Wԉ,,SBqn褄ihv* s(\ jF"aZ1M ]׎FSRh ;LagV7נuJȒ|qkY]ݾ'=\#L4AuZQ !BNN̙B!e8�Q]=5|zDv;B�ppwO|dn9#.dV(</_>^Y kLNJX u#RY@Spiirɥ -!{o.B2 K!B!Bѽ~vc3tUuWN+Hֆ:{ oID:eW #ǓͦP:;:ٚ2_c޺XW ,Y0bNi<¡P*�-B!B!8�FK8 WQB^ǹMH$ظq+0MM(++#//9P\<n,P?/z\>Zf ʼ*\vO)fUTWWSORQQiB!B!B4� {77-fHehNvv6_?R й{8n8}p:ub-\Up88~II!B!BqhEEA? 2n΍`_|D"S2vJ)|~?D#ɶv J)4YiE!B!Bs^? @a87lg(,,S5'׮=d`RηB!B!q�: >cVJTJB!8ƙt+B!>:z_w@!BqvRJa&x 2u;T4-UN$B!J?π;J),+dkt�eu3+ ,dʄBB:oOv@ ȠA;vYYi`Ĉќw}=%B!$ @wA)E(w.M-X%Ah!M;+ϒX,JU([ Xqʂ_D"Δ)3uB!&nX:B!~KBt?ϬYQ[{^/_ҿ`:ȈzLiF"af(e:ݷw6dp~ßWaraYiN,6;B!Y?@ẉ=7wyOk͸⎺Z/) Rhӎd@ !8,Kֆe}!D>,سg'h>X7n֭bϞL<Y.%KqZ>|JJX| V`2dX ޽<͛c&O!?H$ŠKX}"Ew,**a,ԩ5jJ)Xr)ӦA4֯_Ͳe9 4$B!hRշ ]d=}ҏA)EKK X6>x,v;@�ѵcbB!i  !;ML0 VZO>…o1&N<p8[,xbN …oo|D"γ>A,b0a?0@,\;vlf1qdB(#Sdeedx׸0 ^x&FpM~~!G#k/df͚%مB!De�:cxŕDc ||9\rNW0U{oիWvә_95Y wﻗxp8L<;%JNQ_B!ęF)hmmÇ3pN</~n< ?'oonwtBx?x'/2lHV\Ç(**b͚9x+ / ?U/_ /<ɜ9p͟v*~索j$}@}}-Y,Y2jyg>#Fk֬dq_* !BG0�r.~[|\x0/3al9f"`ݺupmC`a|huxBL$Xn smcӦ ?oR!B DG#_ikk%2qT.*t=Y[pWQ\\RXb)df" fmfv;f]ȟ kּOvvᄏ|LnӿfL$`ʥ1 ظq-H$dg}f�&N<G#[l ?k?{p57~j[pB!k0� k[t+.ÈbΟ>W-#'{w>.g?꠻F(o졗PU8 3pZUe܄ <'ؽ{7ХB! y[ZZNII>+8qYp8Y%;;MӘ<y>,]֯_E]A^^q@h4̛aSbq 7㯬\/a|<S%==zB_OB!_Ǐ)cؐB~緘2aϿF^ٛ0 ^}UBi@AAac?`$ӓk /S7YC2u, ql߾ƆFjtMlNB!7aˮᢋ.Oаd Z+0 'E|?###RxvNjeԙk(ei:3f\!||�),,Ԧa 1 rײ~j^xIZ9YJB!D/�"'a]6>yD\~S4Mit:SWN)\ςh`솝qv+k:[bdx>׸l.n_ KG^KρdX,Bss3HMiinFN2$.B!6 (iZfJ)nV[> A,Ov=(u3/7_eѢ+8Rz;R頬lK.d-5ÀDB v'=xL0ev{8bŻhĉt:0M @ !BO?jZ^~~3cGK RQٜ]k&]v?Ogc>rG=HC[]:ȬPx^r}{?1F$p;o@>5U_/r~?%{/%_HF0: !BSts?ʕKy߰kv ضm3uu7F)EEF{-/t2m+eaΜy݅<؟=Āٳ={vr_c'MyyÇ4aܸIW>|4%B!аq~A7S&usa<bvMn'Z>9_ȗ|H")fY<Lo6ѐ PWU1k[W11Ue_5 yyCT�Z!B˼^/yynA|~rsۏ,aFq䓏KOc1c&kϖ9B@cѝ  /K躁d1躞n)Sf0t�esih';;8RB!e�l@O/cLW+oA)EA~vJ/rb7;G^YEPӴG_ˌRWI}s_ʕ晧S)B!iZ\&N</ed˲O2wI.28GSWw˲3=eYL:#;m{<o\ƈcJ38[n3]e]C"fI�Z!e�Xn/e<nX/qU{Z̧'h?9ny7y|rYNaa1.`p8 TWzٿXB!8>ۓ Bw>e@W)wry vrr&xxw>@}B!Da�Z߿=ii 㨅D6 p:v6hH4ln'k !Bv7y oBPu[⣻vo{2B!�4$W3S羹;T];=Nn^^!J),վB!8IcCcB!O>8)@YɅ Rh}Bc,Kf͚5lڴ0~дB!8C�t߲,Ekk[_wQ@2z@b)9B! R,͛7~z֯_ϦMhll$qf3T2B!DI�Kv#VwIxBwzR466~V^͆ ؼy3555B!,BדĚȲ!B!B�nbauW>˧!}4-M} !H$Bmm-۶mcʕYH"@Ӵt :MӰ, KNne#x< !B^�t4--Nd !;JcBt֮]ʕ+ٶmpVJa1zh&L8 ?q˵@B!B!8˄ajjjؼy36l`ٲe>|NYκx<0tPΘ1c(**"###nmLЄB!FB!BLӤM6ܼy3̈́.v;TUU1bFСC 8.#'GfM!2 @ !Bq TWWf6mĚ5k>f,g]|0zh=z4Ÿ^W'FޚB!ĹIB!Bbl޼9i&b.6lǏqR n뺆ͦY}=gM#ܖ20lB!ĹIB!BS<xe˖a6oLMM1Y=-8p@N(˹;N N(ydzRDdq8B!D�B!D{ xٴi;w99''J&LѣY<bw `:2sd;%9$I{ɍC{CVye^_wI!H�Z!B>^⁆abرTVV:-Wea̬\ ]躆  גTRZbW((B!g* @ !BqIcc#6mT,g]QJaYVzC2|pLB~~>>߰iL(&_vah}^=Py$\) 0Lgg3pݐB!8wI�Z!BS,o>֬YæMXf =r<~xN ppptFɠ~ ģ}0i7׿L:<ϩ BkX{͛7'MYY;,rNB!B!)hlldY˗~z?{]uy}-�AD!VSTdɶJl7X8df♬ZGI&,M̓oq&''q%[%E")6W�o=eظ� ZE^}�s{frJUΓU\0oYiϞ}_$v.ƧkYuϖ-g7;ph8xO1Ͽ1f~7̙3лG!$B!sqQ>K{{;?nsEEuuuZ 6L*颻=,^gϲnznn�?ٳ<yeY(G�> {B! Nh!B!w念D"1nsqq1,\uֱj*ꨨ',ʛoIKK mfΝܹxাܹsyGK{+_MB! B! ={5," CRQ__ƍYv- .X,VMyfضRA{96lpGyW^y'OTJ,B! B! 5É'm8477|r/_Nss3UUUR|~QJ*}c? Ðm<DB&!B�Z!B1raf[[d2_ Xd 6mbժU )/ϒdZkS\\|SqT*Wl}0 W*B!I�-B!ܵk;v젵~9ZCOOuuuhu]JKKZʡCXnMihhsXcƌ?o|z !BB!ϟ۷`mTTTPWWƍYz(M6XE__… 7oq+Bx<οx@)??>ImmmwB!-'B!\m\UUEss3WfƍQQQ!sh48Q[[{ˏM}}%_F|k_C)B:!B[Jh!BqۛL<v˗a6l 0 ӻ;TF ***ַ7MBM!░�Z!Bܖr ۷[^1taҥEn}|;„B!cH�-B!nܹ;wC5k0{l g6gk_5!B$B!^"?dݼ۴]Yk-(uy' Ð|Ez !'B!4l۶;vk.Zʕ+{$tFy'ikkXhw}w%BqSI�-B!}_|E>L[[A`YV1YSM<~8y$ַB!i$B!S^:ۼ更a!���IDATH$�m605kְeYL9.̷mzXB!7B!bJYϳgz{{ pTܢ"ٰa7ndڵzB\ֆ gWW<|_.B!n B!ĔJhoo__W;Bg5e%KxYr%UUUV>OիW|BI!↓�Z!BL d;w}MP9 CJKKYn7nŴVRR׿uz)o??B!$B!˞={Ν;ڹ{w 6n: mc| _ooضm=P$BqCI�-B! _~_W?~d2_PPkMii)lذ}c̝;Cx'غu+ŋihh(B!n B!-[oOSZZZF-*kax ֬YCYYY,MU^^Η%^x.B!n B!-믿s=GKK aY�J)i!hyK/裏JſB!n@ !B*N}v~y^`޼y<#<#;VQQ?#^~eB!mCh!BqӴ[U<K,İ 6vZB!mEh!Bq OO={vMMM<< 1*uB!t$B!8dPJ!<#|K_b޼ySR ^י1cF$Bq]$B!7D&'? ?U�hロOl޼u =T!"~orlR! !B\ B!uoo'Re!| _S%%%ڵkdǎ@ !bړ�Z!B\0 Zf1ӧO|z QJa6<�_ /_^! 1455q}/~BI!I�-Bq;tY2$L^0 % C�<xC_TT?yQVVVbZڸq#/"{�Z!ӚB!w.oH$!A0Gչ[zݺu|_Л&Ĵ|rf̘믿C=D</B!U!BZf ׯχAqqض=O.|D"lٲEg!SUU6mb߾}\pB!f@ !BኋWBuuuKzR[5'N(pB!B!+V\W�Dx'*q[Xhx{z(B!Lh!Bm|ӟf֬YBK7ތ3?>ǎ#Jz8B!Dh!Be?}"!Bxxe˖q::: =!Bk"B!�L{s᤟'B<K.<>\!B\ B!DܹsyGDԧ>%BϧBE!H�-B!FyG&]! .d˖-3f`9`#Bq$B!\M8<TTTzBܖ8sΥC"B!Ĵ$B!d0d޼y|ŶBY֬YCB!j@ !BKL z455zB.\m۴z(B!WMh!B1K[G},B\Z,ˢCB!jr B!g?Y\׽ߴ<,[WQQAUUZT!b*�Z!BL`ŊB\O<!bBB!v$B!+_ hKzxB(555tttL& =!B2n�T =>!Bk`~Q i&֮]&|T? q ͜9A.^X!B\g/.B !bo"Z J8L8Immm%۶+PB!3?(Z>)8B!&%B}.nl:4\r̓zXBQ ÐBE!\6LRQ`Y.Z!S[ &� oL:/fKx3ps'^9w3gbYB!U7VJq2 ݽ8O!S &h4}F\\|| :Jayj =L!Y!B\V@۶dY.v!Z B! -²l"mK|. gDСFY%*�$rR @B!Ĵq�ڲ,\Ų,'�Z!SL.- qm˲$#~Z[/QWWG{{;T.B?B\5 5? !b09z\)|ΑZ[+W}i<+pB!&͹rqK-BBΘՈI|=&>H-ĭc6EEE~#B1iW sF_ЩzB!F9GBh!nR BE!bҬB@!Bֵ9zRy<Τ IBܖ-PB!&mйB!(\_) sZu]�-BitnAd2B!S¶(" >H-UUU@www"B1i hqN xޅB!hjf*V-̮U%!9GBh!n B1M@s!t]EB1uuh:/CkjABݬ9GBh!ni!B2КL&`EEdB!BLaJi!FsBx�z(B!6nFT:BT> !bzPʴ KBtֲ9*|Ʌг9w&U] Ĵf UaX!BLڄud}pB!!ZMV9B qضMqq1DCB!h=T5$nB!NcP9GBh!n ۶)**"LA#B1)z !BL'LN 15!BL7G'Bq ~s>H-qbB!Ĵb]B!SM& S'|ΑZk7B!.$B!dR[_$lzvʄ9B qքa(8B1mH�-Bq1i͚gRZN9GBh!^ =!BI�Z!61>-D s!RyMzHBLimSTT$B!VL� i}B!ĕL9GY%k+_Pʯ;ÃB!r =PmAU !X#Z$Lڮ.b+eD"e<5FB1>*y�szXB!BhGWX˂8̨t9sO8.TWZN]{=WG_!i  Qsm}8N6 i?Lz_ !1 PnB!4rRP^fLiY=a8-+R[כ%.nϰswvTȋ7>cL%__YP\(.VD"nxo-Yf{ɿ!t] xg[#JA߀b@&Iw׼6_n繓_B!%|ΑZ%z8B!rf-= 7E[he5̨{}xLqC4/roS3&V b1@@: ѨyLF:H<̿G\z|qY<.5 u:o=o.\F3߿rz+QS]YnpCLGJkN9!/B2Ϸ- ool 8f;Bmòu{x<9Om<_YffG,Bm)ǼNnqmyǖj\ !BLv s$򊋋 ?B!k m 6TUZlXA)x!t.|~(WG,`rʢ"lݑ K)N(%%XTF+֬0ɦ"֜m xOސţǰ,>̪ ~ǁk"TTXڛQhDЖ(3g>QRb1 ;v?2-5VP]ekoBx3We|p]XGcZ˥gFGy^KHjfV[]&5GO|#6~v5km@sk8m_3PhC")*-֬PWcẊ޾d26o?iXءآ-` VtFlߕu6kVڸ7!CG=|o!b] B!#\S�sW*z#p gv"@XTjK:L<M$?ƚ.Ԣ~Meų/p]ECCqW1b 1U3*gX imS3˦¶T~L53m*-}9uk`b).u6?{!E{6+ 6iwSZxܢ(ɘ'>WZip(~^ ?&Ԧ:ލT'! :ٳl,ˌ|g`1sE*e3H,s/p>h]kSVb6:1_+-UR(>hY6!~� 9̛`[g'B!$sB!B)V wZ>BnR !|7\pCoH[G>'Ox ^*_|ςy>ަ\-ζn9 6Y2mҸΦw'uimXe498=<8ش.B,"ţŘ`s Q:· nZ8V3Co_ Q6xYlV,N,ZpHu4ۉXk8pc`0d <̒Nk/ʥ.8=͏`,[<^eJzl ŦEˬj2:S>0){C֬hCqm \!S B!k±!L f3޿x+`BhCibv+"<[_MQ\EqE@Yn\>|?K{G@2y}rWqސ61  ipUmQ]eqrapeEݘ7=&W$o4aٮZ)Ycz.c5f<sWLV2Ʀyѥ/w3x̄3*-SPNYu)!> 9|cRܓBgHx_!1"$!A�EqUδ8G:%|B!N s$B!bz�&s6QקśioZ^̴Y0ϡf2=\j*KK2Y80}dʴ`RWk_iHgL8;"3|Vi±cZa jm)i'dR3ДQFldC<PmghqB=!YOW =ԉ&Xl'ʼ9m! -ӒEfTk?0 -yt,kvYI$M/_mp2-KB;ݝ>H-İb�d"B1)@!4\>|jgͶ9qڧ1="fV6[8g:pQlr?JAM. U&Jg㲞Y@lcn;S)=jAƱ4)sPT_ҚkRk# &4;we sXeBezH&4%Ŋ5\@;kWZcC79,[^|PLi^exipm4ǡyg_JAWB!$sBEEE�$BE!bR;!?7V>k sm>`_Ks5� ѡ[/ 3gĢ޾d kyV7t  YaLn Qy H$5Ja7ToKpSmuwEXRoVTUmٺbc<Mk{e.o3aN}D5㎟ٺtSDkX4Ǧ/=Yv|Dp]d*h!b GZ!B0B?B 0ոJ3>=!Uz4΀0Y3mJ!'D#tFS^fGӚ:oڀ d1=s*+,~E$RREUtvbTYܻ1ʜz7z4x{k`ƹלϿ`Ho>ge 049|q\G1ce>,]zNkz|=r٬BgȂ&XԥܢHQ;Jlu2?Fu*LŽh ,^`_k{@&3~B!BI-B!rh0c DBWKoSYsP<OuGsvfYe Gض дpl\͚TkH$CI+``Αc>(̞e =!EDH4 AKf:sALjv|e,a8zh Ljnq,=_?z 8Q3f~ClQ:d|TZ73i "i5UЛ7D& &|a,Uu6smzBmǝjB~c dCg<JK,֬t`hhvն 'B!Dϗ'!B! B|:̬@�/tJ֝x+)lƢgs* CO^Öe%QTP{4H5Έomص7ˌJV/$1^*ymg[[[3Q^fx0/ [wdy77`; Ҕg: ysV.sI4 )*RܽT1 ||,B+K)ʆ*C<,n汇:jMjh_k"iHj~L2<a,e }dҼB!!H-B!p諑 'ϴ>6T3 ۀ7:ws_ӣH8z=_y[z|BOooDaj*Iǿ ={zblv9ɴfnMyŲ%bEeE_ȑ~9W>utv~<_,0ܱcǟ},BaH|u$B!b+h� dq CWH C>6?Wo&/<r k"2U噌WYδ7z__B!$>_ B! @Rj^z=mCvMtwOhR&cY!$|>B !B1uݱ4*Tʋ&N'm2 jD\!S7B!BLMwt� o0{nBq;R 55&ڹ 56{e܌1z- B!r�Z!nVsgy:;>mSY9 Knx�H$p:b%ĉ|66nsK-B!Fh!B[fJYkhq q?O<y6lqZjضo_/CXȑkg1oZ!B6XvO!b=t:E*d˖/>[8}̫iaaY%;r5cv&jjfچiBhzC!tӲryB!B\T@ !B"jh4C=ڵf>+dZaa@gg'/vũEiiYMRL.zz)..f"5fͪ% {z.r9"(_Zk.^줳0s,+ox{B!$B!nUA�ef~q~e]̟?A'ҳ)�/}k7̙gϞa֚o[|{GXz=;?;:D"aH s{G >p}[(B !BQX@ !Bd:|Ikm[,\۶9w ygoٴ>6m<w  }<Xl%εs9(o|x^˂ݻwo|KORTT /x~5ow/|t: /<wRU5U֍$B!p.@k@ѨVB!M5ԑNl{Lև!c6ܹv,^/~Ju&{"w|s_k_WD".afٵZ{w"J?AknF,Tb_�E?>#fά_uu �TTTgٱc++W) B+xE B!U& ˂b Ƕ k!BPZC<f~!DṈ[>]O! o|?;& OhQ dtv'ID-D".A`] Ap+z9rKWܼbh;Z8/E)n#ɐd%|,˾)VWpdb""1Y[!BE/~˲o0B!7R0 HJ%tJq0Ar!5k6d͊A2(VXk8MjdL&Mii NL&<VX=@ǭ[Pf=dR>>>Kg!B!nJAI¶B!bj BE&SQ l~d&[_nY˲,Pֱt R[[ϗuG~T7{R)βhb6*Ÿ=;N*(k***D"TVV/| nxj˩}kB!ȕ>Y!%Yb.2শ7 3gNq>\x4 M7t y痼s\ŋl.`DQ~} v_eG_kMyy˗šCyIww7gΜ$̘1k7g<܏좧;wK,B!mȹo!B!$BJh5�Wh4Foy'P JKo}Zs9y ,X̪Uk9?G{FWUUSU0 r,3gΜyF?߁C/~ n۹in^N4$|B!$B!EnvfDD}}JYCf?ĶmoF<^Ĝ9Xz=ea6WXx){f`rWp�V\W7<ԟmۯ<OEE%g7pb'-"4MM ?{gODih Wu#> !Bq�Z!!֚k7~^6661wn`Y6aq aÆ{}q!+Vʕw0oB[Hضo1155g?CkaYjԿ> !B15�zF^<+SH^mCI9n֐y*D战͍fa2VZǹYplz6羦֚ CkFY!BmlH*.xRXcH¬P t9n֓y*D战ύVH,B!r]X 9{Ϲ !_M39βXaNm[^q"T\1Ӊ7B!BL=@kaխob=;CfK/帉By*D战dt$!!B!SuT@kҙ̅5=tukv]c+.)MSq%2GD&77' B!BL]ֵ<Tiɀsl*Q d*d5y9nby*D战t c1vTmP}I,B!vM4ޔ~SC71U<W"sDLrscH,B!whzba[&ML%2Oŕhn$ B!mXtt\rۺ71<W"sDLdܸH}y> !B1}\sB!y$B!BL/@ !BLQB&B!ӏB!SІB!BLO@ !BLqwz-B!ӗB!BK,B!6e詰0Whn<٧7^zzw:]̍;ǝBK,B!W�:E4z믨, b\za7slm>:L4_¶ =Cn"Q(eHшDa˝ GR ,ˬ:lUB=t*\W^k{9)fTZX27wJ-᳸ZabYv|C!BLcέ~A˂ ]fU[h`쯇O|E9{[66E|BzRE:im8pc`\>HDa[)j by˜F"d2ـ<Ri}[^�_֐4C<3 Vix Eo u6K:̜ac;p;qSgMkVZ%brhTυagzzCXm;d0=$۵-X2a|rA۹-=a=1yZ7՜?\Gbiyޞa-Bo}{bjq{p$|W+KEE%B1�ڶ+,^LitH>V`RRZb6Յ|$&̪V4/rYҜbYj үez6<pOUϽ",|Д >`eK\RiM:5áy˜z_fpL(6Qw#^Fe|_s[[31=42K|pR<c&[M)Xc㊁ ̩wXζ >̒ !Uqίw\hn]ຊgٳ/CB*UWksd]öa(7D�Lh\wX0_i>ӤW~_jm>oqNqM>LT 5֡. �[n%B!rny�Hj~$pmr&œhTa)z _fK[A&gc%yg{XTauk"<%3ϧZǧ l| �0aBf9q Q8b Y3m"E*]*habK]y4ɔ8x+ ~sۤ5d2M{:5C`LfYf~){igܰ<Qh.3桀0<Rp3rG#Z8«iz8H L=zf5AȨ[c)leoq2Hļr՚#RK8OR<~CP ^~-ͱZe w<s5</6h"8;nżFu#<%k>Ji{)5s?2\q;r,g/>Sjhܞ d="澿e - ay0Qpr[5?jm^7oڊwܻ)ʦu~J 5fGE\\n(ńtx{kHD LϟxrmHr,p#wCFW{ 0϶%?ϊs:˩},..4B!,f߯Qj/洆RMm$h9sOe#?sFVD8tqysV4|x ˙`TP\Uet˹ \jܚԢ~jTa.׭Rpe*7ip]�LkrdYaLhT`]+/ԥ%&Ln9q|mw $" )56tk÷/gGE<m2As-pع+˅nmoS>PVjjQ; |OcCmE"9p ?AŒ*\fۄ:9!�䰬٥"9r'8H;/t:,YrgGvu1$S,]0oCIc'|}`++,֮ry}|_Pgu{TZsϦa`.XHj~VXTX϶q8w!G _E\;Lke{yجhvm׺oq X,[RRśivQ2c̟p7jq\s9 6K̚iJiN9pĖ,t1fp0IG}yfZ.t|8F9v'5Xnߕ%ifΰXԥn(l?pţ{SV,s( 9rܣ~M2ٹ+˜Fe]Z;|fΰeCG4qh^0&99-wG3^䠁-+45d=8z[AkQi)}sTm\d`V͆JK'A>i]{s J6E}^n݌ǁC ;϶y ϟܾefKLTZsGŲx{@Q|Zq>W2T?:/._|gyE}x̛kql8{_!tu:\Ldk =,!B!u*X� 'XhkcZ?< 93.K4,^)<ܵ\8=FcCqb^0_6|4ݽP`anٞ7צ@STX FYko-/ov LjV.sYٗR?0f].6տ=uP]WS< db ]ΐW~?vũ4[l1o^MHi.tljÄ96 ;wges QThv{Gq y/p }<by|χdRhMg^Hqό*O>Φ'$lZa"=`R, m\^m˶EP(?ٳcnCĆCkrtleÚ}&|Zeb_IrħTGb,ZLL}Yإ5ɴ&P\xMs.ny?}!IWWHcÚ.KẊ6୴T;ލ3*M\k!h EqFL6I=Cտ#o\v<`':&xQeѼ(ƌJLxy !kldغc~#sc=~q& 8li0Keŧ3BW@Qԛc88Y8ᓏĉF;~}SmCY3-֬rYa``(l86\ Y_qŲf6`BSUiXgRQn2kłyabϾ6WtFsiM2yc }L"{X)l[qQ6t=!E<yf?Zx4,ovyog r?'OTWY<u6{^oaYN/7.$Ӛs*-x,NqI|w`> )+4h^R^f10)7x3Mnn{|޷ӽ?ay˖-+B!ס0hTHsJyT4.df5:cl'ϙ&5\ͦͮ)+Ysk~wwŞK⦺7W76 RiN (+U|88]}YvʐJâz4NSAl[ko^'3_NoBR Y8ߧyCC]1>q.$i@C[bhv98ٸ6K8|'*/ʪeiBεQ4/hÞ}Yښar>c AUGWȐɘ0摇b̛cs]“;veٺ#,Yrφ~�Ͽl{@y>g0TZSYaCȄ&*Q}Y2qw9|g2E vx{k7c NCG=<TN{n=xYX{[b45:tvfk9uG4ټ3֝Y'Xgglۼt2R`~ͫHQ96e/fϾ,%l&h\8uٗҜ<SYnq(uUpTWVXCm2`B{oG<;†QlN(ipO$s5+KZ؜;i5٬yt ع1}mYBwzӭP?030-5QBx+>|gH[ OL^z-͗>S^L?xsd^KxLm4r?[~;3;KaE9w&:C_9_3󭮶ȰGUg?֬GyJ{Pt s=ۏ 0`~L6~zJBh!B!йgHH);1:iXohͷ8|c ̭>FQen//S83k{as؋\kgDAؾJ<Oәќ:p BW HFL՚ dž YA{ LTimjz^cBfr(cl2[o_;0& Qe V4JCQsy2ٶ3âyfΩ7->Z;J-3MF;_}pO9z͚bEA͎]|+twҚ6UUdPgPg*T8:h^eHYm*2*%ŊzTJcW~]-Gb~[[ݽ`R0_IẦIU±U EnTZ IMk{@UC>&дΌ)z ;MR ' \ƾs(>CE!^}M"aB.ZÅ΀W~&>DʅcSR:S8`qeҔTWY<p!l?Ò35/8{�k1-j,*+ ]DŽG6tZr5 Ѵ H&5e&oQ[)Jή%fΰimvpk0#0&I&c_\f\`{3{>)*R ){ocR2u~9r7w8(8jZ;T~^ &BI4Abۊ<?\gK)F}(t u9A/'<̉پ};e~~i%KzB!BkP�Z)l4ɤ^T�hplEiE&+)eQ(ζjgYC)G-Ʈp!kQ| WKmgZ>l-(e٦ {25\  r0&Z=!ooͰcW"EciurKwoȞ}Y\4f,EZ8tv*f)_jB#u{cRJ5sM\P(dH6GͱM+]lK1vV|x B_WT>&5AGxLuJP>fAxL:Jn̽}!c(io9�h+E#@ji^.$-$`@S7axrR]c6͉g>0Kk=>f% >Ɏ<)CKj9#l0cw]iaΓ#?Jg%Ð{1@_5'ѐoso}^(f,Z<bfa.K;<xo<uɱQ)+U70s~ш"aJ7t哓;Gbe^3jn!zxnh WșpBwޙK^=2|5̉s}{Chll,L&(.+B!}8Z.GhCm ۶DP =!}f5MPq.#`NC<n*ǯ2e06qcklcrV0Gr3ׅ?\30AŦ:R&<ߕ|96-GZk5z/CvDo(xMkזƭSiy&~g[,8^)UG"&b1E9pYm C0d\�xC, ?5l>`T?`>UUP^f?1̳fڗ0eK;ʩ3>4U[6G/zJ~MaW;n, MJF1Ų%.ɔYpm>>!ϿfMc[=$)fX9mY:BeO_HM7PZ7!6}&ЫWDظ6¡ &B֯�׹CL^*mٔXĢD$b>ik{GgWH"r;c;o_3,J-d2LFSQ^j;492~?.nѤ~(@LiKLv*!ϽK>@ݗ.v)B k 8O~,bǎ<!�EEEB!A`+Wy5nlVs,h >:$&<H5gZ}49,pg`PP3b<bLm:,^`rU3,y(6OU]McZ6D\+֦jw2~Z:bT?BqŽ|f\E„z~� j"Ş-YxP^n*qhlUm烞E|֜j,[QQa+mkgćjdŁ@!-YN)*}/KЎGSfͮ'_[M}-YL֮Z?-ovYwWQ! ̭Lhlg8:y&u[6G,ش6B' vMV0& 50o1 �tVsO4{}6YGc4}1ťZbO;2e[yFŌ*UMmy/̲էڴ [yW8s'"TβHg4o3>+s #T[϶yިX"?.t5Zsw8]+bT|Ɯ#" ukp矉~y&?Nl~yN53-,eV5jJsoOR4ns㳨a默w\&|YlO=K.% C,b|eppЛ B! i$nW#zY4Y$SM6-ۙe`0$ Me|'|K.21o{?Gc4 fVܝP)(zzME]f״cn^4>swIEޭɚb|$΁H|m+{ cb:dϽl[[6GyGOcQ.dҚwEp€kvzh1n7ݑ?PC5[L2sE6k<ḱCCX&9uƄ!<=qXLq( jfm |x /Xj}O5;höa7b*yX^A ).@ M{6D]cSVjٽt3ɕb$ү^8ߡyC4I3g4/v w3a>W6n2oY䯨HQWkׯܵa29m %m/FjȽ|Fmy>3C.V<po[3lXj4Սs<aDXo>#c.i>{ζdWGx(U=! ̨,ƶ ͼ96GWwp%n3U>-G<6܌Gg0|pv}f͊ḟV 9iq|^i^4>Bz̍U4fs'fy6|Г s-[ƿw??(x())_I4-^SQg*eB!"ZC"eL bOezeJSZ𽝙|Oҳm;<uX CYm'-l^a]YIx'ͮMFd404aYV,un=3w4~0vM8f~C48q,YOk6o惌<p=1ڻ"=`B[0).vgclNCUȰ~M{6DڶPuq(kV�$5 Kj9w COyi6oh|;M`= 4̶ Cyw{΋B鏛h7<3><qpjL[s۾1K"ј"#`FE©ڬ+RHh0\{̚iz7$G=:p29> G:y?<.<Uf4d͜ ͙ږÄ>Oiv}QRlancŀ_m"Ţy;N53n0wE& ٺ#˞}Y.j {T0w,hr 9r ɟ;bE]1E"~.A`6kΓv9 yw{cr:w|pT3:@H2=<?B D2D†Cs0*BΏ3mf-^b 5Og4fyg[?0|'Kqb"56\}Ɏ~Zs;2xHe{$~ $4/2 Ӝn Xe\'_={Z,'=z# dS%9g<Sɟ Ϗ~#8O>"/ׂCz@ !BL=j`0yGAeQU=0 ΋i~3CĆ<FoB0E2@H c =OZ+};"GD &tUu"ޫ8ZRH$4!Oq1EQ<0ԅPZ_bmc |_q̢fE| !}!]VRlQ^fZ cz4SQfQ\4zɤ~$6i[*itF"&Io/a&� Ls0c_^nC GܘJ-JK9.E�ǝ1&3Vj=jaQ'emm/+URhdx~7,ZpL>ee<gf.Vlmq]-EqE&235!Z,ph,94r\gfSuҦz3߅/scO$u~Qʉyjh!Gׅ"3:. %f!DRH!i.͍=LP>hDQVE}!do+X=g!;q+) ]iS;R<fWZ99{qUk9X9yR3˦lÅOy*p:cHn>f?F_?RiMslik}UmOa$H%8.7<ϴFg,pڹ{p8O`n< tI.Z瑞yo200�@,'_*XVJ1[)e˖BO~`B!pИ& P6Dr8{oycw25FLh~Lh ?6Lh;}FoǓL;4ψh !zS՝ L`1z.^?/`B3}Ǝ'gI34R^ݏw{3{#8Za*8v§iٽ/`q,dh8\񵑋 ch1_<.LO.ۡ.?1} z#ݣsr'07<Grw#%n*.x(K9: U:!PLv1sCf}5{r?O<c-y7hHO?֭j˱>f\ wga珉^q1?'ٟ?ng'<oH$H|{#/y_rŝIB!z zY\?݆ͫz^^߯gܷd^c.tJӑޕ^kϹQu-̶{^NaMz˲Լ5fW3ƆL׳/ky^|Yh,A`Z8,[!f9vŸ=6׻[m2nlMlyYw&L%/J~W{.svwC>ضg>;4t~b1>N uq}PB!B)\v61)hdxLft/L 6aYpL;b2Y']ǝ-Ԧ iU5L5EMtB>縮WU|'Jwf̘C=T* -CB!cb܎=vqG1?v*UԑɔϓYJOs珑}/BϨ]sÍFy'?m( 7TL&YP!b*�ZL)c{Iə CL,fCǝf7+|Ώ;_:ps3ӧ?s_])phud.B1ohB!wB9<�Zk,ĉٟ, @EEE"B!Ɛ�Z!vB[>甕oͿaz<B߁Z!bnCSL2Oŕq]o}F\0 !ٟqԩLQDbl.PB!@k _1]�W8&rĔ T\197E.9;w?PsNSSϊ+!}?sΞ=[)n H&I�-B1]S�V,p j\WcY:VC三D橸#b" q1xm+nemw{ >,[z*B+xx9w\r>9A!b깎 hE,U-ShT.ML 2Oŕm{/qz9zҥ0r|eppc7yRQQ뺅B!ù'*F,V4k:BzTPYY_"ML2Oŕ'Nq7ȇ~8(w?:|ۛ>,[ӧQJs.7(***M!Ắ,B(B1]S�B)m;4<pC!-|Лtgr9\7Թض?N9rD<W"sDLd2sC\?R�%TTx<>^Cyud~zz)Ov|g}kDBQ`ln/^,B!SuU@۶M,i̪HF˪P9x̦%`UrD!<W"sDLj憸>d),~}o>WϳY;sΦM׿7Mf|G)œO>)!m<)--EB! -q\p0 Mw$˲, vm{EX三By*D战d熸>$I�b .Y~ gJ9O<o4�$A@z(B!b@p�DZ* %w?{7Q2Oŕ!]{{;tRVV@4fs㳨n^єlst˿$N կ =LqP^^^!Bq\W� #/%�Fs三[I橸#b"27ĵikk#NcYXٳg-YBX?yRFx/˲hm```�@*B!spz&Jdq<ϣ0TTTPYYYa]X,ƓO> 0*wK,㳟 ZSTTT!BqHɇB!<@744OVFy'y'm7OS (uFk-B!S y*]xՀr,o99S;{1Yt|[j"HuBhR|8g =Dq,BE!Bhs!fCRiM }Q( ˂xLXlcy1=q:Xܹ؋COOϨ�vkM S@~:6mT!V!BN+Z!gZ}v9w! I"qvŚslۚ]! qcq纚c/MGGt0} ="t:OS|ߧ~zJBi<˷WB!S5Zktr+oxtuk)v p3䑏hq]% qcq̱׮�Κ5CiJJJ|}i !ǹB! siҙ̅%S5y̮ϔcy31=q:Xܹ&wŵjmm%NcYhBʅо3Ϡzd2tvvtRi!B1EY$SYI$]N/h0ԣcyk1=q:Xܹ.wŵ .)+++ni&0IJ|zxbz{{I$̜9CB!�@czkJ?!B[|K! qcqܱ&͎ ~<Sl޼yT<xWё_4S!BLM@ka/BVɱu8Nr,\{qm2 ]]]eee[a2---<BOq}}}XEMMM"B!&p-8h\r[LA!5؋kd azBOqƲ, =!B1kB!6J)"@B%NJ}}=EEEB!B!w><u]*++ =z<>fϞ},B!$B! =zz̙3466q-cB! B!p]]]dY�buuuR].޿'gB!$B!A@WW`u,..j! =;ޙ3gp z(B!2$r'mz1( ΍ׅ<\Z|b*<߫F֔1^} ~i (BCC B!С QD\@b}5!HqFJm)Q(WJh5F1UTWYfnG\E$2c0'&q?F;d΋뫙aXDꖇJAq؜Gr﹩rK q-|g``�ZkJKKqÚR O>-!tsa-ZDQQQ#B!._]h :or5t] 9tԣ=i&f5зW9�bPgd6C9uχkVZ%pŲ Ux~Rbbק޾c'|)e"^7o9,pÌ* t3w1X:t nf&ٽC)kK4@29~ʧ{}dYtˬj ZCӴwt<Rtj^z~5bQŢsm*-<w:sBp>8ϼ"S&-XR\س#~k +]Z;N :HDfK1o\d2�҂c駟ˇ?'~Gy[>eN:E?V.B1�:>l'U.Z@Bc)hjtX {\z1*9l彝6A4x�/&?Q V.syb` Ds7-îdB=T2qX 0ZgǮق|ZCuDAC:c(x4 M:I5wo[am{7Eq M8,[;xhce1`h{!8ܻ)J4H5hlΝx4gۃKm+V.sY!Єґ55Coy^qc011yޭpőZkX4m95+>@eK\<_386,lp7;v?+% Sa VZR;ӦO&3z>WU{;3<=:<>cbQŽm8vfLSa br<#H" C$Лz(8{,?gS[0 7o^"B!J.Fhx ]ꮱ#G14NX\N@E~ֲc�"-frՙemmZCąsqqM*h~CP ^~-ͱP1>rf"ipEd) MK xĢ2)U[G~a;3ؖL~uͦ*|ǁC>pئI@֛Rkp(_9&~(0М158Qzz jIMe٨<|'֚XL|<x_?"50?M2F56w-wYT^jtF_rб}(j#R)YS5o)>Db{A`py�x칢Px-kX wr˱>ږ/Ķ`<C1B;p4?c[iM~]&f~as@_Fc%7# 4q;j[|窥FaXќ;ZQuC6rVydw熡i cwۘTrFww7mBiJkllws=oaot:?ybXy[<jjj/pB!ܲ�ZkSzeDB7Ҵ}iC16ڜ8e6:4/rYmNm w#-wG }S@k{}Y5krtR'N,^RZbGqϮQ˖+~f]{;tG ::mvUY3-{BZ<mBlwG7Yv.bȆ% \J->ܟٛ3~eiz``0CC͂&w+lwر+KE-hrXRUaLjƭ6\؊7I ш-Q6?wc`[aJDȩ{klk$<h },63gbTz熡(rϧdK-Msl>αbbysJJ,.v;s줟*+,֮ry}|_Pgu{tVeq>W2YXR?u܅#] lδ,PQ8gGm͊fxLv|&k=/?hSP>UYܝB|*+,V,u/ӣڛ%4ٴw\2l[yRӚ% ]s( 9~1z߭t9PRn سc``k)ŒEsJKCUcq4,]2kM*9u!TʼnysbQEgWm 9i `SYn:^a<EitO&))Vܿ9]E.Msl~^?]y3j"b\ˆSg|>o~~)e \9Z :sG5!;wge[ɈlF.Z~wuygf R)|IY&lܸQ>0B!n]� 2Z<:÷_UO>q'$1U 9|8 B*m/pxi\GŶMW_&Sܿ١_E{=ǢHDQT4to,.*+6>6 I=k\p*'[W.`3/8diyB@28@Q̼x4jB+)|JlV͚ S`v]+":tcP6aZyYweF}�5cڼ;PՑ`A3<pE_vR&TGTj.SILg0JCB~=<6848 #Q67` \.vy-G|J|$Ƣ=!Y'Rv> ԗsMs.ny?}!IWWHcÚ.KUܷ%&pwlŽfT<rjT[Z΋k;>rܿVZb}96%{g G{ D =-br1RIMwoF |QUajyEPC@HQ\1oìj~WW[<xo:7D]cR$S/DB 8|c>̘QeѼ(ƌJJ؊X¥?$֬\f^NsuwEXTF]}�8wwk#TTd{QŊ.ZK]vʒ.}u V,uM O?)-Q,hQx4akWE}2oâ8xȣf9>s|(6oٖ _'}0 Z8zTRR7 O:&N}@BhϞ=yfi#B1 ܺ*-{ۍ-E -ĉD=Ģ\=Yδ�>g|mYBmKod8qʧXģq79vf?ƮYv6UgZb^L?^Rue&Ф3SA` Nm x YOvC[bmtLU$ /2>~`nqx-CB]kBs mÜrEk{@vU5:)Sm(/S]KBD8[!4vcnS>?r3XOYY`5;[JAŀ WG\Nj,Œv=NX<# 6->\:h4W*v˲mgן01\-pؽ<_pcF?{<,yea].oٙͿ[lݑ(x8 u6̰ughDG4ո;/M0}sswgKdqI{z|m `oG-KK,Z{3COf /|*β.[B /"߼c'ղཝeGtC]ѓ }C5sL_Kg_b{6F Q̛cb>aXX:6??϶yx/?.j*/?.E&@З<?}0 ja iYaش.BoWRtu̴lZ1CG=~ ƜF1͑7ZPR^^^!MEEE|k_C)Q!֚9EEEm%vAMM ˖-+pB!$0nh %_tb+!ireCe"6uL0<(|S:6@oPZ5C&klV $T]p &?-! lhn}-wpۤL#}CAD!B|h MsR1,e8>;K&CWfV[TUY:jf0FWw@CMCMDc�S hۊJbAq².�Ԩ�vLIx{xT2#3xCtF/D"j"繢LQRhwH4;ve7-G</p4|Z8\ +)\TV+[ U̫bpf'v?Hh MkO񘢧@j΋Ͻ"}~KgGW| MEk5jm>8ѨʿoA d o!5ͨ((+3D^L LivhjteqB!$<|KU'^a~vY28_;9|_S?ƶϨ"3i"6tGEmz(E*镂dGcw@Z)8q܍p3\9JC s 0s8OܳQ3o%M6]ӫdpp7qJKK =i%O ^~~BqEvŦM*pB!$�:Wez( x(֬t)֫( uv>FC-|_C 0_,#:iȝp<hjPƆ7 rm1ϨJ &MȯpXTWFL[ =!pIKR`nMx\GRix]Y_Hn1nU0c0ލQjfDrt=eٺ#3j!8hqGi-gz7[ 47pMQ\d>b>ZaӺe%޸ m[)<_J } /y;=b+ĆHsls|GΎ `A`Zd܇<Ws^dH5ʂG &4{z8Yn]&}m̝cyC-"{.7';̇NEЇ6٬{B cš\[hfjRJqO,M3. k"]>s(7\.|kΣ=ah }XD?yW=a>8U_qhT>sJEv%I mlۖk R$6~~Bk.ؼy34B![@+]!fNCQQTʴغôŨirk7Ƽ6ztv$R!+*$a1l.^ iL1Ų%.ɔQo)瑈Int`)fٺ3m*Jפip3fAF,gZ̴wqVT?g텥-W"*D&kL|/I1Fc`A@P@:H,uaY>s~. K]xޯpw̙9sy礥)zk qqfkA& W\<GVQJj!3mDNFeS`JN �dK&dӖXkA'9@މlb34G0Y<BeӶI}fOrZUVvw^;gۆ\;q8YmMHlWehNl} JdFKl.`ۚݝϕUtn?!# > R^im?[Nf|}"PLh[jm;/<n{Ee tWʩq!ڷ3ٹcP79o$s.z,]w|hbQ';9iM<|JfN@ϫ&7ͺtDqS΅/s¨eY}mq> lqlĉ { }L}YJJJmyQYYC)q(}yyy-B!ڐSqKӥɰn\F{{,L:/KVD]dm"1iR,\Qmq^9#:D6C\~]&KtZ' miሦRSQiSYe 5ݨ%Na_0QnQ]ca4*h6o3Lǭ8gK/ѩYo)2 3{^e_DWd7/�Mvx?JwmQbP7]]Gn ڋ(qJZ;۔b51k4+\pSg1=tB& E`bNGXS{[q1HCo Ycѧ2 045N4 UQKl܇/5ΠrYNyӄ\x<[X9Ny!x= vδE^%1c.䡤fO NNAjAi7lz}-1.EZj9)ō4);おJTim}ݝmmYN{W˂%qj1uAx;wlw(Ѩ4k/4nSHTԠW SY vاV8l& & \mxkv/~AϞ=k^0Xj?8֭k&i[la 6Lo!B! #ˣth2~휚E^.툳aSXh2</U6]tlkxVt'\]{K���IDAT;-k7ĈDFӣɄ}lcxpSwOzl)pj_vloҿrjH*ˠf�:)DcXqm%-p^gźLWVnaSg{r?w:X6h]VѣzHI1ؾ+ I^nذ)>ZUxPXӫ6`6b[p}: Sw7nd;Vhr~FPjU9H ogҭ "0T~>PbkuӄAJ9N й ,MyMJZ;[Kq(/ۛ _~K-jW>.n%oǷuyJA(Y<J^K/LE..n%KNyM."Q/d§(‘mk:u0r,SC9s΄}6n3xC=, Pgw[V{)ӣI@@ѩIE&h@s`9<JnܬcX;s>C5e61b~g_)g8A;ogҿmmak(.q^mwJcǿ>+甂lu}=kJcRuf8c{ǝx_ibXsc(UUU{^(p n[ԇ#==wY0Xf wØ1cДM6aY hUkQm3c +B!m)pŻSC;KN6e;#\k"L<A"uco*!%"QMe;vY6JnFsnwZ,"JJ@1 3xas4:?  zE`Kٹb{:AHDSU4m@(씦0qGN[W1<U؍8;kp5%TT9zE@A>n;ض^E &Sgw!۫ N铹 "Nٖ#AĩaƟc0I6nn$3OJTTdgd{TجDzu943}8gҹ30ء5kHRLi6ormm~XlY΀k/0l9qn"kl,zt3q'}h?(dp3E~g`Pqs\@z0]';N<wp=#ԐoYb[s|lqޝb9^tc ҄#N�|(n?�eٱYFbSk`>y<(%]%6~3ت˥eG1%mپ_lѬ0OO8XLns /_#5`Ыn]\b(Uf'!.8(b| {}P)Q.WʩhyM[hf̉0<E>., 6nBy "\4^1[#7[x C+A{tsѳ ˆ"y #Av-qSZU(7N>`eYlذ!Ν;կ~h5YYY{z桇O׭[#<w7ވ;<6l~+ڷoc=vOgeee,\#Gү_nB!8 : h6eEjpb6eQ\w4UGuޫAVA89PjSQiןߧH7H[;N"% T7{ $nv 54 :KkY&9 ZeN198HSb5A]opS3\{~,`Z;�\e9}흖 _N.LJacKYh&g *an<EnANJlKlѣ N�rޗxAcT Yu=7^ףDt>T8u+hpDoc~[N-4E( 8uƒ!M~'>\liQù𓞮 ?rMj 6) Akg4_QY zϫHznľlwP7Ǻnqho-#W3IOS2!&R"# ՔWj.P=hk.3g^bd9umDɛ`n  mrN@iMb_L *Ba{$?M8wQTWjlJZCߧ()ٷߪoh/#](jJ] j`~6k? pjyz?t_)H 8XeNap7^gF9G˲()-`6:@<c�up$#j V\=JJJ̸5 #nh67p?%(lܸ~%KFk;;6j~3sLrrrx2dHKNy뭷xꩧxᇹZ9-jʔ)੧bРA-!Bs"g,-v첒5v|0 zDNWUpH\<h:mMP'M\b=Ɩum|,`YP^i7;pGjá$VZfSZVRNb>={g5>88N]샦 ';t4~J#5 qEM_m8tC*ltvd(5v dK<WwLd{7"pKKiqho-#-7tHƶ$c5UUۗXֵ#`ُH\bž4hP}*l*?B"1샕UaiЍ.+!u݊zmhsgٍC u>WSh"M0d~/~?] <.ɓ'7dRvqK(׏g_O8yZsmZ=p|瘦IYYlBWii)=z`-!BqZxZ"aΟ=>􄻱6\c%WiW51M=Op}q}5|䴕>hOS~ܾ:gY7-Į=]: 4#̞!;rOq8bSPu~^`Ho,~s4Rm'>+zstiN{ݡ7fss2:M4 Wd~?5\Cnnn5Ck̈́ :ǪC<|k_KHaÆzO:^zH$RNcǎ-*-bΜ9lٲ뮻NB!h$E"mIdM:YʶݺyE4&ʉ ;-^zx`8  <y2.5\s5gd׾aKD5k硇bY_~P(ZWJqfΜ=ҫrJoӻwo&LB!@BB(QU ,˲FMՠ"׵ue97 ZO׾5z!u8f~O}FkO>˂裏عs'_җ$Y!�EK)zI?#{HdAm�ZO<͕W^/K muo~իm;v`- ̦Mx袋[9B!I�Z!4wYВ| <~1c$<G"mgLt,_/}KxޖnB!8FB!8md?|g?>eF=o<>SпnB!8>CH͖'}pz~l=/\h%(++D YЛ7o瞣[ntM\2nB!D[v\h? 8B?I_C%z̚-ϧFII Xn]uȂ;wnK7D"۷|;deetB!q:�R \r�2l/OӃc!}qjő57 ZOH$/ʕ+|NmYfQZZҫqM<ٳgs73tЖnB!8#Z)r-hz؉ }pz~l=/\{q$GʂOkoomG~7ndɒ%-*'իyW9쳹[eB!8MsA5^6eRNʰ_fI_|CuGȂ3g%%% d?|+W_& u38Ǹp8̸q-Jm%=={ԖnB!8A)�B)igy1l).1[zDrNnLӕ˓K zH_YГ'O %[nO<|NPJd,Y[zK(^_߿$B!Nʀ6MC#bYY#gx<d'}pz~l=/\Gyʂ˶mVZEYYA,˪w1Rj{=Ff0/" ,f̘1-$!BqW�0 \.7J\.RScc'N00 ta&җ'A8s5E-'a\wu?[k. ((( J'-Zĉ[z֚7|_|+xB!8 s�'2ʹ̲$qRᦕ<Nҏřh^4}53f~Lyy9ms 4vZ|tؑ; b[6lgMݻ];wQSSC("nvodfep-zGe1bpv|>_K7I!B.qX^N[ޡPG zH_abZkس}UUλ _xf*,:LzIiƢ6[VW R(JIWs0}; `]ܹݻvcFРj?*owz(E,ek2e1]-; 7bE!5]08CI_<Ӄc!}qfvi{f&+ɽf+ Qέ5'miJA4bS?L^6-,&3χk~rSOŜôF)Ům,Geٗ3fsVv2mt5B!GH4u\:B!Nh4 ȵeT6>Y`^':IRTĘSB. ڑ$_) ONzߝu[)!-<p Y!s�R nmB!8h4FMu8T򯓵J(mF9h}VJa[w}|B!Z56E$Ԕ�^hJ !d6H6~{z-OB!a3MvF)+�hI!R ڋ^4%,B!aІarQc6ZK�Z!G"4 L 41 CB!B vtD: !BVC־MB!B#M8<@B!ZB!59b�: }/B!B!2ZB!B!B!NO΀NH<B!hiui& !B!&v/B:(LCۭH H(B!6�Fk4AQ&o& !Bԥq4)t�CB!B 4N |2ȠB!hJ4%p8M Ahq:H׿SO^B!0КHbZŁ0dB!BbJ9W, )q&ڦ#Zh kqNrGZ.S]]E$!##4QJa6aS׶-ڒz.4>ttRXV*@ #h!BQOh5ք6M|B!DS2,z4΂VJQ^^/ߍ/"\heԨsθn0 VXܹ6l_̡Lּ+,\87w`+Ӧǹ^С#F)E4r7+(,{AUU%eN]>| ]t;qb{Xh⮻_L_:wĉ`,kB eűm:B!hݚ.& Δ!!B}8->(⣏G3q⥸no? pK/ZRuF} 3,";;Co'B8JΝۙ>=6lp3>/}V~}�Ӧeͣj:wm}q.l۶:mzU?"=zs|˘9s* /svK,˾}{+IMMe۶-LcN`ض贉`B!hPZpB!>|ӏ4M éy ywn_Am(Œ9t[mX`#/4qJ)^wy/]m[|>q>2 _ asϟ ?+ZC$"==/}^lH݅^Ɲw~P(ҥ xs} 085 E<n555,Z4~oiX<FZZ^:1 LgZkRRR Bde[Sf0 Z56;;޾ݜ6m].WB!8@C'snƝwo !s ?x<o-vuu_{Nggb„K8zm޼P\4 Έ�'0rR-[HUU%3f,rf,[l߾j:ug tҽWS 3h>6\0QJc6͛Ma.)(؊a(rx,^9@ tOBzz&W\qٹM�9(K~~W /=ӧGp\T矲~j8;wetҝ={vٱcyyy1nEg0cƇ1 F~~W t>{+W.c3nE 0j2UtOٸq=!3cT֭[͐!g3tzvE,eٲE|Rh߾#7=`k|ƍ2l,depᅗңG3bB!DhtAK75fp~>BaXZmɇ-0L%Qsؖlmyg6L'ANh@'̹h[n7^"?+_ʝd6şPn8io[4M{M^}_ҥ 1\|lڴ922J$O1w'|?_QzZkJKKصkOr \n7a~yY@DڵLRc)//CNtҝ]Ab7o 33h4zv zcyٶm3P0x?3ر3^>g{{˲Yv%p,_AbeÆ5\{8v<ӦR֭Yt!LVZҥ 0`\p1bYqIuu%;v&՛vܸpܼϓE^^G/ǧblڴ/t ~?|2kMNN; B !BD㟅8ZJA|C=t`vK]J)E,)g|U]{feGB6UшnAZo  ؄5hD;ZWLHoO� ^}v-|.]'嗟=P^^$?1cb6oC| 6?7|#`n2xLGu)8ϳh? =z^{ݻwp}/?7lٲ۶ˈF#<ܟP ~75֭[Ezz&? Rz}mӎXhgOnkaӟ&s}ʏ~tC OZZiGyb(e`Yqv7q?L oV\UW}1O9Q\qŗxſs_c 7R[71ytދ~'udE</xW0aȐzx^2sT6o@nnB!8  >_1Onv`D^,MculHȦ(F,*'2mĢłn B#:SVZEG9v_C0Xz9ZcٲE\qNu&mĈPRRLqdm0X(-=@EE9:tfMLvڳaJKУGo.jΝɆ k"++[yM0 #ЫW?lRcG+W.c Ltn4y�^7))iu 3>4q\]Zz}b1.]R* X,FFF&[n$R^dM崴dLȑҵSzذL_0 HMMvfnk\.gJ)|>?)))Xs1an**++{ѣ #FСY~5奀2ftC'())>cB!h)>n>sHYÇz(&oZk*$Ţr OmY!- x,TWxvhmN`0ȤIWѮ]o>` _ٷoXQX;˲iǙ7,<9M,cz9b}>?u`ݺ!j Xh4i2nELtim;۪h4J}xX`Jԭ۞(s4RTWWQRRLn=ڦX,￉aq染Ӯ@ 5w`ܲ~{twJ4]o1Mvv.X*{�aoB!mO!ϝ:-q:v0yzжFF[ؖNh XE,z8щ(:Gt'b= 6U q0j?1]'R28A=zswΚ5_0}=Q0MW]ezRN=@ pm)S{;++7Xm[5x<|>۶,T2xk<} d,?"@*n:,l['MJJ*P8Bs)L?zy^Ddm& ՖG;B!ĉЦЉ '+n(UWb�Os%}'Gc6}|_F"r0PHm'Tz(4)F+޵@, eEdPr o>@AZkzMz|˷)S^o߁t?ƍڛEk rztڃX,8qx<., jj\6 شi=[nh:Yr)_~96?R\.**ʉŢf*uŢZwy &N z'Lp7}C)F-"0~Sqr[a:uЬ]1c2سЮ]233$B!D k�t"da-q2Q " [b$9V$NZIQ!d,8h ~R9{B[a[;}։.r<@b9=rͲd0ٯBxT['0XYV} vʱgB냁ߒeYFDŽ 0sT.Z&NS'ɨQcDB,]'qW3vzJHQ^֯_׾v/:~6eTT3sT8&]I zZ;LfM%̶mF˰a#3|fGŋ׫\,SO׮iڋtБΝ2rMX|1<8~j _A\..*-[?4۷o}lٲ۠- Sl-8X:we�8^x9i&mAØ:m\.;vfo/m{AN!B<>CxzٷЭIn.m֬ѣeF5687 y*mS!Vw459ˮqJJ-c1'm!^:74CJJ}u-> @�5" 90<>8]hq\###3Yqu7u&.˸qqmwә_M^^Gl&77o} ̛7xw!e [ؾ}+h\sK0RRRcl&в4M.]ȦM&'X i׮}m&2x<F̙b&]v ÇFw8x<^:PYYβeh߾#]2l\.m3`!|e>` i8QyIvy.<zkG |LV;/ba`ۚ}/‡/, E*{}?~vp�wq/\ruO]|d^yyIIIA!B\: ι%ע$»<"Ch[vNf5d}[ )?le,YZöa^Ɲe^W4rHT0evӨ^!'(SgWla4iX~2j:~|bvK[G$9npIfA**Fڊkbŏ>0r辘-Ʋk@?ӥ#5Ev#%{Mlۆ=]w2y b|ﻙn 3g1M0 ѫ憸WtAhtz@4d00̶QTi؁cK&0zA6!%(99F#;�Э{\.w#}uLANvyjpm͜M0ptvYEEEn4TV(-=@ee))g *e())& IZZ>Pk_ "S/}8JAuEy껺馭* 8ΤfX=Q]]y�i R9vEpH$Buu%ix(//"<YYn]x 1 ׇvזW'm;/dqyy,)HII%PUUIJJ*>q**)jIOL&bWH$&==lLpB!23NfK!jjIK�F׮(ŻC]po?eN2<S 4g(Bq,ˢ91ϿӠn.8mq><B8-*.8K.>[aX5ۮ 52:?xZCE x} ӄh Q=ӄTE\CAzBQxߠD SӶ!} Àx , b-7M'Hh-y7_<hZEui|\~Y@-];Ҕ:'ii}MVa(lvacv^۶l k?(HM5kgbN�W,P]msi\qy /RU%8RfnT* 3*T[u6q D(d&99u١睺&yyh߾c26>wh4w^[ >?Z$S.ߑKT3ϗkYded'2L>֚Դd&l99,y񒛛Wo:'ksξUoDv׮Sc|~:unuOlx< %B!Nc @S"#;`OB'z9̃a@|c߬)IyHPZk58K,hf&7`PM^EEqVѧ=xj3G/hO„#\ ]s\|f([ лsGy-عۢG7X:nY̞!m5508d0\)X.\0OFFѿDPi]Bۆr~_zѕtwUdf\~Y޽gr.th qf}bpw $GZn 1K4 +VDCHO755*NMis;ǿ�!-߫ pERS bضfCzUT300*j窮[ňiwE�ZSyp;cf Es4|dcC6i_iM׉> 7^h>mԮB!D[sLKG6d03]{,6 >5S*}iK9Pt"ј&*kIu&twѣ ˙Gz<AOKQD3 ssE>|>E(�E.&> rm n]\6  %έ:dXc^ O1dN&LmE5z#׵PJvU"fd __O~TUD"JGy+R) p72HM54س'uQlMЯ[nN%;iA"܁5a@wAh`׮8 n%pXI˄6 dR dv> Lgpք8ٔ-~,[;Zkqع3N8|wh ͊s+,7||oI-N֌yyyݻh!h~B!ڌc @+E6 qzA9#�  QT|tùnCӠ3:v0$Ѽ?-Ğ}<MZJJmʏaٹ;2|>qf͍ /ҽ1#<l)cשqK/VGDc!dt7]haciıSS9/<z TSVf1,Z暫SwӶ&v5mYe~" Wr9s8gJKTV̞j]ps?1YE3Z#6պgT5NЛz=Pmþ"RB+}TmM#DOC\0l/CxD4ټ%85{]ڇ{n۴tؙN-Ȳ, ̄B!NcXzYd@!0ĸßhb1ϧ6MfAQŖ8&T XWTVku14a1v:)˾EVAvY]=/L~.'l''CN&n7tl+ Y58TkRRb1}z 6Ç{9\˖EX0{У]BѨ3 ˥sTu, rdp%sOۖ&|Fn] Wqi_='e_Il0^uQ, F*Q,[0a(S=sPZja$/x<NFP(QKQ("mm;Nu`/},SxGǝ;"nE,|SS LB xOJ3eAMm8CǦ Өzyx_lkV6WǢm-O!B15sSAk >k`Ɋ(Ē*vg vfVE9{} &v5_exD+īX(D5^"5r4 u2iY Y<tDOnS<=XWؤ(<@N_STW:55NV QJ-R zps8?^rmƏ3xTVڼn %͊/",YfۧqiپfKEd`oKoBk'؛'L.]\3IKWp_(F 2tƒ)JM1o}Q#}&,Ya0F߽K%Ѽ*$ǭibzbgq kgrB"c`Y^Ǝѱ l+g!mkD6 q~V0mzs1<G4gSl3 {8(cHYf(s> QRrz\gW1jq{,YC=m*�-, M#B8�44:pb.` h ztL';oӽI&=ͅףx-#N C RR pb֎ք#Բa^6r qөI$ٶ׀#-VT,XUdgzslY5̜Q+fMbJ0J h Ƃ!M~ üz&;ˤfӦwĹkde,\7 5{_ZnO? i@J,Ndվ{w7W#6q۾֪d۶j/Nr^nRS zt^CM<n'4}{]Zl+3z[oM#% j?UΝ?#hkҫ1 /ϤgO7;P bqMJcG)sWi.)AS <=ݠk�:REOBqfmr222x<-!Bf9�4B_2dzG>2 lضkI.!ͪ1/2\/%= &۶ n]"r&;`�J@N�ܦ"7h5AͶ1:y6MjV2}:59,/sdve#t[7zˍa8次^W/76xJ֭RS:ҥanQUeaeKpXs 3f8]ue )+y*֭|ysln`P3hkr~ %%zVUEE5pnr.Z&ddC Sܦ.2[xqs×Rikqc7T[2bIH (-;5[oNO7cSXXpߩf(N pD?=z4 ö0ݻi 嬳|YHТ͈D4KT?WѬ\m !hEAjn)!B6`Ъk\"xnņv =E.NQE$@D5b^u1I5c;Y<t3Q rMcTUi{#5ln1,MFZ'>=o{u)ddXb(kFl3uצMTWC{tq++m$5)ٲ5׫<CqŁ Oؼ45۷=΁K<_vY;Neak~Eٿ@ ΘT)y2AU6N c|E-[b[Sk];Pȹ0ӧٝ۷|AjBQdd;5Ag rAeMVA|WmwKT;ȧe;~ L8 BΝAZ1t6X!ıb(B3 @AGkMUm+$xE"N&*Mqf 3zy&;DvCDjϗDu"+@)X,anr�re͚ 1-SʦZcR8AΝLjO4kIa?[g͚G;/L^nFtisB9ZC0h+l0sV[c{-\fghTcY@ w²A''>Uzԧ�Y! F;`Ю׫N{S"Q+:% (<(5dfaSv:8MRo#)+s%4LE0hcv:W^HZuKZ(|�F TYif@{{rJvkܯ;2F;~!hضa-B6yD7 "S_~S V7kКdPzIM5yU65AM4/VGٴ%ۭmA><c J6,8wZZ lv!#q]hqכ-)@AN-)ogwLBFAnFWiSڠ[h_[7LR]$q y7m9g GSSIK5Jn0DtwU RM\l/ SRj1zuNկ2ċRP=Nщ5.mGӃ[p  }1Vmxe 9%x-q r:X,]a^U ,\juwh ,mQ] FkT'`Պ6B"e ɑBf�tsi UNHȚ,j]]]9X2Z'ummFdVmby^un kX%k],]fl<ĉ~F𑒢l-1^}L~5=(55NV߯ػ/NuMN..Ov%ab1]othm[+Y~CE0P `۰zuۣsgil><LN3 Z?Nu㮉rN�01>5r.ZTV: +`Y0`></)j<gÕ+#|yiEEc-ĉUS STѴf淪\ȱ{c&hX޵Xn:VD} -t!ę#~/ !h�498tM܌mYسb([ 2i֯2 ۶ݩ7yJ5WD@ɡvg}{>_InLS}{"NMhRS HI1ش9J$N  PP$MnbHլ\`Z4Gǎ. 1 u[ kkt0`99WDطJS- RRqU)(3gٻ`K#Սn[W4;Of0W^M4σϧxjTv}P>7X6g{il>GJ@ѧhTSPs)NJ޿1M\ǻ̃agXX|Y(mǗ.8TUU i׮]K7E!Z4�(Կ5pz,^äTFp.]!g%.wuyLn%> Nn pe:uraYp)̞d8>b6Eŝ!"B(v4g _4akjyL&N3r/جX&-pb14J[5}'9c|Z(N8Yxσ֚yV˂rpDgcQMiM$;,�d]ivޟteMUM8deΘ0G{Pe3sVYk˯hmjN*r_]78]~8a 5ߪ& a@Vv3sfU#'8s%.?S}屜FOzXTک[pY/!D[R\\ @nnnK7E!$�}5hjcq8f2 ᳹!><dw/7F:[:\ɒ '1Ku?H76@zmHK3T&SYev9A47|9. 5iiч,R !>Kӟ&{ |I ɚ燛gYş\_9X+0x)WS}3mu3mu^a8iB8y*\n'lμ{BXEES_])6sμ dihYsDt=UU6β,^O99&MiR TSģVm\0]6 t'^0LJ섬lj+h_'2?=sPJ j9 P :j�RSwO!5�1hM F8l/z 0kgru eŊMa)vuѵkӻa@fAfFh:ac&;7R@r ӅN;WO7YYf2sW 8`5D"Nk_P9tZۆi U k[6[o{nM򚚃 4P ?MJ9 S B< r[h!Tm[Χ4.?wa(J9Ͷ:=ؖpk qr8L'0 ض];[^8h  a_ h @X0{n�:uқE!$�}JK3)\lN]yV%KFX<,e >`둲4`?\ێ^[ʶG ˃?q{V;Qj? RtyPxYӍR.}R`s I\!̞C0Dk͠A8h $۶/ { WY?CѪ M;b16nHZZYYY-IB!MЧ!8b𹮣V:u:EJmc!Zuk`.KaڶV-`b(e(e)pE);,>gJEEla/<Yjk)ip~絚O8Zz ݻ.][zs!B4BB+S BPM Vruz)l mI26xpTQ:MEk ),,dҤIB!D"h! ֆll[:[7q=tk.8k!B @ !%Q"smBqzZf J)zMB!8*RMV!B!ZP(Ċ+֭]ti!Bf@k@Ѩ 45uwm֚cnnhveֶnlٲK.ԖnB!Qi2�5L|SBkMZ!aHK5�qM$ks`.tm9abґn222(,,D)EEEm J !Z͛F 6"BqP|�aJ bڪvσRNòR䎁JiK!Dۣ¶-hK7MH***bxޖneY̟?4B!8j @+ PH:<!DkfيH[6Zb݄a @ ъٳE1frss[9B!GWJB!laйsg @)9p@K7KQǢE(++cرB!8jRO! ֫W/��%%%,^$UUUŌ3֭n!B @ !B @ΝZYd p%�V^֭[+n!B @ !B233:t(Zk `ڵٳ%ɓ'Ӿ}{ƌB!8f㟅Ckc!B㡔j81LcTWWSZZʬYիWK7M3ڬYXl<�=zh!B@kB!8gT8qFYp!ZkNرc4hPK7M3RYYSLk׮L8#Bq\+�ƶ-r2(B%C)%;N4. (;w7/ !N3gsN|AZ9B!Љ@۶q\r(B*$}M4s2{l `̞=+&eռˌ;K.#Bq܎yB5emB!8e;,˒_'Xjj*r �Ay֬YMQRR“O>;;BqZ8�tm1ǰB!a`>FM7ݔmǎwcƍ-4!N{H^z[r]wѿnB! q\жmtBqJʼn⦛nbhQJfz)ve6:v^xaK7I!9� !%'##C&v[x1=dB qXŔ)S?ȑ#x<-,!BKpW!T"'W~@Ϟ=,^zݺu-<!Ne[o30h ~RSS[YB!' g:m!aKn8kHd [<x0=O=ׯ0 ֬Y?΃>СC1M)Duh'? ]tif !Bp:ڶm,""z$!@Bq 4Pnհ+ZJֶ%'Cd~x4SjAN F ]l& z1M˲()-4:@<c�unt9=tXn?8k֬0 dggsM7կ~M͉bB!ڴIBr=TaMɲ=y4a*2S;]]Mtvt(J"'] P;ӭ8p =XjJ)JJJxرcwy'}if fB!^z%2x`~KY!5'?y>Ƕ-~uu˲p(91Bbc%B9%QG\iM6=ؕ|>X hrkb\. hЏZkBp{cl6�dffaf93Iv>|8x۷Ű,M6zj\.]vv„8۷\z<tܹ%Bq̚s%BbEBj:E"zڊ;e7$|) - u|[].]/s `ƍ<,]oArOL!n:?yfs7ZYB!'!D |-6Zh ZѴF^~ 2/Zx<N(bԩ,ZoonB$aƌ<sOSƏ֕B!ęՖਮf޽4Y,Kf✌?#%%%\FzǏk0#-Gqzk=2ږ6LٸT/Ur�,zFR+7hYJ):tqz QJ Xj˖-ömڷo/3ڮ]xy8p ?=zOBqhWŨƪs/s6k7ok7<)m\p!]w~iر믿B!`$ 9Yv'h9B!AVV_~رcx<ɋ+W䷿-?я3gp+)Ř={6??>wu>(l !Br"vԩg?c�dggӵkWRSS5p8̖-[())9)mf˖-TVV6!??;b&p{ ~?GZB!Dka&g}6կ={6o7n0 8˗/g˖-\tE\wu 0@Ӛ֚;w2e}?ȑ#ev!BNi�:c6[laڴi|N>կ~믿zjD"x<5u:|c?GQxwؑ߸\.<,X�h4 �m6h`a$-&o1nLbzz%DprB!N : ;ôi())A)Eee%o}&Lk@8-[o 曹馛B!x$�]ZZ믿΢EF 8[o.]/2yd0O<ӦM?!_|1ַGk͂ x7ٽ{7999\wuMfIϛ77|'5k7۷or>ٳgs}ѽ{Z??k1c?>}0f|I6l؀R~\r%|Xٳyw)**C\x\qx^ ߿?,^t.2d]jz->ӧr C`ƌ̙3K/O>דˍ7%C!'\^w˥^{ǜ9s8p�J)JJJ<y2s9)۷ ā8 -⥗^b >;3!Con!BNA j~#PQQeY<3u]޽mJkZ|9(**@mƫJ4eݺu|;hA~=êUe=& ?~ +H~m>C߾}  ̜9x<NEEXX,FYY555hy嗹x, rw3$+B$a̙|_HwÚ5k<q,_%Ke֬Yb1&OwҥKOv ! e&G?O>$_җHOOOޙD{㷿-ͣ긗;}t~_nݺ aY+WGg?xGy_ :TB!Nz;x뭷a|GTWWFo~qrPJ%KOTVV5 w555'?w;^`w޽;ٳ'ڵcȐ!̚5o}[m6,YNN.e|| .'}߿?nݺOsN�ݻOǎ׿)..^[n0 B;vg%??e˖q 7r׳pB{9n&~_׿u4s9<cosw3}tFՒB!Ns@t޽;v,SNeҥTTT DϘ1: . &}*))aY~~&3e>3RRR۸+o !B:'=�FVVK.eʔ)3.k&u(z̆am6V\ɝwɅ^.]PPPa,X_]ΠW^y%< 7ndĈ|b1J�>36mڔl6={ /L?d޼y<S4Xg0z[JuW^ͮ]xG1b�fϞ=dggc6n뮻={0tPΝ; B̝;P(yǁؿ?۷o߾̟?䶿`ܸqo߾zR TqQ7xchR] B|>'NdȑX3gpdiJ>S,X{ǵ^\@VVVǮXd [l4M֬YO?~3:tҫ/N3;v`ڴi|G�|_.[n-4!BVyG~O `ȑ|_媫wbԉxII ZkzUdpUkmL2x<έJ^^^/2?3{l Œ32dguX)So$xkqơ" /cY7x#Mwc~LӤwԩS2[k} %%(%%%A{d5�'>�. ߏeYZSUZA4!-;2 mDָ<nn7hnfTjZ۔D^r23P{Pk4r1AҸ 8sشiSцa$$2KG_L~[':2o<pr%K49VG#x6m555\ve|_B!D3�az\tE,_ 2eL4'ہ@�۶ Zk"Hr>˲袋СSL;2=`�F'|¸qX|9.o|2222ph, ۶_[-RRR,z۶M4%k*8l&Tyzm(0 GnnnrJYK)E?}lZK)/.a[Żͦ5n4{䣔@f (DR.[wP [kzucO~<lQ@fz::'Ex< <p540n:6l|kݻwJ [laɒ%~hyHMM{MVhDQ6nȌ3?>Ռ7k4B!Nw… 1b_~9_~9C ogL4 0mp8ZkuFǎ9s&7ر#�:ӧOG?a`]v~;EEE<cՋpW]uկi\r%on֚@ -¨QyGѣ{nQJQSS]د_?~?}7tiiiضͳ>yGxa 45555|1cF[`'Sϳv Piaе_OL|)&aou3Ϥ4ysMVDQJ+*Mx�ǃ'tq˪LHfSli۶zq*+I *}&855 W_ʹiXt)q֔0e>S ĸq?~|K.D 7sw41`%K0}t.]J K.a„ GB! �tEE?Oh߾=s+2h �:vH$'npNmۦSNy<{\uUҳg�z999n㡇"??> /?r-G)E=o~^~eRSSD:o_n>|+<sw}L07r|'#ms3l0}Q ߿?K.??W\qH�A6Da8| ol.`Sqyt ]{Y v³?=E;pşhWbռ%]6$>W'B<'0s=(0jb~|{j s�kN]ont{yk,Z;]B Пfalٹ{%pw^{M`wS,&qqNOq1M!C0h Xt)ӦMcݺuDQ à9s[o1zh&MDvv6gƶ^|E~?za_|rƳB! p"/K?Enn.O<D2x„ u]|<\|dffq|}a6/K,rqӟvQTTD~~>3p?}OJn8ټy3W^yeotܙd}Q}QyoӹsロBz3f ?0)S0k,^/_=?0~Wo9@&O:w3<c= /a~�NΝ;'8'x:u:-<]� :w8= :l|) \?Ȝ_KV^w{"2X:s>d`[p4wq=7z zج X4idlL~t/NRoP}Ϻ[cVnܲ+9p*g.7EkSSֱc;W1"=%֚p4JymƶO8e]T7hJ֬Ӈ~st\{X[[_0 zE^4isaܹ]6Y'nySҭ[76ndJ)0?<\-ڱc3fO?e߾}dffr뭷JY!QUgmcYX"#@Y#RTT@^^999^D"&??P(DUUn)3w^JKKIKK#///b8p`3m~,ˢ}\."wy'+W?K.Pp22333Hab`lJKKz'䀀XB"///y[hcZSZZm$wMM {! C(VUUQ]]]oٶMqqq6 !NcQp+!;FSI%ei�s2w>x^?%LoTOС[g~5_a<_{uŊ[*Me-+98X,tp{ضN""Qls.i4Mx^f#жN<>ĬV5i&\t{(0.!nz3܍OٸS].xŗpD8ޝwǓ1 +Wrnd YW_C) % ȋbqi&3D[5{?wxۉ[V2S;׃l1 ˖ǏuwXZ)';?qy(\d8Zۯ?EԺl& z1M˲()-4:@<c�unt9=$Np8̖-[xw(++#׻XҜߡ;~1jԨ^- A-[ƢE7oeee >k!C-eB!9_>fz^vjjjQMlNNֆN0 :$7̙3y7>}:?`.N:%߾} ##A[uhFEcQJ5؃3aS%DHKKk=kӠ`^uY%Yl' �,s2wn޼?~0 ۹==H0/n}KVqZfr>{{:{HLg%}ɸdOߚΆGctߋ 7^A[}c(Sy3sIzN&6il_e(z ˄/_F]PbY9w1C 8P-wt>ʊJἫ.[U}�P qyea痙F[:vdX~?9N x"ϟϴ)"}_41C4ءX 0.:gsynd"| q ׏R&1 V"3w/n2zw"|:_YjSNe˖-f à~~k.VZ̙3e6?|ƌÈ#-D!BS31Hߒ%Kͽ+Y BVtw$C;r;'C;R2HL'-+~֦mtՍ'f3k\al(el?f{3E['h&T=ŋz`e5e?^"5A5Afƭ<qOy^?}Pm'iqxfψضfΔi?f٬ωb,5~}Vu\O%/'{ʢ]VVy9ojKoضeZ3sh}Xͳ'?EVFyg'cΒ% 4g{9o_ZJ8[kjB!*+TTUO3; )O/oQݬT!4MM7ēO>o~FyTa~zq6nҫ$N-[_W~z)WG~0n8 > !B$gHBn'?$###YB!Z+5TϜ2' $#'A�qөS^�p_pMUi9J-1 RUV?C-d~חsxbߛyW^w)a9,9PM};Xן'^7W~,VoȄSg.w0 lby#ꏿEzv&x#(zva[0/1l崪[à޽ԖC:9jI Ի,^́r(~UvOGtau|?/9g әx ?}uuhyvd{9ޞ5opiiqWWosJL[3gqWƒw܎a+N{қ^2dXkk֬ᩧnv)66v^r% 4/Ç'ǎB!'UJ5(!Rܬ&zM W EUY%OS<>/x45Yfƭl]Qß`혦IaYhleiZ7#0j{DerPJqf2/]FJSn›dΛSY`95�Skhߵ3Y5o)撯^voގaҏv>m�48X({1b8K֬@y9=P8Ė;IM 0O\Iс�RP+Vʠ^عw/�kW.hWb->֚iâիIKIiUclܸz0 ŋ3ӟTϟOUU=z[naҤIt99>B!85Θ�BUZ9vݾ_#7NFnw)˸Sq +gyl^69`^$!s{nۼ\}z_2z@, nڙ68nR3Ѷ2%cq>}k+,L)T]CJF* zplqbi)LKc߁bB0&C{MUM �5pGQS\Vy<YC;Ul":Z9Fc1J*ʩO?|mʫ-`BHe1w\1z1 O?lo6:ֆh[vYpa2yС,B H�Z!TYis6'8 >JA5nznEiJa*Yxh}\q X,CA(|5ƏaulXy<Cї]PNM|?j,v,ˢ oQo0AbL.*] V<Sn裨 ۖɮ}l2wDv>^/}+sYX>^l,~pK{5 '@No6oTwh]}i)),N[61{'hm]v,Λ`M<ѫWMJ-_Βŋ|ӻwy;f;!B4E&mRx,N$&%#T0,)㍧ԣ /moS&>#v$]Uet؛v9ض֕ٶfuh-^Ea8懲{Eԇ}'l^1G)mD %=ivBQg5غj#&K -Aַ֚νK I-f/(ܶνt74i6MNs<v߽=xT9o0<n7Xϖ.c޽ ӧ@~ݻjFә8j(.-2MLP ք"a ү{wޛ=08z x(mm׏RT-b:b=]fpZ E=Ibۚ7lr*+=f�Æ #=-uהk/^)-B! @ !D[ ot<.˜=i)\."060O/2gT^{+]j Nԏv-֌x,/<oNk'1\xU <3TVgy#߿#y9\q Sֿ7dwhG,g^| cnscb h 7^Ŷ5vh5]db6CƎ"mɈkjQ'HZ3sBb8xJ5pEqǵנQqW pvlھ.=+/�Q Lٳy7s˕WԹs ?aJOʵ'rĉ>m=4m#oN8U]NwOϾ/; $%eY˱l+eN$ۉs,'Q>'Oljȶ$KvٴdH$E``g`�6$tWvUmO^ݭ|y ݿebv etl#=54tW~zxrW;o'ݽm'ɩ> C:ד$h��D� �oajSNЎZeZu*\~ڱGgeU=k?/4T\/WGK:u^sZsF}7?,o>/&2dJkmTuc~SwWY>b5 塻U,ȯ|@;|^1mz|?E_#ÐZ븊Ģmnov(ϓ ßMK2MKkڨo(LBy y<qBBA}#l[- 8!M/>$r]Wձm}^̳zg3߯B~F8ڰA?1)SrGk_ӊN=|]}VߔeY ;+}U[�o i2-c[i.���itK|u8 jŅ.>)_0BA#JīEpNu=UE swG=gT/ϓ&56>)6m]q]Ojj:p(DJe+_Mhv+5>1bQu"H$tŘcc1ձ+ѵƐL&+u +Ţѱ cQ%Us')hl|Re:S0`_u̫T,έ"1L^yT:3Sy9  * hoirGS>j. kl|R˖{,Xtsꌪ1%{:[Ўt2na]ўwڱGlnicE*-�'MgMYs1>4*ӲIȴ,9ŢF59:@8dcUы CS*}9QTU2^*<|_��E IDAT.yTT/'41<I &Sf:tZjY7j F4=1pUD5 u DBٓ23DA?6rG9|>>7?R 5N_я^x_PĜjpe) )Z\rMP:!MJTUVAۖy*WU$H(T>#$%.ȆjhlLlV 55 B2$OOpPkjdgض+Vʰu]iYuu8o$$utvϻ]፳Q;40Ip2MC4p=_���,zSRT*ШLӐaZzV,,g }G͕eieZ^&GjYZud8*u庞j uzUUg+ M&}ZU'.}y8yF]08W^=t&+O,Ƶ+XԞGuLOLW-ڼaU90]\p qwV4"lO.+s2MC'X֥u'Okcr\W) kP7:7BQ/أqY3 OzBc.tlX-q¶ݚNˋY~Xj-WA&'kA-[!4kAa�4h tiu7-h256>SgS[cZ>-ݸZ_ܥï rG񚤖lX ߡkVFU$aiYi/<OeQmMf4<Œ k/>yΞg--QWڹ*^1G3 ՗i9KOoY=gHx4ZEZ֦K<R_W /YѓmzB_<f>ʕUH9UZV29$ţQ%ʟ����xgxy>!ݶijkQﰪ15hz:+ iU2-S׫{6Dtc;:6)TW؄^{X6_I|<{(4uOGl؄v9={6˲,GUWS-q}2MCݵIҫ{սU_T*SZKKw>x,U˻dcƨQ(wN<LWp?zzjjinБ:p*u7vvPMuZjR^y;Si^}-a<7jrjZ5hkh/}|N> ^D}cbi֭^|bg&Ӟ}.9uF몳YtHN>MWN}kcNĵzEU>!м֮]w_>[~m]׽7 .0 -n3Ͻ3gm;纊TG]L K%xނ_q ɻwk <]mܽeﺮ6ZWlۇAUbV%PZ}j����޹*@WWgV,$mڰJO>NWC}j YTu l6;hrjb�=:.e)ұ86oXdB5 OdMM =ZmZRe)YW8Դ\ϓRUĤV.*kV.QsS+u+vj=T$Vo9%bUZf[HHGtY-jW:WihxT[6zz\ﳹzΩ^W.^ #:u:ښ49R$u+WZCc:q B)?'UbT]A]Wq\9!u糮ztaN0M-je]=?ƺW ŢSloe],S`@=56>`{~`H}gΫX(V|aNɩilۯz67bigR}brJ}ڤx,3.Wwu(0O8:{/ P,*RwGkEK&Ӊ56>`0 >ƙ*:}n@l^hXݝ-N%Iⱨ\88o!\nx\53}^����T�zrrZBA7pPXT#*I&t]dr Ξ`0D>GãJVeF'&:v'W)ΨA'zhxdLiA_J&J$bzCJedB'Tno`MXOr:p8woQ"^JeTIhpxL\^ݝjkm,u]l[i*;7ʴLٶ_#cW=7byrjZT._Pu"V,Ԇ+]XT\(/96LVGV T*锺;[e,wݾ^il6BQ00 zq2 CՉ>L6WjaJgɶW5JFC#c:yꬶ޽E!8tBp\U|y:zRM:sZ;]{j|rJwl^{Eڵ砒¡:1fIҮT9&Jgtl&Rڲqku܀^ڱGߧxJ'N!m{*>$:uuv[孭Tس�����`T<ds2 Б$Yh$q9#'ϧ3gQR-(+˗v0Ka$Ӳ! 4 eye\SOXUDS);;Ү6I,RuJai<84#{Xd\l^\[׶<O|AHx1 |V9Ui(P,.YLΜІ+SC^<7L6l.=}ǫJ A<qݱel_xU=.tcO>RPT:#61s>_GefEǥdYv%c /.u]6Fu5Ng_AmXBxT]|j t܀m¡ΜW6z4<O6QWg_ӡ#=JJul֭Y5+ȓkc~{U4lV4օ=.>vRwݶ^a(*: ������X<okut GBjknTPAQLI9dbOP?ĝ:z(}woV:t:_~M{UKcl踒1ٗSڱ{[ׯ(-wO97ƥwlv9XycƓLP]MtIѓ蘚ٺkuҙRSc_$Q 5ŢѹAݱyj+) WKSjkJ7ըN$bWgt~`HBQB\Ҩ=d519-K:تIu𰶿WjnSG[Jl0ڤ;qJbiP/56>)4"L%]:zT8LMzŪJ?iQC}Fز~ybU������t(yJ/.TtMO eYg:vGs/sڸnGeLߠ&8|3b:y  l&%57hdsJ-8uwItZ/WŢڬLRKٙ@tV>_a۾kqA[.亞Rl/R!صOu5ե*e<_ejYj4MUWu] ʁ꒮V>ڣ1P*QKSqzj:.X|5j9uF֭<N9ԝ5 0 i= Fmmi4paXlN~OM3-C֬ZP(3t 8t\+uisz0;։ JÙ՗~]T.AamǹÍ-������q*BY<V%kdlRMLM&SߙzanMO˯DB2-S|AjdtBՉr?du\tFSөkFf)LV JelNiilbJ̩Mgzy>e9{R)LV58<L48<x,Zz6ƍ D/edSM2̾}Nuϝp6Wj ǯ}n. kǮ}YR{ ϒy^|UM,w=(؉>57i 2ٶ#\y:|줎5˵jER`5:6bXx)5 =?޽E~nݱe\ȝW)9>ӯ:E¡"T[S'NS3jmn{W[ͼ\Sgum|ɩrH52:h$,k&]L30O8������fxt8Tg[)YWmZ$u6I*̓ãzy>-_!0u\U}]R|AcZVlomڸn'tu7+ 4M-_ڡ=}GҨQ8yZMFB:u\7Q ڹ{Μ6MNMkbrJT[SDL]-ھs8%];s^#c}Z~uq7jRZj@Vwg?OAG*ɪEij|bJ/Wiu5|<ϓijjSknRhwsixd\;_ݯ+q]8|BSSC PWG1åk#I:yҙm5y'N=gY:q<I`@Ms~4jڽju~`PF fu= X,yMMP_BY[c~ kW0 ص_|AkW/mU, sRTJFdK)snKYйAɓr|yP0S8T:g55ҚK*@:eYd������fU<6 CkV-U:Ge Ж ʕIݹe:&tۦ5hkajn۸Z{я_)P5%d:yzzu]55Mk%*y'508 #JթV/Su"fMLNxO<X֥%m=,W8a*=~JiՊy%J^ nr67H*U?3YzzμʓS8RSCV-;Mu"7G˯u]l[wlY_ڤZ5Q.Au5.yP8R4Ĥ<INQa> ?t|ɸj熿˗vjj:޾;s^XTmM%u7ЈeŢK*`ۚ-nnm U;s|l_+w}GJa(`ڼquyYkkcھs_D\ST捫U]Ĕjm,WPԱ}'0~ruuH FFUW[}E_s������,B t46>\>x,h20 uw^tF))4 4Jm7.MuIOLU]+WJRk5ZC)l[Չ~ҙFF'ZNĢz^KW/糴q u7+(*/1f-_کVe9ҙ9 ].um|i2abU2qloVsS3t?7Rwgj519:S$ZCuczjmnPoYE!ݱeݜ*LӔ=mزVWvqRTXT0lm{R\S$z2 |,<U{[SܠjYB0 -jWsS2[vb@ t:CG{f~.˲{)/&غuJZ|`0p8$sfiuw]Q[YYo97o|]uƞWCg��`1)$>_5{Riqc+hDUȂcxJE�'&U(ʋ5L^xR~y zƘ=&as>_빪1Yjk9q=& *t0_XU}gZrɼk, /=^>ω$9GOS hb@^0俔aHPpgdugir*#zU]2526ƆZ5yX=ETdH2 sX`xIdRageRXa<OlFɶm|~y*߸/0B^SS " BW4M_7~^sRiEUm���X oZ�}<O ޸l֯]KYZjꮣ%;Q,mרP(urŴLu\FmckbrJ>'vW;Zn(ǛoZ[!ܬJi'<bVHkX>ᰜL y2a 3 zу*J&kh%5 Cַ6?^UG/O|H{q PPkׅ۟ zs{zs6}+/ ��pcn+c˲lI>Bչ%]џs4,~-Kޔ}XyC,Xvcśϔ6;I'iB7T,U/4嫫N#~xPHR4p0455vxQKT Ў?Qmm6mcft:;ZnzQ7lU0\.JܮX,W?/)C~+ ) S&r��Er�v"Zjљ&%v#ff'M3ѩРtZjLSf8,_]hےa:~vڮ{H['߯  !i<OBA>OiΩ|/1Ţ|> øF!˲J:ǘU,d֜f'!a4  Ey'"82Ѫug1;Wb\~.?ε4MݻW_*>ZfL,˒y屋Egf>7γX,,l00JP(Ȳ,Yy8���x@"1$U[Ń!r[aa/ϗ1Q<Ǒ8?eT>* CPPTccjjriɒ*yW k4666m][%ÐyOLH*U~G? ۶kzh||Tx6oCofC+>>|@hlSDR;vDU[[z;y.htq9fw߃jo9N?s2 CoجL&]iWͦЬ_kz{k׮ڴvݻ[N*[ʕksKKT>6 ClV??(7떎o,/m۞ѣ8:;u}<yLsy)tB!ZNwy"(��T�4�,20I4eϓZFj ڰ6rgeihhPO?=oy}׾jjj#Ota=_~~}ReY{֓O~GOg0 MOO[zLi*ȶ:{OO==UUUɲ| Cz't=3җ>Zv@?z֡'O40pN˖ҁ{ty} r>o+Q,VI}㿯͛jmoٳ}W>' CFc9]^U]>z'TSSDZ}}'e?r:th::e˝s*gx_^xYuȶzs6'555ip>?Վ/UPXNuq#G/OtByO==={ E"Bh��74���\UWRTW_=<Zj Pss:;UWנǏOsO}='x\/aٶ_CGg}Am'~_MM-???VkkGeBJ DZQ--zVXO| Cgm{^'TSS;WZn|>o+_vڮ?To }~uA}ӟy zmw|>_W${gzi5 Y+lWgg Ôީ~'wU}}^Ugg^x=S?~W?h4/I޼h||TԔV\HjcKG?y}_WwkGOCzj%l׾y}{'tZ_499O~vFe2)}ճ@[ܥ[@����a۶~?eA=vzYȿңBkڧ_~Qc,.\W&VGGnnΞ=X,]kÆ۴l*=50pNklٳu)dV'NQYu\WWb-_Z~+*j5jkkIW׶mibbLޥp8W_}Eg40/I|> Fڰ6E"!-[R--mP*5ݻwPȫQz* UO1MMM*@;4t߲|.ϓ6nMw_^z9%Ї~MͭeVʶ \.'u˽/onٶF'=Уzu~]Я_:; ˪iJ]]dYϟѡCdrzm2MSDrzzi#��sCoն�lWIluCڴv³RƗq >_P"T<^t:%ɓ8 w饗/FccGA[;tȁ~ł[ʋ]eםyү`0$Ӵ}{MW~qB!/ӴT[[t:YO:;%ICC* zɲٽ)/q+[p߿~/_K :t:sNM55ur]of!ī+ FGGT(m F U]]S3̜ ittX7ߥX,.ue%;JcMy몶Nh��*+g/%���U,%>yH$G};Ο?SN駟?KI~>#GJ\Tut G?T4U[[֯"Il/6dbr]sERZCC'>͛ٳ'=xܹM_W^R__ygݧ2K!˲ ]驫*3i}|<S,W]]zzZruFiLCi)q K~XT:R2Y#*r}g{o>\y'��nxUً\.W��b\.W;:T>ePBy}jnnS6X,[V__ܧx<OZ"уDjjjPCCjٶ]wfhrr\'Ou=(RX8|uujoR$/_?֭+[zz^MM /߼lQU041q^P(:գG4 Y8ruJtB[>}[_,˔i:}W۶ ˲ڮTjJGiJeуPkkUWנGg&ԪDZǏؠUUO3��; 0 C>ObQ  �7y* r2MS>0L џI:{O/V^eVȑJSwk7iϞWtoIwqou]yV亞6lMwq}r֯߬qNa~= ]wٟK͆=GTWWÇ~{JuYiݻ[vmƍ)K(hϞWdm||=ھ=_kxxP:}N>jiiTy{P(Gg.}3c~Zx~gN6 S=^ܹM=FF~f rxz/}Vcc#2 C޷ VMMzBC=*gPP [~@_gǺヌy^}u֮ݨ~w ��@T ˲d۶t��d Ðm۲,9W^٦;^mۺ}DI]?O~;[K3@{Һu%jhhҽ>(\FqUUŴkv:: =YV?s<^=sSmmbxy+Ah\ UWנ`0D"җ>oVi˖;յLV__kݺM:~ ڵkm{^ԧrZoRߛi_~Jr"Q}̳^pZ߯zEU{}P3v[D4sФo~I{'󩩩E/Pyo|㋒<6кuyU6O_T)QSSLmC?s(˲Sc|>ZUU��ǘN_qHMzϳ8*r]���L,W>[U8FFm/W,wW%ʅz7oK:w*;ia^;�ٴbjk y P*`|>Z eYkT*I+"ykzzJUU1bХ ]Ot϶(BA 7jzzJhL@P!*ZTSS`0s  z_+}utzZ##CU[j\m>_SSD CJ-q&&林蠫QML* ++*+ZŅa2pa@SSFT]TUU^'{R<OdbD=!)jttDFU岊D.F 'D+|6MC4p=33��%]Mů] ��4n_ !~y埁˯A/}~905fg/3.xǛo+Kq;/|F6lъkɤQ_I}Swu+z~/ϥ\|Og ׅBqC� ��0p Ys��p. z<k*v*{Z_ؕ|>OPX??駿'W#MYm) Yhؾuo6���xct�=C���r<'ȐZUSS'4 U��pyh����y*UUŴdcT��VE� ���6��ļ!��������4�������"�������A� �������h�������@E@�������*��������P������� �������To'����dLːŞ 0?2d= ��h���,A{t'k=�� h���,ƎO幋=ږ}Ed��A� ��ERCkh���X�������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������Tļa��kK����XT T@_[<o��p9.$����la<S._9��\|>/dP ����aJM{���הNc�����7߃7m>O\N#cF l&�[N%I@����n0 Ce56>!y<y�� 0dȐf~xmYE ����Цi0M9Ţו@�[le|>Y%4 ���ړ!l5t)xD ��n(Ѵ����[Zͭz. ��,qc����p+f�=k 1bO�������p2{�������뮀m1{o��6G{J����K\3]xPJ̟��n LP0(f$����,Оq\_ttaSS��'SC<55,����n О\p܋Fƨz��qOCÆ~>W͒D ����*Оr9Gg��ndG`����`=y<S:jph��pL֕z3kY�����JEn��[GXth2����,hoj{7��V]r����XT e��Vµ ���� =Ş�� ����yC��������p%h�������@E@�������*��������PoX�mB?'97�������x;�0z]A5ԙ7_7͞'՘v[͍}��������Wộ{զj~LF\cۆ6+641ႊ7ÐB!C!esG,Ͷluǟ(������� 7UmR:ɢ\Wjkw^W%J-Mֻz𾠒 k_^<X(h?/BXmr5Ȩ)WC#Ǜw5_5ӵ������w| r2 鶍v9JhӔtdKF†:, 9'|R0`W<Ft8lR$l(0*<;XPRRUX)CLS*:R6JaHr|>)`rvl^m~?[}z*������hc/$󤪨4<⨱./(!t[l4Y2Rec:ZPWO[(4d][lu[z♬tyc=E+')޴VGm(t=N{G =pPi艢-5[dKy/\ך~%M8zm_A>�������n: lfISSS^ڑӣ`ԙs<I͖ސ SbQ]Sw%o(_2gÆҟZ-MLV7L&L#!X*KΉ65ISO>o٧HPk%c=$MךJ]>VԆ5@@ih|U4bjzK-M__/l�������x;З {)yG *1쳤%|t朣Sg 9 KUѳlZo+05:goھ~CuoCZ'ו)]ZSwδXʯK'oK;rr\i -~}i?f4:ʶ Zoб􍔾)(񔈽a�������ޒސ yRUTgO'_py:飼ç%]>|-/,U@K#=Q$=-AWL_f΄ƙ)onWV*u]{ZԯZS KҎ#9PLS-*Ym*Zj15]ڮml \psJ=r�������ް�ڛ x7MlFg52<R"fJǝ>%SM kg*MS|ρŊٖ,CP鉩)O[Z0&&]ך r+bdfi;= `i]9NiG ڱ+/'7O7�������C!mmf)|Zg_4bQ5ěU,JВNG93m|*H/u]Oű 4iI`Pyۓi C:s7OͧFKm-wg@v-l�������x�FgϓqSv;^̙@xZlai^CîvtxAN[LP4K rKc`G͖tt蘥QWK:})UbOcV6i_3E=BAuêI"y������vmRStC lﺒgh*jL=WgVK@X:Sm2YOtSJsKaOCJrY/lHSSjkLlC::[7$couK׬kzc'  %yOC3}������t=O -]w,I-՘J=51Ylʃ#ΞwysgipU4bT6iuLK;Pj|R6))K2:(hj/U>)粚.-f85jjSѹX+/xza[N$OZگF\=\N{h������͘r]G##9}I[`lҚ~uZz5ׄC,P>){b}!|>CW^/1T0etU8wPP6+P 0wϓ"Rr0hh:i|U.Cpbj{X'~CXUyjڽ��U7=WMM@iɜ'bA}z%I]Wl㺮QWMZe-���[8o˲zCz@8\]3|}tԳY5Դia\tS:}uKm 4~*Sƥcni_ C*={w �������n:帯/x*r:w������w�������*��������P������� �������T4�������"�������1o�m{v���7bZf憆(&���=B_^d~���/]ÔLx|Ǐ���r{laP0 p��:j<ҵ2 C)/���[N>y2S߂~C+4<jkl�[[uӊ%ߘa Pj:-/a���� I|Ati!г/,skKVz5U(P ��n-~ڤK j/]\"Zf_42:h$@i3���w&u5JKU.ЖZ(u8y*-QHU4��X,3"!2 }m,˺y+kl|B<y ���0RÙbm_i2 S>_Q+ ��:fn,'˲d@)/4r\����3;g,5�ehy~ ��*J9FBf[o\9>C���� ڃ/*/��X.^<V`\���x'kh\c��?����a w�������@E@�������*��������P?l&B����IENDB`�����������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/Configuration.png��������������������������0000664�0000000�0000000�00000062761�14332737457�0026706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������o��eIDATxuc$q[YeYaVxR@[ 5j_Kh)5BP\;.9?I&L2=uəع<Əo������13=�������d�����C �����8Q�����_&4C������E0�����PC������E0�����PC������E0�����PC������E0�����PC������E0�����PC������m;ӏ �����`@1 OGau>}|������Nlv":[鋐GAZOSA�����+q!a,7nC!˲"¢J����� Ð Ìd)dz7 r0 ٲp d۶Tڰ=jj-YV΍�����hLVqe&O5tpHa4CΌਧ yٶ-۲$CzS2-�����YMp%ْa2 # u'ZnMn,WC/ �����W[zS2fiE/Sڪ$۲dY^B������=epbYlsO.եJe`T �����KPqNOV0~2˲as7f�����C6qPOD]JfET=�����@oٵǎczJ}5=%�����-5idRP42V0E{!�����^cY,d] ������r..WO �����z6 J3%TNQ1�����Z3٢֚�����pBT �����LOE2ݨ"�����;40Y!BM;212��hϝ�}gRR0`XD!=sM滔ۻƗ5i[ǺUTh'eT[gi6n j˶`��28jC =Ķï?ڐ /rɓճ%YYr2Ã- *554Ksffi~-j+C��B0Vo"(_C(C[-U *p)'dk$>rIGRah&�1VCmP#pPO7;P#S'5ovV��2`f&�}&f_+Ɨ5w;@_;+K c�p"!| !z }̶#Uzƻ)1+��C0ROT-�H_T e^{��8;VV0@ }** ^{��8�p1]Ȁ kɖ #x�LC����2mdž�����޾SB 5z6s<\[]{S g"BƎrS5A=\>o$'ǐ+fg3 ���@}-vZ.m H[k ]RHCHم(;;\j9ܭunrAhKZ20���3BfBvH"SE07ЕiP yA=xzGN1s$Iơ >q@<ȌB`z/���v|!C|gHݿ/_ԈF[M0`1AQ*f YY~t_E`0vŒL ���a.eXOkNhSW1~BOGi $)?.wNن>u^nd_G}jng׫tS1ne{);-ϿҬ /6gzH����L]}[s'Z~k9qoy'-u]^N8*.小d)]}sW LSz;\b ʕ-Zүu9r�WtwJrI6?Srtx�@AWֲ!-s;7S'bt ghQamhT+uBԴY2 st҉9 luw>\Ao745rեfÆ~}G~]\S;wh'tYџ �N!v  Ɨ~\XC!IZtWy,8:_YN\Q.r_k-ԯۂvW%QsHW hӖF si ƍu6e[PO>$K92ޓzj,#<;%4TYe~Z2sG3hPK)?ƭA\thQS=9ܥLj0CZ)o'Am_>uyN9. lCt=;x v(z_=\ K`8'PXPyy.,2cB kL^��=]-B5 i@H-cfu ʢK;v'Imhu}M_RA/'U[gwznY=:TQ[Ֆm `EhPRS*,m]VC2ȕv\CcG?`kӖ),0#$5 EiVC={Cڸ%F_3+NhTKme{P2pfg `h93aS5ovNsNSƸGUQb8zNV\*<mGǖ)qEniYV?G~KcGh,`rs }Sy*-ݱ_r-nPCc' :Xoc64S<:}M ߴ2m$ N<Ϋk?9e[{=7iv]j4vk{b>z34j߾/,MM֮kٲtRNJc1:BQTدk--;*- F|yQoӬSip` K IJ|;LS33c~54;:ٰ!.yHELJm+MYɖ$/$]tNr:ωn4 >Ij^Y3Mڹ{MX?<q|C>XSϷr|&M,Ko:\hʤC%c"Am{ި/~6_yx,wSw1^L|0Pb|f}CHU%͚чIC]1ƅ1|=/ee},2N;9[ǹBhYY|ކʡ>aC;rk'.ZͥO=1[8+:HiJG7ٸџ64mG#G5|[^ʐi~|-8.ꃵu_=aijdvg}קcE9:ԥh͚p-YڬɓT\֮ܽAUVTQa0SC4n簨Ltes@ zk$驧KK5kL�Eͦۻ]l`Y҇mŬ|,Vj㐛c$%yzf"99,OEg}GݺzYƻ-`4S=q3j+oݶ34 ]c>n~ =LK>;>sI^xYKm0u{PƵ ︣Id5;PC[x7a(d3oV4?PP_CVM"*kh, g|;a(dR0$ylce7w=P+&xrU߾9 k o @HWmߔTg8W `w87_5Ĝw tp y 9-Uy=5+TcϞ{ާKz -\WVL?4x~";vU_o?�Ws'I%Zu=>L Cv EnF3z7zsq h~SP6n׻b_gJM 7c*b>zZv *e<'&jj-MVZxWoӢ=BjjshʼYIQe.eEwoTXڱ+PQ)3y[-}ƅB>[[k5,"\ek"L!pE�KMqӤ C7aXjM`6t5O>פkɮksscB,CggRX҆MAmiH[zfԸn]tNn$Y JO<פu**0uGsBc]z{I鏜smK>).2u^M9e'iD>qV ]ZA8;;K3M! yī\FYXh0쪅 OvZu`a.R:vUk@o[Elmif=X&yQvu6,v_Wu አ_&M}o>rzV$>>[i<Oy뵴z&X7o*QI{ƔgQPII(�X4DaOfӽ 13;]v�%m/y*j]{P)#z*|G=ãb?5(Юdkss?w"ژm;6FN\aH_bA$:Hjm@ p C ׶lkמwlxo}>W'G,<ƫ^h5??hX.m)'z u5= x?$;*+&dض#P'y_x9"?iԵW$&{: 6lCu[uէ{?"k-`n iؠhސ~�l7IXOu bݧoҖmAl m蚫 5HNWqd|!FY^эkϞF4uқ:h>Sqc=z~M4s՟~Q' ڶ-+ZzuN:1G{PK`S۶"Anfٞǝ^%_V7J/x߯ԍ7kxOZi}+(0uE=S空u~ dz�${UVB v 6#z馴7;mܶ-`c\($IϾԬQe. ;YZҶQ*\k-埍7;K.Sj7mCM'5l͆/ I᪫f)P "I:n~l/WlIX u{P4}j;.mF^%&:b[O{cfK*aloN8϶n9Q09FʥV $iӖ`\B /VuV\lۖ**ͯ~!7[%mNcӱqU@[`׬h4O$9G^C}HS\];~[IJJLW77n,ѯQ]]dLI Xڵ+(˖ƌv(~OΑc&"~^L~($JrMR/]S|I;0 - Oь޴$NsPhF`iƀv/ݛKU>v`[lvi: ܫ�zEfѢj]!,چA8t;_X/Flz] bK/nrd7Sۦbm^m٪"UY~Ym3}ChRaASڞ[ Z|&?hEf3y0lk߁ꏓ14y[6Miڻ?i0=P ⼄J2gLN[.WXPkz8ޭ<CrsLe{ac 7%/[1@0<C_Jƍkx ]wmn:aODImv+?j Q7JtojTمs+Ð(@XիcߌM} \^ [?ѐҴ97uիZENф*ٶTUm?LJcǺu j ]_oń[MU_(6HZu)sYJhB�п-l?/~MI D W-`&wGQϔvM;[9Ɏ w Iau Mt] tuƢADɎ^]k!?`DžR1c?.Iym`E̶?{oh9Xo$jt'j9&ЭJ:^UksϕdSM1t'r5r+a*LЃ!YeWTh5,mo﬉lƌ@TqZnՌu N9Ϗ`P?;z/I }snvILeGﴗe3s5}z MegjnT[gij}Ηr:?kWAD++Cڼ%>ި@ @`P='_ee.+-O4tyۢY׆ S~u1*)1rC^-}qɓ=׊!Æҏݱ3mۃI-Nm tbԐ.͛ɓOE mG ^C95WVf_ =Zp\vxIuuV`כTt購iyK 2OwkmK|آի:p $˖FrkTf {h޶ϻɓ4i�Up_&mNN\{G{3 / ؚ/ VdVIgc>]G/gk|Eӭi'?M'16Φs;=>}0nc@@vdzԈa.y/SrڶԂ.`&ssrc=-QeU])mQp$ �pU�]>TƎu1JJL}5)-8iO>՘0 9oҤG/(_uԥq}<O=A^A}4Ԅ (G ^Gn(}XMpk\m WR-_ўlCGjXAiʖCʐv ڊ ^C.Anmj_g%W]Yak tjb_ Y%wp(s헋4<5m{P}!iJ,Y[c֭z}Q}X#g}1nYV63 -_Y^ We% v 7Zޯ/}1c>d`�zPgPo56ga*TGdJ"h_kjqi** JյA^<\CGsrM@?]²UMcG?룧 wEcfhFÀ(^!vc:r'eמPFYB׳,i@vcNo>DP(ù{o(i/t7o#eip#7KB_TIYz-S߶[_okIr,0u %81ÐƎ`0*Sg y["B}zjnJ+zj-:Jv6mn_|PPr~AK;ɬޔ-g'?P3N7n,y%an5۫}PJJL ?W(ӔNw]V(o_(nմV 7sFƌv+'Lj}ii[BZϪdij P(ځ)ob{[TŅBѶm _W˲}CPh4Obzv>3jx sg4uaz}͡œ~zZv %<@:O€iY$mrP~SF;W IkohYGz4!v诿lOMǟ|0f+jڀ뿔G6_qcS/Ǝu_-[t}uI8%롱rel{\zIN>9 8' _/XUSK߇ sU Ԥ}ۯk:KzԽ}V'z'cé/^]ΟU}+f-ˊ?gk_-QAߛ93KhzQoݜpjo~PϧU0h=Z:<-\ sryG#q VN7.z =P}\V:+$ %䓩K>yF}n!_SmF)|($O):�sUf_V}my7wvV̲\fǟM ۪} 1.+7`fŘR zw? MpW3>mGk˶[Y#f:Y4=cf3.y]Ӆ<'ۈib4'!=BSY#il#mjў6]˒|>>.BR9sggw[[Ӕ &O+' ,^~I=\$͘_Rwo(aCiۖx^U!MッVRR3tH[˾I27_E}A4lK睛9|yzCÆ4eJsq^~٧e[4Wjx o3̊[ƻ֯nC!]撘{4eJ֯Wt͠A.}B]H::섡P+6>>U8\tR|0+.F׀mۃz4fW/kԊm!%:}ƒN㨣:y9ҭf[Aoylys$ɏSR}>[_`nNIily㍦+ A=˫"Sk>m=��má<FL5zdЫ-m_RdƬv"pgUʉ鈑uV*ǺE=hMtҡM!qgCE#fgʊx G[jH!̸&Ѳ<>-[. IOiLS$%MS%i|›+䝼Ы-Ѝ_ڂ DO;;v!]r~nj7DC$,'e_vA^LڌXFg- zC!] id<OW`SK"͞q?Ii 8eQNku۶6r~xWv} !zJNm?kj,_i~X7m&3ψ}۶_BRxR:{Ad^yy\ b:9<jdό78\B͛獄[een}Bƾ?lPCC%8&yk4x ]qyA<pwt~7 ,iՐ!fzu <9�͖ԫͦ[wtŷRw~ھWoj8ό#(,0U>K&9n[GLI|n+.އTBB>wi^wkަ7ABe]Zwظʼ><C^;eiM) _O:W0idmG0W.dkB[UWccw+U1ru4\On-:ޫ\iʖ{ƿw^/|:O_tH0DIU}SҺZA]=tTccZ۶t5 {qZ9=+~򳪸߱m?0Whz]Uձ[' t.Vg53M-OU{Mл݆Bag%>xsUVMMv5Y?/>,z }庢�8/d(*s6[VEUÂ[yjvj؃N罹]xsQy9>ܘvt|jKEL?,?H=m[fxYtsxo?Ǹ1n(;&2M52M~[-$ dR ٦AM;B.7n5mZohQYTjR<ٶA)w,͙ٳӹ^}Esge5u⛙loI80 /נA82~GƍCgp*Z}aoʌuQFtIf[MMv¨Ъ}/ RMjk-54XIwM3w,}SdvIwedڵ~wlv }~$)ZcYRciѷsxBAg%wR3>ID,˖i)QUS%l;+�"ekx}ixnjJ̘6+V^އ~(}!;Ш2WrgP䀽7ЗWu%_B3-mp 6u× h`EH;!+)]~aB!R׈۷ G>mA55ۑv0#G*,T޸;w.[/I䅱; **{CײGn綅XZ2&ݭ^xC0Cʛ%o-Z K=K eI=!W'|V:4lUr{=И/hjƀn:SKEy<$(U\6y՝aH}@矗8 l5);JmGگPVUoTva4 Ϲ\)0%ҙc*niU\VK6']O^|)cm?zK{-miӦ@?GwgZ]]zn#ǖwSL%I)Yـ9�pQŽw)`IaM*sńBDvw<#n%GjҖv\P `lLڛ#/{4cG-y[P$jƋI'뮍z"3. >Ԩ}Cv(bE!&];`Ӗp_n&m L:;qC<ێ7n4&\R^m nhw|.ݽ ڴ%6m|qo ҺLؾ=_Zt騣N$ M#2t헊H&+nMM+IW1gvW4v&h%+wRz~7.?F&_T{kEY|z_pAכ[TSc)y֧W:JZ~jUi7+O,Νb/jʒ}- ?.�({-6CWd贲4h3vޣWNH(b1Q+Yt_w%m=ovFdGe~=|*DM2ٗ/ZVx:MfnC6o &=X̋z?pv8O:dɮ}Ƥ#`ۻ;]?7w]^gƀn-/5uO.WyՐA.eeIuv u:Wwv>h&[VuoCjM WwHwU/ÐFTXhҾȓOw7Hu<&[=L!+)6;GiԶY/N8ebx<~ItA\[tzKmvH?о%i,yٚ亱S%0xH=7 1UCC;YyloƿJ:u0ZW,Ip={S@?Vlk@cK6m 'ԝ՝w IyZni/nVEjlcx4Ȭ青o_0W^/E8URmA=?AԴ�^KeI^#d@E-~[#|yqѣ\ j:w?Xf3dR]g~-Я\CÇ+V  Oc;ƥlCX Kw$+j@E_sʳV^}EL{C fT0(mP}~ eZ(8ҼpZ>xPŲ;*$VY/~Y/ uSwH /]GX^P־},+lztԎch9zՎCLӔ>Vv$jn 5~g.M%6l紣p+4? ˝Omm[K˕n RNaij5ʭ3&ZY^iꊊslʢ82+ w'j문Ǚz/˖7%&Z)�T[ZRh!v6o%%qsgPӘř>K�үnN{s'WNDʕ</a`t@HUBVo�]xA~£?/?m{g%賲 ͞Jj\omEvcSZtrNLM[:%yńi^)HߨQn}tvo^a` +lHi%hGϏ}Xwxn}O$=R[@YoQۯ=Wn*�6bKW\Ҷok/t"F[Fֵ<M{ZHJ<L W@c׮~jUVv/~C-?1aH_H</s/.ꢸ&EE|rѿ;klUƌvSt:ԥ+>nv~}ȿ_|p7zߥJb9*/wgmfeen}%҂Ho}Cuz+S8=/{`77ۺZ,chԶ0YSbI {vr)Oߢ|RAO?ӨS:C�( PJ --V\]GzuuZ-!O |lIՍG6Wc6jn 7>ܕjfΠVG5^ޯZ+~Aڼ9mۃ*/hxOVLŋu٧ bKU[gi wu:]O691{N8>Gcx-ڲ5}Ԝ |wB~u[B!id֭WR_r`.8?_;w‹>ƌq czOD*jN>)Gkޡrf-^Ҭ19S_TtY>E/֐!^۶f?a`t1ӧ;.G=sUUi< L]{Ňg֔L* s[rEE(&�!f`B=``A[c̘i`ن&MVntd۶J56ZiOM~V_2wžIWy5|8᪃dh# B3.jPKO. ?1c3&cmhGSk̚0|TU%K5˫OCk͚+y<:3Wg+9^-:9G74sfn#ᔮ'ݰMҭ4E'hV i`s \CW}P}l G@rejYq}<mƍ|a�[.@VMwj-=d�dۊ 4Nj{Vu]]φBz=XǻT&쳲goPwFՅBҝўMzw--]yU /sN?ņȼ2fz1¥Vay9yb7Z++/_@XV|ϰStݗOcuYoL|aʷW^ѷY7s/H\{ WRsX��/~S[_{H(èٶjujPoz9֭ 5~êf[?7U{Ӆ:bZVK˒֮op|&ZEN]ZwY">֠{~[ϿӓO5ZR@N8>GGNɧƛO5j qi $4 kxrsӛeffy3V:I]N{,{Lƌq}Z9a.\|RN׭+6NiHxfM3v=lwl~[z ⎙>6Ȕ9��,F}CjDlۖm۲,Ke) ů>ʯ}jk/8vh부~5?ܹ^5tK!5lUVxIsܪcpt+7ǐ֞Am۞MŦƏ1goPv7ΣnY_P:]qj ;{w}ԫNYItMt;}seҕ$c4*t:RSci**B /'_Xhj`xI ʒe35hk@,MLee(n o7ʁp uGҫkjj��WA^onLӔi2 CF ׯ[s!00j;./SI ^{[[ڼ%55VoOl^iE('Q+B)4kVj$UVZ >GwOM.N}| &#Gf{N"͛l[*z: ��>G0\𔅜ؤxe�\ ݯ meephL mо}2feE'i |V/hD q[o7666̥I��@C0oj,͘3 lmNS6` ?ޣ[~4H~A,C_V W =p' 1YggcbԵ_*��"v_k:�x͸B#Gu ř{N\ :vjm^/)�����plqD^{I;v{wP4f[cx4aGS&3} ��oC���i3ѳ2= ��nk�����[������`�����������`�����������`�����������`�����������`�����������`�����mۖm۲,Ke) ůѣFd1‹]gz����� X Mzv{dLӔa2 #YnMi*������ʝ``7elJۺ~{ �����b�����BtL����O!������"�����p(TвUYQ*YC4eʔL �����$@0E`H=zCYq?aeG߿q_s5C�����SCijjǖ;Ӟ}5g9:C˘}' $rezx����� 4]sVgz(ʺ5bN7K}Qyyy`L�����$A47EB'7>ʸ={ƜܕU^^^�����:APY}Lp3klo477Ŝ..)�����@ 0qP2=~B����� L%CL�����tm}�����!tKmm#'L7�����=6߯[q?^"}Ofzx����� ECH'|Z]2=<�����"!miso~.�����@\mضNyOΘn�����H,77W\t=y+>Xa���� ۦ15st#j�����п|:MjpR[פ˶D/3XÆfz}���� P{=}ǏƝmGκבӿ W�����$T4\m202=>cۤ1C�����)b(MW$]2=~e谡1W\c=:����� B52^>z4eT͜93C����� 0 6kL-8~AtCCu]iӦM�����H!g=χ˯i޽:p$)'''C�����I G/]tU,Y����$J�����PT [jkR^uuM �����ڡb�����Bl]=C������D�����CQ1=J4mڴL�����hhlۥb�����������`�����������`����������� ɲme{،}a;*o˝#^9gUsp$iK?G/Ҡ%X4u4bz7AسB7&I*p:JHWfzzyeڻm Qn[~Z5֫W%I-N>[3ֆҮ ĝ?k5x���G$ihڭzZs|\M3\њ<rhy;eۖ$+ߺK%IC0hݭ`Yevx-MڶIҐ`hv6s^WU޾[TP: mޭo˝kPm= cwg`h״wq珙zZڊ-ry;@{���#4 z}|zsf9k.;yn$<>@\rWyoEB!7_fte)hx&I:ӑpW@{8oݣ9W4hʼK3����t`( eK&̞ah=Q}KGƏp356HJMY$É3b@TW=`���C0G뼅4ogib}ϏKY`@f_Ud ȉ'fz8���� `(-/cUI~|Zc_Cj+6kg#CIRMZb;b ='mh꧵g 4tt8K-訯-+Ё]Uoܞl * 3Q1 }Z%I#'Y 54r yuڷ][w55ThԤ5k}=E׿" :Wkwkցd[F_/Hwk+hTCxD =W\,È_qUg$EMKby4y[ю/z+?DçTg˛ڷF9y5ayqo_kv\c1XZNKģ.��� +c2nzʞ-oi[񽄚ĝP4jݭ'tv$Xke:% \w=1-f5M? mXSتޭojHIu7ki}*}WDNϙ3_Cl+9b Y| Gw+Vj+6kf:W8"Kۗցu`iwVn\0_/s]yu[]WH'wL3m|ͻKK oXǂT$ *I0���3C=Qk$Is&!=FO68R9k+mKos&_<Rf_P@K_N[= $WV6fuڵY>xHa6f\& rjIҰ1u`{z2&}/:0$Hj& 5[k߶wXG57&e/\뗅O7LFN8Q9Cup{9Q{꼯31SOWVv$\ P JǪxr gk?T%&\zZjk+z/Oݓѭcl=/Ov<���`ő>>9,]t;m+n= C<޼ˆSm(ipLxoҺFO$ɲNSScš[сg/2'_}>rYJ ie<15t䂫aZO%IG.JN~Zo=m}u$''f]t;7L@>x7Ph)7j1=tRw,Mxu{a}?$rܮ5EMZ_b9k÷S[Ù)s/tŮWjpYem=uyؤ}UKS9{t1���p8bSxwv=x$kNʕǛ BZ^yx^4(<1 Ii5 #JZc Ae3bI-դ.+~$ JO;dy-M5ݾOtEab~|+۵+<ضcʋ $q%@K $i FwwBm:`U@{���#*iOUps!Ec6t8^~tyQb|u#e9Go-9[|5ع\ˏmOV~7<]':iiU^QYgڽ{Wۿv-+is^Qr"#?z*n[۫ߧ]YvnxEשfqz����@0 >pk+כ_}egezXE#sg6P[S}m!MSXbP;mո=myr6&}va*++I ;#?Hxo^i`W?sgնBP\KWX} 4tx= ���px#f'V}BKs䫌<j" ikkDYKSmg+qxi75U(ܛs.~ ÔV_7)2x$8BCejwk몧$Imw����8P4Oh}9VKo jk>>zʩ?>1[2Nx7H;j\Y}d+^}$ZtU6˷}. hEh@S<����P~gbI/9C & m>y<h/9]V6B\sM#R)۶T[9uE+f_Zk{lXgZ $b:0lNxyKsj=,VlIqml���sX, !O~Q&IStQS2=,!+PzIp"+)mxHDzj9N?я")*I~_e{62 Ҫ;~\=mPvF*Z-#I7,2v{AJi $N3,s����@B0=ac΄Q;Dno=GTP<ZXG޾[;tiΩߐމOTض[֋gzd>Y'\H8T[Y?vC;rU@q4k#GZ4di@?9/zz$:wGAɘChM9Q{p0 %ס[V>_R#���@`*YͻU'/ee{ؼQsTkw\6q:LsyVv.Wc=}C˚iIρdOhśPcVl÷#';iP+tn]# i;j;ʝP% t=$I]]1+P$Sʧ?>U_n/tfT}~A}ھ61L]|V+l+>EQe���4z`!d֠:s; H #zE03fŸ[vw#Sl+djʼˢnw{c4[/7oSv ?O>~:znPhԤEO^J9/E05dQ=>{Ii:_FoZOS?uomW3OՉ60ԙciEţRge9���H_Jlۖm۲,Ke) ůѣFd1]V4mڴnޒ45TUjnT~( !}۾DԈ Kw-+U _2ZC&4{B TojnPAX uTcYAU]4d���� <;wכ%#4e Hpc׭9M0 ����z+bn�����C �����8�����C �����8�����C �����8�����C �����8;s箘Suez�����*������!tgtP����@T �����8�����C �����8�����C|AɶPeY'˶Ch1:jQ�����HP6KnЊyo|-~IRI~Oef,K?OΟ=g#����@ Jwo,m{#$U7Ͻaf}{s�����RDPkI:bp .SY߮_/__xef鸩jq_G`Pk׬ӹ=O ���� e'ϋ;uނH^]Zn͘y>q<$Iڱ}G�����RT4xܮ6HCK%IvP#?762=�����"b۶j}͒LO=Z ����Sz@Y\ jSezH#�����O u-OeiZc_cy gez}ʛg^A<�����{ #oįu'OJ6CƜ#%^a����N uadY*z>U7_S_~ E1vzߏiI4~fϞ!����h>sn"3n>s$iSodz}jaz'9W^׽wݧիWgzx����� vtyZ4s$饫UԒa@ [~3544]zp�����/ yFG~]YW_yMovgtdzx����� z 涥`glsWBC ����BPzfqez}.s~~>�����C) C:sꌹT>T r iӞw@$鸩*qNo۶#?@ ����`(MϿNϿ.%fz}*:�����SRd[0KeEIsɉs.¼LOն5v]�����HC)r~I9'ާF440 ()ТyA-],rzDYY�����RD0*-02Ʋ,=3jhh\V>nl�����RD0Ypwˮs�����Hd<1\L~D�����RD0nް"������Īd������E0�����PC������E!tKVfz����������p(*O?-C������=!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������"�����p(!������F0ddz������YLZa?M8�����g0=tk*�����@ 2 #JBL�����Z1d?LPC<dY6������>]J2Ԝm�����pXknj0=-`( Ði2MSU5L)�����PHU52MSfp'7> Zٶm�����pذm[յǖ"ҥC2 Cn[fr�����B!Yn;.)i7oF2u@mvEwAˑ6�����PBTQY%-۝0p(`(MӔLQEE,˒e1 ����� ,q?g劄Bn[.K^ V df\44 elےmۇC�����@ZcsÐaJ!L3b(cSڏ0aPpZ+,˒eYj�����8]k14劄B�uy*Yj(ن+JeYrfid%C������bdJ=pV9=@3 ٢P����� DO=SZ==VL#�����Ht''u+j?(peQ:X������Hr ZH0hB)W?&�����/ h= e������ =fo�����������C �����8Tbyz����� ;:}������dGg+fAZOSA�����+q!a,7nC!˲"¢J����� Ð Ìd)dz7  6ʜ ����IENDB`���������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/Editing-process.png������������������������0000664�0000000�0000000�00000044643�14332737457�0027135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��A�������IjIDATxy\T .bZRfaJ)喦Yd%܊Ջ].=*ʣļKC FYY7?�̜9s{Ιs:ւBD#!% ABQBDB"jQ$Zga}wXAHb>O!H[~W¦_w֥f7R(I3Kef-CsQ$ !D( !F!H5 ABQBDB"jQ$ !D( i\ٳ̺S(ʰt\z!,l-J%뒘$T*^t\(eKԨH%5I*k5J%j+< ՛!H a�9o+55^hBh.!!A/BsTZSS1y:88-[ֶ>ڧ :T2 T9z,-`mm?4eB"#`wwO~d֥il%�m6`σUo^"Ƿ'-^Hq [k.C# ׇ 33 c5|-K=:꺬gA\[[(Uy߆یT"#aHmv_55 ]s_O,&&W^S3DLLOmpCan8T*}f$&JOe9y_vISDoHO?ŶmP7n,[NeJ.ųT3g#8x|Tff:?$oS(ʐ>}l HZ�6n܎h=j BDĦFsdcdؿ?j5h~~:s8bc!!AsHKKe%Xl?o2-[h;;G|V(J{"<<_W" $d-||4Ge*xf �~a1c>_ A5RL<Fm2S{yBII1f{l<}UB>>~ɒeֶ1c~ä9-ᇚ新͇'?,A\͕z{s*Êի-AFF [uK$xx C~~jjw4YT̙㍶?c|t3gɩ?�sGώ!$dmBJKK_-33L .]ajj2VZ&�wqF2<s^GK9Ȧ(@ϥgj__TTGK.Z' Abt]mխvv(**RlW8Iq`�0xnH-lT4DV{qúD)2ڼR4?\X}62Y\]=`mm;;G:gT(EIIO$\QFF וsp67jBH$džgRu$8\ρ{"(hnL{v2%7{D""RCb4>jM4&Z(EbTelܸ]sfL<�-Xfʼ5amJ$^-_emgX>'ᇢuu-AVVF17M),24ywtA'iSg#--AA�-[QzrϿr{FZ1W>=H&n9ڢ]Wp"jQ$ !D( !F!H5 ABQBDB"jQ$ !D*2D;7+P]u&I SsЕHTWW�W_}uIFɾ_/h~IlI`O[PVV�p{/1g]hќ !D( !F!H5 ABQBDB"jQ$ !D( !F!H5 ABQBDB"jQ$ !D( !F!H5 ABQBDB"jQ$ !D( !F!H5 ABQBDCmmm-"1&N† =SSS\pn- ѲI&Vkۛ>}:]2j… SSS̘15 ABt@[affzw !:n@$DG RP[ABjk7H]Pc / ABt uE!Hh R聦 uG!H R !zR7H] 葺n@v( #u uPg .]P !z6i$tЁR]YʣZzeEPQY+СCk"EM:I熚2<X$[5u�@ :v:G|*Ls$pf5dvKwk,-O.EhNG58wa˽mRB_0Ϛ_+QSu)zC!H^Y#q.` 0Aq^ 2BJct$x5' ABQBDB"jQ$ !D( !F!H5 ABQ(ʰt\z/55Y//a�9? ̺�B((h_�HMMƪU U銝#] ABZ9HKKBQss wYTh8LPRR{ [0U.0zҹP(��11*?11JmOmRחJTJaakqB ܹ#Uo Ð prdOʕ CB nnXxLboʕ�SΆd,[N}[ڦ(dd0@]।3gXX c$ ABZ}DϞ��?x{(J9s˖'|ٰ7`mmWWdIkRR~gClM<7�dee۸{67nʪ7aQ  ҄}?']ckrVbm?غ3L��{6f̘d lHI ޾ɒ0q�g1sf0RR~ z獔ZB!HHz$xٲuA\7p^pr߮mӧKԩP|g.h ssKXYƝ;fMp!۳Mkk;Ŗ-1z8[ɩ?bժ kk:h[}J婩*y�\\գpt`mm&ږp-qwDxxVZY[b*qxvv-9r,j}<G#htab|sM4 hxayA !F!HRģGXAIOOǵkpu$''cH}ޒuYD(?pu\v 2 *ϗ. 18v4~  <Rdu^^^1bL+^` D( /|G 4#F/[n�N!D A"~:^dTVV=͛\Oң:uz Ĵ :tE!HP(|w5ܻrֳgO 6 ÇLj#٥uEC8<ۃn"yd]PzYYY-ߵkWxxxϷ}8vֻojkº$:vFqqqK/ݝkg_4EpV5lc' ROt$0}whMQQ<[[[K|n^>G q|'5?d3(I;]rIIIr rss[\Ԕ?1b899 G@_x~uu5tΝu7 {)ѩS'tܹ{IztDQ=;cȞx~$?^|E>^xA�kPSY Xblmm~z'|rW^ptt#{9}78H$@!HU]]k׮^~~~yg z6!** �'O^g%41h  t`4+Wʕ+[\ #Fȑ#/ʊ.ڃpaݻСC,/_.�$�p\|III(..n5C K/QFMw!] U78vXl۶Gu"K.ҥKd-߻woK9r$F333ֻ`v`mm-jjjT*E=eA$%%˸tܹ9r$F)65r N>sNՋS(qE\zKJGƘ1c0bL49:`矱|r̘1ϟڵkann;wga1u.^/"--_x>\\\Xo.\CSSSaee}vޭd2U_Œ%KPSSxyyBd2>]gϞ9r$FѣGe*|}}'}<xhN޽{!6nЁTUU˗/DRR˛]g=ƚ:ekko!!! >uzA!h ˑ-?b;ƍC޽YO )k<y1tBP?-^Gرc1f:A?Gmm-[cԩK) A)..ƹspakkcbر>|8҉/P\\0_f]P @YYΝ;TfuvvƸq0n8:Kt*""sի.I'(Dbb"R)^>,ƏqƉ<.†)vڅYf?accú,ԣT*Ņ ]wȐ! t-Bcmm]vaܹ裏w^Ei) -- 'Oٳgs=___֖uل��m۶ᣏ>u~BQHII N:SN5{e'''c]6!M1bBCC;v`ŬK A-KLLɓ'[:6660a1HNN޽{燁.I+(Gűcp&בH$7n&MaÆ.6Y|9.^P8pu9ZA!YYYؿ?Ru1i$L0=zͿa333'|kСC1cڍB Ξ="==_oF!>>;w  VJؽ{7ry6 o6YJN[o&6mڄ;v.](5p9DEE!''s&&&x1}th`ѢEؾ};R)Xf8<vލF9::b̙8q"Q5kN:H Ac#˱q&&Mb]&!}Xt)Ο?qƱ.M(ؽ{wgb d]"!1zh8::_~ }3kV3f@xx8233 `9{F47@=p֥C0//;Ñ#GDqiqBK"`ʔ)W)!mcٸwL" $$2EӧO�|Ki5<tڛX߽{j_[ZZ[n,H$8rY!pB崊};# .Ә8q"r4f3fh C5^^^ŋY*fff<D{щτhK/=s`C{z[[[ ABdȑ@ZZR4f!hffIXC%Dȸ_'%%.Ec@P uh jHl!.5jӡT*Yt�7o.E#F�rV#˄U �ܸqu)1СC5Z(nCKшф �,X@O333b\\\d˫n@Btn2#F@`@@�u7/hCb A///;V{^I.`ŊM.=1zzX" A{{{4ZBH988Ν;hQ 8H] !z@ Kib g�7?n^&D{eiMf 0+xrԠ QhCpDzlL_[w8D9"D<駼<AQ �w3׎BZ�?/ht!0�9NM) ѣ~� X, Auȡ $D,,,PZZʺfM BBBPO4 @`SX蒅JJJX, ) %uȡ $D(uȡ $Dw,--.h+�9wtee%R2ܱ,h/�9hBTA70[a sss�@YYR2u�r !!ZУG�@uu5R2W�r( юݻ�XCPȡ $LLL�P'fCAHHp!H`@!!m l% 3A~ BBZo8QJu j * BBZ?f]Z A ڵ+>|Ⱥ  BB4׹sg<zuj1˳ 3v2( iV׮])ٱ<@t0�81C/ BBեKl u҅:%�9G!؀ uܙc @!!u O<a]Zz Ac@3k $ �8`^�@ǎSeOo �PRGԝXCAHCPȡ $b'0* B"fw.;�lUǎ;g De& B"F:upP3DlD1'H:DL:tZeآ�l B"&FCAHh;A @p~ Vxe{�D",lnߍ?_sk_�T*ؾ}3*˗-[?ZY� $d-$V��:Pfٰ.1NP.!!As8sֻ1D>}0cd4!!6n܎<<mϟWoTX!16F;WnnHKKBQ/?4Nu E.??{v�(JW355YeTYz8پScb!sE6^ JJP!VTTh>,^< nnHH!!A+7С�u>>~*!aժ6}_ubb"qqƞii:=x q !1lʞG΂8 <,Z:9̙|xl<\]=0sf0:wwO_ gDze \TV �y ##EE =)</i9!`G,:᝕}[xs3L ɒW=2 %SQRRԮsF2<sֶ:߫{r&/{>}*OӏI޹#�ԅƍ>nIuX[b˖H89~S�Cmm-�h4o0 iiD2?ؔn$sDJOYZZ�JKKԮcg{ͮMA!( 3J%j+ �mw}J11P( HDi5ryX[[~<fy>wwOQY�ޣX(�ŅBPZ]* V�u,BBb*S{":(֬Y}�ꆲ+Wnh;H$Xz3bb"9?kk[XZR9B<�P>|4Ə� AaPۆ6'[UȖa ˘6m>c֥͛ӧO.Im:�Zt(D? �7!;'&3DAvݽ8aQ� OPs>ڟ!IN~8w;gLݪBOG {Z t7Yq l½[URLЁu)D@:uĺ! (�:  i Ν[}e: �$=~�tVVAHH�4c˩D=dO/rqZ ?�$q IJbB @) ^4 �$A!(z?]֣G��]ta]1# ?)�I[<|�еkW֥/.v7턙 ; Nu9ĀP'(LmAXS_l|4!555�旰0 ,ȩFֵ ׯ_�dff"$$ui@p {C0 0#X^K&aҥK$0{A0~�%v ~˗/cʕK%GFC0!; w… X~=뒉сT ‚jd^Uajj/;}4YN:A\ ‚jd^)?ꫯ Heb D(C!#5 @?He8p�} ĝ"S&aC!  _Ν;Um߾WUU� A!tl1b׿, ӧDتabbº A.g| lo�rƏ?\e?|UWW{ 0�3ka͚5*>S\zU> A0t@N`` >e˗/L&gEaP!&u~|Ç /ϋ u�r}J%>Co:TWWӑa0 @ΪU0equu5.\'NP8 6vZL8\^^`rAتP%aǠC Bw* ƯI@ƍ1aqYY,X;w0_yy9zɺ #A�lj쿰7[\jܸ\'_|ѣG󏋋`ܻwi]D?***`ffƺ # LT*Kpb B @Η_~Ç `.Pyy9�P'(RYS -�9xwEpp0JKKYFt AC,j�@n!Cn߾`( x�Bٹ*'ߞ#�H$ڵ ...\,\nih8,,*Τg'L[*e.PVVBa!X �`޻3f]LMMggg~Yff&>C B#r}�u7"U׏u9fnnh LOO 4"%%%�h8,NNN KKKDGGё_Rd]ibڲ.A۷UC'ȱ_(/^LAh߿^z.AؘB�zvvv BWRRB!(  O0`�뒴P'(,FF{i"|װQbذ.A`^^}.G(7͝J3/= w4{{{֥2՘ B:}0p!(?چ`C~� Aϡq LKK ݻw"`4!(666Q96-- |]tAܹm ƞ={TƍX`@R 7?j*&\?Q͛xƳ>˺ R`{qi>)zBLLJfgg㿬O�<sK!E?@ VQۘ;w.ݼI ~7B!hD,,,{n <_v]̝;geddTBf!XXXN<)͍_V\\s"==uyaÆ.4`!pxGfSebb]vaĈ ,\W^e](A.kA`QQc2zc;w7/F||<D'11�( CP�][nʲPDGG.MT0`�Ӈu) `6oތ~[eYTTBCCY&.]¨QXA`!hnnκ$OxbeX`*++YgԸyX A`i>PssŦMTxPPP<D///֥&d^,usNH$~٭["++uyFI*'b!hjjʺ3bĨ?>._̺<?K!jPԠAߪcT*tRű.h=zVVVxWYB0|o stt}uӦMd]ud2f̘ A{1cT۷Wf]A�.4 Cu(O"`5ksރB`]Q*ɓ.̺vO<Qy믿6;;;L4n[l/3g+֓ 6СCw'OBT6BGp!xV}ڵkv?3ֻdPѷo_\vìYUP<x 6͛8uh�ٳ߿?RH 7^`ֶekk+ SBE74m۶͛�ZULL pB֥ .m/a;w"$$9:uJǩSX^o1tP .t_Ϟ=_cԩ*/]Yfeeea۶m{nS?(J,[u)DC Amtjիaeyyyxwqy~0??_4Hp)̟?.k@@A_aaa/U0o<~)E7_wxXBZA!؞n@xq,iuF HOOrq "| Am uջwo8p�'N�j:c׿=!lK7H]~lܸСFs7駟J$sb8@Ag֭cwލd҉J!ؚn@p9[7(ɰ{nt,&4 ԏwM ޿~)~zv0Ԥ.P?-\r%jjjN@ uufԔwv/5k֠o߾!d0!\7H]u) cϞ=2e 7HLMwAVV۷$ k׮e]]O9pssCZZwe](<x,$''#??YYYZbΜ9ؿ?zzZ+Wb4hdOI7Ԃ1}!Ͼ #^҂:_S͠F>On ,AQQrssBJy,}Mۃˊp}_lNPwtS sPZp`YU"mP֢O<A.]еkWHUO0~5LnCectٷ<O>ӧOQ[[Ǐ ϰ=zN:cGCa-zu Y͛7#)) Of]JgpnfI.ǺFNEoG \ƺ `!DG( !F!H5 ABQBDB"jQ$ !D( !F!H5 AUɘ=;�ryN7Ri|}d`r ׇ/Kq؄eo2FԸQffz||IbPnO Qpwl>&hDGS6קT*}f�hshͺ \lL.4U_n9,JpqlܸA.5K۪J%Μ9oo_>�D>}lPTT/KMM֭a˖H7.ABQm6޾!Z$Hzfmɩ?lĚ5K̚%1L+&G ~?�`Ѣ* Kpks0{v�ҥsP>22LeHֻl4bc6sS zMssvpu@JOP*H__/Hq�~G/tDDl߳|&-RBXZ(J&cժ(,iMTvRD;`jj2bca޼%*C#? 2$$0sf00+7븹ybY*0 2ƞCZZ2֢4g/*6n!2?Xl\\ 6d㆘yQaSTTKHH!:(FLLtǎpq9{6U�Ǟ=ظq;dBD&&C" $d-||=kk[DGEB ~~\5--(ZZ�HL"=?m60 SX&KRyxx{ w},YlDSΆUoܸ͘<<[g!6vڎxz``~Yk״!++y*# '93iim eRkbTe ٺ ԩyyBII1R;x 9D)-[y`ժwwO(eHKKFff:bc5z]P###RDDlj�<xP[[`2uF #2Y?naw۽< �NHKKFMRk D!Y`P 3gc WM*s&8)J͓\\4{~y :w1& &'L@FF .\HO[(**PLVVי*di;j-n5 @]e(CE;;Gdf#7wwagn݌<'OLe(,nj󑑑u>s{T&SSU|Doo_ D"ǰF&f@T޾\/\]=T(JDXE7e W̙xtA!(uȱ8s8mۀ՟\& J?*jB~^V[7?n bѼ,?ɰsTFM@U U.�`mm !!k}fyz?7:y~y[c>}*n~@,Lua+Qc0x|=6"z}E؏vV\wСCKip{TBQx :uĺ ( !:Ct֍uj w˽ DԪѣGeE !D`bbº ( !:T*ѽ{weE!H) !V]]M!Hj ( !:SPPw[+++֥E!Hљiiiɺ( !:SRR:ABHݻwCPyPyoH`j.Akʊ.聢X?۷o�lmmYBҦ+r2*Q|ZWUUlcc/gw!/kCWˡˠZ\.G¾Bk%&~ܲ^z}O5ܾ}[!Hsͥ$SJJ �͍u)2lxO.҄k׮�<=}� >}<d]! ׯ_ `ب<V(K"4P]]T 6u)-2,//g]!L�1bRZdp!hjjrkF gϢW^`]J .Ύwnn.r!( >}o&R4b!XH̵݄a�[KшAtTUU._}ƌ޽{.E#d%B�$%%`@@CO>=z4866uI�_}zꅗ_~u)37x+Wp %"j'OįE.U 6ǏSSS7|ú$BD?)S.U 6`ҤI*B뫯BYYBCCYjSߚ5kT.Jѽk׮ȑ#5kȺVP[[[˺x"/_?>|8vź,BD޽{xw`ccu9mbН �+6mg]!FOT"$$;vė_~ɺ63׏۷.n:dggonݺʲ`K#(ٳXbA\$9F�0p@رCeӧ1k,.k.ڵ &MYn`,]Tӽ{֭[1db6oތ'N`ʔ)Xv-rB�hѢFy.SYY/HJJ‚ `%iQ �ܽ{(((PY>p@| !BKݻk.IfN!{{{ݻ PYiӦaǎP*$D~G̚5 O>šC.�#니-Ʋe0a%"(xxyyoʷ(B�~gYEEE2dV\INA>3cѢE={6tJ4!�UUU|W^%KhR_|˺,Urrsse?iy???,\P��uܱcJJJGc]ވ29?#v؁&װ`8;;._edffbذaXf YWAΉ'|!�( ())_~#/_W^yuYLPWMM >{uƌw}Ce].!m۷GPy.) ***pa>|M3x`̞=[քSjلhKUU:SNł `eeź4(ըѣGq4=f̘)S@"<x��֭[z9p�݋2XhA_J(5p18p�rMMM1ydL6MʧN† mEEEaРAw =zFII |||GѼv([… ovQF!((cƌx3f͛7JKKرcky?B nܸ={… jױG`` aaavwCCAHZ#//{ʼn'��o&̙֥ `;8y#@)6o 蹭[Gze$wU9r.] z-̚5 zb]Rx|wjO}⭷ɓ`n6@)IC[nn.,,,0}t055e]Բׯȑ#xbM8 @dddۤ $@ݐȑ#GEEyiUD!#ñcpI{{b[3g ..2 ]vkSUBPΟ?cǎիN@@�BCCYуt<y׿PQQ{{{[2e YgT((??=N8BѦmP2ɓu�`2e Fɺ<E!owV\zɓ'�pttD`` &MD_kӃά 6 �9r q'N >>ڵ+o:BSN{6lBYXѐRĹs_уuDaZ:75}a'Nٳ9&N@<3=/mz]zz:=nکH{{{ i| Q‹/XBeZҺ+,mH:6} \.(J<~XtݻwGǎF{iT[[jt;wf)/~熚a?di umԡ0f2i/Kڿ#F!D( !F!H5 ABQBDB"jQ$ !D( !F!H5 ABs0{v�RSEbDPГH ƍannD"aR7#1Q � .uz …DGEB GK0 @>ɘ<y  CB Ni>DXԱǏ#%'x{ɩ?�ɩ?obxlã/̺4zRTT�R䰳 �\5k``Ȥ8<-["ԟ_ w1}ٲu 4�45s(eX>2kk[vn7UuA?ƞ={7g?hkٳpuhq݆nϚ6~D=XΝD)B.i΅ -[[?\'EJOP*�B̙93NNiXr 77O,^<kNl>xyBB pq8q&&= CxxbcA*�~{(DDls . tPfgGl9}ҒZz_�(-={"qv}�KHHaiBQdc<jS۞93ZْQꁻ'�a�_`?*ȑcae7n�F!##�QRRݠT*qq,[Neh6ulmhǏF-t >@];wظeFD"0ryRSeX317yKTϴ̛߮� A~~�ʕ� ֶ_#JJ1c|~޾*5ْpXOcx3ZfIA�PΞK %sry22R(mХdZPeYP^{F2<s-Q[9J%RR~Nwk?o HЧ Pb@!gX3Y7nɩ?bb"NNH$bϞHU+CUpK_09.�kqrχ7n59WՕn$slvWXlł [ʪ7?瘸=nY P 9bժpw O 9p^׺mD&zaa5wn# Ti-ߕwT:aHL"++CzNJEE-?˟PT2ay2~2\xÇV9\?X ?օAT*#9sQ՛AAsAÇ}55 R</+--iުU U~uϞ矿p!)0!@gw`9!ر�?4c|YSΝ;n &]ȑcq玼iªU ūuS!<y ?5k ++ܝ r8 >OlZZ|]uwKsWoǰF|z7n!&?˟X۠)ke6Y3u)i34ץ{\,Aw jp܉GPR.�4&:&�j_9# AS !F!H5 ABQBDB"jQ$ !D( !FiZ�9i Ee5ޯ2B :t�\z,_qŠiNӗBP!DhN"jQ$ !D( !F!Hzs_$Z����IENDB`���������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/EditingHistory+Links.png�������������������0000664�0000000�0000000�00000101210�14332737457�0030077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��J�����t5���sRGB����gAMA�� a��� pHYs����od��IDATx^ |[y'h\6Hk!m,Qb[##;Gɤ4us[Oo4I׸[6i6m&I:$McMYlHk)EF" qvsp�g{y7px^6KDDDD W~NlsYwB(90Q""""r`DDDDDȁ%""""&JDDDDL(9D77,-tϾ-5'Qڱ۟|3߷a[v<VT^S6>7/Ng?V<w~ͭ'Jk[ޏDRpD>&c[ѷ?x+4/t81l-ޑFK]-wގrqzs?'53,f_\vݷ*m%}D"""'Jvy|kR-rgySWped Ϫ5JWaT?z*޼]$hῼsy YӍAsN^yg*zx1ǁlCo}c##}*!i}07} kԑq|<DDDDsk(]׎gB ٟSEDDD*&'nyN|f)޻v~~~gώbH-|feAAj|m+.Q;~7޵ w5Tz㓧oF}m o3ګfBPנ kF 7mHokO,^# xehO\`͎UHuÛ>a?BK8fqNR5^8yOwW+p\R6޵>>'JadCqO_[{=H܌ <գWۆOǚX-ZlHM;lWo=óG݄=q|.<_h`R2kEbu/>@=z.| HՙU/{W0&G(D]ǟ7sP'*՗|C" v|=ipc7&s_~t/z+KjT-{nMY5_ď0Ŀ5v||oY~vA񧏫g^k xqPҭ݈WG?y"q<Q )w;Ase+N:e~I-"3(mh]-~؎;5k߲4Ao7ž5 RkQ)W�8pO5X5H]-2kP2e?sXn|E=pLѲY?dF{+64jԇPHҶM'>Iui<5mC]Z2Ȋq*zϊ_Ƴ*LZ;0vӑ-LeO<xpI{.wL:6\Mԛޭ1B؄[5g2>'@.~Tʖ@�.ĬV/߉ή.hN+d5_ՏUGe SxLB  wRC'""QD7&ɳx ՑJ}WJ9!7K=Ȟ74RU \'d'ZGqaO|M.|EJd7<YTzN$w,#8{iZk4q#"Eg28z~20x>A$vЊF` ͊WNǟ<j[u/msgQ.I5aw=wע$݈h@ǥ,ΚhIc{nPQ<?hNşY2"YH*q?j֙}GOMnY݆wm|_4M=p Ow6cՉЄywk&ϼxߏ5ߪS}RwWqѧ:"@7 cxI=Px^Nn?uHM0~ԓD3(vn9>"-L#FnnGH R=xj9U:2wo]BvMHGqw.obj<)gNs0\""UDJUd/ц-xm:sYY߶iAH=P][ú/\QV/}OyPF}j?^=nӲ~|oo}~crBtZT&:} &' 8Ջ] g;qtwm݂sJ~wظ |&<wG"""eO<oy\=TG6Z,R7/7-+W]w:z_—ea:=`6{[3qquhI$м ׇ܎oXM Ѐ[_&_7ڀl?6<ǟ #^sxl}Rmd=N⫝Cꗥ?Vyrd-\]ʫWp"3r<J[&TU[MM5VoPs9(n:#*TɹXm H]ۜƻ܅6,SpKJlIW'V_%WkfkZnŷUGٚUmi׈+_?_>J02/2 -x˱ n+/A2mƚ{VbDb7!\zJ_8'OM'""_[f)^SGٌl7ïg e>3/5l;^8䗈ha'daͭ$Ixylihc"9pi3k!$""Z(ũBs\t+ޒwٹt*<5=KlhЛS=yfom.'5:񵯾%c&ZД|毘(S%"""ZR8G (90Q""""r`DDDDDȁ%""""&JDDDDph)/sFDDDD A) ވ(90Q""""r`DDDDDȁ%""""&JDDDDL(90Q""""r`DDDDD3vgaܛwbh18 o_6KD9Qzy<{,Gǿ=M߷vԍEY.�z7%yK>-z]ӃfqDvakxw^4+8>v7iwD) O/7D5Q=u@Sv=#R[V<;z/YosrDE0\-u݂97{%Ա{'вR?. ~Txh xG2a|3JO="R11>qsxFTd/9 ޳}GWN%mԉHi7'+oğUVvۄ߹=GO;Gu`-76bi3qq ݔ/lϝo˛_yO~v\wz 4hoK3m7׎]ij_I듢ڨď[߸W.'w>5mط{ e1۳Wj޾9u#r[Sb/-;z8}`ԱҸxMo7c8ُ:^b[VFMqcvʛz>ZWc2a(s =/ou:MףEP/5cbv<VcHzubKkAϏo{v?=9҆QX1?f_)  ɷW!Y?XoMIO:pb}Mr:^Z9t ^ITuk񄺦-ORcPY%55<.yVĆZ =.~o7ybsx/O57M }\ezj<k t] _}| gтUJ~Sc[׎yBˌc,Yg&0;cu5h^QT"M؍Z=a'7܆{6*ˇ>cpt>uμaXށ:>umk/ux݄?ygVMD%{XW�UV`C|%قb?ԄW)?{iEo!|옙te'j>�j߿Fơ U$IV$߸7ܩuC!r~rIͼg7ޢ*xܧ_;5zG݂m{3)>Bڬ'sb=Q =|";mrj/OȴKOV7޾C?QַgO`6>ޕ؝\ k ggޛVhҎ5h)|d .QL& ?&Hއ_>UN+e_V-8wlJ)qm�g ѕ[{Mc:jWO5@ }q(cVZd$dFQ4^-kR6z-|jW~|MpYvM\$\-:s:쓽]{6`3G?uO<lzF_Mo.#-,IDa;­?֧+w`<0՛CsrXW <%g&lOWۀRU?Do]oωWijď= Uh)&v0و܂߸WXj dQa]=z›nCJn ے~sصRo[[:W.*_-XY]-<11Qo oX]lnH/+Mުr!<dju-Ab~mrΜǧ1EJꆵxD_:'+ q>'q_joI#885\{g{;~/xMD[I߾g_?+޶7" b·J,jH5R6TZ>lo5ؔRa`wM_Cx5]ϝAo%j߾kGq4%hJC6p{/d->_9km%׺4~G\Cz'SNQFԹM`ѾrD}ֈDolRv_PWݛoY&72$J8:ٛ[JZ]9"xr $pL$,v ] N󌶥a#HZ82ɣ;][ <xIT* ˬ*4]5iq7{Oӿm=ӓ;0mfjJLNDl1#9'߲͗|ћMM57WL3pS﷼xM**z[_݋ '*1uDwy_zWlSFPn nAxϱoM2ŮFĶM :޳FZmMV]M",wORd*4cSJ9(p#dDlYOx Kd# 4vEXEsՓe{Ҽ}9qZfTGn;5wչJunb$m zS[_|%szT$W&l6)* ~?;<$z ᄨEW<^m)/||m8w׊IUR .ֿ̈pԻJC-})8Ofd&dh�;U55kq)** 8zu 8WVoqjƲIb۶SÑ}/+0۲ey;.t+^HGtnk^zO^ݪ_WW|CbfkCc&+Iwܱ)Y#,oXOl'빒gedx0<cnz|@OZpUb[8\m3xSɮ,uoڊ? $y9D4#(Vwq(l29ad]*$Put s" bl +o] z MQc%(v%$٭tzHZoh< vt{6g^с  1|ιhVBPI";r?s615uIKq)M{k %eO07|>{B쏸xW_&*$VK_Sxu1g9?yޖqU:x0y:*NXz/ Ka}8<% _Q|s?z oR|X8cSJ9ۧL/rY ?Tl35}!$Bח;!Vtyk{uhVe[954v?ۋF<$üqex< !ޯWl_<nW^Éf-jK~?%ҕx›}ޱ^<^Hfö8_sV76j?a;HH:8P pkGQ]-*:= 7z=H;k? 7޶57p'7Az_}ožoȹSc/k=hY5y/`P 6Le9D>>PamxDTHx5JQv\mǧ̾}~/O ! |c]MzIE% e/_#:OGؤ*䚭wo'긾e{MůW5G2fjğbr=6> v^weq*~L_1݀x(9}I\_O�O6o_bWtytP=Ya>a}anxrW̹-pխ؉/T/o1*^ {oKi>>YLo(-ʁSxlx"Z�$[Xo%] |gyV߃g&_`˿ݎy)s�e]%I48ߋHhpCBDD%c4N<{;CAhv-qF|JCo,Qi8FDDDK ވʀ%""""&JDDDD32$N>a|-7eؒNaYUq_c| ZfӜNAk]F@Ahes*@4泲'J'2f�$ZRd_xDKKa>+{tڈGDKIpOc| Zz Y%v-MŔ}g{~덈ȁ%""""&JDDDDL(9O|sHIٌfӋ}f!=B'^ <Z<9-28tx3J[c^4K@sHƮкZݶ5KY~>tu1.*r;W3vڗQolŦk\"YU`FlWsũc"s/Z!|< s]EۇTzXreX,s g?Wlm5Wg #9)s2^ }=\^|߸mc_l+⽔mR\q>{DtGq ņ6¤$'S^\8p쒸LyGS:QHeq<`"3Z"# ^ 1'3f=u{O@! x~O8ωEڜwuhO qWY"n8xI=mo#pt/zӲkK#fŸĦu5<x4hwk{f +@ʯىuJ&U@RnU.&pe&QBe\\E{xNcާ\e0 mʣ=TӱBQW_kƱM+n 9fQ\ W]Tpu^9KT! J}<(N(^AMoL*, 3C6䎃 t*x9 dс5sD%і�FEQ2^7Ķu**SK\)zkl, {[{DWdFؚwmSX >\WN\_&F 'yDzav֌ίW5-|.U^$c7V]m$[p|m \ۑJ_UqD,:.(SsxQrX$$"jnSh_)'qmJd#kb_Z]lg&z/6M=JihK!_c<.>[y àxsף^YPrk\ %mEwXuA-26uzVD]v j%֌ȮGUR罗ݳ+\lZ7>r؍C'CZ淮r)j1YŠ^Wbɞ'L lbGqI@lnkr+MyQ/s,{ \ q[NLrq,I,)$TF\ʕsy!o]d+SqD|N9m߸\H Ƅ 쓈kh7t̲8QI1 ڋUɏ=.29 $T$'벹,oSLƧL:~|7T vQ48Ҟ:gkn} ýOӜ%JɖtleNE';QDI^';1j \.Tkpk24+rh,fAf,sbY}؆Q;S7 ۵/ 0{}PQ![-U(X\ R|tH۬ĨuUY<8lHx)fdK6гy=w>ݢP9)Dne 6%vL$WYRram72dGΧʘXvuknz+q "ϫ9`|*2 \1HTcU=:va*Y#15ܒzMɀMЉ_{BɃ'ۍeN2A6j 6iǥ2WY'WǸ>+3148(EdAY cG-"[oǻdUEh,Z<<պ8 b<uwaYžxݓ +s/TTcz Zwdo_0n1 ZֳHw-R-hA5Si^qۯT9= 1J-Vx\2_s!:WBMqݖtʦ%szB}pȆN7_OŇ|gHdV3=oe<s ulO_Ykt.6쓓1n ʔ1=sTJOB5o%.XYeA0\L0a@g*35t7()t!(>eRU  @Ma.Shlu{EY'-[kd,U%9~{h~ReSbyZ5eY'r˽ <D cGAqg5pld:10M4y,T˸]^0̤d ߰P̝1戫Jl <L\7W k그Z s~gBkџ'+=T'hBO)FW9T}3dd]WOgZ69jt VQ0Y1 U60} 6ؓfn&Le~}+vA zcT'Y%/z81DOr 8d9?g&[P[Lcvzr74g),.GYN&k$byJ{UC[.z^Tϐ9urrP 3rzl٧a98TQ,V.K^JYWݻްCnMaqZWl`o=Txgs*!A!U}kR;17FUJ=oMJNrw]Ud 0"DAyx(MŔ=Iqe\WfiD%sfP6s͏*\=+ p&z,lg=Jk՝=5G STXNDV^Y#-'Fko9Jωb`>u?mWx) %ț<5o ;cc5$ͷOq߹M4m]7sݻ$$vT09*EڶL@s" ŀzҵrXKM6ϩޕ:LYvFC}* *?zK'(4/a LC7uГXc[})E<Y~NAaBm/9 |E9ʐB;_s3sK𶞿T(Z iJd2~JR8˽5IÓYM#h#_[//$3ZټhoȄP(6̶T49U;.O5\ ,&jS^5M%79&y%@l\|ae0QZ d׻ߵ^4v:iiGs,Nu} *`d|Q~f^&Yf ވ( ވ!&JDDDDL(9=QdES^˾-j="ZJZ }0=Q;B"%ݍhi)66geOUU#D,kTe0'3$Q0Q""""r`DDDDDȁ%""""&JDDDD3;J&&q!cdyr/Ŗtc| ZfӜ _{2: D,㝃Te0=Q:0 ђ"fɍhi)66geO_1h)5bb|VDDKS1ehYz#"""r`DDDDDȁ%""""&JDDDDe&{+%<}z;w6<$etcٴD-n[^^>kI"S7B~FiklsG9tWcWKh݈sSyQ"Sf[C~\!pup?c)OܺS$8ʉMρ! {_l[ۙũc:ytmu<׆!4ʰX _ vkp+P: 9Zt/. o6Y?'Z̺`X{c~{ mNII\'OU";#2c{w쒸l*dq<ַ`�"3Z"#^/nIQi˂'S?sbuO6CxLE'q۔Ͻn1)k\$ﶷ8xiYɵ%Wz3MbӺttuy<nؿ&s8Tb>8~�)2f'BU(1DWM@ww2$*PkwomsS2^NH/m#ޣӻNu?_ω+n 9fQ\ W]Tii .s(dCy$GLU$R8]$N=KC̐rA:xGȢ5hk6;87EAb[:YknEЈ% rՔF{=56fu==K+ lͻ),n"SkI1(]S;imޱlX5#82y~{FTNmIj8+]-UB0ݭh6KdA8Ԋk.[J(J_z] GĂ:7qєW "!V'vd@Jy=kkUB$Y+N?'O̺SR;+ۅ*5ɘ; 7w=Jz%W}d0> lM|B9yIdQ8K]Prˆ̼Ͳ~]"QBZ5#zye= >vPVy<a S"4aVX^,d d-VpovيրfWhim>k?1dE@ܶGˆpR5KJ<lT3r\?e[W.">TtQx!_[w[7lr<1u$⚿/3> ,EFtUe!FUcL1n(,$\l59*Ӳ)isqFYwqХ=Jd㤾fא@z<8YlI+SbXê`1ؖސ(ą$88rJd8i M`#Zf۶Wdl36zݙtZEm؀uۆ`=ӏ>CCvWh;ŢZ:`. ~>:PfpD$v[ʺm,tnQ zofqLMZ܍M y{/y-'E&P'n yɭ=ɕj8o}%2mJ2dGΧʘXvuݩ^gJSu^e̱UVuOCs$*\1;U"QFb)j%Gٛ?/>^˿{OD{d9xڨ3۔_s"n-q31N=JQ1Y=tV摽1jȼ֛nWuPhψ͘y,kMl5u/tUޅzlXCZ$p2/PD t17!<b4g0R-hЂ1};jNECF_[&P(_}zE#l:(6_gTȲ)miPIWlZ O^"n <gʬ'0#w S='dɞֵgz&4x球Nb>q;!t2eLӷPDlk]_[\jbfɏI<B5@ ?UtJ'ho/D^/BdQV}쥬X A"\ʷ+6 3Ox[7,U%9!o*94sIMًk9Dey:/a`a%j; R;xgc#{БoceܮUwsfRmCm\ O7G\UoMaa=J n-.pL"]~T׳u!3aJ/8]&o1ʿFP_ʺu�U$6Y ^?=*ZQ|`8צ0U60} 6S fn&QoqѯoN;<aW_|*D E'�Or 8d9?g&[xMrcvyC2Cs"1%=,?ϋPA"&-;U ZcjhEo?&!s$=iW-wP}sC+cweև5$j^G@RF,Zipޓ$/y)e]Iwz"*ldgR6ůC7lފ Df l09^ZLϐ*o5)[ŝa[f>A9Հ5d2J Ih"ѠS<<&GDbFL+㺢6ǖϙAΉ7Nc1<nڛ[NG)U.jVgUnyJk՝ޚ\ڣWnvq{]fݎK!,(>'z^ ^ɗ) %ț<5o ;c%j8Ho7liSs N&IV6-ﲒӹќṵY'W5!Z\YEzP$�mT?'=bi=Z�5*/e#+5:?7Ħuzzp ħmXaVXu%<%i⦎z'*V_Jc;.SP0.I6iFSsCqfnzRDj1_)) KD,& OmoB!=Z_)(ז IL/V6/52+" m27MZL|][qikhsIT.a-P/z2GM]c7cS?{qc@Ȯwk@yarE.<k<,Nu} *`d|Q~f^&Yf ވ( ވ!&JDDDDL(9=QdES^˾-j="ZJZ }0=Q;B"%ݍhi)66geOUU#D,kTe0'3$Q0Q""""r`DDDDDȁ%""""&JDDDD3;J&&q!cdyr/Ŗtc| ZR9%etd9Y;2/~!DG*{t"3a@%E̒Sl_ʞ(6bR;<j1>-NŔӉb>ⴘ6FDDDDȁ%""""&JDDDDL'L>j/{su5v~ OӋ}h6-YXdjXA(c{:MbN'e>=.*r;Wma11#YU`Vlj/U6ƭsũc:ytU#bcR<}H),p2,k:<tuq]_#h@+?Otfw˭]V(xc\E/sT's'L".UY58(@E޽Q<=7 r߱K]D # !nEfeaDF^vcOfzRSGq'hZf 3#s۔/vݩ\î W(qxӽ5OJ-1Pқ nՠssY͹B)dV O:<_Af*M&d.XDC2W~UIk }s7)ʲLH6 xLbɆ=QǦ-QP\ $|R*wK$J-$ZuK-.:{q]ذ;obus!4䎃 t*x9 dy>DNhKU��PtȖMZ'kͭh12]Z2i]ccfY}Z/޳$";0քyMaz G%Bآ$׋L5@ۼc)fGfOoV:RGL ctITJvzvn,I*$RIqxl)9qe<)ӫkO\DN*<1qSo-vx P2q3pIHDJ"?7=5UyqM&m<e-8n.Ar,-,ٕM]`'/[/ Ǿ2%lȌ,Z{j͈~{Pghi `>vPV,ZmŠ^WdϓYVraAimwvjm Xn}I^?1/n5eZpO^wi[(Mrq,#Zscg.ʹ<vYː\2E|ȕ8BNo\Tx.$cI5_4g| :fY(餫D"F\cK)u@g qgPgud>xN٫,Au-漤2Y%T͋DIpyva[02X%yjl81pRigF<4"- 3F=|P؆Q YN{yc-2ήuۆ`=ou yvcGUxd Bj44 v&eGDf%F XѐQ zo斩fiZs7R6ɖl`@a{a'):Ŋ*[OZO8{fGoHwA(tOl4^ˮ.qT3q%.Py1G\,,VYeS<=\1HTpWo{HԬa`|r c'$Px/y!Z(-_'+{|e: s qj,O}`%ΏOBP2iPCg^CZAK*܊PrZz}w-s(� {hNcHތ'!bּx2ꮵp5ΡP)u]3rIW/Ep/Xsss\-Fz nu+.}vbAvjGà:hkc WfuvZ6Y%Bu&L,!@kJxqK9Sf=cU3]c@Va6s?|ܼgrT\Ͷir>dZQxR @4 j?TZdnnjT!T'aӥhn%ٕi& ͪ2y+ť&V,x�yυzkl x We Zu=x-FIv`/e]ŪM@T~Co͈Bd_wNa?p{o ~d[@21d}XT T^zRNR<{WU`aE5=5bGAqgg5_H;كj)2^SNyeG΍|Dy91P,9oEYUOi[=yA:KE'2w'B[\kӭQުY~5Ӭnmt7.[&-ntl{@շf+I*Mkt2oLgN7n$Qy&[nǨ$;P_;J_=θ.+$w/X~brR Z)\ VUs璜< %h/us(֑KP"@3lT%h}S ⫓9z#7mzTϑ ]ܭ\ ?#]Է>9'QR<26eqntW}~p> 7+6Cubo!mSXs~ P\kꭘ!2'TbZsULϐ*o5)[ŝԛT' JχѢcGp`LPeB.BյJ<2[~>gd`}7un&SƇT9@xĻonIph V$Y8~޶*Ī;]ź&׽~@ZT}Խ+]K۬ۑBsSr}57V2*ڭO|>7C)jw:au̼J Cm-m7"=1$JچucaYIAvn@)1ISV ҿ$Py?*EL@s:bt ]u' $6sU >7@+%HVܬ%<3SǔG,฿](t;d,P⦠tbT٨vp}5Np9en541V?a)ڃhޚ$I` iܯ=Z_(׊VȾdkeݿr=ly?_榒E"1oťr鋍hpKol<%1_ p\ebEX!)s6Di]~z%w4ϥAΫE4OEN0TQCFg'/|"kO4,?q荈ʆCoDKވ&JDDDDL(9=QdES\˾g-j="ZJZ }ũP=Q;B"%ݍh)/TeOUU#D,kTeţP'3$Q0Q""""r`DDDDDȁ%""""&JDDDD3;J&&q!cdyqۗbK:Uñ,T ͌9%XetdXY;)i!,DUj҉ T-Y>_0Kn,D32HCF="zG=7eSLb)2aZ87""""&JDDDDL(90Q""""r`DDDDP?aW{̽x3ߟ譭,XzO&<>i @ oNGy :b_~B`.N`@s#hٌf#2Ϡ>x<_:nY:և˫W2f):f1_3r#Y S1wAqc){rZR-ӡq{XY/νUU$v_1e(@9 B.е+R6?lo([_~n?)Ti0)D�Y58 ıW xvgM&d1``D%dP)-~ 3Y%1bFZ?>3~1\g46m!?F^glsT&N`Lgw$ik8:D0{`Ȣ#-؃AkhVNls@(ʟY TaŖibPX2%sd"w`T$<f˟x@}(_A/ '{&ئ@6Qg2f 5شeIDPZl \+sTT !4.L`wkAj73i~s (J\*zklL-5h Y 쬿&\乖aEe<Mms-ˆ$ge^'B2\.IJ dB\>m1ۜ=ӯVvbG"lM"+}nnE&=h_QdI˟ }2A2JeuZ2VL|Nr}+zb˟j$T}\[lêlt�[Wy寧Krb$׋ 5ZDl $OA&[YV䱯6Vy;G]5`Y7.Z*OT[K"ϝZus.+"^}'M-}zqHyO^"6^uU0ϙϰCPO � Ժެ@<O&g[ɂDsmK`lEo<;Q 9*,χw]2 H5hȓVЎ"XGTr'DJHJOh>|Rz덳Ƒe(cr!˓]FttgIQvCൡWpY\W^/TcWc)NŕT??�x0>K~tyZ<ؘ SBbF üHTZ\PH:QE#*~,dVci|X%W_[eaWUe}NvWڦnmvWxm\w-wkU s>PCiρ|P@Dldb`2smk>E JZu[u>f-\ IPv)JbGܾpO9n5*P3IxCrq!2o2&@%]c6!7Z=B Cʟu:W>l :[(S'˞;Tv**0?>.VN5'D{UŶ]P"e:}RV% jzhDI%Uju* n4 ^JE.0V [9&}W�kͱ]pa6CUф B΁&*s2Vs=-:|t0[`Su#s}=EΊPÚN|r 8*PO)yL$u-|\hWVͷcd*CaqO-ɕk=޾s"?!'(0s%bHs)R89bk,-"Kc=ԪF|Tdz<iDI\ oaAT7 [~r{hMM:1հ�KK!ZX%${ް1Y" ~M+g56$T>G%^ٛ6Z 8+rEuDֿEϟ [ʺ?'EM12κI'Q5LV{0uP9VomBbʟJfDz1C PJY7!${C"Omz>JTŹs[M GR] fSu˖3 Z)еnc�nSin{t1d<f >P$I c9dƹ.Q|馒*j'g{>(wc%9Iߓ"DV3JoՈvL>=4bO  :>\[o3PLNxsTZY?oeJIrP I 1ClOL=.bziqDIT@.M kMb1II`MRM3qӛ@({ &}WAUf#t $U2 CFbYvc ŝo \uORoq!}lZlX"7Dx=3z"ՓN0M&6Uj ê q<x\$W1=)Ɣ{$CsNyGy׈0׾M 8w{f\O}+71WIb}˟o%j>W_Rʪ07/LD)אW?^}؟oP(]cF1h|'~s," Gʞs8Zva w6A~{W,x8)*VԩqUa[sRE :.v1p]ոV*RpqϩϿoj^Cb}`)5Iy5|cZ+Wnkۦ(^׫DnS)5:S~0^{nWs:Z 4vl ?�#x 0'pUT /}Ǧux�[<veXezZb]2i]|曱F,~m:^ͿD3sn;n7DU, k =h_sk~&0*{8>w`ǼQw0&S7nu|Ʊ:}#ܕ_zan\}XIw&"f]yFò.Lޤk&4\s#ZLz?u*Xf)_X纯o9jjBIH5ԏ^űa9_6.XSRY딥*C!_2%mg1N﹌8W8z\G&dpꆷ?u|?Hp&yҋͲlaUz[Fx$玏:byO[2H3f~<2Z+`^tl^WVrPY\?:~TjF~+_ '!,/4/&J ͜K qJ9bEXe&+nBW`"m1P5<ަ:TG5e=h!b4WoLw@b"ڼ+21?G4Q}tdƸũQOg hވ%""""&JDDDDLʞ(V2"),D3k(jYVk|RWYfN1e懲'JwSHT_0'ywcbY&ŖAʞ(-C+pGjYש)i!,DUj?8IDDD4'ʀ%""""&JDDDDL(90Q""""rQ61|v#ͣDT.n_V-T?\rI4R6i(`.s `L4Cdʚ,s\͎R&eONd1@L4+dY{,\ͮb&eO_1h6{n,DI_%vͮb%c[7""""&JDDDDL(90Q""""r`DDDDP?aW{̽ũc}H5IB#X׊M bL7ۧ!=;lߞ^PV p.N`xںẐ{ qω7m k"$vZ鑟}gup\/5Ƽ<fEűOSGЕ;gOiMZ}H?EKo;͢MP(,2&\kʓnLx?P<PBix_cm\#]Z+T6in0²gE2|js V4t2peh]5 $:D6ٚn~(V<+t^d?0**tڽӹ5W+B2}!b:ߧ.x۟ByB6;tT./qL֏#*ІQt~7AZm9b%-* },R:4dK-kБ,"چ$6mӏ{=IRl<P܏3"$Q6F"-Q㙌Y2k]O`wZ(ͺ `oeE0ʷ4Jd' @Hof[Ӣ$*@nVeTzϷ4`w"W'׷q՛\Y#* d-apEpj* de,Vl8*3KπHdaK�y۟.]-@UUW%ɗ=3$q-vT{8aUH@E1\ɕY4[k|>Vi3K.*YHav⹇F6ؼ TL<߅ E'< X.Ŀ m$J6D 4v4ND-Zs(+w;mp<Q\ L>h V1W#[[Z s'{U![mղ1Ne*J_xhYh7 B&[lS7ך$UwWD|l=D0392hZ-kE<&y՘eCv8Z*QO Or|N3$+<UA{tB]E_Ci{'u(|eFW7PUN|lR/ Eq&DYK[cuLσ;h^/BEs ioI-U,jQSnOנ,?~Z(QX+PE]vױv8ح nsR-T28?`7ӤZkV,El@l;~BmŻm>UZ{%*#,퀜KH`kHّtV#8$&'q \xBVԝ;96?92d/� ydo=fhcYd)3G)LnFuD&t Tb]_\342++Aq^ML q,2[_6X\^/c<a+Zm]%ZQVr=t{3@ 򹩄$kW(Mg _Z(Q  9FoQPW]EvW]κ \zH ԧz)rK6}W= Lv:Z-f=jdAЃA۴j&AQGQ `+H0I8\sT'qF[s,[ U8I NפgBa/hyd)e`(HUv &j./5`;bAIS.1ŕ.2+TۧNo1׫tyʈFH=)rQFݭun`gTr%"Di񛳡@g6QAJ LEWhجBZnV +L&{D)c|>/@Pޒ@ЖF ˛@*2-p% E)&[騖/<5%ZxdF279qתm r '%\onaoD JAQYr|;iA%F&Tl^L)R+jMRMlkD=^b^Zp$*''6[7~XEb27ekPמ Rkx{]-7Eu5f}10gDIc|=?W8*x:Ċn{;`+3$pB T9EvC[sl* y7M\Fp(ܓ"+٧$5,L$} za3}U ټ3a_cVżQ$2F͋)4l) Èdz{D#d`h0r>VDMH7 0zP%-zs7TɎ!vZ邦LwN#9* h*~WA^U{XK'ޅ P;;.jޅ) hӦZAS%^Tj~`ZJKyY~Г0XSrU=V%,吅^X yud]e)%>=wG$Vzrs ՐJ&HWJeٷ8A%<)YSZ׹XeV&D{q}FAdo~KQU&q=EPCV?3 ߧRhy^t#FqN=ZX&QdMk#-3|טϤ'H$*F.:'N.r8B0+Ԫ—k-J8(ZWleNu 'QjM\CRCOV=8 W9`u쮖7M&T`'&a0SVţ*9[:j[L%::Fl 3kxΧ8~rzE{p~N\ԫdQ`'$nw%rtʬ)gğ]fqWM޷@yCֺQ58Wͦj"QԵ"Uf %{,_., %BVCX>y�#h@!,63d+뗹gp:{̺̖Bί-/& 2w@yEP]ʹ!ݍ?ɠ\wCQC8EM$_TJyJ2[<ye,-;QRR+EQC[ܦ; E%-0Xb9W Ӽf5=̢&7ex,E+g h1YCoD݂z#Z86?q荈 (90Q""""r`DDDDPDl*̱\>šgeYGD.⏀\;b&eONzNȲvwc_Qd$]ŖMʞ(-C+pGjf,[kTYeKQj٤?8IDDD4'ʀ%""""&JDDDDL(90Q""""r`DDDDDȁ%""""덈h)o&JDDDDKވ(90Q""""r`DDDDDȁ%""""&JDDDDL(90Q""""r`DDDDDȁ%""""~/6wn4L_DCoDDDDL(90Q""""r`DDDDDȁ%""""&JDDDDL(90Q""""rXR؞6 DDDDe4'R♏3mEy$k[ޏ>CMxf8QM?Q#7[w{G-u y;g+ɫ|,̀'J*iy_T=ėRϿz KWc׋7qs67q]?6>ao)57s8o7YO~+|>w6?<ho %{+;qYem5W~s_̇߄~l >v{/v.1GDDD(}<7AusB&oe'{~~Rݎ'>9gR~'y y>Q+IjUf[3wm_̌W�8pj xTbՔnW# ϛ I*UR^戈(Q;n&F~܋҄<x{|gL%Zv܋Vo^TgQؼJ<}^q܂L/^1ھuq Q7}_lǃiY(l^&J ilH%jk'ޞ^0>q<znm[ON|螨uKvkWǟ͈$w=p~5<%<8@] 6b0k҃-+LQ3&ڃC黽/v&'r'+DDDD!(mIWUjn eݭT;!~VݫITʖ(5U鷪NDٰozjVA`J'-zyS MIo?Ěw#­mVtqtxM?@DDDR11>qsx^6Kk[񡷶`)*aU\O7㮶:DRrƻv4ᮆJ$t/\6ߎwlټGy,>^l&[Wq+Yp;3)gGoGE<.=<>^|n5-59X*-ˁ;g~щڝxFoRJ4{z#"""Z`(90Q""""r`DDDDDȁ%""""&JDDDDL(90Q""""r`DDDDP-6Q܂RoDDDDp荈ȁ%""""&JDDDDL(90Q""""r`DDDDDȁ%""""[o&&q!cdyhfVބۗbK:eUxVN\74D3kN֛ _{2: 49xM]:,*Iünhh~){t"3\ߋfɍ*xL+k#5xRi\c4=QbW4\V) 4^? FDDDDȁ%""""&JDDDDL*x6\ro]nRf܋×]C)̣JO/Q՜Dyx.<v:[Qg~!{y_ Fok+/AǵJU?:u<<<bGo;f˻e9f[]F)t\7~\.8u=T;k:ﳯئsrxa8kUJ(#81y7sأT8:z̢ћ7D-\ǽ[kǻPh*Y;vI"rҶ%*p<1KF jX?܋^N"6擭VnV i/<NyA&4}8X1ts{B1CopEf[+j, Yfm{b+q-5Uh Th3sJ\_lFY=80TѼ9Ea[TKM_f|ܦ|'q\6B#]! |.C 1,_Y+x{MXne{D~^A_],Av_:3~lkE8 MQ5އkݷjfW9b`�ۯU^ ^cR`>"lh~]VqjYnw/B2oz Ӌ  mW;V5"+':5z?/W3{.8z|U'>1ޱˢkMT?bcQ'>}}װ9'pcpZ7j:pcXa*׀zaP NV𣭹kXÚۭU\?kn*N&P$yCaMh8g{+"*ã}f?'s 1y="2VUؘub~)qF1,\^:q{m81J>{1WBq py9^1%Coso ߲GD^4dADIwnE;U5 t1Zhit ղnyA64= ΁Rh) W Ș7D'ZCxogaዢ1WuﴵU8x:8D[ϻŹ: Es̳gpa/'+dOC+6Onh?D 82ܫs?G4hKY=Yqk&-xNZT*\XtO]/qn,X>1{[=3D6k ڪ,׆( m(.,y϶`o+оR3L w]$׷8zq^P V1hzq b;{<=Ea@q,8E3hYl3DXUP9[RU> aYt @:U#^p 쬿Vث uj JN#>1Ytw84.s7L͝?GnUBݛ:m"1[ fU@~^]ɹ7v ְc#4О7s:%ɀ۾1\.2<!.ܫs9w+Eb$du&aΝGӭ]wNܹq5*r>jTsEeԮ<UnWF&RSj*RXusL84ž A:i,|EQ[)ׅ- j;18.V]Ȟ#+6Y?Nrx4~9WuuiљHLBDt"ZVaˮ1 څ GEZJ ir]^bLu^:9?}8(I'% TCG~ 5 Q:9 VE (K]1V5Qi,JS@TstETr3]v[b;T"gTxUY˧Pu[*cW.[9Dgz=[(-:s(gQP^ϐo˺ݻcɧ=׹@LjYJy3@6б-}Bg.وvLђN9ocrX@r}_wb]CsI c  :O" 4e4,m~!f`솹G'J9>BLh]}LK=L~•JzJ#8Yݵ_9Hn(N^{Z}_7z]G7<*ÍQűX {T˷@P!kh<:7Dzc:fދ_fԐChLP`x$-#rx5k4Y~.\'j6nbn9\>K.l*[^{P\,-0P6Ǩ�ZB뻆λ6Q- Q2<";YTy- vf9U{Xlo[\ܺ'Tϕ?_@P ouB>orT!i={ˉS'f#@cS`]| RIZ5W&c)'݋t9z glA1xN0q?oS*'u/E,RߏB "0TS<u^ '3ۿL%v^&:Jw1OK'k.Vz̽ ܈k41XMbKY˸؇cܗ"ꆃQ>G7iap~46޹,sNCT^\V) i1y7Gh>bDDDDDȁ%""""&JDDDDLʞ(V2WukxL,5NK]kxL+K4wwwc`klnh{RDiYU%j];RHJ^ok'BxTfX旲7"""덈 (90Q""""r`DDDDDȁ%""""k8g12y<J$eؒN̈J0$vY&I3HkXcNDDDWDDfLf</%"""*'J篍{4[zG="""*'Jn}<DDD3z#"""r`DDDDDȁ%""""&JDDDDs(ep9;܋^󈯧W<.;v Y\=)d,~KLs{LpDDD4GmqtE73n-l2 _=;WquK!ߗ,5Co =*YdF+,ϭ"ٜ6K%Cؽ!՚@W�{9Mk64K@ ګͲӷCV/yd/:<}Θ!<q80XWG{o{(,<4z#fR(bf<Nh>I[o2@*`~ũc46!tD;]CNܶHGnX^_  WGwҭrhLwP}=800CiMX>"$̶B5H%RdeO]7N 4Y^P/Mv!Jd_KbӶb&eS׭J{DDDxq,&!jJ^q;0tNwaB$UQ)T X `t\9OR8=!A%$ސu$0ҵyu5扰$@r\Y6O]!<oT;s(!8>t[Ot؟'vk7pyHq&?Hrb <mU_MIDDD4/̓D$!vS<"DzlSx؛4*w롷t [){!a7I kȰAwc|Q11>qsxFTϽI2(f^(GL(90Q""""r`DDDDDȁCJ^ǜhfmYVklis:"""'JwSHTT%iX?GDD4ʞ(-C+pGjf<kԱǜʯ덈h>z#"""*&JDDDDL(90Q""""r`DDDDDȁ%""""&JDDDDL 7"""Ŧؿ(-ez#"""r`DDDDDȁ%""""&JDDDDL"="����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/Gantt-excluded-days-within.png�������������0000664�0000000�0000000�00000233135�14332737457�0031200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��h��u������sRGB����gAMA�� a��� pHYs��t��tfx��IDATx^ `TV%XE'^ b[(l 녠VV-)AP (U ZĊ "%KЪ$V Ul K=Ϲ̜$Iisss}p<["����������Aw����������p���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������HHo*Tԭ٩H|tAAU꺛V|��������hj4pfԨjjM5̮u3p4vhw߱eNE_nu`AU?nyk5וj~:5uMFW��������|?ի]X IFhިQJ0`T)3Y*yb>XEnS_̓l\{��������Йu�wd"Mbgzm#d]X8Uӟad��������:]aK;%-~qC׫v; ڶӝ1x=\k2g-Qdޒ[j%%]OaEBPid}¾q0QC��������8:Y6mp si*ëk[;{cvBfw99*x`CZ@F$w훚��������NmжpoX\5-GhחC";*6���������pht�mt'A-kqcn ����������׹ʝ$x{*^t=/k^w%_ն4uH nLր"MLjy#E:V[!g`ek,K(]7ov]U";v;Y2_NUQ^_w{1,Pmh{{gS eޞ 7U:uŪ {"DR*vZ4Lo=s5ݪnTXyijօT͌Ȳ몬iMvG/Oli!XMكFje s œ̵7"v,Už:qSʖ;Auͱz_&E^{TYyC���������2B9ͬ疈XQ|n(T/v)g̒=J1=< ZB7?} 塒#/4w;Bi#l;l ſJ{B/ ]/:FL mpWa^u C1dRN|)l4O^c|?l~Q(7 -7? KB>&!TfaE >VJ;:o>a)y}`%-avԕZvڭu)e/%~��������]S'AWkii]3kO%8gyG;m9nX=YC.nF<^?S_EwMQw);UCFW'nFB*+ cu4 ("g|(ҀZfGMs_`QKGEx@fH&)rAUxaCx|0X;}|L`uzi'�M9`0zf)g{%4PSFӪVծ*Ƚjcǻ3&SIku|Ë(oҴ98ڪ넕ԁu]'˗ rvVir0z;_2E3ufj%Gp|̛nF WOWMOu7*k[hD���������]6 z凖nܳ64vM4QN䱍=_ }l.MS(pPlxwXjޞОI#ם{5Vn =Ƶ{򺋢4T8bZ>~USWwIzQvlV'_Uޘ)w{Xmm*,j [5ڼmGEm5%jWP] 0%ʵ{u' zO^N U1Puk٤3Ckc CY��������2MAlM4;ʟ .QM3J1_ymjP;TrgPq:-^Qz ,֒*t烏ҲP{ ^/:ڝl&OϬU(YG`,ͺѝ1X~P9(ЬS 1JTYHŃ{rX"Q|j 7-rS׹35DݙMT>~Whw)&;m6*4{Uv:i4Y:Ɲ9>SB\>_B-YT~iI [+UA˹W/z�������i:Ov68b=ha脱MJ8<9Rʽz^b{_,,/5TWEO-*__NǓNhMұIcPNmg(mv }KKiPme]ߔkfIJT| j5Ur;E7"?m25W.RG-U]yiAzuaxYO"LrM>o[=��������1:M6p/<IO7Qb۽hTyj^@W**?`jNp\տ'�<^}Xc3lPC{ڨ= OuZY+Lr.ϝ#UN{UjwzF&۠ 8=]~.kZU? ?RH`jw)')0%lEjEI=��������dNmuY h,0SY�V6hnľ֭[)8rLڽ7q3}ACɺ(_q5)XW524RmoO\JoگWtWt|B˴~ϔڞ h˃&SaVՄ+PN ;4'5p�wrݕ9��������hNmPwR 93_/gD,Ƞ*_qzVA^ {w UyJӡ[*:keY-H nѲG+ၪf?v; TpU6ը]:xJ. ^v6;\i][`W?~���������pt�mS6>NmF|r&+jTo 75<֝U봮miÌvMp_0]Uasj]~+5E#'�hMq{|7^pSa8Ho=ܿ���������shT7xr"9= �؊ v`]oMIuoS968KV{XRKMӴ۬4o*M;[Ꮋ^*0 nk5jκz2;G)rI;ܪNS9l:ڝ��������hA}!24l^f.(r{kьR7[ŖVIUhchOp'-ЮA.gmP>>ҋ|ϵFi`g:BukUڙϽDqwhHuUm;W;)Y2�yrew.�������� :EaK;%垙|S 4F6t#+c PNnd0m ^+ΓljFPuݦijꄼҜ3DJVjÁ>gSUM^ZTmOh7mONǺ"ψ>6lt*?zUZ@A5DaS ��������`t�mP "wz)wQxE~$/2Poy1KhJxY6jjwv7{ם< C ½IM le;ۅ匙in*Mx3ct6[#aT'w&뷵2vkfw&4+\M$ϝ��������hY'6h wRg  xY\\k+͝@q8[;PoжQ`2Mea;^UZ<^�IgiES#q;f*7%<~ &^ˠjVk;۩`+orhJ#AfUkњ>~4~_qg:@%vz~sUJ3_XqV1#C/UIG���������-K�mt'MzNɉ EicԳ&sZ{A<8^acjZlY7iؙݔ7Yeu՚|gE+=YnKkgSΠњ:93&[C&P ע*Ξ.Yyfidv7+ { 5l ]Y֭%׹+(Gs&K6YUMcc}|=Sjr]jʷw00igjleRu_/Zͺ\^7kEy}U7qVf,W΃Mאk=]u׃SFCKUuAa�������� Wfa7;}6.WR͉gG w{V/bZ(?)0C*Zk4XQ)7<Pax nv<y4Œ6*u6>P 4Ky=OG+sVQP*ofOhýJyr-muQuՖ\W{BL@hڿk5tLL^tiSJR*h G/-׾2T/fuͮվmi#RΘ%j~��������L=hպS9q'ɺ@T Zfmc;iAgRi]C6T,Ҕ1y}DJn[:-Ԧ,޲V6WtR1Sb֩^S%1פz)jxw(*4~6W襂 3<]/jKm3>R\;~UmԞWin~GSolU|M3ٿGaSE5۴zY z9C͵^hSKY��������FL֝����������D Z����������"���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������Hn!;lN���������@N���������@W����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������HŝNK[lq���N'[�����dt_)~���{-�����2G bc����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������TUnmln���������AֲwK_7R 9LE7,VՖn ��� "{d8հ˫m[PT^Mn������ 6vHTYkֺVULWѼjz��T2-n uF������mY`@5;B}Q7)7nY���5I;eV@`f]QC<E\eY������8t27@ZoP0Pڵ9"GY;U媼"����(+_wTjٍLpj79������l LeA)*fFQNTu-=@#[ ն5zP]6{hM_ʍˠjze3p'Sm<��R ȳjV6he~;&|VUu9lSplo b)礢ͿחimaWՖȗЦeCֻ9&YgZkm`������D�mWYs5d{6bb LUu6,b+PX[a-Z|bs>jim+klvN���:_|/b=U qNa/LULLഩFXyck`7/&3LSU69{jPY*_W:Ǖ5HӭW(jOU7ը|u>cf����� Zh*hQvFOAFw9b6Xj-eV FVn>lv<=EཪQYuܻN;>vWn7X��@Zk nS"MYn |_JfJ/e&z+4? ?m_[.tήURkpZW/Uq mJ*iUmK}`rFj^d}'.Q%g�����gжIjVV[ TRv8rTIt]jժbU60E˞.Uw6#K9yâ{ֲG V;sm B ��)T[G�S` _FP|[)Zzmn%2϶xؠGIJU2]7VP+ʬ㚦R%*gkZZgWLw0n/bz]ijIOG������(CYe4ګ} *gpsr"z)7/[&] hƈP).pz7"XjO_���t&9CU2\iΐ~mnkTfe8#lRRɏZ^A ?yL~B7'~*e7a+[4厀G ޝP�����Wh{ ֨-Gn��� +CQNK*V^]ѲL�@ZLdTGGsT#[ҝT~YʿTisT(Q~߂�����ZC(VYG޽^ڀY6mSC[j_+`zf~&mB<U8���v|7̹D%VZTMj=>~ jC}8Hd~x=E7:ddRPeRE'> �����Т}m5/O VhEEZAM_>iP͂߿ (*]).Sn7pʕh"nTǁ|m)7-SNMjߨFduiZ52nM`/���t}nx|* LӴ1-nI֎fiiw*f,VmhSGMQ`7_Tx"noZ߫O�����@<U*Wi{U#goW#ﬖ(pS:g"-$һSG].עyg}Rr_Nְ=1j*R%jUv0 ?ŷ.Su���fؚʽuﮭ \}J=zӵy>YvQ{y{] 5e7*p �����D28@kQDSo4 -ԔשJo-WIU=<EUp_igrSr+o$6KT4{غ(} 􍭪W|vLђ꙾��kwC{͚ԖޫU*_Ξ?|^#?6kDchm3U8&?������u L-[h���UgwK�����̑2-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)-dqҖ-[)���twK�����̒:E6o��s|o%�����@H{A q ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@M]*MV(fuEXh:7#>��������ZvЦ2ȅjr���������C����������"hѵ uZw[,���������P!@ Ǧe*cd��������� ZZPag:ϭ4R(VŹr/e-٫m+kp+6ZId}L3*T &<xVhۖ Mt?Y|LS}5e eUL-|{Tiu;K:6 hqx}5Ūy]f bs&mw&^7Yny}g{i5ubպuq3^gk e5.SMiͷb6UNp{ei$oT-{3TՏ:i'e��������C"6oN݆y S,u3i(Іr-Pjt8v'▵ӘgBF]6}[*WMV}nYKk8YKy6|Hh_mi(/^r*+_}uwį{7FƇo^hiz[r_Тz[KC|_ *uֹ5+jʋ%:Ti0��:ց|oKp������z/jвƫ"P]kո/d }QK'Yh[VʙY}o*\QBGj#fr>xzr2-ۦ_Z־>Exn,̡ܲN~`H Օf<lٳR3G\?]V6شX+:E{;8jgOQYb}RYWRrT_}mТQn[@O[_mtI{jJg-\ΥTvS-uyV]XGPF]FTFS ho};TnPq{Z{9:KXK6c)_i [f�������� unQQZ:@,'[2XO(Q+_0!w;y&`V1Z LѲKU/aqZ;LMjj'btqrwN)gz %|̾;C4w>SߔlZ}nue teSGYg\j1\*<_}il^#hf!rݶo2G4m{νdvm <)W(t|Q`{M0kd SUηqT5I2C[y`iЄG���������j? i8=>WyY75q{Ur&{k!w5hM(Tl,Y[<#5i>ܩ$ 3 jtհ,dQ)wo-ذoJ.IrB4SU=[۱s iͰA{߬F 8���������ڶVkH,-[`+G8UuvU]2zd{ܾ}SZ;0O%&Bh׹Ưe $YM]0RYk-s* �����t!{_]klho���h�{qzUߋvOʆե><ǵ1\ƊBxYN CJxTgV>O퀥&oa^ 1 Usq]-Su*7K&fmuڱ'r6sx53qz~Z~LrUk{Jb?WQprj�����_8L'V|W۞/ԱհSmqF2LI9dM_^D'e]`n=ï��~*e]>ES^}ӮͿàWہj{ِ ?4b@&Y7Mהv/P紶d}ໍ?>Q #Tڒ+C;TUe*׺n? IjNWvw.a?oCɫڸٙn^D PaeUbo WmLfwPvMع_~<@#5.|����\jT@?HfSU?UjWiz�quʃ{TFknFɔIiOQجs~q_7Z}ܽ:|Lʑ*w���Yy t=<T*~<Dp8uf=T`"^=,+t{S)؄quaKUld =^8^ DoДQì=x:Ћ5w|sǫN L(+Q9L _8ZG̗YC|Ymw$)*gm9XY"{v˴(QMuMfU|GHPUYzmܪT[78O3MEH_S?�sk#VLjT65���� 7ƅUS|=UUۥiZZC{߷G;jdDJʷҶEHZ}2eZ5\b/q:-%_`_:LWi*|lBoU;n���څwJ~\_� 4uiu;Yf(Նiv/H[<̫w7jɤ<gv9ԧX6Y@9CKT4{H핎 a_UE84hth: -Դ6jWh%7h)c%:rM0}c[cmjmzșmMΤrm|DyyZinXaF5lavրKjٛI8UZ[io9M*UF8>Eϥ`hSl)&�����A.siY]W̲wZmY9 K9#hi3VWtxWbTŭ�o�/6oNz<Th5)5Y`礪 YmνY*-}-��:6[�/ Z&ϽeZ|wQ6ޟ~pih>7 kCC~y*7qKDlg-X44}O!'74)gK,ӊƊB|{<;BKG9su0T֖kb۳5T~[a(ϽXpehk>/ \m=X6_^'u!vT/ Mʱl/?Trкf'!Tj-Ͻ51lr-l-=@%SBK^Ip.�� z-ٻWY?^s1i۽u7*O:����H&<Hהfz+2Umr&^5# g(dߜ񚵼FM}Tt *8 .QY*8{*5ZAgigRˌ8fo${o2eXpyVrV/hhQzMvVh|JʳZe7i#A>Qigelb Qc9G 9)k?GAY#4h;^;-?H}PC]u "4LSiP =W$_��ôi^i"{~.4-aY#-���2Mq}~ד2 bkOhKC?pg];(vz < z`~#t, :nFɔIWf:eu8Om5͛V5>Z:OICcۉuchkCQ`uo/|V텏JywX]V,�@W@Z9:_ءOQP7QҊ )J橹�����5<L鳅F=9{]P)mHc'{'zG:R%=ޝuLk;;RxM˝?fO7ǔFN$ $X4ޖg:Jnng .6'ק@KWTF곗&MU5{Z<D}3[bOj g,ֶef[Z`(��8PhSUi}Xuc#c*kwC7jkRͼ*E�����\z[w&z S88_' Oj;_Pc[7_]FjؙNATn/iRS`qgֱ:X$uMvmS=ql�AF ^5<_cGj@cX|{F: }r4ĝ��h�����֚WjyaLZizzA@Ko^Q' igzP`oJ v h;n IP rn۠DF+bY^=O?Kϡў v+mS_��4A������ilWWP sZj)5Ď8V>^ۀ XuNw6?8^Y+ {zk]vzq uzMZ_LQ3PI W2-z֪Yח x`5ւ6<Rj3 49u\Ru!5nvoun)��tC������k{-7A ;cG.Tgm[_y>t{X&^s%*߮*-t&]4yo(m&9*r[UP;{=sFH 8ƯJCKUv}YkT[f*���i�-������V3e2OmMjXYʿTfgk6H9>^+92mӠ;?;t_rx]פOT߱תm;:O%S+3wS,)m3kXx���Z������U>`z4fBPg3qp֮o2S-W%UM/!cOA5y/PLfze+BVZu zdM{Ɲ?@֪g֪M'SMsnaNOV)5܎kҰrr&+[|w %O9s{iu5ߝ��H7ݬ/A!w:-mٲEt璷qF38CC qQOHQ$B@-:1�LֱˤLk(U~M3G#IXasjkҶS5e s'֩rB=\=^c+dB9CsԸFT)WlS#ʽk6˳͖ +UyU*TtxU)WNضZSVI<о/|HRe,RvxjrM{k50R߭T)NnۮIPUUbJ~TVو^ʹ _Cs"W7_fI(I 5Nw:#(}jxV Chʩe*[m]'vu,+ՆL幹�� Mg7ovfժUo4H.HhDAM- {[*uc��d:r%P(kJByh*JphCT m=,  8J敇6ro -Qa]y6 + wCfcC͖6 ^?p)gh~hbJ%S&ƊB};[C{p 6!Tj-d߶)#JC>vʆjKx(l_hkŴPA?w) 0۰ѴK5iM|-��:te{>3f;Ci;v;zB:"b&@Z#+w3 ��k2"hzf ��p ^P~=}jMuHT[5!u�mK/3��EY\Z`Ò���]ZRJRK'RZ<)sRK'u���kŪvkoٓ4,��@We@';(m����@[5|,UP3i?ȼ{&*gRLbxc��еu�-)}R"ʒH"%,)R"ʒ2#���hTю꥚6)_yU͋5ٙIӴQ[+J��tm]z#tX+7^x}AT3921$f::z$\3jvҠwjW(j5Iuɾݙ6o$5ܱZ‚����O/*Ѣi[!jcT2",��@W3h$ YZ+OY75Q+<BGQO4 &#\F_y@}wdmNT[zN0Xk#UmuH^2W{n̵]vtyoZo^-}uٺ#to]{OiD7hHǭ\睊5I~ڵRnc31MQ_ކdxNilո}y]7������m'P74M4unqz ]^9Q7ʀK= f9s4G g1{`6:9|;|fL+iҜ :Wӡ3Ek41ϝW̉|_c3s�������Avl?EpGyd$z!"V*+_;ߔ3CPFBu yiJOL[< zw=Hrşz:?Z-<Dm) NU:_E/E_DՇg^mZ)Q=ǔS7 U8Ŵɾz unc-mϻ6cηi޵[ǻ2ujyuTmtެ%W6Q}|hn'#_'}ֶ=Di[ Qm+E>^N7Dz2DWoṞ;>]/J߶ڍoj Q21x-Dm)c1s^-]{El2"6LLo=Yn{m-Jqa׭}y򎽕mmA]ۘHףy������APwow6Qڿߤ5w^׉qRN5s^2qN3͑XϮ>':͜瞨O/_kSdq[9 VxeхGx{L,s^N8y0A׸%uiFs\~w*ܹz9\F&F=q/8z 难{nU7}_LOuծu^WSwzb:Z&-9jΨH4?+pk#ӎojmmﴸvnQܹC5z͞u50|;W+kgMǴ{}>[0m򴉹ב^c}^ߧQxB]c~ey$oXm·o oELwuOx{<qzP_i֤j1_3~bitg'ϼ^z;m9o琹l1~v>!aC8������ԡIf7=*fozptҸ2moC:a+Tulisשzk;_:\')Por>u\Gzܞ4\g;ylxl6T{!ɔHu/[WS_ kSZWr=~Ϲ]/k3jLe̵r31|&y^#>M6wNĩ:iZl:=6q4e)/9O2N3ZF [ɴ}ٱ;r [u3|ۤڤ}8mN{BxᗚG4!S"OL}⾖&{m V Y+yj%65y9}IOO7n^;M^kz;jV>d~]Ov o3k5}A{pޗ}<HuIdoϞO˴"|YO_sm^~w{n9KzouǬI|%}+QG w8W>4-�������.݃6Mxɾ\vۧ}Qi/nX=[/Sr;�4Bn7|)g\lm/Sc7qZigeA=U,+}yd_:qMv^K5I^l:S7pxik:\c9#ڱ v}X5ܾey:l3]uNT 2 ~vuؕ8z}=^[[@n,q)\:dڌ{m bnl\vLɶDRk/.t瓹]{#:6t!d&2'yekr,=3.dA;+! ollOfV2Lɵ?k%&:S2_&cY)2�K_kMWnww=qXtytѿ]ϡdo^up#GdNNVt^ �������C;֜ᗙ`N{(ɝo?.sϻBU=޳3z O0}r>pz}AaR][u^2ͭNqz v/_,U]>9҅ ޗ\󬻰nI]Ygza~zt'A[l$<Q-mZܺl֯v%|;u׃/{e{;e381 wn/�ߜ{Z;޿b58LM~~ߵzvKyߜךַ�������!Mrֈ̟ '/Rlg~r'(tgհ|V]za^t2O{[n{͍H+g1\g4:9/}>3iF]ʿ7O[H+(9P0柴Z_lZv=S3:yg&22=g_&%^rry{&zyL2Aoۏ~S.*[句&`2X{tm&kbWv)߼M:%H jah]O=t*NX霟{e>S>Mߣ埽j1&Xr}D%/;..{J7_cۿm~ϳgp b2lNoˋٞRJ$^DM_V~ |;/-_ <oHe3]w=G'в/9=k}D歔MrVɌɷ3cZN�YgN3 Yauf3 t<zж+Yy-^\>':  ?G1j]܇5UfHXl\Ng}<~V5*wnۼ̑sGΑ&?|N4=M잗]J={: O<rc{''skqw/59y{T&:&q_U';Y3=zUOێ.{ڸ(65}m2SsO '&YW(kınp z<NdΞk1.׵WvZ{s;mmu$WO_qM4.񾯝Zud^Ku=\s=Hn�������Ak%OerOϴ*N2 ?W]hCUuc1A:;pF�UL𙣚D0}™9:=՚W}r_Fx7։lI'Z'XH 3TchRU:0fXU㴮Ϯ}V-: /1q)cф庬jrz1ۚsX<|c]7kIY.'-a�1[JD%kYAni{:65V+ͷMzyrJ$^لɺT}>-0{:k`w5Uv/1=񭺴G;~gA5}$ucIs5r(k:sUDx[ImJ\™䵜W6ajx7rB.v;~iUQf~FTKξaῈHO~NIn?A=Qy1-$�������8=�SX.MQ:(i}blTs N�wzE%vƮݗ5I2tFҽgmЧ&4od[mB*}>UZz暛c;wpf|C]κ^+ެGlN}yN[Nl_+Ǫ͹'?|LS͈ ϝ3{ \;js_8oQl3͎[ktkɴb%-X)94EIeڿ>l״}^Vh~]+Uq5j1m5bZ<n*՚Kj޿-Iv@[޿{p^O|.7AO O۽}$}{?ǜg{zo e'Vs=iTckk>�������n4 e 8НKޓO>+á3ꫯv碥e=~IW A)$ϾҺOCtmx]=R?dHFjXgr -:1"9Ho;zn]>7uC}g;sx,3B}gY -*>hv}]ϓf]Yzz:yٺ0M87Q[&N^�������y ZRJR"ǖ1*M:8i6=]=#9}S"ʒښNИ'i3p8Z#L?y&tD%%ξMT#o_5-<K;M�������Z!OgM_Ɯgd_F';y%^yR{ٚ61:!nI-W|:OF+M?+~tJ�������p7hHX �������KhMTҡOԚx2#&:�������@у����������RgВRWD:)xeIW �������DPiܲe%^9JyEhHX- {[*ucDr:,\SڷOvL$S1: Yaڠ3B}gY ڍ7v琎8 2ĝF\-]{��ڋ�-RS @{@ YB}gSxmg;PжS{/O?1cƸsHGWرcݹhҵ�": @,w0umPߙvf3 ,]ug���������@=hsHG/bZi�^ڃ _^xKO_T}t7=h۪31:Yaڠ3B}g90h~UsHG&H8n8w.wpt�h/H%syզˇMnnzy: ots͛hР~OAǡ3KwnR=5B6,wf;h۩nժULs- �-�` @T꫐&zt?IOwj֜9NO �D$M*e�Nf3  @NpO=4gW^y;;Z��Zcnk6G58H{:jE}~Z׻�L՗G>]?Ϟh3 B}g!@AR jUj⿸+V s&iӺ7:3- >5VNxƝs{ q;cq/Pr[m8ъ ?B43wn|%k*SWvgKqf;jc!@ �8"}}7{3`O[nI| 7�IUHAu3_o|#=Xt0,p2 Y·�mDޯcbɦƧ#N^y$5<ЄSe6z11r/Q+m>R&aսGS' \>QZ)k/G5։LN艢ٺ1Z˔;QWVXw~{UOWZzO\R|oKq��@g[{)3N�Z7s;'_v��hSi]}+t\szkNz^ai5Zt.P]UڱuW74M4Aunᵗʉ) ��@дKonԽ4��,9|�� u�m^RFsu.4N̹\Gov:HZekӵ Gʌu{s XGFsL٥Zp YYsUY[n{8o9kA{i -ˑ<jc,u<RcWCy˷W6ajiNWlk>R'2ZJ?1I[~pwycrx_fWp]lI���������H=zЪN/͵Y޹J??DwZpoowۢ9)ͽP7a_5}^ǭߛ_Ye9/[WEyg'^j>NQ]P1[^34e[_'qJ;~˭s*4g3)Sbyt];{;e_3rO(s~Ys~vOn;Ѻ'\{YBOqֱe[9Vyi̋H���������У'׷OҮzpttB8nx=́=ƞ]cCӓY噌ϡa V/oF/᲏E|Aͱrn LҚgkCfߢq};$R"&J ,]5s z\{̽P ^S ~r͓{_xy'h[A |:kz;qkOs>|,fCV=Ny+���M{3����:.݃6^PyrgTt4.+KYQ>ՙe'}t٦lPO˿ovކqM,\v"I)oYd<ky  cWj߾uY; Ee\vy'\PL~ԚxMvuat =9Y)L_}Fkt.?6udol+&d4fv`9jS+@rݽ9q[]D絔����t]fbw>;l����R!Oc?ٷw:}M;{ä>ndʽlzxV;s'۩xx;^/sRksi8u)@Ďgum?.h9b:K?}eϻLony����В:Xt����H3 q:Ge0o;6aL~ϓ>̤;NRT8]ldf)PO&6SJ}ks>'+\̺unRJ$^^#N~lܝ73I+ZkJu@ڤzd)|ͳw+5%.^Ǜ%P���좣t}ڼo:Ľc.A&۽I{ѩ{)mo]_wXohOc����уrLsOO^>';uRẼP*=?<IUQ^:֟>d^K]̉ \7*]ճ~v%={ՉZ5kU2IԳ֟}k����кooۍza~]}�@qQSX饇vhYZh>4\7{c]ޤ'>.xN�����Ѓ֤ƪb={mz^q:gO\tׅvONlYy׃_htܙH;yI}잰;=aOߵqgqĦ4vETMRN_DRr=W˴o[`s:t85;R"&LmX-[~]WiUZu$=k]kg O|Ոuk:Z_sTEܽ~ֱ,32vfym3 ���@suZ/tbo8q]~7+>'p ����OUI{Q:*5{٧?wC&;o/hjkĵ|v O۽a͟#U9q^ƹaF՜dYǹ?7zVC}wh-=s5ytw,jwnڝ+b׵ҷ&IwXeFgǪ´{}ک?S[nXm���@WuqҞ&`}MO.Qclp{bv֯tͲ>{rX\����[(ͻmٲEtO+p琎y]}\4j�^ޖJ?ȝ@JTߝ\usG?#rwuMȟKfACYcWm'uz#6Ywb;/-;w%vd{oVdJޱK~<@˶3;?y#L}Sי,ws1atѴ*����N|X7<C63d:Νsg⢯Ͼpcׯ)g_7*P^с ����]Ϡ%ҔHM����tagztQ`#4 YVr3qv{IvA9=nop>;I6����4GtRK'u\���Е|ڡ+㌹ZNw|Uzۺen=̱m3D Oxe le]zط����!q(<t���������F{ /&:I���������84A ����������)3hI4%,c���������R[(#5[lݹkھ};tԯ_?wy\4j�^ޖJ?ȝ@JԬۥ'˞<Tuq=n:&aO%3\�@&mowLp_x/6Su栾3 stc~U �� "}}7{3`O#�}g<|#L@6,wf;hۉ�-��@@أ[ګNO#z7"_G~_Zz7�I>xoѧcә�mf!YB}w>h#жZ��΁�m[|yCu0F<Oyu?�7꫐&zt?IOw]s8=9Gn.� 4;9f8,wC6�m;��&ooҍ wiM;XB/8�+iO h syզˇΰf/^.E6oޢA`3KwnR=5B6,wf;hۉ�-��@@6Y_Nܼ(@Eu_T}t}n.MB}g;s6k;Pߙ|F*���Hu9/9L�,F3=b}dZ\y^V 77Fw-w�����BZ���tzжT51^ZzC 7kBEWk5oJNЃiǼ ܬLto^{_l0'-G W,\;wUu׮w?ՙ 0 WY̒I48x}ΉnNDڈt_E����m;χ}Қ8`S 肧J?W04r`Գo,/`޷N#h>v,Z/TV�t6{Sk_t.h#жZ��΁�m{}<է-Ә~&hk$`-h]f3K&^_s镥n: _��}~/>ʞ>l]tO*9h#жZ��΁�mC vhC(Xh B}gLyuđ_ӷDuLww ��H7om_O9Wv=ݙHUT���b[sY=J3͋K4h  Mܲ΋kOgwN+nîV-k��#|s;8kx �N;#/N�-���R^Ӣ+ȑVwt8ˬ4et{=?շ)9KuZ{z[?Ӻr5��C4ҝw?ܝ��{Ï"h:R'��@z~Kzg}`0h :9qcN? qH)86Pߙ%?ӝ3j37L"��/ 9Cy0qC��tA?UZZ7|R|_{{��������8�/~ar)޽>C[zׯVVVsN(++;c/oh/����D;ȝ9hz뺛`? 7[7Gry�@#@ ��L/ &}o!aO[YfzvaҥKݥ����ta:.;�!�9���`ǎgٳzw}W'N{Ú3<y裏#{՚^@@7t=ݯ_?w-����,?w=6K��t>hqP_<JnN|z��:{??g{Ěް2?'*/??L����b}C8Bw}wo}ͷި?E}t}d͟.oS�oo]nM7Yգ588PˑeoqiK^7z 59� kܯ2r3!��\sf̘:JW^yo=e ͚5k=o֬Yo~SI'dO1ކꫯG 5^x޺u/_nO'S7= ����JnO wԽwO_�ҽ=Z+}<7{t%{kd\?cߧV:{^v}hMtV6bIͷHߏW6Үn 67[y.ZUo1_;O�@ @L@~Q1YG�� ^yfXccժUvZn:;o׮]Q^}=hO޽;MMMI5C0���@gs꾧IoدݻoTҿ{Gi-uۍּQ>:^6~N}dp>׿=7꿭O8Hj;/'w^l�-oշ+?Fo>׫[Ú%fa23D [lʙ?_UW_=!\$os=/*ǐ�n9眣SO=<K5a;;ӟgiذaC_o5 #G?Yz#,+k-{WG ����Eod^306(Q2nwxC{iu|~?ܝj#wb; 7 >c'oceno^u-|\�@ @{.xVPGwO&8{-ӟ}B'WƏoOgdZ~uT0;vD9s/={~`ۦI.{Oڦ}{˝wyv9��ҝ%kz˚Y3e|M{W_}r����@bgAtyYQυMZ:ڝlPþ㶝Lp/oϹ8Y�Hoh3;c֙0jλiMM=o|-.k1`?'>}=m]pڹs="��5?<:sg^tE:u~M֖����>Lw} 㤆).y>m6CCHehlX [Oo]գ5 >(eK8\F{=?c[96�@!@!3ם hz2Y/ �������E_iϗ8ϙ=lgzҠc_yϐuO9.QS/ۻcO?o8b;p{]mo9fiڧkbyZgv]��JŝNK[lu}wqdz}8~y…jSvYy.sܹ3r ul<6=k +>ih$* 8nܕ*+[°�NkĈO_'fA6U ^}Um޼Y >#ɱGO/ufo[s6НKO?s?i󦽧z[>j>7 uC}gLLwΨ[tPU��pᥝ2᳢1gqs;c-]WQ= ;l=Rn% VVVτ=��$͏JKKgҚ 6666AZc׮]QMYo|N{������� 2uMꣂkmPQQaTٳ;v9aD�3:ϱ,N{A{Ykv^,9k,555iz4|pl~~.B}ߴ3m?Kly4������C6C A ylNϯmJO{ԋ۷"7��Aog{њ{L$ӳA{9{=k=g c������< ܹe*M{<5V3?a L?Ԟ>20x@CO>]Cڷy^_}��fƌS3ϴ.'a~a;V]wc._9Ҟ6.=f�����Σ[<89;-Y�= +4~x7��$ iկ_?wmݹt0 _~Gz5ݮssP8wfɴhWSOeO�ߗT==~ⷕ?{39-*'۷Ogi:L �����ľH~1O?oO�q̈h =h3D&p{-YZ��,zzATmGB}gL?~[9^Y֭�u?`Ow6HUh3 Ξ=ǝs'?у>`?��ZZڮ]f3K իs�� A:}hۉ�-��Hoh=hJh>v,\;wUu׮w?W_-ykxРa꛺wfɤqY{>D7s"@A�FCD#`YB}gSxmg;PߝD��7L 8묳osigOi>ۥжUct;PߙԵA}g^ۙ,7:tD<l۶M};���������P!@ ����������)B���@Z]uYB}gSw栮3 Yo���������!@4xp.x>C7mۧzuvvѹkv}5u ��������EP ⚀]<=zЯ~BW_qs{�CSN��������p�ʝQf'3mM ss;/xizzh�ӿ-/u ͤz;wyvM��������#@{L vj zK};}[~Gӟd}zW= |ow0;(%#Q'?>vt}; ��������`!@{wz=ם=oWzv-[o]ǥ ?pyAՂ544w^f .ғO]w:Əo$^xoIeϟ={~_gϣ强0AS3oԥSIT57o\=%s.ʍW6:x̹k׮.cۏI`\lٞ8c��������Gmb(6C&@w-�]<&XiO}~-dWO o7p-^{mui)''Go4yO?.b7'>?SvC  |ϴn˙2e].j6S3oԥنW$#;];ohcsL1Qs1**Hk\Sm1\ BziwܩE%d]_[~ާi&p/hС3n;ϔkW�YgebDڿrS0eL|#:,]4\L{Ϗ<soß 3IKeī>H7xc|Ou1+kim˟H}9tuy}gDڌ?lC,L{-㿮?_eY'چf<}c~轶=ēmb_Lx:u5\?򖵶N[;QY;HL^o۟}5ZۈFITl3mxq~vo%z&_MT-}jlm^-{"@{4~>n\gM7 /oQXXhL೭፿Mm0Ǧ{Y}QϞ=Lpc nzL@)7hݻhǎTrb{` XS\\ ^ x66-2d￯~w@޽{mC!��d[oL>y^bN8{ٺuT]]mVnݺ,u17$3m{fͱǞèQ</?[JTGpY'裏ۘզn{f 4ˏ'>y1e3y L״,/**'|8̶MAL{xFsۺɏ'Q0{oDyUmذ~M's,?sM5o&z5ۺNϖF[,K6f;&7 wIipK봥;0#Gqd~ğaÆ%2OGv'j#$*k^߾9\2ys%*ۖn0ۋ}]_?սk_IQi7`g&fn^ \፽ޜm!g<~7]ao c$:۷;H5f~?x'i d��tEݻwM7ݤO?ݞի9{#|N_tEIj>x ;il{ub=z}&6&lMs = u#96s_&IT_-Ձ ։wL<xp 0@ ^�^I'dijjZڧlǜd>۳NzMMǣ}^Zv}3?әk=<{yuSam^߆מ>s??&6 sPqm2;}ӓCi:9VKm-k8y暶s8gіn|FԲeܜ1^f|'Z6bT>:f] ô's5X2nORY3l}'z2y] dcMį.A*xP3?ik+oxc@|@c[zv zχLx_[c{汗p~ٶ{rŊ'6C&>϶=�Ldn}?榁Ov"縹ig%an_o{>͉fagzoxd*}%[ff%׿uw.^lK4ue˖wU 3A>k0m g^`vd۳lڅ!?ٟiOP+c$6Z'~Kaӫ2z=uwG|vuX#3r ޳-Rm״E& cz}}ld^JvO*U{.AxPUR/x̗<5A/PKCin rKLp,^ К[֘;~vkm۫=F<mo{F۟I ��"̯WX}"/_":0&Md8.Gq17-<Ɓs꒭09Rp4> "S7fK%~>oý w)L4Z{=6Lm֬Y-mM`p?Z2#yY5^z2!?M+6ME>Y-Q~ݬ]6{kr>]#?M֬g5bdnOil[;+#@LpdտOX<]ҵMG<o1 g(x?<̳GAL4M1h64=(pka/mh^Vdnˇ 7ϓMhok0c!gx��oq-sg̘1|"fܘYt9|kqc175B"_{֑l}onҴtȬcڑakܨOtS rܐ54̺榯YՖbn&8^v>;k={ol:ɾ.ɼ6KKK ҬkaLlL/d)-ݜ׶u~ƫ'/ggǬ6m wUmngWɼ.[nk}m`~vZk~&xL {^l3Ӄmj}&$^tehPg Ym7/@hmL3b7,g`�Iyg?ϛgܚ#Gl/s]xQL�[nկku׬gƴ/9!Vˁ5Ogc��ZM8Qwƌŷ–17]+**ic5 0̴U778]ܰ?T72ꫵ:wCuL27lMx=Lݛ6ݜ5?Llo[17ShH4.{xkm]'[kOӖL8هf] -}%^ J榾ڶZL~&m9lqu;uZ{?Sߦǵi_gN|W3;3!YXͣ(Zɟ)}ZkO]-{ iWzS_P;)ww߷uEUV$꙯y^R7eL ?k2?h?Ԟ6{yLsAMӼ;y@s֭vpۆF132e7G[fwL̯ӧO7LO?ꀆ86a3,f5ۤzJ_@5ZqxL[nېWOڗ ; 7`Oms#Zm q �@box7w^|E{ޔ۴iAs /[Z'c3377滢mh07zNLoYs ^J3WKu`Ļ:̍&sʴô 0=7>h{7٧ Κ3Q,ix-7gX- z40mgM0m$Yf~ޮaͱLf^K=5RZSY'VqvX= 0?dіNTH5ff8u|'Z6Rَ62?#׾X-mk}'z2N(m޼HncO?DiB?B?OB}iԲy憬/?i[T>D"u|z뭷|oKo;C}Q{޽{CSN [󫫫ʛdʙ։'vf>m'bَw>m֣G(dunFR}%5UW]ڹsgf=ae-ko[\kǑ)K^}{O״Ǭo3Z:L{_5o:6xu;.ݾY&y{I$QhO=yیM&_:yKmDe1em0yC&_o/y,5]IFiuY'nvL{bZnxZ*l}KۦLK�*]u3qcicshm۶ٿ,2]Y=nܕy̯.\U{Y}ׯ;~\z Lj.|6~t}n&�����Ht�:-Z3L+5d ܚNss� |T QnC q+g{kX{<k"bUBH-ݕbm]%E HX2V@A|ΜL&nHxg3{Ό|_������#ox/ѵgy�������� ЯYHazçZL]��������A{` Z��zv޼yy�����VA ����������g8*h�T�ЛFmZZ먠PA ����iE-����������h��������� Ah��������� Ahc.];Kl-����������ТOx75iRl9s}ᇺi*//���������` ?DOPMSkסּDޤA&ߖ*- P8ߖwq~mV9m땔Ngf}EsݟᅫޯT~m9Dc!��������g6ny?M~i?T_ҞF/YW_-6lBz)on=cdɏ|ytYظxt}E*,,w-]Z*𭪪OSw;K,qۼ {׶͍o~ڵ{%z׼WͶmۦwy{%x:V6[G~lF7pi=/Z7��������g&^p5W?:>TE+uy07 ,׵)0zVZ̯JKm{+6VSڦ\ϨQsnbk[.r7\jq]o-ԅ^9saի5"!ʕ/4wÆ Zv,&{nAk۰m α>q|M75}t;x-+vav[ոvg%��_����� ]bl@ ݂,�@vk:97) \h;׮z]y啭*_UXUggK ,@ nl[ J_¹M`mk_ӵ^gCH;άs`i*/6p7mu:Μy[`qmZk8Xm3fp_{C\{m/7}q{_na=xkI_Wݟ]'w^=z[k6ҍfm׷;ջ��ش)2?z3������h{ܑu[矿P\v7w`̂E-`5UOӂ=?x'?nVX-rڪu*ׂ>ȑ#_`쇙t>wz'۪-bնv, ^kWA+F ƻr饗wӪlkٓ~mݶ*m�������E@,3UJ{T~۵y7hг5 ,7n7'~{;}3E*ٺCP l[v,Amljʠ/~ -J wk &7EߞczN/uɒ1UcdZZkYzhʔ)1ǔ+wmxX'%%_w6>kjl%%n/>:2|��������m whÅu'6qU'|ڳg>{p{U [YP7X@lAqW}X,_nVjob^ em[N9Ȫkc ۃ,lMe[xkכ+[XX+x��������m/q4/.oVמ,�2vUq`UFW{vGoTZ =Iӱ8}^}ufYi>5kگZuc~rzG>{3<X^Ft>ܟMXق` :g��������0Т,dV#gՆ7v22q[U07'b׮]>zc\R۶U�UMw[IhK3Qmc޸��������@G@ kuf]s֪-L&ﵨb `M718Cɕ+_}Vi3m=؏m.]ZܜY�mU6oҥ18>k3tMG;]o|g|��������hwWUMumw]DV m|N ]M7FDQQ7]իc %-+vǙ@-nf:1zZ :öcχ?݆mӪ[-Ziƕ>sq[Wmuqv6Y;,\]'/G{tf��������0p%>iΝ8+tE}}.RJ��$ﱿ kM^M�����3߂���������!���������!���������!���������!���������I ;}Ν;5q◽W5l0o��)\p kM^M�����3߂���������!���������3@ .��=#{������]p1y]JJN&7K}���������U> O7{s��������-~5b<:zSo.з7U'V%qzVu*_jnq>Coi3muC[޷ ;v:xS:m]D^JyڲeFm;{tv<Nź/V<<^]hSGxֱ''�������H֣l^;7G?q+@{ռy,4YDvջceeU0’G忺ؔo|[)7^Wc3fot(f۝:otՙ3??iM?^~Pc?֜9wys[`dYqvt\xySRޟ^xa.~hɒys[{=s\'[luֳnmf6m{5W< /Ԇ 뛎˦Xx__nd}_hgiv�������ӉXWmսwNu3Gu ~0]|] *eCۋ?qٹWq֗YXhc—3oӶm;,@/w٣y͆ǔ3W_}}pj*m˖7l>k՚2e9r<[;F , ())ѵ^9mrí{}jѢEB>^:suΰ_`f65[4;_;o;=^B!8px}'?v\}nmmד<ݹ缳e䓥nP}5xs[?Kgwsg?�������p:ujxCsuޜB¹M[u B L0|?[a~`Xj`M#FTvG}zͦXvqCZ;F+ls/~YqysÜ^{)|eeeys",o~VvXHe~f,�O"IV[,6S3ۏ|#:�֖F`K.DȮ]<^U*XlC ?)VG������@G@ho҅]M7PA~j\J`Ŗ_eVmk=Vz,ښko{@x@ɯꪫGc͛7{ٳE8ezmk;wntt͖ǂ"{/ -OTb۲߶|bۿmҿ{+@kQ]Vҝ}uu gں`bf;Gu6wu|]w[-<ZWumU4k'k/;wW�������h{@y+j_\ج  $Mtcz*Sm IytE[j,ֳ0$?BcS$9s776 ,)V{r ,ǎaw*-1!ώJ~.e㭰, ,^~jk4ZUU[}]u':Y(_'D+`O'=mv5=y;5uzUڹ[֮�������7~q?k>loOƍo Ql6?ڜ9s܀&{d䏮&+,@n=G\`/*,\6OcYcgw}+WtW;ߎ-0;VfAIVVwOj[ ˭jЂ,p󻡶* qɂX{+5om{&6_+43שkuN̿NVYo?~[}=y=wSn}vVGɯN]�'y0'nxֵŻώg7moǪv̹E7�������O^ty罹U�Z/68,,Y`.w�^וUY֟vkXbՀB v{J2, q휣+-zmauwj-򯻵Ct~ ߂Ktw>k`[;mY8ͭ$;`OD#vI bN]\ڬ; Nǩ䷧USeg}ٶM-1k )x-:sͣٺ[.h}ͭv �������"n^ߚՈG٨տޮ?uVOw ]źehV]T lwyǛӳ,|gvQl,Mb ,{O;RgY[(=^gk gͻ׽XW֥U)[ ,kX8[^ c_1XPVH1]ƶ |mNN]3:YiCQgfUUwt^N3fDV'yGz'\54�������n~IG<jΩp]VygaE[/~V6f`}7xJ8WUۏB cH?zj=FIVDW4d>ڪ K: ͭ U-}vt R,P V'֮_NN;/^rY KJJ`-K 5=%V٣_hV|m:ud;q3hm~tiun36l6:-EO<?Ϟ5A{_R;>R{�������p;<կE{%Ƙ=m۶-{1wuzᅕawѣw_yn!|M6ϖ:|{7-۾^p? wqik{mٴdɏO6ubmNϟ#z`˛[,N<zY}<;詳mFoÞۼv#-)z߉NCpeS{l㲩Etv:Z7x?vf[6Ek{YGSG<V{E'Mީ;~뭷ﶾ?#������zF_[PC}Ν;5q◽Wݪ .VicwojQv}*q*ݻVZZ"6{7c�����@ c�+Yֺn_^[7Kp�������%�pYE׮ꕱV=y]7n;+�������",??_)=nW{d �������b 3@p Z��г.Y����������������p���������� tq|ץ^Ç{s��@I+8�����D����������p#���������!���������!ŀojҤtx4}\6��������}W.];Kǎ#��������@A@M~J[MvD˵cG6lX /Л{YX4i}E_m3��������7_ [L7Ng:^*-[r,{k��������`#EYQ5L6i,KlTxӟTÇӴ^ˢutn} Vv۷ǽhթW_}W��������E@.nUT :vXmٲ[Cu9д}HFooĈz~׻6oɒ;igyZÆ sn,V|5:H|5nxݫoα6��������h{O~3j={hʔ)K9r+A"ԷaqΜ9q߷zjoNt۶m/ }wuO*Mmy~wՙz?%;2yd7$Vf���������m7}sfgm<ڹW`n޼{cn6o`UmZuh0i&_JJF͉7nnVU6Nlwy[/okVZ׿~Ć6��������h{kshֻ:rSobՑ66 GzQ7OqH,pHD3fsýW-Yupo c׺+j.i3��������zR'Oxs?l.i-ȳ@' XաU6;ok^XE0m��������0?Du~I`ѢEn臆 -ܳMyoNl]2jӮwco׮] Bꪫ9E�������� |=̺47_>4Z~͑|˖-ݝ1cꕔr7sZlW|MUU7ц 97ydwqSj]X9y=ƚݲe*r nWvL6��������hwWU4Ϻ9`g-3gok#uԨiJZv7 n +/B][#G [enp5?أsYI6foMMMӱw]lh3��������-)I;wĉ_^+u饗c�=WaҼ]ﶉޫɎ������g*3�-��Z������tc����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HtϪ*Ҧiη%����������@@#^{}Y '~ɝ����������TۢK[���������hnJo����������F@MounPսj17rk���������G@MtP<tXu4A?:���������@W{ϟwں>~O����������tݔgx����������}IaOڹs&Nٰm=PY{s'65k]nET__K/TÇ��=WaҼ]ﶉޫɎ������g*n1fmYS6o5bz?nf;+Ӊ�D@/m_?F������ 8& d-5~(US[fp���������@A@,9pat/yK��������� ����������������������������������������������������������������������������������������������������gcǎ;ҥK9�pz�������gZ o&MJז-[9���������C@M(9Yޚ_4/ ({ܛ{(l6/Zz78M~4^|b!z/3m6VSo|g}�������nɭ_ [M2/ԗówQCC~geVAYȗinԕW^=}=/U)w7-S 8Ǎ+r9z3F5}^/Zi[/R\smֶ;u3g<0۾/oml^}Mݻwͻ!m<˵cG]}ڴkW{]z'�������!V5ߺ沋5b܁W_Ujj׻vr;ï^s`Y0T V5StJe`=ϿUeFWq~il/vsO. ~ oƌ}ƌʕ/hɒ)??ߝ7l0-[V>߰ax:׻ao 7ܠozjM2EEEEm-۷k۶mO~-co;smnH{Qon|Oc痒kgxsӟ[�������h{_~M&ՌL <Yu袋.r+P-ZԢ̪ggѼykZJς Vn;7 i+cп~߸UwGC}gy ?;; L f*O<O =- l5}-ؽK9}XPj֕nt{ `ڧ]+!{ѽ;�������00zx*رc;tּyZTN< 4ԁ ZYX+t-X}^^BB<NJgC>,4;>r fԨQKPτ}Fmҥ[.X/~eu|]wÎ-[oNjժ%> `I%�������F@΄YwoaZȠ˂ i,0$zX>ialgϺL/g3GZ^[n]3[jz9m1E-J={m ‚{[~5xsYj][֭{݊Ug `�������)ճX^͂ Q[?-^oi kVxmA|rKW$>|7YpO _eCp|U�*E-ZaiC㥥O>7V%{9nWVa̦X?~+zV�jǰcG]S7&s=V/}bUӱO�������@G@ۃΔY<L G�es ?Bo|݊;?ܱiɒyk4* mmk!זGׂe Y5]s> @կl~__[lկ~dPRR~&_xae*nnZ5-,'{~C`r͙3ݟUC\`OY��������h{șR=k,LPZ(~ [Fmosƌc,@WӖ[fAZ3:le6F೻j϶*<v}-UWG^V뇔h 0-3*sg`ը3l!wgMswuvVmrwOھ۸v�������m9Sg qɖGd?z.c]̺Z۾q][׫״0̂,VO38=_>U_f+B{wÆ (5Z%ݣ~>qYNUUUޜHŭVƺ?v6ӭm+t 3JV{}P:ڧ?fK,׾55�������``#~l%)z*آYd|]޻lY|Ԩ5uQ~jߥ]~,lٸwVNZe۲[Ǫ&o7 ź쾨ޢc"֖؂BD`?n?i:0=hS y+˗// ,۪ 1c}1;&ۖctl?~ek>U Ec۴>}sTQQCp@?co^:z.S7 ������}[R=vܩBWK/U�ςG b_j6?6*9|Kv~[iii뮋wDUߔclT̓H+ݛ%Ttjƭsx3,V,[u+ٛ �����**hbժPp{ꩧܮ,9PCҎUn^]kb/ތh q~m$�����7hlRٺA"-Z[Ⱥ~玺Cx4XI9ʹ>ekjtț������Z�$|晧r/Ffv-2.�Vǫͅ*5[zJ5E5$%/SŶviFEYǙm9!Ü)wU=նW&j5GU W5amo&|}vmUegjOg*Zط������E@ ���M*ّ›ҕzmU{4+c5RUmUB/YU|s2[mHSGgjٶHՙ _^z7 RNW>w PkcsTt �����9���@8>OYi˴,LR]dOVܚ)ZT7>+vcbJWVƢWȩYǙL9)[-v5<?W+CJnֽ{,ζ缫V FO/Fc{T>3ř_^NMG����� n���@O][܀U?nɖvf;#b[JI)wrIƏ'T%]wjRTyVϊ}ζ(U,q}puSiMyRXfF5t������h��PTVεxD9SꚦZC egLA!^r&eiU0RYc;8v0'9K 7kbMlqu!o!������:���U>jWkeIJJf;s>o%SI~_PVhe5ڦ������!��� -zL/EV9*Ra[y{/)JyQVpH/8YJU)yZz?4Z5hū������ąJyynq>CoΙw1y]JJ4іߖ-[4iR|Mo�U>[<r8KVs֔vs -W5j8bp<T [yo\innvTxoxoj _<Vwsٓ匿c����� EtR74?"@7^ݻW|p;{k�vTt8+[Y*S/R-RUpm<׵J { 4!{Vq\ɚ;[/iy,JM) ɟyϰњ`B)Y*YQrUc9BegH������m8rS}*=P4k?+ -8wyG۶m̙ /<VEjդǃd�XY]"},Ŏ*S}kX5nShcF=yW2jִ UGrԋrT\sRqگY:m|P-uW]OU*S&g(ߞǬbUn*Qv7K�����8vRӖA?:}@b544?}F[l*Θ1cg̹˛ʦf꫽�(zh֓7]I:u?Ó§*-+䷶ʙr;TR'NxP2MYίN=S'ȱuO*+jE}/y /ʈF{v?_q]{�����pTNHkH?rx7 oꫯ*55U6Ιk.g]Zo߾n+u�-^?4 XJ;MU.lL^Xnm~hԨ5m+x&-ڪnl|@4۹.c<m{]CvMیu>ۉgII=:sSk��������pzÍal?G蜡C9`7<]t:S555fޤDz궗_ZɂqƫIwH\N7\˵cG;ɒ;i] mMnhvhBws!pvwױqF 8VWvK7EjU{c]nذ7pCqMmߍuWVm֦幹97ͻᄁ_xkgʔ)n JC]{تhj/kϿmw?(^{ `smZ{]CUqjylYYYMcjE8΁ʾg[��������Ӊn%M4|;UWkгy߽UW];v<Y Y͸qPk޽k[0*Ι3G)))nX۳}ڶp?. H-е +:@xڪ?=)rZ3fp7c1v.^d|=s{ ޲sK͢ƘP`nW^G~ q3 ^%۷?G$=�������%='~MOߨJ{xü<]y5{c?0) AWfůzB*}?]m[٧k04Fr/~ -M 7QAFW?ɭ6X;Z}f?Hk6ُ<*Ī�������XŬUZHw]_?7U4~@ɂZ\U4=zg6Z4X}wk{Y<. 6nx;}t�x&7j'4rrr*dnw��������D@M®Ϸpֺ;.yg_ޡ}[s+/AS�4|9xmUV9|pUϰmZ( =P-0-ص?i`o!?jUr^>=Sع[weN}fޯl@g?>!Ə:��������IݴOunnlPڟ]ÍjGG9uol' gAy״Zl"Xpfڷ_lU'O> aڶ-BZ ؁ƯλZUP]{t:3pK[ܓ&YU5 b>/�������Ӊ]%7]'Zj0\_r$3]6,LZXO=x7> ,ڰa7,pn4?[zW�N,dݲe* .:??_KȭЍ~@0<?6NwX[ծ >K][`mmq},X}>gѾ[{YA�������vukl?k{}s5{㬬,oN3 ⵳[px}E-|?jڪV!_ jnɎ,Z>ΰЮC+ ܐ?{Ve.,aS[md۷ kvUZ5X eˊ6wuuۻq)خb_Vuű>Kr{3`vvV럃unauX0_sk�������#)I;wĉ_^+u饗X�c-1=WaҼ]ﶉޫ?#������zF_[�Wܺ&�������h�κM+eٺ�������LD@ �u63<p;2��������g*Z����������HZ����������HZ����������H35|p���������Ӆ��������������������������������������������������9L(u=}[ ����������ǟ(GhÅpnrڰmo-����������ysNMeUsϪ*[z;*j wyp>��*ݻVZZ"6{71�����^E@ ~kճ?k܈'65k]yxs�C@/m_?F������ 8p*h-v ���������� m7MK~=kw_���������nqdJu[4+tnP���������� mvÅM/QO4:go-����������g:^ǟf]s;N-����������aۺ-Ww+k���������G@Mlg<ԯxk����������@m7]yU;ƟS?o)����������4#���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���FU8CZ8eIv|ZoicXzԛ;\kfUԾj6o ���@@ ���tSh!߹9m9*鲏TEC?Xf2ӄC5:孅B>ܯ@/[{Lln't>pDmUj:)7p#p>%jCykG6wVغwuv,|l;s)}eH+������g[MS7Uz V8E8UJ_T=impIEg+L69^:21CG;?@ذ͹P+1`3)[|Rk}&OjwogXԼlTktI=Vnov)T }��@@ ���$Pe?~oYS}>P4r@ݜ;k[8|OֺG h'K%mi<{ $鹺^{s|nnkKc0YvTxӰ,GhaeR3޶ױôl^?[r*~>HY)a~Q˶Í^q`g)Ry𸊣~Q^mSn?睧Sɚa:x| CUfFD���z-����,% S}icERBa(]_Toeמ铆FŐ|`-HBv q,BJRq9z(u`o %LV<o纗Vu֭=K kcF1T㧝ʟGOǠo4^<•Γ)giKdL<6X# W5}C���Xh��DsXqPUc;.;&?67:tjdpIU5'q-scrhUf:Z,s=e8'扏4 olx*˶e7˷rU?r.r;6HIRϴ5>Qi` W8ǻv=qBk?^mŊQAMcF뵼m/YEkF$i=uJ u'<LړSX߲Jagv 8)p.KCR#gkmC}Ovidƹx;qigV*OxŦF^n99Ub `;[n}>,NЫ9k#'4w;>)CUdooL5;""gӸMk4fI<YbGq4~91Cw|ӟn{~DCTqT։:sm̧_nJyK#y x[ykOyv~ReP% ��ӄ���= 韪pkLSo>2Upgr:f?qoE^w�JV 7P)cp䨖]{TS>޼6 MW;eu6úS[ᓪnWZ})WQvE2oGg?xN_0 tO5ڏU놎=s]G\} 9ls\k1OZu {`aN~o- 22YKG~GV~YS@Ө5R~IQ >]~6F'YVƒ*U}wdIMVD'\u<g铚<HtrNGgO~{t?_9ټ=ORᯇ+^:"Ǽ-mT7*gӸص}yfDZ^C2^h|WVIʹ6p<B_iTkY)NeH݆M6uW<xJ5riW1}DA*xiחN*cOjUO:KY���Nk���H))[BR-[?8[S;>S6>Obux^Ǖ@v T[X^iχ [~;D c ७�DB Yc xb)e fkQ`?ۤ֞^[?t/$ҽkRXpQoONde?URCխ|'ӽ$*㴿s�Yh?CLg4qv4n:|J\^{o -t&r]k<bjDW,|pm}$ڶe2 ӺyN)?fm1IgpIUX<wGEf $ṋ< TRÚÚV꒡q>޾XwslޮI`�QFFם LE-\Xcsϭ{ rU֞{>ao(OF~|W:{ |&}C4X,?vmI$-YQq`x{?KKV}8)[NHi:y/wmlW7Y=tqկHs}]./:Weqx?̫oe-+��E@ ��� I{JuVs7'84Xeح'U;Iz'B֓+2d %_4BOGJc m 1{vU>pRGxm<Tw Su%׽_幦9hxifJ|/HͿ[lk~88m[2B)!n [0GHں>ҥ炟^+eڹ*}y:c:F%k]<]5t8,U<e\%U*f|s>αΰ #Q՜ɚ>7Tuذ3*oӮs#ʟqJ Vy<lz3ށy9F;=;2sUtwd~cS[Cs,Խ,ͿyX]{.{`w^=63'=jVYP⟝giMWr<IUzws nYM>x$S޷#P$0nK6UARl]1=<>&rKzlQ|pU-}u����h��>ʯj-'gE*q Ёs3 R=:봙*{ 7ҍo7Җ}a֢ɦ}V GʼgQU=V}UxCXt;=&)պPuFY9޶ t2ӣ0H?RHch&}O{|ʺ}H*|)Õh?[7IOв-9Sz 5蘪0,M.x^4ҫ=fXj]+fm^>t]>?PM=D閎nUq'c8mWXݩۿ7ҦS <8QnwsCkϒe/wi?5D R*]kc7@7-Fhڵ q\E 3RVnIKR֬T^;\h Cq|J9s_v^8=Zwpx9���@o!���ڽI*=EJ&=9ӗ tA3Iޫ<+dͿ#UI;oyuW:i?e'$xʺN?14129@(n)h#gQKQ|V촕;'ܶJwr5>ݎ)MtWzcYqJ|^jr^q[I,zgZJq,?A1-GU)};sV8Imi:b $Q;g39Sf Vf\t/9`7oƟ)qõ``M^yRgxYJϼjvG-������wK*o9Zt8#GEZwêE5&U Sj?$G-KY204RyMhg?RhՠCg)}gʽ39SpSwOU 9G*F{݀;jƝ%x+e=R@E楎rΓuyҙZU:۹Um:٭.qcJV՜9*ۭ+ho|Հ"ՋboT'gj5#Th~Sz3|1lhZU -ҜHu쐣v=Ig}?U鬳6yw+jhרڗjY*Cu:wƤTxzs7GwfxC:s/}m#*=_HpaʺՎ;K>QC������.鍧8tw,ԖNvHu.LvVѼsȶ-=vߪ҆)S}1<BR̓ nsl3ICp`c8NwqQ.u^N9KwysyV >{T-<}hٜnٷ+aq7L/Bͻzw.K?Avu2Iӆ*520eKms`"?#Qmt[oe).?y8pT~_sL.+hyP0?Lag8NF&{fPtR>Au|JO>:v2pOŃZTNg8u*ogN8Ňy{$._<,){XuMF<ܨkӜw컝sXօx x]wE1:wH6)g+ >ڦjpZ))d^}"2ʶU'{ ���Z���T7ft2I\a;wTac& =Z}LÆزuAInRg c}Vd_YGWwq=cǰޓJK I9kqlXQAh6\r [5B#"<:XN*}\ Y# S-|iRQgK,YG}׏*ia̽.Y9#sb]r9-xjCMV4{Xs#2eZ̯t5UhγOh9۝]ֆcZhXEٍ^9q?voŬX{ȎιZ~{ƵLD|_DM^;aߙJD}{X54ǹom;:/r/UX'Us՞c7UsnyJ~I;ߝ4PJJ֟ ;Rg s7E¿Mca-dgf o}mO|N떟!G6ĽŃ\Ie6}د: UyjYȫBM4;?g/{1`���@"���8HXS^P1sU .ORqU|DXz`4u1WU$IYyNn'ώQYv%_7T7RVF7}'b\պ]I5N$>~~{[%ӽ|n`?L[l\CpQu s77hx2*?|5Do~HH2¹_{cMN{-''knY*_sWu_窆jHS}uR>q|m ܷiI*X2Do;TO:zh Uݰ C}oqH;}p4RtE0T gg] WE+kYʾw#4$\}|Sq8m^|'DoQ{P#Fxm$na=y:?5}7XuõgM����{'ܹS'~{��D*v~[iiO(""s1�׸cL;QԜT ���o "��ZߙwJ_ _`mtٶm'q{3UWW^9{lt{pYWƦ叕_1ƫ`m<ǎ)VW-CVYۑ'.yґ#}O&Hٳg��տW1�����'TX`SuY Rup����**h�� ZߙXA �8 NW*{3$Y6iv`͟9\#-:���*h�����kPez@]';p���@����������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@$>iΝ8+��&{ڽmy.mW}S8FV^=�}3f��#}oA���B@#Z����蜾 8���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���'.eۼ]P1#} �����>���AkYHP86Cܙ[9Q795G'�����'���=ሴ,K#mBmRތ>%xcֽZ眼8j&)))0-DW;Br[nkFE}gjYEew<ݩ<wվMH3"O׿Kيv>Cmj-g^]NDZFv$���3Z���T̑nRn66Hpd:X'N2{+e mS?BRkksmZ͌-'-{֖bm:O)\_ʭeδu7]Bdjsk"otX-/sB+Ua{Ԫfs5m} wOd,-W7��� ���@7zQRJ)m5[9Izr<yJifoǶy:RtkkT*ܜn{VhՑkAt5 �H" Ȕ8~(Zyk[1 j͊yO��/ ���z.b'i=qvijVEu-OʵlsReuG_!}Io=G-[VuphmdU'V<Lt7u{5;':lMsN8E<3Cjp6^X{Woh{|k#}j9G׽~mKcTZrm7wj,[aAN9ߪ[ggӟ]fsu_Y6OR5{0*Tby ~]d[*G׶Ϫfm$vCb T- K/TܺJ _=EylW���h��hq'IYqV6ns/-|^BBvE41RRNn)kR=qbT:W9pfuwy?9nc,g]skov=w9 OMbsӤlswIK6R9: W8y;rK*6tګYyY3pˣ9eNWE6V9F^mf~ŹVq׵9ΆT>W-*K6Wej*otz8W^:-<v"K[lҪ"#ۊ' QL)"oV,ʔ&G峂xv_jFkSWMo+ۭX}6-o͢b^tN|t)F[t<6hqk^*-;y[ݳF;ǼϚEW_ֺ}8YiVhY=q*7wT)ʻ뺦N���2Z���;x!ehwFRϥ'"c{Wn7бIRe}`\[u7I -|u$;ʞ x9]#+e%{F7#aeSػ[xIq;6[#MZ;g:CJV:yH-jbםli@v<sͧ8Ph÷¨y|i}9mE"A{ThʼqVKjV:iι/m㷃,V; h-;waF2i/6۪5*n뜊4C ׭*)z*Zst0|T4rq:jbR-ʊ-TI~\Vm*Sǿu1BřJ V:["𪼷DF +͍UAT,>_jn/1z][E>g4n[4ۧŒBd@䞋o{m+o^,^M;ây?KN˹/6"g;;ߎ>тc[kzW0pv|:orjg>~ &��@F@ ���$PfiYHJy@zr4rpd~ERӑ`4{a 3y#?TVyoڳ%#([x/#T<^s, 7d)ȹؤHO9RّIb. gv 6 "@x^~ᬟ~s~Nk^n9ǻ y,qtf;צ;ZYxX;|;4f; dvdk e-q׵5봨}X9H|fݪbvU9f\C+(jdA*Mt];MW.ÌE-TI 2"*oTuEskS;TZ_P5mUA!'Fmnϔks9sl*Ep.皻qiۿl_ɝ[jq^98zwHX\ 3QZeV?P~��@_C@ ���trt̝ѾCVժue:^m0ZTzT<*pk8&DUYyȺ,r\9sx8-xL:;dߡWbLݤt25kbuiYw_Է(Սhx=QYJW^c:ew-]S҂su 4?'+Q5iogJλ=6\cQFbW)6UY^UU%nf@bМVrRϰ5ř=T$A[WcgWy+ڪZnA3F+Ml׼C^svtۻ5zY$�8Ac'N{[7Î`Zh?h���=���莑R/I5U&())s,0Z[O;n$Pyz]$,^+mu,gCN{Q4+j1nwn7Gs{QuesIscs~ecN[pD?vW;S2{z []w(.d;Hxqq+;,\9]5Ȣz,P[Zqc( ioۘsY$ٙܐ3`JۍrS7nmi{Rz,dXx]B/.a<X���$ -���MYF.ڪ<yܺ+Ը#Rj!h1Yy2|͚!"l݋u+ގ4xi ۝yEr4yns-?輞"IǼ`ZVZZpGoٮ^05Еs[R츝ZuxdY[9Wks7G:ci~"ncFƉlc ׸xaYGʔ&nsQ1zަ)f7glb }UYڹ3*"8yOmG+_ڿ:Fgiv2z V(#9[ܓB^H:Wjlj;pOq}ck]%���=���&^xZ)M!*>˾. t[wpddC;y*Ӣ¿CY?;w> =+y} RG5*6[9&uƃWqGw{{џ8cS8muylд9mmhms봭߆q<, t<y^r眭Ji,g_"]VwKF>k_j3evrB^K|mճ"kIX]qiV"{Bڥ18y`7 ggEn8sym8kZ䎫K-������҂URA԰FLÜ _&.u ˤe!.HJIي/I?[7e_/ ʽzb8qo8]jmR: 4s޹Ŋ*ιz]1w]ζ]tٺ?zsA֞9۰|߆ÜkdUq,iyv}X0 w}~=ZŶeι'))VdɺׅiG?vlg*v\,fVjsoVP '9W7\\D*Tu]{L``UR~R~UfzNո~;W`mѺ ;m511Xܮ{x*3|.̈ۺ;*#\e{#m]ڴ.HWT�� 1h��0FziRNHOH4#_g5{?w%غ.zF{ ;gWgsgQNϾ{UٺժGpxnj~os^mw"T򢷠898_G'vs@Ӯc _l=79_ nu0v1mD 21acTLU3։5vŒm$elw 8)V*:Δzca9O26 vTYvbeu"LjU[|Hǡmʷ[R [hGwqBrw< tluIѻ^]vܚmqȱ:[nC|׼yHo БEN[5V|]ϰs^1ơ뭺3tuiZh]jWt g{ja uw3Ъưy}6g!Q?��@o;wj/{���$ﱿ k\]6?1OʵJ[Oq/UjxD~7uD)zի5c Uܱ?-<l;ΰJy5fZ|b*[U֝LdU]X%Әi>N螸yO1S oiYt?6k/g.tjNgtp~$-u���g *h��.ڷ2t;V'&{դtnyL]Rc;d^5ZU^a/Unu!olsu+ڪE5IdƪMM 0}ӶgsT8}T]��L@@ ��� ˒ǼX"N�Isg9D;W8ܹ :Uq^tQsUк۽%WYvo}lv?8E3QecT$.��@B@ ���tEI6`HoLmh7IOVK55��6AIDATa]Ô@dxciLdE:՛ٮIk:9&xdhA8^-g!y[qj.:]_Э9��1h��%{ S�}��9A ����������g8Z����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������H{'ܹS'~{��$yUXw4uEmoLj3իg��oƌ3���t-��[h}������K߂������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$)I;wĉ_^��5Ico+--{un�����p"��Z_h�����Ӎ.��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� AysNMe��@_=WaҼ]ﶉ+������NwS T3on4(,?8E$Fܛ��t �����oW!_p'>.rƝޒ.��������*g-t }8k\3Z���������`nrv 3Z���������`1g[α?#���������u V3Z����������HZ��������f_r4Bvmlݥ Kk\eۼ0h�������@XM :cVU[ 3T5ZVܟWnӬ-W-7ikWwS~J>^{ztUz#o�������� zլ)UQ^F_1[U{�Z;ZTk:xO}j8Έ/o_o|o{?CoIaOڹs ���}ĉg�����>\,׆`iԡu|tf?Q+M{N{ }./W-ڿ:O)올㌅Ғ /ftk}gÁF}{Վ?Ӭs^Wj]*=]Mo|O/ݦ4W9oQ, ?.`czmGy+n=UZ��������XU R߭TE3 mmJU^~;z۽i|Ǝ*O+uОx };Y_ZyDqlѕ'ȼ.��������3^*"Վbf/Q褷\ *˶eUu]k=l:MKҲ35w&|}J7EYee=٠khCwvy8BJ54]w2o_ATHӯg6]E+;s;%ֱl;۫blnsXW08)W; \}v͞WcɐjtIej*GSlsm4ZӟIנ峛 VWG_e-{6 Lc3fkmZۼΌ 5TM]y[[RιRo=5U|/-u\yįj7#C.QzfS9qU��������7[z z3lLeu ἔȺ)ᭇ#:XU+75H3 \7u0\9yʂc9{*)%[jbw~A&8Gn9<ŔΫ'\>3~o6~;Xxp[qOy`c<chw_mM:~SbL)yo=U6yN)_MZ_Ӽ,s$#ݾ<>0+p޴ckze_^~ec=[{۫Iژ3*h��������ac֪\RVWE(EYi)v=73EڶPs=l8e+T~[^\+U~o;V(?B)*;cg:ְힶvqJcjLuZ? =br*bml891{Ny)!U-kmxvWrUlZwȶ:'oj{E2y?de(r[[V6WYR4#Y+^;E_VNsMܮjUoC?G (s;ޟ)%T%+|˞ޮu?Q$oIVq5;m]{1T~k`N<mכ;trmSntmUqe#5ZxB SUU%Ӽuzzy@:EmMEgCkMm8eQokBwɛsJjo鲤Q:ڸX?|5Vh�������@0^v.HޟkTYiZ[?=GK@5rQ{ EZSumb̟G*m\j+H Zbj[&l )dgͺ@9RRR櫼b4mI#'9!"ZU,R UX9NfTUܮt#~듪թI9*&U?^i3W֭r++|';m'Wr>=|\4OUsݰUtH),vRr?_Q mU<kQum Klgte[j~Eʳ:huZx=kP((K"$e<Z羛?3'Ͼ+O=gҐOiykp={zj[W-6]9,;}3Y3zebַ.{NEEW'#?}[o`#��������D_i+)g3@H5C[ҕq ܒy}jUm :U=^lqCTޒ|M+THVk?ipJ/r̦I&yO4aZ9eZm[v;3GY=nW<^oS{Gf%ΐvרj}wNv; K}9W9S5,m.P~:b2t\ZhMpAOUnئ lTpS\/ԡ]vvxduO;HtXN:Wgެj̟]t@|z؛9�������~^vިԓV_LIhTF*U#]EyYJNRTH^Q)Wa-+B{iyZғqMVrX{4;}]m-}H =Mߩz{:a]<?Z-!IgKcJ^i5Y6ߎdw c?=7By;g#��������רe9u7TjUx}7IWV^T.ShBU"o+Q%S nɑJj]]?,1-ZX7X[cmÛ*ouxpr$}qk<on,ޛ>PjYmU 뙲dkvLʻ(zjT U?^pX[xt yjjZݝ׎oԬ_~pJ]?{kuۖ٪cw&!ڬ2##[5ﭺz!��������WZ9:znWesfڲ6BeNu;R`fq'hᬐvYفnStgk,SGTHޘKY9Rh]ڽ"7S+TJRHuO6n:]vlc[~{BPѴ]FڨLeą7g5SoJ[Y<_sUCSWƍ:BE6}; iJ*Sۑ>lNo?k2d̷"M8kU-}ҧw;W|n|Kc}ћ3V;HE27k#��������X }N)!U|{.tSŐR+QQ]e)Bi*.TV2u$O҇j G=w޿B%kqMDRUle5usHe8fr+/E-2LcUkjȘ}Tnq@Z fI++T@9'$u(JժLmw.H׊{TQ;-EӲMoN6e.Ut2nǤB.ɐBZ=t\?[zpʯM~H_tԌ_e9iQ6ys~P_ [fʷ4-��������h]F=yW{LVUJoU; TpGn1f+Pʈ~S2pW ohz_,,)W̖KUϷ* S4iu0tLʝs+ܧsw۔m}RMIU-\m}7=#IţfL{ U.qDW-zzA* uWZ7oV6 }ZoTWv\zRwD^bI [G���������@'4o6nGWpQ^ L/ty*h��������?v2ͽJ,>ePY:{5ع9g���������϶ei: ՙΛ'x3Z���������#u]CLIೈ%>sss���������@v};t`}Z嬅DKoID@ ��������� 0wS jZ [c=ronE@ ���������� ���������� ���������� };wz���M8{������ ~>��n������:F���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� m_r4B!oVqV+&hsW���������u *dὌtM~{Z?Wcjފ\~2ΊI46#WsWJo;RghU,v&낔d!U=VIV>w` ��������vfUR7 aC]_WAz:ղ񚐳Pe"iVsp}bZaM2laOT*"oaӨB���������ogv@^[_ԨUDFkǕ蹛S9=AsrpSH)7kc1ag:u*=XBT<jw4r&He?GᷞSN lT=Wꢹ?��������hCom;U񡺭rЋ+4eH)3˵ 5ƺ69)OOT$oVگq.e*ص���������Ygt@۰{!m]_=Q]TҲ35ku&|}J7Eu㻯B|Fթ_"jFPq[me g[K5iXMSC[>Yf˽igRմ8Z- l7!կ*+FG_1]E+;sRR*7OƤVsryYF_1U(t[ bF&/ScF+{2o_jЪ\gdABefݶGdZ֪4;cldeL3Whkަm/m^^WgsZ]Gk:H,'kOD{d:gbq&~q/mԸϩ0:l򶸦>l F6jS9��������Зm,4_ge7ǍUr|:/+wVkZ|bTbfVZ<U+M\4yDZ Wkŋζ6k窴i~V4#Be{]zg* ';ԠoׄjxpjWh|Cۭ+IʊJvoܧTU'v֨9/S<_ݣ>UEMݠjκ,r{b2lwwתll-\'.P_  ]G++t⊹]zT^]iܶLYQA xEf׆:2AYEQm0Ue���������t˙66hZ1#K7qsV(Ess yz9ڱBy M)TyAsZ X:-"..TiTwZ[˞qYRތkvލlǤ|y[ʳa\EuǜVu1ӱ=*Pz3Y"{ݬٹʷ[viB{@(6hwFGT6'_e-ZǼ`޶P FЎPRninUlmc*7G"Ĕ[+e[U*V<*gcNY<߯[܅TRUR7"ǡZU2쬲zw5*Y"ɿZw}Q*[3sLG[X:Go>*rVز6:;E)vnq��������37VfW*t^m+R*kJR':3nWTվXZe빕O*oH5:&[O(=&)UTƻlFlY9=/O"ϓ/triy*ۢ:5%*"7\ uTYlurqR32cwW]kTyVd+oQ*xT`5+Gson#RޜHp c]2{cOۻ ;O?ffihc[fZ^UeP,fCn3!@eb84;$Q1LT I'eej\V"8 :6c;!$}N4M# }|>Uss=?{w施zTA:48'ߕβ/-GWk ?{߈u jcﶵlvP7-?yЙbJ[z<������ h[6eC֎4bh]̹#aGouYOāR%nN=e]MG;zW4KLϷNS->Y| v3Nsuжcq,k8#-m~1zy#kiGg[omuu;#mUsM>=Pq,[ ������ h4o+wNLb1emk[llץx6r䨌عlըkOo 8cuY pS4/j”>:ؑה?YȳǞ:&[cq~a������.h@Rbu2 M4iy灍ژ[Xmx.U&9p(ee[b_49DOj(<a7�mݫبxyKgɹzOGYgS?O凅u}Znp]4X>mX[qŸlNޘ:VT-<O 8ֹݪnw ǖy_=t5?:홷;8k{<ǘS@�����t.Ѐ@}骓u byuI .-: {@4޿<6HKlI?51/_Ie]]PXZK>Xl)6>v!l=؛V-ǵ7?1|:mU]̻֒XhSpe񺾙 ,,:ߏ}GC</Ĵa+bXj<Ux_Ѻ뱸mm-/gXL9;j'=Xvc7n?4hXq<^ Tn������t˅оt vV*50 Q]{<[P·)Κ,[䊸zXTsx\\b\2iZCscϑ볠3ۋ]sjykl趘>W>@j/*<nUBty\[Na{mx211,;yl,oʖ'cXE~鼖6VTlKl6V_"v_}>6弨>Ĵ2nZ+9V{[l>z ګ]gb7_.b;[?bO♶]\7,i={1>(tx�����rA̺KrgKG]m78ƎOn:vpLGԸ.4sԺXxOC1cbCŠylL[:6>j|paL;&>yYN̋XW˲m̜?\s_)ݴ$56ŏ;9puyYY3;<X,ڒ凯ƁZb禷m˥qՇcϞZѸiu̫i{ݰ43WǶM˲Lմ{1?3~UkcmһV{ؖ~oo:tX7|]�����0D*,c{쉚|?z<_BqsĖ.ؿ9 �ή���@tA{f Lkk kچ8N/F'ҽ_�����[\6{M16."fO�����^ uQ]=mʨ0VoM?X%Q����� 9h�n���SA ������P"Z������������������D�������%"������(-������@h������JD@ ������P"Z������������������D�������%"������(-������@h������JD@ ������P"Z������������ȠvYڳgO�@nKk����E@�?���������D�������%"������(-������@h������JD@ ������P"Z������������������D�������%"������(-������@h������JD@ ������P"Z������������������D�������%"������(A' gϞzKY�of3&vG7����ڵ+?.,`����;�hN՟;v+OlߴSOe7ogkϦ�����ǜC64jP,hݽ{wݻ7~{Xre[qg{Y`hѢXjU\q1k֬u_knn||m����0h9g] q-cĉ߉+2krw5jT?h���21=uָoصI8 @Ԕo����=mzد>=)o-O1w,�G>| ���� hP d|QlXZ;������Ne?+.[�����@@[fo~u~ ������(�������%"G<;v숺������8-祹9W۷o3fG������3r^駟olL6=nݚ������D@K5*Ny ������p&Z������ЖU'.w{~9F,d=������'mjd<_9mI8������? h鑊{������;cƍ7 /�������]cqc„4VP ������g0DA]555^o)\x5oذaVUUU^蛿����``QA ������P"Z������11l޽1z2dH�٠|����/�������%"������(-������@h) [nA~'VZǎE>s>Sn֯z\ 1iRm ؗ{;鳥Ϧk{k{�����h);qe'ƈ#6P3ݐ!Cb̘1QYYy+>_S~K)s̝;'NmW^ye~F1cFvE|S[ޝw;Jg�����'-Cڻ;gKNmY17n\20@㺯RE>l曳un�����0 hL b6|?G}K+F'>(= +)Mմ3k�����M@[f&^>2~5[zlQ6 [__>|x_uĈ?z*ne)sv5qO϶xݮ>?k:7Mv;Mdʕ_rd>$ݣؗiI~s]}#z>;Wž,.k:vs84vGzw;ޥ};y>�����8WZ`ȑb֬Yo?>iZ:g<H| 'OZ.|?}=-p|u/SN/~KY3$v3K,ͮus޽{wvΗzR�:aBu_Owl}1*3uuuKڸqSL!kOz;Ti)������}M@xb-M6272eJľ}T+Ws;X@xUuZ[[cv O9>>[</]3];#|gNcƌ}*sw{eoWg 32(5w������m;o{7o 8jGU歜Mv5jTwT0aB&*ϢMoL T;*νZ"i玡f_HUʹ2+�����0 hX gox/yb%ɏS/iL󮾓^z)MCwVOEoYd4,2�����@&-SĞ_[ߊGG R%U*TA".?yyaߒo:iXd�����L@[R8[3}5_׼??B^8z'zsXޞe|&iIjcժUyKHϟ.NEyi;>KBjo{R=_=������ΕgY .}q,<_'O?lD;wN,YGY5 Ȟ>;>|x̘1= dYvm8p F<Yݛ}BTuؘDDwKM)=_@n�����(%myf,M6|?\߾h>t8;v![|yv󵡡!?=)}gd9UϧbuʕqOvѢOgըcʔ)Y1})i,-Emӛ}B]w}鞝8Nk_jȧs}W\qy!Gynݺ5?MWNse�����P4DA]555^o)\GΆoP?*+}w���� ,*h������JD@ ������P"Z������������������D2dH������t������D�������%"������(-mժU1hz ������r8q1cEH ������g!-3qs}R{s7lj'ȑ#y ������my{?/|ߒ+F'e>|X@ ������g!nzb~ͣ�������������%"-sGwָbzyky1bDTVV{������hP e?𦨺s}LңΛ(/C 1c;;������ hP bX4'[-q㌘q_C?RQQ??2=hѧ������m?p}?>(-7)Mlccc8,M-������p*-=vرcG-������@W@x X������g'-3ڻ;׷/ih]_d61������ hGF?-i_X4G,������ �Z������3kg(U����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/Gantt-long-weekend-look.png����������������0000664�0000000�0000000�00000232364�14332737457�0030471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��V�����BB~���sRGB����gAMA�� a��� pHYs��t��tfx��IDATx^ `TbMĶP -[R@zѠVA  Jam+&n֗/+%Pp+MXfX^:yed&3 $ߏ>9y9gfr<G"����������@B_r_���������� X���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� H]*C=T]n>{uCn>��������@˼jsfj5YI43Ϝ7OjUx\u 0clhP)GFTeu%5Z>NmM{\Sѕ=��������2/F*mL1ZmaU2 v5<>M9]ާ ZU7VKNƱ��������({n[R6ksK괝 m4Qi �������+ [+!isSN5ڨ;ACKriq˴9N~Zwcy7 SFB,,E8sR7��������}2,Tv_˳T޼QYMZ\s]C!?V.'[WcQͷ(f:��������' n}jj݆2`G-���������� l&wV?ZjY����������pdV`u6UVs:mrM?ZzG4(PT/$НJt@l-%v eִwΟN>T] Uի^5ni#TxrUHaYmm[:Wx[}m͝y"P֖kɵq7ǩamsPF|@5n @zfVdՕV$ܱ/=5d\`[(T)7be,Չ W-w^lw=*|-n96}m���������:PU^lRt fU7%5-_[ =/- e,i;Su+ 5~-bR j~;f{vYϹgS,TvJ~[ 5 Mgj[(QxOA(;|)0jzh];[S*{-9&SK@(O$χF7?uqšЊ7D\/Us2uCe7)$UׁxzS< ˵L =k/lzrR`uƩ+Zv[kU; ��������t.buURc%8'yuk;Ԧ;nx|3C;܌*f߳Xo/Qlw);M.X܌U63OS Z˷Z=U48 -SwoNJk;k|k-h?VK6X Tfً5}J"[T'jIm6{6G S ž nX/P]X٩$>тiuuuϺ&_ͮԚ/pھwXU*zuO,J9rα9';RjӠWV}pkVvW.Rq/_ώs! DyfV#aFNUN7PMlu7rkYCgpT���������`�BzB+qZY*Z"ToEx7jJC^e;gϖPpBkօb k-{Pc|Qܬ ͪj٪jo;{]E>v[ׅfn9NP顲M+K֗P;%-(2]w?[gr#b:WZ[֞7YV-[s2u-VD畫R3ʻݺ\YIߊ:V{z^B"Xk٤Bb CkU��������ilЦr5[9ʛ춍 .Su3RyoFܠFw0FK>1Z1%G}3\eTm/0Lew+{;BJX -T fku1Zenk _甸#7jSp(VEb fD˾tJolG35Պ4z&ֻ~hwH fN Τ*l^ [ }\ C1Xa bWfyj{~ͷ84/iܑ4rl2sGh٣+n7t-KPa"kyʏ*��������]EVwmW#Kq挚xsNѬM/ê*-ݬ=&2QHq+Ҍ^Nexr4"_׼ቂ.t11$;{+ZmvuKyÖ|]uhUY 땫[P V˘vPUW9Z|}{NvՋ VܖР0]2VQg@æ~yDM3Z_��������2&|sS՛r@y, {۲ϨSͣEʳ[f)kA yϫg@Tpy^JA6{1N5t`}ܳQ mjoh$$j8ܒXŗ-ܙd_h;*UX JTus McEFQսn S37${Rp_[vwM<?'�������N,c # xl_;j-s`{;Jզ6 kZ9z4eEI&nvZ/NAYr-9U)!5u:_+|H<wEGV/R+n[rUC\t<dGرM.P^N3*wM+). 4leu��������2$ڠvZ}\"YAU䴎pw*8'I[|Af5(]fKTxZoeNԴE+Ua{8�Z@t, ;t'¸k襼3c\ 5*06HN eo Z��������2#ܠMOæ5ى1 O8uժ~ X]Pvwgk*Z_ݶqf^1;f7VϙJ_ Trb-J`ݽC׮lhf{\j7Xr-p#ts ��������5eF`H˷ÔInݨ*7xu@ ݼ)aםNQymJ:g{f+pʴ齐k*ltMJي<�y1-pWfA:-~Z^W^i(P 65vn϶f ��������2"H[t8mZ3K l&[2KwUM8l|#Y]W[ ߨE~6s}mz*Ԍppajשqg<b=] dGZ[W`&7PEd)VÆf+s6Y��������HFVVCRiY-7=1_VA7"2Py.meD:]<ը+RM]{VM=>mXK`6sD;\_+UzrU*4Q']i!3aFw(@?Sk ~"X Hڝ3��������2 TH!ʻv\ dth[A^* jӺfqmݣ~niX3n[ퟻ]X_u�cpN*Hnl-�'v:[yGs#w$kvG 9qa; �������� 6h40;~ʾ+Z-P9ªV9R\i;5ޢp0fNT ڕ;V+ wBQ*lU]EskInwrT<$~f :^-FwS;<O}AF;Wz .pNL)Uij!*{9�/g/ʗ8_P?RwGK4hb#]h)Uq��������J`ug6ܠD-S5pn]'fGܼ)YٗT]^KנAG׈4{-k 5ʝUz[yp,[E5sF({XM뒙S}| (RijhgKӾ.VH ӳ5:=ڱtRFVulC=RL jCΥ% D)2ᜬ,ʊ{L1>:_(\WJ6Bvγ94vHf�nl[/P>g]7kUoZ]"<>=Câ Mqݓ�������'n/ Ͱӥez7;n+S*]ff5O"e@^hz6k "ƕV]*/4͎g|Z2T^B5nvXShӽLd(\AyڇPn~ {BJ^+^ ꤍq)Mo"*w$r`E3mJ =/mPxh˱o,Ey}cմ,4}T ~y_,)[M��������*ba{;dlw0^kNkǬe v-5}-l4ZШU2.׷΀STVM{^ŗl;׌K97-*nk=*o\oTczWTW,昴W_޺N ooTb bUx�֕)*,rtswgi*>߷yVI{^ZJxm*s,ݜcfnuoiqvWtϗ=Z}+QMU�����������������8U����������pV��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IYغu;����������<x;t= ������������������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$z,pZlݺ��@<x;n �����нtf :���tm|�����>:^]���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$HUأz/W���������uޭZph &y^D[%���Ă _#ufntټ\4zQ,������x]<ڬ5pHfvU>0ChY ��vhPs+4d�����t`au nV0z5}R(R{Tv]rr*���)(oO)i] 5RU+:Dr������pu*-\@ji֨l:ę--Sť9N���FkV^gf�����Vϭs s3d+E^| s;W/Quj;$.5df<ʍ󠪭ze3^Y<��륁gÑgnחkO~7ܫʫs\j7˧n0k0-TxSI[~i nXi R]F\@[#_B7̶ [TxU}[aiIjps������.XmֶJ5GOUj'Ԉ뗫ֽMܮU34:kDsjs+JKn[j{-8'Kze3^W)ԠU��@gWuDgLJ{e9ÜnzSnWf)*-"&\{q34qWjiZv9kjPͪ*2PW;kTfX˩+VԚvW|aeoVfk)�����.h`uMlemg$հj&>T`,{yvg{WE Fo\`l=sTXø{U5@kʿk?tjr,[�� 5rNJVY#'*|Bٿڦ=wZ7å{+ݺr-4;j@EYהS#>=CsjT=u+Th*w9+n^Z{V[ݪR4T]hVc**�����~3VۤAի|T' 髜,)pmfը|U6P[&Kٹ#J+*ps*nSn~/rWUk#U��NJjy*/v M|lw,yvk3ޗU<RTţccUrk|ye{b-wkZg9X߂Z[bUl`R v=ҼQիҔ|E�����V{}g=&T9eh pr"*'7zSY֮m2}M*H~C*k: . H:Ru# ��${xicz3ׯ ^PYiN'+ImPKpF:EEy@ .崊W霕*5v-ֲ1�����@7E}50CU W7���Х7T_^+n/Rnx2|iJUpZ tX3[?0cM+N)*KyW*b|z[0�����螺lW٣oV6[V[ڻkP|ev5! j5OB^N@g&ttZp-SNt�� kwKU*-T ʿHw@6]*.Do'7MgrUBO jMc5csS����n>cuD͞+5B-Рi5zX X]w îTM+U 6rŚnRHy@ 6P+U-y6)}쀱*gmœ隶F .wsfW< ���]_{[sk;vdkkE5}ҼN3&vEzNu`*~rv4Xss'�����t/]7^ʽLS_u-uDJN)€Nհcz;zg傁<-?}U_)SQ@Tv[/Zӊ5{*T<F˯g\֑9䦕jB���]S{ZC97MT5QWahV>c?էF_lںj^\`F\�����.X5U&W-Sɸ *Y^uU<ӽm+~iݢ*eZ_^Oy֯HeV)evnQhkT1Xy+ѲY��kwC;b͞Җ֢m*5PΚ8|^YZ>רB͸` G7Rw_�����G<`)nݪc���T{-�����[���������# ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������HG֭[!���dk&%�����@ґ2"7���9�����{At ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`@U=c|nVWTs~.u3:@: ���������:J ڼ\4zQ,���������@*����������$A`ols���������4@<Wjy- ��������}kB8y.k֐њZ:-q{)kXMyl9^m_=CcdxtΩ4\ux^c?ov|o-׌).AySdCPkZ8^Ru UB3`oJ-z{p4-MZ^Fzvق*lI}]nNՂ'ǭghjni#4ΕZpTMD5n]WYv{zݢau)ku:vkX Uugՠ,||eH~iZzgTP?8k��������Pmٲj2PZf$P* 8e[ᥡ,-Tjt8Ceqi\YLX{B뮋3šMn #Epߺ. +(l[֒ח1z)wƐo 5Քr%gqrh 5~޵)j6-KeSkJ|sBo})Px-cX֢LҔYOku8:��8{[G �����u ZyDʻ}B&{bR@ֹe)njzLEV˵n[4M|4Yؾ-ߤJiv4g,Њ7"묛5ɽLs˾N;I+"2T[ӣg Pp ^J`M,*Wpxg;jhyb}TٗVUt6jn[@EY5_/T*ךRs[6z9wWj =ۜڂZ6]{*NPuUf,g79eVu@VeXR!r&tboS 櫯 ��������;UzAVWsT|r[5T+Qت׀"͘iB vL|N(JU-/Kٹ#펵.G܆nvoOآ" :1_ciG27Ssl VJU*kZh֑׊Ghh_knG~*}`uIkIPʽB+WF;D1C cV>9ʳ7(L8#Bl4Wt?>F^_4v2&>Jk_k9Wczp���������]?;j%a-G(|us/Wuhj<vSL0pW6X٤ʶ를۪Uv^vCLCg=o;d~AqBU>5*̰ ;*T|aj~AU?B٩=iCL(mF I6z\=:|ToK 9���������Hnp|Ty5hVnJիw8|}Fȝ2!`{Ԝ{rUֶvpMdR-uC *?N~Up1QWUk{(�����Ѕ}yV ��t']?ztֵnK֠jTz~nxfo:)m<.vH/'ohrUt{_+Uֆ*Ԕ`{chԤtsW~@eo;7z15Q꺖mwSӬ_h厀Z=q[+O0ViFN+gjuǥ֩v6j׷ˬ�����ڪnސcq|?\z_#OӒ'9 >15Y$YS5cUZ|Uњ��VuUJ^;yj-vLdz*{ڰQ ?3^ OS3TrJty6dnا=F5OpsMfV/ w@*W4T9~U7ҽG ^4C;V\<tvigu{aR#7NSquz+0P7i3{:#Oֱs#>s_*8HYY6|����\Uqo<覶r<RiTr(?7*ڱZG*ej3k[%WU58waS��_΍fUa:3I5rebwgفnE7eT_5*S"pϧjDvo졽%)b[4,j=GkހJ.a-s�=7C#OVD-4RU�5mOU֡ dtӵ<k#k%ZD GfhϷA:f=iU@[՚F1+UCPW2mܦui`dWY~^#I^`U+_u�����{)\TN^[5.PTC 5ߴGT<*[ŗ`: 5*5T$5Ln/^ϚԸ}Vܘ@ZK.c<TЛ*��(*ֺZvM? Wq5UV*_mooҲ){bUr&_ʬe.cvQa_Y:_۴=%;N 4MHQt7Ce*0j18)?.yvi$5kWi[oM+kh2Sʴiir8^]7Nӭ8KjTM#푥AMS MSiMlg;T[h?]hgRڞw�����U<^ZV&J3.m{:m^ wjիGhEuJG+:S"TMKn嚱�+f[lqVo ABnVwP~}oC+t �N��truC997N/Xw'j=9CKC6h) N  Yز-q5=`ڊPɅCBv(wJih]S{%X&|{<8st T֖cb۳-TvsA(׽*YZZqM -~-WS,=ɾy}ȩ=eql{B7oC{6Y1^`mF+вk ^XZR}��u@"{i{MN8&W:v����ҬNy*v YԩyQb嶵A ;QWU_ηRU>0CC6CT6gϘ, hPͪk-+!}mMz2=|7kNJK֪iܫYG(m=&;5q M\T]jA<R駻er@Ymm.!K~Nnzr֟\jtDtWwbM-/op@ 6 5vM{AYC̺rM;'A��4UA-V?\BQB��AU��pPWJuoKoZ."Td]^-];iӂ63Z\kY}h8gZνwyJk܌8R)Hf9e䴶u8=[Xm1͝5>Z1ɴVOŪIímhtSh=BQ'\^xI+B| oro;֓��]-VrxVuKKT0Mf@G|D<�����쿆W<]`XdsUbWUkc ?ڣ=W+V+{4M XTYA{ilMt{ݦ rHow m8&:U?c\kNU| >KpU;>Z,aDoW >*w4XCW%5з<P]k-{b-˚f���X"Unp+NmͶ8Xz+Fm^Y`����NKbM<߽3wMw*&g|W{*C=zҝ5`m\=Z#Nsd 2{Jy*{ys% OJdvUG lt54s8@ynU35mh r2묱Z.ψs_'a8_���! �����jPY(/2F\`ڬJ+WW 1>'tp7r)=#tހJ54` 6lr6yzkw\NNK.>gZ{v/y>] sl��2������Hzt hָH;`=^u;֝8PHar (Z_Uv[˰g}55m٣Лԩl[kֶJgphtL9ʻ ju}ޠ{-Lsnoãscff<mj}cH[hmG[ ��X�����@Uf yytX- UivǯI T +S=[-~`}g緫R9Ѳhl{*3BG6Bu_ JKê VXk��*������H'<]5{iz)Rgj❾VmTݥmF s|v-^RS82mӠۦn:|&zX]Ǥ_V>BE߲wԨjm?<WWK{S,%m74"Et���*������ңZͪnR(js.Ӻ fu~vi59lUTY +noa_8L'8O!|bIp*erUJ+I%o;IʞTUڳǭ77jy JUsjֿqݮWOw��܄غu쎥nӦM!N=T 6F=!p" j@uΰ�� bSudJ)0KJeoAiJ<T}4zeUzULʶǂOTrc<e!5nvZ@rnߨs.tksFU\Or4QҴ!cܬd@{ZyB*S$2 W*}j< 2 =5Zcf@eoWD'm$Y*|.O?@lD_eّ]c֬yviQuHQ\#nG*J14Kn.��|~/Vi˖-P۬]6_2 Hz"eB%%J9oHa�>r%P8cCyh*$T0<^Iy)CׇY֞rCBL7M e TSv|gNeqeSօJ/ ۔=</41R)Gcym=[*GӖcҴ}EwcS`TihNPM5Op*Y.Toacd-.xR-��t}/ӶX}4n8w kX4 spn Vkhnd(v�i6k:^��}/S?cĄIOěDȔLyH#%oRN�`{U��p@ (|{:h:��|HjM$RG+O>5ʓ~���~͵ 4vUjvs\W+[>M��3贁Un|v2(����jP٪z|F[=N:Zs14ѠTh��S2'%,HW=���VqW)yUV^ʛ2]+��@ԩNMP/?T(]r jՅ-ogNem>H:xkƷ8iNvA1/N-BE :q[")vke>K\ _uGRfΩ;֙0n>����WkCM۴*P/��@g-*EZN𕋙cRV_v&=۶Gtl}  -iqH&<RM:iPUG/jCRMyH^2G{^̱8]VnM,]7%o.\<Ibq~qs衺6R6})-1Fo8){܄ִ,]5%oD)]6w&>aT!fEsW,Ԛvq������� nb5.8Y+L@1]vipkxDTLkAKwy&sYՆ6BYɴP?9:ѷ鬘t RJs\-=zK>ٴP/]|dv\;�������N)RΟouWI V<+Ek ,0LWP–y^ڵھ#S;~n|--=lɳ7RWk|$g[iŧ׬BowjWLZs'%lkɨkvݷO?=ӟցoZ z)8X >e?Lj"N9\=LQeSy7G/1ߍs6@nqR[[뜋ޱ[ۻ:qj}q&^}oQRK+(<<YOjnY_ ֲ5DIzkJa>9 1;oqp&d:ٮI1KozVu]}ܬs&[&z>ZJ$^֒lk9L'n1 [uȹiFZL?s~]h rkӿoVsnm+琷Ik k\#IG�������bwɓ_Ӿ}&ySϢ5zWiŗH;7ϡ{'vW~TxF[zvo;o8 ?8wܝ&+ZX5atgk~]8W+2Uj&}3$;: t?dVw<YWʷ/s{pw:psMpY =\8zͪkdx}W˺:^wNPOkybӓejΨHis(WZ[+<J<O;ooֲNSV|jV륰5{\&10Y|W+ws:wߗXOٱ329yudsH+WVϨmK>u4?Ԉ2WW>uixzV7s?^ Myz@S缶k2I~ L5}洋=8ǩ`%ϼ:ys(!s<RYc~>!0!w������-Vdfp3=҄WeZIwFʜ[^^Ctٗ;w5Nw9WS r.hǣSZ%:}kl]DZ?R;qoo[籚p'TYPú*S"&N6`AKL}-􎱛k%z>y^0܅5㻪DE̱r#1گfa<C/y&&sʝ'z}WYeԍ:~%zjk9zhҜtK^rvؖޑL:Pkj׿]Nq\[l(7^U7}oM霴7'zsۜ?6<ȋ̏^VH>$vrd-Ǹ!}lo_dlCܬ5'9[bƝ~|?gwF69'/UQϚlVo~@]Oy^g, sA<0}y_)DMM${?{<c` iEx MRֹ=4?Lxy_}9dD99Q,4ЦV�������Onfhd߹-xX;Vn9FݒbM΍[G)pГ4ԋ#7q`сWj0ml]bu?A 3-5Eԫ5[Y=O ok-%oLώ=uqهOzҪK4289ڮ;`ׇU[#[3M6õ03RgF1k M.{̐n'8ZMc_`_w>3jw=g/'XNS=]3ǞNsTIŧlH$gD嵒7O䖎;-^r6O/OSgәv+O]$f59-;Nsn.wORvVXu7`^?[ [ﯧ3y&J<3/IJ&<S*_&nc)2CϿ.ε[]k4l32 |=|>k9Y~?rDdE絒������� Nݝp2i&rq矟Yg_+Xy =UpF&~9ֿO%잵^][{OWUޡ͍-N Z)v܌C#*R?{}鼃GFJ|ʝ{v^Y{z^zzt'/I' Z~W`uɏYvyn汮ozwe;;escem9b=_Л%%tQs <r_yp󼽟yroK&������ OW-X%g𱧸ӽ[ mjzʱ )52-+עUh8q[.s9Y}L9'~neOLnii SVR"&J~N\cVA-UYM5ng y]YF'#<D[ˤKN;nDOI&xOcZE%{q԰:]NIxMjv]7n9'y֑$%lt3-+[x]ֻ.[^ TW5<lY-XϘɛ3Y[o֡e٥iktÕX/2<{'X�/)+dƽ幙yDMe| ⍷YRi N;õwsz"< ӒշHdJ,$gȸ̘|;3& 3~ҁ2~Af2"Z@wEDVxOWbڦyͳ^;?sy<K#o-4]er>u[VvzHdjݹeWכ-\g+UNÿs3v?gZ �םϷ8f>vqZw%vƶN88ooRՅ}犵)`LMϬ\kOpΧiէ.m%⇯{t$&U|<[zx)ͷ7 1AK&LU]]jmC*]exgO<׻<i;-kޤgGJ|c~=)'wKUNU=o>\]1#QKֈԖ�������-ZzM'3~x`<H'�qeqg<DGg֩|JO\ ҙ?תyek֕LfZ g:,|JOk4ʻ)5OdN:V|θ-DMΘjs,G^V0[S*#q7XG:fWlu~rSxՕNK@Xw [H&ŕSj]ƻ-Yymw^~\uueGڅ 㢟'JydwK)3Loo7ݟgyyDMcPa]?}炕jUE6`t >}b]JkV]Zӣ:bsm]Uw{I^qkxy}lq9şxuZ{y\g3^VJ˷3)cpfS"&LmxZnz*H{G/<-Y~?LQgDz>:vW?7g=rNSOPnfT^hL~+ �������j+Ǫ_%Ma:0yU>~t|T+LgNwZE%v?.+}cd̔[ΜMgJȲ~O2]kޟ)owOksͶ;VSuq8K3?*9i ||䈷QjS_Ɨ"eS7*Zs o?}Z"ySg?R}J<yN()3-O 1*<'3ٗsJywU_T[&w>v:?Z_Wuesnk|giZ̹oѿNs&ϫvۍm)Nk֤N-_9ιp^Mp.1JI٭}$}{?g{_o7XOV}=iTmmk2-�������:^PflݺUvRF^z;tz'tWc2~w۬`RgOiGm@th9|TQQ87:ֻ^?Cti@uΰHyV믿u>}&[v3QGd!@=dSu^\ǵLh 5<W֥Ꞽ26tw[Qz^{kР*" "=)Eғ�������dnUO+ۖq*N98i6?C=8sS"ʒښոGkWqFqv|x N+KJ1qv<tE·ÿyV I�������U~+t ѸL#cN$WԞtfĜ8l+OJ=DVqz������� ~F42(@, �������tIJJ&<$RGdC)xv������Dh ����������IUI+K"#%,{D%u�������֭[5x`w,uv! >F=!p" j@uΰH駟_`}HMM-Hwfv/i=ҏ: CQz  "ҏkuM?C&:S5l0w,wpv�h/HiQB`UzH? 3PGd!3z0zH?d )z4n8w ݱhڱ�#F UnTe!@=u`.ҋ!):^P}*����������tNb;LX֎=��][~;5f=Xjz47iOnQݳj:?"2~Af2H/ZH#DI[G߯ԁBw &LE֎=��E`~_ksnf7c̻l>x֕ze˖2$zx=zб?~QܴCQz  "ҏk!FXMڵkiZ QU�@`i_wܜU+ا'O 9o *_nf�nu@0)3p=BzX 5kp&wecѨc�@{XEGymzF{Я|Y=Q~hX}fzqst!}_c~\c=yQz 2Cq-)j_`.՗Ꮊ.}m=vY;:=Ot^]C(}6kѺ:ic˟ֳS&G/}vR[j[ُ$T`v:w}vwK)ۤL]}w;hyj`Gm<g�oU{kwoY#pL7@wawN7K\vء0҃Gd!3L \ǵ^V#:~U>&&jj\3Nz&E}駑BNݥ8w}HĮFoHFwzN4T/yCuhiM_d!؏)xOc`Hs8eʭΊ=ɪˬcMzN|lߖsI���՛ouO;�ˇ|I'Iww���@w=%Oc[pkxDh]t33APk.?Ws [ƴB=V;yjcn*{R/غ]p&W`c7Ηɺ>��sG{�:Zޑ����tjVzRÓŝ:~n{rN^n͂+_񧅾VY+oA oxd?gOjr)B bvVּsʶHrnM?s^xq&PB߶|E8#چt;Y;}M_b_H SkriOh#u/]?)lպwt#StVǏԍ/gGgu'ؖs~j{S=gb���������nbVϳ^l٣o[u;fuWOzk>[u\WFelZ+V kEKzkm]ʚU~mtkHwwY^~ g:\ϲqBdEZOVy{-w{Tk]bÄQ{ХfMb�=@xg#uj3ɓl/h=25zz?~Yc/X7xiyv-9z;Vzan| RWʜs*O��������[jpoş/ZIw0AdžՄ*PblHúe568-^h}vP;>,=|o){kV5iscx{dZΑ|ZA;4i΍_wH!%l;`1ӂZ}zҿOְ[~߾[^ʼU//:)'ğ28rwF^tu4C媨VgM~Z\moYUckJ1���^N|;r_7w�����Kn/29A/k(:MKݪ5ӎMM S65EsMҎn˰~I˴7N^d81M9Zb'l t4||ȺO=%<$kO7OdCK퓕p'.%g&pn션e䷒^d?SXj7�\{^e2}ĩG{y%���+3zKcD菳t;����> Χ0Ak䦝؝xuaomR?]Uy7^0T<︃T=uhg>YiUzj??ǝ:Me^SjW^r>c}6am}���p4 �����Ҫw:Sn05a zFΗ>>Ĥ;RT8cG\TK)5{5.|Ɣo]w\mJ?=-3or[淖W6q爓'9 w͈ocq1-Yty\hR]&@p6)j^2Z|J?ƻRexþjJ���:3 Qe:ĭQ(!&�۳FkzIٌ{)E1?-n_ӄ����κ~UYWbӿ=ӺwwnXNp=uFiҵտ{XS*hdwKA?s2\;.渳Mpzyg.G?;K#oaao>*wv)ehz'|����~_Scܨgi_Ϟo:㵊ڲפע_453ṷȌCon�u#젭]ޤG޳L>J'ady����nXUa*[}XR~֧zJ<e걧 |b՟itܑH;y얧;-O)߶qgvĦc5jͭ>?nmkmKU/[io'lQQb?RK+0a3n KF^j-Su쮴?z*Q}ZiZ]~5:71l{mY_n-'MJN���@uWurO/_s{ ` Op����t_ݢŪ̙U)a:,4j{?u&;OSzZN8iy:ZƤ֧g͕*'aI,4|<具Jik{bkUY?5zJSYUb;BkUsMUIqhViUuLqx<߲vꆏnUm9���t~c4Y{տzUSvvkw[_uѶsʹ~yFhJ����=i֭[5x`w,uot饗cDO<񄮸 w,wpv�h~oHc?@;UգG92!ƛC>kFH/\8EVOwmzȴb1fri^Tu[q֩#O[L1ZGsm ˏ3jϚq3F>Ad!3z0zH?:Kݧd:~����1S=?uyQY3Rc9]qϾ?u3g8k;s;Z-ܟ.����]Ix*)m)xeI6���1r◴OZ}3âuA}jgyQNWYzf߳/E̓vjd-jk�����ZjM���==tVZ[G@knu<;`g٦+g:^η˺7����н0|ñ��������8:u`By)xL��������EU����������HgjJ$^YҁM���������8pzٺu쎥W^ю;1dvǢQWk�jt0tTC;ҍ7[|֬ߍ^p ;oMzA{ꟾs=3f}Yw @d!3z0zH?:KIkU6 ��E`>jtcD`??hǗ:Ca7ӏ: Cf ҏk!FX��@F"Ѓˍ_z{<}̐+?_BO5z?fHnu@0)3p=BzX ��D`-3~OlXs.8=F |O4&Mz<XwX} ͠�F5?fayQz 2Cq-���HVSW뺆‹u;NYmݩ]?b ;Zvo;qvyC?ߧϺRϞw۽lٲUCwZQG:ӏՐ:zH? 3PԃA]Cq-���HVSbz]crD.*7JM[|nn@=u2L=Ezq=BzXUv���:A)^Oh/Tt97[M5ewUk"{ˈgw'8-i5z����� -V��ZۺB5!?^kVZ ֳ7h"Ejs5nNbWǽt;ܢLtY{]kwlϻ(;#N/iJ LA=uB=Oю?վ}ps;& Cf0`P~ZQ44hqqnNDՈ_E`���)!Oc mKo_)auΚbet!B`5l r3"2Cg?~~��m? ї\FX��@F"^[WjܢW|?xu֬QR mG``Rҏ: kfZ??숞!� ]>T}qwt2X ��D`.xVc[EwB; *LA=u:s=)S[poc�@{wyN:p{3!8���W7ܑoJF>X~w?;F-Ozuȼ&?8dd]yc qveuO��۶v߯& �@8_oRC`���86ŗѣEsYi )|ܯoVdW[񝠿SyBzzW?֭3~��繪<~��׳!yj3@GeHWv���2˟O>D`>|9iSN9 ݵQGEWP4SPGd\3~gV5]�wʄ ǝ< 8��2C_&u6_W������twV��Zkҥ:ճgOz7;7l`VTTvܩZ;˗/[oeOӟdz5����VdǸ#Ϙusgo诫wG�*��@ L |衇^{~mhhHزg֯_җ+VS����[=1&8At�p X��HA}}-Vc9Fo&Ol>5EEEN;n+_݊մz حY����4xZh�2�Ussy̘ TVVgZ W^y�soijZ˿z)i}M70����ug5iˮ/tԩY:ͷq7w5pRGG8ӢZn׬7?ݍY'Y#zC̼iB;ݮ f��&)hߧJ u~��tW^yfΜ;L]v-S?3͞=nj=t!h߾}?\tW_/~]j3j}g+����]/?7}׳={ڣE[CoE;&=oO󻾬!npG[=:>=H/yQ܀ ^SL[t>GP{*72]ZNwVzI< Z=mwjm=1*7�p0XM suSuD��;1TTMڵkV&v?yGݻūijzu7﵂51e����K;:gsp'zwߗt\/nL|O#<+v@Gzc^Xҝf=f>uǾZ$_{CPm{?rTV֯*}=d�CXM٭o~zrNI?5K-^t5|yG}z+&˙;ǿ~rt �,Zy:餓Ë.H&M%_駟/~zy<c=V~VӦM���@W6&P_տzH U_c7ׅYsE1�C^X3-{e�pXMbS:gfT5Ao䓏 }Q{_ĉa*tMhdϚ~ETp0ArfͶegw~Ь[Inv{7;-rg}]�LgZ֩ŪiEj>SM0մH5L ֦����R:3Ghne4Ct;n^Qp 1AUթch/|`>{"] �>]y>i3iݻ7f;Y]]m7u7c˚yL7xuG?Ҍ3aSs;wO>��NLT󃡳:nEjZ馅ik����9OyFik\mC"|m@ۛ}I[g^ ꎙ>5eߝ.(%>v9|6I' �]yj7C.MkX&i������;FCNIgsMӄ܌L+O_Vrg3W}C߳FS5jM:|<{\1riˮ/t\]m٧}fOwew&Txϔftm �ڃj1l0飏xg gy=S��؆ WC_W >+tlݶmcY<@0s<vXf����tM٢Z/ZtNZj^|˳k#c^^YZL1e;͞Mz_^z}Z)|g٭o2[b�@*v{^M/Ks0]h֮]cw1AՊJsN�^{<?~yj[k3occۄk׮׿o) iG������t]גe͛뢂N˚*,,}Q~T__gv�3ΰ?zꥢ"{MF*-Yٳܬ;vwȑ#u5(//Ow晭f8;;[Rìn������t] n^kx ?]gpv+Zx6]{�31-V_u=SvUCK_rNҒkzg{-Y=giJ U������ &Uμ5*Ї͟;{϶[ & ]>ci&YWi1c2w#޺Mj��H3gMN;햫[tƏ΋uGe9~?zh{ZfeeB�������VIǩncaIdL٩&K3gn8iZ<3:tm L8qoY6['�����@Wӧ!g>_�@k\PRE` hjj;n5z'eZ�����} v~oMzC{��[;dz iuV mw X]voy&z76*��E iǎ?kx9c`lPcƌѳ>uGs5q۽#zH? 3tzxM}k> {#zˇ�tiS}?᳿0l8B_)l}jb_G{z�@{XXEG"^2~Af֯�L1쟏яK_}FX��(V=Vё@=uB=Oю?վ}N+d˖2$vCf0`P~ZQ44hqqnND`5*��@F!!D`5&e!@=u`.ҋ!ҋjU��B`]HO?];[nմQGd!@=dSu^\ǵLgw۷o'|���������8���������@V���dJ/fҏ: CQz ҏkU����������H*hs}7m_=d'<\tn]nM��������tVVPYY~K ӻwo(B/TyIM]:��������@XM~W9Ԁ[ <8oj:=3:ꨣ :x/K])i}3g},7As<��������&aʞW_ Kt7NUjoد޻D/r5ԣ>Fg=&zHR3я~O>87<C@Z�������.j98+W޲_+^D^޴xz-MsMjO@?竡Aoz5_h~Gu'-7=-fRlYx̙_p9.Lӌ:4ui+cҁ?~xVٗDb[+{?vf_k׮#=L}ofy:]��������"tkZ" =^u_ `ok |~~,T/ô0p-^yet'+;;[;5u=ƌggl oaaA7n֯v9S%%r> zqS.22&Wy]�m2ۖ hcm9O***f1_sḻI's]Ν;xbc xO4 8e>|ν3ekkk|�zgt۩HNۧ+<ݔ5LS66H4O"+V5vo/pzK#tu׵ě'HYY.~"鯃T.CF*W5?F"\؛djjyݞy9Pׂakl[ɿ'}-Ӥdۓ.93O"Z/۟Rӎ?_R=[-ߏ{ts칗|mmDOcؖex2K.>dݖDe2۳s?-^d!ѵ?F窿bjlϿزe@G#|?i}AGygk~5 X -;imؔ}睿_~ӧ J`yAI DCؽ{ݡĶ5ARh6ne9.9v&]aQ3O/`lilǫo1*;l0;Pw}Wp{9E$��y7UQQa&r-?b}Q{׫ܶmy=E~kc_j$a6yfNxLYfc .n/eΟID|4Dcnn<7=,_>/̼ .lOu0c,gԩ.']Z_f:ɏ'5csc37zh5669=u] Fcm>tׂ 0u`U^^SN9ŝ9m̏sss5bDf8ׂіGZ0yLzku9d9fϽD)hDՓ_ke7nhI z G9=7Den fzsU$ۇxZٶdׂ[L3?SG`Ǻk+:99# ~@l4?x*`oyd[[$~')~YGmc`iE$ڇ߿;H5p3 x-xΟX\4�+ٳ}#sϷ^&zRVV=<M�s#oرvceU^Ycncs݈fn֗I֎Ws| c277A/kr/㏷o777~h1c&rls eG[='֮lSwnI4oL=ʕ+ݜdu&] Fcm5t2֕΢+_ ~޶�LbӁ`_ ̶:4s夓n-|xm$:_ͽD}滛u(OzTجLhZ;_Ӗʚey*]ZۇDž={gtker@&"&: }ؼO?/at/i-M2ymu� lKWp>0<^^~AWiij+S3}d3-zͲ ݁gӵpZs��??p]s 'Cslʥ:an_ox 38͉fmn*F?M L?sCܔ3Rcn>կ~0dz7rZ[9[n 4xz~g#k;FY"Wgў:ׂʱNIڵ`TVVڽ*L+_ *aUk-ߏmWcxv{??O[ޗR-k\W4H3u:|ow\#ղml~\W=B{?S-ۖ{-n^WZj>/OeZXt; `gzZ%c y6/6ţd1AU>fvf&j0L߉|XX?o^=mS}ZMwLJ`��aZ<_'bnZy5?O20;”)S-d6]M%۷tJXƶzci͇~IfyᵄJY7 /ӽAR\\N\^=$f̍ٳgݮvnt%93Z۟Uӂt1hZLdz-:]n]FVu0|?:Pׂٞ7fsz#F*my_ʚ0]-�iIZ]|*2Y?_S-KmlMtNt[gl[_s.gV@XM mԲc4f̯C$bM𱽼�f{|gkz&gw&b264<PLdA]/(m8м&8fy^j�`z[kxϵ��5yݐZ|276ƍg'b1;Mˉd`+hl˪Um1{d673VMXwSHjԱn e~9nnvf^sChK=V޳s|1q:ίΓ1,--oV s2L]tNm9;õ=-uĵ;ׂ6s#lk[n w}-yR9~Z,UЖGɮT?_ Bez+zsc~Z:іhM}9vk(ueTeT:O[>{:lM9D^khgts”ffF`5T5gU[D 43@5^7:lM<U|&y^` Wӂre*7o:ƛ_R>;ٷɘ|Xyf+`oT0+X2k �$q!͔شXZ6C6!+*Ys#03H0{:]AU0o3c/7;ɎO*cwkUa7w<ލoc֣bJ+tw$;:O5g Ӳ{9f.ZٴΤk!Uf}LBZׂ'uԵ`Z@3/Sk;Z|I9g7^Kl$;_Ӗdu@U#RzM[mmi=ٚ})9{]e\ }5k!uk$^~m;jL+{Vn]N9~מ}ˢijF/Y|SL7fL3 Jaݮ7?'ݷ57//figEex)Q@3G?X&8x#u%|ۭ]{d:c ٠޾pOck+`543OMTټiEjctSy2ock?ƼuS[܈=Vf,]�X?n==nm޼~fC9ޯ['bn�M]տhn{ X/湝^"uUNhb֎Jyb$F'ԛfVf~|W3ߛcoUwib5՛-u՞ybv͘[s*FbWӞ:Sִ=-ݺ`a/?uk00m%5ЖG`,3s֜ۙ|5><my_JT#ҥK55M9=񘺊]3IiRkeٚ8֞kgtker zoc 64۲eH۶1ŝF"u{{}{GO>8jBևl7GH$ҁO7|?3inn-X Qݻ74mڴp͛&r|y]YǿoO$ *4>&Bq$ČaD`[ *^J-#AC|FG8 h-!LGpepD(?P kd<~]r^ko5>[׶OĈJ?7tԖO|[ni޳gOmKp>{m6e]8Rĺmlk۞??x}W;l3w_w=g!i|r-Bi0}l^"װ/E?g;ZO6Qt[>xu޺nߠ1S~mDg_¿_;zO祣h>4(Vg?W}!9?󧎾Ѻ_Vp[PXaҤox nu &V|{-rmd`ZTOn+�$qj֮])--{un1b�?~ �����[]lV6bӦ[umlֵE]��������9�-ﶢ6c8V3O��������4U�ׯSsVSt���������=`���������� X���������8V��������� U����������`���������� X���������8VK?CG����������UwyG'kޜ'|믟 o���������;8>s/L?No}z&% i3ڶfVal!k/Je[v5}_;v++BG|u~uߧ/8Eo!z�������V9g_]z02ş] WoRsVUW]-1b Bzꩧa>/В%?n@d!?սP?tiIZ>%Km^k&7v齒|M[ޫ[nrjkkgK+#֑#222[u]?gWOsh��������0vmW_>8XEWYͯױ&e B']hec,ۊD[ϯl'ֱGBr޽nbmO7(٭=smϥ^ꆢUUխ˶msѢb7oZ[#\R$ ׯ g6s `=^ۆm+WsssDBR;wwֳ놮#p_ ;eJ}X ^Y��?W������#XELZ0Ƴ,Ȃ+ D7]$[h;]qm*MUXegG , n7oKX 8_ׂs0жj+뢢{5mzM?<ʊ~9t VDd{_*)SX:{A?|~jA]`uΚ5}myR_7npiu٣N5;[Kַ:ټ={ȑ#Z]QtUl4koR- ��ƍ�����@i}n֟}|]}Ʌ+ j2 NՇ~W &*>jK 2Ycl+|nPh˃,`\:W^>UZ@/=zt+[ , ~ _B[>ѕvNVka_nf!]``_;RX]1fM8,�;/X{{V_dC0mU˶W ��������Xz3JLyi35 ,8˼9�YsܸqK_tE^Zf۲c m[%U/}_k0Z(}{}$PJ`@~GƏ=[Vj%Kc*2-\+ֳ;ԩScW:uOJJr/nj}bJK^tEcw}3rȄ�������� j,@}9P;=0*]8}?~hg޽}?= PcRxuB; ,,ص7xp`U~Gnig,&[+Z]/Vl0ֱun58FM<BR9.;BW co9`8o]gS.cc.Y�������� ,]p??D[zPՂ`YVi9 NV=]]y*zԂ[@ȑ#nLZyUƺٍҍful׬fJ֍<tܱh.}6??l/\ r;g��������00 @YuߦMƪDw^%_}v6 ۹swӶmUo]T`hgoLس'3��������wV�^jW qVBP? j̻q*= m`i+`?L\ݼZ8kՔX;֣"ҽmstkςc]}K.vYk>S :|߹5Ϯ?9-��������Vx냏vYd.vKȪ{ngOZXjoo5Š�&Y(j+10qٲypUrժY3l[>|ȳm6tѢEf!ZYٓnu9^WmguBquMq~G+x�������'=;vФI^+tU��%yUvzOiii w$U4������ݣD*����������A ����������q���������@����������*����������A ����������q���������@����������*����������A~ѣPRw<9]󎷴{,]݇ o=r]=nmӽ �������0_1byi57o8c�������@BIw[_c_xsͯɊ$SW?ꪫ �������`0#X;{ ^v{oTWEV'|⭅Xzo3>������� v _K3w:XPԳn9}\6i7g;c5>ŋ-i-㊮ċ>ʺP]%?PNN77\=h"0x]whkn-i-ƺ&^_^T;s oplUb}6|| 3jȳ"5{_$z9[P[oyK[D7Fq}�������Yz`QfCa|V6o @,(y_WZ>zJPHOKy~|yid{65݀TqZcoɒ{K[Dgg \oZUٹW٣#GxNG}NǏwζ_ZZl'#mk\k第:UUՑlʔ)nXiB* ~6]oّ,C%r;~ؾ]fY;#G>omimY}ΧOk͞}kd_vlW\qgc6n8궱mc֭zwse�������@B>H/ UzY -HQ -*v? eY`aM3۶msC`jobgiQk=;;o;k~+tww{/ ,o~1c N^sk; >ng\Fpk7�66!Ν;�֬YޜcAن < 5۬3Y)ӪU4uV[7t�������"XM ? 9D3f$Y6 J.țӳ,HII[zV}fV]? . 8lyuNG6(VH[ueȑޫpм~HfrEO:v}G+[U}�������8xOV~7wp .Wк% J78o<&{dU2~_R`ѓv gVfn6&L6k`wyݠkCk`[A~ER!U=emwjq}]m؟,,"7xߍa �������`}\Y]=YW\Uog]V}e C% VZhpa;<w~BUĪ, O6c0�lc*4vܭپ.vֆv|饕-VOq*Rź:sօx1Xc `�������`ǃ~"W=c_xbu۞j7~ Ϻ, Vnu7 ,YhZ/Yڕ$YcgcRpQۖkAuKrʔ)nתRY埍^UGZxG sYgwɑ#G9ƪulVjժVD*O<3dL��������0vI]f%ݮW~3-,ᘢX[GcuV讻~_ם f <;{J1 EjSqEpdA+;/֯_*%X7(, ,ijPoR566_mǥٱ֎ƿeϚ5[ҖNڱV7,3oϻm'mgmuo+k';ɶ[U Wd un}׹m^ �������VӢE4zU ^O N}6ƪ7w„5k@"8Ç#U_| J-ֺ ulҥ%]nl= 7$uOk 7F)6ZZwrΩ%v|edd:~ VkOcmlYy;Yd]QTTz[�yKڗ=ŋ9.[na-.țۖݏv_:{R`g~ⷧ0r.۲ N뷵 `}̮�������``KjvxĎ;4i7W芆]|n50XY@iuĂq _y"6[�[yG`U8P5k׮M^O�����=zoATlL VHb]ZEE6[Eu蘲�������`@guhQq/ۘ_?n׺0W9f}o�������*~: ,<\~OAmַ1um Vƫ������� :0*��=1V} �����D:�ГGzw{W_%X�����@ +`����������AU��z]X�����@B*����������3����������*����������AwOm��������uW.]=zԛxh3��������GG}Rem;BoK}{֯_?ߛ,LJu_ ��������` XM]-zt?tgբV5yOSVV***���������0P]ƫE%z{~i/}YyVd`7uEw뮻} Vv[m۶ǽhQqjЫJޫ0 ��������`!XEL-_^;"՗Ǐ͛5O>D7ޘkuH7wB?HިQ.jmޒ%?~9ydgyZ#Fpn,V|)R=jVM�~G ٳGcm��������00&_uݚ:u."oK_}7ohrrrZʛܺu^yܐ^w=H=Z5Uv R[磌2l&3e7ܼVf���������j_=,OjlUou~z= oǪ-P{be6oӦ@UIZ5f0dm$_JJƌ tu׵*qPOU&[nEuwkh3��������` \}c/U#ZH38#Gܰ'糠C i{øqjͪq{UZ-_wK�������� \]0jJ9w}zX;|??\�΂81>cUc5iv/2ҕ.m��������0pvG}CJ(*th"7þ΄7}UuZugWY7sNB!]yޜE�������� \d]Y3r 2O>}yVΚ5 JKK;ǭ_Z**:hޜΛ2e;>飏"`~.-Qnn.Rw^wT7o }\%���������&8#9_N 仃ZՂy)?c|EgV,l۰wn/Ԧ`xk͚j7�>|M`g[66?F�ӟo]ǀeƎGqbw1ikkk#ܧů���������fOرC&}{hhh_ ��[8P5k׮M^Ov������8}߫VU��zo ������@O+`����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V;ᮗ"yK���������� f x냏*LOSw���������`5ǾЃk7/b=v˷����������N'q>mW_���������p!Xݏ?<\Zz3n5+���������`5]u@<xH[u}VB ���������Vg끙Wysں~xs��������� Vqy3����������fOرC&}{;¯zs'6o6hnk_jhh_#Gzs��@IfҼ]IޫɎ������{j6jF ?So}mWO֏]֗V�Ic�����@pZj&9_ܧ*���������G� W_av=TR����������*����������A ����������q���������@����������*����������A ����������q$5;}bǎ4+tſujĈ��];<@լ]SZZ6{? c�����@Q ����������q���������@t<>\��=ǁ�����080p=-]ԛ�}%�������V+yM͛7{s���������`5F;4q#oǯJJB]QQ9 l6s-z믟O>[fmM~^{L}nv 6Y[[wUGn詧bT�������Ʊ便ݏtM喙yk>h-m` `,##S3f\+›s,�λ+oVA]6A[s7no|^/ZTK/WOkvOk]uUfLBwzM٭Ϋ*/l={t>/Rm^j6^׬,wpuE˟yiwk�������EV_ݦ4rę7Tjj;wt;ï8護r`W0 Ô`pJ%^=ϿUFWM~(ilMnsO^Y�7G߬YG;+_Ғ%?W~~;BeJׯw?|:7]nW[[͑VZSț#ͳem6mݺU= wos}lٳou#Gxs};^ V܎y}Yo �������` "X킊7կ=ɛ3XcԴiW .p+߂M-ZԪ̪΂U^gw8,VU*V۰wn^X\a``7Y5u4 GXvB;;*K T*=<O +-l}-袋9}Xi֕\}=PUU~ Z�>}ߏ?5��������j'ժsn|nJ;twݪoʔ)n ߯P(*�XaobyEK}XUfFn>w`[Ocmƌ>v{ߺLg4߶',]Zָc E>_~7wCzرb-_^TʫV*ޞdԘ1_TFWQCXK�������`NjUwXZ ӛYdI:tBBՁϮuۙS_zcΰ'XiajmualAYg }sGABݻwm nڻ[%~W{s[X�j]s[h۸Z!oުVmǒƜObU�������>N8]U-J`ŘXWʬ eizK,0Yڭdkmo˗]Zȑ#̂cZ_Xf]ۏ VhQq@>ʞlUm*>*c`G ~} .o&s=/}VRj4;.^2�������нV;tV{P>F< pTYrV,F {ϖح{myK{z,F`!U,5l? ԯ$OW^Vc[iɗ^Zj}nlZe-,'{~ո`p.͛7ݟUWNOت~et{]�������.ժB C`ᇘ$Q~^os֬Yc, 7Җ[eQ.rdz4�`>X*DK_}S UᢱقG U+[-XL)1X-Lh[h'bug|:DUf^;_1.8.j�������0p&tV(|[lcvVef] lu} Т.JC=~^4 ,muwcݬZgiҿ^9ծ-~ׯ_xԪ-YWNN;t,v+\-*ΰp>6cnEl{!vfVv>?{-=cǸdR}v_�������&ժӦ jU`fUu;`{e%1cb a JC)6YHa:T�ʶe۷` U)^wunf!Pm+Pm\z-ST>޶_>GT!;8',X%奁e[TQRUێ1ٶCbт/l]vDiZբmwʩ^p[ R޿FwcUVV86T0m_=h{�����@HjvxĎ;4i7W /t,0,VŪTou5_8P5k׮;zT@+ҶJvzU>]VR({ӕ�����@U�hUZէU;|O=EwP_ʇBRUm<:k%_\'&jþ}@ �����V icZw6vE%d׺Cm8�$rOQε!-[]|������ nt<�� Ttܽ"}*MU5ylT*QF)efʛI\PR׬SC5Vr*`WUDJ[m@ \j> }H%+kJфr`I &6֊KUbsLe^[�����]���T*nR JlFoijxͼ,|Pj_,VNhTw'(Ͷ4}lmؙ͉_n2MW^w `Ugu'T�����#X���rP5+)tm�8-K93ǫU^S|WU폛e4=m TzoR25k_eHuqSmNV9JA/WʐRY ︳_9SeQӨJ_nU̶jٝ*h8lvwzx9������ x0hhh_#Gzs��@I*65 vEr~LvgI[ilFtZ5<XB/jl^u~=ζm,oTkkzݵ*huYbzx {׋4mdeHM*NeӞ/j(o=�����~��~~MjiPՄWZɊ?sgdvvMHלY&+,^MQ14jl,oЂ%xD͜뮃B������U��� ZU=bh%IJJK:sC9`%_}ڷXWh%4H` �����p#X���8Rˬ ]x-1֪Mz LQʵ5 rC{yRʘHvkۃcU@V-������8b@'|9}YX[X=%% LyfMwyǛ�ݡQUϕ;YQqV\)%O)<_ժmq-SJ[34}^76UYd;*\75TPvS֩끣$}�����_YtvY5 v}=ڳgX')??[�Ze9ʊU zArorוzh㕮)QVJH5LnZ `MJFR'joXRRZ9WS2"c5RT$_-&^+ҽ{:}isb�����">n~ZiE&{m`E`k֭=VǪ6zsUpM88Q 5vUlt;bLQ-cJWպ&O] 9G2sGm >/Q -IUFt BeOT֑2Aw<s*Nqv,{vsJTT٧Э0�����`BG}_R]^>=eP>566g[Ġ3n8(Gy-T%K~Sꢋ.ސ9Cz+7GξwxRTTuU=@9[o'<Ӽ[[~[to.tW)ѓZ5{[k*TVj^8՛ۼ(#zt{qP9u!�����V?CMtWxssnr~~7wy7lKڹs.R-ٻwe_QTr_']np?ճ>#ϊk`VX6EWz^^'*x,:[o4fW" n*:jәsvHEkЮ]6޺ς+:YZZiӮ3<:˛;ٽ]UU׈#m?'W_=[�������@"XM/5hsGü9W6\p*Sܠ7AT00@&Iwl{ӧ\zھޝoi?tu- )v]zeZ]n\ݖYX8_;w68Vu@;ޥKK"cmJuĺ]~]]w]q;mݬlVR]ݖ|ߵڟ=y[YWF[{磌 ۵.|:H{YXEj~nov?[nr~kڵkoӦ8ylYYY}[ܧU|s0MJJsC>��������'q??D+ ozO=0*~;o+Ǐw# Yaᨹ0jϞ=k[ʗ)͛7 I,, O>m[Vak}Z(Z�dYfMu$ycw ǢVAYGoXwj~솪>H^Wcm`cZkl0�0+p#? gm`48&~1~D��������V-֓^i;OW\Uo, Bn@dA^ DzpĪV?vڞDi %͘1c _Z ҂*Ǝ˂ X+Yc/*x ?+;bhjOOa0`DWڏ?z٪w�������  UXpunw�`lnAV)hb B-æhVzUmZ7Ek׾f]3B ~Iy7^=,pܝkW~d VU������� qXxuCUغ}9n/]o}W-^Hp3rYxoUVe9rHUmZ{=eZ3_iY7˶ܮW=OvoO̮_*V*��������}`5]u@g'Vy:}z؛3xX7dX ,@'*zSD6&iW.MOX{^=l}6)Sm-\pȯhS5O6֨?驲߮ݻ9}wm՛:*L'ONoº3:V<gcU�������Vq tgk 賕~Q1:?O ;`[hw E//m5VSO=>FWYe9glOͪYf~Ok,ݼy* V9??_Kܭ~`U?̳68nye^/3V%k*uSW4[稽jUn) Rk^ZZF}wk�������@!Xún;W ֚zYޚ pVV7MVa-ޢVcQ~fMu֯_7Vb<-jϮn3,l++{U7ʽ"7뮻~U^ig6lj͂lV{]U?[;YYde%smp)خ}ź;+`;F}cg<UV[G>>�������н>cM A_|qU �]a?p_i t$qj֮])--{un1�����{߂X�t4[jBU�������`B �8eֽu3l][M2�������� *�8<󴚛Oc�������0���������@����������*����������A:L0A#G^���������n����������*����������A ����������q���������@����������jB7?S)>���������VϕRʹBwz(7KOo���������,=;vФI^?w[>=9QtYk>��Q8P5k׮M^Ov������8}߫V;V-= ~AW9˛ ��U@ V1�����{߂ VjUZP1w���������`5ܧ_˛#Gz+����������jOS=v;=vf}sNV���������V`ꮇ #+?Q5Q:k0o-����������j|?9W_ ���������`p#X;U/t���������G[|?j|~4����������;8U'W9[ ���������t@ ����������q���������@����������*����������A ����������q���������@����������*����������A ����������q���������@����������*����������A ����������q���������@����������*���o4r%%T^o-K{3ysϜcpcorfRțp@˶z36���N���@}ɛӞc.T:Swmx{�"8M:OVZ^_*3 5Gu5ILެU.T-t|sMVC4`K.nf1o%|7^GGwCZ12/iWO���:`���Tϔ}հYew i\tj|ҳT٫ܓ/_p8/v F*wӿ;LY/mc)[kzq11>='9~2mfN8 7~F͋D*oLc3Nf;VTѼ/����*���m+ʹ~/UJqF8W7&{s::9|KڇjVьUntT4+GzmMV%4vMFg9B)3}-ga݅`S9e4;MZ\􈛆j}phޮ9CΗBT#TjT5kT}Q<:DO֎ЁzlhÕ5*6�������Ncg(9e=G*jւEdwR VV9 ͜<<</iC0E =tB[]Uyq³k;RJ?:Kz (yt2ntys0H8׽luOWzϜsvP>ڶ jtQ5a9z!ge>}hB?|91tL=C[^;W$kt篡=nr?��@ ���t7w ٤Y4e5>׊㎺j#qLg=Fo^Lv P=_}"2esM;ksdžvE/'0ޜ?ev82w #ZۙڌxjT3/ֹ3 ٤l[{|)T5|Sw[t%r&KԖ`c\e1^TjXfejc V (yͮuWf I5vfcONr]몴M_y,HPj]©]ڎW8qxqWgRÎC*/w&^o=yTj[;[n}?,NZyi5m~t]*n~yaT32s|ZGd=Vl:U;tg?=m:xT\ˉT<{3|[-Z\3oH0D9Vnk`{<8b(}z2J��@7#X���zA#41 p݋_jUQ nRuSPSgrY9acۭk҄xd<;ꨰiqnr;30f hٴ#~I kϼjdn⬳)TgPM�j8K j+y=:s?/4?0F_hs}>SvvqY8&|1zsm,?o1&eGm_Z-Zgt8OU<(3{぀I-i~ ]v>]~6Yܬ%U~˩Wѝg<'4Z5^nQQzݚOhʌÁJϑʹ3{f;PmNj=|D<K<Ry~7 }J&|&U~2}Fu֮C^C5+|?Wt?BP/JRδ=qe~I[eë'57r;6wkZ]IՆ_N:ZQNvBftB۬}ʚ̟���L���;L=G#Tq:ZHJi}l띧TTg/U*=4gƎსjusXH<-xaô9J L L8,p:+ROu:Wq[c**e?xvHme%nxGO;Cc_QgONte뻾PR=ÔuJG~{IT>i� >_js=ix 6$0W3Ľ^8m w-st6|]8jWHmy8ڶg2ڻ7T~T[cgT C]Uy e ϲcI­ T޵nTC׬%U|N޾=/G9lפwl�ݨJ9N-V~tD-NQ[׹{=oN9khm33mʟl@usnKj/tTU8s*sth*OE{!k\Zοf!&԰SγIR51ljvǽZֽ)<���C ���$Ϳl9#rYʛ ]*ߕ;æM'ŸԓsF*<$%_0J%OcŒu^P̎ͽzO;w?KHG̺|ׯ\GWp1oT@kO)Umf KF)oH<2 R~u<tv8-]_.Y*e:T)3VIԵ0 &Ywf뺷Ie˝ǩgsq0 i_de?2Z W|ca'5sosʯqnC>׹w`a:ƛ"P5cfϟ?/0?l y?>ww77se/Л'uU&*;3&{U!;ܯs'T}W49u+aFgEeI?{p۞Sڹ6Vj?HU*粖Ԍ!Q!؝G41s^RփgjkGz#^���@"X���_ VIJo;51mse٣N9kgQno8kQp*vZ~\#ZU tD/J:|28dGtDՏ7+ޡ*_<T!,| ?sNc=&)պuBk Ɯk59 s2ӣ0D;zpjcD&}O{|ʺmةURF*ohwJn8ekZWO8mmujQU?e!yMhWz4͚(\uź c^w w>?P7DcDžC֎�Oq p,S']oOMQ5+|DUgS!˝_;洹W|K)*[ccT͈QmhvmBw63Z%)k wCaʸI>y;qZ -ܛBspxs���"X���=IC+e?_985C* 5z]X/誵{$_3LE![WU7RiZppg4ǟY<N UtQ فɉ9 K9K > v__q|_<U=Cn[ vLͪ;j{7'Uv):)yn#eK5_jTV+ⵧQ*{v ڲ#\_pJ5BKTÙ)s*3D$zm|wBj;wGk (ojrH-\9TSVЂ}G/}]Q���n@ ���;Iz򵳕7,-|cٖm%mraՙԦ+ʶF(v%֝Pd oI+Sg,kH<O='3Ln0gJroRpBW,=ohB;?|ٶ̽'Tckڸ<ޠJg'հ':H8yc|ji]L{Rnt6vnORױ1%{YɡʜaRmVe7~h@5JT{*{յg5Q*{$IKP ~PFo}"]۱UP5,)\:숦]&i;}Y_/Ty: e|Jf5F55u։dnpB'U4Θ| opRotљ?N,ZIg_Mj٧ғծ W[츛Us5=}������y'w2x/ӆjaT*^פ&w:<ѱ,GokғnwmŌ!m nBã8 ;6;%<\sFpΩtKQmkR3Tv9Ǜgs/WsGtʓj;vC}K7&_U@y!ֵZy2D:&){p^lͿmV?tX 8Mv;bQ/p=�v=JYν~lI:mz瞹{J;SKu{͙JO>:z"pOCZU*g8 g+ogN$?Ňy[8̭X<,IsHDjj҂;}WwBι{m‡{."WUV; _3knRwR]c&!J%Ye{{<o;Z���:`���HPuQoiVq޺M'auܬ*m TTiaEeՈa3~Be[94XpU`}O*n;g!VsB5U`iÔc }5*LPqdl4"xShˣ1*o#CtވO?Ո PNS_sJn::ʾ/+sDIKmFg5ɪיf0;gSÕj2f5?ݿ?S*wX3RV1<y&~[yUbh:4(k?_9'[1'ָ^寣.*ds.fq?=m6v"n/&{-Lezo}ƻY,ǹom;6/|/W'Ts՝F'pR}ҁw3&.mV(%Ij ss¡ݔg⨦?୿dD{6Y2D Z}_U3Ÿ5vg{;q/$~m+gP9+=qB}PŚi|u0ZfL}/q����H *���u&x?4C6S^0Ua*\dm{aTȜzPDMиɪZI<gY7 ѓ5gƨLvv%(+Ⱦu`ӹ(3I5Nʤ$>~{$=|n>B[l\ÕH]} *?ol99#$exUu{w m`Ƒ<us uƄZ5ON3TxSo;u־_竇k_h%RM:U{|(mܷiI*X2Lo0\O:zpqU'f4>㠖 |v$1:U?h * Ϡ; |U֬3}0 iwIʙ}�|S轐q8m^|'Fo{ݫFRɚpʸQzrHmq ii+wGj#����$*=;vФI^��7ʰYvSO*w1�:ִ3R;Q֞>���п߂V��:D;ս{O ?^a ^غ22yp3xZ.3uk^LI*3Y㼊Ѧc{2hVުi;*Y9~< Þ}A>ܧA?0wp=76���{]����~*RՏi7TU_U���Q ��!*V}c*�8TܗZQ 9l켡Z0{RGq����aT����ʸ=_{5vn(BU����}#���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������#=;vФI^��7I@լ]SZZ6{? ciժU3��:6k,�����t`G t����[]���������@����������*����������A ����������q���������@����������*����������A ����������q���������@����������*���^QTJJmftA6*z3������z *��� kYؤp7>Cܙ[9WQ6:5O �����ЫV��DeIsRțݸU*O*^_s9Xiyq{W4IIIii$Jvz9fUFc_"Ueκ*9+swmB;ЄT9+|$|O~>g]e,uxk/>8خ?Ѻ��@D ���$rTQJA(57RT)sbvPj<>-m>#$5 F?qS97[M2夥zS-V)śK*̙,fvƒL;X|&F,¡2g-JqۣNqOk'kX}~Po���U��� J VJ)-,e8FO|Yq]RfķYZ ?-%#==թ<Z97fuKUe ;(oU8ZkŹS>}]r;3nbM};%S}yO��'���qԬ5a=Rzqm7픖&M2kQ]rmryIxݱKpy[Ql˖Uf\^f >pzy96~dri<gC|fI˜co=momO]:(7>i[J[SW ;_e+b7i7t7YuK; 9tÿ+f_ USfoJn:=lUr;XUk%Y`5 sE*>[C,估Js˒j_+4 T7SMy򶳯ZۍӋ����U���#MҶd)+Ԧκ/ܳXWI#[#' ҿ-;7ٳ%Fe¬8ml?.GTwl؛e:o `M.gaRu?Ppu49\mN.iƭEtV8Xy=rg;zb\~]JӦN{U9:>پ7/kscE:ipƢ9gZf7k]lKUP\݋ uڪ-0~bKEYyc[spnؼju2ح* &3MZ] HR#Ι,)RެX+u*?cw[% :Hˑv9jgY_KޒIl9hc_g쮪;զ׼=OsEtEgemkNz:!gUΘcVjSGG{,^E>;>���V��K8R ҁX~ ;pXd!0n|5κb M"g碂ٽ{WKHY޼vmvp iwII9qZHc}IkcsRlg~(\瘜zw>JE~9=ζ tl3?|Ձ6|W* _tǺivg9oe8.;LGY?3;װYOsp=iaP $ej^VݵE%U8-:9)MhzTStU`eͅM*٥g< cֺŒk;CkMʊ)Ti>\Vm)Sǿe1řJ V9[*T UR>_ji//z-]vX>e4n[4ۧqqFB=ڎV޼XYvlCF_Gc|s_j-EΖkQww>тc7kzW0pƿN7%3G^��@ X���Q&iYHJ_zr4zhx~R@3^ m3/;F;K~y%̹`uekH׆_IjjMg ^G y̝s,mz6d)ؤHO9ѩ rܮ Uu/;<:m`!u %z^~ଟ~s~Nk^n9ǻ2y,uvf;צ;:YTX;|?4f; fvdK e-q5v봨}X %�|fݪbv>f{MU Tڒ{bYz�ouY&+A_" U: ަfٶFjU_Rmiij5aVU^a;bQ-2-י8V2U:kޱDX"m1voyĻGοr?hg!o_ ytN26~m ��B ���tdWzP:Ao T:jS@ze:^؟Ro @kj3J6v::Y+g;Zg ^pYu;ZU2Y/V׿LMCذ?sŎιO,5^j5vs\V;YعNە<%-Lʬ<gY\^{ 5ns9E~`׎x՛=!z)6@HjB]آNyq+B/a]N0sbo{©Ju>~q3{�V_j6wmJҹGW%F*gUCDy\qsD(9g~8,sqmtpKcN{[hl3Ul?������-[TQgo#/rŒAw}c?¯S 5k-n׎Vya/&|Sƌ=u[MntoAq64`~ylqίy,iQp75g~^fwT;FcU68?jB x|`*FY=mRUzJ#<.j?8?ܖB愮y!Hvw|C豊 ' Gvn֞˽m5Fna0:yq)�����qd~,^bL<~=&eg1i{j6cF*L5uh5KJWX4zADi̲ۜyJ8E2YnJp^O*ꥣxXTjg8ϝ׺]@sKq;5zAuVHɲrگi< o Ou ru0WEZn  Bx|[˕:;rA0z<;Sgjb U5ڹؼ*"ywm *_ڷ*FWq4j~=+SucK7nNp/F]s6u*SKa��� ���@ aT)R>K TX69ϗ}G0/&O w+[TY~"Rх3B`Y?;> ?'y}ۛ4*x6&XR9&u;7IqGw}{{성_8QSV;mu l9-mhmsz㴭߆q>$-I t<y^ ra眭*i,gXA]6랒v}ֽ^egB/\pf|ν|m[HHbmսjIX]qWJ6 j{ե1yC\6 U|Zw^l'Mx¼I BpvI]{5-rǍj���`���ge Mj\-MOuWldb.iY|XxҥRi5bkRWm:M rowN,)WqGWcZkpުn'H=ᜃw.tAsu^nWv]~@sn\!6^s6,YsܥKZ],=,BY__kV@usIJYt6uGu/FLř.{ZB˹Z[An3 B oPAGJFGפ(2{1hƸ*]vu+` ZCN;կ~;W`Mz1Zu}vm:kmGc$r]Z7؉Thg(-9۶*zv_%{m]wBUOKeV��pjV��DCZCnMғ҆%-k?H%sZBT=%ҶLkwHg_E^7YzY}BԾӤ|y=cV:4x -pΫ9mN[dJ_tQv]9ag~h.,(pus,VQrzg+y֝r=ct_>mT{ p]aW"18i EpqfdXcgl#)c}m0|IJYq?Th_s1i]x|n7*QV'BvY·$zjOIV٘q9Iվ讀V*_.u,iY6vWW];m>*|V#?ZH욷ImtO"z{p n+̮gs^1YÌk3,u0L[emv<^:8gݝ|T{ l3Zp,֏Y���o$5[2}hǎ4+��&{k{JKө w\O[+ZMҾU'qޗ*5>,mכUVm:*=gժU5k*qؖggXeؼ)3@l+-l0_ܧ6l};)b;%V4fmNMB׼;Y~Ϩ;1C{ŝP_|Vvxc_���zoAT���ػZ[N˒XIx:;<.Mʋ3:*%7enO *^1$xͻF٨*dS5=tlnÕ97k?~���V��bYR˘KtxMKոݞZ׽͝XC5N$v{o [ڛreVgVȩṪh}&,-s}lۜʂ ��+V��v\pdgԞxNAzF]ޟb[pS/06`1(-H /h]z3;2fm'Ǎ -l1ƪ wG?><u۶w˹Nֶ>t ��00*��@ǁ1V1������������������������@����������*����������A ����������q���������@����������*����������A ����������q$5;}bǎ4+��&{k{JKK^w]&yp8=Z{�@f͚=��@< U��V�����П߂ ���������� X���������8V��������� U����������`���������� X���������8V���y��4IDAT������ U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� fOرC&}{��$yUvzOiii w$Ud�����Go`��C������=��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`����������HjvxĎ;4i7W���M8P5k׮M^�����/;ow}z"_zs!Igܡ)(5v`��C>U�����aOG^} &2 ttY-_ ��������� RB^ϼpα?"X���������*UCα?"X���������Sպ#U���������`Hcα?"X���������8V��������MJRҬJ4u2%ٺK:Ĺ.˶z3�������~"؉>kV\Poԫ,kfP}??yKoܪ9/׭WԖ__55{ّ#[oެ۟z 0U��������00TLEy{\UhH?nUo;C}zz;#q?ND[N[<S=Nbl;vx���M4{����@ϳRI]N9M:^U,'kwMRݵO3BV)śuQ,-٢ELwbrwWK <%-tF<oߡ?Ե_ߨ֋ćzVaS~+[_Ο^O'~]:jvܪ/]?uoc~?<X��������Aeߞ*]>x=u{?1[g*՜v+ORv7^2鯾~Ct텫wQxw}^o H V �������� 04%:_yʼ$<˧kZNxըl[6WY]}Vb|uXolYrpGݖc5;U1z:-s/S݉FU7S3U[Xߙy2U8- :4zvn3Ur3>ަJXbj͵c:ƶ6;bv4~IWz2||LNT9']K?ﲭ^X|!>'Mq_ύ*հAK[揽<_5z[mgղ5 (rn:*fPVD+TߟuuӷT?jXW ҧBˏg޼x]3?Vޟj:_5zI(T׬b��������ٲDfsI7#b[sd[Vؼ󲱢9/%nijICw.pTۛZl{8ݙ_\7ujkN޾7e,\/h.#eɥΑιeo54Uv \1;馊}ޚ+^wJiz?}Eナg73ޔ\Zroj)%[#wMzx{1z)&mxp[-U,&G6/zj{wlǏ6i$k9{'>cXG+RPwomeZ7zܲ[?NXα?b�������� 6jnUv)lenT|URhm25MNksGOVXrMKEjgU2kW_UVz U*4PtLG׺ݸ-.TsL@k=Zҝ_-R:P G|TW^JHy"UWʐRYuw oSnzR>wU*icOV֬"g*ufhS%ESx_~ <=[vT~T}9*ޚ7h!;_xP򗴭-z jV&%[%츷wA:oXbRٺ-;m]o:P[9*ūMYE%-תb SUE3uzʉ~@>u}Mugރ[ǑJvzK*s51܋pMzyzh钤1:ҴX?{-VV�������@Vw:BfjRZ]\4D/VIW#enZZݘlݟ"]6Cj|\rNWUnn7UFʿ6_ֽZ:gW>ɣ#bl<]Y}~Id,c]!լ,S(e***k\dK=9WuթrqRU%ʹ5YJ^%)Jw<Z<j_J_ ϟR6s5jjgYeGvr%(;3WAd~[CJBUg)uTx{lZmJVY^Ci>i*&%<o3io{Y)Ϟ?ئ[{֨PtQBiEHxJ(#pf(;O_~]~*#zOa_ܭ|É/k^[7tOt_1{l}U^~Urd}|_V�������� R~픶Ate\<node^[lF՛"^Տ(*_\2U.<_3 !5j\k438!d$4iDW;~vmS϶Qls5ƝF3K9c^oro/pڬT5[ҮZU|l<)sZ>]#&)<h+"NmDi+U|f̧eq4R rq<_蛩3_Z]<xk_IuHO8'ެgkܟ\K_qț90�������~uޮғ?V_IhTV T=]EyYJNׂ{STp߬Uv)W+0{yZғ\ҍ+UlLѻTknxͼL[[w1{~u{s6;O%.)z?DMaβaS^tk{Cz;/zמ's,U��������0pIQP6njoj^sM4K֕)e )V[/RRRz?HU*>CӢDvuŪhSJ%6爇&W^Mᆳ-cJ6JR= =T~VS6շ=)KlT «&P廼^6ko8ZV.#mzu]>yYGtou\Ul7;F0mR͇nԃz]'=TzKV�������㋅*|^xjټnٷ<MP٪W-H qWH~7Y9%Jw`2 yQˋT_fɑBZpgtܴ^P?+%K6"=Ѥmt~`[4Rf6F*ԭ-1zRL4b#]6J=Z=Bv/hgd*uta@"yZt?a㾯ieŦu{? =+-O4n׽93Tg(y(U��������0畝R8G\8]ůrMJn6-K9(Q5lg/ց#y=%Zk~ I4RUIUs:9LQ"㼚Y\^wΊW)_ l#c~2Ui*#լT}B\+#EyW Neej|d:/=_+)WMWevk5?:ٔؖW U$C ը8{b\6n;w_E;*Vlozg2k[ctm|+[_7H%k=ir,U��������0]Vٚg2)[oPo(Maro/PmPM@%7(+#Mʸ^*)#ԩY*XR٭+>;j v.xS4j5s\*s+ܧs,pMRmCJ"IUM |](=IŚ=f\mU-q$NPMzfaΩж uW]7LЖV.}FoW.Pv\xR%_bHj��������ƕFoӂV]J׏b���������-lՍ4jirU!Igdޫα?"X��������@eWUPӅL'yMс^ >vnv*���������Zxcm©9*qQ?aPV9ٹ9G ��������� ;?W}r}]<r7kDYj?"]v_xKU���������`wDhWZ0lZzsU����������1V��������� U����������ϻޱc ���ݤIg������_��������p:+`����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� J&%)iVBެcVMX^>Seo6y ���������1ȃF{Vl^Fi|q<ZI5wMOEհffC$g˫p[S*z C;u^JjKz 0 ��������``տVӐըqUluZ5AsU1jƭ*/WzWhv)c8ެUʻ[84q]gP7���������V4hPZV֪jrs3zoNwiTo )mh<fg:* ݽXBX<GY=yjk߭wW΀ ZU=_ex ��������4л Fu|~guz{8 -XR mg]d'_RdoVڧ?X7ڝuUY��������A6Ew|P[֕ykUcЃ;LwߙQT-Uƃ*׿He ;*U\Rg[YsV2͏Uu(˧8l7WVReumfGTEyXwgh6gn"BYY3]E)՛ʸԶשl^2/ ˧kZNx]!UJҔj jE+e̟"7 /V^*mѭ}emm\Ls3Ƈ_K˵?{lol{i::V3kpkEzx?Y{"{'9㟏39{iSN?k:6֭;ꚺ1ڸ" jM6��������@oj-K@ uwMTr:/v_ׄsUb>jgU:s<E+fL|k4eDZkūζ6iUߨjʌ-HPsWYoBŸU B5;#QP*ͺLDRT*LZu^5phG2?UiFսX7:bQiӕ]5UsU:COY 5_9~U7'8ʹsۻJڻ֧i2eMV my5ổ^UzDgEtƺ�������� Vm󘑥 [uܴF+9ʼQ Fm_Jc6hZ-*-.TYTZSKqGRڌUhv>oǤ~eʳaJFu[V1ݪT:3Y2{ݢʷn|YvjB{th(6XwF<*PվqMqo-ւѱ#ԨZڨ *6^M/*gJ=*أS:&wa*Vly~qN5o ;m*s 9u<omheN_6L;95ժbSU68ûB+hūkCR[ٲ玑Wi *��������@BoѭJi*t^oR+kjR'93lS0սZ:eO*ohEFKNDU<U nѣ[AS 5+h?e~ZH^M]ɩʻ EkCT9B*Qe~ܛԌ]\<(K7Řt<Ri]zؕd)o^8$nܟX1jP=^Ss=AK<ih<_Vd:rDs}Shx^Wُ9=toU lݖ]4_ŷ;<Ϳў5���������.mz6}Xitrpj )yQycZb%Oqgcx0V9`塠4(fCƀu$QPs'n-cflzTfSFc$˜x+DJpoOzyd^ݿ}o?⺬jolu JӧSX1n=a]MO>8%./{.3#:QskOO^Y0'ʡuJՖ#q$k(p@k_3vDmL~0ЬCsRF{vth%<NbZVΝ> wbmǡ�����;oս͛KSƧip̸fYpTkRQ9~JTFSlSTƖ{?|VSZ) h,c_L)Y}tUܷ5<7޹" gW=~9[⮺2oE<s�����`@mJ1vLkΎ/U6G1;4jcniT 84*D|ˎP57Īn{}-sdPzNO[ç6wµCci⍱ε=AK7GTfUM<eWTvk%iuӰcaվ9gcڪXq}<)<7ɥTnP?hW#mLGߞ#ZyS۷dq<a_������y]V_~|838v^]6Gif1vriҧnj9JDzwT=7]k{jЁؘ\k*c÷|}:u1zXb۴4!^"VM8|/7]yZU>\ZgI,y)ZSR:oRFd]ځS~QGeu̾!^bz1,{55)=ohXr]ib1Q6qGkg]~Թd[/.Gl_o]M ~3�����`;?՗ƶҪ]edxai6_m]--5wE<".WX]3WfLh{sY@Om-J 9_nykly1W>z_X/(=߯U"sy\]Ni{ux*11,;yl,oϧİKyձ=7ƪ VĶrk/Ć1/O(鬌dťg":/eY3'͗eXlvVϥ禸C_l kw{1v~ZҫĪ������] VٖuU6_u],6?Rj1v|v]4eըc?Ƈb*+Nw6ĚCn6.VmY>RVź_m,O9f^448V,U,̉oK%1gZەbKƦuLJ06ggGuKV̎%ˢrbbfqGcѸ~U̫i}]4Weƙf][<T ZVJZcs z.ytUcbɿb۷ ������]iбT׋v555^;zh @E@ pڳ!�m����ЗsPuii!^xHPiyht:-tnjS������2n5w>x]\4l\41{j~.������`uya+jhs����������0X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������(0XI+vܙo�Wd5���� D}"Xt��}����  ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P`б|Wܹ3jjjҫ_{͖| �z+ƌ۶mѣG{ggV鞿����P �׶oߞo]tQ����t-*�p^?S֭['?I,[m<Y ?ygϞ8����00 S xذ�Wud;b׮]_"E}}}qf}YкhѢXre\ve1k֬uwknn|螿����rՆ1iҤxń v�F*����=ЦM{Wݻb&*�JSSS����p#?x\0ojllsT>[�����gO R:C_|b%־ȑ#�����$Xalx_vq ������ev@| bH-������@_'X������( X[n������*jnn+2oĖ-c̙������xt*y晸3bӦM������xѨQbڴiؘ������#X������( Xa/6?xg\0Z{XS{:������-6jd/ᗾ~ʒq������orFq%������``Rhܸqnx������X?~v8:&O�����0 :Vo;wFMMMUz+{oْo@7lذ|hnn|螿����P ������P@ ������PPb׮]1z2dH�٠| �������������������������M6ŠA+WƑ#GbѢfJHOkoF\{cx3V/(sg'{ϖ>U^;pΥ�����KJK.yL4)F*) cƌSgwII7swJ'>'1w8vwٲ}{SL0!?̜93;2>KNzһ=g�����@%X;;dKNmrx5nܸV{2-{ 7ܐ3�����.mA{d˕O}pV9K!k^ ?ST}>=g�����@$Xa.??e7_1)[?o( ?~?c~yn# ~'̩'|vtY>~.4g:97;3gyڴNᇿ?Btr_%m+>9љ*ey9.n<-!ޝw|ߓl����� VRC^Yfwxۼi99zGS)x{tʕNR8ͮٽ{W{S|({bڴi|5k{ٟ֭[c߾ְ;}fɒ5ҵ57m|JPntwؑ]󁞭\NXk<֧;ڇ#}~Z֭?>;r8ޅCZ!*�����u8>?}y E|)TMԩS{l?UB~E[νYpX2<]%/^mСCٹ35ӵ=ҽFz=fΜѭ_LwUv3}V=]*AR~Zs ����� V{eܽaSQ;2oH.5jTwT ͜8qb*wʲCMamL B+-ZF nSmّwgg<�����@%XE)T͊7?¹z饗N6-WL^~z5 Zi?/ϒTZ�����#j/9_>v3.&]:2?BWH'S[^RhyHHi'/g^?>K7f};lN>�����?.__| ?B7qz\t:9M'O+W-#=7Uޖ]m+, _,1***Illu������(0ꙥK֭ςdz5eʔlֿgAݹHsΉ%K3,iN!> ><fΜ^:#G>Kanmll[" O KM)=[ '������]AÞݳ? U ?״-w<;̎ d˗/s644G;'?,P<yгn[~<}6<SN)NOS%g/Ұ<p~UWY ׬y(寴]#䡀odAz:'ݷ~)C7yiӦV;ڝ5�����pt$;w|WvGΆoP?*;6����T������������������������������r2dH������V������ V������ V������ V9+WƠAkpy+������ <UN>]̜9#ϿQ �����%Xaq}MR{ǣcncǎšC������X=lEgO%m˕O}tzA*������`Igk������o������ÿuܽaS\6rx\1Ҽo1bDTVV{������0V{A S?}ML̛[ cƌn9r$o�����C RĢ9|ϒlf{6g-ߌ n!C}V �����"X@\_dz{gլ}M QSǎ. YS ������`B틭[F]]]������`HC�o{+&yV�����` FFkږ4~:������{=lҥ#+{-O,R������0*������@*|ɨ'-������0V9+WƠAu#�����EiDZcۛb„ y+������ <U������U������U������3 0/����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/GitHub-Mark-32px.png�����������������������0000664�0000000�0000000�00000001556�14332737457�0026736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���D��,PLTE���}:���ctRNS��c1B3֭\42(5_gb^Y ?e9hs~8!<>ĹzFou`xd t6��IDAT8˅V1G.UҫQQ lyw0m8?{ $�RLd FY-*۾ pl˝DNY۵=>%<n_A>E BQCA%Q6J,΄x E9BVI$QN�Xe@t Xl度]4`ŜӞ} +] }Ҿ>s�Z(ET2Q*ځ?QC~}GjPo𪙒M6�-BNNiw"]l~qhE~1 ^KcˆV7nx{  yfKC}p ҾyB^?>@~*{3&r`xCïo%Nn>X,E^\26?K~;=����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/Live-Editor-Choices.png��������������������0000664�0000000�0000000�00000147423�14332737457�0027574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��z�����F{���IDATxwxuwdӖNh %@P@+"EDD{yzwU,'@ĂҤ(�!-@z66cMv~'O~woJL$(.I.$� v_Ѩ.q$In+ |$=DDDDDDDD*<5 UPGg2żtD2MO+L²P;J zjcň(8/=DDDDDDDDQAQq=N(8u3fᎤ&N62[ʕp {YÇHHn r'S#|߱R"ky! h,�4oυ&T<$HKpbeDDDDDDDDBШ)uAh~k%` e&pͱ$I$�lܢރb QvUw  4 < {z$Q!8Ő(:`HG8�@VУDUm@E [҉SEEHbUJIIr䱋".^`kܾ[ej1qeKE= xDDDDDDDD5n!OϦ["E;˱Ӊ%5:d.*fCDDDDDDD.EŎlxzܚmIl6;DvCDDDDDDD6GmIv-5z$Qx43:"""""""WK# v5zΙHR*pt"""""""(1q=DDDDDDDDP!Q CgDDDDDDDDT0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""( P^ X2ҫDDDDDDDDukD n! bbd=^-"""""""C={8 BcXͲHGc˸*{X#jDDDDDDDTG\AO&4l^)@=S'' 1*mڱǂ-n;dkaOvVו궰74kiDNּ+)vZ4mRh=Nw鲈E3ش\JDDDDDDDu[XSIZ1! rPQ] 08wѣ$ᳯM8oj]:z:[Sf Xq$I^"""""""kVq# y� ASWhc!�$ {b<7 |)m^(VoO]#I yȳ蹪Ĥ[#vy5{!sNϛk4VaF@i4=c{% 7] z%"Μ#'׎'lLzt餓_Om�EJ[GAMfyߑqU ہrDlbFqyZQP [k3]muP\*"7QRM5薦CdZ˜(B"p E5EDDDDDDt [Гs/=BQ%dMڷUoVӡMq2,;:=).V͵k>քܪuK)w}b XU*QQ!Aԯu,1Yq7A|Ǻ]Cgxq9.-bpyCGl5,i.h~P;<:LNq4֠K'niʾ#lMNٱtތ_ȳ|uNGO4=.}oep"1z7ci}cN 0[=<RhcFWdq y~]Τ2 Ӱ!i(xauk+ $s-%"L{sMh{4Xy1KV nRkzQz +R~e+%&kv8}S{Cuh E% bnf\y4Gt9(hѼ{i{"'U!VlFQV-xMۺ_;oU%&??@v:b7<c~>.(bM%rO'1% jR.8{Z,VXGm� ր}ѰPa=5qmZiq i6DDDDDDDWZ6'Ț=y�U1ni)벼F 4HLpo/=8}Ǝ%+*䎄]xI^u迩Wu5jAX%,XTӎ@B-fl` ݴLʱ6Mª*q{H-M$Ip9;PCGATe""""""""��=y� $*ٵ}yLZN|e'p鲈K"o?Օ!~e%,VQ6QV~ܵ=wChԪEղ_P6�=1 &]zFDDDDDDDUtK)f\j 5QgZ͔l6 D4UL׽~TMP*$la �AYfM3G#xɎĄyi5l.Ϡt`#ƪoVQV.y;p ˊJSAxأT�xJkv'y3 kgsHKt vx �|ԏ5i˞R=R*+wtvݫ{ sG:wbq@Ď<DDDDDDDQA;qUӐǐSʞ oPuϏ\7j](�= ` X2zeY n!]4""""""(1}N9U�Q1 0Цes>y W;+Krm%.\U&k1! EF=y�`Pjx hVSdl Bĺ8: orxow)$ عׂ{M6 w GKmm#zhK*<& w:xtM_Twb]::w^1iDUGĒܶځ,֔1Qf=DX?&=.V DDDDDDDDE<aᎀe A2IL1rrm>XkR zvs7Ϧj>e0jzb-q 2Cc+ƌS!tUw=";GWNV-W g!j Dm EUiou"A3)- Ƕ4/UM4g7=vBB|\UxԈgl8gG-[ulpMRBbBղt:`F<eB5>k�9IuVgx_i;:չ5$`/Ku4jHNd!!^~1RY9S""""""`ՙ]Աz6�O v2k;AVW[2]܃M�;:[2fU.@v:*:bEs-Z4^Sh כ§IZqV Eѓptl%s9u:I%[-r sfY`5m�Xyl(~TTʛm%UT"b٪QoUБ7#""""""DmГ}m4WB�tZU3+}P6}ɘ-PYy"S9aA+VivKDo^)vb_b~dS(cמVo^)=sv1!Q5 e$A$QaYa6[^:KZ"z=ID)[j`0j!PM;$nL͵HL ga6GXuhH@qQ]q2 1h4h4 4꣧}?%/ꪬ<GODDDDDDD5M4 z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" zPZfHI "DQflAJrH+QT;wC t:=4 4 A =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%t^I" DDDDDDDDA!ҫQDoC"""""""2èKO=ʝm"""""""@9P;Z z<9(ʷ+*%"+|4q@Gh4v]|875ɵ!;W"K$DDDDDDDDj KѠS{ R<> {(Cgs]l{PdCDDDDDDDJ((cA;nGF/6ʁO$ÞZѣ ybűCDDDDDDD'̊Mh!D&\ vGEgcCDDDDDDDQX]l 8ǹA(BE:kEه3Ԩa z<>ag<DDDDDDDv =zt˙bSy]DDDDDDDDTTYHT6ݒ$ Jj}ۈjMIYU5M\7D$p(u"""""""nv;<'nE2""""""""M$*nEjÈj[q㉈jk5ny@"""""""h,$A=DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQEz%&8"&Fh8ou8sM """""X 4ql<v�V i=б=' """"]a6ѠM+mjIA<K'"$WexwQ%0ur<�i;ݓѨZVЗKLɵEz(4m3lIDDT0!"UX_0ur<6@&ǂpXj:hA&F"Μ#$HxD4nP;,s1`�T²8�@EW.nڶb�&7ψ4 z(`E%"=|uEװ#ƢsG4^,+z^Qb�B' @X?1F :wЇu0ѧؕ,FugDDW"=DDQ(Q|]oXSns4jܨz_?k@zMOQQ!ά  0sX QU[uլV"(4ql|:\v.Yf4/>qS2 11ZZ>j#F|e9w:K'Z&9>o g )qָ&"(SQԜi@C!K"|uӪwjuS[0[X(RNcλ闇jAQ7r4-Jq0ˊ.zͫ[&W-/;džϿ5y;^[ܺĸw@^ (3'.;AVEAhEfUATI5qہ(Ǭ'@[E|}tGRs 54K\("/yob]:8:7qt.k0HGr+-ɵḇoX?QY} 8+r:v-4:['G`Ih薦<má#V]Z%5"-UV-p4NJ�ZZv):nRB)OPYuJա}MkPQ)!Y~:wlߑlmPjPz4o HD9GYs"\M KykR[jѹczE".۱R+uGrk-4r|rNp,V{ ڥ8LT ϑ?q9`p@Dv '_Vu W1zmShC&\.q<׆m>IOON@z:! Bg ZpB8ㆈ'=DDTkɈQ"y" 1FѪ..~k<:<Bn%"[Q6/�$C9?^)!kp_*$|9 N:zc2>\ZN]?jwB~h r[UϿ5!=ix,smH0ql\J}V3o ^7Ȁ n+*$,/S0~L_)7b3~hƔUa/$ LI3<*y[ph4n1QPCU]4;0fD<WiDfYdeGπb׻K�4K[cԓ11zEWÞs �cF.5 ;:F+-&xմpL'~N~.�8{ H]?bQSy6U3dU;�d�fK,VdV"" "" sd"r06UbJ㯨X}1'GHԬa .'b5C sB<ztUuQ׿kj=**<ztջ<Nz)ţi 7-QqJHĐ?.Nc{fM52>-qh<,Z=<TD8 oq^C6Lk4ڔ~-Q5wJ[Jys񸺇Dݑ U9Ѵ3Ot y\l6y=quqn:Q2?&NUѕA՚k!Iν+-SD~ų$"vi;Vu04fD,65窪<Μ5Ǹ8y$ =Um �Uٌ(΋r8p؊rS>؎2t{XQPtzAUfΜcN rA2ZG_Mbc<pg*Xi7 0ur<tk^UBiȥFQzA''O9i> *͟*͒}Um:H 96=`EQz4`P6ugϫǢ]rx|<j5$G'Yp>߮ W<.:!YʉGũ 'Nڰy{XUMn}TFec\3)^dH8kÁVWrѕ? ך 'N=HRSien}݌<.o/=r"wܗu [6l15 zc3372ش5r?agT$w%e |�fYݚM%NKHqh)jX,7̭b jSuɶauNZ-#F9{�ϝ~') v-sRX,bŚJ�vë)wuXuF3~U;k8muN'F F(-ִC;j]k_N 9LKާHFeT8U9�Ξc'N Z L<tHH677lBNݛFDDkQhXZ{&$=vhrm%.\ \4 |-Pj߶MUSv/ޚoeVtPְ rI8+ܦw7ԏu鬮]}w9MfU-N 1Z4.(B9'XK;;k?TmV;ZЪjBѤsiPjh T7['mΨ۴".MżXI0n*6ӵ)T M;,rx݊c+.V!-\PsӶV枲yS;V""F>IBj_YV\=Dx"W$y}nhU!#Uޚo)mcA889)*Uዷ&uUF fZWU*U5}\#PlQ6KY{Ge~S:U~~Es=8;ur ݔrOېxRZW;Keώ[Q6&3m2|k9rv[MJ 7W-KԼZ S$kWzu-}u]}{O~˂DDT? `_ӛ@5n_v*kӏks-58qYnVzf[ "Zqg6K5 KbGxDk$�8csk6Yo6o`WQ)mv)Zc:tr|GIǚETϑ+#sϵauU[irpLy'V:r{\M!++%SE1l1 zVvK@2)+5~,V 6# We D4ix_N%^93vo5Ui0%AA7Ģ] ]h6HT_w{"wxM٧lxM1ҸE$Qf&#Ww�n5L8ʉIZ0ĀV-^G Tϧ, ;gG<'"1'"Zaq&T# * BHY(Gޚ(M]\kTqm^WӚ"O>A<�`WG~kU-I?3vu(Gh*-d6IH6SM?GNv{`79Pdᩎak챣ᎈLTVJڅ+T}2Is| "*|iT�<iw[0Xٖ*ஏbC=OY%NM%xCj1⒪} nRޏavt:�`Vc:IٵcrOڴV'N$Uֺ{Z7j9rjy@I9x(ˉ.z^= ViB%X7I(/qˍU%cuKKDtcCDD& 鿍 EkZ\Ic.[Qv&aS~C;.]\2()U(:8bv6R6:]C�虮<+9t`7Mrwc>^9b+hba2Ihq;f [l\ U0UQ BM?GJRT[@XV( eݢ켇rLpˍ5 8vZ0;E7FDDWX|euj6ubó=84j#;mRJjU]TzvکsM6xC,|Ky1qKo޵j?^C8k#V8Xtzѥ}ؾ~y:+'F/<M: KٗOq7a-q{St7C ȩkQѺvv]cP{c�Wn@*F/W pDDDW6!"”vZ$ily4;kGQF]7iͣlUGRaECGܛtw^ZR{_Vy$6XzaC dis("Fq=|.g>\I;T"蔶wO= vyc1]N wֻkW"mNmaAbJ <}cTǻ<ٽϊop|zwO{rp!m{ B9rXp4-nà+ U9T-ގwAP^#cgλq7Ņ ""X s@ H<ߪ/8I ; {R<nϛmտe x6l~)έ?F 5/.ͳC=!kr6Ѹ5?VT^ձ+`-qx 0 qõ>R@a轉n5!} "!QߨN(1& nJ�GP hpx\:Aڵmuy}i6$VU;H5lMB9r&i͚jpxU%ךe*'.\:FzA&K0Dr"EsFcGA -4~c"+%&xCRi}:KAM[ "6n5cH]O<bGzƍ4>2 5OQ+֬C(.gpo2d_~&sYw^x}fJX6bx毓b> z?ǎ#pj<vɢ/1DyXk'˗KL<.kU?U"^n"eLcFX,J$cYSAcw\|]Ք[`š$bJ)ҧ_}ѡnDI*}?t/QY^j\k2bPT,B`u5# Is1QPL8:tz{BUN:b2v"*.^ѸoӪXOy씕KEI~*;&"+"+PY7y}]S';.Ocї!}(+0zBWKM8vsͲ qTE,Z-ФV |n9ar >e ?-YäHDicbׅ^M~lV=Z{툍B%I}P3W^u/v|BUw?*$ÉЬUpIV8߲݌AbTN稵Ӽ'N:+-W&1!^UƱ~U)ձ6?cz>?<aЫ#T#ش͌}֌"὏=('~eAT:(ju_~`5iu!ߎe*j7:B%gdJ>6W "h "b^ qX $WD|e9LރIrԘsU 7B'Qt4OYk-J;8jSW6|2mmQ<v{6xC˾ hv{`ӹ.oV3.3"V9}`e8YVʵGERg ye771n�՛Y˯կ"Iq`v֫v]6^ƌEv:5Ed }gq G߲ـkϖV|j9R%cFƺE#I@v K~E9!I'Mu},~\Y,֬7c> dǩeGts" cFz ΜhT]<BiI I$I(E6f)ɭZVo-�DDAYB >.dkg=nq8jQZ4JiE;`V͗x-0& 5h.]} R"ߎ>EC PT,y;Agr8\۰v;KjN/p1htb|N)mwJUS疪ic Z$iH8{.<5p6h\�J$Ϸ:N@4n䜴vVG8?GJ ڥ:±>op'}[o·[|֭HLPT,[NDD^FFA ضtY 17?kEHU] skVA$xnpRY)U]rר5"}UrKx}niTՄE7(g4+-۽JVg>G 5):oGu^3"">EDe"=5:)A̚C?u4ؼ9[b'b@fFwnj~~~(FQZ0e|<h2|vv-W{-~AQ n67\}$"?RѕAQ7_y;\ŗ9axKV):fqNDDDAoKE\mSNzM(J()p$ۆ6ɖ?fE_kg=Gh,V EE"ΜH 9!색B'#""" G"""""""" HΘ"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" zD؃APiHo*Q8A"a zAPmT\�c$""""""" 7cC\=΍ɭZ0"""""""ڔJTe!Ga ] {"""""""(�R$U-H=!^\7Bh4KlDDDDDDDDᖞfCd@xFjK؛n94 zt>aE)6*!O$q҅kpG$h4h44iA ;Edn{h-UBZ9pE" K#$Iok4tj| )+p2Os(3i`Gn1"""""""@hEjiGd;% tkSaOj87YU;RZ yU|6ʔ3jjrȣj#Zs-Z=;GBEH$E};!O$k�a(FQUɗ3aCDDDDDDDk(7ݒ$IUGx xQ]ZSSࣜ.n)7�l x>q |\۵-Ar=>=&""""""" 9u%qulj oE]2j55xҎ!"""""""f z!"""""""o45_ z"""""""(>z8:QXE#Dj,Wj zr,Gmr(!PcBD5UFՠGMD gYYy{&XE'#Dj,WjZ z<h(ʷ+*%"+(*@\F]ӂ ѕ"p#ǹ]N ٹ"NQ\"n> 0j KѠS{ R<,W,G(XQM ̤3(I$I(E6f)ɭ^st صφErDWthD+/B ѕ"P#J`NFjF[rJc(-⺁@&Z*rrB T(ˑPфkSEQĮ}6vDWc9vګuHr�#Dz,WjRZ؂9:-=(C0"XQ\!I9Ja z<'lJD�O؃JY" 5+DTS)G!M)(8WEDuܩ<ʈ@F\!"'#Dj,WSZ؛nI %emDTUVfBD�" =+DTS-GB)AH)HDjv;<&ܞ C+D " 5+DTS#Q"bQݦ,Ղ 9!PcBD5l9jao #:e"Rb9BDrj*eBF݊DTF`BDXQ\!  q@""W)#X" 5+DTS,Q`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E ]WB'1AqhRܹv| eRWmuX40$+]^U$(Ѥ y>CDꔪ'x3X't�@Zt摒*Q=/#-�Ap9-X*Z:!" \1>C3DCP版\Ű\!Zp,ۆj ,wȿ}Or """"/6s$ۊe$L죇7qqRhL5X%;k3H/1A@.z4jAB "֙:Z -kЬ�xIđl+D5֦#E$-xX%,^R'm^9oNjMx* ])zucp4 .BI`Zcö�ZТU -7 TDaGm0zRhkBѱCbF�qru{N'ӌMX?#b~Jc9}6Z -펎ھjDeØZcQZ&oM蹪7q9~a԰J[wX<N7rh,:wATp_|kyRJT9!>1zGX+.t! yx~BT?tJ゚Q@fZ<\tKp~ :Ȁ{^ϛG:~vy2<lE!z'?͵{S3㲴|CЬij^wzqgJϓ(+}t=~p"Ֆ޽b ^O;}Q=u̦*OA0Q0dKg!M+-~w:ҟu 2e~-t&Cjև4x"85l}w$`pЖ9FiJJhک ;ЫKE2 .q@t+Q=02@DUF^1#bU}QѲr X �b԰f ~!nUeDQ2Q / E_QnR#Z-p6$|ȉ)1!/dUh z+<?!} _Jxs <.'r>ᩉл<"]L,wJ~ܥ"~PzLZ"} -{b<>^l̄x?CCcѦWXҭjZ+�o֩vD$!^5_v`Jio{Vd8^`hG N�$5תeumfѶ/LڱtU.Ϝ.U9\hG!6bƆ-7ar5tȻYGlb OE_p2w'ΐSYصׂLs@˕p~0y\*)+|MW/_`LZJ-ƏKّu}Ƭj(:.Vīj:iV8kzo[lic *% r Kٹ v,XT[#[րLEʵO�` Z~_ߪCV? z~rb)A�&SB�(7IfY7d]?{ȳq+Te޵G<?!.B/3aպJc-p�ıqN/yn!(lƻT-MTT{Qruڷw`ۤqqjVGzHu3U?UhoW.u`#QZ4z$ǯleEqگEx.:VMw]uԯO 5 NaJs^@玬\KWj9mj_q].I#M0yg s=X& rl8w!NIF]TKE|~쯧>cCqMU4kP.F(k"uU[\"Br8B-h4c&,„o/֔JZPy.Ypf)WEeWo^άjߧWp0EaC<fu>ߎw/PX,I0e|:,^bta+^{_|krƫ:~~2⻕䞲HQk=|N-bѽk_4ځ'UX2*bH0 O6m5uK-vա=KzU{-?\}aOAHQqC &'ݛ"nSeП/'lɚVjAߟ"QҙsvTTJr-~}bpG�VT՝u:AuwͭcT_6 >.;-(E+Q]4lĐE[MBM>6u�U]#VVJ n?$72W}=1QVKzC2.7Ye*iyT\@]):j:gCNlaH_mBo4G5:L-7aXk4ByԺRʊcDJڽ?r$].G2] l Q} |MA@=*bߒRQ.G303E"6ړ QXTT˾_\JEd{R`C*54V~Rb""'7t'Av;lj|)-q_ܛk$PYv TzU 5i~ݬc5(7\xmfƺMyx~BTu)Cc! y}~B5QàڰfØkY2p�ڡgɼ5k~oUkŠ=-B?-w;k}S  01t<HWo/+pBQCuG'pm,xQ_FC0eB<ڥHہ>q'M_(Q>z)g{a9䵃|iL]iP'N`MVz Zq0̠]n:gO--n G6/T`ظjw yB q]DIZ$i"I Xy/v`Pǐ͛iTazD _3DU0ɥv<d~]E_-icdC/z&OdG<%JuAzEʽ?;Q0ҰG =XMžp<͚j`'_X&asBܻ'%+%4m㽟%i@(z$ GluVX^cУ4qj4b]gn F\+IUea1_<tƉB�Ӱ+ٲ݂6^Opmh%j G8յK.;4oKÞ h߇+ 6jϓxɵbD cF4�tnI C%E#gLӫp<ؽςE_9xyN)3vZ5Ơ_)F׬WW͗I^Vnce 6b _'DW8]ԥbZ4ɕ5z@05{j+UBI;-ؽC//YYtr^1Ȋg|!tw<4YmJeq<S4 fOm<-b+ 1&WǶ˘M[͸_5 >NB^' IqRm5iB^H[͟<>eR414 y| Q[s-!ϲ Ɏ<?qZE͛zU8PǠ'JVs鲈5$Q@=rOSn+o"LG7= KwRt $Tlp"5p5kx V$1k~DfFE( fQ\[=ihVQ`DEv:! 'X'Nּ Q5!03APR*aમ>?2 &۴6˃fpq}Ʀ[QW3H vUfRZj!_͸k~׆GEnggW&{泉Dɴ:W@O9j9^QtG�l?ZvRH Q<+|@8dgsFgmoIŪ$!^@t.ܱǽBUFO `xj9|ԊoWx y4`8tK?wގ/3n'6-M/')!-IK't zuc~5iDjY,�iV[o ?Wם=ʐ'1AI >CG?D F]_u+TLRv-f( iEFUﳟ6TbMU-wuzõsO2r4ۊGum;-XsjN<?! MHm7!OV�!OԇU?U[^_p6Z4SϹTFOֽ>�1~L4G͞7TL*y�UK!E_qoLJ@RL(ն~12rh,#؊b_�PzOJJE~}bvdС];\(jgxQUٵ(RtzعÆ'msڊJ ΰ,"I+}eo6_Q!OB$aї8~†"_-5jԏrjڕ/ WJm=Tm^(aS=[[yزtS׏2? ,aKpŐJ /,^fQ]Z,YQ!'ȐG)rEyfFUub:<9ͨ ȯW{T:x$%+ek uۨרà/5qJeJqkt5OB\gߘ{e>S}8?YRUkmO>fDƞ2z r_((bML4=5X.hTz,gAnsJtSUO7Ơ$eGظ KVTʑr 1rh,5`v +$Kb?|u%:GSVUBY 4j(}y8Y,~rv wqK`ر{m[k1F-.8?55hXv/sDT(ԇM²Uut|'`ـѱq5BiG=QmܕP3cSਖ$`eMy!VlU& 2z WL Mspx$+:b hXp*aG]-.BќX oU)N!FPʮ$IJd<?!da+Ξ) H t:Y*LV=eY+0ʵ*^M)۔߲�,V _-Qwj.\E_^+f f$ȕ$|Y96b["p0ˊU :!ݺC|ۣ>jKqͿ$e yj O(B-őc6M>ʄ`6V`4`+кMflfƠ~\?v:><dgWJ5\[̳շKѸzѨfó6\.`U"_}Yv9!unkb36lqѩD:�]Bi6dTV?\ry`pu=7">N]pSy69gg<hwn<?!NB¬>H{<(Frk-5EЎSy?'(цAo EDuUN 9u{4Y¶[05<?+AY-3.$'8lŁGT?0̖\?؀zѤp>E%L멓PV.ʝwbBT˱l6`fc90!v[ѽkp#Wיsv6E7S̲?wζDQh. JJCrBޗ$Gv>Lwe>ڄ3!|Cnw\} e ]v P!- YlXĦX++'k[ND{ʆ7Ez5;sΎ?9 ξV;B5z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J=f@Q],Az^+D!cBD5Ur$TڨXD)bIDu1QR++D"`ˑpkVbnmɭDU(+DrB TuˑP [У0A.E=�h"@ A+DrB TuˑG @Ѡ]2f $'=͆vɀFXfbBDXQ\!  7ri4*} =+Yzt/6,W"# ׂ$Ih4h4hX~vNj:W е=JhX+ ο@F\!r!PcBD5r$Ԅ2[xI IDQ(٬0-HInԂ˱l< '8w^2v{#j%$ƋhҎvvK?V VJ}aBta9BDrj*别yga0@ӫ@=:v>Ŏ6E~^dM54B,NrrB TʑP k-gA;GBE9T0QV,_UY]9XQ\! G9ja(FQUɗcG\ @ׂPxur(!PcBD5r$TtK$U,�=t,?SA.ت,W" 5+DTS,GBVj8 =@ݞQts-] >, ѕ"p#G >nQ䭀 er(!PcBD5UH(JʂDTy,3r(z!PcBD5U[HMji(캴c(tjr(!PcBD5UW? z! " 5+DT[45_ z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z(f2 Zv\|9ҫAQ1DDDDu.+PL&C\\Zl;C^=�իq&M_|UU;y\Ďv>�6v⑑<ENNrrrpq>��:vÇGz5kſ/<�9s`^{|�sbZ޽{1rH�@>}bŊH&?X,hذa7NJLI IDQ(٬0-HIn|饗0k,~RR4111СzSo߾^w뭷b۶m�x�^x7�3f̙3}Ns_:Mzz:|I<C!$:F5k8ݻGl}j"歶?@B gE~~>� Y(''k֬/1b�K.(**�[}N[o_�$&&ȑ#|ݻwǥK��0eL&c4QTTz79q=Tk9[nŀ�8ȃxWO]=~�w… 1f̘}g`�}UGm~(K/^f͚uyga0@C@@3Zu^89/p]aƍx70k,?8e?#0lذ֥Pu\-X�?e:t<֮]w} 4+k۶pb< V[}:jз}:j<Κ>�0oU5}$žwyGXt)LRk_QQ^x$AoC\\\XvB355;vDjj\YS�֬Y>;vʕ+�?ߠo|޽^ơC]t� ܡCj<�HNN~VP5o0mU_c̙<�ߏ]FzB.mWF~ii4gφ(x饗.;@VV7nu|g܂$ 2۷GII ?~I~/Ď;dѣw+{9TTTرcx'ТEZ_;fU S>3ͰСCصk>Vr̞=[O׋g޼y5>Ç/X5j^紥p_~Em4qUW�Z-.\qqq_s:r\.כ?A};w8AE=ӦMozn#//[nO?-/h4/ecOB/V<F.ƪë^{ nnVo>d&< '`8ngժU8s ڴiS+P]VHG @8/̝Ǐz_Z9998{,ZuӦMn\<oذA=n8U뮻֭ 6EpWw Q}SFjh׮&OG~~Q^^w~ܯDM\t >|?)) |Ap4]xWUU~~~PQp͵v7N=+6io|ن#gyd;Ųma_o&8PJfA]; >\Ŕk׆|={LYǕ9ƍ}6Yj|1W_""""x-_MJKKn:|~}G0x`t̙jJW_ kڴi_��|M~;Wٳػw/:-Z ==]vE||p1�@ƍѾ}{/5 W'N}v۵k^zUB*Pʐ٩2�X[lv՝2nGń:赿-ocƼVUpX~܇Fzz:̙ncƌ^5L8r�aÆ>qEE�8ju �B!كM]f֭[sΡAHNNF>}вe˰3ESܚxG1o<YFD'AM7$7nO=>qFr-n:uJUϟ;wϟW)ΝÎ; F]whҤۿ?l6|l@II v-ONNF}.b`ؾ};5jL#tԶ߾c\L&lڴ 'ODqq1:w={/,,_;)))$ȑ#_`6^z!&&mK.�ǩSVVאVE^"VFiIRK%eRaQtHQ:u*<@ M6-yy|Mssd4#Fv>S<󩩩wygPۙ% @ڲeKdղO=d2iFz^<oPn7vX)++ZϼUV)cI*?fIқ+,R S@oH[2~Rʘa~2,thْjU;v:ʕ+ u6n(O!?>j(﹧el6W^Qߔ)S'N|YF9sf͚-sܹ̙3s|}?3y{ĉ4FQz饗ӧOrٳ=.HzǼ iʔ)c~< e / Oe:vi3n|(ԷG5i|~9դK/<ti޼ycw2\xQz}.j={v@ǬlHDDDTN._.IE%RqITRZ.7\-O=IMM;#_f zj}TC>cAߥKdgg#++ YYYݻwkY^C߾}qjmgMlܸoNddfflR]:Pz  mzKysZII >CNSʏž/1a̘1hyY^B\g*ѕB뮓o:t/^tFٗ΄ TChXrׯ_/fm/bذa;wiy<|7\ii)O.* (_y̜9 c!C8e.[ e>a;v:t);;[)]w݅_~%�'aн{^sΝmш;v6[ӟT=z?3ϟqox}VM:?Gzٳ3fd{̘15jv;֮]+7I)--ō7ވ'Ol44g?:&[GΊv=e}ՎT Z;r>5r[K,o_n0i$+� ?f0sLy(((SO=%?kv\;ӟZ$r-<x0N<˗c�ǏJ(ܸrG7ZB^o>�-[p뭷7tӑ< ;;[nnū:ŴiT)Ǭ,|8z(>Sa۱e902[}!yԣ'bСhڴ)ݫ@>}BҜ>?T%KOF#F#F�+W?Gb̙/|HKKÉ'/|~?|rӧcz> """|ГҮ];;哾;+ GS:w|{5_:5: ~IӧtE_$$$]vϞ=ѳgOl6U3qD<䓪iz)Eƍ1x`O>+W⦛nXx/$gq@g ѭO@d(=};jx$ g-�p=ȷ333R^:9*ԥKTAwO[.իW.?k&O{ò�G Ǐ|nIz6lؠ zl6<;Pvmx7��?*9{ȠAZ_|Ȑ!U/?˹뮻�8qr=)))ٟ+WoO<w}*߲eKHz8:uJ+j/O<qUyͪ _W z!\wumݺurГ. ={4x;vl5"""N72wA׎G=iҤ*(ٷoI?LFϩ-'No=c͎'|K,g}{?� -- ,PuzEѣ1gqWy ɓ'} 8jW9 {WGm=\$|O<|…(++ zD8ka8;Gڹs|=d2Pԣw 6,`WIYK')) _|o[-P3gj;U55+C?N3gD׮]Syjv}+VBAaѢEA{>oԨ\Ad [n5kQ\ >\US76m:(G#jԨl6ݻ eD~*xrh4[1eL2%$|y`QAi%%%;<ePWZZz?k2ɽ(U{yy G=}|{ԨQn#T)GfZx1 BE|_D-Nl~ $O;kB=} 8Po>z/ʚ>ʾ}[X,ƍۣGj]v;/^,ѪU+t:!NB$e-m۶Q~/]T#Azw4S~yyyu$"""6zw~V|ƌxgZ?OZJ}wn')))m_!› .:tiii0n8\s5HLL jy„ _5v6szɓ'1dȐ{} I}]w6Mzz_ <HD׻P̣G>GZZ= �Wx5 Vh hͶG||<nbyr qe[@b4}_,慺Czz::t۷o]Z已_@"0`@ѧOϹ־---#"""D} � zqqq㏑<SҹsgMBoǃ>(kii)̙#W߿?NL4g@*5kn6Ӟ9sFTGמj&U7/zk߼}T[(~Wկmڴݻݦҥz\??W}P6=�GS,gгqF=ؼy3�ũkx6f9Yv- /F1k\G,֭u:233C%%%VlllH_fO㏫FT[㈿`, rr$^IF#r])"th4z#<͛7#UG޽K/.\s8Y'/·$yn!I?eӊ`khZ̟?o ['@˖-f |HqW$ᡇ/̇ #Ve`Lj뉲yUy5n5[n p())Q6mȷ:ٟp4 wg@U 6ȏM4-0VljecBm۶ 뾩m (F|;%eEFϴiou?`ҥr{/sצ;v@fffP%>4 q<ؽ{7֬Y 6X�M.]/Z5Ⴓ]_)GeJJJL&o@~ zwРSKM#ouj4_#T*++Vk> ?|Põ3gΨx x+X1D5ѣG՜<uJ*7۾};.] Fz;>m ([j%<{۟ԯBDDDU"t6hZ|GիJKKQZZ~X<U6mTU_x,[,<yb:AR޽ѻwo̜9f?{9ŋ;tr'̜9StR4o<ʪ}QS[<uZxҺ*虷1##CXr?>GLR{/~ ?{lx(GKrp:s4p�&L|�/?|Yn�?u2+XYYT-uY}>~B6﫮J[~=yӚL&HDDDDTsoU[ڷor>Gh4xU󫣲Ovi00zhXBxɞ>}ƍϟ?\s*M iK9y:<pC70a@W;=:24C;)k<xW/zSmIy~ l/XÆ U ܹs>:Ku0o޼/ٔJT*!o-ѣG{m֩駟ʡnZZߠ͓ƍS6$ءk|4JQ~+w[jz-Ӊ?b}x*�Q&M=; $I5k<b�<Aq={C=syEHKKWTT0a|h^hii)?{wunf|!m c2^ <2R?ӣSKwqC[EmrmPǒ%KSL;O1fe0gs Ovb)#=s;iFcFYs^L;;խkʵ1MYGG7ux(;_u"s=~<~SuE}>~B6[oUշ{|嗵fɡkW_{ꫯ<}RVV\sFF~ֱYfXj-Z{'NbqO>Q5 zJ222ѼѸqc<cٳgW_ժIΞ=ɓ'O?˱}OG(k:x3qkkЫfj1sS)urT5zt>Ͷ+F :4{gr�ᷕaό3܆pNƍϛ7c{ުBp\Μ9S *_V"}ĈaovӺuk7}1ɺ>cǎu{ p}(;.--ŢEl-|RmXl@&Mн{wt;vQ`nmDDDDGRӦM'\~„ x0w\'h4k:9r~>t:<Sr7oFJJ F6llA\s/PmOӦM1c tO=|_ь30c r-hӦ Μ9#/|GF1Kkov(!顇 8Pwq�1 /�p ݭ[7|hѢ?Bo6~m?}> q<gwhNֹsga8wx5f͚}9|p?~9995kV.srr ڼH[T5ЩS'|n5\up'g>;vLp4;U6#t:=܃~Æ Ô)S0vZٷO(F+Vo߾]kN>}_+޽{wѲeK 6 mڴ… CLETiIRK%eRaQtHQ:u*<@ M6̔w<SO=%@zg|N_!ܹUVV&=֔)S"}QT j[�H r[ǣGJoe*1$e0IVY+~2u~زeKPyG&M2~_`dڵ2dj:Q_ߙҙ3+7\YF9s4sLi͚57w\ysmr͜9<gϞU3l0(˶ٳg=oX{{믫?o8 / Oetw^y䰽uQ~}A;m4m5-}}(eeeIӦMFjC~GI$?ܖŋ>]:n_pm]f9)QN>#]ȿ(].( J2\roz-ePrSPUWfĉ;Lhěom۶!##ە:A{>CÆ U)~4z?}�Z>;v?ON:tH .͸歶چmv1 cF+ird/5x�GQZ->̘1ccѣ޽n-[hr^<3ظqבz5֯_'Ԇ.[f f͚kbڵ&G999Xv-͛Yfύ1>hϓ5<ZR#bw富Xp!>CMfzujYގ{~[ 4A<Vr{(Շ㧺m{ni;FK.xQRR2AE[Æ �UCO5J|yZ$ݻnMDDDTe&Ug3$A$QaYa6[�7oƹsPVVшnݺK.~&.QqI\p͚5CjjdqyAѠe˖hݺuBph~~#xWΆ`@jjב1(-- hذ 2塨zmڴA-T(Nq69R(nZ-RSSm Fyy9f3DQDӦMkX?.v;fGsXAsz�gZBh4">>V^ȟyga0@C@@ϯPԚچ:k8!ک[v-?�r yǎUCl:Wk.㴻wVZ[h#z"""+"""SF)ה2xЯ_?t:%%%O0k,hYx zNq{|h4 h4bŊ*GDDD-j СCsNŻ<zH͇""""r]va8p�8cǎ�޽{W^<x0k""" ΕjnE =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`C'��NIDATDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%Qv9r$EzU��ǏGeeeW#$.\˗/Gz5pԩHFvy5ZEDd2!777ҫQmu&1Lؿ?/_w}}֭[HEPJJ Zh>sh-ZHozTxw}W}2u_{˻馛"UW]%co'O<<ի#ٳg]k׮(,,rrr{A/In&t IIIؼysXYYF 2?3y/"�_Zlf͚7 ˶Ͳeкukkw<)++gw#GDd?d;yj M6ò~,jB$8q6lٳgku˹fCvv6~'|x|r۷(Fz]z5Zl:`ɑ޴)-3IʿrL*,*.I/JN%''G(7b:ggϖ�HIIIRRRe˖j/k̘1RRR<S/^ k͛7O~/қǧ?}<i$h4JFQzjLu]vk׮yꩧTmٲE~.===һ9;vL޿III^sW�GFzɃߪܹst\xyfպL4),۬,\ˎe.\P*//Wmhv{X'- Ll֭ z;z>>c=1##Cھ}&1B?)?~: 62dbռ:6_SN hx{nz-i̘1n4IIIرc?8:믿.%''{=YfI^ݠlݺUu9ܵxaaj5k͞=ZĉU2By̎1Bu,8p }]N>#]ȿ(].( J2\ro"2}g;NfY:~Gr뜢"�k>͛7z9L)2331x`~~T�nm3fP:`yفZx�F_¶_*** /@$oٖ-[ۣF8MNN\%%%sΑ^m 99Yuu[-[Dl]b a0�@ԙJ!HYPW<yR.***TϵkNUI&a]BtMغuivڅLZ #Gt{nT>??GŚ5k믿m:˯z.>>III󩩩aoʯ<VC?/^|,YK,W^y:].|uٶm0bv={6.]ޜ+\}ըoҥckoU=~m m۶͚5 hwyδHX+駟V=f41|po999زejG=عs'Ν:>/{Ez)~9s')zFclܸ1u7o= �xgиqr̞=[O{ o>[~|k8/">|xW0aߏe˖nѣ#.?>Ν^zCwO@N8 5 .\qqq_ @ʂ^jEnn.f̘ܹ֠s>|8:$?6h \{ƍfQFoŸq.h4{0a.\?dۤ'_D χe+bcck| �qb߾}cIII0`�ڶm,lݺUo;˗C쇺=z4:ucІ t!՛`0o�裏 z>ԩSѠAS ޑ*CEE;&wϡCk׮HzH4RVr͙3c-[Uc*<۾|WZFiif9қǦ[ ٳ}N{-{!YӐ!CnU^^&Z^B[5ŋL[)Cy?~WjAMnՖP7y睑޼ZHYPW)[.yCYλ6ݦY~jd%%%iܖcZiΜ9n͍MGΕ+Wϥm5&IիMϳ{=~?!l64ҨQTӭZZ8M?v?YwTz7ݦ߹sg7# jm~Y=iӪ~(j*g6TMnz=_Պ|Pغu0}tIao>U>�۶mU7|͠]}嗑^e"UVA˿@dffʿQ8u�8~ڵV\)8p`W(l6l ߎZ-Zweee;w|k3\{yyyUZӡC>}:vܩzY3JϪj|駈q>oų> VAXt)~HobI{Lh޼􉉉?lٲEUuuUff&ޚoIII:thĶJ*l6,X TcԒ%KTGy`ƍ`U{>ȭbl۶ OƥK^ YqqYfk`׮]8rDQD푙pa<w�aÆ~رc�UksrrO?ܜ_Я!"N:Ç#++ 5B^)ə3g*۷Gƍ!I=7]w-i : QK.nӘL&/Aii)ЫW/k׮Zy߾}8z(N> N6m ==hvv !!!ﶤ`0x}}іWl6߿Xr>lߥKt=jE\+Ц[l2ԩSb`ؾ};5j$I{NBكM*?㠲vBVV Ю];3 gb޽8tZh!jNl5zh.//Ouح[7]QQ[b׮]HNNUW]q9"'':t@߾}*N8}CqkzmKKKeٳxǠ~G]|6l@NNv튌 jك,\p={D߾}n6RZZ#GСCx"ѳgO'3$#t:봢(b֭8~8Ν;vڡ[nٳgȚ$;v eee�nݺ^x~/b˖-8rڷo.] ==ƁtaajN:U{kʷ $>wgBJJv$ɄM6ɓ(..FΝѳgOs$ir) vڅG"//Fm۶E~<syy4WբW^>G$ٳGߣGG";;@ݎ{8s ڴi.]o߾^qNzi]@:ydbJ;wwKh:{,.\�ї͆["77ΝC >}x<w eʕxrssU5j-ZS[9f߾}8rݻ7w9܏?jf#ѐ7|{/�`8x wuC8u6lt\}\gϞ>j|f�|w{DŽsHxlPRR[(,,DnpW{𥼼wÇQZZvꫯFǎΣ>oܸ1ڷo5֯_/CcΜ9t35O<VIAA4}tFSLfQ~qXEv} e;e4֭[UU6oԨQ˗=Ϋ9d޼y?춬ǽU_v_#+^GbzgtkҥRFF4hQ &Oh"vIeٲepjI$);;[uK$=^{XJY6L>=$t nWަuj۽;FQz7ݖZӟs`v|7^G=zs_O=d2 iժU~iӦ|뭷<N(GpnQ/wTPP I$J'N8]jj{JYYYczݿlZ)S-UTT$ :rM6 F$|4uT߫FqmnͲeˤtΝ;CtKT~?egg{] iϞ=_#[ϟTۓ6]^^j?+Gzꩧ8N$I^z%ߵ<t…k) V\w9ڶmTӜ8q6ܹS5}jW_ύ3m^s 6xLiƍaRFF!;6uUL՚5kTNVY~'?+x|}&+>YLܹsτŋK/Y\9sf/[9qrJ)331tPe$!&''<peXT0/鲲F[R7|#Izt-ɓu?<�<UM\+$IToIII+1pBeĉ'Oz\NnԨQ~{U}'b6ݪՠRs}ȼ)((6l mذڱcT'N222<~Y+O&M$=-Ku);v]>Q~X^~_|E(X溽Dz֬YO z~m4CUZVkZ_0N>]wyG5K/$?{\UTx'<N,|*?z8g9eʔ`('_Z3q=8k\O .T-6Eh4z-^}ՀtܹsU'7.e޽{=N<TXn/s}G-]pEۉ ^غ͛7Ξ]<='NTmoҦM߈#<4o۶y Bw h8A / ]}… HNNz_M0A\AOm'wW,x7:nz%={VOE{k<f{9y@NB(m_΋rخEk?P=eeeرcw=v]=zrPSVUA zs{?\u{gϞ,Å |{=\2,ӟs2dL8qX\Nv>z$?F^=RoUlv*--M(-ZHz'Nچ uL'G˚5kJ>ۉWeIR(3EckiM$ ( 1!ESQ⊸ˋD?5j\䉊22 >Q%..,4`RUw ?V׭{ԩS̚5Kw36דqq999ʞ A"""H||<6G("JF>}yEqjJ�;+P3+)" ۀHTTYl-*l^k׮%}י[>gOrr21c JN>]V-l9;O,X ?~ܦz[2lQMC[_m(ok֬!qqqvvr}vri[}v}vlIVz==z4ٺu+ƍF#)**511KIɹsHll,'s�j "ݹs{*n@i-7{*=QHLL Y|r^OƍGbbbȪU$pƍ-ؖɪUȷ~K%_T.FFEk2w\:3$G 2sLK̙#)h4sNh"+yFQF:DFF{UVI~ۓ'Or߷6PbC-[FjmaiӦ8aӧjl 1kԌi5E=abK^AAAdƍdDJk !!Ari&2|n͢`HM֋F!gWYD6mD.\(a;I Q_':EEEqs:#z ͟?_zdC_G =Ǿ3ub2x`Ϸ+/{u {쑤߿?"qqq?\g7nYlIA̙Cɸq'=D3"H&9t#BxHê> =j2BFf̘A{n:I=z4R5 $<<DGGiӦIt]J<pl1DGGӴvS#Z*Vsʦu9hΜ9|***$Kbb" `[쌔h z$ RQQ] =RI ӈ˜XV gYNNzY/'VPR> $y 4јFGuu5GzzrirF2t,jQLxx8M;{liAg޼y41tR� ֭[rw޲򀝭Y/>٥~+Wچh,b-)wi<|1='r9s qJ{�d=M'Wfz-QFV k׮IHwww ǜb~Iy9kɒ%uk%QkGߗ%)<fFJNvwڕ<|PJFMBl3f='F#ɑ<ǐGMs3FQ=l)Ji245gzd=DoMqQ+DtCG5jwCŋ%NRRRHJJ IHH ,`P\:[ =:&^-ha'~ZCo WYY))>3?5BJJ Dz>,00ܺuKG|Ζ GlDd,:(;W]ns|2ڵk΄OQ�rJ)܁r秸\ebTZ:F'-B|J;2;w;wFYPtikaCnٲMdZWgcѢEʧ:6+*b>ՐFarJj86e؎/tJzcŊĎDigaՅ`0((+++90v^Jd߾}T>̙3ӓz2uTEԩSU#Bj߿swy\:Y/QQgyYYY5~v ^b&),}R؈.-;/BT-<4+DON&W\zrQI[ =rz YÓXГy%r<z7.b6 k_fAX+zd}v{KTMI̝;W` gzO�yFqq1s.:3Ӓw9CZ戡`0G)>8(g弽bNRxUCi^'_|줡-bW=E-z=]ö{eeeLW[RZXX( f3̋eӰm=[r2m3J~vEXg%,pDXHG86c OUx|z,FypT.7|# Ehy|rz?]w+a<>>FAjժF~ݒ裏(H�� p2e =MsQ5߿?Cpp0CJ`*!ǀTc۶m0j(zc=|Y0"?= R q;h ݻ7=߿?=fZ!s�7|C0��OǃNNJؐׯ_k6I}ED�f�JX(9W/ϵxb"rJzKt:O|CC^^|9^zɦa#i�}ˋ;Wjb>駟`V,g}FM&'E@+H%rQ)zbbΝ;T`Ǥh.?jD|}}aСv}ʆ߽ߛH^^ۗVÇ[zk\zƍSL4|pMEd4Ft0n8zo>(--l+=5 1cjd0V_�-vuu5 >6nܨ= z>ݺuN.ѣe1ͰczpBK.(w2c  ~9;dث|8 �>#|ƏD^^Msϩsܸqo~Mƕ�`yzn'̼Xl111PQQ]7MCCC5L W\*^GHHH+iŊ?AZ-믿III8@+;w~~~:MnݚFGwwwqN@.! ИL&x UCBB`�P(/^ pXȑ#+ <d2C_ X֯_OLbWZB@aa!dYM۶m||׮]0dW\oj: k�@途n>}X :z|||`{nطo0@W�֭56<!) =@^G׫gdCO?y^Z`Q>ܾ}ʶ^zի&;wށVZi.� ''^Jϕ;aK9Ƌ>ye[Vs5ݻYV,}Ʒ~[ dP/,,'OڔKRZ��T;֐#GNqIIbd5d%KmvBGɠ襁k… I&6GAΝ\KJJwrs/\@Kfkk:G˖-ݝveӧÞ={5k8=E jժ:{_d5R:ɱw^Xn=W ÇSl~~>ܾ}N8& 8�@\\jhrGqDa'zzNӟ$gXׯ_*,r��s]6̼X{=0 & 9Ϝ9j4�bGd`mB^Ԯ&��|MΝ;69B`ƍ|ᚿ[hUl6z#hyxxXk׎S-1E8řlzɜά-Z'²e��`͜233vEm%-++h8r8p!>kSzP [k=@MQ2ܹsBA~`0$%%AZZ<x�:t�@6p@puuӧOC2^:MX/g|iIX1бcGU9޳BfÃvҬL2d=M&DFFBdd$� \ AAA`g%'+{sss9EBmP5/vI.X󊲔ٚVj/ g-ʮ-QA-[ԔOLLN갞xCv=a妖֚1Ț,`-[-[45++z=¶m�f>uTv޽8,,̦L={N+W_qYfAxxS˞ZV�SZ</ի/�o ’%KEuX}[ qPώDl!:#z+(N93/&M᫯/Î)GY<x0]֦J2mwtrQڷoϽl?{,pK/qZ&?j:]%6_);jk-,,Mcr�HlCmҤ 3.߇SN@_)[`3[qܺu+= 6mh޽{{!>>޽@X:[>-nty`qfߟ/�P#(,X[N,nt驺i!x~%NCLlҤ lذ֬Y#mr2e o~o<d~~~fmE!AիWC=`N5�}wגyfnYO<lԬoz==֢d#t _%zVEIey &ŋm*WJJ <y�I{_w.O%aĈ~ γǙ< .[tV fz嗹{)=rB$v#+XRQQΙy111t TYYI �UL(**j1[pww4l_O>I?M P3xUZ[m :k׮YMo69^M%/vV@ڡ}4Gv^~QݻwCHHTVVҙx�֯QQQo�|}}#t ڴiM6bu{a= .]cƌXy#@wyG5olwYKĉ'`Ȑ!̭Kh4R/~ ,Y t?ZyŇ~H;HkKrjvYPPk,FAVމ2QAxx8Å СCp \TT7dx/ز?Om;XII 5$jzh]&OLz=; hݺ5<swb;TX4wܡ%$$v{\IjHT7x"7,;!5Yǡ'Ƕ=X[-///M^!Rk{?q;i~$'OUVQ/ӧÙ3goKX233zXb]4Oˌ38ݕ+W-6{Mno04oh<qӦ<1Yľ$PjœoAW��$$$@`` =z`777c:\|)qTVVN 6[lYYl߾^SCO˖-!00.ɓ'k�?N͛7 6��ߨҠXUm�8�z*؊D.]ۛ,b]jkɉ'}_"##!$$<KxYs ꯿zzK7ple]�5`g"H/^xh4ڔ+D˴ucˋ K.K@Wi٧z3XPzv횪kjqtw3g΄rHLL9sPo]vW_}%G S @y ?DƞJ%=zkyjq[.Yw3PSAMZ`yx<&K �ɊmYݺuǏìYӖpXD,`7|ӡ'.,bm lrq.xϟj 7ntڲ͛òe˨GARRCppSׂׯ_jaߟ=&%%eT��sU ڡą GZ�1kcɂ/2m {Au5/M5k;wj83/9FE =_!00 xرv-G-VGȀ<JoݺT"lٷPdu^+ut .99YƊUUU111쉳ϝ;ǝm 9HFQRѷ222-OOZDRR$''sQ\`gFh)))l2,,FEqF3gr:,kcYEEE5kvJTWWsBqhڴ)$ƍp%ZgkfˉTA"*xeDsfZA%DU&=3Я_?HHH~" >}dfpmX۰<yfs٘L&n@|r}ilzW9sƪ˴596m4m^~eΓ7##R{;M2h z|AXfl: }E}5 -NʺAaȐ!0p@8p ?Kaa!lk?x+R_~ h{sm?,MZn nnnZˇjzJL&nsεWub|T#//+ś>fGU/+**`ݺufذa|̙{ei?Mh[\ QD<ڷos˶sZdO5=̙3fXfDө�z=V\ .>MziU8O;v<BCC>x�&NHu"#FP… $[&v)&&)3EZpuuNJ0zަ0I5?B6kΝLǐ!C$nرc !0vXU e"/%iXekΜ9X4;GG}TO?mvFB΋Im-iYfϞmǒ!yѣG0b1b3F1dv8Rz[˒,VYMو&I54xqq1 6 >O4- oЭJ3EEEvG3!iׯ_mDDee%={VрR|;v """$ Q~)O4 n-MKK?YǻvQ1Wv7h YӉ$سg<n֬ϰo>طoZ5FF*Iw9K;w=I&^(4rc]Q2gKm6N23 8J]ҴaòU�~G=U5N$%%n=o<0aL4Ibٳ'{5N={@`` =۷/7�nPBRpaKEH۶m98rHzܧO^F -2}7ڨQ7FȀ?O0i$4i؟gU&<I&~iMԥעMJ)4"_HrY$~&q&"�@?zƒJIڬ,ȥwww'\x.̀ȓ'O4=">>>\cǎqio]䕛˥y&1\Tg �YfѼ֯_/#Ξ=[6?6 kgϞ|wÆ l߾KZ^dggs.^]ڵ+1LzII7:p�,^XRP^k׮\ryUVV;wri|}}eݻ{zRUU%I;tPI-[{-.?5>|Y,_|rtݝt8O޽{$''+cۿbӧOsNh4Jfw'ŲyiM7n=yp6nHWVV@Hd/!رu]xzzJ`(-̛7YplPQ։z֭[ܵ0.+W .Mff&i )--:4]޽]r+'6rH{zF.lU93|pŋS]]=}!ի rIV>}fK4ydwgaeԴiӸkfY"cbb4ԇBȴiea]BIOOd+$:R_Esy��ILL$fKwYރV|uJ퓤e?^O._]OKK;tPI=/.WӧOsX\\LOΥ%yݺum<==III QnfddӧTSغ&Z}y&kCr}5Jnn.FrIٴ_{Ӈz,]xyyq卋}UUUd\H}ܹ#;^BjtM6I߽{WX=}wb?'-Dy߿_VF}q„ #e?(C=xKC|}}|XyYÃܿG&Kw^zϏzj r6 g~?<&OI^~!)(,"b"o>b!d  #K,!'O�"8` LF-iXJUXak+44T`��9s3ߣb**�@d* ~L&7sL2j("9C!\ NEI " _I$s (/XI!111|ݻ'i58qBϟw(Ot i!H � dѢEv =ltww';|$ƥKJIHHYf Yx1Iq%~^eeԵɓ'0ҿ2!zϟ/)`` /8M,J 0q}rƆ)SpyL:U = =<<;w^/,XXd!D?&M"[nB9sb>aYv%rrrd2IǏ .$G?J#Ç~>AAO~~~f0~l%%%q'O4BHdd-oYr/P_O{e?}[0ƍ# .$Cם^O뤦ʶ\V޽{3gŋ0YMWWW`Uɕ+Wt}g%RVV&;(,,]BcpUKjC&I&Ɏk:+dԨQzt%eQ3eSk!iy鰘L&2x`My;VVe˖Y+$$D֒RQQ!iwvj1<yjeߏJL:lm!3fpD7**jڵkeO W9-"DfΜ}'>>^6hQ4yZ =ɒw(*-ɢC/E 6>|XQi'X iÃ<|Pr"2vXMr588X8&v}||dOQQ"tum!7n(ϪU.L&A\NٳG1kBjړ5F;xB={69Ն`!f6]4bY<|Yyu244C!\~L0A{gaZdDԩSVǧL6""B}n*}[ =IIIVۇ`*~Mz6[u@ڵklCl&K,^^^$3S:Q_lϝ>}ZH+ǎSg:ǏפC{xx(NH[xĻZQҳYILLDoqss#f͢P-g%2uT.ϑ#Gj!ZKmȄRYcgŊEj'z-*zD#8j=zX&N`0իaϞ=;pj aǎ?�6l4"">,n ۶miӦܦz>c!{_ |||M&L_'C~ŋ;Fرc\+AKyP l2Lz찰08~l*�6mxnG>/*n!""_ު#G)RB,;mѢ#tޝ3jС6Emr&UXa߳0vXؓB޽ƍrzX`8qB6ȳ> 6l+iؼy3ܹZn-dQPP|'vŨZ뿸בZ 66ùs`Ŋ͆ W^LYaUK'VZsΕg�Pdjj*BCK4ooopGDDD@rr2W?RXX^^^0~xI:?_-s\T, MU+o].]ڵk ??f3=zq~xl[" Xƍ\p^ślQ�{,]xe^}Uu떢6ep曒kϵmqv1?< ̚5 ~glnnn ǏݟFL,21,,`0yСC!u{=HMM3fȖf̘ tY~ݺu+I&ӣDf`pY<())۷oÒ%KM6@"T!Ȱaøsq.5CJ^mȄ͛!>>^V3fHޗXg!%%Eq b 8x$}F#VCTTBBff3TUUByyt4]ի۷.]omW\̄"QXV\Ⱥ<HKKj0о}{B'MNk*vC_lPx ܽ{h4:T ̄l0СCСC27_5lt\9ݻ...ЩS' P\Xн{wŴtSݫrdhݺj}RJ{m=CCaa!Nii)ܼyJKKm۶ЩS':} ݃ǏC۶mMFw|;v ��:)Ehs6HrTWWãG ##t:o:tMNNA-W_U%%%p](,,m+bLuVXĉ47R]] �P3Hf3f l޼��f͚E7f" (//LxWl �m6�f"_"HMMׯCnn.j :uoݼ_uCi HKK|hӦ tI1Nl\O222 ??6m /k]KKKʕ+chѢХKͺ6 ΆMoawY_~t˃f͚믿]t;jzOtf͚;w&? 9Õ3Ȁر#KvUTT7oބ*70 ~v?<L3pum :t:h[ l 4Ԡ3hӦ/rrr0leiz.<;%f͚AΝ: i~mڵ+\z222̙3f3<#RѴZh8CNgWwuuyJKK@{ѣW^viҤ K)" m*;-[ry�x%/φիW9fLp5�X,Pg777Y3]k�z+r=zlNҬY36fH:Z|VwעE ٳ߷&M6uݼys#hT�Rk4%g{ǙVZN6FuL.|R0ANV;v"5Z鱗lX˲2HLL EA0[oŹſyfHMM*�J�5ކ �m(,, pKDGQ+*--SNʕ+h�v-f"=L2ٳBBBÐ �5.\AAll,M;mڴZ Ax4F ׯ_�+VwYh_:TVYyEi?�سgDEEɓQx/Sv54СC!;[cٴ& ƌCzn_do !!$Y\^aNHm ,]fϞ uVECr|||O>tbiǎt`0p:cĉk5/qE>,1(m. iiiQky^r=Yeɓ'fzX`xzzs=WEҌ/?^vٝh˗/sF-\|Yb9sս^쥲RH*ߡ^۷n)BKBB|嗒fVZ6lP\>̼^УG7ޠ l]#.s=FuÆ {yTb7Z 6 fi׮;ԩS�P_ 矧!ۛT:vHE)r 4\]]i]،'$''î] 55RSS͛��гgO޽;xxx@^$ykΦC[ݻ]JVn}Æ W_}NЩS';o8gyϟ p5|2<|^{5ݻȰ ADBAAAh-\    H@C    H# =    4    4Ѓ    H@C    H# =    4    4Ѓ    H@C    H# =     .#    m1=    h$iNBH}?+    HC P!yAAAA-UUUԣcKGYiYY}?/    Hصե[5=.PVZ˷AAAAjBQ;H =lf...sqNePXhFAAAitt:c-1У頨AAAA {bs-=z,7pqqWWW6!/? p    B /�lWWW=V\B 9B //JJJel˖дiS֏!    @ee%@II)W+xlJd]s,Blj*0`K>    5kt:54iYtqkt:]GB@;Ͽ >hAAAAbqyt:4E[8mX%{r. fa"   s}xt:4Fz~1&4 l&:̲-�tAAAAn,˷,6lգ緍aoF-AAAADDΐ#Yc[ѰtX{؂Xe[    (m,MVS    H7(qc&C\x U+AAAAǙ =uQ0AAAA6tg    4Ѓ    H@C    H# =    4    4Ѓ    H@C    H#VY����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/Live-Editor-Usage.png����������������������0000664�0000000�0000000�00000044255�14332737457�0027262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��c�����F<��HtIDATx}\Sg/HBk0�[$a;y-M3PeLJV-c-i۱8l5YZ펡CX0&jQp> +=/_SpΕ䓓+'f@DD�1&"cLD$�ƘH�1�c""=�tw\S{D6!8kO[ @K76Qٗ_#*f cxշ{= 1;zI!8pΘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""00Y=Xb)ҒQZ$=$A1ƣvIPZVkeeCP*I| I0MXUh4 ̈́:%;51cF`w\\ BF"ew G]eӦ~UKK#vGFNu !<<BY~rleD M/gel޼ I  �[lƍ۠Ն8{ӅA ;=!! f8;cY>c]wEaM�9JH:���EE@Z=X~%OXRR�n >| Gg~#G!..11q#jƊK_fee9*?=_$l*N ŋPSc@xx~(+{ePUmm_(O*C}VpkVHMMʕkQ[k֭hn͛w"&&۶�jr?|58 �x4r{gg?ׇܾ)\DhBuQDFNǛoA$$$$av/8Y,((xnJ!'G)DuQjACCMá_cm0MxW(_;usĹ0Mطx"s:4A{i�7c{ATU}�фP/h^y )=}!֍i4\tV2:O!'G,�~Z{m^<ea0TIaǨjݛL4�7s~W Fԑ#f4d:<lY2ՆB S◐d7`LX,0Mxŗ7˖^XoHÇX~vvΣ 99zeO:<<qq8smI4%dWyXCy{'S6\+Aߗ냍 {ԀFeڣoH#\~K'C~g9\z&Mr$a0r\DFNGg9H4Htww�fώGSSÀ9Y"Oi x/kj hiir$IB} de-Q<hGcc۶t qqDdtttU-26?awZ:H$4TKn<X+-V8{L盋:?Lh0mʓ$IQ<q v]G`FmQ#OHHBVlwA y44ٽ 722=!Jwީt( uÕ599zlݺ [nRrYSh5kJ4ՠhzHL;`xq.֯_ Rn--Fe:\lGYବ%ەq^n޼cŋsP }Ȟ|4FжIHf+|+^P?i<0 Tr NS 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�ֶ5:-,\zz sjHNNWI T-<o5�Ot󯘧u y 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DDP{�ZZZpg͆v)%%%=L"al6ڃ cÆ CC=L"ap\'DDDĐ=D"02C7""O># cL.31bɥ{Dcɥshp1Srh<؋^ዓ`= 8]|wf"##Qnj8Ak2b68c/.hyh'cZT l7x3L�k\|Wg#?GEtcN~'tߩPei?OH 32w!A t="�1Wf%= pOmh6}k|qHcL׹kEjǸ#:= "\|WQ~|Wa1DD"` 1&"�cLD$�ƘH�1�c""0>jKlls jfbiU{SgLZB�\|\%2rWH1IHHBV44jVuwHL$NS�w8ҵ(//EiZ%M+ v��IPZk!I\0?M!_F^Ka��*+,`V]ScP{3 cL9cN:h4a߾Cr>|UUh444ԡt-� #cѮ,ȑCKDJJhz:Oaժ 0M0MOBA3XZ2%IB} >|P tGG;q=F1&;fs"#cn-�42K+f^|e%Zm-+Tb=:]�|s OIpACBBrŹr/_}u _}uJ tSSt0LvڛhT8gLڋϛ7DBB9mvmjj@KK#,+<<8gd,1}�?chkj غuӀ32)ˬ?4L={99zן@F"L2UJ4*1ȉ#*jƐ?>擨1(ANQ:/ٳo[G',^ &%5NSШEFNGGYtww {9yOvho?=^ˆB Ù3a;%%B AT DGBqq>nGF1Q++{Hv�@||Ұ{sU^ fssٳӟx"X448MAc"Ok77A<.5SG\fBB6oމ|e8<<.7He)H!:zڛhLl64ywi?;tqw 8NS 1&"�cLD$�ƘH�1�c""0DD`̤@L0<�H}4z= }Nm:~{;Ek@cm4Gp ":c'=/ )Ek/wc#p>=rA0:B1Z@z:YSqU :{~!zCL`\O5*JUdž # 5ut?L@1A#md/2m"B?Usamy="!qH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&ljHX1ŤIp A$,Ƙ" �jHX1cL4<Ƙ܂1&cLn 1&`[0Dc-c11cr Ƙhx1cL4<Ƙ܂1&cLn 1&8q"cL4 Ƙ܂{Dc-c11l "… 3grO?I$�@fO?;�$H$ NS<sCO#88X! 1&INN? dgg=<"0Rsh Ƙ\*99vqh Ƙ\qff&EFމ>L M="_c+r n?+Q{8DBbɥc+δ^܌p\nmxGa 2}C �4dA4?_=4"0C,c bL4cLN5Re 2=Ƙd[crцX Ӹ521q:9du1B,cɗ14&rbL1QsUe 2"ƘF!1kcrB,cɗ0wX `iDjX /`iXjX ciHX 7ciPX bi�QC,c1dGd61)<%2 cL�</IJI xgx 2y6Ƙ<6IJIOQ c}X6)p2d`dddTdDd4d$dddcb{ 21R &N~5 21B &NgI,a hc/L"aC<6 21 0$1 c!XZ -cIMrE:%[b)_^B({ Wo޼F F ӣCxx;6ר1Ȥø{j"=}!֡eX,N[nT w In 1D9ٳ�MM i|pCݔGee9�鐾{ܒ$tr^Y+zer`dr CfV . gX�܌^VڠLg'eﹲW]&TWEg9uHHH;a?_�> фqV#uSdr \:$yvIpAbX8:]`ֈU6 *j�@`W8~#�ϯF`?z]eyX�lmXuH6 юzugd,Rsh$㓠Նyw= {YDCa=HަjFWy$'?VT P . Zm2z]Vn['&NSxM3`et�. 3&2r:O h0m<I#u6܉1@ \[7aٲBh!jClY!`sLLRSw!hKN~�55_ݥz!&wl6Ac) vcʵʛjC]6<<ЭUjsfb'ˡՆ(yN 9k*Cw_j2wbRcDxSϛ0ĤNSx85搽CLjb�<~ 11 1$؋0ȣ(c/#2<"D{M3`dhc/A CL"b<CLb| CL"c}�cAf0>`}/!&O _2CL1Qd<cü1 1y*mî?7Om <cۺG؉p6l_(++S{8DfaҤI-:c'> s3</~ E4*x>d2aʕ>}:v؁�޲({ԓCȭjlڴ =mۦ=cb刉Aeeb�Xq!b�Xp!JKKqQ,_/_V{D#➱9x JJJFk}ycŊ;;wxWFAv$IJ?(,,DDDz-t:O4(G~'x=т<>3<FEE"""ԾD0>ॗ^BMM ^z%?䱄X_"??رcU.D </ve,_555xWb@7b�{gL4 K.Essjׅh03R===~lݺ?𸗩xCWWWގ۷#11ѭׅh(3BgϞҥKq)ڵ)!!83�{nDGGg'|B4˴aҥo{n-8)!o%&&�Fׅh$innҥK={`֬Y.Yϲ B, Į]`͚58xˮ #c/a2",, {w2Ȯq_/㏣vr{3go0Avge;ر7ovzNxsrr2mF1~_w#08`\Q#}mٲ=?*c {;v`׮]HMMkXdC,{_Fn{(?vZ`A%IJ{ { zjh,Ze|V^8l߾F.{˗/& k֬EҠ !_o|#c=Dߏ7o޼>CHA=2+8CCCoR8{,/_NlٲwC X&FAEEˏ&';wC=-�owo2N<K�ك9s=Q[a9+{deWpgE}}C"/i AL&X:+*v dގo}{CN<s8uoQTHl>Cc֬Yx7.`zzz|rOBII yNS(..FBB*++b`׮]HLL7pX ǛQ\ /رcx瑗pȃ1Ƃ?/<W|,=P�76n܈Aff&^yCh|yHaly֯_S4Uͯ 2339]c~cͧO֭[כI Wp7ԩSy�ڰ|r\p۷ow_o&1>|֭0؍N<WbccPmm-VZH%?&| 1uTٳ!)))x7ݍKԩSj~DFFb޽ F2o<TTT@$~ 1v1111x0aЎ;PRRdڵG͇_g}|C" <?ޜ^{M ~',rK/wiӦƬYP\\o|#Ǜϫ=$ԅ PPP'O?)-[HexK/j'Ip ~I14Z/">#~㛏cIx7|-[oј_7|}c<Ǜoܸ7x#z3c˖-8p�G1c'_Ĕ)Sob֬Yj@EEvo|A<m F# w^FchllD^^ G7 ^{5~5"7g}\$$$_GPPC"/VSS^z رc!4(H�XbCL.~W^U{(Ar5ūo` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�y\p�pY�C駟�0ɋ[>}W^;mQ{dK#عs'***<_#??_aIIIQv� ᅬ`INidggW=WLO{C\a�>{7=8 WjOލ1v`>0ȕ�1F`` � 00 r;�|~c�}Q>0岳>�?5=-q:.^Sb3-4-٩?^S{nw%�)S-i'~pǕ1=61B}njCWo ; tUߺ{|`fj ^o!3 0fP} 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�Ƙ$IBiZTV=aǗ+jQ{HD>c\Z$)uHKKAHg0T#--yfsݨ )cox=jC4>vei||*ƃZ{{w9 /PG]& I/#2rVkVX zLc6GwFdd,Fr| !<<4zн.KG(I| �xq!%$$a߾CN[elܸ ZmCf;h.K15%%娪ګ\T _'*))GT �?�\`֭�ܼ CCoǴiw؝'߶Zmr77֭+$9TUE[^Ҋ5k q}n|QQ3R~:�6oމ$ge=`ekm0hp>;Ma|+W ܚW<0MxW(w2 #c3'G)/ׯT.gpTWp3W(۷~~~ QTNY ƍ;EE`4z 1p{i�7ejՆ 8n޼S/?>a4P]}e$ Iʲ_9@Xsr?_n71hp>};q' --ho?_<Ȣf 'G:X=8rRRSRҐrZ\\"#/΅NF7O8 A<`Wڠ<OxHÇh\|_ijj2SSӑ�h4HLӸre|!y:/\>oZ~%֬)DmQ t 'k}_[Pv%CW~)7O?uWSSt0DGTuhlGMAyIWF"<qM\"7Ptaho?=웣7#'GF=>(wb<J~3nxIi_��x}�n ?F޻<7/y/;Vjήd2S3g,joS{Vk7λ}|,[V0됒DlٲA $ Z{9z |wL$N%t0̝WEGτNfw;/Ç3Te0Tֈ<h4_c:evhn>i7۟FAF"=u\\"bb6^o!55ee/+WŶmgf.V;*jJJʱfMݼ5$IOl((xfÕ7aw;ˇ G~2^ >d<GƐdqQ vv۶JHHBVP6p.'U6h ?fS{ɿWaú/̉*+yn\wҦp~ߛdEa$OaV$=i ""0DD7"  1&"�cLD$�ƘH�1�c""0DD` +>nl~:V\aGB\OEO{ׯ�[^YS[y^nYWCC^|EkHLLt:'NIn\e"Yz5.]_j&i&?wg0ܳ0QctkL[{*j:.v'1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$� wy.\���:O?�lI^䭷RӸzi ,@LL$'l6!;wbz=&ye V{dAvv6={ O?1މ1App>0wc0؃ rv�c \�cl� ';(88=�G\.;;瓿жjQ6 ׯ_?0 ż4Pׯ_�W{(|A-Z0ưq=4rݸ_aP|{~CY+]S{^eOMD&L1x_ N9c""0DD` 1&"�cLD$�ƘH�1�c""0DD`51,GiZHP|bD\#~Q$I¶m`wzV}=fzQ:/t:cHHHR{s8}855Ga4P]}G^}]_zhj_}r2NSh4$&Ecc=::վD.599zףf`߾C+2n3 r%+ j*+a0T+XVk2:LͦdTV+Y=Xb)؍+֗<`șbiEnnt伾V&XZG\NdtttEww j~>6,pr\72}[ml6,v7_}Kclb 'A $I(-]s^ eU^�P:"#7˔ ʜe;nݕ8| >hBUhh={e0Mx=jC\gOc 9c}IwީDJJF%IBuoPRR>f %% '#'G0?U6(ˏOBA38s+^4#z/47ğr_OO_86XZ:/?�`\$$$avXZQP 22)C fsgB CSS;MM hIP_g'}c\Sc…!--Yo൴44~4 [/ꔽt5~WHJP)/4 MC ل_|YVe Z2=6WjEvcvƸyn<FAajDEP~Xdw tu$ixx. ^MHIISndg)ySS#;'9r))ivo!55&1h!OR| ] tGG;73OM鳜v4,55+WEKK#~ZL|YY9.<ntww)AJSSZZ?5o|uWCj+|1vi4dga͚BQRR<Ё{bb#G!/&1%K+QSc֭RSc?='omHyR-+{O< �St Vk|RyeWV�Odtt S#77 ԀD̜fYN,!! YYKfώW";7nYY#ī̋Z,X))ix=�nN9>|ХfV~rE+9Gh`6סew7fVzn:ɷ먑$Ԁ3g,HHH~,HyFsIdd,BT=:5'Q_sG}]y\:g,:r{Xq]C^)�. NBB**Ecc=jkʔCߗK۾bb9vj6:]Μ8e֭P[kT3yĹx2�7z֯_Qj#siժ0됒DlٲA3$ sjee/۽yNW2�pn9Iֈi#q7pEӀ[BrfٲBTU;lp9hytLA\\"#\<Xo`GK̞=8彎ɵ\6M!/+{%%Xr-m{n83sh4XUTV+s7%[yyc}!!! ))iʲ!'Gs|`sYYK99z+V"|�`8sƂk(.W0#PPz8 m.DFNq *jJJʱfMݼ5$̟@d9]Ml6m3p.Kwѩ=NTnL ?] N@C_ +^?P|Q'c 1&"�cLD$�ƘH�1�c""0DD` 1&"v?pl@: AGQ{|!ڣ*~k�w=�'^XX/b_y.Ϙ|u_'ȹ8gLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0DD` 6Ma0D cL$�= rƘH``ƘH``ƘH``ƘH``˗/= rƘH`j܄1&c;c"1ƾ1&K.=r1ƘH`ryDcNH , �6 � BLLC#' %33gϞ|^|INi "Zj󂂂c"`H. c"%'';ĝwީEc"A ^wc{�0|{9gL$ m?O8c"A{/ U?,0D. H�=zAb3&L}B0)0�#a2Xe wc1\e bHe wbT6dh,!1ޅ1&RxB,ccLgX {Ƙ͜bc"7rEeJSIc+C,o^&M { Ƙ b}sdO;C,c=cLBbYc"Q32s0D. x!1Ȟ1&r2B,c9!1bcDdq1DN !1bbɓB,c'Xv3ȓdA0Dc!7W 1&oAcL4Jb>Ƙh12Y]192Y=1|!2Y1|)2cabe {1DCda cLC<dWa`v\-4 0DdUc"0ģ cL>!=ci 1bd-&1OKҵ,w ;cL>!Z{bR%3>vy] cɧr8+k FF**EYNDFNwy|cra0T;mWB_`ǎ1&qxx$Q_$8 ,Vf*Yb)m0T+㫯NٝzAƘZoi4LvO K+ AF"e:#'G)e~l^rre22A ƍ;n=ؿh4a_O9ߑ:wdG=�"W~͆G jGBJJ*Lc2}?FZQQ3� Wi I.&+>ËI~_ckOv㯿'QUwYYKюz^nSSt0DG|gҹ//bꔩ cjw P3H}.[$tvC||nAV֒!|p]qpu h7խT3&7$&'?LtvSO N눌Z=ߑC<z1wj-$h4dg硱W(XZqn�VEkw8\7q3Ӆa˖ Z{��WHho? �l6A.gt˩SVk֯_i())WTY,Xg֬)żyA�|9ϊq}u')$a۶WQScPz;8^g`ǎ1& C<^ 7cǏ1& ;C1,ybaɧAA5عcyw  0A 5ckV _ Pba~o !v-Ƙy cA0ȷ0 Af݉1&/!v/Ƙhdc"Rbu0D 3aF1&%o 2C>Ƙh ) c1 3`1&'O 2C,Ƙ <) c"' 3bH 3bcL 3c\@ 3Ğ1&r{Ƙȅ 2CYc"S# a`n> gbd}4!\12 gcAf=cLg!1Jd{0D*ObLhCfcL$<ّ 3މ1&#AfcL${7ƘH0 4Cl6MA@x7v?!jw}@ C.i "]aA+ҢPc"�&NPc"1cƘH``v5�/`=c 11c 117 {ƾ1&ɓ'=r1ƘH`r1D1DE`` 7`7|cL$0w0Dc}cL$k׮>1&}cL$0w0Dc}cL$^ƘH`W{1l6C 7` 1&"�cLD$�ƘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""eDBW?둜0ǵc駟ڝVWW�`)s y^߽f.1`q8=""O>#a41cL${+~1sh /%]_]U{48̼s^}?ht0%yEǁscCqvnܸɓy;z2kU<0 C^{^l@<0|'rnpΘH�1�c""0DD` 1&"�cLD$�ƘH�1�c""0Dcd"77fsS+IJKע\qX=Xb)ҒQZ$z}�`FZZݿ+jq:/=ۮD`Fnn&,qjAeeӶTzT'I| I0MXUh41]OnSD1)#PQ.FF22q@h0mj_M] I/#2rcj/ZZU&--hlOd{=Cxx(,F_IC=;�ԀNYf^^W#%$$a߾CZ$Iϐ&ӱQ=8[{itajC}=f{ۈ{4{+v/=3yϛQZv/=pm^P K`6)s/w<ee8mzb|թ/߭_'u&\[Zq4pp|[V}orlݺ '2SleeݸNS4$IضUPU (-]\1Ӡ$I;TB CtLNyGa4PQ.@ee9f %% ';ڃÇ"'G{ʕknr>|UUh444ԡt-� 1q.ڃO>O9rkO tuW|;u&ew_{w96n6e@yy/츷uee9P2o5hV!6v͹d:ĹSF5ؾy֨<h2}#UUUn꣈7,$IHHH;j4~F Zmc1@ TyFkilbIqzSHKK…aڴ;;rKK#OW)+LN~�h0r$-V&ʃE erfώGWy}朧f۳3!..U$鑘8d:fwe qDGDlV td߫XZQ[kĪUɓ5c;gώFAb\'Ng#'G,'<<qq8s2e#%% �ƕ+y86v_`O>OeGB<Խc"<<%%jC~JΦh`2S^V;%ȑC+t ))iC7755zSu7!&&'Lc8~#̟� uXp=Ca9+kɈ $IB} 'jvl;455(>\wy5{v<@KK#2:{Lc@;-.Gb\/p37nwllªU B%KN~�w{ f �P[7aHHHR}<]|55~#n4 *!! YYKpAX=(eod811q|$$$8a)d522A(A^~{^mV%:hlwx[ȇ9e ٮqG:?𺢢u;AciHO<x}HIIC\\"l٠Jrw96plwtD%'!6vfFEpj_C*I9Q59޴x3Ӆm+W$ez(|nyOFͩǏ4qH �Zm(t0 jk^-1!oUUEm+WEdtde=w7de-Q^W47h.я!߸-^X!Ccc~HHHR u/^C?ۮf LF\ h--1 1qZ<Y3qj\�PP 6/m(I?nm֗'/῾Y_'r33C^{DD` 1&"�cLD$�ƘH�1�c""0DD` 1&"�\ދI{Kj]w0^jj?B&MCv+49c""0DD` 1&"�cLD$a'z����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/accessibility-div-example-2.png������������0000664�0000000�0000000�00000357737�14332737457�0031310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����B��� r�� iCCPICC Profile��HTY}$ХޑN�)E%$c *vD"ʀ(8:2ĂA@2(`~t{;ww}Bg Y"�(*ЇD?`Yl P޿w4ߴ)sb6�P2ʩ1;t" �H7\"N0*"@oMpMp�vE Xt�ڨNGl+(O8(A*;{E t Sə]TY~+]S}M/fߖ%]d(( 1f. 5,|IIb-Mf/Dv6+,tLY 3fbi-ݕ&eL3K4s43VqiDžM83:d&WIds>3z/);+zg0frdq~31xGv0+B 9Ѳ9s6B6 Vp4`'.LHLOIh uqiLƊfoko[DNAH}'Ag&:g|I4yf|f�ɂ-q$�T& X{ ܁7 ĀD�dXV�`'(`8ept�Aw` <D&C=D<!((@Rh*2 ~NA硫Ptꇆ'ɰ a:̀Cx>/s|x3\ WG<|(9D G:⋄#IH"BV!H R!HrC^ 18 CXc1AX  S9i\cF0_6eb%l �$;}p8\.[ۄۃǵpQ<{,_ߍ???z{B�! J g ݄1"јF 'rˈ[AIdJ Ő2HkI:%R/鍜\_n\1+rrd /9,%o&$P(7%"lP.PQ>Sm /  % 'n(P$*(*W)+R8DUS WVڤtXҐ2^D_O�R}l:~% NTRrTCeDUYQ5Nuj>5DDEmO: uF:n45=4i45ja,"hպb,YYϺ k[hGi/ާݮ=#٭sA煮nݳzT=O=szh4-VJHҗWw<4$ w5ZaTktߘhL72n3~objodTÔikZkkF12[lVmvgN74ci[8Y,-nX–Ζ|=]VX+W+Uk5:ǺֺF&&ϦlIn6v;e`<flr[�M-{:Q:mpju,rsv1rIqpCWG7ѯb]}\Wv&q;{a9ss0`yTyy<S<byU{=6x~0gd00^|Nu]u+? 0H  t \ td3k#.+/CCBZBsnf&k #L#G,|e"-0p-1bbq qq5qf'LOlJ'%H?odM/uւg*,d-<MO9Ϊf2S+RGؾ]o0׃[}V6=}+22*3ggϊϪ&dd( 2.ZKh),-v[s(Dt@ 狛$*(jIKs<ss>,[rbRe6.{rr+֮_XY ZuՃkZKZ<ۼ⼷5X@@Tpg0?qƯkEE%E77]7meVVۼ*V*->w{ڎow.yıritW_ihin[w.WhWlx{޺JʢO?[XPmR]/gߓq~\s@@с/EXRSsXZVZ;|$HQMuuUjE1grxuZqzjX0kkJl:|ٽo6<-gIgώ=7"lyq>@.ܺyRȥ+._hcqUѯ5^w~wOv8w4p5lW~7/b޺u;;wr˺~kz<~T}}gG?~0xσO(OJ=:=0l޳c/ R_}$adMo4|u4bѻwc ?h~8ScK>?~15kx%bMJ]pZ�Z8�j'�ySZzҠ)?I?ޞ4g�PO d=�e�֡y�@v+d&NsEFuTeX}h�4٢yS*clJ`: л8g���eXIfMM�*�����������>�������F(�������i�������N������������������������x������������B����ASCII���Screenshot1"��� pHYs��%��%IR$��iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/"> <exif:PixelYDimension>322</exif:PixelYDimension> <exif:PixelXDimension>1722</exif:PixelXDimension> <exif:UserComment>Screenshot</exif:UserComment> </rdf:Description> </rdf:RDF> </x:xmpmeta> ���iDOT�������������(�������]��@�IDATx|G_[pw+@/@SQ mq(,HA$H7\g%w ?ٹy!ÇM׭[ZuQk0WRF-cM7oOܟ(ٵ[[4CBB}OdOeZw$ض}lۀQp>}Ԫd6g<S V1Uܹp=m\nxlĹb{s\ѩsW9.>e!oX2:6<igxu妑ia99h����=zD%J˶xjذAѣGmd=~1^_lFtJ Mկo-[G^=qhS6M:sn@h}7_S.ߙsgS1b8o6V3m{:x | ;z \,AJ.CuŶqšF#[A�}ϵшݹ\]c3ӛf >lFPZtP?���� t9,xuJ*e$sNaQ"(N8tee}*JO9䠔9SYΓtlTeu]9Iϟ8_B\,Y2U<޼ysO#޼<xPfN5q{ŋOJ :~ +^8%J"O|t]L0ed̘J,A L rOx{s$;(gThQʟ?_Mk:sҧOO %JF"Lz>sFə#'eϞ-B~gX?w<:}n޸)R@(wݓ+VK' Eڒ%JRҤI,\9ylu^O6ى)EL>bHk ~XyPmvEdɒRϖ JW)KGu(O Zjڼ.[eE}'>j!<yR/~Tt)*S,۪˗t):Gӳ]ʈ,* [&ݰa_[.TvM.{T3Qw+<:|X6l20aBǏ'OPB(M42uWy<s,e͖UNq0N8oqFh+<Nx{)X<K ="|c91+U$%Iqbysʚ% Ν[?ΎLݼe ={խCr;w,q,y b|`>ϔ/͛ʖ)MYf5dL2.]$?#iӦ}w[OtW˗)c&q{mp;93|:G.+eʔa|&p Gnޢ)RP,b *NX0ёOG<s'/)R$½Ϣ;$^^t)U\ʖ-K'Ÿ{J*5l#u?ٱ<T<wQ3?N3XB|o˔)l {FI"|5 <P|{%9aXժU3i?\O}=۞cnbH:B?qRLEUT2>]}T?3S[RqyL.Rv#MeF:2e->9" V9= |HWk)K,jNJ:ESs}(o$]8�����(< SN҉IG]j01fȝ^bܢ+҉iDŽfQj')WTg*дO߈牎BG(ŗ@Ŋ5fΜE?8wԱc{8pڶ ŶS'OXϒʰ۷XL$rGЬY*4mGG'YJȺO?!-KXO,i`^{ {B;tM1a5l19BdX⊸\[C~Mliʭ]JEJe<OX6mat'ny<[<w%3٢BBXذ~E:?O;)yU<iS1,28q> ѦM[d^ ger2:gH uS<IXЫ1^fq•gP/Q _GgjE:˖'`/F#O)<gRN?vhjִ̓k <Ǟ%Kѐ!_0+c0gf͚мy 9䓎 6c|.iF^W6='nj)SE(Sn4i gF+봊ڵkA p 60sbCeu*{ 7Yʕ*c-{K߽[W/ŋ0֯ibΌ,+XjҸ{cԲek="WSs}?&r͛|N4 <cnjcSS-wi4_3٣{7=Wx :e/8L/MR~XpJ"! z8n[Ld[S,>ƥMU&aE|)H1:wcTk)Q=|iR � � � � 8]@Wv\ՙ,RZۖ~`(WBJP4C2:=Ǜ k/v]Lm>vAF~?J(CKQߔtU=g.}pYO׫WKP۹c&([fݷ_|2- bie/VLƹUK%j!x"_PZ rͲϑIA~YDOdϑ]a~Y6/˨E.` |r(I gvlѺ%tݺDT؋HZ͛;2d߯U J81Jx;xgw>|MDZ}bM;{7, 6eOb,={IЊ+U% O"Ѯ]Ӵ}NaUХfNٲe j֓Z*3GW@Suo;wn\9s$c!֖Ow9ij;b/ֳaࠇ-NnXtd<閣<nUr<*/ĸҮ]G̱0=ǓM4Ξ"e9:+B+T =q|mI9w]3׸y_hǔ<yrھ}|ٳfRjUUҢB-ݫ/Vu bBW9WJ%2f+{e+U͂>魄.Uw~}(ZbfJYTZutqO{fu4S6EN/#[nV&wBP׭{Oڶm;ڧw/#_(P&% ]s4G zZL|ulUmB*-b_{/lټ ]<^ҙ[5k0+ &O8:g ?'ILk֬3A5<} 1[ EόЈG,4)7Uwe!Z`?#ssz"ܥ~Rf aYSX3nq򻠪Gc, ~z\}T]BoHa#p8KW gPxq,BGp:OR/(Te/(AR =sΠ}HCzb²,Y � � � � (1)gE@,1a:^ӟ͆G j3L>N=|fcD#}W0ӌғeܪˌp< | WQeloSXHEzCS<C7B�ac*Z˯Ē1F21`RͷF:rĨSw|nQm,v!ۢ|"&Lb%B;7-NL޶}EՈ$F'uo>NL,qbI =ʴy##qO5njw/"'B2INݘ6I hy7|&GQ9G_"Q%uK+d}7hd<ƶq s7҅T{9ps>Mٳgf0o5XT}㭟Kkgn%^Ϡ^X˸aթGEꏉqeܸ- yt|?"ॏ܇*Vj ^{Ms(?%,L٧A_ qj3;a5$T~n?u$DU=#+,w>YzNQ69#O#}ۥh&D?#n5F^SKv$rt1Fbz~[wn1w>'Քի);=xE vf~%#Bx6J^'_5K9aYg9[TF؂ 0[>}r{ra|yvbeӎ;-]zxQ{SL5)$=HyTf!tu1◊y 7]0hQ)Fhy|*qZ= 8>(e_gj\7A~wr[\4q@�@�@�@�@�&{I #z?Ӳ "CŮ=wݵI ]j!Fy/[N c?]kz~MN4|?A%R̚=Lj7*<UR-<:#þF2FkǓj"Jo<eԄ ]._6&y2p<`˹2aG&'Ь]<d e9sZ>"_dRFO6~O~b_"c2ZX`դdBϠ@G'G<쏉qEq͂rB>y`ȣ&UZLUCӫ~+t k="%y1y"Vw,duU5&L_V+sOֶm(Jd֎*Z:Tœ\O{x7^{}/^L`\ {/cpޘ+-8 eWȣlr#N}RaةX(f8:+A~ϿXaںu5z ˞%}N9YDT&M[XmU&,e}.tmVS3/<ib1MXWťM|W5? דwPNc^]eR^Ds&noQ~@�@�@�@�@>]sŏ50][tJKF Jo'MHaK9Wo͓bՏtl! ]7l4'x'[$b#槟^;{_]M�qXnH.FIg( .5120E:w"尯M<l˹2aG&֛J7('t'5&<_YDQƍp?v[E|#PesgPozĸy-Y$x2gnkK�g.gl {"еfZ~=[ֺjbʟc*S'~ I_[v)IҞs4\-~J\σeպ֊Ӱ@S8,+#kcTqqߙ V~Y^{y>_RN ]je}Sig ;bڭ5nzlY@,8PϏ~| K|O8|2#Ve$5AՏJkrƩy,-~SM.0txSȍGe \\Ρ#ī�]bK,kǖ\\{tl+Yzu@<����k t{uAPhDZxaeKuV1&cJ@v *Ø#/Ty+tsTG~Ueaۭu[fĔ&lM*n*~bR$[r'Nyl)Cg~~ߠvE^OfIחI .[V�,82ous> 4P&%:u e~d\P]>zS+3=(!'ž'O˘).SsFrۖS&Q*ޑ??l+Weծ=Xڢ,tʪL$elkdWM[[Eu|UÔ `&ڹ9Ȏ-KܖՍL+69~x/J퉳b֟D9%t) $^NQi}PK1_[u3ƂDA^:R{ 㜙wW>mE5u~Ns,gAU_V}>s滇3rZ]bi{L.G^Z=}TBW9TsKN^;K%=.EG����M�B"~olbK.%2dʪ.~K2G"U[;,7jj;W,x a{ޤХOl> 믿7jrfhF5)EnyrՖ%ŗїN`Uy*NzF?59{dƊ…XtTq#c5Gʙ&5KY;[BO>.b\MFtϠfG&GS㊚f//~&,jo"s1_$}8Bi5* \1;V mf+c? _eGgZ7CZry/{.OG+?CC>3;~wjyC;-2&m brs~e~u SFB [/ \"υrJPbڭ,Y;]$-wDoOոߡF+3IwyVKFq~Ns9lu{sni,:y)Ӳtd!nſxSs}lK۫ݮGEB|gLw{lڳ,~r| \>����}lyr_MSeCcF&7J>8$ o0.};goZ CYXrf-sE NUyL ]zJ8QuɶsMQi#yJEǯ&WXi^z"*C_ '*9rj_J [j)2}"^NY_nQKQA5:dh:qo8JS)"zWA5,d_=_WԒm<.d<OMe6꯼|vXP}ϕsE&ܧXDv^:3V*tٲTҗc!žS퍬)1^/C\v=^Տh>˜1[EKF^p!BgzØ=kr8^]]}"Nuޖ˥m~S ޲㱲B-J l٩;%@ssZ_6іEkmRB2Qי,bNK'.e׺L/lYY<g٪K.9!C,:d6#qmb*? � � � � �@z¦\}u,F).^^o~P[?dq]{~iytER=c'ul1~LvHb= vD8ǙkR=ǖZ̖vy88;~+XMYOhB?<&l-3 i#E]Ctj҈lI6Uz7N=zz݊nա|6t'g'иG%,G.WA򀶬?*RbmxO\LWt~l9j8GWb+UqdqJ,Rj<ՏU3cjBU֓jV/AغVGސ!_J~\Ԟc:}||l50">b- cFQ95>Xi^W֟ $ﭭϙMt.nkqo]c̺ܹ ~BryP㯲k<~VX(ӝ1JQߌ~NSqNڤVs*#xlEE;YM6]o\6~qIҦ�Roi#�@�@�@�@�@ r"cYǧ5Uar`젲S/i<o8]xUv -M3LuG-\^>N"a(B䎵h"�/OdZř�gGxӖ-7oyeq)}R@&>bVk%tqs<<I][ #mw160iد_{tf+BZj'Cyrz\ )|'5҅\[lmA:lbqRّ#>J~f-<._G[`+\LW<TQr<~6t0Y8qrpĦjߨc<:?kAӕRgh_rP'j8#HTyR-tbaĖS w ]UQ=)f]1=VFV[}'-_/Vi[}ྯ;2?w]s;2/XrO'k+: QYU})k ,L>zHKf WTXT߱|*f\yTT|~E)mqw/&_A:]5ֿ9t˰ k}rNNZ /_H4 @�@�@�@�@SnAǧE2|KL [FYei2,a\_J5<ɗRdOiq#~ԒgҎ$CSƌek|+V4SSիtiޱcwFӷ�yFP(^ԻWOjܸGL@%KedɒQňۜ.]:{ m[7G ̑i8}ҤIi׮$&zdcFQfMܼy*UfM81oߖ>˯HL:s3gNjʕh_<|%K+WdX6?uGJ=za~q Y2lcuIJ<@zR`ɓD[t)Q]=b~[9?[[.cF Hqhүv$& !CJ.ڹdB#UoF~5E2ep_=L HQÆ nԵkwxԣw>j1yy#Svm-v4yTj޼'&ƨ{g}@$:y|L?4cJ-[[+ϠuaB|6/=7Q{br\|`ʲ:ʕ%Ez0nuzoy^=<689sf>qRtR~5n(Džٳ۷̙N۷mYń/5oGJ*)Ǎ,;wl\rI+ce2ﱣ)M4a&ݻų߹K7Өf2'_SԩHL fɟ2eTI"{SL#B}gq7.M ޏPUiAFU|q<!*ed1+UisHO'}"Q=˙3e cEeߧeܗ .D!!!F˗f앎wk8dӞ2&)'g|2'dSȟO?AC a}82vw?'ILE,[6Q޼9{ʖh|ޝ9CI$! \)NFBT|oʔ)M#o~F19s1r'N.^z5 NyT9OS&QݺuԩǰGaty?oVȻ<m[̳Aexr K:\5sXу\*fo9Uǃ"����@4 @>euxӜj3 =W"JoSoVZăE&&N{3u=V\ӧϴx˘5{,NfS6^⎭9_x[V#/DT^+r? DoQ߂՗Rm7|~<Z[*y#x[״u6Ɉbm.] GuΖzKD*,8*G~ٺmh\~_ w8^8\'Eimv<fn}R+BfD~YsعV p!@ml(s; *NSRղJ15(ˠ*^کn lèz?CJAr҉oۤ,סczP!ظql%Utl<֟FF+#}nq}1n}jPN7W rƽe]u*:bzT葭bu2+[-tO^^^wₑU-?w8@9~9-5uwd,jV= %܁m>\3ݹ9͖V<I*LG}?T\TGG'U/KLב2qE/qV߃GM̑ ����k`M+FQ%(V(ݥTyPlf+.7T"-u~GlٲJk(BD]zn7_ʶEUxXIA#&1KӧYȷŤ}ĒT‚)x>S7`o3~{6W‚.u7r.&(̛-Ւ'OFځJbaYH<oJc3<\WGgd˾Dl{%ۭpwUX4 ^aTtcT]l-آEsiƟٳϓ;G/K, (?מ? s7+%jVO|FP۶mT1@@h#.SL%KHGgXRuZ g[Nz*-%[ԱueL:Y{ŭձ JȞqVK [n9<_Yt^SiH,yHB* R',;@�@�@�@�@�I�BW4rvk E��x dK7$ڵjSz\J1ejx9];ɉ�^y@2/{n'S,?舳%t9i@�@�@�@�@�C�B8BrD � I M}lžhɒ}9P6. t'e!@�,{upنI^U tEE � � � �  t/.7@D � �O{!rٳ8}m䒔dz@�ކk����/冻5 ­R2]# C � � + \|?@='KF5}a 6ǖF͘>hHŋ-B;@�@$s;|JCPIIh����xS t)@�@�@�@�@�@�@�@�@�@�@�@ Z tE 2������������)y  � � � � � � � � � � � -A�@�@�@�@�@�@�@�@�@�@�@�]o<�����������]‡ � � � � � � � � � � � �o�7E������������D�hCf������������7E�Bכ"zA�@�@�@�@�@�@�@�@�@�@�@�EV^K͚4 d�����������xkNz ]1EOޡ_/U8]̦i),RS ~M'gANIK:rj<'zu?;" ( ^,E;w!]|LS$<SZ)Ur *?UW}VQ/-7HR"9}Bn<dSbv����������Xx.um_H P8ES<WӥuY@ykr:#ˠ/BH)?rTIwwֳNhɬKghahkټ4t'irOǕ䱈 B㳌aUNGԒ3 OѪIPΚ'i8kR @�@�@�@�@�@�@�@�@�@�oŷ]zwoR/S�B;ɂkLSǃ ^S6jkB[e%L]D Gr3 � � � � � � � � � " ]|ت/XwŎ> |)tqĉCGiҽpREB)hF'x. M.0AZU^~W����������[-tn'wT]qYy}'OY+f^)p24QrY){7A\cأ0ʼnG.2%<z.鲔JxűF?SAg(VA)Lͳ'wxiQJ<)qta0zd+8G\W<^.eN?H!>-KOgʽ$Oy VQ/?NOWC(CTx**U!ŋgus$',S1}$ҥ _~s4Νz@,XHF%ʦBRi%GaZ>Pe\ ?%I$_C ^_]׃IlFgiهe4CR=zFd]3PzQ%im[XiBo|dY'~։tthO2I)GGO=(or\P@�@�@�@�@�@�@�@�@�@�$wB+uV/ē ڠ$ Ӓ )YdTe: W?D#N_?tfU&9(5Y%/u*F \EemapqOQlnPނ\+۷җ҆W-',W K_a>4yydY?hyo_K"3sFZ,2dNL[\GWЍ'M7-I!hO):ìhX2*ktʟ F{R(G\R3C>cd{zC(e,3nA>HuF\nszI$+҉idzY-փ |vÈS!Ͼx Ћg"ͷUqnNIŽsJ8Sw9*ީdi���������cKWgX`a#[{E.U [th\iApe8B/x;x|1[v* LU7/vKLx=P”Z_μWSM){y:�z\qfdyL} בRfG/tMOjb9Lr2/ҁ_I_Q _ >Om'_PՂ2}Ttzp?ӲRFޟ ?[堊3eP2,|Zk5ҳgs4br͌Jkt#]_<АpwbK#O2i6 2݀ofKB#*P$%<Hꏌ#jQoKegiyKSѷܪ3dTJ jL9 #[/8G'=W:XX|Ȟ=l5l;`�ʝZ~_TDoK+s麰bEԑt8*+c1-h?wlav]O6,XDuc0kr_ lY ?eX9R=R慌n4���������xG @qy_K[Xx]rHV\%bJPRp]bN6Kr4#Bڑrc$y> B"jf!WѺk;)]tLҗB3 GeOuf?_MP}T*,P_%C�Ӆ.e)H-NMp$4?,NHMQB))oAwo?W$ֵשc=2nT=s`1D(:OPڨ⏑gׯO,OOKSN!r)pf�}<="Nя'S2e7ރ .oI�dmT"TGU+[/ =󄰢*Ҧyv.Ij13[9_<ZV]긯\Bӱ6L)`wJ̠ጦ0}Ү +[ɥNJ�W;&S6]!eL9?g,qSXyq@�@�@�@�@�@�@�@�@�@%],]#:5[.=CK5O*{=%2/CfD .tىreDhwqY* jıGؚ,f6[Uu?%D3/odPs})mAKGO?*k~tzߔ Ir:1}\וh7MdŖ:~KԹRB#m)rE+[i9l+Ի*dP3J!E:%6ӼIJ2n[ԪN=|NS-qzLBw urY ,t%˰B}qWbOnRץX's']ejآ4/I JյB3t\,,lγki)(%N>aLaŮO/P X8n=J^ߺΫdFtۃ)Iz–5[H̪plQK=J=QbG~\زX2U"T����������xK BnN7[۰UT) [WD4.t>-iY?,ل<'֭xiC[br3[i\ JZUC <GѢOBhFcWe(O=%Lf–5'r~{mLMۼ#'h{uXC�(}|n5PlJ[{tݼJg_-r>ڱƮghR ZxEZmzϰN!!7BD<%{WfʑNL=FzIrb JkQ7V^Jg&{KXJ] 6 GO2R\"Q ]lLwgX@P$uۧXN9SKk!@�@�@�@�@�@�@�@�@�Fo~S aQ'S4 4zZݯ ]LQE"��@�IDATҿ:a Z"^>%%Jei1'=z]RяKMdDTBNU_Wc3ln'5[ý)%ڄ2g2Gi TA޼~azF~C<ӁfsX~pXzo,k}aU ОԼcVSez1ƝLJHq EK}Ve"e:Ѥdt=vޟ TZޟo|])k*JUihmz—_ү GAv<|zxy:w4A2P � � � � � � � � xk.G:$pu !c+IYQ+ru˖H'><�meLFo}GTB2aw8՚~=߲Mbm0]1t+=|fYLv >}$ʛ<<bJLd[t~Qh`o(o!OF{hۺB {԰v;_m.X l>mYjRN9//'q.m0a+2SStQFF.ƗNL=*RQlٵjYMѱIG(G~y8UQ ]u֗rM6Fu>#ئ?%Ig^x?ʰf6ˠZ$pt|4TJ쏖qA˪:P4���������['t9ke$[L뮄lW61'y#]xo(%NcڟogGWTBŵ֞AITB?)sjtN<D[rtktʟ,28(x.vԤjum/(g8_aq -=~h#4gE4\i;V/B9 <CWH 8 ]!WVNo)M<Qp.Ś{I?gDRR"k9pONhP#=~P'1*RZ6*lUqpe[=4xo !t k.̩z2ŸO<'g (K,#ǡy���������H\? ~*9&Q_qg2.t5]:Q>}N,rإ;g,_ -|D[ыqTBؼQxʻ +ӫ'}euV<R$Rut?4NӗG.Np!W_NMvn #Tkp!2=jPleXPgL ]qYM(-8G i+ED.8Ru%ԨpYEZD-]fŊxUoߖܹC7nJjժ'QpgR>.V^{xu?ٛRJ_m?%.~!F <䒁ĒPpy|]w]-EsLӋ*j>tyNYc-)n6r!@�@�@�@�@�@�@�@�@�=ou/5WL^rm,Oz8LV ]<nW'c2�`Ra;g.η05)Z/܋g/2՟h/JŹzmce!AWhI@B;L^^WxRo!P2qh8.j*',V%ij,ı$y_>IGvi@ ~J#_v3<Ljf9kQd񉅱^k2c-t-{w04~NEj>qi\&5gEgiJ&㲺']/~(j=S&xQ+zzk+-deZ'pޮ]GzuG&uڅzo edZyxO0at//iCY ߞJc*s4\e=©8܀ 2 5 Y=}H5WR'rMwޡ)E˔[^,Z"ʽe@�@�@�@�@�@�@�@�@�1o:[أ0͟=Bz.zpnATjbrBo?eëe1YeTSSu⦴�ay^ 4W^ ĩ2uG sI)Ylt$|jM ],uj.ۘ%{R*V*5=}A^wv֢J52ק P3&R!{|uߧ3ҳgԾn:~n\}l^?iWʼnxESѳ/hכP,=+*rz~+Q:ocBR-bEӎ![8'p Kh$U[G]x~MB.,<חl Ņ"OYR{*KMJqz���������-lQq2L ]<y]GXnkJSRҗESql%O4=TxIVA1s,{&ru!Ɗ5iN&eXdgz}<j',(͝O? 9!-nkPlf!Im[wv2&nmԧ[sPA F _~Գmk8rMZ!?7:4ccYX/h#:v{f7m ???W,(\hؗCP{[A9Uwl}:\XCyyW4bL[nIr,ۋr]@z3-- SoۭO@�@�@�@�@�@�@�@�@�@]XӅbyB6}2H>fx,qr LD)s$铺RuX0^oWlt?+ a\呜Ҥ3/ hl Y[iʛǏ|%BAp*J.ahl[am o,tʼn:[ża' =H~QD ]f5K[LݥTyPl)n\ XL䲄X( @�@�@�@�@�@�@�@�@�p.7"@� 0)x jkRj8Zr8#���������� p t"�h*wlGX9 t9J @�@�@�@�@�@�@�@�@�@ v Q�tT  � � � � � � � � �n$� 0M'gySTWP"�x!TUQ\&u�����������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � �� nqqƥZ@�@�@�@�@�@�@�@�@�@�@�K�BWt FA}_R6h3Ce*V.6Gߗάh$3Rǥ7, ѽw)s٬lQKy7ChN_JTOۮ~tk^EV7Vʻ.ЂM5{O x@�@�@�@�@�@�@�@�@�@?I�BW ߶ hR σRԉָjq*L~g7]lY[?]6IMz.Bה]߻bvx0!sW^~W#6X6LNSm鶩sV:ʏ4Jd����������XE�BW g?ΒgT1ܲ/)g\/]7M7= 28].!���������'s}2nj֤ٜNt<.XtŖ. + @�@�@�@�@�@�@�@�@�K?-t1׊뜢]ɝ"mWܢާO+t J5嬖ċ҅'pޔ9SYɭb)@K!nx]G(GJ;4?LwNн?q2J(yTo!sF%6MJ97[2H ۿg⮥t?X&%MR,D9+4DnDWmQ@J,Ȕv'C]聆Vx!e˙/}wpT^tSڼ=}AIJ}ٚ�Gt}:wːxS<mGuƍCjfp<zKMKUd8"SX:0otpmuUWMO>GiǦ:MBj2[tD\߹Gt迩k(V25e̒DOj?u^0Y+RN`$wUJz*Y>-̲Z.}ݥ 7^yPڂj���������xCBsc.r3mIt& }Ss}(a40#-Z|zxއ$dgk%Ӆu~2^G~蟇)Wv'*q {FS,[,mE?,lĹ shMNPDxل}@qudttpe$H2!ZY z4BtZy'I-ZBS ]8gfG_=rM7HÑSħ-Sɍa^үߞ3”f4~vJ1pݥ*nI_kBJm6Qœ-L[uˮ`sPA<q"V)~| wdjReo?"l:Xg(Bxd{t=n-Ӿ,u앏֋_V[N矔`ɞe@B?I|p � � � � � � � � � B3K:kz3D ['``䨒"BhB’*eLFeT щIyl ],+s>s ]WҜ3dھ)EvK˞3 OѪ/BI[DQaQhNlGv4*гG-tߛoUBQƙ>)!hUYw캩ٺ?g(u,^RZ%LTkNwQMm,ISYt``Y2Fj3\2=[g|W(_62>#6hE^r#*? <<Fyk]8Q.t钇>[nx:O HQ%S!0)׵>ڰ,B}ՃJUHGA7ФQ爭 kK 'i c%τ8H=Ak@o,nj'neiE t‹÷IhJԤuN2q#N˨Ȅ.ekp!ʞ+)_~BOAFuK(#+EZ5#< � � � � � � � � � �1F#b"I,vi?yO;Fg1vnXTf#Ȅôybl )4(TdĿw]M3ت\X lzvZd]JQM,\9g:/mDMb'cJu{'%MKZZOsxPy_U4<WZsq@߷PR8\[)gzPz~9UneRvwޡ)E/`jc?Hf3Z ],8[BC) h9vfyj)-@mrd9{ޢvJs#VhOwዷ֔K4l!u=EHw;_r-s~\:+z9xYF^B5MkeBu~ز't:L6SWFy9NM5#G&[u|4]gY*آ0%H=Ѷ ���������odTKFdklo:$N%ɣA~(^>3WXY k]4R`e |S扮Ņ('rϓOh\[:PF=©Ӝ.Q+W I7Oߧ#Iyϰ}bOq;%X5#ΞezdJu^Rz~k_"HD* awV#R[]XCl/mZuAUaeK ӅϾ-JC~,G[5~Vj1O안JhgH!NfM@z*jj+XFp ?MY'%ˍ,=Z!re4Dt@ CDŽr,xQkiX,8A�@�@�@�@�@�@�@�@�@�K=k.@:*ի,iSe~YFI-bk*]O ͑An i'>g+l atbkSqf8|:imeH]!{hsܺlV],Pe,\OoQû/ab*A7Q=X"%N"~2ȣGbcR*%ϔKOJ% 7RuryG#2i[AkOxy@k"/wn` ]}ާBSY'JRRlU6亩<,  t%{/Rg2tc2䉍?Q ]:%.-Aϛl,խB珟#À-2z?-9 � � � � � � � � � �n" ]0tDbЕ# {.m[R/�{A%Iގ+ZSf,A޷hzI2B4$ E5C*^Pg6]@Uڣޓa TGvEJ)9*t]7v|^vE.v<JP),\ؾvjb*{zq</i~X# sU%G^~ҧS2,_׉,HǔV-}>aЦ^RKjb.tiUyxA Jr{J蚹*oMV2j|~(˝(1؛xa~g҇5wȽd8Թ1*ythmY>Rl沲Y$)كgt~Y~LZwre$r���������% ]LkeZP,8IGŞ[w}`SσR z7x%>\֊ ytw:S~ rux6h3e(M!фlcdSY&:{V"q*Y~nE>)o<_%H$NGWmSOCxd#88k48L:.ZBR&z$DPoPޚy;|h{O^lUZwpV')!!  "R*Ruupt G}۷>NwM-Fuh ?^z=ˌ.O&'F׭T0 Z7ϡF čƻ{mjVe;Ծ'FWZ;ӐqzF{ݔ&J32F$3w "UGq*о%ΖDDB@!P( B@!P( B@!PD�.$L~Uʙ#w{cr镆14>O7zE?-&g Ѣzx\x1_}Lӏuv:ѝ =к]kCӇ4`K ZR=v<iqߵSi.v y尺5~d A9 +]FRf}!!o qppe3r#{&/gw{_sJ]*avmFD;.TS= O=3YMEE4 *f%oarQsӗoE|~i`^QSxTxhtݣsOϤ#dh+s,TkQROSWB@!P( B@!P( B@!?o]0a Z/ ߅蟇@QY)nq1cdg ,5RD~]eLq /F*[q0m2ʓti<L=yJRq Z7u|h?+)-j>^0/\1?=8MiV׋h׽%cNk/O-''f(P|oEǃ4%-VԨnED4'T6Zު0(wAD\X]ǜfo5qBMKPyaetA"'}|P( B@!P( B@!P(-+"L:;לu&lIY:4ȮBN׺}hMZݸv'%~҄A]ٗD#3`V0g*ygu"=\)lNBʁu[3\Iv'1:?]7O}k(o/YWhA<LhP'aOJs* <GZZdet]:Jgw0k(VP&M\SSuÉhFo(Sż=яc qFL 1— 8'_Pçrx*kPv+;S%ecB]PYsn B@!P( B@!P( B P.P? -BYs陆Rq#cdtavfv(ۄ%DS{1*\AlLZ\b铃pa=K]?y9L!zNV5^M?鲹-Ѕ-& 2Em=2J q&dBBD)alto_8itguneu#Kyt<=sJZ/BdЃ4eM=@ 4zgp0ʴHBŏ~ÇcQbI( 㽀 EvP "#х6w?L&^-o%+$>y| fdte& /=ish=~__S9!DXrMӆ}s~6C\:.=}OX]fr :ՍB@!P( B@!P( B@!P;+~Lk3Z 1~՟x5LSK>` $`őUWzCdYA75?=3䪠Te\" fk,dh膦35a̳sZY*z yL kwdOteD"UEsQ -x<ĈJ}6rTk3T׾9hЯysg֓583}U|d꺵gmT:1DbѨfg`ʘ5WQn4ץ4K]+Rպ9 ~PǍyI>s@.04?{5}cЬ]&j93+G8?OAMq?ߝϮoz}UJ B@!P( B@!P( BE@1ӽ3w) O3M[A[ճL++&%JCcT٪Xq)]?Oo\bmi( >o*CztֺKcǡ2L[<8߿EP;,/=KҫWo)YX&Cݛփg#f4"O/ӏyRh+ B@!P( B@!P( *_}j B@!P( B@!P( B@!P(s= B@!P( B@!P( B@!P((Fͫq+ B@!P( B@!P( B@!xP+ B@!P( B@!P( B@!"]7ƭP( B@!P( B@!P( B=G@1P( B@!P( B@!P( B࿊btW߼B@!P( B@!P( B@!P( z_B@!P( B@!P( B@!P( *_}j B@!P( B@!P( B@!P(s= B@!P( B@!P( B@!P((Fͫq+ B@!P( B@!P( B@!xP+ B@!P( B@!P( B@!"]7ƭP( B@!P( B@!P( B=G@1P( B@!P( B@!P( B࿊btW߼B@!P( B@!P( B@!P( z_B@!P( 5޾ou?*( B@!P(^B޾_:A(%Z ]`|T_(F׿ݨY@`ObU3lS(QR)al5F,]piE} jY )Mt~נtz ~lb:_CJ!.()L4oX"߾ gБ_81)b4GA߸,%G|J.SAth= <zE3ǥQI" :{i"EJVH2Աt3^4CxTDR~A)DX>!!D҉#ڕ 0EƣrRRwU[n?*̩+Ϟwn|1/\<)1E{~H! Ti=y P,SJ)'^uf͕'z C?6zCqGwyC:qݸRM$fzDϝyߍiYcRt{~I'N>hLygң܎9Ao\ 5k叩YwSC_Z:;J}uٓ/RWz]^.p`]jXn+}ƢI{!y|Llm/]19%LlNpk>|=D=k5 S9#r?AA4޵"=S%5iSuƔx0wߤĢєhU=|}󦂈:1YZs@JY455XЄyv)*=$۪/١@$jμ]1Z1=p_yF9zڗ=83yHٙmSJ`6v~0;μߞg>4Sw]3+';Qrj.. 硇Wԧc(_^amy;]OޓJ-gղ[M뿫Ocǣ<ӏtYgWRI~mFM|{rI7RUn`]-e֖*N2 ]2eUmMX ?tߖpv/-mwņ֔Z~щ}/S׷Ikt7$)n6!' -(]Ƹr)Vн;/\<u<+bSDʵS/:1*ϼL>9 ^o47&̭yr䠁#P]O?g)Ni ̚ӋS*)L +SyTr2]Jes0fu <옙~0ŊSd'1OD~:}ߏW“GnPE۸ff.oazs4iTh 6Up-ؙW޼ +XI|B(̘U?ayU͝;zh~5 e7½^~ n�"/~C:FPZwusE!SK4ѵkZ%ct͎}yOތ]kOrw# xݕE3.gsѷ;ӡ[Lx:mwImdv*v%sh>9xlaj!0O9U`1ΚV$*) 0u왍g0Dm֩QΙuY7~ΘPed'DDū.=RߟV\[mWgԲ?(eTTuو:uL{{|(ob1F`&Ri<4>~_vp*}yc1 ?Қ%״ϚP8`g޳mڹz3&Qiģv<gf ÊvͺL5?#]=yOhμoO~=泽l^$Y;yW>dʛzp^<`tmܺD%FpO" wGM~Zв^ڵ6n-ftRD֙ B�c9][OԠ[ pǘ!#jIF2F|wqYm %8}S.|J߱rH ~}]f+*=s;$I3F7&2mC+n@^AevnQ>3 ĥwh6nOv ?}KNo=Y_ژb<ItL:MoH6L4+y>6[Qi# o /Uiyj4&y ?Dj"EWK<+PbiV-7wmMDh!`am&U`qO0z|IYs:K `ޔζV# h͹ҕSq Zy+F4D;zO$|S|7]v29֒'?Ie 6֓5v胝gF1ctٙWI}~Lh߼F7AAFl\ $k nA$fHl΄�TCdm6_;vN^Cc{btyy9yLԥw xbtA<mT0(?t`v*vִo{ݬP=%e˝kTca檲T~JΚֵ^œm<ט`kVLì~~瘖d貳3&t"ޓ60"lVFעI*z`0.BǶopOOμgw'꽝1߆oNf`ۺe״󲝕hI *E?FЯSRbVѦU7h:k"vڱ3.n[@{'sG ]<άLv]O"o{2"~]-9?)dܤ' 3K1*FU?R~gC>e+VUE"yh됉hR7D&-uD;{ߟoo񙐡6Vk_M;BRׄ0f.l=w.'[wׇN׊1aZQ~Z|Xn%_ܼjWHCCG/|ֿՋ͸ӪޠC.=UQpHݾ\ꁙ ʬYrU ؁@:<o%P`ț7c0oWAR[wcNc}1os=!Wp]^Ѱ]+jϽ6d¯~3cμ¤ߵw?"7*}5mma޻LW=Mc #vѵacϵڜ4X:!8?4-]\=Q[+#5m*2<$COOk ϤMHlyμ7S!Li}gҖ.AaVSV{McfSx=ĺ({|+&_tjxJ] y"=7h[N;lŇfڲwT*1-Tcrp2IqF]y]kiis⬁~fμgwg־8;cX6a܌53a̫y|;xq#+ B{O׍4UW9yO(og޳}UaCI|n1VVYx> ~ ,a|8c9Fe߹OCoy3s_Cy_'9<ID54LW+] zנ^mjPNhwAU>}Iree{.=b&E &&⧑|/I&/b'=}t,եP}&]q�Sz~KsyԘ!ŷO;̟&},@Ѓtҗ`CcvaQN;#.})TȨ}pj#h_ ]{}(F*_9]fjӏo\ymĮ$]8JNG1Ԕ<g1J]>ef.0&-Rթq"!Y"\);]03)Ҵ^ozM<9bw 7lwfUԡm*9ͩB JaU&7}so]HUc~6fwmӈ̣!3W!:yYwPXοk94:9 p^Sr3z{m [l/̗Tl*ݘ"=-S 'n4R40q=xWsIvHxB=,aMꥦ@@JW]vAL:>J+3 ;9K ʒI;4 f~BS;iZ B k13%j4:`yJ0 "L ;HGk q|"syk�_#6)b>o<{/k(f[7taK[}'Y[V}O8EL` +op |eQh=3 %~pLķ{&>y|\ %nQ`X|��@�IDATuD/9؛d~=4E^WW`@ KwY>*\/k=#h 0-$0Q\]L2N q}Kں ؉4Y,yFvA6STv*7P'3fdژ0܄&)t feO5 X5toYaLxd=ASK+ؿ.zD٘>y!D(\CSSqo\Vs~qEwY4Jwٚqf zxS ZYxчb'NAɳh3=tg;WߣS•[;sl-ktYՃy`snMX^t=۽UbZΌ=ڥרS= 4ݼ窜2I8;v /]Zsr"OFa,^Wg E7(득oϋ2s6wЭ3I<-il(LI29>WA[[vS<[<e(c$;>m9ߒq/yBNpF1'ѿ9E^h2xzxsޢ)3]t//.V1<AJ>WD\[( y1{(=b%L KO`FOq|&4}0/V.XtaAkۀT̬/OQcĒ'f$Zup%ΐ#WW38~Vd7FTics߶>P򔱨,Iedmy\x%+,1jcY gY}|w{Kwޥ7N}~k- kOQ4zD7̃puE[*%G'.#ycR.#*&C~gϙG7`Jt|1:5ň>xͭ78tCoZnjCq n+RYmiN/(^j!4Lq0 DtQq2?*ٿ4U^E$y}}z;rϫɌ�%6ӱ$Oѵt]']7O`RGrx(#ܟ/3L>\NyC^w>h՗dž`瘮tn,Pwa)NP/Ww0@@tѕ[u vVsI;.~6Ŵ6hWǵ/i_&/n!.KbA�#@uR0m ͞` '}7 8p\)zle0! XwUc=4F6鷙9Ϫ7MLbNu-UX={2%ȍ{ӻ|Oaata=y{A揱W|ybt׼QAl61{aŸas5nw~ <6kLsnޖef@Gg .E? xh/;<fw*'񒧧Vs/9#BK'0V#nB9tSژ qG&bEEvC |[HD>\OWBg³MW32ߌų.2`&NCNt/T#X\󶩳\i`z p&'GsM&u~٨kPaZ4]0۽CK)R,q?Ot^C[kn{M1 ԱW7a(]V.9ޙ8a!+{=Tf-G?Xi?e쯧1yO0/a/8﯋N&,.MպBL<ME=M6]rOD[3M+vdtiRm̸I)5߉Nfƙx0;LޞC޾vrj'Aܘ `g *81MUw{ SłaG\X]=цngkʘ?P 2*AM�WBu|]5o9{3Ƿg󯂞Z\b|S(J4׍iU_`Cv@//ZG ՞qGc[iWUu=~ >*mWkJ.]0 piRq/2뿭O/Q&GvT??"D[q]YqdT1;]+4 [E٭mJ 30kkFV6h1e*P$y}%7�ݏp{0V Ɍ?疤~]9mS?O2G�(W&Ӆ7̿$qv{N oM ӔqhPPtCl_!DU&] cR.+\`vY jsa ֱ CxKwwonP[QJQ$ynA'fZR:?qb/q::0eZll#}�~T=+=uyHVF*v3kDվ_oyz)9},ɜ?Ԋ?tC� q]V[T.ɤb%fbojl v)9 K{L,>Tۯ 9$}Sbb~}+.ov0&[8RpHA<.~L ^?k:lI&=u~4*#ѵWDqXbQ  .:G9V[y-_lcslqE~wNܮϣe00Y8VoqAҴMF^T.Y!9 ?k0_ o'6?cDd :ijU3mYL b! zrMH3+"(WYPfV{Ԡc~x2qWC~ !e BO0FaFVQT;".ߓ<ݷ'[+j%'DyȔquo^7.oP0 prc r|rHD?JؔZ ~H!s<J*,8&dY(~Nlz3ǑgjtmZ;5]S9;-R@1$`Z['!'k叩bZշNK{Zѕ-zrTv�nz$\1_T(9+V7!+l6 VGfDī�6$vccF8a{_5Lz*C$3efMўeY ;B)A4i ,)7~רE{$3/FWh4L2YsyZK?##s}k\1w.YntTx7_|;Ӥm:mHujVC0D]j ڼתC|h"Y.4juu )#s?ehң5M0S3mI<{*B8`eu?e쳧1yO%ڂ9% y ^ 3ek̴6˵gKsy1dt{~9K8;A:ΆP_vNa )$u2 >GYueBͥaAʉ FT\۳LN#P.ӀfLw.Ѫu @w$>v004EEx!Dk΅)CL<ˌS@L@}+B% k)dVNĹD~Ϙγ1  -/2mb ׂԭoݰr>ys"AuL#"->f ꪣ>Ƿ窯r'8<#'ΘӔn٫1Mikхy9-BsG6S] cF�jݎ9Ün}mgANo^+8 3r$UgOgHy4ЋGg �iJ4Dvg?aӨskXJ30Z-;'|4al\O̱Gc뮂\*FEB M_MW. k!B yT=<\qfk??"^}щoêG:s>@s4Zw4s)|}ʌ. g/_FZ*.fJ3I8&]V.ܿסVĜzA[9x.5@[ f0_9�JbƌB]�SX3N;%У9kjWM_o! 5s^ cR.025uy?(.:5 - S6(EP6�VZJq :/> Y U]uA66H ~Lug6d9>.hM4yF0eGO8Ã%$1wXX'�5O?V%x(54}/\y !oj1 T7 ı&TMwJXQUܼ2"1dy@j?Χ-C[4 mH?yvt˂-G촲R:=7TXK01jdq5KF(;;l^`~n'āI+RպIiJesL]1Q#x0ib.QYB 2ŬRFT`>ոt-o!]-q`NhȾ ,P lИIVIz_8xdFTUFB=֔ziL=Y9H lWwߞ1x><}ЪdRLz y[F~2D,Kprٽߠ6bNԻYB `50K ycR!R*3<Ix)%c̱pZw13Ic-DUW+IsZf=_0a̬(aKn}Q9\%]6Mf2IGaG-kn$abljm֊TbA Lc & |We.!ځ# Ч_E]//cZRwa@J9:0fR"4udFHUYL+3`v̴c=34;G[6\"ѥky,d7o"<S.5M{Efr6k۽G_&þlXuOjeLvޓ蒙A FC&_r qh3`܌eߋ\V]r,3w 7!]0oC@� |UKY*6s-R?3r3blukFt}Ǻc.::2Θ> !WW&7M=^.攺v6VB43+m1mWĘY ͹ \yv< _V'aQK?4+wY`�S _c^Oμgl#2х (kNZ[~Ɖ@fT/i]-f'ڝ;FgOn6V2xAf 63;(@D\^&|P ! 3j ]̬I_<r`5fJ "w:gSđ<'عe; j<V'r~[Kڨp1g){km>+ LUaDsм`jv|uGmaZ*{0 sٜX߅2";|FP0l`f2sYrwZkCkjP*L5*kBP(.ω@0c-nhhuŒoQm1䍉n6Nj1?T2х(Foœ CO& \BfQ=ZTv)sl5?iI2M*NZE%r?[%.C9T\_k\UfL ,ճWk<rx0`wF#w (s&)nJ6i9ovi3 'b~B㻟tHw œXЄg*}V^=C_]l "h<\<sI}ʟ,O L0d(x".{AE9 w}UzHu{+eohPŜ&Q )%*rsg0ʽU7F<u)ƗH;$/QLB!cQ _ђ2-̧I'N1"Wmɒf %sFF4`t`&QVćU]@l4'-r%q0ᣤg\vc+t0a3~NI%H l/CM*mZyrV]'$mD2Eę]]'+Iqyȿ3WbrYat׼becv` \ &~w[o n3<j߲&f 6k7V.kQ?zU|`W /R I$ke$ChFh{!gskD хw.4 $Y.ջbm~B,ۿ('sz:L9s g5`>G,N0[ۥwvF ͹<]кlVe;:IEftCD}fB8ؐ%3?kE.D{ujeGLڙZV^9QTd U Yi#ɗCN94{?%+{'~ksF5f?e#{sqۖ5Wj\S0N6Or]=~Gȑ'd/2SΎk֍cG8�DX7A,Jt2C(P h:&W.o$w BWO],5%Κmo023+m1 s-_ mQh!}r>v+hkc Ri; #@#{҂R+μ窽Ȍ~ěl>3Gftf[0MrWѹд\Gqʊ(cD%⺢Ourgd% YX"o_lL: řy!&|. T`xX(9Ľ(#"U<].ौ"1r2 LO?6PR%lSfF֙KC̗"]2MKྈww淅P1:u=\* Iwa)W]L]VdٓRE)w7e<mQ21\N2� y/BUmѩY'(W<`A(tZaNU.3f]}+;t $ݦI7;epEvӫͼlK(f # ̔Rjm5FGUg΀1fYGwT9 צ?˸@܇jN, 4<[W1NHAsDAD:[rȸZr#GHm 2 LB&WE؈,\3SC??mteHiC;m*f SQfRrY0}Y9g9ѷiBĿ&/I7ɥԈfSB'Ax?i҂ă0Dh UF׾wtKnBn�^FތIW\#=Y9HoA -{XG&hϛFWx+V] ;}!:ȫ}v j*&oPT&>ʹ(D1s;~țI$eЂ,M @W}4O.! a)2Έ}+.qB}8"YpUSGF `h`Mx`6 /ЂC 7[(0Աl\GxZ'|x,%8g5r댫Hì]/;7r>Ƥ6Jo,{ƶhs uiƼgoSVia4^Ŋս`C2 ˛o$Ӳi[c*=|.w.}1}]px߂`ti/<o'%mּxtGL#6B@ΐ]ތI K.0;eg샻g+c{/ RrWS). i|"q{z=J:Ԃ:.'iC [W@h4'L?͚dًbV]Ô D]�?}EW{Xe|e5r*s)(Ǚ{|�NsD|)׆55;PyXtë~}#,A=}rXkfQBr>o`6 f5J(mbBg;Fu V)\tQ/Lگ]7!3myb ?|'#3 De&\xfa }O>kg!J69YW \Y V]`r e+v`ȟyR%/73ahɅˌ.*JdM =@Zu`̠ ğ3RʳӁK ˚YMWuh;hנ< x/n4OV 7F-si6zX L2p}W1A%LedK&G[$L|9U[ Zb6<~ܟ-ƿ|YX} ǿYȊS?r"U) ^Lk&] ͐9A:L bL9QNr;33 ,/J|uy [lS9+;qez~Wu )b]n6B&cbb792xE�eSJa=H1&a9ݵGxJ;#1@bTow Ph ыw"—?v<f|ysk撑r;X ݘVGnS]N@EUGCa ğ,4+o 8Y a#] r"oEVބ LA}єt]ڂZUC4g? Z: FatA[&χx-V3w~#L'~RoGȞ]2~tl;OF-#&ռg엘_/'0s,n?媼xkڦU7xiBE�[rWo0pa$OfRwn`>Yؓ1Kb$3>肟cpq:FLM[Ճ3!x:Q-YeuLretٙcgճF0ݪsfnZDy3.)ybs@.04>+2}( _A{0 vޓ\yO0붤[1nPnZŠ]]ݥ$KW+>R!^#%3y\(\.4 V%(&)HDk+b(g|"Fڨ.AG9]嶍l3Mx VD!7Hʿrᘋ1EnRkw4)Ȍ.}V.BZ-!-#9 !G0\_,(F*+W*L h̼tx.PDU>)HqvKDi\\{.ʳ$?lcœ"f3UXw 2:]|6]Dn?ăq`uc aa9tq݅pctA6X m*8n/f^8u%&ꑯoЬ3BV=e=JsWr;� +1:O#s~ӿMu^2FG?{'||Әn"^\f<`h1,z|1u.C̄1p > ^<֓54'b"v+ QUD^y%G=9^aX,3p :c c^wϲ9Wܕwc-jY}O' ]UV]<Jb\ז>t,<s?\œ�)!"ҢFBVLyֱWv21?ǘ"=q>=DjÆ]]gLy#olʳFWx+kݶa~;8̾ fp wdN0܆苑x&q4dєQ/{r[r\0Lkl m7S㗦iTP\cY3F^Gi >pB bl ?Y]0YLƌUEhc -1]Q^H7}` d9)9O'Fׄ_hW51cAюFr5x !ZRj5J+'[\1,k` X&ފ5[{S`ۓШ!Leb Ο &y{.cLޓ`t R&&_x5ItJ3*SZ:h�|-kfLX=b-agڸV{;&c0zJ;#fyZ75k%N ]|Yμ^=+A+csӸW\iyrbr>e䫫=81uxԒ5;X]{fy#"nǨnDjk5{B V<1̘?V]s>[X5&*LgrܴO=Ov!R0x6CezFf+BQ'fh]F#($Y{zJ[*<Vlsg'X9뵂ڨ$m4~0!.uct ڧ(P0:Ɣ 2e(B@B`M LSiuBa J %dF5(g>!sK;C0#oBt0,?:ﯕ?V]5:p貊;'L~UʙCEưN=F`@ȡ@B1ҔN}s~mZl=c[V\[},Y;0V_.MQ 9 %8uHSkwpꙝ\^i3a|2.ȍe0][Ru)M*wb4EZͻL9biJcXc+OܢX p!d?(I. ľ,Q:mB]}0IfUt٨+#~-7bCbP^"z<Dx9)c9/Տyw Ӏt{EJ8^7q2#N:u2lv*JoI;zj1 wc2SE̘Yv)\dFYc`LWt_0 2 1&Oɬ]ow ia~ m "-c|{R+Wrnu=L`0c&潰Eھn\W_/:ݿtKw\qL[F۝1&s}'ѪMf1 Z|y CT6#etyΕ\A2; hn\: qЁŃJI|-9|K{v2jlKHKw{Qcm D{+.*PԵXЖQ#[wх<0q(BƬ+jLwvgd#ni?z;sV%9U>MW=bbQj5fƛ=m]}Ʋf)c$~3ffe3frǞ2}\]~B9*aEZ.vBB=TOgcټpA:ahS+M=kNK;M"Y.l SH3y;>jeL⷇X]CI9�l)!IW{X`岲RyOrݼ'DU75c?A3nY1'F�iX͔#8h4캉Y ! WDvv̟aujt2F{1 ;q˙g9&fg4vhBMwV'VpC16(kZ01L 3qYk0-*qܑ?r?flYg.4HDF||V' *�]n2tl<DٜU~gCXeLK+B<[ {~ˌKiO^ju.<_]-r?]Swm7pgVOjj~[:i~nirsd׳f<sEǤuE7m⦋k17ys珊ʜsLo<mr!pȥ˵cbȑ ,?1Go? IE+~-mۺ4;LA]i nŇ 7>lZu]W/C*_Kg_rV.ݛ7oކ+ׅ:#zj};pO=y~Hyl$קO^im pc~W 9sC.=6W><?-0i>Bߚ(cD{v~G|wev=vqh]]9c[rv^ vm.:n\y]ϡ@߸afWiӥ7=�G1?_9^[O-gL#_>k> ^ָ˙O,] rӏYZo.c}ĚZ>Zo{8G}<}c` ${mcr7=[}3(YQEWۉX>/׉){'T߸m}:83fU#\TK5Npo E?ϙV"/czgw?_gw)Q 6&aYP؟C1hoW{Wi{W1_ypY~ʘ/<=g̫C{qCh ލV-r+z9]V?zucyNaF3ęHfCN^cvvDE.hkڹMuu=DKKG]1� w*G_<vbw>Uא5Kj3"y/,=o=c 91q%DCV'"n=-ի7wgDX<Б?;.~HvxSumo)B l4wZüOrjN1ɭ˦}CA?"]ة9rL[u[6봠߁Vg7X9붂ׯq2f Pf5OK߹T+G^<07)Pg;amE֙K GQnL@P@/1f!ϛ%"syLheV5ww>b9ݘ8G߼ />UP.Wȼﶚ3~?TUr焞1*UȔyi7+,՘T`)pe՝vt[=Q/dta#/L^f@MWOyT LX4/BNƖb.A�.PB0yû!``1sܪjо΅B?pm1-7gaaxU}J0/*>1N2xȵKC':tE~Kv֕q!o<|+$_|L2R-Wc 88O YyfnIKoa6"I, *g,fA><; Bd;C."(ڢY ߆0q/B#?BL.eZ[V$=k|[` 'o|{Vfqfo僃h}Ƿ(]//(cw^} o ߼U'n;q!ڳāDF<c61ȸ PM5O^>aޞ?0j9r(B ,"TEyXQ/1߿EH? ##A·ddthyڷgE\C !I|Gx ] ċf [Cz BZƻ1Dyxp͌.k> Dj͐3vS2.u^o4.ua[md=<)od= F e sĕ-koh{\yz Aat^:c8S2$@@dOB|o gc0 .ֻftmoDQN4rBg0~P>\$eA@;<|o=vL܀߰X {[Vu9x?B|f{Z"f~7z F^h�wwWZÛ5~@^A8N 2C #A|-wrx92Ӈ4DovhbƘeictaޗOGw=~ʌ;oyExHGs'_0n:\1?{Ix3sքy7iľBZ8X ] u}?6TD I0llg|{a i@ z|?o8hA9ZRߔ?WҞ囻'S }@<.7(߇BԻcLW[ny6h1e*P<ꮰnen6{.+B&)Oٽ봠}nCxS(mzrӟN&pZԩ�gߛN-Ǘt c@D ųjͦ"ϩiz0$[/a6QVF;TdJ#0ԨŊ+#6TVno kEf,KU w& 3 ‡q ql񙹦'xPl*Ydc0K7YvhUTԒL|D쀢uOO ;Oʳ0VDRZϵOOdPơDIbKOu 3iYׇ0 -dfeGϟf#EF"Wc {۴rQt۬bmηۆXV97}nu6ݲЈ +Vuj]·w+KE]$&FBv~0K."7;7=QH>9o%g3bkP<sfKt(o\vkeJt-aH)w.Z|#u v`ۣDl"iv M:O* #f%JN|up\)7w I0_OZ%"B!cG%B BJgw(_N8±GB~F$&z}&zdZ 1_)vܡj`jwt/Ғٗy:�{LBԴ힕ʐGIԱߔ;q&]kmb./~{- |F <s^CJ7pscwQT͓Wh\f{i]2T_H2#ٚkmb^ռ |5)"aֽ:m-90<aOy3&I.c{>Dܲ˯H?zCKlU'6 Oß_ФQ)c߱$g)"jt!v3qkh<lBOnsS˿(gôgim]F[0 t!\G Nx9w1a^I"=O3i��@�IDATfC9oDŽ2_'&[Ś$,{Xa7m8o,9mY t-{Sd3kЮ1ݴţ@z|f&5]r;FFK R)A0. t!4Byo!Z8[$L2Hseb@o8?OBl> 3[j>~VE9vjsE/V'"zFܺ\ 2)"3]< t灷s)WƦ8]x.˻x�ggo@>'-aJJO.D&HGs^\ {9ޝަ m|<kjU:z ȥHyնpC:=c%lg(C18D?b>йΛęS_Q9]4&yx7J?.ܧ-_lyt_G_sO3HeW2ߗwY8_YI^ `5O\d')آ}i%C1o_ʼnLʹveQTiJX|2&N>&Z&eG7֞ olah>F3c<]ܾ9dl-|lf_G13Xf5O0ZӜh2q&R~ER^AHx6qLcʵÇ%'SyL|"iQ\oK4N+Os>h.A-bwͲrc>9(FP"GT15FDF8<# Ч__㎙]V"|i#G?壬9(W kdt-‘\=Pk1"x3'Ѧ+GЖl3f%ٙWzܯGX-ׅͧ1wϳ|w ?|>kdh! QFB"-2Xo봞a}۰':2tM3' >-ϬnhHoMJ0F;g iFH؁g뜹&b (fa ^e9[r?cjغH(cƤ}YaPc4e9ΘmAd;6ޢ/:1t p_K828T`?`Vey2-Η B1A`R!cg p`}ĸD>0Fu훃s̑7̡Yˮ9 6E0L:7 򢮈 ߄2_}7SQ\{m߉0`b O3W*u⻗˛ݛ1F1-q[= ì?o<)od= Fc ѺtY1^QVG,MfL]l>^gĞ6A׵p5'.M4tELU<U2΢ jtix`[XCL%„H gc־x?x] ü {PƉf(,c\?ZnڣLfg3W]=痤z.;o=vL-n8M^X2dqf2{{> _ƞխ8ߍ8<-;'OGk&~LToVABQ[(u <2 b'"'8}25]*נ B>н (�Z`fxE7cA|p6 jBjƼZ@zÄŏJx `$"OU*$ V]{y ]#3:CBez+LD.c6`̀d_EY?�袗Az HAA; VD" KキPB'Beew]dޛyw2#_:EFuuI/`ט{=7ҧ (M'u6>i||.5i]PPeTNse!\ڼ^mc]VG] _7~rD._;fO~% 9]v]Sg̰1x\㳁ը+*o$+҃]@J ;MO^PRPY(Kr/Nq5]WS*]Ո{rDav,(K1]K .FiܣtG %M1TpF*X$cFbʕ8WӃL<Qԉ+j5C/Y f3.L/hJCoVCУN^K Qb(ls*=|Qk�3wyg:~u U}WzmD6#Xsz009q2;| VyQ^]|H^WԚV@vt#m õuaaHh|l4eȑW+mF߈P)z)hW)5byL2f ڔܱM>k/\z :14bte\bO0:NL"ronJr"Y7SJy2j -ךTi}1=c)AUQ]n?"\P`.imlك9lwX^A*Iq 9pA(EG("57,UŨ#tFRIܒ,.ûy,W4  JK `YiHO3v*mm)k~A؏6}j$LF߯䕻w'e~SJW\Rt?_MM0,`Y[X1a> -Ҭ*V*Krup].pH�8>4Ӂ`\rzfUW_IͬG  IGǷ.WekmKA 5.ӕsz\ێEǑB-S?4,!٩-xe 7Ƿ-IݝBEjy:/=u/Ah|1TŻH1w&:;9vEQ&%̎ɫA@A@8}R6wIǔ$>y[ A nMbKw5g&,s?o[Nz)QeV M#3q -NA@'i3ڜ_\v]I+ kX_܎+:׫tG) ,3T�LWigoVX< E DKqspq(LkR6boEʻMHA@A ZŨgYZKY!I0Bt7ũ,#)Y=wACE)m҆A@A )l1L+\J췋A@q8zZ=V*U7Jxo9.2X1-qՋ\Qϩd.I 'iŐwYekP{?<Btc!>A@A@A@A@A@A@!n%]A@A@A@A@A@A@G@x,'      p! DMt      A@A@A@A@A@A@n"躉.tUA@A@A@A@A@A !H־k׮8.LRN)k~ݥ)RO      !gjk}<ZK](KW%[77Qկ3ѱT!?̂-M-1{/zird*X/p!mI*L2ѺS1O#{\Tݑ.q7K tu*v­ͨL7pG.Ѯm16]JY7Om_Gk9灻k STvt5ڲ4C'])RP=9d,~+;A] W0,4țƊih:|xU'eɚc?H3Wihھ *m͜^r 7ٓMQ_t.;O# =H6ix*ߢ+y#d%}V͢齛S̤q;O'yr{7ogK.7綼L387i8? @ާBɭR kB;hz~kiը&/iwۭ@mr8PFkn0 [  @+xX>i-ٸ:ΟF]_/C_v{<.GUre>u=Ig tGbEh4:_Yxkk>Jus }#ܩQ+kr1\,蚿)8iw9fJ&%g-3ɣ_}wӋpDEKd7$<2:5i]Oϧn>h~e-eΒ6gLڥygKg?Vqta3įt_ Ev~`ux+}іIcfգz%GD e8J/JP_O+}*$ oeCگeRԮ(*X=YݥC1Sﵿjl3+SO= )TevoPkS3Q\<9bJkYwuc`$$:v0 nnxqZ28Aqv@=sϠ5?oMi29KNSE'%! }ʏoFמZ9z*X-;ZM~l~;<~軍N,bym)  ]~\zi yDwlB$ =>jKLO `;h\[*I\Ә*Unˑ ꖛ;5uTVD;5O0L,M[4+Oz H'^"� ɮ%_K/cv}eӾ]a{bh޴#:ATkQ!nNM\h~UQ'3A@,_x>@7 Z4瘎+lĥ?4&PRg>Ĉ.:IƁNtE>Gu[G g9i,oDW8O{n_0D^,IgH+}BtyC4ML(!L4Q_+M'DA@A@Bt%c_%|lBtL.@4n khԯ{$/nҘum([mg)m|]栮Ҭɇ5dmރS PNjhJHjiirIZ֮S10N:sWM0ְE9.@ʠ04 67C~i:zh2lDWRa.64OJea?z"<mXM?2M@|yiSOF]k|b ]Bt%qUXkWAi|Z]Bt%A@A@1Fܣ9 ;ԙ"pj?_gtMqTpF*^y2]ص~t(Ƞ5\"6_\V#GZuiZz}oNf]qqZԴ -t~e1(c/эN3XV9ӹ)zZ8KR2wSC{z<z=*tOD\9]ۼ/P>^ѭK)S΂TC.:LJk,>]6ctu*X:,DH n0 \ ^ʓ/=mW ̋sEIUQyd٬ֹ�0aUNjgQ̝|XuiJ>֤ڨx+hUR\,"g>xFUND.2+ϱ×Z):j0LwӠL-T|J:(sV uY$$JACgysVD)b,J:3Λ[ڳ#FTHkAȘPgx0si7uayQg)60zrG]$hndϙN/r5ܿVayvg߭V:uϧMjg \[YpjL 㞹T-UsI? TTy3-2# tУsؤtf7|8M{peXto<.g̰uKQV<M 5u1ܹdD<`v5?.2E TD :b3]q\(sj]-AǷ-#jM} TOnDs>},Bsv`ևmt}wwr7͜1g>~scv#{КZk+PRl9{~NQw+h#鹶Ku?<]xlWJҊ90ui.p]gLrYw u5 ͟~֫|+n_I۷%AJeG) hE<~-8A;UL}`Z22eIMjΚrD4U("tXr@͝rK] zXG/Q䁋.Θ9u% DY^5ϭP.ܩpZ<)O T]#i7[ޓ@0_PQ + k%*(5X_`L̺<a]u"AYɘ)5w0}3ųS[6OA@A@!0ñ3n8w^`G9S6tK*]ZMOvFWk;W>L;魏\c\`VѸ?*&,xoWhj:{Sw):흦f>?QyiퟟњC�+Bi>e tG " uzkh\/3d @)z|vu2A丹/N``7]9:_(ۼp)DC' ͞riDkhWP^F igۨ_V(wRw6Os%nhB)ĭcKdkVuf>ꢅeԔ8o ײjJMhrscJ:B*t3Kw5例K4dϏ{a f}F$V93kqLϟb||<>Lpk3NgZԮcQH>l>&g,9l4/8Pc.$qG,KTPs;-Zdgs+9kb54m'܌*M:"Ρit3SֺvFz-95{KyPy.gtSA&vK^ww%VIt#-O 鑟Vx\]2'u 45dL"ֻG4Mt8Dy*/]+4j|m,Ms]qPnXM/=\kպ$jQ[U;ǚX믪_%A6{P5̀ jȸԢssB<,ru Sz$Ms5寃 W6<;v.)&Jܭ}dweNCסm YYLr#1N/E4Io()ON7SŨ թLr:CvU   ܦ o ]Ѐ ݛ38)3}! mR^#{TTjgW; 6'5vv}=q*4y1V}fIKoDikB[1:cC7]l<M?*XDWZCzw:Ani 3J^UxWBYsRFԞ J?]eL'||&Ų+N괢,JP̑ݴwߔ"e*w.kZMKZaow&[,\'A%03fە6#jwb%nWkiҸn1Ci\"-29 e|FS/rX,oH.]Pդuu~I6Q;O&P|t}ܫwʺT!];KqT"x]jƖƤj~>zcBO`Y% @4I& +ؠE8K!ݣ4qɮmހ&mWi?1KLp2"hd1QTLBX=|0)Y�4fF]_/IS\ybDWFaS4rp9]wC,և#v|S^|NgA?e*Si'L1WLh&k1W/4O9gɼ$PΏAՍSRӴsZ7.k=C#TQ 0sc~R>hCYu,j{,iݨZ|X_O+jХ3'ѵr{a̗:m M;S~Ah3o3I=9^~E@5]bwQOqP7O++ 54'sǺ߬S{{3 \aըhgN]xtS)lS'.bۭ'D0'.|g.-J{BoJ1;tbq*բ4=: >D֊j?,̵Fа=̍@:PRsԺ<O|?,A=h^Z".LtAKT,.BݼMJt,4~v,v,6̟<1ok:oQk/ֈ=ܳ?ݦ/X}csIiS WڦfZjN)%@T™ڜk; ? 4LkL/DޢOYթR窔hZGA@AG!. ݑ:JgP8._hPib#.>|q'e.IVtOwD_E/:y٥ L:cT&\;pzc?7Lx1ǵ+ʤ#Na.]Z3Nݩrᬕwӄt܆q)o6t)kf~3'h?>oXeJ?rvtb+U?i6N|ΆJz'?19}7Y>wi߀2et#lUNXiܲMϪ%'<f7?ܛT/59ʋM<X߭V^3٫tYeХ]oA=%lLU:}{?T-o>ڢ/3K|;x-rF6ʴ|>̓O\Pd}Ţ?w2dա<:-jͱMϠk�0Sfcsf:'oV>eϡ̆YisyawY(3y:1_*Qt]\w)ʲ{:ko$L|/8`a9o } 8"f}ֵui,HX֏k{<-c=<9ٟwɳl:i ~%X㑎?ZyV^(n74Nm;Ӻ!kNpȺ=ͧz\O_mw`Λ4|lVcCT I$^8ߧEsi`0DzY>H Ou`:bw<.u(.Y;p=R\<M ka\ڌcOv =9kKof:}}W&T"|xD2÷xǸkauTd ?II :Xocp\ۑu:6=  -�#L HB>VA%8(.|݋hrItA(x:wrp84˨Xl_DǿTEЅ25V׹:CE,ˏZcKt]c]HW煹 D.=2zO;'nwWq&AeYeOp] R aosۿǟI-H)y-K j=eMOSEMfNbaI ge0VvSe@ µs1WaCv ax-/#-| s&eqosGœ`n],4:h.4oDW‚JXӭ\F ~wZ e^\׋ ߿0 pߢ=9_q0┦n}7KƵui(Qq Tp3uk')ӇvTLb:U|r:kÕ+>F~q/DW8'W Pg9/KMR^P{|uDijFݧv X1ěL; w후Is<r?ssy `o c. 7el&&B럹1΍'@a|7!1dC`"vxf8Յݦ;opV~  6`P3]1/.D)>yީ&>BI3u4AD2wC ex8%˧qQt&hsk, ֌DBuaDײDg OB SxkwY0kGq׮GKwBu8SP-.c/Z3H] oYp 5&:>{gȿ@do$&tv% Q!hwG3]:1ǂC(2Ф~x#m,qgwLaCr&H&]!5 c<nԇxn9֚4H<^o`\[` \&6UK Z\p!SY'#6al զ�#>~?~_.y}io�V̍Ʌ Xy~usvLn` y;}!eD{ O?n. wC~?DwZN\] emwL&)wV./^vsOh׾A|35 ijm>Sv95Ў1:1}`ktA8Bc͎1FXWR-NkGA@A@n-躁f}d(5Pb.p5<B4 1֖ k˔vw!�wް@A2yr]\YkmK9hx-- 8$f;ݹp]Z}C,Ak�Ng_fa{^m݊Sּ"mIs:ԚnZIDZf ĐNfܖ[; o:8hd<q2W&,~2Qf]猹?_#Oc ރI$h~ܻ,hVU˂1zdHhs*t_;9_\0kaEe24 .K5 b1k}Qk9xZu&jx#``c;O::=D`wΜ\\| Bty:|BB-ER@P9|V,8C/^ÚUмFIB:R敹wX&7D)vd~Cp;_8?w91$Nawl\2o&Ş3 wߙ`VPkFs<6\p^i{҃5&ny=uea0_Ȧa_   ˎH°|M$օp]LBtaL8?Va#[Dru;ވ.z!_zZga\<6 CiS 0߂^s̢~Mk+ODcolx6Q .:xhyKaqwA#4ÚUв=͎M0Kx.B= d-<0Y rq ]_Sbuؤ8̯WϩsD<$kcw& 3&hqm9a,kk;?20ہL}s�埿ul"g-뜏5%Xn>I55aZʚz\7ϱKon q׏Ȇƺv#G%fk%NmW Bty3ABhϞ)xpS3б\(pOFt=W| 1e/qGt͹Q6p8ĦJt~Nsx'Bp &z"ejMBs-=&CSNs:th[ @p-xw#z{?A@A@A� !ʻafIJC. FwJtA?ў\\ؼ 4ݩuȜO;$CY¹LGtS]\~ϟt@o-h.01Ժp#ĂƝCΝ@:6y!6x>bAh5#-l'<fg `@~h,C9ha\g!fȘu8 }Dmwfrq:K;FLJ̱G;~Վ;+{yW:oƋ&i] eXqEew$f 8p_}>}5d/'F`“\[FC^'ƺ98haեo1k#MZVX61߉xnjtm2:5 <?_ڪ(  }yvskqf  wL7 ڨ\Γ7ܙJh 54Ĉ4LkXC$y޵MKbrgڒ|95Ͱ5D1:;~|;H v%oc;A@A@=\w0d!<;,slG,&lO*e~L”A`쭿LciЂX2I < EtiABW/ƵawV!vj6OYI*;37OL Z|Ϛ(f~8;8f3gh!?8;w:X[Is4pJ0ɆA3+ûYPu1¼x5,|89~?afȘua|x2B[;m,q}2~ B.SHwGt{A2Q'sl`W?4[HZ[a'qeخywyV|OʵB_zgd4|stn$F6ݼZ`"tg<it!?veߢf~˧/n b,+ϓ9>Zy3;A)LP{|9 !WCMtAC3:!T $W۹ eBE q~xҎM8t5My0^N ՘BAt1˅ٵ3<VA@A@<! D'dBopO" ۦo7?$!DgS7m~el7YXM5O~Nb]gA]4GGsVa$~Ƕ.uI W D  |V) 6|أF(>MwO%<GZX_vddLpvG>Ȝ-/<4dkq#E,?DW cC8TbS|cuPfas]7p` M+ǘ]{lhD[1a:G ?3 ʛ$gu a ACA.U'"c.p )ז/koa=1I$N-\bdTVYz3Ժz1鵺V[ވ..K]+ acL>¦(7ׅp?Od(ᰞNAqrh|KTbDLL7PsQ.];wORPit}3/f0]4\=i@,Rm0#`C<}7bwNӔ "J65;5&76)q?q5$ǵNuc<iyWA@A@H‚KqԢ\R)Z4iqJ:om_ݩvb2[i'.Ap|<]hܼE#~KFhkKKEu6'u^}1:=M4ԮS104ܓtx&TVڦݳuӋ%໭pxE㞫*PbiSe1G~z|NJ>3Z3* jHG(jrS:q!fCʔu{8ѨEbQ+:U5Izl&{~kIrq/{_*}ݪg~iQ:|Gr)OA:c ^8jAN{:K?N79SS*W1KMϦNwq߿qTJԳԺC+e/zqUDfʘ95}0/}m+~L%V8sT<t(<@|Vcz~lيz eϙ u+{5峚n_&g_kPǮ%GV;8B;ʐ1)j[{=.ź?ƏܯYԀjM.QLuM[;<ztYzHWA>/</Dᄐ֪e]cz*]׵ptQᩈ.je%(-'G[4X~ء}ur)StYymoF%惿A7Ggֳ{L�uJu_(#)L:~Ժ԰E+O ^Yy8ڻ$ϜtlU6au҆ ֳ@(ouC^?+h)uQx 6BhTLZ)I~-v4A3k @Y>~OX{dLWΠ= Ӕ>M1_Ҏ9HqLvڽNwzI-Gsv~Q"92gM;57+lz֏GfFeR^XWL}ZQT+V<<Ϟ?q|`��FIDATr%=\[-91zRgRst4\kt+M}TgyF{[N>L9ri"kУ׿k;6_DgQ븓/w9yPLteںᴞ31-<A_VW{OhXy~?[Vci؏3/q<g,Y=v9y(CTz (*~Q>r|'<p_vUk+>֫0Z#FA9ji X�yg g0Xm49pjdMi[5 y Xc2>~<0\AY %|W",  ( mћvꏸRN�is >RfiL)Rp/>>Q҅Yz @4M4xa|U^~fauN/t;~.0?Kr:?,EevaK(wdšhʜucJΥ3vh" B2zup'].?]:sRh}rSRϞ$ n؁TwΡvo2j۟WSR!&j=U|ĶiC4>Ho ٝ;{zj9M$ .{{{EW;w.*A#1D}6u~"t횃fIC~Eh[cY a'ڑnDgo`Gl]>f>5kSNu;lnmW _+OFЂ~ko5g]IQCQW9iZLJ(Θn-8B܌Ս9t/jnXqNqy;wW'Ə:@Ci zѯ?5N3~;:ߺCĉY;/ոJbF[~ BI'}q mֽ B/+ChAڄX ux]ϭH(č`HIm4Fp!@p4K|_eC/ |85ˆ?gc:n.W$[u _SG{to*kK@=s_XI }QbuXEVͤrͺP=sXwAsd%]uuEVI:wDוsѤ2꼏 LًVʅ%4kaM<^juG8'wZHmRk"];9<γV܍ww:Aۢ9 i-+L$xs@S'х@ Wvq>df:wl>7{E_MmOmp0хfϮ_A恄KUܭ 17kSPky#kL7X8 k+i2:&L8(J3L~3&클|b=G:NFoZ楤:lJ4o.D%MA@A@!EL QG(XŞ;KbLF=L~]1.2 vl≯&ҦKNC;3t]S?8TBj{*kaabe$=!1g $|T)`'O;1Ђfr_RNAv<A'@=]0"\PKz'L epmA(vu璊ő/+J j+ܵ8_m0Iu8tAJ=YpF+ߪcXQ9a7}$BW,F;|F\Pktf!'m=RΦG/Szȝ7^|ݰH)JJ޹!!CPW @2  ͆]7 @]IK^jWHe>�}Y;yAzqَӏP;xiAn`ݙf^}Ҡ޳}+ou1 ufݲӵihq  톀] 9"ԁtRs|}㋃ 6,]ɓ9ˉPKP%er*]zY}zm~I ^F 8{mCBJ  *RlL*I;W۵ aJ\slU.CA@A/ .,7;"nv>] ?&eYnꐸ\,͈�{f;H.I[q>{A@A@!n,F�Geɖ^]WHsT|VQ;}0ot,q&A@G`݊(Z>,W0~'hhaʙƟS   E@-        !T#      ^ /Қ      @H5GjA@A@A@A@A@A@! DWؠA@A@A@A@A@A@]DSA@A@A@A@A@A@Bt jiHA@A@A@A@A@A L4.A@A@A@A@A@A@! DWؠA@A@A@A@A@A@]DS qwݥ)RP4)]$ #p]=Oqt)գ*<O&&A@ur8\);IV    ].pH P.L vv%>K\Twы.q%[ z'n.2M9j<wySM:^Skv⡳F!<Y$ 5%iYx.ˢ&TLBNNHׁ˛P,iȯoԇ&."GhԲK zG;:u4c>z;.8z<D6U]&D %ZtN(Tb,sV@~ں._R*u'~ʑ+/L%]ԉ3tgRwC=/j+s 'q3PvOc]^Y7u n*>]FxK/i;hK<t_Oi=~U.&KB@ܵk4rO԰y+*\x ]cGӱÇ(Mt7ʝ7 q   l+^wž(oҔJEUG\<pIwη(M^tn *ؾ2y׼m#6<ZБ\d%Tꕑv{csA,>Aغjɾ^*05Q0՚yx5:*$/hDgǏnElR?{*!IJ9ځK̸͙(s^39yNHĤ]^!߿fO^.K~P|}5�=j9..vmq?%S[CцeHH$]9qUz.UONJ_GkND9k t(bٲTԴҋ B9fY<=wiN]驗t;pG=;u=̫o: [ <GY+ :>}'g eJZ;Acn6TCu?-+h }GiiӀ25?<pդxO \NǏGxf~F3RX+Y5jvӃKF    C���t/k��@�IDAT]\U^p {ԭUuU:jU{{oQ!N^so{ğ$'Kx9wA"k7p,o&ocpv.dʕ%Y}oT%GK:3C|?@Mez]E~*1$7ߠlyY{'}5 sd+oE,ǽGslN+䱨w}.ޅ*t:iV;1e.P ȕ)YyKt~Jʋd;%3m ph�-iѺ]8NE/cӴoCe^1X6w΅ w7d͞Q/mh,T;|e5q񜢓zOO͟;)䳆CJ<qwQ0z"z FB#yې=GN"|>h$>;)]kڿp)ilPy26N? v`Ҩ.PM`c0ٳ*_՗u5V'Oq9<Z$̇ӎwK2|X"4O<9C<y/dȨO}N*XJ,�?Z\*ӲvD@" H$Db>D}t!c&B$tIsKI!s{ܶ,$E[^]ݙ=ϰPEPT.Z's!6e0o^_<m{Ț-oGߊ忽߯E\ݥ|BF]`$.sg&p!Cg V޾1rѸŧ}Bv_K9adY{EFF$D@" H$$||$2ͭ~Ȕ; *ƛh F? L'gV_r[#[Q+q JmסN TZ(ҩR2CǴ񥼩]{}U *7c홚*DdΕ#Z+$Cx\'2"O喰7MW]nx'L!B%[װ]l x:G _lѤ8ŀ_FZD8drþrd5_qBr " \ G ˉEx.ןkoŌqBѴSqK3e@sK"_!+z=Īx=M+noڛo_'K7}y=Ř%( 1 {QXt`Wq7reF6=sd mm)s\;`X>G2Xe7x֜{ߠ*U1/*-:z^bB"TˇV$ΗBzVl"5ư~v9\u" n ěW h5Ld]ZO\"AkBryPsjXFke/A+QK2Gy6?iw\E׮/^AܙPhTkXPkMrA\R^Χ]񑈹PɃ<8>uQ/X[}#q.G Qj>\as_%ir@|J]D]8yϚ«X~E o߼OSBe LlL݆ӄ(X+D!xyk8| xTxrBXOjtg^!(bcT %JM/>O<vz3R0llKFȒUPWB D='o^Ehp�}9cud̤k<&96Er`[^wBt{_JXO\Ϻ i"Kɉs$_!lz$a)-ZŸ"J_;roU.obFx7s1gf%ʈ㻗qb>vV4-rIzob~>]q_"91!ZnޞK+|k͕)'Q®4 )gL39?l5U<{dGAÕ+<ʙ+z<$D@" H$$缤yr^WmاᨲlԀpTU)*G?]F'9ѱ"JHl9DmJC2ѧ5]ί߸u6.& g;⵿VvCĽ"h{z,@t[tbPMtM[^wZr?mi:jd+0C�#fll7 `n Pf3Wm,I_wN+PziԭX}d1s0tF|V误9Df:|_S=o H "hlz9DegI5ѸcIIBgvbxNu%Er CA83ZHt]-F?oj^v\H% tmu5ωZ'xΟnph 3^AZ=ǖM'g9سCK0$Ʃ43]Hn9'sw5EI#@X Z'B$xV_DCSź[ ?}s:+ơX*(޿:3[}OdѵojlZ;t &N '[\VM>dZb",XKn_b ƭN73Wn|sOٴ|l~pP/p9 #aoqπF#0`DvϬ"jV#|У.@fY DFIqf]cbQjQN UkFKS9[|$Ԥ[VEi!2_iϿ_6ӭNL46&rtN$}Dΐ6O*tyֺ^(^{~ مDnF wm+}3Ǫb!49;JWp:+d4!qL6vPsuw䮚>e}E<E\c;O^lZ-,P1<< T][,u6Ej5x<,$GVeɜGQeD" H$D@" H_H+}Go(\{dԡ(Qz?@(hf燀rnҘK/s}7ō]>>]wo*%dBDzGS.m 2ʊ0 _ KaIϦF"*^ErDz`AZ/">hs$>JRճڼx*|tel]jkh{DxδX(TU"6:kM"6l.*_>Z7Ӭtȟ@+m[ҦٮؽTXZQx2[ɭEJDCռx idG慑+ox2#Wuȷ2g͈}+<:YǾe" <!K 6Z "=zǽB&%NnU zf<udZ$MrYcDWZTiƷ9Cl;3;)D̜M8b&ʫ.2V8QĈA-A"L8AMB`6h[osIȧ*~B눎�i!ݽ<YA~mWa7'6NhYhҫx(s2Mg\I&xޏP{|fc0Q0m#KrD^FpɅoҹ8׬z̮ )#H0W<iGT|\ӨN:&mĊ~hi|DɢuzF3jkQ4}}P(Bt&J"?]>r|V櫛D^414Sة'3_\^1ӄZgNXAAD:v𤘈߿Ǎ]o^Ўy}DtcN9th7&N  KU6jkօףp:2t}t=cALӬ4;o1'!)]}`_"0.woplβͨTZ NBOv$ 9Fvm+W#3 3ǐ1c&Y0wH;kފq\Fճ'xuqP]TƶZ r8!e;O(,hx!vxWڨϮcɂdsGӋ`nk .7_]SkUiۯ:~44YzgwCcD۰ߡygc q5`Ǯlr+m*m+S.[<hV ۖ8AͮCւ1Yz__J1ё &)QҞikQ%WNWƲʝWdV܍,y"}W3bm5UgI}d sk'+�͗]RʸD@" H$D@"DW: P{]ۜLg&m`_Ė3{BeR㣋7e6!wl&Z3־ Cmߟ6v=0qBeR-cDWkx8oȕ(|(Q:B.)^9Eg)ճu~?ڒPj2#gL kj622GLMzjE)<Y^�4@&k4f&6D<EtYJk15>|c1fѥc2"grsT N 13aQi^~"rsOV Q]LYӮcܬ'9IW^cԋZ8 $c(#ɯ"l4?ŵЈ?&CW]4*HdN) (N�F}<uͺ>̼LCl[剪?T/o袱r@X5(Ž?ݱqC~iYu(7 i)M1kRVOGx'/Ғ@cR8'lkMenzU )HKUܬhK0fPHǨ(Шކ DYݣcLhrZV~#5Ft۳gyNf.8B"iH ־@2=W(cD5Ks_l#:'' $gÒzV= uގ5KcR7Nf"En^<6ZꓥsH:c#9oݡ N"/ xvM.᧯GrY]---kx`Gs."m̺Zroc<k1KcÚ5@Z\dQuxCkPR<5>1K}DvfOjtjG`겺qS."[mECYKNQ]dRU,$ߕ'}4`}E)߾ Q)S[|ڑiycJZJ<y[R*f4]Ft]i_8t$ϞKT-F=dh|^QsG0)n6m[fH$D@" H$,gOنB/mcIf;lTdX.QUָVyZc--AOR"7LDrdȖ u<gI?#ã |54}kJ^<)nJQe;Pa̬ZJAMtW:hfmjzm< ysݠ&vuBYu<7z41%d`jM5X.Ê m`J"4OZ}SN~23m:At9("$+pk<XPONz$Ź$*u~ KX<u\#H7W'al`Ysmz_ڂd04ǴИQ[w᫖O"bEt ıd"�{?~j&Wr?[kI1>2Hf)}E!cZwcDIn5DzLԷl#ڔ@{LF$D3 3O_!5zn ⽫2m_ &<ȧ_Q^GSoG ͱqi/!gJlY;?M-u5Cz*5EDQxcR"r>kۀkS}1}ZwdkUS2MBtۻ̉Ǯh�22Oĩ;a_"2Jh] nY&x51@-ߖNJcz>h -}qu$},!u´6ib;)|,D[p~k70 ֮_xܜp N0v)JBas;)x8#[b@ 9/n*%[:c\ W+WJUPiK:kt.SM[?D@" H$@C@]oN,Qd"[mٲ kE)Xn7ZC_ 1nr|>*oNZJDף_;!I ժ:M,n jK>!_CO6D}̤$ $76y1D-a4B^6)i8Efnh(+GAt6t` E$W'[<c$iPُxF/Y1A|ܢxabLK s3XP"Ͱ5%anOmT5o)&� /6"N1I^ .2H&At1M2Y&4ŜNvD 'G@)j9|qL"s&D Ԥ%;|Q LW9 L:4!)@1AhV%]˧v0 /Ih4ynTi굦[At|lƏ&婵sչ %'$[WKNgɊݧP8{(DQKQujr*D٣x !0mdx2]"4û4EIx'}:jǐ6nM!MyDBe+׀]idb̉øo.biz]e eD6qSjA!3_Ђ|19=}\L`GEVJ4hK9[s1GWYQ({XWLzxXk K$+S'n3G2ڠa\sK}tq GdʘOC"EѶs&k7hk QyH$D@" HJgbiwt+r3/X 弱ajW_ 6*i$%yr%I񘙧 > O.2'H�k*&eRjoslӷ&QD!GDrQ _Zcѥ)DW@.3{]شмme@;g^@ǡJSB盞q6ܫT]M'1TZ;&̏hDaDx ς|-9՚!ĉOZ:_x7w!%KVjԕ< 2'd咋!).'1?2ck 35JrAM5t5>E\~Q:8*3P}]Q`VgŇQJD��ޚTi"K&B_5ג jv"dж=l~Irshk!iuPuҶ{_|>eO!Œ3 k^u<nS.s|TO{ +xJDe%2n c퍞2t(%7iHw<pU<IMt Y3hC}y&f[2LV) ukLx_ { -u7)WeMcZ^4(/#|mo/S]+Ԇ 7D3+SkoռZ\ K\3S!֩W?X(ڮIyD@" H$D! Zf)1J`767]hU1͝^qN\ u|cJDu(n/Kl訉G?EB[F԰IїQ6E95QZ~%+hoh"b"л!^EEy:yo3=[<)]CO>`j/UtX=QM!C qq eL˜5bPM.2yGZ3MILc .AZ?<N\XkY.ƽI@y^JDt]5?hiĩ"pRB̓Nv3Ay:O*sT-PuQuq =Ի|sF\NL%LX{oݍvu[LSN{L^a GLot]^!';kml:(ڭ2|h m]>\= 4VxJ49a˶,E<>yZj[b`c[ vjNfOW/h]O]0yX/^695|{Ϻh0b%ttn*EE9f[sR!SJߑ扊0`D2F |?3޽ ƗsAٛNtQ).5—}@Rg5nWsdV"Ŧ˹MPvFONBt,3T[Yg)s_I6GnP>,!VYsqͻvm .5ĴFEcԳ/q Ф/yo gevn֪C^(X؆}~9{vk4D@" H$D@".DWD|/Ɏs<Ux m,9tW]%$&-M]:9=ƭA;yZ;IS$%>V J|t()OD)_crQ.Z r^1MGrdʊtKK\懋4[tBEu7qv3ܝFPCiOtiuƂaƎD4 X w\yTNB�̴ NA9HcZ=Bϐ%iGDZFa$uR_>4% zX&O.sI]9N jRH8gtF~Zt/U+uQ׹$ph� Ɠw%4>Ę>ѕpRm¶uW=tRaZ8{l?!mCelvƐ/�mMN4]i?|5&y. 3jZ1Qئ/|bh̔i) ?-^u!uG?Ǿkphtq+.7eL[ϡ]~=u<_OG^x~j.u#&ֹ#sՁuFz[^ΐ]x_l!NGjz0KH㯲HROqk bN4-趝=",,bJ~vD%2밒R@B̟V17C8h8ZJM͇1!8~pR_(S"?' C ӆ2H$D@" H$It߹IE  ~[ig7U[.Ԙht*2L~s]]+OryFEaw8Ll67q׺n٭'"k+|X_kRsMXȦLH= ⓌP{U(2f˥t' xl$.2FcO)l$T~hj|͈V؜'Kw)` ur7'h;c.\7fȵˌd;"Kil =95L\1^2Fas|V_CM_S;jX.^]gvrOԕwڣP1}?n~h;#<Z+MG]1S q[/RG5!H!1: Sː02^C|MQ%'ϟ5`D4ybLrH Z]+"Sn䈮wl}mM٥Fhd\<u a_:J-+3�@oVhP�3؊Etѹ!־@=%Smb3oI2,%oлyu^!gL!/sg_dZI<ĄD0�jiItQ按>T>G*AQUնkauPiJzJg.oO ohxBMI6p 4C㣺;@҆Lɤc }wƛd$|L ypdrR &S`,Yw_3ot=aՈcIo9:*madV#eNx^C+wDD@" H$D } 12bɍ;z* ;vдTnKiPrx]դKt)>~ZV }na/q<6ALivRwZ4j 2'999מv"9͎)]q;^CDl64~xmM$}Q]i9+ZT4z- uM>u6fmQF>^%D׃kave=4bh-f,5ѵgd żz/TCrs=M.#*sM%,SDriN n"$$ͯ5Ti5U0/j)Eiqʪָ.EEG.d`];uC]S_0k!ҟ]dFp§_xUȄw7)-H!FЦR2i<A}FJd䔡`-A)b[tP1">ڛ ́A)Řf>t9 aI0U<ь?bnH-e6 :~ oXFn 3Hf )g8vL!PTF L&.<TZ4%&}BUY2+_"2M/1F5~!_jʣ:{5Jڔt gLbl$›ׯ kԪT 1Q?h6+ը_a?J3)/z#'h,7º`sj;]i1&!+ixn}py^\ōy!GI;ZX? dȒD�tA." ]i.]}9T)6TL/-'nhU#lzTnrtc%Qmi4$i)K+z'ĿPijT9sY}X|%8߆70\ܾv9'ەiy8w'GJZ ]2H$D@" H$It ~ 2!WقzAܔt {caB#ZIIOx[}*qW5Ý# VʉH{(.X%N?jS!JL'xde)Ǜ]h!vZ yԧy6,Ѯ! AizeRG u6)*co*ICq*]yгky<sBȒ\O] f$Uͫx:s j"/Z;Mqj4yJ /3|ƨI:K5|ܣ1DM@-9)Z49YKhDPͺj=ʤ \TʑH23Gl|""IE7fL+g>JW(&⃉T6'"YSHš+mz̍XJtQ;4J"ѓ'?{'"y2ycj4*D9:~hKMS{D�E$RFױ^87 f4h~lJky$a=Z(AQ T\|x)DDS Pb^ַx9BMZ[-*x~yrڕtҸ辠Ř>AʍfE=kH1!=`ݤ7Z@ d)Iu,U{޾yY4[ȄPKsW$=W6 'i*=GNna]T]ꧯ5<yYlpWڠ2D1#]W {S-<z<}KW ȧSrsTBd[F =f96R q@e '5 ;*G}$vfvqiE'DY*{\ێ;ĸfST _s=RQ]I\2w%oK;>e~e+"٤#^h\y#K5W@NkvǤW~ъ\~fNQ<5¬T9>tS5>Hme̙k WKeJw J15G {bvz 6JSkYz_z>4$")K,R>ҝ]:Uz <]yJFYhp?/V۴gKTUȨD@" H$D@"DW:5N+k ySe~SΓ`v-65h2V^T4=.Z>ZOMU̖++ifD{1mB駐bsM1u /+=.%ߠ̄C+yB>wNlƚ(̢}ڬb^ X3iAt+.Z?h4M6Tc+fn| 21"lӲ~Xd+ Qk)&DnՏ;"KK;>8BhPٱPE(sP9O.b)]"quvB:R;;kiwa+{=yiR8^/A֕:rU3c\S`y(AL}EKCL,.v.$-mZC>/kߜOܟǣb7}LYY'nzc#J| ''<Jb?#W1BQʏ6Gynbג$]-[DV>DŽiz/+0;NZz)9CfO2Ueg[sXyOy4u5n3N$b'U4&nrC:CDž*v(fWmWM|]f_Z'=ue%5"ȟiF;u5cޘ6}AlE&@ka sbgGA0h":6/[%GD`5ql~#kiTQɝ: MOnV=i#67/[>ȡ: !?B4v_q-K$נq;|?h ,hh&054I.>=j4o;AT`Ґ\nвC7E֒1)fD]qq h41CZS5#??3E<iM59;%L["ӈTK)li:E{h0#}W`>Wjv,kz*"d=яvK! ini^5ԯROj t d+xyXKȭ(Z2m(KgD ӐU*_^#uK$D@" H$It9=JchC_$ˍsq+UGV]f*#rvYVӇ ~ʹc^!#,lC,ۛ@KF~YU1%hi6D2OalMddA+w~Lja$ +VWVֿfG0_F 'rESXZ"bL ,'%"|^"E1H6#Uk=ӆeʬ19U|%uЪWMru<{Y4׷+pN|m<vż)MT3Dξ,7-LqP3IU]Rrd|JU<$jܯO"E4v)խOW3f3m!?V1zR:cr{�\QEi?g3/^ }FZ]ي1kf�3P?o}0h;}ŮaL> B2A" H$D@"DW;D@"  rK@1s2 DdȘQ~Pa3|p^LX(7곴.)' o߀ctD" H$D@"  DaJ$D߆S;*EVUB,d Wͺ́jQ7 +]_2͹4kӑE,wzbUQJt=ٹL[a!+D fgρF-4S[H$D@" H?Js${(H$$Dt}xɟیu Pd.22~v<w2(<6p<(H Q̔g,3UzD@" H$D@"DXV/H$eǽˡpaxFlY|n4Z벬v)e`kyϑ#GN/Y54Ae 4D@" H$D@" H$(GᗍK$D@" H$D@" H$D@" X$,ENI$D@" H$D@" H$D@" H_6.H$D@" H$D@" H$D@"`)$`H$D@" H$D@" H$D@" SHB^+H$D@" H$D@" H$D@"*$ѕ*D@" H$D@" H$D@" H$?$)eD@" H$D@" H$D@" H$B@]O K$D@" H$D@" H$D@" SHB^+H$D@" H$D@" H$D@"*$ѕ*D@" H$6 !CdʔIcWMD@" H$D@" H@@]f_,zb[ug4C |]#1釬Vvex%[xWx"mugO28:_7@qut>q) ݚEB G'Y"aq{xʕa;*73_/l[JĽ}HLLD9PXv2"\;c)lj|"Q-:mfPD//oDGG666(ThTT}xZlYQ|y?KUN<'AAAY3:*͚H1?q?0*MҬo饢w`„/՗K/k/-=S1+pY<~DswsAlٔWdax~7}5&4kϞahҤ:3 %0 g\(XIm,$H$Itk!>Lk濴g:;Vly72SVC! E)$R|bkyhhUw'"ԆBѳ9ɳn|*Rvs} U\A<}GUCEdG�DxRp<5b'hXF#(;r5(3qᗱc,��@�IDAT7Ư9ʗ?Tԟ*ӄ㸽&ϛ2~1""`ۤ^jPġF xn]hoZDQBH"vVvg>+(8|0"pߑi"MW||6c|rS3&Q/a)<~HhL޽0mꔏf\ C=ɓpT\c,M9~k ̨ctZ)3gNsfͪ&b<n?l: ]-[47ھ\{F޼2?2%CuMj{$d!D@" H5H_3ULG/ϰ>\%W^&A]fevQ<..wvT:9s; .sʇFv^nasF)Z g"6VDtQ>@Ifw/]4N 2}zŽjL:bP͇{v6I،BIT}yB+[lOԑeHOV-fJǾL#00k>�#bGnZiS09_ 3e|26a* Nb]M�{̄U" H$ ItSKڕ/O$,IIt,DWʳS0_qqXȓku7kehƑC7tdU]sjkN\KALt?fџ[7oB)ݏr,JKle]#epus|,KJ$D@"DW3ɊU kr/7; xɱG5]ȴj!5[:2Rg}xvăxL@4K6.%UkDF!~0+h5HdIXy֓,Z >ɐQ/]$zNyt m6|te<Oh<zEb<פ 2dD  u3XCQ&ڨ+|ģtY+CLIm(v!s?EO=bpLŸC9+\ ٲg0sKq<s] fC*icݻu9 8mT�G5]U﫻k"^ġ|ܨՠQBopx|"2<#+JBR nx(sd=þE8nKX_0rEǠq¨۸�[O8w2yɾ=myu BQ=ʮtNTc\!Wެ|YQZ^z;|5iUXwygǧmP gyuۥO 5 _֯oace+FjgѼֺZȘM\EMvg BS|_- Ί UvCkA~>/ٽ o1Cȸg/9:ИhM:3W%rN-l0(E-kjK3ҷ-93qc^DWE<B. Ӆ۷ñcѡC{,]1UHٮ _%j6^%_/wټE%QhQl188^^(;(WZ3͐Pfj^z-[p+Q9`k3jԨ.1!!*U5e )z1a<u&~J*~Wy5=EcժUX?DL644 sdeĉ?P-6_ܷW͓1Ϗ \͚5ms$>7]FkvZaƬdMgjWWWxx>Jؖ@ժbA!|7n a)Z[ 'i==~q(Q7Btsj'}+W.+W""<KB֭8"?rJ ۠wgZa&fS{ΓЬZ*M.ժ#G$-R4w _|wk;>>ݟQZ5.߇|>|,3iMd\)ݳh Q#i9;;㩗d89r!(Gq=Qw?U˕2}zu)ydtDW=Bk_t֪Yh,VLƻw3'AZz5]hڣv]<}ꅐP͵^+VhH&,M1Y@O][sKkIԯ_<sqqŵ9thذZvhMFz)J*i[m%w$sO{dȖϸ_9}Ccbb(}P;}-`߮ [kRI$D@"# rv;͏)qZhԱlkC>bbqtx|%G'6Bӟ[ cMW|oPB?AE^73mλ?^6uCAX rjW:9]7qd#$S?nΉu)Nd@Mt%Rx;vQ=^uoĈ@!?l>e.'YaD38>uJ+Inűv_#CYfFWqlgcp՘.7lt% [W|n"R1wp|>gЕ֩"Iraf3DU?45zSo>)o6 2ghZ~rBD8t#n @0oGn +MƗIHk<괎hl3#<u*O'"bl`K\3I-ՌJ<)|t57(^dbQ#08rprݚ$.~D\`fIJͩ]xRZI] WQa]5FUnkq!<~]Mq2EѬ30e4-{^,rF߾}0olQrTڴq=4iٴy fQO]xoQ&;zJe]tWg-y\^6O;w %٦` )~Fuq | lKW}iKݨ)c׬]9sS~,'c>ύHamZDԬ]o3oU֨yi&o5#RhC@"_ ,345䣋6iz GĤb<ODR~!@$ilވF4&Dɇ}PtcV.Wquk39s<olU_K#wJO)%C'rAN6w푬 #"G"ußΝ:j%t#3@[{:ϒ$C$_Kre/]QĹcj5,'AtM2 'O:ˉmW t;v<^~'b1]=g>F{5I3Z^Y`"^kֽ'Ͽ~ :t<y"C~^FaM<8;OKBs<o!.&|CEyZ|7uֿWc0<KUQmx 6ĬeD@" H$)$O7}1܅W>4?o,S4zWUwqm%b~1wvKvk<.j}SNv62w'6 * "oއcY4vJsM5TO܄_1 }<n{ 2mw?P[2eᕈ{4/2Q# ƺ9AXʱ4lQ}Ki~صߚBViUc0ͬ\LK׳^DR5u,GV j;8&Jrb}_12' P֎}eZ9 J|:Ҧ<NsM!ڠ'Rgz�f3'(w/.N->lkXQcGq8/@| ZuQPqvsah{NP91 嶟lfm(2.:3\г8�˃P6L?CD iƿ a5Hj<55nZ9"<"Z+^n8rm7a¶Fg'ʼnWĴ.."b%JϓN>6ڡ=a_˱ ʌ|yqbm7|wdYߚ"6R^YڢkinZF 6y> pG*a5[uin 5~~{y�֛:f]y 4Ռ斮 "Qգ]9kp/Cy|m}z:_O]9HžA_4/u/I6o"zI"H;6)1|J1~rԛnԗ \ȭ<ڹk7o0rp'&$H򕫼M__::U{C�f"!펭۶Qkb(]{E޿AjL!�CUX1l߱S5D|>f(׼O իW=Vi/Ν4D;WӼ"iC2MZ?"]^Bf-6dg-5.c9%ꠣ0GH,Z/tGZa{'l F$/1~8]1W6Wtp#K.ÚifD0w Kzvtl !zZLV&i@Zz._ "uWZ'Dk/iժ]WKu<e˞ U]]#D_6hMs 3oE,>u$|ڹsGDP{&1X-aF1(Fȑ-R}Γ  t᎝uKiϟ" -.sxܨQ#SZڵAי:Ο�j-7] 3M2J'’cJ3rz 8Nt_=j$s&`JDi]i:upI$_ÊМ1mvtTtV[/5*o3dՁ>VކߥgJVB91(X1 (Yolkg<%~oi~WqcVeju H$D࿅�1'G�3xmĥ%,&ltN|Vq˸Vsy_S)reEE4'3<ʻ"{~u%-:y2Wz>gKn峍ħ륧6!{VבG !6?quJ<[2[}GTiёKLbQHlVXbp6 Hd/O2<[N H OZ["7 m(P['޼'F2o6nR]ϔ?]Ph"P;7:7?ŏ_yœ/rX<NvuÂYܝk5.s"ɦ&q ^z>yAƴyM+(MQyS=Q)}o<_OX<մCyhL!,p~QV)tS9QJH3\D┶* _}Ck,TʨZH*mwaNPZݓ/&etѿ'j?uX$iL^I08zY"=Gz.󑞓)=WՁm&,吸e|l"3l.ixQF@4efɔt0TML3E+ܓ6z\T{y#*xF)_zU\MIHG}zCrmJ`ܔz 'L}`D?׶]Gw&L-۔|f>,q<}QJ:EiȜ9{N+OG6i-P]3fU}_<}O+o=:+kr-:aFbx&3S $ѣsk٦6E֦`sr:mذ칟N 6#d 6C8P,hc:扙}Tj`utNq<w0?%ɒ,5;wջo7ou`"%]7ByYizn<XO=wݿĵvzYr=iU` #{1Xu+yo{R)k搑M\=JةA=gEJS8ӤV+WP`<}|} 3gԣ~N[ 0N_P~}$z|~%;n.3Xc4O^&ރ D@" e9"{vۡIGdץ'?~ap>H$5)EDQ";xRW^ԝUڥtAXtMIO)B/ކ:N`J.k۠:6^×N#h3u͛^cF6&djb;>e^"hhvo6TDH"SD0W&o35D&?OW59Us2V5E8 \oV "p=l8qĚ QE_A*%"))梌}߶K$+G5%,%S'"Gi=[SJ REF (` %zMHWBUn"l_JPkX&.uɺ65O S%7?纥D.Q?KMݏEؙcq"6hBN]/ڬd ]Tg} S%ЦبS�J3"bm򔩊mRni,lPĦ1So23Dm3g&Woګe)"(?n۶cK1sx<}ʋ"]i7dё6ŜI"̅ _7| }"[Etf:q="E%WD?!bc]ׯk?OhbsGMCƣ=y'2m4e|q � N`)2Dxu1 *yPO u81DzO> {zӂJ_LCشiꉋkKZw=ys=G|6; *ww.ŭSH-PB򯗺�-/)Ph@w  |s~+In;ϓvɾ?q_m-Ebm˟<{?oo[,'_u'F#  x8$xlγ?cl\g*3=3> .^=2HL='7pr]xU?2.} f:($ ե6bn6&yU, 2:OƕϣP:ܗafrz\knKߢR8G6,p{i2?VFlOT6}'= tHXWJpi(U[M۸ mύP}THb%&~n/rCMRP #_ۚ{$lZsfJguѦs(չ+}$vovׅt2݆H$1$I%{v@ ԪdE,k9J|.yoj6OG%\pHWSLL&p̬:h۵ NE8\) WqčqExM(PO'3O:o8{Pũݸ.xC;;̽d{Η fmo -H!6U*ܫ⣝P%$9GբC~KWz%=\5krCu+Znj^'W*V..,)sTLH&}i+l|XݞuPU/pzwK5GfkLt$6%֜8'=yA9 $2>Ke%űG0[J],I\/nȾKݧGOx. z(]T}:>7}$_ƍķ8W6j%V`y%nڵ;Ts - e!u؛byIP ѳW2Z0E먬ot,%K`V}Le7|+ׅ5jTǬӝTAX@VnVR!\ǵ{uju}Ĝ.<s,jשȸ9sQYYs=Ϫ8Gܻ BqY;wwhݖ vfMEƸ.ӏ!1bbd.BO1^][HiOܖ7 ƍխ==V;f46}iTVSOH2ڷ)v}M6c8mߪ:Me^2<!}s{v/1u2 ^}u"'LT7_;܅4~s]=I**O }cL_S\Knݶ kVgBJq)1IYvWgtUL ZJhq_PIܼyC;u~g*Jjvw%(q_ieyߗ{gƎQ¡\ h?w $@$@$@ ]5u$Vg+|RDy?YuAβ9}b&p{g &T!qZjc5] =`VHܩz6BՐ_pqFVΩ~bݹqq潝snf{31:</guܧM"CtK˓ 1doZ(?c4!IDI~YU'dĊ)61\=թ*<< 1g�OueZmtIbwE%!ebEmW~'#Oan (F8~Do})BaJbxp~ޤ/W;u5Xl{s6ׂwDuܹ~]7jQN9I&֚9ڨEL)eg>a^=iM+/u % y->J@͘]8͝}ŗ3;WYf =[(fEѴm>sǨKs/ p%^~H ]&Fœe=PW=J9Znyov5G$W֭[y>xw<MoÇc韋8s?[2hyM˵'O%JǙvZƻb3~>|$L0%a7IpxA:^};Gbؓ]qcU]'ӱx$e`oO0yzmكk:6&.؅,3$B1fS:k.m޴ݚqmu2B'|޽rZRYF_: My=9MEU6C%!AY5[٣\횢e%Rzէ.]z\LB.?d-clհOb|6ing]Iˡ{UDrF{"(z L Q1P ̓� � CN0LYKF,zfɾ SW_@f Om9i'zj%n5w?A\߳\[NZk]N_^_m/*+3{|5k3jg埧Oq5Tو/]e3Tظ. y7zHf/Jdpwt}lx9(榎;1&˵as|d| kwhI}t[O4z*P}I:{>Ga\ ;\8^z|ݚybƕ?IZ}*Inq&.']ImeѯB=dsY0.]rfۜ"_4~cיN~/Xlf_ /G\5oծ Z|9+ e&wL#n\bK&%u=8oƍҧ~n iܤ^ø31KI=5I|$٣(̵*v](<queN*dy>θ.L\ o /٣&ޚY/cƌkɽ)I)ًu#GxmjVk?sRLDqmlF+( b\LU .-vOs=yf;S3VFӴK1{ֽ+e˭{n=n^?9*dbt{>4˯9]FteǟuP:ޓ&ׯG鳻L5׷3L٘\1Q.w&vq̽sNMe[蕻=R^wٞ=eWĴ&Y(<ߐޞb{J   $O�I xnn^-Ym䖈[cg}Dj\Q.tf'Ą 8HOs*k/ko&#d2U%>O|h6w`47Byaqf8W-_sՄqM?ܖ랒4|b<սqNv %vE'F(2cb{TntL3#RL{iwbc40]vA46ٚbc@o.hdܗ5(1 m1 ]2ob\>L]rsgnFoӁAE2' #6urMdNhk|eSܳ'@買|tB<3م)3O\qy&E'yhO;ۛѝS/]7bCtm9yy斘] VYќ}v~oE@z" r6ެy\q٧7Df L5eڤ˱P\'޳ r]i]]OYψϲǨ t%)*Nď$ş ]ʚк~~;qYV}|YCxҿ1_<q#R3k>MVϘ~ 䋣 "_87{OĝI) 3~HĒ ,gxdJ   �zM#FZgI_{|8gC|?C?z-5oIߨseo9b/Us[~܄%BcI'^pn-i]F$ wB ]w#Y(9ťN,YCrjIJJ͞4Y{fSe8\V]Bg"tĪM8;0bj\[WARDLs_%tZDmm! {A,e 6޳@ç{tX_{w˽)!6[ Onֺt?9gyHE*> #LUy$<ҥX[uzC7g9-o%!fySs6˪;{#68 c!dIl~q5kҲ 4k&q׮]ֵq} } .tFH#Fײ[y{CiwBaƞĂŬ?iW�ܡ>"6ysTtXSJtgڴn0U.UzPBWlSl-q'h"l_`] ]Oy{vKnt gpp&Oe5 쟿/xT1RqW]v%}K_Lm6 � � KB#r.EuXu͖Mm4)5$h<z*toI)9oXu[V`"r~% 9xZk^YaW"Sk暈ʄy#t\5Ăˤۖ[0 M<~i~,6a"aJ&unBmy0-ZWl2c{@jQ,a8HgNް_.t\ouU ,Eo݋?h\{qj)o- w*e.Go.bћ;`_כ|\ٿG'1ٴ\&rO-tm\s`QkkWD !taXpYҞp5>7}N=͘kXPsb~kj uNrO cauO1fBl˘RB]vD]ƴ~LqDhȏ2“JfѴE't?'B!}-F9"44S7uJ9z#6E:|X�U7>a"J'Cf/庫x:{1qk׿�kBeIޞdNq;'VNr}*vv;)A,\ӑGիVYk"xJ~~BX;)1_p,{O4l{ӧϰzk4⊫݃d3Fؐ& nƌhyH:ǣ¬u2" e[qy=tsF$‚4|K1{J%FL׫X69JIv믿GW+RGeU"lx {#(bOb #Dc"   !L~=axz.F4)lN fsG3=jN]4UVnG8䀮9ݰ84{D]ʩ7!oy&~?Wܸz :ҁWD6l2[߄o.TS@I[O|u?h`x5bdaqi=W\zt>Oګ#3u9s_$KsH))>мr>qC[b+'έtݱ;]Bq9(KdȘC;:K=lFltq(ZkSrڍr!mX]*!e~&/L]qTTxCxmV2 ]47>U׌lak[6 N-s1s>oqlZV]F6(τAcf%uY W%ZG)S:(vXUy C*Yp=oך1j7eد,sCqNG Qçoc;eޗi+8&P\f(¹0oȕ7Ӿ|Z:̽|GdˑZUܶkAUGw}/Nʋ۷kb:ږ, #W}l,f,\{|rRr\dO]/] u9<69g#}!O SNu-|N>H`imE z-Ոr59R'dxs\{ё~!<45 qNrxw݃)~ӡ6=硾܁Ux=sC[o/8ϓ'6m\Gzi >ӏ멞nR, s})<\E(]4vG'|rXp; ŬrQByȞ=;T\]rr+VQOhUXI+W,C̙zkPL%K@)rѮ][^ :x>VPˆ.WXR:^CkpVxsN*N Kk'O̙3\Z+W{ Ç֭[íYz oۺ٩m̘qPuT=#ЪUKq-}.$YGgOu^RK/oKV'/EoIܺu +WN=FYJj5/S4]|Y % p䞭V*R$O]z7W^`E?jU+rXJ=V8zyOI֔׭d|uWW{J8GӤMkΊxbVyӦTo^v%TR]׭^7)qu!(ޠA} (aR}HTtk:=٭nOJ0ƯENwX;7|%6Q>?~_%X3?M7q:-+j=^ >__Z>N*>y܎L2Yc$c>$8=%y](z ŋcn/zɓ{]p;k@,ito6b!8>S%?0 ?^ \HHH  ]#~?~uWo[${6D5i'jF$#b׎۰z qҖ@&V�2ӝw9ؿ VXV49|;6UnG ;yEZ@B*N[B0w"ˋ+YkܾǙȇ1)f@Gaհ޺߳/ u֘~. Gsg`I|SyIyT\(<Wx pRvw[1˽ZxJxmklĊśj-w#׼~lpAԩMG]SQ>8!ʻb{y/"'fϾ\"b̧|:$7>2DDH2& $I_\ y; I扪'7bma}4kOsBׯJ\X, -_8.O6Y!_ wۛO* m:|"J o9z%[*,UC'6ݓ:zh7ui4nW׉8;-NEv>t{Sݬ.Ir~j AW@LJ'3A <xf#}(.1yym!Dl6/z+WnGº"Ujgq֌ՖG=BWG(<D<-Es);%*Tk׬LjҸodq<rix!we-Q/Էѡcg@`kFyᦩ>}9*W똱?PoE֬e gρ?ӽ{IV'>*Tbcz`ޜ]0UըQCL0NGi#GdO ]Ҿq&%d~Lo˖-= C'6I!ba[!Csk@^ $NiڶA/8>nܸ>kݡCТEs6S!b}B>Ww05wlTR䖏˽g.~S{PJN -;uP"+zck+~Iy{ł~ILʺϣ%sU czpZ,>wqա};-e̘ѩ^0Lz7uѳ}=;-`1 |C6bz2b{/`(wNCEXUW.L2M9S'AY\:us޽b}\'_ƉX,&':ws&~;:pQ=x砼~MܾsG g{.~)gPm`;}',� � � <(t=5$UȁKPBnLCkR!CLZB~'CpudȐ/#2*aL,Ia!aj!pX032t֞7s܏>aq?e˃ޏ%=g��@�IDATC'\7EYj)Md""D@t*R'>sc(hea *)E(nnMy`:mu*@&'-/6V Ϟck"ya-2foP7zl_}@p^F@<i~)% ]BvyW/7qM "/>bJRq"xhV㮳6Eg+;vhC'Nܹʚ/j$(x#bIsQܹ{9s@|ysjrOVR._Pޔq$IDZJQnpq\tQ[ΕyQ_jφ{w/o^5冨z%Bxm%STsUry R[%z|1 3#vl^Oq=_jڿ~݉5خ'_׻dؼohԩ֭h=:=yN>9s/ De<α~PqD%xNI!/0yDu$@$@$@  ]˕y� � "p^~]{:6XLQoIҴvZQwf @#*t%I ؓ6iZaNGh"-s湑� � � (tyKHHH4qiyOY>ѳΤ=.RG*7boOz~aÆڿ&Ln$^֟K:!yPI'@롿<L@%+Ų;7FwM_NaCy$\ɔ&    H"Y0G$@$@$&<T,cyՉX-E13A(Y2C$(PJx�-s;婐� � � � Ė�c  x H,ub_? SdLh2/JӉ%~|'ʔ):uj"Q` @R%pA̙;3fĀ'I 8z(6n܄}AqdH%JGÆ T/DOnHHHH!@UIHHHHHHHHHHHIBW<r8 � � � � � � � � � � � CBÝ� � � � � � � � � � � � ē@WDs'            NBGIHHHHHHHHHHH�9HHHHHHHHHHHH8 ]9$           H"            x(t=p\HHHHHHHHHHHH !PJ 0ey 09Ž[N'$sgE"~'NN<|R8ձ@$@$@$@$@$@$@$@$@$@$@(toZQ;kSpRnjřMq]d-fL2 g6po5QfNu,� � � � � � � � � � + ]D]&*/ixdqރҠ _ kSfJ*BK=s||]9p >[x\Nqn;w wFk0 ]HHHHHHHHHH"@BfB$)Yw[>^­J';ș~Fˠz͋ p`nxZϜXZŕ~Wދl10h)'Q{� � � � � � � � � � (m*tɶĪyV޺B{]=z3*ԛh/`Е`(9 � � � � � � � � � } @>@˔.3OB[w]+Qf 18v#wT(ReJ3j$ĶK{#u=�쟺 E8͙z~HR׉{K76Wd-é)컀!MtV>v:֢+P.QuisGrH<5ﭐZD)2urwc譚ϹF=٭'pD(|R m U-3ɵr𒮻p[,zʩ_ak'Czf'l=g - bkuu;sjdS RfH4(Ь:ճ@$@$@$@$@$@$@$@$@$@$ PJ$/:K_뮈x Aq@=!ٓo[g,i;)Sj'7*j5s6,oEml-v|d;^F2HIWBUެkqZo.5i<ѯ6gzv9"f{J>U Y|1]'ERG]+Gmu;QVQ[irU7-PĪ`,4] @BY܆KѨ9Ǜ]Ņntrgdjd (t%Sz3C$@$@$@$@$@$@$@$@$@$TPJ$W*&l3]7^Sn]ǵ2U�=c0sUJ^+SZ'px>m#kk(J?[tG^,1)483-}Z 6wăzr[d.ͩVa"n^�7\Ůᛵ! ڪ}&ING&"J!EZUiK裷u]/aD6t򒓕kw?Xc䮥,ҧRUw[5?ytDžqra]|IRQcd7.bRĽL/?BY]E[u:1׺ȶ(ջS)x+tݎ oo\Eڔ½[wNUݔ6CȔ8c$W<_%,3jIHHHHHHHHH ]%%ɵNk</Le^9*l_ru6ܼpCAQ}3"YV*،'ƺE1hlDD*y#tPgizPtW\¬tɄ(޹· ρi84gpY)JwVXdb{\s6Iv n =gJ*{:uqƙX8S)E~W3;݀A|c+NSssgNTS{Yt(kG]6-`[V:vO.dI"S(~<� � � � � � � � � � $>5IuWqpz�ݦ-k̩i ߞu䩓j(h jZmdb#tU}iuH?ǴG b.e\+TO6*ٽra]bv߇w8s{ekâJ^'׵Aq(’k+cV<=b~I*nzzvõ:.'Ӿo.q({}>)}SX{I{;IA\Z O~SrW HmV� � � � � � � � � � $ e�uW88{>#qeWo5eT+lNT%ǕS:<u/.~/nDzvH.jW]L\.գ΁.hor_ <C*ٞq-K#ڠӕzSdfzbϛLQL=GUn-#S1Z0FSvzM�~3X]7B׆7"pڊH).%e _7\C_ŵ僗tkx2E          D@BW"OB7V\/xrP[:Xq緪<\?ci�gU%sl~oFctGD:ߴj)]oDfShƵsp1̵cY8uTJ̪vc/[LJu2?k_^-z{5JW_5/.trc)v5OK\pvIzcB7aˇt*q3;F2/]z,v50J2+84{rgÊaG#JV� � � � � � � � � @$@+\W[+..)w{_Z).uXDg)8~*XqΤ ]b!5=ێ<MrL+pyisQ%1&+"\9J牮ryhN MscYFs*7JW+mN돚 5iI~i9R)ikss!VqZLWqfxhb-[LoeOıeQg4îs6.ُu8[ ˽XźCTL_IHHHHHHHHH ]:X]}%XrB=ߩH$[Yh%IforʋXtfq|f-r% -h: 綞D! [R켱><],9uҞsQcTT4nubt8b7b+ĭRJX41ID=VSkJ^,Շk^0BzmgM^\%e2n %Oz~(7]ooUWe䮩~I8aHHHHHHHHHH qЕ8bo]CM ?6FTltC$ޑbWmx/R1:~S:zODSjqumu0>_ ukڬ \E>y E.++V .i+Ԣ<[OJw~8WDDD u4sXn-S7k2Ǽ9Q`hѲ}Y+봠m卛Gk3cQɺIR0sln lNݱSokʭkEhpfVEWKˊv(;vu+-:g`r(Ǟ^4§YPe*sS# � � � � � � � � � @#@+\C@g:WV^tlgOWnۿG7rZ[w.5}P/Mj3b$$Cq<Ur{9)7N!MtNu &ƗdM&tDEܺRbKURa@M_c"1ObOY%~alPI޽{U3]Xqc1{ǟ+wxkFj!LTI^LCWW%ƷADJ9"mJ-�7w kTRs0b#G{#ۢDnҽ[0QX˛њF\C㎕{-b[zW=53$@$@$@$@$@$@$@$@$@$@�D}y\Sk%Iߋ~([ܸ}N uKbie**3wo^)3BMRH7u/ֱ  Ƙ bzIgYOD2JĨ65^ۉ;I"TgʁVܭPFepJrxRt>)ܭIm%t%\e}ѹ4X3 h+Ykѹ9V>;OY VrɒuPs9ޞ947UnϽz[Z&',zn2+SgKG.nvtq5*kfHHHHHHHHHH< ]I޸5 >o"/գW{ĭ80ce;o规\t-莂͊;GW{~BAHRګ=6 Zj [Mı"KLߨ gLC~> 9sF^a訦®D I=s8F:lh5;]ߨcEv-W1:WlBdTV1jXi&"k{bE%zrye3:Kr?W � � � � � � � � � KB{mc}fwµE ׵S>_&.֓y1M*mmsҒʋݺxzsL+=mP"X/Vs{nwWp5ܻ}O1Ȁ ;M}s[ObAIS׭/!oģUD+/ᖲחr^ǒJ$@$@$@$@$@$@$@$@$@$HPJ$QۆYmeTNG AWDF1mBzc5Aw^^<u ҧ\HHHHHHHHHH!@Љ4O=PG)hz*5˓!l1qCYdݻuW~Ya/>Aqx>#5wj'          (tyE`JbE$ *y?#wkʯFXefHHHHHHHHHHH PJh/ZoԱ2Ɋ|^٢ƤC x^\qEIg) � � � � � � � � � @$@+I^6nHHHHHHHHHHHHB            $IBWl4 � � � � � � � � � � � �.$@$@$@$@$@$@$@$@$@$@$@$@I�$yٸi            d* � � � � � � � � � � � � $5~IHHHHHHHHHHH4 ]HHHHHHHHHHHH$ ]Iq$@$@$@$@$@$@$@$@$@$@$@$@x� � � � � � � � � � � � $IeIHHHHHHHHHHH(t            H(t%M� � � � � � � � � � � � P=@$@$@$@$@$@$@$@$@$@$@$@$$ PJ&           o~:oi,� � � � � � � � � � � @B|/\ jn^eP N놅?Gqvd*D"Ypvi Y2䭑|!M]u"ENs@$@$@$@$@$@$@$@$@$@$@$@�E:uĪKMƍ/"<BXw`]H1 j}ZMEPN2 ?ouoY Sg=Gk³tq,� � � � � � � � � � � &@~bظ053״c6X)X zN\yxUH!v#tŤcpu`Bbuv*RZ̐� � � � � � � � � � � "@~ވ]ފ\"pde0Pwv|U] 귏܂,%鼸2_qee.i #+?gYY1U � � � � � � � � � � � $4 ] M40&WO^e%Nv|;OZDv8pVAq7 [5uvIbvkNm=e5S1(׆E*e!D$@$@$@$@$@$@$@$@$@$@$@ IBWBLZ\w7;#} lxoۣsU]yӚNuQ ]k]m QR%$@$@$@$@$@$@$@$@$@$@$@$_K0{ra%۰ ]YeE~UQgd*9]޻u_L?u{4&Tl;S<,̐� � � � � � � � � � � $  ] 3p1/\bMBś#ECg*÷ciLҪי`:iVWZ֩Կ'[q.*ک:N_[j(ѮGN @$@$@$@$@$@$@$@$@$@$@$@$@+TwpۃPU{PM?~'p.q**+݂HL)5R TMiު?h^2Kم7m'.9`I+=*XMxV           Hhh'. c1,$ {g큟unYk\sKl\Ll+G.c\QV .i+Ѧ$zXI#UL$@$@$@$@$@$@$@$@$@$@$@$p_ P躯x䧷.e7zReL7C J\5|Ibm¢0BŽ0jk*fM � � � � � � � � � � � $  ] 3Lum]*fI/)&2Ȅ].)׈'PDIA-ÌG           KB׃xWSq T\絵Vܯ*~=^{pH:y=HHHHHHHHHHH"@둺ޝݰH&|x!h1E _}˻ ؋HHHHHHHHHHH� ]�rRX"^%Oե/,α~(Ѧ$.            P'u?9wQgd+a@lrC:ٮ           G�G}34o&25nds$@$@$@$@$@$@$@$@$@$@$@$PJ!1l!%YukH15Ɂb-K g\a � � � � � � � � � � � 8儃            BBWRR' � � � � � � � � � � �  ]N8X            H*(t%+}� � � � � � � � � � � � 8儃            BBWRR' � � � � � � � � � � �  ]N8X            H*(t%+}� � � � � � � � � � � � 8儃            BBWRR' � � � � � � � � � � �  ]N8X            H*(t%+}Wn2%qg � � � � � � � � � � @ @+q\?$p5LhmOonk凰}z~u `ϔ]:B@PAĝzwiS'ʑȵ`"         LBg.}5ל539G R͟LМe>zh:/m:?H*""xF/+p ~\?t_})}ZN_]m#躷S ?}ư@$@$@$@$@$@$@$@$@$@$IBW$ H@!n_ ]S @AmQZDunp{:-ڽQIHHHHHHHHH FbDt; ڏ/!N'б}tl6Nc ]@bЕ_a? � � � � � � � � � $ ] 2Q4b_舻+rݼpS 3T(3 PddɐF>$I4&>+qfF\8N#Sb(P)r^ ]w޹}Lf\=sDϙxel*Fƅ~8g'y dY*7DNQ~$w&ȏ\%!&*nV(y_ׅA{ `e ӠL̨Xv$O~MwQxzʛiǏ\7=gj/Q]v;\p[5:Ȫ-IWiPZkRA4QVvo_eUjdCz9%昸DܶvXjVM12]%3NPz=7qfl̯2!OE9z R3+$@$@$@$@$@$@$@$@$@$\{.oӤqjPXw`]H1 j}ZMEPN2 ?ouoY8ǵd,6 {wݦ(R#Z|4ǭTx#tݹyuΣ03XY/4zsGjg=ph U(۾?:ҵ{zu>R|%crXUs'_ ݅_sCy0|cȑvj ;aT3K8wХw=VBТr~ :u Omo$ӠYU8bcI[(fdjWK'Ld'D>E cڏ_ߡlDU<7%Bα~X"d͎*+1"Lg � � � � � � � � � <j(t=W<6. cku5-l !!͂u t;[ܾz[ `ޮRa8?<oI(k/e{ztx'!KGvЪa=ֺo[W/aRH* iE!E8, 4C01k7RT!ULtxDMw} r?_vE1O1:Cg)+=5f[qb1]&[j\OV=B7atװwwaİɂ '_ǘ—XR-t ]φazX\}֔zfD' 6e.S!VpuKk!?&ίgIv 88rÜ-1 YM_m}ߺ.Rsn+ƹ]gQMIt]ۡ1ʲˣr(ԨHZDy$         LBWb: 7o.oE{82J;;ڥXqU~*UXGnWK_A֒t^\8ʲJƥ3ڣW}>[(i?j:*ud܎]woઙ(Ѥ:ey,$Y,܁p~Vd+Z]:ۙnRǭ>ߔϴçA Y#ەsQdًU>5{X2wv-T5_7 x 2RYnNM_ Gk&F]zM>-hHp1}z͞V-p.nVSM 8h^;.RZ,+*X {UD| '!         DLBW"8 \ɫ=~l)٣oRlekUS;3)&Է Zk/UV4l=ּB6 ['5ҫ8VM]y~6}1ݥۄR} Tܰ [ bG>sl?-tYpI[E|Jt]iRSirOXpeJ zT_?_]s4F톹Sm"u|!_TīC) ] LKZW. nAKw.JJt.ڬ8yfy         H(t%G%vyce21mZ<h==*=Wũѕ1d]Ba %r5q`t\;s 7.ywֱ5 k˹FFݑrCd-\V :2ԞXPs@6#Q*Rtg#܋a*>WYҿۺcWC]霅OmƼiG$tbeyl(!:7S@923$@$@$@$@$@$@$@$@$@$]Ǔ CoD..tJ*.PP(WwNnrQoiL6F%5u\8c9-MPyui&)t9]}lJjbvK�K?Ӑ*}f|~ʴ-L9n&h(kUT93:A:ux�!/oQѤU^Lۊ#ڋ/Bb#t/.On{GpRCZ;+2.[$@$@$@$@$@$@$@$@$@ ]t/\ X]crYh:޼x}\T+hPX)ӧu&vuj?IVkKkkpv&<GEc(x#t-gm i(xɒAĬm\.-ػx,Nl_2T>h3N `ܱRy^z8jgeRgNF_6Kmbnܘ[? Y|E't}N>]z+:Y|ma}LLBqaige_=5�~Bbw$DUh=ijy$         �zuFƅᐷt)g+'PM?~UzE%z[Ps<aSjƚ| Oً]f)BZËطd2)Sڷu]uG<3}*u{}R.~ᢱWˑNvb՗�$O}FЌ~$64NU]!{J:o3:ʘ o91?GvYl߆GB1q~=S⟿*7JYcj]K6CQ[-_xvX{2gMVlI<JI|6n{7R:?4CfkW5/tPn@1qN ]&,U@&kS# � � � � � � � � � <(t=ԗ7ӱ}ۨ;yqV*F_ FxיwCrB]`ݏ̚1g{PAg4Cp3Ej{}>Eէujk=oF蒎Ƿ,ßc݉lE+|tc^ ݏƥjLvdVe,2v!i͞V-d) Gp\]|+7cΔ3$>\D%tI?#6M_ *ɾQkCwe(a.}DJ2?vvRTPU/.G%tub%HRW{1=Yjb{,<gp         Hz(t%khw|ZۥЙm0XC'U*rmgOB]wo' ,v%ۿHyk.?ݪsͬ{jL.S 6qR͠9nŚU,&zd>up;|fYk>{ψ@:'gm4qWCj"ϭ{Eym`+,)}|ndȘs4AY9⨗A ]--G_Zu*OR"Ot.t͈k Woįqv@\VPꭄ Q7FϨAnĪ+!Q&i}$2frqq1W뇥/,ByQEţ+ӵ$ � � � � � � � � � <(t=W>wY˭yHgK%/`j7,+Hi`$,-.i7"]T2*"2JJsn{'[.7]ݜsn{ g\yyW%4{vo`kv)) +tώ)|6ԉJ0 l]o> UwIP:un_S#W?if ҲƫG lyteC 'JdU9lX%7[o- d- i/s/m33r -{ذh^:\\Az}ݸ=luI%NeXеb-yro%:3sz,<ƒ.[fw:t[7j_Ii:dާTlPeY_m)aguIW Yʂ{*576+}̅g]h� � � � �t;;:f_*tロ4zXmy /Kbl҉~٣:^{ĭXf/Ө"ʣ/Od(ʜ2Sw/jgKڷyEڞؽxc6gt7jRsu*'6LM#l<ˆtч &-5A^ztzs=3gLaYͲ^&93A:o w }^7 Wig(wmK.-[;FBudAW\vr:{Wo=֙ _6{dkf1:jg~}^۬xgu`9 � � � � �ܹѫ M Mf&S˾E=9Wgp]>Vf51D Wf9& ;Ө޾JLN=RF_Xue&:m?gf 6&[w^fYcmR(zT`(WYIgfJHJfgna=.>%/Ã.< pI2^թozp � � � � �/=:h53zCizN7A7 � � � � �WKjr/o٦=RYЁ[nOs}@]m? � � � � о4tp{AkdMXܺRF"B]@�@�@�@�@�$@Ձ>VG?E*WJSGj e_{\K24@�L)��sIDAT@�@�@�@�7]n� � � � � � �A矀 � � � � � � rF@�@�@�@�@�@�< �@�@�@�@�@�@�A5 � � � � � �x.@'`� � � � � � �nܨ@�@�@�@�@�@s.?@�@�@�@�@�@�p#@F> � � � � � � VvƌYYM����IENDB`���������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/accessibility-div-example.png��������������0000664�0000000�0000000�00000356532�14332737457�0031141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����B��� r�� iCCPICC Profile��HTY}$ХޑN�)E%$c *vD"ʀ(8:2ĂA@2(`~t{;ww}Bg Y"�(*ЇD?`Yl P޿w4ߴ)sb6�P2ʩ1;t" �H7\"N0*"@oMpMp�vE Xt�ڨNGl+(O8(A*;{E t Sə]TY~+]S}M/fߖ%]d(( 1f. 5,|IIb-Mf/Dv6+,tLY 3fbi-ݕ&eL3K4s43VqiDžM83:d&WIds>3z/);+zg0frdq~31xGv0+B 9Ѳ9s6B6 Vp4`'.LHLOIh uqiLƊfoko[DNAH}'Ag&:g|I4yf|f�ɂ-q$�T& X{ ܁7 ĀD�dXV�`'(`8ept�Aw` <D&C=D<!((@Rh*2 ~NA硫Ptꇆ'ɰ a:̀Cx>/s|x3\ WG<|(9D G:⋄#IH"BV!H R!HrC^ 18 CXc1AX  S9i\cF0_6eb%l �$;}p8\.[ۄۃǵpQ<{,_ߍ???z{B�! J g ݄1"јF 'rˈ[AIdJ Ő2HkI:%R/鍜\_n\1+rrd /9,%o&$P(7%"lP.PQ>Sm /  % 'n(P$*(*W)+R8DUS WVڤtXҐ2^D_O�R}l:~% NTRrTCeDUYQ5Nuj>5DDEmO: uF:n45=4i45ja,"hպb,YYϺ k[hGi/ާݮ=#٭sA煮nݳzT=O=szh4-VJHҗWw<4$ w5ZaTktߘhL72n3~objodTÔikZkkF12[lVmvgN74ci[8Y,-nX–Ζ|=]VX+W+Uk5:ǺֺF&&ϦlIn6v;e`<flr[�M-{:Q:mpju,rsv1rIqpCWG7ѯb]}\Wv&q;{a9ss0`yTyy<S<byU{=6x~0gd00^|Nu]u+? 0H  t \ td3k#.+/CCBZBsnf&k #L#G,|e"-0p-1bbq qq5qf'LOlJ'%H?odM/uւg*,d-<MO9Ϊf2S+RGؾ]o0׃[}V6=}+22*3ggϊϪ&dd( 2.ZKh),-v[s(Dt@ 狛$*(jIKs<ss>,[rbRe6.{rr+֮_XY ZuՃkZKZ<ۼ⼷5X@@Tpg0?qƯkEE%E77]7meVVۼ*V*->w{ڎow.yıritW_ihin[w.WhWlx{޺JʢO?[XPmR]/gߓq~\s@@с/EXRSsXZVZ;|$HQMuuUjE1grxuZqzjX0kkJl:|ٽo6<-gIgώ=7"lyq>@.ܺyRȥ+._hcqUѯ5^w~wOv8w4p5lW~7/b޺u;;wr˺~kz<~T}}gG?~0xσO(OJ=:=0l޳c/ R_}$adMo4|u4bѻwc ?h~8ScK>?~15kx%bMJ]pZ�Z8�j'�ySZzҠ)?I?ޞ4g�PO d=�e�֡y�@v+d&NsEFuTeX}h�4٢yS*clJ`: л8g���eXIfMM�*������������������J�������R(�������i�������Z������������������������������������B����ASCII���Screenshot4b��� pHYs��%��%IR$��iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"> <exif:UserComment>Screenshot</exif:UserComment> <exif:PixelXDimension>1722</exif:PixelXDimension> <exif:PixelYDimension>322</exif:PixelYDimension> <tiff:ResolutionUnit>2</tiff:ResolutionUnit> <tiff:XResolution>144/1</tiff:XResolution> <tiff:YResolution>144/1</tiff:YResolution> <tiff:Orientation>1</tiff:Orientation> </rdf:Description> </rdf:RDF> </x:xmpmeta> 4��@�IDATx]|E@ z =z "(""vSQ;Ez%$H! $7ZB{/k"&F`F`F`F`F`F`F:AӲr7F`F`F`F`F`F`eF`F`F`F`F`F`u)'#0�#0�#0�#0�#0�#0 貁�#0�#0�#0�#0�#0�#0 ^`F`F`F`F`F`FftF`F`F`F`F`F`ft]/w0�#0�#0�#0�#0�#0�#`�3l�#0�#0�#0�#0�#0�#0�3;dF`F`F`F`F`FA]6pp`F`F`F`F`F`FzAz(BJeκd RA"6q`F`F`F`F`F`FS)rn;w,,칗hkX9qGoG_ak9a×OQؿlX<")=0o/t6 UnSmܴTyَzB]_TL:}KڻvGܥݨ[ZyO|0�#0�#0�#0�#0u�3ve_ζ}znr|(3%$*]Dv6=).?s}tǽL>DIITVK2g.h|;`r%_sl#-5Kf{'Oz4`F`F`F`F`ft]TTy% Zk]j>);Zx r.F [STta'8`F`F`F`F`FfA`tG|=c@cmͫB]׍cb[f/>My^F`F`F`F`F`| jؠ`V ].2/Pңf6^LH1NPSR+FךTP<�8]LJFWm8[yV&]:"Nm?)M)Ck$2>b%Cg'bTV's˝ܓe`0zRJ9DgdZTnKԸ p|Y)9:BIL(FCѾ? (clrNlԄh*(Cj8t4<UOQimc"5jVJO^e bBes[U߸ioN=zU(JRN婐g05%n?C +RVڿ,mX/o٦,uU G89:#LmPKHV]og^zۆUm;xI !px ŝϯ54mHg9߳,e_5ܰ tՕM7$nQծsyj]i@#X mP`F`F`F`F`F /!]�ZY8yuE׊^wMf"%0y6MCkĥtda2D=&C`iۨfZt3S2if2߇ѕKAC7۵vtB6viD-$"ЀQ]F3/ڥ!b߉v̮K4oL3J?aZߤVAiy16Y'S!wBi~Tn73#>|}?Mũ*?(x8k D}BiL|МM}�-#FEGoqзS#<L+J~~M4J-x4쾚hn] Ro3sIMqiۄ B`qWN2�#0�#0�#0�#0�#P;`k.uR%ck$|i)Lͤ 42ɿ?y=,\|6Ve3=6)UjUE %%Cdck(E0JjYdŠN7Ƅ#VTa{H9K1;әȽ丿 ө|Lԥ锞/Y#fQ`PLyX2]P!tL,Eo[*vrM~vjV;rNN6rKbROʉT0c˱f2_E QEuU~w?TNFӺq( (GO܈8&QK #71u(}9?N|.dcH)5Td`5`g2hєq1ۘ&t<2U2գy~(<ؕiQ?wIGT ,S|Izr*R� Qî&5ZfHPtcĄ{hL7%h#ƬZXע%w?ߐGZSC| Z|0�#0�#0�#0�#0�#8evv0|gr+\ZH.:8?L36[>܊jAB*k~#\@P[Ќ(->M5Uc-hENmhI4x( plMfrhLۧ-[K=!^ T yxV}rDarM ͇=M3X|M'| ("SZZߗiE d_}?,u7E+ gO 3}s-I^5FeIʗah+L}<fQȤ?oE#FצZ%imwY5&׬]@`<p1mf̋w3TE3oEwiPM`YMyw%g:󟮢o´adcet ^̜҄4Jٷ:bzVhGTv'Iο׉n:NiԸ`=h&#uܽOC2յ۝uf¯zr\jpg#*&2�#0�#0�#0�#0�#]60sf07)t罴6&n@G:Q P EY!-ƄhL.dO&o+IDsك-i(t^FWt:xdSO+sp22rr}]O"lh ,Ku\VNVMB ekOCWoߧ,+bDYf42r Cz%e47(b .PP}~AnB\% [SFӯ7ar|is ?=1X/H^_fQ-.D?{kJFшC%BUJЀV+L(>&A+s9`pތ-K',E1b 槯zF`F`F`F`F`n8Fn2cvbp ˥U~9 F l4#=lѰɢEO2ӧ{hx:$%9Ke*cӉ5rZΜ !$@*)5!ΛJGP-IeXF"\A;*V]<p+50Uoݗ*6 H`rz']3v.%Zn*ͺP@%{?Qƾ8 DŊ["_s2;4/UEc1};Z`ZdP.Tx +÷PIƢ,q)VF*Ip~E7$RtT%ɐuϒG0% ܣFrnsj_:o~-_l}3/I\)#0�#0�#0�#0�#07; 3],CMY>4a&ZB,.v=д"UèK]dMaX6՜ Yy %XPdZVRu˫p9ÞiGc$S__~ k?};^Hku+w`%Pxhu|t U#{WHh# V h'.eZfeg~ܗNf VP""ϬKWT>xv_mgvRS,.-''"-2l5P)ENf cYYu'2�#0�#0�#0�#0�#xuw*͂0_.:B ~v m3КW_>u- |JWe*;f $+d E:&h|o)urFvxU^uys*_5*\T6'(T*L,FXBZhQ!F͋ePZ͍kk}Cv~ZTp\Z\*mV$4,}c;K=,eoim;[%f�zVԾk*o~6<M{qV4 mڔ+ ?& s0_oG- QQ|dF`F`F`F`F17, 8qX9CWxrvio)2#Ws&_:e()2RcH`D2(a<Xw\6~Tn㽟(TXCXv@OVE6-i*\LdrLLrń!RSKd&m)Y_`Ҁ޶M&5.^#ŤMY'J;Q@&W|ƛKgdWtVlM17΀%nTˢ9y=SVtτ'J{ݩis"N2 (|vSF`F`F`F`F`!pC3#4&/J.J`|ʪ7 ]GVi &@ꥨfZt\hF?; "TĿ4e=Hsv;E (2)-.\%0ɚ y.R̮.]`hߟ(SapP%Ms;޹FnY|ޢMcV=|CR|ސMSS ] oo y MmoJ'fҵx>aF`F`F`F`F[򶝫Vńm^_L1Z2FoKm#L> -БVV1NО黴|<i*6A0wrIyhDyտc?UL[{Qj?/ɣ>njuf7OғNڱLX,Xy<-{s4EENN_'%JL.DVj& uJ8&gGVΑqZpEh`1yq]kTަ<EPyzt1֧шڴ:>?cFtņ m]`ߛ{j`Mt@ Ze<<QnOc.otc&xr1F`F`F`F`F`<Eg媴J܇2D:Z Cͥ]kPBƕv}f[}gai/n2pBƷ&6 =WULpY-싓 S?PBv;# [ lDY0)Tn#6_G2"XW(d+]IT:`F픦rY'+b Y\aJ?!ST9 MkRy:WpR^Izmr z煽4ԢmY*(X`rEJ`60?hB4Ѻ4뛣㗇ihؽI*_e֗o#絤x3S%L%|Mjش4UTx}Azr8XxjӶ ,S<=ۊz|؛J .0�#0�#0�#0�#0�#EJzѤ~^> al)%6}5ՒU(zl|@ӬFtAltK代p4Mɴc`z)ب=e(Rqc~e+KYiu%s ۧo ̳C|7rV&=*gȖ ̭ [lB_ 9Vx _uf;MT"`γ"?? F0YآuzqN@ZȢ2%AԤemHg S1Kߔu ͝)Z`vMC:a.Sd#S ?ER)ns*^&ywuh<ѽ%8;#0�#0�#0�#0�#0@^ Pf3#"%%P VW[0#VVQ j@T]x.0?y+VYEFIkta1 /A%!$3\DžqT ae90׮w:IҥKR˩0X{v.Y'"ӨHт@h`e23)"WVIiR ët,#0�#0�#0�#0�#08}b]>bF`F`F`F`F`F{xr �#0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#07~7E52�#0�#0 LX?&F`F`Fv}.t@TЯMd}r#p=3뵇�毽{=�U>@kFR zP:@c#m*,XTAգBE٤]cˎdWo5u.׿BgD<.&J/gd OڗՊҳшڹ e\L[&-P;6%RmPV/a~d:mߘHǏQʹKT?5nH-ەˋSz4 ~~cMNQihͺԦC9H /F~EYx 񣩴oY9qdR*ŨNp�ҷ2.}ڲ..ef{۾kfqT@yvH^S~'̌l ۛLWUJ8}}۲6"֭_:$=_&fu7*E%KvZ p1]LL% SƥLb8/JRԢuΗ3Нw>v^΋R6YG#>LE%˱c@=ԌΟ<bs^/ϲOE͉{ǃכ] v3kBOjvy}h-YO&=G.@ŷsT)Or[Ts>wT:"CO̧<1Z<O?N?.vôCJj^wӾSP>4%^Ny6 8CT;~&ťҬ?v:xd*MȐkmˊyvO=|ϼub]&U+Ơ][R4j^m^O<ê5Cd+֔ocA<O{x}Kf҆'=[W|fӅOy&N9-$pp|MxJU ?GhYo^HK^LC r? I~.]ʦE˫ZC>] 3n[|s\`FYy2Ӯ{tdsuzt*+]ak-!3%"d2S3]O&7`] o7_kli&cm$uhT>lO4>U_KO9߽ٮ_*CUiʷm떟'تO^aN$[O&7ʍ}as&U=Ͳ8m ̚OlG]{W2MG.'c (G'SԑTT˜I S+^HK>bgib7_=}) j:مԦ/,};o˻;}<W._BOv J0sn-ύ{ӓ/7Ң<yQ)4o~яwFl00Tgkl>ZœTpm<iBVs1}9KN*^K'gw15}Ȱ`όtxMB`.{G*ޓq_ӤgwFO|]ݝOUb'ߴq#6M۟1Oԓ<{ՏMу7hߩߵֱ|ʓkBul.0ٗ.kk0edh.j<!pnpNWkӔxd54~c#h%*Z}ZǦq^C(Ң?bj %ɸ|OѝkROJS<qnM&;dڝ?+|φ^Զu}B;{<{ڮTv\5Ui`JOI._ʐ1O'U`OVOyy~bOZO h{yEPPr_:?ƕ1W RUPU(bf (5^>OwNvÛHڼ&^cra; -dZ<&cP+R&<7b &0$_AnT4+\&>cP76[qB¦E'a{}OaѤh4дʠeO"[02@s d0B RUirCiD5` nh/' `<4=|ZBC"-;Fb>wF$ 4El)Ty0}B nzXxIpMAI4PsZ>*3eF]Hˢ7(4%!OƕKNOw-ם{iu< Z&oޕa\l|/gf"'xk׳Xw/{_H:Mqiz6WC)jZOn,IFVV&Z:ZJ�{TqiQ߫cQa6Ų)Oq֦S9Gb_И`żI'sUVK?d>5oϽGZ]ܳOU[t_Oj8v8^}bYjYGR'㞷=WxrM(5&8m##$% w'8;ÃKk2dJńs|I2̱=OGD`Vm[p/|S(lwUp d}r#p ޚK['}U6ëfѲft!Ў8DLQ; ;4'z@ y_ki y]tht&r/Eo[B5;W%$.ї $);RVY-ؽ:&9|غԳ0[4ToZf-9f9>l`0/Z/%00 _w, V]%kf" x~tbC~MDXРoӄȸg 3e7py-*#%'Јeٚ1ڳ, h\QAlv_O,ƚ1LGFI?h2=^|\`פv4{䫍! ^&wLDIaGR+xJgYS[nÓqeE:z`&::{oyq4hU~48z]Kh]Z4>ggA\GqfR[Ts: eЪrru>zmszMNBw  ȓ*332OS\y}m\kc*oj)L)&WU06ɸ|i \|~iبZ4!ˤ1]u]X'}xӣAR 3/41m[#0!`%tj cSXf-+=E.=JMmf[`XE {.FJQPN>آ2/g٤W-^Q[WujubPt!HH;J҄RTc };fP->Y&hߟ ,d-]HuLJo Rl! fTOP]؅k(NJ?@CZH*Y5xqLժN8@LK{H@) }IF#2좸\!!1S*6l+ތXʩ((cl2/׉ ZKLyH~I09|9[;�I_Hb z+0P| Bst [>,]H/4]v}+QJFP_V._s, wUlAˌ v# Ol Qa(c!٢uIG`t`#K}9&Uw~j /6M%Bf 1Oo3H|s[*TwPU+7F qmi&]d0s@= x6q~εDZMI-f|F귱fH?{,TŇo`]Oe4վOɯHq\ 5!+k.9IoC;ؠ@_TvЎ; sxƖ{RJ8*WBszCϞX3n%rI~K ?qqSOϹ"E j|ўmq]f4 Mcgs7&,o0%eF 0-$[ӮKc_gNIsDn Ťi%"o~1[^I3CVOKժk۹vZd>8{V? ][XaΧE_~-dMs)|Vf}Ggפ9rib,v4跬MQ==3A:㘱=&PĻb$9@aj.|b^KtE-Jߌ+(=9^QÝZZtV:st/S*ߚ6M̸VOq䞵b]HUwjzQvBkp<xrL Sv-+,s/7?crety2|ϓke5fx2,{OTg !EA|l-S=O[).l E.Rl3-35Y_˸2k&]VIh̷Ky>bw3IFEK_rLC޾c}8*Y_r_w,o25/ BI`phj ;;/?1qeo8ޱFRzF[nEx6`JrT~f ny󕕙.LW6u_1A~!Lkܳ#*V.F]{UBf}_- ;!A%&gj kZ% <zNF,h˺RVgTX_R!jFJs @߼"};۠kו#3\AIVVxa;b K3dS 3vӁH"6. }&n1-eQTwK؛X2n!9tnyu~ݞ NAO>1_k^^A[lԕzS;Szۤ '8&w!m@K*V=gMCJ~*hw<ohs/.O~IMpPҟi/$kwG3h |"|P O F,}<G_H%UϜ4j|#ZN5\, FX1&C6ATQVM]Eo]~6 <z0BRWT9Bb',*ou"l.FDxuh1{浣:h9m GjMo7Z&Η}<{`L(|ZͿUKwu OgZnu E0b;vv\kv]EK]VA *oRQh٤aⱾʦf a9ǴxOO9ɦ+^Ŀ4oUn.-#ĺff}SV2;U<v4_ iִi5EϊeֆyXZq<.MԦ� "li IoWo{/xhT P#O{qь?͟~=AGZT0Tn9[h6+ MbE⯕cdQZ'4yTw}gĠQRn)c^}x\~^~TL{gXP?rd0z.}8JG&}!ߍL]{f!S+fP=Ӧ=N;"jl�&`HfkBݵڈcXז,k@j[}m^WڔC�eq+.ˏ|nj2od|ϓkZ%|gd _Ä�E\:͎Ύcg2˟['):#Rz 4d'N~E\ͫ?냍mGS#jeap/iaeȨy5M^E V:?95c qoΟ' ހQ]L!m+^ertM`.yuc[GSק<7E=K}\B~T(UOGVҰߊ۠WgL[[W'`.| }C;yW7u߿{ AW͍f-j'>Cy{f^1|E.PEG:nl%+^O c~VR@]=[f B^w(-.U2v SwY*Wj^ɦm՘\mCZW)nI7s]hܺ薴敕_1γHOSZEcr܀j 6&P&LJ/%vӧABڲ:/)g̣CZg{(lH5B:raA %T]P=$ &0jS=GZ+K*  7>BOO|R*n9 ^OB>zߦH{Uu eL.@J|W)fن8GT,fy 2,  !`*UG qI�,fl~b Gɧ+i`+!ZY86D<l]p;Y|,Qun{jʰ։\N`]m<ߕD zl|5lZS&{wժhιT=2B#@Ih5ʺ�*194"!9 Aë"<Hʌ w]`XAZX-p$zMW>JؕgX5He:t22_ܹ'Oɢ]o8[0?6<Me%zpBԊܕw~<K9GhcB+HKtCv�bh"cv.ט\^ՖݩHR⛿O.r.ZR Tߴ 2|"NlY$ϛ#4<(76tiT$WiM|&͓ЎoȢ~ >H/s{Ɓy&b[[{A]jP me6oy KʅҐ}PhB _gF0]LDoM;"0^T&4j,gL.Wg0PT!W9Z`ɇwhPifa.Cv&|:Qj$|_>xe<^Rf߷$Ccaj;㞳~AJ3Ot%7mw(HF=f 5۟Vi)caWɓܠ6Ɩ?fEq vwH0wY)ǮPBpGbr>N@!8QHh*үo :*ݛ9 $dem(G!TV'Jw)F yAiD_ݵԘiFnŸ?uͩoCsM!Bj|&O'She*)c˱f2N9/Y֮*-/{v]:  &5̖Chcukb/wgu -?O 3>Vg ꨟ'wƽz.ɹ'kuDej5ϵ$;|;tМ<6v %/XywPv88g f١t9+6C RFUpQj4ac| +BCJMӃK yFBHJxr!5Voce ֕~}@\\JW'50;�f-B`j;{' B0B\Ӆ`]fz \x{w.y4 7kM_?C7-V~Soe�a^smk>[{ӜKΔZS0tݓ{zc/V5?=bc>A،5{sk[,-(8"n}+8\@S>S[R`f~uD^ EZO-W'GuSt,N=:ޣn]`_& 52~.ZPZԲL+PzQǗhi81`X6"TBM$ ̳ӻl/m)ؖ7`#onST^YZRcKX��@�IDAT`|aL;'?ci琖8e;+Zz[|2@Z*nlUL#E0UpS9lHWk& Tg]&kӭo%'$*ls5+?` P+ݴ/YZ0hWh Ֆ2*FW+=}^#H%_Sf}S`l AsKQ`eQw? g`Mޖ:ճl*Qm c-#BZtY[ᄡWFTsDn<&ppmhD_<+*flb1lcoFHUjl)*` yfd&2r\&u5+`gO_iG4` I}8ϯqwW-5LkmI_y]ӷ;IhB+L =A L{G|re=` dM`w[Ov ή2 L2d}6s`O)|)6W7uv JL~2r{_CY ?dcedo}4 L4+W{WHap1m/[MsbdB`!2)U\)@g'GmU6ٻh ξ';7[!q2XPYLA२FU'^j$`(FQIVf/×$0/NzT|?:9J ϡ#|QaA#fpw`~!j*\ X[㎮B�S<ꝏWLth7LJUѸewa&KT(ai0ic15'4c}\k)yxlFWX+_#}⨶C LgPc٪'w`6,^`w+Ghq%;r#W݃okUl_&mGO'2\^\^5Fl1A:yֱH5:uu/r6T|�<K65[胫sX`o1k+#s_0e( _Uɝq/=xxa&az 4 P׏#&ERӢl| \̃êѢ*m.ʨVLso ;Ucto-]0;ÞC,sP!4?f4E2]o5~ kK0q}bݲyD B46}ި5 ~m?N;iыLLUAUu }(VEwm70@P|�}W`5B8i{<b#*b2O^ >8!Q0Lӯ#Qk/U>+ʩ/bwv`ea s jŵu =t}T.FNU.U;֫U7x=`v̄!::^u>漖SͅVH/a2\/54)d"떑g [zYԊHmޠZѓc(->M;9V`d>et|�:݆i~'8{+3͚dZWgi*f$ ̩aR )HhܷA2`S (+= %Gk˕[c^eo>euZ uFĢFQ6󜔖8$CzF+Cck}J|(N ^[ z&Z\ <cr;W^e-'L@)M.I\H,Fn9J%E%K&;Lʫ FuyU*AiVAEOt9@Ck 5%:2So \3R@_) !A8& ް0^ZU|u|=ДZ-CjCG8*&]26>6H ʎ*qS$D4̎\վOf-.gϬ<6ɕI.K{ϫWO-4a@fywJM.l&$LahNvA"H{ _xUvIXhFtdo*c2`a7@߾_>[ac.lA`Eo9iB"h@}>[8]~]5&*¦Cs؅+!tɠiҌQn!4&(|j a a3R֛rg)`|S{t.Mzn3QOO0 x9K4"`+,@yR6Iim L]?0p BaW]H|drz?`tQ'cY xO{fm9Oy@_ͧ-Γoڼdx/z g Uk|ʮp嚼OG-|z=#qDDo2P@6lgzڻyD؈Æ"lѴ-aݣn6iSIG;;FM\VMXdQ#˕59CETm[QRƻ2u(YtL.qqL2۵;*qwPL.UIKaZ8mkpª9$W7Æ}�-}G.0@cHRq6L.+]^p)a?3c}+-]LJƧ yJb,?b@msVF> Ф  ,MפC72(mEf?GҷsOFΊ?UvX( jG v3j t(�Duo}˝a g Dk.X�ML-}N yBT՚ >IcԬn +*wD|چɅ|"wYTȋL�<erdSB\r2 5)Wf*WP2v|V>+' -W1ӛ4m@ kBݞWo sh})Uk=w✬_ c1T_8~7Jbt5 [ȟڻ—1`H$vCm.WW0UԊJG 0Ņnvؕ˱ ԁM(Tw3+Ҫ:8linT@PHU#+Pc$ַRktl_I@N By^"#aAо 䐔6>WNU;DޒO;FJIQh?=AjR*1{-,>9)J jι?YDŽAk8{RShg`ܿ4&f8Ikvrv{E3 9l 꼒{!&o9#Wj'g}wʳg, ' Z/qԘ%582_}[-.4z]yH(3[h`soc1y5 w狀Pw ݤ]%~Z*4l+͡K0 j>):eA:{�B3'OC{DqB?p HQ,!8HSEIf /%9w*IꀖtР9ڌ0MHCwvsj0)ն 2k`!ɐ*_dta14[ ERlf9o4$hYO.E]Kmno=g?%hcŬ[_̧^=eeeK}3`;c= V&bTsvg>ek>aHڗӢOK*BD;;3>0Whc6#5ɦ(L65<& dܙ#]#֌FKʍjg ݹ&e`oWoučW=ce*\Ec!Tրjޯpw_wG q?Djuz�6}Kq'@>ƱŘ=6c* \iܳJ )++:?U0cfV`UbIxd>13R3Rle)tWu/&t hI)Uvϵ:QBw|;z7&5N]UtXrBr2W)}|!ZB AM/tZ=1?\X{54ܥMJ@"͘ s_ƒZGLT]H)AD2:m9\5X]!w>oJV䱮z}RSCUzD"KH^μvxzB;6_jӯ}gQS;uR0@.сYyˣw>:V|ު.W<,A EX`~8o%QTzV %qB y<sacw XnWG?"ȻgEb(WYY!x(}Zw&1u]�6>OXcbKl4<>H7+o"28o4= !G)VdH;mPRJm,]Gmyeb+ ƚ+@ |Hs3s`A j["J<HasL|R(EQ039_(=9\ڜwV֝k2֓؞+aO4$u:)%.0+v(gނ`8 ה&1uD;FZ}IV~   &hoR?-Eǚ yRVyZ؇ [ }h7%J!2s^Z|:я~9&EXEo<z\*"i\�I-13jץ<ݛmwW .`YmQZhZ 0?erZfT6K$=uP(l3Pb(|Q=/Ncb:jչǗjnSYΉ(YywI_IϼUY4 #o|l50kx=S2\2lFGٷF};рзӑsV*?zM27'㞷=_"yn#k]Ý~:fOO"XQpD'UʟWGF{E$uALŨAYVfY_/0/=JRc5frPϕmW<{ed-:R{ >TvfS" A ?2jQh)+Nͪ%r+Uh)V}CTO0g]L7 _^yD*Tcfh1Jn:/Me0İNS̶y qEfj\/r3Y2?UD;f֙Cgh+v:쁖T)3*۠=:0c#o{z6EKͬ`wda =Yo!1Uo]Er_J&#L9JjwCNa\'5{?o,)m59"$b^l*$AXd@RQBS9L0.g#ˣ^H@P˙g_0`Ɍ`n1ZH({Qd̿Whm?9=B̗BTa}Z8Q2xR'  w0`hyդiCnY%?JXC{I1iIAS>n>.G[ 3C/ qVA޻J<X@M| =<t�WBkp]T{> 6c*Goe%̘ao u}B'^fF6a<$);oEw6~+ѽK&^y>h`<OU:pqpt7u<+>bA?bk,&(!b;u{4[W=^;uX3A 0dݍyI&O,TMޮ xoKլ~qe|r+P]5jus7cC&79`tcr.Ճ$@iS!H-T9LZ*)m,ڵ͢Q#nʮ33RΙn8G[)h.2rN6{Q$6XXu=˘dt`}Y-|Jˠ;\O.ٿSWto]6}l,{q9~Լ9FP}WUSX) c0ݮť҆Ik]n gy2jkV~ 4lT-* efa&L3Ʀ=O:\e|o'mA7xi46˻[0՗!r>^Ŀ4ul+ܕM74 c9�,؏Z8Y|T^kg T#l2.*0`[Å258{7Wܺfu_OUrZ1SM<Nf*l͔-M JBPp\s~sc2 Hݛe1W=>ux[pX0K)<.2#3�_J֏NQf6;c7UŘj.^Ĥ mH¯)f k|W &.3vQ)}4Ӊ2+]ӲKJbuG-*̘o Sؘ /Ymm/o(qDf3):cJ$8vEo]"$BkZHoɨ:!*i!ݍ r3DJW %QcZ.ET*k``uf\<{�04P=$fWi?hI`�#FJZ^rb'`rJ _aFfXR"$? )g=zdVB)MUo2D~kepG-TuOJZ�ddJb4sK\~5v͋8O=l>.Y'\T'Ϟ;ל㊳~9U,БRkF1 T]sL1yU T|1XA;)Ua۳ߊ9BHfwrZ>vM ȍ h=e9gj"0%&,6wMۮBͭMC̗Ckc>@ q#6iJ*c5!}ܳdtJ0 ѵN! Ԯscߍj90~ZO%Xa,g?ݼ$=F;K7w4vH3Q0 SPn)cȇv! 6=. , <%gs~hQc̣6B^_\+IwNcNr7Sq|r,DKaa]_ϧnƷ׬n}k0dڙ<b*g'`jM+h&i'T~1"fTJ\5F'㞧=w={2@퍩VKu>>Q߸J9(:jq1[Eik$xr u'{yrYoSmڀntBZ\ @&!\i#0ĄKL)])J856~c?Cƌ҄/4EXh8]OrN\ђkiMc~WE sQ8i]/5޲YJ-}<o4`dtIM͋(,la힙\siH?V^ lXi/x<v{slUӸ<Q^V'ř% Grĸ|&/JNN[_Vy%QU V[Mjd{Z*Zi76K2S2_!~&#/ߤͱzhE񀱒珐VR=Glz):| :=VnUkp e(L[t*\"ݽR0[0b#n*C9WDqzCe`R;̝tt< jZԵ%53$ܢ�3F0a v�!- &M ,+3i56zky0~]֍6eÜTA`1&fJ3Ts:;uӃ? �a4rLm4Pv˺$)BEY>@ËiS%}eZ@ܟY 9R55rd''%0r>{ԩϓ㊾]{GۛQE$6:ۛwP7cq*Xi`\p-i+'acHEJkQ0b%N.HjanUnn!+T|o'<gɤF|FyjWlYq%/򤞷h_lZmj6+BhF:L_άq3-7V;4v8үc#ΙOLWR Tpha _1Յ%p@yß s* MBeQ<;:(6`xzlyݭ:l>`nQܽCF74=VT+GGsTR3p~VhYl62kr>-WU?/_:_kaߴ(a)sR{쓾rU+YCX~Wr/E~' f} QtT^k]飓"ozebVm@�7mYi\ήmM {ɸ|ϝqϓš\ϿaCQޕԩϏ氃FToF|qXsZЉ}9k;2hzrP2e@fsceɗS_q+TqptuڏS J5OiqL:DzGXx2j%G^=AC BaMj{r)X+8x7_>Hk ׬ L>^S$AzJ*B7'T혟k.9J՘x>g,c^]0K2YU/JpAad==Z ۼFXb2dj6Z=F֙|,I;S\9q%췘P D \ D4##l:L_4Ƙ5,On0Ɩ�jt˲4, ")b*X(((Hwww,K=gܹsΝ{7{{g̩y̩^A`nEӌqw`\ÜRCV0Ԝ+N!UQ6a^>09>AH vp&_ZR2ѫ<ekQwܖ Ё_xV2sMWNQB+6s|x_2D\]9Hlbnj)5Oaڑr.R AaeBW9&B' 6$Y8tEc%ljfuTT8z*|;) *#H[*y Ԫ]b8fQ6)0SIdb=Bj.]IoNb3L6=\O3<`^|ӭn'LXѴG`Fvz ͜rTQ e=C;ZVJ6 0gdZj#j_6!q\D"3%{B=Ѯ0IP!lb4lB *Z2G{@;&WTף5nް.黭<s4x;]t.'%g=g ӝ4-ԡM{lZ&B.0*Bh笑c~<c<z혁n>TfAi5>i9ubd8&&+ZZވ,XD vkFKk~G>^>αV8l.ޥ鍛ѐ0DEދ")۟cdt n(/P1J77No ?VօfV$iKV˧xO1,&:7ģȘ:O *_= p0z<Zd>џg =aXS()50mWJ4:7H*7MxU-6]z\"3>fԁ-?\>s l<>2B Td =vb ^2GUY*tn4os2Spr Sj<}},ķd YA>q::c"O B W=全 >߭[|_7SV7D4k@hoe+#SLPc3.l0�oSt_ˈFtYI~!HlQAi}BmUF6YBxeq[ǸK뤮i/阗nv,Pyv42T^s {[=a(\:dZy3tan=Ԟ$CʗAFs7by#|ބۯ{;6ze/rM1ٮaިtu6 @r+zEM\FthAkD$Sim 2u,a/S8TTSagh=ʩ[4F*%'S_nHr_>_v0Uh Kl봗,q3z Llm|q*mهkla0\}CQ8^X`6n_?-/1NCZ3zd.a3XT8}47%gJ5`xN*-r)L / qb;c Zw(4{=}Wǯo¢]="~KURRF2A761('j3RgDċf IyUHVj"-}vQ 7l8X`) ƹS:*lQ3X H蚘`E 3%{Bn@+{P, ]b_+DwN9(ң/iZ�rLQgРaœ+3ԏh%i#ۦw {(7}vHj*FV*߅jJ1.|1x M)'QqbE7ƷJ1(޾B_`XhE!sPrĦEo0W]*Zi \JXEs\uD.\~HNumnᔥ@ a~80c|HjV#^xN8-87U+<Mj^RZJ"ce28J~R\ֱ1?_ 4IyhXT(})IcLF)\APBT\L+өBl5~S*&^A,xCݡ) 4JTœ{"R>T:\9䥓c c4UXϢ{p3?M)9!зST*�a> 0Y M=&;=ǎ[T1[X*ߵ?ms;7: WgsaUHm͠ڸNՒk?"90sUF0X KPC&CVNz5ٮu:Ej׵s23s &?5Dr܌GbLa<f)j>q:\60o=XB中ֲ4::yO IYdr9MfU`BF=q-Y=ZzsN _#Ʌ~HZDgЀB*WP &偺O8(݅Vh )_]kFC3N77J5'E"5`Uyl ҩt;#͞/֍H ?C_ozBÉ!<":}�'# 2hOYLs^;wRLZ|uh? aҿZ?yc+,dL۴i9ִMSzR ~߶jP5R@wF?~]4*7[K)KXjӹ�;z;YRo4�|$}^FʐT,֌hǤ:+kxVWMXpBJuq-"T:,XB0 wdSe#l*`QYŒG W_CLUF0Ң>ᐾ {Pxt PC?c1 }XRh9N-]@q`Uz='0wXO-5ٹFgrsڌ[}z uV쬷4S%C^tP`acS&ʘS75 7>~WL.uz]ƴvK,xl5OmlFf-!rRI!M-`p\o~I5j&PMr}% O%i߭om5aa V-.АЖQ(&ޠQ 5)dSf+dάڍgOCZ;dv*+w Ԗ}94ZUwpז1|(8pDW`"g-z]ILsi5ݳAGfdǗ @_ld(TJRg>$6zDϲX}7M'`uAj~+1Z]Fm-^8S,xpl]*]|U5:U\lO]OL.4ךa$zw\.!#0~mbdaZ*f Z[c9z0 ~j@hu9}W<N?M)PP||&"Nյ:ǾXrv@GN*alNS|˜1^c;@2:}OWY s7Z?8n&͏#y|/2ڌG8IojmXZ]?GΊMX u).Y-qbOfEYiX9RysL(s0*c;Ivc߳S0Xx Go8lP(ZG_ 7d20ouRwJ Gc G=ˏRG]ZEw$t0Kfժ/UG@SkF 2l[RB5]0Aéz< eGvzY2 n#K|`ne`my]UY0<>'u ;``mu )~\a}CWR^~ڶBC(ִO썢à!{dnc ;`_Ց2C*#Lť 0{h }~oߵ3! >�}\~tsu_)SG&Ta#uW�_V?;c1} =\0lX?aS .S0WTxFu.& SŀatUٛ!_Fʘ?wَ; 2#ʣfl{%vpW3%av^1�,J̶D[�֞_ЂwRd#:Yt怤ɭJByXh!;#Ւf3Vi QaN NyS M6/)soPΚ# KT9aıkRʛ6ݏIaԏݯnsFtX4CupYvXhƈ1-\Ɨ1$O}UӲz ΃x QQ(J-|.+ )^L4@?LsE~SXK hgO٭S0%#SN$Q1dL53Lws86aNY6z4Mty1ܾyCnL?ٷL0f>Vy=BPu8{8-%aX qWv980SwDߐ=OI0˵׵soK*5ϭ[즏x_<G0UR4QJmlUB{{BH8V-#9|دCلq5Pk۔#+t%S Zn㊙xgXM|iC0?B=4 $tp/%:uJaF8X}Vx6y _b00�#0@b#wRZ]L%v|F`4̌~~kCBݸ]}?|gˠG/K (oٺ0�#;ھSGVGSum{ bt=xb =\֩ 'ir TA8x-X˙9G^8͊0~\uF`F~@tV3wdr`C`F@`Ւ3wz$>~3.Z¬D&}F#Lt1 #0@B"�M3{Ӷ~E˖ VkauhрM͆z呀F`F֍\y/*QOF`o$^yDBbJ~F>w79#0�#\9s}]/Z!.^ F]y`(|8J_c(kD6Q&R AL�#0�#$&aK!sRMۙF`. ·6E}&D GiD:&[kϙbŸNE*ժ%:3�#<`dNś?.,^j?bF`F`F`F`F`FH(]t׌`F`F`F`F`F`FbF`F`F`F`F`FH0+#0�#0�#0�#0�#0�#00�#0�#0�#0�#0�#0�#t`FW}7\3F`F`F`F`F`F`qo'ܾ}nߺ4SL|N7P`F`/ܽsܺv7Y<ej0`|!p {[d)RRr{m2�#wvc'rLC6ȩŋ}3#C<8`@ZQAkԼ\۲=-)cTAʙ`3RRh >Ob |e#!bNikOwKk; l wE>vDLA`9[c02,4\sp$W&싱WF1UGȊU_Uү<7}3SЁV MXrI%|-,1.G.n3=, ϗY?E!g3N'ҥ{ݲhԍ9-~s/t 9(u1V>L՞wy-y3r<E:Gy*磇(o]=y%ϫ\*PŘx׋KRۄuo|i3ص">qr e2o@�6s7(W @uT|1 vލ;}]ʛ? Fn8O[6\ OORYr2=t֭8G{w]뤔YG��@�IDAT)eto^pV-9C_[7R Y(r6ʙFE0NQ& =u({4Viԡ{!n6ﵪ1IoL.fޣj=&tz NެҜS0s5B~x3ܼyΞ.vlH] F^pz0s5ڿ|3i p &\B11e:L#oovӏ_#1>i}3z`}X'e'N"Cۛy}]nˇʄyewnަˊ(r~fLZH<>_:d{ Wnv~N@' 뙂PfXEJJ۔xtݹy^&H{}n߸N/ !_mtay˕^/涘kz: t:R9sQ2$*8wl@ՙ'7g}S[.0:5\(_Ȍ.JwH2k]5PK+ۏ?PkShOѰE^qbMJs[oķ~<Ҁ6y~}*\4=0R1P־=eɖZӺz&m\%.f7_Ļmv=IO#nH\fe)0"{Jz*{qڽJݯXq8͌$ӆCBRP,>)␶EUK'r(xaGVđo'J/ۄ] ĤP{׮bѰQjKNjuvǴIGdѕ԰$W/WЗm-9䌿L =\~ {J%VA.gg ۳a^a_jl2ڪ2y<͐1%um%|")qUjD)SԴl)t@ 4nhA%2=@?׻諁[A/E|jӹ�ը"4<Aݚ/*_%=ԭE!{Y9tWK";u<:7^(&GzOQJ+4q֯<G=, Q=g=l՗EC3rT-{nnyJע#5K =JǑqu~E{?yfFWi`f,ԇ+,L?;3`Ҥ5{?5\F�F4}e1M9͌@]?&F�L[OwP>Okh؀}п$}MEʚ7QԲa܏Hj{? -\`ynK)R B"-U_Ņ5/_5~5-4MJ>d8_g_)5Es7 {AΗ̮+~O0E ҪvI_kb8͌l}6A]LMW.>#ghΜiuIJQ<R TQǍю 3Q9!m`HoXugLEiӥSKۅRi?Ǥ urj|!uIof J sJI<s\ubia&殴5 _h0DC3%xFj6BҦǢŽKZ0=9xVIdI!ִm>:u:]z~0JlK)+V*4QDPM`BZ0$26ׯJճK |&pxϵRSد>3f*06W3IeX [ҪŧeM`nnuL^<}"銲I\o aw|хyyڽ|_h_U"܆7J8.JB [泴ApӚs<y2!'av;âK@&l+D.=nEu|E?gO=2mxAYoG+->!-vT-\5ovn齝s_ .L׾NZMQ)_zV!VN{7PTT@J';tzZu2/NyJנߠә=(YFh1wX|O;XtN̽пc^_y쪵sȱm%kjjݱ ̧0oF\M0{ K'V| HWjkÍ+I ˧RG QbhîL3G&LI W͐~\/LEӱĶe>{(l p@h]:_M'\E+Qhņgf1ճd˔7,i-~G̑R܅<o3u7}9"|sK*m[`a=.{Q"ѵQӔDU*R3%Oi*/vjra.1J̉S-Up#wչ3ښSΜCWs$ib\lZ\KZ>xk]*sdBE2aM rJ;N%z= Wܤb3hKb-Nrj\M{/$lan6]J(=f,;#Tr=+gz%Lɂw+.&9 ü?QX])P:zRc @*ƺsRT?w͘=& Ʈbtǖ^~B>&m4Z\3ߵB Z]mmy?Xﲸd\g:is~[GrnsL[)|S{l*/eGhվ?y8}dlgv1!8ل }&щ-Kܣl[%R[-r4]OI2 Z$96i-/+=SyWi<NGYA8,ioVo7Wg 45#pq GH6ÀC57ݯթãYcȶS &_MjR+ib$L\e 3O">Vԡ\Z8[4mV=QznpѱGL&~nh/0q.6b}3x4`PXx:xL k%s,>ys3 b,D9Ibu{漍~t|홵rBe$30X[홰x0Ks FuMD Z}5*z<[ lY[^&ySq@Ѥ6"d?0RUGU'^,.4j4VC�f6d{Ry>iw{ԥ|֭�/WڸJ7K?=s\tv*U}3N-oPtHf+:-.7Eu G͋h;ՋjJ}#<!`ri{[!qo{M6`aˍI&]g#d_y[B˨LSoj[~Y0F FX=:^MuHQ2y0uђIvy怶2j?R"6f6u-9X^gAu'5F߰o҃6N __dAvtv:�D~)C\TB #o ppGVD=)[fImCWvoʻOtF9u$QX2X|`{{JlOyǼwZԪC~c9uźiWq`5rߛYoX3Q>w\9 :A$SkJ* >{k3U�:tsBUMk]�q[MݲutLo*G//3@XO \آ5G}_0';mlbPxH0H@�HKh ڿ12T7h$%uV S +,֝N[~UooQl)g\BXˢA—{n F?Upg}$ xun@mmL w:NxK Kh_PL.ؼXA*qE,fʼS(62JKWЮ+N4=+ Kq:3ˈFZ)p< 6y#\$_9e^IqưmN5&:�&ݟ)"su_I9"꺝r %2Jr,KlC׿rЍ5z WvF/I̲=|J?+WќBjG>QXhwD La`ӄ̿Q|Tƶ] [HڔE O67~C%ru-3fyD>G$COw]Sm!lC[nM`~[<y2xap(2((G1' >qHc/_ 7[+ |m:lm>+|X6)I7zi{z&huc;244RC _7,?%|jϓi/oQۼf&= '4SnX<2XH MEBUL_s=Bnz\UsRCJW&KbNHBo)RΓA8;wrᑷ\] ɔNm_%nv4$>q=(ShQ8)$Tw-S GtRhL}&uTR0QdB%`B˚ i/.ǸB͆ïBXbJ10pw*.~O*-N0F)_!LƦ6%1*XJ=ɅyWd>Y*_u TvQ. ][RFڭI& FInynFϕSG$q)TUo3WS8>_MtvFiHx =즙tYZ>1Oaٓ1OІCL[׵ TǕ ⣩["B+-Ij2w%6fF(VI`a EiC#S%!pzZ7}}As׬_ۧLeۿ#vk͘~Uz}H}K޸r2{El3SP2jSߨBGQVƣ?sD'H)sOt =nWbẓ?k:.LmoBny1f&�^La'9+&ܒR" M_ lЃхt<ZLSE+Fơ`1UKhB_rLU5o:ϻ bra[nN1\ki`x4mEcEY; u1yQ9P(2mTc:[sY.E' 续QN Ʌ5ߐ1i2?TДzY&?"~YUEz5̓1<�P BM7!SL3V2W4g*:]&]>-H ^E$3ץڱsQR5z?}A+VqZ iHMj6sI9B`sva .F3BMѲ5FWI]qzZ l:4-랂U4iAzi>'HcM#M^D&`|,A`NN;MOt,o w5 l5,;K ǭ4d H=/4Tz,R\361{ь[H]D"2+OL,fGMM[uzD0*<5nbk>]аR` /EӠ=}XA'$!g1Oۉ ҠmC2ʸ`SrC2=\όg:HNp^Y700 2ͽFG7j&&ibOF M/|{oG[,ilp]=c'W_*T]^u9a?*Fް/9+rFha(r\)}u)(U 6=?Mҩ@߭1/;Wj(q_t9ћwh; @�\hTWYKTچ2LWNk$&LGߦb;H -QL zBFR=*ɀC@iYkg$"YtlV[E`c\1"Ķ?_Qu.M_#M[;#lbt}ֿBxE OyEV@IaX'b?MѲ'NhA+GnYT>wrbeG:`vd`l@ ڂw<ejYoZ5j= ;O4ozsڿpڒ7I %b 0lEhjA.U}c!~羦T =~ѵyW"mdz1clHTQa|I|-gux;Gt4j]a} bŒ?=lbd4<¦/`C|G /9/>ҀW ̥8UjfQ@qs AǷ_%4S̤nߊZrђZ4kMnąbը|ֵg23%W xcN\>,̖<j sMSzR%xkgd|2?Ӷg|]0="%H.-*q -/F*: 1i ךO1"t3T,Ym5),]*=܌`~ uFGs _\k<;%4}R_ t79jr1.1?6ez)s4>qk'}-SEvzj |cw8mDi[+8+W~|v MlL 'Wԙ\ўyIcam!`^pĎLUW~0yb�0k{2n l?&7cZ/``q<7, 0P&`p΂$"L0?R/{"8W\{3={hBB< 0Nί@ wR;|)3arnUi>JCJad47HC`ZpuV˨G[2lJq;}OX􀠕\F9&@42Ƽ7 >IÂ] Guw}Bݿ#^=OMݍɅڌH7^OfsoU+Uv3{eFoә\*=ޕׅv 6 @^Bm`f&&_a1ƃ< bHu X-1| 4a4$$Ÿx[t ƍfGj# eίClFZā2-"11_љ\ȯ@ʌ<Uj2`e/7@/m\R{ Z鳻Fqq f0 ZSz�D`0_9Az <.Uݘ\H1&[߬ ,@TL.uvH?Zhdg6fq:a~},C4 hrU4F$,.ק[D> #1Wk¢>Zz^"_>�~{?+]τ"2\LKJFth3=0FD̘7!G al&kA5Zk|ruVω{?oTEBMA; )K*}?8`)O8-TJE1z?!"W1o<=FFUK^RSk�!@k7T8B(am ubr*wL.sv:Ng) ;9ѠW.cz F-|= <N8m6 Mq:zXz;"�i|-`Rh6hGdLQ$xAF@[!3b LU+ύI㧘S88Q{ Z=Em3G $f p`j4'\F=5Q3og̔J. f$' L0�en0/0AcY8Xa)m7>.O㈌ F g225f(+>&o J4)m0lrјV o |hwlGQ΀7s||B '0mؼ}(U]j(x[nJG+5=6{+\qia]:_V _I'6}`RO@y43j3_,[ZnqSѕ<*y* l1j&츴Rd\!|uJFpI,YGVB{5"oCV œbhhEQt*L݅A,#=)0OjmSy&!!jf ~rʺ\јV[?? G3A#wu_T`R,G8Z(Tm +ki Ulf`&*M0>Y$L*M,Lb-T=s uMt?B!@{֘j^ sg XX]a?N 4ǟg2m_gԕ \w9-URܵi911LSi!Gb*|ki3Ǔ}IsC# &Pvх;_43`N2ZNibXW`5.7[Ҋ=oU߸'c76whfl$y܊̑+~ FWl.u~L/SzXG'*fʴ\˟qL.l? vSX6tܞ|<N[:ynq&8wM<cx{ ++=LEH) i0HVudE׮VGi ) S5U*Ϊ7o$`}Rj`C*22Vs8hl9<'XϝSN Euap2롥T!t*umȃh� qeTTyT49U u/jMP<ݙrM`e$5[퀲Z,$:LEV}~4_0\ hJ9]l=ᰥq V޹Ia>fr̡qV_- !g^"?m6LXT[18*W/aT#ݺ ȸI 1TυjѫuSudҤJRwV`MzeIHKy7wr!ڡ Iϵc?I+~|b. {%vp&EL*dVuRL][(Ttx :iL?sĨl\c!MpH5-p[ E|cTV7|E�eM1+kWK3ER1Hԃ**Ed9+(  3#Vo%넺jcTGj JV3&TqVqz?㓓签V?,#Z4!~qdrdp]`Ka.@XCPn [( T;Ɗ~OƴТ4 ~>Ra 5mܛpi\}Cv-;CiRr &O@q~2VL''4&=UHUiNJ1i׻qrP㴓VNRs%ͧz>of�mE {.vۘ*"UN ~̮ ܀Լ:bDj)&n\=()j,z膁;yO*-4fmJ]o)3BB:!HfAC&ޠlch f~ ϤnW=Y8{d\@UVmh^bҗ} |s96E0`[}p %oҸo C#n}qϹ0sG;S1dunf'Ef!fzФJi:x\}81Yc[q-[:?R]dn B0!ydL:"MSJO'FvW\Ktm+0nb߂Cvgը{_xHһ|�Ў/:ǹz -}X{$寥 p3m|a01Tz+n4](hTDVf؏gUJ5 ~=#BZjXp͟yR M(؍~[_/*M./V*Ckj2cGHMZ1&U]<ayJK-"h&ba_ͯc)A b/1i۳0˾W]&غ%41 P O#ahVZ0arvnrc\u \|vm$,:B{xT YD"ߓ1̿ (.[Oec{{@p1Tz\Y4Iq>NFO8HM'ӑ5f{~C~xy~y<NynBjUo 4\G\dHc(AL% IR3+^0a�ɩfۂy(@HQ=]Pq-Cf?CK[(v12c!Ast^! 7s80r?EyB<B,%炱ȱ4uTxϤcD mwgY7ڞUq9yO`ZAh+^eei 劍4*#wn?Fk&8|['8{Wjp_ᐐmW{(x<+g\'h^~qVK'[2\=rhsV0Ò.˚Manb G`΍K r-ʔ//%f/veWo~�iO\={VxM>۹]m9mn.nQjPU5_Wnq`I$zI'廽)/tѫDAjzM կ:])肙=3(ml (K6O?*:7Ԃ)dPqɨA[ dmCAgzf6�a?\C Z]柒Z1UiC0-8[C#@Ђg` &=) uV^0Q荏z='Ϥv4Zހ/j3 k֡(Oz0gE'bM[{`*F7mVA`7=tЩj`B#E{W(UbFg|O*1:-0 ?t~(˂<{@0i a`0~鼜lhj _u dvRd)\7/. i9ˑճi)3~3)<Nj㴱~vϙe$Oj28SE�MtjژhI-Vġ6GD y~SIƺ1Bab "=w+BL؟OQ4``c^p B=g sp!}G ]mokE}cX L?lpTj{FܱHRӉV^wr,&VXH7/{2r縃FƔe_z\E%ԻUsRCJZ̓7Krf`VNcӟٽʒ<Zeȩ͍ 9z!#B3玣{Ye٫<9>EH.~4ӭ $ ˰>oӸQ~;)#i|d!ytf:!妶ޟȐS{',7Oz/ .dpt|KF,QIwj|r6Bx/RgIх#;iZuZqv's u,JP>!/ hTKffZٮRZq:RiX y+~U3@}H4P`e}B͢O\~U^:EP]ߒvQ j_^",ѥʯP3A5]~IRaרUM+3d=RqY6 ?j}g\pT>TXKY2>4➕7// Be]a"CK[�@(IG^ 5I/ FcFQ`_:֟ tј\`g-m4X긌iC:E 6W%e [ i&'un(g tvR2'6/NB3Rm-~C'.8Cv4ickbvcs$^r+gALϟ4ۃMG л/mNtC:}Ec@u.Z2y~i8㽄8/[I[@)K|okЪ)d񛛥Y cq4c+imOe TZ=d4^0bI1 ;}s҅Oex+ (_o/v_IX ҙ79:OgQr7κA03z~�xV$s0Mr1eZod5XK{0@hEXB[/q_!}-3~B%OHd"hZ-W/䦐6]Eoy*m亽~|-b}^ X V6'#hzxXple[=]4=$xФ9C*¼^ `]3FH.}>jG%Z<!ބM`Sbd`qf-SHv7^S*M[ׯҴך<3 0\ܟЀZq`"";ߓ utv[9U:OobUvszdY +L:Rƅ?`+^xdP|XxZFO.0WSV=j)c^J69'RZVUjiqT90Rk _\`ja5pg#o<a\'IF3APG%RhѸ>srwȒ>6a~c5mǍ [a]a\{؁`6Kcm$X�80~}=_^c~3�=_:ɸ.d.8j DciYCP-&r@f sfr=aM'L~?d$E?�&L%|+l*Q>I1N;7L+fL&G$47]j·:({<i#JsyvjVZNqkӅzF,ioL,nS'͖AHNaF*& H[В-߄JϘ6WN'Hmx^jf2QA:+S  SslBr҄@*1bV$du6F.h$h0[j13iAi^\ux|]r,zt!%Mh ]T`IرP\".8xKҖ$LuhVǑy%'AJ"*C@f&H)l4ttL29}%&ΗR͐y<l!:* 6ӶH3�fR)3y$ry"t]BՄɗ)6ޅfo}ݔ񇨜ؔ(,7Xzv,  f4 nY'tG bI%Lw}%_qU`QA2N,B0gd>?%˪lhD4&0׆|q/ Dz7L;+% S_nHr_`]>_ Ʉ i."8ܨwerذŘXup+-iY|揻18*GWN̜G!VՈ]h 28f3; lCմGZ.FJ+Th24]f2e%sL3)L B>.PɖOZg{&բ>R =]KWgउ`VX~3lMnw'Ț rK U0;,P8,M oaj݀E`PVw\:b^..WSjo@cu<4^CkEi5(T_}A˸A-H?887τ w9 4CD<氘wRju!a&ht|rNo^yGU:7VӄdpuKT2wx[2Ǻ:-{OqXZ^*nQk&Բ4UX)Nа 5t CЄ:^egB$Y~zR)1C~7혪Ԡ螛U|aٷ*O`qi}1O+sofKc̣sma&u:<N8F㴳OWl1%b$)I9l~TS5̘<t9'r3H`bЙE쉣>Bwbl>Ok⊔1oLO.*M4%,00y�s Gc!*W~\'eҨ7"ac.Mğ PՂFvtΨ+Lb;?I¬qtL\_a‹OX*D۞Rm]-blP{jmu;Kqb ڇHnv iCު-˱{p;pp]k τ(\,wԺB_ & 'ͫ/or|hhW 峺i$Lרh;Da"߭UTRCJ - (G>㊛?B^Ѣ/ &6˴{>,&hG,D>w0~ (~'&',GwK&'0x 51ΑTGϢo־´(]z<AG!?] YnE&OZ )5LY"ցOɒpڢ:ʛ?4bdB6s90i S6 cf9 Jig{ɋzLq*"y 0/:(ϭ|O/K?Ud ?p GM ;oυ2L15mb}խ;&Ƃ7j 3;YGbok cߍ"5憘#a <|U&5>́czUx iÿ%Sb*3Mc-Q�C2RXDF}Ӥjkh8WYr<J; q1hGx>nCš_YWi*GM] zqss"ixqV߬q}xc?dn d$FTQL.OЊ`ɅȪ]W2 | Fo~4 zo)z7\ZN|S[*R3u5> XTP=JG4W@j4coʃ&<5!^ Rsew v!(WI\tNέ;S^L��@�IDAT+uT_ѳTo]EZ}84@J& g&F;P#X8}͘)4et6=e 0. 3|vO'L1**u.fBߐb|maxhU:'|a2E* 9<Z4oݩGXKm6w)L %h ؽ\(7|?TQmʜ#W#tC|2SBj~6֍J+i;s\:x;];{R,Fs9ۉu!J1x &] 澈D؈ ~]Jc#)\;w.<@7._9Xbj8�`C&{љS< & Z_xt4oܠƆĚVœP$ώ&׃^V. ,ss0HhsdO0҃Y+'0~G\!a&Ŕ)7;nm]BkI.&yXF]|~pJ]pFH42K~p"efn"i&Z`F`�W&U�]f S)>Cn'T== ۅrDFHphQcQBʬa1î p%xU={Q5Diۻa= G`$<N'• J!֜3}�LA<v)jEs{ &31�# #}go4 S_0OЮx kSJrF >W QaWnkNR㳎?Ӷwa=NJc2NJWeFW1F @`bЀ-)G`F>Fއ#kZ)Kx6�#p#�'0+ꚏ�g|rG{*?#ܯ9ft=oHuisW5zpLu- ls0@2hPrF i3)*|T@jo'P5Fg*,|FSҙ$Ξ<>G΅` x7n`F`F`F`F`F`F P>X5"^�0�#0�#0�#0�#0�#0�# ?N0�#0�#0�#0�#0�#0�#H0+bF`F`F`F`F`F`C]ǩF`F`F`F`F`F` ft%\,#0�#0�#0�#0�#0�#0@`0+085#0�#0�#0�#0�#0�#0@"!DeF`F`F`F`F`F N*^zL!!)(CTnڹ"-}fsV,:CǏFS))Kn7buQ4{qڵ"IfOMɒ%3GկܹK{w^ӎӺ许Ξ3ROF<A׮ަl9m;6_k)G7ZhYv޽K 훾&/Ck䧌ZV@R w읎nV|JK%֊_oSWPݽ <8I^ڹ=x._%4>+ߓMl9.?B%:ѮB 5Y䔯j'4??]G&4K>XD'־K<ԧ*~6ըf-=v aj5? Bļ;_Z1{>Ё9菦6J>T 佅4T^*,Eb8`F`F`F`!pUWʠ%*;6_̓uܰ ez8 Ib7gpe o*TBҦ0s0긌<vPx8>K.z}5pԏfףzMqĈN !DmC.t}t~yY 0S\o^tusQ}nߌܶ~iw}(E9>˸s놼+x =ݾ}L=F|uiڊ^ӭ[wiʄC@YyP*Q6¾mo߼sڅW0 73 2<ChFG\pCW.߲3JLm! &lZEyTjGJs\qo\Z$ `F`F`F`BM&]̰/w"7Ce*dՋ;¦z"MwgooѯשMyɕ!cJbQX=oqzRU?BSCKu&We) LVzؓ!Й\^/IŴG-UKΘx2,evUk<8J-/joStr:^c{g fzfғ/ә\q=EB|O` w? F΢?zz?^>^xBdd]X#`e|2׍8CF`F`F`F` XO>p&;(sQ0G g_)AE4 qDZ/L b'=R1ʕ7A+ Fre7_' n\EdC Ӄ'W##OhO_3/AcO4{ѐyJR s$A;Z24f2g_-A3pW: [hLiJx`0aЬh#!_~Kk%0UMW{u_I[Y}659% _&uKahw{0Ε`F`F`F`B9 b U·K )jurPrXƎكTf3SL3E$ v^M~/@ voNi؃nI6hc)&"J3}n.h)Uo} B�:l c39u _`]a*g4Tl\3;~eXb8=;|U2tw Z mxB *5sHӍ0' ?(»N(:h]:~2.@,٣tvFJ!-[W{bbs$Xe)$Sv=fNl]"|SHWOd靫[VLq- e.޽CgveF_8MJT";SAW rq黁dS_{='W][/mݚU8wKgv^Q "MFJ\Q< Uc4\Bvo/QvN=ka+;B ReLK杢1! hO}vh>p`,'8ؤu>*Vg ,Ls"Xr3 Z?/ /B_^0nG% \+~;G1s*?{_EѵZz/*"* MP( E]AlH齗�!CHH4yf3{Bٙ-̳Jũmr!^ƥe>KO-*ڗ B '{E{ۄP5뺐K)mFEE'TI3ꓗwiڰF ]woő_Tm*>w3ʄ1&�`L 0&�`?xpr>`B|˪QҴh7[&tMaeYrIIlʮF'Ot1MoLO~oZ}|L5kf֢n'Ќ :WE{L\];DH7&L1I6(۳#Piٗs4o_Me݊٬lVe-ںJ5`ClC2"B4~`yAܭO>iDsSBE^IKoF7N''EZ?K:sktJg.Xnd(ڙ );GTjlyaotlfev_#!ao&+զ\w0+ϫwhC " ,)Oڝ(m}Z7シ:+X::ܢHk`}r!>9j; "Ԥ!|Ql@xŮk}«MiDxܢ s`_~pNUjZW_?c'/A&Py|AmcuOl p)=il=*{^ f[lkj=7kHS޶L;$Bf):_}/ Gr\%}Ѻvf߯؟Y;2ᕛC+-'{g{~5لuCrL 0&�`L 0&#Nt8dQ01|VlaɻWnxQɣ&-M9!n'a4uaF<žWq;&�m6WAjпBISS^\$ / Wj۬/ip.ӭ.ˮeQx 6 =m8ĄoǶ \ba%D.u ,dg$O++jZ/lXW3hQ ]WO $]Z@ ѬY&Rr&G}6O碑\ 'te2+!JL4O/.g^SUңܺW~h%vέmpbdiOϺQΔ ϫS_C4V/|m&c9(</*<yՏKBJjb2&KQDAN{rtvڟ3<+=^'E<lLOEKh\5:ӢB ha_ ]|룋POt@V>K^%xBSc\3}|%b-~6?NE8[xbB_Q<0^x* >޵r#//ݸ$;o@xQ݆\* |r CSG#ĸj//f `$+՗hόF<%])t뺬g|cⰃȅ5rmd<cb=dN*"/ j.q;s?w|yLM5{F�`L 0&�`L 0&=,te_[yb;BE^$ψA�3mozdgdN=6>y<FPU6Y;Kr{_,& tn˰}RV*�g Zc4B b(@T. Q3S >:<. e_qׁ,/.>-^1"V \еn T!Bݟ<0a N^[qq6Vͬ΀z6*epB#M@u?ek4R|< ]m'|(S.Z?O-6&Fߧw(V*4l'_(qt.tZ-̡Nu{s{<_u+JS,eK+/WgFT};Cd)4!bϫĒWe=$(B!ZlġA u[UBAn{g;Rf!rT ]>BxYژ-Sܩ]!+ 7E(vu7! /&qG^!l^mi;ghQl@[sB/"B\3DEE`W]L~UL b)%.Oym!-_xe?t36M V QU\Sqff l^4kb~atZ0\a ׋[Ӏ}/<v>ڸJk|_w;ei..4T*s(f%ܼL}6`L 0&�`L 0&2CʡSWGu\Px{VRjqRP9ӤNjx9T0|IPT2„oE~LR"QCQ`<WM( c gi`g0TCLc?x_mjVݢEX6L"aBASXtMV׃qs͟ώ\#^Oyc rP+RB>ZSb\ u%Tn_|4 ^&q,CپT6q7/\(.mG/˩j<hri.0MWX1@ފ^ϫۯ~oE#}yVr]RյmBfyl@v۬{G w>񕪢yW/܆CA]jia�+zjxW|Z->Wv>hThikʛi ]&i9 FS=D)(T 0|&*CHO*-/*q ޹N%Tm3<?L`hB5 *Iy5beUw$;8he>rrăxc4 ]{c!QI|^3zx̩ >'s-#&>njn~ޣ|u_~N-<FbT6;=Tr{&�`L 0&�`L$Bxb]YS!XZ>'ÿP 0H\o= Z.i "rw|- /ԅ2 Fy!TwogVDDh#716w+bdϷhjPZ4W{$v<5oJuP1Sh&XAh15щHxe@J#h>x1cizz&D8?_ :n 9.ݳZxBM3vrɾx+ ڈIyӽq\9Ugp ڄh-%\Q+Z^09D}rAzj'=Bu߸T#ì{RIq,}%?b s>JSwVC}K/S}2BqeTd sc X]*pj;˛)}*Ws2k,P"q7Λ}XTN^v?Cx8j !o%HK}fD5)t! tQ=f<.1VeEYyfZSR["{;8z&.>EG;,EQkD8d0&�`L 0&�`s=ub7p}k9c8Bאܸj"sb2:W3'h4,N2"̔2b;%E8ͲndQkδR zMeWMWCR<˺/l{:('m}}Ch8IoL019F DYQ[QG8F&:{\uULDBOi`�If[lK*5,{]kɥ\߷F#ŲcQCIk^^aCaaz?!\݄�&aoژ\MгPmGM|X>{/\b&`H0O&<t$Uej]-+1<NP^j z38Z"$CB2 ^ӕ+j.h>˻;YPK7>4Z_g k: C~]VK_䉄 qҔhYn' D,aBq3&�`L 0&�`yK[>rxe+YZmiKxDeZ3^cdxZDcѼu^R&</ [O 73>BGe3*2騼 P(Z=Lc} rB5QPHYr B\ǭUR|Răr۟SJj8#xod#U/2QB[][rab͓*V %!}iAA X L,sev8E5o6g{vtv w:Sys 7Bżz?$CP!dÃ'HAн-?B"DBwʽs62'L[zרTrܥ0}M)cЈ寭ҫ~2 Y)_}*<A[ b}, gַ רZ=|kqMGю mC mY �/Y72G<\^xie)],My5[/!eypG:Q 8vթXo<e^�`L 0&�`L &ťS?œ!멝ȶut>u2b  B1͞8f*?U#e pHFö&U?9&<GEJUL&�gf<v9Zga>yͥ%*|x|1̽@ (C^e yӐCʐ+T[w3&?)}�7<֋H.enT8D~gcɣi)t]?Ax*6퐭a9W0`O\dUY^c?!*O. LGXϭ kшjü 8, }Zx#k_#}Bʽw2i $t3Ip@ "Ww#QޚX4,4c=R!ܫ"{L"E4Lefc@kdq޻+Ѕ"҅WdB=Xe M*յA_+�_pqty%: )ͩ5a F4R5,Qx�`L 0&�`L 0L$<:o5Z-rv4mUV=R_C/XQkIb\MBR9C*Q_ lxfsUw<(YhܞҦU;71A{FTp@SNESArw]6CP;/Jy 'oKYNc^G/^EK JvttY E}߾B%JR 7s/C-Y|EsX4^ݽ"KBBFe+_*?iYv %Rݗ[;d+L*BU\Z\{\Mq!d߬{]I"ZF‹‘Ge܊wn 8cn/u5rs`Gz9! B:ỳMr4Fsg=ۂmSƹI< $`lU!paU"fnO^ߛ 5%E a1s2&�`L 0&�`@9=*LM X6!'EBS9lQؿ+N%w}*feҿ9)b$PdD ~aOo7*X.ۿpT%rьZLW&lW1~xs}8:dt5Ј(o|i w~|5MREriHlTp4 6Ŀ>ԄƁ_;E.pHDx _y=bYqGyبrYu/)j9V"UVZdIWhʢCӡAMZT0+G~{{[u3[ZߍoWR^=#[ or2,'q!nupOP"mlֳryljӽWʺ .MpWǏ!e_gԾX6.#&g,BΛ=�wlΌSw?Uݜ8k'H.M!?Q$+AC(^ \=<n:RyXQQ;ܔQBCfd B.xo=^G* ZSE�:L 0&�`L 0&@ GWL^A+qX0`䂨x#恾D )od͊)XM=ڬ>c/3ϭ>bR&' =@_=S YjuO/ȐW!/¯=5Kή 5I%VPet1gԷWdlާUL"+b"cXɑ.$!wWæC)!Oq\ߣVakHȥ&1q}ӺVR!$a* d(CZ~tf򨕚u:Y}u ;5=_L2k nNNT_ a<+=s(JS/˱T9*T؎jlz]uJޓuKʏօ߼|?Yl/z{1jWwuxe<{/ON*AOlN:;g9>ʔ"%<} W Qo.>oݓ0c]]^<Q/$Z}Ј-׺z]FB'l|gs߸E zfyMR=J* k~<@b˛y>^2to|gzG\?dm'!ˊp/A7<OUE""`L 0&�`L 0&r@r $;-WA;/>&�`L 0&�`L 0& %gcL 0%Gms+�`L 0&�`L 0&�`L 0&GX#|&�`L 0&�`L 0&�`L 0%BWޘ�`L 0&�`L 0&�`L 0&� ]y�`L 0&�`L 0&�`L 0&lwnoYIy@8J.GSx=HPAT֭أ �9tt$ߥEÝ6,Y�ΐO 0&r@Dx<Dߢ|_~gx̕u)S~�`L 0&CI Ɏ ǃfL !B ġl}fE*0$�`L 0&�`L 0&@.y\2& �`y�\L>&�`L 0&�`L 0&�`L <Xz:3`L 0&�`L 0&�`L 0& � ES`L 0&�`L 0&�`L 0&HG93&�`L 0&�`L 0&�`L�`�\D>&�`L 0&�`L 0&�`L <Xz:3`L 0&�`L 0&�`L 0& � ES`L 0&�`L 0&�`L 0&HG93&�`L 0&�`L 0&�`L�(R�΁O!p?>%'&m…pQk͠�$~JJoVQ"~2L 0&I 9!'a;7d9`L 0&�`L@#B 9J ?~m>_9$*VX{^FsF/}XoBw¨[Kj>/}P|L$u7Uk/ ~NrBpe*⨽v"&<'*qvIu5ԣVxO/rv)lx ׍-xrX }sZ< Mƻ 3Qkw5nޣB QeҚ@\xr=%x\އN(.@-=gĉcޞ<<*RNX`` }ܱiv|mZO<y"My7ÑV^C#I&tr)n"%*{qyz*׸< 2,dr%fZNiM?nVL 0&�`L 0&5,te[nub8~{𔲣>Kg\(&D|rVG{Mш&TZe%;7(R/?@JKb4{]rRBŊkq5B D.șɢd1ӑ4xDUd\ꕋwhۧ<v6уA8 +ggfΩr5'j۩;F,]t'z@xyODI(KެY`7:y}yZ~Wbcqk! {{w GoNN>>!̖e˖矣…SLHHp399FT!ED딫 E~%)t]Zu-=M+Rim _acd-OC&:|܅JU/m*,̝i 8|ģ)`L 0&�`L rdA&6,/?'O)BW"TK<H8=~(Ai ]^#^s5ϮO*(6<H{#0ڽ5?Jsdoݣu˵3+t98Q=Rrtvos<[uzro8{|E=Їtt>wIh|}5<n݊SNIew B {:+V֭+ϯH !/ldM}zTi $B / ]eoXlm,/Ti^ѭ=nesW&o/c?Y �`L 0&�`L kx#kܸU*Ff}|ϓ$5yoSEArуtSOwZO,>ݷ͚5S!66FMG>ƌE my%sF6N#}oәEda K3EXO\ 0&�`L 0&� ]yM<OKArXx+%``}~;|uJad,ͽ!ѶD-\ pcىUlm1M =B-*:, a"ٸy(2KTNNGQ=T8o.DԎnӥsQs!J*B5j;S:cdD<F'DP Ԯsy9qQ{Tѳհii*G5ɣrq KvЅbۉHn{`W.F1تܗ?PgOֻ15P$9Yx?9ǃ18NDRDx<mBm\&1t`899a6 ׯG_*j_6I~Wu;W=ex-:'BS"R}q%h!^\h9g{jqn}<t3N3СaTQI"ܥ-ܤؘ$TEuSk{Xծ_6,)Çb,x/ "(:&n]V2H~V~xρsɢ^8PPSƥtY{C&&ާs�ip}+^<2C(\{ ٱE ѓ*Ѥ˻4mXy#W3OQȱ?c/^8=?9)tWP…X53/FiCӹs穢ݬUAgϞy>0fKg}"6mڄ7NB/9s.^!YRڵm{իHժU'hGW} ,!bŴކ7E:Օ֩C͚5%[tYNII3Ixᘕ+{R V!ux"8pM4:z8>uܨm6TJv ڥQnB oZY~bTcUP-ܠ-mu+DEs]FFSwnd˫+>:^D_07ܠ{o +Dn C݌O_jJW&{gМ\ظ`L 0&�`L H}8Ǒ3KN 29z.- "W7Yοu'yOliVv6~kЬ SnM#FjU!\,ø̸?۪^V p!̡ʡbN맷vJG*g.Xnd(ڙ"7(;GTFC2B_:JWݰ:{P]1oiҧ6%h];X ۓYv!1a夳 si^Ljo%$sdol6pE;6nfz}3VueVhDXTmfqV?*Y|R yuN8ġ[2̡U4_/nMO}T!,9ŢH(.X=9Ӭ勮+aJ4_ov(v6+vu?:{ =m\}ޚh}VUQ9վ,m=ޝ(!׺z=W-NCzoJvPU7۟46+SIBp) H.M9i=tA'h˖m@h! :1{ i֞i>RtDSZA~>MVٱC*^m_^/s4E4%' 8'}||A~r*Y/]D#F S(4oX'\4|:ɬ ///!7BBB7{r}ܸ鵩S羹jf=6obɉV1hs|H;v2ر/Ќʌ׬)S^3ͽi?m2u)~rQTKHH&|4s,D"nԩc/rNzc D"<trq8&- ]|}Г֘ B ^!kkBpۊN!~7[llLuե+;Bu/R o B/e%`L 0&�`L `+_&F'~:&s[tv׼<zR:]ol2CxAY<ھy cY7JO0E o2[ܡ޵Jحdq%X J<ä@qdRDڡ+œũZY<y& oYxwZ?.r6\<jҕwJ6Yi_ -dq>\*ZLl&{4ߪ{ [C Dܺg)~.^~*?}_֛58.&M š x叟J/ͷЁOQjN?w+/E!29<uH ^O</m牲bŬ/˖b}GڄѴtUT~ /(Ks^)�T˖U̶pPj<>jH!b�)Lz\݊ Ƙ \uQB˷>D ԽoE,^'u?[zg y -AhU}j's-6f7ikڄ9`e \E["ݍKb +{j0_\Exc㩣}h_^EakA`$+՗>ՁY>yJfSZuYϘ'q%u}xD}��@�IDATBL긹,dg̰+f Q r~jr j(Z*hjkkMrWT:)y; FF+_M4AE܊K0Z3R�3nTܩ8-[.rY5b?\O>ًZnEgNe-OGjdo1<=+IOEЏ?.".cw~xC|B^Hms-)jаjӦد:f?Y N; /wq&[-%> Yc^'s_Cц K1Kx2ExU /`Q{fggzNXX q;i]YvYGL5o81Ul]I]z/63V!ک͈߰߆Y bݰkvYKɥI08sŽJDֵ:[%)! ~>ɩ<\v?Wrb`L 0&�`LA`AσFܑ G>$$uHv ͨNzzؓ +^b OL\.\OQV}UJGj9JGMjjk<GV$eWU6hsfӺo'i뤍 6,fvm'|77!.JGa>'^[@zm~VMj;+g^�Ʋw!,: bm.RR' "\ CoAx1jB>'9a|ڃX]~QώNuJjrAyj'}sKr*ahЅpqkF!ÝƾZ[ȲmI?&.0JOʫs3+OЂp!p2 -5{0_q"tA G$sBAq>#gL!4ƒ6||Mh934q51,<T{Ӄf4`/l)Z+jFF18W=N]kFbYY!~Yye~*06M 4A/e;ܷNl/!AMЋ& h8^J}6ZIA\Onf:gӷs/rsh_j)'xX–rlc|CMǃDΡ!Lx}|T*Ȗ4d`e_S*˯_OWu/uUʶ=҅"e�ӗ_}#[ >}GP))1n@6nX'E.Uog 21塶rr"Q֭d>UO?WRpPpB׊t~%L%GBeNf;uJ{JD ~0zH*]^SF5W 9wYˬ}9qmU:)::DHeeW+wgdQkVHltU\Ex̓{*- )fTY%+k6Cim&~å|5a6^ϕl 2&�`L 0&8l  '`Bw:(]\M _J.'[<׈J,}Ocݾ饋\j-BB8‹LyWgRYc c^pbĻqVL%MTi.KU)3p�O+KgEj6vjm]BOh908@xp.[}KQ)^[OE 0"Avm%$$\Y_X2zeQ)6a~LM#ؐs BH2jo:x>AA4U6Y0^�WHL v>h !h #Bn\y3M ք7뢙n(77ZՄ;˘W V!ڲ"DP'äi 5h0^'ISダgiVxa=ۂ#'2 9aI~䶄.ғSuRF4Ө0&nS f˫шƄJ,lY39AճkC*?Ń\(@aÞO?VL;~\^3ڬ=D[BJޚ9LB}w}_ /-Oρz ~Z(!jҺvbBXư躐QzExyo*i(,C » m0 W̕ȅ}-[ x!aHȕ=s!e[~}yc[F6"GR\9߰ ?t 狇Zuqy]¾~6&�`L 0&H?q<f+H½d^#h?$d*!9ys+<0&+rL_om! *<2kuX m(B(�~ChUx^xܸCi K[m䎔?*j=nu\UgIS ;Vm./BחsѼglֱUx"5RnI X\2 bqR9%}[5x}?@ebت(b=L ;8jT˨v`'IxB޼Jwedfg±}e: �gc!"rgFTBן?9t5eU[X`8'F Bu)ÖR[G.Jmwcu+:0/;#C! x >KcQ"4LY线?}?hQk6R%cY)׮ɵf֟gkaYmlY`@lb' &>"oUrN]ATݺvUŹޭ͞<ޠgРiTV-*V,羧un<V, j? 0KCE˄PF9|s+~4PhNu$u{fkՔaL}ؗC)Ĉd4ou:woa?rBѲblL 0&�`L 0� ]x)Qx�!Ċp//-e!ժeFl6baTlPSzv]LZ+S4j;#Re쭪sЄDcˮ!Er]y`2׏ee p=KKSժ彻tZ+4zƩP lgC8Ce/6&IUZzV5,Rab.%\Ѣj )P9 {hӕ+jCyywG,rFM% !G9rl6'A_:"1W)l#<)lЪr(Mk,n[ȫdɉCJ4i߾2ߒ%Kivʊ>5kOI3 )cV;ʕ+g՝wѣͲ{ǧ=g̩~!_{mϜ9Kx-i<T._.lhuMKJKJ6sN[Tg9gB mJ-u䩙oؘJ'�`L 0&@%`>V`O9u]i؞Q2O|a[@BBt~ZEn&N6~b2I1li(>4qg^҃FYf+RP-=VW|͈F\zK: KRєZȩ$aZ=Ҫ}o 73^pUs*y'Ϭo0BÅeVR4*}wem,ڮlkJy}W  nU/wW}, YN-BTn:ҍvlmi�n y:?Tmpl�G%O7*rbXhˌڿ|G Di"!ڐ[H`'6REi.eqf|9ͺi,Z{h:gj521Ѷ D7K+V$fs$ދ3=q˄Џmu!ڵ_ᅰ7n֮Lw6*Q*>@zr'ӪIfΩW=ɣM%BX8c9u.q6‹^SPK>rZ%<1REd~}:CͩϕL0&�`L 0&\;xeE:'=a +_TTܭx %7;V3}0ICX<M\8(G' Ӟh7B˰~2geMvʆaȏ:am׼0VhD@x2"gt]yeXOv  QRZ:EhKZrb_.R8 ω?"쭹u !ƒ z;u1 \5f2dg{e׭.s*z-]x 2DY*C~WŽ,ƫyaZgE"owNF'7iJwGO<fR(.<`AAi{1\Zjk(0H 7Vݧ<BBB*<-n؀@cC2 .vZǭ\YL7έ%< 0_ו+WVp*[yUcsr,H[tsϑowU€p#G[O*T\pPjkKTǜrwR\]>`VNqy?`L 0&�`L ?@=2=A`8 /$r0Y}*&PmUSKRֱZ\Qt%'Jlۗg X߸Gxv?~J6 Wxu +SLFZbr.S;{'7,ʐhJh:ux{mrÔح'rt_Sro>zN*RX _V=pWߠ'&pn#- yT_"~x&ٺkDΜ2%H#2'_K/ea1Yݦ}93͝ul-tyJ87A Vtm_H&/$c8?1Y9iPV*TWRZj fCY~vv6TѮ7rg8qRRݸq.\6eɒ% pu:^ٰp%ԶcJ>U ]8cDz-tUZU^|dggzҥK\Q3w>3tNBxS:& !\ԟ}svUeN2MWL)ܮ3'-!N<ťhgRmH{CI.LZ6΍c6`L 0&�`L 0,:Ǖm[W{ө.Xli{'8 E-ѶοtvmꔪQZ>-ۦlC zyQP8yD+!CӡoMzUR4Kh!0 ,$һLԾ,&0a{PVr?dgtLf wzY=)Z8Wp0XPS7K&&r/=LeRCR34kcq7քgx0&wK͛}F8Nfd+ O5' w^;ANGuPem4Z baUeg%Bh*׍ju5alcq k cu\ e|FݎS cUԜF~QN7a+AZ?OɯF2:ƌ%!4!^RRZz հaCjذ<'ΣX݇~dsl( d4x:t^}u*EFߛ6UVݼyJ6 ~1<y]1UVS\o[5oako|(+T@=JN}QkoGخFfK03VJ)Y̱>ߎp2ܴ\#-\1"ꂊL~+.=:"BC*S%`L 0&�`La$PHLf3x�cNӞ5.) qrr=Xxv9!GՃOݪr7QfTHCUL "}xU=^EEOyX<:t6qW+C'"“*h>00 _'x~0UKQx7D| c/Ng>tErީ$9412k n.8'X9yЭ ◲.RϨ<]ad=mɽRqjش<OåbWGA\qǩlԠ{o"[ҐQd1tk.ӮB{0 D +}9n!؋&NN^j8[#hX7xu|^gԣCL,`mHȧ<p(C ^3vwRevi@ABO*Y^ߥͷL(*UuРtD 6w?8΍7KF]̚|~Շzȗkʲyٿ+tܩMrT=!&;بdx=Rʊo2g~˷>[^R,~UdwUJzR=z6&@|t+f+pV,>ji"1v& x0kڪ 9~[n( +oLv BSU CU6yzaM|Om(B0%[Žݧ6]yss߈><l۲1{ڪVt.=BҪg[2TeqsN=[7}F ))E)9ײzW?ZĴ (x^A8 J _xQrq1y3UFk^cjҤ1={N?Bio юdB-֮]K Ov<ʕ3}'c;d;KG'O%ԪUK(8`ʣ =ݷViΜ觅?֭[IfDŽ`u'i/{Vky}adޮ:u5qquTN}VzyZV䓏i8xDmJD.eZBW6^ye,鯊3uTCUDewD;HH̽U%Yʰ<Q4~^Tzi** A#[UEW'~ú5,Gn%ӷtJ ỳx]��`L ((p1 0&c/О<ʧxu_H"~#2Gr|,=6qcُzײܸ&jw4S+#"ǘ]|J S퐣@Sy'z5s;|B8.x!GDN*xcYZ|L$ a *DW|IqC :~3Y<|W,)R~Y8->x(Gx;e!VFeơU}Dʐ5hC2/'!>^#Ry= d ATX%)L 6D[9n {e1u+F+)r+@I<E|Cq\$R^_6O"*G@evvڵMCIUv—:tw}j=cMMu/7,f#E ٬uYZ-5X+UrCc󞰼_p7<AzJZׯV2,PX v8uJC{*r¡}66M,cpoo9֝fO=.+ _/QWBcq;c,[^[?lO8^]~;;? pT^ ~ڷ,=jF_?%ĝޥU_BDA(zWO2d00H6CYvC?IHJP/0"nGB 7?Ғ?ܹ0) V吏$gg}|t2RLSw*͛7m򃐤$KW#5j)!rMY6zy*A\_X2~+a󬜓E67!Dǃȅʭ^f /*:!:H7z�+!"q7nam]<$~?:q#_C VVUa!-0N0+ԭܡ*ty2mzik'/Yj5 Fz�`L 0&�xGW2?Ih Dk¤ 9#\B 9J ۑ*d,7;E.-er=I�X*'< MISvC| +=q wEtrvʏcC?Bpk >卖@Q_hޕŝl$=6Z+1.a98% o[ѢTmt{+4jv6 Dbb{ϞhQRH9rY+ֵk~2 wpG!ßw(A2 :uӳ2.K~f!Qtt4*U*Vm� nݺ%Υ/_>C R/>ϯkMCS#WH>t]9r3#O 0&=�x`G ]Yh܄ 0&@6@ܲMmjn8U!�;;k/3gџ.N;… -x d@Hd'!=#fL 0& +(Wσ 0&Е;wxG&�`L%pxȝ%<א9f{+ȕWpz}5N aF)rP/Ox)=\<KoI E(�`L 0&� _dfhq]&�`L@~N[W)[or.xtm޼E,{.rLy7kfYL {Db[3&�`L 0&U0 W]�0&�"{ɴwg0N7R̝ǯNÒOLו ~~~o~pQ ''Yoծ]F .bL 0&�`Cr+�(TBp5 6 и `L 0&�`L 0&�$$0�x(~.:*`L 0&�`L 0&�`L 0&  saL 0&�`L 0&�`L 0&#DGtsT9ڀEL 0&�`L 0&�`L x.)`Lr~U/4`L 0&�`L 0&�`L 0& * bL 0&�`L 0&�`L 0&@'BW|zL 0&�`L 0&�`L 0&�(X*Wϋ 0&�`L 0&�`L 0&�`� ]1&�`L 0&�`L 0&�`L(RPOϋ 0&�`@rR%%' pdWA &�`L 0&�`L C=Ļ5g@*|@>~ JGWbL\%:|%Fde-]cWD2rD/ʙaԳlujtlWp?W>ABb; +Qt=FCxe}]] tx]<vR=_?& \,ON\ew5:uxG-e~=ezux_Y;zM]ںv#sιu^FDv\̱Cu4޴4ǝ͝-Ǿ~j.Ֆ\SXH<}'WU:Żoft"~etL ݡݾq?]#8 24Sxh05>@~/Cm`L 0& 4_=m09eY@OiOJ w}M6+*L6MONU#Seq~+^vɉɲ Rd`%9龬u0Afy^E ,GjHUJb{"I\G@bB2>#MfHOy c6bi˟/.輟ZfXsGrX7ڸjq l=DN%\dQyJZS#~/NJL4}WǓ?k+޺jm@HWA >ͱ\/\N/ D%GEw]RvM=|^Rih팹EGL ǁ%6NLpI7N2qQ@8 <Q[{fxψ| W \ݼGjNH^ڶ~ ݎ0م,spH�`L ' Е4I}q*Z][E 9>'{ސ̤:RŊQ% ۱tn\ƕ?\Q\tCp~lP>Rm;<ׯҾS+-<5Ox\JqpQ$tЕ;tP֬Ce]* {b88W1Wat^d)ɼrZyq8>"s9\\QcR[\P [(;B Ie\]^H!nm\7,9(A5kף mAlL 0&r�%Wr@1WO֯ `@LG~G\虻TV#E.Ehȫuiu.U'?,kkDG~ #� y"#4ߝ1ܶ2nr.kn xP|<(]FxrxP> }<n# / j\o_toӼ w2*SB`L 0$BWn}X=9/o6ҨAq&!SiCtC ,T BoS*dcwrSb (b( #R]cUlLwoDR`s)Eϵ}u*榅鱬s:וKvDi�JFOm+XYO*Ս _os2}(/J+FՄ7JVTp?DCnvݼz*VsV]+P6ѢCE T3yv J]ԏqj(![ƥsQqBQQԺ{Ew#0t\ `yeʑTx*ics(Dh³.E-]vp/..^IwnS.Tϻ,uwLm½$:=Eӝ T=W-A^I.6;|ݦ(*X<KniKo&C g:-�q4~<5hU|NEѝA,{W~!|N&?rRWq׹jԯ\ڞ7(Ewc=xX+G=M\#oߦp7Y/.#颸noc=sZ{WdX<Ut$:.Ta)*.[{.jW&GDxtd<=NWNG2ҨouLDޥcPnx?ϥ`YCEvc фuyGQ|qQB!JB ^X(*]T_ D{o!ZBI(\fW. x/~=iˊ(1qK &[٥oD^i)||d<o:_aLK9B;m"xyxxR*1TV]*t$9 +ښ:9ĺÇ(aWOM_ۤ9)[.1ح}:IS> ز&SZ P_.Q#??]Mul߸VP;u7 p=c\5MO=J׭T_`=]sfz߆۲x/^Q]A|S'hOv|&#X|�eff{?F[־rsI=rHPkv0rrLAϔ:%oZGǏqܱ_Xa8v?>ZFoϕi|\:WV=^7gL]/'>nw7RHX_;5sGs4MGp Q7mit TdI@*ff7ߴz9_+ePŨjWN9{m2EW+o sfeM\jRD(._u]Ho!@QH v\MHP8l3:tHsIvKB6jήh#eml}"+Vr)HN:Ua.޾ٿoҏIw!g +Uqz9}ZKa|40>cU't<^EՌڶa>+FR:s=gqM8Na|qn\ڲn$(8joʹg\~;ıc|-ES՚ra{>[|1{짌'=,4jЄJ#n#^2A!T~\.}s?~Jzy<~q4 M^OsW=gќ2Rt6$|%}Lp*U MI(GMʓo炔S T 0a=oќYjBBaUN=ѵo~~9ω-cJI\|?<򳕘B@Eڲl?!p):V:0;QQݳ.ޙO{Xaն2BDrd<A[F) a!rHswdxZwdd@nG6&ٕABIPsgҞ1h{'ݩ vh!*^*Aٜ!cn"aH5,H|4tBlK_/b' ߢ?ZʱP6Ji Z!s1_eU*SƗ"k[Icvxl! 6oOlE?*nfVi,#WҦGwoߑcΰsC:s[II,"ڰϛP &}Ǯ^.ϴg/˓7mW)_fwM<J?rF=xI!kRqlEZwon!W?xj4abWQ۩3S)n} ~neF9O) q'uVc:9g0DYFG,cBgm:ѐ$FMkg۹1d鸟7w?|Z%2| 6 ]@_{>=0&6w"?c{̘NygߐH[AQe )ڪCƙW3Ϣ7$: Eeq|4Q7'̛1~rSyͣ_jzm^v ^XtCC pVi慧_Ӝd/3~#{^{bNϼD%Mf ^<O')Vi8;~ޱ{~e3o֝T'm[aí9"|lϾB.8v>_kͅpMs%y!CAq_~l9 (Ƽ36\jnއ螇4{: xo%F0=Zl{ :L/M;FpUyBx{aP_~*G{5[8v` ܾ:Fvʨٴj\7[}L?6/i,Y~;m{�سVdǼ a}lڶ=ls|`NR s[8/ݧԼTę7zrO_Om<~U\XWX,w9&C&wպ_˷cו瞮̝'Q=ÂS_ׅ#>6]n1'y$s<&]k'vAL{us+4M}F-DIk;mxdQq_O*W3J^]/[@vT{IuRBVl~5Ekmܦ.fXX4gu5?誒l�~ xLjT\zb9G{m͞>JV5D^ў^+VR/Ry3YcZ%ʂB@$pc~ X5Җ6P"?�Dp{^i<oN8F=O7NJ[jJ-ɴG~sJeoW"<ꄨ,|m]>wќݘ4/Jfy{9c hUYկ˝>pțaUŅ)zje9AhHtz>yPܯʞ;|bG̵K)!вZ][?.%Ǔ#C'-z>>KcYGEC4~ Z='IykOvӣYW C,)#N<z-ow7c7nROĞ)'˵,ExݏnUKZ?<>xEe3iƏ{r]-H_A+ߚIJ(ÞO Z͈JB=SE,J?zVyAg >Z@z_$U]Rt>z]34N?<\[QP%x < w ][M<y^:o zk#URN* ofaO[T?VD:[`~֠u a-52x|!ӰH`VLث pauWަ/j'S/sٞ U ڀ2*ּ y0 U=ا&C)(ܛ๵ei}zm87[כY9XaLFH;D2"=_t)cI/kvy09֛= O"Nxfx`8셁K ;wW OYu=;6 jYPE~n3 լg}?w{Z6o*P\XO3* GBh#Yۮ=h9o0^Qfm $.z(]|G{ˎT>GM8Tjѡ+Jo{s/7Z< (vǪʀ0ʜ‰ci܀Z8=˞^<~L1W¨!ǞQϝ߾\ͣtٲFz`'Ӝ鿫uPZ0 caMVH͝e'|b:-uCi,.X%TΗ?eگ?"xZijبOyzizުs>gLgM:! :KQUk'hUjakX܌Wx}߬Շ#TePu-7N|u΁œv"Χ}F|~ר1ܦV]tyax۽={qq㷩M-s_:Ka/Nkpu!x, ��@�IDATP]h;?# B(=۷*MsG#Ͽ~MDzGQ ?{vA睭F\ ޽0nuܱﷲHZi;㺂aJ×Q?L1^Pl^!Tuex^|I˹kh؃=]-Kk-P ri |_F#Dzs e뢼Ҧu+ԵyeOg\O7vE 9ݩב9{߶,<|fyƮtc /v^B 9~ e7>:όSD</WdL7Uꃆz {h7>C ^geYGu˳;-K<؁׫w% l>M]JK ,=\WPp Le#j]tco)|k) \_GעסΟ;ިcjU(OspxŊ*l!V0E0!B@!  ]E 1[t-Sp`jKT+lL53IƽP/ZM~ZE2j=B 鄇c.PԎPm:px@ԥ ȅfM*9y Tygĸ+ ]I( 꼻JUSeC:?F3KgJN:GӀV ?e)R~.]''}#{Ziz}0'~&*XchX6>쩏dI6!B#О i^E.b75Q `ao0?ZүC1faUoR+v_q2cJ_b] 5%?Sk=IXCs'/^`%!E*s5QJ^@(ǒY:Y,"`ɢԊ8|3}jRAՈZp@_p}{k!tE!r}X#Zurweubqּ"F`=xY=Icն,A@4baՖĽ8:w VLү2|ާ~P\%˸5m X]NԠ{-V9%Ђ.7g%,w n;8'u=J{];ESSJ[y@ݧwE~>9Y"rWe䰀M":[567ƌ5==Ug)O*YWѲzN S%eE.G=O+΁iPj,Y@Q aѴו3]o?ҏb7OUxVh=Pc$0fu36'U ѣ~l>@Ocա_-L~NGwd[-m|M6y QzAJ|XcfkV"wOˎ6<Axm8pj /ox4=^fq T[ӷ_)żn"f( qe?=ڹе`Ɵ1[y@x8?A7jИ=2kD е8uJ}W»my�#N2BuzyJmYg6w8<i6W=aQ>{e^%iqHöV^[8~,f&VMkWPzIn'ra94+D8g.uz?u>?NЈU qN|g?wd% `5q,=<X{woh g{~?U[!ކ8G`yk8͟96}6o3W{9>}P b2~O+1ּ^yp)jN2]o2(/0P? ay˴ZTMK7MDm#iE/wm"W"-W ZK}} Rϖrm*So-/uU_lKX( i)y*9ZTXEDsJwQmĔ8u+NK/WOYsXᾆ=y^2J;?s(!o~ZNA_py#IRrۜpb a׬TVT~1! W'V` qԼzЎ+ PQS~s*Nh0y[{$ Ff8ZP2qgQb xH]]8%; =-?$B<ԂA@s&l\)K'MY6 S8 bI{d<fx=E,Uɼ>!Lc;1[cKr贚N\ȇi/9ўS+<̣EpchFGB( y!r鼷>f!%Gڊs )s4`2 |gz9@`4[XЄqa<&<` [ Yn`<͆t>nC\&-=aOZڇyg10W۲' Yh{ˀHGEثŽT#ܱ k*J6axdQ>sJV4aȅe\=8OjI|_{kt߫]} Go�GϬ2GeIKeݱqFp9̶tCN{#rWgWܯƎAFG(iɋ3WUf]0FPfm2:7ȅ)g86yh^:+TN漏{J:xq6Ɨ|~/nX[2D.,ãu PwMwa r،Q?txX#l86C؎ 82t|k1q[ Yߺsk^Zf7 R_MZwpk (s/\muмx}猭\<WeV87b#{R9<^IqҏqT4-`Bܓa< w㟁Mm:Z\*3A"Ϗ0ʸP<#5,1Q|wQw|-':`375548{w%c?!raY^pIMcy8a#k}{Q̏J[^&U nWeMO*O"[u6I;7"co@]%,r!cct:2oUq=AQbVX@~ּ2iZяQNV"yw3!0?5BەC30oM[5O4g(Usʙ2ySLp_>LN;Α%s0s%CxV\͞ԬUuR1dBJB@!  @ސTudħҚ~.o]`9|&*8ٶJPtl!^̜e1m;?XD~XNĦix.mBp15 ,71-,U06̜Oa)lGܪUL UZA.ŔB\Ty2<:TevLOI{ORt%_aL3Y�o۲"^mվ}3jVrȁЍfUkbP|x`.s>y*(< ~r%jHQ01qXCIW2 DLR6c4ggZ Z ,aI;qAO;|ƨgەנ5ێr2 sJdt^v(i3 ]cy/=AG8BR-?i#檕.K?J`<1[9m-/ǩEpxu`l:FB4^0xֺugFnT}R |*g[QS-)u>:8i3O;ԧGɷ3riQ'TUyekBh7xcP5y�{#;yx$36ZƢJ_]Uv.nJRYZhjFhUډvʶwϑăt<=auS1/VVpabjgoAy5+G_lLY˵j-0v0xlXjNvy>5 Akli) o/j^9/k?sQԺ]Lhں ۃwcBJVb%uaX40%ώ&'!*Tq.x0a^%}j1̣ZA2Kh{MNt~}eaO!ހscQ:ߦ\OUqvl-Fۤ|YY]=Uk5RP 5z77ss 6P7,^؀0ʿ#,bG_PWьi'Aa oK[sm=&oQzɧ{L=eWRu!2v[~wM[kg#swwCPag2ʡ/##>Mm/̾mp v˫Öt=LHGU}RX x[SƝLq~9S^rBJE3mj֦=PYӳxc4Q]#Y0׹GB@!  ]AyEHh'TK-z3,Pi]dcnUЈo}!LAm8œ¨\;\2d̥Є;=ݳtRW7)1Њq(l 2xxZP7ׁsl߼~cړK/;c4f<$WsY9o- ZLmYXL؞{sP4u*,Xq|W}uQ2{Y<=4V>i_=>99#}͋:WY)u4z{1E8qrmxڈ^:rPI|Ś۔H{FUPb%x|o$MeSBNJ5Jt#L9K^oi5={\&4s/`k~1 c۾qn^\MoJڹmJ[y15:ZP6W 5-lStWZP0;Ghbf/6>Nc^eKs_XAՖ;NM/?oJ$+Sa1rAvZd &yC^tZk+W"%{y&| Pp0\?0u'n%XږǸ` #y'˥s%YS'N+V̲�!O=dxtiϟYFp7G ;so}%?ڥ(m.i>JYJYBH+;;OI-"!ړ۽3k |Cc>5Val٫V\GxؼN]3ٳX&*柳.KG/UIQ72;tX+HXϽvr{K:MO3m:TQk%MU_!Ѕ{T5)ڭr%JLYk<X0}ãrS!Z<2B;cu8`OY~ߡgMWնփ=E_ɇ9K5H !  ACꍱx_ ,o[Tx ojU߈nIj /ų<.gZw&ijۇ(} ēzJ! Z!\SG oOc% )fе}K ܑ =j f0Ns%dΜ?.TsŬJ\Sd 65x~Uaj7 inubq<ס 3˫CM\M:Okذ6/OQ5\fW߶cEd ^"y6Eeosy,X9vj/X?{5{9evIF"W!T14hGn #cʸ0.\o8Tu!NJˏpa<Ogw ĥ9KeXrعUΝ؆D긚vr{2s5B`HƠQ/6dС`h+i[ mtҝ=s֯X-r ܱ^.@DϾޖ*iyQ<>Nn;k[ƫ3;b]6 }Vmk|WS.7$3v;i%&vzY^Dƅ l7}&`柴m0�Z1_c5<1<n}ݞ_ѶE |y_"אoqNTʯN=,ٶۀrIӔ*ϜxcWܰ ŋgW~[̴qg9} 6 b#͝sϝ'CԼv۩hj?S\GPeh}c ;ûBV>z=_+<8fk^-ɶ\NEcsUgĩ)uI<ۘI%h;j>+Hhاdg7mKKy*8 dVNOy,8,.;OMZV^3NRbW\6k++v&  PizV !1,y! I [(ȭHW�9^6>5LISB jg"N5bfc<,WY >W>3'T>?o_?z%K@n|.ۅWPanxmS o_y|AfO=dvYڗ5J ~|"t1l^Y⍃M)iliNjյ7˻A]^w0~FNNwONlӵwYj}'XFl(˛]_i sL&-~F>aX>+nQEH֘YHXRƛ22g͸g+gI?zmfγq Sx:!TuI 7M}zKS7%<Y@cҐ' B՝<n۝C9<cYNvcuUosCT,"&Uxejz UR&J1xxd~Tr<6d# '=J[:qFBba[! @A/ƱcyNPWu+S;Ux<][֭2³CK:E%op3>N9vIwBNZAsCuMb( _v0R{�#X:Qstu0Zv=5:48|ߘ ϮX33ew4}{<V[iȴjPhՅ2mY] yǔcƔÖPV6 g Ii2z+O蟦RI=mu{>}7uq./TcX[P|z]ziSxV6xe#,,2B.g^TW.kwa&gгPuO;;={<<~sX{Ezy(b7xZ~ |J]hs;"[Fz˝^̭^mGWU/uU* #0DbNF8)2ӸVQiERR Or9.uTr>y:ۙӧ3H_-,E}e:2xPgTa %ח=$&Bjpnl@3w̵Z(51"pۆCsk~L3Զ+YD+ul}v'V9p̪O7cL/Xm:٭)6@j]׮u-?@q yF椭j׬U ]7%eW xlmMг>c37/K1B!"y^hf݂Jt2}<? Wc}=;3Ý c<jƯE(c^-Ij-n޾y. cUkplwێ^ `5mk1x`٣p4˹s{fZպeUۮ",y[k~"WP(O B,]23 6u[мJͣ luߤ'6j֚6nn(ryRr;7ձgnG~͟9}ڨJ{ <`y>9̠uٖC>n,]h$(30nV%rᬿTr~ׯ ewu*agٯ83m_?3`<{}ʨvǖƼ3aTQIlw!(7/zܙ%ν.^5x]>j835W ֯ZllJ_CF3{O+E-[j$8S«$֛4lJn۸5@u;Uy7Yᰌ+u) +dlЄ) VSOZ e~'K ȋF[*Bҩϰ~,0- YbG̥-/Q"3>ךڭJ'nA8Dr;9V^wt;`5m==ӎeZp6x^9tVmq}wlWˍR/+eF! U"P*mG6(0jNwڣ`-iqg$`X;: [~vWLr?m|O0OZ7 ٍix4x^hyXW }.T^W[Pe=Sϋ*rg?xϋ{S,? !vizk }dNwu^dG :Ws:q񔒘omoyoFZѰg9l#Ms"7ZΦu~X՛/6-\/=)u[:ʛ,ƒ76۵A-C#ML"p݇ }}U8˲ƢB™SisU~õ*ڶ*ff<o>;a,E*p{s !F$VDZAGx/bK{:ܠ8O`|.`gOgi8nyߏeQV}C'3 ~Zw%w$׫hE;-t1,/noj5lDj50]ܤiڻ@UopFܿdGP'kɎ m7 ‚B-%&o>wܣY2g\lTyà1^p*ϔJڦ՛:=/XЏ}Dq%Џ~j5M_R=Б? Ǫ>Zsو8сQVu9q9*y9>nmUs hDBx,FF[ۼyFZuFqC^ƺ>cM݊Uˌk}Xʎa6 +!J<y3]4ި6>8 üzӺ{1xc =ܯhʣ;+ӳD.EW<uxicyU#bVNqz1K,0 +r/VZL ߬\!Ls9=;U1-g.F8z$AP;7D)p6t-/_m'O3}AF2 M*,t_fXw9]јiyΌhќԸ/=ʞ\}xCh. '_ <ᱺ._{T  JQUsڬ ! (P v(W">'6'`+7؎T/hs-FnG;alm|\9Q zG~RJC)B\8G) - Y3: 6TBHClmly66(w\p=OcI1|`eA%~{Υ$/SMix6ЂG9kR|/9xvb1t঵"o<j7$/ç5x^ATozo$}zЃ<UVu0=%Mx}"~&G$RpyںhOvGUY cBnc,B-= VARt(q|_ &r{E1 PT2Jع1Mmٝ=%ꭙD#Sjk1BxGؠ )vWo@;O&~5o4>sa|ovGi9r%TܳoÏlr8ϘeiǺ4q2մ"- u 5*t"6`u嫔Rj=͖Xo6xtA@S>pk\hIueDg{O'>0\cWuu{3#圇ȯvvGەX=BA[6|91ϯGL!X!LUۮ^Vv&tԺ 6*:;Fܰr pHb+v7 wW<<Kͷݥ3BgmMhx`A{~[m:g}(8kaoB΋NAÛ<L4 OG chs=Mq.Uq'OD(*V8Ajթ{o2~#u=,p]3D.cXZu 1#w$iqNb;G<AtU59ooS8xRٵM]k.q_'PdB6{l] /7G{a쭸-7v7rZKM00tcf(6$xiCݯ&ys5EIc U!{fi}չ'n;mWtu!�]i?lX{1oXM,nf GU:GyCHYSݵ(}Mޅcg֝[.y=`U}˭S=~=!sq`BCp,5ڡ80.\ Dt].s:c+piv<'-\^Oi+-镪`#5^)~k/j!ӄ9wdYyxszy0 }OI=1 ψ]-RQcQqOQg` (VR֭=Z'%-lmR^A b[@s˵:&uyW|X}ޥvӓQpnѶ݌T*Qw<w(?SY Ud^! **µ1?2[`(jݴa8Yɳ-=Iu> me`S!<6חxS; ټB(w `M[)檔NYbQ̧,]FO+?ڔmffq -*nO/_@8,凁JU罵t2n)vE|)i"m(%蛥]wXaxa햁UԏLzc<|mw~mE^:u'>:_)Q4H.k74R緻( !/? S!8΢>mJ_ hCLLK(Op`)C]q'͏qY; k?6ڬC`֔p2˓eg}lp?!q͕2-jL'=h;KybʌLUӂXXVZj>c=XS W0u ~]dϻoGl6kK<3mޘ5c#gI֪1tJ,W٭kj,jO_8.*v[8W[\A }u/{ >?}*1j嵞V+\va wa޴7,6{h"#( oGΝ F-kae~vZeLLMו(an#<hj7ɪv=IQ5byd'Оt1^|nU.oW;ڞ9<BO4_h{g`ZxpmvqFo(AD{"pC(4) fȋoR wb!WTTcZ4]{Ho!*iùܬmgm-Lp>>ziu<!Bqx:0c\|/韩xk e!ԍl`0i'q6*7[DC6d UEA8&>c>u9M~ ~'By a{<H̲99_NyrK39|(^)4šeHO,iˆBT}Oi`OU~Vmc/S>M~֜bӽMc{HO1zz)|Eˢ$Ǝjf5^ j_i{fZ/%a|.OV\깧r /| px׃_Wf d!<͏M>5N�8p9g{OAS|9;&-y391P ~hhkYIҿֿ!!j̶fx1V[q_O.Cj$5 M玜R/=K̿i =6xݞ],z<7\>`ĞRS4hЋ2 ]yUF\*S63SW!  "g)<m*-`.�pGRՃ[Stzqz*B%xڒ,tq/CCXa B|0 ڇv^Ng0Rg̏<2Ry6gP*Y>1&:bL{J{PXRJȱE> t"<{%PIw*Trpߎ< uTx'Mͼ}XD P~e_ :>'x(/ý\bb,ŏEbm`BȞ|=:CeJP(_%B;-<Wn�hGϨT bOD?禪p.<JX://LZhS%kN8Nxq*ϝ b !|[ҁy\ 6ym/::Ľ U:ZU69dŋ(B%*g_nWC`ϝC8# Sl"[8S/9 *{*H ]>xIkhr '0$̭]P'1Ō`uȝt ι ,Д4M킮 CHO=`,ϛ~^JxTҎu=a-fycYg-ߗ|Mo(h! %.c+ЩN;q,Uy-cr9BH^eLŭV`n[o*g?t?F>EL9w;F s:Ng3҅L*BU_G/HS‰sB:ۿp=P[nca<©])=s`+yN roIB@+*]WfeC`HB@܀. -m caC͟[خe! B*@H(h_Q6( ]yK m/RYe罹>P0ZIIiSX. pHÄ9-tIPHB@\{tn0B%) {tד1IB@\F,]Im8mxtE5"D.Rv5BD +Oѣʛ0\7B@w .9)'B'�kCcch`,B@! U"�k9cx̶me:%PGLMmeY! 5G@kIB@հ]0%ĞcU.E ۇPw\qtB@!p?d5%%E7ۇuZQȪC(-5""NHCǝ@! uA@r0Jl`7I! B@! B@!"sdB@@]~tU! B@! B@! B@\OD躞B@! B@! B@! n E.@/Y]=2٥IB@! B@! ~8II! N 99Yxt]GZO! B@! B@! )+%B@! B@! B@띀]B@! B@! B@! uJ@n ! B@! B@! Bz' B~eB@! B@! B@!p?]ZTy.l?/].\ָE҅KvKn%B@! B@! B Pkg/6C5wNRK/@#}޵SRt5tE*W#|J]3~i#XvMnJ>b& B@! B@! B@! 4"L#Ys%B@! B@! JX|O*B@k@rrj.6Z! B@! B@! 7<nS@�! B@! B@! B$ B׵yܤB@! B@! B@!  uß@! B@! B@! &fV䀗ٝzT^d:u86|Ӎr-"ޥ-/S mD C)\&^HHwNzT5KiRrœxJ#FX|TZ4*S5TU5Z~Ƶ1V Ы_EQrTu)FqSw֧SFIZ5r9?ynGEācoԑSFܾ4R0 bdo,%#R@�})V6 \vƷpާ@BYG8>d1;7^-m~o^#f*w>O`3/G'6o/R߅hϻj=yיAZKjJGw1_=tJ){z6s[Sg)Oztl9~?\XcuOm 2B@! B@! B@k]ȁrӦSFPu_] b#ھہ oi DAfv{ˤr5ًe3W)KWVy7N:~)'\_n ,hοQTh#{ϔ;iոECmimu+X_}4:Q``θzlnը*)sw$ra<zO,JJЋj(A$BWnۮς٢W|f��@�IDATpϙ]T}sG cޝ)ihZP:ehTBR�|]僨0m6uws_RvsdN;B@! B@! B@ mS*{ru'LsNqhkgWW5H5(˗ b^w73vQ'<~CںV*YJB"Dj !l]JBzE)*nJ$zJ\HGTab 1w6ݠ<|cfڶbc )ǻt2$k_W ]:"aDF][+Ϻ~%twf B\~~!r.x5~k]Xqcv)Oŝũ Aد5`/%߰R("&B@! B@! QH*"%p9psh/[2?q yKۥrH eQ';{V3DT;j3R]IrDVꎣvqL^d ^eKr†ꓲmX@8/tsX 's+%*){590uwצjr]pUoXpa.^qѷT]|,R ] UBYr0?pI[;vF%aiЙ:XEQ fm 홺3Uy6xp.S! B@! B@! (D*ŶIxqٖb.H3uRӆC0u'Gݵ|-Ê,N5Pе8P 6!u%ȎlNα`t%<YXQ~Io-JAXź27M%x鐎.:aܬs[a_Û<J :s;XLrK|}\<sQ 9fB@! B@! B@!PUu/.sNcPֱgN>2Gj?PKN" X 巛1nxʼ]W .;M?u8l\^^[:3Oq6~N>VrK54/ ^+[W qcs`oĭogƩJtھpT�1RTXϻVci9*l=~l1#CnЏ B\Ǜ<ĄB@! B@! Bpxq (Iw֡8XIUe!=-bMGOOq9Yua(iy: m吀>SH07qc+ꂷϩNϞ-?mTatA78!nOzF<L9OR6Rw:Y tN|E=1֖6Ŕ3ښ8bF=Y$ۙr5]t.O[x ;g6\l. s>B@! B@! B@C@s,e6pg}xi?3a<t!MKYC,K2[7/(]B-"*A8е˵k걧3VRthAuoEBY0nkqEx1ΗV -x)AK.I/_&///zhuVGT/MZTGv5n,Vu@Լk ^ZF ]glFO(}t)< tXv?7[e:8nV*O-_`n^ TO?N~JW;[k08HXoM*QaIB@! B@! B@K׾hًÞv9T3`>JD >t8yΦ-G4`CHĜt2j홱˩qb(C :8cABT߷>S9sf/T)Shj&zF *\jf;)w?ҳC uAxh>1~_0ZFZ||<%'1Nyg _b -tƖH y N~rRIR"ҚsseJ+E]:RYVވƘ~gM52zvI=CGS> nD R 4! ! B@! B@! -UȎB6#|}IӤy.SJ@LN#=n3,'ЮSczM yPʖP<a={tA%y+ktS^dtQ҃s}FU˪\%zlE;< r 3J<WqB;W~ B@g(KK^_D+k? :8K \ ЁEQ-]lex U0mbTFəN#|P.w^D14OjLV"<^M[qR\i2B@! B@! B@kۓr.Z!*w/ŽS^2 ?ҟnҗ॓A$w�fJgybNŔW:XT1ZE D/LtXsH@�~7{n bO{'˫UX1 E"E8>a5ܦ)ya3k*rss+j.[:.`8`ۼ^fVl~s u𢂗-<rhVǿrQ7O1N= GOQ~*0 Ǟn;X" }Nc=w쯘B@! B@! B@\pص8f>^ ;rVJJyrj0W0C=g) lYJߕJ+ :r+[XMg mP]?,1UFI'W1(^`;y}p )Z{]ȍ8gU^8Ό%&$B@! B@! B@ɪ%ӻ]HvRx ̠P՘s) z *ra#$<5 rc.5*VʹYXhU@E.4b]``7[*ńB@! B@! BZ$ B׵xԮ6klӷTH:RA =+](MN6RP^Xy݃#hl P!})/B@! B@! 7nc]~g(YUҼ֎YEnЋ5(3B@! B@! B@! ]�Qp@㧚DSŶJD[)%!ys5FVɀѲ7p)#B@! B@! B\fb. B@! B@! B@!  dՒ= ! B@! B@! B@!\%B@! B@! B@!   ˑv! B@! B@! B@D@.pIf! B@! B@! B@B@r$B@! B@! B@! .%\Y! B@! B@! B iB@! B@! B@! KDr dB@! B@! B@! (,D*,GB!B@! B@! B@!\%B@! B@! B@!   ˑv! B@! B@! B@D@.pIf! B@! B@! B@B@r$B@! B@! B@! .%\Y! B@! B@! B(^Xr#cGNzn!ݳ;íRH! B@! B@! 2*G/ZUܒ\gmmlYW-}cma#ťRLJ\yW˗.2gPًvuHB@! B@! B@!  xt4a'W֎]d r˓ "Ձhhϛɳ'ռ͔GhR t # 3miO^ҞIJSɧhJɪ5Q@L9r B@! B@! B@" BWAu^xhsB`g(ak×k)=>h]p`c© 4ty%^5ւ<|=iw 3XC,SV#1a.B@! B@! B@! WE.kRY83^! /g^y񴉅ۍvC }u)~4 XU?/3" <ffFosYY]i{߿~Vm4l沮e9" 8*32 w]Odzk{ߵI Ա,e0 #K蒋ZX$!#^  x@ P�(@ P�(@ P�NQ ;;[d۲ۼ^nr yۗd`Ǣ$$NI)!pp1"cmLK\eu}kjJUgl${vI@mDtظ64 ҆}B P�(@ P�(@ P�Z"taKۨҖ0rd__$"!?:z79=zHvamVxtЖ-^Nm-ZM^VeI& (@ P�(@ P�(@ Ph cKZF4UPSUcYms\sF%}OφUMh4ic~_,�(@ P�(@ P�(@ P-0f17-5F+.}e"GF`˫;TF!:Y ^auꚜT5(=\u_7a`[;(@ P�(@ P�(@ Ph�]-&l$kگK3tt3aÐ>I "ݭH__dه+^ z'J`"[dII a7?؆Km:jYae ~=zP�(@ P�(@ P�(@pJk qZ_ mnr4TV"uN$j{fl6wƴR{{Y _) ?O;Pw߰Zפh51n\S;(@ P�(@ P�(@ P'mu0Ld$YP^--Va%#cfC5B$jJ\;>nځds\%dqoNMxL P�(@ P�(@ P�L]mF ٥e-U0]|#|Q|bB=xQ4b&k{p92{K7;(@ P�(@ P�(@ Pm+gt1:Ѷzt bYd> xc:a] fƳjuRd¨2dx@ P�(@ P�(@ P҅Sl0쑑e4#>5{YlxΑ�(@ P�(@ P�(@s\]ǫ3A.H"Ewf\(@ P�(@ P�(@ P8:NZsKRmAc9% P�(@ P�(@ P�GOg ׮ԫaGȆ<�(@ P�(@ P�(@ PgDN+gμi([#79٥p@` DM!rΜ(@ P�(@ P�(@ P@vvz`ίϝOK P�(@ P�(@ P�z=|? �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ P` �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ P` �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ P` �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ P` �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ Pp=O@NN �(@ P�(@ P�(p:�o~+JN6s٭6jE쾥&x GEOΏfٕXH~oõK؁"gB P�(@ P�(@ P tY{<pvq~@uFpPURQJG.)3jϼI67?9/ݢ}J0opsskhrJJK> p&"(@ P�(@ P�(@Us{ↅ%ޔ�TiNJ!PE_&3sv1)YK;Yˢ)@ P�(@ P�(@ P t5lmk7)M&ꫮ<D P�(@ P�(@ P�Rm'c&.9:*ʱ>9ꖕ oN[�NN24 NNV}ZrRy,GwC޾$o(D ^ -Yl@>@ B@T|};;Gy{+CND 3NksUY^|#QSUpDF}w.y [ph);{o\'$ g%&t!]:XM1@dV 0={++5a|ծ y(9Vb`'hKa~R A#�Cc� {ɒ婥>zOI*Bi =sJLg~wSdgo_[?U$e8"t~gNҘ)@ P�(@ P�(@  tIVVڮ=keuǧ%{7I+iVh;}ܭ];rx(,]ߞE=R8~VO$e}e&jkLVC�>j\V=(׆jJ]/]`7�٩طj~W݇y߰^hK7g;zv.+#(s;3oHuvW}dU;9yRDzL& mTmZ;Qt]>x}qM.4o/_?7SƬTl`8YwmDrb!^zwnj×x/[ձ? 쫃ph&:>1 ?M1Ho;`f�(@ P�(@ P�΅Og y/8蒶)eGKU`kQ9q\]VEJF<6nN2Oa'H^] v`/`ZRkVA.߽߫\=;";e {r\%Vܲrƍղ۱w0UYcyX_TOht}|BP|xئϖ6!s!qUxj0.K.nǮ_t2>rM!#.ex]X 4~|n:,9ϛ$j\jiA1 T .Cejο/?}3afdR|pYl Py,3CzwcŬe{S gު=N P�(@ P�(@ P= 0?6,acN_KHUKRYK d݃joo rI][t@,&x GTA`AQzq|S:xGol5 ̫-K^U*h{S=0Uzz(Ͱ_UionfB$,Y2˪F3]&`Nβ%/]y+yK6(M^ 磸 {c5U'K!>D_D]Mqɤ0ru5d7Dzo;1Muoڀ!Mk@>:7jX%hX{^G`ש/c!Y叁F[f?gwPVR�(@ P�(@ P8 : ?LY]jj Ó-YXU&T̔ސUhxgM=t0-r5OO (V5/o{3+\2W@(\7%P}eOn;N w@\,rZ@q9Z^m3e[H˰ `B"7ϖ}^QՌG>0י- t9,'ksc3&].IjjNvּ.ɸW$I UF寳W@^}Zйǥ=dg֜Ǣ�(@ P�(@ P�(p&Z31c޳zV`#KrGuG,1ԼZc,S.i6,ܦ%wA Ժc7W]]-Z=~ңP^pa/_Q.pX[csMx!j UKoxFxE 5,lϺa88h^jQZ6C tehK2ph\�,'ujr _O^C@N i_zDf3 P�(@ P�(@ PZv蒅5j{C}j,mkנ,Dhs]Z2ӥGkk3,I匡>Y{t]]޹^{Nv{44;+ 2KC91/gupu\ݥJSjieH 0ge4?iP+ެN[TaRVCQ�(@ P�(@ PhoZ[@/7-5>ْzK_FǪ9+իǥQ} bnzs^\߰T6jѹmxr\z :�R2,~Brٵ?,@(9cXk.x}/bիںy{ K^¾_}݊MxtGTS},yx?:>m}bu&؜rgcH|cDej̎�(@ P�(@ P-_H`+m_,ghgHZTI__dz -ŧ퇤'J`"[dԵ¿{?%UthWKQ}Kc_kn| nxԪ]}Z{%%62'c/G޲aǠ>_)ڰ ]ߟdupeĤj?Ӹyh3_H9صu6 >\M-hb+B's^y8<sӪv~fZ]kKR-]z mةqj;�(@ P�(@ P�EO$Y]i!^.ZJ^;&Gw`!1-i:tH tp;uokH;(9uk}?G%%ɰ:7]$kKmVO i2@g>~{d%  G\cU?v7UK*21]wDخM/yYgw2/b{-*K c5{wIXmxP}\QZbBQAUˍZvSnw)/3aٷݥA6phv6zKY ͦk}WVF] ޶{Yݔ'�(@ P�(@ P�ΰ?oK^Y[ VA;6ރA31 %dܕ%h  [τ;FZkQp`ը[cųS$^Va{oœ#髿ƎgkoQW[)TWWcOh;y ژW|l nw>,NmT]A!}֞~d+*OD^y~́%#9"R~.|Ԣ7Aj\{9Zgeʍzn4g}I`Y[; 4gɵZj{N<ߜ: &.Gd4ى�(@ P�(@ P8%_l~R TT˲")d<i>R8~栉26.SQzW JuFq>T/n|L2s Kpvq3.yU5lX9cM*BG|o*U+c"P^pIYےgbE۱gGrYͽcH8r63:b&>GЭԽ%0<�3{C&GZj d?]bdS]wkw>g4>|kfϨy lxŁFӟSm5򃒁&塹x8,�nWjI&Իxz{o\g*kUf4p ogW `3 P�(@ P�(@ P@vyKft[kz bYdr> xd!)n0@[n%׫sUk9r~_j. rIIVMɨMNPAZR~?IZO\'Wt>QA(۳GW ⯛~Sj/'Ǡ_/HC֖VAq.s:+>a 6HscClӭ7mĒ#x_ hrLA,Ԡ"?T+oqWrnPWS\&E`(~9Toxf fYblL P�(@ P�(@ :W?ٳL&-U4}1#k^*8Ǐh_Do8N@M&+dVW!@xx M>LY|dJs2�qt oXOļUc}X6*9O vi,XY/9_Ɓ2`wT쨽ipFtloj,{. tmϞiE }*;=!B P�(@ P�(@ PgV@2G\xHN[Ѓ\i_(.CDCG!2/BnNNZ`z5W`^X,:\e)CN֬ծKw�X(@ P�(@ P�(@ P} 0վ>s~6NZsVg(uI -HT>jsހH P�(@ P�(@ P@0:A r:MvhxlXs P�(@ P�(@ P�(`W.,l+q)zLg}ir\{/xtj}sR>>(@ P�(@ P�(@v!Tv1N�(@ P�(@ P�(@ PdggVe P�(@ P�(@ P�(@ ;G Q�(@ P�(@ P�(@ 8"@#JlC P�(@ P�(@ P�(jw 'D P�(@ P�(@ P�(�]( (@ P�(@ P�(@ P@`}$(@ P�(@ P�(@ P# t96�(@ P�(@ P�(@ PNvpB�(@ P�(@ P�(@ P0P�(@ P�(@ P�(@ ;G Q�(@ P�(@ P�(@ 8"H#�Z.PW[ZS@NpvuI Lح\]xB P�(@ P�(@ Pg�]gYk0R{jBpGW|]?N=nR|8]u<Vavܯش6j{f3/ I}w$M v?1^!|T$&xMܬG)=\\z"blVQ�(@ P�(@ Pm%@W[r\ 4 nTmEQT7hq~+DBxt4VIEE~Q҃AppQ$mGi k鰭_3ujZO΋G(VtVSf|u;tNYZ"uI bfYrlL P�(@ P�(@3+@י#k6Ṿ> Ƴیg:- 5iW C rIĘ�(@ P�(@ P8)@ P-z=R[0lDDKb_ P�(@ P�(@ P4 04v$<:y 8ՠىG!h-)Eynt/|#}ڷ$gFنdzvD<aR-[(sLGA=s{5z r eȃ_gu탮'~?-?!wo"Js3OOtni:^[ ;!80|l0Z4YFp<,{˼>hJRZG7;{{nv%~[e83aȨ@ JMضѼtem[6XQ>qs˃=%عi;!0C3ž,(7q!0ꐬ95G ;pH�\N ;Lss8')U1F}vM|GX)*ַQsZ^:3=Ѿs$(Y-;mLV3 (@ P�(@ P�(  t=v|monF|L\0ta՜:guFq[]?Փ,,7"{9r^W1C,}ybˢgs+_Kތor!j*<`WuE)OCi!}.kt}k29޺SmnU;'jSTWbʘj_O 2ͺk#d/; 7j_~|޲N?::߮D?%Uƹ~DPO& mU'K/YɸCʢ I9fskU4gX|\>9d3*oOӿG`L ~7+ˁ7i;^-%x5&HӖ5%V}1h}: 2]]og1O(@ P�(@ P�(@+8xj,_`;Hl}rLB$hZXȻ p/)@ߟN:E'ht*rT0S^^[;vB g󳐱q[]ɪlj`@vz!bz)=\}=bs`HH@/YHR{z!UYʱ/-SY6~ s=  ,0ޡ0xU%YdnWǷ Z?Ԃw }S㧯3UiQH#xiX(i-&ۦ߰N$0W=>L˭~FxkF>]աWZ^7t]eLmzw;X?9G [Yo{D A. h%U%?7z[yog�(@ P�(@ P@x{^i`ʎc˫QY#K {z_TWcÉ?X'L o^i: :@5'¹Fk+6`\cϊ~b.oxT[roQu߾۸~tT\Oظ65K`T{_0AymI;nt%=@ipl =ϗCe[,{m6G; U|̒�ܧ.o}ga߮_,{ϴV ꁮ?k,+["r}X\2ƮGlZg`Mrix8T䙗pF}0$HiI3X2S3VR?W{X{9o}Eb5ykTd|r]+6}ZL6�(@ P�(@ PhR&yxt ?ö[?~/&eys{LLiJ-Oh1J-urZ z'Zf@'�qcq4y5e8gJ\F=CN$9Vru G<ZN†djص]; cUKW<X6ws{ǷUq&iʞ} KJ4|,K'wK/$/%]$I Q^^}=.w*s_ȹcle{hc \F!}~grh4(@ P�(@ P�(�]1(Ж0>�D:t ?-IJutӕ6ò Wm]Js3u���WIDATE݆ƾ[L%VS= ,O@Iw#re8 W¾Us(ڍ#&KxwfEojH[b =nu͸pLViIu=0ddz󅇧K,-s.[{Ӗٌn^JsφMW]%t=qC@c~!F?yv�ɋAҾLU�Zvߩ|GXGw|][JeRUs64ܦIH.ˆ<S` .<�(@ P�(@ P�!@W3 *L0U {4*8 5p=jxE.>ݍ8H]~^+Ps虯`?؎yIĆ͞^rmsqt:eb%%6r | v"(~6'ɉ%P9^V T_,kXeMx>g77w8a9NfU'X-fѰbT/-ްxf?6l7>|�(@ P�(@ P�N.@ɍ4 Hfí6mH]S$hC҅^9 oNuiUK꼦nT{jWǭ}PQc0W=.nVk^}?}dԖX_B;[Y *[>=}iA߿@Ʀejd,=SwSvkͪS'}"S-YQe'|=g2iDTmco#*KZEmU;;/{p=hbv.UmLƍNnƎ&m_c LK@`osө|Gc{)ƾf duvb?.4UTk)gRW[}GIc�(@ P�(@ P�/@Wأ-G^_O?z )X?z~ 6gtf%VjTYTzy<_d{Qnuk;zdxy]^]쭫^ZjEZczvĀQR}{avϊ1GmiJI0K^2neTfXzTYX77o.- tui~Jձ_]NڳI+bA }i@mK3%$3gUJg~KexM+>^]WZcE]}T&WQ,tk{.I G t%86ةql`:}\Ypkm-πƳ|#V+(w1X2ժR;9gj8)@ P�(@ P�(@be+ X@=H Hzw+-H#qW7">loߏ{=q3_Uܽޱʎar;؜$(w>X2^,.\$K"Akf"Qxp'2tY ('"v $/mYõU.޸I"Gw=Y&v2^:m;z%XkN]\]r :XCv4$389ũ@TmZo7%,YPYT`?#Q{>}GGIw/]l,a`n'UC9z׫r_>9򇩟g�(@ P�(@ P@i/M6E 9d<R&. RoΈ%'Ǩ: IpKJE~~;uܚ g.{zlx{~ǯ(G7 7QQXɢ_?)V[c®eը*/O_"4*-$TaQ e TveuMem%g{W~`ӂڒo3hAxW/:%Kʲ%P9i-ZZo9X&\}n:?{E8i,fm\}A,тOY`˾2%5*,zD33{bcI64̳m-}&?q\"{-޺*tINVCY 2cKn!Gh{xIHK2$ktŬe*�f^[s P�(@ P�(@ PVI[*l۳F [rtEę,GĐk٣1nxjY~mzp$r6q$cʯ[_mrӖ~PQhA$irb/'˳SZ.?doINZ0j&k*!{k]`j#ShcK܃ҜC7|a%h[t}qݯ[,ˊ?I?7,n}{ >I@**ڶ@MPpuSSS Dd8NVq>r\h azWӏn/aYٻw|>̞Qd /oWO8Ъ/͟u=.Qm,Iי[Ǥ+F[LlqAҲ^,wd~0rszp$�[URǽH(uR|#|^_stUϤn(@ P�(@ P�(@dgHE@8 :k\փ\2ܕx?Frc#q77\{{u69ZdY@ ru!^CKXR$h%Zs&B T3$%iiW9ʛQ:E2Hp++q@ rIGWO/5g9,FKiLd^=u"<l~i^lho}"taM*;n嚩0!\Xh\J`ɲ$hX~NK-2?,{{( m|||b"KJ`.*2KcUK@7<O˾Ԝgr^h[ #6cVomSG\XKnN(s r.'Ǫ:3 P�(@ P�(@ P`FAsINީղ\c-Ҳ8lɋA[[Q%TK"zֻ=v,kki*-vRUZcjZp.QkoJ=GyQ8Y;,R`^{*Da2*;A/gZ ҁ}vhXs$ pGx׎84H3+BR 3D1͡5RrjO,ux*Ti߇+>;ܕ+^u*ñ(@ P�(@ P�(pzFW)> Q@d8i;..GB6W[Y"P^mRdu]1Cm9e9\\]z<eY@y5J߰m'-7pX@V=?Ԫl˫YخrI\SAZS-R>IVuB P�(@ P�(@ N l����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/assignWithDepth.png������������������������0000664�0000000�0000000�00000014703�14332737457�0027175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��y�����K���WPLTEYYYEDEutuhghYXYͻޠ֖gfgl��'IDATx흋v⸲@`,#4ݙyk=-14f:!a$Uҏ8<"`Ȁy  2<\*}Kj.s%!2yŹoHMөnx0fy#�lk\Z:`j׮Zy0ŴyEZ!zVZ'եjQw5Ru=[0m꘦mݿ\(+RT+(�Ck޼Y9;wabBs|51΃iyIo1`y&L ~m{鹭 ۆ#9̃)zƙd mz1�2%2`Ȁy  2`Ȁy  2nMyʥP,y6=h�,bMϳjAdP6,pxX1/d8(vf.Z8m`޵:jpx?ћ-iCZ{]qZZ1Xi }�g;0k0lO;pݳ6'e۶2q9ɼ8mPʭ?bJysS[kVX>% Pn|_0qWsy8ʼ-,@ Ȁy  2`Ȁy  2<Ѽ$6h4Bdl5e3ڃ͛muIky!/n~76e~3j sU0r͋ۚjb8U +CDzyq^``^}+OuC2,5 晑y1{+<P+1nw܋0΃;y5[y-rb:a+s۰YAoWq y~u <$Cd<<2 ,)@0d<@0d<AR6|uæTp뻶n^y,j]dl5OŌzUg[sV7P{I<h^MŜVkyw.\mO:h<j.,yYc`AF|1<WsSMjϲ`3v&uW{f/uV; xlz9U0d<\@0d<@0dX1ϔ,@�X5O' 2##U1d`2`Ȁy  \=�Ȓ0d<@0d<@yŹ\E `1t<xCꆥ`0gb2ۆ(̃cUQlZO`. 3 a~A#3G2g^`ճY8<8@0d<@0d<@0d<@0d<@0d<@0d<@0d<@`^qfy7˖6 c^q7Xm8޼,3nEk-Zݦ6_1ʶSLW]T{ 5yvԷ7ЭIՕEa̴yƪz֩քcZq~`Noy>r͚cBhN\yp 11e^{T!歞2aS̏<5>hV%s}کMonڻmw77̃9ga'\L@�@Ȁy  2`Ȁy  2<ѼYN^aˌFfίGej^|3xy >N6̃Kϫߍsi{ߌt栘92s.Ɂ)yz SPм-X6Ot⬜f.s`^}Lus2sѫ*gFl$1r6<'J̳<ȹcYcely10`mX>Ņ2N-5)EG̃%;5I'3xyd @YR  2`Ȁy  2`Ȁy FrLrC\hڨH]:<<sy# 4;ᛱ<YqդEۯ~yڳSy>/d ޼T֡GWcya߳V BgIv[1nj0=Ω'h{5m/uۑJuA3OJƻ#IbvZ-0?̳* \sVEpd^<Bk<xNrtO~ #̙ǎ}o{JT}ܜtmk88q^0/aμ80byq߳۶S˧Jq]ss[;gus#Dk-+|ׁg  2`Ȁy  2`Ȁy  2g5"$1O)Gj"K�@VͣaJ`y <@0d@�@Ȁy  2`Ȁy  2s �<a#<�`0gb2-Ϫg. 3 a~A#3G2g^@殞UΪd hN%2`Ȁy  2`Ȁy  2`Ȁy  2`Ȁy  2`Ȁy  2`Ȁy  2`Ȁy  2`YShX٬W7M~1eu ;Lq Ƅk.]Eŋs9�tvLx3O3}:گ2_УĿ Ս�ŚyMS]y Nz*67ߔ=.M<QJ-<U{stmV !JXn~-[qUlK<jŵ(l0aZ.3&^?],eyÎsɟĤyyp0=F*6vcVkh+Ϲh*|1Ř.UuQ061浲kxe^F*6Ϛ.0Il5ojf#WgUiMO$ U]i99g?{pOfy J{׳oj<^:~k^6JՊyg;/`~̖OIBk{2[;S+Uz(N |hJubUܚeFǗм۪Lbފy1sg?Fwal`Xx?󟯟b7ascyڍּ'uP>ڋyfG2o'a\>y6B팹P'vn?=?)l;pJkPlٱ3S(k^4,a:r߃;an[waԅUwknp$8q[<Pc,[=n:Fe46u|joۣ4МUyg ??%Ōw<\c<@0d<@i^Dn ųrpf:ƒd! /_ב25.I [Jpe 5&3=s׈ĺݯ&0s:<fWoԧ/m^T+^fE{ѭ1T3RW3÷ĮH?yG»?vߍ7nlIG=xIA/s=z5o3Y6/Ōh/<׳Tze)-R{e]L?}׌VSkի8B3/O=lw|.Ry[z8$Po CKI˱@eUkWSN%m\d0/#R+8 q,re]yiY,ű!!֞r:^k?tܾy(d^CQy] ݽDxedo2қhӟ]d;c[_'Dr̋]|S_ SVZgJGgʽ:L?1Z+H1Iنμ虧ͻE@^&ty4rozu(91qzyno.[ h^臲,T'&!֞͘ ]W8~a;z[c_Wۦx4o.F"ɡyVGOCLH;4өÊ0^ּ٘ קS"6n`G`h0 f~>j^*W]Ȧ./F"tmG;O͋?},gc&eq=BI*SZ\G _U7ǚּꗹ0m㰚o^;lylbG4Ͼ)SNJ<Y 2s[7Vi ̋ej+UR` c4 guU͙t:9|MnٙN\s s,ȥC4/ .ɰֹyT >C/~=enL?Y3O=3FaB\zm>iVΝNyi&g0o5`}Ŵ ͧ:f\=˞`;r�Y2f {SnR3o3fgAȀy  2`Ȁy  2hڼapjvd~gD@bżii4xQbޠ9fo6R/0蛧Cg3eV!]dylmKz뫻6:C\a՘_/ݛF+K<3*/(y`3ڥd{1lbYUv 57̃9ga,A�@Ȁy  2`Ȁy  2|k8|<U*:/972_6ReZ6)=9/,vQ4Eg@K13tn2S=:-5pe4u? bcnmi,慍[n1lmjQVl=#ѓsrLkl3 52E{e6֞яy3g`4p86xrønߕny1{ZfoWϪDd6Fv+t}u y\]żbg{nřW;ճW;G+sU<@0d<@0dۼi [s3}.Ld>5#wbO|߼3:Fjf{eI%v7[{־h;Wuxic4|uPנ%FyX.ynnM &+ UweR ;՞PmT/'աuy˖9B_\7߇Ҟsis!HkSY of t_ =}re/5>ib)T{6›w..-YelQifqQ<.M83֔{rvT{6BŚ`X7)>¦i<%1907m۸>>?j?Ӎ8q^0O&.LqU 3-cok盟WD,#ٹ s`̋mj7;oś\=3%<08~7<D7@0d<@0d<ڳ,=ALq9,ì7[{`rT1FG=SƼP% n\>in>Ska+sTY}cq0=NY >މj JUY909bd^T`{e=Tg+'Jobs ï_10/_c k`VU{f HyAyz~Uyճl<@rU@0d<@0d<晒X)I%y_ <xמݳjꆨz1gvagN);_�ސ$+6 vlvF)Pd&Ȓ0d<@0d<@jeix-[Z6(Yjܮe#L a�onDzۙnngցv,gV<Vo^h(Φn<7~V#m~۱׾g~!n1{VյX.22yn<厴0{?&GY۩NǼ%\<\m/ǞٱUUG&N]uUyCL uJ҆g1Q6@g  2`Ȁy  2`Ȁy  2l482(R #}vas.l <؅gg {@l=#l=c d dg  YR  2`Ȁy  2`Ȁy Ï?�+#/����IENDB`�������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/book-banner-post-release.jpeg��������������0000664�0000000�0000000�00000116214�14332737457�0031027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�������������������������������������������������������������������������������������������������������������������������������������������������������������������������JFIF��H�H���Exif��MM�*�����������J�������R(�������2�������Zi�������n�������H������H���2021:08:11 18:07:31������������� �������h������ http://ns.adobe.com/xap/1.0/�<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" xmp:ModifyDate="2021-08-11T18:07:31+02:00" xmp:MetadataDate="2021-08-11T18:07:31+02:00"> <dc:title> <rdf:Alt> <rdf:li xml:lang="x-default">mermaid-banner-small</rdf:li> </rdf:Alt> </dc:title> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="produced" stEvt:softwareAgent="Affinity Designer 1.9.3" stEvt:when="2021-08-11T18:07:31+02:00"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>�`Photoshop 3.0�8BIM�����(Z�%G����mermaid-banner-small8BIM%�����bwa>,hdICC_PROFILE���Tlcms0��mntrRGB XYZ �� ���acspAPPL�������������������������������-lcms����������������������������������������������� desc�����>cprt��H���Lwtpt�����chad�����,rXYZ�����bXYZ�����gXYZ�����rTRC����� gTRC����� bTRC����� chrm��0���$mluc���������� enUS���"����s�R�G�B� �I�E�C�6�1�9�6�6�-�2�.�1��mluc���������� enUS���0����N�o� �c�o�p�y�r�i�g�h�t�,� �u�s�e� �f�r�e�e�l�yXYZ �����������-sf32����� B��%��������nXYZ ������o��8��XYZ ������$����XYZ ������b����para��������ff���� Y���� [chrm�����������T{��L����&f��\�C�  ,6') ,@9DC?9>=GPfWGKaM=>YyZaimrsrEU}|ofprn�C44nI>Innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn�h �"���������������G��!1Q4Aaqr"235Rs#BSb$6%CTtc������������.������!1QA"2a3q#BC� ��?�u֪dU|c>�(�(���HP����(���HP���HP����(���R����HP�� ����(���HP��!@�����(���HP��� ������������ �P����(��� ����� ��(��������!@���������(���R���� ��� �����R���� ��� �����!@���� �������!@�������� �������!@�������!H����!@�������!H����!B����(���(�"(���HP����(����������,J',^])WU�"ȾG|`zHz{yOj`zeZYp?ZY~֫�_2w�ŗ=jec/'%vpjd=jec/)]q=jd=jd=N,W,Qe9]pjd_YYc/)lOYY~k�_=v�ŗ=jec/(5�/Ծ_G֫�_�ŗ=ݲ?YY~֫�_2m֫�_�ş=4w�ş=fe9 M6sBNrr{\Yqj�u֪dU|c>�(�R����HP����(���HP���HP����(���R����HP���������������R������������ �����(���HP���HP����(��� ����� ��(��������!@���������(���R���� ��� �����R���� ��� �����!@���� �������(�����R���� �������!@�������!H����!@�������!H����!B����(���(�"(���HP����(���������SggOO;=@�A�� 2�(�@�d((� @�d� B�2�(�%u4/1ii]^^ctq>`�sW]uw1._;ϫ;4� �����R���� ����R����R���� � �������R��HP����� ����R��HP����� ����R������������!@��� ������(�����R � ������"��������������HP����(���R����HP����(������������R�������� �������(��� ����� ������� ����������� ������ ��� �����R��H����� ����R��_'k?3O;=�*P(dKDu B=cuٖ:u�t(ib:w]4�Li+1 _kG8 2�"P��@�@@ �"5Һ饥uyy=_u֪dU|c>�(�(���HP����(���HP���HP����(���R����HP��!@�����(���HP��!@�����(���HP��� ������������ �P����(��� ����� ��(��������!@���������(���R���� ��� �����R���� ��� �����!@���� ��������������� �������!@�������!H����!@�������!H����!B����(���(�"(���HP�������������Sg3d%fRRǁd6-ho0qSvzk֨8vo f=;ivaənh*=0Yfw N,%VJo~ rf؍O]LE~ޚqtSj1wsśPeBj2e tJu&[RPص[k=#k-1-f %I(%[' RN:Џ\Z$:t-TYI=ĻG=F3(YԯMG&!,ΫEX=xBU!'yOF0F\*� ��;J@7M-+n']�jWf3%Z3gf@�A@��� B���tyj(b[8qb�o�g�ccHc^WRi,mvKwJJ=cc6^T;aT}B�@�r:UUZqPܤkkP=Ra(/u~uO_Q�|�e��P���(%>?4hTMNr�2ѯl/*RO1]>хV{2|\dJUB=#6nojRc:ZT̖1�?H}O�<�9G(�u��������Kz3Te.{:˨(˃3 yWZxڏ>b�R|1߅4s@JWR&Կz)T^'kέW8]n_3~HeeJ[Ob3ZҼjWc]ƭl.&RQsc#Tcu�lXU=65 .[Rg-qBvեJ[Kiuq;S}Yu���{KJzbBR:OK9p�T�@�5/FqRo):tjT'7/*T:$#<ligъI)nHz?Wzo1J5U�����n.14v#lvM8U٩(nH;-u-SE>SV W4#{B<�C9Ǭ4%'<O3�R � ��{ɦohwYډB0"Vi]Th��Р���!@��O}HM^8[;˥G_Y/8�:E8TMFXKɭʊ)$miW^9ϾpP���(�������@) ��SLNv{#WCB������iԶڜ#'9]Mlb%PZ0BNRQq{;j (/}���R��KNR[YC==HԕN.-~?ޠָ[q\waX[B|{@�hSJSKyqI,n^] og .-*S*v2i3ZQ\Y:y�8F1Sݽ#t:c.s�(��#4Mg 2V:RqM?�39ω7@�l��P�����(�mX3sۊx t^i,$ɾt!gз_sɏz(��� ���������-T%%zaQ(;  B����) ������@@��� B��)����@�@���PB�ާoSgNpm_H=t'/٧e7lۯ5Jj6([VM-1Pmlud[ qYTEQF;)\To.(StU`Zϖ wI<qo,XTꓔ\S|$S]5{wІ*Ҍ{l-Ѷ*()| ˩+zi:lwTUe7~'Ċ9S$6cgѕW5KmRa i4溬U—w"G7:w05]tFpRr3Rvj<~8_]S Qbu'(Fqn+x]j.qNEQJQ\\E uMV.oNkFJubjivpEeⶦh.lJm8ڕWgREwq%O<G{<yFnt6U/(ƝzPT,/+Ś."V[`Z]J9s'g&u69q#еY[F<+5iԝ)mSk\t.EƅGo,-}FsM+ 'ٞ�mNRmɼAMMTp)eMsF1SnfS,�� ;@ WW4/1x8}vǰ�9._;̗]jg՝������) ����1}O${rrt=濒>vܸj.YE㊭NFVޝWT:RTRvU͜^cw4em_PmMGc?myx oI4n?yeoqnSs)Q#kp^¤)'܏\Q>NPqSJ^�] #E7 gIz{|MQ?Tz:Utܷ)xvYG;ю[5߽�/�6}uS_ZI5TqTY[oJѡRʇ ٴ貗E<gH%*zf=RQx�QqZwvu}6Ů]?ޏwWDNB[%Uٔro9>}漌L.Rk-2ΧK^0k 2޿Cz)mdM9ܩjKTk?ظcf< .ۥٔ\.OPj*P)]ƥ-B7c{mBZ5Xԥ8qrپKIY\ʔ2W_sRTSi5,vr9G n2ߣ4:y%�~KARGrr1ƺu愿rNw?Zr5l74KSڛk6{ܞ ꐻݺ;9v?sڶ'dڧXц4%j~8zM{4w|{NcFuњ�2rr#UjFY>c۩|3#JYMѝG%(FF^iXcmjP.-V>1{5-gndv^:&apk#kZ9RJRnKⴴ[TP-qolj|&}օʯSS{8eYӪ7Igg?#^nj~3S];6;[YVU}ifP\4TiӓK�AF9q7Rzə卶+OS4ۋ[QoiQO_=q/_He7�NN'Q[zo,$RZ<eRMnʋ- &yʓ| =9)p^x1ܣaԽ I4okmq>GGN6�7[IUu*R3U4$ԍ$E|Ov-ԩʜw4^_2^&Ww ZVЛ:io>'uy|ף[-[pHlZ*EJ-csHΏ3_mVmrޕZJo}*‡;i/1jQV Yĸ^2_SӫY:Nwec/!޺ׇKg%b�4k nh toJUZ i%ӯ\KiZ:8R qQk xirNPPI&6oGgT,vY۬uGwiBbqi9ZJwB?:>.BqM`]m+Lx*6g-%ˢj|2fKh|)er܏<Ķڏ 9G{M1JU8,O *rI/$yFŠ̟|V~N]d`}2x[mnTmќc,c97cqFVJ|bwaV(Pr\{2s5zݩњpYks9CD8q_ mqM_oZo5=2n(XI:Sut=e.e:O7tyۓ~�{;L_x&mAԼeףMw27Imck?WVo ͝y׵uKi8>Hߦȁ7÷�gMjTGٓg}Z9~[:#^)Q*rszT_KW6 J=そ\SsVۋwhp,-f߻^NBqb7,-kNxG껸Wr͖h:[}{]g6^9q_q�#CDw!]O<h]Zi]{uj\1dj5veQǨQw^(es'+=#Զ\uv8 E UTU`Xɽ*J)o}_kjr/p坛EN�Eif<tU$~y:7*]5Lc[+oٌlV18iʍYS uܩME2g?QJ9FIen64} s+*/rK2?Ϣ[ ɥ{%(Yb;O eϭ^…)?kѺjSќfo-'RjЅg8yc2U�#S9͍ݞiTKeϙ˜% ^xWV9 *z+esr۱yc^=4-b1k[vZz>0Y[5gQm.fvK/q…t22%Zv^yzgSܲtI[+"F<Z榡)6鷽?46i�o{\,~FkFTpQ;{+iTP[\54^?'i7{$HYnz^: 1QMeǃfա3Ka⎾ա1f GuQCR62ɤ$\\ND)RXVxJa)Ua5vCUz,V?&ת tk'&YorD64,:۩ХeokGn}]ȱcvicVFkV{*0SJjt䔗}ת94%mYӖoO:m-T*%VZtJjXM<:_ZCǷwݽtX=ɨz+N;ou*r|川2cnWtmXYrU8fOP9ݜ|Kf4(qٓ8rvoReorc&&TF^?{[;XENqP^_y4-.>1Xݘ4M]mF`*.fKʹfTlcYS}YNj:]ME%4jO7;:ߤ/Yslpb:Uliˤ`~i~LϫĹn塱3ܰ}島/zf*RpGkSVKբT9H._Rb:OU~w4lw77aiokKj$\jV2]qW/{”).ܳo9ʅYB]4oQlWIg~UV%NJ[w%F24n7tUJN19JOnxsK�lGЮ=z3ZjnXuQ?:zWzY::&]+Kf\975| OFNW1rtekosOjq�8MK <3oKUyQI]vt6oBڊt|[Y`B)Jr3ѻqO3 ݊Rn+}gKi�*R5,J28rڒkiPsM5*USOKwQ5.hjS<UFKk?be�:{v/ .򘯺#okJ\IA쯋6* 7h۰ S0agLx# NIrE5\J8eRoa(~Qɪ .Xg4suF[Fģ7vx[m弳#vqtգiN';gӭ8NWoQLE4rfq](PoIJM-0^Œp4�u]R O1\*qsQ�:+kGc7㙭rlv`˧g8'Zmhʄ[M<UvT\{a#13r6[Z|2ZOb1/UZpf5Ohӛbi+ߏ'-A)I(P4zXQ<i}EgjL9sk'x*}%5qK~&ܷoG8)t,:/g_cTve;;Os'bOj+~gDz ճŚ|9ēvxJpܳT):6x.mo:zfr/AQ$޲5-էGwiꧪ{-:PI4I8NbٺQ ilb/[u%t3ެ^ŽRX05'%5ƺm<mXХ,&kQ}IrKw`klgThІjal {OqB^8 [S`#Rpp⍛{xWRfգi=ew-i=摽ݛo%2-En5>?گ(B.Q\Yս'φKm+I#sN64q<3bɽ..V+6eB2Iof:ΏE(`vGŚD`R������ �����R������� �����!@��joSgo3g3Pzu�va;Z#BέjI1˗3Sn6weo3\ڤa>.*^66uyҚmֻ(Օ=ʰ'.RFy,(SV1YxW<¯5ڋ8Ӛ4ygkkA\׌KhV5V#㭳%Q}%]SYqKq5NNl{g4i-*Sq' .&M>uBԄx,|m4r؇<gmgmΔibpRy}Ia]]tu沒YQ=kfsRK&y&u]Rr"Ԕ%/[>wNۆ}[1RըJjM,jnѤ^:tJ4j1s`�*hR")q-Pg&ifT�DSJ7O�5|EZ3U󿙌@�R����R����cHOyԔjoUNQ\+3eliܹ~ZcVpOѴ{[aϑiVm>)ɒ5jAb5&$٩|m]wSP^lqF}*n*8yy{,e(<ŴgٜΡc; [\wVҹ*=IͭX}7v_&c-F=炎_Rktke8*CaWMŜsmWzF:o'~фI< IM[507t5[Vk;Q]&cxfo[qwvymG{Saevmo]9ޏ}漌,e(<N/x,t#?lP*Vh)o3Hku(ԭ8O[\b4aUUU6w%ϝIy9Ez٫Z)I/DkXmV�I{ҏ 3D;c54�|_g˞Z̧&6g<9<OKS_޲jEl_y]x mɶ[: ke.{ZX$ɞvݵ:Ypy3mxNL8ߎ揗=S:o4(>qxw.+GZE7XQ8[zrvQݕi0TYbZ\&d .g�W䯑G{;;r< 9v;{1G 3 g8gbRy<[m強Y\�0J_fK79ld8zyoH/'՛Z5:YR)o2y"Qݟus CZ:vNnӄSw Z-jN 䙛)֣>::>qoM6E<mR7yLЯV�c==V#*TlAu88FUs]GeVi}E6R~y]n_3jN>ɑ# 9mWbHKNuRNqszGt|_ɚεYSTI.rx_gHΏ11o/3%gwamޓyq~?HޏT*NP|gmjKiB]ZQx7V}%iړbj~֤<]T;3=8<<y֭oGcV�)<ɶħ&6f~O<zE6S]9cn;d �ڻ];OU[;/12[;2m<+J;2QǓ۲PpӄSKY;[UK;/zq8FrKgGZ)B:5KŞJNjm-ͬ(T7s_^U+ի'?43KdFԝa}:?jJޑ�8\߃=+ >[n;1%͜8VvaVcIm{vߪ+>/ͿH>ڗ^SiE?zMWu�/zo13=5L_6&:>G#I,"Ƥ.I=ZI𦶾=& {[(Kzn{NQ\Q~?e}Y\7RҾ2ӝYʒĻ~TUy<,˽>&9FmFXC 7GoZQ0{oxqSӓo %y.�F׿]$vvY$d30Գֺ#sB<�C)9<ɶ+ =Wzg;T/Ľ$vvY.XH �ںF hQd׃ o11ծcS[;VF:4rg� >WeqڵYU5&ɻ*(óթW*J^g.jԵ N.`3-vJn/)ܫUNKfy,Gz:<ltos4n۞Ա"2qyia`zDNO2mS@w_':y{8'9(8&[Me0ipƬwk71{^ &[[(qGrZZGQ}qO8eMXtdVy(7tj-7<~9fͮNLfamTt4^?'^?5c's <5lZ_ku?ќcӜ)7vQ]ƌJJ2yM3bKZt籵dZcԚ\: mOi:_NI|^Cm1W{JV3ܩ :q:JSޖ0Le(<N/g֫Qbu'%ɳ%%6/]:J6Y7žj=|{#m>){oŖṡoN7.u^a>+Z*;3,vg(M,)I/q::]T] -~GLeQu6bQVO.7{w-iӣJˋN=N/3Mx2e=Z:ڿW:?r&XRq[^t65S7O9 _yvm<rn; w]3wB)[5Nfi~Lϫ6io!Mu',aڕkMS|٫*$*klY=USVS\bxSVd,VZTF[;O &ˌ2έINry3{J2ΔF)Eqk܅{d63zJQ}7](EFqwG&ޓ^0e9Mrr}&ԯ. w,c(R8yMk;{U֭) I?,)4nhZit^7ќӔMY(?gSĵΕDq%&u<M*.*8I>5nWCF;*r9jsMr<Jry71Z:rV]cOwF㲻d*NJNO2mm4@oi1tM6dBSڌS=ƵHFf.7{]b!{nx>OmyT NO EN2Xk m}~S[`Mǃk6yd]?_KxM /ީ{SĤ׀mkNZwv&F52 囹t,{aq(a,|Χ¹I6-ǰW:RR˃{aMd YRN.' M,scRpe(299<ɶ~h� �Х$6$$[�_C]5xIeqIvdӖa<.M'RiaNIw2\z ӳ'hnU'?xmڏ{F|[~$M ru'n>9.2%Bw^Oƛ\^9Mu[/9Ria7 4:]S5+*U.Fx!&=47ZیUJ'9\Mqe%&'- K !Mtj:USr(\J2*ׁ,47cIx%9Kޓ~,5F[?J}E.GߩJ1R%+xnSx){ořG҄7T%h*+k{v^ 95&{O5Q=^lZP${a>g9GdׄnEB/-�sNRsmyAy++mmI;xƎo)d$ 59d Fo1҂ER[xȷp5(kea+̛oP@������(��@����������ާSi?ׂ})d:78SMmNnM&qIxYǀm3fEupU]nkNM[qڥ=e- &' NYsZ҄+Qc8,j׺OZ:(?i$ϞCfp$+juN):7hُ n7x{cl�i,K+*ZFjSj*O8x݁g�t%EYhqRp kGEgv<o,y-FMҩyv-8(gwʛ\D+5ײiݰt%'^ .gmZτN~tjTW)OW5e6%ڲKYaRW0sQCMBQ~N4�*���=Bnڏ #eIIep) <va4W6 DR2i]^^ctҺ}�毈U|c2]uw1Vvh��)�����(������/WTGF3lb) P\NƭоTBed>ge��4!@=ڥBr<n1եR*P),s�(��HP����Ǩ]m]+%w+OpV1 d5Zi`��� ��ѫW=9vb� (I4�)cNJ1NR|YlRZXiA�P) �c^6ה7)q`sC{U{RQQX{Fc5�:s-pEd,ΜjFQ),2���) ����A@���}NM7&奍9`^ ��HPZqm5ڈ����(��� ���)Σ8JmvEd'K2�(�!B��� �����"(��QQf%*-���RS=%,qY<i���Fc*sQx � (�էқ\614i������3ZT.!RI}sKRS{�@��(��piT!).idA@���-%5'ƵI)՜<jo`�(�����R�������� �TxK-'z2y���� ��0طHM<5����(��������)�����(��������)�����(@���P���P�DP�������P��������) ��ߙ/q֫~df>ol\΅]RIcM�\UGڥ);RD]MpvI-kYђUrk;ޕGV%dwU]YAv ]Ӛxpi=;z Se<a*rmajXaYU TRqou+8{;RVe*Bqt'[_Vp[Z7zSVmIBmKGJVeNIc9k?b[{;+q=tq&f 9Mo :z&'&ݗjӝ(SXS[Qf;fd'>`_&MaE9,oƛruqq UVk~{W(tr̞T]ǚ7)ܶ\o-3Վ VN-ip<3eewҌ# {*J-˂iߩ72p&{ݒo/RѥU)bK2x`JU:);J ,>ܞppcw,9% l)Iw yhfo*q$RYFQxZo^1Q&MfrRSKsddeT翑 �P�@N{xehf07M-+n']�jWf3%Z3gf@�A@��� B��2B5.iB~즓Ɉ >M��CԴ+I.3o)y/I&XSn;[>{I{oU�K#GSW�M/ȏc-Q=ƅYCj4EzT� 5gS5M<=�7{Xa%i?_:'F8XCSՅhХII]ǻGr4a'O f=ƽ z*5%{(q/\{T,*Qy|J=NTI`B<S�ڲM'SLBR,QqRM54w}MFw.\v8M8i)gROB3Xl� {PQJ⹸xտrG׉5iu*Q^/S_[zfqq5Q's5>fJӂJXr�/=R2U$|_`˘v!,K)K6k]֣֩'Ovc:)Σ!)>IdN8/X6:fNիRK-w̯KRyؓWn W4#(Щ8\R06m3&[ <E6$Yӝ7Q|^nj~ Ů)׻qˍT^?ljx\~cL{Emix'3tt}$oC_ۥR1ڕ9(kqH{*=J^ y|�ѨG~_h?G-ю'GsyQ7ϼeF|}@)p:%/<./M>Lp<*;Jyq��ZKŅ>ܛolljt*/#}NoV>'˜YsD90̤𑽫ZgB1᱆̚I]֒i^&ο ӟ?Up*M%uT)TAfpWz |,iNQa&j@yI%)l-IQ^$|=FIGj0\��=sqP\yI -8ԌÓKyҾmj¤2ofs^jR.0z9f0K#J]f`վ#>jy> [9OTjkBxidiq:+iS5#fq^R9I.1- ,Q z9'8J)X<��P Mr}$qiᦟ&�\Qp�{糵-xDy2[žqMLn2N- 7 ZӌM7mR^wG*zձNR ]KH㜳?~^$,x''qeAQq|k`utOr9]n_3{|QϹeۖr,(I44C_❫�>Sa9HO a��{j8eg8uoo}RPw9g^3> /J4kO97,c)<F-uIވ�.ve��|J~[DJi��a(%��8�.ve� ݌#M<5WJ)gWJ-BRof-#?ux{cK݋~ay cJo 62ĢD� ^[A}B�. =8J+.-.y ;2<�|�] �|��-tգ/di0[j{, ˎ =kG5[17Qҕ zy4b1vgLpj {';IsMՃkSiM{ROŚNˋK ;�4�$(\߂o O 5n*|>r5n:O3<>ާ0v�F Hբ)4 -INj7V" 4"<X<85 E}iw��PQYQo�� ��6e3.[xFm'j� B���@��� B���� B����P���P�DP����� @�����P�����uߙ/q֫~df3o;C:if%G>6.ZfցMeE(K)Ix^8Ԭm($ڃ_v3<*7ӸFu9% .o+:SҊx\Q}țhT$ѪTeU҆_egvYc܉6Rm&ܰk]bvBTe&凞=țsA ]$#Ri8'oiS*m-=țhz'=X̖sکNCwK<.Bq"5JcM{Ks<\Q' Mwr#HNҌ=n[0O; \[xo|c.x7H&߹z: PQMpy܃oɞ~ g{6\=q=[Qu*T\^e)EE{iRW,g {cNJ1˄c9KzT,%87#ZP^wse Uc/wIY}{ٹ T;+`7\RzSX|Q{-5[w/1hRm~#xOc�]jfKWf3���������-Y_3'毓>v߬^OWɜ82}GEITS|0Txi~B7+C(BOf2ҝ9S6,./ȶ4}F}.3&<#O@ӡs)W(A1|7n6*tE,|~4.*o??H(rygw7 _O1T=݌飮)PXYt䱄|Ó^ r�7٩mS=܎g ho սh:5)ԔO1 KkIr]oޓuO|,GF҇3 *5jc=zP&oN�knq$_W# PF+|:NF-gkO](F\)?epIaY:I_7r:z kYQNIۜuM:޽vF?F=۟˖|ޥN9Sn8ƥ?w1Ǣb%h[h}-TLaˋo8{oܸtI'FucKSR1kzm8h. >pϧtUQfrp츌\Eѝnyg(WBt9EqXCѮW5k/�'$ˉe"7}=F7֒9Z#NeMG:�5>^,aMk9M=wG_ZL>8),c�cLJlnK}9z4x;55*ehR8j2\Ue~¢m&R}J?8n^p6w=U?1Z6tݶhv3f-ZJʛmgb2ڡ/_S`xXL8s,yq~}޼k5xgƾFۏLOS>5͍C 3\c+kLƇEV0C* /�tϼhy2 ~_$r#5JeN7Oi6&a 5FxWc9QNRQo #=n+.3 /h|n*iAٽsѵѥ/ւӚ>zqg(bI>w}: )Cc| [Nn:FN򤗺Ϋ(-e6Ek;:4^.,~Q_d2vPkϞ39͐jݲIiㄗ3[/4tm~nsB[ɔ74wʥMb>GOS}Z Iapr:=59֝Q\7>Gjr\ўuREQ~W7,Rq=k=�8wn*F~\~kj c8Wv򵸕)ozd(y~Ag~ga5Ut}[]f{t"ƈeh~d~f0e-{]*ЫM(\o9og»::=/8?OTOGVo?ݲ|x9AzWS^=;-Jh=>y ʋۏ�_㲍}fٶ'��ѶG\+ƌ_O{7�Aq>flԙ_#✤} :t4Mσk#jҺMg>6M7݆BmzW5U*,hqSX>LZ&Vm }Z琉iJ/>"c,ˤwW'J =۴gόpev:z<MJsEzU{u&}yuxCPN+=-Zj-YK7͜K^GproTX$|ɣFuJ1x}ϯ}/7ˤ{ZjQ,|G5Ǜbp*+UfSš�[Ma}2i~.|9;B�V󳭭_S׫yo|Fguió7JV:(SqqBkfv׌qQORywкSLb\F_(*KTpr`վ"c5PGGU3F3rOegɮuZ~9W-&_q[GJE¥;2M<l>ӊ~K]NRx3wCgK9{qxz#=> }5rOu-44qoŵ SR;㗟hmi`ŧR,S ˱CbjOp/54kiwҋ~Oe][WJ1-u*Rll+hFWq/=bRO[%7t8t~U&߻qSr |]6gm]R($7_3+Y7q̣1AΗ=R^wGoxދ%$g�rcMոRڔi {LX4(g?65ˤ/_yub2(^IRKgi޳#_&q*Qv5:2\f9M z'W+ѳ(S6,<o}=ܫ}qmYsz5j4GzގEo^T=Ϛ6tu'tM]y+%PnmUfokg?CU۔f]aF[B(SqElڎ$oyBYS)f/:vj<qgW[EN/xd=֚Zs”+HZTyd޺g6w3SYz~_,eco'-ӓx(b8eŹ#*SJ8Uk-_ӣuF:Sg6Wp/&ieZ)1>墋6vw瑯=RĔ!$$>�g-�v5f)yѠ:4xGޟ`㵇qnjQ[E{]9t"wN/O7t*7jɯ</Ը cܧW[~Vljt{5�Tʎ Q6Ty9ڣ�}F�Dljpt )clǧZFjYܗ3@YZrP/9gA榥Ni-O}^JSޟh.3L$:WU~g<PFn)f1xx=i]UK|]8V颷|ѡgC+uogB_uIQv]cF{ViS2'RM ۽OMCoc.0THjm75_i{* fKjV43\Ro(=_iCսR}Kn;OHy/RlWf8C/ZWe5< q{\%MϙjwuZnYAsQV)籘Ӳ~du.j„UIjKtN]YFo(3[]FjxjQL/zBMe6--FMU,;�Sٽy2^{V-Æc9ҸNKI{Xy4i?eӓV l&ScopeWi{ލv=^Ԗ~&IӅiϱ=yWٍ$٤s躵w]jxˏaJJ6^VS}< >x�74ϵ=LgUR39vgk B*ex߬S#M-E85KGJ(Nq[7-f-?+9I9vwT*ԡBKQ{Xy#_P?oJo[nBxpj<xR $<\mt4ؒcܽ6jӠ8G8[&C.{FDI)qwBē[t>SG8o PzyԨwuS~km7 {>RM\Q1z�讍VZʢ\4ٱi[y:Ɔo<gi�?CLΊvvKFѣYb<vZ^b1rK8=ӻ.}z~K57Y'K�ת׭m�e{` .b%<Yu}?tzL<c84njRk ͨuf#~S#@ܭVRMn4*� HP����(���HR����HP������ �����R��HP����� ����R��U2_3iV|gӝπʭ9lrx|2b7^]if^?Nᕿ X}RY%5?ެhƫ% c)l2IpݝZ\O e]f튥zseMyEiZP-5evpfak~c,oRSۧT=IXRJ=oqz]>Ů-[zS4xZwII0xQ8:qOHYWxړ!J磅5:Rڄ<rLT`fcs?j5lja|_fؒfX;P4@D@C�A=n+zGnBJqO K+⹛Qs z�W&߳�:Ήx}vǰ�9._;̗]jg՝������) ����J F6mN0МDgσa.S/�}Kw*J:N-� %^o I6'o {JqZFXKhU>)v>g^ &}4S{Sϊ>`ˇuG^jVǿ=/,ð=*it̞7—,yVmFs58tzZWGR#?koyˌmU!KQ:Qo-n7=!qVR3I<%˘z-O8|&[Mӆl2 #5=Fڅfv}`z捺U6q'ڜKRi tS@}ouoR >| >E *tjNWs}U^%FU$rxzfM*%Z`0;LHUԪΜpFMr}\ýСe8֭Iox݄p95͞@ [|ծBSw'U"QR}$jJ38)[20_ m: iCnx38Zw4-'aIyͫN M׉Im򯣡eo <<�9qE)m5�NwB*М~& Fqx_nr֔qsm5ۼ5464ƝͨI6a߹FRZޗ0SpWh:4tI*ЩO=k꺏QJ3�cݻV~j*rgV4tkeQp廗T}3pjTZe' cvRJ 1-Kʭ4ITۦbu2o Kӫꑯ=K{ Z%jto%*PYokLyb:5>ڢ{)aB՞dZ)ɮ >|Sr2S<tVޟ{+*XrJ<εEߵRS_eO),%*;Nm9><Ŝ:g^TyY&#{uBzCsيOr-dwFRxJqm 1Öi]nzt*M �\q[iJ;p3ǚhV_ƍhTf~3X̦9)<u[T #q2\l 8<5'bQsoݴ=8`a2GSϦHeoYqnQ8p%&8jݎ֗uBJ6q@,V#{G 7nU&ժ­9)GeoFW0T)nn)9<%4&:u5TFmK~_zjeӗv>f$rZZu̝YN{Z3{*R! aɟ< _ggyVQiɴծhմQV2xLW 6gYI/ԫ>3keN&Xn *tiJ1Yr{NV8Ծ8IJ/kcTU`䤏 ں*TFMK8OtxS1o&X19yQ߃R'إ泸V1]@BVHqL`ڻ%ҸO iԱ)EOI^NZgKe�o4:u 14�k/a_r@1:e*o)6CNG:k<q<cS7 ;/va81xIƥ$a&Ҋ{aa&OWJ)spzM*VҍJo #$jE᧔;k;1}Oq \ '><yn)UiԌxOfa{-&:PN1X3v7}#JQxx`.KMRqYǫRUjJsyry<㎇Zԋ#3BbI�4;S+NS?'umeGb̟bqo=NNsrY�: >qyNSj1Y~ ˪ՅZt䤔{ N^ڲw59N)MKᣌRe«ge5)?˯ZU꺒#uXR�L#3�&:�hvt`,͍Q✰{9cGZz=rrB1Aօͽ F]o=FvqnMO-pguJɝWGka,gy Wn2˃jnjWrk*PAyf=:*vNq{9 ,7^vv16 q⹣ZSsSxhSio5 mf\erAOԪBX8II(շ(=0YַI<5J11vqNm'Um6}峔 ujJr$)ݨSrxJK,Ԫ¢%,g84AuuۜVyj\9A\ u޳aV{7rs KuyҡÃk; &ʅ)otV49J~y<&ҝ^ƈM oRݳM�Qm{*p|6/05+[}qviFiݩwAf:HTPؒ3c8¾fXp9zhgg_1i-iu 4VGkqT[ _nKծ1'$㾣vЅNYo;l*Bܔs&43ΝԧbTkMN*K~F�47Ӆ Ji<ԠkA۾ lI<gB4ŭBe/lo{.)ҧG pF3.wޅzUi>4AlEۦ%iUr}I47aV emlL,uUWvsَ&M��HP����(���HR����HP������ �����R��HP����� ����R��U2_3V|hs�@*� R�� ���2�PR��*stõc9(7' F[E5եSb_|M ��#9y9'S~`�sW]uw1._;ϫ;4� �����R���� ����R����R���� ��� �����R��HP����� ����R��HP����� ����R������������!@���!@�������(�����R � ������"��������������HP����(� 7(I�(��������P��������) �����)��������(��������P��������@) ��������) @����) ��������)����) ���@��@@��� B��)����@�@��� ���+TKڥU3\3Dy҅{~T)4ϖ4ښ}LOٟ.{8<noz0}+HS�*� R�� R%;���d)�J�_ػ{RQrgoNzUb^=xYݶXFKy8uM9Z*n*5CsOOͣ5k~#%;igFL{aBٗ��˷uIy9'T~`�sW]uw1._;ϫ;4� �����R���� ����R����R���� � �������R��HP����� ����R��HP����� ����R������������!@��� ������(�����R � ������"��������������HP����(���R����HP����(������������R�������� �������(��� ����� ������� ����������� ���������������!@�� ��� �����!@��cHB9BT%#tգ>x�>M&|:;Uӕ>2&W <=N�" ��!BPҝ}W1R[y}5)&SsH F3,\lY8z1Y0^liWr׳5FKX|_v뷟'4*n5#=G|yRqi->(z7wuVT^4Ya{Iբn"fΕEhAŨ,aӸ�@>/U֫r�߃MS)M'7V>3qF:sڍC9O+%eZS\";z'TuIy>g�5|EZ3U󿙌@�� ���!@�������!@���!@������H����!@�������� ���!@���� �������!@���(����� ����R����R���� ����{>> k[<``̩؏#eǽs ++1?M{? 3HlHc<p0W$6W$?g8~AerCerCQ~cW$6W$?g8~AerCerCQ~cᄦ] }G?2e\\y?FL++z3#&] =G?Œɲ!!?Kp1m6W$6W$O=G?Ǵ6++z3cFM =G?Ǵ2lHlHa<~=]{\\y?HmxEG ,�Q4M>�&Mp\Iˎ~<)%n<k����� B���@��������(����������������PB���@���P�����(��������)�����(��������)�����(@�������E����) ����P��������(���{Pj_cH}<:Y8<xhruM7 ִJpS�|(Mqqw8(sSPӨ*\~<O qgLsw=k\$`=764� � !B��Pz}fCSt.LJ*QyOGcE}SRnwx^? +A#%(EO ���jԅ*rQ+-9^'[wôU:YCF8rc΀ �#%_6M#5 jb>DsN/;:'�毈U|c2]uw1Vvh� @A@��� B���@��� B��� B���@������ B��)������A@��� B��) ��@���@��� B���P���������(����(�������*D[̴|Uxsý�~˴XCཻ��������������������������������������I0�Ӄ='YXf82=|}x>|yx�>!@������������(���HP����!H����(��� P��� ������������HP����(���HR����HP����(���HR����HP������ �����R��HP����� ����R�� _e*=i}<`IEIa8[ј R|2Z::Sg:%[lնZ=�',;,,5SjQݸe⏝iS9?{|\s.U����F\if?M#,{[Ԕ*(T9gƃ}{T~-μ }Fy;ժÛrs89ͨ,ug}.U_J5Δş 8:u'MqmQ����JOGda,ouNOw+l{@�si]jfKWf3� ������������� ��������!@�������@�����(���HP��!@�����(���HP��� ������������ �������l% 5#1OS/�S ˄�������rk)jҪ9m,c/P˿a�<ss|G.w5`r!)ͥvP|oI+V47V1qrmx.֓ o}ZCY߹]}? uhk[C5%͜zKGi> QaepjQ!s)BRٗ5qi[Z)qɏ<rzPq?*A*P75[,JnxNJ8wz~%? xGzE*⒧U6;ωˇux345BZe jsQx�*~V%mi<7Qqxp3oќu_HAiB2�GҪTmU(7Gxz'҃ +;Y\V)vv:&&Te'>|I1å}@86OQUWrIksҍN;Mo}5qGd+H޳Nޜz I \zDnx|=5ե^4+GG<dX>5$yOzfx,r9�6�����E?u'y~pc˝HS����R���� ��� �����!@���� ��������������� �������!@�������!H����!@�������!H����!B�� ��"�����������(���HP��6}<yPр���T޷3� cz4)u3fTw(oC*ShZk{֞S\S>84{^ʑO_Y&^_& .2zJĊ4׎S)HSH����ToET#b:t3~:T-Z\$ԿS쏖%YP�.`� ��W7|1s~c#|7+=�94Wf3%Z3gf@���� B���@��� B��� B���@������ B��) ����@�@��� B��) ��@���@��� B���P���������(�����P������Z^2i4f?#Ǘ՗x�j������w�#�!> WNVoR\RGY2w˩/9NP{vSrGO�tW7T5}?O=jR}yq: }Fn9{ˏkY:;YtSR{ vv=[Xg:tzRyb~{s{VtԜTyxչkpnLn5kFvj ݎFqӕյ:ɦ=LyOV)VYnŔԭU QRc1 5Ѭ)4VZ89�[\Qn-Q*xM{[cRW>FTvvx,NjެۇFK7hۿZqNI$)6%k/Om<#ߣ*iWӖbYǚ[tmC<Eat�O�Y'˯Y'tGcf_E▇KrǤծNޛ><.Xf_GU(ү 1}عOɿWSEF{=e)]oft}jj' r'ҫ TQMdzyȗ}4}5Te2qYЩžlRoR?tPxXcHkzM/VA7nXh$1etgKXJnn${˯64vZҌ]ҝ>NcO yglsqq;reu޻֖maN8 >/Fvֵmڗf^>^Lҵ)^iu)>Yi>)GO|MƫKW!MVڔ^�'0OLql0pe=wVRΚ(S_}5 } SsbԞ[da0� o+_{�G������$S"3/Ǘ>oB����) ���������P������� B����P����������P��������@) ��������) @����) ��������) @����) ���@��@@��� B��) ����@�@��� B�KG/�������� )BQsFYp9%s{veN2})SFw :_{&Ś4qM>)l5g=xzzd: 7zmG|Yz*2MoЦ]*j؋ڛGڣ=(/}9ޒkT 4r/g(�}'0���z9|1s~cS]�ɧ]uw1._;ϫ;4� � ����R(������!@���!@������HP����!@�������� ����R��HP����� ����R������������!@��� ������=D\ aKpݝ�^�O6<1�|p����������������������������������������Q-xgn �,j $z!B����!@�������� ����R����HR���� ����R�����������(�����R���� ����R����R���� ����R����R �����"�����������(���HP��6}<yPр�����������T@ҋI-ϊ{9zvG4&�˧kQz]զ\ k9Gލ *:[s=XzAۅNփsG2%^<HgNJ>A{;ecQi7˻�|첹]ڥyv)lVV*˄"I\dWǭ�s�� `�/s~cS:�OU|c2]uw1Vvh� @A@��� B���@��� B��� B���@������ B��) ������A@��� B��) ��@���@��� B���P���������(����(������� xr*2Bx2X'݇/g%QNYqo<tä&Wx;I6jI:NU:Nw `wl{tf<tä5^'p٪'p;Wx;I6jI:NU:Nw `wl{tf<tä5^'p٪'p;Wx;>6je4ogjEQKN/k|\0v9<:8w@) �����(�������@�@��� B����) @���@���P�����(������������ B���@��� B���� B���@��� B���� B����P���P�DP������(���������(���mR(yQKG������������������K)��=څ-b2_GgyPyN3|\9\Qg qf U|r_ѩzS.ՊH�4�}'wꜯG>?:�|EZ3U󿙌@�� ���!@�������!@���!@������HP����!@�� ����� ���!@���� �������!@���(����� ����R����R���� ������� dA g�k)91?PT�91?P@�C�(C�k�L|O|rc~|ɏ9�NL|O9�rc~k�L|O|�L|O|(0 &>'L.C (ar(c'h�E��� B����) ���������P������� B����P�������������@��������P�����������P������������@@��� B��) ����@�@��� B�KG/�������8FI���������������S54kwyvJіeM{ͯ^ˌcU폨n2*^*Ӝ9LB3XS]үXAE>x|x>\J=YFmU_�wǏÿ,\kGT4jг+BPx|/\=�9Wf3%Z3gf@���� B���@��� B��� B���@������ B������������(�����������(��������@��� B��� B���@���P�����(@��@��� @DP�������P������@��) ������� B����) ���������P������� B����P�����@�A �������@��������P�����������P���������@��@@��� B��)����@�@��� B�KG/nԡq7N?GkgњZPXQԆ[x_`rj].]Mʜg-6mRk׭F6T:Iag73,t9%:ZO+&ZV6ZtO[߻L} tYYEStl.&YVNemӪ#g8ol�]Ctj6qgN\rv iQ$IʬU( ǰ*U+өRVGk' }]ʭ8Te)'/2<2JTiT8o{tZ -\i9oQ7zzvn\*TrrPvt'NxNqDpFhRVG Im7j8 T徦;5i鶴=j4ڪcr@��������������������bK_���]uw1._;ϫ;4�  ���!@�������!@���!@������HP����!@������ �����!@���� �������!@���(����� ����R����R�(��� �������!B��� �����"(���HP����(����� � ��������!@������������(���HP����!H����(��� P���@�����������HP����(���HP���HP����(���� ���������������!@�� ��� �����(!@��ڥPѯ v{%% /X_� /X_� <^_W00 3O/_W00:y�W00:i�W00:i�W00:i�W01t:i�W(1t:Y�W(1t:Y�W(1t:Y�W(1t:Y�W(1t:Y�W/-ɶ'�]j`Vvh����������@��� ���������@�����������@�����������(��������������P������������� ������������� �@��@����E����(�����P������@��(�����P��������(�����P��������(����� ��������(������������@������������(������������(�������@��@@��� ��������@�@��� �������@�@��� �����@���@��� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/book-banner-post-release.jpg���������������0000664�0000000�0000000�00000222626�14332737457�0030667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�������������������������������������������������������������������������������������������������������������������������������������������������������������������������JFIF��H�H���Exif��MM�*�����������J�������R(�������2�������Zi�������n�������H������H���2021:09:23 18:36:34������������� �������h������ http://ns.adobe.com/xap/1.0/�<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" xmp:ModifyDate="2021-09-23T18:36:34+02:00" xmp:MetadataDate="2021-09-23T18:36:34+02:00"> <dc:title> <rdf:Alt> <rdf:li xml:lang="x-default">mermaid-banner-small</rdf:li> </rdf:Alt> </dc:title> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="produced" stEvt:softwareAgent="Affinity Designer 1.10.1" stEvt:when="2021-09-23T18:36:34+02:00"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>�`Photoshop 3.0�8BIM�����(Z�%G����mermaid-banner-small8BIM%�����bwa>,hdICC_PROFILE���Tlcms0��mntrRGB XYZ � ����1acspAPPL�������������������������������-lcms����������������������������������������������� desc�����>cprt��H���Lwtpt�����chad�����,rXYZ�����bXYZ�����gXYZ�����rTRC����� gTRC����� bTRC����� chrm��0���$mluc���������� enUS���"����s�R�G�B� �I�E�C�6�1�9�6�6�-�2�.�1��mluc���������� enUS���0����N�o� �c�o�p�y�r�i�g�h�t�,� �u�s�e� �f�r�e�e�l�yXYZ �����������-sf32����� B��%��������nXYZ ������o��8��XYZ ������$����XYZ ������b����para��������ff���� Y���� [chrm�����������T{��L����&f��\�C�   !*$( %2%(,-/0/#484.7*./.�C  ...................................................�h ����������������T��!1AQ"aq25Rs46BTrt#3b$7CScu%U&d�������������=���!12A3QRq"a#4S$B5rC� ��?�j�;f|, ^7Cl� @(�(�)�" @@P�P�R���� �� @�� @�(@*��@P � � PE�@@P�P�P��P(�( � �� @R����@H�P�P�P���( � � @@P����(�(�)������ BT  ���� �� ��(��P����BP�E (�(�( � ���� ���(��P�R����"(�(�(�)� @@��A@@B ��P�~s>vYnL)�� �"P�P�R�E���@ ���(�(�(� � � @�� @@@PU� @�(�� @�� ����P�P� ��� �(�(�)� �����A@@H�P�P( ����� � ���(AP*"(U@H����H(�(�( �����A@������*PT�����(�(���� �@H�P�P}qɺ1͵ENI-=z\SXbq|~V?mތIec V�zbwʺ�=;~ux}u?ۭDc8qʺ}quz.uuOaWSx\>wX]O}p8 WSx\>wU*u?nE*j/aSmNKWRx\>_`]K}p5bTԿn=״ U�m=m ]K۽p5/ۮEп5/m�c'MKb~TԿm&uʚ�OEMKۿccmE~wE\>LSR};SRaI_ʚ=R~UԿm}uD5?ۮ�z&u'%ʚ=ǽl[y+O~kZeڮ33^lڠ�1x#��P�@@H��� � �����P(�(�)� ���)� ��ABT��� �" P�P�(P �" @@(�(�(��(� @� � � @��(�(�( � ���� @@H(��P�R���� � � ���(����DP(�(�)�����)���A@����(����� EP* (P  @@P�P(��(�(�)� ���A@����|O?r|0Fl}ld*P B"1} d܂7ECv2vtQ b$&TPc`A 2 @1c b;~vm;Ѱ{roϰt:fH��(�)(�(��R���� @@@� P�P�P���R� � ���@B � ��B�P�(�(���@� �P�P�(@( @@H(@H�P�P�R(@@� ���(�(�� � @�@@@P�P�R� � ���� � ���(��P����@P�R��@*��(�( � �@��� @���(��P�R��~wK}./^|/l_5� wTJ$b1I (EAb.В2UD"@c*v e> ߭x]N?{zoϰ�B�P�R(� � P�P�P�(�( � � @�A@���(����(�P�R���(��@@� @ �� ����P�P� � �� �(�(�)� �"���P ��A@@H�P�P( ����� � ���(@ �(A@@@ � � @���� A@@@P��(�(�( �� ���T" �(�UP�P�P� �� � � @@@@P����(�(1�\^ _Ş�0"$ _F,F$$D;$@$b c @eRV! 116wק6oP�~svYnL)���E�"P�P�R�E���@ ���(�(�(� � � @�� �@@PU� @�(�� �P�P( � � �� ��A@@�H�P�@�(�)� � � ���A@@H�P�P( ����� � ���(@*��@����P�P������ � P�P�R���P�PB�P(P �@��A@@�����(���� � @̲<|O߯lY P�sSF.)dп7!ij)]O2GΊpR'�xD>G X~�Q·|$e(Q&e j}䚣i F20 eB eQIh@2ጨc-σ~m_izOlޠ�|1x#R��(@ � E����� � ���A@@H�P�P�P�(����� �� @��@P(�(�(�@��P���� � �@@��T�� B�P�R���B�P��(�(�)� � �A@������P�P�P�� (�U���DP�@@�P�P�P��)� � � �@@H��@BUB�( �"�R����@P�P�P�P��(�)� � �2!�%>}ʽ\}ݙOTַ , xeW n%(![lU}eMHrc c*s@*&2"bwg8|ԗva\\\}}Ě1b9{R_dbRȈJ2.17[wק6oP�~suYmLت@�@H��@@@��(�(�)� � � �����P�P���� � �P�P�(P �" @@(�(�(��(�� @� �� @��(�(�)��@P�P�P� ��� @@H����(�(�)�  P�P�PE�@@�P�P�R���( � � �@@H��@BU�( � B��� ��P�P�P��(�)� � �3! <V=Q*By-6ŷ3I{n=v N6T=Z\W᮷{p˚3ۇf?Vn$}></[m̻6^&}ۋwDFuӴn۝ao]Ymw6+cY482�.Qe8;}%b(m4|{ Wj.xږ{ϹacMUS;&VnjVM])ك|jڬrK$:+cnؓɾJJrԼEp+bͿC#Qj#ʔ&Q{vo1tJUֹǴ+fY%N%UkǗ_giǬ 12ÉMo<%Ş>>5G!9F0ϲKLkLmrӃ4\O{t*P۩wal߾IcSuuSj.MG.a{#yIqFM4=rc.yntꯪgM{K(I@c*YRP"�NMc-׃n_izOlޠ�|1x#��P�@@H68N61.ur:1{G]/Ɍfs��?kGy8NzsXK\ܩgid���޼bb깰ƦƍҶ I>ey{V;scf'h5 q鮪¸G؍+MVf}kѮJ@H�P�P�P;F/xn~漷GKHrZ|־ >^]"wc чBۦV/|4i:V[U7ޜSf6Yˊ/)1&�(����(�֛gS+{Gw]VƼ+ktdYRmji~"'vUeiْâF䓲&/{C%x᝹0EգjЄTcJ)l}Gww3Lw;'Uί 'l{좗kfkVI 3t+jSp7 On֌0j)'ȉ݇7f8-+.yIԻN|aIMSOʊVþ/thُ%rW@� ;0oUuX[':khY/02=J�� ݼbOPjnURvnyڱ^ٍ]ZuuB0miF+dëO382ь7(�@�KuHi_ZCus>u߳n5x �t8x:nL1hJ퓲&*<m[ӷ&6iYG;&1IE[$gO 2p ��� @U4߭tw aI*Kc)'MGEP_,"KM2C_:U@P�R���ة<SI5~t&.>DƦ;nQmrI{Z1z 6ȿ-_Ev-߉Ǭ#iIbxъ.n38ea7 ���P��(�)8is./S{EKir����P�P�}\WiͨxIFKRr#}A#oqhMrP�P"a6d\߭AGwN OA }v+le<ZvK"(7M5:xdNSc2Ѽ# mz6=z7I *J0Ix3ijb�(��l<7MОUS,TW[\ /c7NjQ$m׳xLҪ� @��A@@Q-5|V彧tkgJ����� EP�*�T  @@P�P(��(�(�)� �� @���<k;gUǂ؃9N_�ov9cKd8Y~ScJS<Zi/qY"rVb&b|}+FL#UO>+g:9rkyA{m-R1UQsƧ%&װl;̏QwU\(mԖ>&8<:c"&g afV r]pkOpdђhy6?mnX̊USkڍգ5"mm;Ú/̈+U[dH3dDqmnL}kPibV-r1MF-ˮQ6wEMY|M6Az%w.[N;oq4{No9S}mԮKo:4v}iO+L\Hd&\>TKٗ<kkIiv_.ǢRQrX/3g\Z;^-sNy+#|v4NKsQx9RzZSVb]}(2j2G?8I}.MMs}j2_zfHǚ&-XZ]]pNU\�ߓi[%fgpEʭ["R6�,{Ke_oaޑIKp3ӛflԷq';w/{IX,*4g#r1ow vnrz:KN]iOӏމ1;Y rOތ&Tdle) d d]^߭x}N?{zoϰ��P�@@H=W<�2n P!PʮLal0M"fht}"(UȝVEqrkfa6P ��";#_W_0QLkѬ@H�P�P�P6'8sXkx//ÂFOI鰨ꏧC7.͵Yfd_[F5?u}K6፥ u]cgf|S*OE @�� @�w4/>fZInkfyqJmq/fki mtZbwHK>lQ> ,g�,Lz!:Fѵ<#>nW8e$S5\Lnq'kWJ|_[m>bv"6aP�Pq^;mV uƙͨW6&7tu}K#VϷ;'N{.XE.čF*b6t̀���~ _~,uk)=j��1”STdU* -YSi)I@Î&5TFUW{gw!cfƾ_YOztbM@� @�lBzKun|;my:Eg]M0OkuQuvqYؓqq5U_E߬i-kcӹ y__rkqK4=CŞ? 2u�@R�� >}�/rk}Z[>ɏ&դ5��(�(�9?:#1Fǿ5Q^91zL6�7#g%n'3U1FP���� �@H7 ]/<Wy{YGFHQ@H���n5/ƪsJ;Q{Ec-N'M%(Z;f7):<q\+˗Iq'tbM@H�PWkNpZ+ta~?,6tJ&Q}mM7CtG]Qj}> &ӓ�P3/FFUѾY^IoYϨ#dS\u[.ъ/EᙚD yP2^v3c/^LQ~ffL-ۚ]˱RX H7 w??Ň$4T���6c#QIjM}bP�P��( � M骄Tv[hiIt5(FKdqa['Fu*@@H��@BUB�;Up6*Qi?a$WKZ'KnLS3c͊@ @ �P��P�P�R� � � ��� @@xw]?ϩޯسWhc.id_<HaJa'8ܤYxc}RY䬩[m)qcmU˅8β$[=~ϰ\W:vm2 `Qһ!n{0wiu'Z̸fr,[]}]remd_kqU풜).uۚLC G2F*vZ5Ο׆c K#Urg|˜Uۺ[J)ºlUh+l}wZǯFUcm&&<좬y)SS싗[icddb_[M.LuZ7c5k?W:yٓP{%׏Mc,u}R{ӡjqq^I㵸9p̸W]]pw:Ʃ*ssgmMѴv>aKXMgVLlmޒo\UG4ur1lv뛋ku[ք>Zms2t7Iz Y4زNt9lNVMJM7V""@AA/6%ˌ|L-_c ݳ^Ҋ"7hInuZK|z`<�=_l߯şat͂�B�P�R(�� ?$_y_K@;WG]Y}X,k~cuqF�:h<o:M˘fUV/"e^B:yV3rz$OSLiR8†УL#5UӏtmYHwCKt+5.%Q%Jw.znLx0ϱ:N&fe8pߖ|_*ZӼ|wQî,f6R<O]C'7Zkso9U%Mmus/6ǼV_=7.[*}}}?vhx/b\Hxǵ}]~%o(ZMgdaCWTIsC|Iwsj֭]}6fVWذUx7B95\�?6ິijKSNwdգNIuX#&0͢7Rꜹ%ٺ7[.*Ҷ,tlN=0PVo(Z^U3r &e-"_cp6;g)?F).�]i6?(Ͷi'5Uo\"b~Ëo3F,mޣ5gZ[-~g8yhhzxJ6۞/�/45"'v,ܪy$#QkE[o'/ʵcf勛emMƱ//ڏ>Զ ϛqK4A&6J+-W%mN?&.|]%t/N_kjr576vʶ�yoӧU1h+"j mPW{gkEbm=!ձksNN5&~ڬ>L7}UpgSuzt)p_a'.O177yߤjW_*m׵xeӴo ˰ DŽt[Rd<l1%Yp DPT.Ĕ__zft\7l7}'N!H^usoͿUbpF,L㼛ti.ƢӖ/^*'9rp>fuy$ m߿Jkxz/6 ݘ88NmSI߼-ŵ2sq^Mf8Iʖ9>WWMwg*yԺM[~6Y8炝RedkROW.3�9o4.lxersɽ+[5o//)p1+VUe2h59iZ~-;1aGH߯n],eN.9ߢUZ痘*˴z߹xL׬;6p&"8=R'jq2ٞҰt/I5l:z>heI8 2g�,Lqz!#`p5CRsA?EUi)zei:nf0qDg[rQ߭hJwJ%=~GB6AJ10wMWwXex%;q.~_~]DS\}:=VJMԲa EK~85o#vK0UF'fcVJ1]F5آmcn~MC*c-naF4_ho.-9pVg<|Yٳ:e-v[yOJv91!1;ƺ<=|WzL(ԡ+N} RԔ tYN2_oJǃ8IB߹X�sg4:/F]9BOgNl'&N)ƻ3*Z#mQ=)Y3zUz -:;f˗73W"uj1d¼EjӕU֦.o0K ;:+KmWsWY^hgJ}#3C�FJԛMY)y %/:�}̦5v.-\||IjzRq ;*Ouͺ]]n Ki:qng.m͌|1̳n8N)OˢON�#vK__ٖj]7PMfVDG _{M8Q xwI'i5\d]Q.׿2éL%@� Ӵ]cFq V43S.,Fn-Yb\n/=^/XynZc0�cMoW[K�ũ>'Z9ꚽ7R|}^'wlq6ŒL,:ȟ9-{6/<4}1prXp5S:u6OHߖOGkG=n]w,qlt7FS(omZ^xy__el%eYNgEfL7l7$N$o^]N*ɯSa8>6i7Ĵ3dOyqǍw[8-Hc-?qǍ= }%Ի>HIͨBjk$2}/W֦݊.,ѵ-#t,XOQ{Q8٭yÚ5N?T\\_/w7heۋ|vr=:Z/X3n\78gCU\qr{F1gUn. lf]Ηcc8Aï-izM>ɨcwLivL�|�&_V81duo=i׉\rsu-7>Luy4趌1Vn /B(Vݮ+g�Ok]+,:,ӿIHl ߔZwײ:5;LeN*pk(]z:[^!иg5w̪WmMɗvp~D4a{'Ѹo�ksNlpcxRoiE:ѧwvV%xڍeSa\}ϙuw)Y%_pޙʅ0v =$_͜>HھIrZs膛]Q.<ҩ2mwxbtl{U^ m~ gtyj2R=}s~:e2clNr^YdǛ`i[nnj.TQkÿf^b+~KG?}|T,1F}Bq")4]gnr7M JҰUp}\ҳ%yϓ%ucpֳӋ b_quz۬m;jiű% mY#%xh0mgMc rY7_t|xc<3ng{5%ݷߓQXzqDt%xx9" ?yiCZ"+r5ogl߆z(L ؓxWPrk^z @ڝ9ԫʼ1'I&*eUW6f{�M7E)d_L)&^y͖ghc+uY:/\yeYɗ4hV|"Kw+ u쌸e^9p=0pJMC/kqpX`8~u|zor/li9Ym65Dܛ~Ê8co)W {яU.ivF.ŧ>>rsj=/)VL_s^7X4Gƒң\U\\9r.o&FXEε]ɒQ ^8bƸؗmqp}{wo;8v`fYg[]xxf4?KF3抛[re{_f\,aeU.Fu]Xm-nsT�IVt]nKU;M95b߽mvbO(w8Olx'jM6f>KZ$8[.dfoڳI.4.r Y99(9r˻kNot'TvW.ֶI4#.LsuNMM112ni^]-8-rG dmŋ,}2]vWe\Q< ſ2DxZ+= *ŪUݧib88R.$4WZ:�P6Xly|믟Ǘ~Sſ_<Dއ%�Gޏ=CLҰrte+]2ڷ&~-GnIG{3sco.܅}1N)miFKU]:EUEF.n9L/hJAeIxh˚wnB~0mXmFi-qe3ԉl\UKbCb#RQrvliچ}]{xFRKHr 7Mą-8uYmnF_%AY.MxmybS@7c>7eϷnywHXV<Nmf}:VJU(WJifx\H[‰+h&ʱ7KyvXiu'rrz43\˩.[}m11Ok}QKi;X݁ŊU094MiӴc5{3/<+Kqԥ'FNKkvoY/ o:Ɗ.=>,Y'~! pDn׶&mIuŁeͳbߟB*zEpoe%% p%G~igg7O[Ӫnjr(\oiGg$)!Ӱ囐O)o)x#e;ezFsm˙M9/ŕec;vRKt/V̵jҪAUsZR{$Iy000iS˔g'.ϱ{Z~/&T01ohV7gtS}4OliK'<m/U>˭/B8Pe{7Rf+R8Z~ *Y<ҚwF;y ٯq^FEӪ*/c'xe6T2[4$i=Ю>>)N0S}s˗n,wu%>.ﯿoœ^CaK.ǻq?*_{֕9˷tQnc?& Szdgk di7 %iVn/dty#[Gl׬α}n���@P�P�P�P��(�)� � �Ƴ?&}N/^<.l'iuڅΥk[{4d\s>mvWm%/EJ+YyFn^=6fƬkP¶sHۺQaP'wA%Bl02]ZTe_7381vc$ڎ"gf{t]&*]_;߯sExR4lq\loDzI{ W x. n=s7 l[e-Z<́v I 1+k*U 4>a0iI55lT"-ֱ8;~;4y�zٿ_?>>  ���P� � A~HF򿌗vuy>g38uLڼQY� �\�l|h}X+rKoqvwsz}Fˌ{/Uq̳{G;jmF܈B;R>k0W@푲yM'fdܥی^Gm_k_TEw�GwjYY\o%*8u;5vz7)ۍ6ˡT{{{<Έ}z`oj7!^di}W|85;a=Z7Ҩ}L�v;^U휸$1bKw/qfDwS?V 8LdrT[_zGFf0[eWjqƫ*))ߣxn7?o<Ӳ¾~Y-{non^G/k~Ru=/TN˅lMrW}&8^6Zd{J#ʟRߩz?g6L-եpV,>)鮖gM?k0q`:f9=##(_.ЩC{#ɮc�vc-}#Wy?p7ԾzUƩj<,%Yv<<?cZB|YJ_#�zz;3GO/e UN>'M8Ɍr8Lʎ^ETҒzQ%u+x>KͪyDӵ-S+OɍQ7I;t[֭VJ' pmKr[\Rgㇾ$ڿyֿ?;lMOv~Ծ~6_(Z�^~e'{~2:/'qDTb7K_;td%k[ud5voUd<x|J=MngD[W|<{͏`oupckmUt Sx=Xܚ%K}|O[Umg=o{-ٟ||9)bn{ kl_Oy?Ϟ8[[ =^Dۓrmo[맥e6Uܹ7uxݥX <Y??=L^glSmgyR�97dgaaGH#JP{}ju&-cCv¹sF5S>gNr(}woK<>?y0<iQ~ :t�*6VӔ*W4>lcθVN<G}<Wu1|OFI/�K{u�Jٿ|UǨ jrG}XAI}ʛ6xcS:[wǥm+!oW5VVT}mlL,ѻq2j8ц5[zWy;]>Lc'KN7#0r+We;l͙+Z?j|qC'LTS[I7ǵnk W8 NҨOl:,cOi6rHWۂS7?Wxϼ0?I?z_ٔf~{RUK_{G~eY+8=ɷW$,m>nQZRm<g,ߓf�g?SW-;<v6yXIsxQQ]z^.?'GQi1Wey;JRd_fiv# pޏ C'&Izro?nfZ$;j7OuKOcܽǫcVЭ_.?kO~�/uW͕�1_2�'?5}Qͯ,ѵiS26ܮzXjD~ X˛�?=*ܵ?6o2=jAy9;#gXه |Eq.Toءc19>'n|5g4ծ.%0T5~ΣOF:u+U+|=ױ޺agke6F sI>lvijb͔tm|ueJn;c voţW7t]2#ݾyDj6k6>�ɗ;52<cFl1O'.]_cVZ&k# m�D=|-CN%O?:߫ǿs4(Ęڗ*Ty^3_t϶o߯;?/;Jkvkhhl4̌.ni9K﷿Fg5*O6~K]oTwKowjC& 6ڮ}=]Kx:(yzN4Y2{Yߩ=܏*wQ̀t|Yurl[#eb~uGGt[*޸>~v?5rp<cr\t쉬в-ݓ=*Dm _�gKN匶O{-lF),/?r3]RIir)-\%Mz]n%<=9Ɛx#BvINǷhZ6sb83 6[1/1e}]konԉBå^zj|z_x5<KѲukQwNn.o]k7Mwkܺ3o tmj&{vy37)6m&Y,<ۮN>_~#%)3> _ɭ.+qi#1 'Yqߩ֟�sn,U'-w%7TF4~m>n|Y}ɜ?<ڿ gfFK,cUnIz�48fHkvYN]6<fu^"k1*ܸ1ze2oW$Oߖ0࿚g"jdew95gVU+=nR7%8w,KxcߏladwMM~*ʢ[W-Եk1hXd4=sxpǑJKxx?Vlq& W2eﺒ�uzk-Hd�o<';#28Id8~~p|R|W﯁;'n;r${lucFp}-Bړ|/ZkgTG I.*cMǶP~ݶEz cQXli&eO/*&ΎGaɺ(K♳xlDө@7>t&].p&f$̽S/'.9.qdkڱ/tUrJ{m8ؾ;Vq_xN }?JѥtU~=R}[Vɓxq@xCS2q9?gbÓ s(6om,V~˩ .]{FVF|;34BQKo MܯS|ӓ-߫l=S[Gf{2zj]N+^,zy5[fc6j&^;'zdɺ(K/S3Ǜv*ͯZKR}b8p0^_ZmDV߈<>K2kV痚5[ Nn5^�Q%%1{<|MG-k9td 7ϒj<c9jy4mzKV� x4jZg_d#}GK~VI.=bKU:յkzF/rb:4E.$~K%h{Ni+mrceiXq-פ$r[2%t{͸VMzF(SΓ}׽xR_:,7T0! )Ez6V_?8?7HIu7ڛI/r2!$ڢ&_gNYsԛgiu8i)}1yJݖjQqImz,:j/iѭL%RG)2]i1bo+?/6>|Y/ 뗤^O-y)97ovN%.~�i4r%RZx#,~֤˾I3V/C^: �P��P�P�R � � � ��� @@xw_]?ϩާ^^X:6n~nND1'io9bLL^_o"M8vz.}4my2_\Q..'V>+u'eۆ-Ky1N1. ~qlRYk3K__ךP_4Ͷó-*udEvMEO8ebɯh6UCWvF= RMd)&afӧdkSfT9ij͢o'7S=|Ch{>C'+M~쑒zrc4-K=K/%)7ڳ̖;<97ZWNܐqMKa]fX]X'ic4GiɶeX&/w6SQmdr8oI¦}cZmF(F;ƿiuoһMQa:mnJN8n͓x%:0?=gdOjTvgf'wcr]#A7'T^L%diϭۜsJRk%1qs29x6g^ ]H c* �}UsQ|}]pCmY: J3\]T#sG^編�?9�;f|, ^6æf���E�"P�P�RcE7d}t|?̵۪dy5ȶgY76.wjdDm:0t<z'lc.][zK%ZG9X].YPkN^�6_E?Z_s^m;6/(P.j %ȿ'>_V56Kn)uu2_,Կ%][f^lOLl%в4 Y[ݺ+|D LӥdVϹ;+~,}a4&-K#Ue%onǣnՙ*^'c@[qU즵}Ko ߧy";#}]~+f/閣�/�~z�z7,#js7S۲qon {t�y1ٌ};Oo jw\Ӵ T}$^ZrI5p_>^'NߛTaU^KWR1S?nN,SI=aےzg͓t9j9<CҌ*d\d#hLL_F? JYTP1Ia?h[-x)nf9Ffޑ\!՗VV.ί�qh�y?ت\$y;q3+Nkoٯauuɇ0�b9'T:)'wb?a[I>I{s㳜&ܛmFѴ6=B_<BOW3~U\y>YڅiJT~W޻6{JM'Ͳ^iWidbοlV;Q<<Yri/1hk 2^e"U&XW 뭚8)nmeiyz͓1V<VP[+%-�%qydyU3^I}x;S~ᅚ_~iM~ ҵo4|"yѼa{,=-wenO0�4oU=o?IZ|B.B}o[Կ{NRRrS1ߖUo$7߯۱v3h|q4tPmv{83ZK8KLz6*�+J[Ç?5}y:ױ\!]O>~]~e͝rfO~U8zncNҘ֮q6ӴIi}Lw{^3E/W_6Crx7Ogוcɮck{ԗpbٸ&91s`8O~ ZQomќKsvoWk@Y5$\Ҫkm3sbϢLK`p(=�<+Sv95ʗRK~ޣ6II,3#'m[%=7{+XoK<>?y0<iQ~ :te_yO?611C�}U ntm8{7�oJ�zjz\Cn]]%{umKjNl~ru9,}uo$7oo;xyM T:q=0߭o_{ro~!iZ>tc̫sc)5g0cIӸ\m 1f[C a蓞~~T." {}yvi:ir|"/;(z;�fq|Yb )}n.x:,| zzfK[xonaμ׉=K OxRuu֞)jqۢG6/CWlz3~S?=|N~*cf=ҿ2oHug^Uc{oя<gc=^a\%d\")4]&vsmJt:-|0edY{=GQ&I&1-,d�~8fy8r؛K}O1<LshZ^v.^d+�yK|OO&>e&ڬj,&wŽ:=VOO <x'ͬy?L׮_6Vq�cƇ|gו�G6C??Yc'a~;><�o4=va܏Ŝcf?H}~ti}UV::N׌_il}&_HZ)QVѶ+5<Yf1;8nzL܈[(Ůiǖ0]Yu6k[ #R>N>E.o^ڴ,Y\I,.+`vI|O3%-'z1Le|UwtiCߨ:+xU.x.6d9oG]:L߭lqϿcɢi lUA^k KPIDy&|u<l6t]Jxzy͵9vlQl|0aޤVT+};6=Gyϓhѓi'aq>3Q9uJ2_WU}=яF> ;ܩOFw6λ(7}N#Prk|ji4mkw"�&o>+.d~? 3!꟬o zߚdy/XvY5 m|ЛR�#v 8 tO''V>iAÙnZ4ktݓ-.6ar#e;_sdO1Ȟm~GPχ<\rk۞)-1b՘94`q6 Ww,֤[}yu z:W Ӄ#wG?gU7_&~x7ZY/RNjS|1(&W\Ԯkr8kj/tNwL,YMʛEvEw5:i4ڽavexHU?pyQx% :l3dqp~L*znLKz�^%b:Û/+"S誓ߑÛJ&#iݛph-r�J?9מ+2~~J> W|Guz?;<6<0qGϹ~m#h=� /8i8_Ol ;5Vz7 kSpŶ^LSonpblz#CXy1oxG'͙5Sh#beRˡ5:j{.K7iMczC14F_%d:-\W2ɻbvS~ҏɚ[ښ8)k` z:_сwe_\:v}l&o5e_)`VԦv:_cz^~\l{7c|>s[>J_&*Gqv[s7ܑw͓ZNs]rC%+2ɓl /4lr9Q]޳V}Uy?Kv1_'}K&_7SK0Ͳ}| ]`~fN&Ta>f[no8meܜRFNVuܤ==SB[x/[տ?m<I[VYd裿l[o88z U1D#)sBMor1LIvxfr:×}ff#iwk};Ai|;gc�S*mwM4'w+6}ҮmVq{4>J6�ha%/r(7淮M;_rzBK݋ +Yl%vޔ{jCbym׿bs ؝jԮn34lZV�s}bCFφ,LjO2i<UKO g'dZ^ӣN:պN5R·~4F{V~nԬO4~ն8o}ƞw(6qj<i-I۳�GW*zjGjP5yL]~l~(Ir]ðTrA(HrӖ&kI�$a+5 RI[gUj~oG￁ϧ)'e%>slg:Sͪj9I,nGq`gϘŜ=`Վm:d?ɏƐhȔl{UgS~ݖQȖO;I.8>պ~U2ci7} Mğ8$InCZ'žT*ɖ.L.KtQ V.6\nԤo4sӎvpӣՏu#[Km,~qo3< WY�x`&ߕejF`ꅵړ]]cG5m4zmXnWdfml[drϲ2g,z+ۿoLG5g0?kQ~hf]hSyѮ˾ ?ɶ-:RQ۳sFF¿cV\�pf8$>|SIF{Oߜ_鷒2k}1ccitI{^z1 ld:"6?3_ !-V678f3m2tB$6L%UDlr}5iGOߓ .TYhv5<Je[MoiiQ3�(������@H�P�P5WO3qzalYzm:?i8p=-kNUirrcgvOXl:lV5[sm�yޓ=!{ϣߍJYsKomv{k5=f%zvG ֫ȫ!&~϶*hsMbmCUBĻS6$ 0MuS:b�Ƽl<3 _j*1^s$OhGk3ٵ�Bpub=*Lio]& >%1rYKgc9sKopF>Z wP%\-տ�<lmb~ 'fc2|5Xѭa}M&#)t3 j"y]Mn<v$m{!LZ^,,Nɤlk}Ҳjk|\\QmhCioyOKL+.Vܫ뭙w^>~թKY/u)̮/6޹o<׸m_.p0PaLot*{{~ogNN (U*�6rQt2^$FRةñƩH_H5Ȃ7N߭x]N?{zoϰl:fj�B�P�R(�� +*Suqov6�a[ur~P'Y;{ %8O3"Q٧cixtqlfe dccHJ08e')9I&m*P^}b&6<}۳盖kV0H{3|W갧J>rp߆73mɹI[o9)$MW&nkqYel9I""#h2d5$M=/QzƬ^m~m{ͣm|:$Lm"uKgdyɷHGAQ͏~4L{J8[q5,tyzU6)/sfŎkl� 5yVV&+@(Y,g@pI͓7eeUJnm#g298ȶx7ڕ7Z\[lc\T" C1z.[';o x+!MѿCu&kĥ)rr{#ndʾYۑǂ*s&%Bb'nus{GAM4k4QݖΞZ\mc߆?$VNMQ"Ghͤe4 JSdOf1Qm]Mum&+UގƮj9j}=6pURjow62z¸rnRm(nd<Sb1V'#p?N4k=E4FsʗU/پ%ZN>FF5&5gg5sq~zmZ7W&VnfcO/.lrJҵîfURۦo$kd9JOb6y9C"CmqV;8JP$%֚{4e1ۦ6{+@-JQmIuRl?*u} [&ۘF*Dr+%w}ͤYg298ȶ>VLܴVe֕9m%qҾu Z~1<l?|6Q(;&9alnzӎ;C7^R99Il#n ι)Rc٢Lo}mskMHG@ߢp߷Mn&=`IJS'ݲmrW\y+G3ik< 3\׌M|#6'=%ƚbp[o\<g!z׎� 6S ݹ%a&3(oq9B;E-1tC/>Ώmy{ xc}5errbbb'Yerdb"#MUuOɡ5mk(Y5}mc2JVN ɢLD3')O,F�'#mOƹ mZ̼۬*&巼kፕd>9JpcOf1Qvvm̾}cbw=GYɶܼm\1rrbbb'N.k')Ov"":(:#6|Y8c}Qu5;%߂[/+@R'.ƞ-C>p监(}lF:G=uvY[r/bLD s)IDGA@[Ylv$V#yٵC2C64'fwQRRkRi.2')IO,F@i5VNxM3̈_}𝍯JפNP$%ٙLo}NlIYlg4ؑG4r/Tcu+)=xc8;Q͍}s/P*DZw]qBkߒ~Y5OQ'.f6^s[9/ IDDt 첶s{ JR')>mPgɶܼbpQq=,ըrђi8-iut!ٙl9-ʺp啍)X]mk+2h=GGVLu2h=G%yWǖ^k$R 5YTkc5u_%+GH7Q]UejW4ʟ]mMUf) -Pʞne3wԼr:iHb3H]l# gьOQ}l[NxJMmW﯁Ǫ e]u:\u}p]bim\g&QNNE/y&OXG͖Yl윧/=b":+ ^f]Q*Ghͤa49Jrr[{eEXYdвQOI%)MNNOŽ˶'8=9E&"z)IRrop>նr+'ٷ3؛B> >9NQI6ܤoiw9/ή<[d,^ h2_4dOb+,sHNEBk;%d9xDGAPYlW{@(vX쓏D@xed<ȶ1ShkYnRmQiY9NrM7䜣Ln =oY.^ͷ@�g8o)Gmm>(G>me+l@}Kj 4IOQ'9.k')?=DGAQH�}Bs //bLDv_uk.kRlEb:Q댚2 =~,�G,s_bLDW՗]o&eIM₹%}ӏ,Qrm |G[xn6"^m?'�rBRh('lNsR^ he dd[D:e))%ؑm4iQ9d''"6 �(���� �@H�P�P1Y\3K#�gu{;?%Oԍ iJͽ ⽬w$oK}rTa;i""9 %nM=1 z""7l&K1EmpNP811\SivlY9RX;m+ʷ߼h꒮+uVLdž&wc9G˴#dZ8<OdcG{G #sus5*-Գ-\r͘1buMG5$߬ݴb1TC� ߰D+1a6_*g̖}cvg(]FeWhk}wk#/]vi �~}/|a3U�� @(�(�)�"b~ 75-7^ド]ٽ[$<rqZaF�P������@@H�P��H�P(�(  ��2;V ʺmA-kiQrcGLo kN5]\jV5i4H@P � � @P�7MCprai0!__3Q<yngnm0(�,j(MvJ/f1H(� @�(���)� � H�P�P�R��E� @@@P�P��(�(�)� � � A@ѲԨʶ2!=ikI&KZEV "V`8bR!7�@��>9IFM)-O ���A_M]]sk/|g$L19V+)rOf7V6q��(�(�("@@H����H(�(�( �����A@������*�T��B�)� � �@� @@H(�(�(�( �����AT??>گt=F[yC O&OUүTUU( ~Wۿq<0-ǝKzDM%;UVVݹMy"ܣ'nƺfb1#7\XRl⍷⍷sMɫ;R{E)v6c׊&ܷ}j8+&t;.j3MǸ8ᇑkVtn[i?e9#&ӭc\yim$c 1r=B<҃Ko(Y8W(Wl*m'$oL/Z%oվť.ޫKM\y۫d^+nf=".<\22(b7�-m+h~YN'\w%ʼzɓ,V6faưtUo7f�ر7w6V8y6.�a)&nķ'22yձP#[9>ŵ'iMr)ǙB?O.y<_VUmRQMn͊ODD2@0hpV*̯yaQ ݌[)lCa%M4f6*wk#/]vi �~}/|6 @�@H��@z^_;ygL9|wm}>.(n�@ `h:ΡWM[S욆~M7bkçs3-K~K"Mow&@ @@@� UԀ�=ݦIžPodlެxo^=22>4zVFP(kf}����vq0ss&mV;[%)❇UJA(l2|}UYvY'coԌfb#yG6Vf/_Ͽ/K[6ݻnJ޷d� @�'*^.=-kdckVd21ƱՓEؖEѽgqQ@��PE P�(�(���� �scddn[\_aZau6cU3M}hE @� � � @��02 珉}Og*r[u)Mh��Rx\냖^#q'(N.3ŭ~~p �;afUWMn%ӕm/y^;D  �ӥ7Յ|ku%5ZD2n2 Q{43=�� ��� @@H9ʾ<]dwxAc7ud���(�(�)�  �9IF).9mȥ'u֟cHOIE@��媛SL۷-c6>g NjkfA��� A@@H�P���(�(�( �� ���T �(�H�P�P� �� � � A@@@@P����(�(zι�x}]^<.bSg.o6e32]u;,*km⻷[q Lﻞ#xc3u(߭Җ=6.(//\S|׆&ݹ뱷-Y?<q2ۚMG~LF{:Kҷ?]Cyx:{GD㣡^^}VR~nm>pŴףNE2DztUTQɟ<ox�}L9a8p)<,l{iPskj2߳}=wl;ty?Dۛ7؝5N=b6.)쬻9㴒]}1' qu<mwYl&IC%)8eY3Ô*P,Tc\_巳\S1IS[ķbX}$mjN#Q-<#gf XQK9\슓RϹr8fg:=xՍvFW7gȌI-7gyc0_UTEf{TkmǢX;:zw**ǝ4eR-ϿeM<#OӨSrZ(\fGn:=uB1%\bҕ֩I5>ݽ[Fw(k6ܫM+,=^f<<dӑB^}Ɇ.R1T V* ꥄ !ZwpojG_ٌn|uZK|`<�=cl߯şat͂�@P�R(��oJO�B}{z.I>^[Mi3vIznm%)7Iz~R䳀8ZY][h:)ko\?huɼ1Qףf˓> 3-3�+c�ӫ#<,} 5�@&N4ѓj*$?VzӋz$żf{67 0R3tR^;1ׅͩ<O%ʹYVrqxKߑ^.} 0 @F6FG7o/o$կYs뛄(di&'Q@� n^Lpt=.'-O7<卺6&Eji5y6ioԶh{|{>Kt{W s}*Kumztvi](WRoMrKٳ8ߚp'XT4AF5 WˋOfi٭sЬ<�7]kJ~^]rqn7U+VͶj+Ôʷ%{nwbN@$�jW'3�HOlLzGF,ެ ~_UmI|+o�Xg@H�P��n>LH._'hGOk~-+ѫP�P���c)(n/HڸFZmؗ-qh1=RNrQUEQ(xԉi6N4ҫR\mҒm<gڑ-dP�@@H9qwUDZj Żؖop><2qSVm{um8pj3 bZq@<|G6c3nFWcfъCn0k6 cJ㗏df{riVn1-Pd� � � @vGQΡg'܌2_a~IƧ''OQmٽx}D䙉gx{ϭIh7�_o?W2|P�oO�kKU~w"^Xt̀q/ھ(c^xz( KᕬSlyOd5g$]\f=qVߥ˲_a3nY9 .*%4vsӥxkQ@�@H����(�(�)5OG񱖑?/k=d��(�(�( @t{7Og6}\H(mۢo$-'& >W*_~37kQucstw<mZ:+?^J�P�P�l|#fW?/Z'͸P�g?8ɵ9fhMkjwΟ(ǫ'xRu wl7 P�P�R��qu\|R&>J3鸰Tc.sFKMSvP � �@@H��@BU�@( �"����@P�P�P�P��(�)� � �6~&}^WWO m-B#}/)䏵h; 7_}zP}t~-e}ٍ6`oTG=U (zbcOER)mzb6vGPFuOk.g#0/H6Ɂ۶Xɺ,sE'A7^"v$ eÿ$ [|oֿ<'f=@W7gbG35P��(�)veO%^WFWf�N9asl"u}8}N<ٺ`Aا6ݔdl[i}rR'i(&O@(ߒX&[=Ky?6yJqfCrk/Qgw+ъ{̰o*_o[F|7 <S)}ƛ8.ȨN(}F6N42qO+ ߼m'&N8%ګ^ZvWeSu Bq팖}zgWMճgڝk� ,\IIJ/&}{uvctaP 6I ۅMjq/)Vid#d7$U͖nm�G~ Xى]BQ/\M?ݼ&v[ɭ�r^>V6Y7\}mzjC6GP׵/4ʲx^)uvuj -XCoW5K-qrq"_E供*n;fY^}U%ѫ&W 1 t')Я٨U NO1[Ir>ǿ\YT'tVGO^xO~l,8T&7tbp.9^ʿҽ�p_Z2[f-ЭNPi?%�'#7Ƕݻy 巸׭z'\gFKIlєLOA�ؖd*g|kn/YQdɗKDU6MoCe%z5]n&Hg�5 (־6kGŕι8Y BKIl|4$x˕]4qnu}5[c]p� ֽNۧtdשu5i%MWFK{Rg<m>^$YKiٷ/'zgjj6Gz߾o466c]n&J]uR_�4v}W%e)(-ؒ&\֟ccd>'%"o\`v0m/z28I}MYT?ěDF"Y]M lLO8Y[kgZ`oXG sC&ual]Pm{fdq2ɋ{x"iz]3&*dgٿ5S:imW5XΪ-WkHmX#kt2[>#o~"mz�|:0gJ\%(#Y|.fc'z:)6IrۍLTǶ84-Y#T-4tivKmmIWd'8J3-lLO1e4q^M@>&a W7d*WE{{xۣ1-wNFuQ^qi;y{}(|.)ݸ{}d|AyOJ!BJ5R݉ڭ\:(LOAen7o'�f~ a%k>Sȳ+wَb1d,:UeR嶹^[388U_yz]<=FNZlnXc6#Q$8q�fxI?nϿ4j}Td2~6o.f!mS;UV.Z3']˖JوYm+aT^U6tO'o㈢}(ɭ[^mUTo,[$GQ(-IA\dS^ 6Ia4`}rm^; AG6tO'o࣒/7U6M/fd|2g.eqpoS|leF*=ߖ-QY8qn2M5ڙrUUskŲLuJ\-Kn5ښrQ\[3UeR嶹IlH䣒]sܓ1D'8/N�1^nmXIO. ڵAixbd]}已CLd쓔[r{wDrO/mJ]dbѴO#Tsoeߺ1bq�X.5iSt":_cqiQ>lt\GN(uej߄V䙈|BQ~[ Gڞ_:d~f� CQ0+34~3zRn}~~P�rBfs]-f#i[2ٮ�]615m_%qkluk_QrW֣U: P�P�R���P�PB�P� @P��A@@�����(���� � @ MWWI31tlxyѢxІZlQݫr֙K]V9*mVl/4_.Il݌=+'F˚NcQWbaOgW6D?^FJDz0'=k9bIwѴ!}FTG�55Է~\g3 MͣoCLn1n־g4(Ƈ)5W<{GI˻2Vw̺ZUmfCw޽fgkLl-~V֩qފ۬enR{+[q- dQRYd \7)u-/䈙7|cxdUJ2ΕoI]w}#'/m/JT],Er)od۲-uwc-.[CxF]<d߫=}Mo>J^/"JWKhob]*}knIױ5mь5<*0I[̧KG&̱d|`]:JW3b|6$L+>I۫¹]Tܹ\spkђkitً JvJJK)MKuuGމl&wM,z"aJa87.yԉ\)<z:m^]֖ru{/v}SLNNUΦm8U$UߴƹWhln΅-MOefSh;tKx>QS\6j2ukqy#+MĭbcVms[X-ɳS]E3d-9^?a,ÝXڡ[ݥ8{HlEUd[=,\fq]lW^36|x9YսҫMmϾy~<9oَ:= a=@_u8=^6F*s}/_vi �s~}/|a6*�B�P�R(�� i9t?0Kּ�3]? +ㇾ7. ta,X`v*ou|n/H]z:g\ RQEUo:{n[nt֓~-xX*>655qWrJ]^ffqk.N-SϪ6Q.Jdk$WϴuVJr--X򉁧gy0\Xjrbm*43q%7\{Ƕ�LrdfG)xP=?&OGOrO?W//wS<vqjS1rlQۭo\L$Wwح-I9$L>zׁ?KtϬY=g7@9ttSNTR۵ٿxzl3J& * b-[w%z=938raiɅN*[پ]<Vf=ex eCf$v[u�ZlfxDpqӝG썘1g)mpN)KC_y%t_SܯtmI<d䦹l)<NJ1of"7~:2̊[J3-9?Ն7g|uy8kÜ8Rp.UeiD*޶_vve7\ҫ wB&II/١Zmd'oVT4 ˫gʶv9⌞] 2z�iV~Nv.L)9AGE>4%b0E]jxw汎<auYϚOVļoNnV&Lmr)IGd^Qۧޗab~?m_shh]ԥҕ=ǧw4YL޵*xfQYԺꩨF}gIQKحs4u _CZU68t?]%_1e�M}c[%nv<:vݐ7r=hSC/'NZ7j-N߇܏#.'ɇ9b8GViΨ].X9ϝswu_}\RiswFEz~I�?zO~egjߦ52YY%>'>I鐣UiVKq[o.g.&ItSՄ0O`C'x ŷ؟Rx;ՂiSWE䶸F]ܟ_tu3nYu*ծ76<tU nԗku38kKN͗Um;IxXNK$p˩7vH6Fƺ}Cv|i-\Ko9˵L F \]ǒ2R/lz.SR^Z\-F+ǻǓ598)ь>Q0吡nt(o5&|39m^*z[9:d_6=5OoUFũ*/)8W'Sؽ^/.Lz zCżQVS4g;!R1=t{̟6m{2P6 ks)oGʊ{s/gǬN*^-V7DvLeڄ S8qh8;nm97Y~3Vַpʇї]-N4ִtJ^їҋg,eZytٟzdO&<?9)vl.X2\ϝ>_y.Ԥ}jyE13q1k%IN1[.e_ۿt2ͫ5%Umsҹ)_mmK7:uiǣS>p2C4>57TE%i.׿KI?&QѺz+=!CesY|ylݿ0~S0GW Y8KŞѼz.>:7+Qq[ɿ^<[Z1чW[K,-O.898N"%8ɾԻ~<+cg}f-ZVuwbC!6RK{:ף9+ĶISv3֟i86 KzS%ZJ-=fQx+ ٕ96[T-\ѬW Dѳqel6WR}G& =W "3.Ǎsŧ֟uֻ {iIы,V:YFOe}_i;Vs<͘o(zu88AVm{F$&|.NkZ\%)vרk3>z,ΧƘxyrŖBj|u۷SǢ3lh:n , v\o[lnNzޓB^kğ�_/iU~ y ~?y[cZyVdeC.�׫8z)ͫfђ#Rg&-%Gb;LլPŧQOmڷ5|QiO&Ɵ~(*cF߼|Ս®' Jϣ|[z.g3R: -׎mtx'<\M5{QGBӥjubd"MYwt$ԵM7ŧy5iWWg6c '[uܺ˩{cf;/tݠ�eKrXߺM8rRquX;]trm۳ҶHq2ݽq^ezV oFVǢ]K�/Ԝ8Ɍstx3FͿ*B2mRdR헷Ww.|5į!N%Ԟ'7.űtVe6gi`[(U|}]Ϩp%XGտg~o#CXó?3D Lu>V5_.yVg6ӊY= 4Ӣ[rRK[/�Ǘ}Et1xMmvFr2ٛm(⬛9zᑎOW�3ukQ4&|lN"ss[zO_,Dy&ۻX9wbYEQU϶> 3 -IѠSӳěߑ2O+e ?E_Gߛ8WJ)_Io_sz̶mS4ʌ^֒P=KǦHM('5_%)W.OtyVN 8D'?fWNukr7ɬx-Xqmy>rbl&KL[앳ٶ/^Pְ4>\lnynQ/Lۮq'=֟/~IC\ӥgʍKwaWu*]ٷ~睗~vIŘ (SimvKo2lmOAA\)=˱gX˥o`O0rkZy;ՁzoKZJĚoIѥЕZ-S[NRG~I{6^9G&7~wU/6 /0\Kd6?]*vlgnXƾ(68{_[o2lp^Zf\9}}v2qF&5>;|J\5WKkF)Z.uSSjQʏWۃiXe7tӪn<<剏U2Q^yix6rq.6>fBx3_sc[ oB�(ƩUg͓GUѣ Zh[Ԣl+e)X:L&MwmϿ1m)&6b8lݤ)Wt25g' $CUstUrُ}y,CPυ/#v[Wr[Vhц-8K~HUg1[/ޙM12uk)Yö-LZ;ĝnf<rǛUm}g}m0�ORKގmW%NOUi*◰ oU7oᑽj8tG*%|m<0u+'*9%)#<goXbj6WRڹ%8 6SyXg4,|LdΤ#6$xw+ƚ�i۩U1ƌRms42w NY-E}sۿ3d]VY_LQG;lbT~mLΦcjMQ<F])ugLV|^�2zA.48r2*{oa9vV ]oXRÖ응/Q,?XkJm+u\xX*ڔ'Ҿmܑ-f%jZX\7&)9I9C'Fs@aNDy1}ŜMyBKcW2|0 d϶)(ʃhbWuNŴ=xq?j3OHah�vo+:f<2C; 1z�i1njuy:(gu6o+u}D?jZP�P � � @�� � "E�@@P���(�(���� �@H�P�P5?s31z]~a=Ohc.4[=kqU̴}Bpˢ*G}o3,x=?2:'dqP'oIKNmNc}6b΄M-]|wI$4Btdܱ gHZIԟoY{qhL]GX㒝*Pqv}Ž+OF30bh:FcXPsixQIӣ&%F<R~ vnliYSxv=J,d[o1om~'S"eFCLveSՎZm'fU9: '}mgDDmI0cyAE'ԋ1dk-]}nrۓE6CeIJOEر.19Wz)-ELo7fhwV^kےn]cevl  SW /ߒ;u-L+Hý$ ^k~N?kzoϰl:fj�B�P�R(� � i9t?0Kּ�3]? +ㇾyRq] �ꏞyKOS8/#[?vNpvOчi"] i_e6$z{3e{6Ŏf<gSî\;8g-7M'[{'܏v:sfג_<yc%:~S?Kr~Œ;Gkѽy?<w?uy~X� =mo+tlW-w*z8+oUG|1Ģ=fLR2 $WvtZfؿ&3_c-5j-;[Bmx_ѥdH"]O$?#V>O,ҸU&GF ެ κLx,zKӨVJOF�n[Y5?kKo<˘yOeٲ"8fE,SMWk7ͬy';# P��ۉѡ?/?[uyNO7~|0}|QhWU F J7vOdB:_ԡzj8{&SL{GF>5q IAo&[ZfbJb)/i0V28غ$DLod2zt۶nY~.ٓZ<ү?Ǯobl[o-13,3jߜCtwɅzI�?zO~egߦ52YY%>'>ѷVִvnE'K8{2cG&5ypB95vLF^P \θk<M<o8O ?^ɧhvLf-WeWYUqq}{U%bEvr[/ј?6qhIrV}}I|H|l:'pN{wu41f'ؕf/Ul}|}okWɟKDUV􇛉~nFҵԥ_+OvV2y0y蚄{ʛ_/_w<f՜N9TPe:ދ1b{ȟsWmZUwRs14Mvˈ$);rvuR<.!?nu+ѵx M~J�@OiUvK9g#'@_&8m|#Z~ŻH{Fzcfj6Ê2u eג}Ŏ' R}utEǚ5_Wn)>Lz4(j<e�gN9Ze�P>겗4rj>y(CWЎEn^dzyr!ի+ɻw)>] 31;0kJ1s{$wlbXyӇv}SnF E!k]ɜ\姲͵;_in( !CCm|4{Ū�V�=L g-O_Z)cWs? TJȷ_a囚OWr8}N{k]:>E>�v٬q'viUV:7(0g&1PzNLRg*̵> fWmZUw'FsocD&=G*ԟD嗆Ko8 lq.g&'Ү|ϱ?a 'X^ <~ *tk+GR+)>Ƿz}͂cVS #EiB7 2[NqZtXyN.ne[\Mnzw2H[WAk&'CDzk:.Ͷe,ttxfY`X]qQ1rz6/(/OYӗA�*vk#j_iUXY /bUY:6}ܒ<31\KRm2ޘz~_Yite1#+)C>g(58-Q槬 #[)&;I7/[1G,o#U?ɴyB Gg~g~}d| k<7(lj:Iu=Le|B8ñrJ+�im0CTƅdU]I%$Gm"&e[|W2<u|�Q3=wXYj,X͍t}}f'l4,z#S~ֶ_Ѭ%ҋڏljl]'!q'ھ(#A߳g6kz.wa]nuŽ_š[Zhc|->8ַam.Ӵ٤ ܌A6)Jk,C3_ 5>Rz2<w76jdg\m0Ik,wk18e7 똽~nOl1F9ܖW:ĊjoٿW4}$Veg͠%�Ae.QjnuКiMu4IqhX̛O[Gcx2(q[�tDOs_&slIw)}>1u2ލˏz̒)Kl66Am*#=<2o8eB,四iv%/?+m܃xߚ#xIdrg|td-_G>=͏N>q^�WX$4[#nc}'-k=Ir]3꿛5<2CilKg|}g_u&n*IXm(růJtbxB*G*6>nJ)tIɤۭ3V<z8QӮݨmŶc֭r#\x˵4G^*!a3UdtLlտF~5f&}:y53<;I.siEgR%)MԒ\hȸ64х&06N/Lu?˦Kbch~Geş9W+ɦ4z#[!Leʼ6G,{Ŋ�i1c6*uq+r x"_)M7۫S kg ٿ7I-4QM]od6.+sjzBK9+(͎NM.]>]+;,Qj]KѼ2ù ~nZK]Ώ:WN7?Ϧ) dUo= B?n'4j-4}MgOoC/tGW,]%Ԕ平}Xf7W0xm7 ݛ$<NמԻ͘$2Zg�|Y'<ڡ֭#3Z_oE˿^G5in}*@@P(�(�)���(�(@�(U��A@P@ @ �P��P�P�R� � � ��� @@~|Ծu&ϫ\OTq1nxN3uK%Nҋ]qڦ)qT ڊm}^Xiɝ[ʈ-C*t%Koa&L8!ʲ*y֭|U[qQwZivwFbw8\Y:ߝG!_Xmr2Nڶ)6}ӣp]I'x]lN&̱}ck8ك *]y_+ongljoX<eevqi-R]�qgXMjU7|:gkN[w>rgߨa{b43 E7q[lǦbIR"$1"2.В P1 %ˏtZhn]Z}x>c @#||o_>PQ7�?9�;f|, ^7Cl� �"@*�� Ӎz,%6rd1 /KZFlr7KkGg`L6ܾ+X{L޳w8/aMss$<:||36 :qPŜ[b=ޏ;X2,JsM.{;Ly&mraXk\ ]snxǭ]K�c[z)nk׼31:Y$(tn^E)W8"'oyíqni_8zU[r}][?.kDW6mgpigd׏SŔTɾx=yXߟ-\&#]K= -L1F:֓ +PǪ�}mpk0d~*xcE܊18Oɶ5S )엢KWYEc)N԰5>X9udFI-G7gb:ێ6Jk9]*jԜ&}zaG> GBebuxٺuOywÜ1]Ě>-s\Ю{�nM{ܜȉv7Ɇve8#so{GpFV5F,Y9Fq{-N=fXSiZiZ"䍜"ݻ~�&6Sl3|{>h)ty^8vZqtu =N8P4.k]]óG�ekyvfU QY-|˨v;ޑb'33qnϣ\SѿGYţi�ƯhwSE<IFɤ_Òbkch|}9z ޝƚŏ>o޿BM50~+W6? k:rNuIrVsQjpFjpVS" Ց}0oNΊ}}y5Z}<Y9n~?d8uU>Rji˯nMxd|tqi>MYQdlMXô0HG6|[cRp_c4zϱt$8LMiM%ewK-(˻&6 ci�\57DʏȌ-dee�}\^Pu/;A8y_oOri}fZ9){F܊6;ɮ+72w7_/I-m W׆7jCmw뺍3yeiv*:1e8f>uB9=FEfحpWGSm]OxL0]|> ,Y9JY b߷2Ycb%-7k5Ռ*[R휾_M,6ppA̓ef%++OxIz̵Zh^]`ݼdz2̜x%MISum1v<9xFU_lj4˙7)|NF/1Ȼ+"ܜd'ֱXᎌށ<YIvG[b慑R~i/[wL{i D2揻~asj;Oo,qeZL96�[v$&i<w\n۳2+(MWmRXߙgjV-/*uAKM| ڲ^M 5fSt3Ҫkx86 7L<W<'&igxݓ5{ُb嶴w5G>fi1zȏ UF.ͬp}؎_p\5:eϙ�>c}Eeweۗ>km4)Vރe)΢y +Q߫g Q1˛mFj% \'ؒݞXhd RŽ]W۩:W6cVzLJ=WJ8j:zvJ5#bɓ7(cͥ')9Iݳ֎LqxZ.u2b7�7WǛm&Ⱦ5IOžz5V6Mu|=3#7.Z*mip׉naJjY^o8ʥt9E8h147tSMFnߑn?3.&;c0bprϯ+=pn}~S ZD*.8̺}^÷Ky,6l\鸜?dU|Ϭ⽲XIo;=VMݕ|)(MZo%ƹXźsA.=8cUӱ]c_Mwmg)lbo˒Lsh\^eQnbJHrFc&Ǻn,12Q-[:,w6c𖾴{VB.i˗[|Mڭ?{XY^f'v<rq\9~߼8"&<ݍ3\~ꨢ,f[~yiymwyS5:kq_SG&1K(xTӳ4eV.e6E[g{BD5֥f25G׭zv1s̯5VlKoZg'Q17W %[UUF<ұFOÙdÞh6řkW*&Ӌ?A#k"YGFW> %&Um幅z8Qӱ˪ڄirGͣnLb~4qή=K8Y?23Raǟ 1'"+Z$Ksџ60tFG> -#ŏU:fvtr~rokHf=pֳ'T&!l'}oÜ8rxcDY\>~Ub^[W>XG9a;6X/&%<vlɼeI6_ZzRm<G6;shɵpWfy&7߿�zX3Y%}2w%'/MɨpO?^2ǪrB2w[vk.o ;kEҚU%Ͼx12l<oF"ɮIB[Ԏ]&;Vg6Hs^^V]UM9l_c{^&ӝ)LeFKɿbZ>sBʷ6rbc4cCS(]:FOC8Q*fRq{rˬK%_sYY5(m17Z!]Mϓ'hr-GBб% )WdKR~cmm22mɷ&罖KvzUV"ɹk 8˪wrF]}Mnpax˼.lcZuIY휪 :b+7 z%Rng$hBs<}9mrME9s[{nw;{rrш+WU]}o)=Z4+61 .ce[׳p{f--Znl2k\˲pGݗdҭ˸w\,Ȳ[ޜ&^9|?7(Ykڹs^͚~ZfnfUݲ}QG~:E+ ]Z WQgqN;wv>m,(�=m\k<Lof3U֫/:U%g#oֿ3>?s}ޟy띛5[0J`Kq\٤MY~Cn[2o`}BUgW4g.UYLVތvMUJrQ<c.Y9iz\-ʱ%+b]{R)X2mVg>X*y99#6w2fYzlUSƛݥ|{q&qsPԩˮ[[ɿlԍNlW]L|=>u\ܚ.v i#&oiKgS־ -J]r'l2mg>X&y98c6fف^Mk}גz,}hzPWԧ.I8bqO&<󋗡iGpR$|-$oc y89tKY^ߦֳ,2ZNf,LJq~_-2VU7Jp^%m7/[0ɖsΎ\zܗOZ*,D*S$Q\s9Z6D49a.iIp˖ydٙfEsMV6lqwtoWIϷzڱؠUa|)Һ%WpqN XOj4D# 4 7{*<2LeNmf̚VR5/Kouf1/x8FcSm4j w]U, 2[ fB˓o#>R[׻& kh:TҰ]PIx3 fg0-<z>_^7G]*ȩb=.{m0ᘞ+ f=?'wFܘ;%jd#f߭.I{(GWT]:Kz.fk~ɣyaZmLm.Ftn%gZo+#1ݦxqo&Kxs=_4R/c@6n.{ulL۔$xu l6r}مf8+"B=^pVk3$5T '*'ڗl_.>>RY)3&vԤ嵜Q-oOQIZ{ fR&ܛݷutVχt^KcmQO5J3[uO[x"Oy~R5C*YSGM++7CEg|#g$+}}m/KNMFu+bZWC\m9kҠ���@BP��(@ @ �P��P�P�R � � � ��� @@~|Ծu&Ϭ[[$ z@" 7E *@$1"2.В P1RHT0s_<y侩GaN6AY_a @G=߯=ڿ|٧6oP�~svYnLP���(�)�(�(�(���� @@@� P�P�R����R� � ��)� ���E�A@��P�E�@@P�P�P��P(�( ���@R���P���EP�(�( � � @@o74|Y=sOI� @@H����(�(�(  P�P�PE�@@�P�P�P��( � � �@@H��@BUB�( � B�R��� ��P�P�P��(�)� � �S??><u{52y*Kv* d�+ A�*$b T" ʠMَ$R_UWeš)7cf3h>(wc%=R~eM4{Q22OfGv(v �s~}/|a3U�� @(�(�)�"� @@P�P�R���� �� @�� @�(@*��@B � � B�P�(�(���@� �P�P�(�U @@H�P��� P��( � � @fpu,2e_$Mه7� @@H����(�(�)�  P�P�PE�@@�P�P�R���( � � �@@H��@BUB�( � B��� ��P�P�P��(�)� � �Ÿ@ѳbvfMΫ⺔/Q]jmShvkݱP% IPTT1X J@ʆ2 ]u5WYd-# ޵;n'|v+J.4�[>;C>_kulgwS|⽛ߏlxꛘ;~O'~/L 111z/|ݫGݧ6oP�~svYmLT��(�� E����� � ���A@@H�P�P�P�(�����"(P � @��BE�ABP� � �A@@@� @��(�(�� � H�P�P�R��E� @@H �� ������(�)� � � @����A@@H�PU(�(�("@@H����H(�(�)� �����A@������*�T�� �)� � �@�@@H�P(�(�( �����Av66vhV8Kx3]/lsR]<9;\_џKS<mnRe6ӿmϠbA�yX>� �1* 1hCagpbUVɶ%ozD'WprfeB]k}xᙦ/bIҴ-#HvEj;d&&I+U]3>leiM=$z�YQ(@OfGv'vڏ1@W7gbG35P���(�)(�(�(���� @@@� P�P�R����R� � ���@B � ��B�P�(�(���� �P���(�U @@H�P����A@@� ��(�(�� � @��@@@P�P�R�"������ �� ���(��R�����BP�E ��(�( � �@��� ���(��P�R��%?Wj'ɢ{1[5�]mgfUל<{BrHv?W-c߇7)jo$�V `AQCa-z-R[jKse0u?%ijκ�aKoDmzwR%zc /FveGn^J}C]7m#m%<}rUjǭulW&dlsd҄ҋhh޼py6^̯I׍vs~OuSbzǃ 2^i+}#1 'K ư"Ԣ{bcdC&4|cKP#Ѽo_>N?czoϰt:fH��(�)(�(�(���� @@@� P�P�R����R� � ��)� ���E�A@��P�E�@@P�P�P��P(�( � �� @R����@H�P�P�P���( � � @@P����(�(�)������ BT  ���� �� ���(��R�����BP�E ��(�( � ���� ���(��P�R��%_WiG <2eFp%%G)Q;xJKB^Ux{.ыmLYѴ$ԒiG7D} H`$RbG̽(IqiK51l51yWG.o|5`M /8>o*^Tw]3km3<cvcpf<u48lԟ[g>[Xg ŕtqm(6߂[A3>Eʿ.oҺY{i;$rc[*nV&MxKrFF=%d}lTz/�Gv'vO1@W7gbG3`��P�@@H��� � �����P(�(�)� ���)� ��ABT��� �" P�P�(P"(�� ��@@@P�P(��SLV7"g*<]ODrwbNNq]<\o�3W[O>.zG9YG~V_bf?bfG~SL~E?ؙ~G~SL~Cai]O}ޏM}O3{ v>ؙ~�.ߧ7'v>ؙ~?m4˷>Gv>ؙ~G~S<~Cqi]Ooz?_?m4˷>G7z?rߧ7=}O{=}O{d?l˷>G9�.ߧ7y?l~O&oz?_μ�.ߧ7^ ~~SL~E^ ~~SL~Cx1g-}O{x1g-}O{x1g-}O{x1g-}O{^ ~=~S<~C^ ~=~S<~CzOrߧ7zX1g-}O{> zOrߧ7햓ܷ>G^> Z?rߧ7U�坝n1V}Lt~o/{zm~U[˧ˋVau ����� � ���(E��(A@@@ � � @���� A@@H�P��(�(�( �� ���T" �(�UP�P�P� �� � � @@@@P����(�(h1S4��RROfv"9n/zu=GE(ů |O_G3y/+i/u][ulgK㊮|E+A$ { �"%p7ˇ5;' };Ghi#>= ^\mq)BKtcGLm;J>���iT1Umڠ_i^.NTI>\@@Le&6)>}f Yػ1�k~Gݧ6oP�~suYmLT��(�� E����� ����A@@H�P�P�P�(����� ���(��P�P�A@P� � �A@@@�@�(�(�Q~{gIA=8==f_QʿUDض^,]z}ۗ>_쾋6�Wb8_)p!rOSZDe x^Æ)A{ S:*8tU0qO 8`iWp>Ӣ/p჊}E_^NÆ)A{ S:*8tU0qO 8`iWp>Ӣ/p჊}E_^NÆ)A{ S:*8tU0qO 8`iWp>Ӣ/p჊}E_^NÆ)A{ S:*8tU0qO 8`iWp>Ӣ/p჊}E_^NÆ)A{ S:*0qOi8ax7|%2Ef'z.'oiMٿNjj>X�7Y/?2R[~⌸mOy /KjP����(�(�)������ B�PB � � �P�P�R���(��R � � @��A@@@P(�(�)���(�(@�(U� @@ @ �P��P�P�R� � � @�� @@f�34E-V~(˖Qi�ea8 {A^TRG^U}< yuPв6N�WtWbOGS<o^G&<P$�Pa=T "a�єtZKNo+_[c<}g�y=!mqp24xN>��×F&596*.SEfkvn|B(Xw}4r,A=U1COk辨Iz&7bo'3[_>OCOmGޠ�1x#T� �"@(�(�)�" @@P�P�R���� �� @�� @�(@*��@B � ��B�P�(�(���@� �P>nߝ,z.~d}gٝ{>�N4%~q3;۫-(v ���������������������������������3[In1tueQ-,٣&9SIcS2RI sbݟ i~:Z�P�R���� � � ���(����DP(�(�)�����)�� @� ��(����� EP�*�T  @@P�P(��(�(�)� ���A@���3XQqQ͕5gZr�C7PĞu}w>lŖحIeYO*4|=>m_^r}Mriq=[=ԉ� ';pb E>Sdo_w~<JntMn0J|^EXnʠyULT'b"fy/cr\wwg(/զ<#i�X>BHb%ND�b>cmGYލ �zι_?>> H���(�)�(�(�(���� @@@� P�P�R����R� � ��)� ���E�A@��P�E�@@P�P�P��P(�( � VcnЮKlפ~3:tyeGb֟R?[%%yjR������������������������������������|*qq}bvZۮ vC�/Ew~_ O]7}Z�o7d9�(�)� � � ����A@@@PU�"�(�("@@H����H(�(�( �����A@������*PT�����(�(���� �@H�P�P?( (�� 뷯nYx:em-BEM{?Fe8ag֗v{Ws mo1Ze<MGT[pǖ7ŢΡ@Pa=W"1HDCA'_6M8tά]NV+Hg.] ^NgeG<>lOxkѲ'xfskùo]ʹ{n Ey5]D.ŚT};R-r9Q1 }}A$|~]L#/[@W7gbG3`��P��@H��� � �����P(�(�)� ���)� ��ABT��� �" P�P�(P �" @@(�(�(��(���M_hX~3�_ϟe"b1LB�������4(Z^7džgD1D-}z쌷zLZ6g~N v+wfy.���������������������������[.=Jk-˜6'%rg]&<s1Wj9Od8� @@H����(�(�)�  ����DP(�(�)�����)���A@� ��(����� EP* (P  @@P�P(��(�(�)����A@���3XQqQ���.:bB~= }N>7,OnXz,5 j(5ֽi3<y-I޲i�a)Җn*uK{>;NzW'I{8$q٧=Z-Xʑ ʀbH(`$|I. 1{}Gvm)'}8Q[FF��:zx`ጨ@ VxE b%_/O>P:T�~}/|a3U�� @(�(�)�" @@P�P�R���� �� @�� @�(@*��@P � � @P�(�(���� P�vVk2wgޘhä~<`��������c`}"m_5��Ҹﶺ)U\\)=R[Zͦ+e&b#yy&oMW;:8[U}|vJQ^}6>ŎmVM~ſjdM�)k}Kgu_g%/rktv⫣I1id88N5cε c4oa{.Տ6fmmZmT8'SUVrʷ^Ktǫq)3ڙ|GC,WgSR{rhS{b?7MMraky?̌2p==攞Il�㿽koyy35>=Χ7݃fELdO]:X�(oƖ3s݈MO3N/+=RQQ[EnK~Ldھ]"eKڱyɓ/)/581s&u76;>Mؾmۣ.izQVǼIo hpԩņDrq[4avn5njgO#~m#ʾvE^d(JYRjrI_RMiװ1$\GM۵o47?d9+_dK3MXFj7k!ۿm3ǭ\ei<UQnڵxk"ǔ4l>ڽ̟[ ?Li֋kWtLyq{ǭ~ļ[>{Oɟ$bs5qRon(.&-n-r˞޷gGaiqDF|L1*riO(Ko3vnR%۶iǶ'ף FҜǙ+b`ՁND/X9Mw{fvUuyI[OxFzoko鸔NM;]I-~Fܽh>Ik]1R9{_|a)iZ]Oz|%6qR).?h{f -WiwwiUss X\sY $}F^zM8)aj޶PgRƏD@������zީ{ mѕ<N,g5?E�ڳiڮڈl}\ռp � @�@@@P�P�R� BB � � "�P�P�R��(�(��R � � ���A@@@P(�(�)���(�(@�(U��A@@ @ �P��P�P�R� � � ��� @@f�44�����i5n%[~N.>٦@ :sȫh~٧<2]+hNVSɥ6.{m~<{KgiѸE aA|63kI3ڷ>͔O2Y[JSMh6{~chOY;P@(I;+|"|lvݏ)Ҡ�1x#��P�@@H���)� � �����P(�(�( ���)� ��DP��� �  P�P�(� @@(�(�(��(��װO5g}5&=Ӕ��������US�o�h�ЇľyWx U[%\$t]OOSkKcMmo2on.3_9u$v-\YcT'qƧŸCo<;mSA(u쉏Uť<e6oU<em<6) i=w5}m<Mo{ԗ{+Kˆf8)$Dӊwu.=8g&cHt{,\g&v}=QkoYW J՞q�~:V!fff]bW<wrrݯ^�{)Y}9#m{ZcsԒIy}i)wv�8sǪƺ;$\HǷ6LOGݗe#O{OZ,|Oeoj6}�/6#n{yϗ�Qw|\x /'kW|]bFܴm gfDz4|�|мãN8|l{jn/k1\آ${J]_j�Wųb;yeœ;JߢM̫[|Yk_I>qlIߓl|n Y&|&K^ݞ]=v<;iecN\}.g/edZ?xڨDϗ7?��ehf&cbcW\j-mڌ͖oy/w*VYZ8#Q-EW9J9]o~ǧ<c~<1X7^)leYN5y'U3Ǔp.m]r}]Ky fo�U5z=�}WsWKԫytЫ{R$|)놱~ �������|[\k&^ᕟG>[�ۓcsd(�)� � � @����A@@@P��P"(��� � ����@P�P�P � � @�� � "@ @H�P� ��(�(������@H�P�P?( (�������i5[:BOxz,^+` m[u1.G_]+S0v˗[q_bnpgz֡%NFzUO{OŚ>eΠ$ * $ |nQ1%ƛ5ׄ'f66u+�??}cѕ{-;b$T$ּL>g?CKnP�~svYmLت@��@H��@@@��(�(�)� � � �����P�P @H�P��� ����(�� ��@@@P�P;8pa<�w}&yrn��������^2,:F5[EьZ抎gֻϲkti�,y�w]~v;KpilFW4}k-i>dˢۗ^s]jg͊.(OҞl[ =\q}S5?/{?yKuz)ֻƙX׳sN3,-Jͻ ߩxݟZݢ~{�myfkΟ+j# FvCdOnnIXo٫3~?�hW:~<X23m^vgy4g3D>~Q~KXz,iz[Iӯj_sCo,k_4xWKlvu<:Ƌn]>UtjM-ooj#um01Mm�,}3?VGٓ$;v[.Ϗ$K_&FO7 PǞ>L%cs[M}WkgV#?cm�rn(ۧ6_N8yog=ƍkK5~Mij& Cenz L$Oy07&z~f8Z<kϵodS6;AVi>Ms\x7??M[+F٥niWY.hiͭ]哇kP,Ҵ벡U3Suчak0`-ajifl\Iijk!5~Gz.rG:/)75)!̪#)*reپsmɴ/MnSxo>s?ڞ*8[ƫm/VhOYߖ#t,}aoYo۲R-؝ 34r䉥wSUA5QG[ڎxW8GScZ8GQRp{Z߳o}^ ~[cxYt٧. /ƌY_I[{iz�^;IOA6jm |Zv3ĖEtcK6[>_-7mۥxk}[0������Cڧ1Fx{>1Y_S�3?>k2E;GD>P�R���� � � ���(����DP(�(�)�����)���A@� ��(����� EP* T A@@@P�P(��(�(�)� ���A@���3XQqQ��������Z^(uzKZq%5c3Hӵ�s,x2UI;vJr8eV%~$]W/v}W7MؽKnR# 1  ź+}5F/}G.<a3)ߡ$ O+84W}'dD)ҏ]$U@@ZY;w3#{c;yN�=cl߯şat͊��P�@@H��� � �����P(�(�)� ���)� ��ABT��� �" P�P�(P"(�� ��@@@P�P9+}�43jSWXwbgO8�,S}DfѴ+������������������������������������LsB=|ko3;6qW'%C+d>pa*D~O˒r^o>jnk���(�(�)������ B*��B@ � @���� A@@@P���(�(�( �� ���T  �(�H�P�P� �� � � A@@@@P����(�( }\~s�����������QOV'\RڧʻkZ,D;uѳ+%�[~}L[�Z]oGNy>:�޵ڏoX; Z}iƱF)Io 9K<t|?w)|C:qx/xR= :$Q[[0C/ViPIb$ve=G_u<Joϰt:fb�@H��@@@��(�(�)� � � �����P�P @H�P��( ����(�� ��@@@P�P*40SQrFhYlw׬;X_ihh2~peO=ÚQz;G2������������������������������������qb?>N̩^)pQ<_aNɵr_7ȟSvx��(�)� � � @����A@@H�P�P"(U@H����H(�(�( �����A@������*�T��B�)� � �@� @@H(�(�(�( �����AҏҎ`������������If-S~umo6~#XָOD%9߃d�^B_os;0k㞻 EոW>j^gi~WjTY֩!uя%E�{psdaiY|*8~ll}sNr)NGӺPI`�1zߒۿ'(w| *�zٿ_?>>  ��P � � @���P�P������@@H�P��H�P(�( � � @��P(�(�(@��P���� � �@{3Xx-}.kG8Q{Wl~}YŞ6}V,.'9w&&:��������������������������������m:go}GaojcjyG{^v'/�`""6LT������P�P�P��@(�(�("@@H����H(�(�)� �����A@������*PT�� �)� � �@�@@H�P(�(�( �����AҏҎ`���������������G%IYqb@9*44j\sZUǯ=^e5ry..m' #w"P# fP#Lן;yN�=_\߯şat@��P � � @��H�P�P������@@@P��H�P(�( � � @��P(�(��U@��P���� � �@S۰ht}zGOn0ۋ䍍=iCh?Iq6OLzڝK;gǓ^xex9x;i~'W~w_+?x;qy8<}gur3O9_A~'W~w_+?x;qy8<}gur3O9_A~'W~w_+?x;qy8<}gur3O9_A~'W~w_+?x;qy8<}gur3O9_A~'W~w_<wAGY|u=}/`Sh/u\=mP+7-m|�~ߤ|v\wݏ}CR ����� � ��(@ �(A@@@ � � @���� A@@H�P��(�(�( �� ���T" ��(�UP�P�P� �� � � @@@H�P����(�( }\~s��������������������`ӵ9gbUse?8TY&KE|-/:u�W2�طKUJ=8hkeyM-a9Iv]f'\WX< C@#|L>c�CIct�?9�;f|, ^6æf�� �"P�P�R�E���@ ���(�(�(� � � @�� @@@PU� @�(�� �P�P( � � �� ��A@@��SL<t6W.J*F^ߟWw>*Cs{ɹ>*Cs{g?_鏡g?_鏡GOWczNo~9OWczNo~9Q~UߟA~UߟB}U>g?_鏡9g?_鏡9GOWczNo~9OWc螓ߟA~UߟTg?_鏡9g?_鏡9GOWczNo~96^'1='7?}U>e>*Er/>*Cs{ɲC'1='7?ʯrl>*Cs{ɲC'1OI&ʯr/>*Cs{ɲC'1='7?ʯrl?I�L}I+ʼ?I�L}I',|g?_鏡9ycW}U>> =K1WtS)ʱTmC4P( ����� � ���(@*��@����P�P������ � P�P�R���P�PB�P� �P��A@@�����(���� � @ aiGiG0���������������������`j\;I 6]gF=NZt3X1缴˱teN=znl1<>iUMYu3حדEɬb/$zH4}3iZ:T6 V=k_;_;v<Joϰl:fR��(@ � E����� � ���A@@H�P�P�P�(����� �� @��@P(�(�(B� � �A@@@� @�(�(��)� � H�P�P�R� B�R���B�P��(�(�)�� �A@������P�P�P��P*"(��� � �� �H�P�P�P � � @�� � "E�@@P�P�)� � �@� @@H(�(�(�( �����AҏҎ`�����i-`[]ЍY !%e~�����������������㺚Bq}MIne[MzJLDkڇpvzl*ҥ?rl4䲇-?V]%]g~>ٴxX򖷝q[tF\}VlckaT?E;{D$mYJdIߓMY6y�zٿ_?>> 陊�� �"�P�R� ��@ ���(�(�(� � � @�� @@@PU� @�(�� �*�P�P( � � �� ��A@@�H�P�@�������A@@H�P�P( ����� � ���(@*��@����P�P������ @ P�P�R���P�PB�P� �@��A@@��������� � @ aiGiG0�<~+mDHە_-R6Խ//5+rۚc)w.o,?Bve<'yTyz(ņm7L1,3䨔;9~V{xw|g<<m4CMgHN\|ݻ1Et1֓iͶq͗,a]23M[G,<^2e[*!N_BRVɦQo׿՜iX!F*>NL6J =Q}pWޥ>VSgdWҹ:{~3XO,,Bh#v5M.Ҋ߭│ ����������������E��1z6æf���E�"P�P�R�E��� @ ���(�(�(� � � ��� �@@P�P�R ���(�(@@@�@(@ �� ����P�P� � ���(�(�)� �"���P"��A@@H�P�P�R ����� � ���(@ �(A@@@ � � @���� A@@H�P��(�(�( �� ���T  ��(�UH�P�P� �� � � @@@H�P����(�( }\~s� Z&%8Ӄ\L'' g-w/x\ 2%<[a<:ovBwaN1v6{|[{\ ak>^_ԩs(ᅬ^|]|;vbxvymFXO>W.׷X3w/{1-jˣ*,jV=湢m揦[nE<<gFӓ䩴z_Z]o9cjxaթYEɾy2Z[mxv":M3Vғ˳[l$VnqTf*p8VQ ,[I&l������������������͞ @(�?9�:|, ^6æf���E�"P�P�R�E���@ ���(�(�(� � � @�� @@@(� @�(�� ��P�P( � � �� ��A@@��P�@�(�)� � � E���P�P���� �@H�P�P�R��(�(�( � � @���@����P�P������ � P�P�R���P�PB�P� @P��A@@�����(���� � @ aiGiG0����������������������������9@W7gbG3b�� �"P�P�R�E���@ ���(�(�(� � � @�� @@@PU� @�(�� �P�P( � � �� ��A@@�H�P�@��(�)� � � ��(��P��� �@H�P�P�R��(�(�( � � @P���@����P�P������ � P�P�R���P�PB�P� �@���A@@��������� � @ Smt_EG~t(o�pH~Qhj�8$?(4?/fTw�p.ڿ~_G fC߳W�(|٫�py߳W�)8d<٫�py�W�(|�٫�py��(�gWQ!_Co_G =ڿ<��m"��(Co_Fy�j�6�gWQ_C/_Fw=ڿ<#z�HyG�j�6;_FGj�6:_FY�(|'9+'Žі�@�1x#T� @(�(�)�" @@P�P�R���� �� @���A@�(@*��@P � � @P�(�(���� �P���(�U @@H�P����A@@� ���(�(�� � @�@@@P�P�R� B�� � �P�P�R��(�(��R � � @��A@@@P(�(�)���(�(@�(U��A@P@ @ �P��P�P�R � � � ��� @@�(P������U�(�( � ������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/book-banner-post-release.png���������������0000664�0000000�0000000�00003122201�14332737457�0030662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� ���������IDATxYm[re}MխB#v" B)$+BOؿ_zq H[@Z2Eq@ uWaΑe1\ksqbךMfod~Y__o|#u3`"9^YHWŸ> G/So_HSED_s^AMnsʝIˋU -1}Sl, nPg TM\ xHF z=yNz *k[g۬lbj䀐PYo5jǙ<>{ʮ1BJ`>i]=? qU(v(8@mS,m0 ;@E�)WpEpԫrekq֭<RDBVAnh P'@'m*I-©e $#X')th'7Wr K#O ͸k ShS:kDc>m|OyZé<Nǖswi}*Nwogy<WVֱH\_bVe 12 t 8^!$K}HT;wb|V_�6%>8G*cĩCS:2'vU|P#UOip5*M3`hkϫ  !ekaozX%ptPeTk2&`ٲ,6t$upcs?~܏q?~܏q?~܏q?_c#q4c,z+3#W7OW>^yp$DtL!iLBBәdJpj fӎ |MA}>K>x0" ioO7P͘UD̂>LϲӐyϰ㘭#ЌVVxDȁ a:^' D',}⦓:S23M!dUeiZdI^+`CZͣ{1F [`qfe*`6D1^v\C z6@2 5�!E&Qish5^[+Êg4F m%z?P"D_ua#N L ~ a B�ZтnXU Xx fN1:Á> ߍi9T�s2F v vkRXĀ!-.{!!4AuditHFL;)b,Fjc͉r4C[!'lK0eLKvk!]6 q2�Y!Թ;\@n5WH/TV.!-Ix>!6!4:٫lذ6#XBx3e[s& F lNy saJ2`q #<402|G: t�yF!)=*PI]:J,#BP OAw).Ϥ1}|W$x!e  0'16? £L~F1�GGL=/UXFW3A* >OqbʅUi+G炣cǒ>h{ח!ӥRsT$#Ĺ>\05S+B m~v$s"RA!G*!Yp!>kiz 8 qtHsmvIp F#y8:~ѧBe GxS~Vz \[0te. E 0ذ�^EEa}"'u)iu|7{QQ>JMX Gbp4O}K(&9ڧ? v`ښZq1:\� !郝f=\&Q4c# vZ" =#ȓLXu}[PUݥuK<=\j](Cǎ[ԇ9DSD"2gЮ{<_2"٩1A2"Iv$ vTL8]<XQ0׿_o|(p:h_;%g]R@ pv9j FB?ҏ+إ|`r6^șJ[@ԍ@/Ogm"P{s!3 ۛH ۴ˎZN 9by,8aplaT!S!d7",Z$8!y+:yӚ#zEop,חKI2l)-N#"HNkRL:)h]e-MB@w~ v !*5: Z*X\JFzC+I,.Pr0W!4Xw #/{v͢+[CH!p2,Hyf\[RE4A1'"zmk[d>W:z&4F̙Z,q2XRF>8^Gg pid<;\1Ϗ*ZYXѠTyݒ .GDT+$/&ݒ L0SRpICD*"qz-]w_H*/Dhڒi(/s0onE\Tnqy^3.[9?rxk|\Xp4rYЅ [М0 K[Q"Bݤek]B>L?+B&<?CE˖/~jT4r/2`7*ܼʦ@R & B^ PD0iou NW솣 Hꭐ _¤lӡ.c7qxՉ}nnN#y F8F%K|t66#Y>ĩvim*y#BlM:ڽDH#j>6�SZozӝ@ S!a!gȣY9EjsNCLi*d _QšJ!g�0M9Er| _7<B,l~"!㾡ý,Ӝ-|e]ccoקԺwFsa&7:ɦ#R/L{lۼ!z%%܈?%`NB|DLA_3X=BH)AL!!RxPGFR Tr) ]_Nl>BF !Nk`vW*U&CHC 5dU;]CGB{]3!¨!'r,Np<4R#B;aoPl<$[,*+/BWf L=G*CE$; "zi ڤ@ӨB|: dۇ<2):;:+g cEɦ@*[B뻸UQ.8H7\G[qVp]^I2QIp%/o�99Tv,Zpaj&hCLp0^fQ߮a _g/Y2Ų5|Y&~ bc�8aS%/Y" yCEq9ە tgIn2A d ]{`_ٖu@`;.8O.ѡ"f@6$);n]0 וR"\\*B ذ:1/4 W&:I8L"yT",+A%B ̅"z@Hk aJ رR0T`n 'h_"%%q0Pq.q�DPIFeҌѐ!kz.Q=BG5G CH .!',dVK^Q!nL-"dT TeRoOt#&Sɐ$y>9`;2" aa) <W|VDjo#]D ~!uOEqbl&6+fm /gprW,*;y {=/ U@mTTӃJInodDZ吪fb< >RI6K+ أW }˻N`E' LS9l va0TiSa.̙'XUh/{37l.v+@r:3ظ;-1y"Ŋ!ņ;71@Cp@7޳*3gxF3#ש=Bp[@r-BK<:stCs<Dľ7S2GT'+L%BW">5*^H< <ZCa7jw}C~d\U.\_@{]gy?Aڱ)r_T­!VAK}FE$3R<OW[ʃ`+H#`-jvJe+%YuE1{sc_okON{oC3lx]-Zwgp "dsveS"T d U7ċ6#ؓx-\xk~܏q?~܏q?~܏~܏l}P?$"UmFU7wN+ o ?X2?N~!TSqő~wmoS .r3`a]E[_i5;#uDu0U)/l0=Z6mg_n7r5PCH{%�Ӭh!ĺ4q 0BT8 :3NAN7V~W8u_?swD,;5 r};v7 fn^Qh!!%<BlaKl+{~ !lAT+"B6N`@M]N$>!{*8l!{ B(b0 \@ v)las49;C@>Y'kEV%stp nRx7`6O\5dІ�;7ANrll+�u`GGw!B4 D19.8oaAP1C}P;@dtKjX XG="OQdũn)-̅A ]rZ@)n)!6<B`OZkT>Z߶;<*-9`o�v<_<OP#q-vngZGCޕ萾Bj`k!-5mtn?{ #d�DF244c|tƣh|(ʍLe!8b&+pSk{PD{c 4s}#GϿ $^Q!our#B}pߓ/#LB++; < \\ wN\wSF$;LC=8'F!m~!rev !7BhLCH ~`!w|y\ ʂ#룕X-Ub?oĐn&πbGy IvV%8^I:M MF� /l oP!!/5W)q X+3[ (Sa R`gƇrHWpCvv"XCH #Ba'm {F%*6)B$䦌b&Hl| w E0@C<߂#5f{N; \44aÚD$!S)o9S{o|w~~-a fm-3؁EbJk h ف\ -RF0Tif-v>lWL쁛M:͛dw T|-FΩ`;WLRٞ⬨P!طgq5?@ *TB83O- .{tv)>MW9P2k$S^BbY@Ȭop}؅p2PĴ:k |;#̛""HNkR}!!b]"gcn$"^qQ,G0QZn Brư 'M҉9 8`Ҟgfc:[#se_2{[;9s:CH!wIRO/HӨxc}#trԇ$M#BBi 㣵q^+*L#48ӡ:_?׻ ˭|=tΉ]_ 1ep\49 c+`hOđWPt5.le 3A5R&18faR&i}Sy MGBtRܟט})USSaZ2$8y 瞨1.!G@4+B,h t({mbw\F@^/cSG #)xF<1Nd!Z:ʝ<yi+\(aJ݆ĨZKw_:)>z�lD0gt:Pxq7%`b 5HNx明GDmՈrG\5~On }Mi13cS+ګY85٭ͼB4ynca D�fjs'͏fUػ37GـW _=7' r "!v~ـ=ž&|!I;wstkM6-p?ښ닟4׆}-3a nE[&.b~Kmmmi>D9pps{:P ^B핧~` !T5y ioq/D ^}wEyl0:=`F[d6[unfZ ! @BdA0}ewH,-".(&:: !V([Gs`*PT+`ǃu*8:dkqhrSt$]G6`3 $oB= !IvL~2 <H-생3Cyt��v@l wb4g@o$@" ؊!ob~�`XTI~ߠ3}Bߞ2 ! S*N iwi(dҨzgiLH`2nu8.�!$<d!J69Csr+1fR.;updRlc\D2:*GW\2k;ɤ _ z׷ Z B`q}8!8v _8[+י`>~"G%n0WzC&طI2޻) Bҁ<I!0l<lIH}2n5BC i1=IؕIA2@ vF^mPft那f"0ԵV+p$c#< vP+ RF<)�;]'m_#ILJYт]Z&df!إ̵*3]4!R 𒔯ǻz`:ØH|p{y Q U5*q(B.LXܴdLbW Pq 1?P!r.*AY&=:ˤ' !!da+Xn)w҄9`v|_&UO.C)']&"=B<II2A7&QV` #�]]j<Y `"{ΏݴЩ7hEq HLlWfi\rghbUD+`K*;EM! % .ބ+]넟Lp xHF z=yNz *k[g۬lbj䀐PYo5jǹגI+:lk#AoeW= a>owYa Y)N6E"+"8UaC֭<RDBVAnVWNo֫�U*I-©ݔ5 $#X')th'7Wr K#O>ʏf&H4N 5,NOTޯk=Ek%8![~>�ߥ8ݹV>ϟ!قc^mZ:6R̪!8FF\naP+ɭك#Q슭žϪ< G@EVv+T"ԑ9{M`j|JTiRlaC;&Xs}^4Ums !́-̝-^μ\ m۟Q\l?X:رC'՘et c@Wx_,O$f_q6P?lrag򘠥/qJSag=$D*͛ځ{(Qx_X#;L8xሷ"Ie ]e6JՇv Qڟi~v~N@iC_׻nGv y׽_4vCE*_!FOҘB'KpuN'u+wGlLg'$,.w!ns. V�^x}:G&9rAFaq,ѳf!*sq7,e{Sd\0t} `]u* ].%n|O_[oC8xT�S4A/tkEw3�ԮoֿnB@oo@@f7"BW/St0Ҟ;4N`P!dBrI.b{M_q}Ww; i%<3`L[9|4U%T֧z+ߤ<jWyf%k"Tj|渖߰Z矷uubUmڂSKo7; .^Nа.۱ǥ_U{`4 Uj�2Ҫ{o`!aޭL++hJwNҢHk}V=$v- ܭW#3xҫ!7{ʝ;Nw.ҟ6{XlXЂӓSxoh%v>KCj[ }U]{% @ŃA {⹹a2-]@1\}aQbnhQetȵ>6X9v*\~ &_Bp$FH|E&mp}/:ΥKhK>qDŽwGH S<�/?l#H:^|8B"8Ty;a -y.KBފQ60E1[ 7t+Rq!Z +:$㸻ZÇT^؟R3Dhg <? h�}6\\ }\\6*jW(Ć9m9u vUbFKGHxim'أLͦid*s#%s p0^YmJà!nkw~�AqTt*Q&]&8luAܬѻ@F d!(!]Ƀ*0tvo/8_s+K]s:zuymzed*Hc}!rS*GJg18fU+xLK]C͎b8W,<au,lv s$ 8E@GL0].u  P5B,8%]T z d~qDZ\ިdb<>:>Kwt~A#_۱܌u E;^W 篣݈o.4N8mԊ$ W CEK$weB>p͝ oگ|x|.uCz_׎]¥4v~oP|]l..|,B8?salmVmLM`I@8MFxS{H 0 IWFM%P{s ! T.d+ݺ}{meGL'Uf_gny,8aplaT!S!d7"E;V Yz!$tE'f<Ry78 v BxK@₥g Nh6CB$'ŵ)^CBnm :Ĥoؘ?\;_`rP?XqeE ,. v%[#v U[9+bG;b=;fѕ!$8o:AH7>; 5t޸7iepMDƒ׶|AJn$`Ҁ Bc2gj֒5E@HT5F&ɫq3,NU]6ɄGf_hPn#"*QyH@nAy&Lp)8ҤT"k odZp8'ٵ! |Uҡ&kK>P#"Hyr!Sy\a<nSP%}w}qc@ˁg]_mb&6[М0 K[QRo\܇I2gEȄgy~ْW\ϴjFEQ[Y_uSÉN k u+�j[Q=@$Gv@5r\UY&$"ꍌ-Txصm$軉PaQ[=xX:-`Uxؕm2M:$tx߁"vlpfئ 7"@ ?E{=ܷm*~6f]=BpC/ V;E+%oPR!6!U |wХvwi P#BCMIF֋4WiBډ a|Ug>fQ=ˆby`=B B$G 1H!zl ~�-4Zn�W!!$>v` �¾7I�l#h`$;oase Mհ]W 8%B Bf $ B-H#$D JBB0>N/eDEHMr:dA!C&`v'*+V$ :d*s *I>H`t^FIuκY| OQ9T8O!͝y(6#>\ў;Wf Y]yT !"OEߑdjC"Hb5Hˆ`!"Of6Hjz8 ,Bbv!$GEHk]_UljLLH(Kt}(uz"rGr~tWϵy>t$Ө$8*#|Hr9yg}R::X|]&8bq Z|fIѕ zm2XLJ <|߁U*Y[�$r&w}y&(!tV Bd!F)e@jo L# !Y&(2C8(T2!n'L' Z|P3AMBҚ,uW s6l^d@/@T]2+�>f ,!B B= o$ eA냾K=[&[#8D//SYgJthT& !КK Br{Hj!4\BHCQY&]Y :<?Gd Bcj <*HpIU&]JOxr.$#'lGZFiK|{�RG$ o|ᅺ*ֹFT Avp^z̺r~x|Bnb,D;ǺNB^OeK\)?Ѣ Ͷ *~zV"-uPկB~%`B^?†_XqٕEb$TLʣ'ۼ[6ZTQy4zb- C:ϜY{UV}80sb$ɍ<s+XAӯ*RSa˝'R8\l`q4T 7˙t3=2CN~JzoT9cA?"<?|# $"DD3I8T9CLz3A<%s}Du2)BQpd~Z"xź+bSE#u>0t}v{~>G\׉Е~V'k"gEi Bh$k鬝d ~jTD[<#ZQyLtiϪ<v4v٢fTxRⰙUW,׫<g:vD:4Æa: dp "dsveS"T d U7ċ6#ؓx-\x|Sژ۫ܘ+ ls{25QhO]"NfeAUgiԎ My_>`t '峸!Qa@V˞yM�+1j.UAƆB�r|zw>Mm?<F_LRY*BF:ɽ͕)6ݩ; !IcNUvs+!l=Ml83 &C@.{{ӍG vAz�f rh]'mn�:HB`U*)REQ )BڴGrب;7ȱqNsn $"s}x} Є_Wi|Xbx:ԂZCu>d<GBlx4 t&؝WxF(y!gx~t}+85ϿzWb^aQ"<B{8T_DUK$�QoV9s}9)m  y U/)Ъ3*6xd1nh>o\9`6Į-p5|W9ow}3 7Eo4sU!8\[ A+"VweusB k"F;*ti»e)dϪ G]8)^r _K8K*@Z$G䀸3',kEUxD9_n?#B6N2gI8|/rLP{LU^킝_I,rʦRNhɓHqcιISFYfo /\sO !x_wa|�CG3v^:}�wh4h[gx-%INI [?ã99evB?=<OcGqN %x瑨M.Gv=g& [4KO>,Gt1cs LÙ/fsu )\Yc]xOb+y#z^4λ<VdxbyiLweѵ 9XS ,ڢdq#[gGZ4sוy&? v)ܫ\>ܴNB6{Or{|>/r s<T?h6Q,JUZG?U IΒ)gF3r#)$@MŤ;-C4|z^"{ ]HE?Z{_d!5Rn B'=1qxL9v*@ LQ=RsU'o@lb\VpyC&IΐGFk%ɎJ- GLKνla')ezB gU'R<.]bax~?{Y^ӫ=?4NV޸@sVxJxi6pl2sտ~.ĕK[vOQ#L%[4q5x./#;<ʆtq *WD/M�U/I˴uPel~!HBr bߞ݇�-"SφTO@?-!٥87 ^+^ VHk.ĮY+?NE,l7afBtֶiy~gySPɉ`q-B !$�W VLKd-,ip\T!e=xE3fun zrư 'M҉9 8`Ҟ'=�udBFv/@];oOϝ !s 3#'Q=�Y.HӨxc}#trԇ$M#BBi 㣵q^+*L#48ӡ:_?׻ ˭|=tΉ]_ 1ep\49 u>d- i8j;%srp|ZAіy&j7L=B$os*/i\(T(ZNW#!׷O: aj*L] t[&Gvy 瞨1.!G@4+B,hֶ[Q)ʠ0E,`:B|1"ϙ/\`t({ϏND _'Zg> ֞p#z- -MN\v$0l{TDmg)tC`=f#E;okVD(܉`s'{6Z; /2m\ T? ~\͋f> kZB{{,6w2٭ͼB4yn;#V/�O GFhG 6w2q;-|@v2t[d=!BWA"Q!r {Hug&o͟M*Z~Is|mۇ{܁!͝#XV`[[BYMS@7wB!2�6�!6^ybhU=Sp.`pa8t6nRANϹ>Cԍ`lVK)GH%!"d) !2k EH5?0CH[[#z:]E`KxСNwG0phrS vӳ{(nӂc7; vgE GT 1In$; D(? ˎ `G>y=3GH�!$z֎x>קqKD$ԃ" ja/)7 ["*zO~H#!bs}<NZ# ^}I((Q !<B(ͤ8>Lj6� $9d! (Cqr|G #bF%ǐ iTA 82DW; A{*;Fo-tHBF&� 8q&Zy f}3eq!]^y~ù/qLP_`]Jyd0 #BlEG?4hp3A9A> L B$<? 2i2YEA eF.8j&( 3Q!>8ZdX74A@|&'M*o�X(`Tؔ=ij&IeRj2)T05ˌ#sʌ!nk<bВǻz VL N2)q{y Q E@(JG``qD '{GSAbW n_D9d=B.*AY&Bu fRx~!T!2t1E v FL\2�W"B<6<ߗISK?b}Wb+yҁd4#DzxdnL0"@Y<IG5U<_G^;_<Qp~B]<P͖TwnQ\ʟhelIeI"dAaכp%</X'dPG*7J뱍ϛtK _UY:7ufePCG ;2~q[yMZe(q.쵤tʅ+)~唡[ve:ѩFyU(v(8 ldɸhI(]DHm*O+^+[8:`s ,.@O)d䆊lu{Fm \ra$[)ʫ<MYXONzP@2_QX|BBHNyrs%йd0[hfD3Z3B.ZN9=јOS^Vp*]nӝ[m| B-8&*Of%ρcc>o1*ŬcdtqBH܊}=8U* [�lK|q Tdieg!ϚB)BN*D֑Ƨ4وA&V0c5UN\Ն:빉P!߄5{0wx=8rE(2m~FzLpeX`m#Hb/{Q8;iS=柋 H+UyK ^Ø?,kYK[< Z*9BDo7VT)g8ydYy Sfӗp02 lheիI@> ?i<0Q6 u O;60M~dSU?\PњVgnBHҺ{7*Gk??Mv~[bS Io{+$n,|_g)1Bpegr"oah}^(L΍s{qiv'B(eR}oqB%� B0m?` b?8T7TPoP G֢nREƄ/lnotۀ}Fwf*[4bBC�%]i7 \_#:4`<Fpe`j\_Sd~>wBZWR)l'n$)a PbeO8k*?#`G #3A*3A0][t}'lxcpд@뫂#́G 6|8T3AT4/tk�;u}cI\_񔙷[/z[BԀMq`Fj xBc�ۚ6MQJHr= 7j d�`t}!8G/|S<+KB$n�iTJ`ŧTquzq\Y.CG1&J.GH]<+qPV<ߩzq]>87X! ["vm}bE֓A�ok FD\2A ^;!BO4mv<b|<1>Fp 5hD >!7;Oy~7N| QSDU!IaэFd}l#l>\ܞ`O&M{؄<޷pP#L-c7\@Owwz2ݞQ,d[*?auv#.QhTZZ$n!+)B K!&3;;;pgd{cS _U*3fWw7V·ْu+QTaw'v#WHmxfIDE,<$;B_E4nǒ뫴9Ի>+3;k,3[C@LNxC(952'B|fEwV}vMR^8lɸ?uf*w}ucQ!f"wΫ&¹]_(ĝ0@�'?[x-<_##]xLWrDH{;ie/֜qEoSvN SyY#۲EgTAQ&O bǣK@()*cÙATPw~ȥR<9_`/i |nOz]_ɢO9GE)\\_|=8S;< F`U^ h am2ex~|.nu~<+ZVO*YG4&t}C>e`YTؔ$z-$ٽ2 ڃ庮}6 P5B1y_pW>:gד= r}:) ڎ-ǎO{:*1-$g}VX]&7wx<x42Pv0 O_s.dwi_7WчrBlX⠴v\ίYN=\]7X@p~Bp*354M#\, $_5k@UHZ+,<S;a{)avQ+I3ji+ e*N@b[U{TY9ECHt;]ɫ+ڮXW<!+ӓop} H\,[ b4B(D!tC U!BA sk'>F:A:`+S,lX`qI+Y L'U NB\#?`݁d v٩6l !y B:d Y!ͼط Lh|--n"׆ܽECR:v#'_(c9S+4>0kۏap)#K#S w842AwL^ ܝaqzmrڸ1Ϗ*ZYXѠTyݒ .GDT+$/&ݒ L0SRpICD*UP%IrDvmv>cUthڒi(/s0onE\Tnqy^3.[9?rxk|\Xp4rYD~oUxz-thzY;?atn-HqRB>L?+B&<?CE˖/~jT4r/2`7|NqjĠLFNn_;2@9{.)$PLk个MHD7A? ;.nb.h+'3"팴Vq@y=;:޻`ijށğgN T AFB՞\ a=_5?Ss>+4�6TDB*)BM?\~KA߅إ*�jDz贺2iz VDuvn&!D{k!yX~"v,npD(|94!O|/El4kޠ!D:w]FLyߡ@]_>l: cO7\=x9lA.+A!3RD܀[5JDd!# +GL;#Q)<B(Eeb5vNt}.Q ބ/C@!h(pms*z$bj*CvwO=C $YU0:E/#BBI2<�[e<aÓdT@ )|HiCLFl96qQQ Ȁe!G($Y\ITwʓ$\!n'&B$EHFQ DSTR^J5"4BbvN O.o O!e&txrŠip3yaT 2|&8#Ϗv΍İ(!8 dLh? I ',8v>OQ-8<{h Xf߇ 1+<: j/5dWLD<Ab\7V;<Dd:S+!P9'P.qt>HrCH �!L)|�iP2cͯk*/#92A*b&iCHB|;,uW s6l^d@ˤ�PrPS%L]&0HQ`ba(a. B�q\�Yq.%J\%`p fG,q ]_.HR%8}=SWDC2iFhH !\"�s}H4Xt<#DzPCy@0B2H (<?Gd Bcj <*HpIU&y~J<ٗJ$#'lGZFiK|{ޜ_CʓdOQ;?PjoH[OE0Jp<y^6oS\M_>hbXW[˒ WO:om~ 孟UHp{ &E&**c/8O^]Y$FBŤ<}݂'ѢbΓpÜ^60l�O4ש0|*i?; Lnsl\ ~U ^l<bbObYDIYr3<V{ T!g8- !%jN:ʹg"dbכ )#Obc&+]_ M/M$]닰>!?2*/ 䌽NTDHR< dX9/*HB YCHg|%>OpW"B)Њg+H˭|VA5;2ͬd^9 ֱ믷'B7С6\.ӉϿ\P\-,t&!ް$N<U/!4t ^ƞ{l9wB۰fI-,~۫ܘ+ ls{p̟ddX=W~7<Zvah:e]E6毯;8љڑkG61vL6Mf !<cW*E JaddžRk+WC8񍣿fZmT@~ _U6wUsMeK0w0W@t6mOQ1]in/ixlB=!ԧ\ v&�j15ر$oi`<\n[K6H `!#ysQ*)RÉN=;ӼdBPi!ɏESlS܍v[@"k! qFcH&}Ps{؍Y`q0#; 5"'7msn# eMα8G(;(BnvI�=B$o�vf@0sߧel6 &jn|E&GHKBυw>T/"pE&H7:#d`eH=L}f]D. уD< T#v 8ۺT>]m-D`*P䃣ygZq']E`wYjxLmqhru8'FQLwA1 s!BgBB&8jnEl~ʂ#Ii%8ƪܒ)&πcr I[;9 ti2fp}au7/ۯL 4 #Hu5LU q5痮@;3~X7b5κJCBGPOBL #>gZ<r%>yWπO<! O$DH!t仂snh/B<(|6r3l{l #$#BN/+, !\0c.Ȅ!^LY =Lfb'*ux/{72lDy*@22n2>E{2-p"qPellbNTeV\q@H1msqsTd*G(řZnat)]sS/U~08*yׅu2k\_.v7`}\#L4r:k |ͳ#V "B2 pBhD:HdqEN )Y+1;ƨkvS3\=iNl$́gwM`/߯<F�+b \v Y;?BL fFN"ؕzJAF<?ش̖_SUdC4ms>$nLcoZGUaYqՙ w}c[zܝۻ,,cPa@ir|Z&Z*qդ(})8vF̓K;rD-LKḝq5t뀽2IKh,8 V*lEpӨNt SݖI%]j^@d'jK(ͤfŬmƊ);`A]+q�^]&87WK,8`Xeˆ<g~ pѡD9_d+??Y2ANr'De}@=,FZ q?~܏5=~܏q?~܏q?_cm׶5Nj9npC;BDŽD6 k$^cWU$9&qCtg'X mu n~ql)?}Kd =H&3=vF$"t h>A'͏y[ù-=^l]@iqCjJ' r "!j"Tpk HuBw6y#F?mlG[3p}btVF·z ns:dۃGH7ew}PAmmmt<zDT+r}B(C`RoH핧~` !w }o]_sz`tzݝ&UۧngLյ/)GH%!"$'ش63NssH5?0CH[O9 Q P Q vyp<PCI`HXPl4R;ೀ "uÆ#ɸƞC$; tt:`B!]?�V8l 9JC=@\ !F" ؊/)z(*oa�:6k*ۮY~!SxxxB>61\QܥQh@Kb\SG`C%Pŷ8@H azvd^Q~܆xHdLLGV/6q12:*GF>dP!&vE;FAn`}B&QYM6IT,w8@>83A·]pg-e<|~\Abbו8B&8-qt?J!W"\_KMM{;oI훊 <F!B3AۭO~fMn5B X&̓cW&uR9ʺx_.r*=B$ZAY&uj${l:j8W۩_شnh&ENgxm_#ILJYт+df!إ̵*3(ZE0tma~*b@M\GJLE0G2ņ; n_D9d=B.*AY&}Hp}lGLJiy;/yP[! #&f R"!ˤ)إPs鲿 -Fcj9BG'!I&#B8 ̃Y o `) ~_G^y0?[Qy4jl8`6+O ]X? ؒNGFY(iu&\ ߇;ݯΌv8 xHF z=yNV@2CM]Y20P!ѕ k**GIsa%V.\u؀4FH :3Ttˮ {Z7:†NQeʆ N�*duۦ8Y2.`JRw�SWֆ=壳XrkK9E Yy+7jUd~* S$HT^nr{�O,ZBr:4Dȓ+9%'-LhƝ^k&X:E+r}ש_;v״'i{ʋJNqBT? }�KSqs}|?CȳDɽ"6l܊[Y"}r}5bTY5+8- xV voE=a+UyMso>8Q,m[ȳPy(vSGĮ5u) ~6CPIq <cy0Wzn"xDH<YS<awЕ+BQEPS\}˘e-GŎd0?DN]iP%jRʼnpJ`!fB޶췦8Emvff-׷eP5[@dl s{ab !n2 REg9鎪 W]xWeBl6&?BnU~=za�tng5lTy2I'Imɏ_a~ *7(@򡍛}+qe@EkZUB6tOmBT֏ >bkq >Ӟ<[@ܬ^?t~d{05X vqqTGT YH!VG԰SKTH8-¹4s h#ֽ#W.`HX&viq !4AuditO 9S_WEl4'P yܣ;H#6&ں[TV.gnjTs{!WyFFgIZ6H [ [4 Ix>!6!4:Neni2`瀍HAB+y !\_ j.0AGHky~O'K$)CG%BTR aaX.kx;Y&{s7 /d>8ܢPSـp6Q)!X+h*iTBp\FS*ϐ ҙLPCHQt}'ۺ�y$'rwx_>Is_\wo 􉚩q$\_�}n\t0DH Yp!][9œ>m&wt.#L0#< OS3~j fҝ�اQ R``-FE}X�]VrͮTDE_ !ų9 |ꃝK3?IqN1YqOUA I ϫ9`g%)2&Xy.^ۏ `ವHzAhPF!FϷ2sL<+T<_2"&N RN]I] ̓`Cf2zo|w~~>Ra& }Z 5�3נ<h& 3zboٳ Bv +|T( l&3/>E&H<Byy$g]36w ع I3EQɯ],>@Jئ]vtReȱ'ji+|h !αQ0BȊoDH$K{:䝮5GFE|]P<! v% qRҳLl :E?4B(D!tC UҤ!T(A|Pk'>F:A:`#Z+`pQe{K]Hohe:]pEVʾ!$tdEsNYtek5c#Nf=B:ơ} Bʴ2H8DD !<{ṁ`tFO> & 8 Q.8(sV`-9 i| ֶ=�1ב ?LW�wgX^>742QY++*/[2JTxd0[2APy x*\ 4i(@ŚP8.q\O%kC. 59_[!-Aeȓ -.ϋ`74bq+WX.a~]>.q,Q8h9 \obC/Y[%%3kIֺ!}$VLx~-y_0<L+fi_dn-~܏q?~܏q?~܏q?~܏ D~~tm?iq _ݴkS4t?:mݓPǺ)Qn>?ئ<O&uE9͒Ezl| 8p8띢M�ͫrḟf3kzTZu3OL_r*m}l zd^c*Rחw_ /E?M[8vKk۬*%N{f sb:[- (/mv:R,"d�CCÒ7b-m ƊFtpo4 *L-N"+8-j,-Y\h~6 F�Ω+X5/ /R2RWQl{y^f$\t6ZWw6 v+qm8=햶hΞ=,'f.Wܑܑx #&2I鶊-ORח r"Ts׷;u'_B ?U+8vĄf �*:;LYOgv+T&M xk+T.ʌyFǁbA%~[ͯ|/7^ЫWxiDEH1!K/~?U\x2 %\#~RDK89̭E\&^NE8{Y 89Q^B� tltK_舗IμKT"ADQ\¹&cW 8htޕag!ݕvS,8*[q$2œ= xUXh QX & 3˥l ^mEcw>V`rJ- 01~}X~Pl4mм$©B<"@ɽ mE3*_n3pr{Nފw]u+-BVIT؏@Z%OH< 5fNjPm*vNvsxl4:|aeW%T)*8q=6X >8xΓ̇?G 9u]N xPN4ߞҝ0i?; o9OWwÙl<bbObk)n&gUu+Qu*3֕F$"$p.O�*y}_o&dN?EW= OKXw}E,|j"4U4X\p3ZCa7jw}C~d\U.\_@{]_#dX9/*HB YCHg|В}'8B/^K^\>޾o僗}H^]^|"+XL >�z&:p)NQt챏b^y>$L5<i }O?wuFu\$4 5|#˅Ee<`4K}~`F5*Ojҕ9].SO�>kBB{4,8<t N O=xЗ/Dm|CtJm_Lo_mFM":x1xO. 7k/~E/>AW |k_^l9^B/kNa>/.k^fxQ~z>N _ 6OAbc Tl;qaJB"I-\-|Y3׉Zip]tN{,Wh :is2fW{ ~C`!Kʇ(KUaӟWj Bp7>Ybvic8\I-:yD y"  $r(8NTn`i隀�nMbW[X:]M} G񂕜fCH$t6fx!KEe tj |!**ώΩ@.^dz*U5?n0`7#}<(_hE<^ZDZ?sj/'<u?Pd.2ŝ[(p2AU7{CT0_>Q]91#$pRe0$>$êP{w\P0 Pq>Ғ Uj7p}Xܤđu}]|/SGӱ=ox~ }ꀽwkb3YU*v,O=8\&=n%*QQɞTGKקbX%ŦW?޷^|vyˋxL/L.G-Q`bgװ:e6+|}e}}ND|T -K!uzp (>CV!C6b/LD"t¦;9c}Se<<єhD_zr-16PNM}] /$W g9�۫:$̲]?I~z;5/W0UGYљ7`Hw-ETrcn`7M_%cxY0e+ o~7OP))Tp܈4:ބs@VMv03}?X٩b'*4.?^PM]-|,]iTa<vwzݛ*N= �T^P+&D*1 **p)*O�-"SA=U(řZna GrLrd) !, d7\oFVh}Y;T7Y`?7o 9,EH!9d Њw\m.gqEN )Y+"%Yf$e+bO s`]>p&+!= g�Bʾ!dd$GzX;oOϝ !s 3#'KJ= MrlZfK/)*x![~9Sf7 Q1@Z7y�0,NLj~Eor+_�sb{ח%ep *,r(MBYC+Z%�/Ψyp`s}G.VPe /5q5t뀽2IKh,8 V*lE<?y|O/_|7d\.{zxxALL&Ə<>>ҁ7 nXzkzf1aPv#"Hok/|Lh`cH{dnu4އ0EHFC46K2 `).ù;\)H#9Õ\ $ɱm̼>@i|deG_=cHet� `TꃙڿD7n}?>z glFEX魇|?XkO8V~?~܏q?~܏q?~z#ɇɛoȻo=r{{'y<Fizڈ6yG lh-Ex>`˙."2,/ ݶfC&17.:a[rxD*1K|ߐ XK`h->4|$lLt!AtE.Ц|H9>G͹:b&̻E]S? %*ÅkD>!9Li. þ +E .>8;Gs>{bRd#=h *.BL[ _хQ on].|y^=<zplSG>�n<橭O]0+ɒ8?w0Vɖ a}*wb#m�&7eR޵r pܩS|_kʌښZ|uB.)`j_{]͝RbKmݯtr4Mg'uE8wnθ۵*Ӆ"<8m*wT<bpYS{s'B0 sT;]!5d:3d!o9icx3Vy27EJei*L&tKfI>24GH[sg-\Epb=;U!X8@k${R=s'caxT U<??Fv8Xdu<i4jeTGÉ)<r0UM -?v`+ѣe$p heg%H+)R| )kLj\ca v= L#'2AJxXNhzׇO^99 濝~s O>�I !i%W&aHO`wK <]D|_ͧHA\?,H4}k]`w~%mox@"o¼c[p6ƒ9z|Mq|6sBD$-IY{?.DLlh&:\&o'M)iLJShc8§pcO./ӕάQ")&,�EGX+m1VwA\,p 3oqYʑB~;x: Z4޷c߸$ِ*#V̶=$Sq &Lu;"}|!?/ 5QGt_j ^/DD9~!nżWXoVݙ/mr!60_6jwXX? DXD.<҅X.C yŨI!C8o|w~~- 7|Tm|/Y(lDyHz|vfi\r]X9bL5TvtF9Oq"넟<~2찍ϛt:qJZM`c#B$n2jV^SV9:x.65e,jsPڒi胮yR# lw' \ۦ8Y2.`JRw{ПrWG*W6qô֭<RDBVAnȶ7ިWT.Ldw["Sy痃T<%Be�Ɉ'x~ABo)th'7Wr K#O? ͸k ShS:kDc>m|OyZé<Nǖsw٨:ϟ!قc^ľOF !-12 t 8^!G*ع[o([o?~/|7f޶/DtH^m|hۤu9 #w&QÐ raއk�f&lWrw<u +v_-roIJNK�v#]~ݭ8 gسωrQh%���IDATOT7Hp�n0PR!04xv�ptx&$P> EcP@{2Z_]gZt&`e[]!ֿԒmVR\B񸉐 l%Gǽ0 ].-}s,|c~ګM7zc{hAD1Wo>_ī?_[cm[."׻n.P'OzyG> gzO_yIAXxP>޸.0ω"'z]o@ӿQ/z<eU+۴nGHN]R bv{T\)ȧ*Oi'Щh8?W97Sao~] !4:dko!i3YZ5no%3?2:)`}%IsY#gCaYCDHqBv;CH`׷ʷmLbf>11MWL nɷrqOyszBzMco낝I2HrB7J*O\M\_Z7QኴhLZxdR7Eπ vY&)e ;e ઎?QLN憮o:2e)F`2u&~r *LrZrͮo1*Xt}<Oƹ'\_+3Ai1R% b5"Rm$yEe�t!8N P@n ,~#t@,_BU`fm!Ӌ ]?y|Hm l`&Ѥדryc@ۆD#0DCݟDmi|9\.t9)لH)H۟&{^|~hyxkC}ۅ.\69vtڀ'QBF̄2`% _X ˱eniNN?2HJ7=}\.2f_Kdه`5' ZTM'=eG/Gx_"$+ Sp}l^5aT2xP򧛒p<RΙq\k\Nڭ:?|~|paBVUw?e5؂Ugl~iBPLƴvf`0 jN8ͫ#~_GzU۶u1P͞y4Cw69_ҕ>r}񀵫$&o |eMfk3g^|Jܠq+Byy$PZZ)z9\&;W!iq�LBȀ_/v!RUPV?b6ռVT080ҞPI;1fJz,=w[L]sdNT N];`)Y&v?$6} ""HNkRL:)h]eWmMacN@r'BTX逍|jE ,. v%[#ʾȵ u+se_Hu]2عg,5ڍB'gA7b߂2- 0wƒ׶|AJn$`Ҁ Bc2gj֒Dž5|nX&HTq'g<;\aLx~TaŊKLp="'<?^$y1 LTg!8#MJ%>P&09fv$GKd׆`']*j])kr;>)}r0!,.ۃFٔq0n{x 1K۽V7=87]M;tM$d _r}c—co~L>S0e/]~a0[^[Jna}j;XXw x/gcV#7_ro6zQ\JW o_.�0o-GˎP沚r�ND!|.| /]CCυ 'ڍmnpDo lpա? nOOBD&||?~g?Hr*@8 q?~܏q?~܏q?~ !zEJ.^l.>Ka@`XcTF:%"Ӎ/=1L޷6ecԱ#"o vpDpTOc\d#XΨ[~NC}8gö+BOa_r= d$h,Kf(m믅4Sq8KWe ~?{ 2P)gF)mJPo]:N=;S$ lAT¹�!=7CB)8QqJka!d7qU?~t$[/mvl 3cN4絵ø'q{=FDҖ$>XA:ҷ NroLaN\N<G7-XmوyD0 ݟUá2бXF`R?6`\OaQ!"{fD`dπ (8n/ȳc?./\MG[XӚ MĆ @#cm;v9^'37qBYwطпiF?=B`ֽwd6E"!DYW`'Nm *̚c#/]leC#BLxCMdNv^"D @ 7  -b&ls: cO3AivS1c澩ڬNAp!/b" B}e=׷9q!%4{آC նN"�{HB)BHnޢNpAؚy!ҶPa#; nFI4R^?L2xxfr쀡j0LDAs2nV*w~;UQ y>cq@\rt g貏n-KF^I-9Z}<߸Qe`IJfjG|I}q36ic!}5CC) NE( g4 3Өa-9'B+ĺy2<X%\+878+) H 4LQkμ-}=Z�ޛZ}<@ޚEe# 2@ۜDUvJs}]_ 汐 R &=y^uקg�ꄍ"B3Ba != 4qٍX^]u"dIn2A $S D3K SТqI LGOVC&-U6dVXX[�G#(3#$v<F\/t6zx9F7i$Z7b=7捏 RQe]7((^OQ7 $" p"?}"|r(˻ WUo4 mf.sa]Rw^/AӚm^wvVknLƴm;Dd||,'*ps;g?jW=O۳�r)?j_v6f&DXE6x}7S*jo~ qS\ovk7mr}#GOL FrD8MlnQÏeRJn.M_ó虴m(pZ DEL2(i>`x!bU,M\؏y ҳ;W4i#sز &r}#k呡\=7bW4(&Pc T^]B7T|U~VaU^]T�D<Ah%Q`:6̭ۡ :LPLh=Bx FcBr�!y#!|~ ʺ)Ѝ 6@N3^c%~x4tĢP Q:$ cÆcMeSaν0#rvUpt2aUr { ]j9B볪B v9Z7 D ncDH,!6G,@Bz/t': T 'Q@8(S' *6 YĵVlgŁC="d*ۡy"e|lax Sι6Js^eyW|Gc]_w}V}jf1ͧ�!:@Ԃ׹GRQ5BZr?�>T BNBk\!SP>0%]<>[]_b+? j=d5q�w}yXG]_E_<Q@ eJ?rmoR 3A~K(B h<cCvg]_@H\_ vV2FCSxǂ~L:!Y2blC,z0%^�>BBLC'BU44I)818e . zF ʹ>"Dԗ9u.߀ߪ 6EHVEҦ=1e#=2 &L2Tv{n$w"KkwC7g=P>f>6˱1N* $bwb/DnÛ#&f֢Bis\|b(U.+̝4CC1uxބ7R~ڀMQ[]hG@BD4ڣ;ڠ6t5f"ژJd֐eȖ3F_%/ DzM@bʼ5y7X/N"WJ?ؒO.Oyn+m$Hs%?7(L.L[O:EyxxE2 vaΦ%D1e04cZPtk`kEWws{u<7=q�L*'|]@y4 3֋Hn,h<%&nP& 䅛hsQ">!jtF)GQ61 B9Kvd ?o%Ry&P0&*E Ʃ417Ao3 rC >wbn$CM, d@N7#2AbM@a8aK4�PQ&oivئ;Fse*O`aq#+kC!*+;nB;So$9H2Gf٣!DK)Е1%D_;\}>0)494&*u}X :ڠr>X`B R"K*O 5!P9`隖Bx !Bh)G�Bd%N ٫-ukQltY\CňCT!XV 7VP>0N?/X\C9s'r0遍sZF}`x";G @\pH|xt{D|,x7y>`# %6S$.>:gԉ2p@Q"l#QI؏ɱ*6 C=B?SDz&H7:#Q{\=Tp}7ɤ04 w`>dW+Ҩ.9ɜ >a5cUN-8R5;P]H>sD ϺIpú3LPP/7⣺BGHH\Egn, Ǡԕ2CH1; 2qp#\\ #P:86G )}"h +bbGy([?n_nݧ M%kٝv?>C,Ў|ls@| (K2G1 $¿o|ݮ0V le6h6CwgacH!}B~v|/_D9ɯؗ0R]yFG(voޖMUo.>Ls*]1AHBēeMZ16ۣQQ+/ZP9GEz4:% (řZnav!y;^P`p(UnϽyׅu2k\_.v7`}\#L4`<9ơ""HNkR}!!b]",ip\T!e=x]un Brư 'M҉9 8`Ҟgt=�Fʾ!dd$e(!p~y`:GH03rĮS 4*e4"X_'+i筜#8!nvӈeh|sp 8 2 tΤW3@e` \JPC2ʟV#&-@K3j\27\ߑ.'mg8kKM~cp\:`/ L?*%By?1[r}+Ϗ?~?y{o>B^>lJ.B"Ѿ:PI/G˅ۅyA6%&.nm?M({\u"sdD4|}k괭�х/BLL6~)iBLt9~i>l`"w~SK|_ڟLEf:y~]hx+=!=9^ҟy1@x ,Y>a:ާg]]tQeDgZ(^k}]e!AWkpQw x+[xf݃ʒ.ruF{E6Ms?%?3_)I4 ֞p#z]M:FA5E]v3Kr?&TFQ* .C^S#?/1j%4eиlѫj\[6UVKl?kmJ ~XCȳr7b]H~P͛N[{mBYA-H죿k{}9ap 3T>'/>F*�B p!4u߻O>+׭C-P7k^3JS>-M&t r3h1loRҪhNʘV|1A z bepz}qd^hɕ:[;<S++~_q<pZb'!#Fa@O"<LPL0 "=YV`FW$Mj.,f?MZ*Dkqv~-1ap2\_ŽD`>KF1"b+TVLtNFEI9m/,ۇP=DHxR ]tsA>>7o$ٱGb>7}|޸W~|?0] +Mpl-%Ǯѻ`[(墍a& ώmO"V6''G+:6S=bp[R'0> wXgk\, _\b3߲" !I$Xctzjb݃tN$ JE q !킲kК×>9v=SršXbu;轂*FǮݶBL '%(ߐnN Lҽ3$$|oFBjk":6b{~ @|vƧ �'^ z(vQc[%m).Fe}ᬸB+2Nps /Ύ *#3 TLL7;8k#hٙj桮/v\*22,7x*T~<^إ VpKzdW1h:6{I0zf^54F? EEt.}<@#cd)aKdTVGorHZH&;P9DMIo!%{wI=EGCxLTvbsr 4 ⻉a*vܞ+yh^!_ʉBg+ץ)hHReI4k>Q9gˡ8o<.]Q=|߻vl._'gq"7'/p(?1Ӟ#'!d]|dZCMswLUh*'ZP1q*S@Ep <X>wS#>n罝#Ο% ˤ_�בG/32˂]LI\ypzggsOFOC$ htwJre@ ir'X@z%EK3ie,PI|}.Dv*{a3r?ھY M*vC, olL #|o#XykJz?bjג7oYaA=inHL>OK}L.7&[$\oo6O65ω[&?MhtHy1[ty4(Dk35>E{"uٚl?'xCrӥ[Qk%H\B_ɒ[w.>_(\G|d1dX b\ _\ &|uSaU3XE8tLYYBh}no3UDR-ݽ?I하x 7j#C2O͍ř  N#)j;;^E[QQ[fk*~SAM Xć O6A6<k8x tDׁ!qh^qrUJ _ q@ ~ Ql<!: Q}Jl�H}8Њ=Wf97 Q{ s!2o `ㄈkcJ4"3T O.8W<x"-2."K b?8u π6q�$ӈI 7l IPMy v;ΓBUonCd _R݌Sv&]ۀMx~Vo<҉E@8^ɳ}}AH 4BHbjK`ts}6}YJ1Ϩe^l�L"6BpdLL0a+0jY~wjp攈v!! */xt#LB !y&H`'K ϴyzh 88$,룉{4xSpGyB8"DӨLW8[tȴ\>ˬ'x_G'H q#j D 3l$`T~bABv wW&l,c!LU l3M%/[xLDql׏ 1ű~0SP[n|2嵧]azPJ3%[z\ҏL<Gna{>T Hrr"#ÛC ь 5 ~) *= twsݥ\#h *K|19sƊwdPD"jx66ư0 fkpgf2Ȍ){nƳuw)hECzS᫹MHAYLFU V,wQ&?ES-�R~'z(?t!e(@ ";xU|C|c'ɁDAB*Hs!4#BtFy6b Ahj{n4m3CBbژ&t@%(&Ҷ=c\*NX%;5'fτ=!2 5�!EO**4 b~̇]*[(*^Ey kq*8t ƥ? μ2r$i�&多A#~CUpT`;r*9@ -8j̕>/$H#J|-s2B BM4VsXC@$cּՑ@7'N} a av<ќ8.[!U@E;G,86 EjY!IC.IpO�S vy[$>^@ո ӂ]t<X!6ϷWbF[sN"u^9o# ﰏ:x$D5�!3yh!E�H`|W2PBB%rP:8 F5\ Hw}E&胣GH_+H]]�]_IǐF%&|F1�- d܈s}Q=_;L]E i}�W#xh\p<Lp}>^v}*;TdR jo 􉚩!WG:o fRndh(8R48s9Ļ>")"G`t}!8G- }2 !WiҊ3)mg"RUf"rM/[Լ/; j{H|H9o'<6S>?I&÷<rh8uxF1=MS ].9-B/dau3ius_^Op9/a5[ۡa#"nm@>19m>m 1C^ 6ܼFL׿_o|S>CV?nH@iY)z#.."^!'6 U,d;K& +쪜m>~#g^|_Q8(u#Byy$k$\w ع Isg*2͆?i2T1ŶG=-S!H c -SXFb3"+,=wgQsciK`[\_,%=Ķ ~EfN+;EE"{u!RкO33:TډO4m"ѹNȧ \T`W5ZNP [fqQ/Fq. poy0A>R;//oB:ơ} Bʴ2H !<{ṁ`tFO> & 8 Q.8(sV`-9 i| gבȻ5|د?y8*d V/V4(U^r}d < $ɋ` ed< T&iP*5a>qz-]w_uthx7~{oˍ/ďL"Fty ӣ<&у,x틀y9=C䲛wET2"bGGivS:"D8aLf孅̏Fa3ʉB0(Ab܌_~ϼ >}p{[y+Z2iX9Yɶaވ.1:].ZwZK~ ażwq.D~ WU+,|$x2.XYj?BywB9:(3]@x Gi2Rw!+0 db l A<f ].x|O3EJi:P7~Mv-yq3h-`=0<�s_fåx^e;JE-lG._DHھN wmso-ZEEjݚ zt%L-wF>o?@u[̪5h!^偉TgI Gl{԰0NKyi+/9V>|@XuQM !~L_z߼N~ci?�mF6hB@ cF /-P;`#{""E1T,.ŭ3*/R B=?oIz|\s<ߙ9G?Ȓ컽gts?P5֩;O2VٷG >uH3A:m]ߍCB.7u w$IS)j=Tv >0w}i|_ P]_ߣ΂< 4�_g]y,|wv0{"؝*qO(Bbp2O*9w !$g41^/_.]D.PFO EHdۇTD!^$mO@ٓ4ah˖]P>Ӹs҅m@rlO᣶q (=7X#nrbwYzUz6F�iF-O)?EO;POH. S|J&cD$b8rF$—##e -n~iF&[WNá# ]H@&O;),I,tݒD|xE&,B,,,.OÔ.cR(R wvd&@Up8ך EQI B\8`³LF1\qas 1(w<͑Pvb:;u興5=UF5ftLt ũXjgy#B?hTn^XBO:QT~O<hnZgG#B {winOaP^3rlIO֝ZFc A)?f֫~Ef%*b5**9\O`%ɸՂس̙/ [Y a xn4̇ Mğz7&T~:!zfιD;k+j7XW]{A.#T8ާ?}&J w D3f;/^*gsY'盩cqnDzϪlƅVXFIjwJP _7~ P_OB O0Vl 4BOrW>mؾLUS()SYaSJ*ƛfDB? c%s}LIc cI>BY<vQZ3{㭷]k]dIPߦyj#̀ 2ʆfߢ#OVPީ<q}xg>˗}Ib蓲!k7^ny㏾~n%[ǰx٩OƸ<d$8*CpZҤPp-țЭ@Ddkm:sǵ] �Dy./UX.1}>S{te '|?4oFtBnngO/+?n|,~>z)!,XZJ>g3}Wc6)#f9]װzu.Ssab_3ށ`YFȲ i8J2*_%FH/=;e+"�f`iBraBSڱхA ?SF :Su[ZEmH~!E'>d$Z'FĽdsQ CQ\jI m^i2kkz>\vw zhL@}1]p<՟K?BT-~ |=jkōr gL{Ё 鳀Mr/9.]ua�=B^ݼ^+bO XE: -ɻ]i�~ݕl˗9IYBcD 47p~ٲwhp< a"|sq}î1k C|x%?o¹>6F*Νef9jаQ{@Ll8=oPb,z*o8|AA?D%8CD �Dˉ`K~Z!208@%pLHږ}O=" ^T_xI[LG5Ǥ!?Qc'8S (jtNg:T! aeOB#1mg H{+*wHBV9s}W>uI;B\_-Dv(>W#i[??T?2 "J5BrD?lXDCH�\a ZAL]_ ڣow}D?}gիҁx m;Ұ^ܟ|*")~_vB@kԙ`9;F H:E GS {Ud0?`p`Yk\/ė5hhch 3o.KdE2 qUIz0uz/qڊopJw"]LԁvL]+>CYuׄ!̴1 ,b)Ǥ6bDquhPLWkNDjө$wbn>؁:>^wg%7Tr= v}Wvg#�R$,,a[6̻5}͚۬K7{:ܢpTFBHlzs(4Q sZIRz\< SQ.Ȩ[%*a` @#!P S:5)MƻJ&?rYR kXkUL=X*!&%9v"TT|nD5Wrn,c8R؃N ujYy1LhV@9>cN*TbE~7kUv6ٮ5r*@ȱHՓO9ȡVh0[$;02MO"h][ۀVL {I&*JJ>l#! }Mɟ̗cm(! seA2bâ͕uiHmuQ۞ BaQ0 j^9BG̓@4@>; b%|la^-Rhsi>x8N!,Dưְ)A1B7 5 !3` 19*!Bh){"ct\BF]5#Okfl8gCVtH㥯:|C i[w� AxB,8ZSKb,N 7&jdp.9 }u,N⃝ # G\pHqQ"c o[]Y!aur6x>rD4#1YdQ{4 1y $ $@2) OfdMth CB(Cw}}&G]eY&%.^f]DF3Av> $fq]GR_2]f2l-8KUA`c;g X">3IpOU]a#dj zs}GP Z1ҧ1FҡQ$ 9 O2ipAp3!Lp=8rAB(e[ \ <B\]T[[7s}>$!yTZ!7:uXu:,: Ѯoޭ ; = 3 !Yg`| ۮ<) O>XManqrmv[J�}B?ݣքRm@gt߲ȭ2хeꥹSX'|K=}Bv&`daZR8WXPd&rE@AWpFbZm_}ߔB,Bh5)`'˜r%GemIB DVY{3V*lZIy[+؀_5w�M:~B!G˰Ԡ#%6TJcwP!�rX�GKz_@1j (kyTwQg63I rv@%HPg>Wqf!(aX2T:{�?! l`${`w`RrCoq7A/CHG!R!? iIds}vĺAF_ju8{T 9?�"6 ZARHѭ !B#D CH,$BXD?B B .{ UP(PС:8t:""@(?`/)iE^ث@] 6:&p,lFwtI%!; ] ."z�B!^!"1g`!ʎ=B$ >!0#D VQ13:`IA&y8y~]ꋨ2AzFY2Yt qsV]&Hr�nBB!z2 !!8/GFL*emH, 2.8iTb jIeTEG?9"%A28 *@VTe,8TחKMJ%>8:`>G1D[ZF, wN@ncePvI2A52!c@.8BWu!V.rA^?%+"J)P+(ˤ}kc`c dODm2b6`t*J'}1!IbC;b\ֱhl"F(z7-`oEKKy|˺ u?ecrPx?'|s^�Zccuɠ v9Ofސ"5Nbn&[V@neP1zI,?)XO7t( ']&AFKނljUH4"/X 1ir9j 7t37kk-0eTʩ ZgMHP3;nn/[~kHRN٫LPu*pm6 [yF =@歘_\)*h�lBӽ6L_͟}oN^oK$-AbU4CH]T*?U)pZ0]ia<Rurl'AȨoq}œ�&a8}'f#`q}37NO LxwS!ǙZ`1 v<3_+aCZ $n!6.v%~$5gKECEc, ֆ2JBҎFAE2,k*OgbvF!3Ug19[66GOx6N)Us"ع f9R Ódƺ?P DU^h)ر/uRCSBm$g\6lOrG6Fׅ mncDXmY{l@lQp<`sXdaCQZJm@B1.%Gߡ2 #Et}k6L#8D5`L$Kt<ˌ΋2{;TA\_HXU!8@aBN E2۰,doU +q`&Ew_ @/|7Z *DGLP\k6z�{|DK䃣 `vRs}.YGS\>`e]piL׎ڒ b'V,%LZy ~܏q?<9]h͢ RvNq]b '84T*ۙ(P8IEoiL"3a\=팫'iV0"-}oz,F(H).G_]Ӫť3I5Ԛ@gk뭊Js5wf[ƉjB対;/~BH"n$TH*-ӾefoE$t}ߴ'EpeÙs2 s/(~dWyt\l ӝ;A78=DP琖h5x?xڙCoq̇MN]-8t,حLP+'-BJIG`r7mZD..]s`Xkp} }"^8@zX $K氥 =ᔔj`_"+=14՟gR>[PyZɕ. F^7{Ɛ]{%'reqoSM{Z_d*SrΖS!:hЕG䍅ʾ#Jzs9[`uFvvO~ N|oPpo&M#ZQ}ѿp;!;=v 82g5{[<_݇4e%K숬?I~;0Od'Kb۩!x=Ƈu8+>Yip]e|~*7{z<Y)~܏q?8}\'.~J–_Ty\XW3@bֶLЃP7wB)D {_xYԝ?=+~}8~TxqnD7濟: mt4&[nF ĽEOR5T!Ѱo>ؼ\G+_S֙ʹsp7 .[<|m$:5k[Hw>?زxw_y"og*B_)d :a#m3l5jظFˤsذl@�Ȼ2OcM9CM7se0ԇ9Q{סeʆ>W;IwnC~6rn݁UݏZ:@FS``Dcv0n9T!"Wz/p/ްD>ds vg꜅;nysh<@v<jT[ iauwDV(,N[,B`Y vFa V#VULk)p{JL0? qm&hI8BfG1)*Nక][t}ש| *,7X]]~ E ޺M ^CaC$B$m}K/j<^#O\X'>h;bC\0�[|s*DŽ%#^ 2R}B* lSI2SV7`(Rn <?ǹ뻺SP|}n#>Nua~܏C۷f٣2nC'T}mH7qŋ]orBeDly71{u'`.)u M݀!j-Շ^HԒͯNom֨W{+b:IZ~~3٪Z"%� ._"v� 6?dқʭQ9sl^/xg{w^|W!*FT S5DHNqM3Ӎ#E3*jN�F%~g b~n?ae\6WzkooG?_9xחzHS~? (> /Ͽo/~㰻] v)BB"mA=B~K/>?^ *rRp\C1y{8F*z:4.Пdx=!]pY3ww$9q"aW© !y6oi!Ljw$Tؽ7AO^c_|Ͽwwr&3Z v9B #C+ ӑvU\2Aߟ: b1( .fRfL0ǵtzyT47g׹R:^l|#GB%j&8F0V=O#x2!Z-+3ZI^* VoE.b|q)CB~<1ARf#^f/Ɇܝ`R[?Q#=32iv\KDFtٜX)mg0έՔDP .*4vъj&V('᩽7> kl'2/޷IA ~!C2!∐6! *R2\\"$ B D!ƽ 3:1ɤ-paDH_ָV(t ymEtZB^E`3W~mmo~6AH(B-!@ƛ__Oڛ[!bD4s*]t!/6-^!D<B8Cvg7 1+͕Bؙ\ēlb ~2捃0`BGBc_zw_O>>?O}K.>Sɍ76A!tԆ!"O!ͷ_a>pF!CH[ y3|']0*^}mQɥCHϩӡ"ytB+tH ?#Zڍ##jgq=Tv$pz!Rcq>9gE7C)`wX7l d;P`q}<I<H0j=%NوCl$П}x~DNz4* v!8W~!CS"3>3?bS@!J�!D%xp}=Bb&H *s \z& w:8Ap L$gR\LP J*4j4j`L#<?dSd}|. goe2Ae,x~Z?+J˱Pc% z7U]_gT"ĭG":ztBZ&H5wQɕL UuP" JH!ym^xOײ:-qd!}]XU)U&!*" B^o~܏q?ǿ$#YU9+q�O:dIļ1q$͐AaW2:ۦYY1` H<vFeS3�3lk(N5`KZ.?>6ϚnQpݍS)m׮{]D.Y,R4L77!#b=1p}@$`I`b  JD2ʫV[p,Z s֕ !0�"k#^{6sw»;؈A}t#yk6?MP2me* oB|kos%ժO-$J$I,5B½Z}|8Cq]cc) #�Dx;rmt0 ?>[ ~C!9%?iе̢,mwG!C+A3?'Ͼr-#D]"k(S)<B(EHww_Gw_/:qQ w "N萍8E2:E$>wTrt)<2J*Ƥľ}k]T D nũwn=*( <ȱ8E|Kx!@6NW6JkV5Uڮ|CE gTX<? v>ٯ!#]P")B]K7lwK} GsoQrV|C !CZstGfvZ 2CVJG~]Lsf"vy6 2rf$SB`׆ °lA>8*#|^x~nG/YZ1woQ a ]ܐ<4s!7xLKl`sK%*AL|:9Җ!BR|U뀄+%TCEe6P8�!ZsP|uhp0D7H58:TL ˇ`Ǫm},3j 65q?C8:8PeKn5m0$Ҙjo4) 1h0.+`ٍ8aҐ *IW{V`]e8wͪvAT`To _`3O{ т(##][96{DRSNr.$׋l&y_%vӭ?5|_}K}�G0G B˿eK_y e &I8 gAUؼ5Ay%jT쟸"HW+S`m4c)ķ1zVfK0Az#/_{F~>~K`ء25{CrB"(:/|AbMc4g+F";/AL4j'h/Ƀɀ� @rL.P{sف9*X{PȩH;Oֲ|;cyT+$* K/<?}N&se)UP9`r<L"/v.M;nO B$y| ={܌wm";ỶH- \%H"smɹ!iB>X\SD8YpD;3 tK, -fr=-8t9bsBPe{i;fH^ZD_vˮEK@j/r^1;ˣp}ZO{-vz ޵Er Eœˤ(þMRfp|`zjt9gr *y|U6Ksr?1mU'Lœ+3v*+eG~܏q?ǍG.ŐRnϕE"[{|_ O`aPWrb3?Wj luKmjmQ܎+L$*h)@$m]��3;u:dʢNN@9o ƻa_g{7]3U毼ϻѣ/}VwV6͝&426+QL?>2B ny!iNU0vᙝؓOտ6?mp圹;y[?gH ǂ{}:L+کVe-;_/N9 ^lTճN|ʀeB!P 5w'vBS[ʰ'n3r}d [y!8^rbuC":Ϗ~zK4v4.-%3/_@ySW;=r29HeJpNќD w'\w}-^q'juhi*"$*'m7t} hA+?RGSh$|9V8Gڑu 5Љ=:BNīAZ{yG~xsZeE2 vLIJ#6G ^ɏ/ߏq?[03/.u~d!ۖ,G2nDfago{]V¦p<'ABÝR<qfȸR禲Y-#/$u# {Mwq}o2n۾7M'IBBA +C۲h` ^U`؋T7o҆E7Q\Tf� ޷_6 ‘DMϜh][Dža_ʶ- ~gK7fB`K@a^}?Oо. Õ_dy!QAP@Hoߤy5 A?r 1 !+s;]PG2[8?&pm !�Y59x=ηHac%a!? yϽ@U_6ud, MD!DBx !՟zfǗJ `FAi#Dz �Q_Lpު%AWv?tD"ˈQ3:dMcټ`ÖCaWO'L*TֆȂ;Y+Slχ; Y)Pk)UBRke*_֣<5I F,ay@s]k)IY8-9`$o�v<_<gaKɭ @l"<?GH>&fKT`k!M΂$'ܗo>|sz| /[2d'1Pv1B u KTe܈WCLȞ Zu>Qѹ>Wͤ5o\$v}q q:8P<rh׶ * G?e$$s[ӄ8(q(O6'p}ϰ2�XA�!1,G4:Q:&v/*cP!!G<25 =֕ B]l$8#GLs$O3ڄ'tbP(H\/GH<* :diBB"{<{"tŻJ2<>m5d~C}˧;0w,^ATe?1Q$ɶM߇_$A o$^Ҥ^0tZ9b{G05~oU( _P1֔8h'@"B!D.Gi->0pS!ZPAs,3Eɂ8+BGP ڀN(a3u6Ve(C`Me(M1`wȪؐs\_)'P Re7+?~񍗛-Mð&Fkh?GS|s_xYXBT0—#KGʯGؒ#DBV'M&l rB`aI"9B$AT!ȄGHyԱ!ֵF7T*� ~ te ѻMjD/~# L> ǥ-pbAntp5 B#1K`F(gO# EQ E :Tǜy:|"!B �;kM+Vʂc$Ɏ0FLIn(9 .0!!]D #Bb0"!y*Ie!\FI "r+èØ[>Ng]v@Eub! fk;:dyAp}.ETd!۟}Ͼq 2)Б<EsEMC!B#D/@X!Ă x2)IHIapL34.>$,L C> .Y&ˤ2*"# ϟ?c v@j}9 dEU&K]pD~%&%`KL]p�֫cYA,"$LY+>ԼBL0QoWyhVlp ΂cupUh*AHuۻ+))]%0yp4|;V+$A?8�l &T�;O`bCȪ߾~܏q?Z/v!L)'x 5&G$&Q/b2u2wKۤ< [@Myӷ@ɨ.|!#RS+܊ kY}AGFC^ޡ$ӏVVt葟N"hҼ2i*gu3ΛsU tPF`J!oQޮ!k~fj0 Q0/Ԁ[fn$&6{O6}3/_oe*m,\PzfGH仾8UV񥈐`-cdvKI�d}'O fiXs}l/(-�\xj~<BlDGSG8 CuO#P vsS'5H}㩉폧!uЋ@C�ս$[ B| *k>G|=<8bUpqt*'cIaZq%X`Ds䈩�,a\S�. $*΍[:تu{C8" sdvD �6GON8m(C*FvRTp (*B*B];*vm+;/c2h%/uQ vK$rvєI.}5 ?')åNX;> mncICoPDTXD+I]Jw}n vX[C#>85?@;# X_/:;d_Ns>Ө<3}蛵 8.ޯcwMZy%v]\_:`2A}+A 1jU`~0-LP:G aeÔ mv2Ϟ߽A;M~ZLe<8veҲcAe}\ptV+*ҧX s__T(B밙ck*w tg ޏq?GEXܮ/%|JH;Ҭ!ofëj/JWJ||=WIhQa.ϙm2{U.hQY#Z4asYR?]M^7 z8Blپ/6hnX\)Nsl.&"a5L2|D[Z7ni$k~Qz8c7țҟ\}w?sW �6V&wqxsW?ozeC@o�yհet*7TNx S+&fl{bePXfxWrފ#| :,ՋQ7 QPmN  `?3 ~WWV1?8 ڭ=^nמn!n?i7~&X];\B9WXd>xb~É}4TN;aꃽ!uB]y5ւ vVv`WGF. ( uڻ]9x~ eU W}^Tx&oWB+*[+9Ϸ/ أp<8O*OH'0'(2)%dr!K!$w|y?ҩKD?/v?G췾˾%GȬ9Lp>$w:ws8>2A H2!6$ >69X-&Y|σ#4D( H;*LQ d _!8@fI&H<$�[qH2.Yc\%/+tU[~IS?.8B"'$=B|_ y7- \{P]p<VgS3o̗\+G Xgj)+u3l`pn>QY 9DȂL@;" ]+ߏq?GrQϐ[+ŧs?'=A@;~܏[yx'gz/~܏g9o~_Dާ-||[??c 7yRHowey~>U}7�ݰ �H�hDJ(Ҭ&vPlf"fbbcWb4(H$Dv}Wuy_=ǽ;̪y_g~y}wJ]7rlSA w^_nMlӏxm]-o5/a`8E3xԦ6MmzmSԦ6)(}Noŝ�D0N)`\]7VπHT//1,*;Rr.rPf �.ވ'pŝ(SʇFex)k@!fbb"I*QTL#%UmMŲFHZf Dh-` 4P:~_RN/#g\t&AtH2UeV*+1sEKmJq{.Jկ:+$2*9-\`n߈ytDU(Ed Awp۰a T]@Q>g¼<kPS0rxQQ84h?@DfYWp# !2W]Lj{$#�@K2E/s))ߐ] H� lO+w]h2!Ncjş>۶䩰BĦ%!oo٫"Ԟ0PGd:!!h j5*B:]n"!7B7*[Ks~/zR]pq%F Z(RUA^zvFxV-%}W6gC J:Dú#8l1WDع)V|$0>.|�\A;+Rb=_t +Z>Ppշ|2$)b09|E W@Udq-YR\@N`0B" 5j#F-6\g ĵ <06DH j]8OG!BR0@}72b#oZTWHI[T8RB T~P6e}K #'yƛf]8j@KCw=k~h SOk J D1MϷjd@X¸H|?cHC|%ΊbpDW‘Zŧ$(*"u2�dismN$FpB!"S%&p$K8ĕ(G,A p o6I~ 4(.ذ:0nF lnSԦ6 +=O[Rv"iAS6J�ڑ!Yi1ިN&Тp* R>nzqY8MKiq5 =Q1pC;Eg%d1buJ舀 KDW'?!G7T3|Rֺf#Df!vlcX&9BrC.`B2rL )E9eg\<+#M"Ac"Ret|h)Tʥ%P(JT0 QjD<>d\e`d~JppP!EF-p !jʃK[ܔdldGp�rxqK9܋LG#+@x9G)aov#!4m ;`}B"-^"Z-GsɬKkFO ;}Q)Žr"GHwԛkZ#Ng|<hk|B!"yI4!Jpތe_FKBypO u9!Ow[!Ŋ:$P!](9E prSiPg Ǯj$E<>X 4ai"bv-@�OfM Kd"=~!։҈t=>PVBB'~|l!(D5ŽJwwr"$!F"8y7_j6Hjo\]AWeIy`! ] q GD+"dkP8@mȥp4;A[8pz>0VqÏd%\hb"Є##QSiF% Twh\E\. =,z1ئ|w G[1p X6ve}<5#O=6K0tw]@I j Co jO=~ī7[\(ԓLK"DX BP4˃;@0􉰷. 0+H8KP`TB*RmuqO*_xrMWe{JN$c!܎6MmjSxt@b[ hdAQ:Bcjt3;LߢJ?븟8aS{܁�JQ!7 8˘ ,qŽe{+ ,Yv=W~ltY5#D貱<lB:f#/3Aڹ`:Q T8mN0|lo0�7դEA;u Б9zhL Va}�&|#!V> :d6#T%-'0.[XYEH"w W}dFM<ZGg#0Ɵ ]|uJL#TQ#nޕ<z0BÕ!X_̾Do(\_n֙gSƂOzR"$=r۳T˭oZx?\[7dnS$Rx*h8H?WpHئr >g'||7y {Riۘk?JgY&.SVc(E * .կfyOv)#1<plDkju(^<9{iw(7Ph4Z# 9ŽO&K:Xi;03N„O;鹇¹ ï0d`_XT C+!.۝DN&,AA!b_ 4 gvtf �f[[CH2/H^cVs]M.eHWJ:6fv7$1`'2m0GHn|ߖ%He]رXPc(=-7]^[ KԦ6Mm$ ~ U"g9p=)O92;,r<,&d72pVZ;'w�oHKpc""% D$zMh1JÔ 'Ƣʱw@' l$x4lPF-ݞ4o7,Q r BF&^U"DEf X)ӌBœqNp38c#xM|UvdiG*[-=$AV?w>2/d;x"A VF&ĚK@q,,�`O2³!l (BvlH >G @O_QCMJ ϧs\^SWMv�v.(G1 ae<Wc=mm7@8Kn 6,QGz0!ՆJT8R~c$#!h Dyv06"!QrkcR'l.E!t.0Mp*)lrS C4 !)Uz6#\5T$3Q L<쪲qlMU6)ցoeo z-b}Lܮ o"75uU S8_dh%Dz>]zs5kicb\ ;܇Aˌr#ĭT˳ե٪Z#b=0_+!:6t`:)t>@`}6���IDATde묏HBDY!HPJ+k34F. C` җrMNC>]�oE6a u t Tz uy<]Z bƝa^X.֗"';H1<U:BD†!!D͊.mJ@5 HWl닇 ekr ejq[B WMq0 qIvKY.7&) 6iTEMu6pu7f%+E}&/H87ö"_FA۹ǚC7y gLR ,1�i^еMmjSLb?�;_ɲNmd#Ԧ6MmjSԦ6MmjS3GLmHe K~� lO]7pJ` +:&|[_ $H&-$zlU.!n wBDRg)RT#EU&H\ٷB$ :Em;*MI{ 8A8oN̩$AL!eaL"nF5 zB[(B4o&&(XFpg80=Dk[q,u͸9А~-\5U܌yxr4 �-k*@.~hhc363E;Bݽ//rOKi#r?s-Y!(" ` Dd vrEQan 3aej0ZGx '2@2w%)8`VX3VFߑSL9tWB ;6oI\keP^gZ5T%\'+L4F]@ *Hi'+ ) *!DBf>Cr�!܉5@>I!ϰG!ehq�tSM8&CR^ 1ed/g>J@h|36M8jۇ%QϨ¬@bN2(+TzJP?m"ZI> ] z~ #(|1=_;l2�qlsk%"At=_\vd =1`CTM%(aF9h<e'auo K~D` Du!yT9 :OfsZRwF Y Gj 2+�"〇Qlv/B -p$Z9H FG%TȾC;!->r%)|'ƅ$*oa}:pv,kӁdyXxhb,S4$$ $Q^HÙحZ=X[Vmtr\gpp[B< Fÿ#r(7F:j6R&`96!�ERk>,d}&1ijn`k(ߐ/@1�8d8� B(zB8c X[|'?BQ~p!m?<`Z;] W ]z/1Aa h@{8SG} $սIIu$J'jZ.lDgɒz;׽ⴞs& Gg  2] @5�9Y\E 3@B?#OĭU?!WJ&3+9BHVrB e=".v*+i6pg(Y3$K 5\BHdptF^RF2kV k !hlHHyBruX3Yb?! u{T# 1zedBf3 ZF rigeOpq*eĪ˜gncUBΦqUZ �Lunw,L"mBu>@]Ѣa@O3ja!`忐"kvpCV\>r`;62nqMp;B!܅0b$E(XKٍw !8evBNf}LPմ)D'�PL@w9)B!aˀauO,\@a7!!j5'1]� u-C8hĽʷ+lHXQ|@vJhX¬Q {tfo|+i*8S$Bta#L D1B|]NZhj! 8N̸ !(h"DYrzXzNַ,A[TCRv髡b :AXˆC 'P,P >�FPHL Gho(ג":K8 f!6M$~SghPD'#uc`+B7PBEO ]G2ǀE\^B p]@V.C8b- Oܜ.%8g67#a}!p0O'Fd1I\+B4$ GahFzcʕOu6Q9vnH|I‘1Xf]I?feV"XvᨆW#/@7(W];e: X5` XNIq&T#;-\~ b7{K?ѭ_w׹T11뚷-<պ�_nHwF71#/ _i_jv_VZ\II)#Yl)$Uj-M y5u@nn)ȋ#x_0FM\. v2]N@-)/mȐGf߄]8uG0{f?1 $H;¡J<Z榸 Ќ; LҔwā.nA6}o9(sc- 1xiT#$RgFli_, UKf',j,n/= ?+m;fҩZ@G5+u� |co>_ @d%`D#gEaѥ`"aL/R5[ŬO] l +N� $Ol2$2Ӱ{͑Xs Lß)B0#mX) Tw�j ࡶ C"D?T"+:�&#=` $( ^ XJ`1^dbu.$.Gy Q_!<T!E;4>K`�k HSؠlI_lCI*xdM E!Cz>Po ;N~a !2 V2bTz>&r`\$hh+{%E,A9JI�fF1Ҕd0(]@dˊ]ր-)L:$[)! ][B@G'l-?FLfU1D3? Ȍ<fC}BnJ"X=e pD8]TI`3d}K0t=_ e':֦ @TKlGI &ɔSQMtq g `; C啲> ֱ,cA@#ݘQz~]�[lWKw>�IQxc~LݤvhIIq 2](8XJI|N7)W (]}Ҿ )@ ;}r5Wl XP4`q7 1'rh4ͪ"%č^pmzI7$qkN̳lu:.Tȳ1}JIw�B&! 20?#8~@ot-_ ='t@;n =m>fT!Q,G,SW "O).a;yfYB4s(IJ A-nqE':jo2:h(X6 %i{R3F§W/C&7"%[{Q#U&}sR>"O(#4gek ||t2`�9ԥMf%Omyl47Tb}Fn/S(+Á. âSj&@fAjW(enb�[]gGqb[Q$P7`ŏ2Yt!b0@L1G&.n<j0DY�t%(rlWHV߈B]J/0:!s3:,#d.,A5&"|Eۛ@[(x`].l=SD/@Q rQ2! 8C!J17څ70_jVt5ۭ%IޡB#@nO ':s|JOTeH v}lnE¡ Iշiz>[۷O6ۄ3;eDׁ;€o!.хs]֗Ԡ|Wq4j+B۱-Q^=Mv�Vd}�ѰAdž&E܎ԅ )Ĝ6mVKJh: l(ѱ0m w hwqػ@@L:-A�[|pցk ٴ.~z ;|ҙ  D8"_(NŀDfAl9`@WqH �9 \!1t[*mG}D.:Kaas")u†G�۰%0'* /$TTz-OM)%3*Ԧ6Mm% @ =Q<0�@Z$զ6M+eH!w?t&vNNdmjSԦ6M?ٝOԦ&νMhSԦ6MmjS~)�z۠sy^I]7vY\h?{Q:WBvL(Luz\l@qcTU_wAf1p'i N�=T{F&7YNLcp( 3+ Bd[8ӗIu͠j3=rѮR 'wQA:IK[Z2qڊߠʨ}qUT rZ.yAl}FYF:텐':d?6 a&C[~V<uo,0l.xPV;qx@~?CMe~qN=bdL �^t16-%@K 9:բ3%<$Hb a`Ϟ P+ٶ}5. O"i9%}4c%nED Hn3B!@rvKF:BIeu+vO7JBE\Pu ;½\rlTeNBH]R ]jq @@e~+.a ew*r.=U|, =˭ (B|/Qz--&*ЎI)B|' O@>/ѽMŨ9xK !$+1H+p !n9EXJDqH4NxpPPAl B@"G!` ;B, ǒBm5H>ߢllH| 63Jx,@ۆw] mW)#&eҐe냢ZPAC#lz~ZK;71Bn ba(-5> '#‘~ǸQC{OAr E�d':!1C8RK0EhC5LG:N�XL\/N$\C׊f)lS,HM =! G@]@t֦E,ZoQYXǖttC; @#z@`ǖ1h7.-hSԦ6i[DOK!{?�P*C6"g2EGD~Ԏ JMkW|).9KهDM*}7>J&�]ȰSY T؊.Y ;.p3H:%tD@v@N W@@QwBG42Q@j]A3 3 BD yubVlQ#W!�˰\."DYeVNmicxA&ŪxTҊ:ՇT6Tʥ%�I'k1#mNJ䨶>Uc_?G]͸! .}eJYbt̺ 7ʎ ?/Ac,W$A2a="ǜ{�0^(H_$+ /12 @-Ww X- !4m ;`}B">-ʂ#x֥] B忒V ;1B,7BAB+MI�g פF0$K!!) :Gܾ-8ZɋBRp�L2@,8!r!nQJև5Zؠ|}L@4V] W)9)`wO` rb}LꨢHEMYBК|@6�V4-4` /U/Z+ph5hN2pX&> tR lʾ8+`a!d$X O:3{68j XSa&B Ls|#bڼ6T.ۅ:kC<+V� 8az#DS!ȰLlca><�L0=PPN9j6�)Bw @>� G9BB*!ԅزO֧�?6(Seȍ 8E\wh NtuteFK`}@hJԬ򔬏XRs>r uq�vCZ65ێ�A&Gj $8@=_í izӴCpѓỈl ['AşX^"U_OoC`Ŭoh)DZ}HW& P6?(2Tg"Ҧ6Mmjv"~ñwذ"Y|95bD1n2-p6O!ct'+w ͦ!}W&&m>y=3{s]=l.hxhO~ŵrh<M"{PCm2 j.o@wWO;ѝd缲*[/܊',[ 잁{>?\Z}eP=[X^=zwv:|��Zլn*NlysZFGZ[DcJ{�[_UƢP{>8X48Zd|g|9H=cbW3[(f�QfeZxtFiu >YpMsZk˵ե/4܂ ` z+vv2YjFͷ_Z+5dsޛwu:AV+[٘\ucN9كGwu:,cPRѸtz[ Zڬ)#hEpC=S k5yyQ.5g/o}{sZXaA{AyAFv@&TԾHՓk4zcs>w|fg ã;QL938R Sm5],]9W^_9:U0Rεe?l69?= y,o5Nm.Vbh^T1#BGP0kZUU^,ם"zk,ӵkoWo3[�@VZ\r~kjŵ o+2/n%MopF 3]#Y5VZ]ZZa'[4H9f4ƵC$3zr F'תQx9Ւw4eL40:G&;zB&ݨZkk8[Y*XQy <YG d)lMLwMuvv cP-7˥f}ZeeɲbgO. A6�@a*jZcn`k8KWovto0_(fժVsq4_m5mZb@rlCoԕR/d,]]�0g=B1eVag4]=bo>A.qF^psT\n%hޟ+d;Gl.pjZnVK F*ߒ�CPaP F:z |K ZjsmTmCW%)q(͍ $;iu7)%ѯw6LTb[% ; j̽wenhF6;aMmjSڄIȡ$ en7]{+jՖ.!jКi5�88gmz/'/z([w?+$^y/}~}磃=wn7Die7=s={j9c}|GG{a C~\oqX#{Zܷ_h�2c?ѱGQҺpj.J38vݽսӷGԗvGr+]Ryh ##hag/ow^YS_$?~]JCێמE_Cl\GwّQՆ!_~Lj/7uԞL6Z?Z Co3t7Я_+Bg_< Vm+?XZoj+|cr �#O> C~wZӔ "{㇎Gr=sNm%$�{nkpd"y ߝ|,1}4O!C>]g+Nn>·&wwg2 #Z^Xs7϶?ҥ;j٭f8r]kT +uzgBBU睠qzt= *<u!M $r?X\R"Y8® oohb+/R/ [{{gWTŮ=CS{;֕soRjY\)薻9db_*ݗ;vЮ=Vm]Pzfå&Z[|7;<_5A/}ْy#t\}\>siŽ;J,J;=: wM헗ϟ�2vE}Z`¸zח,TzNLJ?:0Nr9‡s("PsUZ?Y hZ/_<?;qTf˧^_-m4<�L(D)fypxCƊˍڅ WG1|ds@OP!WZ+e"L,{Ǧ::s s'[Mٛ=7>`77>ea LKs_Zr`"h(H*v\wJgS-T_yf\jmyK Vљ=0\pm:{٠}t:2ѱp+j/Kic~HkJ+5souh}jJҙMR#"c0:9<%{s\]c`a_}vΫ1ړ nFV+BQ:7]۷5߸_ToMki#)2살]F 8=y*�zc>xw2B/; <h� 1� Ƴ! 8 2q9 t&i nQaJoYҢs?\l1XC7?�cp'lX w5LEܛ<DX̶� Ȥ,3�w1^ar!%?%\=g%P`7,4#Fk7; Qv<=^΁; οIWk2A\Ɓݍ{w&Mr<`x-EE:vYӗǒKA+.}̾]ǟ[Ola\k|OS_qJO( 8ϳ3GSC4#lz>lmߤ9Omwm':%1;2o8|k+ #kM9Cgƾ7-/kt `vw׻}p;_zT9VހO?И3e ZFC0,M7Wv.u7zD]Y.১xhoΞ~cC|dx+2W#:<YR9I/ bܴE�Az[১=r>{O7jH]ZcOL-W>>_{|c~s)/yBs=I|�ufxr<}EO=w\9#J4{yZI k�5HԲbxǒؑ}{GZJDׄ=dqZכּ;,8w#$wD#~cAxI p<b9ٝ7gJv?@<|WuLŎ́[{/bESo/-[<xKN*3{9;唉P֖tށT郅b{{{ sUej=E<7M.Ilmԁ#}�vwd(F';{󥍺/l|13ǃs'q 2X`ٰ̖7f)`XDx'^[-{9%;߈\cy,v=xtށ­,\+",ĵ?wpށѻ ϼXuܵTǁ[3# 2ldsx 7Z  ؄.`.&;7<ޱ4[Ih`zX^O:yt&xr5ePLږ傑Αʥrƀcz'(f/. ed {Nc z +Wo4!۴}p؎td3g\ۺ`c}I>)=} 'v|ђEmjSԦ6EK@mFib·}_ō8'7E_c3g";Z řhO2!��_[LZk{so/_Lo[hmjeQx@:RB!6*$N>>߷ȶ;7fry3onF1yIj^>{|~dJW&`O~ජ&ww}zPd_Vfh({9l1*г�SE$O=w%P�\pî{g+s#Q?LF3@Pe5'G~nWp/ԯN)pnߗ~jT| \NR#/!){bS7eWҡcOL6G1b1~j{_诤ޚf9vEw1�8p힇 �#ŧ硏d~.Ē-*,K7B)fЭ}駻wZ @3%vߠ$$FŻV>ቔ_I~ӅNUP?#[t8a-f3& �_<>_{X诤#|A&ba~PSC;(J�lpiH'?X}|~[RFq=_A'k$eۣi->52+;G'uYŌ|V<.B̍O(18SDZrFtwv&ti N8[f"Xq,-UH"}!V$nbC})qټH7V㨪PZ"yZ;vc)#j.Ȣ `p{^QOF1G{eK;�esrpz>`3z}l79wF?D@!XGEޚsooҺ pw(}t+(և |>/uܦ+ :n`lMd}bHVltPbW\kqp~;|P6VG(cE2{JwDPAaQ=H- sJC8' ΊNi$f혮>1UPƣn*.)SXH k.kd1o8$cQv RP F0w~+T6SuI%ӦmMRKMQL8lWpI> %)c 3Q: "Ϸ`qy(ў*Z{:H%aƟ<tPo/L|0gpgZ:"  Gtvg!)eL&c4*ɑ$A*S1R2yM #r8gX1<l6r[S6Kj!C^O2=(;SK4�Nd~uvrqe+i'v;sZlC}5I Lj} +5_Nj V!NRX {HkoGI.r$-w~<uh�{z>^j&'>7^''oxv6\<IP&>csfs~H82,)C:J/AK9ށpѣw}S2C:.Ax'yڒ��|�ӟėv Dc'fW䕨@n#Gs{SowXߝ"COC sQTXhܿ?2B>sc}N ~.6+{:utf?ݝF3>Lwl/SwoO/ I!J.A~#6zC?0eQ&}||f7JR!HIXI&Bc"D:5629Ͷ^y>^רNnx:x~QdKT<˖D|JםeT]>fnon֮Ku&AdO n;6ᱎ{ ☓B*"d:n㓏MP59hNNX/Vu_‱c%ov\W�Ͻe8�8 �Ŏ'Lz/S_PqfvhHSOvYE1ԊW6S>pbëWku,ug|/ݷ92)(VL68vHzXiGdh qmФ:a%$SJ!Ʊϑ89EH� G&'U||p4ܤj+ N39-.mtCN~*OUqÁ7p|eb5%}ZX~su*iHL X!Faa>z pOB =) ]ߝ{?siO"M=opԍ%`X9U+%&o.VzD�٥\ԭ�JGnn>pUN׮xް}n?z_?s7_Kb2&\Z''>3RƆ =d\p@z;Ƙ4>=if&A.g$;es6\?;+}7u/o>29sgޓ` (ؔ2\^abkNPy'(�pWF\rfXBWj דt@w_A%&:C`tr{[/ٜPFc條mzf >&g98_y1!F ~m Y>9~#3qS6E ̢4@A&_1sO~�u";CLITTiO cܕv̮ܽU3Ai +x-#,}¾:w0% ~t2!HtGE 3|< 42s&*R~vפl.x36 Jl۟ןc/dĮ> (ȯ8F vI Re \L z&s,-)>Z?T,\@qon@Cd\I홗$'ŀ%V7P8pD&cE),Fdk#Hoc  yIdԲ*KGWmތIlp}#n�[P$YMG)LZ Xxù[םC'tb+ S(ؠ3 O\ʰq+gU: }bm2(3724>(o;+;N0\% RdsAc`W/@HI*P,f:<N8=1{MrDp'n D* !BUe~*�Mc2/ڗ8G}6|vIDY*Gh82 ^m pDc7FuIpj,A,9jT#`6hO%(lܸ@y ŵMmjSԦd TY~=rҁvTRjRZC( -0mA޻P]yO �ĮCw`N8O<Vy⸖: e"·F> "m`XIfV:{)}yz}w37Q $``{w�o.ݼpD_{|yC"ڵ_37bO_< 錴TӜQ_Or�O]Ź*w<ݹ-7EKᔱڛ?٥V/;w� 3BZn/FGWo >KS(Y;vs3/ e7hI=>vV#W!dS)!+obڵb`%ܙrs(WHG+I!{$]7wNR4:驩wRp[$$DJ%&eHH+a n+BCg:8IC"R9 Ko>QU$B<$A$vJM4" (bn/g8p�tOLl쳋zZbrŽǁ}o{XO4MI|pX\G&zzw۹|pCd%i ` rƈO3sQrR#K^ /J, N eBglږ`>`jFa iҙ׬fT*xp]'໧'X@w�Q\,71S\|:hc0[Vxzͷ]v[+6>F5@'k& ݟDbH։xf%~56=UG::{rةݖbŎhf ʌ $OlV@g;}| -w wtf uA Jn|@/в $7Pؐfv*%5b9�X)2JF43lmp")?F&AkU~MLc#d5B!&� >.7=hAvl�py֕!d*Tp ,A͉{%[ܦ6MmjSjJ+ y^�%}� /-:)"QsmT`tB.,2;sj װ>wΔ,' k{9(xbRr@֠(czqJf_x&l9g3_̶ t#\Z% rGn|`ؽ[zj_\tvuρ#}}Cv^ApQKjk,ūUɲA: GۯAT2ȻxzsRih86,_[o0kb;F׹z_͙<Tsdz2v]i'�T"DbvG_zsD/>`\jF 6ه>2eb9` ;bOl`4~x"M\ܥ?10'OLwu�j p3YN@<us:pFM~ksdgO>{;ɍ[Tt%�NOz}by"]N]z|!zݰFZ{܉5s:>51s{`|9Mou݈yG2|UZW˞N- T3d4f`|>ɞe:0>WLkaGz.dof@jQt `CFǦozJP,1# '|pLWK )3jpmRm{ _~eX|F-@i]ZA« 'β)uU̲B'bMmjSSF,3hQW-jʤx\|R_3Jådb5+qV˭?3~o$>_'e_Gv_˧8�\]U[ *Wʳʌ䞮щN|l}8_{[M( h nd@>3{qK\w0?ctch&_F mۅT3/<B"qlv%Q/+-/TZk`?L7_|fkk#J,Eld0HCzxੁp}K_t0vcOeljK�<c˵j�f#t5itWqZU!\NzLP!zake<_ZHa*iO_<9J,fQYw^FӸsߚG]1zVZ W* Ց=c:nsp2w\lLvuM%]+gF&}xRPɗ八UDXqhz2GQd4E,{si][-Ug+Rchcx84ZJmK!1yfy}XS(xqr͵|1sh뜶 6^N}b)1&yShd)̶sZM\[].WK͞lPo0?�3s^m9:.30Ќ #C3x#)[h,VW櫥F`ap00\xb�w?6fcj}eVXkAw_7?.k.n`"<*5֖jkZw_np80\HsNp`_-! s +3-5Z}}RUZ=Hr{YձD^89p0.u3 0*Kg6Lr:pgcK' C<KlƓH ;Zton 0vx\'qܳC*ZQ2}pNǧN*w,AЧAk<emFV_VQUѕ9aa.U6wte;ݽcSoupuV+7M]JYh7kFr]blzRR~XTGB/]"pTNm8:቎\. F]An<|hýX]:+CH(ΡRnKF*tdsݹήlbBG[oGK 5"9KG�=tG-^jlm6ʥc'ѕ]Ou&T 8&#H<z/@Wl9" z-Χz.#}@6;8v M\. W 9A"*)QͰ w)wMmjS&'94zSdKJS YN߯n^*"�-ݣmIF;!HCr>3TtYY!B._~.z~i_yצvy{;/wYZW~])p휊p-@6n_? h4m>֥��|t(ߵwډ5fAv>Ԅ ұ]~n+kSon5+.^>W|zq#w BkK80xӓ5󛫲>qObgsA ]|@.|Jd% 3jF<Wg\] ۽<G_׫!nmqܰ_΢UX][52FH3)z߇F;Y_̡ͭxc{:qGnvi.V�xaz]]<9{1ŝҲSo}󏯄pO}qObꉤgz-K*|f<1}=��$5j>TK–X�`|w??} DGXA/g[xh(xr~sZK4lDӗ}{q)r<$Pu Y@u-Πq7[> q|õK[/}oajUsXC‘Cܭ1W7uBaGtYUCMƧ;G[fݝOSV WB5SZNkKo-e^+J Ԃ+EVЁ[SAN Xp.LF.ڤ~� w:6I:xKW@$MܑG_ZBP{фQͅkUCc-MAyTfCZԴASuQ~yuĖC|]QFx-9(* 0f;J+�md&B+Ky~s}^~jOWV&K(DB3ad?^XhsNfyq4፵<o`rsmE?ա48W9rZMv\m6 篔Ac}pPQvURd*U`C<sί\]-jV.ǧ&ww3N3 G3I_[xG?\ϳa1e3zNQ,\p@bO7V\Zouw8� 6<qӭw'mw9A7>[.�Zn.\+cf۵;J9Ac%藿3]gnmv˛}܆g&-n-|m1Oiݗl�1#Z|JisQڨ7a.tF&;G:W=O Uf?1^kgmsCX=ehD'$q_<,Ai@es| Mϗ_N5ȫc)], �&Њ?*YyBo˸F߰*:*+2>'BX]m6MmjSڴJu9d|,BBTϧ.5+B_̸,ݯ.bq̪-FP+Z{Vw{1=KKoh1Ua/tElIuukWϕnsk uу[\ `,g}"fsߞ{+7"K'ٛ쁻ޡ羵p6~yժo^8%l6Oy홿sKF`�#!3sA΀}k~vǜ}vrݾ.r-y+|,35ܕX!C3)띅b_xzQܠydWaMΐ;onG9_]rƋ.;2Gl[/3on2 \q̔% 6Wў~~㏮Pūū7[gJtBڅ.譗VW#+œ[_q{uVMIq͍f'yݽY�=8]cI{]_.oȑNb9 ?s~r[�q)x=Eͱ&lOk*�v m5g'3jZR-(V`%h1|~@^\}�/}o2O%O>).O0` } K]'_/uj yA`FFFܕ^k=ӛD%J빧殔{|<yR;Zuj.k7~r'~Ƶ/* ;6䧣jw.U\V>4W1f`~s.d3_z?Z^_a=loWWjx'|moTqVٕ"d;yE_8( *sص#²7"M<(a7_Qǝy{M9-4˜ 綮+EcuS;V=u1,+7|~]޾\g{|SʁQ%GौFZg+rpePtfsrwl ΁wtfVŵkQ-^}owdrF#…|joOb7W#![k#w%+!z6Isk.]ttץ3&gNK=c_G':ϟ\o5=J//x"Rcy!%ɱ} X/ٸzaSl,�RX]/?21O&.m5a.8zxFC^+ZOV`\juS$!9WZ?TL}R=ZWwLw70S!Az `p_u7݌`eu(Amtٖ%H:3Hw.Wp6H�MmjS&I2.H7�8--2� !'dj÷* WJS[^]�h <WT#䥍߿DZ67&�jIҧmB/gm=CYDer&Ie&B?t ��k?~2졏yYAW`'?1FǗ^|zI\q U~ŵS_M~z˿{D#ġOܥh$9p tb\xҗlo]E9B?پ+ٕWlB_%A-Y+REE@`1Btfg/Wȁ{+}da;~KtDqqxEɁ0"{,ؐ춇;g6deWs<j|uV^$zou6nJAgY+'64w?͒ ϽyI^xma{cO毖]3٠+[l`+`~H8g~EXkW]9S%i0w x* o}Je+Բ&[/]<)Z@O·&B GG5ڂjxF"9LOl V@''@S@SzwQ'(HaX}#2@R)'_[ǝlՓ_H A-qAr oM X_͖"ߡ\<YZOxv(*UUf�wdg\.^xzK>8fuCrq>pD7҈iZG3W- _>|OzxtWp~}7݂dk2-oF t֡c$\ZHM`[T ϡ묏.z I kD=uꍵ=.=^_Bl b4ute]|J}╕f\fTg%Rʹ-3<G@L6@^-JT.5zqŁjgSk-vf�4,AզF7Yl`~}$6+OYF}x7^XZ[bHP-w6::Zl0M8ZF1,ojw^[5"`+.;7s ]3 i-;bȹ $8r8Wp*3WmWîkJWmj6"9}s6sZY_F%B�_ԪormU6U R:r$Xǥzi.8oq}B/210qWo^@w i5㫛3zbLh`Dۧhp@z&%QBR+I"dՆI-Wl QAQC!F0³L7̓Syo"윞R%:6:tK_U\4mjSԦ6a¾=r(1G.�,p)N.Bچ[naD8O"GGoH2n5/뻊_=Jf U#Ny?IZMw=/Ξ,𕀂&HC< /> e-BlOϫ?ZT-:*g<sGg6*KOnqonGVͣk2G@mM# b ;a h/,n,])/{׃Nm,^�8,; ]*4' �0~Þ|_X#QA0x/tm#Dj>?bC:Ԓ{U1Bpש7kΝ<7S=ɢ xzBE ryu,V]am*52I8&/ki?9[$PN s@MǟԻObfݍ[_.?7ƞ!yV�pm"M]=YDJM8BB}sKԡ#޺ F]+ǧ9|*7<r5b1'�<[Wj~cVU}e\ʎJ_٥P欌;3ཹׯ-(|�PiBV_>SJykI> ( Ě?u֗@c^7W; fszZ{4BýXf=D,#}=C`Ɍ'Qc9Ө@.mq)� W[ K4˰2,SN"K[ku0,A$2gX)|6M p�ZⱾ]k;6ed}X31<N/W %oE)ܨҙMw *)ߣXBhFX, :3Ε|Ō K%-&~9Zq12ٝ: qj.vuI1Yqktg/P$듖$8[IzoG14p4»AyPtP h% K4/41nj$3(>@PU+s1J8!r#VskTq'$�Fr۔DOn's^:Ì)S;iMmxN)h9{ sIƗ$7xPR�eJ2̸ 57Wm`Sު8_ U@Sp3q:~vi,[J]`僛#wy JrU(H[ϭ^?4d.v/^κp[ϯ3U ;Bg-i$-q%x!_pA,\s`w=Z9V]7Ҭ3^�# X50ZEZ/~qĎ(ޢ$C +zsQk $'l&wϽY'mЩٸrvΜ~c󆞁z}G|[ooN^/I]Qʇ'^ ߞoCCvqGx-^zs6jkOEk9&c7*[ńSJt ׫NXQ j^ }@JbGfd}~J)=3:[lwp5W:=JZ6`\8Y.5]o@8{z5 ʸXoԔ6^sbi|MϷlnlp~$q(\>W]= I~183d!&:ƚ{��2̿]ҞC81B0Z-7/)GLkIHJkP,!Q[ssGMf2.ԠSo~+J~7GV.D+IkT9OdwO> t.{fyh3oW{4?H2,G�XvPtnt �:BkOg]9!Yѿ;<VZY[(צ`=ֆ331pNI< },b*n1]IeNm/KF#LsC;LK5*9p4bx2.ag.KeQSt[ޅ F5>;ˑJ8лLczcf ,G` F 4݀/( ߃]c*ӍY_?<jޏiFv33X Vgjve e*`SA?UY#xz)>ȑG[6ڒ| '_/l7`E~,?(M&��󗪯spƫ-}.B�#D6~ks twXH:UBы7VCz!]uA_:+,1Fiq_+ɲ] {5.fJ0tpp\kroٵ{bO<[.\+_<j`5K1|w*Z:B?.(.97(%@!KGxnP~ �Kg7EV܉ᵋlo:@s{jEσ> e<W1Ղ}km>_毖Oϧ~.|lac+O/�å<:V9<mI@3�r_=2pœM&Bpm*…cNZ-7܁ |c2fV({ڞXa$nd)m4ݎE&렼je >R(90fSDZi^<Y RЉ$-ΞpԸ)R;ֺ**LJ/ԪNcE9t;,.,@;m'"}SRqQ҃T�T^`.?BӪ.9xŎ̴$`S{vLJɍMuz>��sϓxzr; Z|J" p6Vk[.x2=M`17THun__HKa'&J)=8]9_apĒbr٩1ʻO 8jj(Bq 2ZWϧ@WT*s M_:M_(;2,,ən1ͱIKڿK+'9ag s'<o*ӆŬM+Kf#�[6cϽL6A{N\kJFKzZ-9DϔexϽ t"%Dp44.T4'@]%"\̺e{ 1#.th�b=;˰.i_bS~YV`D &IGEO;I`?Ab9眇!0`G?�XT,,+3dqZa0k0a,2aaUHaG ˰  pq@O& 2LAl&A&#DOX7U'�.~ ,7ķEEZՂV Z! ppθ /!��D *`,#x �E77gn爧wߛoOٶ蟜K.anu~MVuQiьuU+SMca~Rz^=CѕB�dSwa[]uzlΞX ' /^^NI~d^�_v˝gfO,:ѳ}й3`K]c038N8ˍ=_vεW'Xw M6{jrf=k4�WkSQt]:U; .")g},m4̷÷ 籑w~`Pt:(_ޢ8;F$ljnOq .T*[KˏeatJ+D֗paZՂeoei°s,ZrL� (c]z[ڮ<ƭnyɓгK ڪ]{|P|suNs⺵|ŻU(^P޹և/lڢo?�ԯ=s|.lm4Wmiqҵ [eʲ PiqȐ<}<!Y|WY [ax AOlK]={|m<J# `Ql ?bܦh/-ӱ]ŕSƟq6WYQK/.W+8k;njR:HEv-NӓOk3_m 6{oJw)��콩wrY 9|IںxjLo\;X:ElEG:g$/F{81Պ xˡI 0YXV1WQ{o�KM7XXZ]}{/\ee0P._8169I( dlSkq.lVeݹBUy!ьtuJMm&gzw+7`2\[.Wt!hYvaWZo,\u;sB^ =N-h,`d6= Dj 1y6xTͅk%4=HP%"fCɣ^}htTmﮛ /zJT];K 6#HT‹ʺ\]��)Y{CPw|1M=Qo*EU@&(.d(lo9c?!0]Q䢿f�!ܭRn 0(4hqh\B<qKM ftH<%\pẑ0:;kmjK̭YM9Pl,T-AdX _A]ҩs{+]# 2T&飿�0n%FYb6%ɄG8`ßccVZYѿ:p]HӞ{Wdڦ|cŜ1L-7O_;z==0\ή-5@YMk/v{o̧X [6ъҤ<mDe�CΞD:JjO)&�0O~f*خ5d2sSK*_�]QJ -W4xG s|ꅒ̰CG{f7WQ3YvC#x7V\|u �-L!Ӿq_ a4<Qvb}LˇحJP@@YPe$' l*Zvt ṓM}`93ooxx W\Xq4z*vHRjϮ-Vt3X>P]2B]O �+GJ>C<D]a{hB]lYDDf[KsH�8poM^{zC)B.!�DuH2mJ]ŊDIF|B: *o5uuHkjŷrs' (lp$"MԔ9u,ԨΔ{."�\xg\-X0<䠱]u4%y0ZjzpERz>=܉;uJF':ÚBz~b7cO;ޑi 0 :*U`QM|EL;lQn%#=�eg~Rw_~bsr[>IF&:&%u{RΝXNdžiH"f2PEㅕdl &4Zi!7"ke;-vdKEdRw(&kYt%`J3Ɓ!t@DHOdH_pD54bel7Qj+H��]=ޜx 8 6Q.Y5geY}L}U9 gUV GMP㨏,N0!x,TGݻFsWQTvB &z>'CEwlIu<㶲P0S}RmPV�D֪B21WcHIMNibJ & $XMԃ#5 DTbejXziwK`džV1E4(6Bv `[>O<]Am@DI!W4<lŎ*FA!N)� Xqw'0`[8F{Q#Σ@y z@a xDiSGF)`A`VwѿޘkSn$`W's͈Z,Z*7ڶǧg_<ACmE"tDKUWg)v$'k?3Gт(n5ӹN9֨Rõ_jvm]Z9']/ЌXhQ;~'QMlH]4Zb 0TlX\|Օ\ zt_y<g.//T][[GSlѹ2|;Ҟ|yCؑ*O jQ(>{Wjop0�SuD~ߔEgYo0EITrx2&l>lX]E zfsv Gk)]6b oVЅ_$';qH ցGϼgjljТ_]#4/@TTJYӫxS̕d 1�J XȪut�� nӯ/V? ­Fw=91ݤk}閾IZxҧ;2 Qp2ɒkϩՖ.9iNOK nƾ7}7¾<tE'-lX�ӫ@zJTkZ@HWKa̢IT*,Jr6x 3.{�`kw.X.5</WR~֬A{mrS|V_[c}z]r|o~_ 02yFޒdg>79E] �+&D3qlbzRֲ/Ok*yB|7n#zKۊ1QPbiU8O5_vT$mMi(oq'xrz.{J @nRW` l"&I &-BO8ln.چ?`a@my=͙`Dہ߄ Jb8ieV+#D ŷŪy[x4n c ,dqg2p1pC06�0{Ggi+x-G10ԏ6ljXJaG& Ni>[W/k?u39>9Tv㷢_\rO@ v$VX`2. .yy2yt`~E@[iQ ,teU/]3}LN-~QgotGcf/Vj\ .Y*o5;U)pl6A47ؑ=C_6\.>`�{#" ċ3pյjú3[hÀݏ_^{vE9ٞliX!ȍL o؁N";ߒ,Z� -R3X3߃4$\)QՙI̠+j�nN͈&';:} PDX_<F8ieI2cwD^X5 LdbÀowNx9b-!Df=7^,Ҽ)ءcn;{|gJk 1tGP茣!v{)Z=4~'?V+a.˗ %*܌K!CAƗ@y:N}\k|n{*ܾ7ðìO {^wŌXBC-sP{0#-$iOl$?.xMkKkeW]H~ubgf-l k񞩽'^YƏMw@�On\Tsk\-l磑¬O>Rz5:ʋr:f X<3T„r)o{ˡL59Q=1?+`:qMZk;ַ =qKg6]`�seIUtrvS|-|I֚RVN[/�9Bk��jfrW6ZDi\o1v.ns9m5*8=zK9zS{qې/_#ۨ&-]ҹ$+k2\L/~ =ZѸ 4Zev_5Q줶YGANsպLLv!'HTq&lߓ8g=۔ЯG3r=.>0`!ΐsْ`Y#ǁY<P`aPEl% [z>cf<ʙ�BZ8�8۹ .M,$chP[x4t1rً,` 83P+Da`g, `Fmfbu�"0AK1oIܦ.Z<YHSBIyL{).(TPؠHғWVCsTg{$ ]@}A[+sWC毕~~tYlW8W͆PXq8/^nu9t!sʻZTBd^aue75N@r9ZkjMBmŝ�0{Hbm|�6 Z56Wgujْ).=.[x{{t{vRfWp}tF`���IDAT GTzHH^s a:Gg(N*o6p^3�܍mm6SK70R$XeH*vl貱3]9V^sN Aw ۩*X@)nr �nshc(FIL',\ܼHGA}o^;|H ܺjCm4lmTrܡ19R.;! 8rlȓZ}r;r a{x<Cx0zA|bs JM"!IZ!#?ݠK[l =ߵYw^i(|}s0ǁ/~'#p]}?éףq]zxĆsbwF 1O|8!eUD߬ vJnm`ڬDX4-A+Pb}rtdpy Yb6p 圻1[Ft,*K&X_V)%Fv$AQ݄[[mz\t;r8 Jkw?2aEt38ROz<9G=VmUj ᜳj*hgSf3R l%\3,u>R@؀@Vizxi ?Y.8y6\`=wAEv"dJ2n^. }�J'w 7)*>{k7nr? ;.^ʢ 29 UB#ϛI途f @\,!cDvي!< MPm *30 *ϖE9oZn7CƱfƣh"` `hfK\!dd Ze",DO0�x 3Eܗ�0` }.m߶p%HhlnS~<(tqxN8,)!@"�ϗ䡌@yW<հ_ oQ:r2D#DFt3:B8 W@"wA.@ }w�0C??-CR`(^47;[Y?IR2P_�lc5uvg16 Jt!ws`WX]J!Z^Lu' ubK@תaJ%@O,`ڕؠ/!?toX\3n+1hB89_RSuߐ<gW<zhqέ&;K$ _#E+B�U=:30S9q)BZi!I!!Y a7XR�DNR ;F x@mn@$8*ܩ*]Ku*Q:v!L8{ |BCH>eS. 9�/oy_O|!০x&`HR(EY9 !qJ}$!I`–4J¾T+DRx TAA2=†R8AkCp~ԅ5-x2̩4:}%, FUEqAp8:7Vb6 `|PZƚfQQd oHaU( =Ej2Ŝ(U<cJևBcTUFfŇM(=nFicǵq:H:\]-U\ f?73p1=7Å!w݈ 1H($l 2ߣ! MI);Y,A@@}>|V%4st+b3 G�"ѷRjҊWLcHPKi<Ҭӓtv}ч.׾ًj<og/bfh-]{z\_ըsW7 <;Y+[ �dH|@N0~\.N-S8zԤVn d{ej�ɁVq' Y}C4+ӆWG|. H0{ qp1%XA.%ȑ%e#C@"� Qd  TOڲ` @F4[m$nFPQaXTߠ)\R!%Ro>V+rt4c,2AdFIb< 0 [hzQ5jF֨ZzZVjJVWZVkzZ|[^k ym47~CVZ!C!!\CC90 D?@B؂Pfl4fj6ZFS^VѬJV T,>TjjZ5V֛Ռ Z- lA1�D?Ʋb;͑⇁mjMBziЅ] XeRN ]�˚[5!<Wqմ$SV%r^H]KL+D>_R~#C}n`yEj:�H3~| /+?bǤU]<:( ?FB/0 I0G4lصl #ƆdZL xlq9Z VJmC!p`﵋,SW3 j0kĠUtn][7!9`3𭗖z)>᱙N'‰W6!k<px'X :⽦\_\A-N:6@Æ+B o8YpĮ7�Y�2EdA#WMRaj:uv�iTPȻ)A\I"oGq !2ق-`6̛Nnx薻2&F':GjWZ! $!!�ѧ@jT#T_H _@V% x*%gy5bm2Kŗn,6zꞘ e2OQd 5dRSQZMQ|0Zև)UzHl$O|cյ18x-:0♍V 6Gݹ]s8n6³7hS@!HNKJ:=˅Ĩm )%306Pp"Cc4Lg}P3ƀ]7G}DT�vg=)t H à deZڨw>uFOi5ܕ-p⦋L^t� =) &9v)qPiI[8J _Ou? vf$ X=N,A0`X.D~!"hJa�k.lP ^ƩX#c(l(&[B"dX[ RXGn nRB̓=H n]9=6w l> lr~I< ؍U䱘s7ry&lV+ x3p9a*R~a s,Xa' g+6d<q;6@@xV8B&X*HG>G<�U%JWIl a3x)y :`Xv@>@-h%K0`!aV&m Mm'+jM=Dt!(0<&$)tLpC." R'$ǕP!DfвERX Ӈ:?+{<ƾ]X*RG= ((^z[˥, 0 !҆sp 9rԌ  boRd�9�3I}Yn_0M4ʌvyOKsEX$1,z,?˺xۋ ]氺84V<68|*h ᵗAaLk\(TI*d'*ΆZ AeO^gwБ/@ܕ@A0ۊZo Nȿyj#8&�ד$a)߁!x|.sIz-|ۋ_7gϼ6 }|Ծ'@C-Bt`gzZGwnjBiq xwHp G0r3GܠV;M(h^aoS;, Ra WuR}"ט=�jK@BaV )mV  &MY_K&cKՕEg}=bv3�p/܉uKL8xzYu%l,rn|XBk%{rP;B9jtG0ֱ>@Oyb$h 0*9osyn}V%>\]N-F# R8Rx3$aOCxڹ 8W^`cQڰ(tܧ6M�A͢AuTl t'[ԨN0HZJ?g& &SO-vda *7e'Ġp4|\eU7#b) ) mwTP^ 7)m ]&�JRAPNXr~mq=H4e$[SHr7…fY4[MHdle00ca6a?FYz-[ZZWJV*j\)oU[Z^z^kjz٨7Ͱ;arnȣO}�f@rl&d3\6frL62 lѫ럶300a6e,2A d p�Σ!h?ql6zZVjRVJU.+rRT*5Az]fl6f+P f<b0Inc1yOL>)M;pR:r{b\d#gW~\R ױ!$4hd,L�6 �.rjx�}wdsX|w׉z% Vr+xx=Bt8yA{|'n(D!�7W pmĔ#Յ%1֏7"> ;1RC#.iuA A]({OzsVδ{g3m3} =�L\-/)Ywώ3{%]Jn4_?t?y);4J+buz18\ƒ^ am|50O4Цd9g9֙Nw" % [ lq BĎpLT�'e_f`4?wQ.1�(tf|5Pu;Ai'Twj(E;\PKE},$X~nwo5ٗtC{Ith7.[$=-w�rGM� pT͔DFw9Oq @X;jo Ch-P�]I/ !;v Ǻ؂zݯ]}s &Ec0l:.P�L*ɠ6,�3J&o4dU@ZKs{)y !$) BP002h">7I<F_w?dOd 쥭rayV woՌV= b 43)0SNsm !V 3$Ei˨pTY}>(!j ,Q&Z`P\>9{yKk'*$dˈ7E :(bc}H8r42; GCR.6vL.,T6Lt 9ً% kK Z}ș}RMmOUd-EkT͊NMIv�,GWpC1l 1V(f!iWE_^S~1J {%B Lc j|@ycQUvϚToqi31҈S7q v7.A"D#Dy7W>wQ?2`%HĨ,rv`Lmc;O!D,hH9n�yZ9ajWap;zy<dee� [IjJԒ@ 0UTVH&�xewP\dʱKc!#bb\"f _ADdk$XA�xM2dZM3�, &cP?jIT[:wOY^m?M?Md`"Sa1^53E|nO_~Nt|8wcu Æ& W;~ؔ7�ӓg0�NW_f|1S);$;WϖS>BR>T@} ;�4,8w�gsXay.{&oC׹bݽ `[vi"fܥJY:݌'oH진Jg13K<|@bjOٿ?~g8zڊsXm|!S)7˛MB>�kx/��{OxwBi[4\sɅ]]Ov߈IK.64P|X�)z+vfف~^*Ҷj%wn}liM//T˗f+{ojYvF[Rʾx6s@GW~}Bs,?bW�!utmjS2E#vٽK0W_iH̚호l@FeE7̠l(+&¿0�A:e2 Fi[ע)�g\To �?:'偯ߌsk~#θ)!,dXhQ h@m%gJd%vlZB?dl%v$<M *xy{3gMmA{pe7XAӉs?x$Rn -1N&)eRv9`wfnc,ks*b9Dѩb�Ɲh1$EJM.-+0F_ZF&EH ZQGw=_[=EuPI 8۽43\E01EZw}FׄE$~3> z^ښ4w|Ԗ믘-<Xp>΀cHx|�hNx% ?Bc#iybivaK:.`N?.eE46`eFX4k}CFT[̡k; ه%qsY[Վ.;B'eH׭Zx'?754#ŎleI:jػ67#iX⼭@F]yx"].5\ϣN7',�bV4ּ]p!$i<^(U+M- v+Qi|(Y;wBH9hLڕB5So8l֖k+ 5ܼgn}0_ȤIg^RީMkW&܏ $ᘨoTے^f9TRSN_*�U+H5lB]E5�*!uJv9G@{sD[eO#&NE`jyj|W\T?ҵ%[!R׳^.!)/{/uteKuжJ+vxZbI. BC7pޙ]KX;|K%" ^i&~MQu]Kdﺛ'N=L߉:Les> 1p0uپ\]�@j'F"E.:0~R8F)c]l9��a6MN)[a%Ea�Z#&cql�$ 9ii(ݭ;x8]ҵ38,p$g!�T\F <Hxo#ˁ3 �aB|dU A C|)*`�Ev%7˱T]aT,E>/8%ah{�a4Tx| lJFU两Qj̋n+_gxdIDc‰xL/ŀ=[_uY*Ez"@ϔ3 r>f^B h6zsҚXV  N^{yErِ7s[MB  `>8z ,U h l r<5 e{NJ: oEq�_:pk/g oYG�c/ �z0"j_"l^o2g &$ lŝ8Tt†fВWg��ؑ{  E aҿqQqowgT>dFqD?QFRNA.8�|M"E`JՓP0 r&$bNbc/+FpŅ5$.;88\-b-}q{ ɫr[pCr@Ðde ]ϟFH �1TA[RBW"BQᡄiWfBPQ(n@▚jpɽ L~Ĝ,t90|�0>#&'0XɔqZA�́B!&7ՋB13<^4|<z=JUO|w~L*ᘨ)6m4}JT AG*=ַ$*ʁrIN|Rycu{ΝXlln%mVBZOG&A%Qњr=*- +LTP-1cː%hSSNBw(&/-K*3Ɓo9S-|GV7(C.x}u`d*5\k]# }$<$N!?Kc/L1媉dS8.ފ.mWjp0{T 7V_ʼnW��o�b8r-Ie'N0|g¶;?܀3`5b00\pI`W�:8zM GM}"kOz=3MP( JĒPg"& $ڃădvҩkPHalmA1ꍲXfp4U"unx T-|[9N#$MBa JxS آs0-aa =ѽ(ajZMAFhTգK~*6ˀ'Ne+́jJZATU⣃8% IlXUf,`A2H'Mm+@U%㑘&vhA2fkV[*!OpnƺJj.Jrcs5^z9bu 88|w4o֟[[vڽA~7$,a?虌6?ܧa.ܮO ]>C7B!(([)ቂE~AJb >Pj^>].J#N1 T&k[)dԕ-lߑ8B?LmuN7(AtAܤʫ-S#O*Ih3�ьZZ7JWֽPl+.k .,9̀DRq|nѱ̗3A^h/iJ]QWR! <e)p@ GDſ~3�x.;pؽV0+ӹ>o8vH;_ 0{Uvxd|w?:jCk܏ᦧ[~@D R(^�lzտ 6u/An>)'\ Q:w&?WHd ]�r$)"D&@uM!4(8_ � ė'm5`ՙXV ^NqC?(fr'/ *&1C'|@!qA&_2vv=7!)a'173Y6J +1Hfx<��ZK?rŲ'7CÐykh>Kp;쉚ĩ-G5 ! GjhGHFw˜rdl͑QdO~$4Ŋ)Ԍ?W��0{z_ϭVkL՜Cip:>ݗS+ևi`L׿Յ>j!]�lUۨ|BI@^qz!__u:X;<?4BGvbƙY4[ pLv8 AiI6uWOn0.{B8X.,AIْbwwv\! J_`}F/C�I'"! t%٦> !jtf1i1ZR-- 3 GMp A'O=H$R-Dnp "_�be5�A&я qaaÐ7Z.ZJZZQo4jF_Flf<_Xj�aX*#M�!0w)8*z^PkTjV*j^5"DFlpZE_΀ "0d l2, Ax9!! mԦw#HB:q Sۆ�"D-%B(R CZ Rm J\!PjPƗA425 Ć9f= ly6[_Wgnk;ޗ-+/s 4cCAfA?܅%?B戶IGٷ`1B(^=Çarq ;_!D9RAi_㟚=V́jTfljP7=xb 򛱁* WvNft:k-UO6c0~<��3K `=SCcETP&8pOi�ѱ rȈہ='>3atsƞ< S9dI_0G ֊Z Q ј蹽OW/gm4W`wqa!`}t"g ;=g.&.uj]qzNC]zo(G<c!D/; N6f �ፆq8ڪ=}y7BY:tH#Bze`.8ԡ|5BR�VE-1`�`Ϲ<8RܧYH@vH>p?l%-5EWphU؁K h hgw�m|⋻g%?R0ڡ=~0|;@>Olaj@jc)BPKC:= pte_B� !JaF5$BP LǴs++]=_JRӛa+axuIRu!ٖ(A$8\x4 BB48E8Xm�KƔEDR81S\�єbFa�pH&T8F 7w@⽏rP#CBEiOFlBfAg-5ᘊm "C]@z]>vpZ(Kk wYkN-خ '#C{+8cPo>-qmJ8fsq@-m>:*br*6S{u€ Abo G ;Pr.O%YӄCD=OWAfehTx7kQ M8"P#OfJoK%#ԨMkp Ma9gb_oU84zð[Vl[zZ+rRV+ѵZjrom4\heĂA㶡ޖ^&I\F 18kQVlhxZOh6V-9 e2A6A6�Tq2ֆM~c6mğYY76\`:ŷI̗OL{gc_E 'f>37r_vdN~=:v{�o:z7_\MLN<G~j{g~u76Ycv#kV0WL^࢈Ϯl+nT@("Z]֝Q;2O|n׶| ӑ'KҾý}s8lM.:wHt}}|ycm,~賻~3[N@c )z#?0:xEBpzĤkɷ?8ѝtT$jծ܃ON<ቤIt}w znX^xjPgOOrczs8np/;%m9nO/[M,vfPnJ v!t׃OL?ghKs><0\߶p_6SoRU[i2fKt՛l14Zx@Ot'r٩08 7Z]/3:S,N6McwUx f2ٸjntomV7Fh4fިzo*uYȷZ#=Sf+:K,s^eECqd fla4~՗?`bwN d F g�jնZ- FJZFl6Zf6yƙCƩ QNCFlYp~H@i~aPIP"GKV5Q9V k�TV;�@@e�EmtB쒱O~E2d]b � ?78}O.{$8W}~Q "gީt룿0306g >|= !JdOΫsߞ</>ԙ!Cw_E/+~mP^<4ڲvUXq['^}llbo'C_/f~ں|Ї'~ݗՅY\mdB K6kCU7B7�| ڶ?u@PJ헗!^{nS-& lyi 3#Sŝ|7^-}7ދF'6`c_޵Dz+ح ?9<6!Me]x#EYŝdz*I!!YYLL|omAr�`y?ڋyp#?8*(שrCqxᏍAQb�y6D6TR `#Ɏ `HN>}'O$=hj�S:?O޽72G@ E(j5v+[M�MVZtyn@%=j<}  aC+RDC- p_Ogwgs % z!h{-v$ghŽN{N  ǩ}w`'>3}mHutezd$ =_?q5竌W%j8 3' bN}m"W>Q#G ሆz>5FΫ Փ [ѻ-K 6IWϗՖXU^YԒ_rTl `[< t<޷{^4�5(%hL#l~p~LD4$E"F7^{׾}wg%GfDxDFs߫PaNݺ73OGD#dG\$nXǭa!8ǹ} LP._~sǠgck :^ �ַvmA#@0$[z!7/$̹�xڤcE�-[+)IF :yvq\p ?�lC\ ;^$n=UtQ<D$[o&M7.z)L߾>pbqz ?KFs0Jza;';3OEb9W hvv4Ga/m!s _x>￯^{TW04S/|il4pa,#AGM 6x?.jG=E4ގ睘}r.MGE EfMkłO֮e}37.9I,3M0![nb'g|6][5-+)͑meQEge6g|6vf|63sYgyQeQYo9�a/ˆK 8c;~?t�I$I$I/ԪPPegy6˳i6ftZ=f+*%A !w'۾)^uE^m *&A >]\~Cd+k;mMgsXK]~0FPKhKJVǟ~a+y_7.wE)?O<0sHK:o/4N&heSamq !s‘�.COakj8z!g.©]kxnt}sȁ~-G7yy+ӏ?Օ~sz񁗀 +l[ ]ʿsc�9po=�ŏ9۹,>h.ݮKЎ k>3J?O|9iOW#V%O bjwO'wL�S&ɰ6>6ݘCcТb bqLGdbW}}b?O-̧h|`ƻ^~qo6zy?03\$h9Rt-B\X#@HS?7/z/O{~/_X^MYV>?cѥO#;aaG{d !FÉA!BMt}j-wsD5 W=O!m + GRyەǼڏ'��@4Ԫ2 O>?OpQe ݋K.<h< gVGxS%]mDsza~謐C\?ҏӝ;55XGx2EB7vxpI>K_|n)-<?4}45�^xgW[/O.+)_ۏDOT6[CՆU[>`p髱 ;2nBtt�C>͋<Wޘ}sO,s9u3{Mƥ5 |�iowRcY8krTr@T^a}tp^Ej ; }+Fbs*�p$ue$I>ӼlV=G%Tٺ7~ǩ`mw;�hu=w-2y"a9T <7~oDϷ.vga^J|'/<#<Tk|du<{|D˜WsE!!~%(s"Ԍgi3l+{+B%Akd "-`+`)djPƠ<ǪnaݤjYO}3l0A}noyflel:ͲYlgYϊ"+,sU%i[Q`Ue%i" rțu:N~#M7 R?WVkRnt6L=t2M&tgyY*UjjXwۻ -"lku 7(P#]`TbR|LxYn+t_ψ|_ÿ3_^ 9b!wv<ƕ__/X[յeo??^==1?ٍoُ/g:O-ߞ�}t1ǽڃQ3 v}pU3߾?qI*~o>w}nݿ9k{Z쇿L!`m�mSR@n#w}K{Ͼ WןzϷޘ)jS£}S ٝ77Dn`s.. Ԏpl>: [?|qh:ouu P>_}Z�ğ ϽY0ĬϬ|ߏͦ7w*>i" lsvY0<}9FL_3.f^1γ>'Ϝ_{p/L_Սђ}{ȧ+XB3k/v(Ǘo={tGF߱?H72W)"6dy%[nsoknMqX៸3m k.ݞ0[7vkEޞ4A2>5@l2f>Bmt-s 7O'G\}(.=m{zeEL] <wk^=s~Oܽ8"2Jo|[݆募ZKgֶN o ߺ-uj{K@z}gx~9V ,_$6o8FHD\n&?uv٥oSIBPsW5}ͣ?Ծ~ )޸|o?~;G{B"#_fيy7i :jv8)L Yޫ/ NS c+I&qNt SgO^lVkN=AG?g/D)WG]8@H|χNnl _*u9"Ҋ|[}5m tRtSo^>Yh$]z!DpN@( }ʑ]jl2SLyP;I3g/,woOG$؜fZfsVA wXZ<X]]K~uj T<کs=G6" K;ǣOoӤ ' m-׷ܢވn DF+百%uUfk�Z֊4Zi"P$]'2Kp ds{|{exzCqw=ooSݼ;8r2V5-}V礔�QRJ AvX*I[SW?0~۾#AbGWyWLHquxslD ?[+5?{f7y#wjRr<j4'߿Ɏ'VYԏW| o??6sm ~?{o(eq~f\&?t̙{nNo]ܺ2f..85CU @�[  6"�G߽ kpA}`lmgLݚ޽1kyrp3N?tH9R^c 73QÊK 6ȱl'_X^9m=Goݚ޻9 {eԼU)E/ەVnZsOMW@]^y{mƭ D#6+|+õn:;"<>{m[x_}mٽ[3D<5<9K+0}6s<8M}5צ.Yk7Gv7wV7B_i[nqnw;{zi3G'ύN]<5kp1,:dD#S?y}/?[ZN~?ttP<3{vt6Q:t`ЫVᱨe- ]O8O1?Di͠ݶ0�<O_΃۳|e-9qf8>ܘdBNAD 5HyQG"Сk/6IĬ5e6 W 3K]?skG?c?llrTn83:9<5Z;GĽW~OW|8#v=Ȧre=]]ON/=>װܼ|WǢભm G˦jo;vw٥íA-=3!4N \rs{kQDQ8ypw:6rfaAa y8�P|y_瑠6ۛH7VC^g0DE,8 ș97$ B@|i3ōj�gPV\BtZ"AhQ!<W+g/xc[F;AqRJ>]UQ'}RB{d{b셕`/?RV7BgCzB|;^^ʙ>߿;Q]}Od"HwOK\_|fmۓo|27.nnb-><brX-'+Z.$sqq�؞).(9Jym +1El'\y=:ᇾt\Q1>(Wti5YZNY |cdOVT-Em*g|m[%pwif&e{1$7[سˆAt[ AM{)st x>0o3H,W`Esqy%m&=ݨU`̰1 0(Boi"kZD�gI0JUNTZe8G�5pj T6S@pM8"P ⏠9gq=B:8KZk{2ޣlG�Ѐ\]iP~) bYj2I=(! �m,\19vwx&:8T>t��=Q3wQJ̓9zkG'Z_L{O_{xcW>ǹ#tG؟F?O_/~lNQsp-ԿoC;f?Ot_6ZOg;~7n޾uA{wfk۶lk6"V83a_Ow'T\|f3ߖl__Rw[v3}?Xe(щӣe߃,7[@Z]OW>>vᩕ֩{mk}:p;f`({N˟hDߺKs,,-'.^e^gG[˶N N =kq߻{pI}|Ǹ7|λFc_;h׮~`wO<kϾ3ZscryZ}˗aT<tZ.Iݺ:>qf{�[yfkSn]=lۿ{a{rBl+Aq}oӣk@(_Ve~~yEty5]m@fD4Nuvߞ1~?jV:)Z)ZDtI: |:7tSwR(y[x)ޏZ�bG�h Ȉ-_F|a#+k,Vﭔb*tg-)FƢ`5� �" $� mP;YǫH1*3BEMsBH;@0l€Lj(bwЈ�Zk�%oF"U ,Q )ReRtQ@"!!6M#;/oǮ&Co훓Ɨm!ߨ}v YŗjbaUfpnh}]+XhJIh$ٕ΍}o^}e-__Rg;~̇Ix^Nu_o?p86܆V`Ԣ^f. ԿGoMީ,O_{V j(ӥ[ZVEm"pǶ_;UEx?t>.CakC~[ h,ً][S om5@�?wώc�vVW33}mߛ}nB6V2 ݝ۾s !B:Ջ4l|5D=괣h/~r[ߘsˊB&X۳ޝP' ؾO~svWw؏ЋW~w[Hsd<:dVij= l|@#ߐ†en'!sy?MF3QwB?Śɳ,\>VÏߝV'X>bͰMKdϟ b~}0u=/IҜ{ZWܾ>{7Qsb!?.X?U[GD䌘OWK݀$1Do5mX gmVGwͣ !=(�!d6}ぶY.dfāqlSt!�kr ~mmk ?n/Φ_ߥ޾5/?@Z'&?}fj;jqQԋ&فdqTw'qa"Gc "ׯ|ieHk_&*6y{2�Xyh|g/B$}p.fq)?B! l4ӡFýl xy &g%Mv7!>3FZlRa9G+`c|M :LL(ft3LY  Qk$B !aUQD$"ЀTCQ  �!PJQJd(!ɁH r`VYQNrӬMlϦtei>2ת UVHZ@RDꍾd%iAաU$? R$Du1�T BQ�JD)@"H| @hB"ԕr$��(E uPW+RCI�B$ depjy F+L�g !H46kgd/  ЉPA�@@�%UR "Uv Q &HdJVTt]5\kZ_#$$ Ah jSr+Ye=՞\!j�TzÅAyP*(HB$'TDZ"/i>G<2@$DHR L$0"RDHզ]poնtJGX Ӎf~_;a~~;Y[\[el2t=nJkuqv.i AY_ a8` 'M뀸Gݜ6>$S:7C{|ZRךɕ{vd҅gg7tKo^9zEρA G<B̏p ;mg7gws_<C+7>d 8c|,+G+_Hj^x+\Xsw?mR՗_?:ߺ6֤g. m!"$8)o{+{|(o^9-*bMb�6Yfj3s `yb+\oC/܍{zpHw?g }6xC+|G&Լl) Yۘs$怗H}Ơvo_#PKOw4\"erIP8%{L^8y+t/tR({^QGDҵ7_}xtfp3 kR;ǽ#L}n޻9`i͔*Y߾Nb6?0B8�@sf@lpW[#$8ң@q%wj?~e?TpqkoGbW"ܻ5m>:\zڷR !=(XK$9ǾE[[~g\†hY@#KysG(ۓ/xLdkSOgY|~n3ĭ8E`Y իz 96tIE[׎fkǃ38>w"A10=y>�Lʗ>me_nc$XKʹcP?5d<G@"`}Ȫ.b 2]AΑx3LFxs5{w2&B-C4Wu\H)L|Z;;-&N3}9ȿʨ'D]=w�u�z-ac@kҊTUIyBElfy6˳,UY*4i"Uˈ+e*v.U&pD%4 (]QUT^m%\EUR̬*)gV0!C6]=ED tXnfg-/%D|Y֪ˣ|<U zPؓ@Ӓa/4Yj9KssQ6N|Aj 롬%h MZSY8$NlZdYY,*@HJ9r D(Du.u}5"[4k 1=7kx7/ u܌fkhaȖ;uueu64Kc|=([ ?[:n5g _jFbٴ5JIRS&53ݬOo+W9=RFy4u@p_~QDP@Lĭtv]y6m V`<Ō+_}o~,|[mf;XzwfuKq)En MfcE�Њ3_}kƈ9ӷskęK SqŠ�D~Q~;??_'d1vpCg\$2wNm~4l^{~^=|6_:gcKG1fdIp تhZ߸HgՎ:qg43g}N&ZR7z<{Ïu*wv Fq =KƞS#d&1bWs7]S�prGInw8 �|=n=>lMzt�\5}<دf,+}_scmAΎkl}#}_xwJ E˯+uxr.G{PƐA=j\m!y<#[ۦ^$ftw[\x!viM<P*0$l9%/Tj%ahF-B `93}A `ޭE `Αܢ">8mD>u=ە*R;`8XɳAOܛ>7zEK1}ӚbI^g"7/Oq Z1xq6 ߤkƌ_GurT|s3.'O.K=4}PX$*|g/<}G;.`ͳꯥOnKFI"_B: ǜ#G$$9!51LIlïb2s4v?<9-1y#K2?Ll#AbM_,<0 Y1= aIV/]l j{WV(("ϊ<,fY6ͳYMg,ϳJU(4��*9$۳5rʕmXH[c0h�@d9`6562{7]ՐLw ;>!}^YO~C~N58:_:B�lZuvYbRۦ5P1o eW.R\D4eY6fY͊|V2TyHDJ/1[K7j[Q/шxm[PΑ )4:\x2ϔ4.j#k "p{!d|.g~ 8<~ w??�Π7؟+wfybSBxǘK<?|+[B�rtPQy^{}b-v|`6W,mcr� zyXq~@|oʎAcy_?t"E Gs8­oڽ? M6O>B\�"w'}mg}a߭GM/@pVvSF!&�$ ջ Co"?[onJ+OW[Kj-v#dzC~ټS<n3?s>xս';l)FN.ٍo,R}~?fnKǝWVD9ܺwcʜ?"0KFa ospwO�r6Қ2b.C:G/9 dULBC BQwM1</JCaLs9Q(`MKЛ_o*٤/^ `ཛ߯=뽛{.dVG۾3_0}+K߹}CF<:IJ{>Vq!nyރ"ή٭ov;3\J _n!|.4] tw`xu@�tNWC "A\mۃ;ӝ{3$ n8%Wweǭ}bZs)G0α<M_e=1rgPC1! nv\>iM/aC\<3b �L'"7_{op&H6onFqD=|^$X ΍RA koƏ:kDmKט^|p9W?w6)]rGa,~NXאw o2(  R/t r8茰ZU#I$DvybxyQ "KExC&B` xa%Ag,]{sy׳Nsv#p.Hr}r[) Ivl ? D`m-?@@ B(G�QMl?Edenj.r6ͦ,f,f4˧Y1+ʬ(RF$!@&(%&D ("V,jijmy}>Θ(0G@d9`A!Ʀ~D l�4B=&Y(X{!p1MH(@ �J݋lLXnmٛk <Zs|*8R{:1E\+-�R?je|;QY,,rUUݷgEW>"EʂT)H%@)PP@vU.`Rn3"9:&؀m7+_{68_Owܲ?<;?O?{킧_X[ۍEL~_\k?O-to׾pǛ*W~/]x=散ꭷ_z,?Fۯ}y?p;WgǸQsLpa6:U~j`k۾u6N]lU+ڽOspx}}޽hZ׿챭SÅ=?ѻG[̊*E|as͛\^~c~/Bُ3{Zlǃӏ̓]Vٮ5mwl,t#\~mKn ^?{o|߷hf͗_~qWizl|P]{߇O-[2Y<򧷧d󛹭m_qx#le/lG O[W'r\u-ֻ훱]}`m:t'ܟE<ӟ/>ލt}#Yn\><ĪuUn_?Bwa޴7{swkoSGش7_<5}b<S7/线m4yUK}WzM^ޠiߣ �Y94þf [P$DZ&�{L(Tҝ;ߡVAYQ,mg2aCQETbi]ՍTh�ڔ9.^srpwfܺ՚ ?Tw;z qcF�HνVdǞYG:;EW�Zj7־$ՊU�T5KʲLB@b)@ D2TOjZW[ՑoLh\|_TܐA3Ӷ{[i٥Y_|:_P+_>_]ؾ28+-�4k~إgۚ:wW?&˘૟?xK/Ϗ:1{߼J(-5?7] F>$57/OS_93kI*�?{^ҁ,2`v_lnW^[׿<Ԫ{6)΋{/+0p`"xbm+v-"cwbg,5_?*�O?ؖJLho'o۵ujT._kg/E[}ޘarCГmqT[fCH͟p_@9Uz`1kG7zߵ?uOx:._wZ9S0=/ah;͟qBkg>z`W]n=@o818q:\TqtP|oim zv*x틟~+V:3=~vR$BsS)7=Dj+4n쐙h<Bbtci?moK{zT~}ɳ/DpE7_ik}x6WXߞ7HSwՓ.;o-}Ltk~p'[CÆ")d0lkM3 ߳(ҿ.8Q)iG8G"z僧߳Qѕ^wlF/&h{�ܟmߙ1켜7%n%""GH< ,E6 6}z #z:ǣKyr{6Nax,oNZV'D臷˳)v+GnM/=vp~x|X\ymޭ;unk3E_](OreKMTxeBL߹1>i�MgS�ݛ']xZ L놻6wS66=f <z@yRkIͳg;ǗO?2R,ݛ;7ƎtB<\&vUi�R|j�]S1q P(<uR5)F&)7N!<JQR毙] WDOQ66l|z8-*Zꗤ(t^(jPWM &ETj{:C+:juM>�tTԬkU&��$�kՏdv#�bUj.e:4[A@}l{FAchE\[/|s,եq;&$[Its(R�@y2J8bb =*\ G}t"X vfz*@DI$)%JpT]Tu_"A֪%ͷ#nqyAj8& j1Nدb;xZ^h<i}t+퓳 �E?E?fm3o}?^{ϸs6%vT%ýW^ޝS//6ސ=k{0 =ǞX^^MWSy,䨜[/3]iMDqZH@>\|`,$6=G~qߺ6gv<_SERbc̹~|ұC-~y?;a}Do#zEϯ>VWʦ8/wf/}no6Q=:.>؈?al Kiub_ՋX{9{3߷~ٵty%%<S壷^>yyJZ7a~ZյK+S]{&:UIqsovՃ+gSB3X�g?z/t !|Ɖ/g~!~sKzZ]+r=٭+sDރ�+hOs[~4y}c{2ⅧW/>qb,-ڵ٤ɯ}tͣVP СI6O ?|Z:I@)鸜!S'ھ7_~KFcOMý+|H཈l~}xHԓ$wn?;wzno5>|omg7D€�4?{wݚs9"-s'B Kb V/Q3W:$<qfx`0E"Wʦ*,:`Sѓھ;w{2>(%ɏ98xDP=e^Fh0|Nvo}/]1}R֩ 4u.rumv9̆0}}&Û>'r }K+0t lA:^`vwաFHzvqkҤqߒA\?@_CHCۍv>$W~ G<_y`sPn$0�HTH7@�AAD#"4\}ei7*RZiiҚtuvpuNruJ)"� rBV4Vڣ̑ˀTE8F"�Pu@TL(\dufsaoh5@� BAV?�Xk~ $� AU[o+mR KDBӿu(xE1!D@ Q s E�@�%PQiRDUBCuTtީh}3}1D @']%& =A bүUv֥X�PZ0�! P0@WO)e"e"$  $_ɍ`bZk"UM8gF񈽌Qb7cv<�q�~'jVcnZ\m>VB@hƁ=u'+:(_;_\vscWc[m\Wv_WXa(gX޾2_%sͽVn7kKJ1]" k:VM䰌k80mdf  BW?@DBpY.AϴՅ?\!\.&[F;2pۖV8+Bd))N�{y[Fko4=W߿/z#FcBW7я\t÷vPWH2׼PgU!l7fϓ<M�sAvtO�BH=t4  3흻?a81=Emר朝g7Bg!L8h[^~q=IҪ,2MKg$/nQo ! ؃4$q0B ~ق~nFnvd@B~!xpoA[&B7 =t)l0,rWQjRgt词,.욣SW }m/[ 1ZZlR׷7}/"S8auLMuY%ބ9Ύ8B @O%w[- "G'ϋ|i6~eL,S7mݚDQHayhm ިxHj!F !aB|a9GFaY ͩ^2TuEH[Zs T�`''ګP yFZk+"$!ݑo"Bwr="Z<Swo6;\Tzh٦_$x ӧܛܛYm'HRQdx"h5}5 mfA-q1TL�T !q`FHDՍ!HFUܜCIs }]߸ "r{~9ve*8yDL_tSĺs*-$kg�lVjo6N̞_D!�PT>3^bJգ5o*jdJ?3Y{H`Ny36r]@V7T$DS"$ P`]/0]P\NZ&W1J<͇ͯ+7.hBnfۛk& +U(S-UFy*hj8J}IT* 4�5)ҤA$HbBB )͞ZimXM-nZ'W_ux\�`C#N~A.3?ߕ g�䪟>ϓ:ayYPfKЈfp,Q\;wn+P"_J`KNpsyV{/7xjn4 >B @ qG۱![.Q/3�8BX'*6X`z:z"P(c! 2׻mFFr�#;1DiЉd>1bϪM)_rVG. Sˀs}?76��z_9>TN,rrftPd"rpn Dk(f7˝`.q\B'm[C!BL8B(jCD؁>i^:_!@g*T=bLb_8p"8r300t,H|3, }[J !!TTzN4=E{9 a.B3 @q!9B!B\'Cv9 DhC1NZ#v�y@S XW4.F-lG?%EƤȣC4_M3}$%Cx`8H`N3, @gLwv!BF�!>j"m�o\{maۍIh S<;ǻr8k B ~ó ބFf\$؈z+;<=y4-EV4���IDAT0OH0o F$hH2Cg7:D|6glH;BL_ùDgFbΑ xcu#0*UAeQZ9c> I 3lH@vȳ{9Ώc1 ?h$vHCؾ:;#g^|NջuHخ/ZLjw,K]p6`7Y\tA$Xp.h;2ƂAs{"$�yȲPv0sGH$t;N k7@h2/9ǐ>&mu~9iRg? >C(9G0nǝSo=(n\AHw��ؤ�^�L{  Nے 썤$f_nº\E#֪�BiA <$T$BB҂4!j:P7"Rzqf@ ɼMzԺ�lC"H"dǔ!0|ݜ.$@k@I @� И @ۼE'kӞ4CBC u"Hnu?�k%[Nuk~!ڛ+~WquҀD|bͿ H ۽i5r;QԸT6ZL"M&(H:&ZT f\n׼Oی8X09&O|qҴShcr`*l!b!p5},/:(%s%;*e#4nb&bWj|x_A=.^ߌ4by!.{<G9X/n(b^GD0wACpCp΃nEnΐBbaQa7k]_q [Q 5}D'3`2-Ma~ !<!$2l#ނw~ j;LC9"x0}+MT_.kZm3}&bl\Fsy͏L+s؄~C#e|DhEHbswf4Y\kuzK4]9Ԁn7=Ҵ7mؽqgs[̆B tv|wYM`k{:9D6*S?ڀ۳ͫvcCȂ:!*d loa`7c.�vݜBfh^&j6�n-[=؊`bmb96$Gr]H5afBhKSxcK!VL/Hi׌1`]6Bz>uj74(9n\>j[O# F∙erB UHxy/ٙ7hm|  Fk\C~<T�"" $D |&2CQv-I>ko m7tTĦ:WJ`_jN !jn^(R "]< zkU3CDU0*1hXL�ZW_ID @�_ (ABFdTM(DiH@Y5� jDilD$X=u�-�DUT͒$8WZc=:�^uj1^nLWsZ/ wA)*�M<?ޝj˲6s�qB#ޅARHD0Tc}9V t|Z"A$J$I$$I#*"8{?Hgq#͒w/tea7h P 6*()`\L 6_oD3zYL^ 'cWAXzh1߷HG6s[*M9[8WWrs|ġ'sG2*IEĐ;u><o%lX(r8aorS.?~S];5sw7LM]4aZg7>gSN/w-?*x+_BEk9]tS _`!}MDCK/2ٮ:!{s|6k񙿰f;^o.`@XfZ+Y5Gۥ -ɐ NcpS/j\^y`tȷHomZm/ٹ|\d/~e{ Jz[:cRdW䄽r~xH3R.%fecb֫O{/sj1RxC<:ƛjj3tz yc,}#"rLd' @|n6 / !E&Ɂ%*quƃe9^`K-"DV KĦb1_70rgKZ;`iG/=xeƁrJq\A,_\V)=Qs9*qy~%BUQNZ{?hs@爞E߿/6myQfb׃ҔvpE ;v l9g1>A'&2>֖.'r I ųmR;[gn;k .IZ&BR$Po8~TD�IEMg@D]"d[lVfD Ԉ ) FP*%@D7"!h �P*r]LG Թ&"!%8Y#O]ިƣDB&M9 @) R_!H�ҵ�AZ+tAyQJIP" �zTȋ1 ($m> AZhq$IA)T)X IT,RjMdnZ�=R`ITYQK)IBJWX7Y�"듫)Po1 BiDD!"(.#hʗHDEꕸ5)]S3Ikie" 4Cr -;z_*I^fR4H9JdZ' O!$SmN ňVu|$ yJB ((�Fzg1MA'|n{s:,>!w8v>}8eh,٩@|Sʼ> {y^V&:d_1sDHRH?~aV=:Ƀz0((=#}\0f._3&vEݮ\e.B >6sL o00a #H"D$l[P4or>tpDA9\6Ikj>M;Ʊ뮦}(!'p0k`ާF0Zr"�vCä0X%|l0XyZ@ہfBAZnl 7i`nnb#Poss>BYp ~F 8lu BADvZbc"I䧫9lOtL"veG 1!@YY9֭�8;=xCٵ9G9Y׻I'ή'Ϸvχ",.3 x~g]<< ^|z-9.9 �پk $ GHK7A9zXsݜB 9+.,G0Lba#pv5}H34ov P6ֱl b9즇={xy_l?s"A�0G\ o ކDGۜ#49s1 <y~{k.ٙ%5Qmv x! :#?5x> 1~݇vWbsd<?H$`aDf.Z gBOфhZEY&!DHZ+Ii$,,ϳ<֯ B@Do(�EQ$HY׸b*� �tQb5 AiJ 5hOԵEqSO7B)<�Ugк^VDzUqJDRes%r39֨H tI3T0(�Rk&!@$D HF@Qm F@^ܫIkŴJk-tJç�TJ ܛV\z-")] @-46t�dA&j4*Zh@@H*JM�YAXAli $!!iP@&"DnbUeR-HRM@$ %ĀH[M_qRz0bK$3(�)MZ,J(@p  &6Ъy4K?�#҇,�tkM~As~ +9a-q` m{S r­0c j �`Ҧ,"mw]e6g8`^%s4:[?ydQEr}icL`o&Q2`ֳ3v6!*b~-<M-6ŸȜIwo4bKXjP"Xzz]CN0ҐJ0w%6v 0,:+E'^!js`& bcFQjT3O([ usgr SqPa֊!,߉k6gǂ<[VegB"ĩٍ8XE*a4Yc<�=260tSD?9}aEPh'xv9-6WykFx9!Nn!C88-:^&B @Hks .4b.N9šv!B<p~u` pO crk[ف6:s 5eeX3.gY\gq8@Q`j s9gG%t<涐ey>pl�_c] Ϸv y6<}!l4yqv$<�<ZF+scs? yXx{<#r\t=4!b¢!'ww)h bM0! A|z`F ȭ8~$wk�IM_K$;G!\An-KqD").Q\|3;�h1w y`q|:l96<o$h0B]$H$A$1}a<nD`{>{y0"tDR ^c>by`:#8}j6W8ۜAhI9G6MwA#Du]y. Mbh$s0 M_G'kn0( Bxr=H0DjK3:6iϠTADA+*K](<ϳ,Mgl2E nH1L@HXVJT$@8@LʪJ `iUb Qh5Xu<T 9URPT*PK"EJAQ4iy4+ 5UTVTZV)M,iVqfkɥ,,SLx(du+YZ2Bg:׺(LBBTYV|T)XZU5u�RJEQD2P@Yʔd BB]s$КT 4&K:&@TP.z t^i]jzh)4V'#&I227Fjg8AY*+</Y>f,eT @B@)A$RkȕJ&;WePkRJ)U(J!IHEPj](URsƼ߷X-J5Sz:\[A:@˲,R�hjkF? DTeEe$TUm{KI+J]*/</,fM,ϲ(R�B)eW}W=B$IG�n[Ek�CM=HA$uiy dՖ!c[$ #X|L }>ja21Z ?¤ nh%v.͵ao,>eN,� Q/h<3,!<@!l9B\`]ΣS!&7 2Cf"pbₜ&B\-w#A6]{Wq@5']|N[.6J+/D;@B�v0" qO6 ̈mEF/v0 nCq߉-+1\44!Nsy!BSAg<`!&+9LC L7O xU(r>3.HŌ욫�! p+HB!!؉SAHxDP:-t!а<m1`Y\gqqz lG.Lr((=̚ gq �$\!jAoǸׄ6>! 3v0XQ |!~_N!~uv X߹ Pd<U $C>J` !)� 8@,oCk"$ݘ]`ɜAgHz r1@ L4") Fu8f59: x1SD=| 8`{:G'~ZL_ $X 0}^$hY\s 7̳GuP@Mg!H4M_G$h?zHB8; I:x>"$?<˝!=Fyo;" Rstu<?5As$u sT7!}p9Ȝvcȃ$v#X ��hDDեR"ʲ4RKEeU4K �H| HC@(HZQtH)R5 U "/(" DE"V7O`w29<ZH@H}YL$T�Hi*H$gsH HH&i"YVe*gZe0V k[7ü(w;:)LVO][__2;7̋2$I"hU*Қ ȅ@ !-$ P:+BHI" LEh B�su/ԥ",<2"L`T5 (ZaYE*(K ҅Tp$0ԄaA@RBD&)"D ШTJ -D"6TYYºj �dZBLS 82Bh( {5sPъ<sncRw+%K)Yx -mɈe*oр ]B$'"RdQU7M$MD$Iu>4JU6!^<~n(Aguv{MAyՕW�D�Яub9fn8,]wϭ"ι޹XW1D__A&9ˀIj8͹|# "Av19?m xB16wl<hs䎯 # u TV7Dߛ ,Kj6muነvH&>` "ĉLf_'B'+ ݈3 rC4št)kAM`/̳1Dv`3ʋ>Z <t|Bw:oF!{I < DH{뭫;-c݁xn(2 zl78OmGP`ڭ:�ܐ7ϢB,k1 jwvqLE7x~/?)MM3,<qe6g?!>/'M޹1}B6u +4 xtRDC?;Иe [^O丳ZvqkE4^e}m*5g@(w`BB=u1{f7抰0zyl^FHct> `<1ަ/Q;"v𵲸l\^-tlj>`MNa3E"h�Iz[\BO[Nq<&'[k\DP3&YZbx~'a5}Ҥ�JLiMDHZRDZi-A|HU J MT*(%)YRRrF�$@Rk6VVvᙵn-o^2$ j5*7Fmԥ"RPeVse2TQHIY@*25Lh8@2P*|F0Kj'O?\JB\N<؛)PK'vpi(z<*d@@!wj 5 HB"&B@ҤJ54+U 8HJ"A~ �HTM2Y!H)t!5%Ο<HܹWYyi 9JE4DI\MJ5S�4MH@HIվdE,i奀qYȁD@.KA Hb=(�j"J!Q`&@jHIf.s"j`K H<=x͍-1>W'{;lz4<`k4i�Mz1�Vu=�+36MȉZUALTW!!Im)d>Ԕzir]sR.,<?1b\]֜/}jYY5, .ؼm{؅웰CW{Y0+kG߽Lz.2{'}vIF/h%{ Hw=Gz1f?{T;lRTuЋzxNU!o&Jwj65P3.85Ab?ztԼzwc$pՌ[U<dk(oqE,*A Ctwt&&هoi^ât߉EH/kňܻ[NGrq=w^qٌ-<CDwO7/"pMǂxk9-nGȖ B n~GZÎiSbxO9#=~KDl,"@g WOǰRᣞ־{1{^O:[_4y(׼!rsMQ>*WqXGg"/z5ԞsKes/9GjA;"[; jVƅBDh<,Vj iҤVZV@rUf3tkP� ESM v�,] ՖL pe5YZ VdEi,4BF]"J,(),/xltTd27)u%ILeշZ7慯 07'D(5PYfy F&W7[ $JH!DK9~*3*F2M BfFkO<m7Τ B:ݥP$9KݼI8XN4B"DZYY*mMTIJc R BhETN" ae8T)g&Z@ !t}u"4)4Sg^Li*4iAHD@Q0Y(|OS<X^o. i*�,t6SrgJ,t()@" �$JD E DKsH)fZZiZi� 6^oMP<~i{ptPDiRU7iMQA�5 �Y md6D!کcG[5VZJ!SP[#k-�"Brhq]zf :G~l yna/�4R9>!?=ttl_m*^mO4llIlSOcpB:]"smV"/�E^:ez ]"Du^W3CkMiCh(n%rC ?O|NZ[!^K65Xtg˼wÝ6 fl `e E`EF08dž5}եqSC?k$8#;8ɖ{G1ol0orfY3qc0};EҲǼ$3P]Uܱ|0oh=A+6u9 %IsqpYbRu 5{/�E8[k`>j!q =oqIo/0x7yހw1{^"+!__ٸjOwog`8T 7[Ĉyr0<벉# `A;#yoC[Ax4"L_AՏ6q-/rOGLz4}�}�-ZnLŝylmphJS"T,E?$9r>ʏU<9"&BMM#m zϩ !WFR1 6m鸁9;O7OH0\!0G&E h~31)lB�؁ƭf'@#T'*ZJ)U)ҪP(J5 "Q)2kW ]RS1_Z_>sa͍3K:)gzRgDHTAB $;*޹T 5 h(H,o5+LLJk(X"hy>˲YQf6ά>zgVdRd"LG{;p<MABJ)PA2óOnza�� 5儲Eg.l~brF�=_\-VFi"l6.r%0 + fOiM7O,}`0Mho;۾7MFO$NvlTDF@I�eǀ(HVHRHCA,qg`k[gέ>uj}iu E@(rNك;;ۓÃirA, P�v#M_()Z:$ܛ>g( TkJwHL %BV[@)0u3RQ^H1B)jl����WaU6a.7^ͬ5P.(˲R�DB �Vo~ȩnغ\Sl9v eC\Zg׵Ɏsyp\AKYΚ`SM{Sw, ty^Uo~>z U׼(xt0h;}8d("gkң�9~c؝D`]'_`F3v<x!lfMlnlYDPA-]j[D6pVhIWG>�9Wo( j=VhB丆9n{.;(RO:Xl +~v90Tp!L:jgLzq(<Dvz;lC./hMgA67)B )Lr$IOg&"e:iZnk;;O'mK]"w^uv!7ݛI_Ds_w戳B y~sI9/r%aB:�SikI-uE1aT,0(e4Vpp B\6Ā`F IqGH0jgi"2q #A<G$a.*cl0}~ `;SzIh7 |gq,߂9:h ePM ڨꡝcO.rsd/7"Nq42M_DNTĜcWI=yrE@G�<EU0Yr*3IuTQ\*B �(ja<Q.H锖V=z#y@J+9@Q(t:ζ 4\ e*)LR f w� ($ eGY6!(֓o=ܙOC$�]t@ZG^ yk{6R +@p6O80[{7{;#,W7W>�5ލ׏vNx♋VONPgW^۾{`:UB)I*Qa֠JQmD.յх'b]}-SE@RA+I P�RCBJ5 @�*'=sꚲ\aL r}cӥ5qڥ'=R"b}NΕ˗vvwz~ƺi\jw20],Uъ߻v| |eMwg?#)+4=NZp24e"@)DI.GXx�� Y Hi$V?Qf"$5Unב5/I T@,QR$IQ�J)z'łٮdxG'%AշU6IZ:,p o 3 0h~&o.6v�; enQ^u=2q*3d~Vn`YYE3?nqG028 N\MU9`C0r6C#aB! HTGߊ�f\ sXwK@G84D#e!s;խ r l uߵ@"4D2Y3o&E` jy"P�rL/d\ML֣;>YByg6mƌcLW`7BBGyh 7}1n7BqP!Ԇ $}L3 bC3e>B݈:裢a<�C]nAbFlVȎ8 Ժ nBN6DHS65B:!( $%ܤoF3#{ysӡȺI t8E-iۑdO6�Cd3}$%7}l*5BBg"aS&B g " jsv v! sp;[W{bһ7;3DB!(BPA$`#b`緇QqF6Z Q[(J YG8秿-! p4Yyi!<gC8Gg1dPi96"AGaTslQٴ3H*fā<g Ɯ#)`IuE6پh8f$hF+"Yܜ"sL#slbm9= GeTZs1ؒ+8B"O^$@̔9G Wt!owM:c+h: Mtg?SHr+hMZ<9rz 3|To566 lf@eៅE(<LӄPH)d"�ʯD ο%٧M�$S]VB� �`dFB�(DHJ%Te+2�cr-2e3fjGbo _xX^9)QPj�49B%RS!ݼ{ B `0�̓7^u.H`D+(,sڿoޛ9o,n.F 8qsww?ZPtB5iH@J+5),htFbBx?�S5"X�8"5v$�ЄhP,.LkE$5pSӐV,?3N_z'6 +H9!$"hSt7޻u4OJ%%B >XW 3ےT-lV KKR 'B*M҃� JMZ+gxELX2 %3fPd5벱II2Y[0 Hi@ iU1TmRWrIc)]'#&�6Lx$\[0F#5}e]jRZ쨔+/6?#:"c'@cMMrPksVFgbj([|#)q%a7;i ! 9c }wrjcrlxmg!ĉNvT0}D<.m"$2\-*j[$!v :˜=[F !&{ͩ&fԋOlu(o;r~r ޺jCYSym1;ƶѷ:}Ζ;s,đE.lIQ[ gq `[6Zޣ"zorOg;Plx1&�ux"Mn8;)-F/QT>K+?h9f8 X!xRۭͤ>Mhsi^ls7>.~ g[Dd`<ZnAmo|ǖcnAҦ ha )J?ׇ;hzEM_[v03v~"̉};G{z<?2ո){4<^#Cs`?ĝcPM0sl~'ȣy1)ж-s<;0s<gzA(/Dʿ8y+D�1M_qgFbȚRE^YFEA I�T`zب9MH..oB44HW7䒄q>ޝGZޗwE� @RTJ@#AJD@ !�Fҩ7ZrȲTI&ږڳ9} M]`l\idphe}0XO&R y>-\]"D� ݝ{ww%,(!Bn-%CPDF2C!BRD B@+u *IK @DE@Ue&�@JuH P%q;qBРs5U0[ZJ<{;D t\fr:˵VKrhp. dKH1eYNT@E|o)RC)К�5$B7(4&MPDJ \@_FJSXb։Qxpo2�%B �-T  LiM#ɮ@O&sPJRT$MMRJ!uYjDٹwvtF&f9LFu Y, /+*\eqlWFqv|g, HMu:ؿ:1-FU{yqЈ jeX-'UcX{BވC_3dT2`/<oRִۮfoH܈49TrԶˏv&Mdυ M-$nh`*gyEs[d D&&E 85Yk; CYǹݘb_څ(Z8�.Ȕg)ka%;WbahJUXXY} 1! qB#:DW?C:YV_dS#N P2~K'cR6q\6فoF|*萩4cPKDq9no=§d'm鏝KcnOGZ. zk_B'11͞n6Q/~/rip~frs.qT|Ub4~csBOalpdcGDe_dl ? ނ{?E矁%3Չѯu>?uy.VF5zY0@\<97} / wP vTxz<7حXAdX8DR;HoJH<1;iJHjz?zU<#WHc%DEPKS]jNLMm5fs g ~ ݿD6/d.2.rDٖ�mogn"W,�hRJ*V82κ*\x> Dg"װu}'{le (zwN+"G ӹV,H$BRH)(AȲy!�M�$@ 5U;H CJJ)E4&ze-9N_xDeFG{WW߾;><rEjemx[?tf0\MN>*Ű(YV2%  ДE )R*/HiPY1 .h|$@띻Ar!!""!�&!HjTAe.#z::ȳL IHD A 4 4`4ZԤ�1`u$tP �Xm I53Kz♍&vWL'x|)_Y>tr`$6 f'\4QQU-� 4KH !iQd{tyi֚֓HX=+Qk�RJTçI -h%F �-�UU4R"@J('N=h8{tSZd@"zg<"s D4&�Dj^I=4P.IPJJ$ )E@ T'Qwj=؃q~7a8>so 7prQL8ɼIr/c?/asa)Kz\_ Ϧȱ`*DnYհ1ֽZ=uL\;Cw(20 Np#Wd".|hfwn=~>aXȱNbneZ<~>,)"CH.]G 燸O~"xmyW2Tv! ' +mIo76ξa7#n[ցmg.ʭgε[_7(h+6)Y9p l:EpHZN u BӡO -Fs{Xksv@�z:½=X8 ZB+}@_?<ٱx>OpZ|{|q?[P[i;a=:g0h;OG+s$9DrǮ|E>ca#iQޤmv�vr>{9KRO KPE#)O| blx:A#.<~ <?k=Uo`;džVsu<|Jϑڍ! s$ %mm3]'xs#_,nF9L߱'ĝ]9aKݹ9"RQ"HRD ZFF V] b.mR{w I(gɳ'� 1~_ڽ;$,pe%�"9HD"PbCH*+((Tr( FҞR)%} D�&u*RP@O|=`@+/o_ރI>S Ii޾ɓ/,6ʼngOi Z�tΔ.LHZ ҡHIy4MJp5(EPF)5P^RE^*H_kRΒY6g0BA*4M@l t � ȅ$$)VeY &YDMt^BTHBTH",TkϿ{` /^wN6=e"νW-\XU)̅ !d2,1( J$(A<3RJ:&vzxm4:؛MZiBWGDTE^]!(&|< (@C02W2%aEjer"BDz8iED0HJQQ:IDJ�sTZiѹ' / RT " tHe1ˊl8I"0QB$I"@(�FQt5HDDaPT�M++H@2R+T?10EH�nĹ7UkIՖ֎o^DCBX;=L5 ksX:RGpjßl/n4up'XnqSo~'r0SW7|Ԯ+"ڶ*6뇐P|Vi=@y0ٌ@HDp:E EJ`|x <S1Dy@m;Zn7QrjD]-gkڄ1xշ 9<䍨v" EA; 5'f ka3;sb m\v!=DVvY7)Bnw5:b7qjEF!H8;s>BȻw!^Ф& 4̜]/BzyC_pP|6qvvLG\]HGKrhE蠸s}|ʤ,(NẌ^\b7oodMݘCj[h2cڟO$9"1¢N›h $6?/z@H0QU#:BP+BZV@ h[$5_䇋}è\A[rOOtFR$Ϥ/ 6Q { B yH/㙾x]7}.]ЦoM0+D|VI5!ꘑ`Gi!O2v@M#}D!/f<7{r$"7PXhڍ`6=0/SiFHqfCHks6"BXٛwFDJD @�*Jb1!P@$&rP Ml6UPA.C2)��V3=Hg*/4$4 D bi@C�QDB4ULp*eG B)ؿo]>}`^E*DȁTl]HKg,n<g/.>f<Yge 2ј)ʋ2'=� "I% D" HSHO@H*Ihԃdb*r]dEh%VCZ*%rIL{ZJ$Ɋ�PTEBHAZQUQ^fZHY BRVFTH5W+ w�j@"̋|R'ϯ Jؽ߸nͨXK0MB+lzX7`G&vVB p,QJP4RD+R:/ А$1rw|t4IC eGZ+�ABb4+HW$B %!ey2\@u^-фP )AjI"@ MDLTY^�a p.,DP, Ub"кP:'Jr�I)!Te>(Qjb0G-z �yqyQBD&R�BD AY'e E.eG`Ϡn{$-Zd]XIqD+&I.M�٢z}.8N@ 3HV 0FR(Xfh*zbebBְ n8ZѵT/pI b(N%Iqn5b]\ުL+3D~~f0^B 6!nBx }+V?"6AL!&XABlAFHe? _yqUi !谴 .\iF3 q{q(6熣" AbD&^B@&EqQCы\w!n;B>B\L'8HXI 8 @i'BpfBSAؘ?D6bcu_v4fs$g|8wvm}Tpmv(jH^ E؞M!�! <:GfF"NDH) $?0:T+yˋGD)BZСg>FCC 䞧itNXE~H|z$ ��*΍޽Q٠>tS8`;:D<ǜ#p 1 0zlH8e|-,`x�$3y>DB-6ggx~$<ʝf6愙;OMڞS>Pq;D $;6X 8Qgq>jG>J` !fpH#sv!*z#GpM`Bk ZؤO$5O Ƚ#ArCHsl :c+P;[K3]@9qA$p0jst o_fCTDVG >l�:Ǩt9sަϋ]7Lg-)v.I)V5? q t<Zbyi v&rg9bAOQ>l:ǎH-:G;ocPfƅ1p#tn]xŜ'kNs2HBɏ9Ȝ ؍!HۍB!BbK}l 6B Ph!@ J%DF[ J$�)P# DI(@+Qj)IggYV`.&K]LX:0P`( EYer( BH@g� t,_xr}e+~y+9je0!hPvdٝV2HO>6JS;<Re:Tr2ӊd��EJF. $J2׊$ rC)TdF3HI`4!q:)t!HHT)@]ӣK$d,)K(JĀFR @BTfy)Z DJ1Ӫ\jH�PjO}6&P,6N]\<5 ܺ{wnL04IdPDi,]-dLydB J�H),.Q ЀRri %R R]bN UQB` L$@ԊfYy)- W֒dgL@暊A$ @/KjL<jH4"�I2r @ (BM .4d(E2T($CXZ DZ鬄8 ӡRhPyYʜ FBk-@"&� @.�6C^RR$QIH)͈(@hI"v2iiZ ?OhHvE5F0Kmd�11KXc0"sw.pXrz/ xF?<RnQR{ j;e#{@/0ckd͠syӦ+f/e QTtM0#iCxꐅ9{RPC^9g/ 2*hYE\q\/ttkᅮWrϞ\sAnDbqvޖ=|Q" Ϛ/=L_ԠA͙DsM_˺o~)isGXXyZH,xwŰAHZ.[o]Ad.h6zځJ1ʓgFkM%2Rce�#6\<ќͱf0aD~7/|h[tڲ6'WVw&GeQݓk*#!5ÊB<%9}8;ى;D6_ Nq:@lF,h2<v npa(B<BZY\d<:wk"ax 6AW]10n ]|@?l 6h(?[t3bCA�[@ި6Q1"cw]`̆, L)[Gf ~[|Zz?ݜH0^hT� C"J46vA{H0 "AGDn"(Rwu8YWo\#�mCJBT/gESsB�D H(5 ЀJ#�(�1ĕdp1=hq3)Y!GDD|LGy:V7VG+JO&,j6J=+$OF5&pM:|jr:ή^u@z)BwQ`�IUdOV/ooNV&Oh%YYM $C{|5dͦhVh D$plYrPhf\ 4XAV* \ͦH"]Սte-]ZNS!gL"DI*VF˔'j:P@`ZйYBK`yP0;,0 +kRCiԐЀ꓅' �) "P2yǖV6dY7KW@R !D@ư N2!RD!T>HT8l:+RIYH 6^O"5p GINTֺ,K pT8=<urTjoO.)RrJ !Uh]RAA.7FP&Ͳ]ut0ɳBkM%D  ,  MZnȵu!t NNYK'2iHL+h0EEV`Z WXN) �HzY� (2IT$ Z|2Vҋ@z|߻t>Zuj$I<ə. l! ήfA_.p� WU`? y:+kAgx� _Va7E՟cIjzjU$Lyb\7Ƭ@ֈs2bh2|lEy_᧴8BM?>RJ`@; E!!ȁ<k_fR#FOYؤr2C>bY4@U[nqq``m6X:̘2glZvyBԔlބ5>B}wC&g|8 JqlXLr-4}LE g@qaMןqڜ"yJrhIıx5.jq(ic>B7C: co]\؀X;!B9BgPXVK椟#rbL#.1!P@5D`F C# C=?u٘O tv@OF.Nz=> |h;BvyØsl^uhyG k<hNe8BX E6i c1-<:MtnY~a022T'#M97}s4 wǁ<H"oY"5c[>>ڦOr ! ~KX@6}eb `百>`h"w> Mo 4LK=rG\t $F?Z�C[|g"Y-iF! 4Ea`0$yhs <Ew$虢<>S$z:F,B" TA'.""J@UH�R)lZysKO,_8u&$9L_uxrOfHrnɋN;5X�$8-o8y[{wxj5@DD@լ7@' N0+n]?sswrH ևi -I D!@ $*o9y~J.˰*O8SVחx*X9{u`a:['V7E:�LS֞{Sxt;vVή/S޻7GxRr><uĹ Μ:5\[Ñ}8ء{'o}kh4~|'WenNٴ&복_:q5M`Axg{W3'd8/vZ�)DuR  P(3JbysٍT avT޹$,/6`$eV:HiZZK5 UJHucO,mN.|8˧%81xi뉧Njko^LϬ?ک3KZn];ߛx$Ɖ'>ʰ,a&m_I-HCҢ,"nco=~qד?{dKb{D5̗o^4&� p8pHLe6Ƥ1iD Ii �轻^U]bq?/W]M0ʢeFs~gqLJDf"g))dbR)Dl}kݫ0@k*</>LF'n[/Q`6ٓLJ={2&hٔ1 �0IH^Z~2,[F$a,'a{)':VfA9G]⃖]v.Eh]]?S]v.Eh]}Җ?ЉnDV&}B9R � B�E}e}}0d1k_>1t|rJl_zmwJ"�+`RtͧO%?"($D3މ:~Yzd2?e"ZO DP�0#D� ;''x\`nWp2 "��XzQ 6(nQ Wֆ|(�=vvwgNV! qj2"Lfl~x]W􅈐s@~:[(8x7Q<[\y<$Fly8̶_\n/cƷF}>NfY+"G ( @�$P� Bp�:=3bFA? zQBe)(PIIIY& :4cu+oG;70D�[YވnRxxx?= Y4AJOI,`tWvns%t@  ~fiwRe*Mx.3xm}7^X[!0V;;Wz}w'g=D@D?[KWV6HA,@JI<[_zim^F@(Xی/mmvͻNNOU0@! ׼rHJ烥Y1Ƅa$)/(T"˟p^VT.< `窀[#>>so- ٛ^h賱i7E< V-d]d_zjcxݶ+!+$%q|'se O4W~E#\ŷ#ݜxfAKPT.{D07xEJPs8u<i]F|@^h MuR'rl-c~f~ֵQOsxopg.yUU_BP=롶RDy5KPv_&n[I{AHs]LJrz8.6v0Mk!Q)ʤKw8kjy]tv0\ﳌߟx,=�Ȍ:]@eMkh!,?C\kYAZ4s6.u> r4쵳n Km"޿7^F7:N\!X0u;a:B겺'E"I^k [r1\CM6<|n'u~- AdM?7:\ . B \:DcuFT7XaۜTuO4ޫ|NnTeFWyA=q<PG,-UR} y~M%<A Qq~nwԈ [pX{Q}5�g5oZS7!`/P7֑ { 'XnsԶ,ayZ`ic܊ ql 5^s}ŪZXRA7E{[1_"KR�dvlNg,db+Ѱw4=&][۷!ezz2Y~މBlK,4Vęb@rBPPlbDYp$3s.#B&#81I(<ؙ)*%�rr0d 9BoG$!&L̲8yo L*JI89KմFzyÕ A NSԠEX<UL8TA7/wn<^q,OOc$a+CP@:*$e:WiYD@�P/'T0�E$Ur�@Ju6gH<RI fmu+AbHTfRRvD'O$a"[iQ##R\@F} $DY"c&fa]LNACWo~iAY q3ư7VI�(PY&t)vwPg3ݵ<Mx>&YTJ\2d' H)$|f,CnY18Iuvㅵ_ݼq7\,8N3u,܎D$ 8i"!� XQ<[4)e8O�+˿Л1c?uH:�`P~TV |�cNchXa= T6A[8ԥ0)5~.Ͻ)ZG@kt'*^ϡpW1/ s0PxSweGWl1Xze0^p'Nӎon<*F1`#T D?!:g"` ֹ=ʿ*h Ap0!56bƆu!&[Ո׊.C!U+sUT$�Mhm?WΛ:,gFMRlR#zm`׎*]G9M~ʹ2wE5$nW)1"v!GyBMB=�!QUOݰuB*b 3U_˯_t9g|*Ow'ޙ^g@!mJҷ:ƻ^%6@#)@FBҲVX;3&Qk_`/ [x#!<cMc:v2+\Pqӡhh;ܡC`R /9g%F[d"lM^DzTAK%7on%U#EbP:BAM!F+_Rg>6Hmw=QTGsZ{<8Ʈ'yC'*OI7Q~z VJ]`kOʯj',IrT#uYC@шR1:~eFO4dknܨFOٍj1-c3]j4U}d[S K{Ajq'hGU}3XZD Bq5uO4pM<ߚrNy> a8n-gxŒG8;5g} F؋6 |Ʊ!V�~x<A3k|űz Uf"fX\P8q3ҫ tRe äH5oFj4l;!փB>VR:< �(/d㻇Q V V`c'z<朇+7.Y >8=+ۗolGp lN))T TR1,)�%0b2P 1 P1P(H)DB&"C 8@"ʲt2꧳ @&rvғ}y$9:Sx@O:/LٔG�Tq, ܹr΍W6Ldovt2>Q^sDAQeY:Q+׆7_\߽Lɻ`R!FD*U2!2�c1 A I1D P8R r!ciJ�nz`R7pI%TBD*ad*UL  SJ%KbTFR ːeL*He4)H0޼qڠۃdg{Oƣbk}LD: t6.w飓wz%|ccڵK;WUqLMFp0ReJJ8G& ӳ(D+L,Mh/{t|6= :rWoBɃApRll xqG'YbGUh$*pj.󸤔ʕR*WbJI"Ȁq3CƊG�@մR2- $]a *z\̓'[>~ A$�QUL@:+_.<B2Zs[m6*uATΓ9*r)5;&u5Tj+<zs:l9T>r",qb),1oqf*lVi*{ַؖ^wEpZfh YjTzu笇%U"]nB~G1rXT-J5DpynzoJ%@o_5!2ݯ~NvTlo"iڨ%K!g {|.r΀ֱj4vId#\6oy!R",eh-Ԉkk*0bC3KW b\ؠ�2Z:2h|=\9cUd ݆#d.6>І>S�ͪOd*xBۍ0]mK,4lWd|3&$[#یVOjF=RFó39s+Ӯr?F$A`ؖll,tXUu>> k < .{a'h#8. 6|RfygU.(в`) ^܊jV>*Vx",b!~`X4 -̳?V0gٯ`x~ Ѩ$rkR}ZoD.{ ^\ˈ\|jLѰD-`�6Ar-DHI5;?Zt+/֫>W7`Ld^sgeZ xoyp8ZY[yFK/l>lu7=V@y )H*BT)�pvB HDqBg0#I*!%%M( �q1=Kן6 6Wa6=ݣd,8t3sBy`ͯ?x8Av(Rg$!4N`8uw6/e_~z uu7s)#Ϲf0聒Jsjt`r/A6w_|끜;/rkh�$)( &:({ 9@PuP)Tb@J 3MCcTq K]b H!‡)SO3F J35L,cd+9Ʋ,U$Tfi+OX@E~֥* ?R_w>N۽?zՏ\Za�@H)) j{s:%o~ ͍_v/e R0\0 21g$iuDg[ٿwwl>֋7Dk[$j[_{[GsdK;/q&lk> 8H%��K S(SH UkW)RӠ{),? Zp΅ !�`EzWݞ})OW4;|+aPI+T|݈#ȑTwPYq3Zfy58 z{kdg(^15RxQ^ZVWdž,w&<Rj{Gd?PN.{t" TuE}5n_hg*; 5AnNZ]1_m]Ii!mpJ3nG*Ep/j\o|BGGX� G "e%+xWR@9ڠBZW _үʴohTWV6/uç~˿X|+&lYl} lgAJFlTJJ1笄b-3l�mgiToE?׮\T.J__9$K7hUȋ6UhϺztikwݒAC{8p ՏotˆOLI|"GDj3U%,b0T_3@Ȃ+i*,3յJ0OQ-Z[ `0 +\>q3g<Ʈ҈o욌e4B|,T}�v R4wX[TnEL9Rey4mgP ,|0D=ڄbMKA&Bи"!Ƣ_.ѩXޥPzL>cɏ"&4zq?J]}e۵cWņc -K@c\>Uq. fKGc:EHlGhF\w 7\ r+@D0%B 8V8pƔC͓jӱ6f:q8:/yƊ\l8 .-h EWa k1z^S}f[g]kӖ#VZXk!f,?<8<߇ '*6خz>M\qO(^T6s/y?(4J`A(rU2e{?^z$$ @"kb�@^e NCF۫W@$�@ց@�Dg!FCgJJ1AB@BE�(�2$!>:=^76)Hfݻ{{fVHAϦ|*e&xGO{ y:8(V: ϒo~;o=N R<Ihui2')BB #@Ÿ['fLU||f(_ 1 rR*bBB� X$�d$E�<`+n/ I5aLsJcI΁e�x^A$Lq>d9΂0sJ0`ȸ?1O#s&8㈬-"cc/vz�$I=~ro 0Kfguk=_+dQGWp �A_)@� + Β((C`\q2>MeJ ɽӻo>Q^Y,ӓ_}_;z If"p|z(euҭ˝t{|e%t0@(`׽(@Cd&kW)c( ),gqL+Nmv&pOpT&(۳v.Ehߟmm+;Wzo\=xëOM;^_F\O!«_߽/Bv_Zn++/>7;xўs[[eϿll[^[ٺ{}.Eh]v.Em>4d b^)~& \!ʯ;U$|(I�khKBę( LGP.W* RR$ ! "ycA� z\XI4b0l c�t`%;!QF1g"B,L]X W6OFI3 HD2!!'rE)))Enmu8b<ىg#E9 *Ĵ ) !!H @YYLƔ"RRR(Q8"YN'cȒ.@ OfDLȔT%,yIfĨ睡`�Ã'GO]L&'r,���IDAT` H 1!B.cqH(c(P"CD@p ȔLO.W0 ~h<1=*|0IY*>^:sg2M3UHF  db9B�(ɉ�!D#z'p4{h,v{ZG!޺)@%iD˙�@&X2D�9C: K%C`Rf$#gIH UY²#H)C1t78=ݿwpz6U*({:[|5vpwzTA P@`yYJ*8�@i)LL_ "|w"B~&.4?*]kE0E.:Ox>`߲(*TSo*w8I�̭`VeԲڨnhEsEyf]Υqv\#Aoͬ^}侦]6^\钹Žj;|$7#[EPF"5FMEg!"% R[0qW[ͭ s,i*{R͓'˚e!yot5] D￯Xuen-UoЀ~T vckMk f TB,;V4N+ibb[[^:6[+9˚z@*3qbJ!zÇ] ]-߽ifv͸^gkkF7 "TTk0Epvzbt)w4J1϶3wZ,x~Wo7[W/l_M@C?+ Hu MIS0Mcw>hb#\t5#:lm3[0_ a+BJ\?BEs̪]͖Ck@Alor^�HQFrNJMtHH!㠂곪΁nm~2ͯ֯_7GDT,b8ƮR3ZDLAwu8ץZh3 ds{V3`P_ϯRD=nϯ(Y6i)x~c3(=ƒmܭ+s.TBBGH9!hGd< -k!C! ?B@cxX @&U#%A.F Z mmTİ�3\`>m+b"8BySu7oeK˓xqD0Cبe=[q=AK`=A*-r+fPRcIA곌Uvf g;-Qh_|'e>ZEت'(BVk �ɴGD2p!1S3E8›B(E ZthL:k]Gb 0>+reYaTA$k7H&Œh#9l�py:9"B DD1Xy8H|s.�Y |@`kYgD*�0ay �ݫwnp͍ML%,MS.8 *b "FĉSʦx43" 7R6\%1Ɍ!B1*e4õF9>L擄8 A$k!+0|l20%YFYFJd�) Ā@q̦l:c" >D+QY<R*@r 1((AG�@4>c XSi8Ir1l� KJ(D 3det|t:=Ke Aw 7w)er0)dw3ʟ~|+㓣qfb\E �RI��+&�@H�q@kkg.DN&Iʡ7 ;${Gӳt*?71P䂉S8Õ7/_5XlzNFj>"c�)E�2CP!..RĀ�Ap|E^ :nC. Ͳlt2 KZDi*GI,%t{ E$aJdP(�(5{Rȹ`R2I$I8I$MR)\3D(qDV[̫CKA֜Oys,cL8ṱ@dLԑgX2,^;liԒp'ϕ<Lg4 jY@O9*r?Gi)�Չ(eD~Z}]{?4**9"~kbo c'!.{D5ԥ2~=ɇ>X7}Ik";l8C"q=!ɩ#�[0NU1f`͚_Oƃ rεw_q=I_䂼rAD6KpeNJ5#3b-g rˆ.r\ ,=-ھܸM~t˿TY goqO>a/=~�]5%B�!~E<4�skkS|ޏb doۻԘ<ʚuȯRV b]G8!E.7BFF@?4\Qw?}` ZB6B!Сq# U&o\"+B:xa ! 7-D䧪rp993G!_'mj`89ʌn#xXm,gG06w] 0Uġ@�~ ,`YfGl�@.B\ă p@]c *b><#Q.Bys 9'7yF'eyUF!<>Ԅ W [dCT#fzRY1v-#̑6"`>s�TzH,o3(3E0 WƱn-4z86IibPEN~X:& cݍZh+ ߴ5gZx6 y `Ti>mP`SgwlGK>X\ /]Bkm^M$ho2s<Ap n[x~Mu[ ¡3&Gրfo>GwLA{`]�A9N*jƱ aRo8 9}"{;Ʈ $N`.<GJA$cCBȏ1Ȁ/esq�0HȌ@J�C�� Ec2H1�#!#,` d1bHBH,>!ebr>}82RDL)yPdDr&xN`E] Nx>L!#Q16Oi:r&:YoElW7zۗt<#g(`/�d\$P!�reDD8Z[%b� P"Y<H2S"))sL�2d @�$G   L% R$! `T @"�R)$�@Sr% PILgrt:f+_\z|8OǓ} C"8dzx 7hu} 3)KIJ|MI$Y0daD AfV GQB"J Pd2B1 `scQr|8>u$<I'N;9Ʉ("0 !J `DH  &xAr+E"$j.I�b aDQ c,ZZ2\HI�R)b,#cLH"Ei#TM;M_e#O1 BڦWfq-Sf3 ;8n|kEYDaUE6omG{L>7 r9pU P|9Dʸi`sE$׽}<_a)T?׺\_'5=iZ`5mBy\/(JWVlӌY:u0١C=5hF* i o^ - z`+ov^xu˿d] ,WWYk շLtY:˝qz}z7weTY#j@Ų F_3a!yϣۯG>$ٟ:q^KP,� ^tVx,르APy[ ޳^civg 4#zK%Adc`{\kgM\]>xo|DEUnm-6k au jp<)?u+xF7Y/Wd;X~NO"}lF+[H2ns9TdKtS Ιj#Ρ=0;<7fQ+LѯԿ(NF$:D0]' ^"Beikg9M<ߺ~O=Ak2"nWY s rXMrA$htA'Lj%y@[fQڈn8.3c9Dn3wՕ jI8CB",�DT8� u+ƕaQ/`yX� 2BB,@HL)|DfSyw�DZ["㧓,S @Cb bʈ 4}tt km>|5K8)!(1̒yFq. .\�`{O�f!0`! H)d(�.g#Y#1 "IRB SHxx?c]H<>`@D$%(^bQ|ɜ@t^;gd>!EEs.HtèqA"!QI $T1H Rb @ !�CJ$œV_B7&sI&8�S*O$Ny4^u&~P.#*Va !@$ ,2b cDJQH^EP<(F ;̂$,d'yY�!)N*���Nx/MT 67&#<ϻB YRD(U*ͤ⌡RH�B(V+�er>f3A!i:;=eLu ND3 I|>9q W �UzNy0/\)@P)!x0 C2 ϫ[I"ȷA�XhߓfiET-ġiA RW|eՖ_VmEʂp̪^ �Э!жWyE#2mnd6%S0bCNy5(ۍEg^SP'O伨*W6~),)Х 5lX)a=:|X2bd5:/aEzX Hv_|ƫE!.�!E'�/CƵED{3'YAP;EMɪg l&ޥN�bG2*@/LH[%Bͯ>kcZTzNY�n^괋5 2j`(UAɏJQA f =ӆUyDg<޶wڷtĎ]džyB`e@B kqPl>m—F mEDV7“7M4G !q48D^o%o# `V"t1B$B�mmPCCӡr4'N *7�xro=v:T^2Xy-E\kx؟`JZCa}<fxPkcVi2q@ .j|DwZ. l7D]fD>ElϷيq![F5#G@'r46vMq"M1YÆc/) rDZ>TWT_aDU_8a" HVV#5x5YlP}~Hul=b?*<%h5(!O�\Wv6 J.Q!Qttx"H]koT}>Ot`e<&շ}جUzO 5Oj%bBЧ\�;3d"DcCB=Bl"�!~g5o0m`Bh'hGR{g,'$h)ZC}`S�@)gQ",Si ;眓%@UjoB�N,P�YFJe@#2T,'A 0>?<g<0nW" ""C� @ ;)&ݷ+L pxM.ޓ4NlF"v;[^o\=.g'GgY,g_K@@P$ 8G@SD )` �$c9�Hbdg3Z vx|~6le0\]]l6Mld PT*t:P�6[i|6Lp[WַAQ&ID,0QcĀqB%8,V0՛ӧV7Õ` RG,>#RMO{lYk7_^_ٌdCxt|r P$Yյp5ba<Y`-@J%,s.U*YT쐈0챝+OώO'ٜcGti{wh�A)RJ& $�03F'DuևW׶t>r$R�R"R� +, HfH%I6ŧG4Xln vnLN49SjՍ+;8=l>K"Ay"Lm@Ϟ-B<qKDJRJ)Q@w�ͧR2-:O<ߎ գc�c˥} �Źv.EhRŋ* ׂ?rC˯Ӈ'qe>;?; zl⁻Z7$t/Eh]v.Eh|HQeA*$DP.A@dq #j7LJ2΀ @4=;;>N' qm6LD]~H1(p$DLrĦ~v؍hafWDBmuv6N4N7Z[\vP1o<`8.̓^�<oϔJ%iR"#!qTrvvv?^vLdn]^ry'OѱLs@@*Mh%:k^gI8Kn'ܽ<"$ #LA@ΑgB@!<H�Egh/~θ׋wawz^?O&#e*Icdr^]vkk9zX2 s͉`7KWǧ֥pA2\f)1X<`ȥϦ'<FA'l(m o~˺)1Mp2VGr|5vvv6 Bvƕ7֑@vd:'$H)1V|76��*d SLP!%tdvJg082L7w^عqcg8$0{2�"/0U$X ey^! Y%RHPtR,a!`W�}" p,猫yؚ{ć.5k!DY~QF(>5ʬs{lh_&X?դv#{Hk{0GÁS sQŷNFj@H{s&ZJr#U]*AŪw<x rR+7 7,,ȯV²xӋC\f~= :hQ\9>!ȍg!Xc($MFYYKK JIOg;Wz-b<;(0Qfkmk;iX!7?buXMy0GV[O|g;Lͯ~폏~Wmwxw˨>L*+frggJrcǹ0wkecՌ7Xd) z,ڏ2|2biFG zrE 5�s8ĵtTو Fme2Y^Tcq~cg`UZR𖲕sӫݨ crzf-&M"{5e)eDv])U2WBLYn]u.>l˕-&@'[~7jI0BȮ^l!r]fR"$1EΩv{-c?Zځjm"ɋݨ:tyng\#3L;T,mCi)"CMq=A�Gdؗ-Z\8Fx>W!zU-qxYϪjU};g5T,O5`!"7Q-]Pn=LZe�C74x,4v˪>ȭR{�ߢA&5n`tR9ϭ8q$gy �3I"EDD ` LLҎ�#$�xA|6>9xzU!&?9^r}g36~N�2I )  `SAMg'G<:ߍ6owݵ`u'$I:\܌ lN|ޛ0`R)#t@�̓|1�!1� 84Kf$eqF� 0 Epr|zƮ u~5HqƍK6@<?O�YN(gdom+b bh=߉._Zug,�N 8&28 "CN)ˈ2xIH\ONsu:捠3ĭ+ƎptqJͭa0�0;U788؛f1,'c59VX7_ W.o HA2V8)p 5}!:@$Kp% ŭۻFh0Yu{ҕ~"ca2O7;!^,^[Yq /\*Iγ,ɓЈGC^9Ht\ " !x4{h~jV66NNNO$v/_~:C8ƏL' v0[z�Z.yѸsCagJH""RYFJ,4˲,B e˳lVNEja8#H)ܛgMvJͣ{fohf0 bE1H-'=JM X͌Hq)1Ezgc^Sc3Uy�2NF}<qԕVCDr5PpRod$=B3rs֕oֹ=*Њ4""48jDf>@uPq=篁|&ikEӔ6({;Pt�Mhm?sf,>kY-P71H+`W 'CWX4I_ �ŏ|nx;3=oBՇ:B�ͯ'~kd OY.AbFP)CrU!GyBMB=` 1*hU>4p+Mlz#Ƌ?d|xĿ?xG =] Z߂a,L5Xb4BT&s~L~ _!!؂Vc#` okOo3+ !x^8t~F.h5XYah~i: t8PqtPe_z@;{Đ%ґ>mZ1֪"؁yN8$٢Cd-L%@Q\R匝5ڵc'l#5v.BBl E6x9`?$\|;Wouo~ TGsZF=5| ~hӉ*i|BIٺ*绞`-x>!\R6=A+]IJDFO,!DFg uc q^7&қ6&XքY-k~ fOٍ<A qx /lûgcWGY3D ڍ7ؖ6?\U <l`7dg{c,-쯻Y܂<qT Kfɞc{M'<a䖯Er#f+0S'h'.쵟/r7&]G7G+V8Z,/XLRmg'hvo:<!qsZz+reMTuנl@U@5ܿ fl 8gLHfRbȄ V�*PB`a:S$q`ݠ2puzAot?>{qm_eׇW3b1Ӈ`>I` 9 "!(%&| f'ɽd/e/t6ŭ *!�9`cgR87o=Y@1H)& P� p2 Dȹ"e~gs�Y"$"!1;K;D"7A0/l^ZO'�;=LI .�PCAYvp`mhvWֿ~N@t0r�q 3%G 28�ɑB@ JtXDBg3YΥW˗ouzzǷH <d3G1AJIѽtcn^ؽMItPt,wߚ{dDA* ͒8{x76+[/FAn}f<%%ag zWwV/]Je+Gc8F< \˿#ؘ 8 9blvyDo냛{q| fSzw8|tx6RD e4׺Vfg$.眈dƕR`RJPpb\0BEƋ*ƫ*G_IbU`$_ 9!ʵ*N.% co'@zo pI/YJff\sJη:DOa`TզuT8[8˵t~=6j9Xa4Q.UZ[߿/llVzֻ]CUvX8K͵ލz 7bͪE96/pm65Hw ?~ay6⟛XAm4v&F `h5s v7n6wROd@x>} s{" =h7sG/f`zp><YR4lKԆC-vR}oYze5Tz`LMh]z㸴\Yټ%–9c /-g|Dy25Hnv٪�k Q66C\badplM3HGdI^R{zeM˰iJ-ɝ|Kca|yyܠ�9eVɭX,Vu>>а Za쫄^EX i6 ֬.kNrг*|hI{T[ :NHyݳ)Vx"j"OS(<YnaҚhm牫8y>"&շ";ʻDEe? !cJTC٩J 3.q�R@Q:SXˆON`~1JF" Al z0;SƫwƇBt!+ft|=|G{G Sa$(Qb(4w$'K�Ƅ'a6>N=~|ot/U+e4}X `r3rB�!GFG&i։h8R3O2ϒ1<ygQf[{+Q@�5j�<SA|LDD0\ ,9K,yVw:*34?S1ƁR8=ljEBLiڋ.=L1̿� R$0NQvSp2Yݾ&!@�d(t OaN㹌:]\fYJ]%iufYea P0>Js淎Nd£jz& 3U' Y6=H \.tY %$NGp'Grr8 zA =y<ηOoa׷R N{o{hF2 D 9 !d�d:WdrPcψn ed|2y%W!v{<p 389Oyl>ET]P!�/U1i�|lTm*BTTO\1ƈ [(2 b�fYsܭXX6R $+k�ŏ]_/00Ɨ11"ϯ<F_aQ֟_"#ڝ7 ܪG(YW4Ypj"Trծ_`s*Bi.~@O=U٣ (D=:|!(fzj=8T=k,~ۆwZӚZ leֵE7`,gQU ˞a).,hHX�`ͨ rtJ,]L9ڠBZW`j)o߹{?x~> ͪ=|."T,(2RFlTQ!}Pýh(@Aӳd/ Օ|xߛ6 [{d>F9q�Kb]=: e'Mc$Bp,1*��/A/d(p>5[d#0v!8&R90Z8 ~5U+-/E̜EW"IЯ�}B6p m`#jM6BfvcS팖m*h\o욌e4BaH�*xk m*JyU<Ɔ+kc D>=dK?vWȆw(YVtMuԎ4-mIJq,F(.ѩXs5ٲ7dxx$D4" : GCm`+8 qj p#AtXbi/V}MKK>!YVhL'9@R]m n`m{ȱ�OD{`xh{vZZXx :q 5f=߆O'p \Zшb$A6 VzP2s3P^PB D<8ڱ<}|B,ee, b1(4yl0a6u FjQ}*)ԍ2( A$tcJN?>ZQ?ʝJ9!lr<JTipUT(9|0 ;~d舁da49x+i:=N|">K!=lN,ܾ7"iœtv=<|49S="$ 8( H 0d#$&<>{:{+;jw0gReqNqr8>z:=<2z  D?g3M$L)P ٙ:OgpM%$AȘJfS9h?Ac,'8gǃz풄|F39c1s=|eEC4tFd~?z4OEHCBvyt4L1%s  "*yxvz܇TvW7% ,J4=O'iyS<Ύ00@R<=x|[Gޝ& x7 l<I dLED7g|Ջ9M&y6v;]1=ӣ$v^2t2tvje= B.PfdaBt "K:G X(HfɃ(a:N $<9ţLNk;n_0&q4~hz|bP*ݫU*~hmX! R�TUbysA>`BS$#s9+"*G[ġѴZ.Q%[nb`-ACN8aq.Eh?vzOWV.uoŹh\ EӟNㅏ<7/>~њ7F~|}cAK{]v.Eh]vѾFV)%R *7;@Dq2Qi$ώDrb1Iq<NOi2L|D{&)i: �|$t_NGp0te-<>;D0�A c!�|BT,(T2lq ^s&r>̦h~z2�!gw9 ! H8}#IIRBK>O`6NG9 N8A<uN�s1xdz<_7VVRJ<;N$>;Θ찴sv$ߞOF$ Y )Id*Gj7㽧p5@p`pt.'Yj4@eSbĊCꉢ~"*%euD΀Q%qo@Uzd$,ə<ٟ̲B ^f(t:==Luiue\Y2̏G{OƓS ~ "Et,ߟ"( y7`$Kdz6եF0Г,IUMJe@PYݽdd0 xwtr8M׋,)HQW b'Iw l@`*ɔL|z|v*7A tFdzY~+CF֎-*kf0+um˔v�DdUHRJ) IDL@2 �Pg�KɸRg}^D546 �`>dM Q} v}dvMϹ..X:[mMAY vQ^n w*j!b91g\zkַ'jzi)dwPi\WeRaH\UG,=mW%X:NjiV!6OnQ侣 [[_ æ+Urݕ~_VZO}P: 3<F\n�r`||ym|VhDHRk#PektHce=42ˡn&ZYdS'hYv:{v84울[6ۀ;Vޜ{sȇ/+Rz`BC,6AΫ_򐷥t5vG:؜dHaj2PX,Ց*ne% bH-Iz-`7xyf/oAE_M&ix<_SoS}kBܧAH۫^�S 4}o{y5{pWd?<@RƮإRG?{,}K CU`}-x kR}ھ/K~༞iM[a9',I2@3mcej;l)"Y iA4uNOϙqdP|k26yTߒYdnrRb#g["H6o ֑w퀡OQCzQHr86f xx>.Y|EXP볬el�9 ʱ5啽n".B*�DRD  ^?C"�Aa&qDy8S$98*E�tޝp DA>T??<C@! CaPNӳW!0"QqsHE ȨS ʈB EwhHqeb 88)"X㝐�1b@2d dG,Kq!àFDaD <} BDDY$HJ)~zNdD 9*Y'BHQ|8Jq.!<B2ް&doc `(H0 Y: 1` 88^|`!gde0@�F2R })lǐOŹI ,FX<y"PIB"lL's.8c@$TJIzq<dx<9;# 8C.x ,βy<JOG{E!K8II"?;JXN!q0d#9>N<)eg�@ �@�T�@ �ra' d:͞܏ߟH�ƈ!p.R(cURd\I.Tf)_W -+b Sj:MAx�GƑPNV DJBQi#"cL I.PEKUN+2uŝ1n8̾S^!TGv4d-ʥ`j1= Ir�vTi ͘flΪZns!2�4N;,)GTb`nSsѻ Tkx F9vpaE 19㿚b 5!ƌrouZ-r=,_:#֏#Dso#%9> ,Vftܕm_M `a&r5\7&Mǥuf\<;Nde W:C{3A$ñdž/K2 ѣيp'tZ|_kY/R},kʀEl4T J$+~(5=~z/ lsֵǮN6�vU%P|im~! |E.˱n1jCB@hBc)<tfF{D2-|OL:TuӡCmHqIO'Fi5}*Lg!ŹB[!&cג\@z=~|,NGl ,`x�$<C .]X鄥s l=!Zk]<c 4B{R˙GR}Nè7#'BKFcg"2p3"Zbc MEH>g�J9L&2mlt۴곍vvXƱzӿ'h>hPn E|_$/0u7jq􂼍@Y@P2fNOA<5/,XUlGK>} ~.C \kk:mUjR9 , <] 5V9s*ďfo!H_s`QiX uK>P qFE8:]GTQ;n+k쪨(X  :Bȃ2}b2�eDo}lgkz @H$,1ΐb4Ipѱ&  .3Dd @ M�HH+P.!0@  'E卵1*CF~>B$#C@@bD*$@/1!1�c�C1AQ C "|%""cH dtnG$(Z;D&CI!2�AW*[ WM΄Lp!(D0%GP�$Bdd3@ND d*8T %@B0 OĀ1S2��20d9FBSW鋡#@ MQG a,bP/0B"ER@EN05�" `P</hXq� !H `7 c%�@ Z*sy9t}6ޟ'-_pUn#δ6�bi0*ȥ$HP.&մT^JP+S儠ut VVdZ2W}HOwrh "^M!h +2f<tk3e˫YWpBЋ#>q1֠vɠ !Nfv *xt/'Bo�YE![k"pɝX;+J#HXg!A7#Yy8^GhvijE+x[L_UA .B+@Dv5X-\CH][UWNYb&8iFTQ$tbŞ쉶UF,>KF+B*=`8 6�!E! S<uG*g(v=FGI zm`GpTGhӣV}  I�J5B1ѱBZ5P d7"0Zb@!@RX o8!mjp,c.]@tބ,mPBƠCfIGMs]"迎Vo1MLU؁ҙU>Ir%C3`P µ@6T#6!<bqB TX<*Km"T'B$zJW bTMup <_[jMu<F o _6#r#WBD3' !/Bn"kQ !̽Bd$FQK6΍on]$) h>JgZ\5bGUې4n<,a6ߴ,5E \lQXy`^k$9 o4&Y5|'c7Whlcq'Uw'8Sc <ߺV}h>'XJ,ZOгrh( j!&A8<<ߣ lD'V@&ϷBK#\u. WOZU>OFK<AjAyq-ENzABfLE[,dyھWB+0蝡MKx蓑گ&<([lŊQ9h 5 <IQ !2qVr*09rhr` p<+Qu 8Fa0F(?(&Q}cZ@pBFeLSH2fʜ"� 3 8 E~C�a!2 `  ~38`=h"P9pͦwaGe-r#!h'"2hQg!0I@B0d,@\P(`vrA8A~H8ǐ|`E^yPRUg9tz">`[G /RXUb/p(A s!lwC ?LJ4K4'Ii&RJݾDޝ[X=z9j qaͬ+ R(?N7::, B9[$^w'QL^h˨삕:4YiSRʹuB):F`p=+7XzVV4[/p^cr}0<CE7:lOmԫޘݭ 5UAɱ9ذRq3^m4O!ՒЄJjY^TC!cQ"VЌqA=):YDHAhV̫Fx>s# `HV=㸣Z"8< ~(uA('nbCk"?6 T>U`,vlRhUL 4`r gBlWLkb(UAɏ #g>3dc,0Sn7a!*CbB3rog>ݻ3efƥ&tĶq'$&l&Ɔ!fEC>m—F#(�#X%B!AC{R~mPMEH =xo�X"t1VIE:?mmPCfȢCV= Oʁ2Nf SjU_�/UgLҡrA-h:6f'ԉ >C" oc wj3@-<P}X!Dy-W=D|C<{R-4QdBȹJcW\܄~-st 8jT Δ+I!zU wU #8ZG0LOAM+e,6>Y:6q4[4HAh7G#7\TBƱ4{m谍#3[m f>'X:T2`ױI[ 'М*gۃE BA.9Sؾ!@yVZK!UX>'#HBJ{@bzR!kq'hGR4UPvy>_�\lT>cԍ&W53XJ9lx1}c �<ԡKKL7^#`Hb3_S5S( Z7ۡb㦔"lqnn=ɯs|lK #\Vrg23$Vn1G�`/` dpCQS8�cL-jƝ26R*)λr�("%$RJ1E\*)UbZ.ڹHe_tÖqD2aYAel 70bh$'P8vF^ A^k"6\1rRFyp&C n,j^JdKC벫TBpQtqۭǖr?j 7�rӨ=/ȗwcY0piq4g (UsfԄjoЪaYԞKdKp U|3Υx&ߢ(/`G*tԈ4n\k<q9;ifq}n_|w܉�W?c?,UhY3g(Wm#\`i3?1W,YD阂1 -Ia c;=|U4ǹi&k Zr-b^ 5cW%{#dXUkA�ѦƮpc/_li枞޶Xh{EHsZ<i!Ud%`| i>{"TakIsYnZ8EK raϨN{#EFvn8ZNM޲ 2UePyD2q4l㜽'շH diTwxc3Yʌ7Bj^,,8+uVijnr{!gB5hX_^,+J]M==`إ)_fzMVͭleg|dStnoQN?-XF(C3[Y} YCt _. lcq9"3zY,)d3 J\iXOх*3 zr?׫_:�(׷-{3.=D| 8%B(qd:=i*2g v{yіk̜qWa}p!3J76ەCСChOWl\[7Y#?]z~QC#tåU/5o2{^>5[zo2(5U[W*,(}3)0jbc9,hʮ76r~ cwGrx�Lf^j$qu{[WAX" -R-t} Vr75^5sn#?/e#</Xv'[|r!G?StO~KG|+{D{D}/N7oՌ5#` u}fG2h3�aZǦn4z6D,aZl8*ڻ5Z6Е⏶eMrc—VpȰ~Lu&?_31ګMD/nqWfZN[ո.riٱ TX"{'l\^;FYuԮp>~"ׯ]Ҙnl@ߢ'Oϝ9˵h[Ԫ^v}cKG,}t_ W㨾v/i#p!U7VzsAmEhp}m3ظ=p;n\ MA$\*CVLx0H~xO 8+}×h&ƫ_xN}yW0W4w'r=A/i9oLۋ/CSM&tZS,!{kɍ!E7P\T-Y<+[7TRjWk~7n9eMu&~ٖhOkqh8T@B$g#`);={:$L8]b|#PP)eY N$M,D y"7n= T u"~[05B+*V?>.NX~Nhxv{0 ZrӪe#oQZDovDzgcV=??BD�sӷ 1zU!ᬞs-'O|XDqv\=�ƖAkё !#fQ,\NmM%}b=Dn,:8j @rsE;W{ WԛZiKoh\\n>OPwk3r-`׎*]!C\ڋm=hj3g8 Aksƻ}jY !A5!q]zo9 W`D|lژE뛗\~gJ(Y{˫>kog}MN6Q_vHm!d#:^.4vZsЌ+.?vq 9!H=jK;q3>74XZ T}P3vRG-ٴehk+DZ6YALc0K-:d|ǶE=QBtWilg~-m\@!#4B"; l|㰖jKV-+ckCT!A\fm7d^G#,e ʮnrsnd.ID;m:[T5@ "uze3!exuHU<m-e<fc5͞ fOr'ȝccQYU[ s`s9.qb>2Ռ<mg:^T!'Bql8ĵfk)K*,Fig%P8l6Ս OXbиܽ˝6 Gd,+6hm8[$xxsSx_jʽ(g7G+VP7z-g} տ' Ϡ3P!�~xNў-?]`Wil5` lC8,�}qRI=+YvwD2oY*ԋ|QK"Kvf~m2U1WIߜ�4.{ l|!Q-?8gRJ)Y9^ ?:M44KS)3T"{=j@74|;3_0{#&9 !Msc~�`*"%k#MʬYE6 Q(Ǧ"*<n^ЪTjC#euo2CfP\2=KFdߠ/&,^y5ɀ-~.SJ1cOwT^1('W#Ĉ")- JPj)Lc嘹!1 u. o5e|D w>uKh'QWx�(ß])g0 ιrAb|+^_!vEiN3nmD#Vn[9<LcWCb`]@yŅRi&GYZA}1;o"D!B'-n ׃__~&YMqwF@ caIJXwH;OhDHk"K Zb)*A>fnIbTƱ!eHG+pS,q"K"*cAj"X h�93Y G�vee`;0%Vb"F�v%CK&I(P6vTﻹԠar6BjV՗X0MJ|tT~4ncd%k0:ml0ԯ:ƱaݓB@_8Ó2P5š$7QXsLdQK{sk r͠ȢC�[{$BHt4}=�LէuHjƱq㈕Bq$8:`eGGt^6TTAI:Ĭ'd\ۏ+p)64APc'hGt`8{,/u/̵eq]p<!ڎ+xV} XX$ gPJKyxDH1&]OpADH1u=AmgI1Tkh;OokaRq,:XRq+^FBH8V aO+h ZQ ,lcXKoTΈ 96?P -DwaJO*Zt΃ 36o3i޷[ӊ5_N!?ҹZ<Hnﲻ zZM HS\Cv=rt}c@dq$I$idi"T)EEC �sC?Vh C7TƮ' cm>u(z+)ݭ}@܍/UKpvEt}pi] mLmxb&6LWQ|BW~Z i b+l8 +Qm쪫^ jn;?;2;=An{Mem^[spm̵M+xWކWY cDgJwrt-c!JZ l oB;bFHt TҬ0k{-mP!Ft:dryzr-TWԀm**fd2zvazpJFul洑5^+@;< 6p%6{|l}e=lZ[հ旎o=(#6Hcg̣@@+i :* =$B(m)<mD4<| .-j�mgYk ^6RDiw2sr:_`Ft&ѱ鐎!j4[JĹE*_۾k?W'nh)@k2pޠC Ew ކ¾F^,- x~ ?;'9\ݠbo&DՁݶU]ߢ@\S]xIƽ.Kb"ϓ2B@>=^VفhDHt`'1 =AЋϠ*l~XņcL<A> lD2xS9j<јNrR!st"OjXM7]TD@ufO=A�!P" z=AC9<z^ t4D \>'S}f,y~ }9uOP}N�}+�^H< 'j@ ,jiJB \8ڱ<}|Bk+� �&B~l0a6u FjQ6  % ZKn9F7?|[0K53Z 缨 ܆o$ԯ76=-C0{ !W/Ĉ�@IB*|*Y9ғ u=5 LO%c^ϓ # _p"�R*%,SRJ!Tp!dovr )wXhK bY�m朜.pxhu6蜌ӷOHZ+ε`5J@DQv6JFٓwg{iQٟj칣 :%7@JJV";Ե++` V4Qtt<~wvC76컩6 3[/~de&+!�Gw'I"רǯ[YkA(⹜Qg{ ;hu3|;\Aqz6'AR1Z1su hX!!z_ CglzM$}LI~$2\\ Qr|=MN%鵓@\\hiQh="/t3"sGR, 2ؽ] +`EHI'g2-ug6T_;PSQo_v+d&'Ә\!9g72!b/ǟ[7[>g{9xqP-Ǝ8iZ[EHN=j[noÈh/O %!d;Yn2vA>EÈO('l>Œ+a.r;v_ 8G!AM֌>6]:Kcg2:"7JQ<:JOb%=1Jxpm; Dݾ#&2LΧ~Q|9ך}G[agL'RUA|ӿVn_t⹌gr|>#BTnojx9DnF+A+:]T1>G8IX !FEuyc<\39=FljIlbZKE ,+r* Do(#u8�̦,eIPJ9KNW(=;I糌y<A[~zuEÅ`iLc5I$- ڎrFz`7:\,|S9:)Yv9y׾iv,D0R4Q\&4V=]&ı}Yj@ p.lM8Kgz=[7zۢu2| t, ?+{zkhyc]U6_Jf1F7 Ybk1VK _ mY$x VYfTEKe(v٨< (Veh|SڲEQΛ 6j/r2:y7)]l*vew%O"kwo䷝&"]+s Xf�Ta̩]udo^ 93Tm4ʅ\z~>zC*�PJ"*C�*AHD(1wW6q$l_4ƮV^t?\�YRqxuL//F+_y^NOfo}􍯜RnՈ^j?�=?WOnspٛ_>*WF 1hm'Mѽɷ_8ZҏNGo٨2U,�'rs&h׻{c?pʵ/ {9~Od "W?Ooyu {g~i<S,7E}5zk^ʘgfV6Gx㕏]oǧo~vpƹyhkuc U@Ƹ<c;\=hU�[i+Oի{~mn[5bssBL{Nοy`r B?S M_iRz{gw9w^_Y7'pYw� MԽo}s7Lg`iu7[G[_7X~3Pz˴uvۧ/z1)ޣ"momV,{}V#×kzYYlZ?e&~W}7�|[v<Lrß\݈u|OS]herNb?=ҧƥkWCRu7O~,Me4p5KJi>yw<_jw��+S?sx(~QoVklѡܣ5++7�v6ֿe7FIV}k]O,`z8*O|v 0JgЭٴ<B�[75YI2{rN "1|95S>q啮:̦ٻl Γp-aIhWOub]cW`%ʥ{ WOtX݌^5{l{s\eXay}^N'oIσ_5iEF{s(42{p`ڊ5ꁺeI\ u}cUwG' ,j S'Qi};z#"[{o2yTkݍ'S'IF؜ݹf}sRӇGs42/WvUOM&�7QyJ6jNPSΣhoneB\NwRwcښir7;|:$v'þצæz$K/xr;qx40gShΕ[cW|<)?j\[R}A着;Q1(ͮ?rUJiW '›_0e~lY[$4{Vn:lF1y78uP.];c8{DU-)�,6eTMR|?c c|Q1oШn|Ҋ=}͏Q ,K3FQ)g5ի3]րs)% H�L!3I�Y&V'G]\ޔ:uW2Z/x j%֎pd4ͦ?¸B��+RJ)I2Y d "`<BeH)RYA+sGXRh8,~knu]5#, ߯o<窓(ʫ99ܩ�'}(YRb՟k;Wz nw{>y0wx Z!=?k>)lw=ε+6~TO_Z:<:I9ay �@~׮~ی-ڕ+7? W?œ4.;o|iC>S?Ք%wߘ ?W字Vn4gۇObgƯ+֥v.ww.w?ۿ[: #XK睫+7g~s/3Kzi.]}.k'=, fO85σU㿴Oo. �D^O??7{L*cyq?Wp>O䥖X_~}o?9Ë̃C1DLzBuG~!ޭ+x$_ vxr`VkDOo\__ݽ*|F'~򕛍گVV~?8Rep'tb"?Ck?3["kOOYKiAT8jx)m|@e?Kڃ~뿿/S�. ls#j29l,`D9w {rfw3"ONKl2? /d>??;ʏؾdGOo~x8++ˋtXn~ԻoÙU 6=2\~nG|5!ȍ ~`?b6/Ot#?\dyD W,j~l寏MgG>sohc;_4Œ7_>y0?y"5WV 09>x`?:<ڋuW77/�A?-<~|召ک>�9K^o.[9LǙ !3&ϷTY҃]=ʉ9ӡ/0xnǧ^^o}x6\eښ2X ?ɍK9Y ,WO}sT; ̙W8ps%r|ekaux8}4ڲqp_( %%pk?ĽÈWVsݯ'q>|uO0!;eȼlror{kOzibC#XTĊp5xkQ{78ǝ${kf`w^_kz0d@]=XY_�u!Bd.wB�p|iu2NY1v{~eO?~j#oW>qՇܵ\kp=*U.%kŧGz>\<<J#RD@fPOm_ށw` hnt7#@틢 2ݭ:BRe)Bv*XXõ'C2zB]ḙǖ2 K.r8`BQ* U\�f52m\;4[CQPZD!ϵ^mENbU%�(656ZE5oiHꜫA D8D0hU_2aLeL)EWREc�P)ՊbQm*Sbb̼o;Ӵpc75~Đ]GXE2(fJUH滂EC 8�RD@S\bK?ޱ[9%Ssb]CڦWⰋ@+6N,ݴDĤgș=BsWۯ,߿wFdC]X[zS3k [gmWzk/߹,U_uvi16_X_n_/ۦ"ᜇcwQa?vWgvë?:-3g>wiFzs~O=o&?sv}(?vՕ?*Iggվy2I䥖~S B~쇶~yNIZ@ ~׮޶}w'Љm:N=6r"oDM0 "v8W7._Oοx)4,:jk5\;_WnJgX ÝZf{"7ɽ_CE7w(GيzXNjQ zE^5\$J32U_zk/z� tpnOVKXK B|+GoSP}(Ok~7"ͯG~nwa%VOߞx鐍EU{S\N�^.-,k~Q0TG~JoGǩ={]D賟<XYLǏ,-k[g>w)OmWo 6v:PUe˫g `xo8o2L�f���IDAT7 w>{ IVFE}jg^[ڟ<>5xް5L~b/7_Za\? ^KYaE:|K`3|Nq c^y}m4+Wo~bz!Bd̂>zp_jݾgξdiEWV{jecc 0J&8ӓ 7cEAe> ufq+5<,'IxE]MĚq59{^wk *xbB5fذf~tKOo+$ Vs="PQ/\D.%kAo]Sq~mՈI<Q)%DƐ1#^<'zўs8A'2sιRJ*EZFYz2I"2@`@*�C| B-B.1 V2ƥ\d C!ŤKD/,c*Y>1VŋUklH⁲ P.;}Pԅa*W\͠]XxczٲU?^jdXr0cC�x$gϻ-6~u=|;uQQ';O޽zQ5wo_ 8~Εވ?z񳿸~[AҀ,@Y?T7oaƏߪ}G�0Hը4/˻poނ}. AȜ-(U4?wokU=6+2]mϯAџ ߪug+*x:vn/->'?zڋ=0(^ u—T�:{\lص8 bJUU{4XF"zkWfu+>fU͛. "WKf8ܯ|kvź,7l Y1y!ooqXg+c!tQ3!�9^Z{H +{t9+&BZڥ_<�yT}<D/BM`c> euDQꮉC bs`e]|o-*E[i<&ם xΗm+_B <O�H" EQZv=۽۱;&zGhW3#%J$R)z'<+?WU�HNH<˛3<b=3}FCl|{5tE^1O0]S 0) #4!{G}t�ڲ{x+,'>{qҢvo>3wjhO)Sv?~Gw=2�84Zz#; ZƐ>hAYz Jw٢[6(#73~G%=ܱsotUKZTk=6D%5}a"CL4SL)],4a@(zxF/-0su rd?ߐ}M`}nkM#8M#>Ԭ"#\I$UZw<09o{_Ic>8]tziC8<J>~Ң7=@@4U9%9zd?ߐېdh0@�L tCU0ihʦwH3ӕ>/q]8RZ8 $,l'X%Y7$YtG)7BR8&4(Я2~`(mB 5dSт @$@!! pf[)z~LBAb8z!$i c`R$ kI=<HOɗ$S  $N$2E| A�`۶mF#|?`1 !Zepp.<[[]s.��u]9":RZa@D1 kmoA;^"Ƨ껌�Jvlkv~deYY �9x﹞\}9 ;�p0Qt�L= GIܤCrX+7)PXcxjz^J:偑_oWLPnݵ{0@xoȃzJ8*; 1ğ}cE][ke[gf_'v/Xɥ5<K&ԑIb c;}b{/y7=vցDbD1دy;h5w5+B-+�_3;'ɢV>`¿;x9t˽O^dIfHsÏ®>;TXiϝ2%K.[>T7>4H fh]i  *3F˟Wec'vtH8D#}<޵f"<ΑjRk;Z۔@1%S&hrzϣS}~ř~Rgllc'0)P$7AǎuP1!#|9pu'H>؎.ivŊֶ4v {;oo ݔ،/~�HC?+ߟ?f20w=2YLb }t1hM0[SNC&RF$Պwlzݭ=�gWP P]w?Įͺ$f|`ƻF V*)Y}h%$Mxh}KxHu^C^d$=r믘f)QC.'ղ'CN?Z= lGMw_srꐖĖ`Xڑy%iEQi#C'>8}t#+71uٹG!۸q܉D% pxpj[!i*W79Rx^v 48@"jn`rhʀ�^3xcջ;\ȧko߰ZYn%]d[4f>6`8P5Lu.WqqH=tGBH 2Y__5epL6#g¤pCrb"$JB6{ $uܜ8^eBuMHX)ogj] 2#<UQ\ТB2OYSs4KDvY}@v7G_�9 Dp"2".x).�Jo!gXsԜe7WqrMot,ǵU%>{fd_O]8c`YaVA{OP]MR%F.s~u|A$#fl,p=3?!TJ|)O$2v%R_?X G(0L3O˾blv74LUuk|;T'0Tpc_s+:'~g ~RKt烓7I>fF>R~?Cp}gw*LBj9lRl]ڹKRhoR}^^?_rztbƥ}]<x~,MoɹYܓ7' 'DvRb#œ GvW&BVlߑ][fYvdk@ `'2w>2ӿyxvꍜ3]^ǐ0(rvi%0 ]ԿfW"�5ik.I;GJ9[wі"~HR|xBcAűm` IŕrO\[vgoYn}-?]w}MCNz8g*쇟#YM!Hc er7+>t$s{dYx}{qERl%~Wb_񁄲8BSwyde36Ofĕ f4:Y1:==f}jݾrIn|oQo~tfM?zlr}W�Ml33Wi9n<AyƬOYHD >2_bR)w§UofRc\D I%rX¥!uVpھ_m)1L,YẀGc]rs.'S˜XoN֔1-)kk{L5hSN9vr}Yk{,Q|=_Ƙm[ŅD$bryA_*m,*Wam.8"r۰ʶ�1ڀturG}rGshR�~%"ApA&0&#۪NJ,#  2 p.<w]uy !ce%W(R33~ FR]yHja?No,ʿ%��y__od| S+݂}9JBۇox; ~wO 3 ǧ]?teφDHˠKkmҍwcSxfWqf{_ B SE>;G'(-{0պh|g[ I79cNf~ryQɬdD-ljuQU83odLټ;ײ;QD {;/v_wpƊl:p `iT4* `dom7G }[u&Y|O65hyo'Z3™ܙ?Bl}_%2�GG77-^v}C3{{73?ey5j +zeX)�о#79vž̤{?[Oa6ev ޖp$m&l_W2wfdh<Bsڛjs4;4+C%cm&G&*73.z��FЗ]2.6t^skyY1I*Mw_BG܅ݖJskhGBonyTo:7>l JbwspwQ䠺S9{S[46j(ϴ3D)ĉil7FUL@ <=? $f_~j9ih*=s OPwտ0} $H )hS oW+1(Wgv9&lvYĬM 3)ˈED ca$Gcvl(HJGeKe�A޶,"N%1<^ٳ&q&vnq?8! wA `բa"�"T?#"!  !X ܮv]7!mQI8x 9Z1z~B~Ц*"Hߜ�hQ�=cB‰DYo-x{}1O^ft8AU$W@ >{' \o:̖V==hJvXxоjDbqIS9fs'3/Z[q[>c4\79j{YYvZۘur쑫V8w3>U9"O =w_|iQ@ πxfne[@]><^7_dUg4wξXB;]6:06ƣ /eG^ ]TzcvUk6$Z@cBvW̮xAPx@fH/B �%Z@OƁm*UUn l ]uL)PG4iֻtOrg t67A"^*$wcAH(u;z#$ ||z[vZv~@/g�JZHk=>{LG�JkZ L*E.5 J(j^.v*wp k-]8)�Ln#Z_qTB:pvy*= |]v>ƀ36Y1}r: $4"=/%; �1XUY%8myn}%1)ۆ>yUO17a;Ԍ a i )%9jMaֆ-J̱ n ʤO@lo6n.IBR}B)zv\/I뾂+ǜJJe릻&odE-7h`|pn&/2O36@ʴADAg!0V -~t* uD&_ҰK8`M9ı%H)K0}K8i%vD0)=*]`kN0d"DrxC6J<ڡrE 1VXt!$I%9FHT5N#r G3"a^u$"USGs&f&$RiUA$I}W lHY}Tg&TܓݾT* e" 4^6vl^ ԪUjFny^Xhtݮ![WJ'玉ᶡ4Gǚ Bp:|0 �� !* %";NjvûJ?5-Dw&")ݎiw]73)|PT!+2a .GO&c*=Jm2?i*RӮFjQWFM_}Y<Zxsg;^'<�FE?r;^f#CuWv⅓/@C?rNj=v ?bO]8FSUZO꾞 k/,;>{5w#8!u5.TF*R@> Gۭu'f1|vTA$ A?7ϝh@3ڹ12QZY x#Ļ^m8_X8۾x=7=C㥙{joO:{tU+֯$GuP_azh\o̟?Ze66Y7=fW8{䉝;'*OЍ9@Ჯ=.vK79txOb͕%v-+gnj. �3r{IƱ^LVê`kic0}{sݍl'gSӻk*~?5*5RMwbɭ1?w]*[oぉD˫O}as5#~sJ&e! 1{Kl|gw}N69 G RS 22�"ѫ*4/UZ l暷8]TkDy|WN|L |p5<]mop^{О<M2xX1CGvwqCN_ gcȫjZ\NmKKsnb;GzB_~z!]&)$p+qЗMnsZ[./tۛhih"ۿ첞DMP\_.i.K{d<4V<{&6VmM2ԏQ |iei�&vTch"�,/t4mo�PʍwF|%r6&2'@^*y탈`FknR.ix|( e|ZV`\pF&9onl+��å}v-:ԣtgWA_dȴܥ$^ E'閔Sf}`g}jg[8~WZ;6嶱G3Vox.__֗]�hGJ! OUQ�mp{Tukk~CcC͂&[FsF*OM}͞鴂 UwclhHyrg0h bzns\[ �pJ9JCjqɝ֦?{|)K0Kv6|Mg`1,v7D~fI%`o(aK:-A'he0հL.{\^'g" f8)K`7ÓB֧; ͺ |=~o8t=?1(0DEB0iF I�lTkٺ+LJ }2p 2 ILJQљBb'W8v*$mm!ՙ` Fm6w ۏ߯d^}"[fJ; f8ĉ1VK%<˲Hh�p!XJ_X\,ȿJLanqcag!Dt,+eْ\W�`)a��vRqD�'eɦⲯ8c̶NZJs {H�>StڞN0H()eE^tLK/@;ot!53 kx8XH7?=t՝D/?{ eןYO# zA=L93롊/ޱ^0mŧV +-g X8۝"|~82FP0-!#{wzu( ?Οԧ3oiMZ$`n;7{q}{S{ l㉙B:) Mz] l@$Ak VeO";%v?Zezftrݢ,%^{16ok*8+.ζf;Ň>1]p͉97 ZAcف /9!7V|u<_W]?oXo+,͈?'UM!Kok_߼|n;?8LD趶QO.F?v[/?t}:uT`y~rWz Nv%T6v;:v9�]V/v2[?򜛻o_!Ԯ?p~v῜ |3\O7kw2kĕ S_+U—~_qVF,s\S>h}Ϯ+5vGn߮8eЀ`tr=B˿m(5O.iWkG@rQ2t]<4EukȇdzN+xK|_ `ڊ'vIuK[X R6-eϘjA76f�To:=> ?%3̞wEG_Y{EA+;*;nxx+-KP:^F Νl@]'"Ϟ ɿ.#zg}_8Z<>Ϸz+.n,; ݬ?)і="W) %? LNڒl</u/zБ[ 6khf]ӡ ߰ʂ+ p:++k75V�GdXϤON͇3TZ~3n=yDu2UT2t\^zzaB7":Y`foȜ}b^+kNo#J��@pjfo~ 1zp<4Z^[v3{?y[o{\,<ڊ;{| ��W[ 475>>N7_:f7LL=1{l# l+ E�ju{윽 .owB<O5R)Y5w5[Oic;: vd>]a|� p'%cOLC1g2=6ESdpY$`5|PBe*2RIRrf X^gǀqcJ)H/?(/MZ@OLYc1}٨Hwm=eOU[hYBR*-(9 RgN.[~#BZg!?(wJNu,W*[K@T"ZǿVL9*E0B:z8?А$&cꃘjţ s/*wGK&JFHfh3ٌh՚UUł h;�2G"D_]ʰy@@ 0C] 8$0ؖm\uʥrpu�QD?9,2v& ی9iC&,�!d2Ɛ� w9ޙ&?F,)|y\;{2]{́*1FeleG407>ج5JvAE�<0cן]_Y<ݑJS  )1?:7kn'~eszxOϞS1-)X^"�=O}տ3(b$Zn �zG{|Yt(Jbo"(DȳX+Hsa>֋e=ɝ]RHG ��?9+BR-=Lݵ7 M=4JEISM3,AmK] mRJ:kYx/YF�˂3m!~wu57S_[m*䓐9oA & rLIVM `P @t]x y|&I*,/Ajg|| 珿uꍭɝE^$$BH^[兮zw3g5Sl}/X1{4aɓU_ٗMƚW >_(NM@)`DaV\S6_O ॹW>7iĘm{˭�###ϧBt:?D1x.m=(("ts;w< {&coNჇJ~G/Ϯ, r=y//t}_oR O_{~G/ζ^=)a oE8=#܎ @UsS5>ڳ+H#IpVkсV36U)nr}K[| )bZ_둢9G_Y [{pݮΗ?{^g.\h+'!OÅ޼ϚmuPv̥KF8P�miT<oyNi|SF\@|ks+.f,}y>`9oT=1Lnz']K@kߘC;Zl: JSZ?J黔nn1[n $kk'^[O̚s<_pzյim"?"=yԖ" )L/ S ^ژq+xafr= `(LYs/;Vt6}mt#3Hn ?G+=UԾ/^}fimٍ> t� ^{nyAo1Ҋ1N/Xs_}fE"~{k7|Wwk-3jNxs2+8a}Q@Fdd1&gPWz{,)h Wl |0š.DQe(b}|hi=4 Je>J8&,AH"Dl!1bƀI)$8[n<Ht: @Yi ѓ>aԪg=\5uYLZrJ8Jo SJ-L˜nq�%\}TZ_jˣaN#2h]z0CQ�~ sP4ݍ-Sg`7 �!jq%" [* B-P""` ldqG;MFxàRKHHH! AȌ߀Y �!  dHHb  P  Bx@�_"5:F;ƌjt2r57t:SD<�Dт3 >�1vPۣSY՝w ?r0 fa `1áqX�E_&d>1r\t mE i�O!(rNrjc\T67ܥE^gƒ0 $l R;.q9pWc Х/WrUDJH%a >x/^'boo/ !|3Sc,D?ɇ/mqv$&%'H%cYa< CgIn%5gaDz2ӟBpOw~xN~h;q=R~_}֕I껗n~Nt$'nO峓~igssoQpkϭupdTSpoˬmD9Ypcx'2{Gjܐ@ϧ.=C__g/̶nZ(00%d;sDAnhc<}}G&{4M_zF!B'g?Jmޭ2{xH;/ə&ϕ];EJ^a>;zkϮ~WxCV? "$:K).gEW-+=[:w۹w *�_;{bnI_]+T/ |i@-ooR ˡgZ+՞㯮Z݊ q1{|s×ctr|c+k}fxx;gӋ[A&gjz H^~MorMUj=Jr.B<|1#{/?u)0 8LML0޳Z'y.E?ݫM;UJWGA\OVDD(" yp\](!*OC0L>0]XYZ-d(%% n.v論CMT |w9 FူP0$d� &F�!�aa�X@V  �Q83Q8  #@  <r r�P   !@ ĩ$&aQG $~\0�@0"FH0L1"$DrPB(_+% `9q/ц3\۸<P꡻;TcVs[]KVV*De6!Db@ B"@KPg˙ 9`$l�dEөZۥE宔<<}##}ibp&~y*e@�8q�A\0H0~ ?yZ PbTC^%\@b>D|u+\FqRdYq77;m �6bfe * -",ch̲1$ h3{M#lC!#q)IJUѭ& $((;ʳMBN_ o .T:Zpbh Ή\-#Q1dG_x弧82�a%JM�K_NvmsgD{PO'WAO"Gƚ~>qu89+-C!E{bh02�F˻?4B3o BÎuIGw )w@2)CWbnG_xϼRɒ%pZ*q셣 %JAVf[ >wݒW$MӗWeٸچ*PG˻䱿]=08튋�Zq̺Keֶ 0W4Fi+X_B.ui2=cYDHvR"'TYC<YL\i̷7V6oB%ZF< 6Z~c1s'ZF>~ZEIL&]VWO!u^;ҟ?.p.󥹋g{Hx`r M=d}�ʽÉE\v"Z1ЅFA7iu} 'T=ruE"_P„B DkWGa}} aBBϝ| A2CZoZ(?3=:6|nvmXi \ew`$BD;@HpDqqҋI:%T?AK9oz*IRJTwTOr}ịeAFyLjVR^?lckDtؖIKhxO,@Q$Ws9$c>l$XZ>%BRH&.GzfFS\7mFIϟo=ְMI 5"ŽEOK6DGf cRᤕdЖWiqH}*Jѕ5�h 8;MkLrBD?"BLSl{+0Aߘ.ܬ&δ&-bD?J. �Nm-!H`jp<ʪH_&U Mʘ54�Y�`;Xٓ[ĥEa�ɍ<BXoZp7ϷDtBw+Db.򤞟p4L>rc6hKA&{4-W#2!*QSz>d[1kXo JևX#sڔ4?XZJG(Bb|_A !f!AHd˫:Gg >ZҖ -A0,AIcuhV%s|+z3 hnG0'TnR>@ת_ p\`@vې B"<SCG/0.e7FY`qV%P GHٮ: YHE1 00^M2gV8'1mXq.(ܹ(nˉg1JXjYx>sfx#7� `alY '(E?‚E UaxFDш)¦1p!!C yTƮ#Ye0۹Ɛ,Ƭg/q!8"@ a 1!EePKDGUѦ y ˦Z.&oN*5D& $\&i_'K}2@lWL2>~ߎ$!g | 0Gbe#0ΣyZV_G$Q,( oW.-t=  ;0Ʈ -pBiz,u8h\!JB$<p}?VVD_[{PixIw>I隔n} g FhtW&;ݑ&yn|պ==Sd_8繺L&]ϟ/p" I4E?|z9jд|_\-+?X%#Qz8?0T2}4zjL_)D3Хm}qخkj4a+- # Rт]Uks^"CNf&��.\8득_ d#G>1/i9z#h4G8MR9+:‹ך= %KUc}1eB!۩PW݋$-|LڳbŧV$԰ilHts饂ܧaC9Al=rG}ce-oCݦ !_+8^҅3oBoDHlfl"H*"�@}<rvm(ch.lTּ )pL4١Z%ϯj5='+(INw f"$zxaq!:oRM wri芐 v0M^#O B^&t~xK*B P;L~ع(CtStg1-\hoz,v\tu$�puD LU6rC 6ܾ{꺰ձQ@;n'H".vus Y\F\Ov1Z"lНz>%Y_>@v +B޹mgf! Wra!2.9,խ ?>05 !^8{b`G&iUY$EPt̏Lvk@,/\hAE{fB�g`#!c7<F4:-_a?<VNiىST\tu($y m^.-`}82^)8 N'%C <ZF&*!BH!]mQ;}67$A.@7J8kfZH %H3@S i`iT'"w>%C*.;2-A֗8;K0zn( 6eP1)BDH D1!YT.BPE):�X) w1I6p7]$n,_A{ $Gs|DDZ)L7O{22-"C}B׳*/]�Il@I8~w) n8T#�AJ`WT4&kCCF \/ólbQ ø( r=<9P r &@A 1N, �b1L :#h!XHffbF0"#b'�$D0LF#q ?<`:Ȱ72 u? @��a4 {8+ @Q8Q>&#�EAZB$ Fr.H@Buۜ *jJ`9Pp)Y̲s2BA�!$ �<}<sEE ] .H�":]Wk]l+P`e\.<�P x\V},}=Ay<3@!8 ABsrN~9;KP1lmU^4x& udb1l7M鱨d&P ^S�Wo/yUvuM-5;1�khIO~+OS6V!-w3;{r]͛eP>W0TL}V;vZ[Zb/^aB{}Ӕi6s$6K<,NK{"1 |WZ,x P5f\Y GRC}Zk[AڻiRqύSWm"NJ�8rw׾'&6Jĺ,>-fF#xMzAfkrr M>T65*3֋#Q" Ine{0'|Ap2dҳ%|KV;82^6Te2oz;MY4Y*1],x3=UZ?< V;[&اwW._߼~yAcʑxЮEYɘrFı^s7xrҞYp~}Eb\1׾I1 )q.F6w?@Sr:�:Ƌ]B7d}jQƪnYՎ3k)l)xDjIQ|rD)jnƬ D=fEՉܒՂd=_oȓMc%g*1* T<\_qTzp flXBəΟ҅HI!kٖ҅6"@@ԑ+K Eap++{uPRjf̙-i qWv{cSEaSog DY;[=<QmKdX 7s{ G+,Am:D .^溧 !8.j.6 R9/͵;-?י^x-h<8R6t[ O9}R1?UT#+M 0|אWve8BL`>*ܹ\/mrr6V`L0tIRY_FIJDlޖ<6hUiy.U`  '` `)iOLjYzQY+aFAMOL$ ϱ֧]8^BH:qZdIM=$wyBǖԆm ׌`Z %y2 sF{LY9])Ep"Q>MKx&{yS1 Rt+0V Kuf,NT.ﺾ΋( ~ChGKTN; l@ 5V*h1.' 8�-�Fl&,K،L(,$0D91_`oL  +jp!g38K9q�8?(ΐ - U !<8܁2PX,uy �(:F�pX@STf0yhxaڽn=< �0p j,xrz8CbLf'``a`WC�S�( �HuWI  }? H3fvDEO"(�n&]JRЖ5,b٥!7R1RE^_l5r{u-_EH d5>_A>x +^pC翽 %SP/Z/AG_Y_\@v۫o$GJgx($O}i·&<q( -W6mmB c%*Z/rnm`mfScБ@hw=s3/rX&,RMT41Ƽ﹦h5﯃mˏ5OW=Le�~km w>Z\9e 2y3#TkL%rs{AKy~{-Ѱ Д&Sz$@#l;>FiT=\y}S 5և@t,r2rY~e jk)5+lڍf:0X|4;<_}vU oݹG? Cw4I/CN^P!FU?xJ}#oS5ɎZzD䙴/T!>DrR1$BV"Tx曋 C uhcŧ 9<Z[vɚOPvYTU :ց 1<|k' lpHff+K*p},&,>jA^^_DR1h|�Z \*ܐh$ݏL-]/Y K*.! o+<67Ed94O՞c`}ZZ!"ܠ6V<N Nny+1",\]?t ll;ג+'(ä֟f (}O;"*Hn٭EW/uHai"$;JJC8i`"D!ǍN\F+&hOc;DHc鶃stɒQ$77^6uxk 暷4Fo(_<$)d9LnDums~ƔikKǬ>CkʟBl(MӃD{gwݡY`p2j[ }j3bGB�Q�v�4!-8+` ++֗l0C8GHbyucV_t|G_6x p{BINOnR 9I \#p1Siu氵_PZʬ<DҫDEΔM_3`%H LV `l @0"ɩ( N8e-X� *ͭM V @o� bټT#b̆R*Ur7rd"QCX Z`EOrF(0 L,|EePXH (/ �$2EG$ Q/Lq1��",<A�2 S !B7 �Yr c$.ŀ,@@-<&8 _D@ 1 bM%Qxh &k �ªakx8"[[ns�@.XvHOa6 $ $*Rr1)J&LoUz;A5xm2d�Z褚td+Qut$^J~d\1@-oq}ȥ<Gʕ:/w>(Jd~>;koaXxtT)C͡V_-xpf;q#;vgS3KFmպ]>1vsK9_|jƊƀͼgSˁK0<߽_8SĈv|q='\msl~č{\ߵAB᎑rN¹ls&nD=S3\cޝjG|^q).B?amu;|;{he?[P#'?ٺxUp@Hu:Ƌ?Z\CKt\Yt~R6>a|:{YD/�yڵed-A"i ֹ1XTUzGcSYL=ϸ-@N44m˨-wcͻ[f}Ż_ Jgvn$GDHtUJ?^ah? \ g9uˮP`�30Vu� ] ZP ÕƤeVJdmĢ?A@qA(H0 ~@ Xx/0ځV$�BPXoB{X0 B g[0 FŠb)^(D!$â ʧGGi@Ho2v:=f&mڤbc1d,<X4TNI&,A$ aD"J-*Q*-Kuie}TRnZN 6ֽs׺m`Y6C+Qxxd1@ `axv&"]4~H9B^cms@F+ɾo󫴒J@LTdD_C%pɲ$=C21N]YZC58-Th_@0?<W]gs2Ph?V (ɦụ1�Qx\9uOq5C{+@3/O~ڃomVW~XU|ƪj;ʵTE!�+ lXXFd<"sdt'Np.T[q9\ œ_Cȝ%KqW WI;Jc}BiO둫2!PO"p;3eF.gN!Deu}[ku\kZ[@c6Br?\{cQu\^brU"NUwEžg(3Zy57|( T?R}koNu<ײK(THazj�@&B I˜pem( q#' \ܵ�ŭ uH' hzyB/}z#8V@r z"=b({|h(ĺ,% udI '<4YgiJ_{)`J^ޯfkTH(Q?­ 찔I1O !pDTz$削#bi*Fd|_@OvO<XY*KF#�1oxP>)=YpA dd rDB@Aal<0~/z녿d"Du&,=n lA^Sz#2DѿQkS(6r(tWe1Y?9 [;0ry [NH T�R*%h�|s4[Pczw8/QһXIPSQgCI*BXviS Է1HXI-.dsőd} 'X1WKt([[;t֗ºO)'-|ha$BSN!D.*MI((�w"A21z~W&5?'91a9섻 v3zHO %ǸJ n1B llkze1!if xŕ|Oi2 ^ĄUJ.լ85l;SPS @|HN \odstǐDt̆Ra%&AjuB[nQW�Z) )&-ȉ DB,(,m;  G�1Ds6wgQ#iBA6;C9$�@ rD jaQa HhC'*1*o-k/?\ys.�} -7UD# <a[B=(jO&U&py--۱K]i7櫋or3WV\rV.UH|"7+/��Xxd _1bG !8a/h<4c,(+mg)~`R>iXQfs ?4\ڃcLL!ï6|;R"U))ʢxwXɅs]MS&yZh,uCf%�PPlT%AhVN5F=DQ̾=ڵ[XPBf xʒkÃ8$Ֆ,2�eǙ(CJNխD['^7\ܾtGm�@g<vjK5w؍J7qWL6iS_{| ՟*wV$U9++6r۹I6& >:g_8-p bi/b2J ʙ7[:BH$Bz_> :/s0qp+cЍApģ~(huzSףRJ5R7KD*1`CKD)cJG=EO\ɿ?RٺcOkoJQ>DSRW8#d:sI jN]s6S|CG!`5_:ڲ Wi<5ܱ An\2; fi=P�"w9701PFۨ#Wˑ~jbz=; E:qk o$erWfXefx{kBy)3]Hh \=z�ie>L{2Ly Dp ^�x^%hor-LlvIsqE n^@ ![thn ʖd}O<<+N ]'`RShNtشLwQζ<hZt&HrƭZ/aB#e B *f} V1'X_|6:*@_ac 0!"MIH35ݭ<.J: 暰$rTlMI69nR _A1B� l깪 F47:<3a.} >O}f 1+| 3^Lnm 3<G":9 ,rvQ*Umg TGFnqaMD0Pyd9<UrXKh]JݱL`ؽ7R$ aN0Fq7@`9 * D yAa` A�p ΐ# Q2 HX$,8Rt' ׇ�$ \@o�qPpS&QP a6 ؖXe +-_\~SKn'�;kk*(4ga sD3)"UǪ:%̉^[xo̟ouZiD |xD>QcA2d%2\9 ;9{}]=. ƢCY(H0,ڎ;ǁr}kĜ`D-m:7^f7Jizno[_ҵ= ԛxb&t0 Vcj=br*]H];RyⅎlNhyɝ�F.p9[Aʹ< -n dBܔAh5m�ŋEkM+V5f~,C*|% W s\?>hZk؏~jgdb6"%OR) Vr{QG@=d^BVW);�JΡy7BQ8K)Ya"Upy| Dȩ7?lm a|`ꣿS 5Xʣ4v*ruZ9, aG<G< _Y)9 ; h>tH!1D#{Qw|2U,Pvu Rʟ �*5W=EgYɃ`S5RвpNf3[c [_w{|;b3!TLOy $%H+a!*Z,~vR38N ֦P r9|aij)X5U9ڥ܇x.ONAhrs3>z~,�$[!O% &nyAiPGKdZ3EnAԜIB ^kZU&B@CG@o<ee Ezɤ% ǂHgyM �D�bپz(p*�f me7g IA3b)ā&4TK 5|%Z/$4S�ҋ0h~bfopԌYؔ�vpEXX_"N| hIa[O ED^}3 ZfDO"$OCͨ|zYL KM8Ҝ9"`T`"D)ˇ&3f7Ԣ&܌h"DW!=R/JpJU+,ݴw6wTlN~t&'`TDqƆƪ#S� `8u 8N"ּPX(lm& "BQ㳶omVgn~�@�BU.PX+lđxXJ᭜0 "AhШT1@ }P@#aAXq' \ q B#z>b@aDHs, +0 շUTmqLkp쉕sY7ܽ>H 8q.ќ#'Yemr M?8}BT` @a-нpfc:qlc7,Ve v�_@%E&a|8`X̀, �\w=RR` #Cb2<m??i+PSO{9po@TfhH} R=Sd&:d^5XϣD%5mgW+N劕JdD-ˆ_9J�xknC=U//2(hAKʈSG\/a܎!S|=N&B)($ )#lƪZpKWΎ5l JZz0f{2*WYCDWRWʎޏRZl$xU#[j '$kb"5׸X 鉽}Lu`Hv_\(4ڢ,|!,<­\t'L"$s?O^bCss8pڸ-mݨToxS3SW׺@ xg>Qgvf'|aBWjB< 7|Kg'\ !@3)#$0bA\CoںR-{C-!:K u(9r9ĎڝKF)dC:_zy6P`󣿰wtL :6T$߈vU"3'^/ʔ'γ</H(NN` $9 A͂^Rz~єE `@޺>h a_r %ӫ<5@JTZ\% I!%]P"^Y))>rJV!f! b,QnF:3F 8?O\LhOwil;�V&@q ҾpL tir-|W % "H$T!@<0ҟoMT$4=] GBJjq*�1!Tm&KHz;etGz%(8S1'_֧79efS7WXyQu Zi�1 )�G3L΄V!%zPם`I>y/63́ҠrCױ T\4 ))u^j0BƔ5âr0(P&Ԗ+DH44B(!;! c!h2$vr*h9$XU8 WJu+`�!D Mk`Z(AI>EV͒]faS�0 d1� -ͮ[V`uX�]q!<; G1. Yǎoml 6Q#PG 8z8ksV@WYQ`]6`-amqŭg]]>�G k`4 !Jg<`~jqk[[## 0X@8;z\ZvVDp۲в"rN*]]mm@WK �PXqfpNA �eC㷶N}�86Eb0t,A\@El؆`" $Gij(r<_= K~C0~s.ba rݣ$IE:bi�W/N>f{~DOR?7$84OynQsrnޞP7̟s?POgBmP䊛kݮxKs;No彋yRDN <֋PqOen:|^"ßVj :UMCE~e@Uz'ǙW�\VrSTЩRQgQQ</>*GS'@W\;UJW*s%B˲XQd`B  Z԰ �<`l94^C[l7aTbhu݀{=nyXp%�L` DVYeK�DpdܲC,|W7rW6ΰט8]wYvۣ6Y`#,c^í`Wڞ•,塠:A˷ m,b<ޢVW6ō`wZV[Vʈ(59.6XwV`mƪ- tC^eȷm*oqg˅ ȶl1" ۶O^'hUֹI-֪ {1QOX]ç-aui#l`'\k9pˍuE}-)+ewVpU/fu1cV66[ ~Q\)�&eۖms9Q)U:3�2f9Nb6p.5*U`*stNr%D|J7G1Tz;,,@ !X1DBB0&SŷSQme JoȸozwD /vnu]/8�sqD+vbm9m[VohtiS??-hY,TWL�37IPۃ$7N>sxck(Cv\{kKS9!"}MyuwZM4x:mgyMUsoT`d%E4>2ŹSkl;٢Gĉ !ͼKURk#r8<Q-"uEYjmafvfg�dwu™mxe/s챭?CGvGelzt51^(qLtIGd< ;2UXr\x.Xqu:;rǃh��?8 2ROˉGKXb}B'So<62QW=j_TLה_Z!KݣB\+-Ep?1li#c MI=<Eo:cʍwg }h_8=zF$Kޥa:JoL1r4.Hs5laϵePPz*N�m^SOPJ"fJ!4(8g٨)|{-o槌od-< ; 6<pRgMK):|+Hma/ v|ca^ %|XYrX85;- C,65O/Ak'@QzEZ.nQx6`{/ GA?AAx _4C0%o4A 9'2]!S![UI=7\%Pz%d|z~!Amf3LZ"ڂ!lm? mWM*!-)9Lx˕v]4<'Vȣ7Vۧ$<-)FE>1<m&dL- BVn2I �,XuhVV\AQ N8vXPcY(,ly" BB$f%I-xɷTtꃕjdFmk^w[~gl.,lf3f�mc}T;`Comu 1Ti6kRYls,ۼ@@aWKZmm.*Xd+]Z֖ږ�cՆ3<Z)7JNJem͠V]B"$D+<Q|yVV ;RsʵEݭnv;.T5DB˝MApq h9a", ݠŅ$X c@x6sR80\+e,vr_h\"pThQj5@Q `xE`#�Z  JM"]rj4'F(lL rye2V#b F{fBGoP+ykp'8#B,1K�@!>(O3 ?wqP~o/ )%ZP24l rQۅw:d#yX74$o+P�/~sKY6�Nd#OvXiYįt7~]Yk TʍiHFI4 ewܾu'PfߞFd4F*F!"PS Ď;[l_L=m2?dٌFr#)8+[_9pL9칛7wW.oV\ f}2D2үCW-;0X7&*щ72ɦ,=u'YMQ/T0sswկ}gג[e˩ibUo g ֨: n!` <̏gW ܩo}dƔ1i8Ĝ�u;:i4�6ۚvצnCbfh+^C0�<4VT SESMP!BH![AVf>/i9 rM7 ]-~ϏNsܹ͞ƙ[E0!41z_0M@P W;*KxtEj8+amL½osᚘ1)+m_w"TjP':C+;sI=d}E J,Ml//)luN �<O#nmx''32&ҿDp%!)z@�0�e?!~uZ||)lPX,F| ớZ2c'g={ _Ap@,2$X- o7Ů.)l= B�� z0yH"{b1! r o_5شiĺ�`:Y)x.he\0B%5 ֟%*`GtESQ@$,c*!DQzV.ZHRClcϒ e\aپ 7i%hj@Hy/t%lL4NY)ԅ%H`#e .9S6a,F pԁ3E !(8  YP95uxF նV|wXa�`ye� Jb J5R/ ,Pe!"pܠ&ڰ58o*N٪Ua�muۛŭ[[k] mǶU,vO5+vA jM6rq7`uV̝i-\\rךpb}^>6hrX=tί`uuuەFeǁщPVw*c V:Ksg\oy< f۬\,y�zGwT&v LꃕR˜}r[Ϯ-ίNcޱsZX̢;Z'KZ+7k{&B @lyNlxrpnߴJ^skLTFzZfn֪# 1WZ5vf@@BK)}}O Bc]{Gr-@co{6NNfMvCDޝyu*&ci @A*@"D0@Ym3�PJ%"q2""bl$\)sy1`P"Fl(#sS(4F]Y9 z[kE䘵ߋ(Gr}7/S{=Xoz=4Z,<צRWNT�c.BT`느 !Z/I'k6v liYZU(;�d$sfSς5{d<eenf5I0+*Om8֎}G>13V4g>:ݏo9/C >KyԒ���IDATmxjc`OIXrK:-7qxdl @1B_sO}ǦzVz߸�V%HP9$W�A s4zXi6*H�$?'~cHWЎe5^DHjuqP@}l<$Bt>B4\H3Nt<ƒ#%3dLVP?pյg_[pDn?_P-|Y^~GY |gnB u(D)ƌzoz;C8Vz;0HieRuhi[vnJ!|ה.!Ǫ>D6j'd*lS/oR®&Soy3넶C֓UP=G+%اYTd fZzs|QD`:mZ);ҸN+S- K+n:ۇN'dD=7~ԧ<3)axnΫanv݀*( vm9%L.�|KPͿ+) GSq-= T'̰` K/vqd9.<<i֗E&UiA]ۧXO=<c#*siK0 ٨HݤdIG!j]2� 2\)N15#sZh/ER8'MD@@ �CbAmVb]qE"xl݀|T-]XRza h#0rծ6K * (x|nxC#S)ZhGD%e>?eW/Xn, v]bfyrfhro6 ?|wh9:ٴ*  Qc._nzkfڪQ+llTdDV9Xâ`uo;2vBPp12WN ݎLZĘsnԵ*bxkZsr"Έ#3l}}pl Wlp.׽ՎDP*٥ZutZs X,/7W[kp J^k5tf580V&w꯿4U۶#6€ !Y(H&b1 BpNRI2:�ηN躾Gf!t]w\mkƮ^bC^V*57Wqf ��X|v A#)YeY%Dア�0!w9m K0)m9˒2U�>KES=UV(JɨiQH Ш�VIy@mVg&SH%>2Ƭ/6pv/JPl9dK<l3wjc;<]gۧ^2c8UH@϶|cc챶fdL>'E�at4#D\P4QB邅�! zz*34v13;rʩ)HxEʭ�^]v7=ZnrǟҀW܂O:X\*kbfncRVU%h|�@6P W~!^8 ~dG}r#ZnoHˏ %jSЭwة}+rؤ"\J 㥌LTdn/iə2E7!*xKB ɺdn Dʉ՞h 9Z�v?|vqv`s?Md ?Hs` rG4Dq0U"2y y+A\+AGR'Kl)9<Zf }ABJW�'R@Bw2�sOU2'HeB!MRD4i}r{(^>0\?!�h ;Y i0҂doS8@*Ja&B킈HYWc(B`>Gs�`evrלuaD)h<FWO[sHRMH4BziI3JFBky `ɵ.i=YS'Z~^p5?4|E@v O"D'.\(6h9ރd'ޝ֗ށRRpq3l,Aд>TrL [!=QW4HFbZ6ڶEua9ﴃjYALɒh|#m 6AmǀR�r]i՜vfIVf�S8Upƪ 8|Y֔?|(̈́)Y_pL[# EHR_Hhq6` K0z%ő>_Hjnz s3�\|_>%|e˛',m bW |i6SHhP%㸠=$ GW` 4Bp4re1H*=_>RY* KPvpT˛p<D|#~b'Pm_7`M`C�6!$P5D&"$3"` @֛Sbzrq�C@ 43u/Fƺe9Z7lXX `U @�Tvj �Q ]\?ȾjƘE1Bke4Uq*On^趷J aR>*hm8=0$plۮXb�Y]=rxe�ÖՀ2Hm*lZՉFitsJa)F)5qض˥βtXk%8 "r+{ ]wxi.-LZ8:c#nh`T&Fds!%u֜�e]K,1$A78P7ԞZs9e�h�@%48FsW"h #2+Uj|`& Մ# ,<D;\3rp6Ģ5\ÑI496CeUq~p?8Nɶm,Hz=~)+Ph>BrqF uBѡ,f8wqifOlZ'vU<E*zoGLzGn)NJY<08o76 G/y.=8:ntc?ZП<ltV_wW�>] ۹?=//ghw*K;vg.m0{l</*xi;ODj?M٥ːo�P>x.Ν̅nf_e>>`_ �`m?^, C:�ғ_@"tVPϊ_]uc%ߘ K"pn/Uziy[בK4,zdwFͯuYYy^a^G+ EUpFO>u[ϸj O1f?{hervYkׁ3n*]tUDHraQ @,׬Z }tĩ͝[0&�P`dͩ2'#ףUaʀ\88n%BBpPk8j '9NGlV:& 84<^X A肷 謀X`հ6alpsbU/>%2 ` VR}Rڈ�<!66f` 8JPڠU5ƻY%w@(7ʎ}{,UAn5�0J r&v L5MGX v~``s᝕moU讁v'Jc;N$Pb0 y<%@b'�,BxSZ] [s UomZ6J{OL5++*`cLD`m˲2pWTt�,�&A s/@yfOsmZ6dPИ35=p}B Dtc?PBdV]Ĺ}|}s.i6m%RY+Th%8qB fF2ҫOm=Tj [EQOɣIX ~8%k_G~*iH*N;N UI7=wܩz?Qo4,ɂBK&<,hK57 N?YV/KZJ*Od(=AKrfe.mn#s^B]V D蹇osnd.kuu2RZ6?T?stK̸~'8F|"Οh<x`aIf B7?r膡rzc;~t1T؈T1YU(6BOXZX6OJ~JUVZ噖�2(�!4+sv%J\z#;Ńq$P&A�7?R2n97n!F%a76O^0IMM^ hU2GbeBζT}hJxXQ*$@|-E% ?L) q{F ʞõg&B IK'7-yzYGHԳA~܅72!K9Ը}Z /At_X)NN*�NYDbX�.wgC%Y2D/NB5MVy*iμ34QJ7 `LF'Y"^<P:h3I]3an®gc]i|hA}ī^=o'H;%L=_;O O$|Ӵڗh_�M42n,̴Itphc5[ﱝ#e$di %v)sZR_%��rf-#zi9G 8Ɛ+B7'!z!=@gLƚy]Ǧ*ˑ[JLuކe ;֥%%%+E5,OftmtZcb/Яq|X;bb}r6�$69KyfKxW~_T`lXֳl0%-APz߮|TZ!0R.w7!l2j2@prIK`}Ju)iLCIg}zQ.yGDlI"鐹 EnߤfNHlt9n҄l vcF)>e|0z&R $jR`3>ݖ`)ڿȘZI1b]m% OD�)jTe�.Zs,.n' *Pw4C\_vFv6wԙ�Ƽ;7tqG`Rw 8K-XS{gO(3@t7©ֹ76ξvꅭ' ڎc[^n@n <i!f|@ |6Ƣ7󭥥Z#s™cs^G\ư5+|gcKgZ˝ l�k0<]-ݠZp gbfxס] (CX˻^ Vv掵.՚;Y:l`4Ъ1Dq_ (�h[<E�ac}A,t-Ҟ3]  [N4{bmZ +cL�$vX&ъ2s#֙2"}!N۪0p;ƙsg׶|K!�1@ �y"��ŸKPһLhY6c6�B}<s=Cf1kݞ^pGޥHZT53|"d!K;I荙he 0fg$*R?Fk 9<))vݭ#jNh2oOʾ>٣/L,vm</v) *.]8[TP3S忱ɦʘQzFA*&99,O pEFs5\?8g%)9YzpӉl.lju)&A\jtgCJ_w_SlD ҵ }w[6SGWD xՂ5BVI'MHn,'Unf&#t?oKG$OU OWcX[]2_#7>XT"L Ni>o~~1h֦%z"lUI)TK[ͫjo osMhĜPk9S?M;L{0]orL1Ӟ~DW=Y4)y7y�sn;Tf}xJPEO=T 5xu#³^?.1|;Úc希u9Ltf+IxTlc'E9 SMl$SNXĵ�9jm퉱qdRwӝ�}/ײ{GL@wI/p3|CU^.=L6`З#5 Ez~F>[sGcy)K,sr9g+&W]T6="S-{"}bZKnjy>̟/ӻSh칊 {{d AzD%kʫaWa:#֢ͯumcrվQ(Zwl(%LK|RDp&ے�nA{͡rS! d :.w<LEGopi1 Pg}'0~شm +1uY{M >P|oR[#e B g}:c})''c[N &BR$BEVulf6$O$)bh\3|X б\ {MVQc}ٖ`p,l1TmLY!ǘUF4ψ1$L+ &  A##bכU��NMenc┫Ύ]# u52j`# u~srmD+R*۵ZRrD@R1\wdx) ^z[bk/'ΫO}|gօKݶ@iSp\`@ǩ փ/?u'OZouZs*!2HB|讈ӯ~{ί-tk`NxZGx^{噣^ktGo_cJ-㵺AK4410o|bO6snw|g^~œnwC"!8!C"@L<" SA~ S"Lxp/ᙓ>}+S E,6 !ԟ B)m6BvB$Ddږ 4ڠmբg,-=7W7橳g왭2B3&X@ X@Џ_G۫�1mYcr}\zr.G6"laG>)~N(7ꎟ،=٬ҨDڣ+uTK4!Owp~_9'69rc{yx*ƻI@* R=զs o,{1|}-xxИ4G~pȋ]*xKdT^,P*W%Ʀ yO=H<"YfZdтgī$ʳ&wn}` Z^0 `; yꭍ@N+iw̒ǘ~ϣ/|[F4e{MQKL�_zN>o(%_6_/=rO%"z… ֆ-22,/7<rGFqӓ $*TB}+SB\.SCH0U T(nz~i,WL|JVSMxa50�!7>[z䉝L9d%6]8_ <LG@JLal~N]t2CTӣD1#!�QosI`&r Ƚ$WIl$]!RUa"8M:m<Z;6j4'T$6 WO!P)M]ihpx,AR$_<_|`dfc3Y5|^~dG>OshG&4>+tہQI Mu(qjL/T K<lrÖjuB1*Zþ Dr }#}}O{u=&䵯 =_0ĎUKx0͠Zr$ܗ*OC5ܣfy)`&)4`l]/Z^ĤYnş ܹko"Yҍweӻ~t;FћdZ:* "�ֆ_0neB knsH4BziZU&B@CH,F'vԦvP̂wRL4Jo&%i͊,WX~dD]Fӈbw'`w3>pTnn2Q;i_D״5:U-oJ Gԅc/pw,(%!m Vkx tK0/NSz >BF9yQZ `S�4t z2M? 4E @& $f'!Ѣ#$#? JH QW'[ �r\]>&HfV~,%)$HOI7Zoduxlh#d lC"@hQ|9nFЁ.CDUTnV[s6K`U vV%{ 'w7‚Nr]_Y_lx't%XRb &n7Svʼnz0w~g<{ gXpr™G=sR069VՐ2@ ! Q(�bͣϝ{opK62�Y(,,Gtwß;zgO<kX?Z��Y]9{l om;6p��Gir]j +]G8]|Յ_;湣 ~xp/,9@`A ؀VXKǐI� ]#]l�RpזNm͟s,?ut/Sf;H" 88�G=-, dSe`[İd#2۶,l`k?{j^xs嗞?ulqkebh dh!Hv�mWG!2Za"\t\^QC0D$Yc@Xi؆WKhWyuL_@;2712'>y�F }u`&vF})]4Zԯcպ}͸8Vå2MD~908Rtҗ?7{V1_g/vDOuS]gys+x·~ßB&D%!(򿿦q;bxBBGH4T@jM'vp>ݯ'ׇڼ>4GW9*ü7Z!K])<33Se3sS/kPK\[?O0]?xTKQ~rx+'v]S+GNnkӪM{G``t'xݧ7mYF c2fbi_~Y0` MScxa&>"7'~}_n)V[i+ÿbuisM=Vry�bpÝÿo~vhP!#E'6 r{ÿk˜iv;0S :zJ6O{j5Tn{`_/_҃96]9c`lT N% #b=}V�ȓpER!3<tP!j1#}33k,)ICx{JQ2MB8ΑƎbxgg(ژ=Nv!2�,<|e9t{ 컮 ;Í);[l{H0KC1Ht~ybz+N' WM� $ߕ,<|ǞƽN3A#Uq:|䖑gjeL([1h*J0߰/BmYVH4fOZbI  IMkB)@|lP +kmvN %VPN%24JI%: DL`rD+KE);sNuL075~!Y)ӽ9X_\muZE2#8\kP?Yǧ/%x'|hIiSW0~"2^@3]PR[7U-+vW 52Qт-/t֖]9ԄcS+pX^ qY{ \w>ج5LKPZ\-�gϡn9rJNiqwMBC4J{7H^曬OO1,A-a",KP&vq( b{0R1T>Y_bFے\g;2^* ��AɦiZ^#MKCfi-үFѳ%-M9iYl&Hl(PUBz\oνǥ"2#Tֽy2cG|MDV6YUU`R|'U= B,b NK !_0hf+fþOАFZ[kaRGyB A- X5¥(8v-arl QYkh q4& la!()O1#lNX'rWWЀv d\E=lFQ)HHP4=K&:<[G{$t-p '3JH<ڏI2fHx]:jJ1 {'{ }E@Ьatxx4V-,.-{~g2w&g;+F͘"sVX hpd m=L;�zEK !NўlM#1�$B$6&}bǃ^u:@JA.Փ2y�fL7nqm85B2ƥ+l\Dc b4�X H:Q*:b��Tl7_lhd5.7 vBAfZklUZZ!hM)MkFQtfd4GH2AXZ>}3k/ߺ$C"¬V9]y¯ZC@`d@$,^npWR$Q+ed)E1Gr/X˱+a5pX}/4Y\j]̨W#Kf6{,GE'ݩu~awxؖO'{ FďɿO%(3:>LBYtLjxmcֳ_~s&]cT¿/.GG[\1wlSQ/%_j�"O;=Ԧ}GW'ڣf_BHSlF1a=+s^lB_?F  ?/?rl5תokĭ$0�$~-_^Z ꉏi"4ek/my �\~[_r:~.,,Y5Gs׷`cd%v =| q>?=?/ -Հ*BN駙RΪūrl6fO*Bst\_~Gn?/{ɕ=Jo8‡?~q9v&(TPcC+Y/ ֳ3ZT<(T-7[9(�o'ζgY/kr)\gmی±BJdG貖'4#D&0ϧ'=Rg ac?}}unk8FoOme �+�90 NGjPمeP7>`w}`2ч )E(�?Gznw0}K?.]޺}ѿr>vH8{0یUOC9 z<*gno=ʠ&y]2C c!HWond2'~?@^gtk82 0:P"%'ukv<ن%Ňͯ9k,4\{AG|=+i];Vj)^�M'=%93@.<z+9i8EC#b2܋+̩]( $Ǘ, Õky3Dd[$>rlރ||QEބ]>qw\W>_pyUCɦ G޽<}᥵SSkC?|9Q4EeqG{9,['[4[[QY':x~\j#7.lk ,X*j8ht !=qlBdkq <*uT.jҙ͙R~UD{^=JSDpzx)%)=.H]7$$ ̄X I*_Q]LC 8d9"q (s`; NT pw}t5ЃS  .H�_I݅`iYF 艊0ŵ3O\xx]CO^8uq-X3 Ũ� |"�O2i@`�A1f%I {t)Z?^i@ 0@MU1:hFP ⢧;Hp$u�::wáF28cfH[kAK_r Zh`8<!;wi!>`|o ׯ J%y4ˀ"qDBR JPwx߸zy+<c9 <`(Gue>Gy9E f^f 4#K k�>L@ceu> @t$izaw߃yJhh0qZy{k5FTȻ]<|sۊmG 7~y*�DLsY@c%aDLbd2C�ٿ巺C9#Ho@p.^81Ƴy%U :[~QGUBc s+M1?Ϳwhй l01v[/?BTO}nvr?g>wݸ<_i؍aĿW,>KZjs|;?gjX=_gO~K۷.o]I2�|<`ヌȉѼQX2o+WFjVl2lG O_o\ ñL]!,|N0V_Fr_v>l}} {?cg[bsG?{VPN3ɶ(_.زDkMX9/Oz"ڴߺeWkB9�JqfN=C5faf, `Jq<QdZN <sy͌zw7^zk[ý(*B'.<;‡>vj);/Y/-U\jtqq}/} [/3 AGO~}MO}} ӛ{a$j@pʹ!‡>~'5ܺ=ٺ9nO<{XnUES%I߻Sv={!KKq@80 E fgs)3h,ۈ˞#;ϮmM ˹g~cx/6i4&[>C>ҫ*ҽFwq^{qG>q`'ڼ1IMO: Ӛ/>kx}x蹯ҠpХ}Ŧ1JpfYGcKyp(Wf$yVKlaΚ 7}EI FgZsBVn\nD 3;WSA:3OmS1C2�/2r=%Z[6<,yspq;Vգ>N~_skK\sytt$*�VOuL5 Q3z[b.g"�t~/uݜnÃ<O=ҙ }x\_lRye蓫A3'޻zWQ4e�{DkY<crXfkgF8ݼ9>:Gäqy\|dn>w< p�n^oaaTN{a49RA@KC}}8Z5CXuPudZzU@{Ui޸>.#3 &4vkGA!)w6C3+UKOVD懟\ϧ'>pB&]J)gVյr43 캣|;~к?gU/\юX06{"3Ù25O3Yw`M<ڃEvj] +|&؝)ܔN}sAmm篞mw/f{[yqNSA0WdžUeETdk^u708wAGh[aM$0Q�hf D,}"6"<wA@A'RZTjJ2+"<x A}}o_5yr_ ,뭆<rT|HM޺~pf9Ȯ<x_)+W{7^ Gàj|dҌPkɳXGc$u8 xR/s =wI*�J3patPʨ]@Sf �G�$!0z~4q>Lh0!hD%(*�ݔRqhB >E M�'1ݘCRb<pq}҉i,P 0Z1(JAg,F�L$VB Aw!:Hpr`tx^2yѼK.J _@ "|3#R (=Pbd NS7mG{HDoꭝ蝸�N]X^=ػWwo\ۼ5:H*BuDy c!<+k8?OMbj /n΂Jw%e??2DDDE8Y)D:d,2dd"R*?0cD؋O{jj.PEUi$?rwdr[g(vլN8O8?o0 e&+~Ck[oOOy' VOvVւ0�X>o?woAe%MܙCA)o8x__'~+9#08h<W'tkO͋�5nNv't`{Y،<q,4zr_/ylNzK_߹ _sDj<L�'3{C7Xnӱ\^ Vւނ3>ɼT-X\?~x4n}AC|Gfm \N`\Uqu> Bdwm@M+{cY$x<[Y+a �JOMXrloJC` :?w?qvo' ²T'h ]z*(2͜Y3޻>žNuNe.đ:c q>;7Nu~.\v၅ٯ&L6~f6.nYZfj# XVYid;49Rd͵O0 X\n?~%( �ErXJ’_uF |3-z>vr8_()Y\g tʹ^4%oDЋkoXaܛyUVShA\΍]~k*~[p '~vncKi|tނ7'M/\}}2B9@q*2vT_ujȿZ'>T}m6]@6yNx[!;ksҫ޳~/ӱb_z<7_ځ~=oM:n�◾iީst7!3Q{ݾ<j{Զg9W;* ^zv#?z]C?�IFGIn`T+ESv ֕Gf;J@&hkŋ+~7ۭp5PUBfY;~G϶[ՓՓ6ӉfvK *b6.Xhʝz CZi#ODD2R4eV7B 6mof߯<޵VF<~d<rriMk{ |ݫ>!I X?jzlQf[SCY ԁ34% lc^fvUiO N( aj<E̚z$NMX jA_ b),l;&ykU[,W=wU^Ȿ%AH `S:}�U1)rD @ LxV:[SON/�,!ށp_1a%�Hc� @hRJbBO|%N$=B,AkH@0 # 4ҭ9�N�j_�Xg2eFA#;_A 2j( @!1iPg@Q+d eN A@ A_hdbDO,$IE2ғITgU� :`uL1`~4T'G<" ʼnR*5kZDd$Eff Z##KȌAMD(( ~Dol-D+gG:gN?nݎ'(8|4JYkY i߳3Rw0O[DdF9I@DԨ`Ԙ'TA:^kލVf8#}^lc=®F4 { ׊@VKHUI$3e+MO}ref)mQ~WJ S%�|>RB.rhWo_í^h{+Gd ť/QLG_Ɯ#3O|`ޝ.g]ɤ=FFX|Ɩ<:iR&Mmd^xpa䳿s rsU$`$ Wv`[d]_=w?O�ֵGF*Ќ#QM.=ճ[ 6M<p �<iڋO}fx";PUP� P}X 3˓ZbQm zղsN$}G޽2�Qf/,,Fs g~{`7z[sK+cl5>,͜]_Z ׯi2q?n]}{>ʥ}/NW)c*)9Plf'3D[֓tEHH-Ēa, AUL곿w35 }->ɳV]\!c-)#ʄ#ʻ=>hswczqBǗNBf6Dy;ꄕn9Bcz+nd,XMѢ̼~}75Dzs9Ynn_Ԯѡb lGs`7,ƻ FjmZ*1 ?zYz ` Bh𢁍\ULhbө~Aif-xg럻_^ d/>e!,  0OXZatN֯N!JpSz~S-2NI͆NGSm_)SݳVNt޸|>܌bu[/ FG<�ϧ, %`# fjʲgIq2J^n&Bo;uv;w2J^֞'>f۞jWp|%AOƑMX:2`k1 O9]=8>֡NW,"⽳<߈58Vn]-A0�YRT<b\"TUu/*B)Oh4UdQ5ha �k )r nb?nB*8¤VX#Lj|W`qso tGl "m!-D6p+$6VipCAYlnenh=jiM'52Ke RRXV":ߘ#�'ϭ<GNYTwowXľ:N2 3!R*T:"7(�P : ?@?CݞGĀ MI@iXU P ΑN)VL2f:*@_HgP |0@� ZR<$LG<$bք�R{ԠRQIg8="@0�D�ʏNG.pPc~4RHR+�:FTC"R(I>@IB1Jbfɨ�̚YkJ�Pf.εJAK$a_,%1|-=W}r}<ϝuXuӗT$!juO}(3K8$TdfW y雱ekȌ A=Q),G fB(QX ,f6ILnzE߈#;D�8M~WdgZӖ+a8R]XivIX2{n>p7`oƍC.RbfaE,q 0btb^bgR"T}\Sͭoɐe%O؇7?w7oM˟s0U=`)pp̘�>#_qUo(D(G gm]6"Kl6T.r ߋ˃7,!lSu�nhes5S6I_b-0q4o^X`7俽ln�~g/_$gv R|5s*΂V8sH3ٸ0ke͠J\bT^~}n)yof 2$0$_8;Xyv羼+{gm�fR(cLq4h lgghoF,l�̯0xvvϥHsn4vVوY-Ta6"3G?QHkxc!XjՍ2 Y:,:T} `@<ew^`Ƥ[*:Af!E�:c73y{Lh 'h`I:tH^kxyj7_=>1V;J]a>y栵ƂܣINƋ%0=j[J Vcs>>sQeoieFMoG4AJ<nV>,fiyfh:w 緇8Jm=!Q Q4tmIa* "U<A�ځ4boaZSEp|SU<`|KѮx.h\+&56 +Jg# qE(Bj'hv&- ,`;cԪŠTI`Glp;%B*-p !߫h`iuD )L'JF56ƃI2T��z?#:B K捃(j_`$F(@}.z~4&'D U:8DG{קGpk8X?ڿuwhýÍ0:dO-xxv `B"BHt0?5ODyIx<#�C\bZV,Ԡ R�(bMHcT?MI?�q/ِԒyʠ2IY`^@Ě҉2Ty5&�JXi 4 "i@ �J�Ip0}BP_tD7'֫7 &XAoN{K?rhD�0-*Z�Kٌ8(JD("4KDEEL�ce X_SmcWP U�Z�JL.pSg,QT%&وpbM=o<rim7A?_yfS˟Q?�s_܇<`Xp� [,~@{HU:Jy;jx=`B fC3faqM *ZguO|tͽͨI sK!M[mmOaE)fZ 7/|3o{,PCynO}f _à0scl,T(3ebcɬwW"L`/9J/|o.96xb1T?TwF|ߨ" 7�fzw#ߺ>{2zE[>{ ):o۶?w_\Lr'MW}X 9ED9&ӑZ 3ۭ˓?Gw*ʈZ#q!B8Duyӻwx~d�y9vg7]W=[!TMb-wkʛ@mJJζY\.eSڹ̵7[v4v.j7 v*�,Ufx>Tѵ \,ʱ.>4ӊNϮOFR)}mɩl0~^R"�엞{pek,Vɜ:1um׶ۋ]t׷ }2^|t|+[qtof5h>`~}7wUTюo}ek:|*v>=ka?ǐgD5NpO*#Ki|`&(;J/¾s;=2 XqZ<w%e6o A\> ~:Bjʟ-+y g(T-9� QLD E<ھlx�0Be9pL>a a 1D1!_o6 Hdր,<灗9kH<,08؞MTf/�@0ޓ7vv'r >v=ՊHǑʤF-'J+B�B pt<{_+\yo]7_ߺ_}Wvn<y0 ""қNCH@DDH1C "   $Bb@(w""@AC#>(] 5B!@"n^�%D+ yLʩpy~LmSe(�@D JsiI� fֱ ҬpjL !}qL uO�R1Y7 @ Hiy5`Հ T Bh J 0y};߾W|usg}5`܇>p2yc)߶74 �J$N<7EM�=O5a-9*? BKEY|FH` O~6G!_g޺41h=?K=Ֆ\}?m>&ھ]m`T#H.D#Kyv.ѿ֒Šdof;OESHWcg~] #nc,=@靸~E&t~㿽ʬ#dlJ/?'oC^{ZP�<Mͽ`;\:ދnɓ*߬"݆Jv?۷*ĺeO.l<?۞sllT>Wuy{> ՗kD~@ڦc߹/z?ƻZZGqaO^0?߽q+v7?k7v2fe{/wg.;npRw>>h4?5ĿFbO!)ݏן?꟮߫d׶t2EЈV˱o?-xX[ʍ@]' "fylW!<wi1>A?Y?ؽ7[Kéz 2m+dUuWSeḵ(Ly*}u=: 5>00g9mە_zVcnw3ײU#QruGqO<SiU䟣Q:Z)F=-fw܏es2|86)x sgp뒁F;/f13 9,Žo ɯ8RLs|$Y[X⃅w7<_^v;E J@TRRCŠ"#H&,tX$`gX;2N2$*XDObť;!|fdU0`& ׷_}O7n|kW[}K;;[7n^^n#  B�1 y§lw( IsL@K֊ff2K2S,hQiJXYz@|A>Sq'PXBG*I4u4TAii+ʓȌj 2fЬ�WJ)De X\ V$IK%b1˄qeuyyy5.E�BP}OtA+'rȩR BƷm5M!3 �P)Z+ql7P`�|xi'#$BgoiɛZI$II"D+Z`FJߜœ�7Qj \bkOH/q?oo<ҹyں882ȏ>u=7ߜշ^@_He?3[n2؏~_\ѪxQ'f,Oi7_l{|{_;왶 4wsmc~e7m>mE3�VZSyUut9+7͞o +y {. ~V'{!�ƹvyx۫9o$nGwwx֯٘@`)翼} vP}?\{J~ζV{ `O[*C\O39dy+nQDTmw'ڋߜgկ/ѭ|jazƛ?kw՚/~r0sTmX] p|\7v]d�Wʳ 16v/~j~{?7fOF3_k, C?^޶3ߙٽQ'tpc߾̗» O ;˃3×x}8"|[Zx�xԊַc@;;],g X\s.=P nks`ɪ,_gBo_woY;/7_:<>ϟwpȹ6v\`ޫ`W irhw]l޼TmA,G޸]V:G_ۃ$QR"nLFwY/2!K>{wNb׶o])a3rc77gőz;W^;l4swKۚur☌䷾y._G5W}<U8|+m+ƤK&zo+,A^:PlXvYq=O՗Vf{r:;~_` _ tpl A]Wݪ>ܳ_qy�L`0CBBlɊOi"+<FMʖY6o4wx<Et ĠV&u ~=mʱa]?@taު@lagojj�SXd065d$͘0JYj.,vz oI,ǣP&uh|m>4�y=NcC#u0VQ$Af^^!h O9=$|U£ph`g}yk~mzpokiąϜ/. Qi X2+cˏ5&Ě@+`uRIu-͜('208TJ2XűbE*JTdtfYaP ujwi:xzt4M&i4cTY8[;ٱҌ503jZbP\ґ %"#P(l 9sneq%�Lp4p: 'pc3gESdZ,yZsQ<SƩQa<bi^?lK-A)QD R y >pK/\ӯʍ EZZA9@ PhD "x[;ԊEne`uzt'q,D)Z~banO4`lB<՟ .^ NU8AIn-̵[NL%/K<؊s.տwG52ѯv>rxbZn7ťaR`GMsFR7ӿu <OkW9,:\ _ _{==fkۛקm|f8DZw!ȿUuRQg r᯼ɳO0_ޘ~n^}lVFVP*& 3nEd`|/>7,oc;O$:*L|mƗ?3g|l%|ssg`y7^oE.WPs)mB < X)'7^yŇ#o[X6U?߾2uY!Km_k|pK]Դ]pwx5ͲVOoG~߷&1 3_ݛo#wNn޿Ԟ{=F\"+2<|8]{sAu9G6yWɺk knOqZ+VX[YlCƬ>CM��`//kT~O~J?zG${ӟێtja7�F\)C(%l֌Gs{p̶~ٽ<umv{sQ~Z\`^U3T, bo:B&V1G  ZKO]yo1piEQ7֎+nT1PCڽG֕q)'Bfʼn[50L!7. ׯ~/{(yyq}$R}}+0i<{.uV|7dg鴘sX[3($;?eo}^>wq‰QJ,<\s>"b8W8|=Λ^~mt=0yyc[/H~qst~"bx[c bU_SDNZR} sβ cG3:kxke UA!t~}l'hIg#$d5_3g0\nTX"ܲ�]Ʈ!A$B d뷭1 2H a#nϮRx4щ DD{Hlnz^{ HnMvo xJ 1VHF1 �{+I�$pCpIr4!E1+R s?zE�7&!<LBb%}%ct<@H2i͠VA$TQ$8Ҷ\̬o)zSIh03K%Q4*=^BL7$@ N0t)}pPž O=?@ƌ+d 5$G@` 1c" Q2^\pqgi#(NXK5yu聇WN]vR 쬀 b�@ N:݀H0#fzᲅ R/ ZR3 %0}*z?k7xccs{pp8//@� bԦ�Y)$JX0&op<{\ 9BP)Km0pcLқvmosP`4̽l+/4=HRO\~y߽cXzW{�`/W0@^ Z�/<7[nxiAqJς@[pes //iɳ@FȮ9W䓿zki?^x/[ ^#�/?qsĭ+SW֎Oqid" c/ny$tƴ9v>׸ZRJ\@u?o~2_;|>ʸEΜs)A9i+O/m ϭ6M3Qr=H}?n<'??m#}e楱Uzb�;[^э7~>զ0޼9y;4\~yg,5:DE6ՠt |\}/đ.!|;;9 7'‹lU;#5uvX|⃫k>>\Za{[歕[ĩwp)9˽o]}uX,\nhM* Y6#11* c7/󞏬]|d̅^{>`7z;7=慜ȥ+'63ߎCtyڠK~@2hܫ�I;؆%B8po4X><7ܸ>6\[`!DJ7v*`.~N6"\ ^ ͨUT­a!*o?.>p .,,ܴۓ7sx#-*KthMw癋YlX[?u}||7AnNmݚmE_G޽B Ӊ<؉^}~ڤ\+`ӡl�MC\"+)E Hq‰*mM#IV8[WЭ5GG6v6aIrL:`{w3߿y\C8݅vnޚ_﬇6e#\Gv!T} )l~D8Uw!$#p퍣[-dOcUd!�h҉_ǥh!(r{BGG/8*TAQ|dEP҃(~q2&u`̅N{Y@W8"W4!Pq4lM6tH1ڙdU@#׶\\>?q^Gj~KF޼2tݕ@{dЉCuHL&*ɗ^xkxbԹމ3L0kޘ޼t`˾$jƱn̗N\\5<w6P 3]}+DCIR R_Ƣ"0<m%; `8=S'vWNtکt,wNĺLcԝ`f:j2Q.\Sշ~mĚyiD_zms{_<#[Eq.28 s(vݾWe/>d(To|0Ķ;WV}k{JpxeיˁmU}fnU_́]ePpl$*tH+h/цf` V/č Z1Bڂ``G !5Xh,�uM*+bGBEi+)C9fƱkA!eɁ˯,(d�vm+A$!@H+-7Db�bPRC^v'LhE  d*7?-�@FP09wnm]ø@7/H'R(N(!=@@><)JwJC|'U <zrWS+vh c@\ȓ?9�8:Kh4R:ѱRKI41`BB Ԭ)ISEa"*{ G4$HDII fNL'Iz "%q,BQ0k8FGRƘ$GNWrJ貒hkh:Z^:<etXk%XXXo@1 "1p Á K@�`a.> OV;hY {Jw. D$@ YI Oĩ3gMF`w !�"/[�0#kJSkgꟹ؝AZ*D0 cTh DD@k @ĮgҴ `f=@}dBdJp>rd2f(j™`iͬae+�_rTl5\q}(2dYǙ^\=<⊿-,AFG~<؍V<ʂpqgvq<bbw-Y?`P}7kB;/~sWqC£A2$;^aT/;tX$WRo޼ŏ~l$A:Weی6R sP3G{W>?\;yq/xӱa߸4 ? BѦh)l5pA̟>]!w-, _X Ar'GVN=y-俹{g;+'Փ)f}{s;jp !~@O~ߚ7^moF4>޸ޝplLT8ȯ>7c[r6#OpѵG$ӝ%oqG(d(o_H: Q8KIT,hwsMʸճ3ZECI67) y;v#{v x8GGA<K:ᅯJ`�ۭ@*8n(xDx[]E.gUh+J>Y[?�;a! g9#}ѕWz?q ϧ0&Ãx8øؐch?y+!"ݺ<uy *+i r 7Ҫd w`7'L!; hˀtȕ.䏦_߭f[Io͛ӭ[S;zhk(Z6hPY� 6-gyݾ#Ne8QTl:`c8<p?~y];Iy?C�p#4G2 ϦkCT7/ZG7Al-ڢ÷xCB%+~Vs#$p /8D :"T8QQ~ơ[Yvf:낇<&^^ꩠu"舠Ka2Nӱ698~5lFkXg �0ˣGDr/AWO*DN< *>-UeV:, ~:$%GS`7 ǪƴP+}b,,׻:.B?4M@huӉy敡zt( ? R$qHpl9[ ?-'7;ra&|26ÕSe_+PI䩎X%W}ƥʉ’%V>]:y=9,D :T9љ";ZcP_+o$-߸hߴ:\ܯ\D&o0 nN_3G+YصV揫Ʊ 3QPl;ZR.6{\uOyZ#fP't'@^HBV �?ÃhӰ)BA~18/{+AFZ/ &�DE�!)@E d @n|$鯝\~S_> &+@4N„ u,Yy:QO&tytYT2Vӈ(0+� $qD$ljJ1k� �QL#H("JX*ӏ0h2Qx2RalmX: ^_^d "5Npdࣧ~ =]4'L$&fo_.P͠XIcAN[VcO ~v[=q/*��D( Q/3gyÏ�w;8 IP5D�D"Њe"BGO?9D=0^MԅñJ(YyV� Dx}wZK�g%" 1)d$D,͊u5AD=ǸpكUe>9Yn|1o1v) ăŏ%`(6]h< g4 `n"9K2sw,1�wKSr6347* wdvjO*3稛!<!Ay#04E&du/JFФ\a$YKo65q-2Rp͘�x:Dˡ*W\}0PE_h;exMk8;qȋ g��XnX<A<NsH_yu82R>#hweM3PjvKg40vwied;嬃TÚ_5swvg@X?PF*2NeQ2ѥ���IDATN숅5ҸlY<3X,~Nx53@\y=l%3C_ G-K8V1֦'[ 媼'>qo&m ϷPz -x/yEKN,9uᡦgq'7BJc%y=@al~B?oiPfxTrBdtWoFW<3.5;qEYz㞨A|4n[Ƀꨚ ϕkT8RkmJv^�{4+8VA^XF[A& dNSo5CL#Or:JSX.-V}�hm5;j^^ӂ{[U_ȭ. ~)9oVXKq˚n]_'[cY*k�YѾEd8rBjOZ [3ժXh.RNI��ZkbFDZ!"e AX9;HDkk+ˋgԒ0$J<Fnus,'Nu},SV|l\?8ܛt"(ψJ*DtxGWK"x$x1XO`'\q=E@@:@xˇq`话,vNn^ݼM@\� @J:T%TZ GT2I$֠*BdBMR0 E d{9BDJ؏"-k�� Zrd =bE\x_."x}<uON_\ZxS"= 3DQ2DdD 'Qd((&;ļ\y|wH@,G\];-DӸﭜ/v"azt1  .,u{{e"='}}MQ�||JIP @w]|x)NFg/,T䑷6^,ւQ f �xY;ʓ=@ݖ̬J HN#!Pu ^aUً9I\kvX;.PEUi2AirjY9p�cqMܫ9aD:Y-eXތxbN[Z:E(жbhqb,]`R)w㝸/9D(&e<| =NF y !E-v%dj}=G=Ýjݮd5Pƚ6f9Y�C\݇;AN"ܪXJVlKmFyl f_v:6q`(pw5.K/Ҭ�F}gyEΖ!.a1 Эlݪuk1�0K4vPeuAm ung#8qJm&s@y}smn|ͭ&nH7QRا(eN܄ YYW^;}l߶U"d;"W|x~veoP6x7szEC iS1l<Js~q\Q}�{*K5UU_>:+eX%=&B|Og`ccvK6Ѷ`E% 0csi5RkW}%7jdf>>!r#yU%8 B\3>4ByE27fD ~nvt !0c([nR|Ć[dc`}wzui =Ά8G-H<`-�PkdVV{ <%'"Z)b#Jɑ:؊O/V}0Ovx́@2'ᥡ COt#~AWhNP셡NQWhZ;G U΂ba{:+ɞ'z=Ã/w`<N) Ni 1t}=B`ԚȬ�DbY33k"==<B$bR':Dl ],Q}B4�1 Aa-E šŃ/Q� z+^'Px@P �cIq(iFSqGEʣL"ZE:Itpo{"9d<s,< K'.tU:N=tW4 HwR"!y�A2 :-UbqtM< AĈ`8>'^^waԅ.Jond {DƞV Gs?lEWMXVRi�fLkU�;;jf8Xl}ddeC\!3ha71}370҅>1k x&{u<ڷyY:]g m祬MѮausqH&gk2GSR|-Y>y"D0Z"@3fopj8ײCUu:6r>j^xw>[n@2nۆy~}wᭊP85P[o"iU29]qAnXt3-!\:z0W5t+,ϫ Uyzj-DLjTTPYdnrՌNcF#Be)`mCyqykU-1P0#GE;meq;ły83٪bǹ^fkCH>ݳAr5dv0gz~yU/bPq|tv\`?hGYN؜<AY"49>OA=)8:?ݞ\$y5۲Aݍq<UNR! `FtW}5"D<b_)|#7my3w+W7ki,P1>Հ=7BC=1L'8] ꮍ Y6h| E;a0s܊ ql C\TܪZXR6dFfd"^@ ={*+�H0РdGB` i 'XJ u2*bYzA�R: %^88ёSwy[r`ktHnO[8[O<dDs@,@@h(D "B(jD$<vH{�ң vHI �M5�.0k L>jVWx*[n\^tWN=C+݅" HX{}� I|N08VNH'%D�pEP&�q8hQ=>9q߃+'|xe4dȓPtDgӝ P Ž _#kXZ@Au 持+Ak�`" NI"^{eT q]$ɔyB"`P̬kN4 ̠R !@IZ Y3pj`[s'3{TUiH0u% ܪ_`g`;[4[74w�&<PgKʔ~z}.BeFgr ~�KM?. 8MrB9Py[hؒi p,bFTP)!%R"YL8DȦtVK1VE%g!51cCE  7RvʖRiV h7J`�L`1G*d4 iU_f< Bm`[ up!F[)z!@U@ ؉u!@7!yRJ[YvPy [``!Te6BJ6vMF!ZB a?r=&ȋP1\|MB:uVX  Ŏq!p8`FtP}eqӡhtk !0);;'6ȸ2]dOs. K:48l$(EKpK8p #**B}#1x~$VS[up!Q\GH8Ufx>£_'X O(7ϯzTE4]ō*"翴mΊ\<$7A!dJo.-CR1\Ln͸8F=)gFU<8ݨXu,MlefPK" ҲXڻbYl8tG˳/VR]U'"Bq,Dh2# :ogf8l�6׍ O0[5hca:m[fga;RyQicC�qx%}+9ڵ eK\^UqfX8VbuX Z_QU؈ɱSJa66Vx~q4iEo Fu>#�6T ƢT+]IΆ�ȚBH!HB0 '%f `ÎB=NQ-*0p+ 9if%x8Ó+>pd2RT0" ɔ$'#{|NhHٿڸ:[oܾzxs?{bI $ ! `Ї**$"2KD8=!`:yhOh"O:P#O$&,Z (3hc#R=eL躜h=^<}~g-�Po8i8.unN )#r_!@ d &GI8@zx{`MO\x3kr9d̃uF;wn.�/DW _+@Q!GG;@� $#9IkYcqtD>P l={��1yZݸ:9(b||Z)Р|^uN{ %" �D@̙6:=)zmVյVd!'crm{LKS#Y_]fPazlauA.T BS-?OGSjv6 ༧5Pf!WDf Y]?RzkgF B9k\PtPBB͹5B�.y,;րkۭb,ρ #8f=58EU\]Wf!Ud 88B"ٚy^^ ,\Tߝ9޺9l"CyiE Uc77B c.`,ZLy ֠)B墙Ƿo\1YzfW~ge\}o<ql!wnL`J~EuF)Bu]߹q۶N<\j/#NcWx1c E6"<>n!.@f슩|Zu~ffdέ)rCf{~z.+Y/QQ1Eol`Ꮚvi4EZ8XU̯.l`Wx|ָC09kؖѩ# OFHqlexcT=S}s; kWNXQ#w> !N6 !*3x1P9`5r{wbApeu:;s&02yQq []}o9_D�.!)ajX^ZߦƐ*# Cq%gxWl: >� H x(@n\:HMLbF" IQ(yrShx<bxdH4>tzqhgsx҉^g!|0ƒk[`qQ11�(. ã²JMk8$O$�IUH,< xdkB[t<_DQriurߘ @R@'ăP>ۚD�@Ǭ^?yji +zAcIsn&I[ݝk/'սp< BP2~& QX(5qL<YYzb<xkc_8sf|JeӽJB @0yq~kvё}}tvk$B֨1;57b  z{c';Š{@0C8ãxgyk=$r:AGD)_m8{%jD Rqc�P<�"!;=j <0 ewl` OnVUmŕ-}Tݷ r9Q} r_JatOE!(N{PB_CwI႓K]"V>+ʱ}r9֌ü?[A,,*9kZFfYBp+riVzMbshSm6/ȁUSSEd'U(殦Gq</o-*{Η@nkvRQ<ĥ֪(VC η]RΨmcu;5`Hre^+qYG*/))}@q9)>:4-i a/::5uW<3:}"\hEabesAeڣb)j\Q!CqN* X]N,[+jtKmfrT4fС8ֆ̡(**d גY7huedmr-ѳ7ڄWDMcιm!7s<rol~ӾKo=l",y)+C KxhGs7w!1-Md2*BL)jR|n@ez(v{0sUcwq'V4AAw80nN�iM*~JX!r@e_puۖ}UH'X3`Dsmߡ WhF!HkŊlXw %W1Yy9H^s3^[j3_+XY?׸[iJe ~@dUvHKڠngl^c6?ud v>&63v~jپDo7ma?l:slrwnp`ߦ:= Jc yxQr3cPxwt!QRD+GG'H'24ȊH(cMK䉀nIB i2LƓDN_t;Š@xGhGI4KAWQ�3hţK RKOF,P�z ںupxtԽB(TP5h AJ룽$\ Ӏz:ӑ�{GD'(NvU'PH "!yXNƵN< ׯWA"5aTp~GHox 'Dxi؎*O(Aacb~A_kkr F`7::Өד{8t:D$j2 Q `8I֧ZdDGx'PG@!1!!2Lj@y^ '4ngӉ A4GG OD̬f`?fdͬYJL f*Y՟;CX5e Y-U*}d.|6?r5C%s\oD|[$k6Ui1Dn-qD62G3g~U6r9 K%_>چq)j7n-)n.}ul͵/-m71׮C6a >C!]TyYO:mIz=5b˷j97Xm=Ќ'm n?7jU_bG'z3"h9p2ousE{بܿŭfkܢ3g dREaxk@?bq Ǧn^odOmpoPzs=@@廦ka$ٺX|C!<,K_jY<|<"M3 !=A+r43! =s:Oc6t۩�[gAv/g+!zyyL%rCԄ v [ų6ɵ?.7,n qjͻW}0CۻĆG}�NZfHV*BjH,pI[=!wd)f ,s_qLg;^6v C _ cx{!!3 GQ<2h1E_v<<ED'aEZ�JMPM19XQJ2+ i+LxL5.V|s?kdD d!H=Jp&2JT*&t<:AH1sʽ'h E@( uCHDMBM EH>!jtNN5''$`q⑏ thĠ4PG{!@O%:h2 4 6~E5%1'JAu8tyK<t '  q498L!"%NyjD)#ybg%rLJa<out+|؉z2Iqƃ)BG$}8( 'p 5*R"= $(3֐ :AC-@A:]3!$&N1kT" V;{ I֬})E 8s^p=is LfvNX p-G8̽8fß7ˮ>gXqr,= "IU^gXO$XȹNO},hsenq2!U|O!9ï*8VDvf rEA޷*Z!R@&B\8 0(E60†iݮTp9A>SB'4 ۰뇼eDZB,;qU[Xi.kgYZY@Y*^!p]6U4"d۳m\%*n=jGdczÙχ^090y;Bl{EH4]m#l;_2;d~\<r}n:T5v:q9f}C!DN{jӡJβ3Hf*blwwn_#._zca f><-J�5څ& dۋr ,:;mY|iCiBsld#"s|wmܷ' 3m`4{uX7v(]{V}{nW ZiߛE6T W]V&oOl +fh2{D2ÆnT3<Udʾ쩃Θ劥5TX /X;s֨ΫFA~["FiJҤJ Ox4Tq<X) $)9Ad&i%$EOHeJ+$}T {}@?�4Qu!PTqE*J0ON;!*Qك=;�$4XfN X'd瑖>� . iEQ&+"< <#?>ЊI#'J*S,@DGH "@b;JGI,�<BxHWF�BWILh3J=Ȋ+\ ; 00RM(( YK$QG$zB DUX AÎ֜ĄZ&SHF" @iҺ#z(#-V*AҾAG{jA5IMTa8< !wvz"֬ҳy RIf5kPZ+ZL<OcE$%hE�=DTRJ)@d�w!" �&R�h֚%b��@HMH^4 sҜ9A#;#ā9j2WlTnEm93O5)L̯,4 Ti fO�P P 8ң0U9q1T>u0)]1L` b `)�nsE0zlnkO71e,ۤ'Uzy96JF}oBcMcSEuyЯ-|מPg6i]P3�,N!lJҜ iff-gxgE@͔*XVsB#R@H_am"4@({Fn:@ 7:p%ۥN _xBFVbLzyG$ r@H9)]g2!h o(|*Bws}ou,ƑKFHƮI|+6m:vgg? `r !*!DB�ʡ.E0&H؀m.r!܊XyRBH;xɋL d�U6Сcg> ,EF7)\O]θtȦh;,j)J`tdqmG0)PV8'"Y\Y68�;$X%ϯ#]k9`3ϲ< !Pu= !V̾ۍrz 'H,XH`R BF"%BЅ|r-O#42vP17Bs$ !#\@dAo~O�yaBHq Zc%V`5ɥq jTimFǺ58 oMds58Ep " OAa u>8խJls>, <uhR}m"ׁU3U_*BnUR7-<R ϟDy>V//5 !'<V}X7-`S4`|s[R RcTcY^k.h/,E}*#H.c;pF7GJr"!BU�KZ $1OUlj` 2QXhOԜ Ƃ$(]ZfJ! @HP'QBw^=A<VZ)Pő$:! �1`@̠#03kMz|ČLT�Z2 3jaM L$fi1U ZaDx G$<.a@ړ @ ZB HB0XG MI1 OK- ֚D/�RIP8�V%0+ȄbP6bC<�RR너C"d�tD$<X0t@ � A~1{ :FRIőJ@kB'RRF N^Ǒb5bbe8ֺ$1AbO$A�b�(�H}_x2R5"xZm]uﴷ1*Q!of�hCD�Ӳ�fֈLrD2STҡGiͬa tJKWJdtf[K[AX+=&/R9wܞDvܠp-e%BϬСv^s`z#W>&{] oQN 5]k٦lvNα@Z5gYzjٻ<6SF"Ķ\<>;c4ThT}6Bfr6-lU =s8ViD6- QX۱(JƆ!5{a,Lcw<3 k0vAz`hf3vgEECp(0mtȄCΑ޳˳df tbds͵�+,n>[vUϿ3=pw"7Pe[oDv;JoQ1[6fcg6s~p�N880SX"ű%=-pGW̰x$+9TH#;h~ :@~6Q{)3T[M3uYKX*L1]0 [yZ<APɇ U_FD'\hNJj0CM4Ď!28}Ön7p/<rgPV_3~,OT..3cKY"F)rCmnpʌdŶgd|<5BaQ3fԨdH1%1D#R2(X!+S ddGI2KL"15(D"%k C F "{ !4� 5H $X0@>y,40k DI%d4@(|JVSLZ� %�*fЀ9GG@͐$R|x$SBQ РV@DzZ &�=�V�Q{ȌvV�5"@z4RafB|� Z#(4f$?�h`f3kH@yH bOkyfA�VI|AHx#y�fBIB  QJ%@DeRXqHSYJY GDȤ]�Y �H͚5�!v Z+uiʹSs}HzdH P�3)43kPJ �9IF0hry8.R9s.;qɊ5eFa24Ӝֹ{:&UyN(P�ʟ+�lȩ/YkI&) cSߣ#x|~0Ý:c⡾xv"$h3j&pY,Y;C\t!/! TEuf;핃iŜX T JfvLW@nul lXd&r5]iw||Ax aql J0T3cK!9*J.D. �1�iY 4!F+B =P۬v!\ncUPb+mg(@c K!kJ(q0F-;m"T\BHѓ:BЉUƢ} 34/BʝЌ A9(eyşurCU:HJlTѐ?fC%*^slf&6nѡʢ5Ir%sc.L&$"] 8$[*BFE3Fg $W'mlȘ :4sp u_"-Wm +9My!MfG)Y.FU6[ݨBl7 ]U}P! )G&]o`X"T_Sd16X/")MBoX=G/imlQȭuE2ܗk"8T]Zdem՗\qE;oVW!hE՜ADƱW` u7ϯNye qd׳aK D Z4s|Kq% p B^Nn%ϯA 53VP W6B2qN\Sfь8<ApB Gv"=3lM}w{';d,{o UOZ%D· s>`gL[T5B?g,vХ4�3ÅE,)3HʠY(15HN% dB N$V@̬4h��(|�@b�Ȉ +$""B}"!0  �tz "9sk�"D@L@3<VH  G �<## FtҬq>cR2HH ֌%``ff�X3�k͜)"\30 �5 H(4Bj�&XfDB(<`J_,@V5#+d� "<d@*=-\묄5 2"az`4R53�3i81VZ11z 2` DH0pQ`tI30FМ1\fM)21=4zݯiE,-U%3N*aޒJ݅yI0VX9/n)6oaF1=!ѹ?ΘoNU$^Y0TQ;LM!i*=ſS`,_gU%iۛ>7_Џ|GNiw;N{iw;N{iyg/4ˌȈ@Diފke QҒnw8;PhOjЉTZ)XҬ5kY1+*D+ndF � ް $C4HDn�tk*0w<?M;h)5�hD@D �Eo f@Y$VEj@@D�`p4?*I �B @ H 5 .+b` jFP&iXt5jF 4# B ,�k QFu3rp&R25C�@A @b i /â2G�$<Ӝ4��G"A.ǁ:aWiG !�7!DMyj��&`LTHK:Uw*CK`IA'PeE}+D {du 0�(Ps̔0"DOx";K�Cۘ�fGf!Ȩ:1QUKSH�ݲ34*V',LeAKUbQT,(yB `PR+%I0]o"/^:oV[/(?)1kY9a^ݖUc7&3 ⳲШJ X&k)mKL^[.kBzK2<nFB76ZvFuQW-&J{2 XU*"K&6̭em9B(A(wPUqWepMN`Rf".)M`E6BM"Ao6m+c2Z!4k{Dt-2EC/,s=.BT0 j_TE].r4?\Gɗp_߼~ڨ}o8V}\Ca8r4(] Vk/}c)e6{J* >2v̀yH50RVWo !V`nhBHUU,L+b›@SYϭ0:_/j. 7`+;&Bp>p+B*W>*׌یFB8$G·6(!PCKm옱8}P#UcWgҧDnc!s�Ʊ0v^ c!:˱( Y%JГ[I66͕S�F&ͭP0.3l|A^>AKg|ƈ*T}Ɔ!vOM^*JUf+Z;j<L;[^yɇ 5firFcT!PsP} y"gYa{kɜ!KR8!l= VUDY:PzXCsJ;t،U<T3S?K4{nT}2x>#>3T׆5l'\ %'h:R?5eC �ql U5X3 x—iN vdߣ-Qg8Jڞ4{^-W sm%V}pA� !\xȫ<!`"$:BjK'd= `,=�Rr7 <+pIƱ&zǪ~+_ 0X XGAdqaR8$ب<+>MT?( l:θa l0m%5F0IŴ0Ju@!Q\Oxt;A_xA*H$r4Ǔx2L&$ a4 iQIaG2TD)5#h !S , F@(* ml 4  iխ"TiE>|TQv䴇i38X\ hMhb$&d >B�`<}2�3Ya _bf!4F<f#2"3JD>:.*GQrTt>aHO%M@ LR�*CN"Ar-~_\HY# A)P dKx {0Nͨ$("D{w"%kVR)Z#'y `JI% 9[>;oĐuƕlhNlB0d'Q( |**Id$JgKHyV\� !{z$�),e%\Pf)v eg 3co2 0~@O>,b.QNMiNF<|hgl̤Y} O%G,Xj)]e3[ |g{ tUO6OFb6NF21r3JrXq}C\ݘ/Xv˛.iʍ2:n'Mld Co0O4uBEX9)#@َ> !`e`~at`b᛫_}v곃5x"Wbqv U%S.KYb$*2geڣFLMTXv[g,5&l^*H7f46(u` h86UQ!- Օ B= Xk2y嚷RCO2c Uc7'B(m)qP$WQur `.-b|P8DfO2(c[[ٕ&.Q ھ"Tq5P1"Ju:T"1!V<#< F]^IVj쁲?+qCK:]q] 7 =vg?SUUYw`wn,rq6_Cy~*<]. UTX%o Bf4 o҉;0x#B,8p ܦu~s5ٲ !`x圳!DH Mi1~`1|SN`1k'UlTck<#ڣ0=A63U_վ;=Y,u8Usb( !5OV?T8>,eKXOODq{`xh{͵BmW-7E7G0t>3:ϯܾ;A ML+* #`9盪υ}c >FH= l@A߄sscQ  h5wa FjQJƼw \qCC5x 3džLn,_ {   "D:oJ)T9ZqYJXҨ<iDΒyat;e9%TJEL==`<ηU0c56 Ga٠l\Ϯ˜נ8TO?j"W䲮.&k0kX#O~$atp0B:>rZ>xy( C'5k��gim}'~vW-URʼs�X# `z8=&Kr%MS`v=̻Wup8y#.O|HHwW2of쾟�(X̎yDܺ5ae(O ٞW,\skR�zSH;8dɴ`g8�t/ixzǨ" [ݣP$}0H6urVypn/ŏAt&Gcw ʀ`\ԡ( �;pBv=!$;IwpGj,Z!>sӵx@};FHg%xaJ|72%x#=yY3ϋB6<\аy.2Aq Ww-œCkՁ_<IN>>2 [֋3!`8,<C648T{[8#$Iy<Ћ>_C] 3ǛPF+;Ӆ,]%!d]<]P!2@_:! ZD]Ȇ!si>l�P ERt~9!B7ȝ <Eiܢ3!Z̺d:!rxC>pvl?X| KWl@qhyC*NqP3 fx]%Usv<TCHFcztD;2mߨ] gt~`WqO BlF8-?3f׼Ț'@pByg`%C<!<B BHbrRɏlB< 6Q)X噣7XDG!DsĞĿsE{9:pO¨s9DZ=u0˛6R?6t ?@H rꃘet[1x�1ԇ0\s`#mP&7 tU7?qZ1zbT%48GwWF$#d;Ǩ3@دsGs8/r"'RYϜ.bg)CHl투C{WR*)Bc] Ddin뺮jn6fl֛fl۪nhAbnl)vl�r?ΑQ2`A-= >ڢ%M`. ^J[\KZ]^%fGmG' '""f^%ڟ�@ƀP3%K$ "0jlz\zYvTUS׍ZK�P)B Y!Bb۱D4M˟UU׵i'HB;M2 zctsܭq$ ш N�+w'.31܌tE;xԀW ]m�zIq -*>4bxW s{1(kPN߳rӈ L ~of$K3^(Dg!$@mŊ߷8G8Bp @ILDXHLy=a@#\.G#xu8p QJ:<`g}|7*vP2~=6쐣rAA $Ze8=CEW/n0 n!@E "BYe;<0] #uDH4c`PBG!B&l?5Yrl/GHO]a L`71@<I ]:;ED ]!EAHUkG1 N7IB!Bp! 9!ĵrPt="bzȡgRC !oH)v ht8*"XMO1OUC*O !6T>w,a8. | �*{TD>,u~W] r:?\ɒ,WWlNR4hDe ca+&}@D,*.C!$1":H/u@<!k¨/pP2Ho85L&% w1Bc+pB=]>>I(.0jsZEϘ #^HBl&>�G/>~֓>n/ I BթHFGs [; } :h!]$:?>L@$e.ٌ;~G5*j>Nv9G&9<Š|l? fgN<J3A)P!~̴E%"SGR�K�F�YK]f4`CFc-ſƶ6""Ԏdnq;DWǰtP?F�@soЮ+Q (A/;<'�-5MOAu}Q/0W�k%%'RHShv Md i-4MclS*[F),JRHR)J(!B"ll,E@bߎ!hwPh}Z!ۙ&Э;i5UJ3H9~x( n u|;ߎoǷv|;ߎoǷv|;ߎoǷ_灈(PH REEES"�D`Xc4hmBF7!j%ah`�h[ Ƈ7[* ־WDBF-ݸew �@;-%@jGt8i* +;ėv%rG7alOuS:fn >@�HB%AbIZ,Ƿp|E M<�9`mVvjDT*JPB ) q_dwCI�hG<04Mc!U� X"QthuH Obh`s`_;6jp6ݖП 8ۺi3B_Eӽ16G2ܩ[Йgݴiw<_n-9tуw~:!߲,oWax'u%=B6"`!n&M`3p3k+ `D+M!BN_}{P󳹃 IӦ?£[ytޖۺ-p VL|';'  :sn /plmhB͝ DH4GMB[F./` vӅ0>.bc!8ٌ`{"Y,nj"?79ϫV*sȾt:�v·Nzn]"9A61;!;>@G|ڏK(L_7-3a EH)B@!CHl `ns K=r/ C|A"NEvgezD?k&z*rP#L !${GOoN~w/Hu>0*!"~+GHG'0_0P1C@wS!am#S{(E2_A|d"g|Juڤ!EHFCwvAM@ ɞw7Hu f~(B¨LtyQ2m3B L0L^9hTi9hYBm`_Qݙz-j9: ڸ!"΁0 NsDC:G )!&ԇ yIX=H}(3='<Y׿9>Ā{ b}:]2  [=< Ăk_t"D$wE4}`JՃ . fv0jF! :Aϝc8did/\Q0@XQ4|w=F!tvqP ]]Ыl7f,7z\r\,WrZo7Unܦm }J%p@" lam`D_!L_x "_|#;&G+0𵿐3Hq_JӘ_}^2%m%UG�JQB*Bue߿]o|??,糣t6)ˢTJ)DjmMTunכzY֫flu]iXBJU(UHPh? Wr}}] _WFkUNcBw  ?w?>2Di&ػ8HzOQH%q88t! ;c}u!�K1kG_`;|蓒h؃Qj? z "&My_4S$㗾gF nw0|⺄>ti.FWGAW7l!6 @H r` p^ ;!QI$"vSM}5pm~B~?Pg.@NF~s~c` .ZCro,dp߀z7 ox3bl'7g۰pAi&EPcdRKl&HPanE"0EsAyKbiO)u!.wvW#$BqXުwﶨQB;B0E2Hҽ OEB(EH0&~!G`FBB(C (0R ۏ2r(�MH(` O)�}0! řtq&� +}BJMGH=&z9kd:RxgP?!ȍh |ve#t~RaHR1kOaqH үmsGy/ܯɉ>!v#܇.bl LQ 49qCh\/Q;9s<{)?R˻EJ!{D1\?R^#'(oP/s wQfA/6݀>E{ԗ�vos^/ۇt~P!@=SɫX>v }*j>8B<6| !?L2 :=$< HGs '9;Hb}.Q;jNwZ"Cdkm^%K`-kԐ0xV%)+\Z'*R}vMΰ[EBeiGޣm8uJY@K~𥬪b9OR _%VhDh BFO[R kp8:jF "d%@ւ5`m#FEmʲBy ߎo�@SB;ki4M5d"Q@i�l 4@! du~iǟ9? .�Ei-lYC3OJkw⼦NyyuI&ün`sA1ŭclGi<'M 1N ْt %|M�;;c?QXvȳ tqϝX&#=ǒ.c.Tsmi`קF D !rP|'y4L<Y >NdD7˓ fI  wa_U].5WW"j/؀-|A9 } kkG}c�!, :q>FHa7Nd< =BDpr7|!q{ NeGHm͊ꛂ:ws켻WsvB ܙF}]d<[ojΎ,@xb\ACHy!8!ԇW#]mF! "R č1@FH3 ×:k SP1$ !Yh,bOkXNt@%VOՍ׳Lu`nɎ HexP0G0 `dtCH\CO1tr*+�CT>BBOP3lPⴆҔDQ`R'5EHFd zbf, H3Ĉ 獄AO}Cur *>7Iq{#Ay$c b+$y�uDA¸�B`;Gp0L#17]u@#:G@ tP'@&gGS_2rs tWcP!˲k$,t~:EH ]SFCh-Q3׀娌/cBHv9a9#!`s:}V?|58Ne#011 9A8Ƕ\F!$D s|Q y1ZU]7rY,Vr\VjYoc,_}28w߇Adɒd,Y Y ." AK@�?�AF aC8%oaZG^|d5\eAAu]]3QO!?{0 Y2I)&Td4xӟ/߯L T�PTXrWkxmfmj.rZ7vVƷoXhNB(ʲR1몪UR )diǕ;v}ˡH:D-HGۛjlId ,Xt\[X]O�_h^td:!gBm&w[(O*SYK||FEPzFЗ->,H#L88VO^8_j"?Ӫ!S.3΄~L^k~G�09 `.<mfzzuG`D(3 /*nKw_@}bgL8(kQv f pL}}5aeQY@ 8EHO oK䳫Fb㯹sdLȪΑ wC^v0!s`+{O$9RṧfC]|{{~g!{[7G0w/a!C؉vNA>:n02 JvvRzC6N{?ė/oNމчqGpC2L�aq9Gg^ϲ9C;6at+ .(vH}`9F&h^8BUh!"V)|6iz(Tj޹h],;9~\AO[#A>k_j/tc#e G 7HKa&BEgG = 49yN/Y?qw2էU1Z׍!cA I$w+Z�I"'Q �!P !~pVvȖDւ0�$J B;Jaw%_Ta۬n�}֕ϒЀ2qԞesnEؾwu? v=a��VJKϮ_",w RCT2<<:6FoEeQ'''֚ b*u(oM[lMG B(TQI9-ʉR $4]y�B%mg7NjV}5nʈ{]�PwE]g?UJ}q&|Hֶ^@4( �hݐb6+** �$Bk(h�Qn<n ,K{773u(8{FZ݃v|;^?/|;v!s_v|;ߎoǷv|;ߎoǷ �477x'Q0AADdA'ݬ-Bh"ZR7YFJ) B*FD%_ vt%WvJJZ7ZK!TRK�eȊcZ[1�$�zhI,X!�l%c!`;fm@MQP嵄b2!(vM6 D�*D�T؅nn;Zm�YK~k!c-XPZ"Zvڱy D;NDdZ Q3+H! "hkmnlRQEOkM{%(U@XւÃGDVb)E u-5V  A A ,P%nr H6ڊ˺u&EQRi-I% UXF@H +}-.Y(!cp)"ei+~݃#a%6<o@ DrN jkdRSRJ ()� \ U�7pFYwN`7Sg\·6C͝(v]! ,v._ 2nnÝ nWxC?AyymX�,l{9{Fk}&}PE|-^ Pљ�N_|˲pF{?d7[ml4r]B<w7}{Co�v\ɘ8N6y<lv>·ahנ';=r !L ~(M"&39BEG |sfN°ҿ tg܋X n_Sds%շ=8b<m= {P1�mUH8'5 !ݲ�BB- ! ]YBݜP1<!uIww&F8!oap?%Аlc/&gw;9<&C~g67DftC&=$$\Jg,۫{HAwvsF"#]c'0ȱ q8; |A_˺rR!ShC' ^Eν*?*oa6Q�3 ;#tW0r/;D`$! (vL^'.r;B"6Apزk),`愈]$i$;(v}?3J'o sv(9R7#;>.PT+CxR_O$Kb󆺰Cc�ssLMp$9S_л2T�]-DvI#8λH0#;~"%N.u0dt>o @k:7pW u~?B#Bhc\AWixPw/`5~+=Ώr4i9&iҠ# &Ъ}t;WSDI(W?*rHMHqAXv&ygי\ S]W۪ꪮvg@ѮĝY.V@3# Q"!5F76nB �Y tT[v-& !�@C Mڐ1dh펁QܢI~I !,!D!]EcIn leY(xO;<Ё|vp{7ƌcAt;a&vF;U?"ME@*@`i(TJRc`ض1R*)DBȢ(\=MwB4T�KDdm;* 5QDauڍmS _$(]}/vvv㵍۪^ofڬVzSmi2`R)dssmc'78ؙoh{ Cn,\cl]Mc-B"J lg8TjskSt] P I`F|DIdvō?%0tG� x9UB]= D_Hbgapn|nWlN1wd?;-5" X&qol蝑A77 b6"E`~: s:(lt"ݝR$9Pæ ]@91BDvhF!ٛ@ۺbyw wp h8qK3l r0<4!)?AuowQg9lc#ę!8 0%)")>Yʀ"_\ۥf�:('6`ջٻ!ToTӏ0!g'ٶ9Y9&HCo&0*Hcpug68G"~<FCrP+gc|~0-QJPbcHGH5chnSI{C1b�o;>8 ),_L=vrHeأ3>jt+6Ĩ^!!㹜}̧AsݼHK~"y_rJ!<6<B ,sB&gc\ ;+.!FHH0O*ԗ!ݼ;G֜#;9aBF#IxMf~{#A�EsLsKYO}>?`O v{&L):?wKh 9\Α Fq�93.Bg{2 wP#SWqunoc$Α62>l<d.�c3 a~��v$}v&?N !Bc~HXvtW,&OCƘ$T�@` }c.-BQv]?:Pr8@UBA04nZ , B4|ᦵGDlj;0,%Adm "cl; @ƘnvmdTB ƴX$@!؆ @V5$3"u"2JRd-h4XlW#XkAh|ZfårRXk@[-eaP;,NFz=8%ZZmLc�BH  bw!cVjEY4VJ !-R%pL55CDio+v^>?H#]019eBGo輘?Q6Mj CP&67Y ,~*</c.זjb&b'< exKcv5_dWLN`Q'xrNe]&G.fopw6C!8A'qe^fA.gM!mi|0<#5T0j,mzlGHһc+w<;rzw x}X&(3`QB sLutX8{W!2i !>}'c#>tkk&8KGvLp ƭt<BE;cR x"Ȩ^~ss@!C P"Xx 0`{%@\p@x~9Fk"�1pQ{B8Ed;sv bnF#_a}0 $C^=K' 78ĈxE9vl!'!] + 3UaΎKP, BPʳC\q-򤈞v s*9D:9;l"|OztD;:?c8~ ,aoyS!|6OVw#|GHGE1#ICBGHר_yS2+)tw)H9#rE�g>=`gCz"9ĨH;?tL$20*+ Qy-;^ci$ rl:l$~81ʼn$N}ah1G}0@}s u0yHcGY HQ&Α| Fy]U|;G$|t6DʸSda7/|"#du)BOunInK<c9B 9Gx-9K/no2�{,wI4җDK3: ]M"AQV hAD 1(RQP~XBK;,$l}lc!k4Vצ1`A!i2((d2L!l�5эVk}0Vu6US�@�cnֶ=Zk3 [OYV t+�Mh囹hv-�voJZm~릩n(I)$ ZR!J (;BHQt7 ЎAe7twժ5�kvU*\IZۺ16[c(H(1{BD!%m#!% a�%)@ !i+X JJ CTk]fԫzޮrXm6njB(Bv PQX*oR*)LW;dAkm"D-d)'GvL � FDFL_FS @eoqSf]4dɈt8s3OEdS>d++70<0 V ^[t1}BM̄zQ&F\gl~ >VBAu ~Fs !F Bb%!Ig?S xSt:9vDXv9XzMCewk8+D+ezNBZ7$VN&y*�$B} ڟC31o4 #v zAX7z]�|8 P?$!@؃"~Ba 8;b.e_eˡ,B\ADZgLC9R(D_C}@!o8w[b`󕾂{ϣ;{_Ig+v*gtP0c&Z|y;)6ݐQqأbcC� <�!s sv黑%}7'eW) r8D=!B+#+PaS93@f5>"$ C@DQH0Ӏ}4�y9^!=]VAe{xGצ~</8cL22a@G˦.}y$C}c:(mq7xM§ft~sX\wO}C&y0̦ "3gA!r "1ƮB'ٛ"߾4)+vG{2HsLTO*2Ui #7E9NOq#.;H@ҟ) +BR{?Tv&A -*v`�qD+A�^�P`|5Y]( !P daJ/kbq#,!4֛6Bcj HDoq8D (塻l7n@dZ6ucDMʒ(TR; (�%xh7 Zmd>( Qnl#*%BZ]်-]SK.&$F �*i5F[iD!ZS7u]] H% ,жav�T(n@lPJJ͊.J�ahho5�)նn  KB Dk֍Z, )0ZK0Rs;,%E"Z@�nRFm[lQ(SȻ57ӉCM;Bq}Pe o ̵"+j-o~N |~,vTԲhVw+R0PJΪGa_ˡ>X<9I$P.k`v]Xp=5gU6tsxps7pG: iy&ݤ.%mEL!7V/jc/D8pي(i -Q~���IDATrI 1xybr gA]OB<.k5Q+ гuf "$dTDml$Eƒ֞՛#ΧW"dGGu͝F!cpX5y7؀4#.C  u 򵕣e18Bhgl]}1BAؼygׇ/0x!?7~ׯ#1zA#2 Uj[0R҄]FBݫbg q7.CLNvs /So+ Dg:?~g'fB2#WcBg '|ް{Bvrk/Egubt6`QiQILcÛA7A {sl {(fF D o mԗcTA>t$=<#|0BWō `&/ݘ8qt$7?;_ 2ol1w.y�B*aOC9ȣۙo#_|#%P޶{�3a<B]�dw%ht=`ɒӃQnLc�얫:D⠏,ofɒPl@;W@ _8tv>T�Uv_""AB !E,JiT5 L37np/#D;ܳFmjGD֒!0I�JHi- + LHX,ïR 2V~�fNڅ c, ZkTuSkS)%- ,XK` "*U!Pjd D�pb@k-TR )д�` Ym@H!$ 0Ѥnj6Z�)% Kk%C$�QHD-;JʺuEd6 Sn7nwv4RFz[hQߎ MA)�&\מ:ԅ:_z?v.kTݰs_aLX� G&ϏJ]}@L1Q.b JSBI(i^^ș6c0_bw8> Ź{B*Ƿxll/6J!V�Ư5¿ZL>}{:o̚ c3BHz[)}mIN~"L*&s~1yw�S dѕ[koUGoؾ 6zqLf61 A!*yj8w5 of:zTpg�;x^+y7W]B`\YO|¯ɑso[ Wc5/zl㛺_#CɡҘ?;N}Y9#j ®73fZH4m2?]z^qQt0x/ ~5J6OA3*xs5BN{3 "QNMN\6U3ݭ |GR*m߾ +=B x|R{\6}<kCHP8\ B†"*9dbc!Q:yt%.͖mËVGAo~cƤǝ#2D.269l�AɇCgG^ҠѣyH@X]�tox(Yi2!r&Sxߌ%Eu~>LNuiY#Y:o df20G<H}cOn�s|L \A B`=0ҟ#>82*B dΑ?<ؼ1S,B1I2t!Yl1ၜmE1,77Xa`* br. h"/=,Ym!-K<9;|篿vrvU5Dv;Z0''vv#hhI l~<1P5ְ1LeEH;8ReQ )-t+2 mUrBCMc* z:+Sdڭ<v'm7ieADLgRM�1Kڶg8>=|WNΎT![FEfl6- ȯ<!QJHݬɴwX($?UZeaOʳdBVH zk5 cTf|>Mv{A7HlvWژz2_ӳr"tg5� )8I9!R4Z7(gBkkgK,˻b^Z !DYT)EDFkmkoǿH6MTU]7.]fF) hN:CA? [~b/�[n}Wx9Ljߟ<�3͝x.;c'[LU ?G '<=Ucg>7wm횑Eѐ'uob2؀@!7x=ֲ) m@7�IòcB~m?EG&,`ne=w!^|7'c=.b�raōAGEس|c;!0o͔KO0F6y* Dyl$2C^ AϡASqsnXS?Gn.#Bgs͖4xw:>l#>BW#$Bq@}!ٜwv{{=ߌI,GJ1B9!̧0l0!6 ^l<p, iDt9f1ϒ!N\9b 5xԌ~GSPu/H*ˡD9/;#dV?dCu>|q:?@1ףcQzHRNp|.;'~0;EHvT#_!z^sk~317`;8 _"'˻EJ!{D1CzkynmW'9봄CHzUZ</92茶1`.TǗ{abcA{ldB:l"$L5LOe_hEHyJn`=0!Ňx�dS=x# ?16rc2*DAS/I3f,EKÅÒ5A(dR>:?/�f֓~wW( "�KB r6ΦrSoonֵ֫PXţzQVnڕ@W(cL4- 6@JRHi] GϞ?}h}_}t^oeY !ş{Ӟ,t6) VźֈALDk,WtMU P~{h4DDd:*YlvS5ucv 6nlk[ʱZ[mP!Ώ^~vttzUR*"2VcQækv!} H>]z h4Tً^j6Z$H�Ģ(ONT,7Vvdaf<{t/GZ"iB@�ul6j^RɤRBؒBfIX6M hЁQAl@b~w$HC޻ $ )*~YQ'qs ݶgq)̢Mߞᠧ,g"Y)ȹW͝|<WxpUoa>0ψp@`v!$MQVWބ]xOBzX(3Ev 5c+fMpH=f3e+gɩ .q9N&D�jO+;grW<[0Pcްzc\P:@!9Q gr9"btO:Kb!]ټ~t.BdS}Sa\{wC:AY.�f4R@S�@(>,b�94Vؼj+Qqyg�a!zUQK_Ds_ 挳B9}&u䜿ΊW~Eݱ"0* ve|Oǭݴ8/!W?t&QVPi$ŝcGa~hBy%&ǚ$␇D7)#GD0Sq{RK{o~�>ec,/8TO G#$S94v-v ꋝHor" 3yt#02&"2HcDctrB}=02O+vkhGM7r" �_s\�-Syv�0" jW[ lTr#P9?~~zqqX.t}{BA<y勋N\UU]U5uny-bіlkR(֫dmJ!MSNŋO^|rvV ?bADBD �LӓӃǏny_mƢ 3Uģ QL۷E G "clY?:99]\~ AR)$к1h]kHHAV7M :}t/_<t*%:ˏjTI1-dW�TR*I A!ǧ/_4u\^^5MƷkgnjalc!h@֓٣*%Mݐ& @_Mb1 c0OOv#RjԕA*K%i71T!mc""I99??{vOo躮*( (( ID:;RZZkl_!Dֈ@Wv}MNܘ`_ܾ"�fwӗ:W|0t ӷӈu?wI V�{ iA7Ok'6LܖywUs0" blnv7O?[幓D >Q07D^;qL0!�^Nqx"$^"S}!VxV_{p =~#7p_}kB3$]h&yt"ugOFZٛ BXȁ _ `mܼbZXG};5j" 3G!;`!J#઻y~ 0!(vN}9tNByP!ԇ $1ֆ0 ˮ&T"F Y !7b;y@C#|svSpz};�!0!mA x ڛwH$~@<!Y- }΂e#zPsˡȊI #9\CB Į!^$3}J�IP1 DrR Đ @Ѯcܩ!!$vv1B E@)B BHX!Eh- PK)B(BH0R8'u>2|`ƻH0X$aT^ǑbT"A0wNQ_�`'p"$OC{C9GO}s*Fz#)3c=s#0j9ah$Y+H*G}%`ȳq$s΅(L"39f@:4Zyo$߫טWq{R�RPw]2q9 =jA s5EHrWs@!Hu>d@0 ͘9X;Ԅ RI}=Ax&]gJQ�̼y7bu7:O~W`Cl` 2lT9x4)Yꁈ"KZV�XZ��vǥdNHKwMckSN˧Zt2}?QypDvZKK ED<?k%RNgIYJ!vwV#Bv?aAgW'SêEpx,/zYo5nP;,,V[ `RGLJO=*BSEARdńL!?!XREqzvyʣf}{Z!1H"(qRt2vYoMh](!P@iH%NG r( yr~[\$RʢikPBBJDhmꢔg ޼^߂65j SRY�mZk�hU1),'i[QJN;hI�iFJ %Z�8L]iӐ5ktU1=75Y2MmuSWV*JRS!,ѱ8˅\PI^J>_As2w X�D!QXFR ִ;߹�j <jŧ82;p9|t@Gcv ;cN#By) F}DOKr)=T̘aDouڽDj@Y G sd#DȟvMțV:?gF#$L؃ʩ&!?P+\Y ` r=#P!ěw fD=GNxgw2 !u9d-v]"�`TQN AjB[ %A@+gm7 GS_6khBtKRvvG 2pUW={x 2!@Y P^nMVfpGMC2x9'{Ij"`-I.>3uP3:*v9QnB`�!YAJV|NB! &dA]�D2O0n'tN-KǀZy^]Ԝ3`q·[{ Eɻ  >@w;B$$ٜL+x�>T;[/#HOS؆|g&BP9{~E@0w5¯4`6O6"Zثsndc1g/;3agS[{u~O fǀC??9>Lcb0m0l~g3y*:=`k7ى,gs'Pǵ9ĿAg$B;@0j':yҷ ^ 6�5P-�j6R ik S�dŝ%Me55$QyL20gϟ>o_./7v][2PBƒ6RJ![U[DRJ)   fgdq�(�,,'ggpZ֍B!@`ctctYڢ(@J ""l?KƠr UUZ !2XCP Xk,%Dd!h %%�!mȒ5|q5h]W!AhWed^^<9=WS]Ud-Y h-)$ 1==9;~2յ~ӧwjĚH")@j)P 4>g(:xA,VFkT(m`HZFXc @cA0$ X А UA1v z � H�Z`n땡CcZ@d�!e!dWBk-XcZbP[Y΄hdXe mPBR6R[;ufMRFZ]U}�$@A�d �F;ތXvc{k샐M`C䡹_lѳ'EAD5PD4SmňG^g= LwgS黉| CUn "a[ة}%;wLlxyqMNU/2ݣg; Y|>%mv HvR};פ$е8] 9#"b^ 4xAHs^f n{M{||-Ka5ҧ'P甇u`wUPW)dAzk.uVgXZ/.ƒnW`}q nuzMIa}楌+L,Jpt[sMw%$Aܳ"ӄB,QA@'*FMKe<w�y[ &?f"c@?L2O\v H/Y?κ ~}]8`%?d WrS�@8l:!8{B~b:?v٩F<wðw~HAOidO19s&GEI?2g#&I;ۧ䫳Z?3 vZڀe`0_P!䍠?vhl"T؏m2}f�@Akn,ei-kBRN}1Xyq+p=Q=/%3 H{,o_ p{=}] l7>\1(U.IDr?:s&w苭\~g7%xA<.$ zკPƦ n ܍�#FqlFq/@(BKl,u#LA 6!rR"+HVD�(PF׆+h6dz!'o~?[/+K,AZ*%UcM#QRRѶliiue*~qtoז.N'3V?;:R'Gi9l(,T`!6 ,$ @aAE� Xl7˫lnXTAe@%U1)MM$d5*BC$ZJjHUhK &BDCɒ)'7?tySjjVZkTmO Īހ㗯f?{X v�I(!0%,/ߑThT!P�(@Buc*Tf>9;y&'@ _O./oZ%$v-PEZ[k1uC 5HYʂkk]k3 ~xOde- ) $!֍ EcZ%PCB[Q@D@I Db6@(ԕ@BJU(Qn6ZXFTuc\^cji B6Z$ )�ABɉZ0(!-a9 !gRDƹ/nGӂ[av/zZm=HmL]J)DR1-Sc7rف@06x R10i7 cFg#=%=2,EG:V6@:{#ןwBOXHL)jˠ@Wxn=F:lMRud�nB´::7q ;9oR;}  >c`$ٶ^M쌻;_`#@;GݕSd./q!FZ _?dZd[;a=;E<:+oe06Bwss9zw?{7"]azd;<NIIpqlHB @ҡa%yAlFEݙѝ!tvlˮ+Pm>9&>1#4�"C06 rL`[Ȅސwv}1pvVt=&0„>,d_wNQA=::>cQ$ ڽQD"�ksvmN ]R4Q&"86y Xt@L0lDdFA  ws#oɝg]lb@9CF<¿Ǘ{G7^ GM#2lmy7NDG#As=/=low gIo0!!#de>:,3:3aD9f_ѹ&3w؃L$ʛk뇘] HNn`n3!5)xKft}ށGKhcFoa~2yx^-o7WWJϞN˲ZڢVG[_KB$6d61;~9+ћ_>@�ɬʲ jY/vS%IAT]N4NPLgGu5YKdP)LmCP߽x7WWWBl>?;7֮fmf> "lbqg.Jyp8fvmVmYkѢж׸u%My&DIզ!!Deuc>>:,5,Qj$$ if]@QZ6tj6+kjUt @M5 ã͆ �z{_Glv|oЈo?, Knl+5ںѦnFp/Ϗ'1\8^__H.88BյEEZoA T Ӄ驐lwjUf eQNd* 6Z7FmlQaQuUou]mR*Yb "cƐR &PEh ͊'bu]b6;XuSݠn4a]Lj kRYAMmmXX4ovO$;�mφE "nr"˲PJ�"cZ_ d8G񒇗mݳs=\y@z5=&܉ h)vgd՛-v+]{/j8*v#'nsw-һEd@ULdͭFBҷ(ʮn65ndVf&;EEʂ|Ɏ:su΁$/fؽ1BMp2XBvͫwz�we%�#~S؃_1&FʎԷKŒS쇹! B`7&8 $5C(Oe%V$Am_+o:9C M9q/8|:Aےr(*vz`sp�*3EhΏ8oNIlP(Bތ  "A@S{"/ v:79!_"$BZ*̸޷~_ kQ#r># 8(<S E3t~_hő /jϧ>G67ҿƃ/nԗW Ǘ S$QDh<+JD="0!)@y.Zy 'rqU[.HЮŴy&IGOOӳ'?VNǧSJ nl Y('ţyQj?fI&(,T I޿}1Ņilnd}:>CAխUZ Ms3wI1{ww7PӃgϞɧ޼{_MprZsybvxtLmWfqZ{f~<=|<.?WvMv+'\<}t>==窮um6Ί_={b6MUXWziOO󃦩./?y/??>t͵Z\/n-L/=2?(n~~S rʙ<8'zqg% ucje׸\SUןo߿{q^ Y0B c XkLmh6yd4>}6/=Z,nFJ f~TxCnͧz>2tqz͋QzvEyh"b]SgO&͛f+ _yYU뺲Jea,�d!RT1jSUkcbB'O=}`8ZmNFƮ˦i�˃by_mkqYe!6릮-`~A俧.Շww|i ݹm["%BI!,6W1A˦:F$GK`c9v)3`iΣngD/knkNA&GlX'zŊcN)"-tB$'a;t`c\YƋMl}�/6޶̬z]TH"/OJW1D B !m .3v ?x 2p%?1\ r2a@#MyҶ{ GHW~">mg7\+w9@"k}m&9L1=PM.*4vzPHb{NvbP Ջ[AqBXlk>hw~" !G B `Oe< CH@eB0EH%"gDqPG !s$Oe!B<o]a nCO>'Y8HF#$pv B;ED ]!E~9B5 ~ B(D"$cǖ H.e5|ބqv!19BNdJ8 kd?ƕoPťr(rSx`{9U\`#WqLANp^U\ y3wwxP$3u>dB= y,S"wv> P,@>&:Tqc{Bw!auv z,HB9ԏ !9,B<Hh/HBTF<!k¨/EH #1 F7>d w%Bc+pQ9+;x'sII$cd¨瘆Q{y];pЄE΄ P&NH-Vq=E> E#/(cOg=)~ R!J7 (!"q@C/B@#1_# 7C9D}~8.Ję.E>#v~^x*rΑD;O'|)}92_e8dXIX�B$!H*('0?G(ˣGgv6 7c 'fY7�V#APcւEE?VQ7?_Bɓ=~ؐ)&b:'Mmf~^|wXmYWI1;ztpȚ>Of*q:C:TtZ BJϥ~䧣?L�bB ~{ĄΟ?zt:)<}#K1NgjwD=yyzvvl녑pz~O<(TV@um7|ɯX4`6MO7G'sĩ(﮶Rw<;==DB?9{[y:Ue H(,&b:a9OJ"mZby1BVw>}5' R2@ "I)RӳtݻN/`2GgZ*>mFp<mZ#j)Tj>.T):(DS5_:GYQ׶҇4FOP 9@)�ͤr16RZ@$A j6zՓBHU#9S%Oh-Oͭ5M9:)8NJkAJHM4`I� ,uɗ#̡ijD+P@BH�h?MLi犜K�x0}:ue>*4dkWf^ ' LqwxaFåO`Yt7b7wtgV$_\Pcf 9G !4~F!wZ!i{&?b#4$n?kliTd`\B: 2h2aW`Ypl^q\Vmu ӟǀ5S]0!dr!_gno7b{ w�9@dy-d/D^Ϛ�!8 !2B\ A�ǎ/o»R0$(tu5!{[ $ e erW[n8Kr&ȡ0?6#l/)ޅ,zUqDoهoأ?d!j~HY@x.ʢW"qs}:2cBzu~P]1^0Qq<@[9Cxd L;;`ٙ<&1>K.l$ؑ$j9>` g){[h ă<Cw xc _˿<MQ1 t9Ў8sd+C/*ƙ<H08׉(;`6{\H8;Nq|=lDZsL̹ `K̿CHRĄl1 "cd@)e RmwԤEj{v~~OG4OΟ]Wj,A@�M�hm6j@YCZ?/nzN߯Nn yYVNȈ$1mDRm~u] /_<(OOÇK+ֳ3{x8Z5wӋgGG{x닳Cc|~hV̎<'N.o7'_珤bXnӃiY*+F)^?o{Y6GcKz2Sg?rZ<~vő@8>=}vXNʋ''珥6CZIc �֦m7#&-ԪӓOΕDn4TM]lr|<IMSMJSM*%lu9œG'JO~@uyB]<?\#ڣ￟7w2vUiK, f\n&x#KӧKyl2wl^<~:=\Եݬ7uH(�YjV>9ϭ>|h$kRBD,T[D�`T_>;=6xٮ(LX<?1[,7T5˅^olfsEv^ͷj$2¹gOgJEAvZH((4deڗړt.*=%p)">ɫfv Nsa 'r1bttA Y@̾ vuNتЯb> ~r?76cLkǕY}t7Ikn0$cQ/uPht F2&SZrd A~nsZAуۉmL#<_U]2?a!=b7r^ޏq>#L#V#{]�/><:nzz5bWu/kٙ#^ -/W1|vq?Νډ !WW90kbN*ȗ (y<(!8"W;5d..SA7%z; lU_KQϘqL-G:?@dcIzɛu~Vl,x BpC~�;0w59ӼG;8 1_R E;N,{#A@<t5AɇcE!_$P`@3;VOcP$=d瞒0`&'4bI}RC}Mt~O<H}ʼnɃkG!f+;&Ƹ<OD?uD!!BjQ<:s$U8Ƕ~ 8 lQ!"a!h (1)%Jf W˕~_ӟߜ^]M>oi=:?mO!!D)K,,k L֖}rnt-DCvrʹS*UKR$K) "Zo`r/wf B $S׸Ym7z{^<}57 ˛'xGuU-֋ʬ=::`n.ed>,?%e [Q*?O7ggͯ>yl>_~]]W&8*&И㇣鋋bb~~(u}T-\b׷W'Umnn֗Wwڢ�@�T=/??_ܛlNfŋGT<},ZFbuNOg^Lp:-󹔅%spDO<yzj()ӉT^r^-c%�,|''/?:=Hڮ Ed|.f3}}7׷t*+w?|>,K%$c@ *D$Kn5"E1M珧?}UU/xI1!UB� Td }ˏ=_<9<=-Mc%'xٍ|;ANI) l]DJYH!D5B]LwOQh,lp�_~H yAH=2x7QJ'[w-M:bB,dg23%v+,ф�0@ #փqkgDϘv>L ʞ%sG ߀hLށBB*­{ه^]7/X}c"lLhaN=˗16' 6:*cqi# ݜ~H,m:8~vA!b6xrf&5ٷ^<6>3$�߹W7Bm b'saݰߏ0u %nnw{]v9n/7�@LDES{|B(Cy{B5C !{tHe־t~ 9G7##m,#DHX/yEpAHP9�HQ߮0)B@J&稯@}Ip9=ԗy`WB#mםC`s bmpA[DDBUy0;Ȝ#s}:GNj/y0Gf/uצ>crɿ+ ݹE!ajK$2psv:Bz"bw=U9SEQLG V~ɬB{e<\7b_B( 4E2Y7ӟ?~RH<=߽>98>훟<?}gz<f᧻~|uyE��Jzk/Vl~vt7x坮Ѕk^]߼qS%J)!-5Vz0au%+7jY-뵱4ΕP@d-(UUv˫~O'O/?;=>XW}|MsttppX0<|1,5@@B UH! 𠼹]{nGdzl:Lxx87o>OMS/dylo`?/,UYNhX{ʼn*ǫEY-wo�Mfɳg ?ǿ\~~KVezWBRY�Z^OOhx|~&:99Nw系zNˢ8<<:;;,T Mcw>^]~˥MRR Y0db&3ղZ,W{c5Yûlz R4u4Q PDd ucmc )Qb6)99??P?~|ږSxD)�MAۚP#Y+Y{>{z2)R%- M3#5HP"J)c )  |`4vs.Q]wVHOc7Ƞۄڻ[�6m m3ȓ ~ E ^H0tӔ5B]*k@܀x-XIbswDaFtLv_?N`.VG a, *UWD�+vW!  "@ A W. M!?gL�M`-A󀐀h'@°4w_vٝ=wS?wywvLr`}3$I  wa߲ w40kD.� X$׌0[G)DZ*SY7a�%1,u,PwD$,۽/n;AHW܄h$\!dB!Ag$9H*UcS<GSp�>uJz0s ',(a7 sW"$<yPڇ!YpxsT Eq 1 c!4DK8@µP zO^qKmr2:EIy.81ϵu,:-Yتs L|s9g d`t3'$9Pq!s=C8P9:?D Hu~H}]zu~`;T>BBOΏMe./}]yg::9"`/5{"QStaTHC6Bp,:?+HF yD1AHH}<lߞ;8:GgGSI$90 WQYKIH}>ꋷqH2( "~!1{ȁ5!B1!$He �ACSZ316_ EAR_,t~HG1OAACIVW9@PÞE{# 8|$ d upNsA$9v-QqA YݓAjz2 *0!)#_B$ @[�!X@A`-Ե^7b]61[ ?y{Z?}uZ>]~6[%@PtQ *OlWO}tVZMSiUEE^n릩 PLó66jZI[*DѤ-"MS51;"2ڐd_W/_7o>]W ΕÇv}r2yt^>}xss%e)P6^כfq^\wj[[c((J$a4TfڮjSmF PH9L KY-bXz]UF7iYȫ۟?n5\L&c~\_xo~󫋋 TU z]cm$�K`x {s?7O׏:* u4% Dk59=9|t%ώ/NY%(%??e)nN˗NNʲdiZ(, UJBW_~߿p_>ϏO뺪*[mm1ۍݬtS[e HQH)L&夔D!D!ͦZVz[UmX@BdBH@4z.zhc 4na*>;o_FDhKMmZƒRxȋF\%(.L'#:eP ;1s;ӹpsYn'O} 夘z0yհA e237Q@.]*$0!N@vescSNT. XNW#`š'g;^FC@j8B /c?! >SL/ˆ;j`&pò-@3=; gpI˟#K!rao&Mp �B7<}h f(0<a,0EAf["!u;`!J#`.;E^!># B!AHc%ԑP.cqc0ҩ8܄<x#B@C#|sv|bA)s sH0ÃyA x oB IɉxBZwĄ>gL؄9r9bRH@8;{!@jdŁE2ӧ t^Ei�L$w(u*ygR_NN#".Fa(ED1B S�9!,"". (E LB>Fu8GGrEI$":?З" 2gQ؁-"3;.!iևB޳ҏ9kq1H;-F9è瘆Q!G j0Q38g ;,s 朣;2ԗ[×w Cљ[ dc v< k̫=)PeMs EoΑ91s{9ȃ"$Ϩ rα'W�yd"hgD5̨,H3#}115a9F9Fi�u&SR$w<?3/v9t~s4⍮CSD}dX <M7;$X$ v� %瓣hvt:/gkC7wKG/.GgBv*P  Y(Bi+*|ڮU,YQXU�0 %0 %)i2Sy9)jBj(DT""dX(:xy؜u Q Ҷ! -o?{zlzOۻ۫bu<?ͺG)Ͳ7 i 0`+`z)i1Mf(@kZ(ӃHb:e"էw}/ Kx{z-D!*b2Bk�c͟|R]Y` -Fkv5NJ`Ho뫏F7Gtz Kon7MSY+5Ducŋǯ^=9\J!flg_NO'o߭v%Y?y~q`qYr**Q*9Ur&p Q *+�%E&fϟ?;56Z +(%&@!�QTA*HD(@))䬘LONORBS7uc׫5l:;N'KDq0?LZK;BBJY)(@�I$X ch1 1e㿼S^fa0v VPFkSW E) az'Lq`:QA:%QA<?\[׳CJr)}�ψGztF=3h7|Gkrrɩlm"$Grq1f@3Cy,eɅ!Z9S i;V8xNяԷ!d*!fFM*+1:<jwEgG}Fb#g2>`>6#'^>!9P٘ K斁Ǩ>M!�k~Zߍg>i SV=c."Λw1COv>O?9f*F�w}B.x spCz,*@FFs=]n%!D<D}z9QM}י^H"Ay{TD%}R_EǑ E!1)PYr|;p4M"7^g;( 쥾64Ƅ=`~B*04OƩ:{lkE=C94P`?epYBۇN_3T0gǀC?ɣGF_Ao+?\"!J&8^oY˘Й̩/= `i( ,k!V(!9<8}t~TzZ7Mmme>oh]W?75TU%DH1W涠'|Z7k6Ӣ(58-&@k=SR$$mIk<8?:y`&fkp" fHTDtRIM4غns|x ~}땭n^o^<u ~]k]SS5te.?\ڙ<NNnnR֮0`<?~d})e٫gO^[F\O'Oׯ YTgij)jtuu7wk^xw]Wv2AhQo/|~(]o6p2O�tQft2_vÿZDpvmU@UȢ,ȂnEHspx껗/__"¦zs_ק~hq_O>~x[LG'Ǔ`[mɠih0$TnZkBP%ӳӢѣgO_~<9Q(r:J)mR(YZAdX-H(e!pv j[m7utv,IwϞMm P)")`>;*ݮbxp(fqܑI,㋿""RH!cRQrG^g= LwgW[g@k�\z[Н1ŠSn\oVv1 v3?29i Fs{Rtg6MU$/iH5 ㉾NW *" 5�`'jqKGSH&%#t9ήy>u( *8:yӗrxD_u LAjw"yI`p[Q\K$'ܢEAo!Y&FL̊<`r@ɲu\`{|ڴv4�+i<}QzDVy69B\Q]I i8us,jU1x[]R'$cW&gf;3!ɲ3CEMpVQup2ho?fFr!Hy\SgL$K%D/`J<{4osș!MKk)^�:'&u>7eVƷ?w݃g WV$͟\vcZMvAass !{={#.3gY2l:D 4ި`APEE+F&GgDI$B!B6<N0!Ώ:XhYcu#d=?I}͜{0,¨eJ,v7?Gkuߓ+"ʇ9KN®]Һ*[B3wek\i3[@л傟?ں͛{>K\d09g{-""[SC ݃_e� K�Q 6mQTlAǓj]=Gjc?o֫ I ,UU5||\[d"&$*a6uUka󣉘 .Ώn˟n_hg3駟1`:oJ MO/πd]?ﶇ[ 3u0(nmj)e1-,ŏ?}<yߔ(|/['Rm{y]^5z%%|Xǟ<9?I)q\hyI3iaP?O.NR#�zô׿ݓqZU=:;@@, ^?[#.?lV + YVkh*RrrvrvqPFxwtrPER 0֒ r~cAwMCJRgg%6k& lweQ7WME�6U]Gg^~lVw/_l_<)彾pUJ7Ԡ$&I1m7T4(U ꍮ6g/_=yp2%j>}זtC1Z76HۆrRآ(M t_3Qv _zSxpݫ_|`6ZPYGB�؉n@DZ7` ,J PQ6YVBJYJ)vDm-B4V[k]] Pg^�޺3g DvN=-CdAT !ZnG_{e|Y20+p΀˗�p:XtN^jVھ?\2z.L͟Z3`w2g'`O$kY`e}-^ȕiL3Ǔyc__g&Gom6iQ :86뭴tX$!g}jv ՟Ƿ8MJO!FV ,XCGɃ+jhYg?6"goKx;8y;,hzzd;<NWnTVIj?{|sw9ݹKN�d0N+g@`8Bh F\^z2w? {HoGܽ9g%Tu^OpHO<̼O'8,O !{А[;XQ"d_!0df9{Er0!-s`Y_ x<3Yl|UԷ-�PҘ_ѿǗm8l0nn᯻60<7N:zk˩}96­+�v y%c!swps_9L|RߞB>Mή+ s|r@<8~ }v'H BGz9#+^E8K IY*tEwWtwtSZfS fI#$uw]|Zm%J% �@�BjY5wwP,j^7?H(Dj@EE%Cղfus^mF7p{0MK5ϫ/\i>0Jno+]BCBVvy:@N/HVͧw7wf%%|yUbVL|{=/&`N'vV˛^fbW]ӬjOo ON@խznlry|xv|2(� "!R (6+xikRin\]rÇn�m]jctYN*,ѢO\<D7Ɠ'O%E9AQ5ZRZX躩߾Y}|w_o D!PMח?7ͤuӨ‰5\mO{!`q\~o-Y)Eiq;ՂJ$yQۛ4Pmjvoo^_~U||lv ^UW+ XDhl  ! %͏?\}pKח?eN'Sku5>V@twm*ۛݛm]mj9)m�*enFKivJ% clY0 !,vXBXkY\`"ocǽ�@5hƀ@ D0?4vp7s͝x*(s7ngPAd_f_+g$1x#w5;ug ^7cv$&cEװ39-ܴx׌f0hpz BvTW-WN׬z)Sh>$ HZƘN.QrT!SG3*C'"@ xi}L@r=J7<'0LQ+'Ր F|TVN7qeiĪڡ!582"$y`')rf2ņ BBFS0Q߰b]躇q<o<!!臐>90@xb)!}%w $<9_8>"g <Eg٥V =K"�pTΣ6y#z]]2rQ1ւ"gHyȡB!iKc@}}ήPs*H3?,zGD$t>@cѫ K=&1u:bX )|.{c=:"tBop{#b^W B B Fq&~`յ_�B2N%oW#c(8ǡH0r{>D*FB04 M"AN}(."G̹<= WB?6bHj`Q7 S rv"V@N'HSi$ȕCI"ys!OL$Ry!<&M"0;AJ A rI<B0D"((;Dz wv lg  rAB 8Xy֒1VJA7f7Wf՘VwopYUڃÃ篞7淟?[[R 1!XA/5Y/۫Jo M!ta V.j25 Uk}{u^ll`dnY+HʮÛ?]\[]R@Ymf,dѶ,նilS7ͦ2-mjs~ǻ15(RHSzY,WS�%@Fוn*[oOzkܮͧݺZo L۵^.wO.?,HJ-,jc>[%@$KfSAəRi lVnqnL]jko]}Y-P{r+mR)�0XcVY廟~ۥ[zUm7P(THhUחՇw*%Ŵ Q4Y-OW4�Tcn߿{}uyg !M-o67KXDEX77׋F(noZ \_߿fq2X3.AJNo Q4A)Q)%dݘŻwn d+^r}i}{ZޯZוݬvZVU^jy]WwU-@PD`5Z-ݍ. !XcL;/uޝr}ARZ }0NK#0+F}ϯ-Q`W\{ �ޟ5˒#iا s{dVYI"/'?_)Bw )$253]Y[VVq|03@YC^+'mT?]�O}ӂ+.)9=<:~B>~tQYܹUvٌ _/t<HݧAzb/vzie I%5?ш3Aw']rAhf|\'k6vrίqͬV}1 *Tt/jP10 *6-1"кm#N[�-7\jߺmݐD.y4EHe0= H2O!oH{wDHFlKCe[ }BړncrRo4FYzȧ5]!wQ} RWfSbg_NL l!Achth`)pȤM6"l!BR}'h{F'fc.tnՐ"?[/90v,2[2)r,a{j}q !4 $S7]4Ҷ׫�w(\zeYi{.tp^\ s~ !t}!vfRzZT<`c�OPQqcby$}<)Fiщqk#gߺ~uV~OOL8cX\-r[!9k΍r 6EH}O ϯ$Bg"e4"+(O"3Zdk2=<IKx:$ֽS]=/RS#'qv7vN'begi8DV!"H )8ŨBTQW{v18F'Ϟ=Wwww0a>꓿?^IG8j uLхH#{ޓ#k x<8G`�3BǮ竛fo_޽Q_8;12w:� $pn7On<px7g39*b{<=qs:}8<Cd9xxՓ'׻0 a !("Q}?yL@<^?qg_~ݻ?w8D ^]UYFq 8:Gw!c<޾ Bp{p|p!r:8H zzy~E7] O?%fq\8pz޹sG̈:�wĴ7^<yxqnﮮv]w5yD$΋D!u^b5DUwu !޽ CPL!R::UC`!N{ٵ}w1p nx<1H10swW,2hJ|�12]O?v}w}usn3OͿ!L =h�N[@^z%tk΄ :TIw:b<)i{gU!&:q'׹'c1NR3(G uB?g?3!J6}3neLRTuũ\(\hy)S~Dnh^?W\�x(ɬ" n6cÒK8$}&O�voBșqHm+�FVzͭ^=B\"rh΃FW_et|U9["7$:;;]??1zxq,;hSrA"�%B2h d- _bgGyC39�޼DI^"%E !Ԙ GKKoQ}FU)쯝wl* M"AKa[m<6([Z?5gFi]lwq`FgU\8hǵhP}v|{d7#P}k`cb_Ώw4u=ƹ pfO`)OC /T6U_C=BM=ݰih2?*V ^ۙBv(g gzf=g(I_l\Q`"noS0c^7g)Ria&SҨpo1^dӏǟ}~oq@~;MCw9Q$ ܾ>=3|a]h8bs]QppGy_c!�@Q#;utW_wI`F{;q<1x"rw#x;t%0ѾDӕz!~8�@JLγvOA78D8^ wJ޳qbPeN"3|Fug@p8NT;qAww1رwW1"0W>{ *aO[f8yzL ~!Q뻮cb(4xwC0qr{ý܆;ۻnw{(<sHDw^4޽}̻U:CT{@p܏aqo"EqSQ1޽D?::x)aw~x8!0U؁AB"2a9؇nMQFLu"MTcP0#;7d\}ǴM *đ'3Oث=Ojviű9/B'D1[9 KQP SDu/E @<;dS^ yvin13YZP0-6#eUW�F'Z"d)s l!-,gXV87ælZ\4) �Z*R ̯"%m ! >Wd=A4-JHz5^tsFH%@^d\%.F@t& 6^4>?$nLe];T]_ëUgXTYA@FZň-4+O8TYsV}\6BFJces/j'5<63ml(rZ! l !3xQez那1"5J=VI!BBZyPM3"a!\D˭xLB,PRYQ!P_Cͩ 2 SwC�J:TKfWt #<umJQyc چwkTfem+=fooh!Bk$BޚF,pF@ȖhԷno>Z!2& ffE-g갨 T5xJq1mշ2%6ݖRܯP}g5ƆkE]ccKՂlO႕0NNፄ~ HPS־_TT_\sOV}Q>EP} k/鄕'3v$BZΔAԈ]u!;(#OےNB=B`c7DWDN)BIB[FȪ'hc Uˬ,*Ek`O4n)_ b& Q ]u=@ 0V`>~IwïWx{@DĪQs Dꘘ= aapJuB":ȡwqD@;}*Q7ͨ(qTB;t E 9tucPOJ*AefU^1'ůATx a&r1x19xAGϲp,xG{(�ıUՅ�:#RE;ޓ'BPj(`TDǃcvW5W8&ǘ#N!Bcf{0s*S[;09Nh 1 X���IDAT1FA1!PG`&8Pxha0Ñ$UIc`&W8 ﮘ<k8ĈTH "xds9P 9D2cf4*#8@;9TyG;vwuU"B躎0 +)BH.M/))BdM׈/:FZ9 r~8>LJp|8>LJp|8>LJ_qo&"" %!Վ{!B {zuw6~oÁXT"o9fըb%e"R$V33zGA1u7UO0pN)F Ab%r옝 H CQ ;F.v=S2%ؑ'fJQFR9 AFΡwn#AL G`c;Rfx9(9& )z=p,jJ'(INI:"(�pL̬*J JcD2s;&sLUUXU4zfv.S"v#tCR;H ψ޻ȓNk< ݕ2uYyw'ĤJPvD41!־fP#H;B]T ĠQ;bR(E4*CB%jFQUu1D`v<Se]@QA΋R"!L a9爈;"{KK>G "Stê#D4-+/h컝+<JM0%l)]Rժυcs.\J>sYⓊs%Y* C. ̅cp.B̅ws%Wst^cZ ժٓL%db1N+Y纹\2Fpv%bĢy@#jI:]j,*j'3BR&rwtBE)+^juS#L?Q^z S [`;+Z"�f3B@�--5X4ve #2՘0s(^*X2ӹZԅ- yJ€,)^tRñ}> flX$FVey3ʖ5mX!$z,PBJ|SMJ4), r3EBt)x^!$_EH]-ª2B!jbQq.-_fΜ볥HƮ@HRY{0ɞi7=P;O})r\Zk׬=\bz!HA^@Hlh !LԖs~ ӨT oBt 8qL`=T"819~K j-:e^eQwVbYݒƺ Pfvaqf]]8t%a*k_fqaV,K@ohL'̲?� cW lQ-*X\Q| ! ,(cIBj~ݮmRjp/Ʈ�vz[ʖƯx~k-" 6 cS?ig< URDH2k,nIBMד~IvFPX$=Qa鑖=+ FC ![iK ՗TiyR־YOjg,c R+fa zP*UΩry7^G$Rؿ'a-l|I2Q(@TġqnP!kX(`/+M~dxU_jo؆o/uJ/Y(I5BFH lǚ>nDA0҈!=9sfP%B*Oq W9 nG*o~.P{NܩOq\[8Ÿ8DP8}WhU�v[lQ zB:vpcf&]ޱWw<=7{_!QPu* U"JNQIEI {r, b{X#9# 1;;s~λwhuUs@ q `uW뙝1cQ�ywvW]#*0%yﻮs]S{E1D 1N?dusgD~4px]#}۷zVaV&!RrDw:ը$ss:HYQ%D2 c X|}gv 1FRbbCP#혧40ѴtՑsDȴH;,껮վwc!:u  D'Exv{h0^ՅQ12;822޹޹9w$<OWUα#bHEU]vDNEE9{@D�yHॹa<޽{x<F4_ph.GdZ諪1iqӯ獆(�ϧ;MlXf DPu.2dP:j2 ?ʶ63!-QK@KP,#V#ќIF]ؘ%~ECTK'%OgbqE"'E;-BB/Ɏ#(@e7Rdf"y:/4t`7΀67-BZdj[:kzJlF}{W@"jo^P~Nan"06m-hcpi^:f\!.IbL"$E&ݖM';Y`ZBjU|!6G)^N`=EE֖a)L #T#.7^!XBD{9aRW AcdBHk c?tZ"Ga,nMcm>۱~չ]5{T4Y\%xz{H K:&Id"ѹbcWӉmcF*X\RR !ZYBzwX4'[c}!uoM䷘- ԛ'^*z.;6B M7k/O,bzi-TgW"D_γF)FYoLْVׯb#YOjehZk[I6=m7q=JgP5BUqDjTyU&ƱW>%Bd~aoP{qPi~+FDhmc_:GF5x~97 Kt!ZKݻm_s$/K3lKekOqDX&T!BHe/nL`E`3Lj�BzL齖] !YbIҩ׷+SnQ4)k24q�|�+Vfq$]:J2@Bu בۯ6bNPvS 1 2GuN X GSA�qY�&u r`{0-*c%BTb ]޳s`V&0) 3y& XرFDE( v Q #X" (5ʴcF@{ a1 7o޾yn|"<AiQ !DсX*9"ը1F~Q^c&F!= LYwDʬL�JA*c 9WQ(=I#4� uP@BQ!ޱc0F DP$V9S!SpQ)D࡞x ADbĢ*Dp|�@DE�fr͍c !F"tv{V1#؁ $ H<eNx¶BĤE+1(qRA2ˡF! ]ޫx#UgW{6j%RC"9L-zBv%E;%'WǏ^G/4fִ-OK6Th"^nar-5,E`{lk{aXJ Wf]69uGqNS7QMkiWy"ZRlEԾxDkr<�r-7IrګFjXǡ"hB˅/ً V@Vۊrra/s`)*b{UۛA;8\)M/IW!$|!ܰjum`fm/^HMl*_˂6—\ MY5dŗk,|)EEmDҬoWDʣ+~)|=]5Ճm?ݘYP!{ U 9q!h!\(o>ssv_mxpԪz[m JԽr1mZbvִ)iM x!Y !z!']=5BvK:` !P,B`R[0vtH)B2v8th%BM5tbNatl[2RWja 5bgK` 6 S;s��aI"rnbP~'9V8YNe0yѸukR*ȆW%.<~YՇ 섐EȲ9?*ʭP0tHxx>,J[aL$L=I2@F>H2Vn[U_[lpZy6p!IQ2EQB|eN~$v:oJ՗*F X&ڬC@nԦ'F5j nT VUT)Cjȵ!֍Z`]>"4=AcW<W'8u ߘjv<IحB'x6ı'qT`:B|*M؝0EE]#ap o#!sǮbÑYTx7Zs?oFӏL }jŦaҶq\IFYl{;l|OC XxGS %6z#2a<X^,ՎW Qb=9Lt(nJ(1J*""1 ͫwܿy@ U(HTI`rރ9S!SLʨ5ʎgSm8OK?C!D(ﯼ轢|y;_86 M5 qE@My"D!qRDՠA ؑ91n<�i{"G!::/yDb8`Z f%<'f8f"Rit3K$RbO]D*΃HqC! @~4R(*!@DN$*yv]VQQDF c8�!&b QRdE(:�q r},"Q;&!ƁHiAt^;tιvS.(;I!:�䏀 D 8 PsNTC! "s3wDq8qQbvim6Kr_Y>e:s|W>[7ٞtkamظk򌚵UY<31 Ũ1jlN<3e\_ lJ+;ֺ�%i^l99PosN-(_^%E _L}[;ѳ'dvjNA+)i4x sₙ#&hB-U.64Bo1�V؄A/CR$m]s- vh}6=5,98j' ЖnLyA3.wq6${vfՍIb@k 򥥺> G�_UĜb1؀F rH7=6S,"='WB8gl<MU)Er#JxTQ%X.S(&Zdi ֫,@rýf+{ 51]:<XB{XSm\,eLV}')3Wh4]X;4jX e !E6\bn%}kD1v9<ZGc"=g=`e)uZMiG>.C:D5Z`3:%1ČSVСIrM"^VjSiт7n8.#d KYz_PEm(=SSH}k بQQ3 BtBk$M<Rحm]"8nMt 1r>oc$cm VƱPVkKX.1ŎkS#'q$`MP`V}^JZ3f8FHvCX"(-@v—ƹJlX 0A5sƱ2 'ICZ ;uVJJV>`@Q8A0l<}YA&^yeaM�5 Pem%Bh3:u&̯1'J6- Sb%U6/|m=Lc0緰acQE\lz-Mi Pe(TFmxҩZ3-Bmhah5=a^L[Q4*DEȃX$2@* B 3L`#Y�<1Oe%yIݲӝ rt&AD GAHHHBx�",eiQKX,0ȓSȁ\ĪrĞIi4f&"J ƴ;2(c9 ":emIYJL QA) ,>$B))y`j DDJP* <`N. vfOݪH_Oħ8xTZE4@"&Bl&bre3�4BtZpBSqbY3L)kR(h&?- wb=h<+DUePF DAn‹YqJc1Kob9ʜ/lf`3]hR;_?-)ɓZZUQyi}HXLWoplJ.J&㙠*1!;vk�RC0r`ɫ(lʓ޲^ LJp|8>LJp|8>LJp|8>PS,WE0-I9>W""�|0*:?I�]+(E*zf˜iP19R j Bn#0Nkc<3A51;`ι@3 S~{کyJʓ "6cR2M9(I+%kEM{+~M#/,Uzy QaV4m_MB�D #"t v΍ØR8"ӴQ%/)>%R+%M<mP\a&��v7}+Á�ֿs <#^�L`r8m iR0�uPTQS )]Ra 9H:P&ώOș+RUTSU²8 R@�:#b`JCutu� bH<*2e<Ǻ"Qf{\Q 2|2gĸ _U$8s \+KJ744.K30IR5:U8:W `U!̜qNl7*VKS-TZ؁c8a<{0UƠۺRUy^*nPd͝Jdr{üIwYΛ;٥`·T(ՑK;sܲ4m.PN_e]dΥ/qeRO>YSҾ|\ 5·n.̥KM[U{΅0ntr]T6wJ2cBR[XԅiB|tT&-BUZY !y))L;ڀ^oSV!_ަht!]\�ՂnLJzu!7KV*]ޜ.+W'9V{ UfqbP m  !e529E'dumeͦpfmQEvi+,BV5DYfFVuiTq_&J.vW@n-^PafCui$]⼦la6aٵqd`Add{cqQT(gcW+L e$B6 )UۖeC3 A?3ȞWEijӡ$H[tcW좼ܛRX`33X= s}n7X,RoPB,\boAXbAO4֋[D.v6sOi|Xln 'y~SxҜ [[V<?-21jFH)-<JG;Ywa!B>!ˠ~wT.H-r foic\#h#-GfKZ1P˟HoKq,|.<Rmxq,m1 5<`Ӫ'er8"5 frƱZ8=N)<rJ ly`bBjOЪ>ԪϘd*&#?cS+cOW:'Tơ["SQ}2׼ҕ; N1sub � Yʓ*HfTj"1 -&BƱގVaAY3 Q 6=ZU%Bހ DNW:Y_;pn<)sN_jZOPW>GfE]1Mؘqyд6 E!R!.v9:wzP&uS^�Vв8,y&G"!(A TId>NY߲oe E?T_#?d<[JP+2iJ"pi(?埝rh �) 6_6A<@g$1i rM+ON{ Dxa<}|Z0e( szjK꨹H݄^WSOj͍gzC]z+xfweҩU׃HuuD `P4f\ ||o}ͫW^c]w~?mrIjF4qP<tudG Y)-T<]jap(L FϤع&E#+Kw1৩5FAcD e(ʇHBFNpn5vŠ #0(bU77s %LiW ͝J><4̆Rc.Ih*??ʭ4Yd 2D֛;Q֢ 7Mtj0~lĉT=f%f3Q)zjƟG_J*~@'D0[d'gv )fÂgoV&A?N.־vJg7)+5ȓ lKA)ccljz,p Be8`vQ6q]eqܢ@V!U4mkQТ䦇#$Iu?!Tt$Bli*T"'J`[m>*Q[>՗F )FnV#EVح^#B c@KRʗ1^ UA,"'%B$B*Kq BHtԪOI92"a0v3tB2 /Mèa-a[Fdq%tȲ8Km~N(PKӢq@/]L* Ym8TK0<֣kdWۊ (y@J`%R5BLReI)ݨS<#2II^eq%F}BZ01 cw!x<B`{N!Ĩ0P}hQzHJW0("oRJ㸶B:Vp8V\mJ K)Œ!9Q萒$1k7qL,7D^9D830P}%χ6 -WtD\K`;ӋU_ &2u̳U}' U`Nx8-Ş8+]L\G R6xꣵq< nE*W  ׬BcXäި!+:,}rWnq3X£u "l Dic&˹"Pt$MIi[^hK5BLr glqPM1Q;)ةufIR'I3 2  1wmT̹cŶe�&_l| ݒޢX!4`in"K<9gd k6 ,KHBI?VT3tWr"^8Eu\ ٮ@HX)c �ba*sJ1p8Tvz9BAB/cԒ-r2 ӇS�Zv5Ρe@1GˆuŪٷ[^e9vbνD#i݉M "2sdhP<f2Wl[S)͵U$-Ɲ("DU $m [bYCJK$M6Y)\wr91n;ƝF-d[K/`8\L4 6i+֍\|,2v̗4er5z}vldJxހqVDlVW["De+aBM0a)7ȀVn<zE& Q[z`(%g;y&Tj猐um/JF`E^z- )U,|1Kg)lIzD 7x.bEa/!?1uƔUb@�IQ}%Hz` zم/ذBWz5* *R\X^U7 Bp!+Yqrf7RKl75bX#%BDZyOLJoQ}C 2BdgPΛPh!D*]uB9|)-e쨈�Y@H!nyzIKZ$BC-1$޽Pq Vk%T<?;<!:YCِhWa_t]"yUeݥC6aZϏgKqPd@-x~EaFyD2E\Dr83&&Bn9_!v5CgAB5PU cG#ҍj qڍ1E8(Yr"2#8T_R 8iH1H.v5uGɠr* xdyq,$]D.c~I^W`Af/X+ O0Ϸ} 6T}EGe2鼺P>*U_!R=̱<AB~ "r! Bi_OdKjp<ϪTT$/iyz!<8ŚlԷ ؆A<!^4(S fc4h!>Un do)ۑҌ %'bJ/VXd͋qi^ okeD$Ӳ`% MսBS҆ ҸUJ&k{9`UN+[<WݐAEſB ҅HWWK.6eCͽǫo-q< JPt-PټeS2/rqM_unX{aG|Z;-^ "fuv3-NU;s,"80cs3{~:!#i5Wk>AQGA`[]t ~fS;wr5UYtǾ0q!LV.<F#H%9XX)Z],%<evՈ*(9^h]`%_tC',Fdؼ8 O,Em3Y۸1xAvM@Ykemr9Ҕ~BUF%+SrFPIS"Xe F 9b:E"`R ̍L!)۶a YFߚ,Xz`$KFXC["Di rr/~!%f A%6PaÄϊIO\"FijW() `kl,DH֠ƆG lR T:=3cR}Bk"md3W&)\s΃@I1%*26,@, ! lf.FAu6Юl4&%`+IBk+,/(aPZ#:y=7CDU<&!Ut(k F :T� ) !kXQ,R2"B+:"j:^2TYb[a }V<?I[RtxwmmlTfʚ247oUN-Dh6x>V.]1)xScul/ɓrb1Q\&dMYTp.n !�!x$y !56j bkW#ƱR}%j㸘ȶ[GiT_%Ֆ)V}WS'֪mu ڣ25v O~SY5t~EZ^Lq-+n+Kl# *Ww[I) R}˦GUV}BFHF!be!-gj!f5}jA칻J EHF+l{+k@bEAU np\2V3ZM3Ͷ i잂%6ϸ-uc2۩"_H)ST2Ө,$|U!bY/$ЬzjA.2z72sR[熑NIoh-F4*sԅ6U5'9ToTθd>IF ]]N˫u&PEMPri8J٨2dHWt]fRRBJKwEzY4tfvNU81vy{"*TS9S(.rە@DTyrq(E5Rrk4jj� w=P"t*DT52�)sOnJ�C2m%Yl!-/q.P`LJp|8>LJp|8>LJp|8>:(-kJN*M H& Dsna!<~\oo/7߅l٤,-5m^kD2Lb;URӳTP@xŦ\\L|jU@frVsgb1R؞Wy.Orlpbi~-0 7r]ឲqiC_ HyW@JDy@ GaDDC9w]cPi}Ssڂ4'y䕾\ZtMzb,QLRfCObnOՓ <lPYeCIy!LqLL"Jp^V,[>NeCx΀n]RoKVS$maR +ԀF3B"\i.(6҃Tw5us־,",1Km|\⇹Я*�E}0ô~4NK\E[NfM}op!(dx]Iq5nE>*X7D�j̈gTm@�-kTYy+jTuE&99JWgXj2򒯹>j9WEc,(*[%yוt8&<fi2·d K jldUfBV}F H UIzB//7o\z¼O3P+k޳!ڣBY1ٶ'b Aew*7.7Ʈ@HRӮvE՗k&WfVsĴVJ*le3ga2vZM;dei;[rz.ҿR-|6(cBt Qn B@H(3\( RuYrY`e:dY܂Stq<Gl`{atZ/E9(4Cz X4g ^Z8t%a*V GQZM&@CrxoaT<Zc_Z ӏq,)P"osv2&_]lC+_ Z|*yU}i_9M,q/$sy[j' !5 )ڵm�["[P#/u+ FtevmBR}YlƓڬ; Re_yq,=B z ̓hikvT_@7^G$RI~]xZ jiT)np^<ƦqL@ƱBJ_kkWrW߃P}C%.waB 5]�-<AZƱO!$pj-lf "eiG0mOp`!EUzIڥ`9j!xcVϮI5{8DN\_!I! !oE%*PꍂBKJ* 8hg`I1$đN_y[]vU4[mG]$?{>`Z+Ec6 lrҷGhjܒhک-b{+[`)ߵ#H{t)흑;eLO[s#0I]?dIWWkK~CSB4  7U^Iq~˞ 29&O䡬1"F) px8޾;"Bo m.䕦Ai'.JO\|wFuZ̦^%6TܾXrZ%8a8a'D3+j4ҡZlד͖W +X\TmlyR<lg,͟ KK7F$3{H|˜޺}hmbC;t YUVf~y /o9#wmݛvv#DP` /P·�ܽB_vB@oRnYPBA5M(9퀚@ D5DH#nB1F( /%*\zQL[4}Rr* *z#<F01B\4\LQ{jŁY!D+fk!&GhDEVTbs'l ;kh!@n! Tz@<O'Fy[[zFARe%B[%V"!ת>k)kSdxƢ4f.@FK;6#D+)*<8NT2jlYRV'9@HUI߾%LPAcm̊@X҉V\df#XKl]6%vqIrAT6(xeP!5B Z#BJ dg) 7zU(1B!7{R!y!&Ffݨ|j[GyCe v@]ѡdjO0yK5*'U"MHEԈuQDkB6t)+tȖX_2i%},U_*rz#q\y !۞Ux͟+c(g<ʾ;V}Fq,q tZqC"lM!_!ŝ q,l]BOp+X6]s3(`- _ &fktBHS ۪ f ,Uضcc+8g3oaFsߦ9hPQxm㘻!; 9Y-W3v`9;̃68 < :E~`Z"LJ I3-t%woe<ީ'%Ley*)5ַ'/|NRZ2m46ϬJ-u! Ojd2mbx L-Y괔i vq~E`XʴSBw&ePN4j wHNo49&9(BD�Ȥ&e!QwӮXx .V24ٚnʨNv|c`"8oPJZpҼI=JZ|?Ǥi<cx9ʉgj1EʑE\FSRfV:|ɒ-^@šR$&-|Vy(^GiN5r63ea #g:9i̖^lkjV/o4^85^iҽ eaYȈ67#^Z ;rsȾ w)Re]@O!oÞ(R,XѐA^ʹ�{9kq[ik{̱j/|8fJd/!I[-RVWsd]9ˤEMwXp1Ovow29BM(Aq4j{S\P}BHK$mإF2BV]9M6Q"I1`~hKB 6 BUc}'EH"R} J"ciEHVe BjWY"i뾋)9Rb+TRd,y1@ִEӮ�>'ҰI$o:6sB +%,8^V(!X!E{"*E&Tq$E(S!2q�*ۚG2BT:lpv{[+&~U,aI6ify֊ŭHrA5vo;z4v-D=`w$9hv5)26ɲ^D( "PUYh X|XR}s X'p<ƫ|,J=IE+7QErjR}vPhDWʓZ l B*\QIJZYޕ?&QzRsVg#%-EkX/<m7j>QS<ߪ>ˠ*_ O!f\CbAqx6VP{N8*ϓ"4=AcW<W'-ߘjyķX\ڱ[8*Ol^מ`:o+5]*M }R%e~̶i:܂Eܱk=AlWႢ6IsPhLWFmWaҢqDboëلp8&OД›Xf09VPk vm e`v`q lX[T1s'/va�5jM"zNKU}�AIoY'O)|07o<*Tib?K/HWDIX2OUks7&ҙE9u;)(A#@dw%-1Iûh3YX]XDK(:( %yhƒ1Y:S洅r5_"(*aY|WXTXM-<grKJBO9 a<wcӥvBU撋t]/E'> J'(e\fe4ZɎ4:v屖ͦX|1A]q !(NDD 8Wv+$+Bp1v[ `يYtC79|Ab{[ _,2ډ-ѳE_:[FP<2WzefC0"$.9bb <D!<Q.`jKSb6*'lTUp/gs9J٠MyT1 Pˡ-ݘ g\6>?,<x~ީr3KKW|NJ+HbNlbEјjm6=˵VՕ !sF$Y&JB U؀W#^DQ&+`32 eɆ񟶰aBTAyNi2se#[hʤ�hd`i aMqq+R!kQy#XްZR⬡@sCgFjBQRA6+C`5 k"TcK"(Ld6sgpL(tlS .ì7^  3WСI, E@!fl[ͼ &2.<ҁuZJ.]ViF,2Yp�R{x+1gnz_Pd)6x~k;G y y~k ا "dEJ!O~V -O =B!>!ynb -o-r̵4BB6=q<AR- TR}LNǕ'qLy6<>FCSJmߛTmq8! ؕɞc\J^{G?jg,k,e\+Mr x XzZړ|lAQ8bAM'ՈQ}/y>jlT q4(n*@5F,kk(5Blj YT_n#dFƑu}J~ !(]o2d,ZA$R|369l,h%hЧ`m-BDQNukS9fR ȉ=UK1Lɡ&3x^1=-m4R?b<}ڞsC26zM\JG3ҹz;`IkoS9u7}_ܝGSrBΈ~ &a9]5-UL/(`DڷʟR"kS4Ey6j7l"03y[@JOȒv/g҄2.YP-ssZxʩTy۩Бu6n|}Y.05zJsBƫ $]ݮiB!8:iR8V@RjLʘx̖LJp|8>·p|8>LJpqAAǔ s/&}:G {w{( DwQbCQ5: B})0 #@DQqAb @>D!@ &Q6DL fR%Xɓ2q1Qw1FMwQ2KrfGE�b"4Ib uީB>L5WH\69L%0A S"tsD !IJ* uL5puF!R=3OUT{aPiTn☉H#DT]cQ<c97j#fT&E�4x1bD18�xw!@vWr)� s9&MzcUqN49Qb ]30wL5"Lic"eTw(0\Lu,< ݕFvY$*9v}'ՠ*"!༂0O9f~ RN2W/LiN3,Szx@wn v;v84000gرc$b@hQEA bvL�3CU(L�i^&)RJ 6jT23DU$B c vJLw4�1O?Ǜ{"`!>onQXDcژSGcM m4eQmh]g n\o*1"9՞l ?zTP^Eyu).9k5Zpe_ͥ%˷*vb)ZV7%^D3Kc'@aR9)Z(@N!QS"nD n,ߖbAUUǙY+^YYwWUi 2y<l_6_ !FeTd$x9"D FݯA%*^h4lyi=EaF\ʌ;sC ==ʗ>StuCo{Nգݨ&Q 4Be7G#$8-s"Rl-+vBC>M]tnYO=%d6~~1]=;^l@>[6v>Cz/0v%rHoB79Bp tlhy~+ܶt6I%-'Z:W#uIaOd#=r[-//Ef˹/0v* Gb|&B*K)qQ]{|L/s`iķVj4K2&r zq< V4}Էc-vyҬy#=AU_EJՇ5Bλv5C<Z`~оo&E^bؤk{z'"H*k<H-ϛRim$nA)a+ hrϡ2>BEasXԻȖ{%2]D*H3gŐ"0[ OkiAHH'%(w 1D"GnNB>8u r{x 1 !(r_ATw;"1:bQ2C("Ωj(~zD E AѨ"QSq)JDew cb9*D%:#WQEdZ1 1 "L14s@4uJQ bvQDU`"@*T5nd*b`"~1*1HU(si)i- {߳ qeD sX�fT`uNª<ӤUd㜰WxUT�ʎBS;xq q(:H""2KӀ*"Щ RϞ}*T q} #L~iR*11b u޹%U(1]18CN!C1LCErbVk (Ds1i' ,!V>i;\'%VĨDcf̕nB S9-ubδz\ܢsHS%-!7U'sQ2QP3FQU1@QuZy͜#�&b"NVN+NyC�8& 隕]hz0k]|]/JO3"�[TMiˎ͝ʰŤ0HX8))'1Qƍ#ߑL5-Yd)@fÅL"-yٚ*Nej jFyWq-D^ശFHՊ&B̈[@K<6y` /g8%V"=%B2FoI�k}jj+Sp*I#GZ|cX~jky=΂e,*4o^నXeF'DȆMux86Pql. _RmD5B!MqbZ_K";ys!Yݖ;;-Q&uZ`EHƉn B c@! ,ʡ>!jE~MRl! =ʋDNL*+5Zthؕ!t#Fè__`4GqETؖXgeqtHu؝/ϐD..M6$fqP{qKlx.GSkަCE:vFHI!E̾FH9]1#'uy<[td1yI!+zDRi *8]VˠZ`jP<ǵ}/mױǒ5r f `CJ|8$`4 ?�l+WJ`ca<+y>Fu糿 U_Rw(U^ O0g7xJ-l;M`_&*r@ <*\z\Njy~=]YPҵY<Al!&iz'ק(] 2W-X\k-hH1F#W7ZA6Pp63iQ 5BKx!*zQCQTAU]|iZ#3\Ccv$ N[)#chZԧ2(ϋCs{v.FU)]✷"%r$"n@LI?$2qB3SnYIUHx<vCV9LAUfs/WfA9è*{&vӼ !EHDR#ّc#"0aZ("L̎;Q1HD{f7-&2CgS</`N TA =c"!V6\%J!9J*9ܼsOjuJOi)YCQ"J!DUܱxr$P OفT4q̽j,*"J+#8u�_x0G8�4mᬂ)tJ\Cp=c;ܔ0>(�%΋D+�f(C$⑙\1w9QU%U@UU:PN m%,iTqAr}}cǤBJ*AHxҔ4%9f;FfG"b0TsєԏQA�MUE&+GM{8DH 4(La"u6LjZ$JD<o cW!f|=Dc-u"sM |ߤF(F9h{t0gB٦W9kl=ܡ9P WNd# Rp^a F=[4KI 53E'O>̯ E[kR2LOmMG5}lWr,2D(Wf&}LaXŭEgf/̗4pNYnP!&qd8R*3^ ޚ\Kj gJLA;[:*#$`[Mĺj΂ $ M)% ](%}#w9Y" 8秬 @lgZ`UsRzY'B0d!6ɝ OBR*h<ųV )HBH9eKlDH& RDFm"hb5B650Uꎤ F"2@qD {R}߫2]56�c TҌWp6B~'̠Y H@&Br�$BL ,E4Bʰ\ !yң+j"=CrޤB Ra*hr%3O Q"^K+hc*rP+Dt;!8’dlS8,CبRbFX,.!ĠH"dQ'T!T6H&2TՇ lZYRDrPd@-x$T[J-A!dRBu!"0\,lCP;<!%,ݨPDŽe<`cJOp{Qz$831Dۗ֓ZMtqƑcQ kk_;sP#Y &֍j`+\%[Ʊ 3hEXG{8n|;CW)g=OzeƄ <P>*U_\te y>PҾobVȪV"[:ΦT_TM1<@^kY<3\O OШ'" BZ@9Op1(YOe Ht 3`!8O'{2*jO;M4ӂRwdoیq)bTZ+-sBA.*+!}w1]t;u;g(@� rw}811 LT�sMi˥[y80Bkt e(8v}3wgQcq 1D ;vws]JfD y5q<޻sy2)+9u_$BT J&b纮uyﺮޱg* u̎릕F Q"; uՕ>j 1n뺎-9DDM�ws:=ŴT(a1:wnwM?\wi[Rwilf<1#U1{I8;bSwnϊy(H}G0xq$Fnc0G&x=~;B01k2]wkC333|@":08cwPu>(`PAp !a q<8: W7�V~7wܛ %~;DMu뺮ﻮelJSF$x|P 111;rgعysLY^0Ѽ[H(:i|�47<'3{"ODιw~SI{$a8CQU|'w,p8c}#Q`,0c!)=g*8}*x*`0!PX5`^U@T!nx|CRD&VðjHl 2tjD=Yļı*ͫs+'~q^lʻKi\Ua9MV =U A< -'3x+Ӹd�aCZsn�*w,a@ǂ<å LoĊPȴ"lrUK[ÀUrD @We E[ !O.;jK2Ӛt[AE `c%6l,n56Cy+͉ۚX[BF5b DؠA]!d śV4B]!$O@HLo$BkB !ml Bvwk@Iq@`MV+4XlN d#JJb}kKq jCk뵚UKc t%6[b))mB6zMy~]�ⵁ3$"zF nBVn#Q''AB&{!q;3q!B.T}s7#U_٣mԃV}+`9 rm)׭;֪=6=ʾ!'qܘp "\2Dȶ4tqSL-g'r8RӪcG(P}Y# !.i !v&ZpA#EHжveٶ߁ARW'hca%lv5e~,Iz}C<+!rMe(P"J!]G8~Ս{}{bD 0ESOc8H`aDB8 v^d}\q)94eT&(2T�N18!0p87bq ABiu, bPDPU(QFP_w/?އ B!DSLDSs0L'@Lp8D%ĠND 4j1p(!x<D (1JSXURch8e1J4foVΛc+<&N;vyabNA̬xd'D*%Ff? !FY*bqp!(NE"Qιc "20 1b<O?1 1 }I%@@v eDUcdb2$8x<v]@DD$BVN4iA"Wp7ϟ'_|ŧwwwcJc BzG qZQ ^>O?ї/_]pp8Jt�΂Lm8y4y 41!!ȑYGgn#J;R'Cm9 :D9 h~[{dvM~!1qZ+ӫD!L4b JLbFb{qw>ru(G2o\x:<V%TӴy#k F!`v;!�Srzxru|oXl V<Y0x5vDbrՄ-Ԥ*SR>by `oȦ 'L]E5ijuT_R=Csc}uqfٱ~}%k-6�J`U* ` qpˏW\Mh6z&kl\ּ>w6N!(PBgaYU?{mL ҲJ'R|yr�ȅ\nmma^'Ǻ՗*�8yf2.8ݲ'A2!!iѣB&"EiKj nh)l,/4}d]UR{{"7tfg=L`=?l$1ɪGKѬFz+*ŕq~Wx_&r⟅W /0s^2r`{ 7IbF/ DN\v.*2G6#>FxBd=1ho替O"t۪ovіљ|4Z}t^"ʢb y8?+RU>yC E>_!dFeG  AlRE 7bBBD=Zj~z "ƉK*>j'Q'a8_쫯|ы/7ûWp$Jzw8*E%�*S^Ա#&8ƣhr^"+crP@,@$J"ܕ*+Ѵ( avHQ$ PsFcB9f9.C|{Rf@DD%O>}W8܅(?K X5K1‘3:\u%�VHw7~ӻw_/?߄_ys{'!p;c("JI&1JהE.D v*;T0#w;j=1cN*�QXb 4N0gr;Eu{DB]OÛEO>G˿|{p#L=q׿0�Ubx"9fQD`D=Ba 옜8+u;cn<0t 9x}o׻gϟWo8ˏïQ΅qP=}ǟ|򌙿~EuǗ/?'/?^E^}x!cȳDL  SWUaBWWWW~cd&;fTy�1>GWwo}-K'B }TD19gD%F !!YB�:�19"1BU!3H14gr R !8&"; ! QsWW=aw_pW޽02ujB¬Ӛ~Ha]u AD4-q]cT"]+Wfn1kӷ պ3N~{CqdÓھmn)9!r fi.WQݤ_%M*jw4oD.FRxuIҷ2P-M$cVRzIUjhNEp2\u'mz(UQ( pȓ t4}qݷ'N_|zQ ː_yjojl Sk[H^]*2;6h5vl{ex.yY\vc+~6bV]j6C۷$uuT?r֛He[T mdeGy$£d~I<&JqQ/jbbfS2qv8wapmL._̳ȤJO?4JS+H E0ռvjSG7:mFzӠIz7W5ra:w{|/Lc[Έ\P<I MIl4=1:*-0-<?7ɶ]ʥgĸ/܄nkuނGw%Z5E~QREV;HV"2%'hvcz,oEWY2Kjs5%F-qgj<1͢cLi5.-תT}ka[e6đn^Q塭ce 6r壍#uojK1ʍ/ε3:(0dR!Vϭye,)n8AYZPG lQף]/*4U rKYm["[m:?Ůzy_ hv^䊦X�[~"[͐';{eC) <)H~~vGwu!Wp|8#OQ AQisp=J1 D*q{wo8#QiQj`fBy3a @Tγ"1cPUC0Hqq{GĪ":V$"iN(p2tAEe$h~_~||+!2 Q=D{FB9vzq}D@|Ͽ|ݫ>zaTE|`dbׁ uQU`OڱWR("!bZk8( 34!M"W�*QXI3sh$xE+cfG@]煡PCĨ 0H$QAx 0a]碄ׯ](=苟U_CP԰~o~Vdሧ> E$"#G!<8uuS@c$"rQ0cžۉ8xtӗO=o}_<⫧w?~?G?8w޾{]A*2Fe~W?~oyeF/O}qs{fϯ>yݾ8DR3D1sMTn`r U(DTAQi 1Q;1 ̝;w}bԨ"A1**r!0QյvpaPE�V)i_΍g% �LQ"F9ιic!Hpg/v}Ȼ]/{Gp<>8wgwA;&vn2-W4Jg^abZ윃i{닍7Q0ofQv: i 7Tf̮ 9L5 Y+3ӶDԅ{-dUދL"} =f'JJX1U'rk<zdUC4O-*Hn;eǢzK3ǛUu qLHxdx%Bq[] .H@OuvzQ`59SQ�wnBodeߋ2uir #{E(E:rP s Iel !@n!%BZ^iBȹQ~O՗"Ȩ,gA@aVKt3~e&f{>S_o$XakJO DKycZ&B60Ѣ<7+cRΏx!8qKVk6.w@OUzq,kӡ 㘛YС"{L+6XZV�;Yl쐁45I.35ݢ@WU+YY!RYEg/6vomlvFHidittI x>5ހʱ ymo(hܨv{5D^+Rm,˟d=`~�r35X!X{x �3 4Mq< VQY8?ytܲR}R g7#JWPq|}yJM[Ѳ"`"Op=Gֵq,T/5*Vز-_aqW<Q%M̰ 1=׎$KԤFIoi D+mX8D_SS"7 K"X*6Hx>F`þol3o�kh:jtB B}yPap=}/7Woooc8FD|wEܑ0c8g&1;ݝH�Wg?׿{_5qvc c 8s$L;"Q(|`nבDBUyk1 E4HCh`HwD He|8w^> !F"~w?Q.T#YѨB΋ D`UҨGQo4 @ 7Og|uP s;�%8 H%spP0*;:&KEU] a8(zH!0wߑ !1 .꽪xruL;h+tb=xt"w4!R GcCcP}B8!]pxtwM4Bԅgx1ߏ6^A>^E*1 z$DL At`8 :y̠@Q11!Sǟ|Ƿ뿃 NoP^<WOWW^_ߐspO˳oaϟ_~/~7?W?/)q<(<wcg0q"vg r(@uqJ{ z:;;F=v" E qJH�;ѝ^Fđ\G_<oo޾zRs]] QAQ@H(<o.g&x!Q#)9!jPy+  �fQ `pt*yy7oLD̪|^m3ql۴=3i#U)h"UrrUys'C<6_pf[rc'XV֙wT[ךּ-Bgh4%sE[7 fv UΎ3CڋhЬ!'Cr ՃcTomλv�ҭ;+r[o:T =prM $t**x;<ߛ!e�}+lt6/3sb%r{mw {,B82yIRKD�qZ6�hm)6PK(ͪI3D.sDc]Xgq6-Bb�mrX|WHɏ6:| ț38Jٳ:z!z89nTq;] .e/'=8j'55/'nct˙˅f==Ǎ]=Ap,m/Opi\)SA3p}\'<Al(I49<-B9ߺ,߈<ؽ}:+cr+g8~~jFt_@Ǡjλ-'Xd~>o~ӧ^o;Ļ8ḻ<竛 ›7nw~_~w߼Wמ|ǀy_1g??o<}O_\_݀8{h�n箟׻M|w_ɓ^"w1}?}z;}?.>y~K'_ݾppa籿kG7A_zsË!F׷wb'WO}^yݮ%fCexz}|߱p{w|_7}wwno쯮~Gu~}w{wwO=QaA}N}vyshl���IDATًnww1y8:vιn]=<yx?qmq Ƨ/no=�SW #{ۛgx|wa|y]paq>|Sc+Q8< p=p|K){wux8 5;ȉBB�s<<wO>yu*Bqu}}}spxh|tWg~>_}o >yaWgp8Gn}wwxz0 Qjɧ>d7;/>g^vq _}xv)޾="Q?~yu 0Ex~TEw;U Ƿo~rW7A1\9]/7GG__Sc&~O{,hﮯ?AUz a}{0UHwTB7q<c*O_<۷pjbvEH ykr+U'NU58 ٓwʍwM1&> ܅zNCdRs1ߠKɉ-|,3ulÊT4ukZ.Ml}taM&ƛ7] 1[=_ӹj484-T)s9^[p|^Xƚ͝nat.|g˻I65~u6ÞmQ^wxsNζC]f Er42քzRe,cKKWSj(΋b])d9sP`(V/PQ[ιת>R96H✱Q)<o Vd=Vc#F*`ab _H ؄ !IMlxzBʳ.+6*"䔙ӵu߂*56(ÚČ+R!kQ;Pȳ`6NJBq\6v",E!H !ãjآ8D+Ql`Y( X apk+P$Q["@MWhRuD†r!2(]҈6v[Ʊ0v!0dJ dAȺƢ<g_ڋ x~A+6<_,7BoLKS `x*]P cj_B} B*.1M$m,+B'\A!m!dldz $i3  0>:iW jlTƑ`H2Nx5}B+S<jq 1 ItHKRy2V>Vn jշ!)MZf5az8eK .X;r6#؈:'R}6v\x}\9kOlZ,FqS18V-P>YIa+[hB, HIҁ> 4cr Hhu)ӉBG[hx簱U!5Xhɓ>5v/Zn9YjJ8!#?x?}~׿_w{ǷLGǾ//^| A_/Ͼo~u(7_<q>Ec!mÏ~_O?o?9"2H$ '_٧_0;7??W?3'7//A?>W/yO{o׿~W/_~'7WWW/w_krqv<A޺G?O~Ϟwoo~'?o~O?'<WOT~a{O>拏>޳qO~VQ /?zG?{cRۿٓ?ٗ?^"nxWjŋ'|zsݍ~O?Ջ̤7o~_�>'|>cM_Ϟ>?}y~?}gG77~8~=ǿpq?O> w8үaϿq?ӏ?}߃o<?%~ًW!n\?{qͷcx"uՏ>x$7?O:W_}黷o~ŏ?|x_z͛wO?WWO~wxO~S'~k~Eu?Oҷ~j7]/x_Sx88 "*}˟vxP]o_=|ïvW|􏇿o>y_?@O~߽yoˏ>ao0O^~Gׂ@n?>쳧no߼ͯo~;\='}ѽo߾=x{uU ?pv}w}ϟ\7?c n?ɗ_ܼw귿u|x<\wO8q<~g~qwՕ`1ī/_\c?gDAߍwx bϞu{ k<B 7ű$G3fO[Zs=[(zǺjjw\AN\oMS W$J D6d0Q0K%] GnS~-b7D^Bh5ʏ/m61<-4y{E1"Fn Ćt5"7h"ŗզjAegbz|kL Bn[dK@N59 *2UvjZ^6DOtQ[#OX\P�ۨ `'1^ 5ʗK@ ZN8i?>|p :N)FFȪfIl{6v l1qix *r )4|th bҥ #lވBJX_UX;Αަ*x<m|)ϿXKEg{}緦<eZ|P}+l"ET_[uICH56RE�*ׯYdAQ'ؐ񔄍]N"Tۣ\KT#E.Z|ϧifó!G[6gMX v�U|=]rU]5==0ro;|)Ma{Wf~nxnA7@jf7) M��>0P{ko]m[3u򝜣->$w;r8ǻP:^DH-~W[ߑֶ:l2J&9,|&) 5c<R$f KY�Fl҂ٌVk>oAQQg/|ߜv#* >S}y=飽?D�|p3 2U`w$noo)M -);xxQAރngZN@Z{^|z+i&Z ?{hhA O{;y4GG)$qȅ`R*/)4IW'<t8'?>�xtyy8CRx�% <tvx/'W5JMQrg{�2I"# dt0wlRib%.y,:ޣ{Dr2wz=/no^.l1 #q,Q;??Lup2>{ ZXNvl7Z2 hU'qDZ2 % h'Ǒb < Yt=Yv>^'0Z~/:L;O>{8Ml g  5gq ;0biφ]gatNf֝/ބI.#=~{R'fI&DLH?`~ý˫D+Ι I#tplRxhԻp/":TZ*Mi�!C`@\i ɓr,*BWǝ1V]eAJIz Wqk ^ȥ�CI�JI'28"?{=D2\.ǃ{xy 1b`)zL' q;<<^,I\J!IvǐJ^Ͽptb&<1N9Q'|6>v*QL}`o-*4I$ ;=Igv\{PZ\]F*:Eb 9.ǑYVoFu9Yt&* }.`Rm9!ogNp~Q>z a*hl\L@5 7}׀rameUZKpֵ[}a=|7~gkU EwUd +, \׶|K*+V^:.Ftmf3=zStgPV8Qa v0Jk]NW㇯5ʊmI\ψPd>~X󠕜 S3zPc8a|YﷇoYgD"> FhC?6WHP6H(K !EmU|燷6<uT*.ze:?drч�gpDa,Qyvm G_3̖s<`3B~gݷk`fr)ѶQϕɦs⃛NZ] 5[1#X69@Qu&V~k1Y$Z!rB|at+1¶>/ko߂7o0p)C7a\Uomkz 6Tx-91&p^h6Om՘k^ɳCTeʕkx#==b7�hN6Xu#g“ς'FoҎR,Ք*|o}7 ==ϯ|y?:]fd:o?>~tɞRj|w3?]ݧt/.ޜ9>:|gx.GγO>you@'|hf|?g)E.pLf˳K)ON^'۳7g/>}Mb9<^__]LѓgDFqR̗Go9gez3_/TJ5=LN.Wa<<O^r<N4{Co_-Y+pMatJWwѽ/{#LLES^}j۷oWrz=nO^|~ëxq{p2x.~{uq}z_~ýO_{tt?7W~}s{K+|zM׫U`oO?^^YÞ%zqt4闏OeOv?{q{g/_^~vx4`8HyR*t|u�t`g_}{=]>~zW^R޿thX.7ݽݟdOQۏЩ>*|]ߞ=J?}s|dW?d/:;Aw5ƀi'UCT1`H2<^_J9DFp''~'?ϟ<zV{+U> .i<;(Azpav)w}�Hq/v{vz}.CÇN\^hF__M'#atr39:>9xE%G=i�Aѓў{;;$i|p|oAZys2\vw)JoT |$p8d¯9*%QCFp;{{8 wHU/p ` Q1c1B�&J6F�Lb>+F͑t;r1%oO3W QƤr:C͝*fj)ܖkf9r.[M3L01uEܩ"(]?dZ.^w*\5j·)B!ɪjHw-B{ъ:7Qg٦ջK^H`) qQظц PT+lk\{˯򳱛Aseu[ Pk6k07wV\K4ABBlc̘j}i!M\I͝mnVb-L.moUxAٵQC}V[~Yȅ6p bmg˜b")n. 5|&l_c#*g5g؆(vcH.<`\ZSz9TlVȡbsv.9dQ! *Ķ"*g lȷtv0Tem*n;�&W74u>;TԨ/C*_kئ qc!Um:YѰ&�Em"\k!2RˬJl7" ^sM٪%ɭDzP ]N`;UHj@{HZibn!9&trͿ9kL6Ri8ĊM[sH^&U9t`tR4P9npp'ξIk'-:@|&A}k#R8|DE}"t~>ak;O No!X5[ۥ[\rBBl@cvE+9wp.j19;*R T$%B lQVK`�تK MRRFW@H__}v6MF{(p0}W_?9yxrt.n@ގ9]7gn{NWopIq5z|~ v0NgGWtx`2/ӿvxx{Jxͭׯoxd۳~ub0 P,ϳIQNg%2 ݽnwVf< Qz 'L'g?{^g|~o97]hw_o?hzg\@��LO{~!2OG?D+ߜN~4:~" }d2ޜ}٫tpt0ϑsD�4of''g/7<}bgw\L8vt|pv2\~ N U WחgIoÑ{3LGޤ_`GOvNNwF{_޼~;<DH/ PBxp6ݫ_ßno/|O~~X;{X={5`zG]z2w^oǑ 4L#x!_] x?a2^h} Ur{{辔dͦ)E\3Q"`9 #4( <4Mt&z o^.Vt<{pސߞdp}V|;]>.K$x D;^o(z@Q..o^߼}5睎? ; 8]\,a|Tn{`v; H+o^Noz1Y)B1.Rz3Zv?8J飣nd pZvO>)EaV+!hw:`@2Eθj>O./pw.!j5J}Gb@YH)R&0ZaD#r;4.ڰI-hzK5T 'y>Ԧ.J›"պW67ټDW6k>Gp7q}lTOh!F9Ml-[n) ſfYNC:ku @4Qqm~7^]pb}h6&Wq` z{=m o7Ih>!9d\*[-?s\L[ݞ𕛝Ŷi-}1(u'� YGji!k Tl;AA` ob!4LގFʑ_Sq NSm :GjQ˭xLnuxoFhtޕu:]+8 ٢jT+B~ O huaTS}HjkkkAn"9~_9= Wqpw ZDib}>G <qNkh0^2|H.J;-{3z  o 9ElGe{7Nci n)vK~H:m) U͈PElt *cbKJCBpL"�`Qg~WEL@8"O:z}xp?C ξIяQ{%!'I iD%\r<D wz?՟ݻ|x0Fat2A{}_i6,ޜ}=[&'K X]_D 7''NG)I4Gr:Yz9j:f4zj2\M$^.Pr$<3DOn?dZ?].G) Uxyu6L4;�ϟϗ_}7_a$@)a.U8F\.1i$IG wKSM*E ?l,z\̦8$d)\x6 wOw1<tN˅KMl9.nn&ax"Y.Ɨْ3ۇw~׏vG?ߏ8T*%Ld?}~Q0/FD YVIJff.]xg Y.�#�(.Lj^ǷJjN&T0='wI�ip٧>< :L@2B @DdZ )a"0=.<d TA0d9J(p8HI *8,\x)0�FZVT1D.5IM5)Tjys9śeV!Y Oj`x|r4jF)z;ea^:E@jB"OC?\L.fjҫU悉@wFA.S$0PWQ:dz0Zv^ǔr<o<xzp0z{6ܮ8b3�  vGNǛL"?<~y> TZ.W˫߽RNgU4T'<9囗/>;DÓ{igd>8aYQPjMD}C+-eȁ4V~h[Řm=c",UTh8b[9 K + s\\_ 0j}@&�<>f:W6kg j[ n>02R51h>&z 9d(剀282TmfN)(fpCBrlckz†=)DmX6iC5h{ʙ =<7Mbnoe:�!cr,b#);Y5le=.UiBmJ4[iܚ؋6{X5~<PKM곺zlah`4XVAx^l`c؀&6 *R1(QR_gm T(Qt35}qB 0b88'Bj\ !uc!ĸEuaF6ɭo b*FnB)Z@E}n!d:;B4أ66 !TC6:6N oK&rcJ)jrzf%;- 4ZK-m)F7)jB!>eʡ !C*[خIetsl!G5*WЄCبû!Z<םzoP_ͭ*I}-:nB% q ՚ !"Bp B¨vD!TCl� !5B.h6򩎍:B ޤ>33VWstR4φQ9.M} tQm`b "56{Ԝc=H#9Ge o P o(64_% yI}5#8hа* o>W$XoHZ#Qh6UE}5@!6B t#L"Rp*8!d"F 66#%vHZG͜Ht5O>w XÆ3KAY:MnMI5``$ILJ_ͦmax'UԚd0x^ (x</x_<7o޾-zs5" CL$! MP.t&mRחl:gA'<HS&8D }Iq] Dtu2I$}�5iD0+ƀH{'8B!p<�j qMٔ ޼ W!C!<|<"#b$TD.5 B� R~rSv|}y;Ap@ M#"ιC%`4ŋ>=.g߾MO<G%1DNS$j&Iԉ”i2Ѡ<7oofт]Q1.矞7>N{} Ok i !RGQ8G_x TJ2D(3؂&#)IdFL)MS�#΅ǐ)b.t>[uu/>'oܞx}' %DJHȅBt_~DR@]D:C8G/B�""0D8`RQv;=Α1FDZgD#PRԥ9'!g<?r<et2I#)"Zju{{\ܻO<2GLJ{@|:^p0r'uƤR1<vIkҚt*HQERs>QhcO_ i*IJ(UF$N()MӽAŷJ! .oٽgF73e@*@ 8zj!/ϟ za|Nj!I1.<FsTɠȡR TMJ"[rsp MP;A-(l/m3mF 78Qa3dB7SUCe¬Y r,ClXM޸~^ژk00[ocVb>n f#ĚۘLeJP_y#sx{Vm]/=aB kf4[y-VkW9\C5PE72dB(שaB!l: i�w˦نojmψQuۺ9G:;'m:] d&7@HjwLj[I6MBF`Zbfi6.76N[qwKe;CиzVn©ήaZEo۴um}w{7ngBuN:&;|Cm!z6n9O 8@{h]bm܅�afBbr3VW`@]LvQ_w>FӭErӳ8@nY!Цkw79C![u 'vThx56b hWX׊Cw>ߗ`-Էy�ݨXstOo  mFb@Os\�[Q/@]f�lE}ע䚏pȇu{-*}-#YX`z_ V��0gErrӓ_}/<swPRib< "@2VL_oLtO?~y77/_{cG` EN}1tJ__}oԤYBjf~A㙖 8q{stpupg$qƩ @3 8@(8x>S*ACu n`g8đ q*%o 2/l6c)R*œvwI:&WxE�Dá?Z{{h �i*Dz=GϾn2R }H; k_ <_c Ư_}/U\6"1,!0$ _iv}c7//vu\&`?}~|tv? # B0s HE41{JkA)� \{~tyݝ`Љ#9v0`'_?D(V^F/^<ǁZz'!v 5ܗr:%Rcș�"9G9@b�y<~g81T �1.�(-1y"[yy a8z|6O&dZ.C }a>y^~Ng:,Mup8c\pH4"2O3�Z`wY˫~x=G@Lkb!19=ra__l/v&:* 2!)AJH/ooofwPhop5~tȽN~pqq\-(y\<s|Hk@*')y�!i&0YN'q]|l6q~RtF1Nm,MZ4M=% V/psԕeW#sDe1ʤt>J[~R7ޛt(SFrm`PJ*KjJ`jVrQ+d\^ml)l% \Y_Y֜\Xle>3Woox/,jmJU'*�rXm<B .;]֘U;&+m#% FkTBBg< 1(-V<X+ Y]XB0ڼXPD]gwV̹:7lR/g||⠾J dYQ㺥{ks&2JskЪNg go5ph檟ٙ϶>yckX`"CErήΤ{4L]%i�y&|$$$Kw6}o]ns*ܤuumؠz|\۲ ggdηMp &cldSvWRjMm5[Z_~"S*jl\!-b"D5˛ V.>@+a۬Άn2٪2`�Vnx5mK~lsb1 ݣ Vg»ĺ%s[%:lxL;rTLF}*вr�KBE}[8vCչdUa K^kjd0:xA^6Z[r>+1n`ίZ*;ق[V_8do1_;KTw ˫ϖ~sܦl)SF^Oڍv֘mQu9u^%!n[6j߫"{<:2B bxώ~_=Z� <sR"> f~}qtHrdc#Ƒ^J P|BSǃデ\\a&p8n|;V|1CHKno=>8c qs#7ߜ>{r<ztp쥾 8(y`c7:~^W$Yr?=O|:^v{ް.o¥BEb>A Go^kZ:/^DK/_/'*:,d O >}@r|xx3R|+RR0 v{ r7~8}pxN ZLJjxB nE)}.4'-t}owxH*O7Ltz$ (zq<?<<] 0!i N B,\?< ˗/;]{A)e)ポgϞ]-Ƿ/۫2:dAPz <%za3V F|�SupąEj\^]]So^g,�)4bdϞ?Ds ҀEpgeG {=y]_.$>'|y|X.^۳tz/p74<xpZqΧJQR9! yhM)&MJD+:? gzwvpI%11ѡ52QjVxo{u`Zs\+`,۝* w I 41NVh rΑV*v!" R|>_z9;Rx+Au !Lz5�sZSJRIRk$Z/v h^̙Z:_@Óbh[m7Z>t[xc~6 YPDtEhQw;YSnvobj^Ƭ�^ʫWRҾ�&9kG*t% 5uT6{h#7׽Մw[~ !eEA}/͝앋&Fƾ=P p7@־6xu<P+v [Y]U mܶur GOb۹W1U 5lז Ƅ\$m,m E֤(1m!A}1*�9:<VYPM7"X3sE(XWm"&B8 ! !\aɡϸ&]kn@[!c�mpvJ梾sULF#%i {ikB :nPьυ ]z`kgg䭜*;ZJנJ>5Z`!A,ꖵqKgW"�+TJ.بB${tvqT:;32y�=]~^kPR}*9;5bR}-kl 5NBjαPp.6Ի]ȍɄR f449n)ԷmlF 夾EI}�MxnP_#luH}G!͒CHxV`!S2C5 -}+hv4M[w˸B1fnlZت󝖵FƆpm:&X%ݛ󉬹E.`owpv;ܶOXc|-Z+Ǧ - w4YP+ذU�je9pg~ȃ!B.^_k?x'?y~$"ggu&1d>~ӟ|rLn_ O~vOBv;^Oi*0`IB|(o7B/>yl0wi8I2^8|oÕ~;yяGuVK_}upW^㜣,&l5:ء4O0\DI*?pIA |/X.ߝ]]Lӈ/VJoӧ??p^]7Wpx|?^_G<7df>_,fo>~;˹d(z7Kx`/ZlHVy2 V 7<}v_M+D fZ8d[ L"l||ŋ/ F$NSDWIP "$~`RKc>$b|/ vV4!:F? t{k=(I$ "x@3Aq./$ŧ(þ a1$>@TIҫ) /=xoYz'ߦgs_ۯ_>ϓDA7q˙:?x{ъ8 pɴ g8MO|tw6C)9H"p:GϟҔvDNE8Co! M{�}N3@V -X_Jhd쟿'J/?2e }s3S9i[=>߬6\-d_|?ϟ<L=Jr` 8gaKZ̈ Ԋőb|joL@^B;QlaNOq$W]{rOpv;t~pttx~Kq{׳$^&w�toSޓ'/vGbg$vv= 1UKc@<gdi ZrҞvZ ;t 2XP!*"/H ֚kc%:KʍOo7W*Ə|^yP� X\zxɌ{#U�M j(rDqVSGF*uCrV h <WȪC*%э 4Ǝ.jҦ]8l'W_Pg+[(R؎tv-ۨvWSVTuk6wjKWLl4TGx`۽1_ZB]vn`�pհm{<B$l�Ԫ+E6zjR6i`&B ؄DHK78DbyCcyu`E}6BRCHU ow6‚b !5!!=j($oBk! b#�{B/9Vnh 8'4Lp>*60吓+SG<kn,` -ަب �9:z+PCAk!}:Ghu$Y \ZPB#T^ 5\oI Ts|ք9dЦ nͯQGkR!Hn 6#^ړ`,ZCi α;DzsC$58G>slP_K$!9=D`GݹrH}HDF,Mv]64.-z dM>xG#αm`h`ֈ:#H`_o# nqm[K�$ 5tvX! !I׍l&-zv*@hP/k{k^g3lb=LjTu FlƠi٩* {/�4_?@ 'RgfXfid 2 4PhMZb@j> U*P{;*ܬ&$hg4U'qXC¹1؟O"I-<xn&K|Hu^]\^/fQ)BW)?MrN" q3&$IJk/yp Ip!ӄx&1oW_)$~6 Il> l:YL8~>^!!^GW?b`ۛۛtdihuW&bD+%w^O ɵRy^Q4J�2Hc6Ighi,¥M2eIe??]'7$R2Zrh򻛫0|Pm|v2Z1 !Za껯'g'YȦ|9I|&y4 ķ_]>F .V/Mcu�ADa4\ҫo,/BO줱w}<?! >BonoVII3:~Ht/:q!<~{]GZD!;{5ͯ޼)Q)W)'?jdHOco1^o_-gcD zZ4…޾^~zvLYu}W+5(\7,Ry|~v32aKbo>WWl%,gt}.e@PJ"__N9vt^_dJb'�D&o.Φq# 'c:{832]"2߼^hҘIKw{#ojsO(9@kZjL<ID\]˅T CXd,QkKG!Ek?:j˛0 u7QZ,gRiU7;jIi"d!oӳH) ի8JSdpyR/v.d%!"{z4.g�4i#ڙt큍w9I3�DҀ< !BL#a(U+sڞ1đrV�55i\/h(ۍhd?Pa Hi6ow0y a[q�,ɻɖ!٢@{'tw5s6R^[-_gr赱moCr7Tu{6_@n AFh[y;M6rƘΦ۩ݰa>Z]ju[;#ذG^̻t`Uo񦢴6ڂ*ssM:qUun]D˻ƶWl~T#Y㱕sj)h[W9xpC"-U#SX&oȭt`u:Q9"ֹXcwB[E.%p`[!H`vg[$-kNn&gnviИֿ;uvC׶~|ymnO7oVM Ϫcc}0jm\D]/ڲ,?s+9((Ï!mrٵl[^ +K =:H� gV0׳K5�֭;TZj<Tr9NO1R.d6-�y?&2N0 {;;;dۋ8;;QjE*Z!CX,˰t{{{cW׷J^phwwT-ћחP0Na<Cvvz''$E[@?8IrMÛUN;dÔ:Lj40t8a*ozr#([-7iʙ?F;q-QbvGA}LnQh9j3dz0۽Gʏ.:Jta5㓽pĦәjXbi<rOFÝQ;@`׷$Z|itq8;Bj/>o?/߮fqqDZu~? Gq4\(RF@ҞJx< �ƉR}ߟH`srrogEt2O<@dRE^C4&(|Hv;NGLt|>YVRJ؃;|vyu;jd Q~_ksnI`&i2Nn"{wX]_n'DF.?>9Zr5/T*PFp$ dt0z$`'HJu/rTZ8</lH+)@N8JD"DFA|xv{q"߾MҨ?蜞޿d>_9Rq&8ip&p6YwAV.X ]Op�Mnq `W"p'5$I* .""pC�%qTʄHy>?8 X,q6 v: UGK$ ^*0r?*x9${AoHqi2N"{A}Q*jX$uw0VZy?F Wd8_ ?R%BA 4#4.Gw!HJ1IC<;NjZh ��ygqXO�o\h:7TF*?Қ1%zk2,=UJC#9`=74Z,!%'-΄Z!ti*B#kPesݸrCВ)'DElGu9Aer+o~W׻M> _Ϫ\(ݘ5"qxwwn9ylcQhQk-W _rZv;!W7yN ֩ |]LjbfrjN䁢 FDH~"٥L6qoud"; =rzlܲBsh.j^.ZҲȁw;ߜuǒ*!Α6涡o) fAݜH2kMߝhGmc MHZl}p֑ w-{ɕؠR[w;Hp=Av1YϮ*Um"FH_lNaF6b;=@E }p7f&o@H^B:I_O�# 4({3- 8"'<(!8FyyR%qhwg TH0VQ V WRGahg lL],T19 D&P X(h!Uw<!F D]3%xdj�Zp&p}wr9_ ?OA{J$ҫy^@RK_�Ҳ2JK%"#ŅR&a`B8N/Zq$NZxt:"fsD  LhRJASiRDJ&b2/N$N(}ŏd0_.߄ii^!Rae~rva#<\qy쭖!eD {N1p>^' }%tU-Y(�s$Qhoow>/1iHInMt>[2 q<N;^b,1*Y,=<4M= Pfdx^pE^Б* l6[-B "1.x/IJsY`�N VĩqBpt6F`2v:pȕRi΃^&)�y9K)RiιTiRF{�aF t;]u%B;`Ej" o<:= d zu`0xfR"TŞDx4Q fDM.8 8٤7A |JyI"$L L@k(TL�2"FQ1J3JQ$St;^)ٌ19vAehɕ".q�BPg$/�A!I)YJ}xPGϏigg-M�/8oM];W>;Sj_`9UeZTKFwJ5G,1bo~˃4\jC-3"Įjzq]y 'lm% .aRǀ-emfM1.Z{YC.76M(ڃ#P3jJ[VpqwNm;eV& t:;B>H,gΰTŶ^vt c]k !-Z57͊m"J[ۘxqNR?C=Ů$U&W/B9]NZh=ȵʵraBp:Hb:;NkVoXe6;HCHu}{akr~.ׅC6Ez;D\C-cejM\^�vs8wﺾH7wL9]T\yd7MAM䭨}"-ڣ(t~S$o DDɛ#sS$s Umɨ|v8]$kuoّzP}tmum:z2PkW�D B9�$F �&BML)ΐ0HkDR|ζ"5+'TJi,90`8 'EQ� �JKMȐ^D§TqT"c=#JMNtRx\!"jN�1�L"SBbyl HV4T  DLR؃G?٣Q_́u9@$)@3q"t*U*e ;AG Qj"B 8 XVJ MD c`1 4 bZJP))U=*Z"n:Һ<}~W$Dpy9_kQq<1$RRJB8CFZZC5D/XWkBI"bd5I$D<$ E#pҌ4 82FE 9 9jEDJ*5" T!1 RdJ$qJքȴV�HH#'di-� q$ V<@R` |"B�!*@)"2l2@$�t �@#iR)d�♜%BDƐRփnDYnU$4R 9H0�GN4!�G`L)o!0�P,G!1}?t:^!M&,cF%�8n8jTc<Z%Ԋ�8C3Ŝ4bZs He +CzOҚ8*L$8^Ůثo\_t|"kP@ EC_*,QK@$0ǿ<{r!,}z3Qg<XK?x|<>x|<>xl>qwJ#/DĐli@�!C��^9@M/<|->b,�挀i�' HJHD�@32F 8!"p>G90B<�+'H0$BY�HkҊ3dsfbqyC7n.dzٌC 90c("i@1Z(Lsd (S "Ѣ�C�@ A+@@B+-82} @)Z, x]/JHr~y1xLVL%`B`5�@�q  |�!1@ζk#�ƙc88&V0 I "&gHh`Y0d 而 �DZ2q$He)l; t612 tg5Lg l�H�4Cx9YD3yK!9� IIkB EvFY�e^٘BJy^�(|]S c(i��DuYaΘt@[�><ZK`a3CΦ@` &Ȓ �4bf"@`yD٦dO.; a[ϠSV/DD/fHpɮ =I 7: MټʤH:|ڟ(- `TKmd;v[\fór^`kM/cNkC6l+{=Q_[hpb\Vx{?͜5ۃ;bh41ϼ֭ܲvP4kiM+;R,ύyߍf^gr �o)ܨX?ss۝>Tؼ![kPY o7Ih>!9@}rvxGZgG܉n&ow-}Q+j B7ݪY>3Piw["d-bK{FVm7BZ9d�כƂ8`鯆lNܡ~ |7x?[r7yK*B}׮׵P_M=}Q=nQm{]~8OaT!f\Wq^9Imo`c-ȷ&PBb]}] mo]�[?[/oace$MMwot-~&uu R o Xj>kڽA~w4)߽qdAMĽEwe¿)YlgW;2 Rr0$F�@q XP B� �N@ĈtF!c<[DDQkB2L0ƁRJ!29ϒD@@SY{ �%�2ĴҌgКHk�9"'D@p2<{)J4" #, Hu 1YBx"K= &@dc@1[Z崨Lf:�T2Α1U9DPh:)R*hA2!RYZ9c@+Њ򅓔%/d0@,Hj!ϒq�Y5"D�` )q I�|d- 2sڭbYmx#ü*1πF:KdC ^J@@Vc#|i byuQQ!O"eIJDEP-BD!�PZ(˟O"(\X*�?NZ<ʇge�T�vf@I*KdՅ9FE 5)2�8c6@ 90RՠYfes J0(^T^m萗!G<O0'Ew:\ųIGY+cry׀;*ib9 4\�Ժ䲺j,C3yF 6LgрDl{gK-[ue3fS7%םj� X[*k=& WiBAd*{:i\z[ ZpTy[1a!$F69ULhk]^.ŰL(̭"MR&QGe:�!cآلwClPR4lhUZ o !&r!Yi &6*6p : mu0 *F`1 a0ͫFTcvd+, F,T JnlԗAlx6?!%6tsֹ7Bvvm*!Ьv+/Ys6**lѸ Brآʪm1ƻZ£Ϩ-LgB6R>./aB&&6;}Pֹ!` PiA ChXAsQ7%-h ,F7)jB!q722UX#춯>7X΁·&BF M DW#:߸-t|KԤ_j1NBDH+{`MK8F#%<GTkR_[ ĬݚHnCY:6~ᲿϨQ .^>FuXH75#.E}͆o'=RWj B}nHMl5諦7HMnx,H}� #A %BF+DT\-CMkW8,Z\`nm"6k` fSUWC4RaÁ!ĠK7B\T+B,OE].FH.pdE7BDH*!=l dm$XGHsܲ% !H7Fsy c@STg-Tb#oF.c�vS:_i̗R "k,8*@lS[ "АmU9 #D`!@Z&D:MVOԈȐ֚13F�(84)�B$`@Ed `DSH"&B AkP*Dd\pε$0Jd;!V׌iҘ唑c)1 91' "HQr"*3UPatcD( )P{BpaS9&7ԉ�D8i@9C.@`@!*|;7蜝Xv~> 8ʩ y 0$x6*�R P9?"?ݖ(Bd@ [Y@^* �%��u%nd%y v]y K"*(5#  -eg@H S o^ѱWF.Due.dERTk�(�`D,H��()iY&7</lOwRH1$b?]6_^oެԉ,[L,?ii(4G7ME tStTy5"RriNQ5@e[_Ƚզί s l%-Ep=͢S9(iVl(L]RhJHf} ,%6맿g#VMEj٪|UUX(sar.*Ti*(6g{XYE%xhАBJP)ⴲBKB/#,B;:t$$Fί;L�`xrs /^h:J0l+k D|p@m܂rdl*Z: ш+ހs&߷4h0(:6**3+*+*PBhAE  bw ) 0R< MymTvYTWg@UVn8WY O) Иn&;Bn"nakë۫!-b9v`!J@q yB5vq:;ȲucE^"rí&B gsyTBZ߲kMg`ȡjƆQv95Ia<-4U#QJ6H3T9m9`FK*{Yjpu(+-7$B<[*&6lrvdS"Ė@w3٢mu>@/J� `[u>:BXVrF/^R!p!kfK$X4j!E"ic[jy\L uDn  u#$T&ϕ6j2:kQ߫HgxF$Xsv$hU*`��l`;G(9IEv$vW߶Lm3A^%ˡ9B4,b:O2zK :A}u`:P_^_&-TX<,#α.0 G@گ{!k$ g$˫lcs5 6&Zき iluUlc@m@9>!A* OW kځ]E6* KB%4_|�1dX=ߋ�0ec󃮏NkRF X+F ,ŗ8gZe =_pxX+%4b9 GΑ3Y9y .8�h3"-SRJ\%c^O, !B,�HkB))JUR&ٯbqyՄ @1P 52fhRI)- a%(EB@s^:qFD >ϙ'9j:Cd%yf"Efl<;X'l7r߂kb߅f vH'Pfڐ�31VC&%,ɗ/XRp̱"gJ`3�!YC6mUKkuY?ODA p̧VM_bB�%ZJd$_g@QJX L"0ƍ"b608s�J$qDaq'RDBpYLgӌr].*mQ]<M)�\]zV2`X ԼEvm��f4!!gE$I$cGN8d2#aVYo=,CP s{F`jI<r�6F#I22RB�UX~ Gخ9xZE1e|dN۬Ե8n_%e@UD)2>De,97|Ɛ1h+RTAUEiUk7X 0@^QÆx2K8!R_"Y~LK$Y7s9@b,d%h &-n5bP>R(An-Dj|}fLh)g+aa69Z@#TxF oN|Y 21bB#k9\YS `7fn"j)Mn9B3+G'H=�6@ܚn"!B !@H ݖSZj#;UՐ7c%i8C`6* ` m]7k*2Jggj !`!jqXBFAH+ +M1ӹo >7!?B`Bvo55MhC-ZcU̚*^qYzCFvʶ\ tvD]:A9KjP,`K c\k^(z*NE#1$P!PCH} +M.],Jv?U (Mh j\zb!fQА._M� #t|32y�[t~=,:*\&6(lf|kM9T e\I GBZ8*bqP-+ay ծߢ>H2;9F$TCH{$FY`- 5oC}&ݙYrۿ_�ye$`{9n&@^5|l1v mѹ96#SݭAשVq8l�65E}F$`9:%PW%@bL^WyC4pM&D|r5㔒*T:`>ha$J c];Gk`s45 _>v;Ǫzk:so8Ma 8تր �9n!dM9$@ �AWC@¼"PKd*==C4iR @K Y4O&DD &E@B2e1$:%PuE" VTDJ1?0sJkMsi$QZC,@ƉR a98kW@pHRܓ(1\e{JZl+BR��X^TXls`"bVdgDZH+�j "H49y!p�yJ|^;%D:C( *-@dEEӀ0A�*�"]_$�Y34o(z}1(_�ߟuҔ+ZI#YB4Of.|MFJ,_R\؜NEwMX˖U&>J@ijD,e?idml]BN Y^Jf%I?T˖- F6)ae@da @J*IVR$<Z2 PE`YB4(O^-:+e!+6+?}QnWEՙ�qP 4Iy�(,؏,h aIKm=7j> jJ)x|<>x|<>x|<>E݀#D3Rl%�e6KmR :ߍ$MRJJ5S Y1)M H,K@D4)M:T*Dy�RT�&c>eZ$B)Le �=9݂& Z y]ttT^3��"e"#9uz0I8T%Htu5Vbt"@ Z&IƒAЍt|3b‰b\kh2ن�B$@@dZgSk `27|5J8*r0TU25_4�={D,fE2WroyN.G�(*Tˇ@̓ٯf<F5 T3*hxh2r<gٳD.9@3�Q$gٰV밨5Y?o\5GzَX> ϕ e!:2DRZ:VR�=iʦnXhV,"0 kT3l퉹ʺ߅Z+Ȁ3B%S'̱j[9h]/ب?YL{P,*R1Uh(cPMV� ~ɘ+]ʹ*Sf=%27X.[3%uiZfҁQx(JԦm'.絑1-ZMEɃ`cm $<Ze_h).2'K*9\Z:BʹK0bLvT>{ mҴS!NU)gYVs-)P0HuT /f\lλa2ܵ,jL(f(Y376ysȚo~7s �&7gg=moͬLh\>j ZU"ܽiL鵻aB=TUTTN2^Xc0P_u6@ ! ~q#BlhG6>, r06&_7RQY:<dZRK&vU^[Ba���IDATy,kbxm틹:8!!MgWrBT :B0(Vqh ĥ%�,l d�uՊugvj`=ƒCh8RŽ*~:( >52, ]kCmd4M09�)+ d kbt8uܜ)M4yZ+7JSk|lZY5&, fm;DcAM&7yi|E&ك}a@ؑ`J$I}̵0ʬHFeZ X3auaef;K DF$XCeZ 18 s%uؖ{TؑTq`V%Kas\è6dCJn9x\gF5frdqF5oH-f؂Fh8su&Gsllp#AؠE-c�Smpߺ!Z$qCQG-,65uً6+;{bݪA}o-6u>5@^!y6R2T;Cv-TT(xx!e$k4ơkcaRsl ZqoUugWxUlKpMUXA0K$بٙ&a4jwFtVY&Xo,)FrG^*T"BM &MZiRZ+JiT*  |)'I&)VZ)҄HD5)RZSJ)S5d `H4%R^&JGqt*e&JԠYHyhZV Jʔ@3<_<*I)Z+L!p-VFL$RDd2NQqAIIZi"UyH(I˴:F5(YBO>AJJRZiԊ!1@-A&c#3gg4sE.eI@֗D'B CS]s'4{))ZR d?4,(EygxyqUEUړL<#1$u!E!Vq319i 5Mu@cO_m2UJ�ٺ[]\n2(BIfXD9)( x(NSIqΘisY`HE4", We`Bh5n2e/<o�Tq)΅>Gv`e]nb aF]>ZMVsHVk,qcc/LjmR*˱BWu^jAsC;WJIm(Z\gJi*ϥ4b3O P{:Vv\`7݀\l.JT[?fR�5]):Im ,| PØ 䖼/`zr[gCdDdYضV H_9Sh Km+еg! ~s9n`LlTXŃƯ^U;U bϺ07wؠDZ 2fA@̈́rd*QbfDy+[ٜn�vu ص6lQ5}.lFmnjDIh,�cTq[E!am9ۆ\8*{gggYQ_wv["=EPU-Fq~فy6vNZ4Y6-QUw`9K _q1ԔC ̌mB5X!kZrfkh*Ykeב}ZtvmrvB* @�==`[4\F}6ҍ&l-\PYw`t~]mUǪ|rP-BȜ/EE/FS`LwAHMKfԝJ*T}dsTۜ'BnCHk$p31>�Kvl8F$ulԜcyH.ذWH+q9G95"G!X$M"ӧM@M̵_�+4Җ]ݑ 9vmݤZhP[էiB(A9t#tQ9M_¿Q!uK9cPG�p61:5υCIXۍ= ,@m!@mW2T 'B68GC绰7a(AdC9]A PD %۠HмG"� `,y  iM:[tJ�Ot:{x<WiƊ~(|D8g\jJeʴ|9$NݝA{|HS +!g3O,EEXu?M'<N5ОZZǩR9W@ RSD`4?YM@ ϘrXDqT:qpt4$av�ZA'3aZ�E SDQAs8+P:Z 0"פAM-@D*_F#buf"rxԉ-50]yֳXɊt˺]d6MZN�l:dI>:o�E"j R26ˉр;,@P4 19��h uQ X8RM2<UY+[.\Qa6~ x-KX �W|q4Z9}H/EiDdD5K)V4a|8G-I"=Hf]b;h4VcF=kW[#/5P RfD@ g#lc2 cUXAiШ YQ6UI2fu?F;ZMe@5efhJ-[Ԗ7B80IFJB`i[$ص|01_NīU%(Aۺ E߆!u`DȚ|n\=LRk�M E=he+1S$u԰a5l](v5֊mVM.9!߆[jvg*^ y`Lb\6VE\DY]N8 rwdXpfV6o;ԋ-1*젎VHN޸A o@HEH-7R앳4vf:F ZkAV5ewʎrj9zBLQRlѻ αuwkt뻋ޭu~C$t~Ca"d+][`uïd խh3:2m@Hs~{lCHjE+Yzuq6kM6j#Aۿ0>rsPUێBݜHeZ#-^3EҼw$nꫵFTvmm^lFRߖJogbi[ AZ;"duuհou|D6rp6pත\ - z F�zl@un 9 !XxۚpP*2 FYEg5D@"%@yԻջ~ڝ'2^)sA2bi S qB!Hʐ1`\*{ P΢Wq$O(q( MYV��W=z{j)$}='i 4 E �01HHČb1z:}�J 5-$L�ُ(3@(�H|d �! �b%Rsѕ I<�"�9c-$"dY+S0`%.�TfV"0$�Me<fA| �h7Ub_eB$F4<eu'3J)J@FDL�t8O3c-gnׄ@#<\Nѳi!TYFc/je`ڌrfr?YQZ,Y\;D]l]r^ ,��*$َЀ*-XNC$`Be 53V&aYâm= zD e5!ګ͚̺e?)ADA*lV=ۈ0-G$LQX*hyK}c[-s{ {b^ȧkUERp'TAU'�ps^E@DPK1;dh,v)$Nf1cJ+-3MKՠgVeT<Q^V5YK F.hEڼ1ZD !-GTM(/^7r�,A!Ьcf! 4ЬBFR.6K /h~:[mCh0AJUv G2erp^l`W,Ysbo�H<@bUIeRQZs{UE iUo"!vmfբʳ\PxhP lڨmT4b]-ě4BBjήDb9;B!!kJ2Fl !!!5O BJO@HiUݡ@ P7Eajqv6r,Tr9e~[UJ`zp&Rq2U\SFp8Yg8G0%khPWq%$[as<- k|p Z5ăUXK7U2QaR,dDC&/bQ5:2ެ{�2JdDUP;BC"]iQ?hPDf$ETG#̚u1PRy4H 20>Q96v+XVF[Afrs αFmtE 4"Aӿ;L?p`҄ P$=cZ:B5i A�`;>+-:A}E?kXK}2DEmI}k"= EPGH54o<kC1tA$[&jԅ"voS6HmF}u~*2VH jαޔk.hꆜ/=E|"2*`# R!�-!BlBjEƌtq濁Z<>TkA!�IMtΨGUC (Nnhw8tN㫛j|9<p6OƢ�F#�L77xGsx0`j%g8z"8IH3ÃOuNo>8O޻wq~ ?WZϦd<3t{=gG^L޼]c dÝQ.g|:Y;;=u~'H//&7jI9N<y]/:JCJ�i,z'<Zurvvnp0WpT3vnyb0 <!JP-8`\$$|1A2C5oʐaaEdU|njo?XZ" 6 ye_&F�$dX)}HZ9kn[(*:>+/J[xU9(a=cM�.W1R*gZԨj3ر8tEME `%0v1{oVHϓ@ ,υ D(NWRN7Ҫ(dIYBXE/%TRX#fq㤢}E̮Xlr�"cHDZgM "2w.["ZDg)#H5o9Z#̌I5$>|u|<>x|<>x|<>?G;! "mMESyql ZRB0=ѩ"gd<<<ONxBdLJ~޼ZD[^]cyK$~Ok-<oJ{;?$UIX$Jᄍ"B ^www]xWX]GN>'Zix ~CEo>�eCv4-fEk#>QǗzr=Q7 }P?u8<2 g_>x|^w|\%TFJh;Ow~*ߏ_?HVo^ᄒp?=ϟF D5iVxO=:Hi~{Ld,_dLD)eŞbݲ@ʸH�cS1G{g[1+#<V+L2˦  PNY> ) F|g5 T^|X95y/<j&O69GWXs*?մ{WB1ќXWa6RTM/sżb0ƳOJDT SԈ4l ]V/͇V%d�^ZXOw<3Ʋ)l}3YWe4I {ZAs Z^Ǝ%1w8Y[pՔzֹV-;wAVR·VaE&�k7lQŦpɽRwMZylTOp\\ك1릘Bq;wb`["d;=<Z5fqʲ6iiS[mL"NG[7aQNcϱS9y+Bsv:s@Q~{>Yv2(Xĸd'llr^o̔ߢ*0fZ\kllr[8m]R..h4F)\U꺳3wޭ,�h h!,Ovئŷ"@!�L-2ݢIS8ݨ-Umm__k\Vvxƚ7x?[r7 gMě] *p|4m:]+bb\`('BikN6&dkWlP_oP&T W { [SZmltU{9KGM@^0>'י``f]$6z!(5XBy;`Tvw[v#d34VpFvP_DRK:_CF`v֩vx4ˇsvt;EUU;VeNux8v-Ìnm]K CJdפN?;߾H4{g#oGGG|v%ɽgWAožN{)#t/o.^>~io ϟ g"R?R uJp7Տ;]MWZt`0R?ׯc)u @XU�S hNϮ&O糣_</ \CɉS_~/]1.ȸJj{ų|rpMvus/ >_<8>9\.T`=tu?sR+C%Zrqv3|rtǗ}sX';d�v1Z+DȌtT&͇3UZtItXLdbu?A#~l/ eQ�Ki\plR{( ThQjp}Vf_֝`,K 4iҨe&1B̶Ziuጐ{NC|`v"Yc=CԬr c;V=*hSԺ j"1^툂@gXܖ se>KeaɛP\;|W4P-4c2%Z5hS.VڃMjÝ-#̭rckʫ lXɱa{ug[ϙ)w\5.p&C[,ǼiBuT& ;96F!s_!U1,\ѷlJ+m!ӄ6B*l!r0@hTب5r{ 䪟 mu0 *뱱ͯE}V[F2^ x& 'gAE} 6ya #75lA`WM媋*7G幢>b88'B]s@Vn4vF9qrs,ռ!5[WY5B6d u+P+%M /aBfM~Q ! JǔSP RۏrMACo5jԓ=T] B!�)KxW-uxBPEo?Zή֠>,AЄCب:0g_Y:Q:ߒ@15EשoS+T{Yl !;5i -nq^WPsvkf < BL֨6򩎍 !]jI}FZpu:0;EpVv;m:jQMlh>[&6fslUS6^r4v2ZV#ֶ %BF+Dt~-J6Eok-J}H`7Q6Sl`v (YگF$ 3w-B\T+B5]*U'm%'TG m+�l�aFۿ# M֬kM6<4,l;CEM^]mG @QQP* +#jXrNw`A�# ݮśovO?v?=>ǣ$Ǐן<~7w)HbZLP$|u 믿L/?;?SO _Z.淗zV3�K`G~pAGonÛ*zg_Gq'z71ٗ?~4�`!{QK}~;Y%;ػ?hg_<<:>~NF෿}hS9]~|G^ϖ,I~ܽ 0 a@a! ,Q FPD3Q2 do@A(Pш`==^ګg ׇ̈pso~O[ ~wK/ޜ9�ۛKP!]x1ar[%D ޯ�op>®��y1} RdJs(QMEO1 HS+OJ<a L>(X7j$$&@\70IAwD>0` ):E&1ҩC>Ugt&))S,V(Z8Y R3AK焐3 !J@(s|.Y^, Z uѕ5L]e6x9B�slurGcH,$̺r}@@j:<a˂ S ,;-(`}G0x372 46+cԒ+ S!$Mz TW!$$bX$\Bw 8iG0΁!$N_GNy$ ஌0"bBg󪦮`f\>L4Ǯ)" DȖNRj5L=lrJ l^0Gt3"2O !B%gYi-,N}WB(G�Bb*Vc�Bh!|�FvC<"*.bHqǽRIEY'Ps]l@%Z!!�Wqb&9R0ʙ b9@Av!,}BEHL"L(%PDCn,<)Z� B'! Av嘊  Wx2([%B,DSs0 +5+|3Hx’ #A~#6B >"]d8r}]Iq~OHc̞Ee$"W�ڜt$\_9>qH`Ѫ\G69~+ղH0']y"G(cQĀ KC;B4Ԅ7Qp}$fOy{,Ї^(@ 4Q'F&n#dyO^ *2!!DEhGB"29*:t5j')e9f#0SQd|h r_*]�-`+.�7|f5M*+t;|Un=aUbɣY3k{J5/hi HU]pΣ|Ʒݷ>|<7;~rmVWsxλ|j|>׳Y]ρl>ѓ|o^:|y+/lV޷ymVo|ʕkn?zxzdyg{n;e=+׎^W_{ W`g-j}o}{;̓^rޓNjw~ww߽sru]f3 jl׮_><;;;wη}{Օ7n9~twyэ. =mG|~ݻͪW_{幛^9r|/_>|y~tXgι\rmٖK;#A?^,gjn:C7l[6/\e(OeyBnp S* !5r.O("iP e)㜈\)/Icf9B :E%%T3WQTAjm80DرA"BAL+H`>�" bfYp``fi8I1VnBq!CjEn .)a[l3>\:Ȩ M9 {34!Po$e!70 (bm/K|&d&-9BH!$Vl@?<WYm[#$T;G!!TBQ~`!Å{�wu!cq}aT&f~#cO�JTJ`+?2lrbQ! H!rIi &\]@I B o`۬㸐)-,܈A Bi 6AH@95<4Y 7RG)lrP J@s `G&;&HfP�٠UNr{o.H(ekN APd9B !:or�9HJd>HB !0r!@laXkW�(4Ba`)uEQaEՉmr3eH7A|<q!be>D (bWP#)NfhFQHF ch>ʮI Hh>fq`'f$HrW#\8.(lv9G G,_v t>ڮ/ \ō83M99 "~Hfȁ Lm1ȂA䢅M(b"B�l? t>pB;YI BS@Z17! (!*W=3g Ԓ,"A !ymrLͫt!|�J_!7ؠ lPlf@e_7O>B<:Dm{yDD몪yw;·Wέ߯jlzCU9\sOݿ{l;W^>%o{ޣ?}qzVgΡk~jUK~jݝ_z{{{WoeU'Gw~pxz ǯ<Z-ܽ{>Γǧ٬YՊN=xp~TGZ7|>yZU*O<'O'ON޿hoZVܻGOl6YRӬNUU->w-O~dᣓǧOww{G;{'W>yp';;;;T#¬/^Tk8;7k?jNs-P �|hٖAסD{h, �?s�-Lʵn D%,gZqt5ߖmٖmٖmٖmٖmٖmٖmٖmٖmٖmٖmٖOI!�u]om�"׫ǏU f{y}靷_wWۇ߾SYfM{hZ׻{fom|nȓC -,YάAUWih^]X;g>׮}F';i �#l3bED5 jw3UY5{啛_K7;><8y|3`�lg{ݝ4HPa;aosiZ]ۆp6WsUaCjD <GGu ssG t8mCuӮZSvwj5 B6V mseүAD�tym9 糪r'f[~Km[B=qla\IGzKf.ġ$MWO 3ECMdͻ`|a[Ȯ+>&/c[%q)@`l! E0o֫s ^ R/G#T;oyn_Z?mWV6Y/A[o,5HT@3 δ5Yd DP[Z?{FsalR9ahC\_,îcgtPM{L&MS"I 1EiPoʡC&372 }4,2Z+d9G(͞5A닐쁋m|cEuXhd21u-AAŠee5,N!E)GL1"/à-ն'ܐ_O ]ؖ芛φ4I$Z~Á{{mU&>':Iq`LiRJ%C".'0 JqRF(0'~`rIt} Ab臉=HΫUb!^]I3#Γefdw.{`rؚS2y,L*@u~�m:J5}vݹO.kׯ\v3v'Ժ w~pr۷|ZϿsW:ܽR|qs4`M[ww{g׮Ͽ;>::|koڦm׾:Dj6?<<:=Ym4 ˳w̛_-_Wko޼t}kx7]>yx\a{΋/{+WN<w^}|>"DXUдىu|{sWn߾~=jvZμb^v߼qs-fÏs88xmWׯ|go^>|x4V/tsWg3W9Ǐ!<zG9pt}\T!a�n[>兘;u舐= ׭@C9'B)JRAOfq� 3t@jLה='#/w^@� Tx&Ɓ�czAG0x>uJ#u1{:0F!%JD/3KcS:)^! P!<uBnR~<j͆Yyև'y+zD&`K.MW_#B ׀A"MEf Õ[O dQä.lWl57aev-޻l2Uls j~MLRF{`~@!DPI>?�S4@�% 2;1Fp yU[[\).Ȼ'䘡^D`~\AFo W WE"&?@`Cz/6*|�Bh;@}Pr-Hl 8z{;sb Ql+Nm{EodC2k~`RFt]erRtc:=~\私t>YN:ηx.'FA\Y 8ڏoM#v>B#YX0RLR-86(k~Mw.AcC#0 j4˂&LH嚀-&G֝|H%B 9=rr~Rqs�{_8B ĎEz#u~!;| !0:V�t>GƯHFQ޼6,+ k/#7�j| ["uirL%!s}v X G-l660;dIݜ1 x~@mWo~�^{xw^/~K;xxivW͢j3h fHTU8U{e>czpw=?~\~n]VKl۳i"_׫]=?FMӼ_ڵWxjI-NVlkNܽ}ʕW_|>|\K{ӇO4k=9;{/+7^zǷOX*p\Uyߜ,}Ǐ];}Kf+7f\-O]UGh<z{\V=їb ?z|dnܺ{/_y}/'K_~_yQ^KN~7_zW^}a6kjnz_C!mٖs"wq(fysUsDG[=B.〤9exGm/=/e8EUCc$=&iޒ,:'-ןኲIFQKȲ= �D#*-5ц�9+�L f )4W:$yrhS|? @qbB \̄B@$BRↇF(R f2z m "6Y7 ׹Pq&,ɒ/&7O0 c_FRv/+-Ě:ر8: `Y y@H|g<("!3YpɎAS]")Ȏ_sH^$RH1" !o"!| EyÝ0c7"8%BRefg&B$L$OZ?EȮ(4 Eg!抙w30'͏•)91CKBɡ4rro2Eǀj8f:XNHt>h1QQSI{2rO]kɫL5LЋ¢ΆH3o(!-гDH .G1 QGݼAI~ ꢑ�es!@|~Mp*& &P$1|Mwo)Fe׷I$H *^.c]9hS5s>5UOI�#0W 0Zv}-D$u?SI$(p 2,1u>OMSBw$?&lF"yJ4C0!47t!RQ*YI$!(Bu[#M8۩^{ie~�xt8\�<Рkѵ+W_~X_t_? 8<ɻ߻{b;݇ݸqG?z8[\v{wN/u]_vٽOwn?k@Uww룣ݛԸZ|ˇ̫]zgګǷwV 8<8ݻ{>]z{g'Ƀw3ڿLgv/]9ytxY|HK~xD͛7]׮\~Z-{N΃{'kVY"գkW^=mVׯ7U}ޭ.˗^sWn8><:߽wnthk׮ҟ-N� Y1txN!uً $(Ho?oh U<'כ rYgs�]UUUUWN]tm"D=g=�GTK/̮s]E)ѢL M1_Opx P)O< •lWr 4]}8aAwXLJeBDA I4t}EVՖ&f?=5/ c,C$By짂}!-IVDzܪBP&(W;Cv?xOXj{ QX~w�y l kބR{kX-l#R͗Gpf!DD`X؛7K OG{ !Լڄ~ !"<qKPC/FVU$@e7]cF(BD_z>tOU$Yk_!6CBғ7@H4ˡ"mBA1'Pr((7\_CuKH \Y% j*Ȯv.2#QP/ 66?`8,8mB_HvE��I-*-]l*:U[LAˢ@sz%tSeFB/Q?:]ARt#, B0|@@$#V"GF�Ie6TP&O>䒉rQ1Go<2a@+˗\8,)s9=v}i~xLa+L(7 WZe5ePP8 B!cMTGQ`<7CEp«#$+őc!d#`+o>M*ɑ/7"4|t,R 3B�6@Ȝ6�6m76*�H�Mfs <;}pn]gy\4g]~^z֭-]ه߻Q]voǏ+:;Ǐ}+@pM\O7w=AmC{™?oj>;>>v7 Z.ڪݻ;Tavۖ>vn.ۓG{GVò}B]{Ͳwgۏno׳ҝ<vtfY?xK?x޻?{O @9N>~xlKG|[=z|[>9Y^N;G?Go\=<7}w΃>x٣g''Kv_~}wwoqF-{Y] VoQCya}n;yɋO�{" <D�qasE8c\Ӟ R)!Aм:,Sډ QG#~y {i:Ft|1rJ.UfΠϕM'_ȫͫ qŚhS.{$dͤ'kqɄ}o`6Bŏ?TCȟW2>nBHVlZ> ɅkޙBEfX EE(aŹFA4WzS[h6OKS_\@7r,l.>+hڛFRzLL1yoH+n >aix$ғ<|xS`2HvG J`Or&_m^CEwH#>1!$ZѡB:gg5nDYa Rq*^VL kTАM6!hO䳿�X&;V+F2I獜u>, Qn�pDFdZv?@N>9B]"u-(C8*A$u̐cDS5 1r4R�l('D9sSViTw1: LfASɱђeF:?WqE7M6K<Õa?f@ Fj?s}l8OqLq 3 =P`u~ #Gz-a}V"H9DF:~=!ckj]{?{ig}eFaQ5"":E"OŚmo[Z?ߙg;V~]vY-Oׄ4ͺiռf Z�Wu^?9ya=-//݇j޶KW5+Xz>99;99ٙgr\#:Y-l^}\poۯz,v8e롡|n۸f 7pu]W7_5XQ=|ӴMݝږmַmC"_wk7kvhgrO^}xivVɓzQyW �Vj٬Wm w݃] \,'OgU 䪪GF�65�LC r[a689.ïYޝ]m;=5n}z]/ sY{xxi%DsuQuC4|�^ws�<{_5~Nw|u9|kcFN'ί{uvļ>1rФ8'-b5G^, y@V=Cc7uK^~-g='fF>ӡ"}/Mf(KNz݅P!GTr.1ъxĩahP e<0\n #k6y{J?΀LPO49~&E�u hDAS@ED1Ҍ>d4j9GJȡoc uQ++擹<?"j݅FyҊGSf$Ya* ,9H�Z!Mtk&΢I(3X?:{:=ϲY:g$ w$ʦ-2�2rt ZzsuFC <BFBr%\dg&>՜לu~~71x|CSM+`dZD^h@Z+*ϻˡ#b9"BQ&9BRf?c,Cʦs#C}{c ;ieh>vVݱ--j9 $ °cǜ AdN5\$8зʇb>r$M\r. C@(T gj'xTg#:Q}R<zFsPho M (@4b1 M_ui0.U09ץDnf4Yl G^t}͙Ƀ/5qn\0ǃ W\Aħ S/e�_d8 zRzPZ)EDoޝ+hABgFHv6N,HDeXl|϶BP蜅#B1^d" ۦ9y,`9IFj^b]zКF9�爚9Y?n=+Woܼr!qsK'[?8kW8N Is9Av]ly<y�@ڶo7%:"?kI8kkѓokߺkzYs-y-z*W9@XT�D-W/I'@&YF*Ċf<i*nhg+'V%:4zIͺFS;6ggj+]Wm�Cp6I,9!B]{*�-۲- Ŵlpճ Xyu.\ :2])+jJ7e[vje0\u2b:3o8]-D]�᜜8`pq55ƾD?)djµg^ j~M]8OW xdd#$7uc a^  g%oT�YѬeqjIb7eUAdʵGir0B} ā$yj-b>5!Df"Bg70i7_+iaU%6@a#D3L�"1�lw9$D663,Y[!w c9FshFIv%r4z9&E&HQ!䳢y |QBKd'>6#pSB+c) L?%ll`x$ H*.:&8@pJ@@!B 194 r� {~q&�@ʡ\%g[t>6Po6J:?b(8tv}c& ay(9@Dl%rdMaBPԸ0A"$ݭBEd?K\g qPcH raSB!]p}6-R Cc6V CR0 2=?% 0"A)8ׇI?]'A.VQ)@&\_WB BHF!y0US10Bd)� !P@H9´X!F@2:(?D!0 rrTL!4Y.J$Glֲ, yj zBzjw8w*מ�{jh=.К�@o۶!;|׎V"WO.n}xo>^:kfcX# зn5zO]* ;@"\{ͨm}=v;`DO�_<<:7v=v'ߡ簟}E] |뛥'8GYl:@z׮ѯ#uUZZDmnd:_GUtj(Fٖmy Гes|w\U"mIbHa[Aj*91B )z6FȈXFwBRXa0@TIHul1] QwR?OܨhSP< YL>;۫$R &�Y(ɽlJ)Ŋئ[1%bQ ANlZsFP{ q~3 !aO@(s|.Y`Eh Ef*rWW�mr h,V g)x-F~N9bW'6N` # D7V&RPmCBˌ-( Se"Y/�[H!ɕaj'dI^e ~:  3 BBrL�M3A�[ QHId pa9vOLN $:S24IM͋)cPO @8Yla0 I>$+Ri1 dA"ר d"r &0B2-bg`D6R lbbC/e9]M%9RfTR! n`p}5Yk-J&Yخ)QHT(@ f< Ἀ8d'gQHīPq!b%S0v(%cZKDX%9|F d@vr?�0` HORo68ٙ"9H wteRIR N¨H&=AM&Ɂj3NFˡ#A~#6B9fOF18?Jח"A+ jǘ=9HE 2T(@\9>}v!F$8Ȍ؂9r`&(@N"�3\_r� "K o6OEʮ/aCE%?J'Jk@ 4Q'F&n ֤f])HpaH0C@$8A2L ~QD#A\CHE Y]  rr5p}2؊$*@ !!IA"C_9TH[jִ^¼;PjuK-!"!#r䜯͜a;wFr*pg^UY.O<~dy뽇o|{wY7h^;#UXlڝfNoj~]SS+ꪪQfEԎjs7YBsB ׮jA�$BB$xO8 rPUPWXb{fٴַWU^vɃCy�v~y]W5V_֧YxlVg$ ^!Je[&nءCp@Ưɓӳ�sUUU ,\eHQyC-,St2[l6]Rr 8qHLK43k ,|'$9T϶ mXO.m|5RPiHdv޼!5EM>[,HdU2kJL(lB $[^]>,c~�&l2!zGE:[ f0'nެ] z dCZ;V{?[~XCgBzϮvod�Zed1(Z;<ټ6E5$yRf$9SQL%7U\Mrhz&#LJjM- w r#]U f­z`>1Nv!}qs`/[Cea!C^�IWOk|m!Dt! wvR3ujb4}P}C:9!7ex/6}a[zFb�a"?^09 9FFeˡr$5t0MW݉jKgErT&L"9N4 >dZ$zY8l($r& Dz) }iG|HYO HP,73y*S lg5#Be} !V�H?��"OM)Cߒz]  wg-C�}"9{@3��h&f<jFt|6?yx'?:;oX.sHby<@'z߁b*º|K@0߭'ߒo7 \|yh-E[kv;*d �4-xݟ=:jDX9۶mۦi7D^TsĪރЂk;8UxOom55̹pj6xzO} a o!Zu5ٷ;[w�c(D6m UUW;عt|4fYwznza>`ӝ7_]}g_c,̴"fjw Z|$eq0&3Y#3"f2N?SN~э)`h4we$bOTgot1 &=+6B{>߂v_=@SDe^ۥ5qe%ECl4YB1*`o| B{R${y3 Lܝ&;jtJ>Jo#d۫~l!0`2Sn$D8bw1}_6ٍ4Q‹$DH.Ephc(wd- T 职<SyL$tKpI<Z?@~Kߊ)d7R!dl-(>6xN zbZ*4i8)$HUT5dk%n*@E)gͰŀw\H.#ɝ ^~)tdOj$rĤ\' 3a- ޙ c 3, Y2EJ0;u~I V/^69Xa,IgS} #8 WyDp=T�!�CE:h΁�[�� $;@ʯY4<jgVTG*Z-Qz] rк򀞀|, <!"9�)#\fݖwO]??< sřN*Ī:H="b*D$OX;oDDB {tXWu ΁sr!k"rP,@rD{c(8?}öl + #߽CuOb7d^OOOv9n+p-xFmaŖfGa_H$ *`a$e*Gɬ"}β|h"5Bɠ-1ӴK*)+eKɫ8e֫G#LBQ؊yُR7qoHm"Xݍ`Gk4*)g UJ>nڙO|o&RRCMt}y1`+'bu(O.4gc$,x@yKm4 wM;(~R|;īmѩ#x-D ~{'#?2~#ZO p,Q3XKvz1>/\(RUsI3>i(`r~?j. 1wvS*LɶZ.beJ7Y>'�1-f`7~G%H'V`*-pSXY;(T@ ˨oS #͚DAL§2G�n9&W|=>7;ę̷疁͛w<$ uL>Z$o#%X)DoMVǮ6 I2? �9U@R;`(;Uj7w:�l@gH3 Pn>w*7_xv⛥s;<˖<l^ȁuԂo}|rC�[gy*F9t*p"v_ipz7f:,bS#@+°#Զ Q vg3DHوWu-I| �]UM&Wu JmYo*jkhwv |[VU1l˶L,TFaU:Ӷgggggժꪪ꺮Y/(; }R΢~foldNkӢ0W9]c$Œ򔵺 sc/󚛜oW. _Mie+EEo6J&?'YA kcoRjD F7żjxԾk巕$.W�e2^M%zͮ5[O ط [&܄! ONL<:1؞ [_i2Ul_`%G`%R07s`g-vuaI06 {2PhN"dK[?yi08a`Kd'}VZ)QBa_4"n&\DrddG$فCaQʽlZ_BEF9G%px캟 7ד�"MPJ(.Vvނɓtphu~Stq_ gC:2ÓFZ4I1Q HLW&l/]!J$CBH?jrsa$iNeki1 lEYS@b4(i EL$ VȦoĊoeN4OhFSto&o"Gq 7�Ltl~ AD%r,щooo;dž8"DۖG~_,FHFh|(t>a&ǡa_Oѹ&ۛȱl`qa2w& ]<˂D@D@1O _Ma#- P98Dpv=G<^fu0[-+ts5{9D�}{7b<O�]nUv'S7FvD�Sa&»vyX�ݡ��$φ)HήK͟Qo.σG"m>&;!?Q'Ǯ}7ero˶<BKijLoSP&o x29䃝\vNX!qY6u=W5g,&7Ub?�L@Hxl q�ل?.S!-^9~"LcL=G1"꘾F@B_B6h uAe0lg~oBzlB"X�Xc8 B1Vb&W^ !]mx@5$йVK܄v�v$zb EѬ~帰@ Ѓ<c$:NǓQASx&hВ/U+8a]M`lDHc Jc24&#$xZB!̩!r7AxS!cC^!F*~d#2fB~# P!m~@�&B`F`~p})+$ABLR0סHr @r 2C!qR !ɇHռ$0!vD !Bŝ2�F '>aBlJr1x!`L%‰}]C pNȡD *TV(5rQrHKdD8%P!R�L0( ?N8)b|�']AG?|ǴWɝ$ ,@vl !l A:>Ηש rB#$rą"H 109BBl0ZFX tFȣ8$(=:@&+D%B\Gu<Y>#J*2ryeEߓQ O"A\O71w}]NtX+Hp}09J? @{Nt} 8X>vM)>\`$h'M09TEHD̂!,d9"u.*HׇB("D3EDJ:ԮO#H0o)<!˧E&'  &JiF2H ?Dx\zlCD;؟ "->sUkĆ`Mi|�krKrKr !!fۛU;tӮrW O;k@u]׳5b|X>YO=\Up¹emE|5 z ,Zyj <�G5_׾j@΃}cP4U<<B#wz|Cm k%�6 A۵okȓwk"OMD+% ]׀k�}Tږmy<u9jqvvvv\.۶n要eb  aS&$Ԍ gzPO $B>a.pKgx�wQPPvbbDL?@.".oR= :9h^ZI|\"Z6/UHtg1EH|ymB&2PgS [s2lh2ۮvJyI)A$ 07!Dw;DHBP({b $b 27^& Mh xgD%wj &}҆  )T{r&dB3 \d9TgG|bBHXH\V ܑD &8*nU ,A6YiʽB?L@U_\h.%L:f#euIMA2 !7kW")E0Y ?4mag(v#J'o 8F r,I 8h2kmk #fDh 76>obx`Tr&*.~6v}KFt6aXP4yH$8?4 Gt7)T" 3y<TQ$8ab(&l=e"En 볊ML`s.~ӾнÝsD@vRp5"# �#yO={D<vg#;P8"CGPyp-�uDH5njC%\[�A T#g# )`[DGfi-bUUηrm�6BDhb՟LH-`5CG#f�spznr r!̡"xiqkjj<#yjڶi""a�AM<V+~vP!:@6�-�8Pu �t'_{2z {,O-q2O1ߨVkyP2:LJfm!ʃV趦_綝�`lG $Rn!?=Ӛu?:SU x�2|gtVU �G"C=?�x-<�xp-V j9yW980rz>Q@Ɉn`morSFA5V%^uWP3+vd_- $P<!%H<_)U>~@’YlfZD*C!q?_~3"$[iVM`K#BLn1M<gӈ1rS!$~_5˪y C@iiDek{A"$Ł}c AKeLtzֹc~79!pxs}ф"OBEg95iN taD;rW&O&D9lX|Vs}2SDی2@^DS7DdG8BSH!Vն2䉳0@B SPP r(gys!bsq C,!)@!*nd9'M�ٱv!| -FG?_Eп_31R*'Ц p Aaroh/nӘ͎Ba4mo!!]z9,-d8Bz9:<GHH`wg3$חxE !4b[X`_Oa7qC<7pN # 57@N@6&@V YG1B[$t2b^ ]_�yfǎ@|L #!kƒ (B)P@�T:JGѕ G-xzCG ק*BH߰uXFDtgut>@ B1A$`[zHLh'Հy r$ \sr(y[0YF{R?˿G SIv}1E� L@ې6{&' {%pݤmІ@@-`AEPuh͜sX"$rq ݔ3twy�:zۭ{V5<cS``kCчq}#G.$tB'GXy+"%{T#UBSU# B Oi (n%7QrswcBp s`?t%ږrr؃ѹ+_lCPBp�Br5vXt&lu0h| G<+z?Oiu80r/�ՆTxKaZ1z~wRr J%v4ӪOi@,!HN]tBd2O$n6lLUZpy7q'DvKVј8ϾaYfA잉7sijEK CC OL?5 #p )%e*?B~ݰA=8!Dw[v̈́A3 YQ?5j~9YS1@WwQ5S{o\_Ɂ+b6lOuJ_llz:Q)iW&��U`Fvpa/,I)Ѥ(sF YZsOfJ;:Og0D=q'{9ԋ 9뜝gUGDԟ<!8R❚; $–bL >`Nyop9k5 fjY| L I l:<F82ƹ={!d.C倐h2kgcԍN-U Bڒ?2>r$xuVa75BOvspm\P3{:wB*V Ȍy Tdr4Z0 Brח Sk$92]jA&> w},3q 1BAחߜ<RsQ^{^\dV2~i "bݭ1acۓuJ(�V=&3rB@Hʔ, 욜¸kn{͖n%!페>WކU*@@ÐKc|7Ď\6SDĴI7Qmڶ $1 +LoC) BbG1B~ʩg$s.}Ac8/;[:_چttD�^9\!I7+0T:ܸmHad] jp7$MBKDmbD{ճԅ#ABD#GgPbwC4er3_M%_ 7EzЇ?}䮈 aUA^ mS>{7yl$fgSB`V!;cY4uL59mO"B }A! &pk91 ZwNDyh*\m h)}T1JV~ݣjNkMwyM%l�yQ\6^6:s26 ۗQ % ƪڮ<Fh^X0Ǭ`5)k؂d?{yEG-L`G& qڮzGّGzMfzgOg%PA != w7LHPt fL} a_O\Dӆda2E‰X^_7ȫ`B.&z759uZCr!xO69 |2/|>1�׮o:N'FAH(ƾ<%فH?-X6bo$;ʔTM\_ ۾U;B,|t}(M$Pr#6<\mE-<RB\KDbArNmv(>1r>`_WROꙂڷR1az %~c:*-`@,VM4!0i-,r\ \ ˧F)䊰�lqkMD'Q̏6e- ݟ~ge{���IDATߌ&2[fOs1'2(e-y q&d-fL^-=vǩxԡXBA_Vι;~d)9"dsr 1Tlyu7b;.=d!>?%;ϺDRLD2j8K3N aysB@<J.{DAsÝH? FLN) Kˏ dWP:\3!T;GHlۈu ?# 1dw`<Z B<K&e&O y@@A^l<H5!_50ȁ4:!q~u!;3/} l̘K]jmF NBlqT IDl$WƏ0 !|)%CEpeB�,uH]D@"ϩcIb 3 jаGK]/D@rRO'&~OLN $:@y9c `EjZFfN!ͻPr ,H0yM$M &BNC!$=C&Y`FvGB9BSBɴDF„x~%H93)0!w}\ߖPrh"$RR1w'<qC'%u,Sql׍ER(2%IXgFrzFLrN 8" !A%#NRE:?]9™ut}!EN�;MPL HOR& NvJ$hA'o#$2TIR N¨H&&FñH|C'o= Q o:8?kă8h$1f"AE2D+(I1קTFcO!.]&G>D N"GQe~(@ȑ4A!rr1 HTn0sT߈KCM|% /zKPR6B5B GSIQ B*&Η1jf, DEhGB"(t> "G co9s} !er$f$@�*%\LDHlE ۲-۲-݂T.#¶z\.X*x}9ܹY$'�|D$jVNQ y}pf0xU~pLGu!J�)vKD2a!eaKՎukcЫ( 5o6E@҄\ 'JiX"B B[$GaBבE?@qMPnK`+J X3fB|LP,9\2`6{G#LȨ M94J8҄r@* @B#`lB9(a<'PM ".HJB0)HvvRV1;) -2`kF!!TBQ~` BY/q]X(f_X: >�*+#V!P7|9)@oӇ%!ڇ+<S "d)҆Z dAR\UHq@lSKA �C(܈Eɡ29r@\!2cIQ(bw#k-$>eEC$&XL$ Q rEv6B@!DFa(G(輡F) $@%Ҏ9BH!D\FQ6#S:: DHE/Qב}9*H0_  Bp*6qEA$ GH>҇PbCٟ)FR-F#r5@:>ɏl j0\38ﭘEx$hH]&̄!r&Q\Ay$zy4 7)!UHC8ؔp},dF4mm~1-A.ZDy+ ,r, F eB;YIcE u~sQ rrTiRuh䒔,`ն15‡p`(FP2őKňؠ lPlf@e_7On˶l˶8nz\kw f!"{ۺIU\AIm8P];.vTPr�nb6$#R掔r4I ?j#e 4_F&Ɠʬ ؄VJN/: 'inA/DcJG椁eOÏ!�mp,_"YC)aBZ v/bFM@Ξ(n_4bٸU)�Z&LfDs)emUFrgk+7Q ٲd@:.OD5(ק-lw$B�9U&+?Q#x,\ca`WNEHL6 )Q9SLOƨg1&y%7g3S|0;!CH!ܲaɌ1KQ,]!D,P`ٽ !&B`BqY7E& ;ycJۛ0\LIb_QzV6l.=Kg2B)+ ,Ȏl:$Eb#0ղh2)"مdwpe 1+kʣ{|DTȍ,b4"$k V`"y*w}z1H~YM.P1_X(1W!> 7C,@+;k"qUSkBNz a9S}V v}HsǖX/>Q;kπ-]_XA "AF.όH0>-TC-:Jq0g z;5](Im,"A>-:2k_Fp /u#br ?:R:rsUH(Ӥ-bLr ;1fa%9H/!%6 ^6" dq4AԔ(Z۲-۲-B@T몪irX,z{k]lo{y9}G:2ewI/否'R&`NaLdnU>6*Ԧ2__ibUC2T4 "op>).zXߜ *vhq;a5y+K[b"X@U]IDB\ۨ6DCI[g; ^|ȴ6M  (V[\<0ydbV(-'Y<M<dFHa3D 4ɬxM^�+ geOV5t6@Vㅻ<0,j,N&l\4!|DgdO(nLW4N٠E$ZoՁ2YEnbV;!$^̇F 9D GDPkdgdGIQq-([Tu\왡�g:\l|`D &GdIըJe~X5!vhR&5|^!V%MEFZZ$sA�B@BҲ`` (s3?rc4FkE0~ab#pOohyKV͉paDa Dbȑ/b "$9; acXV]C9A3D6wPȁ",Q!Tb85? }m#o|bE!oxɢO>U+"Tr}V/(OQ<Y YkSd!9lڶXL$ 7>Ek#35]Hj3ٙ2G+2[&sf]. 1~)bT'<[?06ܶl˶lgPV9We\EDM,b\vsݱϕss#6G1/.:Q 9ڡbmvf_5U,u7p˄O4ټD*joŦ2{$^a3]',5gbxElU(ʿvêMMF\M}= 䣿VWPiE?~(dĞ}%C<̈́W7&=cGԨpqCiʒodPuᓓM;v~'kljsP&x Ie dRv:"dBgj3&8SNy0z?tzC}= lExEbs>0YUA᤺|:_=w Bhj4!ĖC !! B&̔uXΨH,,DL"A7*TԲi$ =y"A&}v1mLvv*kl|ouZv#6up[2C9B2r䟞ZIXRtqOL(9Blr`c�vBfH˃mٖmٖOuP�{߶j^,rZLٞmd'NsSFEr�۩ep'�:)]�d yM~agI7? Ey[sC $ U@oν Q7>);W$C y2RoJ(ga4v<xZ<Ig;'JxNSj~6ԣuNB1d*GRa"ָȑ\3upUb?aUmܧxē\m&OWvqTGihp} NtԞ8N*BFB "$ż|%lؠ`1ɥ6eD5Ml;`ūE[ Gh^ NfN#e4$-F4A ~@�&BK8D LÍ?3D @B<Sf!P('3Ï3"-,܈E86A^BB=,A7( A!NȖCѐJr 9+!%PlIdo䐖Rq9 r8%P!<B}F@ʮ/8)b|�En :?LG:_}LzStԩ!-gP0d9:G. nw@Z:IaHڍY;CXFK !V$(Aa?tF1c0y@$(Q"D'~C;=~H#d!#e"Y{,r p@d0>\"A\Oё w}]Nt^89?Ѐ\ >ARds}2О&H͟co@$%怵c$ F|!l*rEf饆̂!,6EE`"$GP>${s$R"%2r jק$Bd~ÐO3b#G!2FkoGH1TJ3imٖmٖ|!O%ݢssVbX,Wo=ڡ?BŜr`R#ܬ$1 y}#yʐb~V깘U_X#'J=$x36Nͧ|&TxQL{ʢ$\D"?&F2^m)䗘sRD$ȿa~7:!BDqqyt>{d>VBR#-MMA$!` O_RY'!@ AZWNZ)9Irh^ <C6GHB8[;a!˅-P)0&pYP%8nA BR"$BoD H7%'"$ Bd.P#E�@!#zFTHr/ѕI J%*'b/Ѱ΁d!sB ;!`"υ $)krBh!$QL1!"92EK9:. M(!,ȡI$9@."BHOL-`*.CZHWq)*N�6#GHݸcYUT(` LbK"X0|R2U2 ³ҕE"(2!L~p d $Bp!4BBHKqeHrUFR\3Av%p!`l� NI\A ɑ y$ǜB Q 0u>kx6O%OdT"G(<By5J [&`0U$fB$Xp};"9&{qsח0gwɮODh\_gG [|#xOE !ɢ:<$u>ۓ"A(|0'ǁHAּP-@TPYC^0DrZ5|d|bh \R'.gJ2P@÷e[e[>݅{w3#mUvw>lK_ T`#q:ueu3^"(<�&^+71ɣ5*Ɓ&` HW1`d?nI&Fc ݐ5`U*nS+bbkAIf %"�&b%4kz$��e/V23!(WnUʘ]o\ g(ȠAO AGrrS!`IJC啸;ȍ8@z =a중�̱{q×"aBX FL Y!?ZfUx2bJl "$oapO�<f9ĞqXl_p{.DaR D V6z: PbwZm c$g1@-݈A@KC!`" dE>d~d12>2CIJ#r(͛(Xr'I$e�^>/~2&v&DӍ~bC"t)BU"�bd`4jѫMt~6c&��BE0T>  SoȘ.[>HFul||(6u`))jd'h7v`IOC!!y5ىżEl]B_�6Gur[7�W'KR$՛ bwx8*xOmH䈣?l LCRʏ@C[$Ǩ_1Phro|# ,< eB;1I 3"AbώS>M3a& P@f!}Z Ў7N06 P`&BHbGz+ V)\}?h^Gy I#A+HQBG鵘N0Ld1\ -}Ҍ$BQ2yX?{;-+S(`ݞi՞ٟtDһ1zXVi:*q]Yl9/(eUȮ6^sMURg͑}"`B-!VAy$@7 ThEI쑯탖b[:1\V{ظ%ƶ g,†@X(": |JaG0͞{er}pyVA像WSFXPw#q7?4 !@n mLL pn}6!IBviȍ}qЦR r` èjIҕਞ︇n/N<`9�!xelwZO<lncVZm%?fˀm lVrlW&<(``dĆX(9:"K$cct}<J'aTvTkJZQײcM FAc !o(( Ubxsi/D.f7Elh # !"U*PÁqɁhbPg阈BHɡ SGJĶgr*1շ됐ϕ03L)#Sj+9WB]}ts^w&8 E}.*ڼ6,r̅\Z0QǬo֯ B(w}"Y2ҫ8;SI@H)*#R1k?´=9 !cJE^M F6 ]N!:SkQ׮OHcHeq8/֯f>34U irl-jx;c8 ujGx#!"d0One )9F~sn#@N�CO\L >[?%;lr 5B>!!s}bSB3F%?~ GcjBʑ`u]殞fWv܊(%p{v$X8?` ȨT<Rg{dGh:U(/kn6 OM逅СXmٖ4h 0?S&|;ЃԻ1Ώ΄.*qo|۶EZ`UUUU9WODBIXȎ?�H"�&?#Y>CX>uɇo>lu?7|L|;x;;{֕ݖOqAv/_zKfO͇ۏ1zJU?s_G{U~rѾƣoMbOo^ �>)^OWoͼg[(/J1qr1٧l˶l˶l˧^w*s~ghOue[> hVI]Ϻ)j'1 [:}F9k^̎\:;sږ?X>|`iLҼl˅vJg[~\{-"갈Y,U�`6CG<k+~շq#HX@Vv8ᄝTVe|l%>%VO?>+[6[_'�s ֻY&{DrQ:OlABZ0oCEl[X fJ&ȍW?ٟYCv_}Mjq6mhBr0!!mQ[!t!Y8S i9v2Ab�'29ԓ} s8 k_<K^} O?3ޝ/ֿ'oÄRM-T7DX!2ϭ"0w}BRv!?p`<rr}7Jo0qI /59}go'6MN_F+jJ�e[-BҦtb t-,܈6sk!q j`J?|6?I|~CY6CxjA^y홊N *M4drnTrxkG;#1H" :_Jpʓ M39';H!kS&=B ֖FX4"A9Sx*Өl@p�^>0]o?~g܇ p}TAՎRUfXnȅƖPڔ7455> <  W&O FQ1ΥՒ^˗!{{g*n$a$2~/@|W>w47tEt~}kJ~zbrg'La �6O89lg~k*<{|mwq|:_ }3a*Mu}@2HZnPl*dp3@�˘ªv>w[e[~Js�5"mM�3*6ɸgmγ)֜`�ERyv#Y"oDo  3C]zR~tOM )lT)#cg! 5,Q\W;~tGy 6(8ԅyd7q s''#gT_Dȗ~M_W/}k#$Fa G,MHY-bM=.fG {3AлsR!59<ʧ[ ,G *F1x:wK\9B/7'¬yI&7ſKNG;k_OM6!\Yt)@]_<܉+B6B@Bb8S2ӶK"@Pdg4 ٙǃRFÇl[$n6 !r�$77lB!0C(Շ#"Wr#T09G L1&,, BJ"6AHo .@J fhіCrLTr(Kb [ \ K`'iuHrLZ[0 +o%*N!"]s7B !RItppe}AvRQ#$9B(<"yG a+O4BX$(r,ucQaEU`ST� !Q$'G$O!B`-"$ 1tͰw#HZFDY$YUaTI>AgDRLcgY!ML ,{dI &S`I ]0D&9`K:_tyNpSbKō87M99 L,?A f$  -l"D u$8` FH &u~񼵅"1r:L"W�t|u7/Л* "]H)d tS*r>�H|5�6Al0<.2:6e[e[>[+n�Y,m뉰gY*\u=1 JgL:.vO \,!QLFp,BqĮi뿾!\p2H"W l 㳭#=25)Z3DQ R2=f`ĬC01 SG|yc#_"ݱ)R?O?oW /'M]uə`K&90G\ٴ Wq; �ӠSI 8Bk)~Va6T*KɎ`GxK3*X.XwXx,VU E(2j,8O"Dg T oWon4K/a4gT"2T!^s,\c°WEH3빲c $\$/ ~Mg2'?cTtJxAV PϨN I>,4 B.ٛ xG!$y)o'# ,7N&"3FD%_FOj10J#e! ɑgp 1B!#GdX9-ؠ L@ ?bFRϊ2xL"L�`DDO+dn0E'L�7^z㐑D rumT(34B1BdMybʤar3`sϧZGu~71{b&WFH6救ɐQ\疀]mS ˕� $<CɢY$"' BXÆDy "KdO598pĕ=+ `92S֑ye4p})б6$`+ǖ�f5UFoJ$ӥ˃AQ@p$q8o 5˓bs}π*ȑ <SI0-KHp?G!]l1<j7l, Ϲ7Z,Q@E6U?!xstt&^{xoP=0-'_ 洱UI0+`rB$K^ oe2O_٪YDvq`)ͅHp[e[Dz`/-yO�PUUU~\-m�yI_p*W�eY;X@͘<C�6 )?l71Ɨ(ǹJPs<W>="fY"̄_?,Ė=vRf#^gr+E b7^6bo!TW DWcLaNkW @]+Ør5WCc!2]xP9;fIA +BHX2 $)(.cuBPWi^կ__i)uty~n拯#f `rYHár   !)~*aG(i617!|gFs{pf!n2 yk3P�:L@ Ȓj�d7!" ,C !T+'Gq> Y)r%H&˄dpju˙``4& h.Ndr9 V.+!eG?<Rs;"u; cyC�M+ ocJrS49+{NWڨlQR_ڕKs:??})"N $62f �L\(]x8}4B6A069B iD"P2AO p(l !Y-L>|zwބF Ɔ"G&ʑO \)Mw�FkFRb"|I#$[9fr~nHJF*Nb�H#BHX$h#%ruj,~It!>RL"~ VIE$\ KA,W0^BbEy+fa5A&k.:$B`er n0zAW>LĎ:0VԱ6N;3)6FL[0"A$+J1e2_:CJs�yL%I` x2|[e[ǣ Oi}l^Uq+tqhm[ڞByF=b @{?@J:FΩEsmٖ썟7.ߺ%2Tg^xtuE|_{Yζl˶l˶|ʕ�ů]yVxk;G3WmU׶l˶l˶l˶lK_^ܥmJj[e[e[>&wa9Wu]UUz>====;].:e?s?REܡ6N$ˢcx5~"rs7Z{yw+q]>}to7 .ko+җ5YM{ 8xj.vrX* 溗m.yU2Bѿ^~ZXׯ|kO~vy$.`B:QwaKP!QI9B*]3OǗ@B̵zf&twQ@͛||?usZ!/֛?(_ﭖm!'dR/ Vl5<,ʸn!Q6BF@!Pp}\W],*~B'>H"r u .d8Bp@""'ݤ#6j3brNjG&;'r�X~  䛐d9N6;q.~?wܢ_uv|Tm; 0x\_=te�LE^&O_tUdAMzwI8T72\$;d "Ypް(6BYƇ&ĨA]_ ! BL&ݠ6ق@$U"; !e9TDނ=ٴ7\㗎F<aYkG7=è [ icL@P$Xƈs~GsFaCJ[\8,_"; [a]D~/`兀 w -\B$7ԀL✌zY&ď2Okbs|tygKU&:w*o+SbG!a ;H}ƈNcm*Bf1o-۲-/8H1PmKOlVQ.*dRSjƤ6YL PNAG5($, 0O]!w5蓑Fz:�څُ<fıSYD0]#9.Gf;ǻksWʦO^1LZ]M76a7>1€· >!/d `oPp 3!1> & W|4knuu7GH@/`fȿy{Oן?}Geܐ0C_'X`SweBwyonY@;ZbHѼlnF_4ۊ•A3@L +rgXV86�DF^!ǃPd{"0c)A)9[ !Z>8_$), B4#$=Ox3IP>{*MrH]DH p10!Ir("7Y I ⋮/Tq Rq9UC\q-!WqcLD\_/ o{`*P\yEvHȡBX/ @F_F急WSsI`'H#!G"è2S@)2Ǘ:$Bp!h"DDч"3XF6H�DI$ " l 瀥b|j_<^ۑ y$ǜB Be D/ M*%P"iB'"y0j/aٚ O#,>󁝁ft}xp>4'֧OTEܹ@>D$f :?s}=$Y�Pb0šZxJ$ȄSHB@:̆GhɏVja )|]A/e?NdoD}L" 9["#Ǵ.<k92Q|MdGI5t@H DP@i6^u-۲-)�UUu{�f�m4T3sbbǩ H?H.*O�R`L}f TfttmQGk{X ,)@ιl*J2KGPVnn͘,=y'^;x˗+QU/h]v/~xPPG%$Ula@/N͔@ /&+Z ckG@HS,*{X՛`:^unUxG}po=˫<_87~=y܈o"1$ yyPp?|Xio !#~ \Pɞm=O?OqBG'"uf;@9sksXd7<fs⋳2Ũ!xn !VwUE\$o0l8<p�Ӿ<M/7d@)&_OTΫ/?Zx|}>?ş>/|ud�E5b?w}x |\v3ci3i= j>Lvo}_{uY&TjWP81 qаzßzNĹgLMfpzsC,^ -&(Qra2NM|jWo}nM=;i<\]g+4-&۟ו)|RrObd\ oLhT]n-Κ5{ud8A`J/E Ond)J dg;S]#GPA)rq=`໎%C))?l[>n s3d.= B:$?�"-m%Oi=.!? /qbGgIݿLArquXKSөBaA\\͂"W~]XXaI'VzM 7 \0U-p :9m�q#b=]�̒*&˞*gB6BzlJ/ ll?@;Wo?w "鯿10埽kEWl:@[KrmacZ@ B�ȾN!ͯ!  X}drgb b>5!Dm#B2e(Gti9sJ�ƥC1W~\a~t-Gi_/[]eo;{/ҧfsG_[^:"}<\a#/U-lݯ_~Ke2ׇ  $l>_>w_62h.\K`vL*HѸzMH?#KIE%B#ZBM\_B!1 dQR)`F L$M`rH阈|S$LjMT$ȐC4dB�rWH QBȐC�`J KlhrR9:kϥLUo}CD? tޕAITKWwL!T7P%PL9kD[ȳ~T�6B!· :E i", %`[$%E3-X*=F}^܈_zC/{k7w?X-")!DFH #$vaF $A]O̵W?jq~}r}> #M"WTw+Ż i>0Z,>)HQcWDGFk mQtAohH!? rDDH&f}W?WT_{wn?i7/> ru}Ο΅ipxH"5B GH†\&Ф'R8K$ܡx6XD20l! CGgq3w޵{bSFp/VPBt$h$ #Ac|d�EvL.؈1c&q0@�W <w}3T^ޓ]ĔsNCyzNg&zmQ*/n<(>D 2+4ݺ+/Ԫxz��T�U"T58Go۶uK0 $��СCH6?;[zMC{{;;uh*t}޷o*� V~KzݚPٱ$�02y@mٖOգ◧.ڿo{~'<+ l˶rt<4}> �w>\Ra`�_^3ww߿57tGVAU{E+o<:n˶l˶|˕bs[_>8婗/|U-4[?u9AS_+߮T]U-XcO/m۲-?q@ݿs4';Y}[&@ GA렭;<8G�ky$lgX_gV%|* pn>Kcǟr_՞翧Qqc"�Ɲ=CTGOf’/D_Ky�حqj\4'rAUټfz&Gs:GD{-:{֞.QMpPkHH+1ZSaeWZi&uXaQg3,K|aZX W>-*v'@]/!"[XٯKKbᴘT/{qT;a[7RFMk' s!j[ B ?ui޿"<&�?37|낸2˾NؤarE3_-6�y쮸@8 $aQegr81M\ CG,JUaG;j^�< B˳򓎀蹗_PaTB )hqTPě/J@ 5]#gk|׼'5rorܝ%z |C'Y1Hd*vzG4$6؞x@Avª";#Q>\_th-@X/50B!gj(zɰ[�9BW @�j2.2CQ~LIGF�I(rCQ(A[_%=TmUPΙPIR(2Lx�1h?ȯ;_}dp$Pdtz?绎cC"$H5w:0΍#|&2vUcH2 lI~�7`:WGJ=&I:?svLPÞ�%UB4 N J?@H4e_:hl\i;Q$BHPK{rX\ AΜ:3R36 /|@^zP>v$1f"A!듃\i4 yPl&  09w;^eUN#sC)x@J�y- Er.99� qϷ5֥v/qdr%8)K,b-Az_{]_qaLrjj!a*&jgQ|dB ?QGޛG" C4\= )ÑF~3)(2H,^6YTb#=W$ lE �B|N-ͮi1'P.4-�)/t= xPm0]K�^ vX-~ɖ&s9;B fݮM4ޓsn6{۶m+tΜN-ZN{Tfݟ@d~^x e!Y)(?ǟc>vy.%뚈gُI'ϒL$:&X3LƗ$[ 9{|pHqa[0B_=*bq{aAy' /KGǵȍ}Z8)Vpz\kQ^sL\XK =26s?`kO!ˏ~�X,F,.'(q僻)!MH9Ad&?y+}}X ~z oBH1ѕґ?�2NH-6"k"B*! px̏!p8NXbL2>e]D46o`K6_5*6�_?;+9B(!y64'c !�0Nvj!</Av6B!%\_lrzV&\_69r@6JE~]_2'UYLKd,> Hr('3t} }nYH 'Sq%7z/,I!"$(oUH?$%4)ϷL B$!K9Bd`fS#bwP+0BvTyBP!DcQUUc&_3?2&!�P!GH>C>+44^� }#]٭+sr1Bʑ`9 )U‚~0A>eq`' $R E A UOG &H`L(yIy$�G9 q5JCPq#) ` 7h> C2#ǒ~['`R7hcGBO|gH�|HAO r3Q29lghGk&˹(Om C9rtJCDp%`U/côtZ 4 `Sia p@H9� U[�O No`l˶l˶\ �B"RFB\;_琀�KVWU."5$irlڶ9:}YN<L?#bi& e{m/[)kDJ27n|Q<Y/ɣ ;Un%cϥL m :aXT�6 {>`F^W1|/?ԑ\ͤ\RT!*<:.߸G^JZ,zwoyn$]\ۛ@#DM#Re!jJ%VBb7pW#[핛oT`eX :b ˨\\K/V/p-]eW}pwOPpvKWE6Ѣ9^!b!}ֵ;23ኣiR,K` H"B`ә|'UᩐEn2O'H\J}C1[$9Bh!ZK$]W.9q/ ;LɣP8B CHފ,Gd"�6Y&G!@vk5P!s<]6P|vĬ4_.8Hf=Le"YH KWf7^'F@l8e*֗/p>W})Y&N0$S0AbN;>N.2 IIWb yJr4LrT:O2}v9sU8y1j'Ӭ-�,$m*w}*KѩM�88|<Ao)Ed`~:xȱ=, *,QL;a,r0a#'GVE0 *132]!t F$%}08FoZ$(r9  ]&$Hc3#HG9�km|pwGS*Mqd焱=B& `><-yKHJ# f!Ӈd #Ď|Y0Z8{Nv & L +99BTf:]YQ %T$H$s_rp,z-pɎ TN>L:$A2L`09 `MJvD�Q9rIv@[e[sKl�6,*YV'_{9#tGDW9�{ZVU۶"y9߸ W\AJ_t#-: dW1w�gbq9?2i d06-`^՞ٔ #=E�SdɲtZ0E1¥0?x(JRܐL#n\b.6bC)(C/U<}ނcNz�^H; ODI^]+ >^Lc!2qY9[YF5wR.+̒$jI,�N=m@b\-[ &0ח raM fi"[͵9"e3  4~cذKNsd]FIl syʫ(<e*) Ærro<VK#$M_ Y`0vbph,-#HDJrdWpcȢȔl"<LLfq)Z162رe bYsuQPfёrM6c41B&M,N ٱ!7dW"GAv޹ gޣ՛W~kWތ2W6(BI/wccHjI,D2#/B(!vyk *�{h0_B|Et$= quŔy7Qp#AL(%}!I铵P9!fĔvhFt8%ԕvO=iFd]AcC#BB)oEZ>z%T3`vYC)(E0H |H%Bs#?`001Qz p@@ 2Jrl^|/QƇN)bh?|0Q0g"A%x\J< u>å G+/ !1"ټBDRq&+](h!ym$Z͋;ۖDQ:_Ċ#DJrBHDґ+(c,]Q%Sil+qˉ<I$ !(i $@v@n~b,Д!-۲-r9h䐪dzxp^zo\rm谪sDԬbyvX-VU4U꺮 9v~\A2<895.P3&u8x"뒌F \Ij%ztwo<4`8ٵrѾ'ɃPDLCVcE0&gE?LhFAJ�p띳Rp+'㇫.@PVe-7f)G\Bա,l|�p_|uyד@^56R)xUgcݖPKw{q-_[ld)L�ё^+;ؽDg-(MX�oomƅ}* 'ᜧ /,KfDSIb=7lՍ1~J{*w ðKTF s,1sFzPٟrh7S=8d 3MESHr>$.Ne6ҕ ᧮|ugC!|~qoI u~<2!L.!siT^R}mF.b!&C0^e6PQqK;ܑ � �aO у59(η I> ~*ӵBqH+8 عmLw}; < ir/J[>{]c.o^Tlmz72*62턣t}2UP/&dcYk6p)PBȘe�6GM�Qoszy/O!CKnL W� &Bl[e[,�[ZBBCU\+{oʹ /GtmoV~ n/ΫJG@BDFGDR[d0P~YeҶYe)o=o>RĖ�K/jۋ[}"+: �y؟26fT|!ed9~; +]UbZ6 `ڮA6CX&J=l?jEN'$+v°Sͮe'IʖC eAQօPg~F%ǧO�y�ݿYBܔ{|!ϧPpV `U4ԏZz.! 3O_FLwrPY*PaVXFB P�#ʲ4*yK%P P.%9Bx >B U AvR:EX*ݚ|�<J"�@v!!Y-JedzOpRo^,=e' +֚"4tvZ!Ipt ׯ @H\@%p| ]�nCnXZ1#*`^.3+)g!Skz?#8Wů?7-%4ϓTxK�Ėi&MsfQ J�${dSZ珎d= :?VLA(۪\BEK*Ц CT@HfUc@;V):Us)�έ{ɽuF 823(E"VIެK8_z1jX6h|] ' L"W49st}&h!Nufr>{Y[/VrC�\A$Ǎ̡OQW קMPOU ۲Q;Ќ<9ζG`GW&|KSuXd =\v+[ |Fd^*s%) = <Фx 6 HX E+\N4`1T"6Uaz@ j[JX!*¹>1z섯eKܻ5�p:s۲-۲-@lU@@Em݇Gw%]5?{DD{zFv6uF2D̉~ JAY䢑r)R6`=^ϽIj�=p'Z��y-csCtz$+bl$mg<SN1�5şAk7o+%b;KvjvÝb9J0C'"SԊVRR5e\8#W@ !a! ܞ>2d, ѶR l\}s`sPϤA^8uwf[jAgR!/x jY6Aw偫ܫDT@okre}rI~޿o<wBTk1Bh+(\DHr}6DE2Cp_ 9B !$yD~ | 0MfLLK&0?�waXT!]99t,ϛȎ-a?rH!a dgcةǍ;X_$ rH>MvE5{�*땛lu*Wq_+nҌ] ! &wy2")@vV:?!D!lT]$/9d'FA;7rIO䐍 !N.BJkh7UoS = ;#B`sD5#Oc+  �ֻ{bCf '1w29r?HRY-L]%m~wQ�ǂ_;ULTp`CPRi�&G'u>Kɣ>*8ÜhRI'| ;34P?d޾ N.ir}r769Nz(DJ_ DCX[egXQ!u>@Ikׇ�+oDI b`2V1Q~P#QMcTdGўR&X2\D6F�;G u�@ KHEmٖmٖOPOT͝UHЬg{+Go{Y|K#l?T :tUG4ͺY.Vggi sm uY7S. G:)r'U} #)Bub(Y# 1(C./¯\" 6PD*)'1eu0)(zz@U}VSAja)5DIXRhy~^jDÆBaɬ v!K/*"O _Fe-HAH#!,7IX�Ga9.W3cfZW2z!\GRG|Hi?+d 7Ni` !P6Cs!,�DH"/CWbyg!$~?|%oK~?CH,!V l@re(BB ]b~S0(qs}{D?T�IrdB"vH@Ű ! B_$8{0rBBA/6)Dv!<ԗKd2)BBL2gMW!Qr52*.~/CiD@C<$N<8gK߸Ä`I,^CɄj~!.<]JeP3MHr`$K"r=)4Rj2\YĆ܄x~d+JijP[e!PW@"ҚjA>HFul||(:Ie$B2ijb'uA0 H#GcAxؼюH<Vs_yr$zSQ!C`t}:л4;o}EN?u"i1'FI]A)v+F4-"GD2 r5 4A"G60ӄLo &r,D|f`r|6keUw_Ώ|iBh.VyF" G%3VRc&q~ Wr# qDL W.6,c Kqt!dt>d"9 ČGZe(d9APqړ GID#9 c4 ĐO !2d3�\DJ qpP8(m΄fO0-۲-C(Gs@5.9 !9A<;~˳K8. q!R,HDlg@tUU@ж~jVr\{K @jD]Q)`g]!%��jv =,#SlE_`]#$*)9Q1]C¾ co cEȢlm:MCyX3I-j0 k+ds,6&'Ub1cwti1s96B ,kwxzTs{�ݳjop& K>>x:Һ( %y y-mgwvܵ[Z\.@B`̴VU]ZWΧ_DȬA}Vefx.~s�[W r B †� k^U"İusG*VԦNg K*OIu[qQ0GaI֧=&6 0AgK׻lWk Bוr@`bC _WUҍ Pab$4 ՙ[u4m̓(:y�6X.+Bhc<&,ԫ =ԱaAH4B4g>5(Cu ER@BeVE ;M(B$B<Xs$3`Q =FK7S0!S',6r Cˡ@cC{% P=Zr8Q�*Kx+n�T0աB*4UYf~u]j"d`RÇC\б&  ԥW"22|b>ـ e +BI֗C6E*7&eʞJ DPH )Bh˛lA0.!,A-gcl2<ZJ4g5d!!|O>jQ,wp<o 6V<&sA02+H>rkA e}pS v֗.-OE-AG >#Il86(~c%Hu?6*-Ndžd}+7{+7*C#%ln b| )fi6gc6bO b$<b&B  B@CHr6B4m߂Рt=p(1i (l@!VK0gU DgT8B*HkP6`B8ZT8"|7MulH1>َ3< <z;9dF2bÈ;Ilܣ{t@`Y  }oՆCn40( |p/-L3t3{=d�Uc�9�"OzY,�`ז-~X8iN"C&&A8I^OTI_QOhYO^A+ݬr 2)D-K,(\A Fr֨|UEI[W}_[YĂ*g5.4ݰnRDЍ.@6由\N\ckʤ^c[!Na#VL�t}L[ͯX @Eb吶{yr}v<#5 -|@FhS�u 5O¶9/6푚Z aGa2oC\ڧLG%^fG5F[6\a%4*׸w:$R^9aG6(Ysg-]:a{mYLXvF=u|@C^tUƧ+Cn ]9%O9ƨ;o(sel}\m\=TѮ 1B߰ 6-X3bve4@dՎ0@Hr{koDHm0ANxVʂS`}npjH韵�)*XYE1 k PG!Q֗!Ӧl"E Gl 'Xl5f/ |Td<=X[-t1\,}: ֗u;*4g $dz~zh6QFE:֟(L@>`WrAnhITdmNxJm6YU\i}� Ptz~5Qr0=DD� f>$~<c]={HaQb@PÂ@π;\ _4Z RuC`|( .c,AYccb ^1DNp.pR8P?PR`B3.`;>_>X=vCDn% ?e `1[D jB>$ж$j~}e1+(oOK̤; uKkl%eBoHo-?%wCKfWpJ]ܡ[o;ճf;)`|숙?e~StK.2t~nq9})0*MBrG6&v FTX? h"c="2L{l z"vP ;s�GX8!!^wH,J!Հ v"( ת'`hc6eS9�pR9(5?x.G˙W 0O,1 BCaDѠ\P[S*hR`Ӻ6GdS Sb!d;Ruhyn۔!mvm9}Gw0zE4V[=,j@])mMӿ|Wی_}b6i(1G P-%8rDa$/wϛz0k?+_tdX9qfc\?䭳8B.S>є <r'!%B=5Ve2"@)H<JwəgU<eColar4m/ Up��'@p�+1,E~T߽0=&DH~0/�]sok&۵0R�J Uu 3壠X A fѡO<"."Ѣ1Ha40 I`Y}@5u!͝Pv8њ;!9ۣ:ZƲtBgo):ؿEBᯅz/AЊ`̛r{m1||@qAFg$;KCiQm5SN1E&$I"D6 $Ѥ-BE<a{mvT䮅]."> =ߐ0π$B \JPÆtȑ? Nx<&a D)S˂hM{NH6HVSns'$O"$!`P`gk25O9Ah. Λ&QtŴj`m6+o%v@ڿLpRUIG/|1nˊ#D)"} )m<agX}GQQ)*wG6){gSR;efmU,iy>` ;A$kG hq&s*`j69[VXH"$v22L @IXflWn2;I"]i/&aH;#D>DsV"]1<B!agv/ ˖kPUݤ$`.CKO9 R AE P!Rj !p4@Y&l3l!~-=A |Kܚ* J mBHט$ ( 8LImYz>"l*JeB ӧ wp6q-Gҹ]JavRϷ�[c[iuU,3Nz2c cڠr``$8&t}R/d GAD " =?]82q0*GkSB{*)B 1@`is˟2ד|#X"$SH(IfF:y5Y-+1t0 �s<VP�B}=GH9OMiC?; qxp:wN: ruVšJV*X!S(A0:n<O(Vu 泰E�4{WUcRs#A0� j*(nZ `;GR9YP \iVX[^C5AY$Q^;Lak>o2x!_KFH�% TpXbH:�5si]L[-bC]D %^haɔB3bW͕D):h0lBh<94vA uʤ'Pcc_Lm4 �Ʒ|ܺG'*`#vvK`S:Q3 q\`>"AX_T$B+N6zF!j7>-�; 3I@i;nə f=99Eh,FH b| Ÿr(YVD@ 6"*Sc ĢKP`1L ! $Z{! %4u0O |!@Hrs<t2M"S�s $Xe ;pDOA!Hȅ>~kQ*X1+�bx?;-I wДd&^,U[9>���IDAT�>8.rASys|4hJZ lFRB@-2Udd} $$~QDL!|HT(V3RT$|j%>nC8FIZRX|:ƍx\at<3 5]´ %f)/aFIK M֧iDjW+Gb(ɚB:Lm1c8Qpԭ ሒKFR8 C8`>ሦpLqh)OY1IfT5_E#`aB>R=Ѕc%H#l0!-x Y#r]%HT(NxM| 3A"+){Eȕ1sp#$Z$B얠 YaԼ109z _Aᖘ 76rY $@H.Єcp `wW@hJ=vW tK0bz; +=w@7`~ClHG/" N?g|nwzQƁ[*9 :!8b`El{t=*BiEXΠ� sh =#'=|dtra 8wPT0(d *^2y?趻v@'O&}JI05a'ZO *?`؍o*G4&q%Bⰳ1i?Ed 9;Es|U9?4W *+BT*LVg|= F,VbР)j<3F<g ;~%W[LKV*�y T}ku3F\S 7#&JlFH_dnVQtFx !+a1BgF_]46} 3Z光*k1.221ի†$sC)7P|ĆBEьZ H 6B jUJVfA2̦ߒ@%ĜS k5!tm%7VNםH 1'1߈_-<$Po ѼBCF;aIBv)HU�!`v@WRF:R[E-&,SĜ9QJC)Pb.HA<!&baU)@vo1@KSPB 'йL~oH j {J-'F ~de}e'T=G" ǘeSgbc#P!RZ�g) L[SkBONXR:sBPaCH%hFaGyS(+BXRBMmb =v!Ik zH1)3cp!R,AS} KO0RajP[DChx&,/-壮)6WgJD&b$l,[@,Apԭ Kl~fy#K@X8a XuY,4RH5a}6\j‘ DQB_^:~BТ>i+f(H3I[*u_䬊E8& ]4cPZ!Hj%"oÆԐd1+Jx l؈mQ@#xcXNPq}AvO߾puy6A#<F(8DF^AGݣ, ӈ;CD"xZ[b{N?p>2J!k4Z)gS$`~HB0qc8\(&YWTbΈw'X'>!rlM:H=@&kѴJ_-.lzS?4{[IK$15|}J]i5u.~?TΔpB;gn(92LQbA_mZqj6"G@))SoosF/.VƆn4HeƄ5 CWҐV|a+J-0XYp+Q_l S&oXrV$F4AE<,<(B.hX] |[^(KwP3@(քmR82 5CqO_m,lUHD3)rW\+!"nKۜ'!QDH&:ung.[- GCAA:�TR=9.|'Llhq[(oU:$�:@1*YM�cx$< xz&T dYua =T*L=߄(-#7&Y_o2.l.%ODz|a Y& EI%vR!褰E~4*4e%(cƬd#p4`}4K6BJqoƯO4FZl>]8V:gy9閱 t%|l,5(lVMlѱޒz>]f}[\E柅 -fu8yU!OaAHޠTH;fJbQOb#ck)):z)B,Jr.ɇBB]4H_-B&fG  !{)?`cwP`>Tq5e.rSO]k ۷;MBp@@ QEX =G/4!"  <D@Aksh yݏ>552VpCh4ʵ:sK�a;X`q ` =8^&,(`DKl[ %I6XjFRƅl ?#Tcca>Y! "x'4D/{:b&u7zkTw[l$Gr y!̈~]HDǬۉ zf[L?vCL&}ʘB=vbAB? nsNɽ-2$wK0A;BH ip-N۵GvNR\*>Ž!5{(t„Zh(; 0 (+ Ӕ.d22n Iw0=Ș=1_O�GՔ �(?^G7:[]bр u- ) zaw< +uy5eM<Z -k1* j}$vC2Ե'|xVSQ~5E7Y6)'-6Fg j%D͒5_D>REc '!Ƭ>�NaHp"+m -`}ԩXc֗UUD Aͳj\XͫOUA,e~|<4+)XL儃NCH6 &wJJ"<YC'']oc?}s(ō�cܣ{tQqJ}ihEN@sb9vrG719U)Ye& " Fm4ʕpjpä(|sA@# O&n4:hQ"#*$IjfZ$lwIG,3)kED}&zd^[>o-U|B 1Lܛf;ʘ<Gm{$[)ќ1ڃC 4@n hc!>KM3l+�y"ThPuɕ bLY-؈i4@cxV(.z/^eFY27{PJp1eL:BfJxxYfy xt猍Ć!r]<!4q^)͝7Z`?-Bu[QAmdH?ۛmEHu l�\%'Jr Sb/>9%Ұmh-#pFTAՁ@C)H"D]B feEO B`?l-^@ة W"vG %r1r gvZ"Mn!�\8Olej pphhTGTIg#DZ ;m1]['TaG,*g5D,1^t&#zt3$z>逊).ZA6FK)ۅEHےQ$(a}BlN)ka!1R2Iƶ,A rccI! G]rk/QWl+dD8y�h ΅,OWImw' (h zv/$0U4cQhja:!m N|A*e”X_1K<(* l=ġRXE7Y_QC",$3Mv:!i hCS8&CNa$'MJ\ys=cD D<|c?rddC97@EwG$=qܗs΃1xAL}r}'@qq.C +Ukic眃1u1~?a!וPdN Ӷ ՝I�͝HD ͝Z:F/1A )fW"C.mj MFkݓьQO u> !z~% Ӱ:%oD!0r'\$1Xj9j"ĂBa !,?9k U:�L H< )HxC zr7%&]@;5nA@H1lb4qA LIv>$_GSP"z\Ƣ)"a+$_uZCXwfCbH%eE*>@"lfKs'�h}w::v,A؈(-IyLI#O5`O@>uOf+ AoU $>DPb. OwA m#D=& hqc Bl-'$v1B2!6P { c|8@t @N" Pu2$"b�U4u:4agDcU8՗O~z_OMAvuUj %YNACCTz)%Y"Tjpsy1 WئkЕcoCR l jV8SL>&bi'[g}J>$5SfJ2 jz~Œc؆FZ^יIO ]8ZD4 $RՌAC ;2Bt-\7(B]8ϴ9Z"6Hmm G듈MIӌ'lQדDU4bQQhPeRPMrp$5rs =˖b2)z>}B`G-A%ߓQ萃Z&o,`+mg]e}wӤX* ;%*פoa}2%y*rymbbYQc LXɰ z>$!VK0gU,X8jfLLf,A;BS34YJKH%H;McX']jϣD"q@S Ge(\ A"0N[6'F{;1{}p# U=G(d*z7= z3?|豹j �>@���a`P)C+N .A{sD.s.`0t:v~pGK㲱5%%U b回RG]Г 0]!%BjhIʿ` ơ`+DD/&34<\dEZhDr"�0htϡᡑRc:8;//]jV *@}$Vm51[:ؾ#C#[*UNt~7+[_ݸu' ZP^`ۂ2bl64HE:lZԝ 2ݵ �}:T#%Hp qϱOk4K՚V{WϷ:w r 6vbx1665[m ZJϿi \k6NSWRtJsp3*YI#k}GG'[k˹Nե6/ib |Fg$ORld@0ב`ϴ8S+EJ`1H"ONmT;2\47͵K[Wza`؈YώbS/U'+ׇz-Un4Vӻv}浍֦Pme-(z¹=ո!�u1g&X= mʡGf!>T*W~/NX\|y\sn=Nh xPF^GLeݵjݭj)A?un'W:mnzBjQJb67GպS՚#:~t;ʹ֍ ܀ Dy"ʭ:B+BB0$6ЃT!Ai^I-DNCc3 ՅCpy51~7uvӿq}|g )h6r ClQ Piϡ}ư[3^K7/o_qihtR"PPET C19[�`Iã]{/ D!Bmbz86UYуx" ޚ 4:Q޵>9[֜J)WR nto\jAOX*�^)6.ڵQo9hnx͵~'<J816& jSFWm6=VLiDrJƧ+[9{<Dޭk[}A }&B@I%�b1\ _*; Rvk$a\Bx~%;$B ˊb}dRFP nܸ^_ CABԔ-/Ɩ+eIY LEO~�ATGC#塑Rc[ޕsMυU}'@2@ӅјYbLﮏM+\ue FgVsKs$d 7�9+05D4HbÉo!$;åh\qJ\fB@ A//>K@6�{ H G@]8X_R!LI[Je61S/+NJe ^][@d[p$N%NIxt1\ 797v~so!!,EUF x>TvKTbn!bs l}+x;]8B I hq&,UY&Blă $3<Vn K%-1eA |>^׏وL\KOspt22^-W�`= 6AҔhèiPz^I5ȶu1^=>U|wW!C!�\�)'kWGݖ(#G6 [nwِC16@� 2ˋ ]9 p�A=nrjɩݳo@�#N|d,B,\W0c`L�A)0L3Ru }q\q1Y6Kᅬ"dɇr G_o_j-= Rt/�@' /閉F>{O:V<L?e �*Uzgx3~|hN_kg^$ZP_"H"VjO͞xx|jVmkӯn4B+2.)vdޱ1g?5 s�֜/ ?\ H|_YNڔx}Ⱦ}_ކ>ݷHx6? HMrys>7Xvr;v̫8&*r2!TUA+ǿ~6\Ꝉx4ȬПk' "s&>8{O#c)$y~|~yÊ mP0"1ZJIF^?;}׆ݿͽ7ྗհOo@׬-_Kŏ.�,:ZPۯn;83x~`zwIX@X<T٩CݼyKh4Fܟ]{taF?m3ԏ[^_h8p̜\^"ı>H:-O+$0O6_.̽VqIJLLTbr@Ѷ+Z?|qEٵ.eRD\: <c#3" +o9TSv@t<G߼tR׎->a٣\[SzRaMI|?P?rbT7+ZAOe^>Ssv7_JxNJ% ۯZq H 9T@)up,1ݾ^+y!=]+}:BbB!SϏ-s4�՚s{B\1zuuzMj?p|z}VxCdZ滯oM~z>m:o`-qM-Θޛ/*Aơ&rDCڕM -щʡ3 asmp敳MN>EֽzW:!�d`.Ŵnm\]B~7vu mzfzv@]id !n~Rc{~6 g\ze\m N<292z8ĵKKg6?>%X>r=/#� 9*dhn1<Zξa l:d N۷ =lsqW;v ']C;/}JrUP|fHT;:2;oj{R`o|b.o_o_<Id}'3盗ϩۼ1G,bf1rn'𞚫=l+_vʔ;xvsKbpn1=Wnm{rS|N/M?Xvt_A !;J|r|Xc1)F �i.~/8j:pKlz><VxAscrxzExmv$7W##N!/tZ^֔,KHƔ^,`j 2JX-;ղ[7;oݵkWkc#3{/*8aF%�Q:!% 0.3*E|/'FG>[vz};s[B[o{`{+!'#0�Qd}8X`zaAY`|s.b .`dDujm?aX�`5VE`A�pAp` r|7<g5bz28~3sÍ!p �~?XT ,O^^yh !ǩ0E p"W`abR! p.8qˮPuc, !<\ ?sD{x=0LA/}Y] &Ĝ-PG�`Q+-I3|o5y&8×?#槒ɧ4 6CǓ~9VBڽ_Gν  rD}uNw5p6x<ԋ_?ꨮoj0%\a| 5Tsպvða4 5zw.�{{+3Od_:M{#~9v=;^{q~J)ĘaX+HkluJm#еTbZ�}rC0xꣳ~$Fo}?q͖:9NiM:+N8"*Y3~-9i7v%j3Ӡu+v=Åo�05[} 7_ҍ]�ɞ_*r%A Y e#'$-?^9X=��DȈs3V$)c勰>"є/5P>Ә�ԟĮUzs'F4'-d6`J~p}c[RG'*M\u IeD{#׼ćN<tÎ[b z7n_9V*ĖtjywgRn^1h+C*z""5Ė?PVӻjӻjx+g^s@!Wre%ryAf<^;ڀJ\(%ljq@Դ]/W?Dy_�$|&lNT?�scGNt4<Z>āc_[;4~YgfDXZh(Çs(K2{=4o_:pP8i_� rz&f~|Vϼ.b:(לڵXhuy+7{@+o"Kev족 =q�02^>o|emO5UcNAh!TE T'6EC�sxcwT9.: -5l#Å4w(@x' @}Tv=2!sh${wi�ʞW1E_<9[9|x5ln1~\һ,SdPbF'-�{ܺڡс�j( �n\n!”�F BTf _>yR+}iFP\UuSm(ǵHF$EC2 AFLBb 'gj՛WW7_� :ky]q(�`|hpIlƕ+m%HR'Awa"pƖP>Tݸ~K5T ;�27O]AkذIř]BJegb61][_޺}Yb?l}n~(ãRƕmʡZYrj {8GVS`+ @{+2@(p\QzQ(׾u~f}Y=NoX�ւgdHIۊzӶs,TwNIێ&ˌaXb mAJdQ)a}-r@. D&(AX:DΙ@<.nFܮS/ TCe�.a7J!B Te<LGtXz09ΙG-q�.Ka("‘mJI(3id(ZXݚږh֟ }U4"T@oMPI=lErBhSkvt-QgZ:� ?7VrW{yS601Wӻ U&\a}b׃OMvڹN֥\ R+ IOBxtނf0KV.*?LS2_,OHbZ-[xiJ�>Nl_?rGvesՓ NPx rR62q{ ڐѿp09:1W@WɝSЁCS'ƞݹfs8/xWs3.wNTA 3;J@e-3}r#[.d |ɱ/Εk绉q*G|q9.S/}/rBCH^Zj9ύdLcyͫֆMKhPѮ޵[~]%r܅ JI-J}[2Tk=?{?7tr yHP"gr _uMC8(xF׎İhSȩ~ )gZ?|r,GnI +#=z7!GHe"`XOWخy,RuN=1wx]6pGfǧ i2/n^&I!*?\pr @SUPq4:Qy7:-#&?|g?Zh}cV%<H@<L|_JsS^m -dMbOL'v71 7f|j=|Q벇}Wn<f�Qv_cj'gvo!uI~pߑم_\n7+6ˤ.MVWoLb bz0@\ [{N<4 .;pllfwV,"/UEM4.Dq-C!šəڙW[8nŘE�!F'fb}scJef gBNVmFl;AN5.*)LgG6PNa{~Gbk-/�NTouo]mTnv 2XY{DQz6ex>U5ւB})Qi~�᎔SW/]Xڸ*eq\ cьf`EJd w!Fb+:~,P. >,<`@a+k=s!@pd(Xx`[G+sc{ -.>46<X&Dvȴzt\d.dq41!!đ�~1qCGpA=;0'=hFYFk,RUNGUBl<'XDrrEǺ�9EJ׸i5o#Dj"JЂ=z݂O~ S0N .>Wl#dJ:4D*56p GwC#Z)2j� ub uѫhaqK}ʬq yW<=YQ{O<>oH'#-=VQޕQJTE4md|@!^qxN:hG )6s s5Q'0I?f0.VsN�$B@CHs !_g 9OfubfʩfIceĜ~X8Žմc@> -O6j ?ҝAS�*%;ɿR̞|aßg.ԷGt j`N o诤g}գغ:KuH"do|?^}+=�$4JɾQ5 )o&OLW>7IWH#?p1ԡhd}tuVѪ1|Cj푍!)lhJ2)�T Y 5'[+isppT"(FH9/n\jud?j \}-zמvW fgǦʒov å}v`�.uMR@xv'B[l|lå'?oHғم A%BQC63j~g!<1,S*$ٚv诌n /qza6Bb&O>f{S<16�IF G T.[%]}"17+/ I{ uCOl#+Vw~vflԀ뗛7spD|wRC~vŏ>E{՚wO7'٠:WWk,n՛C.ЁcNn#+\qN<<5> 'X<b^R}`b_I՚{ɡfrFP2D-AP,bR=zWmG% U,WX� Gִm+,aO "xc#:D! GBnhy cufm?Ctxt>H/J2sLoW IqF,| 鉅ð井r8 sm|=grkKk77-Y2\":1_0&!8( �P+@0)ݣ{>08�8(\9Qe@@&q�  y ߅';.s v{6WX}}G>C‰ƇTW#S\-J�a9Be<t;@BA g̪09"^Z@MFgK(t'��Z8~P^h&Zqq4JP긖 rR� >/5^'fS_o<%UeqCßʕ;ՌC*W7W2 XtUMÆAGS.DuNVvHqQ4g~1Ӗ67./ Qe}(xhyyC!l 6waQ$ $BwB?Ϝ!|gvB/W{4'߁{3eF3Gr{nqyĆ*>3Sw>؇255Yʢ$͜rKjB AY}DiCQ˛9}w8џw^0W{D2O?= ѡc?+M?c:!DxPIO|~ϋ_xADݧTxgrnߺvoz-_Ε�1x DRS {?];j�c|˷Obj( gj[JmGu4!PBvOH$mS"^ag�Ogӯ?Q;[`/$Bȑ3p_]wSO((Wj =f%}GN5֜k=@I5atP<<g^[^ina'F`ߑ?&xw^Y>Dĝ oT'iޡje黯|uUyfIsZ[@,02^y;Yϐ#'?kQ_!A-A!I%mʕG磖1`#3jmt2'npaĊ8$(0*\*{顑;U]{ਖ਼͵~4r\9ۜ7ָut2:^XH93$�pt<2*#x ^hInW O9+Uԓv6&ah) o.G`n =8D<rj2't'.2-9'n1r=5qվ.pT :~I` />޵K6SgXwSj@D>nHI'R nã᝴'&.]ut4=;9XoAYZּ`*obtЌAZKt6kILቫ(78c.]\rˀ�TEǝ<P>ܾ[AިXGO@d a3Ϩld_w8,[z=z_�<<\`p ,X 2u6} OՇFƫscsթX1\jg |rKJ얜#�'#ɬ]`JAcnq\)13C Sdhtg;NJvNr@hN$mH/@xtp$O$=% _Hw_tXJF%kAM ǥ2ˌ&|Qw+$ia3?=<[Q*X"VJT7$c^Occ4�5)(|1]zZ{G4ke?y]/IGvRuFgWAfW3Ԉ~O8]|QG-mXO!3JQ'>=;BH pEH"OH7ŃYňZw7כoB%̼Jչ\?5H#lK'N?w6\3?pꏷiӟFCb OOF ɚ$Bn:@} 7.蛶lPȁ'IVcnO=4W5 ĞxaV O:8t9Mj=(�&fRuVF?҃'F uZ8=$Vnnt[>RW~| 4' C29Sy}|Cs:#kYr0]8)z]O<4"V!DKP4v$L(lQfr!.beHl8}H7JɊ$%} V�gI,Vڶ`ctW>TwlTbz>2Qxb!1cQpjF2-~r+  w m!,{lj,'hDI0o,+#&W7�wrJhUΝGCb:!)6ԧxCibߐJe1>U+FsZ؜`ΐl7r9xlZsLK0ͱ j}aDT è!Q|(^z&0DQE~wt}Fc?ÓaxF\ `X@$8 j0=c=zALQo @9`�xx0pq*w;nw7ʕ4=8t⁙??̞}S.#j!+TrrR*bC^�\Nn4 vB ~ `:.)qFJӊOjK ̔(ӿ% iIfTv&I{D5*-Iq0{Ϣ!=L4?Wmy;eQrK/%[\YAzn !ŀ+x\d7.t_pcwr瑱s+|@wj$$ZXCM{+4%O~t;v<9 2X)c;`;}}GH2f}wa(Qy#jO|h3Rg<!X'!ZvD8Rة葖^ч>3q_x SmZyHea V1?[G{dHTE6dP! >wǿqy}y`.J;*,g�:e3EhaCN%%g#4;_,8*|odnBt%YC2:O�ۊ}|c~o]S:ǫ va81\*k(86Sͣo&=W#V'^KTǞ%\VJ2AXć�_y}=;B!CCJA"@p遧o"0d5F| QꚖATqxԔYsj%`ZN gо##FIJBXxLBFv>|6d}.k :z]XDԇWk;A,.H�G[l$��w { ?&cxsB&-A�).'E+�UΞCw*IZoH+.r/t赿VKP~8 @�`]{T{91 TӦCA*/(P8@,k7Fv!‚ !p0X7@2 =>4o$pKk7ח@!@ 0  z]bXýL#�R?�y�!P�p|1vڛ`V~} ?惻|db8!+߁H -*J"*QpNF-tG!cqA <�pu]Ƙ5K[i';PFj@!d+[(W{#onvo_޼ၘ]vMT?8E⣟=/?51q|rW9ӕL>sKW~ AR'?ixz};8zԴ QOzt|PTroon_\ub/?wFD'nobm|tmcXyzWmjng*JS|{ :7K7w>UU:Qեʭ^MK=>P5\.WoDyb2>U-FufO]/79xBIoזkK}ʼntetR?5rqui [Fuk߼ u1~ENh\l ֗kKOU&+c"LnνYH;*NހWzkK}�,WƧ+gX:97� |sL+>rx2OkkûzZ#Hn sKj7UjNc44ReGfv?z-\חz39[غX-7de|/:Z#Gk~G&#cKBzjՇܑXrײ'CV-6Rn?z(.Ԯ⁑"Wr.ڛ1(hyx|秒Sw[:s)->zp`֤n]k{hPhmZ^{+לHKxix\'BNo7vs.ׇK[=.Qvn+WHih}GϿ /rmu;~\aSӻ냜?&{Pto~z~TnV,W=F/A{E)I-,}O9w}` cq2ȑV{ViTG݇0>w.}f4Xp+8�8p. @# (rG=¨dz@!D0 !8 {^{cC-ѱG\_A!sê  sc*vKRRvN|s0�f4P1 2�? caTr2`@S UTRD~n8ΌӏnM\lb\XNlZ^#3aҊUN1b͍ʫ^M?PVG8fr@)<vOn|Oo k>~ӳf:hzzssK)GŲwűԻpfTj=G]zӵ׻fAl#_ _=߾v\ؽУTΙ7o\X'>r!廗ir_{U֦_Zj6C8%\Hv{4[~8rUg- !:*(_ߗxϗ^R M.?MdܧRu>3V67`u `V�8i-VGMf="T_ٟߗY]}_;}]{k<=yԘ D)9LX3?53wz~[/:@ʇ>3?]8t7H4ȓ(`!+QḵZ}23)zr'swi|l}x*u7n_=X=yn:-ҡc7t~y#usUr?mxշ^ZX#fMbɱ#iy!w!%t`.fu6_˭og*T2UD4U�ޝټz+To'GN>21zs7}C$O-@~n{)>IxKuR~9܀\1JY//߸Աr=->õHRnһFyS4pޓs=]LU*xxlᑌ#Ͼmʶ i^plsm|7tщJ3o> .NX5~jW>+{MԒخhVc)7}$ьtIZ?f bh|⑉[8v‰x^ ܭ3$u#崇H[[ݷ_Ymnx@!Ξid&�)+1 R N ~KB\=/=9Oo\E:pJvkKc#7w^]\󂀛3c�Z۪7&n.4vcvq7qu\q3!DhXO*W"}oE])+lzw}Q,޹!#TF�):1כk'Z;:V*bM4mVV'w34+NV+,ӦHbw|ri{.4I8j{PFv�ص8֏b[#>uZ8�naAlN7n]ko/#ݍl1\[߼s-@B-:mRu5wl:<Z7MIm 'G,2YR˫~TQ0G�W s�x^/`Tqs_ܾ D#Q8 #�s �s}�=p=z p(U �� 8(|:Pkb8C3ãj˲}7��X #!suY]P*ㄱU+ Bp�f3&d0AȠQ%d ˡl)G:\QE.Cf17\D6A }Q̨I;[=rWzR=o8 Xl0rjOlzqak}?w>LjcrQ#hFij?5]pWzmu6/ڵwiD'?6q]ZHĆ|;S_oU�\<\Xڤ~@oKul)1Dp!z+A#ws.ټf/-ӳ~{Uv0_wmQ�~/ct[MM v6T?O 1IMA#H7="Gsvߺ_i8 @ܾp__˨8>K_[F·9,?Ɨu;be 㿾~wӎb}/~i?yn!#έ|{_Dh_�q{շ^Z_SNa E; 9n~!.~_s/t pFΞS 15nmcP7@|^֊koz⭛W:̼̀SON yTXDzBvpq^|S"�~n7}WxSi !}?_\ 07Rx[,d'wWA GEBTn!�b}xAfA,b 3-781* o\)Qn5׿zg?1ׄ93_ERI췯-5qn͵Τ!:5E{E()k 7"3Y5R~ n^z>Ʊ3;M͵Aڕãe3z #R:g6_R4^6?4{=2|M7L@�MOBacm6nsP>UQF.6ozZo7T �} b{?Y1au" !2i^ҭk]H[N{p|Kݿ5g*hg%dHso}c]sr}=tj`ŠGAZƉeѠrn22?pzxbk?\=$�敳@K<2@eX] eC  Z�ܾyU?*2~7.W',GZzy fd-F'-|.Άq;72:nÛ4q�CK lpxD}~bkcɢ'ƬR% uѱ1"͟#Dbqr;޻o2̦{x+zC'FƋd.V(ĥwחovV[^׿xz9{x4{w-m%HNI_ HWPKvyZ >œ굽﬏WO7KCåVϛHZ^(l(&x嵋!*nkmFg$/ܼҒ)uN$Z6S}Y2nrr+Cѐŕśՠ Z>\[^|3("=y.Y3u|@#Nj #@1 | ?pYr><4{dq+:r%%D.�9[Ba PD wݣ{~ q*#�kCDxw��|nvbqS{F&J`9R.y.�/�4"4BƘS 0p\tD">\D<5El?B�"C 8sXp )"[*-[@-5v:QW$P"2:#9/k1%zEb*AKOT":4VuAIW-6J1?gos+h)Dc �췮OX92wE>tq׮ /=~zZ,9LpB$$B"eK?NdnSƂ(gj9Zޘ(|a7DS4?ի7.uU> H[‰iӶ #^W._q[{! +?i@l֑wFm B<_3X=pVX_gg7=xA$|n^?;{j'O~x\e[,A&=;sbGx+EzꍔH`jkj dܠ_oߠ_==tLŻ7ĀBrTrեzsSŎNo<wr?n/7/etSiPv҄�I"3 P#eSs}+\In u#V K@;x:c_|?_y+k'D"?ӏ7SOMຩE#e%�M�tz7ㆧ*WXB@Cե~ri^C19'"hq:C֦'qŎU2Xߠ|z  O*uH^I/vvD~N+`hHn�*oC:Œu4MaFIu"{n6k[i-6̆]{DH8�0spxt X86K\~.7_Q|6+b恪1\ "a9\9::b!T"! Nno y/~9[G﵃f IKP Fvdm?vT%zο?io'Rmfd׈Wjlw&_o$"A2@<۽o}Zɤ8ԪY /DJǬϞ k7//^ΦLDH>>Ej{mU)B>ɂ3?\{A bnEX촽uC G2Ct&>)6q]{R*“.n)'WVνؕA;EH{۷ndit] ,(d'vI`G\rQ\9+/2`0orB,qoN{KzWjPʘ ovze9t-H3VHjEޜ4_AB}‘JUzjlyzw](?�hUnO3"zIМd Fm\TJ^~yRS*ⶶܿpz !oPl:xz9QZ㝦wj;Aa*ɶ诅Ђ%@I`HG|0r/= @ 8g!-ku7[Mc0wdӇ?gbUApJ(J;t(G$~NgiDwsQC~c/\_,@Ƒ @ : MΛ`j>6|vO,/59 X/I2 �vO$Eǹ4Ș.bjsq�jClYR"D&}z㜣F)CB/tQu(Q&bxUr"!uGKNr&@BdzB&=jrQ-,6.6eŕdIYDy7usݎ hÖcEho%&#ceT"+y~"WA/#_;_vZ=h EY9ʵE $KJ24m35c|a)(΍m~:'>\]'F"e=<22^�g݋IЅfu:c(YuFګ[G@|r >/^B>FtKoc{_N.=i-e$ +'T$2<WCHNY^9BEÓB jjңFM@k0LXY4!9FpN>U_.$B {?y$@/xt_K>R+HLZo]uY&5z7.f�OM N:1qWtKytyy}͗?>Ym$ ch?m_k=Ҳ]+s5ԓT Í>]߸ILh.8(k᱇FOn֟\kꐕ/~c�ҫ%JA .#uaFM*R GKRTY0 dJTjƪy2r1Q-c+wfʚk^76];/ 8|hP]_K75צF�@ܾ}YL\ꭗV{@ppDsif @M~ %/3>^oIPKPqXů eZX[P4JyL(L){+7{j6lEmM= /! 7JDHZo|0$KŒ2'd ǔ$�fs:/ټzhLV)8?о l]S[^F[b |(TץN˳-loMAA NnzK* \9a\܀,a,X\7^h2]/WϷ5`"@j듇p>f}ݖlgܞ!CIN &IKObf>4޵chXԻntVҟDZc(݌Fg8XިW %9]8(nR+H0q.0&${[�o\nfslZ]&͗#KN7VD{� HvH9QߗzUl)6Z l@M:5=၃9Sv c%S+5TZ &;N;XyS>gZݍ}s` P#9N[͕I" }zPQ/(9S*8</qc�s+J#] 8t�]!^{ᮋ1D{j <h5WWV75>=w<ZE`04 `ʵ)]Ct,V[Rc^ZvƅwX~BNb1t�vjna':qq _D2$Q.3N u"E?yg߇ʷSP2t:x<+a{_B]({x/&-Hހ77pxprWP?nqWڠōůf9{t"9|8+wW ⥕̝ОC]72JBtՍ<z[ۣn;x;LLWG&<_Gx6V|kN?R4,W'I9Ui7׾q !Ƈ?}/m ~@f׳o߾e!dgZVF_b-ejV.]eizF=iǧ+3/iT xl&0hf>;¹62=솂/]q2k9cr}Ak\O-h);)kk$"2z8g$}tckj׶9eK7tV}hz.k[{-ܛ;⯼Y8MB,+&59 [yL !w ?BZ9Im9]NLR߾4:^R[-"L&g޼z="4F{?it'ƕ-THk �Ƨow˓~!<# `(J \1\s=AP'9xÍJyU  cC%x"GA{t_T*1溮뺜s BJ%@}0s΅anH pƄ s 8cpRپyFr{ɣ=Id 9B¾eJ$�ɍQ �zX }q$6;0̐,1L/t{ݸ$ s!s]7L;I*#-!%Zs' ʙTjƝ6Uk$h#h*31!E dukNfTARsͭ{Y=ڭ~Ɲ&f*YEˋ +�o%t&9TM\9 uJߎɼ*/AͮUg檾=$>weB~s 'G#G/_ʎ 16d:뱕 VZfNoF:@V)ϥwo`)!ѷ"?[Xґ\5Ur�L(~t͝YEƞH,:Ϭ1֟Զv>8}[$YuwW� !p5Z@/Jd3m HCJ7WБΜbO"$vJQ֧_i6*MQRd3|Ń s0+/\\ċ_=*Rdd# w+w߰xWiQ$pCl4!dxߣߛW;_ͫBvYK1q%j:Uq&=A^7}UsR"�tw.⇜ ꫕}DbuM?ÄH2u!őTIF:՗OA ;$nV Dϼ ~Tx5i�DZ�@q$}-�(WhAwB|w ΦT&fkĺP51Je(R"J2Rq{qRGc3Ovr}ku؀ї�0;+R>tf3i J2$̨_^&Rt!-RpCQm/&dk ܸqF %HȃVHl$!ApTX4c3>N>3ki`eU9$J06rupX<(Jt~v5LG^J͙IUhfw- nkskqJn:%6~;ZAKG\_FK6ڢ$A3(1ydM`g]�sƆ,]٩op)Ƀ >k1=Hxe#[ -} 2˛^#Ƹ~YU.HI_M"8ܣ~ }ց/ 7iΪnR+0P 9y]@pB�KY'#XR} #" UG l] � lf8i/j�. �C�� ~~w~gu1X?>~B}4v}`,1@B4=G?J a(W<Jo ~c$@x@!Pp\�w;ngZ=}>t}SRE�TZ {owaG4ch,&D >xnA y|L8u<|(+��SADRKb_n#)zQFNFg$5&Hg=Ɣ8 -m,ut'Ɍk۞02u_p\9ӑ*5{:Vݺ9tPͮ<"ک3j*w! C-0iKl80%Y_]3A.WԽҍbzi͜|dz_] \qWG/1MHeXlxM_Pz^?OWeX@oJ7l_koHS#{=֗hDW0FrlUv_<]f} $ABH6}i$(<Ŭ, "[6ԫ !&r3d\9i@�u'("&IN˛7|vcTSů@/~G~f!λ5( ݱr޸vm$B}cCE{rņ'�"w_i]MSv]x!LO|~oZٳHw v|-!IP 0-nϡ,Mo/!B{U57﫿UмN@Ysk'<ԏi4CH>@_Ӆ&" �deӊ8}т�ƈ\joI=ޟ[Ս3|әF1}G4 �U"!Vkw\=Ҁ-`B{M`TUSݬb Keʨ-յ*z٬]{**B:#@@{sGtr*ZϺ%85jxfA(teu ~eN څ>eOkZ.㦏%%-A Ei!'g֖{__k,AS}UeLL04RH\_4Z!/.n- )'mml9&b{�p͌,=Fn_$x &)g[ڭ OH9TK ?1>]ͪ �o |iyz~ hW3h+.BI͒X_K=G<<VXKᨫOFF"ͨ5;&6B~0facS Q|@{MqF MK^Z̓d ȴÌ궽ۖ| )N$N �n'XݙkqSA_uL 2hcOc4%&Nib+IJ8b%H?�L� @>�3>.`/DgخDe}xtlQ.}1pFse*pk@D6~vBp1(r{H" �LƘ"s�8K+ÿ+}t�~m {N̉&J, (R ^7a�5{N"�)FޯM¤�b=΃ r\ [+C-%bz{J_]j%(b A3^'xa`V,IlOmʗ jUU S#-9l}ni}F&`].Xua_z2?P?fˎFH^ @*s-_e+57dSAc�xb*Zwrop_J)BTI^MrP-+S~ҥeWC"9[:k䚓p ҬGd6e2="˙7S)2:Bt éH'4  ZݝIur]X¸IA2*O')8<>%t-@μAC<!ߝ3Ksr-H9֦5yAH 4nxi.5@ܽ7|vom,q("\Lw| &춭^9\D9^ <S@ܽ/j[ڐ!~".y&5fvKe6u &{2 @WrN/vV81Z_qr.}cS֏T#CiI񌚕w^]Nas-1\*7 %٦\V{vI]RsjCNĥVQJ%9lCt,y/3�<<jscv(Ru0t`ON[ՏO+Ph|Y$�LQdMqycy꠹>H-׶׾\جL_M] K0w7;TZ9FkۺEOzvvQW ^|+EuN+~ZHibz[KofVz306&vm ;ZF뒣$3IwY*,\1m<+YLOR bmL0i40U�[=0œi̞3nC%*,A Br$*'72뤓= #�0�Un )gp4\d"ږKyf}Js�@3afGDy @�(1,9+fg^mBTeW/wWnoRs�#` =1%!D��_X\}vqNgpW yF Sv՚Üz{c}xă{A0��<�7h#:�diB(? ,! �~n�JuKBBaGcɚ E}fjH&[&H%M*14r{URٝZM�(HblqJ+􇘳Xm9eݱ^@r{Qk6 A> N GumƒAZNZ !i˔rT빽 'Bs{It%o߆42^.rⱏLomF~axx���IDAT6zI0UyHYZ֠"m~ܴ\x�X:Oz&P5=K(2@OU-IIV@7hSR쬽#Bz�-xrkI#UtLGނ�CcY $A'ثٟ+_<?2!.&,&KTm'n^u|4n*f5nBSS Z@r,<Dj /Գ&BƦʒ RTkNfeO? �{J2\j;O6l.m~?_ExZ^ k0gx4UimzuHjCd}Zqƭ6 B ;M2<U)J2]bH٨=FFkǣƥ+WD77*lFXj3;:Y]I&z.n)Un,B?$bT|Mnp o"HWAB@f0(6(�%Ìjg;ijHS%X!-g \>D{CũGVg}rd !.;!CAT_A* lM\#DnOo<ptzWv=xȡWQTe$aZÌ GCIV[i2_//gxpؘFߘBV5*@݉%m7T�K WN$TCgI'-AOݎ9š ":�6, ^JeH$p _ ljǨM. !{c| VذLRxlL؉duq�Jќ`4Y5K'2M !䜈pĈ# buĖQyc4`'",a�.gGGpB ��0e׭8 o{}%`p<x쑽SuQiwNn >x<T=zPuJr\*E!`0t:~@^&k] AV(DarZr+� zmM±О" p�q_쓢"�a4ȶHħ :)axfcw!N D"hqD|?aنhq(ǔ('ҽn|{}Mo?qA#c?O>-eg-,,(5XAHjS e+_#cMk;CF "Tk]pS;kKYMMC#YBvP m.xd 5PEW @F֎#tn0gR# ciki޸ɬJ6xTl, }E?�ymUf-`IEhG+=&jzwX _[- Ss?433ٙdw2U;ݗ}iLp&||xQbS3o~NF.߯f$8 Pv�ܽ;ǖ!9{|ΩT �wT3;X;!?�]\X393!\! `#TTDȃ?t|sO|؃O.k>@` Gb=zQ{s':5R4<4ÂW)ru]QnCV)\`%Ρ;ng}oLV9qj4+U@ b ̕WÉ;wp;N@�D@~?< N"f GV%Z@U$HRJX"`Id~\|=D(P=VM pFL0iԲ$ӯU[ɤ?OFV}Pdž"$NAe[H*lJ$)DaɰC d+G[+ب,Kk �z.H-db"mA"Vȥ*U1Q#*h GP+�YXV�.5JÁCT"��եև- D,D�q4)"i/YDɀٱxsw@�uifFN+A'KyY:B$z#{})�hQaI%9{Ny 3M%p$ !irKF!dWdJ@ .3+<_urߒ;h r'C|VoD'hýΎr5HFh.FizW_IBP ]^)' P8%, l,MuH( Za[163WZW߮BdA �zE,(/4Uj %96U#ӚOU| NףC]\;ߦ` 2N?P!ѦV6K&&n .oRG lR*bS @3J�monIv7v<'APbs84LK!7چ+K葮FgF.BkcBn$"udM*! MKc}D@j4\*ESlf<,qڟ/Ec:xb : IDWT2{ݎZK[R("F�jOГ"8lօ`}nz`~8R-A*#-ΌK,Ao&R#D?=%h ?95ʗMPHww$ k 5iƐ9@)֗AZN,' Hc%`Ϊ$-xt&@X� TuU?rK,6pt'Xb C!SkʘT4a/:!}t@;)ˎ^ 7# ]Ql,@DX˙# (�܀\T�+;<@a[vˮ~'4>4sG~ z( Aiv{MB0{`0}?lbqhT}y'u�0U*eΠu:^#X> Ϝzdit+O\V2*Xɿ ơ_ʎm/2V ""2ccs1n Cx #GĿz2_ajJ}[iZ)< Zu8]$RTqm i�g 2b9.Nˏ pZWݨV"6Yzo !YwF2JѰ*�DOnlؾ& ,S{oƧ};K[ls ZB<xJ4?}5؅ Dc8+kaF!noKQ��Y'fc7wI_а6$s>?~[H'[<+IAPQ!WgfIaC9YⳓSP Kb%Ί Ŝ"Nk+UÄ!ޘ̞պDӫfLڰbyA"DFK$�]]Uaâ{c 916po#&N"^@*1.[Y_Ѡ@6W+MiAj+bDIo앲C^ǯDJC@S2@r pK\_nuמXi߱#kk*\HD? `'b.L!o�zK+B_[!Z2PTcr-g>/2$,A]R ej<[DD `5fT>Bc#l1?a+lhڍ!,7[[(FFynRaZg~GrQTҤ`d^�`%RW+HeI`f7yj^PSsvnWzQFFѷfT�w>QbG%HuHeWEƬEY3N9j2 N0Oxgh9)D-?WD�ˬN.#"|!8;>'R0 tOP!b /a J!掇~|'fS/qUd,?!S,A S%9sʕt3Zpu5Y/e83&�=|#异Xwzs!p,9%.0y(\ȣs=u}upOD1DcL rΓBpy^u{y1{wgN=Tt:Vkmwn#� p Qwz.c^]{]|>b11'H߰W d�\l"d1zv'IGbDD92t80:Ns89a}p|TT)sgJz>K iܓX(ʻ�I{W#Hr�-4kԡ2Joؒޙ:e3,rLvL# u;'mT�X%rKDϋ' I~&jH%\X&VelA<֡mQINƧu �t z&9B?+KgŷRu>?s `mqw?)z*Ol귎3jK)#>U)B0*O=1Hd6-t\G -ਏ)"'h1�QޔT y'P@[$Y@K !"ɜ''@"q|DE6~pڝDwd:&4HIAk4 ]N'ȸEx}@bNB&l>UJh#2ǯ~1O]D }%*@.? Ƙ&@ "Z:B_QF7:鵿r ^,ZX!0^ȘuJ\>wUyD>Hn�2 G]]aFMULJ˴M\3qg69GӯcGO]N f4++]uhyybq $r?V(ڳIB|H M+܄ &1ԉ<CEf0"=_S�雦BFH-!y^ᨉ^�gfg AiJf բ�=qwֶGOqqc T@W'JvX|7~e%ʍ(FS'^nT�I<$[j>~Қ*즰s{.�!"BH[:!z~F0",3vM%%p!l34:)M8f[񔕞/t=8T'21B%Fp0̨4'$Y_ |zZN- ҝh !�֫HR=?oAPlߋwM8ܤZ0G$%"3;P\A_%6h3`I@+ofG̓$'IN &<n4`[N4 " bs]�r@3dgqR%�88?}>Zͥn 0b<:`g=|`9`B8Yrh0R0K:=˄P*zcQokyV:sɟӻN<8=<)VV{kv/p"< FZiy+mDm9h,@71P0 @Sxe`![@Ey`qxovT޳::򼀁 \'O'@�}d o(!\!�#~md;j벸 ޼0)qݲۭv n1W1�N AQ �`\~o[M)�(1m3sRe݉$]ce P5R֠LTYD^$݃I͟"RTldf12bXz/͍cq2~Cn =2@*U;0&x4<9RڬE(*1:BTዴW��"R |-ݜVyf}E Y%V>bzO}hOס=ͷ[�csw)+2]t Rndn—Nf㾩]Fj;!Lar _0N1´B2x~u({ȾgZ(Rif1ɹr܃Q$ U; &BaY[ݿO+)߼SC$V�!��cId|j7+"4a`}@CjyQ'4:Y,ek쩉U#YmDH-x9C h1BFSQ_FLDO[k!,TzẒL;-hQ!d>? ߆^~OoV2ZJy ;A;kxL7ԡᨆ)XVK1:zA>TЅ]J2*BB8J >D01*@l 2&�n_Ӟ܃2Dٹ7Y&U6vہD!�8FVCӝ'c]]C! 8JQ"i* RoMB9C4B(a}hy}y)ɦ%FR;Y]_f^?pRz]4K!MXh䥥QCHY�C̭lhPE3d-QcB\=ߺyႝ]GϮsOI t|.E8.iҦ,d1`MϿ}Hi)s kZs 4aDiI&a LXE%XR2n ].H:q?.jpqpX�"0TQ\!Tĕ fI !|�@APtLG#w; _&ܤ&30i. Ae)Ȁt7i G7@J\^=n1 P閠f&Bx@B�pq 8�(tXxm�T)6jV)r;] F3pC@ r(bfxTp1. Ơ�Y(kS6>1suZH( �^�fGNS{+^u}NwѩV1�P8"(" @H[taBp.x.XN\  !F QÔJΘe,"?8Nȿd^y>c%\#0�a,2\90D/t+n38{N>8=3[spB)fc@sg%1 �<Cx>x'AP)S 踮 ,a2R&Ps28N44T.\dNx9rr;YqpW^7<X^�\F)I_Dp.1 U8!i#v9D ޓo$lXTߑTR־U$=Aާ\X�fK_.k7OΆ73eȜU8^ƂZj_Hs0L!)I}r P;/o~yЩ?6>s?lz<ːS+Ȟrs#+35WN+1s4oȯ̮joE f$P^knnmHE<i vv�xz^US>ދ;�ܼԵ=E�0:5.=$*[K\"4:^νt' �{7:QM:3E 8f Dv&d6Qp �w[ZjmVpu?K']}a&iV-.RMNTX [m!YuViRW.%5@]EQ[ ;~tMѽǦR@d>i_μfJ|3ol$me|MVN T?dm-uyG(Q>®)r-1D9eÉi%"ޢ� Ą2�RGTXb$Mַ)z_L(ހWS3#%,Ҁm 1z+$HH/ -VhwXpzsC]%cZOԧUc}r au([H!D)ӿӷUd!e BcLX?z|νtvLvĵF a.E^ (=|ɄZTci^>\6J%<!]LI.햷; <t!*TDL!sa %s(E WrCkspRKGLMi I恺IV!|r;BFq[bY24PRMվǓZߖ_k K ml4FET].�"pϸ˘P�aDAA .g �� z0աLe:Әy7o\jmqtkpUR 33 ވ D ;hZq⬸3T mY]Di-ʘ"`uGFkwY4;8R,/ M8ޭ޺\/h8B0(9 cڂtϘr�" �q�X( Q3t0<G"2" "8'!p3@` vsr&ajx8\8` O>|#WޙUuWuuFwhq �)E4Q3H;5[·5Η5[Fcѹ"EDxhUw!ݟ{xY .ӭ,ꟙt!ID=Bp#/>;4!0P`&q9k<YH}oG!&"6q8!J�Dh$B!B c9FVjQB�I@ {f TQtLAHt2S.%֘�*WXYH@$7_N&M:V>:&ce7=& lwKh?Gx\ [HP)ݹ6,c�s:@b:gŊ=)~t+P>!<»QYJl$f2 he"xw^9'tB槾upEr$% R=6OfY880}!wZ1JA,\X},y+OnYo[[d;1:[C˔h+nK5mQ'}vܪ9-!HkGUtʭJlgj9|B"$}lSaQ !20AJd <S 8U&xUc^#O7@=t/.}gGT+sGf*ͮEà%g2<Nհ]z_Bi Y1zw%Xz7pmʜd/Nd!!D|Z>;;O~Pv ыRd[e5g5^ ^4)�PY6=ncYcGQNbGop�DR,+Sٞt|-=AU/36 mfw.)c=US$;!ei\˺�쬑b|>keѾ 2V }!ϞBg:X,zDuΉsSg.̔v;׺mu-sBT$J aYm$7k02RivcY;LѦVfxmyh7.*JwAq,t[ _ Z'i†"#^dmF/ t5@Od 6}fJ)ggT:AIǰZ!XBl;[#g|Y|;<S/M W U$.uo*  u\Z VL9f?X(^Ē+;ӕLrr nò hl)-VbX;wʋE AI$=H4@R&@F2FV h,6}pPgj:l|;w'㹩A/J$4a6u4ӝiHª Y6UӃv[B iAֽnB؞`ܱs?ֽzi+noG I B@@[8=5M��temCIIgF@ &T[>E�Iҩ+ !60h: )D" J@hd$A4-I$W$K4%e20ڞNY|ѣG'Pp��lª_wc5&R>L&'H � ->lgTQG# !q�1B *^d*Pc5V 6e#YCxT*j9V |e$sKvq'SImiw 4�ŝZeMY*_>cك(3Oݹ:Xjgy2q} ӚkˁM6qq+?)c\5ѽG>4sLI��=2x7TPƮSOB)];_]lHB!bV*Vk)dŸQWR$ILAb =˛q_wU}@bp <-/�X5#j05y5GEeLhؘi!}qLٕ̠~/T 7 kV'vQH),'kc)(N(G PRqTRs\7|O|c_ȏgZ9:cmo03=Hv�YWufMX40vK�Gh9Eme?مFPksm\$Ko=C[?`B;MH6 *-vQq=aDX8^TY(zqM�\TXײנ~ƮCjh:~uj!/�� Qd/�9&U !~_  Hi)!�,R!˥@2G^g٢586Z<A#y흝w{бS%tn])2j5A7=9DY9TR+Gl%ҞBp΅');xUŨʖcVD=-B:Ό# =9k}8v#Syadc{c#8EujڽnwB-qV媕x0G(W{ !ڍJQ$ jC4"? xe«(ۧBaLгS˹bWQbT*Zqͼ$ClyrU;%'žMG•I=i)w+}r{ Uv0| $I"AD4h݌;ɰ>\kr՞WozA_"hӍF;� d+t( J@҇lՃvQJ~h4�^o ׮ s��a,L>Ps\d2wQ) c" "Q �)B h4fh6a6@@ JDA&E8d"nw A6V6�I"D4TcP0  f�@"h܋9{±9!Ds=BՃ|Z� I (IT `B !tf7h4Jnځh)e K"o+j*;kWslAi*2:Y؞<^av|3Dn{8m^j"374$mmw],XмB륵+O>0 WGLҙ3Z߉Q8jc{|O!ufX,jy6ewK[@ s @_�>%5f$q FtRyrxX<Ȓɱe#͒ ڵw#�5*.Bؾ(#̈Z*=^{-Ýʞzf.D"T/B<,:ؙV[~PVP $TLcUrL9@\Uo C #ó|Xo[/B.;3qRKfK_1kY*K}7.nM+ ` I%Jg>\ѷWzn~$RڅȃQ#.oݻ9,Rv9d@�"ť0 D1Y-A2Tc3k5�͵QWyjhPݺێ�DqQQ&YTd!<Vؙť}GXKo/LrATl$I^){D?d"'ciОiL6wƵ'`|5˄{g K,N~VCA-g%bavή/v=  6%V[/yt+g'YW7V ,ܻ=ؽ-;T\Rt#^0S,inz_ѩ x RxFf/|X^bpޭ>ﶝOqm|a53w#wpA'5=,Yg;~ndj2 $8i#rN6Ra$%v9gA"QP�MN7֖r�&_ äUMMiLOμtb a[=󩺑($ Qx$Z͇ht&7\۹28|hhr4$ ( $�!QV )'%`MA;h$\ڄBx< W//~1wh ��A B ĹS~`x+77aw'hq$D.qh6Vl4F#.,,φ!ZjfM(" "8x 10hHL" `0xL�Q B/F3lJ&1 x! @tI: JbFS3>0x$^COQ2C{oO��@(Dd<hNOq. V3�P��eZ[GY6nA-crV赽�m .O��c6{GHw|]14&QeO+YX�(n݋Ʋ84Di\[#;ءwh%UUE!xB-bR/6BR 8&!Fռw&%\ۧ~0e|o,l4bksu !UuJxnٔLPsN#@vQ=~|}͐` k&7Q /(!lXP9# *}W#όx & FdY+[E 0[cd8<9B lOϾM/BzBu߷uNO~Q!#?\:/V $D## z؁mo{'\K4*6>%߾ghsmTHѧjQc%2s ,:*�rg0ňrR(l<56y.Pߙo-/!Jo..K΃G҉W9h/7o @\_KB:{fE}FSn>\aVv:_a:}jm+J+FY\Madc);K!EXy/7$.n?,kohošGmoEE ffi+A� ܻ9,Rǀ\1e#U iٿr={d֮Hhˇ<dW<BtBHu=RǓ! AQ}f hc ("|䩅>qOI2v-F,~^].⃏ݺҋ"!{� \| k !#uL;Ɠd,yn!Dioo˄`NL7U+ηA2ߍƣ(trŝQh)GHΆvTqeoFU*GO�H$ݼsuF*m/n|koKK8;}Zo4J x`"ùU;=fV\x5qD^TvP{f>(@433_]( *J:}~歗.ȋ>"@ϔ<y{cI겘U/mlBPΡ=:?+>6qNwsђEAY<A=TdI˅I=3Awk47fڍNZeɇ88r|q,Uf]m>UK-h!t쌟Fc׶D_nM4v!A}dBI(D (Ad14:ͅSFsIi]뛛]p��$S |J'dAc;,Ӽo:4pCbrΣwjM@:Sؙ fg z~w4G~<h G7BAfj7;3hf3 �!Az^/�  )!!! CA$~w3uǫÕ{;k`0$(ݞn6&I2<DDQ&bfX+0f>KvgT㊩. ?>��(q)EGzd*޴lɩJ)8N;(�!03ӜZZmAT*Z\;rD n((En!Ί-j)]]Xsv+0dcJ̳䭥,uH%�n^{o/oኳD=Q⯞<r� tß>}n:S,I B*KW%QYbeks8CA7yG%[om\1tZڂϗ_݁Qؕ|ZOb5~{x< ��.|pÅpxv|ffK2PwUbW?͞{l]g9K\sߍ_ަ!|#n\}B?K^^2Aǿp*gNM9T(h{/j�`pg_z!|5 N?<uX]g+ݢpg2|왹W(o|򧎕 ͍;q}ÇV1ZoN=8Y�smPF  -4? '~_㥿jٻ,KCn:*}bscuˁDGv?߼%KkSl(= e.�*Vv_sGdO*z4/mL�/;;�g[ccv.�wYmJGhzEg2g^xbﮮCX (P9T$\u6j)z (>;eҥZkwGE= pZK2cV)a2ƃ^\T ?6K>;_z7=<YC D07EY}8CLDx,su||.d3q`=r|r \:|b߼H6ew͋!xLRHu{Lp q&|Jbn 3ͼʆ_t;o @lɳUP/L용,FUَ渤 /[v>8LuwFr6К;\qmuG;S3'`SK-Xc8^O�s �Йl\x|akctΰ)J[l}A #�vE `D8|l8NNe�nX$uY-1:bdD\v8n1@$$" HC"G#@ٜhϞj<8@$q{g}tc~BLz=vLX)A;hqt{TM1 nX}w\ҚT4{ 4Zh ,�tR&10hD6A6[nA ZGs:��@O7w(G+˽핕{wV6^88&C&$@F%aLe(e[0h4gf[g/}pvzz2zhP3Yj0 `*2;(jj1h36x  jaC�N oF}cYDw:)OMaCgh*<v{rs6aKaI{?)^XշvJϟ?`dycY'Dȇf_S,< 93YT)aJ'ɿL_odZ@D8?=?>2Z|o9R:TeLgd@6qMn.vP"y0iȅ _-{-ܽQ{Z;Th.KWԶף[/|率 /G"ԯ<sGph7xhd?SG=]>rD|P~V4~*ѷG5ڌѻ݇?}D�?񅥒oo7"M'}#~yg?{tH3wuCxɹ' #DpmCRMA|Jǿxj6 D_ܑ>f0߾eY#O" ڙ9n^"/_vѣ?{d~O.*ݎTY+o)Jb e{#m5.U-,/S!6F$o,;UD^`B&m{tYE2�rL=#`AWxԹCỎlU%MT[;TW/O)yKcw+w!rw(4CO?\U /chr g8ߔLuS.y//{c@[U6هg>Sǟ<ID+wE!o8qm�0^\off<E n]٩*��ܸmtd9?Jpi6wYkWeL{-SMec'Ӎ&j<۲NOk�ͤzDw󢄱P|,35Jcfo6i2mo<8˵J`Pt#g[>xL2yG\NX<:q8l ՙl,.<~�6BF%)_CqG&5Q9<�mIX}3k+ِ�Ih4V B'I`<ƃ; g{:,ol/a$qaNL3:H$0LVxg�Hb&I$ ;[׷WU7b@S@A &f`09g.Oo;..<&A4[J`: y;Bk'?4W_|_'>3=wC`q8'�h4Zٖε=LIh8 :4sN4@6h_l|o,82;(X^Qh88JD\w;;lͣr2=(Z բ/]KDL>w $j* P]ʤx&8ֹpTjw3C1YeZRnjI/@6峏N;{Go"bMj*,΂A @ˏ+:|hu^O<7G~<xiDL%b:v6# 1A4N4 j�'!+)y?ԧ3ŝ"u^�D//947py?< V̋;ml YW|mvv}N V1^oCM_P1$oh =܂D6 _��hA<MGjx0llN/+*qMo6Cم]U[o&Æ_:99: )F^ Cg?{WZ? _[)yC{#p !|L eZlBH,Chuy?.�p'5 y 6*m _j} Keק.Loz+^˜+ #>ڜS\8C\C(gAi)#3Ͱxs^ڬ֕<v>X~n졦G�:@vC:=Te'?;';=_:s<q^Vo׷$HFwn^ULr鍲Q]h=tdf9?Ca֖Gpd.8>~7K$ɏ-uSt&+mg|AP-H}߶nj>0>~V;o{xd~0)޾Jc=(}ѰdCOOL)6<K92:U[{0}j7.] {sHf>Tܾ-[Ćڝl[ Gu򣹁,8޵^Y^S)nu-gisG9f#>18Q%aNDhoC3Ry{F/mF.W{VХ|LȱNBKȉ#< c:<;"p LLh0 xq(+N=0SgIaxlY׍[f6yFycm]sU͉:�k%kU&RG$h4qB(Id(ND&hnkqcN<:Ϝg:|V, $D2H%�b�@6B=h4"JmD@!j[ZYޒ1z*% �/S? dHIXR$), �6 h zP|__G?G|ԉӓX턶M@(b� H!@fXЈh8S㧦Om6$M{ԊX-8NdOuj{Rh8Q4Xpt$oyZbj"Ski>˼?^Ȓ乁"vX ;VL; ^(5̂ ,D`RdhF赳Nq�/bRPԥ#m2s2XJ\n/ot~j&Ё+*R{lo vjex-ƨ#DA/G"rŐBUӝ0F*t1!Zv칬/q@h~~G>7.+' И'Mfk-b(.~rj3N gs~t3CI@.�y^}N RQ4ꩊ"O}R菾qJ| va:%C301-(0E$koJ6[:v @xmR?|gTI#Dt5CJS�GIwtvQ+_:_9h#�S/s%JQjiI;YBO@!.fWNQv$85cOm7ܻ<B�{RC_s,5t,ҩ_J6Tű|k,bޕX3VyK~0^q[ @F?to݊,y!d;l7_ȉs`$9ՊXlsEC3?'¦(4>+`�+osH_sAW~2eU1@KyhCJsQfVxwB#͒m6vkݺ�hԜ^ b@ݭ$0;R`#�\-, q{dOtq"<qnc[*I8%oxy% Z/gL u#%!G-U#̅)s?搾j\{{\T;>`CL<df#NMBUs<AbS%+}]nG˥{?-'ȸE�<2ćlWM낁$iǏH~,裪q7$6'}'هfyGggLY)>}4H3�pdH *"qZnwziD$CG;O=wDȨ ?&1ݾڅvIՏL褔1q| S3?qt~!A>u괌d_=Ptc$[jdeiG+u獦xËK'' BA0�cZ,Yźd~ҩ3f�!fAg&}hqthmYr+Ɋ'\_/8yvf<B (=IJ3f.$ /L|G;`iyVtKJ qįL9At|W.^шo)G+'�LF]P66D.qض^ Wf�!0(Ibe'(Q� X(KA<q(<S8󁏞Y<Վwb8J Xe)樳�>�(Tv[WJAAFl W+ww= 3'~˓N"9&ѫ>ǝ̣@f;QJʉ)ptj# s=2=O7G(($F* J^ox43^<2q00Sx費z_3yV�HĉR)3-J� EQ4qE2$w>!$a h~$Y٥ ϶@ g+ի>{gE:Aov!wX`U͂8f!exVn*W#ڴۺhuTlg6_dɣO'9ff[|.`I�Gw.ڵ8l#d#.Bi !f EW )qJv*Ԙh;Q &^86O_<5o.~⧏J]l|J\$nJU %b{r b|'>K_8ŝ>}'K5$=l2rt( A&*rL&/0Wӈ\hWxDûGfkBOm'?>7+ B*g>T>��~rW#Mpv+x R5`;| T:&�ZF0X.'lk^{wهf~?4G\=/+s䯾G !d!DIZܸ7z͒L6s_<%23|KǾ_i~뽭ZxaL%腪UO~ts' )wsN?%\!R6B�'V Jo|\Öj2☲L F$ps헷w҇NO{ 7zoq~-?9?jI6ʄ[ٕ5e$m)N畣g1 `ʀp]ң͵e1\] ƢCՙ6W:F[].2534Ѽ !!�c?Kx f"�jǟ疰41wVv6c8Btֶ I)׍<B. 5i0p#BxR9]p U_8Ҷ8;=Yg!0TkUﭵ z}hOҹg f~v8¾7!/C̚![ЏhN4Îd&?O>.N6GfJ k:wW`>zൠ<n]))�A=s`rKⱧ=AB:F+GNy 0s>A}NHg.̢ jW41>…ԫs wFriN wi#!;,+{ t0ij=t쯣LÃv,Nϵ܀&{zSUO&KWBc|" XYnG'<B{=A``~pD~V"L#'S|A9&Y+5k.L E1EL`vZ sSe,''/<j樷3fYdoFԧyDL5 q#Dˆ<l. [_C BB $ (@ B$S2u0 <ztхimFr�"=W v:BBfIJR@u㜴OZzk. a#l5v|VέL�(�0''4*&a"D!0"s0Կ=}٣䙏~O9r`:o0$2A!B (rrԙZ<:ўL&�L;'a_Cdd3Mf(AAQ$Nz0!. ǣx<�Q'*?]ksH,p3h);m">`+bb7,F԰Qgq:YL6r| 6 2;g9idYI�zgo>%Ϙ ;O\-ܽ1\n.i-<bU7v첽jrꍲ3|}=OJuRU7/!? uكy ۯl gģO7xhC̑ ׶.cP\Srx}n}Otlį6ƫw+wn \:5qX{X{hgjQAWA/A>л!6qQqlwW]o w|aӳ/ҩOԱe83g&/<1[xþ U9r?{t) ]X7\=Xտ{}$tDRghΩZ||kK"WBsнwmfStw;Z[N6l99Ԟ[>wcuҷRF kX6;GNtJ䳋=:Z_noi-i/++w/~u%}=xeE37WG±:_9݊W+{õ; CKííɩ �a/ @&&~Ho9[kk']#idW@C:n^K(߿tPLXm7VFFHnn/J kKzR:4_bN4khʑo7i D:}+"Rc�p͝|dHږLA tC cѕۃ7{K'NN7>'V7[pL΄S3晇f*7\}SG-ˋc9*ll_-k<5ջojibԠ`6/}txk}6^_|kz9;ܕ*|]lߣƥS >phc}ۊf3 ͙\srnM #֝j"zQ*Ir-XFmf{}@9|j|sn^^7L'.YGD+l=\/�!kTR=~f񉝭xgs9nw\sj99Ө e3PEBX޹=y7KX*;"<'7.m~,yg9~zrg+nw6ƽnSLsbjP;|r%S=\K:7;�"JIWܪ\xtbPuǽhgglӍTcrz8fw݉ƣO~7wxЋ۝`r99ݘnoHhq{sך电luypĤSiG:9A/bv'lN%w"܅s5&]阛U(;lsz̡_jpq'D=v:a8uuɕobm#9xBڼT%*Gt,:]rY$�[%Rq.P4Q2Nb9މ)j7&'fGWzZ2l,LkOMS"dBE6$-oH !"J$& aǫ" z@%Ҝ^*ݙRJ)%�ALa{{|+?~ 2%V+�R'`mW/ݫL3H[@<(%�lhm8utؓO-[/~ŷllZd6P6[V;BxG �"4[9yfa, �J@yoڔkFK r^Fq4N͵q\{Z iC$bh4(8AAQBт@rg|rugﱫYsX7Pf[+Ŝ;J埾0`xS&<',r|s'L8S]?-F,`H6)WAA4L'~ydlSg?o~왅mK''WV4/}k]Xw%u&>#xw3#;O|"2;ߜo/= =v .*w?;mgD?ё.~ /|Oj>tE3z`2?Sz_(ٌwn.xxsxc SCr]զfS33fpo?oƑ(<@�W~/sQ!>Vkvv?7MɖQ)\_asH+x5ۘm>SX{{W۽VC` Iw/]Oҟ]*̊K!J#n}|gJ7@,X:Yk?_ݾ},"fWY {(=j2YFc5Ed~% ]zc+NH^|eSߠaQGۛ"L ܡrvN8F{~'TΤ&j4knWݷΤ$'mXMlB%׏j`%3^~Dygӳ͓'+9wu )[F2?X?ܮ\U:e?3)жg+}1}wU֋h,/Hqn N9u.woH$-B;1!‘N76b{~ Q.biZd߸s̔w~EcyZWiFv!ٞ[lN[,/NwKoDJλa}eX �P̷fYif3 ۝p^"y$]~c㑧58К5ߺ7YkS\1~G:;�"փOTlED3QۤkH?i'ٽN ve)KbJLkHI�3J)djH�4D#h67ģ4'շW׆w֌A%R&dj; Av){�6 i v⵻Z8 !Rk�3ENKeu81_N BЄ|GfG/ygN7dg(eِQ2Hag2]hχ@T) جS~jE@'y1 hr?4"2Ń`N["aJAFͨ)3�W)s!e�$+w$1]'q Օiiq{0w=J#E>cJ<KʳY -%$crA)im,J;d�k"9+K@;A_Ym_ 8';pwz,֠/|%7֥#I�`~.1Y~>۫/}OV�ٳS#gYYTWRH߼uQa{hEHk/>PpO �Lߜ#⢏Sױc��CڡbAn?,?`?-Nzgz[WI[_^{Ko[k;<Wve-\JyO>4G\Z9: 2ظfﭽ{Z}g k(<B�e| cnooz.,f�[]R=[tnp-.7ji; A?.&&Ir4jW !�yCc]5_y*L-iM/vF;U'*GrF G�$1[+2yt\=eίoUlœ6tl Dqێ_ڒ.Q^ÕG?ZVS+Iѡ7ȄO q?\/n*[~{W܌*I�0g% )lЋ_zhcy- !54e[k;\)@KET$om&Vqi{Ћ 'f,g`Gb͜QM[d MƇuƘ@/|@"=+IA9T"DBKd` #d<{GN<.<ujhllzÝX�")!!J�H!u,}7@aKo\3/ӧSS03e��B@ �� -X8|g?~]9 1�@N2NDphqrP--oq 8?X&0 Hb4zADaݟF5UN̢8V؊{>ϩؽ1129L �o�6׵;M"3$nW<;KcZX67A؁* ,G{r=8_]y,\MUɰaU);d֗(4o3`Eu3O@�nam[_A![b$kXcG~O_)_QBLKc\-Vd4CN<'JFLqFbT9`83]QF2ԳVX/߹}\>&wg}V�ۨ^0.חWv<KQb E{{keRQ]YX>C>{ollA߼rg zS1��\|}pWO]+�XYqfy{W.3<rIf8( ) VxԖcow%~o'fIOcΈ>4YN_M,[qP:\J1CM˖8pf|C�olw%^`v](QIogv~T[+=_vwDy72M]@y !l/iEou>mUfvw*j'R}QsCSNmo_ΊJWUYPx΁JbxAt:�JDUrX]mO|iЋmF2-7 VQmb#܂r<]-?uZFcVkk='ƑLMH;:k+đRdɹ5+WYqg)G},(��& ƻ>׭b"BM~ikk}6BXHϊTф,fOXH�k˷0yhA$G՟<au Z,1As8`b4%x7</)͡_9 V7saR#K'}0C70aDk1Ԛ"vQѩj1UH@�D� 8IѨI=O|]x3 '"w[1D% ! DwVO:h7$D F<[ݷ__\'c`$ FyF{QʰA =~܃,/ǛQ#�))8�ԚS3sBJ|rh;xg?荪1�q ~o0菒�P&=3UN=)kYQi h}'*)Tnvwy`K3J2Ջ@ L1sױ?r씊0yjGf/�ONo?z~ݰF?b3,A*W񅅡5 aH/g7ǿ.%"_;5T&M8PULсL䨇lZvKxDp}KY&߾fkTkdSG&Tn첱cU0 , {_=_!P=cy@D;i~7o]/_/uL*DXKyD[JQa^w3{_]֗6jɮ9 �;ovf-_^u6{B yb WmNE#_q7ݯl YPVBJZB��kBC)<ep+78 !Kّ>ܹ.߸ƺ`+;nQ8v8 �ҟ]`9~n$pL`}/:I+,͗6߼m[qeQP.x2\\~mr'џ+c}BLرI)!l!#ʪCzB?(,s� w~eݒXծ'ȆJYDzxngK]6w_rr?^{g{NPf`d2DjxpA+ *Y a {WO/n߸ԵݨX'X8 j&~wk˃} o^n'V`YغA|/uu' :l'6z+%||4ǀU;sΜg+GˁBa?ze%2&(ɶNt}XCXg6dXO0e7ܼThA;\;k`#,) X\ԍ NtЋ.6O+'XU#H6/]sL# <1$SsۓD_nu.mP d B�t %I1D"a#LFq<Ѱ?6I Nw{sSxxhk(7׶nuWxH`a  P$IK)?`46{y~ˎ79PD7(l{_gg1` Hxև;|x%r 8I"V; A'뤱cwI 7O9Eh4X!Z$O)SE&lkMsbd<D(<$y&2 Yev˷HZiȈ *Yٗz:ɮȩZ|pkiϘSA�w͵{.mn海 4-֫4L !D{}X\|D{|={Im4Vo;wZtkcFdӯh>W1+ OX/X HJgslanG\8=ܭfo&c_*bl0C$$#I_?kosbUN-ոm %|oZpv7?\-paRvL}L�j9֢)G0)opKxd@m+woޟZ;fIV0U?GA z׾Ej�XV(;BHI3Wcg}< lͦ0\gŠ} %vg{^ߺއz _/MiC7z>ͅzů,eFS#�\s9dkegm$_S9[c<ɛ?0)1F!XD%~8G�n_}nGrg}Uhe@WA k DT6JZ6J+^L !YW+[�nܹsBxߺ$3Sv-h.h;vw?Ik/Z@9Q'! l딄z,�ۺR�g{+;oz97= zphЋ_Ѯ]~J(<i\M;_LbyJױ|=Z@H]";lV�%sJnj5WsQif^X[_\JQ_@wwyu}?kyummyE {Y@e˷^߸/E֖VYQQIsc-_ V7. C^766C0�㋯m  ڞ`sCڴ*;e,|Ɉ%(x0 AbzDyC $D@@ ��@�D"$BB!4" $0wSܣ~SS{g֝`ԋ)B"HU&avвF�0nwDKJsk5m%�R �L0a~]TzK8{jYkbK)cD�333GD흻vC`;h6!PLL6gvzlH)H 2MHJ]曇ZBDEriݏmK$ F �FA4%I y@7Sx>7o)GO@c[ {2=_/[`Npsrwħ]K}}`fllU,Ǯ5g:QE&5kwF'?{xxѠ|f_aTAa2s㵸˾̭= 챶љK6&/0w~#魢?.u[?ԗf vޤgfS>+m-{ Ypݷ un]{.~%H?7~Vzui�ݹ֧c]=6~k兯&1M͆Eq?)* Ol_\~ G|lvܸWl8 MeZ;j$Sv`uz;W?>]hn]mqȭ7^ܼvC^|9{0yk~'^y736ƗoO<fPS?{~֮^CY(' |/"�ܻ5{ÇX#R7^Z'%`==DfN8!]ÂCLfF5J{*Jq$ۑr_<r|"ڽ{#}OZ:;?ڝhrF'A?q| a~oGy?6{QrI߼C~4~^SͬjV+s[T�vVt_/>6+fIIy-Sfnvxm{օ'<8[U6z뛫*| D-䵡R\"qG^Gvgg&|Gw#4ȭ;\q9VLh(ykwO>0}ٰ;S]|mc}eTo6+�pC߉W}EW[���IDATַь�Q8e*ɋX>s"Է7GW-B949b]k~zg9A|ʰC5 92|rܡv=v[׿qP6?iio5E,~6׆z䡣 ]BHn @>9/K4,EUB_Z_:5=9ըB V;{ D+IېM DD^C n:6I|Y# (D RIJ$H@^@c��xМi~!<;5x}y; )[N!J2?q!�J$fjt[73t՚+^-[3CM03{pb*4B1l[9;ߙm_?\ �@J h{KIII"0 L( CDh6Be _Yz¨L4_HNC3tşUgW:6 g8Ce*#Q;aE*EW ?|>ʼnɺ][ʋ_[k,fW$l nWeA!q*ij=|j%!wwt"'x@^z౩~蹇wowzqKe9P1, )T>ވ~ޟ~G=<lՍl^te4t=$О ޡ?}R%8*[~᫫~v'f:;[7w7UvЇO 3֕?'U|i;|Sk_i ]#H�޻t?͛/Z{Gs_[N) lH-p՝ot}f-,~J{o޾҇2IW|#yN}|r[|g}<YΤȖ# jeW(,WWrl9TN^Z. ^ј!^+eczo.{xzvj4Ln^tw*魨5*ʈޅ wGgY q9ס. 4ooIBzxIu9kd9^:Y=ٞj#`4/gW4+ol߸#%v~DTַܳg޳MS{ovK;|TPD|7<M`'h$_;p𱎨DRqFԚi墯(ߜ[;xo|`N+*%ݾֽΰW�Z/.J}gR4"v{dvd4h\}k.^j9s_NIB7.s -8HpILپ{wCG;A4_}gk`>MѮ,KaY w<8cuV<Dcy}QND7 {ۯ̷N=0S!gktNw;>sJ>zԤ q<}VVaֺ]ۃ]<L_"%+as,{U(zѥg[&&5O^z1E-e[m|<څ_WgY��@JA6HHDAz I R8A$űlLCa(:dʛˣHh4 la(D]&q=h} $Vsr8-޸quٙ4~c%f,P vSyZiD@BT) مG1W-wSFĴfFaVvPk@"H C[`$\c�I2h(^60징B-SsV^*sO[c;ivRWu?Ćxyʊs*?U?-! ͂&D8$l5wJ@SARFLuM"S}[`rVc@RNB4&)b[f =93D{xg+ZWv|YyQGH>DcW A tEC( <Be#G9Kv�v4$�An8 . Kg:|sz:6X-V n]]{g=xPPP󣑔,a< UW2dSNxP#Rg:̩SӍD +/EWk Ē6hwO&GҊ >v5[q$M6{0X �HJe^&�"Zj}d̅Cd~mo7^}+ed"v&EY^Si>̙g[I "7{^߾xD^D}q I$ g2!= <&B(o|*ї#9c/[E5%Di>yfc3g^8!A?\]{{m~̧JXZ0;8("dj6<ވ`4Lxfŝ8B+J+�9?MN~pɉ #9$[znEb5 .q�j(ɜGHI C24FXr�@$̦~EY9y[O?395lwnHIAFwo]̡{%`}H@1ɮ!cL�DqēZY$8kj%0(R&PQ/zrOׯZm0+!DѤ�)I&^2YE8r31h>dЋߍ2-{( 5A[e d֣,MII'EDXK $8P\"gɪQH2E9`31.X:595h0ql dK))G>0ܯ"D %PHn4GONj5ϐűt{7[cG (<�LbY!Cqf)e=)R)O$%$?* l~p䡣D=~ۉQo'Z;eUd>G?:"Rg~j<,% ;rTW!P`,MWY2Ā<Yt?#Wv.:ng9@'bPkhgfl d<IhЏ VݭA Pj2D4CD$5݆KM*Y.K|BٲpBFdk}vo9&i[H"xGt!�(evE{1ؚ_lw&B>p$)~/Xn"n{}�uÙD@2X15טoO6 -o"'8 Y[FGc3WU DPD-R7ƨĠk+bj93L6†pn$c;[8;>\{5dL^$( &nџM#4Bʀ v=1l<y2 C)e$AH)` QXDDBB`(R8X$càBIB b F+$I|g&w7lFh5 h$ BfZ[*KJQʃ D@﹥Nŷ\<PRŲ{1RbV{vh|#Ih(cN{ا?Ї> D-XK+6P%nk.-KHu\A�@@u㕗n/:ũ}rO.-4$Q H B3&NZ >}yap6;*|@L0H߁W^@DAb͋!kY={>I($D(1"5[NݙhZ-ĆQ}FBAP6OP^85z`nʄ %$A2X`;ObE°]5(jtEٳ,'mmX$ଶWs3N7dB+dlOQbk0$:摷yL 5Hs/!.y{J6 "lZTLB\{WxUunVA>293L#W0hV<3{&wA#P<$4[Ag:l(QW17#Bg*n I'VnFyWv5Dg}Aava?bUs]��aCLLtA?!S kEW%{>mJ?q Ag*#9&q$n!>`:3푕[qګ h6Eg*DA/̢Y=5AΫD]nrA+$mn0;V{`7ν=#ͱ͹zBsB/!]?!DJ@:AӠHɖ: Im5+¾!L3zd9vtR�Hٰ(7'Nހqs)tհg +C<.q�~4{OʍnlM^$v OЫCw- BG2'`KH={3s>w~gl.#~gP9:$xGYlBh' \ä)R_ty?Bj"h$(]N^K9Z mFlj}/[[9ާXAX=AS  EP4v S9]!NZ~:aC L"GR2;% }85̵J#y$#/r(r`G'($J�@4d `LH0X8&$Pa@% LZBL6Z-j8lE/זo\\]Ef@a  `2 &@�d% @Gq1B'˳ bKn/I�S)i|"ANcss[lN{;;O~gδ&Q $�$ÀkC_[~_X ԇ c Dֿ/|hؚO}?rhz!)q+h RB8�5{X@` w67^"4)l_ }MX�IYoH7J) Vg=1,}iCЮguޟ�>sj+c SvEA|卝5UOaɡ2t@@5oq*^`Q+ ,ljD<g8s'~UeXt0jf;7Blw4bn]#=tjg$1zh_ V&S}.rwYn{Wq!eϜ. ~2%9anۿonk__ml6CHYr�q<L;ɠmB o2g&Ԑ5pB4 ˹rrƃIS >ϓPh 7ar !61vh(%ꉳ]>5=DFNnzˋ Km#frMGCw$Rzo|Wh!B8M�?q$BBJGո; ZѠ$Q%k!vIEʱ l" < ! "+`&A&0'AG3XYGHqխ%V\~�dA5 #z&RճIB+otU2 ̌%s+WP=;`?$1I4V6$p*llrg|)}ώF3]hm:ˌ)'�I,LO!g}z\iW5~56 %$Ig8!/5yfr]$>"0ѻ<AA4\~6NhLI,=}OPQF;Q]g+]L DcIdy|jr,QFyv~q#/#`8DJBO}y Vߑ}@.-GILqDR]`!\4VXS6wPQ$8~+0c@QnS@N}�PM1x,eBd@-]:P!-l}_u:r__xEq(@ENuh}ȱ̌"MƐ J$4!{&�&��@  �Q�""&�`Hklc5JF[kA:v5A#�"�IIG�(D L$ @$DB HR#@eeS|nM1_tp3vDL(wFrԵFg?@$$vDD$Xڝpvj&\*Y7h>gt"`Z=/ʳ[OSٸB� l6PЈk_xt豉V+@�1Aj lBr?E e�@`b)j D� �p{'|$i51#fEv<P?ħL2b"eGQba! #PZ:vL&5g;~҂OxW_� / `2;ȯvt^`B Ec%zō!OI~iݯ]YCIv /tYZx32^2gaԛE)6l6PaE'�WB4n8W6.B|WXC\<XD{v[Ϳ6)_Izs($َ[w+kTq$*$g#CMG QGB1t_m;I+τ lABq´C wn9am([JUͅ9\AQxuZ$ϟ !{,bYDB=ARvw !Y,, o'Cj7t^kC$@�t'Dž'Snr1CE*0&=gcUvQvEv~K.Vύ3:'=Oޜ2~s!ŶDB쏵If%ɘ[ٍOjRY,HGV#FUrF,<NoKI+}�԰c peWq{r5|2X=)�n\BlBTW+ɗ#qhчj=" aw{Gd/R3/(Q=bc)j3@ @!%(_6⹝oaWTvʑU* R754cscU,5I6@2)GۊPI^m^s˃`QvIH"\\�DD(d(Iw"�@(\�dA�"- @1R�PSsd;hp0FqHA $ 0@@)IJ)A0 @w0f@y�O*_2g[-Zy 3esbqm+q} "`C@HjѸhc&["�%@%g o7zܟѤ]Pu@ߑ\D#@@`4A;l ‡;rT @^(h}Sj*�R""A( 76l_L4;4'3 o5! v?l7dYR A%I1 FTf%oGM8O�vʬ6s kr8ru=A;hvA;hvA;h,?֍�$mYC(�@�HjILA""hSι֫W\޺<'a+MuQBH DJD!?8RuwǰA{ )8LV4lv7m޽9 *�,.kLt[)$ Zm<xݝo4hooM n�dkg8 Ly!to'$8 fchBҬ_`y!TŞdÛ*J@q*d_OWUA%sjz! Y>q*U0K#Χg<6vH 6 +É.mdN#KYoTE ّQ|)l͐IIu@+BN]+`]$}0eGk/p07X#5 'ABHWч=P`$p+q՚MVsAu,NǚX++P916Æ.jfZ,`Ai^Rjs{Xq72g@Us0'8N*jB@#�mP_%vNAlum|oaKFf%ִ$[r!nA!YWGT+~m M %=,e `@r[iXPV(K N!/b"-ABׁJ!F!^9cs#]as쫅B%=X(s<aA2B/ 4$X %ȲC#!pej*IkX3[N[qys5 l+C3;!m !x&\dUy%Gv>SvnBmix|�R;_ˁNLfN =&ls(o+egMBKS@!>;?C@WBc盰`\Z!C!jPw,s#h.B !vp!Aioi5^cAZV$bDWOZ�2#}m0`cڢGy<)2\0OX97ʯ N})'e> rl- }>7!7}LJDm;\il>1;I1ч9Ȯ|ҢsOX檣]9#f#@Գm QT"=Q1}*G!|v!Ec|A$uub{E\O}r!Ln�\ኅ8cGJUc0=A}]B#% v|$Dq?dҚ?vG&7kOBєHIjv:v (Nc1BDB"�nA;h{iRF2pܼʏnݽ *ט�LOcOMlfܚl||.tZP]tD%�Z= S�HFD8G`0QY|w !B 1 N iAeJO1t^QX׎sl72kX `n1Cy^&m:]ń8 hV>6L@ uK~Mڣ^ىy##Vn; ;!`!Jb{ !# dHȕY܉u;h>Za? l{8iBrRt8Xց<3U.X] m.aA+.<9EqR!9m m>q]Ea*gCoV2$rdvQe/ l+t 1㶉XB!Elv`@NJ!hKTC9' !֤1P`1gC.GHMO;,sH>-s:o\ x/ꩥn͡Mr`F&!a=<VXq. ׁQ!$?J2hY0}Px!l*;Wk.Y+e!G8$9#̓'B!=A6fЯ?;kɵ=A� rrtLX=kAy{V /0﫣󨨣_@ �,}c{ ;!0>s{}cg됞5E_8z+=WZˡAQ%`AvHorD_9¤y9 qcA+G[=^x-(H%mT9l݀1ى^(G3!擣D?�!r%PvkPkJH$q$%!f-촦&[Nwv(Fц LI""I)) TO$oo h}}Ʀ4!`a`-pº;2F@,�H"?FB!H&IEqL896 J\TDWߗf!bEWmcEBl6[N83>rlvz{sdb㝗@@ B\[]w77"v^^ hOw[Ӎ:Y3*.e"e!sݽ9@%% "H*q8)\|&gր6C ^uES7rSlke|_Ɲ.[V[@7 rh;k{I/pSݶv68.!(,U4̢<�qIAvpZ,Ķy3%IǨ3<iMuzY"nm|,,x ?/ϟ'AzVnzW;Kl鴙%6]^`6hy9bOAt+7p;ZֲM-C@w%^~iY،l8i V{Oou MC5BgmJe'hY緖۠E=eml"Dobώ�Z�SF !5FrZ{]d 6r lwRVP,T( 81!`d7 EA%B <BMa#BwDI_=)oLY XPCsdio4j?gmƨ'Кmdq,N !`zm*c$k1e`L(|ܞ6|�ˊa|жG'ǘv@}`mnc糍,&W#X,5 {/*^7Gj8cR"$FU!J3FӻD+(Gt(`j>�RBϲolѧKታXȺS\�Ǖ#+G܍rtFb&k+X(G/pd3dK9@q;ǥb_vr/.P r| *1 mb=x!Dex[b'Şgmp\#�${|Ӟ`Y !$c!v;Ȱ*C[' ' d;@pR-,|-МbV=A;V`V*\OwL.ve깬SlKgXQ c1MŖfh`zO@JH?cZ<Ӌg&=o I$0 #)) &%(BjfZ"2A 0 D[4&+wWٺ}}�RGH��~FQ\  �¡#9ral&5& lo VwC)A4Z �Q4-D`FQ.I<7l b)X\m-]kLD(e`vAQY_^V>@Yf'Rq,תja,_˺{<R?kF2>(0U-YI[lx%y56y#<ax#О9po`L mm kg& $X4S@Bs*e6xـv ܗ9c Ũ\ Grp9 o}C[9!9 n*`džPcFWS~}-Qf9laHX89P # RTqB|@*ˇUL?6J ʺ HC8Btrzs /lY: }#ZfjɩW/)Q!Cy,gY֙FA|_ Tf("հWn'B<(@wA!kP"#ǨtR!uƣ!E_FK͗>BP}H.sQ Bp-#/jtrF9. 7 LS:#)*$^rJ#`6EG݉>!U˄b<Il*a ^Lu&B!@#W_lx@= "+ʱq7r  Hfr�/V{F2�A�mC] }! 2I8pb.Zhv&(h4z;8NLoHbJ(@4!Bv){`p-?;&IB$ l4$#Dĩ(d `">MW`!@dsrF>Gst ]o޹#v؜�'3\#l6qq(FA׬ lTH{YZ `?vA;hvA;hvA;h=n(D�B"IHW" @`!&$hlÉ\xÇg.oݺM4g&s` !A�U�$3ȿ 18IIA6$ hI2^}G=xCО � ��@XgOT4U*P�!cW7*Ng �App}}8"XֲR &kAQoe/}gф^Ŷ"wajY+"/dwNRgGB(x+ Mz!ŪV6AWvRVFJW(۾ �xC4|5ryQ8vu'x"O}˒VЦʋ[4|xQ8p jqMe _7rbP~Ѭ}$de$7 fZVrȳu{el?\1\6S&ܬ% ]P2 }&? ēuP[ &OXv B !BJ|DГkao0^ T3Qfc!Dow\!xB!>QҌp5X3+~Ѩ9v;o49#D @9!DZ؋У\J2?($ardE< hBBBZ wZS#l(!GA BtK9j C" 0{׺?s9j]r+NG9VClgf@d\{Q 4o˜P@%'m�ǎ)G`FT&>S2 u9 8GY): ñŧa#D@FW RajZ@\%CjUq*!G� Bl;l;m;a: G?^igx3vⰍ%cjxjPQnTLaG2NJ j+G=Ar#'A#Mud�hlDGbCa!hiDW1͞h{hȵ5=WvuDOyRwm>]Aːe <nS'\/PAn#*G-@^9V};(tQwxCQ6DїGmbC7C? h]@!'v`FnB4T3<ĂH0U.TP`!%`t( įdkb-Q~(G`!X9Z$m>h$ʒ�պ}`z"Q1]dl\&MH&I,)A ꎷQ c9X:7N1b@ FcF PP@LjX�Ihq"fsr<o\߹s}8#P� �%`B$JH/ @ #0|W ?�$zo^w{kP-@�ӞW7PHg>�dBq@H^ q\f{9d@\u@ZĬX2F&vTbJx6uOҟC2>Ա<uՎ:OV*/k8_\bm|s#5w铋\ټ4h7n}G)BKh\ 23ND_01JϪŘ78<򓠋;КnI@˝csnoV!OlQtzs:f/w ByPq/UlhAHSDcf jm[轉p2."<qEq!P(w vMqXŵ}vRIFteCe~1OJ] nAHӬ΃hmn !H n$0Q7*}eS߃jm2K 5PkymO mIy#@v}~]#˧!gaf"Gm9 2IwX4ot!n/ /B[X hu/x%c^@hsǎ=v%.m03-G5 IΛ@۾@N3(ψ~9P"0<Br-C<߂2yR9E]e *O؍*G[s+g+"D}lLro>_Bx9`�OYrp+{|/j1>r$�sVU_8,1(Ώ p8m BOQ'*Fsn4{-O.'V$OrK3 :p O�!Cʦ~1-vD!87VcsWB䘛w`ώ(eZ m:@�HV�HH$I8v93Y?F1%iT! B ,l B~A [~K@'2 �b< B `uĔ@@8*LhpCe$QݓdI� (+zY{ e%Ii[Í DkI&'&H"0 HE^N%%֦VVV.C;c|m/07%jQl0٫5b*(faƶԉqcи]1 zQTڬɖ6|[f-p"`_3ws+68%Q1Z ls�Ql|t܉u`ł69ў6^ !ޚ_4PU {&q4/T@N{o^#8_Uf402/b̃_@7"vWGgO}S(Rna'hTG}~+gm/}ʀCCH.D-T=^5 }䀹o>GSXuo�g#JÑ,he*ApP+DǖzR(;CoUW�5!<:"<B<P8B 70H|SyL\5#6 Z3E13r$X!W[t>Zq]F,@Y[1Qv̞e`[ՍVذdk2|�0H&Vv78{\cr];l[Lv{S)9;%Tb[ q/.�[#  pFVןb\mor'9ldϑyɐsFIvcnCc$;޹ :Q68x!DK`�LۓRW#�+39nu<b7|2F2<kvN9.OGE nT^CٛQEgy% `+rO).Ϝr,L5 B;B'X B'C~썝䠯TEE]xAy<A%1Q-7P`0#L"+X'LW00~qc,So\ `8G[XF 絖ʎg?,1/nh \Y$oSs?pKS]c.!� @" D 8v۽aw8`;?پ~O->١Vwl X AB@l l YXJ;_VV15P5>S\J!�($$"A؎G;orj@0SHP@Sa HQ+ �@iHϹH@�``4B-Ai*/lC`fa22I$ A PDF`8㱔;#tSX z7fI} cY`E920/y_PE㖕Pˈ/{27]nջ5X ~eX?fP6kYpMlzDdbL'TŲV&7}{ Mpzr?ju<c60&No` /kc$뱦b>`(r/O W>q27' \aP5H)�j`rTHZFEY68!6ɨ" yq嶭 Gz[t䀯vqE."ɕEWCaoNSxzD ^U:A^+DB d~2ܮ&[F9*{!�8 ZD5V<Dmx(' `9 +/=<oVvEv~jeWJD+u#I=Z'wP ?L ]EcP$`uRlK!h"nB>ɻ&EUE:,1b'6E6K11K05GQ�[<YB5+jM r,!q^ a g:xEvQEo.hl?G]T895 nrX8sDT)G?6PbնmS)e6k858o`CHY'*'gb=M"t(ͼ+D_9V\r%o>?3Cn19;e cRJ �64B R>3ґ2~(~`]XB$DJAA# ŔX<:0h[;ݭ$N 0AP�BRREQj\=|^8aEﲵ>NE@D %@0D! ∢ ;f{n~f~1 \7M2,ݞVd3,wv Hl @zp޸qc+7ia�;A�˒#Q L$ h4Bo:[2TslYAmǰvA;hvA;hvA;hY鍰<&ILsib !K1 I@(yJ"`CA�"9f Z8< zg+[v{|;a+MP `@ `_)ZYɗ4DGHjWN,L b OYȧٴ\Р&a)oZD(bɭhDM!ڈHm5Ozk0D(02ea+{xWV |�7(eսjٕ*f]!@kUm闈M =.o@yq\tIյ2(Ѣ#z*FJٛTMebXYi"x n<Iur,ZNjœfIyq'=6ΣfHR l\땕lcczek` Hof4P9vu@S$ߚ! |͜+fbŝ ԞGq0T$0F6[!> 75s?+"2^܉kdG%O hoB�FtDp7C/&v/M^ڗW2r8B[>` ,V�[[=j(0#NgH !`bƴBTQv5j^4 >]ϕ#De[nbC^keieҩcűc86#˖rsbmC`X2vi 2Ҷ઺8Z;'q*s[qܖȗu h#e^oC"Rv|eix|�R;_ˁoy4|Si|ʣ +|,`{ Camp7:`4H(nBVT !{ABНK!C!!R5jsϖK*^*A{'hw-b X reg1@]x�c'0ήry.C'h,WДrTZ?]XzcYu=AI(Wrz"X?/B6}P",h#lG}>h)"xR\Y/ y@9;o>b5~o%q6gdȁ|IKn3 >^^M_߭ו*!9}m'>G9˜gr2 H9A#אjO'H3{ If[�9$gК,O}$f+!J2@)$L}X0㡤1 g'ӟ<GOᐶ{ EqD� #)c:(}vݐ+ `fq6FLt:S2n޽^5t7k!l-fdMW( u<^? "1@bmX4XD ZQFhEQ 9=/;!pRV_WPЎs5Ŷݙisg&x#�3k17.u,<Nj9,!scX^4Pw׆d>Ⱥ0+;201{@*�ʒRVlsY xBO2?H`{;O%nX6,,ZG9fvf~Ejz܃#x2`geW~T 0Z/$NGnS+5fW[8Cĭ|hu9ZBr!p^UrErk s> nؚ9T` ɍBeg>6`; X-C;2*_"ҏp/B_ao /9Tr .BD<6r1O.!AH(0̡e#&'9d\);n5)H[,7ZqXSK٩pf);~`f0zQv?[LA &@6Xq. ׁQ!$?J>${:lU2,E F#؃s#MRegpxgkQq!GH|}H+;m˙C>> &g=A6f w) ^F `}jܫ]-S+Ƚ9׏E=+QyTQ/ � H� >ϱx3!>x}sTY9?(ꐞp_U+&A#FZ,}"ї{7K<wy6׏eQ- 4oD_9sa;BG^9Ĝ Dv zm-9rHbFr'x冣$8rIva>H6y] $QB#GAwU_ S>ef�A�D� EHȰsv x0&iik A(H&I$e *oz_կ/tn^CT&C(A` ƣ`8"G۝ l`*1>otmB8È$b~z]6x˽8`BMr1{gJn/2gOт#|pV[6*)Y1o]F7byAkCoܗ-(Vv#YgseW BrܩeR{+*eoO@5vs5Oxе ;o9.lp_xS鴱:/j6_4峿eXן;JlQ"-;uNpyT0(&xRH&ꐬPaˍ T`7Q* /&++lTvB*q�?ҩ|Kg5#>(VnNx擇?78mbÃbv!>eWuyג5R*�O~l)Oi;{?gBԓ�儃Ge-MlQ`,b[tc 5_gKrMl*$TɮJ{%e=>Zb痍~DcϘW'N[[v7*dIՕf<JQ F2(Q4eAl{.IP6dtn=ev~spEﺴ</TC?H W{QZ*�{DAi[Yw{ E_Iޏ(sb{wC`6K<A6vmOPw[=$~W]I+OfwY. =5Jw֥B4MD 08(J7'InV%mh|@*Hi@� BJz~#VL͞hZǧgf:ӓ?6Wƣn?x<va JBwGA;hk($@% bm4ZAo^7=v(lGA�TX%G س~ZkI]v(%߾_9꓀f4!Q*9C=A23Y(HJ @QBF#I_"JN 8GHBCnL%V ]YJM_()B@  h꽘qꤱYϵC~EH#լnIePY z}N45 `!;<&ە U-<I TW{mA1sS)>Thl$ ! B2l7ha�,4NNv'0=NCΥHy937úIHG\-qA d +!6B<15DKWFr=<aL�jbf !99-=4)=5"U܂5˱aJ|dȸjMeT(sr/MeF�dže6B%?6d9Ȇ7`z^޸p"FXB9?B]r4\@6ɖ,lTlTI/3j~8(i,BYm}~C+;B0d#r.Bfʠc~һȮd܄Ac9vFpC1 *-(0b<�C3f�(lXW&�#1<!3 lqs(9TfڟM `#e:!o!T ocQ#yȵ;ۛ |&aWn[&2·mC(?pGXqmB'I!X"7!>+&pG@h6Nn-{>OB"np_~{7O5φ􋾜r"}OwzEE0X j�[z8Ů ?R^9Z߷Ц~njpAn{h4BJ=An)[B#@�+P^9=C}Jp;B>'*W,}Cod`%}B  BA~BX־\$)dE?B#`B=BJ=A!~gʲs aoAz<JX }@ C<*H7\bC93729B0l4R8AEqK)MAQj� H;�$TXI( A�xzPk!\jL&O&7.ܺzk]'33D=D?k\Z9ݔf ("j uFͭ^o4eAd~SZ~ !駱$&!!c?m;3Apx�@ЊD(ٚRUUSQQ?fb&̏njIRLWhEo�罹c5?̵2ss{@ތO/f~;rFsُ�i<9N zRܫx5:B^$Ⱦ�j9̃mSvN);e씝r{ -vN);e씝SvN);eM[/RS�P]"h4z+*eoS�DRHue@aq5v>~tٹ孑,3SsOz1;eB/7;P% <O;Lw6VO~iaqz~!YܵzXn\.rsl\.#rۙϯ]]8vpK'iWjD%_Q\_}Y|f "ʵx0tOYy# ?yLGR(+ŭ2:,dn#K4Э$\cGSx64ޮcLe<-AjMd +usnɜ[$z"e\43(X?\*Zor@Yk+/B@To&nC4m @t[O!rW*YC�|X; B̑*27bWזhW|ubf!jMN0}Mp ~hJ/VL#Ž7JNrXhЈP&X dSl8*cM}K ĭx(9|&[zl7^b,LK*#BE׼;OA!{&?' >8r{nPssT֧sXt6%E"Xll,'BEd@NX(w!!X{.pf"C:e, !vupwݧ?WB8iCn˾PqnA96ɡ:l-v똿dá!4'zye+ r'%Sq :G)L~6s,Pqֶh.tvz *TEtv`<^L.{ߞ6Q4j|A�06`:W`l4 à`K%BԬM1CH3cŽ; }N p4 aݮ(G2�<0-(-oyc$>1Ds䑠,O�6X} ~q1O3`ޡs`Q/yJS,&bߡ8 Q!B(b !R=|P~'⡝VSSqqt->l!by@`C}>S~=/d!}$(G}BT(R[cL,�H y!P`H$uvX-{)vC osm+{fJ xǀ" a[~}FJH?� b 9QTqcL;t3n Fa;g~tC;'q])`1nLfv/X)~3 UT@{@4H)JRL|cxͫ|&&l�4@lH%L.]\x~iyi3I'I ([[P0pKǥx'I4IRY `0 VIkO)PG_w`/Zͥ c.(?&0YZ{w* sCO %g=ߵ2Yl�X'j)Wm[W/rנּf2k0QhxVʔFqFU!3GN>@!,\~Rk޺[cŸA:\ Z(tm`qy3C8zD V^sL\XS8=F&cu�S΄~ M ɩ|@͇?˅joAN+m֞ŀe�!!V0A )Ymb˿TwBPB Kt݌IY^&yG}>9Q8]V[6h$!!C )B\F9�VTCO۱i@P +99=�r9Pst}`s탾ZW;g,m=sv6~&Hd!H L\pzTV#D/ }d!L!~P$4|Vϛ]@}KV!D:8G}"M1iVqH5mzڰw%l?<:ߏm4o}T_l$'1|DV !Bĭ> 9hUGI}nuvc s "A !Ց`u%@T_UjcW$N B}+ΉI �Ysdr|CC J L09F:G RukHqH6QP!ɨ/2ܽ|Tx;9!xЧ>X[#A9:?ye$܄xVO3 e 9[{O$W;G+hvX7ۚ,tk[;*\$8,B</88�laU煱 �E)Byuڌ %l@0G@@$42M#L^Iyq2$j&?йov;??/Z[1Zuj>SIE�H!*}?:G�DS3[C}?髧K�&?=wK 9^U ?x"W0&\tqJ25@( <c �'!LY% <e`eyqC$6>D=h_iAԈ\&|cDz<\r h\K9ڗon4arW΄X[^%W^{96j!CC5ڑ!MunԌ 8TX9jDu&y#FWQG rJ&]B\X{NN$kr7D-y�+/(Z6T�[b#fr|KҎ:zbwz6-ͤS3L a>A:zapsXhHKBb. ۅ X$u"z*YOr,ߪJ{48JLɂj|t7'$8YԨ pBX7A2ɕ31 7xoz2 -PDKpB22JwiLQ DQR]džFc~o/+ssF]A;nqc`H9ڴ-4!v7 C !MFFe\'@m#WDJGZB&;ZUگL'js:_#?cα68;gk&7F߅@D?"[<\+|Tx!@@s<Mg:(C$ƃx6?gj̑,ϦiGsCZXZec LT$[mJ;w2j�@,AWZg4M4Ndvf.I7$Ou:h~G)jHz@#s*CA,Wlҍp8T:I?# : fy >f) r|}A5'I02^ۇ"" o@#V1>I1V8ZfJ @T{_ /zm3 a/&0aWt "FP,3`VlAn| |7{ I&yn])gw۳X0b%+ I[||ϛaP$*A KܲGO/|6 db]LʋM;9`?-mAn*[w)æ| mnTE^_~ȁMMAX�W0xqr@`Je@HJ3nm/>\IՂ$Xxu؈/Mh`CŶ2' > <l0X{*-yC<p`6<Tty<>>6tp=@w6wDU<ضԉN<04St �],_viZƝ{�s P;A ĝ`dZK}>H|E! b u<@ @Ռ1.'x"SVޘ ܜC^  'Qcj6l`S<)m r! ( qgWs Ӑ�=3j e8g!_ΗRPYSM{ |4K:5)o pt~BG}i3 $[`"!f!fA_FB5G嫧�]S!EH~1TFX >I9 #P 6"'䓏jO;a8<xnj#Nbq%B D `{  "VF�!`E(J/8Ч>HZ8!B}DGEwlpo>Kp4"c, #)a0KY�|G {%B !$_EK~SR"ʏQ pd|B@ ҋ"Drr"t~ H ,AF�SP']db_nv)z^Deh4Yu+#7A\vK-5@]p{ )bND:Lr PP8ȒnwΩ\sns_陥K#nISȳ|e ifYr*MUVhX*`X|RS*ݣ2PN Д#JRPNi/~۳T$a~ O3{s >†<6ԫ syCW ^['Ooig*I,Es whE* (N%50!(4I:4pLkcsN3BZDtDDDtLӈdҬ-r(5wŜKx3&)ņAqZ02'XhnHqIld~Xdla]6Ɂ{$imG|,\Fjª]iLi"hZO&G>vQeǙKբ` NRʼnktY9d3mz &_ \hL0&KN0KkHm7ICEf[`\N~/pv-FZo*wkY7m ";4>qkNxT"76P* Zlx КLڼ̳W.w4m;ð=z&TJlAQEZP1۽p+_6|Kga@BzWm*eWx6P+xu4ft{,mn/ٵ{4|1b^@{@WZj?Bg Z [J3BLaT'7 ggәemT#GbqS` D"BZv^NKq@7,g!2:ZM:?k*>& НG} ]PV&dZpaF"dxA�"ɿGςCgS M9ArS0I&ΐ;&h1I$I(I+3</#</&z;DUĝ �`AM*8X) �` (ף4tzxd*>vhJzpyC~t4ՄIkr fz%'씰cQ^[HofnA Q)Du:bFOtLovv?]ܕYG_X* �օ]qͭ+$߻6.�ؚJnl/oKqQTGkTpK~ 0ZhN9RI(:5Ҵv^�&@H 4 "D!�V`Kg"B6<tSVx_}t+jH*SfkL6p\>08!rY2R83ܬd�D=&οvzYUiߖsE +0z1{BѦ 1Xp'&4whd1 Eucυx߶*XbtHвm7ij!~ O[Bp1s].z)c`B H ɓW^Źm e&UT]n6]V fYy-L#go_}+m258mn@Cr)ܘ( tI‡2{dOHgЄfv$¶V+X,B$fFF7Np:gQtaw}<_՚.}#C%%(i!D"WՕpQUD:jTtF5^w3ar[ |{ǤrZGz^jc%Z#mkQ?ޛT|9u (n2 R"kF'B-<Q-EPs)|nnP 0y9ŋ[%6}E$/KtҭLJ6s tD`mZq7ls!79wsF as=."4XRhpΟ\Y yc  3B[WXEs]-;w. !n#C?h[ӧ>*Y}:MqLke䫁w /1-[5Aj+k>fEDtkM&3=ElL%g\ta`j귊"L|)f{^,˲,ݫ٭ގmrKT�*"[�@ikuLS}5ؿt~qKf[[AF~oߙv{zgYgY)7#"Zz3VmB| Z," (BHeݫٹC?d8Wv[v(<-W):"M Gή?2$@]MLJ�T~wo:v_C M@UTy IBLT) Ak]0*v.B\WL.F_g�Gϫ2QzGx;DQ�\CR162_ݪF!ΝT(zM8T:i2 Zkg޳`^kW6oy#32EZ,O݂ deFY\ĎFh겹|o\+Z609 Y,M@1OSM0ya�bE017(wIX0L]9GyTl=.[+yŹ=zkI"1B! BCL&p3 ɻ6|Kl=>vk !N#YZ !uu_;I`yb쪨%*?pl#9T3|'/{z[GxzW EF6Ʊy@]/! K, D0G]5B<OQ[VVn*C_ZnB\U8;I}@�udj&0GvGo^!CYmR KΩ8ITqDo&/x' *<` *x/y5cVE-2u>�!l*svyYh,^śқPSFn!^MpW!DB,bƶQ8;qVy%� f"H`hX$X!=o$qU @nP!Α]6y!¸jO'K/ پ7!8G)8B /r}< ֟pl VP70h ? % [S':?^ ‚J+PP Jey Cȓ$:o$ʁ-I3 AM }/—ʜK"i[ 8LWy?ѭ-*syp9=gG\*M&]Q_ !eͬ eCP!m tp8,ZkQWn[r**r_T6"@*8}]wnŽ37m\5FS9:J@B(^! @¶S~IK1Tq t u򼷵߸$]ݩvN� � y(/tóE;rP+-!�so~(L�Y Q*(hdl4mm)�fgg$IRk"5"y"9~�TF[h`�S<if Mr /q XmUS_D6Xj^Ve8V},`\<k~ي,$ITu˩Iq1Ȧ,s]0 kA vSV{K0̲=.!LBx_C$H,0H�` e_)Lf/wLC9 )rV;Z ڱyxKl267MjL/c2� B\أM34a$`F}'%B$kG/E":,z8BJ=$QF�!rJl"�7KxkA6DF軤ȸ2>@Q?`"7$ttmeqOoȪp]{`'8qB7$LdW"#` -a!(B .!1rpr| 6!@ 2oQzrϞC}p(;f Y9L�jekyC3wRY*TO$[bNx/'c" ` 5҂Ę u>Pq! BK e$]|!ɵlP LJvRQ E2@:?զ - 9B>@EQMq~{$,rL zSQpA:G>?6*15&{Α#NAw)�{uW![W<8G"9HW%`#A+t>A$Xx${m$?_p1:b %E"AÕ" u>ҿ[-[%Q7`5g^)#A∬DL+ B5BHίLa  0 DAH,F9zB8VxsZfB>\9 T sތM B"I"t?kYeR2Op!dv333n`l2E2'.LO 퀤Tq6l G`~>|GػL^rʕR855 6@DS~y f+vө77[h.|ZsE$(@4W"�|Nx˗ί QG""乖_bƎ*Qi(< [[[Ѹ8!I{Y���IDAT5!qtgJIκSvҍ=,#SlSI" IzI1ͱB-֥5R/y֟=2\]rm NvKm 0\!fvdmS&)ӆrLB5 mBlX!Xvs$O>9i0]_f[ lPۮE@A0)Q) omż!@q,&ԉ7Xdn90y\.ۛ©k dvڑP 3T楠6XL zLX)1nm !cBl*q Jql>LK1X@PuB_ľ'C MB"x~x9ҟ5g>(")aP]P,Ϲ&E 8 !b!#@ *BGH}x#M_BDy:F,7BȓCQ�&xs{?ClF-H,6r Zgr�R8pˡ{!wsB* lW;;B <lDI!#Bb#1 dgYkGCggxW2B( +P+$Hq]H*@ *FHL$GBB O'ɯCP*pcG39B}<gъOw"WP_ (+ qvwb${xc 9�U C+"A&jt*NbO #xOtƨX$h&k VQ_e$QwE yWy!FqĂJ_8H�<p;!T : R :IE)? Dr9z>Ju>7H3H|l`2\%D,& bq4/}kF+I�&"3]<Xgpt;Io@5LAosK6tNZOuHk@�X:k@fv;%}`Tzy%XqD@uSI;zTk3 U}ʹӫkKDT 29K[�.K eրNu]bJZm==! +r311V`a=M[kbW3lGz1]؟vY;Ym줬6/wȉjceޫĘ U]1w t_{_6#$nJAV<" }mu;ˢ2vqм {[6JqtQv0Cdױ c3!<l,L08@ʫPƽ--hz mς]YgXD|$I:WnE}ǚ=:[qeW+zB*}k6𯇉 ]'QCg?I{_�kD5Z[*A!JݜdW>pvv] %2m\y װ:N9aDQ3SZWD.n�U^.Ez`r?>n1ꫴ/UРkҖ_-aEt"-IJnQh'49ݘ!1x''Dre4f`+ `"jB- l-F6>h0<TrB<:PBhmqԡ"`9@*tD(ûzTT&{4ꛔ"OMVp8Zk]< 8sT`sR ? @Q#bIyi nHY6t73?5;a;5;ݹtqk4X[FToFa*Ur �� Rzc/_{^ؽ s^E'pPl 3[gO]2bQ(df(o㢔"\Ja<gY6777vTǜDD]B^0psAF9@䴽Jh/ 46KX=AMqyA+P\v'szqriɶ9E4$3zַG!cW| mAQ'G|ּ9xtSul6kp.֐6̏/lbhXGaE\E'v<U]6tfA҄o -<%rsҊbW"N~en'[C扬+N&?dC.O (9G`.;$V.ggMŽyDog (3qk(C["4|QΗ&W<{ G3@W?޽[Uy[XDFPAfZ%*n.Z(>gR Ǩ�}RaXձ7+vn{C}/ѮD3R^DP!yomFd&HЯɍG͔_99GUcn)_D2XnƥVՎkW -Thfj3b&{"|KJgWT[�L;O(~%M~x<Fbt](�sF.$5&I4,R bep:#L-Μzskkח6ג΁{RBEX ]DR,r iu7]EҸ|/&R*}g1C3Ơ--'_yFcX]ϝ^zikkM)-h̩GeA?ov-eh 5Riq"9FsVB {X8reE) ;[ eq_�4"AuAl=Gj&[Z6_ b12tgr 6}CE_fd)x2I\>6?⟑[8of&H;E5PgqPy}d{ h\yڎ rc `/ȕP$^\PQy&;EY�;8$Ciǃa|-Lv # 2 rwp'dEIx[@HS/1x۔C58{pvY7?_=،TV\<xs=X6Vlgٹtf39r|ౙ$NbF~rgW@;]⚝?f&Em#D;"iWjh!v~�yT^6QkC_9Ճa5!%)*F)"*OКLQ_l-ف�6?;ɡBXY;Z;;ƬɭTqH1˨O @)TI,5c!orXৡjǝE3qG!B*5sJkF +ںH`'?GF"?<:|U|-"ꋘ\ lrr(Bw~Wq*1x9fR۟Q!o@&!`Ss^Ck�b !ֵL0Tv G8%nBJ7B}e) V^u)6ΑS>* PɋjPၜ Ώ#\TG-G=ڧZ;ܽt~st 0vH}^>nO`r9aA~\s^FZS} 4`%#o"rBDg5x$0i:,˲o$ ( ,ߔEj�QҤI{@Y$IQYommFTwjn_r,Y.> 'o\9 2ݏx1͝Sn@gagv!"xsk+g#=tg�./ x瀷QITU<+/Y:$I0Gt4R b/XETT"NvJP|<@i*L\]ޯ|)P k`U=)Ÿx!x6&?B@(SY7ozM7!V&&aTy 7rp}CmX0!} cxEkCmkm498X�!MunԌ ~Nj^n: PG r*dD׀kh &f&x<LFKvsS(Z6T�[bx}cZ*oک6V3 }xgZws'O;*r;*!Rں#$yY!P[mzsd�a!7SZVUo`~q©c>r#ŒO;~+lJgIc#n9NHE8W\|bk'ap"ʙT4>dn;I֖rSL%ZJ!TFZA+c"%{F?kcC1?`޷QN*DiU0;nqc`HPnBC$(RoU$hRUc:$N&FggoGZB B�A|Y{e{n{6W;G{qwh5oӿ &lAwb.v J,t*tCD,BM1vX)7x <@h :(< EHuNJa:'-yWw3S3l›/ZV&B&pNy;sDRl˫7_c힝%~ or7��E /xH0J<Av_"B�T`BDZQ�D�R&i<Δ%I$i$JcktvNNŚ: *|j@f#_"�UW:L˵%*[5OV&ZZ$#�b I<(+P萲[t:9$nt`L(W4O{.^ dBl=l&0\z+dՍRVD+P$*�Uv9RMYyw3l܈@�0F90xi0J�joh@ JZl|&qPM ބխԇ+ZdIqc*O98Pn�OK=|>" 8`#x`Tb[%6aCjnB+ 嫏 d(`wQT}o$:�xf;sʹpxvg`4o 3s?xU41 @ή%B)"8w$]_T&o u<@ @ kKOY7&7'Wykp!q |W!<tVk2ږpOMg!C$,# xCU9GB47d�Bº x3ᜅ|u:_:_HeZNJgnu"#BH:{`:B>I 19H"TFU!;E% !bWQQDRޞZ,t}Nq@!AR Fcm$h23QP$@K}XH|lxd}Qh$N}FR[ts;G!.r2H0ZsV @r Lhͨ9"XetNߐ#4!B}DGEw `x.D~2 #)1d�R8G+�Q$sU|-(1>z(s8| ! D $؅$L"99CHsd:?H$؄ CEA ӪL0gAR'W& $ J 7Y*Ҵ<YNAd-.U=´*%� F$IrM �y�i l<йNnןzӪoz73mt>@C*MVHk)Q֕muϷf,F ˟W!Fs% Rʵ437ΝZ!~?K} {ӈr4C-.c B@s 5Q� FCx~7x+~)*�Ҁd<!ZJoiS^ �ֺ%2YJ% *<Txg>WPdsj,]TD A<Ԁ|cj-]oM(.϶zN鐰 206`֟A@-F*'׭G1`!@E/O1tJ4WZ,ͱ=U&؎ l/U!QW.cV-"}\610;Dz9\bUdi|4~Cn|8{9дd!}3X}B|Ll5yx]_Gf[`ï|&|ǽ3mfWnK'_\Up@_췮t;z510:̠RD \zF%  W ZvRםMf& #:oC7ŧLk|jyׅDU\qE$z]\Ly_ߛL]sk*IG|zT&+/Y: <Dzp!UN@[Ea�|̠T[#$xαɱH0b.B]bM ߊS_=9n 1]v$8H7`uC{%He$qc [ڕQ_K ~m>%P_m$O5O:?-z9r>*ju~{VE!jefcP!c3[ :`U`֑DȤ1y"@4M4Md<y></~$"McSwBRԟPM&ֈ B "R�HsCJpc zӽ}wL^ܷ⩕k7VF<N:ALTi z&_kodL7߿򭚧Fk+~:u48.ps/o VWGб?Tμus$CH%1Pv�i@rXZ/x^8pvvvӝJRRB]�P ݸ hXR2�Iǣa&�T*u:8|L +e$BDr�t?Z~DfVx6l`I;Le4t]PaTU&]]˵n*7i[[a l=23oc`!">17G[&m;5NUjUڞ/b*zVb"ޅ͑ˬ-?1߄V*トl{M*H<쏵V066Eyd?Zu3o~\o"&V8Ea2o^A dӋ.u7= ՍE[f,0Q!Zi-EG(n*L\aN*�_kO?=7<Z[Z4Z}/}w.7LiIвJ `v<0SѢkI#sD`Q$y6MZ<#R_u;鍿N=wu#|mVNZQvZ+yu2fv gnQK^`)YF皫E0'Yan2 O`>O B[_t>qCV�St.]{ TF &H{q,㾉l=>馄 "Ҷ\&nG &Tس�N}gr,1 ث ךH&[PbZ~C4P\gO!\Ti1.'#U:\;A> +4w 3B[W$<½%&| ւ‹GEW|bʴ__vI>{X|fv |Lc'Q DZLp65WPI YsIX %u)Z\3@,=Ysn!s *Qψ)�(IGkFa3x߳\Ҫ⡿fx #P�(�Q ui4`mgd3=xξx3ׇ[dn;ME $ *:۩$I�ߝSx!$ܸiT(M`.X_|;N3+q��Z+3dvu0n�lb-J <W[ӧVN`G450&SD,/QAD:lǣ;]P!n߅}` b$v%1\#آ< L[{CN5ЫΒJH\uB%Gت1 l3\ntqs>ƫI fm/Q=6s'Byq^cI}iv/p"cc M+b!8512(01 ÀjWa9=~;#mO3,~ MRvsB-6,mXs ]iO8V/տ!6/7ږ<˪1=ܩ U&;S* |OϦUx׾˺UZY}_7o~3dWEgdŎޭb#Ey9mفKp3t&RV&۽,\AX :; z`˗@)ķAVqCH Q@KIHѺcfOU\UvSA|PGTɒJ< ľwC;-ZT7B , <7ACH EW!ddm!My PRQf[)E.11rw 7[o/>(-};0 t&vsBܞ6:Qt "x+LhIt>Ц&T Ƕ1-w~wK%5тJ+PP_Hm.(N}C<brao>?@46u>@'+B_ Vα)d52z1Ł,M*;ɣ%1bECTUsvdnbm_y2xG j6L$vPavkrnq���xi�P� PbNc]!(B$D)gz3LwfǴ/n7ַZk~픷5@J�ͭ͵c>{. 02j^'�[[/tԛWWngafvDXCLԸ16>&@TJ%D5eY>dƎd^Blpq̦yBL* lPT`V/9C(K+,5?.\fM,T&H0slc{}v{ H_bZ<И�. 䱕Ol@mSfVNja)8 F7`Z[SmHJlx(BX2m#ɵrp Í P 2A rXbI2B!�^Sum�UMy6G,Qrij;9ep6q+Nr1JŒe�}eGM-Bz$j`?H8!!�8BG'q0CVb!8lZH`Я ٬ b$wXmbL~ D8;[<~| x_#Qkwosv0W—`3aõv-]юd!B&R+2=hQDv%BĞjGOASH3G>Sx?(C@�fW8;scR#r Y<vq&VݥT 'ˉd{8P-p`/ޔ3*"Bz:b>E2/󭳓ΗO;O2 @d>*t~ ^]Hg !EHF#Ya:<l@^niq.\ }!"l¨H1FsHhUK3((q&p>(8.'q`j8G|` &C"cmN}7q=W8G"9HW`#A+t>A$Xx${m$cTƃA^@QJD+E$|`G[*ԍj${[Mm"A∬DL+ B5BT][ Yη;WD Ra$dX$H5Aю9ZV()` !. !pA'+p:G ?$>b-Dtv%seL)t."G 8<L[xݽYн^oJ-ڋkK[Ϥj�M>3%@Rm7,g5D:ISifA6zGx<[8yVLl;e�5) Qi`w^9?ٳv ]N4v!"[pꕫ7ǣۛt{H 5@\b/p(eT$)"[[`8\lltw[AX~)ȔuO'SJsr,se]0JI(mMKlLb<[1uUuWEwbwW&E%f_\uXnõ>H \5 Em{o5ykf5aB'|ث|rfF "#Wy3wiD6}Ȼ%B|y!Pb)a++b^TzJĊ:" FA&J}at .MW f>2tʼKAϒ)"`</I[*sl >6 Ć JBR,Ǩ'$6R ;TGтLpp@O:0E2gow6"ݽ)-R:ן_r"e_P,Y!؄^ԃ%ˢB;B0D2b~@bCJݮOA-3!OLj&Vyr J6Cֶ�v pk}+#@{Zgr�R8pˡ{!wsB* vv? |BrMX3%e :Q:?_SH}:ߧ=. 5 #` B¨*E2!49Iɯ*pcG39 �)HC@El'a;G+/p\ds =jXA}qH!6@*#A!1 ؃h C+"A)PT6 J zI7YA}HM&H|4=h yWy!FqĂJAD[ޝtE\.[(#b@!Ց`ⓄH@#)OAGsYH@8GSG"WP)y{Վ*(9/-apޮ8<`L)f8)y[hIgÀY&+WXRf!B\kMY89] 3ʶ^:5s}ݵ平'_|0 �}I$^g"*&[^_œZA (KtuG-: N+ �!bFCvyk+/pLw{S9@3rPIl@UQ)ނ$<hi)*Z؄Yan"@'�*`‘yBqrm]Dep\76`BQ0$9icsA,XlLf[^дB-jܘl2sirtG'#sɷe #Ze5$079B�r6wڠԁoQ:6帺> hm_s7nhE2J hor�јlZ Ge|78C3Gdax1xKO9`:  /3m�YC+ϦXڑ 6 !�'?7_~幥{pgk{7gI5NG˾'u6ǝ`)-DA CJǒBjbřp~i iuoз5Pq\bWq.T-sMrƆ0(n'wyS7,̺8G)LMN.{ݜm�Yjb_L !y[|-B`l-"u>I%5S1+'@8l?t1gm$h:5D H#8*M."s p4 m@oO}f81AH Ac$>1Ds GZeBI*f4Qȸ�$#�s*BBvJ gSQ<@ sz[SSqqt-ArH/i2b9E-:rw8O"z~�!f= !51 : b=^ Htu|:*"Α?6ʵ2y EP_Dc6j Zؿ&I~?55d0inCbo9"%�Mc  sL0J%:0YiM:]@KWV F,߻3P'q>$">eYeZ - *f9XPRR3s37.~/~gΞl܂VU1++_S/ ~waff6x+#@JTBXjHT`Cs2 Xhe`0ƅ'UJD$QJIJ/Q,<7Ȳd޲Gވ0_DL DL%;@A`&Gh?qI3<S_ v|&O՗[Xʃ%ْXbܬ :OU *%6/FT2!IP5os Z]bB[3IfA �|[C`q!D<%H\4\l�^M{ʙ`x݂ hKܴ&򺽿,rRoi%-ȉqڳ !BC6E1"_ + ɧ2WV;@EBUBlAڵZ`rG}>9ڳʇՋ[_ˋ6-"YV`2GӷAE ߫TBCHSQZ<-s|!x+=m{\dW(@T3r9PsOYW`~uBDűf5U\];g\ECn[^!($�e~}lA|#qv>B Ds^&O`xqWm!!8!u@Iғahs|.PRY(~8`#A-8dPe2NJ*_!b!<Ҋ&dy܅%1<TGa֧[ 0E} : ā$Hq,92fr9tA<۲ ct_9zXh6:?RREMs"A��Î? X[n䑠CG׼a�8Bmaby oS*&C=\E9ή2HZ~˽jǝ#Xx:_pOqdѼ, 1$h�"`ڕ5ӷtRI''~Wkw+T nD_�n7јEA\kgJ!�yuޙ]S^q[[^^e;exF t�$M9@ʹ7W76F#*uh�w$_h�(lmKx7Vӝgn7,1( b1.3;nc[,Z@zDaAڀrxM\__ ;SvN);eEIJ?<ʿgl'4=^~);e씝SvN);ew^ f�HO|<b�vS2h$=8SxB0f&Q*I}5L:iPeYg[#^os;ӝ33ΝեK+x陙NgSN)ob�Pt˥DQR `íg7kw{Nǻrnf7̺y� Wg7^7g纝4@N#T9Z4+=,ؙK ;_SPB"" Z热:4 ml?"[)O8pk"Arɇ1lW[e%dbkJ+sr3` 4g4ٙ|Yv4_ɇMSy>t6bBYM7Ad5X$,Ѻk2<U-٣@yKuy~̯@Hsgx<,cߎcm^=wr#o.%`j|8R! l'XU_eJT7l ئlF5RHO+F} DlزǃǏ`I l@>YF2|d1g ba`q h-B868U!DlFH=[mSbH{qTfS)ܖ]ﮩߺ[ţ>U-Gi-wI%zXOQ*O! 5R1.{ekFBquyw^KqsT&$3|nEŝc)mr?[EDΎQ:K ly+XOH1=+60xO:"m|�0KdsD59줝1DH0`XP. &+"O~qExT捧`|XTga8`rPx t>kMx`@+L/`").l8\FaF6D2a�8{p$LtXi2t:8O${?+/%|Dɓr 1hBZAbTPF#FȶG$¨H:˧`lXqTP^ ؁s$NLP,A�[c9fG�(b &t s1s~ O_kLqx`c#xPHqx}$8rɘcA TB!_r_7 Bʆ 1ŌJsh$^@�4!ĎA٘I1HhB9 } .2]@ 't^2M*, \i"H`l/LrΘQdF7WCeìzntܰ9g5s)ukM,DHRIRELh5ңdwO g.dz4Άl;źnыc L@HI+ʑt SJiTyLTo/eW/n~o\\YȳGbȼef k/S�4nm勃=՗/^~$r=N:QkH)N-4 SԤ`0eYyVB+p"@)t}t)NP̀ryq9bǍ_@U{U'Z9U紭<2a+`Bd$LQY~@&3 V :hU#Ky+6J2^Căc )h%bZ,_Iiy2*Ԓ)f.<9 d0Ɓ\{ f,>ݍJ9D` _z{>qA8*wܫ WD+'8զ6A;}Cv20$f^N!r?IEW $*Ll`S3ax{ De̗v.YϯG T.'5woPE<'i69sN]^h&9U?NrA!{p]=DaK3@X横d1@ Cdn�2G@wE|D@1Wvr2x |5ckKH 9Uq(r(0H9r!^`}B�8;7uvUQ8;@3*i2t5�6e%|eӍR":F+u/u>c TP !׋HҎ6/*bTFU!AL Єمu�޽ Zes# \H0HTVKdO>uA$>6<h,UD|_Mzb)![ts;G!.r"$_7j&cHkZ pAH< F|�QP~kHtTd | Ǔ`HУ>&KG $].sdQ%@zx*XϩǾ.b/kRrkG$*@~{mG gK"99CHsd:?H$؄ CE~y}?aC0G 7SPPl>`ٷ4Nd[ X&Hz*k:ϳb\(T<3}ps@9~y3++Kk`I~-AH=HvT1ѝ)OQӊ/)T]H.:9! *DvӝNgM F֖VV=ٓ^8`PCEUNGԖku |�Nҍ77Ky>-&9vrfI椳,5tݲzro eR$\\kPIqN"�(FCiꨴhmt?�'=Vu_ ^U^\<%yjY`Wyb6&$f &IX0L6]Wݼ�5"Vv!DNݲO9C&5\GOYB|RG� wmuoBqM!*<zyfK GLgVӣ!]7k^3۝j0}ZC!ۊjGbrj<='{Kx!&Tk?c`ؕ<PˑO<0_Sgu5kGE{]B<`(]U�BEd*oIPQmFkU6lBH`r8C6D&L[!f9ѣ0H|7ǩ̭U;섿n-]LV$fnZ3gWccq'vIꓯqmpw�W;d#B#qίLT{W1TˡJb8B8EM&B|MU0RJj;s)}ۑ`-eDiO}!$n'|&9EDQë uCτ Isӑ ĩJTpx@>cenZjz l=1BF5xd+zlji8*nHO9[*@͆K=PVp6P!@Rݟ*Y`d%ch44!5l9>c9G^$z�h4ń+؛e"@D9P3) �TsuDMڜHiZs4eÑgcETқ=Թ>.yq6$RRTJ!*E4* ID@V  @\8X"-^y(F;vT $Yc`ku9V{ȵ1*@4@^Ӵ^7׻6o<^iwٹ$7 ""5R*)FE"*Tf ¤X !g]*Z}Uih�J̴/& 1%3gg|yUgŤ725$ f9@J)@+ŢSGn4m`^<Wd�$vzL/ml+GUN3"TDLhܥ6 pM`YnWlU5b]�p2Kv(x>ELM\9xG~ww~WM֖Gkե[پrYf2q6S(nc}_^'yEuf9`e}s]ڥskʼnpb!9!)pv33w.o\-_A.Q[6-|c}t4Л+?.\[1[ e&g={s مl:Vǫ7FO7,; gR�jd:* T,?iaad @ 6/!`ߑBgf>K{Sp+\6ֲCn7 X \u1NŽyQs@E0D`oBgz.Z]< `vj;N/z<tqOwv>Mg:Zzme7 ZBCY?'Ne!q8t]O욚N]& .'s]]̕k�!7nfgzk+hY8;x)uAq$v9ߠ8BtMϦ3i`#Ȯ]lfq%n L{{_j&MӉJpomd|hc-W ! ҟVs3I&Iq}e2^[mr9 M/LDۯg r+T!A}Lv3‰#"Y TtvPH*:SLq9U$Q ;?LMiG `3l[Q.z`pdXg|s&�CJ<�ɍ=~V3 یLlC!l|0=x=I�G"o BD$FZrO/k %U!@9GLO` Q>_ #`!PL`][:GW 1P+�8ɡ0=`3@9z"9aTs4="A@ `3&l3O L*aHC6>rCwfHqBRWP\ !b_-y CZ狡 S124|nע1H#A6iZ=`Y@Z5A f9U\9G&)rB>L8`svwLq]^V;@@B(,'ߵ{|LmoH�Ȭ2wyD~b~ΛY!h$LJghv.NMcg:W׮tw.QHH~: "<'PLWg,;� v6ygR/l>;ޮvF4RSk׶++x}ݩJYQiwդ jA5c8_UW e5S" pi^}uW9̦ToҔdNC * V6ᴝR3P{bz m=)au,!j3ڀL8 TUPeIm)w?}}я֖?Ǟ㻎9,ӧ^Y{/|y}2#X}Oo\Z[jnW*'j~}7ec/_+' ~w> eyFl[_tIх5lTDeWg\_~u#:>G®n)\:KwzU}=xΙ~㥕]~ٕl,c{4hovp £9S_[߹/_\o ҟI}dgnjd63|yVod9v́cSяWƯ<bwO]{{]:ڳ߼zc|;kwySU^[{gZ,s.vr~CQxbqj:Ǟ{dv!ᅚ~<mSw7_^[+_vzϮcw.쎏W\K˷~t,]L+U)ӖϟZ?ocSG=slִ͔6pj㕟._4L9t XNy|ii|ܗn._?x^!|Uw^}E>[WI>LϥGNcSllmfn\8yxtp׾3ec5pj1=$,�y+¯,;4U;OM>1͗VoSvN);e씝S~R[,+怳,(ۥ|Glf7PvHyF4tT/9ؙO͜~3˫^*E�5dZs@$[Ʉf~_6[4օn5W=*Hzpcҹƥ7֏_]'OSt.2x�Ś �Mv֋ S}㷠\T[r kze냗v…8O&<->-PjydLxHx^A+hq=G>Ѻ?o.WNϥ}@d 硅{ZzKza<�iqL߻W^{nuk-n`Wu?U}~ΡȉOond?uO?{梗%)>u捵oեWFPa =ŏ}ӍCsWn gycʰj@>zlW݅:6ޏ/ WFޭN?oy5tU+}Ͻfc=ҟ?c88}0~nاVgwUU?<|7e|O>dc N_}UI|^u#>o_\nf'#5,嫿+vyzGGO*ӧ?UIJރS=]\n&+#U /~WLxp8:}?~wtV!v`-@5�`u$)nrs +WǭzYbTUҹ͟|F]�jϷdGޙW׊  =L4ֆ g|t}^DU7:v={^|3߼6뚫5,wZ==ܳrco^)&8枪6[o$G{j\>JBG??[yіnO }:sê[˳-_b[svy8V݋m[_Yo1rw Z$sEW'w6V�/!_`gcoss=o g6.οi;zW|ʕ!B~k%m<}G͗Vc5i0|19&t~]@s^l*pu1ڦ&# ɦ?7*k ' Ω ]RPȷ#Z'nSi3w@WYc/{1~v[E4~s-A^gIH:Wp 3Bͻ<bCp&1)rbCm<4!W`#m MbLt檨JBjgwҤ*M+6;6uqA6Lל8xϭ bjJ1<,+v <[Yq>̇:^o3;[` _>sk7R=y *LP* B% hD"rjy@YUr/\)mJTwGI67kkW]8zƵ߽xtnBP� Q)� 8*|Q $ eeŋ hMZGk43�@ /=3Ls1E|SC$|UTA~AJpbND}gejl#x'`sӿv?=7TqaS|mvLwrvhA <sYSW=wwrsw޿OV )w{ydW>wjk}Y׮ =Ҥs~ʟn/~ף?c`qJ^HS=Cn}Ww]O<?:{ʨ7\`@O}@6WUOڡمsX'p.&?TG?ß:4;<?~Η.o;AВ={oBw7?8>=ӖXT=}</7o\ߎ__A}-+}?t xx�?돾oվ==!6o*v|/Z`;OfnС?>PG߸З084̧ssd_WeH5[G-B�-R$MvW}xß>ܞ�~Oܸ<Vc�:G!ęѝJ+{dW\f,}sǮo;sꅁ!&b1B}xoJ#,˙g W',$Nk#>\?U}O.]r9)YEH M?�!7Utl{C^Ⱦq&"DJec\o~.)IGwW[z|Kzʳ&F r4mREܼKV&dz~>K_Q*|Kb5F}rt\WAd_m$}#@\.G yT5.ή !\Co]DO>6|#J}WQkQ > #gG?g¼pښLsk*IU�|곯1H!6@J~HqG?iE.`=j !N9o!-B*|o*TfgP_{+O9W6R|G<n f20.% DF!!e!`!mf=2M D/@qCT : " z\ a}G`B�CUiX)];&3O)(D-a'WoR<7I$I)֨VM#)|`k<ݛu{4;&w;wǵ;ֶևugNjc`S5,!"0G�S~I Q Wndoڻ'޳koo> x@$񚑃:GẉJ%Z֐$hkAΎ^xs?9+Gn'N͠±ΨݜN\l}E�XK5E'%Zn`Fy1.1Z ~5-s?G_ Ndmdi޲CJh%5ecp.G 2 $Qwxf] !̧br?G_[;rWȁ}w]#r??zt#p.ϒ;P_[};, r "¯Oۘej&oS DQa7 : a?͔G|w_[wuο}Fef,,.q#]?߿s{82讏&Xuh> rArv]}Pl}]~bSSqcQ!k |]5cꥭS/շt׹c1 C5B/Й8ȹH0KKj C ͷ)́_m|wM[LxI1.t>ۘeߡ; LaBUc#ۛ%I7pLQw ۷.h3>?9{›!bC8urP„nBiEBcqe{*:Z]N.J36폘A{oogזNW={~Jy&\D*<e4$OVkk:<=nv6vrq":_ D>6_,#6k=M AaRQ%"A�Fh!jX$Xͦ:4t�U!y#`8B/?ɲ>6 K1&KIs[+(= |G(roM}R!;p>:G]MĜ#X ,&9B wIHJRsP9E=X ؁CHU/x ʜ6\rten$:0}$(!֢{CxHD2 `NtP`:|_ȉu1<lpFG# R V>4)Lf"6 L)[dG6UE yCHȷSADTnwvvvffw:iD<6vQ|4l[v£<ww1^^ \AG:%?�@$B4`&(7  h� 빝r|0&33 {f0ֹtfڋK?қn.]!@DYy\ P.Br_ h"-O]tZ^!5l<)*\ 5?ps,3] pVbJm ^ߗu{׾\ەu5!QO>x$Q`b?SJCU*`O{tl)q5t9~ʦyt].oy" m>ev{iK[u{N?_.Lzre `]Omk]O}jw WnF5?9Ssay}{>u6OG,F6a\r}|yAQfĮe_`<Ա߿`O|?ڌ ~jUG X/ycf!n/y(unJ"8a>#rok{o]dM \26-*lmA<`ڽdgWMM|?>n_c3 X[#d޶ݖ>;|bojDžocmS=(y")h]6'gWn %+PsT Vꫳi#Iw�~|gUqV$,79O.~3\%}CwNnmηv�c{l{܏S-:e7o{Q`7!BC q0B iVu ue0[,| BP"8pY'8b|a bkoȻJT8* tIs89C!Bsf߽ۚ1هs4|n!!1xꟍF0}SPܿW! i3iE#k7sb; g!>tA|זU&H`WPG xhG Bhwvb b:ءΏ�[`AcX)RP0~ sX;lZ*Wsl7&"{yf<! +t-̨LE۵_s#jȃF BgNLnIJDr Cs&Α- t~97̀&^1X0AI#xHd#4 :xbko$^oJ1\4E-dNINhckkc0LxG>{xhcӽ9=`3sк ,A�|\SLN(H�:cM9 ):n?Υ8 6SgwΞ\_:l.GĬpb߈|7R`c#;n^OΟ|cimE~WڙH֚HCq@Ny0W &+b|)eX��[z[x-O;[z;I??A2=:v?%w7uH~߹pO}}mw!¿śݖpUܾu>sH'*w3=uݽ<~'u}jw8L<PsÍ+7^XmuTzVW]z䣟=<iؼ?szvgx>{da{_?ro ol+w=8O]]}O-D|}ֵu#qdp);e씝SvN);eT^!$QiT! zc[Y2#8?~ީ+KkkQgY{13M@&�`�n`Pn_z^&Z`88IU;5ݟa썗o'7s?|hsM#\%TN%IOab0'v2UsJ"…̷k/_^Y fvD841kXw/]Q =n5_apR ,sRMp6uXN)|$w* e??[v5=eAme-Wl1ؑelyb.캩#.cc~_-={ip'Wc{ԑ=b7Ρ9"Q{Gp~zͿ{ihn9"-Zٵh/;I(tf!xbMq񲸧pGwr$~Wz's'b?8)ICOVfY`'Dzytn!{[yrgT8~fnFf-A.yU0kx|aE+GOqkd%W~hwԯ\bY76/P;ҥul's"JΊpY1\slbqF 9'mb)z g@Bϊ C"xwSgT?v PuvN-vn7@ kwjq &4S>0@ltsvâQOUoc NUmk[o[yd$ !F6n΋mr &{ޞUn4;meDz-C!CPCmd" Pt&�uHf܉W׊�AܳHW&u yefռ�{^W(sQp6_&\A%qCɂ<c~kM�#Zs e1P ȉjbkd,é/H:?�9M$X0CP盄>B<'AGH>BHXR!6LwQbEtiҸs ҤB T.$i[;/ك3U*\$<p̿ hϱ"YbY3qSSdhD� 3&s_^^$znb8MS޺aHDGl8c $N7|k9\Es}w=q S(_뭜isI&4Rq(tʼnJ#D)j' wϳ"$t'aF|cLkZcwؙtwna>_ѯ/տ~߼ a:C U"b<�Ҍ54Eh`ay% 73Wƣn؟"YDb[;+0,p Nb3ƿ�|ntp~%AVU_]QOpO;&P~ړ%6 eMx?TQ@z FH:w{&VGy`啵GHf9 9@ľվ2yFk+mXaM' {b׳h\83)7X=~6.A QGves=[>ԍ6֚. 2;Xl G'zF6j�g3ڍ앟.ɏ0=awҞڹS{yT)xos5K_}vM_^H:Y{{ң/`nB7'_?ك><Fx8hڅ.ȽIń<��Mʃrmdc2j9N;]>*$B_K?=ys#kdc'ثK`Csk~>0tm?>sg\IE'2JS c`I!�. qDnD\6x�=脜6Mwﵜo0st, NJe�pI `ǻF:K !*":T�K}T)Hnߟ.b׃ݱ\2TD!3rY!$同cή-M]((BdkT"$٧k4l?l&.'65Ÿq3_nUYl>e)%AA/; @Y`{΅O85!X!KBᵆ:EǞJgwb&cHkql~x2y4(2V?djM!HbQD!I0N8o>kC}MlAH#]�åp,W�>h:?@z? T�{j\Vg#B9z=^ lI$<B#1lH2\x Xaٱ{O$y"oxDt:n@�9A!I2My6K#Ӂ<xcG^g-zEhZ!-�5H )H�wKV`<ʲ<' T$::ttRt{tok|̷7/=qJ6dJj. @~Rq!c"3goΞ^}3ҴG"T;H+vvbi{/¬^iU׳ܰ,4mo w 5הV\τx[x_|ų[On}s<z{fCI~6Mn|U$&k`7݌5\3/v82Tr #>8|gӡorӛOn\Zqq_3O~x;` .ժ9Nn\>uV6&pϡ;? >|.7O ^XxfɭgtFu;݋p"T~jV-v/^x{ˣa~c ؾ#T.]|닗~%r=2gzͫ:Kw>c[sJSw?^hL@VgOSKc3ʟg6/.�1Q`o?}~GuRk :f7N~+W/\غrn2V g҃Ǧ;<uGo#yob_cU\d׷pys-a)vT>&{vݸ2%7ǟ+.u]5L`F0#gW&j{nj$ED[n_lw_Sr;(DK˗n]8qy8JbgϡO{`w3ןJ[h68|bi~7_~vqv1ݽ{v׻~~F|t:W?tfaF7n\\<zak(M|z]-S83  ^AOz+gG(@P=5oI7WS}rmڡHO~dc=_\u`hƈw];xlޭ͟l73l6 0?Nin]_{&KꓯDVFyml3,BØq>�&^퐍[#_?A$5o4u+�͚*!Ղ!1GEsԘu&K"Ajr�SOjPU PAɔV99rG5&W{ -DnM, 3 EɨЉ 7O}TF-Lvz%E#Hg8'8rH1S�8ḋ"A+r⨸e"!(fx<˞sm@ rB�m:;OAI&񶾿noJRygY9ib뢬7WfP HP&B\gzAwNvuzB7EgN^Dwt)`T}Ir"].mDth#tߙqM/n!1"`qZRVh DTI(:U*WʵKKW6wu;ppa4tt I<U-O󮴎W�4@ ]Ϟ~`cfqnW;ׄ4jBBDkMw0�"btNPdwy\P-8Na\Tzck{w[5ɵd'GpmlL^<�;-{zf]’>ío"s4?=h^i*^[ɵ̥oW?rotEt#\|co:k?Y઎�ƕ+gq3; \27oz5]=?z~+cr?=ػ|v�69"~Ӵaų;t[ ~7^XcN?81z/raYyίOuK?^y޷[_K]f[U0W.+Wu&eneײol+W?ك5S8OyW6IJM2D ɧ[6X\dHkzapK;~0v:]Y6*8W އ7kKcnִ@OvkO{g,t^XoK!|al:xTc{z좷'mh٪;.^yvMVBi�ڸ2Km^K.&_|���IDAT)y_�n uHG9 >ҿ8wܖְ4^Yyu}_C*^ߐ ovcO5޸:W._xsJbt-O~SzpJ{㻟  S'`o$@x7~cw<뇦g.yk-qިQ{^W/n}OώGĝ "r"&2jc= xߏ~`cI_,lsKsT'ɬs@8.Rkˣgs\A>k]�Ryܻ߻ׯ\8=>=?瞬 qo7I}g^_~yP։wWrc7z/vL0A.mqΈ^N}g 8Bm\=sB9F kԊ3xpI=Hۡe"瓢brȏ9YV'n2&a4")b[OS5#&G:0 #AC/"db2 Q:GW A% mWB߉!aQduWτ 䜝5! r`3J ,> P)PPl^  %݁>jM}<T\R;3d$XK}Q{A&]Xhc e s9TjBB=9:6cxk)\7s�Qע1H#AI}:GZqO0D ;* |ps;Gs9G&9o=E|bG;sgo. A{I$A*J�0GQ1<Z!l `.bA%*%(єeIh<wTwn`:0`W]2&㼓cNHJ�5$y>*QZkM�}{ x"Rؐ)RámI�*lLa?hDhs|3ӳj߾#y8 gԌR*ǻjf�Cb@\tZ#@Bxdî4הiB�"�*ƨ΋ `J&لSnaQtFZR6, ?=i)E9|tӛ;|𧻓<~x^oWo*/>{OSEg__}[>7(*__3k [cIt@}p-zqXb5?֕ O}mUk*'P]WGyKъXݖ<?g'Ow\[< �5C=wꕍo[Xo ;5ج<cys-??>0X9?t$pC:Xs~/5_gG?sfӟ:SU~+Wj {vWú~{a?o'?guYom\t?߆e<_3/ .3__[<un=�?=5NmV>;9bNMM^|v%jIpxcuб6&)>_m|nxY˄זkB<b`_=%㨟<0PҹoHׯК^}n魏}\g9q?Y^qSek#�kx]Vi);e씝SvN);eli$z8t|1k^yLd) u@R@i ȕ""JvdNz;{Ջܸtfius ftPC D%iBDJp',T1\}�ADCG</^>kWv; Mݧf(�,V&U Y@ ~_.A (*$$mfw/_QYYɋؖ;d9n?ڮz8s=؅`]v9]gͿggY ihKw ᵫi$5cJ!ؼu#b6:ڟ'_ +5[�KvQ0�G/S_6r!ڸgsf(DbLEYӱ$L'tNdױfkhz:0ݽ25p�tf/7+WDpCsNzim`4Q2|+w={e`P9bz{M`S�ƬADgewwFѧw՟UW|g_1Neo^ձܝy yL]4x㥕#O;{\oNW=E; �pn1e#o^Fe Ubʳ ?uz.' L&FqbZgor8`�]|m�"{u/0wˡoZ)ͷ[nvO'/˳<"dk=?9s@؎Z8h3g# vCqv\n`wr[ Q@a+&qƶxOrȺ+J9bVήM]:Yqﵾ<yvcm\uCDx }Ɖ=WqM B V:O}i恝l'`6 J`O绍q R$l#w W#cV5C B;#w8 us ަm!D4CB>@W6B}CLc<gdg׮|瓠>]sOf'O~$h#ΑuV%l.~h sqV{I8G55t&$qwI|C@vp2Xb@n&`η"mST>qJBm1\;x/WH$8$L继ýյ&>ǝm2c4P`& CsmNW#޼?օvFH'_Ơ‹!2DHUUtq5I p /u%49'$ 9 T&;eVx�=X[r-ov-N$Itv\/yηrMD"03VE"$HH<͵*v3hރO|>v]3A' )ƈr5(TN,!!H:D]QChtƱV%%9SPJ^p!MKxeg/~'嗾`O_D0 3>A)zLd7Ք7p�]f=;;_, 31aF0Fh�$)~~YE"S V2n�TAiy!UڙZ{? ,_V ,0K5[FE^ܪ}?$Xx2Roʐ55'#"D<DDmB|*i@O6$}P]˿R6`CLT;u_*8YN<�‹?\^^Ml:T0$COS>7B90|cMeA'lj *k6ry߳?p_m5|V~fWxTP"'hM<,8^Ssp'`3ޏ~ŕW%Ecg?qzmJݲ>7Is,C.Q>5>:`=٨Km9깹8B�l:ǰlaGu2y _ מ_^-Ra@�l]YuمA� Db�_]XUTW,]> $g^zmG, ZwWVMr!P{l馓ϝ\ʿ:w'.Yf}cKy4c~֥C9hq_7X#`KԦ#n ryN?\몧'@?5 un{.)1 m\*C˰tN2s`{լ*:?|`^De-�x:ȇU / !)֚NP_7eҌwDO>6jM,{}-*PPxXR$ȽH9]¶D۟�cg_cnBld9c5P5+ w0vWWGT @�)ǻ:U4]#6("'A.O>CVR_s4\M}^BIh? B  Ă)iOp�!l$6X1@Hu$ DKhM JA0-p9a±~&1y EPg l�ء wWsN/$I-x[� H� �j CHUQDu`4om,o Gw|מw=~C{Ops1\90$U*M0QErbSv;(H%i(%Hi011јtlj[HY67_ys?oߞ޷N~ŗ^曫/nkk -y4TI t_SC,mQ wJ_\K;J1QNCs�@m7)IJ/`*F. #_Z\o.k{F ՂNH�?.bI5hjnwǺdրl"W61?[V77?2@<ʰ n"lXm[-]-Hڟ]7ͳ:L 44̥. koҹd (vٚjM/Ή< p}/6h[mV_R9g=E(C<([g 66I,)Lf7N|}|򕕪9>C~~e m,77s9z r"Z[ʮ^bMpB5Gqюaأ`$"ڟ9$3i"U֏zu껳 gfS`–ݽΛo?>DM6CEs:ss쵼ޅ X:c(ӳE�xa~0y^-lidnd߱:pzՕmw-l|d*K;:V]6<wr> |$K?@D/=\sP;l奄@8V/JXW!vO8GDϟZsB"!$,L}Wl׾LfsV'<U,FNXS1xI.v ȍyrTV!od*r򗞹Q^MLwD{}ٺ'#{^+մ6O~;Mk;�B-ao!R;| ]_t~GgT&m[ pLao P\=tnDU^k;0M_(K%BVHtjEpe Ηh4!7EV �!y#`8B/?G}=9_wOgUz]TDԈS2W xG̳e$"WQ3"o}ſ¨m#ڮ%s!䅛v(H02H0..@#T:G;tIl`)9p]E}n PloYC}D8JęR>B D+pX;'F$&c$h w.8BH9BsGB#P炤ofAe(sF} !8*|hWb<$Xl Ɏl$*@򆐐R<OMM^tfbXr+&9"/fsLA$i'I(Lh<o76WַF+:OSȑG`+[0_`H*/~F i1)Xў $ŶX\]�Q"TR tT?355;;5=+5S%kK?y3?<wN~;g~?}/nS/ WlTiaA}\gj_" L[gvMaNMc8V. $(*#9 @CրR1׼{{c$sDzB-o]Ʀ lk/L,4K?Zyŕ{g~Ø `7)V{y&q FTշ� @�$6$E$ER2XUֳG33g[Μygh$S$HYw ޾RU1TefD.Uu$�<}>|_}ed2Q=#u7ަ^m>z%g}?Jt3wraXuZ +~̮]Zp# P5@+òS3m;7U'ys=89"�/>t+o}Z{�@l_9rC_óoq]W`R�Zۂ5ϞXprC1( U z7_w{ow2۠ sK, ӻx̡MNdW";+/_\^jADAs:\;Bs|{wxG1ܣ h 5~K*zb˚fcwMO?صhwg-z);3j~O}k.K`"|oo9uc~#3" cV+k_OBV`$+@S#<u|̏Fc|+@O4'\;TU'� bDf!�Dg'^ZU}wUI' Bll!YF_ó=5Ro~}lfikrrDvP>bP�([U4@ǘt*n 4vdfQI`iv%, { Y`T^p=˟(PSa Ε T1RH7l=53&33vfgIUwE vtBBmn r=:ja\~V@G]l +{R~0Ow�$)'tCQ{INZ/މn8p�>FBw=qbTL7b6p(<I):A(A΍E/W*xl3 *g^7 u.M �߰(u#q`"B -̟2e8@ GG !-`1Z0ի1P J70kvYB zTmeV! M9b9{b$ƜX>R' !ON=y>x@b0Se"댣 +ZPDkYZ-}"-)Bfmq4|q�P ,լp[~5.6E`6* hx4ռ-؊v{8toF8PJ;!bZ(R#NcӽmS3r+K$괣n;N E�D#[!@yOߖO0 Li ! !2)JxWp-Ǎ|zltKsncѾS7v{Z��Q3ycUՑՆٝD_\! H3&eν+0;"|)U/4 YLY_P޴pqOR_ԘU"OK R&t>wou+8jޑ\+u5+_n=88 E)'˄O(U?0N"**%Oδ}"()M+]9A_I�_r\<xe0!Lӱ\ϟ</*ácU _բ0fՅK޸9ZuV.` c#ʱY?ub%'j�o &YWǾ<H,N!p^x}? M>آiOl~mQ?Du v;+jG'\8`Cq| xo-lR}�T?ાw)<5AOGIp4w49g(T|p{|@9PU{)Z>ڽo,4SNXgzy9p]F#JFbb)0?o>/q^̱ PVG᠖g7"8T=ARN*Iw8^U|q\1}G? +//fwv;xhZ+ R1qIXm+DMW )=Ų:0︂'hdlǮ! U:A|r,W~�%:9 loV]B/b/ & ʃxwt j׵͘/}RiNPmXw\|ѹsHd!:Sh/Y1v!yצ^(jj=|Ƕ*T5"7f!4*BqUUa0 G_Ʉ怹 `<"5q oNFP"sn|β߾Eч0P!f97gC(E8˲y�|o5s5tP Ԟn<FQ 2!e36pԶ;O^tny}ymD#L;1cIF"L GWVnDD�0@_4-Tn,GBDS �@iQw:(<Í`#[YcA0l٩nloP�DI " PRF09޾71^X^!b"D*P~5o;em5$B$PbNX< "VQ*2D#mʯAQ0k| T_@LR.oX�8FL-Ym: u ~geadnݞ,y}54a Cn8O?@Th6DL�w{vv rɞdf_sx)@Y$� Kk;_:\Ckֻg^zf;?wIznm&kZ]n<8V:!T5ع2k-OF8C?J4qW`s6*j8Kl<K m;x`/_ %|U�{*c綻߷Kx 'c!~t7DE5WңyFϬ L==wbC@�BϢJZTX=e+qO[[8V."̎ .ӕ_O汭*t5Y+yG݊�8jK,| )RTͣ񖾳-u^]6M�HoOpǞ*C9hi<Yu.p ;jh4& |UxZy/뚩[Hhy/_,r',.^(͐7R7+k׃-Tx�]}X7aHf5�P IYW& 29|d%1WE24vh֣6zbtznE\i8@tuh&J5 #TJ sΤЯT}"[<,k{'e*0G{`O^B6*KiP/g S}Do2skODԋ8?Ӕ. >y<߹ q0ΐ+iD a7gEΐ4NzݠkYoQ dL{|Pͬ1[ @عS'$V`b LؙbхR`>Y(5AvDטF5يN�iN(p*oSfRNE!i5`Fvw{|lln85սxvmi"DR4[ 'LUz7+52Z2�rQ$b</{E�9aDdyei6Jt#Aob�P@-H$,#d4=Il 'q)WYcYd}Z&[+E,>*#$Uxz.-&竌d0,�]*U K} Z"3"E/M( *2VR s04H e,lW|zF -3qXIrޭ^ѫjI Y$$v'n@9wϦV<\NteXѡ2Lf羽p6P ֻfCz]nmO靕,tj*@̫yEXLbCq|j+TO8,>6_)yu(s`*7 AftPz{wn2Ȟ~Jc/~]XZ_N;3v03@c䫫vd1i!|.=n)жcuܨ>p ȳWѰj-u �:lY?WZ$�(Wl s@!5:.lMwxd:ᡲ2vJjEq9{t$HV ȭhfb7$_y0),S\R0d K U<w}aةZ5iB<j3B+mZ Yկ.*<<*X%_z^r|M8Sku`OJPB(o\N !aSMl.rUj\\Ic#D@!܌>OdhRx'(*d: h l/0j<A"3Qi9Ϋ�6Ȧlh`[:wY^lP* Baq¹�c۩LD�yVR D1\o*/TxT/aP N|T_Ͼ8ɞg tx>GAnT3c`ÑrP_*/2 c݌W!؅Jqd<߇ 'Չ? `CI*x eF% <>vmjvGv$Ik}0AF8h󗈄!@N@9@�!bDyDY,ZDQZ:ֱ=ݍGny;u-FQ0Fp4Ͳkr{='L)R4"L SŒ0',G1AL"H4-BGh81ˁ�!($""$ix;LvS oG+JA�En~#06ӳtR�@PT o_C/UvhYf8+X2d}=oCop˳UTGtؔS_?Xr3̯,z~zmtXPAgWMVg0Q`[2*=[NQZ�`0j69Stf#uE{5G"kdrG)֝o0J?\>R8"X:�prUOD4r_"s?7uNJBĤ'vn{}X̫*_E"cfxHj0(T <�l6G!TЊ<']/dQ}%Bp9<":^�X9x+zxvZ;f,V;m:rñLJ�V3I Gg՗kڨ2/,W ㍷NG8!*m&Ƕ0L@\D`b 50e36"Ctt@*Ag�1V< hvT$G�{5.t13_K!f%h=]ԫ=&^l%<#g ҂TÁ\Π<+Z!HRSjyqHۆ B!KM<� 銰&A'loVq\ 7UvB8s5-ɃPTFY:1naN׊#9˂oXrش B9'o5 !D;8cDF.B<B3~!aOc?HMW"TP vd 5'M<Ai%BXj-rQݖOwG: T1Jh 4> CPaq:D` p�J0;T,N"DV "V}VLqm-UXGAQjgD`O osէ|["(TW &{ "T:O]r| Pk@U8]J!@=)BDDr(-IG"km0 }!RhGzcA"-7< ط. 1Mɼ`1B,oVhlZNj%IEuH�7oX&"<ȣ(J$IJV F[qvp__[_!sǻ:tow6ti=[H SL HQd*';_�[XBoJ@" #(<AScD FQ%Ii%vkݙu0˲8KK<'ʉ!IbYgN/4 mǣNEQDH-X}Qny$t~NE˯ "Y4& A7ALfPo9|N<̏.o]>gQH;dIϟ;L1vzc3uż5Mb&=ÇW>ӆ|xnmjC^t�N;;q"V&?Kgo Cӕs}^g7]\-? wځ_2H57*@Ɂ�%/2ŤO'0+3$<yj9BmR\:R g"ZdH,dLB�zdpɗ. 2wg[a|go̅mè>w8Ȟ<?B T-Bsk2_r 0cwpy1mv HG=KTm@5cUk൜�z 2@��^$D˱n [_*RxG{cw85" !R#d'wH:TqCat,ϲjM_,NKW؆Bؙ>+ 7 Ǩ7G Λp3&Re0HteW<f@`śm"՗喂uKtN  zIͻ[<4r,9,wDB&  W<]!SғG@G*al؞ o0@RdUR}GIh|&+0VXCl <+O eQG$Gy:#$` W!y>`3>nT`k`qdgy|yC'<Aπ\;|l2<_v[ O%5=ѯfÄ3B\H2`GFU'õ`GDr9|A1^/U-`GƑdav29F##ז"D6!z5Ȍ1lgʭ HA6nȞ <66666ZV1E+.+xl4WM_ HqD(oE %ŁE!!)E @l8tCގYfyFE "FtuuyeB{nIއ>q{>vӍwOkty#ZJA܁V+�)<%!JVD@)(#K B?"̭�yN9!kĚiE׈vj/nuiX6 _!B|(b#eQ!DyEP"!OtDYyQ &X!vәg� 8‹ϵ R `VT;Lv"ai !K1B@ #𭜺F *Rqv#Rt,ʽ?UV@83&&ğe2\V1 6ξ<w&z@дDەKmzQegL:[Xh*uRjvO^FTi+&d&E"6> hʼx Lmʣ$Lsw%ׯꦞ@`tlfԽ$;g+#.ukv@BeذR٫{WGиMok>#}@=ǫ#f`#ߗQyhէPQ}qeyϜZ*:fV__:"C; {0# u6;u|wg&|ր:ߺ/* Y?` ]s+wiN7}Y͌@5b6Q~ ,y܁>AT^%~Oݍ6qeiD9 3B-Z&bS3^g* ! 6*lx7O;5wYP0tMO{`� IH$ޠ8 \,c"%qow 0pZ<N*_b_7A7Y#NmU]hצ!e&&bQ6sy8�T#QT5{." ѱ Bx\[T6QMSGT2w 5GcE0dAc=@h`%:< 50Lk B3�uQ!VMz yIGr�vf5ȩq�ƌk3ՇPFl_+APFO "|1<©F0hl*:kH5Op]wh'Jx~_jd1w.2!cz4(I5<0Xg|YaߵjyLMjIXIl`\$ S}8$)Nw4pE27_y _1P TUaG¢-"`T0"c̣(Gʋ#`#H4iϡꍶk;{}cvہvkj8WsKkkY&Ij%QY> hfiNTԠ&�B,DihiĿ2�p\]8S, �:aOcE"@@9H "/GQI4(y1D$H�F0MCn;6=6;3ފn:�,ts7U7wԄ38I2r:Sy\o/8jpͦg۲+=с,[_ ={1ifvuAPu>$B⩍v-B5; 3j`ܯ%vW?uz[&"nuP{ቯ^_,k?XM|])4osum8=`jMʹR��4V:K?r|7s2tŧ�\&w=P£Q׊jxjlz=Qa|*<1zۚyba3"tTLwеdOOiP՜T.S-uoQ~KtHMwp}wͮR IQ`s0ȥzaW'J5#e^[kEc&-M hpAñ$GdFj[QHbQ\ވZ!^%`+~XsEtS}浞s6R1W!I_Z"'x׹ o8뀬ׂuf' }[vȾLX@d (,7HbCԪqէ_]y$c##Uː xxg\yDޡ_UGyqB)F la dUi/[oYFʂ̭VH(t$qsk2vW#0h4f9 uLS7Nvᶻ8:3 (^YY6?E1aDDy:Jhts"!0F#_W+q$VkܮeB J \dy>ʲC0:7h3vR.Y$KmIYAO�&C |75F:a]elQHQ:$*Єێ]�@m۽%"71-[!@j`3rtMzu媳N H 2WG4UY3ll&BUX\&X-We v-=$R j@N!Z|b_5؀/odh|xwpiu~m҅k WG88?4Ļ%b6{ʳ dZxb] 7cm=ҟyA TrU!ѯ^~jEzG%x;m;=?x 7|L?~JkMf}MT2lX kkϮWwk/,lYtZ�H35:ddZV~VFvZ:̽ݮث16t`C`7K>?;B%/12peEcjDwwFX8KDF69L Xi)JZD0\k3 !P7R"$mr2r`U1.Z$ʨ^}zҘhs#]PxG'h-{,!P%:h\ F[ Hlxr"{=WK>NE0 _g"Nj5lx !us]�А.)G T73 Ρ6\AIiA^UU}qi:ujD>!zāAW (l5!ys3v4-=AGUBf(- Y*�ޯQdJe`_ |aG߶8&8YeYiEJ}pй&.XtJN{|b315}ۏ{3O_:4XE9v7'Ie% T/RgGD M#{BrDjoF9di>Ҵ>@U~ v<==snw0'Jr�ԡ׷z*SFkW~_ev#e1Q=B|A dNP[%DEnr(GSgwx/{`eL,Bk_/tA?<EI5:^(^4#T:Vܵ{U7\uA40~PQ3H֖ vwR,$9;s`/(5R_^٧}O.>]wwGm}g<bc=hwkiZ=�*R{}@dO�ͳ"M_5y P!k:zx_ě l 6V2;�?w �wwG W/ z+?B0Kǿ: !300X4d񭺸ժ WqBo}OCş~FVζ~j)(T < <j6iJ(OZ~{ƟYguXƂm>��Qٹt RSVU߱vf|J,W2O/ ^v1vʩ輇~jyiM pC<YEւUãjRzQbA=L4ym(ʡR8k/CEQƎBA'!hObz>7yhU-Yl͉�:D!n7خ'ōkHrq ,6B8j`)"lRd6!@ۤ, DvD2TYOiX"ޕ,ZTeC�Ƣ!yQ^j}r!n= =AU]q0iq 7k욪>ȕGg乎g5V}>t`}p[ޢMwvL0�dY6p8,7 * *L]C﬜+!t(Ol4\Gdo Nھs♥WN_<8_]Xwzr|da:45N*\<WԮ8eYH/��M[1˲`8fg/ KsO�eJC^?qϙAGb{u Sm0 n{{Kޓ8|MrPm;EHnS�{-T߹7�XK>>�}�U5fZjCz+D�D05,#L99^fMo6E^+h U -^Wn՜O"V�Ͷm[İ<S\"`0ȽYZU_qήAϸ< *@�#éwjTX;7B{n&2yD1?:D&r@-ӟ\UY[Z/l@=8-Ƈܦg̪|2(Uc+AN|o/ԃUArV1;;;zxΛ!8=�oY5d_W/Sʧg[ Wkw*<Bʩ7Qi* T}ȵB;qBww\lK K5Hj?O(נ1B48BXp{{`$ qbщj;;!A7>krzo}{f-cF':TccBƽ)PE v5K `i8D!ka@zUmldbcPY;cA:%Bc<t:Eƚ;ϯ�Jxs.BBM_=nޢX!L{[tB{'<AgA0mOPQXqWkJt[NK7K|"]O\zCpv#B,]_ \OʲZq-cqjҍ=A6c]7JuBG6UI!J@ƲH"!!Gcj7 v@q@mT\ jէyrCW�eq` 5Q}TT7laJ+P  #Er=nG"!n}xq+p8DkEe,}"2(H)#bkzx]5jAIT[ @�<,`l` <lT ֨hXt�'In{^-BGQDD9kq]s`6Qai,->tsσGyߍCk- G|AHe!F!(G!O )RY_qA:1K`8GC&oɱnfY.~DscR8 c󥭐br%ST03u0&E =N,@`+NҎJkȤ�0>O+f\@p#pffG[I}U3-qz[L1Oj@=D`~ŃwޗgPFeҮjT+6V<tۮn܊̊e֐W#MH_Mv*Wq{o_̅OUg/�`ׁ_d^,,;q㓉k<kNOsp BBkIzQw.Ylg7tk)As,8V&�KWKӯq O^Mʜtp߃\6V}FdnEPQ}Yҙ?XߣMYƣ^q Nmk1H]Mxh5)!`k0LL&[|jyC7H!]WHmgoP`ѽ!N7S֞~d>k =tHGMY$+Z8bgu1Y"WW_A*Ip]<�0:HwwXO*�]W W6|b8Cxp1(QQݤKc'Q~H<CJ5t3,5$٩oH Wl`PB_UVb !dop<A$[~{q\lAsn rTs"GKik$x(/ zIJ $,ONH�&`OC3JK!@dS"+bna; rPzäg4dv`C'ro,%E dm5ȶX+(qYx,_#v ;6l$MC{ݫiJRzoa6ʣ7plYCKcA6Q o4KJ0]o6Hhbl"_FY[9mb{}Qoc$}z65B >k;dH �lgt؛E"v4p._X9kJв1@�q%I ~m0\h49{k]pnsCl@ˋks Q>!WB"P@@E 2kz4ĴF]AmQYNhcc4Fn86LN:ݘ XD>Bݛaqu3)ƮF/<rCa_b.'ޮ+ 7C?_ZV^6` Ut7u|GʆI-#SOimvn~Lv"Q]LËt׺ʹdWS"ɾoX"xq/_J`xF|Պ;4nblԞO[hDN$6> %ۋ>C*l=R Ee޽ي_^i76YN}-x۞~d]}OʦHKO/,ț@E5X{UQ+/=P}(6_U(�o<pf 0 Fpz{oЫ$a1iG?K~򗏸*W. *9|3SUuz:$ :31zt�]"xsgOT(Dm`FyCm{Ez뭄ew'+t[&3N.(LOҊ |eireT!0T;8mǁ _i|3a 8?x9}9P<_<_Ы<C.eUNzj"p'b_+x.;y /{Sl ~B"ٲOd@9,t)<"˅h5[i{ؘ;F3wUp۾[}+-wRlVr4Zj7&}{MXF5Yl|ژMK8; wbf>4 s٭rlf3F DX.&VN]^_]*5/e ;؞`>ωyYlBdxRySj+Wh9`�z^n< |=Ej6/J�b$(!͇`y8Zqwб;=Tί/6F#d4!!ȳEu"R=JC(<`H }|mNNu0)ʀmAjo:vأYx_ϨT1hyDDm ~ɓީ{{u<v=w~˷pimkGvUoS"_~ K/"[ŝDM$^;Y7j5YN+&ah;t~ώ maJ-CZ<m:… G'LsSS֩j6~vC+;Ef'6kJV3To-]YԞw~`U�m.?4p`Hd=bUqx /@tex7sz+գ|&ej&fHZ$ itypYɐ/\Z[U߿?w iQh N�xɿ7oܱRZ6"2^۪kWUg+o~@-P_{vO϶~n٩7gv;]9<@H]|=+@uӯʇwǒā8)`C$UͪuIuS |P;.5 rzO@hWdBS\.pgGo/ZѰc;K" 0gIcy~ՌMWG/=[x驥WYPȇ 9^{LXy B>y:3\KBH] )d2di)N!h| F!EfFW]c+z%)0ޣxkJd*�9eu\U�+gٌJswu"%g=#'' &RP阸osѵ&$ +&({e\76WTW ͵:m}<Zۥy%|:Aj$3BcGsz@�Q/JU_͌W!N^ 3Æ:,({Ջ* צMβ./foK=VqqEqw:ɉ^t4pq(HDQqqz-)i,eyNqqG4Zi23[qn}CΌmCj`i-Q僜22BE;:< 8s~? r0Y]h-`l&۝^ 0̲b^r̉wjoF 1f,|Q%;MҊNՍ1A3ͼv'/`!0=#8޽~uoiެk|t)Z V �zv,/jyx Vfwf8v/<Tq].BSB;;#?s^6 u\a`ѩֳ,ؙXC?G~OPGx,0 ׾Dw,zv;W^H;ML  '8LXtH[蓿pHdjp[2;J(p*sgJ@$Q_TuƣNj&B@#ҋ׫Ou$ȍN g&+s5:�J�ȁ BO|!Ⱥ� ߜkx]\鐊†t ߤ:[I^D)%B[[}?_oɿqdb:ˢ4U}Pϝ$I+z'wl!@C01uOA}F=xMwL:ۅ3#f'G1y;gMq-B !^ګq7;t8;n{@!OIQ,p3g `wu#{�c-Y7cqDDjݐ.B p` �bU)TYtȦŁ!NGC@ŤlM fZ'BBU<E�<i8\#R瘽m}5ޔrJGHcNTP}KֿFRߋG5SO> 8b`4cPZIFhxnTL BAsbV�!AO;-lc�$Fu:!yg$B`ٷ"l$ JR <A6 $T( <Az"V@qqc.*M%BO#ļQ`yjh 4> CPzZPpYQ#B"'\�lLGM$B'(Uت t0?RLTT>a%ϯV}F6W}7P\WP_6P#'Q}2Ȩr| Pk@U8#+y4iݥEyC$q/BƱ !*@@"UbdGzcA"De' NnqXu[`m1!8VmXI[VvEE$I8)둑k\z!ƈ bQ FDe4JA:\X.S<{]};q3ʓ. a1 y4$ "F�:;1gsokl@C( ˲tF"riL V4Acq2*n1@[M<eV*NPL:deLV2& +/e?ffsg~ ԇ �v:6o.ozt={ e�@o+E'YF|E>]ZObW/XlB^_/_~vޙ)P{ݓ?W zlr2Rܸnsŧ*|ChA4Bm[:.[W l??}?7LmKcB03^_KA,3K=6 Q2Dzhbegρ_՛o޾CG4JAJQ " ڻP.?H܂@>Ϊ"..e<Cg�}w޿SO><%b0H>P}hyFO=<׀u:sa(z+ %Q ;<h�Όt,vUD9cҙ/}ls'B_*k;50j�5 ui4[OMNyuA?3~|-̎{,#<v~V %09RcȞ8Bpr~p䖂!`ʅx]76}؁ rA`!õCa,>΃ cQ~-0ϰa~ j=pd]3q'3=UQlq~pzݞ0IZ<T'x3d]80aƮJX@qCPa 8 Lv@S2=0愙 D/!, j!Zl7 5v!de`qp'MOBcAX lC WIgİ8g!y� BS}.B'Fm-< )y2gP<Y 0kh|- +D<p�9gR#$Gy:#$` /{G oR:d'=Cخ}5^+bq]g0;RQc'<ASȯ ȕSV>b3 I`(FldBkU,�)yDb{A\OI bxT}GtLA G_@"_Shoc$82Rym)Bmqk;5b֔[A$zÃ#5Ii`lNS7 (PkE"(` #�1QD9Y>h}oDtvWmw:x];u%#\(`DFIc@UXv�u_gZuNQ $Ip07(bW5U9gJG06He C,QcM{iF1PBRl|0XxT2al:Ϻ2]#�ð�ΪMm nM4H[v%+~Y3R߿^z#S3rSG/Q"sS]͸l:#t?X/jAg@Vԧe4Y_yv7c;wM`l{t|lkBFa#3VܸNX/fE1iU$=[nzukvh|ry͝;k~q}?8?KwDIApf['[k+)ǻ[ZyصcQQR W%߷l:@I9B*POyj-U 5"C$O}c~e)XZyl"V,~"spr,-3zC>*� |M^{~i^STO%woGz}171w6W}Lj=`~噥Gz'vtv߿f1fV5nuß?9_%beآ1Tנz D�ݱ?7iE!z-ЦV;zv0[4"'~v/r"[!ŞFb-7y|@xڧMЮJ slM֢C,-!N (P]; `�~K=hu0 ]@} NEs`O}k<|a.h;;1SbGnI,\e] dx~匉dR\Nq>6xow}=6� ;ѱ]-:6^x>;b7 ,S2;B<:@J(pLzpOPO-i.Qs{X&Q 4 DC"@G�RJ_ġR=-5<-TR LN$Yz; 66ȹ1QP􍐜*5)1Iq$q+p<@d}놋Sd$= 'd`U_c \; G͜ș'Clv3O}7> β!B"7U}zCU �B 7r`}-AN xCJ*,O\O U >ߺ@(:Y+2VhT1!#~$ 0ؠl|gĮePcm<5a%Ѳvva =$:T mܮKN8n۽^8 q.ׇ~V 'r5'ʉ(/sʉ Rb !F?X_[_Y__Oi86uޛx Mlè3 [dQ6('r!BKxrNs^C@7䐢7<nx[ t6,SuNA0dEaA!1R@}f놽J0¢^l] @L<\sizIuWW3tcԫy+b FI 4;lS_o{mC v/{~pP{Ʌ}ֱߖU gu?yr&1TXgve|h}m8m`OMÆҙӏTgw~r"pl)cF?gnn lTKH&svȿxL*O~o؃`~hMǾT+mwܻ-<y`޺wLl&/ayƓn}'vać;Srmtn+=�T|ٝ`3J7+ݬ[o6}KU<禛 \#[Gcּ}.9u- %OF�~ўƜ.b,ko/LtlſwCwݳ7>z}ō&8=_yTAW[mlCW|'xdҊjmwu;vw+B6B|©g|Mo{~$<_< ?N�|}lq˫Vuf׾O{jқH>7~uL�ds_t=F?12 [q+E ) oٷICbW{C5lj5lf(KO.7ជv].[6U.L냟5u3(\>W;q)-�uRP7UV)zAz �`vW#?u}3Om}pWҎŭ*^_{3"'QfÄWd a-R(XU}dlo{˖=d/B.(-JB(([r:~٣=\90L'bԆIwH[U}Ag[3U@5v轊8"{"O[+oxY6-LsoQ|4F RUvkgsA fvT 'Q}YT}ŎȕO^, 씧[I˗7 7@8q֒Q!Hz^~EκUEY+~\ 9DAf@|wC o]M ǰ6'B Rz̜S]^,K|Vnu$)@yYpǼ^f@TW xdoiJQiY?t` w޻~םwx=I6XXl6pet8Li 0m"ieYf0(s[!S�@7JV'v0)O</A@9UjoNJ&C *I S>}\^Ķ|f]q>]O|/Л*07ny}۳sO>yF_9>iVW[Э2>L0D{St:WL Q r+;vlœD{Oᵧ9wSHw h={om!@} h%`Z>wȱn">w?!]Q{v;t]2H߫a8k_~c-'n| Kl]~+~dOEB1N>;Ol pc8B�a8wg 7?P3m8O_:|>vٍs43h;߾N˝zmﮘ:ulDO~k 7"HSz+<,Ks(ێ1>h1b| ÷P4vm_óqGn/�cɱf5thc-]_MW0'dl";M϶ܪx,4^}*ԷlGO\y驅ˣb?=߻-Sj鵧6xኝSOӯiy`inPn/}cweMPqW�BW>s/Ӌ??',WN<kPht=6>O&:}LG_z#{+t374ʳo,\6N@4>ݚwxȱ �e7/,rlH({h}g56bo,~{W(.<K|26;~ D�S~wyK n:^TvT>A=.UcN#zD|wӋ;] ֌K'XG@qBƷB(`Hk&re疍m _XFe5j`+{/{TTRr `]!"T/GJgQ+xU!o&5"TL}3!`n u;ͻ(x3mL_C!P3*Gyp| @Uy?HM3-8 \<88GQYeYV+r'}C*kɑ IVdo BhaqayaIx^gbϮ=3ۧgΝZ\Kk~`JFVLj1Q(�8ai`օVoE@CBOƃ,<%7S*1sy@U~S"0}᭑ T5NP[]%Enr.HM4yI� K.gw+ 6i_̙94H'N鿝pnrK<+o }m;:?b*ԏK.HN!aJo3g?4�YFέG1Nʹ'gUy9AWel%|26+z=Ʒ{?Fo<|$�Ϭo;z '>ؽ?,ݽm~lTo}8wrmuq,5џ~O=8s&�XY_.ٟi79vϜrqh!R#rCH "^ݫҏ)8U#f"w*>'~\}rw {o<~ඝݙ;ӔZXd1Ocߚ]7G=w7x$;_}x?$=y勧3Y|]ŢGGQOC;X-NpP)*\ #A!<\R0=\^Y{śۭ~϶ٖg0X�t{bUIFϜab;?x?}7<xtI�H|an4?hdbW>VrRTjm%>X:{缔gGU pYg\0wێ3:a6)  %:ʶcwVHķ߻v��XO 6ֲəlծ?_|ܠC+/-W29tԡlpme4>ٚm7)Ur+&2V0+{‚]Bx/,S3IW؍^+\:c `p%�W *nZ=}"~kA<\홺qk!R%[1vx3""ѵԿ !eQUݴ<8jލOA]Ÿ鋠O| />REؤlɣC ȁj3ŬUrVUƑӒjT(u=A)k@ixx~U}R@x3}m ^*cjPFE }r!~m�(n>8^sTZ$SF6i욪>ȕG?>Tx"j9 UX_0\t{+jDDiE-QQFhi@%<<V[d)W)d__"lDXJ'J!QJIqijzvkOLl[>w|҅t6Ǔ^((d�X���IDATDZ9dw4l[C�P_3TB�O$V <Ͳ,B@| oo&�Ue'? 8jxyfwA;,# }Ȱ7T�!]y j?<B>\T�4K(60‰3{vT6pǞ^<{xHD)»E�}FYY�ϯ~?ɿvc1۵ԈfL J|?\`%{{K~?_<tTmcɑcN5!(YZ!g߽⋭vރz?9Oe@^s+Eʪ69=m/p_k0G`3C̬Vm)T˄;ɝmT6�.?6)E}Ww}>k'pfrNOt�G+KW^eYw0kKk/,|nj{,_:;P10>?U#�&+lQ71})[5u&_Q; !LoxjD;_|ßdW++`Q!=&\ڧ:'A3_{3;:bѝݱϟ[_MqB^~zij}W/ZD;ju`̈́rOS]{߸\ȱ+ r!8rG~W'҆QEP v5K ` $_* O|ԶvCKzcc'_Z)<n�Nsoy<>:o#\i16ꊅ srcwU'|ePGi鶋" FnYQϬCn'ZKO,gg¦.nV 8n7<uEā$m{m,"FB1Z:XHs#BXE-B`ǵ2(-7.6B}z2VփF@T'+K`xBX=cA8BW&=*_x`Ԉ'zR"H`DGrac Sn@ >\_l{-ԠG1O\Ɓ-LA.TihX;|@7+G'铅Ѷצb>3L0}1v!q=qtEP ʃq0v ԈA1ƑdAA5=.G P +}֜߯ -*� ilQ�"J$I" \.2uTX)!@>P�r(J<✲<($Io2۶c N,;8wqu}e-, D-@8+j?؍ ox 0_%t`|"oE1,r1(!MEl潷ЅF8hd_'`gV[XW2X-/_'aUX(�sWv~<1QpGCP~ 5@@?>{ R\ƈAfե,vbc=;B!W~^~v.xan`X�g/>Fxg[lJd>k4vd+֚ wƟ<{CT_:O.\X;s(sLBpyߙH,X"=yoWZ(KD=gmŮ`z <-J1s t")(a>荘p30q~ |1:IV!"0?<ސ<S/Zan~W^{aφ!0v/WN\w#$!#K\E:p�ct|.WNB@sxO/, 36T;߹]Z/__\_͘`m_?cdB��lVnAs+ h(aC¨2to|A{SNeDA x"ё\[ N$e!D<B_dL00bd1>(C P$4;-qcM_C$^ټ(B(B! I’9z8Hm61(1~jJd7X)GYH?ͺ"8< �8z dm5ȶԈL?K@qY<߳8N>`sz qRRaH!cpؾLf= Ŝr!a{Ayym䃢jL uWe{Y *L7N48UKȥ@Z 1OXjaEG+$YbY`,z™-ohTi;mTfBM⭾ju:VU.JC窑j (Gr,_Š9aNVJZ@QK]!ER6Oo#z:z{ZW+sr(OZqAQӚ=U?5jh۵9~{ ;Ozc8A}=(JbLTV{4#?eLlY}<9WotvW5Լj'(0W>+H38u _?yu8@WMkibC ]#N_>ǯs]r7Sn(5:c@oWEKGdQ?+؇+q.N?'_]. ^XO-x Q &v�mvcT63:^/>g0z˫=:LTn-&X9g|Nߎ3ZDd"8wbY{Wϟ\oD:XCL[F4fbGžo`f\3'Lj؁1pp|?_yn{IN.~ƂΙ�Z׉�BD؅K]YF_O|m2sO>|zNI"lCm;TDxf&>Ydt#JR(VHƒbBdIn^0aSg&  ~7`Գ?zu61vӯ>Kױ3|{ċTHcy~Ռ†3ybʅ <}7(C1sU�곊[Z5~L*xJFPubPqXlvI%!b[1b_y0'297s#(/Bl:�\qKQSm.Wa܊#r'Hɤ8zӺ nNmI>Q'̢O f|D0,=)cbx"dt lKhh!)N\5$ͮC URB_jwђŎ]AkR&Bb֨>>g=` J`9~ϡ'(G3 Q*@TjЇKaY�l{:)=AH7n`Ay D! (c8"Qa*lxQ*JlJy<qd<߇ 'X "3{]Dp %IT&u᭿[-Ԋ怋qәvwy-h*SOX%m%uP8$0rJ(8 me4a:`_6Bw5s{Gn9i42_"FQa ydɨ[m92:N�'&c$y$2 {i׵1�s]�`{RGbG0voG߯<k i?\ʬѯCxank3ۓ_^\FmyKKg_xk,m7+/l\F_5~}_wQv…ttl^Ygu;o/uc{ks p*ӏYGrM*♚1w:ul~NvwZ6gO|k][}ۅSKm<{@O{¿h3gkN7ЏO됿][:ʿ'hsk.=c_|j'tmW.h+gVj[mmնVj[kq$Nv:$I88"\\IDD9u)b(ޔ(f& �2t4ZֈB!y)i( [dY<Lc{÷~}vLh8i]@YZ핒j.kGvۭ(2DD959f-*͋[nq'�e>ƴmNlU- l)TݲߜܧO^eoŌ?@ �kߜ:α??W՞ܿ=pi� >\&PQ7 gŝ_x򛗳kRv;{l@nOh6* |G.#Τ_sO\e(6M/?w'Gb ⪪�/e៾r!?wr7KC&=b�,/~f| ?''P;M\R[A{{2YE9.★t'R�TIVY/o/>k]h?Zw(vjYQ86<BwJ\V2{;O-Nyu vLؐ{o];J? <W|WGT;~I;SI mx= 87O~7ǣ7Gz\#g\ %B DTmuh oaډׯg~e!N8gDmF0ˡzrkKÇn{ <QiAJ @�fK$i�3xxPq5pUvM 0e~�?K=gԙV&WC_X]~9#s>4X C quyTA+PzQîp�fR56B-I[#�!pCVc1r <-Ah۞2vX90Y Y znDfs>$*D<B3~!ܕ8i1[\@R;"ƐT zTFW#W }5r�9Q#VCzRu*کp^vDT8b7 I> o.B~aCx =AE58r`3l:!Tت t<?/ZYP}!,_LIG{O%2C?z}S}GjμBR3(}5Լ^\EdBjW/P.\J^8oyH8!^(&gZa◇t9p?q7<$Bx7<P 9͟&=)7A$l82ҤV|(IvjZV" PQ2 yPezr/a�((D1NV�c,dFa>\Sә]mwCw}?;>բx8k Se N ?nX6@RҊvq <,3j\=jX7yc~򐲮DW8#B1]8{@L!*X)/D1 }.=O;\+='uKP;èڡ QWO/?o^N��s_s~k9W>'DvW5auPˮk|{}ۣxsvh}-}+m⩾v(TJf>dqݮ, g{0t-{/g=8\矸Ϝ_<W {~pG7h?K_ylvfrxKs>ޏz{wn=ե;B:}?ѾbqO٬:RS0VcLs3:¹C:jx4ӗ_{sYӆo=a?Fz|(aW y8�++ ZV,Ǯ/>K"pjϟO˓߼|ԆS67؁x2A{3#JTh?~M:ptrl<X2:/~%1Am*@Mj6BB^xGLlv4.]ϯ忨!&te?8m=qf<zŗ^Z]ş6K+;ǽ+s;#NWE0@*Cm&DY71^>5ŁKlj`,&]CDx3tnm~ ?\xA!5 3'#La3:3lTAC7vUzqW/}'zs?ķj ،$ `H"A-U̿FtN,#N''%8?(- qp'MOr0o!&[ !2FR#G*0GH!�mx'@Ǎɍƨ0'Z0 cMbC $?$8nTqT=@"[ }EsK+ O0|Cخ}ya+W[PIGU5>r:`3W+2GxU_'Ȉz 1ݲ o>kT}\u8<- B]X W ̤ c`P~M9Ƒg|q_r3T{Cf<W7vXȍG־ 6"D� joDCvMD� yQJU-޾9@ b�EfLb<<$D"ʳ|Y0vq#]흉'/_>d|;Uz#Wx'MG˅]&*H_zkj_z/z^&&n'1rs, !GnuO3`{^DJ4,žs'-6\P>dXGaUpw l+gǿy=q]WWG/wǮޭi!Ɔ͈ H�O? 3wpt:!N/Jw&]?Ջx�ƊYtKBe<KN}oo&oqծR,ӉWV.<Qɍ=b=T{yad^Ik.%yUTHe\"~e^cwmj|O?2W$P-מ�Ť h}s{,/ ^zf/\Z[HTA_Ͼ;9rԁqR\O/=@֊bW?g^_.`3zSߚA?>� �KsGp;{p,y~}˯<_\T(t`yXdO,�7\7O?r垇v ^<~5KTËO,%} g7.}Ksc c /xq#ع{㭓N6`DKW^[=ʰR )^=~+hKp,yjW* Qo|wN﹡{#;:2? ~ۮӄr\پ{۫^YF^]yų'ր!܉th(yBg+_gD>Svv' D3w`6-/,wzW.B@k'G\>aE*'vzC,9wh| ^3$+N=6o*c=ȕ[>p8<{bkkrbY呇o�09Sϱ:avLrL۳G>3_ mD؉!-,e\pmڍ(PM[.r!U,{ZJW8EF/'V z@~6 WyFXY,7"c[?pV$ȫD` c-"SsJ=PP͈  5BA^+{bl'j !Vs~k6a쮻'3pB@B\cdQT;o_1mce<ko.3<Vdgwաv}ZENi:FQDD9@P>�@_Fq�!r(/y"E a1tgB (L&ڳc>xjks'_taeeqmc8BEI8I 4/tEFQ'0t4� ^k z4 yޤ]{*-J)/|8t#jFAmoݡX2O+4ɱ%4˒vКkCD TW=N "{)t 'k2&_/As�<hz v|mj?~ۋ'W?z嚈pMͶfZn,VFln5jSA-8DQiƓxkZ8:{ʠ[] T4Ϭ[_+r÷MljO&cI`pRh4ѕa厛1 ظ&c1i|tk|5>heitW<-K\'c_wtkq~8waҙsִ4�ՉH'Dg8ZY./ /7sz+}JccRET4sTS;wz ON7#XKWtB<n<x{M̶?8te+D냐f??YZTLδ>cO7N/]lY . cGnLBm15Ipχl7 K G_#l4oTXo"%ݱӍluy.VF+g_*ه̭vPobcIpeЊ8Ukh:dtfcYKHF:<dYcyۀ}wwz{�j 7z:WKg~ nk_wf{ݍݨՊF|8ȇliaxưo;$rG'fucsP( KNs- Ը\/X)3W"f|4O t8#BP}v.jMj *]j*U {U!o"T͌WcgPL_f٢*PsMA !hw578U <``dtwZjWيE8M,4UU"V�U•ثUtހ-qڭ8A#jh'_|`#h'qn h$(#$\/""Ad9E?,G#%@"G#UaD ,UBqoOWhR"au-9EEYTr̲|mzEdƉ��3ƒGY"HW/.6[QNj@k+LUWև0*e^QdN$e#kZAȞGy9E9z&xے7*.PxRۿV?FWO[#ziְ޷KNv5RxԆ eKd}j+O/N붲0z酋g7ecSߜ۾{ٱSo׳~'pmDn֖WYf6⹾m4O inD0a0w^llni~v3KbrxStD'^\MխնVj[mmնڦZI$ɲl8F(lEQPf0:,٣7X"e3 ͉Պfv{əə]N->yyQF鈲MfyN9 <<8<ӌb�. ߗ@_1jurD"c2qMAŸ0#AAIs\8)ϫa %BjyX  {#ÀBKWgC,A�:oj�.iN*{2ȼn2i%NUybO9�[�l`˕ 4b (w*UMFv@z %BjQ3̬! : !zGr BD2[̖^/͸9Y:rl%2RQ`alICع ȟZ ֦.Z=%\rG !,"Wεg\n3@΃@^|U"|ӷQe@Se(# B8*@5!z֑ d‚Ա?*�? !2p0l ^:=]]VBqpр媀j}lڦxr{ȐS;�%7؊zC/}${MV,k0VV5TcB_2:,`؉>iMn4V1T0 E!@.&�B(:@븐Q&gqRF!*XƱi{)0:/GJi TbD8:tHCTrHŒ*g0mjNIg0¥AXC&U8 E#n%Ri 2q+HDj=<_;l(K� !VHmi�qά||E2fCZ1T3 Iuܨ�If `+@+sTW}KN6 rRjP?B/ph߮(W2q/!@>hI-D[1xq X@L�fAyRֵ!_�aZ$ɁapVe(`,N>rc!h}8 F[4:bC|Gf<:>5YEmboC$Ϸ.BlOqp`31?3[z NkU **tR r8@ƐaצیG<QFGA e"B}U'A̫^He$*@ A!1vtz^t:N i,ˊVn]!J<`0L3Cp[uwls;>Qky#[ϭ Di(D)&Yʢa\B (y )AK*`Vyr9�9"1qW)ץ1v:QNrjo/ ?o�lxȐL"3hr 1m.ĨqJT\SETF0`hG%k}Tp/S Gp "!*mt5~4W41z<,O|{g3^{TgD5BYA3!z*w fM D0Î)1GfQA8B6o>Sc ʻ0WSu[Ovr8@PO E GT`5lf%LT@o/@9.t[9.BB6B !Fd5p\Hm2Β�6qny],\!B .\HXz'*T7Ag(Y@2;G ^\̀L{'!"X,IA%C| BH"C3vζ 3.!#B!BtUEC`CaChi!{Mlg_[¼@c,m,&36It4\$b$Y,B $ctH8LFaEXㆨViȌ糽zV5vm!d!D8%8BX2E r7�G/8!Q<An'h\_ M<Al+mo{<AR{zKB:tF>Y(ŨLoS J`yR26*8v8: 8nT Q^(-=7vR}Aĉ!U}L6EhoE:Oе6g6Q}3xR"H`DGE1'5<_L;CՄ8$�\(T%G۪ #A.|m/B,a(V3Xl�Lb6:!dm6"VPgAW-F֖'sTOwoZ<_l�(ViHWl;f ZBj`]Vdsn|831PkFY!E1 QNI M$vx_9幋kkXoz5gyE FY" (Gճ]b+]e�AIjI@5h8N7u[#msof ʿ �E3&-܏V0ǜ sɢx/s]JZo: а+` -ؾ06i 1g:(8n|FϨ,jܹ.?< 1IRrǝk !Vxv-23RNlJfM׬/6 I P&R`G#:ֶM/T`q5%=:« L~}`M9wέ�D^zQ#!"^oH򰋍E3q<:LQ0Q$grG8Ad4;)rg^0l0+NEl3A;bTB,K!ҙ|7OꮘPr'T_$`QSa�iE蓟�BKp`3P%B*W 4k=B ,�!R(!  _T<TQ#RouAF!sW;NmH;=LBc2NdY*t-Lڛ l$s &dc}1=6 r9=vot*E|Ȍ[[XL{�lSK Y F9*\S!E�18';=ƓtH!U(>FIǍ AD6ؽf�97!"b>OB؈ч[8lɴ@'^5l>Dkya7*@̢ƮNNSqGќ*tw\tXsVƱd9jO|<? 8 $c8,O6ap]OPJ 4dl_&9B<mvd0Bp" 1ݨ(z�bxx+I +( Y~Շ故9wVx+Iq4A%6zC;0Ξ\?}gہ "!SV@p$nwlllll8Z .jDz2)2 0rȆ`}>ZMa#dۢ}G{g]CG߱kTEKK ,�0L`i,ˊ�r#�" r0zV{4"ʢ$JZqf"nvNQ�H^BD(WfD͍\4;/B&FڹgLr&�y.`o{ @M95Sꕉ=C^Yh%&%?d2󪹠ሚ5P S")W,VQ h_ wd.VcbjJDZu7(lb-zeGb> q-[$V wޭ)V1ޛ0켹s+#֍LA:CȲLX>1N<l1g㬊2^mO D{wV$ѤX6cDkQ͊!r+FW ǣc/:4r9ORXQrv+ a{BXl2uͱB,2(V2< :fNj+n\\mdW,=l5ﱑ&8‚J:zÙT}`@ηN%Nب]C(: Bebc$Bʎ7�Y"] q p^ Ja:E%9" BVӜmrN+yҟ^+9PՊ 5v!(A™ڣRN|[Znz TYwgueI+2lz~o=y5U�EꦜH:a"ALA%!nc&:B l$9'?B!=Aq<AR 1 NJIU8 GqTy;y6} [q{Lqvm8,Xf*#Nm9J0"x6vtx^=,gtQ,m{<Aqށ4hmO$aT\)BKlX 8X(*@bF@nk(@sG$<R͠0(ZQ燍#jiՀ>Bφ XHxOJ9Q -mg=_ "ٞt,3[؊4pEE28U-<PZ e)@@ԊVkN:&;;vM;xK+kI6㭸"W~KvSl!r #Վ;-SqbEnG^D(rEwVXR~,.}(.2&UuomնVj[mmնVj[mmնVj[1I$I<O4˲h߰(,lGQG9"HlY2JVwr[k|bz}v:9ų'/]1J(#l'Ԋ10""ʲ0/3< 6^lZ�((HZ$C;}~qzV;hHͯMܪ[ E,|kԖ*S- y7VGc]ؿԽtYW=5Rb6ƕVerR�{.Qq3Hfe&󽓪Y)PbCԽBnr-p8ɑRF?HE lc>CHyClb߃Yu(y#VV2qCz�l4fR0p-FdP@ J+=7�vf8_wSZNSjϣ8Nqb\ ! ց/B">[=k|QT*ŝȳu_^K=D{){coJuخ~O!+[P F,z3Xl dhf340 *)!64vCUEٶ־64\"DMo$w¹tSaˢxN9Hd?!c,iSKX{,å2ű1t,tVqWqXĪo'.gqKe~-ݝ 5Ex>3v|K@!(cF0j=tHM̯ &<$B㝷[:/1^Uvb<_Z8v`C�j YU 65Dq[-O8j!yg$a6"+;ͦ4}/_'Ƒ@E\}Wu*5;_"L-#om-gVÕyR6*<4Æz ؞ W}`481,Q?ƁAOGUGIG{OGdDV}Rg/'PCuݱu2�C2smMeTkAqdq/BI=w x~|@e_־,1`{곌Ey Dd C꼺/;7 sOJv[6!tV{s(ZVz-Ւ$)N 뚈W#Heye0" R._ ;͝w{}t{?29=n)m~1@7{-� s”QSŒl傷P)D%'J@�zN$"�9dpKoDL~ �Ȑ!Qv"&H4#CT."ڙتyd=B[\Lvd5}狈(EQJTD-v/A ë R9b_!fUFbq;5FjYQ ’s,!DW"[IqDpj"Cqr\5 o1Am-]`]sYt.�{=@&8±)آR,ߓ @;pqAI jȩ@j볨]E !f f>VmT�:UGBhV"*6BP B/c,-R[`z[SBd5v!ՇRU>1]Qpc2vB  H[caL41B%Lc)B,EH8%TE_#8E0R? ;C ZqF+j�/ V}4PeS1`s:YCV_$ t:h.X\3J gq`q`>0 sѝ%!c;*hz~O>0vTנaaP*!DVv ;@O<ZşBQ#'B\4%B䠱^0pV!0B`vB\T�TJO94"ns.-kBэpo'T;]R f"x6E_K`K\c]78zA^z$}E\o y&=<n3�fVj&#U5V}ԋ+ Af"P>t�\Y 4]�L}׼$A׎ IĜԜ<A|V'L=* ^'U6:fG7,H ȶ#5@<Pl[ 3:=#dZ1QmR-WMZ*B`NQ%!<K G(zQF(%Q{bbfgkc.Y[<6HiR@�GI[{ 6S(ʢ8b9E�,M߀VE�j$& MtM$/lqT>0)FCA+-=XGv7兇4` o,JE`"`&&;_k ^MF.MK)ɼ7$&^ _"aSw&Cz), 9`56e-^r ȩK U{{ޙ}Vf搫Y D&XBݍ*its�3-`(:2tIX[#w�?ktrpjK9{@BĉuʳD$B Hp>-9~χd%6*�7 <<l(k- 4+Wb�Zh7(0'mB8pGR}:Ǝy `=d�'x!tU0:d,!A7y¶RH!C ˉ�2.>am 2yA$a,( +F 䗟3"@NmI82Qژů$U&I$I":Č�'ɬMF$c<_`J1|�4B*m9B:Ao+zb kBS}`|9ZxԆ*37 $I Tl>xBas@yQu+(GZsoA@ދmjQlF@;4B|H7.HqH iA1gn}O#Jɍ#UG܌q7x>g(̢@6In8j!6Ac-{Epo |:`㞠`еSN <_\ UJϗ|)+Y0q0{T$ B`3<_ #/@W H|~ӹ\*tHB y8:[{gc1 *H> Owm*lO;MB<2v˺-WH"bTrWDV{(:$I9`š;PAbbZ8Lň$�FY0 >Ex;sokf$t/n Fye9&QԎNtg9?ޮD 忛|-ܮ!ߤ[ )4Gen<>�#� vx�qZIaq(4߮h|H^,X{gN\*eKq(֧R�.OV.qo9R.W% uDR7Gἐb\VwXsX2nf.2`2;p`"X7gL>gX5PǞϵ=Ό1YGņ@�t>;d"K0)χj/"DV -*[�S!6ȁ܃:$#< -m%P U> Z1z`d~(A ^)g1l+bD�b [`:ʬ Eς)V(HDl#6VeFHl pTDѠ1ǃIs˵4"70Ak !y~4v!hFwmE΢B&4)EDJlxRJ B1B!U. A}oۚ"T*W5& rx nbE4 )C4Cjm�*5 )@n"m"CRXDȡCYM\e!FW} ~A;6<g$"7aۡ@6:BjTexӿj/("B |p澤>!ۏד@V $Fc1ȵ'U"!r>I!'6BbOًJFO5n\'adGe"1LOY#hf1f\lq Ā̍w郺W>ܰ>}ccO +@$6x 'Xک'7X 3|r`T_O0%_[TYI!.9SAAC|+\@^8Uem>' ww@ŒAb{qq,E'~cd7f) Ɔ[|,vxl7]C$IQ< s:%/ "�"AE@@ HE(s@k0(Dc{7;ٓ˗ϯ,R!B+҈(FDH�1 3 }Ӵ{ c>W85""ʳ<M!F06֙LΓ_jq 9�I (pkּ¢{kעP,8Ϸ o�@-q0e"дg16@YPd{ &Ēj$p|~w Tx�K;4 {mR/mY4Yn: 5MH<"hiŨ: ݁[FJWq$s@&?М<j;5(oU к( 3Rp8``i3 !^}Oׄ Tw鶊!*9 47sk~aNO߁a$<"f*X NuDUJ�U"ѦJ ;[=�|ETpNKj#:n2\W]/[Amv͙ pׇwlifo pV4"وP߂ZWp-"3=(|bo6s}m׀|` BJd}Isθ΀|CDo6 E&lj$B enLXf27M<XmA&HԊR lTUAg!d3exV拢(ՏfZ5CLu;>q$5ELZEQּA$\-@#U붭joچqo(|8fY\NC4'cD_�@ B �2|pN)Osl۱w-xu nHFYe�&V퍷yit'ҹFYDI+UP،P jovUށc ^7#�/7 ;?,%7Ei <nX~ F�IܝΥDv#4v:|5'iLma?('MQrYv6SA�GUhϨe}dx!qA-Wty,bK-7鼷n̆kxwr_P%>1ݫpʙ^q;c}4"Y _ȿ7]ncW'XlXĻg֦Gd oNg3hW";çM77tmk̙^n"CR4 vb;mȈ.GGl ޖӷ8=Ҋ\ܸ#ϋ,n#W_BSŠZ vdhs3aiZ'krtBxP (!bfc(m"p`Y旋 ,1'`"x4 C_~(-T{)!ss6n攇g+24,5ɗ/'sM'€[@蓇烼UdKT7Fc١-BK| gXC므:̅Akx?E5zV},MZTHߒndqdb Oe|GJu[s?[d=7! ;Vle yжs_G9ڪBA1zoU0TyV= !CU{8=<ۢOZ Yc+rG;ZQp(m gz=L|x@0 ubA,snx ?W!e+=M,fiBK>`u @9|}_[EI^./ ]Չ^~d" QQ}!((B�"dp</gl8-簚wc;oxC7N`_Yd<1ڣRGN߃RLHvt:CwbXlBJ5'ܣ? ŮG)_ضhj+Seg^y1U׵cqQXCw<>�l\tCtA՜tUBvx 1!'Qe˦H2@Y**#k{#{*KxLmoi6զ~ Z>>("JHv8]3wfÝ^=A\)TzÀs GK4CHxsy9"ċ;@)T&_%]moȖF$.nvBP!AyZnn:˛T}nyp$BX/ G Fq`oFm숤)*g_< :@e�BH"c`7v&"g_ 5"D"_1!V?MOB0~:0!iQ>lm)TqIC$&Bp"{$ 8FaEH"^Ef<_6n06%m" BQ}"9~I27@z~>~Aַd*[v�Ϸ=A-ax2>* D.AOP>oPG�]R]kOBH Q6ȭ TZ ~%VΉP P+ZA WgУ"H`DGo |qXA/˝5!<&8 <rIQ;p{C'U +5(b>OЦOCl%G.k7Da(b!!rX7!Ve ,lxƑm<_V/2�,׀ l:t6Ƿڛ瀉(cDlZyF4M,G~MN5C!!vRJ$"1' l0XO4;Qud|jbvW{ۮSgO-\8_k0n3ĝ[D0(Dv}oN3Fƻ^�Ik*E�%opW DTKb@HJSxЦdHLLlNEMR#UXQ*bG$ {J= 6͵R +( KK`v@<0);dM<T3;X1edaWhd W T%a01H^+LڕcO+U&�߶qЈ@\R^E]`@[";l\~I_g "ݴ+&afB_XC#}*^"8$A&J�OwXȲ2X (8•bSΝsrWq aϾbxF1Q4ǣK_8Gju萅8M[9B6B'k"@#@hʭ F%sUb>R q'ҟ+&X&\ g݊30c0�+O�W!%8BB!y@ 4BEF!F<!(J(8`ta"БmƱC6!3hDu9cX0 @4A1>˰3%!H2KfOEqXC@Hc'!$Bc�F g.  s @,X# ˞^B`}hTU& .~MeR,IQ}\YIq:Gؐ"QrUUL`yRrg��sn CEt<A !`#JTGB,X}=)cwPaQk)4p#YnT>1hGҴTgPB�IIwzU,N�U}<Af<٬٪r9kE�i=AfVq,zRx6,βc8,O6a*=Ai`Iq ceigioe2#cr<&VR'H!A6ʾ7HDc<<ߊx¤~IEϕq�Wo9WWfq$a.; X  ] lm)˞*OpZq@jun[t:v;"� "f1(3KhaCHy2 Q_G5c3#[ynNOoǨ1̖Q,aN9ȎY~U<PDwrY'}NZNԠ"1*IDy}Jm}o+0$8tWP$0�840 f4|atn!F9{{ރ/^Y֯W`y\ג5~M32_jE4̠ lӘ,M Zks}obȌ̪2kȪre2n-1%[`,H % !aBX n�AHncٲrwuUfUN1};{^8g59}Ȉȼ[_gkg hb36 NM_}G `w:UMl?\Et7 O@MM]yձw9Xl3DQSoV]JI tQ9Es]`$6@_^7]rօ۫AFalKaR`T~o\zT'NV5Ɔ@O5lȨR<̦ sPx1WB.8Hi9NW Jaz"%G4HR'ƙc@ cԪz"DepgApAb}4B=vv b,HPs2KEƉd;|A9EL2TҡB9h}gS$TÜJh7'?\+m2Jg'�ήc,\@[�/w5o2YnTbWT9{ /ذ@E<'u8h)gOEvb_!B<f@ӽ,FM#u>1\b]yItHJ۰rGq! :q"L~Q>m�IXD`acɦ Z SIF6a>Q4'Yd`‘F0.ڿH-?a`"9p~d3(-E~$"tHP </s#8KtT9^n#A$D$'HJ>@9\XX"DYj6t@"uRzmuYZ@-Os>Ou`D+K8G=l86)*>6R7$ \@:;D3e2P%^WzvË󻁇sLofi{BL G �4ih"b"]f>W<}k?{ًݳu{k!hF*&im`P~N"blW֭;w7'ADoߞ%~`z5` <QY+2ጩt1iŪom#@ItɆ+2s{tE>ٰȌ7@ZVu#neNdLj/<{Ii#̅ Y6%sNf!-9G!m=glhegRiKUKu-)f�q,BAYӭ9׀3�VE&Qsc|δr"y]cӝث(gw64U ^+/1} {ZaOV gG.Nf l;О&uјT) l!vvvMD^:JJ7\#rze?谸9lȶ.AnC.[rnaeC�^*cbk&7|-B<(%ugE"eE+|9xL_c)BVFT]";0X*`ni!\9S 䥊E]26 ΀k=_3 [b'($ҿut\Â܏K #PEd=t7ѱG[_Me Vtv&U 2on`aZ2L1F;BYM,h9Gmfx S.`ku7T_M�;=ry2;:aAĦin7w]G|D�8� Bfs�!`�. � 6M41vnnj9iۓ'O^9~w|v݆ͭ6=~%fpV;wHə6i04a0 P>_:"�=Y�C+/o�R(}7G(Ԫx@ FB:u5K8N(sZ`y[T9kظey:dV|P\*NRq_̒%# y<]ԡ[j7Cݵ�C= Ɉn[۠ϸ2]h|b6F^* ֕e""nVf!ou6fӐ+}"ӈ{2j64uP+RIBhJ%Q 9r+\/QQbψDD"xJYiE%̀P]zlQMKzR H#5~%H/L; _&exc"~6yt ;6z<_N+?ռ.2Ȗsׂ"'d_".-E[gY:;Ybh۲ܶ&. & 9Eo6}n<"xu�)T;]쥙W+ӧQ<Db{|X!Ȣ5,'(6r'&y$B]<>*oi͗*W!E5a+NB˷  K{c/>rD_uks" > խ!߸lڡ+4%rR/v13B/ bI11JJ͆6��D�cQ軁pA:BmjVͭ~O~ϟW@H5p҃ tb^fzLQH5`>ϥJH+ӌOL㉽fS!�<8�)R8)to::)O z8;Tה?nTx#eԬVMu,~.|IX'SBR_"D.Z7퇒.L2-D=٦ R4,ENN(-N�L(8c3O"dcG�g W;}{-Yh4TY }g2VEQ!lBBͿDd@;rKyIjYS$BNh2ks{!__7uA)2Q> l9>>OK&sѦb`'jgm%gHFx*B@eC@8:BpaęD+$"0J;2}9ݪ:Зp0d!ɽ.=Cm~ebaŁ$Y\,k!. ֶUgQH3L;W #Hh!8؉aJ8;/G!ɭD Wk!(N"'Y�B!`Oa /b%eϧlIW;GSD\'@903쭀͛ϓ<5IF0l$Dpy>(>mo69G~q.e/Iӧ"A[+TE0}&<*tőXb+2>a(uUx`DR !r)_͹,rs!{9:<Y8DŽ3*jlf8;J7TN,$"D0Vd%!9!TBHja 4FUHLi"7)a-b coE_m۴}i}pѓN㧟|=] �"a�8(cId3N^0@CsEVk8:nU@|< Ҡ_t_~Ouͧ8ا:;Yΐ$Ghg拉1`9@N:= 9v'Ԍ(PӱЂLq2|, t(iNeJ�rq"fZ"BG&E cȩμ{A_ lK*ma.BD2+ \! D!t-6" �艐 c[!L!%p wR#D $l$Ėɹ {PX$`ccg5.rRC gj�``'p`!2Tl"a'5B 7Q ĤHD$5EB2,HW]Vcc!Hx\ LBI5FO2VP؎l+2+rvfH;GPO!Ԋ1}w$A*aC9;6! LNTˆ/B7GH@U&"@)4BExiB8#vNi r)DvRPL")gglchNA"x @pv*C$g ggWrs9$ W8;j:W0CbB<@ !{jdNPdA!ЈOW`zM8$* afB ) @d9x~AS XgK %BLTB.B0j!eÖ's F,H2s-I^0 sI9jg#9C6}uDH虾l�0J9G99 L֐v ؠc~ I  r9{G+<_"bq2d> J''LJ<_Q6}M &["(rRԊtcn6}X| IDV H|ZEgAR<?c_ /#$'x M d.Lx F4HH9ͨ"A!j{A' QFy k'KnX͔j#A00!WmjZݡZ[8 /�ka$$HHßH@�D](B Du뷻ϟv|sz7|yrQlN`Y=n#z艈� pE1oA(v>T/#!R�j$D@@ o{:]W_yGb_W0M`퍛>;\|v7.h(3H3H`}u˓[&="#!SbŰ$|=ؤ&)Ɓzʐp.G6.Xi?`SUD itI K6냈F+c"v&3+l!܀"L`yH|b"�Ơir_୯ᙛ :UeӢF9;)%32᭢m1Wcf[\>UjT $ט.%BS D@9ȉwj<:fx%6Pș{B"CLIA16DLuzLV"T`C1(n2FXl@d4B؂ O&46T 35/ C!DMCEa7g BdZ"ĺ9)9 >jlƆQ!TsdoAl|"$,zIPRMJ6u9":dxnC@1"(:j :T@!B-otI0DC YCRDHPem2nNc֤>$B>󡄷C\J@QKx~Qi(P2L|k&54H\GT$U 'R H2s1kBtT$I,6,BM_nBѵ0TstMO:G+(L_AH)`onb|H%6@[Б\y?BްsDEu,NcC%y`0+ϋS�;gD5WGmQ6>(p!\*Bۯ" D2*!9z$X d2 5 $|HptSLGǀcP'k`kl$`I$k<vq(l6mo>>F"-t$Bi0""l"E#=6@HHc4 RHb$$"jGWm~qmz?'??Ϟq p6Ǜ]M"bw](4شMhP$>gL�kHcLJB1P�j B @ajH=@U׽X>yxo6 lnMi*)0G! =OA4uѩ}F1R>k6aߣ\7V́((x2` 6WIeZ̵L)W2>_B^<BdK`Y.Jd)rUSޜfuȃeІɝg GrޱKk**."E aѷB&*R۠%ѯaN]y4WYBk⢕=Tp0/;T˕X_ϝ4r"A+kٚU[+-��Sh`b 6:](r7/z6qp!KDNjegݜS=2uR$pm q!�[*>)NISl_*uT,tH:NJ| zu܄=tvѩ^C 0MIzN:e)ݼ_d>./@B><?/k9%> Dv x";09!K  iC!g_QNSbY =e]*+ž"On;G!,qDE8 >V|yȺZgR4st1Αs^2(\d !1>B O=]O1 VB`:E!N\<Zjop]an�˨p_{ VB4M}?,]1D0;>@ / 3=ԡ Q@`V]8nk=>ywvϻYon^mGD!�QCO! HF F7d\ ŘA| YÊ �!`9O"Ba0GGmڬ)6NFT|!LWrQ�d?G&OGgb§P n΋0XlLhC>\Kht$ մ q0b~U=')zL+)%r)CyshS|;4Fh_x)|XHϷNNe5S"PyV'NF:tЫCxj`+yz_ʚ*4qQ(|L FKNZXH}yh&ϕS?ЭKd,�DQ[d;hj{P**ˁ!dܖ,$/{j [/,By)9=8{㝊t>s8zI7\&:\uH{*Lgʜs#Ys1%`U[ҍmxd=K\[cP{d=nXHBa/g-8|ZాEVN"]Lz yXPa~ɟDD!Gg1>)Vջ=WE0veW%ivG2}( mھKOXv%GO3#!���IDATaϰя^2-Q`kϘ Bc#]LMK^`*S"HxF%lݵ/'Iߴݗ9nj1Nf24(dlaq\95α8+%|J,mLY;PUNˠBK/˟+.3MI{P a)PRTaaieD)0̓јM2-F&ـZ1HDz#!BsG'콟x/>|ӋDՄMӬ�0}O�! а.9Rh<úk ϩU `XA +z@jWxzk+NOVM`<Ĝd^yLQaΌ}6,_,^ZsßoHb-1/Ȅq7y`7w¼ n׃pyYZÂK? <C2)O*@Ը8C~LGH!2Œ\~ Y!fL.5!�w@#Xj1'S"�X7\=-7Nɩr_ZB. bHyٙ9 @&ح{B SL\W,PQ Xr '(N_)" D";XJUmI]HcgRUU\,A\+ xkT]HZPή0}_>ONkr.$�uk%B\qԪJ!ΎEX!(R:x(5Yc:$ :;vz_;T̈́"pbHl`5`ORO[ _lK<' ӂX"/rvʼn"LW>A9)" ھSR~+�Yzŝ@ !&q  H4 ݣpdx  `+$ckrԱII!q111@(6}b$u<(@.6H]S8oil"LpPG2va`%u4}ٿ  Ncs"Ee+J)ΑuJw_楙5{1 9CE4n܏hɯ?o̽p8.KW kZ,kbVfY_>Qk`_ieSdtS0VU�+QbnmC(y xsvDcqjYٞ  fsz卣GON|>x??]lu<mi6M;*]vq|0<gWɛ<#Qt_2G0@"� H U>yNNQM,GHLϥK.,wb5sKMHʓ@_*_F掁40Ɨv@"kڴt(;ڔ7Gd! 0/"W&3r偫]1}�BVD`)3Qy* -TN2,ej/RG3Q�|zSoT r(eLg !&"H+ilyhG!Lsx,?!$u"k O$BƣNJHThz*rB DJ3Nv gxKb LA�ة2RTJ y=e@ Qi``gIz k'$ʃcM_"!E#"DہEQL 9!lB3E"L>hl4zBrN5#9=0ϜO8 ! !4 O2g$"D\P !%;0A)u Ҧs&)3"D#|8ҡBuEP8Ǵ;cQ%g�!{jҦqv l錹%l(,G`p WdE@wv$فvvZN!R8;aԬ/A+``%K $qoA%H$vְCQLA%*J/Ze'ΑOw%IyIHJ!%(,(#C*MIT$Yzf�<6g'bH 5H , F=83-6b稣 爜(7taT5Q$# ϢLI('A0HJ3}³-s,y~\`P|Vq:,t$Zy6˾8y~l0HΊ=(DKA.B <&W2*D FHVZ^KBɿIecorNwET<9ʁsF 3H3*1GD0 s\"ndg'rđ`rF6`].{c{á|6�!m7ͭ[nݺurr2*xͨ獣k >ًw=Wů|o/.ru"^o65H @0z}AB𗮄ѸKCavH]kW[j[<~C2W$ ,RMFLOy9]֤>!?z$X;{0_UBEOOT-&/^:ä́[VZ?qk%B]dCkz "cںPh^ XfmZ;+ UO*&-'M%P<PQP&+HX3[D3mYO9Q8 s%ا,YƔ%Fv3<wj-2ZTIFßSo�+Gmv 9`cJW'/Z)PHZiZU,+~yW2j68ڱC![x5+? /%()V7d [jW[dF3t wa5�)BkY.crO;;kxuT}JdUHI KJ/`1w]כb|<h_~�CAHjS#TpO:F KR5A> JhX")L8zVه$ Ήlm Nknj聍|Bū`1V1}�hT!uqʆd`;6C 4"1_9.t"gA.t0<%~$RYQ%lx~9V{N!"; q? .fϗp !JΑ}'t4X4gf3%B@Hbx"s"w8eYk8G i<mqq+[z^=yD;_"V2 m4M%_KKQ@\M=޺w'uٴj{uu0O0`&8tP �H� ^%4'27U5@�؋� "� "^�twﭿW7Ḡ̪}j5I!S|mW^*f0s݋u?kלrwx|;wo_鹕0ޘH 72[74KL^�wKy u�P=@5 _%N@6445WV.VV-.ҌoooE !:SW-n)nИf37x@r <*$ӶwBd[;%l eJ #<Tn30Ҕݞ#P94L\"5mA 2BRws{K䮋Gxw LG$. V,7C!أ]b Tlgg7?|BE7H"dDE~o Tpr>8{f@�;G9:;"8:*$μ!g>(V] ZP"D!.Y=l?9 S+#Yf2bLӡ)A-*&Uőћj)ęYޔ]dqK< J[fpP A<$6�$B`ޘo<)壤!Uyf«q4B-/v!5gWoqtl?]Y" ȕ& BEyw25@ݖD1?=IF_$Xoe,5 0w"4 %q =]N"mcDE/3W �[':k=onl*ӧӦ1}P d>B欽fW,- Q 7 ϴ. lRbCXO.L!>a!${Q>մaNyƠ::l$hMq"솓lZ"r'մ[عF-ER4"1a47Wo6zݶpv2нfݴMˋˋWWDWǧ__W~w_{ڗNN|rv..@f)Kye/ϐ ƠlRDD#žoZuP@İ8R/q}. .tv$oEζGAC'Ƚz&DF0V J,Gi& iF nW $B P1ENU?Q1B~$gH)?~I7GˆQ %Bݤ4#TnqpZ\k[-,%p3&ݛZ<Qf 1�q H,5bL`S& ˭:LwyVԝ/h-ɈFB2AV$ģ0e9eٓѝ0 P %2!HTOY'A[#c*<Y펥"OU qȾjn6TVS'_G!Z5*ԕݙ4}fsd=%kp7 sWI&�{ HKEPg'n9>A"s"h:T { rTq!!x+A5@)gg%(TqvMgϓ^y!']a)*3 Pr粽)FdkQ|.ˣCd* Lz,L$BDrrZ $eu<<?AD!eQ$~<Y٩  gW65BXd/))SUmIGO6SĴY R 9.RDs6}5[SUJQ,au1**moV|EsLLR`ϗE:S)4BmrOXJ OCOL!,x5}%L-0}EQQ|[7}(<^@E˚x'ߦ^l#[i 0k|'M'¼g|XSY:|儉2Oq攚pDO7m"̵Ni?+;oRH,$?/b^XjZnn BScFkh7p{Nn?|rcx?~~Ob{qW'x8;XB^D4|0N$2I1rw*b@@0樹;M7ӕ3e*Odwv^*MlӐGW;~# 4JLL 'U)HI꠪UMGJRa 3;oe3yf$F,4.dr6ϟG vY>AZ _2,\!Yf{R �!4h*+kt+U_{rp1=tBLg-L:rj?V]me!Y4{!0Θ{:)�9܋jWY"#2fb%mZ2QUGsqmn"TWTE&@8g'MLjuAT�X=X/Eա&jZjk"$\c7CaQ8B>hk"ۗo2IF.y- Bg'<wvv:)8*[Fze+ݏ<J:$H4}Sla !. 슖م42Z+}-v> !(F)2/!AF.^~X4%rI-dUkºN1mCJ~6}j˄kEZdU?y�asWEo2.P!&י@/Y7 OKy&Br\=.6}_hc7s*rV$雓^0W͟ϯvlGc}/EHE9ǹ"'>0PDZs>!j(N_k",*D !݉ |ܱ4󰠳m["jfۅ˯1 gKyvaӄv=vWb۬Vi�>_џ}O_|."! B:�!!a@�ȿ K:A$D@ @"RġNnz+L.jȇ/w|1\k>> i4C`8-;"T6wRYҜ!)Pȣȩ:c1"BB:D?Eul5d0%a$RӦpjܲ,0)hmgRӑ {"a.BD2K쟬Fdb+V j@"6qͱz"dxjs,biXͽ.9"=za=· 2E @& rg!B@{g�s84B8ȜE!Rx u/ b!jlL"$ o1Pjf )l$րG,Bj-^DS҈d Mؠ#ہ!ضȗZ1OY]Ngpv_B@>"_ J- I oՀ!BH!ShjbaF:4}ف MO5<:0DN耦pe7t>Θ W ds40TCLSދP+HA0TaĄ y>bq!C!ɜ7]L<_dE$* bL0JUS3UahIgFqEJ6 \aBt* $ID,H2L"DpA;nj 6}2 ߯3(aѦO9Ҵs}#(5|2P9H<?!ĺE;@$0qjy,H9(cs%,Dp4dX HЧtAU#D6}N$lKx7hMqM8V| IDV H|ZIo Jꫥ H|oqT $9!ċi!s`rS$S}-HӡP !9O*dB4!ġOEI9{tv'2�ڹ'UC,}*yv2lZW`H.uQjն+Ćvxu]_]^^|s+>ys߾;{wo~ޓ77auѳz2.RGG1EHx,{>-~-id� D0 ("�N-{nQL>np(eI @4"�G)%= D.ls^d$t|tk Mݚ}b*#_[*zxȔދ׃\mħPLj˚*N|Dݨ+M?M;s H68_S,G|ghN+BEZ9AYڑ ra9Ņ%ikA7B%SMj /x r 95l RdBy5x'հB UsH}xp `ftBiKlmfumF)  9Z<,j.RcZ FUl!(4qκ-av+SNC "T~tzGJO(PTJGt6|[3 CBjK:_*СZ]T[ҡ{Lp悔|O/M hq|s4w�*vJ$yƖ*\PCHMuxZk{-EnYY&gs5_\`7}stXNiC7SC`;$mLo=`ld[/rN 1 gp7EXPEH� :4AVN`KLٴsD{s`c-qv65kXT[>(SR]7A XۤxàJ"fb Z(uX;bss,uzܾƖ[8*%�=m <y4 /Vc׾CHi6q!f4YHt$ �H)vckxrνGwڄ0].#uCA@!`I1 "Q1FZg[_ /f@]n;zƛ'=r7 v }H} a4!_rި{_̓}5z( (6x[ܹ{{U#u"]@��<\<=VI<!N =�<C{<0WʘFPtT+;[QT{9:'ŒYI91V s</OV" BDn*Oq Ɍv5�`E- <>"A!6I$H\`CᣗEWFhA.�A~E`sFZ痫<in#; l |ٛI lo^ÇmP]Į2Gp͚-oS7)Sk ])(!z]/Z{ KR!}k\-Vfvv !�SH0}.Ҹ(94�a@`%B 5gT "#)(B0U^�BH!- /\,urB1<F/u,.bqstN%-PFLG/obgN 'vs񜣦C 3*LHoJg%x)֞B D&<_<жSv�5V<4Gkeէ&HJDr4e!hT F-bئ$൒cͫ,".D FaA} ,o_0F/>/R!g#AOx"4Q>#k!Ow"v9h UPac�9/s]!J7?�5'zp ^e_> l_9ǹ淧̉\7}f5#hϛ X]. ` BX6cxjdYs9„s#!Si);0 r)u);>3?�t$hI'l9 .4}S,VDTES5q:/\AĦi57DĶmzKjw]u0  C1a8ﺸ#m4 mܾ8j?wq;o}_7rrQl.zx]u/vEoc$w{Mh{T=#ß`Tt ��" n"}W'xѭժ}F1QC?cxqy:@@Hpџ/b1s22 T930o[Xtز8w�;SdbG ɫ(mɂsy$r2yQW"ON[yUd?2-"[u Eڢn*LGNm0IMgR%wިUmJJL|L޴AVBHV@SH b1 Le_\ ycIB ڡ&KrĥBH)'39#DEo^ ։*J{E GT r@�PN69J#> r2gThlr(B!"krH�6�%BG9BApmgz(>Vr8$iV�&~VN7Hvrvb& [2t!B|~^fByΑN#_B`!n0-2܁;GU#WС{ :$btJ˯>TYHg'(vv�89GK[+ I')|dq4jgg%B*!6oB~̴_%B D;T"L*4'EhWL{$SΜ|FI;o#-YT8,fq"d ?3"-B IJmgQ6d <jGgsI߫α B`=R\H,1}"KR"6S �Ys|*AN* ȍA"h`WD9GUpe$P/Qv?^Ϥ84sMsTOD��>-<,Ȧ߀ 7̠K_OOreHn?c 2_ ;M9GQ 朣CEպHzh$*T$(;GlLqL_]dB~fAe7>h n�+<Ψ.PrhZ!00;=m. MYqdC�9Oqz ]bfuzrwɭO~}gg?ɳgrq 'tzDl iCm@D�1Tv3\0-Ey .D�ME_7nf+nk� qC?E!AM"S!ppRr(r(r(r(r(r(r(r(r(r(r(r(//4)ax+nvyeXH�H/Vw@aiZІ w]]صh:W=~o>ɏ~ދnoe�5m]1"uh'ЅQ^ @  _ mvWW /ݼWxp{cuu}O�8,{/Sa'#ٙz�3%Rb;m~2% i_syUWGfbš#E(6w6W;M +yuNL'R_ym$j*u2r:X*k$a36a@&~kU=b</O~#UHP2'i)b܉A;"Dm=G.Z)ɐ,BͬymX*zHF9S6l1'ς/IE J;Plٯji8�603Sj͍^u1]x;O6 [!r{p/)/DH-&(4ɖ[=�v ~g,BڬbqL_ j}BkPKv_rk /)" Ofz !eI8"^*kXqAXޱ�!λ0$B@֢>WT@B"ՊqC6ϙy6\ʓצuԲdat͛$Ik@Zos�JFEDD!F^8u!R8;a| ǂPM^KW|ScCP0"CvFZ . oϗkm'MM?MER͂?e\ I"0}`CJd%&cEGRrYgBHKvp!$AXDrCG"yd:Ћґ sˈM~ EUaT>!#O}AX؅s$6D>Y$إ[ W|ʰ,,w8ss,-t$wY۹4#}gSŋTDM_mɛR@UH -BۃK[_GH-D&h=},J[GH17'M;"Mj5g_t"rTLM&UΑs$kl*]>87`X7o鋔Jb]&*t(2afwWVT6M4}*1tEp�; A)`նG tn=Y9}~ww~wo<zӻ=gМEeoux/q!?�H!&tqݝ/?{Z:q5hu]Oq )eI2v?StA=ddO}x*tpcx3؝0_UB}E'TͿ;#|zNXsT&]ܫ"]e"fZ~'>Ku B`y26\;'T=qH4y5v-&wP<PQP&TQy5Xt&x�t[qEF+;!hrq~'' +aQ틜* lOQ+Gm (] !MmF>)SfnkgWXVDh@ @%4lp2u"cdr2z OQ諦%+h^()V7d [jW"(7gP *!-k�RL)Z;h܋3uvb�EpXIV0h .g^;ήh}1Ww|٦.ש>PP Hj ByRԹD !B E#W>pZ^!dO$8'!XpA=W}U8K87GY�m|gwyXsS6$۱!]]ǿۋ|)X{q"kϯu|bK#ࢩE\` Wv՞S3}u!.Mٷ gv1xDH݇ lQ}U}6j ;4X4gf3%B*D'~_9j7e 朣sFl@D2$:mz^=yi8CIEyp-om۶m; ?w]g6 �pJG�L ��! 7b]D"6{ݺ{ѭ;G "]+v1-b�:@)ވ37C��Cx1�|=u?jV׭tn_4:E?8|Yi6âd`.f03I'^wm^_%; ;w^Us+at�<S z2`<ubn/ijzIe z eo*-"+rn//s{/#ɒe `'Bz!OCsK ?LOE�\גnp1WL#D-|+jq[Q1 'Íj6冬? vE _ WG Bx6<@#6H"Sz_{hk't^0<3ONv1$** Pr )8HME螹's"ʑ= jn/dx TS&R~&?9yg)gr(;PE;C_b0w9q#i` BX^")M&!nF8|FĪ .4J;B`f؀*"%B_v@C(=KC`nC>HFi:a;PCp vp&+iI.5HuU3)!3!$(WysLm}C(YpvrQQDLl Hdm7jҰS $W#BV( )Čn?`΋Qz �N!GHjԛ#(ͯ[~5wI#MBdR~P�YۖKvC4{%= jWs0 yWsE!,d ؓ1SeCd U |hfR^:1 Wz"0S(yH03| Je Ƚeq[,�cf`)yCrLk欽CI ӧ6B�nse0}O Zn~ 4 WHIDRfK$N&Y:B}$B I#Ѵy\ &�@FfF!n>Mb 8ڨB2I!Pt`pz7ah @haB"$ 5д j* "vۋOx>_k[/{_w|kwo?><}q޳_^=4 G_@r4@&}yW0-ڋvx.n`,N']1i `K*}A96 ڤvlY9|Wi-oʡjih&)H8[I`UV/Sdh[V?ly'!0 -H9S%7$bFb¹B,Њf0< 1OqW T SP 3Wx6AMS 9 0CBD*KB敜SCBȨ"ϪIP _Tfb+6$8G,ECXyQ3!W+[-*؅ݨ:;e*ZY]�颉ֳ!0p"Gs'5p?"Qڮ^쒃y:T \AHĢ@"ٰ"T0}U] ?ybl|eAW+]VS*tpvJ~ENOL|Ʃ gE<L�@!yVCpf1R:(ќPY?!ŐFNػ!'j!VBJ3!nc7\Sqs'AIeY T8 s^K-*&=ˠ&@I[9X5KF'E:7fWL]y$X1}u6[ H&$O45ůSc~P}*BӷX *K5^Lzq`ſK8hA0fMMצIk<_G^t^(G5NZTD ES9jMΑ;(eCt.UʯA l�쁐 C(fJKz4Ͱp- CƑ= iBD#Hû`"VbvnBpvsGw?wtjn}Ǿ < ,E[(r}+ٺ4 @!.w;۷[_4-"RznV~я 7͆ bLC+ `7$DDPEh&*?C9C9C9C9Ϥح Z8[ l gv2-p�6Q)s[K'^I27v<EV3^ZԨL^J)J0ڗͿ:Kb�8 �/WzLT�^ =vp>[xCPPPPP~˾C D4jnD8RK�>nxumh� BD*znb߷ mXǷvsw}_Ϟ~={]\owvBY^9VϧP @@ �ﺫރ;ou7OB#g�, @,vKWW.8H<0|Q3�lƌAzV׊䗋VWptg\][(*Ϋ&oj۪=*$gSD *W89Zy5K5Y?XAHdI ;pI`KI3m7R w*MMOA3ޯk7*ځNW!D[oP B\OS| *PZ�5A" \ӧ2k+9̙ie\V6̶ㄳ[ٙ V 9@2k յ(] .{",|>Ok ʡ/w^45h$r/K;Z9Yv]n9NĀs'_J.'̋ E0$9s DEG^b2ʋH^`L ̑}1dbO hT$X ^ZFNWݽdS5MSg rzq! +WXw򤨂ׂ"yoTGX#AcJ;�:%bHPcRhuiTS)!rèʡL̯l-11n`|l�;=`@Ā@@D}0 H@cl b qnVz{Oλ]h1'\ղ9Ǜ.da{r( t}wh<yYrS "#: $yRy~r(P$o26=K>�I}u8ʤ1Llԅ4<9=nD3bY'R3idZ%޾B(o+\ecXn3(39a `I? q̈S  !\j kxDbfÖS}90q`<<!OUSOT3#/"M�D`"#y;<F._(Mؐ| jݴPx<j툲Xdl$BƆhqU߂#`60LU2wAeOO4BH"!l9wLA8; I6S(lL"$wRT !K~='�˦nPJZY&] 3B�@ !0\!87o0k@RB DXY0{"�Vp$}5kjPP>O%vǷ?_^`V{!0Fa}T2Eg%G0H,#A]SX`(s4( L~`XtA� |]9&.'q&$YQs4uF)$!y26 t(]9Aԉ,VPzTwyE`~f5̙2) ZW`q>gN)f~$MRI0+'ZPܶg<_\U(g$W#SRH}.y~-ũԀ:SCݐ'\p#*BNW)LS @F:WiR+�)t$zlͨXO^>,EPf$1Y4#H4!KMVjHp4M =�q?k]#ȉ=@D 6c%(� �H'z >jׯ~K?h#xϯ.صG- mBKEq0ڡD �MbNig= ϥ~ nR0xF!]hD4(kA*0*p=jG=5B|JXb@ /Yp8GZɣ0;SDWg>dI9Md NLupT*B&4Z7ٙhTQ*F Z6x]׵|ozh5/s#R''̶5gZ(BE}#A%쯎ά})ں*J:)>NmD77V;K \sV\`yiv`RRAdw'ILUNW +*yx./뗈+ǯP"e{@WOZ1:8C9C*�Wᇫ}~o!ep&E|pNEsY.R|3aetcnыe<6;j<y_usZ 3JX1ދ8i\Y|{x_f"AB_F$X LlpL8/),M|Ceu8YL}#8נ!dyX$f5 }iRʞiC#򄳫˵!۩~W!qϹC,xwan`{u}컡` qK0P@D)RM@8L�&a ! jд;wΓ;y{??xӧl۬fVu뺶 ժi"F �#�v 6b@Ds4 @H�E$bϯbD4]=amu�ͪ=>??{q7wo6!O6S�ɉaR"O.iڣYmBC>Ȳ$R:k9A~2*Y | _PUɏoSF؀6&4x36kՁ<irno9N)bڣ!M>1O;N;ƒOsԺTbڣ⋤B8NʃQX5tR>'zetf l})nD_U 䩦E'$=w8䔀BGt㐘Hl1Tx棘.L <H3A[TGƆqD0+TwaY^�6$B<Ulxk;`HipF񭵵ӗS'( vpzHWFLU^T JRb7C3a009utltꭳ[xcc@.i5 T{@kͿ9?Vp>C9C9_~o~oh7:[oTCt+2I;" B&8ݜvv$~`>M$S#Iv2wO`9"L,q#q/$?K`(E\-(R9G2}$Ty+�9j04Bd (=Hl*T8GilH| H@B 5DeHĎ24ItT6 Vg&?MUAۛMx/`IK(v Xd 5!sRI~#dD*^e fҤbݜ7Gv^ING\A9F2EE -JvCdL�\g7#(P$ݩD7r(?GuWÂݮ>1HD4@D#Fy(dQ+!���bǎ(ba]ڶY7;t{?{qwur{mfնi@  $zlɡ:qs8M y3L' ~ODlC$"0.6'ӷ~I@aؚ[Ϊ֣t!�Ai-6F8EI~41(&.4P X\1H^zr(r(r(r(rrͿoKAf!�"< r(r(/E 1BAgopo8}oK?c=~Rʡʡʡʡʡ|KM@DT�"QaױqKSBccvj9:>>:~ɓWo/~ty8%Z#4Ta%s)wA=�` QaWmMH㰟E!�!`W }숨/޺۾o;6 U,7 ϧ%qbD&>~J/ROu?yiZ'e<)|b^7u@Nc]"bg$g$NmLi&8 [heILnRbůǾ+jr| WL==y5[1Bkkm4Օ"ZJA$/0TDV |~ _;n3U ZC8٨!k7(≜fL*L�ഌCUAHR[͝" ڨ īWsv`BՎ(VO۶:/-gg:&wRb!_ A[@;:Rg/!.~~=x*д@}fC9C9U!~-@̩v?Gogj4a'S\r!u}P[XCP־sQV ~+ǭά/IQTUA^b\$#AX6^9GN+b/ _; \Aħh~0% |*Ƒ`̺<Aݒ2D&4撈;0"0Ѭ\I,X"ċ  Nd<jð. *ZiTLsr3J+viwa=)yTv  n$8"KH: j %N, B0Uk8CL^Vy�Jo>j|>"�ahyf}p'z~g?~ۋzu B#i6  �R R$q,b�3R8@�a$`Ó/>=ib2"/1؝.m{�i�`>/E V?7A-aPt5(iTos3H[vT6wң+iW!## ϕfz�(Ըԥ5s2c"]P͝PUU(WCy?^1 u!ugyI Du?(U;;#E!@`"dr!_HCeF<{ܺGso dRf'f$nBHRmH;A6Ӿ7Bm|Q~& W0eW@ wWH~P/y^˙@ȱrvKz6 lF7B \a&D`rCYeIqXEks!fs'A^1'4wZQA&; i`gW3}QM1`,  Bs.Bp!yPq0#4nE_!to~8z#Xo F|P ^]A8��vW n?�$:`AɨJ98DcJRњ2@P9G(%BDXÓc9aZQmsm$L;2W¨D�L�H&@v X̫1 l\('W)֣@+`q8-]%/E6)xB52)14 @A Wx> 3?!mbHP"G2}&ő! !<vCT<<_ ϭ $EPBĠHpbW*jTۋ49pc01k$B< (Γ&] r(<LD]v<^}A( pn8i_< �pyyqyu4^׫o_}[_z'g=~6�MmU۬v�0-E&$@"۔n q48tI b4}c@H"Q =~r/=| Bc? 2ꟳ�nן_\]]]EjP>E-%K .̙< o-ͮárbfLpr|GL:G`FB; 9-Zɣ}ן Nps*C֧1|BD,]ʕ:YUNhe!N'{d5Ll@% /q?% X]?-r�zOݥaLcM ^5h>Y_Qr79\40@evNu#es~cn+j!UF]:<X'6J�K:P ְZ"pu@<>|w?iOVIx^i*?^B$9jW3q? yx6aAr2kQ [(5hVr''T1u%cZ4pnlDI ZRT{2tAi5+|/F~i" 括�3Sf^EfR^ENːs~cD>H0WJ|)TݒNW$Uv"p#D}:t~>C ""b۶Mzk00}7%vc !m �}nۮuUۮBuyc}O}g}/"ufuk9ž@ a :MilX!a&�}6}1 b}_uW|_{sa��/d8w=l/6!b4<~,(?wa=;r*gA>ZC&:MGtD% �RWK6XT[>;0fQV[ZPQ9G=7YkTiIsC?+݀aÙ )8h<{XNa`ih:/a�@ r v_3\\$>  (DP2UrBIY57˝ņk S< (Rdžhkx lj<eS8BZ]S^b'}xf2(>B@+kstDgQAv@H U/827 َ]@W6#1~^w CǷ}85n6ʡϹ BoA�w߸ۯn-Ýx�ug͓"%x>`yKQƋR dҨ/~qH N)sS"֜q2qg}M+jǒ؋a 0 g0BXȱ*Pp$8ڙ(Kx)-m&f"A lZ$5* JB TM}\a@t0XFe4 -Bv`X)#r\$(>v`sOII=l']P`@Ӗɓ'}=(RiSi&,b.4�m1Ʈa.#u}"u]I{у޻{ 6=]>ƾ]!ap)W0� PvYF''X@�캮�B@�;i_[G4[X"4iuJCe%'/O?Oc i b V 8&=&mn oPsBH{(6x[ܹ{{U#T”jXPER%,Կ;ˬ!&nM5bW]0MR<5͹' qE"W~P9S;֋DVWXmeՒmQ DЬjAt/DM@ο@ h29OɊu;9͝)jb2SVʋ܅�!3F‚k ŮM&66;g�;0 �z{;U& ԛK3 SΤQԚEX6Bp!;F)Jכwye/N`}Zr(r(6ǰ9.ϠۙStw]ֿU":UyH1 3?,"A+]cȋE^"\$XNoB- i8T0;"lGᓷ0 uk%";"ԨPyzy !† e:8w_W..lJ/CL0>/eeq UHK"X.{VK\"^ [y>iC9_;LM/ ^+}04ͰPBDFcw+p6j+歟?8{vyuyI]:z�1"4!:" [��ŝ(H]�14! >7ǯouh3NPfo|w ، CkEj8?I[5Ӿ^0`"~|w⦐O)\= %5Ay%W8 "jGBdY?jFWF�HP>ׄ ۪R_l ȶFneVIdj?pS-3uS^H<E\҂<┤U{-kN0iBY~,H@E}.)*狣8[J \D_M5E<j \I]~hhۄ%l9FAzN+3B3"\ÿɔzRG]ǣ5 I̖+@ ]^^q*R,@7@j@ (uK 3ByB9goN#'/.Q KTbl<X3ǷpaPPE>պ<t^ }'I#Agli*K\%Gj2*BMRd/GH0*a,N1^mQ]ގ:k9!ԳQB4`W\A8;rcU4E盨F"}눠 JTrHcZ<`QS#MqŊ.b[BK=7{ . oyE a9YT'jI_& >Vsl 48?s]_XV~ \+ ^t$"D[Hk8qLef/HuvS"Mn 1"�[i-d z6fYVժmۼ,`x]\\\^^v]ÙziWM!F�hVnwqq~vE'oK~?W{o~F8߯vv]nqo!(6=S #`"nPcGYaߝ'o||ي@$=ߧR.ECh ]|!*>" "~ӵ2K?'?/Iˉ (Qz I/gg;)O* O$CgY\W3>UxyzґZPŴ9n#6| s0!L#$Zbl<$ @^[>ȄbxY͛ˠD(QQ!lkdripDH`Fgw™ܘP<#EvA.u8 첇R\>j$$P͝A,Ri !dM !3";ftUk(QVե] P ! DH#aahL_rmʔi]a�*Lv ĎlSl=^nřXFHBgf\cu}6g_~ 0{| asC9C9ɲ>lW7.r_A")Ⳉ͟QЯr$mFȄYóѩ7?eYkZD+nI)F"sc LF0ʴ&BV+]>YT*?0 R@iR)Y+�UdotɍuCP #s*W*[SJqh�[mkm"Kl [ fݶg<_]!cm9C/1-s ²8E!>/e;ɉ4(1γEF}61~Td-w]Ҕ1gsӦ8|(!nJdx wm6ɐ0p n�O}ȨXʡ|ڶ]+~1oVpf^< ۶%.�BhBڦ CEm{~J{rGo};?/bI}Go�1ЎV'ٙ~D �}v=ѓN?xx4 @D=� Z[T( w6bqn@B@@�7}^OGy8<~MH\Op0G$&1#oH*@&ӣ�`2y#3HlC`^b`i.qeRǃR\Sǚde+α<G!PČ:@&#}+lЈ鋴ˡJaX#Bbe3S"$^pDI̋KYҲ !2p=GT;u�&a7p+KHTFey# 0I)@p&PI;֣"Q3ƶ�[Rep.B25H1H|7!a!*bY4FH鮟4.ɏ"70M $S"Ֆb+B6B�鈳v`B+( DkPÙr޷UdƆMLPbv,�LS�B%$BpBh!啩CJYqAWlOvNaPPeiYmc/(g?oşrxɼ7'AG}KaHI,"A.�Q_! Bh#)v9bvh [*"zUOrU*8e`Axy*W cc ᄜ\d Th5~3 Jϊ�9] rgʐپJq,S+FZ7]g"gS W y Iq mx =aF^ rgr !bK \u0H6Q�!$w(R9U8iRA2 BHE"dٺtAJ3*1GD:+Sȹ@\A%M:*V\9U>,`X7o鋔|67"C9/J^^7M^ lz^VylxcÐ6Nb1Plcl(wb۝u94/n]=~=; ?~v+l._}E"b4k@})"@ޅUDuݰ◲Un#o8C۬Bhc;?:W_+o7"GDl �"cϷϟ]^VQ۬&Hl_B@ ܞ񃈘'Tj-2r̛4g}xr$r&܃X'P>^拵JA'*$h+jW'nDlwF5=^7BA hl<q Q+`gE08Sr?Р変ykN[CG!B7s (7'8Յ4m\xuy|&\D~!*}ʂemLYIi a`7DQ `ˬ<^<E qvl(`Pؘҕl "#0r\~Y,:oUj @%4lp2u"cdr2z OQYM4Hj.`/nh9`s\ʡʡ̗X5u>oy' fܴnI' I Sz`#n2/ Zۯ'y2b@OZ RFQB73hS/y-HX枂 Yk둠Jf5Fe*$H_k!!2BZ`&R fxDH݇m�K:qA@ե9LI=F3m(YD~WEaINƼs? )DksdxO[«'O oZ=CaiCm F<&hA@HD(F HAiЇ6nNwVl>}j:nx=q!!f ' 4-@�D=�dY^�6vr|;+kF( " Bԏ:&!D/|ӟ :m[ot979Usq` p>_{pr$lB$$BBQ x޹{{Us%xcjqN[ J73+_D~ *rjԡsky:W0 o=*E{:H˪bjټEhd[zqKK[YHduw촸Jqg/)4 uj6;$9몇ָ)|)";b-w'/m9DnegRi 7q]P�U&LE))U,raY䴈>{%" J]δr"ZT %)gpYQ3�*mAӦ`qO4Zd 13SnH&E- A4&wn8VlYX?wi}XoPPPje}_p\q+zO?=o[V� )T�dtTXYu׎fKXߋx? ܱ=d$ȳ]OQ/$q\fb6Q > l!ZP"W"d!JZ T v5u 7i6<`<8*:P<r~f3oY~bF2 R5!C ڠ/B\I|՝c 6Sl̞x",PsRA\8 ë |�Dl6@� iazf-0F C\c~ѝ{_{_}{/?VjNo)n" #/q׬e]!0|]yؼ/7NWa`$?}K00L"��./ ucD"�[Bg'(ߊm-i N2JeTjx+5"$XAUϣ5l~ܻ{ROQQVsZ`%͒"3HMƳ U"~NTT+j)N 971fBt+E<wP(X)$p1he_X�)¾LmI3vSU9Yv`w[?2FnCEw$dB lpBY'<c*iWOk]NMyN1tkpmH gd6k[\ϗbS6d0+YՖG,o+s6[ ߺC9C9CN w.ݿ_]6o0t3d~-8fr*"y7z,xDT"AAJ5AI";1B5Vբ+yfoTVWo~fׂ7X;GH|#S-T`9RwC/Rr<̩BHpɗ! F򮕱} )�joe'K"O.[ڔe[a}1T涾$^ɷ6(;߃ 9LjG[YҚޢoPtlC&rWeՈXvk" 2IhrNQesP~X �0cv]v;D̃؄"\D�i6�E@Z8BB�=1M8:r߾?p'}\v6vjUzBOjusD`DD@Bj;{׾Σ[EHl]lԲf M"\]W/vW"b ikqAa�s[*ܭtٹAI ykI %&e<8r¦S�(oirs\zB yʤ<cSy7CĠdDzGH <l^ obEWf'E?HC _2bUNgMa:g2!Jգ,BDAk0{$"j$!(CH_ m dVIffnqB ;PU+_%/j lɀmP G7PfA.2%*Ja02q-.^6ڄ2YwkeYfb6x4} BpAx a.Bx悲Sd`0}r7(gW3}Q1}LjuNgK Цb`'jgC g ,BUdWҌ,BFZ^?_ׯ6p>4|ʡʡʾi#:?{bUgA+{ ىn<�P(!=m(jE $HpC&ӑ q M,n<?1H'o{e9)PN/L0@bқ^M$Y$&+؃YoEE $3ES<_ wvr~<JAYe$y>`W$\AEaL$nMaq$(my[%e}P|!Љ^$"f %?Nq`2+S8r6$* (8L_9fT8-/d1ΎMjX|*B-fj$$!r(�%gHj۶m#vcH""Aażkt8.R%a^e@�_mwv^oGQ>jNW_igYwyv~uqj}t9j׫mݖ %ȱp3"..vj~|ޣǫiD`2././}CG8,@Qԡܰt^9G$4JF Yr#t43Ds,� ;t>8x�!Ȩ!_U+E82'J Od7w4v4q\<g?9PFUO&H6$LSSY#b})/Q0YelLĨ \! D!L!D0.< �艐 c[!L!%p (Fa9ɹ >,6 GYyLN͢Ri*'5pFI8X WgJ@tb}J[r,L_! v=RA5(:?hHhB>BFOQ0� !jlL"$ o1sA6)S!F)ߥ2vd M L_I] )Z1̔/  T )4ӘtF|9B Ȯ"uGᓿkm0{(r( ڕnE~?ſ,A,2OC�3+#p$(0  @8Gv"E<ƠH05"󐔜>aY"IG<h(Yf<ұvBddFЦO8%|8B-qA)BS JJXDS,NF 2De/@B:]P|QD!K|FDP#yZ$jtJ>?$*B`\IBatA t)O3e$e$H&2 A#$W邔fT T#A9=HP 8MBȷ$a,jT  J P b48��1ccO4'% 1Ұ�L���IDATczo|okoo?y]ijm꓋gW}#_y7"./.utvz8>>տ�F;ʐ㢑"\~w@+1`Ctp豙Rң`yr7o=;S]Z`r9zfWhK*zxȔދm-j` S(̻mcQM."N 3�6PH{ hQT r{TEH+'V@^ r 5KnG!5A9'z])o�jR0'հB;kE6R&8�UcgQ쁍Tmǔ`ڎUF~7Do=(>B@+kstDxaCH 6j^p!VB.II"t WA{J!p| PPPBS n+~[8p<"yH Gɲg$XAҋ6)#AQ6#89,JLr!KaNq BspiEM0@LtDaI#GJтN_LwыIHPk);`]ɃULA)AH g!>H�<*u-IH@d$hR@ SGst؁iRN{z)"* �WO<iP~0:zZC/ _IjTatxNx$v; bot[otunw;ZoB.._6&40苩PVR(v}wqyv{ztҽ;_߸s^@axY-MsB��ݎ~^ßwj l:4al @979Y~s r<\[vt4B!(<qWܽ–`+wUjf3"I}.kqR1�" EG{�u"4ݒ#f#R4ն=F̗20Od}i-sDȳP**."E a龾<dw�σzu(2 je9$^kEIs g*" ȓFY ^ۿ68n7?fXf\S^3:](r7/UNV^jnm1XY) `[' D@�N"$P �¦?+W߮6pC(r(s,p6csSBt1 ҹ.a}e$ȩirc GPwyGV^1T  ΟU0TRRL"@h/{r?Vg]*hkuB!j lL>Z0Y Z0ņdt�3"WL_1kR9i#A%AٶRy29:S`9B̀|YԼsDDE- Ȧz7MA+ 3p(.`Iw1Ʈ}?,퇷�w{N/��w��\6�bE}@/VG'6wV;{?}O>x|/./.Ca6h^�$wǏeŌ +#.vi[wW~6Gol+(0 9}䓧gϻ]D\5EDDR̨|eU;,Ulq yJeC> 73[dyJP3>8l6 ]6W&z1Jgzt˖LK8kE` g3 ,7~ *!'ճCi`_vGU'P5Uh_5�2 륹:f< N$r[Oŋ8DmAA^qܪg .4^NC1nɿ${("2 !6pE:aj_ ?\}{|n}Y8C9C9<]m?{<15t1�TLqR13|$bNPi\ҵq}tU�k.>Cܜ6K)1= h�6 4M]8*Ԑ0 A_nn2šԕDȳ"HDtujw)cݥ1/ZK"+Uՠg�I~�q3S+쉌*%^zQ+"k]6%=ϦއC9U۶-H].Ǝ#�4D:u1 !�qP%Hc@�bc߄˰j<ܜY<y}ʛ+?m?ggvbժma)p&RLD6\]jo~o}~GM"~pvh򿋗,Z!`?./>6Rܤ`ܾ :㥀 d 鉵 @L1I0}NCDBqa%ݟ Z/|^@3gJ(ʏ_�~J$jno} Ge%</"$Ȃ=zڂDxD^OE�l8oz!([EQ"ܤ͝EQGBHoev@,D lMiL؄QHw0+=TBc!>\ !oK6!Dy`ZdcZ w lfl<@־g BZO;Ɵs�  zZ}L&_Yf Ng`AXr P(R N"dSJ{0/_Zs \o;l|(r(o_߽l}HW�7نHF9~QMEsL  }Iw,9HD�>_>O+W ~B:6EH8|}"{|mR 9ݡ3Hn$jT0 8,[8&xPGb*WWe>B EHP# +<Qs>;Qq*+]!~p" +U)N8fFIqTZYi*`V*X'eZBr(H%m>@ >v]b:>!4/ Ĉ >MӬh>:ioܾkgOwO?I}O^]^\.mժ]VkYh{ggAZO<Hq[hvw|6 4"1"(峮i/{B�p~?ŋ @~|SY){O,]pa (}ÊJg|{iH�u6Xc�0i Ž6Vن+ mKEsyt o =�|>cEYyRk|ϳx y3z'ԂQB06R0j%6$gI!S C,pDIR T$M3`3s,@;"Da#G:d)A\5[)]]"DZG{!D0OE|BdH)@p&֣"<V3ƶ�[Rep.BTJ y=e@ Qi``g9#rS @+rB5}BC@O!8m!0PX&c,/C>K)K)=D4} LW%[ؐScJkFrzɮM})S '8\B"!&2)2B@ | n;{aPPsQ0ǰ>_o4#bE#_0$:Դ �\(f Bv ΑF-:bHK#rQQHFU蓜Gr122(kCAe$%9vdl $+BD*W`)\\&A Y "ANT2W)`jH}&;0lDJNFB/cf2HELI( [qA^ rgr !bK \AR`l@CH1bɊҤ*dE6Iֳ%:]Ҍ !"d"A" +Αs"6JtT^3B`X7Q鋔|67rr(_B&^M ֛pi6GGGպiVMhChZ `kv)-6 IH}j;g_y_7/~{K_;$Ocxzog1vD "aAj�!KR D=]#�F.– bs{_ڝ7ܹ=80^)Q(斂�#..]Da0 �zaY*?]nkV5=?Ad$U`E_ÿ?zw)y"_sOr|+k0'OT/^:ä́[+V"EY4]'kUaqޙZ 'T=q\�_641 ,4zyPQP&+H<'8-̗6zʉB>Il(/)>e26,4b0i)kTkѢxPum)7l`C;ńr _W\k-2B #i=ήjUfdx͠j68e=<\g !SԬGV/; $W6T[uG9C9C9CD8:㽠Gy/ÓI9;vs-#Du9|i?:*!kEE>xd]ql2}⋋\A::+]ͣen&Ц^ZT=3 :Ǚ%< !�EJ"pTm".|'? ՞S,#dy>>6仍6fyDH݇m�K:̤ANT54gh!^-B]!s%Z:eKci iD.ne+BO[«'O4Mr(_\]�BЄmWj^fӄuP !F_(DDBC!@ !4 UxjW?^ Me1"H}}}@Z\\0��1�]=lڀH1EhwG__[_:s+hp Mn0 �7(⎚0% 6!~O{?{Iǡ=nV�`M0u97Y/w DrD"�TKB {{O !S^Sز aG1÷zU5s<Ԡ7Y\|Mbi(:4L{<LQP]QG[%ĴǴV;$9%KˡԘ>f&Dj5͕+Z~y+1_牱L+'5TgJͳD7WPhLswwHR-67s{A"g` gۂ|+N^QCN7p;k �^0<3ONv9xAa(-'Wd:L\"5m^)!빽% M"i^=3x@"ɡ쀋 .Brw6 z7BE7H"dDE~iKa'Pgp /c@�;G9:;=]Q!Au%]?Z3B{v١ʡʡ| pr[~hoi7@D2Arӑ}'#+~$G'Y mIT[w3]DڿG L$FB+˹#v0 !ܴ$]FJ j4d|C@"Z!ӑ`f !6=*6HP~]+Gv|:1"D(_ ڽ7blO$`6}XH0:|"42cņ.auZ"'L"VMQ@ŧB3E։sDFs,Q{ `F=#Z O5 B> !uy(KX!"дͦm6hڣjZmVjZV�H!@iB4M  ĈØqv;=\lNw^_7_{y1ًO.._t.^5*F�vn~X1Ʈ� c~w;z랟/}W_]ݿkhiq5 F$W^mݳn!@ 0 :~Ul -4 ޠ=".>z/WJ&[9mƯM%I`nTjyZao4J31ˁn]d[�LB@a cm~~"�pAf{zSԱ/h[y`3=7-jG@KnqpZ\k[-,HD3&ur� $á" @0D qp1aZ풮v:IہyGFȢfFaNFV&ȊQ,+m¤ZԊQBqT,Q=r^ˋ8 -k1qVa oqωeg 2ZX_CMc\`J("uZuMG�-y FNeO>vǍPPYN�?_~£� dW�k22o Z17X/I ?HK' L,j$=s(mseJ)ķSOvMlŒy8~oU7t|[T;$ٺR+fY{2<gB!e#&ŤoH<&Tsy)y>14L{C(-y>R<_ZZ$^ɷJ& 9PN5ڈ- U\W6XFS5"i:+~eӭ NG/QsFdFx)28z,l</XK~C9_2ab ic~vfb!2;tZ@jBZW֭;O^{G\=۽{v<=]Eh#Šb{^G; M�@}vWw|{׾oz!h?^GMM宇Ӌ/}�8V IZ/hɞ3|!r!&fO3dt7bxFIi8VIoJ `zHRVUj:RQ+̛Nf_v,=k@kJihBيl_U[voQ?KUuKƀ嚫#!ltr0 M; AW5/=9 \ rO2LW!� U)ZA֑gҹj373Bf[hHVhh+śf f_=TxV]gbcPlw*[׊:"'.BZ䊪ȄuTg7ia�[^YoFYGHarm?oŸ:!}x=C9Cӻ#\/rۆGZ-[Vr!"(TQ<ߔ90@a:oO z H01˧[C.>c=sJsWEfF'Vɸ'y~KKS7jWDX}x~xdS3 SۋÄϟ Ϸ"̵raVToHp�cd+W/ ՎqH6N=5Y/RIq,] X̅Yͦ8qe#["oj@%*gG&H,l {TOk]P嗭 c!a7Ƙ}Qc�9,o")žvVW]A'?'pO>ٳvu l0="6mڶmZ$lm.//mwMʫ~|ן|G5 C%a'OxҎ/]h&z<ϤL>IVJ'b's04aw8ɴXR#wҮ@%H)yc<,2]YQ(Yh\G7w۳(yz`8 UیD*}s6Aœ/7(ɬ47"xj29|d$lLĨ \!�bn7"Q lEdfx˙b3DNY<�meVsor2B#o렛V!>M\U4%oDذ1:b [{yDvbTl`! 7wA5(:?hp(9�a$BH#DKu  +lMbc!lBH"Dicp*Rk"ҶxӁwF=@Ԋ1}wC 3*a@8;g/! LNTˆ/BC RjTcwk/W�V8C9C9}߼/7.6HJ!�Ù8aM &n(QM$s"f'׼8X'L0JFߋ0J' QFH!(PΐX;]ށC*W`LQQ>id7vxR 7 S JJXDS,NF 5@E$498tAU#D!K|S0[{ #y|JjՒ`Fjs`%wL Dd!O$W1 7R<_n[!UFPFPi!s H;IRfT T#A^##HP 8MBIlMBt @{~r:]J,2P &+YC9Camj^j^=^'l�}./../^캫ē[1|_ _oݽ}?U{݇Dv鱉}u]6IlQ}qq _k_ǯy$럣*N<,~ӋeG �@@jC|p Xg7JR9Q-TD8Ѕt4,)Ùv&7,i5<Q$/!aqK< V_S71W磠rNQ`70\D$ D07S1Vm^1e,`F;|S BH&i.UPB~hk4V $*/D׈wNUFٴbAB`3LQ[Eb2<RP d\rĨ oRzo=/_�Arb/j!&R҉"ࣈэ!2tɔcCT RYŽ ܏3H<2`%6rP|l0}2&T&g=hPQP2Bs>B@;sTuvVf<%HMjgQÆjl8/bPLK!8lOd?BgdxoQй}j,PPP>*~ϓ+ptHl�CkO$WATS%% GR}Xs,ٍ 0 5x/@yLHg 8W QN1>l\AAu$(!X+Q͖DXH!#d2//L!A*D~ A1n7]0y\P%H0**`"A5)V@ ꎚ3y09f=%%BB DK!^0UEbBx5xwrR(b@'MGB&#Ak$v,$ E9zj$W)uC3^�,6D�PPa<xXܶzvrw8fˣ �B`"؇6-4Cs~8'?{{?~O==?؝]bº Y<jp݄M®^ݳSx升{o! ,u/"g/?ŋ& C! "D�|Sݡ<v@&E>[Â{�r@Z5ѱ۵ܰۛ'x¡Nrg \)ce1@mbf1}J"PsYE-VdhF~ccy^SgW9X:\!S/ /a倄+`bfE�+hq9gb-@g3>zဋ}Ш˗$Zy>dhPV*O(4 ,0;8M`M lcx* -7"+]Txӓ*M 2.3t bS)(!dEMzګvs7DѦLOXd O!qj ].2'&yRs�r2[2O2ipqvJHɺ!_Rߞޅӥ8C9C9CAoKmJ:bL}"A %nVDKY?T3J*Z<ù:`1X2 �j^D>Ywrm"$~�ip}x 46tCP&fk_BUpE >Q%] B$ f zK-St9_|99$dlHP%t59ەj9h/ M$Bz%kѲl@H%_L$& !fu1^$X ĉk->efAt 1I%5Rv|f�H톜�K-YxJ0[RE=`k_$Z9U[IDʡ 8nBhf>:::999999>>^!(Å M }컮vnmnno yo}{okԬꓫϻǗWO_k~;ojB}v08H'|t~~!1H��!!V}ūzA-9kwQK$cifdu9]%rf(B XH~n5+;GdՔ0;@|mhʚ>SЎ6чeU᛺@(joD4h,'cqyr?3#rqu)er}heB%eЦG}s Vi)S _JKUJAxIAw9'v(!f'Q[MuzN !B DFqiH$6m@81;Qmo`DAYRsH $2Bi[3Wc9qllkWEnğ濹sn[C9C9C\DyZ75}/Gh9Sx&17\>6}#n38 gt?|N#.4~뀥.KvS`=R]*6S)BIEvQ6jy2Q"�ۗGY ^VR;vVyZHjV8?p[<YktͺIPN P@d!6'&~0? F`r P@(^v+5Vus9ީ<s{fVW;VUd58mG׎@}9&؎`;"F�/ d3 d?〇φ }M "Dx.H!1*S@jV!?+fsj88 eS&M)1�6@k'W2|J 2ȱG|`18ʍ7iy"ZHnvK-sso\w 7_wIAY]/jDU=BV[8g仯[;EQULuVa.T {sGURkE9.ʒK*_]ąpk}*(x&)TxO3~?Ũm; \nxƓϜ==NƜ:tyyt? 2 ('_ï1n 2 +EI ?޷wdAdAd*L&+̴TS-TײZq9byUl^>W:;g# gݻyヌv.ϦլJk3g<;8uz2IJ^cV%*05mK[GUQp1".(j]N|2bTf6Bg*A4$ ׸B|e(|TD! EMZj`\Zj Qq'NٮHck>7W�JntQymuA*?мZ^4l8Mv£(;sm}xxO-ݣn2!c}lxa ΕP'YJF8ABj*bq�!Sxr 'l=!ͬbOK{!$6W7&q2kנUwQ7bAWKh',큝(m~ˬafY=IjByt/Rz*LbFPINˋfN8EB�|@ם@'BZl _pqH2%E!N}fşCA<8 AYy4a{_�!P,-~V$V 7'FkFǭ_f:se:2 *_<{_7_PE_I#Y4t(8:JV`m^i"5dN1)w >,85؛Ol4*4*c>y۹y%e6_IYBxwpc DBH&.Q<mIq5e~[U Oc{0;<9;tX0NG(0L)rJZ_O:B|=@EƩOcc`if? j.gP7^ `Ty B(I ̣o:㵻a*_ٟPW/WqW{/cڏSze&K`~�lµH:>wLsA9!)ׅ^YYeY LBb1GGӃh1uMRUxT'x~498؜Nwj9okg_/zҋ_}ԛeT<wqtSoywOQ>ˡмU\r,Tbgv7Mk҅řY&T&b&6syk.H&m$ǯ Rxd#&\ VqeqwQJ`U/֞y_Wyh�[s虮ndHziVfmĿ&�*x[0؈j5)䕷% �Zzl TcgGv2}.n]- g9y9rT=+I7C9`poԘ:d*Ȝ@u!y']K]>/3GlbT]x7ʃ\M}u@Nz6Q�f,2*xJw�!*-p&j&fuubp J_DHO9l TA~Æ R.zs1NR Z9={D~۰i^ӗ) <: ;L׺ 8Sc昘pqPoQ^`RXP^�}r*PkFXoW=x<rAdW8C)g˟Frzu -9إޅy*u &G?Ybۉҁ 4c :_.Pq;祘5Șp vn/;%I&`c+'qs @UJ1)JV@,$BCH 0A 섣F,wO(;ёX'1ia`!-LKl{)5'�6DK_Y''@a!AH["ÐG4N#C, &z%p>\~Ju_,RN$J"'GJ 2c<õI#/>zϏ7F0v"Yy#g reYN&,j6;몮]V "Yf^n#&5peuQb<h485ᦕn[x~ [[[+w<=n__?]uܬ8R & vKhuuVc. *E*W`,u'7Ws̗B{IȀ([^ 9o&bR=^j (s{m { Qy ec66@;oq7Lb,MΜr{@b xg"IMzoYVy3ʭPvG<B$؆l.pr'3+ U *hB 8 B|bJ`jmRU;9:2=w9S9gxʪ@744 w�`'q20Q�y�uwli'[ $4֍|BKehZ3_RXx0Wwo<}!CY`bo3 `ư@�l-PAlQB*<0p6vy;=h"BH�\5J/vCPCJ Ir>vCWiu1 2#_ܰ,s7ySH7s ƋfkS28 ar31,A`Rj'QXIߏ M\' ^bSPؾL ]&( &CH+p*4*+0@ FrFVE-^k;F 6b;/Be{ɼcƛ%7ʊz2AL 4*0A|C 8O=d`N}1 $n|ا?"-3p6%B>7d0D !N}SҭxDrGpm#X2G5 f Me%pkB͈iLvq P rB;k1յFVWWWWVƓde4&+dREYRQ,qQDTRURT,5WוTzQBh\on3O-OxK>E/y>'>ܩŨ$.񨠒 r[IQUa}|x<)G%L,5ՕT5u3G|%o}.6~=M_ܝD}ۏ| qru.~[i*8_|my�B 5w!k{bRR٥{jd.pPEb^VmUv=C |dݽR1@QĊj"ң 6(7Bj6g9(TF`pP$R!"iU= $!C%( pt=߆sK=)`G4jł< cDE48O4=,PZ20&&c-)AHФ!U Thx^Ta6!&-BXuC/Zv[:>57@U$)6]nc �`2;8�H�ԋ]# Bb@%-Q}rf5뱧~mr4wAQ%EIgˀ|V܀ \'Da . 1 Q-hŚ0U! ^; LʫTfm wADTc_Q|BklK;ĚCHN ,/P4*+P`pb^ DQlP dI;|y@PEw ң|D[`�'g|2?giG i}MemL0`]0AiGTCUɅM!1A3Aۇ jR&3t< p9$\Q /~0cp]R98̚.h}, (I#dAf2˲i6WTHj0K uMUb*LLsYxέncm1e<SgpՕE03tFKG#Q%T0 K͵]$$4)X6B<"m4 2 5w_n0dAm2Yu,-gݬAdAdAMhG1{;*j]ֆ{rf.ǣd2Xe&ӏ b&".yT0 zxDݷ}IZb"bs"9ȣ^ T5S($A%R `*_(}6nj* 15|>S)?t8KNncS9d0K2_CFϷCgn;QX,5t*(Y"$Y=N"'obگI ! ܎=,31287d+FwJ2+*VQYɺ=BTN`~ơt}tȵDJ,ja|ϾD y{4+5Zw 8 BNbr! !~^�t!GAU>ǨS�2M1� "қH2١ofBoGHة# UZ>iqW`T.Mw $`!�!Ԃ!!B/q#ؾonyu+}4 2ȇ:ÝG?sOMQ(8R`~ MdiT.<oC̑3"#" @e4}hy-/ijvxQ|/ C /@ E6\۩�|ÞH ֩L<;Ix!\bڋE;+?eI16;�k<7\šXdx+&URL0䠝US3*G`' " |v;_Hb|w{39e) )fe҂.&e3N <S 0O-LP /  {~B Cfq>=¹q3o0^h0dA03L忂GE1V&+뫫,˲,ʒbi\WuX,ftQ͖|]WU5Т(eY%#*T³\E9G<"5wGӨ Z&EXtÿKꥃ#SJ(5`A@EoA9Kh$3tﮫ(7G :eh=@{ }"pS88} k9m}&�Q+i1Z1y !,DPJ!D:>. `}FX�! O lbv`yiO} fe9) ( '�!AVD9JAPa6lXc 6}z PyLjE?N"~*#G4TXl>t&il7^ߡVAk2R�cSA,pIP!h#!`*i<  @Q8Jb#8z#-B~yekFn-\پxdAKL7$ ͯl`89&(86b:/`}oT0$D& `T=1!D۟7Gf56�cp4 %PHLBj|ҊߪriGA̯AHL#UMe<H#G9eZ;!DH %YÛb;?Ӧ}c֡D1B6!0w BGyٜow,I"x76egW (1Iojy D 1L&=I& aȐQ|Ɔu"!q0dA0Q1s1*d:YY'+h\#*ʚxQ\d QYL&dReM\D""T416s.h4b&_B~:InAV,2^})%oApc%j#[IȰ۽>=V`]l`H1IpcU _LB}ȬQa U6Tp#'6Nr&o;6klD\Hc}n<x\^^ !nd 1H<Lx�.O[z$NeyE" 0 �r4 J$H0439!>Ml_Mqno(Xosz%!w-ĺ: x`:d"rc>A!$CI@ғ|yp<w} h b]a©)A(TjEGLC䦲nuS+"pK]yrp$xrhFiAtHZJ DyB !D,B,]%JהTxԯ6/ 2 <dӋ|Ol`8d8LXQPRp}O-ԴInOUQA3L wn1Ae>Y&W@9 c� U ^|BM&Rv>B*c*L6qͺ ⽿,G`'U0A` $E`&GSm&;cwyV'ylX&`Y@kxG?܋owZS�fwA!aZk !M'+*_Epz'AnU0V/YL. ㎉d}ֱ8*kR`FeX)IQxI6kFyO} 2ȵ|GEɣh2Y][Y][YYMVƓrR&TKTp1O6676'QQBz2aH"6صd+]8wxPr\[S-" \3 3P:sYR&, ^})%rr|#HI{7?):!o%6,NJe] JQ@4CTAGH7۷f|KXoTa(zq?/b0O!u: &B"BILx�8Ƅi:{=p;!QOk'@KH*{!*T&o^,hX{vAzb0d^d 379$tvN�7&"Ovqn/H/c%\`b1B k)iB9c_ p\P(!F$"9P!f#9>|8`sx#,~*y#vF�SN!]Oj~q4g0,F"̜=̟}-/ϣ1AdA>uӓy䥙`p7ˢ19aa 2ׯ 724bHC\Sn" L w[gѨ,Ө+=jeء ?HDTZ0dL0XQ =|/s*h`gT0. i;?vDAE;\O�[46Ly$d`('iDu/ WL*r|{c_ +L ZʣjH lnRcL" IӨSR"'R` 1tqq97WUP!aM`3hMI;BZ`A9il> Lkk+k+++',GjD8[Wլ *K.J7OuE<ᔚhss;[G$qZc"efz]_G6|#1.6b\=G 2 2cNy~C 2 <:e<u::XZ?p}pwdAdAdX,IDiDD\0EAɨu%u%+#)eYEI %%=+QEiQّzsUۥ}jTǫLEXHQek&Z�| K|܏2,ak?Q؂Cjs<UwDq'(I.mBn$ ie>, DL2/LIkcRȤ#h<d5^uo/t\†BG nxVBY.U{IP;AOބYK(%ˠNKoЧ1w %" !\!jCp*"9BޥL)r>[5<lJT8g`\ZRQ<.:1KX˔UOpkByt/�G_ _Xõ*Tw)7[M}�܉= B\1]P++Byu(xBJݚ5BZVhUՃD펷0pK@!DBB!XrK͡X4L*x{yJI7dAyTaT1_|HVr@\T  Cl#ŅF-Y%a$gpGQY&Q4[mdv9i�A!]1^p" _A)VįwuT Oc{0A(aEG&HPctYcAt8 tqD/R.Q{i' iSG@w%`va%y\jWfEQ 2*tOBf&TRG t} 7 P!qS *."bP -⨘ N 2nRFjbSsy4]Vi2 Hmr0Q\xTNduuummmeee2xbEWf!Jv]Uͅvv^;=ڨ\!*E%U-"D#&* U )ܫ!5i58ϛCƜ%\5)X(.t]+�k;5-r TQJ$,Ǩz EʛEz�Idߜ Mk`lA:X-ʛQn 7Ƃv_ժ>Ai�ɘ-N]π<byb}Go1E\j@{T Pnu#[�N�Nd�䮥C26х45|G}|A1<Ba B(f(ǀȳc=!f*_ic *!8+m| Q ) dj0o\sNs�{4 P/pj I 8HN5}.3VqMj�r6D71B]z"DJ^ŀzo1Y 2 rD+V@eB+D4LK<Ldjq$DCR HV^s+{ Z󉂩 *GO/2\4ȘV*n^叄!Ts @"D)ުh୴H S*(s`&li !B!$ !60ZO/vqt8:2^ԋrN0@HcFi& RTN0Eqr%0N=v>b#2+ Ӫ-%B`W^75kңܡv2wsU*) OI_Afqg7 ٶYvtH&H SY)`A9)i}O'c.ʢEYzS$0IAT ;sA\MY. ͭv.r<ZFy)LETјfbzlto{4$T\uK:; }Or=O̸=Ԗۋ[L#z=%>5 L-pG]/{<p6|=Wm?x gl!yWRzdZy/vyt;Bn/$"6 ^u»7cUPA ek϶AH`X_)ml"D{4!݀Nx;nv!#? ~|un LATuug=?p$gHOLe@Z $46<nE$`C?'5^ŀ!<} s{w@ b*o:M $oս=:vK83pP P<T luX93/Vqx5,v8u0Nf/ R![bw<9D#,B4]<ȭo),jBbAdG輟;IE2[$ɛ9N3h,8 dCv�GnqnTTĤ. 9*&H}  \u].ruPܤ \c#`y3*`8TdeWL`/ǎ~v~0z86 u @=1ep{0A|3NGw!O0)p(I>V&螒hw(҂Q~OWÌٔ OC0dDABܣ׉CI9_\1rI,M #i vwg KZbs~Ü)fTiI�Aۤd*Әig*FEy9p1bJA埊#_&kEFT<\"D}=pah^mTT5d}mc2\ą,WHVjYi\$ReQD cG$�0/"TW\ 5K%mj.5#k'""aod{uq9BB"+N5Xq!?NFO)IV� oṯJ1lVsޟk*U~Mv'$lbQ�v0t,n, nu ƃfx5f?vJSjpo޴}ecO! X b6ڕ *p JbHN�ZHځ o޻dv3\iᜐ堦 `H܆Pn[Ch 46JoY,=y�lDH@iEuHO#S=Pœ`w~ܒBoE|=Ė ^ЧѾ<bVB1`:pz0  0.7FE >?JҢwpi}zcAZ$Bq3C84Fx.ya 2c[FcZY?ZqLC>HŎb&`#L,jDs vH QleAa7$) " rmvfRk[B`|~(_6S J [.gTf62* op?&NZqem- sqZ`Gw ң|DH T|dퟳ#UfGbvSad5($|J!kiH"0On@&fo1Sh! R ꩏ s$ݫ(>@_@̻#zc*gB`Nj7iG9i4B;Ŏ]BA2 \CkA\<.lL+*&FQu-"LB,G;BD5ӂyNłnb$h 1jf!&$:=m EB$Bu3nR'`!#&%, 2 2 \9{n/(<dn 2 \t]?p7hAdAdAIGnPUll:erH6&KR3UL ќyJT5xJ<bFp/Q1`!*J A.Wܐԧk'а7)`ߒ{}#MKNMmLLg0'|_C1Dmcj~ۘ+L:FQ6Zer7|[ 9tF TV):7 W!m0ބ=> fCd ! \]Gwr, 0S &ŝ{"\/"$Y+јGU7g¾jLT!-[ )!$,k亭~!weLWnP?ऊ?7Qq'19JCHVei3FWժڋ; ъ? !#P H c)a"2TWo:HVSBH*DN!2ʢlPM/X�B!B ҠL YG$r>eT dAa$ZkJ䶓 2;nK_ȊF2[g Vcl>=,Bn@w^ˋ,tԉEAλ?DXj`smaOI&PZ(cޮ ']9r�1P Lh9U֯wM%�$Ł |4 #&f#D пn1=EiNֵJ0Acz e''W\?mNpJ Ėv~:噠* W h+@ѩ3 ӽ$]dPH4Pa LLPZb]vs<ȵʈl XBO޿&Q/A x%VjsAd "{衇iQMW3˭~w2BLuӢ9LC*7]#ωn0˷ OzVA\~V{Jwp{"Qr#X_jh$5tﮫ(7G J,OTeT$HWFN`ry2F!tv4`{LuEV fuo2:8*Bc=(YP'V?rA@9qsb)@†z372m|&<y�U0e~!NF2>9BsLq'6@NA>S=zRUY)D%S%"Ґ4TXl@a/ 6@5u]p2fK#!GfԵ2* cT-vfUK#ĠؔrNcG+E%@MrfKUW62 <ܲA#GyWXC(fl"c$ O.bޖ4TR|_;ݙDucxA5@>%Q&hh cl\!t 8:šw 6H{ 2dU<kADm?oieh*�o�y<F}`[FRşC((r2e~TIߞB*QԶz"&HԇΛ6T^[ڏE7܌xTB`Ub#6PHEp6BSnN&Oy2L:n"O+�b7c!q0dAX١Z\LDJ!* %WRT/g".Qvb,b͂l N3U; F\HTs(q�!!v5˧:'7V˭Yf>fY7q,X|jN4ƻD^u ,V~=Qo !uwWZڀ(ޓCHKc`gThkBh*$R*xsI!ɬtSӥrg*D -@͌rS*vtooL^݁2**xRZ!$9|wB=AҥrD fhb<pIKf N恶űCma# ~BC|`UI$rݕ_).~=|k'`ck&{9ヤ~}uwdAnYY^tϽ{ˈ+cF I΢#J&Ƕb&6vf'Dr1rERXP29*DG9JrK{o&PcGM/%.#,rAu u)q *Z�vod}H2nXU13b7i{K)L]9ʞ *"8y KSGH(잩H 2 -w{6<SJ]S-LE! QY,Ò@ϸ%*sHүTL0ꄋ1Y~E&$<ȟk00w@sص\JgQ{g(XK4Faژ aK5iˬRg,ܜzܩ,AڀѹѧB;H�)eu/Ck3kHX.I# BcC*-(UtB@#Zorɧ>1@KMNG\4Lj7B@pq /[/mm ,U�@% @UF�y_OƴD9@.ak|a1aPٻv�;Fx-%Qʝqoqn N})f4B$!1@d%3Zgs{BTFrg ?rf�G[VD{q! E@!yWV7^,lGm�xAd¸lT?7 %3 p˻pŠ�T0g Z! wRvHcuhsTheR'b&H2<ʙO [-!K1)kA2)9VA`hR. z0[ *pUN �. uv9C.m'I؆ 6$x \)QiBLM#U'b@7+, ݛf`(l*$a*Sn44\ۻI)\1A3ݧݤǘD+ SREN`@&N/{C!l|�|fDH|�6;x`S`Sp5" 2 '-;;;w}̦\d4S]BP+QAR0IRHF$c$c1ˈe*</y"P zrFr6ÂE`^r-.$,umk[!* p*Eau ˠ \cl&2%:b2;ٮg}4EeI~*jxy.=i8n�A/Dt@Gy@<9IvC�{WY(גQ&[<�%O dwl=QnT݅tM0E0'yk#PGk6tU6XLfn NшSZ)'X/0=j$!|S4ã獐Ù*R{h6 &5& ܾy"ٽ޵JBKͨ$BZbDO,=|hB 2c[t)ۏ~#Z l1c2wg Q/^6$fl)D7 c)�)8e X}^i5%T$ez.D(_=zcĪy;?Kfd|429YuK&hF8 h ?yܳL0`瓏ef Fg.5rfY&U3v~!=|zfk$rTNBҏGO^~#+%JΨe:qf'rQNQbR(dAJ{>p?4- 3ȼ+IJ�vd)NLeHiDRQ 4b+6#6Lw}ͪ;ݜXGq9[nwAd˛YڮujNBD߷.!HzJ 꾔)ђJEr_ڻ !hd'6wՈg$g9n 4ONx b42n Z4ߞouHDZCP^J=9ggz+\K.[ٟ3wL}-LB}F)hS$o]r Ttt]Q]-ͭWMHLǘW`SVm mRorC Od-tuw5GoAdAhBexGmGXLW./vDzvc^a8~"{�>4Go9B9R7݀*4*'FIX% Nǀ4s4,k}TEΣ"fn$>ܕ.|le.=>dݐgbN9dzq =Y(FEdab8 oV!cOR:?)-.hk/qԬʺ/VYp{48nxy.AdJQ|؟ͶnUWa]MIjrcHde2^kbuI}ͻHk[/c{O-[,ّѾz "MMii~CP'lF(sXWFc 2U^g|˙-$25,Q/taݠoimi`e'3eE Cnޘ֢q/aqsT&9~ߌ-Czh2>:Vȟ 䭏?W>XGw8_o%]AꉆB2{x^W)IN9� :sCt*_6n h~҅ W.kqpl(v ۽ ǜzUӊQ}Teec2 2B{('gxb yGNYqyBŮB(Ӻf aMGCAdAhu[ Ѡ`u-3A/= 4LJ*H~y @_YB/�/0h}OJۯ7Unz*z!bBH֥!i^3n⭊ݯ �AeDrI3AT4l8X0qpt;?ԋBi+܎I3Fv>"ϋbisn_-| @ FHbhO\56,$1uEc -vn[<n%bx > rdccoo3R{|qzÂB.cbj6 հ5P7 g9,6neasWKqp@\GUԵ1 %aA kl[E&a<˞#& $Byq% ' Np^P1^sIjWH"ڌɼhT Oȃ, 8wo`C!?t}"R ̀y$ Zx,[nFQI>!~蛈|-h�^0{+꽼>)j>'d]-c& A O^ SJ%2 Wa +"c:{=$2 1Tq'=f0Td8xi!}K֌݋5POĀI=eD[^x#)` 0,l$Ssk` ~45E?�r swQ^!BaBt24xC&T$^1 2cNVf7s ƋfK11G`4Cjc$bG5ݩ-cz}o R&Fe|>,].ruқIKHCH+piTW`dd P$"u3AFleWLBb&H *@?1LULSv Gba8`O 6*0)p(Ito8Z{J0+9(G"$h`DrN!D NFBU vv3KB_hr$zB#Į)0AL0&ő4B`aG!!W,Q a$,iDʹ1M�= r5DDjcc)Oy_OEOynRoVttxqgÃto6;/jY T( !\P1yZQ-S-wʢQ͍%2|@RaqLEu djZ^b{"%&HN :bؘAʀW^2aA/sMlz?-?g@ I`-|7jI/Žqn/f; !U9lD^Aؽ*)O g1~&b2~b!J"F"Ĥm&ko$ ܢ # vw8cI Y~nr7A:n*?[!FI?' (?wvWH$8>T{'TF aN]}@nI!D B"Domxf! zBB"D-BXuCLe!#y`ңްL"BnSxM}Q*�B>?J6qQ 4>A1B D-v P!|i~ &ddA#˟nOi&G  ebqT %`0g :xh#Nv?tWQ_(e>žG}!2aRk' EL* 4/H(+@Ѩ@Y~WVZ|7 Z`'8 !1 1Aev1@1A[=�v>g|2YA�lDiSJ C T cHL,B<`OYMI2s"i&0sª{LPO}ao& ^Y<BB{ D{JCP9ⰞR1P`M 8'ncHI,vlH$yO_GEdAR2/M7^;Kg.]ؽxigkpwg7=::Z,+#)&r\F$u-uELeQ4@&悋Zj`bZfg* 1e).?:$Gb92f2B�6bQ �~ ; Kӵey>-e0)?hJ`0tP*e\=Os֡0iO\*ȕ%if!#|h(-T O!d $R}lN279yTn(FH>,PZ+L)WR1` vڨ@l7y /6>`MtEHPYЅ|SFZiB(B1uV!-iUHOeBx/t1TFYQ>g7s=$(r*,ou|`ډ@[9l ~O4Z[GW]3^큀AdA2^΂ϸeEֱ2풮,$$Ac5]m*u2ҍd(8Q; lZ!c~QXKL~*�T%ƨfhEy襜"Si&/DZηZeʢT@&#=@8Qegl`2%a6, )i^e .Z! \[! V}YIt'2 ���IDATWDkѸ8&O7xf6;}xwnpwk{;MU=yU뒹ehT(  ,`bFA]KQpbhY,Jb*H҃%m'c&i;?�zb4;s1Ű7R\dl&&!owEɉ _>y*02Psn&[_3GuPw{sҬW_e[lmr馅t?UTy GABW1u}/d싲&8D?s՘ \facuyw??id2Ix,ݘ}X*Ds59g(mÏWWAdA>dBGˏL?yhSW%D8/eK%S[ܒ̬hy[P,E[}g2; l6: n-m֝)9#4C%ybנ/W.B"܎ɑiG񞅰`*N Ij/˓mnvk%c01K G_T'\U$/-}V- \.k3]v!# 2'UU|X,Z\OmeDggwvOonݸy]ߝMbF#.GE<+뺮k(GQ1.&FFD\T"RSEX CjKb"dܬ|#L%)2g^fd[HW8۹(.9O$*#e:/|CajrNTFj*4}iEMbcw֥UV {՛/h"$*IT ՠf>-L.ᘨpnjgY<"d#$ hQɧ?> J౵'=&#'!$(MQq 2plF)W{ 0} &z<FxS`,1l4!'T/#`#ҋ]{p̡*!= *639/ GIl$G!V?ù]a!+4|PyAdZnXke~! wRa Q {$n͒| mxm'l"}+#Z R/22(J қhc%6|2i/2&ڈ ŖQƳz;R+@�r[:LжpeUFas!Ɩ%F.\v B|zLOb:|7BZ. *2BL @׈!:Ca)ݞ G*SJiwA~ �= 2剈u-"D5UՑHQEYqyhuc&vb{k~ŋ[[{Gl^-x>.QTŘXjfB f"*f1[99i[`FZ i/TZ%.lX\pB@M /k׊Pp/mw`K!8C ) #eܐIx1:X0p"SYD; B!UVdxϻ &�MN*fq#TD*kKDU:-|#z_^TzGDŽ DV�r@F!3dAiXLKt}]7'0 .W0u Gw�K(Œ y+ZCq>j<<瀍ґFB>\nE aQ 7Eq!\DHq�()B\+#"D )$Ɣ@ B<ҟk] |986燕/v !~5a@:i 4bG$lx]!aq$B) D BB !D16� 2 EIe quDDR +J\ őSL0> #QILPXTe|1w2TĤ!Dւ+H&ϡƂQMRsT^_AhLj G qL  L T q gv4JeJ" �-Wa{@5<6,TN�cMݼ@#pdEη! L0^y8_$&Bi0'bY7kSL0BH  %@ T0F.'C< Rt,ʃڃ`ڃt"bH8iwi6kFyO} 2 '.\h4FeY%3/h>;:98ڙvkOOm,^WSO~M=??{򓯻o׵Wr0fb8\TGjYRRUuUD$SOSe+4"H(eQ đ$n 1A<Z^&vF[zg\j:!o%,@ ,<a!׬&XLD榋L%Q*hnIپjTނU*PaTkM <B`X3.xs֩l%4B 816tB"Q|X^dA(=A#AKH*�KM!T X؂ OlU@]4+!gFqNhi<Y*y#<P#`EO*^p|`$k`G cARv#B^" N})E" H!@ ĭEaꈦpuoQSI`vF35�B`0I$i$xcCJI!bjCTiY)B(LZ ե^}PO3ōN7.R+m;Tή󍧊OgVOZ{X{of{d2 {}Ճ yst!m6|TQnm[;/[8[>ܯ/vZS6Ͼs>v|8mV^< OYتخ/Bn8]xtyәZ$:/?YX|(\f搎hB f'R#č"�UheR5L"ey34 AƂjaRւjeRhcsЂ \&`&@UH(QXQ jX`L:j%Ϻv~ʛdm`H7:v~= W=Dyd}!{c(_'0A Tˀ0Le͘fk{7)+&hT1p%\E$<.0))I{Jk@QH�y# {y~UL�6 �6v+�dA91)˂yLyYU d!uňyTS:g[{-{楽Kv/w~w:ٴbZ-e9)i(V UU\̧!"$$ik rFr6ID .m'>+q\B>Lȁ:)n|;n&7L TeM R7G"FQɒgqqF&mWVQoQBurZ*GׁAm\6Ku>cBRg顖y ys;Χ`'p5CHP>H T6@֦VYBI sh�uVxR3ObH4BZG-s=B5c/~{;DRsHOX9+^SKsE,vD 2=)nȅ1/s^|s_)\ymq\ګ_37=97*}EwO>#>Iqy?8/,~D׶~paޑnU~VBoҟ=]+#~GLs/ZSE|gpXG>+B}ͷNߠFO_GZ?}}Aۮ+?+wO^| Yaoӟy!~K,61k/{'=c3 A_s!}?{ 7y%G{S7}S;WDO7w~9+/]>#&֯BW: ?m,޷5~n0,fmm ]rqȾk*sbHO؅u܅9. ŀ/+~TN۩ V[e!+v~PTQ*"K&;_)}W8RoQageη:;][] CG)'b9yu·B-?SeG9=PУVTλ=u"ԗPS_[e lr* 2 !Ed4WBꊨ^,EUUԲ^I"sH4*Fkӧ˛n^tp(޿;ټpcIAQV𸢂(FT2\pB-1!�|,I鈗CvWf "у ҕ^ D!!.%leSسlh+c^`c0z-Fʽm.e4e,G¨C;X<V>>`l$mWR.;8Z%bN@VSN14&ХVeɖ;k9OPR[⻻!.7UD9Hu~trψF˘$Aϩ*h7`uk\WTr@ M9_y~n 7bP3zWXJ<DϘ:Ͱ<\ SsH[6V/fs-.%2zsXx yhn?=wψO|> O_Ye?<{c~/>W>oYwF_s;?Hs^ �+?>އwo~'=c߃Ӆ׾}/?o_ÛN~ܲ �߷Y}o}M_/x?|Ι?{՜G}oy|}Տ}K׿oy畼Oߟ~>ogo[gK7_Kf�wLo?{[~qgp~TWFU~k^uSCmT?(֘cR<"n; .uNێ%un 4c*?d9]}Cew0Kq}Y`jJdPU! ρ@wwAbV0 &տ ,|< ܑJfm1[hliV3_/7p6 HoZsrrmᴙl8=i1<M~}7.=ʊflnǦێgbA 33$L\,2jQZD.ZiU/h\kI17v띝ۛ77.moΦѤ`jł,dTb")x)CԒ֦XrȢ5;ÖWe00D Mmp\"q&+ǫ3oI: K$R;}mi/әwJcqTV7!GՠsA2Cfk7G!BxϘV#ĶV9}U1̌u/C[ R D"uݰ槄N>nܙJDq_ ~*U_EI]nÙ*po{p=89vGRz۱aphNpy;,yoG (޾إqݹo+dQu͹r^k'fК׿gIWm#4q,/'o|_hEOn_}>L{y~~<sja#co|7woF^T?_e?~~MG57ɓc-zۏj]C;?s*oCf~cXWM-7~{ٳ><rD' gR|l'h1A;a2D}\܆h6[Фwy*/M8 BPJ(ު?2q.r>u0Ϡh!qO v~<xhW7lv~(up.nnDf [$ ˪$?KF6&6t)W9^!$[@vԧ>Se?^2uŽ5ʉ"Z2G 2 WO[ e9DEUTQ-u]u5 (b\%ѩz|M٥ Ӌ7/m/vwfG#u],#I-りX`gYO92~8]Z=ë;&P\e:m܄K˧Na IplP,>A5B p`q\ݥX3cn.֛i,/arͷ#Ti,?jGOJQRzB̻Fy BbmF.4*nA477t}1nFI[a VA<BalԨ`J1o%~%l"S#VG_*zH;ʁQf~RW H.TbCzxw4i2 SP֫�!�la#c ŚftT&2!ݴTAAËL4p5UXJe`pS Thl=oxBŎ & `SM jC ʼn[D*P@Hx_]�[쎇0hP!&@9V ]3&"B?{-m_m{srop_Oeouz_.z_ٜ.wIt!_[}^w\|D$D;=KW?]xu٧~ˋzy=O{.T_{}/ mWQ$TB4; ezq&LC0-˲y ~Mw*x Ę^ߛbԇ bOQ_h;׌$Ջx\L}UOD3A44 \cZ0 B[qI: b#2Ao+X&H NrutX@ .f|B/AOL! 0A|3N [Pe ' G B*V&paMxV5B_QI$bR@�:4Bqc"${o�=)';JHM&1`)7),-fY nqt N,G'R�vX0: ^)fD:{A䪊 2QAeYNƣxu<^VFd2ꪞ|_i1|wl<[?|ؗy&wV|cudB;bfh%=b$1EEjZ&낥ຠIҔ+?,T UBQM,-MPcB$�p2&@9 B@<#&ȧ3}3[x.H‚v?-?g*ˆ\;X[gjUM+ܻ۽_u74ڪ7VQ攳 xa<ww@ bLdB !D8"$3D:)P>0 aP[T�P Q!49 6{l7yk|XB8Vql @]Z{L؈R#x'Nh׾0SLwBb,jp%1 ߊaZEЧѾ<bVB8FHZlWO�7q&>֨36GIS_P yxA^�!dB("8g̲SW_a~v o~_xue΋!owpS_p0^N._#6<}R/?Ǻ`*_s;?+o:96x.{.g5{շ]?Ӆ| ֮&3ؼ2⳾"a[i3?{GA2Ѭ=QEB;)<GBXB I&|;K/OL,/h2b_Qݾe%wvu.AC be}(( з_Z|.S -vaj Z`'8 !1 1Ac1q\ ltDz*; sqqWFš*P1$Lh&H!Y!jQIE#9'RL}fH!U&`L0A"X|$S zc*gB`#B̼aM8BQHA4HGR^%BA2 rŀkt "*ˢ,GD$˂Mu]UUUUu]5RTZDhe2*On:3aHMyݝÇ~ l^ٝU(jT\-+q1h""E=[TE bT KMuUE1*Gu*"h-͊ԔeZK.JDj"`4rbi߃$EBAh'CFLwh.WP�_!7%7TM=$8R'zmqUrɾB`;(WQGrؚoo"ͯ(PFa?"nڣн%N;5W݀RH{ !+iB|WMm}@0p)%@oRPÛk`f2 v7Uڦ16d G'k<FLAM^Ri~Ǜ(f; T>;n~ 7Qn/i 0BZUhs/vSY"YVy�  ݘP5Bt6UT_ ]+`~O!$Sul呠voUSΠ- \iW@^��G{6~8'׾}yO`+ڈeHm]j~~_w/�y/ wZF_`w)/=?LB 8NؼR'W~oiND.:1C\DmqdQdb.>BvDLP{.<AVG*ZY&Ac>/_E62=CQ&\_#96uqe8齿*Xj>?Mfo S`كG $`L0<)38J@L]l*P &V!rP<8@f~@O_nG'z;?8] z,t0Lb&HY&(-L: +y7 z !d/  e 3[4vb^EO&z3܍`@@* 2 \+)ff.bTǓdueeu)kShZG4-}vd-գ'<~|܋>O>ssӟz˝w9{t6޾\|糃Q)+ e]0P]S-,THYr9.eeX,˸5Qce,`* f)J݌Y )Ϳl,bIڜW :pXO%u:u|Tmu0* `"%lz`ך1Leً ni*&8}|ncF~ Iy" 2Ɩ}o̚>#& &PAcdņ"T ! kT?a" +#QqhY#Ă� 4_K.B=A)OƝH'[w]!9=ێ�@@9El^8 z#N“ |  ' p) 7\Sx *hAE3`uT* 0] �358d l ˜:e.J#b[C/ G_z�;L)l4(=k;bPlݱ!)o<hI��UE߿y7}Om<?7s210/w8ugw~'SϼbrS{W.]쇷ڹΥ}Ollw)_mLoc]"Dv~mWTK*܏]Zu! 3A"\Qfc(v6 ruŲdrD}\a U†9g ګ7Jhf4v0�]ti/DFrҢ㤖udѦQќMiehM��r<I+jvZfȌ5;A:1AkF"> Tm^qR~!ڼ@A=P拻I(nF.MX *<LWL0 N! $r24Z �@`\? H0ܬ8ZN48 (`m3 ؃ 2 a.˲,G2 <YWWGheRN4*(*\d*rTfkt +wy^u >殏yѓ'<>o}թ|5oΦ[a]Vt>;X̏UeAeQEYpYG%-KbBhD4!ZaYeYcYe31r7ą,%cE=zLkI5*(b%on2ڔ? 2 2 <|mQM}䲤~x=ƟϹs}y۽~oƱ7_ICi/|f+O?ѝ7NΡl~ yO7:]/][X_M~Ϗ3Ҿ/{rvrkU-^?~[_wsS__O}<y;Fέzaz{f毟 /67pEw<=OM,3V6 2 2 NoddAy2l;IZ"fE-RMVyRl\wjyE[{]8ٛ]Q5.)s9jG4,˂'-W,ˠ,Sb x_n2+ ,Dp\cOFBb"X'~ NUMTti|U4$5ɧVj3lZbo %ӤK7VPxҌ &Lwe9s->> ~m:>*tC;c$YCvΨ*@SʩSPC+1�y8:kɨtM @fF )];{{8yK_2**7tBH(:l.?Tr*AAHhN6\ B?3ݙ$_Qz6<ж8vqG]Bf ɤFoIBIlN!2K!$lZ u^3DVr%wMC_S_gέ~ͫNǶFd˯^?~fÊQk}vg<_|?ؿz`q'g'rwooj ;mWxՐs/{Ig׊\\H_S~Y+hHqKxm+{97[_/;ͯ>ƥ|Wh*_i;wr mw4_teZ?m+O۟?_U>{D!6$Fl? LrvF9n푁- nlM$;,I< Ѩ="Ƃi'U8z]O& Q8r&P}|(qiϺ8,muq$Y`Y#RI9uȌ}sT"$ UhPEi zVf^T,F.ekK܊AJx]GlNTQ=yznnw4 2 \a4a*J*J&*iV* ^,ꪪj6_̤fQYGzYtэ:;̓ v_ؾtqkksowhok>J('\ RRIT"T-~˲d^rehfn,Mk&*j.K:#DRfHR,TL0᪍Y H%<(`rAܩϾSRşgWYoJ@ڬꀄ! œnϲ3उvN5qe`ָg3 \ ^}6\gH/;Ǝ*@M$ %M*v/ڋ^I#N4{4B 2R^[#+ńuA\B@#Ӝ ~>ŝĪpBP@Hq]J52e@BotOzK9i"PPռu{Z?{vsr <0[zM}=,! * {5"!ْF(xrՂ$Ԓ>_ #DB$J i:[I!$Le!0o$\yp֨6�  2͎A(lP@i@ B!tCp+B+ f =p2e}omd/<%r*|~C^JuNI6.6~9ěѸ/<�~h^͏^bcWsXO܈/;V|g-Zya�W߈ز'4zMǝ-_-%o|ASOWo{/'*S"+>3n}m'^&`=ay/^֋,BG$@[>0M}Om[%Fy_Ww1 ؗP8'`yT0gMaWs9Q2aAyZIdѨ,Ө4 gRւjeRhcsЂ \&`hF! hRv~3-*h`gT�Vc!1;_ bi;?v~C `+oa# $#x0_&^bAz8r߽y_A@W@E&ߤSE= Sr3MJ >&U>$B�\}aUB|z�*f'ܤ^{š6>zQա? )M`B )I`cgBHiAH{@DDXm&f.,,e$BRKUbX,D泊 bF+:{ntNy}vkۻӣpqtTUi]-<0RuI%T0s \baHqa 7ASM$Q[Ԭ:Qą#CTUR| au`^#w=-]! ͉Dn61w'<ܹGmfZ dʙNс1 !V9"6R]0 (a<Q܌.x(GwdJlz읦rt]xz@v&,trj!9j?XkM6^ce69p9hz0Mk=ہ *ߐ*tf(y#D*}NlW)P:fe'6R*Tl_tjTHc/<.}ybg!(x>k}Fc︘;gpߚ碿K9^٫n]Sg~=;W.eT7̯[?kz~om}S&εQ_̕|s/ks!y%kmaOh9'lJq)wwޗ6.s>e ~>l2Wշ?o->Gj$mm4$Z9`&*. ȾIdG2F)s#9ɸ۸esH:>f.mZ5N F(EmJQ,LR:FBO<j~{8ROe\2t35VcӈM~{s KNh]E ];sZfzv IQN+7TnYrS_`NL} sGն^>{1A-"B$>F,!ͥRQI+EjY^*BňF%MƼV>~Ӎۿioo=ۺtpi`wgz??:|QFuIsˢ4`fn|hB7Z$DL,˷ 3 K03B,[S`2](ӚJ#+mdH6GLD{6A [H$8GL`Y{&i{11'<Gf Ǥb%3__‘5CZDxcG$Z(N%CڣE 6TMS\<lM563 i8M CHE j. RcL}8th�k;9�| !щ>6!1G1~Vуl�x ؈]n* ?)EҬO7GG 6B'  BH;Jt$dtZ9J`a =Hw$ {M_ym.O/eҰNn9K]O0fH,>!L ;=myg<}znW/_}֌ޕzgms<'_ έ@|֙KاLZۇeʈ_񜕖uǸ_SXokMM]7ݓۮ+?%k}^׌r/տn'M~oLGj?_OjVmw̓|�V?e?}B DFOLx7%{&fx}Jb1AB&h.� Hf5(@ME|RW3)~ t)!N+ `!DUHksGj.^kJ9ǎf9!fLP[N*Ojx RurN0@HǸh<`c  (NN!!ZM})j.ث< DnRsEIrPYCx $ `#"iUzұl $+I?T0Y7i odAɲ\Ed03=eYeADBu]/꺮uUsUWu-BTy2.6֋֤T;[G67vvwC::Ţkde$c. B,^.Bծ53F{MG]6<Lӫc2 2 IQ�v�_MyC>�L|j.�ﹰ`ʊO|=Ǝ;7I0IE_NETW<gz۳vuGo=W>{J`sUϮ6Vk^ufW�u_"zENG"z֊{w\_wM?czm�]dAdAdA~QwpX E$eQEkeWuMDEQPQDeUdRژt}۩6/mnL/]^xtp(tZU"BTą3,\.̖#B!�LtkD$NHw~mo8DMقIDL6Ujq&(ݤns; 6JMf!)_Ļɕ4u%a^d87}lMw9ܷMÖ/�h4CrIڍؐ(Q$IBTʮ߀ۆ]-#cKx20C:E?OPUP<B ٬: $I!6#`C!Ȑ $Q Rj *\턦nx{T.ڂr{ARԇ̽!' ױ^@H𡳡s~hE`A-*xf#I B !ݴT|p{g.< {91zC`SBBmR=aA&@9w dFaS R'H  e90c7EPC4BC7,o}dzZϮodLOy(o2~缒׾}izjtWNi )yA)Pʨ OMfew߷Y̘ͫxLD+/9Fs^vC~MGq}ϙMDB}곲? ׈%`b`sFᆫL6MâPv2 XMv*x *bRc1A7G"@iˑi5;+M]"܏|w+piTW@Xo9|ΨtVcߗ z _!2A c&]8786#āI!CavaL;2")ƤOR8!3󊻥SN@�!I[ #MPĤND0nl|΃4*?G/xøiR#DrGX3՛ L0&ő4B` Qb#BتL }x7lKy) DR2nFY 2 _޲(ʢ`b91 QUdkkSS+k OjT, 4U4=\E/>}'>^pG<n_9u m痦Gj>:ψgLӂf͙D *+"+Z,\D%I)Rr]L.NoKW`+nIFFLl*(*#u7U Tg;*9Ea`@]`O@L·?ڎRZ%qq'VmUv=C Z{bNq%�+ݙ|o(_!BTW'*#M뀐@!-u{;>R[ Pŝ0~ $'F�-U'.,]�B̓ps څq@تR.?'a9?w(?[9ȋSYB{'T A|_-)AHVW CSy <!7[~-BXuCe,ί |PbX"j#(IjԱW<OP/vq�!dB(!4�KU(.dL.'Զ74]h>S߷Y==s\-ː+wW]LnK~S&tD㞺j=mqW_tLj_Q)_ ~qB^~"zg1|Xlԝ.Ha$nj .s Q-h䘈kE,( p)&H Rj}D4JOѨ$4nvfR:5hCy1S J [1AϪ9_ժ�V\{c2A 줝O !8.% 6`@G?@�?gGpuHReDq@uǐ0 Yf9D!$a竩/z=$)u"[ԇAcgzcpu3tZrŁ؈3o18q.s#Dn;&FZpSt" DH! 2 0wMFޝ3QAT`Ug⦂ &!.@1*h<.VWEEtÜw(wut:],,,ʒbDTEQŲ=bYZ*f* R(؉Եu ̅/[RX.R!3|LAUr^Cqdq>;(l'2V:ʄYƪcUSȕv '`ޤ{`Q@2xO)9v'p!@HsF*GUKca<{=B::A&u&R]~Ul5休AHv+(y9ǟ 0g&TW'ƀ *#xdɫ(9it8?Il~N�tQshqlYzEPxH$R}'@lBuy 5i\+sz A6/ȷz ἒ{.Tz`>^<o>͸g{NJq}6byCK>Y7�k/,v| ?t%ez0xMyQۛ-08vv˺4T.U-GDfə||pU1D(20*_7&a9\IcF3guc_yThM*,#c3 5ei11 3 c Ob�)YfgT8a&u zRֿ'2.Tdjn;]bu/UW8@Slj?2 |x_jpic-GBLDE1YNϵHA&քNUtn1^'aup8?Nԋepy$ňUD%3*"2˸/0IATBL5HQS LJ~ABߜe/yjO@6貐BڙFBK8js n>ãO3U[}v#Z'Kxl# mm6o`jD n>ږ)6DaTs#,zcHBJeE* r=9$R hE AL0QR^2A[ 27  r'4I{\ƥm#$<!Fq 8xXCB aTQ3 Fl;dn- R.O2Ci4&rxSq;6^ӏQ婦>(CE gx4[sGpSFHA% ?-g!8jcy\ϰi SA,pIP!zQ2TY=~}Il\a#F! Aa StLecn<6^ =ᢃ�[{-/I,Yb;i+;mo8;Z_cܞ{oAw-n�hOҐ<$2Ic|*P18J-BQLՑ"d`T=&L]00&X}!D! ?Wɚ Cq"4,s.QoM!$Xőeh9S#D$ rҦvt$<H.<:εvz?7!I1ARvd` 0Ge$'`Rߌ)2灘O!6D hCMBRd*tB5M i\xWCfRi"$`#p4#2A$!/D 18C e`΃,YK D88q`2 |H'1|YYsy%"Z&IꚄDj"ʚ.7$|d:;;H?}uxKۻ;iUWT- #.ʢ\,oBe1.`.ʒ ZZJJ&fEdZDʲ\.v$,7',h;[BLeG 2 2ȣU洱Fn Ւݣk:fG捇o?>ia۳u�vۮ+'}U/G9zluТx4 2 2 r2<]He.[4gb\3-_+% QUL\bT4*xRFqݹGSb{`ksͽѬrw/s4.qY(U,LK]R\2 \|N|zae˔QTBEkKԱB DSH+Su{83Ҥ@~*mTtrižtO^HRlֲB)$,j[peAHt$dS\N�M I| *TyB=d>Ǚ�ѤfJ~9XtBEK(gOlƉsvϯIO}!|rVws|jQ/R |Fӷ_g`.ԽRt"ĬZ7-*7]tQ8|�;f>xE[%C_I1{_0x Betn K@eA ;NJR`ۜ.Չ6Õp<wZ;�|㙶>pW8߷y-vͯi3LR΢#Jجl~]*kF-CnmjvQN‚1S*CWkKvϛVQTHYB'*-Jv+8%oM.#,rARY64 *Z�brJ7۲0't96SʌI3Xσ=] [{M} [QZ=H){'6`[ϭiv/W 2#Bs>z:iΜn5gEDD<bT.w3U4/ DV>5rvp`AuⅣ888ߟ̧Ӄj$q1*G *yYY뺪Ze^|&q0DMQK"HSn#ZKQZŀ]yw@s(ٱ\J)=27_Te!GˆH\'v@l#ʃ uXz}‰3@& &3~퓮FZ=+`u2R^[#w X_g9hl=Mw ]>! ~ug@*=Ԝ6+W.̺z/)*v0UEL.+ǥ{B5�*Q 6j o+BbʶZXjxZNkRŕ$\)<d1B 7[@RDw٪�'NOe)H!@B y _'!a*y#ʃFG.N}l~JbHT~&Qs!ڃV,vSUlv�_5)c/Uh?ѭYw_;~;8Z@DYK{x8){!޵vqk ;iY:,p DC"B fga.�x "Fނ*&*=i>% )@+ӨŒ?9HIXP@syD* -@A`2Y_A 9%Rz J43*hR jX9&ؐ(wqh;šՎlGI Oyr생O-v>\q$B g}(x|:#TPaN@lnRLM#D Qx[)N$Q 6[ k*+CŁ7R*soqqQN `Sp>||A _Nt/lO{C`hYsFrD#f[S$1%eezTףŜ39dk{~isvx(;탭a5UUsFuQRTz\r1"".3 Y6*Dkb 7CZ<c?>K,Dn61w'<ܹS[l~cXe䝀)7Bb#utQ*hVP4')&crt~G{5cyM\mΤu? CmL7Ž OEffqR٭E(*K;?16.uہ f47sc]B">'6t"U2a3صFJCk99.'@ɥuZTI"(��jəkً M]g9~GL^G=qF_ɶix5h[S~u~K`G; Q+r0[\C'kxhHάcM\R!=M>S­+H'η)NBV 2Ati|lq|stl/u8Py9`F+,9u!HuTη)YWq!nh0i0sӯbr2*,v/Rr;U˩'dAqX|gNĀ Bdl~i= Yq-%SY4\PATPMZHo,EUӍ7׻ӭKG[;Q}0[, -XX(,ʒˑD;BHbZ �KXڌ$r@)1E�@v:$8GL`Yeَ$vgDY7|#5f/hCJ0%%!~d8L9|_nz:Q<j< CQQaCnHBڣEA(DnRYF5N\I hS U }�l rp$p�l}Dx $o?b2DCR C|wS;*s mcS [۾�oa 8XANz6|^<lČo* D68-,͊Rf{p�l@ "[!{lxJљ$2G l0LzS)`SM1x|"ˍ磿*OnqQĜczDaV mḭș�ۛn:}*GB6Ư~+Ln4MiOPұ7�|,lQҗ:oUT+ �/;xKqG7L, j|c%sKDO92Kz}Jb1A+`8 SY ]ΏXuqx40Oa8"5^ FQlU%8=nj.^k|LXqߜ`DrI3A&pt;>j~-2Q_N6x RurN&|V�yz6H|r,�'/Ag'=4)Fs%v! , &z%p><`:/)'q*Ĺ `#ᦢKඛy<&kwv%*v"Yt2G 2 0υzWӛ ONU p%"*b&fJk*y}<::bX;:Z;ܗݽjoXT~衝ݣlXPţ1J^]ԣ eQ%h"RU hG)[b9 ]m`$]VdAdA>d*gxwcSN>. ~m'ogo7ҕė]ge^ x4J\="=.Uޘ}υxC׈Eqro4 2 \  2 !pIv"T-i\EL&5tHqR$$bq`*bT2&P$%icܹhVLg4[ۯ[[{[Ht:벮bL Zߪ9CF:%d-@bݛtM-^jRH{\#՜.lG[&NM[u "<(h "WˁQn+5S)YDbTF۵HDDEdTz\63jkkժY`cA~ 3͎Qa@ ;#mw%ARٔK??ILU?)ԝˌAVP W!iȦ LQ/D xe-ŝz"^#zLeeL5U<Geļk곣6d:Z+h!j"$ۥ9y<P]Qq[Q1rv-_ɉk0Wg- 鷍q_zB&#yy%o 9O/>ܘ.[3YUd+/1o9(2eHY&phQxkTΒY2#M*g^/ F<]o2�c }L6&h|Ni2oKS?&lGTP(]zQ;k!% ׌rG~Cf I ! ݣFEy^pLŃN-7IfV*=hEFKUT2+se}3W"_}ReGAb=BECFypqBFq7*F2�@u˄gZ{`r kFndAy G?bwCET/.BMA G{f_ !e-F%4ZŕpUl6_lN!{Qptt4ϥRr\T\0ˢEQR9ϋ2%T* 卲 &^<sPKHR MĀmS$72+ّ)+ . �ʡ"5f.1` mnT& =,KFŝXU5&qx UYT p~qFqxV7�!QqQ]d7BH4Bbb24it%;쉸tO!v&5&-`DLp'vn6]P!\S LB3=Cty:A~% ! P!1 ßDHF$aeH@l0SYN"$f+BLq'aս~?1=Q*`i8|BJ.v5*<rwoPGK~ƀb<N$2Q]!D'BI鋀vD)b�_ 򩷎y"?Uꛏr_n5A;3y�.Vxjܭ诿`}C󞐍.OϺ*Ra=*WFC>!5fK5Y'3Z({D14噏9h6|fm wX̧WhT:Kaiƀ'RşC׆[i#3(( Ъ`MZ4Mq�lr~?&N/y _؛̈e<X UTO,b1kTR Lk7{0AZ[ P Yj:Bh4B<Ti&?I ^< ʎE.(TτFy,vqsnb'QfDfi`4BdA=~௖.Zn>ӚͅU. [(QRY ѬZHDbe:]9<98M¥ŃM٩GL. Y*GEQEYBj`.u!( E-5GR\IaLG|TR1`1(fqbܶز5d",Dmv-䣿%m?G[;69 1qo[%!{yI:LC F9!,-DH!J�&3/2M9 SO@%U3ˎ&*с~iiy%>9?]Un(sزaWۇ"5F !gƖQы]�^i2`篽_mGPq^__tw_ @?䅭/]-{Tn>iWwyy��/|Qۛ-08^=Mp2zhlj]& f\i>e pvJPcvr/#sh pȐv#=9Fi٭+IfȬDhS2 RD|sm7ȏ+R!T.I$ W F,M#Qr܆WPe["5ήS�O'< Ȕ˚afd8T42UMb%"^%9Ɋm\88s[[[{[UMyU,*^,QYLFhLuɅ E%"R4sY"TUQ\oX+L겮ik^1,~P1Èe\;NBb[Om.p q~s$"굻<%?O#'z3 ݑoy GH%u k)Q6|$&=XTH Q&$M*ɏD'aJK ! 6 ؋ :m>)nMRn?BugKNۗ) 27  r'4%RcؒK yQGM ߊ=*0j"&*.O@H0B"^ֳۥQDH/fH SY}>c#5e]jS7 bxEOea6 20J~[kQ4a Z2"43 !$fK# ˜MJ D-s!v!A`@bqB#/h!܎RfBحiTsWِ W(/yrvǾg~rn~[??:%Oo;{+o:j9ᓟyu|֝fo}G;Ha!|矻Z<BѓdTFr U#c00@pkNnYTGT#g`E "/HVҦ_3Ln-`K pd!"o'+a5k ! GG ^+dhU).peÌ0AV&V&3=BD 'm*kGHA=VTdMXx݈#Y)IqceF_ߝS"0! AHhc@!DY 0q4h2hDHt~B`V&h&SW "DJ#28C e<HS]SreHl8 dAU7pYn*-hzz}wjww_.xppqpXb6T YT1Y]ZHJEQTpY0,Sf* ffnȆH]sYEYL)g56fK2a"κò)N-N5XӨ(/a4:_YQH*%=|LIߡG_!?NhJ(KexٜA0z6 Z8C3`:{М>U]KQjk){~{-|Q-ɼ*Mɇ9Fk$2;6>-P'6`63IW~p* #9#=58nnq.v9m:1BzN= N|RWI] VpB^Us#?m> >>DtfS Զ1|O|m埽?SoUR{.T_[N9d<*qgN_͝~|Ǿg޶}.ǶZN;\f �_N+N<пi PO' $KE="Y 24Pxr@l} Hei$7'i d#էmKKmEH(ژGK?|Z#3YRz՗D} >"=W64nU94hrLCќ#8zP4BIʏgZr~tEu Z"ͧ/9<;<}y)M5BQn  2ȇ<r'M2)i<ZTX+ϝ*gl.GS9Q}Aޝno̎f,^p=/rD\\RQrQEɼK1SA"$5UR/.FɸLcehK'.4"b-ϔԗfI岇e;N%g&mFT&ܷ3>`.+yGx0m!^5.WڙISM%O"s/qaGkl ! @'kdN_gnu0qK6ХM=)lmrJ7;A ] ].G Ł#9^qono-a /U Z}~X xՖlbŒP9 $9 a`SDDyBhлs =MTNC8m<_`VUҗ>m/왦Z|YXRMrX䴒rP]?\9~u'r}mn,姾7qq ??17/͖ܗ7)iw>cs<潭A>Ɠ6#Jr/]o � K礷;.=)׀[V]WTuUKWѓ FmdEn 6X:cD`A&i`!ʊErRYvj>#I~Г6bmt'ȋR<xu˯MŴCeOZCo+W]k.^,~ Cer\l,QAPCQY{7<%ukER\lk@hHtW!m |<2D.SGH ݑ1chPxU- FgmΆXeM~!4K=~,xӳsKu֭S,L-HE[wdA0an. Ox}ByQbQ>G3:8;;G;;G;G{S٫véLEU0IA5 Q)T1STD,5Q!̥,%*q/SghɎN6,(^.헮媚Kv8d;p;5 8*  g^B,<{D4nMRv�fr.`AOGe~CMʣ@/Vc{dD}(74I2R^[#צ HT,Sxst5| Fz@#πUz1`'TKs2sgir�? ${�j o+DO.,5;BH($,�;Ffw$j<{0f$OTŝt#H!C%bڣwZq>|̩/.SY8ɫbʃFzܩ3I1<o B9DB{!b0w/v:L#['o$5qW}r|O=kW{/]Q\wy6gLI.�ݿgHfv/ڪ|xAdg1O>/՟/|էا<o)owwϾ5<^˞ҧݷ+O_i'?cec鎣C_ÖOظP'j JD9H1fq 3t(%j}S/^/mhw'hEB vI&Hқ *EH<^i5<v C+ 0`)d}ǰsL0( BoWA; %vq 7f(%Q,h/pqh;?lU lF *Χ;_]\[v~@ SLP#to+ӗB<-Q0scr Owٔ 4}M $@{81)N?ʉ^]9trq B  Z2FԳO�5t<->||AdGfZUnj/ , \i}m ᢮WG+g:<|ܿw;88MbvTY],ŢB˲rT<z1^P)"B jCdVt'U!Nn>P'\c :5pIk:nj /@WP[O@wN~{skuveQ {LRs;G9:=O*(BBHK6tܨ~05m3Ʌ2]y*獨 ?unR^e:QxS_7B">'6DHQ/s~ϒgG%'H~r-7'q{!NBRK+:g?) WA>?SkTvvm5~{fvk&sϺV}mv?[/|89/\K..~E%}NH֙_Q;WWh}G%xYwse-`"wLS"z֝g6wN;o{-o~Ǩ?sgV\wTֵ8-~&xH}N1y3Fr=Wug t1֠+d|+U`!+ (I5S~|Lz]e݆օcТlwQM@\q B}Csw9/6TnYrS_/lp$ DdTdAaDQA$D5QMT1LTMVi}j.^ݩwwwvlNB i$x4Z-b4$&} ~#2;GmAzNtʤ4G GGLD{6ajh8bb,}V#& 9&z?43sJ̺0ۧIiKBprn?hsd03$F Ë'iChhl`n?*lShEGQK;'kOӟU27!R5ހܧ? !)A>p6u&pCfn·�87H5�+�o3ѐB闙cS9"S8A$$!>ƹRj6au 0#е6aFuK r{ 6�!^,6�c���IDATz0!}Sc 9>ҹ ^Ku`SM1x+]pHIQ"%JGKvv~$vҎd,c;+$Oldfz$^b[ݱNӒ")lRx�{NWUkW}uHۋQ{WG<8;Aq"B^:BS(>C޵`Z[�~oԋgמzt}a'.I?/a[_ۿ>G嵶�AL.]_ww0Srŕ!0V}?GfENzap,οC+bxfS|?`;;c}!3LLG'E̖b.b.W൅ p% &('rO xDd2!#(| §0V"5 L(LP!!Ηh44!3A&H -ѡ2A1<E y,LOX* R]"23)1l@dI0Dj�-pbB"biC$Q*I:Bj\Imm!`Y!MB(B#� @' !QI2A-WpˤI,!r"QL.(H2+L oVZi+K_,v`-u:dc:Dԡn;ގm֧UZY-L,-/,nk/]_\\[\\jkK˃k## n,׻^ى`Ų;QS3STL:2$?Mī O]'|@Q>i<ލtrn$*GoA /]F54 K,`T(ן5H!D4~ć=1>E!$E[_i!=ΰP&K:;[5 ~v7Sv}`H?-eTxOpH@βu5s}q̔؉ō|б8Ōge0@Gy>M{gР>o0S<toᝩôO;!"jel�}upj2V6,u_#[V ?SDr*\˞jWxjk>mP OLv^?S_|'Dbf]pwq~%RR>jLP[n"*(?'<q/Cc&H19&Jy1[k#KF;mJRB3,1lLqV1`QA%E8)f~ Bʢ^O@ZYHv̔6rPb0} &(i3a%KhوRAoI|;8`P!Iʉ"$ZWDX^I'cCa2vi%k%�Q s5ZiVZy%|u|Cm؍uFmѾ]tޑCǎlޝ'G=?O?y'zC|dwm?shwq,w`y}}:;D6szty_&Tg5 |]k ~\S a 5jvaƸ;YCPG"!QwH jTR}LL[뮇vCp+p&2˲N;AߍS88v�N[̦[kTv5йάE}Ôlw =oEǍ5=r1zVRMI1x0ouT0)鬨1P>@8a PGqַFrw~wI.je sU|-=ؐqvnGj.8҅'t^_A:?/)r?^>ql='v~ԛ3rxo=#W+p+Xz Oajl9%w?K;^m?oRv/:OO g $čpI鱴4mtIR1l;HneE\lWwDNe&k3ߘzCEwx-F *b&t8?ޘ."|d!Ń&-Mn嬘IaC) \Z<8zuTDElME2!ϰL,a8Q%B YJeعY0l۲Ë!zBK`yEM! RMŲ& sKJ+z1֑d(U54.wdmU6d=3ڥ1lV葩ZXy;??87p-.VZw}aݮ{5c۩;E%CSk(]MHl#6w N͟aW-#4ŪGl.&{d"OX3]lkYC'?y[MbW?; аq#u%SBꅞ BXW+;#%7aRV|,= 5念",osKZ2UUi<^dk8yD؁ 3l\3N~�9h9aER7;Eن'Fܭ6(cjh IOEWGd";eOPUFS Vv2͟5W6fب_a |�lױilDX-0B OpVrokskd= ioܮw u/>4yϑ}wᄆHIC1n6_:k_M{c??ylk?:[s,/ӟ:ܹm{ B>W>ޘt<spT1d{VQ\} {crO^EXTˢ!ziC W�1(d l@P*&eL0y82(_=磢Y&X2Χ8 w4�#)o r勢=,9q<а8?ì# U+U&?s&HM\T ^i^eGr)sQlDH`sHU#B@쬻HHrxU0}fYI#VZinfb!K7dL0tDԡq;k`ree윝a\[,,M_qGwq=gQپ~n%%_Gh㯌|Ar> s'P N:[IP R'fqpD+ޔC}d\]m䆁6|p2~(1RąȢIdNBdfG0 |\aD %+ "ćhP% @_SBy!$I MXC TZ~Xʁ屷E n !>7!r~+*mAHO{A9#D$v�+""Xśϼ 6B5N65B"R$rY$1{YKgLH�a͝ACld� b.3e !6Bk=滸clxuEx{77hA3`'-@>aB ( !>T))iL<DH@|ysAwBv!;;aϽ@=-y><sn]vW%;wwg4uo֯n­*閭J݃E>:v;oU'm;wm綽W][k @HBV*2uA RF8Ge+L9G!NNEP }QkO6 ĂdI "'CE%<Ck3;PC d~ hO<p/R|~ Q?4c9ysQ2ArLq(LN2]`y A& $0AGfw]iLPyr0I,Nf|}-"2&W`1ga4 H,cpK#ġB0A % Z)BH$.Ș % Ny \AHzP!` $ّ! !,`I2SJFC H6 yyw9y䫯:77>~Q_LZ[ouC_ڄCT߁ONnߡAlkghC=1}kwȱG~`G'>Ķnߗt^>眮(p%C FY 'ؾ3<.^(0RUK/1 ƅH c%QNWد3b=D20PA\(NV&G?)3R Pc`+E P1*Aϡʄ 0sࡊZ"AN�r!TcU}�3ތmd^ #w&@3x@*O@B9^íwٱxڦx3Ɔ=d)) H)$ H6Qt ė)plp#$XPcr|`0ıS1Tsl;րVb_A!MC"t`&)anN DOI1YO rl("PL_Ъ! !M U^]ܱvMQ'[o2D_8>~ͅ~S;'JKY3m߿|v?ҋzoj{G;7ꗶ?frr}bbyMJ;8;&LfO.rޭOZ"r͝=!~9<ҷ3L C#//l,ggn4yrOLON~0zdozvo?a?z~ss n''g}"}eus3$K&&Ar b@)x ȠeSy 1F,pw!γ!W$ (,@ |CQ˗l&齍A<KrQ̙ B DU "yd ~ CeA(Wt$ ixc|H1A6)4pE8E `(=! BH L!EI) !@I$pnD4#dDN#Y$H:B$hb R e0 ]*S ҙR5$T N", KKK~jjVׯꫧOzO>#Gva]__Hn EZi*󭆄/^|^}@d\Qօ[:1c&ɬ ۱W/-,f͉hc^Șvvae)uy]I ܭrہ $< b1KL2'F(WEjRٮOy閡 _xw6Gr"Uu<=Ϩ~ E:"8 ⳦%  l3D]L娀Ws\᫹�f@و(' k"hu yBKP 4͏�*xT3جMM&xN FOQA!%*.Q kIFd"w KHt|!u qNlSyFc#ޯٹF^fdniٵZ}ginpZZ:{poGO;zM]yi_\]ܽwݟo]틟[Iٵg~zv?=׿xvڧܱ佣>L9X:=[k/]{?=7ؿsۮO}HyZ7%stQ_ OՈ̑3/�&H)̮R!;*)Jd g䱖oU $z* r]30X9~ɡ *GԈLC裸tPrz"8 8G9gX6\%>Oz.:a DY*wp0:�Pstݥr44 M(x(-�9W9 p2>̎Se_+k'FFF}#W^]^^>v訾э7.^zT@~iiiyyLLLLLL־k[sύ/O<qׯĤ^VZi%/Z?=L54ђ_/{}OqN3{Dn֒$ `ogdj73@_hG[M`wT;)aPeÏV w}R}mP`-.(C?*0gva }f+nJsBvgKlW7E|poBƝ@;_](uȯb/zboZ0d, WF,,2GN? {&Ar UQ jT&E_J̙4ZL<ŦoW`V+3o~7Oބ ԒVҜEQ#&KdMg{5o@vNv?:[j+@186cԭ{=''nu[>2@~zs[CCf6r0b Igء8wӂ Z% D7I%k8Z#CƪZ!m"a0|R3,V۠ *XI2A孉yw8Oq?Pl`Lvc\eq>OdE$|ܳLQ]dc$ٱ{mrm,/_ >E൶D (?8{MX2i~IdH+lXN+g } 9rN5"+kfMEg)A._k:t(U�>{믿tJs}}}vvɓN{G|T}yyo`0wў={;裏~c۽{J+lFďs%he?7tӡn߅<]c{Mp(VʦjZL:Q$͟w8FAš8YR4P&a@ˆ:I$x/WY)@5!Ag&t/D#757/*fqs*UQC./(739[8Rg(>sB){p  {(�ʓ6w;r p \eac~T` Iw3Vd]OnMCt=%iM>7GZfzsvQf4yX 0<],: q !gU𷘥#ӃGt^]]"; J+,+lk@D3;VG!I(G(=ta9"}:TRiɂA[H&TPOlY_r88o6R9B!31s bT{,vw]9EL0$!|%u9>':!ΧL=r{8ߨɃ<qLKEC{w CueB $`R*[S 7Q#$X~#liHaMI_65X>aւq (7YVVV.\p{ѣl:`_XXx^~{ڵ6DΜ9ۿ>٣Vm{H׫6y6ƬLOOk=ܥKzZyN:uҥOwyVZi+F3 _ qNDn]NdZ)S(@WUh§?!,!]4Ԋmnj"W3pGk 쓽t/!PAV"OV.Djjo=mtбlXB}�6Io-XՁ|0R֤E n='9н5B\"eTJ_~>Pgj+� _w0r6n%Lxr'"!NMBY=ruD>a`?]MhCy,>vvUV_|f@=ց`*ŇN@ɢ !g#X0}!,"B!㏾qG pxfi" $�%B}Fp;PfܐbȄl<"$2i0PFG`BS M_wa|.G0!!Rn<!D%! !6q2 7( V}J+(ˡ�7~r2)`z̨f] R#$Tc=VyJGɤܧS+8 LHdip!_D$ \A2\ ؞ "7 N+ 10A+!1!E!^w il O Vh&H q>TT|a)SRr_q> EI0[` f2(%BD]аE8!WRwl Z+p"2hejB-&Ҟ2WIYI  l>s2Nfd$`r&X7&+�r@E3iҺc=ȃIn�My�lB_T x?iZ'O|1kkk?K/?ƍ~Cwe:~?KRen[Հ+t:~yyyΝǏg>Cۿ/j[i-*\D+I3:]_ :Pt:,H&$Vd9TńA:WTY 7Pxi pC>Q: g4rb|sYY}/ L�T`}Ԉ0)kxz-̙#?n(%Pb=6D톄_6gxHܾPg3U!"*6cl�̆Ә�rlƇf1݅pY0M7J~݁쌣+2Beׇ� ~1%#8s ]�rf8a< FK>5c$6%"`7,< S *!YcCh#sxTM'ӣ 6\j5rsz𼭧Pl=.{& p)!,tꥳ+DsO > #a9FףHۨVZiL׻c_w9NILP +<6u *1}@,NɎJ҈dLymVzeD"TfS>JeCFPV0OL/W1A h E)]r':!li !B!DgLZCeBx@ޒI09<Hd dVg $X@H#$$R LMpɒ`+ b�ZĐ%1)0!3SɠJҹvS1׶60,KА&| !$ma6 \!l& 6aÙ(KcD�+MtvտzG0vs~+W;w'Ot<N>K/]pKKK?c۶mmR}{hcǎ;{< /p=}ݷveIt+,wzhoڙq}} 2Vk'jjaޭ,R^wǑ 4x@GO$΍a\8 CEk7[VJ 'Ɂ#.@CRH@ģ<<Ba{�z. hROQ ϶Ot::zXs\Kmv Z(RAn$/-lQ@lr( `*n#^ls`' |pf l ! v@EHR-F)Kr꺚 J l`gY<B E&bAҊy]{mm ^+O,HԉMDtDqBȐ RRd𨠾 nbd[:} r\2/43Ð,W)V4DqP6q?$ȬD `Dc]D�)l6z_F~C42OD #GdjZe`:׀eՀ FQ8@CE n9Mj9"*?(lLk|(tT0R)gS93Vɴ$e&rduRhmnXkWVV_~ʕGԧp`0??K/[KKKVyÇ/~qddd׮]'&&&&&FGGnSAۿ>Wggg;/^G>s[k+E&ʼnMe?xO6~ QkDY_Bgj8d\Aϔ~Ɩ2gpGX,_:YaS*;;IUm5uU_̲=Pa㿄Q.sZx_W qIq2haԃW/ma7Kf6ܒ9t!GtU{Qn xǧ#נlP53�i v8";FvlCχ!7<x^Tf=WPp#*/jkxk}2|ٸi6kU(dMMT*Wpv!L+ծ/CcQ+f@yk M!nv-\vcao |iJ+a;'~Qd/wvbxYR8/滱T8h&2A7Y<!! "!牚͂^¸_Qpe5?#kIFV-AWli%DTD*רپiiTT!G2T0A` A{,"w/#ThAfTJkBo.R,?R͈WYGEk&gk8�B"H^12󐐄i "V1bs�^6;+dD㤦:u##T}7"!][LpR_[Ref'MW g[Yt8 DvY6]]]]\\\ZZZYYy^}w}uvv_~0;;xڵuqk`0+++kkk;V/_YY- \5omm-x0,// #N311k׮;v]^^^XXsƍ`0:::Nz~ݻovWVV[~~~^t`0X[[[XX(Z Zb ~Tox{o ,@K<Ե% ܱ 9D)3Z`ϰb\.j}'bcXT1BS 6}UžĎ-p7 XfW8,X s{ahݔu%*o BBA ΅PEm@QGpWRMd5\l|\I/L[skaK^ `Dmv<s#qEa[)?+ !;Q !Ej@!866(rd`f+OoCI)͠ ";eOHLv ؁`M?l{p@fLK,(Bȫ̏zE\XZ)t{VZi, rv&vR0%4R:;+`C V0puuG(IƘ W\�Q̧wfz)w=rp%mM$R3FD:UQ7qr&XHYJRc%!|ʨ{=pS/UheF *'P7ƃzb8&(݋kL(k.VMq0AWʫ_c@6VS)fǨJ+u a,N+bd䘛+kkkFЗ/_>zh׹ӧO+++U S/._okkk?v]wݵm6_}w\:333777>>~￿\t~a"zw|ͅ9r;ܿr߿~o}/Zk>wѵ}~SSS/^|rӹ;vhiiԩS+WhΝƘk׮e`Ng|||bbbll6??_}~~~~~~vvǎ{."z7z뭪{{СCO:k]|ydd{9zƈիΝ{ϝ;755uws=~N+|8'| '-e-YSv;%kWDF\\טn._c (KTXPߙ*ڱ$:auޘjb m؈QHm4[6U$3{*;!nNi?ʈ&xNz `~X?`f=dT)3*BG5`o j Y[!|C"t;g7wu][�s.S<jH5}!6?]/;*>}e8ʛrge([7yH<QbKivqG5" BdB41f`{?ZsO` i.jVZi'G_}3ğ݄sL>u縡 �?$yR"xDdvC40|RO I-vRYG(H.aQ4&8j eP4;A\F9&xJ`o*3H$К Ź *WE9CFXnʐj*lZ^3AoDp3L I&ȻZwv gʤ8@4 [ ڹnmiiٳo#<2666 |ͫWٳg||~~w_n߾oG>;vlǎ;y饗VVVn;caaᥗ^zWVVgggÇ E5|O|۷o ?O?/^xqbbȑ#{zkkk=ا>;v/O>{n[oo˗/<xpjjڵkKKK{,U]\\|wGFF]୷ުJ{?+rҥk׮Ϗ| _طo޽{/_;;?ٳg/]o߾|OO<xptttyyŋ7;NG\kϾ o]x/| {UVZiHeSO]i G'28?1 _D|ѝtrsb} |6W'^L4ʩM el0E ? QM,? )O7Gg9(|֓ĜAvԽTrm0>ٛ~(qՙ"̭|t4P4)5l0ب'"6(¶10F.tbCA@ШhjW7XDU#� '�gOY/nrG�opɂ}ِǥaTi ! @.j&*{D g{ `oշ  1caΔ~l)!g?ơ"D$ۋ ,X ؠ71 julxWY0rx  {mc!!ĝ]96*/)E 6G(f/hUG7)9 ym?GZM 49EJ+"7=Kk= &ɒ Db> 9)|@$|82&e'yXKX` 4exh={ ¥-@;ԹUC88 Q_Q(HOij,Wɜ -~+P5`-lj L0xGH bBekuy~ "dܴ܈9&H,η$XȂ$jSDP !#$`CA $BX $FeA.3( PIL0BH JH#BВH:B$g51AtZ) 2HB]*S HbI$6s<x*/ғO>yw,..:u_zG;Sꔳ ;~7''''&&]vҥj~^wַSOnm݇ڱcG׻x?SOU`p}{۶mY\\|饗^:::zۿp~~~;v8w+2??tFGG?n]^^~嗟~驩GgϞ׿kk/^ܶmϟ?۷o뮻&&&uƝNgjjjqqW^Y^^xϞ=; y'N:thuuW^_}:t*;w_7 .T[IOOO_|̙37nWr~qҥ?}7 VVV~oΝq܎;뮇~x׮]jVZie %aqV%C82fQlD-qnNDPeLϒc'`;K,B?'X^aڦB{@V6-C޽B̼YY}X]߱U]CL 'WyRy#(R8QS  MQ}:5` 0<PL[r\Wfg sy!(fk^F /ug 87),2kφ`2;s *]&qs$̅,:V7qҜw)x<mYVZiV>b--3rf/3W�NaF |y`m?U[$rsWg`QLdx7+ކJB *CW˨<EoDLH Q1<Stjkq~CCId'*"`NhN2O"؅!JE `I@J``SbNAj9{(ң 3�Lrs3H*lzD`2s <qz]|ɓΫzz7޸q?9sԩSׯ_+WWW?ϟ?x;~}~pСGV+[k'&&:O};<z'v޽^=zݻŋ<[ocǎ'N<<SΜ9}W~}&&&|'xo?oϵkVVV:1nw>c뮻\o<s˗;vl۶^~w}חc}_?~G}O8q?ý^^7O|'W=ٳg_~z>|}ݷs?ٿǏ=zȑ#SSSv>z+\Vt!`8݈8>h9f*-Z过[+u^'Uj;Lčä<<֪Ց f~qP: =W?ͅDA8mp7|50V| n8u 316t/C\")y@e{hL @YP1:27GDnڣki44{<m_ܤ,.,d^♛"P f0@[Jb([BDYp΋fX@nqn/15cX&j玏BHXW*O7e87;BUbS!!eјEVRLqP]ju�`Nrr3h S5gd2b%a!s!& `=BD#a^ZMZiVZP _r�388"!`EdsXD9:fKI:GrǚSEѿWeY&Q̿y"?2z事?W-T0A$sZk} ʾLPgT&S`z ڱpvq~C *Olx6Q%I|*CD g\ J^s `0QLЃ ֬ Ҍ S# .0zihR~CA4#*f1D6@g*R $n.J`3(M*OӤ^{ť>Ƙ .<3>yso|^{ʕׯ<xpdddyygϞ]YYo߾sN"ڶm;s̙+Wܹ펌ڵҗt]wܹsΝKKKDt=|<ro[o9sfΝ<g?k׮-,,<ׯ_k͝8qsܓO>m۶cǎ _pzv}}}}}366611at믿ovm??ڵkqq~_1f:vG?{lϞ=U{aa}#O|;w<skڮyϞ=xŋ]ȑ#UeZ;77wƍj/ݻw~Pհ:tرEȥvZi*[`ZҪFzn.:*_{/ZJ+J+AU|-̵onVZ\uOmnuZiVZiV6.볳nGz<̙3g~~/Ç?ܹ7ߴ\rý^ouuuffի+++Ƙ7x^U*w>vC=tmu::; :ζm:tw9rd0ݻww;뮩CMMM-//MOOOOOo۶|衇N"ڹs|-u=#;vYkWVV^EUm/--ٳ>{nСC{%k׮-//cxرcU/--]pڹokN>=33oܸk׮x{=}ӧwQq}wUrʩS8twր[i-�lů͝%ƅ;#=p2=MD>)LٕrZ; r4SA(qV4Mh&P!8u,鏕큓I NBwgscYa޷Pr/es'هq:2E. 6QvdGyYjU`7X8_ ZB">[frg)AenCjٷz~S +F4!Dsy [h�^_\ýң4z#J+ʇX'b琡9G_WDL0$ۃx)17\ywy0GbqnA0JoU\Ik4 PEq \:Q rB3AtIcl<Sik uYԗ`D_ LDpEjК2-rh/Y-̀d~44I3"3.e]D.pJ ?w)ȝ0T קWWWwy]wу>K/<yZ{}=VVVܕ+Wo^veeemm[Ƙ~=ٳ;zղѩݻwWY"jډݻwOMMz``ٱcǞ={v511Q922266>77wե}u]{4t:{=zhU-긝Ng||v~rrȑ#;wKD۷ovnRdyyymmmllȑ#g>Ϗ0_ٷz]Ν;o8::Zm"}I"ZYYzwԞ={FGGOƍ7_y啯O~vۗ|;Nxɓ'?}_޷oo|+aSR3, "O�5Imwq{>~{`Dj$a~˲.xv(dWP1É{}r 2(EDr~J8_m|&҉P^ s 𡖛;O OpC12U>㢴 ?n. W r(uTOYv=lh9qH8An?公3 &�;?zk;@pxK1yKb ؠ~ ͝BFaC'!FoyTcb.F*nqE}"BJa@O_�Q< NJl01A,45E bžI&,R`3g'h s.SY#KgWCx9Q6̚lwn\]J+TWi)o&ޘF:;|% 9vvR'D^LPq.uni)Gfw vt-�쑛`2|"*cक؛kSp>!<W@9B8B"&A&LO%@[dDrљ $Ć(L;'ԜHd dE`! $M1![x-K%Y.Y r$Q@ !FA,ﱷE؇!RI:R[ɵM  =4IBHT}D; ӆZ)P js-\&Me JtvT`d4?Y]]zvtt8~ /o{llǎ3TK`m\GGG8裏ܶm۪쬵СCGzkkk~*Z_'~ZBDs*^pyyyqq*[k#Qvut:n0ïʊ _-V0W;Hn N3 [T- ?;vlǎ`aaƍkkkǏ߷o_ݵkWz駟{nfff0vm裏~7|{߻vڞ={~sVZ[xc=bn+!d5SL$ 9:l W�8:IäZ=bɵ#Lm5*$]JB x)ZTT$\_EGZNS١ܧkLBjlwg`8yYIG1 ^!Oo�SA i XC^6,"D&ȀI6 ԃSjo2< wv} =܃ƨxDrv@~'x=]}b',[WW} E IOb;RҔYo=B̚-K B[d߃ ì BS`v�٣C3!@Ae[n.w9˟A�9DOaplGjLif?;kBhVZi)_on+˽CV:;·9cgǙ`%<S#0p@/bT$ 4GGf)phPL1A*a ШceW@5[aR;/iFz5>Qz@� *YEe̡g ؈R&#|)pQ_kx9֩/`_rkN !QLt́]#D0A|I0]Y+{BIAi3<X.L_ gr@#E O"P!l.;l sR-+|b!0)BV)戈�94)8GŎjJ9;!> `I$@HXH3ub]ZZ:w܍7FGGDtSSSsϽ[6wر{ .wm۶MNN=zرcw}={.]T޸qcaaaiiZQ-`Vʮ :?? _ĭvݽ{:th/^|O:BD gϞ}y睅j11:Z[<޶m/[oV>{ TkZUŖ{/,,m۶/..Vk꥿Ν^<==xС'|p{ff̙3… ᆵ|+=X9}ɓ'o5ZiVCly|ŤgO%V*Cu{IG^|.F~ 1s>z$B]hJ4@ ,;ԧ}J&~&ЊNcX[Y]|*b>2^~`#AY PR  FC21VY�bLۄHeɨ-*`HN�Z?;6�DX[,JہԲ>wgFPl$[ ĴMATR}9PA! e,"ızِTM d{L�1%Pa-B"D5!uC‡<;^{x0|^x#`/"cg2}3֩Icpa wv�!$œRbJ%?qdc}ؿ~1K4©VZi,ݠYѻ:["ɜLĀP*Α9J }8DD. ^ &U*@5&H b͎sFfDRCOVC"Hr0 XG�`s+'lP!,'k}A f� W݁J!Q~P>M"'l%R!UuJ%TVPmtaE &HL%gZVvQΐz[aDjqLL>If& (~Qӡ80P;vnz# *{m#Q� D%%buOܹs+++SSS;w<rG>SN>|#ȡC2mnܸqn;99yw<xܹsK/w3g|;ٹsǷmFDU%՗Q1lV॥j[u`6Z}Çw}?я^{cvuJܪZݝwwNMM>}mݶϾ/^VV-$L닻1W}1;w{'OV/~?+>Ãի>]*ٳ---]|駟~;M~XJ+|m{o$²"Yʅ&1="S(oVZiVZpOtO7-Ҏݷ]J+l 0?fJ+J+8YZZrʻᄏ>55wzvۣ>ꫯ>w}wUֳNLL7nG}ԩS/BݿϜ9Ccz^׫ރ[T~cjd"0n{?'O<3g߿~~ԩS.]v62?ٳg|7߿o:ujyyyll:UշTEj53Vd㏿;?w߿ݏ?}˗/?/`0v###{}ݷ}7n<sO<x;Scǎ{۶m[i-sq]TBo%T r g0e6^ѕlVR+V*T 6 zZɰ_vM)ђlQ6.dlhRnK,WE�ك<FX?~]lؽ!\H{ -i߽3"Qv xR b3c=(Qπ6EM}T0j]VI4RMGHOtWT0̮ `0nL( EGySαٕ;/"fE*n+tw Dk]%гk׻PJ+dC:9r်sl),T%Ex)d%nyNT2[$'{Cr[fѾ\@8EAr sTwIX TE#m 9 18W!N⁎z89 X#7 VК*o0iPih?KEh5�HP5iivB-d~nb7f`*Lw5[c]?0N%$r"ͨk4>~sduuu~~Ƙ)O~ٳ>ȭ`ܳg˗gff<CU׿rwqywED###>VUժB\vwرsq{Z'|ڵk?ܱcǮ]FGGwܹo߾}U3w::gϞZ{{ɓ{8x=ܳs^WՏ{訉LGU`JO{?^oo<xȑ#G~رcǞ={{W_}gtG?'N<GVVV;/>S+++vc=/|K_ݻs+!.6rqDȚv_=l,trM&AD9M2smu"(dr.�Rdh%FrǦUmʬx]-5HƎôP-aP@7 䨕r(j.3:5Vـ9K4vFmMt2OwW-D/2PM9`CبړCEdIJ:H:/8dM!:*]C9og$_6 SX|�ArOЂ>@ݖJ+|(dq͕ξ,1A<DcDi2Ȯ5te*gsA[)DܳՁP$@Dʦ2B2ǂ\ASWb&%Un<!ܜ`Ne=] 2L  BJ5Q!$2Hƕ!JARBE8GxJ)DJ̶)ajofO8122RpKU:֌Ͽ;]wu}:t:liiiffwٹsc ׮]{_#G9rdD433S?Bݷoyo}llluuٳo7=l߾T;'9sӳ<c&''xׯOMMy睇Z]]}7ϟ?o><556=={{ʻtn{VC;vl޽KKK=sرѵ˗/⋯ŋwuמ={&&&&&&vqȑ}z7xڵk۷oaڥK^z`p;sa"?_{/ڵȑ#>#<k׮^tҥ/+WUz0K/›o9;;{=нVZi#0>};HD˺D<_ը�ܤ(]" vSKYqWKM=/Im&tZҾ{31jvdaPb0˺kJiMN ]̣^lUTTKTv-V+LT,R37e ٔ@EQ[M$ <|/\ݢ!xr8w/ uB ewn0 "BBWo!9ĸ~%]frαAex!4CHq?S͂ OMAQ!Z@A!$ri]@GϽu`yFJ+/em_^Ŝ$<U:`R{J1[ԙѨkz@FPɲG C ]-&T񸢲;䚿&Ј~+eKqHMq($XR(OϐPT}}*Q]L/V�_5R3Ag`9MIg<W_k/e Mrsed:=lph<Br[h�k|s+ T3^Z[[[\\\XXNLLl۶mll:̿mw U2W/ ccc) ϟ_\\4l۶;عsgzmz^U�KKKKKK~ǎ {xuqqZ;:::11Qhr޽{ǎ:갑`pƍe"V][[z`0صkǻݮZ\mlnbeeի)ccc###�\5rffڵkccc{ٿUY'jLr={ݻ("vڵknܸk׮{ڵkb~V>|zѨ&aZJVՊIڅ(�KZ8/Q}V]R߻I]}ϬVTHOMҷj-'tXiS~`*+c]x6;^*)L!7bS!,h@H$=SBZe !X2;P2sSGhC"ٜ5蹅S ,B?R3B|AaPܬ~5GH(o—3[:nD4b3z[̶xw {UICm7~aG|ib;mU˭J+?e0kh?C/Lc:~ƤI) :"&2Ew.BU�jQ I&Qih%蔘I*O#@H &T(eJ692kh3A1ʷ*šg xKLQܩ23AeKa &Rgz󋆼,m([2AvIxSNGB(&3!f+T/%nV/JzU7O`P_ 'W'V>*w]RU-S+bfQݱJ=X_n[[[:I_VUsdd}o+|xŢʭ�VHK2rWZiVZiVZ!"a9tFڗJ+|e*VGONjVZiVZ HU7IS/7tե_}a=^XB΋1_+[Gq }_NNNIZ\VZiHG#|LaCD~M$ Y YwY',(%DTevfdAm<>-*NZerʬUp5 V k<v/kZfZϹ {lz©[ܸW(}w8TLDV#ɷн©@"CCA5pa/Wو㰉x�ՈS=9&] !~¦X?+@^Q6yc`W?~pQD}N\o�6AB}Vx�mkF!H=s0N $ ar G $bTقG)VA$;B`:BOӈn{+kj[3o)s%M&88BG`'փ~c$xU46#VF9X"B)CU"-rsyĐ/\wOh}VZiVއ0K_3_Y7(#g8 d1=[F^9zgG0^3MCj&d^²9`R3d6}~}m~jy~}%`Fao4Zz`W9sZz`UYp *CI=D+i cU<-`!S<Q)j?]Rcd1!`c#D B@,@x(qK(S|`!\ t3\y7tvRxGa)|ʳB8̥IYI BB?ϒA)}&ԙ v9G9\A2W ٬2D+cӇ\ha�6f oX')ժV R- ΟZSiUD^{ 1]b= 86TJ+bbH zr|WZݑ;6 Jd|>$o j6">!^ U9wvrZOsWeL}΋  9jTsEWaC-cCD6P-ٶ3.J.琞) >$~d w@Cˉn�9 ^ (7 ;['1{M�r!t36ا+wq+7O_ldFJ"goS9qkb']ّ b֠@eDuY ɦ da S *!I:X  k ( wpzdS{E_*8 gHsN&a@,tꥳ+D+G_[z J/4{륗hVZi}"K7hqxyߚ=./#׿9BQMgZ\IA6(I[* "_;d) !'޳' Hp<SȯcR<re|s@ áB>H6 !9r:dޡC�L0I&H! 0ABl(rc?p nMt$2 F*L'208_{uTgY 2.Y r$Q@ 8̔q~϶xD\;]�;>gY4^ɗ`R#ZYJ2<0sdi l*?$"ͱ&gEpcg_+x; HU^\g:hƹM !-UJ+Bg&BlE>IZcDۋKĴGchiT?0+.\ wym嬫-,kB &uwɹV^&dC dE\T~0T]")}Šڗ|^FU=x�'2r8<ģ*Ӆ ɯ hR] \"$XC^6,"SzOS55 ] T9_PLRnQa=+ T@Ӈ aBb' 7^@Hq2,2x&gl'ɼuafpnlOCp<H"Rܲev,e0;$^<7G Cv@ ��F;>[3Pe@4#_@$CQ KpFffPߎ<WЕ>^!>VZi,ҍÅ񯜝Pߵ$\ )rL0vv V²bs&BC 5$ 8 `Ow**bReܿן R  k%,|t8&󢸘(W(=W dd2 LK3AF2A3H&H+͢DGD3]6 u =r{]0A|I TVг<89bR`NC0g"ӗe)V\#-e~}=-Di`3RƍOen'M{‡}P�1Z}"OGI2A-M Α8Bn`[LFSkgɹfs3J"Ҍ8M�~\IM*lX/׵Ul@jK[iV*QkD&HdXXR.|VVg%2w2g3tZ w=`<.5ܚk66*]٢Ғh_ϖxPDϵkFmj^bgRDj޽& 60Q"=T*ٺ ʈB @h3'0o`U(Ӑ*2fGTԜ䓙I`Q|3D,kU I!Cx5d2V*pvèNAHA?n) aҪGf ^3fMBHdgqg{o/tFiBJ+r+eufg~fnEʧ(1ƧNuJJgA2MdPC0Hb>+Q*2vxFǍ�` zPS}`̊J 0q?WW9 Dw&2HC8J4H-a!3^Hم6Af&`I<DWa|&"OqHivq's|Sәlw5d?7'N}_+~|EN#f[ \RZm꠴J+F趧O:}GLsL9k)U upaCGr*K}QHb8>[S}I-fB<!vZ7M'�!\Kƨ~>vǴTdbk* Y[s=!,z(ᴼ_CךƖ`_Ny(I=͝r;)m6`W5KE5dydcp:*uz+J+P"sнM8;9*`C MA魨 Bn~iO;Ϩ)pL7�u((JM0 LͮV4 qTi5u_D" V{om׭:/`*ddʫ /𨈜czlTgOhͬmEǸ\OqynzUUv{XV+9j oX~ew~Oۖ_n:J+zz<Tve2>5^ߜ?Z˰#rƍ=Atk0o6fÕ-փp|t.ijV�%¯e@cm램dIL;`aoS,F 1*w:QG8q['\,E9 "DižLL#{S?| p*p,n95!C"@ x_ #H YZ$äQA^Oj˿!›fX u\(KSLmUoƚ@>En2f9q/`xou@Mv<9d:qu殖L5hVZi^AC9i7 +#E;Q"EQeH?4!L ,)B$|$PA-cKYsWLUVb{*Y7B^c3m)D{q=`*qi"*Mqq>n+Re*QIE\G*u_È8?BJes3zBF|pb}X))wku6oTm5,MUz"23 RAΑ*4]$W0T7-LYHX A[B]C!yĵ '^D˾w]TW9ue>U+r DQ\)NʋjѲ;k;3̎4Ę@x_B0Ԉ}�?3{5 :89\~՟ƅߟaŅlhg$ؠ?…9 { cYc#lM.2lÇpUHcTnh] '�"YY1ɆN6=Dwyx~;*Wv!Ba _c Z`!9M`Ͼ9`�d86H`g73'0|sȀTպ)2+ X# `/Xi.lKnNG!R1a~Xٱ'Ej:B"aH!$hP8;vwa5 ^<;befmJ+>l_7;\)e&o@W!i&oBD<4 OVי NWk7'nꅐ=%btؚ@(y/ 2Al\A.cà1x5ZDkx&G bBe+ <b{Wiƹl5X;|&'ʘ [_4&|0}kWzŅM!J L"ڏLᙧ !@H F49;C4xo!9 ObC "Af.r/k}]φLRp$_Ƨ߷@2nBy_uT+ ^0rsz B{ zU { Îu|"~ Pr`$0S wZ~]XcTIPe;J 2D k& B@o9\8o{QߵpICGGH] !B8/Z2W!pzOG67`|.=ZHTF<$1;@S 4 jG8 '÷!F<<ro)'B�pG pFkD�r(!w-!$݆O ''L !$*)1@}&a^Ai~ BjSf!rO>woBQ1C B,"Qگr0yũϫO_ n>ョΎ!`YBL_HFn@/8huI,<iJ $WknbBLBlBBӂWFT?tm_AZiVZy]gkf,('R&H!>^2@HGB$RY~p1A>I&hX QjZI@dg@LCOB A5ql@Mȓd8 (���IDAT$r2l L N3HYi8o<·H2E|Ȟ%S.'02 F $X2?�1#~HxH!#D20 E ěd~�x`L! Lڡxaz,!aM D@"V)d<W@X Αe y&g܄'fbx8Bb` _QAnxT%8ިV5֊޹Ṱ$J+|á(b4 8qdC֚o}]xՎ^6m8DQ&%ln;c}xK̢^\W~I\r|vXiN3r]Sx@duQ9%Bsgl5*`Ds\`@e ޢyߌds@MavP@Kg T* ;( K^s,G�!M ӧ7;a7bggzAEgz tװaj^!$A2;t#Ύh>ƠVZiT5a`FKcV>Nķ+ _pt ";pQb"@*^M:Gj L0MR4JB)1난U(G p _,U(eJ692kh3A1ʷ*šg xKLQܩ23Ae߀EXL8 yYP(|/df $ir*) Q6Mg%=B6>Ͳڟ'NJ+OXt[ӧO>#958Vae{TU^S]{_wZ}SL�(qbEUn5bS2T R VDz1F\°_i㹽DlR!r{D6).>Gy/4a4П&*AE]V؁2laF#Dc-L&"*Ν%_ogҫ@}8Jǔ $;Aׯ v@X roa*^ipl䬁^#d]wKD4Sk/Ct2VZiRDwlq˫5iM,\aT59my_D6Dq?a$0AQ"gWᐒH)6!%8p:2pő(o<d1EW0 %GSj$ɬy] "šQ#' -&d,>\RQ+W-~|U$ĉ8=7Ã<P8WGvK^?E`ߐucRQ!U3  l.R-nﭴJ+R$ CUl /eus vi}p;w=r8D߹ԉ{򂫡L[;Fkp)㾐"/hU&aeK栟4n3{6u-6T8uI e98œ9}vp:FŔ7 )>Y/XO7U|~~3DZ_o$sΪUgjIg Tq0}Qk#]Eh6p{˜I44D<DEo :7؀/fvdۙ%40ѴДw[KAO&VZiM -o+}O3#dRv $4^ g $BJCvFP" R;4p*cpbae`cD1P1iTYv&`e@+|d ۢ6rax wNm~7}PÏ+N o \*p�q>ͩ/h Qo`7ycpK<q*GǙF*$.G<ov)yPm\ LdZlƴJ+MD#\vD}YyI9b}]Ml]O/[QWs{陀x៯(D&/1+yυ}>UM]1,?eKB1>TAXܰs & z%z+-Dܧ ϐ)QЬ sPO}`k{e CbdBx1oOA}'<m~m-d? ՟Of ]-ޗ�JGIWĭGaXdSVH`C9T388 6pZ1J/p` ()^ SylBlps!svfPy#8;'f&|*6+VĨ.pviT !Zkg,_k[7jVZi%/tmVչҖ?8 uPw 渳3,7T1A›7xy * )! 2"]q= ͋aדh-MWc!/&RV[AaILM&ΪS|GTmA ycXMT q~* FX'V$ `#B!F"A3q~o_ZGhݥSAx FTN$[cM lhc=6lHuQUO J+J3At`E9 /06t{ns'"m>}ov{c͟:)#X" YfcCe`-rXO`[}(4o ޸2F]87t2!">ry|~ylj*`a(,._ ;orn/?xe3'27wTsuUB=`^Z!UkѭT cF$D& }5H@{_s*VPN5ȝ0 t<cg(]xa{n`sgjO1eQn`! !ގl'I^Gls'=L FB!Ѽn568b!#[l`\l8>psd9*0�*F0; H`Wuoa׀T4FD2P@;b)R"7 ,2 7͵0 >Mv;VZi%K7eos~wׯ. !j68GL0vv V14J9 !R?bT&GY16?&hJ |U|*J`CaRi9JCH+pi+@ A22A@]BN"f8/e>gL\pL8d81]S p/cSY=z L1D,5BxZ b5`i3<32AณC<!6F^ cRBX4D4 ϊ3HHOrt� 7}FC"J"H jiRpv'; -4)zH AAS)fiVZiVZ)&HĜuEńX,V82.|VVg`$O8:5Թ^:"bțhz[z-˙3|Pb^ _ ˛l_ϖx{7u5A/3҂EM"w5^k(N*^5)bk*'ɿ $ o`U(Ӑ*dzfM9'3 | fg7X֪]1mB.k e֙Fuv B q3O sV=*4[QtfChy($!$Hpyy#*ܾ'FVZi5𗈦G{Sͺ -٩NI�kL5_ 8y&tQ̧sa$AeUqc*�/:Hnlv|ýf1A`,a|r*MdHq?hTm DrC/ d]hsLTnf. VC$ {ʷ_a)rf''{B;7N=\:o 쮆Ùfĉ###GJ+%S?ip)g3j.Q3t$Hds{Q&jJ&IŠGuj:c ~B\BPwK%Y~:-< gÒMVm}xX^#w5 QGlWqn2sSh* Y'gnôMRF̃DH<yF04l,VGs{#$„G_S2O/wAM|<[s�!<SB>lMفs9&fLO*6j78I&$!Q8䯯'8YJs347ߩVZi ]$nO~TkEU؞pm[ttN5Lnz}ɭ5"&cu#!i=QKIna/:P,LRVa3ucH1\/[v֙`vr @]$QV`qs16|/`o= _+ %U�=*dd)W_>QSmpaLXt gg>ٛZЀVZiVZ) y/ e3NO;X,{Ag+D;;* W^> |-?Px `AA{yik7..ЪF T!iMy0I)TUmrh9Q=VCjxvmB#V'F_X>g(̏#l7W7֨@k[lJdf\12rqw9.M7B> U? ӦRga)QEO8'"OknZ"ZV (]YƩVZiiJ<fsӻũ_PG@ Ep?#) ďyf-.U虦 MLPVt68_XsEz?gsr2ű§T@N34a*FSwxr(s*Gqi4*tP2{Uw#R2p"7n=5̜5R[Ne`ZAOȈoԐUe46_z"23 :B-/-|VfpP5c![Hl[iVZieCo(..S :̭峒Z&ryX aB ,s锹hi{c/�ՙx63W.v - 7 16菫`Tf0TG :Z * QN+R!h=eys bn '�fQ-dʴV)7�r6e JY r(E\7a#�rHMFb^!.�[bGL}bcl.Lr7OÛh-؄$Ć񩶴" ݜW98;$U/b^xFϦў !c:tkP _%G^ea^rJ+0G.˥/~wo\Q\냲L0M!@dÛ_&*И NWB`',9$MHEQҿCP򭴄 4;Ej0G ꢠ;3xOpIUb)np0!lmoq>TXpnmV9aB2i->Wr !"/⸉h?BH3o@H36,9Cɧ$p&=:Α'gKFyX)MYeځP+XJ+J+ 9􂑛x:V$[ܾ784@~7&2TB$d;k?A8%. e}o uww &kGcp.JĩW'lCN=?Q6lĐe۬aB$| N~WRH�#@ Ѐ%:rO0䨑a6 b{ROO`"<<ro)'B�pG pFk"M�r(!gv ͝ P\lU `L !,PLY6O<G.g'R2)�;Bnn-vQ̐AT\T&@sm<wv !�S BL_:En@"8h!<<6t0o #$WknbBLBlB|h<?Fƞl 4\_/p4wЭJ+%vDeRne\p0Wd^.5)Rcל#s&X]ѹ9I2)᳑ =b,|Lа\AL"^H 3 4IHc!& V9,`�D D}cHL.` Dg &VUA`�PF,4J78>D@�$\Dٳdo[&cC2AK9Dٍ�k%B(FdGnj{^y Bd Hp )&(v2M/̽#d`Bjrp.92&]IqJ# ALP UI`H[" vÛVZiVZ) (iTL'< =flAm,먎6`:1h>w%|,^zk-f?]VZ$WI2&blvܽ5 66V\cwDMR[jTH!DN>ݺ:*4<:]Rds@MavP@Kg T* ;( K^YNBFyOovn`Jы" mEa^ؽ*BHdg1<BG:7n*njo X+J+DDsO-tQNsq2&h]X ʼs e/v.BUؼsl`F§iSb&U9ͫP<�% *XP0ʔR9Imrd .gboUC&@!񸗘S3dPg(za &Rg8h҆E{!d7]$I8P4(Nq$THiR=(Qn|̞8qbddVZiV~Ģۚ>}1 1y +�X7vi{^&kxVڣUw4xשL`n%ރ5ZkxDMh%Htgs37 !<^6g=D$W�x׊87̔37m<X|B<M ǧGH4m9ǐJlxG 6ǟp3h&fML衆ù%hnoMnX&Gkլ8t vNl"B`G*r!VlL}ZaޘW) kCAbu8 Ё=t&pyme6D]"C]w_\` ~WWB]}殪VZiV@,-/win&˝OOo`2zN_jYh%uOs]8�_6lwA_'3Aq,L2F}Zd!%\6ؖ@d<W@>c"O1A�ƪ XSg!G@EQP8)h0LRX6Afq>z̘<·A^/d[ 8!W:qE"HV=޸tiO]!QeļK(THגp.esdLc�RASwI NTW:;rD`mt4sLVZiVEԫ<CUlbO6:BJ#ӈ2N�obla'ƣJP|ew5D)KY]LuLGZDIEj,r'>vH+h*.}S+aA֐�y�*zEoͫ^AƄծE>Ѭ)Pb5= Be_k 2M"ਟM:,y>=% -W(A߯g&Ml:8b3S&m㥮ŊPu͇<N4+7cLE<~Hc fbЛgzK26$/8{ka/:} SlBS[_[W +tʹnVZQhi^_[{~aTGP;jGE\ƍxMKQɎq͎'a`^LirDXvitFdJ#AȨ,eriw 9|@adƤQޙ%*m!zi8 b~I}dLq ig&gɬ͸!O^E5pWMq0ƌDWğ+mà!W\9K}TV&HęFv?LCRSs/IzE*Kl 2YV6zdZ'nj˿J+lNw1+_O\fM6ŸAHah!c4)HFE׊-?7rչߚC͍aTf)aB  ̐9}T!1T0lGţvWs U{_G/Ƕ_z c]ςwub̒&. >):B[iY'0\BZe)6@0, [DcZ^S@!;*2Sl8-,>ۼ*$6}yg㤹sEDo[^ [l9YW쉯tc_03%ZYn&i|VZiViyVR+#~eߘ=)i "W Rd 5 ?o k(*($YˢB"DIy1kDe lM-adn*3ųx}šSL<!7 ذ pc!<1Xo,+:INM`,6 v-j`lLԪͼݐQ7]CHG4OPBM_ÈҤxZe 99Vw6әAMӷᇂtg\{c�D?J+J1n‰ҷ&܉r;ޘbI p+� _Bquw,,216NoT7>#?lEn|XlZH aX}[nbd)v`잉͝`g4BM!ʆ77bj8 ǷqU PT6FR@ _JJa!!v*{t~+ U Y5|q%"ۃ)@1wҁa>)SLxm !�l~q6lX0(@xQܿ6w"o̔No?lL6$?*ܲevLY͝C*=*0�*F0; H`>79;#q׼2P@;b)RͲsv%H6>"E<n^կ?7n,iqKקiyZiV~d}n\4{V~wׯ>u/6Yb?J Q Sp#hcgǙ A$ԝ#0*`mڌcOw*j˘ 'cT x_Qz;w Lt8& 3A48DF$#HpHQ_ "68 !D2A�%:d~@(,E`"`c�cLe=燒*vaL$*Po*dxB1)0} '-bP Fq{JE�Uf7LݳqMO"k[!=L"q�V62HH=z z?jI$!9GLPKs$5 1p1xa 3=P0fa*J3bbJ+J+v?""R&'c||k+}qFP3X8!>j08 &:_3g$xX@ۆíRl_Fg�yY ȲX$BxW5)@~顲PEQ--rͼQhj #eRe[o6,=5'dfA0aTutoCo!I!Cx5d2CIFuv B q3O sV=*4[QtfChy(˞7 Yl!J;vo_?GSl*#4:F#42R:J+8 hmVim%\iw Qk'`RoKBg:%%گ1A &2( L0Rq}\A&FPYݻ0dƍ�` 8{MYz Q 꿫6A"PAR"ӷ&X0Q q<'Av1AP $XB�j(" I9S!Rl 8"#pxD*SÙfĉ###GJ+%S?ip)g3j.ܩOo7yynRs{㙛lno4B "pw[$u~kKuHDln@ձT816L#fcX0f:X=nv քOgnnڣA8c´0VMR]x_>×fs{x hq&Ib>q6M||b@}o6|S!g=[,y6~v} Vhhn/qMԌ|@kr^@`#h b{km!8eS6�8q71gΑ"H1^)7}<�)Oa?N!I"*!#/B6_e86`�k _wޟZt^yZ_-Au+]}Z]%@s3wn[MzljN:d<*2R'N/)0AN(b-}9G#i69(jy^;tuߠKuȃ9PY� ,Q"e@(xzF 0[na/BlB6a_2ra3ucH1\L#@fnoXGq͘{R@I&<9kVaꯑ3 0q>CH>Η꯺Oq;T&H1$L0_ȅ@)#oPØs$d1&ΑB2p[M,f7Uَ޳k7Q8BZiVZi\p9~p3TZkWJ# huԥqK:n#Kz0|?DcТ M{K7jX~I6pW/ɈзϠ Ko=Q+2w//aÅ:5V9fiRA)lf=^,6e%R69,S 6+ :J"$qfݜ?-D& 쮡ܜM=OB b1;6> dsP5c{;W:f<~=*.uGۣn# ZiVnXKuS봾N];7 ~n2|ʒA2g`~7 !$JAvM.ۄCyk3+\58qVB'@DḆ WPP䓷.fRR*ϭk)fO drvGZ*7 L &2Hƕ!JAR�.~#H| -Rvp+J+ieW�WѲ,_ZiVZiVZybf`/:߽Ýoti5wFOvCCSם[iVnXe{g/v9VZiVZiVZiVZaҳLn@j=1]M'&l㷗6L;g)%hտGRO}$QKp]T6ۊiнJŅRKz{(6&4)eݥ 09QL֖yt`'T WΥU𛟅}ĺBey]<sSyR9VvWNT�519`3vC5' 2 ( ~B(X׽B¦68ї&?!� B/4 fفslPH98DHJeoL$$8&LEkB{+MWbFMSffD4[[3w37w~P{g& z CJ+~3;>3wGk#4JcAr}ٰdqpbj#&X76#_;BaN5"Jb&QԙѨT<�W J38* UTZ..a>xXlcf&Ј~I/W|h36PYIQ)NhIhɺSݪ6'PEb$s*ˬpͪfLل$XspiڳOG"}ή)*gQ9\Iqv7ZN>%8ΚMֺZiVZɉ11ZMΞSw+&-څo|7YwnjEB!B2͝ȫ+Cn.*QJaFJ I3r]SWYɅGjXG4q~|-B#:! fE*UQUݭv*%[TqT$SV jPs;Q3B5RBZosnVt?wB|t 4[aLX-nDG/>E~5,B˞WEI ,6DB;;:f(n+G2+ĚEI<E}:>JEeTRPc(cq Gcs 4*> M 3)|Jf_#@H &T(eJ692kh3A1ʷ*šg xKLQܩ23AeKa &Rgz󋆼,m([2AvIxSNGB(&3!fYYӵyVZi\r[owC95)5`"…{|K2KեaQgGedlhnNabs*ky]aPbH4Xo /'xXⱈ),Nua!s8ks WMU}(Gh 2(Ӵˎ Ym@HdPE;Q!@;1i"#D*}舢BC1}߇`nCF^!ͦiB7 +&EqzY:vϫhnzugNzkykʜJ+|pdZs{F؍=F[1̭,sv2?2͡ts9k0Au ͇(Q!~.9G<HN{z"5H &hEa^U\Ik4 d*c_T`b`+6\_e|X&YVg `!AkBH3-boZ�-}iC:jӤp9NB匳KpHeZRM_CI8РJ+J+d-n.Qi j�.N>[DWLfhcy;Ru>4]о͊TNץܘNHа""H!A l<rym7Q/<>rBz 5<Tjvb(-MT)1KqqyL9 $Q%|TH?)O\)Zai>"!ӧ YkT!j#{rن;k&2}⤨s\i!BݛA�P`џ+Z\!�vL9n΍Y!YNEh0=-]nd"/~s(m,\7v9nvvWuUl ȠC/&H;;T&hv1T4*ۘչG%1%@oRTS9OҷM�t0^hWz͛>EkIlh1BԮnTؖr Z4-BnTi&%cQΑ ~e`Fnw}^VZiV~reff3gȃeQ:krպVZiVZi ;oan0AK4>5S.x,8}9\y'UNtk /i# fCoK{è MTz֕9ܼ-챡\!J+J+Zk˗/ջqt]-ΓJ+ no͵ xlݣe}o=\njrcu>P¦b!vFoW7w-=)t^EmLqoL5p7?QNUl2$3A͝!y-r$6Q!lԖX[#'ܹUXR;5ax&ABV= *TG*͎QU.*{`* ρ*?Wϝۀ8^WYto|X /WC.dS~|5oI䶆fy7;U(QZIPQw M9rVP"D7܇k"O9Tϫ"7[s,mb<XQ!D䯽T;;gG 1rI)׈HUaAoqZEa`7";8ՔQ YQa$wʻ.aNOeH2)eo1BTls3(UȤIl,77 dC 3A߷Fˀ~RS2e9映2 lTH4f>1⍦)L ckNpпUL@'V="\b cL0Aj-íXCsM"ųǒ(w%Ώ@I")B^D` )|�i_ۆ #(D!>o,.\1fdtԟc@z=s 1U}.1}hCd>]s߷ oY\] %J:dÄV11ů%^sV(ngsRXgёdRg8K.uXkv} ?+Cf8)o]MK@7Q[bkr * Mȥ*c"5Ll]eM ! Tn3D[&i*YS!`Ѡ{GYbH=*ODZ7VHuC٩̐Q"ΝR9o7fL,S5;.5l2>7 Yl!fCB6)\e *$!Ce(6Ā~W \Ԑh{K`Pp(Nqv(,LC̓\QT!=ʢ?:$UΎ[զД!D׬ #$ͨ )CHd] BR1HDͯ>f!d ͆A@S(7 *?A(&WFɹp(KPø)qcArc 7 Ӕ: ʺO8_4%$U.2}a!30H.$"( pC1"H [@*jsCWkɲ's7 VMMgJp8?7\(fѽz?ɉf3_nN᝝f&?񩇂D8Q"n8|( 5}" Xpm&jz e싾UX@me{Dc@8=EHC"'GrCq~AWl8fFT-[(pN|Lk-d~:s&PӨ>0&Q'KL夫.]@AkqCٻBJ AL wCiK|Hdj/m9uR\;ѺkhL^u>8(1Ol!kqWBjlP S$IHu Tzk`kC<aV&XrL:ԟVEZ12~ "'7nX#@n<6$B`޵h&a>K=OBPpsW7!5b!!:`Ǐ~"V@ks`F rld�ۂ*ao`8Bn40L#�oCsv)rLCH+DnЌb1(B`x'!!D5U} !3r`�cOB*BHCg7h <I\TxaB@0d!? Z8!�bBǣ cFAN !QC0dPEU8;C8G nsyq>ÆKq>aOĢ8@rgN wP&ęXל_0eQ�8?":@aAELwjW EϤ!bL*BbՄ0!bÏFȤܸba"ٹ4Bs4F8Gn;:e L.|]zHh _;A%ϹS!�p^ 0Ne}G19TEA0r8_\1 1`.G&t4}#x L3:7}> G1AJ3A8ߟ%z8OW8_1}:$BHƧ!$;/ ,}aC"ġB0(Hvј @f> ׷Aq~!l}0s'ΑB2A:ɷL8; =H,Ҁ x%ABp6n$ QnhB/9LaZ$B$B`@lps" m&o8y=دf5vR Lqb6Gp`c F`e|Lq #;LBp(&!ʆC!L((q~0} v8B_L!qfeW |$WlKؐi!(Ҥd$L�e i |bfAA22AQ.Cq7< ee' H‰D5^D vAt|-7i;:=ݍjTbmrwkLBXhhQx%±.R7XO5p^x'*TwHJP䥷䨕rt)ԩAʂjWyuV*>( >ыŦL`^*(mü`Cp^1Ȓa.wsL0CtTrsf60> !+TjSX|�7�Bu$:66$?}!G(1pfv�*44hA* z7O|g1Bi6"8c5̪[,B2A<D3}Di2x M_9稵yk3M_nu ԨxCav-ぬ铰ˍ{ooL50}! "DTL3o@H=z eW*IB(9U.ķxC3q~ *g -.VP*.IqUH&oOlr/k m!j׉iXa~#$ "Bxǒm|hLB2mfu E(-4%#-A J+J+J+J+J+J+J+W- 1 EblO7JfwQ;N Ob)) j;##m_ ZHKGnnu|l"\wlm\ xqݔb=|H_l7+B!B!`C1hd0*<p^QP *q~`h6s gbj}gn+߿:B@?·]'6n_28Ag<]+|o`8a lpWD .6>oꂽX `#}oP 3u`=B^. {6;WT wv !�S BL)݂ӏaP.9xaUx+b:;6Aί7z*+|p;#G)1B,eF"2† =pwa쁃QCE."!/l8]xрVN8Z'BМ#̆_ʆ3EЛ@H;wv@Q8?. ɧq!Ppv@Α@~8U6v2LD89;l/cQ|||~ϔ  &w2TbBB`nPc8o]Hj?7lw@=rK`v#:B0 F2kF 8sd)=4}#&(#g0X<F ρ^(fqc dN;G6DF^ *N"Ċ|#Z a\J:GB(v|{Α|A*y<G3e痘>GO-0} "t1{ 46}(_%!=8OFpQ8ߝ|yJZBɩ@,"0(Α2QgB2LiS5f@ ;;>Uu.~S## )2 <şހԽM[" v#J2Hd*'D K {Bg* (Qp*$߁&"ixk_-%2ή><pva7]q>_Ccy&BFX2-p!$ D) 2_ as`E |_@<*B HN#$tlxH51gQ6x09+78'�!<ّ譁]OߍxhU=Pps6T&| =!AD1(*Pc[Yǃr1O}7zae/6bYQOC0xEP`{<C`ä5Zf+*G˻*g`Wv>-u12$<α͎Waw ,_j*N35Im-S! ľ=*PYGgwfT$|nz 8Q$~ֻ@ h TSexrG�!M ӧ7;a7bggzAEg6Q&kX;#WEI ,6DCl�!TU<`Fdתs,TAz#3#3D$j6" ׮8;yzuFsq#5XuBr�r g{[ Q;^BL"peFE% *|ѧI<E}ʹ8هC8nBQEpQe\H1cs�Wѳ4:p(ͤπŦ/B(o<d5> &P`α ѣPQ.aboUC&@!9ǨSu碙Agj.[(WK ⬑t_4tL,vB$-T.BӠ8őP!14z9>P#d\ l0c)eꮦDW9&8G@^@0Aw!rE19ʤK`6j>1`fC8}fGL4(\`_dL:LI[P""3oE_pBf7cI_SY _CrԞ tgD_0^WJbL-%|y爱{ әD-Z{& Y _G rn/l7Ĉe [iXe?{H:#$+m7%t3Ǟ =,fn̅Kɳ _Dn&!BFaec_MTMl_o).|@'{e=!BO!DH8^Nt@@NfqڤRh?ߠw 1Bk)LM?=$so<clM#=DME! ! @HzOӈn34PL{Dx[i`up7ql4zasfF0KS#D%! !6ԠOP#3"NHLeᐳMQBAPދx?6hʄ*T+Jg;:T`aPX&wvw)L΍cw l?Dqv6`z,H߄"0A2 ܚufS;;Ύ!8B"gv�v 95wl pcz\!![<D><*V(@8(8ä`~ÐUΨ I)wi$ie"}$dhtPAFP=>Y�1"d!( !hq?wcLhL}R&`#vr`i92gWj0\&m_"Mxy�cl Gӗ!rgV19F _"giq>W# Hb8lLqD`( -7}X`M/0]zX"Dqa\i"!:tᓏ@8?"ο7 Z|L1J |?(WOH3tA=ucҹp!Wd q[f7\k**O͈wpZ0�1n3A$\A&%-KbXv@>vN\SiF F x Bb{+'TM_}ekM p r)Ft /Ⱊ-s�[qP@""y$d ИL�0)-S/pw֓`!Bi) E D?)UbB862q>OhD5<.#! d5A X CO?QΎ@.PW�iV qԐ75%)[e6rղK'{ehXLR e`/bRgAkX nS9y!xJJ@^kqW,96QYs HS/Q.S!2<q9R0 S1l#lu<\GCWlEv#RA-V!9ن Lߪ8)\WZtfP!@?)؀sgʦ;6=QVXũ1y [ u~Cƺ ؐʉփdvx riϦ,[n@e�I.Wz@(džBeݥBÑA' 5N7 &^mLf`GC;`nW㢲S9OҷM�t{(?Q6q~B3稨p- 7 <h{V%rҶ(#9f"()$6+9]b-aUo?r، Theg=ev`*g"d(ь؆{:J;kz`ñ_diTl dQG*n.5~{ Bdy, ;<J!ٖBPCdu5M>Qe s )h`+J+X/J+DZJ+J+~*V>,Ҏ}+)1~}A﵀G|ypv|s=߅ q<Uex?oodqƆ}þvmjZi}Qp|Yy j\H n5\ !ɭ'd_8X 6)(-͝بob!$lEsc8zep)}8Aw$ؕ$¶5 +Kj3zTMŔ!nh 04,ƓkGM,#Mndo|m wqꆙ#U29;eTxّEԨ�䱍`e'L 4>y7V= vDAp__`]cҚRↂ (p1BX8dzPڳWFYtt UY ጘS:r``RPE ˛e=x}ᒷ_>4[p(FqK d7�[\wa#D Al_떌ISY \󭊊p=wΎOEOAB ;8oEO7e7)Ox!nP 6~D!Re!u6KBhxB)Bfmx; OnI0Aݥ )`(VA2 x0Ѹ8H|7;s&"|sTwy<b 0)  *78 !D2A4}=b %PoKg飌cΑygb(Bf@QdQS|  7!2BWCcM/s$RLu_4["D}Q"Dɚs$!U� .Txɞk8GLP>#솾ΦU&tAeH6lh8#&H `,W -w+DgGP�l2x[oBpk q)Yο ,GH:j.cPA8@98 X?hbM4J$vvn=8 !!bXDHxD쁏F\N*9Dn.p+FuC &(P#A0A'sl?*0j@ !!<fqq>3}P. ryEQV `f*8w< e|8C G) } h,%z:DftZwkz_;;RF*z(=jzktwr@lDvz5 v!աqnOu5A/nEM"w5^k('n31PUPFeAh3|Ml#eReX&x߽,zHS$F8)&Y1(I~[K<䩝 XMoFuv B q3O sV=*4|!4<CC#$HpEHPMx *W٧&B@D8TP(6G< E  U7(gʂ^14!8BzEwi!CuHf gjShk)k3'| !5vݫ7{3I"ʟK 14}3TsnܯLP F1(00M]YKй$=K7$7_;>o4)u suuJ#8_4%$U.2}a!30H.$"( pC1"H [@*j$xpƃdڹY|?`%x;] s@!mݫcah6S$X͎ofz(H){nGQG-3 kD,AZA§h3Psc(c_wEYBm6)6Dc@8=EHC"'GrCq~AWl8fFT-[(pᎡ`L$L4LRe �EK_X]Z ZcUw2߉i ŐLBTP1chabl [U#lRjHgaN НbJpñ!bTƸ W" c|!\GQ O%jWh%jkq!|/q}TCA GP<R~nScC"->U'^i! 1fnz@M񱻾/ZB!fǏ~"+Y\$`�`Yx;`/ecD6 7}9�a6َh GHX�n63`'-? aB C"۫ gVB`x'+b7ݑsv$;myK1B!!!Г1gGS8x>=7P¡@MdS1]sذś>P!oC0<BAW!C�v! dJp`ّ3l U X`q>yOq0x eBi0Hǁ&$pon(�Df= ᦏ8*PAɸFQ|x�tv BB1& X!1jBX!B�H|@%VyXHv?=Bx8Gn8tj; L;GޗȤGQ9a#1QCkv#Z;ǰ? Y85m~ Bz{) 11\L0,4 v|)kt18'bq>*,%St8U=D,ӧ3AL"XBl1Bгq~2]`Y<ù)`$;hLfa.<.@b1]`1Y 2H,|bL0w*$C>9mvIg̟8YmhHPҹ~i7h@49c0 ="\8!lX^TX@qI!rg(B%AvH¨p`F-aʨiuA +,lS?$A[]0"]kwpfEW]Fe8thM!!C5K8 p|dgK3BfD,#!$[ *AO%bA!l<zᒪz D]I%I<?'M$96p C<H:<Y%#Բ:Pj+[E`TFxLη)Tc!$zh}IB쨧Ʋ o/T6:P9j<FS Tb<{?GxR _X<1RLʓ:&ۼO++֨5WӜ^0l�/ U*͹y0va��gDarȜc VP'616l3�7tHr#hnsc{Jz?T9cANe4](y{ [ȼES'RWK%B+ȅ&BGŋDGbaPlC? iBU.BCȍ.zDHs@H5=Hz.Hz hg#^:x @7<?V=Hm/ߪIvilwfW*Ctq̪7:Ud~L7С6(_ ¸B.+ADV汑lwSeG"T d#sn|H$J(rʧco^YH‘|rQ_+&̅S5%@kg 2u+t_7M5F8.ujkbxWف@g_S7 h+aolE.U'F׈[7BgfET'؈}&`.5 M3ړ?3,�ґG/7U_LvJZ4# $Mvt㓢ZPP>B)诛)+Szyl7AFb3_cq-):f�llgl+V BڜkѸg9!%�nU)g0(Vx?r~2>bfAN5B_'l>ЧDhk"W>_\}X'tNQl#xӟ5|k🇾EC-5B_ZxBBlx9EHX+0-@>*&#/K >n;/ߪ WIaoZ Ϗ`2{B=*D\[kZ8?1;2;fD(nf+:bp%WOl(mv|Z#xRI!}#O9W3/͕aƱԡG{Ѡ 564χPxi[4gG~<߻ s߮;TYv*-M {y]~i00Y`]4? {<^׮Y9PHQ/hϾ&G~]0_ 3kнM)-/i/@E+m/q6jn 5]-'O= Q7 L'{6b_5KA6g|LmoL11AkH*"r(7#)U^]f<ENn 6ܚ )? 36"`Gȓ z0; *eA1$ґޔLex'L:uta޻ōMTHXAR*ױx>Qe zzJ>*c񫨯)xn"SY*swJ!Zmvp*sLdu'{?F|*g3ܝ}oFi>Ln+H:gP.3}Nj\{>�br;Th!9[K\uq'O,{< .Wm<fosy5+HQ9wS%ڻNĦ$T1j 3dqDvV#a"+g- p `W p`9C)y!x+GT -GL8I7+H^u劧s`٭d7'7gqɛ:<X"艝c;w}>ޝ){m"$̴{Z#Gxe>yoI[wHxH]W gv2,eA?/&n1({^q5x?wL?W6,Q}B~(?n@SW;z^>�22/IĎT nx[[%‐ R*PR}vKrL!<n4PQs>=I|Znam SdNKqn k) !4rm_706owFڙ7Ex\$wR}%maij"_ɱBzxN>%k^?4 . b#av,<knu9- a^4ۣ6W!; y]&;vFsG:C!wʈ$*FC i|gӲZ|O!֗J79f7qYf1@iGW�QU8fcrӡ:_?C^gHl}Y1X&GBerlPR U.7c0j\0BS˶ _ .*y~&n%H n ,ҢTnbi(T(,*=DlE^nXFBcj)L] Y%$GHvyP ^12v@:%{Y?[]k5&\v@n c'ؿ!@P97x~CgdߏN"Jׅ<yfYy AڿM'|rRpCsS}/"ϲ |^׎S>XoD'kVBw3+`s'{n_;Ii db 6p�wԟE?/G/ۿV'33Z^a'a0>yml?X�"JT46"D] -fF&j@ D3;¤@,B 'ND Bռoۤ:L5#$5866~Is|]ۻc@ Ay=B&>6w "$d,nkCȊ! }֧OX Q;a  ! @0zqCrO\rb@�t '!$<3m!C>;"D H0EZN $\2z[l2!$D2@k".(vF": !(P VdhʐCˆ.O *m H64b|zۺG`>+9::AT�g <@H $(AN8ٱB�"H .v }BDHB[-̒}°8�tQy`NJJjX8Y<!^'F2j2 mH2##B_,V%5|#FdDDUxWHpG]u*A⅒K!%Gv~Jʒ#Wh+a#&钣2OpAq74T;%׫S8y }~W�Q丯!91CrWJpIm3eq]?P�l!wqJP_9Nd,]wY#$If^M!y%8!S XUOBqIII…hpŠj{nFBHHZ ɄYwB'G+ p &W @/T(dTlʞԿZ z}T>FKvU7)~|G_xZu3:ЏeԀL| ]LJ A$^L0-B'dCyt,n1=B,)6(wH"B8T<\b>d |Vv<ux~!R!D2pI !6TϧR D 066<I틳KP#Xۭy,r̈&!I%Hc!@ e}(S<$YF5U<y_?·n+Z<'/S/4+n,U /`-I`EHC1}& ?Lp <rym|ޡQ9_@UY} M]tjX|P7rOZe(iqVQzr9b^rev(MO q#zy* .�*duۦ8impHMݠ*\ڰϡ|�k/'}'96X\ʁ)f䆊lu{v$o\:'tO24eNzP@r? /.-~bW!_7Wr'_lEN܉K+B4�6xSun~Oy-Qx]Zn_^c1Qp/5 W<;F>Q[ute3J <^!LcO"U"|7-g?ɏϨ@EZ+; yzq b: V~P=U4xو@/MVc^c4WPx4A#B2,i|% nRG:=&ذl> òI\cK5} e <W X^:{=_?Ŧ;0`zi &hk)-q!qGFT C_adb=2s)"P"^lOw n0p"L8; Jͫ\|qw er bZ Ej3rOZe`ퟌ>:M}=YWyrS 2,.4Wo2{ BAVd'ru_E7ťQ6IcԈ84=\ތ!:4ܴ` |;N_P 5|)Z`xCzowq99ɫ+=*s39l}p bKC{/z?�#w )PJfl!r*J KVNjQ3 1bcJgF}Cse $ }˽Li+~mwkZ }n(OGoT@Crk>EƝ~pbqC}Us7F+R䠙&{ocOBHr+}fKdÇ+\rT"FSNBLN΂ѕvntF ZY.N^HM+$ja@]uqhṟ_R~ͱ!Bl n d' .B!1D#_Xr`]yz#R^#Bš]De:\u)W1!Xo/$;' Q@_u?3  [bdN難f<=lk- ^T{㷵Gƌ߼ޣt�[[bi:}'J~GP6B!Y)ί4ٴPo=C"7Lf:y;ݦEP~=znOl]9{soϏv{dw\i0>qq:l?{wO_OӞtH;iNB渝]>*87ZgnЩ?)C .SV"5d{j*#L=饛M?Q:$GML蔄;:p<?Ξё+~F.L[b<䌐 qW\=Yƒm*#`T11m̓Jِ.s 3n<}~Iu^~G\.=B?G3#!"o6I~k }S,:̀ƭI)v;8(2ɱVs얅IF[?idexBU<&!1H2[oEEOJ^NfΚƫpH"r9c<vg",uwDgٷ^/w$9=۸Mw=Aᧆ3U|Ab/?*vgk#`-JA VB kW,=/G!v) *]$,,݌D"2¦f@B%L?PaDs ! g*20Mp%l4��#IDAT&Sypb&v=zY(S�¨BH"ŀ2+=䍮h5p1d aOB_J3=V`l(Cd.B t( L!}mm"T( }[g@r!&BTtB"=dWu^K U̕}C&�eg4CY!yy BB ]y BB4^!eY$k 'w2k[d1}}q<LQ}+0O{4 HI>ʟ_Q s ksGk<߫p~ѠT>JT>|f1H' |]r[QRT , ,98'ٵ.Mη0:Vnu8-@bys;6yr!6&\r~~(щv~_EdF~oUZ'tzlK[QRڸ>S\\ϡ <Gr*j_z-0KyQ4s/2`;7 _aX 4ɤ Z= ;NZ^0*ĴF*Dž"Bɠ|{NS}/yGc C;اִ ?ejs9h<7x Al8!˰Kh^6T!^(#6k RmX3Bpt/ ؄! JBMw?\os_5 ‡M\ bZ�!ɢ"O+X!Nd #9!D;o $|(رG@@!2APO6w"D�{B\j{aBB q #.Nv�!vhYo/dA}KGgvG�a6(%%}܁S"2?G W B-H2#DRH9Bϲqbd')C_N,2:ddb,LnbD34:d*`@$KLv:*dGˈЃA,9"MT`<$UާX"PA<_4S#BV8oPxR8F<xr)ٳ9{`e!Q*2J$+<?dB5*O . Ad|R de !c)(00@TB8-B|u#CKȡWKG~6@aPI%LYSDiГ.((J&9 Lg�8n N.$c$Gi| $ك\YrkDϿ-9<[hw,+AJ0)1QwAp&`P XI`"9_РN-Xz<? }y%8%B䦯`"'6B$A.qp:C*V$/d T 2wn f,%WA7)'G!DwM _ Bh'F|*{8YRN.GW6l^TX@qIX `AR, X5B ͹N0HE�{,�0~Pq$ڒl-316I wq2#S`"Tҡ]7iFdK !d.B<M3BfD,#!$[~(*9�I9B8%ٌ5x> %U7i5b0ȓ]Oi$y$'}ئ.a�N '_W�=EC@8nKa.v7?+fm /X'^p+G_e;ꩱ%ț4Um *TAZ%O$~>aaB2~b .9GxR _X<1RLʓ:&ۼO++֨5WӜ^0l�/ U*͹y0va��gDarȜc VP'616l3�7tHr#hnsc{5?%? w_2GpO@.BK<=s]yd"`_[ )Yc+%LWoE#0 Dn翟}C4O*!^=Bo"$gYW̹? wEp=H$=k3ɑvHR+oU$;߃YS+!_w8lf_*SMk&B  tˆj)7 \"tY "Bذ2<g˽*.;!o|v6^G"WGP>E6"8+,!Uh>Ȱ"8/t.rjn?̗0rjϖƺJl__4mڣ\ ⟎c4ezC[ [+og q#u,|=Pl7M3hR!\Fhר\_y f<;a]>JNatӗֈ[7C051;*)*܄,њ��v@Țn`7�MK4Cڮ~cw=.<Q!D /pLA m>/Nm:rdGXGL|P%;:WUQ"m?]!B:<EȊ r7qa ƙaNrw7|!q1C=oЁzyV ] W`qK f;3{�w[8OIE,M+*S_Ɏ8MfOjt09 }}G/Sd{,*Ք"BV;&�nU[i.+*A"h_ =}C%hN@N[ }PNFHE 9n}]~Y*n5k %Tɑ7?N%.go < O˧wR}bz6?xXhVY_*[gB( D61Bo=C Fkj})%G'ʐ3sxYl  INY Ip j@\ٙe4뫬eAگ�6s~ ?0=)uwd@5S"" "TǓ/c<U3x' D B$'ie*DH< rE�;�!L&';a3`A4GOc #$; *gg h zKܷJ\7ZaHجlIPy]#tRgl|ng)83Tb�aSZw'/[3CNZ hCNo xp(�[N(9?_donxr�}`_`/.qed)M!s[Cz"ZtbP{GNzgPٔwuϓOGа&Ė9YmS| XT=\^""oRs\Y%R@-0R(\Z*Fj[U>iDd%nAeKvZ,H>"$Q:қr`,Hz{sB' ۑ޺:dnFx>ʥɮK-!INx>0a}MU`-[d<t̐)0O)eCD卡K6HT:k$hA*fZFsLO: ?mAG; ´ÛsWv" L$weomٸ&9?8"}'(>9 }8+E^~7(&b%%!<^:_O˼ '_8c(OW+GoOP>9_^z;L܉Vy#{ъd*̶2qϷ$C_ɳʎԴ]%+Gh/`W$Q ucs3\mPf`}/5g'•Z@y8wq8;psSʞ O_%Tz]ar4<Pˆuh䡯٣AN<_:܋S(D֭wI,76O.l+@ {'Q2b_Z=)?#pVŤ<ש.fXW8qc#8j7ŝL|he}1�;VE*9 x;rD%TqNXAY^58*<r#dz)AƵR'5TURIbQ;ٷ+܈\i :(bc]@E4Yp:kSN.ZxAf Ա@K >'XeѼ |d'5T23yDbB^ !saC(%*; b#m lp3̃ZưGy u!dgQX-O0(=!RڑY\}rmIRy@? $kͳ=S&)>X( NnLYP+(#k&B)HSdGO)!ky"( pFʼn$�?|a.O.٭^~OЗ\{%^&/Y&'1Cš0~=<t2Fh>ukC҃BZ$:4 @g/�Q C[QQC>59ߖ6bV tiT˿~<JP({+9}y2VB1ۭjiVV-!e�S`77TnEC;>ҾeT9ԋ�[r~ܔδ7Hr4&G2=.7.ڄN)޷"G =48aā<!ګ|dq*T]t-tq %2uϲDHKT=ҡ:9n8sS?n<^4ٷOv ϟ-WAx~"7c!6Q,&zTO!{A(eo3N(P8DA'Nµ[V>͝e큳zSpC Pxñ -R^fSߛD6wXnb20?|h$Қ'(TTXXN-~5P"1<D>x> D0LZJXV!8U4L\!mz.`ɿR 6w.! QfAVb(]ذ=rBIُT:L WI"&o] B *76x+yC]<&=nC ƀ[<K!!skCȊ!+?%e<#I_B$C`b!^!ZѾ}v\0w;=Ze y5 qۃBD06= }bby*l,BbIK BF!sM0*6)Hp_ !pA3ѡNI~ "!ъv#.hVYPī_kС݆m.[OisWt1 DaH $(Us 0';3C0BB8@=V^@u8F"D ؊Ǫۇ �ADE8ԊB)ezURBPI!RI˨(#(bsdq$:$d[8wB#w] !za$XIYr7qh.ʮ˨>ArYڡŀTRCxC z $<ѵ9w*'}%1|\^+6Cd*cGXQ@]W} c NӪ.ǹ !Ib BFd`"B(+[#D S%<$ݤyr ݤ$NT< Ej{nFBHHZ Ʉ+h}D74A_JPr:*ەIt){ *`$s_A&ђ]M$;ɖ\KkB[e$`/`ZN0i4Ž&Ob (o:!S]JXܱcű+-qHX*(6 Irk^T<\b>d!.A1GLR"B$CH0Bx݈sBk*x>&<#B!Ml_]!^#Hcj9BfDd1AD`!ACd.?_·n+Z<'/S/4߻Ux/Miۼrs^Z*"&e@cMF%<,yNF zCrn:8Y1V!> SV?JZU\i%/\* B*^޶ c Yƶ)NZERi!y7p o$G*W6s(=5sI r/e&&q E"}ra$->rӔ:}Ce�Ɏ'-vmus%]1y2o!B䟫9q'~/ �شU{O׵g`^8=E.Ry_Տ-?HޥU[>x !?ذs9F>Q[ute3J <^!$O-xrQ[7<l9I~xF*Z�WӋo;EՑ{Mdj|F|ziRlܰgBʇ:막P\fqHs<m/wӔ=B^&)~1e`m=HbO.A^/C N]4(.k๽"~_kS3HieƝqy~n>1X�mc6DdJor&ƾ,2BH9Sq"6@qH u]&fs{@b3ek!ܛ&&Gp2¦ ^@E'ӝt۳daE188#2i$ AXU�!1`CTi};kPs{>ӞltBzy !'vb>Mkz�T<oB�[LDȃ  7T6?h׸IۋK8!d Nd;ޑ"ky !:4:,;_Tv^ bޚ-ŁGNOrr9tۋ,D\ =1@fq+V(P!-4w_ɎL!!+<A[U+f tH,?>;)5HZl�=B$DY%/Bac[ r~^N%8^4 }ek^x^w !Z }rt@TnN *"Z󻕠2|B1I wnAM<LB?S/yZ"s@B߶铨,x>ux-ذh0 *!BIΒd=^ss> D?J+A\rFč~/u3>IDp` !`JP X*bNz? S ,CS Jk7VTxhYxd圥hj׽#&{8! }2!1q_]O|SQubKvc, %"$ I4 "$eKC79Th!BPbt;Gl3#B0nB*+S $ԃt|DGwf3/V- ,Qm5�[Opsǹaby0DC#.;|<Af^}o2ȼ:>Cټc'Pbۡ?'F;W!"SٕvVf ۴,*C5 #qWBDF !HI@ɨp󾇐*SZNC }qc.AHÎ$,gzl( kEx!m:Aʶ"T(C|tɵhQD ^ll Gk9 6U4X\J#r]p /vd@"O_$;zvM3kJ-Hz x7e쯕6HED~B->{H>8|Q &_(J>'O=͏[ڶ &2I>ʟ_Q s ksGC#{U8yYhP }T xD%*xIrtJT>W.9^U(GD*NpK.IDvKvmZnu8-@bys;6yr!6&\r~~(щv~_}Ѣprms\bخ_bC+YϐM|ɷ KKf֦ImkB~`?PQғo_oqG~}>~}>~}>~�A<q?퍻����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/book-banner-pre-release.jpg����������������0000664�0000000�0000000�00000114631�14332737457�0030464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�������������������������������������������������������������������������������������������������������������������������������������������������������������������������JFIF��H�H���Exif��MM�*�����������J�������R(�������2�������Zi�������n�������H������H���2021:08:11 18:30:48������������� �������h������ http://ns.adobe.com/xap/1.0/�<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" xmp:ModifyDate="2021-08-11T18:30:48+02:00" xmp:MetadataDate="2021-08-11T18:30:48+02:00"> <dc:title> <rdf:Alt> <rdf:li xml:lang="x-default">mermaid-banner-small-pre</rdf:li> </rdf:Alt> </dc:title> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="produced" stEvt:softwareAgent="Affinity Designer 1.9.3" stEvt:when="2021-08-11T18:30:48+02:00"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>�dPhotoshop 3.0�8BIM�����,Z�%G����mermaid-banner-small-pre8BIM%�����4JԒuTĬdICC_PROFILE���Tlcms0��mntrRGB XYZ �� ���acspAPPL�������������������������������-lcms����������������������������������������������� desc�����>cprt��H���Lwtpt�����chad�����,rXYZ�����bXYZ�����gXYZ�����rTRC����� gTRC����� bTRC����� chrm��0���$mluc���������� enUS���"����s�R�G�B� �I�E�C�6�1�9�6�6�-�2�.�1��mluc���������� enUS���0����N�o� �c�o�p�y�r�i�g�h�t�,� �u�s�e� �f�r�e�e�l�yXYZ �����������-sf32����� B��%��������nXYZ ������o��8��XYZ ������$����XYZ ������b����para��������ff���� Y���� [chrm�����������T{��L����&f��\�C�  ,6') ,@9DC?9>=GPfWGKaM=>YyZaimrsrEU}|ofprn�C44nI>Innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn�h �"���������������H���!1AQaqr"2435R#BSbsу$6Ct%Fd������������/�����!1Q"AR2aq3B� ��?��=���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������u,+'$<I]}*^C^COJs~Hs~Hp@9<'xy痳C8W^!Ƨ s!/gqA<~Hq:旳C^54gi�?$9CG�?$9Cg3~Hq`?$9C9#!jrF 9C?$8ӜF 6~59`ml������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:G'Q_.>b ���z� �#�W����@2�@��3\rqz������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/ru?XǠ�=<= +G>,=B;="wGѱ�4(!ߔP(iǤ;A^� "pC�tcIRl_ڔ_fCP����@ xzP�g98������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|9=OJM�KF]ڰg.GMjT^�.ŹUBwZfXHmlxwN$ɰ==%d!)I%[-G"o|wf1Ͳ)>4fq}duubHdT .IJ-TDmRm%gt,lW76{D I]_9šs~̜icfp{L޶О^gWVUN>q} <Rn:MTO~,9"Y{XV;]znI89Dߴ2q}@7uDJKٝ2�=��=<mO������������������������������Y5BR^lg_}#qFn>=w9A&SIwn,ջBgTZLX|�����pq>dɥgT}"Ussr뮵\xH8 1-P�l��������c)(x|<LꗣԖlA8:(Ii霚<fK]'\}$x^?_V�C/\�)9}Z������������vO:ʮv>-EʵSR%f�pp]rʖGC{ml 񿙌mX#�쮬ﲼ ݻC_MӇԚOrFxl�߰48M)FOZ&WSc<3ܹίY\N�����xj^^9}  [m�����\j~|jO̓7J1sR[noC %r{ ȫu|[4x{wf[\�l��������<,Wù[҆yWxj\7l͢Yun]=k[!xxn\7hw _NȜy'(zm{>'87����������� W|ܽ7lg+h7|7h^}�j(n�4��������=暏w;J5g6kEJo�Fc+fR Pk钚s[,| ׾nWEK}ȩľ�o1-`�6������������������/apKԵ]hs#_icm��������]*XZlE wL)I6ǻ1Jr֗b[&P�������WM�Kܶ(žҒFnRUZy--]A:[Ր_MJ<GM{0K[�@ X.EOo2i=˛]noB C`hivxFO[:˜/Lᄡ+ '*1|oN_RĿi 0���k Yr}ya7C$w-e7#웞-I9nW���������� XXO1)d7:+ɹ tpvz(?/0m`�6�����������������zK{룬Wj6Dޅp@��������������������������??_ ؟/k1H�z^ǒjd/�|5elmۜ54c,vSk& U]*q}vwF$a}1TͿk38.o%'e>˷w>5/ Ym)JPo^ExQ{U(MZu;--m n|AbJ)}m33W Y(Bpt:ڛ} �ǥ�eDn5.KZ'49<[fT*V=]J)9FNKߙxe˟#TiFK~2>-GnnMpJ/"7;$'Ѷ\0"IJQ+K%.2XJ\gz)Qv3n7zn9JKbpK.*ۆ/bߒb[jYFMB5O̧v]mrQ{K!}wJXՓOԜ2FVMj s�BthtWm**NM>H2Vf^h]vCN1,Ef.{-oLf}듗޷3yʾo'VK̟Z."ͭOmvg(,.JSZMz?C,��%^Orqz������������������������������|l9RRM�>?J'$֓k죌yo d^1qoK~dqk'4%QZ-JQzkh9k/I.}5.Gx>̨97ic%jˤ8RĦ4RdM~&7:ѵe8EKQoZ^E!5R ϗBN5{c9ike(fc&8',R)',R&lK~#ķ*Z}UO./NRDJ 3!Oƞ?"K]'i}1nzٰ7s_YI#e_x$}nĔSKM2˶aURq(盛ZN[i?rܼLnvDPlbvFmyk[4rʔ1?6޺{0(v&;{bJ.2qi3GT uތ7s`hXo&s3 c-~_]b,[!]:kpܮlˠK$�#p9Z�_]ܢcaϤ{En9OޙuAO^<*kO�S+F{tirR2n; -<mΙ竨=uY-i4kMwFtY5o˙b^_4V&98]6Q|5IpyF'tSKmk^5#y+d.KC<)eG]{%bOKK]ԯw&d=$+yg ȍфRe&||.7ܾӂkl'dI=emUY(MjQlʟ-kdZQK.-y|w+5ח[5se_/K鮄up(2r%g?4 /W<f5il3XRc"OCvR ("J�ghzkg8=VF]X>/IY^Wُ ab~76fTq߉qzoͿ7FIK#-pϿ&tPs,IF22C< 2$`s25_ ,FB|I~g;G+ُ[2VEw馊&\sSsw״7w$%(+|n :.mr7()FQzCľ�o|F>ҊHY^rϗB΋v-Ip2d?^m5,LFX�'ķ*Zt]"4wb֋pk)E7ly{R60k8GK}-' kM?y*VImG2auD&`6OɮpkrVkZfmY7%{#gTeQ&6AVd|`LB2RMEwsŪUU5jcf\uѬ 18VK-2]n/cǛO~\|M?zz3E̟4}׮]XRqd}dFMFo/^-psqR^d|x{,ʶIB.]<<}�oCIJ\ %âQzrmMN ]4R7O�6[~f2r�i᳿[]{]#Kdr*$K}sMسf$]Ϫ^E&c5.*:%ˤ=>F2kC*VGg/XNȽ$<#l֜*GRU~[OsǗ^due�I85Ygzݸ7•BQ{y:wxEuFmAmpOBMs7&[/TڔNd{tdɤiO#9Ouѭ厭 ,IFJ<}K0RS1Izθ-#%t2+ag+rj x I} 4pUɭW5VMڎ=>om62>uqrJy%gTRھumfq:T3Ϧg8+Rb͜p2~hbJj1ȍ4ok$e -3RKQۋ]Ox?+dK\շ7+q1ĪJ5\=7~)1'n:#$M^{ǛGU,|IWUbUs�?uCMRz>&ߏ:VPJwMi�$OS3XnOI#\+rj?9}1ig\O_/KߣF{1lusr!>et[!G7x}n^eho,oq,#%sjSbͭpOOQ̶(޼ط.Z&9mhqsIu1wP.R~HЏֶ)%n RT־(uB Uە� ijUKR]ľ�o4N\J=SFo�Иج6J.㭺p˲ ڮ/[x=ulˮ*PƔ`z ̢tg[C;{bJ.2qi2vJ#4^g|j M-sq3xsLݶ*UTW7Wxsؿ$vk4J܍i3/&YW9ˢ9\o("J/ >^G] .YnMnvE9xCyeu))8Ǖ}NUU.]& ʖM8=7d__c,KܜR^_aA)]h/R.ב_YcMZkof&Yq+mUg)6kțeZpQ/]{l9Ouye5occ/Qi9y7+Tֶ䈸_ 48\QY\j'Q-Z3UMȸwLuWGN =KÅ}d_KN 71es#3 vt!%o&7W*&w_95\_mgv{a뚞hWlqz>]lg[k;c ZkLìʇ?2<[C)J+\Z᱅VrIEE3ygxngJpikE2wkB7Z̼Xgp�p(xiY;p'&[g.g*ԧs-ygxĭNSzF-Yj]6iwe<RWp<z]6ߴ�oĊO"qE(ld u0rV%KD9[)Sl[M(*9QZ.7 %\_ndY6b4ԠI//[٦3+>YkQo]1)Iq{X;#(ﯣE.}zz2KazQ?}?avUxt_1XfЭ4KЩ/%gtd,d8WmjK_—5<˗O?$8-snOGi~$\S"ߥ[O;}_3~cea(柇]-vO̻?F̉gdMMJשkȲ啺a.SPW/"Eҭ^"|\]ܒ52۔Wy>ܲ2ߧ)k.VُLF|4̹e/XJ>YFM"Z֜ x=o^dVlNnT\Q~dY4,{9<HK/ij4UǕ]7U֧9mf`وӓR$kؾkf̬e/38mQ6N$Si}nfd+e8lkOKd[}p(&qǗ*,.l_2MGugtn+mkhJG V.kߣy BvQtˍ!4|*fֺ)%q{9?onnErv>/Iye{.\JP=6nKˢuz62~UFėcy|2)E)ŧ E\ՍykLon2G,6B9rَYq+Qm VIW&s0,JMADK.(F0J/E9wpRMrj߸�FK՝+q<)BVd9.W.d6BRn1֗rȶYD7΍RKjI~l_P_[.pa'�/;!x-2,ĚSO!+&'#k>ͮ29Yk]VM|GvYDCîƏ?Iͯ#C/2[ RkOUѡו(18t2h~u斫O7:bZ⹶WoTt&9BKzkE\<IeQyVQ.)5XdzEIv<JvF1]f3ŷKk} O6e:뛂] y|B2?�.ZGX&`6OɮkrVkZfmY7%{#TI퍐kնw1pQj+bN+R5s#N ᥴ^�Sw>_qJ|57XRQn/BF|4+|~;5j�"[:ءr:kދ<O Wܤ:)&jO[mz'zj2UՒa]sjO5DO*x}}ο>rVJ^kyeuy\:xt<|f ˞BW>gߚ3)TfN)Ep{gms=t_/t֍.#|%(=I'bYuYdL,@P��������������������%_bAq4Hdw!ޑ𪰞[*vG93<_|*y{gK%-OB4Fyw}eTW2}2m0[r^N9wҨ4�vc+;I~\7AFE?U./GhȔ斻h<+rmOtBq3 T,7sz0(v-)mSPnI.eهjMJm<WG>qŮdKR[.3uFʪdy\iʶilįW]bG3�d|l9ϷoF%mqQmd)qql|<IGŠ|7+6{\hzx֛[OO@�^�J5v碌C 5]I�J zs?N������������������������������mOO$gفU=6%Nr'gQZel%J[ohgj �ZvU8:EH ɳ[^U1`_W_Socf>Eȵ7^.xni3o!\&%f�y8I/iTj5ӣ3Jhpc"Vr*fi<1^^ElԹzҹyrrʟ5Ye{|?z65k09J1RSE򵤜{jɂ I{ u .eq}?}K+~dZX7SY';}|,'*ܩnv1r5$b2nxlj*'{VJ*/Z 5uFC3ƔwQ}K9ڣ+-y=<^'mPiY}5fn:|rZq:ݫ[[gVNVMrrM@7~0K)ٌ+=Ж:W|aea<'-L'e�_�+�ħF:ÌVK6ɡS\&N<iOK^b],npȳSAwoW0,ito,lu]Jս')61{n]|Fo/.R.kp>(fO \AugcZr{Вlۏgp?&u>#9})r~|k=$wђcd\yK-V^^Whʖ]8VbϚȌ3߱lB_iRJG_ F3mo25_H{ͦMѱ-36Y|Qoi/)F r8{82þR~+iYg=R^L\i[3B Ɩ6;7 Lr^9F2墍S}9eYmY_ <iCP}{2[x]i6Ћ}{2v,UrJȭiEhq+1$ޚ3M L ."{UqjjeI][ O{3ˆ6n4m#0,II*\]Mg75}zKg;$9Fw.KT oaiߡMab[q{>fl9˾yJ* %bhx | =˷[>}ur)zt9I7C2VlaŭU*m( q|N9IyOZc+כ?-.oGŭ 6EXzgv%AqMhVτpt#ƽʸ|&ofJJrd)x3߸٪+>w&߽fԜSS/6ܧޢEv-eڎog1t_Mɒfe.Qʵ՗,�Kϖ \E}cZr{Вlp�0˸FxxJkVpFT!彿q$mpnti>QX9h XfBnA ;ofb9q9NOX}ޅjV%.=Jݻc3Xq)Z~gϖ32(9tQ6W5<`ܗ_$Q�}�k<|Fo/.An#'iX,q�'�C3/!]J*/Z%ϖ%r`pЯw٫+�/Ŝ)zgOG\;r4) >K}ȫľ�oyĔb̵ԋ"}ұ/+Ej6<JK1>Mi>L4("כzd&ynm eLeyMNQ,,Z ٜmv2toe{oR xJ|ڴ3e(VI2Ǵns{孭b\R㺥9o_!F*OZ-;gOVV%~�Qj!yWxִMLfpPZOgmvSk{^g̖a(aO^dBk={ F:Jmov`M=4O,#&R\7iy;3508{q2'>ULZ5q^ύK])IdPȳ&|~Y^qoܾDXyRı1RmkL&{I&_Ňč~7X|1dk3K. AE'e-Q{ڝ3{ 87SskB 6)'/3F<jj?ZߪfR N$茬r]}gq/ VJN1i)ZV4̹nɰTW9=$A͍%\g)t,sFV[.{DxN $37WRogRkB%][{ QK"83UڼG9<J̊>UՙkPhQkɕ-j/[�1p-_˷TMzh>'+h2Mi�qHM̷ pu^+i}s-??Fh.5.^ e^,nũ^ɳb^NQvJV9^W.m~#n_|?f|Ptќarb̵ԓC'4J�3#"|i'/$X?$u˽lq�UbN[jK/_ɚG2\4/&[4(b`u愣'%*RYfRSq[ٟmnvIO͖Lo$fZ΄߼O\a&ʍL{O,g)Q̩ ]qKh+TKgQ~օ~#]^e/MGqǭ][j_)m>qxV8"uFNOSy0m5$ֶ\OHȃbmz<Lc]+_g[DXvkOO\>>JLwnp�e^#<j|82[3j 5aƋ~e!,%=1)E+~$T¶'[·D_-!8"Iq,Rظj)) #>JTWZ`\UiP57|\+mﺇ]{mz2^dޙg*<P3+{r}bױdWkR^RdT:,S\Џ_^߲Z9,mZRii>yamUIy7+]zBҼxN*Uٿ$g[(dd'וy=A?[|\')F*[ZqsȾV/q/-zRL2x~H{)%nr*IÈ%I3<b98KԊ]Jƴ&7k2FToǎ&DʩGXA>q}//dPɥon)m]VC[\;EҲz旡g#)t꟡r !WRIy?~$nu=^\LMi,//RRuyc.7_a7ѳ0Tlu4r'+' q! מs8Q҄=9[T�و8jo{lcene&�dC gR[ߡLa,rxs8gf7KiS}OikRKDX~,Z'eU˫O#7񸊱vvr+%[iqs5D|_[3:YpeW2XN1Rrq4G9%�F=iH'#^]cl�5xڻܿRnp%.mw"uұ9=ėcOefr#:q|RYh?�%;*o_^#;Ӫ~XNUJ KFfh,گvzIm2V�ʟG_VTSO8E*5 ŗ4y�v8UʜK<[U$֤teGiXfSX*0.(JKnRZ,pO19(km쫇,IQ2QfYKaoCZ̓җM"ZN^KDk_NqN6c|ԣ_܉�myAFȫoL1dU?Vs㔚Э+Iw5!oJK`ɹI6c6Wh>}eט8&Dȩڕ> {-r߿E)(ս>)lTԖe<'?'>eL[5ȥ&ѝfeK.9EE#Z4ET;fmWc)-V"5:%qR~&8NW+O͵_9-eq+#ȵ>>e2?s_L2_U^iɪ'[(j)6KmE븤u8$Ӗ�BsuǼZhq-wcJi?=슺l '8Uj {}w5Ǿ6&ד kq{HYٯ1rF=U,޻���������������؟/O.>b9s{J=/eMGF83Szyo"OH7fg,9],oq;i*#כ}OxETqlt|�~Ĵftdc_9#ū'bϥP/KSN릺]gCRͧ4-Jku߰ï;sh]>[,_G}_b-v,rO]VtⲪ,dl喷B|1siER=։վpGӾKq|dWqLBpW-J?fM~%<IT.TVuVcɿ�ٰ:) AWrnZsrFVk*Oԟ.]&�Tz� @�@�N곗�ECU|Lf<Os?N������������������������������������z\e~ 3qݔ���������������������������������������~�WT .7jf1�@��������������k?#`X@�4����<bX[Z{+Yude'r@���������������������������������������������������������,qh3� ������k:xNF?[iA,� ����68#� ߉?y2 fch� ��������������������������������������������������������������������������������������������Ϳɝ ~ |Yz`z~D*oJO[G36 -k{^n2!o/7#ޓT;߇UoQ9ɽəVw:⚜b.Jsջy~Ԣ6TvusZߛ%dkm·irImwз- n]'"m5yтU˝i7O})R3}S(xN3QNK]ש%)CQ[O,5f<ԗy"-jMwm?o/fn<k1.U8uYI5Zt<fת=/z)Se&MgLMk[ )c˔gGquK}6!(Ϫߣ.NU|(cs},zךdC%yz6Y{_y$g W[IE%:o-DD% %ɯ&̪NQm,T '?ZfV*N oO2o/dEL>I2}9bPEuZ#C}'ҫQ&ڗZD4W*>㮨Mi#3a$ͧI~sQ^MĠ2R[Y��OC4�ZW2*:2mO����������������������������B.sWy=#Iq9>'u_ȕOMYnjܵ{场cb.ї'B2oS#>,V%_rMla����IL.p /d+o8JW'7܃;VwcvKn)58o:[KDF#9=5ӷSje(���� ī)Yu=zM@Wd#c&@���od(7סf.%[I˩W}χ y{5G+ÇἻ3jki}~ P{8��cnIocYY,ۮ^OФh q5 m=޻�К[U%ݑ4i4_Qơ89i4Rng6љn�@hpZrU4yuz7~#;&&Ej1IfMOlHF̪5Zhqux1W?.�1m ��������(#%Go^2�FsEiNGKU.KE!�@��������%/$+Xeh"ssyf0˔lycj]oq'FTS_V?ZE9T\H�������������[}0S28IqgF7\ٛnp�лȺq<Gk9ioZxH8 ?9yT=I[oVĶwv-EJSM #Up]8gp�������W Pd(O~>A�:�������� |)VʶM+֫jrZo3� ����������������������v</&QRJ:kkH ;ĆZSPM[KѦUiѧŬыhq# DYu������TSW Kkٔnq_�9n��������*Mn2Mx5X^m~y~Q.������������gQՕ 7}ٌr<���������������������������������������������������������������������o/:90vvOrl8YUI7bf)F IE$JͪG/hϣߚYC,ԣF/z߹z8)n2:mIi5LtΧ._Sz6}`()%cR_Q5(r}P_"mH'TrTd EjK?^B|y"m i9J19ֵ )5F/}9)ju8ťbTRM뛕zх3TU[ԺO�>ԈG<k2CWW*4tߩ=I<~JNjZ[z_T߉OI6eb3 )KpI&SJN�/7Z>՞YNqzeSz}%'QrrKo_g<[z|ŹuF(Evq_g[[wОKk[ɧ6;n17}R2ҒItt:T½ti\=H`"\~K"7.ٯS{]vUϑqbTlmw�����������������������������_Ƈč7H_&ch|Htg<tWW!^Z[>|u(5R ð|#?? X.̆8W%Im�AŞ]zK4«QY�Tx4q&yoǶNyrYo-lVnd>>UV?GM}f:֛^y[ڏ n Tygn>u̓C_?m0(ehé'=?Bhps;Ī7d¹OG(Ԝ䠗Tgp߿ ro('k-QPw/-h)*yRFA q?7wqޚ~񓸣İa:[+}K*W[_yC;8k.yLJ<oO˾6@tjX+/ZK)YTg%S*qzSoz^Fss=߅gՄ33p%EtZqm5٣r=mÛD. TURo]{:dQur]^> >ԃ0"jqêXpm'VO3ՏeTDre{ M,wei[68"p\約mÅS,ܹQndRuһ*'ImkiYF9yؽðjʦS5-t~„,lpOC |N)o&WtZ1d}ySֽVp{j^\Gn%]I/mLm6=8c2ob�=%Ւp?wq/?wݽ>?7|oBM˾7!;Oi.XC|޾FFi(º<hvvw홹ijOq}c/R*VFpz^͞-<4C6Mli[_kRgW)hG R{1W[+&J48L]|of[Zzf^4q޽~ZJmq^4{DU>we2|Oӆ_R|= D9gbv2|շ=o+έ~ Veq gĹ+[m/#+g7/$[f"|U|SOZ&D<�%Ǣy6]}_djGbٷ)r <nZ2msoOb9[rPhk|سL[Mi5KVKz(f)lˍW tFQ{^Ӹp)}HϚKԓ&n)=>D=#N9iw-Q4dV5?k2].psAE6S58>I!4ixj)T|Oqn̯ U.W]M={9c^�q bJ:9.g=[ùדR_HF?ן�=4ZfDMmE~ "\_iI/>*]O;"ߓΝLWvɪle/+x:5Jp16C"[D|ku(-FgcVN77>mѓÅF<Iz|�?9ssܤ؜lZƫ'2u^M]|/[cP씥*o?ͼVwrԢ"2xoOa8n77+<_ȗ}ySӗ*w7IKRMK[9Ğ]zR48� �S$)C][mxlrvkɴg)4(=rLlJs{٫-er{Q^͓)3{5l;e=%Օ3w^3%V2qqj:yooRXO_�ʶWdNs~}=yeFqϚGK}+<x\V,>Hc,ϸu\T_f9;^85bۖ.76#]/qC_WO5VU'/#p؞:,͵i֛FO S=)upo2gBN2Zzh;䱃Dr2\W.pFE84/]=i3[k{ITwQ̪/2szh£2kk|^Gq.,.dZ̦Ycw-ccڬku1F=W>MO�V\RM駦YO~Ubj[5TUZL4Thū&kŹǕthB*kų]d.2qOMؘJN%7B2UO]W0˾<3ǂ.>fUzKIltyO$aM41}KetmC^O^m#b&SyW1kcr?1R|W_ȫU)rٿ񨷖mk/1(=-?܎MX4\^UI%QWχ$M]nrKO2x]nf3{Kz*igI7)%lOm/%$c PU䷽o=$RK/o%ԞߴV1k5y)mq hSnZ{eMќƾ|>rc�uwD^d<;1斖ʹ ˫=E42TǛq8ywi94}5h0|SOI~%~Zo]a{e,^V5.0X|3?X˙yO]^cS|'_j58DŽmKD㖭˳'ié%l%O jR YVMm7|4R~&4[}w3"$5x%~%M)m{ yU=wq.Y)?=ö-W=M I$¤|M?q9Xƽ'uO\mS4� +o%krp|6*8r 9F1ym *2Q^wƮ=+rfR7(ۓmew]INQIpJ铔J{ƶх<Yvw4¯?�zg|"*8J_&;ɹ"NR{o,u[?-RrtgEU gOћVN:ִkwe㼜eZj;i̼*Վ[<JU"gyYxv>~ikK?xjtSM)nm?-]:땶F[5TU,6pH'e}_�~'l̚m"n\`g 9cYhʶSd5E'ʼ(|zS]in9q {/N[=2DT׫�m{o͒o;{1e2rtV?58=PUC>(qHv�-(Ƣ,x62I~ӏeNI^Q.jm'('a[.K#mzR7ᦣᓑٽipze5&*�񩷓orjQ=**Ɩ]d4ihrnc䤙E֧gk_\m'n+/ZK,gԄ3<6ʺ!\^޽M6$)SĒ"?'Y MOZ2<%z'7\#ý'l&M6]/e85X_o-[#4×ח&Vѽ/fxã9˼'XbF'9u{}wc},׹#'*;nYv57�Cfb>a�t��������������������������������������������������������������������o/:90.u!+$'#c5G?i=jIriʣm-y[1vxEs:ʥý|7$IgRQI[}uɪQxB]o73[xr}=ڪ)rUũW_zvGnJ^ϫ w6L_ov,[<\aw[sݍsvg\JsIJ[Ok7(sJzWld\cZmבˌ':wEFK\Nğeӌeo}n~Ȃ^5m-rDԚkK{!54yt�CC@A[]c#V=*o#�H�)om�Fh``_3������������������������������CF?/1Si[*6ޙr0ɞ] 5{XCo�Fc&MwDe]|Tm'1qݔ_JTIiG nzќfK* Jdw~>>y/r]#o{nDfyC_<NUIŵ74,qoKܾF [5.i?3諭HX} \-A ^�е?WUNR]{Nٹ5e[A)M)>TWj[%f件qX;"ދa'O JSp߫+p.3ȷ!ٹk"7MǛplfNRܤ&xW7]7.' %%{0I*eT_X!/sͧ%DPʒ׋rEfܛmvۼşA?[|7DN-=d훝O/cg_#n^Jr<Xޑ{{cum|OoFLiU3ߓ*ٗ}N(al;.8gCg xvl֒캢YFU]}脙u#.9"[)ʺcozDM}f=BuImu~¦? Z{zr97c±?/#r/-7E)^S|k!f3˾rcwSm/#߾] 7)=ɽrt#c?e֒iN=bك ʹAKd̾slnා,SA>=쓌G4ErIJxEf{omy >Q7ſO n0_ɭiZ˼FqkHʽߕ+WM7_-yyly|O I˿1RU:\_,>%'C6|=Ǖ/g)_K4Q99IvΪ'Telp6 LNju%,5RK}?̌m\$2]EvCȀNrrVip|9S6o/NWJt8MFYf^[9n5J<ױ#3;!dk^㛲jdB\q{ywίV7 %(JQzi16K^dݓm+fm h L.gi7~<r^lj։7)Rm3%[Z?qI]Ӯ3^֘SCFD}5x<_dшKNM&}2sPy-{K%fÉaI>99OromS}6ꛋ}2Y^Z^3ՑJF�2O#ʔt׹$Vmؓ-ѷ~ %v8Єc�y>T>j-kbgt4Gck,$cc}母|Ϋ˾8X}')E駴[F y#*$L۲n%lܒFOiL>4h,[h+i)ˬ2Q׋q9J6˚]ߩ.9YC;|L?r_1g9Y79=ɽIn]C JT뛬_/NWJt8MFQjG*V2\n_DMI/O$fq_~$F2lvY;fd6e8;m4tt<o�FUS)7nU[*6ޙ7YD6c6xv-j''/6f(u[׸Y2m,z}+ qs)l隝r7f7| T] ^VnlZ#&3SToeLjcBUImu"7 G/"OFh߅7D9S/bHiG\J*�[ O�aG.UFơk,m}*2U .!i֚}1 ̾cQ}P¹W+)JdIcFGv>_EЮ1{o%M�YB=NPQiUS.jq #+^31xc.101akqޗvG/ |ֽQ%(qf.ٜКkA]\ڊ{Hq׋lۓnM&7{o7GcE^ {>ԧ<W+Eo7T[&~) Iok,sId]D\j7"卸*Vk|63qcL'T2чbMe)ᵩߪT)jcp;T"83l+RܒƄ|� )�; n O6oOї}6S(4}:F-ꛎ&wvvE薎YcJWJO~_Y6(k^ƌBjrjWtj|{N7FwIg<c*6J4AV?&ظק䖊Ę!2c*<wnm9t} P9PZVIx<Lxp'e\ϻecZsuӶnZ:|7H_&g~?&EvUF{#U5:,f1t48R,.z]7V/i'&-Qv:j>[Aŵrp{)9IOmxl /aO.hX�ܯ+�2ezV>Mk^㭍~ \ԓ_-VzhMיj<K*+^.2\l\ '~SZRi{|lܟȌ2#)K9ι=s.џ6O<슌m'gв=rld0<yRy5q,xKeyVMrrd㕿P2V>Fߡs?|Z%˺~~܊#]Ey>cw4p8l[{"ɎFBPtOՐݛ|\l%ЀLnFXoi.VWV|"=BPqm8J-4Z\K)G^/'/4|3 Kr3'NYs".5r~NUJR]S,Rѱ/=͵ؒXP[_f5߯n\)ɺSqONkpsqԓG'v;dpu?xWu[:g\ebgt4ljp?w~ _96Кn;9INR{{lL~FЯEIIu^0rcJ\M IJܑ9NҋJc,zZע1dzka&ܛml8EV\ed8gs_]]5DOI\c#åUb]t=oI3CSOʼ--ofd_tɩ̾+؃$݀��������������������������������������������������������������������� ~ |ͿɅXzzxzxz�@�=<=+ � ��=��ЏO�Go#FmGEAE'dP�}}G+������������������������������������������������������������������������������������������������������������������������������������������������������ؼR)7\~$p(ܪ 373*YvIj+cWI�������������������������������������������������������������������������������������������������������������������������������~?N;8'~eu60qĽ|yf&Q95q <;zIuxý|u%IzK3z1ϒ#zvh��=<=+ � �@���d=<�TvHoHlɵWD>r%<x+�&4UD9)0V.'lSLV/ȭkgiڼK x'>=\=,g:KJ7K+湫#++#wz@�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|W '~9xhNu.׶2]秖]]ė^vi >z7J�qKͷe ^g/.L�z� ��/@(jLll[ ǣןead2W1Ԗu+Z{T.h�?e�2C][R^hzOv_=?wvoNSZ8u׼!߹qmu>p�չ?E䊜S/U~45 X^]{y-u$�KzA>=*֟YE #𳵬�zu\9/R[]H9c+!�<<L���������������������������������������������������������������������������������������������������������������������������=IǛ}.lg^G,<j^V�k>}0IV<5gxkՏ zS{c^~g|'X׫u?+0IV<5OgxkՏ zS{c^~g|'X׫u?+0IV<5OgxkՏ zS{c^~g|'X׫u?+0IV<5OgxkՏ zS{c^~g|'X׫u?+0IV<5OgxkՏY�)N ΏKuk�?�=8��������������������������������������������������������������������������������������������������������������������X[ͩ{J#9xjQqzgZd3"8<c8J3dx?5iήTd}̮'aqu]q�,�_K>:㟻ՕΛ]vq9=[P����#wor?].M{??Mj9 8RJѓ?狯@��Ά,Yv}Yd Ol"}+sJ7Æ29�m�=mrIdϱHUi�$EG#�������������������������������������������������������������������������������������������������������������������������g<^<qta"Iv�׿��������������������������������������e@ZiJ<ȄwK;�K9������������������������������������������������������������������������������������������������������������������"c^( G3~԰� R}cё4h ٸ4gW|~3]Y6 nSdWOҒqR[Lejec8{0zyr'.k=u1n:K�t��e� ��68w*򓶵I}�qsq#{c?U[d<>9w8v:KoO~%PE3e#˫ m]~!f~GgHx:>G.8ݚ�{��@mǪ<}fw_ ُ¾@S������������������������������������������������������������������������������������������������������������������������M8-�>O8H�;`�����c,Qr[ߦό�D?CG:5ـ2�h1mu'᭥08'mc[.-i/K99Yى6UWɱA>˻~gCJ|N?c)as[ g)TEq zJIW[3i8.x)rǮEwX)x1O_bΖwOSjE6$^37R̦ ٴPmA˗ioN hd&ǮñqyZG̈ Ғ^hx~M(OQs/~ײzEMF)m#ڎTbz&<kxAWbg3x~[ %%)Gc\o}AG#1;iio=_5$Vܚs[30�h03,qU]lZ4ɖau˼�ʀ�����v.$<XX�~?xY+�Հ����������������������������������������������������������������������������������������������������������������WW,p�UD�<��Zk`F֞d4@V+fCWR?ieOE˸>S;da7&J|ٙnxSg�_=?f@+9dV/'e<G@��%x� 5pvk|DsL"GB$ gQh7Y8#ɝXf~2D�=��vج֢1Wc<OT������������������������������������������������������������������������������������������������������������������������꿴JEOu&_{�o;� ������0�}Z�~Y/7lg˽oZg?vr%2,zQMym����bYeU2ZQy/CN̳㜳݉rf-v<]IN I/ecjє*_VKZFŮ kQ?}%ViGJ<:V>4^{ig;fYe͎}�t83ȮTu\W;dbJ  Eytu~ܘ9ZQ]̟qz38l}+%�d�~Ѭ/վ&�eO6%2%jruVqO[oj '3[k~}t?R\8lY&W }hjTǖش߯ Ż6?k�G$GG_�&r}k_f%QTmi/c]>C�Oo?wq;rDgNG'cM]?cd��24|0sZq}~ߵ8taRSڏE�4IgoW+o8Fk*p8kӗ%MQ l<S[yp,ԺS%%ݭu(Z𣏕Uu.X%{wɖ]tﻭu7OV˺%aG՜`wKiԛIv^/�kgK]ܯ< xq"JSȊsr}|\kxed$ܹRߒ~#ܿgşHDKxMo�\f<u>}2iKE5ya¯O ǶjP[~E]]\/6J]J߹&}:c֮PVreSџ29[/�x������_eO'X"oa;wԠ�8���������������������������������������������������������������������������������������������������������������"c^( @������49U/"iEVpp*p}%cf~[_s}>(_3 ]Mr_\8>ګB31?g 9=|N7]l@w}6O\~�3Cz.-/#*sK>--/#f1'%k3O9o={>'�2�϶>.\5𿺦H��VZ_ ُ¾@=S������������������������������������������������������������������������������������������������������������������������N떺3e�o_x�x�����QTܪoqG`oB?Qڎ\+$#Z:MDW3ꮘ>ZG@nFQU亸YI4y^=5WMp�,b�֍G1&\bt!Uuy8FkSkb1#Dz8kߛl�<#b⤽،c*+-85\Ю~)Ϊ{#&ltЖb pqn5^l lK!yEiN{pi36͵Wt9mgI-A8�Jmɭ�������ŏ;oKl:];a.S r�c&3V����������������������������������������������������������������������������������������������������������������X�~+8ߪ⏢�D������������s(F^DrL�mPS?\,;9~I_M'lUEoXx2q/Ė+q�uO!>UW%(.y\V/6IEWƚ'{Kw\eAZҔnZR#S8"&411M}?i0η}E=?ų7~ogdx<2P_j֠SC6`�0� fQ}+1W'x�������������������������������������������������������������������������������������������������������������������������>K 7w gdQ߈>B} :?+:珩ۮyQPi<珨珨4ssz99 =xxOA<}G<}A>>yQPi<珨珨4ssz99 =xxOA<}G<}A>>yQPi<珩Um%ԍ{ttzk&,pʽ>1ykzש�{@�����������������������������������������������������������������������������������������������������������������_\Wg/}� ����������������xtz�0Qz���)ET^Js0̮ ܧ^AyAj?Lf> 53@}Lb � >>_ ُ¾@S�����������������������������������������������������������������������������������������������������������������������������8,�Ix�t?S�~�|C�:=n�)!u=�N[�t?zOp�>SC{S�~�|C�:=n�)!u=�N[�t?zOp�>SC{S�|/Fx%~�$Q���������������������������������������������������������������������������������������������������������������������_\Wg/}� ������%(nRQ^����������������"Y##nt7 -(�f{^ɭ|:y׬ϱl~#<|f+ज%3^lmVo Ob_&cvٙ/d5�>�S^{;c/L~qdI������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������WW,p�UD�<2uzUqp%/ok%'/Q^^<<ص%mفgRn)XrxܪϕJW([m x&Ջ]W*a'Y˙/Nfe*ZIjm)k2]{I%T{Z-XZvE6s>h-sk c;ծ7v/:SKLRF5do?Dwͳ'ʪ_G;62*k\k*kxY gQնU'%rIٵ6YnHkǓG81s]^~qyK/㺫%+MR]q/ǦW% VqzV#Ȫ S.gʵۧm@q gdUd'*}tx')97��������������������5~&DK~&D{1����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ?|Er\kUxA/<2F3?}CpeÆ^L~2/a P�F_?}Cpᗰg/pi3?їP�F_8e4/2`e?ї{ 0f~2 3?}CpeÆ^L~2/a P�F_?}Cpᗰg/pi3?їP�F_8e4/2`e?ї{ 0f~2/a~&Dwt՗NiiI<(�(���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/book-banner-pre-release.png����������������0000664�0000000�0000000�00003122420�14332737457�0030466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� ���������IDATxYm[re}MխB#v" B)$+BOؿ_zq H[@Z2Eq@ uWaΑe1\ksqbךMfod~Y__o|#u3`"9^YHWŸ> G/So_HSED_s^AMnsʝIˋU -1}Sl, nPg TM\ xHF z=yNz *k[g۬lbj䀐PYo5jǙ<>{ʮ1BJ`>i]=? qU(v(8@mS,m0 ;@E�)WpEpԫrekq֭<RDBVAnh P'@'m*I-©e $#X')th'7Wr K#O ͸k ShS:kDc>m|OyZé<Nǖswi}*Nwogy<WVֱH\_bVe 12 t 8^!$K}HT;wb|V_�6%>8G*cĩCS:2'vU|P#UOip5*M3`hkϫ  !ekaozX%ptPeTk2&`ٲ,6t$upcs?~܏q?~܏q?~܏q?_c#q4c,z+3#W7OW>^yp$DtL!iLBBәdJpj fӎ |MA}>K>x0" ioO7P͘UD̂>LϲӐyϰ㘭#ЌVVxDȁ a:^' D',}⦓:S23M!dUeiZdI^+`CZͣ{1F [`qfe*`6D1^v\C z6@2 5�!E&Qish5^[+Êg4F m%z?P"D_ua#N L ~ a B�ZтnXU Xx fN1:Á> ߍi9T�s2F v vkRXĀ!-.{!!4AuditHFL;)b,Fjc͉r4C[!'lK0eLKvk!]6 q2�Y!Թ;\@n5WH/TV.!-Ix>!6!4:٫lذ6#XBx3e[s& F lNy saJ2`q #<402|G: t�yF!)=*PI]:J,#BP OAw).Ϥ1}|W$x!e  0'16? £L~F1�GGL=/UXFW3A* >OqbʅUi+G炣cǒ>h{ח!ӥRsT$#Ĺ>\05S+B m~v$s"RA!G*!Yp!>kiz 8 qtHsmvIp F#y8:~ѧBe GxS~Vz \[0te. E 0ذ�^EEa}"'u)iu|7{QQ>JMX Gbp4O}K(&9ڧ? v`ښZq1:\� !郝f=\&Q4c# vZ" =#ȓLXu}[PUݥuK<=\j](Cǎ[ԇ9DSD"2gЮ{<_2"٩1A2"Iv$ vTL8]<XQ0׿_o|(p:h_;%g]R@ pv9j FB?ҏ+إ|`r6^șJ[@ԍ@/Ogm"P{s!3 ۛH ۴ˎZN 9by,8aplaT!S!d7",Z$8!y+:yӚ#zEop,חKI2l)-N#"HNkRL:)h]e-MB@w~ v !*5: Z*X\JFzC+I,.Pr0W!4Xw #/{v͢+[CH!p2,Hyf\[RE4A1'"zmk[d>W:z&4F̙Z,q2XRF>8^Gg pid<;\1Ϗ*ZYXѠTyݒ .GDT+$/&ݒ L0SRpICD*"qz-]w_H*/Dhڒi(/s0onE\Tnqy^3.[9?rxk|\Xp4rYЅ [М0 K[Q"Bݤek]B>L?+B&<?CE˖/~jT4r/2`7*ܼʦ@R & B^ PD0iou NW솣 Hꭐ _¤lӡ.c7qxՉ}nnN#y F8F%K|t66#Y>ĩvim*y#BlM:ڽDH#j>6�SZozӝ@ S!a!gȣY9EjsNCLi*d _QšJ!g�0M9Er| _7<B,l~"!㾡ý,Ӝ-|e]ccoקԺwFsa&7:ɦ#R/L{lۼ!z%%܈?%`NB|DLA_3X=BH)AL!!RxPGFR Tr) ]_Nl>BF !Nk`vW*U&CHC 5dU;]CGB{]3!¨!'r,Np<4R#B;aoPl<$[,*+/BWf L=G*CE$; "zi ڤ@ӨB|: dۇ<2):;:+g cEɦ@*[B뻸UQ.8H7\G[qVp]^I2QIp%/o�99Tv,Zpaj&hCLp0^fQ߮a _g/Y2Ų5|Y&~ bc�8aS%/Y" yCEq9ە tgIn2A d ]{`_ٖu@`;.8O.ѡ"f@6$);n]0 וR"\\*B ذ:1/4 W&:I8L"yT",+A%B ̅"z@Hk aJ رR0T`n 'h_"%%q0Pq.q�DPIFeҌѐ!kz.Q=BG5G CH .!',dVK^Q!nL-"dT TeRoOt#&Sɐ$y>9`;2" aa) <W|VDjo#]D ~!uOEqbl&6+fm /gprW,*;y {=/ U@mTTӃJInodDZ吪fb< >RI6K+ أW }˻N`E' LS9l va0TiSa.̙'XUh/{37l.v+@r:3ظ;-1y"Ŋ!ņ;71@Cp@7޳*3gxF3#ש=Bp[@r-BK<:stCs<Dľ7S2GT'+L%BW">5*^H< <ZCa7jw}C~d\U.\_@{]gy?Aڱ)r_T­!VAK}FE$3R<OW[ʃ`+H#`-jvJe+%YuE1{sc_okON{oC3lx]-Zwgp "dsveS"T d U7ċ6#ؓx-\xk~܏q?~܏q?~܏~܏l}P?$"UmFU7wN+ o ?X2?N~!TSqő~wmoS .r3`a]E[_i5;#uDu0U)/l0=Z6mg_n7r5PCH{%�Ӭh!ĺ4q 0BT8 :3NAN7V~W8u_?swD,;5 r};v7 fn^Qh!!%<BlaKl+{~ !lAT+"B6N`@M]N$>!{*8l!{ B(b0 \@ v)las49;C@>Y'kEV%stp nRx7`6O\5dІ�;7ANrll+�u`GGw!B4 D19.8oaAP1C}P;@dtKjX XG="OQdũn)-̅A ]rZ@)n)!6<B`OZkT>Z߶;<*-9`o�v<_<OP#q-vngZGCޕ萾Bj`k!-5mtn?{ #d�DF244c|tƣh|(ʍLe!8b&+pSk{PD{c 4s}#GϿ $^Q!our#B}pߓ/#LB++; < \\ wN\wSF$;LC=8'F!m~!rev !7BhLCH ~`!w|y\ ʂ#룕X-Ub?oĐn&πbGy IvV%8^I:M MF� /l oP!!/5W)q X+3[ (Sa R`gƇrHWpCvv"XCH #Ba'm {F%*6)B$䦌b&Hl| w E0@C<߂#5f{N; \44aÚD$!S)o9S{o|w~~-a fm-3؁EbJk h ف\ -RF0Tif-v>lWL쁛M:͛dw T|-FΩ`;WLRٞ⬨P!طgq5?@ *TB83O- .{tv)>MW9P2k$S^BbY@Ȭop}؅p2PĴ:k |;#̛""HNkR}!!b]"gcn$"^qQ,G0QZn Brư 'M҉9 8`Ҟgfc:[#se_2{[;9s:CH!wIRO/HӨxc}#trԇ$M#BBi 㣵q^+*L#48ӡ:_?׻ ˭|=tΉ]_ 1ep\49 c+`hOđWPt5.le 3A5R&18faR&i}Sy MGBtRܟט})USSaZ2$8y 瞨1.!G@4+B,h t({mbw\F@^/cSG #)xF<1Nd!Z:ʝ<yi+\(aJ݆ĨZKw_:)>z�lD0gt:Pxq7%`b 5HNx明GDmՈrG\5~On }Mi13cS+ګY85٭ͼB4ynca D�fjs'͏fUػ37GـW _=7' r "!v~ـ=ž&|!I;wstkM6-p?ښ닟4׆}-3a nE[&.b~Kmmmi>D9pps{:P ^B핧~` !T5y ioq/D ^}wEyl0:=`F[d6[unfZ ! @BdA0}ewH,-".(&:: !V([Gs`*PT+`ǃu*8:dkqhrSt$]G6`3 $oB= !IvL~2 <H-생3Cyt��v@l wb4g@o$@" ؊!ob~�`XTI~ߠ3}Bߞ2 ! S*N iwi(dҨzgiLH`2nu8.�!$<d!J69Csr+1fR.;updRlc\D2:*GW\2k;ɤ _ z׷ Z B`q}8!8v _8[+י`>~"G%n0WzC&طI2޻) Bҁ<I!0l<lIH}2n5BC i1=IؕIA2@ vF^mPft那f"0ԵV+p$c#< vP+ RF<)�;]'m_#ILJYт]Z&df!إ̵*3]4!R 𒔯ǻz`:ØH|p{y Q U5*q(B.LXܴdLbW Pq 1?P!r.*AY&=:ˤ' !!da+Xn)w҄9`v|_&UO.C)']&"=B<II2A7&QV` #�]]j<Y `"{ΏݴЩ7hEq HLlWfi\rghbUD+`K*;EM! % .ބ+]넟Lp xHF z=yNz *k[g۬lbj䀐PYo5jǹגI+:lk#AoeW= a>owYa Y)N6E"+"8UaC֭<RDBVAnVWNo֫�U*I-©ݔ5 $#X')th'7Wr K#O>ʏf&H4N 5,NOTޯk=Ek%8![~>�ߥ8ݹV>ϟ!قc^mZ:6R̪!8FF\naP+ɭك#Q슭žϪ< G@EVv+T"ԑ9{M`j|JTiRlaC;&Xs}^4Ums !́-̝-^μ\ m۟Q\l?X:رC'՘et c@Wx_,O$f_q6P?lrag򘠥/qJSag=$D*͛ځ{(Qx_X#;L8xሷ"Ie ]e6JՇv Qڟi~v~N@iC_׻nGv y׽_4vCE*_!FOҘB'KpuN'u+wGlLg'$,.w!ns. V�^x}:G&9rAFaq,ѳf!*sq7,e{Sd\0t} `]u* ].%n|O_[oC8xT�S4A/tkEw3�ԮoֿnB@oo@@f7"BW/St0Ҟ;4N`P!dBrI.b{M_q}Ww; i%<3`L[9|4U%T֧z+ߤ<jWyf%k"Tj|渖߰Z矷uubUmڂSKo7; .^Nа.۱ǥ_U{`4 Uj�2Ҫ{o`!aޭL++hJwNҢHk}V=$v- ܭW#3xҫ!7{ʝ;Nw.ҟ6{XlXЂӓSxoh%v>KCj[ }U]{% @ŃA {⹹a2-]@1\}aQbnhQetȵ>6X9v*\~ &_Bp$FH|E&mp}/:ΥKhK>qDŽwGH S<�/?l#H:^|8B"8Ty;a -y.KBފQ60E1[ 7t+Rq!Z +:$㸻ZÇT^؟R3Dhg <? h�}6\\ }\\6*jW(Ć9m9u vUbFKGHxim'أLͦid*s#%s p0^YmJà!nkw~�AqTt*Q&]&8luAܬѻ@F d!(!]Ƀ*0tvo/8_s+K]s:zuymzed*Hc}!rS*GJg18fU+xLK]C͎b8W,<au,lv s$ 8E@GL0].u  P5B,8%]T z d~qDZ\ިdb<>:>Kwt~A#_۱܌u E;^W 篣݈o.4N8mԊ$ W CEK$weB>p͝ oگ|x|.uCz_׎]¥4v~oP|]l..|,B8?salmVmLM`I@8MFxS{H 0 IWFM%P{s ! T.d+ݺ}{meGL'Uf_gny,8aplaT!S!d7"E;V Yz!$tE'f<Ry78 v BxK@₥g Nh6CB$'ŵ)^CBnm :Ĥoؘ?\;_`rP?XqeE ,. v%[#v U[9+bG;b=;fѕ!$8o:AH7>; 5t޸7iepMDƒ׶|AJn$`Ҁ Bc2gj֒5E@HT5F&ɫq3,NU]6ɄGf_hPn#"*QyH@nAy&Lp)8ҤT"k odZp8'ٵ! |Uҡ&kK>P#"Hyr!Sy\a<nSP%}w}qc@ˁg]_mb&6[М0 K[QRo\܇I2gEȄgy~ْW\ϴjFEQ[Y_uSÉN k u+�j[Q=@$Gv@5r\UY&$"ꍌ-Txصm$軉PaQ[=xX:-`Uxؕm2M:$tx߁"vlpfئ 7"@ ?E{=ܷm*~6f]=BpC/ V;E+%oPR!6!U |wХvwi P#BCMIF֋4WiBډ a|Ug>fQ=ˆby`=B B$G 1H!zl ~�-4Zn�W!!$>v` �¾7I�l#h`$;oase Mհ]W 8%B Bf $ B-H#$D JBB0>N/eDEHMr:dA!C&`v'*+V$ :d*s *I>H`t^FIuκY| OQ9T8O!͝y(6#>\ў;Wf Y]yT !"OEߑdjC"Hb5Hˆ`!"Of6Hjz8 ,Bbv!$GEHk]_UljLLH(Kt}(uz"rGr~tWϵy>t$Ө$8*#|Hr9yg}R::X|]&8bq Z|fIѕ zm2XLJ <|߁U*Y[�$r&w}y&(!tV Bd!F)e@jo L# !Y&(2C8(T2!n'L' Z|P3AMBҚ,uW s6l^d@/@T]2+�>f ,!B B= o$ eA냾K=[&[#8D//SYgJthT& !КK Br{Hj!4\BHCQY&]Y :<?Gd Bcj <*HpIU&]JOxr.$#'lGZFiK|{�RG$ o|ᅺ*ֹFT Avp^z̺r~x|Bnb,D;ǺNB^OeK\)?Ѣ Ͷ *~zV"-uPկB~%`B^?†_XqٕEb$TLʣ'ۼ[6ZTQy4zb- C:ϜY{UV}80sb$ɍ<s+XAӯ*RSa˝'R8\l`q4T 7˙t3=2CN~JzoT9cA?"<?|# $"DD3I8T9CLz3A<%s}Du2)BQpd~Z"xź+bSE#u>0t}v{~>G\׉Е~V'k"gEi Bh$k鬝d ~jTD[<#ZQyLtiϪ<v4v٢fTxRⰙUW,׫<g:vD:4Æa: dp "dsveS"T d U7ċ6#ؓx-\x|Sژ۫ܘ+ ls{25QhO]"NfeAUgiԎ My_>`t '峸!Qa@V˞yM�+1j.UAƆB�r|zw>Mm?<F_LRY*BF:ɽ͕)6ݩ; !IcNUvs+!l=Ml83 &C@.{{ӍG vAz�f rh]'mn�:HB`U*)REQ )BڴGrب;7ȱqNsn $"s}x} Є_Wi|Xbx:ԂZCu>d<GBlx4 t&؝WxF(y!gx~t}+85ϿzWb^aQ"<B{8T_DUK$�QoV9s}9)m  y U/)Ъ3*6xd1nh>o\9`6Į-p5|W9ow}3 7Eo4sU!8\[ A+"VweusB k"F;*ti»e)dϪ G]8)^r _K8K*@Z$G䀸3',kEUxD9_n?#B6N2gI8|/rLP{LU^킝_I,rʦRNhɓHqcιISFYfo /\sO !x_wa|�CG3v^:}�wh4h[gx-%INI [?ã99evB?=<OcGqN %x瑨M.Gv=g& [4KO>,Gt1cs LÙ/fsu )\Yc]xOb+y#z^4λ<VdxbyiLweѵ 9XS ,ڢdq#[gGZ4sוy&? v)ܫ\>ܴNB6{Or{|>/r s<T?h6Q,JUZG?U IΒ)gF3r#)$@MŤ;-C4|z^"{ ]HE?Z{_d!5Rn B'=1qxL9v*@ LQ=RsU'o@lb\VpyC&IΐGFk%ɎJ- GLKνla')ezB gU'R<.]bax~?{Y^ӫ=?4NV޸@sVxJxi6pl2sտ~.ĕK[vOQ#L%[4q5x./#;<ʆtq *WD/M�U/I˴uPel~!HBr bߞ݇�-"SφTO@?-!٥87 ^+^ VHk.ĮY+?NE,l7afBtֶiy~gySPɉ`q-B !$�W VLKd-,ip\T!e=xE3fun zrư 'M҉9 8`Ҟ'=�udBFv/@];oOϝ !s 3#'Q=�Y.HӨxc}#trԇ$M#BBi 㣵q^+*L#48ӡ:_?׻ ˭|=tΉ]_ 1ep\49 u>d- i8j;%srp|ZAіy&j7L=B$os*/i\(T(ZNW#!׷O: aj*L] t[&Gvy 瞨1.!G@4+B,hֶ[Q)ʠ0E,`:B|1"ϙ/\`t({ϏND _'Zg> ֞p#z- -MN\v$0l{TDmg)tC`=f#E;okVD(܉`s'{6Z; /2m\ T? ~\͋f> kZB{{,6w2٭ͼB4yn;#V/�O GFhG 6w2q;-|@v2t[d=!BWA"Q!r {Hug&o͟M*Z~Is|mۇ{܁!͝#XV`[[BYMS@7wB!2�6�!6^ybhU=Sp.`pa8t6nRANϹ>Cԍ`lVK)GH%!"d) !2k EH5?0CH[[#z:]E`KxСNwG0phrS vӳ{(nӂc7; vgE GT 1In$; D(? ˎ `G>y=3GH�!$z֎x>קqKD$ԃ" ja/)7 ["*zO~H#!bs}<NZ# ^}I((Q !<B(ͤ8>Lj6� $9d! (Cqr|G #bF%ǐ iTA 82DW; A{*;Fo-tHBF&� 8q&Zy f}3eq!]^y~ù/qLP_`]Jyd0 #BlEG?4hp3A9A> L B$<? 2i2YEA eF.8j&( 3Q!>8ZdX74A@|&'M*o�X(`Tؔ=ij&IeRj2)T05ˌ#sʌ!nk<bВǻz VL N2)q{y Q E@(JG``qD '{GSAbW n_D9d=B.*AY&Bu fRx~!T!2t1E v FL\2�W"B<6<ߗISK?b}Wb+yҁd4#DzxdnL0"@Y<IG5U<_G^;_<Qp~B]<P͖TwnQ\ʟhelIeI"dAaכp%</X'dPG*7J뱍ϛtK _UY:7ufePCG ;2~q[yMZe(q.쵤tʅ+)~唡[ve:ѩFyU(v(8 ldɸhI(]DHm*O+^+[8:`s ,.@O)d䆊lu{Fm \ra$[)ʫ<MYXONzP@2_QX|BBHNyrs%йd0[hfD3Z3B.ZN9=јOS^Vp*]nӝ[m| B-8&*Of%ρcc>o1*ŬcdtqBH܊}=8U* [�lK|q Tdieg!ϚB)BN*D֑Ƨ4وA&V0c5UN\Ն:빉P!߄5{0wx=8rE(2m~FzLpeX`m#Hb/{Q8;iS=柋 H+UyK ^Ø?,kYK[< Z*9BDo7VT)g8ydYy Sfӗp02 lheիI@> ?i<0Q6 u O;60M~dSU?\PњVgnBHҺ{7*Gk??Mv~[bS Io{+$n,|_g)1Bpegr"oah}^(L΍s{qiv'B(eR}oqB%� B0m?` b?8T7TPoP G֢nREƄ/lnotۀ}Fwf*[4bBC�%]i7 \_#:4`<Fpe`j\_Sd~>wBZWR)l'n$)a PbeO8k*?#`G #3A*3A0][t}'lxcpд@뫂#́G 6|8T3AT4/tk�;u}cI\_񔙷[/z[BԀMq`Fj xBc�ۚ6MQJHr= 7j d�`t}!8G/|S<+KB$n�iTJ`ŧTquzq\Y.CG1&J.GH]<+qPV<ߩzq]>87X! ["vm}bE֓A�ok FD\2A ^;!BO4mv<b|<1>Fp 5hD >!7;Oy~7N| QSDU!IaэFd}l#l>\ܞ`O&M{؄<޷pP#L-c7\@Owwz2ݞQ,d[*?auv#.QhTZZ$n!+)B K!&3;;;pgd{cS _U*3fWw7V·ْu+QTaw'v#WHmxfIDE,<$;B_E4nǒ뫴9Ի>+3;k,3[C@LNxC(952'B|fEwV}vMR^8lɸ?uf*w}ucQ!f"wΫ&¹]_(ĝ0@�'?[x-<_##]xLWrDH{;ie/֜qEoSvN SyY#۲EgTAQ&O bǣK@()*cÙATPw~ȥR<9_`/i |nOz]_ɢO9GE)\\_|=8S;< F`U^ h am2ex~|.nu~<+ZVO*YG4&t}C>e`YTؔ$z-$ٽ2 ڃ庮}6 P5B1y_pW>:gד= r}:) ڎ-ǎO{:*1-$g}VX]&7wx<x42Pv0 O_s.dwi_7WчrBlX⠴v\ίYN=\]7X@p~Bp*354M#\, $_5k@UHZ+,<S;a{)avQ+I3ji+ e*N@b[U{TY9ECHt;]ɫ+ڮXW<!+ӓop} H\,[ b4B(D!tC U!BA sk'>F:A:`+S,lX`qI+Y L'U NB\#?`݁d v٩6l !y B:d Y!ͼط Lh|--n"׆ܽECR:v#'_(c9S+4>0kۏap)#K#S w842AwL^ ܝaqzmrڸ1Ϗ*ZYXѠTyݒ .GDT+$/&ݒ L0SRpICD*UP%IrDvmv>cUthڒi(/s0onE\Tnqy^3.[9?rxk|\Xp4rYD~oUxz-thzY;?atn-HqRB>L?+B&<?CE˖/~jT4r/2`7|NqjĠLFNn_;2@9{.)$PLk个MHD7A? ;.nb.h+'3"팴Vq@y=;:޻`ijށğgN T AFB՞\ a=_5?Ss>+4�6TDB*)BM?\~KA߅إ*�jDz贺2iz VDuvn&!D{k!yX~"v,npD(|94!O|/El4kޠ!D:w]FLyߡ@]_>l: cO7\=x9lA.+A!3RD܀[5JDd!# +GL;#Q)<B(Eeb5vNt}.Q ބ/C@!h(pms*z$bj*CvwO=C $YU0:E/#BBI2<�[e<aÓdT@ )|HiCLFl96qQQ Ȁe!G($Y\ITwʓ$\!n'&B$EHFQ DSTR^J5"4BbvN O.o O!e&txrŠip3yaT 2|&8#Ϗv΍İ(!8 dLh? I ',8v>OQ-8<{h Xf߇ 1+<: j/5dWLD<Ab\7V;<Dd:S+!P9'P.qt>HrCH �!L)|�iP2cͯk*/#92A*b&iCHB|;,uW s6l^d@ˤ�PrPS%L]&0HQ`ba(a. B�q\�Yq.%J\%`p fG,q ]_.HR%8}=SWDC2iFhH !\"�s}H4Xt<#DzPCy@0B2H (<?Gd Bcj <*HpIU&y~J<ٗJ$#'lGZFiK|{ޜ_CʓdOQ;?PjoH[OE0Jp<y^6oS\M_>hbXW[˒ WO:om~ 孟UHp{ &E&**c/8O^]Y$FBŤ<}݂'ѢbΓpÜ^60l�O4ש0|*i?; Lnsl\ ~U ^l<bbObYDIYr3<V{ T!g8- !%jN:ʹg"dbכ )#Obc&+]_ M/M$]닰>!?2*/ 䌽NTDHR< dX9/*HB YCHg|%>OpW"B)Њg+H˭|VA5;2ͬd^9 ֱ믷'B7С6\.ӉϿ\P\-,t&!ް$N<U/!4t ^ƞ{l9wB۰fI-,~۫ܘ+ ls{p̟ddX=W~7<Zvah:e]E6毯;8љڑkG61vL6Mf !<cW*E JaddžRk+WC8񍣿fZmT@~ _U6wUsMeK0w0W@t6mOQ1]in/ixlB=!ԧ\ v&�j15ر$oi`<\n[K6H `!#ysQ*)RÉN=;ӼdBPi!ɏESlS܍v[@"k! qFcH&}Ps{؍Y`q0#; 5"'7msn# eMα8G(;(BnvI�=B$o�vf@0sߧel6 &jn|E&GHKBυw>T/"pE&H7:#d`eH=L}f]D. уD< T#v 8ۺT>]m-D`*P䃣ygZq']E`wYjxLmqhru8'FQLwA1 s!BgBB&8jnEl~ʂ#Ii%8ƪܒ)&πcr I[;9 ti2fp}au7/ۯL 4 #Hu5LU q5痮@;3~X7b5κJCBGPOBL #>gZ<r%>yWπO<! O$DH!t仂snh/B<(|6r3l{l #$#BN/+, !\0c.Ȅ!^LY =Lfb'*ux/{72lDy*@22n2>E{2-p"qPellbNTeV\q@H1msqsTd*G(řZnat)]sS/U~08*yׅu2k\_.v7`}\#L4r:k |ͳ#V "B2 pBhD:HdqEN )Y+1;ƨkvS3\=iNl$́gwM`/߯<F�+b \v Y;?BL fFN"ؕzJAF<?ش̖_SUdC4ms>$nLcoZGUaYqՙ w}c[zܝۻ,,cPa@ir|Z&Z*qդ(})8vF̓K;rD-LKḝq5t뀽2IKh,8 V*lEpӨNt SݖI%]j^@d'jK(ͤfŬmƊ);`A]+q�^]&87WK,8`Xeˆ<g~ pѡD9_d+??Y2ANr'De}@=,FZ q?~܏5=~܏q?~܏q?_cm׶5Nj9npC;BDŽD6 k$^cWU$9&qCtg'X mu n~ql)?}Kd =H&3=vF$"t h>A'͏y[ù-=^l]@iqCjJ' r "!j"Tpk HuBw6y#F?mlG[3p}btVF·z ns:dۃGH7ew}PAmmmt<zDT+r}B(C`RoH핧~` !w }o]_sz`tzݝ&UۧngLյ/)GH%!"$'ش63NssH5?0CH[O9 Q P Q vyp<PCI`HXPl4R;ೀ "uÆ#ɸƞC$; tt:`B!]?�V8l 9JC=@\ !F" ؊/)z(*oa�:6k*ۮY~!SxxxB>61\QܥQh@Kb\SG`C%Pŷ8@H azvd^Q~܆xHdLLGV/6q12:*GF>dP!&vE;FAn`}B&QYM6IT,w8@>83A·]pg-e<|~\Abbו8B&8-qt?J!W"\_KMM{;oI훊 <F!B3AۭO~fMn5B X&̓cW&uR9ʺx_.r*=B$ZAY&uj${l:j8W۩_شnh&ENgxm_#ILJYт+df!إ̵*3(ZE0tma~*b@M\GJLE0G2ņ; n_D9d=B.*AY&}Hp}lGLJiy;/yP[! #&f R"!ˤ)إPs鲿 -Fcj9BG'!I&#B8 ̃Y o `) ~_G^y0?[Qy4jl8`6+O ]X? ؒNGFY(iu&\ ߇;ݯΌv8 xHF z=yNV@2CM]Y20P!ѕ k**GIsa%V.\u؀4FH :3Ttˮ {Z7:†NQeʆ N�*duۦ8Y2.`JRw�SWֆ=壳XrkK9E Yy+7jUd~* S$HT^nr{�O,ZBr:4Dȓ+9%'-LhƝ^k&X:E+r}ש_;v״'i{ʋJNqBT? }�KSqs}|?CȳDɽ"6l܊[Y"}r}5bTY5+8- xV voE=a+UyMso>8Q,m[ȳPy(vSGĮ5u) ~6CPIq <cy0Wzn"xDH<YS<awЕ+BQEPS\}˘e-GŎd0?DN]iP%jRʼnpJ`!fB޶췦8Emvff-׷eP5[@dl s{ab !n2 REg9鎪 W]xWeBl6&?BnU~=za�tng5lTy2I'Imɏ_a~ *7(@򡍛}+qe@EkZUB6tOmBT֏ >bkq >Ӟ<[@ܬ^?t~d{05X vqqTGT YH!VG԰SKTH8-¹4s h#ֽ#W.`HX&viq !4AuditO 9S_WEl4'P yܣ;H#6&ں[TV.gnjTs{!WyFFgIZ6H [ [4 Ix>!6!4:Neni2`瀍HAB+y !\_ j.0AGHky~O'K$)CG%BTR aaX.kx;Y&{s7 /d>8ܢPSـp6Q)!X+h*iTBp\FS*ϐ ҙLPCHQt}'ۺ�y$'rwx_>Is_\wo 􉚩q$\_�}n\t0DH Yp!][9œ>m&wt.#L0#< OS3~j fҝ�اQ R``-FE}X�]VrͮTDE_ !ų9 |ꃝK3?IqN1YqOUA I ϫ9`g%)2&Xy.^ۏ `ವHzAhPF!FϷ2sL<+T<_2"&N RN]I] ̓`Cf2zo|w~~>Ra& }Z 5�3נ<h& 3zboٳ Bv +|T( l&3/>E&H<Byy$g]36w ع I3EQɯ],>@Jئ]vtReȱ'ji+|h !αQ0BȊoDH$K{:䝮5GFE|]P<! v% qRҳLl :E?4B(D!tC UҤ!T(A|Pk'>F:A:`#Z+`pQe{K]Hohe:]pEVʾ!$tdEsNYtek5c#Nf=B:ơ} Bʴ2H8DD !<{ṁ`tFO> & 8 Q.8(sV`-9 i| ֶ=�1ב ?LW�wgX^>742QY++*/[2JTxd0[2APy x*\ 4i(@ŚP8.q\O%kC. 59_[!-Aeȓ -.ϋ`74bq+WX.a~]>.q,Q8h9 \obC/Y[%%3kIֺ!}$VLx~-y_0<L+fi_dn-~܏q?~܏q?~܏q?~܏ D~~tm?iq _ݴkS4t?:mݓPǺ)Qn>?ئ<O&uE9͒Ezl| 8p8띢M�ͫrḟf3kzTZu3OL_r*m}l zd^c*Rחw_ /E?M[8vKk۬*%N{f sb:[- (/mv:R,"d�CCÒ7b-m ƊFtpo4 *L-N"+8-j,-Y\h~6 F�Ω+X5/ /R2RWQl{y^f$\t6ZWw6 v+qm8=햶hΞ=,'f.Wܑܑx #&2I鶊-ORח r"Ts׷;u'_B ?U+8vĄf �*:;LYOgv+T&M xk+T.ʌyFǁbA%~[ͯ|/7^ЫWxiDEH1!K/~?U\x2 %\#~RDK89̭E\&^NE8{Y 89Q^B� tltK_舗IμKT"ADQ\¹&cW 8htޕag!ݕvS,8*[q$2œ= xUXh QX & 3˥l ^mEcw>V`rJ- 01~}X~Pl4mм$©B<"@ɽ mE3*_n3pr{Nފw]u+-BVIT؏@Z%OH< 5fNjPm*vNvsxl4:|aeW%T)*8q=6X >8xΓ̇?G 9u]N xPN4ߞҝ0i?; o9OWwÙl<bbObk)n&gUu+Qu*3֕F$"$p.O�*y}_o&dN?EW= OKXw}E,|j"4U4X\p3ZCa7jw}C~d\U.\_@{]_#dX9/*HB YCHg|В}'8B/^K^\>޾o僗}H^]^|"+XL >�z&:p)NQt챏b^y>$L5<i }O?wuFu\$4 5|#˅Ee<`4K}~`F5*Ojҕ9].SO�>kBB{4,8<t N O=xЗ/Dm|CtJm_Lo_mFM":x1xO. 7k/~E/>AW |k_^l9^B/kNa>/.k^fxQ~z>N _ 6OAbc Tl;qaJB"I-\-|Y3׉Zip]tN{,Wh :is2fW{ ~C`!Kʇ(KUaӟWj Bp7>Ybvic8\I-:yD y"  $r(8NTn`i隀�nMbW[X:]M} G񂕜fCH$t6fx!KEe tj |!**ώΩ@.^dz*U5?n0`7#}<(_hE<^ZDZ?sj/'<u?Pd.2ŝ[(p2AU7{CT0_>Q]91#$pRe0$>$êP{w\P0 Pq>Ғ Uj7p}Xܤđu}]|/SGӱ=ox~ }ꀽwkb3YU*v,O=8\&=n%*QQɞTGKקbX%ŦW?޷^|vyˋxL/L.G-Q`bgװ:e6+|}e}}ND|T -K!uzp (>CV!C6b/LD"t¦;9c}Se<<єhD_zr-16PNM}] /$W g9�۫:$̲]?I~z;5/W0UGYљ7`Hw-ETrcn`7M_%cxY0e+ o~7OP))Tp܈4:ބs@VMv03}?X٩b'*4.?^PM]-|,]iTa<vwzݛ*N= �T^P+&D*1 **p)*O�-"SA=U(řZna GrLrd) !, d7\oFVh}Y;T7Y`?7o 9,EH!9d Њw\m.gqEN )Y+"%Yf$e+bO s`]>p&+!= g�Bʾ!dd$GzX;oOϝ !s 3#'KJ= MrlZfK/)*x![~9Sf7 Q1@Z7y�0,NLj~Eor+_�sb{ח%ep *,r(MBYC+Z%�/Ψyp`s}G.VPe /5q5t뀽2IKh,8 V*lE<?y|O/_|7d\.{zxxALL&Ə<>>ҁ7 nXzkzf1aPv#"Hok/|Lh`cH{dnu4އ0EHFC46K2 `).ù;\)H#9Õ\ $ɱm̼>@i|deG_=cHet� `TꃙڿD7n}?>z glFEX魇|?XkO8V~?~܏q?~܏q?~z#ɇɛoȻo=r{{'y<Fizڈ6yG lh-Ex>`˙."2,/ ݶfC&17.:a[rxD*1K|ߐ XK`h->4|$lLt!AtE.Ц|H9>G͹:b&̻E]S? %*ÅkD>!9Li. þ +E .>8;Gs>{bRd#=h *.BL[ _хQ on].|y^=<zplSG>�n<橭O]0+ɒ8?w0Vɖ a}*wb#m�&7eR޵r pܩS|_kʌښZ|uB.)`j_{]͝RbKmݯtr4Mg'uE8wnθ۵*Ӆ"<8m*wT<bpYS{s'B0 sT;]!5d:3d!o9icx3Vy27EJei*L&tKfI>24GH[sg-\Epb=;U!X8@k${R=s'caxT U<??Fv8Xdu<i4jeTGÉ)<r0UM -?v`+ѣe$p heg%H+)R| )kLj\ca v= L#'2AJxXNhzׇO^99 濝~s O>�I !i%W&aHO`wK <]D|_ͧHA\?,H4}k]`w~%mox@"o¼c[p6ƒ9z|Mq|6sBD$-IY{?.DLlh&:\&o'M)iLJShc8§pcO./ӕάQ")&,�EGX+m1VwA\,p 3oqYʑB~;x: Z4޷c߸$ِ*#V̶=$Sq &Lu;"}|!?/ 5QGt_j ^/DD9~!nżWXoVݙ/mr!60_6jwXX? DXD.<҅X.C yŨI!C8o|w~~- 7|Tm|/Y(lDyHz|vfi\r]X9bL5TvtF9Oq"넟<~2찍ϛt:qJZM`c#B$n2jV^SV9:x.65e,jsPڒi胮yR# lw' \ۦ8Y2.`JRw{ПrWG*W6qô֭<RDBVAnȶ7ިWT.Ldw["Sy痃T<%Be�Ɉ'x~ABo)th'7Wr K#O? ͸k ShS:kDc>m|OyZé<Nǖsw٨:ϟ!قc^ľOF !-12 t 8^!G*ع[o([o?~/|7f޶/DtH^m|hۤu9 #w&QÐ raއk�f&lWrw<u +v_-roIJNK�v#]~ݭ8 gسωrQh%���IDATOT7Hp�n0PR!04xv�ptx&$P> EcP@{2Z_]gZt&`e[]!ֿԒmVR\B񸉐 l%Gǽ0 ].-}s,|c~ګM7zc{hAD1Wo>_ī?_[cm[."׻n.P'OzyG> gzO_yIAXxP>޸.0ω"'z]o@ӿQ/z<eU+۴nGHN]R bv{T\)ȧ*Oi'Щh8?W97Sao~] !4:dko!i3YZ5no%3?2:)`}%IsY#gCaYCDHqBv;CH`׷ʷmLbf>11MWL nɷrqOyszBzMco낝I2HrB7J*O\M\_Z7QኴhLZxdR7Eπ vY&)e ;e ઎?QLN憮o:2e)F`2u&~r *LrZrͮo1*Xt}<Oƹ'\_+3Ai1R% b5"Rm$yEe�t!8N P@n ,~#t@,_BU`fm!Ӌ ]?y|Hm l`&Ѥדryc@ۆD#0DCݟDmi|9\.t9)لH)H۟&{^|~hyxkC}ۅ.\69vtڀ'QBF̄2`% _X ˱eniNN?2HJ7=}\.2f_Kdه`5' ZTM'=eG/Gx_"$+ Sp}l^5aT2xP򧛒p<RΙq\k\Nڭ:?|~|paBVUw?e5؂Ugl~iBPLƴvf`0 jN8ͫ#~_GzU۶u1P͞y4Cw69_ҕ>r}񀵫$&o |eMfk3g^|Jܠq+Byy$PZZ)z9\&;W!iq�LBȀ_/v!RUPV?b6ռVT080ҞPI;1fJz,=w[L]sdNT N];`)Y&v?$6} ""HNkRL:)h]eWmMacN@r'BTX逍|jE ,. v%[#ʾȵ u+se_Hu]2عg,5ڍB'gA7b߂2- 0wƒ׶|AJn$`Ҁ Bc2gj֒Dž5|nX&HTq'g<;\aLx~TaŊKLp="'<?^$y1 LTg!8#MJ%>P&09fv$GKd׆`']*j])kr;>)}r0!,.ۃFٔq0n{x 1K۽V7=87]M;tM$d _r}c—co~L>S0e/]~a0[^[Jna}j;XXw x/gcV#7_ro6zQ\JW o_.�0o-GˎP沚r�ND!|.| /]CCυ 'ڍmnpDo lpա? nOOBD&||?~g?Hr*@8 q?~܏q?~܏q?~ !zEJ.^l.>Ka@`XcTF:%"Ӎ/=1L޷6ecԱ#"o vpDpTOc\d#XΨ[~NC}8gö+BOa_r= d$h,Kf(m믅4Sq8KWe ~?{ 2P)gF)mJPo]:N=;S$ lAT¹�!=7CB)8QqJka!d7qU?~t$[/mvl 3cN4絵ø'q{=FDҖ$>XA:ҷ NroLaN\N<G7-XmوyD0 ݟUá2бXF`R?6`\OaQ!"{fD`dπ (8n/ȳc?./\MG[XӚ MĆ @#cm;v9^'37qBYwطпiF?=B`ֽwd6E"!DYW`'Nm *̚c#/]leC#BLxCMdNv^"D @ 7  -b&ls: cO3AivS1c澩ڬNAp!/b" B}e=׷9q!%4{آC նN"�{HB)BHnޢNpAؚy!ҶPa#; nFI4R^?L2xxfr쀡j0LDAs2nV*w~;UQ y>cq@\rt g貏n-KF^I-9Z}<߸Qe`IJfjG|I}q36ic!}5CC) NE( g4 3Өa-9'B+ĺy2<X%\+878+) H 4LQkμ-}=Z�ޛZ}<@ޚEe# 2@ۜDUvJs}]_ 汐 R &=y^uקg�ꄍ"B3Ba != 4qٍX^]u"dIn2A $S D3K SТqI LGOVC&-U6dVXX[�G#(3#$v<F\/t6zx9F7i$Z7b=7捏 RQe]7((^OQ7 $" p"?}"|r(˻ WUo4 mf.sa]Rw^/AӚm^wvVknLƴm;Dd||,'*ps;g?jW=O۳�r)?j_v6f&DXE6x}7S*jo~ qS\ovk7mr}#GOL FrD8MlnQÏeRJn.M_ó虴m(pZ DEL2(i>`x!bU,M\؏y ҳ;W4i#sز &r}#k呡\=7bW4(&Pc T^]B7T|U~VaU^]T�D<Ah%Q`:6̭ۡ :LPLh=Bx FcBr�!y#!|~ ʺ)Ѝ 6@N3^c%~x4tĢP Q:$ cÆcMeSaν0#rvUpt2aUr { ]j9B볪B v9Z7 D ncDH,!6G,@Bz/t': T 'Q@8(S' *6 YĵVlgŁC="d*ۡy"e|lax Sι6Js^eyW|Gc]_w}V}jf1ͧ�!:@Ԃ׹GRQ5BZr?�>T BNBk\!SP>0%]<>[]_b+? j=d5q�w}yXG]_E_<Q@ eJ?rmoR 3A~K(B h<cCvg]_@H\_ vV2FCSxǂ~L:!Y2blC,z0%^�>BBLC'BU44I)818e . zF ʹ>"Dԗ9u.߀ߪ 6EHVEҦ=1e#=2 &L2Tv{n$w"KkwC7g=P>f>6˱1N* $bwb/DnÛ#&f֢Bis\|b(U.+̝4CC1uxބ7R~ڀMQ[]hG@BD4ڣ;ڠ6t5f"ژJd֐eȖ3F_%/ DzM@bʼ5y7X/N"WJ?ؒO.Oyn+m$Hs%?7(L.L[O:EyxxE2 vaΦ%D1e04cZPtk`kEWws{u<7=q�L*'|]@y4 3֋Hn,h<%&nP& 䅛hsQ">!jtF)GQ61 B9Kvd ?o%Ry&P0&*E Ʃ417Ao3 rC >wbn$CM, d@N7#2AbM@a8aK4�PQ&oivئ;Fse*O`aq#+kC!*+;nB;So$9H2Gf٣!DK)Е1%D_;\}>0)494&*u}X :ڠr>X`B R"K*O 5!P9`隖Bx !Bh)G�Bd%N ٫-ukQltY\CňCT!XV 7VP>0N?/X\C9s'r0遍sZF}`x";G @\pH|xt{D|,x7y>`# %6S$.>:gԉ2p@Q"l#QI؏ɱ*6 C=B?SDz&H7:#Q{\=Tp}7ɤ04 w`>dW+Ҩ.9ɜ >a5cUN-8R5;P]H>sD ϺIpú3LPP/7⣺BGHH\Egn, Ǡԕ2CH1; 2qp#\\ #P:86G )}"h +bbGy([?n_nݧ M%kٝv?>C,Ў|ls@| (K2G1 $¿o|ݮ0V le6h6CwgacH!}B~v|/_D9ɯؗ0R]yFG(voޖMUo.>Ls*]1AHBēeMZ16ۣQQ+/ZP9GEz4:% (řZnav!y;^P`p(UnϽyׅu2k\_.v7`}\#L4`<9ơ""HNkR}!!b]",ip\T!e=x]un Brư 'M҉9 8`Ҟgt=�Fʾ!dd$e(!p~y`:GH03rĮS 4*e4"X_'+i筜#8!nvӈeh|sp 8 2 tΤW3@e` \JPC2ʟV#&-@K3j\27\ߑ.'mg8kKM~cp\:`/ L?*%By?1[r}+Ϗ?~?y{o>B^>lJ.B"Ѿ:PI/G˅ۅyA6%&.nm?M({\u"sdD4|}k괭�х/BLL6~)iBLt9~i>l`"w~SK|_ڟLEf:y~]hx+=!=9^ҟy1@x ,Y>a:ާg]]tQeDgZ(^k}]e!AWkpQw x+[xf݃ʒ.ruF{E6Ms?%?3_)I4 ֞p#z]M:FA5E]v3Kr?&TFQ* .C^S#?/1j%4eиlѫj\[6UVKl?kmJ ~XCȳr7b]H~P͛N[{mBYA-H죿k{}9ap 3T>'/>F*�B p!4u߻O>+׭C-P7k^3JS>-M&t r3h1loRҪhNʘV|1A z bepz}qd^hɕ:[;<S++~_q<pZb'!#Fa@O"<LPL0 "=YV`FW$Mj.,f?MZ*Dkqv~-1ap2\_ŽD`>KF1"b+TVLtNFEI9m/,ۇP=DHxR ]tsA>>7o$ٱGb>7}|޸W~|?0] +Mpl-%Ǯѻ`[(墍a& ώmO"V6''G+:6S=bp[R'0> wXgk\, _\b3߲" !I$Xctzjb݃tN$ JE q !킲kК×>9v=SršXbu;轂*FǮݶBL '%(ߐnN Lҽ3$$|oFBjk":6b{~ @|vƧ �'^ z(vQc[%m).Fe}ᬸB+2Nps /Ύ *#3 TLL7;8k#hٙj桮/v\*22,7x*T~<^إ VpKzdW1h:6{I0zf^54F? EEt.}<@#cd)aKdTVGorHZH&;P9DMIo!%{wI=EGCxLTvbsr 4 ⻉a*vܞ+yh^!_ʉBg+ץ)hHReI4k>Q9gˡ8o<.]Q=|߻vl._'gq"7'/p(?1Ӟ#'!d]|dZCMswLUh*'ZP1q*S@Ep <X>wS#>n罝#Ο% ˤ_�בG/32˂]LI\ypzggsOFOC$ htwJre@ ir'X@z%EK3ie,PI|}.Dv*{a3r?ھY M*vC, olL #|o#XykJz?bjג7oYaA=inHL>OK}L.7&[$\oo6O65ω[&?MhtHy1[ty4(Dk35>E{"uٚl?'xCrӥ[Qk%H\B_ɒ[w.>_(\G|d1dX b\ _\ &|uSaU3XE8tLYYBh}no3UDR-ݽ?I하x 7j#C2O͍ř  N#)j;;^E[QQ[fk*~SAM Xć O6A6<k8x tDׁ!qh^qrUJ _ q@ ~ Ql<!: Q}Jl�H}8Њ=Wf97 Q{ s!2o `ㄈkcJ4"3T O.8W<x"-2."K b?8u π6q�$ӈI 7l IPMy v;ΓBUonCd _R݌Sv&]ۀMx~Vo<҉E@8^ɳ}}AH 4BHbjK`ts}6}YJ1Ϩe^l�L"6BpdLL0a+0jY~wjp攈v!! */xt#LB !y&H`'K ϴyzh 88$,룉{4xSpGyB8"DӨLW8[tȴ\>ˬ'x_G'H q#j D 3l$`T~bABv wW&l,c!LU l3M%/[xLDql׏ 1ű~0SP[n|2嵧]azPJ3%[z\ҏL<Gna{>T Hrr"#ÛC ь 5 ~) *= twsݥ\#h *K|19sƊwdPD"jx66ư0 fkpgf2Ȍ){nƳuw)hECzS᫹MHAYLFU V,wQ&?ES-�R~'z(?t!e(@ ";xU|C|c'ɁDAB*Hs!4#BtFy6b Ahj{n4m3CBbژ&t@%(&Ҷ=c\*NX%;5'fτ=!2 5�!EO**4 b~̇]*[(*^Ey kq*8t ƥ? μ2r$i�&多A#~CUpT`;r*9@ -8j̕>/$H#J|-s2B BM4VsXC@$cּՑ@7'N} a av<ќ8.[!U@E;G,86 EjY!IC.IpO�S vy[$>^@ո ӂ]t<X!6ϷWbF[sN"u^9o# ﰏ:x$D5�!3yh!E�H`|W2PBB%rP:8 F5\ Hw}E&胣GH_+H]]�]_IǐF%&|F1�- d܈s}Q=_;L]E i}�W#xh\p<Lp}>^v}*;TdR jo 􉚩!WG:o fRndh(8R48s9Ļ>")"G`t}!8G- }2 !WiҊ3)mg"RUf"rM/[Լ/; j{H|H9o'<6S>?I&÷<rh8uxF1=MS ].9-B/dau3ius_^Op9/a5[ۡa#"nm@>19m>m 1C^ 6ܼFL׿_o|S>CV?nH@iY)z#.."^!'6 U,d;K& +쪜m>~#g^|_Q8(u#Byy$k$\w ع Isg*2͆?i2T1ŶG=-S!H c -SXFb3"+,=wgQsciK`[\_,%=Ķ ~EfN+;EE"{u!RкO33:TډO4m"ѹNȧ \T`W5ZNP [fqQ/Fq. poy0A>R;//oB:ơ} Bʴ2H !<{ṁ`tFO> & 8 Q.8(sV`-9 i| gבȻ5|د?y8*d V/V4(U^r}d < $ɋ` ed< T&iP*5a>qz-]w_uthx7~{oˍ/ďL"Fty ӣ<&у,x틀y9=C䲛wET2"bGGivS:"D8aLf孅̏Fa3ʉB0(Ab܌_~ϼ >}p{[y+Z2iX9Yɶaވ.1:].ZwZK~ ażwq.D~ WU+,|$x2.XYj?BywB9:(3]@x Gi2Rw!+0 db l A<f ].x|O3EJi:P7~Mv-yq3h-`=0<�s_fåx^e;JE-lG._DHھN wmso-ZEEjݚ zt%L-wF>o?@u[̪5h!^偉TgI Gl{԰0NKyi+/9V>|@XuQM !~L_z߼N~ci?�mF6hB@ cF /-P;`#{""E1T,.ŭ3*/R B=?oIz|\s<ߙ9G?Ȓ컽gts?P5֩;O2VٷG >uH3A:m]ߍCB.7u w$IS)j=Tv >0w}i|_ P]_ߣ΂< 4�_g]y,|wv0{"؝*qO(Bbp2O*9w !$g41^/_.]D.PFO EHdۇTD!^$mO@ٓ4ah˖]P>Ӹs҅m@rlO᣶q (=7X#nrbwYzUz6F�iF-O)?EO;POH. S|J&cD$b8rF$—##e -n~iF&[WNá# ]H@&O;),I,tݒD|xE&,B,,,.OÔ.cR(R wvd&@Up8ך EQI B\8`³LF1\qas 1(w<͑Pvb:;u興5=UF5ftLt ũXjgy#B?hTn^XBO:QT~O<hnZgG#B {winOaP^3rlIO֝ZFc A)?f֫~Ef%*b5**9\O`%ɸՂس̙/ [Y a xn4̇ Mğz7&T~:!zfιD;k+j7XW]{A.#T8ާ?}&J w D3f;/^*gsY'盩cqnDzϪlƅVXFIjwJP _7~ P_OB O0Vl 4BOrW>mؾLUS()SYaSJ*ƛfDB? c%s}LIc cI>BY<vQZ3{㭷]k]dIPߦyj#̀ 2ʆfߢ#OVPީ<q}xg>˗}Ib蓲!k7^ny㏾~n%[ǰx٩OƸ<d$8*CpZҤPp-țЭ@Ddkm:sǵ] �Dy./UX.1}>S{te '|?4oFtBnngO/+?n|,~>z)!,XZJ>g3}Wc6)#f9]װzu.Ssab_3ށ`YFȲ i8J2*_%FH/=;e+"�f`iBraBSڱхA ?SF :Su[ZEmH~!E'>d$Z'FĽdsQ CQ\jI m^i2kkz>\vw zhL@}1]p<՟K?BT-~ |=jkōr gL{Ё 鳀Mr/9.]ua�=B^ݼ^+bO XE: -ɻ]i�~ݕl˗9IYBcD 47p~ٲwhp< a"|sq}î1k C|x%?o¹>6F*Νef9jаQ{@Ll8=oPb,z*o8|AA?D%8CD �Dˉ`K~Z!208@%pLHږ}O=" ^T_xI[LG5Ǥ!?Qc'8S (jtNg:T! aeOB#1mg H{+*wHBV9s}W>uI;B\_-Dv(>W#i[??T?2 "J5BrD?lXDCH�\a ZAL]_ ڣow}D?}gիҁx m;Ұ^ܟ|*")~_vB@kԙ`9;F H:E GS {Ud0?`p`Yk\/ė5hhch 3o.KdE2 qUIz0uz/qڊopJw"]LԁvL]+>CYuׄ!̴1 ,b)Ǥ6bDquhPLWkNDjө$wbn>؁:>^wg%7Tr= v}Wvg#�R$,,a[6̻5}͚۬K7{:ܢpTFBHlzs(4Q sZIRz\< SQ.Ȩ[%*a` @#!P S:5)MƻJ&?rYR kXkUL=X*!&%9v"TT|nD5Wrn,c8R؃N ujYy1LhV@9>cN*TbE~7kUv6ٮ5r*@ȱHՓO9ȡVh0[$;02MO"h][ۀVL {I&*JJ>l#! }Mɟ̗cm(! seA2bâ͕uiHmuQ۞ BaQ0 j^9BG̓@4@>; b%|la^-Rhsi>x8N!,Dưְ)A1B7 5 !3` 19*!Bh){"ct\BF]5#Okfl8gCVtH㥯:|C i[w� AxB,8ZSKb,N 7&jdp.9 }u,N⃝ # G\pHqQ"c o[]Y!aur6x>rD4#1YdQ{4 1y $ $@2) OfdMth CB(Cw}}&G]eY&%.^f]DF3Av> $fq]GR_2]f2l-8KUA`c;g X">3IpOU]a#dj zs}GP Z1ҧ1FҡQ$ 9 O2ipAp3!Lp=8rAB(e[ \ <B\]T[[7s}>$!yTZ!7:uXu:,: Ѯoޭ ; = 3 !Yg`| ۮ<) O>XManqrmv[J�}B?ݣքRm@gt߲ȭ2хeꥹSX'|K=}Bv&`daZR8WXPd&rE@AWpFbZm_}ߔB,Bh5)`'˜r%GemIB DVY{3V*lZIy[+؀_5w�M:~B!G˰Ԡ#%6TJcwP!�rX�GKz_@1j (kyTwQg63I rv@%HPg>Wqf!(aX2T:{�?! l`${`w`RrCoq7A/CHG!R!? iIds}vĺAF_ju8{T 9?�"6 ZARHѭ !B#D CH,$BXD?B B .{ UP(PС:8t:""@(?`/)iE^ث@] 6:&p,lFwtI%!; ] ."z�B!^!"1g`!ʎ=B$ >!0#D VQ13:`IA&y8y~]ꋨ2AzFY2Yt qsV]&Hr�nBB!z2 !!8/GFL*emH, 2.8iTb jIeTEG?9"%A28 *@VTe,8TחKMJ%>8:`>G1D[ZF, wN@ncePvI2A52!c@.8BWu!V.rA^?%+"J)P+(ˤ}kc`c dODm2b6`t*J'}1!IbC;b\ֱhl"F(z7-`oEKKy|˺ u?ecrPx?'|s^�Zccuɠ v9Ofސ"5Nbn&[V@neP1zI,?)XO7t( ']&AFKނljUH4"/X 1ir9j 7t37kk-0eTʩ ZgMHP3;nn/[~kHRN٫LPu*pm6 [yF =@歘_\)*h�lBӽ6L_͟}oN^oK$-AbU4CH]T*?U)pZ0]ia<Rurl'AȨoq}œ�&a8}'f#`q}37NO LxwS!ǙZ`1 v<3_+aCZ $n!6.v%~$5gKECEc, ֆ2JBҎFAE2,k*OgbvF!3Ug19[66GOx6N)Us"ع f9R Ódƺ?P DU^h)ر/uRCSBm$g\6lOrG6Fׅ mncDXmY{l@lQp<`sXdaCQZJm@B1.%Gߡ2 #Et}k6L#8D5`L$Kt<ˌ΋2{;TA\_HXU!8@aBN E2۰,doU +q`&Ew_ @/|7Z *DGLP\k6z�{|DK䃣 `vRs}.YGS\>`e]piL׎ڒ b'V,%LZy ~܏q?<9]h͢ RvNq]b '84T*ۙ(P8IEoiL"3a\=팫'iV0"-}oz,F(H).G_]Ӫť3I5Ԛ@gk뭊Js5wf[ƉjB対;/~BH"n$TH*-ӾefoE$t}ߴ'EpeÙs2 s/(~dWyt\l ӝ;A78=DP琖h5x?xڙCoq̇MN]-8t,حLP+'-BJIG`r7mZD..]s`Xkp} }"^8@zX $K氥 =ᔔj`_"+=14՟gR>[PyZɕ. F^7{Ɛ]{%'reqoSM{Z_d*SrΖS!:hЕG䍅ʾ#Jzs9[`uFvvO~ N|oPpo&M#ZQ}ѿp;!;=v 82g5{[<_݇4e%K숬?I~;0Od'Kb۩!x=Ƈu8+>Yip]e|~*7{z<Y)~܏q?8}\'.~J–_Ty\XW3@bֶLЃP7wB)D {_xYԝ?=+~}8~TxqnD7濟: mt4&[nF ĽEOR5T!Ѱo>ؼ\G+_S֙ʹsp7 .[<|m$:5k[Hw>?زxw_y"og*B_)d :a#m3l5jظFˤsذl@�Ȼ2OcM9CM7se0ԇ9Q{סeʆ>W;IwnC~6rn݁UݏZ:@FS``Dcv0n9T!"Wz/p/ްD>ds vg꜅;nysh<@v<jT[ iauwDV(,N[,B`Y vFa V#VULk)p{JL0? qm&hI8BfG1)*Nక][t}ש| *,7X]]~ E ޺M ^CaC$B$m}K/j<^#O\X'>h;bC\0�[|s*DŽ%#^ 2R}B* lSI2SV7`(Rn <?ǹ뻺SP|}n#>Nua~܏C۷f٣2nC'T}mH7qŋ]orBeDly71{u'`.)u M݀!j-Շ^HԒͯNom֨W{+b:IZ~~3٪Z"%� ._"v� 6?dқʭQ9sl^/xg{w^|W!*FT S5DHNqM3Ӎ#E3*jN�F%~g b~n?ae\6WzkooG?_9xחzHS~? (> /Ͽo/~㰻] v)BB"mA=B~K/>?^ *rRp\C1y{8F*z:4.Пdx=!]pY3ww$9q"aW© !y6oi!Ljw$Tؽ7AO^c_|Ͽwwr&3Z v9B #C+ ӑvU\2Aߟ: b1( .fRfL0ǵtzyT47g׹R:^l|#GB%j&8F0V=O#x2!Z-+3ZI^* VoE.b|q)CB~<1ARf#^f/Ɇܝ`R[?Q#=32iv\KDFtٜX)mg0έՔDP .*4vъj&V('᩽7> kl'2/޷IA ~!C2!∐6! *R2\\"$ B D!ƽ 3:1ɤ-paDH_ָV(t ymEtZB^E`3W~mmo~6AH(B-!@ƛ__Oڛ[!bD4s*]t!/6-^!D<B8Cvg7 1+͕Bؙ\ēlb ~2捃0`BGBc_zw_O>>?O}K.>Sɍ76A!tԆ!"O!ͷ_a>pF!CH[ y3|']0*^}mQɥCHϩӡ"ytB+tH ?#Zڍ##jgq=Tv$pz!Rcq>9gE7C)`wX7l d;P`q}<I<H0j=%NوCl$П}x~DNz4* v!8W~!CS"3>3?bS@!J�!D%xp}=Bb&H *s \z& w:8Ap L$gR\LP J*4j4j`L#<?dSd}|. goe2Ae,x~Z?+J˱Pc% z7U]_gT"ĭG":ztBZ&H5wQɕL UuP" JH!ym^xOײ:-qd!}]XU)U&!*" B^o~܏q?ǿ$#YU9+q�O:dIļ1q$͐AaW2:ۦYY1` H<vFeS3�3lk(N5`KZ.?>6ϚnQpݍS)m׮{]D.Y,R4L77!#b=1p}@$`I`b  JD2ʫV[p,Z s֕ !0�"k#^{6sw»;؈A}t#yk6?MP2me* oB|kos%ժO-$J$I,5B½Z}|8Cq]cc) #�Dx;rmt0 ?>[ ~C!9%?iе̢,mwG!C+A3?'Ͼr-#D]"k(S)<B(EHww_Gw_/:qQ w "N萍8E2:E$>wTrt)<2J*Ƥľ}k]T D nũwn=*( <ȱ8E|Kx!@6NW6JkV5Uڮ|CE gTX<? v>ٯ!#]P")B]K7lwK} GsoQrV|C !CZstGfvZ 2CVJG~]Lsf"vy6 2rf$SB`׆ °lA>8*#|^x~nG/YZ1woQ a ]ܐ<4s!7xLKl`sK%*AL|:9Җ!BR|U뀄+%TCEe6P8�!ZsP|uhp0D7H58:TL ˇ`Ǫm},3j 65q?C8:8PeKn5m0$Ҙjo4) 1h0.+`ٍ8aҐ *IW{V`]e8wͪvAT`To _`3O{ т(##][96{DRSNr.$׋l&y_%vӭ?5|_}K}�G0G B˿eK_y e &I8 gAUؼ5Ay%jT쟸"HW+S`m4c)ķ1zVfK0Az#/_{F~>~K`ء25{CrB"(:/|AbMc4g+F";/AL4j'h/Ƀɀ� @rL.P{sف9*X{PȩH;Oֲ|;cyT+$* K/<?}N&se)UP9`r<L"/v.M;nO B$y| ={܌wm";ỶH- \%H"smɹ!iB>X\SD8YpD;3 tK, -fr=-8t9bsBPe{i;fH^ZD_vˮEK@j/r^1;ˣp}ZO{-vz ޵Er Eœˤ(þMRfp|`zjt9gr *y|U6Ksr?1mU'Lœ+3v*+eG~܏q?ǍG.ŐRnϕE"[{|_ O`aPWrb3?Wj luKmjmQ܎+L$*h)@$m]��3;u:dʢNN@9o ƻa_g{7]3U毼ϻѣ/}VwV6͝&426+QL?>2B ny!iNU0vᙝؓOտ6?mp圹;y[?gH ǂ{}:L+کVe-;_/N9 ^lTճN|ʀeB!P 5w'vBS[ʰ'n3r}d [y!8^rbuC":Ϗ~zK4v4.-%3/_@ySW;=r29HeJpNќD w'\w}-^q'juhi*"$*'m7t} hA+?RGSh$|9V8Gڑu 5Љ=:BNīAZ{yG~xsZeE2 vLIJ#6G ^ɏ/ߏq?[03/.u~d!ۖ,G2nDfago{]V¦p<'ABÝR<qfȸR禲Y-#/$u# {Mwq}o2n۾7M'IBBA +C۲h` ^U`؋T7o҆E7Q\Tf� ޷_6 ‘DMϜh][Dža_ʶ- ~gK7fB`K@a^}?Oо. Õ_dy!QAP@Hoߤy5 A?r 1 !+s;]PG2[8?&pm !�Y59x=ηHac%a!? yϽ@U_6ud, MD!DBx !՟zfǗJ `FAi#Dz �Q_Lpު%AWv?tD"ˈQ3:dMcټ`ÖCaWO'L*TֆȂ;Y+Slχ; Y)Pk)UBRke*_֣<5I F,ay@s]k)IY8-9`$o�v<_<gaKɭ @l"<?GH>&fKT`k!M΂$'ܗo>|sz| /[2d'1Pv1B u KTe܈WCLȞ Zu>Qѹ>Wͤ5o\$v}q q:8P<rh׶ * G?e$$s[ӄ8(q(O6'p}ϰ2�XA�!1,G4:Q:&v/*cP!!G<25 =֕ B]l$8#GLs$O3ڄ'tbP(H\/GH<* :diBB"{<{"tŻJ2<>m5d~C}˧;0w,^ATe?1Q$ɶM߇_$A o$^Ҥ^0tZ9b{G05~oU( _P1֔8h'@"B!D.Gi->0pS!ZPAs,3Eɂ8+BGP ڀN(a3u6Ve(C`Me(M1`wȪؐs\_)'P Re7+?~񍗛-Mð&Fkh?GS|s_xYXBT0—#KGʯGؒ#DBV'M&l rB`aI"9B$AT!ȄGHyԱ!ֵF7T*� ~ te ѻMjD/~# L> ǥ-pbAntp5 B#1K`F(gO# EQ E :Tǜy:|"!B �;kM+Vʂc$Ɏ0FLIn(9 .0!!]D #Bb0"!y*Ie!\FI "r+èØ[>Ng]v@Eub! fk;:dyAp}.ETd!۟}Ͼq 2)Б<EsEMC!B#D/@X!Ă x2)IHIapL34.>$,L C> .Y&ˤ2*"# ϟ?c v@j}9 dEU&K]pD~%&%`KL]p�֫cYA,"$LY+>ԼBL0QoWyhVlp ΂cupUh*AHuۻ+))]%0yp4|;V+$A?8�l &T�;O`bCȪ߾~܏q?Z/v!L)'x 5&G$&Q/b2u2wKۤ< [@Myӷ@ɨ.|!#RS+܊ kY}AGFC^ޡ$ӏVVt葟N"hҼ2i*gu3ΛsU tPF`J!oQޮ!k~fj0 Q0/Ԁ[fn$&6{O6}3/_oe*m,\PzfGH仾8UV񥈐`-cdvKI�d}'O fiXs}l/(-�\xj~<BlDGSG8 CuO#P vsS'5H}㩉폧!uЋ@C�ս$[ B| *k>G|=<8bUpqt*'cIaZq%X`Ds䈩�,a\S�. $*΍[:تu{C8" sdvD �6GON8m(C*FvRTp (*B*B];*vm+;/c2h%/uQ vK$rvєI.}5 ?')åNX;> mncICoPDTXD+I]Jw}n vX[C#>85?@;# X_/:;d_Ns>Ө<3}蛵 8.ޯcwMZy%v]\_:`2A}+A 1jU`~0-LP:G aeÔ mv2Ϟ߽A;M~ZLe<8veҲcAe}\ptV+*ҧX s__T(B밙ck*w tg ޏq?GEXܮ/%|JH;Ҭ!ofëj/JWJ||=WIhQa.ϙm2{U.hQY#Z4asYR?]M^7 z8Blپ/6hnX\)Nsl.&"a5L2|D[Z7ni$k~Qz8c7țҟ\}w?sW �6V&wqxsW?ozeC@o�yհet*7TNx S+&fl{bePXfxWrފ#| :,ՋQ7 QPmN  `?3 ~WWV1?8 ڭ=^nמn!n?i7~&X];\B9WXd>xb~É}4TN;aꃽ!uB]y5ւ vVv`WGF. ( uڻ]9x~ eU W}^Tx&oWB+*[+9Ϸ/ أp<8O*OH'0'(2)%dr!K!$w|y?ҩKD?/v?G췾˾%GȬ9Lp>$w:ws8>2A H2!6$ >69X-&Y|σ#4D( H;*LQ d _!8@fI&H<$�[qH2.Yc\%/+tU[~IS?.8B"'$=B|_ y7- \{P]p<VgS3o̗\+G Xgj)+u3l`pn>QY 9DȂL@;" ]+ߏq?GrQϐ[+ŧs?'=A@;~܏[yx'gz/~܏g9o~_Dާ-||[??c 7yRHowey~>U}7�ݰ �H�hDJ(Ҭ&vPlf"fbbcWb4(H$Dv}Wuy_=ǽ;̪y_g~y}wJ]7rlSA w^_nMlӏxm]-o5/a`8E3xԦ6MmzmSԦ6)(}Noŝ�D0N)`\]7VπHT//1,*;Rr.rPf �.ވ'pŝ(SʇFex)k@!fbb"I*QTL#%UmMŲFHZf Dh-` 4P:~_RN/#g\t&AtH2UeV*+1sEKmJq{.Jկ:+$2*9-\`n߈ytDU(Ed Awp۰a T]@Q>g¼<kPS0rxQQ84h?@DfYWp# !2W]Lj{$#�@K2E/s))ߐ] H� lO+w]h2!Ncjş>۶䩰BĦ%!oo٫"Ԟ0PGd:!!h j5*B:]n"!7B7*[Ks~/zR]pq%F Z(RUA^zvFxV-%}W6gC J:Dú#8l1WDع)V|$0>.|�\A;+Rb=_t +Z>Ppշ|2$)b09|E W@Udq-YR\@N`0B" 5j#F-6\g ĵ <06DH j]8OG!BR0@}72b#oZTWHI[T8RB T~P6e}K #'yƛf]8j@KCw=k~h SOk J D1MϷjd@X¸H|?cHC|%ΊbpDW‘Zŧ$(*"u2�dismN$FpB!"S%&p$K8ĕ(G,A p o6I~ 4(.ذ:0nF lnSԦ6 +=O[Rv"iAS6J�ڑ!Yi1ިN&Тp* R>nzqY8MKiq5 =Q1pC;Eg%d1buJ舀 KDW'?!G7T3|Rֺf#Df!vlcX&9BrC.`B2rL )E9eg\<+#M"Ac"Ret|h)Tʥ%P(JT0 QjD<>d\e`d~JppP!EF-p !jʃK[ܔdldGp�rxqK9܋LG#+@x9G)aov#!4m ;`}B"-^"Z-GsɬKkFO ;}Q)Žr"GHwԛkZ#Ng|<hk|B!"yI4!Jpތe_FKBypO u9!Ow[!Ŋ:$P!](9E prSiPg Ǯj$E<>X 4ai"bv-@�OfM Kd"=~!։҈t=>PVBB'~|l!(D5ŽJwwr"$!F"8y7_j6Hjo\]AWeIy`! ] q GD+"dkP8@mȥp4;A[8pz>0VqÏd%\hb"Є##QSiF% Twh\E\. =,z1ئ|w G[1p X6ve}<5#O=6K0tw]@I j Co jO=~ī7[\(ԓLK"DX BP4˃;@0􉰷. 0+H8KP`TB*RmuqO*_xrMWe{JN$c!܎6MmjSxt@b[ hdAQ:Bcjt3;LߢJ?븟8aS{܁�JQ!7 8˘ ,qŽe{+ ,Yv=W~ltY5#D貱<lB:f#/3Aڹ`:Q T8mN0|lo0�7դEA;u Б9zhL Va}�&|#!V> :d6#T%-'0.[XYEH"w W}dFM<ZGg#0Ɵ ]|uJL#TQ#nޕ<z0BÕ!X_̾Do(\_n֙gSƂOzR"$=r۳T˭oZx?\[7dnS$Rx*h8H?WpHئr >g'||7y {Riۘk?JgY&.SVc(E * .կfyOv)#1<plDkju(^<9{iw(7Ph4Z# 9ŽO&K:Xi;03N„O;鹇¹ ï0d`_XT C+!.۝DN&,AA!b_ 4 gvtf �f[[CH2/H^cVs]M.eHWJ:6fv7$1`'2m0GHn|ߖ%He]رXPc(=-7]^[ KԦ6Mm$ ~ U"g9p=)O92;,r<,&d72pVZ;'w�oHKpc""% D$zMh1JÔ 'Ƣʱw@' l$x4lPF-ݞ4o7,Q r BF&^U"DEf X)ӌBœqNp38c#xM|UvdiG*[-=$AV?w>2/d;x"A VF&ĚK@q,,�`O2³!l (BvlH >G @O_QCMJ ϧs\^SWMv�v.(G1 ae<Wc=mm7@8Kn 6,QGz0!ՆJT8R~c$#!h Dyv06"!QrkcR'l.E!t.0Mp*)lrS C4 !)Uz6#\5T$3Q L<쪲qlMU6)ցoeo z-b}Lܮ o"75uU S8_dh%Dz>]zs5kicb\ ;܇Aˌr#ĭT˳ե٪Z#b=0_+!:6t`:)t>@`}6���IDATde묏HBDY!HPJ+k34F. C` җrMNC>]�oE6a u t Tz uy<]Z bƝa^X.֗"';H1<U:BD†!!D͊.mJ@5 HWl닇 ekr ejq[B WMq0 qIvKY.7&) 6iTEMu6pu7f%+E}&/H87ö"_FA۹ǚC7y gLR ,1�i^еMmjSLb?�;_ɲNmd#Ԧ6MmjSԦ6MmjS3GLmHe K~� lO]7pJ` +:&|[_ $H&-$zlU.!n wBDRg)RT#EU&H\ٷB$ :Em;*MI{ 8A8oN̩$AL!eaL"nF5 zB[(B4o&&(XFpg80=Dk[q,u͸9А~-\5U܌yxr4 �-k*@.~hhc363E;Bݽ//rOKi#r?s-Y!(" ` Dd vrEQan 3aej0ZGx '2@2w%)8`VX3VFߑSL9tWB ;6oI\keP^gZ5T%\'+L4F]@ *Hi'+ ) *!DBf>Cr�!܉5@>I!ϰG!ehq�tSM8&CR^ 1ed/g>J@h|36M8jۇ%QϨ¬@bN2(+TzJP?m"ZI> ] z~ #(|1=_;l2�qlsk%"At=_\vd =1`CTM%(aF9h<e'auo K~D` Du!yT9 :OfsZRwF Y Gj 2+�"〇Qlv/B -p$Z9H FG%TȾC;!->r%)|'ƅ$*oa}:pv,kӁdyXxhb,S4$$ $Q^HÙحZ=X[Vmtr\gpp[B< Fÿ#r(7F:j6R&`96!�ERk>,d}&1ijn`k(ߐ/@1�8d8� B(zB8c X[|'?BQ~p!m?<`Z;] W ]z/1Aa h@{8SG} $սIIu$J'jZ.lDgɒz;׽ⴞs& Gg  2] @5�9Y\E 3@B?#OĭU?!WJ&3+9BHVrB e=".v*+i6pg(Y3$K 5\BHdptF^RF2kV k !hlHHyBruX3Yb?! u{T# 1zedBf3 ZF rigeOpq*eĪ˜gncUBΦqUZ �Lunw,L"mBu>@]Ѣa@O3ja!`忐"kvpCV\>r`;62nqMp;B!܅0b$E(XKٍw !8evBNf}LPմ)D'�PL@w9)B!aˀauO,\@a7!!j5'1]� u-C8hĽʷ+lHXQ|@vJhX¬Q {tfo|+i*8S$Bta#L D1B|]NZhj! 8N̸ !(h"DYrzXzNַ,A[TCRv髡b :AXˆC 'P,P >�FPHL Gho(ג":K8 f!6M$~SghPD'#uc`+B7PBEO ]G2ǀE\^B p]@V.C8b- Oܜ.%8g67#a}!p0O'Fd1I\+B4$ GahFzcʕOu6Q9vnH|I‘1Xf]I?feV"XvᨆW#/@7(W];e: X5` XNIq&T#;-\~ b7{K?ѭ_w׹T11뚷-<պ�_nHwF71#/ _i_jv_VZ\II)#Yl)$Uj-M y5u@nn)ȋ#x_0FM\. v2]N@-)/mȐGf߄]8uG0{f?1 $H;¡J<Z榸 Ќ; LҔwā.nA6}o9(sc- 1xiT#$RgFli_, UKf',j,n/= ?+m;fҩZ@G5+u� |co>_ @d%`D#gEaѥ`"aL/R5[ŬO] l +N� $Ol2$2Ӱ{͑Xs Lß)B0#mX) Tw�j ࡶ C"D?T"+:�&#=` $( ^ XJ`1^dbu.$.Gy Q_!<T!E;4>K`�k HSؠlI_lCI*xdM E!Cz>Po ;N~a !2 V2bTz>&r`\$hh+{%E,A9JI�fF1Ҕd0(]@dˊ]ր-)L:$[)! ][B@G'l-?FLfU1D3? Ȍ<fC}BnJ"X=e pD8]TI`3d}K0t=_ e':֦ @TKlGI &ɔSQMtq g `; C啲> ֱ,cA@#ݘQz~]�[lWKw>�IQxc~LݤvhIIq 2](8XJI|N7)W (]}Ҿ )@ ;}r5Wl XP4`q7 1'rh4ͪ"%č^pmzI7$qkN̳lu:.Tȳ1}JIw�B&! 20?#8~@ot-_ ='t@;n =m>fT!Q,G,SW "O).a;yfYB4s(IJ A-nqE':jo2:h(X6 %i{R3F§W/C&7"%[{Q#U&}sR>"O(#4gek ||t2`�9ԥMf%Omyl47Tb}Fn/S(+Á. âSj&@fAjW(enb�[]gGqb[Q$P7`ŏ2Yt!b0@L1G&.n<j0DY�t%(rlWHV߈B]J/0:!s3:,#d.,A5&"|Eۛ@[(x`].l=SD/@Q rQ2! 8C!J17څ70_jVt5ۭ%IޡB#@nO ':s|JOTeH v}lnE¡ Iշiz>[۷O6ۄ3;eDׁ;€o!.хs]֗Ԡ|Wq4j+B۱-Q^=Mv�Vd}�ѰAdž&E܎ԅ )Ĝ6mVKJh: l(ѱ0m w hwqػ@@L:-A�[|pցk ٴ.~z ;|ҙ  D8"_(NŀDfAl9`@WqH �9 \!1t[*mG}D.:Kaas")u†G�۰%0'* /$TTz-OM)%3*Ԧ6Mm% @ =Q<0�@Z$զ6M+eH!w?t&vNNdmjSԦ6M?ٝOԦ&νMhSԦ6MmjS~)�z۠sy^I]7vY\h?{Q:WBvL(Luz\l@qcTU_wAf1p'i N�=T{F&7YNLcp( 3+ Bd[8ӗIu͠j3=rѮR 'wQA:IK[Z2qڊߠʨ}qUT rZ.yAl}FYF:텐':d?6 a&C[~V<uo,0l.xPV;qx@~?CMe~qN=bdL �^t16-%@K 9:բ3%<$Hb a`Ϟ P+ٶ}5. O"i9%}4c%nED Hn3B!@rvKF:BIeu+vO7JBE\Pu ;½\rlTeNBH]R ]jq @@e~+.a ew*r.=U|, =˭ (B|/Qz--&*ЎI)B|' O@>/ѽMŨ9xK !$+1H+p !n9EXJDqH4NxpPPAl B@"G!` ;B, ǒBm5H>ߢllH| 63Jx,@ۆw] mW)#&eҐe냢ZPAC#lz~ZK;71Bn ba(-5> '#‘~ǸQC{OAr E�d':!1C8RK0EhC5LG:N�XL\/N$\C׊f)lS,HM =! G@]@t֦E,ZoQYXǖttC; @#z@`ǖ1h7.-hSԦ6i[DOK!{?�P*C6"g2EGD~Ԏ JMkW|).9KهDM*}7>J&�]ȰSY T؊.Y ;.p3H:%tD@v@N W@@QwBG42Q@j]A3 3 BD yubVlQ#W!�˰\."DYeVNmicxA&ŪxTҊ:ՇT6Tʥ%�I'k1#mNJ䨶>Uc_?G]͸! .}eJYbt̺ 7ʎ ?/Ac,W$A2a="ǜ{�0^(H_$+ /12 @-Ww X- !4m ;`}B">-ʂ#x֥] B忒V ;1B,7BAB+MI�g פF0$K!!) :Gܾ-8ZɋBRp�L2@,8!r!nQJև5Zؠ|}L@4V] W)9)`wO` rb}LꨢHEMYBК|@6�V4-4` /U/Z+ph5hN2pX&> tR lʾ8+`a!d$X O:3{68j XSa&B Ls|#bڼ6T.ۅ:kC<+V� 8az#DS!ȰLlca><�L0=PPN9j6�)Bw @>� G9BB*!ԅزO֧�?6(Seȍ 8E\wh NtuteFK`}@hJԬ򔬏XRs>r uq�vCZ65ێ�A&Gj $8@=_í izӴCpѓỈl ['AşX^"U_OoC`Ŭoh)DZ}HW& P6?(2Tg"Ҧ6Mmjv"~ñwذ"Y|95bD1n2-p6O!ct'+w ͦ!}W&&m>y=3{s]=l.hxhO~ŵrh<M"{PCm2 j.o@wWO;ѝd缲*[/܊',[ 잁{>?\Z}eP=[X^=zwv:|��Zլn*NlysZFGZ[DcJ{�[_UƢP{>8X48Zd|g|9H=cbW3[(f�QfeZxtFiu >YpMsZk˵ե/4܂ ` z+vv2YjFͷ_Z+5dsޛwu:AV+[٘\ucN9كGwu:,cPRѸtz[ Zڬ)#hEpC=S k5yyQ.5g/o}{sZXaA{AyAFv@&TԾHՓk4zcs>w|fg ã;QL938R Sm5],]9W^_9:U0Rεe?l69?= y,o5Nm.Vbh^T1#BGP0kZUU^,ם"zk,ӵkoWo3[�@VZ\r~kjŵ o+2/n%MopF 3]#Y5VZ]ZZa'[4H9f4ƵC$3zr F'תQx9Ւw4eL40:G&;zB&ݨZkk8[Y*XQy <YG d)lMLwMuvv cP-7˥f}ZeeɲbgO. A6�@a*jZcn`k8KWovto0_(fժVsq4_m5mZb@rlCoԕR/d,]]�0g=B1eVag4]=bo>A.qF^psT\n%hޟ+d;Gl.pjZnVK F*ߒ�CPaP F:z |K ZjsmTmCW%)q(͍ $;iu7)%ѯw6LTb[% ; j̽wenhF6;aMmjSڄIȡ$ en7]{+jՖ.!jКi5�88gmz/'/z([w?+$^y/}~}磃=wn7Die7=s={j9c}|GG{a C~\oqX#{Zܷ_h�2c?ѱGQҺpj.J38vݽսӷGԗvGr+]Ryh ##hag/ow^YS_$?~]JCێמE_Cl\GwّQՆ!_~Lj/7uԞL6Z?Z Co3t7Я_+Bg_< Vm+?XZoj+|cr �#O> C~wZӔ "{㇎Gr=sNm%$�{nkpd"y ߝ|,1}4O!C>]g+Nn>·&wwg2 #Z^Xs7϶?ҥ;j٭f8r]kT +uzgBBU睠qzt= *<u!M $r?X\R"Y8® oohb+/R/ [{{gWTŮ=CS{;֕soRjY\)薻9db_*ݗ;vЮ=Vm]Pzfå&Z[|7;<_5A/}ْy#t\}\>siŽ;J,J;=: wM헗ϟ�2vE}Z`¸zח,TzNLJ?:0Nr9‡s("PsUZ?Y hZ/_<?;qTf˧^_-m4<�L(D)fypxCƊˍڅ WG1|ds@OP!WZ+e"L,{Ǧ::s s'[Mٛ=7>`77>ea LKs_Zr`"h(H*v\wJgS-T_yf\jmyK Vљ=0\pm:{٠}t:2ѱp+j/Kic~HkJ+5souh}jJҙMR#"c0:9<%{s\]c`a_}vΫ1ړ nFV+BQ:7]۷5߸_ToMki#)2살]F 8=y*�zc>xw2B/; <h� 1� Ƴ! 8 2q9 t&i nQaJoYҢs?\l1XC7?�cp'lX w5LEܛ<DX̶� Ȥ,3�w1^ar!%?%\=g%P`7,4#Fk7; Qv<=^΁; οIWk2A\Ɓݍ{w&Mr<`x-EE:vYӗǒKA+.}̾]ǟ[Ola\k|OS_qJO( 8ϳ3GSC4#lz>lmߤ9Omwm':%1;2o8|k+ #kM9Cgƾ7-/kt `vw׻}p;_zT9VހO?И3e ZFC0,M7Wv.u7zD]Y.১xhoΞ~cC|dx+2W#:<YR9I/ bܴE�Az[১=r>{O7jH]ZcOL-W>>_{|c~s)/yBs=I|�ufxr<}EO=w\9#J4{yZI k�5HԲbxǒؑ}{GZJDׄ=dqZכּ;,8w#$wD#~cAxI p<b9ٝ7gJv?@<|WuLŎ́[{/bESo/-[<xKN*3{9;唉P֖tށT郅b{{{ sUej=E<7M.Ilmԁ#}�vwd(F';{󥍺/l|13ǃs'q 2X`ٰ̖7f)`XDx'^[-{9%;߈\cy,v=xtށ­,\+",ĵ?wpށѻ ϼXuܵTǁ[3# 2ldsx 7Z  ؄.`.&;7<ޱ4[Ih`zX^O:yt&xr5ePLږ傑Αʥrƀcz'(f/. ed {Nc z +Wo4!۴}p؎td3g\ۺ`c}I>)=} 'v|ђEmjSԦ6EK@mFib·}_ō8'7E_c3g";Z řhO2!��_[LZk{so/_Lo[hmjeQx@:RB!6*$N>>߷ȶ;7fry3onF1yIj^>{|~dJW&`O~ජ&ww}zPd_Vfh({9l1*г�SE$O=w%P�\pî{g+s#Q?LF3@Pe5'G~nWp/ԯN)pnߗ~jT| \NR#/!){bS7eWҡcOL6G1b1~j{_诤ޚf9vEw1�8p힇 �#ŧ硏d~.Ē-*,K7B)fЭ}駻wZ @3%vߠ$$FŻV>ቔ_I~ӅNUP?#[t8a-f3& �_<>_{X诤#|A&ba~PSC;(J�lpiH'?X}|~[RFq=_A'k$eۣi->52+;G'uYŌ|V<.B̍O(18SDZrFtwv&ti N8[f"Xq,-UH"}!V$nbC})qټH7V㨪PZ"yZ;vc)#j.Ȣ `p{^QOF1G{eK;�esrpz>`3z}l79wF?D@!XGEޚsooҺ pw(}t+(և |>/uܦ+ :n`lMd}bHVltPbW\kqp~;|P6VG(cE2{JwDPAaQ=H- sJC8' ΊNi$f혮>1UPƣn*.)SXH k.kd1o8$cQv RP F0w~+T6SuI%ӦmMRKMQL8lWpI> %)c 3Q: "Ϸ`qy(ў*Z{:H%aƟ<tPo/L|0gpgZ:"  Gtvg!)eL&c4*ɑ$A*S1R2yM #r8gX1<l6r[S6Kj!C^O2=(;SK4�Nd~uvrqe+i'v;sZlC}5I Lj} +5_Nj V!NRX {HkoGI.r$-w~<uh�{z>^j&'>7^''oxv6\<IP&>csfs~H82,)C:J/AK9ށpѣw}S2C:.Ax'yڒ��|�ӟėv Dc'fW䕨@n#Gs{SowXߝ"COC sQTXhܿ?2B>sc}N ~.6+{:utf?ݝF3>Lwl/SwoO/ I!J.A~#6zC?0eQ&}||f7JR!HIXI&Bc"D:5629Ͷ^y>^רNnx:x~QdKT<˖D|JםeT]>fnon֮Ku&AdO n;6ᱎ{ ☓B*"d:n㓏MP59hNNX/Vu_‱c%ov\W�Ͻe8�8 �Ŏ'Lz/S_PqfvhHSOvYE1ԊW6S>pbëWku,ug|/ݷ92)(VL68vHzXiGdh qmФ:a%$SJ!Ʊϑ89EH� G&'U||p4ܤj+ N39-.mtCN~*OUqÁ7p|eb5%}ZX~su*iHL X!Faa>z pOB =) ]ߝ{?siO"M=opԍ%`X9U+%&o.VzD�٥\ԭ�JGnn>pUN׮xް}n?z_?s7_Kb2&\Z''>3RƆ =d\p@z;Ƙ4>=if&A.g$;es6\?;+}7u/o>29sgޓ` (ؔ2\^abkNPy'(�pWF\rfXBWj דt@w_A%&:C`tr{[/ٜPFc條mzf >&g98_y1!F ~m Y>9~#3qS6E ̢4@A&_1sO~�u";CLITTiO cܕv̮ܽU3Ai +x-#,}¾:w0% ~t2!HtGE 3|< 42s&*R~vפl.x36 Jl۟ןc/dĮ> (ȯ8F vI Re \L z&s,-)>Z?T,\@qon@Cd\I홗$'ŀ%V7P8pD&cE),Fdk#Hoc  yIdԲ*KGWmތIlp}#n�[P$YMG)LZ Xxù[םC'tb+ S(ؠ3 O\ʰq+gU: }bm2(3724>(o;+;N0\% RdsAc`W/@HI*P,f:<N8=1{MrDp'n D* !BUe~*�Mc2/ڗ8G}6|vIDY*Gh82 ^m pDc7FuIpj,A,9jT#`6hO%(lܸ@y ŵMmjSԦd TY~=rҁvTRjRZC( -0mA޻P]yO �ĮCw`N8O<Vy⸖: e"·F> "m`XIfV:{)}yz}w37Q $``{w�o.ݼpD_{|yC"ڵ_37bO_< 錴TӜQ_Or�O]Ź*w<ݹ-7EKᔱڛ?٥V/;w� 3BZn/FGWo >KS(Y;vs3/ e7hI=>vV#W!dS)!+obڵb`%ܙrs(WHG+I!{$]7wNR4:驩wRp[$$DJ%&eHH+a n+BCg:8IC"R9 Ko>QU$B<$A$vJM4" (bn/g8p�tOLl쳋zZbrŽǁ}o{XO4MI|pX\G&zzw۹|pCd%i ` rƈO3sQrR#K^ /J, N eBglږ`>`jFa iҙ׬fT*xp]'໧'X@w�Q\,71S\|:hc0[Vxzͷ]v[+6>F5@'k& ݟDbH։xf%~56=UG::{rةݖbŎhf ʌ $OlV@g;}| -w wtf uA Jn|@/в $7Pؐfv*%5b9�X)2JF43lmp")?F&AkU~MLc#d5B!&� >.7=hAvl�py֕!d*Tp ,A͉{%[ܦ6MmjSjJ+ y^�%}� /-:)"QsmT`tB.,2;sj װ>wΔ,' k{9(xbRr@֠(czqJf_x&l9g3_̶ t#\Z% rGn|`ؽ[zj_\tvuρ#}}Cv^ApQKjk,ūUɲA: GۯAT2ȻxzsRih86,_[o0kb;F׹z_͙<Tsdz2v]i'�T"DbvG_zsD/>`\jF 6ه>2eb9` ;bOl`4~x"M\ܥ?10'OLwu�j p3YN@<us:pFM~ksdgO>{;ɍ[Tt%�NOz}by"]N]z|!zݰFZ{܉5s:>51s{`|9Mou݈yG2|UZW˞N- T3d4f`|>ɞe:0>WLkaGz.dof@jQt `CFǦozJP,1# '|pLWK )3jpmRm{ _~eX|F-@i]ZA« 'β)uU̲B'bMmjSSF,3hQW-jʤx\|R_3Jådb5+qV˭?3~o$>_'e_Gv_˧8�\]U[ *Wʳʌ䞮щN|l}8_{[M( h nd@>3{qK\w0?ctch&_F mۅT3/<B"qlv%Q/+-/TZk`?L7_|fkk#J,Eld0HCzxੁp}K_t0vcOeljK�<c˵j�f#t5itWqZU!\NzLP!zake<_ZHa*iO_<9J,fQYw^FӸsߚG]1zVZ W* Ց=c:nsp2w\lLvuM%]+gF&}xRPɗ八UDXqhz2GQd4E,{si][-Ug+Rchcx84ZJmK!1yfy}XS(xqr͵|1sh뜶 6^N}b)1&yShd)̶sZM\[].WK͞lPo0?�3s^m9:.30Ќ #C3x#)[h,VW櫥F`ap00\xb�w?6fcj}eVXkAw_7?.k.n`"<*5֖jkZw_np80\HsNp`_-! s +3-5Z}}RUZ=Hr{YձD^89p0.u3 0*Kg6Lr:pgcK' C<KlƓH ;Zton 0vx\'qܳC*ZQ2}pNǧN*w,AЧAk<emFV_VQUѕ9aa.U6wte;ݽcSoupuV+7M]JYh7kFr]blzRR~XTGB/]"pTNm8:቎\. F]An<|hýX]:+CH(ΡRnKF*tdsݹήlbBG[oGK 5"9KG�=tG-^jlm6ʥc'ѕ]Ou&T 8&#H<z/@Wl9" z-Χz.#}@6;8v M\. W 9A"*)QͰ w)wMmjS&'94zSdKJS YN߯n^*"�-ݣmIF;!HCr>3TtYY!B._~.z~i_yצvy{;/wYZW~])p휊p-@6n_? h4m>֥��|t(ߵwډ5fAv>Ԅ ұ]~n+kSon5+.^>W|zq#w BkK80xӓ5󛫲>qObgsA ]|@.|Jd% 3jF<Wg\] ۽<G_׫!nmqܰ_΢UX][52FH3)z߇F;Y_̡ͭxc{:qGnvi.V�xaz]]<9{1ŝҲSo}󏯄pO}qObꉤgz-K*|f<1}=��$5j>TK–X�`|w??} DGXA/g[xh(xr~sZK4lDӗ}{q)r<$Pu Y@u-Πq7[> q|õK[/}oajUsXC‘Cܭ1W7uBaGtYUCMƧ;G[fݝOSV WB5SZNkKo-e^+J Ԃ+EVЁ[SAN Xp.LF.ڤ~� w:6I:xKW@$MܑG_ZBP{фQͅkUCc-MAyTfCZԴASuQ~yuĖC|]QFx-9(* 0f;J+�md&B+Ky~s}^~jOWV&K(DB3ad?^XhsNfyq4፵<o`rsmE?ա48W9rZMv\m6 篔Ac}pPQvURd*U`C<sί\]-jV.ǧ&ww3N3 G3I_[xG?\ϳa1e3zNQ,\p@bO7V\Zouw8� 6<qӭw'mw9A7>[.�Zn.\+cf۵;J9Ac%藿3]gnmv˛}܆g&-n-|m1Oiݗl�1#Z|JisQڨ7a.tF&;G:W=O Uf?1^kgmsCX=ehD'$q_<,Ai@es| Mϗ_N5ȫc)], �&Њ?*YyBo˸F߰*:*+2>'BX]m6MmjSڴJu9d|,BBTϧ.5+B_̸,ݯ.bq̪-FP+Z{Vw{1=KKoh1Ua/tElIuukWϕnsk uу[\ `,g}"fsߞ{+7"K'ٛ쁻ޡ羵p6~yժo^8%l6Oy홿sKF`�#!3sA΀}k~vǜ}vrݾ.r-y+|,35ܕX!C3)띅b_xzQܠydWaMΐ;onG9_]rƋ.;2Gl[/3on2 \q̔% 6Wў~~㏮Pūū7[gJtBڅ.譗VW#+œ[_q{uVMIq͍f'yݽY�=8]cI{]_.oȑNb9 ?s~r[�q)x=Eͱ&lOk*�v m5g'3jZR-(V`%h1|~@^\}�/}o2O%O>).O0` } K]'_/uj yA`FFFܕ^k=ӛD%J빧殔{|<yR;Zuj.k7~r'~Ƶ/* ;6䧣jw.U\V>4W1f`~s.d3_z?Z^_a=loWWjx'|moTqVٕ"d;yE_8( *sص#²7"M<(a7_Qǝy{M9-4˜ 綮+EcuS;V=u1,+7|~]޾\g{|SʁQ%GौFZg+rpePtfsrwl ΁wtfVŵkQ-^}owdrF#…|joOb7W#![k#w%+!z6Isk.]ttץ3&gNK=c_G':ϟ\o5=J//x"Rcy!%ɱ} X/ٸzaSl,�RX]/?21O&.m5a.8zxFC^+ZOV`\juS$!9WZ?TL}R=ZWwLw70S!Az `p_u7݌`eu(Amtٖ%H:3Hw.Wp6H�MmjS&I2.H7�8--2� !'dj÷* WJS[^]�h <WT#䥍߿DZ67&�jIҧmB/gm=CYDer&Ie&B?t ��k?~2졏yYAW`'?1FǗ^|zI\q U~ŵS_M~z˿{D#ġOܥh$9p tb\xҗlo]E9B?پ+ٕWlB_%A-Y+REE@`1Btfg/Wȁ{+}da;~KtDqqxEɁ0"{,ؐ춇;g6deWs<j|uV^$zou6nJAgY+'64w?͒ ϽyI^xma{cO毖]3٠+[l`+`~H8g~EXkW]9S%i0w x* o}Je+Բ&[/]<)Z@O·&B GG5ڂjxF"9LOl V@''@S@SzwQ'(HaX}#2@R)'_[ǝlՓ_H A-qAr oM X_͖"ߡ\<YZOxv(*UUf�wdg\.^xzK>8fuCrq>pD7҈iZG3W- _>|OzxtWp~}7݂dk2-oF t֡c$\ZHM`[T ϡ묏.z I kD=uꍵ=.=^_Bl b4ute]|J}╕f\fTg%Rʹ-3<G@L6@^-JT.5zqŁjgSk-vf�4,AզF7Yl`~}$6+OYF}x7^XZ[bHP-w6::Zl0M8ZF1,ojw^[5"`+.;7s ]3 i-;bȹ $8r8Wp*3WmWîkJWmj6"9}s6sZY_F%B�_ԪormU6U R:r$Xǥzi.8oq}B/210qWo^@w i5㫛3zbLh`Dۧhp@z&%QBR+I"dՆI-Wl QAQC!F0³L7̓Syo"윞R%:6:tK_U\4mjSԦ6a¾=r(1G.�,p)N.Bچ[naD8O"GGoH2n5/뻊_=Jf U#Ny?IZMw=/Ξ,𕀂&HC< /> e-BlOϫ?ZT-:*g<sGg6*KOnqonGVͣk2G@mM# b ;a h/,n,])/{׃Nm,^�8,; ]*4' �0~Þ|_X#QA0x/tm#Dj>?bC:Ԓ{U1Bpש7kΝ<7S=ɢ xzBE ryu,V]am*52I8&/ki?9[$PN s@MǟԻObfݍ[_.?7ƞ!yV�pm"M]=YDJM8BB}sKԡ#޺ F]+ǧ9|*7<r5b1'�<[Wj~cVU}e\ʎJ_٥P欌;3ཹׯ-(|�PiBV_>SJykI> ( Ě?u֗@c^7W; fszZ{4BýXf=D,#}=C`Ɍ'Qc9Ө@.mq)� W[ K4˰2,SN"K[ku0,A$2gX)|6M p�ZⱾ]k;6ed}X31<N/W %oE)ܨҙMw *)ߣXBhFX, :3Ε|Ō K%-&~9Zq12ٝ: qj.vuI1Yqktg/P$듖$8[IzoG14p4»AyPtP h% K4/41nj$3(>@PU+s1J8!r#VskTq'$�Fr۔DOn's^:Ì)S;iMmxN)h9{ sIƗ$7xPR�eJ2̸ 57Wm`Sު8_ U@Sp3q:~vi,[J]`僛#wy JrU(H[ϭ^?4d.v/^κp[ϯ3U ;Bg-i$-q%x!_pA,\s`w=Z9V]7Ҭ3^�# X50ZEZ/~qĎ(ޢ$C +zsQk $'l&wϽY'mЩٸrvΜ~c󆞁z}G|[ooN^/I]Qʇ'^ ߞoCCvqGx-^zs6jkOEk9&c7*[ńSJt ׫NXQ j^ }@JbGfd}~J)=3:[lwp5W:=JZ6`\8Y.5]o@8{z5 ʸXoԔ6^sbi|MϷlnlp~$q(\>W]= I~183d!&:ƚ{��2̿]ҞC81B0Z-7/)GLkIHJkP,!Q[ssGMf2.ԠSo~+J~7GV.D+IkT9OdwO> t.{fyh3oW{4?H2,G�XvPtnt �:BkOg]9!Yѿ;<VZY[(צ`=ֆ331pNI< },b*n1]IeNm/KF#LsC;LK5*9p4bx2.ag.KeQSt[ޅ F5>;ˑJ8лLczcf ,G` F 4݀/( ߃]c*ӍY_?<jޏiFv33X Vgjve e*`SA?UY#xz)>ȑG[6ڒ| '_/l7`E~,?(M&��󗪯spƫ-}.B�#D6~ks twXH:UBы7VCz!]uA_:+,1Fiq_+ɲ] {5.fJ0tpp\kroٵ{bO<[.\+_<j`5K1|w*Z:B?.(.97(%@!KGxnP~ �Kg7EV܉ᵋlo:@s{jEσ> e<W1Ղ}km>_毖Oϧ~.|lac+O/�å<:V9<mI@3�r_=2pœM&Bpm*…cNZ-7܁ |c2fV({ڞXa$nd)m4ݎE&렼je >R(90fSDZi^<Y RЉ$-ΞpԸ)R;ֺ**LJ/ԪNcE9t;,.,@;m'"}SRqQ҃T�T^`.?BӪ.9xŎ̴$`S{vLJɍMuz>��sϓxzr; Z|J" p6Vk[.x2=M`17THun__HKa'&J)=8]9_apĒbr٩1ʻO 8jj(Bq 2ZWϧ@WT*s M_:M_(;2,,ən1ͱIKڿK+'9ag s'<o*ӆŬM+Kf#�[6cϽL6A{N\kJFKzZ-9DϔexϽ t"%Dp44.T4'@]%"\̺e{ 1#.th�b=;˰.i_bS~YV`D &IGEO;I`?Ab9眇!0`G?�XT,,+3dqZa0k0a,2aaUHaG ˰  pq@O& 2LAl&A&#DOX7U'�.~ ,7ķEEZՂV Z! ppθ /!��D *`,#x �E77gn爧wߛoOٶ蟜K.anu~MVuQiьuU+SMca~Rz^=CѕB�dSwa[]uzlΞX ' /^^NI~d^�_v˝gfO,:ѳ}й3`K]c038N8ˍ=_vεW'Xw M6{jrf=k4�WkSQt]:U; .")g},m4̷÷ 籑w~`Pt:(_ޢ8;F$ljnOq .T*[KˏeatJ+D֗paZՂeoei°s,ZrL� (c]z[ڮ<ƭnyɓгK ڪ]{|P|suNs⺵|ŻU(^P޹և/lڢo?�ԯ=s|.lm4Wmiqҵ [eʲ PiqȐ<}<!Y|WY [ax AOlK]={|m<J# `Ql ?bܦh/-ӱ]ŕSƟq6WYQK/.W+8k;njR:HEv-NӓOk3_m 6{oJw)��콩wrY 9|IںxjLo\;X:ElEG:g$/F{81Պ xˡI 0YXV1WQ{o�KM7XXZ]}{/\ee0P._8169I( dlSkq.lVeݹBUy!ьtuJMm&gzw+7`2\[.Wt!hYvaWZo,\u;sB^ =N-h,`d6= Dj 1y6xTͅk%4=HP%"fCɣ^}htTmﮛ /zJT];K 6#HT‹ʺ\]��)Y{CPw|1M=Qo*EU@&(.d(lo9c?!0]Q䢿f�!ܭRn 0(4hqh\B<qKM ftH<%\pẑ0:;kmjK̭YM9Pl,T-AdX _A]ҩs{+]# 2T&飿�0n%FYb6%ɄG8`ßccVZYѿ:p]HӞ{Wdڦ|cŜ1L-7O_;z==0\ή-5@YMk/v{o̧X [6ъҤ<mDe�CΞD:JjO)&�0O~f*خ5d2sSK*_�]QJ -W4xG s|ꅒ̰CG{f7WQ3YvC#x7V\|u �-L!Ӿq_ a4<Qvb}LˇحJP@@YPe$' l*Zvt ṓM}`93ooxx W\Xq4z*vHRjϮ-Vt3X>P]2B]O �+GJ>C<D]a{hB]lYDDf[KsH�8poM^{zC)B.!�DuH2mJ]ŊDIF|B: *o5uuHkjŷrs' (lp$"MԔ9u,ԨΔ{."�\xg\-X0<䠱]u4%y0ZjzpERz>=܉;uJF':ÚBz~b7cO;ޑi 0 :*U`QM|EL;lQn%#=�eg~Rw_~bsr[>IF&:&%u{RΝXNdžiH"f2PEㅕdl &4Zi!7"ke;-vdKEdRw(&kYt%`J3Ɓ!t@DHOdH_pD54bel7Qj+H��]=ޜx 8 6Q.Y5geY}L}U9 gUV GMP㨏,N0!x,TGݻFsWQTvB &z>'CEwlIu<㶲P0S}RmPV�D֪B21WcHIMNibJ & $XMԃ#5 DTbejXziwK`džV1E4(6Bv `[>O<]Am@DI!W4<lŎ*FA!N)� Xqw'0`[8F{Q#Σ@y z@a xDiSGF)`A`VwѿޘkSn$`W's͈Z,Z*7ڶǧg_<ACmE"tDKUWg)v$'k?3Gт(n5ӹN9֨Rõ_jvm]Z9']/ЌXhQ;~'QMlH]4Zb 0TlX\|Օ\ zt_y<g.//T][[GSlѹ2|;Ҟ|yCؑ*O jQ(>{Wjop0�SuD~ߔEgYo0EITrx2&l>lX]E zfsv Gk)]6b oVЅ_$';qH ցGϼgjljТ_]#4/@TTJYӫxS̕d 1�J XȪut�� nӯ/V? ­Fw=91ݤk}閾IZxҧ;2 Qp2ɒkϩՖ.9iNOK nƾ7}7¾<tE'-lX�ӫ@zJTkZ@HWKa̢IT*,Jr6x 3.{�`kw.X.5</WR~֬A{mrS|V_[c}z]r|o~_ 02yFޒdg>79E] �+&D3qlbzRֲ/Ok*yB|7n#zKۊ1QPbiU8O5_vT$mMi(oq'xrz.{J @nRW` l"&I &-BO8ln.چ?`a@my=͙`Dہ߄ Jb8ieV+#D ŷŪy[x4n c ,dqg2p1pC06�0{Ggi+x-G10ԏ6ljXJaG& Ni>[W/k?u39>9Tv㷢_\rO@ v$VX`2. .yy2yt`~E@[iQ ,teU/]3}LN-~QgotGcf/Vj\ .Y*o5;U)pl6A47ؑ=C_6\.>`�{#" ċ3pյjú3[hÀݏ_^{vE9ٞliX!ȍL o؁N";ߒ,Z� -R3X3߃4$\)QՙI̠+j�nN͈&';:} PDX_<F8ieI2cwD^X5 LdbÀowNx9b-!Df=7^,Ҽ)ءcn;{|gJk 1tGP茣!v{)Z=4~'?V+a.˗ %*܌K!CAƗ@y:N}\k|n{*ܾ7ðìO {^wŌXBC-sP{0#-$iOl$?.xMkKkeW]H~ubgf-l k񞩽'^YƏMw@�On\Tsk\-l磑¬O>Rz5:ʋr:f X<3T„r)o{ˡL59Q=1?+`:qMZk;ַ =qKg6]`�seIUtrvS|-|I֚RVN[/�9Bk��jfrW6ZDi\o1v.ns9m5*8=zK9zS{qې/_#ۨ&-]ҹ$+k2\L/~ =ZѸ 4Zev_5Q줶YGANsպLLv!'HTq&lߓ8g=۔ЯG3r=.>0`!ΐsْ`Y#ǁY<P`aPEl% [z>cf<ʙ�BZ8�8۹ .M,$chP[x4t1rً,` 83P+Da`g, `Fmfbu�"0AK1oIܦ.Z<YHSBIyL{).(TPؠHғWVCsTg{$ ]@}A[+sWC毕~~tYlW8W͆PXq8/^nu9t!sʻZTBd^aue75N@r9ZkjMBmŝ�0{Hbm|�6 Z56Wgujْ).=.[x{{t{vRfWp}tF`���IDAT GTzHH^s a:Gg(N*o6p^3�܍mm6SK70R$XeH*vl貱3]9V^sN Aw ۩*X@)nr �nshc(FIL',\ܼHGA}o^;|H ܺjCm4lmTrܡ19R.;! 8rlȓZ}r;r a{x<Cx0zA|bs JM"!IZ!#?ݠK[l =ߵYw^i(|}s0ǁ/~'#p]}?éףq]zxĆsbwF 1O|8!eUD߬ vJnm`ڬDX4-A+Pb}rtdpy Yb6p 圻1[Ft,*K&X_V)%Fv$AQ݄[[mz\t;r8 Jkw?2aEt38ROz<9G=VmUj ᜳj*hgSf3R l%\3,u>R@؀@Vizxi ?Y.8y6\`=wAEv"dJ2n^. }�J'w 7)*>{k7nr? ;.^ʢ 29 UB#ϛI途f @\,!cDvي!< MPm *30 *ϖE9oZn7CƱfƣh"` `hfK\!dd Ze",DO0�x 3Eܗ�0` }.m߶p%HhlnS~<(tqxN8,)!@"�ϗ䡌@yW<հ_ oQ:r2D#DFt3:B8 W@"wA.@ }w�0C??-CR`(^47;[Y?IR2P_�lc5uvg16 Jt!ws`WX]J!Z^Lu' ubK@תaJ%@O,`ڕؠ/!?toX\3n+1hB89_RSuߐ<gW<zhqέ&;K$ _#E+B�U=:30S9q)BZi!I!!Y a7XR�DNR ;F x@mn@$8*ܩ*]Ku*Q:v!L8{ |BCH>eS. 9�/oy_O|!০x&`HR(EY9 !qJ}$!I`–4J¾T+DRx TAA2=†R8AkCp~ԅ5-x2̩4:}%, FUEqAp8:7Vb6 `|PZƚfQQd oHaU( =Ej2Ŝ(U<cJևBcTUFfŇM(=nFicǵq:H:\]-U\ f?73p1=7Å!w݈ 1H($l 2ߣ! MI);Y,A@@}>|V%4st+b3 G�"ѷRjҊWLcHPKi<Ҭӓtv}ч.׾ًj<og/bfh-]{z\_ըsW7 <;Y+[ �dH|@N0~\.N-S8zԤVn d{ej�ɁVq' Y}C4+ӆWG|. H0{ qp1%XA.%ȑ%e#C@"� Qd  TOڲ` @F4[m$nFPQaXTߠ)\R!%Ro>V+rt4c,2AdFIb< 0 [hzQ5jF֨ZzZVjJVWZVkzZ|[^k ym47~CVZ!C!!\CC90 D?@B؂Pfl4fj6ZFS^VѬJV T,>TjjZ5V֛Ռ Z- lA1�D?Ʋb;͑⇁mjMBziЅ] XeRN ]�˚[5!<Wqմ$SV%r^H]KL+D>_R~#C}n`yEj:�H3~| /+?bǤU]<:( ?FB/0 I0G4lصl #ƆdZL xlq9Z VJmC!p`﵋,SW3 j0kĠUtn][7!9`3𭗖z)>᱙N'‰W6!k<px'X :⽦\_\A-N:6@Æ+B o8YpĮ7�Y�2EdA#WMRaj:uv�iTPȻ)A\I"oGq !2ق-`6̛Nnx薻2&F':GjWZ! $!!�ѧ@jT#T_H _@V% x*%gy5bm2Kŗn,6zꞘ e2OQd 5dRSQZMQ|0Zև)UzHl$O|cյ18x-:0♍V 6Gݹ]s8n6³7hS@!HNKJ:=˅Ĩm )%306Pp"Cc4Lg}P3ƀ]7G}DT�vg=)t H à deZڨw>uFOi5ܕ-p⦋L^t� =) &9v)qPiI[8J _Ou? vf$ X=N,A0`X.D~!"hJa�k.lP ^ƩX#c(l(&[B"dX[ RXGn nRB̓=H n]9=6w l> lr~I< ؍U䱘s7ry&lV+ x3p9a*R~a s,Xa' g+6d<q;6@@xV8B&X*HG>G<�U%JWIl a3x)y :`Xv@>@-h%K0`!aV&m Mm'+jM=Dt!(0<&$)tLpC." R'$ǕP!DfвERX Ӈ:?+{<ƾ]X*RG= ((^z[˥, 0 !҆sp 9rԌ  boRd�9�3I}Yn_0M4ʌvyOKsEX$1,z,?˺xۋ ]氺84V<68|*h ᵗAaLk\(TI*d'*ΆZ AeO^gwБ/@ܕ@A0ۊZo Nȿyj#8&�ד$a)߁!x|.sIz-|ۋ_7gϼ6 }|Ծ'@C-Bt`gzZGwnjBiq xwHp G0r3GܠV;M(h^aoS;, Ra WuR}"ט=�jK@BaV )mV  &MY_K&cKՕEg}=bv3�p/܉uKL8xzYu%l,rn|XBk%{rP;B9jtG0ֱ>@Oyb$h 0*9osyn}V%>\]N-F# R8Rx3$aOCxڹ 8W^`cQڰ(tܧ6M�A͢AuTl t'[ԨN0HZJ?g& &SO-vda *7e'Ġp4|\eU7#b) ) mwTP^ 7)m ]&�JRAPNXr~mq=H4e$[SHr7…fY4[MHdle00ca6a?FYz-[ZZWJV*j\)oU[Z^z^kjz٨7Ͱ;arnȣO}�f@rl&d3\6frL62 lѫ럶300a6e,2A d p�Σ!h?ql6zZVjRVJU.+rRT*5Az]fl6f+P f<b0Inc1yOL>)M;pR:r{b\d#gW~\R ױ!$4hd,L�6 �.rjx�}wdsX|w׉z% Vr+xx=Bt8yA{|'n(D!�7W pmĔ#Յ%1֏7"> ;1RC#.iuA A]({OzsVδ{g3m3} =�L\-/)Ywώ3{%]Jn4_?t?y);4J+buz18\ƒ^ am|50O4Цd9g9֙Nw" % [ lq BĎpLT�'e_f`4?wQ.1�(tf|5Pu;Ai'Twj(E;\PKE},$X~nwo5ٗtC{Ith7.[$=-w�rGM� pT͔DFw9Oq @X;jo Ch-P�]I/ !;v Ǻ؂zݯ]}s &Ec0l:.P�L*ɠ6,�3J&o4dU@ZKs{)y !$) BP002h">7I<F_w?dOd 쥭rayV woՌV= b 43)0SNsm !V 3$Ei˨pTY}>(!j ,Q&Z`P\>9{yKk'*$dˈ7E :(bc}H8r42; GCR.6vL.,T6Lt 9ً% kK Z}ș}RMmOUd-EkT͊NMIv�,GWpC1l 1V(f!iWE_^S~1J {%B Lc j|@ycQUvϚToqi31҈S7q v7.A"D#Dy7W>wQ?2`%HĨ,rv`Lmc;O!D,hH9n�yZ9ajWap;zy<dee� [IjJԒ@ 0UTVH&�xewP\dʱKc!#bb\"f _ADdk$XA�xM2dZM3�, &cP?jIT[:wOY^m?M?Md`"Sa1^53E|nO_~Nt|8wcu Æ& W;~ؔ7�ӓg0�NW_f|1S);$;WϖS>BR>T@} ;�4,8w�gsXay.{&oC׹bݽ `[vi"fܥJY:݌'oH진Jg13K<|@bjOٿ?~g8zڊsXm|!S)7˛MB>�kx/��{OxwBi[4\sɅ]]Ov߈IK.64P|X�)z+vfف~^*Ҷj%wn}liM//T˗f+{ojYvF[Rʾx6s@GW~}Bs,?bW�!utmjS2E#vٽK0W_iH̚호l@FeE7̠l(+&¿0�A:e2 Fi[ע)�g\To �?:'偯ߌsk~#θ)!,dXhQ h@m%gJd%vlZB?dl%v$<M *xy{3gMmA{pe7XAӉs?x$Rn -1N&)eRv9`wfnc,ks*b9Dѩb�Ɲh1$EJM.-+0F_ZF&EH ZQGw=_[=EuPI 8۽43\E01EZw}FׄE$~3> z^ښ4w|Ԗ믘-<Xp>΀cHx|�hNx% ?Bc#iybivaK:.`N?.eE46`eFX4k}CFT[̡k; ه%qsY[Վ.;B'eH׭Zx'?754#ŎleI:jػ67#iX⼭@F]yx"].5\ϣN7',�bV4ּ]p!$i<^(U+M- v+Qi|(Y;wBH9hLڕB5So8l֖k+ 5ܼgn}0_ȤIg^RީMkW&܏ $ᘨoTے^f9TRSN_*�U+H5lB]E5�*!uJv9G@{sD[eO#&NE`jyj|W\T?ҵ%[!R׳^.!)/{/uteKuжJ+vxZbI. BC7pޙ]KX;|K%" ^i&~MQu]Kdﺛ'N=L߉:Les> 1p0uپ\]�@j'F"E.:0~R8F)c]l9��a6MN)[a%Ea�Z#&cql�$ 9ii(ݭ;x8]ҵ38,p$g!�T\F <Hxo#ˁ3 �aB|dU A C|)*`�Ev%7˱T]aT,E>/8%ah{�a4Tx| lJFU两Qj̋n+_gxdIDc‰xL/ŀ=[_uY*Ez"@ϔ3 r>f^B h6zsҚXV  N^{yErِ7s[MB  `>8z ,U h l r<5 e{NJ: oEq�_:pk/g oYG�c/ �z0"j_"l^o2g &$ lŝ8Tt†fВWg��ؑ{  E aҿqQqowgT>dFqD?QFRNA.8�|M"E`JՓP0 r&$bNbc/+FpŅ5$.;88\-b-}q{ ɫr[pCr@Ðde ]ϟFH �1TA[RBW"BQᡄiWfBPQ(n@▚jpɽ L~Ĝ,t90|�0>#&'0XɔqZA�́B!&7ՋB13<^4|<z=JUO|w~L*ᘨ)6m4}JT AG*=ַ$*ʁrIN|Rycu{ΝXlln%mVBZOG&A%Qњr=*- +LTP-1cː%hSSNBw(&/-K*3Ɓo9S-|GV7(C.x}u`d*5\k]# }$<$N!?Kc/L1媉dS8.ފ.mWjp0{T 7V_ʼnW��o�b8r-Ie'N0|g¶;?܀3`5b00\pI`W�:8zM GM}"kOz=3MP( JĒPg"& $ڃădvҩkPHalmA1ꍲXfp4U"unx T-|[9N#$MBa JxS آs0-aa =ѽ(ajZMAFhTգK~*6ˀ'Ne+́jJZATU⣃8% IlXUf,`A2H'Mm+@U%㑘&vhA2fkV[*!OpnƺJj.Jrcs5^z9bu 88|w4o֟[[vڽA~7$,a?虌6?ܧa.ܮO ]>C7B!(([)ቂE~AJb >Pj^>].J#N1 T&k[)dԕ-lߑ8B?LmuN7(AtAܤʫ-S#O*Ih3�ьZZ7JWֽPl+.k .,9̀DRq|nѱ̗3A^h/iJ]QWR! <e)p@ GDſ~3�x.;pؽV0+ӹ>o8vH;_ 0{Uvxd|w?:jCk܏ᦧ[~@D R(^�lzտ 6u/An>)'\ Q:w&?WHd ]�r$)"D&@uM!4(8_ � ė'm5`ՙXV ^NqC?(fr'/ *&1C'|@!qA&_2vv=7!)a'173Y6J +1Hfx<��ZK?rŲ'7CÐykh>Kp;쉚ĩ-G5 ! GjhGHFw˜rdl͑QdO~$4Ŋ)Ԍ?W��0{z_ϭVkL՜Cip:>ݗS+ևi`L׿Յ>j!]�lUۨ|BI@^qz!__u:X;<?4BGvbƙY4[ pLv8 AiI6uWOn0.{B8X.,AIْbwwv\! J_`}F/C�I'"! t%٦> !jtf1i1ZR-- 3 GMp A'O=H$R-Dnp "_�be5�A&я qaaÐ7Z.ZJZZQo4jF_Flf<_Xj�aX*#M�!0w)8*z^PkTjV*j^5"DFlpZE_΀ "0d l2, Ax9!! mԦw#HB:q Sۆ�"D-%B(R CZ Rm J\!PjPƗA425 Ć9f= ly6[_Wgnk;ޗ-+/s 4cCAfA?܅%?B戶IGٷ`1B(^=Çarq ;_!D9RAi_㟚=V́jTfljP7=xb 򛱁* WvNft:k-UO6c0~<��3K `=SCcETP&8pOi�ѱ rȈہ='>3atsƞ< S9dI_0G ֊Z Q ј蹽OW/gm4W`wqa!`}t"g ;=g.&.uj]qzNC]zo(G<c!D/; N6f �ፆq8ڪ=}y7BY:tH#Bze`.8ԡ|5BR�VE-1`�`Ϲ<8RܧYH@vH>p?l%-5EWphU؁K h hgw�m|⋻g%?R0ڡ=~0|;@>Olaj@jc)BPKC:= pte_B� !JaF5$BP LǴs++]=_JRӛa+axuIRu!ٖ(A$8\x4 BB48E8Xm�KƔEDR81S\�єbFa�pH&T8F 7w@⽏rP#CBEiOFlBfAg-5ᘊm "C]@z]>vpZ(Kk wYkN-خ '#C{+8cPo>-qmJ8fsq@-m>:*br*6S{u€ Abo G ;Pr.O%YӄCD=OWAfehTx7kQ M8"P#OfJoK%#ԨMkp Ma9gb_oU84zð[Vl[zZ+rRV+ѵZjrom4\heĂA㶡ޖ^&I\F 18kQVlhxZOh6V-9 e2A6A6�Tq2ֆM~c6mğYY76\`:ŷI̗OL{gc_E 'f>37r_vdN~=:v{�o:z7_\MLN<G~j{g~u76Ycv#kV0WL^࢈Ϯl+nT@("Z]֝Q;2O|n׶| ӑ'KҾý}s8lM.:wHt}}|ycm,~賻~3[N@c )z#?0:xEBpzĤkɷ?8ѝtT$jծ܃ON<ቤIt}w znX^xjPgOOrczs8np/;%m9nO/[M,vfPnJ v!t׃OL?ghKs><0\߶p_6SoRU[i2fKt՛l14Zx@Ot'r٩08 7Z]/3:S,N6McwUx f2ٸjntomV7Fh4fިzo*uYȷZ#=Sf+:K,s^eECqd fla4~՗?`bwN d F g�jնZ- FJZFl6Zf6yƙCƩ QNCFlYp~H@i~aPIP"GKV5Q9V k�TV;�@@e�EmtB쒱O~E2d]b � ?78}O.{$8W}~Q "gީt룿0306g >|= !JdOΫsߞ</>ԙ!Cw_E/+~mP^<4ڲvUXq['^}llbo'C_/f~ں|Ї'~ݗՅY\mdB K6kCU7B7�| ڶ?u@PJ헗!^{nS-& lyi 3#Sŝ|7^-}7ދF'6`c_޵Dz+ح ?9<6!Me]x#EYŝdz*I!!YYLL|omAr�`y?ڋyp#?8*(שrCqxᏍAQb�y6D6TR `#Ɏ `HN>}'O$=hj�S:?O޽72G@ E(j5v+[M�MVZtyn@%=j<}  aC+RDC- p_Ogwgs % z!h{-v$ghŽN{N  ǩ}w`'>3}mHutezd$ =_?q5竌W%j8 3' bN}m"W>Q#G ሆz>5FΫ Փ [ѻ-K 6IWϗՖXU^YԒ_rTl `[< t<޷{^4�5(%hL#l~p~LD4$E"F7^{׾}wg%GfDxDFs߫PaNݺ73OGD#dG\$nXǭa!8ǹ} LP._~sǠgck :^ �ַvmA#@0$[z!7/$̹�xڤcE�-[+)IF :yvq\p ?�lC\ ;^$n=UtQ<D$[o&M7.z)L߾>pbqz ?KFs0Jza;';3OEb9W hvv4Ga/m!s _x>￯^{TW04S/|il4pa,#AGM 6x?.jG=E4ގ睘}r.MGE EfMkłO֮e}37.9I,3M0![nb'g|6][5-+)͑meQEge6g|6vf|63sYgyQeQYo9�a/ˆK 8c;~?t�I$I$I/ԪPPegy6˳i6ftZ=f+*%A !w'۾)^uE^m *&A >]\~Cd+k;mMgsXK]~0FPKhKJVǟ~a+y_7.wE)?O<0sHK:o/4N&heSamq !s‘�.COakj8z!g.©]kxnt}sȁ~-G7yy+ӏ?Օ~sz񁗀 +l[ ]ʿsc�9po=�ŏ9۹,>h.ݮKЎ k>3J?O|9iOW#V%O bjwO'wL�S&ɰ6>6ݘCcТb bqLGdbW}}b?O-̧h|`ƻ^~qo6zy?03\$h9Rt-B\X#@HS?7/z/O{~/_X^MYV>?cѥO#;aaG{d !FÉA!BMt}j-wsD5 W=O!m + GRyەǼڏ'��@4Ԫ2 O>?OpQe ݋K.<h< gVGxS%]mDsza~謐C\?ҏӝ;55XGx2EB7vxpI>K_|n)-<?4}45�^xgW[/O.+)_ۏDOT6[CՆU[>`p髱 ;2nBtt�C>͋<Wޘ}sO,s9u3{Mƥ5 |�iowRcY8krTr@T^a}tp^Ej ; }+Fbs*�p$ue$I>ӼlV=G%Tٺ7~ǩ`mw;�hu=w-2y"a9T <7~oDϷ.vga^J|'/<#<Tk|du<{|D˜WsE!!~%(s"Ԍgi3l+{+B%Akd "-`+`)djPƠ<ǪnaݤjYO}3l0A}noyflel:ͲYlgYϊ"+,sU%i[Q`Ue%i" rțu:N~#M7 R?WVkRnt6L=t2M&tgyY*UjjXwۻ -"lku 7(P#]`TbR|LxYn+t_ψ|_ÿ3_^ 9b!wv<ƕ__/X[յeo??^==1?ٍoُ/g:O-ߞ�}t1ǽڃQ3 v}pU3߾?qI*~o>w}nݿ9k{Z쇿L!`m�mSR@n#w}K{Ͼ WןzϷޘ)jS£}S ٝ77Dn`s.. Ԏpl>: [?|qh:ouu P>_}Z�ğ ϽY0ĬϬ|ߏͦ7w*>i" lsvY0<}9FL_3.f^1γ>'Ϝ_{p/L_Սђ}{ȧ+XB3k/v(Ǘo={tGF߱?H72W)"6dy%[nsoknMqX៸3m k.ݞ0[7vkEޞ4A2>5@l2f>Bmt-s 7O'G\}(.=m{zeEL] <wk^=s~Oܽ8"2Jo|[݆募ZKgֶN o ߺ-uj{K@z}gx~9V ,_$6o8FHD\n&?uv٥oSIBPsW5}ͣ?Ծ~ )޸|o?~;G{B"#_fيy7i :jv8)L Yޫ/ NS c+I&qNt SgO^lVkN=AG?g/D)WG]8@H|χNnl _*u9"Ҋ|[}5m tRtSo^>Yh$]z!DpN@( }ʑ]jl2SLyP;I3g/,woOG$؜fZfsVA wXZ<X]]K~uj T<کs=G6" K;ǣOoӤ ' m-׷ܢވn DF+百%uUfk�Z֊4Zi"P$]'2Kp ds{|{exzCqw=ooSݼ;8r2V5-}V礔�QRJ AvX*I[SW?0~۾#AbGWyWLHquxslD ?[+5?{f7y#wjRr<j4'߿Ɏ'VYԏW| o??6sm ~?{o(eq~f\&?t̙{nNo]ܺ2f..85CU @�[  6"�G߽ kpA}`lmgLݚ޽1kyrp3N?tH9R^c 73QÊK 6ȱl'_X^9m=Goݚ޻9 {eԼU)E/ەVnZsOMW@]^y{mƭ D#6+|+õn:;"<>{m[x_}mٽ[3D<5<9K+0}6s<8M}5צ.Yk7Gv7wV7B_i[nqnw;{zi3G'ύN]<5kp1,:dD#S?y}/?[ZN~?ttP<3{vt6Q:t`ЫVᱨe- ]O8O1?Di͠ݶ0�<O_΃۳|e-9qf8>ܘdBNAD 5HyQG"Сk/6IĬ5e6 W 3K]?skG?c?llrTn83:9<5Z;GĽW~OW|8#v=Ȧre=]]ON/=>װܼ|WǢભm G˦jo;vw٥íA-=3!4N \rs{kQDQ8ypw:6rfaAa y8�P|y_瑠6ۛH7VC^g0DE,8 ș97$ B@|i3ōj�gPV\BtZ"AhQ!<W+g/xc[F;AqRJ>]UQ'}RB{d{b셕`/?RV7BgCzB|;^^ʙ>߿;Q]}Od"HwOK\_|fmۓo|27.nnb-><brX-'+Z.$sqq�؞).(9Jym +1El'\y=:ᇾt\Q1>(Wti5YZNY |cdOVT-Em*g|m[%pwif&e{1$7[سˆAt[ AM{)st x>0o3H,W`Esqy%m&=ݨU`̰1 0(Boi"kZD�gI0JUNTZe8G�5pj T6S@pM8"P ⏠9gq=B:8KZk{2ޣlG�Ѐ\]iP~) bYj2I=(! �m,\19vwx&:8T>t��=Q3wQJ̓9zkG'Z_L{O_{xcW>ǹ#tG؟F?O_/~lNQsp-ԿoC;f?Ot_6ZOg;~7n޾uA{wfk۶lk6"V83a_Ow'T\|f3ߖl__Rw[v3}?Xe(щӣe߃,7[@Z]OW>>vᩕ֩{mk}:p;f`({N˟hDߺKs,,-'.^e^gG[˶N N =kq߻{pI}|Ǹ7|λFc_;h׮~`wO<kϾ3ZscryZ}˗aT<tZ.Iݺ:>qf{�[yfkSn]=lۿ{a{rBl+Aq}oӣk@(_Ve~~yEty5]m@fD4Nuvߞ1~?jV:)Z)ZDtI: |:7tSwR(y[x)ޏZ�bG�h Ȉ-_F|a#+k,Vﭔb*tg-)FƢ`5� �" $� mP;YǫH1*3BEMsBH;@0l€Lj(bwЈ�Zk�%oF"U ,Q )ReRtQ@"!!6M#;/oǮ&Co훓Ɨm!ߨ}v YŗjbaUfpnh}]+XhJIh$ٕ΍}o^}e-__Rg;~̇Ix^Nu_o?p86܆V`Ԣ^f. ԿGoMީ,O_{V j(ӥ[ZVEm"pǶ_;UEx?t>.CakC~[ h,ً][S om5@�?wώc�vVW33}mߛ}nB6V2 ݝ۾s !B:Ջ4l|5D=괣h/~r[ߘsˊB&X۳ޝP' ؾO~svWw؏ЋW~w[Hsd<:dVij= l|@#ߐ†en'!sy?MF3QwB?Śɳ,\>VÏߝV'X>bͰMKdϟ b~}0u=/IҜ{ZWܾ>{7Qsb!?.X?U[GD䌘OWK݀$1Do5mX gmVGwͣ !=(�!d6}ぶY.dfāqlSt!�kr ~mmk ?n/Φ_ߥ޾5/?@Z'&?}fj;jqQԋ&فdqTw'qa"Gc "ׯ|ieHk_&*6y{2�Xyh|g/B$}p.fq)?B! l4ӡFýl xy &g%Mv7!>3FZlRa9G+`c|M :LL(ft3LY  Qk$B !aUQD$"ЀTCQ  �!PJQJd(!ɁH r`VYQNrӬMlϦtei>2ת UVHZ@RDꍾd%iAաU$? R$Du1�T BQ�JD)@"H| @hB"ԕr$��(E uPW+RCI�B$ depjy F+L�g !H46kgd/  ЉPA�@@�%UR "Uv Q &HdJVTt]5\kZ_#$$ Ah jSr+Ye=՞\!j�TzÅAyP*(HB$'TDZ"/i>G<2@$DHR L$0"RDHզ]poնtJGX Ӎf~_;a~~;Y[\[el2t=nJkuqv.i AY_ a8` 'M뀸Gݜ6>$S:7C{|ZRךɕ{vd҅gg7tKo^9zEρA G<B̏p ;mg7gws_<C+7>d 8c|,+G+_Hj^x+\Xsw?mR՗_?:ߺ6֤g. m!"$8)o{+{|(o^9-*bMb�6Yfj3s `yb+\oC/܍{zpHw?g }6xC+|G&Լl) Yۘs$怗H}Ơvo_#PKOw4\"erIP8%{L^8y+t/tR({^QGDҵ7_}xtfp3 kR;ǽ#L}n޻9`i͔*Y߾Nb6?0B8�@sf@lpW[#$8ң@q%wj?~e?TpqkoGbW"ܻ5m>:\zڷR !=(XK$9ǾE[[~g\†hY@#KysG(ۓ/xLdkSOgY|~n3ĭ8E`Y իz 96tIE[׎fkǃ38>w"A10=y>�Lʗ>me_nc$XKʹcP?5d<G@"`}Ȫ.b 2]AΑx3LFxs5{w2&B-C4Wu\H)L|Z;;-&N3}9ȿʨ'D]=w�u�z-ac@kҊTUIyBElfy6˳,UY*4i"Uˈ+e*v.U&pD%4 (]QUT^m%\EUR̬*)gV0!C6]=ED tXnfg-/%D|Y֪ˣ|<U zPؓ@Ӓa/4Yj9KssQ6N|Aj 롬%h MZSY8$NlZdYY,*@HJ9r D(Du.u}5"[4k 1=7kx7/ u܌fkhaȖ;uueu64Kc|=([ ?[:n5g _jFbٴ5JIRS&53ݬOo+W9=RFy4u@p_~QDP@Lĭtv]y6m V`<Ō+_}o~,|[mf;XzwfuKq)En MfcE�Њ3_}kƈ9ӷskęK SqŠ�D~Q~;??_'d1vpCg\$2wNm~4l^{~^=|6_:gcKG1fdIp تhZ߸HgՎ:qg43g}N&ZR7z<{Ïu*wv Fq =KƞS#d&1bWs7]S�prGInw8 �|=n=>lMzt�\5}<دf,+}_scmAΎkl}#}_xwJ E˯+uxr.G{PƐA=j\m!y<#[ۦ^$ftw[\x!viM<P*0$l9%/Tj%ahF-B `93}A `ޭE `Αܢ">8mD>u=ە*R;`8XɳAOܛ>7zEK1}ӚbI^g"7/Oq Z1xq6 ߤkƌ_GurT|s3.'O.K=4}PX$*|g/<}G;.`ͳꯥOnKFI"_B: ǜ#G$$9!51LIlïb2s4v?<9-1y#K2?Ll#AbM_,<0 Y1= aIV/]l j{WV(("ϊ<,fY6ͳYMg,ϳJU(4��*9$۳5rʕmXH[c0h�@d9`6562{7]ՐLw ;>!}^YO~C~N58:_:B�lZuvYbRۦ5P1o eW.R\D4eY6fY͊|V2TyHDJ/1[K7j[Q/шxm[PΑ )4:\x2ϔ4.j#k "p{!d|.g~ 8<~ w??�Π7؟+wfybSBxǘK<?|+[B�rtPQy^{}b-v|`6W,mcr� zyXq~@|oʎAcy_?t"E Gs8­oڽ? M6O>B\�"w'}mg}a߭GM/@pVvSF!&�$ ջ Co"?[onJ+OW[Kj-v#dzC~ټS<n3?s>xս';l)FN.ٍo,R}~?fnKǝWVD9ܺwcʜ?"0KFa ospwO�r6Қ2b.C:G/9 dULBC BQwM1</JCaLs9Q(`MKЛ_o*٤/^ `ཛ߯=뽛{.dVG۾3_0}+K߹}CF<:IJ{>Vq!nyރ"ή٭ov;3\J _n!|.4] tw`xu@�tNWC "A\mۃ;ӝ{3$ n8%Wweǭ}bZs)G0α<M_e=1rgPC1! nv\>iM/aC\<3b �L'"7_{op&H6onFqD=|^$X ΍RA koƏ:kDmKט^|p9W?w6)]rGa,~NXאw o2(  R/t r8茰ZU#I$DvybxyQ "KExC&B` xa%Ag,]{sy׳Nsv#p.Hr}r[) Ivl ? D`m-?@@ B(G�QMl?Edenj.r6ͦ,f,f4˧Y1+ʬ(RF$!@&(%&D ("V,jijmy}>Θ(0G@d9`A!Ʀ~D l�4B=&Y(X{!p1MH(@ �J݋lLXnmٛk <Zs|*8R{:1E\+-�R?je|;QY,,rUUݷgEW>"EʂT)H%@)PP@vU.`Rn3"9:&؀m7+_{68_Owܲ?<;?O?{킧_X[ۍEL~_\k?O-to׾pǛ*W~/]x=散ꭷ_z,?Fۯ}y?p;WgǸQsLpa6:U~j`k۾u6N]lU+ڽOspx}}޽hZ׿챭SÅ=?ѻG[̊*E|as͛\^~c~/Bُ3{Zlǃӏ̓]Vٮ5mwl,t#\~mKn ^?{o|߷hf͗_~qWizl|P]{߇O-[2Y<򧷧d󛹭m_qx#le/lG O[W'r\u-ֻ훱]}`m:t'ܟE<ӟ/>ލt}#Yn\><ĪuUn_?Bwa޴7{swkoSGش7_<5}b<S7/线m4yUK}WzM^ޠiߣ �Y94þf [P$DZ&�{L(Tҝ;ߡVAYQ,mg2aCQETbi]ՍTh�ڔ9.^srpwfܺ՚ ?Tw;z qcF�HνVdǞYG:;EW�Zj7־$ՊU�T5KʲLB@b)@ D2TOjZW[ՑoLh\|_TܐA3Ӷ{[i٥Y_|:_P+_>_]ؾ28+-�4k~إgۚ:wW?&˘૟?xK/Ϗ:1{߼J(-5?7] F>$57/OS_93kI*�?{^ҁ,2`v_lnW^[׿<Ԫ{6)΋{/+0p`"xbm+v-"cwbg,5_?*�O?ؖJLho'o۵ujT._kg/E[}ޘarCГmqT[fCH͟p_@9Uz`1kG7zߵ?uOx:._wZ9S0=/ah;͟qBkg>z`W]n=@o818q:\TqtP|oim zv*x틟~+V:3=~vR$BsS)7=Dj+4n쐙h<Bbtci?moK{zT~}ɳ/DpE7_ik}x6WXߞ7HSwՓ.;o-}Ltk~p'[CÆ")d0lkM3 ߳(ҿ.8Q)iG8G"z僧߳Qѕ^wlF/&h{�ܟmߙ1켜7%n%""GH< ,E6 6}z #z:ǣKyr{6Nax,oNZV'D臷˳)v+GnM/=vp~x|X\ymޭ;unk3E_](OreKMTxeBL߹1>i�MgS�ݛ']xZ L놻6wS66=f <z@yRkIͳg;ǗO?2R,ݛ;7ƎtB<\&vUi�R|j�]S1q P(<uR5)F&)7N!<JQR毙] WDOQ66l|z8-*Zꗤ(t^(jPWM &ETj{:C+:juM>�tTԬkU&��$�kՏdv#�bUj.e:4[A@}l{FAchE\[/|s,եq;&$[Its(R�@y2J8bb =*\ G}t"X vfz*@DI$)%JpT]Tu_"A֪%ͷ#nqyAj8& j1Nدb;xZ^h<i}t+퓳 �E?E?fm3o}?^{ϸs6%vT%ýW^ޝS//6ސ=k{0 =ǞX^^MWSy,䨜[/3]iMDqZH@>\|`,$6=G~qߺ6gv<_SERbc̹~|ұC-~y?;a}Do#zEϯ>VWʦ8/wf/}no6Q=:.>؈?al Kiub_ՋX{9{3߷~ٵty%%<S壷^>yyJZ7a~ZյK+S]{&:UIqsovՃ+gSB3X�g?z/t !|Ɖ/g~!~sKzZ]+r=٭+sDރ�+hOs[~4y}c{2ⅧW/>qb,-ڵ٤ɯ}tͣVP СI6O ?|Z:I@)鸜!S'ھ7_~KFcOMý+|H཈l~}xHԓ$wn?;wzno5>|omg7D€�4?{wݚs9"-s'B Kb V/Q3W:$<qfx`0E"Wʦ*,:`Sѓھ;w{2>(%ɏ98xDP=e^Fh0|Nvo}/]1}R֩ 4u.rumv9̆0}}&Û>'r }K+0t lA:^`vwաFHzvqkҤqߒA\?@_CHCۍv>$W~ G<_y`sPn$0�HTH7@�AAD#"4\}ei7*RZiiҚtuvpuNruJ)"� rBV4Vڣ̑ˀTE8F"�Pu@TL(\dufsaoh5@� BAV?�Xk~ $� AU[o+mR KDBӿu(xE1!D@ Q s E�@�%PQiRDUBCuTtީh}3}1D @']%& =A bүUv֥X�PZ0�! P0@WO)e"e"$  $_ɍ`bZk"UM8gF񈽌Qb7cv<�q�~'jVcnZ\m>VB@hƁ=u'+:(_;_\vscWc[m\Wv_WXa(gX޾2_%sͽVn7kKJ1]" k:VM䰌k80mdf  BW?@DBpY.AϴՅ?\!\.&[F;2pۖV8+Bd))N�{y[Fko4=W߿/z#FcBW7я\t÷vPWH2׼PgU!l7fϓ<M�sAvtO�BH=t4  3흻?a81=Emר朝g7Bg!L8h[^~q=IҪ,2MKg$/nQo ! ؃4$q0B ~ق~nFnvd@B~!xpoA[&B7 =t)l0,rWQjRgt词,.욣SW }m/[ 1ZZlR׷7}/"S8auLMuY%ބ9Ύ8B @O%w[- "G'ϋ|i6~eL,S7mݚDQHayhm ިxHj!F !aB|a9GFaY ͩ^2TuEH[Zs T�`''ګP yFZk+"$!ݑo"Bwr="Z<Swo6;\Tzh٦_$x ӧܛܛYm'HRQdx"h5}5 mfA-q1TL�T !q`FHDՍ!HFUܜCIs }]߸ "r{~9ve*8yDL_tSĺs*-$kg�lVjo6N̞_D!�PT>3^bJգ5o*jdJ?3Y{H`Ny36r]@V7T$DS"$ P`]/0]P\NZ&W1J<͇ͯ+7.hBnfۛk& +U(S-UFy*hj8J}IT* 4�5)ҤA$HbBB )͞ZimXM-nZ'W_ux\�`C#N~A.3?ߕ g�䪟>ϓ:ayYPfKЈfp,Q\;wn+P"_J`KNpsyV{/7xjn4 >B @ qG۱![.Q/3�8BX'*6X`z:z"P(c! 2׻mFFr�#;1DiЉd>1bϪM)_rVG. Sˀs}?76��z_9>TN,rrftPd"rpn Dk(f7˝`.q\B'm[C!BL8B(jCD؁>i^:_!@g*T=bLb_8p"8r300t,H|3, }[J !!TTzN4=E{9 a.B3 @q!9B!B\'Cv9 DhC1NZ#v�y@S XW4.F-lG?%EƤȣC4_M3}$%Cx`8H`N3, @gLwv!BF�!>j"m�o\{maۍIh S<;ǻr8k B ~ó ބFf\$؈z+;<=y4-EV4���IDAT0OH0o F$hH2Cg7:D|6glH;BL_ùDgFbΑ xcu#0*UAeQZ9c> I 3lH@vȳ{9Ώc1 ?h$vHCؾ:;#g^|NջuHخ/ZLjw,K]p6`7Y\tA$Xp.h;2ƂAs{"$�yȲPv0sGH$t;N k7@h2/9ǐ>&mu~9iRg? >C(9G0nǝSo=(n\AHw��ؤ�^�L{  Nے 썤$f_nº\E#֪�BiA <$T$BB҂4!j:P7"Rzqf@ ɼMzԺ�lC"H"dǔ!0|ݜ.$@k@I @� И @ۼE'kӞ4CBC u"Hnu?�k%[Nuk~!ڛ+~WquҀD|bͿ H ۽i5r;QԸT6ZL"M&(H:&ZT f\n׼Oی8X09&O|qҴShcr`*l!b!p5},/:(%s%;*e#4nb&bWj|x_A=.^ߌ4by!.{<G9X/n(b^GD0wACpCp΃nEnΐBbaQa7k]_q [Q 5}D'3`2-Ma~ !<!$2l#ނw~ j;LC9"x0}+MT_.kZm3}&bl\Fsy͏L+s؄~C#e|DhEHbswf4Y\kuzK4]9Ԁn7=Ҵ7mؽqgs[̆B tv|wYM`k{:9D6*S?ڀ۳ͫvcCȂ:!*d loa`7c.�vݜBfh^&j6�n-[=؊`bmb96$Gr]H5afBhKSxcK!VL/Hi׌1`]6Bz>uj74(9n\>j[O# F∙erB UHxy/ٙ7hm|  Fk\C~<T�"" $D |&2CQv-I>ko m7tTĦ:WJ`_jN !jn^(R "]< zkU3CDU0*1hXL�ZW_ID @�_ (ABFdTM(DiH@Y5� jDilD$X=u�-�DUT͒$8WZc=:�^uj1^nLWsZ/ wA)*�M<?ޝj˲6s�qB#ޅARHD0Tc}9V t|Z"A$J$I$$I#*"8{?Hgq#͒w/tea7h P 6*()`\L 6_oD3zYL^ 'cWAXzh1߷HG6s[*M9[8WWrs|ġ'sG2*IEĐ;u><o%lX(r8aorS.?~S];5sw7LM]4aZg7>gSN/w-?*x+_BEk9]tS _`!}MDCK/2ٮ:!{s|6k񙿰f;^o.`@XfZ+Y5Gۥ -ɐ NcpS/j\^y`tȷHomZm/ٹ|\d/~e{ Jz[:cRdW䄽r~xH3R.%fecb֫O{/sj1RxC<:ƛjj3tz yc,}#"rLd' @|n6 / !E&Ɂ%*quƃe9^`K-"DV KĦb1_70rgKZ;`iG/=xeƁrJq\A,_\V)=Qs9*qy~%BUQNZ{?hs@爞E߿/6myQfb׃ҔvpE ;v l9g1>A'&2>֖.'r I ųmR;[gn;k .IZ&BR$Po8~TD�IEMg@D]"d[lVfD Ԉ ) FP*%@D7"!h �P*r]LG Թ&"!%8Y#O]ިƣDB&M9 @) R_!H�ҵ�AZ+tAyQJIP" �zTȋ1 ($m> AZhq$IA)T)X IT,RjMdnZ�=R`ITYQK)IBJWX7Y�"듫)Po1 BiDD!"(.#hʗHDEꕸ5)]S3Ikie" 4Cr -;z_*I^fR4H9JdZ' O!$SmN ňVu|$ yJB ((�Fzg1MA'|n{s:,>!w8v>}8eh,٩@|Sʼ> {y^V&:d_1sDHRH?~aV=:Ƀz0((=#}\0f._3&vEݮ\e.B >6sL o00a #H"D$l[P4or>tpDA9\6Ikj>M;Ʊ뮦}(!'p0k`ާF0Zr"�vCä0X%|l0XyZ@ہfBAZnl 7i`nnb#Poss>BYp ~F 8lu BADvZbc"I䧫9lOtL"veG 1!@YY9֭�8;=xCٵ9G9Y׻I'ή'Ϸvχ",.3 x~g]<< ^|z-9.9 �پk $ GHK7A9zXsݜB 9+.,G0Lba#pv5}H34ov P6ֱl b9즇={xy_l?s"A�0G\ o ކDGۜ#49s1 <y~{k.ٙ%5Qmv x! :#?5x> 1~݇vWbsd<?H$`aDf.Z gBOфhZEY&!DHZ+Ii$,,ϳ<֯ B@Do(�EQ$HY׸b*� �tQb5 AiJ 5hOԵEqSO7B)<�Ugк^VDzUqJDRes%r39֨H tI3T0(�Rk&!@$D HF@Qm F@^ܫIkŴJk-tJç�TJ ܛV\z-")] @-46t�dA&j4*Zh@@H*JM�YAXAli $!!iP@&"DnbUeR-HRM@$ %ĀH[M_qRz0bK$3(�)MZ,J(@p  &6Ъy4K?�#҇,�tkM~As~ +9a-q` m{S r­0c j �`Ҧ,"mw]e6g8`^%s4:[?ydQEr}icL`o&Q2`ֳ3v6!*b~-<M-6ŸȜIwo4bKXjP"Xzz]CN0ҐJ0w%6v 0,:+E'^!js`& bcFQjT3O([ usgr SqPa֊!,߉k6gǂ<[VegB"ĩٍ8XE*a4Yc<�=260tSD?9}aEPh'xv9-6WykFx9!Nn!C88-:^&B @Hks .4b.N9šv!B<p~u` pO crk[ف6:s 5eeX3.gY\gq8@Q`j s9gG%t<涐ey>pl�_c] Ϸv y6<}!l4yqv$<�<ZF+scs? yXx{<#r\t=4!b¢!'ww)h bM0! A|z`F ȭ8~$wk�IM_K$;G!\An-KqD").Q\|3;�h1w y`q|:l96<o$h0B]$H$A$1}a<nD`{>{y0"tDR ^c>by`:#8}j6W8ۜAhI9G6MwA#Du]y. Mbh$s0 M_G'kn0( Bxr=H0DjK3:6iϠTADA+*K](<ϳ,Mgl2E nH1L@HXVJT$@8@LʪJ `iUb Qh5Xu<T 9URPT*PK"EJAQ4iy4+ 5UTVTZV)M,iVqfkɥ,,SLx(du+YZ2Bg:׺(LBBTYV|T)XZU5u�RJEQD2P@Yʔd BB]s$КT 4&K:&@TP.z t^i]jzh)4V'#&I227Fjg8AY*+</Y>f,eT @B@)A$RkȕJ&;WePkRJ)U(J!IHEPj](URsƼ߷X-J5Sz:\[A:@˲,R�hjkF? DTeEe$TUm{KI+J]*/</,fM,ϲ(R�B)eW}W=B$IG�n[Ek�CM=HA$uiy dՖ!c[$ #X|L }>ja21Z ?¤ nh%v.͵ao,>eN,� Q/h<3,!<@!l9B\`]ΣS!&7 2Cf"pbₜ&B\-w#A6]{Wq@5']|N[.6J+/D;@B�v0" qO6 ̈mEF/v0 nCq߉-+1\44!Nsy!BSAg<`!&+9LC L7O xU(r>3.HŌ욫�! p+HB!!؉SAHxDP:-t!а<m1`Y\gqqz lG.Lr((=̚ gq �$\!jAoǸׄ6>! 3v0XQ |!~_N!~uv X߹ Pd<U $C>J` !)� 8@,oCk"$ݘ]`ɜAgHz r1@ L4") Fu8f59: x1SD=| 8`{:G'~ZL_ $X 0}^$hY\s 7̳GuP@Mg!H4M_G$h?zHB8; I:x>"$?<˝!=Fyo;" Rstu<?5As$u sT7!}p9Ȝvcȃ$v#X ��hDDեR"ʲ4RKEeU4K �H| HC@(HZQtH)R5 U "/(" DE"V7O`w29<ZH@H}YL$T�Hi*H$gsH HH&i"YVe*gZe0V k[7ü(w;:)LVO][__2;7̋2$I"hU*Қ ȅ@ !-$ P:+BHI" LEh B�su/ԥ",<2"L`T5 (ZaYE*(K ҅Tp$0ԄaA@RBD&)"D ШTJ -D"6TYYºj �dZBLS 82Bh( {5sPъ<sncRw+%K)Yx -mɈe*oр ]B$'"RdQU7M$MD$Iu>4JU6!^<~n(Aguv{MAyՕW�D�Яub9fn8,]wϭ"ι޹XW1D__A&9ˀIj8͹|# "Av19?m xB16wl<hs䎯 # u TV7Dߛ ,Kj6muነvH&>` "ĉLf_'B'+ ݈3 rC4št)kAM`/̳1Dv`3ʋ>Z <t|Bw:oF!{I < DH{뭫;-c݁xn(2 zl78OmGP`ڭ:�ܐ7ϢB,k1 jwvqLE7x~/?)MM3,<qe6g?!>/'M޹1}B6u +4 xtRDC?;Иe [^O丳ZvqkE4^e}m*5g@(w`BB=u1{f7抰0zyl^FHct> `<1ަ/Q;"v𵲸l\^-tlj>`MNa3E"h�Iz[\BO[Nq<&'[k\DP3&YZbx~'a5}Ҥ�JLiMDHZRDZi-A|HU J MT*(%)YRRrF�$@Rk6VVvᙵn-o^2$ j5*7Fmԥ"RPeVse2TQHIY@*25Lh8@2P*|F0Kj'O?\JB\N<؛)PK'vpi(z<*d@@!wj 5 HB"&B@ҤJ54+U 8HJ"A~ �HTM2Y!H)t!5%Ο<HܹWYyi 9JE4DI\MJ5S�4MH@HIվdE,i奀qYȁD@.KA Hb=(�j"J!Q`&@jHIf.s"j`K H<=x͍-1>W'{;lz4<`k4i�Mz1�Vu=�+36MȉZUALTW!!Im)d>Ԕzir]sR.,<?1b\]֜/}jYY5, .ؼm{؅웰CW{Y0+kG߽Lz.2{'}vIF/h%{ Hw=Gz1f?{T;lRTuЋzxNU!o&Jwj65P3.85Ab?ztԼzwc$pՌ[U<dk(oqE,*A Ctwt&&هoi^ât߉EH/kňܻ[NGrq=w^qٌ-<CDwO7/"pMǂxk9-nGȖ B n~GZÎiSbxO9#=~KDl,"@g WOǰRᣞ־{1{^O:[_4y(׼!rsMQ>*WqXGg"/z5ԞsKes/9GjA;"[; jVƅBDh<,Vj iҤVZV@rUf3tkP� ESM v�,] ՖL pe5YZ VdEi,4BF]"J,(),/xltTd27)u%ILeշZ7慯 07'D(5PYfy F&W7[ $JH!DK9~*3*F2M BfFkO<m7Τ B:ݥP$9KݼI8XN4B"DZYY*mMTIJc R BhETN" ae8T)g&Z@ !t}u"4)4Sg^Li*4iAHD@Q0Y(|OS<X^o. i*�,t6SrgJ,t()@" �$JD E DKsH)fZZiZi� 6^oMP<~i{ptPDiRU7iMQA�5 �Y md6D!کcG[5VZJ!SP[#k-�"Brhq]zf :G~l yna/�4R9>!?=ttl_m*^mO4llIlSOcpB:]"smV"/�E^:ez ]"Du^W3CkMiCh(n%rC ?O|NZ[!^K65Xtg˼wÝ6 fl `e E`EF08dž5}եqSC?k$8#;8ɖ{G1ol0orfY3qc0};EҲǼ$3P]Uܱ|0oh=A+6u9 %IsqpYbRu 5{/�E8[k`>j!q =oqIo/0x7yހw1{^"+!__ٸjOwog`8T 7[Ĉyr0<벉# `A;#yoC[Ax4"L_AՏ6q-/rOGLz4}�}�-ZnLŝylmphJS"T,E?$9r>ʏU<9"&BMM#m zϩ !WFR1 6m鸁9;O7OH0\!0G&E h~31)lB�؁ƭf'@#T'*ZJ)U)ҪP(J5 "Q)2kW ]RS1_Z_>sa͍3K:)gzRgDHTAB $;*޹T 5 h(H,o5+LLJk(X"hy>˲YQf6ά>zgVdRd"LG{;p<MABJ)PA2óOnza�� 5儲Eg.l~brF�=_\-VFi"l6.r%0 + fOiM7O,}`0Mho;۾7MFO$NvlTDF@I�eǀ(HVHRHCA,qg`k[gέ>uj}iu E@(rNك;;ۓÃirA, P�v#M_()Z:$ܛ>g( TkJwHL %BV[@)0u3RQ^H1B)jl����WaU6a.7^ͬ5P.(˲R�DB �Vo~ȩnغ\Sl9v eC\Zg׵Ɏsyp\AKYΚ`SM{Sw, ty^Uo~>z U׼(xt0h;}8d("gkң�9~c؝D`]'_`F3v<x!lfMlnlYDPA-]j[D6pVhIWG>�9Wo( j=VhB丆9n{.;(RO:Xl +~v90Tp!L:jgLzq(<Dvz;lC./hMgA67)B )Lr$IOg&"e:iZnk;;O'mK]"w^uv!7ݛI_Ds_w戳B y~sI9/r%aB:�SikI-uE1aT,0(e4Vpp B\6Ā`F IqGH0jgi"2q #A<G$a.*cl0}~ `;SzIh7 |gq,߂9:h ePM ڨꡝcO.rsd/7"Nq42M_DNTĜcWI=yrE@G�<EU0Yr*3IuTQ\*B �(ja<Q.H锖V=z#y@J+9@Q(t:ζ 4\ e*)LR f w� ($ eGY6!(֓o=ܙOC$�]t@ZG^ yk{6R +@p6O80[{7{;#,W7W>�5ލ׏vNx♋VONPgW^۾{`:UB)I*Qa֠JQmD.յх'b]}-SE@RA+I P�RCBJ5 @�*'=sꚲ\aL r}cӥ5qڥ'=R"b}NΕ˗vvwz~ƺi\jw20],Uъ߻v| |eMwg?#)+4=NZp24e"@)DI.GXx�� Y Hi$V?Qf"$5Unב5/I T@,QR$IQ�J)z'łٮdxG'%AշU6IZ:,p o 3 0h~&o.6v�; enQ^u=2q*3d~Vn`YYE3?nqG028 N\MU9`C0r6C#aB! HTGߊ�f\ sXwK@G84D#e!s;խ r l uߵ@"4D2Y3o&E` jy"P�rL/d\ML֣;>YByg6mƌcLW`7BBGyh 7}1n7BqP!Ԇ $}L3 bC3e>B݈:裢a<�C]nAbFlVȎ8 Ժ nBN6DHS65B:!( $%ܤoF3#{ysӡȺI t8E-iۑdO6�Cd3}$%7}l*5BBg"aS&B g " jsv v! sp;[W{bһ7;3DB!(BPA$`#b`緇QqF6Z Q[(J YG8秿-! p4Yyi!<gC8Gg1dPi96"AGaTslQٴ3H*fā<g Ɯ#)`IuE6پh8f$hF+"Yܜ"sL#slbm9= GeTZs1ؒ+8B"O^$@̔9G Wt!owM:c+h: Mtg?SHr+hMZ<9rz 3|To566 lf@eៅE(<LӄPH)d"�ʯD ο%٧M�$S]VB� �`dFB�(DHJ%Te+2�cr-2e3fjGbo _xX^9)QPj�49B%RS!ݼ{ B `0�̓7^u.H`D+(,sڿoޛ9o,n.F 8qsww?ZPtB5iH@J+5),htFbBx?�S5"X�8"5v$�ЄhP,.LkE$5pSӐV,?3N_z'6 +H9!$"hSt7޻u4OJ%%B >XW 3ےT-lV KKR 'B*M҃� JMZ+gxELX2 %3fPd5벱II2Y[0 Hi@ iU1TmRWrIc)]'#&�6Lx$\[0F#5}e]jRZ쨔+/6?#:"c'@cMMrPksVFgbj([|#)q%a7;i ! 9c }wrjcrlxmg!ĉNvT0}D<.m"$2\-*j[$!v :˜=[F !&{ͩ&fԋOlu(o;r~r ޺jCYSym1;ƶѷ:}Ζ;s,đE.lIQ[ gq `[6Zޣ"zorOg;Plx1&�ux"Mn8;)-F/QT>K+?h9f8 X!xRۭͤ>Mhsi^ls7>.~ g[Dd`<ZnAmo|ǖcnAҦ ha )J?ׇ;hzEM_[v03v~"̉};G{z<?2ո){4<^#Cs`?ĝcPM0sl~'ȣy1)ж-s<;0s<gzA(/Dʿ8y+D�1M_qgFbȚRE^YFEA I�T`zب9MH..oB44HW7䒄q>ޝGZޗwE� @RTJ@#AJD@ !�Fҩ7ZrȲTI&ږڳ9} M]`l\idphe}0XO&R y>-\]"D� ݝ{ww%,(!Bn-%CPDF2C!BRD B@+u *IK @DE@Ue&�@JuH P%q;qBРs5U0[ZJ<{;D t\fr:˵VKrhp. dKH1eYNT@E|o)RC)К�5$B7(4&MPDJ \@_FJSXb։Qxpo2�%B �-T  LiM#ɮ@O&sPJRT$MMRJ!uYjDٹwvtF&f9LFu Y, /+*\eqlWFqv|g, HMu:ؿ:1-FU{yqЈ jeX-'UcX{BވC_3dT2`/<oRִۮfoH܈49TrԶˏv&Mdυ M-$nh`*gyEs[d D&&E 85Yk; CYǹݘb_څ(Z8�.Ȕg)ka%;WbahJUXXY} 1! qB#:DW?C:YV_dS#N P2~K'cR6q\6فoF|*萩4cPKDq9no=§d'm鏝KcnOGZ. zk_B'11͞n6Q/~/rip~frs.qT|Ub4~csBOalpdcGDe_dl ? ނ{?E矁%3Չѯu>?uy.VF5zY0@\<97} / wP vTxz<7حXAdX8DR;HoJH<1;iJHjz?zU<#WHc%DEPKS]jNLMm5fs g ~ ݿD6/d.2.rDٖ�mogn"W,�hRJ*V82κ*\x> Dg"װu}'{le (zwN+"G ӹV,H$BRH)(AȲy!�M�$@ 5U;H CJJ)E4&ze-9N_xDeFG{WW߾;><rEjemx[?tf0\MN>*Ű(YV2%  ДE )R*/HiPY1 .h|$@띻Ar!!""!�&!HjTAe.#z::ȳL IHD A 4 4`4ZԤ�1`u$tP �Xm I53Kz♍&vWL'x|)_Y>tr`$6 f'\4QQU-� 4KH !iQd{tyi֚֓HX=+Qk�RJTçI -h%F �-�UU4R"@J('N=h8{tSZd@"zg<"s D4&�Dj^I=4P.IPJJ$ )E@ T'Qwj=؃q~7a8>so 7prQL8ɼIr/c?/asa)Kz\_ Ϧȱ`*DnYհ1ֽZ=uL\;Cw(20 Np#Wd".|hfwn=~>aXȱNbneZ<~>,)"CH.]G 燸O~"xmyW2Tv! ' +mIo76ξa7#n[ցmg.ʭgε[_7(h+6)Y9p l:EpHZN u BӡO -Fs{Xksv@�z:½=X8 ZB+}@_?<ٱx>OpZ|{|q?[P[i;a=:g0h;OG+s$9DrǮ|E>ca#iQޤmv�vr>{9KRO KPE#)O| blx:A#.<~ <?k=Uo`;džVsu<|Jϑڍ! s$ %mm3]'xs#_,nF9L߱'ĝ]9aKݹ9"RQ"HRD ZFF V] b.mR{w I(gɳ'� 1~_ڽ;$,pe%�"9HD"PbCH*+((Tr( FҞR)%} D�&u*RP@O|=`@+/o_ރI>S Ii޾ɓ/,6ʼngOi Z�tΔ.LHZ ҡHIy4MJp5(EPF)5P^RE^*H_kRΒY6g0BA*4M@l t � ȅ$$)VeY &YDMt^BTHBTH",TkϿ{` /^wN6=e"νW-\XU)̅ !d2,1( J$(A<3RJ:&vzxm4:؛MZiBWGDTE^]!(&|< (@C02W2%aEjer"BDz8iED0HJQQ:IDJ�sTZiѹ' / RT " tHe1ˊl8I"0QB$I"@(�FQt5HDDaPT�M++H@2R+T?10EH�nĹ7UkIՖ֎o^DCBX;=L5 ksX:RGpjßl/n4up'XnqSo~'r0SW7|Ԯ+"ڶ*6뇐P|Vi=@y0ٌ@HDp:E EJ`|x <S1Dy@m;Zn7QrjD]-gkڄ1xշ 9<䍨v" EA; 5'f ka3;sb m\v!=DVvY7)Bnw5:b7qjEF!H8;s>BȻw!^Ф& 4̜]/BzyC_pP|6qvvLG\]HGKrhE蠸s}|ʤ,(NẌ^\b7oodMݘCj[h2cڟO$9"1¢N›h $6?/z@H0QU#:BP+BZV@ h[$5_䇋}è\A[rOOtFR$Ϥ/ 6Q { B yH/㙾x]7}.]ЦoM0+D|VI5!ꘑ`Gi!O2v@M#}D!/f<7{r$"7PXhڍ`6=0/SiFHqfCHks6"BXٛwFDJD @�*Jb1!P@$&rP Ml6UPA.C2)��V3=Hg*/4$4 D bi@C�QDB4ULp*eG B)ؿo]>}`^E*DȁTl]HKg,n<g/.>f<Yge 2ј)ʋ2'=� "I% D" HSHO@H*Ihԃdb*r]dEh%VCZ*%rIL{ZJ$Ɋ�PTEBHAZQUQ^fZHY BRVFTH5W+ w�j@"̋|R'ϯ Jؽ߸nͨXK0MB+lzX7`G&vVB p,QJP4RD+R:/ А$1rw|t4IC eGZ+�ABb4+HW$B %!ey2\@u^-фP )AjI"@ MDLTY^�a p.,DP, Ub"кP:'Jr�I)!Te>(Qjb0G-z �yqyQBD&R�BD AY'e E.eG`Ϡn{$-Zd]XIqD+&I.M�٢z}.8N@ 3HV 0FR(Xfh*zbebBְ n8ZѵT/pI b(N%Iqn5b]\ުL+3D~~f0^B 6!nBx }+V?"6AL!&XABlAFHe? _yqUi !谴 .\iF3 q{q(6熣" AbD&^B@&EqQCы\w!n;B>B\L'8HXI 8 @i'BpfBSAؘ?D6bcu_v4fs$g|8wvm}Tpmv(jH^ E؞M!�! <:GfF"NDH) $?0:T+yˋGD)BZСg>FCC 䞧itNXE~H|z$ ��*΍޽Q٠>tS8`;:D<ǜ#p 1 0zlH8e|-,`x�$3y>DB-6ggx~$<ʝf6愙;OMڞS>Pq;D $;6X 8Qgq>jG>J` !fpH#sv!*z#GpM`Bk ZؤO$5O Ƚ#ArCHsl :c+P;[K3]@9qA$p0jst o_fCTDVG >l�:Ǩt9sަϋ]7Lg-)v.I)V5? q t<Zbyi v&rg9bAOQ>l:ǎH-:G;ocPfƅ1p#tn]xŜ'kNs2HBɏ9Ȝ ؍!HۍB!BbK}l 6B Ph!@ J%DF[ J$�)P# DI(@+Qj)IggYV`.&K]LX:0P`( EYer( BH@g� t,_xr}e+~y+9je0!hPvdٝV2HO>6JS;<Re:Tr2ӊd��EJF. $J2׊$ rC)TdF3HI`4!q:)t!HHT)@]ӣK$d,)K(JĀFR @BTfy)Z DJ1Ӫ\jH�PjO}6&P,6N]\<5 ܺ{wnL04IdPDi,]-dLydB J�H),.Q ЀRri %R R]bN UQB` L$@ԊfYy)- W֒dgL@暊A$ @/KjL<jH4"�I2r @ (BM .4d(E2T($CXZ DZ鬄8 ӡRhPyYʜ FBk-@"&� @.�6C^RR$QIH)͈(@hI"v2iiZ ?OhHvE5F0Kmd�11KXc0"sw.pXrz/ xF?<RnQR{ j;e#{@/0ckd͠syӦ+f/e QTtM0#iCxꐅ9{RPC^9g/ 2*hYE\q\/ttkᅮWrϞ\sAnDbqvޖ=|Q" Ϛ/=L_ԠA͙DsM_˺o~)isGXXyZH,xwŰAHZ.[o]Ad.h6zځJ1ʓgFkM%2Rce�#6\<ќͱf0aD~7/|h[tڲ6'WVw&GeQݓk*#!5ÊB<%9}8;ى;D6_ Nq:@lF,h2<v npa(B<BZY\d<:wk"ax 6AW]10n ]|@?l 6h(?[t3bCA�[@ި6Q1"cw]`̆, L)[Gf ~[|Zz?ݜH0^hT� C"J46vA{H0 "AGDn"(Rwu8YWo\#�mCJBT/gESsB�D H(5 ЀJ#�(�1ĕdp1=hq3)Y!GDD|LGy:V7VG+JO&,j6J=+$OF5&pM:|jr:ή^u@z)BwQ`�IUdOV/ooNV&Oh%YYM $C{|5dͦhVh D$plYrPhf\ 4XAV* \ͦH"]Սte-]ZNS!gL"DI*VF˔'j:P@`ZйYBK`yP0;,0 +kRCiԐЀ꓅' �) "P2yǖV6dY7KW@R !D@ư N2!RD!T>HT8l:+RIYH 6^O"5p GINTֺ,K pT8=<urTjoO.)RrJ !Uh]RAA.7FP&Ͳ]ut0ɳBkM%D  ,  MZnȵu!t NNYK'2iHL+h0EEV`Z WXN) �HzY� (2IT$ Z|2Vҋ@z|߻t>Zuj$I<ə. l! ήfA_.p� WU`? y:+kAgx� _Va7E՟cIjzjU$Lyb\7Ƭ@ֈs2bh2|lEy_᧴8BM?>RJ`@; E!!ȁ<k_fR#FOYؤr2C>bY4@U[nqq``m6X:̘2glZvyBԔlބ5>B}wC&g|8 JqlXLr-4}LE g@qaMןqڜ"yJrhIıx5.jq(ic>B7C: co]\؀X;!B9BgPXVK椟#rbL#.1!P@5D`F C# C=?u٘O tv@OF.Nz=> |h;BvyØsl^uhyG k<hNe8BX E6i c1-<:MtnY~a022T'#M97}s4 wǁ<H"oY"5c[>>ڦOr ! ~KX@6}eb `百>`h"w> Mo 4LK=rG\t $F?Z�C[|g"Y-iF! 4Ea`0$yhs <Ew$虢<>S$z:F,B" TA'.""J@UH�R)lZysKO,_8u&$9L_uxrOfHrnɋN;5X�$8-o8y[{wxj5@DD@լ7@' N0+n]?sswrH ևi -I D!@ $*o9y~J.˰*O8SVחx*X9{u`a:['V7E:�LS֞{Sxt;vVή/S޻7GxRr><uĹ Μ:5\[Ñ}8ء{'o}kh4~|'WenNٴ&복_:q5M`Axg{W3'd8/vZ�)DuR  P(3JbysٍT avT޹$,/6`$eV:HiZZK5 UJHucO,mN.|8˧%81xi뉧Njko^LϬ?ک3KZn];ߛx$Ɖ'>ʰ,a&m_I-HCҢ,"nco=~qד?{dKb{D5̗o^4&� p8pHLe6Ƥ1iD Ii �轻^U]bq?/W]M0ʢeFs~gqLJDf"g))dbR)Dl}kݫ0@k*</>LF'n[/Q`6ٓLJ={2&hٔ1 �0IH^Z~2,[F$a,'a{)':VfA9G]⃖]v.Eh]]?S]v.Eh]}Җ?ЉnDV&}B9R � B�E}e}}0d1k_>1t|rJl_zmwJ"�+`RtͧO%?"($D3މ:~Yzd2?e"ZO DP�0#D� ;''x\`nWp2 "��XzQ 6(nQ Wֆ|(�=vvwgNV! qj2"Lfl~x]W􅈐s@~:[(8x7Q<[\y<$Fly8̶_\n/cƷF}>NfY+"G ( @�$P� Bp�:=3bFA? zQBe)(PIIIY& :4cu+oG;70D�[YވnRxxx?= Y4AJOI,`tWvns%t@  ~fiwRe*Mx.3xm}7^X[!0V;;Wz}w'g=D@D?[KWV6HA,@JI<[_zim^F@(Xی/mmvͻNNOU0@! ׼rHJ烥Y1Ƅa$)/(T"˟p^VT.< `窀[#>>so- ٛ^h賱i7E< V-d]d_zjcxݶ+!+$%q|'se O4W~E#\ŷ#ݜxfAKPT.{D07xEJPs8u<i]F|@^h MuR'rl-c~f~ֵQOsxopg.yUU_BP=롶RDy5KPv_&n[I{AHs]LJrz8.6v0Mk!Q)ʤKw8kjy]tv0\ﳌߟx,=�Ȍ:]@eMkh!,?C\kYAZ4s6.u> r4쵳n Km"޿7^F7:N\!X0u;a:B겺'E"I^k [r1\CM6<|n'u~- AdM?7:\ . B \:DcuFT7XaۜTuO4ޫ|NnTeFWyA=q<PG,-UR} y~M%<A Qq~nwԈ [pX{Q}5�g5oZS7!`/P7֑ { 'XnsԶ,ayZ`ic܊ ql 5^s}ŪZXRA7E{[1_"KR�dvlNg,db+Ѱw4=&][۷!ezz2Y~މBlK,4Vęb@rBPPlbDYp$3s.#B&#81I(<ؙ)*%�rr0d 9BoG$!&L̲8yo L*JI89KմFzyÕ A NSԠEX<UL8TA7/wn<^q,OOc$a+CP@:*$e:WiYD@�P/'T0�E$Ur�@Ju6gH<RI fmu+AbHTfRRvD'O$a"[iQ##R\@F} $DY"c&fa]LNACWo~iAY q3ư7VI�(PY&t)vwPg3ݵ<Mx>&YTJ\2d' H)$|f,CnY18Iuvㅵ_ݼq7\,8N3u,܎D$ 8i"!� XQ<[4)e8O�+˿Л1c?uH:�`P~TV |�cNchXa= T6A[8ԥ0)5~.Ͻ)ZG@kt'*^ϡpW1/ s0PxSweGWl1Xze0^p'Nӎon<*F1`#T D?!:g"` ֹ=ʿ*h Ap0!56bƆu!&[Ո׊.C!U+sUT$�Mhm?WΛ:,gFMRlR#zm`׎*]G9M~ʹ2wE5$nW)1"v!GyBMB=�!QUOݰuB*b 3U_˯_t9g|*Ow'ޙ^g@!mJҷ:ƻ^%6@#)@FBҲVX;3&Qk_`/ [x#!<cMc:v2+\Pqӡhh;ܡC`R /9g%F[d"lM^DzTAK%7on%U#EbP:BAM!F+_Rg>6Hmw=QTGsZ{<8Ʈ'yC'*OI7Q~z VJ]`kOʯj',IrT#uYC@шR1:~eFO4dknܨFOٍj1-c3]j4U}d[S K{Ajq'hGU}3XZD Bq5uO4pM<ߚrNy> a8n-gxŒG8;5g} F؋6 |Ʊ!V�~x<A3k|űz Uf"fX\P8q3ҫ tRe äH5oFj4l;!փB>VR:< �(/d㻇Q V V`c'z<朇+7.Y >8=+ۗolGp lN))T TR1,)�%0b2P 1 P1P(H)DB&"C 8@"ʲt2꧳ @&rvғ}y$9:Sx@O:/LٔG�Tq, ܹr΍W6Ldovt2>Q^sDAQeY:Q+׆7_\߽Lɻ`R!FD*U2!2�c1 A I1D P8R r!ciJ�nz`R7pI%TBD*ad*UL  SJ%KbTFR ːeL*He4)H0޼qڠۃdg{Oƣbk}LD: t6.w飓wz%|ccڵK;WUqLMFp0ReJJ8G& ӳ(D+L,Mh/{t|6= :rWoBɃApRll xqG'YbGUh$*pj.󸤔ʕR*WbJI"Ȁq3CƊG�@մR2- $]a *z\̓'[>~ A$�QUL@:+_.<B2Zs[m6*uATΓ9*r)5;&u5Tj+<zs:l9T>r",qb),1oqf*lVi*{ַؖ^wEpZfh YjTzu笇%U"]nB~G1rXT-J5DpynzoJ%@o_5!2ݯ~NvTlo"iڨ%K!g {|.r΀ֱj4vId#\6oy!R",eh-Ԉkk*0bC3KW b\ؠ�2Z:2h|=\9cUd ݆#d.6>І>S�ͪOd*xBۍ0]mK,4lWd|3&$[#یVOjF=RFó39s+Ӯr?F$A`ؖll,tXUu>> k < .{a'h#8. 6|RfygU.(в`) ^܊jV>*Vx",b!~`X4 -̳?V0gٯ`x~ Ѩ$rkR}ZoD.{ ^\ˈ\|jLѰD-`�6Ar-DHI5;?Zt+/֫>W7`Ld^sgeZ xoyp8ZY[yFK/l>lu7=V@y )H*BT)�pvB HDqBg0#I*!%%M( �q1=Kן6 6Wa6=ݣd,8t3sBy`ͯ?x8Av(Rg$!4N`8uw6/e_~z uu7s)#Ϲf0聒Jsjt`r/A6w_|끜;/rkh�$)( &:({ 9@PuP)Tb@J 3MCcTq K]b H!‡)SO3F J35L,cd+9Ʋ,U$Tfi+OX@E~֥* ?R_w>N۽?zՏ\Za�@H)) j{s:%o~ ͍_v/e R0\0 21g$iuDg[ٿwwl>֋7Dk[$j[_{[GsdK;/q&lk> 8H%��K S(SH UkW)RӠ{),? Zp΅ !�`EzWݞ})OW4;|+aPI+T|݈#ȑTwPYq3Zfy58 z{kdg(^15RxQ^ZVWdž,w&<Rj{Gd?PN.{t" TuE}5n_hg*; 5AnNZ]1_m]Ii!mpJ3nG*Ep/j\o|BGGX� G "e%+xWR@9ڠBZW _үʴohTWV6/uç~˿X|+&lYl} lgAJFlTJJ1笄b-3l�mgiToE?׮\T.J__9$K7hUȋ6UhϺztikwݒAC{8p ՏotˆOLI|"GDj3U%,b0T_3@Ȃ+i*,3յJ0OQ-Z[ `0 +\>q3g<Ʈ҈o욌e4B|,T}�v R4wX[TnEL9Rey4mgP ,|0D=ڄbMKA&Bи"!Ƣ_.ѩXޥPzL>cɏ"&4zq?J]}e۵cWņc -K@c\>Uq. fKGc:EHlGhF\w 7\ r+@D0%B 8V8pƔC͓jӱ6f:q8:/yƊ\l8 .-h EWa k1z^S}f[g]kӖ#VZXk!f,?<8<߇ '*6خz>M\qO(^T6s/y?(4J`A(rU2e{?^z$$ @"kb�@^e NCF۫W@$�@ց@�Dg!FCgJJ1AB@BE�(�2$!>:=^76)Hfݻ{{fVHAϦ|*e&xGO{ y:8(V: ϒo~;o=N R<Ihui2')BB #@Ÿ['fLU||f(_ 1 rR*bBB� X$�d$E�<`+n/ I5aLsJcI΁e�x^A$Lq>d9΂0sJ0`ȸ?1O#s&8㈬-"cc/vz�$I=~ro 0Kfguk=_+dQGWp �A_)@� + Β((C`\q2>MeJ ɽӻo>Q^Y,ӓ_}_;z If"p|z(euҭ˝t{|e%t0@(`׽(@Cd&kW)c( ),gqL+Nmv&pOpT&(۳v.Ehߟmm+;Wzo\=xëOM;^_F\O!«_߽/Bv_Zn++/>7;xўs[[eϿll[^[ٺ{}.Eh]v.Em>4d b^)~& \!ʯ;U$|(I�khKBę( LGP.W* RR$ ! "ycA� z\XI4b0l c�t`%;!QF1g"B,L]X W6OFI3 HD2!!'rE)))Enmu8b<ىg#E9 *Ĵ ) !!H @YYLƔ"RRR(Q8"YN'cȒ.@ OfDLȔT%,yIfĨ睡`�Ã'GO]L&'r,���IDAT` H 1!B.cqH(c(P"CD@p ȔLO.W0 ~h<1=*|0IY*>^:sg2M3UHF  db9B�(ɉ�!D#z'p4{h,v{ZG!޺)@%iD˙�@&X2D�9C: K%C`Rf$#gIH UY²#H)C1t78=ݿwpz6U*({:[|5vpwzTA P@`yYJ*8�@i)LL_ "|w"B~&.4?*]kE0E.:Ox>`߲(*TSo*w8I�̭`VeԲڨnhEsEyf]Υqv\#Aoͬ^}侦]6^\钹Žj;|$7#[EPF"5FMEg!"% R[0qW[ͭ s,i*{R͓'˚e!yot5] D￯Xuen-UoЀ~T vckMk f TB,;V4N+ibb[[^:6[+9˚z@*3qbJ!zÇ] ]-߽ifv͸^gkkF7 "TTk0Epvzbt)w4J1϶3wZ,x~Wo7[W/l_M@C?+ Hu MIS0Mcw>hb#\t5#:lm3[0_ a+BJ\?BEs̪]͖Ck@Alor^�HQFrNJMtHH!㠂곪΁nm~2ͯ֯_7GDT,b8ƮR3ZDLAwu8ץZh3 ds{V3`P_ϯRD=nϯ(Y6i)x~c3(=ƒmܭ+s.TBBGH9!hGd< -k!C! ?B@cxX @&U#%A.F Z mmTİ�3\`>m+b"8BySu7oeK˓xqD0Cبe=[q=AK`=A*-r+fPRcIA곌Uvf g;-Qh_|'e>ZEت'(BVk �ɴGD2p!1S3E8›B(E ZthL:k]Gb 0>+reYaTA$k7H&Œh#9l�py:9"B DD1Xy8H|s.�Y |@`kYgD*�0ay �ݫwnp͍ML%,MS.8 *b "FĉSʦx43" 7R6\%1Ɍ!B1*e4õF9>L擄8 A$k!+0|l20%YFYFJd�) Ā@q̦l:c" >D+QY<R*@r 1((AG�@4>c XSi8Ir1l� KJ(D 3det|t:=Ke Aw 7w)er0)dw3ʟ~|+㓣qfb\E �RI��+&�@H�q@kkg.DN&Iʡ7 ;${Gӳt*?71P䂉S8Õ7/_5XlzNFj>"c�)E�2CP!..RĀ�Ap|E^ :nC. Ͳlt2 KZDi*GI,%t{ E$aJdP(�(5{Rȹ`R2I$I8I$MR)\3D(qDV[̫CKA֜Oys,cL8ṱ@dLԑgX2,^;liԒp'ϕ<Lg4 jY@O9*r?Gi)�Չ(eD~Z}]{?4**9"~kbo c'!.{D5ԥ2~=ɇ>X7}Ik";l8C"q=!ɩ#�[0NU1f`͚_Oƃ rεw_q=I_䂼rAD6KpeNJ5#3b-g rˆ.r\ ,=-ھܸM~t˿TY goqO>a/=~�]5%B�!~E<4�skkS|ޏb doۻԘ<ʚuȯRV b]G8!E.7BFF@?4\Qw?}` ZB6B!Сq# U&o\"+B:xa ! 7-D䧪rp993G!_'mj`89ʌn#xXm,gG06w] 0Uġ@�~ ,`YfGl�@.B\ă p@]c *b><#Q.Bys 9'7yF'eyUF!<>Ԅ W [dCT#fzRY1v-#̑6"`>s�TzH,o3(3E0 WƱn-4z86IibPEN~X:& cݍZh+ ߴ5gZx6 y `Ti>mP`SgwlGK>X\ /]Bkm^M$ho2s<Ap n[x~Mu[ ¡3&Gրfo>GwLA{`]�A9N*jƱ aRo8 9}"{;Ʈ $N`.<GJA$cCBȏ1Ȁ/esq�0HȌ@J�C�� Ec2H1�#!#,` d1bHBH,>!ebr>}82RDL)yPdDr&xN`E] Nx>L!#Q16Oi:r&:YoElW7zۗt<#g(`/�d\$P!�reDD8Z[%b� P"Y<H2S"))sL�2d @�$G   L% R$! `T @"�R)$�@Sr% PILgrt:f+_\z|8OǓ} C"8dzx 7hu} 3)KIJ|MI$Y0daD AfV GQB"J Pd2B1 `scQr|8>u$<I'N;9Ʉ("0 !J `DH  &xAr+E"$j.I�b aDQ c,ZZ2\HI�R)b,#cLH"Ei#TM;M_e#O1 BڦWfq-Sf3 ;8n|kEYDaUE6omG{L>7 r9pU P|9Dʸi`sE$׽}<_a)T?׺\_'5=iZ`5mBy\/(JWVlӌY:u0١C=5hF* i o^ - z`+ov^xu˿d] ,WWYk շLtY:˝qz}z7weTY#j@Ų F_3a!yϣۯG>$ٟ:q^KP,� ^tVx,르APy[ ޳^civg 4#zK%Adc`{\kgM\]>xo|DEUnm-6k au jp<)?u+xF7Y/Wd;X~NO"}lF+[H2ns9TdKtS Ιj#Ρ=0;<7fQ+LѯԿ(NF$:D0]' ^"Beikg9M<ߺ~O=Ak2"nWY s rXMrA$htA'Lj%y@[fQڈn8.3c9Dn3wՕ jI8CB",�DT8� u+ƕaQ/`yX� 2BB,@HL)|DfSyw�DZ["㧓,S @Cb bʈ 4}tt km>|5K8)!(1̒yFq. .\�`{O�f!0`! H)d(�.g#Y#1 "IRB SHxx?c]H<>`@D$%(^bQ|ɜ@t^;gd>!EEs.HtèqA"!QI $T1H Rb @ !�CJ$œV_B7&sI&8�S*O$Ny4^u&~P.#*Va !@$ ,2b cDJQH^EP<(F ;̂$,d'yY�!)N*���Nx/MT 67&#<ϻB YRD(U*ͤ⌡RH�B(V+�er>f3A!i:;=eLu ND3 I|>9q W �UzNy0/\)@P)!x0 C2 ϫ[I"ȷA�XhߓfiET-ġiA RW|eՖ_VmEʂp̪^ �Э!жWyE#2mnd6%S0bCNy5(ۍEg^SP'O伨*W6~),)Х 5lX)a=:|X2bd5:/aEzX Hv_|ƫE!.�!E'�/CƵED{3'YAP;EMɪg l&ޥN�bG2*@/LH[%Bͯ>kcZTzNY�n^괋5 2j`(UAɏJQA f =ӆUyDg<޶wڷtĎ]džyB`e@B kqPl>m—F mEDV7“7M4G !q48D^o%o# `V"t1B$B�mmPCCӡr4'N *7�xro=v:T^2Xy-E\kx؟`JZCa}<fxPkcVi2q@ .j|DwZ. l7D]fD>ElϷيq![F5#G@'r46vMq"M1YÆc/) rDZ>TWT_aDU_8a" HVV#5x5YlP}~Hul=b?*<%h5(!O�\Wv6 J.Q!Qttx"H]koT}>Ot`e<&շ}جUzO 5Oj%bBЧ\�;3d"DcCB=Bl"�!~g5o0m`Bh'hGR{g,'$h)ZC}`S�@)gQ",Si ;眓%@UjoB�N,P�YFJe@#2T,'A 0>?<g<0nW" ""C� @ ;)&ݷ+L pxM.ޓ4NlF"v;[^o\=.g'GgY,g_K@@P$ 8G@SD )` �$c9�Hbdg3Z vx|~6le0\]]l6Mld PT*t:P�6[i|6Lp[WַAQ&ID,0QcĀqB%8,V0՛ӧV7Õ` RG,>#RMO{lYk7_^_ٌdCxt|r P$Yյp5ba<Y`-@J%,s.U*YT쐈0챝+OώO'ٜcGti{wh�A)RJ& $�03F'DuևW׶t>r$R�R"R� +, HfH%I6ŧG4Xln vnLN49SjՍ+;8=l>K"Ay"Lm@Ϟ-B<qKDJRJ)Q@w�ͧR2-:O<ߎ գc�c˥} �Źv.EhRŋ* ׂ?rC˯Ӈ'qe>;?; zl⁻Z7$t/Eh]v.Eh|HQeA*$DP.A@dq #j7LJ2΀ @4=;;>N' qm6LD]~H1(p$DLrĦ~v؍hafWDBmuv6N4N7Z[\vP1o<`8.̓^�<oϔJ%iR"#!qTrvvv?^vLdn]^ry'OѱLs@@*Mh%:k^gI8Kn'ܽ<"$ #LA@ΑgB@!<H�Egh/~θ׋wawz^?O&#e*Icdr^]vkk9zX2 s͉`7KWǧ֥pA2\f)1X<`ȥϦ'<FA'l(m o~˺)1Mp2VGr|5vvv6 Bvƕ7֑@vd:'$H)1V|76��*d SLP!%tdvJg082L7w^عqcg8$0{2�"/0U$X ey^! Y%RHPtR,a!`W�}" p,猫yؚ{ć.5k!DY~QF(>5ʬs{lh_&X?դv#{Hk{0GÁS sQŷNFj@H{s&ZJr#U]*AŪw<x rR+7 7,,ȯV²xӋC\f~= :hQ\9>!ȍg!Xc($MFYYKK JIOg;Wz-b<;(0Qfkmk;iX!7?buXMy0GV[O|g;Lͯ~폏~Wmwxw˨>L*+frggJrcǹ0wkecՌ7Xd) z,ڏ2|2biFG zrE 5�s8ĵtTو Fme2Y^Tcq~cg`UZR𖲕sӫݨ crzf-&M"{5e)eDv])U2WBLYn]u.>l˕-&@'[~7jI0BȮ^l!r]fR"$1EΩv{-c?Zځjm"ɋݨ:tyng\#3L;T,mCi)"CMq=A�Gdؗ-Z\8Fx>W!zU-qxYϪjU};g5T,O5`!"7Q-]Pn=LZe�C74x,4v˪>ȭR{�ߢA&5n`tR9ϭ8q$gy �3I"EDD ` LLҎ�#$�xA|6>9xzU!&?9^r}g36~N�2I )  `SAMg'G<:ߍ6owݵ`u'$I:\܌ lN|ޛ0`R)#t@�̓|1�!1� 84Kf$eqF� 0 Epr|zƮ u~5HqƍK6@<?O�YN(gdom+b bh=߉._Zug,�N 8&28 "CN)ˈ2xIH\ONsu:捠3ĭ+ƎptqJͭa0�0;U788؛f1,'c59VX7_ W.o HA2V8)p 5}!:@$Kp% ŭۻFh0Yu{ҕ~"ca2O7;!^,^[Yq /\*Iγ,ɓЈGC^9Ht\ " !x4{h~jV66NNNO$v/_~:C8ƏL' v0[z�Z.yѸsCagJH""RYFJ,4˲,B e˳lVNEja8#H)ܛgMvJͣ{fohf0 bE1H-'=JM X͌Hq)1Ezgc^Sc3Uy�2NF}<qԕVCDr5PpRod$=B3rs֕oֹ=*Њ4""48jDf>@uPq=篁|&ikEӔ6({;Pt�Mhm?sf,>kY-P71H+`W 'CWX4I_ �ŏ|nx;3=oBՇ:B�ͯ'~kd OY.AbFP)CrU!GyBMB=` 1*hU>4p+Mlz#Ƌ?d|xĿ?xG =] Z߂a,L5Xb4BT&s~L~ _!!؂Vc#` okOo3+ !x^8t~F.h5XYah~i: t8PqtPe_z@;{Đ%ґ>mZ1֪"؁yN8$٢Cd-L%@Q\R匝5ڵc'l#5v.BBl E6x9`?$\|;Wouo~ TGsZF=5| ~hӉ*i|BIٺ*绞`-x>!\R6=A+]IJDFO,!DFg uc q^7&қ6&XքY-k~ fOٍ<A qx /lûgcWGY3D ڍ7ؖ6?\U <l`7dg{c,-쯻Y܂<qT Kfɞc{M'<a䖯Er#f+0S'h'.쵟/r7&]G7G+V8Z,/XLRmg'hvo:<!qsZz+reMTuנl@U@5ܿ fl 8gLHfRbȄ V�*PB`a:S$q`ݠ2puzAot?>{qm_eׇW3b1Ӈ`>I` 9 "!(%&| f'ɽd/e/t6ŭ *!�9`cgR87o=Y@1H)& P� p2 Dȹ"e~gs�Y"$"!1;K;D"7A0/l^ZO'�;=LI .�PCAYvp`mhvWֿ~N@t0r�q 3%G 28�ɑB@ JtXDBg3YΥW˗ouzzǷH <d3G1AJIѽtcn^ؽMItPt,wߚ{dDA* ͒8{x76+[/FAn}f<%%ag zWwV/]Je+Gc8F< \˿#ؘ 8 9blvyDo냛{q| fSzw8|tx6RD e4׺Vfg$.眈dƕR`RJPpb\0BEƋ*ƫ*G_IbU`$_ 9!ʵ*N.% co'@zo pI/YJff\sJη:DOa`TզuT8[8˵t~=6j9Xa4Q.UZ[߿/llVzֻ]CUvX8K͵ލz 7bͪE96/pm65Hw ?~ay6⟛XAm4v&F `h5s v7n6wROd@x>} s{" =h7sG/f`zp><YR4lKԆC-vR}oYze5Tz`LMh]z㸴\Yټ%–9c /-g|Dy25Hnv٪�k Q66C\badplM3HGdI^R{zeM˰iJ-ɝ|Kca|yyܠ�9eVɭX,Vu>>а Za쫄^EX i6 ֬.kNrг*|hI{T[ :NHyݳ)Vx"j"OS(<YnaҚhm牫8y>"&շ";ʻDEe? !cJTC٩J 3.q�R@Q:SXˆON`~1JF" Al z0;SƫwƇBt!+ft|=|G{G Sa$(Qb(4w$'K�Ƅ'a6>N=~|ot/U+e4}X `r3rB�!GFG&i։h8R3O2ϒ1<ygQf[{+Q@�5j�<SA|LDD0\ ,9K,yVw:*34?S1ƁR8=ljEBLiڋ.=L1̿� R$0NQvSp2Yݾ&!@�d(t OaN㹌:]\fYJ]%iufYea P0>Js淎Nd£jz& 3U' Y6=H \.tY %$NGp'Grr8 zA =y<ηOoa׷R N{o{hF2 D 9 !d�d:WdrPcψn ed|2y%W!v{<p 389Oyl>ET]P!�/U1i�|lTm*BTTO\1ƈ [(2 b�fYsܭXX6R $+k�ŏ]_/00Ɨ11"ϯ<F_aQ֟_"#ڝ7 ܪG(YW4Ypj"Trծ_`s*Bi.~@O=U٣ (D=:|!(fzj=8T=k,~ۆwZӚZ leֵE7`,gQU ˞a).,hHX�`ͨ rtJ,]L9ڠBZW`j)o߹{?x~> ͪ=|."T,(2RFlTQ!}Pýh(@Aӳd/ Օ|xߛ6 [{d>F9q�Kb]=: e'Mc$Bp,1*��/A/d(p>5[d#0v!8&R90Z8 ~5U+-/E̜EW"IЯ�}B6p m`#jM6BfvcS팖m*h\o욌e4BaH�*xk m*JyU<Ɔ+kc D>=dK?vWȆw(YVtMuԎ4-mIJq,F(.ѩXs5ٲ7dxx$D4" : GCm`+8 qj p#AtXbi/V}MKK>!YVhL'9@R]m n`m{ȱ�OD{`xh{vZZXx :q 5f=߆O'p \Zшb$A6 VzP2s3P^PB D<8ڱ<}|B,ee, b1(4yl0a6u FjQ}*)ԍ2( A$tcJN?>ZQ?ʝJ9!lr<JTipUT(9|0 ;~d舁da49x+i:=N|">K!=lN,ܾ7"iœtv=<|49S="$ 8( H 0d#$&<>{:{+;jw0gReqNqr8>z:=<2z  D?g3M$L)P ٙ:OgpM%$AȘJfS9h?Ac,'8gǃz풄|F39c1s=|eEC4tFd~?z4OEHCBvyt4L1%s  "*yxvz܇TvW7% ,J4=O'iyS<Ύ00@R<=x|[Gޝ& x7 l<I dLED7g|Ջ9M&y6v;]1=ӣ$v^2t2tvje= B.PfdaBt "K:G X(HfɃ(a:N $<9ţLNk;n_0&q4~hz|bP*ݫU*~hmX! R�TUbysA>`BS$#s9+"*G[ġѴZ.Q%[nb`-ACN8aq.Eh?vzOWV.uoŹh\ EӟNㅏ<7/>~њ7F~|}cAK{]v.Eh]vѾFV)%R *7;@Dq2Qi$ώDrb1Iq<NOi2L|D{&)i: �|$t_NGp0te-<>;D0�A c!�|BT,(T2lq ^s&r>̦h~z2�!gw9 ! H8}#IIRBK>O`6NG9 N8A<uN�s1xdz<_7VVRJ<;N$>;Θ찴sv$ߞOF$ Y )Id*Gj7㽧p5@p`pt.'Yj4@eSbĊCꉢ~"*%euD΀Q%qo@Uzd$,ə<ٟ̲B ^f(t:==Luiue\Y2̏G{OƓS ~ "Et,ߟ"( y7`$Kdz6եF0Г,IUMJe@PYݽdd0 xwtr8M׋,)HQW b'Iw l@`*ɔL|z|v*7A tFdzY~+CF֎-*kf0+um˔v�DdUHRJ) IDL@2 �Pg�KɸRg}^D546 �`>dM Q} v}dvMϹ..X:[mMAY vQ^n w*j!b91g\zkַ'jzi)dwPi\WeRaH\UG,=mW%X:NjiV!6OnQ侣 [[_ æ+Urݕ~_VZO}P: 3<F\n�r`||ym|VhDHRk#PektHce=42ˡn&ZYdS'hYv:{v84울[6ۀ;Vޜ{sȇ/+Rz`BC,6AΫ_򐷥t5vG:؜dHaj2PX,Ց*ne% bH-Iz-`7xyf/oAE_M&ix<_SoS}kBܧAH۫^�S 4}o{y5{pWd?<@RƮإRG?{,}K CU`}-x kR}ھ/K~༞iM[a9',I2@3mcej;l)"Y iA4uNOϙqdP|k26yTߒYdnrRb#g["H6o ֑w퀡OQCzQHr86f xx>.Y|EXP볬el�9 ʱ5啽n".B*�DRD  ^?C"�Aa&qDy8S$98*E�tޝp DA>T??<C@! CaPNӳW!0"QqsHE ȨS ʈB EwhHqeb 88)"X㝐�1b@2d dG,Kq!àFDaD <} BDDY$HJ)~zNdD 9*Y'BHQ|8Jq.!<B2ް&doc `(H0 Y: 1` 88^|`!gde0@�F2R })lǐOŹI ,FX<y"PIB"lL's.8c@$TJIzq<dx<9;# 8C.x ,βy<JOG{E!K8II"?;JXN!q0d#9>N<)eg�@ �@�T�@ �ra' d:͞܏ߟH�ƈ!p.R(cURd\I.Tf)_W -+b Sj:MAx�GƑPNV DJBQi#"cL I.PEKUN+2uŝ1n8̾S^!TGv4d-ʥ`j1= Ir�vTi ͘flΪZns!2�4N;,)GTb`nSsѻ Tkx F9vpaE 19㿚b 5!ƌrouZ-r=,_:#֏#Dso#%9> ,Vftܕm_M `a&r5\7&Mǥuf\<;Nde W:C{3A$ñdž/K2 ѣيp'tZ|_kY/R},kʀEl4T J$+~(5=~z/ lsֵǮN6�vU%P|im~! |E.˱n1jCB@hBc)<tfF{D2-|OL:TuӡCmHqIO'Fi5}*Lg!ŹB[!&cג\@z=~|,NGl ,`x�$<C .]X鄥s l=!Zk]<c 4B{R˙GR}Nè7#'BKFcg"2p3"Zbc MEH>g�J9L&2mlt۴곍vvXƱzӿ'h>hPn E|_$/0u7jq􂼍@Y@P2fNOA<5/,XUlGK>} ~.C \kk:mUjR9 , <] 5V9s*ďfo!H_s`QiX uK>P qFE8:]GTQ;n+k쪨(X  :Bȃ2}b2�eDo}lgkz @H$,1ΐb4Ipѱ&  .3Dd @ M�HH+P.!0@  'E卵1*CF~>B$#C@@bD*$@/1!1�c�C1AQ C "|%""cH dtnG$(Z;D&CI!2�AW*[ WM΄Lp!(D0%GP�$Bdd3@ND d*8T %@B0 OĀ1S2��20d9FBSW鋡#@ MQG a,bP/0B"ER@EN05�" `P</hXq� !H `7 c%�@ Z*sy9t}6ޟ'-_pUn#δ6�bi0*ȥ$HP.&մT^JP+S儠ut VVdZ2W}HOwrh "^M!h +2f<tk3e˫YWpBЋ#>q1֠vɠ !Nfv *xt/'Bo�YE![k"pɝX;+J#HXg!A7#Yy8^GhvijE+x[L_UA .B+@Dv5X-\CH][UWNYb&8iFTQ$tbŞ쉶UF,>KF+B*=`8 6�!E! S<uG*g(v=FGI zm`GpTGhӣV}  I�J5B1ѱBZ5P d7"0Zb@!@RX o8!mjp,c.]@tބ,mPBƠCfIGMs]"迎Vo1MLU؁ҙU>Ir%C3`P µ@6T#6!<bqB TX<*Km"T'B$zJW bTMup <_[jMu<F o _6#r#WBD3' !/Bn"kQ !̽Bd$FQK6΍on]$) h>JgZ\5bGUې4n<,a6ߴ,5E \lQXy`^k$9 o4&Y5|'c7Whlcq'Uw'8Sc <ߺV}h>'XJ,ZOгrh( j!&A8<<ߣ lD'V@&ϷBK#\u. WOZU>OFK<AjAyq-ENzABfLE[,dyھWB+0蝡MKx蓑گ&<([lŊQ9h 5 <IQ !2qVr*09rhr` p<+Qu 8Fa0F(?(&Q}cZ@pBFeLSH2fʜ"� 3 8 E~C�a!2 `  ~38`=h"P9pͦwaGe-r#!h'"2hQg!0I@B0d,@\P(`vrA8A~H8ǐ|`E^yPRUg9tz">`[G /RXUb/p(A s!lwC ?LJ4K4'Ii&RJݾDޝ[X=z9j qaͬ+ R(?N7::, B9[$^w'QL^h˨삕:4YiSRʹuB):F`p=+7XzVV4[/p^cr}0<CE7:lOmԫޘݭ 5UAɱ9ذRq3^m4O!ՒЄJjY^TC!cQ"VЌqA=):YDHAhV̫Fx>s# `HV=㸣Z"8< ~(uA('nbCk"?6 T>U`,vlRhUL 4`r gBlWLkb(UAɏ #g>3dc,0Sn7a!*CbB3rog>ݻ3efƥ&tĶq'$&l&Ɔ!fEC>m—F#(�#X%B!AC{R~mPMEH =xo�X"t1VIE:?mmPCfȢCV= Oʁ2Nf SjU_�/UgLҡrA-h:6f'ԉ >C" oc wj3@-<P}X!Dy-W=D|C<{R-4QdBȹJcW\܄~-st 8jT Δ+I!zU wU #8ZG0LOAM+e,6>Y:6q4[4HAh7G#7\TBƱ4{m谍#3[m f>'X:T2`ױI[ 'М*gۃE BA.9Sؾ!@yVZK!UX>'#HBJ{@bzR!kq'hGR4UPvy>_�\lT>cԍ&W53XJ9lx1}c �<ԡKKL7^#`Hb3_S5S( Z7ۡb㦔"lqnn=ɯs|lK #\Vrg23$Vn1G�`/` dpCQS8�cL-jƝ26R*)λr�("%$RJ1E\*)UbZ.ڹHe_tÖqD2aYAel 70bh$'P8vF^ A^k"6\1rRFyp&C n,j^JdKC벫TBpQtqۭǖr?j 7�rӨ=/ȗwcY0piq4g (UsfԄjoЪaYԞKdKp U|3Υx&ߢ(/`G*tԈ4n\k<q9;ifq}n_|w܉�W?c?,UhY3g(Wm#\`i3?1W,YD阂1 -Ia c;=|U4ǹi&k Zr-b^ 5cW%{#dXUkA�ѦƮpc/_li枞޶Xh{EHsZ<i!Ud%`| i>{"TakIsYnZ8EK raϨN{#EFvn8ZNM޲ 2UePyD2q4l㜽'շH diTwxc3Yʌ7Bj^,,8+uVijnr{!gB5hX_^,+J]M==`إ)_fzMVͭleg|dStnoQN?-XF(C3[Y} YCt _. lcq9"3zY,)d3 J\iXOх*3 zr?׫_:�(׷-{3.=D| 8%B(qd:=i*2g v{yіk̜qWa}p!3J76ەCСChOWl\[7Y#?]z~QC#tåU/5o2{^>5[zo2(5U[W*,(}3)0jbc9,hʮ76r~ cwGrx�Lf^j$qu{[WAX" -R-t} Vr75^5sn#?/e#</Xv'[|r!G?StO~KG|+{D{D}/N7oՌ5#` u}fG2h3�aZǦn4z6D,aZl8*ڻ5Z6Е⏶eMrc—VpȰ~Lu&?_31ګMD/nqWfZN[ո.riٱ TX"{'l\^;FYuԮp>~"ׯ]Ҙnl@ߢ'Oϝ9˵h[Ԫ^v}cKG,}t_ W㨾v/i#p!U7VzsAmEhp}m3ظ=p;n\ MA$\*CVLx0H~xO 8+}×h&ƫ_xN}yW0W4w'r=A/i9oLۋ/CSM&tZS,!{kɍ!E7P\T-Y<+[7TRjWk~7n9eMu&~ٖhOkqh8T@B$g#`);={:$L8]b|#PP)eY N$M,D y"7n= T u"~[05B+*V?>.NX~Nhxv{0 ZrӪe#oQZDovDzgcV=??BD�sӷ 1zU!ᬞs-'O|XDqv\=�ƖAkё !#fQ,\NmM%}b=Dn,:8j @rsE;W{ WԛZiKoh\\n>OPwk3r-`׎*]!C\ڋm=hj3g8 Aksƻ}jY !A5!q]zo9 W`D|lژE뛗\~gJ(Y{˫>kog}MN6Q_vHm!d#:^.4vZsЌ+.?vq 9!H=jK;q3>74XZ T}P3vRG-ٴehk+DZ6YALc0K-:d|ǶE=QBtWilg~-m\@!#4B"; l|㰖jKV-+ckCT!A\fm7d^G#,e ʮnrsnd.ID;m:[T5@ "uze3!exuHU<m-e<fc5͞ fOr'ȝccQYU[ s`s9.qb>2Ռ<mg:^T!'Bql8ĵfk)K*,Fig%P8l6Ս OXbиܽ˝6 Gd,+6hm8[$xxsSx_jʽ(g7G+VP7z-g} տ' Ϡ3P!�~xNў-?]`Wil5` lC8,�}qRI=+YvwD2oY*ԋ|QK"Kvf~m2U1WIߜ�4.{ l|!Q-?8gRJ)Y9^ ?:M44KS)3T"{=j@74|;3_0{#&9 !Msc~�`*"%k#MʬYE6 Q(Ǧ"*<n^ЪTjC#euo2CfP\2=KFdߠ/&,^y5ɀ-~.SJ1cOwT^1('W#Ĉ")- JPj)Lc嘹!1 u. o5e|D w>uKh'QWx�(ß])g0 ιrAb|+^_!vEiN3nmD#Vn[9<LcWCb`]@yŅRi&GYZA}1;o"D!B'-n ׃__~&YMqwF@ caIJXwH;OhDHk"K Zb)*A>fnIbTƱ!eHG+pS,q"K"*cAj"X h�93Y G�vee`;0%Vb"F�v%CK&I(P6vTﻹԠar6BjV՗X0MJ|tT~4ncd%k0:ml0ԯ:ƱaݓB@_8Ó2P5š$7QXsLdQK{sk r͠ȢC�[{$BHt4}=�LէuHjƱq㈕Bq$8:`eGGt^6TTAI:Ĭ'd\ۏ+p)64APc'hGt`8{,/u/̵eq]p<!ڎ+xV} XX$ gPJKyxDH1&]OpADH1u=AmgI1Tkh;OokaRq,:XRq+^FBH8V aO+h ZQ ,lcXKoTΈ 96?P -DwaJO*Zt΃ 36o3i޷[ӊ5_N!?ҹZ<Hnﲻ zZM HS\Cv=rt}c@dq$I$idi"T)EEC �sC?Vh C7TƮ' cm>u(z+)ݭ}@܍/UKpvEt}pi] mLmxb&6LWQ|BW~Z i b+l8 +Qm쪫^ jn;?;2;=An{Mem^[spm̵M+xWކWY cDgJwrt-c!JZ l oB;bFHt TҬ0k{-mP!Ft:dryzr-TWԀm**fd2zvazpJFul洑5^+@;< 6p%6{|l}e=lZ[հ旎o=(#6Hcg̣@@+i :* =$B(m)<mD4<| .-j�mgYk ^6RDiw2sr:_`Ft&ѱ鐎!j4[JĹE*_۾k?W'nh)@k2pޠC Ew ކ¾F^,- x~ ?;'9\ݠbo&DՁݶU]ߢ@\S]xIƽ.Kb"ϓ2B@>=^VفhDHt`'1 =AЋϠ*l~XņcL<A> lD2xS9j<јNrR!st"OjXM7]TD@ufO=A�!P" z=AC9<z^ t4D \>'S}f,y~ }9uOP}N�}+�^H< 'j@ ,jiJB \8ڱ<}|Bk+� �&B~l0a6u FjQ6  % ZKn9F7?|[0K53Z 缨 ܆o$ԯ76=-C0{ !W/Ĉ�@IB*|*Y9ғ u=5 LO%c^ϓ # _p"�R*%,SRJ!Tp!dovr )wXhK bY�m朜.pxhu6蜌ӷOHZ+ε`5J@DQv6JFٓwg{iQٟj칣 :%7@JJV";Ե++` V4Qtt<~wvC76컩6 3[/~de&+!�Gw'I"רǯ[YkA(⹜Qg{ ;hu3|;\Aqz6'AR1Z1su hX!!z_ CglzM$}LI~$2\\ Qr|=MN%鵓@\\hiQh="/t3"sGR, 2ؽ] +`EHI'g2-ug6T_;PSQo_v+d&'Ә\!9g72!b/ǟ[7[>g{9xqP-Ǝ8iZ[EHN=j[noÈh/O %!d;Yn2vA>EÈO('l>Œ+a.r;v_ 8G!AM֌>6]:Kcg2:"7JQ<:JOb%=1Jxpm; Dݾ#&2LΧ~Q|9ך}G[agL'RUA|ӿVn_t⹌gr|>#BTnojx9DnF+A+:]T1>G8IX !FEuyc<\39=FljIlbZKE ,+r* Do(#u8�̦,eIPJ9KNW(=;I糌y<A[~zuEÅ`iLc5I$- ڎrFz`7:\,|S9:)Yv9y׾iv,D0R4Q\&4V=]&ı}Yj@ p.lM8Kgz=[7zۢu2| t, ?+{zkhyc]U6_Jf1F7 Ybk1VK _ mY$x VYfTEKe(v٨< (Veh|SڲEQΛ 6j/r2:y7)]l*vew%O"kwo䷝&"]+s Xf�Ta̩]udo^ 93Tm4ʅ\z~>zC*�PJ"*C�*AHD(1wW6q$l_4ƮV^t?\�YRqxuL//F+_y^NOfo}􍯜RnՈ^j?�=?WOnspٛ_>*WF 1hm'Mѽɷ_8ZҏNGo٨2U,�'rs&h׻{c?pʵ/ {9~Od "W?Ooyu {g~i<S,7E}5zk^ʘgfV6Gx㕏]oǧo~vpƹyhkuc U@Ƹ<c;\=hU�[i+Oի{~mn[5bssBL{Nοy`r B?S M_iRz{gw9w^_Y7'pYw� MԽo}s7Lg`iu7[G[_7X~3Pz˴uvۧ/z1)ޣ"momV,{}V#×kzYYlZ?e&~W}7�|[v<Lrß\݈u|OS]herNb?=ҧƥkWCRu7O~,Me4p5KJi>yw<_jw��+S?sx(~QoVklѡܣ5++7�v6ֿe7FIV}k]O,`z8*O|v 0JgЭٴ<B�[75YI2{rN "1|95S>q啮:̦ٻl Γp-aIhWOub]cW`%ʥ{ WOtX݌^5{l{s\eXay}^N'oIσ_5iEF{s(42{p`ڊ5ꁺeI\ u}cUwG' ,j S'Qi};z#"[{o2yTkݍ'S'IF؜ݹf}sRӇGs42/WvUOM&�7QyJ6jNPSΣhoneB\NwRwcښir7;|:$v'þצæz$K/xr;qx40gShΕ[cW|<)?j\[R}A着;Q1(ͮ?rUJiW '›_0e~lY[$4{Vn:lF1y78uP.];c8{DU-)�,6eTMR|?c c|Q1oШn|Ҋ=}͏Q ,K3FQ)g5ի3]րs)% H�L!3I�Y&V'G]\ޔ:uW2Z/x j%֎pd4ͦ?¸B��+RJ)I2Y d "`<BeH)RYA+sGXRh8,~knu]5#, ߯o<窓(ʫ99ܩ�'}(YRb՟k;Wz nw{>y0wx Z!=?k>)lw=ε+6~TO_Z:<:I9ay �@~׮~ی-ڕ+7? W?œ4.;o|iC>S?Ք%wߘ ?W字Vn4gۇObgƯ+֥v.ww.w?ۿ[: #XK睫+7g~s/3Kzi.]}.k'=, fO85σU㿴Oo. �D^O??7{L*cyq?Wp>O䥖X_~}o?9Ë̃C1DLzBuG~!ޭ+x$_ vxr`VkDOo\__ݽ*|F'~򕛍گVV~?8Rep'tb"?Ck?3["kOOYKiAT8jx)m|@e?Kڃ~뿿/S�. ls#j29l,`D9w {rfw3"ONKl2? /d>??;ʏؾdGOo~x8++ˋtXn~ԻoÙU 6=2\~nG|5!ȍ ~`?b6/Ot#?\dyD W,j~l寏MgG>sohc;_4Œ7_>y0?y"5WV 09>x`?:<ڋuW77/�A?-<~|召ک>�9K^o.[9LǙ !3&ϷTY҃]=ʉ9ӡ/0xnǧ^^o}x6\eښ2X ?ɍK9Y ,WO}sT; ̙W8ps%r|ekaux8}4ڲqp_( %%pk?ĽÈWVsݯ'q>|uO0!;eȼlror{kOzibC#XTĊp5xkQ{78ǝ${kf`w^_kz0d@]=XY_�u!Bd.wB�p|iu2NY1v{~eO?~j#oW>qՇܵ\kp=*U.%kŧGz>\<<J#RD@fPOm_ށw` hnt7#@틢 2ݭ:BRe)Bv*XXõ'C2zB]ḙǖ2 K.r8`BQ* U\�f52m\;4[CQPZD!ϵ^mENbU%�(656ZE5oiHꜫA D8D0hU_2aLeL)EWREc�P)ՊbQm*Sbb̼o;Ӵpc75~Đ]GXE2(fJUH滂EC 8�RD@S\bK?ޱ[9%Ssb]CڦWⰋ@+6N,ݴDĤgș=BsWۯ,߿wFdC]X[zS3k [gmWzk/߹,U_uvi16_X_n_/ۦ"ᜇcwQa?vWgvë?:-3g>wiFzs~O=o&?sv}(?vՕ?*Iggվy2I䥖~S B~쇶~yNIZ@ ~׮޶}w'Љm:N=6r"oDM0 "v8W7._Oοx)4,:jk5\;_WnJgX ÝZf{"7ɽ_CE7w(GيzXNjQ zE^5\$J32U_zk/z� tpnOVKXK B|+GoSP}(Ok~7"ͯG~nwa%VOߞx鐍EU{S\N�^.-,k~Q0TG~JoGǩ={]D賟<XYLǏ,-k[g>w)OmWo 6v:PUe˫g `xo8o2L�f���IDAT7 w>{ IVFE}jg^[ڟ<>5xް5L~b/7_Za\? ^KYaE:|K`3|Nq c^y}m4+Wo~bz!Bd̂>zp_jݾgξdiEWV{jecc 0J&8ӓ 7cEAe> ufq+5<,'IxE]MĚq59{^wk *xbB5fذf~tKOo+$ Vs="PQ/\D.%kAo]Sq~mՈI<Q)%DƐ1#^<'zўs8A'2sιRJ*EZFYz2I"2@`@*�C| B-B.1 V2ƥ\d C!ŤKD/,c*Y>1VŋUklH⁲ P.;}Pԅa*W\͠]XxczٲU?^jdXr0cC�x$gϻ-6~u=|;uQQ';O޽zQ5wo_ 8~Εވ?z񳿸~[AҀ,@Y?T7oaƏߪ}G�0Hը4/˻poނ}. AȜ-(U4?wokU=6+2]mϯAџ ߪug+*x:vn/->'?zڋ=0(^ u—T�:{\lص8 bJUU{4XF"zkWfu+>fU͛. "WKf8ܯ|kvź,7l Y1y!ooqXg+c!tQ3!�9^Z{H +{t9+&BZڥ_<�yT}<D/BM`c> euDQꮉC bs`e]|o-*E[i<&ם xΗm+_B <O�H" EQZv=۽۱;&zGhW3#%J$R)z'<+?WU�HNH<˛3<b=3}FCl|{5tE^1O0]S 0) #4!{G}t�ڲ{x+,'>{qҢvo>3wjhO)Sv?~Gw=2�84Zz#; ZƐ>hAYz Jw٢[6(#73~G%=ܱsotUKZTk=6D%5}a"CL4SL)],4a@(zxF/-0su rd?ߐ}M`}nkM#8M#>Ԭ"#\I$UZw<09o{_Ic>8]tziC8<J>~Ң7=@@4U9%9zd?ߐېdh0@�L tCU0ihʦwH3ӕ>/q]8RZ8 $,l'X%Y7$YtG)7BR8&4(Я2~`(mB 5dSт @$@!! pf[)z~LBAb8z!$i c`R$ kI=<HOɗ$S  $N$2E| A�`۶mF#|?`1 !Zepp.<[[]s.��u]9":RZa@D1 kmoA;^"Ƨ껌�Jvlkv~deYY �9x﹞\}9 ;�p0Qt�L= GIܤCrX+7)PXcxjz^J:偑_oWLPnݵ{0@xoȃzJ8*; 1ğ}cE][ke[gf_'v/Xɥ5<K&ԑIb c;}b{/y7=vցDbD1دy;h5w5+B-+�_3;'ɢV>`¿;x9t˽O^dIfHsÏ®>;TXiϝ2%K.[>T7>4H fh]i  *3F˟Wec'vtH8D#}<޵f"<ΑjRk;Z۔@1%S&hrzϣS}~ř~Rgllc'0)P$7AǎuP1!#|9pu'H>؎.ivŊֶ4v {;oo ݔ،/~�HC?+ߟ?f20w=2YLb }t1hM0[SNC&RF$Պwlzݭ=�gWP P]w?Įͺ$f|`ƻF V*)Y}h%$Mxh}KxHu^C^d$=r믘f)QC.'ղ'CN?Z= lGMw_srꐖĖ`Xڑy%iEQi#C'>8}t#+71uٹG!۸q܉D% pxpj[!i*W79Rx^v 48@"jn`rhʀ�^3xcջ;\ȧko߰ZYn%]d[4f>6`8P5Lu.WqqH=tGBH 2Y__5epL6#g¤pCrb"$JB6{ $uܜ8^eBuMHX)ogj] 2#<UQ\ТB2OYSs4KDvY}@v7G_�9 Dp"2".x).�Jo!gXsԜe7WqrMot,ǵU%>{fd_O]8c`YaVA{OP]MR%F.s~u|A$#fl,p=3?!TJ|)O$2v%R_?X G(0L3O˾blv74LUuk|;T'0Tpc_s+:'~g ~RKt烓7I>fF>R~?Cp}gw*LBj9lRl]ڹKRhoR}^^?_rztbƥ}]<x~,MoɹYܓ7' 'DvRb#œ GvW&BVlߑ][fYvdk@ `'2w>2ӿyxvꍜ3]^ǐ0(rvi%0 ]ԿfW"�5ik.I;GJ9[wі"~HR|xBcAűm` IŕrO\[vgoYn}-?]w}MCNz8g*쇟#YM!Hc er7+>t$s{dYx}{qERl%~Wb_񁄲8BSwyde36Ofĕ f4:Y1:==f}jݾrIn|oQo~tfM?zlr}W�Ml33Wi9n<AyƬOYHD >2_bR)w§UofRc\D I%rX¥!uVpھ_m)1L,YẀGc]rs.'S˜XoN֔1-)kk{L5hSN9vr}Yk{,Q|=_Ƙm[ŅD$bryA_*m,*Wam.8"r۰ʶ�1ڀturG}rGshR�~%"ApA&0&#۪NJ,#  2 p.<w]uy !ce%W(R33~ FR]yHja?No,ʿ%��y__od| S+݂}9JBۇox; ~wO 3 ǧ]?teφDHˠKkmҍwcSxfWqf{_ B SE>;G'(-{0պh|g[ I79cNf~ryQɬdD-ljuQU83odLټ;ײ;QD {;/v_wpƊl:p `iT4* `dom7G }[u&Y|O65hyo'Z3™ܙ?Bl}_%2�GG77-^v}C3{{73?ey5j +zeX)�о#79vž̤{?[Oa6ev ޖp$m&l_W2wfdh<Bsڛjs4;4+C%cm&G&*73.z��FЗ]2.6t^skyY1I*Mw_BG܅ݖJskhGBonyTo:7>l JbwspwQ䠺S9{S[46j(ϴ3D)ĉil7FUL@ <=? $f_~j9ih*=s OPwտ0} $H )hS oW+1(Wgv9&lvYĬM 3)ˈED ca$Gcvl(HJGeKe�A޶,"N%1<^ٳ&q&vnq?8! wA `բa"�"T?#"!  !X ܮv]7!mQI8x 9Z1z~B~Ц*"Hߜ�hQ�=cB‰DYo-x{}1O^ft8AU$W@ >{' \o:̖V==hJvXxоjDbqIS9fs'3/Z[q[>c4\79j{YYvZۘur쑫V8w3>U9"O =w_|iQ@ πxfne[@]><^7_dUg4wξXB;]6:06ƣ /eG^ ]TzcvUk6$Z@cBvW̮xAPx@fH/B �%Z@OƁm*UUn l ]uL)PG4iֻtOrg t67A"^*$wcAH(u;z#$ ||z[vZv~@/g�JZHk=>{LG�JkZ L*E.5 J(j^.v*wp k-]8)�Ln#Z_qTB:pvy*= |]v>ƀ36Y1}r: $4"=/%; �1XUY%8myn}%1)ۆ>yUO17a;Ԍ a i )%9jMaֆ-J̱ n ʤO@lo6n.IBR}B)zv\/I뾂+ǜJJe릻&odE-7h`|pn&/2O36@ʴADAg!0V -~t* uD&_ҰK8`M9ı%H)K0}K8i%vD0)=*]`kN0d"DrxC6J<ڡrE 1VXt!$I%9FHT5N#r G3"a^u$"USGs&f&$RiUA$I}W lHY}Tg&TܓݾT* e" 4^6vl^ ԪUjFny^Xhtݮ![WJ'玉ᶡ4Gǚ Bp:|0 �� !* %";NjvûJ?5-Dw&")ݎiw]73)|PT!+2a .GO&c*=Jm2?i*RӮFjQWFM_}Y<Zxsg;^'<�FE?r;^f#CuWv⅓/@C?rNj=v ?bO]8FSUZO꾞 k/,;>{5w#8!u5.TF*R@> Gۭu'f1|vTA$ A?7ϝh@3ڹ12QZY x#Ļ^m8_X8۾x=7=C㥙{joO:{tU+֯$GuP_azh\o̟?Ze66Y7=fW8{䉝;'*OЍ9@Ჯ=.vK79txOb͕%v-+gnj. �3r{IƱ^LVê`kic0}{sݍl'gSӻk*~?5*5RMwbɭ1?w]*[oぉD˫O}as5#~sJ&e! 1{Kl|gw}N69 G RS 22�"ѫ*4/UZ l暷8]TkDy|WN|L |p5<]mop^{О<M2xX1CGvwqCN_ gcȫjZ\NmKKsnb;GzB_~z!]&)$p+qЗMnsZ[./tۛhih"ۿ첞DMP\_.i.K{d<4V<{&6VmM2ԏQ |iei�&vTch"�,/t4mo�PʍwF|%r6&2'@^*y탈`FknR.ix|( e|ZV`\pF&9onl+��å}v-:ԣtgWA_dȴܥ$^ E'閔Sf}`g}jg[8~WZ;6嶱G3Vox.__֗]�hGJ! OUQ�mp{Tukk~CcC͂&[FsF*OM}͞鴂 UwclhHyrg0h bzns\[ �pJ9JCjqɝ֦?{|)K0Kv6|Mg`1,v7D~fI%`o(aK:-A'he0հL.{\^'g" f8)K`7ÓB֧; ͺ |=~o8t=?1(0DEB0iF I�lTkٺ+LJ }2p 2 ILJQљBb'W8v*$mm!ՙ` Fm6w ۏ߯d^}"[fJ; f8ĉ1VK%<˲Hh�p!XJ_X\,ȿJLanqcag!Dt,+eْ\W�`)a��vRqD�'eɦⲯ8c̶NZJs {H�>StڞN0H()eE^tLK/@;ot!53 kx8XH7?=t՝D/?{ eןYO# zA=L93롊/ޱ^0mŧV +-g X8۝"|~82FP0-!#{wzu( ?Οԧ3oiMZ$`n;7{q}{S{ l㉙B:) Mz] l@$Ak VeO";%v?Zezftrݢ,%^{16ok*8+.ζf;Ň>1]p͉97 ZAcف /9!7V|u<_W]?oXo+,͈?'UM!Kok_߼|n;?8LD趶QO.F?v[/?t}:uT`y~rWz Nv%T6v;:v9�]V/v2[?򜛻o_!Ԯ?p~v῜ |3\O7kw2kĕ S_+U—~_qVF,s\S>h}Ϯ+5vGn߮8eЀ`tr=B˿m(5O.iWkG@rQ2t]<4EukȇdzN+xK|_ `ڊ'vIuK[X R6-eϘjA76f�To:=> ?%3̞wEG_Y{EA+;*;nxx+-KP:^F Νl@]'"Ϟ ɿ.#zg}_8Z<>Ϸz+.n,; ݬ?)і="W) %? LNڒl</u/zБ[ 6khf]ӡ ߰ʂ+ p:++k75V�GdXϤON͇3TZ~3n=yDu2UT2t\^zzaB7":Y`foȜ}b^+kNo#J��@pjfo~ 1zp<4Z^[v3{?y[o{\,<ڊ;{| ��W[ 475>>N7_:f7LL=1{l# l+ E�ju{윽 .owB<O5R)Y5w5[Oic;: vd>]a|� p'%cOLC1g2=6ESdpY$`5|PBe*2RIRrf X^gǀqcJ)H/?(/MZ@OLYc1}٨Hwm=eOU[hYBR*-(9 RgN.[~#BZg!?(wJNu,W*[K@T"ZǿVL9*E0B:z8?А$&cꃘjţ s/*wGK&JFHfh3ٌh՚UUł h;�2G"D_]ʰy@@ 0C] 8$0ؖm\uʥrpu�QD?9,2v& ی9iC&,�!d2Ɛ� w9ޙ&?F,)|y\;{2]{́*1FeleG407>ج5JvAE�<0cן]_Y<ݑJS  )1?:7kn'~eszxOϞS1-)X^"�=O}տ3(b$Zn �zG{|Yt(Jbo"(DȳX+Hsa>֋e=ɝ]RHG ��?9+BR-=Lݵ7 M=4JEISM3,AmK] mRJ:kYx/YF�˂3m!~wu57S_[m*䓐9oA & rLIVM `P @t]x y|&I*,/Ajg|| 珿uꍭɝE^$$BH^[兮zw3g5Sl}/X1{4aɓU_ٗMƚW >_(NM@)`DaV\S6_O ॹW>7iĘm{˭�###ϧBt:?D1x.m=(("ts;w< {&coNჇJ~G/Ϯ, r=y//t}_oR O_{~G/ζ^=)a oE8=#܎ @UsS5>ڳ+H#IpVkсV36U)nr}K[| )bZ_둢9G_Y [{pݮΗ?{^g.\h+'!OÅ޼ϚmuPv̥KF8P�miT<oyNi|SF\@|ks+.f,}y>`9oT=1Lnz']K@kߘC;Zl: JSZ?J黔nn1[n $kk'^[O̚s<_pzյim"?"=yԖ" )L/ S ^ژq+xafr= `(LYs/;Vt6}mt#3Hn ?G+=UԾ/^}fimٍ> t� ^{nyAo1Ҋ1N/Xs_}fE"~{k7|Wwk-3jNxs2+8a}Q@Fdd1&gPWz{,)h Wl |0š.DQe(b}|hi=4 Je>J8&,AH"Dl!1bƀI)$8[n<Ht: @Yi ѓ>aԪg=\5uYLZrJ8Jo SJ-L˜nq�%\}TZ_jˣaN#2h]z0CQ�~ sP4ݍ-Sg`7 �!jq%" [* B-P""` ldqG;MFxàRKHHH! AȌ߀Y �!  dHHb  P  Bx@�_"5:F;ƌjt2r57t:SD<�Dт3 >�1vPۣSY՝w ?r0 fa `1áqX�E_&d>1r\t mE i�O!(rNrjc\T67ܥE^gƒ0 $l R;.q9pWc Х/WrUDJH%a >x/^'boo/ !|3Sc,D?ɇ/mqv$&%'H%cYa< CgIn%5gaDz2ӟBpOw~xN~h;q=R~_}֕I껗n~Nt$'nO峓~igssoQpkϭupdTSpoˬmD9Ypcx'2{Gjܐ@ϧ.=C__g/̶nZ(00%d;sDAnhc<}}G&{4M_zF!B'g?Jmޭ2{xH;/ə&ϕ];EJ^a>;zkϮ~WxCV? "$:K).gEW-+=[:w۹w *�_;{bnI_]+T/ |i@-ooR ˡgZ+՞㯮Z݊ q1{|s×ctr|c+k}fxx;gӋ[A&gjz H^~MorMUj=Jr.B<|1#{/?u)0 8LML0޳Z'y.E?ݫM;UJWGA\OVDD(" yp\](!*OC0L>0]XYZ-d(%% n.v論CMT |w9 FူP0$d� &F�!�aa�X@V  �Q83Q8  #@  <r r�P   !@ ĩ$&aQG $~\0�@0"FH0L1"$DrPB(_+% `9q/ц3\۸<P꡻;TcVs[]KVV*De6!Db@ B"@KPg˙ 9`$l�dEөZۥE宔<<}##}ibp&~y*e@�8q�A\0H0~ ?yZ PbTC^%\@b>D|u+\FqRdYq77;m �6bfe * -",ch̲1$ h3{M#lC!#q)IJUѭ& $((;ʳMBN_ o .T:Zpbh Ή\-#Q1dG_x弧82�a%JM�K_NvmsgD{PO'WAO"Gƚ~>qu89+-C!E{bh02�F˻?4B3o BÎuIGw )w@2)CWbnG_xϼRɒ%pZ*q셣 %JAVf[ >wݒW$MӗWeٸچ*PG˻䱿]=08튋�Zq̺Keֶ 0W4Fi+X_B.ui2=cYDHvR"'TYC<YL\i̷7V6oB%ZF< 6Z~c1s'ZF>~ZEIL&]VWO!u^;ҟ?.p.󥹋g{Hx`r M=d}�ʽÉE\v"Z1ЅFA7iu} 'T=ruE"_P„B DkWGa}} aBBϝ| A2CZoZ(?3=:6|nvmXi \ew`$BD;@HpDqqҋI:%T?AK9oz*IRJTwTOr}ịeAFyLjVR^?lckDtؖIKhxO,@Q$Ws9$c>l$XZ>%BRH&.GzfFS\7mFIϟo=ְMI 5"ŽEOK6DGf cRᤕdЖWiqH}*Jѕ5�h 8;MkLrBD?"BLSl{+0Aߘ.ܬ&δ&-bD?J. �Nm-!H`jp<ʪH_&U Mʘ54�Y�`;Xٓ[ĥEa�ɍ<BXoZp7ϷDtBw+Db.򤞟p4L>rc6hKA&{4-W#2!*QSz>d[1kXo JևX#sڔ4?XZJG(Bb|_A !f!AHd˫:Gg >ZҖ -A0,AIcuhV%s|+z3 hnG0'TnR>@ת_ p\`@vې B"<SCG/0.e7FY`qV%P GHٮ: YHE1 00^M2gV8'1mXq.(ܹ(nˉg1JXjYx>sfx#7� `alY '(E?‚E UaxFDш)¦1p!!C yTƮ#Ye0۹Ɛ,Ƭg/q!8"@ a 1!EePKDGUѦ y ˦Z.&oN*5D& $\&i_'K}2@lWL2>~ߎ$!g | 0Gbe#0ΣyZV_G$Q,( oW.-t=  ;0Ʈ -pBiz,u8h\!JB$<p}?VVD_[{PixIw>I隔n} g FhtW&;ݑ&yn|պ==Sd_8繺L&]ϟ/p" I4E?|z9jд|_\-+?X%#Qz8?0T2}4zjL_)D3Хm}qخkj4a+- # Rт]Uks^"CNf&��.\8득_ d#G>1/i9z#h4G8MR9+:‹ך= %KUc}1eB!۩PW݋$-|LڳbŧV$԰ilHts饂ܧaC9Al=rG}ce-oCݦ !_+8^҅3oBoDHlfl"H*"�@}<rvm(ch.lTּ )pL4١Z%ϯj5='+(INw f"$zxaq!:oRM wri芐 v0M^#O B^&t~xK*B P;L~ع(CtStg1-\hoz,v\tu$�puD LU6rC 6ܾ{꺰ձQ@;n'H".vus Y\F\Ov1Z"lНz>%Y_>@v +B޹mgf! Wra!2.9,խ ?>05 !^8{b`G&iUY$EPt̏Lvk@,/\hAE{fB�g`#!c7<F4:-_a?<VNiىST\tu($y m^.-`}82^)8 N'%C <ZF&*!BH!]mQ;}67$A.@7J8kfZH %H3@S i`iT'"w>%C*.;2-A֗8;K0zn( 6eP1)BDH D1!YT.BPE):�X) w1I6p7]$n,_A{ $Gs|DDZ)L7O{22-"C}B׳*/]�Il@I8~w) n8T#�AJ`WT4&kCCF \/ólbQ ø( r=<9P r &@A 1N, �b1L :#h!XHffbF0"#b'�$D0LF#q ?<`:Ȱ72 u? @��a4 {8+ @Q8Q>&#�EAZB$ Fr.H@Buۜ *jJ`9Pp)Y̲s2BA�!$ �<}<sEE ] .H�":]Wk]l+P`e\.<�P x\V},}=Ay<3@!8 ABsrN~9;KP1lmU^4x& udb1l7M鱨d&P ^S�Wo/yUvuM-5;1�khIO~+OS6V!-w3;{r]͛eP>W0TL}V;vZ[Zb/^aB{}Ӕi6s$6K<,NK{"1 |WZ,x P5f\Y GRC}Zk[AڻiRqύSWm"NJ�8rw׾'&6Jĺ,>-fF#xMzAfkrr M>T65*3֋#Q" Ine{0'|Ap2dҳ%|KV;82^6Te2oz;MY4Y*1],x3=UZ?< V;[&اwW._߼~yAcʑxЮEYɘrFı^s7xrҞYp~}Eb\1׾I1 )q.F6w?@Sr:�:Ƌ]B7d}jQƪnYՎ3k)l)xDjIQ|rD)jnƬ D=fEՉܒՂd=_oȓMc%g*1* T<\_qTzp flXBəΟ҅HI!kٖ҅6"@@ԑ+K Eap++{uPRjf̙-i qWv{cSEaSog DY;[=<QmKdX 7s{ G+,Am:D .^溧 !8.j.6 R9/͵;-?י^x-h<8R6t[ O9}R1?UT#+M 0|אWve8BL`>*ܹ\/mrr6V`L0tIRY_FIJDlޖ<6hUiy.U`  '` `)iOLjYzQY+aFAMOL$ ϱ֧]8^BH:qZdIM=$wyBǖԆm ׌`Z %y2 sF{LY9])Ep"Q>MKx&{yS1 Rt+0V Kuf,NT.ﺾ΋( ~ChGKTN; l@ 5V*h1.' 8�-�Fl&,K،L(,$0D91_`oL  +jp!g38K9q�8?(ΐ - U !<8܁2PX,uy �(:F�pX@STf0yhxaڽn=< �0p j,xrz8CbLf'``a`WC�S�( �HuWI  }? H3fvDEO"(�n&]JRЖ5,b٥!7R1RE^_l5r{u-_EH d5>_A>x +^pC翽 %SP/Z/AG_Y_\@v۫o$GJgx($O}i·&<q( -W6mmB c%*Z/rnm`mfScБ@hw=s3/rX&,RMT41Ƽ﹦h5﯃mˏ5OW=Le�~km w>Z\9e 2y3#TkL%rs{AKy~{-Ѱ Д&Sz$@#l;>FiT=\y}S 5և@t,r2rY~e jk)5+lڍf:0X|4;<_}vU oݹG? Cw4I/CN^P!FU?xJ}#oS5ɎZzD䙴/T!>DrR1$BV"Tx曋 C uhcŧ 9<Z[vɚOPvYTU :ց 1<|k' lpHff+K*p},&,>jA^^_DR1h|�Z \*ܐh$ݏL-]/Y K*.! o+<67Ed94O՞c`}ZZ!"ܠ6V<N Nny+1",\]?t ll;ג+'(ä֟f (}O;"*Hn٭EW/uHai"$;JJC8i`"D!ǍN\F+&hOc;DHc鶃stɒQ$77^6uxk 暷4Fo(_<$)d9LnDums~ƔikKǬ>CkʟBl(MӃD{gwݡY`p2j[ }j3bGB�Q�v�4!-8+` ++֗l0C8GHbyucV_t|G_6x p{BINOnR 9I \#p1Siu氵_PZʬ<DҫDEΔM_3`%H LV `l @0"ɩ( N8e-X� *ͭM V @o� bټT#b̆R*Ur7rd"QCX Z`EOrF(0 L,|EePXH (/ �$2EG$ Q/Lq1��",<A�2 S !B7 �Yr c$.ŀ,@@-<&8 _D@ 1 bM%Qxh &k �ªakx8"[[ns�@.XvHOa6 $ $*Rr1)J&LoUz;A5xm2d�Z褚td+Qut$^J~d\1@-oq}ȥ<Gʕ:/w>(Jd~>;koaXxtT)C͡V_-xpf;q#;vgS3KFmպ]>1vsK9_|jƊƀͼgSˁK0<߽_8SĈv|q='\msl~č{\ߵAB᎑rN¹ls&nD=S3\cޝjG|^q).B?amu;|;{he?[P#'?ٺxUp@Hu:Ƌ?Z\CKt\Yt~R6>a|:{YD/�yڵed-A"i ֹ1XTUzGcSYL=ϸ-@N44m˨-wcͻ[f}Ż_ Jgvn$GDHtUJ?^ah? \ g9uˮP`�30Vu� ] ZP ÕƤeVJdmĢ?A@qA(H0 ~@ Xx/0ځV$�BPXoB{X0 B g[0 FŠb)^(D!$â ʧGGi@Ho2v:=f&mڤbc1d,<X4TNI&,A$ aD"J-*Q*-Kuie}TRnZN 6ֽs׺m`Y6C+Qxxd1@ `axv&"]4~H9B^cms@F+ɾo󫴒J@LTdD_C%pɲ$=C21N]YZC58-Th_@0?<W]gs2Ph?V (ɦụ1�Qx\9uOq5C{+@3/O~ڃomVW~XU|ƪj;ʵTE!�+ lXXFd<"sdt'Np.T[q9\ œ_Cȝ%KqW WI;Jc}BiO둫2!PO"p;3eF.gN!Deu}[ku\kZ[@c6Br?\{cQu\^brU"NUwEžg(3Zy57|( T?R}koNu<ײK(THazj�@&B I˜pem( q#' \ܵ�ŭ uH' hzyB/}z#8V@r z"=b({|h(ĺ,% udI '<4YgiJ_{)`J^ޯfkTH(Q?­ 찔I1O !pDTz$削#bi*Fd|_@OvO<XY*KF#�1oxP>)=YpA dd rDB@Aal<0~/z녿d"Du&,=n lA^Sz#2DѿQkS(6r(tWe1Y?9 [;0ry [NH T�R*%h�|s4[Pczw8/QһXIPSQgCI*BXviS Է1HXI-.dsőd} 'X1WKt([[;t֗ºO)'-|ha$BSN!D.*MI((�w"A21z~W&5?'91a9섻 v3zHO %ǸJ n1B llkze1!if xŕ|Oi2 ^ĄUJ.լ85l;SPS @|HN \odstǐDt̆Ra%&AjuB[nQW�Z) )&-ȉ DB,(,m;  G�1Ds6wgQ#iBA6;C9$�@ rD jaQa HhC'*1*o-k/?\ys.�} -7UD# <a[B=(jO&U&py--۱K]i7櫋or3WV\rV.UH|"7+/��Xxd _1bG !8a/h<4c,(+mg)~`R>iXQfs ?4\ڃcLL!ï6|;R"U))ʢxwXɅs]MS&yZh,uCf%�PPlT%AhVN5F=DQ̾=ڵ[XPBf xʒkÃ8$Ֆ,2�eǙ(CJNխD['^7\ܾtGm�@g<vjK5w؍J7qWL6iS_{| ՟*wV$U9++6r۹I6& >:g_8-p bi/b2J ʙ7[:BH$Bz_> :/s0qp+cЍApģ~(huzSףRJ5R7KD*1`CKD)cJG=EO\ɿ?RٺcOkoJQ>DSRW8#d:sI jN]s6S|CG!`5_:ڲ Wi<5ܱ An\2; fi=P�"w9701PFۨ#Wˑ~jbz=; E:qk o$erWfXefx{kBy)3]Hh \=z�ie>L{2Ly Dp ^�x^%hor-LlvIsqE n^@ ![thn ʖd}O<<+N ]'`RShNtشLwQζ<hZt&HrƭZ/aB#e B *f} V1'X_|6:*@_ac 0!"MIH35ݭ<.J: 暰$rTlMI69nR _A1B� l깪 F47:<3a.} >O}f 1+| 3^Lnm 3<G":9 ,rvQ*Umg TGFnqaMD0Pyd9<UrXKh]JݱL`ؽ7R$ aN0Fq7@`9 * D yAa` A�p ΐ# Q2 HX$,8Rt' ׇ�$ \@o�qPpS&QP a6 ؖXe +-_\~SKn'�;kk*(4ga sD3)"UǪ:%̉^[xo̟ouZiD |xD>QcA2d%2\9 ;9{}]=. ƢCY(H0,ڎ;ǁr}kĜ`D-m:7^f7Jizno[_ҵ= ԛxb&t0 Vcj=br*]H];RyⅎlNhyɝ�F.p9[Aʹ< -n dBܔAh5m�ŋEkM+V5f~,C*|% W s\?>hZk؏~jgdb6"%OR) Vr{QG@=d^BVW);�JΡy7BQ8K)Ya"Upy| Dȩ7?lm a|`ꣿS 5Xʣ4v*ruZ9, aG<G< _Y)9 ; h>tH!1D#{Qw|2U,Pvu Rʟ �*5W=EgYɃ`S5RвpNf3[c [_w{|;b3!TLOy $%H+a!*Z,~vR38N ֦P r9|aij)X5U9ڥ܇x.ONAhrs3>z~,�$[!O% &nyAiPGKdZ3EnAԜIB ^kZU&B@CG@o<ee Ezɤ% ǂHgyM �D�bپz(p*�f me7g IA3b)ā&4TK 5|%Z/$4S�ҋ0h~bfopԌYؔ�vpEXX_"N| hIa[O ED^}3 ZfDO"$OCͨ|zYL KM8Ҝ9"`T`"D)ˇ&3f7Ԣ&܌h"DW!=R/JpJU+,ݴw6wTlN~t&'`TDqƆƪ#S� `8u 8N"ּPX(lm& "BQ㳶omVgn~�@�BU.PX+lđxXJ᭜0 "AhШT1@ }P@#aAXq' \ q B#z>b@aDHs, +0 շUTmqLkp쉕sY7ܽ>H 8q.ќ#'Yemr M?8}BT` @a-нpfc:qlc7,Ve v�_@%E&a|8`X̀, �\w=RR` #Cb2<m??i+PSO{9po@TfhH} R=Sd&:d^5XϣD%5mgW+N劕JdD-ˆ_9J�xknC=U//2(hAKʈSG\/a܎!S|=N&B)($ )#lƪZpKWΎ5l JZz0f{2*WYCDWRWʎޏRZl$xU#[j '$kb"5׸X 鉽}Lu`Hv_\(4ڢ,|!,<­\t'L"$s?O^bCss8pڸ-mݨToxS3SW׺@ xg>Qgvf'|aBWjB< 7|Kg'\ !@3)#$0bA\CoںR-{C-!:K u(9r9ĎڝKF)dC:_zy6P`󣿰wtL :6T$߈vU"3'^/ʔ'γ</H(NN` $9 A͂^Rz~єE `@޺>h a_r %ӫ<5@JTZ\% I!%]P"^Y))>rJV!f! b,QnF:3F 8?O\LhOwil;�V&@q ҾpL tir-|W % "H$T!@<0ҟoMT$4=] GBJjq*�1!Tm&KHz;etGz%(8S1'_֧79efS7WXyQu Zi�1 )�G3L΄V!%zPם`I>y/63́ҠrCױ T\4 ))u^j0BƔ5âr0(P&Ԗ+DH44B(!;! c!h2$vr*h9$XU8 WJu+`�!D Mk`Z(AI>EV͒]faS�0 d1� -ͮ[V`uX�]q!<; G1. Yǎoml 6Q#PG 8z8ksV@WYQ`]6`-amqŭg]]>�G k`4 !Jg<`~jqk[[## 0X@8;z\ZvVDp۲в"rN*]]mm@WK �PXqfpNA �eC㷶N}�86Eb0t,A\@El؆`" $Gij(r<_= K~C0~s.ba rݣ$IE:bi�W/N>f{~DOR?7$84OynQsrnޞP7̟s?POgBmP䊛kݮxKs;No彋yRDN <֋PqOen:|^"ßVj :UMCE~e@Uz'ǙW�\VrSTЩRQgQQ</>*GS'@W\;UJW*s%B˲XQd`B  Z԰ �<`l94^C[l7aTbhu݀{=nyXp%�L` DVYeK�DpdܲC,|W7rW6ΰט8]wYvۣ6Y`#,c^í`Wڞ•,塠:A˷ m,b<ޢVW6ō`wZV[Vʈ(59.6XwV`mƪ- tC^eȷm*oqg˅ ȶl1" ۶O^'hUֹI-֪ {1QOX]ç-aui#l`'\k9pˍuE}-)+ewVpU/fu1cV66[ ~Q\)�&eۖms9Q)U:3�2f9Nb6p.5*U`*stNr%D|J7G1Tz;,,@ !X1DBB0&SŷSQme JoȸozwD /vnu]/8�sqD+vbm9m[VohtiS??-hY,TWL�37IPۃ$7N>sxck(Cv\{kKS9!"}MyuwZM4x:mgyMUsoT`d%E4>2ŹSkl;٢Gĉ !ͼKURk#r8<Q-"uEYjmafvfg�dwu™mxe/s챭?CGvGelzt51^(qLtIGd< ;2UXr\x.Xqu:;rǃh��?8 2ROˉGKXb}B'So<62QW=j_TLה_Z!KݣB\+-Ep?1li#c MI=<Eo:cʍwg }h_8=zF$Kޥa:JoL1r4.Hs5laϵePPz*N�m^SOPJ"fJ!4(8g٨)|{-o槌od-< ; 6<pRgMK):|+Hma/ v|ca^ %|XYrX85;- C,65O/Ak'@QzEZ.nQx6`{/ GA?AAx _4C0%o4A 9'2]!S![UI=7\%Pz%d|z~!Amf3LZ"ڂ!lm? mWM*!-)9Lx˕v]4<'Vȣ7Vۧ$<-)FE>1<m&dL- BVn2I �,XuhVV\AQ N8vXPcY(,ly" BB$f%I-xɷTtꃕjdFmk^w[~gl.,lf3f�mc}T;`Comu 1Ti6kRYls,ۼ@@aWKZmm.*Xd+]Z֖ږ�cՆ3<Z)7JNJem͠V]B"$D+<Q|yVV ;RsʵEݭnv;.T5DB˝MApq h9a", ݠŅ$X c@x6sR80\+e,vr_h\"pThQj5@Q `xE`#�Z  JM"]rj4'F(lL rye2V#b F{fBGoP+ykp'8#B,1K�@!>(O3 ?wqP~o/ )%ZP24l rQۅw:d#yX74$o+P�/~sKY6�Nd#OvXiYįt7~]Yk TʍiHFI4 ewܾu'PfߞFd4F*F!"PS Ď;[l_L=m2?dٌFr#)8+[_9pL9칛7wW.oV\ f}2D2үCW-;0X7&*щ72ɦ,=u'YMQ/T0sswկ}gג[e˩ibUo g ֨: n!` <̏gW ܩo}dƔ1i8Ĝ�u;:i4�6ۚvצnCbfh+^C0�<4VT SESMP!BH![AVf>/i9 rM7 ]-~ϏNsܹ͞ƙ[E0!41z_0M@P W;*KxtEj8+amL½osᚘ1)+m_w"TjP':C+;sI=d}E J,Ml//)luN �<O#nmx''32&ҿDp%!)z@�0�e?!~uZ||)lPX,F| ớZ2c'g={ _Ap@,2$X- o7Ů.)l= B�� z0yH"{b1! r o_5شiĺ�`:Y)x.he\0B%5 ֟%*`GtESQ@$,c*!DQzV.ZHRClcϒ e\aپ 7i%hj@Hy/t%lL4NY)ԅ%H`#e .9S6a,F pԁ3E !(8  YP95uxF նV|wXa�`ye� Jb J5R/ ,Pe!"pܠ&ڰ58o*N٪Ua�muۛŭ[[k] mǶU,vO5+vA jM6rq7`uV̝i-\\rךpb}^>6hrX=tί`uuuەFeǁщPVw*c V:Ksg\oy< f۬\,y�zGwT&v LꃕR˜}r[Ϯ-ίNcޱsZX̢;Z'KZ+7k{&B @lyNlxrpnߴJ^skLTFzZfn֪# 1WZ5vf@@BK)}}O Bc]{Gr-@co{6NNfMvCDޝyu*&ci @A*@"D0@Ym3�PJ%"q2""bl$\)sy1`P"Fl(#sS(4F]Y9 z[kE䘵ߋ(Gr}7/S{=Xoz=4Z,<צRWNT�c.BT`느 !Z/I'k6v liYZU(;�d$sfSς5{d<eenf5I0+*Om8֎}G>13V4g>:ݏo9/C >KyԒ���IDATmxjc`OIXrK:-7qxdl @1B_sO}ǦzVz߸�V%HP9$W�A s4zXi6*H�$?'~cHWЎe5^DHjuqP@}l<$Bt>B4\H3Nt<ƒ#%3dLVP?pյg_[pDn?_P-|Y^~GY |gnB u(D)ƌzoz;C8Vz;0HieRuhi[vnJ!|ה.!Ǫ>D6j'd*lS/oR®&Soy3넶C֓UP=G+%اYTd fZzs|QD`:mZ);ҸN+S- K+n:ۇN'dD=7~ԧ<3)axnΫanv݀*( vm9%L.�|KPͿ+) GSq-= T'̰` K/vqd9.<<i֗E&UiA]ۧXO=<c#*siK0 ٨HݤdIG!j]2� 2\)N15#sZh/ER8'MD@@ �CbAmVb]qE"xl݀|T-]XRza h#0rծ6K * (x|nxC#S)ZhGD%e>?eW/Xn, v]bfyrfhro6 ?|wh9:ٴ*  Qc._nzkfڪQ+llTdDV9Xâ`uo;2vBPp12WN ݎLZĘsnԵ*bxkZsr"Έ#3l}}pl Wlp.׽ՎDP*٥ZutZs X,/7W[kp J^k5tf580V&w꯿4U۶#6€ !Y(H&b1 BpNRI2:�ηN躾Gf!t]w\mkƮ^bC^V*57Wqf ��X|v A#)YeY%Dア�0!w9m K0)m9˒2U�>KES=UV(JɨiQH Ш�VIy@mVg&SH%>2Ƭ/6pv/JPl9dK<l3wjc;<]gۧ^2c8UH@϶|cc챶fdL>'E�at4#D\P4QB邅�! zz*34v13;rʩ)HxEʭ�^]v7=ZnrǟҀW܂O:X\*kbfncRVU%h|�@6P W~!^8 ~dG}r#ZnoHˏ %jSЭwة}+rؤ"\J 㥌LTdn/iə2E7!*xKB ɺdn Dʉ՞h 9Z�v?|vqv`s?Md ?Hs` rG4Dq0U"2y y+A\+AGR'Kl)9<Zf }ABJW�'R@Bw2�sOU2'HeB!MRD4i}r{(^>0\?!�h ;Y i0҂doS8@*Ja&B킈HYWc(B`>Gs�`evrלuaD)h<FWO[sHRMH4BziI3JFBky `ɵ.i=YS'Z~^p5?4|E@v O"D'.\(6h9ރd'ޝ֗ށRRpq3l,Aд>TrL [!=QW4HFbZ6ڶEua9ﴃjYALɒh|#m 6AmǀR�r]i՜vfIVf�S8Upƪ 8|Y֔?|(̈́)Y_pL[# EHR_Hhq6` K0z%ő>_Hjnz s3�\|_>%|e˛',m bW |i6SHhP%㸠=$ GW` 4Bp4re1H*=_>RY* KPvpT˛p<D|#~b'Pm_7`M`C�6!$P5D&"$3"` @֛Sbzrq�C@ 43u/Fƺe9Z7lXX `U @�Tvj �Q ]\?ȾjƘE1Bke4Uq*On^趷J aR>*hm8=0$plۮXb�Y]=rxe�ÖՀ2Hm*lZՉFitsJa)F)5qض˥βtXk%8 "r+{ ]wxi.-LZ8:c#nh`T&Fds!%u֜�e]K,1$A78P7ԞZs9e�h�@%48FsW"h #2+Uj|`& Մ# ,<D;\3rp6Ģ5\ÑI496CeUq~p?8Nɶm,Hz=~)+Ph>BrqF uBѡ,f8wqifOlZ'vU<E*zoGLzGn)NJY<08o76 G/y.=8:ntc?ZП<ltV_wW�>] ۹?=//ghw*K;vg.m0{l</*xi;ODj?M٥ːo�P>x.Ν̅nf_e>>`_ �`m?^, C:�ғ_@"tVPϊ_]uc%ߘ K"pn/Uziy[בK4,zdwFͯuYYy^a^G+ EUpFO>u[ϸj O1f?{hervYkׁ3n*]tUDHraQ @,׬Z }tĩ͝[0&�P`dͩ2'#ףUaʀ\88n%BBpPk8j '9NGlV:& 84<^X A肷 謀X`հ6alpsbU/>%2 ` VR}Rڈ�<!66f` 8JPڠU5ƻY%w@(7ʎ}{,UAn5�0J r&v L5MGX v~``s᝕moU讁v'Jc;N$Pb0 y<%@b'�,BxSZ] [s UomZ6J{OL5++*`cLD`m˲2pWTt�,�&A s/@yfOsmZ6dPИ35=p}B Dtc?PBdV]Ĺ}|}s.i6m%RY+Th%8qB fF2ҫOm=Tj [EQOɣIX ~8%k_G~*iH*N;N UI7=wܩz?Qo4,ɂBK&<,hK57 N?YV/KZJ*Od(=AKrfe.mn#s^B]V D蹇osnd.kuu2RZ6?T?stK̸~'8F|"Οh<x`aIf B7?r膡rzc;~t1T؈T1YU(6BOXZX6OJ~JUVZ噖�2(�!4+sv%J\z#;Ńq$P&A�7?R2n97n!F%a76O^0IMM^ hU2GbeBζT}hJxXQ*$@|-E% ?L) q{F ʞõg&B IK'7-yzYGHԳA~܅72!K9Ը}Z /At_X)NN*�NYDbX�.wgC%Y2D/NB5MVy*iμ34QJ7 `LF'Y"^<P:h3I]3an®gc]i|hA}ī^=o'H;%L=_;O O$|Ӵڗh_�M42n,̴Itphc5[ﱝ#e$di %v)sZR_%��rf-#zi9G 8Ɛ+B7'!z!=@gLƚy]Ǧ*ˑ[JLuކe ;֥%%%+E5,OftmtZcb/Яq|X;bb}r6�$69KyfKxW~_T`lXֳl0%-APz߮|TZ!0R.w7!l2j2@prIK`}Ju)iLCIg}zQ.yGDlI"鐹 EnߤfNHlt9n҄l vcF)>e|0z&R $jR`3>ݖ`)ڿȘZI1b]m% OD�)jTe�.Zs,.n' *Pw4C\_vFv6wԙ�Ƽ;7tqG`Rw 8K-XS{gO(3@t7©ֹ76ξvꅭ' ڎc[^n@n <i!f|@ |6Ƣ7󭥥Z#s™cs^G\ư5+|gcKgZ˝ l�k0<]-ݠZp gbfxס] (CX˻^ Vv掵.՚;Y:l`4Ъ1Dq_ (�h[<E�ac}A,t-Ҟ3]  [N4{bmZ +cL�$vX&ъ2s#֙2"}!N۪0p;ƙsg׶|K!�1@ �y"��ŸKPһLhY6c6�B}<s=Cf1kݞ^pGޥHZT53|"d!K;I荙he 0fg$*R?Fk 9<))vݭ#jNh2oOʾ>٣/L,vm</v) *.]8[TP3S忱ɦʘQzFA*&99,O pEFs5\?8g%)9YzpӉl.lju)&A\jtgCJ_w_SlD ҵ }w[6SGWD xՂ5BVI'MHn,'Unf&#t?oKG$OU OWcX[]2_#7>XT"L Ni>o~~1h֦%z"lUI)TK[ͫjo osMhĜPk9S?M;L{0]orL1Ӟ~DW=Y4)y7y�sn;Tf}xJPEO=T 5xu#³^?.1|;Úc希u9Ltf+IxTlc'E9 SMl$SNXĵ�9jm퉱qdRwӝ�}/ײ{GL@wI/p3|CU^.=L6`З#5 Ez~F>[sGcy)K,sr9g+&W]T6="S-{"}bZKnjy>̟/ӻSh칊 {{d AzD%kʫaWa:#֢ͯumcrվQ(Zwl(%LK|RDp&ے�nA{͡rS! d :.w<LEGopi1 Pg}'0~شm +1uY{M >P|oR[#e B g}:c})''c[N &BR$BEVulf6$O$)bh\3|X б\ {MVQc}ٖ`p,l1TmLY!ǘUF4ψ1$L+ &  A##bכU��NMenc┫Ύ]# u52j`# u~srmD+R*۵ZRrD@R1\wdx) ^z[bk/'ΫO}|gօKݶ@iSp\`@ǩ փ/?u'OZouZs*!2HB|讈ӯ~{ί-tk`NxZGx^{噣^ktGo_cJ-㵺AK4410o|bO6snw|g^~œnwC"!8!C"@L<" SA~ S"Lxp/ᙓ>}+S E,6 !ԟ B)m6BvB$Ddږ 4ڠmբg,-=7W7橳g왭2B3&X@ X@Џ_G۫�1mYcr}\zr.G6"laG>)~N(7ꎟ،=٬ҨDڣ+uTK4!Owp~_9'69rc{yx*ƻI@* R=զs o,{1|}-xxИ4G~pȋ]*xKdT^,P*W%Ʀ yO=H<"YfZdтgī$ʳ&wn}` Z^0 `; yꭍ@N+iw̒ǘ~ϣ/|[F4e{MQKL�_zN>o(%_6_/=rO%"z… ֆ-22,/7<rGFqӓ $*TB}+SB\.SCH0U T(nz~i,WL|JVSMxa50�!7>[z䉝L9d%6]8_ <LG@JLal~N]t2CTӣD1#!�QosI`&r Ƚ$WIl$]!RUa"8M:m<Z;6j4'T$6 WO!P)M]ihpx,AR$_<_|`dfc3Y5|^~dG>OshG&4>+tہQI Mu(qjL/T K<lrÖjuB1*Zþ Dr }#}}O{u=&䵯 =_0ĎUKx0͠Zr$ܗ*OC5ܣfy)`&)4`l]/Z^ĤYnş ܹko"Yҍweӻ~t;FћdZ:* "�ֆ_0neB knsH4BziZU&B@CH,F'vԦvP̂wRL4Jo&%i͊,WX~dD]Fӈbw'`w3>pTnn2Q;i_D״5:U-oJ Gԅc/pw,(%!m Vkx tK0/NSz >BF9yQZ `S�4t z2M? 4E @& $f'!Ѣ#$#? JH QW'[ �r\]>&HfV~,%)$HOI7Zoduxlh#d lC"@hQ|9nFЁ.CDUTnV[s6K`U vV%{ 'w7‚Nr]_Y_lx't%XRb &n7Svʼnz0w~g<{ gXpr™G=sR069VՐ2@ ! Q(�bͣϝ{opK62�Y(,,Gtwß;zgO<kX?Z��Y]9{l om;6p��Gir]j +]G8]|Յ_;湣 ~xp/,9@`A ؀VXKǐI� ]#]l�RpזNm͟s,?ut/Sf;H" 88�G=-, dSe`[İd#2۶,l`k?{j^xs嗞?ulqkebh dh!Hv�mWG!2Za"\t\^QC0D$Yc@Xi؆WKhWyuL_@;2712'>y�F }u`&vF})]4Zԯcպ}͸8Vå2MD~908Rtҗ?7{V1_g/vDOuS]gys+x·~ßB&D%!(򿿦q;bxBBGH4T@jM'vp>ݯ'ׇڼ>4GW9*ü7Z!K])<33Se3sS/kPK\[?O0]?xTKQ~rx+'v]S+GNnkӪM{G``t'xݧ7mYF c2fbi_~Y0` MScxa&>"7'~}_n)V[i+ÿbuisM=Vry�bpÝÿo~vhP!#E'6 r{ÿk˜iv;0S :zJ6O{j5Tn{`_/_҃96]9c`lT N% #b=}V�ȓpER!3<tP!j1#}33k,)ICx{JQ2MB8ΑƎbxgg(ژ=Nv!2�,<|e9t{ 컮 ;Í);[l{H0KC1Ht~ybz+N' WM� $ߕ,<|ǞƽN3A#Uq:|䖑gjeL([1h*J0߰/BmYVH4fOZbI  IMkB)@|lP +kmvN %VPN%24JI%: DL`rD+KE);sNuL075~!Y)ӽ9X_\muZE2#8\kP?Yǧ/%x'|hIiSW0~"2^@3]PR[7U-+vW 52Qт-/t֖]9ԄcS+pX^ qY{ \w>ج5LKPZ\-�gϡn9rJNiqwMBC4J{7H^曬OO1,A-a",KP&vq( b{0R1T>Y_bFے\g;2^* ��AɦiZ^#MKCfi-үFѳ%-M9iYl&Hl(PUBz\oνǥ"2#Tֽy2cG|MDV6YUU`R|'U= B,b NK !_0hf+fþOАFZ[kaRGyB A- X5¥(8v-arl QYkh q4& la!()O1#lNX'rWWЀv d\E=lFQ)HHP4=K&:<[G{$t-p '3JH<ڏI2fHx]:jJ1 {'{ }E@Ьatxx4V-,.-{~g2w&g;+F͘"sVX hpd m=L;�zEK !NўlM#1�$B$6&}bǃ^u:@JA.Փ2y�fL7nqm85B2ƥ+l\Dc b4�X H:Q*:b��Tl7_lhd5.7 vBAfZklUZZ!hM)MkFQtfd4GH2AXZ>}3k/ߺ$C"¬V9]y¯ZC@`d@$,^npWR$Q+ed)E1Gr/X˱+a5pX}/4Y\j]̨W#Kf6{,GE'ݩu~awxؖO'{ FďɿO%(3:>LBYtLjxmcֳ_~s&]cT¿/.GG[\1wlSQ/%_j�"O;=Ԧ}GW'ڣf_BHSlF1a=+s^lB_?F  ?/?rl5תokĭ$0�$~-_^Z ꉏi"4ek/my �\~[_r:~.,,Y5Gs׷`cd%v =| q>?=?/ -Հ*BN駙RΪūrl6fO*Bst\_~Gn?/{ɕ=Jo8‡?~q9v&(TPcC+Y/ ֳ3ZT<(T-7[9(�o'ζgY/kr)\gmی±BJdG貖'4#D&0ϧ'=Rg ac?}}unk8FoOme �+�90 NGjPمeP7>`w}`2ч )E(�?Gznw0}K?.]޺}ѿr>vH8{0یUOC9 z<*gno=ʠ&y]2C c!HWond2'~?@^gtk82 0:P"%'ukv<ن%Ňͯ9k,4\{AG|=+i];Vj)^�M'=%93@.<z+9i8EC#b2܋+̩]( $Ǘ, Õky3Dd[$>rlރ||QEބ]>qw\W>_pyUCɦ G޽<}᥵SSkC?|9Q4EeqG{9,['[4[[QY':x~\j#7.lk ,X*j8ht !=qlBdkq <*uT.jҙ͙R~UD{^=JSDpzx)%)=.H]7$$ ̄X I*_Q]LC 8d9"q (s`; NT pw}t5ЃS  .H�_I݅`iYF 艊0ŵ3O\xx]CO^8uq-X3 Ũ� |"�O2i@`�A1f%I {t)Z?^i@ 0@MU1:hFP ⢧;Hp$u�::wáF28cfH[kAK_r Zh`8<!;wi!>`|o ׯ J%y4ˀ"qDBR JPwx߸zy+<c9 <`(Gue>Gy9E f^f 4#K k�>L@ceu> @t$izaw߃yJhh0qZy{k5FTȻ]<|sۊmG 7~y*�DLsY@c%aDLbd2C�ٿ巺C9#Ho@p.^81Ƴy%U :[~QGUBc s+M1?Ϳwhй l01v[/?BTO}nvr?g>wݸ<_i؍aĿW,>KZjs|;?gjX=_gO~K۷.o]I2�|<`ヌȉѼQX2o+WFjVl2lG O_o\ ñL]!,|N0V_Fr_v>l}} {?cg[bsG?{VPN3ɶ(_.زDkMX9/Oz"ڴߺeWkB9�JqfN=C5faf, `Jq<QdZN <sy͌zw7^zk[ý(*B'.<;‡>vj);/Y/-U\jtqq}/} [/3 AGO~}MO}} ӛ{a$j@pʹ!‡>~'5ܺ=ٺ9nO<{XnUES%I߻Sv={!KKq@80 E fgs)3h,ۈ˞#;ϮmM ˹g~cx/6i4&[>C>ҫ*ҽFwq^{qG>q`'ڼ1IMO: Ӛ/>kx}x蹯ҠpХ}Ŧ1JpfYGcKyp(Wf$yVKlaΚ 7}EI FgZsBVn\nD 3;WSA:3OmS1C2�/2r=%Z[6<,yspq;Vգ>N~_skK\sytt$*�VOuL5 Q3z[b.g"�t~/uݜnÃ<O=ҙ }x\_lRye蓫A3'޻zWQ4e�{DkY<crXfkgF8ݼ9>:Gäqy\|dn>w< p�n^oaaTN{a49RA@KC}}8Z5CXuPudZzU@{Ui޸>.#3 &4vkGA!)w6C3+UKOVD懟\ϧ'>pB&]J)gVյr43 캣|;~к?gU/\юX06{"3Ù25O3Yw`M<ڃEvj] +|&؝)ܔN}sAmm篞mw/f{[yqNSA0WdžUeETdk^u708wAGh[aM$0Q�hf D,}"6"<wA@A'RZTjJ2+"<x A}}o_5yr_ ,뭆<rT|HM޺~pf9Ȯ<x_)+W{7^ Gàj|dҌPkɳXGc$u8 xR/s =wI*�J3patPʨ]@Sf �G�$!0z~4q>Lh0!hD%(*�ݔRqhB >E M�'1ݘCRb<pq}҉i,P 0Z1(JAg,F�L$VB Aw!:Hpr`tx^2yѼK.J _@ "|3#R (=Pbd NS7mG{HDoꭝ蝸�N]X^=ػWwo\ۼ5:H*BuDy c!<+k8?OMbj /n΂Jw%e??2DDDE8Y)D:d,2dd"R*?0cD؋O{jj.PEUi$?rwdr[g(vլN8O8?o0 e&+~Ck[oOOy' VOvVւ0�X>o?woAe%MܙCA)o8x__'~+9#08h<W'tkO͋�5nNv't`{Y،<q,4zr_/ylNzK_߹ _sDj<L�'3{C7Xnӱ\^ Vւނ3>ɼT-X\?~x4n}AC|Gfm \N`\Uqu> Bdwm@M+{cY$x<[Y+a �JOMXrloJC` :?w?qvo' ²T'h ]z*(2͜Y3޻>žNuNe.đ:c q>;7Nu~.\v၅ٯ&L6~f6.nYZfj# XVYid;49Rd͵O0 X\n?~%( �ErXJ’_uF |3-z>vr8_()Y\g tʹ^4%oDЋkoXaܛyUVShA\΍]~k*~[p '~vncKi|tނ7'M/\}}2B9@q*2vT_ujȿZ'>T}m6]@6yNx[!;ksҫ޳~/ӱb_z<7_ځ~=oM:n�◾iީst7!3Q{ݾ<j{Զg9W;* ^zv#?z]C?�IFGIn`T+ESv ֕Gf;J@&hkŋ+~7ۭp5PUBfY;~G϶[ՓՓ6ӉfvK *b6.Xhʝz CZi#ODD2R4eV7B 6mof߯<޵VF<~d<rriMk{ |ݫ>!I X?jzlQf[SCY ԁ34% lc^fvUiO N( aj<E̚z$NMX jA_ b),l;&ykU[,W=wU^Ȿ%AH `S:}�U1)rD @ LxV:[SON/�,!ށp_1a%�Hc� @hRJbBO|%N$=B,AkH@0 # 4ҭ9�N�j_�Xg2eFA#;_A 2j( @!1iPg@Q+d eN A@ A_hdbDO,$IE2ғITgU� :`uL1`~4T'G<" ʼnR*5kZDd$Eff Z##KȌAMD(( ~Dol-D+gG:gN?nݎ'(8|4JYkY i߳3Rw0O[DdF9I@DԨ`Ԙ'TA:^kލVf8#}^lc=®F4 { ׊@VKHUI$3e+MO}ref)mQ~WJ S%�|>RB.rhWo_í^h{+Gd ť/QLG_Ɯ#3O|`ޝ.g]ɤ=FFX|Ɩ<:iR&Mmd^xpa䳿s rsU$`$ Wv`[d]_=w?O�ֵGF*Ќ#QM.=ճ[ 6M<p �<iڋO}fx";PUP� P}X 3˓ZbQm zղsN$}G޽2�Qf/,,Fs g~{`7z[sK+cl5>,͜]_Z ׯi2q?n]}{>ʥ}/NW)c*)9Plf'3D[֓tEHH-Ēa, AUL곿w35 }->ɳV]\!c-)#ʄ#ʻ=>hswczqBǗNBf6Dy;ꄕn9Bcz+nd,XMѢ̼~}75Dzs9Ynn_Ԯѡb lGs`7,ƻ FjmZ*1 ?zYz ` Bh𢁍\ULhbө~Aif-xg럻_^ d/>e!,  0OXZatN֯N!JpSz~S-2NI͆NGSm_)SݳVNt޸|>܌bu[/ FG<�ϧ, %`# fjʲgIq2J^n&Bo;uv;w2J^֞'>f۞jWp|%AOƑMX:2`k1 O9]=8>֡NW,"⽳<߈58Vn]-A0�YRT<b\"TUu/*B)Oh4UdQ5ha �k )r nb?nB*8¤VX#Lj|W`qso tGl "m!-D6p+$6VipCAYlnenh=jiM'52Ke RRXV":ߘ#�'ϭ<GNYTwowXľ:N2 3!R*T:"7(�P : ?@?CݞGĀ MI@iXU P ΑN)VL2f:*@_HgP |0@� ZR<$LG<$bք�R{ԠRQIg8="@0�D�ʏNG.pPc~4RHR+�:FTC"R(I>@IB1Jbfɨ�̚YkJ�Pf.εJAK$a_,%1|-=W}r}<ϝuXuӗT$!juO}(3K8$TdfW y雱ekȌ A=Q),G fB(QX ,f6ILnzE߈#;D�8M~WdgZӖ+a8R]XivIX2{n>p7`oƍC.RbfaE,q 0btb^bgR"T}\Sͭoɐe%O؇7?w7oM˟s0U=`)pp̘�>#_qUo(D(G gm]6"Kl6T.r ߋ˃7,!lSu�nhes5S6I_b-0q4o^X`7俽ln�~g/_$gv R|5s*΂V8sH3ٸ0ke͠J\bT^~}n)yof 2$0$_8;Xyv羼+{gm�fR(cLq4h lgghoF,l�̯0xvvϥHsn4vVوY-Ta6"3G?QHkxc!XjՍ2 Y:,:T} `@<ew^`Ƥ[*:Af!E�:c73y{Lh 'h`I:tH^kxyj7_=>1V;J]a>y栵ƂܣINƋ%0=j[J Vcs>>sQeoieFMoG4AJ<nV>,fiyfh:w 緇8Jm=!Q Q4tmIa* "U<A�ځ4boaZSEp|SU<`|KѮx.h\+&56 +Jg# qE(Bj'hv&- ,`;cԪŠTI`Glp;%B*-p !߫h`iuD )L'JF56ƃI2T��z?#:B K捃(j_`$F(@}.z~4&'D U:8DG{קGpk8X?ڿuwhýÍ0:dO-xxv `B"BHt0?5ODyIx<#�C\bZV,Ԡ R�(bMHcT?MI?�q/ِԒyʠ2IY`^@Ě҉2Ty5&�JXi 4 "i@ �J�Ip0}BP_tD7'֫7 &XAoN{K?rhD�0-*Z�Kٌ8(JD("4KDEEL�ce X_SmcWP U�Z�JL.pSg,QT%&وpbM=o<rim7A?_yfS˟Q?�s_܇<`Xp� [,~@{HU:Jy;jx=`B fC3faqM *ZguO|tͽͨI sK!M[mmOaE)fZ 7/|3o{,PCynO}f _à0scl,T(3ebcɬwW"L`/9J/|o.96xb1T?TwF|ߨ" 7�fzw#ߺ>{2zE[>{ ):o۶?w_\Lr'MW}X 9ED9&ӑZ 3ۭ˓?Gw*ʈZ#q!B8Duyӻwx~d�y9vg7]W=[!TMb-wkʛ@mJJζY\.eSڹ̵7[v4v.j7 v*�,Ufx>Tѵ \,ʱ.>4ӊNϮOFR)}mɩl0~^R"�엞{pek,Vɜ:1um׶ۋ]t׷ }2^|t|+[qtof5h>`~}7wUTюo}ek:|*v>=ka?ǐgD5NpO*#Ki|`&(;J/¾s;=2 XqZ<w%e6o A\> ~:Bjʟ-+y g(T-9� QLD E<ھlx�0Be9pL>a a 1D1!_o6 Hdր,<灗9kH<,08؞MTf/�@0ޓ7vv'r >v=ՊHǑʤF-'J+B�B pt<{_+\yo]7_ߺ_}Wvn<y0 ""қNCH@DDH1C "   $Bb@(w""@AC#>(] 5B!@"n^�%D+ yLʩpy~LmSe(�@D JsiI� fֱ ҬpjL !}qL uO�R1Y7 @ Hiy5`Հ T Bh J 0y};߾W|usg}5`܇>p2yc)߶74 �J$N<7EM�=O5a-9*? BKEY|FH` O~6G!_g޺41h=?K=Ֆ\}?m>&ھ]m`T#H.D#Kyv.ѿ֒Šdof;OESHWcg~] #nc,=@靸~E&t~㿽ʬ#dlJ/?'oC^{ZP�<Mͽ`;\:ދnɓ*߬"݆Jv?۷*ĺeO.l<?۞sllT>Wuy{> ՗kD~@ڦc߹/z?ƻZZGqaO^0?߽q+v7?k7v2fe{/wg.;npRw>>h4?5ĿFbO!)ݏן?꟮߫d׶t2EЈV˱o?-xX[ʍ@]' "fylW!<wi1>A?Y?ؽ7[Kéz 2m+dUuWSeḵ(Ly*}u=: 5>00g9mە_zVcnw3ײU#QruGqO<SiU䟣Q:Z)F=-fw܏es2|86)x sgp뒁F;/f13 9,Žo ɯ8RLs|$Y[X⃅w7<_^v;E J@TRRCŠ"#H&,tX$`gX;2N2$*XDObť;!|fdU0`& ׷_}O7n|kW[}K;;[7n^^n#  B�1 y§lw( IsL@K֊ff2K2S,hQiJXYz@|A>Sq'PXBG*I4u4TAii+ʓȌj 2fЬ�WJ)De X\ V$IK%b1˄qeuyyy5.E�BP}OtA+'rȩR BƷm5M!3 �P)Z+ql7P`�|xi'#$BgoiɛZI$II"D+Z`FJߜœ�7Qj \bkOH/q?oo<ҹyں882ȏ>u=7ߜշ^@_He?3[n2؏~_\ѪxQ'f,Oi7_l{|{_;왶 4wsmc~e7m>mE3�VZSyUut9+7͞o +y {. ~V'{!�ƹvyx۫9o$nGwwx֯٘@`)翼} vP}?\{J~ζV{ `O[*C\O39dy+nQDTmw'ڋߜgկ/ѭ|jazƛ?kw՚/~r0sTmX] p|\7v]d�Wʳ 16v/~j~{?7fOF3_k, C?^޶3ߙٽQ'tpc߾̗» O ;˃3×x}8"|[Zx�xԊַc@;;],g X\s.=P nks`ɪ,_gBo_woY;/7_:<>ϟwpȹ6v\`ޫ`W irhw]l޼TmA,G޸]V:G_ۃ$QR"nLFwY/2!K>{wNb׶o])a3rc77gőz;W^;l4swKۚur☌䷾y._G5W}<U8|+m+ƤK&zo+,A^:PlXvYq=O՗Vf{r:;~_` _ tpl A]Wݪ>ܳ_qy�L`0CBBlɊOi"+<FMʖY6o4wx<Et ĠV&u ~=mʱa]?@taު@lagojj�SXd065d$͘0JYj.,vz oI,ǣP&uh|m>4�y=NcC#u0VQ$Af^^!h O9=$|U£ph`g}yk~mzpokiąϜ/. Qi X2+cˏ5&Ě@+`uRIu-͜('208TJ2XűbE*JTdtfYaP ujwi:xzt4M&i4cTY8[;ٱҌ503jZbP\ґ %"#P(l 9sneq%�Lp4p: 'pc3gESdZ,yZsQ<SƩQa<bi^?lK-A)QD R y >pK/\ӯʍ EZZA9@ PhD "x[;ԊEne`uzt'q,D)Z~banO4`lB<՟ .^ NU8AIn-̵[NL%/K<؊s.տwG52ѯv>rxbZn7ťaR`GMsFR7ӿu <OkW9,:\ _ _{==fkۛקm|f8DZw!ȿUuRQg r᯼ɳO0_ޘ~n^}lVFVP*& 3nEd`|/>7,oc;O$:*L|mƗ?3g|l%|ssg`y7^oE.WPs)mB < X)'7^yŇ#o[X6U?߾2uY!Km_k|pK]Դ]pwx5ͲVOoG~߷&1 3_ݛo#wNn޿Ԟ{=F\"+2<|8]{sAu9G6yWɺk knOqZ+VX[YlCƬ>CM��`//kT~O~J?zG${ӟێtja7�F\)C(%l֌Gs{p̶~ٽ<umv{sQ~Z\`^U3T, bo:B&V1G  ZKO]yo1piEQ7֎+nT1PCڽG֕q)'Bfʼn[50L!7. ׯ~/{(yyq}$R}}+0i<{.uV|7dg鴘sX[3($;?eo}^>wq‰QJ,<\s>"b8W8|=Λ^~mt=0yyc[/H~qst~"bx[c bU_SDNZR} sβ cG3:kxke UA!t~}l'hIg#$d5_3g0\nTX"ܲ�]Ʈ!A$B d뷭1 2H a#nϮRx4щ DD{Hlnz^{ HnMvo xJ 1VHF1 �{+I�$pCpIr4!E1+R s?zE�7&!<LBb%}%ct<@H2i͠VA$TQ$8Ҷ\̬o)zSIh03K%Q4*=^BL7$@ N0t)}pPž O=?@ƌ+d 5$G@` 1c" Q2^\pqgi#(NXK5yu聇WN]vR 쬀 b�@ N:݀H0#fzᲅ R/ ZR3 %0}*z?k7xccs{pp8//@� bԦ�Y)$JX0&op<{\ 9BP)Km0pcLқvmosP`4̽l+/4=HRO\~y߽cXzW{�`/W0@^ Z�/<7[nxiAqJς@[pes //iɳ@FȮ9W䓿zki?^x/[ ^#�/?qsĭ+SW֎Oqid" c/ny$tƴ9v>׸ZRJ\@u?o~2_;|>ʸEΜs)A9i+O/m ϭ6M3Qr=H}?n<'??m#}e楱Uzb�;[^э7~>զ0޼9y;4\~yg,5:DE6ՠt |\}/đ.!|;;9 7'‹lU;#5uvX|⃫k>>\Za{[歕[ĩwp)9˽o]}uX,\nhM* Y6#11* c7/󞏬]|d̅^{>`7z;7=慜ȥ+'63ߎCtyڠK~@2hܫ�I;؆%B8po4X><7ܸ>6\[`!DJ7v*`.~N6"\ ^ ͨUT­a!*o?.>p .,,ܴۓ7sx#-*KthMw癋YlX[?u}||7AnNmݚmE_G޽B Ӊ<؉^}~ڤ\+`ӡl�MC\"+)E Hq‰*mM#IV8[WЭ5GG6v6aIrL:`{w3߿y\C8݅vnޚ_﬇6e#\Gv!T} )l~D8Uw!$#p퍣[-dOcUd!�h҉_ǥh!(r{BGG/8*TAQ|dEP҃(~q2&u`̅N{Y@W8"W4!Pq4lM6tH1ڙdU@#׶\\>?q^Gj~KF޼2tݕ@{dЉCuHL&*ɗ^xkxbԹމ3L0kޘ޼t`˾$jƱn̗N\\5<w6P 3]}+DCIR R_Ƣ"0<m%; `8=S'vWNtکt,wNĺLcԝ`f:j2Q.\Sշ~mĚyiD_zms{_<#[Eq.28 s(vݾWe/>d(To|0Ķ;WV}k{JpxeיˁmU}fnU_́]ePpl$*tH+h/цf` V/č Z1Bڂ``G !5Xh,�uM*+bGBEi+)C9fƱkA!eɁ˯,(d�vm+A$!@H+-7Db�bPRC^v'LhE  d*7?-�@FP09wnm]ø@7/H'R(N(!=@@><)JwJC|'U <zrWS+vh c@\ȓ?9�8:Kh4R:ѱRKI41`BB Ԭ)ISEa"*{ G4$HDII fNL'Iz "%q,BQ0k8FGRƘ$GNWrJ貒hkh:Z^:<etXk%XXXo@1 "1p Á K@�`a.> OV;hY {Jw. D$@ YI Oĩ3gMF`w !�"/[�0#kJSkgꟹ؝AZ*D0 cTh DD@k @ĮgҴ `f=@}dBdJp>rd2f(j™`iͬae+�_rTl5\q}(2dYǙ^\=<⊿-,AFG~<؍V<ʂpqgvq<bbw-Y?`P}7kB;/~sWqC£A2$;^aT/;tX$WRo޼ŏ~l$A:Weی6R sP3G{W>?\;yq/xӱa߸4 ? BѦh)l5pA̟>]!w-, _X Ar'GVN=y-俹{g;+'Փ)f}{s;jp !~@O~ߚ7^moF4>޸ޝplLT8ȯ>7c[r6#OpѵG$ӝ%oqG(d(o_H: Q8KIT,hwsMʸճ3ZECI67) y;v#{v x8GGA<K:ᅯJ`�ۭ@*8n(xDx[]E.gUh+J>Y[?�;a! g9#}ѕWz?q ϧ0&Ãx8øؐch?y+!"ݺ<uy *+i r 7Ҫd w`7'L!; hˀtȕ.䏦_߭f[Io͛ӭ[S;zhk(Z6hPY� 6-gyݾ#Ne8QTl:`c8<p?~y];Iy?C�p#4G2 ϦkCT7/ZG7Al-ڢ÷xCB%+~Vs#$p /8D :"T8QQ~ơ[Yvf:낇<&^^ꩠu"舠Ka2Nӱ698~5lFkXg �0ˣGDr/AWO*DN< *>-UeV:, ~:$%GS`7 ǪƴP+}b,,׻:.B?4M@huӉy敡zt( ? R$qHpl9[ ?-'7;ra&|26ÕSe_+PI䩎X%W}ƥʉ’%V>]:y=9,D :T9љ";ZcP_+o$-߸hߴ:\ܯ\D&o0 nN_3G+YصV揫Ʊ 3QPl;ZR.6{\uOyZ#fP't'@^HBV �?ÃhӰ)BA~18/{+AFZ/ &�DE�!)@E d @n|$鯝\~S_> &+@4N„ u,Yy:QO&tytYT2Vӈ(0+� $qD$ljJ1k� �QL#H("JX*ӏ0h2Qx2RalmX: ^_^d "5Npdࣧ~ =]4'L$&fo_.P͠XIcAN[VcO ~v[=q/*��D( Q/3gyÏ�w;8 IP5D�D"Њe"BGO?9D=0^MԅñJ(YyV� Dx}wZK�g%" 1)d$D,͊u5AD=ǸpكUe>9Yn|1o1v) ăŏ%`(6]h< g4 `n"9K2sw,1�wKSr6347* wdvjO*3稛!<!Ay#04E&du/JFФ\a$YKo65q-2Rp͘�x:Dˡ*W\}0PE_h;exMk8;qȋ g��XnX<A<NsH_yu82R>#hweM3PjvKg40vwied;嬃TÚ_5swvg@X?PF*2NeQ2ѥ���IDATN숅5ҸlY<3X,~Nx53@\y=l%3C_ G-K8V1֦'[ 媼'>qo&m ϷPz -x/yEKN,9uᡦgq'7BJc%y=@al~B?oiPfxTrBdtWoFW<3.5;qEYz㞨A|4n[Ƀꨚ ϕkT8RkmJv^�{4+8VA^XF[A& dNSo5CL#Or:JSX.-V}�hm5;j^^ӂ{[U_ȭ. ~)9oVXKq˚n]_'[cY*k�YѾEd8rBjOZ [3ժXh.RNI��ZkbFDZ!"e AX9;HDkk+ˋgԒ0$J<Fnus,'Nu},SV|l\?8ܛt"(ψJ*DtxGWK"x$x1XO`'\q=E@@:@xˇq`话,vNn^ݼM@\� @J:T%TZ GT2I$֠*BdBMR0 E d{9BDJ؏"-k�� Zrd =bE\x_."x}<uON_\ZxS"= 3DQ2DdD 'Qd((&;ļ\y|wH@,G\];-DӸﭜ/v"azt1  .,u{{e"='}}MQ�||JIP @w]|x)NFg/,T䑷6^,ւQ f �xY;ʓ=@ݖ̬J HN#!Pu ^aUً9I\kvX;.PEUi2AirjY9p�cqMܫ9aD:Y-eXތxbN[Z:E(жbhqb,]`R)w㝸/9D(&e<| =NF y !E-v%dj}=G=Ýjݮd5Pƚ6f9Y�C\݇;AN"ܪXJVlKmFyl f_v:6q`(pw5.K/Ҭ�F}gyEΖ!.a1 Эlݪuk1�0K4vPeuAm ung#8qJm&s@y}smn|ͭ&nH7QRا(eN܄ YYW^;}l߶U"d;"W|x~veoP6x7szEC iS1l<Js~q\Q}�{*K5UU_>:+eX%=&B|Og`ccvK6Ѷ`E% 0csi5RkW}%7jdf>>!r#yU%8 B\3>4ByE27fD ~nvt !0c([nR|Ć[dc`}wzui =Ά8G-H<`-�PkdVV{ <%'"Z)b#Jɑ:؊O/V}0Ovx́@2'ᥡ COt#~AWhNP셡NQWhZ;G U΂ba{:+ɞ'z=Ã/w`<N) Ni 1t}=B`ԚȬ�DbY33k"==<B$bR':Dl ],Q}B4�1 Aa-E šŃ/Q� z+^'Px@P �cIq(iFSqGEʣL"ZE:Itpo{"9d<s,< K'.tU:N=tW4 HwR"!y�A2 :-UbqtM< AĈ`8>'^^waԅ.Jond {DƞV Gs?lEWMXVRi�fLkU�;;jf8Xl}ddeC\!3ha71}370҅>1k x&{u<ڷyY:]g m祬MѮausqH&gk2GSR|-Y>y"D0Z"@3fopj8ײCUu:6r>j^xw>[n@2nۆy~}wᭊP85P[o"iU29]qAnXt3-!\:z0W5t+,ϫ Uyzj-DLjTTPYdnrՌNcF#Be)`mCyqykU-1P0#GE;meq;ły83٪bǹ^fkCH>ݳAr5dv0gz~yU/bPq|tv\`?hGYN؜<AY"49>OA=)8:?ݞ\$y5۲Aݍq<UNR! `FtW}5"D<b_)|#7my3w+W7ki,P1>Հ=7BC=1L'8] ꮍ Y6h| E;a0s܊ ql C\TܪZXR6dFfd"^@ ={*+�H0РdGB` i 'XJ u2*bYzA�R: %^88ёSwy[r`ktHnO[8[O<dDs@,@@h(D "B(jD$<vH{�ң vHI �M5�.0k L>jVWx*[n\^tWN=C+݅" HX{}� I|N08VNH'%D�pEP&�q8hQ=>9q߃+'|xe4dȓPtDgӝ P Ž _#kXZ@Au 持+Ak�`" NI"^{eT q]$ɔyB"`P̬kN4 ̠R !@IZ Y3pj`[s'3{TUiH0u% ܪ_`g`;[4[74w�&<PgKʔ~z}.BeFgr ~�KM?. 8MrB9Py[hؒi p,bFTP)!%R"YL8DȦtVK1VE%g!51cCE  7RvʖRiV h7J`�L`1G*d4 iU_f< Bm`[ up!F[)z!@U@ ؉u!@7!yRJ[YvPy [``!Te6BJ6vMF!ZB a?r=&ȋP1\|MB:uVX  Ŏq!p8`FtP}eqӡhtk !0);;'6ȸ2]dOs. K:48l$(EKpK8p #**B}#1x~$VS[up!Q\GH8Ufx>£_'X O(7ϯzTE4]ō*"翴mΊ\<$7A!dJo.-CR1\Ln͸8F=)gFU<8ݨXu,MlefPK" ҲXڻbYl8tG˳/VR]U'"Bq,Dh2# :ogf8l�6׍ O0[5hca:m[fga;RyQicC�qx%}+9ڵ eK\^UqfX8VbuX Z_QU؈ɱSJa66Vx~q4iEo Fu>#�6T ƢT+]IΆ�ȚBH!HB0 '%f `ÎB=NQ-*0p+ 9if%x8Ó+>pd2RT0" ɔ$'#{|NhHٿڸ:[oܾzxs?{bI $ ! `Ї**$"2KD8=!`:yhOh"O:P#O$&,Z (3hc#R=eL躜h=^<}~g-�Po8i8.unN )#r_!@ d &GI8@zx{`MO\x3kr9d̃uF;wn.�/DW _+@Q!GG;@� $#9IkYcqtD>P l={��1yZݸ:9(b||Z)Р|^uN{ %" �D@̙6:=)zmVյVd!'crm{LKS#Y_]fPazlauA.T BS-?OGSjv6 ༧5Pf!WDf Y]?RzkgF B9k\PtPBB͹5B�.y,;րkۭb,ρ #8f=58EU\]Wf!Ud 88B"ٚy^^ ,\Tߝ9޺9l"CyiE Uc77B c.`,ZLy ֠)B墙Ƿo\1YzfW~ge\}o<ql!wnL`J~EuF)Bu]߹q۶N<\j/#NcWx1c E6"<>n!.@f슩|Zu~ffdέ)rCf{~z.+Y/QQ1Eol`Ꮚvi4EZ8XU̯.l`Wx|ָC09kؖѩ# OFHqlexcT=S}s; kWNXQ#w> !N6 !*3x1P9`5r{wbApeu:;s&02yQq []}o9_D�.!)ajX^ZߦƐ*# Cq%gxWl: >� H x(@n\:HMLbF" IQ(yrShx<bxdH4>tzqhgsx҉^g!|0ƒk[`qQ11�(. ã²JMk8$O$�IUH,< xdkB[t<_DQriurߘ @R@'ăP>ۚD�@Ǭ^?yji +zAcIsn&I[ݝk/'սp< BP2~& QX(5qL<YYzb<xkc_8sf|JeӽJB @0yq~kvё}}tvk$B֨1;57b  z{c';Š{@0C8ãxgyk=$r:AGD)_m8{%jD Rqc�P<�"!;=j <0 ewl` OnVUmŕ-}Tݷ r9Q} r_JatOE!(N{PB_CwI႓K]"V>+ʱ}r9֌ü?[A,,*9kZFfYBp+riVzMbshSm6/ȁUSSEd'U(殦Gq</o-*{Η@nkvRQ<ĥ֪(VC η]RΨmcu;5`Hre^+qYG*/))}@q9)>:4-i a/::5uW<3:}"\hEabesAeڣb)j\Q!CqN* X]N,[+jtKmfrT4fС8ֆ̡(**d גY7huedmr-ѳ7ڄWDMcιm!7s<rol~ӾKo=l",y)+C KxhGs7w!1-Md2*BL)jR|n@ez(v{0sUcwq'V4AAw80nN�iM*~JX!r@e_puۖ}UH'X3`Dsmߡ WhF!HkŊlXw %W1Yy9H^s3^[j3_+XY?׸[iJe ~@dUvHKڠngl^c6?ud v>&63v~jپDo7ma?l:slrwnp`ߦ:= Jc yxQr3cPxwt!QRD+GG'H'24ȊH(cMK䉀nIB i2LƓDN_t;Š@xGhGI4KAWQ�3hţK RKOF,P�z ںupxtԽB(TP5h AJ룽$\ Ӏz:ӑ�{GD'(NvU'PH "!yXNƵN< ׯWA"5aTp~GHox 'Dxi؎*O(Aacb~A_kkr F`7::Өד{8t:D$j2 Q `8I֧ZdDGx'PG@!1!!2Lj@y^ '4ngӉ A4GG OD̬f`?fdͬYJL f*Y՟;CX5e Y-U*}d.|6?r5C%s\oD|[$k6Ui1Dn-qD62G3g~U6r9 K%_>چq)j7n-)n.}ul͵/-m71׮C6a >C!]TyYO:mIz=5b˷j97Xm=Ќ'm n?7jU_bG'z3"h9p2ousE{بܿŭfkܢ3g dREaxk@?bq Ǧn^odOmpoPzs=@@廦ka$ٺX|C!<,K_jY<|<"M3 !=A+r43! =s:Oc6t۩�[gAv/g+!zyyL%rCԄ v [ų6ɵ?.7,n qjͻW}0CۻĆG}�NZfHV*BjH,pI[=!wd)f ,s_qLg;^6v C _ cx{!!3 GQ<2h1E_v<<ED'aEZ�JMPM19XQJ2+ i+LxL5.V|s?kdD d!H=Jp&2JT*&t<:AH1sʽ'h E@( uCHDMBM EH>!jtNN5''$`q⑏ thĠ4PG{!@O%:h2 4 6~E5%1'JAu8tyK<t '  q498L!"%NyjD)#ybg%rLJa<out+|؉z2Iqƃ)BG$}8( 'p 5*R"= $(3֐ :AC-@A:]3!$&N1kT" V;{ I֬})E 8s^p=is LfvNX p-G8̽8fß7ˮ>gXqr,= "IU^gXO$XȹNO},hsenq2!U|O!9ï*8VDvf rEA޷*Z!R@&B\8 0(E60†iݮTp9A>SB'4 ۰뇼eDZB,;qU[Xi.kgYZY@Y*^!p]6U4"d۳m\%*n=jGdczÙχ^090y;Bl{EH4]m#l;_2;d~\<r}n:T5v:q9f}C!DN{jӡJβ3Hf*blwwn_#._zca f><-J�5څ& dۋr ,:;mY|iCiBsld#"s|wmܷ' 3m`4{uX7v(]{V}{nW ZiߛE6T W]V&oOl +fh2{D2ÆnT3<Udʾ쩃Θ劥5TX /X;s֨ΫFA~["FiJҤJ Ox4Tq<X) $)9Ad&i%$EOHeJ+$}T {}@?�4Qu!PTqE*J0ON;!*Qك=;�$4XfN X'd瑖>� . iEQ&+"< <#?>ЊI#'J*S,@DGH "@b;JGI,�<BxHWF�BWILh3J=Ȋ+\ ; 00RM(( YK$QG$zB DUX AÎ֜ĄZ&SHF" @iҺ#z(#-V*AҾAG{jA5IMTa8< !wvz"֬ҳy RIf5kPZ+ZL<OcE$%hE�=DTRJ)@d�w!" �&R�h֚%b��@HMH^4 sҜ9A#;#ā9j2WlTnEm93O5)L̯,4 Ti fO�P P 8ң0U9q1T>u0)]1L` b `)�nsE0zlnkO71e,ۤ'Uzy96JF}oBcMcSEuyЯ-|מPg6i]P3�,N!lJҜ iff-gxgE@͔*XVsB#R@H_am"4@({Fn:@ 7:p%ۥN _xBFVbLzyG$ r@H9)]g2!h o(|*Bws}ou,ƑKFHƮI|+6m:vgg? `r !*!DB�ʡ.E0&H؀m.r!܊XyRBH;xɋL d�U6Сcg> ,EF7)\O]θtȦh;,j)J`tdqmG0)PV8'"Y\Y68�;$X%ϯ#]k9`3ϲ< !Pu= !V̾ۍrz 'H,XH`R BF"%BЅ|r-O#42vP17Bs$ !#\@dAo~O�yaBHq Zc%V`5ɥq jTimFǺ58 oMds58Ep " OAa u>8խJls>, <uhR}m"ׁU3U_*BnUR7-<R ϟDy>V//5 !'<V}X7-`S4`|s[R RcTcY^k.h/,E}*#H.c;pF7GJr"!BU�KZ $1OUlj` 2QXhOԜ Ƃ$(]ZfJ! @HP'QBw^=A<VZ)Pő$:! �1`@̠#03kMz|ČLT�Z2 3jaM L$fi1U ZaDx G$<.a@ړ @ ZB HB0XG MI1 OK- ֚D/�RIP8�V%0+ȄbP6bC<�RR너C"d�tD$<X0t@ � A~1{ :FRIőJ@kB'RRF N^Ǒb5bbe8ֺ$1AbO$A�b�(�H}_x2R5"xZm]uﴷ1*Q!of�hCD�Ӳ�fֈLrD2STҡGiͬa tJKWJdtf[K[AX+=&/R9wܞDvܠp-e%BϬСv^s`z#W>&{] oQN 5]k٦lvNα@Z5gYzjٻ<6SF"Ķ\<>;c4ThT}6Bfr6-lU =s8ViD6- QX۱(JƆ!5{a,Lcw<3 k0vAz`hf3vgEECp(0mtȄCΑ޳˳df tbds͵�+,n>[vUϿ3=pw"7Pe[oDv;JoQ1[6fcg6s~p�N880SX"ű%=-pGW̰x$+9TH#;h~ :@~6Q{)3T[M3uYKX*L1]0 [yZ<APɇ U_FD'\hNJj0CM4Ď!28}Ön7p/<rgPV_3~,OT..3cKY"F)rCmnpʌdŶgd|<5BaQ3fԨdH1%1D#R2(X!+S ddGI2KL"15(D"%k C F "{ !4� 5H $X0@>y,40k DI%d4@(|JVSLZ� %�*fЀ9GG@͐$R|x$SBQ РV@DzZ &�=�V�Q{ȌvV�5"@z4RafB|� Z#(4f$?�h`f3kH@yH bOkyfA�VI|AHx#y�fBIB  QJ%@DeRXqHSYJY GDȤ]�Y �H͚5�!v Z+uiʹSs}HzdH P�3)43kPJ �9IF0hry8.R9s.;qɊ5eFa24Ӝֹ{:&UyN(P�ʟ+�lȩ/YkI&) cSߣ#x|~0Ý:c⡾xv"$h3j&pY,Y;C\t!/! TEuf;핃iŜX T JfvLW@nul lXd&r5]iw||Ax aql J0T3cK!9*J.D. �1�iY 4!F+B =P۬v!\ncUPb+mg(@c K!kJ(q0F-;m"T\BHѓ:BЉUƢ} 34/BʝЌ A9(eyşurCU:HJlTѐ?fC%*^slf&6nѡʢ5Ir%sc.L&$"] 8$[*BFE3Fg $W'mlȘ :4sp u_"-Wm +9My!MfG)Y.FU6[ݨBl7 ]U}P! )G&]o`X"T_Sd16X/")MBoX=G/imlQȭuE2ܗk"8T]Zdem՗\qE;oVW!hE՜ADƱW` u7ϯNye qd׳aK D Z4s|Kq% p B^Nn%ϯA 53VP W6B2qN\Sfь8<ApB Gv"=3lM}w{';d,{o UOZ%D· s>`gL[T5B?g,vХ4�3ÅE,)3HʠY(15HN% dB N$V@̬4h��(|�@b�Ȉ +$""B}"!0  �tz "9sk�"D@L@3<VH  G �<## FtҬq>cR2HH ֌%``ff�X3�k͜)"\30 �5 H(4Bj�&XfDB(<`J_,@V5#+d� "<d@*=-\묄5 2"az`4R53�3i81VZ11z 2` DH0pQ`tI30FМ1\fM)21=4zݯiE,-U%3N*aޒJ݅yI0VX9/n)6oaF1=!ѹ?ΘoNU$^Y0TQ;LM!i*=ſS`,_gU%iۛ>7_Џ|GNiw;N{iw;N{iyg/4ˌȈ@Diފke QҒnw8;PhOjЉTZ)XҬ5kY1+*D+ndF � ް $C4HDn�tk*0w<?M;h)5�hD@D �Eo f@Y$VEj@@D�`p4?*I �B @ H 5 .+b` jFP&iXt5jF 4# B ,�k QFu3rp&R25C�@A @b i /â2G�$<Ӝ4��G"A.ǁ:aWiG !�7!DMyj��&`LTHK:Uw*CK`IA'PeE}+D {du 0�(Ps̔0"DOx";K�Cۘ�fGf!Ȩ:1QUKSH�ݲ34*V',LeAKUbQT,(yB `PR+%I0]o"/^:oV[/(?)1kY9a^ݖUc7&3 ⳲШJ X&k)mKL^[.kBzK2<nFB76ZvFuQW-&J{2 XU*"K&6̭em9B(A(wPUqWepMN`Rf".)M`E6BM"Ao6m+c2Z!4k{Dt-2EC/,s=.BT0 j_TE].r4?\Gɗp_߼~ڨ}o8V}\Ca8r4(] Vk/}c)e6{J* >2v̀yH50RVWo !V`nhBHUU,L+b›@SYϭ0:_/j. 7`+;&Bp>p+B*W>*׌یFB8$G·6(!PCKm옱8}P#UcWgҧDnc!s�Ʊ0v^ c!:˱( Y%JГ[I66͕S�F&ͭP0.3l|A^>AKg|ƈ*T}Ɔ!vOM^*JUf+Z;j<L;[^yɇ 5firFcT!PsP} y"gYa{kɜ!KR8!l= VUDY:PzXCsJ;t،U<T3S?K4{nT}2x>#>3T׆5l'\ %'h:R?5eC �ql U5X3 x—iN vdߣ-Qg8Jڞ4{^-W sm%V}pA� !\xȫ<!`"$:BjK'd= `,=�Rr7 <+pIƱ&zǪ~+_ 0X XGAdqaR8$ب<+>MT?( l:θa l0m%5F0IŴ0Ju@!Q\Oxt;A_xA*H$r4Ǔx2L&$ a4 iQIaG2TD)5#h !S , F@(* ml 4  iխ"TiE>|TQv䴇i38X\ hMhb$&d >B�`<}2�3Ya _bf!4F<f#2"3JD>:.*GQrTt>aHO%M@ LR�*CN"Ar-~_\HY# A)P dKx {0Nͨ$("D{w"%kVR)Z#'y `JI% 9[>;oĐuƕlhNlB0d'Q( |**Id$JgKHyV\� !{z$�),e%\Pf)v eg 3co2 0~@O>,b.QNMiNF<|hgl̤Y} O%G,Xj)]e3[ |g{ tUO6OFb6NF21r3JrXq}C\ݘ/Xv˛.iʍ2:n'Mld Co0O4uBEX9)#@َ> !`e`~at`b᛫_}v곃5x"Wbqv U%S.KYb$*2geڣFLMTXv[g,5&l^*H7f46(u` h86UQ!- Օ B= Xk2y嚷RCO2c Uc7'B(m)qP$WQur `.-b|P8DfO2(c[[ٕ&.Q ھ"Tq5P1"Ju:T"1!V<#< F]^IVj쁲?+qCK:]q] 7 =vg?SUUYw`wn,rq6_Cy~*<]. UTX%o Bf4 o҉;0x#B,8p ܦu~s5ٲ !`x圳!DH Mi1~`1|SN`1k'UlTck<#ڣ0=A63U_վ;=Y,u8Usb( !5OV?T8>,eKXOODq{`xh{͵BmW-7E7G0t>3:ϯܾ;A ML+* #`9盪υ}c >FH= l@A߄sscQ  h5wa FjQJƼw \qCC5x 3džLn,_ {   "D:oJ)T9ZqYJXҨ<iDΒyat;e9%TJEL==`<ηU0c56 Ga٠l\Ϯ˜נ8TO?j"W䲮.&k0kX#O~$atp0B:>rZ>xy( C'5k��gim}'~vW-URʼs�X# `z8=&Kr%MS`v=̻Wup8y#.O|HHwW2of쾟�(X̎yDܺ5ae(O ٞW,\skR�zSH;8dɴ`g8�t/ixzǨ" [ݣP$}0H6urVypn/ŏAt&Gcw ʀ`\ԡ( �;pBv=!$;IwpGj,Z!>sӵx@};FHg%xaJ|72%x#=yY3ϋB6<\аy.2Aq Ww-œCkՁ_<IN>>2 [֋3!`8,<C648T{[8#$Iy<Ћ>_C] 3ǛPF+;Ӆ,]%!d]<]P!2@_:! ZD]Ȇ!si>l�P ERt~9!B7ȝ <Eiܢ3!Z̺d:!rxC>pvl?X| KWl@qhyC*NqP3 fx]%Usv<TCHFcztD;2mߨ] gt~`WqO BlF8-?3f׼Ț'@pByg`%C<!<B BHbrRɏlB< 6Q)X噣7XDG!DsĞĿsE{9:pO¨s9DZ=u0˛6R?6t ?@H rꃘet[1x�1ԇ0\s`#mP&7 tU7?qZ1zbT%48GwWF$#d;Ǩ3@دsGs8/r"'RYϜ.bg)CHl투C{WR*)Bc] Ddin뺮jn6fl֛fl۪nhAbnl)vl�r?ΑQ2`A-= >ڢ%M`. ^J[\KZ]^%fGmG' '""f^%ڟ�@ƀP3%K$ "0jlz\zYvTUS׍ZK�P)B Y!Bb۱D4M˟UU׵i'HB;M2 zctsܭq$ ш N�+w'.31܌tE;xԀW ]m�zIq -*>4bxW s{1(kPN߳rӈ L ~of$K3^(Dg!$@mŊ߷8G8Bp @ILDXHLy=a@#\.G#xu8p QJ:<`g}|7*vP2~=6쐣rAA $Ze8=CEW/n0 n!@E "BYe;<0] #uDH4c`PBG!B&l?5Yrl/GHO]a L`71@<I ]:;ED ]!EAHUkG1 N7IB!Bp! 9!ĵrPt="bzȡgRC !oH)v ht8*"XMO1OUC*O !6T>w,a8. | �*{TD>,u~W] r:?\ɒ,WWlNR4hDe ca+&}@D,*.C!$1":H/u@<!k¨/pP2Ho85L&% w1Bc+pB=]>>I(.0jsZEϘ #^HBl&>�G/>~֓>n/ I BթHFGs [; } :h!]$:?>L@$e.ٌ;~G5*j>Nv9G&9<Š|l? fgN<J3A)P!~̴E%"SGR�K�F�YK]f4`CFc-ſƶ6""Ԏdnq;DWǰtP?F�@soЮ+Q (A/;<'�-5MOAu}Q/0W�k%%'RHShv Md i-4MclS*[F),JRHR)J(!B"ll,E@bߎ!hwPh}Z!ۙ&Э;i5UJ3H9~x( n u|;ߎoǷv|;ߎoǷv|;ߎoǷ_灈(PH REEES"�D`Xc4hmBF7!j%ah`�h[ Ƈ7[* ־WDBF-ݸew �@;-%@jGt8i* +;ėv%rG7alOuS:fn >@�HB%AbIZ,Ƿp|E M<�9`mVvjDT*JPB ) q_dwCI�hG<04Mc!U� X"QthuH Obh`s`_;6jp6ݖП 8ۺi3B_Eӽ16G2ܩ[Йgݴiw<_n-9tуw~:!߲,oWax'u%=B6"`!n&M`3p3k+ `D+M!BN_}{P󳹃 IӦ?£[ytޖۺ-p VL|';'  :sn /plmhB͝ DH4GMB[F./` vӅ0>.bc!8ٌ`{"Y,nj"?79ϫV*sȾt:�v·Nzn]"9A61;!;>@G|ڏK(L_7-3a EH)B@!CHl `ns K=r/ C|A"NEvgezD?k&z*rP#L !${GOoN~w/Hu>0*!"~+GHG'0_0P1C@wS!am#S{(E2_A|d"g|Juڤ!EHFCwvAM@ ɞw7Hu f~(B¨LtyQ2m3B L0L^9hTi9hYBm`_Qݙz-j9: ڸ!"΁0 NsDC:G )!&ԇ yIX=H}(3='<Y׿9>Ā{ b}:]2  [=< Ăk_t"D$wE4}`JՃ . fv0jF! :Aϝc8did/\Q0@XQ4|w=F!tvqP ]]Ыl7f,7z\r\,WrZo7Unܦm }J%p@" lam`D_!L_x "_|#;&G+0𵿐3Hq_JӘ_}^2%m%UG�JQB*Bue߿]o|??,糣t6)ˢTJ)DjmMTunכzY֫flu]iXBJU(UHPh? Wr}}] _WFkUNcBw  ?w?>2Di&ػ8HzOQH%q88t! ;c}u!�K1kG_`;|蓒h؃Qj? z "&My_4S$㗾gF nw0|⺄>ti.FWGAW7l!6 @H r` p^ ;!QI$"vSM}5pm~B~?Pg.@NF~s~c` .ZCro,dp߀z7 ox3bl'7g۰pAi&EPcdRKl&HPanE"0EsAyKbiO)u!.wvW#$BqXުwﶨQB;B0E2Hҽ OEB(EH0&~!G`FBB(C (0R ۏ2r(�MH(` O)�}0! řtq&� +}BJMGH=&z9kd:RxgP?!ȍh |ve#t~RaHR1kOaqH үmsGy/ܯɉ>!v#܇.bl LQ 49qCh\/Q;9s<{)?R˻EJ!{D1\?R^#'(oP/s wQfA/6݀>E{ԗ�vos^/ۇt~P!@=SɫX>v }*j>8B<6| !?L2 :=$< HGs '9;Hb}.Q;jNwZ"Cdkm^%K`-kԐ0xV%)+\Z'*R}vMΰ[EBeiGޣm8uJY@K~𥬪b9OR _%VhDh BFO[R kp8:jF "d%@ւ5`m#FEmʲBy ߎo�@SB;ki4M5d"Q@i�l 4@! du~iǟ9? .�Ei-lYC3OJkw⼦NyyuI&ün`sA1ŭclGi<'M 1N ْt %|M�;;c?QXvȳ tqϝX&#=ǒ.c.Tsmi`קF D !rP|'y4L<Y >NdD7˓ fI  wa_U].5WW"j/؀-|A9 } kkG}c�!, :q>FHa7Nd< =BDpr7|!q{ NeGHm͊ꛂ:ws켻WsvB ܙF}]d<[ojΎ,@xb\ACHy!8!ԇW#]mF! "R č1@FH3 ×:k SP1$ !Yh,bOkXNt@%VOՍ׳Lu`nɎ HexP0G0 `dtCH\CO1tr*+�CT>BBOP3lPⴆҔDQ`R'5EHFd zbf, H3Ĉ 獄AO}Cur *>7Iq{#Ay$c b+$y�uDA¸�B`;Gp0L#17]u@#:G@ tP'@&gGS_2rs tWcP!˲k$,t~:EH ]SFCh-Q3׀娌/cBHv9a9#!`s:}V?|58Ne#011 9A8Ƕ\F!$D s|Q y1ZU]7rY,Vr\VjYoc,_}28w߇Adɒd,Y Y ." AK@�?�AF aC8%oaZG^|d5\eAAu]]3QO!?{0 Y2I)&Td4xӟ/߯L T�PTXrWkxmfmj.rZ7vVƷoXhNB(ʲR1몪UR )diǕ;v}ˡH:D-HGۛjlId ,Xt\[X]O�_h^td:!gBm&w[(O*SYK||FEPzFЗ->,H#L88VO^8_j"?Ӫ!S.3΄~L^k~G�09 `.<mfzzuG`D(3 /*nKw_@}bgL8(kQv f pL}}5aeQY@ 8EHO oK䳫Fb㯹sdLȪΑ wC^v0!s`+{O$9RṧfC]|{{~g!{[7G0w/a!C؉vNA>:n02 JvvRzC6N{?ė/oNމчqGpC2L�aq9Gg^ϲ9C;6at+ .(vH}`9F&h^8BUh!"V)|6iz(Tj޹h],;9~\AO[#A>k_j/tc#e G 7HKa&BEgG = 49yN/Y?qw2էU1Z׍!cA I$w+Z�I"'Q �!P !~pVvȖDւ0�$J B;Jaw%_Ta۬n�}֕ϒЀ2qԞesnEؾwu? v=a��VJKϮ_",w RCT2<<:6FoEeQ'''֚ b*u(oM[lMG B(TQI9-ʉR $4]y�B%mg7NjV}5nʈ{]�PwE]g?UJ}q&|Hֶ^@4( �hݐb6+** �$Bk(h�Qn<n ,K{773u(8{FZ݃v|;^?/|;v!s_v|;ߎoǷv|;ߎoǷ �477x'Q0AADdA'ݬ-Bh"ZR7YFJ) B*FD%_ vt%WvJJZ7ZK!TRK�eȊcZ[1�$�zhI,X!�l%c!`;fm@MQP嵄b2!(vM6 D�*D�T؅nn;Zm�YK~k!c-XPZ"Zvڱy D;NDdZ Q3+H! "hkmnlRQEOkM{%(U@XւÃGDVb)E u-5V  A A ,P%nr H6ڊ˺u&EQRi-I% UXF@H +}-.Y(!cp)"ei+~݃#a%6<o@ DrN jkdRSRJ ()� \ U�7pFYwN`7Sg\·6C͝(v]! ,v._ 2nnÝ nWxC?AyymX�,l{9{Fk}&}PE|-^ Pљ�N_|˲pF{?d7[ml4r]B<w7}{Co�v\ɘ8N6y<lv>·ahנ';=r !L ~(M"&39BEG |sfN°ҿ tg܋X n_Sds%շ=8b<m= {P1�mUH8'5 !ݲ�BB- ! ]YBݜP1<!uIww&F8!oap?%Аlc/&gw;9<&C~g67DftC&=$$\Jg,۫{HAwvsF"#]c'0ȱ q8; |A_˺rR!ShC' ^Eν*?*oa6Q�3 ;#tW0r/;D`$! (vL^'.r;B"6Apزk),`愈]$i$;(v}?3J'o sv(9R7#;>.PT+CxR_O$Kb󆺰Cc�ssLMp$9S_л2T�]-DvI#8λH0#;~"%N.u0dt>o @k:7pW u~?B#Bhc\AWixPw/`5~+=Ώr4i9&iҠ# &Ъ}t;WSDI(W?*rHMHqAXv&ygי\ S]W۪ꪮvg@ѮĝY.V@3# Q"!5F76nB �Y tT[v-& !�@C Mڐ1dh펁QܢI~I !,!D!]EcIn leY(xO;<Ё|vp{7ƌcAt;a&vF;U?"ME@*@`i(TJRc`ض1R*)DBȢ(\=MwB4T�KDdm;* 5QDauڍmS _$(]}/vvv㵍۪^ofڬVzSmi2`R)dssmc'78ؙoh{ Cn,\cl]Mc-B"J lg8TjskSt] P I`F|DIdvō?%0tG� x9UB]= D_Hbgapn|nWlN1wd?;-5" X&qol蝑A77 b6"E`~: s:(lt"ݝR$9Pæ ]@91BDvhF!ٛ@ۺbyw wp h8qK3l r0<4!)?AuowQg9lc#ę!8 0%)")>Yʀ"_\ۥf�:('6`ջٻ!ToTӏ0!g'ٶ9Y9&HCo&0*Hcpug68G"~<FCrP+gc|~0-QJPbcHGH5chnSI{C1b�o;>8 ),_L=vrHeأ3>jt+6Ĩ^!!㹜}̧AsݼHK~"y_rJ!<6<B ,sB&gc\ ;+.!FHH0O*ԗ!ݼ;G֜#;9aBF#IxMf~{#A�EsLsKYO}>?`O v{&L):?wKh 9\Α Fq�93.Bg{2 wP#SWqunoc$Α62>l<d.�c3 a~��v$}v&?N !Bc~HXvtW,&OCƘ$T�@` }c.-BQv]?:Pr8@UBA04nZ , B4|ᦵGDlj;0,%Adm "cl; @ƘnvmdTB ƴX$@!؆ @V5$3"u"2JRd-h4XlW#XkAh|ZfårRXk@[-eaP;,NFz=8%ZZmLc�BH  bw!cVjEY4VJ !-R%pL55CDio+v^>?H#]019eBGo輘?Q6Mj CP&67Y ,~*</c.זjb&b'< exKcv5_dWLN`Q'xrNe]&G.fopw6C!8A'qe^fA.gM!mi|0<#5T0j,mzlGHһc+w<;rzw x}X&(3`QB sLutX8{W!2i !>}'c#>tkk&8KGvLp ƭt<BE;cR x"Ȩ^~ss@!C P"Xx 0`{%@\p@x~9Fk"�1pQ{B8Ed;sv bnF#_a}0 $C^=K' 78ĈxE9vl!'!] + 3UaΎKP, BPʳC\q-򤈞v s*9D:9;l"|OztD;:?c8~ ,aoyS!|6OVw#|GHGE1#ICBGHר_yS2+)tw)H9#rE�g>=`gCz"9ĨH;?tL$20*+ Qy-;^ci$ rl:l$~81ʼn$N}ah1G}0@}s u0yHcGY HQ&Α| Fy]U|;G$|t6DʸSda7/|"#du)BOunInK<c9B 9Gx-9K/no2�{,wI4җDK3: ]M"AQV hAD 1(RQP~XBK;,$l}lc!k4Vצ1`A!i2((d2L!l�5эVk}0Vu6US�@�cnֶ=Zk3 [OYV t+�Mh囹hv-�voJZm~릩n(I)$ ZR!J (;BHQt7 ЎAe7twժ5�kvU*\IZۺ16[c(H(1{BD!%m#!% a�%)@ !i+X JJ CTk]fԫzޮrXm6njB(Bv PQX*oR*)LW;dAkm"D-d)'GvL � FDFL_FS @eoqSf]4dɈt8s3OEdS>d++70<0 V ^[t1}BM̄zQ&F\gl~ >VBAu ~Fs !F Bb%!Ig?S xSt:9vDXv9XzMCewk8+D+ezNBZ7$VN&y*�$B} ڟC31o4 #v zAX7z]�|8 P?$!@؃"~Ba 8;b.e_eˡ,B\ADZgLC9R(D_C}@!o8w[b`󕾂{ϣ;{_Ig+v*gtP0c&Z|y;)6ݐQqأbcC� <�!s sv黑%}7'eW) r8D=!B+#+PaS93@f5>"$ C@DQH0Ӏ}4�y9^!=]VAe{xGצ~</8cL22a@G˦.}y$C}c:(mq7xM§ft~sX\wO}C&y0̦ "3gA!r "1ƮB'ٛ"߾4)+vG{2HsLTO*2Ui #7E9NOq#.;H@ҟ) +BR{?Tv&A -*v`�qD+A�^�P`|5Y]( !P daJ/kbq#,!4֛6Bcj HDoq8D (塻l7n@dZ6ucDMʒ(TR; (�%xh7 Zmd>( Qnl#*%BZ]်-]SK.&$F �*i5F[iD!ZS7u]] H% ,жav�T(n@lPJJ͊.J�ahho5�)նn  KB Dk֍Z, )0ZK0Rs;,%E"Z@�nRFm[lQ(SȻ57ӉCM;Bq}Pe o ̵"+j-o~N |~,vTԲhVw+R0PJΪGa_ˡ>X<9I$P.k`v]Xp=5gU6tsxps7pG: iy&ݤ.%mEL!7V/jc/D8pي(i -Q~���IDATrI 1xybr gA]OB<.k5Q+ гuf "$dTDml$Eƒ֞՛#ΧW"dGGu͝F!cpX5y7؀4#.C  u 򵕣e18Bhgl]}1BAؼygׇ/0x!?7~ׯ#1zA#2 Uj[0R҄]FBݫbg q7.CLNvs /So+ Dg:?~g'fB2#WcBg '|ް{Bvrk/Egubt6`QiQILcÛA7A {sl {(fF D o mԗcTA>t$=<#|0BWō `&/ݘ8qt$7?;_ 2ol1w.y�B*aOC9ȣۙo#_|#%P޶{�3a<B]�dw%ht=`ɒӃQnLc�얫:D⠏,ofɒPl@;W@ _8tv>T�Uv_""AB !E,JiT5 L37np/#D;ܳFmjGD֒!0I�JHi- + LHX,ïR 2V~�fNڅ c, ZkTuSkS)%- ,XK` "*U!Pjd D�pb@k-TR )д�` Ym@H!$ 0Ѥnj6Z�)% Kk%C$�QHD-;JʺuEd6 Sn7nwv4RFz[hQߎ MA)�&\מ:ԅ:_z?v.kTݰs_aLX� G&ϏJ]}@L1Q.b JSBI(i^^ș6c0_bw8> Ź{B*Ƿxll/6J!V�Ư5¿ZL>}{:o̚ c3BHz[)}mIN~"L*&s~1yw�S dѕ[koUGoؾ 6zqLf61 A!*yj8w5 of:zTpg�;x^+y7W]B`\YO|¯ɑso[ Wc5/zl㛺_#CɡҘ?;N}Y9#j ®73fZH4m2?]z^qQt0x/ ~5J6OA3*xs5BN{3 "QNMN\6U3ݭ |GR*m߾ +=B x|R{\6}<kCHP8\ B†"*9dbc!Q:yt%.͖mËVGAo~cƤǝ#2D.269l�AɇCgG^ҠѣyH@X]�tox(Yi2!r&Sxߌ%Eu~>LNuiY#Y:o df20G<H}cOn�s|L \A B`=0ҟ#>82*B dΑ?<ؼ1S,B1I2t!Yl1ၜmE1,77Xa`* br. h"/=,Ym!-K<9;|篿vrvU5Dv;Z0''vv#hhI l~<1P5ְ1LeEH;8ReQ )-t+2 mUrBCMc* z:+Sdڭ<v'm7ieADLgRM�1Kڶg8>=|WNΎT![FEfl6- ȯ<!QJHݬɴwX($?UZeaOʳdBVH zk5 cTf|>Mv{A7HlvWژz2_ӳr"tg5� )8I9!R4Z7(gBkkgK,˻b^Z !DYT)EDFkmkoǿH6MTU]7.]fF) hN:CA? [~b/�[n}Wx9Ljߟ<�3͝x.;c'[LU ?G '<=Ucg>7wm횑Eѐ'uob2؀@!7x=ֲ) m@7�IòcB~m?EG&,`ne=w!^|7'c=.b�raōAGEس|c;!0o͔KO0F6y* Dyl$2C^ AϡASqsnXS?Gn.#Bgs͖4xw:>l#>BW#$Bq@}!ٜwv{{=ߌI,GJ1B9!̧0l0!6 ^l<p, iDt9f1ϒ!N\9b 5xԌ~GSPu/H*ˡD9/;#dV?dCu>|q:?@1ףcQzHRNp|.;'~0;EHvT#_!z^sk~317`;8 _"'˻EJ!{D1CzkynmW'9봄CHzUZ</92茶1`.TǗ{abcA{ldB:l"$L5LOe_hEHyJn`=0!Ňx�dS=x# ?16rc2*DAS/I3f,EKÅÒ5A(dR>:?/�f֓~wW( "�KB r6ΦrSoonֵ֫PXţzQVnڕ@W(cL4- 6@JRHi] GϞ?}h}_}t^oeY !ş{Ӟ,t6) VźֈALDk,WtMU P~{h4DDd:*YlvS5ucv 6nlk[ʱZ[mP!Ώ^~vttzUR*"2VcQækv!} H>]z h4Tً^j6Z$H�Ģ(ONT,7Vvdaf<{t/GZ"iB@�ul6j^RɤRBؒBfIX6M hЁQAl@b~w$HC޻ $ )*~YQ'qs ݶgq)̢Mߞᠧ,g"Y)ȹW͝|<WxpUoa>0ψp@`v!$MQVWބ]xOBzX(3Ev 5c+fMpH=f3e+gɩ .q9N&D�jO+;grW<[0Pcްzc\P:@!9Q gr9"btO:Kb!]ټ~t.BdS}Sa\{wC:AY.�f4R@S�@(>,b�94Vؼj+Qqyg�a!zUQK_Ds_ 挳B9}&u䜿ΊW~Eݱ"0* ve|Oǭݴ8/!W?t&QVPi$ŝcGa~hBy%&ǚ$␇D7)#GD0Sq{RK{o~�>ec,/8TO G#$S94v-v ꋝHor" 3yt#02&"2HcDctrB}=02O+vkhGM7r" �_s\�-Syv�0" jW[ lTr#P9?~~zqqX.t}{BA<y勋N\UU]U5uny-bіlkR(֫dmJ!MSNŋO^|rvV ?bADBD �LӓӃǏny_mƢ 3Uģ QL۷E G "clY?:99]\~ AR)$к1h]kHHAV7M :}t/_<t*%:ˏjTI1-dW�TR*I A!ǧ/_4u\^^5MƷkgnjalc!h@֓٣*%Mݐ& @_Mb1 c0OOv#RjԕA*K%i71T!mc""I99??{vOo躮*( (( ID:;RZZkl_!Dֈ@Wv}MNܘ`_ܾ"�fwӗ:W|0t ӷӈu?wI V�{ iA7Ok'6LܖywUs0" blnv7O?[幓D >Q07D^;qL0!�^Nqx"$^"S}!VxV_{p =~#7p_}kB3$]h&yt"ugOFZٛ BXȁ _ `mܼbZXG};5j" 3G!;`!J#઻y~ 0!(vN}9tNByP!ԇ $1ֆ0 ˮ&T"F Y !7b;y@C#|svSpz};�!0!mA x ڛwH$~@<!Y- }΂e#zPsˡȊI #9\CB Į!^$3}J�IP1 DrR Đ @Ѯcܩ!!$vv1B E@)B BHX!Eh- PK)B(BH0R8'u>2|`ƻH0X$aT^ǑbT"A0wNQ_�`'p"$OC{C9GO}s*Fz#)3c=s#0j9ah$Y+H*G}%`ȳq$s΅(L"39f@:4Zyo$߫טWq{R�RPw]2q9 =jA s5EHrWs@!Hu>d@0 ͘9X;Ԅ RI}=Ax&]gJQ�̼y7bu7:O~W`Cl` 2lT9x4)Yꁈ"KZV�XZ��vǥdNHKwMckSN˧Zt2}?QypDvZKK ED<?k%RNgIYJ!vwV#Bv?aAgW'SêEpx,/zYo5nP;,,V[ `RGLJO=*BSEARdńL!?!XREqzvyʣf}{Z!1H"(qRt2vYoMh](!P@iH%NG r( yr~[\$RʢikPBBJDhmꢔg ޼^߂65j SRY�mZk�hU1),'i[QJN;hI�iFJ %Z�8L]iӐ5ktU1=75Y2MmuSWV*JRS!,ѱ8˅\PI^J>_As2w X�D!QXFR ִ;߹�j <jŧ82;p9|t@Gcv ;cN#By) F}DOKr)=T̘aDouڽDj@Y G sd#DȟvMțV:?gF#$L؃ʩ&!?P+\Y ` r=#P!ěw fD=GNxgw2 !u9d-v]"�`TQN AjB[ %A@+gm7 GS_6khBtKRvvG 2pUW={x 2!@Y P^nMVfpGMC2x9'{Ij"`-I.>3uP3:*v9QnB`�!YAJV|NB! &dA]�D2O0n'tN-KǀZy^]Ԝ3`q·[{ Eɻ  >@w;B$$ٜL+x�>T;[/#HOS؆|g&BP9{~E@0w5¯4`6O6"Zثsndc1g/;3agS[{u~O fǀC??9>Lcb0m0l~g3y*:=`k7ى,gs'Pǵ9ĿAg$B;@0j':yҷ ^ 6�5P-�j6R ik S�dŝ%Me55$QyL20gϟ>o_./7v][2PBƒ6RJ![U[DRJ)   fgdq�(�,,'ggpZ֍B!@`ctctYڢ(@J ""l?KƠr UUZ !2XCP Xk,%Dd!h %%�!mȒ5|q5h]W!AhWed^^<9=WS]Ud-Y h-)$ 1==9;~2յ~ӧwjĚH")@j)P 4>g(:xA,VFkT(m`HZFXc @cA0$ X А UA1v z � H�Z`n땡CcZ@d�!e!dWBk-XcZbP[Y΄hdXe mPBR6R[;ufMRFZ]U}�$@A�d �F;ތXvc{k샐M`C䡹_lѳ'EAD5PD4SmňG^g= LwgS黉| CUn "a[ة}%;wLlxyqMNU/2ݣg; Y|>%mv HvR};פ$е8] 9#"b^ 4xAHs^f n{M{||-Ka5ҧ'P甇u`wUPW)dAzk.uVgXZ/.ƒnW`}q nuzMIa}楌+L,Jpt[sMw%$Aܳ"ӄB,QA@'*FMKe<w�y[ &?f"c@?L2O\v H/Y?κ ~}]8`%?d WrS�@8l:!8{B~b:?v٩F<wðw~HAOidO19s&GEI?2g#&I;ۧ䫳Z?3 vZڀe`0_P!䍠?vhl"T؏m2}f�@Akn,ei-kBRN}1Xyq+p=Q=/%3 H{,o_ p{=}] l7>\1(U.IDr?:s&w苭\~g7%xA<.$ zკPƦ n ܍�#FqlFq/@(BKl,u#LA 6!rR"+HVD�(PF׆+h6dz!'o~?[/+K,AZ*%UcM#QRRѶliiue*~qtoז.N'3V?;:R'Gi9l(,T`!6 ,$ @aAE� Xl7˫lnXTAe@%U1)MM$d5*BC$ZJjHUhK &BDCɒ)'7?tySjjVZkTmO Īހ㗯f?{X v�I(!0%,/ߑThT!P�(@Buc*Tf>9;y&'@ _O./oZ%$v-PEZ[k1uC 5HYʂkk]k3 ~xOde- ) $!֍ EcZ%PCB[Q@D@I Db6@(ԕ@BJU(Qn6ZXFTuc\^cji B6Z$ )�ABɉZ0(!-a9 !gRDƹ/nGӂ[av/zZm=HmL]J)DR1-Sc7rف@06x R10i7 cFg#=%=2,EG:V6@:{#ןwBOXHL)jˠ@Wxn=F:lMRud�nB´::7q ;9oR;}  >c`$ٶ^M쌻;_`#@;GݕSd./q!FZ _?dZd[;a=;E<:+oe06Bwss9zw?{7"]azd;<NIIpqlHB @ҡa%yAlFEݙѝ!tvlˮ+Pm>9&>1#4�"C06 rL`[Ȅސwv}1pvVt=&0„>,d_wNQA=::>cQ$ ڽQD"�ksvmN ]R4Q&"86y Xt@L0lDdFA  ws#oɝg]lb@9CF<¿Ǘ{G7^ GM#2lmy7NDG#As=/=low gIo0!!#de>:,3:3aD9f_ѹ&3w؃L$ʛk뇘] HNn`n3!5)xKft}ށGKhcFoa~2yx^-o7WWJϞN˲ZڢVG[_KB$6d61;~9+ћ_>@�ɬʲ jY/vS%IAT]N4NPLgGu5YKdP)LmCP߽x7WWWBl>?;7֮fmf> "lbqg.Jyp8fvmVmYkѢж׸u%My&DIզ!!Deuc>>:,5,Qj$$ if]@QZ6tj6+kjUt @M5 ã͆ �z{_Glv|oЈo?, Knl+5ںѦnFp/Ϗ'1\8^__H.88BյEEZoA T Ӄ驐lwjUf eQNd* 6Z7FmlQaQuUou]mR*Yb "cƐR &PEh ͊'bu]b6;XuSݠn4a]Lj kRYAMmmXX4ovO$;�mφE "nr"˲PJ�"cZ_ d8G񒇗mݳs=\y@z5=&܉ h)vgd՛-v+]{/j8*v#'nsw-һEd@ULdͭFBҷ(ʮn65ndVf&;EEʂ|Ɏ:su΁$/fؽ1BMp2XBvͫwz�we%�#~S؃_1&FʎԷKŒS쇹! B`7&8 $5C(Oe%V$Am_+o:9C M9q/8|:Aےr(*vz`sp�*3EhΏ8oNIlP(Bތ  "A@S{"/ v:79!_"$BZ*̸޷~_ kQ#r># 8(<S E3t~_hő /jϧ>G67ҿƃ/nԗW Ǘ S$QDh<+JD="0!)@y.Zy 'rqU[.HЮŴy&IGOOӳ'?VNǧSJ nl Y('ţyQj?fI&(,T I޿}1Ņilnd}:>CAխUZ Ms3wI1{ww7PӃgϞɧ޼{_MprZsybvxtLmWfqZ{f~<=|<.?WvMv+'\<}t>==窮um6Ί_={b6MUXWziOO󃦩./?y/??>t͵Z\/n-L/=2?(n~~S rʙ<8'zqg% ucje׸\SUןo߿{q^ Y0B c XkLmh6yd4>}6/=Z,nFJ f~TxCnͧz>2tqz͋QzvEyh"b]SgO&͛f+ _yYU뺲Jea,�d!RT1jSUkcbB'O=}`8ZmNFƮ˦i�˃by_mkqYe!6릮-`~A俧.Շww|i ݹm["%BI!,6W1A˦:F$GK`c9v)3`iΣngD/knkNA&GlX'zŊcN)"-tB$'a;t`c\YƋMl}�/6޶̬z]TH"/OJW1D B !m .3v ?x 2p%?1\ r2a@#MyҶ{ GHW~">mg7\+w9@"k}m&9L1=PM.*4vzPHb{NvbP Ջ[AqBXlk>hw~" !G B `Oe< CH@eB0EH%"gDqPG !s$Oe!B<o]a nCO>'Y8HF#$pv B;ED ]!E~9B5 ~ B(D"$cǖ H.e5|ބqv!19BNdJ8 kd?ƕoPťr(rSx`{9U\`#WqLANp^U\ y3wwxP$3u>dB= y,S"wv> P,@>&:Tqc{Bw!auv z,HB9ԏ !9,B<Hh/HBTF<!k¨/EH #1 F7>d w%Bc+pQ9+;x'sII$cd¨瘆Q{y];pЄE΄ P&NH-Vq=E> E#/(cOg=)~ R!J7 (!"q@C/B@#1_# 7C9D}~8.Ję.E>#v~^x*rΑD;O'|)}92_e8dXIX�B$!H*('0?G(ˣGgv6 7c 'fY7�V#APcւEE?VQ7?_Bɓ=~ؐ)&b:'Mmf~^|wXmYWI1;ztpȚ>Of*q:C:TtZ BJϥ~䧣?L�bB ~{ĄΟ?zt:)<}#K1NgjwD=yyzvvl녑pz~O<(TV@um7|ɯX4`6MO7G'sĩ(﮶Rw<;==DB?9{[y:Ue H(,&b:a9OJ"mZby1BVw>}5' R2@ "I)RӳtݻN/`2GgZ*>mFp<mZ#j)Tj>.T):(DS5_:GYQ׶҇4FOP 9@)�ͤr16RZ@$A j6zՓBHU#9S%Oh-Oͭ5M9:)8NJkAJHM4`I� ,uɗ#̡ijD+P@BH�h?MLi犜K�x0}:ue>*4dkWf^ ' LqwxaFåO`Yt7b7wtgV$_\Pcf 9G !4~F!wZ!i{&?b#4$n?kliTd`\B: 2h2aW`Ypl^q\Vmu ӟǀ5S]0!dr!_gno7b{ w�9@dy-d/D^Ϛ�!8 !2B\ A�ǎ/o»R0$(tu5!{[ $ e erW[n8Kr&ȡ0?6#l/)ޅ,zUqDoهoأ?d!j~HY@x.ʢW"qs}:2cBzu~P]1^0Qq<@[9Cxd L;;`ٙ<&1>K.l$ؑ$j9>` g){[h ă<Cw xc _˿<MQ1 t9Ў8sd+C/*ƙ<H08׉(;`6{\H8;Nq|=lDZsL̹ `K̿CHRĄl1 "cd@)e RmwԤEj{v~~OG4OΟ]Wj,A@�M�hm6j@YCZ?/nzN߯Nn yYVNȈ$1mDRm~u] /_<(OOÇK+ֳ3{x8Z5wӋgGG{x닳Cc|~hV̎<'N.o7'_珤bXnӃiY*+F)^?o{Y6GcKz2Sg?rZ<~vő@8>=}vXNʋ''珥6CZIc �֦m7#&-ԪӓOΕDn4TM]lr|<IMSMJSM*%lu9œG'JO~@uyB]<?\#ڣ￟7w2vUiK, f\n&x#KӧKyl2wl^<~:=\Եݬ7uH(�YjV>9ϭ>|h$kRBD,T[D�`T_>;=6xٮ(LX<?1[,7T5˅^olfsEv^ͷj$2¹gOgJEAvZH((4deڗړt.*=%p)">ɫfv Nsa 'r1bttA Y@̾ vuNتЯb> ~r?76cLkǕY}t7Ikn0$cQ/uPht F2&SZrd A~nsZAуۉmL#<_U]2?a!=b7r^ޏq>#L#V#{]�/><:nzz5bWu/kٙ#^ -/W1|vq?Νډ !WW90kbN*ȗ (y<(!8"W;5d..SA7%z; lU_KQϘqL-G:?@dcIzɛu~Vl,x BpC~�;0w59ӼG;8 1_R E;N,{#A@<t5AɇcE!_$P`@3;VOcP$=d瞒0`&'4bI}RC}Mt~O<H}ʼnɃkG!f+;&Ƹ<OD?uD!!BjQ<:s$U8Ƕ~ 8 lQ!"a!h (1)%Jf W˕~_ӟߜ^]M>oi=:?mO!!D)K,,k L֖}rnt-DCvrʹS*UKR$K) "Zo`r/wf B $S׸Ym7z{^<}57 ˛'xGuU-֋ʬ=::`n.ed>,?%e [Q*?O7ggͯ>yl>_~]]W&8*&И㇣鋋bb~~(u}T-\b׷W'Umnn֗Wwڢ�@�T=/??_ܛlNfŋGT<},ZFbuNOg^Lp:-󹔅%spDO<yzj()ӉT^r^-c%�,|''/?:=Hڮ Ed|.f3}}7׷t*+w?|>,K%$c@ *D$Kn5"E1M珧?}UU/xI1!UB� Td }ˏ=_<9<=-Mc%'xٍ|;ANI) l]DJYH!D5B]LwOQh,lp�_~H yAH=2x7QJ'[w-M:bB,dg23%v+,ф�0@ #փqkgDϘv>L ʞ%sG ߀hLށBB*­{ه^]7/X}c"lLhaN=˗16' 6:*cqi# ݜ~H,m:8~vA!b6xrf&5ٷ^<6>3$�߹W7Bm b'saݰߏ0u %nnw{]v9n/7�@LDES{|B(Cy{B5C !{tHe־t~ 9G7##m,#DHX/yEpAHP9�HQ߮0)B@J&稯@}Ip9=ԗy`WB#mםC`s bmpA[DDBUy0;Ȝ#s}:GNj/y0Gf/uצ>crɿ+ ݹE!ajK$2psv:Bz"bw=U9SEQLG V~ɬB{e<\7b_B( 4E2Y7ӟ?~RH<=߽>98>훟<?}gz<f᧻~|uyE��Jzk/Vl~vt7x坮Ѕk^]߼qS%J)!-5Vz0au%+7jY-뵱4ΕP@d-(UUv˫~O'O/?;=>XW}|MsttppX0<|1,5@@B UH! 𠼹]{nGdzl:Lxx87o>OMS/dylo`?/,UYNhX{ʼn*ǫEY-wo�Mfɳg ?ǿ\~~KVezWBRY�Z^OOhx|~&:99Nw系zNˢ8<<:;;,T Mcw>^]~˥MRR Y0db&3ղZ,W{c5Yûlz R4u4Q PDd ucmc )Qb6)99??P?~|ږSxD)�MAۚP#Y+Y{>{z2)R%- M3#5HP"J)c )  |`4vs.Q]wVHOc7Ƞۄڻ[�6m m3ȓ ~ E ^H0tӔ5B]*k@܀x-XIbswDaFtLv_?N`.VG a, *UWD�+vW!  "@ A W. M!?gL�M`-A󀐀h'@°4w_vٝ=wS?wywvLr`}3$I  wa߲ w40kD.� X$׌0[G)DZ*SY7a�%1,u,PwD$,۽/n;AHW܄h$\!dB!Ag$9H*UcS<GSp�>uJz0s ',(a7 sW"$<yPڇ!YpxsT Eq 1 c!4DK8@µP zO^qKmr2:EIy.81ϵu,:-Yتs L|s9g d`t3'$9Pq!s=C8P9:?D Hu~H}]zu~`;T>BBOΏMe./}]yg::9"`/5{"QStaTHC6Bp,:?+HF yD1AHH}<lߞ;8:GgGSI$90 WQYKIH}>ꋷqH2( "~!1{ȁ5!B1!$He �ACSZ316_ EAR_,t~HG1OAACIVW9@PÞE{# 8|$ d upNsA$9v-QqA YݓAjz2 *0!)#_B$ @[�!X@A`-Ե^7b]61[ ?y{Z?}uZ>]~6[%@PtQ *OlWO}tVZMSiUEE^n릩 PLó66jZI[*DѤ-"MS51;"2ڐd_W/_7o>]W ΕÇv}r2yt^>}xss%e)P6^כfq^\wj[[c((J$a4TfڮjSmF PH9L KY-bXz]UF7iYȫ۟?n5\L&c~\_xo~󫋋 TU z]cm$�K`x {s?7O׏:* u4% Dk59=9|t%ώ/NY%(%??e)nN˗NNʲdiZ(, UJBW_~߿p_>ϏO뺪*[mm1ۍݬtS[e HQH)L&夔D!D!ͦZVz[UmX@BdBH@4z.zhc 4na*>;o_FDhKMmZƒRxȋF\%(.L'#:eP ;1s;ӹpsYn'O} 夘z0yհA e237Q@.]*$0!N@vescSNT. XNW#`š'g;^FC@j8B /c?! >SL/ˆ;j`&pò-@3=; gpI˟#K!rao&Mp �B7<}h f(0<a,0EAf["!u;`!J#`.;E^!># B!AHc%ԑP.cqc0ҩ8܄<x#B@C#|sv|bA)s sH0ÃyA x oB IɉxBZwĄ>gL؄9r9bRH@8;{!@jdŁE2ӧ t^Ei�L$w(u*ygR_NN#".Fa(ED1B S�9!,"". (E LB>Fu8GGrEI$":?З" 2gQ؁-"3;.!iևB޳ҏ9kq1H;-F9è瘆Q!G j0Q38g ;,s 朣;2ԗ[×w Cљ[ dc v< k̫=)PeMs EoΑ91s{9ȃ"$Ϩ rα'W�yd"hgD5̨,H3#}115a9F9Fi�u&SR$w<?3/v9t~s4⍮CSD}dX <M7;$X$ v� %瓣hvt:/gkC7wKG/.GgBv*P  Y(Bi+*|ڮU,YQXU�0 %0 %)i2Sy9)jBj(DT""dX(:xy؜u Q Ҷ! -o?{zlzOۻ۫bu<?ͺG)Ͳ7 i 0`+`z)i1Mf(@kZ(ӃHb:e"էw}/ Kx{z-D!*b2Bk�c͟|R]Y` -Fkv5NJ`Ho뫏F7Gtz Kon7MSY+5Ducŋǯ^=9\J!flg_NO'o߭v%Y?y~q`qYr**Q*9Ur&p Q *+�%E&fϟ?;56Z +(%&@!�QTA*HD(@))䬘LONORBS7uc׫5l:;N'KDq0?LZK;BBJY)(@�I$X ch1 1e㿼S^fa0v VPFkSW E) az'Lq`:QA:%QA<?\[׳CJr)}�ψGztF=3h7|Gkrrɩlm"$Grq1f@3Cy,eɅ!Z9S i;V8xNяԷ!d*!fFM*+1:<jwEgG}Fb#g2>`>6#'^>!9P٘ K斁Ǩ>M!�k~Zߍg>i SV=c."Λw1COv>O?9f*F�w}B.x spCz,*@FFs=]n%!D<D}z9QM}י^H"Ay{TD%}R_EǑ E!1)PYr|;p4M"7^g;( 쥾64Ƅ=`~B*04OƩ:{lkE=C94P`?epYBۇN_3T0gǀC?ɣGF_Ao+?\"!J&8^oY˘Й̩/= `i( ,k!V(!9<8}t~TzZ7Mmme>oh]W?75TU%DH1W涠'|Z7k6Ӣ(58-&@k=SR$$mIk<8?:y`&fkp" fHTDtRIM4غns|x ~}땭n^o^<u ~]k]SS5te.?\ڙ<NNnnR֮0`<?~d})e٫gO^[F\O'Oׯ YTgij)jtuu7wk^xw]Wv2AhQo/|~(]o6p2O�tQft2_vÿZDpvmU@UȢ,ȂnEHspx껗/__"¦zs_ק~hq_O>~x[LG'Ǔ`[mɠih0$TnZkBP%ӳӢѣgO_~<9Q(r:J)mR(YZAdX-H(e!pv j[m7utv,IwϞMm P)")`>;*ݮbxp(fqܑI,㋿""RH!cRQrG^g= LwgW[g@k�\z[Н1ŠSn\oVv1 v3?29i Fs{Rtg6MU$/iH5 ㉾NW *" 5�`'jqKGSH&%#t9ήy>u( *8:yӗrxD_u LAjw"yI`p[Q\K$'ܢEAo!Y&FL̊<`r@ɲu\`{|ڴv4�+i<}QzDVy69B\Q]I i8us,jU1x[]R'$cW&gf;3!ɲ3CEMpVQup2ho?fFr!Hy\SgL$K%D/`J<{4osș!MKk)^�:'&u>7eVƷ?w݃g WV$͟\vcZMvAass !{={#.3gY2l:D 4ި`APEE+F&GgDI$B!B6<N0!Ώ:XhYcu#d=?I}͜{0,¨eJ,v7?Gkuߓ+"ʇ9KN®]Һ*[B3wek\i3[@л傟?ں͛{>K\d09g{-""[SC ݃_e� K�Q 6mQTlAǓj]=Gjc?o֫ I ,UU5||\[d"&$*a6uUka󣉘 .Ώn˟n_hg3駟1`:oJ MO/πd]?ﶇ[ 3u0(nmj)e1-,ŏ?}<yߔ(|/['Rm{y]^5z%%|Xǟ<9?I)q\hyI3iaP?O.NR#�zô׿ݓqZU=:;@@, ^?[#.?lV + YVkh*RrrvrvqPFxwtrPER 0֒ r~cAwMCJRgg%6k& lweQ7WME�6U]Gg^~lVw/_l_<)彾pUJ7Ԡ$&I1m7T4(U ꍮ6g/_=yp2%j>}זtC1Z76HۆrRآ(M t_3Qv _zSxpݫ_|`6ZPYGB�؉n@DZ7` ,J PQ6YVBJYJ)vDm-B4V[k]] Pg^�޺3g DvN=-CdAT !ZnG_{e|Y20+p΀˗�p:XtN^jVھ?\2z.L͟Z3`w2g'`O$kY`e}-^ȕiL3Ǔyc__g&Gom6iQ :86뭴tX$!g}jv ՟Ƿ8MJO!FV ,XCGɃ+jhYg?6"goKx;8y;,hzzd;<NWnTVIj?{|sw9ݹKN�d0N+g@`8Bh F\^z2w? {HoGܽ9g%Tu^OpHO<̼O'8,O !{А[;XQ"d_!0df9{Er0!-s`Y_ x<3Yl|UԷ-�PҘ_ѿǗm8l0nn᯻60<7N:zk˩}96­+�v y%c!swps_9L|RߞB>Mή+ s|r@<8~ }v'H BGz9#+^E8K IY*tEwWtwtSZfS fI#$uw]|Zm%J% �@�BjY5wwP,j^7?H(Dj@EE%Cղfus^mF7p{0MK5ϫ/\i>0Jno+]BCBVvy:@N/HVͧw7wf%%|yUbVL|{=/&`N'vV˛^fbW]ӬjOo ON@խznlry|xv|2(� "!R (6+xikRin\]rÇn�m]jctYN*,ѢO\<D7Ɠ'O%E9AQ5ZRZX躩߾Y}|w_o D!PMח?7ͤuӨ‰5\mO{!`q\~o-Y)Eiq;ՂJ$yQۛ4Pmjvoo^_~U||lv ^UW+ XDhl  ! %͏?\}pKח?eN'Sku5>V@twm*ۛݛm]mj9)m�*enFKivJ% clY0 !,vXBXkY\`"ocǽ�@5hƀ@ D0?4vp7s͝x*(s7ngPAd_f_+g$1x#w5;ug ^7cv$&cEװ39-ܴx׌f0hpz BvTW-WN׬z)Sh>$ HZƘN.QrT!SG3*C'"@ xi}L@r=J7<'0LQ+'Ր F|TVN7qeiĪڡ!582"$y`')rf2ņ BBFS0Q߰b]躇q<o<!!臐>90@xb)!}%w $<9_8>"g <Eg٥V =K"�pTΣ6y#z]]2rQ1ւ"gHyȡB!iKc@}}ήPs*H3?,zGD$t>@cѫ K=&1u:bX )|.{c=:"tBop{#b^W B B Fq&~`յ_�B2N%oW#c(8ǡH0r{>D*FB04 M"AN}(."G̹<= WB?6bHj`Q7 S rv"V@N'HSi$ȕCI"ys!OL$Ry!<&M"0;AJ A rI<B0D"((;Dz wv lg  rAB 8Xy֒1VJA7f7Wf՘VwopYUڃÃ篞7淟?[[R 1!XA/5Y/۫Jo M!ta V.j25 Uk}{u^ll`dnY+HʮÛ?]\[]R@Ymf,dѶ,նilS7ͦ2-mjs~ǻ15(RHSzY,WS�%@Fוn*[oOzkܮͧݺZo L۵^.wO.?,HJ-,jc>[%@$KfSAəRi lVnqnL]jko]}Y-P{r+mR)�0XcVY廟~ۥ[zUm7P(THhUחՇw*%Ŵ Q4Y-OW4�Tcn߿{}uyg !M-o67KXDEX77׋F(noZ \_߿fq2X3.AJNo Q4A)Q)%dݘŻwn d+^r}i}{ZޯZוݬvZVU^jy]WwU-@PD`5Z-ݍ. !XcL;/uޝr}ARZ }0NK#0+F}ϯ-Q`W\{ �ޟ5˒#iا s{dVYI"/'?_)Bw )$253]Y[VVq|03@YC^+'mT?]�O}ӂ+.)9=<:~B>~tQYܹUvٌ _/t<HݧAzb/vzie I%5?ш3Aw']rAhf|\'k6vrίqͬV}1 *Tt/jP10 *6-1"кm#N[�-7\jߺmݐD.y4EHe0= H2O!oH{wDHFlKCe[ }BړncrRo4FYzȧ5]!wQ} RWfSbg_NL l!Achth`)pȤM6"l!BR}'h{F'fc.tnՐ"?[/90v,2[2)r,a{j}q !4 $S7]4Ҷ׫�w(\zeYi{.tp^\ s~ !t}!vfRzZT<`c�OPQqcby$}<)Fiщqk#gߺ~uV~OOL8cX\-r[!9k΍r 6EH}O ϯ$Bg"e4"+(O"3Zdk2=<IKx:$ֽS]=/RS#'qv7vN'begi8DV!"H )8ŨBTQW{v18F'Ϟ=Wwww0a>꓿?^IG8j uLхH#{ޓ#k x<8G`�3BǮ竛fo_޽Q_8;12w:� $pn7On<px7g39*b{<=qs:}8<Cd9xxՓ'׻0 a !("Q}?yL@<^?qg_~ݻ?w8D ^]UYFq 8:Gw!c<޾ Bp{p|p!r:8H zzy~E7] O?%fq\8pz޹sG̈:�wĴ7^<yxqnﮮv]w5yD$΋D!u^b5DUwu !޽ CPL!R::UC`!N{ٵ}w1p nx<1H10swW,2hJ|�12]O?v}w}usn3OͿ!L =h�N[@^z%tk΄ :TIw:b<)i{gU!&:q'׹'c1NR3(G uB?g?3!J6}3neLRTuũ\(\hy)S~Dnh^?W\�x(ɬ" n6cÒK8$}&O�voBșqHm+�FVzͭ^=B\"rh΃FW_et|U9["7$:;;]??1zxq,;hSrA"�%B2h d- _bgGyC39�޼DI^"%E !Ԙ GKKoQ}FU)쯝wl* M"AKa[m<6([Z?5gFi]lwq`FgU\8hǵhP}v|{d7#P}k`cb_Ώw4u=ƹ pfO`)OC /T6U_C=BM=ݰih2?*V ^ۙBv(g gzf=g(I_l\Q`"noS0c^7g)Ria&SҨpo1^dӏǟ}~oq@~;MCw9Q$ ܾ>=3|a]h8bs]QppGy_c!�@Q#;utW_wI`F{;q<1x"rw#x;t%0ѾDӕz!~8�@JLγvOA78D8^ wJ޳qbPeN"3|Fug@p8NT;qAww1رwW1"0W>{ *aO[f8yzL ~!Q뻮cb(4xwC0qr{ý܆;ۻnw{(<sHDw^4޽}̻U:CT{@p܏aqo"EqSQ1޽D?::x)aw~x8!0U؁AB"2a9؇nMQFLu"MTcP0#;7d\}ǴM *đ'3Oث=Ojviű9/B'D1[9 KQP SDu/E @<;dS^ yvin13YZP0-6#eUW�F'Z"d)s l!-,gXV87ælZ\4) �Z*R ̯"%m ! >Wd=A4-JHz5^tsFH%@^d\%.F@t& 6^4>?$nLe];T]_ëUgXTYA@FZň-4+O8TYsV}\6BFJces/j'5<63ml(rZ! l !3xQez那1"5J=VI!BBZyPM3"a!\D˭xLB,PRYQ!P_Cͩ 2 SwC�J:TKfWt #<umJQyc چwkTfem+=fooh!Bk$BޚF,pF@ȖhԷno>Z!2& ffE-g갨 T5xJq1mշ2%6ݖRܯP}g5ƆkE]ccKՂlO႕0NNፄ~ HPS־_TT_\sOV}Q>EP} k/鄕'3v$BZΔAԈ]u!;(#OےNB=B`c7DWDN)BIB[FȪ'hc Uˬ,*Ek`O4n)_ b& Q ]u=@ 0V`>~IwïWx{@DĪQs Dꘘ= aapJuB":ȡwqD@;}*Q7ͨ(qTB;t E 9tucPOJ*AefU^1'ůATx a&r1x19xAGϲp,xG{(�ıUՅ�:#RE;ޓ'BPj(`TDǃcvW5W8&ǘ#N!Bcf{0s*S[;09Nh 1 X���IDAT1FA1!PG`&8Pxha0Ñ$UIc`&W8 ﮘ<k8ĈTH "xds9P 9D2cf4*#8@;9TyG;vwuU"B躎0 +)BH.M/))BdM׈/:FZ9 r~8>LJp|8>LJp|8>LJ_qo&"" %!Վ{!B {zuw6~oÁXT"o9fըb%e"R$V33zGA1u7UO0pN)F Ab%r옝 H CQ ;F.v=S2%ؑ'fJQFR9 AFΡwn#AL G`c;Rfx9(9& )z=p,jJ'(INI:"(�pL̬*J JcD2s;&sLUUXU4zfv.S"v#tCR;H ψ޻ȓNk< ݕ2uYyw'ĤJPvD41!־fP#H;B]T ĠQ;bR(E4*CB%jFQUu1D`v<Se]@QA΋R"!L a9爈;"{KK>G "Stê#D4-+/h컝+<JM0%l)]Rժυcs.\J>sYⓊs%Y* C. ̅cp.B̅ws%Wst^cZ ժٓL%db1N+Y纹\2Fpv%bĢy@#jI:]j,*j'3BR&rwtBE)+^juS#L?Q^z S [`;+Z"�f3B@�--5X4ve #2՘0s(^*X2ӹZԅ- yJ€,)^tRñ}> flX$FVey3ʖ5mX!$z,PBJ|SMJ4), r3EBt)x^!$_EH]-ª2B!jbQq.-_fΜ볥HƮ@HRY{0ɞi7=P;O})r\Zk׬=\bz!HA^@Hlh !LԖs~ ӨT oBt 8qL`=T"819~K j-:e^eQwVbYݒƺ Pfvaqf]]8t%a*k_fqaV,K@ohL'̲?� cW lQ-*X\Q| ! ,(cIBj~ݮmRjp/Ʈ�vz[ʖƯx~k-" 6 cS?ig< URDH2k,nIBMד~IvFPX$=Qa鑖=+ FC ![iK ՗TiyR־YOjg,c R+fa zP*UΩry7^G$Rؿ'a-l|I2Q(@TġqnP!kX(`/+M~dxU_jo؆o/uJ/Y(I5BFH lǚ>nDA0҈!=9sfP%B*Oq W9 nG*o~.P{NܩOq\[8Ÿ8DP8}WhU�v[lQ zB:vpcf&]ޱWw<=7{_!QPu* U"JNQIEI {r, b{X#9# 1;;s~λwhuUs@ q `uW뙝1cQ�ywvW]#*0%yﻮs]S{E1D 1N?dusgD~4px]#}۷zVaV&!RrDw:ը$ss:HYQ%D2 c X|}gv 1FRbbCP#혧40ѴtՑsDȴH;,껮վwc!:u  D'Exv{h0^ՅQ12;822޹޹9w$<OWUα#bHEU]vDNEE9{@D�yHॹa<޽{x<F4_ph.GdZ諪1iqӯ獆(�ϧ;MlXf DPu.2dP:j2 ?ʶ63!-QK@KP,#V#ќIF]ؘ%~ECTK'%OgbqE"'E;-BB/Ɏ#(@e7Rdf"y:/4t`7΀67-BZdj[:kzJlF}{W@"jo^P~Nan"06m-hcpi^:f\!.IbL"$E&ݖM';Y`ZBjU|!6G)^N`=EE֖a)L #T#.7^!XBD{9aRW AcdBHk c?tZ"Ga,nMcm>۱~չ]5{T4Y\%xz{H K:&Id"ѹbcWӉmcF*X\RR !ZYBzwX4'[c}!uoM䷘- ԛ'^*z.;6B M7k/O,bzi-TgW"D_γF)FYoLْVׯb#YOjehZk[I6=m7q=JgP5BUqDjTyU&ƱW>%Bd~aoP{qPi~+FDhmc_:GF5x~97 Kt!ZKݻm_s$/K3lKekOqDX&T!BHe/nL`E`3Lj�BzL齖] !YbIҩ׷+SnQ4)k24q�|�+Vfq$]:J2@Bu בۯ6bNPvS 1 2GuN X GSA�qY�&u r`{0-*c%BTb ]޳s`V&0) 3y& XرFDE( v Q #X" (5ʴcF@{ a1 7o޾yn|"<AiQ !DсX*9"ը1F~Q^c&F!= LYwDʬL�JA*c 9WQ(=I#4� uP@BQ!ޱc0F DP$V9S!SpQ)D࡞x ADbĢ*Dp|�@DE�fr͍c !F"tv{V1#؁ $ H<eNx¶BĤE+1(qRA2ˡF! ]ޫx#UgW{6j%RC"9L-zBv%E;%'WǏ^G/4fִ-OK6Th"^nar-5,E`{lk{aXJ Wf]69uGqNS7QMkiWy"ZRlEԾxDkr<�r-7IrګFjXǡ"hB˅/ً V@Vۊrra/s`)*b{UۛA;8\)M/IW!$|!ܰjum`fm/^HMl*_˂6—\ MY5dŗk,|)EEmDҬoWDʣ+~)|=]5Ճm?ݘYP!{ U 9q!h!\(o>ssv_mxpԪz[m JԽr1mZbvִ)iM x!Y !z!']=5BvK:` !P,B`R[0vtH)B2v8th%BM5tbNatl[2RWja 5bgK` 6 S;s��aI"rnbP~'9V8YNe0yѸukR*ȆW%.<~YՇ 섐EȲ9?*ʭP0tHxx>,J[aL$L=I2@F>H2Vn[U_[lpZy6p!IQ2EQB|eN~$v:oJ՗*F X&ڬC@nԦ'F5j nT VUT)Cjȵ!֍Z`]>"4=AcW<W'8u ߘjv<IحB'x6ı'qT`:B|*M؝0EE]#ap o#!sǮbÑYTx7Zs?oFӏL }jŦaҶq\IFYl{;l|OC XxGS %6z#2a<X^,ՎW Qb=9Lt(nJ(1J*""1 ͫwܿy@ U(HTI`rރ9S!SLʨ5ʎgSm8OK?C!D(ﯼ轢|y;_86 M5 qE@My"D!qRDՠA ؑ91n<�i{"G!::/yDb8`Z f%<'f8f"Rit3K$RbO]D*΃HqC! @~4R(*!@DN$*yv]VQQDF c8�!&b QRdE(:�q r},"Q;&!ƁHiAt^;tιvS.(;I!:�䏀 D 8 PsNTC! "s3wDq8qQbvim6Kr_Y>e:s|W>[7ٞtkamظk򌚵UY<31 Ũ1jlN<3e\_ lJ+;ֺ�%i^l99PosN-(_^%E _L}[;ѳ'dvjNA+)i4x sₙ#&hB-U.64Bo1�V؄A/CR$m]s- vh}6=5,98j' ЖnLyA3.wq6${vfՍIb@k 򥥺> G�_UĜb1؀F rH7=6S,"='WB8gl<MU)Er#JxTQ%X.S(&Zdi ֫,@rýf+{ 51]:<XB{XSm\,eLV}')3Wh4]X;4jX e !E6\bn%}kD1v9<ZGc"=g=`e)uZMiG>.C:D5Z`3:%1ČSVСIrM"^VjSiт7n8.#d KYz_PEm(=SSH}k بQQ3 BtBk$M<Rحm]"8nMt 1r>oc$cm VƱPVkKX.1ŎkS#'q$`MP`V}^JZ3f8FHvCX"(-@v—ƹJlX 0A5sƱ2 'ICZ ;uVJJV>`@Q8A0l<}YA&^yeaM�5 Pem%Bh3:u&̯1'J6- Sb%U6/|m=Lc0緰acQE\lz-Mi Pe(TFmxҩZ3-Bmhah5=a^L[Q4*DEȃX$2@* B 3L`#Y�<1Oe%yIݲӝ rt&AD GAHHHBx�",eiQKX,0ȓSȁ\ĪrĞIi4f&"J ƴ;2(c9 ":emIYJL QA) ,>$B))y`j DDJP* <`N. vfOݪH_Oħ8xTZE4@"&Bl&bre3�4BtZpBSqbY3L)kR(h&?- wb=h<+DUePF DAn‹YqJc1Kob9ʜ/lf`3]hR;_?-)ɓZZUQyi}HXLWoplJ.J&㙠*1!;vk�RC0r`ɫ(lʓ޲^ LJp|8>LJp|8>LJp|8>PS,WE0-I9>W""�|0*:?I�]+(E*zf˜iP19R j Bn#0Nkc<3A51;`ι@3 S~{کyJʓ "6cR2M9(I+%kEM{+~M#/,Uzy QaV4m_MB�D #"t v΍ØR8"ӴQ%/)>%R+%M<mP\a&��v7}+Á�ֿs <#^�L`r8m iR0�uPTQS )]Ra 9H:P&ώOș+RUTSU²8 R@�:#b`JCutu� bH<*2e<Ǻ"Qf{\Q 2|2gĸ _U$8s \+KJ744.K30IR5:U8:W `U!̜qNl7*VKS-TZ؁c8a<{0UƠۺRUy^*nPd͝Jdr{üIwYΛ;٥`·T(ՑK;sܲ4m.PN_e]dΥ/qeRO>YSҾ|\ 5·n.̥KM[U{΅0ntr]T6wJ2cBR[XԅiB|tT&-BUZY !y))L;ڀ^oSV!_ަht!]\�ՂnLJzu!7KV*]ޜ.+W'9V{ UfqbP m  !e529E'dumeͦpfmQEvi+,BV5DYfFVuiTq_&J.vW@n-^PafCui$]⼦la6aٵqd`Add{cqQT(gcW+L e$B6 )UۖeC3 A?3ȞWEijӡ$H[tcW좼ܛRX`33X= s}n7X,RoPB,\boAXbAO4֋[D.v6sOi|Xln 'y~SxҜ [[V<?-21jFH)-<JG;Ywa!B>!ˠ~wT.H-r foic\#h#-GfKZ1P˟HoKq,|.<Rmxq,m1 5<`Ӫ'er8"5 frƱZ8=N)<rJ ly`bBjOЪ>ԪϘd*&#?cS+cOW:'Tơ["SQ}2׼ҕ; N1sub � Yʓ*HfTj"1 -&BƱގVaAY3 Q 6=ZU%Bހ DNW:Y_;pn<)sN_jZOPW>GfE]1Mؘqyд6 E!R!.v9:wzP&uS^�Vв8,y&G"!(A TId>NY߲oe E?T_#?d<[JP+2iJ"pi(?埝rh �) 6_6A<@g$1i rM+ON{ Dxa<}|Z0e( szjK꨹H݄^WSOj͍gzC]z+xfweҩU׃HuuD `P4f\ ||o}ͫW^c]w~?mrIjF4qP<tudG Y)-T<]jap(L FϤع&E#+Kw1৩5FAcD e(ʇHBFNpn5vŠ #0(bU77s %LiW ͝J><4̆Rc.Ih*??ʭ4Yd 2D֛;Q֢ 7Mtj0~lĉT=f%f3Q)zjƟG_J*~@'D0[d'gv )fÂgoV&A?N.־vJg7)+5ȓ lKA)ccljz,p Be8`vQ6q]eqܢ@V!U4mkQТ䦇#$Iu?!Tt$Bli*T"'J`[m>*Q[>՗F )FnV#EVح^#B c@KRʗ1^ UA,"'%B$B*Kq BHtԪOI92"a0v3tB2 /Mèa-a[Fdq%tȲ8Km~N(PKӢq@/]L* Ym8TK0<֣kdWۊ (y@J`%R5BLReI)ݨS<#2II^eq%F}BZ01 cw!x<B`{N!Ĩ0P}hQzHJW0("oRJ㸶B:Vp8V\mJ K)Œ!9Q萒$1k7qL,7D^9D830P}%χ6 -WtD\K`;ӋU_ &2u̳U}' U`Nx8-Ş8+]L\G R6xꣵq< nE*W  ׬BcXäި!+:,}rWnq3X£u "l Dic&˹"Pt$MIi[^hK5BLr glqPM1Q;)ةufIR'I3 2  1wmT̹cŶe�&_l| ݒޢX!4`in"K<9gd k6 ,KHBI?VT3tWr"^8Eu\ ٮ@HX)c �ba*sJ1p8Tvz9BAB/cԒ-r2 ӇS�Zv5Ρe@1GˆuŪٷ[^e9vbνD#i݉M "2sdhP<f2Wl[S)͵U$-Ɲ("DU $m [bYCJK$M6Y)\wr91n;ƝF-d[K/`8\L4 6i+֍\|,2v̗4er5z}vldJxހqVDlVW["De+aBM0a)7ȀVn<zE& Q[z`(%g;y&Tj猐um/JF`E^z- )U,|1Kg)lIzD 7x.bEa/!?1uƔUb@�IQ}%Hz` zم/ذBWz5* *R\X^U7 Bp!+Yqrf7RKl75bX#%BDZyOLJoQ}C 2BdgPΛPh!D*]uB9|)-e쨈�Y@H!nyzIKZ$BC-1$޽Pq Vk%T<?;<!:YCِhWa_t]"yUeݥC6aZϏgKqPd@-x~EaFyD2E\Dr83&&Bn9_!v5CgAB5PU cG#ҍj qڍ1E8(Yr"2#8T_R 8iH1H.v5uGɠr* xdyq,$]D.c~I^W`Af/X+ O0Ϸ} 6T}EGe2鼺P>*U_!R=̱<AB~ "r! Bi_OdKjp<ϪTT$/iyz!<8ŚlԷ ؆A<!^4(S fc4h!>Un do)ۑҌ %'bJ/VXd͋qi^ okeD$Ӳ`% MսBS҆ ҸUJ&k{9`UN+[<WݐAEſB ҅HWWK.6eCͽǫo-q< JPt-PټeS2/rqM_unX{aG|Z;-^ "fuv3-NU;s,"80cs3{~:!#i5Wk>AQGA`[]t ~fS;wr5UYtǾ0q!LV.<F#H%9XX)Z],%<evՈ*(9^h]`%_tC',Fdؼ8 O,Em3Y۸1xAvM@Ykemr9Ҕ~BUF%+SrFPIS"Xe F 9b:E"`R ̍L!)۶a YFߚ,Xz`$KFXC["Di rr/~!%f A%6PaÄϊIO\"FijW() `kl,DH֠ƆG lR T:=3cR}Bk"md3W&)\s΃@I1%*26,@, ! lf.FAu6Юl4&%`+IBk+,/(aPZ#:y=7CDU<&!Ut(k F :T� ) !kXQ,R2"B+:"j:^2TYb[a }V<?I[RtxwmmlTfʚ247oUN-Dh6x>V.]1)xScul/ɓrb1Q\&dMYTp.n !�!x$y !56j bkW#ƱR}%j㸘ȶ[GiT_%Ֆ)V}WS'֪mu ڣ25v O~SY5t~EZ^Lq-+n+Kl# *Ww[I) R}˦GUV}BFHF!be!-gj!f5}jA칻J EHF+l{+k@bEAU np\2V3ZM3Ͷ i잂%6ϸ-uc2۩"_H)ST2Ө,$|U!bY/$ЬzjA.2z72sR[熑NIoh-F4*sԅ6U5'9ToTθd>IF ]]N˫u&PEMPri8J٨2dHWt]fRRBJKwEzY4tfvNU81vy{"*TS9S(.rە@DTyrq(E5Rrk4jj� w=P"t*DT52�)sOnJ�C2m%Yl!-/q.P`LJp|8>LJp|8>LJp|8>:(-kJN*M H& Dsna!<~\oo/7߅l٤,-5m^kD2Lb;URӳTP@xŦ\\L|jU@frVsgb1R؞Wy.Orlpbi~-0 7r]ឲqiC_ HyW@JDy@ GaDDC9w]cPi}Ssڂ4'y䕾\ZtMzb,QLRfCObnOՓ <lPYeCIy!LqLL"Jp^V,[>NeCx΀n]RoKVS$maR +ԀF3B"\i.(6҃Tw5us־,",1Km|\⇹Я*�E}0ô~4NK\E[NfM}op!(dx]Iq5nE>*X7D�j̈gTm@�-kTYy+jTuE&99JWgXj2򒯹>j9WEc,(*[%yוt8&<fi2·d K jldUfBV}F H UIzB//7o\z¼O3P+k޳!ڣBY1ٶ'b Aew*7.7Ʈ@HRӮvE՗k&WfVsĴVJ*le3ga2vZM;dei;[rz.ҿR-|6(cBt Qn B@H(3\( RuYrY`e:dY܂Stq<Gl`{atZ/E9(4Cz X4g ^Z8t%a*V GQZM&@CrxoaT<Zc_Z ӏq,)P"osv2&_]lC+_ Z|*yU}i_9M,q/$sy[j' !5 )ڵm�["[P#/u+ FtevmBR}YlƓڬ; Re_yq,=B z ̓hikvT_@7^G$RI~]xZ jiT)np^<ƦqL@ƱBJ_kkWrW߃P}C%.waB 5]�-<AZƱO!$pj-lf "eiG0mOp`!EUzIڥ`9j!xcVϮI5{8DN\_!I! !oE%*PꍂBKJ* 8hg`I1$đN_y[]vU4[mG]$?{>`Z+Ec6 lrҷGhjܒhک-b{+[`)ߵ#H{t)흑;eLO[s#0I]?dIWWkK~CSB4  7U^Iq~˞ 29&O䡬1"F) px8޾;"Bo m.䕦Ai'.JO\|wFuZ̦^%6TܾXrZ%8a8a'D3+j4ҡZlד͖W +X\TmlyR<lg,͟ KK7F$3{H|˜޺}hmbC;t YUVf~y /o9#wmݛvv#DP` /P·�ܽB_vB@oRnYPBA5M(9퀚@ D5DH#nB1F( /%*\zQL[4}Rr* *z#<F01B\4\LQ{jŁY!D+fk!&GhDEVTbs'l ;kh!@n! Tz@<O'Fy[[zFARe%B[%V"!ת>k)kSdxƢ4f.@FK;6#D+)*<8NT2jlYRV'9@HUI߾%LPAcm̊@X҉V\df#XKl]6%vqIrAT6(xeP!5B Z#BJ dg) 7zU(1B!7{R!y!&Ffݨ|j[GyCe v@]ѡdjO0yK5*'U"MHEԈuQDkB6t)+tȖX_2i%},U_*rz#q\y !۞Ux͟+c(g<ʾ;V}Fq,q tZqC"lM!_!ŝ q,l]BOp+X6]s3(`- _ &fktBHS ۪ f ,Uضcc+8g3oaFsߦ9hPQxm㘻!; 9Y-W3v`9;̃68 < :E~`Z"LJ I3-t%woe<ީ'%Ley*)5ַ'/|NRZ2m46ϬJ-u! Ojd2mbx L-Y괔i vq~E`XʴSBw&ePN4j wHNo49&9(BD�Ȥ&e!QwӮXx .V24ٚnʨNv|c`"8oPJZpҼI=JZ|?Ǥi<cx9ʉgj1EʑE\FSRfV:|ɒ-^@šR$&-|Vy(^GiN5r63ea #g:9i̖^lkjV/o4^85^iҽ eaYȈ67#^Z ;rsȾ w)Re]@O!oÞ(R,XѐA^ʹ�{9kq[ik{̱j/|8fJd/!I[-RVWsd]9ˤEMwXp1Ovow29BM(Aq4j{S\P}BHK$mإF2BV]9M6Q"I1`~hKB 6 BUc}'EH"R} J"ciEHVe BjWY"i뾋)9Rb+TRd,y1@ִEӮ�>'ҰI$o:6sB +%,8^V(!X!E{"*E&Tq$E(S!2q�*ۚG2BT:lpv{[+&~U,aI6ify֊ŭHrA5vo;z4v-D=`w$9hv5)26ɲ^D( "PUYh X|XR}s X'p<ƫ|,J=IE+7QErjR}vPhDWʓZ l B*\QIJZYޕ?&QzRsVg#%-EkX/<m7j>QS<ߪ>ˠ*_ O!f\CbAqx6VP{N8*ϓ"4=AcW<W'-ߘjyķX\ڱ[8*Ol^מ`:o+5]*M }R%e~̶i:܂Eܱk=AlWႢ6IsPhLWFmWaҢqDboëلp8&OД›Xf09VPk vm e`v`q lX[T1s'/va�5jM"zNKU}�AIoY'O)|07o<*Tib?K/HWDIX2OUks7&ҙE9u;)(A#@dw%-1Iûh3YX]XDK(:( %yhƒ1Y:S洅r5_"(*aY|WXTXM-<grKJBO9 a<wcӥvBU撋t]/E'> J'(e\fe4ZɎ4:v屖ͦX|1A]q !(NDD 8Wv+$+Bp1v[ `يYtC79|Ab{[ _,2ډ-ѳE_:[FP<2WzefC0"$.9bb <D!<Q.`jKSb6*'lTUp/gs9J٠MyT1 Pˡ-ݘ g\6>?,<x~ީr3KKW|NJ+HbNlbEјjm6=˵VՕ !sF$Y&JB U؀W#^DQ&+`32 eɆ񟶰aBTAyNi2se#[hʤ�hd`i aMqq+R!kQy#XްZR⬡@sCgFjBQRA6+C`5 k"TcK"(Ld6sgpL(tlS .ì7^  3WСI, E@!fl[ͼ &2.<ҁuZJ.]ViF,2Yp�R{x+1gnz_Pd)6x~k;G y y~k ا "dEJ!O~V -O =B!>!ynb -o-r̵4BB6=q<AR- TR}LNǕ'qLy6<>FCSJmߛTmq8! ؕɞc\J^{G?jg,k,e\+Mr x XzZړ|lAQ8bAM'ՈQ}/y>jlT q4(n*@5F,kk(5Blj YT_n#dFƑu}J~ !(]o2d,ZA$R|369l,h%hЧ`m-BDQNukS9fR ȉ=UK1Lɡ&3x^1=-m4R?b<}ڞsC26zM\JG3ҹz;`IkoS9u7}_ܝGSrBΈ~ &a9]5-UL/(`DڷʟR"kS4Ey6j7l"03y[@JOȒv/g҄2.YP-ssZxʩTy۩Бu6n|}Y.05zJsBƫ $]ݮiB!8:iR8V@RjLʘx̖LJp|8>·p|8>LJpqAAǔ s/&}:G {w{( DwQbCQ5: B})0 #@DQqAb @>D!@ &Q6DL fR%Xɓ2q1Qw1FMwQ2KrfGE�b"4Ib uީB>L5WH\69L%0A S"tsD !IJ* uL5puF!R=3OUT{aPiTn☉H#DT]cQ<c97j#fT&E�4x1bD18�xw!@vWr)� s9&MzcUqN49Qb ]30wL5"Lic"eTw(0\Lu,< ݕFvY$*9v}'ՠ*"!༂0O9f~ RN2W/LiN3,Szx@wn v;v84000gرc$b@hQEA bvL�3CU(L�i^&)RJ 6jT23DU$B c vJLw4�1O?Ǜ{"`!>onQXDcژSGcM m4eQmh]g n\o*1"9՞l ?zTP^Eyu).9k5Zpe_ͥ%˷*vb)ZV7%^D3Kc'@aR9)Z(@N!QS"nD n,ߖbAUUǙY+^YYwWUi 2y<l_6_ !FeTd$x9"D FݯA%*^h4lyi=EaF\ʌ;sC ==ʗ>StuCo{Nգݨ&Q 4Be7G#$8-s"Rl-+vBC>M]tnYO=%d6~~1]=;^l@>[6v>Cz/0v%rHoB79Bp tlhy~+ܶt6I%-'Z:W#uIaOd#=r[-//Ef˹/0v* Gb|&B*K)qQ]{|L/s`iķVj4K2&r zq< V4}Էc-vyҬy#=AU_EJՇ5Bλv5C<Z`~оo&E^bؤk{z'"H*k<H-ϛRim$nA)a+ hrϡ2>BEasXԻȖ{%2]D*H3gŐ"0[ OkiAHH'%(w 1D"GnNB>8u r{x 1 !(r_ATw;"1:bQ2C("Ωj(~zD E AѨ"QSq)JDew cb9*D%:#WQEdZ1 1 "L14s@4uJQ bvQDU`"@*T5nd*b`"~1*1HU(si)i- {߳ qeD sX�fT`uNª<ӤUd㜰WxUT�ʎBS;xq q(:H""2KӀ*"Щ RϞ}*T q} #L~iR*11b u޹%U(1]18CN!C1LCErbVk (Ds1i' ,!V>i;\'%VĨDcf̕nB S9-ubδz\ܢsHS%-!7U'sQ2QP3FQU1@QuZy͜#�&b"NVN+NyC�8& 隕]hz0k]|]/JO3"�[TMiˎ͝ʰŤ0HX8))'1Qƍ#ߑL5-Yd)@fÅL"-yٚ*Nej jFyWq-D^ശFHՊ&B̈[@K<6y` /g8%V"=%B2FoI�k}jj+Sp*I#GZ|cX~jky=΂e,*4o^నXeF'DȆMux86Pql. _RmD5B!MqbZ_K";ys!Yݖ;;-Q&uZ`EHƉn B c@! ,ʡ>!jE~MRl! =ʋDNL*+5Zthؕ!t#Fè__`4GqETؖXgeqtHu؝/ϐD..M6$fqP{qKlx.GSkަCE:vFHI!E̾FH9]1#'uy<[td1yI!+zDRi *8]VˠZ`jP<ǵ}/mױǒ5r f `CJ|8$`4 ?�l+WJ`ca<+y>Fu糿 U_Rw(U^ O0g7xJ-l;M`_&*r@ <*\z\Njy~=]YPҵY<Al!&iz'ק(] 2W-X\k-hH1F#W7ZA6Pp63iQ 5BKx!*zQCQTAU]|iZ#3\Ccv$ N[)#chZԧ2(ϋCs{v.FU)]✷"%r$"n@LI?$2qB3SnYIUHx<vCV9LAUfs/WfA9è*{&vӼ !EHDR#ّc#"0aZ("L̎;Q1HD{f7-&2CgS</`N TA =c"!V6\%J!9J*9ܼsOjuJOi)YCQ"J!DUܱxr$P OفT4q̽j,*"J+#8u�_x0G8�4mᬂ)tJ\Cp=c;ܔ0>(�%΋D+�f(C$⑙\1w9QU%U@UU:PN m%,iTqAr}}cǤBJ*AHxҔ4%9f;FfG"b0TsєԏQA�MUE&+GM{8DH 4(La"u6LjZ$JD<o cW!f|=Dc-u"sM |ߤF(F9h{t0gB٦W9kl=ܡ9P WNd# Rp^a F=[4KI 53E'O>̯ E[kR2LOmMG5}lWr,2D(Wf&}LaXŭEgf/̗4pNYnP!&qd8R*3^ ޚ\Kj gJLA;[:*#$`[Mĺj΂ $ M)% ](%}#w9Y" 8秬 @lgZ`UsRzY'B0d!6ɝ OBR*h<ųV )HBH9eKlDH& RDFm"hb5B650Uꎤ F"2@qD {R}߫2]56�c TҌWp6B~'̠Y H@&Br�$BL ,E4Bʰ\ !yң+j"=CrޤB Ra*hr%3O Q"^K+hc*rP+Dt;!8’dlS8,CبRbFX,.!ĠH"dQ'T!T6H&2TՇ lZYRDrPd@-x$T[J-A!dRBu!"0\,lCP;<!%,ݨPDŽe<`cJOp{Qz$831Dۗ֓ZMtqƑcQ kk_;sP#Y &֍j`+\%[Ʊ 3hEXG{8n|;CW)g=OzeƄ <P>*U_\te y>PҾobVȪV"[:ΦT_TM1<@^kY<3\O OШ'" BZ@9Op1(YOe Ht 3`!8O'{2*jO;M4ӂRwdoیq)bTZ+-sBA.*+!}w1]t;u;g(@� rw}811 LT�sMi˥[y80Bkt e(8v}3wgQcq 1D ;vws]JfD y5q<޻sy2)+9u_$BT J&b纮uyﺮޱg* u̎릕F Q"; uՕ>j 1n뺎-9DDM�ws:=ŴT(a1:wnwM?\wi[Rwilf<1#U1{I8;bSwnϊy(H}G0xq$Fnc0G&x=~;B01k2]wkC333|@":08cwPu>(`PAp !a q<8: W7�V~7wܛ %~;DMu뺮ﻮelJSF$x|P 111;rgعysLY^0Ѽ[H(:i|�47<'3{"ODιw~SI{$a8CQU|'w,p8c}#Q`,0c!)=g*8}*x*`0!PX5`^U@T!nx|CRD&VðjHl 2tjD=Yļı*ͫs+'~q^lʻKi\Ua9MV =U A< -'3x+Ӹd�aCZsn�*w,a@ǂ<å LoĊPȴ"lrUK[ÀUrD @We E[ !O.;jK2Ӛt[AE `c%6l,n56Cy+͉ۚX[BF5b DؠA]!d śV4B]!$O@HLo$BkB !ml Bvwk@Iq@`MV+4XlN d#JJb}kKq jCk뵚UKc t%6[b))mB6zMy~]�ⵁ3$"zF nBVn#Q''AB&{!q;3q!B.T}s7#U_٣mԃV}+`9 rm)׭;֪=6=ʾ!'qܘp "\2Dȶ4tqSL-g'r8RӪcG(P}Y# !.i !v&ZpA#EHжveٶ߁ARW'hca%lv5e~,Iz}C<+!rMe(P"J!]G8~Ս{}{bD 0ESOc8H`aDB8 v^d}\q)94eT&(2T�N18!0p87bq ABiu, bPDPU(QFP_w/?އ B!DSLDSs0L'@Lp8D%ĠND 4j1p(!x<D (1JSXURch8e1J4foVΛc+<&N;vyabNA̬xd'D*%Ff? !FY*bqp!(NE"Qιc "20 1b<O?1 1 }I%@@v eDUcdb2$8x<v]@DD$BVN4iA"Wp7ϟ'_|ŧwwwcJc BzG qZQ ^>O?ї/_]pp8Jt�΂Lm8y4y 41!!ȑYGgn#J;R'Cm9 :D9 h~[{dvM~!1qZ+ӫD!L4b JLbFb{qw>ru(G2o\x:<V%TӴy#k F!`v;!�Srzxru|oXl V<Y0x5vDbrՄ-Ԥ*SR>by `oȦ 'L]E5ijuT_R=Csc}uqfٱ~}%k-6�J`U* ` qpˏW\Mh6z&kl\ּ>w6N!(PBgaYU?{mL ҲJ'R|yr�ȅ\nmma^'Ǻ՗*�8yf2.8ݲ'A2!!iѣB&"EiKj nh)l,/4}d]UR{{"7tfg=L`=?l$1ɪGKѬFz+*ŕq~Wx_&r⟅W /0s^2r`{ 7IbF/ DN\v.*2G6#>FxBd=1ho替O"t۪ovіљ|4Z}t^"ʢb y8?+RU>yC E>_!dFeG  AlRE 7bBBD=Zj~z "ƉK*>j'Q'a8_쫯|ы/7ûWp$Jzw8*E%�*S^Ա#&8ƣhr^"+crP@,@$J"ܕ*+Ѵ( avHQ$ PsFcB9f9.C|{Rf@DD%O>}W8܅(?K X5K1‘3:\u%�VHw7~ӻw_/?߄_ys{'!p;c("JI&1JהE.D v*;T0#w;j=1cN*�QXb 4N0gr;Eu{DB]OÛEO>G˿|{p#L=q׿0�Ubx"9fQD`D=Ba 옜8+u;cn<0t 9x}o׻gϟWo8ˏïQ΅qP=}ǟ|򌙿~EuǗ/?'/?^E^}x!cȳDL  SWUaBWWWW~cd&;fTy�1>GWwo}-K'B }TD19gD%F !!YB�:�19"1BU!3H14gr R !8&"; ! QsWW=aw_pW޽02ujB¬Ӛ~Ha]u AD4-q]cT"]+Wfn1kӷ պ3N~{CqdÓھmn)9!r fi.WQݤ_%M*jw4oD.FRxuIҷ2P-M$cVRzIUjhNEp2\u'mz(UQ( pȓ t4}qݷ'N_|zQ ː_yjojl Sk[H^]*2;6h5vl{ex.yY\vc+~6bV]j6C۷$uuT?r֛He[T mdeGy$£d~I<&JqQ/jbbfS2qv8wapmL._̳ȤJO?4JS+H E0ռvjSG7:mFzӠIz7W5ra:w{|/Lc[Έ\P<I MIl4=1:*-0-<?7ɶ]ʥgĸ/܄nkuނGw%Z5E~QREV;HV"2%'hvcz,oEWY2Kjs5%F-qgj<1͢cLi5.-תT}ka[e6đn^Q塭ce 6r壍#uojK1ʍ/ε3:(0dR!Vϭye,)n8AYZPG lQף]/*4U rKYm["[m:?Ůzy_ hv^䊦X�[~"[͐';{eC) <)H~~vGwu!Wp|8#OQ AQisp=J1 D*q{wo8#QiQj`fBy3a @Tγ"1cPUC0Hqq{GĪ":V$"iN(p2tAEe$h~_~||+!2 Q=D{FB9vzq}D@|Ͽ|ݫ>zaTE|`dbׁ uQU`OڱWR("!bZk8( 34!M"W�*QXI3sh$xE+cfG@]煡PCĨ 0H$QAx 0a]碄ׯ](=苟U_CP԰~o~Vdሧ> E$"#G!<8uuS@c$"rQ0cžۉ8xtӗO=o}_<⫧w?~?G?8w޾{]A*2Fe~W?~oyeF/O}qs{fϯ>yݾ8DR3D1sMTn`r U(DTAQi 1Q;1 ̝;w}bԨ"A1**r!0QյvpaPE�V)i_΍g% �LQ"F9ιic!Hpg/v}Ȼ]/{Gp<>8wgwA;&vn2-W4Jg^abZ윃i{닍7Q0ofQv: i 7Tf̮ 9L5 Y+3ӶDԅ{-dUދL"} =f'JJX1U'rk<zdUC4O-*Hn;eǢzK3ǛUu qLHxdx%Bq[] .H@OuvzQ`59SQ�wnBodeߋ2uir #{E(E:rP s Iel !@n!%BZ^iBȹQ~O՗"Ȩ,gA@aVKt3~e&f{>S_o$XakJO DKycZ&B60Ѣ<7+cRΏx!8qKVk6.w@OUzq,kӡ 㘛YС"{L+6XZV�;Yl쐁45I.35ݢ@WU+YY!RYEg/6vomlvFHidittI x>5ހʱ ymo(hܨv{5D^+Rm,˟d=`~�r35X!X{x �3 4Mq< VQY8?ytܲR}R g7#JWPq|}yJM[Ѳ"`"Op=Gֵq,T/5*Vز-_aqW<Q%M̰ 1=׎$KԤFIoi D+mX8D_SS"7 K"X*6Hx>F`þol3o�kh:jtB B}yPap=}/7Woooc8FD|wEܑ0c8g&1;ݝH�Wg?׿{_5qvc c 8s$L;"Q(|`nבDBUyk1 E4HCh`HwD He|8w^> !F"~w?Q.T#YѨB΋ D`UҨGQo4 @ 7Og|uP s;�%8 H%spP0*;:&KEU] a8(zH!0wߑ !1 .꽪xruL;h+tb=xt"w4!R GcCcP}B8!]pxtwM4Bԅgx1ߏ6^A>^E*1 z$DL At`8 :y̠@Q11!Sǟ|Ƿ뿃 NoP^<WOWW^_ߐspO˳oaϟ_~/~7?W?/)q<(<wcg0q"vg r(@uqJ{ z:;;F=v" E qJH�;ѝ^Fđ\G_<oo޾zRs]] QAQ@H(<o.g&x!Q#)9!jPy+  �fQ `pt*yy7oLD̪|^m3ql۴=3i#U)h"UrrUys'C<6_pf[rc'XV֙wT[ךּ-Bgh4%sE[7 fv UΎ3CڋhЬ!'Cr ՃcTomλv�ҭ;+r[o:T =prM $t**x;<ߛ!e�}+lt6/3sb%r{mw {,B82yIRKD�qZ6�hm)6PK(ͪI3D.sDc]Xgq6-Bb�mrX|WHɏ6:| ț38Jٳ:z!z89nTq;] .e/'=8j'55/'nct˙˅f==Ǎ]=Ap,m/Opi\)SA3p}\'<Al(I49<-B9ߺ,߈<ؽ}:+cr+g8~~jFt_@Ǡjλ-'Xd~>o~ӧ^o;Ļ8ḻ<竛 ›7nw~_~w߼Wמ|ǀy_1g??o<}O_\_݀8{h�n箟׻M|w_ɓ^"w1}?}z;}?.>y~K'_ݾppa籿kG7A_zsË!F׷wb'WO}^yݮ%fCexz}|߱p{w|_7}wwno쯮~Gu~}w{wwO=QaA}N}vyshl���IDATًnww1y8:vιn]=<yx?qmq Ƨ/no=�SW #{ۛgx|wa|y]paq>|Sc+Q8< p=p|K){wux8 5;ȉBB�s<<wO>yu*Bqu}}}spxh|tWg~>_}o >yaWgp8Gn}wwxz0 Qjɧ>d7;/>g^vq _}xv)޾="Q?~yu 0Ex~TEw;U Ƿo~rW7A1\9]/7GG__Sc&~O{,hﮯ?AUz a}{0UHwTB7q<c*O_<۷pjbvEH ykr+U'NU58 ٓwʍwM1&> ܅zNCdRs1ߠKɉ-|,3ulÊT4ukZ.Ml}taM&ƛ7] 1[=_ӹj484-T)s9^[p|^Xƚ͝nat.|g˻I65~u6ÞmQ^wxsNζC]f Er42քzRe,cKKWSj(΋b])d9sP`(V/PQ[ιת>R96H✱Q)<o Vd=Vc#F*`ab _H ؄ !IMlxzBʳ.+6*"䔙ӵu߂*56(ÚČ+R!kQ;Pȳ`6NJBq\6v",E!H !ãjآ8D+Ql`Y( X apk+P$Q["@MWhRuD†r!2(]҈6v[Ʊ0v!0dJ dAȺƢ<g_ڋ x~A+6<_,7BoLKS `x*]P cj_B} B*.1M$m,+B'\A!m!dldz $i3  0>:iW jlTƑ`H2Nx5}B+S<jq 1 ItHKRy2V>Vn jշ!)MZf5az8eK .X;r6#؈:'R}6v\x}\9kOlZ,FqS18V-P>YIa+[hB, HIҁ> 4cr Hhu)ӉBG[hx簱U!5Xhɓ>5v/Zn9YjJ8!#?x?}~׿_w{ǷLGǾ//^| A_/Ͼo~u(7_<q>Ec!mÏ~_O?o?9"2H$ '_٧_0;7??W?3'7//A?>W/yO{o׿~W/_~'7WWW/w_krqv<A޺G?O~Ϟwoo~'?o~O?'<WOT~a{O>拏>޳qO~VQ /?zG?{cRۿٓ?ٗ?^"nxWjŋ'|zsݍ~O?Ջ̤7o~_�>'|>cM_Ϟ>?}y~?}gG77~8~=ǿpq?O> w8үaϿq?ӏ?}߃o<?%~ًW!n\?{qͷcx"uՏ>x$7?O:W_}黷o~ŏ?|x_z͛wO?WWO~wxO~S'~k~Eu?Oҷ~j7]/x_Sx88 "*}˟vxP]o_=|ïvW|􏇿o>y_?@O~߽yoˏ>ao0O^~Gׂ@n?>쳧no߼ͯo~;\='}ѽo߾=x{uU ?pv}w}ϟ\7?c n?ɗ_ܼw귿u|x<\wO8q<~g~qwՕ`1ī/_\c?gDAߍwx bϞu{ k<B 7ű$G3fO[Zs=[(zǺjjw\AN\oMS W$J D6d0Q0K%] GnS~-b7D^Bh5ʏ/m61<-4y{E1"Fn Ćt5"7h"ŗզjAegbz|kL Bn[dK@N59 *2UvjZ^6DOtQ[#OX\P�ۨ `'1^ 5ʗK@ ZN8i?>|p :N)FFȪfIl{6v l1qix *r )4|th bҥ #lވBJX_UX;Αަ*x<m|)ϿXKEg{}緦<eZ|P}+l"ET_[uICH56RE�*ׯYdAQ'ؐ񔄍]N"Tۣ\KT#E.Z|ϧifó!G[6gMX v�U|=]rU]5==0ro;|)Ma{Wf~nxnA7@jf7) M��>0P{ko]m[3u򝜣->$w;r8ǻP:^DH-~W[ߑֶ:l2J&9,|&) 5c<R$f KY�Fl҂ٌVk>oAQQg/|ߜv#* >S}y=飽?D�|p3 2U`w$noo)M -);xxQAރngZN@Z{^|z+i&Z ?{hhA O{;y4GG)$qȅ`R*/)4IW'<t8'?>�xtyy8CRx�% <tvx/'W5JMQrg{�2I"# dt0wlRib%.y,:ޣ{Dr2wz=/no^.l1 #q,Q;??Lup2>{ ZXNvl7Z2 hU'qDZ2 % h'Ǒb < Yt=Yv>^'0Z~/:L;O>{8Ml g  5gq ;0biφ]gatNf֝/ބI.#=~{R'fI&DLH?`~ý˫D+Ι I#tplRxhԻp/":TZ*Mi�!C`@\i ɓr,*BWǝ1V]eAJIz Wqk ^ȥ�CI�JI'28"?{=D2\.ǃ{xy 1b`)zL' q;<<^,I\J!IvǐJ^Ͽptb&<1N9Q'|6>v*QL}`o-*4I$ ;=Igv\{PZ\]F*:Eb 9.ǑYVoFu9Yt&* }.`Rm9!ogNp~Q>z a*hl\L@5 7}׀rameUZKpֵ[}a=|7~gkU EwUd +, \׶|K*+V^:.Ftmf3=zStgPV8Qa v0Jk]NW㇯5ʊmI\ψPd>~X󠕜 S3zPc8a|YﷇoYgD"> FhC?6WHP6H(K !EmU|燷6<uT*.ze:?drч�gpDa,Qyvm G_3̖s<`3B~gݷk`fr)ѶQϕɦs⃛NZ] 5[1#X69@Qu&V~k1Y$Z!rB|at+1¶>/ko߂7o0p)C7a\Uomkz 6Tx-91&p^h6Om՘k^ɳCTeʕkx#==b7�hN6Xu#g“ς'FoҎR,Ք*|o}7 ==ϯ|y?:]fd:o?>~tɞRj|w3?]ݧt/.ޜ9>:|gx.GγO>you@'|hf|?g)E.pLf˳K)ON^'۳7g/>}Mb9<^__]LѓgDFqR̗Go9gez3_/TJ5=LN.Wa<<O^r<N4{Co_-Y+pMatJWwѽ/{#LLES^}j۷oWrz=nO^|~ëxq{p2x.~{uq}z_~ýO_{tt?7W~}s{K+|zM׫U`oO?^^YÞ%zqt4闏OeOv?{q{g/_^~vx4`8HyR*t|u�t`g_}{=]>~zW^R޿thX.7ݽݟdOQۏЩ>*|]ߞ=J?}s|dW?d/:;Aw5ƀi'UCT1`H2<^_J9DFp''~'?ϟ<zV{+U> .i<;(Azpav)w}�Hq/v{vz}.CÇN\^hF__M'#atr39:>9xE%G=i�Aѓў{;;$i|p|oAZys2\vw)JoT |$p8d¯9*%QCFp;{{8 wHU/p ` Q1c1B�&J6F�Lb>+F͑t;r1%oO3W QƤr:C͝*fj)ܖkf9r.[M3L01uEܩ"(]?dZ.^w*\5j·)B!ɪjHw-B{ъ:7Qg٦ջK^H`) qQظц PT+lk\{˯򳱛Aseu[ Pk6k07wV\K4ABBlc̘j}i!M\I͝mnVb-L.moUxAٵQC}V[~Yȅ6p bmg˜b")n. 5|&l_c#*g5g؆(vcH.<`\ZSz9TlVȡbsv.9dQ! *Ķ"*g lȷtv0Tem*n;�&W74u>;TԨ/C*_kئ qc!Um:YѰ&�Em"\k!2RˬJl7" ^sM٪%ɭDzP ]N`;UHj@{HZibn!9&trͿ9kL6Ri8ĊM[sH^&U9t`tR4P9npp'ξIk'-:@|&A}k#R8|DE}"t~>ak;O No!X5[ۥ[\rBBl@cvE+9wp.j19;*R T$%B lQVK`�تK MRRFW@H__}v6MF{(p0}W_?9yxrt.n@ގ9]7gn{NWopIq5z|~ v0NgGWtx`2/ӿvxx{Jxͭׯoxd۳~ub0 P,ϳIQNg%2 ݽnwVf< Qz 'L'g?{^g|~o97]hw_o?hzg\@��LO{~!2OG?D+ߜN~4:~" }d2ޜ}٫tpt0ϑsD�4of''g/7<}bgw\L8vt|pv2\~ N U WחgIoÑ{3LGޤ_`GOvNNwF{_޼~;<DH/ PBxp6ݫ_ßno/|O~~X;{X={5`zG]z2w^oǑ 4L#x!_] x?a2^h} Ur{{辔dͦ)E\3Q"`9 #4( <4Mt&z o^.Vt<{pސߞdp}V|;]>.K$x D;^o(z@Q..o^߼}5睎? ; 8]\,a|Tn{`v; H+o^Noz1Y)B1.Rz3Zv?8J飣nd pZvO>)EaV+!hw:`@2Eθj>O./pw.!j5J}Gb@YH)R&0ZaD#r;4.ڰI-hzK5T 'y>Ԧ.J›"պW67ټDW6k>Gp7q}lTOh!F9Ml-[n) ſfYNC:ku @4Qqm~7^]pb}h6&Wq` z{=m o7Ih>!9d\*[-?s\L[ݞ𕛝Ŷi-}1(u'� YGji!k Tl;AA` ob!4LގFʑ_Sq NSm :GjQ˭xLnuxoFhtޕu:]+8 ٢jT+B~ O huaTS}HjkkkAn"9~_9= Wqpw ZDib}>G <qNkh0^2|H.J;-{3z  o 9ElGe{7Nci n)vK~H:m) U͈PElt *cbKJCBpL"�`Qg~WEL@8"O:z}xp?C ξIяQ{%!'I iD%\r<D wz?՟ݻ|x0Fat2A{}_i6,ޜ}=[&'K X]_D 7''NG)I4Gr:Yz9j:f4zj2\M$^.Pr$<3DOn?dZ?].G) Uxyu6L4;�ϟϗ_}7_a$@)a.U8F\.1i$IG wKSM*E ?l,z\̦8$d)\x6 wOw1<tN˅KMl9.nn&ax"Y.Ɨْ3ۇw~׏vG?ߏ8T*%Ld?}~Q0/FD YVIJff.]xg Y.�#�(.Lj^ǷJjN&T0='wI�ip٧>< :L@2B @DdZ )a"0=.<d TA0d9J(p8HI *8,\x)0�FZVT1D.5IM5)Tjys9śeV!Y Oj`x|r4jF)z;ea^:E@jB"OC?\L.fjҫU悉@wFA.S$0PWQ:dz0Zv^ǔr<o<xzp0z{6ܮ8b3�  vGNǛL"?<~y> TZ.W˫߽RNgU4T'<9囗/>;DÓ{igd>8aYQPjMD}C+-eȁ4V~h[Řm=c",UTh8b[9 K + s\\_ 0j}@&�<>f:W6kg j[ n>02R51h>&z 9d(剀282TmfN)(fpCBrlckz†=)DmX6iC5h{ʙ =<7Mbnoe:�!cr,b#);Y5le=.UiBmJ4[iܚ؋6{X5~<PKM곺zlah`4XVAx^l`c؀&6 *R1(QR_gm T(Qt35}qB 0b88'Bj\ !uc!ĸEuaF6ɭo b*FnB)Z@E}n!d:;B4أ66 !TC6:6N oK&rcJ)jrzf%;- 4ZK-m)F7)jB!>eʡ !C*[خIetsl!G5*WЄCبû!Z<םzoP_ͭ*I}-:nB% q ՚ !"Bp B¨vD!TCl� !5B.h6򩎍:B ޤ>33VWstR4φQ9.M} tQm`b "56{Ԝc=H#9Ge o P o(64_% yI}5#8hа* o>W$XoHZ#Qh6UE}5@!6B t#L"Rp*8!d"F 66#%vHZG͜Ht5O>w XÆ3KAY:MnMI5``$ILJ_ͦmax'UԚd0x^ (x</x_<7o޾-zs5" CL$! MP.t&mRחl:gA'<HS&8D }Iq] Dtu2I$}�5iD0+ƀH{'8B!p<�j qMٔ ޼ W!C!<|<"#b$TD.5 B� R~rSv|}y;Ap@ M#"ιC%`4ŋ>=.g߾MO<G%1DNS$j&Iԉ”i2Ѡ<7oofт]Q1.矞7>N{} Ok i !RGQ8G_x TJ2D(3؂&#)IdFL)MS�#΅ǐ)b.t>[uu/>'oܞx}' %DJHȅBt_~DR@]D:C8G/B�""0D8`RQv;=Α1FDZgD#PRԥ9'!g<?r<et2I#)"Zju{{\ܻO<2GLJ{@|:^p0r'uƤR1<vIkҚt*HQERs>QhcO_ i*IJ(UF$N()MӽAŷJ! .oٽgF73e@*@ 8zj!/ϟ za|Nj!I1.<FsTɠȡR TMJ"[rsp MP;A-(l/m3mF 78Qa3dB7SUCe¬Y r,ClXM޸~^ژk00[ocVb>n f#ĚۘLeJP_y#sx{Vm]/=aB kf4[y-VkW9\C5PE72dB(שaB!l: i�w˦نojmψQuۺ9G:;'m:] d&7@HjwLj[I6MBF`Zbfi6.76N[qwKe;CиzVn©ήaZEo۴um}w{7ngBuN:&;|Cm!z6n9O 8@{h]bm܅�afBbr3VW`@]LvQ_w>FӭErӳ8@nY!Цkw79C![u 'vThx56b hWX׊Cw>ߗ`-Էy�ݨXstOo  mFb@Os\�[Q/@]f�lE}ע䚏pȇu{-*}-#YX`z_ V��0gErrӓ_}/<swPRib< "@2VL_oLtO?~y77/_{cG` EN}1tJ__}oԤYBjf~A㙖 8q{stpupg$qƩ @3 8@(8x>S*ACu n`g8đ q*%o 2/l6c)R*œvwI:&WxE�Dá?Z{{h �i*Dz=GϾn2R }H; k_ <_c Ư_}/U\6"1,!0$ _iv}c7//vu\&`?}~|tv? # B0s HE41{JkA)� \{~tyݝ`Љ#9v0`'_?D(V^F/^<ǁZz'!v 5ܗr:%Rcș�"9G9@b�y<~g81T �1.�(-1y"[yy a8z|6O&dZ.C }a>y^~Ng:,Mup8c\pH4"2O3�Z`wY˫~x=G@Lkb!19=ra__l/v&:* 2!)AJH/ooofwPhop5~tȽN~pqq\-(y\<s|Hk@*')y�!i&0YN'q]|l6q~RtF1Nm,MZ4M=% V/psԕeW#sDe1ʤt>J[~R7ޛt(SFrm`PJ*KjJ`jVrQ+d\^ml)l% \Y_Y֜\Xle>3Woox/,jmJU'*�rXm<B .;]֘U;&+m#% FkTBBg< 1(-V<X+ Y]XB0ڼXPD]gwV̹:7lR/g||⠾J dYQ㺥{ks&2JskЪNg go5ph檟ٙ϶>yckX`"CErήΤ{4L]%i�y&|$$$Kw6}o]ns*ܤuumؠz|\۲ ggdηMp &cldSvWRjMm5[Z_~"S*jl\!-b"D5˛ V.>@+a۬Άn2٪2`�Vnx5mK~lsb1 ݣ Vg»ĺ%s[%:lxL;rTLF}*вr�KBE}[8vCչdUa K^kjd0:xA^6Z[r>+1n`ίZ*;ق[V_8do1_;KTw ˫ϖ~sܦl)SF^Oڍv֘mQu9u^%!n[6j߫"{<:2B bxώ~_=Z� <sR"> f~}qtHrdc#Ƒ^J P|BSǃデ\\a&p8n|;V|1CHKno=>8c qs#7ߜ>{r<ztp쥾 8(y`c7:~^W$Yr?=O|:^v{ް.o¥BEb>A Go^kZ:/^DK/_/'*:,d O >}@r|xx3R|+RR0 v{ r7~8}pxN ZLJjxB nE)}.4'-t}owxH*O7Ltz$ (zq<?<<] 0!i N B,\?< ˗/;]{A)e)ポgϞ]-Ƿ/۫2:dAPz <%za3V F|�SupąEj\^]]So^g,�)4bdϞ?Ds ҀEpgeG {=y]_.$>'|y|X.^۳tz/p74<xpZqΧJQR9! yhM)&MJD+:? gzwvpI%11ѡ52QjVxo{u`Zs\+`,۝* w I 41NVh rΑV*v!" R|>_z9;Rx+Au !Lz5�sZSJRIRk$Z/v h^̙Z:_@Óbh[m7Z>t[xc~6 YPDtEhQw;YSnvobj^Ƭ�^ʫWRҾ�&9kG*t% 5uT6{h#7׽Մw[~ !eEA}/͝앋&Fƾ=P p7@־6xu<P+v [Y]U mܶur GOb۹W1U 5lז Ƅ\$m,m E֤(1m!A}1*�9:<VYPM7"X3sE(XWm"&B8 ! !\aɡϸ&]kn@[!c�mpvJ梾sULF#%i {ikB :nPьυ ]z`kgg䭜*;ZJנJ>5Z`!A,ꖵqKgW"�+TJ.بB${tvqT:;32y�=]~^kPR}*9;5bR}-kl 5NBjαPp.6Ի]ȍɄR f449n)ԷmlF 夾EI}�MxnP_#luH}G!͒CHxV`!S2C5 -}+hv4M[w˸B1fnlZت󝖵FƆpm:&X%ݛ󉬹E.`owpv;ܶOXc|-Z+Ǧ - w4YP+ذU�je9pg~ȃ!B.^_k?x'?y~$"ggu&1d>~ӟ|rLn_ O~vOBv;^Oi*0`IB|(o7B/>yl0wi8I2^8|oÕ~;yяGuVK_}upW^㜣,&l5:ء4O0\DI*?pIA |/X.ߝ]]Lӈ/VJoӧ??p^]7Wpx|?^_G<7df>_,fo>~;˹d(z7Kx`/ZlHVy2 V 7<}v_M+D fZ8d[ L"l||ŋ/ F$NSDWIP "$~`RKc>$b|/ vV4!:F? t{k=(I$ "x@3Aq./$ŧ(þ a1$>@TIҫ) /=xoYz'ߦgs_ۯ_>ϓDA7q˙:?x{ъ8 pɴ g8MO|tw6C)9H"p:GϟҔvDNE8Co! M{�}N3@V -X_Jhd쟿'J/?2e }s3S9i[=>߬6\-d_|?ϟ<L=Jr` 8gaKZ̈ Ԋőb|joL@^B;QlaNOq$W]{rOpv;t~pttx~Kq{׳$^&w�toSޓ'/vGbg$vv= 1UKc@<gdi ZrҞvZ ;t 2XP!*"/H ֚kc%:KʍOo7W*Ə|^yP� X\zxɌ{#U�M j(rDqVSGF*uCrV h <WȪC*%э 4Ǝ.jҦ]8l'W_Pg+[(R؎tv-ۨvWSVTuk6wjKWLl4TGx`۽1_ZB]vn`�pհm{<B$l�Ԫ+E6zjR6i`&B ؄DHK78DbyCcyu`E}6BRCHU ow6‚b !5!!=j($oBk! b#�{B/9Vnh 8'4Lp>*60吓+SG<kn,` -ަب �9:z+PCAk!}:Ghu$Y \ZPB#T^ 5\oI Ts|ք9dЦ nͯQGkR!Hn 6#^ړ`,ZCi α;DzsC$58G>slP_K$!9=D`GݹrH}HDF,Mv]64.-z dM>xG#αm`h`ֈ:#H`_o# nqm[K�$ 5tvX! !I׍l&-zv*@hP/k{k^g3lb=LjTu FlƠi٩* {/�4_?@ 'RgfXfid 2 4PhMZb@j> U*P{;*ܬ&$hg4U'qXC¹1؟O"I-<xn&K|Hu^]\^/fQ)BW)?MrN" q3&$IJk/yp Ip!ӄx&1oW_)$~6 Il> l:YL8~>^!!^GW?b`ۛۛtdihuW&bD+%w^O ɵRy^Q4J�2Hc6Ighi,¥M2eIe??]'7$R2Zrh򻛫0|Pm|v2Z1 !Za껯'g'YȦ|9I|&y4 ķ_]>F .V/Mcu�ADa4\ҫo,/BO줱w}<?! >BonoVII3:~Ht/:q!<~{]GZD!;{5ͯ޼)Q)W)'?jdHOco1^o_-gcD zZ4…޾^~zvLYu}W+5(\7,Ry|~v32aKbo>WWl%,gt}.e@PJ"__N9vt^_dJb'�D&o.Φq# 'c:{832]"2߼^hҘIKw{#ojsO(9@kZjL<ID\]˅T CXd,QkKG!Ek?:j˛0 u7QZ,gRiU7;jIi"d!oӳH) ի8JSdpyR/v.d%!"{z4.g�4i#ڙt큍w9I3�DҀ< !BL#a(U+sڞ1đrV�55i\/h(ۍhd?Pa Hi6ow0y a[q�,ɻɖ!٢@{'tw5s6R^[-_gr赱moCr7Tu{6_@n AFh[y;M6rƘΦ۩ݰa>Z]ju[;#ذG^̻t`Uo񦢴6ڂ*ssM:qUun]D˻ƶWl~T#Y㱕sj)h[W9xpC"-U#SX&oȭt`u:Q9"ֹXcwB[E.%p`[!H`vg[$-kNn&gnviИֿ;uvC׶~|ymnO7oVM Ϫcc}0jm\D]/ڲ,?s+9((Ï!mrٵl[^ +K =:H� gV0׳K5�֭;TZj<Tr9NO1R.d6-�y?&2N0 {;;;dۋ8;;QjE*Z!CX,˰t{{{cW׷J^phwwT-ћחP0Na<Cvvz''$E[@?8IrMÛUN;dÔ:Lj40t8a*ozr#([-7iʙ?F;q-QbvGA}LnQh9j3dz0۽Gʏ.:Jta5㓽pĦәjXbi<rOFÝQ;@`׷$Z|itq8;Bj/>o?/߮fqqDZu~? Gq4\(RF@ҞJx< �ƉR}ߟH`srrogEt2O<@dRE^C4&(|Hv;NGLt|>YVRJ؃;|vyu;jd Q~_ksnI`&i2Nn"{wX]_n'DF.?>9Zr5/T*PFp$ dt0z$`'HJu/rTZ8</lH+)@N8JD"DFA|xv{q"߾MҨ?蜞޿d>_9Rq&8ip&p6YwAV.X ]Op�Mnq `W"p'5$I* .""pC�%qTʄHy>?8 X,q6 v: UGK$ ^*0r?*x9${AoHqi2N"{A}Q*jX$uw0VZy?F Wd8_ ?R%BA 4#4.Gw!HJ1IC<;NjZh ��ygqXO�o\h:7TF*?Қ1%zk2,=UJC#9`=74Z,!%'-΄Z!ti*B#kPesݸrCВ)'DElGu9Aer+o~W׻M> _Ϫ\(ݘ5"qxwwn9ylcQhQk-W _rZv;!W7yN ֩ |]LjbfrjN䁢 FDH~"٥L6qoud"; =rzlܲBsh.j^.ZҲȁw;ߜuǒ*!Α6涡o) fAݜH2kMߝhGmc MHZl}p֑ w-{ɕؠR[w;Hp=Av1YϮ*Um"FH_lNaF6b;=@E }p7f&o@H^B:I_O�# 4({3- 8"'<(!8FyyR%qhwg TH0VQ V WRGahg lL],T19 D&P X(h!Uw<!F D]3%xdj�Zp&p}wr9_ ?OA{J$ҫy^@RK_�Ҳ2JK%"#ŅR&a`B8N/Zq$NZxt:"fsD  LhRJASiRDJ&b2/N$N(}ŏd0_.߄ii^!Rae~rva#<\qy쭖!eD {N1p>^' }%tU-Y(�s$Qhoow>/1iHInMt>[2 q<N;^b,1*Y,=<4M= Pfdx^pE^Б* l6[-B "1.x/IJsY`�N VĩqBpt6F`2v:pȕRi΃^&)�y9K)RiιTiRF{�aF t;]u%B;`Ej" o<:= d zu`0xfR"TŞDx4Q fDM.8 8٤7A |JyI"$L L@k(TL�2"FQ1J3JQ$St;^)ٌ19vAehɕ".q�BPg$/�A!I)YJ}xPGϏigg-M�/8oM];W>;Sj_`9UeZTKFwJ5G,1bo~˃4\jC-3"Įjzq]y 'lm% .aRǀ-emfM1.Z{YC.76M(ڃ#P3jJ[VpqwNm;eV& t:;B>H,gΰTŶ^vt c]k !-Z57͊m"J[ۘxqNR?C=Ů$U&W/B9]NZh=ȵʵraBp:Hb:;NkVoXe6;HCHu}{akr~.ׅC6Ez;D\C-cejM\^�vs8wﺾH7wL9]T\yd7MAM䭨}"-ڣ(t~S$o DDɛ#sS$s Umɨ|v8]$kuoّzP}tmum:z2PkW�D B9�$F �&BML)ΐ0HkDR|ζ"5+'TJi,90`8 'EQ� �JKMȐ^D§TqT"c=#JMNtRx\!"jN�1�L"SBbyl HV4T  DLR؃G?٣Q_́u9@$)@3q"t*U*e ;AG Qj"B 8 XVJ MD c`1 4 bZJP))U=*Z"n:Һ<}~W$Dpy9_kQq<1$RRJB8CFZZC5D/XWkBI"bd5I$D<$ E#pҌ4 82FE 9 9jEDJ*5" T!1 RdJ$qJքȴV�HH#'di-� q$ V<@R` |"B�!*@)"2l2@$�t �@#iR)d�♜%BDƐRփnDYnU$4R 9H0�GN4!�G`L)o!0�P,G!1}?t:^!M&,cF%�8n8jTc<Z%Ԋ�8C3Ŝ4bZs He +CzOҚ8*L$8^Ůثo\_t|"kP@ EC_*,QK@$0ǿ<{r!,}z3Qg<XK?x|<>x|<>xl>qwJ#/DĐli@�!C��^9@M/<|->b,�挀i�' HJHD�@32F 8!"p>G90B<�+'H0$BY�HkҊ3dsfbqyC7n.dzٌC 90c("i@1Z(Lsd (S "Ѣ�C�@ A+@@B+-82} @)Z, x]/JHr~y1xLVL%`B`5�@�q  |�!1@ζk#�ƙc88&V0 I "&gHh`Y0d 而 �DZ2q$He)l; t612 tg5Lg l�H�4Cx9YD3yK!9� IIkB EvFY�e^٘BJy^�(|]S c(i��DuYaΘt@[�><ZK`a3CΦ@` &Ȓ �4bf"@`yD٦dO.; a[ϠSV/DD/fHpɮ =I 7: MټʤH:|ڟ(- `TKmd;v[\fór^`kM/cNkC6l+{=Q_[hpb\Vx{?͜5ۃ;bh41ϼ֭ܲvP4kiM+;R,ύyߍf^gr �o)ܨX?ss۝>Tؼ![kPY o7Ih>!9@}rvxGZgG܉n&ow-}Q+j B7ݪY>3Piw["d-bK{FVm7BZ9d�כƂ8`鯆lNܡ~ |7x?[r7yK*B}׮׵P_M=}Q=nQm{]~8OaT!f\Wq^9Imo`c-ȷ&PBb]}] mo]�[?[/oace$MMwot-~&uu R o Xj>kڽA~w4)߽qdAMĽEwe¿)YlgW;2 Rr0$F�@q XP B� �N@ĈtF!c<[DDQkB2L0ƁRJ!29ϒD@@SY{ �%�2ĴҌgКHk�9"'D@p2<{)J4" #, Hu 1YBx"K= &@dc@1[Z崨Lf:�T2Α1U9DPh:)R*hA2!RYZ9c@+Њ򅓔%/d0@,Hj!ϒq�Y5"D�` )q I�|d- 2sڭbYmx#ü*1πF:KdC ^J@@Vc#|i byuQQ!O"eIJDEP-BD!�PZ(˟O"(\X*�?NZ<ʇge�T�vf@I*KdՅ9FE 5)2�8c6@ 90RՠYfes J0(^T^m萗!G<O0'Ew:\ųIGY+cry׀;*ib9 4\�Ժ䲺j,C3yF 6LgрDl{gK-[ue3fS7%םj� X[*k=& WiBAd*{:i\z[ ZpTy[1a!$F69ULhk]^.ŰL(̭"MR&QGe:�!cآلwClPR4lhUZ o !&r!Yi &6*6p : mu0 *F`1 a0ͫFTcvd+, F,T JnlԗAlx6?!%6tsֹ7Bvvm*!Ьv+/Ys6**lѸ Brآʪm1ƻZ£Ϩ-LgB6R>./aB&&6;}Pֹ!` PiA ChXAsQ7%-h ,F7)jB!q722UX#춯>7X΁·&BF M DW#:߸-t|KԤ_j1NBDH+{`MK8F#%<GTkR_[ ĬݚHnCY:6~ᲿϨQ .^>FuXH75#.E}͆o'=RWj B}nHMl5諦7HMnx,H}� #A %BF+DT\-CMkW8,Z\`nm"6k` fSUWC4RaÁ!ĠK7B\T+B,OE].FH.pdE7BDH*!=l dm$XGHsܲ% !H7Fsy c@STg-Tb#oF.c�vS:_i̗R "k,8*@lS[ "АmU9 #D`!@Z&D:MVOԈȐ֚13F�(84)�B$`@Ed `DSH"&B AkP*Dd\pε$0Jd;!V׌iҘ唑c)1 91' "HQr"*3UPatcD( )P{BpaS9&7ԉ�D8i@9C.@`@!*|;7蜝Xv~> 8ʩ y 0$x6*�R P9?"?ݖ(Bd@ [Y@^* �%��u%nd%y v]y K"*(5#  -eg@H S o^ѱWF.Due.dERTk�(�`D,H��()iY&7</lOwRH1$b?]6_^oެԉ,[L,?ii(4G7ME tStTy5"RriNQ5@e[_Ƚզί s l%-Ep=͢S9(iVl(L]RhJHf} ,%6맿g#VMEj٪|UUX(sar.*Ti*(6g{XYE%xhАBJP)ⴲBKB/#,B;:t$$Fί;L�`xrs /^h:J0l+k D|p@m܂rdl*Z: ш+ހs&߷4h0(:6**3+*+*PBhAE  bw ) 0R< MymTvYTWg@UVn8WY O) Иn&;Bn"nakë۫!-b9v`!J@q yB5vq:;ȲucE^"rí&B gsyTBZ߲kMg`ȡjƆQv95Ia<-4U#QJ6H3T9m9`FK*{Yjpu(+-7$B<[*&6lrvdS"Ė@w3٢mu>@/J� `[u>:BXVrF/^R!p!kfK$X4j!E"ic[jy\L uDn  u#$T&ϕ6j2:kQ߫HgxF$Xsv$hU*`��l`;G(9IEv$vW߶Lm3A^%ˡ9B4,b:O2zK :A}u`:P_^_&-TX<,#α.0 G@گ{!k$ g$˫lcs5 6&Zき iluUlc@m@9>!A* OW kځ]E6* KB%4_|�1dX=ߋ�0ec󃮏NkRF X+F ,ŗ8gZe =_pxX+%4b9 GΑ3Y9y .8�h3"-SRJ\%c^O, !B,�HkB))JUR&ٯbqyՄ @1P 52fhRI)- a%(EB@s^:qFD >ϙ'9j:Cd%yf"Efl<;X'l7r߂kb߅f vH'Pfڐ�31VC&%,ɗ/XRp̱"gJ`3�!YC6mUKkuY?ODA p̧VM_bB�%ZJd$_g@QJX L"0ƍ"b608s�J$qDaq'RDBpYLgӌr].*mQ]<M)�\]zV2`X ԼEvm��f4!!gE$I$cGN8d2#aVYo=,CP s{F`jI<r�6F#I22RB�UX~ Gخ9xZE1e|dN۬Ե8n_%e@UD)2>De,97|Ɛ1h+RTAUEiUk7X 0@^QÆx2K8!R_"Y~LK$Y7s9@b,d%h &-n5bP>R(An-Dj|}fLh)g+aa69Z@#TxF oN|Y 21bB#k9\YS `7fn"j)Mn9B3+G'H=�6@ܚn"!B !@H ݖSZj#;UՐ7c%i8C`6* ` m]7k*2Jggj !`!jqXBFAH+ +M1ӹo >7!?B`Bvo55MhC-ZcU̚*^qYzCFvʶ\ tvD]:A9KjP,`K c\k^(z*NE#1$P!PCH} +M.],Jv?U (Mh j\zb!fQА._M� #t|32y�[t~=,:*\&6(lf|kM9T e\I GBZ8*bqP-+ay ծߢ>H2;9F$TCH{$FY`- 5oC}&ݙYrۿ_�ye$`{9n&@^5|l1v mѹ96#SݭAשVq8l�65E}F$`9:%PW%@bL^WyC4pM&D|r5㔒*T:`>ha$J c];Gk`s45 _>v;Ǫzk:so8Ma 8تր �9n!dM9$@ �AWC@¼"PKd*==C4iR @K Y4O&DD &E@B2e1$:%PuE" VTDJ1?0sJkMsi$QZC,@ƉR a98kW@pHRܓ(1\e{JZl+BR��X^TXls`"bVdgDZH+�j "H49y!p�yJ|^;%D:C( *-@dEEӀ0A�*�"]_$�Y34o(z}1(_�ߟuҔ+ZI#YB4Of.|MFJ,_R\؜NEwMX˖U&>J@ijD,e?idml]BN Y^Jf%I?T˖- F6)ae@da @J*IVR$<Z2 PE`YB4(O^-:+e!+6+?}QnWEՙ�qP 4Iy�(,؏,h aIKm=7j> jJ)x|<>x|<>x|<>E݀#D3Rl%�e6KmR :ߍ$MRJJ5S Y1)M H,K@D4)M:T*Dy�RT�&c>eZ$B)Le �=9݂& Z y]ttT^3��"e"#9uz0I8T%Htu5Vbt"@ Z&IƒAЍt|3b‰b\kh2ن�B$@@dZgSk `27|5J8*r0TU25_4�={D,fE2WroyN.G�(*Tˇ@̓ٯf<F5 T3*hxh2r<gٳD.9@3�Q$gٰV밨5Y?o\5GzَX> ϕ e!:2DRZ:VR�=iʦnXhV,"0 kT3l퉹ʺ߅Z+Ȁ3B%S'̱j[9h]/ب?YL{P,*R1Uh(cPMV� ~ɘ+]ʹ*Sf=%27X.[3%uiZfҁQx(JԦm'.絑1-ZMEɃ`cm $<Ze_h).2'K*9\Z:BʹK0bLvT>{ mҴS!NU)gYVs-)P0HuT /f\lλa2ܵ,jL(f(Y376ysȚo~7s �&7gg=moͬLh\>j ZU"ܽiL鵻aB=TUTTN2^Xc0P_u6@ ! ~q#BlhG6>, r06&_7RQY:<dZRK&vU^[Ba���IDATy,kbxm틹:8!!MgWrBT :B0(Vqh ĥ%�,l d�uՊugvj`=ƒCh8RŽ*~:( >52, ]kCmd4M09�)+ d kbt8uܜ)M4yZ+7JSk|lZY5&, fm;DcAM&7yi|E&ك}a@ؑ`J$I}̵0ʬHFeZ X3auaef;K DF$XCeZ 18 s%uؖ{TؑTq`V%Kas\è6dCJn9x\gF5frdqF5oH-f؂Fh8su&Gsllp#AؠE-c�Smpߺ!Z$qCQG-,65uً6+;{bݪA}o-6u>5@^!y6R2T;Cv-TT(xx!e$k4ơkcaRsl ZqoUugWxUlKpMUXA0K$بٙ&a4jwFtVY&Xo,)FrG^*T"BM &MZiRZ+JiT*  |)'I&)VZ)҄HD5)RZSJ)S5d `H4%R^&JGqt*e&JԠYHyhZV Jʔ@3<_<*I)Z+L!p-VFL$RDd2NQqAIIZi"UyH(I˴:F5(YBO>AJJRZiԊ!1@-A&c#3gg4sE.eI@֗D'B CS]s'4{))ZR d?4,(EygxyqUEUړL<#1$u!E!Vq319i 5Mu@cO_m2UJ�ٺ[]\n2(BIfXD9)( x(NSIqΘisY`HE4", We`Bh5n2e/<o�Tq)΅>Gv`e]nb aF]>ZMVsHVk,qcc/LjmR*˱BWu^jAsC;WJIm(Z\gJi*ϥ4b3O P{:Vv\`7݀\l.JT[?fR�5]):Im ,| PØ 䖼/`zr[gCdDdYضV H_9Sh Km+еg! ~s9n`LlTXŃƯ^U;U bϺ07wؠDZ 2fA@̈́rd*QbfDy+[ٜn�vu ص6lQ5}.lFmnjDIh,�cTq[E!am9ۆ\8*{gggYQ_wv["=EPU-Fq~فy6vNZ4Y6-QUw`9K _q1ԔC ̌mB5X!kZrfkh*Ykeב}ZtvmrvB* @�==`[4\F}6ҍ&l-\PYw`t~]mUǪ|rP-BȜ/EE/FS`LwAHMKfԝJ*T}dsTۜ'BnCHk$p31>�Kvl8F$ulԜcyH.ذWH+q9G95"G!X$M"ӧM@M̵_�+4Җ]ݑ 9vmݤZhP[էiB(A9t#tQ9M_¿Q!uK9cPG�p61:5υCIXۍ= ,@m!@mW2T 'B68GC绰7a(AdC9]A PD %۠HмG"� `,y  iM:[tJ�Ot:{x<WiƊ~(|D8g\jJeʴ|9$NݝA{|HS +!g3O,EEXu?M'<N5ОZZǩR9W@ RSD`4?YM@ ϘrXDqT:qpt4$av�ZA'3aZ�E SDQAs8+P:Z 0"פAM-@D*_F#buf"rxԉ-50]yֳXɊt˺]d6MZN�l:dI>:o�E"j R26ˉр;,@P4 19��h uQ X8RM2<UY+[.\Qa6~ x-KX �W|q4Z9}H/EiDdD5K)V4a|8G-I"=Hf]b;h4VcF=kW[#/5P RfD@ g#lc2 cUXAiШ YQ6UI2fu?F;ZMe@5efhJ-[Ԗ7B80IFJB`i[$ص|01_NīU%(Aۺ E߆!u`DȚ|n\=LRk�M E=he+1S$u԰a5l](v5֊mVM.9!߆[jvg*^ y`Lb\6VE\DY]N8 rwdXpfV6o;ԋ-1*젎VHN޸A o@HEH-7R앳4vf:F ZkAV5ewʎrj9zBLQRlѻ αuwkt뻋ޭu~C$t~Ca"d+][`uïd խh3:2m@Hs~{lCHjE+Yzuq6kM6j#Aۿ0>rsPUێBݜHeZ#-^3EҼw$nꫵFTvmm^lFRߖJogbi[ AZ;"duuհou|D6rp6pත\ - z F�zl@un 9 !XxۚpP*2 FYEg5D@"%@yԻջ~ڝ'2^)sA2bi S qB!Hʐ1`\*{ P΢Wq$O(q( MYV��W=z{j)$}='i 4 E �01HHČb1z:}�J 5-$L�ُ(3@(�H|d �! �b%Rsѕ I<�"�9c-$"dY+S0`%.�TfV"0$�Me<fA| �h7Ub_eB$F4<eu'3J)J@FDL�t8O3c-gnׄ@#<\Nѳi!TYFc/je`ڌrfr?YQZ,Y\;D]l]r^ ,��*$َЀ*-XNC$`Be 53V&aYâm= zD e5!ګ͚̺e?)ADA*lV=ۈ0-G$LQX*hyK}c[-s{ {b^ȧkUERp'TAU'�ps^E@DPK1;dh,v)$Nf1cJ+-3MKՠgVeT<Q^V5YK F.hEڼ1ZD !-GTM(/^7r�,A!Ьcf! 4ЬBFR.6K /h~:[mCh0AJUv G2erp^l`W,Ysbo�H<@bUIeRQZs{UE iUo"!vmfբʳ\PxhP lڨmT4b]-ě4BBjήDb9;B!!kJ2Fl !!!5O BJO@HiUݡ@ P7Eajqv6r,Tr9e~[UJ`zp&Rq2U\SFp8Yg8G0%khPWq%$[as<- k|p Z5ăUXK7U2QaR,dDC&/bQ5:2ެ{�2JdDUP;BC"]iQ?hPDf$ETG#̚u1PRy4H 20>Q96v+XVF[Afrs αFmtE 4"Aӿ;L?p`҄ P$=cZ:B5i A�`;>+-:A}E?kXK}2DEmI}k"= EPGH54o<kC1tA$[&jԅ"voS6HmF}u~*2VH jαޔk.hꆜ/=E|"2*`# R!�-!BlBjEƌtq濁Z<>TkA!�IMtΨGUC (Nnhw8tN㫛j|9<p6OƢ�F#�L77xGsx0`j%g8z"8IH3ÃOuNo>8O޻wq~ ?WZϦd<3t{=gG^L޼]c dÝQ.g|:Y;;=u~'H//&7jI9N<y]/:JCJ�i,z'<Zurvvnp0WpT3vnyb0 <!JP-8`\$$|1A2C5oʐaaEdU|njo?XZ" 6 ye_&F�$dX)}HZ9kn[(*:>+/J[xU9(a=cM�.W1R*gZԨj3ر8tEME `%0v1{oVHϓ@ ,υ D(NWRN7Ҫ(dIYBXE/%TRX#fq㤢}E̮Xlr�"cHDZgM "2w.["ZDg)#H5o9Z#̌I5$>|u|<>x|<>x|<>?G;! "mMESyql ZRB0=ѩ"gd<<<ONxBdLJ~޼ZD[^]cyK$~Ok-<oJ{;?$UIX$Jᄍ"B ^www]xWX]GN>'Zix ~CEo>�eCv4-fEk#>QǗzr=Q7 }P?u8<2 g_>x|^w|\%TFJh;Ow~*ߏ_?HVo^ᄒp?=ϟF D5iVxO=:Hi~{Ld,_dLD)eŞbݲ@ʸH�cS1G{g[1+#<V+L2˦  PNY> ) F|g5 T^|X95y/<j&O69GWXs*?մ{WB1ќXWa6RTM/sżb0ƳOJDT SԈ4l ]V/͇V%d�^ZXOw<3Ʋ)l}3YWe4I {ZAs Z^Ǝ%1w8Y[pՔzֹV-;wAVR·VaE&�k7lQŦpɽRwMZylTOp\\ك1릘Bq;wb`["d;=<Z5fqʲ6iiS[mL"NG[7aQNcϱS9y+Bsv:s@Q~{>Yv2(Xĸd'llr^o̔ߢ*0fZ\kllr[8m]R..h4F)\U꺳3wޭ,�h h!,Ovئŷ"@!�L-2ݢIS8ݨ-Umm__k\Vvxƚ7x?[r7 gMě] *p|4m:]+bb\`('BikN6&dkWlP_oP&T W { [SZmltU{9KGM@^0>'י``f]$6z!(5XBy;`Tvw[v#d34VpFvP_DRK:_CF`v֩vx4ˇsvt;EUU;VeNux8v-Ìnm]K CJdפN?;߾H4{g#oGGG|v%ɽgWAožN{)#t/o.^>~io ϟ g"R?R uJp7Տ;]MWZt`0R?ׯc)u @XU�S hNϮ&O糣_</ \CɉS_~/]1.ȸJj{ų|rpMvus/ >_<8>9\.T`=tu?sR+C%Zrqv3|rtǗ}sX';d�v1Z+DȌtT&͇3UZtItXLdbu?A#~l/ eQ�Ki\plR{( ThQjp}Vf_֝`,K 4iҨe&1B̶Ziuጐ{NC|`v"Yc=CԬr c;V=*hSԺ j"1^툂@gXܖ se>KeaɛP\;|W4P-4c2%Z5hS.VڃMjÝ-#̭rckʫ lXɱa{ug[ϙ)w\5.p&C[,ǼiBuT& ;96F!s_!U1,\ѷlJ+m!ӄ6B*l!r0@hTب5r{ 䪟 mu0 *뱱ͯE}V[F2^ x& 'gAE} 6ya #75lA`WM媋*7G幢>b88'B]s@Vn4vF9qrs,ռ!5[WY5B6d u+P+%M /aBfM~Q ! JǔSP RۏrMACo5jԓ=T] B!�)KxW-uxBPEo?Zή֠>,AЄCب:0g_Y:Q:ߒ@15EשoS+T{Yl !;5i -nq^WPsvkf < BL֨6򩎍 !]jI}FZpu:0;EpVv;m:jQMlh>[&6fslUS6^r4v2ZV#ֶ %BF+Dt~-J6Eok-J}H`7Q6Sl`v (YگF$ 3w-B\T+B5]*U'm%'TG m+�l�aFۿ# M֬kM6<4,l;CEM^]mG @QQP* +#jXrNw`A�# ݮśovO?v?=>ǣ$Ǐן<~7w)HbZLP$|u 믿L/?;?SO _Z.淗zV3�K`G~pAGonÛ*zg_Gq'z71ٗ?~4�`!{QK}~;Y%;ػ?hg_<<:>~NF෿}hS9]~|G^O,} r}~nt�̀C.(#pOcO4d&3}Ї54Fj!G"E fD . A }dCfD{xd橪׷_ {]*Ofx/~s>_z|�UM\ �‹ Ӑ۲- "8({^{�]7 �DDŽ?K,<WK fn4 E:*ЄX�)BxJII'i^F-D- LwR]#n|Eird}!e Q:{ٔS҈)P+\E-QqnԙsBH虄^l_ B@9>,B/UP-Vhuѕ5L]e6x9B�sVAR:1$fE\f]]MH W5‚eA)LrQjm#F ,iDelZ0BҤ@E !!4]'ݕcdO;2Dw !q 8Bt#y Ne|  ͫ՛arsߟ<Etv!�ru> !/V3 !A)Yla 6/#Rb:RiBX޳TOyZd ک A!@HL  C #Dz] &OVlP1$8qV*ɡ/eI%(\׼ZNkmL8I(rfhX%d�d(@K|Pq!KO"LQJh,<)Z `WE� !RjÆpv嘊 ډ9 !"= V$5 `!!*dJ 3bIq9BX\!rz$72B>Ȩ8>gERܿh$g"Ae$"W�ڜ@}:bԗ)(Ǩd\�eC*ב OjY$ @#cΝA%NQ_2KCM|9J`3�%DQb{,Ї^(@ 4O"Mi;G^ ocHQshGB"sT0u.tkN"S"QLq"@[8G` hV]n[" !$3+iUUa]C ߙvv [߮N/OY]]sW5~EKK@j\jw{׾ѓ+z볺zwWkz맏W?X}';/x+׮_}..fu~wކj^~Ν;}p˓탻;''ݹo<-9]~믾s7_? ;nU=w׿osI=ߺ W/_{d|}[N j6Q۬gs~wη߽ݸyйλn>w7^xmw?~>7η߽wmlV+ݺ|գ7=+Ãgu=s΅]m˶l\:~ 9b<99].Wu4h9-d۲yr(@y/|(͓H$u;3eG'Ri!x~|vy4EIӄJ/Lȕ1VnY@.c*DSTڱ|m\|L1z5E Ѧh^k0 K[$B@!Լ!zd - mJof&6!mc&{B 1VA@x6%@FiYq=,؛ ( ,T@>ܠk0*,!ZB H `g{`!XmB!x,f'yF;د2>bm/FHvBB0x`!Å3�I;u!cq}aT&x#'�%*bm%0 DE#$ !#X.)WB!8S7mq\ 4b8G!xM?Pz ,RfsP92 J@@DN"SBidV;!\03`+P$9;-'rlBvv!#I!!@h!' 2T!"\FQ6#S: |M?N$"Re| ЗŠc79 f.8eH7A|<q%2)#$9G bWPFwfhFQHF 8*|I Ѥ>fq`'"gq<^pA�O!]P'TS %h`:< eѦ4r7*�6QP!9Gs{A+,-A.ZDy+ ,X#TUh[;K"tAwe瘛+ȝ=33jIJDJ C̼ڶsLͫtl>�%oŗG6(`T`�8PYӤϰ'Oo}o@꺪zFwՃ?ypчW56z䡪s9ŧNKt;W\9%oܹ`q zVgΡk~jUK~jݝ_v{{{WnUǏwpzsG:\-?''٬YՊNO?|ATGZʵ7|>yZU*O>'OO=xpoZV߿͓Ol6YRӬNUU/>{w/OK{G<}zZ]߻�?Y=z'r>rprծxެv{z9=n@5p6rOgC˶{|:O佇<b�Y=ߙ9\ \L/y *(;L+0o˶l˶l˶l˶l˶l˶l˶l˶l˶l˶l˶l˧ǺM6�Փ'OYB٥y}oܿw _g?µwk7kVج{�M Vzy[h߬*H�} %4 h�p3#tPUnm nopGo׾];wu@f;zX!8u Z}݌flV^y箼Ν|K;/t ߝwf5lo~�$װ794-Bw.VUEmCD8ϫڹ_^jn}5{n#buz|\ʡGiW-xة)<ܻsrrⴹ{ !B 4CM�5Hmټ+d�sDh8mfgwHCDmٖRPuO\(7[WcR:{lƒY qh90IUfS639iLPf~*_V, rvɆ|X}ɴlj\80Xm~0[h!x|: ,䛀0<j)m2e#b'`C|ռ#[ۗOe&%#a-Ŷ q&&+PMTy@mkO �{ d{͐ q}`蠰{L&MS"hsyҠ(ߔC?Lf42 4,2Z+ G(Sݏfϊtv㎚yM6t:CXhd21u-AAŠee5YCnSaz .Rr te6t$77d'`$]qِ3079IeHz8p[e")j(%lT24Mmn/r #DH9NssfRq ^>*Gນ J /6& 9W&!T C@5fF:'7 v93'KE e֌.gWfdbP1xnQ:1!|@HgWޝ;tqt>ܸ7s/zCZWݏW믾^x_WWkWo7Z@r̡wNZ=}|x^ٷ>sÃ_�mv;CfÓu6M;<=ܾ~`ެjҗ_y[_kj^Wv^|酧׏U5߫_vi޹~3|&ªmNOONO=5'NO+GzUt׏Q۶vvu]/+7?;p8>^.f/=KkՍ^x%jo̯ /ݼܵUnNct/>޿ PV{rr0F�|ۖOy!F!�ȡs]U9DHut-=TSY�u ]D�5eH]�8B8%*q (6urk'@_H~c̞gk ~gɯK̒wWGTH.ϽAЧ۩$ß.daVFa ѵ KU:|׈o<04HD_h^l<�=\5B@F;LfɆ8<\#AADl̈́ +c'm1V`WuNs`+$`51I)b[B<8x8?c)s}W 7�{l #@{$\h^ՖvǖW Ag� WsPD` ~ so W WLn5�A³HeclbC�B�AZHl 8z?;s.27ήuj(3n.z & Yt):_Hev?Iэ|qd;{T`:Bgs㹜I#j?6A0Rە/rFX0x)Fc&[)x~5;e`E#0 j4MLH嚀-YwFH9J@3L9`J/ p@@ s4f6둏H&u~9Bv !0E�A�EU.R!$Q7o2<"DE )C9d�5A>-x:49Q#6Hp dIݜ;;c,x3, ڦÇ[%@zzl׋Ƶ._"_5]ΠAv*!!PU|VU0kO޽W?{᫟wZe۞6MSWz^Wf7j7oׯ_wWKZ/hqjf7^w|kW⋏|mV׮^/<j]{Y5M];9{ŗ]K7>Bp;;0cU9pU}s|xpѝ;_3?ƍWngjZS*>}>~z/|vojݬ>޽Ͽ|ן?瞿K>}x<X/_+_қWֿ_}ķ >ۿk׮ Y^Sv+lֈȇ qo˶?=!`Ρs+W9tιnmQw&:4({(S{??iqW|Qв&eIeZvoIBt嘇ኲIFQKȲ= �D#*-5ц�9+�L f )4W:$yrhS|? @qbB \̄B@$BRↇF(R f2z m "6Yp8rdɗN }�b`싟34b6{Y!Dn0L&)AN3d“Rdȫ B;쬅,!y |E3$&ϝ7!ASoΎ_sH}/) $֘BF7@B'#6BBAQpPSځ q!1(%OQ,}D,Sr)OCgWC Eg!FL EdGAeJ%![%!P4QPdgRq$ t蝬3l|@cQQSeQRtv_K$j^`(,ldm<c~K' PBZg]b*.*Ύy" !I~M}euHPH ~u>&8h$)IQQP$cs4PqE)Fe$$ rα솩뜁su~p* ԧ"[Hqd�b2 F| 8( <SI$(p 2,1u>OMSwL 0!D4i aBhj7t!RQ*YI$!(Bu[cu8ݩ^4v2Rcb�<:J>L�<Рk׮]~Xw\yo\߽wn}yw>{<=<8yݏOndqݽt w=׿<]uux+GWfWf?<y;ܽЯTݭwo=?|{GGGW\9:vkFZl߯{k߸{z>\>}\z7+tG.7+Oni{yww?|=8tbui~t7n\~h>V߽1պi;vkw|ÖjV_rxƵ_qUݷ}buʥkׯ?՛7;w?8=8<8:r׏fjONON\f�,̉:sA<#ºH⇂>I>pZ3pB&C\ `�+�\';|6@@ijm"iXy@UtrJ kG9ܢL M1_Opx PS4 W])t┆a1uS*I:]+ &$ӑ"1YU[ Լć x@}!-IVDzܪB V !2 MQ"v 4Ul矰$~ɣ6Q l kބR{kX-l#R͗GpZZe"B0,GG%pӻCH0<56!BF:; ebgjgQtvvP 2df !00— !SU-IB/9BP +:z9_M(!F}B]Kr("R$=0@VAe9B40^pv}s99lK?u2`c M+]!�BR woK.wv6-_Ǡet�꜆^e:_) r4ª}~vυNWliERD C"6Ha7=4:OM稽&aܠ3'BJ璉瘣bsebBe€W˗;,Pߔ99=Φ>i>xe& 0 &y04"A@kQ_VS"A("$2FDe(A}0T '9BX)92HsTճ^0BhH ƻӤ9&o(OycȜEjrTBӆæQvF� il䗧'ܫl>[޿sz+K/];7o|tE0?٥ݣ>wzEKtwyɣ'' \.Wc~};AW!=|y7U5]~7 Z.ڪ޿;5+-}f_t`g?_>~|ZSfkw~Nv=[-w㇧'+7Ϊ?|<Z:<v@-~}ᇏ^�|uɓ'e3^>~kĿG_|><~xq浃yy?}xգ7n-NŃ?:v8*[FِsVeN�o^ų$p\\:r>a�gxls1Y+1L�{�>:/eWeJ;4шÿ_)k`_d, cY)3(se>;|jzbBܨpf"ڔ0b3 aE\2a[.ns#U#P0x4畲Lf#mU![:OerZwDPY6aCdejqQm+ᶍxm%hF.gvM{B2xs(E'D|A<`ü!\qKeh ԧ!$wv7DL/$9MzwBȠS~�$DL4Yh}-:?7̠40‰ !ъ Z{Bո!fot3ݐ3`eln/F h? !DE|"o5b!t~șB25OQ𘌐#B6rveGy@Jun1l xG-,h`ur2CL }͠s40M4@[--AzbLԨo0ΧY:_ U4qs,?{d2y#"rðE'Q`rg@4'p(qHpPgDŽHp9NBXȜn3?ެ�<eKXR܄Ƅ_OEڵ=ݻ:z0� p"'Z󀀀gbMBʁC߶޷- 3pփo+vvf;Hج˧ONkBNUfݴjuuC-۫Y?l{nN^y~_|w7ŷ?xQEUiZv3d\z,Nr6.ߩf_U=o\ղdwjm\f+WA֯U@iڦNmKu۶M۶v];5;{xp[jOOzg>wvVzQyW �Vj٬Wm wK.b>~<99]Z WUu]̀82@-q)�`NL <9s~@JUj~f)l$=/q u t$pf=@Z|9}{ODz$B�B_|x><�P5s˯^u 80|N #^T''4i>IEX#d�r3 b38x1қ:�/?IɖƳ3IBP>&s3n%{f= ZB[TrĐ#E @F*9GnhEY04({iy2 PUJ7 5j׼=Gv?g&w('wzE?"ȺJ$'-lP6Q4#F-(R9xl#aҰ2*tY|8(C@uI+%Oq5' SVa`A�x )o[Ә5u<:3z1`c^C,y͒7͒(X|(\ȴQn @d3uFC !IP!.3JJEۉjNk:?D? ՎC<U>ȡ&0BIgZD^h@Z+*ϻˡ#bo( 9BRf1LՀ˦3#C}{c ;i>vVݱ--j9 $ °cǜ AdNnkQIrq(?eYoLOO> r3!#VUwY@.j>Bepf|Gu\1OGhN`uf;mhyy THI#ui\1 JPs]j@XKL>ǻdR/1zy3/5qn\0ǃ W\Aħ S/e�_d8 zRzPZS޼;3@Q¸gzd)aqH.yY@X6Y< *ax-.BWBg,'S% �!@6f\DlpO5:ԬWD�5_N8GԴI뉈\]]vtk7/PK뛷o\|ᓇ gټi~8n5{6Ԯӕ_.U]'�5P۶ԶC fDGgڟ<ms-zm[u_ϖ7Kp%}E]*_9k CU�X<m=y H$+BXԬM^CalEjD盦]/YwjڟT-b=mrf>mb>'Dh=kTU v�5ue[eb^\֝ιzVu3Q!+Ϻ?܅Q7wC |5勲-;c52A:Efd1o8]-D]�᜜8`tКSQcw25{׉ CA8$ӻpXAr`aɘ!GH&Ao^Uq$6¼>d3 *rIK*A>2Y[@Ǔň o3f˪kx Oa x T#DGUՑIZ85!Df"Bg߁4ɛ@|ytr@ P $&*Hp"#�[]vI$,H}}F%t+80cnN\6B@:s4z9&EgM�BgEjQBKN'|66svp%- ~WpBOa`B( ,acã¬Lcgʡ C@>(� �ר`!�H9^!0D"qu>ѻdnP:rxB(7`rl:?RYIGTLBbʩ5S!,nfDb9.\Kɪ!MaBPԸ0A"$ݭBEd3>1HPqDxvc${(瘍UÐq LOI Go�>Hk%B XV09Ij0`RXE5J}S"@&/G+!B@!$`<*LA穘�~!2}qBBR30-1C"GE9*O!g4Y.JE}Mӌh:Glֲ, yj zBzjwqU�=4z]pkp� [mۆzgwgo^?V\>~}A];�]5MMu5{""tPUHy{thFm[ۙH-#RM-x9m< k=�=8+:tj h}[,=9�8@�͒<`= Gֻv~�yGXj] ~Һ%mv#9Dt:"<e[ "k'W-ݝܹDDmvĐ4öL-<LH^ocNQ�c],swBRXa0@TIHul1] QwR?OܨhSP< YL>;۫$R &�Y(ɽlJ)Ŋئ[1%bQ ANlZsFP{ q~3 !aO@(s|.Y`Eh Ef*rWW�mr h,V g)x-F~N9bW'6N` # D7V&RPmCB"ef. Se"Y/�[H!05r0 BҤ@E !!4] A㳴W>!a;CHhXn ؼi'12TCHr  OnK&7ǮSDg' 0wJFF7 yQx ` $; -AFS!C⼲yJ!CH,8HB!LPokB #$(HxFdsQ~ &OVlKYqTC_ʬJs9O� Z;�TbEI$=Tuc9G)@ fR9U>!Y%O{lB8/"'+jDF Y*T\DtvS0vQJ cZKDX%9|I}A#gr� !R Lj$ :N:FH2H)$YC aTA$ &D Y@Q'#WM pFrB$H0x%HЊOH51ϞE9HE 2TQQߘs>}v9BHpsl9s OΑ4A!r(b@TA}�8 " 76@}ф2%lHP9G%g!#DGM`DZ+&¹5pW j!*u0H0C@$89 e@j9G 8Ǡ BQdڅ "w'#AɁ|DH$"OA8AfM!+ةq^ 5] 9"Gsk$ w|^UGO.~o|=jpogoV9Wl9rV37۩vn=wz7_T *@6YQܯr֬Я<9$\PDkj5�k D �޷m<5D-BT5؞Y6GUozծW]{r!�o]_9u7A^U Uj}nޯ[pU8ɂnmٖI�vǶdyt�\UUav CaTP ˔d:W q|6.)9qHLK43k ,|'$9T϶ mXO.m|5RPiHdv޼!5EM>[,HdU2kJL(lB $[^]>,c<�LQa-f0QQH-̳ !7k¯`4Y"cS=t& dA}v ;;dj eNǠh4ysmV k"4H6pgEHڛ!Ē�g@LiF1qhD6DL392]D^.T{KjsTTClǻO;9rD0ɭ0v/'5~[mm!Dt! wvR3ujb4}P}C:9!7ex/69İ-=T#Dy�aL|n8+`10YFt9T?0o؄ɽ|v(NT[R 2aB/IcP!"A*ag&@0'9ǬQmb`>/(WPK;F:R9N2`O@H1H˻3'"X09Q0˰v9Q;"<^w�b|0�yo:uMփ'7V��ɷ;kZt�+Ɂ�@5E5tV5wwY<}kb9-vw#@ {!V"[p Ѻm{-6}Uמ^vnBO\@ӂ ѣ9pFtm۶mv}CEu8GZ=x-s\!QS#͜ g mDзq a2Ͼ6|| 0BDmӆ PUuUK;l6΂^MPQ6|�ƪ;9}WWs,9k)8 3SD[_o+Y)q>}`\Ob /ZIk>5"<#b&3?eHȟ Fl|/YO2!DuILN@ Ymسb#:-l�0�ytOyo֜swJ&QXi؅ bt*`oi vA>!|t^ތ>ߒigb\mNIC=;B^ D-8B`d9NP Gq9b6mg7DFING!BBm$PN.7!00Z)L1 ϖ <Z?@~Kߊ)d7B2VtN@}m!9A~qbZ*4iq75I&jJ7U٧laY2\G;%T|)tdg7* IQ:&E)&f! 7S[3 ~!TgY:=gvJ]ߙK&OB9MVze\ ݜaw e7l "xG�*Ρ !9y[9p�77y ��Dж=xT5<^?:mƓ'S̪KQ;s�;{|K*x^<' : 9O@knH0~WYݓCWO&H\eqӹ G' :,2RLr"'DD7I" cn=:@BB9Wk59h sT9"=u1ua[APM#<W듓!n m Qd[X忙h*;  @wIףdV>gY?4OO2hz"-'RJJ_*n4NH�S膭P':^#Mz\> 7MURr\%l`QJ9GY;v㩒O~&i2o-I q-%<DK#xcVJ?OBHӝQ?yAђ-vדE>եb0GPf:v&WrY`k *\p#'#)d,i"Z]8jeGbނ|, ^ds.OҪ9$O.끋o'VWaBL>(!;;J;A_P2VsTx3YM'fI|b, 75و/ oA" /,BM9OH,6ka2^lRL 1S9 _3ߞ[7?x7I^uL>Z$o#%9_)DoMVǮ6 I2? �9U@R;`(ѝêrUf;fd� `�x @B3Cj7; <=9۝]U˖<l^ȁuԂo}|rC�[gy*F9t*p"v_ipz7f:,bS#@+°#Զ Q vg3DHوWu-I| �]UM&Wu JmYo*jkhwv |[VU1l˶L,TFaU:Ӷ''''ժꪪ꺮Y/\vEw!j+߼٪8 >EabsH@})ku-^ 579,] b0]&W֋hm,LNN,-̓U/$yR_ߤՈn֋yfة}o+I ]*"3dݽ6z%ٛJ )uRzͮ5[O ط [&܄! O$@ILR zk`MʀS!,}^Bq6p{_"A<ka Kz O߫ ռI rc1/ vv6NؒV skgg!İ/~7|fT092gG) #Oh(16v֢*6"kFG%pxu? 7ד�"MPٕpv \LM " &'=3 nt>YNn4*2tIM@b"$P9R_rve( !^.vB`υmFts١[f7d gqlLҠ Y6sD`"HPpBH} g¾m ;I#L`.0oOf4!{mNW ob!1nl/U;|P:K зα!N;&!ߗ!B-^#$sٜj  =ElogvX  &3}g:9a@Wneh`" "R@'BBׄ/&p "8t#znzuW;D@Y] V5 ]\Mccwލ:$'@D-"xןvU݉#TX$�;}o^4 @w(4�us�a9 ųa{ RRwgԦ=yHDu|OTD<Akn#pr@۲-\(ұD<Y=5ϻm{ˀ7*#A>ع +9nCYS_ p_Us6]brS%�)HȖ MHC꒾ν`<%V>R_yu.4F\s+ءH kXAK�CsԦ[b]Ab�$YG4)=>V!�V~B|g~Pա7 ,&nDHW2k+/b+ t#՟<7YO(=/b"z06Mt<iQ:gy^ -I}Έ4ㄡ"tm4!"BY!6J1pg}z<-I`BDHj}7AxS!cC^!Fd!_9%oDB*ı 09lI"`ԡi$ 8$1Cj^6CA0W@#$܎acU D!~Y`({`p]&īts\1s l ɡpb_g'Pr *TV(5rQrHK.vPq\KBg�&s NnNC>t~L3:_!w $OW`9Ā\g'!u~!VLJ:$RBhsDqnH#Hp $LNh@#B"A0A|�HgDB$(DH+N.,]ψ:GFP<O:{D1L4"O"A\O7cpv@SNtXi̳+A}*4O8G/Oړ/?z")qR>vM)Rf7 BSG:A"HD$Ur̂!,ds!sBԹ@"-PDY)9GБ>A"p0SyBO}_<Lv,' x$8D* 1 aqAc+BKW5'Bt"--5jnoV]݁v ZxjݬqX"뺞ij}iͯj_|UX5P� -+l++ΰWV;axhԢ'SK<mTUzp* <s5j[MX'O-y�lOܮ}눀%X==5D_xj%j_,Wp-\h*j[ ysjqzzzz\.۶n要eb g"LH"տ[/O[~v$B>a.pK>H/�`&ዉ}v1 º<bҊx"[TX_HPxhTgyxSk%rRDljټ8T!1bԟ"fնM0zK�rBeO)H/"l!;˰#o)Q:&U82A08܄j4H! PH&b 2F/&HyMgg dB; gI]�Iߢe<+B@dgqV=Ye9&dB3 \d9T#R$9U$6'Rhrzg8&zU/Æ&#KMVqڄr/0Yg }.4C&:f#eg',dB26kW<)E0Y ?0maq^ӈDF@Q9j/I s7ɬQ|-&Go_�|:mgmm]2 c0łɓ<Ј2Lrܤ`PDHP9Ǎ"IF:*ֈ遒jb-S&88H-a}V9;bcCj9S:\#?t`g}uF!P\H@Hy@@3Ϟ '"!T�T\ @ݼ#!BM-ۅڐk V�@PHªB <Y{Z9|KXUmE\}6>ZXg8S=R�X͐`ExqAH3zl=6۲\Fs^7tZZZDp9HDmچ;9BHX5@P"9ՊT @ @�aTu�מ_L˩SK-`\S`W# ]Fg0�ܬ2dYyЊ̶D-O@#yh=ZW;;;U刨iˀ*��)9S%X='xFbz﫦7_]}g^:8ǑFOԱk6Pr2Xۛk{QwUɠ׸gA>}bfŮlK|@@8}Bqy#ԃj!dQMNjwxb6"R ;?M|lfDHr\:NG ~c(ěx΂E_X[?B^ b/eBy<QpiiDek{A"$Ł}c AKeLtz֙c~7Z"i7GHobM(/rl$wû_ͩ.}H#27>T �3Qb7pF}2SDmZ /"BgM�qgGq(O!Cm#dg`IgN8;K%l N~~nlG0G␜]l. rHd�rvvE7Mj`obۓ&�ٱv!| -FG_/"L_ͯ D)h807h/nEfG0&MۛBDlE}!V/żEl;;^5 Btth!_l +?fW9}ѰsS# (%B')x -c:_1܆]_�Yfǎ@Z @GC:_ׄs@Sy�P( #GW~(f@ԧ*BH߰7׍n;\|<b$HIBQQ(T1HQ,!o d0ړ}_=bJg7Hp�Sd P iWn|° I^MmHXTU ̹9!B"M9Cw Q�~>yݺ'aZ#z<V=Epfؿ;}w:R2z@BG? t?pNJ"p@*{h[j[w@5b\*Ī9u]5:[*nv^~U*?}<Ʃ)nt֘෶\\=?{0:}7M�aH�ۺT@HVFWz.D0ѹ.切{' \HOВjo6Eg`Pz(륁V-}'&i� U;uѽ Ʉ>Uٰ1M\TׇbhMf(M-A[Gcj ?e{&Ui(e/% :'g+<%3�@RJjgUU2@,a >{pCt $0> f<5j~9YSyWwQ5=70+rlonT$ƦU9n =p9;8hRNѪyBEܴYR$~36d/zQA,Yl:"5'5d ǁ~L^($ްYxΙV#0pL-+/Pav3/0Y!MgG8ӸgÞ2M6?I2<Z&_V|6,Khb[@[ "-9#ɇ#;g kzQ! n1ԷqA)TI Q61BF &ShRN}Y@;N:GK-{DA}g8%"</93yRsQ^{^\dV2~i "bݭ1\ƶ'5v% .�[ ̜#59/V@Rda`l _#ߞKE-$KBY1} T!=nbPmi)n m2$!Ic"V"> tSA@4 c.S5H~]΃*dl\G6<C$B s'߬~P5Gns%+#Vv1ȫݐ@6G_":to[˕'l'sͰE.!h St?9<lBطX?dHL{WS!eWÍeQßƾE}rWD ņ0 Ѫ DŽU߂?=<Ky3^)!_1؏,t϶!Ʉ žޠj}-;?"<46_LDl*%a+?k Bc~5Ԧ< z6<( V/9˨M`xl䳡G&XUsl‚n}V- K?/8naf>2C$jjShdz#5>,IK;B= v,b !@|X pþ A9F )Nz 6o :䯣:rxGu=t'ɸ� :_StN ΂Q}y$Jg#=~QX6botvʔr&[WA}Ya+$`!4&6+@�G:sc!4lxDZx >, /jB)<Α0N?!v0Q\!l~�pRI=SPV*&sإ^.!dBߘζfKŪv#;m E3atv(\}>&D}%(hS&: ߢ)=K,jq���IDATf42[KI8E/?mk7!'o1c"_\h艶?Nţ%7*@ZDj圫KƝ�@_+B?~#Udn.a ^ͯ>ε jO�YODINų.;S:@L%挺ByX 9؁d!n L%vRϽa 9Ngt&'vEAP Mkp ՙ#$mDHZ: B„UX{0-L@ek!щ%2X'< d @c m/AvQcXh/ f]ؐJ8:י>q6f%.5X6d#F2~7[H!_S —R2T*`C!u=bC?DSߓf !a rŏ<#S/D@rץ/NLߟ<Etv!� Sp�>H.RLa)yJ !q^D�bB)4Bb3hb|9 ik+p!#`�!1+cd !4LKDl$(LWg]C<<&9U\/e9ĩےJ&N"*;!J$ZMҳLű]7sr`F!)O(:HX%wv!!Nؐ (9;b QJ\+G8ΗrP `ǷI* t@$umNX2rm*SA$5 `!!*d44bER\:}a@BH8od j#I}|{{p4B #)u4DM}̳gr2D+(9k)91GK`#Dψ'9GQeȁ-�yrئ !;G$@ Ki0#}oP:pL_�E.S_†.TQx(9Bt$:x<8O"MP1 tfBT$8a9ڑ`Hps:upNj9G 8Ǡ BQd g1�T JPLDHl$*@򆐐۲-۲-?\DGmr\,mrUUU9 sι3fr(@"J�FB [2Hȣh|` Sǟ\'_.PT ] zn)jX@Hcf9}7A' Dc]ڸc&j:*HMѼ"45'*ȉ6e!-yB4budzdjԱ(L /Kcr ة͞h B)gF@ABe )4lf+SbsR ī@.FR*IE%}=sBHl@I`NnXˀO!d# P !` D$k~7/Q̾t*HfA|�2Tp*#V!E}y!6O<gc<ecwP! 99D`b!"m ,U;~h!xMbj 63$09F,J- ΑU2+9\CXRJ)Z;dOas"Y!i,l&Jʨ rlBvv!#I!!#,�]vB !aa9B(<٬(PJNH0X$hre| ЗŠ_aT0!->, "9�9BĭBɳ)#;̹ JH1QH0:HF 8GF '#v,c&v,gq<Hʩg;̄!M(9GuB>9`HP/TܤTq#) `SHsd΁ L3A䢅M(br\1"AUh[;K" ps:sQIE+&%)Y)9JWvy0d#5Aؠ̀¿o&ݖmٖmq(0yzQkw f!"{Ҥ*y 6S(];_ sRAPruC,f`C2+u`iY&ɣr'5@PtL20ec$h,26Sz㋎BįC"[ ~>Q9i`EDٓc%`#D�z?""$jw2PJ{DƄXiey j3g6"hk{1X6nUr 27p$\jJe.gQ< Bl? rNȖm&\yvi}J&A'8E>md y�ЗVxB5GLc|5,Xƀ)ð8bKl@S (ɩ, DSb:ӟ1á !oDS*~6Ө:w�#2D%4@Kf9do5i EBݛb!&AFCv<s1BM\Dd&b_QzV6l.R_ܞD򀊳Eo!bݕ ,l:$Eb#0ղh2) @e 1+kʣ{|DTȍ,b4"$ѵL@Ltv<st~JOO`3O#A%9B_M}ɹf29u>BjB@#JUdO`{CCwtu0>qH|%ΚH\DO!Fwz a9S}V :GM}Hsc@V^/èߵgԗ/CkaH9lgH0>-TC-:Jq0T\lDCEm wt@RQE$'b)e�GH߰yk3T9\dğsrFv2M*{((�Ҹ3PӞiV:G EW1W DFMznB0Sw60_$M5e3rֶl˶lˏf!N*TUUuUՈ{4rZ,r^{B򋈽5Ob.7=꼜bǾ#?;Ta_rH) [I;`NaLdnU>6*Ԧ2__ibUC2T4 "op>).zXߜ *vhq;a5y+K[b"X@U]$"�+c�6,/l6M5PٽN÷o1nئ ـbŕQ_)+Y߳?Oʧjy0NyW9fXhYm7xMs/'JBYɪv4–NC6\x�(o)4 Kŝ=5MAY't?02:lPˢI ee&mEZI>F 9DDDPk %QDExǵp٢rPGd 9peroZ< n&LQ0 'Uʧ( HkBФLkBJeeBL>hiϕMCpVKCJJ6Q TʍiV&9B z}@]nN # K :f9|_ZS?'Zxg!lL Ҫ Pv(8`"!TwPȁ",Q!TpjF4v=[4^E>NzCܕacQՋ2E.S0&t>3kmY@rYg>lڶXL$ 7>EFfkf gg2Śwq"46Kq. 1~)bT'<[?06mٖmٖBZ1\ݗs5M\rw>WU�<ڀR:Ĵv|1vщ*n6 k!0?np?�2goSv5M6(6 gڲ<j̞7daxW/L uzQd7[/J1ݰjS+}yj_O,T8owZя-lس4WrIq=L(e1Ye 8QpqCi/4ʒ72l:&;x?qIpv6N[VAE(ؿV&$e dR&rf:"dBgj3&8SNy0z?$ F>[4 l,qOO*`u~۠pR]{6!4j4!ĖC !!.!Mf:,gT$o}"&[ T`j4L}Hvsl&wB=m= ip@4b("Bdc>r?L}|WS۽K2�:n ɜ#Ժ_sr핢ˎ 8fB,b;G!A_6M`!$m6|y4jږmٖmT > �mۮVb\.׫uۊ}9i.Bvʈ�vj,~? �wJ<@b;2H{|BRzy}|kޖ H[sowTͥwN>IPHԛ )m;:#xeR&FbNd2BɇhB8^fbZ_n7hE?v/&D txf%B5n%rd +y,L\f%,BCOXU)$W:!E 'CQ:ceAR;)ٙ3ㄡ"tm4!"BY!(a ņQ_ \jSflaAep'⯉mߟ`,^%o)NyHfN#enH[F4A < L�D!KGlgLr LFß"B !D)f!P('gg $< gD$[XЈp!l 9=Y!7( A!S ñH dˡhH⁒ߕH &zηTrHK9U(u ! #I ԗj|8S:?"܂+ΏuV- S#BJ[*!`!0K C:?HBBmЩGH fL#56jA)'4w#BH06�Q~c~-1 J < Q"D'мI_cSIq 9GHT2,=,<a}¹6EΟ F/#AN}O':^/J?ЀO8G/O/kM>vM)Rf7 BSG#ץطl.2NVP\3 r8"ɖs!s!s `J"kS$RAGs.8o}wFl2D%b$RL"Ҍ|ڟ{[e[G'ߒo|G\\}jX.j[પv gmQ1\Ar0)őrnVI͘Ԇy}#yʐb~V깘U_> G* (ϼqj>0Iƒ b:KU'"11j/Nl ĜF b%iE +.s N!9BR`"n)  8`CKC3XeIAN45sIK!$?}IUfןp`h5i]E;Sk0;hR'ʡy5c ! li.N#,)&Z8&R`LpYP%8nA BR"$Box  4%'"$ Bd.P#E�@!#zSG�#*s/$BvJԇQ_%>9tvB ;G(gg L: Z$emX.8C "$Bp!SLAH#D9RK nh r r$19!I1 OP!$\'SK!- r8)*N:;lK ƩiffVVqXPq2R$3Y/Y:?G`(|EKT Ne! ³"k0tv&Hp d $Bp!xA !sE%|eHrUFR\3#xKB`l� g$dH<:ܿ c+p*W<}p.y sq#1Fcy|4& | Y  ԇs^t^yܜ쎤>L}"LGt~F}aR%29ZAGOE;BE=(txI|Է'"A(|I};ǁHAּP-x *,š^0DrZ592Q)J-1]:p9SwB@-۲-.D@@-uo[جVյs#q6f[BFwEI 8O糮Gw㌗~G:  򕛘Q@`0A_+buR0XDVfR7X$1IHnH*qe7)|QN $ �1EvxYsf�M5 \B�X�V2KgL`*Joձ2fכhh6mFqA,14HP{~d g+7B&X_@,ی, 7 `�)XF0b&Z/[ !*E"!4ճB~6̪geĐDHoap�xrangUջ<[ Ӑ!٩ AP@nayG1/ vBQC $!>C! m9åOFk{^!SH0M}bz)d|8eeoGP7PO" g'AL"L{4nn9ʘؙ=unC ORY*T%@!BF"z5əǧĘ u>Pq! B秀DdžDFGcrdLg.[R$`#:_V>>gY:F|5emg'�oM`IO!<CDb"L]B_�m !h!D9GaAnQo� W'KR$՛ bwx8*xOmΑ#:daP~@6�".Hn1H`K+:VM.< :|B1=t>d׽lBh'4 PR >;4FNiTfL P@f!}Z9;JC;8\gj*BEH"A@ 걯[�r{ Muc G2W{t:Lp„avvQj˥! ¿X1v DH>BFu8+goB|q$+0XgZgd']~88|_zþ8�j[^jjs%"t[Ŗ8cgagW/W9&URg͑}"`B-C\HL MMn*sl#_-}$tc 0aȅqKn?om?>",īYX  2+&PDt:Ž`?=ҕY]㓇{-YMaDGn~ i!+$B4ȁ@HژAI} %܊=$L6!IBviȍ}qЦR r` a_d$Gqta=q^{b7r�!|e~<m>^?}~A- ]YC9JymJ<fˀm lVrl*I J66>LK1�4XgRͱ1R0*ts5%oVa5<tl"aȠ汄 ! „ddNQtK1Q_7 d1CHxĆHJ!! 09Ԡ198TY:&"Rr(#d!V"E8CPiX|$l39�TN=.P꣛k\ f&39o(yB o[k(7g9\ȥ u~Nf:_H r+` xIؐƒO'9Bp�!0KŔ9Oi{sB6"Cj!bL6 ]N!:)Pɵ(jk01H2q8Wwsx3 M#@}[ C9GzC^ 3<]S<; ! ~r-9H9c/|θmD}0D}bjhlA;lr 5BEQK ! 6GNk^y4>ʈP! fEH"5 2WAC=2c6A"[ۗ lE*<㉐):K-2^Ђla<| t 4&@ףs5ҙE%ovhVuz�**"C;?s|KQٱ�b� OA|9d]ۧ'g]rtsڛ_kLFw{=_wOueS\᭯\~_{~ѷ~|:Rq\.^߰\|wQHyOo^ �> \Onͼg飷(/J1qr1Se[e[\;9\OϺ۲-۲-?rp)&dݬ1|jK\e[]S:.ڻna9WE\4b*� :Y[UhARdSM '줲ҍ-;[4g+1.i /zYþUl#[;ٚ?ӇS]͚0A&ڌyb[XR[@PcY rUoU~kݯ~އK&8\6L4_l6HHM:,`m|~v@dl)pBZLP�jjLd#9"?/zqtٗƗƿ{_7D�?pGwл[ţx7(DS C!( VȲàsĠ̩@HN:A i (=^� 9&Mշ.?YfrЦ+"�he[m9![ kQ34@Hڴ j3ZcP)_|M{÷Oϊl`!97rH{ l5uEWLN *M4drn%&֎vNG"l8;t<tvc&Ύ#R)zUMB ֖FX4 erܜd)44ù8 LM \s/_2?;!+ Ƴ-o"y# ʞ%֯9r%6u̚ )F.OC2yB$h0Q8WK"Yp-8F{P矇2^9wRE=Tȧ ؃w|9ߝur/T;'9;MZj~̄n*&rC$-zā 0D}`ݖmٖsFm `�wvUw&`""6y6ŚL@9{P)~Eyv#YE �,ν?C8ԥ׈)(Gğ9ؤPfH,2ax?axQs"huG.~'j;A]h^Gf0^lxIla:}2Rj^}FnJE|~}4Y*?o}w?V+Kh&ˬp҄#h!mBqy3C8z?ΞA! .yt0)n {C*&2ʃ|5"@TT C?-봞sğoMY?L{o¥ʫ/~0Ww}?;wN4d#BbpeƆ!v� xi*B6B@Bb8S26O (,M  y#rC6 -BXh! H!�MB>!8ѼrHmT@R!d"$x cB $B`6P*b&6ˡ,a9rS5%y jsv*hgvL_BIK0`+Pf9|̓4\ 3#B$9^y|*O I!"%PdKI*c9BH!D:<!)1B t>o#ͨ,>B"iHPjYe| hIŠ3U`SQ_v*(P 9S~!81ճ4IH;G(9,,*F0$@@_t `VA ā<`oE:H Ed T0ER&H`L(9G |9`K:_tyধ8IqHo�r(p߳�r` `3s  -l"D K9r E^:?yk /Z[EcQs1!${yd ΏL Cym瘚W|!|�JS&``T3͓!A޶l˶lˏ\z, iez"lV9vi?sy@rvFgL:_8 iĹX7Br2:4wCwM�\ 炃j#y 6^)4r=4|b϶\ԤhH<_GYC\E9?AslquPR桑Q:S&QD莅L1 Wg7JUŗ5i29l>F+Vs*ng`t ! ApGH-%*ƒJei>ّ�o`;!<r"Â2R-B)Qcy28ȌFS'|=[Jx坿?sX^z/o|iW <!l#`v =}x \q!b"D><"AHP$7'_xMg2ӟ1L:AD V PϨN IBpBh!.ٛ &yG!$ ,7N&"3FD%_FOj10J#e! gg;G&99"sk2rт :J=c�v HGvCYBSǴHg3->r�H7uu81?puh)LI;{~`# | 楗8`Q"DrQȺ6q*eԿ34Bs b5q=>"*Iar3`sϧZGu~NZW=1+#4+ #AJ$&&7H,:lM}:~N-,W�+BH5"hC|!5lH"MF}�WxL*?,*F0ʔOYGaќR cmHVǖ�j|F7%̧K˃AQ@:H9G49HFt1x/xi9>KgNpΑ &%$CI ̣?;zA!c�e�GH߰ !0XV7Z,Q@lA$1O44@Hb_.ف|GUic+߃`*Wc,^+x-xMu�+ }0!ze[e[~, ҂�UUU yrj�'U r�۹,k0�K'"y B ]TܘfXc<PL/Fvt^ 1)g&\uU$axZ0iĨy`~f<T\*tx{ B毼/98l>g։}r@ qZ& y<(Bnqe"sv ̀3}1t8!XW&qeI9eILS, Q.cuBPWi^_i)uxe~f拯#fiT49جQa|pe$vB6CHJQ8&)Ø302|g${pWBd&Xf0,uF1 %�n"BDXz G_' ΎO%_sWr "E)1�Dx2!Zr(ؠ/ͬ&7\IE'2JL+•DHkPxn� Y_|޺cyCA+9G"u"@`rn]yRxmZ6(B)壹:??WS QE`#I $62f �L_QOO<A%&OiPa3m%`!lsͻ2YDdP9!5B%sL3E Uݱz맧Ft$9"0 T|@}H6�׌Dsd&l!)rT#]А0F*Nb�H#BHX$h8GJ1zEвJ%O귑DG!K#dG/%$u @R:_DRN�-\ rQl 1' *yϊdE ԧ8Rs 4`|>CTX$xX%j3,8G-l62/Js�yL%I !%÷e[e[~< Diַ�꺞U/NNNiڶ)gm3(FdDAAcZtvnbe[I#ћo]ſʏʒm*G? /\/_zٿٳlmٖmٖm47w_*+Gwfڪmٖmٖmٖmٖmٖmٖmٖ0蜫뺮몪h^,z9L"Px`'eQBjao<sCop?\5{rAJTƽ QԸ!36|'F'Ұ]ti[o5iڴcϏ'b'b@`{6_QW֗Ea_q?ۡaH: Gq\a -AD&ѫt<y_. 1ג_iT;G6o.&[k{qO&kmw?￾Po@᯾_Ze$Jy0X(afG"B@}l{._+._J{F|q@ړ-Rllâ{®&9ӅyLG#εp+"b;{t4FVmFk !v/z8?@~D�П@s,N\pgw;nQۯe[rTm;;GDgWVǃDp�Wg e|.z4'~j+Wg&D!ˆWC~cZ(3yC']҄E7>4p7 PόɃb!&I&[JBHY7&0Ϧ >_:7*6P Z;RHPR�+o*C6w'Ƙ,6sC2F$w4>o6DP4>㓨Ϣ </MeްMCQr  F~G@EE 0<Y$nn^s @ r,Dm/F{~4jh4֦"$i o[e[G"@x,G7 @m۶].='GY5ϻ{We9(R$U3&bRw Z?pdGp'`Ij`ߡO]wOd dN@/EŹvgc<?τqTѼb~" b~3K瑸Yx~:3B@ "B ^1LZ]M76a7>1€· >!/d `oPp 3!1> & W|4knuu7GH@љ`fпy{ܟ2BdnRPyl8p\my�={wN�BCes{6B&7ol+ *hg6{rv&A?s=' DO $ꋳBH!"]!`"RʃR"[ <Zor"&y <AHr o6 gO \ g]HrH$9 7Y I /Tq Rq9UC\q-!Wq c1spN&9`fRN8L@zc繗]ypg)%CI+^!0{u:_Q$`I_9BrF ΞJ<0b5J?WqLp"MH0r(B0Cei@4߭\\<m_-NJr g7!QDA0m9kI}0^yX*(F} /Uڎȣs@H9湂F¸rJ 4WCHqy5#T0TliSqф 'u>3-z\kF>L}"LQ_4IQ rŸDL8A#$UK!$wJR=?Z&F+ C65a"AAya) 1$+jl9u\#ՙ’OQ@O C DP@i6^u4}θ~[e[凯 �TUՑ�]U�Zۦih"g9 ڏS!AJH#t9Vy  'd3[VXV\6jg暾3ny! 6A"?O@EZWZƸ)6 bTwW7.ڥxŹbU5?kߏemǍEuZBRU L hQBc"Mu:<];�6G?8٫n<m Ocv?zkO'{rs;Ͽ-g4ǛHe IC=gA^no8i~|~!dـJlk>x!|y'$t2@,Rlh|8J1Fs&+7oH_SJҋb5qG*b'ra36�}y^/jz*ؠ|m^սu›~.(ʵ&r]]^"�\dˣ^>;JHO墵 ̜SH2!~ }fMDRSy#ծp!c" Y?oa?k,_{fX2Ɍ3M3P�_=(pEa2NM^dF(, .rFed0P&3?+)|\AqtHI\̐k~4>>4ppu>(MήY\~ɦ(-8;{uGh9*L蓋u,OI9ae-?vuW9^qG@Hϐ $@ ]ꀺw x�_u �D[ K|z\6UUu'@!C? /qbGg֌IݿL.S‚֛E|U^i[0;,{ M52sHW-, �Re]\G!a*t0Kz\,{cۛ2 ;a=*(^_~ݧO^ Y/_{]tU˦$o&@X?% @n zl c@w�[?  X}drgb b�"!ٲM!qZΜ3q7W~xav-iڣ_-Oڮ2}w郝=oŗQS֯B`z/}<\a#_׫Zؾ_͗n/6"2Co  Å(4|(4+Fͅk9q6XdSYHT$lh\`@HoFvH?#KIpÑ - !&ԗPF%2()B0GHAo)�0gL`rH阈)V#6H!h dB�rWH QBȐC�`J%Ѐw4R9Jvo~~7S+9/|mBex \ ωFZȳ~T�6B!S_AClΌoYxD; /A` !kQL !aQ&k΋n~/qp7V$5!?H)j8] ?sZ\G~?r0Q s@P_@qLۯfӠ>0X>-R 졜Ʈ)!Gbt?Y0ӦA.#App$ȵ_!L*NPa4˩/ &Bh$EVnl?-c#{#oa B]QRY#FJߤ'p) Rt`GlT1 L$[)GB#A;2{Q,le!DGssTb8; W?�HL.؈1c&-y <x\}3T^ޓb'v3=320V:/n<(>D ?ecKnjՎs|O=� 8 j[@m۶u{�ad��:t ڦKihoowgwgV;M!VU�Q̓^BDDדfքΎ'@A-y"۲-xyˇ{_<mop2/ھm+GC糿�p_:" L?Տi~<?{>*{X~zKϺ۲-۲-?Mqt[_<8,^wۖmO]gw^|֋{oW}nT�ݖmٖmٖma(@A[wyp5BPH=AvS/ϰJTp|W|yfW{.⾛D�;}{8Z(%_ %�>>[\UkahN''!ճyU+M:*t[tQMp@kHH+1ZSaeWZi&uXaQg3,K|aZX W>-*v'@]/!Vk"[XٯKK"T/{qT;a[7RF h~@H.-O]of+ �Qw |/^ n= 䲯96j�l\k @+. IX;qBbmoY'"c?v cS6W�mknByЁh"ZN6lP2`g1\qЗ+C'qAh0�pyھ~=|tkq*,JXpp{ !hx!C,& "BqHp3/<{ kޓ5r ě3`B{Prc!`�IVS]2 ]m?k=CP# <.c(wtH m!�`;;="_kaC gj(dXZ-!CҫBH ~qqa!3$#F#BKrsCQ(A[_폁В ̀Ͷ*mLS(tR(2L0W Ko[Ab{#"]ؐ ("Dr? 4PйtD&i`jW?I`|L`l-"u>IO$[FSvLPÞ�%UB4 N J [$ 7e_`4y6wo{KG7i;Qtv frX\ AH[]3mR;) }@]:Ɓ>H51ϞEB>q꓃\i4 yPl ;p`sLG=vs{U7:x }b0 Ptѿ @E e'P_0!> l/S D}&F]R PtZ> /!F E/43$B8߄zǟ f)DJ5a d`I8(_3QLq"zl\)x8$|DH>#&t1>Sgt vkaZgb s8m˧<3} uhz3/&g[6L�׭oª]-ǧ˧_v<ْ|.P:#[jz4M=9fmۦiҹ̉.,$ڂDG5i6!Io_DV-~^x eAĄE Je]<}KD<&GYgcI9; & !#CN>Ġe| !1Qw.KS= �oί-=ṗjqS-t)t><<!D=D"(h&.i"sϵ㧐H"yr63,.'(q{')!MH9Ad&?y+}}X ~| oBH1ѕґ?�2* [^mDxᵑ ןB@H r[VVXΰŀ2>e9D46o`K6_5*6�_i!1|&|-6<�wvj!</LH !P/6�ڄ4l;G[cCѿԗ|*,tKX;MNXQd!ҹ|R0Hl`#9 �Q,~-BTtĿ7+G|_$PP[{j$6�<9;L[F*!BҐ!l20GHH1;#8;u*{<R!E ~V"YG1ZҨ**Wo.>Ϻo&FdTdC`O|ZQW'wvKCk�9O1Bʑ`9 )U‚G0AR28)E:G#,\COG &H`L(9G |9`8+zDo "~HfαD}y3ɩ1屶 |R:G\>M:)IsQssqV/ &3P$?CWv)Gt>J&+jßZN D�Ơ6,lZwD�)`h83۲-۲-.�ȵTѭ�mGG`ܪk~=iryzr\,Atu=#mi`=y@pN,'AJmd{FbL 쵽lu^t\#R1qɲxIq_:/p.{.ejokбTu5ĢLмAsra/܈*:T+72Lt:dBtC ~7߹m覣s }@.4&k{sfoRՀG !H&Ž#~#qzrX 951 }_�[R,ƃsr-X9\<rɣ>"W!v~E!Σ <$)m^Es,Cb!}ֵ;:3ኣiR,Oa$, DS_DH 6}X,r̓Yd4�)R|B -c`$G "Dk aHB%Č#}@}T!$`rHBVd?tvYD@&c/2cJ{˼&?_ 2-8"5g'fYJt-D2&Ͷge*.B]:˧`ܽ86b I,é[ro}J;|՗ A^ umT CHrv c$"3${|DTȣP09Q|>M̍W b&|Ola Y f[$Fw`!$irSI_&NmÙ7&"YG FB\Bsb0s K:j+39bd)LȝD"rUO|FbkCIIacpaTN}"A+Ξ H9hH8 2̜p$z fC b{`4š"GvN;#tj�1] ·ʺ D k}Gr~HFH o؄" u~ =we1H"3xO:Mj;,M*j#Dh}NLW+K3 $`_/!%6koDgr*gI0E,5SZ*xG^;a'mSmٖmٖs�=` �6m8pfZsZY_r~^VmE"wsq^sI$+})08Ҍ@'=,L%ش={A/ϦALlm/(͜#KkԂI#FR-|JRd3ܐL#n\b.6bC)(C/!/V_Y{ ;ŻG�,FRAy$*H2ZB`z ŕl^% 2!tX)g@WO "Lbb].צvz|ijb0Q_7\I{Q#AMlS3XF4݉2ԙ K'Qe2!4&6쒻d]FIl #@{ȼm qCUUBFqk2@ CaCI&w,@Q;P1KWٕ(\\d@J @6LLfq)Z162رe 9IJ"ˡ>#P!&f$4q^&&;Bg `;s.;W �=_erU!\F@ʦ`9Ɛ70@Yd>ӳ\ ɣD@gn3^sTPC+$id&22f1 a iBX%P6Bؠ/Q!9~rt8}N6BDY?1]*s4#`J;N6Mtz.GcW| z%T3`vYC)(a92DFH9J0r]G8 t0h,\z p@@ 2ZQFƇNhQ~p`P(d HТ KԧH#)F}'.sd(6 byCb8d "l�NXt2W#!JXX{Dga%%t$h 1g8yTe rA46DA $57u t_K`n7p?1 <4$n˶l˶\L9h䐪xztнʕW߸vbi}aUUUU;爨Y7t8]iu]Ubs.b*Ss0X@͘K27RU2S@ﭾG;}{O'vӇm:#=7*DŽ�)&gE?LhFaDNT_�Rp+G+@PVe-7f)G\Bա,l|�p_|i;V'kbW+mĥ SxTUq>Ǻ-3aRq.)x߻x,e\ eY=y3gId|)^m/l\ا2@hPf,$mxUMiF4u?HL`߰U7vSsg7W1SE=`wަX46Wc93׃rC &Ta!k8;\Qd.(:7wʾ˳kYMu2YUCWL( dfO0>Y#2F%feBl9d:I8t' T{\-t8s$�C]Z\aIۆ$N.R't'FeJNvnA4yL%-0" loJ}n].d9;`{Gq<l=t`q%Vb"cYۄI91&gl9D `;vF6]<tSc>$Dr@Oc\@�FG mٖmٖO�8nh rHCVrz“kׯ~ͣ+O}ǷsVՙ_"}{߬V_"ٝWU&y" =#O[.KmBb{ե'饅S/m\Z~$o?o=VĖ� /jۋS}"+:�?W5dlLRܫ=E$9~; +]UbZ6 `ڮA6CX&J=b?jEN'$+v°Sͮe'I@C eAQօPg~f%|^hrr1�2T~/*th�VELh*b0ik? t!yg_z('!MKѝթEfl$ _/kٯ|,,K;k^d]kq�up Rr##d^\J'U% z\Σ$Ճy ?&pPjdS*MS<qMwHa{is8^!xOV/5)DEh8C6:7\&!q)vQ ai!D"tJ xϬ^BHFq� ް'_9t7-%4ϓTxK _'ISX"*߱7R*3#I(?b;+yi23\6Jx*PGђ i/#A#yUN\hzGoD!*�Dof.cVTmʬ؛騋0D[ Y5 _j1jX4h|] wD 9l3P%@!x膰:#ԙem[ r9n?u>h2zRؖYgf`LȉFvнKi ]N?SDO.bI}<gqFDoΆ 386kT4PΏA]&܄2䆋?'r8x0V�Zˠ=M gd8[ĦlPX/QAM.%D¯R+SجgcS˜~6 �t\e[e[>U@@Em!g݇Ǐv%]5?{΁z�l>6�@wsL3')(f쾐%/E`T@ݣwB �@BCة,<ʲXl-ɨ~DCvS(B$~MgP?(Ċy{bf璝'i<ސC1@ T!PcLQ[&U/3rN!/ 䱎6BRBù=k`Oh ,!Ȇ |7v:8Ls{`Pwg{xZiQAlp~b`=O1WW De}riSa޿ݯ=wBTkPY^!4\T&vvu ~P&8b]Pq<<+;G$$FCDH6ŞZ $4dn䩹dȾ B lȝN7/HJ!ٱ%,g[ 39!l(7%bذ?vqԗSq\{Rt]QE?nO�<;͑N@*?}_qTpgtB<Mt~)@vV:?!DW6Q]t^!r蕝!Mc%ZG*/ηD%)!ԱV1o&<yhQj?ZXnA'ExBPr1(\J'�=cokޠ>s.Rv\@V ;SW `ߝ"a(Gɜ�ǂ_;ULTp`CPRi�&G:X%ܘޛ)$~'RU'8;hrܹ).R Eu>Œ)Pbkp,Q!u>@Ik9*߿/BmFHٔLX_GE8syC9Lj AUGcTΎ=R&d>95l�v2�\㟱՗Бsŗ۲-۲-T^P#P4s4w4wvT!A^]_9|[WRuiV9"zbw>ѡ:GӬbuzr\.9ֹ<ƻbyHq." azX0:Ey_һX38/C!!%mE4rn`Sz_L CҊm`WշaE9Ϻj`RL$2DL’F$&z!  !h"%R7؅,tb?b4D~`F !!ֲt6$Acy2!ld"dBS]B#<Ɖgǎ,sdn"B&쏘!qHi?+d 7Ni 0^~a`$BbI}=@b,VD}b1 CH~?~%oKz?CHo V6 QJPB{@QvbJ t ! 2R� aw1l@BH$T˘Dd!)w!΅rj38;."r) >"r<=JȦ+ (9*.J& I$DsS&TKgJ&VӥT 5ф$+Htbgx9 5bT-!E27s7@s%@dY`P[e!PW@"ҚjAQ$`#:_V>>O:Ie0O:Y)"t5! a -Ft&ByюH_η(|W/O=I9zSQ!Cvt$w4~盿{Q'_=�/"*ɝ# ;GLIQR>q3lwʀiJЈv# D2 kFicL2q$c!#4TuFFH:h>gD+y$h|MqKZN!t17!@ZwF>;$"B`\q/2!$sa,]@BЅHA*+El|jXAB<]@\A BiO9O"L=:G  2y4 ĐO)Latl]]1S *xN: 8vݙ e[e[~�c4T#͐oc+G/<;y]!P; $p3 :** h[^5jXk=_OC ttHS|:u&`I2<%fYJJWKٜ.!aBco cEȢlm:MCyX3I-j0 k+ds,6&'Ub1cwti1s96B ,kw8[9s\pC9w�iW5 �]%l r` 7=6Ym[e0ANgT˓!ey8B29dR1PN}bkl (lٝNz)cCHa Y � a{;^٭|xN7}˓@1$  Ճ].RM<dBAͩ!!9&,g,{(a >C`8E})k0!8"@’eΎ!$eV!DI!9Bry9 @ ~My@01bI4AɡBF*d!Qs�m9X5GI2LC+6t6ę�S*Gx'6�"ʽr7'2\nw7~aTސ ! cDyoW\y{'ޙZJ] p!߰( :2`[BW*<3q !>!9B-#BH!!AҴwq%wy%s Bx*R,Αxǩ/P}?|k?~zt29 K>>xUYYZWw=ӣ0!\.($=5xvg]5[;ۥX\B3h3Z2u~D"{zY뗙EŧuQ$X R֧ G}1`g}bDXIl= hpT!X@iK9Ćw!D%S,AE Piq:6h،fl|t0h|f Y\YO -bm# jm"Qذ  viG*X) �$Ӆ# DP܂[ dZpԙjI@i &c%H!)-AW>q{S4(=~[džj8]W8 `@yr"`0 : tP B� ;? "0D ڐ?5wpll­T`ЃFR$@.8C':c7xC�X1�H ioK0�hI?X,]U4g!m rQI~:'Np[͟в/:k/t1Ƞ@͉ZXj]U ĭ,{g,$FmL{,Lں&W9[mUM'_azH\^Qp(2؉]67klBPT r{ x3߉4ld\J)S�N/nkHVxv-Wζ/iǃ=1[Pi6! P{ ΠK_$*l"`C)v&˺KҾe >2,ag2>t1<� \.yPI ߐƽ!a ; Gɚ M<k! \kb*4:B26Urc@V,y27Fܹ ')sڴorA}}ޢ+T~Bz~*+s6aFع�eT�!eu>\!i91+ N_[Ws ע@2ce},Kj*B(FAX_|OK!k7/a(`QAn*BԘ o@+y6Ӱ&EX_AΔg $gdz0oOg^f?;c)|9$P` ]BB g=v(6nzSj[!M�PJ]k+59. "`F@(xx5?3Ҽmx8j8'lyw'YĀ 2>wA :&'k5DJՙ6%Pnu]X5҃@( cWN/\8NRq9}?!1~\ JgUv}[5n>X=vCD.;c<nLOsXbڦB<C/ԯeoJy 79"13)H]ۣIA[ˏo~]ŒrE&whBv>BYs%oڀ1sF] >-e]r$sR`$T nl>Mz7]^?Pab;k[lVBac['`=! z#_ҳwDy˂R jw,Pz:prXl 6m^>06S �GNι!uRXKbxw0 S;a )4DA ԝ?B&e 6isD61*2.LX+UYMҦlזӧl|%Yk~/7Z4@soգ~>ˢƬ)JWoiՐvc_w3f#]1p%l_~�2lxYi #yc=?|SX۬YAc x,?E@b6l~1&iZ2ı ۧGnm,b`G:1q"G7x"U'fJ<J3Ϫ>mzʆc@ iD#&[_ �0xO �1VbXlaE ݥm B9`p_� +1 V<:cp(1hTY+U+fGA-1哱 A͢CUkxJ E\(EEc`Jpd$A iÉ 0=pgZe-V!EZ R5Rtر_ ^}+_mT2+V1I5A|HwUbS[5cr-)$I"D6 $Ѥ-BE<a{mvT䮅]."> =ߐ0π$B |< 9Hk0I!fOAr]X@kNsEİApr;!a}!i, K;9g]sy)IߚK> *]17dlx,u A0/!F TUQ ;5_[8QH"e6dBJۦ7OYaDbTDqhC&9xlPp4|l3=>O"]4a<p4dMR}H`-.DN0�L&f* I.Wù7)#B Dev&S=NA0i[@"$!$BcрM@@ ;ð@NX@o =uFt[٧lY"DatZH)DC8FEzOaF@6c%hnMo%6 !kCSJ\@T$6-M= [g}Z {2S;M8Z#Z\ X.߱ 줞o70m HheNJ*ZI',AșY V;O8 " Ayo‘ $3.l榜 3TSc*?eDH%B2KZ ltzĩC+`C @2c%F`.NJ bO]Kw.s~v�:/:t*u9Wu0 @f^+J)JE Nz'GDX(Vu 泰]E�4{WUcRs#hi^>0ҝ #HTWZE֖PssP v}I{Ѱ57گZ)Ӡ rn+"Qf.S# b+@x%WbPlH /ZXj2)(2xsvG-Dr 6 .$OG]Pz$H2鉠.+W;r�qWT[(S]�]Qex�ln l1̀hRd˩q\`>"AX_T$B+N6zFD^YB@A$| ~\hbQh7LԞ"4V#$q!1 ortu7B@EH *w')!X !"!.ABH$`^! Ht M%:$@$\E(!LS V.S.CH#hDr_cJ7V , %-NK#i�H=b164%#`k!$$K>VkN.{�#Ix\a!}6�'G7'1c% !@n dP AE*#O4$/P)؟ tFCAOCm!IK 룜OǸ+[.gFK$CŒ2T%(iI4H!� Bs%B %Y}@] !p _\>ꖔu!Qr)TH GaGL7R'") E8b)1!4c<4U!ԌJb+pL>LG*�p̶pD &c%r!KP∿!U?e8 K0ő(sqXX_ n S/h YIYE'(B@$@n9!*/ĒDIC|捱& S���IDATT@]n $Ewh1FHB8JKP]a?W@hJ ߐŽ n FLtGyo TiSPPi}wNo$J80tK%q9C'C @]KE( tzU!>{3LL8 Gjr.MVPE!niw~p�da dWd+ cPvizJTP ݘ&r =x5IS-7IFJ!&SٹDn/SʁIJ]PRk$3^kHK@#+ah@V׈육pǯYj{T1*2[e on*k|b^m\Hkw%!HGm❉YWFW0M_%Dr{5YAUa`!^Bؔ(>fbCZ]"lhFDxl!~J*%+ WfoIv ibN Yd쩆صs:+ @HN$EtŽLGoįE _7]Ah^` !`A!#W$! *芐\^0_ LHi +)#sa j)hbNSלB](%աZW|.HA<!&baU)@vo1@KSPB 'йt~oH5k kJ-G td4pOM҅cIJ|31бPl)N-3EHL@5'',) c9 !!$4t M#<)f![,) o6�՞ ;BLR rp̵A=$v Jև1a C8ʐd})> %'} xV05GHa"D!r4<KbBBϗؖQ˫E G%" PAL-A E8A%6xfiYt?3<ё% OXueYI=ߐ c0iI֧kPhå&�L[ B@Ok #uTD8 !1mmp}XP8j~_A~6H.HlAW[-H|6,`6bV܃ h,uĻ,Y_%=NPv~~׻n_TG\z#C"\#t]3 ӈ;CD"xJ[ds{&O><J!k4Z)mgS$`~HB0qc8\(&YWTbΈw'X'>!rlڴH=or{@!4 }6"J/OoiȯIb,)kP1jJ]i5u.z?TΔ=f"Ι#|vlWg{Av՞m!2 Z2>ef>'jjEhGcn4HeƄ_5 CWҐV|a3J-0XYp+_l S&oXrV$F4AE<wUC! 4.DCKM/%yx(`tT e}okŽFR)U!8ѧS*Gtڋvр+L amj ԏ H"$:BR3}-!R bxB [�*)a &6rWh7x*XY_4e]ILWAj|:�I5aPZ�F'ʚ - Te&W E(v@m<xc+*PK\֌!ZDXo7Ӛ/ =@!@P-/ITs:)r_, Mf ʘF1kh7\m; $X%d}yR\ۤk9V[OΙrn~t؄z6a KPjB6b&j^oM#2>]`}Yt/w֎U<!ƧA8D6iiM`#1\l/m![%&`s.fL^L? dbp`" =حa],Ub|w D�"xAKG>pGwZNA~Cpo]+MbBB_yAZx7}{hOL"iDr@ؾ)V&`Ȁ8s`0{Q6v 0%|ivFw~ q;el`XO9VH|,}@4 KNFlU4+M\q[ |l$G1܄>#zWa@#QQO>f]Nన+@lBb<"Zb)uǶuYwҧ ھ)o'ߒvL>HAHgaqn/Km%aD_օfCU !mu|Tn cl}Lw'ljh).hFaG]`={:as|OaB-unO^[vVkiJM2yjFw+YdL~&V�cÎj|F�+~Ǒrͬ Vkh:DaY| ށD9ϧ..Gz!e2Fe<DݶYy(c�Y{j0o;4uMIˬYZz ndAGnmwH>Ư1k$z>s69cnq@ `X_qX /&Q-QCPg}.<}ְj\X / @cGEuЬ*W8ڧ`2UF:e a"e6kJCCJ =T8LI鼛D}�lT``<F[[m-vz-| `q#!@<w.ݥTA_s<1>=1sCsG,2Ua6Jxjpä(|sA@# O&n4:hQ"#*$IjfZ$lwIОZqOYMj&4[&f%mI>N< d4Q^5ھFxlzGsʋ#hqs'-^ D.I7<XlS}ϣB=$WZ.l2eElD� P`k]_* !dn.+b˘t-8]` CB"e Nĕx4w"wLZno!6Iѩɐ46X_䭑(l()l?0)RSSR- [F?H4BH7iFZZl?z$BMT-bVY԰-@ !1(F6x%bw rY"Co)iqa!&sf@4åw+KTPak M8!֚H=?Ui\Z=B ;eU9+=?~&%bA)s0}ѫ#\%hXY?M.(B"u(ޖh"A 軔%b۴tJY %Ҕ)hM2d RCKw !T82#\c} d[!7@k p.d~JoYOy/`+`gRIr SE9Ve}InSwfeN+f EY_6~| *N* r٢盬/.8֤XcN�%hGD�?4crL|(r>j*I3+x9О1U"z_ỏM<{:<<QxހsY "ڎwKw.$=qܗs΃1xAt;~|='@qq.C4J-lms1."^'3r\ʻ Waڶ2i�ph#TU(udPRj}*2YdjBwZd4cԯohC.q^_vFB4,N sb% d W6I(Zj"ĂBa !,?9k U:�L H< )HxC zr7%&]Y K S6AҏCW1jĆ蒝W"T#hlHG ܼVx!rG!1\$Ē"Dz vP6Fv`C;!$Go!DPh6"Jn|&BR=Skdi,ӁM&pp$ !9~2S\Q}bl(T !sI�a}@*'"CDj$Hƹ)TɄ\C9(@7 ǎpUEk$"b�U4u:4agDcU8՗O~z_OMAvuUj %YNACCTz)%Y"TjpsyC2 WئkЕmvfTB$(v2$p !gA{zZ&y`ʌ]ITMOQ`L^Јt\uf>!),dk'GVl&p.>"GjƠ!Ѕl!Q!Y.ugZ-N|n DID&Qd GuiFa}6I"lWBL( (4h(ԌG}M(&AM8S9iKP1=> K0KI(th{tA &|o,`+mg]e}y.ihtUtF=JgKM>ƯI=d!vKP k) }Ί] dŠDH%H !$Y"!y`,53 bDPwDvj&AS4KPw)5T Q7bQta=Tu@SJA4Avp|P<}9Nwz AXQh*nw.ݥtG2=A=陡{'xdvnZr>���b9X�TP劓°F 1 :NҼl,tpnwI%XTQW0djLWzG"vZ/v^lBBj=C:pMS#ˇ H (AG�pFvjC%nyiuZ?V�GT+$j㈑GjM,UNt~׽+[^Yu' ZP^`ۂ2bl64HE:lZԝ 2ݵ �}:T#%Hp qƽm4J՚Z˷{WϷ*w r 6v|<1669Sm ZkRVϿBy1v@֬mjf+:1, gT~ʓ D F)؁C{ pk smm o_:|IH$Y%Dץ`#qi=qWċcDt{ MNY՝RuZƚ:XW7.un] Hb#fe:B?h>; #OͿTqo9<4<Z7z-Unlx WZB\ ;2T4 Ŝ`EHu Ƨ+7nY*W~/N[[\|gz, JI<!$ʞ靵jݭj)A?un'W:l/{BjQgRhk uZw5Gu^'vs:A@A&PE[ td!JW `!IlréC@=DҼZQƦwUwo\Ơ ݠk;^OAS[]gJԚs{!VwUg nv_h߾0t:D$%!%jI-bbF;4_lS'$!B]Mqtp96$E5hdcO}bV9S:A/y/޸noz>a}`@l{eZӝ?ܱQo>X6Vn;CAV=?DylRs*Ո_uRҙUS\TRs5Tv|_ݻut :D(IA� CY7JKe X^]n{z2"aIk=' C"dd2;_TAl n\n. KZrC!jq c𕲤,A@lPI' F+C#p9\j @@w~kݻrnsaU* t/@4fla}2h12Qn#P>Tuvka3S,$6@!ܣZs'f#J)YJ jvY|H@&IlXn :LLW 7~+^ CA@I0@^!$+5gb66Q)Wrq]po V{kcdSER8`l汾<GR8}'< !#呉J["^ A_[-$B6 )jy DB2VJ>9W*UTf2绱6X]yؠ.!!҉YD�C#J%斘2!ǻ]cuZh<+0L5sDjIiN$S-p̵d Y iJraTإyJI?3݌5b\~^Q1~ox[g:T�%C ?<cSOTElKH%-q;nȡZ �߫ǞdKD.?V9\@.DA6c'&xx}Z 8񑱨 p]1 4sK%u=pqqf<> / j>XjIK|ɮ-'`pį/޵AϬ֢ك%ImZqM9jd(HP0w `_n[)0m%�T~ߞ}xOlHN_k_Y'ZP_"H"VjOplrVmk+S~olWd\SLڇy�sZsnmF;4h:zӾ}_o}MQo?=<6ï.z}'_==\uL3ݸ_::1B  `蟟`zjUPJo^>꺱ג[ YG̊ x"2xf;w72B7WoÕS/S1`D}VvG^?;|׆ܿɽ7ྗհo@{#;YYֿ>Ɨ O]� �?<f^nlV헗j`�™_<^azERV>&)xzr~_qsԴW:/}{7a\X@\s0Z,.3,;q}fu$sg7^.̽VqIJLOW}lbmcזWε^aycӗk]ʤlt9xGEW:gX=FR-lNq�w鱴\/vļxv'w2ek|mzOs #{'}n𽣳R9ovxz*2G윜@gX};KƦ*>=#Ec4o+ 3T M3PWh)ÉG}dtz+pXvT'vX^so QL=?D�Tkvi4 q ӯ;{plnt[;r#+7μ27}\t33 eLvv͗n an_=9yu M#; a}ep\-gZo^P�hgnZ[g )+#;npR[k<.ubIɐCv<LϾz||%84Z:h<..^v`}-H�04d͑s|J~[]K�Jt-Liy{BO\)x`*&gs+΍+B |lV/ŕs7.B04V{hxx, /ټ1őec}sv7+;.iB3M~:p��TuzG}xŠ욀BzG'c6YSB:Lpjuy qXZwvjҭ2hrXKCSp 4*�X/\hj )IC_EeS)wYdB�SZ NLht ֗D˚lP@Qau|ʀݘ]Z eZv:xg^ά\0:Tx=.xTA C4(0ƬdSVO`>E|-aQfNs@9%.�r23 E֗ӻE1__ݬDPV)ؼ2_$m\ŻJzwL[툻[Q-3 �0�݊, .�8. D 8sFCLMW޳ojzvB�E嗮7_{5Sa-#"3D"4&-Ť 9C"\p.]שիfuc, !<\ B%;֞7^a B8~Pw{w~<KųKȼ�,jIKiLgl[M+dIT3|Ia3Rn~+y|80~䯵|O<:sswo{{?.l* @O]"L ~d?Q̀ id?>Wo}On:[Z&"Fy *WXvTܹjI`؊0F n=^Gܓ7ΆSF>2dҎݍ{_}aOJ)ĘaX+HkluJm#еTbZ�}rC0'#3>$lёGGn}?q͖srP.6ut,WpE.$g| ~-9iv%j3Ӡ'v=C/�09S};Ȏ _]�ɞ_*r%A YƕdžJI\9?r{��fHSa}(D)+_j|")1_; VUΡ{FyK? DFӓjĂi~v=R,cK\u IeD{#׼O?&[b'Wζ. ;ih!xyZ{]n)7{cz8TTDDS-Nk-7fW&ꛙ:LM{`,~m?d^I�L?6Rs㓇}7_hJ*r,}>SӲ?@FGFpwzg}lG~Ґȇ[x%6atʦ!�G=|rTDHzuܛkTRz͈-P3>=`xe spo߾tjC Bq�juwOWS.~uUĞuP9?9cVOL;2Wn:V�Gx)"{z�`x|=B?Zj>:(j'JPaKm+PBW`f\R?:kok+W/lְ ߡ 㝠fNBB2�RIKl˄s<xbtfڱwn.�|�({FBg)P%}GGynosvWWz` im%ޡ":Icws|S뽮OMԐ. {!`lHsx:2 }CϮ߾ցH'@wqį%J%'\b`h�NR0gѝg\Xd!dR# E$!blb 1 yfv ax2<Zo^tJ Y"^!+沝v P1T_9.'lr~NXh E 982Vo^nuQHɪƏ!֎ʌxʲ)uj=0|ĴQ ڊ|ؔC5PpNljV%(�㊊C/��,f@�k7At/G~�<#CBVĶ" Ĭߴ@`j2sBOr4Q,\&_(HŔ?""->|)EmL�(`BBBaMJ398x~:\ 2 7fevGرv WCe�.a7J!B Te<L BtXz09ΙG-q�.Ka("‘BGRL7iR~0 Ѭ.$UЋSm@% twp3j͖2v %97s~ozóʁc#~W3lAaa|7/vMRžܵs@rsJ@P H߯xThSȢ|Ss|+ ?.r{lTf˗<>`<_^@νO=ӛn))ifWmo\Y_Bh+D$lܶߍL== jM#?@JSr<x|;7t[GF}ln׾9usRXPr�"e,k0|3't9 cxO~\;MDc ԽN)=O997o2 BR)LT\n%&7v[k6.CŶ"D.7+vpq)*uHc&8O:+5l6˄R>̱ǿ7o^>8^EơQOͻ2tz[pmQa-ЦSRϾzh_7/ݒO VF?jB{!FebG06Uy;6{汤J9#uڶo$VL,yhښF8:Y~ق};'>*idw~/ntZFMQ3Ju@OMmݟsoJ Y>1+K L$pzz`/rչɹ}͗u&1'LG]3z~(PuOͼKjF3V t15uH<L1;.tkm oN8plt *\czGō -ycT#D$+U}c[7ʪ5 z}9ԑR7'ݓEұ&reRGUwO<8y^ꇶaj[dn9plt$:*Ugߑ慷W-o1�2`*6k#`cB7KGNN,\=?ד17<9LGF*ã7nt2 X>}B Z{%zÁdGM8^,7_Uc-(d&}۩(, @p.pik<Q=μr}ڭ`V); ΅cȈf4;+BW&Im7aocK f n0̎[ĕ\@ǹ 82D,bA{0[F*36盇 ;2 �8$2-2 (|MLwq$�t}@dqA&0l@DF6g)KIf hevϢ3vE|Bhm**qEyhrrEǺ�9EJ׸i5o#Dj"JЂ=z-0AO0A .>wo!DJ:4D*56Pٱ-G% ?9|al5 LHP}F&Pr<dT\>)ȳoS?d}OoD!ORzttSߐ?0[[{ԣ~g'Ľ+8҃-VhRɎ xC6_<6|N :hG )6.DAyiB_&| @W}N�$B@CHs !Gwm5|w>S3ٻCrjYsX(1_:#A5DdOqKBWR~{o8;.;i)S�RuU}S[J*~3sE!B4]BZ8C[{$+ivW3{h!.섮D碅ٹ/?_˷u<F<5rIt_hlLt51TsϝD%5K]GU^.MƯzI֗QOU>l6ǟ=xψ++j)H�{S-@feJ2֜oP*- DQZ} ug_nݸNX9~(@-zsrW fܧG'˒OvC~fW/�\8 ̮3+ ivq h 𦣿!՛?n J>`35ynfk.4#TH5%�}#9>-D%OUx~Gf{S<16�IF '7 T*[%]}"17+/ �cNlvNMVkM8EdL 5B 'ǎzWNᓏMez_ -NOMIWRYX fMG+>:ܲ#MMUrCspqzҝ`doɅå{诤Z=tDE03 ^C!_Hs 7ʡ{Ʒ45[t9(ůi ڶN&}G$_vڹw(&bH=L[ JwnF]sCci&O5I%W):6JT Ž jaW C�� @e6m a]t\R.U| ߏ=wwOW|eaFKpV U*u9c 3Ɓ ` �!�.0vKw.)Grt  ?'j�2!@A"/Wqe.A}o}mƕ�ǂ}G|l?>yu !xt 븥Ru�" #\w<t:No0B1nT MI]I�1 ;.e�`ҝXz_"@ _T7yՊQ�Qǩ`mRy NqVw9-TR.3:dP?:Ɓ"P"m6 :tq&ʬsu6E$@ƥ}1H77.4s�#|P:GEC/w~q0(#| !鰎>3?=wh>hiOG 2!ɬ T 8ʹL>P܉aCZ O>-PzάG%m)II1'e}VJiCQ˛9GG~nGtw<%_5c{v̥'F>{C.NuB >$Zs?xADݧTxgrn߹tgV[nH:郏@$9O'=!dȳ3O~tSL6Le0|ǒzzjhfO=э5aTH6%BvF TFg<8j!.1*7;r?Smz>'G؎z~5ٟ"%Մ!A.ORӯJTh4|G}wp}%+q&)F|z!ٴsOgYOA)vb,UL8hQ"I,0<VyKj zI6zv &U5H�LH|?2.TjZr:LPbEHSD{|lF7 a2<z߸07@h˫Y\ubjԑF'>= _( ސpqGRo|aƲV4,t q!<>V*'x@M|Gk-t'.��`rv5bLbP)"U ݌ ۨ[L;+#\@[ R<>{tq=4u{zDu *\nAIalmf7vEԧ&`*"1lj _KY{N$5pduˮ[.)!:zN |1|;44xou]C�0L0 DL }?ȣ ]KwI&)Q r@0@(A^BQBQrXJ@x^[s}ѽ><O}s #bnyJr-9 9r!yL$.< ^ c0Y9cb&ȣԜH*3ې^,-bxtpڑk _Hw_ӋҨd]TifӘWNϙԥ^f7z"Hvm>oR qcKʕmh�cgv1!Fu8@tUiQ56vS3t]/w߉#?Ruwa5ή W3͘]<;Cv?GUnA%hrNe>Os1Eۛ2 !x�i+{)5*;m,4J/)vyksM <ɹ=f+`W yDӿod| M> .Mm$Dp �� vϯ?K+B)B",ƾcC}rn;YML>ɝ1Xzpi]({FyT'.iqTBMU'2tqcへrug_ۑd¯ B]+NF[ֺl2PcMeb3{[b~pZgq=  EW杦e:1Zo"V!DKP;w7yd) 9'U9\ȀXYnd<&HT>IE+3Y$O9ˤmi 6KNmy5ޣ#h]ɔCG<Zsx(@#(dTb<T?1M}'2,عym%i׾'Tq0c,PS1e=~_p*k{wַ%#WRI7ƧÅVNy mKɌG)=2*[ hu2�ȝKUF's `rSv37?_Id6:FE8i "D9qcP P֔RؚvEp"yFiҏk@%F� H9<O;4QZ{  kà/Q% كw^r]z ALQo�G�w pwKz~vW|\OM?>SpccN&hB]d%-W*R)6 p΅amP c뺎KQ*"ӯr fJd!ug)k#As{T2Y DE?g�ܱ,ңMG1]і1?ؿ]nJn_ŕWKZ "ev OzB7#wr3+|@k$ZXCM{+4% d'w812X)c`;|!0e0k~SsŒQbώ#w= H =<@> 1֢8#pŽ:AHz{D\cؑ/uS")TjO|JRs60KxRX=p[sUy"ZB2(].'3..̅PiGE `]^AY{PF5xzC@Qewf#eY�TMy$+ugQ�ʷ%\~k+gXML;6^D*IbTS ZO 6LThXH\<$Z{~qW#.+% ⣋a�/N@R;P>Tt! *hgMb0Rh>*e `SΩ΂S+<xbH>7JR$eyarSyZM Ol{H{{A$=i{@Mz>fw5vm(O]!TtDz>.�٬LA~cME< U}Vir>;H4�* KL_Z_WT%]fuLl65n2m4Y*0V w^iGY?bH DpL;Xƕ*4 P}h.>e⃊w {- T>@MFŵ;aA�B`p|yW]>#'<8w8p +7W@!@ XX  z]xQ{7y]zA pԏ� D^!@�#p�_ jkca0X7d3:ǎzv=Pr9d%hRĀRRJ.2!D ݑgc~�q]1fҖGԴPOź=)Q1xݫRyp{ZluF`tr3G>sno~ +ś[JMVvkfdj\Q/I7;ӯnν#Z{:xz[# ~xxwzTvvT'gJ8�@O{~_Y/rHQq !V7{ 7v04v&g8U?}ep{z_^--ԎZc>?\*a ?]Z6V ۽5od<>]i<=Wv|wj<|ؤ7+Te|22Q)pOɯ]\^fkFuk߾Z _u1~3sN*�bme_Y |l2:Q xhbmypBQq|u[YDyd26U=..k1M�. 7\ቴ*cx@kͻzZ#grV뫃W9Rs49SˎLwkk[[6 .Pga_ycu_]蕫Lm|bm__4KcJSk++E. zf:#cR㯭 Vn0<Z/ߍ^wNNLҋ|֖5tãʻ>Fyn=ϽG|Zj6ݎ᝵c>tX_9Rs\nj=k[伨T*`Hsiy q.CP>TՑ�`ߑn_^UA=Z^{cZm"N_T+kݶm{97KFpl{uiw]~ﴽn=^o™Y{Z냌^)j=p.:^>Ru+U(eȩW{KKA0Ȁ18 x^4*C#x;޾_m38��8 C��QP(rKw.{aj "Ms\"�!y~V82-d}it2107I 1bYkRR)e'J>`�P3 s�| 0[* 0x*b*ޏ{I)Dp|~tkC iMVǬJʹbo X{o/Gm`FJߓyL㽏~y=k@ DS7eZvÙ\_kʑtG]ql,/.^sw#mHldķw͂شGH 'tRWϷ2v=|J9 ħ`o3ir x[}uYjg6B8%ܕpbi01q04R!:*/؛x /sie&wLE|?ߧk4587VˋV��9\/5;HkɾXzd#BNa Ža}߱vߓGNj@T™3D<Sͼԃ@|K7zqJMU>鹩¡k!EaFD YY߶ e]o.K)p=Ssw#o`p|C;q깶pJ>|虩�RHO޼y"U~ӻWzqumyJ()هvo9ܽΆ\ҹ?3Y_|/6|;S-2%& p ^XZ>[�hO xh"ifotH[o>ֆT&in_o.X!R_HU6ryы( 3jXyvwƥecl>Ԩ7S+\_wi'f+8[;-.]>|jG+:|rk<Цl;f8n,o}>4R8>22^ |q5GiOZkԎ╅K{MԒhѶf1\jI.ׁ#νz^7Es|܋Hp")w np9!V헗7<ݍBgF4 2}@e|WT)VvNXWr_%!k ,֮\h S8 ̵% !JeVMJo/GīZcc􃋧׮_p1a!'wv{o\<x9\ OґF*{kMe8‰'scw_|egTתVwfs{2m}/~v犹'#\.&ue2Ƨj�݀M{u.U^*eހwZ.D�28tx-޸v<i?N8J՝QΑl, z>b)oWt@Hϯ[_]h76Kd]~en F=g(wxK7~\F*gg|xa z>H[ UQ6PPao:B̦d>>-L٪Z^56 g\.g?%{aPrSʼn=WjpF ]Qvae� @0�8͟ �y ]K?28 D@(@!��B� _@NlOwO?wszGuh\mrY6�� {!p.sι,M9.8alپ͌ : E` 2hkr 2Ƃx%r(-ʵgi :6Trdwu}M]̨I;K=r׸\*X0;9fȪ `mˡY_z~yhpyFriWOl~7zmu/Ƶ#iD?:Z*zg$HbCCH  MW Mԯs^Աa'/ 1KWG>\xs›f^j{sQ�/aw־G7n]ƭiB'gÿNVxW/Nu͝T>Zs'Pm|hg>9u|quqfへ}'_ܛQq8>U}d o·?_ص9ڗu;be ~^PQo`/-X"/^}!y}٩Z׾?{\N7.]}ŕu6PQ乣0vޗӧw}u߾rr`#F"ŭ˽G =H:џAC}A.j&#M<d|Avj{⭛W:\[op5e"Dc-HV8Yn%.4A μv?0!"gϼ~v<dZBFHK{_WW<D1x]G^2((!YP@CdJե~JƃͨcX@+ gZ!o|8U@|Ϯ߸ؑS _WמlF_OM|폮!O${WVY 5;_{+D&աhW%!6=zM!Fub:lԣzu5#ћ;OqΆ C#e3z 'So/s!H)w붼xg?9WJ)*T=.I(_�tZ޷pI( Vl:Ь^קJ2ȥֺ/^Co?�w[A`vRl{g>3+<䶣.BWD!sXq! +Yu i7ּ#G 3@NFˤ% gso}cUsr}˷z=>UXl=2N,%tS֗=vt ָ'28'�3Wn>*_Ĩ**U>FzߑKgփKlϼrx8+6.[ĢHrFvƹ8' 5|vovo|Pys{.z�bm9I=C;�{/-t4vq� @\<~R#q><j:Z\y/;5M//=4</5yj j͟Hp, Gq|a:ntnt=22˞(68qF޵A?8rk͓!99 =֭k3R 4/^#De S!s|\⩵~GW>9ZwG+}%jz�Ͻmrbwm7`xl2Us/P{IS\TOpB�q7 !RJ%h"0@f &}K#DNYOKfVk<" `'pi\'@ss?>s}.2C`zPspqw:t%%D.�9. !` A�agX!�2ՔtƩ�@ y c�3{=<>Y5�ΑKG @Jx!B2Fȶw\ćhxz% 2 ^0Xa灪P+VSrPKzu%J%"CW-adirM:FDHD%K/mQ$"!'J/Tzwn2r 94KcJ^=vr17` Qk<m~|Bo~j?'K 9 *HO}!$ ʙDLyy0:*$-i#^^._u7[{!r]Ejm�/%jKErO8 DJv7/u_yq?4STXJc` Q}J`Y∑[Sk8`:—Ѡ˧[ܸҖ+"Fq 7K#g&/Z}=>\!$~_|no^;mZ2y%�H; !Df !@ eÅGt᭍/dw->9w  T귗8'bï-~폯e407ܓO+EcSf֟%�M�,tz7',WXB@] /ngvC19'"*jq:ֺuŎU2Xߠ|~}5vV:M\BȤu;F;N~"`jqVw4u$7� G]]aFMU:W0#M:4ooּk.gafCR=tsor$Zz�984j ez~,CN_n X]|73x h66_ka70B$8+g[_[EL"Y$_ai//C{ _{♬~൦D"oT3+o[פ,.n׾;Mx^lnnJ̄7ϼE# xnk7DI<, Ccʺb}"Е7"Y@p|ƕ3ⵋ>DS̈́S /R2^zqBs x�VJjc~ιKgZ9z>hWگI@{尦!\}0E{{廷Wdc`P_\ejTb} G:j$ ì;*<^|6RnueIXrwfziQFqBA4( ĩזngzX} OOytƙחPY+7tդ-!3sY8^鶃h]R,AŕsTeRuF˦ Z/v1hUAPtoJݲ A لASS&-;+P6d ca. ^{@p΀;B8[ꮷ>Ga'{xT={\B E(( �w;ȣNѣx@+J9"*y(={<|d2L� D@0\x~osQ&gءO=wRc�B$�agDRtK9"VP0G�6ٸ =$ȷH1^/Cn"eV.%Ҥ`B>m?Jc7i:I{*(k�g eh:Oc h (iEYJ-*w[;WtdE+ƪ.2<ZfLK*"3,/g@'|~bڥj ##+'(B1(B,/EV_*I և B#9ܨwsÕ1 %pbT bZCc%Qp_\|M.T茡ZdYG|fn\{uOኑs >3Cֽ?@Шsir׽?NPMi/$#4'Tl&ΌKU!$҈,!Ng!ʅomh_ң$1V�`kśa h1BrJx(wyvi8-Ɵ^<| BDce:BHƷU%XbB~ʭ+vWӽx1#�{bDߓ;f\,\x{C%<DG~m>:Qm$ #n__֯T9'ΎLHj<n�5.@%!0$hCx쓛ڦ:de}� _|;+)nG'zWq  ;Zu%ԅrrلWC,CWA %98ɵe8SdTZFSWgf6V %ntBwh _Rpޑ ޗnJ$(��+7~xO?R>>UޔSrh.Y.QvN6-v[H/vn_jYrk:qb;DNf\a^ʍnP%L_߸HT"%Mc#مȯ~oqf[[-0uئQx2SVRFH8-וW$Qy lQ%2gF|__, 3T.OqX@; BXw7 ν:*([� %gu}\^hz~"콺?j5gti$|@3'⭗ )el�5taSd{ e p5ռ_Y �4 DoTya[\Z3|Ow),.8JUC) ;nl_盾X}*Zxsr>{n\n-N7KaF )pKlt"ͥ3ݶݤxz5}11]| &- DHUT@w\uRXs"6=H)]9#À7 ɢTgx/A)nrɩs`UN;N=Py?gZݵ}s` P#!ݼHTǪ�8Rsj A8c �q0pcR)}x8?+~ x9u1VpqR-U嫭]{?GG*C#� \\5DǂaEo%(0&�xUea\p7G! fC�<k:VAzB8s0NyeH~\F0I&IĉW m7}NCʬ>,K_ZD[(sh/.'-Hހo{/Wk/;NqưpnGM--y/|59x?&."~o)-@Aހ/_Z >E?QjSeۯ,/^u+YTux<+wьGlm`ï-tZim\q'{Vzk gPR Чwepz狿}e vڟ웫mc,}zg}xYV~צFv�8JǬ-% {YakOڱ\9Ϭ_d<y4=l}߄P8ZƾPz]wW\=㷯ʹ*֚Zw�#줐SГ\ꅍM}eif.4. Sl+s0yn{4v*ڱyjGM?ٷVpٛW70YxF~B8ّ鉙[#ҭnAp6?,ԆGYƕvF�>2{?MVp׶@\ipr+(�FƳ)g;L˚/2 ;rҏP/((p\.  p=^g=,Cix5+-ommV.|@(+9 N\ E ܥSTBDƘ뺮r}@Q*�`s9B0އm"AD?BjqJ͛7ZF9phǏ<'1@ BD?nN\ $#ѶH0C0~ou�&pu0'9 ڶTj͝L(P�Qrʥ*Qv>4VĄ8mT-$ie:M<\2tsƞFV|r+KG.|gO%"2H;�W$n&ҙ R=ڻ5hzʙ{H,+4TМټJPI237ե/p޿E !4s<99uu)uv~zc0W;*;RK*ؐMdLjlciӛcߗUs?\%gdiȥ! K:<VFݼ @ I#�OVNͯb}!:3c#H[~S6 md} ~ߟ_]P`+?wh@;kO 6 !*M@_UjBGJ;sN+b>X)1GYЪP,o4^—ng�GIhtP_F�4_Z)qME @[٣"GF79p޼>ۥĜT[׿7əjh4;'7vW!첖�ObU*JY-$H4 RNq�/~c1\u8'u-� {2 ICNalft4"X�)Dk0!LbujqUNAӵpPŽ*ɮs<Z:.wD$RA#W@;7�+)HB-�(WYqwB|W ΦgjĺPu0Je(R"J2PJA _S̀G,Ӥ\>޵Kl親*ά8%h(ɐ0~isƚ J.tJZí9oT&,Aq"#Ė!d彔颔$#.ݒKpaƇCi'?szg-L7"Di"+h �{<u GאjC lCqԚð Ͼ5[d[v3zHIGHo2x T Qpkv�H�M?aX.\N0PofZ\!sבsb?�"-x#AE2 � 4SWR#, A<wF+I#t6pKRsT`S/K)w�M} [%?W`8b+ДdI ٦LP-gQz Pw � 7Msd%Kr@ J * J� �d>/AA|s؁7+Joxt@0!0.tKsߥ0re�XcT*aoMUx <(8p.xv^?z<pəR AY؋; ; 0̣stMe1a4Y" nmw <>L&@t:Nx�CK#%r"%IxE7imz(#pZdg$uKYF1:NChKd3K]8ق42itZg'9u}\Ǧ*WNwJM6{jkݺ9xPͮ<"ک-@w*UrB]T2;i0ڃmM#K 0r/.\ +^uFw>4qgO<4ï..D&DZ(4%LFb덠T+L/  -WF+xg:9x5Ca}NkJͯ|UHz /$Ǧ^ee׽@Bٛ;Z |$6_|nP2̆ӯf" lsҰNP+DL\5B7o4?^ɩ__̮+x+2tG'烞{zb"9iU,; "]oZWӔ]F^Stۓv=7{6@.E]^)B.cRq|J4U]א \?02A:fYzS?@ԛH>@_Ӆ&" �dEK�}iEJhA�@cU_jڟe/Q+gv2CK]%W8$�LLUXXJg[LThZDgag翶204\Cja hH Cd L֮ED!] νv1#:9"S^Dͪ\xzA(teu ~yɏL څ>eOkFpKq] t~ MǧW{^[XYʘ �ڭ1=L.μ:ז,Wzx:;EWs4`cmpJkn;Z)+IT1YHz&bG%"H๷WG'gҺOUw=VϪU^HKT(~fyӜ`>g.y|XRήWvmttKq)V(( ±@ ^׿}T}]NQ l#-^d~J � !qd`9~O5^|)^*'DD=U8LSJr6bnJ)SV.t[&t#X @P8a2@ |`�, ՚;4/NXZ׼fe^*c-(ώ�B.B;2]z/I= ��YQd�}izp].8 0㸮8Au�=7}}RE î,djEo�j6� D�S>M¤�b=΃ r\ [OZJo+KeTt$#H;+{Rۏ6t!LB4[~jnlP v׵a,eGNr \ p,}ͿKYX%d8~͖ۍTT-Z}yac|n .\M|/nؤfʹVw?]>;zK"RU2OWA= V)?h2vHk[ rR`^_4nߑ~vAAbsO[C1v9b*EFG. J4JOh#rgoA ;1 ~اq)"D/dIr 4uN<>%*k $iT9=מlZdhv=͹ άxbOD!\g#-�SR�ĝ{RkʗoV7r),|wzݠ?pn_o. -Wo|\d"/�) ܛUumHIP~߼I;2|cȃ~@NN CvUtN/vV8>Z]qr.μzIWuwwZo 1:RjJjUcT*1oJMχ٬f;4wN]RsjM"(LNjhr:{AB⇼�WFٕ Y{<]wZ~|_BCsETM X3tV%*̑G8v _^rbZ066 *wy3, Ϭ;:}ڱps֚y3~>! ڰ.]w$g̣G]ٽxzm}e$/go_pSkpw�01Sz~�$]ጰt[݄u K7i-&QHXlzSxűjC<c6*<.VGcF%bOR$ wE#c)쨰 D3<HqjE*.dZ T=BE�pK,mz]mj2 #W gA B!B|2e5a.Ќ)s݌/]inrp<l(`"0%qxYWuz|#@;Kxʎ9sM0q Or."`��a/c\. u]@8V'iQ]!.y%t8N٭VksJV?譭rU7v� ��G"F �t�*333$Q~@XYB@ <� `N�ʕ떄UǰS̓dM>wMQ 35H$%D�z"q=8c+%W^atZi)Z�41V"bbJuNz܌HTDZ}�I -PxН-P-W*k6h)/SR _958Qen}m{۷� ?sÓn4A !Rmc$TH>@37iYJϋܐGuKTtVO W<Ai@h,9yQL39i'X*Rɕ Y{G7�[ ۽0_KO4ԭtee:B whf+|G7DdbdYo RA!5Vaga}j r۩{3C8'YmԂ�Yxś={f lk!ɲd!՚}ud KT=[%d' B6On|?_ExZ~"@U *ڞTU^R!m JR"-c84Zւ"~;kq�00 %4u:=W���IDATȨ T$+uH4ad^agXh{v w$5hfwfW+[<od L\<VXTXb$*(HĠϩ7<!V�J>7!CTg5 )'EB@f0(6(�%Ìk!T )w~t{Dh.|h{(8OOL!$};K-%u3J_ID䡢4(1Bk QqzxM?Jx|+ N%_&HbK*\!ql1O}O bh(" ̳<;d G!uE1B nX0'kZ%V*1+21#]|�L#zJOJ'*Ol\qq`#FH5nB9d}qHLw/2bF G!@HR8 d,T+nwFD"f\*;h{㰤In$碢a{Jc'A1 !ʣb?@P G}R':ESƔCC]wqq$X8*o#I�\#3@.2�` ʮ[qAj~K=~C{&˝`5`@ |9:uT]zPCJR\."H1 :N<V(DarZr+� zmN{M" p�q_쓢"OO�0r �d[Hħ :)ax$ ]nz 0*ZߏŃdX Z\>ҫ͈r"MNf`I[}@{XZY_Mjoxw~oɭ^?3?G߷xRdPFp~b#ّ~+Tk:]uGl{?ִ2+dP B7__Sn4zim9u+U'-PߘX*0�N+i4mH잺?BLZO>x:щн#S){F'RF(*[-SE(;-4(v~np[<v\Zж[Wzbkûʄդ }~ 29[<5IRӯL.8挔�hYip0#+7܂�X.eg$O%Ju봷cr a9ۦ{�~x˙+r�Qp"Gp&+sdy.2+~pg٪Z݅`e} @X]K3 coD'T*C<,x3r\.+v?[ĐU5-;Xb`sF:&gO?9sXm|* s1w]x`+m ي;ԝGQD'Cǐ|t`yiBDCܬ|baתRKd[\+R"IQ?2de*2ZRx752qLhLVYo$d>]|>yZ w<\@@BЊI~3Ty !(2 irQxCרjXUer-@tZxS1j_oTd-HĪTE*7jD|s 4<%q-hV�.h4\%Klk by!#|!wѾ q)3III#-M~$BHtΎū |H7{M07G% /e#DPod/�q1*,I⯶Bjz@B?g)v8/!v ;P!!$֖CnZy �D�L>T"TeF�xu^ZV 4t[A΁d(~V`~"/r# !'>6#IOH=a)a9ݯ7!%4(hmX\j]];8!+Ȃ*�3XP_h2PJr4lad߯frSf18=ciX\;ߦ` 2?P!ѦV2K&&n .oRG lRdR @3J�monb<UCU Xz�֔]8i J%�ڙ2C%{KHW#BF.Bkm"b5i7:B&>"e H5j].[`שvC63޸y Ahbs;iF}w3r$@:�k/lnՇwt*jk"u�2kmeHl W|T+6o�K0'\8GZ1h*Em&^#nLKXĖEϗ> J]=M2$XYN3f}(rٚ a}}Z=(}wy!Cc2-1ͻSzŮYYiz k[IK'P%"UA&IWFn "`7)+2Evϔr(ŗ7܌� ;0 9r`�0�7.uXݲ:.ݍ#=̑F'+u~aDlw.$㻾 `GMJ%{yR?�Ft\XPNwׇб:><:nE�iಒJÞS!5biחcKapØ\ nt~�LGGM R#߂~,4Xإ$!}Q[#qSA v^d"d Wf d a3r\w5QQ'pZUj*"!ig,;# j\�J;G9p Qh]bn'LA>r@[Tm|z-ٗ)6w{A]<Y+RO'9Ah ee-,:m~# ��3D[[{U_BԱ6$s>1z_79 O!8 |%)j69* yFnjf1͞�6%>;9PZD!V.0@]+B촲_\%oHYIP;IT1jf +!B׍N2 U6,J91ZӉ{$С{F?4friρa3rC@=Y�`<0!#A0}/eW�29.VĈ+eS_"Pj:d$ �ceRt+-=h5y03ڃXKxy-z؉s1S(*2JI|H3tTl<gk*EڧKkYHk3{.)Ze5WԀx-g""b~<A:ʛ Bv hB8LY?;S-Oc} vcH$� 7:?& aёT. ㇼֽ�bVojoHaVJTd(HIIΜ%f~* D٥]`n01@秒7B`݃beQJ|WP-A r]/RfRT toV}НR1-AH>bМ /L�LMڬhh-)T�' >+tیK71A'ܞiAJ#sDRxnIWhQէ  @�@O0#ȸp9 v~C\KN +ޠ'J>[>O:rLc-?Q0A;ܥ$\{zݞycxɓ97Y.;NZtn-|w;BDv^hy~ws݈.> tPhTo+p2�.6m@̘_ =QJ[29>I:#"r^!Ca8lo=9cNX1" isBi)=;YXrOb($1fGR'Z"i H[ C.*ynۗJ(?'j2E*XQ`ex%rKDϋ'bw$[c5d @lzklA<֡uGTd|[�@iS? _޹tvvTg~q?KlX63WP=Tzz6KG%`̪!ҢSS/46M c`28GdȉZ@.Bz!Gמb& ZVmX d(BP}X5ia^). HIAk4 ]N'ȸEt$B:9 !̈́V)E&爌%u񫟾}SdB_a ЄKP#+ni+DV#Dnq^yT2zռ9JM#S.b/OkbUj ~ Dzc)rMbܭV婫dC P.uut5U.6rOW2ƵNW99^7tz>`FߑѲ%PG'oGH@"[.GClk=!Tχ[kRE Q*CȳO:$_Qd#5UYJ iX,dIx^͜[pڲ3f�!YdA)�|Od\-${Cܘb#BYf+d,|헗6Հwl;cz+>$K$A9"/SZi[ƪ< >xE @;.�/<c" TH~Rc3$)AE $R h'\_ࡷ,T<IuqBUi@3* 1UzW<YDN !6 sט|̨ OOuB<$2o]�?°u^"`3{y] ĆFZ!F|',G8j$>DHuJd5t`kuN$$ Yt!r�GotT.n �=@|B{lg8:`g=|`9`B8Yrh0R0K:]z T.FQoky ?'~O8~Єp;X,˞ו]k Y0RJ[)o jΙ�G`? h�W<2- "^07hA\L[ y^Ce.Ч{ŀiW>^ 6Ed5 uYxB ݰ3e![^qcb[%Ý?@�@#m5:ĴMJy",4Wxme *ȤnHN埥Z>E=܉-)6&*HFm##܈Jκ ܤ2XT ;;d )ϑJ(_J,U"mU�ix$R6_ DYߧjD`yV #rRGy3sSn81B>P~=*gc-k ٸorGAA:K/1 SfܢgTf-Q216#ukU#DC=B)ĔBFs-.=H`Q'5aAƧ7/T @�Dj7�h>\>�jT ]`:*Q'42QښSC 8<69jq!Lt~򎌕s= 2<}ݎd"jlZ a!Ƞҳ deiyFr ![%O^l6(LTk0]ko`hLԡᨆ)hVK1:l2rʠX*.b%tHN!!M%YSHuMaX�JwA W@�vWiOcܛ~u D!Skv QaA� 1IǺCAp0D!EBUD ]B9C4B(a}ps8ДdL_p~T~%_T:+47�zIu*IhJ6#bF%/-B:ͪR8aKE /!n+}Gw8PRw:WJQ1 x( !x֭k=s9z(Cuv6=OThA ^Tkt iUTof i4E%U' *\*C-.$I֧ ^ǵ*5vעʳl(,L(˛SNp�亯 WA5G5㴂%wN"S8jŽu[$L|:!QSݤg3iN@@݃$}BW)O\ITSwRtt10.�#GaA�9��^G%�@(U"zZKsG&ƚ7xqzg땽HcR 9�cDE<GO cPCG�'@&ΧeU|6wS?g~]" qoA��++on<LR}lrf~u뷮/w!:j1&� AdA-: 8svr11*e"�TBt,c̄\qB  <3Vb̅0 @V"sJCAV:s=S35 w!b5c [gYD-�%8!o~9*B :etJ�u\`EC!306K'Bp 8cfELvE,5REp/' GK AwEEya (W!+HN]%P I7Fu`Y!{rpZĀ K ;Qҽ7nᮩ\?m�3%/~=CAڅ6!LY 2g6-o 9YBKi_)!!O R 9کz򣳻5ßuA'ef.Cz3# {kYwZ)!:o[fWD}E f$P^knnmHE<i��Lk TgA4^dI�L楮!/�TF6+6$*KK\"42V );?|z EHލpre3m �";btrl([8f@-6+CӺVw?K']}a&iV-.RMWX [v̞a4uViRW.%5@]EQ[bhoHv٦ڣO@d>i_NgJ|o$d|NTN T?duvK}<c#(r a!r~˜Ĵk $]L &]@SQa*w7Yl=.YdlcnIi߅TI^: T9zgXpj}Cr~_Z{t[`*yϜrþϽvƮ}C"c{ ]xg&vFV[b劣zU9e}h=/K7]+$Y ᣦMJ&,gt.C;pq@bU mK&o c-,"2W -=ߜr2Unr17E,7fO+3+o^im0g OTA@P7+AQo|(˙M9-6Ũ]@!0|`32&@�DQ W0 Qm!pxAplLWӍqƥ GX)>s8s B&@Ľ0'Ί;Q1NЦJނ+c|8B0+X^=F؁leq91;Sumc}`C}qBp�Aað"n #e\pA�at(8 B`L� ϑEȹz{02ljn"rAԎ]pC0L�C � 9^36;0vJCDGC #KW`d ] |=B b ˄@Y`' 9�] TȘ 8{=\+8.c @p rMwTz7,lIdLT81@7S?NV�/H[H@Q\Zv- T1̀069yEylTmM/lWB"d69.Vz6rgJ 7YN9rj BW!"Kk3$2W6*kJ$TlKt0p浍3n;|c{ u}E6x/i%V:,wpUŅW#B0+2ӱtx e 5FT, 1f\~+Ϻje, ]D<NIZ]l LS ,unllz_"8?BÌ+'y8SPDW%d-ccpk ~'$!t '~މ0265/U!/bt2?Xn]*h s-^X<zXjbfg7O HA$} G|WޙUu'�h<@"E#FԌҎlVkښlGk6͚F5"�/�n*/+"npneQ_fFTive~X-(<Yn̍;\ѻm-:ԻmlT$}pZ& !Jʰ|J+6FD/?J!ՠ׼{gB4)�PY6=.G#YcN CߓR٫5u~w$&f]ޒo z9 Ѡ,D>1̾] lBlb7ݞR)VMj^4*> ?C ke~ 2V }!Bw:X,zgLbGNM87U.m'Oݹkmt%99"8۸qiȩcg&+|ݛ~7Y Gfd߃K ٙ<A"3cl\L~ O|h< FܸfwK)5OC<A6 HZ{,4w#[nO2ݬ<L2 U:ߋr8,Sjđ?`SvGm$+7zb&~! Lk%cy9eg!αTv(Bd˟-,< ? 8"̘"H $bG`=&HDHFha33Ow&&^vw98096oEf ,֦a3 IX3$3U1iՄ&HEAq~q=8>aa,X8:sCv^Z뛛aB)Ж2NsMS"��]uYf�%A$qP{ ՖO@Dt )EBF+ <C)H x,ca3ǣ$IPFK IFg_Fd4"LFQ4DO9xx .�MXy:_s"dq� ]F x5#+E}("!� b L6U,:xUj>\m6z2mŹ`H w*]"UQfW'cWo¬6=ffǴ!{bU&ZΙ2RR9Aˇ:~,{ev⡉;WuZ2�~)da)^m8l(qW~ZS j`_y{l։4��zx ol+꛽ƮSOB)]W]ln `!x_XoKv ɚ/�:.�&pY ~5ب)ef;гڼ6W`P]l6=aÑ�˷;YbDq T!/glRlLL5ξոBdJfPo+�um+�h6czt\BHy6 ~/TO-or�%6#Tj;|gXmg^7x({1 g;Vڨ33 dG u5[gfP ͎L.;:/ަ! �APǵQ.3ťw_YBv~DlPky|s0w}fR-;w*ʁMֵ25߱'tP&8'jj06ls- ��aCK"@IUC HhuA?1ZA#�Q!m4tyYC( p{#y7CKKܺYdT\=T;$Ad@DI/nܼSs G+<ٲ4G㓍v;'hJWE *ߊ̴& >Od$(K[m=製ö*_˨BϥOj+б}/ 46JքhAa0 /B�$r1hN?x2|oz4L[yx|" z%2w(T93q2Mf!xH*GÞyl(8Fr6A2ʮNX?o}"0HEh0Fw:a}љx=>Koo=L6�$&RHYNlqJ6H(I #T^mCD)eh�@4ڕ\s� >r;o_rF4^4hE Ħ&@!0@/@@D��1 Fha!P�L(!JI2@Q<J8Nbݾa[A DP&L qIBR""D@Rf@ ;�B �RBC`$VLsfy}sxpԔu �$ %I{*\RkBM7ӭۭv i@J’}רLq5Sr-ȾMs\ƗRz-ߊS[f s%.2sC_L18SҼB륵+\?1y&`D磟|qƜ!U)4<BD1 ͰX*ڼXrk\%VPy~.9tv+}œ7З2O ㄘnp6RKvN!4;?:?;, ] P9tG9`F*VJv߷О 7W#I&J!UƋ$Q_.|D-F i ?B++Zor**9PB sw6,]fÒ|۽"\Ѕ/vЉ\2[Z^{GBqn\yX v<:}p@+lXo@afʎn369(8m!*yrf_򽥧_rs_[޾e#A58$! }{@); �N+A/)eLVKk اFo e-@"*?~myXz9`O-ʷ[W66:$�QwmTTT`jFr�vfB#lsg8k2FRTl$I^){E?d"'cqОjLL77G'`|5˄#' K,f~VCA-&%bavώU;�#LV}ON)7^\ꮏ>6['+ mܓBD?\鮏>:[2&I<c\nr|O,8(z :cA6<Abɉ+CɎuJzEoJu*P9_ ^A�qmeX0lX8Ev>_`(=�_A;9ݼ{8_V Io)2# j4ohAL :18mEя+i)w5E_P<)Hp\B tb 0#*C[ņF$(PL@FqBQBؒjf6F35oypzك hက@�$�DYq$B$loI!5{mpiB!SsѠ]|̾ ��1#} ^WvVzkf4'�HƉF] Ⰱal6Zfh6F Cl&6" QD$DDqBF#`؇F#Dbues}uߏ6~4 F#!BF=4a#P2a (G# JKɕՅF� P0n8p@xUZRwc.I��c9Q󞈌?鉔r4ʶ`ja � �Lk|+~8(kCC:eLΪ^#�WZ݂ɖ%z $Nd�[6fc"ݩrc"q .ϘD#M}A}Ѝ [H6~gI|[ s~-Ý'??/&h#BB}B pL>ByM!A-{mrm€o |][kKCdQ#T,u|&`↚s:sI01Koo%cGᷖ Ưm"p3pO"/A32Щ@2jw5̈g`2�ll@R Q�C?;z^d,KG<lCOO!PI!ٺ׺EYv'x'w(݇ˑñO(_˗cXZF[UvgH0Ln{?1.IҨpFr&PR|jyB6עa"G KIDFg-PHh�`+Ft&`VSo Svy |`\~qE|)Tz]r< W~)\\T\_ 5$y_,яݿyH٢h ͇) ߾@WEDqۊʦQv9ĭ8WS#٘CDE}uWEދc ɵzWVVzDzT�iff��_+9A=rd $>WSO-TpPQGZq~RǓ! ٥{0">ѹ=F3\FAO͕x<H=<Ek1b)ҽ2(}l֕('A�¹̖Vn2bXȄ~3h<Z!K0k͒BfzaC&Гc:6PnTu;P~; ܂2v>ݸԕ!j\]X"}P}VV7xTQQ6[?e S #&/Iخ'xdQ�V\a *GDbQJ([8 Y[?S8 ƯnRiJY!;\E±Vzrt<Api#!yW0jj55Xh9Ѩ(#Bcb5p-ѠǑB"f;➠t<#,,،".R^9ZӸ~8l2E!r9hօƒqx]h|2S,eg/L)GWhF$+ !l٫P bHJ"c NsX\uZW/vgZ �� 3d@B%I#d@c{m;,Ӽo:4pCcr#wgM sE 쌇ӇNom za zqGþ: j4ViF6a(6 !zPh�H I I QH& SVwtoxsuG$!(i'1aL %$Bz>X�􊁀h8HفӧX;<cWLvl ^�d8q鑅Ӳ%*+8d�HU@p8o5D2Udʶۊ3:g]NyrPQBB[<ROb fAWaTƔ2ci1P3K�& ݼ=u�o=Eg{֣_=:�Kt߾柯9S,IB?WKrVDrCd ̭}娈~7yՒ`֖FN|C}E:pdmAol(ʳ+I Ưt�ܓS*{=ZUgl,-[ uzW%{}s?[?G'u搻܇ W'z׼h~qy#Q(;|KVY=D-uhʡD@ ;Q;��ڏ?7W 壮MpJ|rYmJ(/)AC%Cs&@\5pV>̾w~^qڱE;_ ;ʮj${ɒaNp5^ۯ&2a pFKâ*Lo. `t9s x盗cT>sR|*xR~3PRiH�beg5S\}OLS]xufxNбmMmVX>pj:2vk�{qw=oH:ps=CytL\vg?w3~9Ջ?9 @$*.he] ZʮB4CzNYtؾa>li|xjglTÒ}wV\T8 <:k>;_z79<zzs/-+LMQE.1��$8J+Z^^[׺g Ǝ9C#7J'f&_ 8Jd$׷<R7;T0"?;k5IpGFYwmכֿdG7.oI'gfz팅GN{~_|V\- }x;%Ƹ_WhI+[qɨ_};$yw`kše֖l/%ٕ (,�ةɷֆYVRo)8N9;ݍCm `�8|b⛫%Vl<}@gf_{;=û"Xη8!>VMy,zĺm8Yˋ]D]vl XV0|W @"HH( H1$r8ͱƣc0H뫷7W6N6f8Aig׃i)~Ȅ>2NZHJ>֍7JZcdthA S07 Mb`4! l4F3l݂F)t: �nP aym-X\\w}yi}} Dq($C ah$"Hsap'MMNY8yvzrz2zhP3Yj0~*hv�+^Ɩ }Mw&;@A-l�?X3!h}r, qn>Qg[#ɢ:l ^g+}ot�g7Q{Q@\,SQFfɓ_<o,s/;:vZͻ3Qu{IzX;͔uF8ɞ/D3O<vrExŕHhS >1Jޑ5_Xۙ}/#pŤ)SL6#6 l7e'r2"Gqj5;m.K+j+ѽ[>sÆ ~W8c:Wmd?S=]>rH|P~V4~*ѷC5ڌ3>%8�"O}ir/}ŅJgkyjCO<2Vt;\~sÐcӰ߼-z|b/<?QƮ7eF|8Ho%qYzn>T+'% @g;EBFx3=PFL<z^~KQ:D[E,ӝ߹Anqjlqfy! ʎ,2#y}etf٩"*2oeiE2�xL=FK0A +D<a{̾g'thb&նo*+S/o)Z3׍J~c8mZjl.,&,^*qNO.?Wb"gk '/}haqmW O({'O~S&-6stqN�Ĺ𓟘wEIK P8_狴v|qni:V[fc~v!-A?9%>#3h0,;UO㞠?b0 4vN5A-G?$.!̣&@ttɨmmF~s_7#c=$W=84P b_++Cï\ws̪j\buHY=A'Ns!)<2;q^zrP#$]8O7xi+$ٵ\70*@[k+ِ�Ih4V B'Iq4; g~S;Y[ݸ7JI";1 ! �tO0YYd㕟 ݋$I$D@Rlo]XS eL�!-0Ok?:t<ܿ�SѰ)r$Pa{0:O|l|y+З>G?~CZchqikQK " h-k(2%QG6Թ:he۠en^g})o8NF(b-v�{AHDq`0 F(IsN5~h"ftQ]WQ- &BYtY* ܶ[g:WS d5s:SE?dI%=_m6'c'푟,HXJzz& *`F#=|@. iSg.Ck g'N"'-a O1fX)d w W#8 Yў~Nɷ=O}fXj{%UW x8{YI̊;�ʛٱ-mzvwN #V1^oCMJccO~es<D6 :pͶ_=\9Ps^T8Gjx0llN**qMo6C3^Q !Y-@�X5z06OQH9娷�Mk<^r`/}s ?2سp !gp`XȄ^֢2@-6Q! Q!to?*�pǟ3 y6LS8Loߊ3:$ګ,ٯ8tI^ޢ2JF ∳O6#ʙCPuZgl8I�X_բk7on]R ̶7qRmz_#�\|s%﫲w{y�闎}|ƚ'+=-66JovNULrQk=9tdf9?}%HLZdO;%A'u3;Prw�_qTj>R Y�Zmq#3m֩_@Xp >T=֋4Vp汙O~GgZ`ry.k$Yjp`敲uۏ<=7!ZHFS̀Y_.*a&K%+̦ZUvf,?�eu_^*�k](W;\b-PUAnɨMN7O&(}-K #/)nr +%>>16ְC1ܥu|qtgK97&e㓭Vl?'b#ɇg q۴ !UTsu Ažݓ/ oN+d "9WG4mDvHd0GQ2JH%"Iq ݵ2Aܘ#L=S|f;cO`(!_F,D�(@�A^kQl%:�%!P{2FUtTR@�e'_]6ERR")I$2K Z86Ίg>K_9_|3䉧9>ޙHh=D(& �Ri5- Ka<1:|lfNHҔ~@ 4($I�LTP!P' ^F8%IHGG%P̩9+2viK.jD "LݲC=u"Wa3, KiK9 2s@UML ʳt䲭Q&աxN5աY]IkK>ԯ3SOlEKtщεڅmkQ) \6!jd Bx9r! +rUDżt<;&D_˞e#M/䑿Oms/4%"S%Y_Jfܴ_̐pP�޼ܻzIK?s2 �~׎?J|ois5a+4~֑1UҮtT?S(чg`b0[NQ @!<`H�*l �}lF3�Śx<`j6U&UՄng)M!&7ҽE|ȗX!:06;5x Zai:_-M�0i'KYШj+B�Y+og_9SDFi t>]Iu00B�?[,̾/ک}-K1@pl~t:8/}sɄTxڌۖ [&ps_8�ƟWVQr+y;vc4 A!e2Y͗95P@".\_h/9@@IBvO⑰) !`ࡧfJ*ۛWr(2eU1@KyhCJsQfVxwBfI֖`CUvkݺ�pU4jN1Wˊz\~z f+<G�8wl婇ԁ)Eq"<rj_X(I$*j :2%B0n4#U#n1'nF AY3L N�9Cfm |:6U);O<uQ++?w/y[pǟ)]5U fل}׏Q`>wCj||}<o%>L>S}|�" ɣcA 錇|t_:|S3-3A,9a8Hf[z\Qn 쾖%ClO[cS*W^WcG hD#'&yzN/'m<G8~v%/\].vI!1OP!ZVh1. q(;r$A2,G E΍nɋ?"Z+lw>pcuF'-7!9na 瞘lɵ~<xdGaB{<."3ΎO63xD3eS9JbY(ǕdH ~szxg~)Ge9òV AqkHf Z[>+\ㆅ`.�B`$@Q2NP�"$Q<zQxl_x>u#?X;k#܌0HbQ t PPn_)%"AAZZY-oIdL?8`CԎ^<vi7^- /2 F (E(&܁±3}O}'>2?9K׆0Z(ڒI$T8@ H=Jat{ؾ(O@*q-Jr��)8R*cwE �#(h4H&dJ~P+căkrd4e& ,JbGdAlx5U8[^?+"i z #2$bn1u-SƳrVЦ}EŠb cQ/=*M<zO萃6S6suo%_�\~kqF8F&0ְB,BQCzfJh#tҵ^9Ess8 86O_<6op%7>Rwo $nJU %L\ 5m )İ5)O}'?>w k/; |ٙ~g6-,>+[Z`b%3#D_N#r])} OǞՄ00[lO|rosV%^WT Ύ;;`}ett}��<̯3Mpv+xSs|_ᨨi%lPNrw<?+̩G&9BT ɇ'~p2GK+qBBX+ytק|ȐDٯy]ZlG c*qeG/U*x=uNzdM*}g)E҇RH?x_|+G&g`!zBFYX&#\9@tᵍx{Bۿ_?k}gQ|_AV FVv`+dM rtdRқ/c)|6!e1\] ƢC sЋud!(K*QX xjiy B+C�Gx f"�jǞP _\Y0Tf|餔FQ!u4:R  !u<)`.SJrB_|gͷmhGNgY Zj{k/YoZycǿp)p=Aís_xSꜢ+C̚![ЏhN4Îd#?/@ď<rO=<mJSOFn x-(K-'>S5-rdIWE܍Jbvlg|'?1scgO| ceGb/{wJ7-8ph.?+Gdm='ΕH�pu[yceX>tQvXq5sĴcm{BWe.A@;׷Q O||~|,t˽&<該cqƕ pt#p7+�V�� ';5%te.�0g;rrܶ }'h+hkms99_tju1'.h^|ZH9ycb̲�p[q|- H)3X?LZ h@9rԉ Xk$3TRkAxX69`vI0rKD!H@)Ba"! Ę;I5f#Ĺ DGh-}P@@4LR�[meX}:XӖ[`߹սs'� �ɬM*&a"D!0"{0Կ=s?ǟ?htzd?XxqK !D@Dd9`9쌅'kyXe&Mv5Dj^I6dfűLGCrph4F( BR~v8+0!o$EoNF g2CX 3g bn;kO [W|?;jf1ény 夑e%ҝO(yDޙr{7woG3s󭅣_yfͫ?v^N3uZ(;cW[;gͿQ_B~ꎳ! J?w䑧g~{7ݵx`g?7_:XŘ*6#G{*鱾k߻?Zұcή ߿plC;Setp}b㑻Ygý^oow?+n~闎}-S|9#9958|bӅ'q2쫅UC+/g&O;[IBn_?. yǷ)y+$9'�gwڦf?7w7{;ξ\KW0ZX;Aޙ?)ymե`p`cu4{o57ߞߚ= _ba!4pOʉz4X].,![hhhhOT�W �kmbNOblOoő4+ !IWAg%@qdkEg<~pui8\?r@k@kvkf_nZzg?(/šY%,$oISڼ y]z{faVFoEdXj �g \4c룢ald Q:xѲ=㓍;p}i4'STsv0iݼyb\0Ɔ{kYc}c*UbԠV�ƑvZ~Khei8$3ls[fA)/W6,ysZ_m WW[Tcj95ӚiO6vحIaĺSMD4J%IΐE[.PǿF?&¡7V7Fa(:ӓ%hv2 w+D~3>Cnt7"!`lqDy _o^ڜ.+plnu7FیcTs|1>՘lUl8HV_&|<{I6fI i&㓍Nzzo3&'^{Qsܶt7UiBt񍕇_V;8I^7uGRDcl16vNݼی_Fr.n k3OvtD?2XVیp|+ �qyƷ"޾=x ƦZ[~?o~,lfK蔯H{6ENoqLk!2&bl8=y*HfE\=!Wm^A,"*B"JG$�\8((%mcxsӓ3/~w_ s@$I&H$IbPT^ah/bHox;�**PμRJ) Ng" {ׯc'A/YZ:L@9^. {Vfo< �Aة‘CO<n߽jM7�;@AlZ@ Q$Xhfn艹Ӏ�(I Di*kS-% fF0S4QnڇRN"FFh0q  VF>dd~�?㓋' ?Gdz/ '(3ꭕFsҥŜw*D?}aLx<HX䦣S㕫㏜?r~Z Wۧ!t/[A5lyj 㼲i63Pj8o~s%̯h$_b=B֙Xb⽯΀'K;?lLa%?+'총FGV~Z[H@|f_+xxӓP9f˶_9^~x`s`c SB?r]w&Svl?nƑH xj$�o{Du?;߶6dKt.o67~ ^M7&Ԟv{WٳVC`I^6o/][?T̊K!J#n,~w>3e -/n_~3, tޝjtR5`, Xt7F26{k 5*z$tu8#y5Em03Z+L7/c  z/,ߪ:TZoE^?f-ՃHbz[>3GDkDnNN7zz!,+l�ope@rbV4Ϥ`B۞9i- W[/6ؙۚcgR|f/-ss_.� wzGOM=U$WR9eݛ/-=م(pb91<;iIBo`q4LfaxmT- /z  `vv޺qyS 4V:1eFjһl{kϔ +>m~-xС-p|PfgY2|n.( :ݾ9y�As/"fr$fUx_@Cz6vH4# ~^%5s�Be$TA\PJ SkE0�!A1qqFW/,n,ʙc)!8JL$t[Adǜ޽^`$f|wHszRk �w)2?eu817B!h>Tc~a;wmB19ޙk6B$cDl6$adڳ8P7A0I05"D<xٙ"2`�N["aJAF~ͨ)ɳTe /@6>3\= ژT>R](V*<,]+fR{ IG7ңv~_[+t)&F.,ںnSigӶ}$N-݁Ծw7V"_g81d\pKnKG<� ]7uo޺Vv./-/1dvdeiS_ BjJf#~֭P+VtʅW|y=;<_�`}|*"w~wހvXЇkK?gőomʩwu囄{wolE[|wWWc':LU2!_εK/,'>>hQpEƕwqx}e߻Cl'ܶiޡ u�`ʎ)Pəh�KGw+ny ը3Zη3G°|OOIҋ߸iu7<UYm;ۮ¨✦bNjnFoSyQz$g؞ %�@+],9}xҦY] qƥFTҖt:(}W.&|%ȮObz8yeY;?[m{c+GϦOLVcG\,%%;WUMwݻ>ZݍwrXgsV"O] BaPK½ݼҭ)RpFws}>g}e|_ė2T`.#=|"`,6H(Pvx0j@"Syxg.(H E"Gh.n+Ē$FA`<>>쑧?sS&յf,c �䔐%�$Bl;ڮ ץ7\3I/MA�Fyq?>{\J�� h��Z� � P@؂͇{ǟyܹGN�-}!P (ku_u{ 7ڝ5-'р~+wDAI V #"@0K L.w'^Wk+lf@v`m:9voy A<¦&bmP.;+k7#&Hdݮxwc`܌b>42TRz;q$_^y;lgm}0g!DŢU) :ۚ<R2Njbz{IO; ?Ynw} e~1cMQ^M5s<}ޢjI?W_zr퍗XZT@3:͆(+1Q!JQk1W~_]|vETRϊ|jQ߹�\>&wg\]lz2ȧs\_^,F溊=}zy5ls" '|(pvkyc΀-b{I_7b��ஞJ9W�f#lƋ+W/Tԩ珝g�H bXmőMm1??x_r+nF44 ,>U) ۊRʎ٧2nZeŁL5K<;+=�x}ef%v~+K]"zUf۵BX)N5KfY3wx 8v{24u^VxPu-^>;sR}ܾ)lK$9T]C9#[ޫUWsA*\8j;9`}`ʩѫ_nS*6 O9pTI /HN�Pjq,WW p(.ܨXGp H ア@| N9ČL+[|?nKIZtwΡ�timyI%I);HθQgjn%賔D9v~r,hW*G�va}o."%հ3Ιh|*5$^ [91Xza}ЏxV[g6!|KYh9 ԕ$Wn*Gp=AWq .\j>kXR֖k15ZX. 3:5v_-A R"@�1!% ~? q :=~Ht7+z D@@�BB2^{�  ޭזFv2Iȵ0(;9`﫜p/"J@6h@xG=>v`[ %QZc8w`bj`,ROQCוdSwǛ h�8Nao �PS� *f:VD"n'Y J3t �Syɂ|/qL(dՋ�m{r\ ?r씊0yj^"�xŵOm=03tk3+/;Bc%9h`\q0&6L�IBnhcmR+2Xu*Jָ DzjhLhГ.i2?n1Q+q {L0t*#qWdrqL0.;^ 3 `+O՗_#]!v,~_^]uYۛI( !S`);cK4* Ksҽn߿@v&{]F-!5V`�6__}PkҶ|o+[h,'pT4?vs9I`ّl!!�߿<,}|gO5r̃Pv r�. I KڝnWz9d V <,ǩd8<4#p#Ykd쁲HG'u8Lw^]uysoš_mF%C1=_`pp͍$~`nDo,(bŽodƗNJaaPGU> *^-"PIY�  /HwӒXծNdYӦ,"=<El SpˆKߺ<XS$yBF Zl$YBLl #.Ch,r7.um7:V`I<V�e@ o>߸yrL9r 6 6GR {ޭ&;~.v7^ZJ"ɶAUyƬ0Jr`KE7D q`AQD�W/_`Gޭw^]J-;]7ny x8rt<ݼ>�]xm9%<AF8^_~Jy"H&55vr a#)qp)Drd/]s2naR#u}[FQv@Aǘ ^L8B,!N {U�u8-I!h4@`B4hԏFFb0ws'“O}郭\[޸]Aa(P$@q$q,$+>FI"X[zwoz]v΁'Die>Kj?;8Fc@[<O}хxc`9}űL)8o0 P&V0\^lnO9Fp8X!Z$O)SE&lkMbdNF� kVF]#F-VF<2"~JV^2N+7r**}1ٵ꽞:+c^6+dlf0ty�pg`7K۽߿sf2A;*�[&uaYͽEDCg.T >"pÏ󞽿$[_�$NjM\(&g_rAO݈~o.sz[fL>7Tlkѧ`lF$}_ Ԟ^J�@I*=Wo~xjن{#ccPw}L92AHy{륵wW/ }n[KWK�ۖ ~rٗknEJO^5`|k;l?X"5�,+cYN!B+ı߾UǺ GMaRϊAB#7Xvf{>iIB/}z7I{ I6;J!_YBh c$k3l5{$a(0+'y}i'yUmc$@R*!eIvj 7Ү7~nDnw7U޼Rm=|صW Flؕ q[ A-eWuc)EHw_Y{ť Fڝ(J# 7 kAsDwӻI|i5Q:M^`[$c� �RpF7ۣo^ټH(ROn^qi}}{լ_W93p;H9(�X]½~%e>ߺKKKл\~{( +`ZVf»\pUBJG96rڽ[[ᄊ=V&tkﭫ8%xy*^x0׾XqO+ 廯-.*굹>z8|0ZS Η \zkeglt[+ u(BYA@)Dk{" X0f$[ؠڈ Hvjz,KI}g-`+;�! R���%! !D͠aH@$ $ݸ>6/<:,w.ZbJav6^k�$`x+k+zmM U E*./Rv7kMl)eL�`j s>qTؼ;o4fxszl'&�� l($Deyy+D{a4J*ض$I(0h"�paĐ7�t3p{0rG* hlpzzOe)Yܱ52ğPO~mrùgY,]k&cu:Qʆd$;֧';0y_[~ $zzXs㵸nVX̥UwyOw]x}~/AOVQ]: '6}>>:Ws ߼7coB:zS>+m-{ YpoI5@ѻ?ZvaKN,˛oh' + �߻s:zm4?KXJb?%RTA\b]n_?}tzܸ.: MeZ;j$Sv`u6/ylOϵjju_mqȭ_^v? p7~j^ Q<VZ_}?GK^3=}k[_CY(' |/"�ܿ5q<̾fk'ֈtWیKG' sHd6,9Tdfy]#̾©G(WI?JH{+%t\Kz4>v cA8v>0Y?o^3Nh\~{Q7Pߩ?eT0럚Vz3;U2׮|o3smYRҵ6/Z3#¨5Cwͤ<0ƻm/=>svU- |lF/}׆Je:r\vfWggg&|׷#4ȭ;\q9VLj@|mt7L'x[Wgݡ]}w}: 6*�`uq7;=ydDIIwwo\T,˘�R*RP?اEh[j}ܕ7m+Wwc;{m&1qїԻs1yRw/tܮKE͕{|&~LN ܸ48|b3ިjo\ݹ7/ Aʑ牘/���IDATR%ӽ\I�=sG98h+$lC6L�BD䕘<$*[$kv# (D RIJ$H@Y@c��xМj8o5޼QwDf'%R@Lk{�%bal5:ݍזOݙZ8jOJF~F87zZ~r fSg ѻoZ]ZX©F(ƛv#g;3A"+^u"S:��a6ַz)a5))IdA"r8afUl`BoT&3_WՙVϺ+BEݦa ],_e$u:H%"B<] ya:;Nj'?l.v ^zao.{5+J68FC>5A꒐{rs;v:zԧO/~t<x4ݛw_^lY<{NT KB4)X~_xO>SM7[u}[?\,r]3w�lkXl/޽bvb>z|ucEe}ب?l/0 n]?ssOjY;~6k+w}� @C�~kǖC<x7YJ>RK \zcG>:J:x֏tJ']1z ?_==Y_l.WFCLl 9Vv%2a~u뇖?쾒W?;'\1CV5 HƟ^xu#;D]Q3$7t_r;OxnIeDoC#3p 1"`uhl2l #ې^o]\M4Ao<`|2|\--Mk z,}Rmd� /_x}gfl4ߕ7n\L5D,vzxp|e>cmyϺ6;xs#35T9ܻ֏V{<M/*OmPÕ7zrڌ{}΍^!5)c 6<E_Qٿ9ѷ|<zzvn_^}wsЋ+�/.J}gR +''71%~cn/um՜D6yysNp{i%?*^ظ}{N\athʗTBg~Fdk;�Rѷ-[#S+nm9197n4Z4+;׷F؈6$ӵ{Nb:i8wotӓJЖ1y6ׇ6ߞ?2k& ,$ R`%l7 CR`GחuIUϢ󉾺hۆ_W�)�$ D*XDB%B HJ@F @$0e+hZOtZ+nBDP`3C!2!^[ ֽ۫7N=9uxoce:4q*O:@*>0=<"B{D4Dg3=7>6)B7A*رc�$�$H"n֠?J6iBto$Ep8 `'vTS̩9+h/߹ۭ˝;^AOV]݈6!n 3RYqz1W۪0SB,hB~Vs)94t)_ZmtT$81շU&m5�4,$D# XN,>e!?7~ӏLouBho+\mG+^Z&/붃=/*ɇ|*"!DY.h@:P"jF#JOdۥV;�;I GP}v܁lsrF\_7\ӿueڻ[�yg�5[0?JRa~Q˓]u%L1y:r ]-uęǦlth$xeqp^X?r= bWAS'#iEuC�8&lMB@ kqCK"�Tj}.C\!¾ɇ'Nj<>śhcutwRIv9, !nl_5|S'ON϶:Dߊܺ77FC"B[~CI)9șLHAhOq4L<JH˖FQ h8FM@ QDZAom~tɹm^BJ Konc>UҪY$FaA!Nh,p{7{/n޼܏GB\Qgks*;~v񱉰 #9'[W]_ jQ]0�P9(@Pdh4�$HbMRr g?|b|bdݹ޻uxg�2Qj g#e"e$N 1�Okeg3zK2"aPtR&PQ/?1OX_}ׯZm0>+!DѤ�)I&^2YE?o4~ߊ[q_{osuqZ"Q@k"$6>}G9lI"!h5Wc *B,Y5 Ih#lrÅcc 'va2s{F0H#<@JO> 0ke (*3Zvq,޽#A@��&! !,dyODrEʓb7I$ɏ>1`3h:8[Qw#ڌGYFO9; яllѱ};3ͅ~یqwcz8Eʱ*RՍowf-q$Gdsu8X?Hҵ^;%Wɒwƾv4h$xui8Gț4yAHR&�S[ ]gU8<*O2B>><A{`l1=5jFҌ$)pח[m&SAÙ~V | ^*ikMʹ&pmyیT6yOP{UAaCLϵ&gc0 h$G,hRuT29Bt|[?ZQ֞`MKQa`B,YKjʱ `wI}uøѣG0R&I2 AH )$ "A(H9")1 !H $ &lBL"mlv0hfu7Ƌz͍h%Zfk,D P ʒRv &wg%%\>NŏiۼTF8;o/@^DI{vh|#Ip(cm=ԡ~>9'D-XK+6P%nk~9{.-KHu\A�@@!ʋ߽7W ;S';s?3D1b $BϜfjwjC-� /H$Myu7^{; sAA*ּ8)`ٳS꓄bIBY#Dƈl5;vgj@F  A3K@B0IBtN<�pT&T.' JmgŖW斁c%WUMOeJJQdݝ`3ak^ XD89ې .>D9̻Gn2opm-ՀuHA{uSINo5N$Qa!ĵwWoGM*9�5HGB&�a|* mǣO} ca=a.5Hp"\tf+LX[FC} !aDL~/mI"xFyWv5Dg}AalmF^m|᳝ � lɠn%d*bdgZ2!B{,Lq$$.R!g�!Pgr=bs~+@_{Mљ IfQ O.Aȍ^ GC67+V=e>>Bԫ[f9/}CH)|(C*vILn"%[ t#oW ڇqpWY=B:)׍��lKHR~ \f'gƧ_"ҫEW^e2+C<.q�~4}Oʍlí$IW97<hwa?c4آڣ^#6["lh$G#]lr,Bs CBƓh"2vj�+&M' ҠˇGj@`R9f h$&I?ʔ̯v~FS$"<d}ʱf D#!A\ !NZ~kH.pOlT(k8 H(e&sFZ|(yB�$jHHA�DC0c"1 1@BJ%$P"(%xŽzڷo_yލK(۝T# D �1LVF � #Ƹo_ІY1% JΗ$ f!cl6{[;L~~gNQ $�$Àk5ؿ8.%9*k @V䛯|W_޻Ѡ5=3q}ұ'79ݐɨ )!A@ `>�7,L k; k],+ )Y)eAꌵ:AՁ&/h[س:O�86ʱHYgAU8_y{3sM՛kXr )1P_|8m/0sf;ۦ98Q�O32t_8xN`yyUeXt0jf;o<٦h$֓f"]uЩQ;̇QׂuTwu";zGuwR0%sQ36v7w# lB~�h6~7s ޱ\?0pQ̄rBr.B&!?|9\ZQШlmD$3T8Z9 =.BܨBhD[Q4y6D`[u#'7,`'R~\Sрz8^+[c%8ZN @")OI9Qt5nGJ}I(yF5B[J$Tk"XA?6T@ۙXWX a?#jC\E}]X,,a#x 8+.?im � gwǂa=ez)$!啷*fFےDٕ+G(T؝kh$Ja+ p]``Fr66l9mgGpi:ˌΜ$PF̤+vaߞ#?;256 % %Ig8!/5yfr]$>" ً<AA4\l�(%ٻ /6eB#8H&uhG`nҵ!" aG=>OިZ<A=F$z|gQަ_9UE+@;cLK8J(H܆B|۠m'"VXS6c dΗD(IJ1C3=23R'V~#NfX)rѕ!R`Ib\^z PSJ b"GSSSB4A~Cb( DLd$ (@  H($l=aBK0[Sa2\Y_jwZcK1  !DqB4$A!�DB$(?ZVf1;gColHGa g03@ޟ�Q�Yk# 9 FZ^Mﳗl @�B;h""QQ,N8=jL"+z㫹sF'es<F8ɘH !`f# EnhP#Zү"W^f �L,%rD"��_ܽpaue$ƦDLi " ꭵW O#"eD(8& f3BA*bGt2 NjNw=𶲿�_~ewRq,{_| y++7<Q &U}6. vm!${jO,-|jo30Mt_skKG!\ux+q!g!C[,={`$cT=9NlG-Ļ\C*Jt`b9aûjPLݯ򇶝~ǤgB`6 f~!KI<F zt$#j.(VvR#:7zsaWP^(I. C;A^(f?P!z=yChK5-C fڎf4Z;( #/�zI/qԫAp}<'\@�`7 dIf/6|@+Xg{]_<mdKմsr=;uӟ7'ꨌ"*BH-Q/3cmsI2&3Bc$on! QfE6K1R D#�5<\ٖ+r~k<^}tM )qvO{aݎYbJE\4ыCl`ްS~VLc)GpI}(W)G15{V/@7ذ+*U;uy*`r754cscU,5I6@2)GۊPI^m^s˃`QvIH"\\�DD(d(Iw"�@(\�dA�*q#%@ �8}=1錷F0 A4%$�A"��  D�zJ�cADmQgN}P t%�*yբ"7Sf9'~{eo4A$l@��Q<z8txf|%P Trfw㮇MU""�[:Av.|fN{УwMiW&B,�H$\].qfwC`0tҜ*@*؃ DJhdIYD$I$I(0 F#Re�J|;jyxzSfWvߜc\ñC^k{m^k{m^k{mصmdn '@mBQ�@�DD@RHb)A{68ܘtN\ν\;l8J P4aBHI $eUGp;[ n5s!$ hEfwݛP-,Oq�R;Bä97J D�jぅcOn߸~ E$D{{vn=t'뛃$5g0d !E|;!FQ85F#fU% G,4ŝ TEPjS-&+f:8 }8"z,! W I?]uStY̕u>=!CbXYNTOn%sz^΂~*jm�̪6fF5C&%m  :Av@ud8n/^`oΕGjO7z!z2eH1W a5핛^Yᝎ5ױWV*rcl ]btʹ:Y6W ;Ҍ զBf)B od΀`Nq0T$0F6۠!J& 8r+dNX ޚÖ(# JiIm@!BXL^jҨs:Z l[nh,0T(a);H� F�BKZ@FYzO@t y}i! BTn{!02F*eG~Ö",E`_-X/P52v$#T+⩠I@CkjˎPB,[NK 9 1r JY搩FY57\9d+;[qܖ@rgE&PWzTl3eǁV/&F �(!Dgv؞c6vRv$4z3{ |%<v K f=%ʊ>u|?Gh19"rB`'B,OFdE?Q HE_'h+G!|2b}O#L9<!4~΍+Gh>hSeIY%yy;'-| !'E t8vM_26{Gg)G/}&lGs$`xRLaN91Ü+(Vk(Gnl@ȴnۂrԩ5ArOydr/BFk`_I]_rtEF|2=Wb!lؑRA$s( "qOr+@hNP(LZpTc<'Ν~xa|N pmcOz$Mxfn 㤇0B!H$$ �&ﵽ@� )eD 0k˯r Pƴ8�$e:wxj^f3x#OxgN=4=iC!>ΣwI�JbƠ?" Oy""$ U 8~0DQd͛C&FlA$'c۸ʔbcؽ" #dodրbLi.u,<0 pѬ|�cm&6.51G [xe'h0[Qac#h?(E -px7p` \DBDgN9@AB1g;CI VIZy_`Y'. vVyb]veد+m #lTg!JM洅3THʇVW Ĺ !p^Ur"߬.eI?]Ȁ˾vNn*;/mTJH&j`*C8 !ڲB X+Rvk.yRmb޼-XzRX�KB9De(<!6 >g!%(ap3㽨˺7r.7mU`Sȣ XqX`Ź$^Fه(#Ėc.eFԿ)ndhCyrN_sW\gdqLC3n! s\w␜O 0O6B`qG٘鷓C쬽S$=X48Ƚ2cHWh:yX)<p|_GEXcWPĵ|�`賭�qW>n%;??sXt) H.pD_'2D_ r,E *HFz#[&e#_# "H\9B#oA)F*o"adN G9IqX0eGo0e%! `-]}C٣C=)!G apӚo;Q<\�F0-&MH$L@ JDR3>)D*;t%1aRӄzI_ET ,z� DZ @"$IQ<??ql؀4+Np)S"N4ӥ +ҿj+/Bbjw©ɩNxϑUrw^  pyixڅ wV#v^^ hGO[/у:Y3*.e"e!s=9@%% "H*q8)\|&gր6C ^uES7rSlke|_Ɲ.[V[@7 rh;k{I/pSݶv68.!(,U4̢<�qIEvpZ,Ķy3%IǨ3<iM�zY"nm|,,x ?/ϟ'AzVnzW;Kki3KmP ,fly9bOAt•BHm|k٦!Q,ly6޽7Ѻ{rk{FB!泶Fa .[K?mТOwޞ66J�71gG�-l)vQ&oRWkﯻ˓ Zδ|<Wj g eۻÝ�}v�!9PB7C� OF4D1G)l!AHC6'>> zUҠ2 >s`QvL4:-&Z5ZS,i!SoMeBud�p!)Er3fv@�y;`Yq! ږQℹ=|"s?cE`#|[l#+?>0F2*;K pFދ ~׃͑!Θ ɻQU<e猽%:?|~l6z>8]7 r4Z3гox,,9rrQ([S}mEhlVl)GS_19nT\ r; w@% =As`=A%u3PYp/NdZv )fyP zfNwΕ< @^H> @(@8LB2RnS {_ڡ2<~rQp<A{P R BJ<AF+<Œ*&1lcFkhyǤ)bQv˺m<5Y{6�:}liƬ$$hzíA?dPSG=($RB0DA$%C!ecB5\ͽLKQDR&�2Da՘dlN{뷯A* @B�<J $ B7>tƚ`GԘ$>X^n "pSk<h)�Dlq4 t)Ovࡸ)ekK8hkI_�Ne"F) z ̚tu0;A.X/kdVU c^mS5_3Eh3O2gQ`]2n\sߠ^w&xb# os$�s r` l}Imav!g H(yU堵/6<#Pax᝻CH16@X*UP{ Ü7|+'$GS6PEl0AW]j,�ǼjBEr3 !u3 "l0ic 5"jr8"s3^*^1nsCH0)F!]Y s^xGCVu8KpDL-9jТk>z7pP>B֤uAQV<bsv/*U^l>Thcjlyē!TԇҠ5(BH{cTq$/ByTm+BHFH+mїRT5D_- <r@A*l#\ȋ>Z,ǮQ<G?`` 71ΈC!B 3J*Ɂ=~}墬\9 �ׁDeB1BAH]A$،v~N60/&:_!PG/6[<r~\hyX r9S$39�yEJ\]# pw� ȶ!ꮄ遾Uv$hQN86N5;cm4F[(NLHbJ(@4!Bv);top#?;&IB$ l4$CXȱ(d `"|>MW`!@xs|ƇF>Gst ]Սޔq;lf}x�>'3\#m6qq(FAmm6*\,@[ڋ�0^k{m^k{m^k{m7"�!$ \L0Hhco6X{&<܁}g'. ޺kNgBD#H agvkibQ4 l6[IIǒdtVWn:{yh�@� ?$*ȃti*�(�@13 52 Q m,qkY5~ B(I`52A~ͳhB/bջ0|SYG; ')˳I`#]T<Q̦GbU@{tVEGe+SY;K+#U m߁�!EA(C<eIS hSFYH(G8xB J2M'Ի57|@4k(k { l ! AaoFr3W%.rI0 7klxg̯jdf qσ"x )mE5֦4�vo=Q;9@(Z؛>eGHǙ(1`nGh .<!(iFSLיhfMayЮp4G0ѧ2)( 6< dsYQ8B@#$CEB, d�Ĉx. @BP]RZBa̞&}-d-.ϜfZ܊S(3QU[#`%6W~M2'PIm<@fű<|662ɀ fmeqs,SذL 숁+Gs5ZAu58\]m#Il !Oϰa ̴3�<;_qFeBA15 <A5y(7H&KL#cvTs p~}C&:2�j6@i1BU㡰44V +fyr=Akښ+:\ѧ<)^!%l�l`+G2$F+C81O[ ?+TpQw !Wv{m{D ];wc{ lf?�ѧDb%,(Z!G EdQ%,�++ 2( "1|՟ #(G'CH'?(*7];9+B~K<c)VVIO`96l-@vEHT lG٨�[n�Ir"$B""IKe@()~ԑg|O>SDc `4h" )E�o kYH h'2Aah6Gƥ};�P&DH k_ddYI ��1 @l-nc( c��BҧL(c�h4V~(H3KM z o-gbV,# J@;*1 Sl<yr'n}ZXjG|@Ow'UK+x`Pȗ5/. nJ16lE.l4h7nD)Bи@v7bef ,`EctU1O.d@k'-wrik;EGmC<չ8 ؤ6&9_먓v0`6 σR{1gG; Brŝr忠&B3k DGWw!z yBULQ2p6]T`T/eÕJ0.,*|,̏~W"n!p BJfu$Els{WArM  qx9TP-Tk{Yn瀭 ^+l,xHmsHOLL �H+Y>eG8)8 59BlA@^X!O2G'S4q}9(TxbfPү\r9f?wax[b\F=rDX |k 4[/) s•#hq!̓)*K@TynW9ښm>[,G!G+W`>dc};?PG*G~ #[c{D)P#�ؘ<&ragA_D(Gq~mg9nkzrn>Q1B|ctkyFv9$V~[ʅlgGc<aR`!+,yOM@pZr̽^m"6 cny?;rj h6T, AZ!Z� HD )$$۝lgnvL G^?ƔR@ ;)₰ ){%/80lh'#D!PH8J} !Hq,ćU8I»'&Cu�RAQLW.m]|on4jZp{$>o{R:d(yDֆ&H$2c"(0 ;r*)6-嘷b-Xw6MwLG`>k{A-Tܵde^NUA 5 {7N]ǧQmHЋ܍/o:@fM�ɥXg0[h;<ͭP{ M Gkm/ �"DV8Bq' $G{ڸk{ h3Xk{kn|@uV2x;_Tes lS+;ek{!VE w6gonrW;S0 n|Eެz$_ 6Br=LâHQ^\+v!  !Ż@L!(FP0{E0LJB+Maw{+9WD2XKA>``*![#!JR U_mX7!)9ASczYԏI-R9#zeڢDʎ2b,eGzhMc,۪n4†e$[ۗ3 @F27 fٻ@"l `fJ.wc~q!vOw~hTإP` l3ηej{=Aac$}p(#H\tH6/Or'U;sB#OA)ģ!껴`TO=)u5R9<S&Z,v'{ nT!ÃmA96`#Yt[jFE_=O<$[5[y1W�r,r)rO*|TӠ-].x!\0+xj\K1LJ[TdqEG1䮝_GHTy;?r�)?B$1;߉x¤~ ZQʑo728eB Ɗs[9Xe$p֒Zq쇿C%F "s7050; iw45B�$ HBAw5}l'G瞞S'zjduorDbS`Q RD~1AR@@I%ID$A 0v< o|śWz� =O;5��� AGj } @bF�$ǰlC"R6 fF #-DALp8`4I)3Buɍ/Ʋ/ 2&�[ VkPK cѾE_9nY ]Ҹ's܅v^}f^vak!ٯv�W<cCy;f- ChwY o,khr ܷ!g!C[Vw<,lCnTKk!)k!72p' !(3k{s6 U\ޑxyqQ!j`|A1/�  6,Nԙe>[ab*\nʮPzGG:nQ`GoWB }-\وX4y]=4NԀ(\䕸N!l@'-Cahks̡l�I! P5M!\cU+λLd߆w1rr@�ã&PmeWdyQvܡT@nH :~g .C" U9AR [!ŶDB汏^("!![َOjRj _Z#vbC_]dT�SsT%�œ)Ϩ*T󾸢֤+2!>Z}clZݎr4*蛋&z},e#$QWpy4r/p \9Μ"ч+UOMxXm[Գ9B F ~Xs}^КMs7 ̉!,Lh3g&W:Lf"įm+B9֋7V!JtkKpvvVJ)tYPA`w !Mh)H?�0.,!B"bB?8>77h6$N 0AP�BRREQj\>|^8aEﲵ.NE@D %@0D! ∢! f{fvjvx33nd"Y..pH%DUgYo" I$ڂ+WѨlNJ � ]A@B)|d$Artxߒquf ls~.m^k{m^k{m^ڈHo4;4?&$f?$� (hƭGyl{s7^Xoζ0ݤ-% Z �vk),|K#luv<ݹѻqecش*g%?|^PM+>%+ >d44 Kf"BiH$j F E `y*[ciW&BI,8 ]Ë=?䵚9-N!&{M+_Q{c.˯׵+U>̦^CR9�{қM =.o@yq\tIյ2(Ѣ#z*FJٛTMebXYi"x n<Iz;Tb-'I꼿 iQ_3$x6BL .J1UnN2v؟-9`43Y% Tr]r]�w28f%x_3恷Xq'C)e' jh5 !b=/Ad.9*rͮkF<ϊ9w"5zG%O hoB�FtDp7C/&v/M^ڗW2r8B[>` ,V�[[=j(0#NgH !`bƴBTQv5j^4 >]ϕ#De[nbCȾ@I(,r#7#S9! !Ɗc-Y7npl(!F-#1=dbLeNk1m 1sUuq}vN8-%U-/@(Gkކd;E8Sv9;߸9hFGVJY) Dj!;oth0wQqPf" BhQm;-d?<4BN5r>B ?B!ĥk H!7-DUT$"\*OZ0#'h+G`c�N`•wk']y\0OX97ʯ)ȩL<)}^ga#o&\gA`r gېGA賔m痋>$m[dIqgUg/yT|ռy sXٜY"A$%/(#{PGc$#xb{M7y Xv~~^W cXѺz#+6B,s |* BDd^C^쪽?# ng4`̶HsI5Y>HiVBeRdH�AGIIcN=?}omlEh+#@M`I^ 轶_I�56vgәqw޸[룾LQtX|i] gڷ}ɚ`Qhkk;[DR(&P�va`HNkDQ4aE)8v6>=VHYݐ2&%55k,34m3+ӶLϐMVFf +,-fh׾17.u,<Nj9,!scX^4ٷpɯ |puaWvJGemIacT�%bJb{ 鿟dΑJ�wK!lYXG9fvf~Ejz܃#x2`geW~T 0Z_Iŝ .|3!Wj"9̮p[6s6>&R9Bᆽ&" 0|.`5s/;'7 %v퀄c](vdTD! *^#^s `].yRmb\?Bj1P`1gC.GHMO',sd+RvjRDYn:ߵⰤSl*RvXa:~L,m,\@cCH~|qI(;uF٪dX@6_9G!,DGzΚ(ג<5~"ę BXw+>bWv!<ۗ3|]"đM΢{l @S$2"W9Z"VzP^?<_`ṛr, /p^@pt>�O@v~Ǜ//rC_77KEOЯ߭UbT8bDr-}fPpc'} 4,^,W\ηb/đW<1gݽ^[(cK Rnت^(G3!!y]eGy`<R꫍iA60||Qei0Sf�@(�!@@�!�H )!X 86ӚlZ@(A& dDR&Bv}%/]WK@sJDx% h8@x`~ @K&*sF%QC6ڵ[o޽wo+ aS\G NřRw˽ uS&G:F`*(&VJJ@{r̛@vt׶Qb^>5wS~uE{Eoam7E}6W|8M.$!ǝ- k?\!|SEåFcT"Bkk3vrc@n-V§.({ƺH؜f-eE~O+SKS~n ^7<ʁb$I()L!Y–)e}Fg;wWBH1^^gRw_:xXn�w7~e߈{%/'N壼+X8q 7AGR%3}}Dx$oGOdmv^rU!Йo+GmgkIr2scc'�ULʮRyX'Y:ʱ*v ;#TɮJ{%eމLb;lw|Ƽp=)=nn4ݨ<B5#<K<Fv=rÌG 6JA^He=,m/&J&ؙ؎0_fW>gZK˃B%>;$D�y'Goߧ?PO/J`$gnDl5 ce_w�DP.p\ e~{S%v﫲3)z:Id)4|fw@rAѯ.El"bqqEQ 8I2-i#@Rt�DBL3m�PR55j5vuxrj398vQF�Q;^^#@ ,L oo]xCf08 �* !RF>ƞ Ε^@+]G( ޽k hA3!?�4&h4p%;DQN~$4dƔQrjuЕҫ^͜"ՀދYGN\+:W4]6T6Hyk�JS]3L� rCk2] jg'P F^X[`�U@*46� !6L^N BLlѹA; U>8 ̨%EktТ@AHI 0L 2xmk2Üg�`rqH%Wc4[1$L&` ߛO(#\5-x[Ӹ,DG !hTFl0w=/$hQf pyl(Qfb J_hljm`C>֑~- F( M,i #[)GE*@nlZ8F-lxQCb hE11k#|\0oqeCLz3`!\?瘜."+ 7aPCr!JAV#n!>1%F@aú2!!1p 9n`CyBT& }7X΃L·<=P1 yȵ;ۛ |&a{_o@R01v}Y+!ܓr$,AHUC#~t4k'qa'U!x0P!Bx7]ls/CȁѧW^ygUJEE_N9S>ѧ{mV D_-R`KG9ص<AG+G~ m)'~H�'A#= =QZ9Y+Gg}O)n[r[%xEt͑ ,P72AbA8aҏ3Uڷ7њk@$%BlGqlAH'CH'"LYv~$LY-(B\O0 (!p߂bA$66Ϙ3}/Q`Z/4 F!GQDZޤHZd � @B%@!P$9`0&'…Xk(ar+KVzݕQ2596nc�HJ^Y#4� @@QL3GwnvL1P6!1[ߞN:%1n8Ǡ"~{:k-wwj?I:A AH(q"d-f?B@D�D$X&2F.I[!x �(q0"{m^koݿb^k{mڏIy:%��i!4Ngw)�" @$2c 0DQ[X8֘;~Gn^GnGqJ;MrྲྀFYuM�Q@$a[FŻ3cSh4~CpȅY5K.a.:Fd۩/-n\1 l @@ @ǫ_}MBAH)( )Fםm gwYg,RJ+a%{zď/LSJ2(̌ [8/{TJH g&[f֫غ9lY1MKQ]دD8)+-≀r窛ZE묝T_BAX⛉lY! 9Zw.iBr$�$7 A r 1#T6CZ۫?[+7SYh^ job)d؊fg?4_VL#Fnd2xȭ3ض:ʽ>߫U@U@�"EP 2-f鈞?c33ŴFRkZHRp7By]5?̵2s λg}re~o4XhP[]P&X dS l8*cM}K ĭxp l w<"z5"@25-!l=7 Ʒz *Clӝ'絨׭tN̫ӭOxm1 K7؏Eޱ�lW/X#BEdlc([oqNXR(\]B=ΎlG@OV�9>d, !vupwݧ ѝ 7-*N۲/TvP.sr9v똿dá!4'zye+ r'%Sq `go!Ӽ > T-*zK}.]*7-&½ g"k)Bs;쮗޷M' b:8;lq<� B Bb+rȞb;l4g0h�1R'5K"Aө!BL!$qls̱>'{KbkH8o GH0nW؃_#xWF}]G6D "A9HPtQ]R g�֘�u'F 90(<)P{Pl(AvKs`GMs1`>(˓Seϩ8f:P61< M썡>dũςG? 2s|aT#D S>!Te_,1X$�$<pH0@H$:;=;ȡ跈sF}9ȶb=%Dc|DHްOt:n7M>#%l?� | 9QTQ#L=:]7l:]gcsO<඙Ŕ԰?\6GXg۶ʏYɧ~ǀc|VQ!r (I1MS[3 g7f?͆Ri Hkn/md:I[$iQR|C| Β{\{$IT)5fF|+𤵉tW#㯻WdP-qR1 ß{ ,=;!ΧABH,@6M,ؓ] p䔫V@THN_Bx畘ƈZB.Og|>BY!׼pzg<b k{-`60<!D=D"+h&.)piXFy)d` c<'!wy PA9} 'ƕ6kb2LbMQ G61a~_|*;js0&;9@!GY6(wG}ީe6§bήxp?Ωy6>1h$cE9@y)琺.tqZg8ib1gIk9FO}}+n 99=�r9Pst}d Zo-Բ9c l)5ĠEC$& ].8=*z"Z˗ξDD|@&B?(Vt>[.>pv%"A> &C48|TILpz[2nQDvꋘT0&ȒP!DH8C}svYVG9`7: R Q\EZ9FO~E"'=8)E:G! R_ R_`v e1z~9HXjRԸDT\MC)tX$X IF}}3 >`RHsΏ#k^ r$ .NGo4\puQDrsz({<UCB绶cBDqrtSl�60z2XlBv zh�"`ɔ[x!}Nd<:YnmFm6 E! QDDcMC±R$=q Fɠtfnwh{T{nnWY]5\\t7jiM *oIH!}u@#R+Mzӛ}ګ?M�&?x6 sGd5jE,a4 ze#ĩVK*kDdO89dr*Qx,?!I|}>D=h_*}i؊sQ�D4Y<n|$*;G rSFm0NF_!^UDlB`[h\֐ *qµ#ȅl09ɗP@<8y$k^+L6+D n+�l̍ehNlJ9l&_Fˏl|@V2x3{L& Ml6_xMf3}M-nip:M#V}lJ.H0AШ,W(@׻-<#ej/L,?<&C>".Ҡ!B6BX< F <G2<O!u|KIl '=A}ݽ"YE@#. r^�BHDKp-LR OCG&MO#/KXXvB"Gp@pIq�neHЈ*wvqXȡq!_b@N8;~oړM =+WAHf@"YH ;;$`[X:;ig ! 8; .kd6v*%P-;=@/p-jLJE< �SLpsc")tǙCaCH.0xy"0wP!yI_tu2)d>w!b%7Jc !9!z#)Svʝ#ZbtDEaT|bgO8q%ֹĜ#a.B}̳E"Wzͧ>y c�]K s.9VG#`YFq'R"GpNHqx}$H0{# c g !@}_)6DH<4* -l{~blLy?ƧiҸs Ҥ9ULWWf `.*S+` H~Vuv,W@&~"A<`{1sv 'ۿ|Xݾ�FeF dYJz8#PJTJ@zo[m۟Ï<u`ֳ֢>mj5h]❲Uzz<�H$Ifgg7S^~x<L(S۲U}.X4v#"Hƙa} no}HUt(t�&f4]>MdZǐYP[WJ)v5p~03@*A�}�:Wx 5.0WD2𤞭Lq95fLRkk ԧK{_`7{5?`^+ǹJ𜶕G&{&BBNG`9`aye&P]2*2˯ۄf@ݰrSV y+6JQkEr7.ޑs6]"&_*+NX m^V1qO}a{ 7@]+r!6eX-^Cxr\֟cA2}6t5Zf~[>Br$) �Q~{hbys6U\Jh4e!n\߸__Eqҗ&ٸK"k{CDēKVJz'1WRyIL\B7,ʽxQN9j${ȼ qU!{4mT1Exp5wvƪ"Y`)"aE]*/}F"H"}AA_A:;l,x-p^$q)ƙÉOz7&7'Wyk(r(0H9D&ڸ) COgyn`Ch9I\Aw:__o|8;8 gpo�V/@ ,+nRPYS$%:Oz|ΧYƶb\a $ա� $H*F&A%! o# Hu�mCGD_ !%`T>1Gf¯? h+c 9)K}%/@`#B}B>vAWP8G֝#9J0rݏ!BMKL ǐ�R� ipm< Fw�>oDQ%:Js`{-$XE$hu?`Iq8R8G+�Q$䲶aڍhyId2e !/whTd|B@ 6܃$%I$S<DHsd:?H$X CEA #q�)(HqN$H'lRiJDx8Fx-"WHsl/5@s{ )bFD:L2 PPh0Ný'f/W?te}cH;8nwZiJ�8 ig"b^dQ{;ǼEpsCo@!:=*h�j 2DPI JQv4m\g{xݽH /l^{s >Š~&*C�Y`> ƣ|Ҁ1Xū,mi$8E3 s÷hE* (N50ju!(4I{vl0Սƹٙn `eZgDDfDDt0ӈV Pj95.fLR յ~D'U\ɉ1 ". 259!ê_&:y `U:DjWZ"zcv+o64�_{&BH$Ftr;Ӡ5KM|+^Oˋu}Gn#G<ΤajPsu F(ݽ;?Ӧ-ymoZ[!>5ra/9k ZD\o7؁]$8/dJ}Ov�72n49 8#9]OΎ8iܾKv zIgנ0Ea Ć׼�I @DEzH , \Ô &(&rlA⣮t0E z=ҫMenn-J* <*�%n<:_p7:_3W|~{':1 TF}5 RڼgWi~#C45]&#(qtfYg&"XlU$Xr#(/|JC!u= 0Dח:d9}}gگA\P㾦M\J@w5OX&?CYi9||BJUU3 RߣgA^!wfS7ͶL3d鎲 ZDL$I"Jʌ,,^D:3Ww&��4Ҡ@&` 3=LVC {tE=}K燃:#=I;ISMq,ւ|Zj T7Z1>}# Kc4 vs2UJ!jՂ+/\LMwffzݩ:RI�д.k]!޵!� P)H�T@iՍO\4[JujiʳZ"-`"@-Ѷٝ2BPTQ6x?OVJ;iTD@� H#)ЀHX݂ ]ڊ�>if]޽z_p#l2x3C&Y`WZՙl~R1w`م\'ׅ{ڢVJ3($+%Qk9+܄DbmЃ!F/eKU74r9W춒bf@g6qK/4 }D3T ^ vx.4A)^?o_9tT._浅oP d~}$m:_Ϫ] P7u0_^tHh+F?Lt o?3$Nx؃&]PtM',XRډe.i\x'G 'ݚQr`54ɆuÏZdϧU6〡DML KZ^:jtٓ^q3grS/o ukҘ)Qbt~D;_`@ R8ܒyEw}svpd_p.j{bKC �@8X'.C`EOF] I6 saWPR+kǽOYS?Wpg¡};SBOD},@gj ]9H^&&=N}DŽB懄ɜ*GC/c^'iR(g;̹yJ7A}QdV(U�!*MruxH1| 3<%r< \r#TBꁻ/Lpzn7 �Z,_-ۑv}c!F $r�Y6Ffy Gv<|߱-v477x۝4ii !A!"qjʏ؃j߸� r  A)L iܾ~ek߸z?3MEG\ OTj5jxo/_xqyW@m0_K|[xj<_5eFB*I(Ӄpc'RJβ2lbr1"R 5ϱ6m;c<šp|ID Fг8&Z61>;!S:_d߃w]0H`!l(NL›&e~ vW9BDSGNF7[&:&cĀ޳e=܉ �Bb 18܉(f!X\�~<Pu+r9Ƈf8t=zkpԂۢ|ŇX|7/ec`O>T MFv y|Kl@ɇWb&>B!įs_W>(8;oήs ^D#E"O.kiXb=pl Ay)>KFX_J)sv<E%B_PUC!΄*qv @TnqtH@.6sP к}o Hvr{ҁJU\3v Ba@dGpW(tcrȵ6NvQ:!D:%i0izr#KBDsHhK"wz9B`KGppAЎ+�5!D lcI[`$aHOI}\AUG. PAnP!Α]6y!¸rO'%M/T ggH9JBLh�l׺Hswe7` !zS0]dyu C؛}RK,(5yQV8W BH0t<IRFbhί??@4Wg䃈@9:_ 횭9* DҶ&= 2];G 9ZT(+'ms3wvd 2ub=оBq4)v7pF ?ZkFY_oyXЊb"P!T)hC;w,iMuaյx;k*JU!$|3*�4(lx['cA@' R+:kp$i+l.V� �"9C6~_bx6oU jţ%xa䉫/Np4_j5ЏWZPT`u2R �iffF)L@!e&Z!<.Up>]Ny:_<;LH&S|Zeb.KƁ`eQVMTlb*_)דޓr@<LX.6YiŴKex=68şUUrj`\L$3\- `Zza<Dݔ"%Y8�3dP>^p  7�c&XxCl L0"a0<,YN֡� 1fGSmǶ$<gZRs9 `rus!` AjI/<瞔'޽7j"[LbHdIf- !` H`.9d%6"k&8pxD`L CB"S 2>@Q?luv t O $l\{s3* �BzF}2S>;HM» !S!l <DD1ȴ\ !vS' "Cbr'81K K,CI N8TT O$[bNx/'c" G҂Ę u>HgP!t>Q@>+a0r<{0P *s-1�hYI}&xaH'PD@1ǂwvq "AKBQaTBb =l ԁ-j")BޔaT$\"GQ##=S * ruqa&S(q7sNݫݢs  -~_$cΑJAnB's,|ھ64Xx${e$?tAY1uԇ Yp%c:_wXtԍX׈ / Gd)B:W #A①@5F:>$dFFP RB"A{rƱ$dҌ"#D<5C8GIDο[(PGy365'<΂-[,͔Jސ x+ !Tݞj hY&%�5!J�R87*ۉ>}??vSqWn,_|mzSV_�DDPH\V.vgRi;vPϟN~g/6ػ�Y6~냍u(� ͕@*…NzrSJQ!*B Mk.aR*˲-w���IDAT~9(T"�6Nכ.q@.!f`:9.~V)Q6$bz$^Xt! <UjϿQ|]np..]\'%6\jH={=%bdJM ߆rLk00B'b"h|rLp},ʓP%; ;n&Al%B|y!P`äDmg$EW"/z*oaq~7KJVm|K.J{)u (x` {1=/M}<APhwrl0xܦ">6 Ć2N<gDZr|6Rz1S@p@Xbك989cy =l+R Bow9Akb1g^%6XPb#�!a !Xx%ˢB;B0D2 ĆHJ!"ė5!6젏@[!fCMAF*!_F0.>ZXlG  pˡ{yBIergg#7_>!wDH _Ky1D%hU|!2Y`!ܫR!Tx +H*@V ,*GHL$GBB$rgB<�!r2P)B|#xǩ�q㨈 q@0jJ"9s1Q;�WK/)H2p1G67j !osP MT63dGc4sS%'A.j/Q_i$QwI yWy!FqĂR_8H�<p;! < R ) :II)? cm$ȝ)#A߃, .�Ćv(X=QA|B ["G@bk8'-no4�ij"zxIzZIg~w]]z.tesIgu#b>A}m*obDkI^wrz̉[D'ڽP/i!`6ڼC:#AL1:�cq]=|j>Q]jB,LND@H)l[?fVmlcJZm==!]#<q 5�Po g%=XR]i-ۑ^,aj\1Mչt6&c]>.R~`nq_GM1m4 aZqvyGW5&x֊Fe<m@'OIsɂC4@ M�t{/Ë;!.uf(*b0~8_d]mgDna, tq*|'+|=6xR'�(7 _n& .Fpvb$%rh(nɝ8?gBRKox !D"P'CK^pX>AngQd V'XjT BHj4x O4UUɦ\!D&#~ZM8!cC"HI&+w nCDC[% NO$*B,'-B#]D4!B [ CeĻ69F}Cx(Pa3Ǵ_A.쿗B7,Q h֛b98vcL_0 ǹ{Y.©PjB%9l^{G}sQ_%!$|!8*./QB]QTy<6;> .ΉRfErwxxt v>ci/Oj2%.Iy z\$]T8vn[V$yS盀d޽a)Mi? 5FD%�*xUMq}fǞg=NgFCZ]ٸvs L V 2a^*?y/z _8V5;R +īW/߸ym8iUzn!4Sq?8n[>?ykq3ٖRx-(oo?'kڝN `8rT$R b|Ez͉ /9-- o]ëR R|b!nV{*/gz3[O#&x%s؏;:)ܰ~4]5T1Gbd ް`n2>]֪ѽt_tzI&Um.vAG󏢉oPG ܄P4ُZ-ſ9!B@e5"cE .n\~$ýUm\G`ya&ҾDoTֽ.oJU\襲߱?L5^/,B{QIGuԘAVKD}( E3u.{D7=oѲqm_Af%&r5Urvhhoh wwu,$a#o7>ID6!Fe cMt2y$%VWf=p7dIcL Uu79oW$d_1㏪ !Q|(ydNl?nԝ&{'^ml򙰴ohit:V+M|0G0 �%\ Ԅ #FI�Ri$Zgz>a:}3~CO<􀖖6 XLkDJP|d*oQq0tf~fTgm<g}?DF�.; _C[`vvW67W^g>MJ) L7 +�R*M]Ԥfs?1*T1�Db.gQT}xzkĒϲm4 ܹ7;w[,wbۿ <G4AMjy#lda;yv1ή0A.Fv(uZvOJ,xk{cs!^l@Yap{ʥcY !/@&^|g=pPg6p;썐(Aqzyscޑe\+7KQ6z<̀R ޟsفg} L&{<h_>1k|okN!|YFSgAeNk߉9i˓Qy[u!!TI;;<K XdZgϩq5l1p g�N>?CN�QkC%֬nJg @@vraL ;;d iGH2t 0 d*>t>#;Z*١�Xy rg|�]i  Ȝ8`FQi ɕfg]FJN@! ƍpC{Iq7`s䨐g gAH0Tw|)y96q(S89 $R$S < jΑ+q$qeH0{Pq`S9AU/|"\o3r@r\ZBx$7F]9zǃ/wNkV L&l ,W{"% ̶c)#0-m"rol_EEmTDh482 �v33Ӏ Y &Vgc�$i[j<677ljjL&ǯ]:}k([@MH~EÍyonR;SnYAvqzes!}d9�@@l>\˔;|rOukzquZ$I0Ct4H Q$Uw-fPl4 Ŝ/i01z rUy}/##)? eʞkl1^, $^.�XxLzE\W\v* >n (n48,Fᵽ\_Sl5A cx=k!ڑ !uunT ~5:h)AɈl]`uT/<wr?D Sjn=3.ջ{�xr7l Ba㨖9;z&x3ߪU:kdhPQ+q`2h5cJ:8CHA'q=&7﫧(&�=E9or?kXyVFrtCUÚs +HMi7L?R⣫A 'lFd>҅*.2uW:wi#*ҙ`CLSH$[ \dBΏD ٠1] Zg ulh=POw9I(- f}-aX26׏ĄT4!ο߯HФ6fyH5pL5yWEj9�+%:L#$W~I`2gwgdB8Gw`B~ƀw߫`6^1{ J,t2-uCDDD&@@D; x ß�FiKeRTg A3qI:kb;ݛӝN{3Kn^:s[eb�*ߪѷOpÁL?W@)z3i^i^9M5NgL/a' ��\<8yV`yv? )D�0&1�"dh0I$rPb,Ƨ4U`_tr*<i�QD+W2H+u앭r-pJVѭRIny? ēȈlP;[t:9$n> dBl=l&0\z+5Of1Wv9W(ϼw gWnGrTٵ&H +n-_CxȚm*@ڄ䦦̟7rWoh@ JZl�{Uɂ 1 5#4  @,Cޅw~`Ƕv/pҭ v'@ jw�~ZJ�#@k6%xO\+QCg%nB~ [ Sx,Y4/c1'C>ͻvO[:;/ &DG !)XT2<E!Gw/*7쀿:@ @ e*sp3D_ycpsBy&�B L`!bwyM>AY!Gz0Bh9I\Q]G:;�s Ӑ�=`e8g!_ΗRPY|E$Vjx:bvO5!t瑶@^J^$CeA'4 B<-]x(B,[@%HauH0H0*#A)$ZJDcsV}ɧ8=InqH9$!LD"H h"Y)1$@3Ab7#9 H0etNߐ#4!B}DGIw [>C  ")1d�R8G+�Q$se|-LC)ֳT8G�| ! D $؅$L"99CHsd:?H$X CEA *M0gAR']db_,yU͙Eɧ,s`v8VxӨ Bs3�|&$24! B�DJgR�(�ƣt[\әRSsp`4V-Ta"@"oe7}*w?-,_&I#lIĜ21M[h^͵ gS)U\/{mQ2@@M0_u�n'IST�x(B7uab{;'�TZ`RѰh|NT"2 M@T$z\A!MG̩tS-^]e1ZB<DVtE7!D?9jCj+Xl}aϕOc2C^!| g"+ X2 vlGsVAU!Q.cV."}\m+!#ˑl%KSM Cn*an=<6_޿Sv}<:s^�ߙh" J ybU2_I6_u<I+߱gx*xҬ7 ˝]l2afA{@$ $_x^G؟cs đ Vܿ7C^7z4XAH4A8*E7荙|:Ŀי &LnJo/jңqgg>Qy̮Lscō 9<Dzp!eJ@SEa�Bgg~)Bb#G"%VP*JAa$�wsMx&9GЌwrµ)#h�"C/FpYX׬5&_Qһ UFިxr`nΑ@?HTT魒BH&s-rnuLαE YK3# Ic.DVSiFY ,_DE86OU?�)$?.Mi(EH�4fZ'4"Ȕhu:;vΏWn ,J:ALTi $h뙛ݬ>yx7^7jʛW6:{-؏cDF �Zlg=tʏel\70DZg�( 4e 3XZү|.>qs4i{ITJ��"! BNp�2_yXf IT~h8GZ�*zV Qa4w>@跊S\7+"wmLLdnƂXǠiE)/7%¢L ;qoOiDfPIxsqmZ?T3MpǸ�wmManyW`nDe!QbgW*alv/a9Q77LI9rx(Jp'n\٬CO;y󲶨6 F׳a!7&*^ Q`p #Ĩ/p gW>!1KXz޻Ye/duadMi5UIxבe>p' )f�<V� r}Sh~Xx!Sĝ/n&3䌦y[ai!yiUk)&/l'HR\9|̋ c&Gz[#Y쭻ŝ|S2gDs�Dd8B tΎqDlQ_pu}Yyogqv{LE<D~_iOOF] P9;Aq#@(Y a Fmw@%&w'=S9*5>Fd#X4+9R=C uO}qKR_xqqT u>܅i A2e`G*Fc7) mjw/WQ*BܭU2}I YsIX %doeҶR} \1҉ܧ|f |*יi˔voMIW{x¾S�`I� @$@ @RPR3 y Fhm&=GGǞ3'͕kJƭV0KMӼY{o`!$Œ +  L%4{s_y˫3]//0s{oڒ UhI,IP<Ԉ^1ՙgN=ts TF`D*~ O*ȗ `<ңh4Gʧ sBbD_bv ?G [g@lQlӬ\c<<U~!U=K}v-}U Yi.{0=[0')&^5{~b*d#BBC]dSUMK+$:Bwx Ā@.W %(CpWcL#@ƿ À&iȑ_=E+-+r\}`d_}yY)#, DvpNne+R{b~{2ԡA,M~9QT27-FPu~XM#i(Ŏtn\;mف">^;d!C|!@rvsրqcfu5e`rZX"ήT5 L:?HW[Uj6kEQg'#1ڞyl�ʍ,e 4f9;~%:8`] xD\8B"]s>i[)U󜣻{�"AG יN.�e*c @VW1~/8<9H.1'P- Uȱs1EB;?D&ւRKPP_Hm.(N}C<braί??@4|rOV8:vc]nkd􀥲2 KJhȰ1bICTsvdnbm_y2xG h֠L$v|7}*k[A=)%e49`sR @$i!bFh<Z^gם~әZLCiG߾9Z_iuZL֐7$VyË/1$ "P+76ϯ7V>{�n6W�P@?+WΜ|;kg M442йn݃B5 r@k`$D5&e"cMtoN|ކC6(*lSCMȜa\0lc9% f.Mu`Wj ýhP@<oX.T`<2=vN'\R0.&qZ*=n:3 6Qdq?pqkZl/AG5k|B7�c&XxC6+L@ː!,!LH"MymA&J5=`ʣ6cfn'b4r45˜28``ہ#~/+|ud�g_Ռ!N=A5tc7gnmox#|c$XH`.9d%6BD̏ yWB#DrmLI `?XQ_,ڣ@8;!p Ϩ, %vgȯ[g �sv!�=�>)EHM)B %Ӄ\ t!S"!E"o!9E'>/.J(O" gq"cd0؈$HxϦ] l- #H&89Ĝ^NǙHr l t7%L�a:1tގ3r]V|HkIHlP LJvRQ E2@:? Ձ`A; G'%(B0!cA[Sc48.@:;!"l¨H1Fw9S>%H*0J8G9 }[H 0F#[WpA~�$sk }y9܄@O :X}mhJHH0tA :CI},W`RD:_wVt>nV; 5doj Gd)B:W #A①@5Fk+e,H`HA*!4 E9ZHV$dӌ"#D.#$"A߭s#A#ֲAHD>IgW�_=Y'R�\<O!n bF_G{tn$?Q%uT *)�,}f_pB�КU+I:Jƚa]#.>OcY͍(d8V]wղ[ǹ&3T*L4UV2OÙk?|so\FdW8g�@;S@VMv+Ovh;v 4c+%�J$E,ӃhssaiK8^t ,A+x:Rc+yTHB1nl^RescX*CJm˻*ؾ2..1.]ǒwE5tĞ 1|AkZǽf Ć@<%^CNp]:Fg&ӈlPw-J BSVpWomż!4 "ubSh^B|[),⡗ !.MTWTRl ӻԍK=1nR c!?IRc !6lP 86XϲÆX1q) r@Xbك989�! ]st(9vr_GN (JlDRX C>!bݫ,YB!B9�!$6DT !~c#2!:8b&09 !OP`"Ge�}9$ >kh>īA˅P _&xBIebI!IzO4_C*7ı;@ОMt~Pj/$!& ȽJ F)/iAHIU +RF#$&# }-VpR B<�!uB!\>L.~FGElQLT W Qp%WK/)H7Ve$?$dc@v18q1B ~4WjVSq| Dh0> z1%f IZfW 2X̓!*o""a#2X0U#qh;K%\.[(#b@!`HGO# =C α6呠AÆ7o/d\A{l PvunJ>+Iۢ`D[V$?^tR7\Rƾg>l"\֔iiD%I6eco3J;iofG쎝vXӯ^yi}0C SRDO7*?9,(E P2өq;v.tZ V+ �!|qutW^xjjڝ^0c2Pjޛ"J>śsu$Yp8:i*E76&#AVH  pE$=,c'%dܰ\k9. `- 1xc,5ɩ2Vu5&:ĂdqЁ%OOtnLTDyҹ09ir#B]F%0үe߰&�&w y@@n~NXpoQ:b_Z'9 d!dأ VKXJLfa bQ_ nTkj&ET8NMGQ1d r&Psan73}d̃&.n^,HmP S$ Y &n~%*il^P$FX2#'}bwv̷H!<17 E+K!V <BXrؘp; BI,FV'\֩\b5+PD;:glV:o'-囜\r;@X 86$BrΎ=.3x:_P= `?ey�0`@R074rLŬ,v�yQ~D%!&A8dRCX p% p4 M@>SY-3FS~A$9G raUXq#_L:c&Zo%sTyZYjR"Tv!޶Ypp:?B}�Y/Vrcs*.N}>οW4;Hi%u&SZ,"|!:G_>0 WB&=>|@T8x$ ${jAn$u�@FH&)jkd2%.xǀ-}eSm ڸIᛀY $Iv{^۵DΏvVnnb�4aF��@FaI+U*A4cV+7Í w|O=?tmӋ(�Xk5UEBP, *PR [tzvzWc~~{0Z袪?& |8p|_8sbv3IKFc=D%yDHwǾ`Cs2 8_h0g`scs8T)Dg5HeyqNRgI2o٣}oDI^r}o"._6)Ai!Oin_S{j>`Ij`#]w 7@RVi c] [$BA׼FIȍmtVLY�`{\e Mpr+h { e32Q�E Py�PY\\gD|-f,rix _ AER�ۼN^S3Sd`F!(B � )bɐ|*k{e9Bop!A6k0Y 09yѣ>k];'Im2`:k ,@hx#[8;O(!!C!D g#H9GQK @Lq/X9dR1.Jxr>^{&xN*7z@ ly{r2`7 Jcs. ,T?P:;!"I!!$"n&[L+eC0iM`_^m c"A4,=v I1(ϬdN~8`#A-^(3@Nf{{Ȓ p"DV0>D$(D5OBFl%2?0&F+n\ y)(1-c[ 0EGu"܉I �Ysd O; cߖ%&H` 3H,?*HA=DE,cSq5)"9 19|a  <cWFy8�ߒ|U](09�'˝;GٕiW+3B\{{^st9:O )6�,7$U<� `Y$,eWb[R*IojfXGK6y7/iht"uJ!69uޅοv֥Fiw|V*^A,J TCҔ$4L(l,_8<\_>Gf 7ܑ~ FasΟ]z˧O\_V{۝IcҘ !f83>Nb5�dY4 .G0tNPo[el-/oVL�ѵ*[ǰ`I R~*[elUV*[el^ f�HOβl4F|�4vS2h$=4?S1B03MITM QkTl9ĬtZ{ζӽt,,]Y}{y<eYwjzjٔ7ʛ��T,b)!jTTjZ%`s,|{i9=sTjy7~CY7@6]9{1vk>M�U)֠3@!J2 ,*THYO[)V;M3¬d[7ۏVgN�ܚ)H*6{w̯ ?PÝ|�~v+@-+3؂50+МdgBpÝ\ͲP. N>m׵]ZUAMEY& un-{Uy {;E(k^ícc~Bwn__ Uq8YǬc1;6sGN>@5]D>B͊K)^nJM 6]` xj ~Ul G`o l|us#w]NW5#mrg=:ot`Ͷ'073H&>@ ! !l WExĐ@+ ? =ز'۪ atd݄NqqbpoxPB"Z#BY)B"B!}!@8Àmhȳ08B @g+$R17V]9r(0AF!wUt1N=g%uB` S{5 堵C`Cd 8{GE@qvf4γ3 lu>H~m^@"pO5ȓ_!my)Y;r} Hdqox$hĉ0 0'!|^e&E$ŷus!k Q\x!Dڅ<pXX$e^:G8 FFaT|wNFI̹Ĝ#vbjg r�!5y@%8~y c�]K1L&qpH~` Mq0ꋩ�D Q_%c -P%{ /w3sD;aC#AwL1N~Hv(<�ucD6/ƧiҸs Ҥ9PbC_L7]D+(M r,7s7.Ή(6l4o  D/Gp0k۝NnZ|l>7lhN%.(3HЀPdf5ZS,ӚtY Jꤪj pcsucss4<~mO۟>rؾmIz8F6Fw#/3!i$(C.LJ+QeIv^gg_|+~铗ֳq#j0d0@o)�E77_z7mq^l3�IǙ%-P (4@V-9kH)LI~8\ 0O 쓀 LqѬ',~^m XWv\%xN#4 .](OF28qm?H \&SXQJ4"[ OA.gMJl8a-yed%S"0k]x=#'rȮadX-^}xr՟x2}6tq>U=}9/'8զ6cDr@{Dw|?IEݽ{m9B l1;,zp�۽d?F !,~A|*xJ9'ˮr/^z HnNGunM۪8m3v}t<'b8F9 bXU=@dyT |F"H"}AA_A:;d Ajd7ah)E*oLnN!CXF)C |FG!Ct)Ssɾӯ&#﵊?RYx{QEκ8 gpF�=ZY:7dzuA|MtP#؝TA:ߗC: ,OS ,c[qjl|j㥜-lPB4 B<-]xo9߻1S,t}Nq@!R FS/` _j'C}�-as "A9G;og$lD/r.Hqxܢ㐘sdI>B,=qD#HUߛ>=n�9Ȧ-S H0et8&:YĎrJ/7Ltd | Ǔ`HУ>&.rI|KY�|G ЬB !Vs ,qQ父2j /Cvp$18Gc؈Du0Td y}?aC0G wSPPl>`74NesMt:T*:tqRLHgYf;6v{ӭ];w./G뭤mw[vN X BrA3UAn�GM˿krWv! ):P*nLZgbnOZX]]Z^񎧏v҅y *vH@rM#W;!O@Bưt+;uj.=eBҚUi+ƄY84zro eR$ɲLLkPI~N"�(ijhm4t?�'IBNp\*:/U{S -B8�?)Ծe㈘~V(&QbT3~ߡy*'׵E۫*9s5B 8 LFO0!xSk._#笂d[!Z>WmDŽ;玒67! ڼ &&.1O21T;u�;fZeXMb+owEdbi-QFl+2 6AC(Ew}k_VD 415u7^KL *JƠ.ȫ"aVJ~$�%f.ƕ^/)glF&L!f9�w.;2KNWujW@!2X oɁ瓋:?1sdž7&1uR7 vb3Z@B$s4,j� v< W&*9BP)BbN!&!j- f] iQrG}οEҿq$:GKUn E�h2X z^& 6s3DD:̿u~)*8ch_҅ˌ-5&;R_j>Cs b꫌+2HAsV ie6EQ$*HN9[JPs==PVp֡P!@RݟJY`d%ch4!]LkP?$In;`0'\tV$&Ds\D.s3Iʋ@0g. LAT(2@1MSk`G㑢tfv}v>sݾ:怔RJ& JB@!"UB@B?@Wю7]Fr$Yc`u9V{ȴ1*@4@VӴfN;Ӌ_^3'^x=.$i;iRI>:.{@!"*Tf ¤X !c*Ov>ˎ4�%fLkss^}{NXz]H:ShqFR PkD b` ATZv'4!@8"տ 'T,X�R$V'z4K5ѴpvAjKhiDJEfw&_tڬGVnzk{Mbm%n\DĶJf-^_=yꐴ? .'c9J`e~G{Bkf5=Gz}u<^[]>9܃m 潨6}jYԙ5/ +ņVG9ܝoMϥs4UkC1Z'b3B8j`bkvjph~1hB*RpX?.\[A]zvwV o\-HXNlRr` =F;3stf 6V񭫃[B4(0FszhRsgv[kv53Bhֵ&7,߻ZeezQe<h U߲&ĥgSwX&;8K\trھ==Ju}xkC m;S3lڛI`sm>X/]mti=|6+dMk.75i!tqW'g$Ux-Q6#1骅陴7NM'*Z6^5\_Kx)ugagqaG{z.ͤ3izcmmqgGHe)CHy[9`cA&DuJxvvfT:͍l1~yZnifҹvoJuTJz>^5`3ML:;_@CIt.0)b<_*"DV cz` l>n*A j9Ad'NP̮}gW=b&8g\N8F ԕ!bwdT,HK|Z0!-|Na / S ZI8.8!CH0ܸ="(HLk@,9EL-Ua'o^dg69] 9b 7:_RB39P^l\<\HF)qE{0pO�T5-P&fη-N}Rۧ#8G@R5> 893,!>n/T,u~ y6gUFsCAbUx;#ʸ&x-C\ IӊH0p U! ߡ:Zmy/Q8G.<k1DuLγ@[ȧgz)mC@ B(,y=|&gY67ny$~�dVoj"?1?ͬP~h4 43Nz9lu\h0j&IODue )@E ƼN>@)[D`KJ.[p@onAyTJҺzcs_}mmV޶-UI>Aͪ0He&@PU*ȑÕ$wJ�dfJ>.݆Ǘv⥍x75:=JSR@:2 FDdtU؄ӝ,z@lIZ`X m@{b**(M$Rz{羔CL~x&_[w/恷=mzo7ꗾw濛$xGC\1?z+/?{ ,vf:6uꕕ/.xa5ߗ>ǟY|5K7=⷗.V<Wvcf}zc;;Jō+.ƥe#?#/rVOpk/xmsscSqrq? s^ܶփo/:<՛{Dxv]u˴~+/h^[Duw7U]<wb+l4X&Fw{|l2~<Nze˫aAع{䑙rX18r˧7Czp3R0KϟX;s|u}y|kU[fZ%\^av+ý{,kmG?tlvn1n]_<ʳK+]zM?2Svܼyk7&}62#Y߸ҿ~:�}0/Sc3x&UV*[elUVPJZ|Kx<1@.[Dx7P2 rDZfcPzdOk==ۙ>{so B:-j0zv $LJ&$4ӽD`b<]|4.t]#)W uڕ +n<pNϥ&-˴4^~:@@]Abd)[PE*-bd5iS_68q\2Ss �hxǞӛt6j@?,Ggq̍~rc| Zg~%DرwmSwҗås7SP= _Oؾ[۬IG;W_X߹x\/w �Zv_%p&:(t3j[lݶuKtQaޗcSGglYӪ;}tnߜ_6pz0l\:L,oZ “X)ؽO_;Z�f`~etĎݽ{]7G^2T (y|YQ(9Dx ?.ݱ{?n}.#x�A^_c8#b?WƇ;}2za3zݝ|j=՛OC^>]/_;⊘pÿw&ݵko]uʹsj#JIҶzGw};iK}t_~s_ǺYXf~GwkR'߻ccmׯ\jwcEw:}z{uV=~~+ҵkbC켬p vQ@mk+W7p# F!+>Kzs8_N/yC;}b0^_qc4 O@ov}QOwGH.{z;oƍsGq ;;c| kJ6Pȓ Mo/IdG>) ʪwk?jB-T:*Ƭ&+VO] l.JM&FXxbPP:91 eb_uT5Mth$r< C6r`2pΓ&Fۃ*b6*A^+XjSXZXw5O1gWM}PE}^cR�v%YE \CWd<#T˳J6=I@ 1߿#*RF_dM?Q=HMW4XEI~%#j:&q$h7[vUO><(-ל8xkЏ bjJ><qx7G 1u:3d]w=pԹnZMHg].$0EBZ)49fUW I"NɥҴD{Jpc}r+.߸ȱEh�@ R@Kq�0/IAʪƵˊ*0hg ×^\z.!٩v;ez<|Lçrs *RMN qYN81'þXPďu3{}ZA=ܯc-<߈CӟGg;(>֍?=A)mۡcY8ҝUN�į{Cd+lsg^]'#A =_>hӖ߾pѹo}~wꢱ؇oE®>{G|{o?>uD޵]@N$}OgG/~t•s'vUa"�;w>Mǟ+up'kB hϐ{_wAȏxtB~HdV$ߜn_9Rϖ=?4sUq>-/ym "/O}8z~aryذW*i A|bÿvvG{{j񫟻|�wsss_6}Ll4?nޟ_{e!OdI :w>n$s{9dW̘gWOdk-Z 5PnBٹ/@qBhߑn/iؼI{~Uȍ0P <SY,l_vMCFW@�wybLxo86}ĺpW!lj1Dx~Z<'BG\K߽( T<-%br7'D6iA|k-9x#s1�Ks<ob<`} kL+t^C`GB!dᜣ'ܫ^M$mk*E�!X.<DHl9ΣqaX9Q!@">6|5%6PjrD �261T7¿ B BŕqӪ PB}{֡Q c,∏~h"ADBMKgEH :MR9 Egz$ȑse-qg'GN=E't1Wv>/!B6"!.Si2i:/]p{L!. Rae`)jR":@TAyݓCe�CqxH00<"8XĆv(՜8<`J$I$Zϧ$VX5x8lI`xgqC7^yJ_\ո=ӛvZN54bt "bFzy3B�R(0Ml`x8tko;:v*9x@$񚑃Ho9S9_DP*AD Ԛ$A[ "p~ҋ7_]ڭtݛF#=fk_ʛp/T8~bs{/$\֯h.2xX L(/f%F :!a5AeA|zo�gt+7!\ F@O|`oo^§>oOoO]AVS;ƒBե5<`o#`ז=~>, !Y!rIgC?7NOѝVk#CӶyiկckAwY]>w;޻n#3}'f 33;! X0W<>[ÓI>:D֛7Dc,PمI@2JEwWFk<pxA2W[T}c;&hO6]|b7x><Zsfm9v [ txf!Е_?4- ;??mآSm9;>W=?W;en_: qMBjGq|5�.h8vm營X:zi(`ki`h["pvsj_,vFDbneJ[}z9|ז'?{x,2NROO_[v}/zw(VlgN/߮۞  �<E~͵ZSC\iS0n^ݼtnAAEc)QHex/)"<@rl &tw+$̧�0فsvlqZF&dqT{GIPmQU>`-.+%zY찳LkQ`J8Y N AFR:U%MuxinY7H!@7Y6ugpK#$^-$sd% Ǵ0֗O\X`d7>!؀ PG}]MĜ#X ,&9B w-Mp`3un;jlNRH(u~9ǒ^@9S_$at=>.zgG,\E}Fp^WyM!Q"7/y8ZN9# +k[`N(uP`!s2@Nvfr9q8G`aX<ElR Ɏl*$*@F )JӴnLOOwV?-YeYDXϢ"j Ga=>޾kq_khi htH1� 2 h M@�@7MU~&3sgv0ںrnK~7r^9u|c -&�"g,g:ӤBbi _!_ h<O>]4~k/pܙՍ$Qs|j(lkp9$$T8͉ [|�fn8?lW."+Bp6MPu  uܶwѷ-ٱ13zSk.@Iٖ⮿W&=3'޻ԫ+k]X}f>}GwzmY�7�ܹG5Z]޹8B xJM">omg'n]<᫟Ȋ^Ma'_R#cA`@C&KcO/[*R|Ow3�;=4z{Tvhk63Wg/LpIm˰w"<S;;%5˷/oXEI_COhgrUK_+< -j?&g;lQ ybœwoܲȣiw,ܺtm(JğB !=9_v;;ҜCΪ\8ځ 5mO|߽pjm5L#|O&�7)I=I_2#Z�,-lLf! ;ZӗɗVx)bv"�fv;tz;^�ԁ3eƍū \jx{kԎ׳tpn<2g[έyV }ojcctwvA?{V)y~VFuE;ѧ˾~z# `f3,RU'{@^*'t|#di !,޳Ǩ#$nVωۛ u_/PBܯYa�:<qT[<¾"Ng d`epr`vqpp mJcYHTpH|7G:G*? " "5TSt.1# J89 $RFD m?bՖWFN !L9i 7V/iB C6Eh;AAxlTa  9CcI$q?\$!qrCƳ14)v B0@WoŸP~ {N߫1`7tm"Ɣ"L"$ѐpk׮|zMR4pX9bp~}FG� 1$Ml<GLgmnC`023ԙ"NIb*4]b̟‰m`[Q?||K ɭ @JR)PBZ8K7VWz4Y�1U<XQ!*dOuud/KG ʥW~x_<{jymE)5;5{i #jZ]ck:NzCe*hGZ&%jsK>0K bF)7[A5AWO_;|6k#団[󲸫_NM߻F_<0o}_}7͜S?wy1̇vw[-q_S }vA~pI,|곇$㥬<:M' *H*@Z-5/gZs 3}/ 2Cӿ[GԽyI[꓿ySNngJ#O,+]iK}deIu$[GDeqGW?sa ?mٽw:/޶߻t_oo/xp;�d}.'xJxFYm/O;Ճdy/|7XʮY_ze\kۗR} {Ʌ/,7)=>핶ҍMUV*[elUV*o֢g x<7zo1(#a h:,;SsS3[۸g$*@T)(cYe Df 5*ހ[!؅U~ t:u6}$IUzrڭWVΞ{pYر;MR*Iz^s~`7IߥE*`0.]Zy^sgn+nOmMQ6&y^V%Nǟy`Ϗm1q Y _%�>P>t[|j:?{QƬֵ'qVت^sJgrה环_:黒^޶˿unejco{K^[>�v_G-?No,]e�'_;xOfR1F%#GC�R+vIoXMơc=q x'ֽ%_ݠ쭵ۣ`>!bwJE"ܯWD}M#$#+po-zv\=qՉ\Ro^:пǧo :��HlL}{?j�mas#Ɵ\wveDΑ緷>#ճO�boS5x0RQԦ{|o\ʟ-7Eadcy_lW~=lt/[wbkyid$sJձ"{w̆B6d(Tl{z_A-331Jel/71l|E3zlx#GErɼ!3ɑkR?5ZcfOy=(5EH*`ǝc:?fw_)P";LV*m!Jz6jGiN}, +jQ5TCAAPA}~+V @Q25!;À=~_5@qvM`|xSmCߝYkG !QBCHcTW�ݪWwuTlP{sl �6&3.7Kb7Q޸+HЗoN$86W,H#ҀI&8L64݉Gs ^WFaR*!�hJP!(Bgʔk($H "|+VWQ;mele, 0lhfo^[_t7Z<νw,lNݔy #UPvu ?KZkX]N˗^}ڥ\.v:3xe*I�|VyS , �.4TCNw@5H.Am4Ya{-NAq͹u엖tܭ.>Yk+妛z?4_kyIiuoƒ"ciρfm4Էo#JR7;BlT<ҝ$6\B~&HКvrZO=aqg]t_x㳿O[/ME;+o��CCx[a&]^O4 e,,\�*sqgl0s~!~<lVtfUadžyT@eB̳hMkˣ-`A ~zߞSb86ͯ_CnR4ٰ}3ʨ!/wo] E sH fG#suS5"Y ?IR(NDes}48<䂬JҖاLlsc</ԧ˷SkF˭-_-:"<m $Bxc3eOP~TLsRGJgX58wBn%jlEΈd�*��%Ju:=< [x&ς'~ϥZ'I`>C߈! x{n.@nN42b/z !2:} 4 B< 1ڶ | Y=@w}Nq@!R 2D!r-5EFi#_]*A�y3XT�[usMO !l6�Nbq%B!D^i}Oar xM#ΑAH< FaC*/oǀt '\A\ ձ} ]p4.stA!6"ټ�-B/`R:9,2jx8LBj#1lH2\xdAc_I$/$=6H_moVnw:V}=@F00HgƚFYeA_Xzgvz|o{c ^ZshZ!-�5F"$DRH @XԟBa>1J I@H(i$jwӽTg+ֹ}?O~kN|k{ x~ '%76( 0;wϟz3ϮdTobvQ#Rx)2WPx~{p֬t-{/n:Kgos`>'+3Dɿ|hZk:dGf?s{U=?﹯\:dd DĖ,;`C vw9/_|fc4zݽ_+MO~*ڥӯ\<q7FmOw<<dG G{Nɜ?xfw~h{?_{a鋿ah>=S鉗7Wo&Ž֮wdc_wh]/I^3~u}sQϯ;vS+K#`wyxd60@*/n%;5R]Ւ/n2ZfvMhBiō[swr7AxD z=\_{~ܾvqsc-# isZ] qco;*K =E)B�.n^U{ڽwv'_?;) EUPɷy!V_ڼq4L$;vvm=lO|̧?k*~Z`iyx+7 n\gcBm:v9Ы%~bK7ikf4O~Htp|nӎ( DF!DVIWg�9^{~#DD t}tf5Q$CS[l[c}ڭk[ׇ7l64̵l]9L<,/|GJGFF%*'Bk}Ko�/} DdSf&P(z8;qHCg'du~39hpQ(EHPIY1Ub"&AXT"fKW `! جI0"fW!%b hEsGw�i&K C,9�4EH]Uy}0mQFzAjP1YzDkpG&{-ۘG>&udWЉ=rhH}:?HT�4h!1,S]Ge9Ɔ m"cI}w??IJx@h=XH X5V1�J:;OA:[A)5U= Z)ex<βd ~ uQB>5D5�i"$X4v^gqoNϵg[;}6o$vK;)j Ry%"ȈtEiҹU֡iKB4FHJ[-I(:U* W+kK6;w3cTw ZmHZ$ ^yWZN+H�Dk޼|a>0j"v5a5!B"ʴ&[x BRsAYԖt|bX%*1bfN\o4r[떁v#I߾\]layV[!m޿/|ׇ��A__>ݿ|t}?@ϭ+gk 3k^FroCo^wοEh}}tV?:=K]ί!Ss{> o|~fKX +y/m~vq|<)VF_+m/ 'ٲGm/DW/mw̫k|mtֵ_>OSm"-"Aު֚'k]Jܼ2qe_j"G`Vqz+{b+O>M2h"tL�u$ecmѩ@NƗws+Kv`އq#fc!~Ϯ/]];ӭ[׆|쉹侊-O}pljWJW!ַMs5,O\X >}}�pљ`¼7Гs_X1Foŷ5a~{׌ ׾+7.R$�܉s'6�;#;x J?xtѧ_}n9S ޏ=d~^Ŗ_n\߼:�XCϼcwyR ~?<5"gˋEŽ֧>{W9;g]醒&,u?_ _' 䜝P[__gsv ���IDAT@S}{˝oo*IVƼ~<2S�NzccmeoWF+s'pn1}v~Vo{S,ZȨ o ϝ\-CcO/>9二vm+w;2k ^:pު g^[K�F}BR$BIg'9G"پ&:HOCDfmoOF K )l:$|faOn^fW((¦|"4ȷ7E"( b&H2 AI`%B^"c)#n8eb:l"d$!09BV!!<:"d \ss 1!,Wɧ0W`¨\` "K\ @  \&<?$8X;۫hL@v l4'$C*t>#KG N# ݁>jL}<Taqs 7tgƙ+/j/4ܔlaK}r1HenC}EKDOLO9VDCu:9EBAPGѿܵh !�TGh^*{y\CA2,11m{mstZ."\Sq7P )K"B(V j�`4 |&x4isb;k'd 9_ gTDSF4NѨzٹ=Žζ=S]~yy4HFY+Ì[$jJl5" ̴֚�P!Z,syDP0ViZy8- @?!ɦH I3δ&M 7FW/?75vpڃs8=zJ*F sWDZkH�BT ZA2ͦ霦H1)|,�=rLT""=&H)џ{״ [ai2Vy ޗGI _}v~Kα/?bE~7˨gsiq^߾ ܺW-zi=m|wMes}kϭ̅_H×Õ3_{egɞū663N/^yG\>?tUlN__7u-Op__>Wlwyf.זG/Μ{m2:/W?{?! _~n<rb~yU;Y]~/gֱN7>uݫ| G[tFFuxrյ?8sO՞>+}?kod_'?Vp~z/c_zS@K7~/?T>/S/?{,l51}+˷]K{js=9}`�.+JӕK/�XY}/=w2ـOx~bM^͊)䇟Xx7Q}Bu=>6o ex>{n9V*[elUV*[e84M$Z.g ,LF&- u@R@i~)ED$*mͦSVwjC{̞:~ҹ[W-llLot{^izl�4F$Q &i!�lV ,T"G],WAA!AjijeC^zq׶l1c}vvTi  @czE(PխbEM@x!N"&*酙mݮ&$$@dlW !i3U~Bdt+ҳ¶![hpkv_hǙ.,0uEE7o?^}n԰]%LݛWlXpt`0ͥ?w&va+O,1 Bˋ[y&/+2_۪єjRgvMxqMM;=̇Zu_^~+&8B lye_qu GzX^ek! _7|qV.4:?[e['[Z,?<YPw`]M�05<u?^;:�6[Jhxa_[]ֶ6C_HY op,f_\m PF b1יvK͆{X#߿{ʈokR&wgCuyor!?\uK/L|[K*bԇv}K<2+d6hM;㘀Vn~:sjJlfuF}{u>:_qgz �sA}!环8C-<;~>zwWXr\Jؕ2eo.=Q\Ohgmwvwc}+-G<G2aޙgon <.5|y&ӱ@bG#OW^䳿|YAN/ps݂�KN}M~r"pۏڛi$GC‘Cf7Y[~e):ۮyxB`�;:;܏9btUV,f= |�{.ʱ@v+<okMXNNl$BĞb,(BZBJ D)Y%"wв,&$FLCna[y@(BdxEHl_w %&) sv#D#c!^9lbπ,=Lڕ| �+0TA%:?4۹"jN9$ "G0 .Poh9vpt @ΎA%| #y$'NI,`zUi?{<J&BHu>?IkLnD}v;dh0 2ꓹr Csm\߸v7 w#@T8;GӤ:G xl..9Aη0?@;G A`:G)VHPnNz/sěܗM< 4u�!C!oݒMNMMMMMuvQe|[0/wۄ� QJ/�H iisscu}isN@g<G禷N66fF7F$MQ@)Od!@ AB"juD-Df34S2$Tc *QiiΏS+ʥ͓~/WO^;KvZ ~G#4UͫM�JffepD8&!f J�R ~oxn(tme�ITN>djp'Y݃㿬t,V['#EM&D|鹊w?gHMsoNEg|^QvXpSke`A]2m_o[:$oYyy?T鮽-' y>T.,۴|r1zc5߽�w\@kX[E?[lWQz`Uk7=uI}./Ϯ.%j2n~ϯj=/ק>zwu:WXC#Aۀխ'^QMA'S85X9yY_}W{_EZPRߋ߾IoxAs}J%Rc&5(q浵מ_*ۡgQ t%6)0l5F5޺tZ1o٘ƣMOgwt⏥|ps^kB!o쭊۾;ʖ&;@ؿ+k#BA2K9*M_ܕ暞m=d8Jrlo]_ѿ<t}hǦW\ʣob[;+*..^{~>ׅQĻw9ru:Vu2&L_XzqO'\_ͪ#C}6,29Dc3 y"EHfQ_|m׼uLUIR٘@$ò' ݀E/T*@\8r Ў�w.\dTO@-SJ,ZbP&2Y`!J.X0Jl0��~<xB!]d#R RÉBc~ݔI=BB!̲�&I=2-<` qw0? AQYBsϧ> o,>^)oϿ!`�*~8ˣX\-oZ.eo xWSg rS#6("'A.j/󫩯KL.>/$ x !lG !6d g1 <_`% j�!=^u 6cs#A!W A$8S(8H`wpڧ% "&Ini^瀽ßP� @�Pd�c A+T%-JT!Ƕ?ԁ'Shi}p{e0T4D]#xM*o E !PAh T*$DcBBJnoݙO{kr\~+΅矻7NZ|ix^] lr $M'ZNf1-nR90# ?�4!ʷrJ+s(LWRŲGt�S[c^�l @ \^.]xr.bsAU;Kl\l/5h.~|t~�[LW׺"b~|u[(_5wnz{ lʭGq!<RժN !2.sLXW ش�",(={:6׆5W�@t�ث7μ@nT8a],a|hZF2;`լωOL3b ۗϭ״˓&,p?*Lnm^.RR ^{ 7ǧ^]{__箮ݔkoݴ@EEWoG|p=Y3Wn9;0(�Q̪1<ٝTmLīdeBX]UoO$<i>_]?{hlݞZ]tx. BE|6KdMg_?x!_: шˣQ\Gn4N%-MU.Y9b Y0"-徘sikK#\A]ـmE)U~=9�v{tO̦!RK�ӝ)mPKl$699e/^؉{T!�gZ!DC2wdQ#vW}tk?\ۛ36RK(L{2l (2Q(ߥ`[VNYFL3Xw9zO}%P"Dsdu ukqnpNm%B(IM.\fb>t]ALǡ/A"t`2(K%BVHtjF `!FABHm�O'h. ֒@@H#DMB=)OR,/,Isѧ>(Y\ 7T؄ c& P|b>+w<FhqT{uR]ERQ<p`3H\GOf F.>7N9J`=>30+aQuGz9G!"ď]5/yXZ9T"#A9Bs,FءIBy$XyK(R 9q!9G )fAe Ȧr`{H$o4 B%0pznZ-7�֦܋`b,߬f 2ct+I[IDaBDhc9\`f{#;~C<G9^dcQHǻVyG{bwrNovhDPJH%Z%^;f9Z^R'__owuz'6Νٸzi9&3L RΘIcN3kdτ7Wr(@"_*S?@D)9�l.ЭeO$6N}KCm .E3\;_nvq%ޢ<`*~I8G];xa21}V ~ [?+u;һxjZFFUsLj@tmU)}=W r^^K߻wFox|mF<FA'y͎q�>o/\@淘' 7P?pgz+p^ZAT`‘fu)@X=Gn?b͜|iLSP#U¿Bk"H~_;ݙ';\Džʂ7L/%{Y ~lsR.EY^(^[+cfݸҿpb=Xɮf_B�*UuxÁf'${`6DK?q\пr~}m^6 v;@!Sʷtu_2oBgr&w%uU}kﻧ# I h$HR\ɼX} Elex۷P%RKA#$h`H! 0?~{?24u㾌[&O/s2ΝZTyƓ4m~Zd ku`׊o~lo<B`fi[k^֛ϜbX3XOFG~;gg>0ptLLj s?+GfEz PQ)aM;AsԢh Py\[g#lIH.p:&7..3 -OQ ܅ߛpՔMjI2}ʾQ{tjI! :rT$�^nkղYwWت>}V{5#ɂ0s 3H HFImjǙYA8Aʘ􉥾|cݸa"O^kpx@8 T ;2, BD A!:A|~c�Ɉ> >Bs<8pbH ח" r,:Ap%tT� 47'O\z!qy#!>g yRP#_46V[!5cϏ>�ϾU 'T8%cYkj<A8ziOT_h T5"H`GDQ.P{GzR!T-\7B)`!gP0h BX4V2,+T_|0F�L0ce!q苠T�!N7,-ʆ~>J憒Bxah q6V I}`C؁q  3 ijWc)wnۃ{=łBJL}̟FtϢJZJAA6Z؝?169ݛ653;/?|eaq}1U궓n+$" P0A4끷 "5oba(i(� |@ R�Jv+MZE#"@Z]]VVt][8>:tdu7�@Tc@bJD 0;ۛ(W HuI1cS ֺWRcv 8$xÙں<D@KE3z8S֛n#I&`rH#[*U1XgXW~6iQ%I#7O=9},p{޺ o�tM6yܦ,O=:wت0[]y잚\:ރzSӷ|߲$~ho}9Oֱ#Ѻx{v_IlԬd5>Cѡ&Z(+|![N? 76nm{i}K@rGM69]+rxwmDi!\䮚 r'X Wts�{F5W(D7EIdME*hY|s^&&d/_Z\?~Ժ4 #;|A1m)~uN懎N|·z 'gm;>g??wqWՋH0~쉥k_oX]Y liXs5@ӾVm֞x^;.h\ߙc.Ei8-_xfbs?ԒI9^8vaƵmgwO:CfB�I3*MWg��cM-6lD7R '8ATkU8Bl_5|Bd~JTdmU[2]l/&AH*]E@@HUh\.rE $] \˵?D[{ S=Eux&I q=ù84Q4f2vp4W} bBL6Q@o^n�) 2"CATĜύb檗lDGؗ˛gqQ=WgjT߈^X "UǯOǀ_q>9`uUG>)6RA@p=(B|*n#,2!a94*t4fýQL Ќ "*Mp܂LʅJ@]XEQG$mʡX/ JLrmw~';wʐƇuRFTJbHEZoWs!$" B' �%ʤiuaT"&%��ʲә�(EkZj`J3SŅd�(rv ( J*noٛi-.� ZD "UAjFkNYJ 1l)1c'Xdq!QΏB�"6WAQ0 GcAT"9rҴvÛ+;C+# wWJY so沚l4&]]>ѵ6 HԜ90cKǟY<rTc{>r/ E ӎuM}5ٶ6q xj%�@ Ch/{͏)l >Bb%tȪ: SFc,QF0$21)TT;o}!:#|c|%&X]\:d[<zn{zZ&ۋBfc(,j(Xxvg;a=ųk!�xG9CweߑcO,4*W.'Nf~Tb�&W͍mRhgMiuvNV $;wi]obk[!.]/Ld|o]~9߷*C��;vwA=.2muk|d.(j%vn ܆Qe0,fyrH?Gz:=Hz#8'><z?& 藿䍈kC6Э3*3@d '2RޅYNX]:i/EFfH ;H!<j8BbY FHg'>3G?+~.N-t@|3 ~u7љ ҮvK9s@ rFc B%TZ 8]׫NK<:*$ew`v<GG{`NAA64b3>1<!s!\ :S>2}> ,x~û{^?kYsGsE̲ʏjΘNFX~ ~[~!Q w Fz0=- b. Ȑ$F\4HcgvD"Hh_T [*҅/b2äI6 ,˲,3irGhU$ P+3} *J˷MQkJ vw{|llng85=f42-�1tOVy(3[WLCJVF@A�e"VXEiߕR�"H",fy6\ɲ˫ޑv_$$-Z %,#ݞNͤx&� ,R㸔ګcadj\%Js,>J#?r4rί@vhg$relF{zzRACkFo">@D/Q鍧:g} (woxMJni�M$5;&ӎX�6o7}bu.:KTH~7pv= +[;6ɅӡGv!e+a:!HEbg$[y7}|4:>-w*[ Ѩ>pLNwME_U^w(+귀gJl[/b9w gգ#nR_n7fN":qrxJy:=p|cݎ ghaQPlUD2v?6UsdWB~C�Hw ;Iue}5It/,Nq`kԏ:+c 87%ik8\N^<zŵdƷ]웠-w_:/eo_ϟ~d $ i "a③^|oƮ!ϧIc6ERhTy^#^vQaL;UWs{3#™Tl$, :'66O D&BaY̨w@7h=rQN&Ԏ"DǍ:ʳh l8d@/blL1$i"˳MGlƑu'1vtݴHൂZx jQfsGVO??`E9 .-s?2 G9#x;;/2>.t=K4Q"!]rD2c9qW70sA=f<?n<lhGxBF lZqd6qtɝDf.h";ՠ k6`k b*sI$Iep8e"9 a{D@@P!*  �T|@Pnwgw'S3{~nϬ. ׇ@BP@I\m2 /TM;�fB̰*WSKT*� 2L@)J)( rBE0m$!*<UklyV_F@)CzzIMNVFYF@HT.K.JSnhE>ˍ}9o#6nMj=q{߆nb¯o;`F OQne9+ ]gq8+k5f ֧*_%:oeγN *%AMŠϟX D,`G8HڒWJ+?�ΝXz!ϚZ]?kދGuKjc@k(ƀyl"/W-LB9߸]l>@�͎^09{0q ri= W\DxRkVlx %HH)*ӕ/fܪaz,s ) }QFU!q?),f H2wϢ�$}梩n/g@LZF bF7Qa\�f-6F,/έsDeI ( ZFk,NO wV'ul^3t FG>}!`ƒ~^ |-ˠ_�fz`|^A '̼l' vʬ`ěo]o3t;ziaZmuFnlz[tÃgyǘA]J 9`61)1.'Y�ش6X{)7Bu[cg4vaoURŚ Gme{2Ƀy+ښ `G �!@8bGp >Cq`!qNzP.B.B 8B a@!`QxeAlF4:^R9:ĒdT|F 1!~ } qT28!EnT8:@S"LC5<O_Ώ xV 6b&iB\O>pU >Q}8g"0'ƪ|fD`IqՇqdG~ihm8Zg!:ȶ !IFV!hbq B1p{t@"UB!07zs#HpF>ٚ[!jyG<(EH5PVZ4MRDd |U7rBB]Jâ(� T4MVZ [ D`2̯^!Xӹo;nIׇ/f Z"I�@ IGO"x5gKYiʍT("deRI ((,P&>J%*MN+[cD3j,ϓ<| B4M 3&k� Bu0>U'͕ Ԃ"Jdot)t~N@;! 1�& A͕ M&3@3Y4#hLFP%^7$3*%'OU7Cl/^,9'vGt^gl2]_}ԴpeqA�Dd5;tl{ߜ[^95@o,>rS"8~kʕ´6k/2З�hDz37kxʹAluacS,5q"Θt/ X¼bF>FE X Uj]86 bcnVcbϴ ōG~JKW9L"$~ޕ ڹY~lrA]GtxYR_;%*T"۰xiW|& U`\ r6��,%ؙ@F̶{~|iw(!U;ha.pBA8[+!bΡCUl 26Qg.yN,obfXРsvBo" {3W._X K|׌̦z/tLכyRꠟ?BYS8Z A%I69s�63I0vjjsc|3 o« Epu\�G!@͍<d.hcxb p s5R aH7JBXxH$#$B!x-!TMa S H'93] B`XF} ă 'sBlBrc}.bҲ+1N擜X$vE :t݊ FŌHDK`t(ҵ"D``w j@%؄Cئ^P5vnW}'ȧOaqgA՝g!Vk3(>;-ly>A !h'LX 7:qhd n5G!(7 JՇqQ}vXȒʜ[$;ad;Σk!Hu Q5W>i4>B 3v.wH F�!Fky^&QX)$IY`V#mI�L H% *"H�$" �HRBȇlyyh UsXgj΃cǟ|N/./,YVc*:)%yyQ(UEQ �*X@  P6dHqk'iW:i\˦#Mohh@ � J~U;#$j0ڌ�AE`Pùp?@abkB�^*Xj rH�;Lv.˳AP�bB!GDDw^AAKx (�) %6_$]8MYWfK[emDg~і 6޼<&U6#jU_aaL/ 5<XYn�%Ɖ nNqDRf�-�2!9 V�Kk8_.9{??ط/ohmn={rX?�RzvQR!,EAK`,d<OԔkMP:X$NF]g]+W{s{nXě.^<jHINo��NK_UAQadXM;Jոin//B wqR]8h Z[Yg/'N]*Kd&P`7law17F>fkNg&Vm c'T_#%&mUzu9ja˂U}.*jV{@a#P&Yݦ;X)D!羷p𻺧fr?_4#Cp-7v8Є �zJ#{ٞ_}<l;`3L|Kľc)_YGHAK+;QHo%6,|C�Bȁh/.a1 UYXm`7iBAdtu K!2-&ƠGƒ&ݢqf)~R}f!bw #\ױf0 2,fe" Z$Z(|E)Olݵ| Ȫ(1@ {_=A=´?cq2f"@NMc Uk}ңAhACl]\O3eDEn(BșuB!+[4Ds_u8<iF�k'8b\dbfրi 1~$ (A1vhն )a%bH2MB^zD,Sjn[VJL>dV̑Z�%@REe;BP.Te (HA`TT" RDeYlVo}_mwܷmvہvkj0PKK +W<KӤJRE^ ` *@տ( -t"ͱB�GV+2�aMt-sU,K<�am* *r([&AQAVݏZDbPQb0mtɶٙVTD�0WKK^ׅ(`%.Ъgt^Ǻn|S7ĺna) װ6U TfiF/AP1&k/t1 TPK_/rQ[O_'cmgo逎q2x9:B;jk;O?A?7~O i427؞1yRWm~pJ[),J*S[&7ռ5A9+Y 'V# :^;'ֳh"P~3ο-5 /ynpk~XsC|o2DBBp_k+:ovbyJ/GG}9||t:M7j?pP�nr]3�p)}9I6($NP|Ո􊛡y~B4<Ŧmj#k"M( &i"3R].nE"7vDzoQ?85gZ+_r}b?w]R9lu R!Rɠ;#0ǡ[S}AϺ7ȹOx,8aZ*0}j U D֪br40?VS\է_\E]SçaZ,<wesE=("b xUHeq'׈,B!/DdS gbH{B%sqB~x?5Rmju:v]n i$67[I}BVsx4 V1LmK=w=pֻ~fbPzqarR@BEDE6peÜtsBP QJZ#9nZX&9OPWb䜍 /aguzhv+>n%>u D�~ 7Lǻ5`/rMf=l8jLºZ^٢ayb>�L5&ͨnj5ZhӫA~mUskF1a;rʆdENs `chg}\[)[OnYfT7- bֆm5=8,^=GJ\?P䍃Ni?v VXE`q~pM_xC�HlSb\C͐m;txcNe$)l` Z'Dn�Vozӡ͝>7SU㡹d* r6걍 5y 0Z\8E^ �ke@,5iq " L!xV!OLV swWfG,aAsԞ:_kuՕw/]skcMsc׈`7#be-"Y3;:χ3bK ^eY],B{^~jd"+<ݹ+󃩙@}sh�ߟ2l}TG=iP!Gon>2{6q<_AiAٮ6w`6.=#Omؽ|@�<HF4_(VL 15kz 6ۣ&GlH/GBNd_#,"e�B6-r/\X[E9lQ}a \qxQPl{$!2G#$"(hdQ]lrrG%ްEXGGԠFk 7bFzy"GT bA Y[$B46L^qCQ]!50cIx2% NVuMlP Pt{W)23.5_˽$(<<ϲ,˲(̙<|hsʕ7[Tr+;{na9} /, I[ERV"_* 쉞qA� jZ[5X<+a@ v2==snw ʔ"B (E$�^=4EgL&U׋4w#m1LbDpBQ&hl_11',mf?=SP*Ym̀dL5[:>?{{e㑥Ϭ/AH>Bd>@'Zt|"ؿSgrz/=7C{uz䝏2u3{,f\�8ul z,I?�l>׈I_ պ ^hǾh==rȺ ӭ*AGbN>9 gM-T!eDƵ: K;UjDqMРaG+4~̎NvgEN;ZEnoA.cU7Ё6`vg]xmɎwX]�fw.-Lj$ 0?�a*>)gm% m-ߴV/ syWGBHTpc izC6/!BvXDUgk a:tŻ޴#v߸P CS]g0bawDUw�a7sl 4&ɾnkfNX9BAuپa~pUh@ (I&5aBP3v|/Dp3{ v6uQ1Fd݈ۀȾ+t30KQCbF[GB"0K),A!=0BO1trEfMM)OrG`@ظMZ�ք8FhP^y=⛰& m,6#1Qvc:2J'4NzxazLY'oQcTDEE8rzꢢ IOT_D<p0\TTWi1;Y&�<~0/�./ : :L\E휜+!TQep_v:c)8x}wrfO/<7uDǺӓ&'AeU 2E]w ڭ*y`HĭK@oLN_H~tX�HHC|^U%̆p 4hꖦ` 6s{+?Xk>|ͮB\hjmzR�lsV4&<y$vYWNThM줼D/A<�wx\!:e͆74! O]]k՝ǟ\K$DAۼ(ƒ;+S =3x}o>o;"j>6N;4 ;Prap13lɀ]z_*<s3`G|1�9P#ALƯ�l`\Pl[MӳfF>d-U(KL˵o Adi6SUbD{D䪲BE@?}QgTqEH\mg<De@b*?vzdturT.G;"PAn6,e6B5 n[m;Ϯ gn 2jKQ�ƧVkYLcs~GјF{~b!`ka&pxq@iaQӷ! //r^HLoČV$sO�79 ާNO>|_;{QD7�xZƎ%Ɍ!a]b_K$b$P8; kH�$s9s!cL[G$9p6c.'27ryPeyBr" \2_zFJApyRa/*'<Ax!4\T<ANn 9&$V7K|:$_�>Bĥ"ѧ8淸� H8斱8z :$dYj<A8ZRblxaG/@ֲXiG{<B\ G16C[  ^mr<?,nTC�7B1OT#zpT{ 89E 4o<V2'ț7Oؼ(v(t3N7qE1N7#1>JEJB4vdz3v8uB1驣7􀒨v�6jx8  3aC3em[wWâ(ʕEQ/ֹf[t�*A}L[Noktxι'/>qneiu='5@6"XAS"*h(BXLX~P#*͂y`8�UaiKMLMt[,sPUiqr+0زM gP0OFL3��J?J#-dybs*yW?mm>7idK*fv~m\7Q]&+nH?=v/ w'g( DË2{c݋׉u eb6]]ȋ 5w}`虪a;k@mϾS5ܶ j/\;:cSbf_BA Ml0 sj@,7@}O#t <{p hD[>]ʄޅjFWSLbbyq81Np7P&ZZWcr&]^tB"x|j6,3É҆o:%sܺ(sV _;9np7l fW+7xJ8;;n R?֛BTvpZipP|O^S?Gb/8�G'oR)1F4R7�7t+*9]:sOx{{uSM ٠s2MNGu0∓1آ]Z?wzML8ǞZ7sz9Nz }l\>Hz8a g9i7h/D qC! u:\E>Hcgl#&P]hd?u~/nNHP�nv777Df&ҹ7qAVC(,8Q. r#l�X{p4W} b_W+8 kP�!@C[>'B|wh@_WOz]&QBZ ;\d72ǖ?@5ma<NH!uk"@Tktkc3vz TD{9kDnk!r^U{DݞmDj׈ Enc @ds1Mro~X1`hԖӈ J*Uy8Y>LTKt:556km9cش:{ܠ_W{)l'H"V!_& hnCS&UAzAVQ) 3kk:�"?4*tr鮭eE1TP>>Dit%LWFx~`]Udv~NbfI3; N߲H"pR%Ae~ /_Xr$JZJl(ҏEs;&鿼guoY<z0@H.\vqIܴ7қkY�.//F}'gkc:ȥ-;ۺß?EռiTB&-TЍ!X?o󛯻UK`¹Vrϻ߲C,ČNo{1y=?}tuUEw=C'tm[Jyk9=*dMD}b:tOu6^Ы,;kt^muJZU��pGv�[Pص{TSǖ}y.eGe)mggz/�6oiOam&|�?/rכwmRE�Sm=~cuZƋsxf{g[svʺK)(VM7afylG渾+Sorau9 Y o\}]ƥ2bG/rnZ9EFt0"OBgDKCaJRdmMGUvɹ7!Vyݯ?:v](!Q3)YXa_gHD =Em@0[ u].oHYDr5rbm5g͒]ry'vXFzXj;j}u߰OrX;,8",Q!F̋oL ՐԖ"Dܴvd@K4ΐ]<AY;Wժ:\A $)ԶD\m:$s-SG:??¢CO”s";'ݨۓ׈P(syx)ӟ|g^RN덍zvjpyUU�.@ (JR/JTTb/I'~ wwt3e/.ֆC4, + rg4Nb!2VyDTI9 l}FnlR06Sn/!b5G*rؚv /l=ژEyJ)pFu+xºZ\@h~ws'.ρKub8kA5yӴyr jכL~ꗎoW/skjR F{.|כ>6�m߽77CSǢiw>̾vP͡9s=5[,_$z摯^y2�8L] oڦzV"|l7sƏ;uV<+Ξ&ӷ[hޚ 6ltoҢ ,wFq]Y]�_sO \ʏ|%nvͺ_E@~`?2܁əT0:9`7,I]yĵB!mpmnv/.Dsg<Z;߼3D ρ�=>5Ӿp;}"Mur0vͬ^|�pO~۾KQS6dUvMCݭ:Jc&v}ۢ"x,9xw+Alis_\}%9/ٱ''\9( �EA?xtHQlX<=ߙ+??Е_6>)@ xCa{y<1<J3']#a"ߜ+!Kjxy BDbp*`37C` o*Xd\P^m)~\CC$1f1cǩٵ �gvT�>Gmos"ג7jXU4<([ൂITH] !'G S4u3"qZ!AnTԪ>SȪW}}ZV>(AFHf}SI94f+)U߈C("Kp@6lDmzPP Aڴ^P թ̍kM9Y)$IәzNL'\͟"P$$X~HrH2Jy1̋IR(JY:3[Ʒxnۆ^ _+b-/rB0]#(L>`U6V0IҢ __}ljhE`l&۝^0!bQ ,4w*B ط7/fsG r d3霩d~lȾ!KNyL@F O5Ɛ]e6eg/uy #{V[oUͅ@@9lޓ~x/xv&IEdrHSn9j=CO>I59� [nww~|xz{!I;ؾpO 敉6mIĖB�p#xhl2;FəV8rͺiM<If)Aȝov۽6pӿ??06kTm2޷ޞV|g9һ㾺5`AΒfaM2\GnOAYa0`h^zrO#8LW^ k%d(vԑV[@y<\ݞwiǾzzd cr߻w=�ns}hw LC!}KWSvkm[IT){kn{J 舛޹cdzD-o{̮<SϮ8C7!fM"ӪkbT o=5w>k4Y%��/^^sr %״\cFl|LAF}K֯XBo� VPyzϡ1ЪD;w~.R:9 @ߙf/CO06G䅧W3,ΧC.5,atM똔@>F-BvnI`]3My.ϗ{YˌB3\D Ϸ,pĦ!oH0;T�68"<|>'`؋]< F7!Bm!S!`EHG1rB 8B a@! TGjˎAGc5A nfT٪>F 1!~@ W~>ke2q4!Cx@Ww%!Վ8FsE` dž�L%T W}>7 PBQfX^'F h\ϊTt>Gi(D{R\gѦ<CO^1<F C tS@U8V-kQ$ܓePP "y-ԁR8B!AXܛvc Ch8 1 "Lo蓭E'78  =h3!bkLZNvnN4IB)3Vоa�"(1ELP% "<a`Aw&{m-G|Ggz3TK}|F+9 5  UM�ky:-_J l"(eM[W4ۃRÜ[#btyJ0' u<:dLV& hi2A򙙉K>y܀ %5iLb S0D퍧�fB\%ƫûo]d3>;~6^~S)m=>_sځ-d4Ww5v}!o l4*P2{!X!I: |Eb7L|?2cu3^]ʸX'K|�#(IM{޺Oû9뼕7%ie Y*G?XWY7/FYo^rTJ7Ǥx!2@v61 i$.sGs Ljkb5([VQЯɥ!>z IeB03T]7m *cy.BP4FH=nw}�{׎ٺMxxNQݿTWu˖E�D ݮz{<[Z�=vT4?9c.z+hj#$S$'�iSzXr٨ {!dBӧza"f:&մ8�x+5c ! G�ڶ{fk*w0XqW_?|Mڔ<3jf":wjmrM} %K @8N_%$I6N>fdQ8wع< HjNZW@f# ] U3/A4u ś!gq0c"( zV S�BH"k!B\!G1Ħ7D1B`XF}HOP^$O'8Cȍq@8ɏG'V0Ϸ :E +t# h' _ (Gyт<^J{qDx~w[?U}۷##UŸHGU > r8 9υB?{ 5s&'.BlƱ(B_GH|OI yT}GQ*g8XR|@qt'1lyt-d8'6Gq1Ȍn1l˝ H@,Mҷe8Mvv;N.l%@U @�$D ,r?\_ﯬWŚd:Gn~oݵs_7Q<- BLUFLPɉ|Y .�kWحR_L+7$)ece*8jLV&ciҢUX6)/w]UˏReC I!v D*Sdc}<ltiUy#�ø�<lM5s{h鑩%`4&aL/BV&եo\o4EDJw[?C?s(v{zijUvyڔv&|3k.tґXœ {;oVo7&��qm){u#7M}0>>BJ> oz l7V 񦙿/npu7M?ro-ڌP*۩@Y+"|X9>LR Xϸp፝nxU{w5;QpBI. |t279_> i>ASt~P[X:әxt5+-?w{٤i `՚bE&4gsNNks{nX[㡤 LB  rN|Nm}GհUnǏ$Jӷot;W 8BfYUËRm鍧?Gcv_·~p?Tg{KfS}ا[9j#{M,>XpP<hoP#[ l7Ͼm;k.fR(i�W_3?2q{wVN! BL0Ƃ,+3:D!۠s樾';ͪMء閮 ,vwjkRbyF,2zt)']\[y/ c#or٥兡L�!FM'~ێwȾ{ޱMeX"B$�X jֈ ՋcxJ�?s,xux8B dnS|f>/fqs6kD0&n'v |!geC<0C0Rq�)r!⨾�B*SB>e0_<hA !1ݨ�C7�i'h!^gDpڒ!nΫ'N\<,E\>vgadW,M0x[`mU6^F\P{и"0'Y&'�9_'!`U_Ů34ɂB@`` ܽ^ >&BL䦪Lq!p<:T BTeQgG 7D{lJ|8@�8 puE%GC`ULcHj}7Q#-C#ԄDډۻcH$Q֦!rMrB$IzR$IJt0??s(A^@QTǂ ( % AJ zueuiuu5شɻ8|[oCMlCa/a>̩ Pz I"IJb QZ"�F*r"Ÿ®MG^|k �@kkX؝A/T0>ўlwH0( �!IT4P_Q^'�@k/6.Մ8tDx ɺnPu#']H}4XBO$]W\*I�8 щ4";lχpMa{z,l&e@Jɖ}a'j.v]eƆ_g7Mԭ_x%ة ^_܅U4[2 [qb3M6)J/s`?}pzG+}mѽ.K/Jʋvٽ /n9xӕDhc?nOknϜ9wrͫ9ޠoy]�ncM{{4�`fGguq,h!bK>}^{޲?soXJm4*GQJ؞<1W>'6U֪޾yv|ݾc4*uM|oi^>SN`uD(D17 Ѳ{O=zEU&[#֦3_"4sB݈|;߲-Q;'Tlru;jn.ԭ-o|՚WMoя":kw;d?Ukbht"q'Y~미1%ƇkC˛xn Ě8*F2oM?| ;45Ђ#o3CEҡGj�zd6O~wN#/w~p"޷:m(wš�c{~b;?{8:qɃ3�y 5_5"RƸȢ6n>W'|/Ets`O,K>bO`9þk Re8e>wG\I&n6eÞ7r!R  P)WyOAnb#aէoԌNH[xwZљJr0�rQ: Ԩ3OM]t@x;@gox〜ǂwz$FY+ַa49o|s{ë=է[Z\rb3i$a⍥0/B 6;ÊUۃ4L z3+űTU5|`CU?0{׆n]ȶQc\d8jr@ f]̎**ulbVn}4-AUEeyrp$|[ �s ',JF)J<˲,z?Bvjoϭx=w}GfړF+pmy>l=׋"$T&eyn=� P`Q*LH�!P4V:S*ȊA@ռrJ~<+�KcO.Y{ې4jx |UD6sWGo<zTK xqFq h}u;E�عw+y= m?w/F=wjDIx_ yG\F{޺^r盶Oh-֖sgn.{'m9C5t;ߴ; ե,gk&÷;~oS~&?} vkL&Z?wF'[zW _ng7oMj4z^o6u0ucw2cؖV"##Tz{߹G~жu71e0(ŋqm红Ÿoc>j| _uJ|+x;wv"/\2x9>ب#D?"�w!DV+]`!*:|dMLLo&nOxv則|n. <€*{M�Ko㶙-T A0;IpׁލwNO1Vs٢U[WSZ;DJ&os P kEQJݝC7N{׮V/ LQ/[宙nٖR_/dᱛyO{N7p:W u:x<GqCx|eׁ^NN> 45+&B}o �`׾6/ACs*?\8:QmuL=<VN6nKScOoޛ0Ԏ3ǗeoHGPA*=qD]8ë6( %5S%N>c N 6l, IЎ'[N{bюGGApa07P#Y6eFq#" $ŌKyD`-l !lS!m do-BFKFUyqakȵ:ĭ > 4b#_4jU$qT\UDh#W}鿗^aWh#AFKz|f>BB iPkpTh\3\3Vk-5u:1rvy%@�9 vJ5,*?'Iitu֞%ze_H'X.-�A_a?؂*EJvʗ$RA%J3lMNMvݴ",  , PJ1I �DyQ�P%Ѽkʜ-[iQuR'_:Y׭}x7z4nhI!ʲv:}׮Vy)O: `@k2D&D@Ԧm#K٢Gʩl^SyMž T(\ݿSvdkS@^hIM` =L]M' e?-8|!6s>*7|MSk^&߀/3:1<7?X= >pZV_x|顯^otvENW._|q-/hf[gz[{r J=䯽g !!!~&4*o[޷\\?zMvF g<-Ow`jsow|Usϧ/E 7SYxs5[sD]<+/[Gl;6/+?͓zb~>>1Uwϴ{@D//]퍧;ꯊ6 %B}7s|@HB7A@/fWdj@h@#s6/j3<WWn}zL^[޻-ݓ K+֓iMδk6%6eR˟>'^d8f;gos�זvugL)rOΆO1bR?87rq=;3; k5S~'? nB0wa>:TsOfK5s WnP^xʓKk_XGjURɃkϟL Q#~ԨًR^#](:fI@"/GzH?V(hqn0w$839n-\O_ kU�<mnkw<GMƲ<ܭwVۗcU:ڀw5ֽ/F\՞a'{m%3Ac3a{B/7w M8kEh&r^s"{P5qd@e$*8hr'3\FIf#2DlVK˛mDd_,!R@*^k F^ׅD`+lj]A[.P$`NIՈAYSS@X�rTuш0#@c^5 B|W p kϳa'Nގщ Ԡvc!{tF���IDATDcVT^р?Rm7guǫJrSF6h욪ȵGGk7n6T}>pQ $x]"2!5@Z(p8̲LQQdsC'UjL0z=% .WABբt,efI$i2iwz̶ų/_84 VT+QJ@uAT� `!rWVy� T'zDx2z& tz8>[J"\! BUlVB9AȔqMÓGB5u֯$%͝4G"\`-{Cl{tվ(ͦk }:AݱOoV "^z74?ԯ/HGmU{tJþTFPDF/B �T;jVgs}�KB}ԯ-I:Ua]֘n V7_J{rQ �\X+5@(7OmV@=?ĉrTr'uc&1}Dܱ[bx*rXZqGmw<:1>,f6!Xv%u!`ZŴBnqa.kZf_1p</>󉓿nO%m{{{;%swr ]a"br<7˚d |Ν\eQ;ӤL"s'N߽L�m/i :u:by+{&hw l^_Ϟ4"�G4QD{%z:c?iӭ}~"Ѝ ̟ڀ̝+4B:d^Z.RrO7Oll<Z?<3F�G�wH�_<|://O=u"p č.秎- (:}lyR; T"^"uhro<qCaڛf�I(,KCcg@ qf|:QVG 3]+qBAsu_�,Hě`x k<i|7ʌMzdh]C/<'DSugb̜ XBIp=A]mtQ󳿚wN%>`Wxz,B#$BL0EKR d3" JfeGGrRXdsQ')zaê_ U8ee�m^) `w G=$#">S}h)rv>N'd*:PX\]6Q> VC38"=AvE s"i^#i^ yN�.l 3U&ŒYA�BXos_>FXpiOaIP#lm:<_l>�ްIi ß (l*s *FFl^%{OV\\</ @:@_9T`Q"R*%(0 ٰȇRiuޤ۶cs'ϝ=9JyB,RP-D w ow!+^b%NvO$c-P1ȋT)U^ =B(ϓK[3= x03u`j[Ok]m?aH1NYdͱǗ/Eﮭf_]yJ29n 玖K<c^/+W@` f<Z^VP)?;\-. hIv5_!$/xg>hFOn go~ܦҙBTvPwdW 06ȥFΪ>jDzzCDx}`x /9*XK ~Tmpj] έaBtm /.}XU}">Z]?'FtsO>2Lg =|o%j+)'Y`LhCiK_=4j™msyK@8ږx|!Qxڈ>ų_ٗ/ٰҟYpq93ш&bCsÐ|9""m zꑹ`U%5㲜XI>'[;-5CZ$+`@v!,k"qc'+Y1:Ɉ`f3]+.H6 &0GEf<-s3 VJf̶�]"H25pڥby (�1R6>=&kOSr�7xqwCY%eqU_XL00xC6s.B\.-$c QSC]'+Gɚ0Y쭪.EH%BHQFHB1­Su�暼Ɖc$WCBW}&Al쯹Z@ǀ-vWTA6`'#KG >  PMbYO OP>> 4d4B4BU>!�Oq�GHհ.B\x rߑ]n;P`t"DzuaҰq¤^ Dfd Zja}LcxX` ,z \}CHtkow{603=+fo9Vklll|||llZr}p勁BPT XEkanZI+m,+WH!)([Y[*u7yq]o>rZ../_^Z>X̋REJ(?|*Bv&wcvzioh֣+(& )a&?^sPx)MxqMfG15 ۓs{YB ۊ~/ [|Ggm^Op7),X6nl$W ~fyqx )r'NɏDS׊9 `3}gY2@y=PlX|?Ϝgԧ`b&?z~r/'M9 #Sb7pT|Xno}\^{MKӓgy"ȍE61b8GwΉk;M?T"g0DXƆcraZIt쩅|$g}3s9"p_~r-� ~ߚv#j W/\Zg7 Qr#ƿ?�\l<Ⓩ\m)j7G~0"T<P1wy 5͝`&�=j~'",- >;'ϝ\c7s]i3h-xqpzu&gO,_9?m^aSo&B&⤰Df$_a郤7'8n Yo]Co5v56DkTLFqHQyrm~5su J gwf($?� W+c�V(i#qH2FN8T �%( B\GyY�%_[];g^c1y\)ϱZLZwGFc'̡OBzFdsD"<fywlGX1$]qêA}dsEaO,wNihƶEyRuʼn[ tX8BhM> @r!Z(!�p)Etb(+M$J[l6M pa_[r~&Ǎ#i,I7/^v݈lD`3<Px~8. ESgH+J.f q'$-S}O^0|J~ߑ9$It&&&ƺݮsMQ5Z~V@VM �2\)HUj<A8pOa|!z_M;g6/.,\ZX\CDT*Q@?4u>xl`�Q4��$)tx'Mk*tm =�zRONmuM!/|OYvm/<\@r+O^8zMֿyqiss? "2^*ooo\UM/|l?gQhyq[ǿ5ktjW|\]�.V΋' JMyOk3Marw&S_rñw|O~69m%pOO] ˋ_C_;=F[,4,_ t>w羗r|oUʟs1y+ =QD=}Vry)_֟ k[elUV*[el.$INv:4M$ID)U3�j.)(CaMb`ҙ ̆ÕphP A!%E ȋ|X z?_ky2Lm7#~}vLXp0\ֲ<# D\@NXZz+%:-f#h\E^!IonRl"ҫZ, e7f2.;uls'6{RP}&ډw *ύ_#SS#C_Ϭ J~TБSi Rp�_W.翿-B𑿺[7Y{(`&?'M,$ًO{`͝O?Uu>sl"@ʍ/˿-l6B=w_3O~gad/I|hDkǗWs2\lAuĪZ#Qevs'䨨4#._'2W*m6UN !;wbϞ:vy/,šy{»sލ`3gtʅo?{byA?Ͽ>K4vvITW?͓¹խ3C?_0DZMc jx< S?;'U/{cJcWt}}*䩵-T'tuKF0"lJ=thoF=1]t&'W+?O=r*7ꅿԩa2�"@WCuYAqa^V<,Ds|qhc'*EƹӫBl9aq'[i/ NfQ$ Σ-0쬽sI_ ly]t|0H|MC<86o][K~*An7k+ 6b[6ʣ,Kc1I#D.$2Y"H`삥!Bm!S! (GdF_w$"]#Ba:wYoH1a6 {Ҿ?+ 8J CjQ}O#ΫΥ'h>{xqt&?D +4FsE6� T] q=AU}nÒ.u1>Q}8@!Thލ> W}Gvk^FRoq#+]3-8/LBhzʼnJA`8ؚ:AN"~HW8ǀq7$B&G\ox@J ` -5* Dv#S1!M6*/J4MvjZ4FED/}c[.Sy^ )EJ"&T 0!rL4dkjx6 =wwx=gǧZ Õ`ϋL@jBVyu6T )m%nNREQE95zV`N}[S~^g,"94`]x[4+C us&Z}7nd[i'V?h{>oz[gC} ǿs_pUdCztWixׇXFX׊Oꉿ(.ϜXy\ٸӦrz?% 밶}/~/Qh`؄<3ѽ:ݰW.wO=܉3Snm)z0ю8uluɇ.PcZ˚FC�zcO<zӻwMw Y_;ҥ<TMg/|CM⳿}7/XOLGٜqP ePlX$㹙͝ #-ش(i!fKs٧ oxv7!|O.q a ;CH49 ظRMY]~_Ωol,O=:ϟD3ZN ln�(~];[nl۟"Η..-d|2rׁ:/ǿyoz{z cC_K™7p|#xi>Fm>3ura`o/VG;˳:ķ􌷋 �zͿCs}[>S=p[3UVe&k8f!n@ǿ};f她yڃCw@=p˟_(VQ~2c.?21>[iu%W.YH\Yl> 'P}hU0 C`qf@:,0j븵@@%qy~i%7{=2\ <i.|Y!Fwax<|[@#@3pg-BZ"C':�BdS##xK`B #5�6gP\q78ȍq@ jn33ڮ6!bBy;[_`1FEhkv8wD vw8Uz{8zO4\]ǦCT}X Oа N3 6S}#EHp3FQ >^SL |G9W$RUs|.oB'qOP>Ͷ8D`P|MD#J_zt-d80}svZBN<# AU^v;@ B [{sV+ET%�g͘&EEHDTAV+M]ץwtvJ'w&%N\xnaia?"DwǗãx%mEC T#]MAU^.+Zl9.J@4IDT�yQ@^@@۝G!|YIq!ky֕3wb|L |"k#O=/7$sR&+Ⱦx鑯^m79}`Ko}riiW|ׄ<P^#Fs'C7vN?" ǿ{_xU`c#ϋu宷C7L`yS?Kk+z|+k6V1<ý}`-wϪH`8(./|[Ej#+3s䦩GlLZŋg'M)?HdCꟜ{kWx`;Iy;}r%7Džb_EETЧ~>Nrqs~Cp o$ǿ{7@HGࡂE ĉ ~3z9K<�>8SN>|։o:tԨjs~!^6kh#:ijK+KC|>nۦPqsgyluc>cV҉Zϝ{k}:eŋ'WN=K C?7:]f*yS;ptM9i K'[9wc'8߹agEg_X5ʮ=:Gھ3?NA+=._X{+P}f˲4?ʟ7.i{{5s�/Z9ʉg}aLUXYΎ=P';I0ӏmJᅳkO9!|{m/7ם(s7|_K1Zڷ{uz@G&A]/C^nH"G P�'3<=Zzyщq ~uSBT;y#?4oxg+,gqYִ q n+ˌ^4O6Zp窸A Q/G@L{L-,@lt/; s"[ .6X�jE8H׉% Gtikg ؅meNmD'6}Tl!Aft#<Cl0M12z5 H/%2vMESO3vLdaۦ,O)ruparmRөDDDY peQA""bف��PQ@y AðL+*@f" 2(3њhVv9r/8v¹P)E !U*MT+MT%HPeE3!$D @Tb‚W5*Z`_lb!MէB_ zK<"/3TjQL�6ȲC/M2- JY$iݯՂ©2^㿾eLC<qÕ<_G q.S6ct :_,�Q|m<::| vU Bn;pt||2L'[. / . ʝ96ZuAQ򗨘mpt{b*H{J07\_d _5H1uf'Vw,YYʖ W>pyXs&AO20>ٶ33ҋkή;6wq@nO#Z/w211LX-  W s Rx/3>^wLk|51jpyq47|a]oDdsGǷ.//Y{nv8FQh樌lH+6Ve!* +7deۮ&x26r0\Z, yNњn�AX6 #7OLooO&R�X]VV/EcGX]Vo<H{)k+JpepÁnx Ooo9MƓxz+ٹW4ԈP k6�7#Ball'Z7v{IZfϮk ڨjӭ[-\ofH׵}{4O:{|ͭ6oX*ر;1ZY^~ZhQ% *tդw"\s*EQ<^#Q3M:*@Y&+l]9k2}_4BHĝkNZVHW4W}[xH#&Q \5jjU {U!E>!i D60bF;#Ҭ4a TB)H!k FG6J'엖 VR..sYyeYw-o%P%\ͭK}�*qڭ$ELҹSOx~ o+hIn)dpPU \׋H 0@�,FJZePCܩUfD ,ͦz\U5چtLojU//0*I.̢T`++aoN{]H` Uvs$H`~}f_xkvZҖ*6 lzjyᯔ]cS6~AS_G7#{ Rjx[ӟ|C6 xT/*+TgVO=1f,KW|unc ԗk`Sle1;y]m+ ~m�eG _:2/sl��rapKظe^<"FZ/Y3:~+5..+Ve[5Vʼn+u0�!ryaӋϬmܥɇ'[gOt"O?54V*[elUV*[%*e^'MSDL4`0MMfK)Peʬ0}YLqJs!+hvo59369ݱkɹS'.`S6\)Ǽ(*iWTdJ%"+B&&׶̏u"*I)HTMAM[0#ARv&00b>Vn64鐜a b<̬qtZ @G,߇ l] `޹v7;6C5% W>5'?m<m ^ Gbʥem`�5l5̋FܭcL%"13`( hߠFEӶ!Վ(f! *!fGVD\j;B~ Pݗz܂*xfJd_پ37@llҠ5]E 7Gdo<p5a_긪�r*�d?A %·哾6*1UVi!hQZA4\pȌT8ЂQbydk7té!!  F!B!!QSr@u~gNgoc/2rc'b [i^ݰ$yQXFϮ.TE s}B 'YlJҚ*ݨP[yk"`(BP՛0Fx(B�Ņ b3CiT!pKcO-qc'vC@|n?!Fpbץډq萁(iZd @fT, ?jS8Nm,##\:4DcC"DS k숁GI4Bݪ2:kryn�N�@$yE$džE1ͰcYIMB,ՌxS}h7*BB" 0$2NJhn=AN} FHyg*yًj$wZʪ>2O�= e<A8JOE�\ D&ؠ=)\/� qC\zR{0x+ز0'U55ƾ oX]`"y~@Y ڹ 8bC|Of<>Y5GmbC$w>B\Oqtp`#?3z NkU 2jcR rxF\ !cbXe5 GAj`E'Ez 6OQhDG3(lITBn b$vznt:N.yNfU!J"?r"աmh;w;?xmZ\.-_Z PYFEYbXTir"L*Ph!HIE%0kCnWf!@$$QIJ&%IQN;MD *Lb Cb͡0(�r %D“KƒfA%f ?_|f7U& ձ{lUzRQx ,^nc(̅Y.ҍ 7'kE.H|O;;M4d[7x!q.6FDfƉ[,_l `1%_vXZXj+}q>x,}{>L N<A~mNa"{w X^ Q 1oCc+B#'֘ EֽoמOh% lp^B@�!*EFr\n5.*0�QeX yރ2Cr!M!GH;*o|/v`S h kE%b:|:7a:Q}67AA9R} :m]p-́ A�$[!30' �{66vB$2 cqBG@B�|e#d яN@|C[qT}B4*OYa-h|@0;v0B"`0];J`mymQ}c | xMF4@!q*G0:$o (z&d<4s!'T91yA#HR&i|sZNa"ƑDT PG)B> �Q P' A߾[:T :QgÞ`=!]NI̵s՚1.t:p"ј@;Ǹ`n,TCZ5ѻ^eF&-I<[?Av@m#4 ڵ+IѝUE)iZV2\\Χ]d0DI �* ;01۳DRV++Z^d*MvE NTD*_�׻ D�j'1}}f+@W#A?E^kS}S13 id)?Res͊Rς`u- 6īکaD767b֪z&P 1TW$! WT]?5= 䲄qY#,VhD33L.Clgi{=ROsmBʷ0s�y&-as{F'IJ`C\JWYjhM5� Ilb˚A V5r:,T.|w??@{`I7�=zPL۴d@ ,,:!Bhnm1TgV+EGN$O@ fbYCY^n L~g yt9# Mpd�Eުf$[ !G'>zXI&4 =󛕝rn/W}Ȁ!a!$ Ć9F"Dꁑ-}Q4B\X ^ 8U"X̂Vմ&怇! !Tcg5@G#Gg\P`06CH`+} E{�0p6f+: n# 0NcH;Ӥrw/ ~66kXjG l$6pGG9NzU [p!cz]rژT!w[ġ_\AYLJA FE/x:` C�(Ēd!QȎV":/#18$OA41,A�vdFu`ȓG�GG({]Dxq7*Bns|2$]X56UF'G&pT_` H@zOGog=A.p<!o0p<As IM'i;-ؾma!lWs<?GHkgQ-7P �BD"N & G/L*j@`U# 3rG IOL<V,<V c;s\67nl`fN{[e)$Inwlllll\\.<&%| YF*U@>rkoSwo<|mMZX_[<9�I+ISD,"lyG4@5 'iSo*BDR*m%I~Ao ��i -D$( >maTX%eq"̒'R{r@:ږ= ћ͎ _LEm葎q/ՍDWLG& eNzefyk 0 ѰFjyR$ʀ M+B=gsBl5pkIygUC@�%d0i{lA*V10sőlF c!d_PHX']!Xk8] Ή$ pl?HT0xM ȅc.,ȝ{!(GTYX Lh9䲟-qBU/ũ+a{B84LY!(@ `CV=3'.5p*B9aA%5ƎL> Sc@gq5v "RYDkۮ-a1~zee:xUb\ GA9AxDɧC<#E1D4 "9:w'̵ %NP(Ga,B< p#4vҲt#MxZx~TyO!x[` q<?B|Q]NF$} p�UG d 0!sn%:B lIp( B<vJ$wҪO*@)8z pۉ|^tlfk' 1PkYwlGXQ")t9;W#8X\8Z+@YڒǍG1#$fw`?5Zדr|Gy~tsl?@Q8O0xNukϵ=qOtņà\p)#$f䴶15TM#5 ,r̯Ix~8V:P 1lyόE(dD!##!l<QЪȋ&7Dr=AW8fX4RLgEQGcKPNEVZmv61ٱk3.^X\_[[YK4o%4A@XB^/t GN*BޫD9*JRjeFU';V^*5B7U^2*V�TWÅN$TV*[elUV*[elUV*[elU^悈iiZEey쁤E"/!`T ~<fn;5>1{Ծ;w|gN\r~ymimQNN$ b0A<,/[9WW!�"*PI i Py1M3GESxJ"$:vj@ɯaQl.fކN$L|^.&)Uvs'gxSdn=)o=I9Ry46`v$OElW==5}i%fgg1iZdggJ\;@̞F;3Tv(jzE| ̬T!L98NIY+NB:̈@a|v"Į;Rrw8G)! ;a_'+=G z ;U zLZaK > q>7<T̍v*85v1"0r6 B"<[k|PT*;Q` m~ WK=E;|6^ {g꟝u$̽rw2 kigndAk�C?3D ES!Eٵμ6|kFmD F +Hm #D!d0E!HB*h!7qB Q&A:V0ܛaai.!Yk3N@7,MuE-Mj:Y6N0DH܄Z`";<;l>TP � P|"<B"n7ݛ6.* |aWS}QPNV'`L(@w;_#w@#Dw"t\μhG0< BN=r!8B aN0KaiB~Y|Vi >=FxҾWG 6qdFa !xp)WfߵpVEL+خe$Y8:@c2+2OEfy~SO0|ŝ'% T{:#,cTAQzՇP}ޠ3MkQaTT v3/'Mmtd�@d6 "ڨh q BI5 x~ľ|,e_[n0zsCy FDd? C/[7l6`瞔01lk-,Bꬭ(JVv{^K4MU&r_>� TA*/TSV0'$P*[ﯞxA0yý{~onuۓXzYU8"PHXf?sRƷ */!2PRHR[@�N �rD[okPDLT?�Ȑ C,%{QvdBL!:Xn"Uy兜 + (]Y;EDT"Q*tD E]E5g!O:9"0x tW`@q≐`qvFb6wjsz#%^`{";IDuEq=cb3twtwe;�q`Ǧr`r_3 `n=8AX95,j\vY lADDfsZq'.*X�*c!5kl.BP4F/c,쁣9SLcQlNe lTJTJP}_"6;/ l! D�B A!H !QŠ�x"R4A c[B#Dv_{@Cc'UC bĨ>h#� gT0!TT ؜q鐳ͯ ؖ9o:w4, �[88p |ARY\CbF l!Lq Z5 BNqc'F8oI2 !}̨!>J!rqJ8g#8B`qv B|ćTo�JO9"js.-oBяphn'T]R f"Tx0W`M_+`K<8nHy m| l ?7 FTfqT7rX\gA'L59 O9'�` Ϗv!IN"$ B ͟x$  Bl0;?hct �65v x`M+|BalWT){\)nIBMH*DJ!TY^�dlRֲl꥽=11wsN__YQ �,Tض<~ vB�`*S*WI〗>E�Lg´("WV$aG8M7L) 9; Zs6ٲ7eF? '#wtux)iņ[ *qXY?4dچ2MM] ae C؍lXr\II%17>}|@MK0CѸ8.!�1mS1@ÛڽĐ�YE>78X靹h if�BLl,A'O0W"@ c;-B3:Tw9Cx Q,%N!PYY!ğ !NyRu1Q$wu @-|a !DYZ="2ZZm`c.B"0ŕ�F LI`[alw⨾H cԈ<,�S}2EEB�51>f@v!M),#ı!D"r"(O;pA.#D,z;ټB 0vNX5# U}`ԤYC KYhmW*Kd#C1ؙEp__dK868, B|0#DvH= :X &X`kT0>ϗ[Km2s@d@<# Li>)A�!V(O" B|7jBd Nv0(bZt8!6ҍ 8�f%H+=/{aPLjǐ3frrH7bA ق!Y bs?~K0?z$9H#2;(B|{SO#X}vjX|P'} xI"8άH8/ Gd!Xq/B$x>_. z$Y#$ R BFy8z[{Ygk2 jH> Owc*\O;M5B1v˪-WH"bTGDVyTGv)_L8vg*�sP UQjrQ0QJ Ҵ"dAcÙo]=oٶA:_YPLj'i'I;*i$y1Ϥc&Udb*tV�" bB�"&jRJk7m)>ՋGޙ jXmt!t إ~#"W}tXB9K$Ŭ^w0Oq K7<HrVje\N͑p+7=v˖YYކs}`�_`<oڋ y_Ⱥe9&r>6BLVBH^!koR^|߈t�A�VHlP"� ZqA T4!Q) om8ZWC(A "`-b�Y"6Q5]bcN �b `:ʜ Aς)N(HD<l%.$AnTb|lhU&b5(b|L`Ć؈`BBw ̵f0BsZfA*rIi,b`&Rb#Jz!6T>�"\ p4&G{ L{xRI|:Ao 7I8 ctK:d(.p `.vhl#SDD(@pG!B* (::=A�6k$"7ۣ@.:BzTcxWz/(&B|群?P�B|O!XGHB 7"C�$rϓ#T!Hr !>pbEsR6TZu4R}pT}> #8jV}qf"CiAw a76cpk'$dnC冽b5Os?6�-i3`kjWfD<AR}M<zamho],{`K$}XlB #$LE"~�!@p.G3QFB➠ZOEHؙ< 3aB zq'ȍc)=A C< 5sHi(\�.63ia ,,i03)aA>?�" R@ 2AT� l�@)N<g}]ΜX29" <SD "B �edMZLjUSlp!+DDTET06֙lx'/$}J`$ � k8 Q?]ayCO]�Lc. f|K147DnF4nltrp=YC='X ߡA[]Rz$(mEʘFqBMzRhϻFZѪyuzl2" Ľa_7)p~kT'SN*n"rtNa5T ~6l�66sG&tUA_ywjv)@i(As3g. 5v3 'e! EmUcH0pj%BW!8 !`mpDHؙsEڣ9+Md$mǍS5tfژ�|kFQh 0 j]ݨV:U}: gKLsМ{k D]񑶿&:)2pFK"rHEiUh9*2aSג5a a"Ī�*]6HDRfjUF]/G齬FQ}B6^;gmi>(lC^iVAA\3TT_N13G 7QSNk6(Z0Ħah$3JCvUߵ1B[[1IR(`Y2kru&I՜PP)'� P@@@P.\IE�Ч=>v:m;ٻ侹]:uյ5VChyF<�V"ύhb*m$UԴԆ''Q9["U^eSށg ^Օ @ëICE�ӾfR9a1�ȣֻb;/L%�Og:W#& mE=Ѯ!C<Pv Vr^m4zC'VmTA'chdudx!1vA#HPtt/bJ-7鼶~6X{5/UKN DPjC}q]{cuW �BEMjۘ5WFx lklQFdO{f6Qsj<v\ή&2&EslWW3GVtio"xb'\xW XWG+wrb<dU jA�# U|7ru鐀СzXQBNPDr_.23p*Fװ8{Ϝx|Ѐu7jՏ2z@u؛T[o{H|n"CP|'y>[<o@ ܇Q&[j>{ce;4[5xbR(W軈a촥ߴPY彾tZC }8ԗܡ Zys#ׯu#Sx܍( 䳵5bgچ"K@q+XA3R#:Q'9Cw~=d/WM>!Afg<48z!gDUⰊTF;?#Cu8</ۡOF Y<35#` (8lyOk6 3=Vy>{<"[Q`/͟k"AjpPFdHzX!фNB&FecNVyYR*Mvz^BD/_oBUK)E I(e2SQ|0. w[w>-?t->z۽IkJ<t<1>R|%/wcNYTl81S�R:NQk�T�&dVQN=JARbfZzWYjy,76'P-;}{YBwoa-Nm;)7�kvYukA}4̮,lѷkB[O2ڜ /d{gdW #םثyS\`"_]mMLԓ hyD^"@z\GZk6ry piPp#~ E0 G:U3ް 9 l!$>jr;@ܩJbUBBL[Dv`0r`Oն _mKVCB1@�!N}Jk9i/oPۃ3U&¶ (QanUFT&ϖHZ⠂x6v+G;z"1&0 !  z<;Kvl6q-EChС"3:$*642gm,5v`4.ItDAo.F䠱c}dع!_d^˨ȌYsڶd-B|X?'C)F\ rK�Fx o XAPd_H Z !EkyClQq <(mnN)A 9{7C*"DT|JpsH86(m€> b1~8:,r(fydq`oc`5$(8WbB!a1Ð'ҧOУOV6’#l<hϷDq(b1!=X77 Qe 6/j#2+y!bmΏ?�lp\3�!2OП*R&$IjE1,, ;] 9 �6v3RJ$" _Ͳ,M:*iw:v:>51mWɉ3'Ν]\_WVANg"M: [DUokU~ŤB*cn�5."B*A o0#"%yB*1ҥT ^i/,xMjZz7mԤI9mlm:A)l%LҸ[`v r+dM<T3; 81e0dz0oB+Fy0rlؓ6U ]&J'㪉 O4qЊ@\JBw\jk@E!k6S! (d&ҧcBN=�t,+s̀-\)9!8J�$WL7a!6fytrKPoH Lmc&tB|B<@!  !n}đzB NT_!HU !Viϱa\ Il WzBvw, XxjFl, }u p lEHq:P@£?."!(P�!!oEiYqP#L:r]8VtAF!dN 'Y f86hxԎ0v2lfil[Q<dA?lcI9C1=m"H},3v=mdN=~qiaYSLJAUeR0:Q|׆AY&U ўZ5aC-IQQ (_9A_t8H '%g�#skB, :Qr?Ǫ IY(FKņo1'w"GD8Z/C\q ,!f&hP1 �|d1g| c'Ȍ#j3呞ތ sy!p`4T}^3VƁr4gioe2#$`mr<D@#jX!aO$B8Ϗ:}o!f@x+I k q Gf$a* X c0Ǝ z|F68v|@kȞdO'U^]\jn-w:v�"*~&DUk|Ka @$G)p_[[_/+{krλ8p~COOoG^ 0_͋~^ ᠠd_6~ږ'�JSNNz=gpI �J*DUB RS ,I$!.1IXʳ�'=k]Xw{W,_UBxOTZIOzSy}/W;Z?vB<}X1:ذlع"88艵#ޟܒeaZ;wrUY]CwUWwu7�!DQ< & 6  ؆�0`6 փ,؀ !zbMQ"5YΉ{aoVfU?'ZZ{ U@&(ik((D(u$Gܣڽ+ro7C88 s) 1e '+솁L+O]Z,P Voy`[ x `�9PN1!lLJXk1eJI!vvUeEԏU3*ήa;$aBXY^&HU~$5_4mEQ"SnȲj*ծ~5^dF3t wa5�)Bk& '1VS|P+!Uv�w٧Cnab�77Yg1b8ϯ7<_ ej`WzREy`(()xWQmj tK.AHK"!.H B!Ds"Cq?:fDlc".^lA3@ qQ3uqʆd`;6C 4"19.t"gA.t0<2dF*YȆל#`L,c)*6He<_"6|*R8G@39.K2& }2}D1yTD~WE5q˲pN')A<yV"%zC*4M۶y/hX2p%O@(iX@q0B uD}i{+lh__>xqm>؞`gJp UKk_xׯJ &"�jGO8=:�Ok30 3w} L!uŽ&e t>w ܯΓ џl$B$ŀO|۫jWzn oLM jk/|3_Q(8A|~״mɧsEfV)r9ΆEfҲ*CJʛ̾Ehd[zqKK[Y>! rqŗi4CTZV~4q_(sb/yҶjqI`hq2ΤӖZR�U&LEp9 3@*N2A љVZD#/</)v@~YR7˼[>hޔi  =Ұ '+#'s]hhkhL7 1ĮC"gWSp#5!ۺuv*ȹ+;Fo؁)F;JqO?/җ/y'u'E"eE+"OiE雓(PUq1b3!n+W[\#.oC,Y07tyݐq3/Md/twqHpUXIUw=Gi4%}Se&^iT #Aid'XKq[KA"{kkVtv&U 2on`aZ2L1FzBfA_9js7]@ePBȜuE�[CȜ٤ \_djX푻m 3%Oޖ1ס| 0BX׻ݮﻮ#b`y�"@�@��)ma@0b�iڦ vvvWI۞]=9}o=z]o6nnab7CYJV;`; $L F4�iP^zήHm9Db2okgJen&`+]Ek*@Ts"'^=Q(mݤ{ R%Nc)j>1e=wA-[�Oe^g1N 97 3go0-eWd@I=dCAOuPw-P`?E>}s2V6(3/L:_"rרJHue{H9YH{4P͌J#V˰FDڜɥ"3.~壯Q BhJ%Q 9r+\/QQbψDD"xJYiE%̀hʚ{\!,r6/I-uDk9Kϑ^y!'vs)L奍~*3޾mwm2xV4y]d- !DN{\0ѓEJ]3 .3,,IK1zomYEn[ RqOF\ v" ŷ[UK> h VSͯL<d/ͼZ>J$$<V E5g9A�c]7>)0a#7}EQQ|`MSmWid )i [_q/Tkʎn1ϗJ_k9"Oq9Vo\d6 \ /"|c8 D"+BNUMPK3sWccJ>  0' l!� ) A@0;1 (Į#mжfznO7_Y?~{Oy h) RzN׫ӓU/eq\N5`>ͥJH+ӌOL㉽M=m3x@irsz_@#p0wyɸMuRA͝/9C)?lGAEII:`VOuK:o  c\(U}%]d.[,5,>{ ׳MGAc/$ in!Y~)T4%4J23s^^؁ glWpI`ueь20oQAݒeFCe?9w!y}O@EKjlB l%"-Ѽ C?I-xڜDH^ SLuEM]Pv lO[Nj%*fSl:.6*`I١P9!vU4#46߱@.}b< ww; \$} Ⱦ�٧C :Tt"W;k@_~ô`HdAN If:D4,nuXdgqXaq`=4I<ڻDBfOsvJ4#s2B& o,SHj{Y\ dzYRo]SUg'mx&�A&Sد‹allXI>h#A5)[BQy WlI)PN/ {+`w&'y~9j`rmnCr_2L"<\ VL7r朣nҸN2S }R-ie "WPQ> jS:jHPLv,?z*<_H0t")e|ϯ\9ǹ=T#8IsosB63_bp*M'yv6}"6YIH@ȡ"ag" ! 1^ ))1MA0<#E" Elb-}m[6흻=>zޏчv.a b�0qZ\L�{1$bb'/"@ H57* tu �i/OŸ~Ouͧ8ا:wV! H Ѹ%Rcrtz@:r2NL1)GISu G)cKsd"XAP&Ӝʔ�DE#027M $LSSY#b})/ƆAɬ6pa!d0_8A�I@O oZ a X-mXͽ!b�&a#!DHMރ‚$[TSe;t4|b8S#$Dxg�;!mDI'a0}u!r(bR$"BH"A}G $�+.1l$E.QPL! I|vv� ۑ-@6}r0}E&wPΌ�i)Z1n4HtS%l(g  *BB)@Ht"B(b<F!:-WCgd)Mrv`A<!@ I$Mc̚¡6mI4Hd/!$B.]SeP I"0xr0)H2pvtJ <aĄ y>bq!C!ɜCțp2HTZ  `+ hRF&r�U$+T ΗAJ6 \aBʆ-NYdb[!*l7a.hsԦFsdl ʉS3}Q *arse7s<W!kKӧ A[;@ lAswA)B9VxE$8d$}2OFO>.(y( lP>'LRE%P<_wXԲ)6ݘ[M_:<1}~$HU><_!#D`PW"AaH !^$Hs42 `N3HG^9GPIE߳sTpš&8I#dҿg!-V3nH * AȡDlvZVaw֖(B' dD /�%H@�D](B Du뷻?/ӯ~?=(6'gyAËv=DD87^G\K?RQȎH  B=@ jU6H=) q' O=etP  O`yrK v^ѤGd$dJTP�$8POBPV _24_^1^|Ct@�KAܰdn#>H@`nĹB1V-lgn2V1�h` H ! !:</'FH)?n *  SQ6-jX�R9S 3*y>fƸSA B|R"(D0<Bx?Z؋z(x5@e B">@!g ul ]2e&3E2l[,R aǠ!`%6)a J>6DO>LؐS1D@ΨNNxHD5 %#D88!#ݜ&8Qn ĺ/礘,!BF +R-F!2B tvBD Q $=@cCJ5*R 6օNVtH 1jI&BLj萪c�'Pi$Y:4bEtHx C :EX:y/EUV6TY9Yl8k4χ|lXxr)e�}D`kT,Ey@0 B q]no!ST@H-##B f@gp!Я]PB$}ذ7} EJXdR5}P> #U0}s"=ӧ;V 髻Ŋ"�m=s4CGG@.r5(Ɔza{α J 8 9l 8f'tA¬>/L[ L_54FTl BDcAs# Ql�$�HD8G $B܂ B`H"+<׀Db#9F9O1 lL:;A)' ؇ZifӶVcc$>BG"V#"b!QH1� ݳiZlC q0M 5)FBB >nvp'_|o}wU94'mcbG@mB"8cx�0XD"~7cV"(o\b�"t!  {^u݋߻~ic)@&D ;xD@bO}س{JSw'd-z+èΏfÚ=zjH8' +ɯi1ڮ<œXs{dY&/XV&.G.[(O I /u 邖&WTeN~"Kka9W+X&@"Dp} /*Ctn֤U*D3e s'ʍf _$OqIکtq&ԩ|[� Y]$bE"O@sx 4'�R[gӇ3(pPqC ImZ g@"Ħ<SPBo4aݜҳ]a( A!įn.1S=!O)P"*ʹ:;ybA'rN9NpEJօM=Cxp1 cmMA'/>4kcc?/*hR'DjJ8G^&KXPiIH L(.ge I2u3һ'O"+gXr (;y|)`;+k4y!*=zx4.&#Q/Pҡ?I n|4 tEЖcA5B#gOw>AtGhM~E$jkADhe l!5C,sLzo#h.*]<! l-B !P:G>ƆhʼnV~ 77}b Bd+8<_Iͩ_+l@H'ZEHqVƗ\ :G?,L_9 L!d:r0"##s|" Uat5*0/Y緄YVz3jB;ap$i/:�q)! (! ` (qqVI<k;_ ?Y.m?|~]0{۫0p#4B=4 D"R^��qX 8R%\ԣ>}aE�$DH<ߞƄ{G "}h<{6k #VhFSNCDMf+_?gv~eU`T9kgcR<RYy) dKn&c{TɛeYdJJgz IzcHW[Yh!rV˯cv{  փ^-A~VE%NuZWj͍ՐnQS'P!0&ʮ5)-9iaTzih&m)'B /[ȺDmAA^/q—">B6};3m9^O|^TޣVK/=iݒI6`n{Mg$ᱧs�Y=aNJDMx L�i,>__1%`U[ҍm?<`=K\[z���IDATcP{d=nk" z+fDN<YU;\w%0Kg'aA["$Z?g^Zc`rbYsUd�c7^FKa@UI(F>h;#Wm_%'�#U^ȰgS/ArII(gMw :ّ$/v4) e$hkn<yڿ2^2OO2E}s̨d&CSaMƖ.NUY*O34Ÿ�qY/YA`22(RLY;PUNˠBK%V;qgW̨6%=A<CISqiҦ0|1d^2ԊA"# Oַl>:ዟ{?9Yo"j¦iVW�'BCoshX)?i<9OSZ^F*_1`XA`V7&]+;=Y5sT߬VnOhJeҫ?^ rb-I[9N}6^9{9N=pet&j]. z5.ΐ<4?B^� fPbGs^CzDVSm@@rsz; P kZ̋pÔ 6wX-7Nɩr_ZB. bHy<gYr6nݓyy?d5ssZـST8=A!7w"pJIG!^h4'2V"j3Hm=-W^UITU,8-dYV֨ɕoY( ~=1n !8b4xpv,r]!F Gӡ$ؾYuvv٩ ӗE-ŐrօVIJiː|^堁lK<' ӂX"/rvig'0} !-svSE<_,Qjkg\ғ@B*M(<*diG'|FI;?+sWI`!I 'c:WBK?:6bcbPx/mHjuB=*H]S8oil"Lpۃ"M!څ+sLue3Hn$8-Ả\ 184sRT:GZ+}sTT:*WW=r]"du7G 4_uğ 7^8Qإ+5-ͿȄPZHq�4k̜:Y[(2:l `u+*sĺ&8_ǀ?Mn8=qjYٞB^yzo~?鏞8Ŧ9YӶifӴíbnmG |Ci)ί@-Xx `ڐy\M^ wnk''Mi#RLϥK.[@;ÔMI_*_F6'w>3ө hSLK[-.N 6wjpW he_|hc+ˆ\\mNʋmA'V '\LN2,ej@I/RG3Q�zs'Y)7*VL92K&3^@frFNlĠ6wc·4Bͬ9Jq!zߞ԰jsT'@  xYL9)3`;;_fTJq6w 0}vvFH鮟4.|~Sc HrATn$M_"!E#"DہEQL 9!lB3E"L>hl4zBrN5#9=0On<B%$BpBh!)e�Y.H-D@9A28!cu1AtN"$eFNqC602l"t:;9,`C7dOMt8NY 91w E0,!�$Ɋ H촜B@#pvY_9?V8;'v!JHނJH% a]S#B 퀠%ϗCk§x<E$%saaԑ!PQA$}I*FRa=3�@t1$YE$hQzTb8δ?H&#f+9]M$X*I8GE>(PO2(``;!9gg)r�[ X$0t$(ct#ʳ^Mřv~~ `Q" V8+,/ MSqxG2fP؎B@"dTl?$ /o!8< 44yr)U� f^GfT)c4a+SȹE56cN #$0f l061 ;$rIUs_!mlnݺu֭UXoFݰ 8o =\;%O?]v.}}{^|)>kǿ|||o>^\\}tvՋzlfC�"" ;C HF�6ֿ%5D]z2CD0%@"躮] zWWA_C}Оϼ&Pd0o:ή6b?& G# & W|b*zR$~m116/1O k&ܲ_+"]e"Ɠeu8N5Dl<2kK Y NzT1�\m4h9iR,qB29Po^\AZu "ik6zʉB>Il(/)>e26,4b0i)kTkѢxH2^V/|X8j;@6SL9Sm=y5ZdLFzH]ժbYc[ʔAfgWӰ @EЎ !SԬGVM\i|Ѵ-qDFO!mتT'"3ܜClK H^3r1cqf_û`S"tB-LRL@XRj<yj<|m-E: D UT2{ 7OX:!DBaPBIaѳB>$yHpNdkC�q];fDlc".^lA3@ 5}7pS6$۱!]URqsd9 rI(A1 s?7tTM߬@ըTE6<=f`ˆ`iKTZ}W%B Ⱦ t`N,ET3h3!P $o1H<U;Gf,5I`4O6=m <y"W/@+ns۶m&T%רI ۦmAm]zjoܻwպlHvwn' MB: B@D��E@GbiVϋ\~ݪ7�b<�^8XN^�tw?W7Ḡ̪}j2TF@�{?! ,B*f0s݋u?kלrwϟ>nWՀJoLM  ÛPH%@ImjzIe zn/мrTZSEVmqK s{/̒e `'Bd OC ++Z~Q+ i77wZ"VR7`7WPhLswޙۛ[<mn �EHgۂi[GIr;!zE q6E2P%yGy*pR CiTnχaS&A.P6 !빽%rE_z<;BGZS&#+Aܛɡ쀋 .J*z6p>@"`Vg$2"?\J7*89`pvU@vsf=x3 @~Md]Ng^ܳ�d.LW ( go~,31R\P VI *M@D]U,otȮLtH8%U%-~38sjrv(Cu�!0G oIoᔁjy~rv QS@d<DzJX3}UU̸ O ڗz^IM;og:,NG!KE"<;VnKʿ j$#A/2WfAbt`Vu@ݞ.G'QM""ZF+Hw܏77kSQiӇ>(2x!so}3+ (Ӈ雌}T}gZ6 )gU'rlkw0C=(LjJW0s'LdcP68GvI6-9NijZ\"S)P~Ę0̫NNNNNN7znv\ojn&ŋsx77}]ge#аYq@ci s^˼3d1!&[<Dh�Hn9w$t51,ΟjKdʂ I&[9rP2Љc�r*I5QQ9 U˃Q =C[UI7a cm8fp8D=F顐ROc_Ѷa`6CDs7f2M)[V#e-d)IǥO%e nEp#D#*%R"*zM"S>؅Tr?k; SfD$Ab u Zk q2ѭУL /p=(LYNq<d4G|dt'LB2B l, gq8m.p+k2IP,cH Oociȓh8;i7H/o{ <3?Ĕ#QzȨV uew&MYO f3E9ᕾ.�'D檉:!2�xv@|j^RG:, EOС*oBH@DŽB{\qkghJgM(;P'zYw `,soD^IWX8$)m ܹl|DT0< 3 G,)A\<*IY]�e%ϯ'fAHٰBԃ4_gtvբMًxJTEn[ґ MŔ1m$#AV„ki*TcBeM_axKmX]J۠U*_{wp~Q(ӧ1Aed&"AF߳N'y>T v\&1S oM_�` L_yr}TM8!)W PQ D涾$^ɷ6(~#Lj7V<!II050dg1>_p9abL|S9&Ǿ* >$rsb[/ L/ ,EjZF}qu]w@^RZ!A)1v}O 5 '>9~_l/η:OgK˒4؉$W98FnΐUE `5>||i22r&4LN}KImb袓jodt7bxFIi٘u7`!IYTHI*>]a&z;Xz<́:Cה(>fӅLhA0'HUuKƀƒ#!ltaBa D]fw"M%ce-v!J⋴uON.'4Wһ`"8__NJ˙!l4$+4WfO"yS!9 {R<KDsb[ƼLlWy޵⾤MK&`.]jȄGĵzS; �{_:DM+Tm{]dkf7, gWm !7Pd8Y&vvTe= !vր!_섧\g7gWeqHlev8CIIoMz?L!^ԓ]RB>fBF;^|% e(EP% sv!(KZfD:;ljMX5)mHB]ϦOmpHP5ճJyt|< ,p !M*^:0@?T1 f|)D@KŦ M_rvlxaTE0}׊1}sӫF ՎqHpi^"8PYfSj8v§1T5#[IktB$EU{!z;dA?="wl6?<,lۖv!kcrRyy,`4! ]66զ}n?o?ycgo۷~wquvHAA@HH80�`G/g!N Pqh[ǯ}<Ӧ&?e.5`n4e`!0N?|*;},i{cl@K]YQRT1͘weGdqI|"X"·:20iSAc xCnY\sT^4BҶ3I0A!"%Oց #2ƌHT@5 DV =2alkS1U4vVeGrzߞs=UٰrrCar r"p S3ې !P ۽VMRM9Ig�! d"@)N 1e56&퀄(56ekV!/")i�ȦOlK lf@ l K'^.3a@8;g/! LNTˆ/BC RjTcj@oK!$ `)4BExQT_5TS>\yoϧC blggl"'t@S2K:g~+YɉKFH9gg!YC)D($YԿa W0CbB<@ !{jdNP.Oaj" R1%*쩙*0 4I\$kk3 #ҸV"%BLTB.B0j!aQ$j"A$j&PMs}CQNcFHjQ> @T0}ٌh'|]yfTi9>xd $bݢ Ke8G~5<$قu"w8_ s|CHpHd$dtlP>'LRE%P<_w4TR˦8&�+ycH$"}r$yB-FIŤ%x8]C E4H09G) )`>Pt A' QF kЧ"=C:ēkR�\ * AȡB><pW]V^ЫjxC0$:]NѨjjbC}].ί.//wUկo>x_MXu.{b@R#2KiO_i aC;#�a� )@}^}uφ?'Y2%:QdJI' [ Z`r}9zfW8Vd"2`y50W)S/ڲe_+j7*&Ɗzӏ/Dt ,Ηh&Dc1aAPVNuv$Ak}ApqfI|ZATSsEu ^@N ç(Y>P^ I5l@:6DC(E6Rw3(d=)P@۱&g]go&.sz!#qB8GGd1G;6jb[ dD MnKc]'BufĔSccUn9ޑғ#J:T44: 9hPoڒN藺ej6tVGyՖt^E'7hs% <Ӌ@S<B*Z<\4g/-�A4I^%lRSo! |^K4B<B>\eD"M_SM!b$h;2֋S*H!M8TR7M9GPfpS0S6Q=^0+ؘ6}K]M#Ֆ JB TM!6)0!YV"c!n<cg#AKN }I2�AO[«'O4MURiM`%"3lY>MVi>0]�Rvw 6>so}G6!Ħ% q_H_PBhljD Hcc"=k`V󗿴Kن>"4uh>W>}dՂ3cT.&niBpC{9eaoT/ɋJKPw=�v<w^ՈxDH�� OvEk:tDx7Os{baOkxO!<+!8̕28T>N蹽9zgBIdyVDRNdhFa\�5;˓Fxղ00[S {2c];"�XD3a7HgMR3 RpE) ؐr%1tŕh @hbQ*Azڦ"[(_&vp129!&` #TW,뵌QE%*\&FcGlԚ�!yp$Bp{ J!z׋^5ᒔAH�1WBH6z! L4n>@dN$M:;!@3E1;X;;�q2y@)+"%Bl F+/g) L DoբRqKKP K$KC`v} :Tz{˛ggʼn\<hŒ*lz3[ee+k</|tvQk!s Wl)�a B4'Q|kZY�~n<R.MA0լDQK)I2xa"! * HQXP!K@>.˦CEHshDS0g@]w�9drvU To)~ؘ-@K$W9@;G <7\13}[`F{q)s"MYi cVWK(XgB$!6|V\u0H@T$hZ|̂\wqp>Fʎp� Z, q* MG(Ձ}hTm l\ b4Ús"b۶t^oadﻮn d0ByZw]D@aift}v]]n_]~x~!_~7~ϝ}ۣmgW݋]w ( �mZ"1ƞ8;Ur0X?B� 8@b۫H�}u>ZU5/&3jHgtu/.])1X<)h*,³2Ax Db*.J[ixܮLrS`G^2yU(Y菩 lV2{EHv gSE|dәT]bĦ7j`irۀRxR(&>7-BիU-P!% EL!DxW#BXPvIR2qRL%ip~.mWGu$>"e2QDC#mMR&6ȦO<;Y{1Z�[\?JAH6Z,g\@5A" vBBpb쀳:\^h8%ʦOnDU-1ή0}*I+ղ"!FM53X' ȖD! B+@ihgYg3Pcs$i>@['L̤�+w`EѧC4t(7}$i6t ]=;;�NryђdE0@wAi $&Y;;䮀Y@AJA.2 3bW8;k:v2.!,!ӄ !)*GI+S0%T3'F?;<_Q`H0GK@"2<YBόHFekBY -E(/è3Y\tDs,"A z$XT')G+KL߳d8e$H8@{<J r`7}jQ}(c 2KTx3)`S �@9OK,O87  '38ǒD$(\X4p6EljsT9P`?i<Ҩ^g�Z  jΑst+"S&WY_$iP `` O!3*fC9\'"ZV8"0< cmۺ CxVY#(@S`뻞B㶻<9YݼyrӏϾ}ٳ>8{քUsnvu="ԄдŶhz"\, @"ļ�"@�&֛ONV7X5CD�8ĉ١ʧ {NةNP[88C9C9C9C9C9C9C9C9C9C9C9C9TʗB0xyvx2_RS$�B$;q0\4-`hCۄu컮._ju^}|t+z뷾{mmY.`:4F@G_B(/ @C6t焗wnO<};^Xj#v]8˪T|bvLɹTij·f_'peIr`\iiyHEf͝@.NBŊF^`w>6Sy^izN(J~5ỊMP_ZUauFXif+m~B=r~=T' }ZJ)Xij7wbЎQ;qϑǹyJ2d&"~3ko&!<Q [ɳ˭{tQ&o?iZ rvZsW]LӁ!jVF 4B) Rej (M%k:b(] D`C Į_t6Yh;06Xӗ'!Z¦,!Ě>)Ԓ\"Kl4z(Ǽ/*3y2Y"B%$BpBh!H6 91p!m#D\P Da w,@. (OU!U)buvsP!CsftM(߬dd]0A*97@;;,Y] lE&[�a�AQ$9m*1QW1:NChNl<4 lk<ԘP"/ik#B 퀠j[Z ~gSOSq#)EC$(,(#C*LYXё\֙:d@!E$hQz܄xH`^&"td82bHGFU#zUOAqfP&v ;:Ox rviD<2l1E+ΧD�#Am~ 8 &x]Vxv;Hc*a"G(0`>jW$tzfġd2P=a1!bK8@ 8�Zj lMIαH'hM:]@\_4d+Is\"ndgm8(6�2A"%RX4ʡeط!y($f4MJL%m�?#�;D{1XѪ=].v;xloߧ;ן|7~ң<9SxY.^vAZXRBhBYh{샻WS W]D0Gp(R $h=I@ L7?{w2OO0{;#>} Z%W$~B[3R:ʧg5Ge_Ƚ*[&bqd[*_ 'cE:S)qBDWc"iRqų?:m er@5Gm}QEg7O{WdTѹB (b&8_}8AyA nhZyJվ!h;zA? qvl�RХ2fo铂h1eJI!vvUeEԏT*T2{]M' ]!B;F&-C5Qj *^⋦刌!buCPUv%/rsU.", Ez͔< V̽8]Qa*pZMdu 3f ryj<|umZ }<x ',EHK"TB_\=rB!Ds"[Cx~AߧYEԁPps4%�G~~58eC2!uH̗rg.ZG'4Bm .\pU.iX95Ӈ _<i}{VkKTZ}WW`BOӉJzm>>S"Bpⷊfq3qY`9:k`4I$Jr[V-Փ'OC9T ג0ܶm۶Ðsun"�O t�ʤ��p(~K!jn^߹w|ޭwOOoݺsԮ U>n#@"6٫*j8sé˯_? ��H<G�\mϷݳ[_xxf|*HIE_wg} Â2K߻$7$hw{ݵUOx}ه(6xqܽ|V�y7Rex^>�wP;16߆TZSEV(__ ^J_e _F%NB*+$A~�%bn[GZ"V⬷cNl� Y=~8@ !C1ǻ" ly& GlDH%#7$nKOV T ray^g b&ITT4el1= S&q"P6 ! l=sO"D_#7z^LL~r^ RPv9wk `FlCs'F3 *�-*,IDR�;>!9yMB܌q'U#!@\rivv!,qH{a  T EJ$FEP< Y{D"܆?,+5|S+#).t( vF@^9AJ1oLV |gy\jgfySCvgCI.Q4d)P8$У@! �<?#dnԤa'g-%=IGP@R ,]߉~EjB폐Ԩ7GHQ|_j%!G8!6+�y-IYӗhJ${272Ԧ ja&BXwɨ'cʆ\A|F�8ǥubrD`Q`f !6.{ⶮY�xSQiӇ>h_Y{"Om�!aa&#A>AR@iӓ̖HzL�uI9Gpbie<W^L�I*934B�i7 }903 zpQ#d$H !Bʡ"Z !ӣz= oJ6@ 0„DHj֡iAun%UEg]\|ǫI|Z/7~>o~kx/ܽыwG}5{F\ ]H.}F(�51Bw]Ļ6O^?} tS{1w5t]nw18�oCyI_1#&_̮�6x.I_'1mMj%jN#/'zɩJfҜb+e\Qe?EvZeoO?#+wRQ QтDȜ3Uz J2+fD(Vh-+] hCbÜwUPO1(ϫ0. 2sͱ'iԴM;:hxۡ�l? #?D D$4*d^95L!D.J)EU[>j!b3IzyT"^4EH 5qiТk(]؍SY .h*l={ !`3!r4w!PC)eA.9CBM,* $b >!B ӧPٕP0'VL_ʆ˗Y}%+b%k5UB gW!T+wQmaqXaqVD+{�=bg?gC +"_s`Y i]O; od[bzA2jE.DP.8B1vñ!51Wx2TEHk@:GeαԢnӹ jr  yKc%qPdtR|cvԥGӧy~QgToBD[ZZopoN>5HB;,4}EB4Y3}5mg(8 VtadLߴ~mu{d;8Je2}TTNE$]4X< cvѴ)R6DkR:<YO+A9�>b-d ^M [0 aC>�2n&@1R8 )j )nv(49 n7?|t{Gǫv]}{@R2,W'k@p bOr׿s} kM""=|)Qi5w?8?D )׽za]fH2C�(Dr(r(r(r(�5XY g,n<Ce�R&*@rnB|t 7YWF׎\~K:#76K)XzX2u]#\U{\ �'^Tj :Շ[txouxBpHʡʡʡʡ/cw(TaЗYV]v>`HAjy zm` �D@YC;~"Q5 vӮ7w=X~ŏ~gϺaB!+'S~JR�H ]w{p7Ih e{njb7< �1c1.oDe絕""*هv8W+* $j"ɛڶŸ}yO n*$NNV^͆.R!gM?VR)YR)rBgc'*N1}RbL[ȝ xsS}̠ڍ Bv.xS($9lH38ہ%"'Th1WE_ (5V'@MȮAif·9sfZ9W�f |#8-{v&CP#ķ!uuaJgm¢~K-^q<Kw;|n]]]  ~b5P~YKY/Ϛ_4{~~GwnF@,.7 _uM'b@9Γd`/`%ғHEVWM"]FoH #/T1woE$y/[b sDȾD2`1ȧD4i*,s/-#T|^2䩍�g ϩj{Sk|y+?,R;yRTkA|<7*#,z鑠`ׂTuݒNW$UP1XA saTP&KWK6Wba ]D0UqeB@D0 b@ >F E�b 11Mj7퇏n?>~@+ as]U-_n3|B+AwWۋ͓׎<j1ջ/7*">® B+i+')8EF.j@:9|-�+ߋ@WL J)sViO]HÓ.F4(H/*u"5@<\2zzK/zތM]:5J62#�Ɲc̟͌8( `ȥfl�Gl (f6l)L9UߗG v ! ,RkT5Le9;Rj!H!2sj?!҄ 9ΧMES܎(EƶN"dlQi-82�f`49Q5J-sw XadO#$Bvx�;3al\mdy(m<$B`x'Eb� O$Z3}0!l(MHA%kMAHiep ?`X Ad5)q$! B5E 'B� `O:WPPTnt#UxAwW|w sa[G%#YtfP]^|$25% :Gh0ϴG�fH J�UcrBNg"AMe8G^g+:BAX; G@m.cc@Q9:Е<DȂaGu}WD�槩oV#))#AX ϯu sQ`GH[`$sy2}2Um{0%U]EpMrY]�>B8%ײZJJ 15 q"Ax>�Q:"T~;0jX2.4Ul�d$s&BGیDNꅚReFәeN3=`K!$t(l6K {7M4ͰxC 0㿶]P?D`3VB� z{kq}k{v;?z~uŮ=Rl VmZ(r,t_$oڷsJ8ix.Kp�0Zo  teGGG''aFA_ R9@Q~iW;ꩉL,SUj` A=ꎘO=':f'Kiz kXpgJsRy2JδG^_&ऊ*W1J )7孼ﺮ{C)~:=a9˿?FBfg/*auwfMq]UUr0N3m#ډX:WzB#KWMҦ';L`vZg]_&P�#sy_Dh-,_<~5 !/Sz-PPl{nۿ �W{o~o"ep&E|pNEsY.R|3aetcnыe<6;j<y_u3Z 3JX1ދ8i\Y|{x_f"AB_F$X LlpL8/),M|Ceu8YL}#8נ!dyX$f5 }iRʞiC#򄳫˵!۩~W!qϹC,xwan`{u}컡` qK0P@D)RM@8L�&a ! jд;wΓ;y{㟼}ᖺͪ9ݬoo6a ]k۰Z& bH�0nb D80H�@H�]D"Z1GDMu}6]٬^n[}k<}Ay w*F�MN !_v}xŮM5:4m ׇ@%Y R$-((sAeWtς�x> _"M4< O~5Ü2J19AeXuAM{,=s{˹t6Oi$1/y!u*|/ O_$}JqR(N$vpѤQVހ<U7ի@.+7c`cFHq#*U$t@ o O5-:!Y1%-B8#}6@bCߎAΠB0uaTAAd:26Ѝ#Y jΦͽ {䤥|P$bC[GJ36oΘ:)8@a�SCj6b*!PZ:* 4ɹcs,PoBS4T#G�w9HY\ #hg_kl|r(r(e{{߃3x|Gl u٩0J!Ve<vvE$"LpH94I\}"A9HPG-e*J,h^sE$rYZGT_"I~Q8 ι[Q8 s%r&dI!:W�"raiPR{ؖT0")pؐ"@d'? j`;mWˠei6d l L~@W<737^h2RC @* &r`Q@1kBD 'zS9礒XGȈ(kU" ̤Is!ĺ9eo ,$2&#s,-d,AZȘ�n G7G2QRIS W1nP~6%6]}ch$_(FPWB��=�HQĸ&m>moVwݻw.~g;?xbuj۶ͪmWM @@Hͫ# LCup8ZHgN@%T CHDa]=\lNѫoɓӓ°5UuG"4B�>n[! 0l(q0XV9hbPxM0\h@bVPPPP盿OKAf!�"< r(r(/E 1BAgop//]6nO?iPPPPP>%& }*] ��DҨX8%cQijn?zɫ~?{?˳gWW )Fbľ+CH �l jmkD$$ �ӼRcGD] Yaz,dq5�y>(mv#<ML4!eUZ\b};.y LXԂ?>-Iy拜k"W7w몷;#9;&5pjcjLs6W/grD+LXers+~ug=]Q Hv,Ⱦ"`iɫJ)][kפ) W $}VL%* hU\WEKڹe?pJPhBF_̼DO4cWfb0eBjOl!6XlFh %^'KDvF}ضyo9 =1e Ng,љ<} tͿ'U84ʡʡ| ;maw"dN}{vG?^ >VFx2,R/9uu: 5j;G Jj7rܚ ̚1OQ%VٿEڿ_;5aٿ녟stH+@SdA|^Bin Tx- ,ClRJx`.<Y*-2HC͚ȕm%BDM06 m00z~VA$I0'7cbzփYGlQ@)(Fҁ#IϬPIJ!S5C9}zj!!A #b�oǸ> zꭷ}G?x|O/^l/v- l1RiG$ �H1FHŲ n#@؋OH�!" �a\`۬{Oܓ>{:ɈĔcwn]5&[#WA]Ԡ�SU͝l mQI]MO(d>>W�HLP~RώD`f?vA)7wBUWUmH_ )zIjg'�օlsYcfg$ Td �M d%VLyFL|! r!̽7IDۓh7 !E>He uPL8GF,s\]!�%*_")Ah y!,gy""I/y#l4!)DsI~D e'iai!I͝"z؞DҰie>F  6 ӧ-`]FEF6}{.G#&ǀS2N0QA LA9 Œ,ӘIQ 4BE ο_mGC `p=C9 1��v%`pCOӫ䯽}.FPuv2RN;;)瘒y!=mjQ9JI+"V"yNAT[\m α0*'�:)I)<?jb@${0(|h`+;= XN=#A lxKMA0?+P DdL""s�#Al"ȩ&.Oqx*EyX-aLaq$lB,Ϸ]!ϯf5ϗ"s+I #A1h$Zt"8d6Fp</ܘd7s̨@?Od()H& ƀ$j |ʡ|%Qu.}tiDJnNh�\^^\^]4 W;Wysx[w;?|Cn ؄\ͪijwA@�RdB$M�GC7�ϼ 6M}>F�$)u\'j-,4P/9+  vUv.qKPRRQ@œ)>b:*'j)W WIXpTXIqy�fD(`NSmozߢU<wiY ~7 >z:d}Mw\ DY>\SU؉Vvt"9GQô^ŸX)*�[8c!X1h@]4ִu]u-7}#Kc�Tl8줪Qk9b_6NA;V{b]eW ڥˣx5|k+aϪ])9PP~ j 5m n WpySÏpLSA"%Qwd't RI f\#ZHCA;9󭼈$/KV._s[g#M-dHВRړe J]qo/0T{43HI0_d2s<\?,2C}*r\d#GXqGR23Lt"Aj)gi%r%kס'V۶mu^|Ġ/mcm[�uvwvխ{W賟~{۟>8k7[(mׇ�ZAhLc#z! cE6y<)4͸#c.�r糟��x9&ùCa{]]q`>5E X#6YߑS = 0Gir8B>&*a ^ĢY1#ڲPJڍG>Z_JK;]$!OLD٣wtKC+y G@ H�װB ^H8G!5PVOM*Y,6t]kJ)l@:6DC(E6_k8N(2l2:<H|賮7h=E8]!G] #28jR% ӨBj(ziXŖl,v'P]񃯷n}?-\9opzVklC9C9qA߂v �;/ >?~zw^-Ýx�ug͓"%x>`yKQƋR dҨ/~qH N)sS"֜q2qg}M+jǒ؋a 0 g0BXȱ*Pp$8ڙ(Kx)-m&f"A lZ$5* JB TM}\a@t0XFe4 -Bv`X)#r\$(>v`sOII=l']P`@Ӗɓ'}=(RiSi&,b.4�m1Ʈa.#u}"u]I{у޻{ 6=]>ƾ]!ap)W0� PvYF''ǨX@�캮�B@�;iW_ͣ v-G:%2zL~'4a1 DssorO6Q7af]79!w<w^Ո0堃T`u}5 2p[SMƪؕkL"OMsICs=iȕԴ8T&N"*Vj{Yd[!Ez4kZP*;K'Qu/PC/=zL"kybN+Azse;-”":w!2FȌQ65}kI&. L3ެNխv ggE'l!sŌ”3ic6#CnJƼB^Y9X-֡ʡ/jA1l!F:3v;o<oNխd^eLFnm-HJub0 7!~KAA)N{ t-LBDhȎ5,.G*,rDB!Y3;  [2L #dYY)|F<R3#e/-=V?OZPgW7SK3C. !4M3l%=0a8 1\f<<i?+ǯqGO/Ξ]^]^R׮�61B! 6MH�Hr��aq8 Až'@ M}+oo>ڌp4[j,.쬿8]Dl6|4P>=Za&wc~R>;VCjb>/ آ1!cc)S`<WσcI~MP^bNڑYϩ� ?5!B궪[DdmnҢ.6!%*Tˤ}]ԿvE R?z ׵ _8%)0a^m˚<=;LPKPQK (,Ζ *&-SoQ!z(j.WR.26ayI+EQwAGdʌk .k2QuhMpv?HWWy$8"Jݒ8v p vNٛɋ ;yFi?W"-x*yp=C9CQ%8_`.g֫;aϖ"8!t$"t" 㔱4;MsiܟHZFEI C PE2)aڋ-+[Qg-!Dz6*2_,R +'9cGn*>1|To4WSp1W C),B?8V Rl8Jzj)X%Bl+]h&boa%!"h#!90�u" dP-˄!pGgk obkpSv`r4ˑV]ȶ|+i 9 E ڻnJdmq!2VvTD`>"@8C(âޣflVjj6/ 7v]!p氞ij{��kUq]\=;|q{ |w~̟ _7|˷? q.®v] -fݖz =a7U }04+lQ]zd󥯾߾?[QD@4XX%}am40@+>Oq1VGq2Tįu=8#`vVfIDb6%=i9Q"?#X}a349%376l'I �0DT{@,c|SXr�/O/u^:Z _:mObdf"idU T'ԛk+s ۇP[ /Wsy{R%:*mL. (\8Ե!<|n0N']p4v`BGd !8E*핁]" BrI!dFdc=b%jt !H;�z$1LMֽKM26}+L�\eR?q.6}µ1mNj!8s!B\TҬk?FVW/5"2~oA8lv(r(2YG>???y.21n/>HJ.G X HftLlQ;<kzS%E"@n-;9 d$X Lj"d2UM b!$VP �1I PE lN]AgHP8 `>2|?6&&Aٰ`m{02<?A3"A2W�!,[S:_H3<{^d`g sIE^~,M#!1=mwbʬNq({Dװ f 3�ԇ%ʧ }mz=hcqfZ geˀ!m[n &4m0p]жG'n?||grow"wChz'AĀ �Pmw=y~G�D�B@ɻEP~m*v;$pxا_yAg(A7}sDb3 >j2=k �f< qHG<26_%V W&E}<(NQʾ?U~i[A&^B\+ʓq Ęd2ٷ– H*F >I>;"$)VL<3,Br 7HxE )-;1`j"WsXH_h"~3kR\!DD8*{aT9� g l=*53`lkU(%\"$cY3I$GxS.!EcI,~SB9u(R\m9!ƚ!!D`C p ;8m!jM^>B\�K)Kx 5)}\NilȩZ,fgQp.> )8\B"!&2)X^:d ٟEdl|.dG<| NFPP>{O⏿QH9Y ,Kst$;$Y"4LAI,6bHK#f&?�9걥"Q$gQYAWwipr26 N@~ ! "A+px>V7C '{F ǂH0l$}eq&2MqHp6pՑЋ蘙 RKב`; #.PlT <&W2*D <_dBr"S\&U$ T$(IA(N4BHs$H#2\p+TҤbEQ 6u lHgps)<Cy)fɫ7z^׫* CrlҦЉ{"R 1m #1n_l.>ѭǯxxS?_fsv}g]]^."MF\A "] aXLD] Y-~)\v8n;1*6F^cx;򫯾A�qxW="b��0_רH�)Ku~}|jf 4!Fhg[\@gDĄ=P#'hct]mĤ׿)șp{cQ>@xW/*aO˟ƣ|NXsT&].RxI)7 go1D'N U@&yE#;:m er޼ιcܜ>{tV|[qESNE!hrq) 1e '+솁L+/VDR/-B�zA 6QrbB9@[`cJW'/Zdusf茾UŲ"ǪW�fgWӰ @EЎuv-<Ezd 7A Bտ; >qٚr(r(2_N`n לyyyvv#Ói72O$/"A щF>Vd$X;_/B- _O0Y [e[ŀL,IGgx-ʅnfЦ^ZT=3 :Ǚ%< !�#AGj T,AUdkI"AC\3BeMW M`#&@|J+�uNG7tKU]sJzf!P $o9’\A-2yXS&' P𞶄WO<޴z(/8n4Çg۶ 0y$Mzl"P:.mܜ4=}p tDz}CC0`0 sO"AhZ �{�ȲDQ�DmV-"vWWa8~ƛ^qw7H P?8hD :m[ot979Usq` p>_{pr$lB$$BBQ xqܽp빍18kÛ׿/"N?9}5Pʹqѵ< u+fm"=DxeU\1l^"4-W8󥥭,_$:;vZEH8ͳ:5vHuCkjrU1|@^"Z\3贎M.(f�q*" *�0,rZD jLI.DgZb-YM3fJ,n(] PQvliUvo-wq2ׅ)7$jyϏ ;NbT7+tH,,O_дp>7Kot(r(r(>s8.};?9o[V� )T�dtTXYu׎fKXߋx? ܱ=d$ȳ]OQ/$q\fb6Q > l!ZP"W"d!JZ T v5u 7i6<`<8*:P<r~f3oY~bF2 R5!C ڠ/B\I|՝c 6Sl̞x",PSRA\8 ë |�Dl6@� iazf-0F C\c~ѝ{_{?/~/NnЬVb~oNa 02Gͪ_"!]wŝkoۏ^zZ #Ǎ_@D�ag� vpy_^P##Q�� >M:;F)VlkqNnp/V*+<_�Wt\Y zx@ FGpeK>G b R s.iAj5mٿsڦZMVKYw̡97src_E,bEݭJ' F+;H-(ez@oK9ɲ[X+w4rb.&!dJd`C"8þVNKԽz2_SvZuvju6#^kCm>$UYso$z;"P!#Yɪ58jdy]_oA/E;p|FS,PPED8G'C^_޾t_]6Omgi2ne39n]ǼX^nci=Kuk"A*PSS ]$zjQ <7*+؉J7^kA ,#VU$uǑɩ*H!)9|xX!l$8{#yX׾�5~鷲%']GE-fm݉2-簾 *x~Ys[_q/T  Kٿٜ uQ#|խ͉,?iMmoQC7(h`!2jDV k,;5$4K(9Їr(�E�1vv"`lzx."�4lp "E@-`\!!`&^ _9z{o^{;?pwuafݴͺ]fh^S$C� x/{λx:^y|Ͻ-hR2[W lzY1iGaWWU컈CZx\z�Ԗ w+]v.DPE'C:ZRbxFIy"Nm9�J6t8ܜ$W'f$z!D2)TMh}(1hѥWXQsIg*—XkSهy@R.bZ6̞!I沅e-be-l- "EHC� !)B%z1D.U[PT,WpI`ZAg2 `l5TY˼LyLCEW6!! BZdny #M&6\B DĢ>,0(L LjT�{ӧZR5i`I١P9`EY!U4#46Q.w ܾM;0r(r(oiZ2E}oto+FPuvp3�EP"j<Aqf\bL‰?dJo1 @p| }&NO_6*sd/&\X%y~nDe\Iro2=x~|?fYT N|>sQ$> rgxoAh'9Οe�[F烉 ZA|ETDHG҆XgxURơ'l~�  H ޡE !b& r_V+S!9^#gcHp%acFpӲ B(DQeױ"baJH!r( Prx0m۶0<m7F)"@A^̻F"UBUF�@�vjf}ZN}[?g?3|<;f>:U۶nK@vVXBHvgf} >UBA�0xpb{yǾ]| BH^(PnX|:OVyn%T?Qf9B:bgfbtz@:rW�d/xXO"Csdf2ʛBd]|~rɳnS(s#'fb$cȩ)P1�×(k26 BEHhbT." " gkd`pO�DAݒ{8نYR#D Ȱ\܄YHS<jfQ]t4|b8S#$Dxg+3X%B@H:>Uh-y9 4BLDDRSY$4!!WD@�Yye56&퀄H ʔ)PT#iN@a;ȦONPȤ� seBJzofʗ n B�iL:SE#@!HNdWٺ_XEg6{|=C9CxJ~g쯾}o`P9̓E$%}i 0J&r38c(Q䲝H0;t3O1('LE:Gn<$%Oe%#A4}ґ 2=JVYdt$s*.$YQ<&N$| ,/GK`PP#F`Lq8` N<_QH<4 #AH/'ŪV= 2]y;ϏI"'W@+bp&]P"]@L$(lx B Bm���IDAT5 E#Aɕd U$HPNyaO2ԹNfPa#A~,m2BtsvX8 )vCG`09C+4j::::>>>>>>======99�"@1u18I/61B4#}yqq~qqqy~ruxK_{}~_7߾}I>E<v]\}xq>vr|K=fBD1W峎N_y@^ �(lt8ެ 9.H)9wW�Bl!?8^q(HIN KP)%= '7Ɵs<Qѭ56)Wywk񊩌|%T+'L2j >bzn̼.ZPQ11V(2`Ձ�0,OVU@!'J;qAUrhup  @5 gP$~v {"(jjP~K�yUl jQZ)�sR P VTa#ujRYP56pLPAHvLy yXhkwIx!#qB8GGd1G;6jb[ ;2$BaTyǷPPP~%8:"Vc)Ϛ'/ꑠx,{F-H h3A?5_\`ch?,r\$Dh>xL*41g V@^*O!Lx=rAq^-T twY0X H^05Vޕ<X@B B|o ZRײHpYԏ LF!uO $ 2~$X0 J縏X&崧IjR/{x� iKxɓiP CHz^׫ժ;՚D0FEFOGRa)HWNNW{>sYm 4}yjcjM n%ϟbwgN7?{7swk( /yioYhxB�Ow.W M^1m�Hv0&'}sٯqA{™wˎCH?ŀO|۫*lYGIrYIk139+/(O\ؼk'<)AWP!PTz\'2M-y>h6-OS[mg|)cQD?w�V.[\2G< իr)R�VJPHHOCVA1y<kQ[ۋh.;8VPCśX_ϝ4r"A<i|k`v~Omev55ޅ,ws2[to奦o9pX ʈKu|Bd~0$B Ž`+l}?+'jw@8r(r(?Âj?�M|Hpu +#ANMCP0@?ҿ;MPp҅eBC%xqESdՐm]*8-rUqE[`vx@& I^VK`cI:ZԂ)6'b_:<M#D . jl@g̶ʓѩ|͹B`:M#$*jiE6.7l ZXמiC92 }cb~x/�@q�q��j(]w 4 2juthszgu޸Og??ѻŋˋiEشM9ڬ<�<>cY1#yßJH]wy|ھ/|_ҽQ@w " C}?."""")fdP>2E^ ~W� ฆ|h![Ov-2ցGO%N6.+?Dr:eKOur"gu^3қ[U`ՉѿY|j8/z_ʚ*4u‡dgz\rMS?ЭEI`v UTn/Ny`s[nU zԿ~~r/^܏F_= xOZYsV8{"O_+k|= ,Uʡʡ~es >z]忻ûOjlye ]L/m8ST ! T tmec2]Z#P57g{-~<R~L{$ H9M~) 5$(CЗ4#Lq(u%e$hkn"e%#'?(k'#|JF'#ywy yJU8j5h:gzY%je;el5B̔ {"iy^qʼgWMIϳa Pe jնmK1Rž#;> g0N] C�aT1R)@72;7'wV4O^_FʏڟpuvHjն8x`)&"wv⮇n7>W+~]@?Z8P4mV-0b}n)n Zw0n?':㥀 d 鉵 @L1I0}NCDBqa%ݟ Z/|^@3gJ(ʏ_�~J$jno} Ge%</"$Ȃ=zڂDxD^OE�l8oz!([EQ"ܤ͝EQGBHoev@,D lMiL؄QHw0+=TBc!>\ !oK6!Dy`ZdcZ w lfl<@־g BZO;Ɵs�  zZ}L&_Yf Ng`AXr P(R N"dSJ{0τ]k \o;l|(r( waA?~?oo}HW�7نHF9~QMEsL  }Iw,9HD�>_>O+W ~B:6EH8|}"{|mR 9ݡ3Hn$jT0 8,[8&xPGb*WWe>B EHP# +<Qs>;Qq*+]!~p" +U)N8fFIqTZYi*`V*X'eZBr(H%m>@ >v]b:>!4/ Ĉ >MӬh>:ioܾkg>zOڿދ?jwmۮVzZB3=#P?zGۮB;ռG_7>lA,uM{s� xO/^]mM�[ˊ͟7 _y%@b;pf{|G掁t Pho ʻ5�3 h3nm"6T47kMA-\�ڣ*YY9V'L<Ȑ`=7pbI-(%c#EQbO9zVX2P/9Ē 7H 5@@E@R46<#B9r,ډ3O0Ys %B$qBT'@ g�.l=*c53`lkU(%\"$+A S 0}vvFH鮯x>Q)1B $ -'XW <lpd鈳v`B s�e2R2䃬DSHIqU� 9UK>ֻ~TIf$'g2pRA%$BpBh!"#G *yn߱wFPP>} #ݽ.@3"fP<)%\ CJCM pub dȑyi2#)v9"'M~ EUaT>yz~!(H,,26$YFRc0JqA 9O!dA$r%E`" r dH!}X VYx7]o) Φ8Hd$(":f*T$DۊH,_ tҰE <&W2*D $ & 9>H*#Hp*M2H!PAHPdd=`0])ͨ"H&$ґ 99W Bl+IGJ5#Dxi: 6u lHgps)Wp(UHoī Zz6hZ7ͪ mM^BaCz.ŵ҃! ]]mwgr}=|ys|_S3_|ޓ>=ᣫg8`=#"�! R;_)#y0tW7 wxcs0Nt{LD([ 0N"vG_<<w=*�{e?eV$r_ $&|+jL ,Onos4PN!ME}�_aX>$~(}xO k&:^.r8A5m]C,$M ؕW8SrѠ変9`a#ȋB29Pm^\A18Q}6h1d8qESNy7NbC~I1) D1e '+솁L+O]ZCrn lOQ`C  )&lm=Xk1eJI!vvUeEԏ4#kkfgWӰ (!Dh:eaf=zexx &�Dx? lwPPSRb>??: {LѴnI'{ OщF>V d$X;_/B- _OC'bc_\ Y)5h-t36Xe)A=-Ix.Tj+q8y،e!a&!m1%B*>hX"DYg& t@ե9LI=F3m($#,)XSN$e0H$ pq+[z^=yi8Cy(5n�! MhvZVm6MX\"bq%"@D$ �1h�bOp@hڰ9_6_]?z靰D ۮ;^]#!Rԇ؇Uu`aC@ �c}c n۝]^vwtڿ[;wq�GK40�w! \bC"{ӏ>l8j�; fR^8&ev4t(8Cn؀cHD�"QjICao!dk �["!!(<8|w^U>sK zcjqN0Mw*t)FirnC̴s{ uzeZBL{L[kjs{Il!YJc&XiBOTV\Uᗷu <arҺ\`]CHuI<{Nps4ww$isc�=-Bx0*y& -'B>=5mt ױ�  #ȓ<TnS«}rEߡc$*RU!ۛXdX*LL*<$Bʙ /(G`C g|(Tdp$BFT䇛tvpFk~ 'ݜY2?s!_e]^g^oܳPPSPn߇G7 N'%i2+D$8l^#<;VnKʿ"}<Hf"A'5"ZY~ G1H$Y5R7WPke!Ƨ-GS(Z3W P G2]͍_!g>z<)!&wEv@jg} MFi]+,6<u #L!>a!<'�İo*->.N|l#�68G(cKN�;5i�y?`1_!C9_‚1m6mYGxVjZWj E BMiU �5�!Fƌn.wY׿bs{zo<}֗[_1ً/._t.^5*F�vn~X1Ʈ� c~w;z랟|W_]ݿkhiq5 F$W^mGϻggݮCau㍫Z`eiA{D\}^`1L"g[sÍ_"QK13))ݨS򴖓ifBc8ݺ8�$^"w*D�Pጃ& ic_Ѷg-{nZÏtസ׶ZY.ݓ%gL7吧I�C)E<e*CaRc*´%]t HCGE͌ u ÜX׭L /Y%YWڄIȩ9ʳ`]Yz,8+p>Z,cM*Ύd <3?#QE_>N�&)BY[3E_9} jʡʡϲ�8x\G� dW�k22o Z17X/I ?HK' L,j$=s(mseJ)ķSOvMlŒy8~oU7t|[T;$ٺR+fY{2<gB!e#&ŤoH<&Tsy)y>14L{C(-y>R<_ZZ$^ɷJ& 9PN5ڈ- U\W6XFS5"i:+~eӭ NG/QsFdFx)28z,l</XK~C9_2ab ic~vfb!2;tZ@jBZW֭;O^{^=/~㳋nw(BVD@{:Є@]Qh�~zkoʯܿ}AKq:lph*w=_t}tŶ[��J!"IsZ'3{\ɀl 6MQbdZ@69{R/hAUrc 󦓼ٗKϦ!9Pg蚒x%dz("WՖs=~iT%Rr]1`A5[0é\5kB䢩dEծ D}⋴uO b:@v9@BUiVEu$Ybtne͌V6+J3qƴD-.^톕jWY"#`fb#$z#a䵢 .*2a=Mk؁g`ngۃ+32Qr/7wVbEXt|/[NwFPP>.gϝ?;WV:\ t7e; ?d<%^$2LoL P)ǧX\5zuщo2.IԩǍ"A{r<?%T@ -0!g s*r7@9xBn,x~c+E8xOM֋7vR "AV+s!{9){;GȖЭvQ {!*!ZDxA?=Ce+Øna1A_D@˛ȟ"EDo]ŶU{uz'wWm{{w/z~ruE +l>BMhm!D@ [l&D궻gݳvӽ_+_'zmµоn `%<{/.1K:g)SOվyIF|ذɜ=p�?|1 rN2-Ƅ+86b lJ bWqJ>͝, E#(BD�el26#Jm"ƜMP$8ċ ?'}{2+͍-!iL#�7 !!"$S41*lFM)HT[qr =2alkS1yêH.Bۣ:f'qfWaɛ;%26,B N7{^i*Bk-U>C͝dP �! d"@Rk$�;;AؘDH42Qv\# Z-(t o:1B$mO+7/bLݐ;}yvvŒJ�Aӧ8U0 "B$)՘sOz<PP_n7oj⋿$0Y/#F݄QN`R6E.D9<'bֈ(xrAy~ͫ}T\P d$4}ґ`eT/*d <tr6?$E%&NvgK`Q(U`PP|H08E$8d$@_TDNsN<_^5B$gxH0�H9˷V- fQ0'V| IDV H|ZIo rA. 6Re$e$H&2 )UKiF B519uӤ9*THd4!Dg G'窓H٥r-S e`09C9Z۶]Vz^V̻ݮ뺾1p6�`Ů M<+O˿v7̯ޟ~|1^n#İ MM컮>vYNf틋|_o<~# ] U) vAggv?^v}q/��(.8OGI uvtQ)%ONNM]HGÒ8ymgrÒ[3EB&a zΣ`5{cy5p> .Gf|sADBs#:c#Y_ʢik9�fG9@l(d""Z P)wFsiŠNRB}xT:`M! @ Fl0΄[U-&ʣx+e @%G*NPJVa; EЯ` 'i".+>@MAx"CLIA16DLuzL1 E*!x14ȳ)ckPb# !lAdž 'IMl",O5nrs&N5 %#D88!#9GUg!`nvS"Ԥv5lƆQ!T>D#|HfoaPPS]n?.Ϛ<I G$H0$ JIr9D5Z] R_q$g 9E:ǒݘ PSk"Aqk1DŽts28) j�X,$YGG5OplLQ2B&#AɄ"䠩Nth :vUyUɋS�¨" ,Tb$9#8ovكX"Y"  BSU( W3w!. !ڈ2*tҤ~$X d2FBi'K"`\$(AF{eR7al=S b*I$ li8 Peaƃmۮn'}c<� 4!&(R밋}mCBC04w;<;wG+@lBX7a6G ipBuۋ]b{vr <}>}G# H,?\�" =/v�+  PMu(5UlY E�ȝFkմs{GnRrznoI^ *c8Dȝ)"0s �e*CuBId1yVDRZfyyLA _zxcpP|N(Sc�"O"栟�Δre.A^/_f@hhÓAZ0{<94NT�RS4 6er7CB8Q ĊwQ#OOvCJ84Y/Ȅ@HЁDMy6Rkzͥ~zz!G2=a ^.<DǩU3vȜHpv yJA�>hoYC<1B ©7)+"%B 7S}{zNPPP> -GjCWK$eĀ  Hp.q"Lu^TRA֊UHPP{"Tw%k!񋐘Gx,OfS214\*.T!5.<X.`"=Og$7#|�[jRG^hO& cF* è淧̉,W<߮VA|9^l&"+A^CgB*fr 16A.P1Í"!N$Xk);0 rSI*3�@Gl7XmVnST*M["ʩظO"PP�qB4z! D. Mhlpcu}wnw>�wUnx/~oΣ7~w_?>xNoS˫>n_v}W?h}=̽__7yzr �Rɍ�"Ag^|y""" �@HD[)*S,3猞K׿NID-$[mՁt` R: UtXZtgUSC_|%e(kO)B;nrۀF>H!To8r ѠLΌե<HAEPANF"A:Y3gZ9{L`A=(-U)%qILlrۡ`HHY D(zFE l5I95e.@H&16 ۴I! \ DْV]ܢkf!KѻK`yh#*< m4B$^9X=˳_!8er uoPPSUas W9hwO68DΙ3_XqI_(<K sq1],uY:?aZdν%TȴJJ("GPOc VӔؾdV?RN??ǔ<۲xZknMҕtr" $01?l 66636؟ &؀1ƘL0HHBJW7sXa~gfϹWN=癳3鮷 .|l1!Ƚ0 z5]drq`g0xOIYI"$FC^e Q*|lN ]�=69La 䙠//`fhJfӛoyYvA9HR2GXw&-B$R .be4u>{n|_?qz}<)U=E-ȢUut4Zz}۟۟|uk(j.`<*S}եQ*}z{.ݗzਪWb(EYrI2.z\orY_ݤ 6�oy{Ɵv>1m}gaK]7x򙳧istߘT'b.o>dAdAT}kbU9S=dAr(}?qqV?n 2 2 BdRU%}4႙jZuUK5.G<˕SgwlZ|3p{7Υt"RtTqsgz]N/CZ5Ik*գD&]xpks*.F4"bQM‏9YfXRL"Ȁ$AW{O/ (BоB6_\X@KrP!*DP)4 abWɍ">Ϳ.(Teq'6WK‹F 男7eg`Oɰ{MC4"uϙ /ra߹$K'HC-S{^U,@ Dw O3M? $\5T 5r|/DjP$NuTxN#8*F@T9ş=Bz۾-ou=,>"0A\(.E!QJ~AI �*iyqOl[ !B`/H>!zDHmX .VA(ةϬ{(Ȕ=HcqSS_<89+O?F0c:̴~ %!!ҊJ愰Y}zC_LgTAdA2YgS=˸(˾71i$+:b.%GGMҋ#!M]$&)&eG{Fe`Fe'o8y;7<y &+0);K�nL8HW@SA?J@-"o il&=q_tq`a!W'gtq&^\ EN0[IiSG#p!8i[;Wtl4 }:{t?@ԅ +4ls*Ae"I_yS'tv87#LeaK< W� 2nRw%pLvTqJOLd loM)TLJi2 '$EQ+++,K!IHu5_,hz0-泺IײdRϏf;N- 7ҝw?EOzK~ғzʵu7~-yx)^s9ܘ*k[j:_iMR83ۄD$f.rEɤd"RA oldk1*,7Wj3/ ^`*o`kW=͟ )R�<38̲#}@o [8%R P4X cA!Qj,,hVԅӭ,;ؼ#AVӘ�re#c( n8"s\ۺC޿H.=0 wiBeC Blj?޾ ^y.I!`LAFOiq6 ZeDM،NlYik ) dj0o\sذZxEV}!Ij\2go9Rk=aGga4pZgz�r,s.b! W  ONjh9O×G2 *gh>lHU^\ռC2Ի0"#Onv1h`'2k^l;S:fq3A+*nSYNe^7ɤT llt!Tx`!h! X)&EcŠ@[eDrI3A&pt b8 u;:2^#&M9 B, z|9(WX;p`+ 7 3 vyk[}ȕi4s"DnRb OEʉ]CIdHI_Afqg7i%G}QN$4` dANV,dR\fuUu]յ qA$mD""&.,.\GuF7ܴrm_>pakkk}cg~맋Gjz$W_\ގbQ_8{Q=N֊reAURsHCCJT6QjRho6u+4ø2㭸}DLܸ ^Sm=bnx/a#*/lb`-FVIEəSδҹboHlL$ 4V 8*oFG$EX]d|ca VA-<B�AOC `X_ LM j0G'S'<gp*s7 OYn,$C *26Wn:SDyU�&úBwMk&] 3S~p"$ryy Lm&>sLWߢ3*-*Y٣C�Â�3/Vbg�_@B Fx sY)r_>2Iǎ^u:n>dAy әіrn;If0xL}mPG`4L.`&ܘQ78LJ$ ;:1A넵3K0~ ۗIaţ:ap|NF}hH(ުhktmtǨpFleWL`/WYxss_x3FYq@@&);F%6&`ǝ ,©OB05q42ADÍ@GS_eަ$R?$٩=z !v_H/sD#Y&rH!L0#n XB1I. !~dANHpg2x2&dLѸ(K*?.ZJꚥ⺒jQ/ZSt-㻞tϺ#? /|S^ҧ%OG';uDR%#TDn+5"*:</>y<^'䂉n蒯YurK30c\|Q!##NNu^2M yyރ95`]~a&.dmO@L"SJ*4|OlW=*HL˪ξ~aי_*6X]MDz[#&1FBm"1,�B 8gE3|# D*D[$ #B`噡΁pc)'# 8�B7c[mXg6vsF9<XŃJ+@Ddl4%1 "D"a ۋ*ct0Tֆ0q"EuWyPG`x&FU2fM}QTLz'!� "@|zcAZ$B!/C]݌#&s=OX-\W2 <(zϊpKCQ(,v3!28AXf*;k'Iy l\}-/hjv+p4*OH`x)�`Xs )_F%|#�LN̫A( *׾L;iVU;o\T!0pDza lB䌝O,H!>/|Ú k7&HCB:|(jU}`p]Q1У)8&Hy&{0AAJ<d恎G.1 3!fq Nܴ#!BR*ߐYX e"i 2 LFqY"઒jQWԵ Q fAZL`.ˢҹU>{ڭw-fT't ="T򲺲HF}Xy&hRy蠖z4 &aDB\y8EԆ`S¶T(ϙGDdAdAS_0 f 2ȣM&NӃOc~޷|5 2 2 s1(rogUUb>_TErAЬڥ`x4LVV&,dqALTD% &!bBoswVQ9i^KBTBDR,u[$yKAþfj$(ط^B*aSuL ŝؽFMMWe#fOSg*%|Smu*L:FriӢST&wkhr̍}'*K%FC 0K9];+]]IML5ɞ!DQ5ey&fX&T&leN_f`E%z*>k2Y'Bʐ ϸ8qâA@!HT_6^-4ٗ�z!5ut}ft_N!AH\܉4BL<Ҷ!o# `.w6ʇ}w b!~@xCF)ADzIXYZ&2; ar^t� ;qq7 A+`'-.  L}*ᑰ n�W!S Z!D"~C%n۷Ppm ?xdA0Sg`g) PG Lo,Jmhv޼ߒД9r&WdRdAL&`u;EQ1R4JOe@}hAؿȆk;`ox5:IAg02 ;"KL{#rgsBZ|4 #&f#ty ᦽ;8�o*U5@ &*rjqqpFQ}$Dd!t_niW".pv&9Pa LLPZl{Ʃa*#?ő j_ApQ2ao@q3PaȬs06#T87n +M! 25&biW(ƣdeuuu}uuu<eYEYrQ,몮l.Ғ몪u=Z,뢤rD嘊Qx(x9cQn`bD\ ĵ}~t[tU7\~V{J&b,B`-(Gtp浝>Cuv!RBl��h/a|#Ro G01g/`-۠O67 S|%-FZ+C5@b2&owc`C!`:P)wXGUYG Ѷπ6؈ Ă� P ! B T="aR<4ݬ,gy�U0e~!: 5? ‚ P)*ֆ klC<=*/0p^)?SPOe}ؠ&\T ԇ$ &6;*hMSj `~3.J#b[mcW9L%0Tc#( GIl$ǠUoE/tȭş]B 8O 2 |xIQIٻda\ޱ0- g#9|�%GfYLE }w8H"$_jg @>&YHqH֬|` ?Wɚ CVOZ[Z.(H6 sqd ~2ۂs(\kU>₂I1ARvd` kxSlAcڴOt ;:(FHF!dV_CX0/S6 E34BƦ BL0*%&0m^-?H9&) '#s$22 pN$6N؃ 2ȵ&*?f.Fx<LVVVVWVV'+drDEY/j,3v<*d:LkHDdY\ v<B=fSޜ=x|E9F<CO\1 m:U ?Z=-nD-x~]s;vק^,<K- 4 |zQIϳ5*�51ֱʦ nކIm'vhߞ p_vK!č $?&cRI  y2@o Qש!HUF<8S@FaA i{Fu6O}Ʒ 'x654ا˰9  aNt$?EXWwW\20l_g\Dnǁ3(£b(i_th<Tz2 n2g/-!B#B81%"ChiTz NWw*X!~a@a4}UWM"-IK (S@p?E6D隒eAdGtzO8 G  +J\ ő6iT`7*`FIN:^#&'Y (#Ra $ OHcDCHrQ[ &YwAסA !:avh;_c(cwMcy̺8.O# ,h A0{Nkb`pp_B" $Lk-=`QX31tbBZFvբ0%ɅA`1Q?<u:GAbA LШ +E: 8 Bu"If-Ҩ =ooAV(y4MV&k+k++kxZWфqIu .&d2* !ZTR/_& B$"R1LwC jQYpkA[k&baJg0 C?=D.6ۛX.4o$)4i3b\}֙b] ^G"af8i;Y}YI> fx*(fڌo ٘*EoT`5ES6\)NxX^D"pǘ0m34Bg'N~0$i$r{h ITB?z/ De"k4 k.HO +lqfr[7ǙΎ @UF�y_d[ic.Qb ̕vP,�v�;Fx-%Q"rAn2{ A�"DB$J y0ԇuoOe!0o$p֨�`zpީ2_M#XB/vX0Nf E5;V@ǁ\_Uy4S}4 2ȇz44 NfY4F2'8T3FFQX] qT` MWIns+L"ey3`'X[ ;t! C &rqLWЃ +> eN ƃb!1$m۝N9HRv~C `]؆ 6$x, `0с%I%b@aٜ�]wo+4BBc ıWKyT`P 4}M|I_A<spytJJD LP 6;85.5  aT*$7P04 lx )I`cgBH 2 '-9AiTxmmeccc}}moeeeh2YY]Y-g몚RqAeE g>RmnN`gd4.VbLDL ]<rUqϘos=f#FL8dAdAỷ<o?/tH`AdG'NG˟Vn?n 2 2 P%H> (h2de$eQ,(>d|E!9 *;RoB{>u_x )j1lzDKa)C%lG" [pTM}NwN(=ɥ RHD!_a:I%)}mL t'?ƫ Yű>|KPH7J<7 ut; �jg5ɛ3si忰di u{[?&ND_;+\m�NwRtB4GȻTy=鯲8Tg˻ƴwQ7bϐM L�lK [*8jpE f 2IP}\(.E!v A kVY@e =p?f/B�5Q;DK4j%sEH2oQSY)~V["FH˼ zn` 6h["BC"Kn9Ae187o?OVi< 2 Y??=y{**fq /jYXC#!8]achCmdP(%KD#oSy6؛l4*4 v[:?fK8<\#:( A7 N$+{BZ9VӖny il&%̢2)j.|x9hNa.EQa?j0uA}=Mp(ΡLv.vD K BŒ(*ACu|N3^8Chaߕ` &U$J $B5r굑Aх_SLj�^iW�_AM^2Ar0y.8PuQs5"1A U&*ˢx2LF/_컜(㊹,D"RTKwG\+DEEHzDSA*4${5$&Fsugysߘ&kőn+r`MqZN؜J7W^U֞y_Wyh�[6 "iC8#3ta>ҷ L 8Ѓ-@aEy3-4A7U`XkTZ8(́ ©^1O}M9ZMcȕy*27ʭ`dk L�xܵ4z]Ɔ:p&&~/y㨣6(`#9`#B1<LW@xl�yv lCe+35W1`#R g!*?封R!ks3�~Cv6v&0N^0)н/ռѥ*.BM}@Ά&B8F]O ^)KУA=&AdARhe^}_ Lh~Ȑf)#y)LP-chP*@K`.P~e0Ak>Q0AoEJ͋T8QB Tx`!hY([ aJr̄-2A"D9 $SWxct Ue.GGK``zQT ApzӨ Ͳ|D (NN!ީGlDZfaZ\šU@LK&fMz;N{NJ3)+, &u!2Ԏ W^a3+E 2 '%/v\)EY(Bod&) Qa`.)~!wޑeYNG(/2"ԬVR\R?Ձa�aƟ BTknIb|P.r{qkI{^oG[⽿G&Nw\^[T1`o<f<MAX-$ RJoL+o:.rG<B$؆īNXCxVX?v *hlM 36 # k+̀ AhbF<7xձ B�oB3=yǁ=|ﴎ퐁) AN}d qpCU�&ƃǭqslG?$ƫ0a5annS!ULZmC -}Xbn g;[@B�j  [=9*ﱆ D*�pk^쎇0hEa'}x-ş_Wh=Y 2 s'Yp$y3`i&my%G`4t> v-Bڍ ނ2A7Gd`@b_.;ߺ ő`RT49B"_k|LҾ`$#l:rb~F #L[ ! %FGFwA3!轿?|n7&` V.? &0!BS7EZ!j1:r"A3rƝ,h<HHS{:b`}P�1)';ˀk:FnR7ѺIaq$70AL{I_`bros"܌*- = pL7b37[]Lňh>/'.F\X2S| фy(ֈ[hQ.l땵沘mL&るe J-+5kD,ꕢ2zLd�eWXkb_ߥsdDD$,{..ߕ7^YTDpETɘtѽF+.G)%1) -<U^S1m^j{sM_دڞM5Jō%.pPx0\Lcu�fl琔BUIy*] WMכLb D6k0!!BLf:Y]AnQB^Bɉ@ I;P{p2M: )mk[!FI?' (U;< nib*Bp/~0[R019$۫@Q0!ڗGlª{B(066SΓXO7q&>֨36GIZ΁pv<OP/vqw�v2Q]!D!nfH�e33?o<ldAylhL+kSw=n s1IQs$Q-h`i|\P#,( pfd wADTc_QTLqmBl+FrW`yQ _�}%ʬFF;0 dI+1Ax2#q\ ltDz*; sqqW`Y}^]]L0Xn3L,B<`O)x-0 IMȤ-f 1A3A=18`΃D{' 0yc@oBELxqY7=G1B ?Zxu RwB24Bdk(| r^?/șKT<Bt4ޅ̓iEd4(EIhWfZ0ϩXMl}m"!@#$\7?\grYDcMQ:89bϙAdAdk#99~G>܍dA䚋 2 2 2 Io |*ݝښMLRV q&X݄xIji 3O8␊OR̈%!,BQ)!=t$S=B[roqUܩ v DrȢ>F->qL/qs}TIG:ʦ_LPoK!Hߙ*Pġ ?Bݛg'p!l=!DN噘ac StOXKE$`%(@|VW*d·eK`"e3ŝt\u!.*0g9]T&]S<*D!&GRisɪL8mƨ0jqZUv<tY{q0!6Z7děb� >p:%1WQ&�>T7MB ءaS [‚ <U&PY4㡂<)s;b @ $ >BSI=!>k^DΧa 2cSt7BvM5[BvRxYumk[Y(C`ˑlޒ@"jLgT_Bڂ kyQe:(ywǚHcbK v.5T7#)~ C exUᤋ?\ im>D8a&a|dh|x-?<7uɺX5@ &{,RL0*ǽͩNiUYw2P<T{ |h4:bd׃ 2𝦟*  R J BÎxqUCV_\Oi7qqZ2U%" a?rSܸ7}Jm? rDsٚ}=>- crUNB.bZ`^<'IqHš439mƙxvIr26*ˏjOnOD4JbKM#浝>Cuv!RBY鐗I �HXܩ Q>4oִVFB(N1Ўl!>jl46 [FGEB;xLg=PT%*G.� '�y!b.B=APPv}]]Oބ0 / $Q ވVڇ]<@~N)Qȉ56`gG^j*+œ<T}$2TDR"&\T bQ8~ N\,siP!ڌ_Pe!Ô=:xqάji_؉bh_^|}T]B�(I۬>x*?Ad[V7hv5kL0MdD ^ETR&^ `;(n /Hȧ$= dl+10Ga8i/DFrRWz- H�;M!Lm?]E Gȵ7sb(Y=Bs;ABC̯uc*)SCet0*;ߖVsB)yӆ ktK[B`\ƀB(<LJ `~�IFS9 qM)OF TYSd05{`Qf"6N؃ 2 WU ޞ};;TWbH)"DEAJUUD"6:JnB,EYPMijҶzgWh ip1j% $ΰfT6j{<,r' >`&0n@Ofxh֫.Ҝ?ajگ1tu!J`P{riiZqL7 qM�MDJo0#$nssTU>LcPQnvJeΖ<m 9=;PFeӽVOjBW+=ǔ.\Y'HTN?lMlN!iL}$I7<ж8vܴ-,vdQӯB{@,RP!B.+o-d ~l{D~/ݗr/n 2-+TT˟n?wo|QqeL҈!iYtDI;ZCT̤NLhT6F.B XF1Ge(q`BQnIy*t|rőpdveU<HqbN!.;?:AE+BZ J6;fUu;}W&Mco=ø :G3S_BVT6R3:<yIbi3iAeww.{`cTg ^k(!!*PsXhrD|nXWIt^ \pq"&˯(؄Ds~ &Nu~vK,jaɝƨ Ls!Lrf:msULeA;> #[BBR0:>Thgi %^·=E|t5ymFy 0iAH32qbl^EC >NhDKTq"ԧ=&s{h 뽿I^B.>q-s3A �Dj oZ٘րh>y`�%L}=,! * {`" !\1-n7 v /!F$"9P!f胐dwXlnBH4B`H.vQGNh+J=r#4 ܲ(P"0/Jъ—fԋ �2 CotFrnyNXq `vLA 9DNimn[ L D 8)QY&Q9)Ay#d)&e-V&66* -@A`2Y_A&Yq~k$ZʩQ@c!1;y 9tqh;š7�0ou5E=j5Mɠa$B }}:<e{u  eMC_{Y0Le͘fk{7)+&hT1p%Z_vYpq L1tqq97�یiflJ؀lJFdAegg{>wٔ FaZ[| Y *H &)X ɈdLdL2f\?/BTW Dr2BHfXй|֋]1YEݞ0m-s+dYœ<]NS(!x4km}DдD'4PLtx}=:۵#,QQ /O4B%]32~]繜 7襂2/'?Sc`/* Z\6{d@G{I>]mu>jՍV 9案f$8@pmhmF.f4M)qwJ B5+STUDc u`qzxRt8SEj{mҦDf$a7O$׻VWIhiuDHbu1W寇Mh4AdAyl.qQں]~D{:fW{Ln>ŋcӆ}tp׌ c>c,5 e/+携{LPT˷�GoX8ogl,F2C;g5 .u(_M=}|3{ c|q UL0<ܥ&\,*x5䶇z^OجcDI`@H o|>D2LT9R=B7)JlZ e] 2 WI677?pfu5z&2u%50I,%5 2� 3HJ8[C"F rf$7ƘϲY[us緛(n8wm.Wpyy36K۵N-_5iTT|օּ=IORAݗ21/2ZrVHkR{0z!L?FN,QD 1'٭ 9@<>FMUkҟW;8vp  A^вӳ'GLQy zTֿRإV{\~3s.Y7ePm䍰K`05a+u w<X ,yêݣMzMmXnቌ<rnbFt~< 2H_M H ibXv~nL;S+ւGѯ]$uÇq 6GXU"SwF( kIfeJb(2yTD_̍8ڇvqXo`͟4bTX8ǽ߱]Q?;xv>2õ0ŨȜ,Ll! =}] ;=m*yiTJ''9eVy%UY76*+>nVg֭cQ9/ϥ7 rrpp3X]]) /ޭ:)IMT.7o,2LXM .iy7p-\ pul %c%;2ڗ]W䢩}5-MtojĕeHx 1!^F9/s9E2D:*.l<- 5rS |wBS9harmZ1]%L?`jB0{H-P\SGJ6؀QG'1P>H=ѐBAf}\֠to*3?%|8ɩ x '=@A'<bSurxnB^e+moYPJÅx- 6�z"`WA uZ1\ QylpX栒aX4B(t=loY8!9+. OA%vZbl:a7,wh< 2nz36! ηy&襇afB X/4( 6K%&6^o&*-TOTO5^,BɺT8$kfխRUQ[\!ȳLB!i&&&>{\c`zQT(M|e3}>Z|1i&GyB,"Vv~1B Ovy@AߑI ~㩜q|kƆeҶ8ƾu,έwM}@ o:dAlll|qͷ>}Fro8_/.Uv]rXpUeLL&`V&?fls<`bŦm1lj)Q먊6y$",Rq-`KȄ?|ٓ`1`|Dx;/{_D3nk*kn"I*bQ\1j֙ yNMBlw GBXno~x|@C]jTP0UPA ekmԨ`31gX"ڏ\}Q~@ tC|aUG"Et=\'E`Q!RՁA)k$z{=CT8T*�BB0̒aVy,`CgD$ב*D޾Tr{=B¬F*o:M $oۚ{qcۢ08'|̑h`yë_/vT 0@bt ,$/Fg@NaN4 ݫ!D(!!@^X&&UodK1dAytqf0xLp)&�9L0bHmLDB;ubLPQ1A ШGP ő`RNz3iip|1J ЂLA V\`Ry&؈L[ ! RpV_I3A4#&p cW5@l b' 1?ɐF&0 SGS_+tO c%9B$-H)(wAډ(@* !N}fIMـDO}Bxؕ"r"&H ܤ8F (6"$< Dઐ# $dQ% :H97# dAbQmll<)O| )}mw}[âܪ/<px5fQ- "ᒊ1%Q! *f5Ok:e*4^YԲ d^Hjc\?L!ihN,SZMKTLpy/9Z"#3XG 3HJK&,eM0Lȵ=1 lE&TV4ɸ½[{7eVlg?İ2H+W%t5aԛ,τ]LfO !BI#B1Cd-# aP[T�P2@rb�Bgl?T5i!MS T B^E}z+8(3g !GN!  LJa HP! vw-)AHVM L ã$BB@HVh_Eu c8�LzԚIDZm{!:/v5*P@GIڦ>7. $F'8;�;F.J"!M?x\ 2 Q9rDb )⨢qR`#L,jDs ^md0Ɏg. 4* "̧WhT ēW@Ƃ2LqI_ e}(( Џ 0ѪBo`c2A G!$F9&?[;R (&hGB猝O9˸80wJ)wqqhw Tw1A  EH B)C)IsN$ٞfBXuo /s$+GHhohOi*'\S7�*̺IݼaM8`qi4N㑭ɀ$)U!! 2 WCZx<Ϝy^y̥ /lmLGGGłyx$dTѨ,&\pQ03TK-0LL#Le!fb?,E凢u_HU,_&\,|@UFL<J|9�/C2GaUy zߙ;χ%2M Ue {N:& X}$-l4S}- ̃DR/61ix[FF#>G iW܇EUJk吩;92Q _*,V]5#=2 *#rjH1 BEB(J"Ġ> LW923ǘ�>u%@n�Q .cL;6ax+'W~kƫ=0 2cC+>�|v#Y̚:Sf]EdD>"hM]PZ='z'5MtQ9d4jc)ZO~`L33 PQRd*P<RE���IDAT8v#P ңLYTS9 }S'v?J샭:?LVf6%!ߡ!ݫ QB!DurztB9^0 / !i}AdյTUUu-2f6Ο}nmv颪Guu4y]2 EᢁsQL(k)j.}V -#EIL חSVzdS:mZOo}Fxt.f@#+-d5dM:9cA'OQeT#Fjd>}kfHZNSpoNZq<,q˗[N4ݴ0Y]綖s8ϙ=^*TO̐3}QdtgQgΣ"6s޲caK4,l.cg520^&)%KŕhxN&,BR�ec*5 2ȇLVh~'|URCWwWCdj [2YZu-o eHsl\fg-=PBDm—�ͺ3>%rd q~$O%UH#89R9(0޳ _I!IM9eyR!c>M͎T_zDy &: yI! @$}EeUϪe afV.pdAy|>E] +񩍲,htͭ77vw|ࡋ󃃣鼞WLh%(Wu%u]uTh4*eȈkJDjb*(Ka_mI]dLoĔ ud9Z+[\ߌl+ '~;ŝڛ"0z^De$1Lg%r{(^m_>R׉HM&/I,y.cкʪqazM$Te1 ,?ǣ)؅6q\­], r'Bl{Y-*4G:!�C<w7Ǥ~6"$\w%)*A͈#j`?f/UaS=_oJ3쒅4P9y$xl$BzkoP9TY%Aa0gE((pߪs8ס+7$Tq埆/?2 2V A�+bܸ̯0Nz=,4$ʐAuD֍Yr@oãm >W`űsqDCkA Qf [ƺ!EYAzqy&o@`CWQ&%@D2xVoPp~@nZ'X \<�1 N ~#ŗ.ⰑAoUX)WLFHDXE_@H 6PGW{(,2�S3|(WexJ).Hy@['wdA<E&:)ʲ(b4.Ϝn\d>\^lo/^ؿxqwk`w`1ͫgE5 *SQ1KT\HLD%Q,Rו{ ''mKSv9H9Ją u4 NH(Ie-Z ^L�aB0$|<gd;ŵ_Y!{Q;5Fg+0UtnC䣀tv*z'A1 !\ oyuɩ`tR!ndB(]xRbJoD+xkB XPȪ�#@(L4= izI0&9e #h`EUa0oqE+}(A-B<4V0xu9x^V:RSY(S!!,Pᦲ!;뀨)n@=ߗ@ B|e$B߽!ĘDBGA�U` 2RN!O1BYX"a`aFBXC04K#$!>D<ACt!$</tֆ�dA( !nV0A`E BbK=8Rs~ GёAu$J2)\ñ *�=b|L QAƂ7ZPx9?X0IcB*cc �!+Q $ aI!* b;\�$̎Fy?�]I@*qqxudže s7Ht!#20 &݋ +DB( R=B 4\;&u7} Fiaa $Bv" Q`ҨDbhVQyX{<L{N=RP >. f-Ҩ =ooAą˲FѨ,ˢdEU{GG;G;n-{ᩍ껞tϸϹy?>g<qO~uݶ~ Jlq0[ꨒY-ZZH`jb rłPd),*1p48dYڍd13HG+W٤=ΈqKޟ ]^G"䭄ea9,)tQ@4$J-I7۷U [@* 6y퓷)@^ ko:F4#'ƆU[$1QP0*1؋ԣ,^'#Htd5h ITB`遾) 6! [\<!Q f!(n #9+Pe5ojD�lB`C30ITC� b ld (v1ZJ!nĽw2BK /~4B$!1@B(L΂>8*w*ip֨@s@! ڃ$3olHX)T79BBs!-+E@q?SkðÙs__ܫ ttyéEj%"ͽz=#9uTq]K3v{/UmqOLFW"taozpZ_;z{^.zϔן*Mz렾\yeY| g yۇoVn] pTqFqw'׮gKռ?ar: [^=_ O7.o:S\K>dB3l#ґM(}DjqQSdR \ L w RDL0OrSFA#XP-LZPL mlUZ0dL0�ф#H );43*�+1A RP Y;\O�[y lI&Y'" 䪇1  to&hjLLpm&�rtv*c!W�Ĕ'&%%r"iOi`WuzC(Z @=o_a0ӯ`S`Spස 2 '&eY0i>/j!RqUU,UQ1j*WWV'uke}o:ڼw⥃N4VټZLŢ,'%JA*TT4C֞$mArBH֦^5HAإdg%ΒkQGi9P2͝~mY\\),}vwV!X@Sݨ:J3Y?.WÈqĹUX*9-*`CSNn\Q:0m3+BZP=ԆtG_uL@H,=2$1tr~ *ۇiVS_fHT*]!a jOjfIFH(_we'6Rqtŏ~O`Hwc _4V=gkwjsԾŎz<![Ft:m^\[;~Ž:y΋|K?+Om?.K{3{{f׿g<Sųg~G?i<.?Eݏ]_ACC6 >];ҍ<ʯ|ުQ_+<se/sE/zʵH'?sC\{X(>+6>Y+_T?;?8o3|u<sOɋ\!>׾}3o8oF>fe\g|x!{.og>8~cr{jGf/c<g}z~UxB᧍ &S%,-~"tK.Q7zMWeNZ I0g=ez=`ez%ߏa;5;z 5$cE�B*@Edu5Ba+E1S4|bv~J`G-*LLV~bwߴk !~(D ؁6G3ϸ!P'x(z*?ygRCD*8qk,MZ>||A2(x2FZH]ՋEZ ɢZvFhm<Z;}z|ty볣vg;v|L4)h<* WTp]ňJ .YZ%<%i?R\ʌ?r_D$6zpAK};($E}l {v-5a`r̋l _/eP-7"ݥ쏐F刺]uhṽmd}MvS*02Pk VѷSRIj){?fSԪl;g-߃𰣐pv jޱW*cK|w7eH<ΏNӞ?9SnJhw2t;yC: X/Qm&CL}tF KGֱ(:S<�okajipfrl …D& WOv5;gѻgɓog?+1l?_wqwLoݧ:>qn?} זy%?LJ_wТnm֯og�?0_{<s׾}ڷOg~W7~x3o[6ͽo?ӶϿO9g]/73o?<?< 3wr93~p_ݿL }zݴ{?;#Bg}/<ʈO}ͫN_jܠ[%slvSPd-i?2-fxLV,V0'X{w1<c)/ 1"SַQ *?Q9h.C1H J�?7U9GPḚ; }[ɬ 5} TM?7j\ef FAIm[rC?rY-6 SG<M~"&g)o_%2R>PY m"ҍs1^T 2 \3a`撄јE&u]-y]B"TEUp5xm6)uqasv{`֥p:LT-xQXʒ[L$p=EO2eHZsBYfpbj:۸ & K^$dxuf-IQ8vd^Jc{oU-r:.O)X:Jq] DHc0Bflyf6Do*~V*JWcC ?rhK_Ȟ>V޾ Ǎ;S(.O6 m3b8SMxc<B�'\Jo;6 N}8o%/1-4N;p5~" C9W!�|:Z>?Wןuc~/o~b?o w޿+R'|i/܏WgN>ld^Y~u^~_ck쇷|я藿>yr[}BKyh?=vbUmӗ}^{(loBw_s/{G02PLʚOt5 Q-"&(~}'Zck.O)GTUJz;`sq[P&šTاv>bC!M D;:=qxA`OOԸ#6M}P3a S]pY <Q"gɈܤ}І.*7+d ȃctg쇂ҋ]NرF9RDYhAꉛz v=,ǵUr<뺮b!UQeQq1>=:Uoi2=Z??3taz楃pvDe2e\PQ  5I4G/GKK{\�gx#CzL-pit?]w"l4Mj]b3wx@.,?bkt+~&q-Qԅ|zs1%L.Y6x 6ET)4^)JʂUCB\y(]T]Lzԅ]-fno~@<-HS {k9 WA*GȲ5  B|^)&䏀 Axj+q1PEu�I^|G97*ClopBv8z\l `H&= =[fayb*C�*z�! =yy,`C`BqXS3֌΂C#Du* hx &fսjKILn*  B~]_ؑRp6váɾD-vd8}+H  q"J H3'j;kDDoSq^Wv?ϿyO_.#򽿳6{NO0Wץ_/+_#:).~xOo~~gw)W 1O;o>y_/og xW|t"vυ qo[q^yr_<P{c^0fb`s`L/iHf`ӶeY6oAѯNoA{sTL0A, 4*+m皑ģzkvIϺh&c_k|LҾ@ F22A@0Pb+.0)R<Dlv~_&-| rVN=E]ЌCHz?);?T5&` Pz L~0;9bRS8!hASBSN0ϪFH"=* DLJaX'F0nU"ABܣwLr @>Drp])ɸI$L0&ő4BS 7 D-!D n FGt"܌XG`2 \Uq_&*,x2ǫh4YYY]]Y]LQQ0Q]ճ`6ߟ!-fc^=}s}Gԝ/~]3O|ۊoΝ>ژOhXlMd'#Y̹^RD#yԵHM"\ 5s]\T1U# pB}GPWjJ"EWjLa"�N]ܒh?G@|dtOcy ^XPw40Leِkk{b`6_iq{w[ܾ.AU[U*ʜr6" ^�7?Y ̀BH!GbQ#;$ *p  $ T= $!�!8~Oހ>o qWAh 4}4^ rO)�P ~ĉMpN@EM@�_>` "!a["!lbV 1=!ڗGlª{BBIꩃ0<F�6.a&V&(Ir *3O#ԋ]# Bb@%WY6_uʰ}/|\}qool?W|y];mn?qrJP ɥKu#p_O1~XLng~MG5Ž~ϥ7ݻf ['|𚯺ڕ`&_^:^{Z|ַ_7L_|/tg<#\F#5CQ<ָ8h\Th/%H(Z(9/bgɠ0ٛ eZRS+p4W :ή"~(_ALEeKK�ejS7L[c2A G!$F9&p,&k݁H!P0>9c2.*Ҩ8@? "$4 D! ! ;Q{sd0D )$S <HWK D{JCP9@oBELlD7iG9i40IXHpS׫B24BdAp NADeY刈dYz 뺦BAU͹,VFMg&9O=3۾tЃܿu͋{;EMjVxe4.ƣMDdgj5SQP!R`aIբ(F娠»NEeYֵ,TsETHM wtWѳW,{$Hb9#d؈2 J`��K43dƙ*ig_DOMv=ܽj]:_c媲1(Rn[mUDuCR9GM{Wi^ i!dB!1Bj鵭!6n;eyc4M *xxaLf՜nFJ4fٛHdtH?4A;y)K*m!x%lGJg/aT{&Z;<%"&CHʢPmn*S"T|#ъ? !brA6p3xS_Fò B>`Џ0)D{S-<p sj`!B+ _! ȫ��?9Rv|QgzڷOw/|lݷyE?׽[|Tc7�5o<Eww?_.o|7IH5;I?W]WϿ-P"bz?2B9ÉE!V/x-4A ~!]Ȏ jυ'(Zw^K0;ḩP"H`2&P` BbZ`$Ц. '[KmlQ~ 0{"\Sv>l 8w~vGSUȁ -U2ē"p*TΠLP+B|(Wo'R#4D R)! Z\'`{%r2?&"?Co!d`pQ2𵌺afƮYDvfq3 HSAdk%SEQr\x2.emuuczj2YVKEՎ̷eztǯ?{<>iҧc~s|So3gOq9f[?}`w|v0*ecce< fk )K.Dž̵,ez&jLSA,%S)1+T$PWŜ],>IjOnx`1NVԚnFX%0BM,Z34) ;{!-M2>ؠ-ycs ֲh[s{!)U$3UQT&SزYG|$Da*hl@R,PJ!D`ab'L$`0@AaX~3*1-kX<kE�=4Eɸ#dCk{=$oC`Q�yb( (ͫGAxiTxOQa�d3Ѓ3Ea AE<-hSNJ?!R`xf5t^aSG̥Bi^rcE!K` C)'y bgV4B M;v $zCڟm-��W/7Oggp{N&޼od ;_QL`*?їC;ٹv퓍.+cCw-{K?JXviY+@2[#"!y&H˲1LWvnfAXLHOSܓ~6LyA T0V [{^ bƎ" uC.ء5 %PHNZt2}4>4*s=~!Lm?@7y`7 bEmNYˬ7f`#ՓcvyZ'X?&b([ħW9+BCO!d@H!|q4)!hwyekA%gJr &I AnTF+T!}q<< &UGkɚG?�y m8[AT{A eYh<^'+hc}6Z]LɘFEŴLElma;O[>x1/z_='}mo\w]:ڙ/ftk1"9 :j~gT3,h\,ʢ( .bTಠew)B,T&D+,,k,,ҕrf"PNdYx\iy#IZEBmTFGAdAdGx:-ʾO\T5}oGמ~3?r9wpS/owo=8w~ 8{(Ϭ?:U9O;oya;_/{Bǔ:S>Ou|?i/|\wO߮2_>r+y~O:b+Z'OuǨ`~۽7w[o=9lcPu3e13g>Z{\BvW؝%uJ}|ݦAdAI, 2 =YFoGTT\7i2\KUUDLuE *WSnX<hko G;{K/]=8:fp6e.ǵUM0F#1sY3Djyeo "Y,mt]f%4aqYk{"~HHL>թp޾�n>>w &RmMKQydb|b4o]Q.·,cgoBMuSgCwwWZӔ.u~hgd8+wHbCn>Xhj]9| jse8 t]`85cܕIa`P(;k'vo�G o7QFeӽVV EeJN3@0 VI+AHg;2Bf6hްB d<74C6PP!)\Fw)MKXӫcJrAD^i{(+_q?̹0կyyWوսlX>j?On8~`'_W,.#�|SNqzaM?xꖳQ_xw<ZQ􁋋73["+_q/Z3k;omŖ/�~|Keg߸x*O+m]ovox[z!޶FνY??Yg(_SцHga{IN(g-=21X5Md3)4<!";?_RXP= TZoS[>2ʱgT*t|%n4MY%.#,rA9)v~";?V$!Y! < 0AϪ܌>+vZ~2 [{M} [QZ<H ϰ(ۉ* >6`[-Q펦Adk#6f"LEIED%-JQU}E]Uu]拙4*h<YY/N0SS߽~wgyp ۗ.nmmoTSI\땢^ZJ*Z\pYBMWqDEreIg0bHX I %v> &\Q56k9I$ŝL<;] wj@J8U @U0xYr4.ɾ&̂Q̸bF #ֹϦ ɗeQD AE{Q+vI_&|F4#WF ݫbkbнN}"KhDvs1o'XN T#?BTP@ƿLc\U_RT6􍴕IֵSo)'0@*Q�7nOKgOnNp@9 f@ AdQ1B 7[O|ZZr;B\cH!@B y!]T0YZg;)L#b+f�aUƢ3  ! X?aP9DnnEHbAV1A�NlSNŃP_XدKO}ک<ƥyۦo;gxs:Zs_տkwX^QlJvcu_eg֊쳳}[k`== _1[ěFOi˾AW/o2(}j?I^mvoR[ف?;Z ?Se*Qdc}/͖;'?ϼs|zqvEhHH~ɿ鷍_xĈyCC_|3oO=f7>� @CϜ,/ `vL0),jq4'W&,(B+=L"ey3F⟷LZPL mlUZ0dL-(Dp�BoFE rLP8;fa!WL8mg]pqh;?lM26Ly$d`f6K!dK,U'b@7+1 ((1q꠨a*Sn44\ۻI)\1A3ݧݤǘD+1: R@O@b섛k8PW :g�6 l@6% l Wiw4 2 \i-%DVHjjY,EUWH]|V1#qQheBgύn~ܩ;׷nm^?=~{wztX.j>ӚGBB. f.""5Q!K,741l&a"bU ~d j#9Cʟ/B|3˵xG+$:9&?f$;L !zL9r4:0$*GߦB*ѵ2%l'JezLMU UΤuřNN#3Bsv�kC3rf>kf�5N>Pf)t16'y;DҴCcl2s%rHω*5|R кFJCׂ6+C q셐ԒҥO!!O 3Dx|]/~<OgOhyLC_޹s'�[\w)g׋?{7"]X+b ogq]C6ߥJW8z]{xYO} m/~޹0˞򝟯^pce|>wm.;;-L=)-'0?Q_?._O=ueN5w2'?cla{MF_S׾=Yg^M5H=CdͺQ+Te%Q7Vu`T(#}o$g#ta)C,0ܥM&Pb\)hA)`WBV G͏rOGk?\&.uj:zqoxx]a !ݴH!k0uy~BkLώ:a7i4yz[F-]n 5Rb/{;kߧp!< <EDćrb%TJ=*u%H-KYѨɘӧoqr4=={7-vg[.mLGGb>/jYި.iNuYԣc͂/""T-RUHxe`a&aiVfBtk ^& eZ]i؟|~_2)h/8hAbkސ ,`?AbQ#1&2&GLᘴ\L$\9}KK8fHy,C 26©V{H{4UuivS_K?;?Axr6�fq! GY�It HAeAjlIq. w-|T8:ۂO!$0:&$(!w T<z 1Me q[XHRdAxG>._2G l0LzS)`tK5ot)%Lvԩ11g]#vì)'䖉a5׿07L2Y/Y7}Ϛ1|ݻ_/]l8-p.>q}:~qIK�xu Y+r³^~ 0ymm�k{]tudvkQŽr_܍X^/7UM?�_]m꘿}Կy0w›?VGOH3 R¢7dPw,^ C"&H`8 _j&zoãီq8"ĩ}Q#(imHQ]Ek PUP L7' "BL j`‰2ÐZ)bRmv[x#ٻ8:/uQNX I 6W�,6|` v>R9W@ P #@ˣ#q8V P{1蕗Mx!IS*+7cH38l$`6T$*S/5S:M!$v% >&/@ 2#Y,f',˲,HE]ںjꪮE1OzQӚԼX>bgA}xHGG|XTuMu]dEX`r}bZXEh07q_5ffHc9ۂp5܆XܖIy~z"~LAdA1))oVт]=wLY/>w'Q}#:iyo=﫞ک=5笞]o{nC'<zClZ/?ٵ^ ͫN̝jv?3KD;HD~Zz}}^gLpMt˽ 2 2 2/">"!H,hv2uM,󪮉( * ᒨJLSn9?sO{;楣͝ݝK e`1NJd1[Șb悘 ErD\5n ܏RR-U27[0& S5V-74C"­`ng$F^,$x|4<̋ t5.6 ۿBxe�VB5sCfH.IE0d:]]Up`C!|sl qb]V&fH''U jךGȲ5!U'w>5dVl"$tax;ʁQ_Ymt@EԀpsV[Tno9Hp#SP:֫� >t6{qsl8<[7{`1AS#Du*vl!ӥDuo0Ru?&Y/vӂp*ST~P*:,ۄ`H:<.hb:l D\B!,fl㆞ sF{mbԚ򴯖Bl0U[?;8)MFWڷO?[/\ԉ1\!e#Oy#(srX!7L6ysh}?%~ n/:~?n9/[OuO}VZ痣£A1=ܲL0^4l(p\ †0~XNF )NoAEL },&樘 aXh3s9`6-f'AwK}1J (`õ-0.bTЪ`2Ao+X&Ha#v?G{80)v@q;?]nb bi'XF$2AژTI 'q{^qZ{J  U7{aDv"‰~ƍyF>v3Vj$Hk&\z ܤ8FX!QlD[/&R\m)/?$HVV!;kAaq[EY=LT,'>&!Lxmm|jcrjce}m:IYEӒrJםBwU>k7E'>S_ħ} p+U}R-GBGSiZЬ9ӜhAEUqETW5q%\\K Ⴈ$)EJKPQ?\ɘ`ة v)J`-ȈTBe$;stpGŝ=h? <,k Ig^ScSJK[{DX9.Īξ~a[Su3Tɰ5@q?puv;ӟ +DDe$i"nO{gG*{3QJP!ޢjşų @yC#N|!\]>h[U%g !>,GGNg<yq* Xa 8/v A%1 ߊSsjazvc;9 $f+BtEu! BY~1T<57�?#Bt�;^rSkTXM}S%i[: ..# Bb@%}b=d^#B>t%<qě6}w6;gvV%6y[{K ]q/~wߑ~SW6V:S'T-}PJ~t16?eK/#n=^Hӟ+ODo@6�;Ʒ]W|֞sI39�X#W-v3y28A01qmvtΠ4;2AJF))8ڙMLJ'B`|~ /0FrW`yQ _�}#&H`Y?狸Zkp~L&h R2AB;?;ǥ h;U�;3v>`,IH0b&4$,5($|5E!$ղN0{2qLLPO} Nn& XK3 ўTN8P>b 8'nzb~b7CN{JN$P(I#dAaȻ3Yt&*jJLTvp$%H=Fj܂n去n=;9:ݛNW5WTEYrQ2R*"Y(X^,TS]]Ls\ TUR"\;N!әez[ +@…S7▣rF��8؂i<qvݢ_.6srku3R:GuDJP0Xujj2d̛tux"3Hf0%D8?5=`NHji|b?>,6vGHX!ӤDJˠWϠ暝72yV2A^:@=̄dA~y"y%>9?]'irm �Q6t--] D�mށBH35 reNOx$~[<Y!Wrυ],q?~b+5~'z/IU>Yј;F|>{V>/cȞzɇ6_tww<|ᇮLi#8j{n#nY&ג ܥl?#9wON*Ɛ^Fr[倖 _;,K:zhLژ`+81ʞPI%pdl4L0A:R9ArF;A~,_iQ4: "CU '2AO7{R&؅,] mY얿S8.=V|8Ad/K .-xY(("")DКЩ-Ƌd:;}x8><:ٙ^<88Giz .qJdfZEZFx%b&) Bf)J`j\28T(L%O-IȆ]RH;3HH0w [-r.ͧ5yyx qju[7wt cx>2-YL(BRےv3%\R ކ(  bnEotb,IHXHD|'X`7] :Jk6]^1Cu4 h371V\fPbAN�BF6iָM<z'(kHw=*0jb xM<2DjIf!0DsֹO}1nFk1ֻ<gev! �fyk}ؠn* 3᧾l6'@Mz,ϸX9:Ma3.J#b[C/J!*¯2i�6+l$h!ĠXa3h!l9anlmԓfUk!G"\t�srk%WU>q% =_La'-ta ?}Gk!rc-< �M^)"BgD&<Ix OP*8gP%B(I:up0vCd^jg Zr?I#Y\1($Q`@ "#Y3Ac1Np0vőt4*s)Թ8Lm?g*{ANT֎څGG۹WϺ!D!)&HΗ樌LQ9E<)Ć9!bM}iCHLeN(6 $ JraL*Alp`V&$2>1eH9&gu1A\S,yZ%xAH3''AdIp\$BT;kc9+p./CDDT $5I]HMRUTSYDoLggSw6/\ܽti{w`v4ꊪEA2c٠bEYR,EQeQRY$\TRK] S̾,u]HYt|gK?v"dAdAyʜ6m?Z{t-R׼ag7 V>9l{oN4�|udw_(G�NZwdAdAdA@\ 쳗EY@T,k z$! rX,SFe9Oբ(;whvjYlolm]ܽw0?<8U4^e.e1.EaRKfႋb‰T/4q8 p?܃w2㿜J#\H´(vym:6ژ~>Vhw| ienAgFHOmB.>ؗIsZV(uU^1RӟvW2iN ~*4 !#OAeB*@HT8s@y8L/ ЖQh))m8~NԿ5 ĝo@]~N]?e"B*8Ө}6R9 " BBŝWN5uBkT恶űCKb. `pd+5i0fO+<B[S q 蹬>aՒ�I^*�,B?}:צ~UNk|әco<6| 6P4x\&IPjYtDIu2+_qvZڈT�sMM͹ IXP0q*Sejs y =*R i2kTDQ);nCC ;őpdveU<HX*+ƟvZx\AE+B>BC}Zf[V.'fJQ<7ir=yka x/r+*Rc)"z;3l02dAyDzθǀYOg3͙M&TafE`WVW׊ӧF7\Wn_;=;.\^p4GÃtzP͹D#.FhRD%/+kTu]Wu]԰̋"aӤ7W4jXw1-bDz)J+Nu~%;Ki X^`k,uCBH d} 7r$_\yTK@W8q&Dw?ү}ҕшwZ˾}VF ݫbkNB6YB�,M" N'#$R. Qej3YYs%Ee&ʱɅ`tOf�@% Fmş]HLYV KA ԉ}M2 w"G",�;FfK!AjR5[w`S,I#DB(3$3 ߐ]8$ $Le!0o$\yp֨ũ<V X,1`QؠҀ$ !v9DB{!܊.x s-\&5q M?u[=kϏ~u'S(qi'e5Ļ6>ݮ?N@yMa0-K@.SbsXQD(,噂`Xc3oRd([P^äXYE'ͧ$$hey4X') \h@</pтHH8L&+3A2C@JQoAiRv>>vFAJ2A�+4#.mw8�Q`m`H7:) O}G+D9 sӽ:^בSG~ă 0 Q 4}M)i(_A4~ BЉ?#*fk_bM%|Ps8FJe7.7 AlJ҇2 <D ioHp -7k(\\h,rkJd43Q]z|&Gәlm/mewg}}0;:z.RVRը.J* YK.FDCef$ˆ_]hRϗpa`\GqG)ř&?f$;`*a # o�P9"qUHly.^ʓ!=|Qh|f0R9kٙnz !ɹFQo,NJ6^cW97pBei`Q>wեc;CfUqnT9BHNJfS>l}H~r-?T(8W"NBRKJ>IX7�v�_-9v-\ {Q׽k?;/ <'Nvh\k>=^@ R{j/nxӽ]quc5�^rh!֢#j=`7Y&}xcQ{d ͻəx̱Kb]*D �pJ5:|@$6ET`! =A&.|o-~b W^'#4O1gp%'.J6E J:B=DWMM7 &xzU BNF.7;ZJN}ǀwJ>w9Db 2#_0Բ̉0T肌!gy!K0Ed*f^6 * )Y Me0jt}6zwwuuhs`g{??8fEU|A EQEYr9(~03cQhOv10>iYS2a KPDCӓ#H#@\#@\bSG ,!1c. 1COx>%mHD$o G)w sVO3\gSd(?*l IH{4#6M*˨^tT9| k4m} jTCACno}#MGLyB dr*Xxs@sN-B}lBb  ~k۷-!>5 =IϋǀMB5H'Y[lpm(Ax}�xy Q>` VI3:3^( P/pj q,p)!vOD1|Cp34X -.ꘘpqPoa=JaBؽ̀6v�_9`{M]e7H8]fW/ZųW_ɭו) ^:v�%7>J_S_S'-*<r6eg/vb9`Bf0AoLdniH)GfI^ C"&|^[� '"a|"c*:a{+.cz) Xk_s!߭SEk +NcULB!i&H5cG͏eR;Ɇ/uQNX }󝝏q5 Ov)TN0Eqr%0 B&Hs4N#A"DnRbB"D”!N8l$`6Ty v37oDŽp PӮ$PN$땴YhAS6Pjuz3i2sQ"!nܠDDe5BLT q-RQ%R5GV"T]WkGGkW-뽃={;>;< x4Qɫz4]ē,ʲMDav-?/u+W,B "dj 2 2ȇLL|leOM?~mf_U2_Ֆ̋FGdw8b%7ﹰcH(\dAd!CuA20]] N*;ɤ&.ɟ#.YD]7nLEYB1m;W͊f y]{|s`skok >NgQQy]UX,)A`2[U2g=X' (\U{ߐK] iK<Q~…hkP9[ܩi.!TE[D0j90m}f :%;(BHqc)xpHqT`*cUP&{FWmm-_¡ZՀ" l8OUayf1* hag$S*t's{ )GB<sQ6*P !B*3$ t!Ã5*e?hQL6SOـkD 왩fֿ ]7vM}v8SSGk-P#DW?p4#~+*N`+ FήEK29/}͟2__;s1 _W>;K6[d=6!穷%Ǒzp&k bZO~#8!gEu I!+-: ox Y2^`Ļ@e e3A4Ј簾덟]{b`w,a t< ɗ"R9Mf |ryjdM  Q/jg-ļ`QNo $iR!${ӨW: . x&ɬ @ Th>7V&xeNo�AJOL(H]|(ҨP .yY(<FeY�nPpQKyYcLrȭ׃ 2 tCG.jE)(A:hoK:_,ֻW3Ѩ&Zj- =5:=<8b88f£RqY^ޜ rY(PX:yQFRQ!Q~gj/r ImDP&TFr%;2ŝttU5|d@]9SD&p 16͍D'Weߨf$~59O*^/>Nf $*!u@FȱZVYC0Mdq'=I#$nڤƤ,ٺ=诚Idӭ¦{*+cJ~bAChgQ2A'/$w9D\w*\BB!"!aɨ$̾ M7F\p*kIlE)!b{:ۏ'FY>7A, /S_.7FG cɯYTljdB!jK B(2}Uخ:Z !]W>;_$*q_}QO_O745xzgW=o5�7b_y׾}oByBYw\\0G*h(Z'Lp)6dfqT e/9&Ҝ<1`?͆l\}-/K JGX==!m0$0Ts(p+m$ۡuF2EeZ,I&"MdI;%/6K{YqT�6 EL0&pW9PJ3Aif7&HCBSky2B}*!"KTGsrcFcg !4: +G!VّŁ؈3oѣ.s΍w]u: :b\{" !F 2#^oR\gwZ3sS%kМ];J*Kb!UT HXL+tp )]xtw);;h:Ws)ՅPA5 5B(ʢ(bT2SQQE.$ڿz"H k:)鈏J*7fUьC<Nyܒ[FٻL1Phn#|>ќDmSȕvWvtG&G#&m Du:d~/`#ܡuwx!)TiHS#T(g7=!dv21eI<Dd8E)D{ PjfQDד@7:ry/0-S<rrBԧ9gʭbv^[;jP&H!$ rٽ;!zkBۢ9;₃\Lw޿o*NKr4z`p CǐWw?e"r'<0}|"o�哏8j{2GNFOUMtdRˠQ=ͧNN blQe$aQ-.pnQ"a(M4Ճte! MCu~^S& 8R*o|W3^ !P$BZQ2(i$J^`*LPwuCDxJ[]BğdArYS#6Lc, Ff>ɘZ,cDD4ӫ$g7Yݕ snk`kkoskᴪi<Eŋ4*ɨ\.b!DDFc.Bj\8ʒˢpMTuQ]5-`qͫU1ůC]c<fqcǩ^HLa.!oRYv'GpwXov;M9"Szc ! JpqqOۄG*)׶@<diY:#L)pcC!={QaCm"B|�'IG.lIr21V\fPbAN�BFXj [q2O")q[QF5UX  FBHrz�x4jqݛ i27a*kԧvlĹoSM}]X h,dA16TfPIcO}�y;7LZUKF&|@!,siP!a3I e .9_5Y,r@6@H}b5z#BL5 rn*2 �;_[^[{ؗ\Lܯ[sMoB}CG$>u2B?xw~MG-'|3n�7ϺsLͽՕqɿ[w^9L?DsWUG7zRSl ڛH1A4 Trqp F#nM_6Y-Hނj 0A*Pڴ+{ ­L Y{ $N "dZd0&X}!hAK| QSRc;lq& sGHMeж)݊ R K`$v" );_2N~L2L뻓Z`ʁ\!#$`#2 mlH?(k?&&M@NOB(<-Bd*" $XHiX&gu1A\S,< zjyJSؠ  2ȣ]#^"? Z_ТMOްWn.b:]泣j!V6&UUI)( . fbLEQp z.Y(k)|1F;ԬQpRZ ^BYwX6ũݩKq%FG++iZ]6=ǜ"; ;I APIEz83F_fXC Ǽ{`LgB2vj<"uI#>J3v-:eO}_E};%] 00c횤TfGef!9 JO�Nea0gQ�sM>Ů;ǿm[G9FHO1:ة'éO*i+ZԊB˳j.w݇�0t!߇ά~J{6&~oϴmϿr}#|j~]{υkv !lG<l|کKُoؗ\۶ϾWV מ}݀Lr|ũW?9͝/>UU*I<d^7k QBPz,mDf$ :lp4mi  ERPw/5`_Bwd2PJ㸃Cg[d׭*f-B_߃)(~TjFH?I {cTRKΏAPT%?'vg?R<fZ?-@payxXdApGdI&%G˕kSzh*GS9:/\Z;ۻݽL EUU] eYK*J.ʲ(~)f*XJh4y<⢼,v-sޅFDlִ噒L6)\lVzމ̤͈`Pj37uy#"6r es3/M:FJ;3"iʸId2tq:n1|MM! DdqtM>}΁3�Uf5N"v`'ځ[.\f';H⏡Bw;XH~!#8!`:+=NMeұ3L"3s]t/X"2[l^*d#'! |(r@Bh-<ݣzww.}<> rHgӽ͗ 9ûJ0݇ =TC/ KIV]j|'+�p|ODnuM~~WwF:;|''f~b%?]3]7>=}z3ؼ5H\xyDIn?-?}V}sۥ`O>eq;ݪkWJVj>{"zSu7zȺ (MOBwռ,$ l>7DYq_c(X}xBN4Q*.U-g$orzF|m$yQ'/WQuCPtբvq(T4IkuhmKuŁ ؏ahSlT %"ʹ8Uj6s0*`UqO6'bh]j|U#U{aM)~"J:dMGƵ e)[C;>f j#Lyis/$&{ EpzvnQyκ5"{h 2 "RҭE OX5/*Z,|hFG|ghwpghghp*;{^u8tj&)f^P<Z] * !f*J₈&*D%#.eQ-&|ŋڥҵ\U|GLq'NTqF!_Te!X!,Kheg`حI6_7{�,=SHb(By(?Ҫco冦?VF ݫbkڔ 4;`j~/H:qq]J9&dCX*vINfn<Mgdt<@P@mş;"<yB垥bq'R ŝ`Rcρf�ʰnvI DrBL{N8g9a* 'y0Zl\yp֨__;a|f=;'m/װ@Wh1Hh"C�XidKՂ&A/_�0=g}_w4*n3??s\^:7>#W_l?}?oE[_"/;_?ŽㅯSg1~-%m_ٷKy3Wr?+mϟWgl4q4h_ zr w\_cPjS~DM2P(6)&,`&Doŋm-hT[�>Iz3AEZ18+Ǯ:Ya`cL 0v~ E!AU*h`gT$.BL$*E.m'a#ۨAQ?b+kk;_a j}aRǽ% &pnCu!?afOIq'F<>P9_٫?U.Da^D]1Uƈz `#`SBW҇2 L MQATeA1-_!\hVق`w{{ӣ|>_̎b6뚥XRVR0qYQQR/fT *EDH8Am*@Q0gj+}ԴaSN"<)2~M1A^ jk Nioonw>;ο,RtIjb#x(Gw4)]#BTHԱ^iivֆ6ucmv!TKsc=Wur䧎yuMʫl]B Q3*oFH恞<je.Y2)]$:nu#BHjWw T|LBg65*G:v;~->ι⣟89oxޮrD_xYwʺϾ}녯g>k_WV5{Oi| }:o9jܷ޷/+#οwn\^#_l%�LDcJDϺsFoimeͯ>gC̊ۺzC[i:&ofHδʘQ#V4.9&tLo] LP#$c1&8x*;ڏ ZRP1Cw60кr Z. #W3DoȠz.5F-]nEwsS} 2 <,R"*&*` Y*P-Tץԫ?=wp@;tvp09ͩ^b!5FER5$""R1T/bPf-ȑTpiNH/)h/8L GLţ*uU!Doǐff[ cY7|#5f4I<9mI">Sm<ffĈrx#9>1} G 1`(v;{` wdtuIyj<U&@g58o���IDAT:4=1}ڦNބ`(MV&f uttm&R!2plBb ~2G` g9$�18W !W!f|d c3n)=v8Bn/ [!v{l2'G:ba =p,p)=ws  $E(-uږ#ݶqI;NƓ58x<ǓxŎ׊=nur;NKZR$I| A\95|_U]չ o/ÃsG߷]U@C;;x l :"ĀBA {{(^<+ >\vI'~ O4lo9ڐ,drqʿ, vr@?4+r cnwEZ 3@Ya8`?8/bw vt-�,L0A>}X]$ $+)AYSp>!<W@EfBa  qD8tM0I&H! 0ABlh )W;GԜHd d}RI&|(I!`|%KA$UhC@ ĤK* RI:RJrmkCϲ iRBBX.�8hH js-\&Me 4lfrDADYIgdx+J+_Xpdk!CK!uCvl>Joyebiy}ap0_xꍅU_[\ZXtGhuf-RN+܉ bґn'oώ'^nEluxEZ=EDIn+s$y$VY="/x돇] hU|0rIe^ReLFF !R#>aaȆ/ !)Z5OqTևWGG8U4\:ުiX )Иj >3E⮶i)�³}UkEJrɘdeDeNL.nEoȆ5A.f83(3Q/:Jۈ TEhs@.8o|g$} L}MD/EQV+ ofݿ Vaٽ➏ٲJ}?/}'Sj^T+HS[{?mOou_xbC?o%U3t쪄+EWcZ8tQA9ٍg}3AT1AWcZY4$!\omsWgaacn*} (Z__I1c]'U-zO-RDB,OfחhP}'˅K0AHf K(YEFl4t "(xOݡ.w`+B!M*UN$!Ѻ"rBJ>M߆ Kk.X<D,�kJ+S,slK.jnK4ڥm4;?vd<>'};?ĝ?vףz#k}ݝ'ǖF#^gk.뫦Yt`8%r)S˳2ᦺ�=3dM'l`|3ZC\ qDT받T63_̎:jCwWPugbزXw=#x[!3YEu"nű8wf6X Auf-�fdS7K(fy+f?nS| nJBă$xLLgE鴔0@ k:5KpِT.c~R>Pn$s;Vp. >z |M;vwW&/c/9Wn?o{/1}}\Y?v7[2k0 Sc#o-g_xB/n[]t}{~y-}"|b览G<[ !nKJťY&h~O4`aDvk,+b#r*0Y#*k1TVP3t1o)]$-4I|wmir/gL *OIҚѣ"רw.bKW&hJ-i yfD ` C9z,Zͪ/P*:ashMeߖ^ \Z"&~+j Ij*5!u4eН[mVZi֋gL$Cu %kz!K.M`[:GL-"Źمo\>wmauvjֺ vON^.*XC)/8@ؘjBbS7w\m h)V=`s7q-##yš9Zes'_r ~;آo߱Ɇki? /umU/TºZ)xcHea/A`w~+=_Ғ᭪rL"\ǁ $4tp}dьf;-w6w ddA# {,BE.6<0n%t =8@ѧDe`SC+�I~*B6:BNF $!D){2g�!lg1F lTe`N g Blyx_D{ئV{~;_;_E~#/oH{ۮv{e+{뾓}GG|ЇMpǎq_ʎGnګCc_}c'aϟO4am ݣ^NDd8𱵟Ƥإ?`Lt #mwB(¢wLjO_](K|X(E!f*E:UQ7q-cÑ8E8 2Րq>ql l}O9(~I4&(_E e0ͱf-hP=DBX 2A3Alo2AJe*;Kq͟B`#BӜGE&ggEB*';kDP7;JZ!J+_PUGuKL0 Yv&c=%Mi]k++f {`aq}nznZ;;w<szs+):Be$E #$)ܧ]+w8IpazoLr6�?y'\5S5#\b$ jls'7 ޷pg3@_B%.GMB%;p"6;No—$⥰M(Yyl!>D$.!*" �< OMoJ2V,.>hfo`u[E 3XP$hWGʕ| ʙ!" �l@X!!*|^ Ԅq"EЏ"&C"Z:`@l b#oP(sA6)cB\1ŝ3`;ī,#$ @[>iq] D qr`NKANc $B## ־k:@ 1n_ͿgO{=z/WuoH{tڿȾ.ݹ=#3~unVIlmU:}.?gy^>yo_ܹkЯw?m'k- _:GP z49B.[a9"qr*RZƤ`~A^ v@%$KL0(>q&؏D,*QF(d\۝ށJ,W !H6@ |Q#|L~+dU% c& :cCapq6qLP& :2Jcʓq>NeIt6<X&hI0q>C-FQ d@b[J! R)m!MLr&HB .piF)qKL B;G mMG )Ύ  gORn7xDV22!GUɓ'_}չjVbBغ~k *&j*}uuC d{D]C=C(M]SCG=cO<:'}s߿9tE.12J�8Av BEDI:İX\:xqQ0.DJHĈt/Էbu'5~50.>3!ZX Bt j|H<79D>Z5KI�Ɵ!0RC]L.e`!$V'~UV&d焙U r+B3Afl&g@x>q+01�s#� VyBx?J% 'n=50̎616 韄46 CLHAl@=L!9VEvK( L! c$6(Ɔ3e!ZӇ$ <c۱" !lG88!#7IAss!HP}zHi"|rl@cCAH}bfV1M!gojWT2}ݿo:z!?8oo.]lO?89QZ2DokKɿ=^W~SO;q1W7[UݯkzV1a25Vxb4wn&oo'M w4ᑔajq/aۿxf_<8sϓc}b}rKw#w%|x{[ Ӌ /kX w{?9g>!-˘ Y2p4SL'Juu&HQW@u&.;]xhxu0b w%$'a8Gajd*(^ e3Im Y+db(Wgdx' HL#$1]8 '*D"@5#( %LC$D I0I&+)cDH PB!fr !,O"H H"1Ds.&0Iu&!$%Btmς$D"`@DeL(iO7`RR-]ΔI$i<fxd}}}uuu0LNNva`0XZZSSS\~W_=}t{'9ckz߯@vng(J+|To5$L"㊲.D>2D3Ifh@=ݎzȉg1Η4 nNDD< +KѮJ]0>n+d !onYb*91FQ ,Rې"v}ʻM mEM3-[9G`2p<Q|FWTP@o8-!Q5-QTHg!$b7~`rt(G kr( _0*sFG9y<�V\ l!D{3fg@,b\zlt@ߤal~`T8 fĜh2xnH4 wZ0z )QuiZnNXKM6"#KXD K,se:3~%}4:V6#sKϮ};3Ks ҡ=݃S};:|;voj5KgO_^};t}j_JRή=ճ3k3>߽mWT'}eZ{vuLu}裇Gڽ̓Ъ-pb&HxF,0`yA0AJ`vSITU$cť8#|&ћVaH뚁I:@<L\DlPA8 FeB "YI0-Q<9;Ʋ*~Q}2styq&K U$ӆQnӘ.u3ve@hGClȹYTsaUfv<"(O-3�ZYwfO8122BzcFGnܸqǏ bKKK˝NgbbbbbBm^{ndd~xMOO_~}ee&&&&zPoJ+yD2_1aQ-ȔLLz _c}"t/ujW#reL%~;#S븙2G>ںor�븣raO *~<O4{5oh Wt1E /QA9 S@7_qSʰ;]`'.)�7{ 0MB1 ͬC~3x}ײ!ca 7fX`ٷ>wڌaݣ}]\5kNE28lPs25iװ/Rb @xg)6}׾ӧH\14}kSx&]�͠,r 1Y"C�oLMt>{g/ݫysǏjU[�ıOnt {w/>9qA�te˝B"4mKH:?ĹL2.i`&ʖ4]Ib/ltXUt6V ɧha $ᓒaGP 5VPJƏ *oMSyeSf*7cZ-y"-% e']%ώeWnnc}1uBM)%JFG޳nR2ؘL#K"3%@ZiMerZ8;MS8Hs2\Y3k-:;Lqlr^{mvvСCٳg_Ns~P볳'O<u#<˗/_~GFFwUsرG}cݻWVZie3} ~x .Am,AKu.]lG"W6UbJ-I@05$Ao쿻1:Z1ϒ:2);�X]Ј_6|I'k,P xhMH �") :þ7{ BI66)TUg7#͟Co=V! hry=F'ȹ ؚ!$:Å|GEJC smp�CPSܑմ_GHLU* ;kkv�IzUr^C~g$rs'oʥ)AH(o9*`2փ2ß0ZuA7"`UPOoOȨ h8,<zb}vǧVZi`Ya[ӟ" :yHG9B oEGӡ:N3O{B~@2Aݥ D}Zd""ȯxu}J} Fهf(^"ܫdYְCO*̉,b(')+)ͯ9<=ձq>e|vG#FEHI`^"/@˸_+OE& `xPٚ2TR!!eLC kL Q l˴P@E ɲr…'ONOO?cG` //ݻw~~~׮]Я%t̙~g<gjFFFz^ɳ1feeezz^{.]:kvԩK.}ӟ;EJ+\1/hg_ UTlt%wv##d_JEq⽪G{> a1 Vl3\wuV=S$8Z_c`쥃& ٗ =(Uyp!rVS@xSi;exIMr|#l1Ī䃑F�&-2euC>u ч:)R" ȇ>PS/^$VAs=q�m,a“S8!>^q2l '@#B jBBdYGA.�623;P)>uJ= Aԅ.x>!Ă ai ]c+5?:T0;84'H!4�6�!�(B4"ہ"0KG\G&|`!9H'<7>qlT-nBsp?Z݌ wQ!J,1eYd<EH~־Ca꫕VZiDYྙxw IԃdF5#&(a y면S?J&>"^edB\'Ш$LӨD "Q Ȥ0L1^pb\؏! \Ai) T Oc `H~bJD0AjϦkLq&ؘⰐC&Y)JČ`H%5A.`=,"ꂆu/\ ccLЊ\4A+PB3hY6&0A%M2H!@eL0ddAw O4#C$31\8ǐ+�-HALv`OlV`"aL$w}78y믿>77'Y[[{w^z7n-ӱ^җ*wݪ\I;w<~g>zhdd7_|qffVJ+lTR'_?M¦0xq:DdhС~PaA2 x< ٥*&|^zԹO1"7̦KL % lT8܅c'.0̒#~g`CF NYcųkavPE,0!"h7$PO>@"p8c 99Pcg6>`7>\ (7.T]>jfnUdg]aD/3> -P3 ᄸ5g0|ƶ%\5#P.[ƈdYR@V@@xģpl(P=URփm= 5E b!|w3Q�UL1  OfsP/]!BX{ !|Iqc?5_vhEFJ+dJWRwL*fZ\I䱩MLPq&dq2LvWBF$tdk '4&('2 HHV*S2ʧ!|be:xR<0G�4 8_F)Jq*08a aKLB!:$`*S2LDG"K `ķ:L'B 8%d0fR]lK\I',@I!YJTε3 gY4S!oDa� !g&0 l(L EY&XoJփ=,--]rܹsO>y߿NQt^z… XZZ߿ܶm߿m6FGGGGGEƘ;vqޫW?|g^x{>(K[ifɿ#G|$6hPa`%\;QS nej}ҽS_= dd1%ޠx"=d|"tn oU\(ZEܲ_UJ p}?O<uzTB""C(äph@ ~"`}Gl7mgZZjcTBaLv r#yi`bsP.>?~7%FYUP wß-`;7[wfki*Bxlo6LYzKMpTnPj`3�S<اxx)r7}(cVγ/k+_nKZiV~"eYGbg瘧NTm"##/uE\TBHU* Gw#"~Й [yq짩,6M?1`L!s=܄!`Df8ߘ R�':"H`Q2TQy%BH1X=§$VbE/$,\0L%Q*Lp#OiR/PFgcL_C9ǐH9 Ju ,30)$󶀐BksZr+WLOOG?ԧ>@^z魷ZZZZ]]]^^bX>o߾/~###v<111111::vݮ0 z|>;;w޹xG>;wj][i-0/Nl,Sq Fx,gt:_D4 :;Vfũ$·O?3?? 'f9p4ΊL{=R݁5'H|}ha72fu>J %\\rwRW #NʈMD wi+ 뼉^¦V7\$ȡ ]=Bcڋp{e<>e ՟(�Hl�6o1Zgz> yw2UyU_[+Eƅ,'ޞH 8XB)$kvhVBtτq]dZv}\!. 0[uwgh qk|+S}ٟK;VZi---wΌ>]4g'}3"y1ߍD3 q !<xgX�{\\_ 9Olƥ+_K"0Jl"bcH+ ʟ߆%RƿFMKq>٠B [ cq|BK 2TߠZWZBxk vBf1&jFrp4:*_8wD0!5>K^KDrF$LcPhÝ`Y$$R'5թ;i4) `"48Tݒ*3;i⇼j 8ʲsA,|gv^ $ϲkꫯ~ٵk׮XkA_]]]YYY[[ܱzJl!WVVykkkǃ`yyyvv6nu:]vر#B՞7n ^otz^K'&&v޽}neBFj `0X]]|+|@{_o`ihhh WZ\O^X=.Qg`̀4<%Ju�Sg¤MvQK(>ZZ8 ?'c_,%voYX,ǟ5ۿ2aR Ct5 /YW|K4Xv.Lwe."lB:℻j ,b3Jzy�eښ[ \2N�#7$j㙛!,z$JYM!܉R/(RA#3[qx~B MJiMUT'!D){BJheLlm�O-l2eۃ]7gZ|(`FB^e~;-r}"MNQܛJ+|dِ;7×)BT٩n_�L;BM26gb>4sLtȇCD/ik"be1*&ԩ38_GE̊U,@ SFe-w끛|B(?4jT9 Xy&0\1Ay^d�]eFYƈuj @4P^eGSҤHi6;FEtP\쬻HXP fwZC ${x$%\Y[[[]]]]]]__6|ѣG͝>}_^YYJ~v7|7X[[ܿcm۶{ʕՙGNgffҥK0< nÇѻo.,,8pȑ#wy~ӧO_xZ{{۷oZ__x˗;wܱo߾nKDKKKNzׯ\BD;w4\vmddd|||dd/t:cccƘׯU󳳳ׯ__^^>v<p]wo[oU=wޣG{g}~ԩ^{###sѣG?66FDW^=wo}ܹ{o5vZi)>KX=i,kɚۉ.Y"G72D]tsc@Yʧ:EX>Tю%A ;fƔW[E|XlFBnSٲ"V ts*NWF7%p[xm4gl6�p0%&HQVb={sOHVK@ڂ K t<)\KwsiUFi*7}!T1-Qޔs8x-CQ^۰E[J;!"T)1{rK8OwQ+J+?9b--ꛉ&&#g; D!c/#"Q~j(NjBUD<EAr sjq<08P.Td&(R 2Bq6qųT{SA$֤Ln\/mP-4xrS$.PSaCТ zX x&҆aMH2AպX8;~V&*fgg@---vmKKKgϞ}y䑱`0==o^zuϞ=~_�o?/v~#<~رc;v֞?;K/877rq /?8;;>\Ն/\P-JO~ؾ}`0}~_|ŋGٳgO[[[{>Oرcee_~ǟ|ݻww݅z77_|yttSSS׮][ZZڻwHe;22rڵoVU޻wo_yK.]vm~~~dd _¾}{yϞ={ҥ}='~/^7wt:>藿< ^{g}^x7wO| _ػwRJ+7G*zHml?"^w%8? А1ɈQ8"g'B3DnCOxOg}ɽ?dQNm_Xu ,cC)ZijRdihH n>?̩@᳞d' U?ϠKmwo9C1anc9N)G`!F=1alDEi6p FEWi"ggA@98`|zٴu;jx'#ĆŎ<.} ưNf v�U�rVs6Q#$9k FCT?M gfqs#`Ma 9 Q6 l$&^7epl!$XPcÛ) l燜Hn;<6nNG!RΑYEV9xI,R@6ΰ >B@13}Ab<B7Lϑk?7nZ^)tVZiYA_ZI0)-HL0M$ H3BXu ,ɖ1)>;ZD^(CkL.m!ryP?,!XM@BA}@ %`(HLh!\xh9N9g<BLc?*{Xx<LWvg!㦝F1AbqM$ʘ 0G$' PCF"`*L! BH ̥L%¢}!a5*M tAaE XDHFJTgBLP"D fU읅D"`<C s2HI&XA"℧RR-]@H"!p`;wn~~?pU|饗|;cqqԩS/#<yU]XXo999911qڵK.Uv/}zηzvmw>tЎ;zŋzg~{ߛضmK/t{wlllmm_۷o߱cǹs^yN3::zqk/OOMMu]>h?{׿__xmׯ_߾}]w511Q3t:SSS믿~`#8qСCʯ̌۷СCUܹs_׿o\pJzzzgΜqW|K.Ul}`O>w܍7vq]w=ûvV3J+[( ;*"ƐMM5k:d jA;Gps"Z x/KdzlTЧ8 /}^^bi28A"}6ygl(5u*d-*"l客bblP?Ӗΐr̻�Ai T(Hh*#HmuԩA<C./'VM̔(fGUdEڼ4;w�9˻׸d G9t5CH]w0"D7nd}?ƹ O g Y{6SufفslP54#a.gͶؐ tXۯNc&N;i"J+Aki1,3~9p $<5bH<`˛�;n x8@J$YSe:f%;d@(\6U TZF!U(Z}&*`*G*dVЈ>GzS;W_RJ"8 TY �suBwҐq~Y(.DQ*ڏW�K`R*xLД<tTbPCePdМcA*PYF`{-$s[ 剈 ugffwu]'O|w^}[oƍ7?}̙3N~_g=wy~~C=z]Z;11qСO}SwyѣGO8{jѣGg~f޽/^|gz;v8qG~gO:u̙۷_zs=711O>~}{]tFGG1wcLU]wc]wuʕ7x瞛~w._|wرc۶mnow{_??^__?z?|ĉoz/7O|O<w駟Ϟ={<C?Ç;w?/?~ѣG[iJ[ Ň7x�cFI/D1Wn�UEG=ت\?Ra G&nD&V]Ef0*MA n.$ *@foOCB{Opé{BI,*cCcj�͂J <fٮdE?|/ O%r]@^Otyi&eq)T_`! J03ٍ�_WF٢ ʂu^4&�rs{!$# 7GP;w|@ªJ֯V~)ùBB)v/,/dP #R G�vkGO⨨AN>#'C- C7C1/V�"z'fMhJ+ʇBh:7Ǘ;`(%Q+% &b1[gM9^C?L}<*]u*$24b݇ӗGP#],?VjA8B&+|D]5LdPeB <2A(4cThԎR<WVy ` &HDijI<?/IS$&9<wfP3Ԙ G8W@ž`%dfUfdrGd`wӤ8eVGO{Fz ,Q 6[w!G'R̆I�:ӗV  qs)TAlR ,x l&}Hjދ/.--<x7LOO_pg9|ɓ'ϝ;}|3+W\~###˧O>{w߽};wѶmۖy3g\reΝnwddd׮]?kΝ;w]___ZZ"{瓟#G~z̙3;w|>^vmaag~l^{mnnĉ|m۶;vl0?… [Ƙ c̥K^~nٟ|׮]&~0j1۷o߿Աc>я>c{ ^#OOعs3g^{Gv{9pŋ.^xڵG*ڹ7nT{Y޽{ddՅ}СcǎU/B.]J+TӒV5s?Wp}<ՉW{VZiVZi/cXha}p+ʇ_¿{jpJ+J+qY__}w%<H{gΜ9ogff>}nΝovffʕ+z333W^]YY1ƼꭺUqw~~ޯݽ{cznT`tmvС;ȑ#`޽۷o߽{wq]wMMM:thjjjyyyeeennnzzzzzz۶m>C=twΝ;|#On1 ㄈfgggffVWWGyرc^ZW/jU%xiiilllϞ=G|ݻwvmڻw/]vmyy3>>~w>ǎzxii… ՗/_~7]v陙~~ƍ]v={ӧO>cǎj;cll+WN:uN3 ㎶J+lT`+~n/1.m=큓h*&Iaʮ,FriH) ʞElG 6 ѰQϨ(of4OԶhNqZҸ; MM[~);>\4I,RvQn:v ;CpκTvdЊT 2;;|Oi .ssTT˵ ̾ПRX.7>P !c@DK�--?,ݠmVZiV>IJ0o=?; %\9jh&/` lG%sHau)(λ˃9s D!Pz׬JZ!W_8?(kJو L#n K*;d+rL\L0+̢#bZ`"Oր,BTք!h[Gw|1ji$Å^IPVHڰ qv)ӗ"rSʀnHeK@R7M֮_>==sλ|^zɓ˗/۷>255v\} +++kkkU2{gϞ=wyg׫ՎNMM޽*QUsNLL޽{jj c̎;ٳk׮ȑW.--۷﮻ڳgOQٻwѣGjqUt:nW[__Gٹsg_"ܾ}{v"kkkcccGg>~d;wܹ}vj'OJ׻3::gϞO7n7+|_?}~Ǐ۾/ONN~;9uŋO<}_}|[i8.eQy$Ijs'~E&R#9=X%pqE&JፇN7nYF)"{OUljox3NZkL82lX~ Mp{pUxąi+G{z/@aCAC!orkM-/d8?&ouO7CXb+[!g]c Ӑ_53l@b6͝5:π 1Z|+B+'v0Vp;G-k\W �onBZ`V0}7w2SbÀYbgĠ)![L2aS9;Aml�saB^:BSωQdeŵ_+v:ЌVZiV>JK}3_5+ɱSߖ>!*gst_sKCDO92Kܿ{%xm`P'$]\}\) q1A2wdR|*Q@$$BC !6DGXG5`ܑ?@DG"K `(* Q`$q/l hY*8pɒ`+ b�ZĐ%1 Bdy-> yJҹzHmm!`Y!MB#o6ԒHan7HLLP$cl2i(K@V쏧KM'Ӥ1 xիWՏ<_xoccc>v1Z[mk|ʕ~<::zG}~mVUggg:rH[[[UI"=Qh"7\՘NN֖VWWˋUZ[YBsvD6~VVV|ojqAZtcU�t:Ƙ`PݢjIu`0?}رc;v  7nX[[;~}]<CO?oo=s333n۷o߿G}7{޵k?՞ۭʇXJ-Ż5ssX Q\T$먙b"lȁaS�q$E/N& |C,Oaj#Q R@`HuSNЪ.BVB u2"$(8բw(]>}_dRc8;$ĉ;J?B!*X]V!xz !NKJa!J6DTOI7 }P{󔕁q> a4F#rÔd>dS8aٺ_ d7ޘ,BMHP';܉jz;Bxggּ@ČoY:U޷dܪV K,@4l'|̀f]2@{u*<0  *gJus4ιX )$R} ,C`C8BTsGh dJ3Y{${m F+J+Lzs_Ytv>&;;+ᑗ Аz Q^9:2K@bܿן R 4F+ý؏B ryQ\LK4s1shP**e8OpF2A3H&Hab&X{ȱN~e_stpb`"k! 3&Hʊ8_yk2L HraL=%8 !GD/¾Ox 21`CXuagn'M{4jl^( IJ1GDԀQI9G (vDVPف IM�K"B"Dpxkҹsnܸ1::Z-%ÇX^^{ުcǎݻw^pa~~펏o۶mrrrlllttѣǎsҥT\ƍ KKK\ߌjkRveee0T57n"nuLݻСCwx/xԩ"ZXX8{k;,,,T1Չjm&&&^~zkvvjٳg/\0772Xk֪R.Kxaa/~Vo۶m}}}qqZC|V/=w\B啕C=Ն333gΜyw.\~}}+_y:ӧO<Ymd}J+0>b(3+&=|.R6K:xs1~xfiC'&FSťjaqݡ>=W237ɇVuʚ{XVy՜ VJpX@0Bjr $3DHf& wȍD*#0LFhT@rb�AM $2RpfQ5;3f %oJ'm 0"ρ*`= I(c!EuΆlv@H$-�fpln/X #nєLL!bn1{B(0>١Ã!w�k!;3�LNM[ C<g`!S(]]#&VӍYNNJ+|dڍ޽oMp1I(f@ RqQb8!"rQQd00)rP1AL4Ohkv+p4J6/&@~|2"(~ /A+(%W"@?|^Q<)@t` %8``q>=]J0HTzx*@iq> `,S*.`j .vO0A*f̆0(q>< r*r  'zTCcfH53TI>FsEe%ŁرsvC8ǐSHGHPkd' ] 2, (#}"Ν[YY~߹s#G>򑏜:uG:TQ'''mvƍ˗//..vɻΝ{_z饽{.//9s;Ν;?m6"Z__*j^g[gz/�/--UU۪Ղ۷>|я~k߿k׮W?x׮_WVDo߾;sjjwng}_xdj!UeZ_e1U5Zkٹs=swNOO<yzyןW^yett W^}gwU!pϞ=~llliiO?t߿wQmR+ VZi'l'8~#&aR.7Dy+J+ʇ[>}{YhavjVZieKeЧ9=0#oVZiVZҕ+W})p׻}W_}pubbݸqOLL<裧N~ϟ?̙zz^ܪͨh;WT'_Նwo?yo9sfNtXۭ_|Ϟ=oշ~ԩScccvx (N*W"o߾wy?~~۷^|D{۷߸q;}y;v8p{ݶm[J+l4:xkD/{^G\p<[g)XfZyRdaN*k H$gʵ p$gC:v[p`1/8ą0WƺbɌuB\`hIן *iE=ehX@~)2hC҆!�Tʵ%HZeՠj8Bm~av]�3p fFY(8ʛrήx1,RY(t_Ƨ!Z<ڵ6/0]-?-/8MVZi_%xձOΑ ԝcsLa*)L(H!+qCurٲ 9§\S܂忤0Q. KKº7V*J}hS ϩ�] ƹ-u2Et[ɉLP 5%֔Vyq@H3ȇ ODY.ZD�EIL*l!u&7Pd }q(I% iF_f#ׯ_7LMMDO~gϞ}8@n={/_<33szz ׿߬^cǎǏ?k."~!V.Ƙncǎ;w_Ƿo?׮]?;v5::s}۷ollڟLLLU={<ګW>s'O߳g瞝;wz~&&&&''GGGMd:dUrڳg?7snnGG?s?s<;c>K&''?я8q'G>rر_|񩧞ZYY{/| _җv]U[i8v㏣&F< eeckj5 "ik3D!sr$C+i0*>6nCTfMjIA2vD*h EJĬI G;DA<Ut)ԩAY .H7jk�ynA_$zؔiJEmrlF՞*"KRZA2y!l�Qͩ|;}'AdQh=6zX߅thVZiC!swlote& !$JAv-S9+ m@ oNq$➭ $*U69 J3)r Y4 �ds*akRR�0i E%A4 !T 2D*9SJ$RbM(W}3{ĉsXift~~wyWСCaKKK333Ν;<gc`0voONN9rȑ#w&ꍶ?}?#~cccgϞ}7oܸqx`N9̙3O};699977o\~}jj;<toyykw}ᩩ{W}Nsݻ*:tرc{]ZZzWϟ?vcǎ]|_|/^h뮻311111cǎ#G۷ξ׮]۾}w}w` .]K/ yVQߟk]xqfff׮]Gyy]vzK.?x嗯\2>>~Ѓॗ^z|o衇^WJ+S?ȆA"Zֽ%2橯W/F`m&EQƘXBMDZRmyMj+X7/ӚOݛQK$ jD5Y]CLUJkrfd%g[BB<]:[ݷni:\AHfڦg񐚹.kpWȦ*2@Mrjzn'd8{q ù{Q^]b`/p+ihg ]:|)�4$ƽ+2;s *è BUroT8j4Ѳ� B6] !q K:? Ю3jVZi})k+t2/ܦ 7`,%VZޣT$ƎFH_S2J=URej70A!0AEFT s(m^,\ClCId'*Gxb̆"듕7'PEbd|XY :Дkn:M=KZ{({&XhМc.$)e+SFBXW[Y�‚vbbb۶mcccam#NږzY`0N_XX81f۶mwqΝ;uǷmp_ZZZZZ;v6^^__^�ǫEZщGk+Wh;vV 7n,//QzիW]o>>>vբj祥ecxup+++W^Nઑ333׮]۳g:Ugfffff+ٳg޽UGܵk׮]vƍ]vݻw׮]c�CF5A UVLj.|EXyy;ꢕ-ޭM⏯Md{feoBzmBeUVk9{uJSWY#qJ^TAOqd; aduFB&ɘ2*`I 'ف:*4Es�4D-$Z` 973D 6fEs,y<BFyk$5ޒv#:AbƻkX`ݫ"$Hzl c??jOi^nVZi)]Dza3&M"HQ8ձ1A$y.st GTOH24JOC(9EL VfVyt7Jf/@U08?B(SJ$ɑYD QU)=T�^bN͐A :.[ L01:dd_4eiC٢ E.@H?Ep8*$Fy4y(7˭],z.u]|z-V:׫iv^J$Vǯ V8:AUٸb%U\m1Z[5ӌտW V@u8]uWWuZI%###{[i+VnBZ?](GuJ+J+  {᧥42־ VZi,W=zrt U+J+ARe1&.Ozqk_.% r^1^/*\(;|-Vhk nwrrR=/NJjJ+lF:jWUUc "k"M2dRJ=)gE -I&z.7$KDmh%W9v:%<*PfMmoX{q^D2z]пc&NBy<61lb"2qpN NwBBL B FMlF ɩ7b6Y�zRɳ[ax uVz`Ƞa *hX7!@M WYv 'L_@ 3cP�GH4?lP`&Tw=&N "B�?B}Fp;�[!]PrxL.i0><c.&zYf 5!BLB]l3#|~FkgJ+>YZ]wʺFѾ9SxhH$2"hG;;ribR3A$zr!oKTӄ@(4 |r+Kk*x<�"|S'VB4&H!R]QO[ 9_ il ɞ:T@)&H!P3ʇ #)S!LR>g$}Gr<G]B M$D2o8!r忡ӌ"ţ8sNS,@™`.M2H!1(~ L)3I L92&1  f&Zk<>hF 1#U`:dNVZjqԚL߰'js\j`0 1zVZi%;G^лsp˸ꎬر _P"$ycxUƷI)-d}% X bATBhT}:>�P*cct^5gHX0Ĉ@'0) P+n j"v j϶qQ@uD>HQ_!#c-o�*ZNtYx>V&b@'*<9�oF>]]Q͖`#3ʬ<Ta<Dx ?=ȉ[>̎\*%je\H6!$+e} SWR@V@O `�Xk𾎧G�0`�cփ +88+Raƙ=F*sv2 OfsP/]!BX=* c`Ub ,`|y04+_/D+J+YA\tyIDj:ԂJ §f&AOR^]߁&O 8=eDJ{屟B~+˟nEAa ̑#$�-ԁ  5T`D1-M2A"D9L bCc�tl#%I0Ua< v㮣8Ʒ:lpɒ`+ b�ZĐ%@a}Uv ڙ  =4I]JT( &#K{P`6P! n59+;;_ģ x?H\EJBX<A5͗?oZ 7L|o? lyVZi:;61b((Nn%^\%=^GK⵿m_pJ$~k-g]mAeY@`HĖ7GWƨK2!!/梒TI,վK4B21+8y!UAΞ.I~U`E Hf�!aJa!{b7՝ʮٮI�jm4/'8"dr; (u]Y>d S8T*�BBa3Y8`6�Մ<I}#6<}3Ss{f }j؀(@!Ӹu/c) ׀! 9nxB�lLb08H6gJŝAZ/"B( /n8X 6#�.603#v䩵jwi J+een\.ğ՘ :`HgL}S#0R!iL!V�cF�}SGP(dLJ`X-d5T>Xߧ 0š0)ŴT48DF$#$Q\`R|_ "68 !D2A$^i%:"Ÿ@81]PCH|/?8 3&HT"·,p">,tOI:\ iA(4I$wm%OB0nl|*t;iܣW>HђHӟy o=bH jiRpv rugl57 ̀]; L5T)fiWOjWVge|bRT[>J+RZ$5A">^Bd̔v_g:(i`C9!%L1Mdߜ@ӍqּXQ!처D~ģą%zX5jXW;#-X$BxW5)@~顲PUPFܤR�rMD9xFT8I4;<R4$,H=*8v盝ކ^$B`YbPltHuC!$k7QhVFuv B q3O sV=*4;l`P4<lB$C8;}C7J¬VZi[)4;o3u-bU>MDp5>-tvSR"<t i""N F*7 h}\AFPYË0B =nLCɍ׎׃x dVT5f Q 꿫6A"PAR\o ,(E8_B2.9&*73A+@H!@B [09|?DJ=_DwΔfp&=qxWGz_+~0t:F^v6'6jmսڶh^GmSVZ0E===}=bcYLZ k�:\P_;REùMgܚ/LK,my4b!V鰫oMrfnX?1 aZ2F;-&\S9}paf$k͎ieC= ֤$F7%6ͬtCMR!OmT]ULiӷ;07۬Y*!%CȆйwWin[iVZoB٩Q�LnJoE1v OKsxy~FMa/c*iTlMCfVEQ*Mm2T<,U`nvi MШ% Ib&({knwi|!_0T {%;P^e GE#cmM:cTDx}Bof o->%s;N׫nIJZq͡Vo@|+3{ڶvVZK._׃䡪D([�U)'"@ M_5w4ϐ3n,S;lܥ\y1tn ԰sIS#F/-~-k[D$KbAK lE|by0ZQi:zQr?|`.a!JkdbiߓB᳤txhv-n0 Sfp;( !*Lh#Fb  x E!@"& zfV[q6` 7rTBa\'ex}n@h|z0 ج7I-Ew.7ˁÓNv|s3jkUi!{T<ُ4wdA+J+Fh ΁gwOq^(X.:މ|("N.LE VQ `ZeO`I "I هʜRl`\ZK'\Jg%�CE.P9('%&g.:h"8iK! 7H683S9KQWi ;q_*& T1ΏH-R%<8RY8FBP">( GH2[=5xUOqO[Styh!$d n@YQ*' p VA" 򆡺nIeBV2 :g d'UeN<1|_:%eƿ_뢪uȩӷ( Zi[ ⢨L wR^,LVk}ߩ ^Iफ़avq  B5^Fd(|}ޟޫ!2+F4.l4 +.gE;#<q.̩`S%akraTLD>szdEB]pCF9ɚϊO6ހp&b_Û3T  Cyo`?i}= 'ñA>c <0FGGBօNq[9THlY0}{ HtugC]اps:BHGqgrp7U2Ύ= ~�(JWYCb$l!AK ٱs ӵtY JO+K4{l>VZii|e]RO).C0A|" I3pt}"A1|ҿqB\ȗ<YtV/�)&(i&Bɣ| 0 zG`x rIï"ZC7wԥ8Lc?*{XۃJLe5`ïaq# <0A= Vٺᗇ4s\(.L&orTj`~fG<E'MBL0Bpف&g >x &&QxJe 2w$-}Xz6d`[&*̼7>%UMŝ)w;?Zi-\􂑛KWx߫Xnϭ(O0Cv$f/%{х▋C D.nӺ4'J׀->P:H-O%Pj!R_\3Br~yK݋M{6HB<<B]` !$y9֒ 3CT~2?AOuzE" 0 1gB`aT;j)\@8uy`u53K9q(;Z[0\$CFk'`u! `6|2lx=1=WL`L !PLYS6!Z�L{SR2 xG`G{By?{ڈRb! ~+Ne^}@LpsY<wv !�͊B`Bj5r xAKb= wOS!Zp+bb, 4ʧB^֧k+t|���IDAT2 J+GV:[;0??�gA82A`E Ԙ`%5H G?G'ʤпF&{ I2Ar1R<LB$#(<dXcBl:c$Ù �!+QHL.@`Ct&``RlUvj0A(8?Ly,?q>$E)C,pq>I0ؐL%xC@+p$E"Η! LPEv/!ެ%`făX`LPpdœ `  փg /Em:0] ! MI$bvhp,dx3A=&<y0#H[" vÛ*Fͷ1Vυ-%VZi$E!QpM'|kkWX'ƫviÁ%:,2!.as{ &yCs[e5,җJL3uJDpbPUƛH&wcw*)w*؝;cgVYGC'=;@*TfT$|nzCBި_?]]WYAaP_򚽟;f!D>:iM> ;;?v + D/>׃mE{WVc! !ޡCvwv\G;QW4J+@73ԯ\q2&h=\QL e92;GR*l9Ro`i QrNT]6B(o<^P`B(SJ$ɑYD QU)=T�^bN͐A :.[-$Rg8h҆E{!d7]$I8P4(Nq$THiR=(Qn|̞8qbddVZiV~Ģۚ>}1 1y +ޣ/}~pnUأdR5|`(Ea[,.r:MV > U"+@1R2M%2e i#$Iq)=dt| f|7V *!d 7M!ka4UvQ`w-zx;^B3,v(ǑP:!Q~~M`_P{ SJNP`넼$g Td!$삾[R%uZ_i}�FJ+8'fw[^Ikb` *l,ฬɌαnͫ%!h K$ :1?Ľ DJ -u !W,Gy cy/;Y/9UZV#If]R()-ΏR>a5h5 &d9!":d_:mS竚% NHQ׸5U$w:* \MT.Bt#Ȏ2 2>IK`{tRhwsD|oVZi"w=\Kd;DVx);>NO뻿۹!&5ŅwS5\ gɄ6¥\4HyyIEK^2 +[2lĥqᯘ�߳kR٨Kpa,)ikUۧDי7*fH1zzMtxTۥ3m$z sV28S_Oj?+]$Un0ϥZ ,BEC wۛP\LO!Q#2-|kA =6H#,a~t_bt}7J+lBfha[{z?TuMD!S M<] YR"pָg`kg4z 0]e ScK +K\U%ȌIͲ3+�­\$KmQ0 [dz^s2l)~|8]!pZ,3nW~yoN}@N0ψz[q[BS ><4V#p9R6~O%Λ=<neeZ'b5VZiVn$b#SE"Njmtezzߊ{? XĴL |E-$2i/g|_3|.\SoꚍgQ)[ jĒ͟ce6^Ћ,_C\im'>TexMqfm̀ ~[(.9R#‹{J ?a޷ikcm&i|b6CHj񾜬P:._tOp- 'n <B b'ܔOFΡPWӊPz^@<\GI/Hg nc7bS6 x8q03SYR&Ftvi0pKA_ <^<di*_Q+J+yY_kӴ-voׯ΍<QxS97ǝa ' ޼LP\H iETABLP�o^ D{nfm*R I~t705J CLgo6qV՜W= &o 2LUÍb?o᧌SI02Ċl8?1ƍ/ &a�8E1! |D}:B.` B0ws1Br"bchP `CaT`F:rB@ o`VZiVʥ -٦xNPx9/s;Qns{u#$m\'ցOYvI2.kz:_\d BCDlKƕ1¹ 55433LcSS Ca)pYp~CuQـ+q8y~ S*X]VZnZ3~& B%07oPA;Sꀊ gpAχ�I!è8@jsPpp;=V{)CRp Ű�l~v,`^<ID:b;afʬGH0 p;DC"g0e#ˁW!P6v@ ��F;{Cc1'o- !Bޘ KpѽM8gIwAo<-/iAJ+,YA.S=~uw$ DT9ww`LP` )Ԑc292Ȋy&{ɘ 0AhT"WJODPQ�S BO˙ VB\k|L\�Z BRt24Dlq~)>Cd悻/fę ,xǁ"�^kZk`0 &`P` *dKML_ ǝBY1BH$QVAB4}%# H3BGQ)8GLPKs$8AQlDHhy@I!@b L- H4#N@`J+J5A"t.+*&dzǑv_g: ް~ʽѩ >CD#zk_ΜwO,VRXd~ģą{}E z,Jm!y\ Di?pPYvPIɖ\S9fNm ixFT ֛ 6KljOEI>Y {Up7;ӽ IVŠ)o?t\CHn(ܰΤP0SRЏ1} HQ7BC&qo !$A2#γ_Uy4>Y4*J+lL毉D4=ߛo(5NmƧNuJJ_cA2MdPC0Hb>+#*26 05SxArc 57 f su@W l"4DDEo3L`<$|yNx-$Bcr3tI$"+0PE@ Hş8C4;8ڹqEtGySdw5d?7'Ni>VZi,趧O:}GLsL9k)U upҞ#90Fx&[/"7Q`V2ENz/?P[XjRX?-.uhLu,85=K\mk닇!aO0@@2~>gc$Յs{x -_DU9}pa>'?9sSm64jf$B΃<<59a#e:<K!&<Ry p~o =͝5_q`ob#E16cxR%�TΏQl>I"7!̦o0yd'}<UANJ+l@V%Q}uÝ[/(^h#v?ҷsإseuKn]5Qn0;[ݷ<]H!J_:L w s}֩LXxv0 e`l [<8Cˆ | _  w�J%`䔌[]շ@p@HCI|yV]_)?�lV {%Kٽ@) jS c6 z&P@L8; lײP ևJ+JfCUV�+)ōtBxP`Ɇ= M?X!M!TO8�>7-:%ihjV�E K^qqW<V0Z %NnM*NBl㖛DˉQdPkp|= =429Fa~$a/!F�ZbCPR%>7x;qiZ&Iam6MODȖ:K*zj9oyZs#=`_Ey]}74NJ+$NWI6K۟/NM:X(5.MI%~$3kqwMD4ijdYřOZ+%9)->Br,t$S V6X;ES9KQϦ"^7qLh-*ouٯaϭڒp-{� zBF|$*/Y-Fhȼ@YQn!}nIj4녳BbJ+J+?DqtJ1gn-\Բ0boeg`)OEK V·3~ijztI<~ch)L$O &H8A\;Dxפ2Q z=_)2lPTL5|pZ A[)#@ΛPs94,@w h'[TNְ+h?_VJǤx F)B 'w pCWl6˗ |pVF8bScuug98DkY& !6OQPa~Xٱ'zIwj6@;42}6TQ;֡0] z@h@/=* tVZi]9vV_.~nj<\eȷl7,VG "D2QqBB_;e'mBR/=- ϨUo%l< 1lٱnFhM,UK9j Tݙ{Ɔ{t@HB7萯Kt gk{s ssvl 'IkֿV!xMDB |BaO>E $fs(4p>9DX2ê Oi*lf^VZiVZɹȤܜ^Pֱ"&0q  (7#1^5�B v^G$Ci]YߝƩ,uAO.c{A .&e>5!Ї\=r sQ"NV?ar*Hɿu߷aug$TG.f's&Og6wr DR�r_@,){'G ۓ}z3K9q(;Z[0\iCF9cнVGH odz`-GF0egg` eQ g"D oI \~}9r9;ڔM�Bpk_u h%4eXD_b6WB4�Bs$n7`o)cpB`B)r 2A~S8!Zp+bb.Gy, 4 6dsTX!BSj0[_ownVZ٨.ѵK8'*3zl?߯tv{/P&q'p &H!>3$ͱO"IL dd b9DrHIM\eg@OB A5ql@Mȓey $r!@bt!:L00)@[X6BgyQaQ$� "|Ȟ%S~_02 F $X2?�1'nĦ]D/B1B$=rSۃ`"Kg-$`.W@BMH!D0AiRxa5&!$E%RtHΑ12Hs$0}TY gzJ#@>. qTJ+J`8@FqN#Bd8ِ橯]Wϯ,U4c j\dYGuևө<!Cc-NfgK^w]hy7@ ju" JR0T&0yduQ9%Bsg4 $jR[BZe !pQT$|nzCBި_?]]WYAaP^p?wB|t 4ʛ0}zv#vv&~�@W4^}Yo/@w UB$C8b?WqsU9f|MnhZiVZ!%Z/WFl{t21FeTRPc(cst Gcs 4*> M 3. l^Qx(� W5RQIj#v9|Rz6� ǽŝ!:t\E L01:d.NEC^6- Y$IZ<é\ Aq#BbM@ lrfĉ###J+%S?ip)gD_Xyƪa'/L{g6^u]Tǣ uͭbtƫNe"\s{-4ֲ}XSO#mF+U,Fcu>F0nNM8c_!"&xvǫVĹati㹽C'A'lR@?>M=Bi9Tb+;B9!G37A7hflE5ε/Fs{Ƈmrp}7qD?\fġK;wbC; �W4`cb6L_:L7o=EX !䭇aLߦl0#h+C! `e�!dZ삾�O?xʝ4wUdJ+biyKs3\|~zs:V�2G / f &((pbXa_:w `d &h0z%)d<M5B Cq~ 7VM@ƲU: ɞx'8"&(e%*G͏|-Q}w lNqD`BR< 2}dq>luFz$A  &/qF,ηK{ Ҥ,$&]%G92GBDsva(Ý#cC� ʘKUp*9#k ܜcJ+R.zϼ^Kd;vpBpP Fqx[`[481UT4φ3-!J]ϢRd`=Ғ':L/JוP#g/>s@E'X@S@uG`>G_+PY+zo^}vOw0&|Mtv=/fMӭI*X[hi$yhGl(aɓ5Pؐ)XlBy ~]<?3lbM62o/u.Vk>q` 6?ޠYq[f*QC 5#?<ӛ]b9!H~q[}QיTb꿸bO(]Ykhn}7p+Ҋ"v@K t_#uOO{ c@w�@=ZgޙWE?.2noJ\0HvkvuG?i  gJ{+ 'K 6$S BFeq,OӬk89Lp0 #3& W,Q/hc )#Ha,\4+L<'c#hNx~84=Kfo y*p8l1f4 "l_oE$ Y˧2Q5G"4s`3}aM?[E.RWYbcⰲAճ':qsܵuwW[mVZiesuˎOX>z7kA7@ G3?$)8ID2+VMnqP9֔jn, 2S<L ۔R e` RYg;Z,]Fۄڝk:z9c"~?หc4qfXDI JK|͢??2*O�aie"&ž Vn QЕ2fn@g-V!93;;'͝+ B}JߚP`rbO|m~/ʄG,u{46IЭJ+Lˋ\+\OI_jLr'LЄد9<oyLP_^FQA$ Z2&]Mc\#*K`kbo %,t+P)U4֜`* aUO膫቎zc_IJpuo77XeEqGlXkQs;V7fcV5hD%B <QD|-*mF<&*[ α jڗ ?;;e% VZiVʥ&PtsNd4ND NJ]u�T\o;kca$V֗!u7wxs͝Le+Hubx@rp#KcL8l;#b}orQ6ܴپx͇Ut?u0U 5jB`XRW ȰOܸ 9Sك]yo_r@`-[͝p+Di<M! CNAϰ՞b'ċl_@y`ßE 6`ÂAjdհyxf 7wxߧac /v iVu/c/l PQW!P6v@ ��F; MNAa~߷!Bޘ Kpo,9@$ٜ,Bdvj~qޮ`Nst]>M dJ+&kt:\+VG~]l[Wy"CWP0^A{\}&;; '  А<T�kf|SGP[?&hsܹK` 0š0)DH b!$4J  D@LLG ! (!Ea)`b-#?8?T9k&Ϙ`" Pz[T `Ic8!h#1Sm.rr0aꞍsnz]*1yd#!DAB4}+@HQK"ϴI9dZ#qih7 CH�1yM5 SITVZiVZ)&Hܴs283+&[__Y3Z ^ܽWCipuDŐ729'6nEd~7:eͺ]MDMƢ&»w5 LBHe E/li15mE>BSSU(Ӑ*dzfM9'3 | ~nkv{z} UEtHuC!$k7QjHR0SRЏ1} HQ7BC^1bQݡ{?2gsW1ҡmVZ`@k+Lk+> ؗߜKsEL~@_\<j~[ju:;))~ 4AYN(gM'،sC H69w5ʪ ޅ 3nLCɍ׎O5C&hכep7LUQ]% ) *0RTn8ᵐ m L% xdP@+L"E1ddOh? Rlw5d?7'Ni>VZi,趧O:}GLsL9k)U upN}z|HsHds{Q*u$n돸k&~737P\^C"bs{ӯ@ʼnaRQ4cVÂ0ԡ!uh&|>sӝ`Tv-vDH mjT5۫TgkL\DK6Ib]s0yHΏi#h37B|{;5.X퀷!䛢9QZfAȣ Kl_D+WGs{#$@lf$U#Z\B�YD+@XD[{ l0(2ā9;p9Gb!DJI%�Hq~ 3au t'pM!VAy }/['ı@X#d`F_Woĝ-]+h -j [iV2ݸN.Tw@s?zn3;Ntv" ?&Q :wv}qH uB;n[9IAQڡD_C ΑȇX�tHf9bd ,BA8C C6HȅIl/:v s}d"| E5ΧI OW%e[<8Cˆ |dW7+vV>�o#J2AI-p\ CV4} @H XBq|$V~ۡB0A % Dg*d$@.TMy& _Ɯ#!4 4w  2ggmBe'4vL\ݾ SJ+J+墇녛D _;WaX5Dx]7.-S_qY5;I&w$TN!Un#\QòOz PLFMxUH^zAZ)wA{x .ԩAʙ5|,7Cp6@HJa5Ob)H].af_alQ%0C]if':6a�dw la|BV[ ޱ�n�$ <yο:7Uv;Bu{^LgJ+rZSk_urع_8sfwӐS 9Lј Q kmr&T[a\1ő{:jT<<$*U *g"u1*Wyn^L50}!א+7=R1!eRPL0A4 !T 2Dxp[y>D[l*+[iVZI0,\ueLJ+J+3cϬ?9|K3}+ut2J+rZ |/;Ϗ;cx{t9]J+J+J+ grsՌ݆0R[jv81aaکx<ۘO_-A;=z &ZwVLU-.Zۣ-F X4-L1..]f@W/ɉbr|̫;Bu]Mr.,s%.[♛Ӕʱ ~{t@EQ[]29UQPGY,8"wG E*]6V1?7LeĞ �ff047cugG!BR*{cb&!1g*z%XB[ (m tC4j]03#22 lOqۇ:߻<3Q&s@hVZiO;o]y|`Q$ Ȇ%;$<U1q9G s%QZ3)tFXZUITQx0r t rd<63AEFT K|C$*N%U2Hq"GKD}O֝V8?,B`#$3V8_fkV6;f&4%sN֞x*F>Y?+tvOQ9 92Hsxfyr)@plֵ]eJ+JN1jp<˅^1o.|WnvCT.J qDQ5mD^H^dp3w]W!RBx TV7VZdxHb6H.<Rwop:n1v8 I04#.R! n]P(ٺGGgC"ٜI|7PN܉RzsCnBSQޚ`ov#:=zQDd-a^ؽ*BHdgQ$]iNy6gGiht[iV>82ȕO]'.J!,`.NP*ZW/:"&2E�?z6si&Qih%蔘I V2t7Jf/@U08?B(SJ$ɑYD QU)=T�^bN͐A :.[ L01:dd_4eiC٢ E.@H?Ep8*$Fy4y(7l=#ЭJ+ʕ+gz2 1I(.s]\r.Kx:;/&fc?Fsws*G SA_˛ Ӏ#/Frnox(G7Pp|9E\Ml.fq3i(/YH_jjnC8Ec l)@Y.M_vXκulB"s&Ɔ".A r؉I!$RAev@G> usT$6*Ym6}NB4׸iXȇ\]ͮ&7)*Sұ{^5D7vӫ;;gv[;[Sl֨VZi#fBݣ7znt6؊ `ngQ1in59G_m i>u Gq,͎ [vT9pAr¿OAt]0A+ CJZ!W |T֨h78_yԴQB< p-2Vg$@β:CT7n�Q ZBiC| LoKRQ[&%xg$yt*g]G*֒jM*lj -VZiVZ!k!pw*OsWPup%EuAv"he2D͎gihVr.<u2&G̅F ! Rf`k5m|9#`6ޯRCniMNYrcR!"؞.98\BZeIy⢜NpՔm 8H >fxȪ^ Uuې#6Y<0ɕ['E}J  *2p,]tc]vsnG-v/~/D{(lzt%~͵5Cicٶnu}=gK GdwP z1A؉2DPTͥ8*v,ZxU8yBmxlMۅ:Fcғd߄Don)*7\KbC+5Ш,/vv¶lkgmfԢi1rJCH0)=wDdh,ԧ3rzJ++333o9sG,YԐCx-J+J+|`d@y{xp b]ٝwtdqr}4d;r]l(}Imf0r~[RFe�In÷qEma  iVZiVZʠ?X/_|ލm9wlVZi'MtŅ~n]^}eu.{2uWˤԯZ6M{ 3nIK}**h f{c:a˿ɍrf! nI̫whdM 9 a!>έĒکQ }37W zRaP:RivJw oTSU~TnUz|ʢ{|j~BF֗@t!GFG"#^hvnC|sH"$55�-3~'@ՊH,N[kΑ驪"!>\Suy!z^ivMފcq8$vnAĪ.!"=l18;jpaKJFG z(H( !`5VĩL_MɊ E%qSu sp$~*CI)#xbAF&Ut8DHbcI 1>'0}i%#>M  r4*X}ޝf)Cp1Q`󔎈gWB"4$o4}Nfjh ,Xs5}=r76`:QIF#hӗe RCFmnO%Rl)=ܴE +q~LIepx ByHqPl7Od6lTA$4 d}cqᢽ1#; ֛(cs9@&>[$TxV>D0N( U2H'S&@ǵ.~ί,3Bq>>IJ88 ԰&ذO=]rx=ZkY\ ^6Iy j^*\"@^kPnj?E.U!`f*(#nR)�rs$tf'\7IV9͚ !|8ʢ4@0aTxrDކ^$B꯿$@RtC%NeuyaTg 7c0g(qIfChy(0AbI48 OA*mlP!/; v@9&o碆DFC[*DqKFqeAeRe* Qݥ!YG tvު6 !fU!`mFIB"kWofE?A"j~7 !&st_h6 � E LP F1(00M] EYMq ۯ�h;L4?9fp7LUM_\JRQ( r ,(E8_Ar!Af s 9Gj("RQ0 \>H=+goj:Sx 犀F60NN4rs, f73Q֏O=$‰A=wC89SE!eh0-͆h3Psc(c_¢%zo+3;$2)B| 8?9 `q07jzn "F w}cZkP ө3JFM|eq85_:Yd*']-p Z ZcRbB/dU'H[2C"S@u|n#;Otډ֝\/GcBz]+itEa h'}ڴF`C Ĩ]]P;Rc*T"FHB 7TMxl7c]@\c\B r`-4먀7e!*BВS99hqvA��r!C[4!pYQ&�6~"j[T>jv(d !>vو  <;~c@pZ\+3L_Gc#oLW!<D~vaa �x{8 BHs$fB^)5}<$rcfUΎ!$@8IGaw xc�! AC#Dx RBB?DgOC>ru P¡ M:ul3:rT`A$SD*dBB9ɾw MΣ86\B$ |"y�*XO>C8sb2!\) 榏 q>q~!TE<H D/d¾(We0 -z&c@UӨ&c~4,NF&=@3"49r甶=-+EP`wїGC:Gwf`4ߙ,yε ؆$u*3c?(HAΙ`ߥ,  2Ώ`p8{sq>2ߥscK�Ne3)L=b R *O,+q~әED&B2> X !8_>7T!]`Y3$ ! FACm!ML07s Ta냙s$>1&w  Bx!$Oew]h6AbY͔lE?. v#�v]F ωd "D" ⬐e#I0pl3y; ~7묱ϔzlT`8hk�6ZӦ/c_@fR<JC4Q6 !MdD) DGO@" DeE4t-%R'1b["ĆDHcD$&%?%qgRp,K@Hc6 \ r g Q$D橯]Wϯ,+;Q@F"N$"Z ڥKh!OnTk[e*MłFC;.uʬfz{h?Q hCF*T*$/ G; fLN *UTUkʳoRA)lf=^,6ePAimiTDD< ue؄56IYR_l=6zl.#eֱ /U>zo<ĒC78TP,AzU�'&lлI(}?m2LLl!>H! `Ve2gп7 !#J[h9G[QnpFFJlA TdM]n{6}cYm!zb |BʤУD)Ӹ2P)H@Q7ΑrI${c&8txU9d)lqB͆RuI#̬@2y{zg~X@hh P6NLC}] %АL;lCGe2|\%i0<l/rبDi-hY7tbVZiVZiVZiVZiVZiVZiVZiV>l]Wd(fkUb72pb}MK鈈meUis%x7'UHxEQ<vF'X">Rw3pfwch{HeŻ0U6Ȉ[aCRbX! rqߍhF%㷀1V`XHPF<ό w@&9S_>s |88\G\�rw>:qoԶux5A ?)_'}3lS ]8` Dۼ"B`hp|S~6�ɵ!{*0lC!r!Gd$W[F@qq2}ocpB`(H?~ b486p3; g6;XSٱ r~uSY_僋$>JAb)g7<ž7!!D6W큣 #`*r y`ơ‹dD2pB?݄x8xy8D<`6,TֶR6'-B߹#rwa8M>%G �t<٬qVwPa"'J1`S||[ `Ȟ~gUl8~7#Bt#yDBTTfw*[_p$R N0]3Gf0Q͟'K7}u&h1A91JxB166T&Gv9!2LPu&Vw) &v8g {R9zBsw< R9(88?2}o N>K\(E9J|( 1|b4C¡ SHNb!Dqq:aL1;rPx?st L $YɇO9aL)0-lqT/6WdA"P?>&zh�1\g>PAn�ĭ}EVi&q48p7HO3[ji( qv ੅ ˆ232`̔iQ~C !I&hX $*>Hdx'G@a8�(MB UAr!cCꯉ9C8?qDo$Y8 Ύ8?8Go ,>xPnCU2k  %B!DQJzR<̕yk +}a,>ˊzŋ,ʄ�ݣ<&hŨъu4[QA?Z$.P9>:l~F9pU&v-nvܽ U`i2T-T.P!pRрIjKm iuT0$)}P:*4<#4"ٜ5w{L8e%*pEm.k#D>:iM> ;;?v + D/>7]"$)׽*BHdgQ$=B`Z3"Vc jS!p4͟('0$Q1`QvU%ӫ3C!`v7V?HK8;Z߀8^"`ڌ,3b-b.OPi>M!,U>q7`Ն(J/"@*a7s 9Ci&|.6}yGy 3wid0 t!v |Rz6� ǽ9F; :WsbEXLg!ߤs,ef $ir*) Q!U3!aӨH(Tw5%:ݠ1)9J* c,BT&\BoӷɌPQ\=;5!5;bݥA!"`9fxLr@y+B849/K:~BTb4o;kp&*.1\W#gjqn/[M?GS'jQ*T3a؈`R?Ys{ -f F,k h|RLo-٣GDaՈqՈ'\l)-q=ga1s3`.\:toOXXBd%Bȯ�v6 6"+jPgn:`/Ky6p>A + RZD!Brڦ�r2&5bGsɠopo6L.XKa fn/' #gGHvgClm�)v jR/Bil�Bҫ@}Fp;PD/0b#2H'<[ٌoo=càcT539XZ _!J,1eY<E=}1n!pBbb, hB ""^CGS&W 0_Q:;9P _,F6KarnK`=0 xKՃv`A2&$ Y֬32}wv\O !9;�پekW8H|D�lR!QB v�A&&M<rFvw`LJKsO>&!HN((#$SDLJ0Epypp$ v.@IDepFC�ƼcRFcR3Fh2shLӨDΑ9RӇ0)nCi cW1W=- <*wy&1Z9<tN(ND(!`c#'8EI0n:�{mz!c2O#!uљ |v=vigвlLveTwQo#@G:|B "虠<`s $sl2 _S/WyZnF؄&ps 4)i9XJsvjJ3 ]4eS [8 Ƙj H,ӟ]@hXkKqx6И)p|l $�؊slB, `1&%!K @/fIixkBHCHV(!JL'8`±yG$%.1d6!wvQou!<HQ J@hB -W,zwv<t(EǜM{ʠ%n ?xXx-M.]<+?(CÊTf,)S~j< Xâ7Lp6 )5<TPRXk :=f!ʪ9 D2l|r i'cnϑ҆QNa>UaC:*bS- b>lo Ɂ6�TeVIQb4B7 L?KW6ݱxLrߍ8ǂ(NSRTF/7֥�TNt$KlS0K|6e,w*Hrq÷.OB9=6Bp(-. 8yPޟL)vwL0l�Poc*W6;!sk8yBmxlMC9GEkIlYeYD+( س*/KŔ&8GѽWΑ6AO!$\IΑ([m(r&/�653;fT"E+;)P9l!Cf6ӁPYpk<BŇ Kbc ۏ=LWYus1s@Hq."ctnn8luoQ*ɶ"˨ l(,KKNA[iVZiV>b7VZiV> VZiVZVav[iHو.|<O}CxE]σ;U.lhw/K/?}S~s'36ϰm+T}"OCN跌KVvFnmv3RInՄ8!7Z L!GlmGFx?3 !a . O& oE+7.ÈL Ǚre]','a]YR쟹s n`( ApCU�GH l!YeϏG4|_;?jjgips'<~_#l['NؿKES7|DԨym-C« Ύ,"F m4�- ?׍fh!=ɻ9@$A# @C2֔7lg`@y87!7pփҞE 2ʢ#\Sr$N gĔ͝ ; b-O],ģ83 `G$ߺLJC͝0X"W@G&R8_ Å@!JO "DeZdOJ8D2xoUTqsv x*z bLx|8F~+p|21 -4lL}~0qZ6s Z*i\B#̵@O6k3 ~L}r'LB r.LLx@!"I5qmwFbC3{`督Bο+hЀIilP!XLG ! k_( }}[ <#LeLs<ϛ>cGB|w5>& "^Hg/QOk}}#dLw!ꋢ!"H֜#x<,Ow23O\۰O9d H!`7u62s *hFŰOG`C<x8(ā1A�Cfg�mh]%>E= `z't [&w@e3Hiro@ea<BFVs1 2A,1�Al-YlV"scMa 3}/ "Bbgs,H&b|4pW !$rs[6M0A r RX7?3UeK<QuWQ#`Z8 1rI@ ,4Γ/r"ηZ 3Sq!,!7L8puLT[@f-!2sӺ[,y42RCT[æ3#b (xg,&c׫gep3 ms{E zp ,Jm!y\ Di?qe &n2 , rMD1[lobU(Ӑ*2fmeC 0 I!7 ̊AM $E:]!OTflzs0SRЏ1} HQ Y案!$A2(B."lSP>5*$¡:-v@99"Pp.jHl4䍽%0XrAA8dWQ!U' Iң,KC!@B5O8;voUBSV_c>HAHd7X9$e^ٛAHQ\*ܞ!d ͆,@s~-g�O49Gelr̪ ^%Yb縱 7p~+i~0Msn(Ο>VRQ( r ,(E8_Ar!Af s 9Gj("RQ0$ş86$˞3X+j8qho^ D/7'Nov|3eCA"(Nsww8ϧ8B8h`X'b rЂ >E C+BXoIŽA$2)B| 8?9 `q07jzn "F w EXe $9gf:-k�("\Eꚤ*Pc\%_TgqN|n/L[/|HdjtZC'LD c _X*asBUGBw?cuJW "7ؽ!U0:�Z�Fx(VsB+VsxuX 3Lk#0]|lh|=s{ !lQBŸ`=JsVDEQ�0sjB5| <5;~c@X0r HW"}) v iS kvD]�=B8vх[>iq]8x^}E8;e8IX)Ԡg쎜 19h˛X"<G! !u福9; gᐿ! g'l":!"֟Ć, |B5Y<T !gsH$S: Ύ8aɨaOĢ8@{jD3';X(LAr@<4 Έ{sG&6Y@7}Q*E<H5 ,Ώd3H5P1I ĪiTBb$@CM*:\"Dsi4ƃ9rǙS= e"(0}9D&=8m$b  t2ΗƆ\MҨ(?@9%/A9GnC�D K`p8Ј 8dtgI<X`c OY' q>87PaI-!`q> ZDd!4Lbb%|\MI !Dc6&&tQp�"9Gbc{PoK]m$x2O({d D!AIZwttݠ v ; ! }Z0,\pr>*GB@auxQ b]�e &dg˝` au" u+f@9 ^`_ &+}OiCmwqD[wq5E%)^%rwqh#S`"Tҡ]7iFdK !d.y-Y!"l!',=I֖AIsp$KSk|A*KnϷy2w%$9$#6/4s%Q[ :gp@S@8nK9@S_b2mvO;ߦP"LX~'yU&y Z)HS f۠@[UO&M**Sj#I6w|av(hJ1)Ol>F~ lX"Dn\OszF°E�0Ti4bW:`憍b|$"s7XA車RTشrdN�!ņ;^'bYAIj)PIx:9"|w\2�nU#!JOBH] C_!.9f25臾"~/'._ B}> }v;| }rV}!7z!9Ϻb!(r_ m!D !$X;?eߟI<xD-~uTX ^ |&͚] a3LZ~Wyo}_3@Nؠ|] _6W NJ. !lXFqO_P7U> #~h+ѣ`y("㏭=s{OdJ\" G?E_G ~EP2NՔ�-aA9o61q6Jt׍>;U-"n^er|zkG*O d$EF!|Tt]#n x\h^NƚQq`#VhS!0Wtj@<Gl.4hO&;� KG8?WG1*idc4ѹJGOjMCAwFsgn榬'N]? :t\]:7wjdHGQrdD+GPWZe&isREB~p:<�Uo" X[qY ʰxW9M"Լ" }aC3^qFqaC9EͳMNjWB_N*rw x }i<J i!cзx AޚVj"Ŀ.*|2_5 ^^'Ç1j7<?V-t qoԾk,_Pdwso2Gl`Sg\y<8_iABK&IND<B^ic4WzJSE.6(_dg<B#hnuҜQr"|Z /}vPfE)p7-u[xldΟwрt;S^b{]^dqNB] "Eٿu?zp3kOut|V7C6G<H�\7ҷɿǭ_{ë)htZr4Nl?$_{TFDm0x+3Ş`s8dƋ}e�F,1!["2d!U_ȅ؂؎(|GTyzw͚Apg8}^[sk@(\* hۈ="Ov~/({Cļ$JGzSL0U7ps3l޺:vzv1f4uP!a}"Hy>\L$D1a΢)eԎƯ?,z 8LeTr2)㞇hqr鿲é1G;}CY #DrwvV)3E @u9Uqc PCo-]sq ><lN74v^UwY׬ç#G}IL瞖,\k:U^R|%Tƒ%nnvTYerw̞en+)i^E0`F 9 ygh|FQS(1qpvF[@w$ݤ {z^B+zWeΒx? Cj/-'oJ<`'v!xxw&Q[<2ӆnDimU乿 dv'o!#w]-\ʞس?Bhқ>ŠOJyI҃Fpܱ2S\ٰD irM]|%rxpxȼp$;wHS&mlBHBr BHoOs۵/9*2l@E) $i%L8.ǹ*.VbH[*@_Z"e{fF$kۜ_Wig!Ar,EH!B2 BcDт|&Ǧ )i'G8|泮Y{T^.>$ٱ Ivd3dy=`l\;^%v? Y !g8m+# -, eTMji?X_'+ߜg/NcH#e�'s_$GUYɱOJ|\ }{^~R#9e` /ɱAirJ1W :/8ޤJyr }O-N_+(|W- =,�HSAP\<=!{q3c =H0u-gT!٥T@%{BMJ\>:dql]tmXGTgseP_|'O`v�A90" %by~1v ?;4*A_^Tɚ g1Ҫ7-yZh6;kK6M>6y];Ny`anyv⟪xY !@͝L5Gl}$ŧ ~N/m{kQ\ toanZAjz5 Ć D`@*SIۈu1?tUfs'ݿ[||r1D:!AT="nz0xN v>8 @R_'u!nN9D! `) D ؊CV` !+'Y>aDo/ D2�6�!~d qDǁB =}drʉ{𞄐�jFal zQ~ Iib8)p D!dn�@iЊ'L@ B$ $Z)CoM #nWx*&<9>t(@!:4 9lKHvmIH4.uSXaH�#+� d@BXv&;dzfFHHv�؊"r{,$R<.Y �q q "l0Kۇ �ADE:)]r|+a#dd{eI˨(#ɌHs }ZYxWM\!BIvչB#J.G+)K\lK˨>Ar%G uC'CPb|CdW C_O1M\G q_ ./+%͔Źbvy@*A}:B]tda$1y B49zdN9`aW >B%aw?r&͓c&%Wr\ʫ !!9j%8'f !H2c=&;+\ .^*�SP!ؾ@R9){Rj%I2nR-Uݤ�SMv⛎~kB?Q2Tw2 *A׃WR{1G).EJб]. }2Xؠ#mBJ0"dS p8U\=ZMB| 擣 HB%- nR <zJ%C'!|&U/.q@bmbS2#B$;$ z�5 XLdEdW_oJ8\\8k�w(Ni|~*׻~k(.V/ T&EM! כJx+,X0m+|2yF|yWeu&p4usc;cB pN=jQ[EE({Y{˕ڡ 7=-čmP:v+�mle\!6Rw PFrԫrek>S<`q)R]*U ,ra$->rӔ:}Ce�G^$< BE]!$C[|\)rW z|ʟ9q'~/ �شU{O׵g`^8=E{TDc๯wi}Cz8Bȏ%Dý<6,^JMDmbӕ$G~*9' xb3}<9TɎ(�$?rr<i,Ł7Tފ"Ȃ[&ButW5mg#>4)6nX֎3zUN\CD(d.[o ̻iJ!/KT?`òeh6 $ureꃿ/H~',D5^j̟2byEWi~|ZdØ?,kYK5W_ i;ę{_o5?S^* }U!f`yTݛB?zM\zTIO<I'd2@0(5riF.!5ku& D!=j24d]f|#iV/O S˰\{Ɍ) [LD˩c_}qAj8Fq $я'lP#rķwdp z3"p6s{'@:9GAW@8thE,d>$;(=6x\&s? Wx/sS/ U8y~r�xN<߅2@U+k7˩"J(1^.@H[e;5;Di0xdwDU* ]5J$/2f{} ܭ>rk-]D~>?MxBBR UQIJ)? w~EQ }oTZSϽw7BWKf=BBrīM>ajD#Yr pqnTƛl,^ z|sSO[$N8 2]r 89 FW)~r9Љoj]06heg�nR8iz#7ɮ@>u)e/wqHš1~MJ7džDz-D6<t *GaɁuq `AW Hy kwQ pMv <x_Xvp?CTc9xh0DK}jWDH0D'oe;>nij-|4xfnSIs*{MZ3~z"ҹoob{+EǮ/~�eA$ ݆d8VcӘfC.kh 0I v@w=Y>av䫟Ͽ >?2ڝ:qP=/~>M{>"gL: ͛vvg 3hv_O4CP1N[d\ny=2!'nf*7yD~51S;{FG@>}vɻ2l[3B~& [_q%Hg IP3̷1O&Z*ogC5L@_%{]bwarUܯ /&}JI3œsTO3&:f&ihl&d<$Z.xϱ[f$nʞ !W5v [HnEOs}|=es+yiC;*:kB/ _<L!eo\]O*]Oݞ~ ]AޞefMKz0ޑwl6뿻W);*믒��#IDATϿ u ^ v8(=e;x.\Z 1=_K[إ|'w9dv3jVO�_B;vcItb3k@UH<>*4@\ W7mM+Nq榚egLH { n !S w@z7Ws{:U*H]? } H(Y,[BM[ ]#D<H.Ż)nӡ2U)PCC4myɵhQJz\.^ll eK]zyY.U .XW3W!OH^bɎj e=M' qdv%Hz x7e쯕6H-"26wmCJaJ0qWFQrY榯<yJi~ll`"!n{$(v~G%8 stw7,NUC|EGRVl#*QHŠ#eTtl%G98J%>P&0x${Kd׺d7;__XS5t5BV*2evɅؤN0rUG']~. nCkVKlhEС3/oE%K3kZLqr!sL?b0Eȁgy~ɷx~/ 7^GȀ8 /кNbX&bs'j4|8y#hy탺ÜH{T9<&&Bq;M].^Q/'y^'|(b~Z*h<2TK}�+ dB!2R,.dy=BTXPS`{ׇ$<%H1 bc'`Rϒ/l()Y4pu66q&Mj@n;zhF'V?i`EH@:q-0B\bǦ"q�2sD @>bc Os5 e !3 %8Q�ء@Cf`tmM--n BHA®Zؠdl D qNC|@!.^=Hd(wL;#IDI"B0?F?ƉxSX }9DP 蒝0mM萩 @QT,19H`te/#BBI 65SY|dTAx:bq@|LYd-B Jx# ϧPf'MpF(a\@ ը<'\!I"$Q'\H�RMFQ ̷չ !.9*B?#>_ .5�ՆA%:09fOAO((9(7092ϟ:B\kc18eTa5dragWbU<X|lܱ8-o+GaJwA%b%U<A:z`eʏ5$DD<2a/`m~ X UsS%ܹQd*T\ݤU59*|%BHB!da{JE8P#\!p B ذ=xQ b]�e &b3daTN0K0``e 4: BK A(B]>hK#H>|ǜK$A$8!TLPIvݤ-2ZB}H4Y!"l!Ч>KGL�$H d3ЃT Tݤ58#Ov= dB&ex`fnc8dHR<_, U ;/Qڹ T<XvLη)Tc!$zh}IB쨧Ʋ o/T6:P9j<FS U/8l\ I6w|av(hJ1)Ol>F~ lX"Dn\OszF°E�0Ti4bW:`憍b|$"s7XA車RTشrdN�!ņ;^'bYAIʖ~rƂ$<}ri>ɻQ.Qu�*y}m%dO.{3KWC_ Mt/>؆>~>A ӄ>9\>{]g]1k9/z6"]в$Gu"?H:*ox~{^Uy|fMͮT|ⰙUot&-׫<O7]GoC'lP.Ӆ/TpWe%a<6-{H ldqtm/vxCc_[C؈t &"Z۫܆W H>oӹ»B0|0_q2˫=[*1}Wдis&:kc_fd"!B|n!DB+xNo_ * JԱ@y47͠JITp_]U_ r}/:+k.Bv(9 M_Z#n  !"ԔL8ssPFk�!k㺁 +6)/e ]shpҺGMv 2MpWm'8 `i2BF@AE\%WE*A[t !+n(ݴ-g;^~G%nj@CY-t\_n.Yrd:$LynldHmx>'Al0Bd7YL <%;?_� �6!$>94ܦ!�N=bTWSYeT؛�Uo!�F9BnTBߗG1+d>Af:9M"t8Wl& C];!Yrue}证ܖH"SB$&G@89 "<oB6/>mbg/BI"1B/qq`:Y Ze}Bl:Gz $Ǽ a!'M [HBt[*ColEeYz.$$9)fq,F&Q&qegOQ?Ҭ֖Bie{.diԟb5Κ~L,OtRVPOl(m|V@LUA' d!94:;0`0y~%>lϟ> 3lz@x4쪜jW-:?^/.s*sh!bZG-^.'@ΟwEH+c􎠲Iֳi,?SaT^=>;Niݝl!<9kg4˯? , o{;)r RJl9ihBkoa%gu#|q@l܊ғ7lOm /hMӊmpC2S9AeSC>O>CF[dN}2`Rtpy3=L7KM~CsMfUJ:DHpOvj#oWP8d~-Yk `ϒDHoʁA#i% }&,nGz=(&n,d$9|ÄT6UUc Tn1Cx>IV3 S7.Q QUhLzM#DiPUr2]>0~0>2Y'Jkܳ Ӧo!^=$tRh3IefC" XAPf+2 ~Xyݠ<xz<=i.2|}CK<]y=A`H<{=|:x"2q'`X'>nE+]X2*Ã`[z<Ɠ0 }$*;SvY>b%]DU6r7p#bHp-AYn8XԜWj=b<ͱcO*{.~<}]GSwqthe>vg@/_Rhɛ;<Pf9|=p/N٣lY%DC̢<?_vZO�)PDʀ}1[kRNc4Y^_4"c_`Wkƍw2 }]Z&CZQ<ЂIvf2>P!8azf{[Tn,ʱg:KPVyH%Ed?r#Hz ?K`s1؊um\fM9<4fk ]6[Q�-)vT`]D&*@kvS!a:zЇݳ"EdlՎ;4�M)0z �kxO-vFBl黖Fcٷ»<첢p[KekGgqyVB &YK,i7ϒ뗫rRO`*^;p? NvB1UgBBYltll~l`v)o"-N.?G ?�0h B'V(FO�~DV?q`dRzy?B_r JN{Of4DCKO I>Ôs=BukLd]Oc3S׭m !K }k(>D5@l}n_DEEh<[Y5ҥQ :/.H+m|\:ChH?X Z m&DŽo`YY Z\arI�O@H<bӿS .HRhR/vlEȭcwrSB;_bVkC#FИ\FK#$ܼ8~k:{;xf!4� dh=Suqе?.hn?!J.QPHMxxdFT>%<nCH\qgdDQx>!uϗkBz|ϰ :@mw8 BoY7w斵M 5lC3XvD+KAz]IN}oNBI`ݺf9ssJk$*RSUcE`::P3CY|ƌk xI�3MP2i)%#Dc&ZA W0^rهI 빀^'J +LDeZabtaզAT'e?R z0T(\ys' wa_0 =*x!w@B[.hsn|/aMTP` !+hs'M~y  ! @ �zzGph!G:pmj!ć>)l(m(%]haD'l!d0B 'B.=-B6¨\T; ~-HDV8!$- DD+)DqZfBUqC tC2,&'o}?%WS` o_Šn*�3lIaت#+� d@bW΁DœX ! �r<_X#{i'?�$_1`+B:$o - @P+}< TIeYC%tH}b$.F(F$K(|gB7c$ϓUR}n H2ܱt()w?2Xr\?c%eɑ?$ǡQj6br(J. q@fi>dPvRIq } DbUWDLTp,w8ߩ  $ǰaHJpy dW~ ]]aEuqJP_9N0q*8MRbgT. {$ٶG{+Xy WF omO|Wt1t:R 3ʫ !!9j%8'G�IflRd}S+AlW&Yao_ F5}T>FKvi7i'[6s.eU7Cm훗Q0@%_Ļj;;?݋)>@ELQtq(B_:*Acq.]# c0`'1yexϧJ0"dS p8U>`1{JN0FT !pu#' SƆs7}qvjk{) َ!LBJ=B 8&&;ϓI8\\8k�w(Ni|VIfb㽜6nQ^_xkL�-B%˯7WX aV;%elLhgP[w P7rOZe(iqVQzr9b^rev(MO q#zy* .�*duۦ8impHMݠ*\ڰϡ|�k/'}'96X\ʁ)f $Pq ʅsL$S]OSz< $;X "K_Br:E͕"wŠɼ@ JPĝ ,N`ӊW=_מ\{8H}AT? }�zWy:o'XrLT>cuJMDmbӕ$G~*9' x<9QJvTw_DoU,'Hk\!O/V!WG5os?Iq vL }r*&B9wDH&sٚ}#]dMSjyYZaԷ-GaX <v?z-8u=Ҡ1 D&"Oq 9wM0/aYZZOOA|b)ˁKlzL6&ʀ !L]ĉ|Ņ"E(u W�G"ɏ7;so^;ķFl, zALw nϒlW_g@rȠ329bVU�"Ā Sݟ"~TCL{]D)ӷS ۉ6yPAglIT nuKv2!*+�FPY7J^_@$!Dpn/.dw)8u]pG|{Ghb C& "Ѐ:|[cSqI&s{+%s{k:"*:*b;6?xҡjn/8q`h7w�ŭd[C%Ć"D<co]<%;6> 3W!nyzTTjF\n)p7!woFH\<TdX"i"9B*g[ }m%yJP: Pz\3ů{lx ܍r,k$3-S;N6`h=V !'i'ttHO6#}3 }\hW<NѾSh!F}J0OvO<bâ*3,q$9K!x 3�/*9}sQ!7^ۣ&0)*A-`=H{`;ŏ^n4$xO z~X�Oك+UP X6S~Bg]B'GsU]얯L(*O@Dd}Dw >aLFՉiN,6^.YTK04�&р -1PJS2:1zL<x/BKAr ό 0"_L$S!qNv Uu? `[$D]�|n=mbc熍fZh޲g Ŏl yl>#~¦f@)m3KLTQ\NBfWY%l&\ 5(Ď]{rʇzq[UpS +t!B &%9HZBFW4Ni9 UǍ&! ;~PY&?BM3L"$]bP@B*bPCmӡ"$b!D_)p~x10T`qI+Y\:/˥v*^vʾ!Iu�<~٩6PCH?(AH$3W !$De\OREV e׶b!0xE%8p+(9,sW`<%4?nUk\{$(v~G%8 stw7,NUC yWeAr+}R 6| $bБO*AP\ xU XX:-98'ٵ.Mη*jS5t5BV*2evɅؤN0rUG']~}GFˍqbR| :tf=C6%*,.Y&Ŷ&B c9(B<?CEKOi6Ͽ?jfnElQ<}>~}>~}>~}>~G3ٳ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/class.png����������������������������������0000664�0000000�0000000�00000064450�14332737457�0025201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������hIDATxy\Uu  (@`$Kɍ-sɔFm&,3R[\2,5rRG\ L4  ?@sνsWp|MAAA"""""fDDDDDJCX""""bTEP*""""AX""""bTEP*""""AX""""bTEȍM}e1Z-xmc -\m׿i~K_UB W FEXRҌN!"""bUDDDD, W*\EDDD"pUDDDD, W*\EDDD"T8ד|U{Iu13tv I,}&19ȹwlJcD&ն !!= reIqyDDDD0kNF2t ct$t0y'Z{6ka$9{&1ې-̚K6䈈5 *\Yp+-vᯩA^N=f zG��9|1r�2Y ܽ95""""R,c M$&av\Ķ/JB'w6 I/?+oBg'fg3/+]\h&@v- CΌ5;=#b_ںF$Sʖ ZKôx"g5K`˕Y2H{qJDDDD,rTV;EF&zzkJdW\f"%M/Ŭ C WGgW\H'Tuv1gF$3~Gd:Hzа#Ʒ!#z/`U\FKwm1愋'CDDDDJŘ+L/;Haґ>htlG�"&*ԍV-޸'qRC4jaDDDD̘A]<1 KsVmܖ )IrӈǶO)<]!53::p+7nB?^\0Vncѿ1BDDDDJŰw'r#hѰp}~웷^+ӷ1";i[̨ulҧ'ΐb'=E%n94?uUDDDĬT}}aHIe?>0:ٱQDDDDQ*""""AXo7'VNZct[vjK1G*\l6QÌQ)vF(j7롶sSє,zi~9~;CDDD,UxZPP@A~i &p^uG}?i.*""""Ҩ""""bTE0p͉[ˠ6[Y{Lbp%S&)-⚲3"$ """"bÞ⩥_>6U&<C$J ԕ͋bb݈lc?lbؼb5x maT� gِw>)׍k1mg]툟3vExqK~<S|N%9YTW/3IwnǠx\l>\;.~E&ն !!= r9]^ݐ̯2<k Ӓ._YqYˠ=S%"Ȑ5hX@MO1HkMgz/x49IN ̲i)f+&q L&OxS2fͺb͔Hk1uE0H'f4&fy_Kj܌РvfkG &r\s('a# !,b ~�IٶT_<+r&v-dP"g15WgD9P,7kLt09#{rg.Ѿ,+emysw:?rRc1c5.zfǵ}oQF>9V>v0?1  &ȵ}8xҾs=|v= ;�WZnFFr7pwΙhFYk̚[iٷCBA\?0ԃ,oƠGqp#W: .䀏d#%e.̵ݤ̳-SŹ݋Bٻ7="lGw䘲 98 r*UIGjEoio6%^)Mݩ !z[Т} ٌ~XLᲫ&$ہSlۭ�[Ydb\ ֳL,T�찷"X -\oeqk>3Ǫβ8+@}JٲQki07>{bCWO/a:-4Ir;WؿoLUH̺\c̐.c<e k<WCϚy2׶<? mL[ӊΐ˪=@[Ϙ'*p=.M M%/pMDE' c߬%&rdWFv{wsCΛ\ÿN ^y-㒦=D"hLRqLА!4^Et$bd?E Z<hY{p"b ,ZG۞-` (_oՄ=Fm=wcTPIgռlssDuUr d�ҭ51m+7 hܑiXzDgThۗ KwR78@y }֌gY}cmבud"3B& bM +\]sי8mtц5fƍqLt74WH@1rѸ fvg0JQX$ bn }43�ŭ%OHs ݽqIO)\'QnŖ8\@XNAtUY@[$bp4 !b],H!Oz Bb\h"qj"e.xxCJ)4-gJ#&6@WHͼkWƯ޸ ~ z}2@vncѿ'd3g.�rI߹h{i㭢l[Keӓ؜ڊ:̵- e'bƬ|ODĺXLW9rQё Zt zh؎A }o2zHL_LjL,m9HC3ֱ?mBH:CNF"8bE]V| }`sRV{DG^<́x{a|ڒjGqBOem m{9?9CargSPPPPQ_b~sO<nqZu %͖(fO oFOQÌR)vDQnz-EU 'n-^2̙IJLvq@?HE>);?#b2IKDDDDa}\xj8MaHᚾm?=Ol\�$, B]ټ(nDjCc|L_޵c΢Ml1e_ҏnvϲN:E]zR7@Lr{7?]wWΫ EDDDR c yX)&2IcʹXżO\1'917( Sw19~lY˜/]fD"g,'gY<{SkM'"zo_6dJvl \rcU9Wv%f5V ߢԍ6m}x@x5I9pz7/z/Y}4h.Dvr-|= y镏>hwÿ #RaF#tntJʧʅz-EܘUz9{ʼ[}}qs !lqS\G{'))ՆFQӴa*75PY-\oJvD`{/1pw@ظnlkqn|ePDDDDn NptrؽӖ~#'jLGg+77{VȚmC*U7jC);)\=$ ^l.n@W;=Mp}Y;H4ξ#76nSr8]δeZtg{/3hV<  &Go""""ʰAÈ ɛg^g>Sznݪ'="&4Lkt{�"+vk331SS!#X< Fea1W\K'56/|z:MYq DDDD\YY8331ޔC:@X[E%"""b鬬pu壽ihoI#"rVU@DD]ã ?} yFbXW&zkeRYؖǗxKXg =G'HbˤvU-lxD7wVϢwD'y q3:H"""x8ħ~c:˘gHJ=jt,*Muxxq!{ ҃g#xѱD$u+P+((�ƦҏJgEPY?f`hĿ@@"UM%*o{q")iFGDżu%H̉~E;"Ѯi{tTu@䚹|jㆾڵ7WNv<kA3:ի+GSN FEqgt*|y^ |߉FGR8{זOg fEOg\#Ui+TjiÁټo#o/\ h"V ׂ >NPv[n .�6Dy[um%7y0z3v<:4v3p~dtJչe0[CZ57>?{=MTxzFEU@*ߋ ')(Pد.˔EuE4¯7�G?ţ~J=1>{ c^v#xs+?<wkt4Q۸>ٲ/M._[7no6啧2aU9Dz.}!CihԒ㗲0|)_YO3X"cX*Q$IJL)8bFzs)oxrygkmn1+z1-7׽<sQw61Y=y~WKĢ]A/m$x"l/YwHA\/9y\.itTLgQ%CDoDVI+prfN2~93?߁wct,dvky;%u-²vbW1Wk-O1|rwնZuy̐[7}גGF(fWug`|ck~qi蕵G>R1[_kIl\FѱWk--θatloSF-kޱܶi=*sMg ~ď~Ôs}xmTrԕMFyݔ=L*.hߟi}}޶'Y6.~^s? Y[2o�^E`^5 vf&ӫ!/߉ 9o ^7G2:v˿[B̏{vO.ʇ8Aѱҡ,߼(6ۘDě+`&8:8O,RaZGstנa,cI̥QD<b,˜�" #~7ܿGM#KWb"?q Yё}-RJ\n'xuj 2>|wnS!~wVϢӍpD̊!]\=5%+.RK%D|/q̷@wU~ ~72 䘲 dqbVOXFZuw6ᩇFU.%hEw&\53:UܑEծW y lq$-N͛{F1qmؑiې=*ts2g+aC.]!1eAr ^[~rɭIЕ-p}Wk)W?+w5%=u_QƭJi|sΝ?KOŪ=HoL9N9mt,v?3�ŭ%OHs1 f9o+>&;&N$vܒ y+ˀTyo2:J#yDgBM*J] k}eGUG@g~A7d`7kIrۤe]% ;3l7le@]]EbqURCOs8(ͼ)^{fE,!W\s6ymB$V3-) "}&19țㇲjJ#նm1*t\ಁOws܍8x1K |k-y9"`!J|c K4@h(\*VT1S {)nO y8F^G?Ѥj0p fb #byMWIaqI=iL$Ҿh߅j6՘:5jsw>Y"PARO2;z&wfFu8Cg7e|{}u&RZO?T_ƒR4%'n+˒,酾/Rv=u07R3E }s k1O$Քvc9ѱD*65&;u(A0Ղ^͌!e7$xw[ctG14ŏMF)wV_CV*h$!zc϶-^=LV1OF3ukO(, ϺwlDc&/~To_,J'HgI.qu'*ƨC7R,a=F8۝3Nt2;,J""R6K7-{#7 a9䥧qtpהrёDnI*q;Nz-!"U\~~>c"FGr26$!Ld tc)xxѱDʬB w" r"= M[Pgt �OLblp,DyW^(Z Ox.sl(bflҠ1ng-L?ANOeūY&dlp~2'HFG*_)G"f&BO3:ڭLz95lj dЙK亪\yFlllg+n}""Vbw n� ",7UyuѱDU ׏6Dq><?4:YpE7"i6|Zz<˳E;#=wc\v1^#oC@GNl.-i75S?~H"TSîƥget"cvFǐ2Rݚ;̶C[SFGQ[I8t3$R רǔcbڧ-3: Ƚkt )#ۭyk fct @miƆ_ O݂I*SΛ!nl�wF1ĖH;JP"f] fŧ/~⍋xdѱ 2?mL?snot<C&>1b!h//XF;獎%UH)\?\Οfz6qDD*]s"&}LDPkp}[_#IQ% ԌT.v PӾ&v~itLJ5m"jܼ' 'v{Ǵfۡ$VJ} %<w>2:limt )#[٭ W \Ami ^aĬd=ct$RUprrJ^Ɔ6'Y yOK2:ڭ殞7>rnxe=Ag糌$V ׄIϺ?k"R%|k-ukn&FG++7.L&#;g]Y}xBLY7\ܟgYW\a=5:XNeu[.Ͻ/\o^Zmуy""fߑd5nT /7oMZpp}1:X8.\?K|n^.lZbtl f.a=FC!]q`^<3<mt`FHֆ*^NÁݯYgHFU1nsi6y4nQjKTәW|R<ḅ1cGWۅy0:|23!ev+K۪~: WP5ۣ`#%)(( :㺊X& Ƴc<ڮ'vI,D,\ED/XM:԰atKSNbG, W*`ٖ4"רaWS7P9F3W% v5pur5:!j6aqnחu.mP1e|>8a㈙gCPA~nXn};7:F-VGP,\EDuKRZ? ﬞet13*\EDX‰_<{kct25~LeS"fJvv5]1DD*_D'!rS& {gQLT57<gΞ1:H[KC]Z3㗍"fJ"%n1n6es(�3:J-8};=mL\Q`?slnM_N>\7՝qarw!cinj!ev+ަ}ҥF(d|`ӆM7:" 9\Ⱥ piKۨncoiocc?1D0q7_ֹˣ}:3:,\o 666FP }#!R~8|͆=_j6Qj֨itt)UkAF0pL="RF?65kc7 h״V+R5 WTV :Fǐ2R]tm1Lm)7ԬPO5kbOYʑ W\'TcHݮ4e(U8'=ۅWʑ}OSzv\²mu[Rn'w柛lҲQ1D*Ā8tB6pFGrfg_y0a$Bk&y?;]>Bg<ktl C‰_h("eVf@u[-u 5:3+yfpoZ^ڳ<|oUDR=VZCB pMYP_Fǔrfk^VgsuU= ? bb?W>Dj+MvP[J)=mb�ctD�_f>a\+as{y׉o;oswloO/q~g$C#p9SHYݮ'-|hL:WV ltD�_H恍,@h7j�H: %HooIEDnB)KfI^{ʶ-@IչBV K;\{4ۜ/a~W8_Dl !RzwGj>g޿FG b+m uߧ;۾+ɹ=թQ3)`O DD,Kߨ[5/Xui8983FG b+:˦04MsycS:ξg,O뙽|&^B? Z׊¡=N9jժ(,/GN&c4ЮԼ\\Fǒ b+h4{cyhd7vz `QƿVLp•}D㢭<ߴ8:A~2P瓒qRFjI9B#FFǸijK)a)+ȶ-at$@V�gǘW+|G{r]!&~mē 7$b!lUWM5/`bYW)tdTJ3P;68RTXv5oFǸiбCF HG) <lt`VUL]ݖZ,rjժt1nټo>=7|y^�X*ht$C$L೭+aq<\sX1(]êdw!,r|ҳ~7:ڭPNnΟQnJA\�l\.Jzo6bQh Hdf-o8q4?RZnmu^?Γo~j6yDĊ[wcܔ<ORQ 2Y,ԍF+xoZdU=ի65PC)7Zn lYܿ^c\ȿ7o1:*p] jתct 1CիUv纷!TjBna<ZoΜ?%SDD,\srϗTm=1n,kA\+q~Ny"׼wUD@,\ED]q_kI.wk ۸YCȵWų1n2ҩ[1Je-\ѯ$6@^~.#~"b*Y35t\B~ɧo}CRn8NiN4omjy5xs,cd*"beT6Ep5j1uk8ZHQ.""úUQ1 VN7ocH eق W1rpwلitT|U{Iu13tv I,}&1946XMTaRmғ 7c<c_½Zoo~ukTՔ'ΤCP^%CHV(®Е-3kUl$l$|!E #)G>gbHV%rScyuF$#`˖Mf iNE;uxJ2.WKf­ۡh-ԝ=DA7cУ8?ȉ{sբ;2ԆAI)U򊫈52.W9HLV+|Jms_╄ONmГ^~WDž3%LN8~f_V0LKSnuGEVQ*"b%y7v:FǸ) |k-y9"P4}iV=O)[08j- gO }=H/a:-\ Rp=zUiMR1U@D \pqSzuܴ- j6Ex})22 _S"2_9^Vo&2+TY*\ED԰at[B[6~]̙Ɍ$4ȴmȈ~ XWђd][̺9rϙu_'k̊v:-((�`FG;rebfO _{{aw_vn{{;(\o{pmi.Q!7, &덗OA$M +ozlG�"V>e A%Lw%=@<�r9pF ]& n%캅veQ`OotrیWG 3:FPY&sj?ss`ڣbxc@4ADbBX ް9AاmaXS1yBjf.WGYGgWɸfoWLo܄~N^OHMtl3Oؗ5[~x}Ī,+`NW\w'r#hѰ>߾o?[FہWV iŴ-Iq`f:Mӓ@gȉHD1^"uBV ݟ/&ތ~J@* W+µpkv)fg c^8d\@l]Ǚ3݀_p\} %y̜h*@gXs* "RTX p""JȻKFVƭoHDČp/P|@D4TXU1:HҨ""V@W\˩?2Xc;q9yƭDE79=ec!$&Uq9YTW/3IwnǠx0ؼb5QImBHHOB܊ya:g}\0~F,3b˱mx{/[ؗA 򱱱h% f4BxhGР6Pot rP:qKkv.g 9܍>ʓ1?l[K|/U<ŸobHV%rScyuF$#%n%5g'ˌo"13'2V+}^^f%̀ȩ1:x%WۅzsT0K|-zoN01ҍ>J̚[iٷC?<YEk%0dy|3=]x=AN,sK 3DmlCfi \7p+Gsitn17AVeà,&/=H^8i d[p&}L{L,\GLZ�2o�^׭ K[ʹ-4mMVur۸0) _j<˖&:^t IXH.X~l^tT7"Fçh[LY<[n"1Y-esJB'w6 I/?+o_BW,5g'fg3/G3\mˉ@XHE}̈ٶ[:7ai["/{FǸ2}L$Hŷ-bW)M۲ ׇ?܏|>{B|rR6 Bn2˦-0f9pDG6;6 `qH.b]zNo%D@RLDXNϲx+4̛ND8,\&ow>^f"i6뽘 ^ZD?R,a̗.p#@Gpž?=O)[08j- gO }=`%LN7-A*i&J缭L3dmYJ:QeU^8 yˎȥ[ِ^tmLW\bL7.i &vEMg[o?Va9V3f{dtp,kjϑoCpL$9K&us]2E7W 'b#a fmlaׁ[Iԁ g>v~~ ~7. SGVc7<HS7~Xпk7=ЁmIlAEihև#GHMsZeo_^Y~=[>酯)]qj.yܺ 9ا2caڏJ}UT奧q;|3ߊO#Y| C?{*DLH㒜 ]F=׆9w#g[eJRl3{fa83Y֧g>IHبaubęn}UM);86E*%v2ԅ-&y^1eAr ^[~rͻl㶗_& <n/ǔnN\6 (mVFd_ѷ)!lpqGgW\H'_4]̙Ɍ$4ȴmȈ~ Xu[t1g]r%alKd s3v#qF43`D=;;~voEH@N}ʬRپ<ЁnY؜`trs̚{ַ'AE 98qVjgi9r]m8MҞ{v j9u& $}a0+lIPv~ы?E^;8,prmpqY/Ƃ5?3#"{[uи fvg0Jq#ys7%Q7K=`PZ[9<3{㒞qS �O8Dx0d&W<nsal my8eшkv!+FY@- #/Н &c*'-'oYMļsM#<O2]gPԷ|l{uc?.�Q2-3-n GXk-i;pzصlgdҷ|4hÑI :}KuRez4.̘16E4c7I' u"G@g~A7d`7kIܛӽV8LgRuwlܜ[S!35?֧t}FsؽӖ~#'jLG(<1 Ks񖤉mܖ )IrӈǶO)<]!5ߚ]U߸ ~ z}w8;y7ѱb̴6^6_" k'un=Ȍgμ]3䒾sѶ[E+\#TlaO/0.]ۅ3g3e(ӿ`[=9/[2sR3'= __:7eӦ̘915&p V-'Y6{&1Z(,;]{eb&ub'峟_0y}mov!(jZqࢾEuՌL̋ZˮױVePPAO^} ]?@tkx?UVhߍQA7ڧ-7E }R?BO/sf6DH-*U8=Zs{?6�NWFeߝȑ;dТSd֣Ev PXUۏ}k@bvՀB8=Fĸ`xg1mAR2ymB$r6Qt)d׸H-F-+]ugm㬊oEBu΄>9S^)֊q߿ݹ‘'Bgߤ6mN.{EW?ne2a#rb },Wy,iqn6g>B7;�WZnFƞtƾ+zFiykEU<[>22R^@u,M W;Zyyrn͋>x+"ٛ^Ib][`qցW)\IQnr_AÈTD{#b"=.Mc͔F�1Ưcٺg c^8d\@l]Ǚ3\tİKXo ߫4&fge9{k%d9W1JzZ;& 9ш>W%cw蜝h r_Ϡ,jN3z]|nF*ʍű]LY�&mv.w Ǵl',:]::r۲G[qY30 vs>&"B~Ӓn}Cb 6N`*$fѽO}Iv=TӠ7z% ҲȀrx3YnuKN}u3X8~uz,?` ݘRh66~3B :T>O+V\ԉ13͋V$Z3xjQLvaw7:7,~7z/ᶛN*v{H;rWyao#eJ?Fh_nԷy�kbW\]<3;޴|g@DDֽryo1 P.}AX^S<ɌQKZzgP/ZMk{Ix 1i0Wgnv7v=z%>g ۭs&n%OoPvo5'6UDDDבS;2عZ׹GoϠ`F=O:d?|ٞqtlʕϸu{Ŭ_s9[n{uywrXXþ׏_o0:Q+FG(?=BFǨ4j7d-Vތ='ͳތwdEo[}2B]p} ynKY=iF:j1*2YS7#j6yE;O &fz[""""bTEP*""""AX""""bTEP*""""A|6lpq7WM`^�$ĩSU7:FYVZ70Y&1 J7:%zs-|SχSޜee1zeR Y^mT0K;>""""bTHIeWQSqJbW*WRfʛQGEIbw3A7^<3y{i�@I}` ܢ?2:TQR { plK k=;ЯPwaXZ @ ury9ES+kM,qdb#&-�{{7�/K m/1{I>}ؽ/=S>wL7.\:}͜abܗx%pSBC19ؼb5QIŅ3�'n~.[LFE`*\EDD,An2˦-0f9�ĭdBFH:g*~L]._~4_v@}JٲQki07Wծ{bC\$;v:^6</])+u�v0߮/]ïS;f_&AdR+BjW8ޟ+"#y^IUrLYU]!9 OX4]q�9,H_˯ӌyFw+NETnrܚᘶd_`ÎL#>Bߥ@p�N${=NM>IF3p=`PZ[f,["""/_M2�8ZbR a&"S8.W7Z8@|r[2ؼإ9ic`J#&6@WH\SE,+W}&-.ٙ`[�MWKMCYh%akj[6T4ΓlJԔM<1q{n p^ X/cD wӶ$u�c߼eZ15DDc`ۄ>= ,jVdu[N?ͯu R*\ED 5k4:T4goz'JJ= |cx5۾a;&֎tsߋv%pl{{2uџ=351�x3sfpaqI=iL$ҾW\)+u;"'/cI)eImNrkTHhLH^⋺&؄}zxKn X)נavQ+h$Azc:"""RXg�㈕PW*""bfN>7C\rjPeUDDČuG#t 5:YB[ݏg;b1<]F("""f<7 M1:T qUDDDD, Wxukl!LX?sLP`t h*\EDDe΂*WkUDDDD, W+P-nFP*\ED<Ғ!"RTÇjժC* Wx'Ͽ`t `*\EDDD"pWzullkUDDD,ޅ ((8NX۝oG|~*\EDD;zS*""""AX<:n Wxiβz*\EDDD"pWV=Upm^"9s Up .G1DD* W*\EDDD"pUDDDD, Wxk֛�"""bΜ=7gU*\EDDD"pWN=llTX;[Xg?gt98Adr]wSbNq|cHӯ&""""bTsurըU W+a["IJרU W+w!"/nU WxŭjP*"R&9y{9{ƞ+ܷo$ޙxWKaߢ <tgɷ "FHӢmoס7Ο.+fc:=6ȕ|~|ý_`t(|ZucHS*"RF5|'o#/Nse1{2u4:nz�|F]b΃wiJx2 Fǐ Uͦ7O`űtBO|iƞhgw`fk/xqRVgаPf<5fKydaw>` QßaߠEe†q.&; lC:Wf=sS}:A{zփ}\/qdWԋv FϳiY-"]&`.ψ<bRTV  etUDibw'm0yzgM|t jeu+x0v2̝Nso[ DEί]'`l̘NX6o''xd:__3ǮXgڄhu.f/o#L}4o)Q<xU1E%YS[?ltߕOoŷy.".?? eTg߶<ù)iJ=u'lKwn[XlLpP+'4 fnw\3Ъ芧=Yǎ;6fxK1N)&_m/|X3xx>~?Rus47DĊͨݔFo?ƋeNMf+=m1m`Q5j5\:: C˾e23qN'?c)<\'祼71DfGxպޜUp)5'Fp%0ȑޟ|]=g)d_Lb+7ί)GD+?:k6D ;;W[a[VFGJ""7}5aE+ceڄ}>?Yuq%s1cp!vH>CwyXеbfN9WV*"rhC͡mӹ˧ ۩ٔWyogO"PRu<w�o.~{- �k s`SGDDn8rP7*`&\1 u{ }&E*HYN щOۅlm{``<YTHhQ6թS}m3 )?&*\+ W)W{MjhtJFGR4X]q)p]?%u/FG0*""""AX""""bTEP*"bW!"R4p!0: $dU^R]pL$ݹAƾC|ILr.ؼb5QImBHHOBܰLbU2'"ybVtUDDD*ENF2t ct$t0y'Z{6ka$9{&1ې@:1sawa,=Ht k}8*\EDD$fVZ퀟_S=ٽwz7�rbc`"==] uw×O7}¤* """h"1Y+ &}W ?;!d@Oz9\yZϴ>ؗ0=;0=~YG3Ƈ /–.qڧ%^;2T&"""R8+[q hLb>lYਵ4=1L!r|.[# \g5)TG73^ 9 f+N]DDDy})22 _S"2ɹl{267pJ/lN78*\EDD9:B:e:93";"ֱDҳ6 #|6ZtkY7'\eqR}BJP^n/KWJR*"""q9ڝ! ӁFv ,b"B݈yo%2KKz/ձO8Dnq\z@&d65TH%ǀ.$F/!j[&&r[&7$"IO#>4bbt+Z8RU޸ ~ z}2@vncѿ'ѕD_+=iӺ>F2Jaߝȑ;dТSd֣Ev P$T7oV $o^ X/cD wӶ$!Q؟6!OO!'n#LOz{yKr Z1ht:4'ld:}O>FNg褲BDDnͷ\3^Zmt₟oG;FGcgͧT * """"AX""Vzԭ]""J8u&""JVFPKD W"=w1:Jl""Vzu[v"�@AUAE+ W+`oWF] mu_Pp<|!"RTXG'v""Jprp"ˤDDĺpN5vkHAUDJ:Jz X/""V^m7=KD W+֐0:H8""V«) tAH7gIER*"b%|r4E,(*\EDYe1ӛ"hqW ""FW\ED;q J}\2~7:BUDĊ8ltv,$xֽR;[kY[U5+""Vcu?vQD*MBϴ׆McuFǑ >""V20:HB ؛G* W+Rv]9ERɻ ?y>*ԌTcIQ*"bek;!R歙XL9K.&Ds_?jt 3oFFv:NNԫㆍ �g0t@#JP*"be8݌[WEt} Y,T\6[g Yj`jTXɊCBړ ߪ+i+Hd;S]VO^"\SW+UD mrsl;QDOe&"WPPP@,]xC_RTX{חO5:H1N}#m{\K4lym3/5:#""V} |h %Vwk%%bjRTX(cTocchq1pb }yk T}}:C* W+7yN~(".%$;ϫQp3uJwc.]FǐJUD h\o ?gtrE<<RITTAN^nы :|3;ӠQpB愽GDCܲ gdC* W*f l*Ϝ2:M[u~^h(Rl !""SMg>M4:T"]q.:AM=QD$b:4먢 R*"R%->蹣wdQDJeۡ:zݟ1:@]DDN'<jtj4Nb{ڵE +""–;XRnot=g?PZp� zMy|\Qmry(b ""rؐ1޿G~vvxxQ`*""j/kgE_ԙS2?FG3UDDJH^\մ�rNW`2:Fw&ٞcoj۪bo[ÐrUDD+!gz%uz8r#atr7qO{z6jhHMۍ>)G*""nFϿ)ё<ignh+""Rjsv~AL-Uw!-oy[j}tUDDJ-=l}G{:|qёĊ,jըY.EX'""Rf=M]_́_I,)Ļ_&#fL궼ycL(?˅ %W9{ޘ”Ϙ֋rOD ?7BOuӨy4fUAYZp[om<c;ͼ\ 3?{HR|Ru6NbRho=eIy}?FUDDŰ9{s@]"5:RyfpoZkgy[s9ukRz*\ED\%?ӿqpo}ёĽ >\< ? /~e_&l|3 >۴b}2Ϩye3%[6~,ƏvT *\EDf:;f!6a74cJ<}øboW˯v:_́E3}Pe !`zTc;eŧsy3fNe[s 7$̘͂ BZ, W0;άQsY=y_^}ϵ F F 5�jzߴR/|f30:.y8}õp_g#U"dvX=->]׳LÈE5:X?/7oc?ц(^Zc/ƹB9sΥ{ٴ5]!Ηb~i#VmOd3qN'?c)<綶+w@NnQ__}5LKeR*""ϫ)oM,}q!>Ѭo[Bb5k™+3)ER/x 3=ñ/xrOΚMpm vzeLc+`_ *RWtMlÿ=fGB^7t�Ma֏Eh6Ʀt}ϙXcاg'_V #Ǯgz2oyB-Ο>~ ܞ;;s\ZדE9s~Gll4}!ƞ E׵aJ"Ŧ@JMYZ59ų=2.$Zeq2LG3/i`'1z1 M`]8l#}W)ݶ)==DŽލq.Z[iI{s<-wyo1uN{y`.74eƋ=NxFEP<?8.vs8e8a{Ԯѐ,RTYyY̊IO0[( d1+\+K￱z{4mCˁ WUDDҍy˷qw`dgx6:3pvN~p WUDDږxo9[<z2:٪5d>߾{|oF5TZ""bʼ5 yˬTftk0 pRPPtnlt,P/?z>Rj}Tzz$eXPv{Z2:a=Årssy}{o3poFuglN)=""b~M9‚(><ưnmrѱ.ټo#?}wD;[Ƃ?+ }h$!!*\EDʬ b8g6nFGb|U~c;q/M;ĺ]k7\?xE+�f]٧Mz嫈Xo'8t_@>N ~`(J@3,WwD+uyLh"a:ia3\N|̻9o>=ӟfѲQku/|5y q,-5?&:CWK:Ճmvh+""btƐ8t|߆{HG|Pkx^kd06䯨X"W2y7Й)l3>{?׿OjF*ԙ揱APW̋\3'GCOh'*Zlp*}Y=y+'}]&!}S  1J4o*zqw6*)yy 4:up*]~l ?}GaUx tRo'|a>v~i!]?z6y;zxz0fɗSQTUDD]?+g<'0nh^v 2%HGaOΡ~v:F%v:up/ct42WԺO=<ӿg|vQ 1Uu x?s=>+LZ4su. G'$FG)'OltsUtelȿc7 yax~Ldz|emX{ 8pmؼ#|(oж|>uq$m ʒOxw.v%q\J=/OK`~(( 8{,Dz޺HVͬGo)3gE|q1ka@A 2;[;| S {[{b^ۄL^<~)9  _a9NKٶ霷49v&-d|z7Vnc)r~z 7mwr.+7]`) W[,ݴг]/R2Rl G#};fQB̪>$on90gv0~_ؽ#=eϙg�]6 [}JEJ>"""myk;, iqI۩LW>HLV+bavTKCjըV?fYbT7VL3|�rh?]dq'KSfƳf jDa܂u;I)?sjתC3xWS%/z9k]ч,b"""7C[E&4]-x$A:Sκ+.mSXǴXF 1 Wp~Ԫ^TDM0; TB�SnťhhQKM[܊'=t!:j QNC{L$n!.9⍽-b0"""NDEG2h)2lѢa; p&'a#sv�N0Ybz]ҩp1_;c3\7;x"fCaEP*""""AX""""bTEШ"""_ϯt(;}"FH+(( *p6*\EDD*Xjo<JoTnч.RUDDDD, W*\EDDD"pUDDDD, W*\EDDD"hW 7g"""Lo)*\EDD*ޜ%R>UDDDD,T؟>U}\Ūp`[܏CZGڴ^vFH)(((0:ȍX""""bTEP*""""AX""""bTEf'~'x����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/er.png�������������������������������������0000664�0000000�0000000�00000156400�14332737457�0024477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���� ���}a���sBITO���tEXtSoftware�gnome-screenshot>�� �IDATx{`e0I2mL �h a?]^EɊg ވ {HPX+ˬ. ۑ )6eF/Kt;O 7K@!B`B!X#B!G!B($a)B!PHR!B<B!B! KyB!B!Bftq!|D!e/#!Ph*?Bu `B!PHR!B<B!B! KyB!B!B$,B! IX#B!G!B($a)B!PHR!B<B!B! KyB!B!BèQ"xnY)7yX m"(Z.rVh-.}8t ! *yFһV˲,2+ZQ!POF(vݬ3 Lڬ6qU! )9&ϲ$��J0xUT(U*B��^)WY31&JVJɵ PȢTnBի*TJZTv8OJ3kאZ;�.xi,�:8�ZǴ}!Pw֞Rt*%` IQ�keYav[os20*qM gzFccȭz #R<k*A(,Nƨd-:ibt=:wZNKY'`6S(4J\ Pq �R$$Buv`:br�Uj̰W�PJMx�Xu95J �� 9A5xI-���A6 ,RI�r8YA!u:5j0��q:ݬG��GP,( W8@Z.t8"PӞR^yZAi-Ns!tW F@7JּepuJ!N\ rj8 qRNRmhB=lHQҚj{Vcd<Bp��88RNb\5[<�J%8ly`bp<B"*f��p`cPT.kթirJ6=c7�R&&;RRR;Lv^=B֮ 6XMz�Rld9*�TZhVhri% Bez xZ8\Buhԫ J^mW9 Tdٌ:JE<2(�jhQe@pZ<O!P%Bӭ999iii] BQ'B.w{E!B($a)B!PHR!B<B!B! KyB!B!B$,B! IX#B!G!B($a)B!PHR!B<B!B! KyB!BRDK8BOP$ɼ^o@R>--+@?Bu `B!PHR!B<B!B! KyB!B!B$,B! IX#B!G!B($a)B!PHR!B<B!B! KyB!B!BnBnp.\ifmx,*ZlusR8X CB!B("@AB!PRw[u:3K"jqF'tVAA۪՚X4�P ;`m: p<X N=mw.73u6kh3ñ,6یʺ9Ƥrp5[ J>jYpS��x,*ZM5y6xYxHRָjJ+<.*1QV e͢ZBhviAb\M6mgz2 BМSN5]ήO,<Lp(goٸPls]xl5=D<rez ׳m>p݅ˆ xjuA/3w[QlA17rA~`I po(\w-~xِȇ%\<y󞋂 7?8e;|x[Pb" lr6;+ac1bx,fS px7_)e/^o! h;A!Zݣq˵*�V)3Âx^e87O9`nRi�*eoՒʭjƻ�!W*� )$�yx��BRbeܠ;fN(-��<+X;UJ�ZICє۠U <n�ܮƤZ",b;RR;PӨA)1~J�Er��&y B!ڠ :h�FGe�p ZvP86Ҥ3rS[Q@i-N٦-h)mVӄ>nB|6xQhܲ~B!:L$j��X)r�%�c2<��=.' �4wYM6TuFIa\?46xs1,zN+9y��`b|+hqrΆ<A�6V,�s4c9J.'x[pݡ<mhB!PCw0*Zմ]i&T&UgrUJ3<X51jhudj +E$h9U25#hYC1,K:vP:^$kE@LNдBh8E5*:Z}JoΦW*4V(I ԪRFZo08^kU"F%^B!T/AnIKKh]CtMӉ8m.R*vB(u[_H" m|khF�PYlX#Bu<��4]N>B;R]]r{ 2$666Q P#9'7.؁tK.<B趰G!z靜(:N/V B!݋Q"B!KyB!BR&ܒ⪪N ($DFF&% >|DXXg!L_"B(Ͻz :)pӧO1R܂2kCB%%<ISUW af &!Bm|UUՍ7@'E*Ah83e04! Em^h..o?B!303AG!](4XҷqA񲎉`5DB_R�iwB!1Qnѯ>&4MkImy;-֯X?�3u}*r;y|E~KLE?bJA QϾhLe{|sn@_dO<PJw�;i)/_ϔ~j"yq#myS}de>yc/f|~(@!P F)/[+'��A-{|x�>Oh]'Ew|9.Bvg;g&~kS�Wfxgv<؝|yRܜ^iwʡ g^{ I=bm?;L;^6iROo%t"B(<y͟0$yal f;ώ[3wJ_^1'JS+aNT �^+ ҂?2)A3+^>Ȓ4 *ݒjG<Y=Lr̛{u8@*<c'̫?OzO[gur 3k.5f*ۗ.N ^3Y)R_ͻJ@?TyXŎcYg=5yYN9Igex.\r{eA^֧%Rʒy9߈~Id02|+qxJ| 7i/N[͏3 $}S?{y2}>so2kUe}'KWO.쵯z*(s^BWJA~BQyrƸ@:5S>:6fs΍m^3f-.).W5CedbM2]qpK->k�nY-b\|~js t8CF<V;KW|ʒO5K͖l5us٭+>zƊ?\8q7d]BC ?+#J5^}ϲD]qKZ"­+nj<MVځh Kreeu>7k\2Yq5;^Z$X et髗eӖ#U ]1ľlKՉݠJҟ^PŪMK2+ޚ�\ đSeULs98Z6BzlÊjlk|[*`?6L87S=cBL ּy�P BUIoȤDASW7S}s4'%.ɤVL A2p\DP[Xi0Q{!kzK/[˼%iWU%7k'O C&jXD|e8rT � \=_-UBYIItڬg؛\^W6vw!$Br _KHUB5ʥC$^Ο4OOn^i_>NwlpWZ&#c$�9Y–&NHԤPK�c={ĸ WIEA!PV;$Ilͽ${s]2cd'9-/I d>dNہ| j <+ܾƚ�H{SQ:`'J!zhFJxڨBw"DaH 12*!�$ 7f^"�ALTMH6ӸvLf_-?_�~fIJ7?K@`ض}ѿ4m^ D@5EK}pl3w/G�A'Yqk&K7 D{tzhbkgyvG?pZ�9@)JO Z8{In>,B!R@%uw1W=?!*�fl1r|bɽ@s?_]r;H$ @�!0xoNj p߻ >QO妧\v~/{t1cwIZ)znA!1bJ[4xiQ󞺩}@4;Jilb!)❗?{ Q@�+yoj 8YQ ٴް[ OզWV�ԅ)"F>OED7{ŋ{#Õ~?iC?}15G{i'MWMNs2vʢ7Z*' 7 �Լb ; o! iIKKk}Ϟ]Æ͜9[|ܕڸc$vnws]}`%q׼vG9D&<f;S_X}z!<y]`[<f,S<-z �ѣKbN!B!BO0&P]IϽ"j/WC78'Am5pΊW#B(0 #B.ԶR>22wR4!Fd$Q#f+aۯQB!V'% :w.76v�ADvR@!竮\4l؈-.o9Dnpbr�bf>\N}:83,�ͳwf-_n-!Rn"´t|"5zrR��b"tFn �K-㜶]9s"5� 2^Ҕj,CGT×[7΢ PѶR~+W.丼^o'd{F5|x).o9D㶿h,]u? jXiݖ%L'w,gAF{]Olg� t0zxc%~|0��5̇:C�p<{9S>KEO!ԣy|lllrЪΈ&F6m4paaa@ [RRi5EO~vsMSP8_R-_45}o(uQfiƓN9OkpB'ǹi@;:9k��<*y^dxPh[){ &EEEuR@=O>;bHq L`ZipOv.r<h\`V}F xN[k痚N�q4gkF["f UBm|IIqzz_ę 6|xw߹Lc#"$B!Y6}8*_bg!y ?,1c۳N 1SݗT�Ϸì$�íl&RFneuKbTcb5m+嫪nܸ Iuu  H`&6 gm4-UO7n�2|\="fTD�iIzP_^T# 1K,C��:_~|9a*qi�Bu]L7h̫ldB<W:n|MilSVQ-sy-t+1.CR3q%,��î��n:ܿn!:@KyA:# 0EI@!-a)="N:(^"LB!`eٿW*G?ڙorNߴiIF iKq}e~Ӟ=2B>NCћ_T>in2eܺ<7XoN+�L]>=0G6vl >{gyw�Ҫ=1 |x�$gV&x|0`hjiS7i |7M̓H>Kz嵇i Bs/_r/myB';״a鷟&G+JZG+L2~^˚xz(f;@>p*^z$)ޮǢuynX>V; y�К tVfxgv<^/#,yh1S=3 y+ޙ]9C(|Or=ͺd/u[+'Sdw_^B!Pдo?LvԅcJ��nZ#igR?沗<+ Rgod|EE{~QA}tꉉ?<Z:޹@'}yO RYw*dV?4O*%3\ܰ%g_7~ T�9P\g/ˎ)Q<2IK*@ކ;+̫OnG$vz>^aT,7LبsjHeiOwn;z;px .yߚ}e͕>~^^^>co*/ĒЈt$ͬr)/o]Z|m♏ 7i/N�Ώ>4//d,}Iډo,'.N ^82zr>B!PaT%V0z_�2�@ޚ:=y 4Tgç0wzWwMY4.*�� �IDATaӸD,h@)^3 wm>[FHmXqB]-M{y͜x�/Omzntm*qn\}첗Lۃ)O){sOXj[M(S<7+oFKe<=A*NsJB?-PݟTk6+?y%q6V+pI5 $?% McX@{zxpeB$�_伔Ȇw'eP2�Z;L֪}3txͺWXܛ N⟧Rv!P e1i6h8oېeBMm.w+P%P;{u�*A � $��\*ȤPU.p^O(aK'Jj*A3emdb\+qdǘXYYUA [ e9&$ʼBR}Lo5)o TOﶃuܒ;<?Y@ť\0�^ @+jA'!i֊ j+8Y֪lW7n.ZLʘq5gp?X] /O JGjϥy(/*AiWS!qI2o&;p騨`.Q|>T 1ibʼ mi'ۖ]h[!?$Q杹Qқ+Wo^. 6_I  dəd-BkZ֍MJՖWʓ;mg'A8f){ > DRgOM?8)R~_�Ah�|$vH�Is*u#*_5YvӁnfNHByiB>kۿ!mTmg-J@ܻ?+|}d6PcJOWҥAJ̈eo<ݗA}/y&y9yK>}z̙c%IxxxpCBWK{2�dȓ )wWvM}WS|2hyD7ZLo|/T=?@xD?敹Ɇ<d@OQӗ_)sqsSeRԟ>/�B �hR�@ �A:~ui;A&oQQW�!H.+''V֠vH@:[qEq~A@n; 3uڟ vh! D(ĻvKґ. N*I(�Ҿ�D$Nn5<?�m{=#jO }[_2pD JG{Ϥ^z|<W<ކNp4|�@kB.q…>}[q&L0�]WCd999iiiMٳkذ6ޕk?Z ƹsy3g|;B* Cwm[_wڄ/|9cތ`a NdffRUaA :�8ۿ#B[QPqy[y zvIl:Â.) ^!@ k]O>gϞ=vXJJJJJD"9J}?#L&9+^SCwx !nS3 3_XYCw `.]r\u{}?~{F9//oA !M%|i-L`''$$8q4vҳdcǎ;O?ݻ>tPTB׶R>22mU]}#20 (EncV+޸-###;;z+Ws=3f̨*((`&!!eYB(V'% :w.76v�A`@k|Օ+ Q0 4E.1nܸI&@bbbvv80N>]PP0;Q^^83>22rȐ!}<yȑC/1"mW\qy5K&gQÇ_ilSVh"tHKKQ70񤤤<>v(//eԸ';vL۴ <yS:)0EI@ywҥػd)yqXXذaÆ VVVVPP}Ab=%B4v <y2Au7nݩ@K=ӨӧO9sf)))ז a)B[/֍=Kٌ9qnn2dȐ!C*** ӿC&%%u~ ! i>/;;/կ~U^^_Sn^LIIm{gر:thAA;N<O?uA.!v [ō'NP*�x iZIIIIII_L&KNN2dH'zX#F~NNNAAرc]ؚ?iܸqR6Ǐ?}XWWWWU}<22rȑ#G,--=:tСCt!B<Bnƍ999Νk8߈x(q�<8رO U{du[pj;�0N1q!D2t?Bܢ.V(+BU*++÷o裏q\>}._<zvĉqLu@̙3gϞ3f̂ n2--m޽@=$<ͼԩSRtĈ?833n=x?G<#F1bĕ+WΝ;w1q$`jPe ŋ 77/[.<<|ƍO>kiŋ8�999gΜQ( .lM.e2ُ?x6?S.+gȑ#RtȐ!!}R)[>Am$iJE'}wkG2fePC讱zj�xgg?w=t'|"NE(**:xC=TZZk?w}r?D#痔TVV0g9p3g qΝ[]]0̨Q;c@gϞF__+..u򸸸g;|pIP([37S~+ #T@[YUeaTtBqڵjq~Œ3�EEE<<_TTr999�'6={իW;&6ׯ_tttuuuuu5�TVV+W֭[<G۷o| .QwC$qIՒ. S{]pL&o !t?*7ޕ~Sw[LNZfT�XDI rz8JPӒR:AzQ Qy}&z"ZNVR44s8Nj\ƙ mf5gO *p2ds.Z ;קOC}z衫W<��D}* �erD"ދ͋q Aԍ�,Xp(X=w\߾}̙#Hm]!HN)//AS3KKKϝ;ߊc !ԌK2OL$<Eoauuw-ͼˣp:m:1ES*sؤ?>Zpu;VY٬kXϺ@qvY4$ }@^ev�к-6-Qla BZ/*****zիWwY7*/8>*NYn]QQ'|t߾}/^Ǐx�HMMpBݏ /,òl[0񙙙gώꫯ$uC!3W?Q �<ǫ<�r��B�huGQX\&@[j[J$ku&c=J��I$EI�zB]QA8W^�G޷oѣ9=zCrrr~_oݺ5<<տ3pgp$:wscdžK*uәwk׮\7nL0AT*R)EQ999Mg%.#JG5jԨ .ǎKMMMMMmB(Bbvy<rgU5 lU:tf<N6薷yج&!QyZ25WؼXco֕_“�@ĉv0у6졇 :^4f̘_~Jrڴi<gǎ+//vP0SI.8aL[9V8�;y �hmup:-8ܼx'hvmG='.'N!I… 3?cizsιs犓`֭۷v~Þ)))իWT¼K?ҟ< gң.vYqɉ';v4iǧLR%???66.<d2BP(Ν;tPdddjjBw)a"qNl��Jk7[~$e hY �c&q>aZLEPM��&6Jn1׫QI} jqEȸ˗/7\F&AiEEE� �ܹs4MAh8waaa3ۧT*ѣGG=:ي?M[CK p q|iiM츂I4//ĉÇOMM v\uz#IK렛2jk?<лc>Oee\'"gY4mjj^n=p@ù2(_{5.\H$M#Ν4hPKjvJt[uH'&L v8);;["DFFΘ1#t#yyy4M>PWQQGi*|%u*q;qCz/**oasŋ߿ݻUTT4a„`222^1^QQO?UUUӧ}CQRV;PM5hox]vҥ_6M?| J^$'Nvf<wǏuۨW֚7|> ?s^kEhMv]sCN ޣ ŞA֌NjUfffݻW 斗4_~_]3モĉ͋)wWsm#"""""@ ܸ^QU%JL墳X#t'z.B~:IQQQ|ܹs:TUUuڵ۷իW OSNYfի׵krA&WWW{<@޽Fٳg333{OoٯQؼ@pd3Rs[W<l#L'��..!Wz9�fs; #Yͬ4l{*O5f3BȬ+62ixy��֬0xEAS4J zdE%kmpALrx,^Q�nSF/r&EA&PTE%kl*"JQed<6)z}ƛoC˚韛 :*W ӤJ zɍf{,bxbI(T�Zr^rymfhegfzL68D_JG n[�<V|ݩq.^F|6yїv-NCrKxtdNS7pV}0uԺeů]�c233 @\n^oH\o~v;w?~֭=~8Õ;7gΜZ37;իWmibM�T?m߆? q6͢MPjr$?`rkm6D[M�(xnGo9o7.߀7/S֞u4kyaVMܵe( b�f<5$�p8{X#2S 08^p8BB6k倠tvvsLBsFuQy6)ٝV'?\iVp07*zܣ#tek6=fFΠ#w:X^�Bcf6=VMqYMF 6PN&0ifatpJ�@jy*ֶH5˝�P6OUlFp6Z0f{4$xě5݂h:��:4wܑ#G9o߾O>dQQQuuu3O<٫W g̗_ΑDƄW{ ĥ^QqTÕί4'Op}*[Uh##sdH �9&~J+nK (hP{<%!tNEW~:dUg)�77RțUp3 V:�*%q;Zq0RVpZNwmhy�hV7_3\6^T+݌�^>5���RPW2n[70PgaKki:[mTٔ{Xh�R(f4sfVi⏘542x��Y!glbpM!3MDhzKz71]7c�b{y-<I/+<I[�ܲʕ+_|D"9sf%ɘV_J܁*{Ue5Ha��'|lmٲy7n4؛,�k>B٣CS��@m?U4pDaYK߲BWe()V\-a9RA�$EzX�C4ʓ欽) �M3�V3h �1FjIbye 7C'h=�{�@-YP>,+ţE�zneЈ7(m5#:j(UT x R6l[HqQfiJRZMɖV 2ʳܞm!jGNfZaE�)2-*G&bƭn=5n8;;s=AqO>)ػwo WGݿZ|0 ;ɓ'/_<m4~^5PzE+He+ pk- p@ƨv<7ˢUUUbAOirVk'8BgQk A(Dte~yӵ}p]v%0:Y[W7l 1zuDg!kfL#=WS,[Ptzir-e{]صQ C'S8#MG*b LtM?7O?8pV boapp)4 B+ܛNݺp qq* (V;l-o'?ouhVi�ˉ@n"Pj$xZQ@ Ì1"===رFeq�@yG3��hv;�hH~dW;DZ\Zudc\%G4M,p Ѱ'j)R, f^(X�<E'!;ܛoQ+qXr{33Uuz�ݨ>bn?g=E!W)98X\<{q!h�� �IDAT%ƺ W4=RkŸ1˂=n%-Js+v}V Z5ltX4nka˝ b�3sN-<�kQEL3=Yԍ|WСC iã+**~#B(tE)}qfU\[��t��ϺYAG<�rz(pz��xI5WUJxIXՊ+5fde[=R%շ͸Ƈx<Ly($Vno]o3OLY U.dٳ6q޽;B-tN{}]~ SJk^I657w3 �Ϻ@D3[ws@�59J>ˠ-]<:|˗̙#^|EFDDDD~~ѣG/\ ^_cV)q}.0@}4,lr�rYʓiZZ!gw @k*˲fGY5RYfwg)ŕTU62.ow~#X .lvKSpiYJkw*,[t��ﱪk0|=Q+lZ=,S4+(n7R6a_T#fdmx4`x��J$&=NQj eyLMԠF%cyqU Yj-];6WKyBRYdR3 rHemDŽ-ر#11qҤIz/_v=AF;vlQQ?񏒒`GP*Z999ii;k[>ӆ}"��NKg^ۀwuY36])mp(6))g--]Xta;wnРAGo:s݅=PK;?X\y uk׮<y*===.g "ԡ:>>s#_qyؤ߾q[5zGƩnSG/Z9"JgΜ@ݫO>SLr劌LOO)^5VA]Int ƦIb]s[K'n/; o B(ٳ'===111؁ ӧO/))9x`~ӣB wRܾU#{-!z]v=111o}W ]-)))))eٽ{6L`C[B!tґ#GϟX80Qܥhiܹsĉ@H<B~aΜ96l9RXXx.vfnj7(趜{ҝX^Lɴbp<Ni<��kVf�ˢ͠dZutE%268ƠJd<U(U`]UuQ e7mTK,!C3cDg3c!yCsޮt޳V0g9]M4aKOJ(H(]Wl@�aȬ,~q7|>BAFμTИK%Efk򊊷 (hH1UXReU1FHrC�"4JLjt@dCh,1Q)@cp%<�/_ .Y9R#q‡r8''믿?w߽e˖RpJ̠|YE =PdQҶ^Z 5 6lI ͤ팵d~03f/][(m5UA�PNj+!13XU5h"VmPn4=(&D/N]�@ک%{zCV'|13E.5Xɤ5R#C܍Ϟ=BL\PR?~yN<i&s-3|7�8 �{!ɂgS*�DDR0d wB^!p]h"�u�EaUU ٠d.WՌeMG�I1cyNh2$i .zs%`윇R-\gE*$* fů9zTgJgjQCJUT-) n�gb(L:9-ԊWb($ Up zӧOK*˹Zy}{w)4 )�6ߞzoq (>KTe,%h(�� X`�ܥɡ*((]R� tŕKDN)mLQg BCAݸ`yMTzVq"1 (@D3MW>Eoƾ|fQHwK*Z.lso��ЗLK%"@he ?h %4�U-q ؒsU TNDnVOh;!0[WsTNT-p7Ϛ5kܸqG-gmO-䗛~t{p)x! I)jBn-{yX}w& 7)w׹!D԰-t@P?jaƏ@tc歇pQFv-Ƶa$fe$0\L %q2 z] #I�))6n"ư ϥJ*wρ pz �F"�"kГ:k ~YYٔ)SJ-'Ќ#{p "u!aZqt?!w|n,g <�[w!Rڽ&z7Q' Qr7iDi�,8FM}Xy/AS%DĈo9Qf*-L0̌`范3(,`X${Xf[O_?((r��.ݹykaHnk 54ߒR#i9WgϞK-j�u}Go˿M$2N+믿=zoyRp6;K�7҂q�D4�B }a!\`Md.,/*r@YQbOv"iYV3u픶mZ$Rǡ�o{ G"a`-U"vAVH^QoL/d%Pk#,PI^u>/X/ G@<@.`ME)? (  �GB\ �e�*y[L!�FDtRGsUG8q-5/(ddmFSᄅS_?/g(lStWGpCAD�q1F^ эIJci9$۳1RC'KFYd;ZJoBH4s&!Uqw TԍgD!<)㲥dY;Tgd߮XyLj{$$f"cA<d5DҗL(3@:kPyZCLC2HJ "MYJ!U"Rc2;TbdJ.68s?n\ zDjx:|رc;SRkpBٳg+kkkkUUUU\MlMl5G@2JvZ 駤咷!~+n(|&L(++igϞ=^t2>|x޽ZU̩SN>=f̘R �xR p DMWyCQ ̙3r;9rQJU<0jԨ;wZ3a /I!N~ɽ RPj k6k֬R뮻R\w޽{}0{- p8kݻws=zkp8%C曥 ܔp8ѣGc{op8%#BZZZJ-ùpS~PKcĈT�B��թ� x51Bf� W#Pq,nI%FHLԲ~ e  Tj2$24Ah*hLrȃH5yE[BeJ4bdXyj1,b<Ӡi2�M*En"d~Z�N#B�[/v)mS1Bbbܢ�^293$Q4_9l]k5|��GߚM{xpCh'T#SB^mͯ]t뷭zլ;Kbj?/v4yRpJ̄ nwyB8o 6myn-ϩQgঀ`KJ�i&mg%I6+.x:OBi! �00Ǎ:^4%\iv8QAj3CΘn4=2icVl{.&ߴiH֤ͥd) Iģm^*J%�Ơs�03ӄFirs#gw1X;5˖6˓o})�j'My%{nQoR pJϤIFvo<rȇ~gϞ?\ CbZvP4T/YlJ�H \2!’XBM@r\V7p<J}[rJ!D*BbjBE� 3`u$��"ϥ*xDS1�Vւ'~)P&�� $z*(a(Qu6v_4;8թ?V9v۶*٬c woYU˂GVY�QּWglyk/vUr6R�F#otɓ'Z1oȹJ>rHW wĉQF<xp۶mL,cL;_GR )$JUZ]ی��F�]魂hXTn䆮ôrRI5P};^7򅘨3�H JNXQR�/=)P.%K}Er^e։a_ˏ<@"/r(?k6MgxI�0*[%mf-[U]*o J"Mny1wv.iSv�|{�1{X!_3tc׮]=PU +N<yxuUŒ3\={l_|#<R]]-?|n۶9cM6E;wᅼHJyt{:> ݗWyX}:HU:e$vݕ�"fjRL"~U ICϏ�X+ė^ܸHP1bEEaR3MM̓푗$0JN[fn3k)��$LVq#? Dσv6s;3<w7 &u u䞋}9tӧǏ/v\̜9׿#Gjjju]&Lػwoq8`M/9_<uAg!SJ=ʛƓ( i1B�D! 1E Qw>l|"$$Fxyh2VTPΒT9p׍d� 0Y aQ/[>פ$ZӖ{iȉ-V[nj_7p.| Io\TTT|7ɕ>|x%q8fMSGwZѕo&j&҂q�D4�B }a!\`Md.,/*r@Yٞ iYV3&ESFr"q(@۞ BH )WIHF򓢷Ҡ*�Lm0gc ͕ uy!w,?c FaT)u�с=G>$׿Ttns@o]*wߟJs)h賍Ow~.wqfϮcǖZsr=4GfGgMw77G(?p*%e!$&j/g~\i9WhDtcRĸ=XZ9&d{6U:[j䲽& r>bψpһE@j3 +!Pc8nrj ʓCNa- zJOvA[/ȸRΠt6.@.eMj{Y3%ѭ,1!15}$U,`傱㧋ǜ|prk==Ƶ!{wo~9?(tfPǪ7WܽTy32~)YU^ ݯ-jKUV VwW6r<O{}Jo;Jsѣۏ;9W# n޳gԩ_ց~/hѲ'4y勅fkd>ZBUj(<W"#J-(  gϞS^Kѣ~PB Εώ;n6Q<o]~EJùXw3Jͼ}"9N)ٷoߝwYjÁ3g;V|K'cƌ)™1cƿ뿞:uJcǎ;Zj][yIB@} QwK Njoo.ɓ'~ 6eʔkp.;O<ƍǏx<^jEEMa ' p8aR& xR "eee~[Qqռ9+!p8!wͣ9K8ܔ=Dަ�� #\�GZ^ĕhH$Tj(b}>{dix!!$(44&_42^(vfkw/hV4;*"+PI0� --5/�cĈ83�0^!D4[өh@RFS~#JI!䗩|g){Lal9KKsW_uttr-2l9t|Pjɸq?Z3pݔ묽ok䕯45أ BeZK"N8vƶ=4%I*YFG�{×̥`NMu U@ЖleZ:^(c=@:уb+Ue/H1ZݞF+TBbMd ϵt rHb T2H픶y2FCzˉ"pJ4[ie|^ [3SZdYyέAO?ݳgOUp.'7|sE--- !ʏj!R-\Ё.2s�JDBPT)d �D=-iM,U$Ln=սc5Dpw+DEr3J&��$ 1�QdS>0ՄĈ4rG� .20PdHp]zs?Ks2ᵏ,M\g+rBjR(VI? \%JՒF�f,VbB��f3e:#�WQQřIr(VRm #GL0*-loovYj-(=z[oUj-@61 (�@L-AjEaȪ;~s#E!βGBaZ\�@d\IDZ+f{/|<`F9Q8ĈMZM4.�@PI3Iȓj2!̛BY? !D` m>;RBýab溠>$6^ohi}f.JZ ri ]D�jo So�5c;o_}ۋ�sUA+5pJ+=mC^zRœ(0m0 ?|c|7s ( p 7;LJs)?sӺG h i<)[se!vƴI:J׆N˝$b(.ыUFDQBKVcadTPo^cB,F3)�[TFoK#QS�A+o�v|LK|O=3WіxKu 05<Swˆ1<*L0J,/4YT9B�� �IDAT�Rz?qU�:\#k/Q"$ :=c:\|+C,y?8�:u;qg}VjQK'[N<9uǏe\u )#?7:na"ق"ϵ'"Vެ4Uowi#fEvBRzi9F4[{F%Q"gw$.�QF+陗Dd4�LBbDjf}(3k[y0EÜh "; !-.kVPTǛ<Z`WV)'Rgyb-rGJv{ X!@r6jl&YlB9W91AaǎSN1bu]w7|`t›oQN< |Y9W'nʗ|-�0zh+��Pk#,Pɀ; W;P�I˲1i53hՊc�`HBim;9S`f^ p<`P(F( \`MD� p�0<tCJm+"-,F_|T�@"a`FT,k{DK�@?bσ(JS�$+5\H<e�5_$ )q3]aAΒU3l�Q/"F#,e)(6r.?Ǐ;Jb駟=:xr<zOBw�`Ĉ \9 )_w��|/Z 1Xt53|\JktE\^V$GT%9_Zgxz%h)%`.l)Ce5EJ\/$8r*kRR;#SXo1[Jc)f*q%5XHDHrĤTveoA *:'n<$M^|<ٯmf ЏXHikIW1F\*O ]C*)*�n -D1&Y@R=?;OV�.4)KV)J$չ\DZϦs8oꫯnR |qwvtt=zt%q. x#GO0!?t8cDI{:כ^n pݝkVj=Z[[.$N ٚ$nkd$i �QjE'LPVVV={L:,\,ܿ~!wC)eɲ\>l?Xȑ~8O?Ϻ^Θ1t9` S As"j*5wp ?7*!;Nkk_͟\]|ݟ={ozyw8qn(:(9C /I!N[x 98< ` [[8[omoo2IKo9~x4��ƍʹZ<g(&^ /曇f+Gg:t>2nܸÇ.%q z|Y9W ܔp83g?~/nqر-cǎ1\-?~e _VU`SB;.9P*=OݞQ;-I�PjL[Vvbae 8?SfP*eS2Ru沑#9bNjesg(] Wܮw yu^CH0ze AH(Bh*.�$&XE qWA2FF�BSu~>úrFL1#`%c75ıcdžSqG^!C>1cto9rv<y[JM74~Rl9s棏>ݶtMs~^SN}'m8rR>L2e�g )k^۽_u/kX,yɪ1�D�|Ӧ =4VRqdBsK Iģ IKR*L&��B.<DAޮTbQFCzˉ\м*lu %/[3NشIT2�Bef*ԪUYK�'ԕ܄dgIKs<]"N81j˼{G閛J-n�~}.Fvm[� v켖RwgJo߬.s:R-v믿~衇.o%d ƛ4iȑ/3Gyo?g<Ӄ=Z)A&X6*%To'e:WLn G䚮\#"�D�J]'ba*iHIB-AQ>R-]ФXNG`1"P+$EolB70iR@|JmtFhVV43հOKdI4Y)Y��d  qb#�AnϪ,=U^q{U\}i%\fƎ;N:xp? tm}m ؉+|Iwosb07A6Z%�UEPCQJ*JLz+3(?0\0&j'ôh"bP�ZV<5 \O k-v\;hE�3ڭn@4 6:�c*5tsթ7:/bn]V*ÖAklI~:ᔒ'Ndsm2^?~CCo<<y$(ɚ~" zɣ dHο=nŔ[�;>fz U4b(hф—|&ÐGZI`_1t$�� BJFD�DUg UԴXB�Q) @�@U�ȕ%AOFj*\q|ܔp8kʟӇZ?]_;y#(ϊKnz9t\ס*�Xs( !$ @q%#dvgf#RC1_f}(3k[L0EÜ+ 933/ASv',`X${Xf[O{esUPg=UJ� ok]Y%4B9Yl5)1a_p8`7fie0ꞻo/r+1HIHFIJ_z2~U`@[8R5� `0JO(ݒtK픶QE��HT$ c���˪^o +ܙҲgLB@%:]<`V*nKDM+� 4Au:N$J8w4@UN+CFDtR/p8ns8ε`7JG~%� akqRzjӫ-'TܙtOA|xd\)gP:�L OL V�d[51FHM � -Wb\qz0B�QQZԍgD!<)#4)%`yBk!1+1S�H<%Y|Xy4ָX%5)7RhU̴tE+t/s/n -D1&Y+evR*9 TDttt wqp8εȈUسgԩ_9wn[y@kVU]TÊA+d$i 78gD?0aB1={Nts̙W^y婧mvw 6`˛S2oW_5wV\6rlS2W_{uR5`syx_^YWb2J335pQӕU7EJDq8rSNZpJ*rC KźґX3;mp8ɓ'G]j) ܔ.`%ѳ 'IRpSNqSpY{+pӧO_wuVp8Myù9s 79eM/k䟯aS"* ̅R; �^X+1m �^JL䄙Vu RAF#J+E-�^h4[ݳ-n#dpM*1Bb#ނ1Wi^d1H%i=3pE\FDB%ĝ-8c2bf�dGNG79[VjRL99sQp<\ )??z?~㾛t 7T0+Fg!Wikk[b2=Vjs0rrەnՔ ߲#gs'<u J7(@!DY{`=&j͜1ĴX;cmvC&vj4ڬ�go auhJҹ֚x9( yyΕ3gxRyùf�S?Oņ.K T[H+Vi%+͹cR2"oM@r\N Fb"Ǔ3smuêTܒ u+c>S]uBSg'J+2^DZ%6�@h͖R>�@`ƥg&;{&Ub? "VbC_3<8s̷~[j) Cd ><\,!K(cJgNbL096ks!"D3YuAu( EV2 D��@S0"((WbңkX]魂h>hZ~qSkv;-聁z+ғTw[wZv`�O[55vdUb�yI4vAgIp̙3()p8и;~Q+"032@ 5JL ЖSe7ʦ<U.tP#1J/gf=f� >L;`? ۣMO0�` ,��?8 DM�UL�n�(D,Ru\MSyg`={s2$?�?aD�q\Dbs]kkk3( {ga HL!ۢzu)BO";!:%K$Fl ͮMh&BHC�(d!Ƹ/e ̅$NФ]Z|~yѫŹ0fqx^緺) �To>+rmINQFs85P_ Za['EPfz.zc"|!{>fnP]ЗUP2iXGQjuT}F閤X$Q<,.*r@YQf֕j6uϙ釼7RŹP|?r1!/A@]3 `1^. (" �(zË��S��FxjYB`79o=}tUp84 )k}V 7RQRKbv.%!r*kRR;仢1<QО P|DЧYN7ltI?+FXGDAZ%Tzx3SduE\^V$zѬfo.+OR=?;OV^!ndDJtnEjRJJ:_"bMZ05SU)m- *"ƈ�yX%%q88{#Jp8aٳg{ٳg^MVUUZEesg(}Iu%LWDʎsYr-ˏ?x„ ee} {:u%qY:?_}ӧǎ;d#6~ﺽR g>SjoW_5wV\6zB.Ivk ^Wx�>R2R\Y1JDq8+ WWϯ7VVVv 7D pJي:!su\DԓHNmgKpJMÙp|CQGy:m,/6v��|Nzm[MoJN�cZv�8mZvr�;+V ɩH@DZhR8њH^\�8Zk$`EB-eMK^!o>_vc";TaP~̪7pXQk8?x OYOoJ44ެgғSBI勹X?1ƴa��4hOr-k}uLk4JN[1Q��(^4 IG,:vLhE?&N�cx/E¾Fǿ&utIŏYn �_=N77M#&&VBclh4\>-zZ�p(B3Rfz}R:(۬?;(&߁^a>ҾuɆuADE+r?ʿEZx;yޥءCy1`͋iM$ ANh>\APC䬕'yxG@3wOnjd!{( T"C!5c&.u\^TpZLr̹<2NC }v"Ƭe5Y99�dw5'S寫/NsқeͤCeI9fh}K* O0v$٦4nJN8lt9kg!͛c�\ryR؋st9Rێs!anZ" s fwV9@484];wwfy&s"@O9Ʀ<sO/3+AŜl �5k7&҆^˜gDgin8;2$!ͩͻuk:?қ]En֝Spkjt̊Oo15=ݼs`_4=w;;fy&c"�_iW?Mw$M@vuI.>3k~r{鵃a79&BJ2c/^��ˆ$͔"8 )y:v)cഛBKKXap6Te,|eQ_<x# ^b��ͨg<X[TnnT[`wc: �P:}sv r@S_=חV8E7̚/+O~H;{NR1hFҘW˖_LgUX<i~6kY95ikj��nfs ;ǒ2NYlH|zzwaΔ?ëXΙhr"=m899��"BCrc$4vDEvWᱮӐh)-zbg {ޘui�i=sn?LD뇴hzv(Ez]@ y~_+T+1ɺM^X+15�P;QCHH - �HĤJNA�4+Wr)SXs<R `\1#rK G&$IM*hV}2Sa\)Hĸ9纍|canh%E�I%FHLԲ~�AF#J+E- E-߽ٚ-wuf(hH1:|Ҙn |qZ3w5� !4㘨VKV)QCS%u.��0^cĸEzWb< 7Ӡyes <]\?+D�Cؙ> G�!0�j8n&V"&3PÊ�@[47;vbc~t�hƲY$�N eN΅ԢhGyn2[ZLav3Zfn3-"HcQ95+n<¬Nsc{tbaG՛,.gq&i9cκc%]QŜlsvE5-VWB}JEӸ6%i3r|P(QEnz�q^uğy|{Om?̚ _d}{lqҥ3k~E}!ݠxui'BHԒ= lGۼTJZ!��RVFJ-U&QڒU1X; u e/d/R 6I6DF/�kw)rfcPn#>n`o%#KyJ[ a3NrەI 2P�� �IDAT�@Kw*FCzˉ #> /k&bf<�f%Ӑۨl78�V'"5iiMKv4*w%l;1k^*mdj$D}qadB*pP�lÿ-mYe( uQ6[fwpZOo Ч0ֱY|g䘘+7o?Tb"F�͛5kki;}}K:EZT5.rn\GdIJx^|ULSץ;Wiuՙm+WnD�Nmn>��Qf3#_d c_�3=>,^s.社-X_kY.51}��ݽM?W@s2zϴHI7S'zc!,˵ڵNs]Լk;1:s_sM|FHSay;7b:s. ��;/{-n v߼Ë^n~w}GjxC*4 ӆE\ |#Z#�uA %ރ\ӕkD�VϴB$!V*/KgXߕEV$ub� %dOVT%)m鉍&Y8(D�PnwEIn  "՗j%"ZޡuY.<:@eSI*>Q`^f D+8TXB4 񲓔S(Jp3 P3"@RXKd%L!310^FK�ԲX}U"7{A � HJu"٭?/UF0T"kq"!a25tPjz-hw}^3jsw7YqEg �Ź�i [y+�Iӎf%lu9Q`gc'wԂ4"n>^-y*椦=޼؀e˓?Jx>t N:'2�2u<f� 9U?�YH3a\vuŊ'JSVgylZEO!(+�JuJtEnQk�K<:*ʟξXhQߠ?5+B&+"%?#7!@xl~G܇|r>6'>_,J6<@9@k3/2=}/҆w(bO�pêN�@nDt FV*=B!WTBX,L0{PUPA$] "ZOF+ 7�Rdb\�H^*@{a4ܗFtuA%�@dftG{Pg 9e:]0-@h1EḐ۔>"hZ*jSC_2-"�,`# &7�0PVy&%SnW�fFyrڎqAJ:/t%%Ln3MKUPqJ G_ɓgG_$ {Xnu5E=ZPX+k;\}R{5cSqM]ƦH}\+�paIhQsf\$x݂gΜ+7%sq+6�0}{]>dznQʧ?勜ES}R<|瘞4=g"' ?Eݞr�@[inϽX�m<f|yyMJz{Ki鮞#]_g2 4#R]Q-㱂j8r==v*#(_ vwK1cR)4ZVrcDR %Cŵcb_=Dd!33LI�1SÕ eC푗$ގ<*{d2&^<yT�c`ae>SkMϻ=9`C�$ N.e~p8A.صvďn@8n6Jw9%g,c?2Ia,9#*d!;00ʅ0 ȋ#*e*4nK#ٻ&<o?.c" `�2P$4 YDH&"=ҳg"z.}ރ<{:r;Qt7J (t `)^"kcl0`l9>'U꫗2?]{Ky$l11J*BD*qz;W9a!c)҃PAvIxl7 ѱdU8F=( wDrHz @u{Lzo:7M^ybXC[}<+ruuu��RíIYDig^|-#X߲(rH0$O&}[Ci~xN d" %E :]!nALIܘejd# I$wtFθŠu z3ѩhPxc1!(}W�=tF6Ζ;0n`o8A[b  cWc_4 DjėpDE+DD$B?pZ}b "wE�aWd7$1Te[O3Dk';ʒ!Z[[N��ڈu)4NDU5iTV fN/6;_S4ߘj-Ra bͬ L>ikzmi xֿt"Ftnʯ^XeOY2#^Ω7-9d xF!C +ʯn_5m2IrsØc[JEr`.jӏ?ы�*uW`tqM b͛mF/,!o8y e׽jpsy *+"J[]V*7YfS_}&++Q_*Ddnb\+5�QT46Chk 5\aO CBRRRrr)��@^]^^^\<c@zkD&,hh@"AIRۭqcr|.t{ˋrʼy/'ΘX˝Ŷ-^^)LKKg>[|UU':͙3G f g>2$ًϿtߝ1_&Jb}U|Ǿ4ÿpK$4N٩u ��F<` ,όe63UX`HJJU��PC<^-{o0$''1B��/F ��鰂 �R(nIW`z%"c7K DR~G""[3x/2X!$a=og^I 8/2B!G)Ǎt]t}/N{,5~xF$X'4 <_$ ̈vLz0h+o<1[d9Rgq9S Fv<oEь..~ŧx0RDD[Lg^bQXm(^SqUGuwYEw{GC'`pINNXy�a+|녣_7-U>XݸҐx̧KDICO%M-"U!K{ʘ7Mkrٷ:#I8EV#e)$_zlH[MsJCN;B m1^uۼg#@DĚr"'䋲|Q"",[$[|+$XPb \\F [DW({eGn\mdi/)<Ћ,X:h!999k��RێfzM/sm $*>j=ɲJA_79"θZVsF~ow6+\/Pm~k\%"*Xd`ћD[7QȷIy'ݱ[A9Y+O1%NE͂W޻6aSF0Cdz`T]>Wҩ?ܳ~Kwnc]v~W7u]]E{;<Yܱ.kN{ڈ=Kh_l ?ÊP͖q蛓a&T&? K+�0źonF4*xrwJWyVvJWDVeX""cۯH,ɽ tB+[uvJR0(U+'~x6z}қ7},vߚ89$uu[σ9KG6�3FzQƻTu{w+ǭ! x=Doh)[#5ܲy )5Y὜)LD~μ+g߹U+Ahf S:|lڼ0nX}` O52&E̜pۦcw<J/򅉈qf &55Q��X`Q6 {ZKs+Qb\U=&+EыWTx'}h  %"q޺5D9}4Mw)nU]ߘXd8WzkP Z<yom%"VU'w徖i<5͘JDW(Z y"&WꅼI,MKD/Շ.yKCIN8"Jv*?n%p::]O|M!:C2D4rUi'µ@XJJJ[[)��@jռQ%З gJg$!F+XqX1*ѮxEV7ȒC CJ]y^ Iߨ x~ōDAR/Jk4Te=JNc%ڽ,K s5V>` {C2'<"+gܼZg~[B^K<*0I>Nj`i7O/›XҺPfO[y GnUٙbĈ?��B̧+?}y?|Q%7FeQ~ `4H^L$MW?(  D J1FtFG߸io3vs޾GH7 !)DkPX"DAq#TR^?Di :RWyǾhIݙXϯCnz{p ZT+è<A9k#j;U$M1R}Jԟ sZ߯:5ޞG~':rZ'倂g7)))iiiX�`xb-/Qw5,(iOo^Lܯ x)sY""o-Ra bͬ L>ikzmi xk\F?zbsovc3 g)X],E<&`|춡1h@7YqFn(g߶oNOoUuV__nϛzK=Vg?M{e>(y=KzIף ;Sz]3YRw vW;n㊽owjv=θi`pD"jg)��$0]W.///.1 h=3(艧%r_KEEEQQрDJLKj6~p-B%bN�}:}t~~~ZZ_?!d'eΝ{GyrgL:гm˶׽uٮϖ^uSuӜ9s2`v}pv#c䏏>g/>bR}wz+Mw@&}i>�edd&R��1/!NV߽5lkx?VC�bafS��L)5m r_ ,quS��b?��biȑ�L<��*333kb9)zw;6<# m[@|YK(qZpg{{{3HO.:th@i""j]K &��̺:S Yf͚5K9w… 2,8/=[?[ rEEҥK+=fԣV o]'jW=kӋLQ��0!6��@ x)`\F08ժťQړO K�FuUS��@zky5#Ok1>�04vئ&S��@e'qP�ʺt)�� bMj\=6!QY1>�04f̘'Oj"D"۷woijjjnnrJŋggg7<8 o۶V=jnnvZo c7Wĺ`jږcr{]Ob|8�(;;1'''{kNdɒ-ϟx?޽1###;wʕ+=M:tx}*++xb=ޱ*N]IX\f8k<g`_�`7nܥK8=&iԨQ9rdfffFrzxYF%+++_߁.{[|��Mnnnmm-JD"ZڊYgggbĸ+�@"oNP"]RQWF"%%%Ηŋ)))]kSSSmmm3f,\R� <#:-55U,c„ e&55G#!+<f̘xYoCCC8\oB)� ɓ'k$At-HG# -wǏ<y2֫I=^#F'iu� ϝ;u # <�@?~|]]]GGANr 6+ ׼Id:.%%�H'OF|D"p8u H.\xGN1D<�@8qbee)�K.=cZ�xp(�ǘ1cpCCA�4\0�� FIaD"IԩSN؟P�$ɓ'WVV&PD"6S =ēW{E)�hOk`P;qDII)�Jy�D3} S� ^<A�Jy�4k֬'Nh"`|bD"~ ��0L>= a`X_?Z8Xy��fϞ}aS� .'O9rd^^A�Jy�TPPֆ5444Ȳ<g� �� K߿_CӍ1BZ[[ٳd@\a<�� UYYY<?~\ "k޽{WZu 7�!lƌΝzA�/^ AA)�,Yw^S�hO>0A�Jy�ۧu!o̘1Zeʕ=Z";;{Z!��/???##ɓZRSS33SvO: իWm۶vdfF1jԨۚ$(C)�0,̞=ҥK/_:PLj#5G>s5ӟ[VA41u���EܹsG:᷊LNjyQ}nPVK&bNXlbZf׭S4y71nU<ftqKaH.'5|Ē K~m8~'G eZfqH V%$&9vJ\dgeAd2<VntB9 PP;Va. 0,m(�gyf۶mK,ppS XE+ţ\dyEdŕKZrwb�� �IDAT^zr&UMNiV>|ٯ^d0zA0!dzMj =^3>p!ioO*6]d}7d5Fw2z&lRdq{̬4[ �^VZ_hd!E$l6[= ʲ qܼ01Uo@{Ue)貘Lja&d+Ck/H}3fOtrCƔ, sDm"!cZm`y. qD a Xj3a+�0L>`͚5))WycH$JsM*:$"LF&G2',nȨ$y|2Z|߿?)):3._V [G~5d CE&P.:f �^xf ⶚,2ld1Ę7EZ^vyc{(Jv9q6+YfvSx8{cJJJ&LulfPeIܶ!?כDVye  =^b`"ȝ3�N�}:}t~~~_+L?!d'}>Gu#==] p<0R -##C ��TrrhO\uAtpsݻwO>u<Eb(�k:tٳZg+++N$'|jW8qB1��3<30nZ[[N1utt8p}ٲe <dP{{k״NC��ZpaggЧ?<??_E�Q(�h̙ƍ/2xE"$'O~Db ,SE%T � Fk.uҥK999Z.Μ9sر{. 2H$NC(�c.^xSN%3H$IRrrc=VQQ /^uwcǎ=zX�/(�6+WEiG{$={VŮ'Oɉ˗/=z455u…ZP�@/Ν{(;V8ill${ODӦM çN:uFS}}}UUUcccIIp~��@L&S0,//:f._ITfzQ�%��`JIIYl}=u/}]=###yOGGGsss8aFDh"b<��CqqqII^]]uxξz튢,<$Zķedd`/}C)��c4/]gϞVq$hpqܞdd4fW(Mfd)!SHr^U?~G"O^zj?t&d$Nl ��k}ӧMu8EqYYY (r+Vjmp :]dyEd91݌S(d=kƽy|h!Uzۤ^d ]H{KKKK[[[sss#F1"b<��܇5k>|/0 Z'9NO8qeҤIV;ɲ*pDĉfN8'"Հ,X 9T5㋬k]Η_&RXK 'Da-D3;\p8woiiiQG}?m4AHJy��os̹|/((&LΝ;7o< RG^Y%A>H匔:e|cgq)s}$&."IDDJcdx"%%e[dYXtVb c�A;vժUp|qA%̗򱠷a2-n97= /iwGzbC2 hl&dqծ{+~d6[}ED&)))--M1ua�10x'>}:???yrCeffΝ;7+ݚs-\P ]GGG[[[$IMMM ~��e˖quP(ueɼ#G)WsC)��^Um۶%d[___UUtQ :ׯ_?r+++ӓ@MMMǎKMM=tYb<�� ^/b(UUΟ?ܸqHZ',.^m+V>}zp8{'|r#GN(�` effXPP{߾}]cmz,˗.]6*++o~I&=쳂 $%Ad޽]ӛΟ?mXY��///h4N:C9pɓD"ju{:6>x]xbQӑ#GƏ?j(N`}uvvjm�X)**[hAȲD&MDD:.Z1?|J対j޽#G4s:@/뛚D"p8ھhѢ4KD�@ t9spȑ'O7NPرcwO8ӊ,TZUUUYY9nܸS?^D�P^^}ӧO_|yرO#(� 222x`08jԨiӦegg&766fggt?ȑ#G}u'N$2uuu'Oя~0$Յb=))an]tlԩ%K4J7P�@3駟>Y9sffff,O:uF6mZ0a©STU^($p8\YYYUU^XXOh>DDuvvv_MP(tڵR��*/////ٳ~ܸq3g<x`FF?۶m(mmmw/d/\I�._\UUUSS3eʔŋ'Lӧl0z'<��h`ĉ'N,Xн;//q޽(j9?''ŋCVHd ,:i{ɢD5��I&߿ĉ=A8qDsssrrѣ<QnxIL2w܄ ի,G}PR��4ԔXQF]~?|$p€gxbzzzk\|ի[Ο?Ό=:vcpUUUUUUJJ A+8q.^c["HN?qR��4ёߣs=SIkk'~R8p`u:[+*Z"IңvoWL0yܹw߬徆^t):fɥ }GExKt 'i:$y,gOkWY(SQ�fx?|󻷟;w.558z(EQ\r掎"9rdJJ#9{r^̙3k{n6bĈ[._|[[[uuuMMMRRɓ �%xpnjN⹋K?.Jy��?W_UVV<]ĉgΜy+**>裩S_p… iiiƍKMMTUMǡSNe .TWWM4��P�Ɩ,Yr^r%??ŊDTTTTTTݻwϘ1gUU=0mڴ>R,N4iѢEXC)��ڛ?E1n~…UUU|Sr31 3nܸ &D[Ξ={…˗/O4i&B)��E_0" /5& P(D"HjjѣnjSN=uTVV֙3g})S90�h<�� v l߾$:f8麛˯\2~)StsD"W7�a<�� vyyyO2e CUGLM=Ξ=k׮'Z]]=iҤٳg,�0L$i���.\{KQQ /駟F"ѣg̘1s̶ݻwggg'Oj�4R��}h/**2LD3Y'477O0>+++333zK�VP� B[[,wޤ'>˷n &LvٳgWTT~]`^���0d,].ipI9G?E1??d)SΜ9j=� (�`(YzѣG+**[ǏAXzuqqqFFFڵks̹.O=ԕ+W�4R��e˖ɲ_&lӧ?h߱cGRw0aBNNN (�`Yt$I~iffftIu|WZZ<�08�!yϜ9 TU:Nٳg̙yyyZAl��`+((Xt)0Z;w<:�z@<�� D<X]]SOj�>K� >*++�po.\~zaau봎�T|qqqs���@ٳg%կ�a ��3q{L�0a+����R����`H���rn)\zk--ZͿemQ[[km?s'DDi«u\V~B*i3l$S:'w_ӭW3ǷW"5q/ˌl10mme!U6l}R+jշߪC4SM3}nP�^=҇eDj-o?M̢7|]FD??:n[բ}LFܕm 7w })eTD^ N뫜_䠞ge6y zugrW:?l RéwxO?4=H=v|-Zkk)R��SˢKOU&׾^QW:~;~}s{Fx%3vm)\5CRjE6ע_� 9Ubzni>/z1֛jn̟[_w5_r_*hZC)��ÝThܾR%V4"([2[S N5\3<ݤw`z^Z4wC�68{{->؛16N9<ݷWCl/W~7� ߇>гJN7F2!Ce?m趙z]o23P-zkin"c{S*zʵ+��cܼ9ŷj6OS]Nkt2l oM%:tk 55w}檲?ļW:qgU*֪2r-{$mU|#ii*M%%Va(`u}D"Zg��H`vOYusLZxܹZ?n:ŀx%E|{�`0@��CHl� 7��^����$�����CJy����! <����R����`HB)����0$����P���� I(����$�����CJy����! <����R����`HB)����0$=T)r:STCǺ[|HN` ޾t[Ey _ߦۨj <����pwg&AW1Y"" ue2n_3J^Q0!$^M\]1Lg >����<�Q <2^d0Ԡ,Dh0~V^،+rb1F?PHX zĚD${A/MgG{.g ]&Hٍ(3mb2 6BV [Dr^VYopJzo|fQIvj6l>U L7BVLpXGeF}# ����@=Xyb$K6ZN`ŭw>c XD CA xÐ$ v6eN^\�,)2_ ,u@/z~סWjy%TQ߭a9H٭~'euRC$:n8}4 Gzf%3 #I=pYVMN z3H]6O}1����`y6DbQͮs#06""9I%""$bpc q8S㹐,:ꪖ!`3DDN 1 DzQrY@KkDĈ#gscvdY1ҿ$?: ����CDnϚ62ĈNح4 1̭߻ bըX%koH8O2z=W &Ԑ?8"Tgzz+onp񄜖2Y]����/PopzGpMyȒ;WYax#" dp9A ?HF=I~_H>6oZ>gH y&;9.ABH BgH+(SLV"bYU"JCK ',xjЭǟ$��pOmj۶-b}p89bĈX[�h(pvvvvtt@D4dv@ę,2Z/-VPƨ*#:<pvѢy^0[Dћ7vdx=s{76o(XU"bf2pamBr2,<x""FYV/p+p=X9n6o3vYDA��=1u/@555Ν[pa^ZR"rEEҥKp,M"ȝO3X(AD%c4x! ߀?Jy!'KO8 x,b12zu<���� >({Ou ����xu����@ ��E$ٽ{wk׮555to?Q �_v =gϞ#7W��ݬYZWWWWWcZszzz|C8m\?ȟoB)�� NӽG#� *=>m1V��_RRRN�U^y��^D"ÇwoQU… }]ƢF>8Cz4fee7W��]#Gјgh}}}vvvƔ)��� N7u>h"͙H0=N qVyb } ���q(Z�jkkKu'{R��F-˲)�_"HjjAb<��@?V�/,i"+_^^���ȑ#3fY�~yi",{\� *�\}}==Z 6���a/^ ZsăR��L:� fׯ_eyJy��STTT]]ѡu�KJJN(��ٳ[S�@/_>aJy��|KK ֘8`0N'(��O<N� SN9rA<��HMM}i�nxիWMuA)��4>��KIDAT{1e+++�%KW(��̙3eY>A�O?tҥZ7���eŕZ۷xbao)qȀ �WKoD>2~^o3fL!۟|QFi`ٽ{wqq#03z4u⫯|<5j}�1r]vj`ٹsܹsǎum$T)ODtP <n3uf2IUBEQXmhh(**JNN.//?|qqq07oNS>338Ft:NKJAwYRRqY�;vu N|eZc&kG`g}q�u<@\Dм|w-..nnnw߽/~ј1cbW <L(:{A�\GGG}p\ӠϙZX9>@3�⯦&zM7u׿s<� wϙ3G,�ȑ#+WLKK:A|NYT}RHaY�1w@|Ν;r?\ � ( }Fu< R~wE&h3a+@̭^Z�ڴifϞuֺ:�$CSOidHR~m|I���hر>lyyѣG0}ǏZgD'"Vг�`PHJJzꩧRSSwqu� U`{Ǵ2 i S^�`)**?~rrrfΜuDCbPMA/߼)G˿O٣0" ��`,SO%%%y .h`hoo߿(zꩧA: 5z/sp@3m-,Q��0̘1cҤI?>L ЗSN;vl޼y'N:ˠ6JРP-;�$ѣGk`HJOO_d?駟O6MD�K}}sssy SŢ"S���[~~~~~#G>;VD�¡CEYpavvY)��ٳgO4ȑ##F()):f***Ξ=;eʔyie(^g.CO ump ŽBtI[p+ NϻHЗ;Le2fK>1 ��%;;[|С6[UUں|)ShgѼ8gϾ~*iAtt2n qw l=ZCVi�M0aժU<ȶmێ=DN555۶m_r^OJҼ.zxgu5ևcX%bY6�}`HEChGxNX.kقP${$F~/2Z"O!"54HoaYa/utjm(6 xas^=,5!z "o_l擉BÍx帪uѰ'yR ��bi=\jj �PmmΝ;QC㽶߮s`_k<O{i?j7MH7M[Hy+%/~|!lJɋ|aڋ5ye?7|ڂ #Û<ޙHȦϼwc5:mveꉫ\D^]Vu/a"Hg{,| D3%tF"'6/x潆Hs+^7>{eچ='qJUU�=zS0._{ݻwk% iGҖADd`d@ DXasE!)R D\{6y[L$ &#KMz7Q0I D$p,�!h֬YEEEǏ/'MTPPu"PUUu\$ARʷuŬ%:1DaaoxkC  ]8R0wR6l |cbg)puHO ��$gpZ9stvv555v B\26vߐ\bsop8\{?g=SRRHr\p�ڏ'~q9ieYfh͋+9V~)T?:aTEex%R^aq+$" oeYVoÐ�or9rdgggcc#559)Bt;N7I9Z%LVfgwwok1O/=}gRīD`s~$U=7wbMMR#2jtaw5ٍ52|^fͥ!afr&`4 n@DdX~nv|>��^ntB9 PP;6.Pfq:;;" zxLf[}Vf.9FO$y,61/i. 0,mc-krqѡrY:dRR8)M f1d+3i - 7-t |Vyopq(*_~/~vO?yA^!Qk\|{3o_DZ>~/^|?nDٲK3g6W4lYz+%DlXH$iزz{GzfH˙3-Z?6lZaOK$ҲgÒMGl(yeOK$rȦ%hDZv[-.t$ixeH$rdS[~;\;i+^���qݘ.%I*gH+iD(QIm"+/pD,I~L*10Y.:e98dN",KA&RH1\a^{gC:]k+VV#".t%Ky���'g$I!]>HDdf$))I_iWd_X)$xdR$XY^ 3`ƌX#IVI )DnL)dYVf',nȴ\<sHgg E/9߷rH2}j=~/R��`vl6y en 71V-īM)9$GF.H[V%fw0lv z.R9KOeVdM&_HoF6o"-i?KLJrkZZnXVUx!Z 1(*XEz:tyyyqqJ g:)rtU~~~Zտ?} mmmpʕ�DRSSGu ��� "999===56[PTw7tB(E@ihXb@jCaG_d)'U68(ւ1T֠#1#h7@r[}hC;p-_d2FcLl<icttΝ;Fl6\-~??wtHV/)(3�c0,Krr`uؘ֡{ᱱ1I@_Y?w,~D/+4�0Y,r…@ eYvZ Br}$B1B B|${*��7gΜ9s ݻw˲,rRRֹ]]]@ >>^Jgh_k˚^8^xʚ%)o"r�0MXVdzx@ _Ȳu.Ģ7oߟWQQ1{lbʗotw^|Yj-)-8oת �`4/]N:XDk׮ɲ\WWu"<ALTy!0,_h}p}azog7LT.��쑑@ 駟ʲ<w\ͦu.h#ϛfY_~eii^]oN7Ǖl_R�dIIIn˥u.L+Wtvv^pv/Y$99YDx6Wzx X^�p8# vvvnYSSS΅ɢjgggggdr\^WDxNWYovF ]�gf=Ogggkkktߒ<sa".EQnwee%_N*?No^Kj��2 {aK/.+%EB[===Ν3 nhc:U�?qht\C\x6W^Nx<nnfS��,...ࠢ('Ot\.c\$Q+\DTy��dɓBh7 vo߾sd#{dz ]]]ϟjZ Ty��Fct%}ݻw\yйs***xÇ"H|,*]֮{SU===III .ɹp8ؔf昞!��`Rl6xE9};wNX|_,EBbD9|GGGx-Z$IR0lmm5 g9]xQQ^{g<��x~Nt^~]QtDž)N8 8p`krl6[mm޽{322v|W MP�JII))))))NJJJ?ϛ7OÐ:uez_XB:3U��LP(D o~)3WUucUUp0~jX,*��&$I'O|饗_×/_rJ0TU5  r}&ɧF(jjjRU5!!h4vݞ$I~qqLJFTEF�ɒQ^^ Gt @ ?D,((BUUUUݻo')T]]m6FƍW^ ===---n[ev%EQn޼D?//O @̠�e0`}}}(ReϞ=oh]m....>>~|N=999999/^666F"y9Ϊ`0ܼbŊ񏥵l6ku Ty��0z{{,b)--]`Ν;Z[[].ؙGQ[n[ l6[eeCFGGpvvvYYi ��`r{1L&\QD5w\ Cj( *(JnnSRR-iii`ptt499911Q)Ty��0Be=XVV}ϟ?`` p:6MSitt[Qt:Kn;Q�$ ?ԩS-?DEikkSU5MyҩjkkzVuWCCC7od~<%<��DEEE?{ѣjdYeڵk|0TSU5''W_}WS :v��@W_} =8?{Y445Fcnn}>_UUbH)<��oD/hC��1LoG}422u-=zn?WX+��d6}]gʢ9zzzΞ=[XX|<U��h̙3;v쨨HKK:ΤqիW%KjD��1oiooxq&۷>zӵ�R\\\\\qA&$IuoS��Ĝb~z_U���%<���K,��kذ}X"ZqKCufzoOV!B5[v3|H8|9-V!~U"<4jHwߡy }3ܢԢ-o>:!BGV-ܐ߷zX0P�}!# j{OJ>Ef6yßk>NЙuK>+56mR}ۖ !BG-{f]oh\S\!D>J,gb<:ܗ)gMՇ*��'tHʍw%oVo>E:5<]ݰ@_ Y~%Tt!V :ulRX 6żܖEu44) <*��tHzgI9UzK!ai>YбkfW෾iW#څk{OYjV5!W<��Jj2wECmRl,yڶ7.> [߼_dl5}kͼgɓǤG0ᘕ��:Ue +kC%YEoK־3gk~\ Ie%~Z#^Ym&#LBHYoxz~_$MbPU ,xk�f|5g|b�˽ Zz���@���.Q���]���D���t*���U���%<���KTy���@���.Q���]���D���t*���U���%<���KTy���@���.Q���]���D���t*���R���udSL0LbP�@Vx^S�o���.Q���]���D���t*���U���%<���KTy���@���.Q���]���D���t*���U���%<���KTy���@���.Q���]���D���t*���U���%<���KTy���@���.Q���]���u��n:::���0,Xu�L���@���.Q���]g����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/flow.png�����������������������������������0000664�0000000�0000000�00000010757�14332737457�0025044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������~��IDATx{two$iBFũkD”悺iJk,kUg SUִ3=SZ=׸".IQEQ $Swr~w󟝵~~/dZ(ec(Ǥ))))))HzLoY@/u:#9[f;f!7:<~fm}h5 =S"4<%BS"4<%BS"4<%BS"4<%BS"4<%BS"4<%Bëk_5;U-HëS,3֜Dz){w&tmO+Ƽ4(d|FkOX?_z"$gAh]t~Bz*srW WDZ}@ҀG| chG*cNg-' VgJOfJzīG^rswpf@ no>.{ ќkąvM]{' Ù O O O O Op_=Oօ,n qM7 @օlrK~\Qzs* Y6gnmѳY/fdһBý:e $̜~sؽ};α`fmڏ+Oq}.P125r*SxM NNά/#l;^Aһ本VUz[Xzp)V #UICD̋\/Xz$rgo'j~AISϾMǹ!#!Jd3v"3/KӲaK_k�i&r.0rX /(x{2&JtX1tgȲ!TX㍺vޥKD͏1{Kt_}˼H) 'HcvKs8)ShٰHoOօ,flASHTX+qNӜ~\%=Nů2 kҁ$Q+;MI҃K[r86o<rrj4uCz®S˫^ebߥǩ+eW"xymHMxfȲ! ʸ8$=CɽK;SR^¾WȻH].~!icpwqȺE;_ǟݯ6rPM~9%B}O<2nhDsG&s8~>᝿zQ:&Gz4BҐ$ҳbVL�8+eW]Ibw@r0ՇW39e8)S,V Id|w'rI>!O?4KPL^¿H=JҐ$f>Ǚ~^\Azone֙3GQZ^j=[3NeHScZNIܟ5c>9H#R%:љ˹O4L^Tz/MlX_i=9E9 Ճv7b22"Іxy#Bf^&_F\/W2r ȾMh4jFw6~mX;|-fP ,VHUf J j!uLC'z` H=J¿A]NfFE}ɹÎw8ܻ#U' Noԧ)Ӟ&=R 5cuz#}55r*.bztZ4h6#Gz >Ԧe184#=i|Sy7"-;MzJ6 k/Ԅ)ީY%BS"4<%BS"4<%BS"4<%BS"4<%BS"4<%BS"4<%BS" B3EgnweWo<;PzLùsYS7ülQ"FuߟSR1 '@W]\(r1bڑmFvߟO$=! k=g_x]z{2Lx�;.77^bhS:;9kFEؓw&ux50:vI ==*<j{ܹb oTQOУ]U o=_<$y7Fͭ}e3kt=s%1y^ۭUwocUV' k7`eûxcվ޸_KѾj]Ӧ 1 b:Uz]|u@Yi>ÃW#M/m[љd[v!n! O O O O Oü"v%}Q\ _tpWZȮX3gb#&:_~x v/Х[gofWggezc%kOC>CAyX@9к]S4#] &qn>ўO7=?yL1+<?]. 9{549X83/Pߦ#@ddߧ'ab6r>c^&p ^1gh"=dzPB zlB3w1prɜ]m3|cs~ݒwyq0טpyE\.#is60湊4 NW?STKefZO`ۜlqISN>_@w63k1tBHwo ه?IE9L?$P^lgpe#ݍyPc O O O O OHJI 6n~lm-чo׫C=«} mJuvߖGR}#?ќ-W޶};``@>(QK@zDhxJDhxJDhxJDhxJDhxJDhxJDhxJDhxJDhxJDhxJDhxJasIzSfa7vžz2g]'=iLX?+ylSzY .VݧwKcxn4ӷMJ I�%tוϲw^BHdH Xգv /J @NQs©Zo_`3rb 1 bf݈u87<2&’BGsHd�m۲:niƯ k@,j`O=?'<Iʘ<\=GS# ^\[f8 -[LyaookGva6SR\/fHds%%DϏ峤NzMGS0dwiV a #LKCl'äG1Ӆɹ+v<ѻyolblȂ լ8Gz!m/i1qe lʘ:<}yϸ={KHu2 3//#iR ^مHwgiѠ;vnAL .09KP^Q.=C3qe"<F!=CMxp}yV,Z[_%=Nܺ@2&Ŵ ĕ1:ރL6yo{<bfb7 ĕfھ  =] K kqe_qmy遥~Ig ,SO7rܹ1k#Kjs-mDEi\1^ZƱ n2v\`.)/bo")SxpsqRa!&$Ʈ+cWj陋w#z6y[tp/Rnv kZr‹[Gҁ. /r.{ֽ_L?0Omd`aoa6I]{9$OйCw<H}➷y#G]DŽ.mWn)kYrp=V7Znn6!}|n)9�z.vk-l.%y,c;>ZA+VLʨwrq:LJrqqSg98`xtHUM7 O O O O Op>*=XǏC m)=)J wŴt֚P|Z̢|LIxUfgBh2?[2YXÑBJg.zīKp맲x?p0Xz2 W1 a]^GEë;Νbih#=蓋*sC :s2|4r2OA'}VE;nNc =S"4<%BS"4<%BS"4<%BS"4<%BS"4<%BS"4<%BS")˾j-:.|/L8 0E O O O O O O O Oj����IENDB`�����������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/gantt.png����������������������������������0000664�0000000�0000000�00000031022�14332737457�0025176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��(������B��1IDATx{\Tu èhhVPjb:۪-Ve ePkSR]/iziwUBe⦆ rc z~pǃ9=1 @DDDDDh�DDDDDDJ(AzC JPDDDDDP""""""7HEDDDDD %("""""Ro(Aby9y8k(#/');֧WvRgyy9J_7'a8HVsJ猈\[| 0<\kcY`6XdQjc_xAt͎X`[8.&aYB1L"z?�hv #Pu%);13 p2S%Ѽo4L] S渶M^:d;4r_؛1eZXK#F\FّJxpR`ڽ%>,J+`L O-"WW!"r9{a$swBrASmBk3NNpH,Ĉv$X�XIz?ձ\HfY4$/N%h>8)? ڑgg0.w؍=D|c^_S(XGe9E%n)o0cFYH A<mD2b_qE ͯpΈ5GCDij$3qrUݛ Y4;U xUϱ3֝DV ؁QK$ 0Y?%k}ߧ|~:#BgUeofxa~ �XZP0Va1׶\-,qd 0?.#Bk2ԙTB猈\sG"KeH|i$>>>0h|,s/ܡM\Ru}ExR3]ObRTY TKY]sH�/_r/@ψ#}'Rg6sE$,3ٔG5f5;Z+yz"#->`+N%e>ˎN_&^"Fi{2,I^D\l}2r%5`mlip`[1,6T6ٹɃhx"Ȉᄏ/;NGˎETVzLSI2|,#I> /=(KYU>gj'p'Q*2YS;gDl9#"CDS2 `0ja**0� F1sf_,]l^f5ň1 DK*l{ydi9cь׫ahIٽ,*+8% Sޡ0 #{̊U#zF8m-]:jeiʕO+mI1ڶ   ˨Ʋrm;eMP/GFE  m{Ř`3$)Fʟ3b),3K%3ȁ%m0Ř|}:i,[0ӰP8oS˨F̤ qYF,wZO7ܟPZfʜEFb/2jhKg9Qp~ >gDZED<`"0f&agX s*Y)6bVLP2e԰B kMe\w\+lSS )r%(c2 ?u6߱ZktǠ"|<0 v3%a [wbQ.!y\cՂFL  ϯ/)gimn*cʤcDZe%˪C%])+0F}:R]Wݑrgf+a_\N& z" -^3B[ދHccc.)3jRYvx^kx$Ǐ@a$gmr ]{axt g,*WM+b LVnFV9ZC@$;Jv>z-eFVaLjAl4oiԼ9,8gk H Ѱs,f 3XŸMHZ J`xٙfQ6 :n  ~8 l{p\BxwZBu-F;t*[yЯ{KDte^{ab�{*lzw.01;?-\ ] +Qmj ?oYPߋm'ܦȲW@U.inr.oED3N; .svu.Mb1]GKۊ4?G fn쮣Ŕ}"]7WRY 4󐹪* $ڲi<E1\\|\G0hh`&}WĮN%r]ELaդ͎bְl4qס\ o)4 8u$/=ƞKkJ8$3{ʟ.#g8RtQͲ�;~r8.Xڹ\Έ LBhBB@`X/HV{+}7ʝSums *ʞWC^LjM@?EX лtc~~B m„II&\`.YzGE(IR[UP]G@"<eT ;lPPILwuP/p8bcd'\*OsJx-S+% rsͥ vrYWRzJPD, E3g&˖ĺgq D0TrXf\&s*ţ.;0c:l5- gɫֶr&#W[\WJ*J`ټrr Y$W37Eˀ$.M20jұ3uPe~3ct"0Ќ9/utØ!Zb6qWIWKXF@(u9n{zf́b&Ŀ-yq1|猈x?%("rٓ,3 VZ`/sW+C>~.2uhsF,Y�S3//]LT&5=zX=`pF§iP,.u!SY4X:斑ľOxY/s5aί'Šݣٱ쾛,31@*ܥ.J# l`$3{\π)2;G2b\u=NDJJ~BJO⻱مY@t|t?LE@,MxE2I.fP.xv" ˝]F;_9#"�Oߥ/"מ}.4=oɌJq)c)7k)F)Qҩ:i7Za)|cI`#,JY*Ͼ#1ƈh5#)K>52Sk;U邊Se"cwniylVhcwQYvWQd f*ɽm\-g\d)n3V2vQm')ūZdƨRΟSĘ e:\3NUl ռG% YfaLXۨVT>=dosV6p\.^Z&Thڜ3"rm1 t$"R+̘5ss}+ǦIZ9lک4?eiDwGwǁxQkT,nSW_Jsǵ]T\N9W//ED&YkG,0s*adoK`h}47{!5E H-'1tL LR%ȵC EpXS/ImED74ͰJPDDDDDP""""""7BzzC&%JPDDDDDP""""""7HEDDDDD %("""""Ro(AzC JPDDDDDP""""""ou+Ot|iU~k߬&(ga`x<TQڳ60BOL&Z]~e"""5NqC_KP%~Wmt^g}ӡH=EEݕA  Y3}_N:Ezz:_miܤCz@ J GR\|N:ѡCO5nFHOO'QwjDDDD,^5(.: C:fŞEDDDD %(u0'̬#䟹;9s-_*aʯ񉈈ȵC J(d?rGD Ϣa$e^=}#G|;Ibҍc_v=ODDDDJP@Wo3rLcIOÃr XĖsJ9INN&>݀-3ِ]琙O΁]ll GJ2@p=[HJ@f+% bOOm �g:|I>} 4zuIn!\rJu0]_]DMDDDD:p,}' eCH۸΍@w;c?G6/&=HoWЈ;{!|ؐެ; GZAwI҄Į7!⯻0q?FAҷ<J 2{3k1hٴbݕY<M `< G72y>F, g0֬g""""R{ūdn@^zM :Ldyǽ- aD ޙәH lʧsnrX;oAߛa f// z/-Ved0NEzޗd G ;-{ :K?%/ Ͱ-n62Ԗԁv=VOB#-喦�8p g +$[JkvsKv;VV12y{¸Ve/\0ttXa  w:vvƲf/;^fɒll�"""""rQԁ[~z/[='[ݛ=g>> Y E"hUc[D|Xoq oG_!Dv9r(sBl);+kͽM$ҩ hvh^OKcÉl:lb͖DDDDDjMCH>|+]69v=ݚ'W$l2@(?zqٽf0 ଙл`a#N5CǟUx3<{BæX;/W]q7 2z佴45lWW7 #s(6` 5?ߙ%4m~'&;b!w+?GDDDD>aZy87b:Ye '?nB ô*wrjy7iwZ՘}8.1o/w("""?6oabk ՖZwqU7nEKڶQy]:jӗam<եEDDDDPR�{:ch,ӡH=!^5hyc n{5kШQ#O hut8""""RO(APKn%{ @;pgpOG"""""H kaOq>{{ty:狏-�?9leMP| qɤNuwn9dqӡU܄Am=+S-RK}>Gӡ؃#&.CZJPDja̎M`@�NÆ�Zs<RҶǥt8"""^K H-|!�3F=I[kՂ8e67JXOdӬI%'׸NmZpEDDk)AzC ).Y|]Jɫ2=_xm75<-}y䜾b-k/6(":Cz(A&vXWr_%?.jV]ׇn7wǡ+0O߷7v[x '}mɜ:0%:u&Y'<݈"""IJPDHl/ME~6tyV?? ?* g pc�`YȚ42\IF3|q8N/tG^/TBSi9Qҫr5c?;Rd5lL?krzߡ4kVO4"^YkyQ4CORɏ9w9g<E'W{x6Ch?~ !֚ߥr<=ß ?=?`K:wݬ5O+;s{clݕ†pA/hM6;1o)M~g("""+("d&˿)w=M,ؖ -FKL Zѩ"ZMb43INΆt[ -VY~*^]0 [fOrz})r-o?zB Z^g" !b뺗$? O&?$()x| ['D?7}J]gY4?q ChLlj,/ 8OW""""6%("^ )KgKr}tʑb?o=Oh4͗k :Oo 4.ݶ>~wn1 MGYh;gӴ�[Nf;!$gTzŸY[cLd,zr]y>ނ 0fy<h>9EDDe>aZy87bJoa=ңOY=)yVJfɖ}==>zለx%ٯ 7W[q*=>֭?xu%MvR{e?DDDD:KP6c_ ;WT8ެ\h7RG JixGؼ./6ْٛS9ZPپ./Rq,k'/r5uଫurTɾwsxVWݧ,-=^ 5ȕR7-Nc}i~e+C{Dg0 t<&UX }cu;xzCMO<Ec/؟dAs,Kʊ1mY=&%meL7$WVB[7'<AvM<5ټ{3Ӗ=waÆ_|ofsW׻<תD MmyƋ9AX@doiKp/ѭ|psEpSC Gߞ=o+u","Cs2N-(1Ѯ|%߇sJ8p;3C-?V{曣7cO#rSxɗ7_~e"""R:HP|A2oC H,Zq F)|n8O&g"Zw8 9PLѩᆲ"MZȴh愵7qnkȸ!{0K517g]~Fz&""r%՘Sz|~�C }3xlH| ^zNn9w1hZ5_C7@_V49uy?a'iq:S.L;>5vI_Y.[ޢ#.}kmojKۛz: /~7+:[XcgU"?<~DwCב<KF0cQ=?# _w?#{{ |}?~$ýg20Ό[7Q�XԽ1s(wDCσRo~-Iz:ュ'<AאG<N.oװaWA"WSlEg3]A"Ro7~oC_|5YH00(tcM˭]<x]ޭ6jK3Uݫ6 iYi|C5 ӭ<W9w50{lO#"TOne�ТYC:7GZVCS""R[>wS ,"rx[ʍCvfIvOGU yW1e--<Q"""{<uk p]wÙWU8h,o,vMfI3JPDD'_- ד :2aJN2eS/[š*nK,}k:ze=0dG�y|.˶c@i i3f 'v(:~\N|8GeΆO4p͇> =֟�OXX'iK�L jґ>-M֟w7te@aDu ưh0:B[”7Vnצf�hܔn7yO93 3M ?EO0DuwJNDDꊮgb S�p q+{ʰJgD?[oOc3S|i�ˀ'~ 8N_ߟg`@rOy }&<Տټv< S1 ]a& >V& @9hc9rؙ(AǙ9Ο\,lgMO~-)Slq_ojjS[ 8sXc|]7?i<!m:\ϰ(^6 g|3w@1t;x *< wER Lt~A&׍� q2>y/Jr 9QaGqLafmqx<t @;1 8gE0p]:]Kh3Xy-"Rw眫:clyp ¯I} Sgz^[CJV6Mbt]E9K9;Vv4mgζqBdz$?c b~uk�;4?ޮس6I%_tKx '"@LȠ}{}?&r -[x:־}^:\JA=vvk[kmt[W>}}Ieeӡ~M! 2EDDꝌZ̊eή:*Z#""uBCDDDDDP""RKgϝ̚D*a`3]~E"!^""v?il6{:$`9(*.O>GD<L H- E=k LO#u:HHO!"ED"<1 :<sxBo eC5KDOP|||1zOvqեt""^I.,.L az `8gX+ܹs O5j/vI5k0J`@ :P05xHp"cӡx%/a3`OR#%("""R/cƍ-׃ԉ3swuZJPDDD^HNMĭAx:e灝nOT-݁$"""AuMD-gӡHWPDDDDFG"ztlf'!aՠ['h*wTNAHQ""""-1L>zUU#~!]f{݅`}WCٵfG=x%l<|?93̶z귩\uJPDDDDEcALrX,۾=uqv9 ь<>u>x[䃏E)Bg/hWȶv}XBnI3ygmYïҲ)웘&_ Fسچ5pIa~pBɩD 0m,WO�@PGtԟͶl>ڛn@Z!&iE㦴7!-] ]{v?8iiq mi~&J_5Aۖ>iIDtr|ZEs>['N^ti "g6㹰ضfp-W�'.N4oqh3SX7Y8" B}0sp699p,d|Yۺ&)R6'r'1rY-î8O|oZĉci|!7ơb3has96ھG9),n&>O2g>~Э-+\+(""""ޢ1p.ק?r{s%'J^ .+xr&8c{C�gOн8H [/ <ຶDNyǡ䟃9_o<aJ90;=-ɶ鼸f[W]A2U j -Z8&2f�L`~7)W'b;̯?'ٕgc?4W06}Xiw>&_>Ń)k^gD7>^kӍ*Wxs߫IZ}q:8ρl;t_gId>7~axaz ʜMf>ߦ�so85'v7>m'ڊkam?HX6 pb۲noH M!r :(>ȜFh50 B+f``\L}^)##핷\Iw={猳tmӡxtk{HE`WFN;ܾdlwݬ߾{־)ʳ?ơyjcqpC@petEDDD䚰]29(W_YrTXڤ{PDDDDDP"""""r!H By/2 /$�mnjPj{PDDD^xlݳfG=ȏ"!:P(AzO>,_e~pC Gi]<tC<ӞVf~[OW/߿nax=[~7pP?Fj? $/"""""FCDDDDDD&]AzC JPDDDDDPrl7KH^DD.(o&M$@;<ش2ĵ9$p-s_VR)Aw2/T5IV1ӓY<9 ށȱ'桱ۚ6ϥy*`jF$t""9ܜ{ =Si><3Q0¼s*^Ltr\ JYYGz,]'mDbӫJ5$scy4I;HLw o > V$OI(N%#=KmU#f"mI̻do,m*""Y$]_dO"jrI_+k퀃Ie#.{qX1XROb)Ca5jRnDّYIW\&f(@}VX ֟\]zcwNeG'aReyϨ@qˈj{2Q\�DD.VP8z7gp*Ъ>~|wb&h|C'+i~/X'wv l\ƬHV-oDZ ،(Xp/z#os2IXԵɤЯ>ʤ;H>*nAt9 5O%yC2!CzW݃*sဠPpl>tM'(=FCRhobD{``?ו{ YnHdA�ɣ *g+("r צ(A0F#(v`U,I۲�H]s@k'F: z aD(Bb={`(PE ;*6nNx (|/P"zB`03K �&&t/LzCbw`ƧjU`/"WK Z- $Zu0r)0Ɣ~:l&]_a!d?LbVg3Ѷ9&"Wko,Xt0 Bow_~o(1/ D&SF%$ebǖW1 t?:\멝KD~lJְL7{PDDDDD~Q""""""7HEDDDDD %("""""Ro(AzC JPDDDDDP""""""7f17����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/git.png������������������������������������0000664�0000000�0000000�00000036221�14332737457�0024652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������Pd\��� pHYs����+�� �IDATx{t]A'GN8;iOh$6n Fn< S;IͣPf$ �`&?~ 0k€a0+)&B#A!Z,GN~Mc(ueGW:?}{od}r9����PP5�����8����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(݀600}e׮]9tPח$K]]].]իWgŊp0R ՠ_p6Jr<ۍygsرcS… s뭷oOmmm[�c+A\�k`` ۷o3<|Z;˗ս$[}v^KRJmŹ;smb+AݘVݻ7R9|,^|tJ?ztq~<-)Ks}`+Aݚ֑#GcY`\}T֫.Oܛeɒ%>+b[ �8H5WT~tC=4ۍ8[yGs^3?s.KM7Çd߾EM7ݔϻ=8jЯ�.s.Yzg>d޼yNf͚9thi[W^y%k׮MTV0R ՠ_0·۷o޽{l+GTR96lͲewl߾}`+A`:ͩ�رcy晧S*sO䢋O{ Ͻ>R<i�΅qjЯ 6/| ;9o8W_}(7|γ>[z�ljЯ�ns&s=;|uSIy200P�tT~E5W�TÜ ۗcǎeYh[h@;}U>�8 ՠ_Q �0g]v%IV=cu5\7� ՠ_Q �0gC%I/y+b+Av/IRW7cuս$_ݑf^�>8ȴӯť\͉_K't2rʙ@.*SS.T*T.T]J9:VSJsw<+jg�?s0zcA�8H5Wŷt"NJdQgQDɥ9y9哥O3sNUW,ל ��BpIDLgIۙ743 �.Ts&Ç׷(K=#uH=�0UAA]\[V*gItb4-f__�9`eɒ3Rg_ߢ$T.g@Nɓ81:ooh_>ڗ7__ɛx?]Ɵ,YuW`yGK/odNӯf|5{l[~ yu׾wUE,+geS{_, .].Ef‹s…̿xAjKJ̫If5&555)͛RҼJ45>h2KJp3ҥKK/es /H/|Hݓ*R3Yyy]y]9cO㧇ɼ{=#?W^~u0vdNӯfV/O/~>{+skkkr˯E,Rύ~@5̙�kݻWxvFܽ{HP{eo w|S_?Bt>~˕'?K=e7J�(qdW3_xK/ҵ YYUYhЯ�9`X" .YhU;ztq. .̊+ZװK\p^ۻ/+?ڗ?ͷi�ByUu|)LRMMu-չ)Lc�g~@5v&zkR~Sw%)[oMM3]y|#?{:իoxw;g]�̎ mdfWUR.KG~4?0*Քr7ߔ;'/?[l~NW~@u̩~8?K^}K ~Ug*5ȣ9|\ζG>?i�̾ quOr}ޯ4'/_(?9<p+�ۜ jkksw\.' 'M\wܙiljJh7,_Yj�3B.jyc?/e-˷|z+B g~tC=4ۍ8]w]8_>Çd͚gT*K?//tC}h\{|ϻ3pdd9◲ߖҼ9Gp.qѯ޽C;s|(o}H/pkz{SW�L9`J\2_җoߢ:4 =7*?/vUW]袋ӧ=KS.#zHNnŖ0.qЯޝCГ?Cyͷ*/Yup7f޼I>}ү�Ns.J秡!ٷoQzzV}7ϩW_]Ocydɒ|ϢE7]{stWFٛU,Xt, pT~un<t8ۯQq|凿5/?}/< R*nĹ?{T*曟]w=5G=8O=uW^xᖔ˥x㍹c}-[5G^9#ᓳ*�f҅<R=ԝ;o̫V8?r wkNXI200۷gNIʹYjwս'եoQ^~޽*\ڋswnS1yOZ.[~, t!T~5r?J~~[5~Wnf+�ލ9` ϳ>{.ǎg.\[ou1spf++s?6`6\ է_MG0+-{pj.?K+�y` Ⱦ}k׮:t(}}}SWW,]4WΊ+?_#7/Yx*�f˅623JGc|ok91rrc%.]2-[+�y`]hNcکn>[?V�|GʁCRooz,6 �oncq}خ?��ӭ뙊*In^@*m_R4jwFו*Y{vtT|~쫢M͓a]ζy=^́~qz `a;k+dҡ4WoYmsι*JD/tk)}S<4}xYqҥW>q,�XКS.SlNBi_אƑszp 6_Ls4wfsy]-)ݟ<:u3cks7|}ű]O|~f01n׈4{:'p|[z:צajQcsκTEȩ~5TLjg3o?%G^8-ETҲ̧p*H՛'t'fSСlN:]>-Is綑s7mKO[cұ]ݙm8iN\oHƻS?rVSk mAcx;�88ƍtTZI;]y;mdԦ؝G[24N=:f }YٙNw9>1S }xypv>Ǯeu"�$MV.c[rm3.ᔗeOfKwc6]yWi[9qSeSo,?<_�,Ƹ_l4<sgz?M\.gۦImTaiKUّ4o|Jİ=+z}u>:Tܘ뽳ST[?JUpFV.O];nygXJ<vy9Y7hv/=#9uWZJ>D8Q8{ sƤSSѻZ#ipܮɨ;% X];ypE lsWKi鿟87Qql氱c\{_ҽIÆ3?7>0zLn̚M^ggww<|{g]&uK6Nv 6LZx{N_V|w4*ΚKvcOF]-O2G-CmϺ֬ux{M6MTӺeMzs @q$ֹ6 C4C{1vP`tnQ7e[gs[KWV|~PI:5Fh-mͽy#i5X-3}Of}x0P�qc\ś_hCTJرgi%h 1ݻq׃;džJໜO { h[5Tww6t~N<uT76oU+F߽1o|XGw֎s:г3iNŽ0s~_l0VWK)95Sgc4f4wXښ5eLr~1m=gӃK#$M`]f*�sDc\FC!èe;gel&7"O'.E WgԻ';&ZzX^?#D'M\>_ZRAӆ4#맺,g�P]&4]{#%}jFk'tmH7f l;3TgfM^?ppf;7tiǯj  ?~|{93g]2O$h)p}5eU%?~?)ڒTS?g_'=mcFS6{ؑ'ԯ`L/LAЅ'xTЫ瀡 L)>CBϴD5\g/(r9,,c\rT.oR{90S.ǘBDqJWS6A]U}gqH7\W'Cqhji۩kT5T8#w4  /6y4~>4yܝяJ'X͙Y .֗>y w1n*/yؘ㣗ߝɎ1$Ļ^(.U]NO [NfMj*WfuUvTξ7Li_ԴskP�~SlNœJ۞u;Nm9QichG{3 rCo՞yhIaE{ZZ݉Tsx+?Z'�”Ƹ!v1phXwc;tUo/.$F][R44?8dқu /W=ߞ˖_3mu\0Jr]-ׇSY\p^(Fis9ּͣ>w.t[ҝ >4fA~Ӷ >A;9z ςn_m)?3 #u4d%gjY#mmUz ˮ[[*ݧ7 :%gCr:׶V;33ig۸D{\r:OmpD ӑʥ\S{ i]9qg\ζG>Uqhނ Sfp . "6W>{\_lʆO=<`L )ˣEs8◲76MG�ΠO_<n?1mz۳f,903^nz_n*=۟ͱ׾6K-�(w_?Zqlᕋ;:_5�s�<-*5ıߟ�g֫UgsefEL;nk"ylkpűOimYj�@qy᷷VoJÇn1ݚ6O?�Eg7~Gc_(/=Kges@ۗ]vСCK___.uuuYtiV^+VF6̙W�扏dviނkb�DuAh#ҫܘ/fނfUsC}<s9vؔ>pz뭹S[[[2W�r;'v8~ۏ/?2K�F`] of=Yql?3-I4K*l߾=<tNRj,_rRWFoQٽ{U.I);mf I+B*/m?|@$�(b|GW*'>l<ٻwoJrnySY><]y[R.r73k_Oy_q7^sc/A]-)ߑS{LKCk M9grNіmb,bpQ3^>~2]Uq|=ߙˑ#GO}*{ͲeOzSd⣹擟Y`ݛO}S9rH[NW�sy꒫wޥPim:;צa]{@=]-Y1mM`. \ETї2K-+<c9|pVޙWz]}|իwy?-f.Я�辯dt|/+_X/?K^9K-;_t4=CM;tH� Iuz<?/XyGB~3 Hg```Z\_~<?{^xvq]Y Ӹ9}]Jk]+or9ۦLtN)p\)e$SzNGc[ښX$�3Lu|/T?v?-|:'NR gۇw|dkJT*gÆ#˾o>meSl@1 8=OgG,Ή+޿l5\nGSRlzOkwc+5r&m=C;ܱ4zƕӖ6/=&mnʳ7Xo./8_l{~w'\6}zcǎgNTν>1-3dZxJ'Yuӯ�f߱׾>~sn/Ay#i<jtN6c%R) il{S*gxM6jz&*~Su6Zh؛]o�@u.` ]OΟ.|5ݿ[}">#BK _B-<&:>o~>ogZ=~0;|o~C?_WǝW.w;~dzKfsTt9*7m$j<4s'4=S-wOv$Yr dtmMG1e4Ic:uct��7IDAT(m?iˣ+`]JoC)Ռr|<󋿑]ȓ?sğȗ_Ny`D͆<sIʹΧ^]w={ΞE1 `9嗳?~Dȁ SJ55~(-ۓRiZ=wqϦ-yli̚ږAim(UКG-_n�pejbC^?ʗ>9%O偁Bo!IKrgWeWfچqپ}rر,_~ WGsur۷/7pCdW�shGOyzsͷ/6|Gn={h~sЬ=ɦ)ӝ=Y%KԘm. mߒt֊wZPjMsg9&,�3GE,ͺOOW^Ҥ9G]\,^~m.,\vlMߵkWdժ3VUsڵKpү�ޝo/%G_J^y赳*뚛ߗR{ܹVX kҘlڜQNŌkhڱвNYdǞޤii*dCìIMRTy;ҳͬ,`1+.ڍvqu՝{77q]tIm^8W,+,,̿6-z]Rg~)ͫITҼ Zzͫ >,8tPd.]usѯZO 9tr 偡ɁQ z;՟w N՟ocG^Os{hͱ#G[WOw~ `c-j$I7Ѷ-iX.kg5u;I96fyi8�Milܴ}*)5=<7Һ3Sgd(8,�E-ZvUn={orw'ty??Sfwߜ$I}63V/3L1*nZe_r7vk'01mmim=5{is9-4N-k,g[ٕ3$͝)M:z9QO@Jrynͬz|q0zy *WR,x{F;~/Lf>f~P/^+n57 nZK.f�UfʥKј~T@9o}9WrWrt?+ıw$��8_XkfkF~UWTɁ�p`1J5\tI.]$O9qd^;׎׾NqXO}<偁 <Y6NM([%KffL__݌ӯURMMj/^5TSy/8}.^/%W^++O9al`1/MԽgl7%I裏&/,YrxF[$'ү���Wl7�fҥK$_?cuusѯ���� ի$w:~��0X\VX frw8p].\+VT>f~��0X\jjjr뭷&)z}O=uWRn|_��L/?pS[{qUWnImŹ۫VŠ_��Lqǝ)Kyriy{S.rww��`An-7xc\[7\.M[r)[~$.K}}}ni+bӯ���� 2g}ݗ%Kd׮5g>:-3f_|fcvZ*w=. ��(l7ȑ#yr,[v0D9KeYdI>/3W���� ?{T*曟]w=ŋNG.SOݕ^%r)7xc>]+��s' dy晧vr@Vڝ9uuo/IWEy{8p]Rjk/wܙn.W���Jߟg}6=\;6,\0zknvc~��pvX0ٷo_vڕC/}}3eRWWKfYb1L~��05,���� |���� My+-RJc_-]M׵C]UN۾nT9rbz۳ԒӜ۞uRZ U̶��=ّƴS.zmn>!}ꜞt6 X43^5Mp[;צa+- >���`n`q~ٙI}2[m4tNmikL:N}Vt<ڝƶ2遴5v1tTZ) ���s�ZISaX\1'ԯ\dGR<bbtl.mdH!)Hc[Oʝͧ?i6lry؉v@G/'Zj:]-j)=#]gR‰v.-CZRzvnq Ǵ͒B��` 8N㎇z_ɨ[]-OĞt?TTNoK5mNy*AUӱ{\SKW{ڒֆW76&;S{v u8͞Iƻ3 wn ֝-kS.\ޜLߥܙunT���8,c]ڑtgwZ#uekGeT4;;{NW,ghVNCkwXF'2QYllNw#̼-yrNssPlnƻ'/h[Hy# ΦeY��`z8 ]޶) ~14/͝~@o򩽭Ւҙ6NrfY=ٸr9nWfﻶ#SaMӑ]I6yTH1k6Ic$ݶvFn-O<gmҿK옠)��`FԘͬ*�Ztq򧫜`sŌ; {OUGMМ;5nM+v(1fƬiSEÚ3socMP7�� `q}H4n_ڝe'~aeYsJ=*_ÙfÚtoy2]OnIڕOS64wg˓]|1w߳�M��Owh㞈6fy&Ճ?O)zt9ys6,T<prwoLclٝơ4u0z8[zڱr].Rq9pl���3M~SldA][;Nm>4K'' -9J$~rz6SpMy`'uR*:V2kӑSe nޝ O}e0,}r SoSTԝ޴+4.e��給tf}^D[7!t'nmܯ4*lz[gMO9ͧB*gk[0|pY]RmiK>X;9zS}2z}*&8mc #͝FLߥ!k;��PMr\F����d���X����� ���B`���Ph,���� M���@ �FWKJҤ]4}<gL;�� 8MS.Ǽ:Ӝ$͝4t^WKJwgεim֜gc4TO*lN?��`ry0 ?kYޜ7ecOm9Ly$zRZmKÖٶ)Cmi][Yoe[r��1 mil{ #1Oҝ]Y_qjÚƤck*Wf HKJ'umMGzWM*-Y��i,wt9nNc4T_3"5c}2qKʝiXug\؝=IR76&*%; ÑT��=g�sWWvrULw~fG&M]јS{c[[iNc[ONcM<wM1{vTXi[+[Rj(5IҘrFgnS9��`p&Y75M\v* jI5ݣOݓqD<؜Y[CK+RJi}Y},��0[X�kkGҸ15iSk3GUm>is"ִ6 Ӱ3;<<ܑ4wn>5K~SmkLw#qM��Y$8'C7ޝG AuJҾR͝{[mĻM/g}iݓAYtOr)��0X�tdǘggwҼa0ٙ4bN2k336-n\dh6d!P5s���f� \L2kiP}6=؜<կ1m %V oYוIFVMy}])ϔ֤M3Fj9=w|~*���̢R<8+�}]Zצsҥ ϩjL[϶MGJAרs+KܙZRZ7ד nҾIilɶ1'M�� ���,!���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���X����� ���B`���Ph,���� M���@ ����(4����&���Xc����0�������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5������`M`���&����XX���� ,��������k ���5���Z@@;d>7����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/header.png���������������������������������0000664�0000000�0000000�00000207675�14332737457�0025334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������kf~���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE稛Ƹ5 cwn0fHeJF9.#ٺxgcHRpX=%*ijo323H7O򝄂ѰIjo ".ԓrUֺyyz� 4yh5MNMɜ뇕ͰnTM>?Z 3F5ccbnlK{wenN1޻d#Ogr<B人O֏Rӏյ8ziǼҹ̹hYe^׵Ȯ{oӌ}[ŨcTRG0l'W�IyDmjBx4!b{wH8CuFvFa7�,痪ֵpքZԊiOuuVأчUqސ䛨x݃쒘ƒ㍤ۣiexa1.ۦ\ꢤW n+'xiۨ7ѬegCF4*(!�j:4/���bKGD�H���tIME6;%!���IDATx @Sw>B oD *!BFMA"b0XJ0:rK8ª3#Aug뗩;SoiZW{љ9'ɹ&(=!$O}y!s<s<s<s<s<s<s<s<g\ϋ9GHB_!skxxaX`+ޞ[s<sFFj�,X_&#1ɋ#DNc6C4E(``2 xnSϙP�5IQH{Zn93h,u�1AHȊL^s<<3fr*H# /-hD!7�<s vH)7NYߠqx<|' d|`BaIb$  FTbd<.�!~X"hqDdU" F5l+q#5My\�9~{4zҘ`#$9bD4PߏVqx=/A| ~rl 2R"Y%y\+d'c5NN5!w!x͆kD1YڴŢ>Rm6͜lbY1CagJ6Os<MEڦk̬'##$[ܚ&dmKY#޸6zrl# 1¡%BXFfyI9uPh *@b$љO-[mYcqdRB~*NɪHIb¡2ϜI%TVFlC+"mt9ӅHK]~mOfE삞_%~&.eizJIyCvC^>6fljG$E!Xd@xϞgy<(H*AsݹvsIV,V6?͙#.QIV(H(X؟%W 9S!Bu =s<gjD+ E1"+YsS#%{B#7̈ٵ/uJv>CR(2ˠ='(3i>LٌE+P9 _DϙDw|(a <y`> Iq9vCPnhed8JI`qۡ'Py1b;ΤYEk1qǞ/ B|93iĒ5^ɻ/JE߹)D lM3oѹۣRs9ꇴvҬPsΤ9QR"'P@rϙF}3@; ߽ňXtI(s.`|'C^C Y_,O8(b^ Fvf#S,ư }=9p s[iːWH\l۲)$nRWz62j󟑬*C83g9M\ň=b^W B("Pߦt/"�^Os<gϜPF 툐IrTE/?詈ԗg?L"K[?6#J'MHOT#Q# mDח"8(z s<gϦe+xakxPDIlYܼdIW.h鳻v/_m;o `1+&K^l>>B1&\�,_Β`we'JxXNyfri;Sg='-۽72|^6V"I tn+hL1 �46plj 0LpyZmB N93&KFTXڔ.䈖%KژP3}9ڷvzI,hiQe颕9vH dC-]0J]! > Q!O@Oxbg)8ɪ!PSKוnmؙOX75^&/%^&>['0EDV:pk6u7QdrhekE!gS$,JO=m9;ST W Jcv@5Va'b93; "$ej wuy9* H5PzQH\jd2(`K3M1> 6j5cXt멮i:2 $-3k=%ڔ'"N$NP z8Kk"٪U2! ږUg΃^,ΕN3A![#ۀ,9FOJqC QsLCȰǖ @St{x ?x<>?*r[4975B*ڛ8#v-zAK,ID&?<"�Lĕ8X KEk  ||\ߦ}" d�yo=sl(3?36x+tǬ9y2)U]2O^["^6O"IYvK`%L 3 ;i‚N l4}12"+Ko{`TO{xl햠4h4:KV V,'udez _΍ۦN&Ňx^V@NQfNۮND,_ːiBE$ <-7ϙ'j({R{[+MM1LĒ(ɚȔK uXs喐A~xRKC$N@B6Չ0~I3Q<uB6D- *YO2zI~|h"~-\?1?kޒM6f rxB|d$$vp0%~}iyTE(D)67U JxGBIl. > yq{"vǫW<Xiڴ )LxNu/`@ "Ywqi. SFHؿHsā�u ňh1NU >J{l; Jڹ?fD"[5ŝ?*'l$5J^=$sִ#o3jΚcP<gWyyi] غ6zMJb`م$/]T%jL6:S;qӱk5},cԞmnǶ;Ti($1#e"�cLv>C$g>.<h-<זBk>)w~‰hh0sޮB`N`ƍ6d$9RqanqxΔ8I"K(ce'v@k{6`|%J&[ʎ%|Q؈D^sZsY+X3HlTgԀiyΣwfTϴȴY+%9 ^ڟP3J"Q@QbTQ|Ӷ8Dx<m,WClB2cuƍ]MErFhAy9 ?BmY)K@J$L-E wm t*y$6B$!~N=$F[_5^IJ@֮%] 9A6H�8!;nec-b zԣe9!ҝ{o$MytӅYݳd깻 (,uxSz\.SŖ'(-ÄXb* 5@ aB1sޗDLiʹ0VdW?{~^_F.+eD!-Q'b"WEEn/1F΃ k[U!hU; F#-[/x : S? wFHv I֖8�*GyC-Wȸ(ٮ*I ;hYHxP�*F[)eIc4avƚOb :n 50J@ #GWSSܡ=!?0I"&޷MI x+w/yU"ņcOB$G0g`% 9~s#хkH�qu[ 'FrWW7MM ]svH\B,\\o/YlIٖ5sI\@9{ snF`7vPƙ{!JحD 4Eghmjjjlll<흻mx-䶴7Wb-ݽB=oɞm1.^GS-eOf`Ty#vfYaˮc\�GǍC4PS]`�Ĩ "]k7{ӞP%GMYdZvrĉ!R@If dVFB%h5k]B10)~.K F|Hki`Qbz 3M9{u[#K 65']*925"z~@9!"dRq@H:i>$FOan$̴qsW�Ś@k Rh@wߌZ 00Bv p Mu<'}m)ji<ݑ4>kkة0L=Ks>gd ,d |9xt54r!Wx"ED,Xn"5slZ"č"hZo:y&4gdIB� e Wb$ҕC 40im-:}$AтF/FSN9 *onMwDB5B5^(פ3"t4@IƷqX;n rj4UԷDB $2S{xMK7`}\b a<2@egZ#v[)W'bFDZfi:FtJ,ȈWy0I H4_=ԩ4LE#%dĠĚ0ngA 8)/NDT@C+ň] F�xCF[_{xe,z [g퐶uͬ�ȿc@b >q 0E{MW`%v3z>K5XY$'+@͍07Ywv�J (qϠ� 0*x6FN(Ye5LF5OC<g 3#YRgH#Dp[ 5GqJŵa-DXu-4/j ҌFHkYfDF˻t-:읺య6eLx$F`X߇"Xmjю2dADKW JPM  1ߘ;pDl"̨mi`;ڀ`kl+:aobe$}[ڈœ9SV0bEP lㆰV88}IB0.t`R ЊfT=[|U\!Dp5&Ҩs :};ZVB"!vp6e&-Q,8)yy3E,4 aX᫱?NL 8_#Ɖi'55X L7`K v8+VHk<g4Tgiok0X VbQjcʴpeеN<m3UT#  g_">IbFr$(7x#(cm_`3 4ɚ,Ffwdi zg ־o70vDVFsțaF35e,̚H &�v: J7EC+0dyL0ӝiҍr TNDZb33LoRӲ$SOY]G2!*yxyLu,LgӻK!%&)@B앓lH @IQii02Ej08U� k`5Y5ꉂ7Pf5Nf]s%zj3ͪް BDZm *x|F354Y4n;nΑ%֗,:P `L-i\BR _@{1BHTk%#dx'795=s@  FBQ}sFR Ë<g*# dYlZn!B.%z DZﴊ'ͨ4n5ؚ� u*ժ́[g :T/ER\:|ŗXZO,F߽d^&ZڊPH)E,ל diPfj;q&OwNPcix:YFRbn4kIfnV![gdG_5YwcE/:Uw<vBZEZ}M"<Gϙ**YLU�Gqcr # DF;#`( REYުfIxW:fwD!ϖ֊Hr[7kkJ+JW}lKqO+.m QkT4ϙ*P4p rt#Ftߌfr' x[mN!J+lNiD~=`4?pNs7| g^O P F7&lk |<kϙ2"Ͳ@VphĮMVMfIv45H3B1(C; dZn0cQu7G5uzÆ0M*4'3@m |+ g8kD<"sF+蠄0;ȤDNw܈NZ>ZˀՋ-h-$84ps%Բ&ck]gtAK:{շDoH)Ì""3^7y$XIM "!nwDiva`+[zc:WM*,[eMd{M U˱wXwV#H3RDJ<`9SD},W\H4*;փ #قCTF{'\0 CĘJ^Zi:>6J^7^ۢfɰF"C;n7HBpe  _=<Z@Y!k2>.ΨoBI cl%#L^+pd#F32Pi NX@,-j@)QbH76B8ӈATBK^ d1"�Ĉσ4A{H7֫ΰ$Ke& 嵐"$i:ZԃV#(aêuXQ#zAs#k5)Bmؠ>IKhs54&H?XdfYh ąit٦<O%KˍM"wܒa}VK-zVf2d ," SOual2Mr! ʑ\-%^E4o/ٓnSwυ/5VWI<=g5Z{Me1bHaiumaAig{j__@Wcʎћו%'F%Ma}|r iC/5e+WV#B ` mlmб*mV#R xEIlp&2zJY}%I*_s%/l%*HENz}\Dfi$ Z\�+f FUhMTdsjpΠkhokYyVOԱ  1"Qwd Q2md!wZjW</#4 C&p_lBC S}sF'vS]˶ѸZ2 X'-&Қpcz@/@"Ɩ07l贚hk˰>XyBMT3pMPu۱2; u:ھW[' 4 &-uH'[<HkGqvť~YČP"+<&qVȲwX w5%AI#FHĨ 3Я7n$e%j`H&4R'28c@ xoCmW'^j|w^п4g$"8ZfTT`"c{&\.E٢f`i<(-FIod&Pj/LBSƃLdxVu,ٰw n1񵈴ƦV."wW0bdI?7Ud& 럤4%P n;&;[/kUe^o>KtbdUÖ́HÈ�LWUd6Qʒ*İ>]89Ta ~}4{z0d&AO ^9t^Sd9e՜C6�:i5笝 z@d;f]KB U_�TCnx8sr;;qsi/fh+kk $:iHcؽi2AkK}Ik@EZ*z?).%ɊJ$'dxSNYSRwh4zdEIA_?Y2OB o!}5�$^H-9s__liw5~; ÉK] :bpl1 �tĈz vV4vF F:MkhCI ]&BQnV" MXsVhʨx-&OKԆeKf)g;i\eҪƱP:iH�!@M&B3wfk:`eXߛs^d!`x -H]Ssg -bbd" #F0ـeא4`y,Pj05!bLi&?n_7x9D.47W{JY1i߀XtsYH*)+TVc]"II I"m�!S2R{C*IMRlmjL"zM&E͒,?y|JpViN5ΖVI^>g @xۍ6f i"yQLJjR#$ rs΂L(Yx-'ze%UUX xUyr2L 3Lä9i> }=̈́aQP@_jYtkƬ-(]:|_HꤝCkfv1e|z;g ge& ́h|U*HcCe㐾*oݯ9r'G5דIL&ZF.ھz'M.XJړɄ$O&Ҋpi~~sӇ^1TEևu{�h_hiTSw 2*kՁ>`P2u]xl(!DN \sbz XP;b;5re$c•DrIrk&Qd'~9 {iEl12xfSOe YԙL$ %y-k*=jnhXoY * �eXTU7|{q?_ՉkLD֟V֦FB]"D Fޞ>T]9wuGl;Qaٯ  bg382B$,f Oe##.B-mҰ>k'ɚImKHLVTt@ Ip@UcWMV({#sg T z уInZL= iװ%F"Vt}8F{7\t6AEZ!Π"@' ܡ̃1ft޶7Jjm?]^dE14DZ7xրč-�%y DvJ@Wfe}&;vĨ^#69=?FnB[ qXoFJZzA3_ay/Rߛ>6Z(G&[<11­| kZ1idV^W@ Ws~!ƓI}Bv@eNZ>#6yg+.g]hXYofZ. z0yp>3.03ڮd<WaGi; 4bD5Ar,3d2PT{za 8c4{7!e1 <] Zi{E+2}qD7ǩm }:dn I]5o@F˵e׈L@p#*'I.MN.QnSmUZpZ |k[a3g-"Z JWKZZ__*y>O7ott} ~L]&DZ#1UQ 󰒼xD |ue%iSvF#!҄<k'kX8lL_Q,R]O'a.$#>k]ƸJ"S/Y<$GfP91wBo6H;a%͞ @%T [U( Z2F 7#DǤK=WL(2jԦպu=meC]ށ>�i]Hk8AiwP UVe2adY䙴F[P`^#챻  $1Bpb>m o72elBȖj՟~EjWIj @&SWcю /?LI5.Ҫ%#-lE~A"Ȅ-yc"J;$2} oA�xmtMnۖmU~[O|W�>:gs5f8 I1*adl5;WV0,/l�.!)vG`:w=Á7%2IxdfUn_ZΓk9ZeoƻH <cQU145Qb_ -PJ+K R,JX�V,S ZJ60]xjy3Es慒VGI"Dl2"@,fm3#uH+5KTl?$k�&#ӽn+K F$E}JXX f̦?_xgs;ysw_A3nT/;m=.k܀k4K9& d}𚩼p^*JZVF΋W"ڬ(*D:';GTup1Qf+3\ N TzD'co eG*�&%q\%KPȺmnkjH{+;iafe'ĈINQ tBOW7L\Uj>a>΍ WxfG$s<^KGj$b%:I( (am(O* ^>M{pq@܈UyǨ,Hkc"E{A1lpT@`(?m)N@ `ܫ4`&WYfpeP2ziTr*҄$JZ`U]{FݓƈFE!۰>֯֒8�ɝ:i#?N^6e6Pd ','SӠiݬÍ*ХjGQGOZ L7)ܜ*&0sl2|ZTUfNQŽr* ּlՎ5܄ܬYQP[1 �+܋fIGU[cwMSF԰1l䃫CVքqU$b#TszD£~n`"iJLt醐=$XdX\NpmVd%<D�J94.Xճ(s4 Rs-=qs(3^[BHxsv~cC51 ՛Td%^+,ivx|ʱ*R>3[b0m/, ::\$)SUsS�i9٠?`&DZߞDt`rDWyvv"k'@嵐"!bXU2̾ud֊gNCՙz/ ! G.P5LH:n4GӇmI1; )3w=g2"iOH0Ckr CBK!lKV#ə-U关TbA 1DT*\VEC J0#!RlxDXnw4QEHzM}>Lt`x>Ya}CB<x''Aj1zxYl-By1L\m[-QD5)~KuXzKO Lj^=p)}]U,U.Նi_,H]>`1 FńH#sP!N:rbxe f+ Z/YF�p4Bɴx2$\M2El#A3f0&*cYzM&@߉1 Ku]Ts-]}w?$YOqE;m tP=�m^Ō `o[W;Oid#Z5I)+*ҐZURaz͜2JAZ$*;#\ 1,V8ir2 H4Zn1s "F"DHM{"-" IjU{M&:MI#6", BByH:i$YɌ6tVhbaM G3�z u4I^(OI9l dik@u~ʓ@ �"MIibD',6.Jb@e<30@ Di>En0@܅$˴ { T( j|aSDGy?ĈIPNn&J.dBUzQG9fg60(%pC&Q88MtJ14* &%:iHnŢ$˅ 6 f6fY=:t ŊDCU9Nh!{!r1bm;igq3c Dj |wDO.U8]dfYCȣ&NNڽP(t̹@{'oPZVN*6IK4z0Vأdk3^cy5Lulkڐ*Ipw5#O [ b h1%$݈E @Lג6cY3aq8Gy#,zqeXY 䛳)4%k'-IbDYAYPB(aMUF_SQEI߉5%@fs ;b0m�{XPd̫<σlu<dFsQ^K =x�&7kukhĈ{q^[ �4èȶ?M./SjvGIl4L;匈IX%wj3JRfy a}&V2vҦL ͞93zP]lZBָ7;q/$q;v~'dI=w4QaBg'b L 00iĈQɁVr3XDJBKe!,$Z ~:l,hv^H*wLp%..)|>XKӳqN4.uUgoP<wi%9`eywhê16J0#d10 9D Y(Zb_K/ \5:M2&ؑ1Wr'm9M8|+aY:츙~>2m^rcȑ<C4ݣ,//*bn1B&Xj0ve)؃4'kZL'}`.�FW=gm ]FMiH5^ߗJV}ÑglPh;2NC(!`Vd)BJq�M1[o{0fLcT9InƒufΎk?ݺ|37 ;&)<o]CygB7Zل5A,TcQ0a| ܠ$tDc 7[(Q[+`5X+IW8~u7u)7yɶ.Y߾S޼ɲ:K|Q:"n!s4),u[!5ND(J&0*T!HЮlc6s6In@&WKiwF^מ6;BV7_�&7;x3:I󒮒],%9l^ˇ)njI*/2p&۳} \%!$):!즥;{iHniHs^Dkʃ+'zHofnpz-]1wAR@C7,7 �UN∓M80 q8| TyX_쉚p|/5cKfo7'<�'gXFigq"P>g԰\qlm*!{v JM(zf f뀍?()kkyݎňM I[&È w^hh׃kd,X6N?I%n힞nHKff:.9k#Lތ*7.�� H$^ #lc-+eFruܜ�$3К 89rI$u CxY/L/\zNay5 ^6P/[db&04:9w6W�)nUfC3n=Ph:akUN:nՒ 4YQu&NWϳ'`rd"�@zXio56OXCaKzf!O?jTx<r$쌷 -^:㵙M776 m4ݡ/ &�"loQt@!q8l#^ )&/5ւԺ6J(?�.5 7ex�&?MOH^M{*(>\r<S3lkH&*4{$@ƶ(h\#VP‘q d=-c:pm#ۚ5We4ʈOɢe^B4p>ײm98eb[%^h%)4CKCPy_*w" M\˶z{_yH>OHVw\G0[Lh/qı<?8 I]("u.ή~,T[WQbl[-uI�I{n=LBvY,ym3O(VxqhSG#e\mMܵZ( :v. Q7hfSɓW;IU�F`˨.Mmc%:#\#d#Fc-7nq_y>ť%mJW |4um:=@7WPBk<rבٴ(/h%nkI#5xK*^ݑS.\]:%F�`&Tk?1Q&a}gq CR}4|x~w?uoHs[(=,@~#MMM 5ţ�J%Oߵg|(} U jBžX~nY +A"!ﴐ Mt'u=TF_|}̝WDޠ˚[3 %p/g02IQƶ$N<ӳD&T*i1x˰ǘևhL5W=?yqgJwo<B/4~xI֬cfgo|^8ol܀X$H1_2 JsDc-f*hvVp[q3ܿNo_kF1{MLy Xt(4d8d8G0VjJD]iL9gǍHi'm %!$-Fn]RoH~߿b*ZKe#g GISRkp8er_;̌_Aeژ'dWU &pBR+Ĭz9` 2oImMk>t@E!泭yy}smʿy}6Ӿi8!mSD=W(a|r4kVD9=r4D̉_ $ ]q=DOO?op]1v/ŨKDexu@lp$R戡WRS=-ؽ3()YtE*{s IkٳK_e6y}o}D(,7>08 AD=* s,.{lbޛkvSUD<N68 % qnc$LY$9{G͟n\o7"$O[wk-%j.ʵe2E)Ev"_R<)Kضp } %LP!EĆKL SYۡciTDr-}l�Wڒe-|#/$Lv^*+&q$  GٚJT!dn36Q1?(p8ןk YHjlokv4{Bӿ0uF+Zi�rⵤlmx S2;ȇ A37./-yu48s;D[wg4DN `$}_7?b,͋umO[gOWnTcv>x6"4OO[\_"fFWQq$rle&gYl}(3x$$@'#�2uw =�8[ r8֓Wy(2l.Ӳ!S4C<j:Zh+~[YT�e= +C|[ĸCI)pB6G;齑~d]vݼ?f2k޷sQJC$],~G1|X^sxepڋy Ks rr lmc$G=:_NBJ7F'mrcŏ$rb&Dyt k=%p/`A5iE&{%pV𡕥гKoZXEҢ�FB̋?^؞؈e?&H1Qg}*xFmmu7i];vﲘ)3r 3w @sNFY; ŗn,(.֜eG �o-ZU\хׁ9mt7wnݹ=TфylR΂L=�9>6K cXZ,qa/7"V7. J|l㼥 K_,^]D+O?$z7ko_)rk\5]_f/v?/:+0aOx6"̫,3W^H\ O9ԭ-~p!bZ%vƫEwܺu޷}ݭS}P==׻ӄ=^>&jCP`5p7%p^K?m82++f:4S -ݹ�ֈ-jO 럭|b &nRfuZ7rE \BӇ]5 ~,iDŁq�e9IOVdgjZDvXTqDos;XrӗR܌Is}CI fbw{Ix<o0A:-:$|э+WdBTeb y:PhjtkJФrSh !Ǯ R0S>Ki#%ba,ktqcuSm]ogkEsfn iAOsO!@WYW:jZnl{ 3Fwu1Q- JX4ηwDPQmF69>=|t S2V# }b!Á:Xas7AI M zތ7';4DГZk+X�][e_`W'?%=c~3#QX}@8;kal4\ooFXľ΋&bB=IĈE*(1BXs[$P5ؽ$$70dA)i<n-A>ں6xli<Q1KD. 됢PSa9ZV[ȹfFK5D79 N6-T |UԖcn8Rⷅ1A�l']o0x=IQ96ݾM`ѷPd9%ij[V zN`l&w0.$ %MW�4ueQ@{p@Z^>zc+S M3dg<MM>_HR"7# 0i%-˞d6 5L0׶Ҳ$v%qD"0.d[>0-uO�ICE-"nxxtFZvN׮koook!?&- gt2! 0l!{4Դ]JzJVHL1\+4s-{q6<n1$L5L`%~S3r�Y9@ !L7Qg8Ⱥlt3,vB F$H;Iizvc;q5}Rhz/#W_k@ |[Z^ ЫCG:K +M`@1pM"� k9K^/VNv~XCZD'7H";P iqo$E: +uu5}L>F]%H r-^Kq�X4SkY; k^CʵV;L4%z�M5`,1>KbKYাwDYƙgElWF͚5(h/蕘nIN" `YϽovQ \\QBiv aLjJ͵ͤGg[{Ioue>9BӨ@Q{-x-x /I%pZbDε6Jm YUa6ǀ� q�H dJӝ4uI8h`c$~⇥Y'&2Yc]r]ˍOXdL5#+Hd .q3bl`yXLNw MchO9*Kuv{@R9 By>,ײډBD^i5q[';nH;i3^"*o͂\ig҃qAPfB"Uv({:%7LX?rs1BIsHD!\�<.f!Fv#LdlN"k@N}~);6<<BD.4Q\kP\x-v^Ed*#kM 8A g&@KB96'xs,E'%Z3gWbr^JN+<ZxEL8A <kN~B0=+ =0fvyMj i`XW)DP;M4F'MgUhRd$#PZM5=�9� ќ + $ŇGL$R7${vKkIZO�Dр<q5) q�J{,5.f[af2-,LѳT&C^"iNŐD/8"xcdnOb3Ԣ9Y*CN ?>er>>mM5=tw`@0|ݷݺs&ҒЧMHP!meHF[kiΨnMStxmnk!q 3+q'L}ټe vF&^r7$'#/ISCx-߾2l>5K":Œ~'*1EWI[KJeNPAΞWs9p`oYireEL-Q6fŋr<SRH z!j kFG�_'F> FN{?|z;6= aX-Et$�$շܴumk5b$#[{}IR=Xc�`}ތe�tY_ÿ'n_҄Nq<۵W;!ؒF[S[r-[MIRgI`m79.ɱi1 9J:JXϜ\:[{p|9fš Kcӕ)<h\d^(3!Ea$ĊwXg,i|÷{晻O߾>O!F��~I2 iF212`8c)^[*ERʞ0,"J-mդgF`4m}퓠HD_P޳5 :G0dBISI^xKX,wȈDJ T#bIBn. 0Z1}*O6ǖ+S6SDˡ1DDJ�s-"`c1_%EƇe-h+fCUVq 8rL<gwv~i׭~g4�c#J�o{VnwK}s[ 1$v�量�:%bTrN# Fimے|mws{7|(XL-Νnr(@@ NU#$MQN>ZpuШ[|' D9ɼE쨼PBDJT28g6TFc7*zu(}JP4rAzǁ#PZT& Z!p ,`QO??x#['v}ޝ{;N@N-SoO;Hqyݞ-MFcWjjۓ0,jT_cВD6p%k$\#7Crt{u2ɪGZhs4=N/iJx-[mu~PJ ,w7Ho%G_F?gL'학bhΉJNU |ĉ#fA3rr V6s NΝ[ 2vMigxaybrf欀VgU&S)yY U� aXJ Hle>sxas OE+}w[oߺýSoJr ;"Ԧ�_LNjڵT&iig�1jj*P muI4VmInKzUgQ>I|z˹?N:?]gsk{4˅\Cy7\ �~nYo#i�m,B_ðeO}c@=uqnh\ʡd5T/KvCO5HVER@ˎQ<zmXtNTTP1hoQ-EW,U+E3s .ڛ3kbS|{DDZـ112:iȐp^~f>U{EMK}Snw{N1r|Zu$�2SUD" 'Fs5~{�B(Zl8s㈹u:#_]߯ew@ys긏s^yQF5vfr$"~{,7F(1Ќo N%X9C@7g)/(} p+e1Jur2zR<UбWr!.%6ލ ,zXXձ[@E<Ok1^]S-Mf%- 669%ETVC("mgwO>E6!{mil* qnߺi=u;w7Pt |Iu#N^KQg6^#-C[*4]&W-a?vJ_ޔ7(Zzǭ$stw+gl^DBgqbI$? #vlY�8!1>t6P"� OU84S)Trbρ3 rO{I"mcTc/Xd9Z߱[w7A3.-V.ܓ,,L8<+ycAtI9М(N7$,i/BA|L[[ߌ9 ݷz~�?|{w޹bط#k'a 8\>m֢joYmFJO 8x"Ld$94)p�^zDZ�zǒBoj"/S//ߔ]q7dIZaQb*XM+IK㖠?^OJc,fB.J' �.DǏp,1x7*lT>PrҊ`=W<]+jװ<T=zR6s̜kt>>%* ȢjH"cUU�Uzl#e9s2(&***؊iIG5"@z}nk y!+rݻwy[Lvz;P:iSQ [JL36m6Di֌4wr)l{Z;tb@>nxnOv󆇳r~$:OT"ER䆭˟Yu!`˸FZ3M~p/htJX-FE"{3(J:؆ǎ"Ý; (Wiibol:'P%]RW<S_QQIX'BVұ*6NL9~9'9/'*iCCl|@酪/b`tCi<?=3uN_pPbc!w Gw|{Ȧ;wPv(/B!)~^#3hXR'%GȚUD`EV,7"P\Irt*pڌ]&8uus-;e>!(tFfz_y??Hw8p>.+_/7%?G/znYv-ͼ'*|4u�߶?lˉlk$Hr4-?v Ä8c9[ )82Z\v kti i( yL?KC4 0(c-/8Ǣn8=kK KY@펧u)@t:8g~)H{u4xy\SPop3kVF"%9|̝�kJ;2{ow3nE?3.V[aB\x~i!yyDdiA6m~)s|`LpI$9+xU"n6p~<'l뾵O4GA)uK&)X_=^%<1_/qg*xjdԹ !~<.55m7x<�mgA@e Ru\DKV8 P�2CQK4 A6YcSŅ/a=7&ac,�5 ii܈PAnCVA/԰#D'v9 Fݽ}(92{v巘Kdm%J[?�zB'Fؽns6rw(NE$^4'QH; RnQQ_۫:P j㹱1KӼhn7ت#iZJSE9 $PþZăʹm G!=2NRQo�}A~ɒ[RU_.�KdsO_?\xeg\DFBJ Z65kpmm'Dj1{c,b1 #+A)RiFmSQ;Kyv[iV a1;11/̍kRz<g:iݸAL [v 7p~f:Yκ%==P0֤O>AN{4<ȩ[n;?M{6Sַ"N"k"ť,Bղbeird^$<3x J4 ꪝ"F<~:3DLzǡܸd4f#n=�8(7Ed/ݹc^cG[?af%OǒnHOI_Keϸ<[0`?<N.(L t?(z''d os$lxA Qu7Ц܄79R(vF#F<N<b`xs;~sJ>,F�b@h4/=# ~߷/7+d1|d|͇aLgr"88SO߻on] }{[Nbb|r~xTe_T/8FU8%2/)hVHl lD^DsE_).9P,) %qkR.4WxmPsUw4RG[W}G޿(y� hspք~j ?'D6C_ZTdݼt �*-vM9n`,r7\Z,$FGr쵝w9F"N8 vU*/sj1z%1R ejX_ATH>vi8}zŗށΞڞ%|?{Yu^͢]'89ʋP܏FY6<2k;-Jnoȟs- (O^}6zB hӉLT|/x?LWhCE!;rD|Vjrhq|*s 6g̚Rg 㥳S`x<߳'y?\,Z8 z�h$Rv"&% veK"$̇OdոC^T_Qhx�c@vDwoݹOޭ(+bʂK5œUAAQQw(+靴n'`tCS>y徽-#[ҟ?pS_N{\BI>g~l"l\&v9{MT{&1 8S0⽴ A꘬ De(T'oz-1݉T3g)@F,gE:g QYvmv$tЫ͚9h S$Ԯ _rCwŖz'_nxF$Ǘx-Y(΁9Hoi GTU !9['(Prsܺ@Sf1UP# ŢqA Hn{}&SW?|3dmW޻N}u].t:wSoվ�1Ԍ[6bDo}r!ϡ#0fij&= I%@ҟN &$\ )^@ҬK83 W"d)PPBJT\ڊdcQ/bez*e)?w; Ejy^oy#4A@  &z[Z6fōرn9ȝYJUlj Qϱb̑ (R{S_)HO.tv D;o\ȿ$j ;t+=(1F@-'�bC蝴Nur9+攭Y{ َ"hҰʜ=19ю'jn0T]T63*?+ܢX;zqEU )ڲ璛0'W=GtNwCBlT:w7G.7H&C}Dz@vƭ*z!,U(;JX99hbe1 1aSGkhֿ bϤ/Dý7G_v.$⬺v|^OBwWdKϺP�J>pDi?-JlL;;H^U+rrDsC[Xgf1+yʘ! #td)k׿8ZV7ka2X$.A;A"Ϗhv:䖐·-ujnEl,Ң6޽so-16r}^c#Ewce,7rwo]g>]}e{hƽ붩{ҷtzL}Ֆ՞?gRGPfuҬS6+{Ht*W߶\[O1UE*|{Ŕ0u_W#$R"SZˀ( ?1A]jK"(A{)t1X  ,^Kw%a.1;wil(J%{?OKoE(t^Wȋ`H!;u'h!F?{9z>bm]%7/ޏ(}~4zM\[;KFE֚zKRPbSVxU dF)˔1)(lH[pGMD%/?=X7W=M}5d煉Iq\Kw�@9-wo=Fp#'( ` nE=vfc$bd++:b vB8IFk`z=z Ά􃗁H#IUoڤ!X,_4H0xc^rBAE/M&޳'<JM"F</@mHJj¾=<N{x$sR??;zD _>x35KE0҆%AײY㖺 ) C!_U#ym#FǵN9ͭϭDwnh+ ɯ?x2b� l+wՎIrb7 _1YNĈt&uqTHz�X??2C?}_S?/#V*gbZnRߴ_Ƶ6Po cmnߺT9xXΦ;w6FUx N(kQIfK"tu7�}b63D/l[Fo1I(E>0X%"CRi{l`6~~.?9?λ/F~�ÛH?wQ�H_p̒::^qlZ^vdRldm\{hYDZ!�cH/ԭi$>>;bl=fg{=2 X̶V(BQ),&<K|<oEo3k3Z޾ݿKGںjx_{mo:dI%nnpU= Vi!j'2#ct#ƿf;!k:�U$,#R]*@1^LcyICIWEbD" 6( -O6mn 7A}Uzẗ́?CG޷Owqء@$vF)5/k91GT6V;NuҜwd3`jOLfxdoMv `KF5Kajʙ|yU?J7_K8W%#D=�nf3u^7 p=VH 5I"q֧ %"If4o)|Qi^C 3# !p7דr Z~d${^2<pPfz�t ߴzG[bZ^NʱxNʲh[" Hi{Ӿx+?J#j'- BEl{-30Clmxةˆ�Tu\Gd:.x�8و,PCY49 .�\ܾsR'_΢8 F>Y |q%ڃ+}tY`z`I2ypt�9�!EvY6lvjNұ>i7$)xw"M1y(#r' h4ڎ HP 7 �x C3i'99Mni=K,_o'Д=ֱ@wP}3"N# 1nmor�7{]Qd2dr" nc(S*E:$=X.l؃0);clԵp<N`w3 X=<�w%ݙQm&=d y:iBR'M(^ÌʑU hL&Z42rƍGϙ�p;Kkuq)uYfȝ4@B�_۸[xBc%s �<,1pM[i %@+^yH!ICh#Vl!kM]f8F@ :GXhbڒ! jVeW;)Xmy^^9!qT5b#Tb-pkF|}x <TwXhr]�~`4G[6Nұ2Y?$=D4N *(!"7{}I,q +4ur/4NʡGN3s=<pݳ{5ַ4k' + !B+ $Ɗc0(4uq% 4unUSo˵lhs7 @ң I^|,8_!e&F%H*m#0גw[ͱ8Z9#{�xWA39zf͘<.;i>NICh HBG nƶqQw߫ 0-pz/Zy\�$Qc)4VA`5ۨDq->/66OX +[ Ms=I7]>W(co$1-F3iN>$b_Q>#y[*ۛ&:' Ő=7؟ꚚXc܀?Zc!F6@H"^9aK �("Y&&$|wMwMǎ[vېǘ Irx׌kňx:r$Zbwnnp\ IM'?XN* %DTDV\" 9`I M`1 y&;=āUe F4+PtF6ti,݈Cنul Svj1* `ekN]8A~njp訯9,phhs/p[(c&@3iD~>h:nNPny�<伀u1$)Zt><f8ni3iV,BrC`y4;рq qq#&͔+УM2c-;f%M$ Icb$ 1@$X mHjr-I<�Lỹ4։0؅!}醠?tռ]4Idw^gva#  ) [ʒZ^<�h?zo'8yb.eCbCbdA,(;n 74x<�,OB(7G’, OtuAP?-n.�b9|1<ŤB-׾ňƝ&ǭz)p%0t˳L�r7_pǥN^kYDMz iT5IMgiAk$n֒M.{pH�@N$fF焿\\N̊fl$g 5Z{wd*2+rk-e�WW0em"y3/Q );pl,rK&SV k'͇m,l?a?[@lQ#bI\)Ơ}_Co/i{�\}er1/m-Q89:y� ˭Ly%^-Y#@sEJ1b_ ΋`s=R#d~H<�O]�ǧ0[\�\e zV]^+5#W}"lm~Ayrft͒MsFPŝ`wC^3�6AF Hijm?m3N]y<�pĔ-ۅk):-Y~G|(*:ysnrhOApߜTqbBv{m43(!JllD]˔w.tGoQaxx8st1W`4Ȟɓ`!Fk8T;{n H ѿd,n#W O4L'.6UUfW/:9UbNvYWI7d G JӴ\"!޸A 1Y_;X<9�8ޚzE,Z m4awBue,$6A+w!hl!qة*}5=&, m#M<{{" =�-~[T0sŨTo-YB/3Y1x׈wGVMpɍ@y=˞";@ד8LZGy]$Y K$+4^, !#$U&{Gv䜘q< i=5=YNe:x菔8^ ˺QH(4b[&tĒvsspFֽ uۋܨm1Ni8D@Nx�#~Qv8Z k}SqU+?8R&؊\p\+ؘtIXVn{8F%vgܲc~Nx,Zcwq4Zhl;s#p(.%r u@< [Ԝqˎ9~n-� hBelVHu�H7 Ĩ2!>qZiD&F<'Y* ?Aqp-;G͈@08ܘc5&z ʒ~*UN"vDZ37wSңWܠ�1e'ܲ"O6 FIu* dǞ!f ?-~i >!wIkq-*M^0>BfTۣq==I#nvIS<~G\bԷ6555*Ң4G dGFЄR5p!=WߪМʻy8~Y|K8%fTM tyBW *&hҬO3E=t̉.֦36655jT/:�$Kˍj "?8/;T*X5].CbVᆭws|�IȵsDNIw-ib@Z,4}XhnWA^1U6CR3nYTsx%eԵ5�ZϜtywW64b8@ 2Hj˫X Y,?f:_%VKW5THmnNKBq~#R"xLXDG^yf-Jyr!0TSIH)TJA{@8"zUV.yDkj�H)O�&tƦFKotu]վ!Bc5�yZJ I8]�ÿYJ7>R&OܜW7bIw8C} A\N$MӜܛ>GQR Iчe)Rl|]+JKECU55WCsnc}[⊺Huw�`m2L&Ĺ .�@!@a;ձkq 9PTA^(fia~*r(XP(uTgi[ IX/ڲ(}uZ(|+= *!g Bxw׳&ьI{�|ι,ZUNh4i]~bd6cpdv5yv� fM3 Znè :կ/-XUzz޼nF)y\QVu,جp@vN @ex���IDATŇJbi r3i97]4+6!eQvnP0IQw R8\oYN84ܖ[thj Hkj՟m�"ifn ,`3]36YXr 5Jա 4eEѿGf-K ^%kU'Ei_&kU*'@$(|ӒT*x}ĂbGXEDu5MbW\W6+cgAaq{OHzʒ~ V,M,[R-L (@Q Nvj>Z.�^qv =WL�hDJ&m錑:3A*k {wFYr/ 篁V</gδyVUN,"*:[ |9l]͂AVK%2T;~): >=a0‰^;:5.O'+#p*oOU݂@إ;yUvLeGx-{TZnINZիØH3̦>s I?ߡr?C}N3!O6OքktXD^]V[f2eO%]U,]P r9,G8TL^ ;G~UЁQzwȅJe/寊X&G ^ ň@<�G)%jb%͑强 /WWd,?5x~@/''ظpx� ?[Wܶv3x' iBP@g[yoƐ6x*/ TC{1I$mC /*�vm;q-1k[i2Kd '-yLazD+r&EG؆P[ZUU'ô5E{yE{fg4ǟD;5b {qe_yR,z-Q)ຬ[TYDZ+褡"m�� `ԋ7xyI˕uEm+8 4U,��<>ʌxWSSۢ346U֪0L|Q梂OEkce{jiBAHmGZXEbP),?-Luna;.K.$>#=&iU'ΩK}z͜HYiYm߆Eq9y\p]� ?^g(dʴ/߳)ϖ.ߋgZecuKBm-4f!Ff4d5Ϸտِ[d*mȺ ޡޡo7UNT<7`ejIe؋$w MGfAN !b厜sv8_斅h}bI[#?- ʓɕڞf@]]$[u: ZtҜ=S`:sef^\U.$EιO|\�>jLa4 zp60⏩w dڇme7?:/kKo))ɻE[V|}LAA (tФp&HJ̨o0b.ЮCOW+<-ª5^KKUrcԇӕ;Ӗ?.ʖ]_ʧC4 'tDP$(xrק+$('湢j(2?/ z._ewr̤qpԲYDDZ'US?2)vavGLݗQv4h^ەk+'uOtץ/Q_^3F(1p3tz jktV (ڱo`H$ږ(u(ˤk_+|loDiUaA6CX*Rj:J`ISɽTk#~َزR~Lib4(d}a(s᎗k{/FٛMQOIjqEC,o6JmC)B)||pyM $zk'M+桫s (uuuQ<)SĘv;}]sbgp <zcKm&Kci(1v34tUb_^/S]S.9z3~5iY?w 2Fit�Tv:oFnN } PP^,Hl+xݷhg^^^)Y TFCUܼŘvo!BeS F*�d4,-֓ ^JZ4 Ix NPB58</{M/\Fvu%wG:YUxԾ}ǢVcC}MIX P| i(\Ѩ^mVe~ VP =V\�hNGVFb5fKƋڀaߓkei2ufl47zEWX$L%V|@el)=} ^]vp&tQ+9ȸ^^"L:W55M9v8j{]aEl&m`hp^Pis-v]DD[~~?](XמT4d=ʢ<!�*VO.` Io"G#U]{S ZNXWXQYj*X#�>G_ lo&W@!E!ӬwrB[4+fсUo]@9G.],�\jXX4j~@zrz৔)' v3=N.�"Z[0dIv7kz{>,~#ko)ѝcyI^Iy_PG}dkѠHbVm~5J,P#0@%t^6iUrUU*Bi |tO×AzeAD4:69os؁caIZUٰH8ˡ[Tr66ո V +sF cT$NҤ={|nYWo d}꦳==`& XzYcoz]ĿEiѶڒUx)(}.+}iz}J3|Ci(\V BV CA ǩFמ"ʓB\!}}a܂1bSNO/]!9- 8@9sM|$LMi!;J$!'[z./wPLpVUU[#P,B g&�6ih*mfςxEZm{�Czkj'fnۓ&,EqɫqՁ!]6[g}~Ϡ.%_דwKvn{Β@'$@>1 pbD@ba}H`&lkm v r 7|N4J746xG8]CI* (V ڱޛ3 Ա>(1PPDU|m1:0D5 M2-J䕲 s w޿p"=0*&Y|iyu�w$I+x�\mg,,{Ikz$}۶],lI׷6  _5"I$�TTf9[PuDT$ �;˱i*iյH4:+@iR2 r#+҃7/MYkި^")5$ۛSE,t6F#[ Q7C(5*Ja:- @39ӒXm,P3[>;)-6b!y<m2,/=Vd?Qޮ~P?NPF @^ ^DIgj[H F P-BEV OMuP&bQbLuµʝRe4'9fH }ނiXTIY#,"^oOt$HXT^,+JQnQA'6Xp !RdP�A3QeM pIJ G8͔!~kY Ki633Bg4^jF6f2 v;70ЏQրF ҪW'"rH)`Ė :a&RŒNg�WJСu�iz\bLliѶU/wdUǷ,ټjm:'-1"|NZV0EZhi4Qm A"@I8A;xZv|J֤\ZJeZA~_ZćMHS`:'E\490m$Ж6"4[ۯmF,?mv |}`š_p3hl]7<sFoNM MVF#MhjP!y+Ӥ;~Qgm?E$9I]}a"ͻ8E#]l6x/㏪ʪgE)7/TzZr΢sQ6-7 �p?>d"-] I0eX,-ytP>3}&#Ո,v6TM4Lփ #sx gzLq,ˆz_(WDZ#lPNV|< ӼoWL/A74“ro l'D4R8gg -$$U ($W+,|%d y;Rf : YU An.TD2!.(FMy!~C BaAüAsd"L 4`ڊDf[>6–/nmlX}#HA/. LY@cGF[C웕1 owL;xQgYXE}+&H.3� z}y]K][]&`$א,4in|5Չr1x)(bU39)UǠ5nG?;4JiD^||ZU1a$\^S SWF,#Z*r`N1,`рIko֜U<HIG?>llj4T & PFHk"]cc?'SSU}x_HD/,,DG߃dK]O/\:wXUnGF zXvRbzm<qYq[etEGcg~cgv*z $d2,2 W:\Ss6/PLYgMa1L$� F`,i0^V ``f_a~MO;SU뛀H"| � 4,pUYsJ#4,&,`tV\q^OW,NzoCgF )@cIpqF z1zKfy3.H]8z%+eŁ*CgA+ (g| FP�2 8�DUI}<�-6�6rM18QJ;PuӥW9a3iI>4&3!k,@2H[D8C\@k'j5}N=z^dIw Hvptʌ~Թc^ K3+~Xc?Oƹ{-WL"Ғ4&tg BeFr,q@SXQt@,>})%J9xs00'CIiYȼ$juD,B]6yC�.Q][ (Bk;D.POY\˅X H;&eDZ;FGvD#I\ DS ?ɶ;z'vځ<C5w54eXv͋g[Q12]EA\1#~ ֪LDۭrf$,.9P}"i}Y򎤬`Hn,BCQeZT"Oժs'r #("WN(/׆'7Ĭ ,F2:4rP:T$"/pb$v5~׼2.вDȫ2$0HFE,8eom"Mk>΋^pJKkYXfuٖ<k8Ɔ-:u(vtg X 3聰Ha%v=n硲T{ Z*>-9'+a/R믰ŋu[9z55�w%Y Jypp9$,1+I, F>L&vb+5ug7K ^ID'�Xe)YGd{K�6krT2"`D,E,EDK' 'wAb%GUO[朿dx=quIUIuyKSR9Y+m5._Ѓ5be@\+< 7x+rc,hLX"VOI^|wڋY\�خxE*620~4VāCv t|Ik0#{g%okc`d-SM6BuPJ>fu�MoeΤ-41\j9ONj}`Ɇ5*.緶5m'4Pooω7)\Pz`ΊO'+ (9K Dް$m,6!NPS62mLc+a H`lFVJ i# 1Bn@ U[#Eh gh,X"3(f]ݳ - n?pe<)ޭx[̊j H q)Ei쏂&P3= ~z%!-*P|%2k8�MiA>%7k�E�:$]^SSs/"N㫱Òh^-e,'KBFΒ୭`D+Ұ2M5b _awԑv[ހ\?e66/up%៎-:FZbV[QȻ4 ^}$' MuJ\x (vBavz0r6-V-)Ros >WPTCj[v6XymMf1EZmT/s [_<ח? M<:?Bˆm+2 - jEXM&D&#n?S\s&!|J}lcc�wƑ%b.�a}{Ĕ %&ljqvܸkIG H3!7Fi#:vѹ:%hZw~v }b&Yte> in2`H˰x%2PHBH+Jms>t+ns[VZyc"1mp,i:m dq�sVAƹ 5DZ]F(W[T~3}Lൾ%#Ngz n�_"\uQu$ZdƈcDDI*HhFr4sue]~`{ͶblI#fZU(&fvHkїqqڬa{&{FmUAJ@&v=d ϙ؈CڳzĄ#f'M;= >xDFer) H>gI8 vjGbrq~٢s#zR}iiָ*U=2S;i.�f pS!B3XQb$j o3-FE.i G~Fߊٵ1谈4|S@1ZAޒp@' 7&Q:iDʌ[]::Cl|xK!Iwa`hր> -uߑe{!b)q a foQ/MvF�ՋF&@"TT d46ɏcs[(:WS}BbzY7c ;MШe FmS .I5GM@~A·*&Ls`d凃R)`.?;]�� Éx�5~[+ъ4V ݊t Ik;i~t~p&, <kW`HQh|Fj Yb\An=K$՗|^3sVͶI3GĮ/^O(1I,|a@mlAL�a`iI L0j%h@ >]v+ɋX(c2)%jj lWk7D7zM&f ihSg [V9M@~# IEo &Ɓ%!NT-ɺQ Hc&BaĨjwI лIxd^:KXr"9v`#FatM q9a5.RԛQ�1~^ߚ'o Rjy_o0[Qk!iY*k`lsffGHBr�& hCl4MG| kjVH[}YXn^БDʆjAG۩ѡhWX[8Nr¹+&6Z\APRE]R[-u/?t�&r�Vlc RS-  tx</ ]h$V쭀&K@_1l"$̕�WBR%_տoԗHI[D5* msQ#ӹ,0E~26\a 1qs4"P"﵄ x<D>*Zn"͇  ~|XeÑoI8F\U:kAC=`I%Lsm޺e|֝ .~܆%,7ǣ3e~fZ;i_3,.�VgrGBgMQțCS<g+eUAm-GN Q8vcԄ$cXSj^v߷uI-zψe.H1xME @.KMs5#g~J݁<I!fZn,eRE0EdQV% 74,9K[PP M^!QvZ0fFٵ=Xqg_׭tym`=N`x ֬UIFxJ@#981T.wȅre/;Kb {.$VM21p͝<^,hO詘xsyOZtDyh gl4 Q8F9$WPz0[|.I]_[8׎`WQf-gr(ܲJ_9}o@(@A$FUF_q`BӠ߸kăk8sTΊM9kc텕3*sv;<4۩4_=qddz\ZBIjPeusӍso0o+4_ZuIQe7kQxG á'';9&3ZQiK$k#bHLB,"NI|le>p"9y+,\t;W*=\J]T?kjoFlLhդhvzWꕊ&OS} yd\lLkG}* 漢2kB�AV", `Dw|27}!'rsȒXfFqէ^vAҞRhqLR|@ʍг 9ЦtY6-Uf!*_5X5m9x"m[OR9 =]1d"|I0'.k("0HD#~_DvXfA_Ŭ 6kVXT- a"caIV3N"J]zeripz)?HH^(Ht (Hlڟۯ5A> 4Xqzo2 J`1L]ݸ ku!WChܲU` Uo8�kߓa{ŗj b_O>E9ײ3r'$Z$GCpd#ۙHUef̋)Ul y'y/wCI#*K9$VZM4$�rx'3jQ97NKVJgZňZټ~�|wᎎb#Sڼ&YY\氢\梂c{Bo`ͽ%$d͎Sqw?00H|Z9Ojise9 ss27We.LAEJ?r�\ Ix[3ـn^0FK&kIb>rѭ+O ۑY:Gq7̚e͚bxz(w�, J0r3-7~Õh &:%* 퉉+,HIS@̾O<A/{76lQ~l^ql6Iun30FY]*sх=\l \NTͯm8 @00I3 hSY}`Kк-TE-xx>SDg4]W04i~ 6<5+%CI P>>F]73&N @uXӬpb>KBkNy`PrSUU)+ +R,J+̞yؙ;SKgMP(7K =�$ 5>\|4nz2R3$r XJ&67P@PeޔJKg+ J}35(-P/ D\ڮ6i 1=Y Uٱ"X*fړ#My XV(@w]p-Hpi|R7?=n}~ڗo/DE2pSp5uB 7S,+U4L Fr[naNdYD J$Nzxdg^?9 UX< mm9]>#F)+Z0L?/qޠ$$h�HG-^hk)y[/[͙FkcHJ<t9WO�Փ`;yhMPV'! C{rVl*< K -y(yKeeC!(`F9D@j\p0IaE}"y~|Hr!ZI$[%sD8Iď*V&(Y fribJc< :Bf�UY{D:"wb4$S"hN-|^4iās?{D+(Kbwe6susz,7~26n CU3[*A<TwɆd'"KJၯ.r&k٪k\K]h|ͲK6p �fّmtb$#u]w2/Haٜ)<((7[ybΊREqIrW7 6Z_O?;/wk{y! Wk=Uy^+X6JUh,F1O7co.m%wbhX~uтO)NQ<+>>'>?|^<%!h2q4{-MX4NE{GBJY e-zu4&zm}8mMѵ'{-+ƼکI;/+{=HXس5¤�7{$:iNJ>Gp@G+\p t�z8RM{Uqҹo{q"}! N[]˙* Z6r-G_mbMGm'&$CRa9?AҴ^U3u 7�UYDN`2bדQ|]{= \K-r8}|۹ \8(ݲ*|-Cal, #6['mj^󜂤-YZ]IGAme0Gx/uɋ (/ Qδ/eq["(D'[�1rɨؾ_%n7Gήm,L"O@,#wM.Kȧk{5...bOFM'wK֥@O&(Ғ@e+1ˢtur64?n qgl,'8hݲ^Jlwm}'F,$n1rXdaIД= .z{C"( v~b\u45` q?&0s>S02r%f[fO^k\KN i,{&}9K6̘IASLaH]VcvHRi˹USJ"aSxuX#2#g_w1_xʋ?N?%i M m~}/$Z͒IĈ&e^BneOG.)Qx,B/کl;btٮ'cϖzvCh9Ic^KbS5qmF-K a9߷4z͇<Pd{ Ј nt?WrӤr\-ƫ#d<i5U;LUG+c!(mIߵ4XYJt\} _pxך\_)n�%7h!L$ f>Ëa sA+x ᛕB&B0b=?_gIOƊ6<[4w "*$v2qzisURZez%N,I;׉\hKr%$)Q,)*<["Z9\Ydό,Sc?6@Kը{!`JmyЭ,wo[1CJը9Ʊ@UHrgƑ%o,GRݕ$�;( M\%E`R̢XU_ぶKE _N_]RHihv:HhDj3QQ<GHnŒN:E7O4kPdʓfk9,` Ui!{"PTד|}kq[Wٛs\V5aqQSi*#=@x$!SD3ǒFKb.]7Lõ\9(41J௨n(:-M۲q~+BUо]оz V?zvEobN1iL�21QcII:~E.&H|4J*٤Bel͂E^[>JT&`~QMZ3isp#K ֒FN\Wv-h2j*@Dx2-7QLAgߔ-r7HwmTfv(BxhbX&%9{4rQV-~ 5'G|_>o dy~8$FK`HqmR[58@T%3Yz�mN Sv@&%Ee=J.Ujp٭^_yq ZIi6Ϸ_9mlc @$<'%WJvMZ…^.aI:Akw[&:jRwCHwܶ%W4{7hLDy0OKzk7=7w$Xhص9� xf;q.|)JlHIeIС_JwY廲]=oW\ۖ'7+ M2K u 7"߶u,~QXq1pCLҼ9e]', Gk| /+6%MfYKBr�ocVeW7(UG$+Kzm&Բ2.D^f^J'Ф&U*וpQce`JE Jej-RDo\!RYsK/HM)8˔Y&bA+˚0GrQ[a�(xOі+KIHL)q2Ӿ^1DlBH^ پw_ cUY~F\G?U-U"ҵI;K+HLdHdQYApr'_ߌ/$BcIdfbdq!8͓c+8?p9$x|W-c-Zpd%UUu%!c7(qĒceI(->K!0!Hjxe]b<�>VTii LQ$XD̸M<K7#qƱR8<cHr#R$6INWXY�ʓIfbY1v;,Q6,i,!~'}\Wb'v6m_t̐{jq`Iٲ=R-$f6,I<; %?(wgֳ>MIcs_0!_KªHG$$c{YdMKrƲn,j Ʌ9�moŀ`S93m1D qlKmrYDǓfIxmbYs\= d-WcQSMsP$F6;~/-ƯaK{dIb'Y(-N~?,M0Koxgz *|z7Yڞ2V#&6L-UXSUy@vT|4DVdIٲXG%ۤռ] I ]QFzv^AL' |ۆcw뉉*5i!oL/hCeIUx#QfIV䤱$'a<�aK=C߿?<|G70d %v߇py[찜L0( ZY HºguDq%e˶ 2I,MKr%{{�2L2uhzOg ik?PfBbgA9YiӖ?wl<?뚀G#~[ qn(l<, l0q>,I쾐qY�Hug82t+4yG /"moB#;PX֎_hQ%2#tĜAXCIxD, HcI e,ܭXKs�&;4u>A) LI;n5Mc^Q# ūp?&LZ&=frG=^ @ f(%A(E ddLDyZm!6Ĩg|tj+{Or5v�|0~+ҽ1)+¤ˡ,�ѱ")ʒ7۰$6&{x�hy灥م2= ЄO^n'f @?TQ$hʲ$v[D֒+Z8?tG[OÚsx8fØ-B>Jıc,BS%?,W{Zc3fršϴ&LNK qh"m 1^U'ƪ^&%`ϱB,dZMM6H.|`?7^K8o+nok$E, p:8V4ەT= r7$�]'kJ_=2Y\VhZ,M _n#K>R<+E, mՒ8qoj'q I@֟>^|p]. 8=x`s^wCI%p|=qp_>b eI(Ei{xX&YRy|^7&R�a[vgWI+Q}G1`FQfr&|t=< hb۳ KܺÒjIK`Y֩Z!M֓`I=|ţ?]?G~>ng$I;7_FAd.wqņƸ?Nb,,BV`, vF˒ '%]y=�<�`@3G[wtx߾yGEeM"o>*}-_֍}3 0n<?rĒpD}zX-(IkIb7$7�Y$=2u_?mWs~󝏶c΂uG~c(` .�<֟f/KªH%YaѰ$H7(Ѱ$G�$e6辸,z0u/fn{K.sI.^ƑijmDӎD2p* - 46c5KLJ)6VsP@; 3<>V[u &US0ekkIrNrB~ $$sNy}>?;9s+/`(葷mSHNk sR$"x%-dPRJ><I{`åZ2nE*؎on"?2:Nh@6AH1AV`xM @!QRJbFޢ$ P.|%I�+(MBfQu4 WԜʣꍷUԭh0]3N68ԄjoCSFKRhcS$PBd$J IIˢeF"$_ԆsR8J"§PDeKy4{wzt=RX_N&A ZI~J4Je,.tִWBɍubK'ZYoߤ)IT$$JЅy"0$q8)jJ<�윮~#mn6Exp~qZ8VԞ7AvI[#wqh帪T@UT<ߎD$NI4ր(8s"%aFvyp,?in*ZImInOM#5YTV7ʩ~*2*><5G#?GF]gܭw sR�cKBk&A-nL6 JD$hD%E@IxL!%y$|4%%Z+z2Qz�[Rq'TN$>X|PF{2>Ή*i+/Tz Zk0&.?NoKkQ  EzQXYmr[$ČISRn-'`kjGj2<\ 8?,+ݹdpQEj3QP)i<ReG&Ө#dv{>z*8şf % "dN)) �f[8JbHw:D 48t`ϴb^*T5g6'KVHѣk*rnhP8L@PxG)<�9%DV>\>J%E%JsPR@)ro;yyKk6[KSざ�`q4rό֫26m='(j(]AH_Ip5C{�ttc9'lqq°"bD$hD"$J|&$8/#nhq?;v/'K'OT PsgզIrlWi],/֝zC35 \,a<�m,y*k/~dUkI$޷δDIQQo-4%xIRy�P0vCL''ADL/.OWn]T Fȼs7V}v;^Jjՙ=#Z-7=7x�N~(Б(kӡZqzJMڕׁRr)ɇH%EOI9oF<R 'EK"k-m|O'@ꪷ_3bgə%#E"vQݝz5-SW f{� I\�YRc[//f# Jb!DIPSmkB䑂IS}#t+Ӈ4왛qx�$G` YEF)<Awo܎̭TnP#5L7B4'虶I$<�^/q-Bx$c˳y!d1IĔ$J&=x(5-a8)"JZ AJ4}A[K&y�S?�P#iUǵd+u{75܀ P~FP=uw9f?6Z'$"AY\X]T7YTq2xʏM |Z] R*,ٺlS"H"$-WP%FrQ3-k#pҔf|X]LMQ& mKr,&s[ɺ}\qS9>K%I)Gd5|n{KuYud, pɬq+ ۏ孆v�g|.F$ bJf]ҪUk%ߜ7&OۆMP)8SLu�h[R]4K 9GU';$YXW1 I(΍;fOjcU)m]–DO${L0apVⅿ6C=AQF$DAIeyh׮]6ܵkW6DEINxIPR,nGbOKML675d&IJ Qq|(rRy{UNڌ6UUTMN?ř[BO~:XR]ݤj{Fߖr;o Ub$|$VJsZU$%Ej&ymH8)%H9tΟh6gbp{30a<�»uɛEh4vjԽ;EKϡ8r% i֧n/om Qؖ'Bcqd$Q7$ZJ:rqNWIJ&( ~^0dg ߗk| @Yۺ<{Wd$y2QZdh{1WI={83bF=�:mӇu#yK%ADR{( hsU^_HIo%ѶIVk<X:�L1D dܖA4ݘ^䨿 r=q{R]߰Ww:5;He~1^Q9Jjp|^Yh:�2zsbSB$.̂iW?%m`%( X aRy>n'*NX)^KbƄ �JZ<ՙG6qG!2$ԓuCEP jU&_7(Pu�J$ ˓0M�bSDKIdaQ[R$$I<rԘH j=Mh&w|]tsCuDydTۗaH7Ipչ撍W,p @NIN*Ji]0=؅J"$+6#<;4%~QeHIH~A7K<;JR<Iݡ{.WB"[;z26qdxj+5 HRQE.]VOs s7Pkmw4+(%X$VJBT5A7Mc%ibEB)BP$\Qb\h D^) Z�ucN KjWQHPkݜ$ WydѥѢv)@[$y:3 0-&)ɛE3%5U'#UfY)J]Xzo-9YS6Cp\5,& A!ۦ'yv1 "oAj$~k٥03Q:jXf [e΍lr+{1c@u.N"1@QIZD5H@JqIdq2⎌4GIʪ,8QrR.$= U,)Ӯ�`9#i\FÎ@-_n^K"03 , HNua٨9J*ݐ iU٢l7.½>l]zx!u]G4gPR~[@2˹71( è- *Jxc`$޺�A4ڥ~)}ʌB^X+ǥlOC[D̷0&Dh2\N|jpQCNP IjH:@SeM.ͺX=n6 #W&"W:ӦP5wEX %!EBk:c�]JF,^nZlQ sM_d˓,Q?URВu{ </P#Zc[;.M1ğ% S~; =o?#q 06%i|&ĐK2ixg`Nq H\N"xx% T彳Fl%U _BUs;=yjv#3EΗl m)R˓0$#,rAaJ;~՘tGxʸuCOԷ-B5o'\j4$9푦^^LCI]$؏DQq� Gwdhx6oٝ/F[?7RGw8w�kV$`_�'by|$dˀS {Ғ_GHm]iU4q{B-OX}V.�%%QD@IBlS'S=-S ,zX !s~{ 3v,=vvWnzaH:&mR? j G,I1(ϳkvMPPd^phIˏpm1o@Y/y$J"l(6zn rI #0D(l&5PkS+y˴﬩$F~^w-۽'˖.K a֥ma'9/itk 1Ɨ+1�m1AMoOJ+�i$Iky 䐖Iku04Ē_hoxJ2[ʲe5JYL&X:VLb_ct@g,:hZ7N\z�XPm'2dIvJ"fM rC-N7%S8 ?"w ,;r s~E'լEY+ˆwV`D+5dgJָZ[6 0MYn  |`H|jg<�BS'ޯTm;01N/%E;?|7 e<ozgX{;6DB w7@MnZ?]WӞxE 6iW G3o4GASɀ'%{'K:3濾@OI!�`Ub%%SDK"fs{L#7DIVK(J/<'M9zH&�*,8?1e6B7tKv,HWFW/y~xڭG0(Kd $5G?-@G0a:L@.�/%7Jø- v`9xJhW5A0DDM5Bzw-G^_-ۍ$iw V潓tdg}uz�bi{~_)^=e T3 |D)IX$uz�b.=)I$etSI)@IV,pQ֐(D6`2R7f" x5Ju#;uE'[ښZ;:p,DS=�1ߞ\R [QG;$nf?w$x?Z)uN6fʃۯl񣡤,ӷGh+]λ9P݀i6$4jXN ' .d;4DKJghP2(1+mPHx l{߭)/ ŠS="ZMXMc >ǽ}$N"Qj(Yf0H1D~I.ih +WPF掂N\mxKTeJJ]fs4<u4 q u5kQQVt $) 5N/4D*9$%hڥ)^)%x>e@UˌPOoUlY V>TIbPyCD&+5 RRds})pEL-^V`�<3`KN&F =>D5b _J YkUxaYyمv;W_CI^rM. ~;9\7mHCT9]*SPV#Q%ΗA)ZȂˆ)K�0<4O'>e GhblIN$`]�4'|ϏQ()^ʆ}vrgNz` ߶v{! F 5>*ju�fPY K" `zx&*xUOk*Ȣ+/YL2{rIt|b5k|IPI"ҐDqHI=NWMY;4E r_U-TEA<V"ʟG;7kK>SwMv߼ť$Բy$xi]A_TO&_v _$¯Cr�DI�i@]0G� M bW]gѬiU9:>%4Qxy䴅[P� �؁-h֓dfD:C$ E ~($y^npxurҸBɴasI8mUHJpе!gi+aԾA$N4mC~qHIPH^v56" JZHÖӷN/'YܜC~|:?Z(A~!z&n/ȇ&xoqGfP (={ OFEcYZ, LnMzG)7 Ma2hib}N)20s,6 }ňg 'M'QVYJ.r5JĤ*ZOU]o }~%7۰$K %)`:4ݢ"WE/5lyh0L{\QPmx`YdDmf.c;Rs(]7deOqKcV[i˟'JKדc 7 R,I+I0|ʳK.r9J^PÆ!;'wRgi_J X5n$tCtQ.'yYfփ (oi4gaMSHAK;"ʥdsSOꖀIƘKsZHᲫo\UYSx@!F"?0y{F2pޡJ,E`rCO@.z)IjߛՆ-r ?'uY9f{)ϿI9e#&g`5Q$<^o(#8i64+<TlTiֵEr(I?[QRFuGbFH{n_Bp'T9j I:Iix"v'''V_m4*sjKR<�1DsM ὖ,A8"%R:Dz�|)LquLVC‚^JB!n10jE~A>@O�%>Jz Q(?;c5LGW _C;SQu>IiB:z׉G~$ QsRP>9t|0%T"x{\<$w>xGv9 t8Շ}(MDC n^& 'l"(JÑcU){>3 =) �@IRn͟zգih$J7nmSB.1�[KŸɥ;A;/'/(ɹAcEI,J`9Qooykߒˇ Lyx%X$AN) Gߡ-pwO\&6DKIߥc|#/epz�1+$AfhJFˆ8D:PXRFGĔGu%j;CrY٤)ke61՚կrNSz-udp+Sd^Ke^˳l�m84rICdZ3EBs gwP. 7.-3?Q/CC@IO@"ډ0b9~ax]U UC?-B@EDxrIPYQ2ibH} f!è{12<|jvG]V$x4& 7s0ʶa?QF ?LKDawڇ>fo=xFr}NVܦ1[dD2)ap^- Ġ1VӹLAI&ỳZ�m4EHC)YKn@rc~$=8IP#N&:4Yu#nكQxиi}"/XC6>(|4ܒ JS5*$X&�46ԩRRw WзJɶaqҘm:"&eV +*r*FmrZHF^Jq2<Fi3LjQ4sDȶa;=%@v!rs!o>F#n1-%`2)8@d-7Q]K&A58J .Q% O-!+/M4^dPTo4<a,=^w#!oq|I50٩J1%k%A(zD;P@@ [ QB5*r2]/$H)r,:8.S(ɂ..fǿFm'˗ݘ|y'y@<>h#JB76<*L\AFx]�_8'JYxf(vݛ =c\ӗXdil61t)vV%ADS1l?L$loH3>0>g5 *OABCst&vsq%d ! BA-gۂ-.x83191zRUw9p:QR�櫠�Or{fb1gwi3-yA(hRҍ\NbSϴ{|�8/NJGS7YeLcXu)vVեZÔq4h:L@ ɣ$\^\-aex;-G"[cs^'MHLuD0" dTZx8i"*Zzp �QU1$)z BrVAxӟk>D34U$RzI[䔄:xU ԠJ�|Ev�ΰNΡ$,Hj @.IκRRL6HR)v]$gޥ5nˏdvS;Q/*boQRc.cep\S* dc咰 ͈9)zI�JHF-k&[R<h NMƶ?D~"UB c\ipWoFmB/7)`ʙМE36UY| 7fG0s/d{~EsK;YZPQ1I]Ӈ8,k̦ގOXb3o%T{CJծ1gRdTrjA`Ncm@cV*Wgi2FsI𾊝`ͪ3MgFdM&$LSGIQPmH�lyJ?Zkg[ mY)~*TkWܤ}'f8fw_u)Nq_B1ijoO7%n:n0n&� x)`JX~sI:U2oT[x_[6 5Oz}?aId҅.7ML�?%i;JYѯv,DIDJ#i6~J nsPL4FmQUże`Z~ %u}z�E|y`B_ե-KBUQJDJIq]M~LYkfieRN`պ2fl tRPg#7O9i)avR&E(&b)IN0RnV&o ?h3*e;pŦzg}-sW|ZټӐʷWl}Gh% =1vd^)IN0R3eRƃz{dQTyRu[Aljk/S6m1 vZAJMQP6q6%ICI%2`8ǛW/n]+g>Qnas[8`E޿3Tהә;Z#Xh%\ d3vy YH  %I7%q2@fU)pY N݆,Iw ݦæ[]eMf�.e:U6 mH~qPκS$,Vr+!J)&4ZBUW@;&26={QΫ)/Bz60&^V]BdH"Po\;OgiNF3$u Fn6DS8גvKBԂI~޲0]{EiZjj�^ۑ*zzIRBfaZa[d(uAk=KD`<؝TeDDIs#%M>kKk0jlP\u#^V2u6Y ) IfUF!¦Ͱ)D 5,1%V9XhIy-^˔\SDMy5fʡBvlݫP[ X{XXɇ"Q�OyeAI@f]Z3.;H"8X$#)pkiy86NNP=ZwJMv-�Sv+͕kG ŒF$J¨UJ"pi4ʔZb$^FbJgz-e|1ɸ)s?r~ a\ ${$aPd^V=( -!4iWԍBca#h()zN HM *yuqeūe.^rqݯVg [B`<�'^T$"s*Ԅ*d^[�"$k2dB0ek0,7 S> 3Wbl];M^ 5Ifv<Kn*0$k-�e'D&8+W>kh:f.~$tqzc$M %pV@IJn£dRg4Y'G,Ȼ-|RHF?"H~//7`pDe.T%)>HFIPkf�%5KlYfw:];4,3PͿΛ>|<rK{tFM@]TcJ$QҔuQ>#(S|j^tID:6#9fh$qc5h2zԲJ0( G4)RJ."WXd6r. *դ t_$#NL =kz(�ZK%,$@ʴBIflJf{Hb$S{6?HSLj-@WN8x"ۯZE%,$AiR̔Dz?;RB_mpkS><\cR86`R$Ci<DR$IөG$IMJ BB85qXy)C'dˀi㢤IRL1fźS,hJBq?2M4Jbm+%)fIzOIAk<W%j@(fZaB䳤Q6MJ$X.Ii#P[?)8)h-Ь!d(d\,h$[icdK;q[$II&QPzjH:wے 3k"D{1weOd/ae* ì$d<8(I0JRi8 :ijIȽ'�,Z:`^V* V;srxd&0)V(IJk H8s+ /de KcupNW;oWo&Fi"Po]K\&%JJ~Z$!S(D[lud&>M޹良ef.kyK$gZ ՔT(I�JB~ 'EQ^RRg(Fn+#~sVf@;B i9}Yź*7 y�DJ$oI$m?BEڼ{?=Sp0T2)9i4P\ּtby6ش1#K�$9u-!%I %GDIP呦4csRȵHt`S{޵{< [C{|}Q. w) k,LxaΖj -I oizo qmdTaSSi()>JRT))I!"5޿v]]3%ס25.o[ Xl lmoo2VxO-un<L)(AII:4)QR$BEBy;}z{N#irσty٣MW$@j 0C8"_AYP/~)ZP)Ҁ8D).kiR)IaV<*3r-ټyO~޼X@vǙn xa'G<)&#+d2ܹaACo$~J9jADI1R¨5Px8=Z$ 9{3=>h>c oz;~|΁z�4J@3S8|Ӓ>$S/QRl8hHBԐԽa:> 8(s8g 탃nWP2p.\IlYe!PiWp&% d()J "$I!l>}PN{J/|$ٻ(7WQ4퓖=L :T%IH%JFҤ4)i^oݡc$dO޵@ hےwql?httag^%q\qvvEԖ6 `Z;McRi#Ha)WiRh( 4=Wn˺y]c6&`CRo~mH֢n/.v _lK,X~BL24)$I( v/ҤKZcjt<BH͛'{ *҃O52%]۵YgdfKϩ. P6bd݀׎��XIr$GQsK%vk޼g睾wvH;Q Vd|_c^mS9et.rj뻆_3k107ZI<�RDS4)"$;!%s:逸~(ۃ3v9).lӾ;oƯv\}wf7PR/ ,8�[Am-q$y�3J>ӤDISSːDMI"6 h vH:z7gsPQ͌{@~K745#WD쵌P,SIpM%Je$J AI⦤y2|gØqm;/@3ۊv|`g�=⤔|t)TgiGZ#ZZߌhRIcQ½2!O"D)2J"2l()JDܔ$2gCD7)=݃=on{EH7qc|>. Scg)XK@pVI$Ҥ4l JIOLǙkǀk4vm~ tt6|HP&t88Q͇D|mZ㍙l`5gIZ `VnR2M$Jle^y)?pkHI:gP&i6fA$F,h\iv0^ײ|SˁrBqjVc&ݛ$&Q`DhP()ZVɸrIQhOyITeU;Ck@6_7rw7ReN45=P.WpN`5L@I�*Q&9Fn( Wl#$vMsOmj=yhWg(э'o qc p=<Ds?3DS?~rj (Mf%}JI7AI$.%mb6W!Gz]]o6c%?$a@gYP,vx $�Л0[&IJI1MJGI 5wcpG6Ic[ksGvu^Dǵpq٦p'F ֣^4Xq; H2ˬ, dK"%iҬ(leL]x()~:F,M:鴷=؝<�F 0,ńs^eŸrjM`vRt #M()-:'⧤h44w)QMPS7`.%qG7zH+L1Au-eJ%eƤ$I$�eFDIm=hs+ohiBt纻3Jv8Η/{9i� 1?e*L6ˁU%.R?2l%qDqR�d9Lg.h·84�mUN*0Եb k P&&QQk(2IbÍpQ&ŰIZ;caE]lVk)!ْDF $0&%J>덈 +ѳݽ#n<a<tR9vޛA.&(*aJ��0~{_RaѱOIA)->m]\@= ЛSX{=ފ+Ap|DO+^$X( k%9$j4EMeo+>kSD춳ഒO͂K46cT),"=d+ZX+%m˞Rnryu*?_E7>'2(lEKK$RB(c)ɬ>D p.y3;UeQP![!l:|]Y3Sn Һ`Q) %uΏ}f %m3qv%6JI;yq4ك6دvkGE&WFPjW\{-#k) 2RPI4yRM% *&6bh%ޯ/^,n.Dq=vl|B _RJ $44~Jb*KI"j, k Y <h-sAg{.Gj~7R%Wt]KFZJyRi*MZ[JZ(C]Ktc%L]43Tf97y斮ޠTHH]KD⢤X J>hW$7ُ<ww:<;o�14O:{>そ[nI6f(GI@':�� }IDAT <w̔dQo5kZ[j-"%YmPy`ρheO͟n3S-lK_}슻rG[$f&%lP HIjl|ƿE | wĿ֪,&JIM^I N4gMt*my�d! \ (7_1WRY!LqQ-%X4|z#+VǰV1mߗ)^HRjk^J�s7Mwu}Ǹq[oX0_/߬_%_iL3FEImP;vܐvr89P󦵢d-7\kn>E<8eZxi+DSNR( &P\o|/{ُK ⤤9�))XIDg[od8}݀b;֐/1ZtѷԦWy%!(IemQ%2+ rR<5jc*W]GJ ho)i9ky 2|݆ܶWqz+{^_sH9+V%no)au-R`ٴe)I1L"y6I՚rSR@Mt Ke{�Xq۷ -Б=譛g~0Gpsײ!Rj%!( O0Y؍}lސJ`QIlEIYQ]&Ե ܮ70K/{r6\ ~O{GuW0L^N׵lmkZ ɀEIJBOj();&Y@)%SbgkHI='z~Eu=ȷsm'?[Yxg9E9ꊝǫɧQ8և i%( AElIIɓ$sN̔tߴ%T/=T]�*fV^̹ѫqe].<wETrԉz93t||@�Q`+M b#Y()1 {�g~^ewI~rw +>|N7,CԴ(y2Jbr$Iܢ$%ѕ&e=SFә3g$5\o ]ve_'.nQ}uW2 >F}__ *—ڕZ3( HI�W;%%#8]VvQc-D2S$J|ـP3Y)Se{՟Bخ;FNYfQSw54O<^ٕΫ?i+$l%QXaTPna4 J6T+rHKAewMmcDI7y)fJtٵ}PQoUT?|ٛqgnrZ+kivs<J Jd.$kbsMTG0$FI렇Qi}q $6 rce7`U?ᩆqJEu.~7|̮V,[$Ti&$ SKuʌU$o,=??krN(fPڦP.Ȳ*3g<#n2AJZȦ/aZ~Z,%1,ؼ葯/u!l r-+5qSܔ3fX$-ف$7w! dzE2hb$7PyvdQ[aoiC7%$*>_Mͮ^%IẖmLBL^{vW=?<a=hltrg' FIH [i2kH8QTDsc5B~缋JgpM(쒳KTP&J Ήav9v4fbqX$5Y~9k@p!&nhf_5T^ X Mk}FI@Ra*MPjf'D!QUB)(MCPR%.9 =RnMw\Mt?q1'�(IjQ9rqL닮9z×ڕXI0J+MkXF3'48666y~ ) 媡ڌ`1dߌi^?�yněNoFvMO JZ h_+pqz7x�xQ~lX]vF4A1(@sHwJ+ٔ0\!n.iIwWz{(n$(I8^Rѡ(0ID{@3]nkrS6ÒJQ$q|IL2|n|)iET ܾe9N*/S! \R[Rڑ\J$.eԵȔYt6KmFpP O`z$$3ars{"kdQ]pۨ; gBEՔ?ehN%X%!T.I(AGr*y�f\:)))^(B#qUG};$i h2՞8N"�G\wА*A՗MdCI:fS MܕziM<�%EHICݢPB<(s{6QJw_?0=o,`BI(IB${|u-}K;HI�`ZJ.%�zJI_l\ҬN4W!1T&Ro$JM4mBBIRK^K&)piD$DoIb'II)I.tpJ R& ̏ޒLI.XJԤ&,:63sIW&5 J3dN/IjRZRrJ4%IMjRK.%� KԤ6 pJh;HMJԤ6}hJ"4sUH$YqԤ6pJjFĶ;f&h4R���%tEXtdate:create�2019-06-08T15:54:59+00:009���%tEXtdate:modify�2019-06-08T15:54:59+00:00nd$���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/n00b-firstFlow.png�������������������������0000664�0000000�0000000�00000030634�14332737457�0026605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������!���orNTϢw��1VIDATxy|߳ܛ{oV!$$6AAwJoD'"PjmպTXZ- YEDIX ]fܛ#L$9+;w̙9999E!H$ H$R#BHD�% (8�)DH!J$@ Q"q�RBHhJ!h3wEil4)9["ixdXds8ߏ4-r]m}tiRH!![VqIZ8!~r \n%):$ƫ2_ z H$RM! )fh49aAܤhYrj4=ۣ<BDMRqDH!J$@ Q"q�RBHD�% (8�)D ,,ˢbG4=̚D(\fo3M0 {׫#Bs\. !~<3; i�jH!6B4MCQС"mێVZ( k֮%G^nsssINnѭcLeA8lJ1604m�J(dҽ{*;ɓӳg;ۍ_b;( J^^.}vDMד?#y/ٿ?UMr-bi *s/aò,ڵi vIbb ^бc~9;\ i\ 4u@ @VV?-[M>8~\4ePH!ecxٿqWb;#40 O"n݌[\:lڴtF~IL"vAFFWn̑#ٳ}0L>:wn֭)..{^I3YBN^�FeA(&6)/7*ĈG`ŋ Fg.|>ImY9ǔ)cޟ()9ʕqZ=w6G5o߆o?GUI>E<(a@AA}e TU(J*۷;)%!nN<>fzh5L'3�3gʥ^" G+6lf~w\3c-B! EusC @ZY }wܰSa>|:tfѢ')//wo6;O|v,s?UUB<!uhݺ-۷ѣHKK#0P]0 @AU>`UUI(@UU.}{Eb42O%' 44RgEQ0MHKʕa֬[\( vuWE0˥V7IVHO+& ^Sð[o~~vUUx4]h(2 t_"s, "c+1u굴iӞ_F:iCɱ<ȓ\y$IO`?^ĕWN9p8eYx<^F#!!or}dP\u4^| ^ƎȤI#ѣ7ફ'?=a4MgР躆eԩyg;_~; Vֵ>_))Bts|?;!DܯC{u?;ѽ25 +$66tn5#便hp8먪( DLa}w !p\�hʉ'$$$F_~1;qR.֩owB *1B=۷G00a1j4m9Bb'>>"ϳ~QEIBB"JM$R HŴ, mDð{A<dvfBtLjH HgD�% (8�)DH!J$@ Q"q�RBHD�̚:^Ivަ3>z]Mbjx}v z=�,KJ{}!x5):$XnyQ@lхCyyP(\F*9;JIJ<.p'ny>G%=A}a\Wj[&6?1ӽ[vn]{7tv$?i!"ܳsMS E>#E˧):^[籬"bR HD�% (8�)DH!J$@ Q"q�RBHD�% (8�)DH!J$@ Q"q�RBHD�% (8�)DH!J$@ Q"q�RBHD�% (8�)DH!J$@ Q"q�RBHD�% B gIBo HNEQ4 �U3]BlDXE^^Bbbb //d Ю];TU; EH[QO`F^Dk׮g Mi"FBKu==_RH˗… Yn>�ǺuXp!!P,9 !_|1.E8FQ0._Y!R|u֑Ⱥuxְ,B4>MS)̛7ӰEwES�,ASѡ(MZ~f!DE uddtŗfNj/?MFF�4M9&-D!la. KqL?$&4/ P_(D|+ZM&=/}][BDFmĸ<aTUiME(Ǹ涎t,MEMQ o,#&n);lQզs]8VBZM[XI8hQ@|AD EnOf#D*jkl(Uife$]lBHD�% (8�)DH!J$@ Q"q�g@4Lr+r^I[jH!րe%4 !@5\.*cΜ:2 0M(4$ub imeAqDGf۶-sZ$'cEbLvӶmOYAD޵+ >UU覊[ Ec+}~B,ˊ~Vͪ5r rUpatz>,g՗;K/%di5=#"6]͛sVՔNMy?cUB.+-wh܊D̾Ȳ#E`Њn=DIU!"675n@0B!ϿAii ?g~yx4[ti4!2|X.`r4-UՈUUz6MN/O(T)bUUzg O\s8 FEV^ؿ$`?]ط/[7N߾up8Ν5eetҕx0MK'//a`${wϯ`& lHN? & yeί?H˖0`0m۶CaPU6mξ}{�ի=zA5;Ν֭9r0zO? eAQ4uAffwKؼsOJJkDjj*ڵkK@46lXIOO'nsB[3/̀\~ x"4 2rd~uz'W_,n]՞zoEBMsQPΝ|,^E^#11 3\u۷;!믿ti,\.ر+&N=z�k| EEG|OX]6n\˸qظq11*~Ǝ_f͇zr3'OϹv'''Mx?3vl_{[ 4Q"[Z`feexn>,Wg,.<FOff7*mۣi YY62Zx{Cj 2iHPx׿^%?�/ 74�UQy̟7 ̜y }tdǎ/h5E%=kaZN! ӹs.}c'`[C>}FO?⡇Ͼw$''ˋe˖$0wq-̝{:ӷ�ͣmۖp$皛/RD!7+Wp] _s�8p`?}vCQ-z;HM7x>XO˖ W^iZVVW`{|J?8~9C&>>ի?˪t<mq෼“:ϑ#\nLo{�{$0X#ͻ{6brr2A֮d^e�^={ gϧ/mb4GY-}vFXD\cYG^f#݁}vsu72nD* C@\\n2 FͦM ,}w\sELt \r5CQuU>dĈ>$'g3thV;[cu]zA !ibYa;z ҭ[/dtktؙ ~{4M0EHjFn7^= "pxn~m� _=vBBB�E!jŽ:n#%>Lc='la̘AQEEXZZ0=ݣ̙3X8q8K<W-jBulذoKl ӌu6x<.Ӵ'UnJe)ēL9۹s;|Q/d>yǙ=2<ʠAڵcǎ]dgCn_~! oe֬)oЮ]{֮]=cl6oL8wIAA Cf ];hݺ k~̲e1n$L\cǞOپ vDZcE<h@eĉȑOsy lذ鳙4i$ud;VW_}O%..`0Y\ Xm-s0f۶/YkOn*|8z.%>È3gSN #7?Ln>??G3dhtE]ASS+ޟQVVt /.gӦMg.*y-ZWLeРa~Lz1;w0{ϸ>R22zp뭿atޓ=2狣Mv&{V+A\sp.2 ҥÿbѢΘ1GEɭk"u<M<m]§ˏ2'ku\8w<{r'N0 Zri& 9~8c)/RRRLRR2aǏC4 t]Q|ؑl3R DcNJ�h"E#G0L㦴OYY -uSXx'BAt͇aC6vXU'N!>>UU+Wsۯ,p؈tX[F]ЊN"ҷlkvjȌ$HF DuRSS,L\.7Z`Vؖ-[FªU>,K Qd�Lv`Y|$'4=YNVFTᰉ"55!EZpyʩpDMky2abU~k:T5 |DIM4+Wr@1sO>oNGdnihz5;%ߏr*ɿǩ+K|uKjGHD�% (8�)DH!J$@ Q"q�RBH@Y#@Xb/ks@brP]Hf#DWקB ~EJ|2o�P#ﺯkLuŨͪlB! 2>oTJGcY]SztP0L?4"^_ a/ `ZG[Q. 2\&LXXr"cͺ+V{}JKOtALd꠩<?( +Q?i31ѵ*D|YGDH~%z@�e z\<OAQZv$h-beeSwрK6mfq@ k~ƈÁ#w7"fڵ5lظ찒i*JXɆDC 4BB!X`BaY,YT|1|W_}UBjIR{kAUq<xPr-K.pXad9s戃FYS9XVetO?۳j*mW_Yk^2pԩSٶm~!۷g횵pOk'SO=%�^ !d=(,,wz/ !p&H!@Uq޽[\q^t|S~w^ieOՂ+$?Eŋ;%T}=)Sصkeeet҅+WHST4tMXEEEx'Eii®e~j,ˊ%%%b…<8~xty#(U۷o OjGT_}�ѣŎ;*=Ӳ,ӻwoHnn.cƌ)z&T5UǍ%={[o]QkyTPP NW^yEA!l} _/~!>,dT۸q#C !%%˗3p#T9Cu,[Ls HaA^z% =8p`}/"!CPPP4h/& E͒nUMӧ @N=;Da7馛ā47SYTU?c:uDNN;v/IJ<;Di\uUl߾7ҡC>S96tMPjLĉ}[N}{]SO=%ʄJiB*]v .@�>no.tòe .rgϞ^Y6I[)[n$%%Ä "4EB1 .ݻw# ##+V�Tm蚠.j-<] _h T]٬xi2B*[LuոĹT-իW @Gl۶}M6fa,Y3e6lldT5UG?~tRLӬOkKLz�믿lCX45x1o<'h:NFD!P]vѮ];6lm۸kmF?֭[Yz5ڵ#;;EQDبHݻw}}JSQuz\~XlPYRAuwNV۔fyP<SRR֭5t&!D!ǎ0 @)W0(**jR/iB4M ( !%ƌD�% (8�)DH!J$@ Q"q�RBHD�##W,IȗT"Ƭ9l> 3pDѵ. @.jD^rk& Q 1p�^/rôhтaI$R~;v,Z:tGR^^ˣ<OCghT/JYY7|3k֬u֘=..UVfF)W7r"vZ3f U4>LVV>,mTOh$ell,3f ''h@uϴi߿I%R~gڴi߿?j !!''3f[-mcQ * fȑ\wuvLa̙P$T|gΜINN^�MAA]w#GiB, ˌ3v:L6ÇG4~"8|pMFnn.vfƌxF]6:!w |>̙3|P$ՉT>3gw^|>h2i;kpF,!rLx>NFf:/uq>,�xrFP UU(+3c,Ǧ-xy3*^{ < Nj;zV7tv$g0-^X"gZ# G Y( GXvdz>=iZvsԠ_^QqhY(_v=4I.$-{BJw,!=6^j}3-K ?)`?&`7@X/Ei6I (7qn'.wY<y Ms}Ba71^>1cDR[N{f(ӂ[S?= }#�UMШ*-  O_QXQe?{JLpB@ܤ~Flu o`NpqX CePg6 暊gHUW.QXi7v1 /[^3+yHRBHD�% (8�)DH!J$FrɟhqP Q%ac+zVYPp5T՞gDS:!.a{52]ר+ia8UUVQ4*gA72ϊ Ua&vر"ر3/6رQU;@˖)tj5keN(,,o"m:UTv0 3HLL0,4M%??ƒ0_GT`0s-dȐg3172FHTs aEoUNV,ˊX]zju׍sO4bbT֯_˂7U9%ձrۿbҤs?~W_=^ړ]̫rEnYqaFǸqkAU^zlǬY՗áCpz|Eev+l۶{ze6z7bm"|:11>^cbt<^[p5bcUC>>z.=x{:b^ylxٳ_ǣYt \ELEqF'*`c/b|a/֘}n-Zf>(JӣG>#@ekǣiKϰo_6۷/3CV/7TQĉ� :$/vpDt�6ld߾=$&&ѯ@:te lقa$%`u$&&i:iidfv4?!>>~FrrNkСfqL887'_F|v Ͽom6QO<.GJ׮)+6mRVɥk|_lL롰m69u6ÉD_~aòhٲ~0\tʢE_az2KϿ B8B `飼7THMmoBaa `w3# /MnnWW_mRX&LG/cŊwx{ \.\|8c?^&OV/"'g/ÆAu ͈9p @�̪U>|4;wnf`Yef>%%0Mvkl޲bϞL4 4EEG={*Ko(--K's׸+1[?>\@qq֭ َÔ�AQ0 ѻwn"BիƬY+O㉏c|:ulC �?�=T�222uرݻ+}ѣǐ5?\;wOn]  ߜsPTU3Kii)aҧO_\.(/kA4vp4f^@~A)](*:7/1mtt2;S\A˖�k5h7cM<x0{?,3/Uz70Gcݺൗ/ C5B;nݺ0`` C5ֳT+~x7)<П96maÆ$('66ݻaɒO g`YpXk=M6йsyQn7ʚ51|p21 aiDeU֨j%R"(&iii<\l~;/sKٺu{d& ⪈~ȡh4|(<0^.K/7osgO6{ezBTE>#- eپ-[pwU狼W!ڞJHOwѾ}Gnq?`0DFFO2ޭNOoFu ...4M8/fo/%5 0l( CPXxnz"=UPVZsȡ*yy <MS0͊<AS+"bzwyzlǚ5ѭ[O�3iݺ pUUY=zK(HCƣ1MݻgfǬ] O<,n=Q"_ ǣPTt{nȑc ͳrUa#F(c<-^8L -H5lX/ 3gN◿|V --]v"=b^gϾw/qs+1o/*uEB4Y)L4.v2m1xgϾ{ Bɴܹ0 -Y7g?mtf͚i5={˸qNOQ!=a྄7_qM֬^xh_Ervn{=!ggذat܅cs.=ĉS|gL|m۶0„jᢋ?`�4 /7ӳ0p0ϒ%/1zx^} J +eqpNBSAo.狥[K^}%dfvf,[)mڴ믿D]L<]c1[ѱcg~.y8N6AMZnÜ9 Khj%%,X0_71_ynonمatޛzc=B~�>}O?*^o ]`O~k=O||zcҤK�'9e]eÆbܹ a={uz Yݏ7\#_ɓOʛaA> -=/s3vQ=@v7BNAΉr-8 -ڷȝwQU8L\.g/*4w躋k= ?PZjo0aD 7gӾ}*p cv 8qL0⼶)EfvӢEK\.-\*AN8EULӪp#븫i@9qqO7=EQPUDnwj>4+\ZTUU(YZ;/Z:2YpMs"'NL||,eC]&'N09L @XVQJKKrEgnzcLӢesJp4. 'PU/|Z( s B<:t�4E&2qܤaUM45M'>>;c;ð_y,Q:Zܒ-[VL7[&%%D x܈ >>;:N7Ǵha MBT *ԔޗAYtҒtȊEo9":Xiè4\UW~AIz5TۿrJG!LSSINYާ\/8�)DH!J$@ Q"q�RBHD�% (83Y exk%DFTg8}DXD8{*䙵m-Dja?46Sut);ǧ٫%>[gi  rE2@Ia^sS( x )/uln]u(ZG,9RgbTEA ߏ�_^Ok]Ӱ,_/ KKtO rZ_[!D9i [!N ,i{Mw:-D"E"q�RBHD�% (8�)DH!J$_ Y����IENDB`����������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/new-diagrams.png���������������������������0000664�0000000�0000000�00000076741�14332737457�0026460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� ��'���ވ��}IDATxwxչ0slUe[.`c`0$@&%\ҸvI @ Ƹ`%ٖm6|e[%YҮљݙwNy& �����0rd�����`� ����`A����0 ����a`����0�����FX�����# ,��������c]���� %H?NtIIbi:مX����:xW\ՕAc;;;Zm%h"��0٭_~޼yBfJvag���(&)ᨩZ.&g ��#/By<?0eX���&/Bȣ>::|A ���L^BLv1��ɋi5:.& ��0=nݺd?0��jZZՒGRG� ��dDrrr^/uuu9d?��z}MM׾%=C`+0<P���]]]ce0]0A����0 ����`A����0 ���NXXIv)���pھ|s》����� ����`A����0 ���`1. ���Π. ����a`����0�����FX�����# ,��������� ����`A����0 ����a0�y>:]!w]���c.`TjvMvARZ Iv!���!hh[&٥HZ�}�����FX�����# ,��������� ����`A����0 LHG]luk a9A‘?RȬ���@,0HZ$*LϻZ+J"Q )��ł� 'c]Hd1jE2QQKph u6!QMvPG}T(\W킻P):SQETZw'"+`2!*"P`E&1|� 'MG w]jVm,ץQ@Qo9OӛYVC:\xmZz.%6H1k]٥d�`hHhK՗mʛ[v3م `ܐEPЙ͟aj= yr{:֌_uUȞb(%^"uoML/d ] f^jN$@�U#Aٟԇ~Z欴&`� -5XX,pb91`ÊFb0P4h1I$LuxswGCa,;�; +/OcCuK'_|Iov,0> [ODiwńrJC:RG]teJA!Q� F4W~f?Bh<?߮lg暒]J0@HOK,앦/-"ZOEvA՚膪P{]TBLQ$Uk`!YN�h /t*ٶޣ5Ƒ`Ow1�&#jiز\VN/[VC! ʍ GQ)3 .1ʰx2" *LMx%N8o11K]"ɥdfWNWgY|K%`qi,.MSJ{d?Xx^ݕ}KJҞ왼=EX�|_5*^4t 7\`X9��Ζ5]2r+© X����B]v4Zm. ���z,֞xδdo`���=Y]z&3F"pw삤B�`\3i*!ѠW D y)�%`"� ,4;B.��1}pU,1ezl��< $SL5R+;_2�.Ab]edGMb͚),LSWS$*C TP "y֎&I"(E&)(_48ꨏaS}e:T4mW[f5sͪBZNFd{k {bA,{]MqLB}^Sfw5j(1L[j3ٹCΆJͭ)m0 x&o~L83Jʗĸsͯ<|w]pc$Kj[ v*Ib4)-#rcUHoa-MS°% SCU(쓼Bӱp<Kf>9 U_j ̷LY`l5T�LR{.=QԪ*8ݥc$7>,!tbO|=g{'Le[G(qZd}7BQf;}.AS$0eI0nY"uHjBBT t 80jD*V:(~~RKwϮ 50" cDgb~5PTXa:CunHP>'wa=lO|GxeIufiM6N=CS4۔xF@t@R-Ov)& G6/TY$ �M` az ;`>1t% bhHV$id,e6L2Uh3p@rp+ "j 1lvPpó-ӖX gTGLlz`eMNMwk] %)Վ!l}#l>���؀� )>vvڞov~Z+DYGQ4Zq{"=q)a8RUZ6(сZqaDC�@x(F2EzH ǘBv&ӅQ4ErpFGc 4hN�x̙s6n{-WM/~?:;xNN^F3b]45:R^�[NE4CyFBHeEihEQ! èz׬[w˗&,?xb$iSHofnitV16R�`ĘLffL&og_!+VTX~^KA塇~>wȁ_Sӓ]v0@06*!"ⵇ M;weYдtޔWȆE$EQ9�Lk.itonY򪜜|IBXtŊϷVۚ5K/_wZa'߫{첃,0B"!BN`e fqO<*?4:X7Н2cGc̖Ϋ*js<z2j蜩^OKx4faqt#iWzE&uGQlrrR2LѸ*m6aʐL5&:xu6k~ZJ GBJm|'yiL30*�ß)!xVÝ|g33B?wy쳯tzeFNvxM`Lu5ŻbS<u hifh(!X[XwuQ7;yQ=ˏ:?P_4'T}*VoWy}CEc>ƪ'+"97 G:<!r<6[⊬"|ZEAAm}.DR6<&ۛ�r r}4Zj͞='XV3{v,aQ]p0@ #6 w5"4C3y[x.۩%6{`2B(-L%VC92HOaR[& ų9S  ȪJzo=)gɟaW v5sW;6ho;P2[f^g~=}9xDi;%*i \RA. M3 Vܞ Ix^}`Lb"l^'!䳟/w``Y Ͱf)VC%bi_㲸wtux73*BP"1mqƞw5źbɅ2"HԀGf^ Q%^K!($Qh<b#i!dtE %\f={>Bnv84MoٲAb۶hUU`��!5X`0,Κ !(D߻iBTAc{c<nwl=:}-o[/mWkiX"" Y!hS 43MӘP6PG}t �QON<oܻpݺ[֭iFF֟d3`1.>n7Vyv*U+G[z;wlꨏlV^P'\o8P285-iO|ExHvjݹCv_$ <(8gÛ<Z#Km>���RX`LLrZcMJlszS`a\Ula{,wV EFEL| B]q/国;`V^rdw5YmXP19fvr!x`e33spj Nͽ"D<Bf}8��(@LLtYiڞy KO$Z>ǙM<"B%mgO1I8SG})"QS J3л&3AY5tMB��$Y?_IofTnXig-,~V^N3?���8܂qϞ3~_rd�p#?&  YN`�� _2jS'ERV � ��h ShH9͟R BUUJ;7H ��(� I$5{ID1e��0 B^B.٥���0 iug W`҂3iR =��0*Z? J`����0�����FX�����# ,����H&!Hb\M̱5zT=bߴLT(2IZ���RX ;g-$*9/D{bSCO|ѠxȤr7u5 ' �� TXavZ(UOs<٨ 9u0bO+C2,eqGzCb�`DD`)y_lBru#cfWj/앴Fz!Hq`a.HmA|hsw<l`O4n")w1]=/kwmcOSlnM뉰FLYdxPD8D;طbLm _B1)3 ξe�0]m8o,��,0|DE"$%QERa%'" A Bؕm:Gdo[P4Gn]BWc,m1ؙ5؆;/Lf'w5*Vٻ[=tͿiskvՙjЌvK⹖;Z&t%SNr w*7aEofOveO+-}Q*� a?:#Ӗ.A(x'uH˟OvXD WOo D!HD+[cxX6!+CeY%zBl/!a`Lv2 e#ٖtT^4 G*-wfkiBe(M0ZYJLz]giyKt!$Ծ) W͌,!r:�N/jtCE/5Ӹ(&{'�臯S<'(61ӕ0BDBSt|7g52ͮ=$VNW|.cږߖF Qg73F+Kvߜ+~+7" a3+Ɖ41QI/}+HW\a:[U } 0"\d? YR7Y;`K\9Zi4):_DQ�ݡ_Zt֖/m}sǸpCdddP7 P$R{8D'8_tʝ:pFZCS" xŒCe[:33+34 V.]bzΕm !BdSO7ɒ*DSV$ SrLMS|GCh �BcdvZ#huh 4oy=h u`pIk/xhcw'C!ÜPQzgJKKE^{_W-Z,ku™e;fFO?+O:Q,^O;24*01(lvr"Ӎ[_lu:3졅z37]kFd$@Vme&Pb\M4_FC` 1257xG]R:YEa1&Zofmndm.No_+8Ez!>ZY"/iZ{T`a3﨏`ݑuNK}'Χnp:?O,YY?䓷v__eA0 A3xbŚ,m%%:h_p}.Xxpg30,F-ɝXSOe3K!wN +Bn/HT:]Uwg!(_K BhNITYB)(\<\XaBiM3o1Zj", ;0]iDE稪 bDQ-�zC8?Cy<j}G.v}kk.^v[+$Qe؋1S %C;O緾/2r.c***?[wݺubB7ͱc̙Cʠ5/-. r婋LV.] �cXHagFY/8g Oo?Q2%ln>xd a_똽Ҫtc" Of6p�,_MDW!/}d2C2Ov7T{g!EX] _Bmw]O,˷r?vGy$]!N<nݺkVVVڵgM΁@k`bklw5MLťvL_f XYZf,`7TlEv ȲlzC^Pt[Y3՞O=X^?A?X,Z{ꄪ|ѬÅ5Mb{/<뭷fddb?Y7n/y_W|>߈8k󲹹`*[\>$gUY)H$/o `>^"q<5J[A`k\,9;F?uuu;wf9 uݗ3%A|Q6V/kjcYlFcKJ4no~n~|~ |'%Iزeh@?!Hd N%<r]OAv!!o0GnP0F+H+c/a \f4;>: =Q=:Am?u\O<?}ԩ?̬Y=;"o0hx'<MseiOe3f;$i۶mW\qů~7q5kرcxG ( Ǣ5„]Ӿ}sל2w*AF+d_1uLFKE-.MZbUhi`Xw8iL=Ӿv6J18Xo!o[\UlCe$ak MBh0A|Owv cAfpIɡ-SWܝ/ ť| /<KoW]8==tYo? *hpT!|zu[~)5'Z9~d$) CM>F @U!yŸ:g QYrkm.,>DM 1i H;w)oW3W~cJgTO|FvB6ESE,pKܱ#\2ڹ֚0 FLeI ^ Mc! Jk]l �He'N`;7:A+myo3󮰦?_Os.ʵoZKO]v ݙKxg£mB_{^nޮ&rwM@ 0`@5ErةÑXP4ec\o!&(O[d6JHG]. ZOD. "Hkdf\jg5T{mx)k(!3հ`$FSΆX~Qg.MV!CWZ6ktno`sb5O[w^Ꞁ8s=p4zvNW|~.0DI�&/~Xp w>ie/2/þƒBYh8Hj09cyt:{o^g?ي+`A5R}UhbpT}fhej̛_J/1ͻܖH:$D%" *B(Q | vKBlF1<% g騋!lEɢ!D3SX>Y_Ρ*]5gciuԅƂr}]UdF/R% S)['/?8_ma֭[76VGa\ٚ+?NThHyo)\O@7O<XnxΝ=P XW 0,EZ]lE: ֱp cDJd슞w_S<elGCҧ-Z#7s͉X KPdBT2.X?i{c,G&H0qf[T#]_'喼i1 ?&^g?(g`_}U5|s`!79gQ%տ!붹e %\;Lz~߾}կfϞ]^^*$T*#k%|Lg]jl]eȴiZB.h_.2uw,͌OZCHQHQadt%*~]sok S{R493Gslo|ŞM �Fmp8np80&[p06X_Sh<ӥ 9>ys:J<x9Ao?* *kYt&GӧOכ co߾G>#uuu#UH0 D<BCu.jpRsFV;1E3 eCof>.gIT>6BpыKjzzU@*$XH7ٌ"-V#KC[E&4AŞɏNK s=/u94QYuYÑoz ft1X7�$ݪU<O]]ݶm0K.LsEϴ[]캯dd{>𶜌^iYpR7#ox<ӹi&{vM+VlzGmhhL΁7W:=pb8L7g L3fF8Xљ٦゙=,.B3[htd#pAwjb}zyiYڎW8u]ዝot0h1J㝙XG6?k9 upJKKKKK/r;zs75_`K~v'mC;L_d*o<}Qlڵ .Ș?ٳ[[Z?=z.p:?k5`MdL"AzW2jKc۝_f>ag>Fi tL'4Cܹ:{h?(- ݋3,snpΉSms-.v�03Sm3H1 uK>ij4,EQ ,BڳgOcc#7̙SPP0&&Y&hw3ˮw#>K ~Yԙ;Bɾ.]w[Oƪw?z3D[\ai0pwfЩ1GT)󍃬-͛7o޼y)0 hTt6Əl<RT5va``ĥzw>z*~lwHt|&\}9 %s-hzۅ<z#j{�`MLҡY%:tq\$./(:HxeܩzÜ; n~=oAkdU.)7-Җ@Ԏx]U.sq'HU]r�12ϘY=>5ppd1#@6�>e03WVU9JgMJ[ 7Y"-ۃLM_8ر"p>f~*R6he/>E ge2}}u&_'Tť֌|>�NA5^%&A(_jĜ:4Cd qJ*[]$8ي9}|>V:׸Z34<���.XSbG"MBvkL+HƋBBIUFeO�Zd#\d{? f;'��1xȤ6VI0SrJt-gJ4 Y$'Av1T Uei\gP#P-e('1�gq#w]{$:}\GuAh<dx=SsG";>Ϳ:GNn�Wԧ*$O5TG./ercZNŢ!!$K:Y3 5fil xdv|ٖƱ4 ��FX)-N 7«l>1g�v]edɵd*,+m{B[_J7ҡ'��RWsdps/5IbaTi#UE]B38-ghηu)0��FX$Ĕ!.Xc+3yI'ֺX,Y+waY+t \Xaudh&ô��0 J!HFNǣJ4} pOS4Bǂ^lt"m'ox4Qpĸ"LTr2v`? +Z= 1&3' *\fNvR="ӗ-2C.s?Ov&LH8 ?)0,ir:/_!RUt<R68=w縏 o;aa8گձoS\˓FUHwx|_U5WN]q/"DgW\ِ0ycΝ+0!CXXx:` A'䈆큺HZ.:MވhǣwDdO� Y]+ ‘O]e+Q`hrp2[ 2)Ꝺ S|cMȩ<|@x5e78qd i 1|:V2ĭN^43 U5mzs[XXAp-^w0KvA&pk.8 1"Ԯx`ȯU&AIAsԝ?aFr{ 2NvPw$]9e^#$+'ޗ΃~&)1APgpp/i,e` kL[osa_kš쒎KP=q 5гWZ.X%%mwUbʐ.8+(FO7t&I-`]oy9e\&'Tm{nFdt[j: !9>��.HUIGp@wJ[lF }F(5B\M2];^q<uɵ x<#Te�z?Zba'ozx.fFթChP̚udv|c9\2۸4U&up@i��8`fa˿;t3X FAn{C<6ӹEWkD>zu^l*]@��aѐr`f8@[ܢ^c.g%'Z.YgO9cd `aXPNi^!,nO RU njH5VϟZL6vMNkO`E& M9:xRjם] =FS|;\Pg9^'v1,Iƒ$^+os IM#&}9X8x0yhԬW-oK $]z LZ4d:XZٴ7l2g)|;P*b L>4sJXXMkɥ)3f'{O!NiL9wm\~gMXu=3δDW`23ٕho|*:|Ckb/gBttF{wJu0tJ ( U렫�!]p4nq3`v N=*?`kJ Y|tߏ5+5 )?~ݳou)s ]Ћaq }\ϴ{Z{Z]`DW)>p>Ն|R3a8= G]Lk4oЏKz7>|f_/ed`XOʢ|׳N H㢫3[]!QP/ĬC7^�k ly T<ː*o5Tz0hHWliܛO6D8C&~YW * ox&&,`dt_u#Ss7DW={ل㨃�k:]y/1]iMvY�7.0-oZkc. Xxu*e(ox=}EמhYYG| VseM. �̬K-:U8En]qgx6G;_cȜMXP5(M;K˗a+�P2X0]z"èGUȻ϶:]M�DMvi&(.!nSP/_ >�Ä1k /t"J@˿o x[m@aK| /vmh�n^O/ڞ�0i 5G:/KpB< KlH7p<u[kܢakQǯ{V�lgW]Wh',$Q}L _Ϥ` r8YV < h8/U%ջB50�#fg.0yͮ~W2 (,wiKvY&+쓏 Yi*&,�L(E3 :#]3삀RUmZ=}!Kǰx}鱐de�뼎:d1`x*P=|"첀| +~)IPWnOvY& UK ѐUM+? \Z jћ5 yde"{ﶦsl>`bu*AzԢd:djtܒ<ӚL`#O6r<�F+(OH$:L!>L {*01Tw> ~f&00FZ#R,7u$ i(_{_[k4\Iu4`aN ' ǎ36dqq fgH`-h&T08Jk!h8u8\4Ntg?xR^ H'лQ1sN :O\ `eR 2Au6QPa-�ƌitH Цu-�BƪddHlBLh)8�06t&ƑWC1uU%.ɕuzZx'U#g!2(`:�0Y`B .c7K *%8;t;=w;Z#1OSLy 0p0 :!DqeiTc)on׻ /v&!ko;35 vӽ񟝙Ex LZ{֪=::ieg<d-7;!`@$qB"`04<EE';2}מhITS3J/-6ÕbF"h]CU=B(-릖12הbI Q$B>1;B"<hXn2 ecBhJFW+ԂoPZ{p@,<H�dBIP5J 5DEA}' _]]mKvAr]m=Տn}~ߛx)L7C0XP�H2FKP5.Y3%!&+Њ[PK1ii/d$ wHdn<� �li`={:7ҹƬb])Tk=]Ҽ+l,1$oԢTs ugFcrUP-bC8A$G/gFJʹwhӘZfrB0d+٥�`aaֳKoqt[F+ 4%.ÿ*9\|}e8�`$Oקh:.#Aw5#ŦBm3@{*��LjIGL[8pڂ+l )o ��¬iqq.H-KpQzWPUߧFUH}U$[ eL)qXBVIRxd1Y"/.̠L0=L`Q( L۠5:ԡ($HyFR:’%R-I ꄱDE �,h)e ZQcuxﻝ.Šht5.{rݰ Kv)�� X��0QeF_'CQE3Xo]a͜yɊ ߍQTF?}qJwO�o>QUb0E:àӽB|!YHN��R-]z|Z6MOsO_b五?3#߮w:G6ϰ|`s&Ϥ%9 |m±~{-]`BrBpkm̞Cl��up7AҠP:;jWg3C|_yW#r@+GxzodɼjO zծ7-h#ʩHPF|RѰWB\{0X'kz *j==�G,z׻7DWc\Cmud异++QVPar;N�@.0ڄ_:;BvNUa;~$!P۩Ȟw Oe۷Ӻr!kF?X3삜=!{Fg\MF5eQdVLϛ0d*Q*.6Y)2 Ce)с#b.Ut.$;٥8B0zzښ9ٟ&o+BLi3Gk2!B1"pBdQ4nl%Qd;kƮX'τƈC"JS^O[*Di8oYE$a8,KjKq^r\uj,,Oog&GH&<QDE@Bb WEAhO�gS UۼmF>;B(?OGSY~[z[m*`Kk8 '*:u  `ψW <d�Km>wnX��d v!U)̵8x t5:#y}۝nvq<jBHg f;{ZyF )ShNg!(j({hg5Z$E! KȪ !(2a5}ҬUJln>+ɖ(kt4"H"ѐ1u!P V$B3b\QDi4@E� M֔-`Ɩg TbCNKgp 1jVq,H35R{Ce(!J 1Ƣ2` y=tUG<GyWBѠH@6W kmBWS|%6E5VO ʂJѨ.!ZOF}킪R}|K4(mwH^+ewDf +LcѣG}XtڏKlAںuSO^KazR%&?}y}^bUWoSu_w,Y}JQ+Dpd*3x[:Wb}z5e%f\jOĸrdf̻e2|]GCԡ+l S*[d =vEƦ6Pt,i9&]AWtc cӱ𑏽ge -'Uۼ+krA31W;u&fU!'# uAg Tu]dɊ.r֍4=)Z?g032";ZmzYk,GQ%۷+%{R J8-=2=h32{ȝjf瑏sW;=x#c-iv,caHheBS~YReQ$X79XP-]GGêBh+bvgN.z/X;?lϕ!v7_ ^{ʕW<Y5_qŵW\qu0xݾ}o"DQ|: n60K^tem>ťwy!nE1`=w Kؽz5k-fŢޛ#`ta4Aa31&;kg L//)6;ӥKQFTTdr{k1BhcZw~ekJeYP !ʫ u5^\p|S+;;owߵ*I"BNs뮹f ī+׮]0LYE|Ysύ۷oC>{#/s)[[`44<y~Vsw^BȓO~pqqٌ^2F"QAH䮩�jHK9-SQ =\WS*d뎄0Fz |5]3 u 4N`3D kcά�΂1~/̃~痏<xP3e˧MY\Rlݺ?=?_;B^_!?3~Ν/]~?ǟBmݺqÆk4o~~^{Bۯ ?;pԤ�5X`ÈY F]N 3;== 0h?jUu5ŏl;2ee=:O 2BSP>ۅe':JXX kahxZ(1g=r뮫;EPe塚%mm͗_~uxb&Bp@;#FŬd FIų':ub0t`u5gĘ29kwYY&%VL!ק%Vh|srkH*R#BЪ8RťEoa.L"ʼnՒg'?,d56OZ,'?x/#GUT̫=Qs:/c?wJ.d c,=�+!^3tD UOB QbcBg-,j\(ܾ}kzo~f3 b< ga_/~7xGgg[~oLmAAQ$WCϘ]R2UQd'%'*cʙ:F&XPٚR z6wFvF&r4~YfK(z?'p[fEQIr<~ăigTWIi4+H)nwz琉Zf]ӏ>ڗxp7t qܳ;< KNqO�TB,esQd"FK %Q5ٹ!\z&;ky<1%ܕ/c jB��g߾rQY H) ѧ[F]&+<GzÉ%OO (CXt,R7ԂC=}:c=Qwݑ~`҂O��&M^m/{l±Bݹ+ꙡ*o EQeiW=BtaT[0˔QCӆ���`J�+#)f0P*!IRw (9;,wG_b?˧/XHGԼr@+52@fkt[^i[BD͙fȞbi<cNotv_wKbpTc~cݭ8sFot|O &x:].j}e6JQ8T= DO|u SYꕠcP4&*EcqFQo_TB>Z��_XFCth1|Fnכӌӌ K2ؔVd!fsk,Z\3j"~)6u5ji\Cu8.6VEE9w s X1}MoelYԚLK4( }b!fO XiPhI7.j'>/Do^zKFmіHWO ,[j"%,.NfƑ_v;šn3h[w0#ZIv_7ș#U1#%}oSˏ/F#:ғyIM3SU"MeEY;:Gwm+Ű!"qt!Vғx3xm>j4 l=b=UATsIL*t6~ITOsI ʒ8swC^1C>!*h۝4KBJ*ԐWaqqFjWc̙M)2i=n u =EL adK5'Xn>g*FCՑfX!қGol=@u6n� [:/"$ǘFK7!m,2tOmWv3Yo`F#L!BPV="}gg19X(T@Xb[K曋?~MUExXgA.rz3oJpo!!4F|䊂QipdCqT&UD1zZ!VCA FGuv4(ktYi`R[)2A,d>B2,ZbE[ϵ%ܜ][IjB5O=W[ⱰIp<-ĕ_R$2Ykb UȚb(8' Ub{mԚƥbYQ,l/,.chD+!u#w"g*ѐhb5tGCL1_%՚ģ!)E[- 7o*QMP |̾vԁ ;=-RHyn9;TA1= D oaH6i:;s`GE%nWB[Y@mw|�$H3zKE1qѬJ~J+/1{DEVIF|o7,YV& P3pT 1iNl=o5aQ(ҵ.L]b={lS؝͛n,g}@fVLa{&Ri<,[_iCexdת @K晩Z;of5؁FPWS,ܶD%e6kb FZào=ڙ9TI:䀑 !;Isz\j A 1~$Љ3�0PEѸխ3BTa5=mg4qIJ3M/}cZ6-_*oI,!U%+ʤE[FOY)J>-%EMBzXz[SE"4Wݕb8ju=e3KbLYhHզݙ%ioe+2I,YQn@S{[+nhJ+7f;]MouZ4S[z?O:yFwv{]tle盝)U tEM!ttO(B]ll!◎r |]̞H]gfv}: K/WnF3W[:jXH>klꏄcWn,'. +IRAyxDΝn̛nIw;OW<T<mn~" 'l=u0v*Z4뙚=Ζ/Sg*h;S[Lv.%Audb\=ӧ5m'"9 .D%#GB&''Kc^IYSd݅_ODo CzǡM{fVgbn ~9{ OY]=8>7O J9yhP8BM^YRMNNgdfrhgQ+DF(\bt^TC cz6,..v;vS!h@.e:/TN,??pxs^P$ }`,<rn."9𡇦){ovrSXlj6!HUH[4T$:Br 9S u U!zhvK*S[EA9G-ؙE5TmmrRDbB•[UQ%-WK {HQ{(Tݗ?Ӥ71d ]pv 03)ʘ\H 촥V)r<0D3WOENlhg{C[K&{Aڃ!o`g6i#AD3(lvpJ/)2z{^əWoI(BLa8!HWق&NKuǺ:-Ccv ,K50j<)m SU^CLFO3'xPXJ=%6f֙sZZUP{m̕劕 v]75Fc}{<O;j4BH9w,#XQ6fhP=,m6Y錓* SVt|`{鍈 n<RLiX G3&%p1;8L5D>PDm:e -67]NYdEr"@9x^O5z4єh'==w|*ɂӎWT,vdjrOd|VbܢҚ}b2B(S]1қf$D("!` 'gcE` v}й酖UweWPv_<,ua_gL(B\ mQ��q)D&k&ʹ@z qE&{H@6;53Μo;!YT]yhPu=כYRۍHq70 `a]Z(p#78GYJ(^pcxzom,Db!U0S.Ȣi.J1Xy= *R$3W:(w53Pk9 k0u9zNg"(i ÊW J�5X`<by:D_|<R2ltPWS !QtFG<Q7ȑ1:}x8 E3xeysϝnvV` Z[ S6FӖlxz ~BKr+G=C['"!h 6VC4?+2Ī3ӖZb\) ,M"L%^k!txS7FGp#7;9NKKWtNےC!{2ov24 �`;-7r ڐ1V/;R={W0CՐ!HTT"FD%b\%it,U!D!(LTf,b4UHqP1F F'hbk Ʋ wQ"1rZf)!HU!r:aDòFG5*,v~< !(>1c}LBĘ1V DEJ҉NE" O(Jg +Qd)1V$U Q43:lQ洔,)FL0F,"#ń|j}^|/3 h246q׏]=`wA1ZJs.&�ɩj=nC*DY%0IQO_>fLaB!=IAeܷc 3I1F K13dg7}E܁9B,OG`V]rn$zz\-G1Bqfou6loG:χۻD9�'92og䭯t|:?HOͿzҥo�L< hm^T Nf&���� ��[4$ ވ12؂r}#O4S`~`CU4ƍa)w?e1=� BQMm>4tZz0BPS8۾L5`HO5XWn<CɢRy"eR9~AFA']KN'XHZdIvbr$t[mAob2mbmg5;;m򿲇״+[dLw=-ٻ Ş( Uh<Jv)P&<1o?6Zvt+P;7=Wߓ}#c˫]ָ.f΃z㉆XF~&u&c#[SX9P#n<M Ge΃5`&jY#{|E~LoA~?PHEaz ?^l2iba5xɝf8q0<fVeeu]F !h4_Ǧ�CC� ]_[?|C:|}EFKsڑ霎)h{϶lْ7mǽ^}ٳg99ȕIo@ٞ>t?~p|opHe{]l#<R]] hccׯ_?uSNЁI>hfXX$!4�Rƻᄏb ɲlVVֵ^[]]=M/1 O\Y ͎:H M[h;y|ˆ g}?ӧ<}wfgg<x?0D%\bXͽk(Yi|''.8LEI f jjurv7ዝ%=oǎz]w2 ,xꩧyx`ƌG#kXBL '7b]E& C HON7-[x<Y[ZZ|iӦZTH@J׫77zfVn XXپob'|͘1㭷jjjRn۶x͛7o޼9;wQTU}M7m߾ɲoΝ;W^ f\ixVo]e925b/<Ҹ}hkk{'?|_޻woɓO>KKK|K.DSkS(G@W!*j9m<ER' ɉuPh[BP͞S[75{'bԁ�b55a%�0<j>z͊&P[]m'g/1\fFyZמhX~p-dff~s~=ӟndEy{sv͹ܚ[C5?;jg- ֮w>-u=nRr`O&,_|޾vkM6H GJ XAVݵ)o[Vj#jC!_TfXR騍"*zwp,D]w Jl" v5e ,0vd#}7 wKoqfjBā2ĖZGN.Q w}=$[hQ,D"޳aD"/??ROG"lmjjصk{W_'}_h7wv0뿒S*DXV_G?O.\ok?O_|o)/%,E&U]h y1r:ʑɗ/*D! ']ZWg) ,F{|}o )!,ƉVӧfq,$_Z��-5mٲ!)|OܖE/6`á@F|>�!E!K/OU{5$tttmܸq?ֶwn7r|^w;v֒AjMM +oߏ5]W(ͧc(LԹ0H|7F[o}t^ IgjZN^U'ox+V_fͪOW%6U4AӮ*:)79im,.z|w]X[mtbYIڣY*ӄ YR%A\O4IQX%ǣHoMFG3xzycaYk`dQE1\JTLBDA`iS=z鮮.۝x +O?XՁ=km⋏6N[dޢ(ʺuۡ{>hS??!0>h�b_?%kHvK/t\eNg({WUUմiӆ=V ?> }F3]2C$<WZ筶GVzm߾S͛7I׿mWɖ4�z;}Ys?=p׳Y=b"HFF'|2A,fsaDE38w!ƶ z2sV\tE>7ps] f'k 60BCU`0L4}3O!,.٣NFdM1$U!4T,$eqkTmO쬆工O:ZBZ=}#}_?;N:dq ;6=کyo߾Z^R߻k~o|$4 -5|{cߋ^Q[Ofdp<;6m3R4̐jh.)_b6M+Z_9N-_?c?䂻6 nr 1ٟ]i?wR&e#Y\4M#TUejR(f3%R[YżxʖaX0kt<Wz3i)!O Gd*BLp<(1֙AD38QzF1Fg\jO/8;Q&6tfi17;5fFof0F v!3TΝ~a\dIUkU ExTI ,BHhH6ڸxDfX*iLLPB$nV`\swkt,;@Ch}q}+n5zv=gN5c},pJ1orkKcIɴS1 b vm>qWܝfskeY=wܽ{5k<l6JY+Vxé^h:]925WWzk=E4M~Z<?l49ז,w˭/s9pիZ^^(H*PҚOshgZiPf>DVWnχ3@3hƥ6Eub8j6\Pa zz:(D#gq}bv}ORb0Sz+W+ ,ef'GT .cdvp )4o+aB۩htpgSd!)of>5X!蓊fBNe4؝;?F7Ea_xxg-vhRtcf^ԆpisoN3TԤ֬Y~'nHxz`i3 S??[fhr:/<>xh!ig@M5Mt>] Cᬬ 6w}X_~.--Bk78 7#{jB^~p[ k(4 *h#gn:y{ '?)//?rH[c7,BeP՗` 9]h>jދUZ^OeF잸ՖAHܻp"=8]y椴Y"5{:#=u0ƈfp|3FH7:B^њKq5`6z<1E6/Q,O; !4ec轿5v5 z+kO +La%zi|R+Yßkx鷍HXHD)ETZ|<BJl.Kj4 ~9gѝm 5d9z V.~6,/O~5kvmlWN"Q%Wx`(w}ҥ+E$ _/>}ߜ:sϽ<K}yyh@;`/6/\߮ݻwz׿]ַuw\|ْOSuuɓ'}sܽ;mv5 <ݖx<gu֥ {/r]VE 7ygΝ:?xꩧ:0R4J8MԠ/VXH4SSXHq5`rp=} Hktl*d-KuD%]P<ғp!D1Q2ڸhP!<5JWo!!(-"JH,$QcD(эZTBPイFG#ay5NkFO$ KiW\i59p:#*!QPh=gV"Ƈ|t7_z:�e%b϶ Q5=_νp+YV\sxշk:nÆ=/|,[&PZ{ÆݯH$|?b\}XXqK9.Ps^wuvK/TVV#֮kO?C;n|ܲe}o.4Lwal0PVuGƐgw黻=VoeY!1,~_/`ڻG3x2̅?\veeeeҗԷûxwXo[J.$>ꞾfO\mhZw,,M3 t,{4mn}ÝնĻ0F98(!rz;<)ctg4:e6P/%*B#,M;b0,G!U&Irct:_|_|A{{{aaUW]u>mLY-;}_黤ODȐ_GK9*[?_rʧ~?vSu߿<EFF[oUSSa3eʔj0}Zvc oct U};$N]p 17ԙ][~Ts^~~믿v;^kiiٲeK$9s%Klٲp[n{1:&xEECn }q̒7$z[?`Œ-,`$o} `Y EX)V&U~9B67e@3E3X4SBzsi VƱ~xS9erqZXHiP40 5;`%//oण&pA-t4UK ^t vBboc|w{/}K+++GXr\xt͕|<Z#-F`_C[ۿow̜9s{oIIի/˵q/}K&oe]v3R( yH@rDrv$Ez_0R۾=SZ.׵`! H.Ж̳0,cOSP%͉M!1Vm敛i\2,'3;P.[d=ٻ0:L~KmFWn zL:qm`9JUB8sW;*Vڷhc-ʢZPa47y+7;5 XXD5zsevrOc ktt G1lЦ;_k#h&`a^ɞA} > ee1|=c-"A_~{{z׶lr~\~)YBi|#Bro4 O_8ACo(J+ڳgOFFEђ*"_ul-P<|BKf>ZĈ<qIPBD:bJ܅Z9gqʭBT-cs|Od(7{mEu{8wlʡ$Xscb'ڒʗ٦.&Ka -痓?/䜵yLaQLˆ[U &vUdiʗu"t&fY;3U6ν'sd!L9' g9\;w\KU.j#C7mڴiӦ X 5oZRΰ7R{( HSMsxhoÖQSw.I$ "FKq|( OKs۳@|,,DOK̚yۅyk\ݭ"jVo$(/X,K$O9-(!JC^t?FzߕxY;DB+w *ˈj#9r겠Q~L/5c[?ze|cT&YY:7lP&nmN~*8-Ά]D+^sNLo윎& QdBӘ=B4(a^˞O{%4iqt!dMco` py3]C[B<Q1ϥN~ E+L;'ff *G)̅a4SKImQG(!:#mLvGq%-ιiUDU4n=*5$ZFF[2גWn:ϖћҧH*Do `t $Plca!-quH #1F-eqrCQEi MS]R"ޅ FoJ!e12;8 lFgzӸxf.褬EyͰTgCq|K'0M, EaB,=k -ZYtXY\t"'8�g`YlsYf="s ._nĪȤ1^q7B(TYW°xj'hk\ E#E u:12ĕm {bņWJtx}")%�a��0PuDշSz:/'Gzbqځ:oIU'30GѨT6r�66k0FEμ.#< Y*$�7N+4n%8i LtbBPtoaܙ2T:"©P'9#��#n:3Fv/28WgE8-g2R��@��������KNY4H?z���@JBeskZ^FAHg ���`d5��<Gj>퀡 dB%ݘl` ��Í"R<NP4yrh zĬm ����e-Ea*$h?=˗R=+mq]Z\L5��� {db %>u/gt 6!(,dNH��GJBd,*C#zMgXlqlL,X`�peir5֞L:[T,Nv].d!՝;^nKn10��F(o_(yk\ִdMLѠ!\ 9 1_5LkL66řꏄl\n,��($A=?wW ECʺQDT*喙,8h%rdF?ADTWf)� ��F!(ή`f8 T"nR%چ� ����`J����0a@����0 ����a`����0�����FX�����# ,��������� ����`A����0 ����a`����0�����FX�����# ,��������� ����`A����0 ����a`����0�����F.ѕ����IENDB`�������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/object.assign without depth.png������������0000664�0000000�0000000�00000013663�14332737457�0031376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��v�����Re���NPLTEYYYEDEutuhghYXYͻޠgfgq�� IDATx흋v:@{0l:9z)lM%:'! K]%׿N�OA;�@�xvŹTҿ(|'UrQ]bˋh-kbP3fsS`m]#ۓuO ک~/h#rUj7+YiT=ow'U׍2:94uu_չPָ[8ۣ�icV^]95Oa,q39v`­grkgvv\vf?v0b 37t~&kg\t1x5Y.R@�@�@;�@�@;�@\[]rYQ�Y^E�Yvϴmfl>lz(-K:UR?7X.$-c.Zlݵ:nx+iY{]iِZn<.gU괡/iו )v:anfJa;h7땵9dY5mMrc;s.v]i٨ZŔ,i&VIҮ+-+7=ٹ. ȋcuf9R;E' ]=se!@;�@�@;�@�]p,hW]2e3Ov\杻ѮEx.l,joc\a7~K8 ]R哸E n]qhKMvcnv1y< X.n)3 c PvM _ 0njyzcV8+L) L6l)*Bb}-Z(ίVBA;ey]t1xTH�O �ځ�hv �ځ�hv ڥuÞPx E[֮vxv.<۵S1w8y^VGK &kx6kWfvZbvqRrkvN S8gPޓq<۵e]`k0Y;_=Uł`ځgvÒN=zc )E;oպ?WL[E pql~�[v �( �ځ�hv �ځ�h)Y`fEzݡ�ֲB;3hB-6J`Wv �c;�@�@*�@v �ځ�hv �ځ�h+&N�2vLIA; bG13 Nh1wEyK>S ֔׮׮n"qp" 9mAv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv S+ά}U"7kÐi+CFܡkÈgh7>"=YlokZ٦(Km`kc ΢iW]T{4vvo[{zQO,rP:Y馾ϊxmrծbBPOSvhӮO]ώ0v3܌jgwڹNLDMPf0U6ٻ{x1NÈ\ !� @;�@�@;�@�]NCwK!랪3xEks՟4hmuIݠ8+.ݮn66Υ~3i_j٢sa\S  vu!N»Y9\HA-ؙL%xsqU*hg& LhMٴlŨ`1v2+bV;o)dXɆN\㔛ɪRr\\D;Ȱ.p<OՎcyv'�@�@;�@�@;`v\҃DOK=T iRE_jgi׭v<ΠK\]ݮ߇;{?MZm{=jSNFKinUx|{!kk0.|Ub vMpSEN&>A q_'kz݆P_ؓ;+w}QUS;lwlAƸ-)G\j/h:ܧɌ.iS}wDtvlrܥl6㰷A3w,ˌsr {N^l<e g{s3Y;Cu3#Dg8W/@�@;�@�@;�@�X^JIx5VD;M 3hB;g`o֜@ `lv �ځ�\H�H|@;�@�@;�@vncF;pU@vALV-b*fP0R�D=8vՅlv8vq:_.@ȦhNav �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�h gڢaD;Uve;[S?g4#R%֯]%M[2Ί`\n-Y!6hW7z-iW7v 6v%He1jÁMG1zWu*V=۫NAM{r;<m?nT]3?}?1,]?f5~$^ʿucSڵĞE>ݪc;Ghĸ{G5{ÏiM.*EvV3=4.ƍ1 ُO1]\?s)^8N;O.8C#$f 85QT$;kt]`xڹnLmShBӼvx8?Q:BkIܜRQ?8F90V.vn:’vюb|\|'ɒvwA%6KUƝvIܤ]F:hsx<~;40LNʪ8-_Ddvժ0馟ML Qpuv}b8Dgc֍4KƤa8{~u \3n=gDiB<x N{+:ّF7Sw f?@�@;�@�@;՟w^O_ϪOEwkeӍv3lRK)Y \sY:ܸTJqY.mܛLb}B]ꋿnx7h#d mӸjg=YzIkq:TWe/jgoOӃ|g>]NY0LFN]* _RS>!KU?Z?çV]OӸv#t&°TU\ه~.Y94.u;J3"8*PT]ԇY|1JjvzM1/D MԳcG3Z+r.&$avh~cRX(re]:޸?YJ; !oG*NBaZ;E p0 PkK7YƬ&c,˙?o-ͬG@nvg)~#xvo]`V??V:µq/N/?)*0F i:b6^"y'қ\3P4 ΍bb]6U&Z7jI>-&v6>fv*-d~Nq;h:Yc_OM]zvM.}kg4OkGÏa&ڽvh\2vُq'Rgrc;G,ssS>FS ?[./0ҮٛKo1n]8菻зg]cQ@;Vdolz׋#tQWihlgO.Tݧߤ_Zϫ_¤F"vwIo{`~0Ν57e9/+YR,L6XcjK5P\A 4uo0)Ӥ_׼v*?yNG6PLi f N&:-~㫫'nu_Q~*eF TI7.sɟ ^8>r1hg>F4هk/)4knpn΋f4>MRyuFzO0Ƌ@9�]JS"d^v*Za2fS1v �ځ�hv �ځ�hv vR߉hj;ct.~ Ea_VD;?YdaoR�@8] v �ځ�hv �ځ�hv ک4cvRIûsv3X6'>mnflN4͇Ovd)^ +n/"K!T;slslJm&ԛA͕c^;%S+2lsڵٽ|21ݾ!v5vL)`-O'48bpv\ �$>�hv �ځ�hv 7׎ίکRۋjMe:^T.nBr&p#L<dvrCUӨ[G uUo�gcf2fAۻ&.Xh]Ҳ^ss'yEٻ۞cfte# Z={YvsǭLe# vDe=džNvgvv/nS 7tdvAr0eJ.瘝ZKL(-蓟Ҷ^;Nnˢݻű=t؋#E(v �ځ�hv �ځ�h]4ŠfG&1c ^#]ʓ,hӟ ڽ$%>%o]rL^*&MRmNv-ӃIڽ(UMH%+z SMحrlR-EA{Qv7%jו@eʱ iSv6]8,v r݋rܔ"mJ׮W9o`l.p%7%c2n[Үe 3݅BZ<�Nv �( �ځ�hv �ځ�hv`+{D;MlcI"=6G'Flcʱ솱�Q9FQ96㔢8sֱ =Oؤ ~�BjX O �ځ�hv �ځ�hv w Q]Ln5Yp;h1lLuQv)Z6xSnǰ Ywa l>C^7WVe|er;IS~{Űh(Φn97~W=-;ߞcw~el_clzkqhcw ڽ;9f''?|SF;ҍq4;We=ھt>EVJٱ]uQunPd[ b=ǴY,P)m6s?m{+8v �ځ�hv �ځ�hv f3kv£XHG# QHD;x{*?1vǸrhrGc;x �'P@�N�\H�H|@;�@�LcPo����IENDB`�����������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/python-mermaid-integration.png�������������0000664�0000000�0000000�00000114203�14332737457�0031342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��C���������IDATxw}>gfK#PDz۲q\Iy=I'NJM͒ .wmwgg傮43/QDEQDEQDEQDEQDEQDEQDEQDEQD3Md(".$("Ny> FO�w]-"8=]绁+Owpuu۷ 5B}E\Ƹ\]Z{| öpe˖]S9ZF))qBqᡵ+RB\sQt/a{3.]6~V:pI$y"' �d� a(�/\싽аN>5" H\+2뺸{ur }+ρub/40BR8Nd2_+qv>ZkEH_8#0'.k؉&Iq_ayZbqN^�'vrA2Zɓ(.)q?u)++}\-j!.?(4y/-h |Eqfܸqw}t!/g_#nVbQGĝqaw1fϞMII ݻw'LEvRJ7o7nk_'JEqyDQ49>^}U2 ?<x0F&"|Eq`�VGxԩSt]ysO^DXA<y$ ,`РATWWG͔baV9øq?3c=Ư~+mv ƸIFQGSxbˌ3V&X۷/;Yl?OX|9 ,]6Jgfy뭷ѣC*P$)JlzMYYsַPJ#0{leX}D+7m6*++Z"VD큭R(ftЁgy^z;wrw2`˪RGX$iƌCYY" `q`;àAxᇹ΂ 8vXO:yDoǎ]qѹsӚaq_t'Zk:vNyy'رc7|35[|��<t2ZH15@at7nN7|M @ @@hK<h… d2\yTVV J�,|">`WJL&ꪫڵ+se۷[gdai0 A*iP BW@Wh2Ҡ Z(A6S( #lÇYr%W^y".% yѣs嗿~n'OB$@8ٽ'2xp?\QJ1A�%Mn#ξThЫu!)>BHtP^^Be4R 6OQghYbGe̙TWW_S*V:uČ3aˏ }zՏlIßٟѡTwǶ;hLuY]4JhPP#D#B6=1C9"4JIJ/ F-[Fuu5$JEѼY\ĥxM*--+k2~ z{;wdú<eF].oAcc#\ݺ"S?x %X C)%' p@ƺn<Bڵkٱc7t555M6?[ qN1}}&>SJ?AYW � t;7~A-P"j@Rr8|IQ G7ړZ xX!npP [y,Y)%Ç4!".`^P c.\ݍ3^Ǟ{�FaZ,y_5#Zh|Ռ&reLd4 J#EЪMqC.U7򏀱vn޼M61azU%,⒆ZaKZ+VYISs=+QA#$:p@.4(ܳ޴JU Z:ewtK#@A@�m# +LJh"ɴl2,G*Nfr-&.Nw *�m}ql^*MM͸ 2\vlϖMi)ߦÜݦqEkD#VB8ɂ̀A4#d# o/0X>ㅙMkݻٰa o߾Wż"-<ϋK,!C<ߚ\.o+߂h%ݳn!R]S$%d}V\%�!p4& Сl MhmaV_cos@)«~E}:tN'ŅB|˜RY0uTvzY1qq`ّ%A</"s > !=z$#ed9<ȑCXJMAdH(mwg !TM�E8s�b>+@&07f潟Ʌ&E}}=W!Cu+RBJ 8Ofcc# .ĉ9޽{H$HR1s U"U @ z>W_q DM&SZ%qd/L[ΤՄvh"L P)SDSLaUn0_?b�Kڞ}qFl_OƍZU8l>rRt:Mee%cȑ 2SUUY7qjHGO\{퍌9d%EFYA6 r$\v\D iY� "ࣈ)5?D5Z;cxqSS+VqNIIIt Pq^a` 7t҅˿ȑ#Y7_\.GUUݻwgĈL4!CP^^Z5!+ضc+K.7'g\}$ $D)9 |I tLYBjM$\ ?7*,]-b#Ό&&Nj'߶mؼy3#Fo߾o°8NPRm6|M~a ĠA7nΝ;yY~=/2O<D3j(FQcPɶhnR{??[o#@6J d2><S/̘SBmPh@ &㷕m(V#7ranV:txT(8Wh.?[nqaii)%%%hܹ3G&عs'Wf̙3zGݧ7\=6rOx?u{׾ nl%ir9M (c5CcQN=7-Ʌ2aWݻwzh57z6Xm3k֬aٲe?<%_JKKԩF}vlҥY~+V' |}q)IW{&ʝDžl6G"H847gihW^᭷ȑ8C>}<y2:}<12ղ(6D"th&dW@|Auغu+~;555yǴ"8HRVfB$& Bk5֚#3l0vl֯uJ(/+W<NVp NlɐN|vSS}+ =L&˂ xزe {?ݺԴFEqkp|_0<PJQ__|@yyyQąyQ_5dyuV9 Bs;zM oN6\p]AMPQYK0ɤDF}_y/2?wMnݘ?>[>~EaHlݺ˗GQ8k:Qą6>}:Ǐ<Dl-KBn;Jss3#e℉9cFѩ+$ 2}L&+ׯɤCCCqHRL2ɓ .P0<fl޼l6㋭>h}uROr >"t*,~p$*#G77=J x^ R),H mw>r 49G:q$ຮ1(AFQڵK2rHF+EqaG裏/Gf1ĭ3Ek\}@Fz8!#&;8JH@lKƧԄ;`iss8.Aq N϶mػw/#Gd2׎".'կH$u]y\\vk~} �?" JHM4q }ǁ49N CGiiIX"(`3COnѣGY|9]taĉ1oEq6hm.͖=|6ld O(~gڹj%j~邇T2߇\ 3-hcwЉ2֬YC."׹Gi|( ۈք"ݻy1byDž+bUOv.A=|_㼅^aqthcS4@+ \&,"!q$7p֭rl6ʕ+%K/[m-iǏgժUi&Of'5H<w~SGG62\Nn:.\__Bɍi ' tKZ9FE)&֭ɮmYƎ*2KK4aJ355̜y6m__5kcǎEkʕkѿ<DQZGaҥ 8aÆJj7y^gH$a vQa=0`�f̘j/`Iw8hr/ lkVod5lذLs#iٙApŤi.d 5y rD"IcGNǼyxyp}a̙L|5:( �;!d L͛7sa>ϓL&OW];AiEĉZe>Y_ xwZ Y`[=>AdRǺX*LZtgL9]r47˨px>&p{QPktڙO<BJskAM. 35 cǎ[oѫW/ƏW[ m5ufrVy?O>}:W_}u?N5yfOsssTgzjn݊iteQ 680P{Ce&d3&"0 IFL8+TLPmB\ӳ&Ν;ٴi=PDIq>/ "+mNc=Ν;Y0֬.$MMM444wވpǎ466RRRB>}1c#gБt!MӚSuVuqD2 N:E.H$,G5z ,r Lsi_ ( 1O8[oEMM W]uUTzw9b2G%}Eq39knn뮣={D)Ecc#wfƍlذ={ypM71zh Duu5zA`MF)!$q7!x<t5 ʌ0m'$HQi.\VD$kv>s¦:c|t=<ӥT'N3ϰrJCb[" a-ʰi/w料ݻw:}Fkjj(++Gz >AѹshaXFp\h@Jt @82V>*�MB@"a湡I|Fz9+La'k BjM IzԖ" l|A\=>:z'B<ҥKqkB4_͛oK/СCرcL h ]vW\9tԉA1x`:wZ{⏅ 0\!Ȃ�I; |af@uG(tВ@HPS� [2{_6J $2vЎr|Pemt9/3./ Q)ő#Gx>|8>P]f O< 6]v=Ŝ)6/tf^z =NGo,{ؐI[+<RLl 25mg{$TOkJtǣĜtm΅AW}nt>/2`٥79^ dظq#Ǐ禛nP-ػw/_E"~ܹ)9_Eq&].˗/gɒ%<CTTT|h Ƕj͘i~6Od(BI#�Dhr\h�{<`c7K;w.i4N놆|I?̀* ?3,qtCCCdaL2#$l\a!4W#gccLcTe4[; 0ڞ@ ʉNIDH s.4=߃+0kk;M cƍtM}x7`ɒ%tM\q$]a뭷b֭<C$6ą^6fآE@j@1=z3ABjDA! Ppg@4l{j>|<!EL�d2̙3Z&OPJb y mFyyy^%AkY$-V>|zɓ'3v<t hk6iL\"</ӻXBQ;8ξN rF8R D(jG?+ aAYs/;05[x޽{yg>CXRJoKyy9sO( 7E΋_~f͚I? Vkd #ޘ6nƑcoQh=U$LdDDcܜa^a# rD\.ǼyHRx{ .jly:t|3 6,ZO+ g*m /̙30`@4ڋwS-Zb)̞.2¤%Q*(i Pf:tZZ /rj 5 zkݻX8RQ{kI&QZZ XEV@˼g} OGJh ; fHo@EU)Ǐg8vm;7qCDD:YCJTuH*B#x0D<#.\ɓ'�3IyZ9s0`�OI8Z3c5kְh">PSSs?Cu,� UЩK'M5wͺҶGu[kDWJKpR@+pЧr C+Z*hjjbܹ3AT^I8?矧={bak6kϓ'OSOѧO&OL:>-#yvZdPK=qʫ$ei^z)oZȟ|O?D{: ?4ӡE 'DI&A+(4 ~xi{֚e˖sN뮈50Q>Bp^}U1bDKe ס x{dž ;}A}ERz*yqjo6|6ݼM),IÑV� #\rkBSH.}yȸq⦵R XhSNeԩi|ϫDWD!nE8Áx=z4Feh=w^ 0)H! |M.G~F.|Шn|24PJqlŦȐD~FB*uq>{.'СC]6EaO `߿[owv<"$~K2Mvdޗ̠A=PA~D]󟰶Dz@ke>5 xС_=ozuuu<3R).z葷*>EaZCk1a7o >J9t8F$nܴ Nl?~K9YAFƩqRg_\iNdU.{ahgRraϟσ>Heee:;|0o6;w{a̘1yv񖊅YDm@̝;'NpM7ѱcS+qOժ&J),?Ӕo~h*"II[icLDG`x{ CM_xZs]w-~x/ˡbժUL6-+AMx78pis /LDDDđˇǗ^z˗!d$(,N.{8xǡyq 7ХKEڣ8yf~_Я_?>OETJ\">*f֚yQRRɓ*qU裏2vX*[[\ ꫯr!(!z3Xp޽<hyٳg_K)Yz5˖-kw}Nskm Q0-?l6SYYyJ Qe/ mPRmiy5jTdZCcc#>3gd„ 8s`D^y8qb['.u>,˗/K_C˞?셡rtRndHl6_yw}bq +Vi&LB>}ZxA!Z*=z0sHHk\R)�~ӧO&L:L{n_={/})Jk(�۴)F͛Guu5&Lzr_dV!<e׮]?͋t/V\!Am߾|0/߮Dcǎ#K_gĻ}HEKRWWɓݻiI/4yo&+W_~yG3l*`<90b_ y())a̙y~qd2!xXd t\E|ZR!ӴpBzѣsDqBGOPZZwUg}[WGloƆ^d!X<3̘1#d2ڵk / R"8~Eh"6oɓׯ_T YNuRF9J)~_eЭ[S{\7uS__Elݺ/~<x>CjkkE(hb=p�/W^5˅k2x<r8êUxw>}:Fjs3?�<{ `5s;[_Dz믿Ν;Gqׯ</A&6555QqEV3{sΈMkd,v]d2I6رc̚5S>80 6|�Ӽi"?|>g?hE|7�8vWŋ/=ÕW^I6#m(+yg-ZD>}?~|dt rdMs{VwcÆ |_W^h\Ù Ld¿L3`"0і] hy'ٳ'#F̑ݻwG+M~8z(dD"E\8+ `ٲe۷iӦѩS' ȫ縞OX8N4fZWWǼyׯW^yenK> ¹o"^<6m|<@II `&틄5֮]׿u.] |2&@Ȱ]dmҥK4hcƌqɫ\{ʼn-l&SO=šCxh8.О&7_{Zc8bw Ӆ;; v?6o)‡s ԁ(HT^+!N-\?{OmQ~^DƆA .M;4Nsc:'ԣǞ;kKI9ex⽁8X8A 7طo3fBjSf!vAjV[XrrJn6 GBK8°.!:?( h׀d,`zO%gGHt0ͥ=W3d8gŊ-Dqz[>wKMMw/M*m[ZZR! >"2a_NPhNM\@"tFSVw(gA*9rhrhHR͑BMÖKJ)#m6* W8ـO@h7NjPEf8 :~R)6'?+(4DlذK0aB/4+BhAD+RWhٻw/sΥiӦQ]]K" {Z!'NēE2(7\`}Z%4u^zn>ds"۔67YRNy`3gNmm_@i CGxk,N9®gID:"%@ hhT nJ{D|tt;!ЁBD:kdP{qs-LDK%p, jŅ`<űi*Z n8&.僦dځ@eM)AC\|˹pDgfM ]qNhQx-yPd2^z%oWUxJ'ȸ&q/ ahL"rЀgҩR<)H=gI$\|R)>-غEkb>CO߀jGwѡv! q A q\' W: A531#=EJb(M;4lQ2@:Y@PA8gI)6)D3�)(?5=%8n E+OdrVr啴[g 5jǑxYAk[ W=|rR82uAzμi*JN:'Nph_)cGNCi:w`NN[4}k KrW2~<!g\"'Ѧ\Nqa9JmM!eFSԶ_"܄gRH9~2I/#NH%~vѱcPG]c!mcǎUUUyZykto-F}xIq&gBH7^!lt蜦KM9cyc}.g9o!> !q04\VZfKS#Fv<AN唔@z0AYJҌ0f2FrtLEG@ta'ycE<x_馛{TۋKDS%?&MjzbЎHG[JkG@$)?'[eq dR8lJJ:i-Fj|O|݈ )uHq Vs<C~;xf9ž={xihh`ڴi׏.]DVL;$Ѵ4{y PR.Wr6>uc&JP+)'=6oʡu7Qn#`SOf9r;w_u]nFKN(++Oy=h9eI;-. QK-MtI2xpU@- LkC$&с ,R nL0D#FOa+!ozjf͚ň#N Ǣ| E*h |A&4Z*4J5%jp{Z()�j2$^. 娪,߯D&2cQ:mQh C~z|MvE2DJɚ5kcĉtڕN:Ej8|QZi#L24D#MȡDPgߗB22M Tk=Z-"!>D9vǎck8pΝ;>\7]ұcS|q[J'/"27&pD%Yq=BA;\ �D3>H" h?*\DϯZ XhCeʔ)Fs$uKFk?h;Z0i.2!Pxa}d!LPi-LTYH)4t8Y)$ )S 8U0pQÊ+Xx1'OW^|S⦛n pB̙?2e }:QN ql񏅓mI1)gf2Z8 PyA(] -ZE}gϞ=ر vZ2 {kAJɼyxw={6='Nk$@;lYD./)̯jH#P~�h}Q]Mk urpF<Uŷ{ɸgcx9x f͢o߾ ('!\*0F( A J;H7$оF 6ZHc�ZIv!+9477&1A{#YSMMM߿[l2֭[ 2ɓ'3i$#y-0}t֬Y… Yr%JMM ]w O>yJR hlhc*ZK/P~$ A!(BӵݵO4Z@"A+T k9 Z(j-۷ 6;o>:vȤI1bD$�f͚Y%KDUÆ 6u`ƿ)JSb,fn/Q$&ۥ9* pI7/:I}"4"*qhvxTl6˲eXr%7p&M:aKC9F�3y_frh xk-fhm~i82!Hk֘pСf( jsQv Xl뮻ɓ'3`�t'ϨQ5j`ɒ% A3f W^y!|lsmQݹ9gm|cZሲkjFEha4mF)pњ }^: X؛2r!nʪUXjlZ>O3ydjkkL߸i.&L`„ ޽ŋl2{9̙øq7n}k׮P(k2,\q+)+)e !d)A^^G Na<NkT`,د:Aĥhtǎt҅뮻+ OR}u%RGa0fݎRH@L#YC@J !%dݷ:VZŦM<޽{3m4&NH#t<&COiڵ+wqӧOgŊX׳b vĉ>|8zsu7yy̙ Zif}.*ʫ@oҀP 4�7"]P&xnvuV<yݻwi&VZŶm(--eС\y啌1N:E1:{MϞ=Yv-֭cҥ AݧUl߾9s^$W^u5I7 BYVIE"$'UD -Ah(\ϼjvvO8oΝ;>5CQQpi üTX)P-"�F>I: 'Ara׉]mgڍ^{RVVѣ;vlt#F +&jjmƊ+Xf o& fԨIѣ Tu(g4T4 #"̫kGƯ%"[ex0PÇi&֯ڵk9~8ݻwg7!CJ"g=׼0M8%ѺcǎL:I&Ek /N2fx̆ ٴiO*F hh!�-͜s\@lN/΍ *L V\… 4iSL[qt\:P1A #T0l�阼.My ouؿo?kׯeÆlڴcGOҧo-3gdر 0 SⰯœケ_~׏o?B7rziصs={ORUYAWaϬQ,#!7t CTVaaP\];-Y͛7 ]MMM^^a|..>nt:͈#2dcռz W,cᢷ9yGAVPV_~9*8NBN/8AĒvZ,JDO[*ض_~'}WI̘1;Ru9&6qT81a^;D�?U~) |+G&}ES|a=k֮alݾTeyXFG}nq4մQL:+[%<>Lcyk9U}qIh k8=Z0>e|_/%-W'ذy5k׮fÆط�]tbɌ9!Cбc o\_,dTn-DУGwՓ'nzf<oP.AY]*k8Q 0 FEsv&@'#ṇx0\-c2}}AͶRϟ֭[{6lX뗃ylqCSna|(:*:7rREncXa)WϾr >өcuh^™&Vams #.@KJJ4h!P^K!P*`úEz7פFL)I}nOJi.1OfVĜWֱe</K~1j8q:ݢcqvB00qC|@EfMkd+?b*Z%R 8km)hlP8Pax#6oF}gƍk :믿>_KfK>)3g%$ ! CJZ|-+/q5 :2ʰrYQ4h={u\TN+̷BPP_oƾ/igqQG�_eسg;bhƥy B=B o*K˖/)qF3jHBmm0Bm59Z5lݺ+X%BtM0x04}PxH'>)1dle&@*  ]Fi0>>B9‹/;3Ν;[z1r8L %X '\CMΟ!%d/_ΐ!+)/3KJȰ3k-BmI(86_Cֵ Th!AP̿ R,Z|V1ޢԛ[P^ځoRNtС*K~7+g[^R7|kGNlU݇ɓc"p"LV?PRR52xX5C*b-gZN!5~}3x`**RR^^BG:Uu0 I(+u:7`K/i&@.#qdԨpÍ&3{DL tEaƻ(\4䞱u]F,X{&Tv>\Vasv 02 7/>a:Vj D=jja2+ ZnRm&˶m8UUr Jx@ܨʔE:#. sD:L#ǭ=//ݔd:4.T}<69eH:em#}6nZʕqбcGr\l7 )[hBpIc -: ٦(cXزץ 8T H%]JJJqpYj?g^Jæ&҄y>+V,c|k_ <0׽{Oh4yZ;yaE%"$ґuB~ص!-ݻy0`�7|s;}Va__}x?DnWbD]y.q"�PTlv+`رZJҥVi⣅Ŷht' ߛ,QH] 4C0>.!280 0#DE)EEEӦM 0O穧 {cc$)ONLRPYQIeeE)x- BD^{: &v̸R:p 7� M6 ?G<}wvҵk׈P)kcǎO<At)p>F./0.b/ʾq*T<#"_EII _='N`ٲe 6M$ <OJBVG8<$!R(!6daTh!x<d[gM$XQQA.innV=1<H pa UHe1B:Ս!4#^*$3.t:Ha)-ΙmBUxwyg"궯AT'lIk"./fȑ=>nsq}E8سg׭O>ۗѣGkq :Ww!É*< .lNS[yA$BGj7^1ݢ042<q FDؽ{7oFT&tZ+ ?y}#l"&ƪPDI7jnLMfs(K|_# sLáGygBz n TR@Ei9p�կ0`�f#q(gS/pqb[5yfBoذ9N:1yd^{5-ZDMZ** |fdtAq5 [[i+fyq]Rp ":r}&<</@UK'gMkeRBRuyh}-i*+_J(Ji*�ɷ]zѦa[ {Q:w ?Op*څ1;5kvMCC7O W{ax\3W]t>kTH44ԳnZ*EAn2dk֬n<g5&pٗf ؍f}snQps01ѷI&pD=k֬ηСÍvra'vIBǪL@J ӎ&4IǑQ9v6ƪ?󿀐u]rYIP[5\3M)4ݷ'@&`ѣ;v,/ﲰt֑ ?k,Ǝ&_h0|"&Eo�O`''8o&`7n;DtS;|0Ƕm[Ak&} ˂B7J***ѣGh}eɒx6,d<>•|3#L78&OxN (--O fsH2lI?5)Ǝel6ǎ7ѣТٖm(E3* K:c|# �l||^ xV7n J?#F <466ew9r;V}heTmU†CiTYU*xEP*} 㦌ֺ5h&TsI$|Jr-H[:#Gg΄(bCS4VBPlֹ@e FVcul,"G*n-K2)in6#8 H&L9'6u@B& <636ϿEiGԩ]t9%&>acZO". <. !ر͛?`A;Gq~q6Gt:I&] (M;8N?e2PFCla#�97tI. P6 8(C€S}?jJ ! |J&hj8.IT({@"aX`֮.L֔f I@ SBT�‰3]tak=/H0a%5y>A`,R|N@.¬H$ rGRP$;*8fht0~#Ge%܊/mz@9;B*͛9ykRFZ6u/~7|}sd2TO+D¤?hmH\3D{HkS1zpy L 6) @G+$.ɤN s@& ;ab0,Jilk\.G*BAmm-wM.^F<kZdz:yH':GD i&>3i3^ "!M ӵl J)& ӂ6ڵkԧ>5J Zkv/d2BLRʜFJH$%W\95t-`1-X&L-[nE'6,])GD;-Jr<q42d2^h-0xd"A& kց@ $;B;ɌEOs~ ~ҒjnkRM1]Hf/$^N#YihUp󽻶6iIzD)|#s2Y%$A�$fsd2MDEEl@ii)ld0u'l2%vRhV_Sߝ#9r8‘;v{2vxOq|[**> +{ Ev0Dw �P|@sàa=)ef $TRGOJ%MQHza?l[Kbvc(2@�lozHMϴa 9(m7ϗ{!r`bk}5 Р$T*~)H09Nl6ؕ._@<Op |xg_3M!d_7 OpsZRWp A8p!^yeKWxN$…t6nMM9 JJh ]R_DYYJAii �4kD}aϟfH &ds9|?K޽ٳw kZsYD?۲:6koeDl7-H\2ptN̅[RVVf~&B7EL98Ni\!`,t RpqJFWۏ0B*q](%q]\y%% $LdBƤt\�moH'4EQ5 hh:FLУw7&O7)$km⚒Qx-ug_gĠS0+T2 `h,A9v|]00ljӔ˩I*AI s.Lf<?&$CW^yVgҡ*p =g{ۧ`\9R5=KG}}T)^!H]r9Urd!LN&aS|)K: u@Ĝ{8>3c/ a0ҬйYrDQ'&挦J&q4p]wq{{H7AEyn[׮L461Q!ṹ|.{>=4KINYPS=m4 kk5( #tQRFy1J44()IVjn9ٳoT ? 6~EB.$Aan c+<v$^{ymAΝ5kw~/44QVY/Cyy9/()I4k$ZfSRB&cܙ'% cZ2 ^#%# j%rFJ0U܆d5!S8RJR<)mɓ')It*?#|4\+WK>5jeeeq: neG},X'S^{宻>E~5!9jnB(zYp4677{%"j1&u|P?8Uu!C|𑃀V93<áCGׯ_Xؖqcr&}Zk3O?W^0o}[xutВ!W(əܜ<E.hl̅+T*Y@qK |O�&kW$I!ZPcQE#SYa $$Z\?TTrXk0o,LUqBR)ο\VRʀK7P:&?'Kp%3Tw`UXb-z2k,n:tp'ɛ墾vǃ w'dܹ466g`gҡ3JiȀP*PO=3 [0M5(4yq1Cc ,;f) L:/|kׄFMEY%/<y2<�#FXX∏]<(>ncjN5֭%KQ&ýS* I"@-5JK?LGf 'D,@d$89X @14hRĮ%(F$z@%PbmiǤ( ۇKD J #p [y á_d kEKSq$Mj�/ N=8HǎJJ[!'+<s/7̭J޽#-1N_́&t\.ŋyYjBjxAƌ+}$rq 9#r:uE,(7䅴7*BfB >l8e d $%̜y=O/t>ˌٺe =:gذaqxTVV?Dp<M&1?o~bX… o˚5kڵ+vw)+B <!ti�*c: !$[Z,c Sz ]2lg�'>F<y-XG%# [s ?79T?DL7Y}s DP&́S 1h/qSo~<Lz-{z뭬Zgy'x"x>O1tH+Td2<쳼Klݺ.]~ロ\7 7$kEB!\d$8wm&R6U'ɳΙBkS7K`w0tξ{QZ0fh0h /}y_tMqQxI T0={6/"`|{oSuzǤ8RBanRzC`n!YḶmf$Ù^uޟ4\20e2.r@sJY'̩h@h\'ɬYܥƎ06ayy9SLaҤIر^z^{7xaÆq=pWRYYyFf7 o͌9cʔ);Bx)B!r_%@%" AR-@>eIpfݫ7_oh4 ]:t{w'cڴi{ <8vCDڴy ctR|g̘1_%cƌTh! S)]¾N!Th\3? K 3n)P<PI%%ɔ w!q Ck PgiL ֮^#fh3"T>CmΓ82 AYˌעtάʐZ8J1x` >9^{5^}UΝ;smq-еkר<YhO=k׮K.x|3ay6֔A@"#: T2MP0׮*GLֲB@MҊ}ҷ}VK} ?uTN͛y饗7o ,`zL>(zf}7|'|ݻwS^^̙3:th)+f= Ӊt5B k|B'AN� ӫ[Gkvi@/ &:jpSk~"pI,=&L{/r-C #DBPgMЉ43Αde)rZ-8 EP"?YaD@,,˗/^`ժUW\=CUUg7Ջ;3o;晆&y<62ac&*9WyM=:UУ_ZZ2sJta;;2B2\MMY6oN*E t5JQEi~SS?< ;v젤ӧsw | 4[n3fPQQ}NtzhjZa>gАޔjS"׎1 ?"ThCh0xx%0f.1֊}%q~|1@< B |RtkOnZ(Lt]%́CSY4WATlه?︴S2e={67L>q?Sƍ`I$Z蟬 $J Oa75'&FZ\B#cq'R(ΐɺ?halüNoВbGR> wK.W_eΜ9w#ѱcGƏẅ́ ix| hX ҟq (V0 cO> 2̭o._%# MÛWN٦�-M� -H8n@i6)Hkslo!p.@|8ǡ|[<o p ; 2ă1Z8Im ]C+Sd3~,`FcB@׬AI*L4eo=h0j!&&'Ofĉ;vٳg#d̙t-m=+cTh J|\V:&Jiu~ؘ暙^pfhYtiyW~Yg%# GY 'p ;B�d"kIv:t2TcJZ&`Csf)))СhpCΫ'rijػk?#1QG b쇆~!l-Pbo.]pNE~9rpy;rXhi@ gZ�a5E@ya;d #ZI~'D%Lҭ[7/:^ύrq2~amnhlؼd)*P %Z3i%´ues$I@sD#APFIJYG*R% Gsa rj6Ʋ"ڍKH5=ӛ$rٻ3n"H"0th<iyXK)M2 i2~ 8-q%֯b%0 kp\snq%aUhO服SZZ�VݿƆ,~. .Ŝ^DB6 *HḊ5U7A"j7Eu#RSl`S~hacU�Yו455{F/ƈC2t׼O._EEy ]TQ^^JYU* Z·Ʌ@[ak p0l1D7�_o۩uar4NҡC>ieU HXf斵tOvi v>ګб#]jdO 7]O E2'BBcҎ]" . V ![,r h4H?(_f&P(Hc"0 !"BݹVҹ6LPh2ޖمN pUpc {ac\LUV"T�dtHw-3 fbcíM*(si@IBN4 5{ Fp3nZh'@ LP 8ٸ'@?_Cwѵ6k4'O6Zlѫ`MOG2N(ȡe@f2 QBqp['9ps4eG!\kIĆ5b"vNZ4Ei@|ظ�-2 >#_9Xt6ܚpZDEnpE{ڹŘx7M:&%!qE>4nr`noZ8g%H%\ /&xgGgkƌ˃~Eg [F\h(d7q$@$4R!>d>tIyT),cFi[Gl(|/AKzJdbD@b+eUڤ4ߌk3LCK=o-Zw,h#q9Xߣ {KQ/΅'c+9ɇ ŊB B"kVo m1ar\&斅UH'+:,V/n7?͖-xg??NiwACBD7t%Da" #hdXgt R\tyXp%OjEaY\Cꑺ ~.�)ٵ$Gn$]ƒwW3n;-l@1r>^a 7}@o0xM)Ulê/JѦJĮ:J1yk&R&Ḡo\C9Y~ Gk_{{]:1jh{ ѱz%2=h+6YݾAdaBPrLuJ4-̜j l)cZN-䰬0"Y؇% O(t%vEB:]RyykT&' > |B|h24BSC.߭o"2%M!cG*Nd* TV%W>wO.]:}D"/+8 T3舺޲5+(QG G#|[ԥ4L,5f.RwP U�Z"iɣH!E}wЗ>CYj%[nCc+%6ɵ g�\l_ `k[>0嘅@:&!mJo*6UA{>*;0WFM]]{Se^)R FG}z/Qmqu" N7 d$[W;L.Ilq!B{z"=iU|FCR !ǎ SNlٲC>Dii)5dɒeߔj2Υ|RaZ?R2L~x|@^5@Ng?K0a+V;.^{ms]ӧ}v^~e̙3 zZf_*F|=zrȑ#Yjƍc̘1Ql,-°gBk4񵵵<Qܘ1c6l=^{-Apqjkk7n\xE|`㥁`jS8j(VXO>}ka,\޽{S]]RSqrc k{CO׳j*^555w}R)x vj{KC,jԩbuٳ';vdÆ d2 4'n:6o,]8 C ϔ.\J|ߏL]kZ~SzJX€Cr}QWW3<CCC)¯z_77kjj>|8۶mc퀩2e eee,ZÇ"H8,a!9ghu],Y͛7B�`N<3go3wܖ,6)'kBͱ5k"٧O&MĆ X~}qqC; -5? in6gΛVJ)`̙7^zw}7s7B⋧%-mt={ҭ[76nɓ'`ԩSС .dgq~qYCh1_~Df̘OSfZkjkk;HӼ ر#T.' a5hc>|8۷og֭1555L6m۶a桝[q1)pY ø<]w5wu'NLiˈ#g-Yy7n8m4u/́'8{\6tG>}0e}Y<ϋmĚĉDɓ'3cƌh}EXzwlڴCEM***[ٿ?+WH;ߠhJ0#^5|ꫯ-u\CBPYYM7رcyWxEaa]X { 2;vm۶7&MbȐ!̝;CP[p CYs} 2#Fϒ˙h9d}̙H)y饗ؽ{ž".QeI&uٺTZ38L2k,yij2T6xp CaeRn:e}?VS;v,3f`͚5̙3'EaPBzMMM 6l}h1'2w\j{Q(\0Vcg2L< ~ir\4I L&馛;w.z?"�[T1bvbƍ.wy'J)^(Hg_N18;\O&4�},]GF+- ]ee%z+Æ _dĠb,G`qׯ�{ɳ>�u]ǼyسgO^IixpJ xg#'ac̙4551gΜ<&D<nAп 룚wJ~Gcc#o@1Ŧ!pOĪ*n6^z%Z«5gΜ;믿Nss3\.J-ϗ7sVWWS[[ݻٳgO^jOo=:> H0}t7oZklEIJ̙32e < K,*,$7+aH)ٺuk䷎o?]t?i;}u,"m?L^?=p5ڟ[0o^!4h#GdΜ9O*|=Fy}E,8[ln[Zo^j:t( bƍ߿?O; T*ϺuشiS^@8۾�??ppL1ne'i2ncX"Z57h nvvܹs9vXDV /?KYY b׮]} |ӟ<aZDp}O'0a4+.EC̝;+\ PJq72}t̙ŋ".OK CL&ٲe y.l6K2K_[neAmh3cFw �vŎk ˀep 'c2[naŊ:t  /'Fd4$>|8N]]]eA Iٰakd!7p G)rl0&>3~L&vbiaWRnVrO?4.D":.^wjWVVӡC~_r<B¼">y\,//ܹ}ED!|_eKySk决0@-W츞ᾏ-⓬뮻7|S&^<ﰰ*`ذa̚57/I~GqxovNobTUUi&Zc&NȤI/ISSSxKBrg+ kcgi~@I0}^lveee|r9fϞV.c'p<f<c,_</E2;N޽YjUo}7!8N&f`<۾aLd lx XhKWD"ֆW^,XYfE$xپ>BO~G?[n#".o؅q ʕ+ٿ?z4C!$ :w 7 /ҥKćhmZc6?~N8rѵ_�0a^l>S`'X�ͼ[g?kN ͞BooRRRR@+E-. ɰw^4]t!JErD\.G*ѣ|ЧO2L϶Z\;ǍOyyi[$I!rLU6 0rH***x7ꪫBS 7˗h7n_XdI4a[3M> kUKCCTUUQRRxy�C !LqF:vH׮])--LjqH ^/| ?F ޗKBwQ}+섪dڴi1xVWR+-Kvܙ=c n~/\^&JZ3g}L2D"Wƴr<t֍뿎uxYb?я;>qWSQQwbmr`WaUVVrUWoGLqiaR*"j(G< �'Ns,_<1+))waѢEQYۿw8qD={<޽l6shEa!ӅuƨQXlGIC LkX!{~{n۷/k׮ȑ#aBn̙ >Gy䔴x\-ٓ|Sbɒ%G?bڵyLy9i.֠0Ws ڱ)hu3}-)J*:ׂSn° (d"S,Z(rlrmkB", ]$W]u'Odxw.�_صk/bi2V[s=MMM'?_kMڢ)jC+:@i f?Y�~^plFi?| >( 3tɨBRݻwO>,_'N9/70[kȑ#ѣ/ɓymm.)%W_}5'NgZ\,,PJL&7ɀxꩧ/~A]]L&6ZeAMRAĵ8h�.\N.iǖ0Ni A+ 0O:9g( ? C0k۷lٲ<`a'"0عoG[]]ͰaXv-G2~<y<澱СCyᇹظq#<˖-XA"E DpHtQP%J2/"> &esY hԶQ~ WJ4heee,_fڽ)=s+ 6lB~RСC;y穫>ҥ y衇<_̞=}4Z%<\ 5@aLd+q nH[&s =>�8N`:�<3>6( ?eĉձy*/sBW; FϞ=yw7nyj> 7L];',Ko<&J1yd~#F+MzFGSJFJX Zqh@Fs<Mk*!T E&s Z!3ۂbp|Jƍ… Yb#Gl5y"> ն1~x~߱o>:utJmq|Nv҅/| ۿ7|3ӦM;k0p@/УG^y8ȍ7)WRV^B#<xz+]*r 4> !^g"V*j((CDBHsXnâ0<Z3s[׻woFڵkٽ{7}- " *2e ?<+V`Y+r̙׿f̘1TUU5rSN~‹=etF6Oq`^BeE5{v6kQR.8Z~D;E?5@FzeRtEaF%Tj&L/~ /_N>}Za`ׯcѢE~V<1CsD|skn5x뭷yٽg/~7엩?~Mi38q߃J9P3T%4'e8y<V%0#1 hMu]GϞ=YjSL(a*ܢpu]&O/~ nJUUU^j`t]I&1qDy&OLOl-?4p8;ky?{8z$Jӏ3q4Q[2~Ȅ׾q!4EC& G69p4BdqN(�kرݻk#EsL<t:͂ ry.yL&9v/b^^iS6g̸Yfn+�!Ra:-X HE~Zh J޴�`E9PFILY('@4~$ W�ZktPzjN8VE 0tШp *9iӦ/uVTA&HRs6Mٛ2eq 䡕IIˢamZ%PEk$_I" .p o1ۈ$-=ͱ~z>'ǥݛ},ĉ^:'*OqxZڡI|$pd( 7i&MN"ܦm'۱BB-%:<FA洩^l&OKggc^  S=z4jժEXD{!`ĉTUUoF$AK߾}Yx1˗/++ 1|U|4fLANLlk׮u >IG\hžݦev4ZhdZ6-”oF:GȹnS�e>Fk}> ?5.U68p`f3`bs!\uU<x޽{0XSxQѣI@~3w�H&La}}456rN{p|_8)9pd͇@mJ섏i')A0fn+MAl_?`%p;K6-AA5jO=| اW'VyYz5Q}E!Ak2K.|3__x9r$:u[n@0mД;(ӽ<?)W:x\G 8 `m4X8@"'酌i eEAL(}@o0xx8ܸȟ  5j .dʕ7nݺENx"h+R :^z+pM7ZRh' &O;ã>J*]2dFŐ!C&HU!@�!#T)W_ǘѣN%RJ0MGNgT.I"Q; "ฦNpqRAU:h"P2p7QiB P% ]Sg 7`nO? 7tu9][[ː!CxWټy3555y*\DV8ÕW^3<ӧOz8tЁ|;>|m۶e̙ó>KEE 4c2btU(]6m̂ b+&rL" Egt ! �ad6c?L*Y_PM`y M0l |]=&`#}E(f?,-Ԡ��>IDATo 8_.(Z#eHǏgѢElܸѣGSQQ_L.6xBpwSO;ЫW/S)pvʀ6m\'OuV֯_y7;w.Dݻ3|pF\}{ihh7>&mat A`k I<ZVyβr TsmG1/8vC D;>(,p�<x0#F`\y啌3HPD`{$3o<( r:X9oJ:F)Euu5zbr9cժU_W^yIѳWOr~'Nq>??RW_o$Mc#TZdR8zA"a'nh CFh`.OV=nlx u]ƌҥKcСQ[+Zw-??m6 vE8AC2$LRVVFǎ޽;W]uͱ >`+`<ϣq\SOcaPZ q&ՔFJA*@J͡CGg֭[yH))--iӦ1yd;ĭ;ZU @ƏOY`woBmh1[i"u]ZRJJvk bxFqH&p|d~^zS) w]̓O>iZ:d2 ~@ssǑxGy_ 7^o->) vt< ѣGgvp,A!u;v,'͞QhY/vqB0q )q{9L.L&C*q%i* F46je9D"[ZjLT*E~>}:hhl`/e( v5D)E"M2]tR9/^OZD֟r cg|O<uS+$%_ǎN?~<0{l^<_WHRS8@:-pk{u\TxĈ\s6ouk(Rxsىc2j(~mK׮]>4㿈"ZC<-KԩSdٌ?U&ŹԵ5 VaRcƌC=j[B*Se.9/~'Igf=gˑH8(e4Ǝ;.G\lQ3l'Zkm[L0qlagF%%%\q,^82 I\ ٭!t5&oҤILz2eI4~? #|?0_mwHS* 8g$Byۋ^vԨQߟEqY">*;ٷo/Z->j:W/B8RX ԬT"읜JP )a r(rr96WRR @.}sȔ} [:uTÖ-[hjj(Shp?~<=z^8嘶Z 8ɄQ5;S+~(؈Ls!LzaNaC丮Ks <x!]0<h&MDϞ=y뭷/ ">2_ܒ4L:˗sqfq#*M.FF)e Ri:$.R< ^4H$TTZ4g|qgݺu3F ɰ.yD|keڵٳmTEC!V?xwrI,XwQUi{ow &00Z 1`0֖jܩڭZUcnZ5D-UkgfA%.de0Z1`:}$!N_UoNϹ_|>@%f_0k6 R{vOnwۇae ,SmLvH$Ba"=)So>`ݺרGcc#17"yl޼;v0uTƌg�;Z9s&ӦMc,__P֧J #mOiݵCb]twQlMvj=͏ ]HI! qכłaXIwwP?IR\\ɓYz/Qť;hexSudrJƌUF3l6RJn&yΞ=Keee,5r~pv2Ķm9J{{{~BgmĺcD¥DVҸٳ먛6%>HJضh4C=LbZt\\WܠS)/u:dK+ËHf2uYx1RUUEIIy ҩv=M~fUx饗X~=sODH$r$8#m8v~)DERf̜Ο_3.8nP\ C�Z3T9 ;6"lL7\WI E%~vk% @,W2g͚ŤIضm7x#1~\F3㮻J#Ֆx<N,㴵qA9BWWp.]J̫!g$QZDJܤ+v%J f!Uf5ٮU&Oˢ8RTsn�e1Z^D0iժU<S:t!p84lI$,Xg}6SK5侾>;FGG?~^JJJ˨gΜ9L> &)UiPM`!̐pJ'ŰLzT$$}Ia8A ~E<@)<#eJ$BxS$BP"R /"ASPdn7|gy2 5l,n�{1***())!H$0Mn:;;I$RUUŒ%Kꪫe„ vK=<ieҐ:M@(d?.?w5PWD^zڧʉJ)x!+E("&u6ʰ 01/�OWj'I4Tb$4uc?5khmmM)`F]@s!N:ŬYé$7Zf̘رcs8%`;.)*ڴ@B\s1R$E'``XVʅǩGMet,(C{B+G6قRr[n,G<$_Vo`65COc~7[3sO?6 axԆ a(ӧٷ(-Ӱh9 Qe ׺�WN!$<(JmAzN$ЈL?NuWfLR@հ{: d}h_?>&Mb!R&r*7a sMꌌ7AOZ6T餁 CXZx E¡roJ ;'4�+mc<S2tA$B4�@[źScPx='s'EHF3P)P(bѢElڴNhd*`*u@:),nW^'v,vuv]Ior8 1y2X^9Q LTE䳽0UoKίm UBtwM>2!z.x)k.%K|Ga/;7s"l5'N _=E{~~ť&uzDy/&=~8 C\C_&p--#HdQ`d;3 :w޹PIwKŧ;ɨьƴiӘ<y26mbŊYʹXsi$6f_\s k֬ NڄC\ *NJ sH @l6u"PY Ov3C* dNN;Q&Fs)a2e˖_|3k3Det=O[Vs}?P!2Jp$- P i`H! 5BeZuHlO),=s6d33k`;ʋSP5�Pa5P5wfhh4m۩z^~emweQG~ζ[`S]]ê\Ys)j/T2Ÿ3* %0F³U_D )]IH"Dlg3f _-W+Q2D󦁾SrFsAJOUSSW_MKK vH$+x<'|uN#_e˛ 4A**:㫯8nCVx[. CibzEb�aĀab^@UEEXJ`Y˖-̞=;ߛz9}6nHii|+ 60fX$jpv\!&O)%:•6BFn)3Y3VJ %a m" K E\%p0F)0eq;w.eeelٲ%+e>|M6gMƊ&fLAQq1T~^m@/p)SBYEK !dbJGV{= ["4 {HW AiVF3Jh4ʼyعs'X.O?&H{n6nHgg' ,^IU0 3`Z&*MYRuDAe(R{S)ÔP P0PEg|tRoή]hllL,IKK h[o9sFhitZTIJž g(ѺZj4&3gΤ-Zt&u9ro燐fL2$KF3 ,\Μ9DڿW^yX,FSS^ta!y4Q `ɒ%b1vܙZ_'IJ,^V\ĉKU虡F3=*fֲyf9q=`޼y^,ά3P%dVyXn[nٳ~466S3-BZ9m&k4`x?D",\۶Yv-HGy+VFS2YKQ8虡F3gwl<n8Z&NȚ5k?~|_04vSh ZדRRQQ>eYgMheaFS&?.7k4ͥ#L\RP)!Js 9 Zj4o'*2S(;L 5 e0e.TE)�2u0Bf̍�׹d\6 #]s-; .hhCʯ 5 5^aZ4! mw5Fh4 8ȵ0CKڃV l>2idP\kQKT?=Xk`�;O}0X%aDb)Zm\ %P1UAB�\ A= *dn6.@kDG3Q)5rF^EZ̧> ?0 &Eb͹RA3w*ps`;M27$ FьOq(jͱ'=qp9a0Fb? H|;(ϼsQx372#ג61GW�sP|` ?!Ea>�e.,~2HOS?C)͵@YPKی2ېЏ\+/Q >޹|4🨩W͘*﹑`2K|8 HPJd@kC>yZ~ \ZX rdA)j?^Z�靿x+ׂf`2o� x)7sej< WcYj|ڐO0biByZ,򐵡 |[Q!-oQSvY�F>\ ?׎ÞQfnJ>`mȧ~h4Fh4Fh4Fh4Fh4Fh4P%j8>yQ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/sequence.png�������������������������������0000664�0000000�0000000�00000054572�14332737457�0025710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������6*��YAIDATx}\Ue {<%[+1@&@HM:pLj 5EwTfIJca7Nv͌5N <ͭrѣͺֺk-͵v/FDDDD`ȹPCRCRCRCRCRCFؿ8S>_10?sCc2]P4>DZSLJ@@ss}}b`U|s?#z;BC:ƇHzN {_1i<C\2`Uzg_`/kh"-ICtق|nBa.0[GSP7h"-ICtj<}{z9 "-)C""""bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH """"bH ^:YYrg{$b0UNVy"݃ƃ\d;s*ޱ>L *0'户*X2k KfYprjǡ Zخ}ElfOA.T , ߔ7)|�-c۴KY.:#2큱L?Otމ zD:ՉߓZ;LHvzy/Cy?a*رʛ [^!9`Pbge}֯J ZFbxaDj%}t d1p>;np9oKBKݿfs4Jœ(+JbfϱQĎi4 rU9;>'|5S"߀'g{9!J{EHZɉ?vC۰OʣAfl'۫o筡gmSQ$2rX"g+OE]Ÿ_a8}"答cUPYd?W<EqCd:$Lc?0kg|?8oH"I {q&b|es7.$ ߩ[ _ŌʈEk'tNc)O{Y@l"?tur ͜ɘ}N8-3>šq*mVBr JIVO`DE,bu]K#;}}5W{Ɖ}pǃdnF7$^_ˍu~? YLُb:TQK\ͶM06;&ch;bCdnQ9x< m=L9O �b‡ =265LI!a<zY&]Q�;�\䐊oTB5e!-Viĉ*]Wb+KNGTQ5D]M~aJkB\5~$WnPZ v.m)vۖQPL5"jP  ,P<_.�Lxj/*LfƊb科O_"oPx#zЯ$~V;>PY0{0 �@YyukfMu+6Sä'P]JN]x+w]Kk|bށ3pU0c甝/tk.4xWo_ʊ 6> :AYr^3p-A (ZXN^ \&LXPWpVWa߾~,;71lpWwcsL2*u?r\ws<JûszTCl:[h<qlƥ l!G$lHtJ:㬞GI ed$j{tXuש� oYTzG<w{z/8<&S7f7q'f\-8\#<F*�x3޳za[<_l病 WW54� SoovݝUrby<ҳ|?5Usa/)X>,,Jr^4>BcD㣇8YKf~9)ChtW-U0\!V.PmO2i}A3]Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!uj3(=LEe~>yΠ!Ҳ2>A>ܹyJñc|sѡ1y!Ҳ4>OgV>2d?#>í3z|**p.!ݝ!ICe=m|H^nٍEAq>}?3ow3!:4hG4>.\mC(JJJJ�vWDi|ȅLO-CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRIj\83_wetvMEDĐdEyh ]%y$VTtiϕ`ϪS^Ltt4YՔ2G3>1=oHDīdEj )qV6^R*:lLO}*|Eq(>fX1tdVx^vY<$mFe(Ȋt'Hh6yWuHNIf<xWuy$$l}!Κvܴ71_me^J2b+A ?cIJ2R3),iܭ?/MV %$$<{mkYv] G+9˒ǒINI#V? ,=;vVu\$,ۓK]"2(ą2bY~9CM9BD.\ "݌8, W Nj,9%IHJi|=}9=`nK_ f1e'0 I˘77Su*yaoGH<p?i)r6\Bٖ1%zr"2~_"⥏yN˗w1s\} S.|TNʲI}eIYDď i7Y Eֽ_1^kY;嶆Y{zF%&b.%rx*l5$ED-i'Xqd^p"�\%Cg!&@nl|]-ih\wSc1Q1@SZ1�Da"BzCU3~ dBk<aQ@:^ !Y ,~eFB8y{8e\w==m.~C$`1�ŹE xc1QSr\?_bxJ۝S_ڙ3:*c]jOQ,|d'°�-_K96?}6cXv�K( k("ғ)Ȋt3N MRYYoV![1PȔ1窬E.lذfmp&ώJ=A:.޵eMXw`%?8!D+ÃL�@@ 8TbD H`%eE_xF{GR%Lx*̳sY KB1מ9\XZ?Laz1.Ƶ҆,zGHO +T-L&L&OP z ٴc1.(M]ퟥ@gق'|˰i>3mW` [xōQ=fL'V26},ZBsfgb1>!L~n?^X¦,? b <纶z-M}ONӮp6 ""Z#+=�ː@.>aL *̴X+xX?ܝ\e=xbMÐV3op9lyQڪ^G2d$dE8˝`>v'm}1B\fDs;.\�3f{y=|.tfπi;ڵG(*q:ng t|/kW "Ynų6dnf@^"g%Ϧ DZk-CVjɳX@ϽKzzޛKųnku4i gذ0Om"fdעYYHW/&ql=esDl'Y# FǍ ,+9rfyܥXM#m`` 7Fm6\挺}^¢#뷵3wO4�@r:g#qh\zn;!PRR@pp"FQU gs W KZr:h1I|o'1dƇ&L9o.(XBBشs1Aµty\_z fdE Ss8dB#xj#Q1!\jMÒ/!MTG ײՀ+"(ȊرDӛH<CoS9Ye+vի!(Ȋts%%%;h|}}%nAAVDD�}}|}}"2=())']v***�4>p88|{EINN&!!A3r"!iFs�EZ!W_}W_}4>¤5"""0n8%rYnD5"""ݜBHdEDDDĐdEDDDĐdEDDDĐdEDDDĐ1']`|`x ""xB߃ owq?H"D(̞'YgAyge?o;cһCkdEDDDĐdEDDDĐdEDDDĐdED*pUz=_OUT[rܹS+(ȊHٳ憬F8ςs{X/ҙ$lu ߝGMKvVQQz#?5Կ҇vqgKo+vnBk^dEDl^tR;l c<tSJvqs߭E?&2ˍbПk9tǵ-tC߰1[Vmfpc)Ȋ9++MWX8-vi_ٿleþsh }!4&Wpiߙ~�}皦_ٙ͂L~ _6?^,Xͷg6{MI�iIû^ )im$LNX@vAәǭzqY ) In`/z{Ǜ\Gvfl|/RB#Op ""rNʶ2n+p] w'5Is2׏??pOZ..Y=kwǵ_V_x5TTTPQQkt̑tE&1Ι$EAq8閡$a칄Hʋ_i-_vgsF\`1̼3_k{N4jo24w")JR޶7{\Jܕ<b>' fLn`ngwr%}%fn1F""å͆ Ny{)=6sPEQbV.eNl p56ظBkl2�xd2!>5f-b'v� �TXz_0]7ܜǎ@ȭ<3+7sHt"I$&E�*'Թ9eCWguw >5~<XHs 7~[S-U[ÈVqa-/reC,:F3""r(Y&s?_0Vj*ևGoY:)78<a^�Ϻj;Cիz"|n8왛`{]| Ǚ *a1Pm'KϬoKOdm#=nЈ|f ?jk� lfa 7ឞb3Iqu$)Ċ(Ȋ Wo2[V�z_d%Q<@\ ."?g5u( øܜ:]uSF'-`AaNU9u@ u ! oTKqoK=m=|ӿ*7SxklalO,=B]ǀule$qw]w ""r|:̉`W9;ڹYpm[+ dgeIϻW;\Wz4c̲0ǭUaUbƼ>4hl(10nXTg `в6E!$<~pRaߎ_319S3A8�L$lt +]GI/8HWYi7ٗT~$ml+keWs;գK懟Yu1'|Mfe?t>4{t3Oʋ<apDn�|*0m\s زS3ZʴaYw8!S^`on�*Z9Ο3w-me5�-pYҮjTqE50<ah n8&3U"Qzn;!PRR@pp"h|t97E݁u[i_Bn] UyMY&/w5R3!&?;WzgyTVAߙqmڵS㣺 |Z+kgX6vb519qEiFVDDΏYTU�}_w ʱ<>=-+&h Pߥγ2gv;뷰έ&`P i2\!V:t)c)?z{;ގߥ]6.v/Ryw~ͻw>wtM>#Yga{f!p!kp˽"YgowU΂{tM]"b\ ""ă?.>ADDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDD܁ٮ]\;2W5Pqgϲ\N\5 Ng׳ӯt ""ҽd=6y%/iby%.lqLlmb)ni?gGW]k7>Ve8[]t>mkt4+k>;[vcvDDDvB*g,fH 5rDH{lh"oubo9D,ƎS1u &b{{[5v½w|`6wEޝܗ& [- +""݋T:- p~OƋkԔX­ DZ<ۋ ٚ2+(ۙ˒eZnbμNK<Β"6[v'o̻c^uÜ}΍3b q1$\\>>H|ZvO@7װꃝXBndꌩD^RJPS\4} 7y*UI ̙KE+qFM#rEqC3))|>PJ rFFxk}y~"3I9]e?|E_sɵ92Pq^=7KBh)XlϪ ?antIX׏q^2I32ʥhit;f3 !s*WI.bXfie)^@lZES9H0 jzeD3fNOE�4,`m LNI,yy *[?ι'e;K,aY<rdQd-ǼMv�f2?3;n AWx^`P63;id~̤XFkE Ӂ,^,ߵh"`̛LFoOfjo{(XBܬ4.Xؔn)3A~~# muq)-#x&\bc^jP);ϧhCSFӿw]$$!jHnnv!-i|t]HD;Vݕ߭qGDqW'#p\VwDD{'ʽĈ;CԈOn{ ݕ͵_]>qDC;"bҽ~B/;O#"fl8{qz;b5|]~wҭ:QZꮬv3"";vы#f6\C +xXz*pظ>?>T{3O_tGDUז5:Чoέp{+OYu~]h/{M<.mtM_''/!U'mƛiit;N 6%RY`fp]oamp,!65E5{ \yG!:~sσZ?]@% @'QdXĘQ,~_\YJhfgU4zk?ᨧjS$6!} )$\n\CLhX[\J(4:WS6:.x֞8\fpRg^W4�gTRSLhöBK DD۩"(8C<fb؊*T7n|{k9QIj /]viy,8\` $f 95Sǵ 3`{;wRiȒqu ]-6P6哿q G oUo �DZFe<3yJW^xT6X+uv]k|\i'{kaF% vs&cP1y,y7E,MNuː8jܳFk@3/f<7"Jc~V\gem.*qvha !4,SRf?gD&4ÜfA3i8qx8b0rF�92(rxV> Yǹɼy<q/~F/Zba*+JR^??\E_>ƴ@DD줩ǁY{/[X8kIX:kzF Y>ϛA2=BI6)ѹ@�nOuj^d0{n2 gx,K%`m8il AX"̚͘垢,b bgE17I|⽔(|}}[N�ћ!L"ݰ_Y!h�%!5Y,v$2;6]3lF6Hd eF.,xjtuZ61W\r|E Wk|N!9(9`1^nN�t;]#bN�_d~@!+ *6=Ƴ>ґ踧yoW.&SUk"]Ȩ%-L5wmlԎ5]ljX].k'?`&\.L}˅ ?' &t[\zl׸ָp՜C?;[wY1$#y {1B,4,\d̘BVm؎BMMn4: 4(ϑܻ Hfϟ= '=7ئrZ=s;mQ ƣ +""d$6;d8!b[jrTv`+)D% b8A^!ش/ 8-̙cjR,)Ȋqre(!_SY :zBPKUS۷~6jm=<<iHt:fqaGϗbaذaDDD`Z 4;-==|gl袋6lqۇ t=a�lmc_|pW`߾}۱c#dEDD v�Q.EDDD_/l۷>ܾq}qwE:=S]刈&!tm6}]yyƎ}b9_Z9o;3W_}M6`xygq:@ """ҡx#;;&mE:t ?Nvv6]t>¬t(YTÆ W^aذa,XC& """, +Vv`owGzYAAA<9_ """eŵsNowEz�Y2AAA 4H3!dEDDK]BAVDDDpG4 +"""]9GvWP.p8xg6lfdC(ȊHs:,X�͊+!dEDDS۷|}3.IHt:yfРA+ϑ """ҡ__bxk(Ȋ PRR?JJJ~:Nw}O<YX4 """oҷo_?lR>vNiw׮]l6WaÆcqwjV:ۿN{`&ZgK/mNVÇV.aÆ0vX=VKEDDow^V^ߤ<((ƶmλơYzxHKll,7n_СC�go߾3 8N'V~b tk """=ȤI4ik֬kv©n#"@ӦMcΝHRCRCRCRCRCRCRCRCRCRCRCRCRCRCvDD{.fdED/2vD.(sO3""ROX`owEiFVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IϑV}],s>VAVDDDV{ =:\AVDDD%vX =H޾]]Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)ȊH͛wƷNwedA*:Go!%cYs$ 2trΔ:vt,~[|ۧs˄_s~WaICM7317NNǾŪG[=G;=h7UőXgjD """||&S?cV$ؽ$͇qO%e%lKx[c_'.$z.5ח )ȊH~>a9�.S{GLKW!7T}a�\FxtUaߔMMdo�Ay~ H~6Ծ)vtV}~o-MT g~nէ]hIE+}:?a꣤ݰ}UqN73O=^s^[w]z_7LW>u6ҏΦ +"""].U${�F 2֭)xqI`��0i\8 ^l!mej )AX/I-_3&iqV-Hg|f"%z)Hm@P� HsI,l?`i[=IştCjUlO6ZbwS@QXa!/F:[κٽ1;pVdMl4uϠWĽ �`CPöI+~KLuHa'Q憇x<I`rp+'웷 Xw$󅸑\nI}oZ~Oê G7~[Co"mRԨi>_Ik-,socG 1+رq~y[[v @]+&\_+T�aׅ7ē7a3n2+_y:uE?H{2~6>C3[[QTu55 3'6Է~[Сj�hX~~۪gNմMebmm$k 76~ F\iv/y^7dhEw +"""]0)VfHd(d]qm0>C~Mq8Xh)Yh.6{U@&սnOvE;3p 8 doË3Lͮj߼;l%)z&)9_#- """e**\�̟L }WCp ԂI0<8zf&x?;/+^ dpS&<ɪCCYWWw0"&V~T`UϺ+Yz~D-殱0�O~ O?Rp'2&)B{t1.ŘIN6cRw6fH{E%,&M~l=޵? eŠD&smr_ɤa{9p=yt_@yiLfƇo$[WªO2t< g]8:D?--臟0cgbq6cBg3f[L\0cGֶh:cy@}w.iq,/Kq`}~?Tzm7l/X:f<IM/%\|=aśx荽)\Q+*ڊ^*nawoC/v'JJJ�vWDuzT}K?ڇdUMg,U7ʳֶmkOm= =gCߊ*9CGd wN|Fzw}wW%szt>O/]ٴߎ:Vm.TVdyl&߀?\_O?n@]�|.cG>2s6Y4<y"%"""" +"""" +"""" +"""" +"""" +"""" +"""|\C~\p͙ǘmPWo+9[@%<֫`Pvj+ޣY|GI{:L~G-Sn!?er귀WU|=CU�p4jZ@>⧃z"o=W[g\훲 {8^ #CAVDDD]ǃLBV.+2@EMxaKs/I&d֭f̰e|rҟ1ؼdm⇽L1CNʊw>Ǖ\@ˆVVoV54--.' q3fx&Wd[T[%NЧܲ̕ϱ�H !|蓬|�?JX@ݜ\qo ~ ?빴b,مobţ{8㤖t # lT5$|<E`U<VV*d$&A4z6>)a+<^b IyACkEIo_� """M\ψK}YR_$3F�. e⣿/os^cLVfH%5JW[N[+e"""eֿ}v[  aDL*!;LO%�UV7w'aXC;GhAsێ:1K En.[]vsb}o`߰p^)3IƌMTO[�xڥXQc"38C60�xfI6<oAapG4= 6?[8dEDDK �6䖛pˌl.G{N;s ^!<ɕ )aC/j׈7qLW-'Vn͕7e0y/zy\J,z�?^ׯmnjoT�o_ P/v'JJJ�vWDuzT}Ks lvC},ފifI@EE6d~e4*onߖl}wW%s"""ujY'mF-o~li>m)JK DDDK э]"ODDD\Ɗ+ a4#+"""" +"""" +""""5""".yvy "M(ȊH|Gx"gPVE:Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)ȊH(wѣ=z4SQXvj8AfJ2y\StC "\vncA,[ _b%[wOtݝJ'_SUHgeÎ�BI} i%6%gY=~#/b*w:g5H0A:?e\'M]VLeE,u�O/\Gu^DD:fdE(PL[DBNvPYCos|(cBXR؟ wN#8K2w 曦2uP-LbN'^e +}}""ҙ4#+"8D^X+)* $LJXrb,g/-'p| ~I/JBRejR<!}"")dEK4䇟?g翈Kw9d+ 2ftz\v֤/$k{YG<qUS TՕ-""=t2!`s!V,;H \15sT@<v,CoK7dMo&?u OXY{XO}:*""5""p4\Nr'Eo/az1!#\V}hp-W.\�3f{y=\{?a?P5@YO3e묈fdEGXx"[R1n`H �& ^^D$rk7%o b9w){ӈ~EͰKBs ;Z;j'H WBDD:P/v'JJJ�vWD:gbԻԸra2cɀ C.d.eM6[Ԯ ""=Ȋ!)V4XUUl۶`xowIDDDPfׂ�bEDDDNtUUU石cǎf 4 �^y>`km�~~~ݢ?ڮi{EEIkdEDDDĐ4#M=p-.-P9"- v37q5Y/+""""M)vcC&EDDDYի """ҭ(Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)ȊHN۽iYr<e6Y{gJm-kqvt2emd&1zhS(v(D ""^VZP<[guwlL;ZDr8YƲ[<5Vč2IˠK +"m&[]mb^J2ɩ(|] |> $9b/?ngIYHNIf|'́.#-%yY5,wSI[.b.~1 vdy{5>72!ȻJ\YXNy,y,4r+~;ܝ 3َrXps~?ȑ$?ʡ. +" ؜'pոp<Ai}1V$>h/&{&d=YPc'wy^ b++$l50sz/bkE&8I-D&%`=9n#0}*AeL\?:j*KYz` $d`_5^YXXh"`K%0uRBvEkd~p{VL!,zv!&זhwYD:W!""X=1O/ >Uo7WlQ1/3P2{M<=[Ok? {g ڐi%ksMf;GC]LHo`x29Xn5 !\?l bPr_%abwgTb'+ko;9oâO  �LhjM45]Gx>\D"dED;Eee%6c>wϠp9b#A [J%A /}c'2ԗH9BBb ֔RiV7̂r͢肁޷Lx(tq82w]aom"S$6!} )$\n£c\f~szwʺwc5!"=H7`d2a2&.+dMԧ5%G'SZ?DHgZΜtdKo0*B47ZzR`:@^q#+fϬ(@oFUJJʔM 5�85:qE-dI`^6y3"chH7PZaߡ }.oH[n#vލ�˕7/ܣ7x/L}5NLjyץ=PHB.,sC I�Y<vr'2X)h8V)ԎIkOQ~ː8j^s BgviauӻF gVE'2+^gbk"f+]8Ky2Vcq"=fdED[6 ,MK&.z �Q7kL'8Eށuh)h|MaJt.@Q ?EOj񗛀HW/&ql={yvA& D1)dׄ6m34Pf4cYۘ(Ҏ$QbG"r=Æ�:g3LJU:E hZV'v@II �Hr&L\.WRwB[. z0n11M,n, 4_W Stk՝i|ȅL3""bTf]&=cZ>1.ts h/}[nX xi6mKΜiW^+ =UD΁RUUl۶`xowIDDFZPP@UUBJAVD* ĉ4w}/]񊊊  } fdE[%**(҂;S UY /ƍcܸqMˊȅIAVD q\FVD Oϐ0)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ!)Ȋ\hʝ8˛y͸ʝ\tg ""=,+p-;g^\sO4cް؞Irz>ʵ"ҘHQZP63gn`5y^;K ).tPNH +"SC`/;XX2)iloo<Y`-3em٦k̼]GYMmUJGrJ2i^+e8,O#9e9E5*2Lt-"ޢ +"9 7+ K` =6-`2XAGuK]gFG4,`m LNI,yy *G>cQ̜~0[+q$z vI2ydn:Y,"݄; ""s }j'�P�sW[1LI e�%EʆΨ<!@,=3`h\wSc1Q1uGe1|rbÚńGUeӶ+/ti\(< 1?Ni+LCgþe|C3ά;(D5;@% mֆY@JY%aX{׊u5APH ""*cw4x5M` d8(/jا%X< >,de313ln*,avݮ23WJ<ް:};^l4 +"bP>LcJBl]8K>&sL90rF�92(r8qX2?kj43/#b.o.6Z/+%Y1rI] &&wWyyϦa#2+ot(~i26??ŝ s�&"5""rRrt�^J9+ŎDfzvfRc�0+h6(p.'vW%saX<Ƴd^*9d<+%�Dۿ$7Z^C$^+yf<ʶ WZn۝()) 88]v4>Z<f,f˅ 0ڗ\|-b{; h~k"Q)ؙnmDsE0FN!2ȊruLY^Lϵb,\d̘BVm؎BM4EoSˡbEt&H4>YFDP흝l%W '_{Ƈ\4#+""�,'` :2;rvdEDD^{ƎKtt4H +""b�>>DGGׇZ O<�J|k{Oֿz$''3x`G """"tTer{WyWXZp!@C.LZZ ""b�ƍ^"Q~=~KZ#+"")Ċ4OAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD ɧ+c|**Oy|gJgCth #CFy+Jmmpi|^nݙ < Ýx8qQ4>DZLJxtjcIKn}p<Yk|HGiYOҠSspsɀ::|owi|HGiYOҠSlE)$#i|HgiYO@O-CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR*\՞Β#8#u۽4 ɜşȬ8$VarlUPy7>5GUwƒYkX2z֐w�W;u}_ v+bTe۷0~rRTUffQ(IIhۦ]Ίt9y/5iey:%N}po_ۧ ҩN-m`vE;УkmL]V_Th7ǎ=TE�U yE}=;V /~UJur0 #V+!>@[H<#yuE~XX_Ux73?AVDaXVz34x7~D L"vLI)9o૙@!k?9 WJ;6.F2ONiF߆xR7c;^U|;o G=k2&19p?>F^ P}U/"uG_J n/9o*%ټX)"yl%az{}^;; _ĉcDb!'Lb+-3+۞˸uQ$՟Ԅ'YNݲ4_-fTF(^=pKyz zbY=OGCh>ӔSnlNߗ|tűܵnA֬S n2UPLشz} *b(Zb f=ɾ3N?;$Ww3" $e||ZniXb~d-Ց-Ĭ\ʜ@jmq1 @"3tʱPijXmxgaʀ�oyR,%6�X>|\�ᗱQ-a:O 6YP&TxDEV)({ WnboDvOîfm'NTA**s]a_Bw*}>"!ꊟo2SZડ\\[ Q?uCŅ/pJ0unKAضlx d 筡pQZ8h d,偸s�`PS}qUVa2k6V.K<?|y(_7)ۗƇ~'QJe?r!$so _`ʫ[3k]O[2&=vRr[Zb'_KH|9K?dlXu9!?#zRV\ WiI o7O Jꟁk AŠtO,7)d7]^ĂB~چ mfqύg+넟c—QCȜ#yWޝӣ'Ќl'pteҨGIe3.o`?^%aC*SgŤ>JJx_`(6''YU{ܣĪNXxˢ;Y۳~ĉuQ\4�1`3W>5bla<j1R5%H bӯ<,Lf_Dgz{dE_/ʗ/;i<gQ {Id`Q¯ݕq>P/ =r5X7^YO@àj) rj'~IOӯo"FVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD IAVDDDD SU>Ga**3v7ΛƇt! :5F]p옷SzÝvWΛƇt4! |:!x8qyn+VQYŇ;wp 7H"-iCrnd+ <3!:4!Ҳ:>HGS DDDDĐdEDDDĐdEDDDĐdEDDDĐdEDDDĐdEDDDĐGp/^W<����IENDB`��������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/simple-er.png������������������������������0000664�0000000�0000000�00000017533�14332737457�0025771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����I���-��"IDATxoTSg/_ -($slMTV:efMJ]}qo8ʼnyqYEɝuFZzGKgJYBKآHF"H@eG1E#X�;;~^%Ov6/;{?[F �X"v�I `````````````%MCZ^vU$9|wZ vf|lҏttݗ̌U,H)H~`````````````````````cB-j@$Vƚ▪""ƏvT**j0ī_ݗRvhkU_?{,*ï[Gmj" ZjY_XW)rm5cApWj*MJ ]f^#w696x{s$44!F&AƷJ;-J"U[u~NN1Yln i5DDݲxf1**+w`*^"t-Y!Z{ ',o..2hfXrowW`Ѵ6VjnWl剈HhRMDUGGV]n'~`+rxDt-{MmW=}mY7)ɵk,Cn?Wvc|ETgUvVyWBQEkbw\=wODD^nV׸:hlϊRImQ=`YSݩ/1(QP]#�"BߵxފbH^URS.>5G\GDJ{Ϭ.3UVTaVp=J-qzKޱ n ޘtfː3Tsfg~5D'Fb _ϥbWhB#SGN Ir2```````````````JQW\t{b̐eZ\rqkIZHWJKK۶mL&Į%9!]`0LNN]HBo~W]Hk駟yYׯ_  T2"Ȭ_W/إ%6+W ===yyy%O?4K%v`jj* }[ [juvvvNtE"{GnnUb-'NЮ}ٲe7o|SS#<Vg}nka… ---3OKJJ<{ܜ.hQAA^R]]]]]]3k׮{0|_#GXbӦMGD"F177Wo||_=qZhb-cǎedd,X ]7l۶=$-"|MOO}駟ʺ3{EKNH- Dtݻw_rܹsb׵P˗/X,|S澚18;;sy>9E&/h4:"rjƶO<9::z&&&_>998222]\pѣ֭F7XB&"vuށe˖edddff^v-voٵkڵkg׿^[tصKuBc_~ fM۷]bJOO_tL&tҳ>>ۼy>*vt} }>I4db477]vbbB& ˑTOm۶5kķ}?w ;|SSS/؅HXJkpp{ G<44DDR?"??HjM{ѥnzzz;.$}?JiK#GѺ֧zjV.]$v]ғ:tի~G2Lj|rwwILjkzz?~ꩧ6l v-H;OD"vkzg}0~?h4]4J?konpp0 b~D_]H8OW__0_{|||֭b(vuuE"DgF"')%mBO?-v!In]0sdc!#|?|r I,IH$e I-.]Zr\."-NvW"NCk׮%?HB(~ NE*jUF<T>^󘦿W[e\./t9u-ؽH*tZQ%GI"+D2S3Ԗ8Q{lN\[&xSrH%]DrZǻL:s^ct~}z7>,յ:=nXkFhY ohk![m]'sTNdhLU .NpD*mBn|$uNpD2.lhvfdHgs&}|lO^VVRtH=�Ҩ(@Dm/9Z+y:<RQS+zTW]#>,V/cGD gN^WsyRqH&]sؼ=y.:(Ϩs9m}Sj3\GT5d/+޼E*t6oׇCc4%'(Pp9N ??~j*˽vJU ߻ZNgCw{kle˖]A4O埘%uGV’d7;HﺃqB&4::*:w9s~@ߊ+R3Z$tutt]H2]'Nشi Nz ?> Oz:ydu -}̍sS%¹sZ؅jU<TKWooAArrr EJu_H<<֭GJ:sc=߸k.\v؅<$~yOKK7oޜKr<EbNܾ+655]xqҥ!ZR"ѢD'|rڵ3-4}ɓ'ׯ_-"ھ}ȈܗMpVVvBq/ h4>]PLOO],ŮaHt\իsƔJcǎU .7:FjBegg~3yJ%B(M$J${ldJrɒ?> m߾@Iי3gN>=իccck֬5َ;װDO嗯؅|rGGNj/(v!lIUbZjUAAU0't ,<LrJ`NbWȑ#.\ =]mmm###boU}}}@2%uԩ-[tvvB!+EpIRvq$^/NLLlڴizzZ.LoV`.^899iӦѩ_|mML ׯ+-Ydҥ2lͭb7==}j=~\.'>,viL$h۟{p8{vsΉ]S{{{QQQB jiiiIy^o"kxx8_%b6o-v0CCC׮]{GbOc=O՚?-~D댌+V={Vuwwoذailk?8##cɷZ.]H$ x≤܊HncccӳVkIIZn/eUV</ǥ=Bnj/~UFFFl&\544jժORRjH$0<<<ԧYwQT.]Ŕp隚RTw&''W.Cº՚=::*vi[Pi,gϞɉO5"bPލ7&{?%߿z껯p8 ?''';;{3]VkڐKdXg8-]dVoyvU]~aZaaYпߠ߰9$d;Q8Kl t ,|> $%                    Fa""kXa^睊,lVv7Sq=rs(_ U%:bK߮r(}zǀ^q[>oW| Ɓ HhzԺǧwݾ^Ѧݨ"BaM;uE ԗ嶁 _EvjY$jw ʭw\&ܖeǭYe!%' kYTU61NI,P_Y`9h@r&Qa~UID_ۅ[-Aw47whhSZ*=<n.PR᫯!;j:7_yhwh 8 5]:kשK<D7[zb@:uϟ6RhmNUCCĪ!o.[59-4gf] i_̑fcA(^%qz[;Ve-jk[{IMmz"fޠ.+6&i+("eiTaOњe$".;M\iLڰū%YEAW6׾<"SYhko q o 5R {[9-ܜ8쒝e¿UE G|OEyqygqY$=P ΪR8#>5!LJ4q/ x-{HW43y9d~ڧ!gNlw(֮wT( Ֆ".аVݫUYWZL0@Y+fܕ~{٤mW=}mŕšwˍTXY"Q }qÝ} 3/ 5=!XnHs(vA$y&O֜,ӬܵP86BgRU4%=;ۿW B{OYmٕ.k ANoq 6|U5RWPl{\oT+ߵViBIc}ǛOę_j(loI[@ijmW޾rf\[PRtcJ+͕U&%nmb- 2YHcuo~o_/fa"_ۤ6=֚ z]MUlUC4喙U;\GDJ{VCmZHAsb݂ҰdŒdG dKsUHOlߥwttttttttttttttttttttt2 U*UѶ.%4y<MH&3+d?(ved>4j֭-C�V.�V.�V.�V󭭭-`033s%%%2Lb&5===11裏Y&qŊbW p vI"\>+9YYYHpu�# N8rYJTv{]n0==]ƷLLLZ*77W�L"kIO8 $G]�%t%y:$iK� @.�V$.B!v �!taK� @.�V$.wDI ]@�$ `ER( Hµ QHD!]�$ܸs gdddff]@ߵ|PZFA�%~寧Ǘ% �w'W$hl^؜m :[X7xj<^w299<FsPh3{Ty|O'뼆Wyf؋(*QFKg~~Oɏ_{z0՛/QwOFgvqtݑ|ͯhwKo~?nHw8 `6q@hHg2^NWh4Dvd2"m]ht"8""ۥF/ *8K=D5>ODJ5whȟ^Pu3r:{mcC 1etؼHeNnn2km ?ǿQ ~o9NwKP!яҥ8f#߻p /H{�x`H(.O)@�$J`. kzz6@$.�B�XA�XFpTHQ "i @.�Vk׮E"H$"D|e˰ .@O< /_>kĵ_|qٲeb p7 >j׭['v!�F]KH҅4DI ]@bW=]r###b`:]}}}DzovrrR�@khh(  ^xСCb�7]_m=G.ضm[l Ùk7lF ҐyyV;'|r֙� +յqƙ3&+JΟ?/v�parr2D"&?ΝL{Kt]pATeիW_xqy� ( sss>ZR{HtE"JuiV^=::*v�0''&&Xt…LJիKGpʕɬZf LJ2:::ed/nAҥKet+(ŷL_FiEGU,- ߬ߠ GX4^ $~@@�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XA�XyXXB7Kj$. u,RciԴmM.Si`Xjq\+9I2c ZV!e-ۚt{[m};$)Pc+,[:m 56mV5[BZR[Jkj.7Y,&\*{޷,&dhW`Ѵ6~<Hm]D޹y`fKរ[}W^@oWw)ɵk,CnRXЕmwB;ldΚN}A oXdjmW)M.Nt|dD4>^[jAD-y*}z.> KÒKi/|_JqX, e.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V.�V?Jj;%GXLr\ y<C�;ltttttttttttttt86Z$J[����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/user-journey.png���������������������������0000664�0000000�0000000�00000110150�14332737457�0026530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��U��X���b���sRGB����gAMA�� a��� pHYs��t��tfx��IDATx^|wH $$ {Q*BEjZ[uTj*p0D$, N !!;%] $'x{w:"�������OK�������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*zzLKoMђ/ ٚP_�����uE 4%7N=%9�����IBF!c^%ۃJ obd#czA=a������hiާY\Mɚ-V�����p2zd+VMr2NA4)T54h�����BJgJSD胍Gu}$����P e-cU7%k6S�����P *{&f[~a|մQڂJ;Öz)^Cm�����BU4:)Fj܍,}ɖ+0S=d% LJrΠ yn_:i/]V~ݠk^m'^/Yϡ Kog2c7]=u邛 վٚP8|{M5ǩojTY4~ٮߎGfO,?#e*<4ϓg$~ c54o.cfNMHno[cK|'&~Kk:P,3MwN}Ad2yB>sdyO�����hUl/Uy_GteVӟ~9\LjHڊ3jY5CK>Z֖6TIe%JEo<mKFScMgleyC=uMW\ zd-J~i~>Z%ީ뫋v+KWV5e%6PX8=:[7_`yP:bz۪2t0+KK>A.z4-yAMW7YSxԗ~HpӚq_1邻t4YZa[k]_~ mV߱k-ӬOk JW. et[����a#TE㓟ƕ-0NG䎒buؑRNMR&ޫ(uZw&k2cm I쒑UFզhh%V r$;+6 4m1FB.}Z7L-=VX+^}L7L|ۤ}mrI7h!^YsPbIW#Wq컟Rr5?b*馪?Ӊ1%%ܩyՎv[Ӛg5Iyf~^ЄIs1A7{FrNx˒Or߲ޡCl����PϗiJoT\!JQ+6FYI:XǐR[vyjg, &kya\yJItϛVh3=;Vdf..bԯ-;R4;t׸?-͎t-~ѡzS$֫i\؛g렦9cGi  k>Sz.Tߡ2ӼO+SCO4%9]y)t{%+ʎ=^=}ר\ĻfUbd%UëpM6so~KK@񺓥S5w&Z~7gj�Hⲵkc1�����BU4>fwʖ�H{[Y6D2%+O xYӖdi͒#}5d&x_sWV\� +5n{sSfiI,_R68+uO^5?0OsxψаX%>{|RV>)okdXy6,Za!b4%z`/|>YX]M䇦.sV/uI]D^O=3gi/+%X?YO\_]¤*z>|X;>wS߲u7isSg腯*E 3A:MT[8]?H����xъ3^=S^)g<)Kr<R Bek-"LPm%u^SKCmؖ5?UK^E34 lܬNxJ?1Y.) O7W=# M0;.)cYx[_y-Jh~;N }yLmFk)0[{HҔ_;6[?FITlMvp=_ǜ J<UCHf~K+g�����6BU4^^LMqNQl AIvڰjirٲ{I_C0 =|+U)v3-MPn}5V?]RmMՊJc)kWMTBMg ȫmXBi} )mרI4`b)^mlp$EW.M)oۢ'0ߗ%oiݩ ]~qC`m;(͚񂒗xiJv==1���� ȱ7)v5J{uJV}8:)Kgْ{coS#¼ZƆ[^uxEUXw]o. eZuȸaδ;G+V8[t1p#&<)VtYHp zlA<.kl{Gol\ 8CKSx~9OOkާJVaê ⲟU;h'8w=^�����BU4jac.ӝ6'K~;Yg(f*O3f1EXjȌ@1ֽjFJ} 9<x -ۀhRֻKik jز]{)U5o4ųT|= Z%ܠDG(m;ϋ&y.5Uky]5b3|P_s.c?����!TE#qׇ?wFd&ocG;J.TTO;{K#$SRZlے>Ra7 k]bL)aw7b)bZl&$Km 8fũܻKϔfZ"uǣLk5jm՗i/)6w =]fOW'o/7kiIU{ho�����BU4z co# Ӕf|˄:V}:_KvJ̷#J]7W%.|=T? E,IUߺ:kdB/^G,6W_~5G#h?W|t^ܡie;ףuOK$=OG$Ggiu{Wxj3V(ܩ5kS4gX&xN:Zjn cT����*0$I7Tؐf; +lX5OsLъ/=tغM;+IUP4z^BH%B֛ժ6ոIe1 Ē3:My9n֜x͚#ܵIjj٨%#MO$Mzc=-K>^S{,7OS-dl\_Sªy8iOS{ê&kŚ7SI ����PPߞd.AQ =E/<c+CnPR}vޟuV=;VI cjUWV};~d!hwxRʟk_c3ɟ[FdM.cyk3Tlё;fL)\w>cT<I^ {=dx}JyU{qMB4%2i-MaU\M͸n<����ƇPps b5y|}s^Yp}Ro*d|/ J`e-9sfҽSPxF=J4QSޞ$;d qx?{5{\yzX4keU7zܬ)ӽp]?MSrcX:{yGǾ tg4sY8Ft����p#T7gw9! CS='gz^zT\*cvf-e\k|jqi(Zz4 @_%^;H'^ Oŗ ?׶Sn~q>s-$;Z5iкٞw-+ ����P8 *lXe!ڮQa=UJ1vT񚚜-öU5wt0y'Pz=53zpN}ĪaJiM9V쒶4YW7$ƩMϔfr|G{-zƾm=P1S4=7vHuf#|Qi*KG2����h5;�8豸zTLzn>DA@Zntmds0jHN;#WƜ ޳d}7UI����@1R8wH8]?@t1;&>X|u+|Ԗ&{Ԍ,[>]ei@U8$P����4b ltx&xq4,1?iLٶzaъVjE dWS5%[QT����@#@ v4Ϳ8֞<+k-<?*YiZ21MNyWx=_Zn汲?~P7�����XS8nY{+]z1ēP˨F6^LookJԔ%z`i X9MCF[{^YKfn����@#HUล*m[\"Pm0ocdJ= UI �����kkzx%^sJNזǻjh8gJ۱X&w#QIco'fiqZ̟zn$\K ����8�������~`*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?ueAZ UᄏR4iû[G;e��а]Wk^\C~FCnn�Ph^~+\[NSoy�h;l 8u u_\6}�+/H;Z-ڨW^Ydk��!Zb[N-y-5�@]2믿o^}Q\8r4g{ ?7fրSϪU;l ��4D;ZS׮El �PΟ?_M>׿s'k~{s~}ٻ[�aa x�аNeGKy~Pge]ոi>s9qx@]~zꩧ-������~[o-Sn5~n뮻oV�������z UuϯtW߈~v} wMpn�������^B*mRQW-9s^x/~5S)O2ao������V/wm?x< bt۳YJ������%T]bjk13?<GnSm3.{X>2Nq~L `�����F^BլYjܾҕ,]:JM5J <3L/S������РK2rl?Gr8 mϐZ:-pۙz� n3PS������РK:x`m~g4hAF`cpAiW*.cR|������� PW]yRښj[8s^K�]P������z UoF{H>^f[|ڷkn&R+|sP5&LZ+} ������@T/jf4c J.Ͷn[63Pxxm8%'}n٦SJyWfGX+������@z UnAxz9#Pkg:o'.M׻)<Lu(N^6?E3+Ow������h4rxW{~vک߹ԵoWl#Gm6[N[3?N >wLj6Rq|<مYSf~.]e,pXj.tӯ5��Lm2UO[@͢Gͷ�_G /oժUȨH <HoYڀoUq#T�a#TũP�OMּysu]ZPTII8|_W�������ND ������� BU�������*�������P�������pJk֬kg}ֹ\z=�������S"T5!j4-ۓ˳Fg������U5zm%aQ&|\wXo<u.<ٳ�������G1T7JAAA?nZm9˳G������� -T_*]jm^.TQVqm�������^B+V_ϾrmoL?E|m������PuΜ9j6(:^JYfϙe[&_Bn[h/8_P?}1C.ƪ��4PL]GՍ/:��z U?Y_uQ>Y0֎O*i*ŖSŒi>aխki���սGNt�8K-mZ?m߲֎Ù JX [w+eY\ǀS3:H}=~=Q1Yoj���3tdԠe_k2htJ��4l=zڝ}angnvuQ3ӵ[)Z.+$]�8fNz髇l?էC6T-���uQ5cqߩU��h%Tҭl?u`k'ᬄ K�LgWq/fJ=gu]= d7.61<u]5Ow~uݷb4r~O5yZi9o,縹kN㬳 ��8/Tm+,pWo \구@5_%U~+ܮQ=U歎�иKzK!柭k R0k �3_SS{Wgަۼ%\qWq(&R^.^s,-["E%&r]LW)SsϿ~QيTcjX<egWnsS3]s *+kW/cx-:B=7k}��-Bw#7%(gjCRomnWۼ_3BhjcrƳo+u*v&.FMPZ܏Ym3g�*Puu%a|tx7ؖ㕠+}/=_g+!*]ogOw:V �׭mdƒVPigmoVO*`g^׹?VynV kGǜSTjS2SMZM:'\ً>}7o[_5*2imX��p %JVmVu U%z,X/9!i/MrҼ꥛lrBlyDcެohɂXqiv-,[c^ﺨ-4{\]5nx��z UrL-Y09L?8^sm9~qg82xlW%Nˌ%h1~]MZ5yR6>O~j)r`?mc;Ikiⷙ"w*ل6(ܹ_/gb1$}qy/���N\or\=Qp]l]{8!iZ cگ,[4pݺ@klZ~5BQd)=P)6��Kj<Lo-&Oxֶ :;6E'}fuj:ګɗl百4Vdzq~&iVpw`jBR{}fYNVNdO#S_-Skk^���'9RtOxR6'Ir^_Px�[_ЍCε*YOP[GN8%'V7Y?5T)JaAU4vhiUmt]J9))U~Q16ìΛk6ze#S*xO+`Y,KIUb��IeGvgRJxbQ2߯cD&uc\۳l@]89T13&�pl;wϗIkmDl޼޻}d\n!}evjoyb]}d\S;N?{*:S3ߙU4e>\iJμflzy΍Wa|j0]t?z]7I1Vϲtk΢<Ess>lZj-ʖ'X7*Lje��uQVpzHC$zzn~:~67Svg[xZ\ic/V+��.AG]l-^Xk׮աC?맢qYj.tU&x,c6qRi6or5Y(i_Фrw3R1;?l@[o{*ͤ*<ng8#mQz_Gpu5}u��MJ̧lP5Z]mXFS6^Q *XPO&0JkzxoTeOLJۙ]N [\znBiU~F4=Jl��:BUDj0*,BU��tG �ǧ^������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@+44ĖSSxxS[�� Qfzx~!TEէOhk')-�kB/[�*QNl 8u7 ��hFu^րSG(D[�EQ[%'С<ԟ&M4p`'k[��@C:+G:Ì>�8^�������������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U������^^qb:Qhx3F>ldyWuńKաK;jsƜoڳg7']N1 s6-5M2E;vr/}{yjBӯ~+}Z�{LT<TZhz衇qF{-�'ާ[eTs Gof{-�p :b@oɿTp\qM:JJ[E(cunoDOto~#G絮>x+dK)R;-oSxbq-J߿MU\)s\{1r-;;ꬋR3{mǶ2o)ܫ?Z?SO+""~�5Yjnϵ~wsC/Eu =k\}p�NM6-Zt@ݒnRiw~Lf_ݥ<ƎPޓO>[>%ymwoH3T?ɶ8^~ӟꂿJjl@tMzOV�˜X?~FAGX O~\EC#.j٪=Z=U]?X>3]Kp{.mƮe҂_Eh`[m+7UՇ5vjBJu{"<PwBCC�*_W\q&} qmEJKB)/~ QFilDX4W~siX�8$a.}T >LxPwCRקЂP-L^h[�x۾} ~()޺8BI'i?�СCtf_uUշEzs۶@cEFG.::nԹBc.iƶ֨lҒYY[G@]\|y*my=Nqm͌f~;m �r^,-fN0>70D}oƎk[ů~}>~m9,z/kDF�hب ֜9s~F R @]�6mWj'I&_mP˗/W'_:7хٚFp?>�xl޼Ys^}C#=P5㥳~]'f[�%{jEK~O?"TEs}|s{sl @]q$=z]S@Ӈ~W4u>/ 5Հwg^xӕb[�b "ԪmÀ l �R Pl -b"TEjي:-]jk�UKwfpi:rĿ�ʭX ͷڙ;ץG[�eVIQ!9vQʹ~z_k׮U!V"Fj߽m@#ǚhl٫?^<]+VlwJOtLyWMֆ-;;0K]t-&MU]߶4|wg]+~p|[5j-UlkÖ={(>>޶.:?l[>}7Eٶzݕ؆Z,to-ywϫW5|*sNr>W0PIU}/tl?%MӠ΃lKVT\-iիmA^[j?k<EKK+)kcmq{ǵy;6ẽ:W>PJjM:38>,Qݣb[p"TEGktM/ZEYG^e/Rl2V^DG}6@\wٚ>}5\_}Q?s*,,-_dxew*(7#e ֿ3[kV.ws8=5yOΊgͯ\3t@-hFV4s?y)kK0x;xJT6#Ws7<NOPX00jڳrm)I t%?Ouhܤ3\�郑"m NGLGvsm^f+~ڵT k^[^ak N/يv.## TQg|J/5\=jU#8N;և pu[7Μܾ[Mr_||p}WF\IGe|2ZX?.ҿNג?P5pY\mjK^.)kO!}u?uqtEk]8dkU5 565zKmd&[jv<ݶVUXhֽD5dY5n-hK SNN~?chh7mXϑBJUw>^аh- VozmPLҀоs|Cݥ}fK ז[l*n+Ԏ:Z#?6xFURR8aa=U|6h,iZysw@mEIIS5묦MjCG 7h[).tű^6mnZGFuO>}[Mii>4a 5>h3r;AF['-.wmꦶgCQZTkaߨIw?蜜1†y1 TEK߶ ǰcM6FAAufU `NhEF@]neOچZ1*[,rl/?C{'A\Z|6C~:s_ﷶދ^LiƍPZhhEE[HK\D϶8MƨU|\-l+JQ-mX K74wk}HU[3䯟QښjvmP:㼛͟CA*̱,rf3ŤG�Gߏroϴ{+Wf_*lMWM,l86vGj]zt[]A6$i#"u.5o vVSe Qٹ'u Zóm>%&6p~44A3~XHq9M"| sE?С#[]Q^s`s]RjiMR棜>rѐgٽնC[uۻs[^kTDli'mC:4|Cvk[k6*W8}ﵘ4iNdg$_fU.uKrNQe-0=r3߰[{s]z Aza\3U<H]"wNGh U=6XL(8FpiOׇH3:8qU߬ *Q $81<3Bq"VUPU%r|W vjRrU&a 6?{mb2HME>vpN@?jGZ&׿55|svMڪWn utNBժZt5Q_ ]PG.*H@"T*PUEzcMU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?p7/u�z3wڽzV[u{u㋶ڐ3Qw5ԟ |KKaP8 Mb }>6xvw`<o5tۛvZiz8~iD.ڷmyͫU#�vz=xa u]Dt#bB}k=O|P#BU4̪E�͇֜lauo~>L.6O3c`M_ =vJ&fM/9LZn@3huX՗h8UTLe\a=qSחmo^s#35_5ٶ9:Tn; /O_ϔz`*Pź6*XRȲ\oj˰nF鮘mc`||N,BU4lΎ033{2nU|<,#P>j^~Jz\˧;ƕG%욎^@V W>sl{x1%=Zu<K}*_ǝ\*h=GV} cpR}]yFG}:Wxm18}Gjzs?Yʼn3,h6:k(zM+>+9ʶ{<]F׭< Skis9fd^}.vmɲ^=&Tα4s=nS篲Ve5>Sska^yZm_ojl)[oI-?#PU~%ɫqڙ1^N;l) ܩG=S#ިF`ҢwaNpW>bsT:futb'q=KyΕqWj{ף\?ߵ5N[(FyZBP $x뮯9{zZ_þӧb4+ŕ:WNZMeʙkcިwugWM6?1^ӭP;.6!Yj5&Rj-'?e3A+I?Kfr{?+3z>|&>g&.T'ǵhgZo+Z '6˧"/q=n&(8]y , v덷K-ogF@* 3Z5wm4lmIEZ`#t.(ksI1ÄOR~}s67V jQqzCJKX'7a9W$Bjz^_ ڭ&℮7Fx]grch{V\/Nl*mZqmyc9S*pN%�̇L}pM h5W\'Mկ|j}>(^0Ac}uӯk NDZPS=]f^J]o+NjWY8kgo^ɣ:ˎw榥^aLߨȞdOB8Kl_'͔g{:_O2Sm?8l̓"#zEsLz.ϼ}sTMxnVƙ-;zO65/#b޸`F)*T V3QH_z<8jÛoP-:'m~[6<#eTm U[=An'f6TfV6k<]Q( 9[G~w^Vgz 58l[Vop؜(pHw?0 .w֘08&T TK/}z$ْݞD0 SM*HKQ)۳LWKZ )P89foJw04mX?(='Dq}|*GdfçܛxCWm{zy,@f+=@Ҍ*3;m[u-GseƟt2 Y(RW*Lݱ=՜MLMƩg%;[+-tf|T| pt9vNҚumfJvN(c~]<9:ae/`kLᄖ]c;܈PTc68TkXX%`t�u47uDwjF_scݟ�@͍NK� tK}hg5;d0Aӏ:#C+D9)R.ߚ#EǨ:Ԗ$uۢ ~-9f^S*pl?qf6~5̛]{ׇ*zteT^|*qZFUeFTsv{8%� ҟQ5696l?jkw?H6\ejj 9aGVf^_F+i`2w.t}�LF{}Ԛ%wyO\^4''hiµ9I#ʦ{#'u%EU-Oz=E6\}mS:K�%\/vplYDr6'HG֏^!cx1#fej w8;^O#S˫}s8Zo\L%0:f:tE}8#s*g94z/�YvΈclps+3(r: 8FU?G7LN)3F8&zN6z/P8*Լ:Dz^c3lN81kS8NH6uQlkrn"گUQeM焺k:{Bŵ^iFObF9mmM/}lS6]L{6Pjѣk:^#OKqQfdyu~P8 V^Vy]翞s3+mLuCeNinS;F߸Xaja`?gIG`VZo˴/ il[^Z}nvߴʮ]jGLor"ďbFz/7`�N9u=kt<n{"Sӌ k̥q/f1zAe볺{xV.JӃ+꺞�LLTjd̎^{qj)uI7r}DuflQ =v-6pqn3m~l3hUzF-mѥeJ`d3{a̤iGSWq}~jTyW97X7%6b{W2Ή>::N5@Lŭe>=dQ>qFժlDwpcGT_C׎Tp`zfuU]^i]$M7;;wgq;S*y;Cڛk`r4;W7~#ӌ2[ccMv|_(Բ!cfY:4ev-WpOeu59J{ O^S}peg~n&'3f^&rOt;kzMs@lޙ^gz6rӌ�}i݉}Kk<3S]mˮ3zLTف=54:RK\j+( Z}3l!efة@E,XX8t_toS$JVY|q]v-k0NisfsN:V?5<m{3<7!ie[R귡6ls8 n;pz :b@j]zt[N=]7\ӧ_gk ϶mwf:wW⢋nk ϡCGԷz׶0Mm2UNQQݣt[laz&fpjiLwp:b*�������P�������@ �)e&}d����@"T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@ �������~ T�������?������U�������������BU�������*�������P�������@+87Nm!! 9Jĩ.$$ؖ& NuM6>h7lҔB4y7k53b0uZ}p9眞0EDiz;-5\g\ް_qzvI7[j_ݖSOx~UѠ=[N-'ϴGjqz7nn\[kxrEG75aջsnQ:bϊUmJc ngku:sl . 4H7GQVԟ&MhЮ۹>`;l[;ˇؖwIQf!ԧ gÄ ĢGavZٶGA0g\E]ƠTkVYl PG+ymPO8={>-�);;[۷o׀'N%Gц 4dH SIaaV^aÆ�TZZ+V8!!�>ٴi{=[h;woak�m߾}zWl @>|X׿Ę ~9}0//϶� T�������?������U������lT'U6ml @*((p֓k۶mHf-}@ h޽-�DG`& BU��������d֭Ol @߷5�v[ ̌Yf@+..v=PO٣+W@3ӎ[h999Zx4_|LAxf  m �BU�������*�������PO5k-Z@ Q˖-m @+22�m<**�ZPP(�������N1�������Ud׿ek�mӦM?ak�m_bk�-++K=o`nnm@ ':x4Fv Њw^[h%%%̴5�fNh>XZZj[�������U�������|ҦM�ZTT dk�y:tP} -�)88M6-�7��������|b6ɱ5�f6ζ5�f69t萭49NVV43AUdʕ?ik�mÆ :u]vG5�vA%dc mr�������BU�������*�������!a[5kL-�iӦj߾:t`[�Rpp;ud[�m۶U׮]m @ R֭խ[7?p �������>c?�߿_}CiժU rss@+((_mk�EEE�*�l޼Y|]viܹ Yf@ы/(&ZÄ��������BU�������*�������lh rZje[�Rqqa\6ml @2䘵۵kg[�6i< T�������?pzO@۽{y[hfkfk�xWl @?PPOݫ5k@Ҋ+l @@gٲe Lh"g 2+))q`QQm@ �������~ T�������?Ihh"##m @5mTQQQ ЂժU+[hn�ZPP(�������N1�������UdժUzgm @mܸQӧO5�k.M2�ZVV~vIaasssm �BU�>)((СCl @9(ԏ8p�5�fNh>XZZj[�������U�������|Ҷm[ 0�Zttl @hBguP9RAAA@ ;}iӦ@QV�������1ROب _f@+..f*qgk�͌3}r�|j*=쳶 6nܨ3f@۽{Lbk�͜X|`@:}077׶� T�������?������U������2�(44Tqqqj߾mH͚5s`llmH!!!NСmHk`Νm @jҤYK.N駟V-leo������4i nn4zh3FG޽{f[hYYYZb-[�ZAA-Zdk�EEE[_OS?SO=/U$--M~ݻwwޱ5�vk ̉W^yELGqqm ֵkڣ *������g?&L@Z BU�������l۶�������jT9`}'}hRRRtWSa4\ P@+-->/`кuk3uƁP Ujk������[~nk'V.]4f=Z *,BU�����r'3Th۶^s5޽mmxU`�����;YjppƏR>|mmU`PxݻW4hmHԖ-[tg�l0b |rs9 �Ŭd',kڴmh˳c QQQV˖-iUdٲeZp> ֭[^{M>mH۷o?ӧ�~9s&*PFDw}Ng8}M4I7n5kj}ٶqb6�> SVl @5k٩@0�3} q2AY#U�����FבH=6BU������-T%Hdʕl#]vG5�f6l4MԏB4&H8q"SPŐ@(**Çm @]:dk�TYYY M_rj6&H*������s='*������8�|Ҿ}{ <�ZV4l0[hJLL5�;OAAA@ ;}iӦ������� ':p4Yܾ}l @kk�lik�͌3}r�|zj= 6mڤ'x�Zzz@3?CN ~sssm �BU�������*�������P�������-@ԩS'kζ�PuQ111@ 8qqq@ >h^kҤعsg @ :J�������3N/�ɞ={rJ[h7|ck�-''G/5�/�ZIIl �BU�>ٺu>[hzm @8p@o\͚5KLGqq �n�������BU�������*�������,H^XX-Z�dֱ2kXEDD�d68rZli[�Riia\ddmH&::|:d[ƍP�������@ ZfTjff<蜑ܷo:]:UԮ];EGG[�8vܩŋkĉ@ '?mpeddhvFW^ wFmy? سggi&uݙ9e`6mc 4>�*ذa6oެ;vؖڙp5>>yK <֭kG}Զ�۷m ݸqn,}s,aaa֭z쩸8 v儧֚5k=zPNl+8p|wZrrssm[hаjdV-QQ~~ VE /BU2y/jFyl|7Sp&*.)Q^^pN[ǎ:t-�|efE(==ݶlhWln`pJJJ_G}8^-66VC Q.]l а޽{)fGXu^:VHHmjں}6nɨ:b 4�@"TN3μ5S=:ރ-F]:u)-C{V9r$�>01>j[h-lkUf9-S3VwNlڴm&BU3S.\hkRޝ4x@W&oܭ:on 3c̘1N,Y-�ɌyWֶ�8^  $ 즘zڹkRlUzfS7k,ON4kZkΥL3}E=Y *HYFK,qQ-tޮVNJKj]NL���L5裏\KդI;<iۦor͛7%\lh"sR?V~{gҀXN}{lF>zhUFh/rNmtkm-^)wY^zS���̺38e.8ڵGת٥/W˖-Q�YYYNSxX3v=6rbrs󝍬LlӦ= 4M%F"##,Pک.` T ssȾNh" r_m @Qu="g'P!'4P5:uhܯySa+�r TB:}DYc~[4Uaaͨt!TOivp@|2[g%ᔿ;mٲ)b9r�0h�ls!eF pv?bE)N٬78e[tYa`6'gwfVPhDRRR!?wDW'`C*)L{ĽOe kgV��h who߶fH /+;|Uü:8){+իYCPoHu0rǒ\:q11S^nshHve� j'8#m{T`-t7lB]:أ?pH3_xGLk_VomZt+/((Phhڷoo�QvZgU�gF֙=fF�u_&Tl,=zc^X}{wGzuGz;wQ~jڴfZm{_~h,hQt^Z.=һƧe9ݳcL˵yNUY `g8bNTT'X VoN 7d]SC*{}n֤߰OWKg=itr$iݺnk�lvs�uw q[.Y*{\Q*|7*;^hl<4<>; 6 Lq|h>[X~,mzcgVm߾l! TM69ff*7T^^KVU7y\vr�.�91~x[/{rlFz96Vr[m굛m^g)ES޼� uw~6buofK_ꪷ7vn֭"2} *)sg2M�i&ږʵjU"筣# svf,�0#�Ͷm`{ꗂ2ܡ_iUu=ֶm7oq�MYVrlV׺xմoʖ|_ BU| kiSua6x` P:_z-73֪H`qrnYz�yfk�af+:8չⲊKliQ5L:*^2v-Uپ5'(I1Ӂr5q%ڒ[05*:EFVs%#m?fme!`*ذa,ߣ{mx׋l;oJ$+ηGԱ֮7Cu?PjI`jSZ9C*(( 6Uug2k96- :]:Ũo(ԄQB=Wκ$:=ZUXX3\!ץKgd0͚ƨľ5~mApf &]3ѧ-ijQW]>JuGj<GUǎ]uT,pa*xF w.kc^yyJ<{mKF:#\kZ&#:|y[��@Cy/{;DmD vFuXf)м{WrދM>kX]vHM:<I sFv,3!#UP@~~si���3CXhShlNσFXz&�;BU(--u.uVdj\͔�ԩ:[hm۶~3[SὨ4A T"%e}(.*Wׯ͛kРA{QìoxXPhA#H,n۩_|mk3Om~�Tdvl5�f/�ޯ˯ε9{Q46σ>P=h(UF **ʹ<\V':*R濭viT[A�e/�|@;x~m[{ѬC*e_{]䩰){XOƑB幾jr<}Ш~hP@v̽TRR5ё7u߅ьr=jU'˹<���4fMbֵ3.珰3߷iӦjݺS zBu Wً+W:IM�Nw@#gK{mn];ϗjȠVˎ;:���hT_ω;k~/:dp::fߋs.Ə@cӤI羧/TٚV^ܾ&vljNn� *4kLݺusd8y_g?|缉Z;e���@\nڒ\Vg?ǟ|ٙ3B ꊱ"3y=Nh<Mi*,t/Q泝msْ}�hUFW^Υ93i9hM=K̛^s۶Tzr.]X?޽{43gʔ)_={t. 6uS̜|-rnW۝˰46ov/-=55A{]ML/**v !!T sf3jŪ4:&5gmE78/5R5g$wp p./88RzdN"Pw-ZP~Slu5 #V1?g=>k9:@cdUOXꃞ6O{1G>5M7'RL77 E. 37oެyj߮QfYKw]ZE)6_L>\9SݺU&6?H.\z\ݻkȐ!�ر@ػwx %$$�jӦ֭[L=+R.o`jvǿVxxZV8o�g:'/h=R¯9j˖-um4F۷׆ \}P9:[=R9ansXaN0a~ߎ\^{g;Kҙ>h]:b�/Bׯwʗ]q5~ꬍ<'`ݺm0/nMVy|*gPՏfplCkG}Զ�۷m h"xVO )Wnj{չek@||5Rͨ_uf3ƎZƍ`|:sp,fթj~i6sFxB3 L?4F>}8e T;ڿ5 % Vlh{Yweb3sD /BUYp3ZW}zup'w3x` >)/^k:zjPOnԕWc;}s@Cš@#ce uԫ>IіmPO}~,P= T��PfoKR[<Q.Xу@dȑe#Mە[ծ]bMU2;vQ;wT~~l{!q3m>]F{78묳X{8A> _#Gh۶mQ�Ϭo>eggkwA8vm#ujJ;gTÜOJJr�*:3*cO2fM7_֡\-\w;uY_씁@#? WC}{uTHH ڶcS7;$5sz��|W7wU>2"ܶہgql4tP 6�믿֪UlMja[lZnmqhk@D @+WԲel,ٍS\kg@Tds#H3 =㠶ܧY{zb}i��@ói&hNNm:ulZ+]}e 5kZcxAAfҎ]eH[vދvٶ�83ÄfGV1*:BYF|{fٜA6Cc@ aĮ^)PZZj[5m&AA**.qgC0`3kܹm @ڱcfΜ{̶�8R3ZsfSUffQ7 RqIJ\_w�ԍټ|e9* n )q},v}&e˖N4hm>BU�i˖-.ϷGj߾69 ٶm[ d`~?8[nuFΙՅ;&H5EL)W�9h]t!ZUTT3K.N?BU�2#(5k8_'NT͝Pv* T*P? ~Y={+;Txx3ŸYo7N4'8}Y|jժCCCƉD@ZhEӌb5̋(*���N0kNzfD!E  NM3Ms$*@ G,;M6 #Vok�͌N d[�Rpp9c?��������|reff@3kʙ ;�ԏBܹ�Zqq1a>XZZj[�ڵk�ږ-[3@`*{1'xf#c�n�������BU�������*�������$++KS=l @:|vޭ޽{�mܿ zׯנAl @2T}6말 4n�������o5�~-Z�Zvv.\hk�-??_~Q�UdZ`L}Ƕ 28\[b%P?>XPP`[�������U�������������vRgqM�dY˪Yf@ EEEA>h6 -�ͬj^l и������'6lpv{P?o߮? ݫ�ÇSO@35L˳-�U$++K[l5��P?̇u@3S׬Y,� RT�������U�������|8[hر4q.]l @[n:ԓ&M8}088ض�`�������#U�������||rM>�?�ڎ;�ځt]w?PO >c[�Iiim @>XTTdk�9A>hB�9#T�������?������ve�zܢE uͶ�$3ժYf:3l @2}088Xz-�C~l @o߾ -@zȂ�������#qݶ P̹ÇkΝZvq^^= P m6[hfԴ4[h=f*�7Fɲe˴pBw}b۷+##C]vر,Gdd=d0}m @ڿ~͜9SAAA@w}N-[Vqc*���ssz4|gTjM;vhҥm>cڵ����L��ԳM69 Hؘh ]^8D׍o4F?n&\~ƜO}{uTʹ>@}\�����!T�}JNN. B묉W%Kܱ"[iH(,ڴng>s5v@um~z뭷K�����|r!gxxu>Ӳ ⻶3{8j]mܜݨ#yN}<xSp|̒U>}l @***҆ Կ JKK޽{+$$Ķ*��f>uS333a=5|LuڱkS'X����|@5',P57saԿkmܸ);ޱY@G}dk�郅Q�U2n~p|[gS)}գ{S>ђF PNmf �ul~9rDoh ԏb%�� sBUcPݳS>YFO-œf*���� T� @RRR֭"4bX\/S}\Q/gڴym-ڴ v<#d����LJP��سgҜAee^DsTWGZS#yhE_-Yg[K՗V7lGu8k:�����|bT*88ض�W_}u֩mٶCZHbkˋڝ:~m܎]V: &Mw w,gC}�| (p<T{QTETQ~A;VWfjtT l�?^G}PO{f^^SڹsYYl_u㪾REÇrCtrNݹګ�g}�Zvvq[hEEEN@ GbPG{u.#[;_5?=qb֛Tъ&\5ZI矩f͚eDs]u(7r=ZU\L+C/??9~@'550%pL,..-�U�8ɲVeMڵxM:sHo{zN@ONGS|.;¶VM+6FI����@�p9rĹh\և0[*<����!T-[cǎiRMCwqgP@kڴ8 g�פIYP.(��pR}Gھ}jLd{? TRRK/T;w�����1R�̌p3 PTT�����POM:�,adg9Pv:o*3{5�vd:}0''Ƕ� T= Zn\;pع{e;-ZP͝2�:ދ9#T�$q.Ksh766ֹ����*��' 3lt.Xi8.]8����#T:(11�3p.ߔB(t.6mݻ;e�رcm @k.2�A6<eA ��N?QAAijz#U-_^jפI>vUev3w 4x` >����*�>|XRNl �ZJ_S3>)W}Kt^:_-^ߩ`] G�ÜٵkzR\\4YII�'٤jy_ �|ٳg0#E۶m-^%%blBRjqsg}6*p233SO@3'N@=)**r#Gl �BU��sq.>_OhWrn4p@ ����8~��PLLF唷ثOWueV9VZ}?����A �@G#Fp[w;,WCNx\U۠6**J]tQ����FU�|,uŶ�8^f/֤j mj[|+VJSzfSURR""":㓟;wG@ l٢޽{�d6ڸq:FU*��(##C/־}zppAgtkVN[M m^mܒm4`�9�����'*�ڵK[n-drJ竰жH͚]HE WxX35 Rqqrs tPȱtСԱcGD1;Β�///O}~�TRR?yl֬m7T.Z�hC я~#gi흶bgZ]Z:M߮ܢUkiSZFYj_Sƍs>h' U?#[hG/�*��gUW]I&9k<XݻwWtt&szrg}.2tM3f:ud����p�p jٲu:a޽{u饗wFQAAA����@!T�������?Q��������������BU�>Y~̙ck�m۶mzm @eff駟5�iӦ@+**r`^^m@ ';l @j֭ yf[h&ٰaXN,..-�U�������������BU�>T.]l @hB BCCգG[hM6U޽d[�R&M>b[�eQ�������#Us0@>/ P@E�|l25�n:5�}vM<�um�郇-�U�������������BU�������C. �5 Rdd:wl[�-ZPnl @ gak�ɼ6kLz-�`K�~q������gLlm۶�Znnlbk�-??_7n5�VTT@+--u`IIm@ '_5�fNj˶ ٣gy�9?c 1ĆG-�U�������������BU�������Çu!uɶ�$~վ}ԥK {n�T\\[G@ ̦u088ض*��������|sN}嗶 },}ᇶ ̌w}�ZII m �BU�>1S,Ybk�Lm @eggO?5�狉@0Kp>hF �������~ T�������?IPP4OP_@ccA P<}\pc�������C^�������Tu)%%E7pmH[nuv[l Ё޽{չsg+**Jm۶UԴiS{+�'3g}g[�RQQf̘;S͛7@HU�>Ѯ]l @9rD;v5�'CII;3g,XUV)--Mw566mҷ~?X/>:7ocQZZAZ P���ի5k,-ZHN[f!ZzwҙCg(aP7AE91Ljy��4���h̔wyGK.U~~q^ge%ux Mg%髫 M? F Pmڷo.\U��POqݺu5�=zaƍzg>ogh:/:ĶrjDg겳Ե;\ݰaԚ%�͚5S~�,c`HHmFU���ht_}SjsG˺w髥rXX.oީ�� T0sl[�fc�F�lg9NZ:맞(YkW|;3>�@+..^'˗/״il @G5�uugWlB5nl Th]r`ȑ#�uew@=)((pÇm �BU���4/vf_D w6:YڵԘ;匌 }7N��� *���3{N){+))ՖsжnLmߙikuVC;唔<}��G ��FaժUeԹcmC/쑪>iOcۿ5הgXzs ��*�tY4{رcm 6mڤl<d@W粲9o~ù&-b6*zoWڰiIoخ~*{?�ߙM߮j�d62}044Զ� T8 >�Z۶muy�]+*=rۡC9okȰ6z!>:-5eu%@ v`fl �BU�>9tz7�h۶mN9[{粲hfkڷkeKuΖukkKUwq۷;�STT�bPO̔ŷz� b^}U[:w5lɭ_x:gUt5)e ]jItO<=j[�9a`^^ÁƊP��� ځVQ-ԬYSNߤ_w~y#Uu^>stnVjFzo\>��*���Ç;-[,I:w` ӶԬEp8Wta v6y���F ��lU+W/i붝_XX\��tEi� 77Y*..ζ�$~թS'W ,p6zӳFk[>#=Ȗ2#uN'Xm*J|nW7{"kիm 9Ν;խ[7 Ltd6}ܹm+и��A/3֚eee[]:vL{h#;f[kk_(HcǎU||m���|c-\�ٽO>5�hѢss$߹< J`ѭk'Lvc)*.qUy%�9rDsε5�fF>YR�*�kٲe �#**ʹ<\F5ܶΌd5V~mSy�ߙepE&Z郬 #T��@֮];粰X{e;`W]1ֶ cͲ5I<\FGG+,,)��E ��-22RZr۶u.c6z_ٚ&mK6��hUشiS[hM4ǡ{-euVZnr+WZEftlCNˁ Rhh4O4���� ^vv^{5|׻cOgۚryUe_զLmVǏ���81R��� Yo_(:WV@0K�Tܽ T:���8w}W^y�ZZZfά�]BBƑ#Zz򔔖j7rԳgO ҟg[hEEEN<rm@ 'Ȩy:�'W^^vmk�"""BNMmNdY:uÇw.Mqqm&VGiiKJ�+BU���4W޽7;Tm]vN��� *���?_]tqʋ^S8X J8!-~4 aBDEqnt!Bpޥ WŵkqVDFA*n-ՙLKRt@w=/-<YyذaC�QcxxN@ۖ.]uk׮Xn]ğegb_WOf޲eKlݺ :/7FWWW]T$/`OOO]) ��ׯH">GLJ,+?ƛm=ϝ;w�&)�оr8@9u�oK9x͛19EU?Xb_݋W155OM}53m۶5ox�oOu~~> жwQOQȍ7ʕ+qرݻqܹ8qD]޶{5D]\٣544TW\ǏӧO :G'O6RT�cwشiS^:TyZ۷c݂*�{DT�f͚}ő#GСCcǎÇ={4v,[~'�� Q��~%KW^r+V#��gU^\re M4s^ Fñ<ZW~uhS9800\?5oT����#Ϟ= htܿN@fggΝ;uŋ}vy_zUW�Qȃ… u666gϞж8sLN /Z»,7*����@ ���� ����$8cff&VZUW6T]�m*}U Цr8Γ'Obhh�m*E< ����БG˗ӧqҥ:m+O_xN@[Sϟжx )A֭[u699׮]жzj67h ׯkl,U����DU����QHOOO h[www h[9鸿N@5800P'm]]]5X8���� ����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����$����� *����@ ���� ����t,{)߫p����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/without wrap.png���������������������������0000664�0000000�0000000�00000465527�14332737457�0026543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� ��0���BR���IDATxg`[K5,Y-Y当8q6IHHB=*F[耲WKP,-a迌RBI =<=񼰭X<QϛDG}Gѹ>2u ��������������D��������������mD��������������#@��������������#@��������������#@��������������#@��������������#@��������������#���RFYnwƺ �� gŴX7c1 �����CceܨͫǺ#W3uź���7a&_b %#_ Zb��d}X7c1 �����CKWZX7;)p+|Ϋ��;+ŗO] TnF5n��)MmUn&M�����`N8iyr%&ź#S4ĺ<��&�����������(�������������`(�������������`(�������������`(�������������`(�������������`(�������������`(�������������`(�������������`(�������������`(��a4!VZZڨ.>}ϛ��  Q<lXw�����DhW̽HرcG5{),(Т p8u} ���B(**ɓGu.կ.Ot:ugj*%%%z�@:sGuϟ/����x 2eʨ!<1Kݮ?^ţ֧c>ZtP֝/ht;7b���駟3fh[oAC>X6MO>jkjt'+M7ި8'믿S[oI?8-^X~_q6lؠ뮽VtPڲu-\Z-\Hjlly~٬?JHHd ۇ,'<>A1glx2L:NR]~ez��سeff귿Fn}׺f_K.QzzyAo$CѼsoK^L&}׺ӟDƍSEeJ]{5uWK/};1�����uΝO<Q 袋kZfY3= d裎RVV_릛ns9'PT\TK.D~_/}9]wuJHHЇ~Ac e4ޮ.X۶m Zy睧I'*999l/_[Ƕ~Gr\ACK. Ӭ3uaC9ٺ{?]F,YO.o~>-^H{キ6oެ?y.B|>]sպb/~[u5/>ー{:��0Ѩys3Ԥp8xبSO;M:lmܸQVU{$i[y^x͙3:K曁kzl2;uI'iɲX,;tR*VBB}>y^=dR\\T>W_-1Ծ hͺӖ-[t50 �w17|SO<N:$IRvv.R◿Ԍ34vX\RG}7/R]xt+/7Wn[f;CnA `h�����`)7*+`YVn~tI'l6k˖-:3^~Y+BEEaybHv~N? ~l**,Գ>o$8od0GiĉAZ<iN=4uvvP}Ϗ  ~w}WJ;I_7-szri)UVLiii[n:,oݮtI/#{!=x���09loogwKd+?zg֦VUm.:ijlTmm~=S tԑGjkee!D565^2P_֬Y;n=p�w��|$:ohPmmm^%ǣ͛77v|N{{t /TfV^I YzFr�����FlVssr$I[lQggr'G~544YKFQ---+x"]ss--jjjRss Al}Nb>Hp:;;e`e…:cƨo\IIjkko+R6lPGgg`=~b6b󇮱~ Z��qqq%I?lެSMMM~P_|Qgy=Tzfjjk%I/̙3~Z.A( K]k CґGoA]]]jmm ۇO.]wީoe>:쳕f577c=>PW\q{~?a ��0]]gΜ3<=WzG=_aSO;MA?_1s9GO<,utthݺu׫K5Ւ۷;3"�����WSs>x}[dZu+!!!h'睧zau= sZ|n~ӟ]k֬ٹZ{Q||$Cﲳ:KaLPh}⋕rλ z rtꩧ-jmmUtg(nׯk[N^Wv׿1{|[̮x yy߽C���IeezaXljii~,ժq9hzWr+ݮaň`P||݇xTUUq%)oL]ሞ ��FO4?FL&~q\_>C9N$9#�����E[μDRRjjj"nǤuk l2LA "=whϽEjs1C~_mmmCoO-{o;..N&I^hK/З/\��`:x~̻ァ;q,)n8=g>DP҈��wCgg:{~~ <xNvvv[_4�����@t g^b$Iq&W {H>>s/;sDҰ8_kq!hd��ا~&���|<n�����MUUUދu3Q{cu��������������6���������������������������������������������������������������������������������������������������������֖X7�����`imnuo ��wVkKR2c݌6�[r&ʙu3vKdb �����vk 5qa_dNP}My[ڴF{-> yy]n��@M)fHZjou3FBW/u3��@%ĺ  N54Ǻ_~$M�����`Q8A {xҷyf ow~nϫQ��-UVVe˖ź��������;JMMUy9WsiO�������������0�������������0ˣBov:m?C T4io۠1zNG?C5,$kƨS)2)ɛ!=A I)r$e;S"/ORrǨMEejiSθjPATlRɴ}}zO-?KMu3Ym-M嗪ïB&%fb+!+3I .%zdڔ#buQ8AM ;UUPj+7x|m߲^%SUmfO[MU;MMu(vRe0#ժDO;*-^IY2┒UƩY%\_ 3U_UEi*j7p>Pnt4)xZ=_f\)ٝrr$yd'ȕ!SY|uuv*=wm-,Z NG}kѤ߾MygFYœҬcSR3e5ޑDO,Vy|AJ)V{뻷kM fmג)UWEVSv匙F ƫ/oVQglW;MNIJLN lWѨ"uv+`Z=f+,VnUyھeJ/PMfNJޮej*5DcO6Sd%$yew()5SFY)Pz8[U<I !Y?;30nWLf<yRWfwQMyWo[)T_ս]w.;N2 dv]2e'5xvN ' Na ;3g'{bv) dh4*9m$ٙ:dvNf\t;GT4y촷gUjeNg0+A4;\;c NG|;S&;Eu8fg'o}3~9nvlaS2ٮԠ p3uj*Nv7;^Yl>uGvZ/;^jn'ޮCgJew";Ac4+g7;œomVz^ov 9dX<8;):4woS0qj*}DIjQSSgd1|vLqfQ%,;I^9Ɂ-6%NvmjPةj0;[_ꆙ$eO _cw*S2ٱLiQv&߶7;[k)toבfFY1NG_좝vM5`vj*3.o᳓7V5N0X<59ҳ]}<A=vx|W0瀢IɩY;k'H4`v2drPpvRsHnvzkpvz :8;_6e鈲ӳOܩ7;{jiHvJF=;#Ng ;qJNlu*jmji N$ȎgGv<s@ Y{ؕI2; $f.;= 3;As2=cpyZM6;NAi ΎΎQN0]$ Nfayaeg8j 94`vz%\v;9oWҽ뛝AvLSCme$9#΀vG4og3+eݝFvF{{m16;wdggFvJNˎɜwpvdvQ/ҳ]fgkWJoٜw4]9p="{ʜ0SS1z^/!)E2d25fd4(t/I厛.cIY%g*LV[H7XG)r&))-G R2+gRXl\e˛U8Mi9cd2[/hTFAF|2ř3FfMYEW%OZT+E=r&{d(>#wj .dw(%@fkҲKd6[7VFS2 $A2J+*oV,Nysdw%+EܩJpʕÕ,ٝ.ysd;Q -^bu`PfA8U6kR2 dwȝ'{BܩيOɐ3٫DO=>%RT|br8\dtqjV̽cg72-J)Q&oVaeKpɝ-3YL%${NWBWI 9\%e+=6CL.Q5M&2 d0/ɬ1tֽ]mDsdOLR7[ Iՙ&gr\)<Jf)>!I< =աԬřJ'ɤ ȟ ɤq3[U"w&ȓ$%{dwyJfǧ%{ew&ɝ#)OFvyg*-w&|e0td/TqfRsJd,͞ wz.%ePBWNw=JH*ɛ)3Ydf;;y;0e'_vf'7;F2{kbߑpIFvJ Nx7;{c뛝\ٝ?;02[3&|v҇Nb޼NNwvR{+d'wɩrdvg'5$;)V٪>1NvNvN`ى7PV{<>N(;c<pvLٱ Nb7;I!f(>-wj=c>;N\Cΐ3Lv{Ɏ%d0x 3.0ƁCFvcyvN֠ٱ;CS8AFS\wv,!qtq|Br ;I}Nkvd/;q3pvRΎ#$;kPvz_`0ɗ)ޑ>Ԡ'$뛝84;q!ى(;A,OidlviqFӎd#GbHv<}VrZ7@v&;@vl!S(mf'ovd/;!ce\|;ǽcgNKiYNܾAc";AcwdǞ:`vJeN8(;xf'dVhv,e{G.Oɩ8Ȏ) ;c뛝 7;=egɌJvz͎ݩ|Y*>;yI$;ɡɒ閻w3e>;fsg:Dvav.;@vrΎ7$;ɩrA}~"\v֠tNvWv Ɏ!lvbG ;iIfd'_v3&qGv2Nx|w,+W{Ss7;;N9 o8Օ~(d'gɎ7;ى8;t+ɛ#;$e)>5dv2Ȏ'#섞 >f3[0Დ_&iegǓ<;I=߱Ύ/| ;)Gb8{cNzN96;!ꗝϝ9XCiFLqݟCfgӠ? ad79:}۵ifgvu|$$y4`v N9cfb ʎ?;a${3:0HvC/; A 96;2 ?퓝N+(;pAi'N'])erp {s@N0<`t/;fNVv? df'[Dώ츃cw&B1K|HvCn.NNJغ3]2o dxǼ]pvzO!ߑ1$;'z >4o7;O!v Ü3{!*2/;sy)Qv;ΟFaygDk;͎9$;Ngޮ_vή jλNH6;;ݻn{Nى3gfwYvϟZH Ea3îNTGV/j;m9agg찳0zI V%4;èΜwd"y'F\/Htkg(=olD5sܼhMq*Vh)P- ~��o2-[,���5�����Qjjc Ң [:;ڇ^/-wR->}ϛ������������� NrDmf+-Ot:ugvt������o 믗f$Y,vhBdgG}:c= ������.Wh7+"zNT |LN%K}{y}ޫx@v ������eeZsnC=w߭{'Pח9.N̝#8"j-hYb= ������.q˗?>D�oۺj1FQgI'tv8x<:ӕ+۽G������z!꫕3fH.u֙gJ?<>33Sv|*.*$]{5uHy=p:#:%I7O^m������?hۺ='xEr<4$IfYv%&&ݶjooWWW~9*^4������vNSgu>;VrJ^:9z'uI'iԩ2 9cng?\k˓nW[[[ ������R ;WE='xQS]u>]TwyrssefujjjҦMnWTTb{QɤuI2 'W8A_~$F ������N}}+*٩+ w5ڰqc1~_fYtAr8JNNVss~ӂhTcct{ ������r>Un&En_NWn/bl6]]S_jll$L_ ������K/騣R{{nFIim+%IN< /sUgg~}:t]wG{[˗/$=So^=������vYe5D�z&uJ/ة˕9nFU_]������vo˖-%K^Ы?σ_WWS~N?]&I~_tivĉZbZ566nkΜ9Ï>0�������'o?5n9Q-KJIWmTǕ�������7oݷn8:;;W(6nڤJW(kj裏{!�������v sʏ^SŦ5~NT +7w~E�������FUUU{튊 =n������3>~3_j5F[gz��������������Hr='xMX��������������R5F Jq�������������� "9ces$D57jX��������������ںNmM='xqɩ��������������"LNUsZѮ֦X��������������imWGG{Dωj`)q�������������� "8 CDωrI8S�������������L2"j^g_- ��������������"ؠDωfLfRc=���J #z|Qa:ڛbl��QMu������|K%$r7='x&Uo[q���ֱZzsź)���Zw?𖮿X7������TuDvNX���| uJu#����������;)=wj*T_=ـri�������������rk"zNT \͎8��������������Jpy"zNT oz��������������ȗ&9$�����Bggn񣭱Uuuͣ:6V]jQ}��������{0%"zNT jm'o=q����=7cѩ`հ[W׬ /˨iz͖Qn}!ՍG�������铷VͶ='. pr5qazX����@TTW7_VGG~rznGgg~C6TjѾ5n}]]_U ctͷP~n<|x_:zi߹ZjS@w?*+USۤ?^u}槊3tqs~.>R?+';EGTZK8}Xr]/kjs,MR?Y5Է橺1ЇNu7]]]]ZtE?PbblZ>[8I{^цMUr8õn}hԵW %q;_k*rP㎞Np^ݠ6>g^|s^~kZ9r~}: oO��������E3<IE (_rz���� j^ZI:9ȧLo [VirY|+u+`x|` Z_GG럚8!Wo,Yf}Zutt>WjjR[lu:[Ӫ/7G'/ЄCI}k߹}{ؠ{f~r~zJ~~Z<1L֘|6uuI\vzmIRMM\v|4qBnPo 9Ђ曭֙NREe]kY?^1Y+IReU-ZR?8roM+6[q7}諳K/V=S& ��������_ODysc=����5uMr-r8o^ӊW%˴oҸٚWn+-I2 Aە̽NǓ})/I^ v55J.kTW,IINPNWmm$*ݪںưM֘74ad2o,8>Wԇ,r''fmXc[ǽYstORmmq&jhfnU|E]"&,0`:;zƷS&Id ��������{='x֭kc����fIz/Kt۝/d2*'+EVY6E'櫶I=/=Cfhc'ӝNh:dia'';EWiUTJ~-4G_Kt Ѓkekޑ$=+ ~F].1eu~2VQڇGJO=^~ruuuӋD>y< XT6!Wm}am%W=!Ѡ9`28u*.Τt'J~F;��������\ڶneD1uEAdN/X���|XVuJXc�atvvK&&<v\PU_ߢcOQ/<[Z̒g23ܚ6Pf)jw HꂋU+,{LZ~ҷ]fic%CKܰ0�v/w?X7�����RSSU^^f�AʴlٲX7[ﰳǯ?ͫ9q~0lf^~X����DUwE^i}=诂 z$iB[^H6"Cc[K\NRP񝤠B0 3T(�������TG?D'hrjS~q����د8\RS]nfDV4+��������~Zic#zNTW+-yX��������������Yjkn9Q@Jfvz�������������9tdD^ou蕿z��������������GM='xIY?� ��o_DDOMKUX7��`DzqsU ������[lꂣb~NT ꪶh/z���uZ[[ڛE2-[,M��5�������ؕGvc4LNUɴz��������������HɴəsZP[5ߏ8��������������5WCmUD1%%%]$zҔ7n6i1h*j+(lo5U)g465(`:f`0*9=GfM4'dw&+!9UkӲd4UΎveQ%S\]yfj&T2}j7p5T*gt4)LVQWW<<R|ٝrr$yd;fg'@]J+k2'VRCu 'U 3mmP᤹.WjQf$[[7V]J,1.NILYJHJ#-ݩDOq<\I]Jv2 '^9㦫ResTSI%U<e꫶(o,5U+{4WPvR e4--^ ɩ;R'UMi92J.VG_ܠST]VmfO[֩dVnVjٮu(vRsJd0Hn_f=w$ʞd,6Rd4)%wǩY%\_3U}[v]l}Ǹt/57)x[[zk<|řffOP+EG6{\)=5_]]]J+[2'N9RCu 'QMFL[mU4e꫶)oL5(dZ/Ugg{LJN͒fWBWd;Ibۗ+=ƽ۵A9cJeU[Y%S~Oiv"N]Veg 'ԜI $N^Ov&fS)g'ŧ8s씩.fiݮjv:;8;͍ݩ)95s'iLUkSNfgZ"N`gPRhg'CV{nf 8;2[d.;3aNn^jok ʎl+;;xb٠)s89 2' 8{f18;;khv+g6G);c?ajNS2 j&;D!;y;lם֝Ncg'=\;N[s|Nx%Ύ3L׽]>q8HLVBwe6촵)X|+䗪OvR#ND~NmHvJ.";NrK\v:;IsU=4;Jqvrǎ0ٙdaegn1Q^QȎ] cXC*-^IYJNv';=cw*;c#NCrK{Os@}S횚)mae'p<1;hL-ʟ';-1JN N3I;";FY);[';cjS:C eǕl'#OꓝΎﱱN9IS#iϝN {h pt>qS2~ݹL2;f˓x(d9'N�O8PS}=4dvre=OG-;=s!)807V>pcٮ>OFyG);}3C ;{H;FQNvΎ}ȳSɼd[Tv Οf'5|v ! جyddkzSSaȹ|= 톕$@vdgy섟Ns޾=5;}wUv<)VgG9fgyf'̼] ;:";#Ű^ě;V߲zy,VniȘy^/zȳxn0zH4jF^d <oW~oZr57f.Wki׶L#OFϐe"٬2[+(Tjٝf*ۗDO.o\YJt˝$YE;;VxJ-TjvLshSF`PfA8S٪bmJ,͞ wzNܩY<ry2LNU;M.OWL;IQ#Q_6Rdڔ3VFY2 ((h/Lqfej7Hx<y%#G[I %${IWǧdr$#[K<Yf叓hyMCwLf匕jn.i9w&+ٛ)+ǧDwɩry2ewyN\ J,břĴ2`PFLqJ+ŪbYly3 ds8Iy,9\R|JHN39M 9\%{dw&ɝ+ݩY*nceT{M횚S"զBY Գ]ry3_ӓDOR͔=-wZv"YJ#,_^ 16Ld(-Dq=5#O6Gi9;Jf)!{:iJHN˛!˭,'jOPJFa)`0WP*S\r*l7Hxy2e;N˕ݙDwiJHN+%C1OH'=W6GfN~cOzNd'1(;I6Hv|1fv!IOvr$NY0;!ꗝĐ'g2pvrC:xv҃c$;Ȏo- ?;n_ovew&+ɛ9x3wˎ&oV,8Q۷ȟ0$NJpvR_sXA1g'5LvC<;g'.8;x<~IʎW.O) ;e2e'%4;!qi9᳓ӛaS"5;;'N೽Ov<Aٱ W`IΎQrZv|2f~ovtI NR$NVwv҆kR2 ͎3Lva>; Nqgt˝͎1(;ONe7dvrQvl!1NvHvd?d'GvƐݮ|A옃cdwg3NRq=$;>Ԭb' S<p #;E3&8;Ivv30옭͎;;ŎIpwoW+%OXř-Cd#'$; d'5lvvqz~hv e?Bܛq!Sى dԝNZnovJoovc 8spvlFΫ%(;2pv9?=!1vg`0WꛝTR|}s\ȎCެ⁳cSzX{cۑw ;ف8f'9|v7}$ d')lvzcYmJCwiSHvlI;=Gq7;Ceg�;Nrpv8ȗ9.ot)(;9=W$f'-$;IqNBxd'.ىdS3N뗝x_vRCS8>@=:PvJJKd 1eћ$O}ӛװNjov|Cd'UٮY;f'p}~d Ɏ#N€avcy3? !qfiϝ`0g{~7;I Ɏ7CsS Ii 3;Ɏ%d0$~B3v qզBYq8Ɏg) ;YfNIs=ٱN\q@;g'ufb NkΟNfovzdݛԠNw^N\Hvʎg?,;;Οcv}o_vt? ʎovθ@vƾ+sxO gHvld;;;zie3Dvlq߹$20`v q ONOCPvvdiz@ opvan;섛뛝漇9tf'%xλovsNȼ]9 Nf~)Fvx[;x9}w3"Ȏv;|v҇A3w͎gfHZpȘQ&"YCԋ7m^$!zAEE)^dİ^JRspEJ3zZ >]0i&=,mUjifΐ<7Sy3w ,J,ˣYd}Q[?��L˖-��8�����TǺ@ΥEbKZ&?BkW|ڊM^OToUCmEв E jĉl��������������Bkj+oh=Q-3̲}ljj;]0T�����|7\uU:X1rJKK?~|ӧOy}Bv˓fnѨ5p#zhy$ O.‚-ZPc<?.**;0aBݮ‚~ˇWTM6m؏ۇpgCym6z}oQ3�����~m6[&sDuvv->g }5螻ց}ޫx@?�����233ts>;c׿z{4yQ ~N}٣ڧJIIIQ[1G:hWEC1cЫv?~آ^,5msNv.aoڴizuW΍E#Լssk_E t/nۼsfώ| 7D}¯~˘߯/H . ??u[>>aC7߬a?o} oiiѻC2~����7{GmTWWGD뉋flg;fL*s>m۶-?Oy<uѺv}_�����~.r˾7o~9@駟3fh[oAC>X6MO>)){オyf]szv=z׃WRRrz-Iŋ;І tݵJ~B[nբ U[[]:o6?A 2L%Kt'jk̙=['x&>~}:4T_v^z~c0w\pX,TVV֯O^r;hݺu:ѡl}=Cnٳg㏗ly矯N:)W\~p8ӟL{MԧY3gOW^Z]~JKM>X---A}tfԸqꫯt[oյ\.Xo淿UEEEP:%\Х];O&NTrr$CѼsoK*y^ꢋ/VFFFv n+TCCBb6[oUcC~_h4?~w=Szgp}ۜ /P>O\}.ܮwt@z}õn:K]s2gO> zI~x;> 3kNmny>?TYY֬Y~˗k֭Afdgэ7ܠ .PnP'pϟ%K)]|j]r:4n8UTV+]B];O<Q 袋|47oG,555髯 ?K.D~_/}~。S~p{֭[ue/3n~}ᅲzu%4-ZPqۧ|P%%%z+=t}BC]v*###htM{٥l6Ph4jɒ%z-Zԇϳ6yn�����B+D x8e2 d577h4ݹvuuu+ٌo&�����0ZZZiӦe6oFQgI'p񨱱Qv,YZj4fLm+/ /9s[_~7|3w^W-[?yN>$M<YEwq.]T%JHHP'׫^]]]2L }Gպe4cZ`6oެ.,l{1mٲEW_sM;I󟪮1ӯO{キƎ+W裏~w}Wʰ$SOſ~~9_ׯ̙3鬳ƍeZuܱj2OxI'l6k˖-:3oە.Iedtө~}xGOUVVM4Iv:;;%I/*++%I{_kŋm>I*e/55U˗-{L|N8=z|3[8}\SS[nE֭V$eeei۾tFɕ$*ۭ8Cv[$}nɧүϡﵝnCGQee.駟{ӷ͡P~}p***b^{5v cJk45k,;w\{_Zk׮O9EoTUYa~3yJKKK/_|"v~~:þN93:K2LC3~x)zuO~~8v gӦMr:a}T[[Z~:C+p} W-Զmt=諯 7ܠ:o?ᄐu>~�����mն;\2'h[[T=/UWJǶ^r}]GORON{=3n:IRY_~d����om[jʕa3)vjoogyOjU[[x ]yڰaڪeZՆFp힫7]p:#eX~Rmmmf ZWbbTW_/uuc>IR pxk͚5Iz¹WR~AVZ%SOa>iz7E2Yܐ vMMM ǵkת^N_qqzW?Y<n$)p}t\Oscd1eXdS4gөK/D~ە@RWWThh)Ԧ͛USS#.[|'vCp::;ޗ9:s|M4aŽ?:f -[FWZcCe }k;ݬVk>%׻-KLJ3Bm߾]:?֋/4?1 {wǃl6Y r\ڇ<~54496a4vw?{EPDUUU^ ]~h?nQwSDBpDyn f…:cw_>_>y����wъ_WV}[["ZOT ,y|AJoǟw:ui_B~{ےT]S_O*kC%hڼz�����@oANS79~?..Nw}nM<Y[6o]wީ?aSP__V3йjtv:CV$I/֥\^zI.A( ua>?7zK&Nԍ7ܠ'I.]S1>['OVss?W\߿׬Y kþ[KpN: '?n8nv;d2q>:3uYgi|i^}Uoԙgٯ?̙SO;MtPW^-ϧ[o%XsqnhhP{{N9dY,թNs{Bv9稠@?O5c  ]|Ew|+KhC4vX]~ez~ׯgYg#8"l_~ۭkuz?A4T߀3q:?֟^eeemwڢEtYO9MR>%'ua֯͡p,YRNCپ}N9$I\p232TS]xLUenV魷ݦSIkI.O222twka4vf u}O<SO=U7tΝnkѢE6Fk׮}Ǡ04_?h^ڰa\.N=@v{>~ ~�����Эdնy|;"Z!7//D|B23YcOwjΞ$əꊝZ'��YYY-[+�1j-]TO?̈o2_9"6s9G֯׫x ˥vO C4 +N r.ltbJ=>l64>l6j3111pոpTSS8L&{ws}W\WzztЁ+u[\.ֆP5 :{4[½>giԩ$Я}4r:mP ׇ4iD{챺k9{/dDچ}Eb4>BYVuvv#5Um6Jz7wɸ���{TǺ@#gw&KwefQo]憡%jǗ,++>xuk��@8D�M&O:Y&MVzlOx球+S>x<:ʕzc=؅<L}郞?5ǣR{nw W����<쎘;\mUmY;D�jOP'],sS%I���D��`O�����Q"͛]jmޯ6H1Jti^ W0>c�������������@@q{-V;-EQ5_-XU�������������յ-jzzlM]xl2/On_ޮ!��������������W6uJNˎh=Q-kˏ-������������� pumZ#ZOTYG,WJ �������������յ=,dF^|×z[57f��������������#\][OܢvkDi.hbb�������������_;獋h=Q5kW-�������������_B'W. Zޮ ��������������k;K/h=ˣըj[<\řU[9#��IKKSyyy��0j8����`gj)w^JNRVdW0Ai9%JRy Y<Il匝 OM+{bL 7s?Y >4Ul\鋏Um9DM*@]]̶x +!+/On_I)受Ԙi T9j-:NCOƯ>ӾG\V-m^4jؽɨ.eLlQVDJ,TrZJ#ݩdAESڤ{rM]x|YG\WW][kʾGRW{[ '͕hRvT'$*5DJ.-I2ũp>jooQX]=R5〓uJ;l[=ڴzfz*7ԅ?P}u&9Hm *d=jȅk[UW5_}Oz4y_XT_�����������@sz;>yG$6իC[~v)k*7QksUsCoTKC:mjokhhTMm-jnhTsc6Uks*6}-[_v]m^L]]ڲv:mڶKb=,k jVWgZdHRgGZT/uuVU[֪AVڢ_זoVk~BڶnUknJmMZ}:Ԡ֦uvK]]2YҤjTuZTy*:ZmJuvk7˥.mf:;ƯomT5jijP16řuҫ\XW6wmkW{=ܼƙ9PSXV0q$igp��yʴlٲX7��`p����m9j(ͫǺ~'4ISCM:;:bȅkKH򪥱NaFs4cՔoTMX������������̓o֢ !s'$ź@ԄkrDTlҧ<,%@)1&������������m-3isuGĺy\uU:dUXY-5޼/7NFp|><ODϙ0a  uGa亽CjiX W;ϪbSDj^'] Zuں ������������F+%߲m333umwܡ⢢~G߯#Gh/+3SO?tgDDSg}vvNv.;Ov}m;#4oPFQ^p[YQi  =!jb-\][Ih=Q-kWKZY8Ib3J������������ۆ|17|SO<N:~v~N? ~ỬEzuqI.?@tu;ԕW\!IzkHujʔ)t}bn`>3owݥY3gJhĉJKK vM2Et;ԩXϔ)St5hŋu҉'JnӟdX>fښv6F[ꊈ<˭ҙA֯XW~<5�����������`wpT/,q w[Z[[x,Qk{MMOxb͘1Ccǎʕ+uGKy-SҫNr֭[{Gׯ̙3Zx9h{^~[g'Z駒>H{1|:d6ey={f~ӟk&&^?[/V^^vڢ>fc.?jյΔh=qlTSC6,hYAlIҲ{1�����������QT_v￯O8A8|= :s٩yDA%)##C}/_.Ir&{7~~J~_QG7oo7xCNS^rnV-^HVU~_2 *kת^NS/K+W{DUUUI.@M7l'?TVV:IR[[F:::T[[3f7TUU.1[#6vpumVڈ<[|RO˾ IZ������������|ΰt}d2uܞ4qVXkVJȗ;#O5+믿=Tv:N:䓃~ӥKuםwꑿE~^?7mXa,yݰMx'Gg{N]!mz'tylD^Z;PtZj~5667.SO=zGe|S=DԬb5Typ yy]~.rJfe=Rn���@eeeZlY��0j8����`6m1PGp9/VKkʵvkZK.<-.pCA_t8]r%:4p].|$n'&&חnO>[fY%IB{L_o}(kί Qǹȅk+([ڪa'W3[dO ,�����������YWW[vj=EBpwUTTnqpo񝤰wRw`uM}$W.Z WfOt+lh=Q-hW[Hkoǯ?������������QnnF'tèЃ>8X]/`4kkkmx< 2AS1"������������( nvѸ+v#F_j2F,֠eS �����������`ę2Lnv&"<9յY2#ۯE x65-c3B������������5M hou34oWggGDM#ۯE,b-+uJg!�����������hqyeb "I2z/ յ<kQMEks*7 Zoh������������0Z*7X7ȶuYk"ޯE x6SA 'Q91"������������_~lg]$gY!|#ޯE xM5ZeV'FC�����������Ѳ~ju3|ٿomu3 W6ZTQ᤹A˲'+x. ������������Isu3,6{DMעzr}kA˶]�����������Ykju3f�Qעz$ƠY$ofQ ������������lJb "{wlvgDMIsWR^zF}!h������������0Zjiu3=GG_ܾ\}%zҕI#�����������Q?ۗf`ޱݙf�Qm$^bAh������������0Z}n[c ">rkc jյjp+k Zf'fO�����������`,<J)u3vr<n5 F_~^ye ������������F+_ΎX7Ǻ@Ԅk{k"ޯE x:+b;2������������u~|qz^όү/P {VV>Aӟ$uQ:eʰO ;wNp8s=WWQiO8]g9]oOB='x[B|eqqYb=6������������>t|EGuɤI'ke_v."I҄ tG:(xyp^|ATPPN=uiϛ>۬V>#nP穡bjakj^Zn\Iܠ ������������Fâ.PZnIr=(==]SLѳ<_xA'|8 :JVXx睧ӧk{ uI /虧<CO>DO<vN:$ zPQQ$)>>^O=.~}_xAvZP^ƎkFfYRw1^|uQ:~N<O /PIIIz4v̘~ORggg)~~hڴiA)9\X퀨 W׶_ _HT *7ֻ̑#a�����������hx?b~;;;#hӦM:uYgS:GO>QKK9~Ͽ['C$7JJJ4a.\ե?^E4n8YF:Ccѯy晪$͙=[պ+u9P=A}VK/js_}}=-w_yzWr*ƈ(I>_Bjnn7߬FrZjՐW^ G?wj/>Z'p`u띷Ruձ~QgT'xn_feu۷n ������������Fއ*OF^FQ|ZZZdZeU^^?P?u޹*99Y $uvtf%]dZ٩&YFd0Ԥ.\.uuu/ mڴI[mSSS$Q^WcȾb ں:47lb^Ms>;VΟ͛7K,::;?.}W^Nl~%i{UZ[?y':u'[~)3)! յ:r"ZOT mǯ?,95Gɩ9%������������_\6 xϳJOO׾3gRJze2$IƏG~XUPV|P `4/PCCO/Ai0~:k}ŋe2b =zU\\,ɤ?@uM7msszIytwl6[6L&{:ꨣ4uTui_R4o@ݚ5kdZ+';;:o߮>~hͺ_xNs9*--՛os~sM2EE ޳wv]!\]Pp yy]=cެB<@<27CT[9��)++Ӳeb ��Q�����GL+>xE!?טʪ*x<jljRUUr+VISLQUO ϳ큟W~x<YUdURRZ}7;fVZcWRR:JVcS eەJ9@vUVVʛxlEO_$aD&MҬ3OuuׅxUURSS<))ZaCJ~J'NTMuu`L~SOiҥZnvƍ۷oOyN5m[ap.-r3~m0Q-'(ѓԀ{-$3��= ��`O�����7oVꪶaW-A3c qzj~ab.c?.qܴZX7ap.-rF_fST4y~PƯ>P����������� ڊ&ח+>H}Q1k6Ǐ@Cam$5c4T]yҽb3J������������kW|ϑ.X _򗒤2_ayn}[w+#mE3QRFm^<l/�����������ѐYXZ57ź)1uM7I.~BvmGq}X7r_�Q-`j0ZTܨMO[i FF������������*6}X7#&,Y2-]4x[Yv?�&\][ŦעZgڔ_a�����������hHJɔju3}~֓+f�Q-)%#ZT :mj Z6qC4qCb3J������������uou3߆ה=�&\][c]Mh6`2l-dɳ1"������������5^F)#,]T/uM7ź)'`굾 WfZepT$dZ6m1]?B������������5]RWٝﺱg WfW6^CmA>}+�����������iu3yyж6"<9յ63ZTg2[Ht-0Ms�����������ݑ#1I&%#,X M31EF#?A=G6G;ZTomQM妠e_|Z������������r-nƷւ 4uxMzbݜ!Um]X7pum5"ޯE,7(hY}U2u]?B������������5"Yn._Z}Q=z'#z tƺ;ÖW89�&\]HkQ-kiզ˂^o^،������������F5Xfr?\/R_R/K, [SS ۆUQ{[kDMM!ZTr+tYX7n$i?E �����������7C jnuSv^zI=> s1 oUqa-tliPskQ-kןl8�����������`|;ju3b楗_K/f2O4ƺ@Ԅk~-?AIS*=4C�����������R:�%zb "S%K|BDMYעz炖Ul:FC�����������ϩ:.?~݅kkQ^rZ/>>dYrb0D������������-X7#V|+�&\]HkQ^zo!�����������hŇf`y\_f�QTkscDمςݲ'c0D������������-R c "'&Ǻ@Ԅk͎l+m[x솠eT:�����������yxFb "w6Ǻ@Ԅk{G^ϗ?Ne8Lq ������������Fˁ?|b "V%$yc jյK"ޯE x[֬K_�����������({f`yO?SGGdWmF_]ߦ.7 �����������G9G)=l]_ܬX7pum#ٯE xқjO�����������`jkmu3<Tf�Qo?ZTYyGJU1"������������yG-oVA]_$G;�&\]ۼ#VJfd^ouzR2$I`������������0a4źE|f5ĺ@Ԅk~-WKJҴE-۾uo]a�����������h8%eźE~n5ڦ-:NIעz-Z?y%I6`������������0>{ju3|Tf�QmkQӓ3 ZeڲX������������FIu3LYb jյd*{A˲(xJ ������������aSCMU]_U[KSDMעZgw&)gekW|+>0�����������`4䌝.3).R4iX7pum#ٯE�^[Yp>*OlF ������������b7>.~'joku3 W׶עZg+%#?hٗ}K_ ������������FCJFX7HZX̖X7pum)עZڢڪAJgYh������������0j+}Wl[ΎX7pumU[#ޯ.V _UlZ֯RWgglG ��`X7��`p����p*g44*d )=,6<\9\9ݩJJ͒TjvLqq,TKSWr�mߺ^S=R[}鋎U/5q.ߠRE檭I㦫SX,P3I)>R|w&ɛY8URWrMS[s&SCmJg 8poR@[׭}U:�5TWx|4+o  yJdSjvlRt˕RIRΘi5p5Wk􅪭ܬ}Q՚mY.8Zф9jLkTPVeLhPZYNQBW ^rdOPjL&eLVMfVc/Pm?@m߲VS߬дEǪr*0VlX]EY9c pQmMj08pumePksð+uuulʂ4eQ1.������������DSTfrV5Mlƞ+\][U]]ǐF9NЗ/ ,3LΎ��iٲen��x�����RSSv;K\ erWW =mT,6GвIФGr��������������Wf9d4E=vk-c4D��������������JcJJJ<ZJpy-߬,0@y3 m؍��(--˛�v{gdo̗ҘbWgt;4ftx<%$`ry|7]leOVJf|㕖SeWyr&‰ߢҙn&{׌Oֵ+4ȟhkc~MiCNU5.ׄAS R卓ӝldr+pOH 54pTn^_iІ/jcѦ>՜P/5}ܤsSKSJ-PWg&̔Jpȓ/wzn|2+K]R}T9n6M[t*7COզ? >#Ҷu'|&k܌oS2*$3I)EJN͒˓1:S2EFQ���IDATڤYRS-4SeO5﨟i5jZMYpj*4~ցjkmV23U6SicIWRjYE;Y4QnO2Ǩݯq{-VS}&?B5cUn9,__-8m3>TUn\iU*sZU<u_I]6|yr&{˓ӕ"_xl/N=6i>j-:NNƯ>վG_.՜T/'b&;\5"utUP6K&EYEewYl%Ӕ7FxrMAM'k}꫷ij}e2?ZwOuyھu{*U:k;7;Mҙn()KPe)*T8AE-PP {B){imȽmh"kMN;ҜދfzCP :3| ~NHB 4:Z;Bܹ٩+q sĝH=i]r0Q$\tTsD_pBT!MBBv=;ӻrHehBd&jrېs)wRSDV;=8Bt> i*s SRYϹw{݂rZfzUku㋘nrKs̑;/*w&wo3Eu;Y8r�zNNc.Bu;ɝqJC#k;ܱ;M 8)wb[@ɑȝ}!Q'٬ ɝ)izTi$ w|%ry0it2w">w: 9; -;{9wBj;i9{|T W;C<\ܹ9uNx,"^MۈsgԥZ;ιc@L^!M_c\SϹX}ypհ8s}n)GŹs]E~vܱ!@/Ng_}֘;`ɝ#{T$K-u;|v r3ϢːL9>;Ξ 3t?wRD/N3Xmtl)F ~u;ytצۅ 1r' F iK͝{~ꐛQ Eg5;QC;U;.!wBȦ0K 8^8x;]fu;-#UW�v$VNPXs'vRDaN:J j{:݀'aP(+9dXJ7DDDDWn#".4&ư=98{l7rϧ .eEM? '-NCv)܏s'tgO !d#8(2C#k)PRr+��9)LRBZ䤝Gd4f@R +29m(By\X(-)@Yi1JKPZ\�%y[+`(72 YiP(UHRAvz2ZdJE(UjgBP <d2;`+/GqA1l*ee0jAI~6v s PBP5I?LgPqP݆[-0b6\R2XP\e@Av:d 2ST{ -SOC!'4 3BT"?+2 (̢\X0Tᣒ#33EYݎœt dB^5qUT9SP Bœ �}\^nEia.3JƵBXJa*̃܂*Uc-*53sWq~fjE2;r3a+r\a1TefLEy(Z*^ }\P㚝V9瓡TiZb\6J r`UTVZ9ETRve\ɀL~!wrϧ@ ;b. rGYs ri\k;* r_c)w2˝l)ٰ]tjKkX0UkN,eZ厢^sVNYC=͝Z.c9Hs;KΝÎ|1ɝ;ijΝLl?w�TL@A#W0|r"QS~fmrTK厲vSR B&ȝ˝u;9 r,Tjm5B~fd yʝ"Qk;j̝<T&w(̽'q3er r*57b\94xS!'ܱ r;1W͂ʝNv .wdnrH;%R#Ayyy=NINAMrkY%wL(-)r;vfF)+($w k;JN; Z[1ǔ*gA&w͝ jΝkϝRajʝט;ɵ¹Α;V3LsGYϹS&\Jh{ v;YNy"w|ϝܩKɝd7^yfStT۹WZLܱ9rG!|KXf8+cCQn ;; ȝk28*r'2-4k:~-MT07ãnظ8{_1" c/emz]�8M>]vؿADDT-;šmg3\PzP$.fZTwIk~$Ӓk].ZӇ ʒJwDBs)ڵ+:ؼM$"""""""""+@Xl Gc2}mmCq~Gu벡$v (Jh ]DDDDDDDGYIK/M5:1ј;w.:NNry_RPPsڴi#Y޵kWﲌJ&5nqqqj]D$$$H<hڷ~ղe:f<hz} Fxxx}fcfxu֐d2wk\.GbbGSsMVE߾}k71aA(! ;_y[DD?_8:{1ydoFDDTg%ԁeR;!0ģ_8jAY#H;}!0>6l܈Rϓ'OG9s…?o """7!0b}֭ޝ?.׆EM رcc>*Y^1uZc`uGbΜ9㞒;6cDGcҥ{jk>�BCC%:ǏGͫ}M||<zǩF xXrˆK)=gwZưa<j[]5)ZjvCsQTO߾=coRkTL՝m׷GgozЈL`X4[tIk;jd{Tw>6 ( n�<א}FDDDDDDD^VR2rn~ |}}?zcw:d~GoFDDToߎ۷#** sg}#|?ydt ļy0|p:hZ,;gϞHMMK/O>JVK.źu%&&Ia�CBB`61cL( �> ͚!33i<h"##?qo~J^} �K/h4bO?aذq#nZǸvZg 'N\i\b9c5ksb8}}ńV1|r-.1=d5 rDGc^zaPTxp뭷 b`( Y\bѽ;&Nłfφxqt:|o mZf_ž}cAO?EVǏ?믿/3g'Ddd$ |)dff bp}2n#F@}i&GDD^zE|}Lt�0aAso߾[Qf6Idd-_A93}tfW^y۶mW_}%?,4ӦM gGUpU׮:p�ӫҮG4i~w�7端x:|r8`}x'!`Z1cL8g 8W^yN()88/"T*ۇy >O|jn#μycǎ4x0*ޙ7?Pc6l2k2T*NL&5DfLz f3y5CʜٳQTTGqLbsyB}YX,/]b_|\0nϟsh4YBr9MC&'^9gd`ǎh/`n޽%nV xg1=skkB-71cܹ둜Çx>Z3c:_9J Qn>-[ې%w~st&M�r Z,X�{qU*t:ēOkRQVZ"(ihduuz3ؾVxqgӈȻz(U<fN* 6�jOs' PTT;~ĵ¼ oIDDT{Q,_�p.5|]զ)wߍCh4wu6n܈nGEvТE �-V\޽{y1Ep 2:vZ{gݻw#44AA0 @XXXFÇ\1}Ann.^|E t2 Oqczo"55f͒饗_Fnn.x w�sN^]b֭Zl#G`̘1غmؼk׬;�;1gpX,.1S LipYh4;OM6a=`=o_z ֭m J4=eqNx,jDFlٲwuUV!++ zyyyxw\w�0rlܴ Jb[lm۰⧟ej Z ͚~_h֬j5:t耤$m۰qFKK7ߌK.ŭR8qz:u 2 ۶oGa4qɈEhhKLAAA<e ϟRǷoߎ]wKCCCq`~^zAR{W_}2ݍ]vaWԩSkv>G\fH=g"+sE`X0y\1FDD8 1n.=۱+Cףo߾.k18&1Z!{9s\b.kׯw71\0= qL8BBB?nCPyPo;ur/85ր;wbm$طOT5iLDD_`EHdLj__!'Gu<c}aCa rUf*FL؞ݻEZj*>X�%%%8wLd2̜1ǚ5k#@dm<3s&N&%aժU�8rkśګ6ܰhPVVcHIIAYYf3srhj&M*$cѣaXQȴX,(**dr3???j6c.1w\$%%wulq!Ѷ*=(ѣP(.1Fb6 ;$L:=PjJJJ`XT*]b[Qyy9 KL*k֬ᅬ?�???dgg�fo]vīr j j*M$۶mg>pׯ6pQШ(w WVkƥT7NjXZZfƐr坾vލgfDRRZK~Uau#/q~(,*B~~$q R}`.-EII L&V+v;,KƔ&oRϥ"//:NǃPPP�bԸcn~=|0f͚5D悂`0jĜc \.cU+i3p>#h4k|TTǤfM|||`Z*ຖW,.(Zm6Z-|}}t>rG|ʧ,Z9@K~9Z*PTXmkG�Si՞CL>Uj_[ؤGu33]a`*k"""""""@BPJ7>^;v 3fÏ<~�\~xqǝw"-- "dvDDDf޽;ڴi/��:l>kF#.\ BPlb�Tnd(,,đG1e<.w2jH9&l<h_{-d2223?`ԨQњlذڷǛoݎ͛7#.. ?�6c2m4t& &%&�y$muAλ�?>|8瞊q:R֬Yw}^XCLVwߍSMvyxnۆ^xÆ ÷Kw޸0|p'ODDD`~qKLLӧ#>>{/udW_u~Ȑ!h)q縀�d2Lk߿KݑjjEaaaEؤs"66{/|}}!zg%KsXw׆ 0mT5m#/q?\['Nă<~٥ A Ս3ZE~BCId!ůY||ڵh|w}\�C6v| b/q;~)\=p ֬]+f8kٲ%5 !!!xxzDFFÅ qsrr 320rDGG!?rQjn:/|;wy/b1gx}\kLӎ;SMfK~5`UjwѪeK}5mjDDD%`AԾ?)'<[J"۠X9GYtN�߈ڵk{DDD2eA\OعGwK.!+MLt4x,^رaSZX,y>£=B*(..vHd2j �d21;.f4w{q@2#G駟V~J^mbǤRhG~~~u //ORBXAcIZ- k]'iSbXv-�痘\.Bbu 5g}_KY3.@ƪ'3.RRS~i4X,:W:oc⥗_v$^1wkDMM)zfOct]>:_]'ίڜoI&A9l0uxN~#/?-~$/ EFFA$ߥ C`(]l.mݳcR%uu2d29rGQdB_�%^DQc87o7.S!"j\F\w֬]ц BBB y1jH(JXlZ5j~ш֭[c˖-n ]NJK?x*p5F]ZB41 IvIkm5m]==]uJ""""""+LKU&\Hʕnkeggsy'5ܙ?rΤ<v_ԓj]unK?}kxEPRk+"""""""""""2X&AԾ_Qr^Fht"� UDDDDDDDX(Tjn]Zt2}mW{щ]w:w[~PP _DDDDDDDX&exDDDDDDDDDDt3C&WʤmCK =Nod +!- """"""""""aIk1v^N/| vTPVՠ-"""""""jLy8{bADDDDDDDDDDWtXJKeRvE9]w @ޣeg!̱/"""""""jF4m """""""""+\`h4$tIkk{#=NW#; "��È s3plo7pYP!(vdz:߈f{ ݍ3Gw7h#жun]Bc#c?AԾf{o:݀WRcF5mMvo"""""""F /,vm\f.aLj_[ʱ():}Vo@xlK;Qvbϟ _DDDDDDDEĢ]Xn [CuC&n,_' ݌+^dB{$U9ʤǶDIALEyN7J,(kj�?V4`eK_?fM7Đn|o^ىԓeRڲӒQf*:}R_`?kp5 _DDDDDDDD7[{DDDDDDDDDDtk݆MIk R:^yBAY��;:|[< """""""""+ɽeRL%(/zTwndP*U]5hgQѴ5vS ּS?DƷ9ʤ)*d2 x ȕ AYA7�v_`FDDDDDDDޗv~dADDDDDDDDDDW= ʤɕ d eCm {XѐEDDDDDDD@XlK ADDDDDDDlvv\~./n{\_}).6TQZZBc{F.&r6ߩ95633KyqkL_}eRJK`+xTwnS4067`wQcrv3ƿV �xϱ} >&1wp[WA ۜIigbvc9Řܷ~,Zsw%pc}y+ǟj|QTTZznJ56au۰}W2}m(TGZJK{n}GaW{)DDDDDDDD׵iA\%wĒe;Āq9lƆ Daa)^z}9̥7)<i#�7zuoǞޟG~A _�#,#Z6W{KfXf>"~v,<hAʛ+`ۡQ+1k-ԗlA��)粡k#L&ZV^~a>dm ("#n^9�=ڶƸ1gdcނ_]n]$cקVQm;vOR6:w|Ɗ۱@2"1.1}x#J닐Ww<h|?]R>?NĪ;_C;cnqADྩͣ{K`X46&uMs1? ? %}@ ܼ,Y'4g8~LR` cێad7((43-hii{mvhg o9E(+[@2�ŰXѱCS>?qkAM%MV0 ? YY/ks&";o ri"hsAI0nM56;nZBZz.F]NE산gէ2}mRZQuz<-e !S/"""""""jrҒMDDDDDDDD͎UwbKGѨgi۰iAV}X߸ii9ZqD|vKЫlbSҒ³s`̍=%Ѣy$תͧN4k<>[ �|&sgf}c`6H:Rgxx ̬H;u(}o=x+gf##3E&>[FDq8p(ťUkvb޸.Ƽbfmq1ﶁh:L�i} '˚0- '7mqUL6Vmqv8L<eV;܊R`1\_w``6x o W#>. %%fiK QPXSi�ۏacc7Ġժ1i|\%_|EO>|㑲7&S=[ݎGϢ،& :*f三cLL-#pX*Vށ AfIqnsb\?*7]fߋ,(ZGu<9GPvV:(tzADDDDDDDtl6 �@Q̂}֣SǦX ԣU꜉0��;A.A&Թi]9ر ^CwlG ժͅE&uj(rX,VGy��\�|jըQ9&:zE&L8�Mc0_REwjU4QnUT\ }e}5`+x}X�܆<G5c3@bCPVfu)/ݻ6{;a_3/ A \rED�TJl6 &_ =�@Th.-Cޭ0ߧKUXTdr'6&~~>}oi,]:jCqq)z-Z�?_d2|*LTLb!5Pb2TF V%ZqskRd2ʝ߇A[D|k>TP&=():݀g7"p7vL.i"k$""""""UAV """""""hJ%wܷˆa]ժѳ{ |d ,Z [7as~~�\~{_mecc�ϿބUkvUΝ0c714OCg1ot&nsĆ8w?_†?n7~ĪջXr;;�Z=Zbo{ju{ ~�iB!苗 yxWegp\6%c`ym23]4 +Ķ1ymWߴ|'z�зW+ص'3wko(~5'Dז㽅%^M1IQ]Eëoplsq~ M8vmck5!HK'_RG%U]Uq׻wWd*Cfv|+X6a{Q|8~"e1Iuƻ W/7Hn7&vmb-Xr;�`ӟjG=g?eRQݲظ8G度GPdrG��㈈ڵk{DDD lĮ{)t5{C&JXʡR)}lR)BQA$f,ƜgBQ96` hj-\.lFtl6;f ||ݧjV N#yy?Mh\;SKM1J$5&SYq`WWY*͍άrd2vX,PG?/OvT7n5,?im^;{<nF=CAAA=-ߥ,Eg#b2}mMQug@^ BcZ 4W:(?Iv3.M^Qm6'j`滪=T*&n*2x)�|M\Sa;~TLRZS Ƹje72w�p븾5ΕƭcPqp jU;�gpAԾFQݞvne.]�Ԁ]EDDDDDDD7�1~ꐷBDDDDDDDDu. neI1WW5 -näF/8ưd;(׶k2 s=N_EĢ BՐEDDDDDDD@iq!ғxDDDDDDDDDDt+Bf)AԾފX xY犏ey(h"""""""F@CPg """"""""""k> IksG:_!1oh"""""""RfFa.(. �*o7Cd:ݚETAԾc ː~PQ>|}b.i"""""""BPAv3j{ t EFjM � *Lj_o_rGuuxpL&W4d_Q#afDDDDDDDDM2T[Z2c`/ ʤ 9X-ROuu/!g@.DvVWDDDDDDDDDDDt 6l xR~dweCb[b'es CKDDDDDDtR(Z"""""""""".Z (6tғmYu̔ظtЀ]EDDDDDDĎ ֭yitHhr+*@ffADDDDDDDDTEق2}mGYiGu&hw}(/j$""""""˕Gcx,N(h4lyyDnaLADDDDDDDDH()طgO>Zt^NZ2JP�:wA;gH(v󈈈 Q[EP&m`*ny]64 4 $(IMBNjRvyщ """"""""""G ,Lj_[7! 4ʣxi8/�܌s aDDDDDDD}9HADDDDDDDDDDW).wv_PQuz<P$vZPvr?No#"""""""3EAn]#"MAԾĮW70ԣt^Q~6#(i1-4dQ#jm삟WO999E(--s)/.6c)b" م�*kzznt\23aI[32wiVGYq5""""""""?s voIkK:=N7|ӼQ[t`k5 aM꛽&4o?ݱhW b܆ ~E3?֪oS{P/kw؉4r{ۧ8߇c:[?OG]"|xEXgbv�c֣5ӹ{iI[K|Mi98ta^.X%%:'""""""""DķAneRbw7uB' ׼S?�-?7TQ#v[,kss_Q^n=S!lf joO)Y<=mn3.gGPc惘8/BC [+@2>{3OxO|^f9<,�/ MSŇCqq)nIX_h4*[e{ o�xbbX,ء)n+VnǾɈĔ;c{㽅qÈnx`ۡQ+1k-ɮ=IzNDv8t,Zz<HsHNɬU3üA^~1lA b:v< Z\Uم ¨]ʛ+1ÒeBQ{c鲿=Pm\_?Ysݣz\(Q!\.Èkb`6.1}z\}~lra㶁xؽKqk!4 -7r9'pm?GȈ rK-գnSCd Vy ~AVv!uM2'6q?/4Z2 1.sMsLM8sǦ�gf/bEPL<zr}N>?v<M0n1h{Qjf �Xz1|h'tдVk s#2}mGQZ\Quz<VAّȿÈ4E6Ő;`Mbvnv<pd:z��db`6x{`0h]}~L6s�gf/s9h*Zݻ5wlZ�u1xl4~Ff'f bB*{C.rGtCL {8|,X~O��8t2or I]l&}6t�tF<`(fb=p.1%6#˜zHnoW%ǟӻ W#>. %%fiw@mG滣RQfa.1VT }6˿.1?&6r;^|nM Niw E-pkQ^n{FXq?Trl6;22QXdZ'櫷c̍=\bHhQvAxX VމUkvb޸ 5H:�-DgP6q( �Ꚁ`-�cRڜ[qP ,+6uodHx1tPdf��WuIiù.YL.<H}ma1Piu]w+Q)(kk8�`e aDDDDDDD})'qZzz5P(dXqmUht9_-+6d2A}K9;c'PXhBh?f?3rvl NsQmؘP]ѽksj#4*�QCTb)BQF Ud29a={ L��Ah5j8mbZPaUlX,--Z^q<ZTb)Ub*o2 +VmdžM}׹F&f|ii-~l4Zm.1Kзw+ ~z�fs` b%YPP�)rDAZnsOXVfFtW#`+zF?;ṗ¢GYq/?=ڴi(*.^^_44/(v;nw9%&*(++Z��h5jKR@Zme2NC @HyԁmH>CP&(?Gu :l+ _DDDDDDDŶIOCv'_na� VlCMѱ}SIJoǮ77y 5srLw~g1e=9N&K)3f}Hkb}?֣ꇷ]Uq׻wWd*Cfv|+X6agp\6�QMxf>rVO>V �0oi!\եѥ[Fa߇tnc+.6cg둗W@ɘڵ7K`.hThTzK͖/76Lrc1e�<8&Νq Z5Fў7qLFrp5� 8IIx_ժѳ{ |d ,Z &8�{3\o~hӸ0V0lPGp >7�@jj/X}O㋯�PqWqAq.([֣qoZbcB_x4n}{‚Ekq|?u.l@^?bמ܀\'""""""""r֬co5YP&M3@PyT,6.;j8}q�4tkv3'A&n+wi4lYw&5d*Vr㝷Ԧ%%ZUOl⍗'AQ:>l]fxm_oCR\R,rlv䮍b6X,j]VXXeO2hZ(x.V(jqO"j-\.k[$2]:5vbtfgB!'_/]ua^""""""")v3ad2 t}m {QSGvXA˽iDDDDDDD]M[XZbP75in[le.}F7k|W=b(PT)LSŏ4V61J8\q 7){N㣮qly&Sg'Tƍ>54�b:ʤYϮN7)J|eDDDDDDDu>(~[<͸upQ(0nFRѥS3tۡI:/:MP&G ³-uuZfFA{YӠEDDDDDDDCht:kxM!"""""""""+XӶLj_[Anefg>}t0F Zt-^ݐEDDDDDDD@ֹS_fyCʑؽqLj_1"jGu"''N!t6o7pۣ]2}mGPZ\QuZ?;}6��mN#"""""""8� yit E o7.gS""""""""jOBvjLj_[tb'TWt^Q~6NKPrlwC5~p6[~\(3n]&ڵk{DDDDDDDDDt NDpd<v~ĥ=c:}_PZ]5DPm(ѝ """"""""""eCeRZ]5~Aa]wL?e9ސ}EDDDDDDD?MDƙcn ]B` CvڅJk(nE@@u&4NQ$=||{+,, nQ d0缷BQ0BA@h VV(+-Ftb' s׶; ӑбr �eC}P]QZ\&ZfFXl v#R z iRcdSm6ǶM(BQnu)he rϧY(96`*CT(+5!iKmn rM`/>z?áTk`d@XLsX-elBĴꊢ,ķ논sH2"NQm{ -:Qn $*raPi|_/0ja1J܊6(+-Bt()AӶ=!'-]"/#Bq^bZu�MbFhL"d2 ("*p} ! j=B@P!I<rǵԄ`*G\n(9}sSAanZ_SQ>4�r\mlZ! }lVgp*5qݎѤy{ U(DQǹ S?fG\()EtbG ik۬j\h:C ~ư>LF7GR1%Enوo Yh޹?r �gi(FL.0!2 V BC�<*~0 \DpT3ʭhBsj\%r'b\/*wZbvʝ65Nnǹ̝z̝q ;2!͝YsΝzq;e&DNrrMlS1;rš1I6w4ل܉]M@IAKNhrT15N|^(˪:ʝ0!MwH)RZkEb;!:rG"0)wƵ1-;ICv=QRP1s'0,Jp=_׹Hr'J^sGoSEN[X-e;+%slNŸ^l )Zp=͝LĴft\;!Mq0wPy=Qiީ? W1:] sq=!;iZ;܉1w.>w\[}#B;WNqQ(u!wU\Nb}|PmDJNAV: rZ(/ˣ1NոVNHlK"2w:ENmsGp-IrrM&:NOeGr'r%C\bȝd$vNgK%sh UN;_ 0PxY}mGMAAyܩG椝_g"?+[}GDDDDDDD^͠Ā[?4 ~A?y&timR 2=J[vL.GlnA] W**B#,:A3 g?McX |0F6GШ4ZŴBBd֐刌o\PJ!Q͠Z?£ D`HCgoP8 !ψh!M*>34: 3 DƷL&CD6+T 49TZ�D\a p !�8hu7JGhTs(Uǵ\@dӶLȦm!W( QPiVg1<>�DAop$ a `DCXh0F6GP5mQod}P(Ѵ5*Bc I3ht#G`X4FDߠ0 t cDSG+5Z$BR#"¸dPVJEHTBŸF6ư~pC  FAWRi|x 46P(Ti J>}신|0"CP(#W_c"82j͡Pk*VѬ I|;JǵJFXt"TZ7iAns'0D;iYMr#wt U/:wɝsG+U;jX;AUSAarG;JD4m]ChNhZ#ȝϔN܉s;1!ʝrGY;ʪ.w5N Suy&_aܑBDWwމO;F B`X0wĹӪi D%rm4J>w«r'9w|]r%wnrG[J%"/>V4ҹcG`XtAXS!("Q#w$r(wt"i ϝ�GE7P;! %"&wɝ& u^2w]sGAy;Z \;m zasm4iڮr'zQ|jD%@s8<N;NtAHrG8G5ȝZNrGȝjs'"wBDX;FjrGrGsΝqus;2Qi ȝHGT] r/;-#_ȝȦG:r_"w*s'(<V;ιDr9Z=B$rGȝP7_}6w*)w_ET; DPq$̝Ni&wY&D fSi0RӴ }%ʝXu8w着c]ȝ r')w*kDT!$Yſc%sG^C48g sgDPh#w4>Q#<K(ʊs~u[;!H;5N wd;ƪ9w.H:w.Q1Aa88N8wD;;j-BC] ^;;MÐ۞ ?8AԾ~7"buV8FeGY\n�7pkv37"49NemVbׁ8c$""""""P>KPTAۡԋЊMsIk3gӏH?}u2RaÒweCDDDDDDDS0xtIt)kA{yDDDDDDDDDiq؇݌z5 ʤmX2RyTwn ka?-(SP _DDDDDDD[a6ytH?uȥGѼyso7؜9s0榛��:uU iFk׮߯e 5..Zmߋy:.r~; Be\AAAuC&k׮0.ǤH!I,!!ǭ1k۶Nf.k=,4]tc:cNܹhҤIDDD~|񊷛Qo2KeRچ4ZyTw55 V}nn5`wQc + LD4sHOOwܷo_,\ojǍç|.쾰#"D5ie˗#11ϝa. G{{бcz}TӦMט|:1c0|:K1g\<ܴUӹV1lذ:kkhh(|Asc1sƌZץK|ǘ k=nѣѯocV_xy 4.ǤH!Iw^^ۣ<_߯f=>#oڴyݚX}|}}o#&&qA|VSwlFhhhDDDMfL\&(׶瑚tУuЈuX\EDDDDDDDLRv32tkn4 > 87#9$$dž pۭɧvXDDƱcpϽO>[G~H5&Oݺ7o]V}`xCTjbҥXnD>i6l��?n łw{)))x�}15Cff&1x DFF"** %%%8~z-A* * ?Nx`4⧟zjlظv[c\v3zꅉ'BP`ڴi.1͜1͚5ܹs`>}Z}bP՘?>n{Y?@rr2Fky9bݎu^0axT*<C[1^ǽ݇vԣ{wL8/̞ <t߬ڴng/}V'~VZ ?~_=͛_z 3fSO>H <S+ xn,<о=�#F@}iӦh 8W^ye\.im3{6**}14x0*ޙ7EEx' b&!q[wX|9 8怀�<㈈K/<v\Ǐw�<;w.nz$''cxRw>ڵK0�[n^ `}{t.kk֮q{oGv퐔�'#�6 ֌SOoE~~>{Q<nIl„ ߿?6nXSf̜^|>MVZ!3+ gvY1qDaƌ(++/!55UOcnIF n^Ǣ?Dzz:5e]AAAks ),,ag9O>㏱f|l˚ &>P(kȋs $$f3f΄BUXXf=T*5k???>w.r96n܈oe-<x Lx#"%!tQor% 﫥< ;/Ex瓏bWse"k$""""""U %En]&{jZ]1JɄb �%χ`׌&<ض};�\j*C._߾rо=z=F#q]waƍpQk-Z��ʕ+ѻwo:;H /Xn:vZ{gݻw#44AA0 @XX~W:|\ӧrss/BPsΐdt;7 8UaCK/\<.�`ΝXz5rssq7ԭ[7lG1cu6y3֮YSw�pםwb3aX\b G3gΠ{.1M6 gϞFcqIشisvكoiiix񥗰n:vPTHKKSt�DDFVDlق; YYY.1|ؽgڵk:λVBVVT6kd"((e\1cs }8?\wu0a.][H>R<nRۜwyɵ|�QQQ8pRDC.#,, h4 )S0|�;vļqۤI.1ڥ[qq? deea3`Ϟ=.sOskءÇq7c̘18Tqo _.G?F]k&'DvVR8q>)qs2 wOX( k8sQo3g�S~~>1y9%;bd.!p"?qC qq(((W_:br^f1z:DD԰b[bȭOxRV PP&mWsq>Guy0%y ]DDDDDDD5Z{t8s\|Æ 6u*F 6ѹsg]g�2d{Y/��$vi'acm$ :�p>=G|JByf' ]*7i4a={6RRRPVVٌh4ZyCʻ7=cihX,hjǣ- `2$7Lݎ@L&X,N_T]Uwbr6w\$%%wulNr!Ѷ*=(ѣP(.1FbM6 ;Q%*X,(JO>BĤR*fXCvv6�l6;.صk~Gk.ʠVVR^x`Զm$=, ???;bbZaQfH>TTLbRSNJJJPj2Iq0m6ӫ}sжm[6 ZVoZZl6v\"B[M~:ϵK7F;W5U$"&^3~k={e.jĪQW?&QQXo$9R14NU׹; Cպ]3#R-܂^zUۯ\�]c2Ͱ3NkM PTTK>_ 4ƎŶ[w^˫ǚ7:_dǦv3Fg?XP&#$:x^S'}Bg]i̦䤟v32/Y͸?/ă=;.?W_k֬ApdSD4kDan'!"2t,{^yÆsh4b…Xp! RS())M�8r(L|J :5r$FYX �7t4ï2 0j(Lrz^M6l؀7ހn͛|xݞݻ1F)ӦMCǎa2`2$cy$muAλ�?>|8瞊q:R֬Yw}^XCLVwߍSMvyxnۆ^xÆ ÷Kw޸0|p'ODDD`~.**jŤnZFAA SyOG||<^t j>Jⱽq(e˖x~,駟v?`i%-5nVqK999!!!xW�Zvl{ヒk؁Evqn\<x0fU>Xx]p$"nxZʂr,j3N k0��{14D^n5k8 ObTL5d,6n q8�nmNRR �ڵ9|pc#8!2 3gf͚K>_wy#rN'C,118Q$FMv3ꍩ0geRcdڲظ8GAhtsu6,}Q�I?FDDD֮];߿ ""VPx :5_y)t5.&]]Z$4Eq gelvhDD$_ݻlr XVZzX,yܶOG3Xv3Q\\әNd?"2 >w+m Fݟ.`p}:(((sq|վ_R9T1T*h4A; //ORBnsRz=g}￿R1&*HHHk-[f4nuŹ5 :d24M{]枻p^3jڎSΝCa=8rQ.׷y.b.MOcڬ5K]'kӆKkc(K=_i4l6X,Gx-8t ƏǼqً[BCCf \w*:@gy;zsLj_cAFZ]Z=Q��#"""O<""jz?4An ]n~|C2^7tHJJvS.+!!!vl!`ԨQ~ш&#Xnåtwc޽غq MquXvG=p5Fq 6-{ۡ C@0z?dp"-0,Y(+fsE@@uh1 gtY(φT!""" ?Q DNrtBTz!==Nm)));]=ZL&l۾@;ws qqnz&򢆼%Qm]-eNEIq~Lj_UCǡ07ã~eCr3]tפY;4iK]GDDDDDDDR#NT;]&] h^yGsIH:Lj_۱]PQuOeg#; @ L{@DDDDDDDDt*郍!4Zt((׺;A]J q>AYv=Ѵ]φ/"""""""jΟŮߗzthީ@DDDDDDDDtGTB{o7ޤ%ġmkeRΞ؇| xZaewoݛE{t8sd@DDDDDDDDt*-)FFqo7D%v@ ʤE7Vg:݀Wf6!7󬠬UhmpC5Y環n]&b""""""""+JE@hQoށOlזyefGu<J QPv_p_nAv32yM """"""""b[Pfԛ=c$AԾ6JڣuP[ełG�v_`FDDDDDDDޗ~|񲷛A @DDDDDDDDtŒ+hunF9g )(VVZ [գtd2e›]C5uxpBM """"""""bfv3MbosIkLQuO.W@:�;7]INOxt(3""""""""+njv3ݛqr_2}mJ2£tR|Aپ-?7hgQo¯e7 M """"""""b)*݌z߮7"–:ʤZQr^Z1\Pֺ5h㚆/"""""""j2SNb{tN=&]R{&v72}mp5Z xfS D,=sАEDDDDDDD@pdz͠DdB;o7芥#8Qo[tB7 ʤeTQuOEDւ}бOC59S\:IvXH=uͨ7'c߫eR"VQu0g>no"""""""F $v32!nK]݌z -,(vyTwn3ѬC_AYTjޱz8uA=&]pbo7d=5�Gu ,A:؀EDDDDDDD!0 xtvmVwV͚5C˖-3F#6M<}*s=0+~ۣGVZO`0o߾~}MF#xqL8QP͵D˘/^&[n.txqDGGK'njAddW>{=^-Z@h4"i17R.<ͿX;uӧ1HܵRb Fppp8ҹS'x .]cLz7lذ_5UWG~euq~k-Z\{Ǐ722wBBB\]: qh}Pt:ZThǿj"u _k}ȑy̘Z*gu.]ahmQom%wԾ#CavGu<{,$*!Q _DDDDDDDmn]&zW^1BK!CիhЧOz雯F׮ugŒ3ꥯ. <!_O.mӦz:qםwY[#""0em߯Z>i><otMs]ϵ޻Gt. v튎;VK%5NbݺuCxxx\re! >ܫo։ܹxWݾ]vIb35q>_lfng|)1=x?b/ :6k¥_uνX'￿{sMP(б#(so7x wqƌc5  "" Ŭ')w}m۶Ƀ `umx7<$u _գ<߿qA|V"ѕ./3ͨ2}2}m^VeCsϟŎKDeլ=Ғxg|roͫSn.W_E6mr,̘1=w\.dž֭[*f�@&aMxMn </�'t|ig!993g̀ZCxڷlFaX��o%%%0o<zAaчlތ7|s_?,_^z-A F�k1}hYHNN}/9LGByy9/^޽{ b<e ϛ=z)))/:W\#G[oƎf#>ɓ' b믡!pԩquǣOϘӧO㣏>#O><~} l+ॗ^Mc`_ 3y{İ|rhj`>@tTc~`_~gfӧkxܲ1-X�/T|!ܹsgr|(50er9sXѢEq{ɧbӗmڵ+qǸ>c8rh:|p|_cܹ#%%7fΘ\tl۾]0׀dVĒ%KcA=`曗4n}m!жm[4̽on٢]tE_h0Lxӊx'0j'-BDD| A._ <,}7PZZ17TjJb, tL&|! pA>pP(//Gvv6[L> {K/2܍x & cǍsYkFdd$9j? ,l\㸈YV 8(((\ca0jJG5AL|\x\.|&&O߳gO̜16 ݮ Zk݋g{e-G1g6;_II;Vi9xska!ʫqk!Cm~Ws/??:uPuuÇ㮻Jr_~ꩊs\J&Q*ym޻"..eee?>~aAL6m{_-6}5nfM$qΝx!q<.1UwuF-T{:Xj2 &8%ȟ{VfnT|yUuW<h`ݜ3.sM8]} kzr 7nmԩ`/^ B^qM|Nvwx0%%%t.oQ7mk?l6^36 O>[5nff%[vvW\ ݎ: 44<`y:sF~ OSYfDtM+')smk&M'|_O_;\1ܜ8a#>XqǪ5Cuh4T8s+~ Vā0{uq5^;cҋ/BTjH1?qBp_{)x.렘x YP*(,*]枧G}}RD\.\/[\4f lk\qt:NDâѮH͛nJ GPx42SN8ʤXE]w E'( _gg6#qo7.>zA>'66-qر Eǎ鐕#Gb֭hժcCV޽Q^^"ᅭwp"�T*:}}9nz\=p V+>ci |t:hj({YXVXV4ۤI{\' w}7I<]˖-syO>}W^}%%.1MnL&yE/oߎ]v#FpiԩERRpAڵV�oO>%FR/Νĉ]b[Պ~;N ł#GbG8mTl6deeQ\kZ5�_29-cܹs.1lٲB`` FP2vc=ދ"hZ�F8a˸ctQ<sT`0ؼe ѣGc͚58r(_N6I=˹;vob9;�j8t�*v;ƍsHεIIO0|pߙ7O0.uL&'OB̘9Yf-_:t#`2pu&IlwUd226moVn֭#GO>Fٳ;?1 �Rp1AբcǍC۶m{5x7jtf}غu+n;l2ݍfL&�TvWŔł!!!:eM$V+q…8<F l۶ RSѡC�µ<//m=w=nz%~~HMMB#G$nmyiZ!Go#GT0aك5kb(_5ӵ͛gd2 ܝsi۶-+s|ϻĨjaXSO!11%x#\xRc1k,Lە8_UuWRsM<n#^Cz聻NEQa!�ɵݙs;?LqxwkUW_}cǎaرnq/uj㈑#kEEE.sO̓u.;;7v,ztտvk\svJHH^URstʧwY#TL5SsnYYcMZ#Zl?(ɝ\\NX19_ǩ6(^k\.q㠐.|obΝغmNr]/^=Qjn[UNil]Qo ,(!("֣t^ֹ$la9(i"""""""F@" 4++M ky _W%d2nXf ϜfL&C$IIJIq1,]0qDL8P*8^_Vy8!FѠbAVv6� 00((,t+Ns3g\;{ddd'D-|/+c dÇ믿:ʝ7@>H-p9?R\.ǩSPZZ F\.ǡC~zlt:T5sRRK:ի][-e2(U _<i4?QRR,A[l#55/wit2~~~nǭdJZAaa!J%_:n6[yP^/U7|Mahݺ@V 6f̙3slFnNT*g8ϵK7Z;Tl2T}NLfm_vL0Ʃ\1 'Of8%AOvV`[,C&!<<%Ʃ:'e0ܮ* iii())AZZ\wuWGMRksLEEEl>q:Gx2~1Ն'+qmފm|z#g6I;J긻qrnt*jL&bq9Wymjswh"�^ǹT8yMpT~[ܭ'L@aQˡP(\brw &`qk4l6 )o���IDAT)I22Nw;t),4TpwQsUjmL&={$"nJgV\BŤV^^Zoɘsu|<הJ%r9srPVVVXUߥT5 w{+:n: 6 ZE3Ӿ}b O<DE9[ęxn:Ӯݻ%=uS* p=: RkuB.6v2x7W+VhK]#^ݱ(..M.|%&mrs|8M{.FJ1\P&m u.ɓv^hLs ::EHDDDDDDDrK(j{r˾˾={fòᅦL&þ}=r( 1`� 2 sfFΝxUVcݘ~ܩj5 pQozBp/qqxg?ŋD� ''_-^z ͛7\.G^^dLgϝã<Yf?++  iƍPT~ƱGѶ];|�*׻wjx!|Xldry1V}8gϞ8p ZjoM4%Ku_Exx8 nݻ?v8Z-fت٘R_߾d B?,_.x,^ǔ)Sp͆ӧu}q(iرx駡j/Q(زe n&tYrCͷK۩ӧVҥvisRR4 |-bѫW/HLDHpd]Ə}|x'Ym?:ϵ|{G{nɘڥ�8WU6nX̙=ۥ5Cʁŋj)--Ųw}݇( Ǘ& -]ѣG#55bcc1Ij]˗#??_|KL5SMd2Rϝsf^G%Kp=Eqi߾=w&r9~W;v rڵ9&VlxuK=_vSg<JMKVEǎ㼖7o\2-vsw8@Ν_'qKKnmY<ǣk׮P(ط?F\w&v'�ք;vb5/VZZ.; 9� AI(**²/tGd} \|\?E|%~ �XRkx1I 5$)) _~%moM6ݞ{n;dIIcW_~@۶m]W�}hӦ 6H\KڥTR^od~2t:>}VکUWaĈ0 ;J`.-uotΧqq.kxݔ6hMnw+qv Fbb"z)B?fJJrs URE|<"d՜WkHտUt>>ؼy%�@t"R1:ϺwrJ2߾}5R ʤ 0Bc{T,6.VWLBr녿lVqԓ߈ڵk{DDD3!*#m[e`+euuYY0LHHHs琝cHND -=1())AqI :Τꏉv|II nv⫯ƾ}ЪU+ԩS�:l6Ky,+;ˀ\Z#Gh4I&8q:1ѵQh4Yf8y$]beu ܕ*+;>>>CrrcSS9zcU;mڴR޽{1DG#+;Fq\1U_Vcݎcccxs1 áC|iӦ0 ѣ6TehDtt4r}Ryswݻ2.%%.1:@-i|:'&Cѽ;vكW^yEq3 ls|:%&:!8|0� 11&c.9<׊KJZ}9>J՝dڥ[II F=T\%m3)).kXUWnۨ0x`yxgGUs1$$8|#/7Wr=Zy] FBBFヒcǎ99ڌ�A.9z-[p5(5u:cn瘪WKu:RW:N0nRuXv;*kTsMոf]i֌Iovƪ58v9:dBQq1 z}!@5jEqQΤ 66tjm)FX 5n5:-Z@vVlvdLι?k|wm|:uJ0�l4"r9z%&뿓w^rUvq9X#?9u1b``pY˝c�r 7@aРA;w.o6K[UYYn]6m@RI|_5ת@� $q/u1JqSjyJj'q###1t=�\ڷo\={8�s8YVhp^#^{5)qskx_Gݵx=p&69&(歪::R</_ѢE=gRRRkgRRk%ck5Fjj.^Pddd\r=DuR٬-  v("$8fg}m rZ]"E!™56.7Qc87o7. JG{s1X|rYѣ8x3g7~[&Kխ[7L<'NĻ˻@\!b?ħ}��ڷk!C7vS(<_yG}E::t?4 nN0ÆŚkm]1|p\ k֬vs�pw~=W x]d2drld$$|‘/GԾQ^Žuz׭n'W@Rb.uE �H9{=HDDDt~!MDDWC@0"? Lye>zz;DDDDDDDq5F62hCƈXB|xLj_Jbٻ}ozBz.EAXP˱ػ{XQ'( "" PBze@&dtyso&k޵feokuU>YcgoQVRj����]f@3cW�����k kvҒg̎`\=gk;vEDwolGسC}ܘk�����RfČ[^_l3F3?h������rww׶0Xa$ݕ+uTgiOA 7PW}96Qgkjs�����@声핼iQ |}uj �����MW_~ο<%y pc4`Go6dڰ̢ۡIۣU?fG)(< �����(Own2;4;�����1M1@ Ҁ3͎` rҕgq6Vr5CZȳ }ەo?�����4W~h&~#�������-Vn>m1L@hkjP{ kmmJS V1qjט�����Lm_h&q������?$Rnvs E{VjW4vhoP:iݶN{k�����MH ov 4k}mv������*ж5j:)ߠPvh^q^v'4Ԣ Pt^����� دK3;O3;������b+@c4IJZfmwJe5C<}ԦCsڹ\/�����ESq|������0Ovl0;Fiݡ2P֦C<}ۡ xe%EطPw:ݘ�����Z1L������@嫰͎`l]u5leۮ"vhCjI1 �����4m;hĴ̎f"c6#�������-VyY2D Pq3 5[}mmim(WQC')~\/�����%oO5; VfG������&k KXhO֠qy),,_Ç|m۶ >4}n 6;FٵqV3ޱV_[Q~*ۡ x..r2,FkӘ�����Vqp}f@3QV\`v�����=[sO'N+.\=wǯ`4|GѴ>n9L6Mm۶w9۷]VsG 24/U*/+6;F{ufK..vȠVIVY ~cfHV< �����4;7i۳͎fINfG������ҨQt-Y7nÏ<7xCmUUV6M<YwߩDw^{UEFFPLŢ. 2DUZh^z%CÍk ~֭[K˒`x~~t=]6nܨﻯ篿Zo^Pg޾>>JXqFuz'խ[7/7߬Y.ZȈǝ$=Zm۶=c_+WGU^^$n2{~䑚9'%%o=cs=g tRGubm[PfvbJeeښEh"����@Kۍ+ܽ|̎������%OOOUTTλRΝu\W]uF ^|Q7mիkV;|k׮TXX(OOO<XW]} Q'q'MwyG̜k 4u:?uhUVVo뚫Vuu23353uѬYΝ;䧀:c̹}Ν;ɓ&[4y\'Cuu۷O\p t$%ǡ>ԞC9wY!!!9|Wf�]\ivөH ?jCV_[EYUUv+๸?Pv(rZ�����Z$-YcN3;�����p UUVJ+YV99ʖeZ\:RG?쬂UTT+6lܨ<y{{yW_ 7ܠ .@qqqVzz6lؠrEDDD7oVQ  ժ͛7kڒ={:vڥRyxxpNG߇s͛ksx)))I(WqA1 ˕yf?P.nv+U*7sϟϟu�����vԈiיDXfG������ȍ5o<EGG>Rjj$ikRzw5f{O>>>+u%y|Ν*"KJJkԩZa&q.5KK-^} 5|EFFjԨQ8h>3Gnnn5jb[Xsޒ5Jƍi<<Dۚann�O4p>úQs=q)++>B0B[Dw~7lfWEY]c;E{c h=iϟw nXO�� ڰa1��8&7wy '(h:j�����мx{{+4$DYYjN[6mh*..$Ek'ooomIJR.]j3eEkW3^FfBC ֘1cSOmjNRtt|}}i&ύSvvvU/<"B*..VHHbbbԡX_}zKN`:w|عS!!!TvZsVfVBCBTT\|9=///<v{߇={lo111JNNVfff9ߥy*u$5{* Gn*Ϯk?|XL9i{=C|;6Լ%Iŵ���4u:)͎f`¥kq�����6sL6~~\@}ٿ/Y;^P_+,.-82Z{?2{* "`?~\SֺC夥0c:2bK -�����-Jn>[2h&\�����'O?T~1Nq~74;F9{Ӓ 5[}mqUVRhW#dj =i϶uh�����\!6tc3z������f=z$ig8!ߠ0u3 &muf^mTimPA/[tSn^����� (ɨz������65Km6}3]"?~ۭ[o5;>P#? &@R2ZEk6tD5CoA_kLƾ퍹V�����RT�HN2; O?s1������ռE5~jh"?܌sԦ}bcc 5QS&j/AVpD2睊k[dsۡW h?\/�����(u&c'͎������`oέi;|Z夥hOdg(cV_[q+(]c;/;uV$gdPA\/�����xxy+M{c|#fG�������ZV22c4o:uV$vж4buGp#.�����h Jjv 4_x������Lw[ -cv-Uc4jFLNm;5CҒj×1 �����4n 4; ~������Me^jv@]4̎`<<`k[JKjmk gս1 �����4UU(+5;w������M»gv@v%j5;FTeefm¥Ul]c;/u&{{I�����ĕiv�����&+ wפ+2;Fޞԝס xq:{ rUU7����Uf@3l����� q<ὓ xήnrs4l~ɽ4 xi˧j޾m�����M@eE͎f0;�����݆3&Nԍ7ܠ|sۭ=pѝ5v9(-VIAfOWZ6vh^X1C8?/����h=h&~v#������e:sP]{?~BBB4쳏;GyNg{項ܻCK~ _~ᆚӮQXvd1}C/$R~!\�����)(-)Tf@31͎������`O.ЦDUTTD̝+Iz5vG7ڽ[MwhZ[hK͎`sbkcNMklWG hC&j/r����@s6wZ͎������`W~/ZȀM9i{9fh0~ R-GlJS?.wr3RnwZX kӱ �����(/[Wȩך������hZ)fh0oFCV_ۺ)7#ծڀ ݉Jݝؘ������ߠ0u3h&V������+?+Mdv 5[}mq?$ܮڀWj:RNs�����@u@+~4;#6;������bcfh0{whe떪07ˮڀ:w'ݛj�����M@`X yfG�������Zl%oYevU]5lEu/o@vh^iQRwm2:=5r���� '-E1Lbv������ P͎`ؠjRwmRiQ]c;[j[U[1 �����4c5tf@3oz#�������-VYI24;Fiۥjk m^^vȠeJ5Ժ >]f׍`�����|{뷯^1;6̎�������Xn ievinYckJUyY]c;ͽ=p/1 �����4]o9JxkQ d������h*Ukv>~Z߾_MV__\ۡ xU,/3&IZF[0�����`5G̎f������@"Wwc4mk~K 5[}mekl6jUPZ˗V�����hվ;O3; 'g'#�������-]~#զ}}RMV_[ZZۡ x.r0rQS%Ik~����̎f(������@U]Ubc4ki? 5[}m>rvΡ x*26Ш�����=j~|Qmmv������rqsO@1Ll!Ӳoߨk+ReE]c;;2jq+n\/�����dۡs_7;mfG���'Cjf����R5;FI^f-0=ۡ x%JktۚEڶfQc�����h[hD.}̎���NbguN?tc����Mv2;Fi׹zbkK߻M%v[zMڻumM}ϡMh5�����&Iۣ uK͎���O?D>>>rrrUW_ki*))M7߬(bQuuVuV1E~ PRRnv}~t㍆��YiaXov&eakkӡJ rTR[zlNPK޼JɛW5�����V)~ ݇L0;��h\]]j߾} 43+##C^r$jjٺmuV-YTGEfO;wTΝ"IZr9\r)6���NV> &":=P׶;Oe5CN}F)-9ֶcOIҖ~i5�����&J?_4;��hœk.C...ڱc)IrrrҚk9F^~JKJ`hڼy$C˖-Sqq<��� s2}bc4̽;TfkgJ =Cu@+MݽE4�����caf@31dҥfG���̀$iz-pqqgsMFҸq㔕%IZ%阏���'+u;Rv]jWvcuTv3/:.Iھvic��I->>^6l0;��믠h 'ڦ248��Ek̬,XYYYٳrsrg$k.ڒdkB[){($$D111JNNVfffkN��&^xvgO`KW.4;Ks_2S͞J oSlzڸ|lm\הE����� Pn4^Nn}ؕf���M&Cq~zs|'p2Fq;���?L-4p54k[5CoA&VCϼP _pxc�����hKh&^#�������-VZ;fh0%9gkz ikmس]}QsURۈ�����WOGČ[^S 駝|S_}�����VX5̎`<}jkWg]c;/"^x-wOF\.�����TUV(h&>yxp]wժU+yzz*bQ5zh%X, ԴSe{IW\_;='IzKxu]H/4sLyyy)bфOW֭`hРAѣ,uIÇWŢАM2E u%>$vz$I}=W_yE7t$igYE&MRDD,r)U v)EtJX榋fҜ>$tzЃ$饗^m*It%Y LА%X,1|:uE=zР`u:ӕ`K3gԗ_|!IOo$?.Iz;$}+$IM@%X,=zڷoEzR~`(];7N |}}u9蛯$]s5z%I}~)I3O?[;蚫$s9SŢc***J ޽{+bQllN=y дiwIJ{;=w$Io$I_}?駝6m(bE;vԈ#`($$Dgu,999K/G~xtmz%IzplIkoiͺB+bgH%X,2d`k.:t,kIJXꪋ.H}$n+$#<"Izu-ܫK.X...JXtg*44T Ν;+bQ5x %X,jժ&LE Knzkx@?$>5EFR`gϞ߿,kNǏW"w$I^{~-Iҽܣ|R3讻$;$IΝ3f_ ƌh%X,ۧE111sJXӧo$]uzw%Iwy}YIғO>=xз|S]{$믾y'ooo%X,:mxmV  >O:tȑ#`(88Xg},I]}nv }Tx@kn$}>g.yxx(bĉժU+%X,<xuE]tѰaÔ`(,,LgNE...'Hnf%I<~aI^~Y|$O>_,WWW%X,<y”`hСҥ,uMCVŢHM8Q <<<t9s$I7p^;y={{QIҋ/oMч.$%X,:E#GTCx 0@ ڶmN;M uy4_wuz7%I{| Is>S޻+[M>]JXtꩧ*&&F 飾}*bQttƎs3f۹s%IW_u}U).=C=S{$Io=yuG Əv)bQիgσ5j(%X, Գ>rr};C/<$3c^낙3k&LPCA{JXԹs#PM9̚%\O>Xt-=$Iz͇}.袚cIECUظ82dSD8tuww׬ /4c_{UI҃g_4c/R999)bYS(1vuG <tmӦ{5ӛoq{}c$ӕӦ)ih*bQ޽c4nX%X,9眣|s{Նc3O?-Iztcok9ƞ{9UŢqw^bc뜳ck?sxxV{jsm@9[K ll}Yfc'q1kW =|Ico&9cK/ß?{v[{w :tmݺ&<yzzl__sCxV[m(9[cskٮ暚c=c<g}=|6wΙ1pVs}Sc4}ڴcls'}|9[19ۀs>Os.9gj>19ĉsX9ۡc.袚c7l<g}=9[19[n|۪U+M<tqs<19ȑs>Om۶5w^9u^{19sX9cfL^sꪫlO>{sVs}ֿz>vQقꞳ>~^8|csl&ٺ<uxV{5[nxV[ lsHq]^x19ۋ/9g9>g1Bc59[6my]7wᜭ1p6m-_qs4E Wdpe 8%oRj^x"5StLaIʚR;64��aX�/8Bm;?5Ob9y5fif�����PxxiCoz=ֶ#sZs*Z:WGmݾ;OUu\�����h>$'''cxsvޭ 6hΡ.�������h;5͎ѠYlݾ3|P<Gwl]{jnruso�����MBuUJ̎f⒇>2;������bEvcvSUYrն~|1صٮڀYcοP+-.TQ�����'?7wgO^kv������JO٦_>{ [޾1ߢv[fۡ߼fE;�����-SEYrG�����?v5S2oIϡmګ׈)飧̞J(-Wfm7ľ9/UM/>[SLm̵�����MvRUfGA30fG������-T!7ھ+^MSXb6٩cfO(8Rwnk<RmXfQzz[ jA1 i%�����f+-͎fbw������h#ڪ̎` (:[}mQNvh^`Xk6PػU{�����N>h&}������@ K3;F o6zjMQ`Xkvh^~V6Pk]b7z����&0'S,6;2;������bfh0YJ޼P׶yOJkl6cmkwF\.�����D f@3fG������hVWUUvLVc~κax|FOCj9gozzz֭߭F= scRc4ա}m{ o`]c; [I }`#.�����h r3ko̎f뀱fG������hVKKtC?7]dJ~T*=\]}u$\=<Gϼ|\S^oxo/;Pk}W'?̋Ҳ }o:p 3/PQ]ެ--4l%'Rq}M ֱݴ{�����@NO1; W�����|OьS֚2]u8}2MIdYbuɬZz J5k0^ZZwҒ5e�I]NцM{ӯuaSf?B4&M诅$):*0UիGfLRS1,N ?߮к:a_=;umǞ+gg'M_tAkRaQfrrtmwoך%nޫ,Q`nq_B R]<s-X-[+0G=yӇǿNCW)7HÆĩg(-^SkzoeZ#/_~󇖯HsjcY= J{hҢjD.#὚ֱTRz+)s.CKSեߩf�����dvkDfG������hvj}hvnUUUkM ^A={Dk JMVnnSO:c.^TYYJK+$ܗskh߳V˹q<~cdžx5X%%咤mS|Ez7~TYY\ԣk.!k&H]5rxzۻ-wMWdDmح*m۞gXy? D靏iwJΙ:D}zhcΡB^zٗJSQ=TVVه{@e#JUUU=v:`Jآ矺D6p9JҊ[uSug;3X^ mj$њE_j2RyI]c; x4Wؘk�����vw4fGA3uu�����, K.gUTTJF뮷[>cUQQ  ItRH$ghIS1/ݨ _eh풤n@#st+IJٓ)g''mڹ+]t0^uxŊڮ&RrqqVeURﻹWz[ii]RIR^1rv>yEԿ⺶$7|y{{]zTQq/ҷ + :oPUZe<+Owj;Jnn[9W7z<:*ΕCyY踁js_kTN^v*+TRg~z?1 �����4i[~�����hwҦĽO5~L/Iic{Ӥ]Cus7pT]mգԣ6H\\~-٨_^iiژ?M?^ߒA:jd=5ㅄѧ$=r6&蹗ԥs/髹+$QCCsy"w \'''=?ՂjtCiD sj pz}2"^E9VhͺO48*7HA Ж{5/ 宰P?yڱ+Mla86]޾fhH;7nd(OUvsOH=Gm^ڼ#/|ps׷��� 6�cjݡ;_߿~Q ?S�����h ^4QyF+J:9>TA5ryy{ryzYL:ؐa)n_pyjkUUղZruuee5_9g '6_=KcTnE_XS7pn_z[:9IN ~+�����L3Q~h&̎������РNdUi1unujO?yӘO$)$OcG4ѯO!~O43lZUm=y/uoھvfI:tVWUP[۷T�����骾мwhÉyķ������hnki|}=-1 gW{t=\c鷯_k++-Vu},<7wj=N$]< �����4{9ϛDn>#�������-VeE̎`voC)Wj|Bfߕz芲R56\+6�����iS1;.fG�������Z,w/W~c5lUEY]c;G:jP>#s�����@?0;fG�������ZBfvw:_f-]'yzw+^ނ O{7vm1 �����4m}D-%g^lv �����efhsRocJffgo�S5;Zhվvlݾ^%yv<`tԝjjQ]K6Q �����+?#U~ov 4`v�����BY/ez??<<\f aÆEyڽO`SP}(c;9uRyߎ ڷ㟿�����y W̎ffG�������Z,ߠ0u; &M{qfm*ɴkl6Dǐ ZdtEFwi�����M@a^v_fv 4-������hhfh0RgjCV_[!amا512T^����� TT~f@31̎�������Xamg4c4jP׶f7gm ր.0*0mc�����hJ t`w1L,Q#�������-V\1LQn20l 8GF5C26 Uޘ������/oGƚę>nv������ iS4;F TPV_V>v4j _q�����@SP^Vf@3s7������h2l/_6;F)+.Ta^fmԌ֮]c;/-y~)cb7r����]޾f@31w̎�������X]4{PO)-y]c;Ul7MCU..^����� ZTYQnv 4o{������+uW~ RUUmMfmKݙyGNrrv�����fjh&|K#�������-V5͎`VՆyo?ԝvθȘ: RU6z����&U^f@3C�����-ooN;_R߾}qFؽY >x ]>/[1]ۡ x{ϟ7Լ|ߘ�����ʊrfywbv�����#?c6p zƎS^{kȑ 6g=sl u֩lvS^Z,CV_ۯ?=ծg@h9b~詚Zanfc�����h=]W������'nٿ}]_%X,jՃ=O/ԷOuI .Pņ1,3F7p\\\n:{}zձcGjJX4id}WZ<hVO?0ۭjȑZڳg."M6M%%%NJ:u8嬳 {{{wޑm߮[n0oIɓ~[TZ: c4O@Ҿmkjچ}/NiIۡWNM֟?0B[+ uc�����0YiQK l/������' fڵk:u$jjٺuWZr晒{R3f4OOOS=$IZ|}9999M6ob6#FUW_IҔ3C? ]z%vh;v, z7_Mz꓾N[Ekċ̎`2Plm hkeVQ����/@:6;_>{������'-ۿ_tnڵJII~$j _BEEErrrRHH^z%jJwqGkJ+UVVI6wvvV~~$;T]]-OOOIRuUUͿO4ǣ_^~N2D3XV9995}Z˗fh0~jk{ hkmHՆejaQթ �����4Eyڹ?ZaS4;�����IY]zK=SZa&q.5KK-+22RFAvڵӜ>$3EFF_|򔕕SXX\]\T\\R}rqq$5RSSG)<<\~[nয়Խ{w}'I&WUUuԭ[7mMJRxf .04R=N2;FM߫}j6,^vcuTֱ~횚_MP��pR׆ ̎�1itfGA3եRVj�����(<<\M&]+eEGGW6m$uE[ DRqqqފj׮nݺiҤIz嗵uV+::ZڼyvکDEErvr223%IYYYVΝUZRLeeegϞQʞ=u%)s<ZϞ=쬵k֙Sʞ=*..6ߔ<=̞J/_l = %Ew{l6y+0Ju|$)qV��$ �h==~0θb�����hC^cqg5;JoK iN}Giż̞J\V_[dl7UiQ~v-hչ{J޴Ҕ����� o>DҪEfG������?~<ٺ &23lEu#o@v'PZT[ I6,4z����& ;5E+h&bK̎�����P/fG@ ߣOrرC>}֛=z6FV_ہ-*-*kl6yxy+82Z)[% �����/Mz<[ >x(hRwm2;�����@DDD(Gc _W^Rd`ujjڂ#U}@9ۡ xe1%Ik}ݨ�����̕g1LGD�����^Օ�GWXh֬Yv\=n̮*y߆t5C\\g_}.�����h"sey(2;������l6UUUؾ[6'zUZ?'7vhZ CiU?i�����Kݕ4; 7#�������-\\k<kNXVfkZen`_5b����Ul7z;����4mfG@3v+++SY}6mLNN.rvu1;FoT+kjkl߂U޾ZgIЈ����@>|h&s̎�����h>{Nu 3;ܤO*qcSuUJ ͎`v]60lyxž:6UV07P۴|~c�����h"uTQg7; vfG�����XU*,!9 EiٷolfܮKQZcu\/�����dۥ߾ev 4vo6;������bU+'- &eZ˗({z5CJ u %P۶fYҘ�����VQ|,c������@.fh0m:Ra 5[}mRCԮSoC}jcp#.�����h ri_"l{������ W)[ךܤM+ju-o�vh^Q^vnPKI[)I7z����& 4R=N2;����Qu着ꚟփ?WUUj=Ⲛ;~C)**S~~IΞ6VrJFkFF**=~4G>kg7j5.߀? &":ek۹q{ڀ.N5ZuWZ�����I(P߿Ī?3;����� nO뻄$I=]}ڵ+M6k^+Uzٹ7p_;?5[w6<f=;H/6As9tW\2/ҿp96TuUXXz9i۲Ě/[YVp '][WfߥݛVjں#ߠ0vudڸ<PHIj̵�����MO@ǟmfGA30tʕ̎����@ VkMЯNZ.ϾXQû)1i,KTlt.5ZVwRaAfKKUQZ{L I)ڰi~u|f?Ry4$i҄ZzG("<@&^zmhكկO:srj0~L/=췲Zpw{Αar%?$7~Ԟ}Y7MQrJ>|*C3lf*$Gڮe~Gv:oPUUzS s1,N ?~j+/[gNH ~Y+W7:oŒLܼW~L%%eډ_e}ƻ?T])Jar4q|{Eh&]}8cUTT*6:\\1ΜnK՜M7^;Qz_/+~̅E(D~^玩z/U]U jİ:_kµzޏTQQ޽bu#<u᳕Wl}|Yܼb=*sKPuUF3&3d/1AllD߮к:aں-U}DnJ='2V>xQDPD;GF++5fmsF}F0Ԃ[WppD�����\i5f@3͎�����@j~[O=:KW$MkVUU/ݤ@ԳG.ڠl)[?uhZ4QOJlBz;KK+?tޒ.Z]za׮4Yң{-$Cƞ= sHٛ=TUU#kuƌ 153tcխK[fآpuْ̬BSs;%SL>=c1qOUh,UTTٜ=s>,XV졋/esNݢt 4IR:sB?EF)ᇿiޏB1QazE:ud Q7\3^wUU՚kY>pb|bYYnݯ'Pj֙˯1*../2FGuxGbVsT}u鮋:Oy_%i@j6Te=ڜWEEeu?u~w'g袙#յs+%m/4a?|2*))$uJS& wW &/3Uiɛ 5[}m}FP`xvh^vj#cۘ������O_EFu5; ov�����jTWWE ]oP}zǪRAA>4xKzv$999sҍZps jvIm7N֫/\#<Z<2G\?I6_9]..ΪXYYeCP<+Owj4:ooxD]0JהW,7WUTTD&ooyyZ]]gRxMNNǜCu^s><,u7uz>td{\[UVVՙSn^櫓Ma37XmҔW -]\m~[ $ZgNe>4NW^:V#Pn^|$I.uxG./k~n}:-~rrrJJϖ9-<,@~*.)SqI<=f֠g'''UgeoW nA.4;F Uh+c?H٩)v6~֕Go`xc�����hKKB+w����.1R=<Gic{Ӥ]Cus7P1T]mգԣ6H:`uغNjW˵bV}bmLLчY/IzJq1sz:ulM{uܖvƣPe!h+ڦ/C\_(Z=3W ?]e֮ߥ_*G>d|z{1Z|dԽ[T98+$O>Ǐ>HқԶM9IRTP=Wȫ1י<.^OXWSijsz΃j|n|^^Ա?,hN7B~xRd3~~[W{'l/ruuJo|E~m۞|yǪVhǏl='[cmgW/WM֠gM9^NPIIGϗ[JIR qGj2Բo5QJ5l ?J9*ks*7w"HҒ���!>>^6l0;��JQ]k2Q \9z 5w�����a7+K**r-+i9~Gzs&CUyNyy\WjUEE]>s8UW[UVV!//Ǽae3/~q4a|chkNUUժ2,))?JNNN5mpۻz汋z1lgN+@~u 骾|qѤO+q]Zdl7=upe4SDtgՋjyxLUۡG.?nr6e�����y*UV\hv 4>r�����DM]Mp!rwwiTAݵM[ݤu9ԷNU6I:n՗ic{~_7G[srqqD>^f{GWWC~[km7wRV}T{=6mޣDkpKKޢ>| \Ei̫/Rw&* *UWW5r����I.-cv�����`:6ĦдiЀN :5X{wkіUl7Mc4'gg9זփJݙhoViҕjJYI>�����prprrT�������Oē<'UmMAjͮڀ>2^[����2UUUh&.]#�������-VDtW?fh0Ue*/9-hI%'5CuԨsn4J sURۈ�����ww������d٦E_lv+߀`CV_ۨsnTxvj׳O s.--C/{7z����&X͎fǏ^av ����@ շ+̎f&""\iif@3䢽2̎q\m+~ZfGi% 5[}m˾{Kevš xIu5܌\�����)SdtWl(h~|Q#�����Z>ov43JO'dcc4PDDĚA JOVz }Z+C-u{nk�����LV\k̎fb7������h۪ifh0:{fm͢Ϯڀa$)=%1 �����4!j1Lny������@3;F Rν 5[}m=N9C!vœ %ֺ}Zo�����MAANVbv 4Ǟkv������ W~dۥ]VjڒU9vȠ>jcSRn�����Mh+u<A|(h6~u-�����h>p1 PyK̎pyYڹc4N oQ+|ZS־m[Xۡ xyڳmc$i#_����Т_2;}Fj׆ >�����r)K1 !fGh~jױL4;JHݙ}; 5[}m{UqA]c;>bm_Dל|]�����[EkЄ ͎f"e*#�������-ViQR̎`tagj"Ǿ&K6(;-P2` ۘ�����};7̎f"":������@魠(c4=[Viͯ_jڲRT^Zbmsuso`i|mZ>1 �����4a:iDN#�������-VUE 2̎`bz j|nmTYqkY5F\.�����ޢ<nv 4޾AfG������0]QQm_}k,UW[k8c>^5e>.))k;"}ߟ(s2qvq}^mN]߿{PVV\Jvh\\] տ|տ|و�����V+fDUU������L?5[w|orccЫo.PqqY_v^{'|:uƒij՝}_'Iz<=\I'VO}^Ӯ]i -Kl8XU2;FwFLP"'''vudP''j}O.I/ɐ�����Jݕ}h&*K͎������ШVޡ‚R͚9B#%?r|TU&J|n #eJar4q|k?'H/>_UUպӔ]W\ ?_/edKu2-ZQFtW)h=hgt5t nnw4Ik/^%I:j^X5HܼWY@vd8뱧Q~Atƻ?Ty Vk QntuZ1Y3Lr_]S !]+WaC4ft^zmnv:k@=wZpw{ΑFaZUYY67,юu 5[}m.nrrrkl߂BEku����GDtW?f@3fv�����F[�o=%+VA?22%I}XOw"Tt*w:U];R:ud Q7\3N$:;Ν6T&T0Λ1TNj3jҍ+th萮rqf5$U#w"tEFj݆ݒ+ּۧVYYbG;%SL>=c1q15涸eet3_Ͼ]U$M2X!Iڱ3?KJճG4zdwuHcrquO1L2rCV_[qQwph nCNW!7z����& c6-ec:������ghIyJ9;;(⒲߳Z6/(||<TPplLLQVNvE4dP=Lz$Z|r$EzD{rww f WA;i=uu&ooyyZ]]񐓓***gHlKΗ$UUD _yz"*J}6NSf?(\vbeH6ԒVU6z����& M{rf@3*������]ƻm?֯mٓ?ԯ7vSijsz:K|H/:_gY-٤G?O*1/|MǿTUU.?Seerst%/g/~{f?Ք3އ>⥉ЯcO_ ק_,+굦Ͽ)zVhͺO48*7HAmBtsyyӛ(w/5QS 5[}mUVRlN11V~8#Ա\qMЃF_8��Y||6l`v ��S~AL5; kڥ;�����) Wzzz?~ EvNrJ*++ W«jV1oTTT)..}W%w՗kUW[k~JȓއM~h~r~'WOdl <Bm_DR=CwWqARmvmӔ����� k>"t?������MVݥr?j$gg&|'wQ$i쨞:77:vm;y+K?c48 gkKI[v .}եO#.�����h Ryf@3nwfG������hRڅj!j6(͖ŵ5;FP뗙lK 5[}m7 ĮڀW-l߹Iwnj�����MoP:mv 4N������@Q q'16P׶察U][LKnkagjQչ1 �����4yڽ?Zes0;������bf׆eߛ旾W7l;Saۡ xi{ N݈�����/�h&̼������@N}ǜkvhcտ~ܴvȠsS55֒\3�����`"fv 4y������ L?/jv 8HfVDvn1LQ^ՆA/%)-9c;/sN-1|nf/�����0*y*zzof������pߖoKך86{̎ |ԝjjږ}]%v[І1byǿ1 �����4U*2;Ϟ������@g~1Lyi r 5[}mcνE:5Cޢ?xP(/UEyi#.�����h ]\mv 4>yoo������4u1q:͎`\\eku`vh^t 5'gg99;e�����@3`Jj1L͎�������Xwl͎рZ [}mg\1[wkd0/S;-SuUUM-0u��8yEDD(==��|lv4O?DcP)U^Vܨ܌tCڷcνem[.yc[<WW=6-A{G67<=I:{Tg_-kU}̐_6jץSHd&Oo?w*5b*IׄKՁ[4gsr]t{ڰ,AW=/^P.ь[_TM:Q3WeE)wOur)@K:KVS䤡SPQ~Nu2mYv'ԅw?ǿsu?SҪ_uj5|1ݢB >b+~P^VqsC"?LkċUVR1ߢMڳuϫJZ.3Yzk%X ~SɛW{R{k;US>' XVXێj۱b TPD;urܽ5`(+?3Ug\RwmҌ[^Ku~woaY.z=\ެާtz*ܹSjץB[Ǫ뀱 T1eZ5쬫T/G{t h?4winwᏵmbsڷc&]rj7X&\(wO8 V!jݾ£s UgELL%Ey{ڿKg^$w-+~~-+̻Pʖ5ǔ^pJtʤ^#ϒo`:Ȩ.jݡa︹{iЄ U^Ztdl7UO;vm\qd\t 4Nww;5s6ھnf¿;æ\c񯎱wQvZJݽ3V1qqqqא3jdys_)qONANBrrVQSN݇Lvd;8{g&^z1xG(:Smհk흔{gסtCG+Rn^>FgtV>#kN>j\l9wx 9wY3|I=j︺׈vAf읜|޹Ᏽ{(/KS/GQquh߸j4M~؝hslXj9wn~A6i(/9_^>V{tNz:MNN:w.S{?uo)qŏ6+ڻum=Pc9Ve8j.gZk]J\.Ml^{R =rw;m}D{sf򒶯]Kw~OEдՁ-p*8w+Wq nNHXN} 2w'>yPӏ;=M#{' TF;ŅNMq%o[3:z|-RlKZw:.jމf;wrҏ;ußc<=tEwcQXj׹(9:gZ{gǺew*+ʏ+( kA]Zwdc}xsdm.{ٷSZTGN޵ad;sNw읞>XAam{Lf\:sKvh;]7<ͺ]pd~{gXyߘsdר ޙz3ڹͺ]m}qMؠ3Nw`jw(sNes|+c{̼]E2钃{gY :wZP! maqN^j{gӟzSGN~udxKSnNFNz:{Mx:Pw?_G흶z)轣Ξm:?j흇?Uߋ읫r{}ϡj}9L9iȤKTV\k\sytzhY{<;5;ߚIm;+`Q:{f;{UUWߘsSktw_Ɯ*7{'sFS{x)F=MG=l99hOw<޹ME;>~B#?l\=4I۫W=};;O|?j;SjUS稽mjWeey{#{gڰYvٝ;�8{'K]tҏwersK5h,{;Gp>)*Иj״娽ϟWw{TSߑ6)yxj97g|k󸓖E]r r2wSH{''C_rShw>Ҷ5K4֗Z{̸Q%xrQ!{]gu[{8qw~C[IW<.F?:GIΞkUVj̼UeƽJ(2Zv;٣W=RgJAxKykjv]i¼cb葱w4ZDtIRZr��p׆ ̎�1VtZ{|�����4E\$Mߥ_DtU 56z:+c:2hƞmZˆok�����LVYVl�������0WYq s3 5[}mJ ٮg@hXrZaN s����qQHXc��������Z8/ 1lr mc^=k'Z@x[IR]`�����|EyJ]������� sUUYnkk'*.ȵkl6VkW2l�����M_̎������4yO?%h"^|u~Z1N*F)[kjM+~Tۡ xYiZ}h�����\ھn1������f[u 1;pR9lCV_ۦ?~P~v]c;;2oP:eݾ^{o�����MH7;������� mA=N1lu;JAvldat\?Ek�����M@n~mX1��������-\ZrP׶{ӟ*˶gh6ymǞ+s\/�����ES߱�������µn]݇L0lS^~v"fu3Bh�����M@vn1������fmJN8s**y5Vv<c>LVUEEeZ~ k[:/{_!�sٺV~3ޱV_[m*-.kl6yx*0yBm^1 �����4m:hט������hֲskX;wjUvvh];?k[URRVr=rUUUk_ojSUUW$-߬Uw]JC-?ÿO'sqo칆rklWG(WQ^c5~h �����̗U|1������fmİ8%_oВe%Fjj&DO)}���IDATAkRaQfB7s(0G8Y ]1zWڮ^=5cꐚZ^Js|/:O~^5?B%Q=խk=\9;;i҄j:X}DnJ=+'H7>~zx& Q3QAA}kV]+>FsZ&7xDg*+f7B{IKn.T/2OyE6$N={DiD͘:D/6_[_pS`sZkoL;k?PVrv]\mF]0�����`8~=f�������NUUk?gh-\Aٺұ-J0I^21hk"#nn6z&)::oLVӵsw$iT-_1zUVV)77=,}?/uJS& k$wwWޭ^kP]mUGgi$UJ۶'.P%'}l5D~9dhȠκ?UQQH)u*+C=?c*UUU}+:{uf[..v+Y{.=u$ism�����RwnҼ4;������UWǩTP A:)$ĿsjcU>*,,=kw]קCMYU6_Pj2*i,gUjLsrrRU&577]ˡ)wWWHz$\ÇiԈ ъM*-|="/ҷ + :oPUZe 𑗗\]]TQQ%#E}cm7m_Pf޷šWVWx/5֚E_7z����& 2&^v1������fY!!~zo!9K T]]]ڹ^<M9c}3-^: u_hWKum7klZa>7b}2}5wTwQr𖠹E:TTT;wSH{mcjл?^Z= RUTT7["EF)<<@[GWDS>ZCV_[eyU -RVtZZj��qac��pL.rRiqQLq�����p;|y<.!znYY\] WYGEEfIIz;CUU**f_BmZ_5QQQj<<\kƷZru:]sӇiҎ]..n*+-k9L%oYۑA+J}PK\)�����֮z8K >|(������Ip?eo$=ޠؿOyy^'c \t߿f-?*N|kz Zw/5:;Uژ�����c�������]`v 8ޤ5ZCV_[hrkl6iDCmǺeڱnYc�����h"4`Lc��������Z㔉6(Ϯڀ. nm`c�����hr3ios͎�������hޢUjڢ_]c;07S-5l[=4z����&?$Rnv �������@ ֶ:fk۾n s3ՑAC"7p2nj]Tި�����Umk~3;������,ddHIYf@Y`vJցdgj c;/7c/Pس �����' X1*-9(������@wɕ8iQHd睊k[;e3coANƞgG(82 �����4Ņyڷc1��������-\AvҎjoy hgmNݭ jy �����4^ k�������?HQ );u]c;/M z"F\.�����(/c1��������-\YQ 5[}mç^6ՑASϞ7/.l̵�����M͎������$tEն ;,<<\͎d|r%nQ󳛧 ϱgϫ̮rh^dl;O﫩7ʢ����Ref�������p<ƍlv&?jhPEy9N߱ޯԝ4y�����@$'9�������z}_=ek\gGgUU�����4%..r4;�������svufme)2]c; xiIZɳoc�����h"*+U\kv �������@ WQV<CV_OUyY]c; xa:j lg7Z����&S̎�������h<nk9:hm޿K-j~ l�����M@YI20;�������8TUUJK+$IyZ~*k/**S~}WQ;jk)##OU 6~uU97Eފsbk[nyWw5C"LC-'-Nx�����p Pxc�������x=B~ljL@e6/~Zn Klj"mYbͿ-߬U~ kPLED5#*7c6P kP=|)�����g+yJc�������hA^zmhكU]mUYYNwr%Q=5rx7ZCK5sb#tmwo9_7_g??OF9xKu[|Lnډ{_F%%3cW~Xܼ"MG{5~}:ϖhwJ czoeZ#/xڮ תo?jϾ,x莛(9%CDUz졙z㝟u$n]-[+0G=yӇwu +7HaIZ1Y3L[ϖMr4x@'-^Sk'yn5اg㝪?ܛ'rSAZ\8p+u֪mZbնZk[bŭ( ʼl.^޹+ qG -{'|ysjݶk7T_]1+Eŧhݶڠ]s�����*"6QFLv7�������'v/Kz`e3w+[u[>PÇ~WT]ݠ(yj+9D'VZZۺCJJ2Le^"$Y-Vu=b,ݠ'֘Q}ugsLS'#]*165j,9M<HwxsHPSsmuw* לz6}&f'gxTNKe5kgQ.>F Ѻ /v kRI_zol獕"I/UN 6+n=햭%>׭')0mcOWT|J,W*Ӗ՟m^͹@�����(ц�������uv2jmmSxE&A/1Ju*ӉcݎtlI`PhIghIPrPSyM-8@S& RtT>ZRbu\5ƃx[Zf5+.6BVYzbYnQ]]WΜOmu?bRkCu$5T6EaafdoQ"5 ǁ}&éCn=)۳M5ܶk۲Wj lQq.8m΍+s@ �����ILװI3 �������ljA~u =z}r CsUSۨ^Y]]z_|K._b\׷MWǟxOWlW+׿;ǟK'g?3-Qn߅]O*VWm׬/hԯo;jݙ7K}e|#mZ,˩ -\Jckcu}/jkz}*ڝh\}zf?LGP6/ޢ!K5WJJ֦{4WT؛»Rr()n|յ [T\+I윜ޕO-2Fq9ڳ?]z���H2d֮]n��ХPE(�����.JJJRiiiqc?XkC.-ZC*p)w7u8jmuj 1kY,27)"^ߗUkI j].BBLػtϟ.Pj+;k?\;XW x%fu۶ym^$/�����Rs5n������Lwif>;I2~Lƀ1^r8!w܊$Q$쯖ԏ:W7.% r6_um}e kG6Z)붭 5K^K����︲=[ǃ �������ƌ{;<cڵal^W][M^4w@j->[u~����NrvNy{�������8 9IcϺm6[dBB~;Ws:mKc5_�����;d �������qnOuRmZtG9�����1y4�������cN{)Jůc[Zg4lm9v�����|?بEs������c֓wJ~~ ݍfTۿm6&ɿ൵m۷�����YRvry ]������?6]NijjbN;$h櫮Rm-~Ȏ-aNHwVp48X�����(߳Mg�������8ڸB+?xmt-a~;xzm׋r�����w@\jL<;��������b35ln|յ٪f{_6F%+mǶ1'+6%Ke��)99Y��]jPT\ZZp*US/]6V[,ՙޣ݅u?W-TWY\f=]&S$[T Q\JRsg£7$CB4hjikjN:G*ݳU'_sټZg^{Dg_[N ڤݠ경3r55j钤~'Č>J)PDlrPK9E <C{U(ޡ)L{iWݩ~_~ӮSi?Ue.= 5Uiؤst8?dٔS0ZQ)JWRf_E')39Y.KC&p*ݣ3nT whu2q]ڳMfݡqӯQ}uOP-Mx4B4V1 J3P MRF! Uae45hܙjnS/QmEƟcެS.U6~k>YVѦueiQƟcVkԩ^ΔhTadVzaIP|ZRs)"6A9*.!Q}GY#^2=jۮߢ[ܥkiޡ4H'C5WkijKGN%,BY#~Je %KXG,ӡΕJ'~*֤ ~4;}:tUw뷚|M(ޡqg^ 2C>Ur$dPBz&f(pYãoD`gNc~p:;'NHtNRg£gNT{vҕgvg~g'HC2cv~ЋLhࣖIT|ZN{vb3xBB*8G-; iJrhYlni҉9eG>gNrϵ@vV|(;wm҄.3IncՀ1&;ϕ);F+*w}YimzNL/sg'\2;gvj?R1.-Ҥ k�egk3;5䋎0;%mvVԙ{g|ӯm.";ENN8퇪*&(-SvivnUif rN9lYTg_쌙6SM 5r0;#&bNfn{Ujаɝ敝쑝$oDY#9;]g!Wv*oT vڱn_Ev: Mv2w"g|eUZ);?x"cΕܿȲc SN蜝(>(ggSsCv*=`v>6;Z >,]v{ڳsu9Gva6eyd'*!MYnqjsdDvxd'gҎBv*ݳc4g'.%Kq>3MmM]dgM7ٹQե{ωGJ8ۮILiWv:;۳sTQ(dgN.SguqNF|9zU՘iNIev);RtOUH');.GM9,=; )J<ٹ-;c~)69wvU#;QѦu򥷪twW1ϰJJ͔->+;);#O3}]+;ىaScmN<_ٙ4CV>쌐5<;;.Wu^zBr:U6`T[_^nq=" ;E$Hˏ���ӆ k��t+1)69S;GwmVjnoPJ�mQBz*w)69C5eŊOR}ul1jj%̦&Brr\2B"%LMEFR(QLR*[7Pw*)P\jK**>EUe Sc]4j& $G[퍲GZ1(UtbQ\jnWRV?ؤԼ*ޱQUgRsTbT[_ j5<ZZr`4`Lf67j F8W+*>Ye{&T J݇8&9CŊMR}͡9hm>-2P+[dk쾮}TZY)*޾^)sWv(69KeYͱ&I2vZ׬T).u_tU/R\Z J_{=r"5<B-F-ntjQkSuW]URUi]3i΃A8W%ZS)kM&\yh]-ajj->;17;0558m)۳]TcR줨l츭d8$ܲd-";~*9٩طSN,;;6(5;5NvzeHNBjJqp]N٢fgsadT1n٦|pSy"P Q[=;뼮d'lq_^g'_enc48;ImvBt3;\^vjK}v3bťk`=[+;-";%;N dvUbR,;7h ~Ev׵l6%r?9V\jgU1HqrNNF_UNlǺfefh箢ghD%vstEݾUז}jj-KHӀ1j': s$iӊ���(�������Ks.&w6P{z?!TmE6,m[΍'��������������k۰]WwWc ;afmKLA"��������������k6ibO@WH+}[i󢢢ty\��|/̛L����������U׶o-KհIvlK$Uٱ-#=QIc8e���e&-_Q ���������Q竮mkͧojMO@ lէwP[i�������������O=f_1S:un۬aEa��������������櫮ԙ+9;߯ x%;6蝧維%HS�������������7_um<;+ Y?7�������������JWبwm[HY!^ohh7Tee}SRvm߱c%u_FUgEu^{1=o_eqO\G_ǚRII {TxeY/<к;n^vm;p},}&Kuuݶ&_<'tͷ;̯1~����������=ޝ{~Z_\v۶z55p['k|Ϊ5'WuM$'Sccs//VI?}4W4W@桇s^a?VSMG5vk¯f]tLzfch9-Om==)Ǧcp/ ;w]CO"+zݖ}Q+Wm΃ zu1הWwد!'ܦV7şӷvm̗/<'97:Ax,ރ����������Uve*)_ dn-<*4rXvnLm]~544'ԪǟxOa*+J-\R5 :s GWcկO7U_߬t|FN?@/LS&T]}^zm,P3N5z'z5 5K'*11ZշOJsPUՠ9Nǧ)%9Fs_T;JUYQD/Lv)CphXBmݿk+Vn{˻檵աru*ܼOϽmNO}kϾ(TZjx5b NU^QF9.Fcddk_]K)5Y{V١&t^sryE1lVu=[>ZVWjr~vncHF1ZS'GKeܪ_~7o)v˯}vWn?M몭+*2L8߭6 .ެ[~r2翽ʪzJR߬ۥ.պ*j瞨=k:{.՚ovz}<}vyZZ>y<G&{k{mE8>d_ZW~ؽ'g-O?]lכoP}]|~QeuHӍMo~msU]ݠ^TN&Izfbu+ܲO1 [u'nm2CU\R5gAcolDty<gxz7՚ovAinǪS{ULMRÖ,ݠ1۪iЄqH;ҒOk̨q^ylzߺ#>PV(<ܢ;~~v=?,:Ir{&/ U93?|=cW'3pjll8{SĄ[ΖdtsA~3 iJt˗/ ee5^c~a-?YSh 3:MP9FIn)Sxs ����������U׶]>z~۶ڊV~k57*'+QO]:c]zxM8@'O1YHc~\/ӜK:ELuzmzmjͷ;p8dzZd566%j2]yd 蟪tS5x`ny%I'Я>aWUT鑇VqI>PÇ~Wu26dW jjn/ZH?x6QCC>rrt3mWNJjTWo R^n.<o"w%r ݭ#"^mpN<XW͜5&͢4MNY|'I' ҔTYYuv{s]{:<9N+7yM&=z^cr8z쟋4tp>\Vŕzbmٗ)*5F>{{^(˯6k/ׯ1k }3F)%9V } (!>R['^pX:ͭ ?\_q_yL!!Fc3Os.CBIjq:s/7p,$uS^$m۶}w\nPtM<tF E3i옾zr82 S5tpتXM;ek%k+T[({SWnctyc$y}{<[5 .:V{bYt hOŁcMk::ܱ:y`1;.-\z }eۼ^9bǮ2pͩWo99ىޜ3<y,z'OH%IzzbsJI7kwSO>/_cX|W#<SyZZ\Q$y^nǦ1N����������W](.5ǯ�jn}Knb}B>5 :qt?zPO| zmfLF7b#Nn8]FA' |\Ԣ kN ?'%F+2¦F{{ޟdYzu nQ]ݡ 1:qL?=Upb꘻DEd0f ެ+gNQnv?USرYd*:ʦ&"&, t9պ`zB%@rvqHҬ{_P|l25&_yl.מAZZd1_Pd2czZL&IvSkkbcu~3f!22 ^cǞ:JRvV|/,ѮT6n*K-"e<sLtS[[FPu|>VuS^-kGq"׃E4tPv4^T~tEGw#f-̢F߷n֭Yct8 _Ǟg<y3<M?}/JJJyN&é?\şӣ5f)$I2[B:ؙG_=ہ\]瘺['_w>'csLuZd4ʒMM-2Cnt.ճlþ=z~9F߯<y槶Q1c#;MO=���������� _um_k?-ILЉm+ۻUe{zdhk3F%W/ }>I_Ъ5۽40K7]q%h4k *-iC駵_!h楓疨'fe&_SYY$~m}@ z/4k zԳFz=\6W7.l/z򙏴ek*j{SkS Q+v#d6h|}ߋZ^S}I9z8Ĝgo2})!!J۷诏}^n Kݯ} 3_Tyz_VƝ^ZǟxONS?^feyW;{cnNV|UJ24|h}I <WB55j鲍7kI^-^9&u4_?}u|WG_o.Y^O?9 SnN%OK2u}/i=;Xdb //}5z띕wBZEyw>d׺ >XOM //_ױ'I'^RII:y3<&:|ש'IIڴyf?.ĜU]ݠX1ԯo%EGټni-ySz:\NohU;&W8'csLv鎻vۍĎ>1/j 3?zOt|˓9U=s<yg<PVznodT||xu+꼎M1y����������چN<W1i~ǐE7,aOQٞC0TIҦvlXG _CR~+Ph)PÔTk˫r)%wY]^i;7+e*orkss=iksh4xP7cg]NW-Ȯ=MMݮYOz֣F))]M!!Ǝqw7F_clp8p8}9\.:|2 p._{k9?=pE<sDO<ץy|3=iiiUgoӱ}8c9'7kkbyvMhrҞVNWo/f\"%c{AOEt>q].ڜ}OUWMs|姩EVcOfd  k�������TZZz;竮-1j+Jl~k"bwD=[~&Ѕ&STG{qG7GR`K'zx[p(Ɵ1.F,"n9oݍט<ԧw=`0tY(S 5|џ ZCnhǞq|7ʼn�cş;ɿu$]=s[zs7 lq+<=5;[ Γ=`8fwUoΛ-z@����������k;l6ZƺJڴm[$I?'_N/]^xaY LPq&+779p-Yqt~����������8Z|յڴRu~'xh Ҿm.ge'��������������kK${}O@loPپnGQ'i��������������p竮lv5O@j*:.mۆ/������������+ڢRU]ǯ�"{]۶ϑ$}+۶mߣ~q ��{9]����������ク6{]-~'xI!f۶U_z^ss3?0�������������W]["~z3A2 nFrFrq��������������o F +945m[��������������>kkijk?-3m]v���>��8[`w�������|ֵGjk?-kmnRumz?Xs��N*ȏ?��>G<��������umե{~Zg+)vm\ٱ)-<��N����������oڒ2jk+{jgn۶<x�������������_um{~+{]_1S8 :m[ր0:S�������������7_um9N-:ί xUںj۶۾ �������������ܯ xQ4 m)J.��pWcEҶ%o:&=tTRRu_gm{o׵Y.:h ͇ծgsBwf}NUVwl;i#^@k=+�������U6hOk?-.ۧK^wVom4��p|lCnWV뙹@/,ݻ(歷W</|V_{?9}>9N}eQ?m zGuL?Hʗ9[u_qn/==)Ǧcm7;; ];;?M}]:}n繣n=fwwt8r}ZmG{<}ȯL4c_W]oԘws||s�������|Wk[uUk?m\JL8G>m1Iʒ`���1OTKGut$I>Pmk~usNҕOc^kvI7x7lܣ^T11ꍷ)COO' RxUϾΜ6B6Es.Mֿ@ MɊzCFA8}S͡*.g76W׫9yUZzW?NuuMzOԪkؐ2Y,'g߾6Y,!I>,k{mEEI^oBk~Ӕr*"ª%K7A`,PDt.uZVLLD6Ƌ˟{ט>d.Z9m45߿*é3ӓ|]uꔡ3OǖܪT[?|:U4gj1ݎd{oƏ͗5}NMu;Ǝ綎LEoNiqi^ZRR^TN&Iǿ 莟zcsLgLᶎee5ny4@[iPrbny׼wzk+Vn{jll{]罹\7prsf>ߨDžkʭ:?:"t«d7떟)IϜ+);+Qqۼu[j|{t4rx^z5 5K'*11}<yK9%**L#j2_يUN*C;n=GOnǟ;YS+/ +InsYy[L&}W9⺫O}xUaV?D7i<~vuӼ΋&U[ۨfNUiY۱xکû]_vPM]CeJ;W\fը}gon328K^y[|<g.x������ _umcN]{^|N}Sn*KUWY̹��@7viAz䡫a獕^Чm#]]ENZa̺G4. iXyRcڝ:5lHny}B6Km,ܣ}SGjꓗZͭJSsM&=z/UN -IJLҐAYӥC\Ͽ,TssڲXUpX_f}[ &iʭ>{ k9Ӹ'Mo.׶ekd57i_q1l-Qyy.h5q8nnkshCWb9skII>t3nLVYW^6YcF_5>$G,=[~uyz`e 1zq2]yd zylnާ67j)üƸek[==u7Ocꍷm]%)%%VNZIҎ]eS50?C_9&u_zo]2ft_ef$ow*+йNu7j_qm2jf|3ԷO9cRcpגiMן}.Inެ[uulz䡫5ybm7O*u:y<pVSsn+q<<yvX+RiY^g<y3{c¬fWW?yNw~?s\=3RS'^$cu%7+IUU٬ڱc\.ٗi%>ڦ*mV:[|<'xc-W�������]⫮Rޝ~'x}4墟mEI��@ ~ල!$IZ̒W> 1t`.Wnjjp[uv#NטQ}5fT_}P-^)A'SOiխd2v~ Џ1ꓛҫv:2la 57hS5y`Yd*:ʦ^N͢pE5 <(S?dM 5MS0BBLjmuաH[cp:u<FOWΜd] \] ߮ݩ}aCrSeU d1W؟p8bVqt,9D&QaSkLVmmb%*QX[χ=_(u}ߋp56kWl6-{=ylyj(jX>N*+}>l\ wovVd0 Kkwd=+l.oڛu:(Wv0́'s$B^Yj]=[d2kk<<շ9sLwcunw;9e `01uN|?Q]Ӡ 1ye,ts]$ޮpY&ѳ϶0Fl"RuSo �������K|յMgJ~ZW>xOnۚx{��j݆"=rDj OH%co|ܳ߾%K7h̨ó/|Y_Ћ~&ɨY,Z:pɷzeBGŐAYz奚+I[otzuM5͚(U)eE ͼt~c=uEdWԣ/ҷkw" t:۝zothmڼGxƃW)9m۱_!!&c<@wJJ|A._csLO*V>)1ZUzُϐaCUSۨ^YUSӨKz"{{IZZz<<ylupJ1Ǟhb //}^*I_آW^B[JN.SZhƎz:zÇ4W|cm/z򙏴eks/~N }Z]Cg/s>ܜdzU{gTi>s$ҫu몠sL9e -|^~su\W_N?u^\Çjz2~lE-zxyeuoē SWԛ{9gs>2_6:}~O?k[:8h`oأ} }ׯyNmJJʗ'sBO�������|k?iBc 7i}k.[c[z[=��!Chڵ~ۯߧx_g=2z8_766ftp!5}ϛ4jDװ[:vp.K!!6Y,T]&M6 CW^;8Vk"eoԇ޻.(iyl55j5VwYsu=b 軰͘:[fꚴpnns(v{~ܮ^-.Kmm^X7{N񵮽iuڱc|=us=zʟ1tunUT7^և@{9/vw,κۇ#=q4ޯnzw������$�4k;o[m zߺm3z=���cf[ua#wj]ol2b> 3bgAFOcw]NR3<硳#h̨~ݶ\kLVOj9]%e]Wm$쯖j֏: P:FW=4>"6uÙsڬߴ[r۸<99՟q:uP>qݱԇcU|'+�������.U~mJ�<"ԡ"֖ M���aԈ>5O?%;;1]^hx:3Oa"1:]pa`w������eNZ*ޱ h^-Gܶ٢4E��������������xUK~z<M<Fm5媯)�������������W]oTBz_ h^e.-nۢi�������������WŻO@oAAcԒWVY3x��ϿI���s_~1]��������IF|vo~ZW[VrۖOTU'��^x`w����������|յ]O@oAc~තxzo_y�������������c~ȸ$ m[m[f?"H�������������;_um.S}M_1NE'+wXݺc[E.&gHGNQMyrScmRsc֪̾2MRŪdED$-aMΐhTBF_9mJe!{mrU]Eʒ]?zK.WVh55*6+9;_.K9 5+:!UV[£/-\щ2*>-O.C)9lWza({Wϰڿ[jn6QuUtuJ7LMJ ӡ<CB.KM1 T͊O͖RrvZ[gU0Z2^e{U߈ɪ(VjRf45(5omJ#ѤLaM-2FaъObUlr 2֪Aj+sH5V*w8ՔSUYKGNUM>=IֵVi}EIYe0Hq (*>EaQE*"6Qfkb2d4(!ɮeRΠUW)uB#{C U[sӁuu*>5W!!NLGjPtBځu͕RJ�4)P55*`gxUQQSUH}GLR]~ :QjeF>&b2dXG)*>EfR%6+kHT(oI)ߧ##7;1~eDܲO}3;IY%gv"beEvrdﰉmv\N%vT57-; 5UvƩ∳t:j}D QlRfgo7Ɔ# 4sXbvvdE|g'6%[Nى>3DUtcω-;NhNxt;bb)Pdd a1f'li_W4gкzfRY#lPv۳;xjzNc&; nI2;'jL@vr0;59G#NNJnAgw{Rf'`v2j ST\"۳ovFNj_^dDG*<*V1,;dE},>ZUe]ggGvr蔝$?swxdUIzȎS쁣,;Ng3l*=cWJ�߱FGv& ;]fWN~�3&�ٱ)"6Nv,I );{D9X?S_3;瑝>뚔.пc{'kU[QѨdE(*пc)T 釾jm+Sv;Q3NtBLfŧHN瞝>^9f; IVXw4;n;;ΉGYvFnPt|#ۿ: <'Nsߟϱw@uUw@=f'[ŽsӣGRs;ꙝο=xd.~{EvrSvzCoc=9q?5x9;=I]dgߟ|촯ώ:'~vavwjm{nwDEv3;IcȎv9Ue]@u=Nu{HH˕ofzDGvd'lUlJt{v|nמN_N߼Uv=ON߼{~mv|nב=Nnv< Fv^$5"PS=9ï֋7Ԁ׋8^/vf=":*"]f6Dտ {Jeu\@Pݶ/ F )$DjQbF_”+-RqٲE(61CKSdl"bx&f(,"V)ٲG*!-Op%elQJ�M!J3X27DFSRr jQrf?ZÔGV[ReV\RlOWdlD&+,2V)Y R|jB6%eUŪ2B;PFAiyCd4[ SH3j*1,aOɑ5"ZY SLb"bTE&*&1MQqMΒ5"Z)9+kfih)TYjjS|j^{ߓtG'*:>UQqɊMRt|lKllYmJHPk3)$Ԣ9N" J3X&SRd()p%پ MRdl-2FqٲČ=@ `l_Wc]+bUBZYlOQXD́uStbZk'+*>E1 IL-*Nq5U٢|BC3PqlRj@BJE5-G(%g EĴkd܁81M8&g(,"Z9"֧}C]v{Nd6;}g'wCsឝ"#;QnىQ|Jd'5wPGvL($)Svbٱ)1B̎D{e'#;aQٱg'4uvzyd'줸eMvzjg'ىK=L"c$gzelUbF?l wNDLR8;i{CIpNDLBkv-;wv|d'3;1g'5 qώ9̦\De'Qi=d$)+; IN\ݲ,:A>_섅e',Pv:;e'-;cNސJSΠJc=;;1 WlrfzNRsdߞnى8$&;0%uHى󑝃3=;TxTĹgL$NVݲc);QىO9,xo+;VBNGvRrdNb9x~N鼮Gwx uNhNf{vz߉icNhNRF?ZݲSv2NN\J£{X$vNYN{vܳg (svl98<Pv";6#;>c6;j!;Nt{v:ݑ$94)#ˁ5#;3;q㞳3dQvB:cjώe'9`vg'#;on摝쮳#;ч>ӞW[v,]f'D(sc{v R<ѷDwNR;e+1_1(%gBfz(;qNΎ=;^s9;IiNlGvR;3;e*)Wv 6ydz0;QKRgv9;I=e Eve'=;D*>-Wa6%vN8?e'`v~瞝hى9d줻g'gvB{NWv"|d'GvB:c!;aiީSv앝h$ezd OONbc.xى:S̫dg'`vRzN}g'f;t|fk~dN.}i7VbzO}f ?ߟv~9=;ONwԶىNb¢ڿi,CߟNH/]v=c#;yE*;;Ev :8bUBFYl Uv;;}NFٱef'[aى霝Ct|z ;f세}.}$u1[ܲs5;?휝i~"3;q䖝0xd'wOΡOOݲ9;u3@>ߑND_ىȎiΡf'핝cݮw-;ъMD).5zNxىOUdon\ݡUv;tݮsvݳ3;~';~뜝~Ev}0;Ipͻsv:~Ev<~ΎvNe{푝!=d'7ܮ֡979N#;>^dO7^$"EѬIvrBER#"=ԋxm^$znEzE2zMH b-:!@"^d`"MUy;m^o%;7ί9CvN+PxIx,y=u}���8f*"-<![ ?]��!ChڵG#������JJJRiiiỴ>|ڰ\U{{&$hinRm%'��i_ 3-����������|Vɯ6),[?��������������_l2j<!G[k��������������8Zr9j<mu��������������`s9rj[КBdE{��������������!)į6-kkmQ}uY��������������Wů6-3[y��������������/qY2[jz{��������������KIQj<[d2 <���ti߿@ /kivD;vbcc2?;f����������7\h�R}y���韏?K4yҤǽgk֬Y /z7tDG?A6^G>1zj����������}}jMH ;Q'hs��KZZhҥl=z~}睒gyFW_}f***?{[fY/: .XEkZnpכ2enVƎǟֶ6;Э|qd2i@~|AI`%K4愱TNSy1BSNu3&*)) t:rTZZ(;{vڥ5|s9GCsUyE[KJJ8쳽s͓lVee* ^]v3/\]v~=k.`0n9#I馛T{w����������ǁQ'kW﫩mzڊ`��On6+ۧf^~֬Yw{O$i_q 7oVrrn9Ns_7[^V(Lkiiѯ㶶 ֬VZ[[;2dt%d1'?eZ%ICZbF-z]ٻWM'_L\}$riٺ[믗n~vMꫯj*555i^}5FOc^toؠX 4HFQ\zLFN3/XjkkW]gw^͜9S&LPqq?1؇ ���������ĺVmE_mZS%��nzuތڿf̘pݷOlr\rrIl6JKK|r-ZHR{q`gKkmm]fCCC%I~9N 52(ګUkke4UZY+Qg0zu`۟rbccUРccwc0`L}If\.p(=#oѨ 6?ԒO>hԎ;$Ţ_WR~~~����������ǕS/TLR_mZWY\ <���'+/,}vZM?,]yZlYGARRR4ep≒ͅ<d<tPO F23ҋ/J^zE=i&577_9s:묳rtх*7'G+WTyy9oVvg^~m={˕DL&1xѓ%I&N`O?kܸq:ut`ShTuuu����������ljUeq_m 99.Zt#%gM`��xG%*ڽ[_^بF%&$hSa23 6t\.+3S6MEw+!>^Txrlo*,]ftjܸq˼7ѧpM~y_x.Go<1TXFޭ#F@\yE;8Fl6+33S*ssݻUQQs[ $٬իW++3o9ۧOm۶��4d]6������p`wpwiqU7z&xFSB5=���I{룏?O-zU+.ؖ9d}?=}߭v7��@o!�����.�E|p4hu@v 9;_OD M��;{=Lヒ<(���������}0_i/x^ h^ Z��NLLbcb{cb|>ZcNUWUiΝ>����������' eZ;+��c2ZC-RuucN^vϘu~lvءիWS���������5{{ =���Ǖ/vF1BSNz;����������Nj>֖fف̾z-���izz=:ƌ`w����������ܢ̾~ h^Z:?���j==gΟ1C99����������3KG{w&xqY{���xCSN v7����������{KMH ;PV}j���.����������1WU_SW^/:!EO<��� �V^.����������13xtE'&xUe*`���@LLn6 ����������3_2�/<:NyO <���0M:U?Zᇃ����������88ڄu5ڽeM��/5B7߬!C(44TW_sMhĈQnnV^M���������-kXWWY#[ \���7 HJn6UUUIݞ#IULLjjn7 ���������ท {&x-MvU/ <���W>zv."p;����������8 dM@ BB͊I <���W_/vW����������{+"&Q%jc d657{��������������Ksc6�`0b <��������������SI6.3y��������������/ƐP ].m.��������������_ ur8Zj<٢ؤ`��������������~MlM@ 퍪,y��������������/%loM@ Jy��������������/)d M@ Uyu��������������m^ƺj�/":^yCN <��������������!')":ޯ6!@]U W~y��������������/+?R}U_mzT ?=��������������_T xhǯ{��������������˪_Ư6^\jN<`��8 >\ȾƏN8m[DD&Nr->ӕ>O`w����������z3R\�|v-{_��pM4kђ睧O?<kgŢ &>&ٳ5k֬^?Izn.?37����������8ږ/Wނ6)F|~ ��pIKKӟ-]T6MW^y.vG_Rd0x-YD}f^~M8QQQQwlڵKv]cF 4g~:TS~)S[ohԺu׿U=Vv.b>>8pu~'>o^}WMMM4uep׳fiÆ n;s5fhmܸQ)zs|1ZQQQ~}睒gyF . t:rxą _R񏒤oF}ۘ_7OwqG_hSa׸zMv]rzWNNZZZtmޫ9Ntͺ﷿u{ nspEiȑ23ڹs5cvS ����������=9[WUcC x%;7!���3n6+ۧ=TVVg%ázXBG֍7 өr{9nN?&I͛ҥ:e67,$jUN_W^yJKK裏*44ԫyyy*((OzNnn>s%I_|JKK֦|S7nT&I^c Վ;5gt޹jk͚5ztK\.fϞoEߴnzZJ>[Z|ۧaÆyyʕzGРgr.lրɧj͚52 9s,;W[n/s"""e˖u9yT''K0���������=jԼ:��pyuތڿf̘!ɤm۶tl6t`0nhf(0[hQ~Cjjkd+l-rIfZT]]1r\ڸq}]b5ہG}T;dd4a}Z'=΁%A Sxxۧʎ4 Zf$ I?%%:Y^+Ar\2y媫PHH++*ܬ(}AuU4sL͜9q����������ul M@oA[c=}_��gjkkj[ (99YO? s(//."ǫFO=ݫoMk׭s{d%\ /@VUs}V?|Q .Ff͒ߦBiʔ) 򯾒$UVV깹s/K.QKKBL&566j7n+;nuש_߾8 4`�}|4d2ͅ:s5駵weZ5|";m̒}vY,/ݻ}`^SSF)*ho$tWm0s]n&1BfYu���������fկ6_-;P#^w?s��#ӧJ;*WT(+3SjhlTͦݻdmذA;(fSCc:ޭx}_>s}\fն;eef\JHHƍ;3h f^c?'6SE,[&sUW]H=o%Iي;yجLl6m*,T>}rd vJLHP>wK~~*بw+Zzvڥ_xo9w[ R;va��!Chڵ�����$K 3GSɎ n<SH,aj\���3n?O>[:XYГpvхri޼y.5k^xŎ9Ͽ�������|Q"K [d rqނ6!=OC&s��-?y^ vz����������p,tuZl*uUҊ<���W&rsr+IQlll111jIRUUU;vt-����������Vjt {#���zԉclkΝŋwwwFܜ>\Zz/^����������@PrluVh{���+,Y^wիWw\.&&F#Fе\;wR���������ำE,1MTS=���Suu/^xC4u*����������_�R;/<���0,ċ=pE<����������8^\\5~ h^Xd2 <���1|x����������LFߡ M@ T{K���P]].����������1S{jPU1I���S<����������Ǒ Z~ hE5���#F(7'G/vW����������ů6!dj <���03T]] vw����������Xm2L~ h%`��qeL<`fK.U1Btԩ_~8���������p9]rY<ښ=���-^$}xccc#I֪ի%I7����������U[[\._mZg UXxt��า5Z ?Ԕ)S(���������-SH_m@[sj+K=���ǝ*= .vW����������{DmM~ h9,\ i��������������+sX_mZP};6{��������������˾PW"㔝?*��������������_GWWk7˂=��������������e7T_]WE'i��������������Rp4E'&$.ۧ <��������������T}M_mzL<`��������������~yꥊMM@WYS_L��������������|3jnM@Ggy��������������/gܨ>~ J6 <��������������^|Df x):Y��������������r5[W^xz{=��������������+W�_oμ`��8 >\ȾƏN8m[DD&Nr->ӕ>O`w����������zkQJ@�oB}=��8wݥ?<iaѣ%I3;O~yyyѵVE&L8}L?˽gk֬Y~Iܹ]>~go����������p}W_mz ̾><=��8?/Ztl6J]xۣW$`0h%Zdnf+4qtڵkvƌ h3huF4ev2Zn׿jnE_LJ|PT}}яПx<}I^tf^~.29z,mذm{ƌ7*%>ZoΟ6FQ9***үS3h…Z`N\./^Qp_?oytwt<6z}7euɥ걿]999jiiѭݦ{t:u7&]#Gh4j3hΝk֬uM1 ����������d?ӚOkMn+Uۡ<y���Ǚ?Xv^}Gs~{}*++ΒP}}VXѣGnTyy=eu~t$itRM2E FEdZڪ_y+RzGտ<h ӧ{='77WÒ/XjkkW]o7*f$1jΝ3:s5˵f{:%I.KgͷܢoZ~VZgR-_\{ӰaüƼrJ=#jhhY|rtel6kOf ͜9SEΝ-[j{9ڲeKǺ<uO%K}���������lSܷï6-MҘi{��qy3fh1cL&m&),)F]FQ6lѢE1}4UݮPk&I2jmkSuuDGriƍzw݊l }Q;_)��jIDATfhԆ j'8cƆU+,,Lڻo*++;^`0h5***^0g0$IW<xtl<fIrxͮ 566rd4j嗫^C!!bPKs5?W̙35scx���������_4fMM@ O<��xBŗ_j߾}z?Qvv.[VX'IRRR4ep≒={nٳݞk2t%׿V>ru<n0`Befdh֬Yr:^TX:M2E?d2$Izn\]|~DLjll5n8M:U S~~23u^czZz]V:KW^q.[s7j!W\,ժÇyYo.Ţ^|QY]"&9RVUR{7߬꣏?90L4rfc���������o>yCe{jcqբ y0T-D��GէOhnIСCU]U eefQ T{23 6Q4 ?yljhlTbBBǶݻgTzZul6_uڶ}{ǶL+""B ڸqcG $٬իWwfhe=pK>yncꪫ^~$);;[Z~}x=o)ͦMӧ\.̡^c>.>>^ *ڽuWEy_yEW֮] /9nR^QUVVj. �� k������nTZZn�n.-0&w6P{M@ HE'i#��D||f7ϓOj֭Gu9d}?ܶ]tr\7o^Kw͚^|xo���4�����EỈ#9;_5eX6!@xtr@��8TTT薟<pk =zo����������8rk> ^^c}n��XJMԩS%I99ULL$111۪T]];w����������G{Uc}_mZg PbF_ټ&s��p _I/^j;_rsrܜ<uvءx#���������H諆r{&x-vՔ <���W٨ŋnΝҁ(77W^svyX���������ﳚjie <���OZzuΟ1#]���������cP_mZt1���T]]q۩S;����������p̴47hM@ $ 2{���p/^ܜ`w����������7Zg4j{��������������3&_mZڢƺ`���е\իW����������p4Uů6-3[NH <���L:Uc`w����������TlH ;loT��Nll}LLF#FhzzΜ` ����������loM@ QJ݅ܮ ��XьIjXfl6|ͪVuuuF(66VVSO?c;����������_;X 5jOZX[] <���WVoޫXHjll졿%ut;TU]ŋsY����������ǽ]Rcm_mZ~#&k`��qcmz7Yg.���������a7b6PMunڊmXn��;w v7����������{iwU_UWc ;af{��������������˰I3W^jVB��������������|55&WKո{��������������˸*.5ׯ6^ٞt��������������lM@Sgy��������������/μ]~ JvlТ9 <��������������Es~'W^/5oκ��������������ruUj  x�������������{gќW^/)N`��������������~9۔߯6^mt?=��������������yTޯ6^\jN&��������������_NFq9~ ^ <��������������J x1i>`��������������~>\$&xa��������������aWE$ﰉ��������������wDE$&xuڵie��������������ڴRu~ h5<Ziy=��������������%-o~ h^Ae{��������������Kپj7&xS=��������������%:>U_mZhm:��������������_rso:`0=pH&]}%_Y&5p4WjjWN r:J3D!f%fUXD8ŧ)lQj INeRKSJ 8)ݫQٞu*ٵIç4 VW)jjQr(pL&%e E&)":^2ٔ3@AGYyCNJOVmE?K{whdF:"ݦ!㧫|ǜ"{]򆜤&e!2[mOVxt"!-RId2(P9tkoUנqgxFL9_%6j)l tJB}MTKS FK.R)lQbzl1JHUtB"bY}HN ƨ^~'\O:\m֨S/B <CU%E8tW߈j)g r:ڔwL!!J짰H$+2.EqO˕QjijҀ1lL=4ꔋTsFLPvhT[Q'^_!ڢe4/KXRD%g|L&e.GkFۻ{o{CaKޢ KP[gqxQmk[ NQZj[@CF}{˽͔pGͽs~>L;}GLu2Y'QtAu2NWÔyF-:-?WtARdVL VDt=E6TpXĵ) H wTQQ塚sjy eM8wz]Nd R+w:Wv/͝�6n;̝oN;CD3T/H6X>sgN%T7(=|_ɝ(ExNRAsC=eN~s"arhedԪr3wV;caasZRӰ#Y͝'ժTt>;[U?w5QhT9SX{; {mxqtp2NU;KN4j;M||_}߹Ӹ!eX6}_9L!1U miZ_:wbZPat4A';:}w;s'5 w:sWP [vtĵ*W SFqw\3lR\s:) wLjآ˅͝`̝z|Dx'ʝ2rgT|`iԪLUΝJʝι6lJ)X}NDs󹓚|@JN.THuP@`|3wãTJs93Hyߡgq8;sM3Y)?wkR;(d4.;9j}r;z*D9΃*;kbQ)9(?w ]sr^N\n2|N]E6Rphxs&UT2w:W!wV;\3N|u:wZUΝrl2s'V69$L[;}+;5nʝv 4[;Qu;m2rgr=DķF޹Z;v<A;678w*;uhTV]Ud˯^;VPV(":VQd!k.;+;m{ԣ˝|܉;R\nɩq'|/Ν s; TJk]wJwlUrVݒM`,wler_er{ qN{3wݹ&mW/wrsԢKegk.^*w&PYWTq;`W;>O;$52r^TT|M,;k@yʝ0߹Si;INUn47;CM;9~3wj+ ;9{^Ӷil#;^v=ɝ+wV.wWRXBU*w׀lj{罇kT%wBK{J CNUT*wRծus'3wƗ;+ȝU7wL%s'VaQ1sGt;Z}߮t\SyΕ;۹rhv˝**;{̝r'Z1V+w|޷+;Fխ};ܙTA/ރgĵP@TNqϻ d{ޭyG(S=oܩ{.=o7yW*w^{^EvR0;pHdz uq>%ry;>y_E"*oWSE*]"wiܪ 5rϻuy_{/rX2TTXMxj$fԱC�.w�?]vs.S\4\g1"r3^t,e˴5+<\\^gB/r\#۸;Xm\w]3\3P) tG\pF+ha/MQ^5.yÅ!硺=z^F9JPOoWy G_]-\3Ѫ}34'��.=GTfV: ՗��\p;vΝ; ������/JMMw7�/��������������r<��������������!������ա]Uz~q**w�����J.�^v)effW6�����ʹj:�������z?^{cqE`������."�������`w���������������������������j`��������������<���������"v8**.Q1rrݿ߾#AI~Tcp9s&KyyOM /(c�� x���������E4iofO>ݢy_֯ܝ^[-K6/@XgD$l^=ϙ3YǛTa9Y*cOتSJ=o|'x���py w���������K/jÿwG9Vn;B{ N{ӿߣMbu!:w.O+lۻLu'վ}c?{4nLI)ԷWK4{ edWyAuպϷھ+Q3$_)1AeiX͹qϴ#ٳZr֫K+u=V[QQkXLF=y.Wc˫_*;;O78H~UWTT:Js 'Nk=[4q\/FϿ3տO[ Q/i.?3SOaAzdTED{O)!:wlRj jiJq=���>���������nwhg?ꙕߍe6 **kw?3uD_}S))gTXXwOݤz:ڡ_<$i{C }*ӎ]j4L[_w~u$zYڵ'YAZ4ZZw,^AU<7zɪW7Jw&H6n>wOoO?Q67Nk>)^$W8|-Az:GlEk:$+PUTT!ڛեs|c��p����������vL&$)ovi*PjWգbb".e4|sw]+LgΞӖ_1;uR_yMHJ>-FbԱ}>n]{rԶMT~-IR`IvCdw}`I;4y+PPPBCʓ$5iԹlRm4s{yBB nT!f l 4Y}nްSnʕ$[]+Lsr<d2*,RM*Vj���z x���������&lQOXȈk.zk4fd7Y,AӫZ^~ ٝ .''_vC+Q+)I^H?ڠw6n> Iz}GIR-}W]O~?$ɨp|CI^\]{שuѪ~?_kGzJӳ5</?GV/Ҹ=chw{ԣ[R{}w}aV{gJ{1{uok@߶+}lի[Q=b;ZE=À>m+_h?W8F���\ M0���z̤^u/}]��ЧP1��@lE 4Be2g_L{-WUXe0* y !!*;1|νVfs=Y*~<HW4ʌ��rӟ7W���������(GE:R_uZwy~UUfcZu6IRLtu}W+��� _A ���������\JnڄYԮm#w��� x��������������T��������������6�������������P �������Ͽi'm������/YRTո<z촿|`������.jS߱cGܹ�����TwZ��������������T����������������a6+|Nɨ LFC^ ��p1s�����%h4fKNU+I|ߝ���ڙf}êS;ג-c>���������ȟ^{cqE���.ujvLE*%G 2x$����������gw���������������������������j`��������������<�������%_MɗPvvHЙ3Y^?~Lm;jtl6N8[$= mߑnL�����<�������%odYO=̭12WWֳWEEvmg}N}JwL7ȑ5z5چ$=Z;^ s%jCU}����W�w��������pyOu<嬦L-ݡ|mg~F)1AiCZ:75]y/V,Ng~Fz~~DgҳըAV@-]<Jڠӧ)=#GO?>SoV_'4{�թu[s&2k:7Ub)|Qw%j+ڵi'F\]ztDYyc:{6[KzuiួG+**Tw-ϳo1k_wยBա]OWϿ"ƒ%I'Nk=[4q\/FϿ3տO[uXۣ)?qer82Su>qvI$b6{ztk)q\m5m[1z['P4w5mZkL~Nћ[AAJ9qVcGuz}^^}=ًkdwd6**2D7IڰS~6I}K�����x��������ԑ#'pH+ܠvm-:y2]y:xqtK\ȈᙛյsR<?ި?(!Kpm?S׿6PB)͹qڴCԡ]czɘR$iǮD5k[&ISƐ_@Y9[|BBZ4Zڽi+((@y|oUnLPaa~>=u&O]zI5ubu]{}pB$)?ߦ`K;G6[8BO9 ԩCciȠ:|ױ ,sPv}Y9[ݸV4ƒ>\MS5nLM߻;IX4g BN>Sh(AAԩC}Neddz����'�������.sY dVPL&s}7eQ6qգzh~]M$I1kv'IҘ6*Lbc#Wjۯ:  QNn$nwx3)5QMtHum)(K!5l-ɨ"sq@:whRW�'I9^Fc)9?THYArj#$, x9xf}aOBٕW0Za܌b)0CDxvL&$)�T`+K>N_z_6c0TTwLk6i洁ZIRTd`RNNj u11z����'�������.kzUvXgIuûÏ7Kҩ22s6_kK -d?Jjִi I9}^}k JXOjשSWmк$Bw%ѕ#Ijצ^%IxqvI_\֭zGk׎'?T)o~1 oDY/IF Qn-Pe3zϴcg^[Iw}*;;_ӳUn-Fj߁zd?+-88Huj뾇ҡ#'`RՊQkbi_B~1}G>jjESͥ^['R))g7ҷH,@ZoN/v{�����O&-���?3Kjǘ����`?Tss d*يdVSg^/<{իէJyPsX1{JL:5snnw.*p( T__1Trs?5dg `0B����\SzwW�������jDEѭ2LmˋtPRE簪c;ym+^uyʌ*_~+�����( t �������pU*jfQ �����.kl�������������؀�������������@5�������������jw���P7Sa>n|2SA��jՊٳ�����XPUҎOw&w���sLe&mz,P}K��ױcGܹ������<\&̻OgϞz:~pv�������������2{sl VdtcW;�������������� x��������������T��������������6�������������P l�������������؀�������������@5�������������j`��������5}vjӦM_xϓ'Mҽܣ8c͛7/3OW:u=L�����jl�������<ZcԼYR=jAfw.]3f&&MRFjt >/_~����� 6�������PCN M2E֮$}j۶֭]CZJ.V>\AAA5kɚ5j}TYzjk׮nZ͞=[Z뮻N۷ך?VHH~-[V{Y <XYuk)Uw.[ݻo>�����ol�������{UK}1 I>cFzUy $_)))>srd_ױc4sR_pvN>q7ܠ={hر={٣9g+<<\VVT;&F6MZj^v֭[5fXJ�����.Il�������<Ú?o~h,^7 Raa%Iv]aaa>ǕO[hԑ#G'\!!!JMMզMg长U6TVo(::Zڻw֯_/I*TTX>Y�������������pڻw{d2d4aIݻ5}4kVԩS' =SVxxFWl{2ebbb}իս{w <XzWܯ587 ؿ_7^}U̝ ����%$>N���rz̤^u/}]��:v쨝;w�PmmZ־?(..NyJJNV8Y4H*;IQvN7oC)--Mt:-Mcbu qq[W{QNNbbbdw㕘Վi]}o����WXnW?[£`v��������%7ym+kC[y<_DܬKRryPgױ<z�������������������p9�������������2't25U}m@)**Qw���ӰE'gx= ^O?kvIyf <XÆնm4fuUwִSմiS8p@rkґ-Iӧd;wN"-\P'NPxxΝCIƚ5kvءN:iԩڸikG֭[5սGڵK'OV-~|M][G&ɤԓ'dRdg+@-RjjBBB4o<9rD6ٳk.o^ӧOצM4]wuuȑݻvܩ'Mڷo̞غuua-^H ?~\˖-Snnrssxb>}ZfYWRb֫9shϞ=jӦf̘~A}јѣe1B;4axkN{̙3հA<tHzB;Smݦg( @ ,PrrԩnIS-5uVCnA? Au 7Sǎڳgf̘qqA-?_aaaJLLԲeTTX ~Ȑ`Эުcǎ)::Z7|~>p@͚5̙3m6uM'L(!C4tmxҥ8Msܹs-YDRYq̔n/EDF[n)&M4k,m߾]]tє)Si& 4H#m4j(u]vҔ)SԢys?p@7|bۋ)5UK,QvVl6;BCC5w\>|X5rS4mڴx0@׍nu]^ziΝ4qZj}kΜ9-ŋ'tR*//OESbBׯmhڼyxvW;vЄ 4k,կ__[oUŢǎiٲe^t&-MAA?OZiƌիW/Æiھ}ƍxq 5jHԂ te*33S~e4`x:p7ooQ۶mSn4axm :TO?cƨ3O&5o\E:i%;:{lxJIIQTTn<xPMhg<MM6i6lmۦѣF[nڵkNf͚_oYxe0u)-YDYtI53vY|M6M7ntȑꊧ=sNM4I-[uӜ9S>/V@`N8)''GZhN:`͛7O {noNӧO?OFiˏ?jתO>ڱc&N6mj߾}T:E l3򔝝nMiii rSRRjM7i޽jݺf̘-[رa>\?O:h޽yjذ<[,PHhtwVPgd2i:zbbbt7kjѢnt]w׸+ *cեsg޳G3OWƍi<EFD(!1Q˖.UQQ;222$IzRw?Mj̙駟ԵkWM4I6o.'W=Z]Fw.JجsTXFm쬱xQczC;˩vL&<yT<y؄5hg߿wؑ#GgmFٳUn]:|X-lYc<klR֭[nٲE{ ǫ}Y56$]c uUcϞU3<kղeT:醱cթS5OSxx[TR5UVqg5sƓN螳yXלͳrj9g=qB5gs;vskk56&{檱^5kYc۷4לm�9[޽2lAAAJIIqX9&&~s}x~Jؙ3UA59ۙ3gl5gOwW\c=lj9ہԼY3c6t 2T6m@5̙3ksvs6W4HÆ6W<j)jּy{d4*GM=yRaaklǎ[jΙ3GeܜsSdQcޭؾ;akV{+e$Ɩ5vPFm䬱 ,PXh]5f;Og&;vgݶuw=g󬱞s&MXg<rj&n߾]]t񮱮9v5媱9-x 56+K6.Z5Ê󮱮9kkuyؖ-jaW YcO:]c9sۣn޼Y_͞5K\䬱9[nr\56-Mf9ݻWm<l{Ҙc댧Ʃ}kl9\fn1g]9gCƍ+&]c;w.s)<"yب(cVuܢZY񬱝:ij"S.⺈Vw]b6k^"}/uqXs2uChHUE^q .s:8k%.RVr]$u5%Eb\sUc.Qc.Y".u/YUc}ĺH\FuEB.к Erug]5(V.'zQc.⪱^Qc/ںȱc媱孋PֺHTԕ.Yc+X:eڴio߾ז-[ԼCOe<⾇`Vua��2k^Lv:vpd2ThHBfrrs,٬L?~\:sN<LMUZZBCCu1gdo<fgg+((HIII*((hTbbv9mȑ# Rn^dXu<{V'OTpHRSSu6t6'TfQ$)!!AFf`P<ұcdXt6=]'NPpHN>SNgϺʒlvfbb$@(11QYY:z,ҝmx'tYѣ̔bQRrrssm`0(11QIvfAAmvN͌L($8X8qBgΜQXh;vͤ$*00MHLp`2fsdYfe;玧46]j3xJHH#Fcq 9Rܦ-YW +)w<;vLx:zTYYY6ˍÇx2c1{S6SOIII))I6 W<+11QfEYY:lO:}Tq ;̙3 u;w,mxJHH<) @JHL,OJIIQpHNVMW<hr2񔜜*11Q6}�ٜ1W<9<ROgθ)SX'WI>99rD&I6S^nmsƓb&<kmMNVG {Ɠ# k\ܦ3ιOJ?{V'mrSGܹsxrB g ':,6=)):q}lIIIyē̈́fY9x V+_CCShm$lR1 S@53\DWKMM-aW<{ŰMw<wxKjyMϗD<bWX,x X|ؐOI9Ml5TOyyJt^سgO6=x*Yc %g+FݻMOW:|:-|MIqǓWMJRGȑ# w9J.ƆJsmzưWs8d|o=l^53tX{Y5swj19[UklP9R\\59[kbcnӣƺl>9gw6+>laa:z222,Oj+J\=ɫƺOؤ$pX{kw'לRO^59WfcVƺ扥jl9s@56޹k+mVƺ)bYc]<ǜ}MtœMלwEmSc}Sbbls]cKy%l'=<VNOG#Dgg=l5sΖs%uM,9g%)s69gKL5k&{4wGȑs65U5ޖII9[Bo*UZ)*:MEr.b\"KE.HNv/ºHFz+XqEd`]$(0P5" E *X we8孋קEY)V{]yMh]$Z">jl8ԺHh襽.R<R^9wGxjx\Y E\"cƌnWZZvܩ?ϒ<?24w���#g*3icqw_w���.;jΝ�����XJ#ݮ_G+_ڻ+wgw��������������c祇 x��������������TC;������QTvx_nww�����~W__n�!l�����Ehmn������\T{��������������T��������������6�������������P l�������������؀��������R^/*.9*((,|JS֤xgd)/㩩ھ#A8���\-؀��������R~'zw$I|E_}}aӻW?Loy[=>refe%_c'[ch]Ȯ^^ރG3X#GNy=5Ƨ_lՁ)˷wՉgklLwl=Tc���T����������~={VTTZ:V{~8ΤgQ~{́Zxo?T\Ek=KHIL&'MO}{ݿy]#uL5cJ?I7̙,=nDR{uA߻5s�։ԓݨvJԯ zIשEzU>&kw,^yKeg/j߁㊊ Uvq>_c~FmߕSt`K&~}㵛cW׫ ZGLX#!sPY>U^awJH<Cj$g׫Ȯ F^ݨ _Tߧ 5?w@8;����������p{oUnL%8P~N~PqzϟY|]_vH6n>wOoPxTԥSmߙ IZ5yB2wڰSK+IJ=WcgԮmR?G߸7JH:kxړVnnWl ҳ9zH' A7,I:ts ԩCciȠ:|D=lu_<}vY&6W>lEk:C1jY_|���T��������p+PPPBCӘ6*Lbc#Wj$5i[\.>rBs3rԲy}MWF^Sf^}kn@=$xkH6[~ڑ^ܹ\։Ԋh4y6-($\sPrսڶi1@=z$^6BB2 %IO?>[_|nˋݟx.+Wl Rt0YAqnzTXX(ɨKc4^)4ԬsJ@6 ;ѥc0TT���(O��������̍C<6|G=PuM5g3ԫo|AIɧ*<w٫?}tX6efꉧ-swӏ?I-?$IڲOGE'u>v=܏y?t }4>?J_|SsP ;?Wuڵ'Iql5o[I+}Ԩa$Q=b;ZE=}Qi_B~Y#tF/^ 钝W^J٪WV1cZwx檄����'Cx;��9r2z=i|%w ��B~Bm[��\l"}Q]6[,ҟgDk^2@rr+zNiͧ?hke6ɔ(j ݿϯh vCC&S>gf+R��wFO|nĴەkϖh+X{7]i��������\*xf2+iBX8wBC-9Tw;ymd3 ^$Uy[W4O 4*sN����T���������p TXE6w7����\b.?s������������� <�������������������Ebr������� l�����EqV[m������/uz?u:]P؀�����bCUz) ʯ�����i)55�p0��������������\؀�������������@5�������������j`��������������<�������������� x��������������T��������������6�������������P l�������oNmڴ)/yI{~yecS ����U x��������Ԁ~Z+{L~7kVG9lVեKccƌф}ҤIjԨQG/����r<��������jiӔ)Shڵ_m۶кkwUV)==څުÇ+((H4<}f>YFأ5kT^RmwU~֭]ٳgUtuש}Z oukw>5knZ=eeԽ{ww����� x��������Ԑ{OQj?w?f0d4$Ig̐hT^J/~Aᒤ+%%E֧RvNv:vfΜY.nӧ5g;Vg֞={4gljժjfWVkںuƌS ����% x��������Ԑ~XݏKAYYY*,,Ttt$n+,,V<RSSu}u2:rd6K=?$$Dڴi>3׿QÆjݪ^ EGG+77W{%I6 p8287 ������������T{uw^^=L&c~F6l Iڽ{OvmJ:u$zJ h@m_^SLQLL32W_U^^o>zw+00P&qګꖹs}:����; ���TNϑ3뱸NC/k���\ǎsNw�Mڷ瘘)/7WIj'KpIşb'I999Qu!q\NvLsr8.NujϞ=QLLBCBS||11:<5���jTw2bJgKxw׮x|��������5䆵4Mremh+o]蒜|IJNv?WJ:g<_��������\XQQQ2d$k׮8aw ����������eLQQQ���-:)?#ȺM$6LmZ}ݧI'w^O jԨu6[+;'G'NPQQԩ"IRڵed2|)::Z VZpEDD(''G Unnjժ%٬|( @SG2TXXXv9թSGj3,,fDDWEyyyQ``UNih4v*((P``bbbWRmFEEیjh496VCv6-PEEE s\ڵkj6 6\EFF*$$fPPMT6zoCBBʎOV5=d {ƓͪSymFaxO6<W"=۰PEO>bx2sA*Þ⩒1ޚ]9'G!1Ocbd*+sMS<&zSkg<UO%XQ< U&zSkg<UOfWO%.j(.VNḰ56<\ae]^UKAeSujlyTQ-oV[^<(r59/&^)s59eRc+]k1Wk4*v`DE\c+[n<{lPc][C"ժWH5j,"֜uklhhWcY'9}*:&FyXIjޡ2OqC 0H:}찿oq^<��ȹ'ӢbZV۾7(Eoe9stw~ S``nFI҈#Կ_?կ__&NԠA"ժnݺnݺZjժZl)ժz5j*4$D '$=Z{$3xbI[oٳ%I}Ə/Iz4tPY,YV]uԑjU֭լiSYV5lP;wjUDD/*I=j7iӦiwHϛ̑$Wr#?#F(00PVU{VLLVڷkxYVũcǎZT>}dZe24rH=)'kٲeysjܹe˖iɒx@#GdjU>})ժ;*..NVUj߮VbջwoYVjĈz%Z~+IM7ݤIqM&Iz`r5JdZ5EDDjsjذV5m֭[jN:ѣV, {L4~xsݒٳgk᭷Jn[X3f̐$w3z$iOhРA j5\zje˖jժV֭nݺj*$8X ?.I;fIotӢ 5{֬x7N4tj{n^ԼYxj@]tjUxx OG<q풤k35O>F  YVKԶm[5upF_߾x3NeKӼy[4y$IC>k+ԸqcYV5iDڷjUtZက�1B?$iĉ՝wJn&s%K4mxzz YVÝ:urSӦMզMw<SVUfYÇ sӄ t]w $IvfL.I4OO\A)O]~ZjѢ;ccc+$I7{4kLw<-^Hft 7 Iz| <OݺuSll;Z4o.ժk׮Z Ӡʕx%IӧO&Iu5rc>Æl6jgϞSvq<i㎧ SNx߯VFzw<M:UK,9O7,Is2M8QCiĈ pSZdZաC5iDVU7VdZU+*O&I׎|P4y$&rxZtz]'(ժ~}z]yS۶meZUvmrSPPF }Owג9gkt&d}I 8PaaZڥ4h ժ͛{]{Ӑ!Cn|<͚EŚ鬱sƎ뎧yœWmBVU5Z}3f65;̳&i+:;ɳ 5J,_|M_yg늧޽]\c۷Yc"#i׺kd;[4ϳN⎧<jlרQq<ǫĨw^^5G)kW3GtG]x.ժ.5Y3۽;zqj종 tg3F㏗yXלͳ:l5לm…lܣX۽b=l۰8l0`9^s6W?לͫƎ לW/]veؾ5vH5qʔ)s6뚳=FScs&MUc9gsXd9WScl5vx5gQcW:kͳƺl%kA;vXsŋiYcW<xSs6Wm@]s0 8{檱Ӧk |{Q ڮ1gkذͳz٦NyX9ۈ^YcsƍUc=l&ԜW]tלͫz:v􊧶x][r>r 0Wg-9g2xYcgb9geZR W__8l5gsukYc˻z<kl6jqMys6[Μͳƺl5kl^5sVUc6U;-&&F56((ȻNறsqv9g0@ۥK5g2}M7n;fϚ]c=lXeK"!%Eʨ =kw{ꬋxQ9[޺HKh]$ĺHSxX9[peE-*s]dH%E\)V{]G-k]h4^u.Ru;]s6[b] .QcZ^޺G"+.RH5u+.Ҧ"u.Yc=E*Xq]o)Vg]ijG+X>E<j/Y=kǺ?~AE`]佇JPѺM孋տL)o]۷d-k]D5gi5纈Vj]b)w]da"랳Pu{]s*.Ru*XY0攷.⬱]qOIrd#q&Uy&w���UױcGܹSR6mTzRkQppf98a$$HÏ>w��*s�����pUj*pia-���rڶmmk]�������������`%?펍x����������p��������������.Gl�������������؀�������������@5�������������j`��������������<��������������$>N���CӕsU'<*V;_n��:ܨA򍿻����%+C%DX )+`;���/WDRߡ���|8]ݍKVc�����.iz).>~]}twB|W_C݅W�����������`sd7|a��������������<�������������� x��������������T��������������6�������������P l�������������؀�������������@5�������������j`��������������<��ƚ"EGGnݺ5N}>޽{w 8��  o'>>^�����Ut1HR6mj4oLÇ Shhe7&27؀��PoUmhB]tv.GkѢE5:\QQQ5>F��3fҥKkA)&&�����UgU׮]k1Gxe{  ь3ԲeӔɓ5jԨ vqqz`9QW���nճvޭ^FҘѣeX?t͜9S6MXw PaaVKjJ7͙Z4ct1B6M/JNN'%IԢys:uJ)'NhaаUTXl-N駞RXXL&1|7={v_xѯo_͜9SFI-*5oQ۵ӣ<Oׯ/u��aÆd4s`_J?իoVo$i̘18`6l I+d2eZuj۶N>+Vɕ+'믯R �����\< ̙3˗+""B+xBھcV^{[EUM4I5RNN~>xPKsɒ%A-[C=$ͦO?T~V´i&[^koZ{GFAZ:y-[Ν:VZ>ǰk.8q1Zuh۶m^cݫnq\x>""B}F}7ںm>1>\}/{Q';,^ƍ?'WoY*.v|_<��rF 0@ nU;uRhhbbbp"=zTfYӧM$LMڵkկ_R<pN:ڱs^ze͞5K]tQPP?j۶mUh^S>9L&xٳz'd4|c,i!:~ycZjRRRʕ�*4e_wլY$Iqqqz_Z={T6mo>M<$[NOVhH$)&&FW|&V޽g$կ_)o�����.}ݧӧ5dfEGGkz4{,*%%E.Xug^l1_|EIBBBd47NE-7ׇ~~[AXh9"M7sN^6ҹΛ's Q^)cڸi矗|'Izkn;V%tM׮?~߯;nݺz甘 zI7hP*W:6��#00PEΉfaaB7|w-Ir8 ^zI| 3gd6+NNv222 ~wO}ݚ4ql6AA^_ziHXQsQd0Tz%=3:| |I��sYYpo<wN'SSp8Ǐ뫯ro/o~Kaa l6{QF+H{]s>V9�����UVv"##%I)))r8֭[G驧fSVVrssepߨH~~F؊1|t~\ɵ<(77Waa^DzX,***T&Q ݛ|s}|2qeذa>m6m>GcRAA+XB*㻠@A R;t|-��@ ,Ik)q嗕SN?cn:z*,,ԇ~Xo;VcǎU``32$I#FP^kau2 J=uJF6MI믿 gP~~1msU8ƒ-ZFRcZj6nڤ{L}Q��WC+ Shҥ믗z_~ƎyTTXeYd5knMo_"%&&<#ág%IgΜџ^~Y%����p8;TNn6 /(l֝wީ0M;^;-SNtСJOVZzgGA˟]v)::Zv uaIU[;Pff^_,Izl…WߗcZr6Z듓s�}k  ѽޫDթSGO?WK-:s Gy.F|_ M㯾m���:߯s-}``f܏K(1)I_|񅻍HeggIHHrss+/F S1TbbbVJR|^JصZ��5Bh($Vs"##Yk;Pvvpe8$!Te����ը*k /*sN6mV>{mbd2yTu/l6n*ͦ }tmrur%; @&I>nMwCt`7UO��&6?fSffW7%ym Q5*�J;��pu;,%<UGy-Rǻ�����Uٜ$IGg6૽|KJ$Uj%㻰9k:dl��~]���|'�����Dw7A|_z���������������#6�������������P l�������������؀�������������@5�������������j`��������������<�������������� x��������������T��������������6�V~^p w��Awfw�����fAP#Τ*C/wd 5$>N���KCQq9~xn��:+fejw����K^Cdp`-4z{l������������� Z�������������� x��������������T��������������6�������������P l�������������؀�������������@5?k{Wv����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/img/wrapped text.png���������������������������0000664�0000000�0000000�00000315541�14332737457�0026503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� �� ���0@K���IDATxw`SUo$M[:(P@6Vv U{U "/" (dOF{ҘIۤ|iܜ{'OyXVB!tBݤ BIgA!)΂B!R$!BH: B!HtB",x_\Hs=]ᆜ3EO (Sun_=jx\>F[ٲk$Ths ۳mrΤMv3?&?2t}zH]'ZJr՞nvPQl]3i]쏴ϰ$?C!"EYB!D BIgA!)΂B!R$!BH: B!HtD-R OWCC"Hg! Ue]ժUpBnOD"# OO \rɀ%F._E2x0jm۶/_>իJ`4ҹsgFChтE0glBCC1L48&M.!M7siuYx15r$J(M% 猷$Q*T\.]T*)W, FC>`{hZnܸヒϏ5kעp%Kt)w֭>}___�Xh6myf)RZ͆駟PT -h8w:uQR%OoJ <]K"{Ig)cd2p=]wp" @|\:e4ˁ9s&M70TA+:zt: z=ͦOFW^ɖu5|MO77ǒsƻ^3D²K<y2.\`(J9Bpp0Vն2x0U*W<|0uӇJ(v~ZL>ӲE t2!!,Y?/ΈQ(Y;v0v+R`^Tj֤B f ꯾BPY`KSL!$$Ù2e 1>}S2d`+N1}:ӧO_&W\T^<L&߿O=3EGΠ(Vl{.bޱߟ u譧ǒŋ7~<nݲ6N`0�DFNmgӧMd�|ҿ?W\ᏽ{5r$wδi8~Fu8r(eJfӼ9.\`4o֌={]ת+cGʕ-ة_ZENXt)ƍ,\&P~}V}=իUH"|پ2BmX#?C<)W9{!!!DFF'44mwDCRl-Kd971i4›�'N�@RXd ?hDo0𞔘f>>>ۗ11̏BVc2#4wn q?`0P(Lחre˺}zDFFza|ar7E/s&rKKӾuGGIg)գgO򇅹<VZ ڷp7nt{2vI֭=<GlRĖ͛yw4i??ez?q#F0nX/j/3s >m�yaҥ\|1c`2ط?GnݺDh@k!!!tL_Y3g&{dԬ33c0Oo3{< dSfȑ<V-[bX3v,W^e4hycDEEѴIZidb,_ao-[l63r(n޼y5ym[T*%Kd),A\Թ3^ e&OOKy碣t@reͨѣK\ؾYM6^OM9YrPTܿp=ηoNN0eo.Y0>�gϝcܹ.SF Nɒ%9ck׭?tx\7w.fׯsUiu0eA)ȾMm:}+Id)j cN<z|1hղ%foѬiSTZNG]Y&8tɥ�PL>|ȼ(n޼ !C`lݺ~($j: ɉp[cCGbϝ; OV-[vV|%8wsyʞ3JEXX{aɒ% 'ç?z 6p%*T2 TR\q<DFFZ.6-1EꤳkX�P~+Wk4@ Z d+#w'Yg_>l5[,(Nwe֭WPTM&ofvaww4Nd2ɀ(Xnf8˝ Wj? 000e,Kje>һo2SN>͟"qqqܼu/-$=ke �pBL0ƒŋ9sӫgO^o 1tzK:u!v6osN|];wp֭\Ii\G`` GXѢ\v w^vhܸ1�/^dET^ݥhBCC=O֧ݎeI̧]zmZl18r31f'3I/SiBZ6vZ*˛7/w*%=0'Ʃ3<-=___4 nZNL#OTcYb[=}ϸSN�ǧoiII䉎a? .Ijyz/z>q(q;p&ٷ !BIgA!)΂B!R$!BH: B!HtB",!"EY=]debtE2I:gdMve&I8^_\sHo{&w)[ 0EGٞRΙɮsFGdgXft­N8j'aaa�ܺuUN.?2 !BIgA!)΂B!R-0~NY@>z]yE=VzE=7041K- �O=՟f28;�G%wyGuE{M3B!RBHHm BdSgAZj*k@gGݺ1}4cZ 6V͚ZÆ1x`Oo !r%: "n߾ͮݻ7/-O>�|:`�_,[Y�3{6VdKDB X"QQQ�4mڔ)VһwL)S(_79wȂUҵ+5kDTRretR\ٲp"6mDf<фxX<m۴aYΝm0ax&o[vڵX,c|jQ#GRn]T*+/O\]yB<�^o j}}1LTo[a2j0}}mb2B P*tԉ]w+Wbn_wם;]޾#_|T;lU˖4i҄yB@pd.T&w>Xx1gN`0p,^LPPG~nݚM7PI ȱ]?xl# ݽ{GXf/�bbbqɄcwG;wn6iW_}& y6MwmdcN]vߟx�F`Сܺu HɊĻ !2fӦMo!Cğ&�<h[,ZÆ:J:<[VMK/ĕ+W<d!r 1: MOT]MɪoR`?r>Cӣ{w۷knzOty pȧֱϓ'eʔMl8cǎyzSCx.�YĞ'<u쩭O+V8<(}O۶q}Ď}ɒ%9r7n-3c Oo!rg$ xvw 4DBQYB!D$ BIdA!)ȂB!R$!BH" B!HDB",!"EY (((˧="%N%wI!DN!ł8oVUbo,"gȂ!"C$ BIdA!)ȂB!R2{Vӽ"ltB3pn!<{ͦ΂ODδj.n~w&˾yNXN-Btʘ:{3V`ӴFaV(9ZdV&\L@/o\ʝ#wPT!iR0fxk~/;eΜ;wbs7i:pE۸iP/ʻcܻȴ :\Zbwȟ?9Í[x:�,X�>ns߬Y;>>JlA|2K�&3guqhkW3xjzCIsJPС[2OTXmۏrNѡm]jTP\QmFax+[ԦXV Ӵ%!DuT" :E1kCJ%ibb덨*-F"yx6ݏeIn; g^c/ƺo/w=">^ώ_S\Q2c%н뛴hV#A^~,=鶣�вiMʗ-¹ܼ|]'m>n2ԭ]&g; o6x]ҕ;.guqikLluj!o@> ΜsӮM]%�3vêL؞lp.j 4o �f ":zӇ"Ky:*c ||&4׿V* Mu3CT* @ES,ZiӲV@b(Y"?2CsE7�P*0-r<�&F_OWSH>&3�j*}^ -tl3*uHAU䏯 .m-T*J%F%Kw PbIw/qVWC^rht1 RIвY-�GVe_xvY4E0{&`CLḭPq:oe̍( ^{5Q?8je*vRL%81n-�*Xg:sŶ~`ګܸi6̘ adn2Z8+Ҫy-]˷nx綪|R?͗e|>�^#VNtH7x!<' 2hW:zB:B<[<{U+^<\xE�EXCeAAA;28ZVf *O & ju8KH0v>In#$8Zl{N3j�2kҜ ?|pN+ќjSkkJ~r�j*oP"Ɍd )IՊ$s6ĉxiJBH�ѤpӤzzle6}Q�ԙI)Xʡ#RvO (D%pv] v =C<]d%Bd6O싕;x0y±AOWQ!Y"Ö} G_K8mNZK9%*Fg?s`ZЧ|Bx!,!FG/0VŸ/�ω`9@|M3V(!DŊRM.'ZhzcN$% x9B뫢d|:t%^�DHH00fXk qטx+͛`ըhټ i$!Ȱ};Wkvd.Q3?t)1OcO7C!R!!sr"%Bx,!"EYB!D$ BIdA!)Ȃ UjȦkB,$z=/<mw}ZΝZͭ[^j !DD` 'Z7B<s$ BIdA!)z:Ya;+oz6jU~+!dx."W>xܺyUBdÁm_=ȂXYUy.<k'ȵY_HfCx0t͆C䮣%~P+rj !22=1BOѰku4;yl̂cx%Zj*kcĝ'ҫW/OWE e=ʖeWĿ (@lSE!(((]p{̧E8Umϗ,IŊ^:ed?$<<Hɓr*U۾vs,ܾ}]w;<5o_,[F>}�t�Xٳf0glV\Ɋ ϢD…Yp!�Fd ԭ[jaòe6|lYO=~eeξmi:Sϊ2^#GȲu7j8Zj.T(]c6~!!!L?>]>)'3sƌ իi&4x۞z&-e 6… '[F?tx.#9%4o֌U\W_MWf̴:z7F<gS|XjUt:}e,Xʕ+ӾCΙCecEȟ͚1#5 :dJſ;m_w߱qF7;FTTM4u6M&vލVK 0 0_}B !!`2{EZl׮Yh$..zI-0͌57x]Bvfh|}deF'88Hj˜cz*vAin[o9͛L2�jլ{mۢR(Y$Lqg=3n8ж3f0d`j5۶mڵkΌ3̕K.1q$^]B .]2d`+NhРZDT2{N>P;\իgOcO)R3fv:ʔ)_?8_|;urii BRq4o֌7&0W.~G�}Bx8SL!&6ӧO3uT"##iѢ-pik"E6l _~oΡŋ3}4=zą 7~x _\zաޅ v؏6nt9ϋ`ƏG…9cF&...}7o^/Yt=xbw X|9˗w8T|E5j�4oN7dƍiS;f ӧO_&W\\*+W.͝l̜5+ն֭[?H0m4x"Lat|9gw竽f͚Qpa,Xŋ4hڷw8??>ȕ+cnj!00vt֍Çdb>x1|8%Kw᳁1Y;vǹ ss8#"##OH` l޲eyV"γUH6V'@dR۷1Lj�NaÒkg<߭[9u:<]vf͚�h4ܾMNXz5:o Ohhɓ'Yv-ʗw[ HHH=cN<xիSL>|ȼ(n޼Z??J%i+Ν;Kp:vģ:Zd75m;q 0x[֭[ߓo޲'N`2y7\{jqntVvmF#wIܶWGa0(\0JԩSL6 :tF>Lzi4c#j|=zħW@F嶣�v:7!!!ӴiSw+@V#:wLQ*lݺӧO9綾{lg>ޝoΥLJEll,?RJjmǛNGS;/>|ȸyjG!ssJv9?o$N!zMT/>>jm~|6lҥKTP!Mm_ϩU%T^֑缟ݝoN5ɟ??j Nr &>|WTz|l'mmĉ΋w7=+e;ל?9tyn_jwi卑�pa * ػoaaa,Y3Oc0pK/&((#G�п_?Znͦ͛EosF.;<'Ncɒ%|2`�?3F@llC)-lbZ1i̚=aèU&zVK|�X,`0luT*mŒObhD�)ws=1[,n/I&MȱcLj>wJ6FîݻYh}u[RMֶ nj][Zt:ӷ/cbZFTb OS]pc~.@ӹ|+O>c-<z_BbTzͶ}||\^wnFh0X XT틤Ιh%WocgOw^ \Ε+9c:z [zL&͝;MADFF)5%~~~\t%KУgO[ qŒxxbbb׷/ܙ1l4mz`{7y|nd?CKpSd_Jwi%c$Y0Ltԉ#F`Xҵ+  �9j @4!CҥkWN<_. P+Ǹsw޽zQT)}ժUsԩSǶL*UXt)\:< e9~#F`ر/^<M>mAAA̜1Q*, .̞?WϞޠAb س40y_,[fƱ=ke rι8pfΘAPPkطw/uan˸r *UruSW2x0={p[f`` :tp ם;ɗ7/e!ɶ5je1TzEbbb0L||g 6F\tWrիWYhիWw_Sڿqqq Kpp0m[hA<yXt)._h4ҷO"""h׮7viuhѢsVܖi_xV,_NPPwys:֫Gň'&&3gΰlR�7n`矓/_>tn{v,\oOSѣ[nctt4焻dΝhZ رc<vdԭ[e?;lݺ6nܘ1ˎje|;._&8$%:ŋmŖ͛[.&MmeĤs_f~T۷oOve# 9>;ömۈz9be<cp5> ocr[,t:]_r%=zt?͛;wkZ NI倀�2ZmuLΜo ޽{n_ut92}VRIHH:J%<|02mϤc]䶗~WlYto tNZ|ҿ?tr)l݀-퓴=/0?8KIѪ'hpp0i>~2r-O<˼Vm,RDޟfbDgΞMv+#zуifQγMoǠFv)_g꺞Lmu2-Ij" iy'2ɓ5ju,]O&M([,gf[2˳vdիRZ_OpgZ* _ow]GG# {{ bܕPR%=\PP!\|9UP'Oy=i)33<_$r9 Lky8p�w4֢EC\v®;ﳴ"uOg 3NM7#=\re ,s&N  *d{FHKO*|+O[d67x!,x4ς.((ϗ,h4re~-&}=6mJ5߂s_%7‚8{sM^qqqt?$E1|8 6|1-V B(Xr%Ջŋӯ_?N>zRˍ%Աtnڴa(F[(|9FM hۦ JS`Xn}[}Z MHY#$M {<7OSιT*aaaٳ%K^/]v<p�HLm6y~:vġC�Թ3wݣv}<֯w,8<7ݹs5 ΝCӱn:)8�h 2.]:"1< ]9wo-8p΍`2d� ,:=e2h`$+Oʁa?7[Պbb6 %~ns[͡t:lR.Jh4Z'Ғ#D< v$ r в<[p9!00ѣFQhQ^@ڵy3ϣm۲y3˼r$(\;7}vDDDW쥖weMwn̙=^snd$ፑ !zFg䖰9FjfC$dҼR;y}F93Oj49i'9*UD}Ϟd#h6 pt G*DN$T9/zXTΎHHHpXs[$Yw?9X, wDfOm(=*̆BdBYB!DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\IdtBWY{C!V`hm?[@Fy,\xEz L{g0OZ7"x?-R7(CYOr<+9eYB!Y#!DFK/}碣=]!2Y#cVZ ڷtU�8q"zBPLt7$$H^OvJ*y"y㘅l,XqDvmv\Լy|l}b2fϚٳYr%+/'< sF)\ /_>ztDFFҦuk|Wxu4;IdAUZNG]Y&Jʕ+ӥkWJ%ʖϏi&7kuZ?ċ-ʊ5r$�zd…DEEV٣/Ux!<ܥSfMkۖf͚1t�Xt)_,[˖Oʕ4q7Y1 BGףVb2lT~L&|Z�Fcc__끡aͱ]?dJ߿χ]h49z2K-[P(TVxež)Q!sh"> Ppa;ƻZQlYzzW, cHdAQpBL0ƒŋ9s4 .db8r�ulڼJR8L(�`XPTt:,Y'?3iD;Fswj;>�f XVt:k^{5.o]!DHdAQ&:w9jc!Cr-F#%+3^I?G�s FFf9\r{|ٓ&0|ԩS a V{q=DB6%eD,x-YL|Dm qOTKKsy#�O3cnjkݻ9bAh@dDɒ%8afO'.93u4;IdA>_u=f xqr><QGrJ,]4C3xcdA28 !D&TGM!!!r|юڶv:%ςBdFR2|Aˬ[ O7Mdo̳ !xBzzj$$$УgO[nBA]iРZDT2{N>͌3̕K.w^�vJ|8z(˕c̙̏bI\~# 2fA!FV͚L>a@}n:tիA`4q'B.L]Qthߞ|+t12fDO$PIs#(JVXALl, TZ!͛7 B <y .0axoIdtOxN9C~OHphZtٳo֭[3o\_u6ffqtܙU_}Ō=D$`G" BĉVǏ'΁cG�>0�gϲyy!�{ ((XV+W�{}|}}+<u ^@-s玧*DH'A4 d_X,BǤIl}aofl ;YBn߾y<] !Y#!•DHdA!p%;IB!\IdDBWY#!•DHdA!p%;IB!\IdDBWY#!•DHdA!p%;IB!\IdDBWY#!•7Fٳν zOBmKҼ|<y2d=O"E\s=G6mUϖ-[RZT'O޽{,SJi<˶M+ν۾≴lْ *8\daa꫶ʕcʔ)ԡ(W,-[p`�9<xAGѷOF 'Omϕ.U+W:9u4;ɘ!De6ۧKG~ԩSܿ_~BÇ;nK,a�TZ1G-9ҥ̃pj5JܹscN̝3ŋ4>mꫯP(j|DGG3dPv׏ڵkѸIV+_,[bGwh֬W\`„ X"&Çs tÇiߡw `G: B5ԬYW֥@X"#G"_X%K ""彇bĉ SZ2˖-K\|<~!eJp w7SByknTV#G7O^UjժqMs ߟ>|j*ʕ+eɝŋV:tDl۶ +"7YȂ"ʕ+T(_Vhslܸ/={ѣG:tի-b6P(-SRa4d2d2qF.^۷^111<)"66yRpa[tjEiWBA\\& ???uݻ(JP(XX,O1 c9j_(]W^\~%KK/ٖ?} &.]ڥuד?,o֯g̙.?wѦM>04ɓ̛;oc8z(sfvێGϳܶqر\ +^-ooO"1 bŋgڟ Os-9,xN8j'aaa�ܺuUυ'tp-XHܽk}])By޽KJtqe._&>><y/o^.]L<y\̓'ŊҥKǓ7O.]Lҥ9} 曜??ʖ-V#G(Zq$$$8]{9}挭6ux�ț'χS1"+O}3M93u4;eSg88&9D{Ig{yQݻw'#&Nȍ7.lo2fALE 1¯;wrƍdߓ-]T�_߾slmρ8p@Sd `G,!<)-~H2qDjԨlZ??^U|yڞs.2e&o !3'-ڴnMpp0*KҴiSrO?㣏?v)wԩlܰxСYf"W` uRm8w,l6CO>aҥ;u ;YBxJR~NG&M8z(_ R.?l7ZR>8wQpzL2s4k֌zcǎ`* L Ŋӌ0ӛIx7FBgRr=BVөcG9Q*KjE7LP`Z1&F 1 eҲ>ʴS=x!$d_aQc~8"5Bp=�u+0x^|1GӶm={#FP(Xt)AAAiӆjժw>�4 7lh4bZܩSbC&"Ș!'ݽ{.]/o^._̀s.gΜ)]x[NٞKN)S4ݻTXf]9q6D1aDΞ=K||<#GBRqq=ij,HdA̺{m�#G\ޓ2II\tk8ymT#;YB<뎟8q'Y#!•7Fd6BdUЪU+�&OIluVZֵ+ߎzg+7Ά{CO 7zs&wܔ,QC38t0;vȒzm$0O7,!ݿCt2%KtՄxcdA,!-PjU_*lcd6BxU !H'A!RתU+4<c$`G" B!+,ؑNBN o,l!RI9ijEfCؑȂBנAvؑewȂ,!&4oΪ+Yr%~MߠAd# Y+:k.!F ???BCCcg9`sZ$Qx>^ĞBL?c4h@ՙ6}56tD aG: B́8p!r8o !‹HdtBWY#!•DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\ycdA=+:k(!R{&eU,[ b)p}tf',!V[radn{!REų\x�עOx""""8qB -6rxmx:*!‹xcdAfC!^DfCؑȂ&at5R?, ,s HS1$Y#M2d:xODeefBd {5Q" v$ {}<KQ8N+ &9eDH'AxBG۫^:ye֭)clJʤWTa;FӮ݇=ZzBTTE-R,_O(P6lH53}*TvD!!!DFFBxUVkoqKzNQGoN||qdd$_,[?PB/^eKŲe4hЀXbΔzreFI}5s&a/$$VʖUZ5 *뉌QÆn_J޽3} |HHƏu̚93|Rii!C(^xSVSJڵozI'jM)gxBq-3whG,or5 mjْA[oѬiS|}}ٶm˨#;w.=s|jJ䕳&~@?0~)u￷}9[?0r'K`4|2 -bjmF|W* HΝ1eFFFҢE -Zٳ l63q$4i6mӧ֭Çg̋bȑ(Jط˶~qcsx>Bkٱck֮QFin]ς8{sΥw^ԪU `ƏG…9cFv`ZWh׮Z}Q\GݺQBLf3 `A,Y3fv:T^zbŊfz3fD@@�C `08샟~iӦŋ<eCCuikZhղ%JsPZ5UFѢEٽ{7{sدwN&Mhݦ f]w|rv4hӧOkn4h`[&7^+WVd$׮]㽶mQT,YS,ߩcGj֨ɛ' v8/6lr9o-[l63r(nLی%w@o !pY�0[,h4b2Qk4h|}mU~l_. JPBlڼ_wם;.T*\2]vETRlY |yjܸqw}k֮EsJ,R֭[9}mp"6mDf(Rj 7O?R`[Vp9t:֭RJ.hڴ)ݻwA4oζm5z4}7CmuR cϞ=,Y8f$$$η{!Ə[|:pۋԟ߸u6kp~J_ %22 'çhU&}1=ztV??/Y]x^=}PV-J/εש^:s(][?Ёc4CV^?yXn~M۷ةKGp)ӝg kƾٺu+ێ+WrUM/;v8e˔Ç̋JsG$D" »%Yصs' ,˕+O̞5 Zرce4i҄�òKty`h%#jslOTŋӣ{w&Ml+;&&&;+& !{ٞh4ڽLv툏Ca4OS݌Fc:|}9p�3gΤsNTouzNGBB^ ɔXO7ՙdhݺ5 ,.]\1(N<xmP D:#>o]z5J.MP`>8|.]#bR[J%+V &6ֶjǠ׻WmR*SףV}}0p@nʩS\h4jْ`T*f%HYgӨQ#ܹs]e) !G\/W=a&t:qΝh4zʕ-KttCqP S߰m�pA eK0yd.\ŋQ*9r`u3d`TmӇJ(oj2mtׯO-db|||֟_wdEΝ͛7efYp!C K=j\v Ӧ3Xx1碣h4̛;Æ|=} TZ5q]N?q#FQm/x"XQnl޲6>>gΰp }qi+`kju;wU˖ :_ݻy=~|gt:o?`gӶmYa&Ii+ٓ&0|Ĉ4W+n; ʕ\x|@ٷw/SNM0qۺt^{sAAb(Qf7nz')!FRKd=m7aIMF9'*#O<ԨQ6ղl7xxo[.4oYzj,; t'444o)Yx1Ə֭[GPP:�$~h48\~VOV{h4bcc3zSBd,մk>0?&ɶMSk>1�4e:S*&ۉ~M̒a=/˝;wI:)z: le̙$ލL7&ezwضm[.O30\&<UrgXZ8{:*c�t2EÆ yA?)ܸqVr刎N[0  b1!P'OL BtrםZjժܾu+uhiik%rDg!YBYx%s=Nj/22GՋ<̙.}aڵ(J6M6M=M4믻<o{… QZt/23Cj Rhiiktn O$ [N,|l#GrTT/WLu.jժQn_�o]Bvf|:pCQw`)߼eKm:j(V|_|$ةzL????Bp3}4=zą 7~K>ŋӽ{w&N)]L'z٣:BAdd$Zb0fXbccA\xw7oqF~ش!;ϗ,I~8}m6jwϦM\\5k0ѳW/"##o8+gϞM5's=zP gܸqfƌťK8iKoNMmuwՋr%4h@6mP*L2yɕ++Wr9ƎCbP*̋zR<J" $ [N,\pzo/i.?o6%J�swP< ι dQn; ~Els5T*bccᇔ*U%Aā*:CsGÆ m9#{75m6ğѫwo5o8pY~=rСC7w2}}}ة<z.mu>VҒ9-[8q&xڵkc4{w&N:oIe43xtJtt4(}|jm9#7?v ;uȑ#iS" ro!SWƾms.ZD}3T`@Ւ/_> d�sԓo/iƍt�ls{I||< ㏟0)Szjqzx5=z MYm@҅ilfO[ol\'f 8'|"=ݾsX[ҠXVV+f?֥ &NرcD;ZBq.'Gs|JrL&͝-i DZ΃{C8Ȃn9!p.:`78+0d`za[.i.xZn:Ǟ=ޠj(V-{S#h4۫_>]>�V˰C;vlInG֭ٴym>aÈ|JZ38/a{`ͼ;L4ɖL|QQQ�ܸqN|Zٓ4pKߨQ#Z+22lq۶ڵkp~޾p|%ƍӾ];"""ۧORSne*J fX! yW\ޣRJXI̧/o C$֤huuiTF@@@k?0gl̟Oxx8gԭ[IJyV9% y[9eѳ/Z;w |W@b=`{1ߞ\ Y1?s8{Hn.}zVjnfU+Wңg|dD``˱Dlll:;RI?$%#;y=,HG!H,䄟"IOҘիsE֯_o{S~@KCEmlcX,LOcZ6 Hf$IK(@Rkkz/%]'4i[,dd{gFG!dp1 B3,d7l˕+.ƍ=)44u-R e (@<Zϔ/_> !!!DFF+T޵ֹ-SVE-=ݼYp cw cDj,?R/`{Zj.TaH5l&w^jVB; Fo4G]N yى,< Lbt|2`KnI&P(HHH,x<#I޼y3z4|y SТE -Z$Nw|qcsp9.a>wXG]rKK"XڵC?/_Ty1ctLf3'Oٳڽ `ȑ<Я*VիK R'yHdAx7,\JԩSL6 p͍ɓ'Yv-ʗwy;w6mW]c<[nӶzM6{\ 9.Z~޾sh4.%sIy[ofÆ1H.ŋٸa-ycj cNt:|J<"kIdDwBէo_Zh({}F@ll\ iP(X,Hq?c64q"qq 9H%KBBy6Z?NRF&za=]聻<"Ȃ̆=Y7v 111L&ѷO"""(Qs'-"wl޼u3d`TS-]=rIt:3gjժPS\Ri߷OV+3fٓ&0|</aaXly j5cǎ}gA%y7ޢӔJ%!!!SH"G2s\dq%@|||:9sj5 "3^jժ^cG1Jb)gaԝ&yH'Ax,\%DV(pWfzr\$Ww\1ydjlٲL8}>ħ>) 2fA<6oiE1 $ D YM: BOȂ,&!'HdDw$@" »IdA Yp ݤ ,8ȂnYBxDHdAx7(!<A" $ Dr___ h X<]sp~%OWt5D2$@" »IG!s:@?]ӕ)Ȃ,&!'HdDw$@" »IdA Yp ݤ ,8ȂnYBxBN,(g5 {E5m$!<M: "% ?}�pC=1alW;qE7Zŗ_f /p`.GhvȂHdiqCތbczwFWH i;0+GލtB|~=<+~Av*DY٥c'!0ПGt�TT1[ӵ"n|@Ϗ޿5]�bcu~:\i0&5KӲy-z*o6d2ӷ{$Knjx`(# YM: O:E1k˵mc*U,ط,ŋ߉c0(Y"?guqQr. n2_�3OTsV͐ONS_/3'wdG�\ BM}wHV.IOozAYp $t0Mh4Q(s+13^G*ӦeڴV %[vʕ<zd4SRIjT gɾG܁(ip7ͨ~[Vz&Z/'~C_ų:EȂ̆,<-R)3WeZ�T~ǎChh.rໍ{Z8ƾjy>BycĉS8+&jhKυ7@?nؼ]!W/˷3d׼T gf=GrJr"bŋgyw�EhcEEDDpijrJd!,, [ny*ѽ3H.ݳjlR$[FB__ugFw8Ŋ^oOTzi3yo/ΞJdA$4Q()vt\lWJ�RuS" 4ъ-u)ltD&tNn ܽ-m`FGhvB ͞}ge=SfmtG L}XNj{j.n~-mYCfC8»1 "us޻uض(+$Oh֥F=a=�/1l&}ҺEm^l%o ;Mk8o6[>v-11ܺ8`{p43Tz s߬Y;>>JlA|2K�&3guqiWkws5rhisnz%?Qb �vz6luԋ~"rl,D&{Çq�$ ݰ*'g{0-˼Z͛$v?x8=f|yy>>w)]D0fvh4aXu fNdջ.YwƎhÛ ^d�t붣�pyT*AoL6uySA^~,=),Dd̂ȘJRh2dܼAÿg�ܻ8@U!_A:dV'Q*m9�4jFzULf� F3* $wd=e|{r( Lɼ&r2fAfCD7n>`׻UfLx|~7坦5 L ^/ 4+=6XNʕJ0dXJ@FU<r5]>h@>v-  k ybx0Jf{z!l^5K1ymQUSfCHVNYrʘɳz{?l9@pP�k7dd2۲7&ir$$fiIK@b#!@@l-ɳ$ς,: "*V(FrT>.yQpr$�'( Dd6ȂH[l2Bx7(g<] Y,ˬZxڷ}a~ ʥeIly<jO6eV=M\~ YM: "9^D$$ѵ!TTh6K9e>ݘgЀfQ)Ȃ,&$wH.|"VMp? MuhӲ~~ -B.\P‚=$E$@" »IGA$TsX(A~f¤}!'?;$M~=e$@" »IdA$畗Qz)4M&v_D~  6E>^oX)/S" gA$ Rq)YPlX_.$ς,&||t5) Y+-yV=]Ua2fDw³c;xZńQmY<M 9foΝ܍aڄT*F_Gp?-֠J̊wc(]_'a0[,tȳpٸLu*m4ArYɐQ_3e\;<+~Av*DYӛNdY1 B glGX1x_wݙ0{\Kw};}#x|$$A}*X3goYhPuNXN&~v/Oz7F32h@3�>_R/޽G|i}{š#i߶.=͛I�8� F%Kgg-<D1 $ D fgFhH;-qq:^/Z5*+B**h#>>~+J< F-jF8[BT`z\Zxl+sd"ȂY,<+4;||TT!J<T IN5xp?P\uD-ʔQ*o Ǯeܼ%B=G.FPf)&v$44WcȨO{z3lS,(/O߇[_N|f)0�nݺxLPPG�.`0Gi{G΀Z-`WRnX1heX,Vz#~~ɿn6[}+딩@bbb2̜!|'yO_GêHdY1H��8_JEד($TffGA9eB6 aw!<&+W_|'u:wƦk^ݽNg%<O$c@" OX{Iq;wc9}j֑Za3lrx٫ܱLCm1rʘ !9ĝp-8g4w2vDLF3SgoB3Pp�6lMy:�tE@@Əl1_+�Q|YK6{? ѩC}2\DHH. 3t?bwA:NpP^yٰ#rN>mGPe<_7x2DwBJrTFfs|PٖiѴ&yrJAD}`ڵˣ|AX`z}Ԉ ?ΜFŔqԡ2?cr#^vW+!)gCbaw]gBT<jBxjF24t9% c@,tǮlBTTɌdGJ͝"Qbx_^Vy~Ư FꔃaP( Т'v P*&[Άu+8@ҞySyo12fDwBVLa7�o6xEK1+jms7L7dЗ>{2 qh\+wqvzZEh�"굻r[=BAV/Зlô$r6�~#ƭ#>^?_31GC >f � {Γ "rJdA,r̒S,H,toI]z9>Lѱ:.UP}] nc@v9 G,x;ɳ@,: "e!: IZbGp([OJf >K�A<rJ !9' 2Oz|Ŋ 2B" B !gHdDwȂ$@" »IGA Yp $X"wj8Q-DHdAx7(111"LE" $ D YM: BOȂ,&!'HdDwsQxԬ^UshtGÖzߠC!DHdAx7wKѹ}-OW-GXY"$@" »OBOȂ,&c YM: BOȂ,&!'HdDw$@" »yCdA3P'lf02f71[,th  Ý֐#R-sXG%HDHdAxv~?G/o0>jy[35kC Q}LfvBdЗ�MfRҽ˛bZ=v^ƏlK9q꒭`O�Q}߬Y;>>JlA.#wPT!R#WכOSꅂ]B<5rJdA=+:k({4/kXu fNdaL<w=">^ώ_bDq>_|Ah}|i�awv�~q._lM+vЦE[ ukIs׬#f)z9{}RX*C<|9wӻJJl$$!H_djըU &"_%KGhu�7O s-d2syfEmX_ Ё-(Z$ouצJF٥^jUM:iYwbjB3z`) 㣤r 5%S@nTS̞#riyv9-R~yU#˯Q(?~"n =[ a~� h\asn٬&bص$$35C*+wx+qq:> O!j9êXY^+p-xHxN8jxȡRLl0ho[,Vz#~~O7ŁhFIq;8V_yi%wu4;IdA26"$~cjGz 4) ˳pn,hY{a}0`u C!K8VB9rʘ ! ٫ܹu{ uylpE6x0׹gzM!D$ [z# ;_S�:v" @Khh GБwT*֒UbDq-re a~ ʥeI8/+Wнܾ7cXخ#Sz)~/{M1ԮYkq9>_ ZU!x O5R$6gn ̘={O_ͦ !Yp YZyj,ސ8JAD}s ,_0>jDP:ބ cHH0ңkCR$n=pYcԎY:E1k 7el8d̟ťX$$iլ&U*EӚɓ HIT<4,DWn )OYAPQb0h۪6׏`u=wZ`8{|/h|/X( j5xq'rb %[ 2lkt@�J%&Eu4;IdAY}qV~FdЗ>{2 qvzZEh�*Fcߙ?(Ji87_Jy^c'}CfS:Kϙטx+/ҥ 5/,咧.r.܏h<�̘N_eڬMܸ�_ zӻJJN,HVNYR˳`Gϙ3C0}l3,f||i]�כʴZT?Ng@VHɳ 猷C,ؑN&Oz-oQ7p\BH�pS?ɓ< d6nO:f~n"d̂nɳ V=] !D1 Y',ds7s##&tCyXV {HȪtF۸iP/BB@9% c,dMk~7o> _`"y(�z >?/ʥ}8t<B=  cHdAx7Owz#ǯgڄ=pɌVWCވ`/R k � b+xE_zpG69% cc|}UpuenX~9¥X}b5K1y$�'"#ƭh[i'cHdAx7OG�NgMe:i;�0cRP2ym.ѩ}}O7EF9% c;,@r$uie< !DɘY: !w�OWA9% cc2*< z,B$C,8ȂnYw3mlҸQJSgojб]= MO`D/BNݜ9w\Z|ڜ'ᛍ0sυ2m&DH.yfEݻ1.Uwys7gi6?|.odЗ�Mf]!3%Dd̂dn;ۍRVi�W|٢LzBυ2{Z'>굘^}, E�z =MhؠS->™ط,o4ȺoUZ|һ1:AbEo0�t0�@" »evdAo0:8`4ハ16yJ5p|[3DElujKY0MT<mZ֡M:h Lf ȃqߐ*o@(!9% c ,ݨ*k΄Q|7No{p:-/^x0Jg??MD\vSc՚]c #jV܈R ~^oN26?=Bd2fAQx,_pKd{gC;й}'*#>^TGՊlIHŊ^o):__5 |BBuz˭Ԋ?L-3sƻ:d̂d]BH�"w \ ;쎂"rʘlB-B/Bxʓv\k{76/]RfzܼCG#KdzNYp%c7y1 _Ç�ܹWS\~Ͼ3*?-eNoۍz:tovN!YlG:Pd̂&i,tFڇ%ӽ,Sq$n=d\�۶e嚝 CۺԨ6gn�FOX@rEyK?baPf( 2wzATйC}W gؘ51M,إ9G23?ܸޭsYz#/yz TJlOYp xcI<YjռeJz9h ̟Յ �L6uy�@ 2}b{~Mk'O.�f '2֭@&5�XNFkɟ?ĥL@; z.Qxsw-?_|Ah}|ie~�(BAZC5 DJ_duʇY$-'ǭhV5 qRx $*T>(Jv(Y:;7o?`z? ϗ=V"r6 ӄ:Z`J=>> {XfWBO,<% IZfC<W0n3uf qVAtJ�?Y^GHp�>>J^}NUDVY'y! �۾kg\|ǡLvJ)J"*u0dKҦ$I9rJrԫ[5K3uܹKJ%Y.:}s73_S*+'WA~n?doxI 4Q!DfHlC< VE;U,x<G9˳`6[ZS S[ÖPVd1̘Lf)[V8u -=el,gAoGy)Y[5ςR[PB14jU˨T>.JE; �}& BJ{d<]XR&,o �Jȟ-O)Y>t7ɪ B2fA,AE"%9%ςY,!<C,81 »(=+<]b9Yp cwsY<]5aaa�ܺuUBd@" »OBOȂ,&c 2Bx/(!<!̆N A:Chj4j;RQ{u߱=ΌυW__704qPV)w̦{CD�Ƚ!rWix(}<S1,sƻdpw ᙺ$1 B c!c\ȘrJG!$$^zs8!Yp!c1 IjVB=Zuciyh}-R,_O(P6lH53}*Tv g }NM+" HOȂ뷈۷okneӧ�˖1{,�̞ͪ+Y|9R+@:dV`.ˆժUٲŪUFB|=4jkyBCݻwo aZ~V]5sfڕu _.)1 BcRQjUt:}e,Xʕ+ӾCΙCecEȟ͚1#>X-9sPxqFr~}ȑn5o=v(6iB6m0Lڽ/ҪeKJ%̡W^ d2q}Rfdd$-Z`ѢE=Pf3'MTRlQx7%$kn ٳgW* HΝ1hղ%o7nL`\/^ÇP(o8q5kҨQ4u(X &MB͛駟ݫj 88QpafΘѣs(gT|E7n}s~ӦM#(0/pѢTtW^X"f={uP(tڕzaj Zf۶mlظѡ!CԫVZF-)Y$3g`u)S]B7od|:p cnjhb( EEqСL;TN?CHdAx/(@r"z=j�/&Jod2`4^ z3e&D= {Ds'v٤N]8\hs6;ub|Сh4Ai+Ν;rnӧmmL$mڴ͚QL>|ȼ(n޼Z??J%hXv-z .PdIu4mڔݻsx6{ysmƨѣj"EVٰq#?�, !!2nxn޺ŧo޲'N`2y7\_Z(Q8׮_z(TthU&}1=ztV_n}`p.Cr }]2ݵؘ0q"111|:p m*W�?v ;uJGG+TϐN AΊ,>|^={2qFŇ~Ȓŋ9s4 .dbJ%G~XVM@B%Wy!Sj:h`C-3g111.Q(yysJ+VKBB3O'6&`[>-;I&OQF 6s7j˗϶||\:Q(X,_뛸 ف9s&;ubD3dl6Lޤ|RBQTX,ǥKXd �111o}4&$$`Zt0kl}hص{7?3f٥Lwmu>6+`ۯ!!!dl7E>ɑ{C7G\?L&;u=ҵ+0r(�C֭[FJV _gJ-CT1c�hۦ �w^t)�SN%,,>9S>CӱgϞ4գo>DDDPD $ٓ%J`6~weTkuN/ZDܹټy3[6of4i҄{ږ~:.d9wmuV~}Zh���IDAT�ӧM#((3fxbEGh7w.C s\r{|7כܹV-[2lP|Zwν{\[76oⶳ3gX`f~mk֭_ϐR2geǥ^oŋ,^//={?~<FG YM>"2U/9ȳ`# υW=Q9/U.S?\=Devܙg( Ý;wUsƙR$00fK/fN$ڰV`0`X\n@@YPh(UTLjmuNKdP`` ).Lllմk>ş%1LV}�ʽ{-YjdžVTR2*;]ih6v1y: ]6Euڽ;l۶-]'30\dӗ:$ςxsώ +[8|AAA-R$]pWƍ3Q^:R2\Vt.gUn Bhh(uuZxx8ɓBdd$/dDg!Yo)3Cѣ}�w *DjҵL|s9;m6D͛ :OiUhQOZHLV˂) n_yfTRoY̛fCH!<,䴨~Fg}Z��֮Yh$..zQD ӧ9f̘A`\\t&<U˖4i___6noq}΁S}v:]ts8>aniڴ)ڷ 1}:ӧO_&W\\_|˗/]vhZ~N:E%XbgϞeɩ+)@R.>mAAU*>ޝ!ּy2fh|}})�ٓ *`20`�Ǐ L2uیw^|=j8y&!ӧٵ{7 4ģڛfC<y$ u$yn-Yf +Ҷ}�HcN<xի[\r9j׮hݙ8i27mڔwɓns48pr9FѠRfW+00FѱS'<tݿƭ۷yqȘ:wLeQT9s`uoBBBOwaڴi\vÇhx׹~yBC]~I2x[喰wmr"$$U믿[YH"!BfpۯR0LsYVV+f 98rH.s㎻�f___z9{hk)R.  F#6d2Ghܶ6t:^ $~?oF֭d6ڣL&ς$  3ƌKhܶ5%* Ng۞I3F#Z7~v[bgqm | 2DHG!BfH_R%͛ܩn/pJ%˿B ?hܸ1۵#""}P~}|!?s'Ms?d2_>_ʕ+cv3EpΝhZ رcmw [-Cvhܸ1mnQ ^{-q,Y?RJۿѣGSn/uhN9C*Uh׮P-]ʕ+W0 ={xA>ߡ䎪8 %88ضs[S'1bƎx�cZˇBx83g ((Ӧgw /V͛sq 6>LB8aB&YHgH6 ,5YpwxIŒl4`ʕ3yrl^rPTՋiӧ̭S9i9gJ%rE/s68  >>ޡYFrI%GCjX,t4-)[Ȝg!I6{v,!u在B Lj[nM.utJ餝i4~-d; @?bq{jmwzz: @/�{jziŒ͛28fO}#y@,dJ*<vݺ,_ѣG8i˭VL2Yn%Ezs%d$H$2fA9 qwWƔdEVpazt:TTl!88ĉ|ڞ4HoD:)9fi* :*+3{/Nn>|8K//V:O ppF B`ڵرee4ha1clwB<p qI|B7l`-.6iB6m0Lڽ-r#hZFMѢEY|9.\`D͛?G#**%D"E6l _~_%7‚8{sMu{ѭkWQ�ŋw~Xr%Ջŋ;p>Eř>m=%K:٩cG}ŋӽ{w&N˙4i~\`A4"{,DɓmT*?g_T)N:i�|4oζm5z4}:pɓ'Yv-ʗߟCѯ_?7o6߂FtmG͍0y�߿O?TRTZNG]Y&c?q|w.T*aaaٳ615/]v<p�soSܽwڵkp>DžJ"66vwtGVǬ%$2fAdBv2TAͤy}aL lk|}1F{94 L:ш` 66Vhd2oGϞwnl>7;8bu >Fh797d(P .\0C }V }R~V+ٜ\mO+}஭IAR~:2f!̆o,<}.]LpHK/ALL4ٲy3I&-׹y:={}/LDD۷ogΝjْaC؃M{?dŜ9}֭cСgǏZ0 2z(zS˾"YѶm?$P(4nܘw7'00}0/*e9.:չLܵƍ,s˗KfC$< -ɳy91ς;Ӈ*J4mZR$$${%[B@$Q])٣<`3o!s?թ!!!<x�p͍Fy)m?H'nkkF%y2D@" Y)00Wcԩ眓X,; -< 2R\.BY1o?-9: AקHmwMU_Yi)#̖i! | Ȕ-2d "!("CTdOq+ -(2:f(himy>>͹6'󹹯p kA?,8Ȝ!9 )11oѣG};g]T)xo@%h۶G4hЀEQ7' !.MXx15Ws2h44jؐ>n 38t/\B >"FVC8H!9 E!Uۄ3uR*p!VצLUVR_nr Zrx֔�|0n ud΂s DΝK3i$�mF hР�}zfK/̯ذq#k"v/YB&M_רQeV_r'sd΂Ȝ?ZjE۶mhcjٜFcեA,8Ȝ!dA̙҅3*U7S[oɒŋV۷o>DGGȑ�<x 3kLAj՘6u*֯RB uWRgJEVG5on{MG,- ,G6 ,ה8r/C-d΂Ld&!$YIH ɂH FI@!7,8H ,!dA!dA$ ,$ Bo$YpdA$YBx#ɂ$ B ɂI$YIH ɂH FI@!7,8H ,!dA!dA$ ʂەg /F]BATdZ6:thՈ#>>xWty ҹS'Qy~N"# s%|MA~oҺspwB<$kCtydɒ[jZl;E8DqF.o_fl{y NM^͚qOxx}vy0PF bbb_Ϛ5&Md|Vrν?V벏YfQvmDQc'{d}}9 BY]8 6cY`{OvjK/1}t0 w/mZFTbٽ{7K}ץZ5k2o<, �7k111XV8weX,z= ]hߡ׭O?{�v.]]Qti/_nw{+Whd30go|W^z#G$.>e?^MHH*:1h@:vHBB�+/dɒ;޽z1x7hЀiSbZ1 GBAGTުUo׎%Kң{w<YpdA7YpW~}YgбcG�l6K,Wt҅(VeʔҥKX,.\@*U<<q$ƍs^x"ӦOQFR8q3ftyJBR9OpR^~ϐvڄӱS'f3=n62Yk^񜐐y{"�V\?f`hb8OZZaaaU*D۶L&V+Ouls2P(r$Yp9 Bs_7vBR@Tŗ_l\zK0T, 6 ՊJ01--ҥKj%Kb9.i4~Y- w?* Պ^GP8ߩL&BCChrtIII7>z}Sk׭s>~V+7ofo7)9mѢ&N̟_ Qd΂M ={66Ǐs9^9+Vx<cƍ4-ƌZo^4^ OuFQlX˗/SreNM5yf wz:�lۺZnGPV1^ ~)ӧM>�رczm݊B`�3u>߳SN( Ǔn'99ӦQ~}�>x}< '  \>.~ q=J>}0L\tҡ}{W&أҠA_;&!+U1#>;P;,CTd$/@דn4Rvm:wy}59qy:J*Hjj*!7'ot:IFP>|}Ш՜8y^N#22t+l_պ!*2R:'NDRzu\RZ5kr%1$bbb~ZbŊs$%%yLvt<V͚zsPJBBB0L\ILzj׮V=dzwIOOgѾ5k߰v􍳯8Xs?8I6XGEn"""�|r~L&oSPd~уݺk`5X]]G Y3g |zuej*[,zt~=llPvԉ jj36l("A,8j!9 Rӹ>oMVϩSk̛7/G}nV~tXFXcbbYFomfw>EQ'!΂眅ܾxgʕ+RdL2Zya(v܉jf1h` B&M̙;ZQPT;vI'ҥ>Ovbr4p_|%Xf>߳1GӣgO֭]KhbجV>۽˗VQxqj5+V@VϢ c}ݎVV=z4Vd׏w,B �0qDc=u,YFATҩsg65[.J2eT_|'u$YŸ,ԫWrѩsgyYZiCJJ zbŊw}2z6n3R0xyfΚEzz:;t5w�@xѨը5 s!=Ǐөsg>;vϿbyxm[|9оCg);uXbԮ]aÇcׯiz=]vet|֭aÈs.E$ ,AOT*n`@Ra6CBP(aXfӇO=E1͜:}۷fpp06ei@… F~YVj5e˖u>ղ�Fп?~!Z-*F`jfyvԄ.܏Uss'\qΗ}q7dA,?' 9siغe �ơGfضu+7nĉ-L6`T*7QD]ڜ4igϝCRiF^}55]ƶ[ٹko߾ԮU #KKKm6t*GTd$so~l2c >L@@�۷ml6s1>x}J,I JTT˱矼p!6nDP0vX67mqΞ=wARq,;H ۖNcuIG݂ԔΞ;NB >}^QIbRTV.^tÏL2:mu5+&2J0ͤVZzaHII!fzѳgOfΚũSI=UQbE.m:jGd>_=w'X#|G.^3N,- ?|: MLt4]vej>O8|o_Zn͉'Xyd΂g'u: "`୅ :69Sp<hZ~lV+~]EجV~ٷ;WfGbc9vQIZ޽z;Q/6$˗Gkp?e*" !,de^_:"~xVe4p #FȶRzk$t|Ix /VebQ9isӦMJ(|sf.k֨ALLR{(,AKx˖-cm2 hԨSLq>>W}J۶mh4Y5Qɮ]ЁֱrJ]δSf]j$�{ャz=bcc꫷+&[oId.犇#G$ 4`ԩXV ,屎;7VV˪#((@޽3g۷ms>gtؑvCjjaDdA!(|ɂ{Mo2 =j$JIY \T*Tj5 N^3fGNFzr/JRBV;Jl6,YB޽Is ..FXXXu9rXw !--bŊѸqcXYv($YpdA _^!'k$DEF ㏬y̎?}d ZKG=8 HlnbP_6@0L�(JK.}RN֬]aüy+We�?X2  ?SI ɂd᫯f57K08y–͛yeK6_Tn.5j֬VbTk/^mXf ʶ[Q^ 9j$t:gϣxc\.\@Td-_1rH*W"H aAۼ7Ƙѣyi8tJ)S4hӧM-ZP|y>x}OFDQ$ɂY^m1YUK 2H�\!x㬳ٳgtDFFn08ȼF=saYF ;jDdJ*`6۹׃p瘘8vNGJHLLt& q+0JbK톻5Bޒ: +{Rgp׌: y�? /Fs rNc„ 5*7nr眴[ٓ2ek0}Q,SD^zz WF:uC慑#gNpnBԺE~vJz<ަ~o8x%sd5׌VeL8'|ze˗߲ނ^x{Y/`̙Xf>߳1GbJFjoai޼9{+Whd3x xG]XpKM(Jv;w]vXVv; ⩧㏣T*yo*vؑmɓ&ѴiSV+VFfe( R={(_<cbX,<x3gΒ%+WRɈ#xw\jK4m̥/_od5$ BP8^ϕ+Wҵ+=(|M-{ٻwQQk4( T*ժVbw^/_[ rA8A]6t L=ކ{2ep%, .\J*�<7p W^O><Ѷ-& Sݺ[�P\~N;;Lk׭_'?Xd yZ͙3gXjԫWrѩsgyY}8jKH}$ ,AH�~'ڷoFaƍ4m4YVj5e˖`-XVZlIj>bvͺ4�d2Ѧ{?R͆jEus)^bQZl޼ 0}gUoʕ+�ǣRHHH^ݺa۱ZTfWJILJBTRf0֖pwys&&Lo,8H #Y�oh4\r^z uֽ^:DZ߯g}6m\uqaVʚ>رczmJ%X祠{u 2*5޼`k[֮YCҥٺmGO>=g Ysn?ӨQ#&L86pn{iغe ^ QQQDQ ɂY^m1YȪBr刋wȮނM4aȐ!?L<f3i$&%QV-L&Gu>q'O:/$$$xѠj=\ 55YѿwyɯJ|c]6ZǏoYovBTd$II΄ ))(/Nlls{-s<jKWZ ˗oI,-  (,̚9P~mΞ;tZl u7nfY[RgA GNG՛"#s{1I'Nt :4Wmذ!;u@A2vWƍyW&sz;uaÆ}l: 2gA ǜ^z1i$4i… 2u*n�W;M5j֨`!DqF^ˊ6[+4xnӦMJ(|{0dZn:j*cugLL 5kp9.p79 Bs΂wV}hYm֥nҥKYv-ŊaZlnv;{BsҩcG:v謳V̛͚7y~/b!99^&8Х5: wYb^O5֯[ǹsWK݅벏cfO 6u*V@>}=j?0 -[ү}ѢE WXu:G?Y *ĉ]CVC8H #Y�qf��tN?NΝ|w+ Jb"~+W?`ټɓ7ι@Ra6ӷo ŋL>FJĉ̘9* JBfȑ#ҾCؿ?iiiвeK^}5z}caÇ p7dA,Aᘳ�EnHy?� iiiXf*mN;7Ҝ.]{VQT)Ι㲝~{݅[yo_ԩu\ONNζ%]?/X@ll,ݟz#o~PCx& "oJTgѫgOѣ7}|5kP*hN�πgqn޽;j ׳m[Խěo:e 7jX,/�]8~a|,Q^_~Id ǺsNZ>0׭c۶m.xߧdɒTP顡DEEQgQ8J%N50Y~n[s_7:H.\j%D%.>ޥn�W[V͚;8%8-tJbs_Y9posT*>\ÇS'O]T(\.7B*U l29Uvm8xP8+.OժU]y^'M: Y[RgAxu Q~Y(d2~_wkƿH%s,DEFe{r;uY>8z^y<_^=m Q9?9 Bw#PdI-k dwNx5 qՅ^Ѧuk f\>֞zG{YfѤI,^sm1k,j׮(jd5Y� >ÆQ~}v; ,`?ɮ]U/ӧO'(({ҦulmO?7oSm۹t2vGҥY|9vyL\Ixx8F<Ü9sؾm9_y뱎9c^GWJcNV,_Nɒ%7v,{^a?z? Z?8JV}v,YݻWKV wRgA!dCygRN9CǎK,Wt҅(VeʔeZT'\@)/Ggةf7w}~,5Ȑy{"àIKKc^/^?<Ѷ-& Sݺ9ܶ} Id΂?v=cYT*/l6^%KGjjj@k$8eXP(<T*V+zB|`2 u ѱzIMMe /xe7j7?͛,xMve�-Z`ĉk! Yp: BɂB`l6?ιsxaH�VX73z4j޲~{]˗/SrH3V1^ ~)ӧM>�رczm݊B`�3u>߳SN( Ǔn'99kM?Ѓ .w`dzѣGӧ&K.qAO:oOjxy{Q4h_ qǤ΂Y^mqBj1DEFr cHڵ95kt:*UDbb"ܜU FPFV}Ve-R:'NDRzu\RZ5kr%1$bbb~ZbŊs֔U&zk-̵5&_ڵj?~x' 66x.=׿Fw-΂n,#_Yk$̯=z[w-d΂󜅂2 n VK,oWٲeճaCfsN4l0WU9aF( 2gAVCYg:%vwymzN:ux]^s`޼y9kvZ-קK.5jDH6C5=V>xk3):Y u?,];KP\9J%'Ofʔ)jΟ? FkNV+6A3d6ingܹjFJرcL<٥w.e�|k_}ߥ/b6==={nZBf,_8_ŋVYb*g}4vZ-jѣZ$''t~d *T %%'Sxg4 JN; x/HݺuQ*<x)SD; ɂd^z+WN;̳ҺMRRRջ7+Vtӷ/@׳q&0�Jh$&&ƣ0s,iߡ9оC�woFFѠP( 8~N;nϏ>ޱ΃=m۲lng:8Ho.gةŊv >x-ݏ_~tڕ 7WDdn![.C #..ιdTu,8H ?YPTκJlFg[ APb!88 зO?%l6sioNP`GجV .xEjEVSlYc!Z-~ggբR*h4 VkiGMRX57y g|9wI΂s3O&--[�Ƽy4k֌m[r N8ڲiFRH߾}EߥI&q9T*6n^Zsڵklۺvq!KZ0 9:4ڶiC@@�IWr!zDEF2&3f}6f3ǎߧdɒTP顡DEE iF cǎuisӦMٳ,}T*G2Yp: «m?& ^7-t-HMIst:*TӧQ$&%LjE;Hʔ)S&W!.>^Qsb"sLZj*qg^: 8ڨWvoOpW={dY:uyz4Xu:+V$..^ҦvDգ{wZZ=G}5Bޒ: +{PDGӥkWçu֜8qo1ؑ׌: yK,& |R1h ZCٸi3%ȊVfwZhj}\~ev$6#njݫ; hCBX|9III|f QQY"9 ByB_u#"x]n j,_A2bĈl-eGFB''Op;jY9p/6><mڴD^gPp07kR fĸl/2Y ɂd𨉰l2fϞ&s݀F1u_}y߇mFCUZ-EXn+WL:ݎl&99٥F˪#66ɯz~2ao?8L4Ovrx9rKbРAMj`00[رciys`jz=0 ݛ9s}6s HǎIHH�<k7F9I$Y—,D&s݀ݣF­Ԩ^ԛEuJBVP(Ջ1cxH�HHH`iԭW/GRT(U*jsfcɒ%ݛ4�ؿ?iiiXϟϑ#G} <(V7xΊ+k7HI% 5r½FBTd$/O?w}@F5�;psYpK͆*Ee $,, R/<"<ݷ/uaڵ 6khz*.[灌%�qO?',$ ,AK+j֨Q~'X,lټGZdκOuR#f͚hZ*FEQV-/l߶kpOx8lۺZ@FNs<**7… DEF޲_#Gr9*t>.|̽[ٸq#aaa=ƍCW�L2A1}4ע˗giԯ_YAE,8Hݶ [Yp�8<1Q s7: ={NGdd$̫k$�NPp0UjԨAFDVTBHHfɹ{=wctTTDg�wѼH $&n^3N,- ?|'u y c9 2Pb[1< Qt:&LQݮq.{Iq`=)S! ܿsGY_e΂>oAd祷zjԭS'\0d`^92} 8&d~̽M[yqk׮ԫWcmz6/'[2gAVCYphZV,_ĉy'yX|--{xǜfΜl={3z4+VdXV͛8,r%F<ǜG}ԥ 1a^ڴnRn{nڵkjn3p z)Z?8JVbǎ[�<iM6j?`ZyaHl6.[B`A(J>߳S?&1s&,YBrP*1wyǥDf\+/EFVC8H #Y\r.]أ7ނ~{:/FB@RQjU,V+{e張p!ЁڵkNN0cm1(S .]bpTsrUmb2Z<խ}�ZԹsv:>�x?%KGШ՜9sUVMz(W:wguهWH ɂdয়~}h46lHӦMs]ojEVSlY�6oقje˖TV#F`Qެ[H�L&m.u aXlXVT7bz, ͛IpwV\@\|<*խKPPvJJJ Je{4Ĥ$J%*ylkm K}7,h21a ɂ$ BP8oFÕ+WPn[СCԮUaXxgiӦ !!!Ujժ#;^g֭(Qu^ :^ 0 R Fe5.]۶qQØѣyf\5o^v;?35b„ zc綧O&--[^kKx1A,8Hݶ ,/Wxg}-x1дI ?äɓl6JbRjd2qQ7:qBBB Z֣u RSSu {wg:ڵkj9~8zk'DEFLx:7 z))=wΣDppK}ȨP|y_ڈBޒ: «m¬3 s>L˖1x_wkƿH%upYvkt9*g 0b�&M̨ѣ9{ 6sN>oСZ&6@K.}-s7n+8ccYp9 BPx,�+[̘>s8B,M߯Y-WQ4jԈL5nU[uNTdd혘=x^!sj5uԡUV㣗M-u2gAVCY]b!::U:˖V9</źk -V gwcY{( 8N;ұcGgo>ٵ `ڹՊfc ͚ELLLFX\ł^ ׭O?ͥvK/3x`}4mڔWoεW-Z`saZ1 ӇѣFP(زu+A.ڷo-ZzjYGWJcN6qDz yNVC8H +Y MJJ zbŊDEFbHOtܙwg|2p $&Yr% owbqyO߾�Rҽ̀�.^ȴiԨaaaT*N83]RPT .PdI}߿7x@駟ؿ?iiiвeK^}5z}w[B||<o/Zؤ@ k΂ٸifz}ƻBZ~ B -- ٌR9ڰX\jd'--Y�ҥKj%Krc`۱X,X-[zo_ԩu\ONNβd3ٝy瓚ʨ^pr9 K~u>9 1g8)B& ) ~ٷk׮ѣ{w>Z+VmVnܸ'vJ%o/Z�3g\dܹjf̘gso3mNM5yf�, �u  s8~a|,Q^_~Id ǺsNZ>0׭_8־}n'99 ciz wޮY_΂3w20U`"#9q$: *pizƀu5 v1p^}D ɓm;9p@T*^Ç-Z͉'.u pN:"�TR&sڵkC<VN={khh(#"+۸rs 䨷pfY[RgAx%|/,a2Xa5_BޒBɂ/?+^.qd5Y7gA^DDK4H9 ,AJmՊKc,::G[d3iii\t$Ç�\3*$YpdA$Yw% kb(2X($YpdA W_ EYDDp3\xouDޑdA!dA˗Yn=+F+"H ɂdAQP$YpdA$YBx#ɂ$ B ɂI$YIH ɂH FI@!7,8H ,!dAYpL'I_df$](o?]\9zͰCtNwG_d}}߃,x& .1ݾ $]:9p|٬YhҤ �ujצk.DEFlӨQ#B t~]xl0d`^9ң_6Z zd}}9 B& NڹՊfc < Я_?J,ɸcݫ6mBղpB?`�څnw8mv~SJ '0g.}=j͛7]hߡ\Ixx8F<^wyĉiڤ v9sV=j*cǎ1UGPP^{TA2gA!dӷ/�ucs:vȠIKKc 2�D}wbfd2TR7˨T*p!ЁڵkNN09#"lܴ?g @Ra4aFbhܸOs$ɂ$ B BQP(HKKbnbn0ZsyNkV�lv;v{?3ݎR^T:5Lzl?CDfN> }qU] TA,8H ,-v;Nɓ믾?dAyuDEFazj53fn<LpQtibpaVʚ>رczmJ%X~ӧM~T*o+j֨Q>|87n$,,1GҸqJ-$YpbJ>T)W-sL rm+W-u ΅Z5krI"#ILJBk׈wNדDNG\|<j$.>eD ɓ4nъ4S@5jįzV.9Ǫ'Oj^: $%%ylV\gTd$eʔs$%%T,ɋa^u I!: Eى'\Gr;A8=yqx ZDGGsi~,z?zۤ$AD\|K޶yI,8H!9 2ov1"j.)C[R",a|ᇘL\۹S'6lV͚hт￿Ϟ ud΂ȜMַxV8ԩS3khȃDU(Rc! 7fί͛:Ю];龍S2gAVC?' vv[Y_W_bŊ(JL6u*v[ 14yK{5b)@FɯfcDؾc cǎ(PYtKZ֣6;KPBRRRm;ŗ_P?&7__ɓ&ѴiSV+C /"d5$ B BQ娅кukVJZZ� BP`٫cƌcgYӾC> ŋ~}?.vǴz6F6|8wo 3gXj^P\~N;3{l_"DI@Ƚba%�\r7kzz:جV`J^\xqXvzJbj#\T*lʕ+$Jq$Yp(d$ ŸIP¦2nXƾ"j屍{oΞ;Jbƍ4 29z#ܿ78|o>x}*T@->m�׮]c֭ 0flp_5J<z&΂F,Y3�Wnȑ#hZg=:t: '.>: '$8.p jDGJ |G\!^O\|sŕD m8&;2H%u@,E+dk!3:dmਲ਼p $]=?s?3^w׽ $ s@,!9 4X>gA!ɂ“?% P@HGo�Rjޤ߳4p taK/9FU—u ɜ!dA䭟=+':bJu_z{SP0ɊYN< sH៮]w*DA: $ B ɂq/H ɂH I $ ,$ ptI !@VC!1Y uDf2Ou 2gA%K:42J_9 2gA9Y?BzUjZ&88]U*Wr*| 8ׇt9 ,$ "ĝ=ItL J",, ಊ!s-8Bj7p)$ $ =WT)߇*-ɂˋ{;SZ4&""˗/{m+FqYc%U%5%t)j5ü 룷hAB !DJz_O>uW2gAd΂ ɂH FI@!7,8`$ ŸI Oɂu `A$ Ÿ@$Y)Y$ ,!d` ,!d`I@!7,8H ,!dA!dA$ ,$ Bo$YpdA$YBx#ɂ$ B ɂ/h/I+dA _xkO"#]th׮]jhZ_+kI>CGI)Irf/bXHNNűcYlj¨QL4MbZ:lG;cbXp!dz=0 ۣ#~qJ%ZŎ;|}*D&ɂ$ B BnU*f3}EѧwoRRRջ7+V$*2ZԹ3gΙ3gXj <(V7h㉶m1LXVקAy,8H ,ł^@Vc6v!!�\rxm$&%T*h4\zw-mXV6oL… F_QI !@VCܩ֬alۺ7np mqFcFFV3qD6=J>}0L\tE&!{XRUU\< #::;oHܶrբ\^7�\|٧}jtSfMN<NB >}^ -NGJHLL^ۨ]6ZǏ; _)W-vr|ivy7k x>z$I@ݼP8yȸgg5H}G[9i>|qאdA,YBx#s$Y™,DDD_ QDIPK'="B  5ym[ϛ X{ Y ^=z%.whJQ\+[׿8"xeY_%Y§ K˗P;'K8z zɍE$ =j፬[ts/"oI 'Y>_B)D&ɂ Y ɂdA䯰\os;?VF\I@*,,?nuWDQ(o`AI@)c`u7D5^dA!dA$ ,$ Bo$YpdA$YBx#ɂ$ B ɂ(ҌfhARV8s_n$ѨAUR $((ׇ,8Ƚ!IDwae�\|V1u&f}L`V~o-aWla΂̜T3_͉SHLJq??t8|Oo,$ "\r9onѿC &:l)xn|a~;tZ䗻a6[8]BB['>St�[3pR.]ΰS� (�K}Α]KII8ޜ;ؽ+SL ׿:ˇkc'87bm9~B[Rd1V~5FW!RRy䉩|{*A>1ѕx/8gvG.oc t~I4%YpdA$Yyѩ}c&܍uUC$'0h4jCp]᷃g-uD :h^?0QKڗD=Mkz|ًDFg{,TYMKH5aˎ}h2i{շԨ^]Zб}~ v"0PCN?�DxsT^G~-<iJ ɂH lARR)1-)S'Z7jQLIztmA-bRvTm~QHMMb*4i\9W`札̝4*U`4YQ,ujU`_y<OVcXQU3-tmp *6p]1 ŌT*VJ,RgPJ�o d,8j!dA6-?&0@MN�h߶}% @Mˇys. f^x-%Kݵbyٷ1=+K}s7#f֓7j`Ɯr?5֝L~+AA4m\q?j:?hߦ!/ǎӳk mɛ?!44~+zu\Ƴ`0ܰwc< z|vBC8?¡nQ (v]L2nI&-E / vݹdAPѨr?hwF.P*53͎h&88VGiq$'';k9}h% $Y $Y([_| 0ؽY(~GP*:P�:,x^G RNp /F]B[ىOJbx\7{麯OE>נɌY_e5>ɂ "k?;Y yïqCj䀯OE>Bs΂ ";vgz1!$$R1~7ZbK]9ԏ_Pvy؏^o"44e8WM8+9cqҖeQ2 %K�goFMkҵS3~=pEPP�4 |}rAVC8H ,§˓MB__ILfɛ'<3g8!,,tFn$a0:5ŋkixo._ҾlX9UXnL܃[y_j??8d,R4<W  h`G,&sDaV2&LzvkΣ-ymNFd4s4"=ufGys9#q0JT*fsF\i6[h [|}zn?Y,x_ !ɂ,f?q vfƌ.Rfy=JFM!DWdYSJ%[\wT\|ЭS3&M[?2,T\.TV+Lxm-7V;{,v5DY"oIߓ: su|a5Y{gNbݏlR)s\M2J͌ e&'KCYuT*8 ?' BL.-\.@Fm植7PȊ?Y(d~,/1Y "7Z>T](i5o,HG!dA?% u@!7,L"s@!7,L"s@IPbk| Q@ oCJd΂^($ c4\=n[nnydJd΂>'ɂh4b4sd/+yd` ,!d` ,!dA,pH S s9I)Y(dE,$ Bo)Y(dE,$ Bo)Y9 >;x!o�,k,s$YM!'Iɂ$ k7P׌ Vf͚Ν:Ѱa|Oi޼: &0zԨ<簡Ct@9,{z _},`{ #.x@҅¯N:yu>ǴZm"#j.wC5_oVEy[>uhߞyG~\{?٨Q#Bnn_N^rN^ _e΂^MDQ`,[pF#yZj1mTv;f.dQT*;FZh4vl6t;KPBRRR�شq#l6V\Izz:#Gjr_2x0z]hӺ5JݻY.Y[.JXڶmAP*|gK.eٲe̞=;ڵ[7}<.={6څnGҨQ#N'v1W9|p~wYdA$YvڄӱS'f3=wGP`٫cƌPTFbbb�HHH… T*ȇ N||<ju{@Rhۦ ժVbw^/_ZBR9Vt .PJ}ԩS%!!vO<%Kh#u оC, �;3g"==:@$Y$ B ɂ(8w�&P�f3z8̩ӧپ};A1łBl6ɉ'ݏf#MfyV+-[Zjlڴ B2X,l6V+*kz= EEncZIIIATzVνG<6ه%ɂ$ B ɂ_[ujת^g֭(Qu{lW_QF FÝFZ SBZhiӰݛg}6m˗9z#v;v@R9x,\pUG �iԨ&L�8q$-7Xݹ3*2 ףV1cOusPTlڸ1'J<+UJj1g$ v/Vj�.�._ 7Yf']IL`0PzuHJJB.*22ep9 G]V%.>CLM^ς زe 8sjԪU ѣGX"ŋd4r%1mgc5j `Jb"IIIDEEQxqcw:V}d󗔔Np"Gnx{ oGoтT@h@3G|r"?YF ^33gd՜:u],xZN8:*s@,gɾB sg ȹJ.TptdA$Yw.""VZwhm DZZ/_fqwت$ ,$ Bv/]rd2Q,8H ,;wexf͚w/_5yЪ$ ,$ Bv/_fԩyܪ$ ,$ Bo$YpdA$Y(l|}~FFQHI ɂHPǾ-S(o n$ ,$ M@n=].r,8`qdA($ B?% ӟ`A$YBxd` ,!dA,s,`1+"OSpWYdA7($ 7`b_9-?Qzж1sb2G8uB1Z[,[4ׇ*dA!dYmJ+㺰aˏy^"#Ù8esg=͂EL!~=pEPP�4 \ڼv-2eJr3<�:vhBvѡlzvk]OHd3?-B7K8Q7c>{374oZy|ْlھ Ϸe_q> AA+[/wdAY0,8NxH6ȴ=xU}k^O}'72'O]dST?1-T\ (�|1yJr �6l?`eٗ~Le@�x*"rtV!�~.k" #(PÖHI524jPTELݳcp(ɂ>'Bf2[QT*f+uXS.^e\*VGڂ95˲ͯ%44dŊѳ{ <4v,_~{XXX0MԚVmvG?f ݻ4GH@)6 "0@&˼%ɂ$ B Ba׭S3&M[?�Р~e&PT(DOgѻy}v &t^އ7 o&%%W^[KxVg_`b5$%�0-9q?bď(^\K\&@瀾-ys',\)/$YpbJrբف܉nBj1�.8˾τqyWpxW@- f2Y: ?d_Rˋa^y-}}Bɂȩ[ B1R(4Rj(1ݾ d퉋O,?gMΏ7DAנ_e΂>ɂ }' d?/T3_ߚKLJĩ ίW+Wnȱޝd΂ yk{:j/Е LzuxL֛{~}lV;az8O6qij1iz\1` /΄~eʔ)|{%C3�+<q/Ą|}N@-ԙhP4-S_jI@dvܸ!D֍xcV_o ?yzt1v=4#V{‹#<ۯ%>?\1El`Xb%Bs@�%$+Oy(�<tVf(NQKUhwm |\ F 2g(SU(J+*ҕ댟�Ռ�AAa2=ڳXmɔ*Y  @lܯ xց�dɐ,3`bVmJ,'YpBɂȍ/]g9~Z2~=E'n RZY�W+Is^[|M *VfkkYmT\mkx_+gԉn|a٩T1RΰaO\pCک͛`m<ե9<TקνKY=]Vuxׯ yf7XX,VgG�~N?VrR"3͎`"$$ΖYRg?,$ EULh.uZZz@snU!7Hl $ B3Y w͏=¡&8:?B((z#K}n;O!J@$YY9g<Or=T؏^o"44e94j%c_xv/'HK32jxCJ ?YdA$YYV,?RʕJ1 ؚŵ4 s+P12qW8v<1#ӨAUƿQ $ ,$ "k%Byl ôM-S][Уk 0, reKQׇ$rL(,ըVA�R E]߼m\r@3lh(4cV=Oɂ$YYyuhz_ T.EzʕKc2YP(%8RxE_J^( #'V+ٶ%PHI@T*%J"$Yp9 Bɂ QN,^=WuWEd΂$ B d_wd /΄ILJf̧Qռ:cŋkd[>!))5ӯC5b^Kش}oزNVESN6lϷekky}z~=pEPP�4 |}B,8Ȝ!dA%_b٢!@͚.Kg札$\H"%o*UsZroʜ<u}OX6lnG1sJ/ƌhOz/v`_SzY^Meˎ}0 ~?t=\R\td�7n`2[R4_v9 ,$ w �)ccjHKKzLz k6ԫIUu0̨TJKB.ZBT`FɔqkҜϫYO]N ,H4:ۄJZ|S usZQtԫI>EQ* g̍\tݣ€-ys',\)y̞o?JR\x Eo04 '{J}ᄒȽ|aBj1�.�._LXXo ɂJDR:ncz F`0AYlvL&3AA^۰fjǑmy7k0#y__Ge΂s u�~W*YjRqd΂C} }΂ n_w 2oX,V.$9OvtII)ǭ̭q?.%%n%<kGޯ2gAdA҅;qzV}'>1).jj3n00.8uL9 >Χ3&\ɜY !9gARxׯ0mr,f+s܁1D :�T �ZDHHJcƫ=r%>ALe�~;xDV1饮3\JtK6[Jm6ޟ>Ά-?szy7{͆eӶY>\cG= ߰{!(ک)U/d5C% $ Ÿ@$Yȹ[Fаi>kɈ8dStJ._ILfɛ'<3g%"8}z<@jZFg% ܆`NH`קa-yzoK6WSYq/o#1fCl#zJF Ҭi 7V>j*;@!So`A,%s IQfy[ŊbCVVgwsHUJL7+dֳ[smk36p?Mf4؈{P(a4f  P*MffÆ_vdf6E>M4gߐdA$Y(jתM{l!�oU+`.6 ]/]h43f8uZ5s3|[[?]G Ш)U2Q\Č9[X{mfP(;>9[3yz#[?Wõq෌ 1*2i:ΜM~PI uWRg΂wYYHO73wTkv:j9o}6FSX~5(~f{xqD{J.u; yG, Y $U ?AC.-(�oɎjүCYl/_: ӟ`AVCɂW_-XdHQjOV$YIH ɂH F7H Ɵ(IP(Jv $J|[Q!d01o_ߍ&$ ,$ hh4yCy,99Y.E$ ,dA($ B% #ɂH FI@aaaBᛏ$YpdA$Y/,,?nƊ8BIf/` ɂ$ B ɂ)|LVI@!7,8Ƚ!@!7,L"ISP0ɊΛ)dq5(@kF).>1%$$axV?'7s*l6;Q{z >A<In_w .o~w2-{KRR]\rdfY!#p ZY1g iiF}L`_0q:,7B >ʜ!|q3�+<Ƕپc?j\Īw0cf]Kȩos vjJ*e<1}fn$i޴&];5c{_ogׅa~?bX1-FVa Tw%>!A< 3ވVȳ/aGiެOsd΂$ B ɂ_q S,^�]lN lCX9 fa6tؔCͳvׁ¹.2vvq!=|NRIHHB4ޟogʇԨVҥKx=~Le@�x*"|}!ɂ$ B ɂ_b,{v"Pw!)UZmiimf+kY懣$$$lѽUhҸsg=s~;x/=M|,,,eGI@῔J߁y wr.kԫȨ8ʌ?k1*2i:Μףw 5n9P�X sf̮Ukk=w>jK0L�f#G|}!ɂs+UJj�\<߽%YoyCy{DDdD/_uܾf8<S ШxcNykmc2Yw\nü 룯 u@,ƍ4N&tvwKRgA !2gA^MN[II)C74g˜Od΂(LzA~;q7}i΂o<H ,o /΄HO71pػRN$}{<K?#hCF\ʶMlT*:ˇkc'7p! Fq (^\K'Y^dž?3Lxm-W`4Z(Y"c:QzY_\dA!dAn6oeX,V.$ak),[4>/fR{XK 3Cxq- =mԠ*͚hʘb`԰vւo?ʕ FulJ{`IN6�s),f+-"\W!>|}rII@QhԘMKԎr>n4ih}4N P<LK@*hTJF3իeK]Xi/O]un,]K >yv<’,`>2HDVC7#�Ə~VfkkYmT\D Z7䍅9u(r}lx_}{c5T*xe\bű}TP.\ʄ֢7u /Z y-3Q0ub�xH'H{RgpUrR+!-HHHm?ᵵ<aa &4k͎jCQqIт$ɂH J݁O4&$$e"JRR_dA !2gA߻CP0ɊTpISP0Ɋ$ B ɂI|tR Ÿg (r,5K']I /(Jv{' wEQ&9 ŸI h~}ݍB#7& A,%QЌF#F>&s<H $ B_d$ @!%_wAZA KP=(w=ǣI_|r~IdAd/I DA:K%Y(IE �Cv#2gAn$׌+,?quT!dAQdAVCAIE ɂ_2P.E.$ $YKQc[_w)J7{H$Y ɂ_2P1P0~(?CrI$YBu҅uR7(!|A:B$YBBaI ܳosK\ +2PD7{zۥxVmX6M�\t%55eD_B[igGhA*7gzoqwZm{r1+;.^odɲs6}O7wp!tq?.d;g>8)$ ,RX0ޟpj*o/tmS+78% _Nfdvyrs܉f\K|[[: ⿋TZ\yk{:jEL![Jm6ޟUaC(PеSSV) ק9 ,$ ���IDAT¿iF*U嫾X F>ߖUgm `̈4jP/v(�|1:o䗻nOmZm&7Gƍ4�NȾT1 D7rzoK6WSy#ԮU/vj2�<м4,dA7IhT&3mOA+J,kT**օT*%AX6TWj*L&Khܰ*=GqO А ƌ65A I\H $ T\.ݴkݐϿwVa<71g FżuYq/o];6چgn0~G?MklAt vp-I:Yn^ҵ}bUdu9/�vgێ>>QXEu `n*ɂ+,w-Wn_3aaaef$$$h۱Zmժ?fc2 s pHNN3 0oGoтTCȽ!: 0d@@Tj�f9y-Hro!9 B'nu ˽! hȜd΂G?|>@Z yA-fH I 7s#YO5ک8"((vmRlI6m߇b2njlV;az8O6hsl߱Y+EQT1fڃcQULz+~?C`ѕX .϶Ml�CV2n|;z w#I<H $ 08%@/T.,k" #(PÖ'8>ͳZs^dStPWY@ 9}_")m &=݄hni flMZ[˗oXb#9wZon$ɂIdAf?v{՚eB.bʬM d Z1Rdг[s>k360h4j&3oc P<LK@tX6ʖ)鬿�^onTX,jd5WvBCy핧XK&Z'a@ߖBCxyc?q vЯCfƌ�g_9s_4jJ !,"^YMkEԴ|(7nR\)gg~jUt!!@,S(eRgDB@@l6;F0>R6:%%bh6[Q`2YP(h4[)u: ɂg,$dFZݻDp[nTX 2gAZ>T]kȜ,%ɂ$Y ɂ_2PB$ $YK!/HAd |APbk| P݉,xdA/IDA3oQhfda"ɂI(hFnd$ I I<H  ɂIdA.x?'I\x$YD Bܞ0v]{ ^t,<Y:%YInm$ d΂_2PBY ɂ_,!|A,%!/HA$YhZmt: Y<Am I K,]y& $@A2e&澹 Il޾3gq}'sܦ^odɲ󬏿Y18Xѐ$ ŸH D>{374oZ[gۻ:;7DeQlھ ϷTP{@։䅡O8/Ç~{KPw S6o-/_S-�XY<mcޣlْD׍Op'?r4##0.9O|*@% v$YL Bs]B dŊt5~t%5aˎ}pZ  ᅡO�@Z<м}X6z@#qF�'O]dST?7R\) 8Cpp�cFQ 7ɂu I ,Qf+NGoR4*B.n:\j܇J$44ՆJbZ佀lqêڂ][קQRhCTbX\HAd D^,qqWZoZB#GOh߶�şp?p�rێl۱?<tKF>+�4oZ~g{]'.0oNՉ$M΢ww( ܃@3lh󪕅e΂bJrb�xTNtt4F),BDD�/_uW5_q;M& Y6Lppmfc2 y@ Je^pHNNv>2J!dA_n�T*hh#7RgY$ BۓBHH`M,x9 @A2rYĩ $&=9 ,$ Bⷃg'8v"=R_oy{gthۈkSٶc?z -Cgpw$�6.$Ѩ83:cŋkd"ذgF>ߖ eּF %K0~L'jT/'+ɂIgXb%BG}_"5H|՗ flMZ[˗{ۨAU5є1 39a٭|+70tؔVfl�ƍ4,f+-"\W!>%Y ɂ_,{v�z+Mf<Z&ӧ|!4"==g24jLjeRlSiݪ>k2 6G`:ȉ’,j!dA_9x/M񣟤ZlV+`0Wh׺!o,o D[c#;OϮe,R+{,#%@TJrU&R!|aY !uWwۚ’,HufBVnU -HHHm?ᵵ<aa &4k͎jCQْ: 9dA0Pnqp'hLHHDH%J2/ <Y]�ro!“,q7KO7fD+6qDEgNf5}}(NrorId KLJĩW"zyk%wt!ɂo,._e 2� x}l6j(ϨaOm~OZ`0p'?r4#1Lj=vcb3�+<WUX ,""ӧi�vqgDQ}gƝ'<ٔ/ȸØIO73Ŏ�$3nNen4%C)Y֫*Yp!ɂo,Qlv JE︕J%u@ihu|6P�IH o~;Æ?qUJ x}vV2&4['.0wy2K71g GwEZLzzw@>܆:w K uWwۚ’,HufBNu~;xŵ<Ѻag4Z ,z.-H [a(!P(w4Q_Z9~ dA,AIBCx׃9 @A rI!dArI,%!/HA$Y)Jv K$ $YK BHf/u)ke ɂ,%ɂh4b4} f$ɂI$Y ɂ_,!|ARQ\h_wJG@v]nB9{! /IZ]*8f"!r/--]B䳻$ ¿\1Gr#) goݪ0<$YD B!'I2dA!$B&Y |y>,] -•$ x9Ǿ->=)EB~e $ d,d ><%ElBCLd΂BILd Bxd!IBO,d׃3gFrTv˗o`H7Q1׹.QxJBqdAY0S^HM50ns1W3n[|\?ٞx|Mc̘嶏erF!u d)S#i>,+/<ߖ7�tSa_c49~hs /΄ao}qFL'*WM ШII10]LԝfUJ~ٸd;i=ϖp?z(}'YWzwxB?& xjdoF\ʖxat ;v<�]Zc<oX/ysp!֏N3lPkýJJJRF9#tr?^zߥ_)8X~?t=\R�TA܏J!d}},cVX*f ݻ4GH@*{v?�)gW+KZ8nh}[ U*FRzk(UZmiigJb_<?_B!OGߥ 4g{@6 y5y<}[OXS8uzuرWV{*VfkkILJr@ƅ<;?rq?bď0-<p4o.mxf7oZG8r4!GG% *U#n_Wm6;FndL^+w4{8shbc ]2E׌)j?^GKJ<N r^_B!&LԜBHH AA{QqC@Z<|А`jT/!s΂^ode.דݸa`[; xBI^% ~=pEPP�4|ْ.u V|@rW6?t|QOol#B:36P.O6ڵ4ԏ_Pvy؏^o"44eR~8BBB"|+Wn0͝m6yJ|.cmxq !7XgP% b%B&*Kxs}{ ܬk`dmiԠ )6jPfMk`4eLLN10jX;zvk7J #:6UHO7a4ZFr[SVXq/oO ctjߘ/wcnXB~,dBVjV/|ܽYnhTJF3իeK]Xi/O]DW2i4"=sufGPh�0-T*g-9V!?& Ÿ0~Z6ʕKs៫.;`:9֏շG8v<]3 ,Y1JWu!X[?GJ :V)øWVS:8@gtЄ>F kG PӵS3v5g L*ǻN: pu &t",,9 =݄Fv~m6[Q(9njV|}: EY_/E: .YV;k t辤RQYBvcBQcP,䥸D"ý~yB?Y(ԫ!ON:Y<m??BQjL|,\w*l۹; &-O -Ȩ<>.8g<Or=oxnXY<Oum ! ɂ#Jk$�ty):](�ўF 2Ŏ^/ժGSRi>G톓.o)*U`lS!�I\*Yp(J,km|;JGbXGT*KBUѵ= ((�?\RDDɹB$YWB8>\=ׯUA;9~sK Do01cFI5㻽oR^H,zw7ߎR9[9r|!"Qg!k$B@ E6 F Rg: K^3<: -Y�|>jm_ B!\d}},sPT*%JB!LG[(9 /susʍ,/uBDGIի{'VmRz9漹F>QLIyeK]7?pEBC0Gbf}X,V^x-ʕb;z-ZY!-ԙhP4-{: o/!>F&kØ�`XYโ!,{Cd=iצd-?ө}c֎bΛ3fx;ʗ+śs0x (զC�,kjT/իlٱ֭%0@~}{>@rukÆ?ҭS3ƌhOz/v 9Eq+t DV.Jɒ!cBwT`4]nd2[PTTJ%a�ʼ>/{e8f ݻ4GH@SgAq RjsVuԘLfHCsQb2PBYȤ,kӈud札qZ>X26ѵc3�W?3J#P* ے7¥Fqb3lah޴mBf2k#[nno-h: >jX,om1L<f4]CgQȪBvu B,: EY_/EqYݜ@ۻ󸨪X4A7ܗ~ZjKm13-Ŭ5s),5r)\rC RdaL 3` _/_2w={g\�Bq@\V0o5˳� "c]A…T\Z^o$;@HHB ]~a,Kp!)wSMK!D c]c>[ �)Y<vN”Yzu{[~BxoP"{zoFExXeڙOcq3Ft%99Fa�(VLH@=-[flڼɷ[ @5ߧ b5bZ; ¡]?Űv^JO?ޑ"* Lf9BkT~j|8.&_8}>b<1C2!!= ?? Kdl &?Y"j@JA ؞9�t{3u{ӳ!!)-+J ݣ%�`֔'\SzN1i@v? Y3&9u6şR@|5߼:^FFF6�ujWa@vR!HB>gXl~FtaZm(q'I*J%|TJV0gS&T*\h}1`P*ܯ_0gFh4_wJjNKʶhv I!(MgDΆZ<q6g ; <28x(5F�T*%+¾ygn̹[8q273_[.@-#�00i5ex~C'8竱?RITPVѯ/sJڔ'/gC2~׶>קmH,6 gݜ8̹[rO֯+>ʕly/g_H,!D)㍳!JlŊfs.o[@֑]l`6[DZ6FSkg<6M[.q< Y^.|HvQ]GV9_P*�Ξ/:r6!= %jBN?gLt|pYou>Eu%P|L?ujW/KM" HBcJl{60{6Z8t۝@3`wnYMVV32rfe'O'uK*d6D>EY8x ah{�._`͆x񹮼J;ϰЭKS ŒŤX;6niӪCW ƿ& b'Ч- }|iP:/|ء?<9~fOmus ㇣WZ4JF6eoLڌvmұCڸ׾#gYϼrCgYnj %0пxNB[{JĘ'hXj#33|Fʌ;fwg3T zhIGڄiU>=[î?dfս�Wp5ۀbf,\v8v< _㹡y&Ǝr aQB +l*xkSifԢu8 ܁g^R  BQy㘅b `Tt`B.4mƩ3I ezz}yd'LZEȻi$ j JbqYO|VkIK~mg^7�+ `4 ߞjGQ5y SmBx'Ghq*`˘&ÈOHa;o)_ IiJt9ԫ[_ʷ;ؗWNXA^< /]alzvDNX*nU�rLu%EB=Ԕv%;Xa}ydt:Οl<˦q|4j)Bq]ޅgA7;jaXhi4[].W7#;lw-ww%Bi!y|gKi;g_JJ)ʅfwn((�n!%7Y(!nƥKWJd)SҸ˄V, B܀7Ά(yn`bݦ}Ğu?o3E*wo[BɳYw4\#=[2UF?(CV2q\?BkT~jnYr7l?~m]nXNILڛd#(Pзw+3mlV+O@Nu,X|ifʘ ˱ZlTHlτGӲEmfFjj&uArJt|OF!,_z6 `BQV@\eE-T9O@HHnzeWi0F 3O<@w3vt/jŏwL׏U`?EjXy+Q<DG=GH1!^Sط45C+ft:=J ,_z||U_jb] ێ}ҤQ0ͅ*U޿xj|֯J^DP*Unu=0 />>*~+|}}a4֯VP*&3ֲ͛[ޠ9%BسPfC׽k3CNGMQ̙Jժi*is&%-j<W>[lV5C+Bըa(Yӏ?@0uۻr Ԑ̙2em}۬\ 摞-iX:7μOI !o Q,܈hFPͽlpdf8nZmNcr^^WeX6 T�Am0m3''7DŽRy3ѥY(-$ςw)mC,)>>ߝMM|}Y J LP*.Ѩ;\o}!7,1 leO )TR)ZZnE@˄SB!J>oP"gC7u7ZCgٴ�>1P,ZlZwv'O'BIfCs= |=u|91W`Z5IVˡX*VW{3}fRR2IId{SB l&-*ukW[7̯p# Uǟ7 uddh*[;F�xmr||4Lx++<ֿz9˲/՗{0)W}߅B|ҳ,tFzhV_KJJ&?ì)Ob6[Jڙ>Zq䏿9u: _5SSw,T~`X~ws/2kʓl>r#~?ڞ~3n6ZnUC+}OKZ<R!m= ,8? '".ϕ*P((^o/Ѩ1]˱P>,Zz17SW,ScXXv RۦFt`2YrOp*9n$ ƛ*C!wq}}t׳Z&aJRR3 v| jPĤT&O[U_!y ]MK׭;0>vD/[+iӪ <|G:KW>{3'N&2soz;:Ʋ?sP{׫C!D= *B|iz}nBqSnE;z-ncO,g{wƻ!ynã o!Ûɯp+q!%YV ŕ{K |2Z?>!+�{"4}Hv*C!D'!c#տhr M W 理fqtbBQy㘅߳P0Ge@9u{PULx/뫦qTM>^=錔)Ǣy#n("տ,_LCvm:nxlܲMs&4i]wEqO0�\5iӳ%M;QB!JYV,=p9%sRB g/rE*U û^o`0cAFf699&F} -M|ũ [ҸQM"jU Yov�Чg+BBR lk '@^h$eE ƞgZp'̣`(ޚgAQc0/@->>*XgddFM oUZ~w\U!7Y(!ry"G`0/0[<73 6">5 e˩\)/MOh:UYi?'Z`LybPf‰L'wޥ)gDv5F�ԮʆCk*XƊտ`?!(]q6D˳0|8G<ge)[dR)`0rH?wh4Ng< K3ޥɳpoE !P�|(Xnh[A!ƞb ՘ۡcŷKB!-vc6dz!BRggA!(ɤg!YB!IB>׋ %6c4R(4 !Og"= xP [(͊2mR!\,�`B!<{d̂BEdB>2B!p= ^5fAlnB"݄Ș|$H(]c߇lfO7DP(4n=Z!YGzJ@v'B둞|$HB!ycς̆B!̆GzBgҳ,,z\ёsKIN .wW! Ezqt"5*R~??:u/;|,Wо~8Ȓ/vX{ Q {C:[R~LzgAfCbq??uiJ,g^}'�{~;qJ6Þ~~櫍)\O؅`".2O T#gYv*7់|8�/lWXh% f}w& `D֮ZM0-\WNJd(++KOߡL?Oz!D #! b4 ؗn;r_h泬X~kᇚѡ}}>be@vdfս:Väw4I-ۻ56lt{\n(Kd]E3c ӆ_:vQfe:ul]~~^72=RQtҳ,y"kWuBJſ_ !eHR`ZdAVR0,jS*<ֿu Jd23O[S ۥP@(b !J.oY(= (ܹ6|?cʟ9x(G˨_yATkk2u5ؼ�K~[3ajmnO2f ƌ_`3oݻ6!3s?c ծ#>N3 !GY*U#r%ؗIςw"&&rl RX,\/trr7UdAQca0LR54i3"mUR%�o>q{:Zd̂ ~9u@RŁB\YGzD~yRW|B 5W. !K8fAzW9w ]ԯ~ڻ B%= Hςp قjhUO>?fc9v<CGΡQ+8F t?Gzt*p1 oKW'֨D<}X $Q&_͌0#8t:#?I\e|Z<B2س !Wqޜj^�t:#{`g Q z/s(,+Q<DG=Q/t###�B7vFs4mȡp4d]5s]ivO8YWoM:j!gCȳ!W2̨T*{<w"p34m__~ Q; f1uX,V||&\ 0T*Z?|}4ج<"U͙r$*5`꬯Qӷwku}|tŜ[ћx鹮7,+,_'9w kǁCg3~ @R2{6lV5C+T*h׺.oLC$xɳ \*< l6,+jCf MMʪ{x͍V99F| fY(mJҨ$ɳ F @r{nV�:ul( @ B\7,ȘQ.$b6;?ҥ+u'\^C"q̂̆e9-L۴س:;ey\qK?|,,!gCHQ,>b'Gqx^ѕr(:xބ֨H&BxXe:Ee=*&֗@ ~a9:DѱCvΜ&S磏Eo0ѣk3*V/va0K:xP !J8o̳ cmg2Y>zccZ/xmBb*q&/Bz56kEմYtzΜHA<^ܼ #_^ @Q>r!j.۳? {t +ՠ:Mqt:W DԪ?lɋ ӎ,B2f!pZm(=YRbYѨ1s(h*~QWז;F5>vBl|`0t5Wd8n0Mty1gaIoVݿ`F!J,#cj*ˈ>zJ=MxfvvBV|gMrL+j]z6m=QS>80}f{^:0eF~}e;Y8uejw;`ݰky.�-@3x !J o yK#B|FY((+KOٲ~iz#~~Impb|nzM g)K|>$B>$y +QY( ກ@jL,؄7,l!n1"cyl (7ʳX;O7Sq1 ҳ BZUf}F.M]!B+QJ0Q 3YNILڛc1զ}^z+Ugͤ_nTV)yHM$ 3na'62#8t:#ש�z !JoY1 +|#n]Ѷu$�kgu3)> Gzt;g绨S iiWYyuj;~ Sط4שk_ּBwzcG 3Kj`47§ F&(dB>ҳ 3MOtgB@�TܻgS'׽_5̀>mt?h4y&3͛b`v ??rrϮQc4` !e%PB6ҳ "n]1mO0u;7ς@PbڨZ RSC:2g6ʔ㾶z]Z"O `ϳпO[:׀~g'A12yzƎMuydd4^ ɔBqxcςY.ݎ<  ngjcth0L;Q7ApE}zA@Y(mJҨ$ɳ •ogAT8;P*8oB B\7,ȳ!G\HL 덤f]?>!H̢t UjB܈<"ɳpgl.22t�fqt;U SfQ &mGYTo#g_ !J9ɳY(zoFExXeڙOcq3Ft%99Fa�(VLH@=-[flڼpߧ b5bZ; ¡]?Űv^JO?ޑ"* Lf9BkT~j|8.&_8}>b<1ҳ n?? Kdl &?Y"j>jR l�rF=Ԍa�ي2�X,VһGK�>_3o)ORr92z#:6bā)Vsg<Mrl?EjXyuFЍl�Ԯ€>ս B{d̂mͶps wRSSU(JLQ,._a@nBHYl(0 A�4jFۨT ,VuZUv!(,lqTRLȝUVWXF�<˚ {ILL\P�*ka߁<3`-8ٛЯ- }G`U�}L2~<?!R?~ X __攴)O קmH,6 gݜ8̹[rO֯+>ʕly/g_H7|¦BgAt,X,Vl6Hwy z�ڶ:f0%ja4 xi?Ylzp Y(mJҨ$ɳ wW-h0:j)R(t�pE�^}uqA!n7oY+dg%<rLhhEezl!!e]n78R!̆GfCL|w s~/{n.G̳ٛ|n._(J7t;Bo != £6lGd@nN__5j;|=uFtag?8nHLJQK.#%%)Ms::uaj/>וZws??uiJ88p(Դ,&Mȟ%8ٱCOJ!D)= 2fAx3rhgk9 t:#{| c>CY;NIn ؞�ЩccȣZ<.]!337C^LxXeƿe;kW ~}Ы{ 2V1 gAxTfɗBYQc0r"'"<7S �*RZ:7Bl0sgm[OdmIy7͚ٟiL!U$B>ҳ �zwo쏶PƏ{DҤQcXNJAk}/r22 +ß? }{m:L}@$&[+ zu_9u*8)7,HҭʳPX:xjɂJ[JQs7bڰXh4Bo4==ɳPڔyQI>g! D~|75w+Jp !>oY1 X,V:q޹ҥ+>rWRnY:Gr%'gcBܡq̂Y捷VrL&Azuo#}nY?bؼΜ+WGβכ!I|deg?pP,B1g8tZ"Vsp1 oaƩWXL?䣏Eo0ѣk3ڵKumOd_xmT/Tna3G̟qtFZ4k ҧgK0L%\AXn/cX!_C/(a1ς,b1^ݻ;AAZ>^̡.B7{}jnP:GαuamSjYBcjQ>=23K@) rr ՊM©S W<1V~a֔'1-\HLB0س cDXT+}gh$�ZhvJdt c'p5eC:HU0Mty1gauhTMp'7'C^އUZ~w^k57߂Gd,|]B2f,ܹ||tŜ[`Fڶ䋕?h.^ٛ9q2s:kg/R;r\˴iUn5廝pn@xXeNNb' vkYwG[/[+Ԩټ�KJ&aJRR3 c !lس yKőgh4P( l`6[<1qB*lf҄/_ph.p7wC$BiSF%|H|$H/jC"*l�(s+E7!yd6c\CTunf !p8Bzc'S(O7E!Kz򑞅;ˊտpLexNyV tZ<h{ZyHM$<1a;[t|S�BkU?xnYw##SGVݚLreY̚$iiW,Vݻ4_hU|ѽnA!{d6(GѴI#vb:YX!':r9rF=Ԍa:ľZ50̄Ufg] �Rx̟,�?ԌIΝVˬ)O#�_fCvowDӭK3;{C7b0 #3P(q6Yb!1Ny4hȝQVP*&3͛b`vY6>0vUV)Kppk/99L& Ϳk6JQ( `0b0fkh4j .vv_7gByd̂(}-6,M\W۬\ 摞-iX:7μOI UcT(Ԏ?[+iӪ n]1mOPƼʕ?j/g_H2+BQd8fA,nuFNa< _o=@P`�m[G:L]1qD}becM& *ކ yJ<4*C,#AET8;pwn0)ǁ2Fa �f?!+س cW Lj!L'FRSTgjjzӻ.y !͆1䙏Zm{`6,[N.%5ԾI)b!7Ά< =m f𑳬ZJca>|h޴O-ٴy?o粞 /{֮ߋBW(,g^}'�ȅT45<BBb*AV1ᵾ<o~ٸy?:2eX4ogG!H|gԫ{ Dj&MHNٽO97Bz՘7~wJ )s:*U b\roItȞ_fԢu:43rxn<گ?>ΙT1 B`S#>DPMINC-(gA,bUJ0ֿﵙFZJd�ιr!+FBVb0x_[[p?N�|4jQB7YU\sޭ0i599F?�p eԫ[ J̹[8q27ܕ<bYa/i W_ _cODͽ1m( ӇM[{:[Px.B28B,nuwr3)zL[+Joc-F,6%y^iTχYGFP@χ0H1Pv !DQycς̆…#=!gCHςBEgAfC!^DfC#= B!3oY1 Q(lO7DP(BdB>$.ƭG{%JQM ! ҳ,.B&= H B8ƞ !Bxo ѧN;(/.CWC/:1 ;Uhݵ݈gc(r%ItMBx箣 )I<ƪF4IH'־̿lyN?*KȃWI~pQiT·ҳ KzTtB,!(B!( YB![ҳ BgA!nIςB!ܒ!B%= 6h֬}yիtB]viiG$$$ӻ+,[ѣ8azbq/Ze>>>_ӝF гGu|4k֌�֡mB!+y6jשC˼[deeEPqI<J (W[Po޶m)!ӸQ#ΝKtt4{m[b-[X,XV ΫGӠAJ%Ѽ;>4BQBIς.\H�/Zkc0x xl BCC)ĥK0$&&N-1XVؑ)Ӧa0Y&@ll,K.%** =z`6<$קA|yh4>,BQIς<d￟^z_ɄNfV큁bAVcZϞh2`ÆRoLӑ,?BAvv6f2lrb g8M2`T* K>]6A+TV~ר՜9{Zܼ ii:u IHwԋ-8߅FL>Zɓꫯ`8{,/\J1yrB<YˣFQn]F#ǏgZj9shhZt:�f`ڵi)+�Xy;jĝ!z999=T7rJcƌ!%5jwMٳtzN:"%,[L,55Ty?̅] )!aY`�Wff3m۴ȑ#lذӇE!J0ɳ \ N,y Z*t/d{0B !\ȟUN~W@v�#_txndkY(~z)B2nwkQSBqg1 F[nX,l6C cahٳg=lۺmJ=ضu+zF#XV6mL,MO2w\233y򩧜ʜG疹Oiۦ 5bpAfϙ>Ϗ4)WÇsJWޞ>5B!ҳ ȟ@R9D�xvP<x0-Z`ԩW^�XV,XcɢEDGGsI'33RI&MP*III4ieF# *sӦM:t]CRR}f͚1|pΦlٲ4op@BB͛"$c ̉`tf4^f99(U*�J%}0fCEFFؼe VZJ$5-(gU"*jaZdgg{<4 iii_?8\ 3gիK@I!<ҳ Q:kV/ CR9D�XT\ 7riޜ8FkN=zZj�!T*`< ӦNa]i<h-Z�DDDovZye(^3a1nX"""ldffz!x:Y*U#rS'xlGKV0hl`4r",\oIBB}bFnX72ijc@NBht:OЧ'ApZ< OjZ*``˗-c8xs1s T*˖/ѣ@`ƚ5kB\\իJŊ\gϝsyT�ɞn( **ʞgDx^i;J/n())~S0C2_]�HtP?222qg!-,SD9¹s�h4:6Gܵ$QBq7L8=$!(d̂B!ܒڶ[Nzz: &==ss9H=-‹vIEbdpp0aaӴiS�|wG!J(YPzz:9P:u`׮]nB02fAry$򂄱& !D #d׮]L1aCz)BQHς{ BQHςI E!= өS'v G!(YwfM&3"H$ςӯo_ү\| BQdgAx;?>3:V>} m^Rr<ةL1ӻ$%,/:u�bϑPt1~wE!J8Y^D]Hh2 Z-Bҳ XjZ1~f۶mnBd6B!ܒ< B!pKzB,!-YB![ҳ BgA!nIςB!ܒ!B%= B!pKzB,!-YB^hѢZ ~։e߯o-[,&,B ayƍKQ:Z!ȿΈy<!!!ڗU^ڵj9[=o/M7恎/jBquQ-= U*UPլ^V7ޠE�̞=QFhlXV>ϏO۶mضu+{f٧bxZ}ۓ|2�|1DGGd/^fCTңgO9:wFTҥ\6[yX,<ts:A<}Hς(Ǐsa16H-2u*gbcի�.\ 11J?O@@�ٔ-[={͉'ޣC�P]lٺ#GbZШUƲtRx'IJJbĈm]b4X,Z0[,,^Ç;y>BegAVe̙t:}O<6 ٌ>'2e`6Q(L&IKKE�PS(dggcXѸ;[#%5RBf=uq!1`_V~֭_bcǎDDDw\S;B'= jTUXWsiޜ8FkNׂ�ZRd]ʨQ6f !sQjժŗ+V8a4bŊ8tHu} wu]]9~8Qx�9~f͚1kLytB@@�ɬ]֩B!uTZmUFD--BCC\gϝ#55Fq%=FFܞY&)))A<u<u:9iv,[nN<ſOCk?M﹇Gqzj9qℽMySRS[.FǏ S8T�ɞn( **-JuoCH­t!=v瓧N9mEm.]&ϟK5gdڷ !,, Lzݶ8qiYzKMMujB<gAȑt*a Q!$aJ%^ԟ0q"aaa>LBq1 …f͚p-OVu  �u##^d=Ow5}գo>N Y0CaMm!slQ[lhZFIBTbؾ};ݺub`:lÇ sȷ=lۺhӦ=zmVz=#F0 hZlڼ:P&@˳C{bVeܹdffSO99-sɧҶM5j_Afϙ_a-X,V+Æ9s@RѫwoO!Yt ZҥKf ١CIKKc.-XV,XcɢENv|=(J4iRdHJJIL6 Ȋ6 �F# *sӦM:t]CRR}f͚]7B^އ@BB͛"$c fV+ZfCa6\{oART*WyV+RIjZ:999a#7KvtpUj%[z-@vvCѐ x7ٌ?3gիK@I!<ҳ Q:kVFV3ydPTZb_~IʕٰqSWWHII!CPTN.1Ls3!2m6 E>|ymWl;l6>=B!gASKfVpB&& .-� ϯBht:OЧ'ApZw:ac^;+;*se_r9fΘJb=zpίWVIIMbŊN%Tg{y%]i;J/\K/))~͓?ι_0A^ m] @kK^]<yGp9�bbb0mwM-!w !h8y':^|$%YB![ҳ Xۖ|K�IOO_Ppp0syΟ;B箣2fAo{FXx8M6`ɧzzwQ s8=ѹ ѩS'�v !D #cD)wK"/HknB0QAv36t"%,;Ppp %,; BQҳ 0:ub rB"qiִ)aa2#B!D,;@pp0%ɷ E&yz3ӈ*jӧP%e*̃:3<KBQBIςRgOѩS'hX, M{zW᥎MdхV*ÀQ; != ‹sgm!LfC!-ɳ BgA!n= B!($XB![,!- B B!pK!B%B!ܒ`A!nI B$X(aBBBի-Z@t!!!/:w}7ޠe˖ЄB', !!!,Y><¸cQ}y~5WG:1|8/u"$$?_իSV-r ǝmI<бE-S!D+GTJ*jVYw}VeoТE �fϞͨQh4l6V+ agGNNm۶�lۺ=z`Ol|l-{I|WF>CfYd /fT*ѳS[GC;T*lRV\I֭? X,:ܹsؠA>B!:|F` ҢE LʙXz HLLDR@vv6e˖e޽DGGsIa/{!�Tz[nѣجV�4j,](|I1bup׮F, sz?V- +/fl޼Bkgj̜9NDz/'fa6PlY�f3 DP` iii|h�qqq=uP(lqYwNGJj*JBfs3ºu븐`/Ss?r֯bбcG""";.ΩB!, 5WgU+9}4oNHFصs'kAZFTs.ye(^39z(j+l {YEEQbE^:$ :۾.?~ʨQ<S�?Nf͘5s&< ]t! d֮]N!AZm@vՈ(�bc<%^hh(+UsШQ#@Ht:?5k$%%{ ȓNQ72NѼ]' ' ?e+͉ rrrpm�=H>.Z^=Z-'N)o@cJj*uh4rq wpcv G*U 99MDEE#Ei;m&..Bz1'OrF< N$]L?. 6kHȴoBXXL:m=qӲFGG;N!'!#Gҩ+F`){Qcĉy0 !$Xb͚5#ZVt/xwm�FF:!((zp4jPe׫G>}r%,`·´=$$a&B!܆R۶nfj9r$]zRfct łfca 6!¯{mV, �M6[h4&jif:v@�-@eZs璙ɓO=T漏>?%~J6mhԨQn~=gS~[`XZ >! �JE޽=}j#= ^{f�*.]l6Hxx8�JZZvoj`4O-rʯDTҤIJ%?DRRM7fʴi FV|e�`4<dgU6mСCt4k>ԯ_�h<O!#IPBfV+ZfCa6\{oART*WyV+RIjZ:999a#7KvtpUj%[z-@vvCѐ x7ٌ?3gիK@I!D` ը^5WV<y2aaaT*E[s-/rlظ)߂++�!T*Ky/$]b#ݙfCWel6D-8|0�7̯`7v,l6233=}z#yP,-ZW… $$$̷�'?BHH5jOH=m B@FFUkJiyb˖~z<ȹs9c*e˗sQ9B^Y5W'%5+:喸SIUt|x:*Ns/!$6O| :B ~yy2229wB^;/yu,SD9¹s�h4:6*B#B 5Cĉ^/[MBQD2fA!nIς-!�``IOO?wR; !(9$X7ہ#$+vNӦMX駞!E$m9ކrԩ�vtBY"D^0<$!$(vvb :MBQ, tB c$XBA:ub rBAQ5mJxẌBBNbL}IrE-!D "pL#ΫjyOBm\p0vDzz:g. !(" [gOѩS'hX, M{zWB$ [&BB+a@jB; R҈93۶mtSBx̆B![,!- B B!pK!B%B!ܒ`A!nI B$XB![,!- B B!pK!B%B!ܒ`A!nI B$XB![,!- B B!pK!BU,BV%?�Z>4Xi @x^{] v_g]"+.JҒ=Bɗ{$ĝ(+-٣+Bkִy P55HO:k_\qq$tPR%�=C8"&&d̂B!ܒ`A!n˘!kz@�z.  y7s> MJ,AcG?CyB %[`:$X£Ӎgi<&cB B!pK!B%T8|,/]qx?>!M%z#Y…TŞ#gX($XBx;"�3m';ﭥEYN_fk~?bؼz{*RHzb9^)Y<xr%tի97uC2BQ(e=TJӇ5&T^ob3{6RS3s7O gXN|֥)];T1SWssG4k;0z5 cp!aO?]6G#NU-o'7nϦy4կБshJ&ǬIJj&{-b#(Pзw+jłE]nx/�0-̟*錔)Ǣy#PKN`︧Q�;~8ʲU?R>mOy�4_}0U|0i?΀>m5s*(ҡ R6g3jB�xw:22umIޭi8*W}%,! e=L8Ν{ϟ۶}h(Sط45C+ft:F̟@…TU }ۺC2DTrr7lSzي2�X,V>^̡d]ṡӫGgxzuf^ mҾmݛ>^�Rx̟񺒡cЇ ҴI8WʬT)s5;n5cCXn/%p_ lx(y#s㻝Gx\nPt%Z_fMy}% BB1,JT*&58zo] FMk1o;,�^9΅ ;}XY̚$cGrjca0h,3gqXGQa4]noXrW0дI8�ˢ7Rk;/_? AZ||T˿VP*T*%K?ǥW;a~sCيJBx6,h4vBlk1-WQI (~[3ajmafQ|֯NNϼO3u&J xip)9獷Vgs~ `hݽ/r ̩Id;�3nDLZU:vb|0s#/g�ܼ5 e;={qdevy9^ŗ?îclz�+¸_HϖFDًԎ@*GϡPܸΝ̞վ}|e^k%mZձѽKSƽ%p}%<Z#ߛo<CZ{W:99F|}5bqYr7f=\39FBqжu$fg`0/ 0fh4s2 MC6ctC pBZa.>(ՋƴɃ%P�^n}5 ͽ}/PUՎ%P�VWčH (Qfa=q1 B!pK!B%B!ܒ1 Bx ⎧P9:Bx`sFѐ馋t357s>dI 999K effy"r>n- B$XB![rxu_+;zMċ0  O7+Ip }bo< Bq[)J-uHp  [!l2 B$XB![,!- (,+zKpY^u)fY}22tdd\}s,-H^,q%'gЩ$ޝt9W뾿׿x>g3SL۴سNNEi/.G_'O'u)8򽌌f~X܅(SYd6;e:ڶsh+Lu{]9Fd~Lf> 4_F>TfXh% 2*%_mڇlrT"kET6~NءSVg?B/_:Wx;�fFjj&uAǔ+W{o?̹[I ny }Aڶ,\n/cX!_^ot8^CG`GfqjLשGβ˟y�|0c#ShԌ>9y AAZlICX7^|+ qo~`&\�c_MU n Rxnhg._`ڜ-جV܁FQ5ء_m[}-ٸrEΦMٸe?61<WW&3SǐG#U6nޏNgL?o?ԓ-SqG;wZ/<P?iW  %;^>iY,7e�]JtlSj]TԱ&dO1tŽm.ŊNgt\B7228u:}OS3kA3~%_KNW^N{j1vt/eYPj1̚$f NkGmfhE/^x+ 'jrS֭`0Nhv8S21ЯW+6 j[VFF6fvR!,#?NItc_3Ium wL׏UԾT�}z"$ �>.A~Ƅլ7EcbЇ ҴI8D FS#h&߯f˃lU] ێ}l~n˭Q<PJd23O[S Bʢ%''7)Bl˸rEǙ$Z4@RRߘ_Va4Ne4i޴}_|T1BA�? #;6FZ[/DӲym'@뇯Vz�4jD*Lx_~+'N'P@-jz#V BF/Je?_7>ۙ3GT:Vre@#\�kB3:}fF2YwUoM:( ?9ѽk3||tŜ[`F?Iƌ_+0e<5#soc߰`lFT(sm[a̍8�c⻫u<xGFVw6|gKW>{3'N&2s֯NNϼO3u&vBP.i1r/~k}MM&aJRR3 p寪CMn,\<mz;:Ʋ?sP6k."x͕ljT |2$&[+P*ows\+>Z׋}7]`T�3nDKW\DT_e?T@%FQB܈"f‡D 3 g4Q}?N-ja0)/A�pCF ?•cW,J7:�|oZɸWzoYh4jkՆb-936[nj(̾W7`0r{v|fK7 MڌZ_܆n˾(R*�w/Ne%P�T*@ u<Jhʂ @_QWay+%;i!5d̂B!ܒ`A!nI BdBPڅ: #S'�xyu NzR}YPP<Fѐ馈t35m;t".rwdI(u0  WF';*e>z%~~~B=.#)s-TхK&I gta]AU=ݬK8 !- B B!pK!B%B!ܒ`A!nI B$ς®nd$6 G#>!vaX}>�BBB6l>;׾#{Ott2V~ۺ/!!!�z Q:H 9s&999T*> n~=1 >s~\aaaBF /={d6xˀ$OHH V@ٗը^^waē`A,\{۵c|t|&Mψaoh"Lb~TV,�ƏO-lL>ƍ1w\{kZ~=%Kx~HI|dRgKҢE 7jl&::,ڶm [ޣ%YB8ذ~=UT;PT(U*j5MSK/\;&ѠaC?ZHJt+�bccYt)QQQN>�)[,YYY57oN5Xhwhbп_?4jC^ DN<),!L0t:#{?__1�XVPYg3d`O �u:RRSQ*^h4ɢE�q9ƾW^ŋX,֭[DžD  p*fTBwgASq�ϟ_$,, -i5j`$&&7ͬ_ SZ5ڵN-��IDATkǻ&I4nJέZY]@^5ƌ!|yVZVeߵǏg2jO?2=JZr OR!J<Eh͚^( F4"4Óڂ"..$7πŧRJ�$''ߖFFr)kVK:up9%*ѣG\XzurNGNGDD$%`옓CCBBY&)))ۖP^=Z-'Ne5WG:ELLmG}sįמ7.tJ$ !+xQtAۺ0&f2\`==qCt7BQxrB!nI r5FzrʽFP|eʕ Bn__<iQwd=졟 <\& SNyM{'NȠO>4kڔpYWSɯLP>qQt2fA$%= !sy9̆v2lϘܵqyr qkIςB=݄; pB![ҳ T�zO7]h??e00 n7$4v<=!<@PҸh D eLn�M&Qh2fA!nI B$XB![,! jct3nO7A$wgvG4ODŽwVf^ ZZ%`;=o]sʼ=?ػ/DRHfCQ>rUkR)ycL֬CPzƿ?yHM$<1|=uV١l+cy�գ%G)<گ%B Þ~a h̬,=<?m2e u<ޝLm[Eҷwk}=v<CGΡQ+8F t?Gzt*slڼc@˗e9|AV1ᵾ,Z#?bC3_χU3q\_OlegA`=L8Ν{ϟ۶}h(Sط45C+ft::=Z0N=} )\ �|Qc`3wݶ)ƍœ-O׷pS ϝVˬ)O#�Z"/Ah _PY*Vx扎>AC}z"$LJ ĞșT1 B`?Y:VHU/<וfu5!nY0,JT*&5.$1vT/IyZ ێ}[Οb(SƏL~Oʖӳu9}~: /;yV)OJA7UBˢT* u,L& Ϳl6þZ,Vl?>lܲ__~ kVP(UJF3kKs5y _닏ĕl4j*�>lVy>(]gA_Lu~ýqiY/_3Lޜ#:fδ?[+3 bs 12v◤f0y2 鮟pwUoM:(㣦c(37rrF̹[8q27s y7`OѨ)@uy;9BXja'.~o8Oi]usV]''LjWzNfǖ7-ގJь zF?_YYzʖw\`I1dffqS#o- !D QOIVqk(�n¼#sگ6s1@:Grҕ[^gqBءA#DI }l:?bؼ-3.Gβ׿<}(MQd~8g</"88-o'̍p??uiJ8q(C^@> Xv>~ D\eӇERKzEb2Y>z%Vtły rh2Vu ��^FFF6�ujWa@vR!n3 EbP*suT2&3p^GQ5y rJj!ԓ`AQ$j*ˈ>zp"<2N'17̍J/]a͜8̹[�hX?Bq{Ha'y_Q,x9 F *נt< YgAqS (L>(% B!pK!B%B!ܒ`A!nIG!<NP(ׯ(9*] 6z`4 ɞn( **"m#&EI!Tԋ999rBr^D%cB B!pK!B%B!ܒ`A!nI B$XB![,!-I$ OHpz]vX-~߷ >'εH KHH�<B,!fΜINN*Ͽ[:߫gO Ϝ_+WDXXCШQ#B w=0$^2 Bjte5W9bp|}}yw<}X($XB8?`� ,v2x0~!;w&Mψaoh"Lb~TV,�ƏO-lL>ƍ1w\{kZ~=%Kx~HI|dRgKҢE 7jl&::,ڶm [ޣ%YB8ذ~=UT;PT(U*j5M1/\;&ѠaC?ZHJt+�bccYt)QQQN>�)[,YYY57oN5Xhwhbп_?4jC^ DN<),!L0t:#{?__1�XVPYg3d`O �u:RRSQ*^h4ɢE�q9ƾW^ŋX,֭[DžD  p*fTBwgASq�ϟ_$,, @51}:f3׭A|TVvI;i7FRqs+V+k׮%00WF1c)_Vjwm`<x0O=̣GRV-\ӇTOZ#J AzYવ')'J*|[ʯS쯵Z-uA�*V?GuX/opau::D|B}cNNBB\r f͚go[^@zj8qe֨^VOKTT111Q8:,^{~޸M+6®EU9z*Noœ?Pp,ĉ*l !Dm!B%(`:uĨQ8a}^ <,aCzB!n1  ZU"�Oye(~woœO>Ivv6�Q 2sT ?;6Ϲ?q]V~e#nYvYi9y(�QQ 9nh2]pp0ɗ/Vw᎐ !vq˲tJ, !\r5;88֭[hd…ѩS'|) :3fx !n̆.r>n-Yپ}}Y^ BQȘ B!J/ B B!pK!B%B!ܒ`A!nI|x :F4t .r>J?Iwsn *_ V< Ez~2pV|g 3r> J \N<GR1O7%~q}*T w_zzK]k})(v+m!B%B!ܒ`A!nI B$XB![,!- B PjTN``!D!"㿑`+W+//7oN. wƻ(9$c)ԯ_L^=@/Zd"!!ơhرc+VCj&O?4&ɡ̮]ҧO>c�>3cXx>@-[8y$Æ c„ ,>7|RhdyۿӇJ@3F·wRDTr=С(J׫BLJǟx&0ŋ?V^`󄇇;}vN</�,c6oL^^:6wߡV)`_LJ3gΠYf M4*U6l&X.r> Jl6 --;LJݿ?ŗ^@^d4j Udʭח0k,ztΫGc4Ps;`0ɱ41}:XzsgOn%"{m\r|d �SL,J%G!((YǍ=NFF x",, h{/c٘>c;vo>@Pr,T*Cw5k2q Vf׮]LzjT(h<ZjEÆ 1[,=/W@PÁY`SӦN\r�Ԏ`ԩdfeqIM^ѣ9c3f{L24oт1ͤQ>T|gAQF4Oljt:/_!Z/E|»'l7^h4݉>>>z>V2䦟:9ctm_~Qp;o&#{ӧs?rJ|||Xf Gnd$k֮޽9<w^|yu-_'|1n8|)V,_ΓO=ŧK x" ,`{ѱcG˖y߰͛SzuQfwsǪ8}6D)_\~ʕk׮/c233Sj_7dwo�V,ZWFd2a0rbYRK/yh4frSVf&FBtR^=hт]j3y&L~9م:(: J?OJk45m!CnM62w޵kWQÆ%K7v,[lG>`7taĉ;i5kּa#"5s&̘>>]L&y&lf۴oZ뮻9rʕ+dz<s,8EoYܬٳfUs{ǝ@,2o&j"((Ƚh;&_~SNm}Zy٣b6_XtC?0}b[oq%{[GEVΔS=}Xkc:-{`0�0:SLAK~s*Ll,c]^=bccyέc8ʕ+gxժUl޼~./ׯkF&==p</h.]r7~z̟3g;w&ά3Yf rؾL2|4w.DiÇ s2nXev7sno4չg#""'z.eqif͚yvPZj6N|'z)P�W.|4o.]`پ};sG ct]}^0P(U/�ןsWWZRJݻES{}233yuWqFiذ4:uŋ/O׮]oXfiWs[$X(EڵY�(U*r;H�lwܹs׭g9s'Əu~ZVTJxTofxZl߃b/쮾+)f^=Ta*rSNtڕ_;844e:eQ]QmacHvv6Ov|sfϦk׮lۺh}7GJX':y`M={y)E;ڵcD6oO=ňkr9,\ۻQlY~-Bk 1) w޽;�qqq|Ǵh©Xʗ/@}XwevE=[O ȑ#�wĘ[INz[=& ]ۅ_ HII)ʝXyIV_7滒/>>>deeh44nnQr;UowRRN�R=)E\}΋z16 7r#c7\͜[9܆B![,!- B B!pK!B%B!ܒ`Arz BH/TP"7j/JYi<%1x7!ߙ))a$e}6;׿ղ.xTH'@GYE!*xLwFG[I= !- !B$XB![,!- B B!pK!B%B!ܒ`A!nI B$XB![,!- BVb;#����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/index.html�������������������������������������0000664�0000000�0000000�00000014563�14332737457�0024607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title> mermaid - Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.
mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/integrations.md000066400000000000000000000407561433273745700256450ustar00rootroot00000000000000# Integrations The following list is a compilation of different integrations and plugins that allow the rendering of mermaid definitions within other applications. They also serve as proof of concept, for the variety of things that can be built with mermaid. ## Productivity - [GitHub](https://github.com) (**Native support**) - [Using code blocks](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/) (**Native support**) - [GitHub action: Compile mermaid to image](https://github.com/neenjaw/compile-mermaid-markdown-action) - [svg-generator](https://github.com/SimonKenyonShepard/mermaidjs-github-svg-generator) - [GitLab](https://docs.gitlab.com/ee/user/markdown.html#diagrams-and-flowcharts) (**Native support**) - [Gitea](https://gitea.io) (**Native support**) - [Azure Devops](https://docs.microsoft.com/en-us/azure/devops/project/wiki/wiki-markdown-guidance?view=azure-devops#add-mermaid-diagrams-to-a-wiki-page) (**Native support**) - [Tuleap](https://docs.tuleap.org/user-guide/writing-in-tuleap.html#graphs) (**Native support**) - [Joplin](https://joplinapp.org) (**Native support**) - [Notion](https://notion.so) (**Native support**) - [Observable](https://observablehq.com/@observablehq/mermaid) (**Native support**) - [Obsidian](https://help.obsidian.md/How+to/Format+your+notes#Diagram) (**Native support**) - [GitBook](https://gitbook.com) - [Mermaid Plugin](https://github.com/JozoVilcek/gitbook-plugin-mermaid) - [Markdown with Mermaid CLI](https://github.com/miao1007/gitbook-plugin-mermaid-cli) - [Mermaid plugin for GitBook](https://github.com/wwformat/gitbook-plugin-mermaid-pdf) - [LiveBook](https://livebook.dev) (**Native support**) - [Atlassian Products](https://www.atlassian.com) - [Mermaid Plugin for Confluence](https://marketplace.atlassian.com/apps/1214124/mermaid-plugin-for-confluence?hosting=server&tab=overview) - [CloudScript.io Addon](https://marketplace.atlassian.com/apps/1219878/cloudscript-io-mermaid-addon?hosting=cloud&tab=overview) - [Auto convert diagrams in Jira](https://github.com/coddingtonbear/jirafs-mermaid) - [Redmine](https://redmine.org) - [Mermaid Macro](https://www.redmine.org/plugins/redmine_mermaid_macro) - [redmine-mermaid](https://github.com/styz/redmine_mermaid) - [markdown-for-mermaid-plugin](https://github.com/jamieh-mongolian/markdown-for-mermaid-plugin) - [JetBrains IDE eg Pycharm](https://www.jetbrains.com/go/guide/tips/mermaid-js-support-in-markdown/) - [mermerd](https://github.com/KarnerTh/mermerd) ## CRM/ERP/Similar - [coreBOS](https://blog.corebos.org/blog/december2019) ## Blogs - [Wordpress](https://wordpress.org) - [WordPress Markdown Editor](https://wordpress.org/plugins/wp-githuber-md) - [WP-ReliableMD](https://wordpress.org/plugins/wp-reliablemd/) - [Hexo](https://hexo.io) - [hexo-filter-mermaid-diagrams](https://github.com/webappdevelp/hexo-filter-mermaid-diagrams) - [hexo-tag-mermaid](https://github.com/JameChou/hexo-tag-mermaid) - [hexo-mermaid-diagrams](https://github.com/mslxl/hexo-mermaid-diagrams) ## CMS - [VitePress](https://vitepress.vuejs.org/) - [Plugin for Mermaid.js](https://emersonbottero.github.io/vitepress-plugin-mermaid/) - [VuePress](https://vuepress.vuejs.org/) - [Plugin for Mermaid.js](https://github.com/eFrane/vuepress-plugin-mermaidjs) - [Grav CMS](https://getgrav.org/) - [Mermaid Diagrams](https://github.com/DanielFlaum/grav-plugin-mermaid-diagrams) - [Gitlab Markdown Adapter](https://github.com/Goutte/grav-plugin-gitlab-markdown-adapter) ## Communication - [Discourse](https://discourse.org) - [Mermaid Plugin](https://github.com/pnewell/discourse-mermaid), [And](https://github.com/unfoldingWord-dev/discourse-mermaid) - [Mattermost](https://mattermost.com/) - [Mermaid Plugin](https://github.com/SpikeTings/Mermaid) - [phpBB](https://phpbb.com) - [phpbb-ext-mermaid](https://github.com/AlfredoRamos/phpbb-ext-mermaid) - [NodeBB](https://nodebb.org) - [Mermaid Plugin](https://www.npmjs.com/package/nodebb-plugin-mermaid) ## Wikis - [MediaWiki](https://www.mediawiki.org) - [Mermaid Extension](https://www.mediawiki.org/wiki/Extension:Mermaid) - [Flex Diagrams Extension](https://www.mediawiki.org/wiki/Extension:Flex_Diagrams) - [Semantic Media Wiki](https://semantic-mediawiki.org) - [Mermaid Plugin](https://github.com/SemanticMediaWiki/Mermaid) - [FosWiki](https://foswiki.org) - [Mermaid Plugin](https://foswiki.org/Extensions/MermaidPlugin) - [DokuWiki](https://dokuwiki.org) - [Flowcharts](https://www.dokuwiki.org/plugin:flowcharts?s[]=mermaid) - [ComboStrap](https://combostrap.com/mermaid) - [TiddlyWiki](https://tiddlywiki.com/) - [mermaid-tw5: full js library](https://github.com/efurlanm/mermaid-tw5) - [tw5-mermaid: wrapper for Mermaid Live](https://github.com/jasonmhoule/tw5-mermaid) ## Editor Plugins - [Vs Code](https://code.visualstudio.com/) - [Markdown Preview Mermaid Support](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-mermaid) - [Mermaid Preview](https://marketplace.visualstudio.com/items?itemName=vstirbu.vscode-mermaid-preview) - [Mermaid Markdown Syntax Highlighting](https://marketplace.visualstudio.com/items?itemName=bpruitt-goddard.mermaid-markdown-syntax-highlighting) - [Mermaid Editor](https://marketplace.visualstudio.com/items?itemName=tomoyukim.vscode-mermaid-editor) - [Mermaid Export](https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.mermaid-export) - [Markdown PDF](https://marketplace.visualstudio.com/items?itemName=yzane.markdown-pdf) - [Preview](https://marketplace.visualstudio.com/items?itemName=searKing.preview-vscode) - [Preview Sequence Diagrams](https://marketplace.visualstudio.com/items?itemName=arichika.previewseqdiag-vscode) - [Markdown-It](https://github.com/markdown-it/markdown-it) - [Textual UML Parser](https://github.com/manastalukdar/markdown-it-textual-uml) - [Mermaid Plugin](https://github.com/tylingsoft/markdown-it-mermaid) - [md-it-mermaid](https://github.com/iamcco/md-it-mermaid) - [markdown-it-mermaid-fence-new](https://github.com/Revomatico/markdown-it-mermaid-fence-new) - [markdown-it-mermaid-less](https://github.com/searKing/markdown-it-mermaid-less) - [Atom](https://atom.io) - [Markdown Preview Enhanced](https://atom.io/packages/markdown-preview-enhanced) - [Atom Mermaid](https://atom.io/packages/atom-mermaid) - [Language Mermaid Syntax Highlighter](https://atom.io/packages/language-mermaid) - [Sublime Text 3](https://sublimetext.com) - [Mermaid Package](https://packagecontrol.io/packages/Mermaid) - [Astah](https://astah.net) - [Export to Mermaid](https://github.com/Avens666/Astah_Jude_UML_export_to_Markdown-mermaid-Plantuml-) - [Light Table](http://lighttable.com/) - [Mermaid Plugin](https://github.com/cldwalker/Mermaid) - [Draw.io](https://draw.io) - [Plugin](https://github.com/nopeslide/drawio_mermaid_plugin) - [Inkdrop](https://www.inkdrop.app) - [Plugin](https://github.com/inkdropapp/inkdrop-mermaid) - [Vim](https://www.vim.org) - [Vim Diagram Syntax](https://github.com/zhaozg/vim-diagram) - [GNU Emacs](https://www.gnu.org/software/emacs/) - [Major mode for .mmd files](https://github.com/abrochard/mermaid-mode) - [Org-Mode integration](https://github.com/arnm/ob-mermaid) - [Brackets](https://brackets.io/) - [Mermaid Preview](https://github.com/AlanHohn/mermaid-preview) - [Iodide](https://github.com/iodide-project/iodide) - [iodide-mermaid-plugin](https://github.com/iodide-project/iodide-mermaid-plugin) - [Google docs](https://docs.google.com/) - [Mermaid plugin for google docs](https://workspace.google.com/marketplace/app/mermaid/636321283856) - [Podlite](https://github.com/zag/podlite-desktop) - [Named block =Diagram](https://github.com/zag/podlite/tree/main/packages/podlite-diagrams) - [GNU Nano](https://www.nano-editor.org/) - [Nano Mermaid](https://github.com/Yash-Singh1/nano-mermaid) ## Document Generation - [Sphinx](https://www.sphinx-doc.org/en/master/) - [sphinxcontrib-mermaid](https://github.com/mgaitan/sphinxcontrib-mermaid) - [remark.js](https://remark.js.org/) - [remark-mermaid](https://github.com/temando/remark-mermaid) - [jSDoc](https://jsdoc.app/) - [jsdoc-mermaid](https://github.com/Jellyvision/jsdoc-mermaid) - [MkDocs](https://mkdocs.org) - [mkdocs-mermaid2-plugin](https://github.com/fralau/mkdocs-mermaid2-plugin) - [mkdocs-material](https://github.com/squidfunk/mkdocs-material), check the [docs](https://squidfunk.github.io/mkdocs-material/reference/diagrams/) - [Type Doc](https://typedoc.org/) - [typedoc-plugin-mermaid](https://www.npmjs.com/package/typedoc-plugin-mermaid) - [Docsy Hugo Theme](https://www.docsy.dev/docs/adding-content/lookandfeel/#diagrams-with-mermaid) (Native support in theme) - [Codedoc](https://codedoc.cc/) - [codedoc-mermaid-plugin](https://www.npmjs.com/package/codedoc-mermaid-plugin) - [mdbook](https://rust-lang.github.io/mdBook/index.html) - [mdbook-mermaid](https://github.com/badboy/mdbook-mermaid) ## Browser Extensions | Name | Chrome Web Store | Firefox Add-ons | Opera | Edge | Source/Repository | | ------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | GitHub + Mermaid | - | [🦊🔗](https://addons.mozilla.org/firefox/addon/github-mermaid/) | - | - | [🐙🔗](https://github.com/BackMarket/github-mermaid-extension) | | Asciidoctor Live Preview | [🎡🔗](https://chrome.google.com/webstore/detail/asciidoctorjs-live-previe/iaalpfgpbocpdfblpnhhgllgbdbchmia) | - | - | [🌀🔗](https://microsoftedge.microsoft.com/addons/detail/asciidoctorjs-live-previ/pefkelkanablhjdekgdahplkccnbdggd?hl=en-US) | - | | Diagram Tab | - | - | - | - | [🐙🔗](https://github.com/khafast/diagramtab) | | Markdown Diagrams | [🎡🔗](https://chrome.google.com/webstore/detail/markdown-diagrams/pmoglnmodacnbbofbgcagndelmgaclel/) | [🦊🔗](https://addons.mozilla.org/en-US/firefox/addon/markdown-diagrams/) | [🔴🔗](https://addons.opera.com/en/extensions/details/markdown-diagrams/) | [🌀🔗](https://microsoftedge.microsoft.com/addons/detail/markdown-diagrams/hceenoomhhdkjjijnmlclkpenkapfihe) | [🐙🔗](https://github.com/marcozaccari/markdown-diagrams-browser-extension/tree/master/doc/examples) | | Markdown Viewer | - | [🦊🔗](https://addons.mozilla.org/en-US/firefox/addon/markdown-viewer-chrome/) | - | - | [🐙🔗](https://github.com/simov/markdown-viewer) | | Extensions for Mermaid | - | [🦊🔗](https://addons.mozilla.org/en-US/firefox/addon/markdown-viewer-chrome/) | [🔴🔗](https://addons.opera.com/en/extensions/details/extensions-for-mermaid/) | - | [🐙🔗](https://github.com/Stefan-S/mermaid-extension) | | Chrome Diagrammer | [🎡🔗](https://chrome.google.com/webstore/detail/chrome-diagrammer/bkpbgjmkomfoakfklcjeoegkklgjnnpk) | - | - | - | - | | Mermaid Diagrams | [🎡🔗](https://chrome.google.com/webstore/detail/mermaid-diagrams/phfcghedmopjadpojhmmaffjmfiakfil) | - | - | - | - | | Mermaid Markdown | [🎡🔗](https://chrome.google.com/webstore/detail/mermaid-markdown/mboeoikjijmjcjgpccghbcoegikliijg) | - | - | - | - | | Monkeys | [🎡🔗](https://chrome.google.com/webstore/detail/monkeys-mermaid-for-githu/cplfdpoajbclbgphaphphcldamfkjlgi) | - | - | - | - | | Mermaid Previewer | [🎡🔗](https://chrome.google.com/webstore/detail/mermaid-previewer/oidjnlhbegipkcklbdfnbkikplpghfdl) | - | - | - | - | ## Other - [Jekyll](https://jekyllrb.com/) - [jekyll-mermaid](https://rubygems.org/gems/jekyll-mermaid) - [jekyll-mermaid-diagrams](https://github.com/fuzhibo/jekyll-mermaid-diagrams) - [Reveal.js](https://github.com/hakimel/reveal.js) - [reveal.js-mermaid-plugin](https://github.com/ludwick/reveal.js-mermaid-plugin) - [Bisheng](https://www.npmjs.com/package/bisheng) - [bisheng-plugin-mermaid](https://github.com/yct21/bisheng-plugin-mermaid) - [Reveal CK](https://github.com/jedcn/reveal-ck) - [reveal-ck-mermaid-plugin](https://github.com/tmtm/reveal-ck-mermaid-plugin) - [mermaid-server: Generate diagrams using a HTTP request](https://github.com/TomWright/mermaid-server) - [ExDoc](https://github.com/elixir-lang/ex_doc) - [Rendering Mermaid graphs](https://github.com/elixir-lang/ex_doc#rendering-mermaid-graphs) mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/introduction.md000066400000000000000000000000001433273745700256320ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/landing/000077500000000000000000000000001433273745700242155ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/landing/class.png000066400000000000000000001042121433273745700260300ustar00rootroot00000000000000PNG  IHDRhuIDATx{|ט01a!;9I%EJCI'QR_tPQb(IB;e{ivv3~\}x׵}>S:B@!ʎyܮ_oP2>3I%Zy>)b\.Rb,"\؊} ˒ Se+!T!)Od-/n/7EF\ H%i7yn2Msj)4Ktk@ѦylӿTh^q/70|p:}DH%h]A8> {A' iطK܇׿jxrFUKW+1 "DI )sQ$XH%?m`I 7SCKjp,DY }Xbm#i4O$}=c7>*P$sg)0bݤ; ̘ea&* \5 `~*@olK8'J+pW,#c0h6 .9PRBjyjy˲~R~Wt\BFR(ZY [^1OnٟpVL-o5~zX@rGy*!@$/tM ZX6ѭE0]>UɅ(ZD`)0 -?o,U !)OH-GA>K܀1dyJCe_0V3$,!JT!|!rqt,V7(w&~eGwZ/P2 )͹ 6;*G}BC'Icg0'f;S q'7HwhoS@;Ap2pp 0;q~G`4FEy}fHwRY¤esTÚ57rS5+?;]m`SG7 +S 71Xs 4C.lE!EEiOH}~o!u t~v;t+?R>B3'rW! qֵ-T]< uHNn ep:ʖ|'#D'r>c0z: *7@J~hM} D'#K4$P|(!-'rpٛh7Y@`VP6> _B.`fw<7䉲")OP |Z@,]l30al.&la -'/-%[m3`&3) )O@:⻔}.x;˒f*z;vB'2pIJ/wwo]8 {)[/(;R6yzA6k,0Xyp[ǔo R͹ޝq»V:? Z(I+sb٣=z6<_נS#$_|4 Q$剂YyAܳ_fwSt:u}q/_π ۩NuW¹*ukfG|'5'ף;cN;yvc2>;G ["Dթs=*r[P[ȅȅ( i_pvQ;]R/H :L9-BBR(۹ڵ [Qobj>Q&W<x}B$割:}BȅBK$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ %Vhc.[Vݳ]/"wD@@۴zZ.k jpxDWyܡ+7:մUO'HDr9|v:$Ӱiigk5jzM7ӧ~yemp~ѷ[NwWocYŸ 2dT^'lzhv`VI{ZG 폕ޛ3O :Av?`iS?Qʖi#ˁeXǫ} [Kѝ̓M!vLSox$r`w%+Mm`xGxXQx|>R{s@?0-b'=x,a>–H-O?^ϙ*[E7h,*8ȳ^cLNøʈKz(mM~`Y)XE Ӏ~7vcg0'f;S w:y42{ K@Ԥ,au )OIG0˗s 0X̵@޻CϞZ,\ z'+N] #,} TL_6/0cea *aw\ l:z!<\}y5|(KXBd [-yY'JSopv϶ps(Pk"/^`+T|*u t~v;t+?REEiOHn (=bR^NxU?5y%MR!ǰvЭ[ _Z[4Ipk4BN`y/=E9 BMV6Q~0Cbq69}41`~cVKkܡCŚep5 @`hߓL -6 e!GC`V%VI6fBdzsk~4O$X_|(Ka\1@,K, Kh<4D5/81,{5yjZH X}/!DWgѯĭqŽ|ȱ,Pra @->]0)BtbGʯY g6Oxxjͳ,WR%ur+ @R(n༒R Il='ˊoπWXNy0jz}v=[Q逩BZkuyaz/yU֥Y.i vAjy⚗H] bBލk7X;ۊwo]8 MPX YO yxcP̺n7e*kG)~sw'`[+oǭDMKxx%>ų{t;ȅ<%kP!64U.cK-ZW;eNz:$VJ^mKw!YK ['&&L<2ehl/vinKxmQxe:8xpzO(o*t)oPy-,!̜FC8M';ogN_]Ǣa u/ܡN<w]YM}j5ȯp/BQ>; -+/he]Lzw](_ym/qiiO.lE1EIYߤX)g>oNjyL\+u~c"xXn^չe nHe$2FH-xQڵvɅ(fd|D{5b,JҤGoկ#ۚ+S ՎQhy伞j&J%}sVOy2mPy0wh1Ƴ8Vb)#glֿ) Ezl5ocq$2M7}'7 wx:lKʧ6E)IyCtzdIyE{^Xk);s*j֬ :1(q.uZA5q1sUxGr~\ev)_flI6~hpdıc[;*#eERGG',08#EXnx#+ ^IyIR2ժm윇,s^P"1ȷHIyfo~bQ/X廀sNWn`ۥ[:*=Z+sG.pb_ wmZGYuΝ=soUf-%1=A,KS! >׮]APa$9'T/RݪBe?/7M5NY d `#'h9pjD;ϟe=y5%#๨?/bkX yŽf2!j+2|߾&A%6@R9u}PzlpPҎf{'F:`qi6pS&0_cv6L0WFV}3bdݾ%D=YxpbdԽ ( i&ly߰   FWs\x9{h M (j=(,M?uJJh NCˣLatF#4ڌSVA\J1 7Z\;X[g@/hD3/,/f?a3nFG'1ꞱH` VV[f PisFզê ݍhZ,g#w;[ڧ玹b ٬2KݤHshȿwhԶ?&>9Y5Gsx4Qb x,8>!u<3=`)^+ ozn;Π| Gr)*g5N5hmƽz_Ř[2PIjy/.:*y 00/hM_ 0@.wcyB3`ЅmaP kfh@`PZmۖZ50Dbv,UZyl0ӹ}d^GP g$ٹQ lf 3-Rޘ/aHŰmf (YwLqz6f@Jޥ$Ņ;pDe:r{EFo .jg QQ#0N}c`۶;@sŰn/0H;Z/' uGڙ3%sxo汲B"mJ2&)ώo=c4J l]UL<ƺWЅxpw&w3#(+xvԕg25,[Xw<OOަZXζV+X߯hoO+F^Ivs8`0Sc m[`H&J<s H˖"#A4")6$GF+(C@Dɪ?Wdԁ>eHOR-8yAEAXش*zEDTMPlȨZ(-#bm *wp$mock&!2-A~jGyTu#2e פIȈ6 uISȨ˴ T;Q&  .9J[xRGW-~ah$$: j!ʔSHHl??m R;cdIy({m#"6o nv$$)읉B yV|}{FDKصKR^Y7*2A65(cuܷ7HZ2ʜ[yUo g2ʘ2t-*j;u;-҆U$啙Qhv Vo("z˖jG!ȡH"-GGF WIye!=*|D؜ƍ{G<%(HޓQ&$啾둑T[@M=GxDbAjJ[RdUYUz8j$啮4NMv*ͨеktġ˛OJYjG]v y_m+O<اuS뭐zuC ^PԳg9ӷJjy&9*8Ul;ߕƁv<7s(Z{Sy.SV v$LR^)1DF^^P\?6ϔwe#keHõ)M뷅J")TM M'QRb~^{PkXSaTV;%)FAԎ6GFn0Ιv孅4Xv?@Oh;7}sWg|@JY@/Sel V;#)$0#i977\ O|ôAlOG{cP6oI~ گ%LRUDžݹ3(D^Y$啜CQr{Cs ʿ. 8Oǿi |1z;ca̖{{ĞC )v(BR^ /"2 fթ~TuWF@նpH\W wU&h$H2osN}FR%BR^##Rv%3Q/e8}}pliR}_-$CPbZG3_hzuyQrMCWNi6\ɀVE9wvER^q܍S)7 x5uP=zcX % ܕcgHCuqWu=RT1N&Wf/XW le5R äҶۃC}WT'##o3xq }&_%$f[U,)CUռ}QX[t"PKϛmĆwcDڙ ƍjGb$8q g͋2H ޟ,NQ~j72v ¨;=qqBԎ^I+4 t;k+_7Z@3.FŰewm4ad;g gϑ#CCwrQH+$CxCu;]Ϟبw"օ&q4{ZY`uWb7<2+W@n{?=4_J"Iyr* >`"Wq2p_[g<_[$0?8X~9rϑCCe$qJ/~q 3^pZNy{RhY~eE Q`/1*@JA~!;vkWyvSޑ=2ܜ}1UjǦ֮ln.l;^JC!;޵_Քw <o(?Oevks?vhC!;vk׊jG*mR)$qfo~nFܯl;g~k鯍|\t4Iݼ&kG Z޾[3GUY;wTzQErBVkΩS1>h)_.=Կqخk>-Q3;b?ܢҹ'j8Ġvza{vnv6˘{U;urnWUv}.kyw~.ƃ{M[6_P"&Nov6\V7=v f)/h)Zr[bq!WRޫ콓<߮DT`.NjaУ^$vco)/ߟ?tP5uI:MRb,\Z];yTM󳳔mYKOD|jakjNLlJyߙ{|=_h[ޚMmw;o:@>2$wa:V18vwVf qj]GZޯKKEa}sy}vM5OTJsjbOm8Xi(Vv +]dHxt--:>v|*qg7M~%UH_t{A8k y7K`uQS^̷Jhn0@N[{_N0t Y}}jx>p[ l^93wz!AP[4UK@\_c=sqazE?d"ږ@k)c-oyȏKO6%eS7cpDZsHBCQæR0dT; {g3?NFR^57Ԏ"w7r}.O R; Y^JZW?t^nN9vwM.esўT+sU;F;53${xXŖ]Z-cpXm8v>>v]~ Vͼx+’)/r'YIZ^i!إ7HS; ꥼ k;$j`>1XP/5;7Ҙ>UvTKy9Xw r][j;mꞔ??׫DRީ,o*9zQʶgcA"Acw$g%:-v&*}2jWtjELTJy7}I-<F.mIyW’aKCw[U'E\h'/)Q^ݥMR^q hh#ꤼh䕰[R+u=%\ڪJw0r/ͼh6.mUIy4TL] jʶX4=EP)`nvP+j`=KjR;.&}TB]kNcP)I&e U%hIZ^YuCoBnf[9i- R+nvU;9rF@4jwTIyij>ᤪ&ɕm1C&IɶjwKU')OWlbnOia,OX,ev/6Qex,*kC~z-/8X㘨Jj=ΑF[-_Qe)*}buoJ=R$;;m;vfl^ !O\:G|y?Wbk|ޓt_T' K Fer>۝ ϟ?/V2jѬ[l1BxN佚c>#N0 s̍J|}O^UԎ^ՕUHo  acS(D ZbZ:E- miU\4[+O2Ky}2nz;ΐj p&3GeL(}[(N*ycnE~UjUqs}ӂf^jn̚$:5o ?P. Z_3!LCψpښ Fa2K~,O eV˻P3]ZT x'X`@&K@9t/@" yOh4&`RՎZQ)ϯqpP׻f/O;`_@ggXvB؈Jyہp )\ gN@mOPښD^O e7Mv]Ytn^+ u7m$\/RލpBY?>.Y5 ׳%-aڑ a&mmS| . ̛Mql0y\1}4".?T0ڱ a J=%\X)M;;@ԗ@`uymf؁Ynjv?Z 06ƣWw7yi7]%ڼ Vʠ+SoZ> =3\wh>pb#ĉm&ռ,Zd`Z{62{==yEƮê}B̞}2Bi'~y/O}X0kfm|i&Fy+'b+#Eynlb%j[r_뜖̜ٞ90S؅P_i<ÉE{>Ψ>@i㛮t}Bl2wlϼ0(n@LT[Sq3=~^pTyaqbin/3ws;AO}6l՟V69A9~M5'Ϛzdt>!l:/QpI[qASIQ,@S½[MQ1Sb P/1nڡ!)rsv8BՋ>j`wO:@).sr -zABԿ`wE>昵;⺭U;^۱7%l[kO$.eSC}=˩x Q\Wzg_e!ٷsc)wzeFvS&?yr lRڧC]TW;l 偳Oc"W20_#&R6?sz獞ϩ+7|/o#tɅ.߅&++ N푹'6i(Ce09c6ġM|-Pzdj&Ms]wW׽@E.[G`4`1 x8UJZɖeϫo5l D:c"tӻ|gλ gBطt`#JMKLov6"u3q-M5+㜭W^1Hm|'^*'DNLaY%wyj{.W*>xC=8sŒ˶.xܺo3}DROR93x0ƇX#ƹ=F16lݙ x>$OX`5Oo |>4<{{&@^ߴV J"^Iy7F匕KG0=k~"݃pߣ ? L1WFy67'DAuc2F` 1ó7xJ3'Xf~k'DNZ)gY㫇~>K`V;h[xӔV.ʓF-*Wg4嗏2ϳ#'DNx8 yG@;s۷g>mBFN*i>ssJ>D|U}+FmZ`fCJ̾rF`zF-S2)7OK(8̍P;tv>Эywծ ,7>@ u҉QRPn`'p>100 ~WTdJՔcٝ$;Q W8l~ 0( c!@Xn)TRR Q`7':J6Zs7`4S/4/fv`|a݁h%IZӰcc\.~[e8߯AiY9mބ6SMd [ Lo G3޴JǷ]n6.8U Qʽ3ѿcxj2z>7Tۮ4I̘VGTϱm9M}=smGr0d`Z@?Ô'D3Pdz62]& Ki.S*u;xS;F:?(1s>~t|HsJϱ(}R-VR_J]:qWV.ΠRb^S tRS]n?Ԣ2xƷv?"wfm"{yBBu!jȜ87lFT.h^Bhc-۝ZX^ƙ)7*֨չQ e}[Vǯ՝f%ey΄(MELyw2MVGj#[ʹ)_~ oӌgk5jz󨷝FMx:qz'SoOj$@\ҕ;Tu_罚V5$םqif]?^Q*P9'ռ咋qg61v|s xp{No{NZX~-&:OS75!d2Ub̈́%^.[Z Nbw~6 `?^5~;%a$=-4X!mmOFq,'Y̪j>H[{T*uM_M~Z|yc˴D,Fi8=ˎ* F~LнS5we~#'])Dm}:Xp6 vHX$&~=D<[l6Fxl\^j;*G}-ݹ<bWq. H|^@̽0DٿSVM{S'`9N>) ݲo40bUXWuՉvy'-O؋5_< 9__{4<]^,N&f sTSމ;Z B.̫ bW0 {cg¦;? DM vw~̽=^?T#"[91Ӿ\s!=Ҿ0Ưe֟vh)0'_}@6bO>ua\8lAEX:y6u~M͚fwBܬг究iZWB/Aʗobњݶ/_z=[+?;7Vy'[7UmaM{Ūz3l~N+r;r[OpϖN}Qx!u t~ve۽ Y矂ei e+ͿN{9]6@.v'@O` P4Wmyqzk \1fmt_Z6 z6G[I a .Av~@?xmk;E9 pN`yY7sDXX/>@aaaa!,,,,8[0| k;л t-Jw?E0#Q32pH 7{3p\P9f&/* ??i!lWWՏhpuw[$rOՆsPPf&zYwpzk]6.wS kj^l9NVHv#$)烾`je!0\8^ƫ惯rp)[YBo`t<tU&x'LkO]ɹ.(e]O{9,G.=9 8 DD} m_̈́ďg\0Ğt'JU\r X:pix@@YnNeU1MO$4 p  @c:y Tm*tg# KɲAo]^-)}125P<.{ӀW P׼Đ^M;uM]1n&l9P2̟yle=^vhl]Ekk).uJy}Lw>x6<]ͬ.~yzzhs;Gb6gۂ}RR0)B<wIE,7T:CPQ{R= |u#ϾorO:9`h)Y\ |5xDn4p6%[}K:A,k<3ےgo2)v7%P^D+k{NFh~4S{zi:`zFg)tWr+ЈoYGo̕0%xLMZu7.R3=m١OPjGh T+"|6mr*+IE%ӌX4SȚSىS Rt?&1\oAܜh /y Q<ɐr!f &Oy?z@ n @L"Z_).d)a Ldyخ3ܠY~![S:DTؖ&ksڕ01Ҁ SCnSK_͓W:IlnՊt VgG@FD(`M`}(mf}+=kQB:vS|! sfBڬ0~G"TΜ\ʶmx]3<0FuxƭWXWbb{ޙKOL,0m '{o#{ajL=3_ax*ֹE;K nƘr4xF{; `kU2w-Sމɷ͘@R~ t^'y$l qީ^V< Q4E ph;ض"c-Sd,VlW'oe$R4? i95`~0O͊vZfv;1N[s 8rmɔiXOQST_[(u>]e\Y#=NZo-Evo}u,B7/./zsg1ng`>gsjqÌg*`¾@I{3 |޿ Jo`!Dq67yaV)7`{D;u=+~Bhj)o7`X> *0nV\PhH@߫xZ!,6 )%O;0RgBcù1CH~wUKySj7j׶nl)SȷDdI3J)Q \bmŕYf? )@;sne_tm)tIL?T2-ݡb7wh})/q/QqRrc#KJ+E߻T#X 1Nj<,E8jC?^TBEoO0}{JfǟuK*@h^ybpE--[Q9Υ :}Xp!w(Hhg)Fp$ G9QE*fq8I7Tu U]I?~_#gWG־w^I˽oܰ}_&9zۭ2gm׈6lbxeifKRj^r>~Z廀rJMm 4ץ'3mp2YsQnoJJRp8G>|1~w7^ވ6; C+d[|1:Ci@5;'ߵ$#s k˴D쑦 YK-4UMMf1;=ϗ3Yι-Ȯ pjJ'dr{xI#O?,jw!X%![_]y[]X3+oSYehs]S1J:<Kh ߹r= SF³ʀX]tGy qid5+#fKBGk2.!I-O8]ؙ9~[aoj\T,ŷ'A68ganq5@=vٺ||bÜ1Gį0{ K@Ԥ0rf=4ھXz'9៌_'-ȩfiUgέm#10".#0,?Z^d$ 㵎VIsqO`G4mxw{W zҧnq/`SFvCi؂uXcLwi|F w=˫C9Km`t98eaE P"o=˹%LZN ~[ae7ah-1߁p\ ѳN: ۏ1@{YY;ŀns>ejQ1@ ~&lr@ߟiw`&0~meA><}YY1@M[ :lzX+$m:=Pm^AARp驩9+uۮMONr:6t7:XT -?@P8i^Sz\R+M}Π x"qg;Sh s.ȓ?>P]??H1{ z.Z.lX_]G5=G~O|i#=KxFr2斤jg+`!0\RTt4~<@}S` Qr,Ә/a llƷV*āITaȭ>з"0Θ1C7y܉į2XRxXÀe#SJQ>QuMK@|Zy^C~=m0n#fҹ]rG! [X;<ּ 0] _U8ת:Ng]5?u_+MEFGGGG{A$ṡ {{OOv([|"VgGLyQ+:7N{>!<[Y^Rʂ/@eYyc5jUr,#:X-++;l2lqK~ ^f͚5kKo7ہ, /?~*ӕTZg-RZل4Λ9?f󭥬 $:{ i 9m朷*73N1bsvf?)[%K;_ԵhD}0 \Jr8\n0 F02=+f[!'*.f_x@ula= 7M6^6WRs)jh6E𵒵Ì-r)FI ̺Z Q<-̀K떣> ⲾE.a{Gv`M>}j(kef;c&(}s 02 _HբO7tRW^֗qekqLA_\~ -< |u]2%/I{R4cssΟcV}JiZKYgr4hJvzleo R- V?{kξz˾ryVATG6$ m G2SEb-K50*ozb>}z$pJMo3)/u*.57U;J`1}'N^d@olC4\7֐qj'(MTFHyq -u{W5׷+ ?4ku5Jfqxx9Jڧ:.剌5&-C/(ݫ9qVN>|Cr9T ӏ]a蹄wrHO_Tj!Ͳ®,Zg|!YRYZg*,@ pĽI~rsGohԠ|^Y 7\ҋ;y嘺-I=qwt7|/<;_J7}KYHr{-Oh`師f=ra+4oοM gƥe~Y FT>S^\~.%c_:? PV pkbݩaߙf5XQlT;! ٗ /g^B]9^SZ+O{yR(0 !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4DRBC$ !4h)oG ӊy2y K^ Sj+=+Zʻ boƳ8IP})vkgvYO!>n?W4FaF}4Sx(c YveD{y 71 q-O*B7[.@՗vB-jy)_flI%σ<,ߍR^w8Ojx''+AYx,>ePT~\Zޛ2ժ-sNxN9nmO(_Ongc^Vڙ7&nS4|ʤ8Ram x{L 2SODH8i'V%(+ޢ+\rK{5q|7ͷ3~.~ BQ75!d<_( iksU>C5޳X>M3QB<Vccʷ^ O?,jᓰG.6_+%m5k*ΘW)}*ąm}`/W2}2&/5Ogct +y4PD;7'VIҼs5jeRP&z*7L^;+RŖ?}Bةb0-t?k0im6׫ycJSbhk>`&;~qUE# ZKt{ Cs\_36k+R>8!S}0ll`)a\6Ѽ'1ӵGPTf2oTRT࿽164mj۰>wa a-c~/p9_+DI szfN@UUjJ_ 0.z7_fJa2#ٴnNgpZ>(оA0?3eX5|5ͤ$Y ULgL7fs0h3>66[N gw|J@+r)G+}*vWd(pj+GiU3(U;7sϞpk8Vb_@ZВa%L׻B*P-hAI4βN$Õz5._v.`љp[3Ql.{ӀW P Zp`r⎭~>㧰U(;YW9BZ\}*S7k@#I+Cr)${ Uɀg|jY6E?!yJwr#1BtDG騢8 Ygr4{'2k]hIGR 0m9pp<0sTz̘\άCҶ |MWc( 1w tZ:_b(΅ @K$䲇 8n^S͵m`ܼ/4=-S;KkEMy]kft p-j]Fu6/8!SW/r] c$ĩ)tBme< \M#0M/L%zT[.)a;ݤ3NfSRl7s+>o~;[:g|0WVRM-Ry{a}16k׈] UPo;^on=RĔ YV/c2pՙ>?Lw~Y6ajiNưIyu<16G{Z=\eѽiynlY [VݻVIXc0ayzV zR <.@WZڛ^^xw7 hk"ļҊ;`2>.;Oj )O8ɽuFB_uXede]^aZr")ݐN~!970rܸqXY]q̾MAW\_36)jra+/@ק l̃c%Y֯W0/B3ޕZs#7;UM;s~s~Iҭi'`Ѕ#:?RhV :@}z?Lx^h?(ZK~os|Θ[Opϭ95A9B嬩NjyA+7kSʹ\sC*t^Lo 6UbSdQN}%3+ڥ4$D7sHJXP< Ƭ>gkYwq6Kw) \ug 7[qX9i_+Þ^B;.򂪬)Lv/u05( ie]>Ϙ m!V߇)i,0#˞x|̑<7G93@+^pDg /OC1{r#U{b˥v}7bl޻ށm_m *ӧg`S'>Rt.,:59%}R]{'҄ـa1'$}y,`ʂhO0 !5PI+s#f ੉Gl3${t#sݦrO˔wDKRp@GR { 5{(q}S'YNuNM p_3nT`Yy,}`2*2A/gEN\RwJîTRVڟtM?POMugOw#-_OkzCjԭ$q,,Mmi`S;֍7-NTp{S=-εæx躸:}lo#j Q[>Uf!G.loONm6Cƿ'A ߮3gMA xdm7o[Fxm-RtEIDATWgILCEp(.("xw~o=<3ӆưBM<yccy{t碠yƜ/𫃤W!WNZ&|ީ  }*0 }歮=bUJMIR2U[#(5?4߂ 9C 8> ^yd4=1W˱ږoqeܶ)@C&Y^Yp1ѼQ8=Tf.sHFXH.GjyAпRSF[(7MSPSO'lxje4ٜpT`?6ff~{\.Sн}ٛaDTZ}B؍7=񝧍m 2-kz>3ť!=Rv3M-헕z=:j8mUYLJRN+Z"0Θ1"ʜ幜Ә:J>fnJ( m=9o̜GڙP3Rwo4OǚzMiK̮Y%:w1M_M4@]ғ x|~6ro}YV9G.(PsLŠ#0k0~o5|97Qޒl|je:y(p3$/.ت$Sn0"dNB)35o/ڦ55YXMw >+%uF'$fߨa(' a?1@UymXz~fMn \5=Ix*,}ZY!QJ'1~0#`Stf}+ڃjXiBTΘJ^“9uIdsfI[zp!;xmE|.'>+гgƤ'`w_k3;;v\&qj}`ъ־'v3˝-~2V =a^yn:nSN iH}-1KOyĖ?X)=u`X"aJ3kY@*O0F|Ѣ,a/(Kcڇ))R8Ϗ:[sΨ5LS>z:k郿{ռ[OH̸>+%(~o߈^^~Y*t>c@QJ:d^JAgPjBqEN晤< 0wXHNx@ʹ3*tcY?eejK:\Rî-&'NըWmpt.mbљ8Y倻;k_:Bݺ.i~饓龺~Po hTXjfBu x?=jA&ML]2~5 *vƳ%}.elwnfz*BfMLN!4f.O8J/|*nQ]@ͱ7~gb28[ט&) HHH%0LdG!iKVm2}[}ڶg3lőbQ}YNɯDx6O9A;1R9߼{$@$ ѯC_%4l|jދlu]g]挎&qK9~xԶ[e4c,V-[}ѷEj]Zqӯ%u b DR 2Cu:5 ^$TM93(H$Ja$DL"=:Ϥ3$&DHĆĞʭ4̢q @G!tkQz@DGw{Am[zi砵O?ӽyWϯX~Ng5Ӽa=n>zV @%"A+YM DdG!j+:1;1a~?i:ɣ`ݹfY;mas,[~7m7\&v]n\nZ+o&漲̎6'n]VGkLJA"R LJiCe ȎCԬ{n9(G{WV(jSĕ%8X[Ѯk23]RJbjA$ LJ^\eVd19z\۷% U|5-NxU{Nsi,fk`v')׼?_b=Td.0~q^b3v4kW7:xb1cH!1( L/ǿr#ͿoDeb-.fK3kM%[MڣMZLkU3V&yF:d=j9wwwA^,-g1RtD28.{oqo:hu:Zu혼L6 NgixhvZt쑮ҙ,5٩]kkl7c+Yo:ⱱa;XD:uLXתV 0|\Huv'iqNWQdu )ڬ0n>u E y}M2u˭x R &%D '+ҝMxLL@1G[[vbs"C ΰH&BA!S! İ%`OZ|ӄ H@1GgH)1(J% &! &11Q!BbXLJ9[ɮ(_)׋!=MÚtpu^7 H%19JbR ĄxLJ(&%?Ov/<3/ѾK3MAgm{t K % >v CcCۚ~x=m=21|R7%=`ζgS|#2LKLKX'w'8 KA 'v޶XIf+f alR,"=r?=yw'8$`K\LMLHJ$󮜉W|鐐`3؏s;ˁz@WOǙ7Nd0 i*A İ t~S;K[\cǺW%4L:bR bR 1Ha܊RsZ^e % :Өm.=zt2bR bR }^>MPɌZȡ7\At(U! İ%vN[k}ӨLJA!;H}^>MPcg#b`4.t"} HbPThtgçc^; G!l-F1OzE'5:Xx{[p^Ht,N8[`m20`o*ďOPtH$3m#6<$v WK虉1!"SC$xYh:aKW5[G,^~|{z'iԇ˴@- @S*t}sJ$-{#|sdz:y{{y{]k]Hq뾪9\A]Xr*Xi9WD4NrBOf@2 !012B"3@AP#Q$4CqDRS%Uڮv]WjUڮv]WjUڮv]WjUڮv]W5v\\\\\\\\}wGMe7qtQwGMywqY5fƳƳVjY\|黎fƳ+ŏqۚ~UfqSU$b2+m!=r|TX"IYqbC8ri>{H CT]GMۉ-b5Jk֌lJх@:=(EL"EVZu`Eg"uc07n("s>Yb;8VJ[ThE%Ta45^Grgewwb,g$NA;qDΠ=)tqwTFtLTۑb!(ua5,j0̋O>T:qAOEJL+wTz*F'?8ply|0O\gtCۈ[U P?OvlՂۍw݇ʇA>7/ѝ#IEhrBvv;P7fe2*C*H$2ʙXt5Sl>Ug7پm}R @af>%ș *^Ѵ6?3pl 1dq,f,سr<{Fݒ4YH,\M$"\$+]_:^ѼTWM ݏW;(MXÊƦh/AOrHXdQOr\*27v6نYsptSʮ,aYx0یnΗsnIrwI>"îwS$IRC,}y`f`( 6PU&'$2דL9_:^,(&' 7a  9y_:^V;i?InΗ| )\i7|'6WN4wŶH; K>fQEMev5 AѹʄbI|{G<(̈́ѡzt֧-qwtETl$G`s K?\ul'`Šz3{F2SIU6хR#VY.b\2$b2ڸX!2BlNPX >^ѹ4R`ciHbƿeCD([F T0kt=px_h0,+-Exa:pV<DK7Qӆ ZK Z6Q{tOK?e? X Vֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳֳ1~) !02134@"A`T][%lJؕkbŭ[-lZصkbŭ[-lZصkbŭW}& yIyI+m`V`V`Vm{w|bU(aM4jpL IU!i(YAfIcrB.Eӡ}Rx2C*( lwI="fA8LĆQ88w2*5j1mzHEy>)Da$Se ^ k I{ 9G55cQMKϾJO6KB82[HP~M8 vk,e8I- #}Rh>k u":YƛHVqX쑍/>)is eTOQ|iO$2 01!@A"Q`@ZB( ( %ITt8ðPX'u,B;`:ل xE(;`9 |@t Oy`:,B\FkJ/E CCjX5@zsI +I A}U]\H^g;fwn:. vF*YY`՚8)  =J6دr + bdHs;꼫S]@Ȭb4^EU4 f03;+h`Un6!̪Ic\s@u@cfu^bϙ$s^cvwGn6ݸJ`ܯwmECB;^!R,!3{G"໗Y&IFefpB+6vO`hj|3C$U#1!ւȦOXrc0TϮٲ757FTFothUXk#zׂFG }GUkc?1Z;NQ~ MOVꩦM%44 3@0*Kit l0 JC`Lފ EHHLܠP%S5E;c2Ơ"aoU,7N~j&kQ] hLIgdLrRe ?u[>j"!1oDq4 q.DSpDFi>O N""%`4Eg8Qw aSQlDC fHm)8mtKDGfRŹ*>艠c .̢oewTaMۢG5c}w;T (ш~T`"!>-UWBOڗO%C^c-|KE?0T|SUneEpePnrA$_u} N0wrŹջX\MRcwr;pYogߔq.ӿM\;˂<[Tose¾Un϶ w}eè_ q*G YqoUor6+.?T9,eG=tYrB`qܸ|NDf86euNDf8Vgseu]Ba߹;tYsB0w?naeQ( {im6m>V^iFTbq4Yx;AD&@+/ 4}"+-˅bUbJsH=Sz%FOdqv fI{zl!PrsL/p r>zV{(I+xp}i9SC5k?Wcaoe LrUؖ{(n7O oj |u4~:G-Dn@x/eZQJRTU*JRTU*JRTU*JRTU*JRTU*JRTU*J_* !1AQa 0@qP?!:W+_m}_m}_m}_m}_i}_m}_A}_A}_Q}E_Q}E_Q}E_Q2$ҫ2.uucͺKfnwY]&.5Ru˃Ao=64no^Z JuwY]< ^iv;bQ6)P1ߨݠULtC@F5ERזAƇmMzH3h/1:A :%0`$AF`"1*ӥ@!TH'`W &W IiASR$CEqqVV)bqyQH,44v;}~n#"8 &/aDtۊt;Oa*HX"ЌhFјKy A I T x!D(Vg*V" Fϑ6#hFC.J;}~͵d" 6nu MB7~㣃]c(+fcٿADa@gApngc8 "JB챝 X+tDhfcQRL1E(C74!y ez!, QotoZ p8>X?pMcsQlG "ʑͮejLMޣm)ĬDMHn&ި0az8"!ʿ "YP#8<7QEݎ_  v4ށ0LbZ.o/hAʉM488f1i!ZD"zWbn'MoG5ꙛNkv;FQ;'*wWu. R AܚM^uoj5㎛Zza~B'@`pB夡DK=)~ 4 LV&-&(Y $,-Nuoj$S$ҟǚ?V,l*F@p L#`'E@`D,P; HE1GCIXNlܲ6D)P9Z/FA07|Cŋf$pO!D~WbC\A#VRiC@Y!+uHDzHpd?1T0ս&j ¡=9X*I;U񆌃D@A!(̅df kGy  Y9k1NDN| Ppɸ c$(1dMI@&]dJ%(YZ \?&bd_Mb+j:\}21Zw^"6ps@"B fBNDP:Df|'iڶ '<Ƴ Zη3΂%)LDgmU {\T͋Dt 6v7E{o!!&Pݍ,K\Ap׽9" ߁ @s^$>kI As^ɱ.;g5}I|?h$)K5QNrY[ـc p] F j5H+2 nDx_C"Upma4($HusY!=WX/D.XPeY>/=# 0|,7ƀ~1n.Npdj{9J!9U*]b*Z5"Cu 4f!MfOg5`{n{Uk \U w->hk5U J/KشWG˺.(5jzŅ]vRu6 \T ke4rfӂA_=APr(W]#0\=J˺jj\B'7V1Z~8 5Peqh˺kH(V@T[APw?k[ j{qe60*5ET >w'h8m.`j51 ANȧVإ i SlYwMD"`Pja}YwOn ke?$U=V5hYwOM4j˩ !cK.#*XR>/fODX,lA犦BN(]RqU"fU$$ c+A28-SU&7 KXFXAZQbsը%(vYC!WA8Qet ZbpEHl d.AuԪK180 A` ܩW>*joW n79# zFi{QOע {9,v)jPf30'\TXN/ (pԀU J,HՇ=]^K./g$X Vo+7`f3yX Vo+7`f3yX Vo+7`f3yX Vo+7`f3yX Vo+7`f3yX Vo+7`f3yX *!1 AQ0aq@P?) ϗ}}}}}}}}}}}}}}}}k߼SgOuxg>|?wz<ϼ Os'Cg!N}~#+'l'=9.<Ui9'q9;*B=UnWz_ 1*r&Iߗ BikӉ9YA/<G eA'v'hz(iP6n"ȼ-eU;".5XYY+~Mcȴ=xiIک~O7s %R=h9H/)z$2>c^N*fgV.`j;."W՚44QK(,\<ګ3s".GAj7TWƢr/[kCI'v4FQ,n/xTv͖MUK_1 vܽ]T#c FRhe ^Vj܏FKڌ 2F&ז/.FfJyR Gj(Iנ=ImkבÉfF1c&|(Q(U@8 pTTJ*%SGS3Nˢf=Oj7eZ`Gx/ 286F0뇡I'#.) |jjF-K%g %^;ZjT L-67p4>xuNcy>Oz .L~ N%ХsHxA:QR v,`"[Ղk <9yt乕o~ 4G٣ R UapτZ#g>| 5zFX7E 썓u :²[`azG7Q! %+A3lQ&/_6X8@M=o[,Fn`Gp<ʩZOE!4F*RtX .bv o4-Ll- ruijt:c=;bTi<رsz NEŚ&c"2(F@Zg"*r´"Foj:h>v:a#z^dO$;nY=6|2US ¶iӃ)BkpػEPvCLB[mWJDȝ֒!o'{XQ.WvtD4BMJ@ٺ2s~J4s_ی뇜QvzQu ;iE)j"w:rs(B5)Td/'k*jYED~tŽe.Y$E{L24iS+E_UHے(up2 .WEL p dNeݓ {euߎf\,Fmi[/u?'<ӦTRuв5)읒AlDZyBbF7vʗNW6h;b 6Ү]M:]Bڭ7NLo+k4(|lZ;z,("S{0+PDU;D^m,CI+|8,)6dBCA.FHngPŝ]h"ǬorOu11V&7Lǒ/mj!¼fMN6-lRiBq& 䅂٦Z[+HXUY?$ "|c@L6?Aau"5"mͧS;'t#xMwH\y1v2l"YT)Xp-J$[UetA 4q,gRUa-Ld BlKSSɔYnU՚FC54.ŽTl9h.]15ra ;VR)djM]Ds, 2ED WECh{05FmƠjj2,0={ f<6-om< 4Pʗ #)zpP+;Ev6E$_'TibcRa *g9UeUXV|)H,1eHQ !T0f]큋Rp-vU 9Rneco!ѦЍtP0J A+\ ч7kӕJ *fcѼT$hn&-lӸLUCW MTL^ MhAٹ\Q‰D%(J%(G !!ׂB4p*b\Nt!n`@[5 B-Q ˓m)&GRo"pe@WRV@ ]b5g:I;H y˙yowÎc0<=brST(;w*~;EH( jnuw3l3k7 YAA3@%wT4KjCC5O ~C᜝c(`lӳ˼ۅH 33tDŰX(4 WG7`G#_L~ dߕa&'zע4<]y#7~wd`ǭ1nhC/-{ %hY}2;<] G EӸ|RuӍO1;}n $, %sY߹yFڧaP"G2dddrxVV1[͉P| ɜqWYA)O 0Es &=x~? NHdu#5;u/+Jez.rqXif:ݽ{ |<P񢟸NM 4<MJbް *g?#)F$i>?;5F6y 蔎1}Hu筶U|yv?)L6lH %dt#,ޞ2x~b ű(ĥ?j6pr6|gjQkF}N.|guz3_loK rtOM ؏U)}c!.?X'RЊ ?sgiAtO,`j_ G@ɁQc*%/VcƧU!*e0"(0Q);\QSjYx}1m@Ksd=JM^0A SRϏTjj{(TR Wf]d:4΋u߆^5-J;a~aK-J70=BV"#3i;H>K{2L:aߏT$LZ- lj e~2@a[`V@?T @ ؚM ֌p^[_:3g{i T~?UGQT~?UGQT~?UGQT~?UGQT~?UGQT~?UGQTpfn״=!1AaQRq "02@brBCS` ?k|"& ܂kr & ܂kr & ܂kr & ܂kr & ܂kr & ܂kr *ƭ=[V9m[#pl!AV4:EM!3u r$ M"Fd8F2uXc\y+]g: Ż9m[#h,׌\g$6,}*9N.8u4T`]S~h+u,NwIt?|6JbE56WŨ6QJ*ƳKiYV"t}|5sBs=0tV::"H8.6pl!ݙwrڶGYQ ~ {jQ0_3cĺʊ ƠzG8L i k )Z\+B\n4ErڶG`e\Il9wĘE&7~ׂ~<`PޚL54怦c D8$^zIPOɪ(4ɞ ;9m[#h(PkՆP0l!fލbӊ<&Y&SN8 D+L"fz~GWr5Ru{Gtt~Iu-dyh_tEVDfx">芭.D"3D[R"=Q[پ캴lB "[0l`-Sr{N2s^`"heV8' M-t*$9L"dE"(I='WEO8]IY(E(M۽Q>)qӝR=OA[VՌ $6sl3_^g\g*tUfНWQ4{K`Öղp?긫&^0We7Gum&鱕񻭇-CaW{3z`xo>l9mv{>mo!#B0F*n{r%ZܫҼNGÔձr?FW7dE'ոU\4\ÔnՁvgi=Ͽp$rߺ0dkvmyu7@Ӄ[S}uLj{w_Ӈ)*4?,!@Q1a Aq2R`r ?J J*T*T*T*T^ RJ>@皒JϾpJ6Jx/˶? R|+SdWu%8 rHrL,E:([*Dە*c5RMRM+Dۜ="-Fi ######{0'mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/landing/er.png000066400000000000000000000321531433273745700253350ustar00rootroot00000000000000PNG  IHDR(&j42IDATxy`?w \ $A TDQ"PRVZ~URjE1ȱ@!7${9M~$ dwٙwg3>"!"R> 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! y.lfJ񈂈xDN.!>]]9QD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! y.\̴Q3u鷣2eGJŠЖfk%RRzhs@rwlUƀ9875VI%rшm'|pF̻fo4mD}y{ s+/?PaPhH>a;ao<ÖoZ% ?Ace׃\8hq@8}@?7DԛuVLI<]/'NG_{ ޸`TK'\cPu ԥ] ;5@'tj(4$(T, `gn/2%2̸Mj<А04:Vpg!x;3eO\ӛ P=8k ҩOa0. ݲׁh]u "^{R*/L5ߢp,su_3|X70vEnx829܌t5xD)OI&ߧA*~4fx%\%&Y rG<0(A$[+l1.}Gen`JJÜ}@p|[+r2ӘQe˄I1Y"w0*a+eWt>='s_v*y(BIL=J< #1y?̑]Y?xVF_v`%Q{ 8XA )yk~ n3EDm?;K$g`P(`!BaKPHn C:}"{ E: L2Zclڃ@?ܻWo0]`P(@άs 64_o EnꜪ(Fah0ˮZ0(;eְ5WYڼX9UQ͙a4$qZ&nK񷾉N/UO=蓒kܝ9ʠS/wX!fL^LcU:Q. uo7q!^*BS,3B  KRBXFC5 %,1~X ٥:h niܿykeu ).G`6RSdW,5F@&1G ei ʍFt:WvX 臔 顚0}a4=f.X.whEDiZX;Kle<,uiK,3f0r1(\e10we\ê٨\D;!x|Ӧ^.u1Fhŝƣ¯&l. ̗9vu;'+R .|5aC/d*wS3qXutUx[v ]k L0tI$(*3| zمTlIM >KQ?geCP|o0Oڔ!q"+"F =(WrS&F!NHs gؗa:F#1+AxYo0Ȯ*gPEY Nݬ.Šp3|erU5(1B Řs0(1c dq7(dg_||:TA@FHuP3A( ƬC蝘&p33.!:ݮ6)1*蟘>(̌ o#2'RAP?ed—Oq(E3Up*8 pxbPtSCf`T:}UIPؕ#eH薪"`|م8z؟$&csg3!#W)8Y$.W$= A 0솒̟7)ѝ{ t2# }CATff31?.U9LH]ԣICV`RHم5Uؓ]1(e&va Ԟ ZfJW7s<3kٕ-Q\0 >aBCGPY$xUW&}G1']8(sVf!''i멮 :r $'RuPؑ~&BR1(bG9D%)j &M]aPt)}G%F']?(?_d>0($}G5bTx= ->'ʮÝ0(N7FPskrPuF'Eʮ) wg0#)i:*_ޏ1DFرcbQ\ΞJJVN=NϸIp eeF$w/h+(T!ȇ.)B\JkA\H0AOA!sFF BvI(DPbjwE.l8D6!Š3c`T>s v۶Ǩ$}~hwh3(4h)S#0(ڨ޶ 2Vvrh6([cД)}dסP ;m-Ǩ) IA#L[ve4;h(:/٫BZ 6{ͩ7b#F5WO``M7`dHHyOE_u(SMPt[i~*⎺hҒʣ%ei @ r t埌\+ #M+?<,4RåAw!X#Rݹßh;ɴPɜf"|.kj^/' kb̈́3%MgfʮGHPqIEEiPy}!K5lϹs  h:]䢎4^juXR|48x`۹.Y#z:uCmuz-U?H[ȼS?H V8f؂!8񴡿n]ٽ2 s NkEuA?r k7zuy/n/`Hkט_KUڒg"{/X,bd4O϶\k`6}JRҥKp*W~.vw4{yVW^3GSE9X!nIA3_x>Nlmmx_c<|jEZl|(ݐe99&c;#^v wJ?|T]VjuYy!{M7^tp9zg? 0bV=)Aið,cw& ;k@PS^`P3_i-ӴYgyr1 `} 0zGfD *cC[@ߙGKik)vUd9X =q6[Sy/.pxs4Z+'IqK h\ 83b`ূZ}rB=AѸӬFF ʦ [z[ k@Tn,{ȩN3l^kfE`z[]n,ZN8S0r0(mz άHgzoÑ~od9 eߜ{oœ{`yM?|:jMv+Y[_~tmKu`v=HwLI;f<l .Ƙ/"k.X'kh9=a ^ n.S^j#ct*`U w<6p`u{ XX.k?X%{N5AD\B( Lp~:eh3D!K/E.74q cw2{M%yȭfxXSqu=_%qVg6yxfa$*?08^Jj BxmeF{M{MNjw{ȾQ-[Wi,4]zb<?r~_8XaY2ŲL?b؝.,Zw#{x̳X,B`^J󝙭{xgrIݲdx~ =pOaO u:5p ߡh/<'O!3WAmh:kbuk?~/^j9j׭iPw1ؚ -_^TMoO4Xp17PM' -- ǿdJՍN[iرk* KK#":|(m}ݐ衶g̩+(:v,|CY ݿЌLP}.,Ak٠P+/,Ch!:ڳr**Bw\h*0jcvUŹ  ]H]х#(SqP 'ck T\TQ18TOAWMP`.#k}LyWBj"uB5;SHϐ$Us7?ޔ^y\NaND̈]}v!_rF]ƚ3ftAD]36-͘7c/0(v#a:uC3Ozs0z\=i'?CWTvDѐVg &ŸiiY{gܠΝO]Ag DsVLqMތXم8N=J26c|]<覜$P]*:ؼ5cViiy7]'S߫\L1 "^7ǤZutߧZf'ȮCNsd4u8:$57g =:[U"(Vp#`qTjћʮÁTex8AʒCd0S/p&`qTꮣ'ˮQ=(LFN%Df~tdKR7p)`qTDu8[EWsBZ^.{odWqLոGλ;g'MJe 3^c"`9~ser2g10.WjvO>>3OvWŽ(V9qVC;@OC,Ėz~F~z۽9vS[,0'}V.⪸SP,nѲp?1z @I[ Mv D%?%Gd[{hHΟͲ ner, 7ta?` P2x}NR7<.+>Aqg/vTpzP8t6ʮ1~tĥ~d[z<bn{n]{=a ^',U/SUWM?|)+.Ar%5JD:%n=OG tʀW jr+AW㮻\vWMƼZ 7|*8< _(?(*.­qLe>+Rǜ zh]DW)=(LOa r&IwBAQ,~)"X?u1(\Ų rœ"Et"OPvDγ(/ŐJc/;dALwNǟǤ >q 쇔ˣGs03AB!.-JH(_~H t\vZϐml~dȮKflKS`?dEaORI>g{+tҏ> !#(ZS{\xI?4)!BCU~ iٕi!#( CP)qChX'<@WeJ쇌oG}Q%qCh,~=JD##(|`h}%o IV ECFP BiGKj`?Eנ7PB:5+&ECFPDb_Ym؋(B:!"!#(Bêv^W@>Z~("!G{I$JI?fY}J쇔1k~W/}/k0a캴J3Ed~2o}?>;/*R`?$p]XPO_v|Q_)uCh,u\zboCM?&$ SZ?1\ݝ$o>v^-;f_d}Jx ?L*2O|B٥7 Ax[vddJ=]Z5)khE\O5)Mȕ]C+Ed@<Gv EqGgGYZ|]yAA K R t!"?(JOPC]IQyDѪ# Nv V"h޲7YYzTqm 82!7(j>,Gۀj>]5 iD2!ԣvey_^575]YPPjOOCjP|\sC'>.9sO!W7 O!x;lUNVx/NjPO z)PH?$7G{bPciGdoj0nC9뮺C^Pe{,B  }5PC =D!EHCZ9whTs?J+I}5D}j%4~ Ϫt?jpՒ75yxC~A ~H B5(wcKkP`_27!Ok?G!#(LYk} R5("$sKhm?Z5(dCFPorrDkKfۏV,6c= Aq-oZ{%4ˮ69lrD!ƍ%[Eka®}lBn?\sɭjZ(s.[چ,~b?dͩ~<(a͐=6蕌m'!}?l(AqD(kChU~a?\Ͼq3pyPD\6Vʢ~:(J =:У]PA~OQOzCYW^qQ҆(CYEװ}(%4PAq=/{vjۏWR!D]~h!PõAQcs C" 쇲( bx_~o?K~(ڠ(Ch I~(D I쇲( $f I쇲( jf9, h/~(ڠʆʒeQp?<.3 )9R8,ꇴe.aeP?xDADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$ۅgv`ѣ'dA@O3^}Ԙm;K8K.եA&xuTu]WeB⽯'.>%Tw.kuG]&M3ׯ]@_Z/ʮ\yDO>roLW]>ڀ͹cdWC0#5t+(rvGuGYu7Zռܺs36HAj}n ;}ӁF׵•Al~y<lJNN.N><8$`JNޚv/* „}S!Yp"99Ǿo.ḥ@o =`a[M"*7 ;A m̮3NS7ruSLk׮K.ǫtaU/v@_sXka~i|rpQ{۸ O '-]:t<=q۷oχfO6VvUiq PCF4x/_3_wVX^X({ETpK%fݿ26.āI7Nl8+(ݷNx!=G= ޵ʇ9.(lQgnE-@Ҷ11c-0VzȰ=[^?e>b>8ɼlh8K̜]@MO5N ù=G"meߔ4W=A2|PoçC8_vvG;d33ߧXvviA2Td}Y \cF2&<6 t?N:_2MKV W' IM8/T)oƔ;[v..HK0_h~Y mm##G쉫:uP+ ,`?ئ3N# 9B;zvAa߈k5wze|\cu_s ޝ\ |0e>ֻMxUW4s16㟉V#}?<;Ҡ(@c p,EF͂@ůG1iDu'S .,^Mwgx 7 ^pqg\Q -H0oiNDYm;.,E=5w@ ƺ{ukN~ 7 kTwon=t Z٥#K7 F! ŝh?4W}0åX[]iZw}_ fSjfm#D4~YـfKD\}w=؏f h}/߿46oRfLwtYG f虋1Αa=zfv8[7,S/ZG~WwrRtfiXT `(4Lˣl<•G+ʥhH`lӆ rasԮɺ_v߾QB?!Cla\kQd# Hv!.\)gKv.Z!r#< "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bPD$Ġ "! 1(HAADB "bP@ͷ|~Wݽ+"njc|>ٳ"} ԁG"y}ƍ39>I(D$6|bDvPc6nv|>EtԐD2vBRBD2ϾlT>l_ \(VQHD tH~۞{b! HDoXzڌI6Dvs#vDLA "] pvDKA "]qC{HR)DEt@fSHwz |fw/$"ҭ]F@cmvJ Zg|gwJ hcSD~+0 e|ʶW. yCF(%&D$gxivq!O!?{XCD/ԯWieݝk(D$7aLͿ7=w YtILlw$m`HO5!ovwPbw1s;>Ž;uTXА)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"".mwD$V `%v_FA f^H TWHHZil$//?/RQ !"iw yyPSUuT+""dy'$''QdA3yJ I#Ub>H2@$}T2ؒPH;hw9"飁|ZRE A"飑D@A 6,AA "r S@D"". q9)DD\N7 Կڶٽ~"aT@D"". q9!ζQ;w]?; Ҡ=,i:~Z-[Zu{FXjӿ I&KA ٷf- )-=}r)9Mg'#t!Ԙ}ijާ> 59W^MH*p[Q>]Zj}-n?%xvl^NH ,s̝בTLFn#ͮ])DsZkօ>g" Cߘc׿{44$bJۺOZQޘ^^{ 9 w+]^[tᏧɉ"1Y95zgC/;wanXޯ..%}l Wk̛?<VK? ޙ ;a^GͼE.2#OuD 1apKsuEƼ{G z:l`W)fZB^3W#yj S`Saulc>-ƯSgƼyMo ȇjᩝnN2@Ĕ~yeO4cV>j6UCus/A0%H>2I 3 F>3 XM5𷠹&Gc_Cn.)DLy;=@1`;m%?^w>gc"ѽ3 =p)f`8h7(HW,~[\ /wqh=0=AG:e[2v>}ƛ0pĸ~bV"ѽuu2+PF܆-7"A x9=kSuc隂@c뗛X6]32sͿlO")= ZKҊ@$5NX#aA,_}? /nF( Ko[Wj7%vzV"]}u`~悲lW`Sƻq[?i{]|TΣ@Q o'!98کKȟk.~`}y&GkON9qFaRCI%o_Lҋ@!zrܩϾrW`j\nLէxVzC0#(0rA 6zw9^PvjK d%aNHm ưCla~5t95Զd7*7ox!oU+wTAHڹgj)ca cكmc^MA d@D"". q9!pm[/DEGA Ћ•0C)DbV($)DbL MP #0H,B" AH9 1;/b@2 vD37xTH%s(LY (hZJTHR侃ϷBAh{YfII~ ҆z%s,dۨP>;UJN[$p0}I.Mŕ&⤿IJrF9eYK*$* )0z5-51gKIA4۽ܠ(a^|%5GQDRqt@v;P0jKaͫ"NRTh/# 9j PA TD@%%4ՇQ~ܯuBB`m}Ȗh?SIōC7dAҏJ3g%c4j7 8:b`JY<ɫ =K6~~37٪ {'hٴ oT'VT~AmMdjLnH"Vv62 ٻ@Y7m yrL֧o'倸]!{ n ^\Az? QvώR=O9Eˇwt\xGHnO+xh%Sxuϓ_8eA5w6cfqHA` Hu @- Loԓ3X^rOTP}ۣ EmQN$8fY^m]85.z9kwNtبӂ 1` h(_g|/9KF1gy7)34P:uuN$P=x$~D;{pwy{xq@MK~)DpZ8"L8^>]Ѿ|poR<'hX߱yy1IcyudoL95-}7}v88+f ֿA`pț0XQtbu5V? >%}<-F&8^$R{)K},L9 n 00b` t5LK]́^!s["~NA!_ ֿ'om&Ӹ#t13%A=_ͷZ:KX jS[^D SrTI4t??boL-U`? 4$݄fcCmKfS{km&S  1Q<ߘ^W5-^]oL ޛƜ\`ѩ;#7F. 6fBG`;j&P/QF~ DaT?O )' 0o%Ӌ5٢)n-#I"!TD$x8>`<^+jG?xw~ٷ,(`k̺TQRDe/A۽'E듣6 0v|x xZP贈E؂%d;8׀`9wҥ{ʹRLpH E6Ye?ˀ Ɇ;d ۓ/B=XSp;K5xdzka. UGOYYY̙ ,Ǟ pYQﭞ ڧX_7)IMoY}AA?ּתcuڝB'9]fZ׏hkUsbo8-^&R@9 v1s;P̝^>Qe p8 {Ĉv/DnfhɦLCC]zPY!i BtlLݗri_8@9 3AZiG缋 _o;<]@3t- 7sSp.bo{9L.k" vi_8r@ .aV{zn4ƂӶ$H"qh[Mj3-$PAn92bhE(P HH >_`ʼn[YeV7t`d@sUi:h+q WlnPSWyT*" ,?}!6>-_ p_-@=JY鸪N}.{=CLǸ$PA`=H4qg者m8/'b|`2N|xOrB7U-pwU,}le@Ԗ**,kj ƗJ9i(({O9X>z\YP'`ʈެe;2yek_}Y4Ԥ*H9 Ɨؽ' ι}~S/ߞf¸غxrٴ&t,,:sƀ\- ;v=h^033 @*KF[Ԑo)xU0:xj5QS(#. d][zq[zp=~?rCȹMX88fSH9] t=';ȾUo)’@A(2\e \6/*\q[Y䴷hԸ,Dpúa{K-*3X3ow8zuqb_c+oЫ1&#Ckrڗ;|y<|3ܲ[^\eg@H؂U sv]nOi]peӬDjJ"i`pyy7%cf8VO0= $.یuK`M'V>E@$N[àҿ]| x>Δ%_?Xm0"+ƺHCC^Nzˬ%Zcnlqy\=cWq͉jhSXА$)DH]Hs&7_׶`^Sʹv1|z܍p{7n;gn:8Z/cP^cE3ݿGAD$Are9˒o^A1aK}-͞sC}{F[ì'~|=s&+=T"\kt˖zW S7^Ɓ_שx`aXEJ+~xGs]D2? ۿq? ,MY~#~ ,MTocvqݽ]""iLEz9܍_ L6n[]_оi7W\uUd]W77 gE,ED2T,C$޵OҀ9eqV,""Io""]@d-6$"q9)DD\NA "r QC&VGp`ݲ^Gli_|Anxx(rW\9?m6ץuyn:FHƙc1pY#Cf6nq?Ƕ[gs:k=n=_ios_(?3ihHUk z.9@ӹݗXyO^ .9@ڽ:N 44d};~jwDk ̍1 ¿.WonX^PHɫ| g̚bwŠS?7q) :}]~uy=#vC($=)=vw(}}p^{}{ЯK`+ I[{.h~8΅ZV<ȫU![ǟo+.(5&v/^:@u n\ uPhwݝT{M=ǽ>?y&zqq{Y{Mc]6ؽΠ 4v`lZv˷1*Yxi'F̏H-FA ptR>t1f}hSi0hϖi?/៼Lɻ z}q}#4kR.l[uY \lwBA il `3ZJ xm@cK'6sΧN>5IXEE?_n{{*%΃;a9&W;?tϔq?x?u v* 4[$ Brpw1`L+*܎~馝N+3ow8zuL3 pƜ- L:델.L`~t2Z̴!}HDץ'ӟ€@w;a\ 5L~jO_tvDJ}GƳ*13($}k`텋5wt4/\:HK#>{O^PHZ8}Xe#s&܎ۻaЕvFj}]rjw!-|=`GG|K 0$I^Z2yrl]6He<<1m s:D oiQvuQeX^=EQ U&hw7lc Tn;&5,MbjcSZ { `⠯q`?W( $ͯ)kK ׺T1xRhdP?Q+#`ڃ˹5]W//v4]uڎmO{)G -* $nsѵ%;v;~f=@̈́%kW4d?P ܽϖ73`5Ty|z!ЎGtA9"k>@$L 0JzVly!A"eZQ # xY^o=)OG=3^`I"~C}^/@蒱'?=x(r>u!C=,&6@Qcxo_QA; DepʠN?&l>'e8̱A; D1qBA ҥ{ۣ(k4Xy"9*e'ARt+4 *PHQDQJU't"4 hJ[X "ѕ5nc, 3B*PHFQ! @ĬcI £TJS"< m1Jr6}")- < 5D$LA R IZSĮ"*PHRĥ "q꼳@HJ) `{s7 zE9h\cVK{R>o>޲ ¬qy^yH"JKpQdp|>Ȩ i.CO ETX)@ ɴDh[IcQ#7)5 9jo]mvF>JyPѱ{حlcwOMG"*[Gw*x2&k~3\?0kcF.`5ElnX6yvW*D,t7JԮD#X쟺uQU?4<4> ;ZgҠnv:``]1хpy=/l>-l& .=\!>Z6|zwo\ tzaIy+H:20~M և>ql Ԇ>y3Wܨvcu8C S'?! 02ᭀ;\ f৫Y!2`GM/7ut=LLt;ygxd˾wuS+̞# g:/o~!l1RH\3XY Tg\p^ok:l[`Ik`bFt] Iβ 99i⫭r pɓc!W׋h.(K^\y[? ϸj߃/.h^\|{7ojY)B!Wy9w=ԟH>`oI$'*h~?&\̸w0{rʃ*}{UTAי3kr_oo߲dm54$"1(/ȝ w {Efxy.+@g3^׻;wRԷN'!-- l )_zw 52YjҒuAˊ䦚͞]ݱom [?_;dhHfl[`:֯"ohfY(l$;^ț[+[2o"=$gأyD :{ hكG~"Sp;`}FuihHD"". q9)DD\NA "r:|TDbԶT@D"". q9)DD\NA "r S@D"". I|V5v"")5$hb%(DDR*&FA "R㩱$Ē"")U0jKa5=RVI[xk HP4ѡ꥾nU)"jGU6.M~^ |>HVVPHJ9""v()1W (.""l`'qY,"r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S\Wxe{ "]RE "rYmv@DDl@D"". q9)DD\NA "r S@D"". q9)DD\NA "r S@D"". q9)DD\NA "rؐIIENDB`mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/landing/gantt.png000066400000000000000000001243471433273745700260530ustar00rootroot00000000000000PNG  IHDR@5 .IDATx{\Uu%'tio5unc$FeObӌbYdIN%v ,ЦN*&zPGL3Q:DT`| vHC np;$@! vHC np;$@! vHC nLNzU1#'E16Yu` -&Vv#T(t =Enl6B,u?fl6")1%CLYq6:^\Aeo/Fwʈfܫsb fQlBs*3:Rx,~~Q|TVY y^m6lVl1JʸgL$d7Z-)=WiYz:ANz[WhMu:PST*7ަ[WlePY,R5AI5:+PJd?Elcs0͍KPYR~3ZM_fbt\Ee,aZU,͟w{S )I m eM.nKZiWBo3@Т{6[/M;)JQ\CäaWVVrTmWRWޡ1J/2:Kr\|-_ٕ˞qHbIޑgNqmS`F5!I6ق'+@G ժ/UZZZ>|_)|ɩ]WG*&耻ݴ(I)XMJsM+`v'kfTR{BMi%Dur2{6)3H6%e\RU\iߞn059Ցk-)%*D3t7Xዶ(@5m[%o' EGU"__ߺmMTݮm ^p+56^eFɞWI1$UVosb{_BeW+61[eHPF{"-FGs*+Sn8moOWVٕuk'"Jq)v$mLWJ+MRth]/X!Vkm;ospAMm፻_TzNсu5bt<2G(>#E+s IY5:.Je+ev%vg85nkoaQV:Nېٗz h%r8m^;)u^FvUIRQ_,Rmʔ )c.1V!5 hYV.^&{Fbcl R^?fMX%qK8R٫z2+Ω@#'E.ZXEW\JL6ߩ~ѫWr.5 %.jvqJjCE>JYf7֕ lX+IW}^bK%[~.yu-j?,ͦ$e/5.WI5/FImiqiKYF6-M]{ke(Ƅi-9.:X)x=ڴ=[VMZ=N,6ŵ@2rT"e,QqZIqQI],Wޡ%/Tdz玛d*岂%zqAlL6u—kQzl~Z۳K'u0{6-ָ~E&CeeYqi\J3[[ggk{tG, qvdwf޳I۳][yN\<\QHb3 yJmUڕqsQYGV:<*]3,+(+EΫ PK+"EqևE,][[Ћ/tHN{lUN\'|- $MjUY"´j$Exq&Erd+j/SV|PY*U}P'c|e)*r~Jj1X+eOTߦa=+)R#diІ]k9ڸ%@:sYs(K ehqz2)ķ.?+NX|C\|F", Te-]2mMom8·YsDQ n[@p`]5ZopuZo]́; ߯/m~\溚p VeKK!vR)|]M;-=P1.f[^&_z kjIؚEɟ4f@EKd1I5&Kj>miv;z̚qH+&o&Q_hs0# psiskj536f|(6vcͧ@ͺ@mWQm5+B,zlZEM*l j*YTQs.?fۊ1&˖r%LYNi,38E\E(ڕ!of[RTcO;H*S8E47D)NE(#sQtMZ~-c)#gwך;/.Vi22)%&JH,P@kW^feefn2ת,ehxb36QYYY,1V2sk,_Y#┑a\26Mꆙc@mfy"%6` %5?_O6ibOɺ%vFԤvM*InѧItv*6C,yi HPee.+TVq殉RU]KkRTN\ .o"6nڋ:h$/ƹ~ZڋmK֬ jܓK\aAvZ~"T1TaWVJ"-7):)1vb[ZAX֋-.A37+McZۦUZcmK?N5I2ИPкņ\.,+] OH9C-F wbak QDKՕ@BGک{Mlo??tL-ٞR`t%Ev ѸY(2;m:ԩs@r4f%5{)8 &/]E_)y~[߯_¢Wks) \%eKkng/ uL6E9=3/f&*+qALd D4n6/hL"hbMrM-jh a+)eܩMܡ@?l͓V.blWUoI#G)d5׽X7[eSzQށv=G,Qc a-54-{kg,S3)}Y\O=BQ̲8/VtI.]YNK,׫rMb5$a/6THwYɹV(,`D9-?3嫴O3~F- 0ٛf*$"Iv櫜4,t%g"%X/1k2(!"~dggx+{v]2GV,mymvNH_D \WW!suYI!vɳ 5LKWnQ-F*@TVb6$?*9'K 1]~EG2[і\jX۴n0y5-fuʘͰFlVhN^zZ2[6s>I(RVʞ xqt'(=}QfsN9? !QN`e+!%`HٕtFBBŲ݉9Xd/)M ,rې0hR8j:frJ9Wљ,fޞo;KU퓌(r)br- ͼkRwAݎ":}I<'hXekxQ[K.SFҦȺezmQ$e]t%8N_|ux(rUDe]yw[ӌMJH ]"< N4)~~%6%]xݘrR 8Bڣ{KQNkR3fo;*/Ҟt/~UvmްU>oe3G\ln%4+1ne u uռd8/.D*nQcbgb%^.S6fqcgr~\KZ/KKUzsiNI+mWR,U܄:?D$ojJжpWk-N_L(v8te$@pehx[ziUMqknC9Ie V.XX⵮m,Ge,Vpc7jMT-S˦Ĺ 7ɶ8~G#lZҰ\IXSbUJKن"$f*ũK\[mIRGcꦘ.5߮ŋSTԤ2G-CR\&W1G8'I&rsew!{Nғbe֕{hFȷY/$&;uG?"'*=+WEu;9 }ޓbIW.V|[{@p`]5箾O7uS5fX芚Ϲ4F5a55jLN熆:7f݁R Kqp.yFc3k/55555_&5޿Ll`5=6&NWI˺W1TWkÉuM+ [ 35;6v݁to`]˚5sk!u5.DŁu5MMu-vVQ[0j>|MKShͶ/]֬S{i_~/k Mji{bXpl vSE37cqY!Idzu۲4cVKT9KRrҴ"N:55R=oB2r~N{f;M`-ؖFE$f(?&qB".R֋π4yY</31ܹ:XbIyv9.vsT#(.B!qzHDrxJHϽ7Pr~"-7D))7_+BejS4wٳ{U! `QdRHE3:אxԖE34` ]W~ib Q\min4,T3mTs*ʊ`_/NWQi߶B B:%"Zxn:(kLJl!j-JW#K Qjr3 0Т/Þ؋ Vl]n[c7#T VG3M+62*ئ 򒲔{Y Zj>='GVm _TtSm[rP.Xmi\]);>z?e?!I9q5n}u`caG(;-fz _e6#In7V$FDiS}r"^6n@M-6E,RMբ55:HRYfMjMJ!N@{atJP ׿8,עΝ;dt(Ao]wuFe|o%ЮΞ=;w߿~WF4۳g BM$A\ &nI *++ A*,,tя~dtHtlٳg]oC2vӱt hWFe4]C np;=Щ¾8aOӠvo;{Gi9g*#}=]o$4fPzwoJy~?zw-`:ߠi溯~V;{Gm2:J{넾=Tw>tF>[gf8cЊGNِ>"%}{Py_T& f2,ytLvᔎfe铼:WGiͦ/ҔuL_UJ}ihDMxnk}FW['w{GOgu` _޺9ht섎~qN3W@{ȱ,YߋAÇk94f|.؛Z\-hSD%t /pHKcԫI j~ɏ}C4TR +ٻsnhZ2RW5{5m,oIl@7y5@<}d>]q/|ړw]*B: ^>V -Pg['rPԑ'MTߥn[#;">8ZwX%UtLÖifgykW;$mm>/U<7d&͋Q̤"6ii~h6{X4iBLoTNPқPi}ڶccdtn[_ãjS .جgjy^}*Xk[^?[aN2J2UDWSU9[†L9.dB5k5x)0bGhKOlVx&Ss:zDNd}K;дѠjx|{6Ks_Ъ+I@ G>ʓ pXeΜf3J>b ѫTDccCԳfQ^7^dy)Fzu^[ jZ#Yo~2OkGӴ>)i]>}̞zpM&qg/ OC5Z+Rc 5gZcb7OԮafɏUfeVK-tJ~3|rMT޻:Tzy1Mb Иbo/$ICFJR:w'vRHM*վ?Tu}~IB9Kw}q~3?0OSsZJ(95Y Q-i$p?@&I:UK4\c<$U)@Nz[;_S6Y~Q{CSA8ܧ %*-I- gL垺to97h$ĩ.+R։V8[K^w!D3#~(}nnE%ޕ 9j=gvzbS@%<4dxDќ-֤hVw@ՒtI{ Jm`֠`I!G_OZi Rz~<[8TpX5q $tQXSčڗ~HsGu􄷆ֱ/1fyToA[;zT'$pD Z'ܩ _о]::^|f=N[(z_Jʿ+zڏc WiSWW>`s+ +.Tc['}-ѫscR:DW:= M[P}zS:qP_ `n(_[٧t/tZk´G9VTy?4__ޟ?ձs>8͌d?K"ɿ~C@biIʕGɧkt6FK:S S\cwHn6c4OkXeW5;\ϬV;4/V/g佊1a3Mz4&@yEЯԠ`IR'mZ)XJǨKzH:Ur9lTC-(?O$iwty?(U~$Gǔ[rfiQ\m߫X0B?HKu2޽CR'Ԇz "b4ZRpںU$ 1]t%$)`Sz/=O*$M4Q|S}e5g,0Iʑ>Wi401=8~ h~ZO"eC*>A=tYkt=8:Yoҥ6K\yAr'}Z?>PO 22tZ?c1ۿ:n[$@$&ƽIjkқdt ѼyҊPOnM>!!4{^b&y97zI=eȯ7f~3'X>oWتoSm6^UjkfvK%%%›'F)>RRқ(#Yk5l^ \X33u֞2is>'iIm{Păz!w鯈2і<44G<̋t0Is[룵c_2A2:.eC.ߍ0eee.MqH] 2e0ǎsn:6 3Í1bROgϞվ}W_5[]}WW_}հK#F0:41zK;w6;{Ξ=kth g ,Dn9wUVVFXntУ0U]]=6p` 0K>SaaΞ=///_C ш#X B$ ӧ1 ?W<_q7o X1wc0WjǍ7n,1wc1`܁ vt'NPvvΜ9o*//o}TT!h1wc1ƸظoԀCӑoVڵkjjjMnn룏>uwwo]c=/0XMMvܩ?\oNC JMM%h7z뭷N  *((PZZ˾[nE'OV~//FOΝSFF>;vȑ#u7" @l1BK,ѐ!CH~.__4d-[L?]}F@ tAgϞuپ; MM2eH]ЩS\otHnnp>s!)H]7|}u]ϟ?otHt  np;$@mt7n 2N}Tt=5wz8U/|ǞڤG\ 4Qr8An8bt tgzXV82֣k$@T/< Umt(j$@]CI(- K%? m̨(6+RMڔ_ i{{WaQ {Zd=#]XNy\Uz :҆3F5F$7ZQQ>s]4QVizxL?fu@_$E̒GkCGvk˦@- o8i z(d[_/=f!m 9wچGIÓȱw̌v)"wZ 0^I(U5sCҟ}DsI^^n7遻fMeyTӯVե#@7G`8]:R-{TK||Ϡъz&]=_S%8OM 9K5d*VڦWO8Jt$uFy^R4o_o ʝvTkI|<[РZq@t^{@mtO(Ӽɚ5-@yZ"Ѧ a.,mAQ5!9MQ@e^?|>oX؋],Ltnp;$@! vHC肾lF覚wH]neT曍 NA첝atHn˶b1:$:  4i<<<?3=/TQQatx.\_|6oެ =<<ftxtF9ɤ9s(99a?OSp F@`e{N;@f̘G6mai:fgi=UCe4yE}\O3QCazoIZvU|2Sl͚5JMMծ]TSSct8nW^>}NCSuXU.I >uh}W2RSo^T ֻwoFl9sFT^^nth.G7x 0fz2qe<7M?o.쉽ںfvܥn;b4\}GqG:tzvw}$^3:7n,;y5@#fkMo*I'wqok*ڱFIǿ1: /gl$YՖ{F Q4jx{Hϼ!{Z{G1 _wNZWU(U\34*fyFͶնCIGbUCes̺]ں5KYtX-ڔ=OPM]`Q]Љ]Dv}.\?h;o>#Rv&G7'viׁwļs|i򶶿N-wB{9s-%Үg5nl-NG۫͋Tta]WϒtϢ:QWȖ?K/mz_:?rq0mGÆizf:DJ{W{ק~Ih ozBш?׈Kv[7̖>ӱ TNnOց"XY')7Ⱥ{yByTI#-ĉ֙3gMFԭDEEB0k,7ƿcoԀCZ-l 9ylm5QoqO];6nI:wD.}+f/tJ~HkMhQݾuRtoi~N*m @}z7?n'@T^^.ݮ?Poұ3@nS6w}v%%ՁT|׮u?%t,EfnCɮ E:!IO^F= hΝύ*5tHi#^=D=U 뮓zkUQs׆0w}oVo\7UAgURZkC cv4i*N>뮻NF k)TUUUñ+ҵ <4nK;nҢ{\P-fbF^Ξ=ݧ|@۷4lpELSRg:Q$'t\# j{R7]7~?P댎SNle' .i 论 kϵn<]ZPش0z$o=G5uPpBvϸPl}WGn@N8uP<Φa .y=Iի!¨wE Ұ$l^=PP]z@l?ɏ3k] 4rZwZ6A}`~Ըs(ȈtCyR ^h?Ș'm*)˩#Zc۾#:rKǮ6O׬7EyOe[+Ktp٘\g#%.|s31J%w\?{@{Jt =Kv6.m~fB'd#](*`M ]EiePC+NmZ VEA}V`<0b CX4;)CCKV,g%y~Zy gkdweZ>3@uRCC0?Јi?׈i?7:tEZt:G=>chD!OK%OY @GU m}F$@wRbz)uжZ'Cehfw,:tQufNTQbTۤ we]N[PIqKަ n*~SD}*]3@nc J1+w2=23@c4c]*-Iً땺 ~#5Ӌ_bHM U|譆bJ?NwI~Lg*$_u;U/NmkEVEyLRE.|nVu?u2ٕm_wjC:zK8*.0z8p܀5:Nw>Pښjy Єy_P-w?^G7@oSDߩ[Mۖi}Z *$y4f5iV]C>Wk)#t-@9N=$@$ocY}g*R,NyWjI#"=ĵ_}?CR?M3zHݝPΕi'pֻkw~\L:Mz Q/\:_3ՒINx-)?~@W%)=!6:Wgcd0A Tjy5߻ZWˣLw˪d2U#D|-خ?mJJOTcdLм)Ce/g})yxmG @O '?BL&Xٯ]/$Uؕ_k/ g+d/udDɝ 8=G2轩1.2C_SZ8b'?v>֥&c|"<=~ؼ͸q\/7tfC np;$@!lwF k7+BtM.~!šo#',Fm0j@s!:~vJJJ]z4ƿcjjꮻҨQ nUUUz's3:mPRRkھ}bcczj[ =Dxx=jtO<󌲲t7]5@x'I~nѣF@ psGO?;< ժ}{F"Wv]7n޽{?~\fҘn_vocǒ}{;vRRRt+**2:<4 e4:$Wv.//7:$4 ;htH@@@6 ZG\ӗ>>>F l7F@F n)מv)@`8p$@!jjjTSSct=n,Yo]mS҆MzL]{|pE7T{V߮o]/O>,Qfݽ:D޻X'RS;o,c0`܍q: @30hz(ZJq|}PwowG)*Xx6:.XAax3^UrJyY/k˖(g. v=]GѳPfjөOjAa>9t8f=Z=wmz8U]>*KѦM)kOCF$vnm{hʆt5D{VՆ#&ݷuE4{g^J'{iu84 { _+ûO]y2 S?%]?:_Kf5YªDy))ej?!mYdlóP=/i{k6KaJQ^OL~6ɴ!]ΖϮ}@c sj(S Xw= m\͜`cMY_5qDXM5uQ}6ܷX):{J/-]oQi&̜3'TrXik3f(e5^Rvg5د]G$YdO~Tw-Y:mskǡp.KgvOM$U=Bp3]K*pܹSBemyXw-~I 7Xw9JS mЮºF> %|.-ٰ[ Ҕs5%\7ibݲbmmAv^YYNǕIuu%fnOkc[@M?P%{ HS˅6Ԇĥ 0kjݻJR(4$L^VAuWԞպ{OS9A1_$q=Z(zX RWզ=AZ/ 4cvޥ}VS@Y)K?VG2H]u =kcV߻AnҞu Ȋh#ՅrHRUKzt~}=p6Kb=߾4A, ga=R-ixU,]rJ<}.,{YOZBZ76b=vZ*jvlEZ0~`Ԕ{#zyon p/{uZҐ/%|lToH~Ե)hU^}5^)Q{u?6y_$3HS$Wr:XY|~UO?_,sY1J?)Y+}!Ue}.u|$O.}D3==ʫWõ3AtɌTU)&;'y.3S$Ijh׬P2I*+@~H5wZI}xTT+m?o7P6tPxX{%5Iԇ;DA&Iy:]E*i;Y Żvbɺ4JA ^它TisxJRI%yD IGTxJhMyHڭ-ಂ-WI݄O&$IhKFO;i@c ,[rtiRND% 닍;RׅrW*qZ׶Ҳ\516IkTM5W)?s5^lsJ(Vmsz뉴Һ3e_-u=WwtىQRbI(S]dՒd)!U1kB A $Q֮M˻7遽4N"J٫'jr*+EYmx=QQ] $iᄎm [U*~U?_Fдkj%.J٢Mu>jkG*Iy*d~m~.=ݩڝ' 򰶼X M?srjv> ]<崔T3As(U֖M E+6KUji,[->檶-ڔ٬gi׵i<^]ʤ@{~@Q+sZ+@S!^x:E͊;(פyUK\*UOO^e yB=  W@XPRÅ*>O{)t9dbӨ 2w$nWEZ(D՚ӏj޵{ko>RZ_Yg5_*gfM5kBKovN?F{ޭ}m@\gi5dJU߳FOHv?SZW!=ڋτGzOߑuMA&OU)k]xvKUvvvvU*ܻWG$ 9Eޯ!ڕkQ4HAp$@?L-ң/V_L!O?=CK#nnj޳gt!?Dܹs?a^]ZotnIqqqZfMþ{j޽F 6L_aХ CoN@ >Fet1c`tty9U3y/m@y%U'Wұμ0t-57vZ=ht(t V.Ua^ 2_?INCM PnM˒z0OOON7xCǏnWIIѡYVYVu]2tl ѫK8vѓK4ɿoqW;2M3Fcƌ1:vs]wI^uCUu:(2^ժRaosjS*]u rQoꣅ5e)徽Y[DՒy11SyA>U4FӧӤItlso=[g.pKg՛Nkyo͙3\(wEfRc?V*U}U[25aރzp^:|" h3c*hz$cNkWL2Oh͞hVɡzgQG[g^~f+:z̧>[GhEG)VJ4(lgOٱO_{Wo>+!)xg)P+/@a I2kP<)B %WJ.FJSB;2g"uZҐe/9j.\S5*jcڜ|һWaI7u3K/\8A*1]/3]9hv$ѤSF$);ɓm6߿VRRW^߮'xBUU@ Ox% eZIji"@L sO\I1(ps:.o S*$fWЖ>d| w ty 8*W%QP-I:l=کɎyJ(ׯ~zobkAJT wD%KکAd6@O0pGڵk裏 ( $y(`Pma 6r<%бw{U _LRk]IR^~=4]KTһIŒ5 :ߑ#GOt;t뭷 C U2n$ $ $c*שO>Ҿ_kȲzi I$ߘky:rY(yV̤KVC.Qn*p>dФ1`&#rC.端2:tQ6C0Fs(bˍR&UIo~I^(:fMBPm;?-sh5i2}z/9dyhW@:&2|23_ٹf̹T`M0Xd0ZxS4Hթ :~>&H×gb1`/yIT+s >қj>ʕa )hU>}m 7:&@N'?Ӵgj֭zW55zWTcLt-_555) c_SRevrOE忯- :1EJTppb~/ 得deTڸUM:exl{:' {JsRcw PE,4:͔)+Oa$)Hb8R6ʬ_tRiC 6qTt%*[lg@ߴbkoZaM [S :+Ut{V%?(%HYqNN#spd e9 (^%9 @G 8[,$ɮ%'Ϊ]Hf"$IەRQ dHr&G,!Z\X,_Ie~~bk/k{ 7I, KS)ך J$F+[HVڑ]#sRu33,Vo3++VQM+x5/B8?Y+B/dy|%I*v=(׬@QYYÐk_p9jgF4Hu󗥮}6mTcXfI@ EJr('9MNkjjTӴv,v|m6R]SO̒CWpdm Hrd)a}kԴwJyvG4>hQM+{"/y%\$_kTusېIw&+܋Ǖޡ#-zЭ W}ۓU!V)fle+CQl[U_I\l+Acdeh=^Yk"e QFa"(+Y$eE)^<'CYq+>(&xCoZu7}hE"5Rq)! 1(lɋwq2Q9EQX̲mTPeS6DNBpP5h"n*z~graV8yyI9)]AkRrbJyIr4I,ܣ^CTH|%GbnyيU`cnL8 eշR@[z OZkQnR]9P{Z8Smk)O/3N/$EYͲ%j;tTdKHj}.Jn{:K`E"DX^t)ijR2X^j\;a)__/IvIj8TJ iՖRm.jFHi>*s^ɨ[˹醛OUtbNCmۥo ST\g*_V|UE!]\> J*䥐řZ40K=#^Χ+,;8+#WIPߖ%JA.Gkdm mJri$Obo$ Ujº*R&C5cUsiJSⴲ>AX)7*s(W(93Y - VYWSV|IqҫzMa+W@A=M 5-) Ib(Q׶T_+R>(MR=M9VB f5Yv)Ir&&N./x.{M2Ww\^2G+./UZQQZ޷g~iihpbsU&_/NQQ9+?Jkrش-g׹4WmtEYJWʔ{8=qpT ~|}YZŊZ^H[ڝ=6X^ʲplV$/Cb&>Q4S4I:0  *}eZe̡ܔŲݺD{Z8-;!WE9JY|% p8t鏶E)=ס2yU:dH)8,Ue/SYVUVY^eEIUL+jReٳ8O.Im^d&/RqrybjūR{/V]IQzN*ۙUنmd5*j`⒔1(@]VZyGV^5g&ܮ;]WWP$}zܳI-ҭ^\\V~޽:^oZgѥd&Ek[{{i4'7ݡZ8=hARd(~=ڳRwњ p o{tC/_@.Gx>w-.I&+"I*$6([(;rI5j$&i>1lmQOQQY|u^*sؕ[ha`\Z=3U@ nd2t9mŐ&nC.'88E&Fat( Ă etex{{뮻2: tQ$@nIqqqF]/KY,@Eygt`1c0: ta$@ &( @\\{z?P6:\kFÇWbbx ?~\v]%%%F_VUVUwuFetHHtScƌј1cǨ/Jl?c;cvz+Ÿ7n,1sq7o c0@cp;'N(;;[gΜ7_Ufrَj8۫\XFnF 0@aaa 0zHڄЃ}JMMծ]TSSct8rvv}G>}N+еV_|atܹS~@P$?\B[F*f=PAA\]wuQ޽u5]~}w}oVoرC#G7lt-b}.]w5\#OOφ>C( ={eO>F۷vӿ%] :uvެ ҮZ3gEz u%W^FhD HC n,]OhՐ6-[Q7nT\Ul6nܨnkn[k{"U74|}%0:TW˧@ЭCYW!W5`ѱv?Y0:t7$@Hշ?@$ok{^׊$?pzh4.4 @i-#$}zx͙y% +UphJTMw"M՘V*v =\ek53[iz5RwQ[>wyS?v3[.g'mP `:mݠSjq?mZȝ`GJU\R!oCeVMb+4_ުbW".w2U[%*..VIwXE[]V*ӫ+%՝M0 u3g5`IH]{x` Igt4@ ֝yTxK*^>w2=23@S5'kӇ4Dы*><ۤ}Gh-Vk3SqwI1>ڛgo&+$ 0x:]3<~ȔT|2[K.oSt^I*y+!˭;GDV}jcg:S󓩷!!$ٓ_ԧŒdR@hRJ$@(CLu/?TQmD?d1yH*Ɍ:SR-Bֺ燛w%mƏԶ/.P3or|]E*>v$*|m#:309$3& -2J% o(P;| I}4@.pUq:wnK4f6ii.DHHg& UޠOfTRiA*FBЯHEIηRϼdNM#p*83A k|v^3%B%5SR__[ԼNJ{< ɻZצ 4z$j!ƫ6Q†g$yȣ*= D%_!MOL~I)~m.c"oм~c)$ 6]h$@1*t3*[&~ZV 釲KwFԅ5>ۀھ K T,IM[3~j_Lw;[ܧ17SaFf%wQWuN+.ɞ3U2L2PuE򳓕c9waOW[VqEj&=t>3h![b}{oL&yWџڬKkAOOW+JT4F `מ.rp&bZdzm~)/~7tz~ۗ?X-7p np;$@! vHC聾lwFhtM.~!曍 H=o~cڼ2@H!**ŝ2#`Z *57pKigHt;<(T%[vBN)AqvZ<ӆ[*[Spg1Rw:㬊SDg\_;__>_s?;wX+l6]pX333Z\\d9,k|7Z\\))):}a;љ3gv k7ibbSd<>%f BC oO> wj=*YZ&O}QSM*--U~UMy/PPSFw;ikkSuu:dtWCOŋFw`G,eeᐆueV.gq2ThOWTrjOQ(#`'֏c=>s6Eȑ#ӧO3s +s_xd5( WںEj\Cz>{$PIk7\s׿]\_9?a`92ߤjF%M]j,Wii+kJmuTl'^# zTR:TЮ.Y5RQ^75կj'!cW;~JV9ϯI›>ct3:9;BR8fu4Ys hۥ*m#CmmpCu t-unU:KImdJv58zw rԪ> G5*;,u =u>p@]tulAG*T[+M`ܫʼ5]s7 oL5*;zzeW_W#RQV$ЕRVZ SeW}WQ*튶'!O!o:WU*cnLn<اUs`=YT.{eψW^_/^niQ5gV*'ֵUT9;+!Iy55eW#*VmSӆMMjrbǬ5j+ ʭf쌞+곻V=+8ccc>sݹs.%ų>kt$n,o#GW~~N> 3d2grCgW]TQzFI҄? TvҀl5jn,t[W;%4ЩUŏX[jM&[̩'!{$TVQ\4{ѓP0va2 u3W-e qίْ]kw#KMtSj3[z駍 ,ƚ,,HR~Tm y[r7wQE'T} @^ԝ2]֥{#%޹uy5ȑ#:|}`_o_Ν; Wn׷m fd"($*wcKS gQפ۽`l6IRay5m2⽪ےN]lmHzK' iJ :c˾0L0o}[JMMUffׯSARYk~$ w=B{16{$iW.&L)"'ִwܘdɪBdG>IRWυB532jf=zt12ydNsj힐RXjcؚÉfUJ#mr67ޅ GK owó?\ѻE7 )l S%hhyoUmPC:Q\Io;&`7{}5콿Xs{||.bL~2*:U-cA~|#ZqUrtU #]l#ORC{:׭sr9TaU„^FW=j+O7ZNuI x]9 MS;*|zllv ?PUU24al״_sZ\i/XNjpxXᐪʖYa޾MTU0cNcv]lfFUoU9U*T}0{Gtg ?^]:dt&~ߨY1yJ/dOWoߑRTxVϫĺEC]VaGo?+HJ;==h[eUjsʾGyj}O}ݺrէJ:r՟v&{e7+5P6ۄl)ZzζNukq:3F{uVYK-ڛuU> }UéY*kq=BW侺]8D"Fw"qu[깱28瞓$Fw@!" " y7~g=o ng}v\05_%X؈HO]WG/]ӗ.綺5}'=xLϷPwaAop+WS[?W I`_aLːo6RfK1=)?(h~T}g jqCFwC<*I?xR9G%)S咆^PwsQdr߼ntG`O1V<+S߮ݼvI\/Mߞ$2'ucz9vROU鑂.j~r\:/ȼnӪ[zfc'ӕ '])K=g}կcqq0XU'VsVng?>-S)󚙜̼RsSgw?c:Ut-jvrR:cSfԱǞߜ=+e~FҏK;n b\`8fĎxlP||R9/xBo?~q+?g}'U*H4;GbԱǞ@U:uIzP U*8*i]C߫|V U:EMέ˿ZPKGrSgrE?㙒t= X23$iV4.)%@K@(Wۃ7BOd~Y}JCQpQRl'z('EҌR)xIHxMCn/SnC^)37as׃9:"Is'V@T$=&[NI~,jF6OF>o<GfT-z-s^dy"M_۸'͙hW37SS*Δy|M`yg*SffЗ |=.>%M_Jss!3ڬ9+GʗWs!V#}dCo׃zdR$z_Gu Idt_A?tT/oh8393]xPOǖZ qCPl\lk5󏫼`iؐ`V?c;3*]:ri,c3鶤p=>qK9鋚/?u2ZT? *W1[-qI)J~yiy#3L=acz<'3ϙq I DI/_bteol?3=&IJQ~%SIytw~8X(Ƙl`~`l寢>Ttte9)IzZ=Jm]Ig4)I)6=z)\]8XB)U3?#)hdY?~YI)G3'A_5g}u3X022k&7VOfYY*ܼI$}(_?G/irf^JTQ43NOSW&ۏOu:Yv&gr4G󚙙Wz8ʂhfQ׮K/~Z&gU=ЇH=qVlK _w/]3Y= 34q-^*f(:$ng5Q-OAMo{w_T~&.//woukpfoc_nMk1=ל:mt`109sFn{p8f D=3, !O> "墨n(Z2+:t萞|I]xX $~XΦm9rDuifbOQVXXB4=$_7+ q77qK`aħ~jt$n,o n,o n n,o n,o n n,o =fˡ,CH$bt'X˛o3ڿ**oi"8j9@8HB_ x%3+&|Vr@e?Ma?гg?=5:1S4w<y詷ٽJ?⼮򴨢gǫ*s0I׎)Taq?g@P94Q{X]#lS'ﶴ;\rž˺qFΎ> /=tPn]8Ө8?=򴨮S#;vLc?{|悺F;J#>u4s!>hQC}ëPC]{/S.:=CC!ZjΨջ G]yFn}߻&LcyǤFãv&4mL3@O*:(Öm_ 7Kn[!ߓo뭖ov}^eM:at,SVjʳqmSq_u4u^Vz[^_30?L8`XL@_EڳW?|U/>z5r$RRϑf/}?RRR))y-mȫ/|G~j䥟9=~II?~/1RRRym2Dk%%ߏ|lG^,)|{7c4{7n~~RO#KW_|ylIacGlՏ=_M;3881%%#o_wDJ|䍛_E'#_!,q%D~ٞ _F\:iW.o_>7͚?{H$|`Md=x睮SRQNTשZS+߀Gg{͒T~3#M7,[- f75,6~%״pVkU!Z6atwиGşSU|YNՕڌ\r&*v8$X嗔U]r-j 3 (@S$)/k#ʒZNK vn7 UƷ %X'_RcfS=C['x7qל_U,oݯm7R* $)W!S*IKIeղtr?0m636Q'\P;]u5-r.o<||$<5$wOE1բ1s;B ?(X"ѧaV(ycqW'#|w/otP^}3Kreu2[^OK,j+$sUlMQ+d7鈥q;gֹR-3?Yr5TMsFҦFu/R~í?~$(oÁ躢WN7i@Uqq|xT\Y[̽Ȁ,1޸K}r{JkS6wGr7ܙWik;Y]]LWlڌqI⟧MͪIN55{L-mu?o~πdrM7^CȣfJ/w<7aR;~9 @oGjo \նȧ޶ eiZN}8#(PesHH\;!G6>$٦!:;rάW+g\,Tr]v{*\͹ qDP^IR]K?$OSEO7L~3~9Gcp?O|*V1|jȒFuٻه$o{M?dn蚺Ǥ"gX'Ө.Um*@O:դ˝uvOq) 6'f9rФ3 Y(`n8o߱?NuKճ>;%g}Á^]yof_PJ-㚖MjKQȄ+EwI:ݡ앍uV m D􈦽m:Sn_<]RfиU_{YNuvSivKRc_͝2.Q!q H PvMmdTr5s{$G˪cޭG+͓̈́vg=KyIԆ7iM$ei!OZYr7T%fvi^'/OMycTS02d=67}]l iW@f7q_iMy4,_`*iO9Wɳl`Yw;%iwV79/#^Ƥ,gr^O!$n]z5-060MCcHpCH+VuCS<7q?`g@Q9 4kt $U~";Q&\j$5ܚdАkLPg\cѩ{  HR2tmgܷTNqS}+_`7oLRElUKOV7{C2_W?nG-^M;4'UC㞀o $eI j}&/~o}>+.4 K5,ie7+.%qy囄>ߥiYaiԧaIU5~d >O{$GG ;L)%ibnÌʅF2A"p H2 Q^e:sCѷ9OwNOiU7k;?-][t]]~IUe*6XpBqP%/F=rK*T}m|{aSY: Ŷ֞RW[ʒӱjz;5RhLm_mɪ0q[Fʪ$o>E]nIY*]7߇ogTC n\V$՜ز@//Ra͍zI*}i^WP~uuktE77.%X3 <Z{D|Wq+[-ߘ-KB>E\$w2F¯nx]S.3gp<}չ^ԍwZ Ad"HN zt٭ +\euEgͿ؝V\s*aݸT` ylwvyb߄ TٽɁqs;S5WndnMܭH㌻B8պI׶V缜۬Z?SC]jmsɯ ]nS(elWR>=\ݽenRť^u6х*?|Rcچ79&Bu#ѥצn5t]?6uErnf{H5?g܃]?f/urLIU]]m: >E d9ui~)O*[}r{Yi|olDq=;Ff:RX=UxBn%^9mO28x H&fPi}]0WEUtkIqnHnf= &yS\ݮT-E{͙{v/5l,Ujtmu\q The Official Guide to Mermaid.js

Get up to speed with using Mermaid diagrams along with real-world examples and expert tips from the authors to facilitate a seamless development workflow

Flowcharts is a diagram type that visualizes a process or an algorithm by showing the steps in order, as well as the different paths the execution can take.

Sequence diagrams lets you model and visualize interactions between different actors or objects in a system, as well as the order of those interactions

A class diagram is a graphical representation that is used to visualize and describe an object-oriented system.

An entity-relationship diagram is a graphical representation that is used to visualize the different types of entities that exist within a system.

Use State diagrams to model and document state machines, an abstract way of representing a system or an algorithm.

A Gantt chart is a graphical representation that is used to visualize and describe tasks (events or activities) over time.

These were a few of the diagrams supported by Mermaid.

Book description

Mermaid lets you represent diagrams using text and code which simplifies the maintenance of complex diagrams. This is a great option for developers as they’re more familiar with code, rather than special tools for generating diagrams. Besides, diagrams in code simplify maintenance and ensure that the code is supported by version control systems. In some cases, Mermaid makes refactoring support for name changes possible while also enabling team collaboration for review distribution and updates.

Developers working with any system will be able to put their knowledge to work with this practical guide to using Mermaid for documentation. The book is also a great reference for looking up the syntax for specific diagrams when authoring diagrams.

You’ll start by getting up to speed with the importance of accurate and visual documentation. Next, the book introduces Mermaid and establishes how to use it to create effective documentation. By using different tools, editors, or a custom documentation platform, you’ll also learn how to use Mermaid syntax for various diagrams. Later chapters cover advanced configuration settings and theme options to manipulate your diagram as per your needs.

By the end of this Mermaid book, you’ll have become well-versed with the different types of Mermaid diagrams and how they can be used in your workflows.

What you will learn

  • Understand good and bad documentation, and the art of effective documentation
  • Become well-versed with maintaining complex diagrams with ease
  • Learn how to set up a custom documentation system
  • Learn how to implement Mermaid diagrams in your workflows
  • Understand how to set up themes for a Mermaid diagram for an entire site
  • Discover how to draw different types of diagrams such as flowcharts, class diagrams, Gantt charts, and more

Purchase The Official Guide to Mermaid.js

Written by Knut Sveidqvist and Ashish Jain.

Knut is the creator of Mermaid and both authors are active core team members of the Mermaid open-source project.

mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/landing/sequence-diagram.png000066400000000000000000000465571433273745700301560ustar00rootroot00000000000000PNG  IHDR0JM6IDATxy|սי$"[",Jd-V.vѪmV[ꭷV+,%,$=3s~$$$@ g~>w9;'g|XDD5x ""N-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" _l&TZSw[OpD]~d.Ů?MLx4|y.CߣJ?Ix,Ɵ5hln~;F3һuaG(et{TwgTbן`rf &d&]CQGˍ~WF+F&#ϒLߣF?Mx'YxqQs՟QM"ZM-/xqQs՟QM;DDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DAxqVsZNx&&WU0:#޵I[L>㽬&%Ż*9~kGcNH~U?+R{k5*;Mw9fŏr]y+6]19%ЯaMxv)m$>jz'ޥH*{] ~᭵\ :$N^x")]w2Ɲ)»gҽ'1+tNwe'kG7JWŻ  Kna3s]M%үqw?q (ly|%Jvն8rwx84o4ﶥ;8$bL+nupw}vQI7ϲv k;Gr§ <+s+f/y _^Mߛ>lsv89f.]xm5F}\ueI R}p'ƻ^ڔ1+X`#+aĹ z ^}owD S0:7hQka,"W^L`[qƏ6q5_XLw|x8@ҥ7&ޭcD]k9ŷ[L}<8[_.Xv >x^֮}@WVUWH\XX0adw"Ҿ| †$ So_dLĻur* ϛƄH0/.aI8.A!KΏwLW~Lw&"FܑIחǻXH7,`apϗP r(}f0§o,w䘙T 9;lDos Y9kgs9]Or&j닉 aH@Q%` V=Ű04 ?=7`*At& gD̹_`M]f upii‡9/&j?fŊo1Rx0 CAxQW9>^TY ⒁}/B7 TAf*]Һ³xnD&7Sr;ßQ ތ^֬"&O_A~79" Z4<hs~F$q#k >4k ӪsĻT9!Bx٢܍WzvSxfl/tmvR8ݭQH;5䑅ƻ%!<¢i{#}Ykvy?]P;BbP,l@79b/qAXY^uD;_#0~`p؞y0z=Ő酭TǻXH7,e !<`ɧ4|AtGlwI%LkYت.vCg UA2w1XJ> sBGNUv^z AF5 YYgunz Q٬ZP _vܐX& k]\o_{rOG|d[8_~S[.QwdAvk)pL ;SҷWB0n9މ}Iqa[J=<œOL{V9Yn^wK WZGM[_sb-]ā=ttW4q[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DAx*Z%CNU%OІrH'mY8*71>̖ šeA0oH"Qx_ydQْ¯zy8iտdsܻ a\h cA=ݣo+oFDh|Zk_}}e ֑hZkCooeyZ[k}v׮[h"ZTqu@NJt |o%{o~Gc{ȴRk(s4soc̴h'~B%O^zȍ$s|nv"ҙiڤkn#9dކC0FdLj|99j9/(:%)ʇ`WG-"NN55g~&fٓLꭉrB #v ;-Ƽ|@j [ v8PiFNk OϦn߻_ϣ>Z TtfGu-sYו p^0ʲu`ej26 YGVkn-'y$z@ +V Xb xNmo $aǧڤ:Zk Fy >lvdn>־yF P9/:LWe42ZܖUXnֆcOjUآ[|=-Ԭ܆8nbnwFꮻ-ڴ $/u"»M2qdc xNo m c133ٖڗc ؏(%>c 5o0&<3TZžvXsMOc & ZmÏsի!~c0c0)=cZp}D?6Z5u 5U#o4mN)c{o-!m39aY‹ /tV#[~Ś %myְց)-/ Xqvp]f'0fgl7mXtrG0vU瞧Coa=1ɹ73KRNd߸i=sL^Ρqtؿ)sn+#[&4oʔKK$As֐3.lҁm=>;c?p`v:c3dցWGزwӔǾpgҙ5m4rDB}]t#"iڤu/W^y%sַ NX2<=|#YoMy1vVhkfnt)CƄ oag{6`c?q15UQut:[qp9 ;w ޢÂX<_L:rndiB9I#iN#vK>k aׇ^uߚv&jAuv, m!<@R~Jnt0~7]R.k iho|QP/&+؆}-[;m`_oR6;]Fn]'+8E#31U-*;k"kJL`2G5@^277K^&+Pw0|=( *=Ғ |݁e[<'vVy5]=I}:u`ǀ0)Zi8=]Iu#s[j2S0eon_e-5%Ճ7`uZCex1yGx ?@?J){@6gC5֘g=^cfk,1)Z;%[-Ғ»dLTʀ׬禳=H}+S%`o0 UxS} ڒŌ9o?tѪw-c1|OǘTJ ؁GiTkzӗeҿui=ff)EZkB7lW *7<x5j7&UU!;o0 S +[(1k8E^KpC@ ,yG6d#7[ ݓNJ>nV.4dvADZPxWCe!k2<&v:,9*-V)K %QQX!oC$%'n}'uOãqԿ30s! MA[V I׎k Z5g(| _-'n>'5*4E~l_:XĤiڽ睕~o1vX'^ZmԁIJﰠkvכ>{n:)wܿhf͝U`3<;uo7[g4}II_fU|qЅgd}P)yuBGdLj^x5VΜ_n_}-y.vh|:b f÷3ՙ'0c.>wڴȅwU3 _hXYQ)S?k0[5B}Q.64hP׾ ,Cnfb #ͨ$OȺA?k `h/^qcmcĎ* sP8BK8CN~wPxkSH;RL;0N^HiڤS ޞ' g 7w'2r5;PxSxw]w VHi[DA o)EDq[DA o)EDuޒĻOFޒlmĻf[[Q|KBRxKS|K"RxK'ģNA-F-D$WŻщy3Hl,%ϼn[A'E]̘f7nDMDDԉGSƻq㷭~kiNgǻ9!iDDA o).@u9o,,&%t8$8gp6fy.i"G#oIl5Z*H- M-J- M&4-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" _ I$j19>U >y&ޭ=Fz@)a oV̯g10ʖt~ЎNd[n9n푍߆k.nڣ=#tkZv޹ xگ5P煮9ovb:걡'/bkj}I ovcΝG=wwqvc>7$H;]t4.><@;P֬xu0!Qۜ:Z/2'KիYknm2Э 8KOԽ[''>:`ǟ4_x&~!>rXx]rz5@itSZ$[i5~4N> ُ[/ NXil嵵i٠,JbmxJ-Y>;yqXm -^G@ūX;!h<Á ~2׆w],6\oRZ{#zFw&RxxnH[Q#ɭ|dvտ`b^ NT?(E:Bz,Yf{̡a~c0c0)Pj W_\u[ *yP&0g#O` GˠȺw;!c&*kް`"ڹmc`"wfMSw-PVR0@ jJƍjx^HcMOA&"ۀ!G<"Ə~߀ox/I9/ZcU#B #ښ@>ƾ_Ş=uJk^Q[/~q4߽(rYg73m Mio0l|,,9gNk1=GYSR +\:؏>sXў{,6O6,O;O}*V._c=>;c?J_>wa˖3ܟu;1͡]i,Sr+g7[B[ <׭|yObM ʰg79r.Xכ3kBWmSzޮ6}̇WfxeD js%l'>UGxb;ztRt{6``L2'BhMU[4 c,,YT\ 鷕}ۋ,fv=@s,`ІV oɫܸu[ecwE~|'df~|Ӗb8I>yeފW-Luxoݜ<UD,Ƃ!뽢|Pho|Qm.8=S5guAmܭVlK`9m:D*o^zxf}OE3;!UnM&l{Ksk㉴ 01юlZk3 \XŋMNkk:c+=kZBz$q{#+ /5<]B,lJsigX{m.s^к54[PU/8t+N}=d6ntddiw;(E[CL` jR۴Asʍ/=bG zisDV6mX'/z.تJoEw?4RO|ci6]NC}dƓq0'] oI5 cSێ1i=ogj 0ofrɸoh:꽍BE˰3ކ}~1imD7C-  D PQ Ǻ<+Sħ9'Vx@yP=X2{3`M8k!iDlI큃#C琍Ю {R%$vaSѠ BV&λ#'}(%hH^`mxses9pȅb=^Cpg2@ݲbH:-[ g|T9>` o5 !ym \ @p]uAxi[^<3&"l-A*n̙zÆo^4C& Ϥ88MANir 羳Ss7{Y{#7+>q/ `xM_]Yـ%MTaCnKS7E:tgl"Md^ڴȅwU:xA3LH1ÿ1ssn֞;{#^9彦ōK1e-½h  |w tЪA>:fk1_Tp$L&A-ri<#mߗic<ï3c1+&|ž?d^|{ Gda}{12"4hO*3; \15#Z(K1Cn? xra+I>c{ J9kᇚȵ=}F02OI5StYidh/0q)a_\~Va`zM2w0g\:;d = e b3Y@2Ƿ+r.>s,m{)|Շ73?{m7]*Nnՠd &k2osypkogg3p;;%H\o[>JVyv4@}Y09)PVOrNdW}Y+ҭ k3#^Wv+`#,$e6=մLz87Xz `Y'H}YrVӽ['~k-њB)wNjvݡMshmƠ kyrr}`;YһY^on-"'>?SL>zX 29.r9C)tC)k |nC'ȉ˙-`>I~m|4>b`tiQx2.w7yXzϮxҿ3)@4-" ""Rx8H-" "":oqXz]xq[DaKn E"c oqQ|G(E)08F oq[-"Nx?Z-]R릳VxKUxW cTv'؎MDiƻ[:^s洖,Y YώwQqN5@Uz/٭iqu#~4X =鴃n@-"Qt[DSxCݍ"nwEw#8C}[Dѩ{}HGDA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DAx "qSS&:8(E\T7\1(ޟ_OFqp{Ļ9r4m">zVQQ+Z)n<}[k+]XZ `KXkv vkqдr&3xw/Yj -TR4s[I)Í~d_0(녪%n̚[sѷrCDp+WI!XvuP0۲2𜝃'])$Euǰ~WB;`,K>F`^cƦ+^O'hl&iI o7<`h{O*Iu-sxU,7ᚉn$&_~wK:.6`S! pZk}j4|~|ZXl!I-ub,J;1ڗc ؏(%n c 5l}ƀ`MDet+ؽm0HOz][UICR ;AlۯTy $,ztCPRx{0S}5!غz߈4l]-')=^kԴ"ʚ`l^4LR!X^mxXãPXx E<21ߠX: ~`o T`jVV[z;O](,o|?t¨ª*w7RTESx+g<@^RZ iL:5+7!-`hސ$ؿ$ЭO4[] 'À!I@$h]Xܡ{/7[gcO" WgL@) m P~`q\k, XLxW.rZ=?̓.ˆz\2kϜ  }Cnx0A?k `h/^14u4M8̛߯Hէ <ߒV`\Ͼ}MV+q9PFUroW7miہMgY e:km/mFmGoc}<^:' 1iD:Y^MCT~-mۛ4m"AiuSU'~kD:4t8N-lŷ8K-[\NN-nRxK)E -}HGٝvI#o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDq[DA o)EDwg t=Pm!9[?1"']X;خ?~^? o  G`=h%Y>ص| Շi WC5ͳZt_7ڰ_km*%K"F=pwciv!Z,bע'"' 2gbNlo{CS"[ {L?b5֫ 0=~X0)I XȉAE7nZS:Lm~o0/Ś螖^?}9$IM?F/"1vѡq5/5pu/n!^Ճ@-]W\՞Fл<=>;c?1iJLV4"_oMy1vz*^SJIS3 eFĠע7Cyw{(Gv1xgtLOnLFF"'MЇtJ^dغ<.9c I3I}{Z2(EN y.P!=܏5T-:l1qr_cŻ"v7Ku8Ccc"/R\ Sx.) `+-iOP{1U Cx!O9A(]e S;\Y'6Tx OG"rPx?$ /v= t드c-ˁԵo^5<&xS{/"r"Px7?p{fK<?1;aʟ""7oqhoWt6Ӯi-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8ؘ>X s|n.(}ghPXȘWoh௏TxLJۊ3oYT/]c:9VOT)ص_\|[%$WCl%jcg`ڷo T(eUuuOD U]`9 c|F6Ny*"+.}NXKa\&M^P̃OO-}~ K/(a{<opx SgfX,Eoq.8x,E{aǪv)ݷ+w}1H͸B hx~<Ί>i z;5w <Wߨ.lHb>p0E @޸O['jHkLrν?Û x,ʄ!Op`̔J}g/,b錞t}y DzÒQ68ao gz`1\|kN0 /MRgS*|ʫ¾x7NA#Fd_.>Hc~6@U,kҁƻHJ( U@`ٓ] ;( CS2n>~O^AgpFdϜOah-RYxF!|Hab"McV.`;Mu@O3|E%j-.gk},djzӾM[m%! !< [Ndr3%3Pl*b"w #Eñf;wgǻIg?RM&:qO8MKc!-Hyk7kFFxq rKVlg</ՊCSOYxk["b#,*x w;0rpٗŻ6i Y}]`,$VxL. 5bN t#U> ߛ^NLЯoM@=m 7S ^j @uy+zX־c~|JAGzz/q'T?Y´ƛU~b=}&@^5.xތ`1g.k^xT`Gנ>M0$mT EV;KͪEUEo~n; 5m0q؅o'q Oe<MyM?噹%kn|Z@kҮۿ<%}}%\ F~ͬmch'gmfntOmcS<$7Xm uut)}{-nYݴ+:)s?p/U? YA'ʻ6a"Lj\=7?YNs2Zi+ߐ˟dj)kv2d&, \ =ͺ[NDQ6xO_HTwjnژk888kq%}\=Ojwϵ;gX'F.w w *Oj+M$||[ S>]^]t!Mw-E.x'tFMHg՟Gƿ5-[Hdg-"m\6.cy L=M#oI o7ǻ[D٣S{N0VxHR+!M8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-" ""Rx8H-"X` xqQs՟QM"Si$xqQs՟QM"TY=Hjk8hhŨ?c]=1xpޓ:=Zn3Z1Occіmx3R1x&2:=3Ϙ7w譎hx\x GOW]gl›PiM輩rS\w'](ED#Ԁ@ 1IENDB`mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/landing/state.png000066400000000000000000000363261433273745700260550ustar00rootroot00000000000000PNG  IHDRx2et^GkA~ypDj"EXx஺h]m~xڮwtoD^eM>}zQz׎avI{kjf;@?0$xEg'6m;L:GBӉ6 Ld|_:nWOe: pB8#D;|]z3YjNMAӂn.1hMzP&t Z^ 2Bָw!hG3ڗ2'l ?ϟm$jVAs-/*D ky[k|],;9kr hw^۵-C;fO-YP.}uVa$"ke|v+@?hD&!2,}ɠ4`'g;PBŗ@>8A펴f릯0̵ ~8j6tv l~$^Y+6owiV,z +WƬ1zCű-1 n^Q{٪>/k׿FpҧgY:=a2>^|bcp-ۼ_@X_P;:PV*Xƨ8W/zu:}y`C|i~"H ?*NM45!$xBgB3 ^!ЙBLW!t&+:BI !dt# );8B@ U!ЙBLW!t&+:BI !$xBgB3 ^!Йܹr̪Ζm2O. HkFtYwp YQLE&XBO7 ~yP^I6䏀?k8`.3* Ed+0$Nw $xҵd ŰR п 7}N.S&h%Z@t',@jA[G&8l[%rwij`qd_T+@45&#V=d]q;{oNNMuOd! #4d*ܔZ\kBpg6mBml?ִyl"e9Pnl=wPQ{o` eXpl; \]D@) `_{Ӈ -o֋Q lw >: +^FsyE>jReRU4535%Ι+ ZX }ⲶhWȼ'΍ wO6^-wYzk;YQdN(7rM7@~ݖ'vmN7RۦǤnI&u)BOƅ,ɗJ@XcѰks֪>\bWdS)OZӕl< w Wry=w'a&+gq9ƽ\ g$[&:/yp] H;~ koCŒ ,^~?z&W'z55#bR ];`e6e~㽰*Z`k Ou'9C[8s$Pip }? 6hW*5֣umA_rq-P,$ݴTŭzoZ:qi -h8 /k+=([n<7Iz+ |êgC(ݴ߅K7PnU7-;sU-/x>Q 2s { ha0ڒ=a[},?Y^+޶[yԂÞqeo- KXH2 ^9jJ'SekC- ɟ``*c^TZo^:>YT#iUO^0ݙlk[ u*S!WVld?Y@ tM|DUoh[ n{bX4hK*@v ^\SI@EEU`@>!kx&_hL7``t*d4{ē\Xr(J4uRR V&C iW kԞl[xt6W$_W hikFUU`-+$xVa<{<;ث/:,DGm0G/8:g \b:}7 Z#jdaTz̪uJ jHl \gwvSl9D_M/i ,y RPkն@6Ⱥ^,|HΘ˄d f2A7pjCfCf{˶!XD@ZZ*_0'3VQi<}e͈!l]z*o^N%Off8nYsWbL,+z7[&v0Z ̅+v ͐9o`ѓ‡9;{qGs}CLռ>l6`cFǟν\۷*W:fɔ~' +Gw a&^С_T-YmӠC[ls oE!RPGv=СvAB7m7eߓѯ гš0w kr˰7 Q@jAMX_2YO,#T۷#lɛ@d^}}_ZR?!g?vr`>Z*ZQi~=ݼ!#H+CəE j" N.o-~9ca,dաڠZ Nw R6bbF4?^Nc>hoj= 8XmCvtw.U'L&E`&M Ikj`ɛKr~ng׏z-=ݽbMsjXH^wet)n 11f\A4H9]Ia*zt2R+M VޏNfF%|E`Y-kT)\ە*ΰfEz))1bUx+WP$]fSуd2E&`$[Yog>p^)9X]jwW E4Tzob Rj^Cz.c˺I*AJ,K/muCJoW~Yn:XOJ7HIYZ}>>T'0C .`32~CБ-,RUע¤[eb//PUT$xkn٪Z]wUR{#,pu7Q,+L-@Оq;M4}_{ףmrÇ`s/dޠ"[fhAM,s[M$N,&ǾM۵FܵPjkuppmx[5˱f;xx6>! AEl]MwI|m~:_kz pɶW6Ɏ:m 驪g-mO:|,gMʣ>'cӴ5p'0$|p!|/˯q]-ͺ-&x&\ӗ8pC1j@$$x˂F韯V/ґ0 X_ ,ʌiA0b@K'|3Jpdd2N/'?0_,Lmٶ Szy }'ެ[p HׯU(!xcW }7#mt~K6O6YBFOQSm GX:1t/4j>g[t娹͆$ AC n1Ĩb+cP@ZU*ׇS@Cג$90ӕ/;>w{+s }ˤ @72{Jt>|iH4ОofDv,إg8o7_{8$0=ɋnL }L7HH-ke,.S`Ӄ~sa. -i /{gc}rCE.M ?s\D }N78H'\*Knv?1*_B7 ü,SYO6 }b, _ FѨWv-͟v˵F>Z${g}=2Uy'[< Z] }ΐgP%yoб51~ Ekݿy iW[u xo,xGa;^Ӱj[ o: ް4K< S֯a-./8.5Ӈ==Qg<ܺ,@k28@VPAkF.a7!j)_o0QezZ#`,תNpn1w웴6ͅ*-S[ P @5k˱v!GxF4 JH7xFR+3 m=9zu9pcMWw/=ɼ,upzOe׍ܼ,vՇ֪\Owa) prZ0j?ͦI5lۣzk߬,XйޯYՆ` m2<;Xd04}=dMvJ=bsJ[C_{ݳ[ `T*\~xb,ӿxj QԲ^<8AJϕYG.Ǖ?Time7jZ+TPˌa7fX,-+խU@' ^9q"hVδ߮*-z~pbދtD>)MnX$yYg}gߨ ]Rys^K.x(^l~67 {avqfu2n-:y ~w6^8~"a'YZH6|u >L׬P>~Y!i lY--UoS`B=dUo9\t|,w=:\hcSyv@%M \1P9'g@Wo,!`I7p~ >2o=*{ `K $xTlc(_wiIU %oDR%M I7XL߅ PA-ޞ/I7Im8z:sk+Z$ި `(ޞIzB-Vb̬<j׾;)s⍪@O5U~O՜PmA"]SEWfUMQSBD)O^UxK^dTF]Q:L-yU@5@Bz5dLdrǑ|fǏ Q~ t&|FlɓQTSF57C}@wq+W\}Lv%-vAk.H𺠔M8WI^Q ,'{iWqC~BoimЍn`_S|Ş:Շ,d^}JGW rp-Fɔg=XܕՍ] $哥3cܕՋ.$vcA$N$xH: l$>< $22$LLw?>ǹ+[GIӵ}u)Q1nO1g;)2$nn|q7od\.kNU(Ɲk!)$O~nOT#K|3q0:6V^.n0%%CWdm]kg[FS;צݜt U{ ‘t5ZS4xm-+.|X75+n>&o`or\HLmZB헵=.x8ڪ` >M\&5/`l|ܫZnVUU%vL Sw;qza]z{;#.-'K2n]}~TIH$ {Ǐז4wk?pX >7a:b m[d]W3ìһ"?xσ?3 .It;l(`nC{ /|6C`MW7Khlp͝|hmw-w߅)O!ᗞnxCЇ*yԼS)@y~kn =6DVg6^ɛ4>.=H^;l坾s 8 1 ^_Vvk;O\-$0ØLiMq b$v? NDfTp6R" @ؑLwlةvguʞ۶f_fه 9) _Vm& #4dphg kܝm~rR'{wTi"j)غU~>)P'ifTnKjS{#pL*P~0Ҳ, .D1a8|"xjpuInCqi6ީ{zktmf.3fSq "@ Mmordx<\]UBo^R6 ?Ln.%6ְ@Om>4ʓvt`k؟䥸ip&hi~Ʋ) 8zE[UOфjT_=&}8>gS;f/;M>ê<.m,`f.?nz y>ڿ [,^3 sFkT/oXK+^o) YV8()Ϸ]0:@&ꄶt~ "y2<Z^qmF۵jlj-QgCuh1\kK"Nk*1z-h-=yk=,c$AXdu5IvwxO WP `v1ځlHf G\v8Qd}9[ k'Cjvlʼ/*X6yy!yzq=~0}ܚ֒ @-*â $o2*y竵' 1fhӁ6jӽD@Z 0 {ug :Xʖmo;!tcfb| X_l/ޝ (``={f$MavDu=N 7)F(šg!E04s6dLӽ̅+PHss͂Uo`,zܙ4x:&ỳg2 {p<ݻ1 V9yeP;nr boUkET:7i- lb{2lNWYԃviвGLu]h X ܒȤWiС-o{:onaGj|<޳]k&Vv~++@=[uSՄT}q;# t20v6^- xu,:jS¢° gW;k(棆$/Z UVٳAz@4`W2]}lj {<;fQh7O0۵W.;6 :o rܟL rS}x{ʻw@>dcucĴ $wa:Y^[khK-$i juw9*T\6>hNIClvҬྕ_e,zCo-|H>#!tY0wݟhSޡ"Rz72ViڌQo,pVv$9aO wΟPkd?n@󻯴 cŘ&shT^t:ǻFlClM7rOF֏(XD񠵡d)@Zw+w:sy WwWp{]{ ^xK=\Y)cu:!+-a}70Ny ^謣 mwss =YА l & .zqן e!>g2_{pMnUs5`WCRe:os70Ny}T6*/Lb]9߅ ^PAuZ$^\$o뻁q{eT=Nm]ГjK[!ig(/Azr;VC9۱*XG4+ ?BϝjWDHjz6)HWIbGrWWz1(I ?0:KWC䮮$x31)DГt5IIx3Kzb?>dHG6QWŨЁBjHngٟR%IjB/D׹845$چ5yLy &JYC\0${ lj, yz)rVdVaB ޞh׈kV?iM:%XԒ6LMScפw(Uh~&5^*%jmX75`EC5:!]Diqt' ^ Lxٻ.q]"q*ZJc1݀#Y)Kc9#떚?W 8 ^o%+|Kr7Iiq>$$x ^ I7@i-qC7$x 3I7IWj PMT#B@!+ "H Iw@&j2L7XQjN7Ui$x6f )\f'lۉRpD B+^d@78i+^Qjf` +ڄ\U L^ 4Q. '+,T*`!+5"o1K. ޲BMPU(\3t=2 ޲`0[E >eŷ:HUi :ePnu-@5҅,IQo٫Jڑ Ve[:;HH/ ޲MM|7 ^jVe%[T}B/XcWz2- r+k-Gl A=xU[H7v Mr2@\2c\WWͤ%CѶ~=ץsJ%xU eo&cׯv4:о^9Q>x5 [6Hsv鋁 __uva _.~% .X8bm`ೝ _-QS{Ͳ` &@|0Z]﮷x)p5t%u ^a&`2}To7}<ovT +WI>޲y$xEQ*  d]1'j{D tGu% ^REjepP l {VкuiVI9u<!M+qnmZT8~aFFLW찙u-`b3.'/x#W*eZ%@** Zq+s?^~b[u&`X =̻5EX{7_:b)@9́ ٳO^I#ՠAvf­ڂ.@J/ߒ f>_~KWa`k`[tOǬ_09o-柿jdeZO>z";Яm3dhT9t쭨`qJcVIZVKaK]8J1/MNnNT6Cq9h>zra~*|: m>;A<}fхʢ8M*PKD fT '[H ibIaK ִ,~;n,㻉"D&Yulx.}w޹Ie+W@# -/ÖT Bx6_Thk? lH1P4&}!;{߄߄t|_ T2Wro-ki|[ O]PYͦ޸Zdkt_iQ$x,iAY\8l_Z7O`M8-8I $ p Φ>l M#zwX@bMڐcV}2#(Mv#ڗ*E(2 ܷf/|M?`6 | )d_\۳Ξ=N :~@-̀)1cE3hp452K='A 2 Ֆ @&дu1@5Shל6o'^5.-ς#NE[+y Mǻ`$+$WCǟ-m=0w?*\}‡;}.X Ū i \F<DM~/ DkdYOQw* 0ð nl&ث-8 E$xEfC]@S<!v8M4i @xK"ȴv`e{p-v&K]J'XzUжx%0BK"r 9p+l_pvn>J1x`0"DoS>H"I i l2f!{/ab]Nv-k[\b2a( _\]I8R+2nLzfӯzL] En8j[{}MM_?ji {}@t*? l"~l< v>V#0e 8{5#y+f)>| L(U酥m<t"X3%Q/%F' Y8I6oŁҴ]XZt@"IS.'P\sayF7JwbV] )˻n`Tg.z{)ȏBLW!t&+:BI !$xBgB3 ^!ЙBLW!t&+:B 9B3 !$xBgB3 ^!ЙBLW!t&+:BI !$xBgB3 ^!ЙBLW!t&+:BI !$xBgBm[r#IENDB`mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/mermaidCLI.md000066400000000000000000000002161433273745700250700ustar00rootroot00000000000000# mermaid CLI mermaid CLI has been moved to [mermaid-cli](https://github.com/mermaid-js/mermaid-cli). Please read its documentation instead. mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/mindmap.md000066400000000000000000000121151433273745700245500ustar00rootroot00000000000000# Mindmap > Mindmap: This is an experimental diagram for now. The syntax and properties can change in future releases. The syntax is stable except for the icon integration which is the experimental part. "A mind map is a diagram used to visually organize information into a hierarchy, showing relationships among pieces of the whole. It is often created around a single concept, drawn as an image in the center of a blank page, to which associated representations of ideas such as images, words and parts of words are added. Major ideas are connected directly to the central concept, and other ideas branch out from those major ideas." Wikipedia ### An example of a mindmap. ```mermaid mindmap root((mindmap)) Origins Long history ::icon(fa fa-book) Popularisation British popular psychology author Tony Buzan Research On effectivness
and eatures On Automatic creation Uses Creative techniques Strategic planning Argument mapping Tools Pen and paper Mermaid ``` ## Syntax The syntax for creating Mindmaps is simple and relies on indentation for setting the levels in the hierarchy. In the following example you can see how there are 3 different levels of indentation. The leftmost indentation is the root of the mindmap. There can only be one root and if you by misstake add two of them on the same level there will be a syntax error. Rows with larger indentation will be connected as children to the previous row with lower indentation. Based on that you can see in the example how the nodes B and C both are children to node A whci in turn is a child of the node Root. ``` mindmap Root A B C ``` In the diagram below you can see the example rendered as a mindmap. ```mermaid mindmap Root A B C ``` In this way we can use a text outline to generate a hierarchical mindmap. ## Different shapes Mermaids mindmaps can show node using different shapes. When specifying a shape for a node the syntax for the is similar to flowchart nodes, with an id followed by the shape definition and with the text within the shape delimiters. Where possible we try/will try to keep the same shapes as for flowcharts even though they are not all supported from the start. Mindmap can show the following shapes: ### Square ```mermaid-example mindmap id[I am a square] ``` ### Rounded square ```mermaid-example mindmap id(I am a rounded square) ``` ### Circle ```mermaid-example mindmap id((I am a circle)) ``` ### Bang ```mermaid-example mindmap id))I am a bang(( ``` ### Cloud ```mermaid-example mindmap id)I am a cloud( ``` ### Default ```mermaid-example mindmap I am the default shape ``` More shapes will be added, beginning with the shapes available in flowcharts. # Icons and classes ## icons As with flowcharts you can add icons to your nodes but with an updated syntax. The styling for the font based icons are added during the integration so that they are available for the web page. _This is not something a diagram author can do but has to be done with the site administrator or the integrator_. Once the icon fonts are in place you add them to the mind map nodes using the `::icon()` syntax. You place the classes for the icon within the parenthesis like in the following example where icons for material design and fontawesome 4 are displayed. The intention is that this approach should be used for all diagrams supporting icons. **Experimental feature:** This wider scope is also the reason Mindmaps are experimental as this syntax and approach could change. ```mermaid-example mindmap Root A ::icon(fa fa-book) B(B) ::icon(mdi mdi-skull-outline) ``` ## Classes Again the syntax for adding classes is similar to flowcharts. You can add classes using a triple colon following a number of css classes separated by space. In the following example one of the nodes has two custom classes attached urgent turning the background red and the text white and large increasing the font size: ```mermaid-example mindmap Root A[A] :::urgent large B(B) C ``` _These classes needs top be supplied by the site administrator._ ## Unclear indentation The actual indentation does not really matter only compared with the previous rows. If we take the previous example and disrupt it a little we can se how the calculations are performed. Let us start with placing C with a smaller indentation than `B`but larger then `A`. ``` mindmap Root A B C ``` This outline is unclear as `B` clearly is a child of `A` but when we move on to `C` the clarity is lost. `C` is not a child of `B` with a higher indentation nor does it have the same indentation as `B`. The only thing that is clear is that the first node with smaller indentation, indicating a parent, is A. Mermaid will rely on this known truth and compensates for the unclear indentation and selects `A` as a parent of `C` leading till the same diagram with `B` and `C` as siblings. ```mermaid mindmap Root A B C ``` mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/n00b-advanced.md000066400000000000000000000005741433273745700254330ustar00rootroot00000000000000# Advanced n00b mermaid (Coming soon..) ## splitting mermaid code from html A more condensed html code can be achieved by embedding the mermaid code in its own .js file, which is referenced like so: ``` stuff stuff ``` The actual mermaid file could for example look like this: ``` mermaid content... ``` --- ## mermaid configuration options ... mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/n00b-gettingStarted.md000066400000000000000000000165341433273745700266610ustar00rootroot00000000000000# A Mermaid User-Guide for Beginners Mermaid is composed of three parts: Deployment, Syntax and Configuration. This section talks about the different ways to deploy Mermaid. Learning the [Syntax](./n00b-syntaxReference.md) would be of great help to the beginner. > Generally the live editor is enough for most general uses of mermaid, and is a good place to start learning. **Absolute beginners are advised to view the Video [Tutorials](./Tutorials.md) on the Live Editor, to gain a better understanding of mermaid.** ## Four ways of using mermaid: 1. Using the Mermaid Live Editor at [mermaid.live](https://mermaid.live). 2. Using [mermaid plugins](./integrations.md) with programs you are familiar with. 3. Calling the Mermaid JavaScript API. 4. Deploying Mermaid as a dependency. **Note: It is our recommendation that you review all approaches, and choose the one that is best for your project.** > More in depth information can be found at [Usage](./usage.md). ## 1. Using the Live Editor Available at [mermaid.live](https://mermaid.live) ![EditingProcess](./img/Editing-process.png) In the `Code` section one can write or edit raw mermaid code, and instantly `Preview` the rendered result on the panel beside it. The `Configuration` Section is for changing the appearance and behavior of mermaid diagrams. An easy introduction to mermaid configuration is found in the [Advanced usage](./n00b-advanced.md) section. A complete configuration reference cataloging the default values can be found on the [mermaidAPI](Setup.md) page. ![Code,Config and Preview](./img/Code-Preview-Config.png) ### Editing History Your code will be autosaved every minute into the Timeline tab of History which shows the most recent 30 items. You can manually save code by clicking the Save icon in the History section. It can also be accessed in the Saved tab. This is stored in the browser storage only. ### Saving a Diagram: You may choose any of the methods below, to save it **We recommend that you save your diagram code on top of any method you choose, in order to make edits and modifications further down the line.** ![Flowchart](./img/Live-Editor-Choices.png) ### Editing your diagrams Editing is as easy as pasting your **Diagram code**, into the `code` section of the `Live Editor`. ### Loading from Gists The Gist you create should have a code.mmd file and optionally a config.json. [Example](https://gist.github.com/sidharthv96/6268a23e673a533dcb198f241fd7012a) To load a gist into the Editor, you can use https://mermaid.live/edit?gist=https://gist.github.com/sidharthv96/6268a23e673a533dcb198f241fd7012a and to View, https://mermaid.live/view?gist=https://gist.github.com/sidharthv96/6268a23e673a533dcb198f241fd7012a ## 2. Using Mermaid Plugins: You can generate mermaid diagrams from within popular applications using plug-ins. It can be done in the same way, you would use the Live Editor. Here's a list of [Mermaid Plugins](./integrations.md). **This is covered in greater detail in the [Usage section](usage.md)** ## 3. Calling the JavaScript API This method can be used with any common web server like Apache, IIS, nginx, node express. You will also need a text editing tool like Notepad++ to generate a .html file. It is then deployed by a web browser (such as Firefox, Chrome, Safari, but not Internet Explorer). The API works by pulling rendering instructions from the source `mermaid.js` in order to render diagrams on the page. ### Requirements for the Mermaid API. When writing the .html file, we give two instructions inside the html code to the web browser: a. The mermaid code for the diagram we want to create. b. The importing of mermaid library through the `mermaid.esm.js` or `mermaid.esm.min.mjs` and the `mermaid.initialize()` call, which dictates the appearance of diagrams and also starts the rendering process . **a. The embedded mermaid diagram definition inside a `
`:**

```html

  Here is a mermaid diagram:
  
        graph TD 
        A[Client] --> B[Load Balancer] 
        B --> C[Server01] 
        B --> D[Server02]
  
``` **Notes**: Every Mermaid chart/graph/diagram definition, should have separate `
` tags.

**b. The import of mermaid and the `mermaid.initialize()` call.**

`mermaid.initialize()` call takes all the definitions contained in all the `
` tags that it finds in the html body and renders them into diagrams. Example:

```html

  

```

**Notes**:
Rendering in Mermaid is initialized by `mermaid.initialize()` call. You can place `mermaid.initialize()` inside `mermaid.min.js` for brevity. However, doing the opposite lets you control when it starts looking for `
`tags inside the web page with `mermaid.initialize()`. This is useful when you think that not all `
` tags may have loaded on the execution of `mermaid.min.js` file. `startOnLoad` is one of the parameters that can be defined by `mermaid.initialize()` | Parameter | Description | Type | Values | | ----------- | --------------------------------- | ------- | ----------- | | startOnLoad | Toggle for Rendering upon loading | Boolean | true, false | ### Working Examples **Here is a full working example of the mermaidAPI being called through the CDN:** ```html Here is one mermaid diagram:
            graph TD 
            A[Client] --> B[Load Balancer] 
            B --> C[Server1] 
            B --> D[Server2]
    
And here is another:
            graph TD 
            A[Client] -->|tcp_123| B
            B(Load Balancer) 
            B -->|tcp_456| C[Server1] 
            B -->|tcp_456| D[Server2]
    
``` **Another Option:** In this example mermaid.js is referenced in `src` as a separate JavaScript file, in an example Path. ```html
            graph LR 
            A --- B 
            B-->C[fa:fa-ban forbidden] 
            B-->D(fa:fa-spinner);
    
            graph TD 
            A[Client] --> B[Load Balancer] 
            B --> C[Server1] 
            B --> D[Server2]
    
``` --- ## 4. Adding Mermaid as a dependency. 1. install node v16, which would have npm 2. download yarn using npm by entering the command below: npm install -g yarn 3. After yarn installs, enter the following command: yarn add mermaid 4. To add Mermaid as a Dev Dependency yarn add --dev mermaid **Comments from Knut Sveidqvist, creator of mermaid:** - In early versions of mermaid, the ` ``` It can also be be turned on via the diagram code as in the diagram: ```mermaid-example sequenceDiagram autonumber Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ## Actor Menus Actors can have popup-menus containing individualized links to external pages. For example, if an actor represented a web service, useful links might include a link to the service health dashboard, repo containing the code for the service, or a wiki page describing the service. This can be configured by adding one or more link lines with the format: ``` link : @ ``` ```mmd sequenceDiagram participant Alice participant John link Alice: Dashboard @ https://dashboard.contoso.com/alice link Alice: Wiki @ https://wiki.contoso.com/alice link John: Dashboard @ https://dashboard.contoso.com/john link John: Wiki @ https://wiki.contoso.com/john Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` #### Advanced Menu Syntax There is an advanced syntax that relies on JSON formatting. If you are comfortable with JSON format, then this exists as well. This can be configured by adding the links lines with the format: ``` links : ``` An example is below: ```mermaid-example sequenceDiagram participant Alice participant John links Alice: {"Dashboard": "https://dashboard.contoso.com/alice", "Wiki": "https://wiki.contoso.com/alice"} links John: {"Dashboard": "https://dashboard.contoso.com/john", "Wiki": "https://wiki.contoso.com/john"} Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` ## Styling Styling of a sequence diagram is done by defining a number of css classes. During rendering these classes are extracted from the file located at src/themes/sequence.scss ### Classes used | Class | Description | | ------------ | ----------------------------------------------------------- | | actor | Style for the actor box at the top of the diagram. | | text.actor | Styles for text in the actor box at the top of the diagram. | | actor-line | The vertical line for an actor. | | messageLine0 | Styles for the solid message line. | | messageLine1 | Styles for the dotted message line. | | messageText | Defines styles for the text on the message arrows. | | labelBox | Defines styles label to left in a loop. | | labelText | Styles for the text in label for loops. | | loopText | Styles for the text in the loop box. | | loopLine | Defines styles for the lines in the loop box. | | note | Styles for the note box. | | noteText | Styles for the text on in the note boxes. | ### Sample stylesheet ```css body { background: white; } .actor { stroke: #ccccff; fill: #ececff; } text.actor { fill: black; stroke: none; font-family: Helvetica; } .actor-line { stroke: grey; } .messageLine0 { stroke-width: 1.5; stroke-dasharray: '2 2'; marker-end: 'url(#arrowhead)'; stroke: black; } .messageLine1 { stroke-width: 1.5; stroke-dasharray: '2 2'; stroke: black; } #arrowhead { fill: black; } .messageText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; font-size: 14px; } .labelBox { stroke: #ccccff; fill: #ececff; } .labelText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; } .loopText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; } .loopLine { stroke-width: 2; stroke-dasharray: '2 2'; marker-end: 'url(#arrowhead)'; stroke: #ccccff; } .note { stroke: #decc93; fill: #fff5ad; } .noteText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; font-size: 14px; } ``` ## Configuration Is it possible to adjust the margins for rendering the sequence diagram. This is done by defining `mermaid.sequenceConfig` or by the CLI to use a json file with the configuration. How to use the CLI is described in the [mermaidCLI](mermaidCLI) page. `mermaid.sequenceConfig` can be set to a JSON string with config parameters or the corresponding object. ```javascript mermaid.sequenceConfig = { diagramMarginX: 50, diagramMarginY: 10, boxTextMargin: 5, noteMargin: 10, messageMargin: 35, mirrorActors: true, }; ``` ### Possible configuration parameters: | Parameter | Description | Default value | | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------ | | mirrorActors | Turns on/off the rendering of actors below the diagram as well as above it | false | | bottomMarginAdj | Adjusts how far down the graph ended. Wide borders styles with css could generate unwanted clipping which is why this config param exists. | 1 | | actorFontSize | Sets the font size for the actor's description | 14 | | actorFontFamily | Sets the font family for the actor's description | "Open Sans", sans-serif | | actorFontWeight | Sets the font weight for the actor's description | "Open Sans", sans-serif | | noteFontSize | Sets the font size for actor-attached notes | 14 | | noteFontFamily | Sets the font family for actor-attached notes | "trebuchet ms", verdana, arial | | noteFontWeight | Sets the font weight for actor-attached notes | "trebuchet ms", verdana, arial | | noteAlign | Sets the text alignment for text in actor-attached notes | center | | messageFontSize | Sets the font size for actor<->actor messages | 16 | | messageFontFamily | Sets the font family for actor<->actor messages | "trebuchet ms", verdana, arial | | messageFontWeight | Sets the font weight for actor<->actor messages | "trebuchet ms", verdana, arial | mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/stateDiagram.md000066400000000000000000000154171433273745700255400ustar00rootroot00000000000000# State diagrams > "A state diagram is a type of diagram used in computer science and related fields to describe the behavior of systems. State diagrams require that the system described is composed of a finite number of states; sometimes, this is indeed the case, while at other times this is a reasonable abstraction." Wikipedia Mermaid can render state diagrams. The syntax tries to be compliant with the syntax used in plantUml as this will make it easier for users to share diagrams between mermaid and plantUml. ```mermaid-example stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] ``` Older renderer: ```mermaid-example stateDiagram [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] ``` In state diagrams systems are described in terms of its states and how the systems state can change to another state via a transitions. The example diagram above shows three states **Still**, **Moving** and **Crash**. You start in the state of Still. From Still you can change the state to Moving. In Moving you can change the state either back to Still or to Crash. There is no transition from Still to Crash. ## States A state can be declared in multiple ways. The simplest way is to define a state id as a description. ```mermaid-example stateDiagram-v2 s1 ``` Another way is by using the state keyword with a description as per below: ```mermaid-example stateDiagram-v2 state "This is a state description" as s2 ``` Another way to define a state with a description is to define the state id followed by a colon and the description: ```mermaid-example stateDiagram-v2 s2 : This is a state description ``` ## Transitions Transitions are path/edges when one state passes into another. This is represented using text arrow, "\-\-\>". When you define a transition between two states and the states are not already defined the undefined states are defined with the id from the transition. You can later add descriptions to states defined this way. ```mermaid-example stateDiagram-v2 s1 --> s2 ``` It is possible to add text to a transition. To describe what it represents. ```mermaid-example stateDiagram-v2 s1 --> s2: A transition ``` ## Start and End There are two special states indicating the start and stop of the diagram. These are written with the [\*] syntax and the direction of the transition to it defines it either as a start or a stop state. ```mermaid-example stateDiagram-v2 [*] --> s1 s1 --> [*] ``` ## Composite states In a real world use of state diagrams you often end up with diagrams that are multi-dimensional as one state can have several internal states. These are called composite states in this terminology. In order to define a composite state you need to use the state keyword followed by an id and the body of the composite state between \{\}. See the example below: ```mermaid-example stateDiagram-v2 [*] --> First state First { [*] --> second second --> [*] } ``` You can do this in several layers: ```mermaid-example stateDiagram-v2 [*] --> First state First { [*] --> Second state Second { [*] --> second second --> Third state Third { [*] --> third third --> [*] } } } ``` You can also define transitions also between composite states: ```mermaid-example stateDiagram-v2 [*] --> First First --> Second First --> Third state First { [*] --> fir fir --> [*] } state Second { [*] --> sec sec --> [*] } state Third { [*] --> thi thi --> [*] } ``` _You can not define transitions between internal states belonging to different composite states_ ## Choice Sometimes you need to model a choice between two or more paths, you can do so using <<choice>>. ```mermaid-example stateDiagram-v2 state if_state <> [*] --> IsPositive IsPositive --> if_state if_state --> False: if n < 0 if_state --> True : if n >= 0 ``` ## Forks It is possible to specify a fork in the diagram using <<fork>> <<join>>. ```mermaid-example stateDiagram-v2 state fork_state <> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] ``` ## Notes Sometimes nothing says it better then a Post-it note. That is also the case in state diagrams. Here you can choose to put the note to the _right of_ or to the _left of_ a node. ```mermaid-example stateDiagram-v2 State1: The state with a note note right of State1 Important information! You can write notes. end note State1 --> State2 note left of State2 : This is the note to the left. ``` ## Concurrency As in plantUml you can specify concurrency using the -- symbol. ```mermaid-example stateDiagram-v2 [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvScrollLockPressed ScrollLockOn --> ScrollLockOff : EvScrollLockPressed } ``` ## Setting the direction of the diagram With state diagrams you can use the direction statement to set the direction which the diagram will render like in this example. ```mermaid-example stateDiagram direction LR [*] --> A A --> B B --> C state B { direction LR a --> b } B --> D ``` ## Comments Comments can be entered within a state diagram chart, which will be ignored by the parser. Comments need to be on their own line, and must be prefaced with `%%` (double percent signs). Any text after the start of the comment to the next newline will be treated as a comment, including any diagram syntax ```mmd stateDiagram-v2 [*] --> Still Still --> [*] %% this is a comment Still --> Moving Moving --> Still %% another comment Moving --> Crash Crash --> [*] ``` ## Styling Styling of the a state diagram is done by defining a number of css classes. During rendering these classes are extracted from the file located at src/themes/state.scss ## Spaces in state names Spaces can be added to a state by defining it at the top and referencing the acronym later. ```mermaid-example stateDiagram-v2 Yswsii: Your state with spaces in it [*] --> Yswsii ``` mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/theme.css000066400000000000000000000354511433273745700244250ustar00rootroot00000000000000@import url('https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600'); * { -webkit-font-smoothing: antialiased; -webkit-overflow-scrolling: touch; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: none; -webkit-touch-callout: none; box-sizing: border-box; } body:not(.ready) { overflow: hidden; } body:not(.ready) .app-nav, body:not(.ready) > nav, body:not(.ready) [data-cloak] { display: none; } div#app { font-size: 30px; font-weight: lighter; margin: 40vh auto; text-align: center; } div#app:empty:before { content: 'Loading...'; } .emoji { height: 1.2rem; vertical-align: middle; } .progress { background-color: var(--theme-color, #42b983); height: 2px; left: 0; position: fixed; right: 0; top: 0; transition: width 0.2s, opacity 0.4s; width: 0; z-index: 999999; } .search .search-keyword, .search a:hover { color: var(--theme-color, #42b983); } .search .search-keyword { font-style: normal; font-weight: 700; } body, html { height: 100%; } body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; color: #34495e; font-family: Source Sans Pro, Helvetica Neue, Arial, sans-serif; font-size: 15px; letter-spacing: 0; margin: 0; overflow-x: hidden; } img { max-width: 100%; } a[disabled] { cursor: not-allowed; opacity: 0.6; } kbd { border: 1px solid #ccc; border-radius: 3px; display: inline-block; font-size: 12px !important; line-height: 12px; margin-bottom: 3px; padding: 3px 5px; vertical-align: middle; } li input[type='checkbox'] { margin: 0 0.2em 0.25em 0; vertical-align: middle; } .app-nav { margin: 25px 60px 0 0; position: absolute; right: 0; text-align: right; z-index: 10; } .app-nav.no-badge { margin-right: 25px; } .app-nav p { margin: 0; } .app-nav > a { margin: 0 1rem; padding: 5px 0; } .app-nav li, .app-nav ul { display: inline-block; list-style: none; margin: 0; } .app-nav a { color: inherit; font-size: 16px; text-decoration: none; transition: color 0.3s; } .app-nav a.active, .app-nav a:hover { color: var(--theme-color, #42b983); } .app-nav a.active { border-bottom: 2px solid var(--theme-color, #42b983); } .app-nav li { display: inline-block; margin: 0 1rem; padding: 5px 0; position: relative; cursor: pointer; } .app-nav li ul { background-color: #fff; border: 1px solid; border-color: #ddd #ddd #ccc; border-radius: 4px; box-sizing: border-box; display: none; max-height: calc(100vh - 61px); overflow-y: auto; padding: 10px 0; position: absolute; right: -15px; text-align: left; top: 100%; white-space: nowrap; } .app-nav li ul li { display: block; font-size: 14px; line-height: 1rem; margin: 8px 14px; white-space: nowrap; } .app-nav li ul a { display: block; font-size: inherit; margin: 0; padding: 0; } .app-nav li ul a.active { border-bottom: 0; } .app-nav li:hover ul { display: block; } .github-corner { border-bottom: 0; position: fixed; right: 0; text-decoration: none; top: 0; z-index: 1; } .github-corner:hover .octo-arm { -webkit-animation: octocat-wave 0.56s ease-in-out; animation: octocat-wave 0.56s ease-in-out; } .github-corner svg { color: #fff; fill: var(--theme-color, #42b983); height: 80px; width: 80px; } main { display: block; position: relative; width: 100vw; height: 100%; z-index: 0; } main.hidden { display: none; } .anchor { display: inline-block; text-decoration: none; transition: all 0.3s; } .anchor span { color: #34495e; } .anchor:hover { text-decoration: underline; } .sidebar { border-right: 1px solid rgba(0, 0, 0, 0.07); overflow-y: auto; padding: 40px 0 0; position: absolute; top: 0; bottom: 0; left: 0; transition: transform 0.25s ease-out; width: 300px; z-index: 20; } .sidebar > h1 { margin: 0 auto 1rem; font-size: 1.5rem; font-weight: 300; text-align: center; } .sidebar > h1 a { color: inherit; text-decoration: none; } .sidebar > h1 .app-nav { display: block; position: static; } .sidebar .sidebar-nav { line-height: 2em; padding-bottom: 40px; } .sidebar li.collapse .app-sub-sidebar { display: none; } .sidebar ul { margin: 0 0 0 15px; padding: 0; } .sidebar li > p { font-weight: 700; margin: 0; } .sidebar ul, .sidebar ul li { list-style: none; } .sidebar ul li a { border-bottom: none; display: block; } .sidebar ul li ul { padding-left: 20px; } .sidebar::-webkit-scrollbar { width: 4px; } .sidebar::-webkit-scrollbar-thumb { background: transparent; border-radius: 4px; } .sidebar:hover::-webkit-scrollbar-thumb { background: hsla(0, 0%, 53.3%, 0.4); } .sidebar:hover::-webkit-scrollbar-track { background: hsla(0, 0%, 53.3%, 0.1); } .sidebar-toggle { background-color: transparent; background-color: hsla(0, 0%, 100%, 0.8); border: 0; outline: none; padding: 10px; position: absolute; bottom: 0; left: 0; text-align: center; transition: opacity 0.3s; width: 284px; z-index: 30; cursor: pointer; } .sidebar-toggle:hover .sidebar-toggle-button { opacity: 0.4; } .sidebar-toggle span { background-color: var(--theme-color, #42b983); display: block; margin-bottom: 4px; width: 16px; height: 2px; } body.sticky .sidebar, body.sticky .sidebar-toggle { position: fixed; } .content { padding-top: 60px; position: absolute; top: 0; right: 0; bottom: 0; left: 300px; transition: left 0.25s ease; } .markdown-section { margin: 0 auto; max-width: 80%; padding: 30px 15px 40px; position: relative; } .markdown-section > * { box-sizing: border-box; font-size: inherit; } .markdown-section > :first-child { margin-top: 0 !important; } .markdown-section hr { border: none; border-bottom: 1px solid #eee; margin: 2em 0; } .markdown-section iframe { border: 1px solid #eee; width: 1px; min-width: 100%; } .markdown-section table { border-collapse: collapse; border-spacing: 0; display: block; margin-bottom: 1rem; overflow: auto; width: 100%; } .markdown-section th { font-weight: 700; } .markdown-section td, .markdown-section th { border: 1px solid #ddd; padding: 6px 13px; } .markdown-section tr { border-top: 1px solid #ccc; } .markdown-section p.tip, .markdown-section tr:nth-child(2n) { background-color: #f8f8f8; } .markdown-section p.tip { border-bottom-right-radius: 2px; border-left: 4px solid #f66; border-top-right-radius: 2px; margin: 2em 0; padding: 12px 24px 12px 30px; position: relative; } .markdown-section p.tip:before { background-color: #f66; border-radius: 100%; color: #fff; content: '!'; font-family: Dosis, Source Sans Pro, Helvetica Neue, Arial, sans-serif; font-size: 14px; font-weight: 700; left: -12px; line-height: 20px; position: absolute; height: 20px; width: 20px; text-align: center; top: 14px; } .markdown-section p.tip code { background-color: #efefef; } .markdown-section p.tip em { color: #34495e; } .markdown-section p.warn { background: rgba(66, 185, 131, 0.1); border-radius: 2px; padding: 1rem; } .markdown-section ul.task-list > li { list-style-type: none; } body.close .sidebar { transform: translateX(-300px); } body.close .sidebar-toggle { width: auto; } body.close .content { left: 0; } @media print { .app-nav, .github-corner, .sidebar, .sidebar-toggle { display: none; } } @media screen and (max-width: 768px) { .github-corner, .sidebar, .sidebar-toggle { position: fixed; } .app-nav { margin-top: 16px; } .app-nav li ul { top: 30px; } main { height: auto; overflow-x: hidden; } .sidebar { left: -300px; transition: transform 0.25s ease-out; } .content { left: 0; max-width: 100vw; position: static; padding-top: 20px; transition: transform 0.25s ease; } .app-nav, .github-corner { transition: transform 0.25s ease-out; } .sidebar-toggle { background-color: transparent; width: auto; padding: 30px 30px 10px 10px; } body.close .sidebar { transform: translateX(300px); } body.close .sidebar-toggle { background-color: hsla(0, 0%, 100%, 0.8); transition: background-color 1s; width: 284px; padding: 10px; } body.close .content { transform: translateX(300px); } body.close .app-nav, body.close .github-corner { display: none; } .github-corner:hover .octo-arm { -webkit-animation: none; animation: none; } .github-corner .octo-arm { -webkit-animation: octocat-wave 0.56s ease-in-out; animation: octocat-wave 0.56s ease-in-out; } } @-webkit-keyframes octocat-wave { 0%, to { transform: rotate(0); } 20%, 60% { transform: rotate(-25deg); } 40%, 80% { transform: rotate(10deg); } } @keyframes octocat-wave { 0%, to { transform: rotate(0); } 20%, 60% { transform: rotate(-25deg); } 40%, 80% { transform: rotate(10deg); } } section.cover { align-items: center; background-position: 50%; background-repeat: no-repeat; background-size: cover; height: 100vh; width: 100vw; display: none; } section.cover.show { display: flex; } section.cover.has-mask .mask { background-color: #fff; opacity: 0.8; position: absolute; top: 0; height: 100%; width: 100%; } section.cover .cover-main { flex: 1; margin: -20px 16px 0; text-align: center; } section.cover a { color: inherit; } section.cover a, section.cover a:hover { text-decoration: none; } section.cover p { line-height: 1.5rem; margin: 1em 0; } section.cover h1 { color: inherit; font-size: 2.5rem; font-weight: 300; margin: 0.625rem 0 2.5rem; position: relative; text-align: center; } section.cover h1 a { display: block; } section.cover h1 small { bottom: -0.4375rem; font-size: 1rem; position: absolute; } section.cover blockquote { font-size: 1.5rem; text-align: center; } section.cover ul { line-height: 1.8; list-style-type: none; margin: 1em auto; max-width: 500px; padding: 0; } section.cover .cover-main > p:last-child a { border-radius: 2rem; border: 1px solid var(--theme-color, #42b983); box-sizing: border-box; color: var(--theme-color, #42b983); display: inline-block; font-size: 1.05rem; letter-spacing: 0.1rem; margin: 0.5rem 1rem; padding: 0.75em 2rem; text-decoration: none; transition: all 0.15s ease; } section.cover .cover-main > p:last-child a:last-child { background-color: var(--theme-color, #42b983); color: #fff; } section.cover .cover-main > p:last-child a:last-child:hover { color: inherit; opacity: 0.8; } section.cover .cover-main > p:last-child a:hover { color: inherit; } section.cover blockquote > p > a { border-bottom: 2px solid var(--theme-color, #42b983); transition: color 0.3s; } section.cover blockquote > p > a:hover { color: var(--theme-color, #42b983); } .sidebar, body { background-color: #fff; } .sidebar { color: #364149; } .sidebar li { margin: 6px 0; } .sidebar ul li a { color: #505d6b; font-size: 14px; font-weight: 400; overflow: hidden; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; } .sidebar ul li a:hover { text-decoration: underline; } .sidebar ul li ul { padding: 0; } .sidebar ul li.active > a { border-right: 2px solid; color: var(--theme-color, #42b983); font-weight: 600; } .app-sub-sidebar li:before { content: '-'; padding-right: 4px; float: left; } .markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section strong { color: #2c3e50; font-weight: 600; } .markdown-section a { color: var(--theme-color, #42b983); font-weight: 600; } .markdown-section h1 { font-size: 2rem; margin: 0 0 1rem; } .markdown-section h2 { font-size: 1.75rem; margin: 45px 0 0.8rem; } .markdown-section h3 { font-size: 1.5rem; margin: 40px 0 0.6rem; } .markdown-section h4 { font-size: 1.25rem; } .markdown-section h5 { font-size: 1rem; } .markdown-section h6 { color: #777; font-size: 1rem; } .markdown-section figure, .markdown-section p { margin: 1.2em 0; } .markdown-section ol, .markdown-section p, .markdown-section ul { line-height: 1.6rem; word-spacing: 0.05rem; } .markdown-section ol, .markdown-section ul { padding-left: 1.5rem; } .markdown-section blockquote { border-left: 4px solid var(--theme-color, #42b983); color: #858585; margin: 2em 0; padding-left: 20px; } .markdown-section blockquote p { font-weight: 600; margin-left: 0; } .markdown-section iframe { margin: 1em 0; } .markdown-section em { color: #7f8c8d; } .markdown-section code { border-radius: 2px; color: #e96900; font-size: 0.8rem; margin: 0 2px; padding: 3px 5px; white-space: pre-wrap; } .markdown-section code, .markdown-section pre { background-color: #f8f8f8; font-family: Roboto Mono, Monaco, courier, monospace; } .markdown-section pre { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; line-height: 1.5rem; margin: 1.2em 0; overflow: auto; padding: 0 1.4rem; position: relative; word-wrap: normal; } .token.cdata, .token.comment, .token.doctype, .token.prolog { color: #8e908c; } .token.namespace { opacity: 0.7; } .token.boolean, .token.number { color: #c76b29; } .token.punctuation { color: #525252; } .token.property { color: #c08b30; } .token.tag { color: #2973b7; } .token.string { color: var(--theme-color, #42b983); } .token.selector { color: #6679cc; } .token.attr-name { color: #2973b7; } .language-css .token.string, .style .token.string, .token.entity, .token.url { color: #22a2c9; } .token.attr-value, .token.control, .token.directive, .token.unit { color: var(--theme-color, #42b983); } .token.function, .token.keyword { color: #e96900; } .token.atrule, .token.regex, .token.statement { color: #22a2c9; } .token.placeholder, .token.variable { color: #3d8fd1; } .token.deleted { text-decoration: line-through; } .token.inserted { border-bottom: 1px dotted #202746; text-decoration: none; } .token.italic { font-style: italic; } .token.bold, .token.important { font-weight: 700; } .token.important { color: #c94922; } .token.entity { cursor: help; } .markdown-section pre > code { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; background-color: #f8f8f8; border-radius: 2px; color: #525252; display: block; font-family: Roboto Mono, Monaco, courier, monospace; font-size: 0.8rem; line-height: inherit; margin: 0 2px; max-width: inherit; overflow: inherit; padding: 2.2em 5px; white-space: inherit; } .markdown-section code:after, .markdown-section code:before { letter-spacing: 0.05rem; } code .token { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; min-height: 1.5rem; position: relative; left: auto; } pre:after { color: #ccc; content: attr(data-lang); font-size: 0.6rem; font-weight: 600; height: 15px; line-height: 15px; padding: 5px 10px 0; position: absolute; right: 0; text-align: right; top: 0; } mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/theme_themed.css000066400000000000000000001012711433273745700257450ustar00rootroot00000000000000@import url('https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600'); * { -webkit-font-smoothing: antialiased; -webkit-overflow-scrolling: touch; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: none; -webkit-touch-callout: none; box-sizing: border-box; } @media (prefers-color-scheme: dark2) { body:not(.ready) { overflow: hidden; } body:not(.ready) .app-nav, body:not(.ready) > nav, body:not(.ready) [data-cloak] { display: none; } div#app { font-size: 30px; font-weight: lighter; margin: 40vh auto; text-align: center; } div#app:empty:before { content: 'Loading...'; } .emoji { height: 1.2rem; vertical-align: middle; } .progress { background-color: var(--theme-color, #ea6f5a); height: 2px; left: 0; position: fixed; right: 0; top: 0; transition: width 0.2s, opacity 0.4s; width: 0; z-index: 999999; } .search .search-keyword, .search a:hover { color: var(--theme-color, #ea6f5a); } .search .search-keyword { font-style: normal; font-weight: 700; } body, html { height: 100%; } body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; color: #c8c8c8; font-family: Source Sans Pro, Helvetica Neue, Arial, sans-serif; font-size: 15px; letter-spacing: 0; margin: 0; overflow-x: hidden; } img { max-width: 100%; } a[disabled] { cursor: not-allowed; opacity: 0.6; } kbd { border: 1px solid #ccc; border-radius: 3px; display: inline-block; font-size: 12px !important; line-height: 12px; margin-bottom: 3px; padding: 3px 5px; vertical-align: middle; } li input[type='checkbox'] { margin: 0 0.2em 0.25em 0; vertical-align: middle; } .app-nav { margin: 25px 60px 0 0; position: absolute; right: 0; text-align: right; z-index: 10; } .app-nav.no-badge { margin-right: 25px; } .app-nav p { margin: 0; } .app-nav > a { margin: 0 1rem; padding: 5px 0; } .app-nav li, .app-nav ul { display: inline-block; list-style: none; margin: 0; } .app-nav a { color: inherit; font-size: 16px; text-decoration: none; transition: color 0.3s; } .app-nav a.active, .app-nav a:hover { color: var(--theme-color, #ea6f5a); } .app-nav a.active { border-bottom: 2px solid var(--theme-color, #ea6f5a); } .app-nav li { display: inline-block; margin: 0 1rem; padding: 5px 0; position: relative; cursor: pointer; } .app-nav li ul { background-color: #fff; border: 1px solid; border-color: #ddd #ddd #ccc; border-radius: 4px; box-sizing: border-box; display: none; max-height: calc(100vh - 61px); overflow-y: auto; padding: 10px 0; position: absolute; right: -15px; text-align: left; top: 100%; white-space: nowrap; } .app-nav li ul li { display: block; font-size: 14px; line-height: 1rem; margin: 8px 14px; white-space: nowrap; } .app-nav li ul a { display: block; font-size: inherit; margin: 0; padding: 0; } .app-nav li ul a.active { border-bottom: 0; } .app-nav li:hover ul { display: block; } .github-corner { border-bottom: 0; position: fixed; right: 0; text-decoration: none; top: 0; z-index: 1; } .github-corner:hover .octo-arm { -webkit-animation: octocat-wave 0.56s ease-in-out; animation: octocat-wave 0.56s ease-in-out; } .github-corner svg { color: #3f3f3f; fill: var(--theme-color, #ea6f5a); height: 80px; width: 80px; } main { display: block; position: relative; width: 100vw; height: 100%; z-index: 0; } main.hidden { display: none; } .anchor { display: inline-block; text-decoration: none; transition: all 0.3s; } .anchor span { color: #c8c8c8; } .anchor:hover { text-decoration: underline; } .sidebar { border-right: 1px solid rgba(0, 0, 0, 0.07); overflow-y: auto; padding: 40px 0 0; position: absolute; top: 0; bottom: 0; left: 0; transition: transform 0.25s ease-out; width: 300px; z-index: 20; } .sidebar > h1 { margin: 0 auto 1rem; font-size: 1.5rem; font-weight: 300; text-align: center; } .sidebar > h1 a { color: inherit; text-decoration: none; } .sidebar > h1 .app-nav { display: block; position: static; } .sidebar .sidebar-nav { line-height: 2em; padding-bottom: 40px; } .sidebar li.collapse .app-sub-sidebar { display: none; } .sidebar ul { margin: 0 0 0 15px; padding: 0; } .sidebar li > p { font-weight: 700; margin: 0; } .sidebar ul, .sidebar ul li { list-style: none; } .sidebar ul li a { border-bottom: none; display: block; } .sidebar ul li ul { padding-left: 20px; } .sidebar::-webkit-scrollbar { width: 4px; } .sidebar::-webkit-scrollbar-thumb { background: transparent; border-radius: 4px; } .sidebar:hover::-webkit-scrollbar-thumb { background: hsla(0, 0%, 53.3%, 0.4); } .sidebar:hover::-webkit-scrollbar-track { background: hsla(0, 0%, 53.3%, 0.1); } .sidebar-toggle { background-color: transparent; background-color: rgba(63, 63, 63, 0.8); border: 0; outline: none; padding: 10px; position: absolute; bottom: 0; left: 0; text-align: center; transition: opacity 0.3s; width: 284px; z-index: 30; cursor: pointer; } .sidebar-toggle:hover .sidebar-toggle-button { opacity: 0.4; } .sidebar-toggle span { background-color: var(--theme-color, #ea6f5a); display: block; margin-bottom: 4px; width: 16px; height: 2px; } body.sticky .sidebar, body.sticky .sidebar-toggle { position: fixed; } .content { padding-top: 60px; position: absolute; top: 0; right: 0; bottom: 0; left: 300px; transition: left 0.25s ease; } .markdown-section { margin: 0 auto; max-width: 80%; padding: 30px 15px 40px; position: relative; } .markdown-section > * { box-sizing: border-box; font-size: inherit; } .markdown-section > :first-child { margin-top: 0 !important; } .markdown-section hr { border: none; border-bottom: 1px solid #eee; margin: 2em 0; } .markdown-section iframe { border: 1px solid #eee; width: 1px; min-width: 100%; } .markdown-section table { border-collapse: collapse; border-spacing: 0; display: block; margin-bottom: 1rem; overflow: auto; width: 100%; } .markdown-section th { font-weight: 700; } .markdown-section td, .markdown-section th { border: 1px solid #ddd; padding: 6px 13px; } .markdown-section tr { border-top: 1px solid #ccc; } .markdown-section p.tip, .markdown-section tr:nth-child(2n) { background-color: #f8f8f8; } .markdown-section p.tip { border-bottom-right-radius: 2px; border-left: 4px solid #f66; border-top-right-radius: 2px; margin: 2em 0; padding: 12px 24px 12px 30px; position: relative; } .markdown-section p.tip:before { background-color: #f66; border-radius: 100%; color: #3f3f3f; content: '!'; font-family: Dosis, Source Sans Pro, Helvetica Neue, Arial, sans-serif; font-size: 14px; font-weight: 700; left: -12px; line-height: 20px; position: absolute; height: 20px; width: 20px; text-align: center; top: 14px; } .markdown-section p.tip code { background-color: #efefef; } .markdown-section p.tip em { color: #c8c8c8; } .markdown-section p.warn { background: rgba(234, 111, 90, 0.1); border-radius: 2px; padding: 1rem; } .markdown-section ul.task-list > li { list-style-type: none; } body.close .sidebar { transform: translateX(-300px); } body.close .sidebar-toggle { width: auto; } body.close .content { left: 0; } @media print { .app-nav, .github-corner, .sidebar, .sidebar-toggle { display: none; } } @media screen and (max-width: 768px) { .github-corner, .sidebar, .sidebar-toggle { position: fixed; } .app-nav { margin-top: 16px; } .app-nav li ul { top: 30px; } main { height: auto; overflow-x: hidden; } .sidebar { left: -300px; transition: transform 0.25s ease-out; } .content { left: 0; max-width: 100vw; position: static; padding-top: 20px; transition: transform 0.25s ease; } .app-nav, .github-corner { transition: transform 0.25s ease-out; } .sidebar-toggle { background-color: transparent; width: auto; padding: 30px 30px 10px 10px; } body.close .sidebar { transform: translateX(300px); } body.close .sidebar-toggle { background-color: rgba(63, 63, 63, 0.8); transition: background-color 1s; width: 284px; padding: 10px; } body.close .content { transform: translateX(300px); } body.close .app-nav, body.close .github-corner { display: none; } .github-corner:hover .octo-arm { -webkit-animation: none; animation: none; } .github-corner .octo-arm { -webkit-animation: octocat-wave 0.56s ease-in-out; animation: octocat-wave 0.56s ease-in-out; } } @-webkit-keyframes octocat-wave { 0%, to { transform: rotate(0); } 20%, 60% { transform: rotate(-25deg); } 40%, 80% { transform: rotate(10deg); } } @keyframes octocat-wave { 0%, to { transform: rotate(0); } 20%, 60% { transform: rotate(-25deg); } 40%, 80% { transform: rotate(10deg); } } section.cover { align-items: center; background-position: 50%; background-repeat: no-repeat; background-size: cover; height: 100vh; width: 100vw; display: none; } section.cover.show { display: flex; } section.cover.has-mask .mask { background-color: #3f3f3f; opacity: 0.8; position: absolute; top: 0; height: 100%; width: 100%; } section.cover .cover-main { flex: 1; margin: -20px 16px 0; text-align: center; } section.cover a { color: inherit; } section.cover a, section.cover a:hover { text-decoration: none; } section.cover p { line-height: 1.5rem; margin: 1em 0; } section.cover h1 { color: inherit; font-size: 2.5rem; font-weight: 300; margin: 0.625rem 0 2.5rem; position: relative; text-align: center; } section.cover h1 a { display: block; } section.cover h1 small { bottom: -0.4375rem; font-size: 1rem; position: absolute; } section.cover blockquote { font-size: 1.5rem; text-align: center; } section.cover ul { line-height: 1.8; list-style-type: none; margin: 1em auto; max-width: 500px; padding: 0; } section.cover .cover-main > p:last-child a { border-radius: 2rem; border: 1px solid var(--theme-color, #ea6f5a); box-sizing: border-box; color: var(--theme-color, #ea6f5a); display: inline-block; font-size: 1.05rem; letter-spacing: 0.1rem; margin: 0.5rem 1rem; padding: 0.75em 2rem; text-decoration: none; transition: all 0.15s ease; } section.cover .cover-main > p:last-child a:last-child { background-color: var(--theme-color, #ea6f5a); color: #fff; } section.cover .cover-main > p:last-child a:last-child:hover { color: inherit; opacity: 0.8; } section.cover .cover-main > p:last-child a:hover { color: inherit; } section.cover blockquote > p > a { border-bottom: 2px solid var(--theme-color, #ea6f5a); transition: color 0.3s; } section.cover blockquote > p > a:hover { color: var(--theme-color, #ea6f5a); } .sidebar, body { background-color: #3f3f3f; } .sidebar { color: #c8c8c8; } .sidebar li { margin: 6px 15px 6px 0; } .sidebar ul li a { color: #c8c8c8; font-size: 14px; overflow: hidden; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; } .sidebar ul li a:hover { text-decoration: underline; } .sidebar ul li ul { padding: 0; } .sidebar ul li.active > a { color: var(--theme-color, #ea6f5a); font-weight: 600; } .markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section strong { color: #657b83; font-weight: 600; } .markdown-section a { color: var(--theme-color, #ea6f5a); font-weight: 600; } .markdown-section h1 { font-size: 2rem; margin: 0 0 1rem; } .markdown-section h2 { font-size: 1.75rem; margin: 45px 0 0.8rem; } .markdown-section h3 { font-size: 1.5rem; margin: 40px 0 0.6rem; } .markdown-section h4 { font-size: 1.25rem; } .markdown-section h5 { font-size: 1rem; } .markdown-section h6 { color: #777; font-size: 1rem; } .markdown-section figure, .markdown-section ol, .markdown-section p, .markdown-section ul { margin: 1.2em 0; } .markdown-section ol, .markdown-section p, .markdown-section ul { line-height: 1.6rem; word-spacing: 0.05rem; } .markdown-section ol, .markdown-section ul { padding-left: 1.5rem; } .markdown-section blockquote { border-left: 4px solid var(--theme-color, #ea6f5a); color: #858585; margin: 2em 0; padding-left: 20px; } .markdown-section blockquote p { font-weight: 600; margin-left: 0; } .markdown-section iframe { margin: 1em 0; } .markdown-section em { color: #7f8c8d; } .markdown-section code { border-radius: 2px; color: #657b83; font-size: 0.8rem; margin: 0 2px; padding: 3px 5px; white-space: pre-wrap; } .markdown-section code, .markdown-section pre { background-color: #282828; font-family: Roboto Mono, Monaco, courier, monospace; } .markdown-section pre { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; line-height: 1.5rem; margin: 1.2em 0; overflow: auto; padding: 0 1.4rem; position: relative; word-wrap: normal; } .token.cdata, .token.comment, .token.doctype, .token.prolog { color: #8e908c; } .token.namespace { opacity: 0.7; } .token.boolean, .token.number { color: #c76b29; } .token.punctuation { color: #525252; } .token.property { color: #c08b30; } .token.tag { color: #2973b7; } .token.string { color: var(--theme-color, #ea6f5a); } .token.selector { color: #6679cc; } .token.attr-name { color: #2973b7; } .language-css .token.string, .style .token.string, .token.entity, .token.url { color: #22a2c9; } .token.attr-value, .token.control, .token.directive, .token.unit { color: var(--theme-color, #ea6f5a); } .token.keyword { color: #e96900; } .token.atrule, .token.regex, .token.statement { color: #22a2c9; } .token.placeholder, .token.variable { color: #3d8fd1; } .token.deleted { text-decoration: line-through; } .token.inserted { border-bottom: 1px dotted #202746; text-decoration: none; } .token.italic { font-style: italic; } .token.bold, .token.important { font-weight: 700; } .token.important { color: #c94922; } .token.entity { cursor: help; } .markdown-section pre > code { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; background-color: #282828; border-radius: 2px; color: #657b83; display: block; font-family: Roboto Mono, Monaco, courier, monospace; font-size: 0.8rem; line-height: inherit; margin: 0 2px; max-width: inherit; overflow: inherit; padding: 2.2em 5px; white-space: inherit; } .markdown-section code:after, .markdown-section code:before { letter-spacing: 0.05rem; } code .token { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; min-height: 1.5rem; position: relative; left: auto; } pre:after { color: #ccc; content: attr(data-lang); font-size: 0.6rem; font-weight: 600; height: 15px; line-height: 15px; padding: 5px 10px 0; position: absolute; right: 0; text-align: right; top: 0; } .markdown-section p.tip { background-color: #282828; color: #657b83; } input[type='search'] { background: #4f4f4f; border-color: #4f4f4f; color: #c8c8c8; } } @media (prefers-color-scheme: light or prefers-color-scheme: dark) { /* @media (screen) { */ body:not(.ready) { overflow: hidden; } body:not(.ready) .app-nav, body:not(.ready) > nav, body:not(.ready) [data-cloak] { display: none; } div#app { font-size: 30px; font-weight: lighter; margin: 40vh auto; text-align: center; } div#app:empty:before { content: 'Loading...'; } .emoji { height: 1.2rem; vertical-align: middle; } .progress { background-color: var(--theme-color, #42b983); height: 2px; left: 0; position: fixed; right: 0; top: 0; transition: width 0.2s, opacity 0.4s; width: 0; z-index: 999999; } .search .search-keyword, .search a:hover { color: var(--theme-color, #42b983); } .search .search-keyword { font-style: normal; font-weight: 700; } body, html { height: 100%; } body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; color: #34495e; font-family: Source Sans Pro, Helvetica Neue, Arial, sans-serif; font-size: 15px; letter-spacing: 0; margin: 0; overflow-x: hidden; } img { max-width: 100%; } a[disabled] { cursor: not-allowed; opacity: 0.6; } kbd { border: 1px solid #ccc; border-radius: 3px; display: inline-block; font-size: 12px !important; line-height: 12px; margin-bottom: 3px; padding: 3px 5px; vertical-align: middle; } li input[type='checkbox'] { margin: 0 0.2em 0.25em 0; vertical-align: middle; } .app-nav { margin: 25px 60px 0 0; position: absolute; right: 0; text-align: right; z-index: 10; } .app-nav.no-badge { margin-right: 25px; } .app-nav p { margin: 0; } .app-nav > a { margin: 0 1rem; padding: 5px 0; } .app-nav li, .app-nav ul { display: inline-block; list-style: none; margin: 0; } .app-nav a { color: inherit; font-size: 16px; text-decoration: none; transition: color 0.3s; } .app-nav a.active, .app-nav a:hover { color: var(--theme-color, #42b983); } .app-nav a.active { border-bottom: 2px solid var(--theme-color, #42b983); } .app-nav li { display: inline-block; margin: 0 1rem; padding: 5px 0; position: relative; cursor: pointer; } .app-nav li ul { background-color: #fff; border: 1px solid; border-color: #ddd #ddd #ccc; border-radius: 4px; box-sizing: border-box; display: none; max-height: calc(100vh - 61px); overflow-y: auto; padding: 10px 0; position: absolute; right: -15px; text-align: left; top: 100%; white-space: nowrap; } .app-nav li ul li { display: block; font-size: 14px; line-height: 1rem; margin: 8px 14px; white-space: nowrap; } .app-nav li ul a { display: block; font-size: inherit; margin: 0; padding: 0; } .app-nav li ul a.active { border-bottom: 0; } .app-nav li:hover ul { display: block; } .github-corner { border-bottom: 0; position: fixed; right: 0; text-decoration: none; top: 0; z-index: 1; } .github-corner:hover .octo-arm { -webkit-animation: octocat-wave 0.56s ease-in-out; animation: octocat-wave 0.56s ease-in-out; } .github-corner svg { color: #fff; fill: var(--theme-color, #42b983); height: 80px; width: 80px; } main { display: block; position: relative; width: 100vw; height: 100%; z-index: 0; } main.hidden { display: none; } .anchor { display: inline-block; text-decoration: none; transition: all 0.3s; } .anchor span { color: #34495e; } .anchor:hover { text-decoration: underline; } .sidebar { border-right: 1px solid rgba(0, 0, 0, 0.07); overflow-y: auto; padding: 40px 0 0; position: absolute; top: 0; bottom: 0; left: 0; transition: transform 0.25s ease-out; width: 300px; z-index: 20; } .sidebar > h1 { margin: 0 auto 1rem; font-size: 1.5rem; font-weight: 300; text-align: center; } .sidebar > h1 a { color: inherit; text-decoration: none; } .sidebar > h1 .app-nav { display: block; position: static; } .sidebar .sidebar-nav { line-height: 2em; padding-bottom: 40px; } .sidebar li.collapse .app-sub-sidebar { display: none; } .sidebar ul { margin: 0 0 0 15px; padding: 0; } .sidebar li > p { font-weight: 700; margin: 0; } .sidebar ul, .sidebar ul li { list-style: none; } .sidebar ul li a { border-bottom: none; display: block; } .sidebar ul li ul { padding-left: 20px; } .sidebar::-webkit-scrollbar { width: 4px; } .sidebar::-webkit-scrollbar-thumb { background: transparent; border-radius: 4px; } .sidebar:hover::-webkit-scrollbar-thumb { background: hsla(0, 0%, 53.3%, 0.4); } .sidebar:hover::-webkit-scrollbar-track { background: hsla(0, 0%, 53.3%, 0.1); } .sidebar-toggle { background-color: transparent; background-color: hsla(0, 0%, 100%, 0.8); border: 0; outline: none; padding: 10px; position: absolute; bottom: 0; left: 0; text-align: center; transition: opacity 0.3s; width: 284px; z-index: 30; cursor: pointer; } .sidebar-toggle:hover .sidebar-toggle-button { opacity: 0.4; } .sidebar-toggle span { background-color: var(--theme-color, #42b983); display: block; margin-bottom: 4px; width: 16px; height: 2px; } body.sticky .sidebar, body.sticky .sidebar-toggle { position: fixed; } .content { padding-top: 60px; position: absolute; top: 0; right: 0; bottom: 0; left: 300px; transition: left 0.25s ease; } .markdown-section { margin: 0 auto; max-width: 80%; padding: 30px 15px 40px; position: relative; } .markdown-section > * { box-sizing: border-box; font-size: inherit; } .markdown-section > :first-child { margin-top: 0 !important; } .markdown-section hr { border: none; border-bottom: 1px solid #eee; margin: 2em 0; } .markdown-section iframe { border: 1px solid #eee; width: 1px; min-width: 100%; } .markdown-section table { border-collapse: collapse; border-spacing: 0; display: block; margin-bottom: 1rem; overflow: auto; width: 100%; } .markdown-section th { font-weight: 700; } .markdown-section td, .markdown-section th { border: 1px solid #ddd; padding: 6px 13px; } .markdown-section tr { border-top: 1px solid #ccc; } .markdown-section p.tip, .markdown-section tr:nth-child(2n) { background-color: #f8f8f8; } .markdown-section p.tip { border-bottom-right-radius: 2px; border-left: 4px solid #f66; border-top-right-radius: 2px; margin: 2em 0; padding: 12px 24px 12px 30px; position: relative; } .markdown-section p.tip:before { background-color: #f66; border-radius: 100%; color: #fff; content: '!'; font-family: Dosis, Source Sans Pro, Helvetica Neue, Arial, sans-serif; font-size: 14px; font-weight: 700; left: -12px; line-height: 20px; position: absolute; height: 20px; width: 20px; text-align: center; top: 14px; } .markdown-section p.tip code { background-color: #efefef; } .markdown-section p.tip em { color: #34495e; } .markdown-section p.warn { background: rgba(66, 185, 131, 0.1); border-radius: 2px; padding: 1rem; } .markdown-section ul.task-list > li { list-style-type: none; } body.close .sidebar { transform: translateX(-300px); } body.close .sidebar-toggle { width: auto; } body.close .content { left: 0; } @media print { .app-nav, .github-corner, .sidebar, .sidebar-toggle { display: none; } } @media screen and (max-width: 768px) { .github-corner, .sidebar, .sidebar-toggle { position: fixed; } .app-nav { margin-top: 16px; } .app-nav li ul { top: 30px; } main { height: auto; overflow-x: hidden; } .sidebar { left: -300px; transition: transform 0.25s ease-out; } .content { left: 0; max-width: 100vw; position: static; padding-top: 20px; transition: transform 0.25s ease; } .app-nav, .github-corner { transition: transform 0.25s ease-out; } .sidebar-toggle { background-color: transparent; width: auto; padding: 30px 30px 10px 10px; } body.close .sidebar { transform: translateX(300px); } body.close .sidebar-toggle { background-color: hsla(0, 0%, 100%, 0.8); transition: background-color 1s; width: 284px; padding: 10px; } body.close .content { transform: translateX(300px); } body.close .app-nav, body.close .github-corner { display: none; } .github-corner:hover .octo-arm { -webkit-animation: none; animation: none; } .github-corner .octo-arm { -webkit-animation: octocat-wave 0.56s ease-in-out; animation: octocat-wave 0.56s ease-in-out; } } @-webkit-keyframes octocat-wave { 0%, to { transform: rotate(0); } 20%, 60% { transform: rotate(-25deg); } 40%, 80% { transform: rotate(10deg); } } @keyframes octocat-wave { 0%, to { transform: rotate(0); } 20%, 60% { transform: rotate(-25deg); } 40%, 80% { transform: rotate(10deg); } } section.cover { align-items: center; background-position: 50%; background-repeat: no-repeat; background-size: cover; height: 100vh; width: 100vw; display: none; } section.cover.show { display: flex; } section.cover.has-mask .mask { background-color: #fff; opacity: 0.8; position: absolute; top: 0; height: 100%; width: 100%; } section.cover .cover-main { flex: 1; margin: -20px 16px 0; text-align: center; } section.cover a { color: inherit; } section.cover a, section.cover a:hover { text-decoration: none; } section.cover p { line-height: 1.5rem; margin: 1em 0; } section.cover h1 { color: inherit; font-size: 2.5rem; font-weight: 300; margin: 0.625rem 0 2.5rem; position: relative; text-align: center; } section.cover h1 a { display: block; } section.cover h1 small { bottom: -0.4375rem; font-size: 1rem; position: absolute; } section.cover blockquote { font-size: 1.5rem; text-align: center; } section.cover ul { line-height: 1.8; list-style-type: none; margin: 1em auto; max-width: 500px; padding: 0; } section.cover .cover-main > p:last-child a { border-radius: 2rem; border: 1px solid var(--theme-color, #42b983); box-sizing: border-box; color: var(--theme-color, #42b983); display: inline-block; font-size: 1.05rem; letter-spacing: 0.1rem; margin: 0.5rem 1rem; padding: 0.75em 2rem; text-decoration: none; transition: all 0.15s ease; } section.cover .cover-main > p:last-child a:last-child { background-color: var(--theme-color, #42b983); color: #fff; } section.cover .cover-main > p:last-child a:last-child:hover { color: inherit; opacity: 0.8; } section.cover .cover-main > p:last-child a:hover { color: inherit; } section.cover blockquote > p > a { border-bottom: 2px solid var(--theme-color, #42b983); transition: color 0.3s; } section.cover blockquote > p > a:hover { color: var(--theme-color, #42b983); } .sidebar, body { background-color: #fff; } .sidebar { color: #364149; } .sidebar li { margin: 6px 0; } .sidebar ul li a { color: #505d6b; font-size: 14px; font-weight: 400; overflow: hidden; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; } .sidebar ul li a:hover { text-decoration: underline; } .sidebar ul li ul { padding: 0; } .sidebar ul li.active > a { border-right: 2px solid; color: var(--theme-color, #42b983); font-weight: 600; } .app-sub-sidebar li:before { content: '-'; padding-right: 4px; float: left; } .markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section strong { color: #2c3e50; font-weight: 600; } .markdown-section a { color: var(--theme-color, #42b983); font-weight: 600; } .markdown-section h1 { font-size: 2rem; margin: 0 0 1rem; } .markdown-section h2 { font-size: 1.75rem; margin: 45px 0 0.8rem; } .markdown-section h3 { font-size: 1.5rem; margin: 40px 0 0.6rem; } .markdown-section h4 { font-size: 1.25rem; } .markdown-section h5 { font-size: 1rem; } .markdown-section h6 { color: #777; font-size: 1rem; } .markdown-section figure, .markdown-section p { margin: 1.2em 0; } .markdown-section ol, .markdown-section p, .markdown-section ul { line-height: 1.6rem; word-spacing: 0.05rem; } .markdown-section ol, .markdown-section ul { padding-left: 1.5rem; } .markdown-section blockquote { border-left: 4px solid var(--theme-color, #42b983); color: #858585; margin: 2em 0; padding-left: 20px; } .markdown-section blockquote p { font-weight: 600; margin-left: 0; } .markdown-section iframe { margin: 1em 0; } .markdown-section em { color: #7f8c8d; } .markdown-section code { border-radius: 2px; color: #e96900; font-size: 0.8rem; margin: 0 2px; padding: 3px 5px; white-space: pre-wrap; } .markdown-section code, .markdown-section pre { background-color: #f8f8f8; font-family: Roboto Mono, Monaco, courier, monospace; } .markdown-section pre { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; line-height: 1.5rem; margin: 1.2em 0; overflow: auto; padding: 0 1.4rem; position: relative; word-wrap: normal; } .token.cdata, .token.comment, .token.doctype, .token.prolog { color: #8e908c; } .token.namespace { opacity: 0.7; } .token.boolean, .token.number { color: #c76b29; } .token.punctuation { color: #525252; } .token.property { color: #c08b30; } .token.tag { color: #2973b7; } .token.string { color: var(--theme-color, #42b983); } .token.selector { color: #6679cc; } .token.attr-name { color: #2973b7; } .language-css .token.string, .style .token.string, .token.entity, .token.url { color: #22a2c9; } .token.attr-value, .token.control, .token.directive, .token.unit { color: var(--theme-color, #42b983); } .token.function, .token.keyword { color: #e96900; } .token.atrule, .token.regex, .token.statement { color: #22a2c9; } .token.placeholder, .token.variable { color: #3d8fd1; } .token.deleted { text-decoration: line-through; } .token.inserted { border-bottom: 1px dotted #202746; text-decoration: none; } .token.italic { font-style: italic; } .token.bold, .token.important { font-weight: 700; } .token.important { color: #c94922; } .token.entity { cursor: help; } .markdown-section pre > code { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; background-color: #f8f8f8; border-radius: 2px; color: #525252; display: block; font-family: Roboto Mono, Monaco, courier, monospace; font-size: 0.8rem; line-height: inherit; margin: 0 2px; max-width: inherit; overflow: inherit; padding: 2.2em 5px; white-space: inherit; } .markdown-section code:after, .markdown-section code:before { letter-spacing: 0.05rem; } code .token { -moz-osx-font-smoothing: initial; -webkit-font-smoothing: initial; min-height: 1.5rem; position: relative; left: auto; } pre:after { color: #ccc; content: attr(data-lang); font-size: 0.6rem; font-weight: 600; height: 15px; line-height: 15px; padding: 5px 10px 0; position: absolute; right: 0; text-align: right; top: 0; } } mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/theming.md000066400000000000000000000517761433273745700245760ustar00rootroot00000000000000# Theme Configuration With Version 8.7.0 Mermaid comes out with a system for dynamic and integrated configuration of themes. The intent is to increase the customizability and ease of styling for mermaid diagrams. The theme can be altered by changing the root level variable `theme` variable in the configuration. To change it for the whole site you must use the `initialize` call. To do it for just for a single diagram you can use the `%%init%%` directive Themes follow and build upon the Levels of Configuration, and employ `directives` to modify and create custom configurations, as they were introduced in Version [8.6.0](./8.6.0_docs.md). ## Deployable Themes The following are a list of **Deployable themes**, sample `%%init%%` directives and `initialize` calls. 1. **base**- Designed to be modified, as the name implies it is supposed to be used as the base for making custom themes. 2. **forest**- A theme full of light greens that is easy on the eyes. 3. **dark**- A theme that would go well with other dark-colored elements. 4. **default**- The default theme for all diagrams. 5. **neutral**- The theme to be used for black and white printing. ## Site-wide Themes Site-wide themes are declared via `initialize` by site owners. Example of `Initialize` call setting `theme` to `base`: ```javascript mermaidAPI.initialize({ securityLevel: 'loose', theme: 'base', }); ``` **Notes**: Only site owners can use the `mermaidAPI.initialize` call, to set values. Site-Users will have to use `%%init%%` to modify or create the theme for their diagrams. ## Themes at the Local or Current Level When Generating a diagram using on a webpage that supports mermaid. It is also possible to override site-wide theme settings locally, for a specific diagram, using directives, as long as it is not prohibited by the `secure` array. ```mmd %%{init: {'theme':'base'}}%% graph TD a --> b ``` Here is an example of how `%%init%%` can set the theme to 'base', this assumes that `themeVariables` are set to default: ```mermaid-example %%{init: {'theme':'base'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` # List of Themes # Customizing Themes with `themeVariables` The easiest way to make a custom theme is to start with the base theme, and just modify theme variables through `themeVariables`, via `%%init%%`. | Parameter | Description | Type | Required | Objects contained | | -------------- | ------------------------------------------------------------------ | ----- | -------- | ---------------------------------- | | themeVariables | Array containing objects, modifiable with the `%%init%%` directive | Array | Required | primaryColor, lineColor, textColor | **Here is an example of overriding `primaryColor` through `themeVariables` and giving everything a different look, using `%%init%%`.** ```mermaid-example %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` **Notes:** Leaving it empty will set all variable values to default. ## Color and Color Calculation: Color definitions have certain interactions in mermaid, this is in order to ensure visibility for diagrams. Mermaid will adjust some variables automatically, when colors are changed in order to compensate and maintain readability. **The Default Value Column** to the right of the Variable column will denote the Variable paired/associated with the Variable on the left and the nature of this pairing or association. If it for instance says primaryColor it means that it gets primaryColor as default value. If it says "based on primaryColor" it means that it is calculated/ derived from primaryColor. This calculation can be primary color inversion, a change of hue, darkening or lightening by 10%, etc. You can create your own themes, by changing any of the given variables below. If you are using a dark background, set dark mode to true to adjust the colors. It is possible to override the calculations using the variable names below, with `%%init%%` if you wish to style it differently. ## Theme Variables Reference Table ```note Variables that are unique to some diagrams can be affected by changes in Theme Variables ``` | Variable | Default/Base/Factor value | Calc | Description | | -------------------- | ------------------------------ | ---- | -------------------------------------------------------------------------------------------------------------------------------- | | darkMode | false | | Boolean Value that dictates how to calculate colors. "true" will activate darkmode. | | background | #f4f4f4 | | Used to calculate color for items that should either be background colored or contrasting to the background. | | fontFamily | "trebuchet ms", verdana, arial | | | | fontSize | 16px | | Font Size, in pixels | | primaryColor | #fff4dd | | Color to be used as background in nodes, other colors will be derived from this | | primaryBorderColor | based on primaryColor | \* | Color to be used as border in nodes using primaryColor | | primaryTextColor | based on darkMode #ddd/#333 | \* | Color to be used as text color in nodes using primaryColor | | secondaryColor | based on primaryColor | \* | | | secondaryBorderColor | based on secondaryColor | \* | Color to be used as border in nodes using secondaryColor | | secondaryTextColor | based on secondaryColor | \* | Color to be used as text color in nodes using secondaryColor | | tertiaryColor | based on primaryColor | \* | | | tertiaryBorderColor | based on tertiaryColor | \* | Color to be used as border in nodes using tertiaryColor | | tertiaryTextColor | based on tertiaryColor | \* | Color to be used as text color in nodes using tertiaryColor | | noteBkgColor | #fff5ad | | Color used as background in notes | | noteTextColor | #333 | | Text color in note rectangles. | | noteBorderColor | based on noteBkgColor | \* | Border color in note rectangles. | | lineColor | based on background | \* | | | textColor | based on primaryTextColor | \* | Text in diagram over the background for instance text on labels and on signals in sequence diagram or the title in gantt diagram | | mainBkg | based on primaryColor | \* | Background in flowchart objects like rects/circles, class diagram classes, sequence diagram etc | | errorBkgColor | tertiaryColor | \* | Color for syntax error message | | errorTextColor | tertiaryTextColor | \* | Color for syntax error message | # What follows are Variables, specific to different diagrams and charts. ## Some Theme Variables serve as, or affect the Default Values for Specific Diagram Variables, unless changed using `%%init%%` . ## Flowchart | Variable | Default/ Associated Value | Calc | Description | | ------------------- | ------------------------- | ---- | ---------------------------- | | nodeBorder | primaryBorderColor | \* | Node Border Color | | clusterBkg | tertiaryColor | \* | Background in subgraphs | | clusterBorder | tertiaryBorderColor | \* | Cluster Border Color | | defaultLinkColor | lineColor | \* | Link Color | | titleColor | tertiaryTextColor | \* | Title Color | | edgeLabelBackground | based on secondaryColor | \* | | | nodeTextColor | primaryTextColor | \* | Color for text inside Nodes. | # sequence diagram | name | Default value | Calc | Description | | --------------------- | ----------------------- | ---- | --------------------------- | | actorBorder | primaryBorderColor | \* | Actor Border Color | | actorBkg | mainBkg | \* | Actor Background Color | | actorTextColor | primaryTextColor | \* | Actor Text Color | | actorLineColor | grey | \* | Actor Line Color | | signalColor | textColor | \* | Signal Color | | signalTextColor | textColor | \* | Signal Text Color | | labelBoxBkgColor | actorBkg | \* | Label Box Background Color | | labelBoxBorderColor | actorBorder | \* | Label Box Border Color | | labelTextColor | actorTextColor | \* | Label Text Color | | loopTextColor | actorTextColor | \* | Loop ext Color | | activationBorderColor | based on secondaryColor | \* | Activation Border Color | | activationBkgColor | secondaryColor | \* | Activation Background Color | | sequenceNumberColor | based on lineColor | \* | Sequence Number Color | # state colors | name | Default value | Calc | Description | | ------------- | ---------------- | ---- | -------------------------------------------- | | labelColor | primaryTextColor | \* | | | altBackground | tertiaryColor | \* | Used for background in deep composite states | # class colors | name | Default value | Calc | Description | | --------- | ------------- | ---- | ------------------------------- | | classText | textColor | \* | Color of Text in class diagrams | # User journey colors | name | Default value | Calc | Description | | --------- | ----------------------- | ---- | --------------------------------------- | | fillType0 | primaryColor | \* | Fill for 1st section in journey diagram | | fillType1 | secondaryColor | \* | Fill for 2nd section in journey diagram | | fillType2 | based on primaryColor | \* | Fill for 3rd section in journey diagram | | fillType3 | based on secondaryColor | \* | Fill for 4th section in journey diagram | | fillType4 | based on primaryColor | \* | Fill for 5th section in journey diagram | | fillType5 | based on secondaryColor | \* | Fill for 6th section in journey diagram | | fillType6 | based on primaryColor | \* | Fill for 7th section in journey diagram | | fillType7 | based on secondaryColor | \* | Fill for 8th section in journey diagram | \*\*Notes: Values are meant to create an alternating look. # Here is an example of overriding `primaryColor` and giving everything a different look, using `%%init%%`. ```mermaid-example %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` \*\*This got a bit too dark and bit too colorful. With some easy steps this can be fixed: - Make the primary color a little lighter - set the tertiary color to a reddish shade as well - make the edge label background differ from the subgraph by setting the edgeLabelBackground ```mermaid-example %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ffcccc', 'edgeLabelBackground':'#ffffee', 'tertiaryColor': '#fff0f0'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` The Theming Engine does not admit color codes and will only accept proper color values. Color Names is not supported so for instance, the color value 'red' will not work, but '#ff0000' will work. # Common theming activities ## How to change the color of the arrows # Examples: When adjusting a theme it might be helpful to look at how your preferred theme goes with the diagrams, to evaluate whether everything is visible and looks good. In the following examples, the directive `init` is used, with the `theme` being declared as `base`. For more information on using directives, read the documentation for [Version 8.6.0](/8.6.0_docs.md) ### Flowchart ```mmd %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ```mermaid %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ### Flowchart (beta) ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% flowchart TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[Another] C ==>|One| D[Laptop] C x--x|Two| E[iPhone] C o--o|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ### Sequence diagram ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% sequenceDiagram autonumber par Action 1 Alice->>John: Hello John, how are you? and Action 2 Alice->>Bob: Hello Bob, how are you? end Alice->>+John: Hello John, how are you? Alice->>+John: John, can you hear me? John-->>-Alice: Hi Alice, I can hear you! Note right of John: John is perceptive John-->>-Alice: I feel great! loop Every minute John-->Alice: Great! end ``` ### Class diagram ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% classDiagram Animal "1" <|-- Duck Animal <|-- Fish Animal <--o Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } ``` ### Gantt ```mermaid-example gantt dateFormat YYYY-MM-DD title Adding GANTT diagram functionality to mermaid excludes :excludes the named dates/days from being included in a charted task.. section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page :20h Add another diagram to demo page :48h ``` ### State diagram ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% stateDiagram [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } state SomethingElse { A --> B B --> A } Active --> SomethingElse note right of SomethingElse : This is the note to the right. SomethingElse --> [*] ``` ### State diagram (beta) ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'base'}}%% stateDiagram-v2 [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } state SomethingElse { A --> B B --> A } Active --> SomethingElse2 note right of SomethingElse2 : This is the note to the right. SomethingElse2 --> [*] ``` ### Entity Relations diagram ```mermaid-example erDiagram CUSTOMER }|..|{ DELIVERY-ADDRESS : has CUSTOMER ||--o{ ORDER : places CUSTOMER ||--o{ INVOICE : "liable for" DELIVERY-ADDRESS ||--o{ ORDER : receives INVOICE ||--|{ ORDER : covers ORDER ||--|{ ORDER-ITEM : includes PRODUCT-CATEGORY ||--|{ PRODUCT : contains PRODUCT ||--o{ ORDER-ITEM : "ordered in" ``` ### User journey diagram ```mermaid-example journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/upgrading.md000066400000000000000000000005751433273745700251120ustar00rootroot00000000000000# Upgrading Some of the interfaces has been upgraded. ## From version 0.4.0 to 0.5.0 ### Initialization `mermaid_config` is no longer used. Instead a call to mermaid initialize is done as in the example below: #### version 0.4.0 ```javascript mermaid_config = { startOnLoad: true, }; ``` #### version 0.5.0 ```javascript mermaid.initialize({ startOnLoad: true, }); ``` mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/usage.md000066400000000000000000000323641433273745700242370ustar00rootroot00000000000000# Usage Mermaid is a JavaScript tool that makes use of a Markdown based syntax to render customizable diagrams, charts and visualizations. Diagrams can be re-rendered/modified by modifying their descriptions. ### CDN [https://unpkg.com/mermaid/](https://unpkg.com/mermaid/) Please note that you can switch versions through the dropdown box at the top right. ## Using mermaid For the majority of users, Using the [Live Editor](https://mermaid.live/) would be sufficient, however you may also opt to deploy mermaid as a dependency or using the [Mermaid API](./Setup.md). We have compiled some Video [Tutorials](./Tutorials.md) on how to use the mermaid Live Editor. **Installing and Hosting Mermaid on a Webpage** **Using the npm package** ``` 1. You will need to install node v16, which would have npm. 2. download yarn using npm. 3. enter the following command: yarn add mermaid 4. At this point, you can add mermaid as a dev dependency using this command: yarn add --dev mermaid 5. Alternatively, you can also deploy mermaid using the script tag in an HTML file with mermaid diagram descriptions. as is shown in the example below ``` **Hosting mermaid on a web page.** > Note:This topic explored in greater depth in the [User Guide for Beginners](./n00b-gettingStarted.md) The easiest way to integrate mermaid on a web page requires two elements: - A graph definition, inside `
` tags labeled `class=mermaid`. Example:

```html
    graph LR
    A --- B
    B-->C[fa:fa-ban forbidden]
    B-->D(fa:fa-spinner);
``` - Inclusion of the mermaid address in the html page body using a `script` tag as an ESM import, and the `mermaidAPI` call. Example: ```html ``` **Following these directions, mermaid starts at page load and (when the page has loaded) it will locate the graph definitions inside the `pre` tags with `class="mermaid"` and return diagrams in SVG form, following given definitions.** ## Simple full example: ```html
  graph LR
      A --- B
      B-->C[fa:fa-ban forbidden]
      B-->D(fa:fa-spinner);
    
``` ## Notes: An id attribute is also added to mermaid tags without one. Mermaid can load multiple diagrams, in the same page. > Try it out, save this code as HTML and load it using any browser.(Except Internet Explorer, please don't use Internet Explorer.) ## Enabling Click Event and Tags in Nodes A `securityLevel` configuration has to first be cleared, `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduce in version 8.2 as a security improvement, aimed at preventing malicious use. **It is the site owner's responsibility to discriminate between trustworthy and untrustworthy user-bases and we encourage the use of discretion.** ## securityLevel | Parameter | Description | Type | Required | Values | | ------------- | --------------------------------- | ------ | -------- | ------------------------------------------ | | securityLevel | Level of trust for parsed diagram | String | Required | 'sandbox', 'strict', 'loose', 'antiscript' | Values: - **strict**: (**default**) tags in text are encoded, click functionality is disabled - **loose**: tags in text are allowed, click functionality is enabled - **antiscript**: html tags in text are allowed, (only script element is removed), click functionality is enabled - **sandbox**: With this security level all rendering takes place in a sandboxed iframe. This prevent any JavaScript running in the context. This may hinder interactive functionality of the diagram like scripts, popups in sequence diagram or links to other tabs/targets etc. ```note This changes the default behaviour of mermaid so that after upgrade to 8.2, unless the `securityLevel` is not changed, tags in flowcharts are encoded as tags and clicking is disabled. **sandbox** security level is still in the beta version. ``` **If you are taking responsibility for the diagram source security you can set the `securityLevel` to a value of your choosing . This allows clicks and tags are allowed.** **To change `securityLevel`, you have to call `mermaidAPI.initialize`:** ```javascript mermaidAPI.initialize({ securityLevel: 'loose', }); ``` ### Labels out of bounds If you use dynamically loaded fonts that are loaded through CSS, such as Google fonts, mermaid should wait for the whole page to load (dom + assets, particularly the fonts file). ```javascript $(document).load(function () { mermaid.initialize(); }); ``` or ```javascript $(document).ready(function () { mermaid.initialize(); }); ``` Not doing so will most likely result in mermaid rendering graphs that have labels out of bounds. The default integration in mermaid uses the window.load event to start rendering. If your page has other fonts in its body those might be used instead of the mermaid font. Specifying the font in your styling is a workaround for this. ```css div.mermaid { font-family: 'trebuchet ms', verdana, arial; } ``` ### Calling `mermaid.init` By default, `mermaid.init` will be called when the document is ready, finding all elements with `class="mermaid"`. If you are adding content after mermaid is loaded, or otherwise need finer-grained control of this behavior, you can call `init` yourself with: - a configuration object - some nodes, as - a node - an array-like of nodes - or W3C selector that will find your nodes Example: ```javascript mermaid.init({ noteMargin: 10 }, '.someOtherClass'); ``` Or with no config object, and a jQuery selection: ```javascript mermaid.init(undefined, $('#someId .yetAnotherClass')); ``` ```warning This type of integration is deprecated. Instead the preferred way of handling more complex integration is to use the mermaidAPI instead. ``` ## Usage with webpack mermaid fully supports webpack. Here is a [working demo](https://github.com/mermaidjs/mermaid-webpack-demo). ## API usage The main idea of the API is to be able to call a render function with the graph definition as a string. The render function will render the graph and call a callback with the resulting SVG code. With this approach it is up to the site creator to fetch the graph definition from the site (perhaps from a textarea), render it and place the graph somewhere in the site. The example below show an outline of how this could be used. The example just logs the resulting SVG to the JavaScript console. ```html ``` ### Binding events Sometimes the generated graph also has defined interactions like tooltip and click events. When using the API one must add those events after the graph has been inserted into the DOM. The example code below is an extract of what mermaid does when using the API. The example shows how it is possible to bind events to an SVG when using the API for rendering. ```javascript var insertSvg = function (svgCode, bindFunctions) { element.innerHTML = svgCode; if (typeof callback !== 'undefined') { callback(id); } bindFunctions(element); }; var id = 'theGraph'; mermaidAPI.render(id, txt, insertSvg, element); ``` 1. The graph is generated using the render call. 2. After generation the render function calls the provided callback function, in this case it's called insertSvg. 3. The callback function is called with two parameters, the SVG code of the generated graph and a function. This function binds events to the SVG **after** it is inserted into the DOM. 4. Insert the SVG code into the DOM for presentation. 5. Call the binding function that binds the events. ## Example of a marked renderer This is the renderer used for transforming the documentation from Markdown to html with mermaid diagrams in the html. ```javascript var renderer = new marked.Renderer(); renderer.code = function (code, language) { if (code.match(/^sequenceDiagram/) || code.match(/^graph/)) { return '
' + code + '
'; } else { return '
' + code + '
'; } }; ``` Another example in CoffeeScript that also includes the mermaid script tag in the generated markup. ```coffee marked = require 'marked' module.exports = (options) -> hasMermaid = false renderer = new marked.Renderer() renderer.defaultCode = renderer.code renderer.code = (code, language) -> if language is 'mermaid' html = '' if not hasMermaid hasMermaid = true html += '' html + '
'+code+'
' else @defaultCode(code, language) renderer ``` ## Advanced usage **Syntax validation without rendering (Work in Progress)** The **mermaid.parse(txt)** function validates graph definitions without rendering a graph. **[This function is still a work in progress](https://github.com/mermaid-js/mermaid/issues/1066), find alternatives below.** The function **mermaid.parse(txt)**, takes a text string as an argument and returns true if the definition follows mermaid's syntax and false if it does not. The parseError function will be called when the parse function returns false. When the parser encounters invalid syntax the **mermaid.parseError** function is called. It is possible to override this function in order to handle the error in an application-specific way. The code-example below in meta code illustrates how this could work: ```javascript mermaid.parseError = function (err, hash) { displayErrorInGui(err); }; var textFieldUpdated = function () { var textStr = getTextFromFormField('code'); if (mermaid.parse(textStr)) { reRender(textStr); } }; bindEventHandler('change', 'code', textFieldUpdated); ``` **Alternative to mermaid.parse():** One effective and more future-proof method of validating your graph definitions, is to paste and render them via the [Mermaid Live Editor](https://mermaid.live/). This will ensure that your code is compliant with the syntax of Mermaid's most recent version. ## Configuration Mermaid takes a number of options which lets you tweak the rendering of the diagrams. Currently there are three ways of setting the options in mermaid. 1. Instantiation of the configuration using the initialize call 2. _Using the global mermaid object_ - **Deprecated** 3. _using the global mermaid_config object_ - **Deprecated** 4. Instantiation of the configuration using the **mermaid.init** call- **Deprecated** The list above has two ways too many of doing this. Three are deprecated and will eventually be removed. The list of configuration objects are described [in the mermaidAPI documentation](Setup.md). ## Using the `mermaidAPI.initialize`/`mermaid.initialize` call The future proof way of setting the configuration is by using the initialization call to mermaid or mermaidAPI depending on what kind of integration you use. ```html ``` ```tip This is the preferred way of configuring mermaid. ``` ### The following methods are deprecated and are kept only for backwards compatibility. ## Using the mermaid object Is it possible to set some configuration via the mermaid object. The two parameters that are supported using this approach are: - mermaid.startOnLoad - mermaid.htmlLabels ```javascript mermaid.startOnLoad = true; ``` ```warning This way of setting the configuration is deprecated. Instead the preferred way is to use the initialize method. This functionality is only kept for backwards compatibility. ``` ## Using the mermaid_config It is possible to set some configuration via the mermaid object. The two parameters that are supported using this approach are: - mermaid_config.startOnLoad - mermaid_config.htmlLabels ```javascript mermaid_config.startOnLoad = true; ``` ```warning This way of setting the configuration is deprecated. Instead the preferred way is to use the initialize method. This functionality is only kept for backwards compatibility. ``` ## Using the mermaid.init call To set some configuration via the mermaid object. The two parameters that are supported using this approach are: - mermaid_config.startOnLoad - mermaid_config.htmlLabels ```javascript mermaid_config.startOnLoad = true; ``` ```warning This way of setting the configuration is deprecated. Instead the preferred way is to use the initialize method. This functionality is only kept for backwards compatibility. ``` mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/docs/user-journey.md000066400000000000000000000013651433273745700255770ustar00rootroot00000000000000# User Journey Diagram > User journeys describe at a high level of detail exactly what steps different users take to complete a specific task within a system, application or website. This technique shows the current (as-is) user workflow, and reveals areas of improvement for the to-be workflow. (Wikipedia) Mermaid can render user journey diagrams: ```mermaid-example journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` Each user journey is split into sections, these describe the part of the task the user is trying to complete. Tasks syntax is `Task name: : ` mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/interactionDb.ts000066400000000000000000000004061433273745700250060ustar00rootroot00000000000000let interactionFunctions: (() => void)[] = []; export const addFunction = (func: () => void) => { interactionFunctions.push(func); }; export const attachFunctions = () => { interactionFunctions.forEach((f) => { f(); }); interactionFunctions = []; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/jison/000077500000000000000000000000001433273745700227735ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/jison/lint.mts000066400000000000000000000017511433273745700244720ustar00rootroot00000000000000/* eslint-disable no-console */ import { readFile } from 'fs/promises'; import { globby } from 'globby'; import { ESLint } from 'eslint'; // @ts-ignore no typings import jison from 'jison'; const linter = new ESLint({ overrideConfig: { rules: { 'no-console': 'error' }, parser: '@typescript-eslint/parser' }, useEslintrc: false, }); const lint = async (file: string): Promise => { const jisonCode = await readFile(file, 'utf8'); // @ts-ignore no typings const jsCode = new jison.Generator(jisonCode, { moduleType: 'amd' }).generate(); const [result] = await linter.lintText(jsCode); if (result.errorCount > 0) { console.error(`Linting failed for ${file}`); console.error(result.messages); } return result.errorCount === 0; }; (async () => { const jisonFiles = await globby(['./src/**/*.jison'], { dot: true }); const lintResults = await Promise.all(jisonFiles.map(lint)); if (lintResults.some((result) => result === false)) { process.exit(1); } })(); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/logger.ts000066400000000000000000000057151433273745700235100ustar00rootroot00000000000000/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/no-empty-function */ /* eslint-disable no-console */ import moment from 'moment-mini'; export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'; export const LEVELS: Record = { trace: 0, debug: 1, info: 2, warn: 3, error: 4, fatal: 5, }; export const log: Record = { trace: (..._args: any[]) => {}, debug: (..._args: any[]) => {}, info: (..._args: any[]) => {}, warn: (..._args: any[]) => {}, error: (..._args: any[]) => {}, fatal: (..._args: any[]) => {}, }; /** * Sets a log level * * @param {LogLevel} [level="fatal"] The level to set the logging to. Default is `"fatal"` */ export const setLogLevel = function (level: keyof typeof LEVELS | number | string = 'fatal') { // TODO: Even if we call initialize with loglevel 0, many initial logs are skipped as LL is set to 5 initially. let numericLevel: number = LEVELS.fatal; if (typeof level === 'string') { level = level.toLowerCase(); if (level in LEVELS) { numericLevel = LEVELS[level as keyof typeof LEVELS]; } } else if (typeof level === 'number') { numericLevel = level; } log.trace = () => {}; log.debug = () => {}; log.info = () => {}; log.warn = () => {}; log.error = () => {}; log.fatal = () => {}; if (numericLevel <= LEVELS.fatal) { log.fatal = console.error ? console.error.bind(console, format('FATAL'), 'color: orange') : console.log.bind(console, '\x1b[35m', format('FATAL')); } if (numericLevel <= LEVELS.error) { log.error = console.error ? console.error.bind(console, format('ERROR'), 'color: orange') : console.log.bind(console, '\x1b[31m', format('ERROR')); } if (numericLevel <= LEVELS.warn) { log.warn = console.warn ? console.warn.bind(console, format('WARN'), 'color: orange') : console.log.bind(console, `\x1b[33m`, format('WARN')); } if (numericLevel <= LEVELS.info) { log.info = console.info ? console.info.bind(console, format('INFO'), 'color: lightblue') : console.log.bind(console, '\x1b[34m', format('INFO')); } if (numericLevel <= LEVELS.debug) { log.debug = console.debug ? console.debug.bind(console, format('DEBUG'), 'color: lightgreen') : console.log.bind(console, '\x1b[32m', format('DEBUG')); } if (numericLevel <= LEVELS.trace) { log.trace = console.debug ? console.debug.bind(console, format('TRACE'), 'color: lightgreen') : console.log.bind(console, '\x1b[32m', format('TRACE')); } }; /** * Returns a format with the timestamp and the log level * * @param {LogLevel} level The level for the log format * @returns {string} The format with the timestamp and log level */ const format = (level: string): string => { const time = moment().format('ss.SSS'); return `%c${time} : ${level} : `; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/mermaid.spec.ts000066400000000000000000000141331433273745700245720ustar00rootroot00000000000000import mermaid from './mermaid'; import { mermaidAPI } from './mermaidAPI'; import './diagram-api/diagram-orchestration'; const spyOn = vi.spyOn; vi.mock('./mermaidAPI'); afterEach(() => { vi.restoreAllMocks(); }); describe('when using mermaid and ', function () { describe('when detecting chart type ', function () { it('should not start rendering with mermaid.startOnLoad set to false', function () { mermaid.startOnLoad = false; document.body.innerHTML = '
graph TD;\na;
'; spyOn(mermaid, 'init'); mermaid.contentLoaded(); expect(mermaid.init).not.toHaveBeenCalled(); }); it('should start rendering with both startOnLoad set', function () { mermaid.startOnLoad = true; document.body.innerHTML = '
graph TD;\na;
'; spyOn(mermaid, 'init'); mermaid.contentLoaded(); expect(mermaid.init).toHaveBeenCalled(); }); it('should start rendering with mermaid.startOnLoad', function () { mermaid.startOnLoad = true; document.body.innerHTML = '
graph TD;\na;
'; spyOn(mermaid, 'init'); mermaid.contentLoaded(); expect(mermaid.init).toHaveBeenCalled(); }); it('should start rendering as a default with no changes performed', function () { document.body.innerHTML = '
graph TD;\na;
'; spyOn(mermaid, 'init'); mermaid.contentLoaded(); expect(mermaid.init).toHaveBeenCalled(); }); }); describe('when using #initThrowsErrors', function () { it('should accept single node', async () => { const node = document.createElement('div'); node.appendChild(document.createTextNode('graph TD;\na;')); mermaid.initThrowsErrors(undefined, node); // mermaidAPI.render function has been mocked, since it doesn't yet work // in Node.JS (only works in browser) expect(mermaidAPI.render).toHaveBeenCalled(); }); }); describe('when using #registerExternalDiagrams', function () { it('should throw error (but still render) if registerExternalDiagrams fails', async () => { const node = document.createElement('div'); node.appendChild(document.createTextNode('graph TD;\na;')); await expect( mermaid.registerExternalDiagrams( [ { id: 'dummy', detector: (text) => /dummy/.test(text), loader: () => Promise.reject('error'), }, ], { lazyLoad: false } ) ).rejects.toThrow('Failed to load 1 external diagrams'); expect(() => mermaid.initThrowsErrorsAsync(undefined, node)).not.toThrow(); // should still render, even if lazyLoadedDiagrams fails expect(mermaidAPI.renderAsync).toHaveBeenCalled(); }); it('should defer diagram load based on parameter', async () => { let loaded = false; const dummyDiagram = { db: {}, renderer: () => { // do nothing }, parser: () => { // do nothing }, styles: () => { // do nothing }, }; await expect( mermaid.registerExternalDiagrams( [ { id: 'dummy', detector: (text) => /dummy/.test(text), loader: () => { loaded = true; return Promise.resolve({ id: 'dummy', diagram: dummyDiagram, }); }, }, ], { lazyLoad: true } ) ).resolves.toBe(undefined); expect(loaded).toBe(false); await expect( mermaid.registerExternalDiagrams( [ { id: 'dummy2', detector: (text) => /dummy2/.test(text), loader: () => { loaded = true; return Promise.resolve({ id: 'dummy2', diagram: dummyDiagram, }); }, }, ], { lazyLoad: false } ) ).resolves.toBe(undefined); expect(loaded).toBe(true); }); afterEach(() => { // we modify mermaid config in some tests, so we need to make sure to reset them mermaidAPI.reset(); }); }); describe('checking validity of input ', function () { it('should throw for an invalid definition', function () { expect(() => mermaid.parse('this is not a mermaid diagram definition')).toThrow(); }); it('should not throw for a valid flow definition', function () { expect(() => mermaid.parse('graph TD;A--x|text including URL space|B;')).not.toThrow(); }); it('should throw for an invalid flow definition', function () { expect(() => mermaid.parse('graph TQ;A--x|text including URL space|B;')).toThrow(); }); it('should not throw for a valid sequenceDiagram definition (mmds1)', function () { const text = 'sequenceDiagram\n' + 'Alice->Bob: Hello Bob, how are you?\n\n' + '%% Comment\n' + 'Note right of Bob: Bob thinks\n' + 'alt isWell\n\n' + 'Bob-->Alice: I am good thanks!\n' + 'else isSick\n' + 'Bob-->Alice: Feel sick...\n' + 'end'; expect(() => mermaid.parse(text)).not.toThrow(); }); it('should throw for an invalid sequenceDiagram definition', function () { const text = 'sequenceDiagram\n' + 'Alice:->Bob: Hello Bob, how are you?\n\n' + '%% Comment\n' + 'Note right of Bob: Bob thinks\n' + 'alt isWell\n\n' + 'Bob-->Alice: I am good thanks!\n' + 'else isSick\n' + 'Bob-->Alice: Feel sick...\n' + 'end'; expect(() => mermaid.parse(text)).toThrow(); }); it('should return false for invalid definition WITH a parseError() callback defined', function () { let parseErrorWasCalled = false; mermaid.setParseErrorHandler(() => { parseErrorWasCalled = true; }); expect(mermaid.parse('this is not a mermaid diagram definition')).toEqual(false); expect(parseErrorWasCalled).toEqual(true); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/mermaid.ts000066400000000000000000000403451433273745700236450ustar00rootroot00000000000000/** * Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid * functionality and to render the diagrams to svg code! */ import type { MermaidConfig } from './config.type'; import { log } from './logger'; import utils from './utils'; import { mermaidAPI } from './mermaidAPI'; import { addDetector } from './diagram-api/detectType'; import { isDetailedError, type DetailedError } from './utils'; import { registerDiagram } from './diagram-api/diagramAPI'; import { ExternalDiagramDefinition } from './diagram-api/types'; export type { MermaidConfig, DetailedError, ExternalDiagramDefinition }; let externalDiagramsRegistered = false; /** * ## init * * Function that goes through the document to find the chart definitions in there and render them. * * The function tags the processed attributes with the attribute data-processed and ignores found * elements with the attribute already set. This way the init function can be triggered several * times. * * Optionally, `init` can accept in the second argument one of the following: * * - A DOM Node * - An array of DOM nodes (as would come from a jQuery selector) * - A W3C selector, a la `.mermaid` * * ```mermaid * graph LR; * a(Find elements)-->b{Processed} * b-->|Yes|c(Leave element) * b-->|No |d(Transform) * ``` * * Renders the mermaid diagrams * * @param config * @param nodes * @param callback */ const init = async function ( config?: MermaidConfig, // eslint-disable-next-line no-undef nodes?: string | HTMLElement | NodeListOf, // eslint-disable-next-line @typescript-eslint/ban-types callback?: Function ) { try { // Not really sure if we need to check this, or simply call initThrowsErrorsAsync directly. if (externalDiagramsRegistered) { await initThrowsErrorsAsync(config, nodes, callback); } else { initThrowsErrors(config, nodes, callback); } } catch (e) { log.warn('Syntax Error rendering'); if (isDetailedError(e)) { log.warn(e.str); } if (mermaid.parseError) { mermaid.parseError(e); } } }; // eslint-disable-next-line @typescript-eslint/ban-types const handleError = (error: unknown, errors: DetailedError[], parseError?: Function) => { log.warn(error); if (isDetailedError(error)) { // handle case where error string and hash were // wrapped in object like`const error = { str, hash };` if (parseError) { parseError(error.str, error.hash); } errors.push({ ...error, message: error.str, error }); } else { // assume it is just error string and pass it on if (parseError) { parseError(error); } if (error instanceof Error) { errors.push({ str: error.message, message: error.message, hash: error.name, error, }); } } }; const initThrowsErrors = function ( config?: MermaidConfig, // eslint-disable-next-line no-undef nodes?: string | HTMLElement | NodeListOf, // eslint-disable-next-line @typescript-eslint/ban-types callback?: Function ) { const conf = mermaidAPI.getConfig(); if (config) { // This is a legacy way of setting config. It is not documented and should be removed in the future. // @ts-ignore: TODO Fix ts errors mermaid.sequenceConfig = config; } // if last argument is a function this is the callback function log.debug(`${!callback ? 'No ' : ''}Callback function found`); let nodesToProcess: ArrayLike; if (typeof nodes === 'undefined') { nodesToProcess = document.querySelectorAll('.mermaid'); } else if (typeof nodes === 'string') { nodesToProcess = document.querySelectorAll(nodes); } else if (nodes instanceof HTMLElement) { nodesToProcess = [nodes]; } else if (nodes instanceof NodeList) { nodesToProcess = nodes; } else { throw new Error('Invalid argument nodes for mermaid.init'); } log.debug(`Found ${nodesToProcess.length} diagrams`); if (typeof config?.startOnLoad !== 'undefined') { log.debug('Start On Load: ' + config?.startOnLoad); mermaidAPI.updateSiteConfig({ startOnLoad: config?.startOnLoad }); } // generate the id of the diagram const idGenerator = new utils.initIdGenerator(conf.deterministicIds, conf.deterministicIDSeed); let txt: string; const errors: DetailedError[] = []; // element is the current div with mermaid class for (const element of Array.from(nodesToProcess)) { log.info('Rendering diagram: ' + element.id); /*! Check if previously processed */ if (element.getAttribute('data-processed')) { continue; } element.setAttribute('data-processed', 'true'); const id = `mermaid-${idGenerator.next()}`; // Fetch the graph definition including tags txt = element.innerHTML; // transforms the html to pure text txt = utils .entityDecode(txt) .trim() .replace(//gi, '
'); const init = utils.detectInit(txt); if (init) { log.debug('Detected early reinit: ', init); } try { mermaidAPI.render( id, txt, (svgCode: string, bindFunctions?: (el: Element) => void) => { element.innerHTML = svgCode; if (typeof callback !== 'undefined') { callback(id); } if (bindFunctions) bindFunctions(element); }, element ); } catch (error) { handleError(error, errors, mermaid.parseError); } } if (errors.length > 0) { // TODO: We should be throwing an error object. throw errors[0]; } }; /** * This is an internal function and should not be made public, as it will likely change. * @internal * @param diagrams - Array of {@link ExternalDiagramDefinition}. */ const registerLazyLoadedDiagrams = (diagrams: ExternalDiagramDefinition[]) => { for (const { id, detector, loader } of diagrams) { addDetector(id, detector, loader); } }; /** * This is an internal function and should not be made public, as it will likely change. * @internal * @param diagrams - Array of {@link ExternalDiagramDefinition}. */ const loadExternalDiagrams = async (diagrams: ExternalDiagramDefinition[]) => { log.debug(`Loading ${diagrams.length} external diagrams`); // Load all lazy loaded diagrams in parallel const results = await Promise.allSettled( diagrams.map(async ({ id, detector, loader }) => { const { diagram } = await loader(); registerDiagram(id, diagram, detector); }) ); const failed = results.filter((result) => result.status === 'rejected'); if (failed.length > 0) { log.error(`Failed to load ${failed.length} external diagrams`); for (const res of failed) { log.error(res); } throw new Error(`Failed to load ${failed.length} external diagrams`); } }; /** * Equivalent to {@link init()}, except an error will be thrown on error. * * @alpha * @deprecated This is an internal function and will very likely be modified in v10, or earlier. * We recommend staying with {@link initThrowsErrors} if you don't need `lazyLoadedDiagrams`. * * @param config - **Deprecated** Mermaid sequenceConfig. * @param nodes - One of: * - A DOM Node * - An array of DOM nodes (as would come from a jQuery selector) * - A W3C selector, a la `.mermaid` (default) * @param callback - Function that is called with the id of each generated mermaid diagram. * @returns Resolves on success, otherwise the {@link Promise} will be rejected. */ const initThrowsErrorsAsync = async function ( config?: MermaidConfig, // eslint-disable-next-line no-undef nodes?: string | HTMLElement | NodeListOf, // eslint-disable-next-line @typescript-eslint/ban-types callback?: Function ) { const conf = mermaidAPI.getConfig(); if (config) { // This is a legacy way of setting config. It is not documented and should be removed in the future. // @ts-ignore: TODO Fix ts errors mermaid.sequenceConfig = config; } // if last argument is a function this is the callback function log.debug(`${!callback ? 'No ' : ''}Callback function found`); let nodesToProcess: ArrayLike; if (typeof nodes === 'undefined') { nodesToProcess = document.querySelectorAll('.mermaid'); } else if (typeof nodes === 'string') { nodesToProcess = document.querySelectorAll(nodes); } else if (nodes instanceof HTMLElement) { nodesToProcess = [nodes]; } else if (nodes instanceof NodeList) { nodesToProcess = nodes; } else { throw new Error('Invalid argument nodes for mermaid.init'); } log.debug(`Found ${nodesToProcess.length} diagrams`); if (typeof config?.startOnLoad !== 'undefined') { log.debug('Start On Load: ' + config?.startOnLoad); mermaidAPI.updateSiteConfig({ startOnLoad: config?.startOnLoad }); } // generate the id of the diagram const idGenerator = new utils.initIdGenerator(conf.deterministicIds, conf.deterministicIDSeed); let txt: string; const errors: DetailedError[] = []; // element is the current div with mermaid class for (const element of Array.from(nodesToProcess)) { log.info('Rendering diagram: ' + element.id); /*! Check if previously processed */ if (element.getAttribute('data-processed')) { continue; } element.setAttribute('data-processed', 'true'); const id = `mermaid-${idGenerator.next()}`; // Fetch the graph definition including tags txt = element.innerHTML; // transforms the html to pure text txt = utils .entityDecode(txt) .trim() .replace(//gi, '
'); const init = utils.detectInit(txt); if (init) { log.debug('Detected early reinit: ', init); } try { await mermaidAPI.renderAsync( id, txt, (svgCode: string, bindFunctions?: (el: Element) => void) => { element.innerHTML = svgCode; if (typeof callback !== 'undefined') { callback(id); } if (bindFunctions) bindFunctions(element); }, element ); } catch (error) { handleError(error, errors, mermaid.parseError); } } if (errors.length > 0) { // TODO: We should be throwing an error object. throw errors[0]; } }; const initialize = function (config: MermaidConfig) { mermaidAPI.initialize(config); }; /** * Used to register external diagram types. * @param diagrams - Array of {@link ExternalDiagramDefinition}. * @param opts * @param opts.lazyLoad - If true, the diagram will be loaded on demand. */ const registerExternalDiagrams = async ( diagrams: ExternalDiagramDefinition[], { lazyLoad = true, }: { lazyLoad?: boolean; } = {} ) => { if (lazyLoad) { registerLazyLoadedDiagrams(diagrams); } else { await loadExternalDiagrams(diagrams); } externalDiagramsRegistered = true; }; /** * ##contentLoaded Callback function that is called when page is loaded. This functions fetches * configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the * page. */ const contentLoaded = function () { if (mermaid.startOnLoad) { const { startOnLoad } = mermaidAPI.getConfig(); if (startOnLoad) { mermaid.init(); } } }; if (typeof document !== 'undefined') { /*! * Wait for document loaded before starting the execution */ window.addEventListener('load', contentLoaded, false); } /** * ## setParseErrorHandler Alternative to directly setting parseError using: * * ```js * mermaid.parseError = function(err,hash){= * forExampleDisplayErrorInGui(err); // do something with the error * }; * ``` * * This is provided for environments where the mermaid object can't directly have a new member added * to it (eg. dart interop wrapper). (Initially there is no parseError member of mermaid). * * @param newParseErrorHandler New parseError() callback. */ const setParseErrorHandler = function (newParseErrorHandler: (err: any, hash: any) => void) { mermaid.parseError = newParseErrorHandler; }; const parse = (txt: string) => { return mermaidAPI.parse(txt, mermaid.parseError); }; const executionQueue: (() => Promise)[] = []; let executionQueueRunning = false; const executeQueue = async () => { if (executionQueueRunning) { return; } executionQueueRunning = true; while (executionQueue.length > 0) { const f = executionQueue.shift(); if (f) { try { await f(); } catch (e) { log.error('Error executing queue', e); } } } executionQueueRunning = false; }; /** * @param txt * @deprecated This is an internal function and should not be used. Will be removed in v10. */ const parseAsync = (txt: string): Promise => { return new Promise((resolve, reject) => { // This promise will resolve when the mermaidAPI.render call is done. // It will be queued first and will be executed when it is first in line const performCall = () => new Promise((res, rej) => { mermaidAPI.parseAsync(txt, mermaid.parseError).then( (r) => { // This resolves for the promise for the queue handling res(r); // This fulfills the promise sent to the value back to the original caller resolve(r); }, (e) => { log.error('Error parsing', e); rej(e); reject(e); } ); }); executionQueue.push(performCall); executeQueue(); }); }; // const asynco = (id: string, delay: number) => // new Promise((res) => { // setTimeout(() => { // // This resolves for the promise for the queue handling // res(id); // }, delay); // }); /** * @param txt * @param id * @param delay * @deprecated This is an internal function and should not be used. Will be removed in v10. */ // const test1 = (id: string, delay: number) => { // const p = new Promise((resolve, reject) => { // // This promise will resolve when the mermaidAPI.render call is done. // // It will be queued first and will be executed when it is first in line // const performCall = () => // new Promise((res) => { // asynco(id, delay).then((r) => { // // This resolves for the promise for the queue handling // res(r); // // This fullfills the promise sent to the value back to the original caller // resolve(r + ' result to caller'); // }); // }); // executionQueue.push(performCall); // }); // return p; // }; /** * @param txt * @param id * @param text * @param cb * @param container * @deprecated This is an internal function and should not be used. Will be removed in v10. */ const renderAsync = ( id: string, text: string, cb?: (svgCode: string, bindFunctions?: (element: Element) => void) => void, container?: Element ): Promise => { return new Promise((resolve, reject) => { // This promise will resolve when the mermaidAPI.render call is done. // It will be queued first and will be executed when it is first in line const performCall = () => new Promise((res, rej) => { mermaidAPI.renderAsync(id, text, cb, container).then( (r) => { // This resolves for the promise for the queue handling res(r); // This fullfills the promise sent to the value back to the original caller resolve(r); }, (e) => { log.error('Error parsing', e); rej(e); reject(e); } ); }); executionQueue.push(performCall); executeQueue(); }); }; const mermaid: { startOnLoad: boolean; diagrams: any; // eslint-disable-next-line @typescript-eslint/ban-types parseError?: Function; mermaidAPI: typeof mermaidAPI; parse: typeof parse; parseAsync: typeof parseAsync; render: typeof mermaidAPI.render; renderAsync: typeof renderAsync; init: typeof init; initThrowsErrors: typeof initThrowsErrors; initThrowsErrorsAsync: typeof initThrowsErrorsAsync; registerExternalDiagrams: typeof registerExternalDiagrams; initialize: typeof initialize; contentLoaded: typeof contentLoaded; setParseErrorHandler: typeof setParseErrorHandler; } = { startOnLoad: true, diagrams: {}, mermaidAPI, parse, parseAsync, render: mermaidAPI.render, renderAsync, init, initThrowsErrors, initThrowsErrorsAsync, registerExternalDiagrams, initialize, parseError: undefined, contentLoaded, setParseErrorHandler, }; export default mermaid; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/mermaidAPI.spec.js000066400000000000000000000130521433273745700251110ustar00rootroot00000000000000'use strict'; import mermaid from './mermaid'; import mermaidAPI from './mermaidAPI'; import assignWithDepth from './assignWithDepth'; describe('when using mermaidAPI and ', function () { describe('doing initialize ', function () { beforeEach(function () { document.body.innerHTML = ''; mermaidAPI.globalReset(); }); it('should copy a literal into the configuration', function () { const orgConfig = mermaidAPI.getConfig(); expect(orgConfig.testLiteral).toBe(undefined); mermaidAPI.initialize({ testLiteral: true }); const config = mermaidAPI.getConfig(); expect(config.testLiteral).toBe(true); }); it('should copy a an object into the configuration', function () { const orgConfig = mermaidAPI.getConfig(); expect(orgConfig.testObject).toBe(undefined); const object = { test1: 1, test2: false, }; mermaidAPI.initialize({ testObject: object }); let config = mermaidAPI.getConfig(); expect(config.testObject.test1).toBe(1); mermaidAPI.updateSiteConfig({ testObject: { test3: true } }); config = mermaidAPI.getConfig(); expect(config.testObject.test1).toBe(1); expect(config.testObject.test2).toBe(false); expect(config.testObject.test3).toBe(true); }); it('should reset mermaid config to global defaults', function () { let config = { logLevel: 0, securityLevel: 'loose', }; mermaidAPI.initialize(config); mermaidAPI.setConfig({ securityLevel: 'strict', logLevel: 1 }); expect(mermaidAPI.getConfig().logLevel).toBe(1); expect(mermaidAPI.getConfig().securityLevel).toBe('strict'); mermaidAPI.reset(); expect(mermaidAPI.getConfig().logLevel).toBe(0); expect(mermaidAPI.getConfig().securityLevel).toBe('loose'); mermaidAPI.globalReset(); expect(mermaidAPI.getConfig().logLevel).toBe(5); expect(mermaidAPI.getConfig().securityLevel).toBe('strict'); }); it('should prevent changes to site defaults (sneaky)', function () { let config = { logLevel: 0, }; mermaidAPI.initialize(config); const siteConfig = mermaidAPI.getSiteConfig(); expect(mermaidAPI.getConfig().logLevel).toBe(0); config.secure = { toString: function () { mermaidAPI.initialize({ securityLevel: 'loose' }); }, }; // mermaidAPI.reinitialize(config); expect(mermaidAPI.getConfig().secure).toEqual(mermaidAPI.getSiteConfig().secure); expect(mermaidAPI.getConfig().securityLevel).toBe('strict'); mermaidAPI.reset(); expect(mermaidAPI.getSiteConfig()).toEqual(siteConfig); expect(mermaidAPI.getConfig()).toEqual(siteConfig); }); it('should prevent clobbering global defaults (direct)', function () { let config = assignWithDepth({}, mermaidAPI.defaultConfig); assignWithDepth(config, { logLevel: 0 }); let error = { message: '' }; try { mermaidAPI['defaultConfig'] = config; } catch (e) { error = e; } expect(error.message).toBe( "Cannot assign to read only property 'defaultConfig' of object '#'" ); expect(mermaidAPI.defaultConfig['logLevel']).toBe(5); }); it('should prevent changes to global defaults (direct)', function () { let error = { message: '' }; try { mermaidAPI.defaultConfig['logLevel'] = 0; } catch (e) { error = e; } expect(error.message).toBe( "Cannot assign to read only property 'logLevel' of object '#'" ); expect(mermaidAPI.defaultConfig['logLevel']).toBe(5); }); it('should prevent sneaky changes to global defaults (assignWithDepth)', function () { let config = { logLevel: 0, }; let error = { message: '' }; try { assignWithDepth(mermaidAPI.defaultConfig, config); } catch (e) { error = e; } expect(error.message).toBe( "Cannot assign to read only property 'logLevel' of object '#'" ); expect(mermaidAPI.defaultConfig['logLevel']).toBe(5); }); }); describe('dompurify config', function () { it('should allow dompurify config to be set', function () { mermaidAPI.initialize({ dompurifyConfig: { ADD_ATTR: ['onclick'] } }); expect(mermaidAPI.getConfig().dompurifyConfig.ADD_ATTR).toEqual(['onclick']); }); }); describe('test mermaidApi.parse() for checking validity of input ', function () { mermaid.parseError = undefined; // ensure it parseError undefined it('should throw for an invalid definition (with no mermaid.parseError() defined)', function () { expect(mermaid.parseError).toEqual(undefined); expect(() => mermaidAPI.parse('this is not a mermaid diagram definition')).toThrow(); }); it('should not throw for a valid definition', function () { expect(() => mermaidAPI.parse('graph TD;A--x|text including URL space|B;')).not.toThrow(); }); it('it should return false for invalid definition WITH a parseError() callback defined', function () { let parseErrorWasCalled = false; // also test setParseErrorHandler() call working to set mermaid.parseError expect( mermaidAPI.parse('this is not a mermaid diagram definition', () => { parseErrorWasCalled = true; }) ).toEqual(false); expect(parseErrorWasCalled).toEqual(true); }); it('should return true for valid definition', function () { expect(mermaidAPI.parse('graph TD;A--x|text including URL space|B;')).toEqual(true); }); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/mermaidAPI.ts000066400000000000000000000630131433273745700241740ustar00rootroot00000000000000/** * This is the API to be used when optionally handling the integration with the web page, instead of * using the default integration provided by mermaid.js. * * The core of this api is the [**render**](Setup.md?id=render) function which, given a graph * definition as text, renders the graph/diagram and returns an svg element for the graph. * * It is then up to the user of the API to make use of the svg, either insert it somewhere in the * page or do something completely different. * * In addition to the render function, a number of behavioral configuration options are available. * * @name mermaidAPI */ import { select } from 'd3'; import { compile, serialize, stringify } from 'stylis'; // @ts-ignore: TODO Fix ts errors import pkg from '../package.json'; import * as configApi from './config'; import { addDiagrams } from './diagram-api/diagram-orchestration'; import classDb from './diagrams/class/classDb'; import flowDb from './diagrams/flowchart/flowDb'; import flowRenderer from './diagrams/flowchart/flowRenderer'; import ganttDb from './diagrams/gantt/ganttDb'; import Diagram, { getDiagramFromText } from './Diagram'; import errorRenderer from './diagrams/error/errorRenderer'; import { attachFunctions } from './interactionDb'; import { log, setLogLevel } from './logger'; import getStyles from './styles'; import theme from './themes'; import utils, { directiveSanitizer } from './utils'; import DOMPurify from 'dompurify'; import { MermaidConfig } from './config.type'; import { evaluate } from './diagrams/common/common'; /** * @param text * @param parseError */ // eslint-disable-next-line @typescript-eslint/ban-types function parse(text: string, parseError?: Function): boolean { addDiagrams(); const diagram = new Diagram(text, parseError); return diagram.parse(text, parseError); } /** * * @param text * @param parseError */ // eslint-disable-next-line @typescript-eslint/ban-types async function parseAsync(text: string, parseError?: Function): Promise { addDiagrams(); const diagram = await getDiagramFromText(text, parseError); return diagram.parse(text, parseError); } export const encodeEntities = function (text: string): string { let txt = text; txt = txt.replace(/style.*:\S*#.*;/g, function (s) { const innerTxt = s.substring(0, s.length - 1); return innerTxt; }); txt = txt.replace(/classDef.*:\S*#.*;/g, function (s) { const innerTxt = s.substring(0, s.length - 1); return innerTxt; }); txt = txt.replace(/#\w+;/g, function (s) { const innerTxt = s.substring(1, s.length - 1); const isInt = /^\+?\d+$/.test(innerTxt); if (isInt) { return 'fl°°' + innerTxt + '¶ß'; } else { return 'fl°' + innerTxt + '¶ß'; } }); return txt; }; export const decodeEntities = function (text: string): string { let txt = text; txt = txt.replace(/fl°°/g, function () { return '&#'; }); txt = txt.replace(/fl°/g, function () { return '&'; }); txt = txt.replace(/¶ß/g, function () { return ';'; }); return txt; }; /** * Function that renders an svg with a graph from a chart definition. Usage example below. * * ```javascript * mermaidAPI.initialize({ * startOnLoad: true, * }); * $(function () { * const graphDefinition = 'graph TB\na-->b'; * const cb = function (svgGraph) { * console.log(svgGraph); * }; * mermaidAPI.render('id1', graphDefinition, cb); * }); * ``` * * @param {string} id The id of the element to be rendered * @param {string} text The graph definition * @param cb - Optional callback which * is called after rendering is finished with the svg code as inparam. * @param {Element} container Selector to element in which a div with the graph temporarily will be * inserted. If one is provided a hidden div will be inserted in the body of the page instead. The * element will be removed when rendering is completed. * @returns Returns the rendered element as a string containing the SVG definition. */ const render = function ( id: string, text: string, cb?: (svgCode: string, bindFunctions?: (element: Element) => void) => void, container?: Element ): string { addDiagrams(); configApi.reset(); text = text.replace(/\r\n?/g, '\n'); // parser problems on CRLF ignore all CR and leave LF;; const graphInit = utils.detectInit(text); if (graphInit) { directiveSanitizer(graphInit); configApi.addDirective(graphInit); } const cnf = configApi.getConfig(); log.debug(cnf); // Check the maximum allowed text size if (text.length > cnf.maxTextSize!) { text = 'graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa'; } let root: any = select('body'); // In regular execution the container will be the div with a mermaid class if (typeof container !== 'undefined') { // A container was provided by the caller if (container) { container.innerHTML = ''; } if (cnf.securityLevel === 'sandbox') { // IF we are in sandboxed mode, we do everyting mermaid related // in a sandboxed div const iframe = select(container) .append('iframe') .attr('id', 'i' + id) .attr('style', 'width: 100%; height: 100%;') .attr('sandbox', ''); // const iframeBody = ; root = select(iframe.nodes()[0]!.contentDocument!.body); root.node().style.margin = 0; } else { root = select(container); } root .append('div') .attr('id', 'd' + id) .attr('style', 'font-family: ' + cnf.fontFamily) .append('svg') .attr('id', id) .attr('width', '100%') .attr('xmlns', 'http://www.w3.org/2000/svg') .attr('xmlns:xlink', 'http://www.w3.org/1999/xlink') .append('g'); } else { // No container was provided // If there is an existing element with the id, we remove it // this likely a previously rendered diagram const existingSvg = document.getElementById(id); if (existingSvg) { existingSvg.remove(); } // Remove previous tpm element if it exists let element; if (cnf.securityLevel === 'sandbox') { element = document.querySelector('#i' + id); } else { element = document.querySelector('#d' + id); } if (element) { element.remove(); } // Add the tmp div used for rendering with the id `d${id}` // d+id it will contain a svg with the id "id" if (cnf.securityLevel === 'sandbox') { // IF we are in sandboxed mode, we do everyting mermaid related // in a sandboxed div const iframe = select('body') .append('iframe') .attr('id', 'i' + id) .attr('style', 'width: 100%; height: 100%;') .attr('sandbox', ''); root = select(iframe.nodes()[0]!.contentDocument!.body); root.node().style.margin = 0; } else { root = select('body'); } // This is the temporary div root .append('div') .attr('id', 'd' + id) // this is the seed of the svg to be rendered .append('svg') .attr('id', id) .attr('width', '100%') .attr('xmlns', 'http://www.w3.org/2000/svg') .append('g'); } text = encodeEntities(text); // Important that we do not create the diagram until after the directives have been included let diag; let parseEncounteredException; try { // diag = new Diagram(text); diag = getDiagramFromText(text); if ('then' in diag) { throw new Error('Diagram is a promise'); } } catch (error) { diag = new Diagram('error'); parseEncounteredException = error; } // Get the tmp element containing the the svg const element = root.select('#d' + id).node(); const graphType = diag.type; // insert inline style into svg const svg = element.firstChild; const firstChild = svg.firstChild; let userStyles = ''; // user provided theme CSS // If you add more configuration driven data into the user styles make sure that the value is // sanitized bye the santiizeCSS function if (cnf.themeCSS !== undefined) { userStyles += `\n${cnf.themeCSS}`; } // user provided theme CSS if (cnf.fontFamily !== undefined) { userStyles += `\n:root { --mermaid-font-family: ${cnf.fontFamily}}`; } // user provided theme CSS if (cnf.altFontFamily !== undefined) { userStyles += `\n:root { --mermaid-alt-font-family: ${cnf.altFontFamily}}`; } // classDef if (graphType === 'flowchart' || graphType === 'flowchart-v2' || graphType === 'graph') { const classes: any = flowRenderer.getClasses(text, diag); const htmlLabels = cnf.htmlLabels || cnf.flowchart?.htmlLabels; for (const className in classes) { if (htmlLabels) { userStyles += `\n.${className} > * { ${classes[className].styles.join( ' !important; ' )} !important; }`; userStyles += `\n.${className} span { ${classes[className].styles.join( ' !important; ' )} !important; }`; } else { userStyles += `\n.${className} path { ${classes[className].styles.join( ' !important; ' )} !important; }`; userStyles += `\n.${className} rect { ${classes[className].styles.join( ' !important; ' )} !important; }`; userStyles += `\n.${className} polygon { ${classes[className].styles.join( ' !important; ' )} !important; }`; userStyles += `\n.${className} ellipse { ${classes[className].styles.join( ' !important; ' )} !important; }`; userStyles += `\n.${className} circle { ${classes[className].styles.join( ' !important; ' )} !important; }`; if (classes[className].textStyles) { userStyles += `\n.${className} tspan { ${classes[className].textStyles.join( ' !important; ' )} !important; }`; } } } } const stylis = (selector: string, styles: string) => serialize(compile(`${selector}{${styles}}`), stringify); const rules = stylis(`#${id}`, getStyles(graphType, userStyles, cnf.themeVariables)); const style1 = document.createElement('style'); style1.innerHTML = `#${id} ` + rules; svg.insertBefore(style1, firstChild); try { diag.renderer.draw(text, id, pkg.version, diag); } catch (e) { errorRenderer.draw(text, id, pkg.version); throw e; } root .select(`[id="${id}"]`) .selectAll('foreignobject > *') .attr('xmlns', 'http://www.w3.org/1999/xhtml'); // Fix for when the base tag is used let svgCode = root.select('#d' + id).node().innerHTML; log.debug('cnf.arrowMarkerAbsolute', cnf.arrowMarkerAbsolute); if (!evaluate(cnf.arrowMarkerAbsolute) && cnf.securityLevel !== 'sandbox') { svgCode = svgCode.replace(/marker-end="url\(.*?#/g, 'marker-end="url(#', 'g'); } svgCode = decodeEntities(svgCode); // Fix for when the br tag is used svgCode = svgCode.replace(/
/g, '
'); if (cnf.securityLevel === 'sandbox') { const svgEl = root.select('#d' + id + ' svg').node(); const width = '100%'; let height = '100%'; if (svgEl) { height = svgEl.viewBox.baseVal.height + 'px'; } svgCode = ``; } else { if (cnf.securityLevel !== 'loose') { svgCode = DOMPurify.sanitize(svgCode, { ADD_TAGS: ['foreignobject'], ADD_ATTR: ['dominant-baseline'], }); } } if (typeof cb !== 'undefined') { switch (graphType) { case 'flowchart': case 'flowchart-v2': cb(svgCode, flowDb.bindFunctions); break; case 'gantt': cb(svgCode, ganttDb.bindFunctions); break; case 'class': case 'classDiagram': cb(svgCode, classDb.bindFunctions); break; default: cb(svgCode); } } else { log.debug('CB = undefined!'); } attachFunctions(); const tmpElementSelector = cnf.securityLevel === 'sandbox' ? '#i' + id : '#d' + id; const node = select(tmpElementSelector).node(); if (node && 'remove' in node) { node.remove(); } if (parseEncounteredException) { throw parseEncounteredException; } return svgCode; }; /** * @deprecated This is an internal function and should not be used. Will be removed in v10. */ const renderAsync = async function ( id: string, text: string, cb?: (svgCode: string, bindFunctions?: (element: Element) => void) => void, container?: Element ): Promise { addDiagrams(); configApi.reset(); text = text.replace(/\r\n?/g, '\n'); // parser problems on CRLF ignore all CR and leave LF;; const graphInit = utils.detectInit(text); if (graphInit) { directiveSanitizer(graphInit); configApi.addDirective(graphInit); } const cnf = configApi.getConfig(); log.debug(cnf); // Check the maximum allowed text size if (text.length > cnf.maxTextSize!) { text = 'graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa'; } let root: any = select('body'); // In regular execution the container will be the div with a mermaid class if (typeof container !== 'undefined') { // A container was provided by the caller if (container) { container.innerHTML = ''; } if (cnf.securityLevel === 'sandbox') { // IF we are in sandboxed mode, we do everyting mermaid related // in a sandboxed div const iframe = select(container) .append('iframe') .attr('id', 'i' + id) .attr('style', 'width: 100%; height: 100%;') .attr('sandbox', ''); // const iframeBody = ; root = select(iframe.nodes()[0]!.contentDocument!.body); root.node().style.margin = 0; } else { root = select(container); } root .append('div') .attr('id', 'd' + id) .attr('style', 'font-family: ' + cnf.fontFamily) .append('svg') .attr('id', id) .attr('width', '100%') .attr('xmlns', 'http://www.w3.org/2000/svg') .attr('xmlns:xlink', 'http://www.w3.org/1999/xlink') .append('g'); } else { // No container was provided // If there is an existing element with the id, we remove it // this likely a previously rendered diagram const existingSvg = document.getElementById(id); if (existingSvg) { existingSvg.remove(); } // Remove previous tpm element if it exists let element; if (cnf.securityLevel === 'sandbox') { element = document.querySelector('#i' + id); } else { element = document.querySelector('#d' + id); } if (element) { element.remove(); } // Add the tmp div used for rendering with the id `d${id}` // d+id it will contain a svg with the id "id" if (cnf.securityLevel === 'sandbox') { // IF we are in sandboxed mode, we do everyting mermaid related // in a sandboxed div const iframe = select('body') .append('iframe') .attr('id', 'i' + id) .attr('style', 'width: 100%; height: 100%;') .attr('sandbox', ''); root = select(iframe.nodes()[0]!.contentDocument!.body); root.node().style.margin = 0; } else { root = select('body'); } // This is the temporary div root .append('div') .attr('id', 'd' + id) // this is the seed of the svg to be rendered .append('svg') .attr('id', id) .attr('width', '100%') .attr('xmlns', 'http://www.w3.org/2000/svg') .append('g'); } text = encodeEntities(text); // Important that we do not create the diagram until after the directives have been included let diag; let parseEncounteredException; try { // diag = new Diagram(text); diag = await getDiagramFromText(text); } catch (error) { diag = new Diagram('error'); parseEncounteredException = error; } // Get the tmp element containing the the svg const element = root.select('#d' + id).node(); const graphType = diag.type; // insert inline style into svg const svg = element.firstChild; const firstChild = svg.firstChild; let userStyles = ''; // user provided theme CSS // If you add more configuration driven data into the user styles make sure that the value is // sanitized bye the santiizeCSS function if (cnf.themeCSS !== undefined) { userStyles += `\n${cnf.themeCSS}`; } // user provided theme CSS if (cnf.fontFamily !== undefined) { userStyles += `\n:root { --mermaid-font-family: ${cnf.fontFamily}}`; } // user provided theme CSS if (cnf.altFontFamily !== undefined) { userStyles += `\n:root { --mermaid-alt-font-family: ${cnf.altFontFamily}}`; } // classDef if (graphType === 'flowchart' || graphType === 'flowchart-v2' || graphType === 'graph') { const classes: any = flowRenderer.getClasses(text, diag); const htmlLabels = cnf.htmlLabels || cnf.flowchart?.htmlLabels; for (const className in classes) { if (htmlLabels) { userStyles += `\n.${className} > * { ${classes[className].styles.join( ' !important; ' )} !important; }`; userStyles += `\n.${className} span { ${classes[className].styles.join( ' !important; ' )} !important; }`; } else { userStyles += `\n.${className} path { ${classes[className].styles.join( ' !important; ' )} !important; }`; userStyles += `\n.${className} rect { ${classes[className].styles.join( ' !important; ' )} !important; }`; userStyles += `\n.${className} polygon { ${classes[className].styles.join( ' !important; ' )} !important; }`; userStyles += `\n.${className} ellipse { ${classes[className].styles.join( ' !important; ' )} !important; }`; userStyles += `\n.${className} circle { ${classes[className].styles.join( ' !important; ' )} !important; }`; if (classes[className].textStyles) { userStyles += `\n.${className} tspan { ${classes[className].textStyles.join( ' !important; ' )} !important; }`; } } } } const stylis = (selector: string, styles: string) => serialize(compile(`${selector}{${styles}}`), stringify); const rules = stylis(`#${id}`, getStyles(graphType, userStyles, cnf.themeVariables)); const style1 = document.createElement('style'); style1.innerHTML = `#${id} ` + rules; svg.insertBefore(style1, firstChild); try { await diag.renderer.draw(text, id, pkg.version, diag); } catch (e) { errorRenderer.draw(text, id, pkg.version); throw e; } root .select(`[id="${id}"]`) .selectAll('foreignobject > *') .attr('xmlns', 'http://www.w3.org/1999/xhtml'); // Fix for when the base tag is used let svgCode = root.select('#d' + id).node().innerHTML; log.debug('cnf.arrowMarkerAbsolute', cnf.arrowMarkerAbsolute); if (!evaluate(cnf.arrowMarkerAbsolute) && cnf.securityLevel !== 'sandbox') { svgCode = svgCode.replace(/marker-end="url\(.*?#/g, 'marker-end="url(#', 'g'); } svgCode = decodeEntities(svgCode); // Fix for when the br tag is used svgCode = svgCode.replace(/
/g, '
'); if (cnf.securityLevel === 'sandbox') { const svgEl = root.select('#d' + id + ' svg').node(); const width = '100%'; let height = '100%'; if (svgEl) { height = svgEl.viewBox.baseVal.height + 'px'; } svgCode = ``; } else { if (cnf.securityLevel !== 'loose') { svgCode = DOMPurify.sanitize(svgCode, { ADD_TAGS: ['foreignobject'], ADD_ATTR: ['dominant-baseline'], }); } } if (typeof cb !== 'undefined') { switch (graphType) { case 'flowchart': case 'flowchart-v2': cb(svgCode, flowDb.bindFunctions); break; case 'gantt': cb(svgCode, ganttDb.bindFunctions); break; case 'class': case 'classDiagram': cb(svgCode, classDb.bindFunctions); break; default: cb(svgCode); } } else { log.debug('CB = undefined!'); } attachFunctions(); const tmpElementSelector = cnf.securityLevel === 'sandbox' ? '#i' + id : '#d' + id; const node = select(tmpElementSelector).node(); if (node && 'remove' in node) { node.remove(); } if (parseEncounteredException) { throw parseEncounteredException; } return svgCode; }; let currentDirective: { type?: string; args?: any } | undefined = {}; const parseDirective = function (p: any, statement: string, context: string, type: string): void { try { if (statement !== undefined) { statement = statement.trim(); switch (context) { case 'open_directive': currentDirective = {}; break; case 'type_directive': if (!currentDirective) throw new Error('currentDirective is undefined'); currentDirective.type = statement.toLowerCase(); break; case 'arg_directive': if (!currentDirective) throw new Error('currentDirective is undefined'); currentDirective.args = JSON.parse(statement); break; case 'close_directive': handleDirective(p, currentDirective, type); currentDirective = undefined; break; } } } catch (error) { log.error( `Error while rendering sequenceDiagram directive: ${statement} jison context: ${context}` ); // @ts-ignore: TODO Fix ts errors log.error(error.message); } }; const handleDirective = function (p: any, directive: any, type: string): void { log.debug(`Directive type=${directive.type} with args:`, directive.args); switch (directive.type) { case 'init': case 'initialize': { ['config'].forEach((prop) => { if (typeof directive.args[prop] !== 'undefined') { if (type === 'flowchart-v2') { type = 'flowchart'; } directive.args[type] = directive.args[prop]; delete directive.args[prop]; } }); log.debug('sanitize in handleDirective', directive.args); directiveSanitizer(directive.args); log.debug('sanitize in handleDirective (done)', directive.args); configApi.addDirective(directive.args); break; } case 'wrap': case 'nowrap': if (p && p['setWrap']) { p.setWrap(directive.type === 'wrap'); } break; case 'themeCss': log.warn('themeCss encountered'); break; default: log.warn( `Unhandled directive: source: '%%{${directive.type}: ${JSON.stringify( directive.args ? directive.args : {} )}}%%`, directive ); break; } }; /** @param {MermaidConfig} options */ function initialize(options: MermaidConfig = {}) { // Handle legacy location of font-family configuration if (options.fontFamily) { if (!options.themeVariables) { options.themeVariables = {}; } options.themeVariables.fontFamily = options.fontFamily; } // Set default options configApi.saveConfigFromInitialize(options); if (options?.theme && options.theme in theme) { // Todo merge with user options options.themeVariables = theme[options.theme as keyof typeof theme].getThemeVariables( options.themeVariables ); } else if (options) { options.themeVariables = theme.default.getThemeVariables(options.themeVariables); } const config = typeof options === 'object' ? configApi.setSiteConfig(options) : configApi.getSiteConfig(); setLogLevel(config.logLevel); addDiagrams(); } export const mermaidAPI = Object.freeze({ render, renderAsync, parse, parseAsync, parseDirective, initialize, getConfig: configApi.getConfig, setConfig: configApi.setConfig, getSiteConfig: configApi.getSiteConfig, updateSiteConfig: configApi.updateSiteConfig, reset: () => { configApi.reset(); }, globalReset: () => { configApi.reset(configApi.defaultConfig); }, defaultConfig: configApi.defaultConfig, }); setLogLevel(configApi.getConfig().logLevel); configApi.reset(configApi.getConfig()); export default mermaidAPI; /** * ## mermaidAPI configuration defaults * * ```html * * ``` */ mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/setupGraphViewbox.js000066400000000000000000000050361433273745700257010ustar00rootroot00000000000000import { log } from './logger'; /** * Applys d3 attributes * * @param {any} d3Elem D3 Element to apply the attributes onto * @param {[string, string][]} attrs Object.keys equivalent format of key to value mapping of attributes */ const d3Attrs = function (d3Elem, attrs) { for (let attr of attrs) { d3Elem.attr(attr[0], attr[1]); } }; /** * Gives attributes for an SVG's size given arguments * * @param {number} height The height of the SVG * @param {number} width The width of the SVG * @param {boolean} useMaxWidth Whether or not to use max-width and set width to 100% * @returns {Map<'height' | 'width' | 'style', string>} Attributes for the SVG */ export const calculateSvgSizeAttrs = function (height, width, useMaxWidth) { let attrs = new Map(); if (useMaxWidth) { attrs.set('width', '100%'); attrs.set('style', `max-width: ${width}px;`); } else { attrs.set('width', width); } return attrs; }; /** * Applies attributes from `calculateSvgSizeAttrs` * * @param {SVGSVGElement} svgElem The SVG Element to configure * @param {number} height The height of the SVG * @param {number} width The width of the SVG * @param {boolean} useMaxWidth Whether or not to use max-width and set width to 100% */ export const configureSvgSize = function (svgElem, height, width, useMaxWidth) { const attrs = calculateSvgSizeAttrs(height, width, useMaxWidth); d3Attrs(svgElem, attrs); }; export const setupGraphViewbox = function (graph, svgElem, padding, useMaxWidth) { const svgBounds = svgElem.node().getBBox(); const sWidth = svgBounds.width; const sHeight = svgBounds.height; log.info(`SVG bounds: ${sWidth}x${sHeight}`, svgBounds); let width = 0; let height = 0; log.info(`Graph bounds: ${width}x${height}`, graph); // let tx = 0; // let ty = 0; // if (sWidth > width) { // tx = (sWidth - width) / 2 + padding; width = sWidth + padding * 2; // } else { // if (Math.abs(sWidth - width) >= 2 * padding + 1) { // width = width - padding; // } // } // if (sHeight > height) { // ty = (sHeight - height) / 2 + padding; height = sHeight + padding * 2; // } // width = log.info(`Calculated bounds: ${width}x${height}`); configureSvgSize(svgElem, height, width, useMaxWidth); // Ensure the viewBox includes the whole svgBounds area with extra space for padding // const vBox = `0 0 ${width} ${height}`; const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${ svgBounds.width + 2 * padding } ${svgBounds.height + 2 * padding}`; svgElem.attr('viewBox', vBox); }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/setupGraphViewbox.spec.js000066400000000000000000000015351433273745700266320ustar00rootroot00000000000000import utils from './utils'; import assignWithDepth from './assignWithDepth'; import { detectType } from './diagram-api/detectType'; import { addDiagrams } from './diagram-api/diagram-orchestration'; import { calculateSvgSizeAttrs } from './setupGraphViewbox'; addDiagrams(); describe('when calculating SVG size', function () { it('should return width 100% when useMaxWidth is true', function () { const attrs = calculateSvgSizeAttrs(100, 200, true); // expect(attrs.get('height')).toEqual(100); expect(attrs.get('style')).toEqual('max-width: 200px;'); expect(attrs.get('width')).toEqual('100%'); }); it('should return absolute width when useMaxWidth is false', function () { const attrs = calculateSvgSizeAttrs(100, 200, false); // expect(attrs.get('height')).toEqual(100); expect(attrs.get('width')).toEqual(200); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/styles.ts000066400000000000000000000047521433273745700235540ustar00rootroot00000000000000import classDiagram from './diagrams/class/styles'; import er from './diagrams/er/styles'; import error from './diagrams/error/styles'; import flowchart from './diagrams/flowchart/styles'; import gantt from './diagrams/gantt/styles'; // import gitGraph from './diagrams/git/styles'; import info from './diagrams/info/styles'; import pie from './diagrams/pie/styles'; import requirement from './diagrams/requirement/styles'; import sequence from './diagrams/sequence/styles'; import stateDiagram from './diagrams/state/styles'; import journey from './diagrams/user-journey/styles'; import c4 from './diagrams/c4/styles'; import { FlowChartStyleOptions } from './diagrams/flowchart/styles'; import { log } from './logger'; // TODO @knut: Inject from registerDiagram. const themes: Record = { flowchart, 'flowchart-v2': flowchart, sequence, gantt, classDiagram, 'classDiagram-v2': classDiagram, class: classDiagram, stateDiagram, state: stateDiagram, // gitGraph, info, pie, er, error, journey, requirement, c4, }; const getStyles = ( type: string, userStyles: string, options: { fontFamily: string; fontSize: string; textColor: string; errorBkgColor: string; errorTextColor: string; lineColor: string; } & FlowChartStyleOptions ) => { let diagramStyles = ''; if (type in themes && themes[type as keyof typeof themes]) { diagramStyles = themes[type as keyof typeof themes](options); } else { log.warn(`No theme found for ${type}`); } return ` { font-family: ${options.fontFamily}; font-size: ${options.fontSize}; fill: ${options.textColor} } /* Classes common for multiple diagrams */ .error-icon { fill: ${options.errorBkgColor}; } .error-text { fill: ${options.errorTextColor}; stroke: ${options.errorTextColor}; } .edge-thickness-normal { stroke-width: 2px; } .edge-thickness-thick { stroke-width: 3.5px } .edge-pattern-solid { stroke-dasharray: 0; } .edge-pattern-dashed{ stroke-dasharray: 3; } .edge-pattern-dotted { stroke-dasharray: 2; } .marker { fill: ${options.lineColor}; stroke: ${options.lineColor}; } .marker.cross { stroke: ${options.lineColor}; } svg { font-family: ${options.fontFamily}; font-size: ${options.fontSize}; } ${diagramStyles} ${userStyles} `; }; export const addStylesForDiagram = (type: string, diagramTheme: unknown): void => { themes[type] = diagramTheme; }; export default getStyles; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/tests/000077500000000000000000000000001433273745700230135ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/tests/setup.ts000066400000000000000000000001011433273745700245130ustar00rootroot00000000000000import { vi } from 'vitest'; vi.mock('d3'); vi.mock('dagre-d3'); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/tests/util.ts000066400000000000000000000022051433273745700243370ustar00rootroot00000000000000/* Used to convert jest's Tagged Template literals to object arrays as required by vitest. Example: Jest code ```ts it.each` str | expected ${'1d'} | ${moment.duration(1, 'd')} ${'2w'} | ${moment.duration(2, 'w')} `('should parse $str to $expected duration', ({ str, expected }) => { expect(yourFunction(str)).toEqual(expected); }); ``` Vitest code ```ts it.each(convert` str | expected ${'1d'} | ${moment.duration(1, 'd')} ${'2w'} | ${moment.duration(2, 'w')} `)('should parse $str to $expected duration', ({ str, expected }) => { expect(yourFunction(str)).toEqual(expected); }); ``` */ export const convert = (template: TemplateStringsArray, ...params: any[]) => { const header = template[0] .trim() .split('|') .map((s) => s.trim()); if (header.length === 0 || params.length % header.length !== 0) { throw new Error('Table column count mismatch'); } const chunkSize = header.length; const out = []; for (let i = 0; i < params.length; i += chunkSize) { const chunk = params.slice(i, i + chunkSize); out.push(Object.fromEntries(chunk.map((v, i) => [header[i], v]))); } return out; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/themes/000077500000000000000000000000001433273745700231365ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/themes/erDiagram-oldHardcodedValues.ts000066400000000000000000000005071433273745700311350ustar00rootroot00000000000000/** * @file Values that have been hardcoded in src/diagrams/er/styles.js. These can be used by * theme-_._ files to maintain display styles until themes, styles, renderers are revised. -- * 2022-09-22 */ export const oldAttributeBackgroundColorOdd = '#ffffff'; export const oldAttributeBackgroundColorEven = '#f2f2f2'; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/themes/index.js000066400000000000000000000012771433273745700246120ustar00rootroot00000000000000import { getThemeVariables as baseThemeVariables } from './theme-base'; import { getThemeVariables as darkThemeVariables } from './theme-dark'; import { getThemeVariables as defaultThemeVariables } from './theme-default'; import { getThemeVariables as forestThemeVariables } from './theme-forest'; import { getThemeVariables as neutralThemeVariables } from './theme-neutral'; export default { base: { getThemeVariables: baseThemeVariables, }, dark: { getThemeVariables: darkThemeVariables, }, default: { getThemeVariables: defaultThemeVariables, }, forest: { getThemeVariables: forestThemeVariables, }, neutral: { getThemeVariables: neutralThemeVariables, }, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/themes/theme-base.js000066400000000000000000000355361433273745700255220ustar00rootroot00000000000000import { darken, lighten, adjust, invert } from 'khroma'; import { mkBorder } from './theme-helpers'; import { oldAttributeBackgroundColorEven, oldAttributeBackgroundColorOdd, } from './erDiagram-oldHardcodedValues'; class Theme { constructor() { /** # Base variables */ /** * - Background - used to know what the background color is of the diagram. This is used for * deducing colors for instance line color. Default value is #f4f4f4. */ this.background = '#f4f4f4'; this.darkMode = false; this.primaryColor = '#fff4dd'; this.noteBkgColor = '#fff5ad'; this.noteTextColor = '#333'; this.THEME_COLOR_LIMIT = 12; // dark this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif'; this.fontSize = '16px'; } updateColors() { // The || is to make sure that if the variable has been defined by a user override that value is to be used /* Main */ this.primaryTextColor = this.primaryTextColor || (this.darkMode ? '#eee' : '#333'); // invert(this.primaryColor); this.secondaryColor = this.secondaryColor || adjust(this.primaryColor, { h: -120 }); this.tertiaryColor = this.tertiaryColor || adjust(this.primaryColor, { h: 180, l: 5 }); this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode); this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode); this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode); this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode); this.noteBkgColor = this.noteBkgColor || '#fff5ad'; this.noteTextColor = this.noteTextColor || '#333'; this.secondaryTextColor = this.secondaryTextColor || invert(this.secondaryColor); this.tertiaryTextColor = this.tertiaryTextColor || invert(this.tertiaryColor); this.lineColor = this.lineColor || invert(this.background); this.textColor = this.textColor || this.primaryTextColor; /* Flowchart variables */ this.nodeBkg = this.nodeBkg || this.primaryColor; this.mainBkg = this.mainBkg || this.primaryColor; this.nodeBorder = this.nodeBorder || this.primaryBorderColor; this.clusterBkg = this.clusterBkg || this.tertiaryColor; this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor; this.defaultLinkColor = this.defaultLinkColor || this.lineColor; this.titleColor = this.titleColor || this.tertiaryTextColor; this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); this.nodeTextColor = this.nodeTextColor || this.primaryTextColor; /* Sequence Diagram variables */ // this.actorBorder = lighten(this.border1, 0.5); this.actorBorder = this.actorBorder || this.primaryBorderColor; this.actorBkg = this.actorBkg || this.mainBkg; this.actorTextColor = this.actorTextColor || this.primaryTextColor; this.actorLineColor = this.actorLineColor || 'grey'; this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg; this.signalColor = this.signalColor || this.textColor; this.signalTextColor = this.signalTextColor || this.textColor; this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder; this.labelTextColor = this.labelTextColor || this.actorTextColor; this.loopTextColor = this.loopTextColor || this.actorTextColor; this.activationBorderColor = this.activationBorderColor || darken(this.secondaryColor, 10); this.activationBkgColor = this.activationBkgColor || this.secondaryColor; this.sequenceNumberColor = this.sequenceNumberColor || invert(this.lineColor); /* Gantt chart variables */ this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor; this.altSectionBkgColor = this.altSectionBkgColor || 'white'; this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor; this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor; this.excludeBkgColor = this.excludeBkgColor || '#eeeeee'; this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor; this.taskBkgColor = this.taskBkgColor || this.primaryColor; this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor; this.activeTaskBkgColor = this.activeTaskBkgColor || lighten(this.primaryColor, 23); this.gridColor = this.gridColor || 'lightgrey'; this.doneTaskBkgColor = this.doneTaskBkgColor || 'lightgrey'; this.doneTaskBorderColor = this.doneTaskBorderColor || 'grey'; this.critBorderColor = this.critBorderColor || '#ff8888'; this.critBkgColor = this.critBkgColor || 'red'; this.todayLineColor = this.todayLineColor || 'red'; this.taskTextColor = this.taskTextColor || this.textColor; this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor; this.taskTextLightColor = this.taskTextLightColor || this.textColor; this.taskTextColor = this.taskTextColor || this.primaryTextColor; this.taskTextDarkColor = this.taskTextDarkColor || this.textColor; this.taskTextClickableColor = this.taskTextClickableColor || '#003163'; /* Sequence Diagram variables */ this.personBorder = this.personBorder || this.primaryBorderColor; this.personBkg = this.personBkg || this.mainBkg; /* state colors */ this.transitionColor = this.transitionColor || this.lineColor; this.transitionLabelColor = this.transitionLabelColor || this.textColor; /* The color of the text tables of the states*/ this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor; this.stateBkg = this.stateBkg || this.mainBkg; this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg; this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor; this.altBackground = this.altBackground || this.tertiaryColor; this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg; this.compositeBorder = this.compositeBorder || this.nodeBorder; this.innerEndBackground = this.nodeBorder; this.errorBkgColor = this.errorBkgColor || this.tertiaryColor; this.errorTextColor = this.errorTextColor || this.tertiaryTextColor; this.transitionColor = this.transitionColor || this.lineColor; this.specialStateColor = this.lineColor; /* Color Scale */ /* Each color-set will have a background, a forgroupnd and a border color */ this.cScale0 = this.cScale0 || this.primaryColor; this.cScale1 = this.cScale1 || this.secondaryColor; this.cScale2 = this.cScale2 || this.tertiaryColor; this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 }); this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 }); this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 }); this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 }); this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 }); this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210, l: 150 }); this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 }); this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 }); this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 }); if (this.darkMode) { for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScale' + i] = darken(this['cScale' + i], 75); } } else { for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScale' + i] = darken(this['cScale' + i], 25); } } // Setup the inverted color for the set for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScaleInv' + i] = this['cScaleInv' + i] || invert(this['cScale' + i]); } // Setup the peer color for the set, useful for borders for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { if (this.darkMode) { this['cScalePeer' + i] = this['cScalePeer' + i] || lighten(this['cScale' + i], 10); } else { this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 10); } } // Setup teh label color for the set this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor; for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor; } /* class */ this.classText = this.classText || this.textColor; /* user-journey */ this.fillType0 = this.fillType0 || this.primaryColor; this.fillType1 = this.fillType1 || this.secondaryColor; this.fillType2 = this.fillType2 || adjust(this.primaryColor, { h: 64 }); this.fillType3 = this.fillType3 || adjust(this.secondaryColor, { h: 64 }); this.fillType4 = this.fillType4 || adjust(this.primaryColor, { h: -64 }); this.fillType5 = this.fillType5 || adjust(this.secondaryColor, { h: -64 }); this.fillType6 = this.fillType6 || adjust(this.primaryColor, { h: 128 }); this.fillType7 = this.fillType7 || adjust(this.secondaryColor, { h: 128 }); /* pie */ this.pie1 = this.pie1 || this.primaryColor; this.pie2 = this.pie2 || this.secondaryColor; this.pie3 = this.pie3 || this.tertiaryColor; this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -10 }); this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -10 }); this.pie6 = this.pie6 || adjust(this.tertiaryColor, { l: -10 }); this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -10 }); this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -10 }); this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: 0 }); this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -20 }); this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -60, l: -20 }); this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -10 }); this.pieTitleTextSize = this.pieTitleTextSize || '25px'; this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor; this.pieSectionTextSize = this.pieSectionTextSize || '17px'; this.pieSectionTextColor = this.pieSectionTextColor || this.textColor; this.pieLegendTextSize = this.pieLegendTextSize || '17px'; this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; this.pieStrokeColor = this.pieStrokeColor || 'black'; this.pieStrokeWidth = this.pieStrokeWidth || '2px'; this.pieOpacity = this.pieOpacity || '0.7'; /* requirement-diagram */ this.requirementBackground = this.requirementBackground || this.primaryColor; this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor; this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor; this.requirementTextColor = this.requirementTextColor || this.primaryTextColor; this.relationColor = this.relationColor || this.lineColor; this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); this.relationLabelColor = this.relationLabelColor || this.actorTextColor; /* git */ this.git0 = this.git0 || this.primaryColor; this.git1 = this.git1 || this.secondaryColor; this.git2 = this.git2 || this.tertiaryColor; this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 }); this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 }); this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 }); this.git6 = this.git6 || adjust(this.primaryColor, { h: +60 }); this.git7 = this.git7 || adjust(this.primaryColor, { h: +120 }); if (this.darkMode) { this.git0 = lighten(this.git0, 25); this.git1 = lighten(this.git1, 25); this.git2 = lighten(this.git2, 25); this.git3 = lighten(this.git3, 25); this.git4 = lighten(this.git4, 25); this.git5 = lighten(this.git5, 25); this.git6 = lighten(this.git6, 25); this.git7 = lighten(this.git7, 25); } else { this.git0 = darken(this.git0, 25); this.git1 = darken(this.git1, 25); this.git2 = darken(this.git2, 25); this.git3 = darken(this.git3, 25); this.git4 = darken(this.git4, 25); this.git5 = darken(this.git5, 25); this.git6 = darken(this.git6, 25); this.git7 = darken(this.git7, 25); } this.gitInv0 = this.gitInv0 || invert(this.git0); this.gitInv1 = this.gitInv1 || invert(this.git1); this.gitInv2 = this.gitInv2 || invert(this.git2); this.gitInv3 = this.gitInv3 || invert(this.git3); this.gitInv4 = this.gitInv4 || invert(this.git4); this.gitInv5 = this.gitInv5 || invert(this.git5); this.gitInv6 = this.gitInv6 || invert(this.git6); this.gitInv7 = this.gitInv7 || invert(this.git7); this.branchLabelColor = this.branchLabelColor || (this.darkMode ? 'black' : this.labelTextColor); this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor; this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor; this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor; this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor; this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor; this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor; this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor; this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor; this.tagLabelColor = this.tagLabelColor || this.primaryTextColor; this.tagLabelBackground = this.tagLabelBackground || this.primaryColor; this.tagLabelBorder = this.tagBorder || this.primaryBorderColor; this.tagLabelFontSize = this.tagLabelFontSize || '10px'; this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor; this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor; this.commitLabelFontSize = this.commitLabelFontSize || '10px'; /* -------------------------------------------------- */ /* EntityRelationship diagrams */ this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd; this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven; /* -------------------------------------------------- */ } calculate(overrides) { if (typeof overrides !== 'object') { // Calculate colors form base colors this.updateColors(); return; } const keys = Object.keys(overrides); // Copy values from overrides, this is mainly for base colors keys.forEach((k) => { this[k] = overrides[k]; }); // Calculate colors form base colors this.updateColors(); // Copy values from overrides again in case of an override of derived value keys.forEach((k) => { this[k] = overrides[k]; }); } } export const getThemeVariables = (userOverrides) => { const theme = new Theme(); theme.calculate(userOverrides); return theme; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/themes/theme-dark.js000066400000000000000000000305111433273745700255150ustar00rootroot00000000000000import { invert, lighten, darken, rgba, adjust } from 'khroma'; import { mkBorder } from './theme-helpers'; class Theme { constructor() { this.background = '#333'; this.primaryColor = '#1f2020'; this.secondaryColor = lighten(this.primaryColor, 16); this.tertiaryColor = adjust(this.primaryColor, { h: -160 }); this.primaryBorderColor = invert(this.background); this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode); this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode); this.primaryTextColor = invert(this.primaryColor); this.secondaryTextColor = invert(this.secondaryColor); this.tertiaryTextColor = invert(this.tertiaryColor); this.lineColor = invert(this.background); this.textColor = invert(this.background); this.mainBkg = '#1f2020'; this.secondBkg = 'calculated'; this.mainContrastColor = 'lightgrey'; this.darkTextColor = lighten(invert('#323D47'), 10); this.lineColor = 'calculated'; this.border1 = '#81B1DB'; this.border2 = rgba(255, 255, 255, 0.25); this.arrowheadColor = 'calculated'; this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif'; this.fontSize = '16px'; this.labelBackground = '#181818'; this.textColor = '#ccc'; this.THEME_COLOR_LIMIT = 12; /* Flowchart variables */ this.nodeBkg = 'calculated'; this.nodeBorder = 'calculated'; this.clusterBkg = 'calculated'; this.clusterBorder = 'calculated'; this.defaultLinkColor = 'calculated'; this.titleColor = '#F9FFFE'; this.edgeLabelBackground = 'calculated'; /* Sequence Diagram variables */ this.actorBorder = 'calculated'; this.actorBkg = 'calculated'; this.actorTextColor = 'calculated'; this.actorLineColor = 'calculated'; this.signalColor = 'calculated'; this.signalTextColor = 'calculated'; this.labelBoxBkgColor = 'calculated'; this.labelBoxBorderColor = 'calculated'; this.labelTextColor = 'calculated'; this.loopTextColor = 'calculated'; this.noteBorderColor = 'calculated'; this.noteBkgColor = '#fff5ad'; this.noteTextColor = 'calculated'; this.activationBorderColor = 'calculated'; this.activationBkgColor = 'calculated'; this.sequenceNumberColor = 'black'; /* Gantt chart variables */ this.sectionBkgColor = darken('#EAE8D9', 30); this.altSectionBkgColor = 'calculated'; this.sectionBkgColor2 = '#EAE8D9'; this.taskBorderColor = rgba(255, 255, 255, 70); this.taskBkgColor = 'calculated'; this.taskTextColor = 'calculated'; this.taskTextLightColor = 'calculated'; this.taskTextOutsideColor = 'calculated'; this.taskTextClickableColor = '#003163'; this.activeTaskBorderColor = rgba(255, 255, 255, 50); this.activeTaskBkgColor = '#81B1DB'; this.gridColor = 'calculated'; this.doneTaskBkgColor = 'calculated'; this.doneTaskBorderColor = 'grey'; this.critBorderColor = '#E83737'; this.critBkgColor = '#E83737'; this.taskTextDarkColor = 'calculated'; this.todayLineColor = '#DB5757'; /* C4 Context Diagram variables */ this.personBorder = 'calculated'; this.personBkg = 'calculated'; /* state colors */ this.labelColor = 'calculated'; this.errorBkgColor = '#a44141'; this.errorTextColor = '#ddd'; } updateColors() { this.secondBkg = lighten(this.mainBkg, 16); this.lineColor = this.mainContrastColor; this.arrowheadColor = this.mainContrastColor; /* Flowchart variables */ this.nodeBkg = this.mainBkg; this.nodeBorder = this.border1; this.clusterBkg = this.secondBkg; this.clusterBorder = this.border2; this.defaultLinkColor = this.lineColor; this.edgeLabelBackground = lighten(this.labelBackground, 25); /* Sequence Diagram variables */ this.actorBorder = this.border1; this.actorBkg = this.mainBkg; this.actorTextColor = this.mainContrastColor; this.actorLineColor = this.mainContrastColor; this.signalColor = this.mainContrastColor; this.signalTextColor = this.mainContrastColor; this.labelBoxBkgColor = this.actorBkg; this.labelBoxBorderColor = this.actorBorder; this.labelTextColor = this.mainContrastColor; this.loopTextColor = this.mainContrastColor; this.noteBorderColor = this.secondaryBorderColor; this.noteBkgColor = this.secondBkg; this.noteTextColor = this.secondaryTextColor; this.activationBorderColor = this.border1; this.activationBkgColor = this.secondBkg; /* Gantt chart variables */ this.altSectionBkgColor = this.background; this.taskBkgColor = lighten(this.mainBkg, 23); this.taskTextColor = this.darkTextColor; this.taskTextLightColor = this.mainContrastColor; this.taskTextOutsideColor = this.taskTextLightColor; this.gridColor = this.mainContrastColor; this.doneTaskBkgColor = this.mainContrastColor; this.taskTextDarkColor = this.darkTextColor; /* state colors */ this.transitionColor = this.transitionColor || this.lineColor; this.transitionLabelColor = this.transitionLabelColor || this.textColor; this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor; this.stateBkg = this.stateBkg || this.mainBkg; this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg; this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor; this.altBackground = this.altBackground || '#555'; this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg; this.compositeBorder = this.compositeBorder || this.nodeBorder; this.innerEndBackground = this.primaryBorderColor; this.specialStateColor = '#f4f4f4'; // this.lineColor; this.errorBkgColor = this.errorBkgColor || this.tertiaryColor; this.errorTextColor = this.errorTextColor || this.tertiaryTextColor; this.fillType0 = this.primaryColor; this.fillType1 = this.secondaryColor; this.fillType2 = adjust(this.primaryColor, { h: 64 }); this.fillType3 = adjust(this.secondaryColor, { h: 64 }); this.fillType4 = adjust(this.primaryColor, { h: -64 }); this.fillType5 = adjust(this.secondaryColor, { h: -64 }); this.fillType6 = adjust(this.primaryColor, { h: 128 }); this.fillType7 = adjust(this.secondaryColor, { h: 128 }); /* cScale */ this.cScale1 = this.cScale1 || '#0b0000'; this.cScale2 = this.cScale2 || '#4d1037'; this.cScale3 = this.cScale3 || '#3f5258'; this.cScale4 = this.cScale4 || '#4f2f1b'; this.cScale5 = this.cScale5 || '#6e0a0a'; this.cScale6 = this.cScale6 || '#3b0048'; this.cScale7 = this.cScale7 || '#995a01'; this.cScale8 = this.cScale8 || '#154706'; this.cScale9 = this.cScale9 || '#161722'; this.cScale10 = this.cScale10 || '#00296f'; this.cScale11 = this.cScale11 || '#01629c'; this.cScale12 = this.cScale12 || '#010029'; /* Color Scale */ /* Each color-set will have a background, a forgroupnd and a border color */ this.cScale0 = this.cScale0 || this.primaryColor; this.cScale1 = this.cScale1 || this.secondaryColor; this.cScale2 = this.cScale2 || this.tertiaryColor; this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 }); this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 }); this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 }); this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 }); this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 }); this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210 }); this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 }); this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 }); this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 }); // Setup the inverted color for the set for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScaleInv' + i] = this['cScaleInv' + i] || invert(this['cScale' + i]); } // Setup the peer color for the set, useful for borders for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScalePeer' + i] = this['cScalePeer' + i] || lighten(this['cScale' + i], 10); } // Setup teh label color for the set this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? 'black' : this.labelTextColor); for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor; } /* Pie diagram */ for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['pie' + i] = this['cScale' + i]; } this.pieTitleTextSize = this.pieTitleTextSize || '25px'; this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor; this.pieSectionTextSize = this.pieSectionTextSize || '17px'; this.pieSectionTextColor = this.pieSectionTextColor || this.textColor; this.pieLegendTextSize = this.pieLegendTextSize || '17px'; this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; this.pieStrokeColor = this.pieStrokeColor || 'black'; this.pieStrokeWidth = this.pieStrokeWidth || '2px'; this.pieOpacity = this.pieOpacity || '0.7'; /* class */ this.classText = this.primaryTextColor; /* requirement-diagram */ this.requirementBackground = this.requirementBackground || this.primaryColor; this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor; this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor; this.requirementTextColor = this.requirementTextColor || this.primaryTextColor; this.relationColor = this.relationColor || this.lineColor; this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); this.relationLabelColor = this.relationLabelColor || this.actorTextColor; /* git */ this.git0 = lighten(this.secondaryColor, 20); this.git1 = lighten(this.pie2 || this.secondaryColor, 20); this.git2 = lighten(this.pie3 || this.tertiaryColor, 20); this.git3 = lighten(this.pie4 || adjust(this.primaryColor, { h: -30 }), 20); this.git4 = lighten(this.pie5 || adjust(this.primaryColor, { h: -60 }), 20); this.git5 = lighten(this.pie6 || adjust(this.primaryColor, { h: -90 }), 10); this.git6 = lighten(this.pie7 || adjust(this.primaryColor, { h: +60 }), 10); this.git7 = lighten(this.pie8 || adjust(this.primaryColor, { h: +120 }), 20); this.gitInv0 = this.gitInv0 || invert(this.git0); this.gitInv1 = this.gitInv1 || invert(this.git1); this.gitInv2 = this.gitInv2 || invert(this.git2); this.gitInv3 = this.gitInv3 || invert(this.git3); this.gitInv4 = this.gitInv4 || invert(this.git4); this.gitInv5 = this.gitInv5 || invert(this.git5); this.gitInv6 = this.gitInv6 || invert(this.git6); this.gitInv7 = this.gitInv7 || invert(this.git7); this.tagLabelColor = this.tagLabelColor || this.primaryTextColor; this.tagLabelBackground = this.tagLabelBackground || this.primaryColor; this.tagLabelBorder = this.tagBorder || this.primaryBorderColor; this.tagLabelFontSize = this.tagLabelFontSize || '10px'; this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor; this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor; this.commitLabelFontSize = this.commitLabelFontSize || '10px'; /* -------------------------------------------------- */ /* EntityRelationship diagrams */ this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || lighten(this.background, 12); this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || lighten(this.background, 2); /* -------------------------------------------------- */ } calculate(overrides) { if (typeof overrides !== 'object') { // Calculate colors form base colors this.updateColors(); return; } const keys = Object.keys(overrides); // Copy values from overrides, this is mainly for base colors keys.forEach((k) => { this[k] = overrides[k]; }); // Calculate colors form base colors this.updateColors(); // Copy values from overrides again in case of an override of derived value keys.forEach((k) => { this[k] = overrides[k]; }); } } export const getThemeVariables = (userOverrides) => { const theme = new Theme(); theme.calculate(userOverrides); return theme; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/themes/theme-default.js000066400000000000000000000350201433273745700262200ustar00rootroot00000000000000import { invert, lighten, rgba, adjust, darken } from 'khroma'; import { mkBorder } from './theme-helpers'; import { oldAttributeBackgroundColorEven, oldAttributeBackgroundColorOdd, } from './erDiagram-oldHardcodedValues'; class Theme { constructor() { /* Base variables */ this.background = '#f4f4f4'; this.primaryColor = '#ECECFF'; this.secondaryColor = adjust(this.primaryColor, { h: 120 }); this.secondaryColor = '#ffffde'; this.tertiaryColor = adjust(this.primaryColor, { h: -160 }); this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode); this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode); this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode); // this.noteBorderColor = mkBorder(this.noteBkgColor, this.darkMode); this.primaryTextColor = invert(this.primaryColor); this.secondaryTextColor = invert(this.secondaryColor); this.tertiaryTextColor = invert(this.tertiaryColor); this.lineColor = invert(this.background); this.textColor = invert(this.background); this.background = 'white'; this.mainBkg = '#ECECFF'; this.secondBkg = '#ffffde'; this.lineColor = '#333333'; this.border1 = '#9370DB'; this.border2 = '#aaaa33'; this.arrowheadColor = '#333333'; this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif'; this.fontSize = '16px'; this.labelBackground = '#e8e8e8'; this.textColor = '#333'; this.THEME_COLOR_LIMIT = 12; /* Flowchart variables */ this.nodeBkg = 'calculated'; this.nodeBorder = 'calculated'; this.clusterBkg = 'calculated'; this.clusterBorder = 'calculated'; this.defaultLinkColor = 'calculated'; this.titleColor = 'calculated'; this.edgeLabelBackground = 'calculated'; /* Sequence Diagram variables */ this.actorBorder = 'calculated'; this.actorBkg = 'calculated'; this.actorTextColor = 'black'; this.actorLineColor = 'grey'; this.signalColor = 'calculated'; this.signalTextColor = 'calculated'; this.labelBoxBkgColor = 'calculated'; this.labelBoxBorderColor = 'calculated'; this.labelTextColor = 'calculated'; this.loopTextColor = 'calculated'; this.noteBorderColor = 'calculated'; this.noteBkgColor = '#fff5ad'; this.noteTextColor = 'calculated'; this.activationBorderColor = '#666'; this.activationBkgColor = '#f4f4f4'; this.sequenceNumberColor = 'white'; /* Gantt chart variables */ this.sectionBkgColor = 'calculated'; this.altSectionBkgColor = 'calculated'; this.sectionBkgColor2 = 'calculated'; this.excludeBkgColor = '#eeeeee'; this.taskBorderColor = 'calculated'; this.taskBkgColor = 'calculated'; this.taskTextLightColor = 'calculated'; this.taskTextColor = this.taskTextLightColor; this.taskTextDarkColor = 'calculated'; this.taskTextOutsideColor = this.taskTextDarkColor; this.taskTextClickableColor = 'calculated'; this.activeTaskBorderColor = 'calculated'; this.activeTaskBkgColor = 'calculated'; this.gridColor = 'calculated'; this.doneTaskBkgColor = 'calculated'; this.doneTaskBorderColor = 'calculated'; this.critBorderColor = 'calculated'; this.critBkgColor = 'calculated'; this.todayLineColor = 'calculated'; this.sectionBkgColor = rgba(102, 102, 255, 0.49); this.altSectionBkgColor = 'white'; this.sectionBkgColor2 = '#fff400'; this.taskBorderColor = '#534fbc'; this.taskBkgColor = '#8a90dd'; this.taskTextLightColor = 'white'; this.taskTextColor = 'calculated'; this.taskTextDarkColor = 'black'; this.taskTextOutsideColor = 'calculated'; this.taskTextClickableColor = '#003163'; this.activeTaskBorderColor = '#534fbc'; this.activeTaskBkgColor = '#bfc7ff'; this.gridColor = 'lightgrey'; this.doneTaskBkgColor = 'lightgrey'; this.doneTaskBorderColor = 'grey'; this.critBorderColor = '#ff8888'; this.critBkgColor = 'red'; this.todayLineColor = 'red'; /* C4 Context Diagram variables */ this.personBorder = 'calculated'; this.personBkg = 'calculated'; /* state colors */ this.labelColor = 'black'; this.errorBkgColor = '#552222'; this.errorTextColor = '#552222'; this.updateColors(); } updateColors() { /* Color Scale */ /* Each color-set will have a background, a forgroupnd and a border color */ this.cScale0 = this.cScale0 || this.primaryColor; this.cScale1 = this.cScale1 || this.secondaryColor; this.cScale2 = this.cScale2 || this.tertiaryColor; this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 }); this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 }); this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 }); this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 }); this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 }); this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210 }); this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 }); this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 }); this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 }); this['cScalePeer' + 1] = this['cScalePeer' + 1] || darken(this.secondaryColor, 45); this['cScalePeer' + 2] = this['cScalePeer' + 2] || darken(this.tertiaryColor, 40); for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { // Setup the peer color for the set, useful for borders this['cScale' + i] = darken(this['cScale' + i], 10); this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 25); } // Setup the inverted color for the set for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScaleInv' + i] = this['cScaleInv' + i] || adjust(this['cScale' + i], { h: 180 }); } // Setup the label color for the set this.scaleLabelColor = this.scaleLabelColor !== 'calculated' && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor; if (this.labelTextColor !== 'calculated') { this.cScaleLabel0 = this.cScaleLabel0 || invert(this.labelTextColor); this.cScaleLabel3 = this.cScaleLabel3 || invert(this.labelTextColor); for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.labelTextColor; } } /* Flowchart variables */ this.nodeBkg = this.mainBkg; this.nodeBorder = this.border1; // border 1 this.clusterBkg = this.secondBkg; this.clusterBorder = this.border2; this.defaultLinkColor = this.lineColor; this.titleColor = this.textColor; this.edgeLabelBackground = this.labelBackground; /* Sequence Diagram variables */ // this.actorBorder = lighten(this.border1, 0.5); this.actorBorder = lighten(this.border1, 23); this.actorBkg = this.mainBkg; this.labelBoxBkgColor = this.actorBkg; this.signalColor = this.textColor; this.signalTextColor = this.textColor; this.labelBoxBorderColor = this.actorBorder; this.labelTextColor = this.actorTextColor; this.loopTextColor = this.actorTextColor; this.noteBorderColor = this.border2; this.noteTextColor = this.actorTextColor; /* Gantt chart variables */ this.taskTextColor = this.taskTextLightColor; this.taskTextOutsideColor = this.taskTextDarkColor; /* state colors */ this.transitionColor = this.transitionColor || this.lineColor; this.transitionLabelColor = this.transitionLabelColor || this.textColor; this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor; this.stateBkg = this.stateBkg || this.mainBkg; this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg; this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor; this.altBackground = this.altBackground || '#f0f0f0'; this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg; this.compositeBorder = this.compositeBorder || this.nodeBorder; this.innerEndBackground = this.nodeBorder; this.specialStateColor = this.lineColor; this.errorBkgColor = this.errorBkgColor || this.tertiaryColor; this.errorTextColor = this.errorTextColor || this.tertiaryTextColor; this.transitionColor = this.transitionColor || this.lineColor; /* class */ this.classText = this.primaryTextColor; /* journey */ this.fillType0 = this.primaryColor; this.fillType1 = this.secondaryColor; this.fillType2 = adjust(this.primaryColor, { h: 64 }); this.fillType3 = adjust(this.secondaryColor, { h: 64 }); this.fillType4 = adjust(this.primaryColor, { h: -64 }); this.fillType5 = adjust(this.secondaryColor, { h: -64 }); this.fillType6 = adjust(this.primaryColor, { h: 128 }); this.fillType7 = adjust(this.secondaryColor, { h: 128 }); /* pie */ this.pie1 = this.pie1 || this.primaryColor; this.pie2 = this.pie2 || this.secondaryColor; this.pie3 = this.pie3 || adjust(this.tertiaryColor, { l: -40 }); this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -10 }); this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -30 }); this.pie6 = this.pie6 || adjust(this.tertiaryColor, { l: -20 }); this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -20 }); this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -40 }); this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: -40 }); this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -40 }); this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -90, l: -40 }); this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -30 }); this.pieTitleTextSize = this.pieTitleTextSize || '25px'; this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor; this.pieSectionTextSize = this.pieSectionTextSize || '17px'; this.pieSectionTextColor = this.pieSectionTextColor || this.textColor; this.pieLegendTextSize = this.pieLegendTextSize || '17px'; this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; this.pieStrokeColor = this.pieStrokeColor || 'black'; this.pieStrokeWidth = this.pieStrokeWidth || '2px'; this.pieOpacity = this.pieOpacity || '0.7'; /* requirement-diagram */ this.requirementBackground = this.requirementBackground || this.primaryColor; this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor; this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor; this.requirementTextColor = this.requirementTextColor || this.primaryTextColor; this.relationColor = this.relationColor || this.lineColor; this.relationLabelBackground = this.relationLabelBackground || this.labelBackground; this.relationLabelColor = this.relationLabelColor || this.actorTextColor; /* git */ this.git0 = this.git0 || this.primaryColor; this.git1 = this.git1 || this.secondaryColor; this.git2 = this.git2 || this.tertiaryColor; this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 }); this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 }); this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 }); this.git6 = this.git6 || adjust(this.primaryColor, { h: +60 }); this.git7 = this.git7 || adjust(this.primaryColor, { h: +120 }); if (this.darkMode) { this.git0 = lighten(this.git0, 25); this.git1 = lighten(this.git1, 25); this.git2 = lighten(this.git2, 25); this.git3 = lighten(this.git3, 25); this.git4 = lighten(this.git4, 25); this.git5 = lighten(this.git5, 25); this.git6 = lighten(this.git6, 25); this.git7 = lighten(this.git7, 25); } else { this.git0 = darken(this.git0, 25); this.git1 = darken(this.git1, 25); this.git2 = darken(this.git2, 25); this.git3 = darken(this.git3, 25); this.git4 = darken(this.git4, 25); this.git5 = darken(this.git5, 25); this.git6 = darken(this.git6, 25); this.git7 = darken(this.git7, 25); } this.gitInv0 = this.gitInv0 || darken(invert(this.git0), 25); this.gitInv1 = this.gitInv1 || invert(this.git1); this.gitInv2 = this.gitInv2 || invert(this.git2); this.gitInv3 = this.gitInv3 || invert(this.git3); this.gitInv4 = this.gitInv4 || invert(this.git4); this.gitInv5 = this.gitInv5 || invert(this.git5); this.gitInv6 = this.gitInv6 || invert(this.git6); this.gitInv7 = this.gitInv7 || invert(this.git7); this.gitBranchLabel0 = this.gitBranchLabel0 || invert(this.labelTextColor); this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor; this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor; this.gitBranchLabel3 = this.gitBranchLabel3 || invert(this.labelTextColor); this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor; this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor; this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor; this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor; this.tagLabelColor = this.tagLabelColor || this.primaryTextColor; this.tagLabelBackground = this.tagLabelBackground || this.primaryColor; this.tagLabelBorder = this.tagBorder || this.primaryBorderColor; this.tagLabelFontSize = this.tagLabelFontSize || '10px'; this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor; this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor; this.commitLabelFontSize = this.commitLabelFontSize || '10px'; /* -------------------------------------------------- */ /* EntityRelationship diagrams */ this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd; this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven; /* -------------------------------------------------- */ } calculate(overrides) { if (typeof overrides !== 'object') { // Calculate colors form base colors this.updateColors(); return; } const keys = Object.keys(overrides); // Copy values from overrides, this is mainly for base colors keys.forEach((k) => { this[k] = overrides[k]; }); // Calculate colors form base colors this.updateColors(); // Copy values from overrides again in case of an override of derived value keys.forEach((k) => { this[k] = overrides[k]; }); } } export const getThemeVariables = (userOverrides) => { const theme = new Theme(); theme.calculate(userOverrides); return theme; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/themes/theme-forest.js000066400000000000000000000310021433273745700260720ustar00rootroot00000000000000import { darken, lighten, adjust, invert } from 'khroma'; import { mkBorder } from './theme-helpers'; import { oldAttributeBackgroundColorEven, oldAttributeBackgroundColorOdd, } from './erDiagram-oldHardcodedValues'; class Theme { constructor() { /* Base vales */ this.background = '#f4f4f4'; this.primaryColor = '#cde498'; this.secondaryColor = '#cdffb2'; this.background = 'white'; this.mainBkg = '#cde498'; this.secondBkg = '#cdffb2'; this.lineColor = 'green'; this.border1 = '#13540c'; this.border2 = '#6eaa49'; this.arrowheadColor = 'green'; this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif'; this.fontSize = '16px'; this.tertiaryColor = lighten('#cde498', 10); this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode); this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode); this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode); this.primaryTextColor = invert(this.primaryColor); this.secondaryTextColor = invert(this.secondaryColor); this.tertiaryTextColor = invert(this.primaryColor); this.lineColor = invert(this.background); this.textColor = invert(this.background); this.THEME_COLOR_LIMIT = 12; /* Flowchart variables */ this.nodeBkg = 'calculated'; this.nodeBorder = 'calculated'; this.clusterBkg = 'calculated'; this.clusterBorder = 'calculated'; this.defaultLinkColor = 'calculated'; this.titleColor = '#333'; this.edgeLabelBackground = '#e8e8e8'; /* Sequence Diagram variables */ this.actorBorder = 'calculated'; this.actorBkg = 'calculated'; this.actorTextColor = 'black'; this.actorLineColor = 'grey'; this.signalColor = '#333'; this.signalTextColor = '#333'; this.labelBoxBkgColor = 'calculated'; this.labelBoxBorderColor = '#326932'; this.labelTextColor = 'calculated'; this.loopTextColor = 'calculated'; this.noteBorderColor = 'calculated'; this.noteBkgColor = '#fff5ad'; this.noteTextColor = 'calculated'; this.activationBorderColor = '#666'; this.activationBkgColor = '#f4f4f4'; this.sequenceNumberColor = 'white'; /* Gantt chart variables */ this.sectionBkgColor = '#6eaa49'; this.altSectionBkgColor = 'white'; this.sectionBkgColor2 = '#6eaa49'; this.excludeBkgColor = '#eeeeee'; this.taskBorderColor = 'calculated'; this.taskBkgColor = '#487e3a'; this.taskTextLightColor = 'white'; this.taskTextColor = 'calculated'; this.taskTextDarkColor = 'black'; this.taskTextOutsideColor = 'calculated'; this.taskTextClickableColor = '#003163'; this.activeTaskBorderColor = 'calculated'; this.activeTaskBkgColor = 'calculated'; this.gridColor = 'lightgrey'; this.doneTaskBkgColor = 'lightgrey'; this.doneTaskBorderColor = 'grey'; this.critBorderColor = '#ff8888'; this.critBkgColor = 'red'; this.todayLineColor = 'red'; /* C4 Context Diagram variables */ this.personBorder = 'calculated'; this.personBkg = 'calculated'; /* state colors */ this.labelColor = 'black'; this.errorBkgColor = '#552222'; this.errorTextColor = '#552222'; } updateColors() { /* Each color-set will have a background, a forgroupnd and a border color */ this.cScale0 = this.cScale0 || this.primaryColor; this.cScale1 = this.cScale1 || this.secondaryColor; this.cScale2 = this.cScale2 || this.tertiaryColor; this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 }); this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 }); this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 }); this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 }); this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 }); this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210 }); this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 }); this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 }); this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 }); this['cScalePeer' + 1] = this['cScalePeer' + 1] || darken(this.secondaryColor, 45); this['cScalePeer' + 2] = this['cScalePeer' + 2] || darken(this.tertiaryColor, 40); for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { // Setup the peer color for the set, useful for borders this['cScale' + i] = darken(this['cScale' + i], 10); this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 25); } // Setup the inverted color for the set for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScaleInv' + i] = this['cScaleInv' + i] || adjust(this['cScale' + i], { h: 180 }); } // Setup teh label color for the set this.scaleLabelColor = this.scaleLabelColor !== 'calculated' && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor; for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor; } /* Flowchart variables */ this.nodeBkg = this.mainBkg; this.nodeBorder = this.border1; this.clusterBkg = this.secondBkg; this.clusterBorder = this.border2; this.defaultLinkColor = this.lineColor; /* Sequence Diagram variables */ this.actorBorder = darken(this.mainBkg, 20); this.actorBkg = this.mainBkg; this.labelBoxBkgColor = this.actorBkg; this.labelTextColor = this.actorTextColor; this.loopTextColor = this.actorTextColor; this.noteBorderColor = this.border2; this.noteTextColor = this.actorTextColor; /* Gantt chart variables */ this.taskBorderColor = this.border1; this.taskTextColor = this.taskTextLightColor; this.taskTextOutsideColor = this.taskTextDarkColor; this.activeTaskBorderColor = this.taskBorderColor; this.activeTaskBkgColor = this.mainBkg; /* state colors */ this.transitionColor = this.transitionColor || this.lineColor; this.transitionLabelColor = this.transitionLabelColor || this.textColor; this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor; this.stateBkg = this.stateBkg || this.mainBkg; this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg; this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor; this.altBackground = this.altBackground || '#f0f0f0'; this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg; this.compositeBorder = this.compositeBorder || this.nodeBorder; this.innerEndBackground = this.primaryBorderColor; this.specialStateColor = this.lineColor; this.errorBkgColor = this.errorBkgColor || this.tertiaryColor; this.errorTextColor = this.errorTextColor || this.tertiaryTextColor; this.transitionColor = this.transitionColor || this.lineColor; /* class */ this.classText = this.primaryTextColor; /* journey */ this.fillType0 = this.primaryColor; this.fillType1 = this.secondaryColor; this.fillType2 = adjust(this.primaryColor, { h: 64 }); this.fillType3 = adjust(this.secondaryColor, { h: 64 }); this.fillType4 = adjust(this.primaryColor, { h: -64 }); this.fillType5 = adjust(this.secondaryColor, { h: -64 }); this.fillType6 = adjust(this.primaryColor, { h: 128 }); this.fillType7 = adjust(this.secondaryColor, { h: 128 }); /* pie */ this.pie1 = this.pie1 || this.primaryColor; this.pie2 = this.pie2 || this.secondaryColor; this.pie3 = this.pie3 || this.tertiaryColor; this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -30 }); this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -30 }); this.pie6 = this.pie6 || adjust(this.tertiaryColor, { h: +40, l: -40 }); this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -10 }); this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -10 }); this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: 0 }); this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -50 }); this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -60, l: -50 }); this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -50 }); this.pieTitleTextSize = this.pieTitleTextSize || '25px'; this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor; this.pieSectionTextSize = this.pieSectionTextSize || '17px'; this.pieSectionTextColor = this.pieSectionTextColor || this.textColor; this.pieLegendTextSize = this.pieLegendTextSize || '17px'; this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; this.pieStrokeColor = this.pieStrokeColor || 'black'; this.pieStrokeWidth = this.pieStrokeWidth || '2px'; this.pieOpacity = this.pieOpacity || '0.7'; /* requirement-diagram */ this.requirementBackground = this.requirementBackground || this.primaryColor; this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor; this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor; this.requirementTextColor = this.requirementTextColor || this.primaryTextColor; this.relationColor = this.relationColor || this.lineColor; this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground; this.relationLabelColor = this.relationLabelColor || this.actorTextColor; /* git */ this.git0 = this.git0 || this.primaryColor; this.git1 = this.git1 || this.secondaryColor; this.git2 = this.git2 || this.tertiaryColor; this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 }); this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 }); this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 }); this.git6 = this.git6 || adjust(this.primaryColor, { h: +60 }); this.git7 = this.git7 || adjust(this.primaryColor, { h: +120 }); if (this.darkMode) { this.git0 = lighten(this.git0, 25); this.git1 = lighten(this.git1, 25); this.git2 = lighten(this.git2, 25); this.git3 = lighten(this.git3, 25); this.git4 = lighten(this.git4, 25); this.git5 = lighten(this.git5, 25); this.git6 = lighten(this.git6, 25); this.git7 = lighten(this.git7, 25); } else { this.git0 = darken(this.git0, 25); this.git1 = darken(this.git1, 25); this.git2 = darken(this.git2, 25); this.git3 = darken(this.git3, 25); this.git4 = darken(this.git4, 25); this.git5 = darken(this.git5, 25); this.git6 = darken(this.git6, 25); this.git7 = darken(this.git7, 25); } this.gitInv0 = this.gitInv0 || invert(this.git0); this.gitInv1 = this.gitInv1 || invert(this.git1); this.gitInv2 = this.gitInv2 || invert(this.git2); this.gitInv3 = this.gitInv3 || invert(this.git3); this.gitInv4 = this.gitInv4 || invert(this.git4); this.gitInv5 = this.gitInv5 || invert(this.git5); this.gitInv6 = this.gitInv6 || invert(this.git6); this.gitInv7 = this.gitInv7 || invert(this.git7); this.tagLabelColor = this.tagLabelColor || this.primaryTextColor; this.tagLabelBackground = this.tagLabelBackground || this.primaryColor; this.tagLabelBorder = this.tagBorder || this.primaryBorderColor; this.tagLabelFontSize = this.tagLabelFontSize || '10px'; this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor; this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor; this.commitLabelFontSize = this.commitLabelFontSize || '10px'; /* -------------------------------------------------- */ /* EntityRelationship diagrams */ this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd; this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven; /* -------------------------------------------------- */ } calculate(overrides) { if (typeof overrides !== 'object') { // Calculate colors form base colors this.updateColors(); return; } const keys = Object.keys(overrides); // Copy values from overrides, this is mainly for base colors keys.forEach((k) => { this[k] = overrides[k]; }); // Calculate colors form base colors this.updateColors(); // Copy values from overrides again in case of an override of derived value keys.forEach((k) => { this[k] = overrides[k]; }); } } export const getThemeVariables = (userOverrides) => { const theme = new Theme(); theme.calculate(userOverrides); return theme; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/themes/theme-helpers.js000066400000000000000000000002341433273745700262350ustar00rootroot00000000000000import { adjust } from 'khroma'; export const mkBorder = (col, darkMode) => darkMode ? adjust(col, { s: -40, l: 10 }) : adjust(col, { s: -40, l: -10 }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/themes/theme-neutral.js000066400000000000000000000310031433273745700262430ustar00rootroot00000000000000import { invert, darken, lighten, adjust } from 'khroma'; import { mkBorder } from './theme-helpers'; import { oldAttributeBackgroundColorEven, oldAttributeBackgroundColorOdd, } from './erDiagram-oldHardcodedValues'; // const Color = require ( 'khroma/dist/color' ).default // Color.format.hex.stringify(Color.parse('hsl(210, 66.6666666667%, 95%)')); // => "#EAF2FB" class Theme { constructor() { this.primaryColor = '#eee'; this.contrast = '#707070'; this.secondaryColor = lighten(this.contrast, 55); this.background = '#ffffff'; // this.secondaryColor = adjust(this.primaryColor, { h: 120 }); this.tertiaryColor = adjust(this.primaryColor, { h: -160 }); this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode); this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode); this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode); // this.noteBorderColor = mkBorder(this.noteBkgColor, this.darkMode); this.primaryTextColor = invert(this.primaryColor); this.secondaryTextColor = invert(this.secondaryColor); this.tertiaryTextColor = invert(this.tertiaryColor); this.lineColor = invert(this.background); this.textColor = invert(this.background); // this.altBackground = lighten(this.contrast, 55); this.mainBkg = '#eee'; this.secondBkg = 'calculated'; this.lineColor = '#666'; this.border1 = '#999'; this.border2 = 'calculated'; this.note = '#ffa'; this.text = '#333'; this.critical = '#d42'; this.done = '#bbb'; this.arrowheadColor = '#333333'; this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif'; this.fontSize = '16px'; this.THEME_COLOR_LIMIT = 12; /* Flowchart variables */ this.nodeBkg = 'calculated'; this.nodeBorder = 'calculated'; this.clusterBkg = 'calculated'; this.clusterBorder = 'calculated'; this.defaultLinkColor = 'calculated'; this.titleColor = 'calculated'; this.edgeLabelBackground = 'white'; /* Sequence Diagram variables */ this.actorBorder = 'calculated'; this.actorBkg = 'calculated'; this.actorTextColor = 'calculated'; this.actorLineColor = 'calculated'; this.signalColor = 'calculated'; this.signalTextColor = 'calculated'; this.labelBoxBkgColor = 'calculated'; this.labelBoxBorderColor = 'calculated'; this.labelTextColor = 'calculated'; this.loopTextColor = 'calculated'; this.noteBorderColor = 'calculated'; this.noteBkgColor = 'calculated'; this.noteTextColor = 'calculated'; this.activationBorderColor = '#666'; this.activationBkgColor = '#f4f4f4'; this.sequenceNumberColor = 'white'; /* Gantt chart variables */ this.sectionBkgColor = 'calculated'; this.altSectionBkgColor = 'white'; this.sectionBkgColor2 = 'calculated'; this.excludeBkgColor = '#eeeeee'; this.taskBorderColor = 'calculated'; this.taskBkgColor = 'calculated'; this.taskTextLightColor = 'white'; this.taskTextColor = 'calculated'; this.taskTextDarkColor = 'calculated'; this.taskTextOutsideColor = 'calculated'; this.taskTextClickableColor = '#003163'; this.activeTaskBorderColor = 'calculated'; this.activeTaskBkgColor = 'calculated'; this.gridColor = 'calculated'; this.doneTaskBkgColor = 'calculated'; this.doneTaskBorderColor = 'calculated'; this.critBkgColor = 'calculated'; this.critBorderColor = 'calculated'; this.todayLineColor = 'calculated'; /* C4 Context Diagram variables */ this.personBorder = 'calculated'; this.personBkg = 'calculated'; /* state colors */ this.labelColor = 'black'; this.errorBkgColor = '#552222'; this.errorTextColor = '#552222'; } updateColors() { this.secondBkg = lighten(this.contrast, 55); this.border2 = this.contrast; /* Color Scale */ /* Each color-set will have a background, a forgroupnd and a border color */ this.cScale0 = this.cScale0 || '#555'; this.cScale1 = this.cScale1 || '#F4F4F4'; this.cScale2 = this.cScale2 || '#555'; this.cScale3 = this.cScale3 || '#BBB'; this.cScale4 = this.cScale4 || '#777'; this.cScale5 = this.cScale5 || '#999'; this.cScale6 = this.cScale6 || '#DDD'; this.cScale7 = this.cScale7 || '#FFF'; this.cScale8 = this.cScale8 || '#DDD'; this.cScale9 = this.cScale9 || '#BBB'; this.cScale10 = this.cScale10 || '#999'; this.cScale11 = this.cScale11 || '#777'; // Setup the inverted color for the set for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScaleInv' + i] = this['cScaleInv' + i] || invert(this['cScale' + i]); } // Setup the peer color for the set, useful for borders for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { if (this.darkMode) { this['cScalePeer' + i] = this['cScalePeer' + i] || lighten(this['cScale' + i], 10); } else { this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 10); } } // Setup the label color for the set this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? 'black' : this.labelTextColor); this['cScaleLabel0'] = this['cScaleLabel0'] || this.cScale1; this['cScaleLabel2'] = this['cScaleLabel2'] || this.cScale1; for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor; } /* Flowchart variables */ this.nodeBkg = this.mainBkg; this.nodeBorder = this.border1; this.clusterBkg = this.secondBkg; this.clusterBorder = this.border2; this.defaultLinkColor = this.lineColor; this.titleColor = this.text; /* Sequence Diagram variables */ this.actorBorder = lighten(this.border1, 23); this.actorBkg = this.mainBkg; this.actorTextColor = this.text; this.actorLineColor = this.lineColor; this.signalColor = this.text; this.signalTextColor = this.text; this.labelBoxBkgColor = this.actorBkg; this.labelBoxBorderColor = this.actorBorder; this.labelTextColor = this.text; this.loopTextColor = this.text; this.noteBorderColor = '#999'; this.noteBkgColor = '#666'; this.noteTextColor = '#fff'; /* Gantt chart variables */ this.sectionBkgColor = lighten(this.contrast, 30); this.sectionBkgColor2 = lighten(this.contrast, 30); this.taskBorderColor = darken(this.contrast, 10); this.taskBkgColor = this.contrast; this.taskTextColor = this.taskTextLightColor; this.taskTextDarkColor = this.text; this.taskTextOutsideColor = this.taskTextDarkColor; this.activeTaskBorderColor = this.taskBorderColor; this.activeTaskBkgColor = this.mainBkg; this.gridColor = lighten(this.border1, 30); this.doneTaskBkgColor = this.done; this.doneTaskBorderColor = this.lineColor; this.critBkgColor = this.critical; this.critBorderColor = darken(this.critBkgColor, 10); this.todayLineColor = this.critBkgColor; /* state colors */ this.transitionColor = this.transitionColor || '#000'; this.transitionLabelColor = this.transitionLabelColor || this.textColor; this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor; this.stateBkg = this.stateBkg || this.mainBkg; this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg; this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor; this.altBackground = this.altBackground || '#f4f4f4'; this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg; this.stateBorder = this.stateBorder || '#000'; this.innerEndBackground = this.primaryBorderColor; this.specialStateColor = '#222'; this.errorBkgColor = this.errorBkgColor || this.tertiaryColor; this.errorTextColor = this.errorTextColor || this.tertiaryTextColor; /* class */ this.classText = this.primaryTextColor; /* journey */ this.fillType0 = this.primaryColor; this.fillType1 = this.secondaryColor; this.fillType2 = adjust(this.primaryColor, { h: 64 }); this.fillType3 = adjust(this.secondaryColor, { h: 64 }); this.fillType4 = adjust(this.primaryColor, { h: -64 }); this.fillType5 = adjust(this.secondaryColor, { h: -64 }); this.fillType6 = adjust(this.primaryColor, { h: 128 }); this.fillType7 = adjust(this.secondaryColor, { h: 128 }); // /* pie */ /* Pie diagram */ for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { this['pie' + i] = this['cScale' + i]; } this.pie12 = this.pie0; this.pieTitleTextSize = this.pieTitleTextSize || '25px'; this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor; this.pieSectionTextSize = this.pieSectionTextSize || '17px'; this.pieSectionTextColor = this.pieSectionTextColor || this.textColor; this.pieLegendTextSize = this.pieLegendTextSize || '17px'; this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; this.pieStrokeColor = this.pieStrokeColor || 'black'; this.pieStrokeWidth = this.pieStrokeWidth || '2px'; this.pieOpacity = this.pieOpacity || '0.7'; /* requirement-diagram */ this.requirementBackground = this.requirementBackground || this.primaryColor; this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor; this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor; this.requirementTextColor = this.requirementTextColor || this.primaryTextColor; this.relationColor = this.relationColor || this.lineColor; this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground; this.relationLabelColor = this.relationLabelColor || this.actorTextColor; /* git */ this.git0 = darken(this.pie1, 25) || this.primaryColor; this.git1 = this.pie2 || this.secondaryColor; this.git2 = this.pie3 || this.tertiaryColor; this.git3 = this.pie4 || adjust(this.primaryColor, { h: -30 }); this.git4 = this.pie5 || adjust(this.primaryColor, { h: -60 }); this.git5 = this.pie6 || adjust(this.primaryColor, { h: -90 }); this.git6 = this.pie7 || adjust(this.primaryColor, { h: +60 }); this.git7 = this.pie8 || adjust(this.primaryColor, { h: +120 }); this.gitInv0 = this.gitInv0 || invert(this.git0); this.gitInv1 = this.gitInv1 || invert(this.git1); this.gitInv2 = this.gitInv2 || invert(this.git2); this.gitInv3 = this.gitInv3 || invert(this.git3); this.gitInv4 = this.gitInv4 || invert(this.git4); this.gitInv5 = this.gitInv5 || invert(this.git5); this.gitInv6 = this.gitInv6 || invert(this.git6); this.gitInv7 = this.gitInv7 || invert(this.git7); this.branchLabelColor = this.branchLabelColor || this.labelTextColor; this.gitBranchLabel0 = this.branchLabelColor; this.gitBranchLabel1 = 'white'; this.gitBranchLabel2 = this.branchLabelColor; this.gitBranchLabel3 = 'white'; this.gitBranchLabel4 = this.branchLabelColor; this.gitBranchLabel5 = this.branchLabelColor; this.gitBranchLabel6 = this.branchLabelColor; this.gitBranchLabel7 = this.branchLabelColor; this.tagLabelColor = this.tagLabelColor || this.primaryTextColor; this.tagLabelBackground = this.tagLabelBackground || this.primaryColor; this.tagLabelBorder = this.tagBorder || this.primaryBorderColor; this.tagLabelFontSize = this.tagLabelFontSize || '10px'; this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor; this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor; this.commitLabelFontSize = this.commitLabelFontSize || '10px'; /* -------------------------------------------------- */ /* EntityRelationship diagrams */ this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd; this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven; /* -------------------------------------------------- */ } calculate(overrides) { if (typeof overrides !== 'object') { // Calculate colors form base colors this.updateColors(); return; } const keys = Object.keys(overrides); // Copy values from overrides, this is mainly for base colors keys.forEach((k) => { this[k] = overrides[k]; }); // Calculate colors form base colors this.updateColors(); // Copy values from overrides again in case of an override of derived value keys.forEach((k) => { this[k] = overrides[k]; }); } } export const getThemeVariables = (userOverrides) => { const theme = new Theme(); theme.calculate(userOverrides); return theme; }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/utils.spec.js000066400000000000000000000264041433273745700243060ustar00rootroot00000000000000import { vi } from 'vitest'; import utils from './utils'; import assignWithDepth from './assignWithDepth'; import { detectType } from './diagram-api/detectType'; import { addDiagrams } from './diagram-api/diagram-orchestration'; import memoize from 'lodash/memoize'; addDiagrams(); describe('when assignWithDepth: should merge objects within objects', function () { it('should handle simple, depth:1 types (identity)', function () { let config_0 = { foo: 'bar', bar: 0 }; let config_1 = { foo: 'bar', bar: 0 }; let result = assignWithDepth(config_0, config_1); expect(result).toEqual(config_1); }); it('should handle simple, depth:1 types (dst: undefined)', function () { let config_0 = undefined; let config_1 = { foo: 'bar', bar: 0 }; let result = assignWithDepth(config_0, config_1); expect(result).toEqual(config_1); }); it('should handle simple, depth:1 types (src: undefined)', function () { let config_0 = { foo: 'bar', bar: 0 }; let config_1 = undefined; let result = assignWithDepth(config_0, config_1); expect(result).toEqual(config_0); }); it('should handle simple, depth:1 types (merge)', function () { let config_0 = { foo: 'bar', bar: 0 }; let config_1 = { foo: 'foo' }; let result = assignWithDepth(config_0, config_1); expect(result).toEqual({ foo: 'foo', bar: 0 }); }); it('should handle depth:2 types (dst: orphan)', function () { let config_0 = { foo: 'bar', bar: { foo: 'bar' } }; let config_1 = { foo: 'bar' }; let result = assignWithDepth(config_0, config_1); expect(result).toEqual(config_0); }); it('should handle depth:2 types (dst: object, src: simple type)', function () { let config_0 = { foo: 'bar', bar: { foo: 'bar' } }; let config_1 = { foo: 'foo', bar: 'should NOT clobber' }; let result = assignWithDepth(config_0, config_1); expect(result).toEqual({ foo: 'foo', bar: { foo: 'bar' } }); }); it('should handle depth:2 types (src: orphan)', function () { let config_0 = { foo: 'bar' }; let config_1 = { foo: 'bar', bar: { foo: 'bar' } }; let result = assignWithDepth(config_0, config_1); expect(result).toEqual(config_1); }); it('should handle depth:2 types (merge)', function () { let config_0 = { foo: 'bar', bar: { foo: 'bar' }, boofar: 1 }; let config_1 = { foo: 'foo', bar: { bar: 0 }, foobar: 'foobar' }; let result = assignWithDepth(config_0, config_1); expect(result).toEqual({ foo: 'foo', bar: { foo: 'bar', bar: 0 }, foobar: 'foobar', boofar: 1, }); }); it('should handle depth:3 types (merge with clobber because assignWithDepth::depth == 2)', function () { let config_0 = { foo: 'bar', bar: { foo: 'bar', bar: { foo: { message: 'this', willbe: 'clobbered' } } }, boofar: 1, }; let config_1 = { foo: 'foo', bar: { foo: 'foo', bar: { foo: { message: 'clobbered other foo' } } }, foobar: 'foobar', }; let result = assignWithDepth(config_0, config_1); expect(result).toEqual({ foo: 'foo', bar: { foo: 'foo', bar: { foo: { message: 'clobbered other foo' } } }, foobar: 'foobar', boofar: 1, }); }); it('should handle depth:3 types (merge with clobber because assignWithDepth::depth == 1)', function () { let config_0 = { foo: 'bar', bar: { foo: 'bar', bar: { foo: { message: '', willNotbe: 'present' }, bar: 'shouldNotBePresent' }, }, boofar: 1, }; let config_1 = { foo: 'foo', bar: { foo: 'foo', bar: { foo: { message: 'this' } } }, foobar: 'foobar', }; let result = assignWithDepth(config_0, config_1, { depth: 1 }); expect(result).toEqual({ foo: 'foo', bar: { foo: 'foo', bar: { foo: { message: 'this' } } }, foobar: 'foobar', boofar: 1, }); }); it('should handle depth:3 types (merge with no clobber because assignWithDepth::depth == 3)', function () { let config_0 = { foo: 'bar', bar: { foo: 'bar', bar: { foo: { message: '', willbe: 'present' } } }, boofar: 1, }; let config_1 = { foo: 'foo', bar: { foo: 'foo', bar: { foo: { message: 'this' } } }, foobar: 'foobar', }; let result = assignWithDepth(config_0, config_1, { depth: 3 }); expect(result).toEqual({ foo: 'foo', bar: { foo: 'foo', bar: { foo: { message: 'this', willbe: 'present' } } }, foobar: 'foobar', boofar: 1, }); }); }); describe('when memoizing', function () { it('should return the same value', function () { const fib = memoize( function (n, x, canary) { canary.flag = true; if (n < 2) { return 1; } else { //We'll console.log a loader every time we have to recurse return fib(n - 2, x, canary) + fib(n - 1, x, canary); } }, (n, x, _) => `${n}${x}` ); let canary = { flag: false }; fib(10, 'a', canary); expect(canary.flag).toBe(true); canary = { flag: false }; fib(10, 'a', canary); expect(canary.flag).toBe(false); fib(10, 'b', canary); fib(10, 'b', canary); expect(canary.flag).toBe(true); canary = { flag: false }; fib(10, 'b', canary); fib(10, 'a', canary); expect(canary.flag).toBe(false); }); }); describe('when detecting chart type ', function () { it('should handle a graph definition', function () { const str = 'graph TB\nbfs1:queue'; const type = detectType(str); expect(type).toBe('flowchart'); }); it('should handle an initialize definition', function () { const str = ` %%{initialize: { 'logLevel': 0, 'theme': 'dark' }}%% sequenceDiagram Alice->Bob: hi`; const type = detectType(str); const init = utils.detectInit(str); expect(type).toBe('sequence'); expect(init).toEqual({ logLevel: 0, theme: 'dark' }); }); it('should handle an init definition', function () { const str = ` %%{init: { 'logLevel': 0, 'theme': 'dark' }}%% sequenceDiagram Alice->Bob: hi`; const type = detectType(str); const init = utils.detectInit(str); expect(type).toBe('sequence'); expect(init).toEqual({ logLevel: 0, theme: 'dark' }); }); it('should handle an init definition with config converted to the proper diagram configuration', function () { const str = ` %%{init: { 'logLevel': 0, 'theme': 'dark', 'config': {'wrap': true} } }%% sequenceDiagram Alice->Bob: hi`; const type = detectType(str); const init = utils.detectInit(str); expect(type).toBe('sequence'); expect(init).toEqual({ logLevel: 0, theme: 'dark', sequence: { wrap: true } }); }); it('should handle a multiline init definition', function () { const str = ` %%{ init: { 'logLevel': 0, 'theme': 'dark' } }%% sequenceDiagram Alice->Bob: hi`; const type = detectType(str); const init = utils.detectInit(str); expect(type).toBe('sequence'); expect(init).toEqual({ logLevel: 0, theme: 'dark' }); }); it('should handle multiple init directives', function () { const str = ` %%{ init: { 'logLevel': 0, 'theme': 'forest' } }%% %%{ init: { 'theme': 'dark' } }%% sequenceDiagram Alice->Bob: hi`; const type = detectType(str); const init = utils.detectInit(str); expect(type).toBe('sequence'); expect(init).toEqual({ logLevel: 0, theme: 'dark' }); }); it('should handle a graph definition with leading spaces', function () { const str = ' graph TB\nbfs1:queue'; const type = detectType(str); expect(type).toBe('flowchart'); }); it('should handle a graph definition with leading spaces and newline', function () { const str = ' \n graph TB\nbfs1:queue'; const type = detectType(str); expect(type).toBe('flowchart'); }); it('should handle a graph definition for gitGraph', function () { const str = ' \n gitGraph TB:\nbfs1:queue'; const type = detectType(str); expect(type).toBe('gitGraph'); }); }); describe('when finding substring in array ', function () { it('should return the array index that contains the substring', function () { const arr = ['stroke:val1', 'fill:val2']; const result = utils.isSubstringInArray('fill', arr); expect(result).toEqual(1); }); it('should return -1 if the substring is not found in the array', function () { const arr = ['stroke:val1', 'stroke-width:val2']; const result = utils.isSubstringInArray('fill', arr); expect(result).toEqual(-1); }); }); describe('when formatting urls', function () { it('should handle links', function () { const url = 'https://mermaid-js.github.io/mermaid/#/'; let config = { securityLevel: 'loose' }; let result = utils.formatUrl(url, config); expect(result).toEqual(url); config.securityLevel = 'strict'; result = utils.formatUrl(url, config); expect(result).toEqual(url); }); it('should handle anchors', function () { const url = '#interaction'; let config = { securityLevel: 'loose' }; let result = utils.formatUrl(url, config); expect(result).toEqual(url); config.securityLevel = 'strict'; result = utils.formatUrl(url, config); expect(result).toEqual(url); }); it('should handle mailto', function () { const url = 'mailto:user@user.user'; let config = { securityLevel: 'loose' }; let result = utils.formatUrl(url, config); expect(result).toEqual(url); config.securityLevel = 'strict'; result = utils.formatUrl(url, config); expect(result).toEqual(url); }); it('should handle other protocols', function () { const url = 'notes://do-your-thing/id'; let config = { securityLevel: 'loose' }; let result = utils.formatUrl(url, config); expect(result).toEqual(url); config.securityLevel = 'strict'; result = utils.formatUrl(url, config); expect(result).toEqual(url); }); it('should handle scripts', function () { const url = 'javascript:alert("test")'; let config = { securityLevel: 'loose' }; let result = utils.formatUrl(url, config); expect(result).toEqual(url); config.securityLevel = 'strict'; result = utils.formatUrl(url, config); expect(result).toEqual('about:blank'); }); }); describe('when initializing the id generator', function () { beforeEach(() => { // tell vitest we use mocked time vi.useFakeTimers(); }); afterEach(() => { // restoring date after each test run vi.useRealTimers(); }); it('should return a random number generator based on Date', function () { const idGenerator = new utils.initIdGenerator(false); expect(typeof idGenerator.next).toEqual('function'); const lastId = idGenerator.next(); vi.advanceTimersByTime(1000); expect(idGenerator.next() > lastId).toBe(true); }); it('should return a non random number generator', function () { const idGenerator = new utils.initIdGenerator(true); expect(typeof idGenerator.next).toEqual('function'); const start = 0; const lastId = idGenerator.next(); expect(start).toEqual(lastId); expect(idGenerator.next()).toEqual(lastId + 1); }); it('should return a non random number generator based on seed', function () { const idGenerator = new utils.initIdGenerator(true, 'thisIsASeed'); expect(typeof idGenerator.next).toEqual('function'); const start = 11; const lastId = idGenerator.next(); expect(start).toEqual(lastId); expect(idGenerator.next()).toEqual(lastId + 1); }); }); mermaid-js-mermaid-9bb0ed2/packages/mermaid/src/utils.ts000066400000000000000000000633441433273745700233730ustar00rootroot00000000000000// @ts-nocheck : TODO Fix ts errors import { sanitizeUrl } from '@braintree/sanitize-url'; import { curveBasis, curveBasisClosed, curveBasisOpen, curveLinear, curveLinearClosed, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore, select, } from 'd3'; import common from './diagrams/common/common'; import { configKeys } from './defaultConfig'; import { log } from './logger'; import { detectType } from './diagram-api/detectType'; import assignWithDepth from './assignWithDepth'; import { MermaidConfig } from './config.type'; import memoize from 'lodash/memoize'; // Effectively an enum of the supported curve types, accessible by name const d3CurveTypes = { curveBasis: curveBasis, curveBasisClosed: curveBasisClosed, curveBasisOpen: curveBasisOpen, curveLinear: curveLinear, curveLinearClosed: curveLinearClosed, curveMonotoneX: curveMonotoneX, curveMonotoneY: curveMonotoneY, curveNatural: curveNatural, curveStep: curveStep, curveStepAfter: curveStepAfter, curveStepBefore: curveStepBefore, }; const directive = /[%]{2}[{]\s*(?:(?:(\w+)\s*:|(\w+))\s*(?:(?:(\w+))|((?:(?![}][%]{2}).|\r?\n)*))?\s*)(?:[}][%]{2})?/gi; const directiveWithoutOpen = /\s*(?:(?:(\w+)(?=:):|(\w+))\s*(?:(?:(\w+))|((?:(?![}][%]{2}).|\r?\n)*))?\s*)(?:[}][%]{2})?/gi; /** * @function detectInit Detects the init config object from the text * @param config * * ```mermaid * * %%{init: {"theme": "debug", "logLevel": 1 }}%% * graph LR * a-->b * b-->c * c-->d * d-->e * e-->f * f-->g * g-->h * ``` * * Or * * ```mermaid * %%{initialize: {"theme": "dark", logLevel: "debug" }}%% * graph LR * a-->b * b-->c * c-->d * d-->e * e-->f * f-->g * g-->h * ``` * @param {string} text The text defining the graph * @returns {object} The json object representing the init passed to mermaid.initialize() */ export const detectInit = function (text: string, config?: MermaidConfig): MermaidConfig { const inits = detectDirective(text, /(?:init\b)|(?:initialize\b)/); let results = {}; if (Array.isArray(inits)) { const args = inits.map((init) => init.args); directiveSanitizer(args); results = assignWithDepth(results, [...args]); } else { results = inits.args; } if (results) { let type = detectType(text, config); ['config'].forEach((prop) => { if (typeof results[prop] !== 'undefined') { if (type === 'flowchart-v2') { type = 'flowchart'; } results[type] = results[prop]; delete results[prop]; } }); } // Todo: refactor this, these results are never used return results; }; /** * @function detectDirective Detects the directive from the text. Text can be single line or * multiline. If type is null or omitted the first directive encountered in text will be returned * * ```mermaid * graph LR * %%{somedirective}%% * a-->b * b-->c * c-->d * d-->e * e-->f * f-->g * g-->h * ``` * @param {string} text The text defining the graph * @param {string | RegExp} type The directive to return (default: null) * @returns {object | Array} An object or Array representing the directive(s): { type: string, args: * object|null } matched by the input type if a single directive was found, that directive object * will be returned. */ export const detectDirective = function (text, type = null) { try { const commentWithoutDirectives = new RegExp( `[%]{2}(?![{]${directiveWithoutOpen.source})(?=[}][%]{2}).*\n`, 'ig' ); text = text.trim().replace(commentWithoutDirectives, '').replace(/'/gm, '"'); log.debug( `Detecting diagram directive${type !== null ? ' type:' + type : ''} based on the text:${text}` ); let match; const result = []; while ((match = directive.exec(text)) !== null) { // This is necessary to avoid infinite loops with zero-width matches if (match.index === directive.lastIndex) { directive.lastIndex++; } if ( (match && !type) || (type && match[1] && match[1].match(type)) || (type && match[2] && match[2].match(type)) ) { const type = match[1] ? match[1] : match[2]; const args = match[3] ? match[3].trim() : match[4] ? JSON.parse(match[4].trim()) : null; result.push({ type, args }); } } if (result.length === 0) { result.push({ type: text, args: null }); } return result.length === 1 ? result[0] : result; } catch (error) { log.error( `ERROR: ${error.message} - Unable to parse directive ${type !== null ? ' type:' + type : ''} based on the text:${text}` ); return { type: null, args: null }; } }; /** * @function isSubstringInArray Detects whether a substring in present in a given array * @param {string} str The substring to detect * @param {Array} arr The array to search * @returns {number} The array index containing the substring or -1 if not present */ export const isSubstringInArray = function (str, arr) { for (let i = 0; i < arr.length; i++) { if (arr[i].match(str)) return i; } return -1; }; /** * Returns a d3 curve given a curve name * * @param {string | undefined} interpolate The interpolation name * @param {any} defaultCurve The default curve to return * @returns {import('d3-shape').CurveFactory} The curve factory to use */ export const interpolateToCurve = (interpolate, defaultCurve) => { if (!interpolate) { return defaultCurve; } const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`; return d3CurveTypes[curveName] || defaultCurve; }; /** * Formats a URL string * * @param {string} linkStr String of the URL * @param {{ securityLevel: string }} config Configuration passed to MermaidJS * @returns {string | undefined} The formatted URL */ export const formatUrl = (linkStr, config) => { const url = linkStr.trim(); if (url) { if (config.securityLevel !== 'loose') { return sanitizeUrl(url); } return url; } }; /** * Runs a function * * @param {string} functionName A dot seperated path to the function relative to the `window` * @param {...any} params Parameters to pass to the function */ export const runFunc = (functionName, ...params) => { const arrPaths = functionName.split('.'); const len = arrPaths.length - 1; const fnName = arrPaths[len]; let obj = window; for (let i = 0; i < len; i++) { obj = obj[arrPaths[i]]; if (!obj) return; } obj[fnName](...params); }; /** * @typedef {object} Point A (x, y) point * @property {number} x The x value * @property {number} y The y value */ /** * Finds the distance between two points using the Distance Formula * * @param {Point} p1 The first point * @param {Point} p2 The second point * @returns {number} The distance */ const distance = (p1, p2) => p1 && p2 ? Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)) : 0; /** * @param {Point[]} points List of points * @returns {Point} * @todo Give this a description */ const traverseEdge = (points) => { let prevPoint; let totalDistance = 0; points.forEach((point) => { totalDistance += distance(point, prevPoint); prevPoint = point; }); // Traverse half of total distance along points let remainingDistance = totalDistance / 2; let center = undefined; prevPoint = undefined; points.forEach((point) => { if (prevPoint && !center) { const vectorDistance = distance(point, prevPoint); if (vectorDistance < remainingDistance) { remainingDistance -= vectorDistance; } else { // The point is remainingDistance from prevPoint in the vector between prevPoint and point // Calculate the coordinates const distanceRatio = remainingDistance / vectorDistance; if (distanceRatio <= 0) center = prevPoint; if (distanceRatio >= 1) center = { x: point.x, y: point.y }; if (distanceRatio > 0 && distanceRatio < 1) { center = { x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x, y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y, }; } } } prevPoint = point; }); return center; }; /** * Alias for `traverseEdge` * * @param {Point[]} points List of points * @returns {Point} Return result of `transverseEdge` */ const calcLabelPosition = (points) => { if (points.length === 1) { return points[0]; } return traverseEdge(points); }; const calcCardinalityPosition = (isRelationTypePresent, points, initialPosition) => { let prevPoint; log.info('our points', points); if (points[0] !== initialPosition) { points = points.reverse(); } points.forEach((point) => { totalDistance += distance(point, prevPoint); prevPoint = point; }); // Traverse only 25 total distance along points to find cardinality point const distanceToCardinalityPoint = 25; let remainingDistance = distanceToCardinalityPoint; let center; prevPoint = undefined; points.forEach((point) => { if (prevPoint && !center) { const vectorDistance = distance(point, prevPoint); if (vectorDistance < remainingDistance) { remainingDistance -= vectorDistance; } else { // The point is remainingDistance from prevPoint in the vector between prevPoint and point // Calculate the coordinates const distanceRatio = remainingDistance / vectorDistance; if (distanceRatio <= 0) center = prevPoint; if (distanceRatio >= 1) center = { x: point.x, y: point.y }; if (distanceRatio > 0 && distanceRatio < 1) { center = { x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x, y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y, }; } } } prevPoint = point; }); // if relation is present (Arrows will be added), change cardinality point off-set distance (d) const d = isRelationTypePresent ? 10 : 5; //Calculate Angle for x and y axis const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x); const cardinalityPosition = { x: 0, y: 0 }; //Calculation cardinality position using angle, center point on the line/curve but pendicular and with offset-distance cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2; cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2; return cardinalityPosition; }; /** * Position ['start_left', 'start_right', 'end_left', 'end_right'] * * @param {any} terminalMarkerSize * @param {any} position * @param {any} _points * @returns {any} */ const calcTerminalLabelPosition = (terminalMarkerSize, position, _points) => { // Todo looking to faster cloning method let points = JSON.parse(JSON.stringify(_points)); let prevPoint; log.info('our points', points); if (position !== 'start_left' && position !== 'start_right') { points = points.reverse(); } points.forEach((point) => { prevPoint = point; }); // Traverse only 25 total distance along points to find cardinality point const distanceToCardinalityPoint = 25 + terminalMarkerSize; let remainingDistance = distanceToCardinalityPoint; let center; prevPoint = undefined; points.forEach((point) => { if (prevPoint && !center) { const vectorDistance = distance(point, prevPoint); if (vectorDistance < remainingDistance) { remainingDistance -= vectorDistance; } else { // The point is remainingDistance from prevPoint in the vector between prevPoint and point // Calculate the coordinates const distanceRatio = remainingDistance / vectorDistance; if (distanceRatio <= 0) center = prevPoint; if (distanceRatio >= 1) center = { x: point.x, y: point.y }; if (distanceRatio > 0 && distanceRatio < 1) { center = { x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x, y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y, }; } } } prevPoint = point; }); // if relation is present (Arrows will be added), change cardinality point off-set distance (d) const d = 10 + terminalMarkerSize * 0.5; //Calculate Angle for x and y axis const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x); const cardinalityPosition = { x: 0, y: 0 }; //Calculation cardinality position using angle, center point on the line/curve but pendicular and with offset-distance cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2; cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2; if (position === 'start_left') { cardinalityPosition.x = Math.sin(angle + Math.PI) * d + (points[0].x + center.x) / 2; cardinalityPosition.y = -Math.cos(angle + Math.PI) * d + (points[0].y + center.y) / 2; } if (position === 'end_right') { cardinalityPosition.x = Math.sin(angle - Math.PI) * d + (points[0].x + center.x) / 2 - 5; cardinalityPosition.y = -Math.cos(angle - Math.PI) * d + (points[0].y + center.y) / 2 - 5; } if (position === 'end_left') { cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2 - 5; cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2 - 5; } return cardinalityPosition; }; /** * Gets styles from an array of declarations * * @param {string[]} arr Declarations * @returns {{ style: string; labelStyle: string }} The styles grouped as strings */ export const getStylesFromArray = (arr) => { let style = ''; let labelStyle = ''; for (let i = 0; i < arr.length; i++) { if (typeof arr[i] !== 'undefined') { // add text properties to label style definition if (arr[i].startsWith('color:') || arr[i].startsWith('text-align:')) { labelStyle = labelStyle + arr[i] + ';'; } else { style = style + arr[i] + ';'; } } } return { style: style, labelStyle: labelStyle }; }; let cnt = 0; export const generateId = () => { cnt++; return 'id-' + Math.random().toString(36).substr(2, 12) + '-' + cnt; }; /** * @param {any} length * @returns {any} */ function makeid(length) { let result = ''; const characters = '0123456789abcdef'; const charactersLength = characters.length; for (let i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } export const random = (options) => { return makeid(options.length); }; export const getTextObj = function () { return { x: 0, y: 0, fill: undefined, anchor: 'start', style: '#666', width: 100, height: 100, textMargin: 0, rx: 0, ry: 0, valign: undefined, }; }; /** * Adds text to an element * * @param {SVGElement} elem Element to add text to * @param {{ * text: string; * x: number; * y: number; * anchor: 'start' | 'middle' | 'end'; * fontFamily: string; * fontSize: string | number; * fontWeight: string | number; * fill: string; * class: string | undefined; * textMargin: number; * }} textData * @returns {SVGTextElement} Text element with given styling and content */ export const drawSimpleText = function (elem, textData) { // Remove and ignore br:s const nText = textData.text.replace(common.lineBreakRegex, ' '); const textElem = elem.append('text'); textElem.attr('x', textData.x); textElem.attr('y', textData.y); textElem.style('text-anchor', textData.anchor); textElem.style('font-family', textData.fontFamily); textElem.style('font-size', textData.fontSize); textElem.style('font-weight', textData.fontWeight); textElem.attr('fill', textData.fill); if (typeof textData.class !== 'undefined') { textElem.attr('class', textData.class); } const span = textElem.append('tspan'); span.attr('x', textData.x + textData.textMargin * 2); span.attr('fill', textData.fill); span.text(nText); return textElem; }; export const wrapLabel = memoize( (label, maxWidth, config) => { if (!label) { return label; } config = Object.assign( { fontSize: 12, fontWeight: 400, fontFamily: 'Arial', joinWith: '
' }, config ); if (common.lineBreakRegex.test(label)) { return label; } const words = label.split(' '); const completedLines = []; let nextLine = ''; words.forEach((word, index) => { const wordLength = calculateTextWidth(`${word} `, config); const nextLineLength = calculateTextWidth(nextLine, config); if (wordLength > maxWidth) { const { hyphenatedStrings, remainingWord } = breakString(word, maxWidth, '-', config); completedLines.push(nextLine, ...hyphenatedStrings); nextLine = remainingWord; } else if (nextLineLength + wordLength >= maxWidth) { completedLines.push(nextLine); nextLine = word; } else { nextLine = [nextLine, word].filter(Boolean).join(' '); } const currentWord = index + 1; const isLastWord = currentWord === words.length; if (isLastWord) { completedLines.push(nextLine); } }); return completedLines.filter((line) => line !== '').join(config.joinWith); }, (label, maxWidth, config) => `${label}${maxWidth}${config.fontSize}${config.fontWeight}${config.fontFamily}${config.joinWith}` ); const breakString = memoize( (word, maxWidth, hyphenCharacter = '-', config) => { config = Object.assign( { fontSize: 12, fontWeight: 400, fontFamily: 'Arial', margin: 0 }, config ); const characters = word.split(''); const lines = []; let currentLine = ''; characters.forEach((character, index) => { const nextLine = `${currentLine}${character}`; const lineWidth = calculateTextWidth(nextLine, config); if (lineWidth >= maxWidth) { const currentCharacter = index + 1; const isLastLine = characters.length === currentCharacter; const hyphenatedNextLine = `${nextLine}${hyphenCharacter}`; lines.push(isLastLine ? nextLine : hyphenatedNextLine); currentLine = ''; } else { currentLine = nextLine; } }); return { hyphenatedStrings: lines, remainingWord: currentLine }; }, (word, maxWidth, hyphenCharacter = '-', config) => `${word}${maxWidth}${hyphenCharacter}${config.fontSize}${config.fontWeight}${config.fontFamily}` ); /** * This calculates the text's height, taking into account the wrap breaks and both the statically * configured height, width, and the length of the text (in pixels). * * If the wrapped text text has greater height, we extend the height, so it's value won't overflow. * * @param {any} text The text to measure * @param {any} config - The config for fontSize, fontFamily, and fontWeight all impacting the * resulting size * @returns {any} - The height for the given text */ export const calculateTextHeight = function (text, config) { config = Object.assign( { fontSize: 12, fontWeight: 400, fontFamily: 'Arial', margin: 15 }, config ); return calculateTextDimensions(text, config).height; }; /** * This calculates the width of the given text, font size and family. * * @param {any} text - The text to calculate the width of * @param {any} config - The config for fontSize, fontFamily, and fontWeight all impacting the * resulting size * @returns {any} - The width for the given text */ export const calculateTextWidth = function (text, config) { config = Object.assign({ fontSize: 12, fontWeight: 400, fontFamily: 'Arial' }, config); return calculateTextDimensions(text, config).width; }; /** * This calculates the dimensions of the given text, font size, font family, font weight, and * margins. * * @param {any} text - The text to calculate the width of * @param {any} config - The config for fontSize, fontFamily, fontWeight, and margin all impacting * the resulting size * @returns - The width for the given text */ export const calculateTextDimensions = memoize( function (text, config) { config = Object.assign({ fontSize: 12, fontWeight: 400, fontFamily: 'Arial' }, config); const { fontSize, fontFamily, fontWeight } = config; if (!text) { return { width: 0, height: 0 }; } // We can't really know if the user supplied font family will render on the user agent; // thus, we'll take the max width between the user supplied font family, and a default // of sans-serif. const fontFamilies = ['sans-serif', fontFamily]; const lines = text.split(common.lineBreakRegex); const dims = []; const body = select('body'); // We don't want to leak DOM elements - if a removal operation isn't available // for any reason, do not continue. if (!body.remove) { return { width: 0, height: 0, lineHeight: 0 }; } const g = body.append('svg'); for (const fontFamily of fontFamilies) { let cheight = 0; const dim = { width: 0, height: 0, lineHeight: 0 }; for (const line of lines) { const textObj = getTextObj(); textObj.text = line; const textElem = drawSimpleText(g, textObj) .style('font-size', fontSize) .style('font-weight', fontWeight) .style('font-family', fontFamily); const bBox = (textElem._groups || textElem)[0][0].getBBox(); dim.width = Math.round(Math.max(dim.width, bBox.width)); cheight = Math.round(bBox.height); dim.height += cheight; dim.lineHeight = Math.round(Math.max(dim.lineHeight, cheight)); } dims.push(dim); } g.remove(); const index = isNaN(dims[1].height) || isNaN(dims[1].width) || isNaN(dims[1].lineHeight) || (dims[0].height > dims[1].height && dims[0].width > dims[1].width && dims[0].lineHeight > dims[1].lineHeight) ? 0 : 1; return dims[index]; }, (text, config) => `${text}${config.fontSize}${config.fontWeight}${config.fontFamily}` ); export const initIdGenerator = class iterator { constructor(deterministic, seed) { this.deterministic = deterministic; // TODO: Seed is only used for length? this.seed = seed; this.count = seed ? seed.length : 0; } next() { if (!this.deterministic) return Date.now(); return this.count++; } }; let decoder; /** * Decodes HTML, source: {@link https://github.com/shrpne/entity-decode/blob/v2.0.1/browser.js} * * @param {string} html HTML as a string * @returns {string} Unescaped HTML */ export const entityDecode = function (html) { decoder = decoder || document.createElement('div'); // Escape HTML before decoding for HTML Entities html = escape(html).replace(/%26/g, '&').replace(/%23/g, '#').replace(/%3B/g, ';'); // decoding decoder.innerHTML = html; return unescape(decoder.textContent); }; /** * Sanitizes directive objects * * @param {object} args Directive's JSON */ export const directiveSanitizer = (args) => { log.debug('directiveSanitizer called with', args); if (typeof args === 'object') { // check for array if (args.length) { args.forEach((arg) => directiveSanitizer(arg)); } else { // This is an object Object.keys(args).forEach((key) => { log.debug('Checking key', key); if (key.indexOf('__') === 0) { log.debug('sanitize deleting __ option', key); delete args[key]; } if (key.indexOf('proto') >= 0) { log.debug('sanitize deleting proto option', key); delete args[key]; } if (key.indexOf('constr') >= 0) { log.debug('sanitize deleting constr option', key); delete args[key]; } if (key.indexOf('themeCSS') >= 0) { log.debug('sanitizing themeCss option'); args[key] = sanitizeCss(args[key]); } if (key.indexOf('fontFamily') >= 0) { log.debug('sanitizing fontFamily option'); args[key] = sanitizeCss(args[key]); } if (key.indexOf('altFontFamily') >= 0) { log.debug('sanitizing altFontFamily option'); args[key] = sanitizeCss(args[key]); } if (configKeys.indexOf(key) < 0) { log.debug('sanitize deleting option', key); delete args[key]; } else { if (typeof args[key] === 'object') { log.debug('sanitize deleting object', key); directiveSanitizer(args[key]); } } }); } } if (args.themeVariables) { const kArr = Object.keys(args.themeVariables); for (let i = 0; i < kArr.length; i++) { const k = kArr[i]; const val = args.themeVariables[k]; if (val && val.match && !val.match(/^[a-zA-Z0-9#,";()%. ]+$/)) { args.themeVariables[k] = ''; } } } log.debug('After sanitization', args); }; export const sanitizeCss = (str) => { let startCnt = 0; let endCnt = 0; for (let i = 0; i < str.length; i++) { if (startCnt < endCnt) { return '{ /* ERROR: Unbalanced CSS */ }'; } if (str[i] === '{') { startCnt++; } else if (str[i] === '}') { endCnt++; } } if (startCnt !== endCnt) { return '{ /* ERROR: Unbalanced CSS */ }'; } // Todo add more checks here return str; }; export interface DetailedError { str: string; hash: any; error?: any; message?: string; } /** @param error */ export function isDetailedError(error: unknown): error is DetailedError { return 'str' in error; } /** @param error */ export function getErrorMessage(error: unknown): string { if (error instanceof Error) return error.message; return String(error); } export default { assignWithDepth, wrapLabel, calculateTextHeight, calculateTextWidth, calculateTextDimensions, detectInit, detectDirective, isSubstringInArray, interpolateToCurve, calcLabelPosition, calcCardinalityPosition, calcTerminalLabelPosition, formatUrl, getStylesFromArray, generateId, random, runFunc, entityDecode, initIdGenerator: initIdGenerator, directiveSanitizer, sanitizeCss, }; mermaid-js-mermaid-9bb0ed2/packages/mermaid/tsconfig.json000066400000000000000000000002441433273745700235710ustar00rootroot00000000000000{ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", "outDir": "./dist" }, "include": ["./src/**/*.ts", "./package.json"] } mermaid-js-mermaid-9bb0ed2/pnpm-lock.yaml000066400000000000000000017573151433273745700204750ustar00rootroot00000000000000lockfileVersion: 5.4 overrides: d3: ^7.0.0 importers: .: specifiers: '@applitools/eyes-cypress': ^3.27.1 '@braintree/sanitize-url': ^6.0.0 '@commitlint/cli': ^17.1.2 '@commitlint/config-conventional': ^17.1.0 '@types/d3': ^7.4.0 '@types/dompurify': ^2.3.4 '@types/eslint': ^8.4.6 '@types/express': ^4.17.14 '@types/jsdom': ^20.0.0 '@types/lodash': ^4.14.186 '@types/mdast': ^3.0.10 '@types/node': ^18.8.1 '@types/prettier': ^2.7.1 '@types/stylis': ^4.0.2 '@types/uuid': ^8.3.4 '@typescript-eslint/eslint-plugin': ^5.39.0 '@typescript-eslint/parser': ^5.39.0 '@vitest/coverage-c8': ^0.23.4 '@vitest/ui': ^0.23.4 concurrently: ^7.4.0 coveralls: ^3.1.1 cypress: ^10.0.0 cypress-image-snapshot: ^4.0.1 d3: ^7.0.0 dagre: ^0.8.5 dagre-d3: ^0.6.4 documentation: 13.2.0 dompurify: 2.4.0 esbuild: ^0.15.10 eslint: ^8.24.0 eslint-config-prettier: ^8.5.0 eslint-plugin-cypress: ^2.12.1 eslint-plugin-html: ^7.1.0 eslint-plugin-jest: ^27.1.0 eslint-plugin-jsdoc: ^39.3.6 eslint-plugin-json: ^3.1.0 eslint-plugin-markdown: ^3.0.0 express: ^4.18.1 fast-clone: ^1.5.13 globby: ^13.1.2 graphlib: ^2.1.8 husky: ^8.0.1 identity-obj-proxy: ^3.0.0 jest: 29.x jison: ^0.4.18 jsdom: ^20.0.1 khroma: ^2.0.0 lint-staged: ^13.0.3 lodash: ^4.17.21 markdown-it: ^13.0.1 moment-mini: ^2.24.0 non-layered-tidy-tree-layout: ^2.0.2 path-browserify: ^1.0.1 pnpm: ^7.13.2 prettier: ^2.7.1 prettier-plugin-jsdoc: ^0.4.2 remark: ^14.0.2 rimraf: ^3.0.2 rollup: ^2.79.1 start-server-and-test: ^1.14.0 stylis: ^4.1.2 ts-node: ^10.9.1 typescript: ^4.8.4 unist-util-flatmap: ^1.0.0 uuid: ^9.0.0 vite: ^3.1.4 vitepress: ^1.0.0-alpha.19 vitepress-plugin-mermaid: ^2.0.8 vitepress-plugin-search: ^1.0.4-alpha.11 vitest: ^0.23.4 dependencies: '@braintree/sanitize-url': 6.0.0 '@types/node': 18.8.1 '@types/uuid': 8.3.4 d3: 7.6.1 dagre: 0.8.5 dagre-d3: 0.6.4 dompurify: 2.4.0 fast-clone: 1.5.13 graphlib: 2.1.8 khroma: 2.0.0 lodash: 4.17.21 moment-mini: 2.29.4 non-layered-tidy-tree-layout: 2.0.2 rollup: 2.79.1 stylis: 4.1.2 uuid: 9.0.0 devDependencies: '@applitools/eyes-cypress': 3.27.1 '@commitlint/cli': 17.1.2 '@commitlint/config-conventional': 17.1.0 '@types/d3': 7.4.0 '@types/dompurify': 2.3.4 '@types/eslint': 8.4.6 '@types/express': 4.17.14 '@types/jsdom': 20.0.0 '@types/lodash': 4.14.186 '@types/mdast': 3.0.10 '@types/prettier': 2.7.1 '@types/stylis': 4.0.2 '@typescript-eslint/eslint-plugin': 5.39.0_xyciw6oqjoiiono4dhv3uhn5my '@typescript-eslint/parser': 5.39.0_ypn2ylkkyfa5i233caldtndbqa '@vitest/coverage-c8': 0.23.4_dnicfi6n7tywwajisjusxhbdzm '@vitest/ui': 0.23.4 concurrently: 7.4.0 coveralls: 3.1.1 cypress: 10.8.0 cypress-image-snapshot: 4.0.1_cypress@10.8.0+jest@29.1.1 documentation: 13.2.0 esbuild: 0.15.10 eslint: 8.24.0 eslint-config-prettier: 8.5.0_eslint@8.24.0 eslint-plugin-cypress: 2.12.1_eslint@8.24.0 eslint-plugin-html: 7.1.0 eslint-plugin-jest: 27.1.0_4rkgrv37dc3yt652qtbljgksbi eslint-plugin-jsdoc: 39.3.6_eslint@8.24.0 eslint-plugin-json: 3.1.0 eslint-plugin-markdown: 3.0.0_eslint@8.24.0 express: 4.18.1 globby: 13.1.2 husky: 8.0.1 identity-obj-proxy: 3.0.0 jest: 29.1.1_ahjkdke2ds2w5gj6yhynj4mjsq jison: 0.4.18 jsdom: 20.0.1 lint-staged: 13.0.3 markdown-it: 13.0.1 path-browserify: 1.0.1 pnpm: 7.13.2 prettier: 2.7.1 prettier-plugin-jsdoc: 0.4.2_prettier@2.7.1 remark: 14.0.2 rimraf: 3.0.2 start-server-and-test: 1.14.0 ts-node: 10.9.1_jrs6fgrkrfl5zdawlcdiuhuotq typescript: 4.8.4 unist-util-flatmap: 1.0.0 vite: 3.1.4 vitepress: 1.0.0-alpha.19_tbpndr44ulefs3hehwpi2mkf2y vitepress-plugin-mermaid: 2.0.8_ml5vzxpqibyfsid5kdls3ch6aa vitepress-plugin-search: 1.0.4-alpha.11_nvmgxcm7cozn4csefdube5au3y vitest: 0.23.4_dnicfi6n7tywwajisjusxhbdzm packages/mermaid: specifiers: '@applitools/eyes-cypress': ^3.25.7 '@braintree/sanitize-url': ^6.0.0 '@commitlint/cli': ^17.1.2 '@commitlint/config-conventional': ^17.0.0 '@types/d3': ^7.4.0 '@types/dompurify': ^2.3.4 '@types/eslint': ^8.4.6 '@types/express': ^4.17.13 '@types/jsdom': ^20.0.0 '@types/lodash': ^4.14.185 '@types/prettier': ^2.7.0 '@types/stylis': ^4.0.2 '@types/uuid': ^8.3.4 '@typescript-eslint/eslint-plugin': ^5.37.0 '@typescript-eslint/parser': ^5.37.0 concurrently: ^7.4.0 coveralls: ^3.1.1 cypress: ^10.0.0 cypress-image-snapshot: ^4.0.1 d3: ^7.0.0 dagre: ^0.8.5 dagre-d3: ^0.6.4 documentation: 13.2.0 dompurify: 2.4.0 esbuild: ^0.15.8 eslint: ^8.23.1 eslint-config-prettier: ^8.5.0 eslint-plugin-cypress: ^2.12.1 eslint-plugin-html: ^7.1.0 eslint-plugin-jest: ^27.0.4 eslint-plugin-jsdoc: ^39.3.6 eslint-plugin-json: ^3.1.0 eslint-plugin-markdown: ^3.0.0 express: ^4.18.1 fast-clone: ^1.5.13 globby: ^13.1.2 graphlib: ^2.1.8 husky: ^8.0.0 identity-obj-proxy: ^3.0.0 jison: ^0.4.18 js-base64: 3.7.2 jsdom: ^20.0.0 khroma: ^2.0.0 lint-staged: ^13.0.0 lodash: ^4.17.21 moment: ^2.23.0 moment-mini: ^2.24.0 non-layered-tidy-tree-layout: ^2.0.2 path-browserify: ^1.0.1 prettier: ^2.7.1 prettier-plugin-jsdoc: ^0.4.2 remark: ^14.0.2 rimraf: ^3.0.2 start-server-and-test: ^1.12.6 stylis: ^4.1.2 ts-node: ^10.9.1 typescript: ^4.8.3 unist-util-flatmap: ^1.0.0 uuid: ^9.0.0 dependencies: '@braintree/sanitize-url': 6.0.0 d3: 7.6.1 dagre: 0.8.5 dagre-d3: 0.6.4 dompurify: 2.4.0 fast-clone: 1.5.13 graphlib: 2.1.8 khroma: 2.0.0 lodash: 4.17.21 moment-mini: 2.29.4 non-layered-tidy-tree-layout: 2.0.2 stylis: 4.1.2 uuid: 9.0.0 devDependencies: '@applitools/eyes-cypress': 3.27.1 '@commitlint/cli': 17.1.2 '@commitlint/config-conventional': 17.1.0 '@types/d3': 7.4.0 '@types/dompurify': 2.3.4 '@types/eslint': 8.4.6 '@types/express': 4.17.14 '@types/jsdom': 20.0.0 '@types/lodash': 4.14.185 '@types/prettier': 2.7.0 '@types/stylis': 4.0.2 '@types/uuid': 8.3.4 '@typescript-eslint/eslint-plugin': 5.38.0_wsb62dxj2oqwgas4kadjymcmry '@typescript-eslint/parser': 5.38.0_irgkl5vooow2ydyo6aokmferha concurrently: 7.4.0 coveralls: 3.1.1 cypress: 10.8.0 cypress-image-snapshot: 4.0.1_cypress@10.8.0+jest@26.6.3 documentation: 13.2.0 esbuild: 0.15.8 eslint: 8.23.1 eslint-config-prettier: 8.5.0_eslint@8.23.1 eslint-plugin-cypress: 2.12.1_eslint@8.23.1 eslint-plugin-html: 7.1.0 eslint-plugin-jest: 27.0.4_f7dzv4ir665cww75ncpbtb7glm eslint-plugin-jsdoc: 39.3.6_eslint@8.23.1 eslint-plugin-json: 3.1.0 eslint-plugin-markdown: 3.0.0_eslint@8.23.1 express: 4.18.1 globby: 13.1.2 husky: 8.0.1 identity-obj-proxy: 3.0.0 jison: 0.4.18 js-base64: 3.7.2 jsdom: 20.0.0 lint-staged: 13.0.3 moment: 2.29.4 path-browserify: 1.0.1 prettier: 2.7.1 prettier-plugin-jsdoc: 0.4.2_prettier@2.7.1 remark: 14.0.2 rimraf: 3.0.2 start-server-and-test: 1.14.0 ts-node: 10.9.1_wpuvd23gr7ieg6cvyhaoiu3d3a typescript: 4.8.3 unist-util-flatmap: 1.0.0 packages/mermaid-example-diagram: specifiers: concurrently: ^7.4.0 rimraf: ^3.0.2 devDependencies: concurrently: 7.4.0 rimraf: 3.0.2 packages/mermaid-mindmap: specifiers: '@braintree/sanitize-url': ^6.0.0 concurrently: ^7.4.0 cytoscape: ^3.23.0 cytoscape-cose-bilkent: ^4.1.0 cytoscape-fcose: ^2.1.0 d3: ^7.0.0 mermaid: workspace:* non-layered-tidy-tree-layout: ^2.0.2 rimraf: ^3.0.2 dependencies: '@braintree/sanitize-url': 6.0.0 cytoscape: 3.23.0 cytoscape-cose-bilkent: 4.1.0_cytoscape@3.23.0 cytoscape-fcose: 2.1.0_cytoscape@3.23.0 d3: 7.6.1 non-layered-tidy-tree-layout: 2.0.2 devDependencies: concurrently: 7.4.0 mermaid: link:../mermaid rimraf: 3.0.2 packages: /@algolia/autocomplete-core/1.7.1: resolution: {integrity: sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg==} dependencies: '@algolia/autocomplete-shared': 1.7.1 dev: true /@algolia/autocomplete-preset-algolia/1.7.1_qs6lk5nhygj2o3hj4sf6xnr724: resolution: {integrity: sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg==} peerDependencies: '@algolia/client-search': ^4.9.1 algoliasearch: ^4.9.1 dependencies: '@algolia/autocomplete-shared': 1.7.1 '@algolia/client-search': 4.14.2 algoliasearch: 4.14.2 dev: true /@algolia/autocomplete-shared/1.7.1: resolution: {integrity: sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg==} dev: true /@algolia/cache-browser-local-storage/4.14.2: resolution: {integrity: sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==} dependencies: '@algolia/cache-common': 4.14.2 dev: true /@algolia/cache-common/4.14.2: resolution: {integrity: sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==} dev: true /@algolia/cache-in-memory/4.14.2: resolution: {integrity: sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==} dependencies: '@algolia/cache-common': 4.14.2 dev: true /@algolia/client-account/4.14.2: resolution: {integrity: sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==} dependencies: '@algolia/client-common': 4.14.2 '@algolia/client-search': 4.14.2 '@algolia/transporter': 4.14.2 dev: true /@algolia/client-analytics/4.14.2: resolution: {integrity: sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==} dependencies: '@algolia/client-common': 4.14.2 '@algolia/client-search': 4.14.2 '@algolia/requester-common': 4.14.2 '@algolia/transporter': 4.14.2 dev: true /@algolia/client-common/4.14.2: resolution: {integrity: sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==} dependencies: '@algolia/requester-common': 4.14.2 '@algolia/transporter': 4.14.2 dev: true /@algolia/client-personalization/4.14.2: resolution: {integrity: sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==} dependencies: '@algolia/client-common': 4.14.2 '@algolia/requester-common': 4.14.2 '@algolia/transporter': 4.14.2 dev: true /@algolia/client-search/4.14.2: resolution: {integrity: sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==} dependencies: '@algolia/client-common': 4.14.2 '@algolia/requester-common': 4.14.2 '@algolia/transporter': 4.14.2 dev: true /@algolia/logger-common/4.14.2: resolution: {integrity: sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==} dev: true /@algolia/logger-console/4.14.2: resolution: {integrity: sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==} dependencies: '@algolia/logger-common': 4.14.2 dev: true /@algolia/requester-browser-xhr/4.14.2: resolution: {integrity: sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==} dependencies: '@algolia/requester-common': 4.14.2 dev: true /@algolia/requester-common/4.14.2: resolution: {integrity: sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==} dev: true /@algolia/requester-node-http/4.14.2: resolution: {integrity: sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==} dependencies: '@algolia/requester-common': 4.14.2 dev: true /@algolia/transporter/4.14.2: resolution: {integrity: sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==} dependencies: '@algolia/cache-common': 4.14.2 '@algolia/logger-common': 4.14.2 '@algolia/requester-common': 4.14.2 dev: true /@applitools/dom-capture/11.1.1: resolution: {integrity: sha512-aUPsS3h/caQryythSjaX4uG23HzTBsnFBfO7BUvuomMdAm3qIHBstIHPCiUSJbXmPBabfqlWm59YKdxC3PTWcw==} engines: {node: '>=8.9.0'} dependencies: '@applitools/dom-shared': 1.0.5 '@applitools/functional-commons': 1.6.0 dev: true /@applitools/dom-shared/1.0.5: resolution: {integrity: sha512-O2zgnnqVi3/Atq7EQjURLa73XNaDFJCj8wHht6WQtxIv1EWYnPutNTmnJSKwK7FnbJAg65OVjZylcz4EezyYZA==} engines: {node: '>=8.9.0'} dev: true /@applitools/dom-shared/1.0.8: resolution: {integrity: sha512-HQtYfFvtlPuE9ZShBamtW1LGW2Qq4HxjQx5nF7KiNvrRTlf5/e+AWpZhXCTVEhVkAcSNs/7xR2WvumOUd+usxg==} engines: {node: '>=8.9.0'} dev: true /@applitools/dom-snapshot/4.6.2: resolution: {integrity: sha512-8XFbsIl154VK3rqNhHbSzcYDNLJ8QEgHzWht5cM0WhScWVokXUfL+kDmqjLIMZ47VgP3XXxk0rgX5QOs2TZx8Q==} engines: {node: '>=8.9.0'} dependencies: '@applitools/dom-shared': 1.0.8 '@applitools/functional-commons': 1.6.0 css-tree: 1.0.0-alpha.39 pako: 1.0.11 dev: true /@applitools/driver/1.9.20: resolution: {integrity: sha512-yrVydj5ukcBzADVTyrqEJ9rV2GauUOgC0NvXupvT+3qZSkwGumFb6SxlP5q39jy6/1EmRL9Szl1y9/DbwZ9OdQ==} engines: {node: '>=12.13.0'} dependencies: '@applitools/logger': 1.1.15 '@applitools/snippets': 2.4.5 '@applitools/types': 1.5.8 '@applitools/utils': 1.3.10 dev: true /@applitools/execution-grid-client/1.1.23: resolution: {integrity: sha512-9J66rP3HYpI10pLH+wbMWr6BAcCuaGIskSDJyitvfS8hc2UyWdpVsAIHdkmivvTEpu3f+VaLKlhINRYlCJRJpQ==} engines: {node: '>=12.13.0'} hasBin: true dependencies: '@applitools/logger': 1.1.15 '@applitools/utils': 1.3.10 abort-controller: 3.0.0 node-fetch: 2.6.7 proxy-agent: 5.0.0 raw-body: 2.5.1 yargs: 17.4.1 transitivePeerDependencies: - encoding - supports-color dev: true /@applitools/eyes-api/1.7.5: resolution: {integrity: sha512-wvFHjPFAVRSCCUg3zEr8HNoRS8lChnm9TwYI/+qjo91eNM+nVSEtPE6tb2GcdUbDqz0zpnCi8N3Mi2TulAZj2w==} engines: {node: '>=12.13.0'} dependencies: '@applitools/logger': 1.1.15 '@applitools/types': 1.5.8 '@applitools/utils': 1.3.10 dev: true /@applitools/eyes-cypress/3.27.1: resolution: {integrity: sha512-QtQawBi0B16ClPcyFEyvd8+3VKoZnJcj2UX41U5gnycQvidvJCyruFJlmuL9OnCBgpA17U4y9NnRceeHsywhqQ==} engines: {node: '>=12.13.0'} hasBin: true dependencies: '@applitools/eyes-api': 1.7.5 '@applitools/eyes-universal': 2.10.3 '@applitools/functional-commons': 1.6.0 '@applitools/logger': 1.1.15 '@applitools/visual-grid-client': 15.13.13 chalk: 3.0.0 uuid: 8.3.2 ws: 8.5.0 transitivePeerDependencies: - bufferutil - debug - encoding - supports-color - utf-8-validate dev: true /@applitools/eyes-sdk-core/13.8.19: resolution: {integrity: sha512-brijRwys0kNyGdVictyJPGdqS+6iE3G0gwYHnzBZWvP7ryh6FeIwDbLxyc43UVpmNJPKAToVZ50J+2C/S6E3pQ==} engines: {node: '>=12.13.0'} hasBin: true dependencies: '@applitools/dom-capture': 11.1.1 '@applitools/dom-snapshot': 4.6.2 '@applitools/driver': 1.9.20 '@applitools/execution-grid-client': 1.1.23 '@applitools/isomorphic-fetch': 3.0.0 '@applitools/logger': 1.1.15 '@applitools/screenshoter': 3.4.14 '@applitools/snippets': 2.4.5 '@applitools/types': 1.5.8 '@applitools/utils': 1.3.10 axios: 0.26.0 chalk: 3.0.0 tunnel: 0.0.6 transitivePeerDependencies: - debug - encoding - supports-color dev: true /@applitools/eyes-universal/2.10.3: resolution: {integrity: sha512-z/1N9RaDakfosQfGTEwFgky0DwPjpw4bCILYx1Te4vlOywCDGSD9KrJmmMqe2YkO2wgqi61uNvQvrBDePKvmHQ==} engines: {node: '>=12.13.0'} hasBin: true dependencies: '@applitools/execution-grid-client': 1.1.23 '@applitools/eyes-sdk-core': 13.8.19 '@applitools/logger': 1.1.15 '@applitools/utils': 1.3.10 '@applitools/visual-grid-client': 15.13.13 proxy-agent: 5.0.0 webdriver: 7.16.11 ws: 7.4.6 yargs: 17.4.1 transitivePeerDependencies: - bufferutil - debug - encoding - supports-color - utf-8-validate dev: true /@applitools/functional-commons/1.6.0: resolution: {integrity: sha512-fwiF0CbeYHDEOTD/NKaFgaI8LvRcGYG2GaJJiRwcedKko16sQ8F3TK5wXfj2Ytjf+8gjwHwsEEX550z3yvDWxA==} engines: {node: '>=8.0.0'} dev: true /@applitools/http-commons/2.4.7: resolution: {integrity: sha512-fsq8ULh70/htb9oHSMTkibMR7AiB+ScraYfQw4H7Sq7JfbFnlefSK0c6ZGfSrjJQx79GRfjrqQYtz59s5lxkcw==} engines: {node: '>=8.0.0'} dependencies: '@applitools/functional-commons': 1.6.0 '@applitools/monitoring-commons': 1.0.19 agentkeepalive: 4.2.1 debug: 4.3.4 lodash.merge: 4.6.2 node-fetch: 2.6.7 transitivePeerDependencies: - encoding - supports-color dev: true /@applitools/isomorphic-fetch/3.0.0: resolution: {integrity: sha512-7rutaN/2M5wYjOIOTKS/Zuc1Na90fJNEAqvo/jCxt7nSD1kYscHV3aCk9t7RD59gmzLMvUTIxFbjl4RUMV8qfg==} dependencies: node-fetch: 2.6.7 whatwg-fetch: 3.6.2 transitivePeerDependencies: - encoding dev: true /@applitools/jsdom/1.0.4: resolution: {integrity: sha512-JtjNfTJtphJYHEkicW4xlwtYuRP3TRvjoszfkrcpxTNMCbGkbop8ed9MuUfR83dAZj5NY9begbmEqJohLJco6w==} engines: {node: '>=12'} dependencies: abab: 2.0.6 acorn: 8.8.0 acorn-globals: 6.0.0 cssom: 0.5.0 cssstyle: 2.3.0 data-urls: 3.0.2 decimal.js: 10.4.1 domexception: 4.0.0 escodegen: 2.0.0 form-data: 4.0.0 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.2 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 tough-cookie: 4.1.2 w3c-hr-time: 1.0.2 w3c-xmlserializer: 3.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 10.0.0 ws: 8.5.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true /@applitools/logger/1.1.15: resolution: {integrity: sha512-2SNbINnxvGxy8G5TXIZHhXWqWBFFn0o/+4ZP57VvohPG8AF4wqXBO3H93LZMMpDz/4prND0bBLqK3XFLY4ppTQ==} engines: {node: '>=12.13.0'} dependencies: '@applitools/utils': 1.3.10 chalk: 4.1.2 dev: true /@applitools/monitoring-commons/1.0.19: resolution: {integrity: sha512-rzEOvGoiEF4KnK0PJ9I0btdwnaNlIPLYhjF1vTEG15PoucbbKpix9fYusxWlDG7kMiZya8ZycVPc0woVlNaHRQ==} engines: {node: '>=8.0.0'} dependencies: debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true /@applitools/screenshoter/3.4.14: resolution: {integrity: sha512-vdaHxzSobJzujyXENSuVybYyOfBWZlDb6OwVzRsiJxpwuN9L5VtOu30kuvxAXzycHMfa+8vLgO2pHnU6Vp/MiQ==} engines: {node: '>=12.13.0'} dependencies: '@applitools/logger': 1.1.15 '@applitools/snippets': 2.4.5 '@applitools/utils': 1.3.10 jpeg-js: 0.4.4 png-async: 0.9.4 dev: true /@applitools/snippets/2.4.5: resolution: {integrity: sha512-GoLN1wu8u5/qwdk1ozEElqmr4y7AoMQl0Ka0OzisGdx9/L7R0RzSWQCErjkf4LgKiWKK8j7lde3JT9yjxfritQ==} engines: {node: '>=12.13.0'} dev: true /@applitools/types/1.5.8: resolution: {integrity: sha512-trMH32oewkrptYG26IzEbwMW9VG9BJo64bzwx/T4oz6ZfndXGCjwGCFQE4FDE++dRZTjzSF00h2YSzIxPAapeQ==} engines: {node: '>=12.13.0'} dev: true /@applitools/utils/1.3.10: resolution: {integrity: sha512-CI/5BLB0D/aZn6uL8JJmsErI+TOHCa4Gz5Wi8sJknuPz/V9Ws6jIh9ZCTzvOCDUIp99qLJwD6TSA2BY9aMhCNw==} engines: {node: '>=12.13.0'} dev: true /@applitools/visual-grid-client/15.13.13: resolution: {integrity: sha512-3GkzrR0WEcsihRZEgbxXecfBb8Q0U/L7VDNpy/APlw7K54kWPgTal/CYk1NwLDKj9iqpHlFfvDhI0zoeCNrR4A==} engines: {node: '>=12.13.0'} dependencies: '@applitools/eyes-sdk-core': 13.8.19 '@applitools/functional-commons': 1.6.0 '@applitools/http-commons': 2.4.7 '@applitools/isomorphic-fetch': 3.0.0 '@applitools/jsdom': 1.0.4 '@applitools/logger': 1.1.15 abort-controller: 3.0.0 chalk: 3.0.0 postcss-value-parser: 4.1.0 throat: 5.0.0 transitivePeerDependencies: - bufferutil - debug - encoding - supports-color - utf-8-validate dev: true /@babel/code-frame/7.18.6: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 dev: true /@babel/compat-data/7.19.1: resolution: {integrity: sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==} engines: {node: '>=6.9.0'} dev: true /@babel/core/7.12.3: resolution: {integrity: sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 '@babel/generator': 7.12.1 '@babel/helper-module-transforms': 7.19.0 '@babel/helpers': 7.19.0 '@babel/parser': 7.12.3 '@babel/template': 7.18.10 '@babel/traverse': 7.19.1 '@babel/types': 7.19.0 convert-source-map: 1.8.0 debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.1 lodash: 4.17.21 resolve: 1.22.1 semver: 5.7.1 source-map: 0.5.7 transitivePeerDependencies: - supports-color dev: true /@babel/generator/7.12.1: resolution: {integrity: sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==} dependencies: '@babel/types': 7.19.0 jsesc: 2.5.2 source-map: 0.5.7 dev: true /@babel/generator/7.19.0: resolution: {integrity: sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.19.0 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 dev: true /@babel/helper-annotate-as-pure/7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.19.0 dev: true /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-explode-assignable-expression': 7.18.6 '@babel/types': 7.19.0 dev: true /@babel/helper-compilation-targets/7.19.1_@babel+core@7.12.3: resolution: {integrity: sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/compat-data': 7.19.1 '@babel/core': 7.12.3 '@babel/helper-validator-option': 7.18.6 browserslist: 4.21.4 semver: 6.3.0 dev: true /@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.12.3: resolution: {integrity: sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.12.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.19.1 '@babel/helper-split-export-declaration': 7.18.6 transitivePeerDependencies: - supports-color dev: true /@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.12.3: resolution: {integrity: sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.12.3 '@babel/helper-annotate-as-pure': 7.18.6 regexpu-core: 5.2.1 dev: true /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.12.3: resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-compilation-targets': 7.19.1_@babel+core@7.12.3 '@babel/helper-plugin-utils': 7.19.0 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.1 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true /@babel/helper-environment-visitor/7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} dev: true /@babel/helper-explode-assignable-expression/7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.19.0 dev: true /@babel/helper-function-name/7.19.0: resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.18.10 '@babel/types': 7.19.0 dev: true /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.19.0 dev: true /@babel/helper-member-expression-to-functions/7.18.9: resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.19.0 dev: true /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.19.0 dev: true /@babel/helper-module-transforms/7.19.0: resolution: {integrity: sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-module-imports': 7.18.6 '@babel/helper-simple-access': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.18.10 '@babel/traverse': 7.19.1 '@babel/types': 7.19.0 transitivePeerDependencies: - supports-color dev: true /@babel/helper-optimise-call-expression/7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.19.0 dev: true /@babel/helper-plugin-utils/7.19.0: resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==} engines: {node: '>=6.9.0'} dev: true /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.12.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.19.0 '@babel/types': 7.19.0 transitivePeerDependencies: - supports-color dev: true /@babel/helper-replace-supers/7.19.1: resolution: {integrity: sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/traverse': 7.19.1 '@babel/types': 7.19.0 transitivePeerDependencies: - supports-color dev: true /@babel/helper-simple-access/7.18.6: resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.19.0 dev: true /@babel/helper-skip-transparent-expression-wrappers/7.18.9: resolution: {integrity: sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.19.0 dev: true /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.19.0 dev: true /@babel/helper-string-parser/7.18.10: resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} engines: {node: '>=6.9.0'} dev: true /@babel/helper-validator-identifier/7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} dev: true /@babel/helper-validator-option/7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} engines: {node: '>=6.9.0'} dev: true /@babel/helper-wrap-function/7.19.0: resolution: {integrity: sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-function-name': 7.19.0 '@babel/template': 7.18.10 '@babel/traverse': 7.19.1 '@babel/types': 7.19.0 transitivePeerDependencies: - supports-color dev: true /@babel/helpers/7.19.0: resolution: {integrity: sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.18.10 '@babel/traverse': 7.19.1 '@babel/types': 7.19.0 transitivePeerDependencies: - supports-color dev: true /@babel/highlight/7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.19.1 chalk: 2.4.2 js-tokens: 4.0.0 dev: true /@babel/parser/7.12.3: resolution: {integrity: sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@babel/types': 7.19.0 dev: true /@babel/parser/7.19.1: resolution: {integrity: sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@babel/types': 7.19.0 dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-async-generator-functions/7.19.1_@babel+core@7.12.3: resolution: {integrity: sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.12.3 '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.12.3 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.12.3 '@babel/helper-plugin-utils': 7.19.0 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.12.3 '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.12.3 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-proposal-decorators/7.19.1_@babel+core@7.12.3: resolution: {integrity: sha512-LfIKNBBY7Q1OX5C4xAgRQffOg2OnhAo9fnbcOHgOC9Yytm2Sw+4XqHufRYU86tHomzepxtvuVaNO+3EVKR4ivw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-replace-supers': 7.19.1 '@babel/helper-split-export-declaration': 7.18.6 '@babel/plugin-syntax-decorators': 7.19.0_@babel+core@7.12.3 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-proposal-do-expressions/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-ddToGCONJhCuL+l4FhtGnKl5ZYCj9fDVFiqiCdQDpeIbVn/NvMeSib+7T1/rk08jRafae4qNiP8OnJyuqlsuYA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-do-expressions': 7.18.6_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-export-default-from/7.18.10_@babel+core@7.12.3: resolution: {integrity: sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-export-default-from': 7.18.6_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-function-bind/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-9RfxqKkRBCCT0xoBl9AqieCMscJmSAL9HYixGMWH549jUpT9csWWK/HEYZEx9t9iW/PRSXgX95x9bDlgtAJGFA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-function-bind': 7.18.6_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-function-sent/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-UdaOKPOLPt0O+Xu26tnw6oAZMLXhk+yMrXOzn6kAzTHBnWHJsoN1hlrgxFAQ+FRLS0ql1oYIQ2phvoFzmN3GMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-wrap-function': 7.19.0 '@babel/plugin-syntax-function-sent': 7.18.6_@babel+core@7.12.3 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-object-rest-spread/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.19.1 '@babel/core': 7.12.3 '@babel/helper-compilation-targets': 7.19.1_@babel+core@7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.3 '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-pipeline-operator/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-Pc33e6m8f4MJhRXVCUwiKZNtEm+W2CUPHIL0lyJNtkp+w6d75CLw3gsBKQ81VAMUgT9jVPIEU8gwJ5nJgmJ1Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-pipeline-operator': 7.18.6_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.12.3 '@babel/helper-plugin-utils': 7.19.0 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.12.3 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-proposal-throw-expressions/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-WHOrJyhGoGrdtW480L79cF7Iq/gZDZ/z6OqK7mVyFR5I37dTpog/wNgb6hmaM3HYZtULEJl++7VaMWkNZsOcHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-throw-expressions': 7.18.6_@babel+core@7.12.3 dev: true /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.12.3: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.12.3: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.12.3: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.12.3: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-decorators/7.19.0_@babel+core@7.12.3: resolution: {integrity: sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-do-expressions/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-kTogvOsjBTVOSZtkkziiXB5hwGXqwhq2gBXDaiWVruRLDT7C2GqfbsMnicHJ7ePq2GE8UJeWS34YbNP6yDhwUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.12.3: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-export-default-from/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.12.3: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-function-bind/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-wZN0Aq/AScknI9mKGcR3TpHdASMufFGaeJgc1rhPmLtZ/PniwjePSh8cfh8tXMB3U4kh/3cRKrLjDtedejg8jQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-function-sent/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-f3OJHIlFIkg+cP1Hfo2SInLhsg0pz2Ikmgo7jMdIIKC+3jVXQlHB0bgSapOWxeWI0SU28qIWmfn5ZKu1yPJHkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-import-assertions/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.12.3: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.12.3: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.12.3: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.12.3: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.12.3: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.12.3: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.12.3: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.12.3: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-pipeline-operator/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-pFtIdQomJtkTHWcNsGXhjJ5YUkL+AxJnP4G+Ol85UO6uT2fpHTPYLLE5bBeRA9cxf25qa/VKsJ3Fi67Gyqe3rA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.12.3: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-throw-expressions/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-rp1CqEZXGv1z1YZ3qYffBH3rhnOxrTwQG8fh2yqulTurwv9zu3Gthfd+niZBLSOi1rY6146TgF+JmVeDXaX4TQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.12.3: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-syntax-typescript/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.12.3 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-block-scoping/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-classes/7.19.0_@babel+core@7.12.3: resolution: {integrity: sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-compilation-targets': 7.19.1_@babel+core@7.12.3 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-replace-supers': 7.19.1 '@babel/helper-split-export-declaration': 7.18.6 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-destructuring/7.18.13_@babel+core@7.12.3: resolution: {integrity: sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-flow-strip-types/7.19.0_@babel+core@7.12.3: resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.12.3 dev: true /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.12.3: resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-compilation-targets': 7.19.1_@babel+core@7.12.3 '@babel/helper-function-name': 7.19.0 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-literals/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-modules-amd/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-module-transforms': 7.19.0 '@babel/helper-plugin-utils': 7.19.0 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-transform-modules-commonjs/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-module-transforms': 7.19.0 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-simple-access': 7.18.6 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-transform-modules-systemjs/7.19.0_@babel+core@7.12.3: resolution: {integrity: sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-module-transforms': 7.19.0 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-validator-identifier': 7.19.1 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-module-transforms': 7.19.0 '@babel/helper-plugin-utils': 7.19.0 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.12.3: resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.12.3 '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-replace-supers': 7.19.1 transitivePeerDependencies: - supports-color dev: true /@babel/plugin-transform-parameters/7.18.8_@babel+core@7.12.3: resolution: {integrity: sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.12.3 dev: true /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.12.3: resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.12.3 '@babel/types': 7.19.0 dev: true /@babel/plugin-transform-react-pure-annotations/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 regenerator-transform: 0.15.0 dev: true /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-spread/7.19.0_@babel+core@7.12.3: resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 dev: true /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.12.3: resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.12.3: resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.3 '@babel/helper-plugin-utils': 7.19.0 dev: true /@babel/preset-env/7.19.1_@babel+core@7.12.3: resolution: {integrity: sha512-c8B2c6D16Lp+Nt6HcD+nHl0VbPKVnNPTpszahuxJJnurfMtKeZ80A+qUv48Y7wqvS+dTFuLuaM9oYxyNHbCLWA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.19.1 '@babel/core': 7.12.3 '@babel/helper-compilation-targets': 7.19.1_@babel+core@7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-validator-option': 7.18.6 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.12.3 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.18.9_@babel+core@7.12.3 '@babel/plugin-proposal-async-generator-functions': 7.19.1_@babel+core@7.12.3 '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-class-static-block': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.12.3 '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-logical-assignment-operators': 7.18.9_@babel+core@7.12.3 '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.12.3 '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.12.3 '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.12.3 '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.12.3 '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.12.3 '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.12.3 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-import-assertions': 7.18.6_@babel+core@7.12.3 '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.12.3 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.12.3 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.12.3 '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.12.3 '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.12.3 '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.12.3 '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.12.3 '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.12.3 '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.12.3 '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.12.3 '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.12.3 '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.12.3 '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-modules-amd': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-modules-commonjs': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-modules-systemjs': 7.19.0_@babel+core@7.12.3 '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1_@babel+core@7.12.3 '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.12.3 '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-regenerator': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.12.3 '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.12.3 '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.12.3 '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.12.3 '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.12.3 '@babel/preset-modules': 0.1.5_@babel+core@7.12.3 '@babel/types': 7.19.0 babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.12.3 babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.12.3 babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.12.3 core-js-compat: 3.25.2 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true /@babel/preset-flow/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-validator-option': 7.18.6 '@babel/plugin-transform-flow-strip-types': 7.19.0_@babel+core@7.12.3 dev: true /@babel/preset-modules/0.1.5_@babel+core@7.12.3: resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.12.3 '@babel/types': 7.19.0 esutils: 2.0.3 dev: true /@babel/preset-react/7.18.6_@babel+core@7.12.3: resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-validator-option': 7.18.6 '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.12.3 '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.12.3 '@babel/plugin-transform-react-pure-annotations': 7.18.6_@babel+core@7.12.3 dev: true /@babel/preset-stage-0/7.8.3: resolution: {integrity: sha512-+l6FlG1j73t4wh78W41StbcCz0/9a1/y+vxfnjtHl060kSmcgMfGzK9MEkLvrCOXfhp9RCX+d88sm6rOqxEIEQ==} dev: true /@babel/runtime/7.19.0: resolution: {integrity: sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.9 dev: true /@babel/template/7.18.10: resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 '@babel/parser': 7.19.1 '@babel/types': 7.19.0 dev: true /@babel/traverse/7.19.1: resolution: {integrity: sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 '@babel/generator': 7.19.0 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 '@babel/parser': 7.19.1 '@babel/types': 7.19.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true /@babel/types/7.19.0: resolution: {integrity: sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.18.10 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 dev: true /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true /@braintree/sanitize-url/6.0.0: resolution: {integrity: sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w==} /@cnakazawa/watch/1.0.4: resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} engines: {node: '>=0.1.95'} hasBin: true dependencies: exec-sh: 0.3.6 minimist: 1.2.6 dev: true /@colors/colors/1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} requiresBuild: true dev: true optional: true /@commitlint/cli/17.1.2: resolution: {integrity: sha512-h/4Hlka3bvCLbnxf0Er2ri5A44VMlbMSkdTRp8Adv2tRiklSTRIoPGs7OEXDv3EoDs2AAzILiPookgM4Gi7LOw==} engines: {node: '>=v14'} hasBin: true dependencies: '@commitlint/format': 17.0.0 '@commitlint/lint': 17.1.0 '@commitlint/load': 17.1.2 '@commitlint/read': 17.1.0 '@commitlint/types': 17.0.0 execa: 5.1.1 lodash: 4.17.21 resolve-from: 5.0.0 resolve-global: 1.0.0 yargs: 17.5.1 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true /@commitlint/config-conventional/17.1.0: resolution: {integrity: sha512-WU2p0c9/jLi8k2q2YrDV96Y8XVswQOceIQ/wyJvQxawJSCasLdRB3kUIYdNjOCJsxkpoUlV/b90ZPxp1MYZDiA==} engines: {node: '>=v14'} dependencies: conventional-changelog-conventionalcommits: 5.0.0 dev: true /@commitlint/config-validator/17.1.0: resolution: {integrity: sha512-Q1rRRSU09ngrTgeTXHq6ePJs2KrI+axPTgkNYDWSJIuS1Op4w3J30vUfSXjwn5YEJHklK3fSqWNHmBhmTR7Vdg==} engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.0.0 ajv: 8.11.0 dev: true /@commitlint/ensure/17.0.0: resolution: {integrity: sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==} engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.0.0 lodash: 4.17.21 dev: true /@commitlint/execute-rule/17.0.0: resolution: {integrity: sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==} engines: {node: '>=v14'} dev: true /@commitlint/format/17.0.0: resolution: {integrity: sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==} engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.0.0 chalk: 4.1.2 dev: true /@commitlint/is-ignored/17.1.0: resolution: {integrity: sha512-JITWKDMHhIh8IpdIbcbuH9rEQJty1ZWelgjleTFrVRAcEwN/sPzk1aVUXRIZNXMJWbZj8vtXRJnFihrml8uECQ==} engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.0.0 semver: 7.3.7 dev: true /@commitlint/lint/17.1.0: resolution: {integrity: sha512-ltpqM2ogt/+SDhUaScFo0MdscncEF96lvQTPMM/VTTWlw7sTGLLWkOOppsee2MN/uLNNWjQ7kqkd4h6JqoM9AQ==} engines: {node: '>=v14'} dependencies: '@commitlint/is-ignored': 17.1.0 '@commitlint/parse': 17.0.0 '@commitlint/rules': 17.0.0 '@commitlint/types': 17.0.0 dev: true /@commitlint/load/17.1.2: resolution: {integrity: sha512-sk2p/jFYAWLChIfOIp/MGSIn/WzZ0vkc3afw+l4X8hGEYkvDe4gQUUAVxjl/6xMRn0HgnSLMZ04xXh5pkTsmgg==} engines: {node: '>=v14'} dependencies: '@commitlint/config-validator': 17.1.0 '@commitlint/execute-rule': 17.0.0 '@commitlint/resolve-extends': 17.1.0 '@commitlint/types': 17.0.0 '@types/node': 14.18.29 chalk: 4.1.2 cosmiconfig: 7.0.1 cosmiconfig-typescript-loader: 4.1.0_nxlrwu45zhpwmwjzs33dzt3ak4 lodash: 4.17.21 resolve-from: 5.0.0 ts-node: 10.9.1_sqjhzn5m3vxyw66a2xhtc43hby typescript: 4.8.4 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true /@commitlint/message/17.0.0: resolution: {integrity: sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==} engines: {node: '>=v14'} dev: true /@commitlint/parse/17.0.0: resolution: {integrity: sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A==} engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.0.0 conventional-changelog-angular: 5.0.13 conventional-commits-parser: 3.2.4 dev: true /@commitlint/read/17.1.0: resolution: {integrity: sha512-73BoFNBA/3Ozo2JQvGsE0J8SdrJAWGfZQRSHqvKaqgmY042Su4gXQLqvAzgr55S9DI1l9TiU/5WDuh8IE86d/g==} engines: {node: '>=v14'} dependencies: '@commitlint/top-level': 17.0.0 '@commitlint/types': 17.0.0 fs-extra: 10.1.0 git-raw-commits: 2.0.11 minimist: 1.2.6 dev: true /@commitlint/resolve-extends/17.1.0: resolution: {integrity: sha512-jqKm00LJ59T0O8O4bH4oMa4XyJVEOK4GzH8Qye9XKji+Q1FxhZznxMV/bDLyYkzbTodBt9sL0WLql8wMtRTbqQ==} engines: {node: '>=v14'} dependencies: '@commitlint/config-validator': 17.1.0 '@commitlint/types': 17.0.0 import-fresh: 3.3.0 lodash: 4.17.21 resolve-from: 5.0.0 resolve-global: 1.0.0 dev: true /@commitlint/rules/17.0.0: resolution: {integrity: sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==} engines: {node: '>=v14'} dependencies: '@commitlint/ensure': 17.0.0 '@commitlint/message': 17.0.0 '@commitlint/to-lines': 17.0.0 '@commitlint/types': 17.0.0 execa: 5.1.1 dev: true /@commitlint/to-lines/17.0.0: resolution: {integrity: sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==} engines: {node: '>=v14'} dev: true /@commitlint/top-level/17.0.0: resolution: {integrity: sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==} engines: {node: '>=v14'} dependencies: find-up: 5.0.0 dev: true /@commitlint/types/17.0.0: resolution: {integrity: sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==} engines: {node: '>=v14'} dependencies: chalk: 4.1.2 dev: true /@cspotcode/source-map-support/0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 dev: true /@cypress/request/2.88.10: resolution: {integrity: sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==} engines: {node: '>= 6'} dependencies: aws-sign2: 0.7.0 aws4: 1.11.0 caseless: 0.12.0 combined-stream: 1.0.8 extend: 3.0.2 forever-agent: 0.6.1 form-data: 2.3.3 http-signature: 1.3.6 is-typedarray: 1.0.0 isstream: 0.1.2 json-stringify-safe: 5.0.1 mime-types: 2.1.35 performance-now: 2.1.0 qs: 6.5.3 safe-buffer: 5.2.1 tough-cookie: 2.5.0 tunnel-agent: 0.6.0 uuid: 8.3.2 dev: true /@cypress/xvfb/1.2.4_supports-color@8.1.1: resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} dependencies: debug: 3.2.7_supports-color@8.1.1 lodash.once: 4.1.1 transitivePeerDependencies: - supports-color dev: true /@docsearch/css/3.2.1: resolution: {integrity: sha512-gaP6TxxwQC+K8D6TRx5WULUWKrcbzECOPA2KCVMuI+6C7dNiGUk5yXXzVhc5sld79XKYLnO9DRTI4mjXDYkh+g==} dev: true /@docsearch/js/3.2.1_tbpndr44ulefs3hehwpi2mkf2y: resolution: {integrity: sha512-H1PekEtSeS0msetR2YGGey2w7jQ2wAKfGODJvQTygSwMgUZ+2DHpzUgeDyEBIXRIfaBcoQneqrzsljM62pm6Xg==} dependencies: '@docsearch/react': 3.2.1_tbpndr44ulefs3hehwpi2mkf2y preact: 10.11.0 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' - react - react-dom dev: true /@docsearch/react/3.2.1_tbpndr44ulefs3hehwpi2mkf2y: resolution: {integrity: sha512-EzTQ/y82s14IQC5XVestiK/kFFMe2aagoYFuTAIfIb/e+4FU7kSMKonRtLwsCiLQHmjvNQq+HO+33giJ5YVtaQ==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' react-dom: '>= 16.8.0 < 19.0.0' peerDependenciesMeta: '@types/react': optional: true react: optional: true react-dom: optional: true dependencies: '@algolia/autocomplete-core': 1.7.1 '@algolia/autocomplete-preset-algolia': 1.7.1_qs6lk5nhygj2o3hj4sf6xnr724 '@docsearch/css': 3.2.1 algoliasearch: 4.14.2 transitivePeerDependencies: - '@algolia/client-search' dev: true /@es-joy/jsdoccomment/0.31.0: resolution: {integrity: sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==} engines: {node: ^14 || ^16 || ^17 || ^18} dependencies: comment-parser: 1.3.1 esquery: 1.4.0 jsdoc-type-pratt-parser: 3.1.0 dev: true /@esbuild/android-arm/0.15.10: resolution: {integrity: sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true /@esbuild/android-arm/0.15.8: resolution: {integrity: sha512-CyEWALmn+no/lbgbAJsbuuhT8s2J19EJGHkeyAwjbFJMrj80KJ9zuYsoAvidPTU7BgBf87r/sgae8Tw0dbOc4Q==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true dependencies: esbuild-wasm: 0.15.8 dev: true optional: true /@esbuild/linux-loong64/0.15.10: resolution: {integrity: sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true dev: true optional: true /@esbuild/linux-loong64/0.15.8: resolution: {integrity: sha512-pE5RQsOTSERCtfZdfCT25wzo7dfhOSlhAXcsZmuvRYhendOv7djcdvtINdnDp2DAjP17WXlBB4nBO6sHLczmsg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true dev: true optional: true /@eslint/eslintrc/1.3.2: resolution: {integrity: sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 espree: 9.4.0 globals: 13.17.0 ignore: 5.2.0 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color dev: true /@hapi/hoek/9.3.0: resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} dev: true /@hapi/topo/5.1.0: resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} dependencies: '@hapi/hoek': 9.3.0 dev: true /@humanwhocodes/config-array/0.10.5: resolution: {integrity: sha512-XVVDtp+dVvRxMoxSiSfasYaG02VEe1qH5cKgMQJWhol6HwzbcqoCMJi8dAGoYAO57jhUyhI6cWuRiTcRaDaYug==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color dev: true /@humanwhocodes/gitignore-to-minimatch/1.0.2: resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==} dev: true /@humanwhocodes/module-importer/1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} dev: true /@humanwhocodes/object-schema/1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true /@hutson/parse-repository-url/3.0.2: resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==} engines: {node: '>=6.9.0'} dev: true /@istanbuljs/load-nyc-config/1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} dependencies: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 js-yaml: 3.14.1 resolve-from: 5.0.0 dev: true /@istanbuljs/schema/0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} dev: true /@jest/console/26.6.2: resolution: {integrity: sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@types/node': 18.8.1 chalk: 4.1.2 jest-message-util: 26.6.2 jest-util: 26.6.2 slash: 3.0.0 dev: true /@jest/console/29.1.0: resolution: {integrity: sha512-yNoFMuAsXTP8OyweaMaIoa6Px6rJkbbG7HtgYKGP3CY7lE7ADRA0Fn5ad9O+KefKcaf6W9rywKpCWOw21WMsAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.1.0 '@types/node': 18.8.1 chalk: 4.1.2 jest-message-util: 29.1.0 jest-util: 29.1.0 slash: 3.0.0 dev: true /@jest/core/26.6.3_ts-node@10.9.1: resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==} engines: {node: '>= 10.14.2'} dependencies: '@jest/console': 26.6.2 '@jest/reporters': 26.6.2 '@jest/test-result': 26.6.2 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 '@types/node': 18.8.1 ansi-escapes: 4.3.2 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 26.6.2 jest-config: 26.6.3_ts-node@10.9.1 jest-haste-map: 26.6.2 jest-message-util: 26.6.2 jest-regex-util: 26.0.0 jest-resolve: 26.6.2 jest-resolve-dependencies: 26.6.3 jest-runner: 26.6.3_ts-node@10.9.1 jest-runtime: 26.6.3_ts-node@10.9.1 jest-snapshot: 26.6.2 jest-util: 26.6.2 jest-validate: 26.6.2 jest-watcher: 26.6.2 micromatch: 4.0.5 p-each-series: 2.2.0 rimraf: 3.0.2 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: - bufferutil - canvas - supports-color - ts-node - utf-8-validate dev: true /@jest/core/29.1.1_ts-node@10.9.1: resolution: {integrity: sha512-ppym+PLiuSmvU9ufXVb/8OtHUPcjW+bBlb8CLh6oMATgJtCE3fjDYrzJi5u1uX8q9jbmtQ7VADKJKIlp68zi3A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true dependencies: '@jest/console': 29.1.0 '@jest/reporters': 29.1.0 '@jest/test-result': 29.1.0 '@jest/transform': 29.1.0 '@jest/types': 29.1.0 '@types/node': 18.8.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.4.0 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 29.0.0 jest-config: 29.1.1_ahjkdke2ds2w5gj6yhynj4mjsq jest-haste-map: 29.1.0 jest-message-util: 29.1.0 jest-regex-util: 29.0.0 jest-resolve: 29.1.0 jest-resolve-dependencies: 29.1.1 jest-runner: 29.1.1 jest-runtime: 29.1.1 jest-snapshot: 29.1.0 jest-util: 29.1.0 jest-validate: 29.1.0 jest-watcher: 29.1.0 micromatch: 4.0.5 pretty-format: 29.1.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: - supports-color - ts-node dev: true /@jest/environment/26.6.2: resolution: {integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==} engines: {node: '>= 10.14.2'} dependencies: '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 '@types/node': 18.8.1 jest-mock: 26.6.2 dev: true /@jest/environment/29.1.1: resolution: {integrity: sha512-69WULhTD38UcjvLGRAnnwC5hDt35ZC91ZwnvWipNOAOSaQNT32uKYL/TVCT3tncB9L1D++LOmBbYhTYP4TLuuQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/fake-timers': 29.1.1 '@jest/types': 29.1.0 '@types/node': 18.8.1 jest-mock: 29.1.1 dev: true /@jest/expect-utils/29.1.0: resolution: {integrity: sha512-YcD5CF2beqfoB07WqejPzWq1/l+zT3SgGwcqqIaPPG1DHFn/ea8MWWXeqV3KKMhTaOM1rZjlYplj1GQxR0XxKA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.0.0 dev: true /@jest/expect/29.1.0: resolution: {integrity: sha512-qWQttxE5rEwzvDW9G3f0o8chu1EKvIfsMQDeRlXMLCtsDS94ckcqEMNgbKKz0NYlZ45xrIoy+/pngt3ZFr/2zw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: expect: 29.1.0 jest-snapshot: 29.1.0 transitivePeerDependencies: - supports-color dev: true /@jest/fake-timers/26.6.2: resolution: {integrity: sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@sinonjs/fake-timers': 6.0.1 '@types/node': 18.8.1 jest-message-util: 26.6.2 jest-mock: 26.6.2 jest-util: 26.6.2 dev: true /@jest/fake-timers/29.1.1: resolution: {integrity: sha512-5wTGObRfL/OjzEz0v2ShXlzeJFJw8mO6ByMBwmPLd6+vkdPcmIpCvASG/PR/g8DpchSIEeDXCxQADojHxuhX8g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.1.0 '@sinonjs/fake-timers': 9.1.2 '@types/node': 18.8.1 jest-message-util: 29.1.0 jest-mock: 29.1.1 jest-util: 29.1.0 dev: true /@jest/globals/26.6.2: resolution: {integrity: sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==} engines: {node: '>= 10.14.2'} dependencies: '@jest/environment': 26.6.2 '@jest/types': 26.6.2 expect: 26.6.2 dev: true /@jest/globals/29.1.1: resolution: {integrity: sha512-yTiusxeEHjXwmo3guWlN31a1harU8zekLBMlZpOZ+84rfO3HDrkNZLTfd/YaHF8CrwlNCFpDGNSQCH8WkklH/Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.1.1 '@jest/expect': 29.1.0 '@jest/types': 29.1.0 jest-mock: 29.1.1 transitivePeerDependencies: - supports-color dev: true /@jest/reporters/26.6.2: resolution: {integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==} engines: {node: '>= 10.14.2'} dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 26.6.2 '@jest/test-result': 26.6.2 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.10 istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 4.0.3 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 jest-haste-map: 26.6.2 jest-resolve: 26.6.2 jest-util: 26.6.2 jest-worker: 26.6.2 slash: 3.0.0 source-map: 0.6.1 string-length: 4.0.2 terminal-link: 2.1.1 v8-to-istanbul: 7.1.2 optionalDependencies: node-notifier: 8.0.2 transitivePeerDependencies: - supports-color dev: true /@jest/reporters/29.1.0: resolution: {integrity: sha512-szSjHjVuBQ7aZUdBzTicCoQAAQsQFLk+/PtMfO0RQxL5mQ1iw+PSKOpyvMZcA5T6bH9pIapue5U9UCrxfOtL3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 29.1.0 '@jest/test-result': 29.1.0 '@jest/transform': 29.1.0 '@jest/types': 29.1.0 '@jridgewell/trace-mapping': 0.3.15 '@types/node': 18.8.1 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.10 istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.2.0 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 jest-message-util: 29.1.0 jest-util: 29.1.0 jest-worker: 29.1.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 terminal-link: 2.1.1 v8-to-istanbul: 9.0.1 transitivePeerDependencies: - supports-color dev: true /@jest/schemas/29.0.0: resolution: {integrity: sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.24.43 dev: true /@jest/source-map/26.6.2: resolution: {integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==} engines: {node: '>= 10.14.2'} dependencies: callsites: 3.1.0 graceful-fs: 4.2.10 source-map: 0.6.1 dev: true /@jest/source-map/29.0.0: resolution: {integrity: sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jridgewell/trace-mapping': 0.3.15 callsites: 3.1.0 graceful-fs: 4.2.10 dev: true /@jest/test-result/26.6.2: resolution: {integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==} engines: {node: '>= 10.14.2'} dependencies: '@jest/console': 26.6.2 '@jest/types': 26.6.2 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true /@jest/test-result/29.1.0: resolution: {integrity: sha512-RMBhPlw1Qfc2bKSf3RFPCyFSN7cfWVSTxRD8JrnvqdqgaDgrq4aGJT1A/V2+5Vq9bqBd187FpaxGTQ4zLrt08g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/console': 29.1.0 '@jest/types': 29.1.0 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true /@jest/test-sequencer/26.6.3_ts-node@10.9.1: resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==} engines: {node: '>= 10.14.2'} dependencies: '@jest/test-result': 26.6.2 graceful-fs: 4.2.10 jest-haste-map: 26.6.2 jest-runner: 26.6.3_ts-node@10.9.1 jest-runtime: 26.6.3_ts-node@10.9.1 transitivePeerDependencies: - bufferutil - canvas - supports-color - ts-node - utf-8-validate dev: true /@jest/test-sequencer/29.1.0: resolution: {integrity: sha512-1diQfwNhBAte+x3TmyfWloxT1C8GcPEPEZ4BZjmELBK2j3cdqi0DofoJUxBDDUBBnakbv8ce0B7CIzprsupPSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/test-result': 29.1.0 graceful-fs: 4.2.10 jest-haste-map: 29.1.0 slash: 3.0.0 dev: true /@jest/transform/26.6.2: resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} engines: {node: '>= 10.14.2'} dependencies: '@babel/core': 7.12.3 '@jest/types': 26.6.2 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 1.8.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.10 jest-haste-map: 26.6.2 jest-regex-util: 26.0.0 jest-util: 26.6.2 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 source-map: 0.6.1 write-file-atomic: 3.0.3 transitivePeerDependencies: - supports-color dev: true /@jest/transform/29.1.0: resolution: {integrity: sha512-NI1zd62KgM0lW6rWMIZDx52dfTIDd+cnLQNahH0YhH7TVmQVigumJ6jszuhAzvKHGm55P2Fozcglb5sGMfFp3Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.12.3 '@jest/types': 29.1.0 '@jridgewell/trace-mapping': 0.3.15 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 1.8.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.10 jest-haste-map: 29.1.0 jest-regex-util: 29.0.0 jest-util: 29.1.0 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color dev: true /@jest/types/26.6.2: resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} engines: {node: '>= 10.14.2'} dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 '@types/node': 18.8.1 '@types/yargs': 15.0.14 chalk: 4.1.2 dev: true /@jest/types/29.1.0: resolution: {integrity: sha512-lE30u3z4lbTOqf5D7fDdoco3Qd8H6F/t73nLOswU4x+7VhgDQMX5y007IMqrKjFHdnpslaYymVFhWX+ttXNARQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.0.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 '@types/node': 18.8.1 '@types/yargs': 17.0.13 chalk: 4.1.2 dev: true /@jridgewell/gen-mapping/0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 '@jridgewell/trace-mapping': 0.3.15 dev: true /@jridgewell/resolve-uri/3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true /@jridgewell/set-array/1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} dev: true /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true /@jridgewell/trace-mapping/0.3.15: resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true /@jridgewell/trace-mapping/0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 dev: true /@nodelib/fs.stat/2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true /@nodelib/fs.walk/1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.13.0 dev: true /@polka/url/1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} dev: true /@rollup/pluginutils/4.2.1: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} dependencies: estree-walker: 2.0.2 picomatch: 2.3.1 dev: true /@sideway/address/4.1.4: resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: '@hapi/hoek': 9.3.0 dev: true /@sideway/formula/3.0.0: resolution: {integrity: sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==} dev: true /@sideway/pinpoint/2.0.0: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} dev: true /@sinclair/typebox/0.24.43: resolution: {integrity: sha512-1orQTvtazZmsPeBroJjysvsOQCYV2yjWlebkSY38pl5vr2tdLjEJ+LoxITlGNZaH2RE19WlAwQMkH/7C14wLfw==} dev: true /@sindresorhus/is/4.6.0: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} dev: true /@sinonjs/commons/1.8.3: resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} dependencies: type-detect: 4.0.8 dev: true /@sinonjs/fake-timers/6.0.1: resolution: {integrity: sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==} dependencies: '@sinonjs/commons': 1.8.3 dev: true /@sinonjs/fake-timers/9.1.2: resolution: {integrity: sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==} dependencies: '@sinonjs/commons': 1.8.3 dev: true /@szmarczak/http-timer/4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} dependencies: defer-to-connect: 2.0.1 dev: true /@tootallnate/once/1.1.2: resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} dev: true /@tootallnate/once/2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} dev: true /@tsconfig/node10/1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true /@tsconfig/node12/1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true /@tsconfig/node14/1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true /@tsconfig/node16/1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true /@types/babel__core/7.1.19: resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==} dependencies: '@babel/parser': 7.19.1 '@babel/types': 7.19.0 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.2 dev: true /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: '@babel/types': 7.19.0 dev: true /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: '@babel/parser': 7.19.1 '@babel/types': 7.19.0 dev: true /@types/babel__traverse/7.18.2: resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==} dependencies: '@babel/types': 7.19.0 dev: true /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 '@types/node': 18.8.1 dev: true /@types/cacheable-request/6.0.2: resolution: {integrity: sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==} dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 '@types/node': 18.8.1 '@types/responselike': 1.0.0 dev: true /@types/chai-subset/1.3.3: resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} dependencies: '@types/chai': 4.3.3 dev: true /@types/chai/4.3.3: resolution: {integrity: sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==} dev: true /@types/concat-stream/1.6.1: resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} dependencies: '@types/node': 18.8.1 dev: true /@types/connect/3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: '@types/node': 18.8.1 dev: true /@types/d3-array/3.0.3: resolution: {integrity: sha512-Reoy+pKnvsksN0lQUlcH6dOGjRZ/3WRwXR//m+/8lt1BXeI4xyaUZoqULNjyXXRuh0Mj4LNpkCvhUpQlY3X5xQ==} dev: true /@types/d3-axis/3.0.1: resolution: {integrity: sha512-zji/iIbdd49g9WN0aIsGcwcTBUkgLsCSwB+uH+LPVDAiKWENMtI3cJEWt+7/YYwelMoZmbBfzA3qCdrZ2XFNnw==} dependencies: '@types/d3-selection': 3.0.3 dev: true /@types/d3-brush/3.0.1: resolution: {integrity: sha512-B532DozsiTuQMHu2YChdZU0qsFJSio3Q6jmBYGYNp3gMDzBmuFFgPt9qKA4VYuLZMp4qc6eX7IUFUEsvHiXZAw==} dependencies: '@types/d3-selection': 3.0.3 dev: true /@types/d3-chord/3.0.1: resolution: {integrity: sha512-eQfcxIHrg7V++W8Qxn6QkqBNBokyhdWSAS73AbkbMzvLQmVVBviknoz2SRS/ZJdIOmhcmmdCRE/NFOm28Z1AMw==} dev: true /@types/d3-color/3.1.0: resolution: {integrity: sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==} dev: true /@types/d3-contour/3.0.1: resolution: {integrity: sha512-C3zfBrhHZvrpAAK3YXqLWVAGo87A4SvJ83Q/zVJ8rFWJdKejUnDYaWZPkA8K84kb2vDA/g90LTQAz7etXcgoQQ==} dependencies: '@types/d3-array': 3.0.3 '@types/geojson': 7946.0.10 dev: true /@types/d3-delaunay/6.0.1: resolution: {integrity: sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ==} dev: true /@types/d3-dispatch/3.0.1: resolution: {integrity: sha512-NhxMn3bAkqhjoxabVJWKryhnZXXYYVQxaBnbANu0O94+O/nX9qSjrA1P1jbAQJxJf+VC72TxDX/YJcKue5bRqw==} dev: true /@types/d3-drag/3.0.1: resolution: {integrity: sha512-o1Va7bLwwk6h03+nSM8dpaGEYnoIG19P0lKqlic8Un36ymh9NSkNFX1yiXMKNMx8rJ0Kfnn2eovuFaL6Jvj0zA==} dependencies: '@types/d3-selection': 3.0.3 dev: true /@types/d3-dsv/3.0.0: resolution: {integrity: sha512-o0/7RlMl9p5n6FQDptuJVMxDf/7EDEv2SYEO/CwdG2tr1hTfUVi0Iavkk2ax+VpaQ/1jVhpnj5rq1nj8vwhn2A==} dev: true /@types/d3-ease/3.0.0: resolution: {integrity: sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==} dev: true /@types/d3-fetch/3.0.1: resolution: {integrity: sha512-toZJNOwrOIqz7Oh6Q7l2zkaNfXkfR7mFSJvGvlD/Ciq/+SQ39d5gynHJZ/0fjt83ec3WL7+u3ssqIijQtBISsw==} dependencies: '@types/d3-dsv': 3.0.0 dev: true /@types/d3-force/3.0.3: resolution: {integrity: sha512-z8GteGVfkWJMKsx6hwC3SiTSLspL98VNpmvLpEFJQpZPq6xpA1I8HNBDNSpukfK0Vb0l64zGFhzunLgEAcBWSA==} dev: true /@types/d3-format/3.0.1: resolution: {integrity: sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg==} dev: true /@types/d3-geo/3.0.2: resolution: {integrity: sha512-DbqK7MLYA8LpyHQfv6Klz0426bQEf7bRTvhMy44sNGVyZoWn//B0c+Qbeg8Osi2Obdc9BLLXYAKpyWege2/7LQ==} dependencies: '@types/geojson': 7946.0.10 dev: true /@types/d3-hierarchy/3.1.0: resolution: {integrity: sha512-g+sey7qrCa3UbsQlMZZBOHROkFqx7KZKvUpRzI/tAp/8erZWpYq7FgNKvYwebi2LaEiVs1klhUfd3WCThxmmWQ==} dev: true /@types/d3-interpolate/3.0.1: resolution: {integrity: sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==} dependencies: '@types/d3-color': 3.1.0 dev: true /@types/d3-path/3.0.0: resolution: {integrity: sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==} dev: true /@types/d3-polygon/3.0.0: resolution: {integrity: sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw==} dev: true /@types/d3-quadtree/3.0.2: resolution: {integrity: sha512-QNcK8Jguvc8lU+4OfeNx+qnVy7c0VrDJ+CCVFS9srBo2GL9Y18CnIxBdTF3v38flrGy5s1YggcoAiu6s4fLQIw==} dev: true /@types/d3-random/3.0.1: resolution: {integrity: sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ==} dev: true /@types/d3-scale-chromatic/3.0.0: resolution: {integrity: sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==} dev: true /@types/d3-scale/4.0.2: resolution: {integrity: sha512-Yk4htunhPAwN0XGlIwArRomOjdoBFXC3+kCxK2Ubg7I9shQlVSJy/pG/Ht5ASN+gdMIalpk8TJ5xV74jFsetLA==} dependencies: '@types/d3-time': 3.0.0 dev: true /@types/d3-selection/3.0.3: resolution: {integrity: sha512-Mw5cf6nlW1MlefpD9zrshZ+DAWL4IQ5LnWfRheW6xwsdaWOb6IRRu2H7XPAQcyXEx1D7XQWgdoKR83ui1/HlEA==} dev: true /@types/d3-shape/3.1.0: resolution: {integrity: sha512-jYIYxFFA9vrJ8Hd4Se83YI6XF+gzDL1aC5DCsldai4XYYiVNdhtpGbA/GM6iyQ8ayhSp3a148LY34hy7A4TxZA==} dependencies: '@types/d3-path': 3.0.0 dev: true /@types/d3-time-format/4.0.0: resolution: {integrity: sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw==} dev: true /@types/d3-time/3.0.0: resolution: {integrity: sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==} dev: true /@types/d3-timer/3.0.0: resolution: {integrity: sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==} dev: true /@types/d3-transition/3.0.2: resolution: {integrity: sha512-jo5o/Rf+/u6uerJ/963Dc39NI16FQzqwOc54bwvksGAdVfvDrqDpVeq95bEvPtBwLCVZutAEyAtmSyEMxN7vxQ==} dependencies: '@types/d3-selection': 3.0.3 dev: true /@types/d3-zoom/3.0.1: resolution: {integrity: sha512-7s5L9TjfqIYQmQQEUcpMAcBOahem7TRoSO/+Gkz02GbMVuULiZzjF2BOdw291dbO2aNon4m2OdFsRGaCq2caLQ==} dependencies: '@types/d3-interpolate': 3.0.1 '@types/d3-selection': 3.0.3 dev: true /@types/d3/7.4.0: resolution: {integrity: sha512-jIfNVK0ZlxcuRDKtRS/SypEyOQ6UHaFQBKv032X45VvxSJ6Yi5G9behy9h6tNTHTDGh5Vq+KbmBjUWLgY4meCA==} dependencies: '@types/d3-array': 3.0.3 '@types/d3-axis': 3.0.1 '@types/d3-brush': 3.0.1 '@types/d3-chord': 3.0.1 '@types/d3-color': 3.1.0 '@types/d3-contour': 3.0.1 '@types/d3-delaunay': 6.0.1 '@types/d3-dispatch': 3.0.1 '@types/d3-drag': 3.0.1 '@types/d3-dsv': 3.0.0 '@types/d3-ease': 3.0.0 '@types/d3-fetch': 3.0.1 '@types/d3-force': 3.0.3 '@types/d3-format': 3.0.1 '@types/d3-geo': 3.0.2 '@types/d3-hierarchy': 3.1.0 '@types/d3-interpolate': 3.0.1 '@types/d3-path': 3.0.0 '@types/d3-polygon': 3.0.0 '@types/d3-quadtree': 3.0.2 '@types/d3-random': 3.0.1 '@types/d3-scale': 4.0.2 '@types/d3-scale-chromatic': 3.0.0 '@types/d3-selection': 3.0.3 '@types/d3-shape': 3.1.0 '@types/d3-time': 3.0.0 '@types/d3-time-format': 4.0.0 '@types/d3-timer': 3.0.0 '@types/d3-transition': 3.0.2 '@types/d3-zoom': 3.0.1 dev: true /@types/debug/4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: '@types/ms': 0.7.31 dev: true /@types/dompurify/2.3.4: resolution: {integrity: sha512-EXzDatIb5EspL2eb/xPGmaC8pePcTHrkDCONjeisusLFrVfl38Pjea/R0YJGu3k9ZQadSvMqW0WXPI2hEo2Ajg==} dependencies: '@types/trusted-types': 2.0.2 dev: true /@types/eslint/8.4.6: resolution: {integrity: sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==} dependencies: '@types/estree': 1.0.0 '@types/json-schema': 7.0.11 dev: true /@types/estree/1.0.0: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} dev: true /@types/express-serve-static-core/4.17.31: resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==} dependencies: '@types/node': 18.8.1 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: true /@types/express/4.17.14: resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} dependencies: '@types/body-parser': 1.19.2 '@types/express-serve-static-core': 4.17.31 '@types/qs': 6.9.7 '@types/serve-static': 1.15.0 dev: true /@types/form-data/0.0.33: resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} dependencies: '@types/node': 18.8.1 dev: true /@types/geojson/7946.0.10: resolution: {integrity: sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==} dev: true /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: '@types/node': 18.8.1 dev: true /@types/http-cache-semantics/4.0.1: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} dev: true /@types/istanbul-lib-coverage/2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} dev: true /@types/istanbul-lib-report/3.0.0: resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: '@types/istanbul-lib-coverage': 2.0.4 dev: true /@types/istanbul-reports/3.0.1: resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 dev: true /@types/jsdom/20.0.0: resolution: {integrity: sha512-YfAchFs0yM1QPDrLm2VHe+WHGtqms3NXnXAMolrgrVP6fgBHHXy1ozAbo/dFtPNtZC/m66bPiCTWYmqp1F14gA==} dependencies: '@types/node': 18.7.21 '@types/tough-cookie': 4.0.2 parse5: 7.1.1 dev: true /@types/json-schema/7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true /@types/keyv/3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: '@types/node': 18.8.1 dev: true /@types/lodash/4.14.185: resolution: {integrity: sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA==} dev: true /@types/lodash/4.14.186: resolution: {integrity: sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==} dev: true /@types/mdast/3.0.10: resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} dependencies: '@types/unist': 2.0.6 dev: true /@types/mime/3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: true /@types/minimist/1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true /@types/ms/0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: true /@types/node/10.17.60: resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} dev: true /@types/node/14.18.29: resolution: {integrity: sha512-LhF+9fbIX4iPzhsRLpK5H7iPdvW8L4IwGciXQIOEcuF62+9nw/VQVsOViAOOGxY3OlOKGLFv0sWwJXdwQeTn6A==} dev: true /@types/node/16.11.59: resolution: {integrity: sha512-6u+36Dj3aDzhfBVUf/mfmc92OEdzQ2kx2jcXGdigfl70E/neV21ZHE6UCz4MDzTRcVqGAM27fk+DLXvyDsn3Jw==} dev: true /@types/node/18.7.21: resolution: {integrity: sha512-rLFzK5bhM0YPyCoTC8bolBjMk7bwnZ8qeZUBslBfjZQou2ssJdWslx9CZ8DGM+Dx7QXQiiTVZ/6QO6kwtHkZCA==} dev: true /@types/node/18.8.1: resolution: {integrity: sha512-vuYaNuEIbOYLTLUAJh50ezEbvxrD43iby+lpUA2aa148Nh5kX/AVO/9m1Ahmbux2iU5uxJTNF9g2Y+31uml7RQ==} /@types/node/8.10.66: resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} dev: true /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true /@types/parse-json/4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true /@types/prettier/2.7.0: resolution: {integrity: sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==} dev: true /@types/prettier/2.7.1: resolution: {integrity: sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==} dev: true /@types/qs/6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} dev: true /@types/range-parser/1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true /@types/responselike/1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: '@types/node': 18.8.1 dev: true /@types/serve-static/1.15.0: resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} dependencies: '@types/mime': 3.0.1 '@types/node': 18.8.1 dev: true /@types/sinonjs__fake-timers/8.1.1: resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} dev: true /@types/sizzle/2.3.3: resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} dev: true /@types/stack-utils/2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true /@types/stylis/4.0.2: resolution: {integrity: sha512-wtckGuk1eXUlUz0Qb1eXHG37Z7HWT2GfMdqRf8F/ifddTwadSS9Jwsqi4qtXk7cP7MtoyGVIHPElFCLc6HItbg==} dev: true /@types/tough-cookie/4.0.2: resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} dev: true /@types/trusted-types/2.0.2: resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} dev: true /@types/unist/2.0.6: resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} dev: true /@types/uuid/8.3.4: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} /@types/web-bluetooth/0.0.15: resolution: {integrity: sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA==} dev: true /@types/yargs-parser/21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true /@types/yargs/15.0.14: resolution: {integrity: sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==} dependencies: '@types/yargs-parser': 21.0.0 dev: true /@types/yargs/17.0.13: resolution: {integrity: sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==} dependencies: '@types/yargs-parser': 21.0.0 dev: true /@types/yauzl/2.10.0: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} requiresBuild: true dependencies: '@types/node': 18.8.1 dev: true optional: true /@typescript-eslint/eslint-plugin/5.38.0_wsb62dxj2oqwgas4kadjymcmry: resolution: {integrity: sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@typescript-eslint/parser': 5.38.0_irgkl5vooow2ydyo6aokmferha '@typescript-eslint/scope-manager': 5.38.0 '@typescript-eslint/type-utils': 5.38.0_irgkl5vooow2ydyo6aokmferha '@typescript-eslint/utils': 5.38.0_irgkl5vooow2ydyo6aokmferha debug: 4.3.4 eslint: 8.23.1 ignore: 5.2.0 regexpp: 3.2.0 semver: 7.3.7 tsutils: 3.21.0_typescript@4.8.3 typescript: 4.8.3 transitivePeerDependencies: - supports-color dev: true /@typescript-eslint/eslint-plugin/5.39.0_xyciw6oqjoiiono4dhv3uhn5my: resolution: {integrity: sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@typescript-eslint/parser': 5.39.0_ypn2ylkkyfa5i233caldtndbqa '@typescript-eslint/scope-manager': 5.39.0 '@typescript-eslint/type-utils': 5.39.0_ypn2ylkkyfa5i233caldtndbqa '@typescript-eslint/utils': 5.39.0_ypn2ylkkyfa5i233caldtndbqa debug: 4.3.4 eslint: 8.24.0 ignore: 5.2.0 regexpp: 3.2.0 semver: 7.3.7 tsutils: 3.21.0_typescript@4.8.4 typescript: 4.8.4 transitivePeerDependencies: - supports-color dev: true /@typescript-eslint/parser/5.38.0_irgkl5vooow2ydyo6aokmferha: resolution: {integrity: sha512-/F63giJGLDr0ms1Cr8utDAxP2SPiglaD6V+pCOcG35P2jCqdfR7uuEhz1GIC3oy4hkUF8xA1XSXmd9hOh/a5EA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@typescript-eslint/scope-manager': 5.38.0 '@typescript-eslint/types': 5.38.0 '@typescript-eslint/typescript-estree': 5.38.0_typescript@4.8.3 debug: 4.3.4 eslint: 8.23.1 typescript: 4.8.3 transitivePeerDependencies: - supports-color dev: true /@typescript-eslint/parser/5.39.0_ypn2ylkkyfa5i233caldtndbqa: resolution: {integrity: sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@typescript-eslint/scope-manager': 5.39.0 '@typescript-eslint/types': 5.39.0 '@typescript-eslint/typescript-estree': 5.39.0_typescript@4.8.4 debug: 4.3.4 eslint: 8.24.0 typescript: 4.8.4 transitivePeerDependencies: - supports-color dev: true /@typescript-eslint/scope-manager/5.38.0: resolution: {integrity: sha512-ByhHIuNyKD9giwkkLqzezZ9y5bALW8VNY6xXcP+VxoH4JBDKjU5WNnsiD4HJdglHECdV+lyaxhvQjTUbRboiTA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.38.0 '@typescript-eslint/visitor-keys': 5.38.0 dev: true /@typescript-eslint/scope-manager/5.39.0: resolution: {integrity: sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.39.0 '@typescript-eslint/visitor-keys': 5.39.0 dev: true /@typescript-eslint/type-utils/5.38.0_irgkl5vooow2ydyo6aokmferha: resolution: {integrity: sha512-iZq5USgybUcj/lfnbuelJ0j3K9dbs1I3RICAJY9NZZpDgBYXmuUlYQGzftpQA9wC8cKgtS6DASTvF3HrXwwozA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@typescript-eslint/typescript-estree': 5.38.0_typescript@4.8.3 '@typescript-eslint/utils': 5.38.0_irgkl5vooow2ydyo6aokmferha debug: 4.3.4 eslint: 8.23.1 tsutils: 3.21.0_typescript@4.8.3 typescript: 4.8.3 transitivePeerDependencies: - supports-color dev: true /@typescript-eslint/type-utils/5.39.0_ypn2ylkkyfa5i233caldtndbqa: resolution: {integrity: sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@typescript-eslint/typescript-estree': 5.39.0_typescript@4.8.4 '@typescript-eslint/utils': 5.39.0_ypn2ylkkyfa5i233caldtndbqa debug: 4.3.4 eslint: 8.24.0 tsutils: 3.21.0_typescript@4.8.4 typescript: 4.8.4 transitivePeerDependencies: - supports-color dev: true /@typescript-eslint/types/5.38.0: resolution: {integrity: sha512-HHu4yMjJ7i3Cb+8NUuRCdOGu2VMkfmKyIJsOr9PfkBVYLYrtMCK/Ap50Rpov+iKpxDTfnqvDbuPLgBE5FwUNfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /@typescript-eslint/types/5.39.0: resolution: {integrity: sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /@typescript-eslint/typescript-estree/5.38.0_typescript@4.8.3: resolution: {integrity: sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@typescript-eslint/types': 5.38.0 '@typescript-eslint/visitor-keys': 5.38.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.7 tsutils: 3.21.0_typescript@4.8.3 typescript: 4.8.3 transitivePeerDependencies: - supports-color dev: true /@typescript-eslint/typescript-estree/5.39.0_typescript@4.8.4: resolution: {integrity: sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@typescript-eslint/types': 5.39.0 '@typescript-eslint/visitor-keys': 5.39.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.7 tsutils: 3.21.0_typescript@4.8.4 typescript: 4.8.4 transitivePeerDependencies: - supports-color dev: true /@typescript-eslint/utils/5.38.0_irgkl5vooow2ydyo6aokmferha: resolution: {integrity: sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 '@typescript-eslint/scope-manager': 5.38.0 '@typescript-eslint/types': 5.38.0 '@typescript-eslint/typescript-estree': 5.38.0_typescript@4.8.3 eslint: 8.23.1 eslint-scope: 5.1.1 eslint-utils: 3.0.0_eslint@8.23.1 transitivePeerDependencies: - supports-color - typescript dev: true /@typescript-eslint/utils/5.39.0_ypn2ylkkyfa5i233caldtndbqa: resolution: {integrity: sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 '@typescript-eslint/scope-manager': 5.39.0 '@typescript-eslint/types': 5.39.0 '@typescript-eslint/typescript-estree': 5.39.0_typescript@4.8.4 eslint: 8.24.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0_eslint@8.24.0 transitivePeerDependencies: - supports-color - typescript dev: true /@typescript-eslint/visitor-keys/5.38.0: resolution: {integrity: sha512-MxnrdIyArnTi+XyFLR+kt/uNAcdOnmT+879os7qDRI+EYySR4crXJq9BXPfRzzLGq0wgxkwidrCJ9WCAoacm1w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.38.0 eslint-visitor-keys: 3.3.0 dev: true /@typescript-eslint/visitor-keys/5.39.0: resolution: {integrity: sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.39.0 eslint-visitor-keys: 3.3.0 dev: true /@vitejs/plugin-vue/3.1.2_vite@3.1.4+vue@3.2.40: resolution: {integrity: sha512-3zxKNlvA3oNaKDYX0NBclgxTQ1xaFdL7PzwF6zj9tGFziKwmBa3Q/6XcJQxudlT81WxDjEhHmevvIC4Orc1LhQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^3.0.0 vue: ^3.2.25 dependencies: vite: 3.1.4 vue: 3.2.40 dev: true /@vitest/coverage-c8/0.23.4_dnicfi6n7tywwajisjusxhbdzm: resolution: {integrity: sha512-jmD00a5DQH9gu9K+YdvVhcMuv2CzHvU4gCnySS40Ec5hKlXtlCzRfNHl00VnhfuBeaQUmaQYe60BLT413HyDdg==} dependencies: c8: 7.12.0 vitest: 0.23.4_dnicfi6n7tywwajisjusxhbdzm transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/browser' - '@vitest/ui' - happy-dom - jsdom - less - sass - stylus - supports-color - terser dev: true /@vitest/ui/0.23.4: resolution: {integrity: sha512-lNZVTTrkHThGAwNQ1ah1qCNnm70r7OLB5LCUdSqboStve/1eKTrtt27QfDSSUTG8AVJQzU0eaN/j8UocH+CqfA==} dependencies: sirv: 2.0.2 dev: true /@vue/compiler-core/3.2.40: resolution: {integrity: sha512-2Dc3Stk0J/VyQ4OUr2yEC53kU28614lZS+bnrCbFSAIftBJ40g/2yQzf4mPBiFuqguMB7hyHaujdgZAQ67kZYA==} dependencies: '@babel/parser': 7.19.1 '@vue/shared': 3.2.40 estree-walker: 2.0.2 source-map: 0.6.1 dev: true /@vue/compiler-dom/3.2.40: resolution: {integrity: sha512-OZCNyYVC2LQJy4H7h0o28rtk+4v+HMQygRTpmibGoG9wZyomQiS5otU7qo3Wlq5UfHDw2RFwxb9BJgKjVpjrQw==} dependencies: '@vue/compiler-core': 3.2.40 '@vue/shared': 3.2.40 dev: true /@vue/compiler-sfc/3.2.40: resolution: {integrity: sha512-tzqwniIN1fu1PDHC3CpqY/dPCfN/RN1thpBC+g69kJcrl7mbGiHKNwbA6kJ3XKKy8R6JLKqcpVugqN4HkeBFFg==} dependencies: '@babel/parser': 7.19.1 '@vue/compiler-core': 3.2.40 '@vue/compiler-dom': 3.2.40 '@vue/compiler-ssr': 3.2.40 '@vue/reactivity-transform': 3.2.40 '@vue/shared': 3.2.40 estree-walker: 2.0.2 magic-string: 0.25.9 postcss: 8.4.16 source-map: 0.6.1 dev: true /@vue/compiler-ssr/3.2.40: resolution: {integrity: sha512-80cQcgasKjrPPuKcxwuCx7feq+wC6oFl5YaKSee9pV3DNq+6fmCVwEEC3vvkf/E2aI76rIJSOYHsWSEIxK74oQ==} dependencies: '@vue/compiler-dom': 3.2.40 '@vue/shared': 3.2.40 dev: true /@vue/devtools-api/6.4.3: resolution: {integrity: sha512-9WCRwdROJvWcHAdyrR7SZMM/qUvllDZnpndHXokThkUsjnJ2xe4/pvsH9FZrxFe22L+JmDKczL79HjLJ7DK9rg==} dev: true /@vue/reactivity-transform/3.2.40: resolution: {integrity: sha512-HQUCVwEaacq6fGEsg2NUuGKIhUveMCjOk8jGHqLXPI2w6zFoPrlQhwWEaINTv5kkZDXKEnCijAp+4gNEHG03yw==} dependencies: '@babel/parser': 7.19.1 '@vue/compiler-core': 3.2.40 '@vue/shared': 3.2.40 estree-walker: 2.0.2 magic-string: 0.25.9 dev: true /@vue/reactivity/3.2.40: resolution: {integrity: sha512-N9qgGLlZmtUBMHF9xDT4EkD9RdXde1Xbveb+niWMXuHVWQP5BzgRmE3SFyUBBcyayG4y1lhoz+lphGRRxxK4RA==} dependencies: '@vue/shared': 3.2.40 dev: true /@vue/runtime-core/3.2.40: resolution: {integrity: sha512-U1+rWf0H8xK8aBUZhnrN97yoZfHbjgw/bGUzfgKPJl69/mXDuSg8CbdBYBn6VVQdR947vWneQBFzdhasyzMUKg==} dependencies: '@vue/reactivity': 3.2.40 '@vue/shared': 3.2.40 dev: true /@vue/runtime-dom/3.2.40: resolution: {integrity: sha512-AO2HMQ+0s2+MCec8hXAhxMgWhFhOPJ/CyRXnmTJ6XIOnJFLrH5Iq3TNwvVcODGR295jy77I6dWPj+wvFoSYaww==} dependencies: '@vue/runtime-core': 3.2.40 '@vue/shared': 3.2.40 csstype: 2.6.21 dev: true /@vue/server-renderer/3.2.40_vue@3.2.40: resolution: {integrity: sha512-gtUcpRwrXOJPJ4qyBpU3EyxQa4EkV8I4f8VrDePcGCPe4O/hd0BPS7v9OgjIQob6Ap8VDz9G+mGTKazE45/95w==} peerDependencies: vue: 3.2.40 dependencies: '@vue/compiler-ssr': 3.2.40 '@vue/shared': 3.2.40 vue: 3.2.40 dev: true /@vue/shared/3.2.40: resolution: {integrity: sha512-0PLQ6RUtZM0vO3teRfzGi4ltLUO5aO+kLgwh4Um3THSR03rpQWLTuRCkuO5A41ITzwdWeKdPHtSARuPkoo5pCQ==} dev: true /@vueuse/core/9.3.0_vue@3.2.40: resolution: {integrity: sha512-64Rna8IQDWpdrJxgitDg7yv1yTp41ZmvV8zlLEylK4QQLWAhz1OFGZDPZ8bU4lwcGgbEJ2sGi2jrdNh4LttUSQ==} dependencies: '@types/web-bluetooth': 0.0.15 '@vueuse/metadata': 9.3.0 '@vueuse/shared': 9.3.0_vue@3.2.40 vue-demi: 0.13.11_vue@3.2.40 transitivePeerDependencies: - '@vue/composition-api' - vue dev: true /@vueuse/metadata/9.3.0: resolution: {integrity: sha512-GnnfjbzIPJIh9ngL9s9oGU1+Hx/h5/KFqTfJykzh/1xjaHkedV9g0MASpdmPZIP+ynNhKAcEfA6g5i8KXwtoMA==} dev: true /@vueuse/shared/9.3.0_vue@3.2.40: resolution: {integrity: sha512-caGUWLY0DpPC6l31KxeUy6vPVNA0yKxx81jFYLoMpyP6cF84FG5Dkf69DfSUqL57wX8JcUkJDMnQaQIZPWFEQQ==} dependencies: vue-demi: 0.13.11_vue@3.2.40 transitivePeerDependencies: - '@vue/composition-api' - vue dev: true /@wdio/config/7.16.11: resolution: {integrity: sha512-sIk9FINQfXohuDONb8RA1uv+29XvUw6OBHfaaU7/c9gfKiOWiRczdfiLqfySZRwYgEgNhzCw5vHIogTry1h+xQ==} engines: {node: '>=12.0.0'} dependencies: '@wdio/logger': 7.16.0 '@wdio/types': 7.16.11 deepmerge: 4.2.2 glob: 7.2.3 dev: true /@wdio/logger/7.16.0: resolution: {integrity: sha512-/6lOGb2Iow5eSsy7RJOl1kCwsP4eMlG+/QKro5zUJsuyNJSQXf2ejhpkzyKWLgQbHu83WX6cM1014AZuLkzoQg==} engines: {node: '>=12.0.0'} dependencies: chalk: 4.1.2 loglevel: 1.8.0 loglevel-plugin-prefix: 0.8.4 strip-ansi: 6.0.1 dev: true /@wdio/protocols/7.16.7: resolution: {integrity: sha512-Wv40pNQcLiPzQ3o98Mv4A8T1EBQ6k4khglz/e2r16CTm+F3DDYh8eLMAsU5cgnmuwwDKX1EyOiFwieykBn5MCg==} engines: {node: '>=12.0.0'} dev: true /@wdio/types/7.16.11: resolution: {integrity: sha512-OFVTFEB6qdG84Y+cOWIacV0loGMgq2SF/rGGlGxai89V3UQxzCFTYVoAx6odAuSNZ37wmfWCykyAR/lAlMItoQ==} engines: {node: '>=12.0.0'} dependencies: '@types/node': 16.11.59 got: 11.8.5 dev: true /@wdio/utils/7.16.11: resolution: {integrity: sha512-qeXHREZJ7mz3C2cWGOmFG6MS6njp1js4f8zca3iqxaorWshwkrlNsps3B1iTHfkvK6oWnmc2Q0o5CrtLZl0LkA==} engines: {node: '>=12.0.0'} dependencies: '@wdio/logger': 7.16.0 '@wdio/types': 7.16.11 p-iteration: 1.1.8 dev: true /@yankeeinlondon/builder-api/0.4.1_owgwhktbfueopkpwpts4jzdaqq: resolution: {integrity: sha512-O6LS9Zg4xqLVpAgea72mNhZvdy9B2BuIgNdsRvNkmnACG8XvlZtEKryGt2ECI/z+dbQICbHDQFCNtZRBrfSMlA==} peerDependencies: fp-ts: ^2.12.1 inferred-types: ^0.22.0 markdown-it: ^13.0.1 vite-plugin-md: '*' dependencies: '@yankeeinlondon/happy-wrapper': 2.6.0_dnicfi6n7tywwajisjusxhbdzm fp-ts: 2.12.3 inferred-types: 0.22.0 markdown-it: 13.0.1 vite-plugin-md: 0.20.4_ucycamvpk6tvs7aryt7d45qco4 transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/browser' - '@vitest/ui' - c8 - happy-dom - jsdom - less - sass - stylus - supports-color - terser dev: true /@yankeeinlondon/happy-wrapper/2.6.0_dnicfi6n7tywwajisjusxhbdzm: resolution: {integrity: sha512-az+gEjG4Jl4GbM35ID5pn4v7FwfrgeA1br/B9STXlDLvIsV8q7mCxQ1oYa8bR1iHtNQg7kgW6s9DYheaTemrHQ==} peerDependencies: happy-dom: ^6.0.4 dependencies: happy-dom: 6.0.4 native-dash: 1.23.2_dnicfi6n7tywwajisjusxhbdzm transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/browser' - '@vitest/ui' - c8 - jsdom - less - sass - stylus - supports-color - terser dev: true /JSONSelect/0.4.0: resolution: {integrity: sha512-VRLR3Su35MH+XV2lrvh9O7qWoug/TUyj9tLDjn9rtpUCNnILLrHjgd/tB0KrhugCxUpj3UqoLqfYb3fLJdIQQQ==} engines: {node: '>=0.4.7'} dev: true /JSONStream/1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: jsonparse: 1.3.1 through: 2.3.8 dev: true /JSV/4.0.2: resolution: {integrity: sha512-ZJ6wx9xaKJ3yFUhq5/sk82PJMuUyLk277I8mQeyDgCTjGdjWJIvPfaU5LIXaMuaN2UO1X3kZH4+lgphublZUHw==} dev: true /abab/2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true /abort-controller/3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} dependencies: event-target-shim: 5.0.1 dev: true /accepts/1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} dependencies: mime-types: 2.1.35 negotiator: 0.6.3 dev: true /acorn-globals/6.0.0: resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 dev: true /acorn-globals/7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: acorn: 8.8.0 acorn-walk: 8.2.0 dev: true /acorn-jsx/5.3.2_acorn@8.8.0: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.8.0 dev: true /acorn-node/1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 xtend: 4.0.2 dev: true /acorn-walk/7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} dev: true /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true /acorn/7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true /acorn/8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} hasBin: true dev: true /add-stream/1.0.0: resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} dev: true /agent-base/6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true /agentkeepalive/4.2.1: resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==} engines: {node: '>= 8.0.0'} dependencies: debug: 4.3.4 depd: 1.1.2 humanize-ms: 1.2.1 transitivePeerDependencies: - supports-color dev: true /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 dev: true /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 dev: true /ajv/8.11.0: resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 dev: true /algoliasearch/4.14.2: resolution: {integrity: sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==} dependencies: '@algolia/cache-browser-local-storage': 4.14.2 '@algolia/cache-common': 4.14.2 '@algolia/cache-in-memory': 4.14.2 '@algolia/client-account': 4.14.2 '@algolia/client-analytics': 4.14.2 '@algolia/client-common': 4.14.2 '@algolia/client-personalization': 4.14.2 '@algolia/client-search': 4.14.2 '@algolia/logger-common': 4.14.2 '@algolia/logger-console': 4.14.2 '@algolia/requester-browser-xhr': 4.14.2 '@algolia/requester-common': 4.14.2 '@algolia/requester-node-http': 4.14.2 '@algolia/transporter': 4.14.2 dev: true /amdefine/1.0.1: resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} engines: {node: '>=0.4.2'} dev: true optional: true /ansi-colors/4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} dev: true /ansi-escapes/4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 dev: true /ansi-html/0.0.7: resolution: {integrity: sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA==} engines: {'0': node >= 0.8.0} hasBin: true dev: true /ansi-regex/2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} dev: true /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} dev: true /ansi-regex/6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} dev: true /ansi-styles/2.2.1: resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} engines: {node: '>=0.10.0'} dev: true /ansi-styles/3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true /ansi-styles/4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 dev: true /ansi-styles/5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} dev: true /ansi-styles/6.1.1: resolution: {integrity: sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==} engines: {node: '>=12'} dev: true /anymatch/2.0.0: resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} dependencies: micromatch: 3.1.10 normalize-path: 2.1.1 transitivePeerDependencies: - supports-color dev: true /anymatch/3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 dev: true /app-path/3.3.0: resolution: {integrity: sha512-EAgEXkdcxH1cgEePOSsmUtw9ItPl0KTxnh/pj9ZbhvbKbij9x0oX6PWpGnorDr0DS5AosLgoa5n3T/hZmKQpYA==} engines: {node: '>=8'} dependencies: execa: 1.0.0 dev: true /append-buffer/1.0.2: resolution: {integrity: sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==} engines: {node: '>=0.10.0'} dependencies: buffer-equal: 1.0.0 dev: true /arch/2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} dev: true /arg/4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true /argparse/1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true /arr-diff/4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} engines: {node: '>=0.10.0'} dev: true /arr-flatten/1.1.0: resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} engines: {node: '>=0.10.0'} dev: true /arr-union/3.1.0: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} dev: true /array-flatten/1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true /array-ify/1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true /array-union/2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true /array-unique/0.3.2: resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} engines: {node: '>=0.10.0'} dev: true /arrify/1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} dev: true /asap/2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: true /asn1/0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: safer-buffer: 2.1.2 dev: true /assert-plus/1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} dev: true /assertion-error/1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true /assign-symbols/1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} dev: true /ast-types/0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} dependencies: tslib: 2.4.0 dev: true /astral-regex/2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} dev: true /async/3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: true /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true /at-least-node/1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} dev: true /atob/2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} hasBin: true dev: true /aws-sign2/0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} dev: true /aws4/1.11.0: resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==} dev: true /axios/0.21.4_debug@4.3.2: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} dependencies: follow-redirects: 1.15.2_debug@4.3.2 transitivePeerDependencies: - debug dev: true /axios/0.26.0: resolution: {integrity: sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==} dependencies: follow-redirects: 1.15.2_debug@4.3.2 transitivePeerDependencies: - debug dev: true /babel-jest/26.6.3_@babel+core@7.12.3: resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==} engines: {node: '>= 10.14.2'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.12.3 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 '@types/babel__core': 7.1.19 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 26.6.2_@babel+core@7.12.3 chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 transitivePeerDependencies: - supports-color dev: true /babel-jest/29.1.0_@babel+core@7.12.3: resolution: {integrity: sha512-0XiBgPRhMSng+ThuXz0M/WpOeml/q5S4BFIaDS5uQb+lCjOzd0OfYEN4hWte5fDy7SZ6rNmEi16UpWGurSg2nQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.12.3 '@jest/transform': 29.1.0 '@types/babel__core': 7.1.19 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.0.2_@babel+core@7.12.3 chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 transitivePeerDependencies: - supports-color dev: true /babel-plugin-dynamic-import-node/2.3.3: resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} dependencies: object.assign: 4.1.4 dev: true /babel-plugin-istanbul/6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: '@babel/helper-plugin-utils': 7.19.0 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.0 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color dev: true /babel-plugin-jest-hoist/26.6.2: resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} engines: {node: '>= 10.14.2'} dependencies: '@babel/template': 7.18.10 '@babel/types': 7.19.0 '@types/babel__core': 7.1.19 '@types/babel__traverse': 7.18.2 dev: true /babel-plugin-jest-hoist/29.0.2: resolution: {integrity: sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.18.10 '@babel/types': 7.19.0 '@types/babel__core': 7.1.19 '@types/babel__traverse': 7.18.2 dev: true /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.12.3: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.19.1 '@babel/core': 7.12.3 '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.12.3 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.12.3: resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.12.3 core-js-compat: 3.25.2 transitivePeerDependencies: - supports-color dev: true /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.12.3: resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.3 '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.12.3 transitivePeerDependencies: - supports-color dev: true /babel-preset-current-node-syntax/1.0.1_@babel+core@7.12.3: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.12.3 '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.12.3 '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.12.3 '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.12.3 '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.12.3 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.12.3 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.12.3 dev: true /babel-preset-jest/26.6.2_@babel+core@7.12.3: resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==} engines: {node: '>= 10.14.2'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.12.3 babel-plugin-jest-hoist: 26.6.2 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.12.3 dev: true /babel-preset-jest/29.0.2_@babel+core@7.12.3: resolution: {integrity: sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.12.3 babel-plugin-jest-hoist: 29.0.2 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.12.3 dev: true /babelify/10.0.0_@babel+core@7.12.3: resolution: {integrity: sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.12.3 dev: true /bail/1.0.5: resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} dev: true /bail/2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} dev: true /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true /base/0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} dependencies: cache-base: 1.0.1 class-utils: 0.3.6 component-emitter: 1.3.0 define-property: 1.0.0 isobject: 3.0.1 mixin-deep: 1.3.2 pascalcase: 0.1.1 dev: true /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true /bcrypt-pbkdf/1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} dependencies: tweetnacl: 0.14.5 dev: true /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true /binary-searching/2.0.5: resolution: {integrity: sha512-v4N2l3RxL+m4zDxyxz3Ne2aTmiPn8ZUpKFpdPtO+ItW1NcTCXA7JeHG5GMBSvoKSkQZ9ycS+EouDVxYB9ufKWA==} dev: true /blob-util/2.0.2: resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} dev: true /bluebird/3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} dev: true /body-parser/1.20.0: resolution: {integrity: sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 content-type: 1.0.4 debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 qs: 6.10.3 raw-body: 2.5.1 type-is: 1.6.18 unpipe: 1.0.0 transitivePeerDependencies: - supports-color dev: true /body-scroll-lock/4.0.0-beta.0: resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} dev: true /body/5.1.0: resolution: {integrity: sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ==} dependencies: continuable-cache: 0.3.1 error: 7.2.1 raw-body: 1.1.7 safe-json-parse: 1.0.1 dev: true /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true /braces/2.3.2: resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} dependencies: arr-flatten: 1.1.0 array-unique: 0.3.2 extend-shallow: 2.0.1 fill-range: 4.0.0 isobject: 3.0.1 repeat-element: 1.1.4 snapdragon: 0.8.2 snapdragon-node: 2.1.1 split-string: 3.1.0 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true /brilliant-errors/0.6.0_dnicfi6n7tywwajisjusxhbdzm: resolution: {integrity: sha512-4+Va/hdXk7tROAmnZ8Vp9D23oOMg6IBJAiZdhRCufMApH0NIFLsvtTb7sL8YuV6gWdLsiXxzR834bh05lC8r8Q==} engines: {node: '>=12.0.0'} dependencies: callsites: 3.1.0 common-types: 1.31.1 inferred-types: 0.22.0 vitest: 0.19.1_dnicfi6n7tywwajisjusxhbdzm transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/browser' - '@vitest/ui' - c8 - happy-dom - jsdom - less - sass - stylus - supports-color - terser dev: true /browser-process-hrtime/1.0.0: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} dev: true /browser-resolve/1.11.3: resolution: {integrity: sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==} dependencies: resolve: 1.1.7 dev: true /browserslist/4.21.4: resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: caniuse-lite: 1.0.30001409 electron-to-chromium: 1.4.257 node-releases: 2.0.6 update-browserslist-db: 1.0.9_browserslist@4.21.4 dev: true /bser/2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 dev: true /buffer-crc32/0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: true /buffer-equal/1.0.0: resolution: {integrity: sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==} engines: {node: '>=0.4.0'} dev: true /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true /buffer-shims/1.0.0: resolution: {integrity: sha512-Zy8ZXMyxIT6RMTeY7OP/bDndfj6bwCan7SS98CEndS6deHwWPpseeHlwarNcBim+etXnF9HBc1non5JgDaJU1g==} dev: true /buffer/5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true /bytes/1.0.0: resolution: {integrity: sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==} dev: true /bytes/3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} dev: true /c8/7.12.0: resolution: {integrity: sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==} engines: {node: '>=10.12.0'} hasBin: true dependencies: '@bcoe/v8-coverage': 0.2.3 '@istanbuljs/schema': 0.1.3 find-up: 5.0.0 foreground-child: 2.0.0 istanbul-lib-coverage: 3.2.0 istanbul-lib-report: 3.0.0 istanbul-reports: 3.1.5 rimraf: 3.0.2 test-exclude: 6.0.0 v8-to-istanbul: 9.0.1 yargs: 16.2.0 yargs-parser: 20.2.9 dev: true /cache-base/1.0.1: resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} engines: {node: '>=0.10.0'} dependencies: collection-visit: 1.0.0 component-emitter: 1.3.0 get-value: 2.0.6 has-value: 1.0.0 isobject: 3.0.1 set-value: 2.0.1 to-object-path: 0.3.0 union-value: 1.0.1 unset-value: 1.0.0 dev: true /cacheable-lookup/5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} dev: true /cacheable-request/7.0.2: resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==} engines: {node: '>=8'} dependencies: clone-response: 1.0.3 get-stream: 5.2.0 http-cache-semantics: 4.1.0 keyv: 4.5.0 lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.1 dev: true /cached-path-relative/1.1.0: resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==} dev: true /cachedir/2.3.0: resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} engines: {node: '>=6'} dev: true /call-bind/1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.1.3 dev: true /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true /camelcase-keys/6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} dependencies: camelcase: 5.3.1 map-obj: 4.3.0 quick-lru: 4.0.1 dev: true /camelcase/5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} dev: true /camelcase/6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true /caniuse-lite/1.0.30001409: resolution: {integrity: sha512-V0mnJ5dwarmhYv8/MzhJ//aW68UpvnQBXv8lJ2QUsvn2pHcmAuNtu8hQEDz37XnA1iE+lRR9CIfGWWpgJ5QedQ==} dev: true /capture-exit/2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} engines: {node: 6.* || 8.* || >= 10.*} dependencies: rsvp: 4.8.5 dev: true /caseless/0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true /ccount/1.1.0: resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} dev: true /chai/4.3.6: resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==} engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 check-error: 1.0.2 deep-eql: 3.0.1 get-func-name: 2.0.0 loupe: 2.3.4 pathval: 1.1.1 type-detect: 4.0.8 dev: true /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} dependencies: ansi-styles: 2.2.1 escape-string-regexp: 1.0.5 has-ansi: 2.0.0 strip-ansi: 3.0.1 supports-color: 2.0.0 dev: true /chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 dev: true /chalk/3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 dev: true /chalk/4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 dev: true /char-regex/1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} dev: true /character-entities-html4/1.1.4: resolution: {integrity: sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==} dev: true /character-entities-legacy/1.1.4: resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} dev: true /character-entities/1.2.4: resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} dev: true /character-entities/2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} dev: true /character-reference-invalid/1.1.4: resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} dev: true /check-error/1.0.2: resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} dev: true /check-more-types/2.24.0: resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} engines: {node: '>= 0.8.0'} dev: true /chokidar/3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.2 braces: 3.0.2 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.2 dev: true /ci-info/2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: true /ci-info/3.4.0: resolution: {integrity: sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==} dev: true /cjs-module-lexer/0.6.0: resolution: {integrity: sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==} dev: true /cjs-module-lexer/1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true /cjson/0.3.0: resolution: {integrity: sha512-bBRQcCIHzI1IVH59fR0bwGrFmi3Btb/JNwM/n401i1DnYgWndpsUBiQRAddLflkZage20A2d25OAWZZk0vBRlA==} engines: {node: '>= 0.3.0'} dependencies: jsonlint: 1.6.0 dev: true /class-utils/0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} dependencies: arr-union: 3.1.0 define-property: 0.2.5 isobject: 3.0.1 static-extend: 0.1.2 dev: true /clean-stack/2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} dev: true /cli-cursor/3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 dev: true /cli-table3/0.6.3: resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} engines: {node: 10.* || >= 12.*} dependencies: string-width: 4.2.3 optionalDependencies: '@colors/colors': 1.5.0 dev: true /cli-truncate/2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} dependencies: slice-ansi: 3.0.0 string-width: 4.2.3 dev: true /cli-truncate/3.1.0: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: slice-ansi: 5.0.0 string-width: 5.1.2 dev: true /cliui/6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 dev: true /cliui/7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 dev: true /clone-buffer/1.0.0: resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} engines: {node: '>= 0.10'} dev: true /clone-response/1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: mimic-response: 1.0.1 dev: true /clone-stats/1.0.0: resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==} dev: true /clone/2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} dev: true /cloneable-readable/1.1.3: resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==} dependencies: inherits: 2.0.4 process-nextick-args: 2.0.1 readable-stream: 2.3.7 dev: true /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true /collapse-white-space/1.0.6: resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} dev: true /collect-v8-coverage/1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} dependencies: map-visit: 1.0.0 object-visit: 1.0.1 dev: true /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true /color-convert/2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 dev: true /color-name/1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true /colorette/2.0.19: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} dev: true /colors/0.5.1: resolution: {integrity: sha512-XjsuUwpDeY98+yz959OlUK6m7mLBM+1MEG5oaenfuQnNnrQk1WvtcvFgN3FNDP3f2NmZ211t0mNEfSEN1h0eIg==} engines: {node: '>=0.1.90'} dev: true /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 dev: true /comma-separated-tokens/1.0.8: resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} dev: true /commander/5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} dev: true /commander/7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} /commander/9.4.0: resolution: {integrity: sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==} engines: {node: ^12.20.0 || >=14} dev: true /comment-parser/1.3.1: resolution: {integrity: sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==} engines: {node: '>= 12.0.0'} dev: true /common-tags/1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} dev: true /common-types/1.31.1: resolution: {integrity: sha512-eixAd22Gmek1dgsPgyqCSjzMAlp8rpSLkb44iEMfOzR9fwGFYEkH+AWOHmwSFxWmO8MvMND/m1jpZX0Wk4+yJA==} dev: true /compare-func/2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 dev: true /component-emitter/1.3.0: resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} dev: true /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true /concat-stream/1.5.2: resolution: {integrity: sha512-H6xsIBfQ94aESBG8jGHXQ7i5AEpy5ZeVaLDOisDICiTCKpqEfr34/KmTrspKQNoLKNu9gTkovlpQcUi630AKiQ==} engines: {'0': node >= 0.8} dependencies: inherits: 2.0.4 readable-stream: 2.0.6 typedarray: 0.0.6 dev: true /concat-stream/1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} dependencies: buffer-from: 1.1.2 inherits: 2.0.4 readable-stream: 2.3.7 typedarray: 0.0.6 dev: true /concat-stream/2.0.0: resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} engines: {'0': node >= 6.0} dependencies: buffer-from: 1.1.2 inherits: 2.0.4 readable-stream: 3.6.0 typedarray: 0.0.6 dev: true /concurrently/7.4.0: resolution: {integrity: sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA==} engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} hasBin: true dependencies: chalk: 4.1.2 date-fns: 2.29.3 lodash: 4.17.21 rxjs: 7.5.6 shell-quote: 1.7.3 spawn-command: 0.0.2-1 supports-color: 8.1.1 tree-kill: 1.2.2 yargs: 17.5.1 dev: true /content-disposition/0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 dev: true /content-type/1.0.4: resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} engines: {node: '>= 0.6'} dev: true /continuable-cache/0.3.1: resolution: {integrity: sha512-TF30kpKhTH8AGCG3dut0rdd/19B7Z+qCnrMoBLpyQu/2drZdNrrpcjPEoJeSVsQM+8KmWG5O56oPDjSSUsuTyA==} dev: true /conventional-changelog-angular/5.0.13: resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} engines: {node: '>=10'} dependencies: compare-func: 2.0.0 q: 1.5.1 dev: true /conventional-changelog-atom/2.0.8: resolution: {integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==} engines: {node: '>=10'} dependencies: q: 1.5.1 dev: true /conventional-changelog-codemirror/2.0.8: resolution: {integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==} engines: {node: '>=10'} dependencies: q: 1.5.1 dev: true /conventional-changelog-config-spec/2.1.0: resolution: {integrity: sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==} dev: true /conventional-changelog-conventionalcommits/4.6.3: resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} engines: {node: '>=10'} dependencies: compare-func: 2.0.0 lodash: 4.17.21 q: 1.5.1 dev: true /conventional-changelog-conventionalcommits/5.0.0: resolution: {integrity: sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==} engines: {node: '>=10'} dependencies: compare-func: 2.0.0 lodash: 4.17.21 q: 1.5.1 dev: true /conventional-changelog-core/4.2.4: resolution: {integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==} engines: {node: '>=10'} dependencies: add-stream: 1.0.0 conventional-changelog-writer: 5.0.1 conventional-commits-parser: 3.2.4 dateformat: 3.0.3 get-pkg-repo: 4.2.1 git-raw-commits: 2.0.11 git-remote-origin-url: 2.0.0 git-semver-tags: 4.1.1 lodash: 4.17.21 normalize-package-data: 3.0.3 q: 1.5.1 read-pkg: 3.0.0 read-pkg-up: 3.0.0 through2: 4.0.2 dev: true /conventional-changelog-ember/2.0.9: resolution: {integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==} engines: {node: '>=10'} dependencies: q: 1.5.1 dev: true /conventional-changelog-eslint/3.0.9: resolution: {integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==} engines: {node: '>=10'} dependencies: q: 1.5.1 dev: true /conventional-changelog-express/2.0.6: resolution: {integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==} engines: {node: '>=10'} dependencies: q: 1.5.1 dev: true /conventional-changelog-jquery/3.0.11: resolution: {integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==} engines: {node: '>=10'} dependencies: q: 1.5.1 dev: true /conventional-changelog-jshint/2.0.9: resolution: {integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==} engines: {node: '>=10'} dependencies: compare-func: 2.0.0 q: 1.5.1 dev: true /conventional-changelog-preset-loader/2.3.4: resolution: {integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==} engines: {node: '>=10'} dev: true /conventional-changelog-writer/5.0.1: resolution: {integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==} engines: {node: '>=10'} hasBin: true dependencies: conventional-commits-filter: 2.0.7 dateformat: 3.0.3 handlebars: 4.7.7 json-stringify-safe: 5.0.1 lodash: 4.17.21 meow: 8.1.2 semver: 6.3.0 split: 1.0.1 through2: 4.0.2 dev: true /conventional-changelog/3.1.25: resolution: {integrity: sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==} engines: {node: '>=10'} dependencies: conventional-changelog-angular: 5.0.13 conventional-changelog-atom: 2.0.8 conventional-changelog-codemirror: 2.0.8 conventional-changelog-conventionalcommits: 4.6.3 conventional-changelog-core: 4.2.4 conventional-changelog-ember: 2.0.9 conventional-changelog-eslint: 3.0.9 conventional-changelog-express: 2.0.6 conventional-changelog-jquery: 3.0.11 conventional-changelog-jshint: 2.0.9 conventional-changelog-preset-loader: 2.3.4 dev: true /conventional-commits-filter/2.0.7: resolution: {integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==} engines: {node: '>=10'} dependencies: lodash.ismatch: 4.4.0 modify-values: 1.0.1 dev: true /conventional-commits-parser/3.2.4: resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} engines: {node: '>=10'} hasBin: true dependencies: JSONStream: 1.3.5 is-text-path: 1.0.1 lodash: 4.17.21 meow: 8.1.2 split2: 3.2.2 through2: 4.0.2 dev: true /conventional-recommended-bump/6.1.0: resolution: {integrity: sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==} engines: {node: '>=10'} hasBin: true dependencies: concat-stream: 2.0.0 conventional-changelog-preset-loader: 2.3.4 conventional-commits-filter: 2.0.7 conventional-commits-parser: 3.2.4 git-raw-commits: 2.0.11 git-semver-tags: 4.1.1 meow: 8.1.2 q: 1.5.1 dev: true /convert-source-map/1.8.0: resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} dependencies: safe-buffer: 5.1.2 dev: true /cookie-signature/1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: true /cookie/0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} dev: true /copy-descriptor/0.1.1: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} dev: true /core-js-compat/3.25.2: resolution: {integrity: sha512-TxfyECD4smdn3/CjWxczVtJqVLEEC2up7/82t7vC0AzNogr+4nQ8vyF7abxAuTXWvjTClSbvGhU0RgqA4ToQaQ==} dependencies: browserslist: 4.21.4 dev: true /core-util-is/1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} dev: true /core-util-is/1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true /cose-base/1.0.3: resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} dependencies: layout-base: 1.0.2 dev: false /cose-base/2.1.0: resolution: {integrity: sha512-HTMm07dhxq1dIPGWwpiVrIk9n+DH7KYmqWA786mLe8jDS+1ZjGtJGIIsJVKoseZXS6/FxiUWCJ2B7XzqUCuhPw==} dependencies: layout-base: 2.0.1 dev: false /cosmiconfig-typescript-loader/4.1.0_nxlrwu45zhpwmwjzs33dzt3ak4: resolution: {integrity: sha512-HbWIuR5O+XO5Oj9SZ5bzgrD4nN+rfhrm2PMb0FVx+t+XIvC45n8F0oTNnztXtspWGw0i2IzHaUWFD5LzV1JB4A==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' cosmiconfig: '>=7' ts-node: '>=10' typescript: '>=3' dependencies: '@types/node': 14.18.29 cosmiconfig: 7.0.1 ts-node: 10.9.1_sqjhzn5m3vxyw66a2xhtc43hby typescript: 4.8.4 dev: true /cosmiconfig/7.0.1: resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} engines: {node: '>=10'} dependencies: '@types/parse-json': 4.0.0 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 dev: true /coveralls/3.1.1: resolution: {integrity: sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==} engines: {node: '>=6'} hasBin: true dependencies: js-yaml: 3.14.1 lcov-parse: 1.0.0 log-driver: 1.2.7 minimist: 1.2.6 request: 2.88.2 dev: true /create-require/1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} dependencies: nice-try: 1.0.5 path-key: 2.0.1 semver: 5.7.1 shebang-command: 1.2.0 which: 1.3.1 dev: true /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 dev: true /css-tree/1.0.0-alpha.39: resolution: {integrity: sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==} engines: {node: '>=8.0.0'} dependencies: mdn-data: 2.0.6 source-map: 0.6.1 dev: true /css.escape/1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} dev: true /cssom/0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true /cssom/0.4.4: resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} dev: true /cssom/0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} dev: true /cssstyle/2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} dependencies: cssom: 0.3.8 dev: true /csstype/2.6.21: resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==} dev: true /cypress-image-snapshot/4.0.1_cypress@10.8.0+jest@26.6.3: resolution: {integrity: sha512-PBpnhX/XItlx3/DAk5ozsXQHUi72exybBNH5Mpqj1DVmjq+S5Jd9WE5CRa4q5q0zuMZb2V2VpXHth6MjFpgj9Q==} engines: {node: '>=8'} peerDependencies: cypress: ^4.5.0 dependencies: chalk: 2.4.2 cypress: 10.8.0 fs-extra: 7.0.1 glob: 7.2.3 jest-image-snapshot: 4.2.0_jest@26.6.3 pkg-dir: 3.0.0 term-img: 4.1.0 transitivePeerDependencies: - jest dev: true /cypress-image-snapshot/4.0.1_cypress@10.8.0+jest@29.1.1: resolution: {integrity: sha512-PBpnhX/XItlx3/DAk5ozsXQHUi72exybBNH5Mpqj1DVmjq+S5Jd9WE5CRa4q5q0zuMZb2V2VpXHth6MjFpgj9Q==} engines: {node: '>=8'} peerDependencies: cypress: ^4.5.0 dependencies: chalk: 2.4.2 cypress: 10.8.0 fs-extra: 7.0.1 glob: 7.2.3 jest-image-snapshot: 4.2.0_jest@29.1.1 pkg-dir: 3.0.0 term-img: 4.1.0 transitivePeerDependencies: - jest dev: true /cypress/10.8.0: resolution: {integrity: sha512-QVse0dnLm018hgti2enKMVZR9qbIO488YGX06nH5j3Dg1isL38DwrBtyrax02CANU6y8F4EJUuyW6HJKw1jsFA==} engines: {node: '>=12.0.0'} hasBin: true requiresBuild: true dependencies: '@cypress/request': 2.88.10 '@cypress/xvfb': 1.2.4_supports-color@8.1.1 '@types/node': 14.18.29 '@types/sinonjs__fake-timers': 8.1.1 '@types/sizzle': 2.3.3 arch: 2.2.0 blob-util: 2.0.2 bluebird: 3.7.2 buffer: 5.7.1 cachedir: 2.3.0 chalk: 4.1.2 check-more-types: 2.24.0 cli-cursor: 3.1.0 cli-table3: 0.6.3 commander: 5.1.0 common-tags: 1.8.2 dayjs: 1.11.5 debug: 4.3.4_supports-color@8.1.1 enquirer: 2.3.6 eventemitter2: 6.4.7 execa: 4.1.0 executable: 4.1.1 extract-zip: 2.0.1_supports-color@8.1.1 figures: 3.2.0 fs-extra: 9.1.0 getos: 3.2.1 is-ci: 3.0.1 is-installed-globally: 0.4.0 lazy-ass: 1.6.0 listr2: 3.14.0_enquirer@2.3.6 lodash: 4.17.21 log-symbols: 4.1.0 minimist: 1.2.6 ospath: 1.2.2 pretty-bytes: 5.6.0 proxy-from-env: 1.0.0 request-progress: 3.0.0 semver: 7.3.7 supports-color: 8.1.1 tmp: 0.2.1 untildify: 4.0.0 yauzl: 2.10.0 dev: true /cytoscape-cose-bilkent/4.1.0_cytoscape@3.23.0: resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} peerDependencies: cytoscape: ^3.2.0 dependencies: cose-base: 1.0.3 cytoscape: 3.23.0 dev: false /cytoscape-fcose/2.1.0_cytoscape@3.23.0: resolution: {integrity: sha512-Q3apPl66jf8/2sMsrCjNP247nbDkyIPjA9g5iPMMWNLZgP3/mn9aryF7EFY/oRPEpv7bKJ4jYmCoU5r5/qAc1Q==} peerDependencies: cytoscape: ^3.2.0 dependencies: cose-base: 2.1.0 cytoscape: 3.23.0 dev: false /cytoscape/3.23.0: resolution: {integrity: sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA==} engines: {node: '>=0.10'} dependencies: heap: 0.2.7 lodash: 4.17.21 dev: false /d3-array/3.2.0: resolution: {integrity: sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==} engines: {node: '>=12'} dependencies: internmap: 2.0.3 /d3-axis/3.0.0: resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} engines: {node: '>=12'} /d3-brush/3.0.0: resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} engines: {node: '>=12'} dependencies: d3-dispatch: 3.0.1 d3-drag: 3.0.0 d3-interpolate: 3.0.1 d3-selection: 3.0.0 d3-transition: 3.0.1_d3-selection@3.0.0 /d3-chord/3.0.1: resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} engines: {node: '>=12'} dependencies: d3-path: 3.0.1 /d3-color/3.1.0: resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} engines: {node: '>=12'} /d3-contour/4.0.0: resolution: {integrity: sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw==} engines: {node: '>=12'} dependencies: d3-array: 3.2.0 /d3-delaunay/6.0.2: resolution: {integrity: sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==} engines: {node: '>=12'} dependencies: delaunator: 5.0.0 /d3-dispatch/3.0.1: resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} engines: {node: '>=12'} /d3-drag/3.0.0: resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} engines: {node: '>=12'} dependencies: d3-dispatch: 3.0.1 d3-selection: 3.0.0 /d3-dsv/3.0.1: resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} engines: {node: '>=12'} hasBin: true dependencies: commander: 7.2.0 iconv-lite: 0.6.3 rw: 1.3.3 /d3-ease/3.0.1: resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} engines: {node: '>=12'} /d3-fetch/3.0.1: resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} engines: {node: '>=12'} dependencies: d3-dsv: 3.0.1 /d3-force/3.0.0: resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} engines: {node: '>=12'} dependencies: d3-dispatch: 3.0.1 d3-quadtree: 3.0.1 d3-timer: 3.0.1 /d3-format/3.1.0: resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} engines: {node: '>=12'} /d3-geo/3.0.1: resolution: {integrity: sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==} engines: {node: '>=12'} dependencies: d3-array: 3.2.0 /d3-hierarchy/3.1.2: resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} engines: {node: '>=12'} /d3-interpolate/3.0.1: resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} engines: {node: '>=12'} dependencies: d3-color: 3.1.0 /d3-path/3.0.1: resolution: {integrity: sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==} engines: {node: '>=12'} /d3-polygon/3.0.1: resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} engines: {node: '>=12'} /d3-quadtree/3.0.1: resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} engines: {node: '>=12'} /d3-random/3.0.1: resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} engines: {node: '>=12'} /d3-scale-chromatic/3.0.0: resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} engines: {node: '>=12'} dependencies: d3-color: 3.1.0 d3-interpolate: 3.0.1 /d3-scale/4.0.2: resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} engines: {node: '>=12'} dependencies: d3-array: 3.2.0 d3-format: 3.1.0 d3-interpolate: 3.0.1 d3-time: 3.0.0 d3-time-format: 4.1.0 /d3-selection/3.0.0: resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} engines: {node: '>=12'} /d3-shape/3.1.0: resolution: {integrity: sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==} engines: {node: '>=12'} dependencies: d3-path: 3.0.1 /d3-time-format/4.1.0: resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} engines: {node: '>=12'} dependencies: d3-time: 3.0.0 /d3-time/3.0.0: resolution: {integrity: sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==} engines: {node: '>=12'} dependencies: d3-array: 3.2.0 /d3-timer/3.0.1: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} /d3-transition/3.0.1_d3-selection@3.0.0: resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} engines: {node: '>=12'} peerDependencies: d3-selection: 2 - 3 dependencies: d3-color: 3.1.0 d3-dispatch: 3.0.1 d3-ease: 3.0.1 d3-interpolate: 3.0.1 d3-selection: 3.0.0 d3-timer: 3.0.1 /d3-zoom/3.0.0: resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} engines: {node: '>=12'} dependencies: d3-dispatch: 3.0.1 d3-drag: 3.0.0 d3-interpolate: 3.0.1 d3-selection: 3.0.0 d3-transition: 3.0.1_d3-selection@3.0.0 /d3/7.6.1: resolution: {integrity: sha512-txMTdIHFbcpLx+8a0IFhZsbp+PfBBPt8yfbmukZTQFroKuFqIwqswF0qE5JXWefylaAVpSXFoKm3yP+jpNLFLw==} engines: {node: '>=12'} dependencies: d3-array: 3.2.0 d3-axis: 3.0.0 d3-brush: 3.0.0 d3-chord: 3.0.1 d3-color: 3.1.0 d3-contour: 4.0.0 d3-delaunay: 6.0.2 d3-dispatch: 3.0.1 d3-drag: 3.0.0 d3-dsv: 3.0.1 d3-ease: 3.0.1 d3-fetch: 3.0.1 d3-force: 3.0.0 d3-format: 3.1.0 d3-geo: 3.0.1 d3-hierarchy: 3.1.2 d3-interpolate: 3.0.1 d3-path: 3.0.1 d3-polygon: 3.0.1 d3-quadtree: 3.0.1 d3-random: 3.0.1 d3-scale: 4.0.2 d3-scale-chromatic: 3.0.0 d3-selection: 3.0.0 d3-shape: 3.1.0 d3-time: 3.0.0 d3-time-format: 4.1.0 d3-timer: 3.0.1 d3-transition: 3.0.1_d3-selection@3.0.0 d3-zoom: 3.0.0 /dagre-d3/0.6.4: resolution: {integrity: sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==} dependencies: d3: 7.6.1 dagre: 0.8.5 graphlib: 2.1.8 lodash: 4.17.21 /dagre/0.8.5: resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==} dependencies: graphlib: 2.1.8 lodash: 4.17.21 /dargs/7.0.0: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} dev: true /dashdash/1.14.1: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} dependencies: assert-plus: 1.0.0 dev: true /data-uri-to-buffer/3.0.1: resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} engines: {node: '>= 6'} dev: true /data-urls/2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} dependencies: abab: 2.0.6 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 dev: true /data-urls/3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} dependencies: abab: 2.0.6 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 dev: true /date-fns/2.29.3: resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} engines: {node: '>=0.11'} dev: true /dateformat/3.0.3: resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} dev: true /dayjs/1.11.5: resolution: {integrity: sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==} dev: true /de-indent/1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} dev: true /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true dependencies: ms: 2.0.0 dev: true /debug/3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true dependencies: ms: 2.1.3 dev: true /debug/3.2.7_supports-color@8.1.1: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true dependencies: ms: 2.1.3 supports-color: 8.1.1 dev: true /debug/4.3.2: resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true dependencies: ms: 2.1.2 dev: true /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true dependencies: ms: 2.1.2 dev: true /debug/4.3.4_supports-color@8.1.1: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true dependencies: ms: 2.1.2 supports-color: 8.1.1 dev: true /decamelize-keys/1.1.0: resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==} engines: {node: '>=0.10.0'} dependencies: decamelize: 1.2.0 map-obj: 1.0.1 dev: true /decamelize/1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} dev: true /decimal.js/10.4.1: resolution: {integrity: sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==} dev: true /decode-named-character-reference/1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} dependencies: character-entities: 2.0.2 dev: true /decode-uri-component/0.2.0: resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==} engines: {node: '>=0.10'} dev: true /decompress-response/6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} dependencies: mimic-response: 3.1.0 dev: true /dedent/0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true /deep-eql/3.0.1: resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} engines: {node: '>=0.12'} dependencies: type-detect: 4.0.8 dev: true /deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true /deepmerge/4.2.2: resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} engines: {node: '>=0.10.0'} dev: true /defer-to-connect/2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} dev: true /define-properties/1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 dev: true /define-property/0.2.5: resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 0.1.6 dev: true /define-property/1.0.0: resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 1.0.2 dev: true /define-property/2.0.2: resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 1.0.2 isobject: 3.0.1 dev: true /defined/1.0.0: resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==} dev: true /degenerator/3.0.2: resolution: {integrity: sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==} engines: {node: '>= 6'} dependencies: ast-types: 0.13.4 escodegen: 1.14.3 esprima: 4.0.1 vm2: 3.9.11 dev: true /delaunator/5.0.0: resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} dependencies: robust-predicates: 3.0.1 /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} dev: true /depd/1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} dev: true /depd/2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} dev: true /dequal/2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} dev: true /destroy/1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: true /detab/2.0.4: resolution: {integrity: sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==} dependencies: repeat-string: 1.6.1 dev: true /detect-indent/6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} dev: true /detect-newline/3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} dev: true /detective/5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} hasBin: true dependencies: acorn-node: 1.8.2 defined: 1.0.0 minimist: 1.2.6 dev: true /diff-sequences/26.6.2: resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==} engines: {node: '>= 10.14.2'} dev: true /diff-sequences/29.0.0: resolution: {integrity: sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true /diff/4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true /diff/5.1.0: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} engines: {node: '>=0.3.1'} dev: true /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true /doctrine-temporary-fork/2.1.0: resolution: {integrity: sha512-nliqOv5NkE4zMON4UA6AMJE6As35afs8aYXATpU4pTUdIKiARZwrJVEP1boA3Rx1ZXHVkwxkhcq4VkqvsuRLsA==} engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 dev: true /doctrine/3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true /documentation/13.2.0: resolution: {integrity: sha512-c7lIXNZ9t3481c+OGpj4lWPhtdmQilg4E04wc6TXH1gYg2wWu+/f3c60Otg2HDRVnCQoXrozSWuUYNl7y7FJxw==} engines: {node: '>=10'} hasBin: true dependencies: '@babel/core': 7.12.3 '@babel/generator': 7.12.1 '@babel/parser': 7.12.3 '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-decorators': 7.19.1_@babel+core@7.12.3 '@babel/plugin-proposal-do-expressions': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-export-default-from': 7.18.10_@babel+core@7.12.3 '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.12.3 '@babel/plugin-proposal-function-bind': 7.18.9_@babel+core@7.12.3 '@babel/plugin-proposal-function-sent': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-logical-assignment-operators': 7.18.9_@babel+core@7.12.3 '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.12.3 '@babel/plugin-proposal-pipeline-operator': 7.18.9_@babel+core@7.12.3 '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.12.3 '@babel/plugin-proposal-throw-expressions': 7.18.6_@babel+core@7.12.3 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.12.3 '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.12.3 '@babel/preset-env': 7.19.1_@babel+core@7.12.3 '@babel/preset-flow': 7.18.6_@babel+core@7.12.3 '@babel/preset-react': 7.18.6_@babel+core@7.12.3 '@babel/preset-stage-0': 7.8.3 '@babel/traverse': 7.19.1 '@babel/types': 7.19.0 ansi-html: 0.0.7 babelify: 10.0.0_@babel+core@7.12.3 chalk: 2.4.2 chokidar: 3.5.3 concat-stream: 1.6.2 diff: 4.0.2 doctrine-temporary-fork: 2.1.0 get-port: 5.1.1 git-url-parse: 11.6.0 github-slugger: 1.2.0 glob: 7.2.3 globals-docs: 2.4.1 highlight.js: 10.7.3 ini: 1.3.8 js-yaml: 3.14.1 lodash: 4.17.21 mdast-util-inject: 1.1.0 micromatch: 3.1.10 mime: 2.6.0 module-deps-sortable: 5.0.3 parse-filepath: 1.0.2 pify: 5.0.0 read-pkg-up: 4.0.0 remark: 9.0.0 remark-html: 8.0.0 remark-reference-links: 4.0.4 remark-toc: 5.1.1 resolve: 1.22.1 stream-array: 1.1.2 strip-json-comments: 2.0.1 tiny-lr: 1.1.1 unist-builder: 1.0.4 unist-util-visit: 1.4.1 vfile: 4.2.1 vfile-reporter: 6.0.2 vfile-sort: 2.2.2 vinyl: 2.2.1 vinyl-fs: 3.0.3 vue-template-compiler: 2.7.10 yargs: 15.4.1 transitivePeerDependencies: - supports-color dev: true /dom-serializer/2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.4.0 dev: true /domelementtype/2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} dev: true /domexception/2.0.1: resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} engines: {node: '>=8'} dependencies: webidl-conversions: 5.0.0 dev: true /domexception/4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} dependencies: webidl-conversions: 7.0.0 dev: true /domhandler/5.0.3: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} dependencies: domelementtype: 2.3.0 dev: true /dompurify/2.4.0: resolution: {integrity: sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==} /domutils/3.0.1: resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==} dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 dev: true /dot-prop/5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} dependencies: is-obj: 2.0.0 dev: true /dotgitignore/2.1.0: resolution: {integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==} engines: {node: '>=6'} dependencies: find-up: 3.0.0 minimatch: 3.1.2 dev: true /duplexer/0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true /duplexer2/0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.7 dev: true /duplexify/3.7.1: resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 readable-stream: 2.3.7 stream-shift: 1.0.1 dev: true /eastasianwidth/0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true /ebnf-parser/0.1.10: resolution: {integrity: sha512-urvSxVQ6XJcoTpc+/x2pWhhuOX4aljCNQpwzw+ifZvV1andZkAmiJc3Rq1oGEAQmcjiLceyMXOy1l8ms8qs2fQ==} dev: true /ecc-jsbn/0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} dependencies: jsbn: 0.1.1 safer-buffer: 2.1.2 dev: true /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true /electron-to-chromium/1.4.257: resolution: {integrity: sha512-C65sIwHqNnPC2ADMfse/jWTtmhZMII+x6ADI9gENzrOiI7BpxmfKFE84WkIEl5wEg+7+SfIkwChDlsd1Erju2A==} dev: true /emittery/0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} engines: {node: '>=12'} dev: true /emittery/0.7.2: resolution: {integrity: sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==} engines: {node: '>=10'} dev: true /emoji-regex/6.1.1: resolution: {integrity: sha512-WfVwM9e+M9B/4Qjh9SRnPX2A74Tom3WlVfWF9QWJ8f2BPa1u+/q4aEp1tizZ3vBKAZTg7B6yxn3t9iMjT+dv4w==} dev: true /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true /emoji-regex/9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true /encodeurl/1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} dev: true /end-of-stream/1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 dev: true /entities/3.0.1: resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} engines: {node: '>=0.12'} dev: true /entities/4.4.0: resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} engines: {node: '>=0.12'} dev: true /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true /error/7.2.1: resolution: {integrity: sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==} dependencies: string-template: 0.2.1 dev: true /esbuild-android-64/0.15.10: resolution: {integrity: sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true dev: true optional: true /esbuild-android-64/0.15.8: resolution: {integrity: sha512-bVh8FIKOolF7/d4AMzt7xHlL0Ljr+mYKSHI39TJWDkybVWHdn6+4ODL3xZGHOxPpdRpitemXA1WwMKYBsw8dGw==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true dependencies: esbuild-wasm: 0.15.8 dev: true optional: true /esbuild-android-arm64/0.15.10: resolution: {integrity: sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true /esbuild-android-arm64/0.15.8: resolution: {integrity: sha512-ReAMDAHuo0H1h9LxRabI6gwYPn8k6WiUeyxuMvx17yTrJO+SCnIfNc/TSPFvDwtK9MiyiKG/2dBYHouT/M0BXQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true /esbuild-darwin-64/0.15.10: resolution: {integrity: sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true /esbuild-darwin-64/0.15.8: resolution: {integrity: sha512-KaKcGfJ+yto7Fo5gAj3xwxHMd1fBIKatpCHK8znTJLVv+9+NN2/tIPBqA4w5rBwjX0UqXDeIE2v1xJP+nGEXgA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true /esbuild-darwin-arm64/0.15.10: resolution: {integrity: sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true /esbuild-darwin-arm64/0.15.8: resolution: {integrity: sha512-8tjEaBgAKnXCkP7bhEJmEqdG9HEV6oLkF36BrMzpfW2rgaw0c48Zrxe+9RlfeGvs6gDF4w+agXyTjikzsS3izw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true /esbuild-freebsd-64/0.15.10: resolution: {integrity: sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true dev: true optional: true /esbuild-freebsd-64/0.15.8: resolution: {integrity: sha512-jaxcsGHYzn2L0/lffON2WfH4Nc+d/EwozVTP5K2v016zxMb5UQMhLoJzvLgBqHT1SG0B/mO+a+THnJCMVg15zw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true dev: true optional: true /esbuild-freebsd-arm64/0.15.10: resolution: {integrity: sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true dev: true optional: true /esbuild-freebsd-arm64/0.15.8: resolution: {integrity: sha512-2xp2UlljMvX8HExtcg7VHaeQk8OBU0CSl1j18B5CcZmSDkLF9p3utuMXIopG3a08fr9Hv+Dz6+seSXUow/G51w==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true dev: true optional: true /esbuild-linux-32/0.15.10: resolution: {integrity: sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-32/0.15.8: resolution: {integrity: sha512-9u1E54BRz1FQMl86iaHK146+4ID2KYNxL3trLZT4QLLx3M7Q9n4lGG3lrzqUatGR2cKy8c33b0iaCzsItZWkFg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-64/0.15.10: resolution: {integrity: sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-64/0.15.8: resolution: {integrity: sha512-4HxrsN9eUzJXdVGMTYA5Xler82FuZUu21bXKN42zcLHHNKCAMPUzD62I+GwDhsdgUBAUj0tRXDdsQHgaP6v0HA==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-arm/0.15.10: resolution: {integrity: sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-arm/0.15.8: resolution: {integrity: sha512-7DVBU9SFjX4+vBwt8tHsUCbE6Vvl6y6FQWHAgyw1lybC5gULqn/WnjHYHN2/LJaZRsDBvxWT4msEgwLGq1Wd3Q==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-arm64/0.15.10: resolution: {integrity: sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-arm64/0.15.8: resolution: {integrity: sha512-1OCm7Aq0tEJT70PbxmHSGYDLYP8DKH8r4Nk7/XbVzWaduo9beCjGBB+tGZIHK6DdTQ3h00/4Tb/70YMH/bOtKg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-mips64le/0.15.10: resolution: {integrity: sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-mips64le/0.15.8: resolution: {integrity: sha512-yeFoNPVFPEzZvFYBfUQNG2TjGRaCyV1E27OcOg4LOtnGrxb2wA+mkW3luckyv1CEyd00mpAg7UdHx8nlx3ghgA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-ppc64le/0.15.10: resolution: {integrity: sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-ppc64le/0.15.8: resolution: {integrity: sha512-CEyMMUUNabXibw8OSNmBXhOIGhnjNVl5Lpseiuf00iKN0V47oqDrbo4dsHz1wH62m49AR8iG8wpDlTqfYgKbtg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-riscv64/0.15.10: resolution: {integrity: sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-riscv64/0.15.8: resolution: {integrity: sha512-OCGSOaspMUjexSCU8ZiA0UnV/NiRU+s2vIfEcAQWQ6u32R+2luyfh/4ZaY6jFbylJE07Esc/yRvb9Q5fXuClXA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-s390x/0.15.10: resolution: {integrity: sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true dev: true optional: true /esbuild-linux-s390x/0.15.8: resolution: {integrity: sha512-RHdpdfxRTSrZXZJlFSLazFU4YwXLB5Rgf6Zr5rffqSsO4y9JybgtKO38bFwxZNlDXliYISXN/YROKrG9s7mZQA==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true dev: true optional: true /esbuild-netbsd-64/0.15.10: resolution: {integrity: sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true dev: true optional: true /esbuild-netbsd-64/0.15.8: resolution: {integrity: sha512-VolFFRatBH09T5QMWhiohAWCOien1R1Uz9K0BRVVTBgBaVBt7eArsXTKxVhUgRf2vwu2c2SXkuP0r7HLG0eozw==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true dev: true optional: true /esbuild-openbsd-64/0.15.10: resolution: {integrity: sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true dev: true optional: true /esbuild-openbsd-64/0.15.8: resolution: {integrity: sha512-HTAPlg+n4kUeE/isQxlCfsOz0xJGNoT5LJ9oYZWFKABfVf4Ycu7Zlf5ITgOnrdheTkz8JeL/gISIOCFAoOXrSA==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true dev: true optional: true /esbuild-sunos-64/0.15.10: resolution: {integrity: sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true dev: true optional: true /esbuild-sunos-64/0.15.8: resolution: {integrity: sha512-qMP/jR/FzcIOwKj+W+Lb+8Cfr8GZHbHUJxAPi7DUhNZMQ/6y7sOgRzlOSpRrbbUntrRZh0MqOyDhJ3Gpo6L1QA==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true dev: true optional: true /esbuild-wasm/0.15.8: resolution: {integrity: sha512-Y7uCl5RNO4URjlemjdx++ukVHEMt5s5AfMWYUnMiK4Sry+pPCvQIctzXq6r6FKCyGKjX6/NGMCqR2OX6aLxj0w==} engines: {node: '>=12'} hasBin: true requiresBuild: true dev: true optional: true /esbuild-windows-32/0.15.10: resolution: {integrity: sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true /esbuild-windows-32/0.15.8: resolution: {integrity: sha512-RKR1QHh4iWzjUhkP8Yqi75PPz/KS+b8zw3wUrzw6oAkj+iU5Qtyj61ZDaSG3Qf2vc6hTIUiPqVTqBH0NpXFNwg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true /esbuild-windows-64/0.15.10: resolution: {integrity: sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true /esbuild-windows-64/0.15.8: resolution: {integrity: sha512-ag9ptYrsizgsR+PQE8QKeMqnosLvAMonQREpLw4evA4FFgOBMLEat/dY/9txbpozTw9eEOYyD3a4cE9yTu20FA==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true /esbuild-windows-arm64/0.15.10: resolution: {integrity: sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true /esbuild-windows-arm64/0.15.8: resolution: {integrity: sha512-dbpAb0VyPaUs9mgw65KRfQ9rqiWCHpNzrJusoPu+LpEoswosjt/tFxN7cd2l68AT4qWdBkzAjDLRon7uqMeWcg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true /esbuild/0.15.10: resolution: {integrity: sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.15.10 '@esbuild/linux-loong64': 0.15.10 esbuild-android-64: 0.15.10 esbuild-android-arm64: 0.15.10 esbuild-darwin-64: 0.15.10 esbuild-darwin-arm64: 0.15.10 esbuild-freebsd-64: 0.15.10 esbuild-freebsd-arm64: 0.15.10 esbuild-linux-32: 0.15.10 esbuild-linux-64: 0.15.10 esbuild-linux-arm: 0.15.10 esbuild-linux-arm64: 0.15.10 esbuild-linux-mips64le: 0.15.10 esbuild-linux-ppc64le: 0.15.10 esbuild-linux-riscv64: 0.15.10 esbuild-linux-s390x: 0.15.10 esbuild-netbsd-64: 0.15.10 esbuild-openbsd-64: 0.15.10 esbuild-sunos-64: 0.15.10 esbuild-windows-32: 0.15.10 esbuild-windows-64: 0.15.10 esbuild-windows-arm64: 0.15.10 dev: true /esbuild/0.15.8: resolution: {integrity: sha512-Remsk2dmr1Ia65sU+QasE6svJbsHe62lzR+CnjpUvbZ+uSYo1SitiOWPRfZQkCu82YWZBBKXiD/j0i//XWMZ+Q==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.15.8 '@esbuild/linux-loong64': 0.15.8 esbuild-android-64: 0.15.8 esbuild-android-arm64: 0.15.8 esbuild-darwin-64: 0.15.8 esbuild-darwin-arm64: 0.15.8 esbuild-freebsd-64: 0.15.8 esbuild-freebsd-arm64: 0.15.8 esbuild-linux-32: 0.15.8 esbuild-linux-64: 0.15.8 esbuild-linux-arm: 0.15.8 esbuild-linux-arm64: 0.15.8 esbuild-linux-mips64le: 0.15.8 esbuild-linux-ppc64le: 0.15.8 esbuild-linux-riscv64: 0.15.8 esbuild-linux-s390x: 0.15.8 esbuild-netbsd-64: 0.15.8 esbuild-openbsd-64: 0.15.8 esbuild-sunos-64: 0.15.8 esbuild-windows-32: 0.15.8 esbuild-windows-64: 0.15.8 esbuild-windows-arm64: 0.15.8 dev: true /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} dev: true /escape-html/1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: true /escape-string-regexp/1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} dev: true /escape-string-regexp/2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} dev: true /escape-string-regexp/4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true /escodegen/1.14.3: resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} engines: {node: '>=4.0'} hasBin: true dependencies: esprima: 4.0.1 estraverse: 4.3.0 esutils: 2.0.3 optionator: 0.8.3 optionalDependencies: source-map: 0.6.1 dev: true /escodegen/1.3.3: resolution: {integrity: sha512-z9FWgKc48wjMlpzF5ymKS1AF8OIgnKLp9VyN7KbdtyrP/9lndwUFqCtMm+TAJmJf7KJFFYc4cFJfVTTGkKEwsA==} engines: {node: '>=0.10.0'} hasBin: true dependencies: esprima: 1.1.1 estraverse: 1.5.1 esutils: 1.0.0 optionalDependencies: source-map: 0.1.43 dev: true /escodegen/2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} engines: {node: '>=6.0'} hasBin: true dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 optionator: 0.8.3 optionalDependencies: source-map: 0.6.1 dev: true /eslint-config-prettier/8.5.0_eslint@8.23.1: resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: eslint: 8.23.1 dev: true /eslint-config-prettier/8.5.0_eslint@8.24.0: resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: eslint: 8.24.0 dev: true /eslint-plugin-cypress/2.12.1_eslint@8.23.1: resolution: {integrity: sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==} peerDependencies: eslint: '>= 3.2.1' dependencies: eslint: 8.23.1 globals: 11.12.0 dev: true /eslint-plugin-cypress/2.12.1_eslint@8.24.0: resolution: {integrity: sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==} peerDependencies: eslint: '>= 3.2.1' dependencies: eslint: 8.24.0 globals: 11.12.0 dev: true /eslint-plugin-html/7.1.0: resolution: {integrity: sha512-fNLRraV/e6j8e3XYOC9xgND4j+U7b1Rq+OygMlLcMg+wI/IpVbF+ubQa3R78EjKB9njT6TQOlcK5rFKBVVtdfg==} dependencies: htmlparser2: 8.0.1 dev: true /eslint-plugin-jest/27.0.4_f7dzv4ir665cww75ncpbtb7glm: resolution: {integrity: sha512-BuvY78pHMpMJ6Cio7sKg6jrqEcnRYPUc4Nlihku4vKx3FjlmMINSX4vcYokZIe+8TKcyr1aI5Kq7vYwgJNdQSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 eslint: ^7.0.0 || ^8.0.0 jest: '*' peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true jest: optional: true dependencies: '@typescript-eslint/eslint-plugin': 5.38.0_wsb62dxj2oqwgas4kadjymcmry '@typescript-eslint/utils': 5.38.0_irgkl5vooow2ydyo6aokmferha eslint: 8.23.1 jest: 26.6.3_ts-node@10.9.1 transitivePeerDependencies: - supports-color - typescript dev: true /eslint-plugin-jest/27.1.0_4rkgrv37dc3yt652qtbljgksbi: resolution: {integrity: sha512-sqojX5GKzQ8+PScF9rJ7dRMtu0NEIWsaDMLwRRvVE28mnWctZe5VAti394Nmut11vPwgxck9XnDmmjx/U9NowQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 eslint: ^7.0.0 || ^8.0.0 jest: '*' peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true jest: optional: true dependencies: '@typescript-eslint/eslint-plugin': 5.39.0_xyciw6oqjoiiono4dhv3uhn5my '@typescript-eslint/utils': 5.39.0_ypn2ylkkyfa5i233caldtndbqa eslint: 8.24.0 jest: 29.1.1_ahjkdke2ds2w5gj6yhynj4mjsq transitivePeerDependencies: - supports-color - typescript dev: true /eslint-plugin-jsdoc/39.3.6_eslint@8.23.1: resolution: {integrity: sha512-R6dZ4t83qPdMhIOGr7g2QII2pwCjYyKP+z0tPOfO1bbAbQyKC20Y2Rd6z1te86Lq3T7uM8bNo+VD9YFpE8HU/g==} engines: {node: ^14 || ^16 || ^17 || ^18} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: '@es-joy/jsdoccomment': 0.31.0 comment-parser: 1.3.1 debug: 4.3.4 escape-string-regexp: 4.0.0 eslint: 8.23.1 esquery: 1.4.0 semver: 7.3.7 spdx-expression-parse: 3.0.1 transitivePeerDependencies: - supports-color dev: true /eslint-plugin-jsdoc/39.3.6_eslint@8.24.0: resolution: {integrity: sha512-R6dZ4t83qPdMhIOGr7g2QII2pwCjYyKP+z0tPOfO1bbAbQyKC20Y2Rd6z1te86Lq3T7uM8bNo+VD9YFpE8HU/g==} engines: {node: ^14 || ^16 || ^17 || ^18} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: '@es-joy/jsdoccomment': 0.31.0 comment-parser: 1.3.1 debug: 4.3.4 escape-string-regexp: 4.0.0 eslint: 8.24.0 esquery: 1.4.0 semver: 7.3.7 spdx-expression-parse: 3.0.1 transitivePeerDependencies: - supports-color dev: true /eslint-plugin-json/3.1.0: resolution: {integrity: sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==} engines: {node: '>=12.0'} dependencies: lodash: 4.17.21 vscode-json-languageservice: 4.2.1 dev: true /eslint-plugin-markdown/3.0.0_eslint@8.23.1: resolution: {integrity: sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: eslint: 8.23.1 mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color dev: true /eslint-plugin-markdown/3.0.0_eslint@8.24.0: resolution: {integrity: sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: eslint: 8.24.0 mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color dev: true /eslint-scope/5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 dev: true /eslint-scope/7.1.1: resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 dev: true /eslint-utils/3.0.0_eslint@8.23.1: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: eslint: 8.23.1 eslint-visitor-keys: 2.1.0 dev: true /eslint-utils/3.0.0_eslint@8.24.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: eslint: 8.24.0 eslint-visitor-keys: 2.1.0 dev: true /eslint-visitor-keys/2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} dev: true /eslint-visitor-keys/3.3.0: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /eslint/8.23.1: resolution: {integrity: sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: '@eslint/eslintrc': 1.3.2 '@humanwhocodes/config-array': 0.10.5 '@humanwhocodes/gitignore-to-minimatch': 1.0.2 '@humanwhocodes/module-importer': 1.0.1 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 eslint-utils: 3.0.0_eslint@8.23.1 eslint-visitor-keys: 3.3.0 espree: 9.4.0 esquery: 1.4.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 globals: 13.17.0 globby: 11.1.0 grapheme-splitter: 1.0.4 ignore: 5.2.0 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 js-sdsl: 4.1.4 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.1 regexpp: 3.2.0 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color dev: true /eslint/8.24.0: resolution: {integrity: sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: '@eslint/eslintrc': 1.3.2 '@humanwhocodes/config-array': 0.10.5 '@humanwhocodes/gitignore-to-minimatch': 1.0.2 '@humanwhocodes/module-importer': 1.0.1 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 eslint-utils: 3.0.0_eslint@8.24.0 eslint-visitor-keys: 3.3.0 espree: 9.4.0 esquery: 1.4.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 globals: 13.17.0 globby: 11.1.0 grapheme-splitter: 1.0.4 ignore: 5.2.0 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 js-sdsl: 4.1.4 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.1 regexpp: 3.2.0 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color dev: true /espree/9.4.0: resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.8.0 acorn-jsx: 5.3.2_acorn@8.8.0 eslint-visitor-keys: 3.3.0 dev: true /esprima/1.1.1: resolution: {integrity: sha512-qxxB994/7NtERxgXdFgLHIs9M6bhLXc6qtUmWZ3L8+gTQ9qaoyki2887P2IqAYsoENyr8SUbTutStDniOHSDHg==} engines: {node: '>=0.4.0'} hasBin: true dev: true /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true /esquery/1.4.0: resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true /esrecurse/4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true /estraverse/1.5.1: resolution: {integrity: sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==} engines: {node: '>=0.4.0'} dev: true /estraverse/4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true /estraverse/5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} dev: true /estree-walker/2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true /esutils/1.0.0: resolution: {integrity: sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==} engines: {node: '>=0.10.0'} dev: true /esutils/2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true /etag/1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} dev: true /event-stream/3.3.4: resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} dependencies: duplexer: 0.1.2 from: 0.1.7 map-stream: 0.1.0 pause-stream: 0.0.11 split: 0.3.3 stream-combiner: 0.0.4 through: 2.3.8 dev: true /event-target-shim/5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} dev: true /eventemitter2/6.4.7: resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} dev: true /exec-sh/0.3.6: resolution: {integrity: sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==} dev: true /execa/1.0.0: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} dependencies: cross-spawn: 6.0.5 get-stream: 4.1.0 is-stream: 1.1.0 npm-run-path: 2.0.2 p-finally: 1.0.0 signal-exit: 3.0.7 strip-eof: 1.0.0 dev: true /execa/4.1.0: resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 get-stream: 5.2.0 human-signals: 1.1.1 is-stream: 2.0.1 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 dev: true /execa/5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 dev: true /execa/6.1.0: resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 human-signals: 3.0.1 is-stream: 3.0.0 merge-stream: 2.0.0 npm-run-path: 5.1.0 onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 dev: true /executable/4.1.1: resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} engines: {node: '>=4'} dependencies: pify: 2.3.0 dev: true /exit/0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} dev: true /expand-brackets/2.1.4: resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} engines: {node: '>=0.10.0'} dependencies: debug: 2.6.9 define-property: 0.2.5 extend-shallow: 2.0.1 posix-character-classes: 0.1.1 regex-not: 1.0.2 snapdragon: 0.8.2 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true /expect/26.6.2: resolution: {integrity: sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 ansi-styles: 4.3.0 jest-get-type: 26.3.0 jest-matcher-utils: 26.6.2 jest-message-util: 26.6.2 jest-regex-util: 26.0.0 dev: true /expect/29.1.0: resolution: {integrity: sha512-1NCfR0FEArn9Vq1KEjhPd1rggRLiWgo87gfMK4iKn6DcVzJBRMyDNX22hyND5KiSRPIPQ5KtsY6HLxsQ0MU86w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/expect-utils': 29.1.0 jest-get-type: 29.0.0 jest-matcher-utils: 29.1.0 jest-message-util: 29.1.0 jest-util: 29.1.0 dev: true /express/4.18.1: resolution: {integrity: sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 body-parser: 1.20.0 content-disposition: 0.5.4 content-type: 1.0.4 cookie: 0.5.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 encodeurl: 1.0.2 escape-html: 1.0.3 etag: 1.8.1 finalhandler: 1.2.0 fresh: 0.5.2 http-errors: 2.0.0 merge-descriptors: 1.0.1 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 path-to-regexp: 0.1.7 proxy-addr: 2.0.7 qs: 6.10.3 range-parser: 1.2.1 safe-buffer: 5.2.1 send: 0.18.0 serve-static: 1.15.0 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 utils-merge: 1.0.1 vary: 1.1.2 transitivePeerDependencies: - supports-color dev: true /extend-shallow/2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} dependencies: is-extendable: 0.1.1 dev: true /extend-shallow/3.0.2: resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} engines: {node: '>=0.10.0'} dependencies: assign-symbols: 1.0.0 is-extendable: 1.0.1 dev: true /extend/3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: true /extglob/2.0.4: resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} engines: {node: '>=0.10.0'} dependencies: array-unique: 0.3.2 define-property: 1.0.0 expand-brackets: 2.1.4 extend-shallow: 2.0.1 fragment-cache: 0.2.1 regex-not: 1.0.2 snapdragon: 0.8.2 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true /extract-zip/2.0.1_supports-color@8.1.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} hasBin: true dependencies: debug: 4.3.4_supports-color@8.1.1 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: '@types/yauzl': 2.10.0 transitivePeerDependencies: - supports-color dev: true /extsprintf/1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} dev: true /fast-clone/1.5.13: resolution: {integrity: sha512-0ez7coyFBQFjZtId+RJqJ+EQs61w9xARfqjqK0AD9vIUkSxWD4HvPt80+5evebZ1tTnv1GYKrPTipx7kOW5ipA==} dev: false /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true /fast-glob/3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 dev: true /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true /fast-levenshtein/2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true /fastq/1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: reusify: 1.0.4 dev: true /faye-websocket/0.10.0: resolution: {integrity: sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==} engines: {node: '>=0.4.0'} dependencies: websocket-driver: 0.7.4 dev: true /fb-watchman/2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 dev: true /fd-slicer/1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} dependencies: pend: 1.2.0 dev: true /figures/3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 dev: true /file-entry-cache/6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true /file-uri-to-path/2.0.0: resolution: {integrity: sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==} engines: {node: '>= 6'} dev: true /fill-range/4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} dependencies: extend-shallow: 2.0.1 is-number: 3.0.0 repeat-string: 1.6.1 to-regex-range: 2.1.1 dev: true /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true /filter-obj/1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} dev: true /finalhandler/1.2.0: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} dependencies: debug: 2.6.9 encodeurl: 1.0.2 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 statuses: 2.0.1 unpipe: 1.0.0 transitivePeerDependencies: - supports-color dev: true /find-up/2.1.0: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} dependencies: locate-path: 2.0.0 dev: true /find-up/3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} dependencies: locate-path: 3.0.0 dev: true /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 dev: true /find-up/5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 dev: true /flat-cache/3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flatted: 3.2.7 rimraf: 3.0.2 dev: true /flatted/3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true /flush-write-stream/1.1.1: resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==} dependencies: inherits: 2.0.4 readable-stream: 2.3.7 dev: true /follow-redirects/1.15.2_debug@4.3.2: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} peerDependencies: debug: '*' peerDependenciesMeta: debug: optional: true dependencies: debug: 4.3.2 dev: true /for-in/1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} dev: true /foreground-child/2.0.0: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} engines: {node: '>=8.0.0'} dependencies: cross-spawn: 7.0.3 signal-exit: 3.0.7 dev: true /forever-agent/0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} dev: true /form-data/2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 dev: true /form-data/3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 dev: true /form-data/4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 dev: true /forwarded/0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} dev: true /fp-ts/2.12.3: resolution: {integrity: sha512-8m0XvW8kZbfnJOA4NvSVXu95mLbPf4LQGwQyqVukIYS4KzSNJiyKSmuZUmbVHteUi6MGkAJGPb0goPZqI+Tsqg==} dev: true /fragment-cache/0.2.1: resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} engines: {node: '>=0.10.0'} dependencies: map-cache: 0.2.2 dev: true /fresh/0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} dev: true /from/0.1.7: resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} dev: true /fs-extra/10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} dependencies: graceful-fs: 4.2.10 jsonfile: 6.1.0 universalify: 2.0.0 dev: true /fs-extra/7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} dependencies: graceful-fs: 4.2.10 jsonfile: 4.0.0 universalify: 0.1.2 dev: true /fs-extra/8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} dependencies: graceful-fs: 4.2.10 jsonfile: 4.0.0 universalify: 0.1.2 dev: true /fs-extra/9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.10 jsonfile: 6.1.0 universalify: 2.0.0 dev: true /fs-mkdirp-stream/1.0.0: resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==} engines: {node: '>= 0.10'} dependencies: graceful-fs: 4.2.10 through2: 2.0.5 dev: true /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true /fsevents/2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true optional: true /ftp/0.3.10: resolution: {integrity: sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==} engines: {node: '>=0.8.0'} dependencies: readable-stream: 1.1.14 xregexp: 2.0.0 dev: true /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true /gensync/1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} dev: true /get-caller-file/2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} dev: true /get-func-name/2.0.0: resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} dev: true /get-intrinsic/1.1.3: resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} dependencies: function-bind: 1.1.1 has: 1.0.3 has-symbols: 1.0.3 dev: true /get-package-type/0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} dev: true /get-pkg-repo/4.2.1: resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==} engines: {node: '>=6.9.0'} hasBin: true dependencies: '@hutson/parse-repository-url': 3.0.2 hosted-git-info: 4.1.0 through2: 2.0.5 yargs: 16.2.0 dev: true /get-port/3.2.0: resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} engines: {node: '>=4'} dev: true /get-port/5.1.1: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} dev: true /get-stdin/5.0.1: resolution: {integrity: sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==} engines: {node: '>=0.12.0'} dev: true /get-stream/4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} dependencies: pump: 3.0.0 dev: true /get-stream/5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} dependencies: pump: 3.0.0 dev: true /get-stream/6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: true /get-uri/3.0.2: resolution: {integrity: sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==} engines: {node: '>= 6'} dependencies: '@tootallnate/once': 1.1.2 data-uri-to-buffer: 3.0.1 debug: 4.3.4 file-uri-to-path: 2.0.0 fs-extra: 8.1.0 ftp: 0.3.10 transitivePeerDependencies: - supports-color dev: true /get-value/2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} dev: true /getos/3.2.1: resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} dependencies: async: 3.2.4 dev: true /getpass/0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} dependencies: assert-plus: 1.0.0 dev: true /git-raw-commits/2.0.11: resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} engines: {node: '>=10'} hasBin: true dependencies: dargs: 7.0.0 lodash: 4.17.21 meow: 8.1.2 split2: 3.2.2 through2: 4.0.2 dev: true /git-remote-origin-url/2.0.0: resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==} engines: {node: '>=4'} dependencies: gitconfiglocal: 1.0.0 pify: 2.3.0 dev: true /git-semver-tags/4.1.1: resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==} engines: {node: '>=10'} hasBin: true dependencies: meow: 8.1.2 semver: 6.3.0 dev: true /git-up/4.0.5: resolution: {integrity: sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA==} dependencies: is-ssh: 1.4.0 parse-url: 6.0.5 dev: true /git-url-parse/11.6.0: resolution: {integrity: sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g==} dependencies: git-up: 4.0.5 dev: true /gitconfiglocal/1.0.0: resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==} dependencies: ini: 1.3.8 dev: true /github-slugger/1.2.0: resolution: {integrity: sha512-wIaa75k1vZhyPm9yWrD08A5Xnx/V+RmzGrpjQuLemGKSb77Qukiaei58Bogrl/LZSADDfPzKJX8jhLs4CRTl7Q==} dependencies: emoji-regex: 6.1.1 dev: true /github-slugger/1.4.0: resolution: {integrity: sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==} dev: true /glob-parent/3.1.0: resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} dependencies: is-glob: 3.1.0 path-dirname: 1.0.2 dev: true /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true /glob-parent/6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 dev: true /glob-stream/6.1.0: resolution: {integrity: sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==} engines: {node: '>= 0.10'} dependencies: extend: 3.0.2 glob: 7.2.3 glob-parent: 3.1.0 is-negated-glob: 1.0.0 ordered-read-streams: 1.0.1 pumpify: 1.5.1 readable-stream: 2.3.7 remove-trailing-separator: 1.1.0 to-absolute-glob: 2.0.2 unique-stream: 2.3.1 dev: true /glob/7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 dev: true /global-dirs/0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} dependencies: ini: 1.3.8 dev: true /global-dirs/3.0.0: resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} engines: {node: '>=10'} dependencies: ini: 2.0.0 dev: true /globals-docs/2.4.1: resolution: {integrity: sha512-qpPnUKkWnz8NESjrCvnlGklsgiQzlq+rcCxoG5uNQ+dNA7cFMCmn231slLAwS2N/PlkzZ3COL8CcS10jXmLHqg==} dev: true /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: true /globals/13.17.0: resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.12 ignore: 5.2.0 merge2: 1.4.1 slash: 3.0.0 dev: true /globby/13.1.2: resolution: {integrity: sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 fast-glob: 3.2.12 ignore: 5.2.0 merge2: 1.4.1 slash: 4.0.0 dev: true /glur/1.1.2: resolution: {integrity: sha512-l+8esYHTKOx2G/Aao4lEQ0bnHWg4fWtJbVoZZT9Knxi01pB8C80BR85nONLFwkkQoFRCmXY+BUcGZN3yZ2QsRA==} dev: true /got/11.8.5: resolution: {integrity: sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==} engines: {node: '>=10.19.0'} dependencies: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 '@types/cacheable-request': 6.0.2 '@types/responselike': 1.0.0 cacheable-lookup: 5.0.4 cacheable-request: 7.0.2 decompress-response: 6.0.0 http2-wrapper: 1.0.3 lowercase-keys: 2.0.0 p-cancelable: 2.1.1 responselike: 2.0.1 dev: true /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true /graphlib/2.1.8: resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} dependencies: lodash: 4.17.21 /gray-matter/4.0.3: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} dependencies: js-yaml: 3.14.1 kind-of: 6.0.3 section-matter: 1.0.0 strip-bom-string: 1.0.0 dev: true /growly/1.3.0: resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} dev: true optional: true /handlebars/4.7.7: resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} engines: {node: '>=0.4.7'} hasBin: true dependencies: minimist: 1.2.6 neo-async: 2.6.2 source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: uglify-js: 3.17.1 dev: true /happy-dom/6.0.4: resolution: {integrity: sha512-b+ID23Ms0BY08UNLymsOMG7EI2jSlwEt4cbJs938GZfeNAg+fqgkSO3TokQMgSOFoHznpjWmpVjBUL5boJ9PWw==} dependencies: css.escape: 1.5.1 he: 1.2.0 node-fetch: 2.6.7 sync-request: 6.1.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 transitivePeerDependencies: - encoding dev: true /har-schema/2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} engines: {node: '>=4'} dev: true /har-validator/5.1.5: resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} engines: {node: '>=6'} deprecated: this library is no longer supported dependencies: ajv: 6.12.6 har-schema: 2.0.0 dev: true /hard-rejection/2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} dev: true /harmony-reflect/1.6.2: resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} dev: true /has-ansi/2.0.0: resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} dev: true /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} dev: true /has-property-descriptors/1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.1.3 dev: true /has-symbols/1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true /has-value/0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} engines: {node: '>=0.10.0'} dependencies: get-value: 2.0.6 has-values: 0.1.4 isobject: 2.1.0 dev: true /has-value/1.0.0: resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} engines: {node: '>=0.10.0'} dependencies: get-value: 2.0.6 has-values: 1.0.0 isobject: 3.0.1 dev: true /has-values/0.1.4: resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} engines: {node: '>=0.10.0'} dev: true /has-values/1.0.0: resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} engines: {node: '>=0.10.0'} dependencies: is-number: 3.0.0 kind-of: 4.0.0 dev: true /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true /hast-util-is-element/1.1.0: resolution: {integrity: sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==} dev: true /hast-util-sanitize/1.3.1: resolution: {integrity: sha512-AIeKHuHx0Wk45nSkGVa2/ujQYTksnDl8gmmKo/mwQi7ag7IBZ8cM3nJ2G86SajbjGP/HRpud6kMkPtcM2i0Tlw==} dependencies: xtend: 4.0.2 dev: true /hast-util-to-html/4.0.1: resolution: {integrity: sha512-2emzwyf0xEsc4TBIPmDJmBttIw8R4SXAJiJZoiRR/s47ODYWgOqNoDbf2SJAbMbfNdFWMiCSOrI3OVnX6Qq2Mg==} dependencies: ccount: 1.1.0 comma-separated-tokens: 1.0.8 hast-util-is-element: 1.1.0 hast-util-whitespace: 1.0.4 html-void-elements: 1.0.5 property-information: 4.2.0 space-separated-tokens: 1.1.5 stringify-entities: 1.3.2 unist-util-is: 2.1.3 xtend: 4.0.2 dev: true /hast-util-whitespace/1.0.4: resolution: {integrity: sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==} dev: true /he/1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true dev: true /heap/0.2.7: resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} dev: false /highlight.js/10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} dev: true /hosted-git-info/2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true /hosted-git-info/4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true /html-encoding-sniffer/2.0.1: resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} engines: {node: '>=10'} dependencies: whatwg-encoding: 1.0.5 dev: true /html-encoding-sniffer/3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} dependencies: whatwg-encoding: 2.0.0 dev: true /html-escaper/2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true /html-void-elements/1.0.5: resolution: {integrity: sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==} dev: true /htmlparser2/8.0.1: resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==} dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.0.1 entities: 4.4.0 dev: true /http-basic/8.1.3: resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} engines: {node: '>=6.0.0'} dependencies: caseless: 0.12.0 concat-stream: 1.6.2 http-response-object: 3.0.2 parse-cache-control: 1.0.1 dev: true /http-cache-semantics/4.1.0: resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} dev: true /http-errors/2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 dev: true /http-parser-js/0.5.8: resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} dev: true /http-proxy-agent/4.0.1: resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} engines: {node: '>= 6'} dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true /http-proxy-agent/5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true /http-response-object/3.0.2: resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==} dependencies: '@types/node': 10.17.60 dev: true /http-signature/1.2.0: resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} engines: {node: '>=0.8', npm: '>=1.3.7'} dependencies: assert-plus: 1.0.0 jsprim: 1.4.2 sshpk: 1.17.0 dev: true /http-signature/1.3.6: resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==} engines: {node: '>=0.10'} dependencies: assert-plus: 1.0.0 jsprim: 2.0.2 sshpk: 1.17.0 dev: true /http2-wrapper/1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 dev: true /https-proxy-agent/5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true /human-signals/1.1.1: resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} engines: {node: '>=8.12.0'} dev: true /human-signals/2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} dev: true /human-signals/3.0.1: resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} engines: {node: '>=12.20.0'} dev: true /humanize-ms/1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: ms: 2.1.3 dev: true /husky/8.0.1: resolution: {integrity: sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==} engines: {node: '>=14'} hasBin: true dev: true /iconv-lite/0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true /iconv-lite/0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 /identity-obj-proxy/3.0.0: resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} engines: {node: '>=4'} dependencies: harmony-reflect: 1.6.2 dev: true /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true /ignore/5.2.0: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} engines: {node: '>= 4'} dev: true /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 dev: true /import-local/3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 dev: true /imurmurhash/0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} dev: true /indent-string/4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} dev: true /inferred-types/0.22.0: resolution: {integrity: sha512-7JF/huiuS1ANuQisfRigytz4IdYbmQVXOW+Jt6IL4k3TQxsCxAz72rWccBKTomnmGzBRcd3ki8gyrESYY/2bYw==} dependencies: common-types: 1.31.1 dev: true /inflight/1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true /ini/1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true /ini/2.0.0: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} engines: {node: '>=10'} dev: true /internmap/2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} /ip/1.1.8: resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} dev: true /ip/2.0.0: resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} dev: true /ipaddr.js/1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} dev: true /is-absolute/1.0.0: resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} engines: {node: '>=0.10.0'} dependencies: is-relative: 1.0.0 is-windows: 1.0.2 dev: true /is-accessor-descriptor/0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true /is-accessor-descriptor/1.0.0: resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 6.0.3 dev: true /is-alphabetical/1.0.4: resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} dev: true /is-alphanumeric/1.0.0: resolution: {integrity: sha512-ZmRL7++ZkcMOfDuWZuMJyIVLr2keE1o/DeNWh1EmgqGhUcV+9BIVsx0BcSBOHTZqzjs4+dISzr2KAeBEWGgXeA==} engines: {node: '>=0.10.0'} dev: true /is-alphanumerical/1.0.4: resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} dependencies: is-alphabetical: 1.0.4 is-decimal: 1.0.4 dev: true /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true /is-binary-path/2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true /is-buffer/1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true /is-buffer/2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} dev: true /is-ci/2.0.0: resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} hasBin: true dependencies: ci-info: 2.0.0 dev: true /is-ci/3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true dependencies: ci-info: 3.4.0 dev: true /is-core-module/2.10.0: resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} dependencies: has: 1.0.3 dev: true /is-data-descriptor/0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true /is-data-descriptor/1.0.0: resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 6.0.3 dev: true /is-decimal/1.0.4: resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} dev: true /is-descriptor/0.1.6: resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} engines: {node: '>=0.10.0'} dependencies: is-accessor-descriptor: 0.1.6 is-data-descriptor: 0.1.4 kind-of: 5.1.0 dev: true /is-descriptor/1.0.2: resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} engines: {node: '>=0.10.0'} dependencies: is-accessor-descriptor: 1.0.0 is-data-descriptor: 1.0.0 kind-of: 6.0.3 dev: true /is-docker/2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true dev: true optional: true /is-extendable/0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} dev: true /is-extendable/1.0.1: resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} engines: {node: '>=0.10.0'} dependencies: is-plain-object: 2.0.4 dev: true /is-extglob/2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} dev: true /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} dev: true /is-fullwidth-code-point/4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} dev: true /is-generator-fn/2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} dev: true /is-glob/3.1.0: resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true /is-glob/4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true /is-hexadecimal/1.0.4: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} dev: true /is-installed-globally/0.4.0: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} dependencies: global-dirs: 3.0.0 is-path-inside: 3.0.3 dev: true /is-negated-glob/1.0.0: resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==} engines: {node: '>=0.10.0'} dev: true /is-number/3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true /is-obj/2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} dev: true /is-path-inside/3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} dev: true /is-plain-obj/1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} dev: true /is-plain-obj/4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} dev: true /is-plain-object/2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true /is-potential-custom-element-name/1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true /is-relative/1.0.0: resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} engines: {node: '>=0.10.0'} dependencies: is-unc-path: 1.0.0 dev: true /is-ssh/1.4.0: resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} dependencies: protocols: 2.0.1 dev: true /is-stream/1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} dev: true /is-stream/2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true /is-stream/3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true /is-text-path/1.0.1: resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} engines: {node: '>=0.10.0'} dependencies: text-extensions: 1.9.0 dev: true /is-typedarray/1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: true /is-unc-path/1.0.0: resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} engines: {node: '>=0.10.0'} dependencies: unc-path-regex: 0.1.2 dev: true /is-unicode-supported/0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} dev: true /is-utf8/0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true /is-valid-glob/1.0.0: resolution: {integrity: sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==} engines: {node: '>=0.10.0'} dev: true /is-whitespace-character/1.0.4: resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} dev: true /is-windows/1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} dev: true /is-word-character/1.0.4: resolution: {integrity: sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==} dev: true /is-wsl/2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 dev: true optional: true /isarray/0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} dev: true /isarray/1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true /isexe/2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true /isobject/2.1.0: resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} engines: {node: '>=0.10.0'} dependencies: isarray: 1.0.0 dev: true /isobject/3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} dev: true /isstream/0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} dev: true /istanbul-lib-coverage/3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: true /istanbul-lib-instrument/4.0.3: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: '@babel/core': 7.12.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true /istanbul-lib-instrument/5.2.0: resolution: {integrity: sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==} engines: {node: '>=8'} dependencies: '@babel/core': 7.12.3 '@babel/parser': 7.19.1 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true /istanbul-lib-report/3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: istanbul-lib-coverage: 3.2.0 make-dir: 3.1.0 supports-color: 7.2.0 dev: true /istanbul-lib-source-maps/4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: debug: 4.3.4 istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true /istanbul-reports/3.1.5: resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 dev: true /iterm2-version/4.2.0: resolution: {integrity: sha512-IoiNVk4SMPu6uTcK+1nA5QaHNok2BMDLjSl5UomrOixe5g4GkylhPwuiGdw00ysSCrXAKNMfFTu+u/Lk5f6OLQ==} engines: {node: '>=8'} dependencies: app-path: 3.3.0 plist: 3.0.6 dev: true /jest-changed-files/26.6.2: resolution: {integrity: sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 execa: 4.1.0 throat: 5.0.0 dev: true /jest-changed-files/29.0.0: resolution: {integrity: sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 p-limit: 3.1.0 dev: true /jest-circus/29.1.1: resolution: {integrity: sha512-Ii+3JIeLF3z8j2E7fPSjPjXJLBdbAcZyfEiALRQ1Fk+FWTIfuEfZrZcjSaBdz/k/waoq+bPf9x/vBCXIAyLLEQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.1.1 '@jest/expect': 29.1.0 '@jest/test-result': 29.1.0 '@jest/types': 29.1.0 '@types/node': 18.8.1 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 is-generator-fn: 2.1.0 jest-each: 29.1.0 jest-matcher-utils: 29.1.0 jest-message-util: 29.1.0 jest-runtime: 29.1.1 jest-snapshot: 29.1.0 jest-util: 29.1.0 p-limit: 3.1.0 pretty-format: 29.1.0 slash: 3.0.0 stack-utils: 2.0.5 transitivePeerDependencies: - supports-color dev: true /jest-cli/26.6.3_ts-node@10.9.1: resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==} engines: {node: '>= 10.14.2'} hasBin: true dependencies: '@jest/core': 26.6.3_ts-node@10.9.1 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 is-ci: 2.0.0 jest-config: 26.6.3_ts-node@10.9.1 jest-util: 26.6.2 jest-validate: 26.6.2 prompts: 2.4.2 yargs: 15.4.1 transitivePeerDependencies: - bufferutil - canvas - supports-color - ts-node - utf-8-validate dev: true /jest-cli/29.1.1_ahjkdke2ds2w5gj6yhynj4mjsq: resolution: {integrity: sha512-nz/JNtqDFf49R2KgeZ9+6Zl1uxSuRsg/tICC+DHMh+bQ0co6QqBPWKg3FtW4534bs8/J2YqFC2Lct9DZR24z0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true dependencies: '@jest/core': 29.1.1_ts-node@10.9.1 '@jest/test-result': 29.1.0 '@jest/types': 29.1.0 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 jest-config: 29.1.1_ahjkdke2ds2w5gj6yhynj4mjsq jest-util: 29.1.0 jest-validate: 29.1.0 prompts: 2.4.2 yargs: 17.5.1 transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true /jest-config/26.6.3_ts-node@10.9.1: resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==} engines: {node: '>= 10.14.2'} peerDependencies: ts-node: '>=9.0.0' peerDependenciesMeta: ts-node: optional: true dependencies: '@babel/core': 7.12.3 '@jest/test-sequencer': 26.6.3_ts-node@10.9.1 '@jest/types': 26.6.2 babel-jest: 26.6.3_@babel+core@7.12.3 chalk: 4.1.2 deepmerge: 4.2.2 glob: 7.2.3 graceful-fs: 4.2.10 jest-environment-jsdom: 26.6.2 jest-environment-node: 26.6.2 jest-get-type: 26.3.0 jest-jasmine2: 26.6.3_ts-node@10.9.1 jest-regex-util: 26.0.0 jest-resolve: 26.6.2 jest-util: 26.6.2 jest-validate: 26.6.2 micromatch: 4.0.5 pretty-format: 26.6.2 ts-node: 10.9.1_wpuvd23gr7ieg6cvyhaoiu3d3a transitivePeerDependencies: - bufferutil - canvas - supports-color - utf-8-validate dev: true /jest-config/29.1.1_ahjkdke2ds2w5gj6yhynj4mjsq: resolution: {integrity: sha512-o2iZrQMOiF54zOw1kOcJGmfKzAW+V2ajZVWxbt+Ex+g0fVaTkk215BD/GFhrviuic+Xk7DpzUmdTT9c1QfsPqg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' ts-node: '>=9.0.0' peerDependenciesMeta: '@types/node': optional: true ts-node: optional: true dependencies: '@babel/core': 7.12.3 '@jest/test-sequencer': 29.1.0 '@jest/types': 29.1.0 '@types/node': 18.8.1 babel-jest: 29.1.0_@babel+core@7.12.3 chalk: 4.1.2 ci-info: 3.4.0 deepmerge: 4.2.2 glob: 7.2.3 graceful-fs: 4.2.10 jest-circus: 29.1.1 jest-environment-node: 29.1.1 jest-get-type: 29.0.0 jest-regex-util: 29.0.0 jest-resolve: 29.1.0 jest-runner: 29.1.1 jest-util: 29.1.0 jest-validate: 29.1.0 micromatch: 4.0.5 parse-json: 5.2.0 pretty-format: 29.1.0 slash: 3.0.0 strip-json-comments: 3.1.1 ts-node: 10.9.1_jrs6fgrkrfl5zdawlcdiuhuotq transitivePeerDependencies: - supports-color dev: true /jest-diff/26.6.2: resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} engines: {node: '>= 10.14.2'} dependencies: chalk: 4.1.2 diff-sequences: 26.6.2 jest-get-type: 26.3.0 pretty-format: 26.6.2 dev: true /jest-diff/29.1.0: resolution: {integrity: sha512-ZJyWG30jpVHwxLs8xxR1so4tz6lFARNztnFlxssFpQdakaW0isSx9rAKs/6aQUKQDZ/DgSpY6HjUGLO9xkNdRw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 diff-sequences: 29.0.0 jest-get-type: 29.0.0 pretty-format: 29.1.0 dev: true /jest-docblock/26.0.0: resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==} engines: {node: '>= 10.14.2'} dependencies: detect-newline: 3.1.0 dev: true /jest-docblock/29.0.0: resolution: {integrity: sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true /jest-each/26.6.2: resolution: {integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 chalk: 4.1.2 jest-get-type: 26.3.0 jest-util: 26.6.2 pretty-format: 26.6.2 dev: true /jest-each/29.1.0: resolution: {integrity: sha512-ELSZV/L4yjqKU2O0bnDTNHlizD4IRS9DX94iAB6QpiPIJsR453dJW7Ka7TXSmxQdc66HNNOhUcQ5utIeVCKGyA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.1.0 chalk: 4.1.2 jest-get-type: 29.0.0 jest-util: 29.1.0 pretty-format: 29.1.0 dev: true /jest-environment-jsdom/26.6.2: resolution: {integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==} engines: {node: '>= 10.14.2'} dependencies: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 '@types/node': 18.8.1 jest-mock: 26.6.2 jest-util: 26.6.2 jsdom: 16.7.0 transitivePeerDependencies: - bufferutil - canvas - supports-color - utf-8-validate dev: true /jest-environment-node/26.6.2: resolution: {integrity: sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==} engines: {node: '>= 10.14.2'} dependencies: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 '@types/node': 18.8.1 jest-mock: 26.6.2 jest-util: 26.6.2 dev: true /jest-environment-node/29.1.1: resolution: {integrity: sha512-0nwTca4L2N8iM33A+JMfBdygR6B3N/bcPoLe1hEd9o87KLxDZwKGvpTGSfXpjtyqNQXiaL/3G+YOcSoeq/syPw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.1.1 '@jest/fake-timers': 29.1.1 '@jest/types': 29.1.0 '@types/node': 18.8.1 jest-mock: 29.1.1 jest-util: 29.1.0 dev: true /jest-get-type/26.3.0: resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} engines: {node: '>= 10.14.2'} dev: true /jest-get-type/29.0.0: resolution: {integrity: sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true /jest-haste-map/26.6.2: resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.5 '@types/node': 18.8.1 anymatch: 3.1.2 fb-watchman: 2.0.2 graceful-fs: 4.2.10 jest-regex-util: 26.0.0 jest-serializer: 26.6.2 jest-util: 26.6.2 jest-worker: 26.6.2 micromatch: 4.0.5 sane: 4.1.0 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 transitivePeerDependencies: - supports-color dev: true /jest-haste-map/29.1.0: resolution: {integrity: sha512-qn+QVZ6JHzzx6g8XrMrNNvvIWrgVT6FzOoxTP5hQ1vEu6r9use2gOb0sSeC3Xle7eaDLN4DdAazSKnWskK3B/g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.1.0 '@types/graceful-fs': 4.1.5 '@types/node': 18.8.1 anymatch: 3.1.2 fb-watchman: 2.0.2 graceful-fs: 4.2.10 jest-regex-util: 29.0.0 jest-util: 29.1.0 jest-worker: 29.1.0 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 dev: true /jest-image-snapshot/4.2.0_jest@26.6.3: resolution: {integrity: sha512-6aAqv2wtfOgxiJeBayBCqHo1zX+A12SUNNzo7rIxiXh6W6xYVu8QyHWkada8HeRi+QUTHddp0O0Xa6kmQr+xbQ==} engines: {node: '>= 10.14.2'} peerDependencies: jest: '>=20 <=26' dependencies: chalk: 1.1.3 get-stdin: 5.0.1 glur: 1.1.2 jest: 26.6.3_ts-node@10.9.1 lodash: 4.17.21 mkdirp: 0.5.6 pixelmatch: 5.3.0 pngjs: 3.4.0 rimraf: 2.7.1 ssim.js: 3.5.0 dev: true /jest-image-snapshot/4.2.0_jest@29.1.1: resolution: {integrity: sha512-6aAqv2wtfOgxiJeBayBCqHo1zX+A12SUNNzo7rIxiXh6W6xYVu8QyHWkada8HeRi+QUTHddp0O0Xa6kmQr+xbQ==} engines: {node: '>= 10.14.2'} peerDependencies: jest: '>=20 <=26' dependencies: chalk: 1.1.3 get-stdin: 5.0.1 glur: 1.1.2 jest: 29.1.1_ahjkdke2ds2w5gj6yhynj4mjsq lodash: 4.17.21 mkdirp: 0.5.6 pixelmatch: 5.3.0 pngjs: 3.4.0 rimraf: 2.7.1 ssim.js: 3.5.0 dev: true /jest-jasmine2/26.6.3_ts-node@10.9.1: resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==} engines: {node: '>= 10.14.2'} dependencies: '@babel/traverse': 7.19.1 '@jest/environment': 26.6.2 '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 '@types/node': 18.8.1 chalk: 4.1.2 co: 4.6.0 expect: 26.6.2 is-generator-fn: 2.1.0 jest-each: 26.6.2 jest-matcher-utils: 26.6.2 jest-message-util: 26.6.2 jest-runtime: 26.6.3_ts-node@10.9.1 jest-snapshot: 26.6.2 jest-util: 26.6.2 pretty-format: 26.6.2 throat: 5.0.0 transitivePeerDependencies: - bufferutil - canvas - supports-color - ts-node - utf-8-validate dev: true /jest-leak-detector/26.6.2: resolution: {integrity: sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==} engines: {node: '>= 10.14.2'} dependencies: jest-get-type: 26.3.0 pretty-format: 26.6.2 dev: true /jest-leak-detector/29.1.0: resolution: {integrity: sha512-7ZdlIA2UXBIzXBNadta7pohrrvbD/Jp5T55Ux2DE1BSGul4RglIPHt7cZ0V3ll+ppBC1pGaBiWPBfLcQ2dDc3Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.0.0 pretty-format: 29.1.0 dev: true /jest-matcher-utils/26.6.2: resolution: {integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==} engines: {node: '>= 10.14.2'} dependencies: chalk: 4.1.2 jest-diff: 26.6.2 jest-get-type: 26.3.0 pretty-format: 26.6.2 dev: true /jest-matcher-utils/29.1.0: resolution: {integrity: sha512-pfthsLu27kZg+T1XTUGvox0r3gP3KtqdMPliVd/bs6iDrZ9Z6yJgLbw6zNc4DHtCcyzq9UW0jmszCX8DdFU/wA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 jest-diff: 29.1.0 jest-get-type: 29.0.0 pretty-format: 29.1.0 dev: true /jest-message-util/26.6.2: resolution: {integrity: sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==} engines: {node: '>= 10.14.2'} dependencies: '@babel/code-frame': 7.18.6 '@jest/types': 26.6.2 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.10 micromatch: 4.0.5 pretty-format: 26.6.2 slash: 3.0.0 stack-utils: 2.0.5 dev: true /jest-message-util/29.1.0: resolution: {integrity: sha512-NzGXD9wgCxUy20sIvyOsSA/KzQmkmagOVGE5LnT2juWn+hB88gCQr8N/jpu34CXRIXmV7INwrQVVwhnh72pY5A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/code-frame': 7.18.6 '@jest/types': 29.1.0 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.10 micromatch: 4.0.5 pretty-format: 29.1.0 slash: 3.0.0 stack-utils: 2.0.5 dev: true /jest-mock/26.6.2: resolution: {integrity: sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@types/node': 18.8.1 dev: true /jest-mock/29.1.1: resolution: {integrity: sha512-vDe56JmImqt3j8pHcEIkahQbSCnBS49wda0spIl0bkrIM7VDZXjKaes6W28vKZye0atNAcFaj3dxXh0XWjBW4Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.1.0 '@types/node': 18.8.1 jest-util: 29.1.0 dev: true /jest-pnp-resolver/1.2.2_jest-resolve@26.6.2: resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} peerDependencies: jest-resolve: '*' peerDependenciesMeta: jest-resolve: optional: true dependencies: jest-resolve: 26.6.2 dev: true /jest-pnp-resolver/1.2.2_jest-resolve@29.1.0: resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} peerDependencies: jest-resolve: '*' peerDependenciesMeta: jest-resolve: optional: true dependencies: jest-resolve: 29.1.0 dev: true /jest-regex-util/26.0.0: resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} engines: {node: '>= 10.14.2'} dev: true /jest-regex-util/29.0.0: resolution: {integrity: sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true /jest-resolve-dependencies/26.6.3: resolution: {integrity: sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 jest-regex-util: 26.0.0 jest-snapshot: 26.6.2 transitivePeerDependencies: - supports-color dev: true /jest-resolve-dependencies/29.1.1: resolution: {integrity: sha512-AMRTJyiK8caRXq3pa9i4oXX6yH+am5v0HwCUq1yk9lxI3ARihyT2OfEySJJo3ER7xpxf3b6isfp1sO6PQY3N0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.0.0 jest-snapshot: 29.1.0 transitivePeerDependencies: - supports-color dev: true /jest-resolve/26.6.2: resolution: {integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 chalk: 4.1.2 graceful-fs: 4.2.10 jest-pnp-resolver: 1.2.2_jest-resolve@26.6.2 jest-util: 26.6.2 read-pkg-up: 7.0.1 resolve: 1.22.1 slash: 3.0.0 dev: true /jest-resolve/29.1.0: resolution: {integrity: sha512-0IETuMI58nbAWwCrtX1QQmenstlWOEdwNS5FXxpEMAs6S5tttFiEoXUwGTAiI152nqoWRUckAgt21FP4wqeZWA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.10 jest-haste-map: 29.1.0 jest-pnp-resolver: 1.2.2_jest-resolve@29.1.0 jest-util: 29.1.0 jest-validate: 29.1.0 resolve: 1.22.1 resolve.exports: 1.1.0 slash: 3.0.0 dev: true /jest-runner/26.6.3_ts-node@10.9.1: resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==} engines: {node: '>= 10.14.2'} dependencies: '@jest/console': 26.6.2 '@jest/environment': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 '@types/node': 18.8.1 chalk: 4.1.2 emittery: 0.7.2 exit: 0.1.2 graceful-fs: 4.2.10 jest-config: 26.6.3_ts-node@10.9.1 jest-docblock: 26.0.0 jest-haste-map: 26.6.2 jest-leak-detector: 26.6.2 jest-message-util: 26.6.2 jest-resolve: 26.6.2 jest-runtime: 26.6.3_ts-node@10.9.1 jest-util: 26.6.2 jest-worker: 26.6.2 source-map-support: 0.5.13 throat: 5.0.0 transitivePeerDependencies: - bufferutil - canvas - supports-color - ts-node - utf-8-validate dev: true /jest-runner/29.1.1: resolution: {integrity: sha512-HqazsMPXB62Zi2oJEl+Ta9aUWAaR4WdT7ow25pcS99PkOsWQoYH+yyaKbAHBUf8NOqPbZ8T4Q8gt8ZBFEJJdVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/console': 29.1.0 '@jest/environment': 29.1.1 '@jest/test-result': 29.1.0 '@jest/transform': 29.1.0 '@jest/types': 29.1.0 '@types/node': 18.8.1 chalk: 4.1.2 emittery: 0.10.2 graceful-fs: 4.2.10 jest-docblock: 29.0.0 jest-environment-node: 29.1.1 jest-haste-map: 29.1.0 jest-leak-detector: 29.1.0 jest-message-util: 29.1.0 jest-resolve: 29.1.0 jest-runtime: 29.1.1 jest-util: 29.1.0 jest-watcher: 29.1.0 jest-worker: 29.1.0 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color dev: true /jest-runtime/26.6.3_ts-node@10.9.1: resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==} engines: {node: '>= 10.14.2'} hasBin: true dependencies: '@jest/console': 26.6.2 '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/globals': 26.6.2 '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 '@types/yargs': 15.0.14 chalk: 4.1.2 cjs-module-lexer: 0.6.0 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.10 jest-config: 26.6.3_ts-node@10.9.1 jest-haste-map: 26.6.2 jest-message-util: 26.6.2 jest-mock: 26.6.2 jest-regex-util: 26.0.0 jest-resolve: 26.6.2 jest-snapshot: 26.6.2 jest-util: 26.6.2 jest-validate: 26.6.2 slash: 3.0.0 strip-bom: 4.0.0 yargs: 15.4.1 transitivePeerDependencies: - bufferutil - canvas - supports-color - ts-node - utf-8-validate dev: true /jest-runtime/29.1.1: resolution: {integrity: sha512-DA2nW5GUAEFUOFztVqX6BOHbb1tUO1iDzlx+bOVdw870UIkv09u3P5nTfK3N+xtqy/fGlLsg7UCzhpEJnwKilg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.1.1 '@jest/fake-timers': 29.1.1 '@jest/globals': 29.1.1 '@jest/source-map': 29.0.0 '@jest/test-result': 29.1.0 '@jest/transform': 29.1.0 '@jest/types': 29.1.0 '@types/node': 18.8.1 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.3 graceful-fs: 4.2.10 jest-haste-map: 29.1.0 jest-message-util: 29.1.0 jest-mock: 29.1.1 jest-regex-util: 29.0.0 jest-resolve: 29.1.0 jest-snapshot: 29.1.0 jest-util: 29.1.0 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color dev: true /jest-serializer/26.6.2: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} dependencies: '@types/node': 18.8.1 graceful-fs: 4.2.10 dev: true /jest-snapshot/26.6.2: resolution: {integrity: sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==} engines: {node: '>= 10.14.2'} dependencies: '@babel/types': 7.19.0 '@jest/types': 26.6.2 '@types/babel__traverse': 7.18.2 '@types/prettier': 2.7.1 chalk: 4.1.2 expect: 26.6.2 graceful-fs: 4.2.10 jest-diff: 26.6.2 jest-get-type: 26.3.0 jest-haste-map: 26.6.2 jest-matcher-utils: 26.6.2 jest-message-util: 26.6.2 jest-resolve: 26.6.2 natural-compare: 1.4.0 pretty-format: 26.6.2 semver: 7.3.7 transitivePeerDependencies: - supports-color dev: true /jest-snapshot/29.1.0: resolution: {integrity: sha512-nHZoA+hpbFlkyV8uLoLJQ/80DLi3c6a5zeELgfSZ5bZj+eljqULr79KBQakp5xyH3onezf4k+K+2/Blk5/1O+g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.12.3 '@babel/generator': 7.19.0 '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.12.3 '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.12.3 '@babel/traverse': 7.19.1 '@babel/types': 7.19.0 '@jest/expect-utils': 29.1.0 '@jest/transform': 29.1.0 '@jest/types': 29.1.0 '@types/babel__traverse': 7.18.2 '@types/prettier': 2.7.1 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.12.3 chalk: 4.1.2 expect: 29.1.0 graceful-fs: 4.2.10 jest-diff: 29.1.0 jest-get-type: 29.0.0 jest-haste-map: 29.1.0 jest-matcher-utils: 29.1.0 jest-message-util: 29.1.0 jest-util: 29.1.0 natural-compare: 1.4.0 pretty-format: 29.1.0 semver: 7.3.7 transitivePeerDependencies: - supports-color dev: true /jest-util/26.6.2: resolution: {integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@types/node': 18.8.1 chalk: 4.1.2 graceful-fs: 4.2.10 is-ci: 2.0.0 micromatch: 4.0.5 dev: true /jest-util/29.1.0: resolution: {integrity: sha512-5haD8egMAEAq/e8ritN2Gr1WjLYtXi4udAIZB22GnKlv/2MHkbCjcyjgDBmyezAMMeQKGfoaaDsWCmVlnHZ1WQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.1.0 '@types/node': 18.8.1 chalk: 4.1.2 ci-info: 3.4.0 graceful-fs: 4.2.10 picomatch: 2.3.1 dev: true /jest-validate/26.6.2: resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 camelcase: 6.3.0 chalk: 4.1.2 jest-get-type: 26.3.0 leven: 3.1.0 pretty-format: 26.6.2 dev: true /jest-validate/29.1.0: resolution: {integrity: sha512-EQKRweSxmIJelCdirpuVkeCS1rSNXJFtSGEeSRFwH39QGioy7qKRSY8XBB4qFiappbsvgHnH0V6Iq5ASs11knA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.1.0 camelcase: 6.3.0 chalk: 4.1.2 jest-get-type: 29.0.0 leven: 3.1.0 pretty-format: 29.1.0 dev: true /jest-watcher/26.6.2: resolution: {integrity: sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==} engines: {node: '>= 10.14.2'} dependencies: '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 '@types/node': 18.8.1 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 26.6.2 string-length: 4.0.2 dev: true /jest-watcher/29.1.0: resolution: {integrity: sha512-JXw7+VpLSf+2yfXlux1/xR65fMn//0pmiXd6EtQWySS9233aA+eGS+8Y5o2imiJ25JBKdG8T45+s78CNQ71Fbg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/test-result': 29.1.0 '@jest/types': 29.1.0 '@types/node': 18.8.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.10.2 jest-util: 29.1.0 string-length: 4.0.2 dev: true /jest-worker/26.6.2: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: '@types/node': 18.8.1 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true /jest-worker/29.1.0: resolution: {integrity: sha512-yr7RFRAxI+vhL/cGB9B0FhD+QfaWh1qSxurx7gLP16dfmqhG8w75D/CQFU8ZetvhiQqLZh8X0C4rxwsZy6HITQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@types/node': 18.8.1 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true /jest/26.6.3_ts-node@10.9.1: resolution: {integrity: sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==} engines: {node: '>= 10.14.2'} hasBin: true dependencies: '@jest/core': 26.6.3_ts-node@10.9.1 import-local: 3.1.0 jest-cli: 26.6.3_ts-node@10.9.1 transitivePeerDependencies: - bufferutil - canvas - supports-color - ts-node - utf-8-validate dev: true /jest/29.1.1_ahjkdke2ds2w5gj6yhynj4mjsq: resolution: {integrity: sha512-Doe41PZ8MvGLtOZIW2RIVu94wa7jm/N775BBloVXk/G/vV6VYnDCOxBwrqekEgrd3Pn/bv8b5UdB2x0pAoQpwQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true dependencies: '@jest/core': 29.1.1_ts-node@10.9.1 '@jest/types': 29.1.0 import-local: 3.1.0 jest-cli: 29.1.1_ahjkdke2ds2w5gj6yhynj4mjsq transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true /jison-lex/0.3.4: resolution: {integrity: sha512-EBh5wrXhls1cUwROd5DcDHR1sG7CdsCFSqY1027+YA1RGxz+BX2TDLAhdsQf40YEtFDGoiO0Qm8PpnBl2EzDJw==} engines: {node: '>=0.4'} hasBin: true dependencies: lex-parser: 0.1.4 nomnom: 1.5.2 dev: true /jison/0.4.18: resolution: {integrity: sha512-FKkCiJvozgC7VTHhMJ00a0/IApSxhlGsFIshLW6trWJ8ONX2TQJBBz6DlcO1Gffy4w9LT+uL+PA+CVnUSJMF7w==} engines: {node: '>=0.4'} hasBin: true dependencies: JSONSelect: 0.4.0 cjson: 0.3.0 ebnf-parser: 0.1.10 escodegen: 1.3.3 esprima: 1.1.1 jison-lex: 0.3.4 lex-parser: 0.1.4 nomnom: 1.5.2 dev: true /joi/17.6.0: resolution: {integrity: sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==} dependencies: '@hapi/hoek': 9.3.0 '@hapi/topo': 5.1.0 '@sideway/address': 4.1.4 '@sideway/formula': 3.0.0 '@sideway/pinpoint': 2.0.0 dev: true /jpeg-js/0.4.4: resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} dev: true /js-base64/3.7.2: resolution: {integrity: sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==} dev: true /js-sdsl/4.1.4: resolution: {integrity: sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==} dev: true /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true /js-yaml/3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 dev: true /js-yaml/4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 dev: true /jsbn/0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} dev: true /jsdoc-type-pratt-parser/3.1.0: resolution: {integrity: sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==} engines: {node: '>=12.0.0'} dev: true /jsdom/16.7.0: resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} engines: {node: '>=10'} peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true dependencies: abab: 2.0.6 acorn: 8.8.0 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 data-urls: 2.0.0 decimal.js: 10.4.1 domexception: 2.0.1 escodegen: 2.0.0 form-data: 3.0.1 html-encoding-sniffer: 2.0.1 http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.2 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 tough-cookie: 4.1.2 w3c-hr-time: 1.0.2 w3c-xmlserializer: 2.0.0 webidl-conversions: 6.1.0 whatwg-encoding: 1.0.5 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 ws: 7.4.6 xml-name-validator: 3.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true /jsdom/20.0.0: resolution: {integrity: sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==} engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true dependencies: abab: 2.0.6 acorn: 8.8.0 acorn-globals: 6.0.0 cssom: 0.5.0 cssstyle: 2.3.0 data-urls: 3.0.2 decimal.js: 10.4.1 domexception: 4.0.0 escodegen: 2.0.0 form-data: 4.0.0 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.2 parse5: 7.1.1 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.2 w3c-hr-time: 1.0.2 w3c-xmlserializer: 3.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 ws: 8.8.1 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true /jsdom/20.0.1: resolution: {integrity: sha512-pksjj7Rqoa+wdpkKcLzQRHhJCEE42qQhl/xLMUKHgoSejaKOdaXEAnqs6uDNwMl/fciHTzKeR8Wm8cw7N+g98A==} engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true dependencies: abab: 2.0.6 acorn: 8.8.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 data-urls: 3.0.2 decimal.js: 10.4.1 domexception: 4.0.0 escodegen: 2.0.0 form-data: 4.0.0 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.2 parse5: 7.1.1 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.2 w3c-xmlserializer: 3.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 ws: 8.9.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true /jsesc/0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true dev: true /jsesc/2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true dev: true /json-buffer/3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true /json-parse-better-errors/1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} dev: true /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true /json-schema-traverse/1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true /json-schema/0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} dev: true /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true /json-stringify-safe/5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true /json5/2.2.1: resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} engines: {node: '>=6'} hasBin: true dev: true /jsonc-parser/3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true /jsonfile/4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.10 dev: true /jsonfile/6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.10 dev: true /jsonlint/1.6.0: resolution: {integrity: sha512-x6YLBe6NjdpmIeiklwQOxsZuYj/SOWkT33GlTpaG1UdFGjdWjPcxJ1CWZAX3wA7tarz8E2YHF6KiW5HTapPlXw==} engines: {node: '>= 0.6'} hasBin: true dependencies: JSV: 4.0.2 nomnom: 1.5.2 dev: true /jsonparse/1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true /jsprim/1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} dependencies: assert-plus: 1.0.0 extsprintf: 1.3.0 json-schema: 0.4.0 verror: 1.10.0 dev: true /jsprim/2.0.2: resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} engines: {'0': node >=0.6.0} dependencies: assert-plus: 1.0.0 extsprintf: 1.3.0 json-schema: 0.4.0 verror: 1.10.0 dev: true /keyv/4.5.0: resolution: {integrity: sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==} dependencies: json-buffer: 3.0.1 dev: true /khroma/2.0.0: resolution: {integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==} /kind-of/3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true /kind-of/4.0.0: resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true /kind-of/5.1.0: resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} engines: {node: '>=0.10.0'} dev: true /kind-of/6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} dev: true /kleur/3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} dev: true /kleur/4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} dev: true /konan/2.1.1: resolution: {integrity: sha512-7ZhYV84UzJ0PR/RJnnsMZcAbn+kLasJhVNWsu8ZyVEJYRpGA5XESQ9d/7zOa08U0Ou4cmB++hMNY/3OSV9KIbg==} dependencies: '@babel/parser': 7.19.1 '@babel/traverse': 7.19.1 transitivePeerDependencies: - supports-color dev: true /ky/0.28.7: resolution: {integrity: sha512-a23i6qSr/ep15vdtw/zyEQIDLoUaKDg9Jf04CYl/0ns/wXNYna26zJpI+MeIFaPeDvkrjLPrKtKOiiI3IE53RQ==} engines: {node: '>=12'} dev: true /layout-base/1.0.2: resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} dev: false /layout-base/2.0.1: resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} dev: false /lazy-ass/1.6.0: resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} engines: {node: '> 0.8'} dev: true /lazystream/1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} dependencies: readable-stream: 2.3.7 dev: true /lcov-parse/1.0.0: resolution: {integrity: sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==} hasBin: true dev: true /lead/1.0.0: resolution: {integrity: sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==} engines: {node: '>= 0.10'} dependencies: flush-write-stream: 1.1.1 dev: true /leven/3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} dev: true /levn/0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 dev: true /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 dev: true /lex-parser/0.1.4: resolution: {integrity: sha512-DuAEISsr1H4LOpmFLkyMc8YStiRWZCO8hMsoXAXSbgyfvs2WQhSt0+/FBv3ZU/JBFZMGcE+FWzEBSzwUU7U27w==} dev: true /lilconfig/2.0.5: resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} engines: {node: '>=10'} dev: true /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true /linkify-it/4.0.1: resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} dependencies: uc.micro: 1.0.6 dev: true /lint-staged/13.0.3: resolution: {integrity: sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true dependencies: cli-truncate: 3.1.0 colorette: 2.0.19 commander: 9.4.0 debug: 4.3.4 execa: 6.1.0 lilconfig: 2.0.5 listr2: 4.0.5 micromatch: 4.0.5 normalize-path: 3.0.0 object-inspect: 1.12.2 pidtree: 0.6.0 string-argv: 0.3.1 yaml: 2.1.1 transitivePeerDependencies: - enquirer - supports-color dev: true /listr2/3.14.0_enquirer@2.3.6: resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} engines: {node: '>=10.0.0'} peerDependencies: enquirer: '>= 2.3.0 < 3' peerDependenciesMeta: enquirer: optional: true dependencies: cli-truncate: 2.1.0 colorette: 2.0.19 enquirer: 2.3.6 log-update: 4.0.0 p-map: 4.0.0 rfdc: 1.3.0 rxjs: 7.5.6 through: 2.3.8 wrap-ansi: 7.0.0 dev: true /listr2/4.0.5: resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} engines: {node: '>=12'} peerDependencies: enquirer: '>= 2.3.0 < 3' peerDependenciesMeta: enquirer: optional: true dependencies: cli-truncate: 2.1.0 colorette: 2.0.19 log-update: 4.0.0 p-map: 4.0.0 rfdc: 1.3.0 rxjs: 7.5.6 through: 2.3.8 wrap-ansi: 7.0.0 dev: true /livereload-js/2.4.0: resolution: {integrity: sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==} dev: true /load-json-file/4.0.0: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} dependencies: graceful-fs: 4.2.10 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 dev: true /local-pkg/0.4.2: resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} engines: {node: '>=14'} dev: true /locate-path/2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} dependencies: p-locate: 2.0.0 path-exists: 3.0.0 dev: true /locate-path/3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} dependencies: p-locate: 3.0.0 path-exists: 3.0.0 dev: true /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true /locate-path/6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true /lodash.debounce/4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true /lodash.ismatch/4.4.0: resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} dev: true /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true /lodash.once/4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} dev: true /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} /log-driver/1.2.7: resolution: {integrity: sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==} engines: {node: '>=0.8.6'} dev: true /log-symbols/4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 dev: true /log-update/4.0.0: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} engines: {node: '>=10'} dependencies: ansi-escapes: 4.3.2 cli-cursor: 3.1.0 slice-ansi: 4.0.0 wrap-ansi: 6.2.0 dev: true /loglevel-plugin-prefix/0.8.4: resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} dev: true /loglevel/1.8.0: resolution: {integrity: sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==} engines: {node: '>= 0.6.0'} dev: true /longest-streak/2.0.4: resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==} dev: true /longest-streak/3.0.1: resolution: {integrity: sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==} dev: true /loupe/2.3.4: resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} dependencies: get-func-name: 2.0.0 dev: true /lowercase-keys/2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} dev: true /lru-cache/5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 dev: true /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true /magic-string/0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: sourcemap-codec: 1.4.8 dev: true /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: semver: 6.3.0 dev: true /make-error/1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true /makeerror/1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 dev: true /map-cache/0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} dev: true /map-obj/1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} dev: true /map-obj/4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} dev: true /map-stream/0.1.0: resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} dev: true /map-visit/1.0.0: resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} engines: {node: '>=0.10.0'} dependencies: object-visit: 1.0.1 dev: true /markdown-escapes/1.0.4: resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==} dev: true /markdown-it/13.0.1: resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} hasBin: true dependencies: argparse: 2.0.1 entities: 3.0.1 linkify-it: 4.0.1 mdurl: 1.0.1 uc.micro: 1.0.6 dev: true /markdown-table/1.1.3: resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} dev: true /mdast-util-compact/1.0.4: resolution: {integrity: sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==} dependencies: unist-util-visit: 1.4.1 dev: true /mdast-util-definitions/1.2.5: resolution: {integrity: sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA==} dependencies: unist-util-visit: 1.4.1 dev: true /mdast-util-from-markdown/0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} dependencies: '@types/mdast': 3.0.10 mdast-util-to-string: 2.0.0 micromark: 2.11.4 parse-entities: 2.0.0 unist-util-stringify-position: 2.0.3 transitivePeerDependencies: - supports-color dev: true /mdast-util-from-markdown/1.2.0: resolution: {integrity: sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==} dependencies: '@types/mdast': 3.0.10 '@types/unist': 2.0.6 decode-named-character-reference: 1.0.2 mdast-util-to-string: 3.1.0 micromark: 3.0.10 micromark-util-decode-numeric-character-reference: 1.0.0 micromark-util-decode-string: 1.0.2 micromark-util-normalize-identifier: 1.0.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 unist-util-stringify-position: 3.0.2 uvu: 0.5.6 transitivePeerDependencies: - supports-color dev: true /mdast-util-inject/1.1.0: resolution: {integrity: sha512-CcJ0mHa36QYumDKiZ2OIR+ClhfOM7zIzN+Wfy8tRZ1hpH9DKLCS+Mh4DyK5bCxzE9uxMWcbIpeNFWsg1zrj/2g==} dependencies: mdast-util-to-string: 1.1.0 dev: true /mdast-util-to-hast/3.0.4: resolution: {integrity: sha512-/eIbly2YmyVgpJNo+bFLLMCI1XgolO/Ffowhf+pHDq3X4/V6FntC9sGQCDLM147eTS+uSXv5dRzJyFn+o0tazA==} dependencies: collapse-white-space: 1.0.6 detab: 2.0.4 mdast-util-definitions: 1.2.5 mdurl: 1.0.1 trim: 0.0.1 trim-lines: 1.1.3 unist-builder: 1.0.4 unist-util-generated: 1.1.6 unist-util-position: 3.1.0 unist-util-visit: 1.4.1 xtend: 4.0.2 dev: true /mdast-util-to-markdown/1.3.0: resolution: {integrity: sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==} dependencies: '@types/mdast': 3.0.10 '@types/unist': 2.0.6 longest-streak: 3.0.1 mdast-util-to-string: 3.1.0 micromark-util-decode-string: 1.0.2 unist-util-visit: 4.1.1 zwitch: 2.0.2 dev: true /mdast-util-to-string/1.1.0: resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} dev: true /mdast-util-to-string/2.0.0: resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} dev: true /mdast-util-to-string/3.1.0: resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==} dev: true /mdast-util-toc/3.1.0: resolution: {integrity: sha512-Za0hqL1PqWrvxGtA/3NH9D5nhGAUS9grMM4obEAz5+zsk1RIw/vWUchkaoDLNdrwk05A0CSC5eEXng36/1qE5w==} dependencies: github-slugger: 1.4.0 mdast-util-to-string: 1.1.0 unist-util-is: 2.1.3 unist-util-visit: 1.4.1 dev: true /mdn-data/2.0.6: resolution: {integrity: sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==} dev: true /mdurl/1.0.1: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} dev: true /media-typer/0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} dev: true /meow/8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} dependencies: '@types/minimist': 1.2.2 camelcase-keys: 6.2.2 decamelize-keys: 1.1.0 hard-rejection: 2.1.0 minimist-options: 4.1.0 normalize-package-data: 3.0.3 read-pkg-up: 7.0.1 redent: 3.0.0 trim-newlines: 3.0.1 type-fest: 0.18.1 yargs-parser: 20.2.9 dev: true /merge-descriptors/1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: true /merge-stream/2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true /merge2/1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: true /mermaid/9.1.7: resolution: {integrity: sha512-MRVHXy5FLjnUQUG7YS3UN9jEN6FXCJbFCXVGJQjVIbiR6Vhw0j/6pLIjqsiah9xoHmQU6DEaKOvB3S1g/1nBPA==} dependencies: '@braintree/sanitize-url': 6.0.0 d3: 7.6.1 dagre: 0.8.5 dagre-d3: 0.6.4 dompurify: 2.4.0 graphlib: 2.1.8 khroma: 2.0.0 moment-mini: 2.24.0 stylis: 4.1.2 dev: true /methods/1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} dev: true /micromark-core-commonmark/1.0.6: resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} dependencies: decode-named-character-reference: 1.0.2 micromark-factory-destination: 1.0.0 micromark-factory-label: 1.0.2 micromark-factory-space: 1.0.0 micromark-factory-title: 1.0.2 micromark-factory-whitespace: 1.0.0 micromark-util-character: 1.1.0 micromark-util-chunked: 1.0.0 micromark-util-classify-character: 1.0.0 micromark-util-html-tag-name: 1.1.0 micromark-util-normalize-identifier: 1.0.0 micromark-util-resolve-all: 1.0.0 micromark-util-subtokenize: 1.0.2 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 uvu: 0.5.6 dev: true /micromark-factory-destination/1.0.0: resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==} dependencies: micromark-util-character: 1.1.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 dev: true /micromark-factory-label/1.0.2: resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==} dependencies: micromark-util-character: 1.1.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 uvu: 0.5.6 dev: true /micromark-factory-space/1.0.0: resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==} dependencies: micromark-util-character: 1.1.0 micromark-util-types: 1.0.2 dev: true /micromark-factory-title/1.0.2: resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==} dependencies: micromark-factory-space: 1.0.0 micromark-util-character: 1.1.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 uvu: 0.5.6 dev: true /micromark-factory-whitespace/1.0.0: resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==} dependencies: micromark-factory-space: 1.0.0 micromark-util-character: 1.1.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 dev: true /micromark-util-character/1.1.0: resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==} dependencies: micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 dev: true /micromark-util-chunked/1.0.0: resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==} dependencies: micromark-util-symbol: 1.0.1 dev: true /micromark-util-classify-character/1.0.0: resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==} dependencies: micromark-util-character: 1.1.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 dev: true /micromark-util-combine-extensions/1.0.0: resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==} dependencies: micromark-util-chunked: 1.0.0 micromark-util-types: 1.0.2 dev: true /micromark-util-decode-numeric-character-reference/1.0.0: resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==} dependencies: micromark-util-symbol: 1.0.1 dev: true /micromark-util-decode-string/1.0.2: resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==} dependencies: decode-named-character-reference: 1.0.2 micromark-util-character: 1.1.0 micromark-util-decode-numeric-character-reference: 1.0.0 micromark-util-symbol: 1.0.1 dev: true /micromark-util-encode/1.0.1: resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==} dev: true /micromark-util-html-tag-name/1.1.0: resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==} dev: true /micromark-util-normalize-identifier/1.0.0: resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==} dependencies: micromark-util-symbol: 1.0.1 dev: true /micromark-util-resolve-all/1.0.0: resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==} dependencies: micromark-util-types: 1.0.2 dev: true /micromark-util-sanitize-uri/1.0.0: resolution: {integrity: sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==} dependencies: micromark-util-character: 1.1.0 micromark-util-encode: 1.0.1 micromark-util-symbol: 1.0.1 dev: true /micromark-util-subtokenize/1.0.2: resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==} dependencies: micromark-util-chunked: 1.0.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 uvu: 0.5.6 dev: true /micromark-util-symbol/1.0.1: resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==} dev: true /micromark-util-types/1.0.2: resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==} dev: true /micromark/2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} dependencies: debug: 4.3.4 parse-entities: 2.0.0 transitivePeerDependencies: - supports-color dev: true /micromark/3.0.10: resolution: {integrity: sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==} dependencies: '@types/debug': 4.1.7 debug: 4.3.4 decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.0.6 micromark-factory-space: 1.0.0 micromark-util-character: 1.1.0 micromark-util-chunked: 1.0.0 micromark-util-combine-extensions: 1.0.0 micromark-util-decode-numeric-character-reference: 1.0.0 micromark-util-encode: 1.0.1 micromark-util-normalize-identifier: 1.0.0 micromark-util-resolve-all: 1.0.0 micromark-util-sanitize-uri: 1.0.0 micromark-util-subtokenize: 1.0.2 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 uvu: 0.5.6 transitivePeerDependencies: - supports-color dev: true /micromatch/3.1.10: resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} dependencies: arr-diff: 4.0.0 array-unique: 0.3.2 braces: 2.3.2 define-property: 2.0.2 extend-shallow: 3.0.2 extglob: 2.0.4 fragment-cache: 0.2.1 kind-of: 6.0.3 nanomatch: 1.2.13 object.pick: 1.3.0 regex-not: 1.0.2 snapdragon: 0.8.2 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true /micromatch/4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 dev: true /mime-db/1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} dev: true /mime-types/2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true /mime/1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true dev: true /mime/2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} hasBin: true dev: true /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} dev: true /mimic-fn/4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} dev: true /mimic-response/1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} dev: true /mimic-response/3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} dev: true /min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} dev: true /minimatch/3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true /minimist-options/4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} dependencies: arrify: 1.0.1 is-plain-obj: 1.1.0 kind-of: 6.0.3 dev: true /minimist/1.2.6: resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} dev: true /mixin-deep/1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} dependencies: for-in: 1.0.2 is-extendable: 1.0.1 dev: true /mkdirp/0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: minimist: 1.2.6 dev: true /modify-values/1.0.1: resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} engines: {node: '>=0.10.0'} dev: true /module-deps-sortable/5.0.3: resolution: {integrity: sha512-eiyIZj/A0dj1o4ywXWqicazUL3l0HP3TydUR6xF0X3xh3LGBMLqW8a9aFe6MuNH4mxNMk53QKBHM6LOPR8kSgw==} engines: {node: '>= 0.6'} hasBin: true dependencies: JSONStream: 1.3.5 browser-resolve: 1.11.3 cached-path-relative: 1.1.0 concat-stream: 1.5.2 defined: 1.0.0 detective: 5.2.1 duplexer2: 0.1.4 inherits: 2.0.4 konan: 2.1.1 readable-stream: 2.3.7 resolve: 1.22.1 standard-version: 9.5.0 stream-combiner2: 1.1.1 subarg: 1.0.0 through2: 2.0.5 xtend: 4.0.2 transitivePeerDependencies: - supports-color dev: true /moment-mini/2.24.0: resolution: {integrity: sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ==} dev: true /moment-mini/2.29.4: resolution: {integrity: sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==} dev: false /moment/2.29.4: resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} dev: true /mri/1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} dev: true /mrmime/1.0.1: resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} engines: {node: '>=10'} dev: true /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true /nanoid/3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true /nanomatch/1.2.13: resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} dependencies: arr-diff: 4.0.0 array-unique: 0.3.2 define-property: 2.0.2 extend-shallow: 3.0.2 fragment-cache: 0.2.1 is-windows: 1.0.2 kind-of: 6.0.3 object.pick: 1.3.0 regex-not: 1.0.2 snapdragon: 0.8.2 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true /native-dash/1.23.2_dnicfi6n7tywwajisjusxhbdzm: resolution: {integrity: sha512-Ev5OPB5vDZ+HLj4MXfAwZRHJV/LJr2LHjsIr1UN7jZigMS2JRpF7Qy77t66GURhtzp7GSWLNSLeRwXOg1iwJkQ==} dependencies: brilliant-errors: 0.6.0_dnicfi6n7tywwajisjusxhbdzm inferred-types: 0.22.0 transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/browser' - '@vitest/ui' - c8 - happy-dom - jsdom - less - sass - stylus - supports-color - terser dev: true /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true /negotiator/0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} dev: true /neo-async/2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true /netmask/2.0.2: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} dev: true /nice-try/1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true /node-fetch/2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: encoding: optional: true dependencies: whatwg-url: 5.0.0 dev: true /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true /node-notifier/8.0.2: resolution: {integrity: sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==} requiresBuild: true dependencies: growly: 1.3.0 is-wsl: 2.2.0 semver: 7.3.7 shellwords: 0.1.1 uuid: 8.3.2 which: 2.0.2 dev: true optional: true /node-releases/2.0.6: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} dev: true /nomnom/1.5.2: resolution: {integrity: sha512-fiVbT7BqxiQqjlR9U3FDGOSERFCKoXVCdxV2FwZuNN7/cmJ42iQx35nUFOAFDcyvemu9Adp+IlsCGlKQYLmBKw==} deprecated: Package no longer supported. Contact support@npmjs.com for more info. dependencies: colors: 0.5.1 underscore: 1.1.7 dev: true /non-layered-tidy-tree-layout/2.0.2: resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} dev: false /normalize-package-data/2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 resolve: 1.22.1 semver: 5.7.1 validate-npm-package-license: 3.0.4 dev: true /normalize-package-data/3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 is-core-module: 2.10.0 semver: 7.3.7 validate-npm-package-license: 3.0.4 dev: true /normalize-path/2.1.1: resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} engines: {node: '>=0.10.0'} dependencies: remove-trailing-separator: 1.1.0 dev: true /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true /normalize-url/6.1.0: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} dev: true /now-and-later/2.0.1: resolution: {integrity: sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==} engines: {node: '>= 0.10'} dependencies: once: 1.4.0 dev: true /npm-run-path/2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} dependencies: path-key: 2.0.1 dev: true /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 dev: true /npm-run-path/5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 dev: true /nwsapi/2.2.2: resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} dev: true /oauth-sign/0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} dev: true /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true /object-copy/0.1.0: resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} engines: {node: '>=0.10.0'} dependencies: copy-descriptor: 0.1.1 define-property: 0.2.5 kind-of: 3.2.2 dev: true /object-inspect/1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} dev: true /object-keys/1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true /object-visit/1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true /object.assign/4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true /object.pick/1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true /on-finished/2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 dev: true /once/1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true /onetime/5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 dev: true /onetime/6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 dev: true /optionator/0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.3.0 prelude-ls: 1.1.2 type-check: 0.3.2 word-wrap: 1.2.3 dev: true /optionator/0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 word-wrap: 1.2.3 dev: true /ordered-read-streams/1.0.1: resolution: {integrity: sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==} dependencies: readable-stream: 2.3.7 dev: true /ospath/1.2.2: resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} dev: true /p-cancelable/2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} dev: true /p-each-series/2.2.0: resolution: {integrity: sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==} engines: {node: '>=8'} dev: true /p-finally/1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} dev: true /p-iteration/1.1.8: resolution: {integrity: sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ==} engines: {node: '>=8.0.0'} dev: true /p-limit/1.3.0: resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} engines: {node: '>=4'} dependencies: p-try: 1.0.0 dev: true /p-limit/2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true /p-limit/3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true /p-locate/2.0.0: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} dependencies: p-limit: 1.3.0 dev: true /p-locate/3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} dependencies: p-limit: 2.3.0 dev: true /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true /p-locate/5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true /p-map/4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 dev: true /p-try/1.0.0: resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} engines: {node: '>=4'} dev: true /p-try/2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true /pac-proxy-agent/5.0.0: resolution: {integrity: sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==} engines: {node: '>= 8'} dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 debug: 4.3.4 get-uri: 3.0.2 http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 pac-resolver: 5.0.1 raw-body: 2.5.1 socks-proxy-agent: 5.0.1 transitivePeerDependencies: - supports-color dev: true /pac-resolver/5.0.1: resolution: {integrity: sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==} engines: {node: '>= 8'} dependencies: degenerator: 3.0.2 ip: 1.1.8 netmask: 2.0.2 dev: true /pako/1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true /parent-module/1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true /parse-cache-control/1.0.1: resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} dev: true /parse-entities/1.2.2: resolution: {integrity: sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==} dependencies: character-entities: 1.2.4 character-entities-legacy: 1.1.4 character-reference-invalid: 1.1.4 is-alphanumerical: 1.0.4 is-decimal: 1.0.4 is-hexadecimal: 1.0.4 dev: true /parse-entities/2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} dependencies: character-entities: 1.2.4 character-entities-legacy: 1.1.4 character-reference-invalid: 1.1.4 is-alphanumerical: 1.0.4 is-decimal: 1.0.4 is-hexadecimal: 1.0.4 dev: true /parse-filepath/1.0.2: resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} engines: {node: '>=0.8'} dependencies: is-absolute: 1.0.0 map-cache: 0.2.2 path-root: 0.1.1 dev: true /parse-json/4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 dev: true /parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: '@babel/code-frame': 7.18.6 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 dev: true /parse-path/4.0.4: resolution: {integrity: sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw==} dependencies: is-ssh: 1.4.0 protocols: 1.4.8 qs: 6.11.0 query-string: 6.14.1 dev: true /parse-url/6.0.5: resolution: {integrity: sha512-e35AeLTSIlkw/5GFq70IN7po8fmDUjpDPY1rIK+VubRfsUvBonjQ+PBZG+vWMACnQSmNlvl524IucoDmcioMxA==} dependencies: is-ssh: 1.4.0 normalize-url: 6.1.0 parse-path: 4.0.4 protocols: 1.4.8 dev: true /parse5/6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true /parse5/7.1.1: resolution: {integrity: sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==} dependencies: entities: 4.4.0 dev: true /parseurl/1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} dev: true /pascalcase/0.1.1: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} engines: {node: '>=0.10.0'} dev: true /path-browserify/1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true /path-dirname/1.0.2: resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} dev: true /path-exists/3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} dev: true /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} dev: true /path-is-absolute/1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true /path-key/2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} dev: true /path-key/3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} dev: true /path-key/4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} dev: true /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true /path-root-regex/0.1.2: resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} engines: {node: '>=0.10.0'} dev: true /path-root/0.1.1: resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} engines: {node: '>=0.10.0'} dependencies: path-root-regex: 0.1.2 dev: true /path-to-regexp/0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true /path-type/3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} engines: {node: '>=4'} dependencies: pify: 3.0.0 dev: true /path-type/4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true /pathval/1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true /pause-stream/0.0.11: resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} dependencies: through: 2.3.8 dev: true /pend/1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} dev: true /performance-now/2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: true /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} dev: true /pidtree/0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} hasBin: true dev: true /pify/2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} dev: true /pify/3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} dev: true /pify/5.0.0: resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} engines: {node: '>=10'} dev: true /pirates/4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} dev: true /pixelmatch/5.3.0: resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} hasBin: true dependencies: pngjs: 6.0.0 dev: true /pkg-dir/3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} dependencies: find-up: 3.0.0 dev: true /pkg-dir/4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true /plist/3.0.6: resolution: {integrity: sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==} engines: {node: '>=6'} dependencies: base64-js: 1.5.1 xmlbuilder: 15.1.1 dev: true /png-async/0.9.4: resolution: {integrity: sha512-B//AXX9TkneKfgtOpT1mdUnnhk2BImGD+a98vImsMU8uo1dBeHyW/kM2erWZ/CsYteTPU/xKG+t6T62heHkC3A==} dev: true /pngjs/3.4.0: resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} engines: {node: '>=4.0.0'} dev: true /pngjs/6.0.0: resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} engines: {node: '>=12.13.0'} dev: true /pnpm/7.13.2: resolution: {integrity: sha512-lOQRBcCWycLK1PB9KptqTd6iyiH7m4GRuS4G2j4b74yDx/XvRXtP/weYz8e0/ia7HX1pMF1vJCF48ssklq0TJQ==} engines: {node: '>=14.6'} hasBin: true dev: true /posix-character-classes/0.1.1: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} dev: true /postcss-value-parser/4.1.0: resolution: {integrity: sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==} dev: true /postcss/8.4.16: resolution: {integrity: sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 dev: true /preact/10.11.0: resolution: {integrity: sha512-Fk6+vB2kb6mSJfDgODq0YDhMfl0HNtK5+Uc9QqECO4nlyPAQwCI+BKyWO//idA7ikV7o+0Fm6LQmNuQi1wXI1w==} dev: true /prelude-ls/1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} dev: true /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true /prettier-plugin-jsdoc/0.4.2_prettier@2.7.1: resolution: {integrity: sha512-w2jnAQm3z0GAG0bhzVJeehzDtrhGMSxJjit5ApCc2oxWfc7+jmLAkbtdOXaSpfwZz3IWkk+PiQPeRrLNpbM+Mw==} engines: {node: '>=12.0.0'} peerDependencies: prettier: '>=2.1.2' dependencies: binary-searching: 2.0.5 comment-parser: 1.3.1 mdast-util-from-markdown: 1.2.0 prettier: 2.7.1 transitivePeerDependencies: - supports-color dev: true /prettier/2.7.1: resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} engines: {node: '>=10.13.0'} hasBin: true dev: true /pretty-bytes/5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} dev: true /pretty-format/26.6.2: resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} engines: {node: '>= 10'} dependencies: '@jest/types': 26.6.2 ansi-regex: 5.0.1 ansi-styles: 4.3.0 react-is: 17.0.2 dev: true /pretty-format/29.1.0: resolution: {integrity: sha512-dZ21z0UjKVSiEkrPAt2nJnGfrtYMFBlNW4wTkJsIp9oB5A8SUQ8DuJ9EUgAvYyNfMeoGmKiDnpJvM489jkzdSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.0.0 ansi-styles: 5.2.0 react-is: 18.2.0 dev: true /process-nextick-args/1.0.7: resolution: {integrity: sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==} dev: true /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true /promise/8.2.0: resolution: {integrity: sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==} dependencies: asap: 2.0.6 dev: true /prompts/2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} dependencies: kleur: 3.0.3 sisteransi: 1.0.5 dev: true /property-information/4.2.0: resolution: {integrity: sha512-TlgDPagHh+eBKOnH2VYvk8qbwsCG/TAJdmTL7f1PROUcSO8qt/KSmShEQ/OKvock8X9tFjtqjCScyOkkkvIKVQ==} dependencies: xtend: 4.0.2 dev: true /protocols/1.4.8: resolution: {integrity: sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==} dev: true /protocols/2.0.1: resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} dev: true /proxy-addr/2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 dev: true /proxy-agent/5.0.0: resolution: {integrity: sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==} engines: {node: '>= 8'} dependencies: agent-base: 6.0.2 debug: 4.3.4 http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 lru-cache: 5.1.1 pac-proxy-agent: 5.0.0 proxy-from-env: 1.1.0 socks-proxy-agent: 5.0.1 transitivePeerDependencies: - supports-color dev: true /proxy-from-env/1.0.0: resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} dev: true /proxy-from-env/1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true /ps-tree/1.2.0: resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} engines: {node: '>= 0.10'} hasBin: true dependencies: event-stream: 3.3.4 dev: true /psl/1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true /pump/2.0.1: resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true /pump/3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true /pumpify/1.5.1: resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} dependencies: duplexify: 3.7.1 inherits: 2.0.4 pump: 2.0.1 dev: true /punycode/2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} dev: true /q/1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true /qs/6.10.3: resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 dev: true /qs/6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 dev: true /qs/6.5.3: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} dev: true /query-string/6.14.1: resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} engines: {node: '>=6'} dependencies: decode-uri-component: 0.2.0 filter-obj: 1.1.0 split-on-first: 1.1.0 strict-uri-encode: 2.0.0 dev: true /querystringify/2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: true /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true /quick-lru/4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} dev: true /quick-lru/5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} dev: true /range-parser/1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} dev: true /raw-body/1.1.7: resolution: {integrity: sha512-WmJJU2e9Y6M5UzTOkHaM7xJGAPQD8PNzx3bAd2+uhZAim6wDk6dAZxPVYLF67XhbR4hmKGh33Lpmh4XWrCH5Mg==} engines: {node: '>= 0.8.0'} dependencies: bytes: 1.0.0 string_decoder: 0.10.31 dev: true /raw-body/2.5.1: resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} engines: {node: '>= 0.8'} dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 dev: true /react-is/17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true /react-is/18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true /read-pkg-up/3.0.0: resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==} engines: {node: '>=4'} dependencies: find-up: 2.1.0 read-pkg: 3.0.0 dev: true /read-pkg-up/4.0.0: resolution: {integrity: sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==} engines: {node: '>=6'} dependencies: find-up: 3.0.0 read-pkg: 3.0.0 dev: true /read-pkg-up/7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 dev: true /read-pkg/3.0.0: resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} engines: {node: '>=4'} dependencies: load-json-file: 4.0.0 normalize-package-data: 2.5.0 path-type: 3.0.0 dev: true /read-pkg/5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} dependencies: '@types/normalize-package-data': 2.4.1 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 dev: true /readable-stream/1.1.14: resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 isarray: 0.0.1 string_decoder: 0.10.31 dev: true /readable-stream/2.0.6: resolution: {integrity: sha512-TXcFfb63BQe1+ySzsHZI/5v1aJPCShfqvWJ64ayNImXMsN1Cd0YGk/wm8KB7/OeessgPc9QvS9Zou8QTkFzsLw==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 isarray: 1.0.0 process-nextick-args: 1.0.7 string_decoder: 0.10.31 util-deprecate: 1.0.2 dev: true /readable-stream/2.1.5: resolution: {integrity: sha512-NkXT2AER7VKXeXtJNSaWLpWIhmtSE3K2PguaLEeWr4JILghcIKqoLt1A3wHrnpDC5+ekf8gfk1GKWkFXe4odMw==} dependencies: buffer-shims: 1.0.0 core-util-is: 1.0.3 inherits: 2.0.4 isarray: 1.0.0 process-nextick-args: 1.0.7 string_decoder: 0.10.31 util-deprecate: 1.0.2 dev: true /readable-stream/2.3.7: resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 isarray: 1.0.0 process-nextick-args: 2.0.1 safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 dev: true /readable-stream/3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 dev: true /readdirp/3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 dev: true /redent/3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 dev: true /regenerate-unicode-properties/10.1.0: resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} engines: {node: '>=4'} dependencies: regenerate: 1.4.2 dev: true /regenerate/1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: true /regenerator-runtime/0.13.9: resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} dev: true /regenerator-transform/0.15.0: resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==} dependencies: '@babel/runtime': 7.19.0 dev: true /regex-not/1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} engines: {node: '>=0.10.0'} dependencies: extend-shallow: 3.0.2 safe-regex: 1.1.0 dev: true /regexpp/3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} dev: true /regexpu-core/5.2.1: resolution: {integrity: sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==} engines: {node: '>=4'} dependencies: regenerate: 1.4.2 regenerate-unicode-properties: 10.1.0 regjsgen: 0.7.1 regjsparser: 0.9.1 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.0.0 dev: true /regjsgen/0.7.1: resolution: {integrity: sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==} dev: true /regjsparser/0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true dependencies: jsesc: 0.5.0 dev: true /remark-html/8.0.0: resolution: {integrity: sha512-3V2391GL3hxKhrkzYOyfPpxJ6taIKLCfuLVqumeWQOk3H9nTtSQ8St8kMYkBVIEAquXN1chT83qJ/2lAW+dpEg==} dependencies: hast-util-sanitize: 1.3.1 hast-util-to-html: 4.0.1 mdast-util-to-hast: 3.0.4 xtend: 4.0.2 dev: true /remark-parse/10.0.1: resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} dependencies: '@types/mdast': 3.0.10 mdast-util-from-markdown: 1.2.0 unified: 10.1.2 transitivePeerDependencies: - supports-color dev: true /remark-parse/5.0.0: resolution: {integrity: sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==} dependencies: collapse-white-space: 1.0.6 is-alphabetical: 1.0.4 is-decimal: 1.0.4 is-whitespace-character: 1.0.4 is-word-character: 1.0.4 markdown-escapes: 1.0.4 parse-entities: 1.2.2 repeat-string: 1.6.1 state-toggle: 1.0.3 trim: 0.0.1 trim-trailing-lines: 1.1.4 unherit: 1.1.3 unist-util-remove-position: 1.1.4 vfile-location: 2.0.6 xtend: 4.0.2 dev: true /remark-reference-links/4.0.4: resolution: {integrity: sha512-+2X8hwSQqxG4tvjYZNrTcEC+bXp8shQvwRGG6J/rnFTvBoU4G0BBviZoqKGZizLh/DG+0gSYhiDDWCqyxXW1iQ==} dependencies: unist-util-visit: 1.4.1 dev: true /remark-slug/5.1.2: resolution: {integrity: sha512-DWX+Kd9iKycqyD+/B+gEFO3jjnt7Yg1O05lygYSNTe5i5PIxxxPjp5qPBDxPIzp5wreF7+1ROCwRgjEcqmzr3A==} dependencies: github-slugger: 1.2.0 mdast-util-to-string: 1.1.0 unist-util-visit: 1.4.1 dev: true /remark-stringify/10.0.2: resolution: {integrity: sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==} dependencies: '@types/mdast': 3.0.10 mdast-util-to-markdown: 1.3.0 unified: 10.1.2 dev: true /remark-stringify/5.0.0: resolution: {integrity: sha512-Ws5MdA69ftqQ/yhRF9XhVV29mhxbfGhbz0Rx5bQH+oJcNhhSM6nCu1EpLod+DjrFGrU0BMPs+czVmJZU7xiS7w==} dependencies: ccount: 1.1.0 is-alphanumeric: 1.0.0 is-decimal: 1.0.4 is-whitespace-character: 1.0.4 longest-streak: 2.0.4 markdown-escapes: 1.0.4 markdown-table: 1.1.3 mdast-util-compact: 1.0.4 parse-entities: 1.2.2 repeat-string: 1.6.1 state-toggle: 1.0.3 stringify-entities: 1.3.2 unherit: 1.1.3 xtend: 4.0.2 dev: true /remark-toc/5.1.1: resolution: {integrity: sha512-vCPW4YOsm2CfyuScdktM9KDnJXVHJsd/ZeRtst+dnBU3B3KKvt8bc+bs5syJjyptAHfqo7H+5Uhz+2blWBfwow==} dependencies: mdast-util-toc: 3.1.0 remark-slug: 5.1.2 dev: true /remark/14.0.2: resolution: {integrity: sha512-A3ARm2V4BgiRXaUo5K0dRvJ1lbogrbXnhkJRmD0yw092/Yl0kOCZt1k9ZeElEwkZsWGsMumz6qL5MfNJH9nOBA==} dependencies: '@types/mdast': 3.0.10 remark-parse: 10.0.1 remark-stringify: 10.0.2 unified: 10.1.2 transitivePeerDependencies: - supports-color dev: true /remark/9.0.0: resolution: {integrity: sha512-amw8rGdD5lHbMEakiEsllmkdBP+/KpjW/PRK6NSGPZKCQowh0BT4IWXDAkRMyG3SB9dKPXWMviFjNusXzXNn3A==} dependencies: remark-parse: 5.0.0 remark-stringify: 5.0.0 unified: 6.2.0 dev: true /remove-bom-buffer/3.0.0: resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 is-utf8: 0.2.1 dev: true /remove-bom-stream/1.2.0: resolution: {integrity: sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==} engines: {node: '>= 0.10'} dependencies: remove-bom-buffer: 3.0.0 safe-buffer: 5.2.1 through2: 2.0.5 dev: true /remove-trailing-separator/1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} dev: true /repeat-element/1.1.4: resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} engines: {node: '>=0.10.0'} dev: true /repeat-string/1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} dev: true /replace-ext/1.0.0: resolution: {integrity: sha512-vuNYXC7gG7IeVNBC1xUllqCcZKRbJoSPOBhnTEcAIiKCsbuef6zO3F0Rve3isPMMoNoQRWjQwbAgAjHUHniyEA==} engines: {node: '>= 0.10'} dev: true /replace-ext/1.0.1: resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} engines: {node: '>= 0.10'} dev: true /request-progress/3.0.0: resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} dependencies: throttleit: 1.0.0 dev: true /request/2.88.2: resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} engines: {node: '>= 6'} deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 dependencies: aws-sign2: 0.7.0 aws4: 1.11.0 caseless: 0.12.0 combined-stream: 1.0.8 extend: 3.0.2 forever-agent: 0.6.1 form-data: 2.3.3 har-validator: 5.1.5 http-signature: 1.2.0 is-typedarray: 1.0.0 isstream: 0.1.2 json-stringify-safe: 5.0.1 mime-types: 2.1.35 oauth-sign: 0.9.0 performance-now: 2.1.0 qs: 6.5.3 safe-buffer: 5.2.1 tough-cookie: 2.5.0 tunnel-agent: 0.6.0 uuid: 3.4.0 dev: true /require-directory/2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} dev: true /require-from-string/2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} dev: true /require-main-filename/2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true /requires-port/1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true /resolve-alpn/1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: true /resolve-cwd/3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: true /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true /resolve-from/5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} dev: true /resolve-global/1.0.0: resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} engines: {node: '>=8'} dependencies: global-dirs: 0.1.1 dev: true /resolve-options/1.1.0: resolution: {integrity: sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==} engines: {node: '>= 0.10'} dependencies: value-or-function: 3.0.0 dev: true /resolve-url/0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated dev: true /resolve.exports/1.1.0: resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} engines: {node: '>=10'} dev: true /resolve/1.1.7: resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} dev: true /resolve/1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: is-core-module: 2.10.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true /responselike/2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} dependencies: lowercase-keys: 2.0.0 dev: true /restore-cursor/3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 dev: true /ret/0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} dev: true /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true /rfdc/1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} dev: true /rimraf/2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: glob: 7.2.3 dev: true /rimraf/3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true /robust-predicates/3.0.1: resolution: {integrity: sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==} /rollup/2.78.1: resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 dev: true /rollup/2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 /rsvp/4.8.5: resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} engines: {node: 6.* || >= 7.*} dev: true /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true /rw/1.3.3: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} /rxjs/7.5.6: resolution: {integrity: sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==} dependencies: tslib: 2.4.0 dev: true /sade/1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} dependencies: mri: 1.2.0 dev: true /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true /safe-json-parse/1.0.1: resolution: {integrity: sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A==} dev: true /safe-regex/1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} dependencies: ret: 0.1.15 dev: true /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} /sane/4.1.0: resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==} engines: {node: 6.* || 8.* || >= 10.*} deprecated: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added hasBin: true dependencies: '@cnakazawa/watch': 1.0.4 anymatch: 2.0.0 capture-exit: 2.0.0 exec-sh: 0.3.6 execa: 1.0.0 fb-watchman: 2.0.2 micromatch: 3.1.10 minimist: 1.2.6 walker: 1.0.8 transitivePeerDependencies: - supports-color dev: true /saxes/5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} dependencies: xmlchars: 2.2.0 dev: true /saxes/6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} dependencies: xmlchars: 2.2.0 dev: true /section-matter/1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} dependencies: extend-shallow: 2.0.1 kind-of: 6.0.3 dev: true /semver/5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: true /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true dev: true /semver/7.3.7: resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 dev: true /send/0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} dependencies: debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 encodeurl: 1.0.2 escape-html: 1.0.3 etag: 1.8.1 fresh: 0.5.2 http-errors: 2.0.0 mime: 1.6.0 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 statuses: 2.0.1 transitivePeerDependencies: - supports-color dev: true /serve-static/1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 parseurl: 1.3.3 send: 0.18.0 transitivePeerDependencies: - supports-color dev: true /set-blocking/2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true /set-value/2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} dependencies: extend-shallow: 2.0.1 is-extendable: 0.1.1 is-plain-object: 2.0.4 split-string: 3.1.0 dev: true /setprototypeof/1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: true /shebang-command/1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 dev: true /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true /shebang-regex/1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} dev: true /shebang-regex/3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true /shell-quote/1.7.3: resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} dev: true /shellwords/0.1.1: resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} dev: true optional: true /shiki/0.11.1: resolution: {integrity: sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==} dependencies: jsonc-parser: 3.2.0 vscode-oniguruma: 1.6.2 vscode-textmate: 6.0.0 dev: true /side-channel/1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 get-intrinsic: 1.1.3 object-inspect: 1.12.2 dev: true /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true /sirv/2.0.2: resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==} engines: {node: '>= 10'} dependencies: '@polka/url': 1.0.0-next.21 mrmime: 1.0.1 totalist: 3.0.0 dev: true /sisteransi/1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true /slash/3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} dev: true /slash/4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} dev: true /slice-ansi/3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 dev: true /slice-ansi/4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 dev: true /slice-ansi/5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} dependencies: ansi-styles: 6.1.1 is-fullwidth-code-point: 4.0.0 dev: true /smart-buffer/4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} dev: true /snapdragon-node/2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} dependencies: define-property: 1.0.0 isobject: 3.0.1 snapdragon-util: 3.0.1 dev: true /snapdragon-util/3.0.1: resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true /snapdragon/0.8.2: resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} engines: {node: '>=0.10.0'} dependencies: base: 0.11.2 debug: 2.6.9 define-property: 0.2.5 extend-shallow: 2.0.1 map-cache: 0.2.2 source-map: 0.5.7 source-map-resolve: 0.5.3 use: 3.1.1 transitivePeerDependencies: - supports-color dev: true /socks-proxy-agent/5.0.1: resolution: {integrity: sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==} engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 debug: 4.3.4 socks: 2.7.0 transitivePeerDependencies: - supports-color dev: true /socks/2.7.0: resolution: {integrity: sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==} engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} dependencies: ip: 2.0.0 smart-buffer: 4.2.0 dev: true /source-map-js/1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} dev: true /source-map-resolve/0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated dependencies: atob: 2.1.2 decode-uri-component: 0.2.0 resolve-url: 0.2.1 source-map-url: 0.4.1 urix: 0.1.0 dev: true /source-map-support/0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true /source-map-url/0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} deprecated: See https://github.com/lydell/source-map-url#deprecated dev: true /source-map/0.1.43: resolution: {integrity: sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==} engines: {node: '>=0.8.0'} requiresBuild: true dependencies: amdefine: 1.0.1 dev: true optional: true /source-map/0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true /source-map/0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} dev: true /sourcemap-codec/1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} dev: true /space-separated-tokens/1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} dev: true /spawn-command/0.0.2-1: resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} dev: true /spdx-correct/3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.12 dev: true /spdx-exceptions/2.3.0: resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: true /spdx-expression-parse/3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.12 dev: true /spdx-license-ids/3.0.12: resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: true /split-on-first/1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} engines: {node: '>=6'} dev: true /split-string/3.1.0: resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} engines: {node: '>=0.10.0'} dependencies: extend-shallow: 3.0.2 dev: true /split/0.3.3: resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} dependencies: through: 2.3.8 dev: true /split/1.0.1: resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} dependencies: through: 2.3.8 dev: true /split2/3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: readable-stream: 3.6.0 dev: true /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} hasBin: true dependencies: asn1: 0.2.6 assert-plus: 1.0.0 bcrypt-pbkdf: 1.0.2 dashdash: 1.14.1 ecc-jsbn: 0.1.2 getpass: 0.1.7 jsbn: 0.1.1 safer-buffer: 2.1.2 tweetnacl: 0.14.5 dev: true /ssim.js/3.5.0: resolution: {integrity: sha512-Aj6Jl2z6oDmgYFFbQqK7fght19bXdOxY7Tj03nF+03M9gCBAjeIiO8/PlEGMfKDwYpw4q6iBqVq2YuREorGg/g==} dev: true /stack-utils/2.0.5: resolution: {integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 dev: true /standard-version/9.5.0: resolution: {integrity: sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==} engines: {node: '>=10'} hasBin: true dependencies: chalk: 2.4.2 conventional-changelog: 3.1.25 conventional-changelog-config-spec: 2.1.0 conventional-changelog-conventionalcommits: 4.6.3 conventional-recommended-bump: 6.1.0 detect-indent: 6.1.0 detect-newline: 3.1.0 dotgitignore: 2.1.0 figures: 3.2.0 find-up: 5.0.0 git-semver-tags: 4.1.1 semver: 7.3.7 stringify-package: 1.0.1 yargs: 16.2.0 dev: true /start-server-and-test/1.14.0: resolution: {integrity: sha512-on5ELuxO2K0t8EmNj9MtVlFqwBMxfWOhu4U7uZD1xccVpFlOQKR93CSe0u98iQzfNxRyaNTb/CdadbNllplTsw==} engines: {node: '>=6'} hasBin: true dependencies: bluebird: 3.7.2 check-more-types: 2.24.0 debug: 4.3.2 execa: 5.1.1 lazy-ass: 1.6.0 ps-tree: 1.2.0 wait-on: 6.0.0_debug@4.3.2 transitivePeerDependencies: - supports-color dev: true /state-toggle/1.0.3: resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} dev: true /static-extend/0.1.2: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} engines: {node: '>=0.10.0'} dependencies: define-property: 0.2.5 object-copy: 0.1.0 dev: true /statuses/2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} dev: true /stream-array/1.1.2: resolution: {integrity: sha512-1yWdVsMEm/btiMa2YyHiC3mDrtAqlmNNaDRylx2F7KHhm3C4tA6kSR2V9mpeMthv+ujvbl8Kamyh5xaHHdFvyQ==} engines: {node: '>= 0.8'} dependencies: readable-stream: 2.1.5 dev: true /stream-combiner/0.0.4: resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} dependencies: duplexer: 0.1.2 dev: true /stream-combiner2/1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 readable-stream: 2.3.7 dev: true /stream-shift/1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} dev: true /strict-uri-encode/2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} dev: true /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} dev: true /string-length/4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 dev: true /string-template/0.2.1: resolution: {integrity: sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==} dev: true /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 dev: true /string-width/5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.0.1 dev: true /string_decoder/0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} dev: true /string_decoder/1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: true /stringify-entities/1.3.2: resolution: {integrity: sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==} dependencies: character-entities-html4: 1.1.4 character-entities-legacy: 1.1.4 is-alphanumerical: 1.0.4 is-hexadecimal: 1.0.4 dev: true /stringify-package/1.0.1: resolution: {integrity: sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==} dev: true /strip-ansi/3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true /strip-ansi/6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 dev: true /strip-ansi/7.0.1: resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 dev: true /strip-bom-string/1.0.0: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} engines: {node: '>=0.10.0'} dev: true /strip-bom/3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} dev: true /strip-bom/4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} dev: true /strip-eof/1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} dev: true /strip-final-newline/2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: true /strip-final-newline/3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} dev: true /strip-indent/3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true /strip-json-comments/2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} dev: true /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true /strip-literal/0.4.2: resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==} dependencies: acorn: 8.8.0 dev: true /stylis/4.1.2: resolution: {integrity: sha512-Nn2CCrG2ZaFziDxaZPN43CXqn+j7tcdjPFCkRBkFue8QYXC2HdEwnw5TCBo4yQZ2WxKYeSi0fdoOrtEqgDrXbA==} /subarg/1.0.0: resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} dependencies: minimist: 1.2.6 dev: true /supports-color/2.0.0: resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} engines: {node: '>=0.8.0'} dev: true /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true /supports-color/6.1.0: resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} engines: {node: '>=6'} dependencies: has-flag: 3.0.0 dev: true /supports-color/7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 dev: true /supports-color/8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: true /supports-hyperlinks/2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 supports-color: 7.2.0 dev: true /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true /symbol-tree/3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true /sync-request/6.1.0: resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} engines: {node: '>=8.0.0'} dependencies: http-response-object: 3.0.2 sync-rpc: 1.3.6 then-request: 6.0.2 dev: true /sync-rpc/1.3.6: resolution: {integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==} dependencies: get-port: 3.2.0 dev: true /term-img/4.1.0: resolution: {integrity: sha512-DFpBhaF5j+2f7kheKFc1ajsAUUDGOaNPpKPtiIMxlbfud6mvfFZuWGnTRpaujUa5J7yl6cIw/h6nyr4mSsENPg==} engines: {node: '>=8'} dependencies: ansi-escapes: 4.3.2 iterm2-version: 4.2.0 dev: true /terminal-link/2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} dependencies: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 dev: true /test-exclude/6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 dev: true /text-extensions/1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} dev: true /text-table/0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true /then-request/6.0.2: resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==} engines: {node: '>=6.0.0'} dependencies: '@types/concat-stream': 1.6.1 '@types/form-data': 0.0.33 '@types/node': 8.10.66 '@types/qs': 6.9.7 caseless: 0.12.0 concat-stream: 1.6.2 form-data: 2.3.3 http-basic: 8.1.3 http-response-object: 3.0.2 promise: 8.2.0 qs: 6.11.0 dev: true /throat/5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} dev: true /throttleit/1.0.0: resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==} dev: true /through/2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true /through2-filter/3.0.0: resolution: {integrity: sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==} dependencies: through2: 2.0.5 xtend: 4.0.2 dev: true /through2/2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.7 xtend: 4.0.2 dev: true /through2/4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.0 dev: true /tiny-lr/1.1.1: resolution: {integrity: sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==} dependencies: body: 5.1.0 debug: 3.2.7 faye-websocket: 0.10.0 livereload-js: 2.4.0 object-assign: 4.1.1 qs: 6.11.0 transitivePeerDependencies: - supports-color dev: true /tinybench/2.1.5: resolution: {integrity: sha512-ak+PZZEuH3mw6CCFOgf5S90YH0MARnZNhxjhjguAmoJimEMAJuNip/rJRd6/wyylHItomVpKTzZk9zrhTrQCoQ==} dev: true /tinypool/0.2.4: resolution: {integrity: sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==} engines: {node: '>=14.0.0'} dev: true /tinypool/0.3.0: resolution: {integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==} engines: {node: '>=14.0.0'} dev: true /tinyspy/1.0.2: resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==} engines: {node: '>=14.0.0'} dev: true /tmp/0.2.1: resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} engines: {node: '>=8.17.0'} dependencies: rimraf: 3.0.2 dev: true /tmpl/1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true /to-absolute-glob/2.0.2: resolution: {integrity: sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==} engines: {node: '>=0.10.0'} dependencies: is-absolute: 1.0.0 is-negated-glob: 1.0.0 dev: true /to-fast-properties/2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} dev: true /to-object-path/0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true /to-regex-range/2.1.1: resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} engines: {node: '>=0.10.0'} dependencies: is-number: 3.0.0 repeat-string: 1.6.1 dev: true /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true /to-regex/3.0.2: resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} engines: {node: '>=0.10.0'} dependencies: define-property: 2.0.2 extend-shallow: 3.0.2 regex-not: 1.0.2 safe-regex: 1.1.0 dev: true /to-through/2.0.0: resolution: {integrity: sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==} engines: {node: '>= 0.10'} dependencies: through2: 2.0.5 dev: true /toidentifier/1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} dev: true /totalist/3.0.0: resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} engines: {node: '>=6'} dev: true /tough-cookie/2.5.0: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} engines: {node: '>=0.8'} dependencies: psl: 1.9.0 punycode: 2.1.1 dev: true /tough-cookie/4.1.2: resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} engines: {node: '>=6'} dependencies: psl: 1.9.0 punycode: 2.1.1 universalify: 0.2.0 url-parse: 1.5.10 dev: true /tr46/0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true /tr46/2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} dependencies: punycode: 2.1.1 dev: true /tr46/3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} dependencies: punycode: 2.1.1 dev: true /tree-kill/1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true dev: true /trim-lines/1.1.3: resolution: {integrity: sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA==} dev: true /trim-newlines/3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} dev: true /trim-trailing-lines/1.1.4: resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==} dev: true /trim/0.0.1: resolution: {integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==} dev: true /trough/1.0.5: resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} dev: true /trough/2.1.0: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: true /ts-node/10.9.1_jrs6fgrkrfl5zdawlcdiuhuotq: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' '@types/node': '*' typescript: '>=2.7' peerDependenciesMeta: '@swc/core': optional: true '@swc/wasm': optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 '@types/node': 18.8.1 acorn: 8.8.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 typescript: 4.8.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true /ts-node/10.9.1_sqjhzn5m3vxyw66a2xhtc43hby: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' '@types/node': '*' typescript: '>=2.7' peerDependenciesMeta: '@swc/core': optional: true '@swc/wasm': optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 '@types/node': 14.18.29 acorn: 8.8.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 typescript: 4.8.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true /ts-node/10.9.1_wpuvd23gr7ieg6cvyhaoiu3d3a: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' '@types/node': '*' typescript: '>=2.7' peerDependenciesMeta: '@swc/core': optional: true '@swc/wasm': optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 '@types/node': 18.8.1 acorn: 8.8.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 typescript: 4.8.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true /tslib/2.4.0: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} dev: true /tsutils/3.21.0_typescript@4.8.3: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 typescript: 4.8.3 dev: true /tsutils/3.21.0_typescript@4.8.4: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 typescript: 4.8.4 dev: true /tunnel-agent/0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: safe-buffer: 5.2.1 dev: true /tunnel/0.0.6: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} dev: true /tweetnacl/0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} dev: true /type-check/0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 dev: true /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true /type-detect/4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} dev: true /type-fest/0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} dev: true /type-fest/0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true /type-fest/0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} dev: true /type-fest/0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} dev: true /type-fest/0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} dev: true /type-is/1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} dependencies: media-typer: 0.3.0 mime-types: 2.1.35 dev: true /typedarray-to-buffer/3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 dev: true /typedarray/0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true /typescript/4.8.3: resolution: {integrity: sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==} engines: {node: '>=4.2.0'} hasBin: true dev: true /typescript/4.8.4: resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} engines: {node: '>=4.2.0'} hasBin: true dev: true /uc.micro/1.0.6: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} dev: true /uglify-js/3.17.1: resolution: {integrity: sha512-+juFBsLLw7AqMaqJ0GFvlsGZwdQfI2ooKQB39PSBgMnMakcFosi9O8jCwE+2/2nMNcc0z63r9mwjoDG8zr+q0Q==} engines: {node: '>=0.8.0'} hasBin: true requiresBuild: true dev: true optional: true /unc-path-regex/0.1.2: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} engines: {node: '>=0.10.0'} dev: true /underscore/1.1.7: resolution: {integrity: sha512-w4QtCHoLBXw1mjofIDoMyexaEdWGMedWNDhlWTtT1V1lCRqi65Pnoygkh6+WRdr+Bm8ldkBNkNeCsXGMlQS9HQ==} dev: true /unherit/1.1.3: resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} dependencies: inherits: 2.0.4 xtend: 4.0.2 dev: true /unicode-canonical-property-names-ecmascript/2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} dev: true /unicode-match-property-ecmascript/2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} dependencies: unicode-canonical-property-names-ecmascript: 2.0.0 unicode-property-aliases-ecmascript: 2.1.0 dev: true /unicode-match-property-value-ecmascript/2.0.0: resolution: {integrity: sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==} engines: {node: '>=4'} dev: true /unicode-property-aliases-ecmascript/2.1.0: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} dev: true /unified/10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} dependencies: '@types/unist': 2.0.6 bail: 2.0.2 extend: 3.0.2 is-buffer: 2.0.5 is-plain-obj: 4.1.0 trough: 2.1.0 vfile: 5.3.5 dev: true /unified/6.2.0: resolution: {integrity: sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==} dependencies: '@types/unist': 2.0.6 bail: 1.0.5 extend: 3.0.2 is-plain-obj: 1.1.0 trough: 1.0.5 vfile: 2.3.0 x-is-string: 0.1.0 dev: true /union-value/1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} dependencies: arr-union: 3.1.0 get-value: 2.0.6 is-extendable: 0.1.1 set-value: 2.0.1 dev: true /unique-stream/2.3.1: resolution: {integrity: sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==} dependencies: json-stable-stringify-without-jsonify: 1.0.1 through2-filter: 3.0.0 dev: true /unist-builder/1.0.4: resolution: {integrity: sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg==} dependencies: object-assign: 4.1.1 dev: true /unist-util-flatmap/1.0.0: resolution: {integrity: sha512-IG32jcKJlhARCYT2LsYPJWdoXYkzz3ESAdl1aa2hn9Auh+cgUmU6wgkII4yCc/1GgeWibRdELdCZh/p3QKQ1dQ==} dev: true /unist-util-generated/1.1.6: resolution: {integrity: sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==} dev: true /unist-util-is/2.1.3: resolution: {integrity: sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA==} dev: true /unist-util-is/3.0.0: resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==} dev: true /unist-util-is/5.1.1: resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==} dev: true /unist-util-position/3.1.0: resolution: {integrity: sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==} dev: true /unist-util-remove-position/1.1.4: resolution: {integrity: sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==} dependencies: unist-util-visit: 1.4.1 dev: true /unist-util-stringify-position/1.1.2: resolution: {integrity: sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==} dev: true /unist-util-stringify-position/2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} dependencies: '@types/unist': 2.0.6 dev: true /unist-util-stringify-position/3.0.2: resolution: {integrity: sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==} dependencies: '@types/unist': 2.0.6 dev: true /unist-util-visit-parents/2.1.2: resolution: {integrity: sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==} dependencies: unist-util-is: 3.0.0 dev: true /unist-util-visit-parents/5.1.1: resolution: {integrity: sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==} dependencies: '@types/unist': 2.0.6 unist-util-is: 5.1.1 dev: true /unist-util-visit/1.4.1: resolution: {integrity: sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==} dependencies: unist-util-visit-parents: 2.1.2 dev: true /unist-util-visit/4.1.1: resolution: {integrity: sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==} dependencies: '@types/unist': 2.0.6 unist-util-is: 5.1.1 unist-util-visit-parents: 5.1.1 dev: true /universalify/0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} dev: true /universalify/0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} dev: true /universalify/2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} dev: true /unpipe/1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} dev: true /unset-value/1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} dependencies: has-value: 0.3.1 isobject: 3.0.1 dev: true /untildify/4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} dev: true /update-browserslist-db/1.0.9_browserslist@4.21.4: resolution: {integrity: sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: browserslist: 4.21.4 escalade: 3.1.1 picocolors: 1.0.0 dev: true /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 dev: true /urix/0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} deprecated: Please see https://github.com/lydell/urix#deprecated dev: true /url-parse/1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: querystringify: 2.2.0 requires-port: 1.0.0 dev: true /use/3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} dev: true /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true /utils-merge/1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} dev: true /uuid/3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true dev: true /uuid/8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: true /uuid/9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true dev: false /uvu/0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} hasBin: true dependencies: dequal: 2.0.3 diff: 5.1.0 kleur: 4.1.5 sade: 1.8.1 dev: true /v8-compile-cache-lib/3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true /v8-to-istanbul/7.1.2: resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==} engines: {node: '>=10.10.0'} dependencies: '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.8.0 source-map: 0.7.4 dev: true /v8-to-istanbul/9.0.1: resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} engines: {node: '>=10.12.0'} dependencies: '@jridgewell/trace-mapping': 0.3.15 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.8.0 dev: true /validate-npm-package-license/3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.1.1 spdx-expression-parse: 3.0.1 dev: true /value-or-function/3.0.0: resolution: {integrity: sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==} engines: {node: '>= 0.10'} dev: true /vary/1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} dev: true /verror/1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} dependencies: assert-plus: 1.0.0 core-util-is: 1.0.2 extsprintf: 1.3.0 dev: true /vfile-location/2.0.6: resolution: {integrity: sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==} dev: true /vfile-message/1.1.1: resolution: {integrity: sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==} dependencies: unist-util-stringify-position: 1.1.2 dev: true /vfile-message/2.0.4: resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} dependencies: '@types/unist': 2.0.6 unist-util-stringify-position: 2.0.3 dev: true /vfile-message/3.1.2: resolution: {integrity: sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==} dependencies: '@types/unist': 2.0.6 unist-util-stringify-position: 3.0.2 dev: true /vfile-reporter/6.0.2: resolution: {integrity: sha512-GN2bH2gs4eLnw/4jPSgfBjo+XCuvnX9elHICJZjVD4+NM0nsUrMTvdjGY5Sc/XG69XVTgLwj7hknQVc6M9FukA==} dependencies: repeat-string: 1.6.1 string-width: 4.2.3 supports-color: 6.1.0 unist-util-stringify-position: 2.0.3 vfile-sort: 2.2.2 vfile-statistics: 1.1.4 dev: true /vfile-sort/2.2.2: resolution: {integrity: sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==} dev: true /vfile-statistics/1.1.4: resolution: {integrity: sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==} dev: true /vfile/2.3.0: resolution: {integrity: sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==} dependencies: is-buffer: 1.1.6 replace-ext: 1.0.0 unist-util-stringify-position: 1.1.2 vfile-message: 1.1.1 dev: true /vfile/4.2.1: resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} dependencies: '@types/unist': 2.0.6 is-buffer: 2.0.5 unist-util-stringify-position: 2.0.3 vfile-message: 2.0.4 dev: true /vfile/5.3.5: resolution: {integrity: sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ==} dependencies: '@types/unist': 2.0.6 is-buffer: 2.0.5 unist-util-stringify-position: 3.0.2 vfile-message: 3.1.2 dev: true /vinyl-fs/3.0.3: resolution: {integrity: sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==} engines: {node: '>= 0.10'} dependencies: fs-mkdirp-stream: 1.0.0 glob-stream: 6.1.0 graceful-fs: 4.2.10 is-valid-glob: 1.0.0 lazystream: 1.0.1 lead: 1.0.0 object.assign: 4.1.4 pumpify: 1.5.1 readable-stream: 2.3.7 remove-bom-buffer: 3.0.0 remove-bom-stream: 1.2.0 resolve-options: 1.1.0 through2: 2.0.5 to-through: 2.0.0 value-or-function: 3.0.0 vinyl: 2.2.1 vinyl-sourcemap: 1.1.0 dev: true /vinyl-sourcemap/1.1.0: resolution: {integrity: sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==} engines: {node: '>= 0.10'} dependencies: append-buffer: 1.0.2 convert-source-map: 1.8.0 graceful-fs: 4.2.10 normalize-path: 2.1.1 now-and-later: 2.0.1 remove-bom-buffer: 3.0.0 vinyl: 2.2.1 dev: true /vinyl/2.2.1: resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==} engines: {node: '>= 0.10'} dependencies: clone: 2.1.2 clone-buffer: 1.0.0 clone-stats: 1.0.0 cloneable-readable: 1.1.3 remove-trailing-separator: 1.1.0 replace-ext: 1.0.1 dev: true /vite-plugin-md/0.20.4_ucycamvpk6tvs7aryt7d45qco4: resolution: {integrity: sha512-W3Z59/ROS2X6OIwPwV2PjE+QkfW0UVGxyf3Z2JR0OLqGJ+Iy2SGA503m/vmATJv+C3DjeU8Oy8diQx1R+IyRwQ==} peerDependencies: '@rollup/pluginutils': ^4.2.1 rollup: ^2.77.0 dependencies: '@rollup/pluginutils': 4.2.1 '@yankeeinlondon/builder-api': 0.4.1_owgwhktbfueopkpwpts4jzdaqq '@yankeeinlondon/happy-wrapper': 2.6.0_dnicfi6n7tywwajisjusxhbdzm gray-matter: 4.0.3 markdown-it: 13.0.1 rollup: 2.79.1 source-map-js: 1.0.2 transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/browser' - '@vitest/ui' - c8 - fp-ts - happy-dom - inferred-types - jsdom - less - sass - stylus - supports-color - terser dev: true /vite/3.1.3: resolution: {integrity: sha512-/3XWiktaopByM5bd8dqvHxRt5EEgRikevnnrpND0gRfNkrMrPaGGexhtLCzv15RcCMtV2CLw+BPas8YFeSG0KA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: less: '*' sass: '*' stylus: '*' terser: ^5.4.0 peerDependenciesMeta: less: optional: true sass: optional: true stylus: optional: true terser: optional: true dependencies: esbuild: 0.15.10 postcss: 8.4.16 resolve: 1.22.1 rollup: 2.78.1 optionalDependencies: fsevents: 2.3.2 dev: true /vite/3.1.4: resolution: {integrity: sha512-JoQI08aBjY9lycL7jcEq4p9o1xUjq5aRvdH4KWaXtkSx7e7RpAh9D3IjzDWRD4Fg44LS3oDAIOG/Kq1L+82psA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: less: '*' sass: '*' stylus: '*' terser: ^5.4.0 peerDependenciesMeta: less: optional: true sass: optional: true stylus: optional: true terser: optional: true dependencies: esbuild: 0.15.10 postcss: 8.4.16 resolve: 1.22.1 rollup: 2.78.1 optionalDependencies: fsevents: 2.3.2 dev: true /vitepress-plugin-mermaid/2.0.8_ml5vzxpqibyfsid5kdls3ch6aa: resolution: {integrity: sha512-ywWxTeg9kMv7ZPf/igCBF4ZHhWZAyRtbPnA12ICQuNK2AMp7r5IHOfnuX1EJQf8gNdsh8bcvvSvm8Ll92fdOTw==} peerDependencies: mermaid: ^8.0.0 || ^9.0.0 vite-plugin-md: ^0.20.4 vitepress: ^0.21.6 || ^1.0.0 || ^1.0.0-alpha dependencies: mermaid: 9.1.7 vite-plugin-md: 0.20.4_ucycamvpk6tvs7aryt7d45qco4 vitepress: 1.0.0-alpha.19_tbpndr44ulefs3hehwpi2mkf2y dev: true /vitepress-plugin-search/1.0.4-alpha.11_nvmgxcm7cozn4csefdube5au3y: resolution: {integrity: sha512-fKJIpPj6QGQeXda31Dx5f9DtCYnPVHKQVsOUpnJOzahWHPPgGofslwwvwaeRMWIGvpslxi/m4RVK6C+ydqKukA==} engines: {node: ^14.13.1 || ^16.7.0 || >=18} peerDependencies: vite: 2 || 3 vitepress: ^1.0.0-alpha.13 vue: '3' dependencies: vite: 3.1.4 vitepress: 1.0.0-alpha.19_tbpndr44ulefs3hehwpi2mkf2y vue: 3.2.40 dev: true /vitepress/1.0.0-alpha.19_tbpndr44ulefs3hehwpi2mkf2y: resolution: {integrity: sha512-0FIUZB6JGXio7SELDDUkyQoMjmO/UAXqDXmznzOsBKsdZ3EHlyb6NaP/V/BMfN5S8+GV88ScbIL0jd/pDzkLBg==} hasBin: true dependencies: '@docsearch/css': 3.2.1 '@docsearch/js': 3.2.1_tbpndr44ulefs3hehwpi2mkf2y '@vitejs/plugin-vue': 3.1.2_vite@3.1.4+vue@3.2.40 '@vue/devtools-api': 6.4.3 '@vueuse/core': 9.3.0_vue@3.2.40 body-scroll-lock: 4.0.0-beta.0 shiki: 0.11.1 vite: 3.1.4 vue: 3.2.40 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' - '@vue/composition-api' - less - react - react-dom - sass - stylus - terser dev: true /vitest/0.19.1_dnicfi6n7tywwajisjusxhbdzm: resolution: {integrity: sha512-E/ZXpFMUahn731wzhMBNzWRp4mGgiZFT0xdHa32cbNO0CSaHpE9hTfteEU247Gi2Dula8uXo5vvrNB6dtszmQA==} engines: {node: '>=v14.16.0'} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@vitest/browser': '*' '@vitest/ui': '*' c8: '*' happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true '@vitest/browser': optional: true '@vitest/ui': optional: true c8: optional: true happy-dom: optional: true jsdom: optional: true dependencies: '@types/chai': 4.3.3 '@types/chai-subset': 1.3.3 '@types/node': 18.8.1 '@vitest/ui': 0.23.4 chai: 4.3.6 debug: 4.3.4 happy-dom: 6.0.4 jsdom: 20.0.1 local-pkg: 0.4.2 tinypool: 0.2.4 tinyspy: 1.0.2 vite: 3.1.4 transitivePeerDependencies: - less - sass - stylus - supports-color - terser dev: true /vitest/0.23.4_dnicfi6n7tywwajisjusxhbdzm: resolution: {integrity: sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==} engines: {node: '>=v14.16.0'} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@vitest/browser': '*' '@vitest/ui': '*' happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true '@vitest/browser': optional: true '@vitest/ui': optional: true happy-dom: optional: true jsdom: optional: true dependencies: '@types/chai': 4.3.3 '@types/chai-subset': 1.3.3 '@types/node': 18.7.21 '@vitest/ui': 0.23.4 chai: 4.3.6 debug: 4.3.4 happy-dom: 6.0.4 jsdom: 20.0.1 local-pkg: 0.4.2 strip-literal: 0.4.2 tinybench: 2.1.5 tinypool: 0.3.0 tinyspy: 1.0.2 vite: 3.1.3 transitivePeerDependencies: - less - sass - stylus - supports-color - terser dev: true /vm2/3.9.11: resolution: {integrity: sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==} engines: {node: '>=6.0'} hasBin: true dependencies: acorn: 8.8.0 acorn-walk: 8.2.0 dev: true /vscode-json-languageservice/4.2.1: resolution: {integrity: sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==} dependencies: jsonc-parser: 3.2.0 vscode-languageserver-textdocument: 1.0.7 vscode-languageserver-types: 3.17.2 vscode-nls: 5.2.0 vscode-uri: 3.0.6 dev: true /vscode-languageserver-textdocument/1.0.7: resolution: {integrity: sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg==} dev: true /vscode-languageserver-types/3.17.2: resolution: {integrity: sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==} dev: true /vscode-nls/5.2.0: resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} dev: true /vscode-oniguruma/1.6.2: resolution: {integrity: sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==} dev: true /vscode-textmate/6.0.0: resolution: {integrity: sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==} dev: true /vscode-uri/3.0.6: resolution: {integrity: sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ==} dev: true /vue-demi/0.13.11_vue@3.2.40: resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} engines: {node: '>=12'} hasBin: true requiresBuild: true peerDependencies: '@vue/composition-api': ^1.0.0-rc.1 vue: ^3.0.0-0 || ^2.6.0 peerDependenciesMeta: '@vue/composition-api': optional: true dependencies: vue: 3.2.40 dev: true /vue-template-compiler/2.7.10: resolution: {integrity: sha512-QO+8R9YRq1Gudm8ZMdo/lImZLJVUIAM8c07Vp84ojdDAf8HmPJc7XB556PcXV218k2AkKznsRz6xB5uOjAC4EQ==} dependencies: de-indent: 1.0.2 he: 1.2.0 dev: true /vue/3.2.40: resolution: {integrity: sha512-1mGHulzUbl2Nk3pfvI5aXYYyJUs1nm4kyvuz38u4xlQkLUn1i2R7nDbI4TufECmY8v1qNBHYy62bCaM+3cHP2A==} dependencies: '@vue/compiler-dom': 3.2.40 '@vue/compiler-sfc': 3.2.40 '@vue/runtime-dom': 3.2.40 '@vue/server-renderer': 3.2.40_vue@3.2.40 '@vue/shared': 3.2.40 dev: true /w3c-hr-time/1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} dependencies: browser-process-hrtime: 1.0.0 dev: true /w3c-xmlserializer/2.0.0: resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} engines: {node: '>=10'} dependencies: xml-name-validator: 3.0.0 dev: true /w3c-xmlserializer/3.0.0: resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} engines: {node: '>=12'} dependencies: xml-name-validator: 4.0.0 dev: true /wait-on/6.0.0_debug@4.3.2: resolution: {integrity: sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==} engines: {node: '>=10.0.0'} hasBin: true dependencies: axios: 0.21.4_debug@4.3.2 joi: 17.6.0 lodash: 4.17.21 minimist: 1.2.6 rxjs: 7.5.6 transitivePeerDependencies: - debug dev: true /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 dev: true /webdriver/7.16.11: resolution: {integrity: sha512-6nBOXae4xuBH4Nqvi/zvtwjnxSLTONBpxOiRJtQ68CYTYv5+w3m8CsaWy3HbK/0XXa++NYl62bDNn70OGEKb+Q==} engines: {node: '>=12.0.0'} dependencies: '@types/node': 16.11.59 '@wdio/config': 7.16.11 '@wdio/logger': 7.16.0 '@wdio/protocols': 7.16.7 '@wdio/types': 7.16.11 '@wdio/utils': 7.16.11 got: 11.8.5 ky: 0.28.7 lodash.merge: 4.6.2 dev: true /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true /webidl-conversions/5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} engines: {node: '>=8'} dev: true /webidl-conversions/6.1.0: resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} engines: {node: '>=10.4'} dev: true /webidl-conversions/7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} dev: true /websocket-driver/0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} engines: {node: '>=0.8.0'} dependencies: http-parser-js: 0.5.8 safe-buffer: 5.2.1 websocket-extensions: 0.1.4 dev: true /websocket-extensions/0.1.4: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} dev: true /whatwg-encoding/1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} dependencies: iconv-lite: 0.4.24 dev: true /whatwg-encoding/2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} dependencies: iconv-lite: 0.6.3 dev: true /whatwg-fetch/3.6.2: resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} dev: true /whatwg-mimetype/2.3.0: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} dev: true /whatwg-mimetype/3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} dev: true /whatwg-url/10.0.0: resolution: {integrity: sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==} engines: {node: '>=12'} dependencies: tr46: 3.0.0 webidl-conversions: 7.0.0 dev: true /whatwg-url/11.0.0: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} dependencies: tr46: 3.0.0 webidl-conversions: 7.0.0 dev: true /whatwg-url/5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 dev: true /whatwg-url/8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} engines: {node: '>=10'} dependencies: lodash: 4.17.21 tr46: 2.1.0 webidl-conversions: 6.1.0 dev: true /which-module/2.0.0: resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} dev: true /which/1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 dev: true /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 dev: true /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true /wrap-ansi/6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 dev: true /wrap-ansi/7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 dev: true /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true /write-file-atomic/3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 dev: true /write-file-atomic/4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 dev: true /ws/7.4.6: resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true dev: true /ws/8.5.0: resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true dev: true /ws/8.8.1: resolution: {integrity: sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true dev: true /ws/8.9.0: resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true dev: true /x-is-string/0.1.0: resolution: {integrity: sha512-GojqklwG8gpzOVEVki5KudKNoq7MbbjYZCbyWzEz7tyPA7eleiE0+ePwOWQQRb5fm86rD3S8Tc0tSFf3AOv50w==} dev: true /xml-name-validator/3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} dev: true /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} dev: true /xmlbuilder/15.1.1: resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} engines: {node: '>=8.0'} dev: true /xmlchars/2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true /xregexp/2.0.0: resolution: {integrity: sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==} dev: true /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true /y18n/4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} dev: true /yallist/3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} dev: true /yaml/2.1.1: resolution: {integrity: sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==} engines: {node: '>= 14'} dev: true /yargs-parser/18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 dev: true /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} dev: true /yargs-parser/21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} dev: true /yargs/15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} dependencies: cliui: 6.0.0 decamelize: 1.2.0 find-up: 4.1.0 get-caller-file: 2.0.5 require-directory: 2.1.1 require-main-filename: 2.0.0 set-blocking: 2.0.0 string-width: 4.2.3 which-module: 2.0.0 y18n: 4.0.3 yargs-parser: 18.1.3 dev: true /yargs/16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} dependencies: cliui: 7.0.4 escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 dev: true /yargs/17.4.1: resolution: {integrity: sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==} engines: {node: '>=12'} dependencies: cliui: 7.0.4 escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 dev: true /yargs/17.5.1: resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} engines: {node: '>=12'} dependencies: cliui: 7.0.4 escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 dev: true /yauzl/2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 dev: true /yn/3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} dev: true /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true /zwitch/2.0.2: resolution: {integrity: sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==} dev: true mermaid-js-mermaid-9bb0ed2/pnpm-workspace.yaml000066400000000000000000000001331433273745700215150ustar00rootroot00000000000000packages: # all packages in direct subdirs of packages/ - 'packages/*' # - 'tests/*' mermaid-js-mermaid-9bb0ed2/renovate.json000066400000000000000000000007521433273745700204100ustar00rootroot00000000000000{ "extends": [ "config:base", ":rebaseStalePrs", "group:allNonMajor", "schedule:earlyMondays", ":automergeMinor", ":automergeTesters", ":automergeLinters", ":automergeTypes", ":automergePatch" ], "packageRules": [ { "matchUpdateTypes": ["minor", "patch", "pin", "digest"], "automerge": true } ], "dependencyDashboard": true, "major": { "dependencyDashboardApproval": true }, "dependencyDashboardAutoclose": true } mermaid-js-mermaid-9bb0ed2/tests/000077500000000000000000000000001433273745700170305ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/tests/webpack/000077500000000000000000000000001433273745700204445ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/tests/webpack/package.json000066400000000000000000000007151433273745700227350ustar00rootroot00000000000000{ "name": "webpack", "version": "1.0.0", "description": "", "private": true, "module": "commonjs", "scripts": { "build": "webpack", "serve": "webpack serve" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "webpack": "^5.74.0", "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.11.1" }, "dependencies": { "mermaid": "workspace:*", "@mermaid-js/mermaid-mindmap": "workspace:*" } } mermaid-js-mermaid-9bb0ed2/tests/webpack/public/000077500000000000000000000000001433273745700217225ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/tests/webpack/public/index.html000066400000000000000000000003111433273745700237120ustar00rootroot00000000000000 Getting Started
mermaid-js-mermaid-9bb0ed2/tests/webpack/src/000077500000000000000000000000001433273745700212335ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/tests/webpack/src/index.js000066400000000000000000000016661433273745700227110ustar00rootroot00000000000000/* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable no-console */ const mermaid = require('mermaid'); import mindmap from '@mermaid-js/mermaid-mindmap'; const render = async (graph) => { const svg = await mermaid.renderAsync('dummy', graph); console.log(svg); document.getElementById('graphDiv').innerHTML = svg; }; const load = async () => { await mermaid.registerExternalDiagrams([mindmap]); await render('info'); setTimeout(async () => { await render(`mindmap root((mindmap)) Origins Long history ::icon(fa fa-book) Popularisation British popular psychology author Tony Buzan Research On effectivness
and features On Automatic creation Uses Creative techniques Strategic planning Argument mapping Tools Pen and paper Mermaid `); }, 2500); }; window.addEventListener('load', load, false); mermaid-js-mermaid-9bb0ed2/tests/webpack/webpack.config.js000066400000000000000000000003441433273745700236630ustar00rootroot00000000000000// eslint-disable-next-line @typescript-eslint/no-var-requires const path = require('path'); module.exports = { entry: './src/index.js', output: { filename: 'main.js', path: path.resolve(__dirname, 'dist'), }, }; mermaid-js-mermaid-9bb0ed2/tsconfig.json000066400000000000000000000245031433273745700204010ustar00rootroot00000000000000{ "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Projects */ // "incremental": true /* Enable incremental compilation */, // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ "target": "ES6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, "lib": [ "DOM", "ES2021" ] /* Specify a set of bundled library declaration files that describe the target runtime environment. */, // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ /* Modules */ "module": "es2022" /* Specify what module code is generated. */, // "rootDir": "./packages" /* Specify the root folder within your source files. */, "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, // "baseUrl": "./src" /* Specify the base directory to resolve non-relative module names. */, // "paths": {} /* Specify a set of entries that re-map imports to additional lookup locations. */, // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ // "typeRoots": [] /* Specify multiple folders that act like `./node_modules/@types`. */, "types": [ "vitest/globals" ] /* Specify type package names to be included without being referenced in a source file. */, // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ "resolveJsonModule": true /* Enable importing .json files */, // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ /* JavaScript Support */ "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */, // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ /* Emit */ "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, // "declarationMap": true, /* Create sourcemaps for d.ts files. */ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ // "outDir": "./dist" /* Specify an output folder for all emitted files. */, // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ // "newLine": "crlf", /* Set the newline character for emitting files. */ // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, /* Type Checking */ "strict": true /* Enable all strict type-checking options. */, // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, "include": ["./package.json"] } mermaid-js-mermaid-9bb0ed2/vdocs/000077500000000000000000000000001433273745700170045ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/vdocs/.vitepress/000077500000000000000000000000001433273745700211065ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/vdocs/.vitepress/config.ts000066400000000000000000000111011433273745700227150ustar00rootroot00000000000000import { version } from '../../package.json'; import ExampleMarkdown from './mermaid-markdown-all'; import { defineConfig } from 'vitepress'; import { update } from 'lodash'; export default defineConfig({ lang: 'en-US', title: 'Mermaid', description: 'Create diagrams and visualizations using text and code.', base: '/mermaid-docs/', lastUpdated: true, markdown: ExampleMarkdown, themeConfig: { nav: nav(), sidebar: { '/': sidebarAll(), // "/intro/": sidebarIntro(), // "/syntax/": sidebarSyntax(), // "/config": sidebarConfig(), // "/misc/": sidebarMisc(), // "/community/": sidebarCommunity(), }, // TODO: update to mermaid editLink: { pattern: 'https://github.com/emersonbottero/mermaid/edit/develop/vdocs/:path', text: 'Edit this page on GitHub', }, socialLinks: [{ icon: 'github', link: 'https://github.com/emersonbottero/mermaid' }], }, }); function nav() { return [ { text: 'Intro', link: '/intro/', activeMatch: '/intro/' }, { text: 'Configuration', link: '/config/Tutorials', activeMatch: '/config/', }, { text: 'Syntax', link: '/syntax/classDiagram', activeMatch: '/syntax/' }, { text: 'Misc', link: '/misc/integrations', activeMatch: '/misc/' }, { text: 'Community', link: '/community/n00b-overview', activeMatch: '/community/', }, { text: version, items: [ { text: 'Changelog', link: 'https://github.com/mermaid-js/mermaid/blob/develop/CHANGELOG.md', }, { text: 'Contributing', link: 'https://github.com/knsv/mermaid/issues/866', }, ], }, { text: '💻 Live Editor', link: '/edit', }, ]; } function sidebarAll() { return [ { text: '📔 Introduction', collapsible: true, items: [ { text: 'About Mermaid', link: '/intro/' }, { text: 'Deployment', link: '/intro/n00b-gettingStarted' }, { text: 'Syntax and Configuration', link: '/intro/n00b-syntaxReference', }, ], }, ...sidebarSyntax(), ...sidebarConfig(), ...sidebarMisc(), ...sidebarCommunity(), ]; } function sidebarSyntax() { return [ { text: '📊 Diagram Syntax', collapsible: true, items: [ { text: 'Flowchart', link: '/syntax/flowchart' }, { text: 'Sequence Diagram', link: '/syntax/sequenceDiagram' }, { text: 'Class Diagram', link: '/syntax/classDiagram' }, { text: 'State Diagram', link: '/syntax/stateDiagram' }, { text: 'Entity Relationship Diagram', link: '/syntax/entityRelationshipDiagram', }, { text: 'User Journey', link: '/syntax/userJourney' }, { text: 'Gantt', link: '/syntax/gantt' }, { text: 'Pie Chart', link: '/syntax/pie' }, { text: 'Requirement Diagram', link: '/syntax/requirementDiagram' }, { text: 'Gitgraph (Git) Diagram 🔥', link: '/syntax/gitGraph' }, { text: 'C4C Diagram (Context) Diagram 🦺⚠️', link: '/syntax/c4c' }, { text: 'Other Examples', link: '/syntax/examples' }, ], }, ]; } function sidebarConfig() { return [ { text: '⚙️ Deployment and Configuration', collapsible: true, items: [ { text: 'Tutorials', link: '/config/Tutorials' }, { text: 'API-Usage', link: '/config/usage' }, { text: 'Mermaid API Configuration', link: '/config/Setup' }, { text: 'Directives', link: '/config/directives' }, { text: 'Theming', link: '/config/theming' }, { text: 'Accessibility', link: '/config/accessibility' }, { text: 'Mermaid CLI', link: '/config/mermaidCLI' }, { text: 'Advanced usage', link: '/config/n00b-advanced' }, ], }, ]; } function sidebarMisc() { return [ { text: '📚 Misc', collapsible: true, items: [ { text: 'Use-Cases and Integrations', link: '/misc/integrations' }, { text: 'FAQ', link: '/misc/faq' }, ], }, ]; } function sidebarCommunity() { return [ { text: '🙌 Contributions and Community', collapsible: true, items: [ { text: 'Overview for Beginners', link: '/community/n00b-overview' }, { text: 'Development and Contribution', link: '/community/development', }, { text: 'Changelog', link: '/community/CHANGELOG' }, { text: 'Adding Diagrams', link: '/community/newDiagram' }, { text: 'Security', link: '/community/security' }, ], }, ]; } mermaid-js-mermaid-9bb0ed2/vdocs/.vitepress/mermaid-markdown-all.ts000066400000000000000000000021101433273745700254540ustar00rootroot00000000000000import { MermaidMarkdown } from 'vitepress-plugin-mermaid'; import shiki from 'shiki'; export default { config: async (md) => { MermaidMarkdown(md); const fence = md.renderer.rules.fence.bind(md.renderer.rules); const highlighter = await shiki.getHighlighter({ theme: 'material-palenight' }); md.renderer.rules.fence = (tokens, index, options, env, slf) => { const token = tokens[index]; if (token.info.trim() === 'mermaid-example') { let code = highlighter.codeToHtml(token.content, { lang: 'mermaid' }); code = code.replace('#2e3440ff', 'transparent'); code = code.replace('#292D3E', 'transparent'); code = '
Code:
' + '
mermaid' + code + '
'; // return code; return `${code}
Render:
`; } return fence(tokens, index, options, env, slf); }; }, }; mermaid-js-mermaid-9bb0ed2/vdocs/.vitepress/theme/000077500000000000000000000000001433273745700222105ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/vdocs/.vitepress/theme/custom.css000066400000000000000000000002201433273745700242260ustar00rootroot00000000000000/* Use this file to add custom css */ /* TODO: Remove after vitepress-plugin-search next release */ .search-item-icon { font-family: none; } mermaid-js-mermaid-9bb0ed2/vdocs/.vitepress/theme/index.ts000066400000000000000000000004151433273745700236670ustar00rootroot00000000000000import DefaultTheme from 'vitepress/theme'; import Mermaid from 'vitepress-plugin-mermaid/Mermaid.vue'; import './custom.css'; export default { ...DefaultTheme, enhanceApp({ app }) { // register global components app.component('Mermaid', Mermaid); }, }; mermaid-js-mermaid-9bb0ed2/vdocs/community/000077500000000000000000000000001433273745700210305ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/vdocs/community/CHANGELOG.md000066400000000000000000002073401433273745700226470ustar00rootroot00000000000000# Change Log All changes are in descending order, beginning with the newest (latest) version. ## Unreleased [Full Changelog](https://github.com/knsv/mermaid/compare/8.7.0...HEAD) ## 8.7.0 (2020-08-09) 🔖 [Release Notes](https://github.com/mermaid-js/mermaid/releases/tag/8.7.0) | 📜 [Full Changelog](https://github.com/mermaid-js/mermaid/compare/8.6.0...8.7.0) This version brings with it a system for [dynamic and integrated configuration of the diagram themes](../config/theming.md). The objective of this is to increase the customizability of mermaid and the ease of Styling, with the customization of themes through the `%%init%%` directive and `initialize` calls. Themes follow and build upon the Levels of Configuration and employ `directives` to modify and create custom configurations, as they were introduced in Version [8.6.0](../getting-started/8.6.0_docs.md). **These Theming Configurations, similar to directives, will also be made applicable in the Live-Editor, for easier styling.** ### Site-wide Themes Site-wide themes are still declared via `initialize` by site owners. Example of `Initalize` call setting `theme` to `base`: ```javascript mermaidAPI.initialize({ securityLevel: 'loose', theme: 'base', }); ``` **Notes**: Only site owners can use the `mermaidAPI.initialize` call, to set values. Site-Users will have to use `%%init%%` to modify or create the theme for their diagrams. ### Themes at the Local or Current Level When Generating a diagram using on a webpage that supports mermaid. It is also possible to override site-wide theme settings locally, for a specific diagram, using directives, as long as it is not prohibited by the `secure` array. **Following is an example:** ```mmd %%{init: {'theme':'base'}}%% graph TD a --> b ``` ### Making a Custom Theme with `themeVariables` The easiest way to make a custom theme is to start with the base theme, and just modify theme variables through `themeVariables`, via `%%init%%`. | Parameter | Description | Type | Required | Objects contained | | -------------- | ------------------------------------------------------------------ | ----- | -------- | ---------------------------------- | | themeVariables | Array containing objects, modifiable with the `%%init%%` directive | Array | Required | primaryColor, lineColor, textColor | Here is an example of overriding `primaryColor` and giving everything a different look, using `%%init%%`. ```mmd %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` **Notes:** Leaving it empty will set all variable values to default. ## 8.6.0 (2020-07-13) 🔖 [Release Notes](https://github.com/mermaid-js/mermaid/releases/tag/8.6.0) [Version 8.6.0](../getting-started/8.6.0_docs.md) introduces New Configuration Protocols and Directives and a Beta for the [New Mermaid Live-Editor](https://mermaid-js.github.io/docs/mermaid-live-editor-beta/#/edit/eyJjb2RlIjoiJSV7aW5pdDoge1widGhlbWVcIjogXCJmb3Jlc3RcIiwgXCJsb2dMZXZlbFwiOiAxIH19JSVcbmdyYXBoIFREXG4gIEFbQ2hyaXN0bWFzXSAtLT58R2V0IG1vbmV5fCBCKEdvIHNob3BwaW5nKVxuICBCIC0tPiBDe0xldCBtZSB0aGlua31cbiAgQyAtLT58T25lfCBEW0xhcHRvcF1cbiAgQyAtLT58VHdvfCBFW2lQaG9uZV1cbiAgQyAtLT58VGhyZWV8IEZbZmE6ZmEtY2FyIENhcl1cblx0XHQiLCJtZXJtYWlkIjp7InRoZW1lIjoiZGFyayJ9fQ) **With version 8.6.0 comes the release of directives for mermaid, a new system for modifying configurations, with the aim of establishing centralized, sane defaults and simple implementation.** Directives allow for a diagram specific overriding of config, as it has been discussed in Configurations. This allows site users to input modifications to config alongside diagram definitions, when creating diagrams on a private webpage that supports Mermaid. ## 8.5.0 (2020-04-11) 🔖 [Release Notes](https://github.com/mermaid-js/mermaid/releases/tag/untagged-31c93788afe260d914bb) This version introduces New diagrams! **New diagrams in 8.5** With version 8.5 there are some bug fixes and enhancements, plus a new diagram type, entity relationship diagrams. ![Image showing the new ER diagram type](./img/er.png) ## 8.2.0 (2019-07-17) 🏷️ [Tag](https://github.com/mermaid-js/mermaid/tree/8.2.0) Version 8.2.0, introduces a security improvement. A `securityLevel` configuration has to first be cleared, `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduced in version 8.2 as a security improvement, aimed at preventing malicious use. ### securityLevel | Parameter | Description | Type | Required | Values | | ------------- | --------------------------------- | ------ | -------- | ------------------------- | | securitylevel | Level of trust for parsed diagram | String | Required | Strict, Loose, antiscript | **Notes:** - **strict**: (**default**) tags in text are encoded, click functionality is disabled - **loose**: tags in text are allowed, click functionality is enabled - **antiscript**: html tags in text are allowed, (only script element is removed), click functionality is enabled ⚠️ **Note**: This changes the default behaviour of mermaid so that after upgrade to 8.2, if the `securityLevel` is not configured, tags in flowcharts are encoded as tags and clicking is prohibited. If you are taking responsibility for the diagram source security you can set the `securityLevel` to a value of your choosing. By doing this clicks and tags are again allowed. ### To change `securityLevel` with `mermaidAPI.initialize`: ```javascript mermaidAPI.initialize({ securityLevel: 'loose', }); ``` **Closed issues:** - please add tag for 8.0.0 release [\#863](https://github.com/knsv/mermaid/issues/863) - classDiagram breaks on any edit [\#858](https://github.com/knsv/mermaid/issues/858) ## [8.1.0](https://github.com/knsv/mermaid/tree/8.1.0) (2019-06-25) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.5...8.1.0) **Implemented enhancements:** - Theme for dark background [\#301](https://github.com/knsv/mermaid/issues/301) - \[Feature request\] gantt diagram axis format [\#269](https://github.com/knsv/mermaid/issues/269) - Implement render function for server side rendering using phantomjs [\#169](https://github.com/knsv/mermaid/issues/169) **Fixed bugs:** - mermaid -v filename.mmd gives You must specify at least one source file. [\#328](https://github.com/knsv/mermaid/issues/328) - Not Able to See Labels even htmlLabels:false added [\#268](https://github.com/knsv/mermaid/issues/268) **Closed issues:** - Gantt and sequence diagram do not render [\#853](https://github.com/knsv/mermaid/issues/853) - margins around flowchart are not balanced [\#852](https://github.com/knsv/mermaid/issues/852) - Smaller bundles [\#843](https://github.com/knsv/mermaid/issues/843) - unicode in labels [\#776](https://github.com/knsv/mermaid/issues/776) - Hard-changing drawing of arrows per edge type [\#775](https://github.com/knsv/mermaid/issues/775) - SequenceDiagram wrong [\#773](https://github.com/knsv/mermaid/issues/773) - Render mermaid on github pages with simple code [\#772](https://github.com/knsv/mermaid/issues/772) - FlowChart - large space between text and the image [\#754](https://github.com/knsv/mermaid/issues/754) - Class Diagram Issues when using Mermaid in Stackedit [\#748](https://github.com/knsv/mermaid/issues/748) - Multi-platform CI [\#744](https://github.com/knsv/mermaid/issues/744) - gantt: sections can't have a colon [\#742](https://github.com/knsv/mermaid/issues/742) - Yarn build does not add mermaid.min.css to dist [\#732](https://github.com/knsv/mermaid/issues/732) - Is there a grammar / keyword / more than just the basic examples? [\#718](https://github.com/knsv/mermaid/issues/718) - Click event and react component [\#717](https://github.com/knsv/mermaid/issues/717) - Long text going outside the box [\#706](https://github.com/knsv/mermaid/issues/706) - How to migrate from yUML to mermaid? [\#704](https://github.com/knsv/mermaid/issues/704) - Issue on Dynamic Creation in PHP [\#690](https://github.com/knsv/mermaid/issues/690) - `click "\#target"` and `click "http://url"` should create regular links [\#689](https://github.com/knsv/mermaid/issues/689) - Support Chinese punctuation [\#687](https://github.com/knsv/mermaid/issues/687) - \[Question\] Proper way to install on Mac? [\#681](https://github.com/knsv/mermaid/issues/681) - Has Mermaid a graphical interface to make diagrams? [\#668](https://github.com/knsv/mermaid/issues/668) - mermaid installation on debian [\#649](https://github.com/knsv/mermaid/issues/649) - "Cannot activate" in sequenceDiagram [\#647](https://github.com/knsv/mermaid/issues/647) - Link \("click" statement\) in flowchart does not work in exported SVG [\#646](https://github.com/knsv/mermaid/issues/646) - How to pass styling [\#639](https://github.com/knsv/mermaid/issues/639) - The live editor cant show seq diagram with notes for 8.0.0-alpha.3 [\#638](https://github.com/knsv/mermaid/issues/638) - import mermaid.css with ES6 + NPM [\#634](https://github.com/knsv/mermaid/issues/634) - Actor line cuts through other elements [\#633](https://github.com/knsv/mermaid/issues/633) - Graph TD line out of the picture \(left side\) [\#630](https://github.com/knsv/mermaid/issues/630) - Flowchart labels appear "cutoff" [\#628](https://github.com/knsv/mermaid/issues/628) - Uncaught TypeError: \_.constant is not a function \(mermaid.js\) [\#626](https://github.com/knsv/mermaid/issues/626) - Missing tags and releases for newer versions [\#623](https://github.com/knsv/mermaid/issues/623) - Mermaid and Leo / Leo Vue [\#622](https://github.com/knsv/mermaid/issues/622) - mermaidAPI gantt Vue.js [\#621](https://github.com/knsv/mermaid/issues/621) - Gantt sections are not separated by colors - Fix: set numberSectionStyles to 4 instead of 3 [\#620](https://github.com/knsv/mermaid/issues/620) - how to get mermaidAPI? [\#617](https://github.com/knsv/mermaid/issues/617) - Error in startOnLoad documentation? [\#616](https://github.com/knsv/mermaid/issues/616) - Example export to SVG generates error [\#614](https://github.com/knsv/mermaid/issues/614) - The new online editor does not support previously generated links [\#613](https://github.com/knsv/mermaid/issues/613) - Grammar / Syntax documentation for flowcharts [\#607](https://github.com/knsv/mermaid/issues/607) - Mermaid does not work with d3.js [\#606](https://github.com/knsv/mermaid/issues/606) - Why does this code's flowchart lines get cut-off on screen? [\#604](https://github.com/knsv/mermaid/issues/604) - click keyword does not fire my callback \(on the demo Website too\) [\#603](https://github.com/knsv/mermaid/issues/603) - Online Editor fails to show exported SVG [\#601](https://github.com/knsv/mermaid/issues/601) - Just saying thanks! [\#597](https://github.com/knsv/mermaid/issues/597) - stylesheet crashed with other library like abcjs [\#596](https://github.com/knsv/mermaid/issues/596) - Missing connection [\#594](https://github.com/knsv/mermaid/issues/594) - How to use mermaid on node.js restful api? [\#593](https://github.com/knsv/mermaid/issues/593) - Remove status code [\#589](https://github.com/knsv/mermaid/issues/589) - Golang based editor [\#588](https://github.com/knsv/mermaid/issues/588) - sequenceDiagram -\> notetext css font is hardcoded [\#587](https://github.com/knsv/mermaid/issues/587) - Multiple graph in the live editor [\#586](https://github.com/knsv/mermaid/issues/586) - All \ elements in page are colored black [\#584](https://github.com/knsv/mermaid/issues/584) - Styling: classes aren't applied to elements. [\#582](https://github.com/knsv/mermaid/issues/582) - Rounded connections [\#580](https://github.com/knsv/mermaid/issues/580) - Arrows are not being shown correctly in the dark theme [\#578](https://github.com/knsv/mermaid/issues/578) - The documentation for CLI seems outdated. [\#572](https://github.com/knsv/mermaid/issues/572) - No effect of click event:can not open link [\#571](https://github.com/knsv/mermaid/issues/571) - Text colors are not correct in VSCODE [\#570](https://github.com/knsv/mermaid/issues/570) - Nodes aren't aligned properly \(just need an explanation\) [\#568](https://github.com/knsv/mermaid/issues/568) - setting margin around figure in R [\#567](https://github.com/knsv/mermaid/issues/567) - Arrows should Come out in upward and Downward direction from decision Node [\#566](https://github.com/knsv/mermaid/issues/566) - TypeError: Cannot read property 'select' of undefined [\#563](https://github.com/knsv/mermaid/issues/563) - A little bug [\#557](https://github.com/knsv/mermaid/issues/557) - Japanese text appears garbled [\#554](https://github.com/knsv/mermaid/issues/554) - classdiagram not works in mermaid live_editor [\#553](https://github.com/knsv/mermaid/issues/553) - font awesome in link text? [\#546](https://github.com/knsv/mermaid/issues/546) - q: heard of the cosmogol standard? [\#545](https://github.com/knsv/mermaid/issues/545) - Arrow heads missing \(cli, 7.0.3\) [\#544](https://github.com/knsv/mermaid/issues/544) - No Edge Boxes if useHtmlLabels=false [\#541](https://github.com/knsv/mermaid/issues/541) - how to change mermaid text color or line text block color? [\#534](https://github.com/knsv/mermaid/issues/534) - FlowChart visualization broken when downloading from live editor [\#533](https://github.com/knsv/mermaid/issues/533) - Can't get flowchart to render paths at the top of the diagram; I even tried the online editor and that shows the same issue. Thoughts? [\#532](https://github.com/knsv/mermaid/issues/532) - live editor make browser\(safari on macOS&iOS\) not longer respond [\#531](https://github.com/knsv/mermaid/issues/531) - css classes need a prefix/namespace [\#527](https://github.com/knsv/mermaid/issues/527) - input activate/deactivate cause safari unresponding [\#521](https://github.com/knsv/mermaid/issues/521) - Cannot Render the Mermaid Graph to PDF ? [\#520](https://github.com/knsv/mermaid/issues/520) - clicking links works from inset in subgraph but not from nodes [\#516](https://github.com/knsv/mermaid/issues/516) - Strange syntax error - when importing mermaid.js [\#515](https://github.com/knsv/mermaid/issues/515) - gantt x-axis display [\#510](https://github.com/knsv/mermaid/issues/510) - phantomjs renamed to phantomjs-prebuilt [\#508](https://github.com/knsv/mermaid/issues/508) - issue when using sphinxcontrib-mermaid extension for sphinx [\#507](https://github.com/knsv/mermaid/issues/507) - layout of docs page looks broken [\#504](https://github.com/knsv/mermaid/issues/504) - Problem showing graph with php on localhost [\#502](https://github.com/knsv/mermaid/issues/502) - logLevel's option doesn't work at 7.0.0 [\#501](https://github.com/knsv/mermaid/issues/501) - How do I get the log for a render or parse attempt? [\#500](https://github.com/knsv/mermaid/issues/500) - Mermaid neutral style style to built in latest release [\#499](https://github.com/knsv/mermaid/issues/499) - Any plans for adding a typescript definition file? [\#495](https://github.com/knsv/mermaid/issues/495) - Gantt diagrams too narrow [\#493](https://github.com/knsv/mermaid/issues/493) - Flowchart edge labels placement [\#490](https://github.com/knsv/mermaid/issues/490) - Very different styles when rendering as png vs. svg [\#489](https://github.com/knsv/mermaid/issues/489) - New editor that supports mermaid: Caret [\#488](https://github.com/knsv/mermaid/issues/488) - Gant PNG margin [\#486](https://github.com/knsv/mermaid/issues/486) - ReferenceError: window is not defined [\#485](https://github.com/knsv/mermaid/issues/485) - Menu and layout bugs in docs [\#484](https://github.com/knsv/mermaid/issues/484) - Mermaid resets some of the page CSS styles [\#482](https://github.com/knsv/mermaid/issues/482) - Arrows rendering incorrectly in online editor [\#480](https://github.com/knsv/mermaid/issues/480) - CSS stroke-dasharray ignored by browsers but not other viewers [\#474](https://github.com/knsv/mermaid/issues/474) - mermaid - Browser Support issue [\#472](https://github.com/knsv/mermaid/issues/472) - Totally love mermaid I might pop! [\#471](https://github.com/knsv/mermaid/issues/471) - Sequence Diagram: Missing x on async arrows \(png\) [\#469](https://github.com/knsv/mermaid/issues/469) - live editor: the svg file rendered from graph is not supported by browsers [\#468](https://github.com/knsv/mermaid/issues/468) - Not found css [\#462](https://github.com/knsv/mermaid/issues/462) - Phantomjs Dependency [\#461](https://github.com/knsv/mermaid/issues/461) - Mermaid cli not working for subgraphs [\#459](https://github.com/knsv/mermaid/issues/459) - Support for notes across multiple participants? [\#458](https://github.com/knsv/mermaid/issues/458) - Related to Issue \#329: Phantomjs issues. [\#455](https://github.com/knsv/mermaid/issues/455) - Add a click style [\#426](https://github.com/knsv/mermaid/issues/426) - Add Parallel block \(par\) to sequence diagrams [\#425](https://github.com/knsv/mermaid/issues/425) - updating shapes after the flow chart rendering complete [\#424](https://github.com/knsv/mermaid/issues/424) - can't catch parse error Maximum call stack size exceeded on safari [\#421](https://github.com/knsv/mermaid/issues/421) - Arrows endings are missing [\#419](https://github.com/knsv/mermaid/issues/419) - shouldn't mermaid become more like Markdown ? [\#417](https://github.com/knsv/mermaid/issues/417) - Live editor show rendered diagram if syntax invalid [\#415](https://github.com/knsv/mermaid/issues/415) - Linkstyle stroke does not work [\#410](https://github.com/knsv/mermaid/issues/410) - flowchart id's with dots in them .. break links [\#408](https://github.com/knsv/mermaid/issues/408) - Flowchart: Link text beginning with lowercase 'o' causes flowchart to break [\#407](https://github.com/knsv/mermaid/issues/407) - Some Chinese character will case Safari no responding. [\#405](https://github.com/knsv/mermaid/issues/405) - Cannot center-justify text in nodes? [\#397](https://github.com/knsv/mermaid/issues/397) - Edge labels should have white background in live editor [\#396](https://github.com/knsv/mermaid/issues/396) - Live editor does not support activate/deactivate [\#394](https://github.com/knsv/mermaid/issues/394) - Styling subgraph? [\#391](https://github.com/knsv/mermaid/issues/391) - Update live editor to version 6.0.0 [\#387](https://github.com/knsv/mermaid/issues/387) - sequence diagram config issue [\#385](https://github.com/knsv/mermaid/issues/385) - How to add newline in the text [\#384](https://github.com/knsv/mermaid/issues/384) - PhantomJS crashes on a large graph [\#380](https://github.com/knsv/mermaid/issues/380) - Finnish support for class diagrams using plantuml syntax [\#377](https://github.com/knsv/mermaid/issues/377) - mermaidAPI.render generated different svg code from mermaid.int\(\) [\#374](https://github.com/knsv/mermaid/issues/374) - Put your own action on the chart [\#372](https://github.com/knsv/mermaid/issues/372) - when declaring participants the elements are generated twice [\#370](https://github.com/knsv/mermaid/issues/370) - Example Flowchart is cut in display \(Chrome\). [\#368](https://github.com/knsv/mermaid/issues/368) - Add shebang support to diagrams [\#365](https://github.com/knsv/mermaid/issues/365) - Silencing CLI output [\#352](https://github.com/knsv/mermaid/issues/352) - SequenceDiagram: 3+ Alternative Paths [\#348](https://github.com/knsv/mermaid/issues/348) - Smaller height of actor boxes [\#342](https://github.com/knsv/mermaid/issues/342) - Question: lib/phantomscript.js - foreignObjects in SVG - related to \#58 [\#340](https://github.com/knsv/mermaid/issues/340) - npm test fails on osx being blocked at Can not load "PhantomJS", it is not registered! [\#337](https://github.com/knsv/mermaid/issues/337) - Tabs & subgraphs cause rendering error [\#336](https://github.com/knsv/mermaid/issues/336) - Display question: right angles [\#335](https://github.com/knsv/mermaid/issues/335) - No Arrows rendered v0.5.8 [\#330](https://github.com/knsv/mermaid/issues/330) - You had errors in your syntax. Use --help for further information. [\#327](https://github.com/knsv/mermaid/issues/327) - Allow alternate arrow syntax that doesn't close html comments [\#322](https://github.com/knsv/mermaid/issues/322) - Comment in subgraph [\#319](https://github.com/knsv/mermaid/issues/319) - Update graph [\#311](https://github.com/knsv/mermaid/issues/311) - css conflicts with boostrap's css [\#308](https://github.com/knsv/mermaid/issues/308) - Can not get click event to fire. [\#306](https://github.com/knsv/mermaid/issues/306) - Fix phantomjs2 compatibility [\#304](https://github.com/knsv/mermaid/issues/304) - Flowcharts do not work in native IE11 [\#303](https://github.com/knsv/mermaid/issues/303) - Integration with remark.js - tutorial added [\#302](https://github.com/knsv/mermaid/issues/302) - Sequence diagram Loops: changing boxMargin spoils the "loop" notation [\#299](https://github.com/knsv/mermaid/issues/299) - src/mermaid.js generates bad code [\#297](https://github.com/knsv/mermaid/issues/297) - Fresh fork: jasmine tests fail [\#294](https://github.com/knsv/mermaid/issues/294) - CSS clash [\#292](https://github.com/knsv/mermaid/issues/292) - Mermaid does not work in Chrome 48 [\#281](https://github.com/knsv/mermaid/issues/281) - circle and ellipse cannot change color by classDef [\#271](https://github.com/knsv/mermaid/issues/271) - npm run watch doesn't work due missing dependencies [\#266](https://github.com/knsv/mermaid/issues/266) - label out of node [\#262](https://github.com/knsv/mermaid/issues/262) - IE11 Support issue [\#261](https://github.com/knsv/mermaid/issues/261) - mermaid without browser [\#260](https://github.com/knsv/mermaid/issues/260) - Insufficient capacity of gantt diagrams [\#226](https://github.com/knsv/mermaid/issues/226) - some WARN about installation [\#222](https://github.com/knsv/mermaid/issues/222) - Live editor offline access [\#217](https://github.com/knsv/mermaid/issues/217) - suggest: code highlight mode config for editors [\#212](https://github.com/knsv/mermaid/issues/212) - Uncaught RangeError: Maximum call stack size exceeded [\#189](https://github.com/knsv/mermaid/issues/189) - Styling label texts [\#50](https://github.com/knsv/mermaid/issues/50) **Merged pull requests:** - Remove console.log in classDB. [\#861](https://github.com/knsv/mermaid/pull/861) ([Arthaey](https://github.com/Arthaey)) - Bump sshpk from 1.13.1 to 1.16.1 [\#851](https://github.com/knsv/mermaid/pull/851) ([dependabot[bot]](https://github.com/apps/dependabot)) - Significantly smaller bundles [\#850](https://github.com/knsv/mermaid/pull/850) ([fabiospampinato](https://github.com/fabiospampinato)) - Support styling of subgraphs [\#845](https://github.com/knsv/mermaid/pull/845) ([Qix-](https://github.com/Qix-)) - fix dark theme loop labels not visible [\#837](https://github.com/knsv/mermaid/pull/837) ([jnnnnn](https://github.com/jnnnnn)) - fix draw function can only call once [\#832](https://github.com/knsv/mermaid/pull/832) ([vaniship](https://github.com/vaniship)) - Fix dotted lines not appearing in flowcharts when HTML labels disabled [\#828](https://github.com/knsv/mermaid/pull/828) ([stanhu](https://github.com/stanhu)) - Fix issue with XML line breaks inside vertex labels [\#824](https://github.com/knsv/mermaid/pull/824) ([jsyang](https://github.com/jsyang)) - fixed diagrams [\#810](https://github.com/knsv/mermaid/pull/810) ([0xflotus](https://github.com/0xflotus)) - Clickable gantt tasks [\#804](https://github.com/knsv/mermaid/pull/804) ([abzicht](https://github.com/abzicht)) - linkStyle now supports list of indexes with a few tests [\#798](https://github.com/knsv/mermaid/pull/798) ([ivan-danilov](https://github.com/ivan-danilov)) - fix class diagram mermaid [\#795](https://github.com/knsv/mermaid/pull/795) ([DanShai](https://github.com/DanShai)) - Added exclude weekdays to definition [\#792](https://github.com/knsv/mermaid/pull/792) ([jopapo](https://github.com/jopapo)) - SVG link rendering [\#791](https://github.com/knsv/mermaid/pull/791) ([flying-sheep](https://github.com/flying-sheep)) - Gantt milestones [\#788](https://github.com/knsv/mermaid/pull/788) ([gijswijs](https://github.com/gijswijs)) - Remove duplicate code [\#768](https://github.com/knsv/mermaid/pull/768) ([znxkznxk1030](https://github.com/znxkznxk1030)) - Render nodes as real links [\#765](https://github.com/knsv/mermaid/pull/765) ([flying-sheep](https://github.com/flying-sheep)) - Fix issue with marker-end. [\#757](https://github.com/knsv/mermaid/pull/757) ([gjlubbertsen](https://github.com/gjlubbertsen)) - Make Class Diagrams usable in Stackedit and Live Editor [\#749](https://github.com/knsv/mermaid/pull/749) ([monsterkrampe](https://github.com/monsterkrampe)) - Adding trapezoid and inverse trapezoid vertex options. [\#741](https://github.com/knsv/mermaid/pull/741) ([adamwulf](https://github.com/adamwulf)) - Add option for right angles [\#721](https://github.com/knsv/mermaid/pull/721) ([paulbland](https://github.com/paulbland)) - Add nested activation classes [\#720](https://github.com/knsv/mermaid/pull/720) ([paulbland](https://github.com/paulbland)) - wip: class diagram cardinality display [\#705](https://github.com/knsv/mermaid/pull/705) ([Vrixyz](https://github.com/Vrixyz)) - add comments about CSS in config [\#688](https://github.com/knsv/mermaid/pull/688) ([imma90](https://github.com/imma90)) - SequenceDiagram: Add support for multiple alt else statements [\#641](https://github.com/knsv/mermaid/pull/641) ([sechel](https://github.com/sechel)) - fix \#426 - add class .clickable on nodes with click function or link [\#598](https://github.com/knsv/mermaid/pull/598) ([thomasleveil](https://github.com/thomasleveil)) - Spec fix 1 [\#595](https://github.com/knsv/mermaid/pull/595) ([frankschmitt](https://github.com/frankschmitt)) ## [7.0.5](https://github.com/knsv/mermaid/tree/7.0.5) (2017-09-01) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.3...7.0.5) **Closed issues:** - live editor latin error after update [\#560](https://github.com/knsv/mermaid/issues/560) - Simple full example in online documentation is broken [\#558](https://github.com/knsv/mermaid/issues/558) - Graph No Arrow Head v7.0.3 [\#543](https://github.com/knsv/mermaid/issues/543) - Conflict while using mermaid along with core-js [\#512](https://github.com/knsv/mermaid/issues/512) - Export to pdf on website [\#496](https://github.com/knsv/mermaid/issues/496) - New downstream project: Mermaid Preview for VSCode [\#442](https://github.com/knsv/mermaid/issues/442) - Can't Zoom the flowchart ? [\#399](https://github.com/knsv/mermaid/issues/399) - line labels are not rendered correctly in live editor [\#366](https://github.com/knsv/mermaid/issues/366) - mermaid-loader [\#361](https://github.com/knsv/mermaid/issues/361) - Are there any documentation or examples for classDiagram and gitGraph? [\#359](https://github.com/knsv/mermaid/issues/359) - \# character broken in 0.5.8 [\#347](https://github.com/knsv/mermaid/issues/347) - Documentation issue: CSS example is not visible [\#345](https://github.com/knsv/mermaid/issues/345) - Include documentation for command line usage [\#326](https://github.com/knsv/mermaid/issues/326) - Fresh fork: can't build dist [\#296](https://github.com/knsv/mermaid/issues/296) - Invalid value for \ attribute viewBox="0 0 -Infinity -Infinity" [\#291](https://github.com/knsv/mermaid/issues/291) - Webpack require fails [\#277](https://github.com/knsv/mermaid/issues/277) - New documentation - need improved logo [\#216](https://github.com/knsv/mermaid/issues/216) ## [7.0.3](https://github.com/knsv/mermaid/tree/7.0.3) (2017-06-04) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.2...7.0.3) **Closed issues:** - the documentation website is down [\#539](https://github.com/knsv/mermaid/issues/539) - Good example of interactivity with mermaidAPI [\#514](https://github.com/knsv/mermaid/issues/514) ## [7.0.2](https://github.com/knsv/mermaid/tree/7.0.2) (2017-06-01) [Full Changelog](https://github.com/knsv/mermaid/compare/7.0.0...7.0.2) **Closed issues:** - CDN is not working [\#511](https://github.com/knsv/mermaid/issues/511) - A sampe sequenceDiagram crashes mermaid-cli [\#492](https://github.com/knsv/mermaid/issues/492) - Mermaid doesn't delete nodes when called multiple times [\#491](https://github.com/knsv/mermaid/issues/491) - API crashes on 2nd render\(\) call [\#478](https://github.com/knsv/mermaid/issues/478) - sequenceDiagram: dotted line for alt and empty bracket should be hidden [\#456](https://github.com/knsv/mermaid/issues/456) - SVG output \(almost\) not correct [\#434](https://github.com/knsv/mermaid/issues/434) - How to set axisFormatter of gantt in mermaid CLI? [\#428](https://github.com/knsv/mermaid/issues/428) - customizing link style with any color sets `fill` property to `black` instead of `none` [\#416](https://github.com/knsv/mermaid/issues/416) - New line at the end of SVG file [\#400](https://github.com/knsv/mermaid/issues/400) - CLI doesn't work [\#389](https://github.com/knsv/mermaid/issues/389) - Can't render subgraphs with htmlLabels: false [\#367](https://github.com/knsv/mermaid/issues/367) - Color arrowhead [\#362](https://github.com/knsv/mermaid/issues/362) - CLI: Invisible text, lines in SVG output [\#341](https://github.com/knsv/mermaid/issues/341) **Merged pull requests:** - Support Multi-line Actor Descriptions [\#764](https://github.com/knsv/mermaid/pull/764) ([watsoncj](https://github.com/watsoncj)) - Update Travis config [\#538](https://github.com/knsv/mermaid/pull/538) ([tylerlong](https://github.com/tylerlong)) - Fix spelling of 'you' in sequenceDiagram docs [\#537](https://github.com/knsv/mermaid/pull/537) ([ctruelson](https://github.com/ctruelson)) - Improve CLI output [\#536](https://github.com/knsv/mermaid/pull/536) ([gibson042](https://github.com/gibson042)) - Modernize mermaid [\#524](https://github.com/knsv/mermaid/pull/524) ([tylerlong](https://github.com/tylerlong)) - Modernize mermaid [\#519](https://github.com/knsv/mermaid/pull/519) ([tylerlong](https://github.com/tylerlong)) - Update CLI instructions [\#509](https://github.com/knsv/mermaid/pull/509) ([filipedeschamps](https://github.com/filipedeschamps)) - Add style for classDiagram to dark/default theme [\#503](https://github.com/knsv/mermaid/pull/503) ([yudenzel](https://github.com/yudenzel)) - Fix documentation for git graph. [\#498](https://github.com/knsv/mermaid/pull/498) ([gomlgs](https://github.com/gomlgs)) - Fix links in documentations [\#497](https://github.com/knsv/mermaid/pull/497) ([saveman71](https://github.com/saveman71)) - Update README.md with git graph sample [\#481](https://github.com/knsv/mermaid/pull/481) ([raghur](https://github.com/raghur)) - Fix misspelling of “another” [\#479](https://github.com/knsv/mermaid/pull/479) ([stevenschobert](https://github.com/stevenschobert)) - Fixed \#456 sequenceDiagram: dotted line for alt and empty bracket sho… [\#477](https://github.com/knsv/mermaid/pull/477) ([brookhong](https://github.com/brookhong)) - Add viewbox attr to class diagram [\#473](https://github.com/knsv/mermaid/pull/473) ([gnkm](https://github.com/gnkm)) - add par statement to sequenceDiagram [\#470](https://github.com/knsv/mermaid/pull/470) ([u-minor](https://github.com/u-minor)) ## [7.0.0](https://github.com/knsv/mermaid/tree/7.0.0) (2017-01-29) [Full Changelog](https://github.com/knsv/mermaid/compare/6.0.0...7.0.0) **Implemented enhancements:** - npm install -g mermaid does not install phantomjs [\#329](https://github.com/knsv/mermaid/issues/329) - activation boxes [\#313](https://github.com/knsv/mermaid/issues/313) **Closed issues:** - demos on io site not working [\#466](https://github.com/knsv/mermaid/issues/466) - Can not be generated PNG pictures through CLI with Chinese [\#451](https://github.com/knsv/mermaid/issues/451) - Round nodes cannot be styled with CSS classes [\#443](https://github.com/knsv/mermaid/issues/443) - webpack gulp UglifyJsPlugin error. [\#440](https://github.com/knsv/mermaid/issues/440) - String concatenation isn't working [\#432](https://github.com/knsv/mermaid/issues/432) - text flow/wrap in actor box of sequence diagram [\#422](https://github.com/knsv/mermaid/issues/422) - Online live editor still use old version [\#402](https://github.com/knsv/mermaid/issues/402) - uncaught TypeError: t.getTransformToElement is not a function [\#401](https://github.com/knsv/mermaid/issues/401) - Only works when using browserify'd code [\#373](https://github.com/knsv/mermaid/issues/373) - document the use of shebang line in mmd files [\#364](https://github.com/knsv/mermaid/issues/364) - Diagrams are small and unreadable in IE 11 - since 0.5.1 [\#356](https://github.com/knsv/mermaid/issues/356) - \[Feature Request\] ER-Diagram Support [\#354](https://github.com/knsv/mermaid/issues/354) - The need for mermaid.css should be mentioned explicitly in the intro docs... [\#273](https://github.com/knsv/mermaid/issues/273) **Merged pull requests:** - Update index.html [\#465](https://github.com/knsv/mermaid/pull/465) ([bmsleight](https://github.com/bmsleight)) - Fix for \#416, customizing link style with any color sets `fill` property to `black` instead of `none` [\#452](https://github.com/knsv/mermaid/pull/452) ([joshuacolvin](https://github.com/joshuacolvin)) - Allow .node\>circle to receive css styles [\#449](https://github.com/knsv/mermaid/pull/449) ([bfriedz](https://github.com/bfriedz)) - Fix spelling [\#447](https://github.com/knsv/mermaid/pull/447) ([jawn](https://github.com/jawn)) - added tests and fix cli css style selector lowercase problem [\#445](https://github.com/knsv/mermaid/pull/445) ([whyzdev](https://github.com/whyzdev)) - Update d3.js [\#441](https://github.com/knsv/mermaid/pull/441) ([hetz](https://github.com/hetz)) - added tests to reproduce \#434 in flowchart [\#439](https://github.com/knsv/mermaid/pull/439) ([whyzdev](https://github.com/whyzdev)) - Code Climate config [\#437](https://github.com/knsv/mermaid/pull/437) ([larkinscott](https://github.com/larkinscott)) - fix gantt and sequence digram cli cfg [\#435](https://github.com/knsv/mermaid/pull/435) ([whyzdev](https://github.com/whyzdev)) - fix gantt chart cli configuration broken [\#433](https://github.com/knsv/mermaid/pull/433) ([whyzdev](https://github.com/whyzdev)) - fix gantt chart cli configuration parsing including functions [\#430](https://github.com/knsv/mermaid/pull/430) ([whyzdev](https://github.com/whyzdev)) - Uses an empty text node instead of a string for svg group labels [\#429](https://github.com/knsv/mermaid/pull/429) ([daveaglick](https://github.com/daveaglick)) - use tspan via d3.textwrap to place actor text in sequence diagram [\#427](https://github.com/knsv/mermaid/pull/427) ([whyzdev](https://github.com/whyzdev)) - \#422 use foreignObject/div to place actor label in sequence diagram [\#423](https://github.com/knsv/mermaid/pull/423) ([whyzdev](https://github.com/whyzdev)) - Clarify the need for a CSS stylesheet [\#413](https://github.com/knsv/mermaid/pull/413) ([sifb](https://github.com/sifb)) - Added hads downstream project [\#412](https://github.com/knsv/mermaid/pull/412) ([sinedied](https://github.com/sinedied)) - update usage and fix \#273 [\#406](https://github.com/knsv/mermaid/pull/406) ([jinntrance](https://github.com/jinntrance)) - Add https://github.com/raghur/mermaid-filter to downstream projects docs page [\#404](https://github.com/knsv/mermaid/pull/404) ([raghur](https://github.com/raghur)) - New neutral theme [\#395](https://github.com/knsv/mermaid/pull/395) ([sinedied](https://github.com/sinedied)) - fix cli issues [\#390](https://github.com/knsv/mermaid/pull/390) ([ben-page](https://github.com/ben-page)) - Add missing space for 'Labels out of bounds' section [\#386](https://github.com/knsv/mermaid/pull/386) ([The-Alchemist](https://github.com/The-Alchemist)) - Fix typo: `pats` -\> `paths` [\#382](https://github.com/knsv/mermaid/pull/382) ([swhgoon](https://github.com/swhgoon)) - Added class diagram example to README.md [\#379](https://github.com/knsv/mermaid/pull/379) ([HustLion](https://github.com/HustLion)) - override normal flowchart arrowhead to allow css styling [\#376](https://github.com/knsv/mermaid/pull/376) ([dodoinblue](https://github.com/dodoinblue)) - added sphinx extension [\#371](https://github.com/knsv/mermaid/pull/371) ([mgaitan](https://github.com/mgaitan)) - Fix typo in the sequence diagram documentation [\#369](https://github.com/knsv/mermaid/pull/369) ([ggpasqualino](https://github.com/ggpasqualino)) ## [6.0.0](https://github.com/knsv/mermaid/tree/6.0.0) (2016-05-29) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.8...6.0.0) **Closed issues:** - Docs css: code hard to read [\#324](https://github.com/knsv/mermaid/issues/324) - About Markpad integration [\#323](https://github.com/knsv/mermaid/issues/323) - How to link backwards in flowchart? [\#321](https://github.com/knsv/mermaid/issues/321) - Help with editor [\#310](https://github.com/knsv/mermaid/issues/310) - +1 [\#293](https://github.com/knsv/mermaid/issues/293) - Basic chart does not render on Chome, but does in Firefox [\#290](https://github.com/knsv/mermaid/issues/290) - Live editor is broken [\#285](https://github.com/knsv/mermaid/issues/285) - "No such file or directory" trying to run mermaid 0.5.7 on OS X [\#284](https://github.com/knsv/mermaid/issues/284) - participant name as "Long Long Name" [\#283](https://github.com/knsv/mermaid/issues/283) - Windows - cli - could not find phantomjs at the specified path [\#236](https://github.com/knsv/mermaid/issues/236) **Merged pull requests:** - The option of gantt for the spaces for the section names. [\#353](https://github.com/knsv/mermaid/pull/353) ([zeroyonichihachi](https://github.com/zeroyonichihachi)) - Gitgraph: Make reset work with parent ref carets [\#350](https://github.com/knsv/mermaid/pull/350) ([raghur](https://github.com/raghur)) - Remove the text-shadows that make the text look blurry [\#349](https://github.com/knsv/mermaid/pull/349) ([AsaAyers](https://github.com/AsaAyers)) - add line interpolation to linkStyle in flowchart [\#346](https://github.com/knsv/mermaid/pull/346) ([AlanHohn](https://github.com/AlanHohn)) - Support git graph diagrams in mermaid [\#344](https://github.com/knsv/mermaid/pull/344) ([raghur](https://github.com/raghur)) - Build and test execution changes [\#338](https://github.com/knsv/mermaid/pull/338) ([ssbarnea](https://github.com/ssbarnea)) - Reformatting of css files [\#331](https://github.com/knsv/mermaid/pull/331) ([Jmuccigr](https://github.com/Jmuccigr)) - \(WIP\) Sequence Diagram Title Support [\#320](https://github.com/knsv/mermaid/pull/320) ([bronsoja](https://github.com/bronsoja)) - activations doc + few fixes [\#318](https://github.com/knsv/mermaid/pull/318) ([ciekawy](https://github.com/ciekawy)) - Dark theme for better contrast on darker backgrounds [\#317](https://github.com/knsv/mermaid/pull/317) ([crodriguez1a](https://github.com/crodriguez1a)) - Activations [\#316](https://github.com/knsv/mermaid/pull/316) ([ciekawy](https://github.com/ciekawy)) - Support leading comments for sequenceDiagrams [\#312](https://github.com/knsv/mermaid/pull/312) ([ashsearle](https://github.com/ashsearle)) - Show a little lenience for white-space around names [\#309](https://github.com/knsv/mermaid/pull/309) ([ashsearle](https://github.com/ashsearle)) - Update list of downstream projects [\#307](https://github.com/knsv/mermaid/pull/307) ([maxArturo](https://github.com/maxArturo)) - Issue 299: Sequence diagram Loops: changing boxMargin spoils the "loop" notation [\#300](https://github.com/knsv/mermaid/pull/300) ([LarryKlugerDS](https://github.com/LarryKlugerDS)) - Issue 297 - src/mermaid.js generates bad code [\#298](https://github.com/knsv/mermaid/pull/298) ([LarryKlugerDS](https://github.com/LarryKlugerDS)) - Updated instructions for running tests [\#295](https://github.com/knsv/mermaid/pull/295) ([LarryKlugerDS](https://github.com/LarryKlugerDS)) - Add Markdown Plus to Downstream projects [\#288](https://github.com/knsv/mermaid/pull/288) ([tylerlong](https://github.com/tylerlong)) - Quote phantomPath so that it doesn't fail on window [\#286](https://github.com/knsv/mermaid/pull/286) ([raghur](https://github.com/raghur)) ## [0.5.8](https://github.com/knsv/mermaid/tree/0.5.8) (2016-01-27) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.7...0.5.8) ## [0.5.7](https://github.com/knsv/mermaid/tree/0.5.7) (2016-01-25) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.6...0.5.7) **Closed issues:** - Mermaid + LightPaper = ❤️ [\#280](https://github.com/knsv/mermaid/issues/280) - Bower Integration [\#278](https://github.com/knsv/mermaid/issues/278) - Mermaid breaks when variables end in 'v' [\#276](https://github.com/knsv/mermaid/issues/276) - sequence diagrams don't support participant aliasing [\#263](https://github.com/knsv/mermaid/issues/263) - One diagram that fails to render stops further execution on the page [\#259](https://github.com/knsv/mermaid/issues/259) - Where to find line layout algorithm? [\#258](https://github.com/knsv/mermaid/issues/258) - Compatibility with node.js [\#257](https://github.com/knsv/mermaid/issues/257) - Label resizing with dynamically loaded fonts [\#255](https://github.com/knsv/mermaid/issues/255) - SVG arrowheads are broken in the CLI [\#249](https://github.com/knsv/mermaid/issues/249) - Cannot read property 'replace' of undefined [\#239](https://github.com/knsv/mermaid/issues/239) **Merged pull requests:** - gh-50 Allow styling of edge labels in css [\#267](https://github.com/knsv/mermaid/pull/267) ([Anoia](https://github.com/Anoia)) - Allow sequenceDiagram participant aliasing [\#265](https://github.com/knsv/mermaid/pull/265) ([gibson042](https://github.com/gibson042)) ## [0.5.6](https://github.com/knsv/mermaid/tree/0.5.6) (2015-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.5...0.5.6) **Implemented enhancements:** - Add download SVG link to the live editor [\#144](https://github.com/knsv/mermaid/issues/144) **Fixed bugs:** - Live Editor: Permalink address not being parsed [\#202](https://github.com/knsv/mermaid/issues/202) **Closed issues:** - title doesn't work in sequenceDiagram [\#248](https://github.com/knsv/mermaid/issues/248) - hypen-minus should be valid in sequence diagram alt/else/etc. descriptions [\#247](https://github.com/knsv/mermaid/issues/247) - Broken in firefox? [\#245](https://github.com/knsv/mermaid/issues/245) - When there is a Chinese symbol in the flowchart, it will crash。 [\#238](https://github.com/knsv/mermaid/issues/238) - Non-alpha characters included in ALPHA token \(flow graph jison\) [\#232](https://github.com/knsv/mermaid/issues/232) - subgraph not rendering with change to sample [\#231](https://github.com/knsv/mermaid/issues/231) - sequence diagram requires a new line at the end? [\#229](https://github.com/knsv/mermaid/issues/229) **Merged pull requests:** - Make sequenceDiagram terminal newline optional [\#253](https://github.com/knsv/mermaid/pull/253) ([gibson042](https://github.com/gibson042)) - Support sequenceDiagram "over" notes [\#252](https://github.com/knsv/mermaid/pull/252) ([gibson042](https://github.com/gibson042)) - Properly handle "rest of line" statements [\#251](https://github.com/knsv/mermaid/pull/251) ([gibson042](https://github.com/gibson042)) - CLI: Propagate exit code from lib \(i.e., phantomjs\) [\#250](https://github.com/knsv/mermaid/pull/250) ([gibson042](https://github.com/gibson042)) - flowRender.js - Fix FontAwesome icon insert [\#244](https://github.com/knsv/mermaid/pull/244) ([ma-zal](https://github.com/ma-zal)) - updated sequence diagram link in live editor [\#242](https://github.com/knsv/mermaid/pull/242) ([r-a-v-a-s](https://github.com/r-a-v-a-s)) - updated links in README.md [\#240](https://github.com/knsv/mermaid/pull/240) ([r-a-v-a-s](https://github.com/r-a-v-a-s)) - Ellipse syntax [\#237](https://github.com/knsv/mermaid/pull/237) ([spect88](https://github.com/spect88)) - Allow keywords as suffixes of node ids [\#235](https://github.com/knsv/mermaid/pull/235) ([spect88](https://github.com/spect88)) - Highlighted the editor in the nav [\#234](https://github.com/knsv/mermaid/pull/234) ([knsv](https://github.com/knsv)) - Live editor tweaks [\#233](https://github.com/knsv/mermaid/pull/233) ([spect88](https://github.com/spect88)) - Add a Gitter chat badge to README.md [\#230](https://github.com/knsv/mermaid/pull/230) ([gitter-badger](https://github.com/gitter-badger)) ## [0.5.5](https://github.com/knsv/mermaid/tree/0.5.5) (2015-10-21) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.4...0.5.5) **Closed issues:** - sequence diagram, arrowhead instead of crosshead [\#227](https://github.com/knsv/mermaid/issues/227) **Merged pull requests:** - Fix a typo: crosshead --\> arrowhead [\#228](https://github.com/knsv/mermaid/pull/228) ([tylerlong](https://github.com/tylerlong)) ## [0.5.4](https://github.com/knsv/mermaid/tree/0.5.4) (2015-10-19) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.3...0.5.4) **Implemented enhancements:** - Set log level from mermaid configuration [\#220](https://github.com/knsv/mermaid/issues/220) - Links in sequence diagrams [\#159](https://github.com/knsv/mermaid/issues/159) - Add syntax for double headed arrows [\#123](https://github.com/knsv/mermaid/issues/123) **Fixed bugs:** - comment characters `%%` cause parse error [\#141](https://github.com/knsv/mermaid/issues/141) **Closed issues:** - Marker-end arrow cannot be shown for URL with query parameter [\#225](https://github.com/knsv/mermaid/issues/225) - Please update bower's D3 version [\#221](https://github.com/knsv/mermaid/issues/221) - Width fixed to 400px [\#204](https://github.com/knsv/mermaid/issues/204) - render to png from the cli does not display the marker-end arrow heads [\#181](https://github.com/knsv/mermaid/issues/181) **Merged pull requests:** - Allow `end` as a substring of vertex id [\#224](https://github.com/knsv/mermaid/pull/224) ([spect88](https://github.com/spect88)) - Remove duplicate npm dependencies: d3 and he [\#223](https://github.com/knsv/mermaid/pull/223) ([spect88](https://github.com/spect88)) ## [0.5.3](https://github.com/knsv/mermaid/tree/0.5.3) (2015-10-04) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.2...0.5.3) ## [0.5.2](https://github.com/knsv/mermaid/tree/0.5.2) (2015-10-04) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.1...0.5.2) **Implemented enhancements:** - Support for hyperlink and tooltip [\#34](https://github.com/knsv/mermaid/issues/34) **Closed issues:** - Installing “atom-mermaid@0.1.3” failed [\#218](https://github.com/knsv/mermaid/issues/218) - node feature request [\#211](https://github.com/knsv/mermaid/issues/211) - Please add prefix for styles [\#208](https://github.com/knsv/mermaid/issues/208) - Bad handling of block arguments [\#207](https://github.com/knsv/mermaid/issues/207) - please consider port to mac osx [\#203](https://github.com/knsv/mermaid/issues/203) - allow phantomjs \>=1.9.x [\#201](https://github.com/knsv/mermaid/issues/201) - syntax for venn diagrams? [\#200](https://github.com/knsv/mermaid/issues/200) - Broken CLI Graphs? \(v0.5.1\) [\#196](https://github.com/knsv/mermaid/issues/196) - Static site does not render under HTTPS [\#194](https://github.com/knsv/mermaid/issues/194) - Error on simple graph [\#192](https://github.com/knsv/mermaid/issues/192) - Escape "~" [\#191](https://github.com/knsv/mermaid/issues/191) - Trying to add link using 'click' to flowchart [\#188](https://github.com/knsv/mermaid/issues/188) - cli: no lines and arrowheads rendered / only dotted lines [\#187](https://github.com/knsv/mermaid/issues/187) - text of mermaid div displayed on page [\#186](https://github.com/knsv/mermaid/issues/186) - using mermaid with laravel [\#185](https://github.com/knsv/mermaid/issues/185) - Atom editor package [\#183](https://github.com/knsv/mermaid/issues/183) - Auto linewrap for notes in sequence diagrams [\#178](https://github.com/knsv/mermaid/issues/178) - Execute code after initialize [\#176](https://github.com/knsv/mermaid/issues/176) - Autoscaling for all diagram types [\#175](https://github.com/knsv/mermaid/issues/175) - Problem wit click event callback [\#174](https://github.com/knsv/mermaid/issues/174) - How to escape characters? [\#170](https://github.com/knsv/mermaid/issues/170) - it can not work [\#167](https://github.com/knsv/mermaid/issues/167) - Broken subgraph using the CLI [\#153](https://github.com/knsv/mermaid/issues/153) - IE Support issue [\#142](https://github.com/knsv/mermaid/issues/142) - Flowchart truncated [\#140](https://github.com/knsv/mermaid/issues/140) - Double Quote as text is not working [\#219](https://github.com/knsv/mermaid/issues/219) - classDef / class not working with htmlLabels? [\#210](https://github.com/knsv/mermaid/issues/210) - Links in graph missing [\#209](https://github.com/knsv/mermaid/issues/209) - Last word in comment boxes getting cut off by word wrap library : \( [\#195](https://github.com/knsv/mermaid/issues/195) - Escaping characters in sequence diagram [\#193](https://github.com/knsv/mermaid/issues/193) - SVG foreignObject rendering [\#180](https://github.com/knsv/mermaid/issues/180) - IE9 issue [\#179](https://github.com/knsv/mermaid/issues/179) - inoperable in an AMD/requirejs environment: IPython Notebook [\#127](https://github.com/knsv/mermaid/issues/127) - \[Parser\] Hyphen in participant name bring TypeError [\#74](https://github.com/knsv/mermaid/issues/74) **Merged pull requests:** - Update flowchart.md [\#214](https://github.com/knsv/mermaid/pull/214) ([orschiro](https://github.com/orschiro)) - Default style when using the CLI [\#205](https://github.com/knsv/mermaid/pull/205) ([gillesdemey](https://github.com/gillesdemey)) - Gantt chart - add minutes and seconds durations [\#198](https://github.com/knsv/mermaid/pull/198) ([dbrans](https://github.com/dbrans)) - Using QUnit for AMD testing [\#190](https://github.com/knsv/mermaid/pull/190) ([bollwyvl](https://github.com/bollwyvl)) - Update phantomscript.js [\#182](https://github.com/knsv/mermaid/pull/182) ([phairow](https://github.com/phairow)) ## [0.5.1](https://github.com/knsv/mermaid/tree/0.5.1) (2015-06-21) [Full Changelog](https://github.com/knsv/mermaid/compare/0.5.0...0.5.1) **Implemented enhancements:** - To SVG Export [\#146](https://github.com/knsv/mermaid/issues/146) - Possibility to set the width of the generated flowchart [\#129](https://github.com/knsv/mermaid/issues/129) - Special characters break parsing [\#54](https://github.com/knsv/mermaid/issues/54) - Responsive graph layout for mobile viewers [\#51](https://github.com/knsv/mermaid/issues/51) - Styling connector lines [\#31](https://github.com/knsv/mermaid/issues/31) **Fixed bugs:** - flowchart - styling of edges via css overrides specific styles set in the graph definition [\#128](https://github.com/knsv/mermaid/issues/128) **Closed issues:** - Live editor is broken [\#173](https://github.com/knsv/mermaid/issues/173) - 0.5.0 no longer respects custom date definitions in Gantt diagrams [\#171](https://github.com/knsv/mermaid/issues/171) - Drop label character restrictions [\#162](https://github.com/knsv/mermaid/issues/162) - can't nest subgraphs in flowchart [\#161](https://github.com/knsv/mermaid/issues/161) - Unable to generate gantt diagram with mermaid CLI [\#158](https://github.com/knsv/mermaid/issues/158) - Inline css by "mermaid" [\#157](https://github.com/knsv/mermaid/issues/157) - Finite State Machine Diagram [\#152](https://github.com/knsv/mermaid/issues/152) - How to center align gantt diagram [\#150](https://github.com/knsv/mermaid/issues/150) - Security concern regarding class definition [\#148](https://github.com/knsv/mermaid/issues/148) - File Extension [\#147](https://github.com/knsv/mermaid/issues/147) - `setTimeout` with clusters problematic with programmatic edits and no callback [\#133](https://github.com/knsv/mermaid/issues/133) - module.exports.cloneCssStyles\(\) in combination with Angularjs breaks display in Chrome and IE [\#126](https://github.com/knsv/mermaid/issues/126) - Gantt - suitable xAxis for longer project [\#125](https://github.com/knsv/mermaid/issues/125) - How to get started with this project ? [\#64](https://github.com/knsv/mermaid/issues/64) **Merged pull requests:** - Remove moot `version` property from bower.json [\#172](https://github.com/knsv/mermaid/pull/172) ([kkirsche](https://github.com/kkirsche)) ## [0.5.0](https://github.com/knsv/mermaid/tree/0.5.0) (2015-06-07) [Full Changelog](https://github.com/knsv/mermaid/compare/0.4.0...0.5.0) **Implemented enhancements:** - Add a css file, mermaid.css, with default styling [\#122](https://github.com/knsv/mermaid/issues/122) - software architecture diagram [\#36](https://github.com/knsv/mermaid/issues/36) - Support for bar charts and pie diagrams [\#22](https://github.com/knsv/mermaid/issues/22) **Closed issues:** - uglifyjs wanrings which means we can improve the code [\#156](https://github.com/knsv/mermaid/issues/156) - New\(er\) features unavailable in downloadable js files? [\#151](https://github.com/knsv/mermaid/issues/151) - Add gh-gapes link to description [\#143](https://github.com/knsv/mermaid/issues/143) - Some examples not displayed on Firefox 36.0.1 [\#138](https://github.com/knsv/mermaid/issues/138) - tags ending in a "v" don't render [\#132](https://github.com/knsv/mermaid/issues/132) - Links in flowchart [\#131](https://github.com/knsv/mermaid/issues/131) - Using the library for iOS development [\#130](https://github.com/knsv/mermaid/issues/130) - Add capability for gantt diagrams [\#118](https://github.com/knsv/mermaid/issues/118) - lower case v causes error in the parser [\#108](https://github.com/knsv/mermaid/issues/108) - Label's css conflict with boostrap's .label [\#67](https://github.com/knsv/mermaid/issues/67) - TypeError: Cannot read property 'layout' of undefined [\#37](https://github.com/knsv/mermaid/issues/37) **Merged pull requests:** - Dev 0.5.0 [\#168](https://github.com/knsv/mermaid/pull/168) ([knsv](https://github.com/knsv)) - Fix spacing [\#164](https://github.com/knsv/mermaid/pull/164) ([rhcarvalho](https://github.com/rhcarvalho)) - Fixing typo: "Think" -\> "Thick" [\#160](https://github.com/knsv/mermaid/pull/160) ([it0a](https://github.com/it0a)) - IE, local html, cssRules access is denied [\#155](https://github.com/knsv/mermaid/pull/155) ([tylerlong](https://github.com/tylerlong)) - Add automatically generated change log file. [\#139](https://github.com/knsv/mermaid/pull/139) ([skywinder](https://github.com/skywinder)) - Adding init argument to the global API [\#137](https://github.com/knsv/mermaid/pull/137) ([bollwyvl](https://github.com/bollwyvl)) - Add description of manual calling of init [\#136](https://github.com/knsv/mermaid/pull/136) ([bollwyvl](https://github.com/bollwyvl)) - Allow other forms of node selection for init\(\) [\#135](https://github.com/knsv/mermaid/pull/135) ([bollwyvl](https://github.com/bollwyvl)) - Use a library-level variable for assigning ids [\#134](https://github.com/knsv/mermaid/pull/134) ([bollwyvl](https://github.com/bollwyvl)) ## [0.4.0](https://github.com/knsv/mermaid/tree/0.4.0) (2015-03-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.5...0.4.0) **Implemented enhancements:** - Assymetric shapes not documented [\#82](https://github.com/knsv/mermaid/issues/82) - Improve arrows [\#3](https://github.com/knsv/mermaid/issues/3) **Fixed bugs:** - NoModificationAllowedError [\#23](https://github.com/knsv/mermaid/issues/23) **Closed issues:** - subgraph background is black in rendered flowchart PNG via CLI [\#121](https://github.com/knsv/mermaid/issues/121) - Integrate editor at https://github.com/naseer/mermaid-webapp [\#110](https://github.com/knsv/mermaid/issues/110) - Internet Explorer Support [\#99](https://github.com/knsv/mermaid/issues/99) ## [0.3.5](https://github.com/knsv/mermaid/tree/0.3.5) (2015-02-15) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.4...0.3.5) ## [0.3.4](https://github.com/knsv/mermaid/tree/0.3.4) (2015-02-15) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.3...0.3.4) **Implemented enhancements:** - Apply styling from css when using the CLI utility [\#85](https://github.com/knsv/mermaid/issues/85) - Generated SVG works poorly outside web browsers [\#58](https://github.com/knsv/mermaid/issues/58) - Generating SVG text blob for use in Node [\#2](https://github.com/knsv/mermaid/issues/2) **Closed issues:** - Subgraph syntax bug? [\#120](https://github.com/knsv/mermaid/issues/120) - Live editor [\#115](https://github.com/knsv/mermaid/issues/115) - Error in "Basic Syntax" wiki page [\#113](https://github.com/knsv/mermaid/issues/113) - semicolons, anyone? [\#111](https://github.com/knsv/mermaid/issues/111) - undefined `sequenceConfig` fails [\#109](https://github.com/knsv/mermaid/issues/109) - Sequence Diagrams: Show Actors below as well [\#106](https://github.com/knsv/mermaid/issues/106) - Allow overriding sequence diagram configuration \(SVG properties\) [\#103](https://github.com/knsv/mermaid/issues/103) - Error when rendering A-- This is the text -- B [\#102](https://github.com/knsv/mermaid/issues/102) - Clipping in documentation [\#97](https://github.com/knsv/mermaid/issues/97) - isolate class styling to the svg container [\#92](https://github.com/knsv/mermaid/issues/92) - Make the new graph declaration more visual [\#40](https://github.com/knsv/mermaid/issues/40) **Merged pull requests:** - Add live editor [\#119](https://github.com/knsv/mermaid/pull/119) ([naseer](https://github.com/naseer)) - Adds CSS option to the CLI [\#116](https://github.com/knsv/mermaid/pull/116) ([fardog](https://github.com/fardog)) - Update flowchart.md in response Issue \#113 [\#114](https://github.com/knsv/mermaid/pull/114) ([vijay40](https://github.com/vijay40)) - Ignore all files except the license and dist/ folder when installing with Bower. [\#112](https://github.com/knsv/mermaid/pull/112) ([jasonbellamy](https://github.com/jasonbellamy)) ## [0.3.3](https://github.com/knsv/mermaid/tree/0.3.3) (2015-01-25) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.2...0.3.3) **Implemented enhancements:** - Support for dotted links [\#26](https://github.com/knsv/mermaid/issues/26) **Closed issues:** - Missing arrows in sequence diagram [\#98](https://github.com/knsv/mermaid/issues/98) - Error with \>9 linkStyles [\#95](https://github.com/knsv/mermaid/issues/95) **Merged pull requests:** - Require d3 directly to better support Node usage [\#107](https://github.com/knsv/mermaid/pull/107) ([markdalgleish](https://github.com/markdalgleish)) - update doc with -c option [\#105](https://github.com/knsv/mermaid/pull/105) ([jjmr](https://github.com/jjmr)) - Add new parameter to the console client to override the svg configuration in sequence diagrams [\#104](https://github.com/knsv/mermaid/pull/104) ([jjmr](https://github.com/jjmr)) - Text based labels, new shape [\#101](https://github.com/knsv/mermaid/pull/101) ([bjowes](https://github.com/bjowes)) - fix html tags in example usage [\#100](https://github.com/knsv/mermaid/pull/100) ([deiwin](https://github.com/deiwin)) ## [0.3.2](https://github.com/knsv/mermaid/tree/0.3.2) (2015-01-11) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.1...0.3.2) **Implemented enhancements:** - Make link text look like it is on the line [\#53](https://github.com/knsv/mermaid/issues/53) **Closed issues:** - disable auto render [\#91](https://github.com/knsv/mermaid/issues/91) - Tidy breaks mermaid \(linebreaks in \\) [\#87](https://github.com/knsv/mermaid/issues/87) - Bug: \ being rendered as text in node [\#73](https://github.com/knsv/mermaid/issues/73) - Graph edges appear to render outside of the canvas [\#70](https://github.com/knsv/mermaid/issues/70) **Merged pull requests:** - Merge pull request \#1 from knsv/master [\#96](https://github.com/knsv/mermaid/pull/96) ([gkchic](https://github.com/gkchic)) - Removed duplicated section in flowchart docs [\#94](https://github.com/knsv/mermaid/pull/94) ([kaime](https://github.com/kaime)) - Grammar changes to sequence page [\#93](https://github.com/knsv/mermaid/pull/93) ([gkchic](https://github.com/gkchic)) - Github buttons [\#89](https://github.com/knsv/mermaid/pull/89) ([gkchic](https://github.com/gkchic)) - Template change [\#88](https://github.com/knsv/mermaid/pull/88) ([gkchic](https://github.com/gkchic)) ## [0.3.1](https://github.com/knsv/mermaid/tree/0.3.1) (2015-01-05) [Full Changelog](https://github.com/knsv/mermaid/compare/0.3.0...0.3.1) **Implemented enhancements:** - Support for sequence diagrams [\#16](https://github.com/knsv/mermaid/issues/16) - Client utility for mermaid [\#6](https://github.com/knsv/mermaid/issues/6) **Closed issues:** - Non ASCII chars in labels [\#84](https://github.com/knsv/mermaid/issues/84) - 'undefined' titles of Quicklinks on the usage page [\#80](https://github.com/knsv/mermaid/issues/80) - \[cli\] Enhancement proposal: not fail --version / --help if phantomjs isn't installed [\#71](https://github.com/knsv/mermaid/issues/71) **Merged pull requests:** - Flowchart doc: Text in the circle now in a circle [\#81](https://github.com/knsv/mermaid/pull/81) ([Grahack](https://github.com/Grahack)) - Fix for issue \#73 [\#79](https://github.com/knsv/mermaid/pull/79) ([it0a](https://github.com/it0a)) - Ink template [\#78](https://github.com/knsv/mermaid/pull/78) ([gkchic](https://github.com/gkchic)) - Show help and version even if phantom isn't present. Fixes \#71 [\#75](https://github.com/knsv/mermaid/pull/75) ([fardog](https://github.com/fardog)) - Add apostrophe & 'and' [\#72](https://github.com/knsv/mermaid/pull/72) ([sudodoki](https://github.com/sudodoki)) ## [0.3.0](https://github.com/knsv/mermaid/tree/0.3.0) (2014-12-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.16...0.3.0) **Implemented enhancements:** - How do I do comments? [\#47](https://github.com/knsv/mermaid/issues/47) - Improve readability with new line as terminator and whitespace [\#38](https://github.com/knsv/mermaid/issues/38) **Fixed bugs:** - This characters failed the lexical parsing [\#46](https://github.com/knsv/mermaid/issues/46) **Closed issues:** - Trailing whitespace at the end of lines is not ignored [\#55](https://github.com/knsv/mermaid/issues/55) - Use classes instead of inline style for easy styling [\#24](https://github.com/knsv/mermaid/issues/24) **Merged pull requests:** - Adds Command Line Interface for generating PNGs from mermaid description files [\#69](https://github.com/knsv/mermaid/pull/69) ([fardog](https://github.com/fardog)) - Allow special symbols for direction along with acronyms [\#66](https://github.com/knsv/mermaid/pull/66) ([vijay40](https://github.com/vijay40)) ## [0.2.16](https://github.com/knsv/mermaid/tree/0.2.16) (2014-12-15) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.15...0.2.16) **Fixed bugs:** - Lines routed outside visible area [\#19](https://github.com/knsv/mermaid/issues/19) **Closed issues:** - Mermaid not rendering properly on Wordpress pages [\#59](https://github.com/knsv/mermaid/issues/59) - Improve example page with live demo [\#52](https://github.com/knsv/mermaid/issues/52) - Does not render upon AngularJS Updates [\#45](https://github.com/knsv/mermaid/issues/45) - Download link in README.MD doesn't work. [\#42](https://github.com/knsv/mermaid/issues/42) - linkStyle usage is not obvious [\#41](https://github.com/knsv/mermaid/issues/41) - Move \*.spec.js in src/ to test/ [\#35](https://github.com/knsv/mermaid/issues/35) **Merged pull requests:** - New grammar will allow statements ending without semicolon as disccused in Issue \#38 [\#63](https://github.com/knsv/mermaid/pull/63) ([vijay40](https://github.com/vijay40)) - Class based styling [\#62](https://github.com/knsv/mermaid/pull/62) ([bjowes](https://github.com/bjowes)) - Fix typos [\#60](https://github.com/knsv/mermaid/pull/60) ([sublimino](https://github.com/sublimino)) - Included .DS_Store in gitignore [\#57](https://github.com/knsv/mermaid/pull/57) ([alvynmcq](https://github.com/alvynmcq)) - Improves readability discussed in issue \#38 [\#56](https://github.com/knsv/mermaid/pull/56) ([vijay40](https://github.com/vijay40)) - Added a linting task for gulp [\#43](https://github.com/knsv/mermaid/pull/43) ([serv](https://github.com/serv)) ## [0.2.15](https://github.com/knsv/mermaid/tree/0.2.15) (2014-12-05) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.14...0.2.15) **Fixed bugs:** - Error with some characters [\#25](https://github.com/knsv/mermaid/issues/25) - Cap-cased words break parser [\#8](https://github.com/knsv/mermaid/issues/8) **Closed issues:** - Question marks don't render properly with /dist/mermaid.full.min.js [\#30](https://github.com/knsv/mermaid/issues/30) - Provide parse function in browser widthout `require`? [\#21](https://github.com/knsv/mermaid/issues/21) - Better label text support [\#18](https://github.com/knsv/mermaid/issues/18) **Merged pull requests:** - Include bower_components/ to .gitignore [\#33](https://github.com/knsv/mermaid/pull/33) ([serv](https://github.com/serv)) - Fixed reference to Git repo. [\#32](https://github.com/knsv/mermaid/pull/32) ([guyellis](https://github.com/guyellis)) ## [0.2.14](https://github.com/knsv/mermaid/tree/0.2.14) (2014-12-03) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.13...0.2.14) ## [0.2.13](https://github.com/knsv/mermaid/tree/0.2.13) (2014-12-03) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.10...0.2.13) **Implemented enhancements:** - Publish to NPM [\#7](https://github.com/knsv/mermaid/issues/7) **Closed issues:** - modified init to be applied more than once [\#29](https://github.com/knsv/mermaid/issues/29) - Wanted to know build process for the project. [\#28](https://github.com/knsv/mermaid/issues/28) - can not support Chinese description [\#20](https://github.com/knsv/mermaid/issues/20) - Support unicode chars in labels [\#9](https://github.com/knsv/mermaid/issues/9) ## [0.2.10](https://github.com/knsv/mermaid/tree/0.2.10) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.9...0.2.10) ## [0.2.9](https://github.com/knsv/mermaid/tree/0.2.9) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.8...0.2.9) **Closed issues:** - Add link to jsbin playground to README [\#11](https://github.com/knsv/mermaid/issues/11) - What are the requirements ? [\#10](https://github.com/knsv/mermaid/issues/10) **Merged pull requests:** - Allow unicode chars in labels [\#13](https://github.com/knsv/mermaid/pull/13) ([codebeige](https://github.com/codebeige)) ## [0.2.8](https://github.com/knsv/mermaid/tree/0.2.8) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.7...0.2.8) ## [0.2.7](https://github.com/knsv/mermaid/tree/0.2.7) (2014-12-01) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.6...0.2.7) **Closed issues:** - Provide parser as separate module [\#4](https://github.com/knsv/mermaid/issues/4) ## [0.2.6](https://github.com/knsv/mermaid/tree/0.2.6) (2014-11-27) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.5...0.2.6) ## [0.2.5](https://github.com/knsv/mermaid/tree/0.2.5) (2014-11-27) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.4...0.2.5) **Merged pull requests:** - Added new shapes! [\#1](https://github.com/knsv/mermaid/pull/1) ([bjowes](https://github.com/bjowes)) ## [0.2.4](https://github.com/knsv/mermaid/tree/0.2.4) (2014-11-25) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.3...0.2.4) ## [0.2.3](https://github.com/knsv/mermaid/tree/0.2.3) (2014-11-24) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.2...0.2.3) ## [0.2.2](https://github.com/knsv/mermaid/tree/0.2.2) (2014-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.1...0.2.2) ## [0.2.1](https://github.com/knsv/mermaid/tree/0.2.1) (2014-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.2.0...0.2.1) ## [0.2.0](https://github.com/knsv/mermaid/tree/0.2.0) (2014-11-22) [Full Changelog](https://github.com/knsv/mermaid/compare/0.1.1...0.2.0) ## [0.1.1](https://github.com/knsv/mermaid/tree/0.1.1) (2014-11-17) [Full Changelog](https://github.com/knsv/mermaid/compare/0.1.0...0.1.1) ## [0.1.0](https://github.com/knsv/mermaid/tree/0.1.0) (2014-11-16) mermaid-js-mermaid-9bb0ed2/vdocs/community/development.md000066400000000000000000000156121433273745700237010ustar00rootroot00000000000000# Development and Contribution 🙌 So you want to help? That's great! ![Image of happy people jumping with excitement](https://media.giphy.com/media/BlVnrxJgTGsUw/giphy.gif) Here are a few things to get you started on the right path. **The Docs Structure is dictated by [sidebar.md](https://github.com/mermaid-js/mermaid/edit/develop/src/docs/_sidebar.md)** **Note: Commits and Pull Requests should be directed to the develop branch.** ## Branching Mermaid uses a [Git Flow](https://guides.github.com/introduction/flow/)–inspired approach to branching. So development is done in the `develop` branch. Once development is done we branch a `release` branch from `develop` for testing. Once the release happens we merge the `release` branch with `master` and kill the `release` branch. This means that **you should branch off your pull request from develop** and direct all Pull Requests to it. ## Contributing Code We make all changes via Pull Requests. As we have many Pull Requests from developers new to mermaid, we have put in place a process, wherein _knsv, Knut Sveidqvist_ is the primary reviewer of changes and merging pull requests. The process is as follows: - Large changes reviewed by knsv or other developer asked to review by knsv - Smaller, low-risk changes like dependencies, documentation, etc. can be merged by active collaborators - Documentation (we encourage updates to the `src/docs` folder; you can submit them via direct commits) When you commit code, create a branch with the following naming convention: Start with the type, such as **feature** or **bug**, followed by the issue number for reference, and a text that describes the issue. **One example:** `feature/945_state_diagrams` **Another example:** `bug/123_nasty_bug_branch` ## Contributing to Documentation If it is not in the documentation, it's like it never happened. Wouldn't that be sad? With all the effort that was put into the feature? The docs are located in the `src/docs` folder and are written in Markdown. Just pick the right section and start typing. If you want to propose changes to the structure of the documentation, such as adding a new section or a new file you do that via the **[sidebar](https://github.com/mermaid-js/mermaid/edit/develop/src/docs/_sidebar.md)**. > **All the documents displayed in the GitHub.io page are listed in [sidebar.md](https://github.com/mermaid-js/mermaid/edit/develop/src/docs/_sidebar.md)**. The contents of [https://mermaid-js.github.io/mermaid/](https://mermaid-js.github.io/mermaid/) are based on the docs from the `master` branch. Updates committed to the `master` branch are reflected in the [Mermaid Docs](https://mermaid-js.github.io/mermaid/) once released. ## How to Contribute to Documentation We are a little less strict here, it is OK to commit directly in the `develop` branch if you are a collaborator. The documentation is located in the `src/docs` directory and organized according to relevant subfolder. The `docs` folder will be automatically generated when committing to `src/docs` and should not be edited manually. We encourage contributions to the documentation at [mermaid-js/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/src/docs). We publish documentation using GitHub Pages with [Docsify](https://www.youtube.com/watch?v=TV88lp7egMw&t=3s) ### Add Unit Tests for Parsing This is important so that, if someone that does not know about this great feature suggests a change to the grammar, they get notified early on when that change breaks the parser. Another important aspect is that, without proper parsing, tests refactoring is pretty much impossible. ### Add E2E Tests This tests the rendering and visual appearance of the diagrams. This ensures that the rendering of that feature in the e2e will be reviewed in the release process going forward. Less chance that it breaks! To start working with the e2e tests: 1. Run `yarn dev` to start the dev server 2. Start **Cypress** by running `cypress open` in the **mermaid** folder. (Make sure you have path to Cypress in order, the binary is located in `node_modules/.bin`). The rendering tests are very straightforward to create. There is a function `imgSnapshotTest`, which takes a diagram in text form and the mermaid options, and it renders that diagram in Cypress. When running in CI it will take a snapshot of the rendered diagram and compare it with the snapshot from last build and flag it for review if it differs. This is what a rendering test looks like: ```js it('should render forks and joins', () => { imgSnapshotTest( ` stateDiagram state fork_state <<fork>> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <<join>> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] `, { logLevel: 0 } ); cy.get('svg'); }); ``` ### Any Questions or Suggestions? After logging in at [GitHub.com](https://www.github.com), open or append to an issue [using the GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Documentation%22). ### How to Contribute a Suggestion Markdown is used to format the text, for more information about Markdown [see the GitHub Markdown help page](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax). To edit Docs on your computer: 1. Find the Markdown file (.md) to edit in the [mermaid-js/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/src/docs) directory in the `develop` branch. 2. Create a fork of the develop branch. 3. Make changes or add new documentation. 4. Commit changes to your fork and push it to GitHub. 5. Create a Pull Request of your fork. To edit Docs on GitHub: 1. Login to [GitHub.com](https://www.github.com). 2. Navigate to [mermaid-js/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/src/docs). 3. To edit a file, click the pencil icon at the top-right of the file contents panel. 4. Describe what you changed in the **Propose file change** section, located at the bottom of the page. 5. Submit your changes by clicking the button **Propose file change** at the bottom (by automatic creation of a fork and a new branch). 6. Create a Pull Request of your newly forked branch by clicking the green **Create Pull Request** button. ## Last Words Don't get daunted if it is hard in the beginning. We have a great community with only encouraging words. So, if you get stuck, ask for help and hints in the Slack forum. If you want to show off something good, show it off there. [Join our Slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) ![Image of superhero wishing you good luck](https://media.giphy.com/media/l49JHz7kJvl6MCj3G/giphy.gif) mermaid-js-mermaid-9bb0ed2/vdocs/community/img/000077500000000000000000000000001433273745700216045ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/vdocs/community/img/er.png000066400000000000000000001564001433273745700227260ustar00rootroot00000000000000PNG  IHDR }asBITOtEXtSoftwaregnome-screenshot> IDATx{`e0I2mL h a?]^EɊg ވ {HPX+ˬ. ۑ )6eF/Kt;O 7K@!B`B!X#B!G!B($a)B!PHR!B--+@?Bu `B!PHR!BjYpSx,*ZM5y6xYxHRָjJ+<.*1QV e͢ZBhviAb\M6mgz2 BМSN5]ήO,p݅ˆ xjuA/3w[QlA17rA~`I po(\w-~xِȇ%\nB|6xQhܲ~B!:L$jX)r%c2<=.' 4wYM6TuFIa\?46xs1,zN+9y`b|+hqrΆ<A6V,s4c9J.'x[pݡB;R]]r{ 2$666Q P#9'7.؁tK.|DXXg!L_"B(Ͻz :)pӧO1R܂2kCB%%<ISUW af &!Bm|UUՍ7@'E*Ah83e04! Em^h..o?B!303AG!](4XҷqA񲎉`5DB_RiwB!1Qnѯ>&4MkImy;-֯X?3u}*r;y|E~KLE?bJA QϾhLe{|sn@_dOyc/f|~(@!P F)/[+'A-{|x>Oh]'Ew|9.Bvg;g&~kSWfxgv<؝|yRܜ^iwʡ g^{ I=bm?;L;^6iROo%t"B(<y͟0$yal f;ώ[3wJ_^1'JS+aNT ^+ ҂?2)A3+^>Ȓ4 *ݒjGso2kUe}'KWO.쵯z*(s^BWJA~BQyrƸ@:5S>:6fs΍m^3f-.).W5CedbM2]qpK->knY-b\|~js t8CFzƊ?\8q7d]BC ?+#J5^}ϲD]qKZ"­+nj7k\2Yq5;^Z$X et髗eӖ#U ]1ľlKՉݠJҟ^PŪMK2+ޚ\ đSeULs98Z6BzlÊjlk|[*`?6L87S=cBL ּyP BUIoȤDASW7S}s4'%.ɤVL A2p\DP[Xi0Q{!kzK/[˼%iWU%7k'O C&jXD|e8rT \=_-UBYIItڬg؛\^W6vw!$Br _KHUB5ʥC$^Ο4OOn^i_>NwlpWZ&#c$9Y–&NHԤPKc={ĸ WIEA!PV;$Ilͽ${s]2cd'9-/I d>dNہ| j <+ܾƚH{SQ:`'J!zhFJxڨBw"DaH 12*!$ 7f^"ALTMH6ӸvLf_-?_~fIJ7?K@`ض}ѿ4m^ D@5EK}pl3w/GA'Yqk&K7 D{tzhbkgyvG?pZ9@)JO Z8{In>,B!R@%uw1W=?!*fl1r|bɽ@s?_]r;H$ @!0xoNj p߻ >QO妧\v~/{t1cwIZ)znA!1bJ[4xiQ󞺩}@4;Jilb!)❗?{ Q@+yoj 8YQ ٴް[ OզWVԅ)"F>OED7{ŋ{#Õ~?iC?}15G{i'MWMNs2vʢ7Z*' 7 Լb ; o! iIKKk}Ϟ]Æ͜9[|ܕڸc$vnws]}`%q׼vG9D&<f;S_X}z!22wR4!Fd$Q#f+aۯQB!V'% :w.76vADvR@!竮\4l؈-.o9Dnpbrbf>\N}:83,ͳwf-_n-!Rn"´t|"5zrRb"tFn K-㜶]9s"5 2^Ҕj,CGT×[7΢ PѶR~+W.丼^o'd{F5|x).o9D㶿h,]u? jXiݖ%L'w,gAF{]Olg t0zxc%~|05̇:Cp<{9S>KEO!ԣy|lllrЪΈ&F6m4paaa@ [RRi5EO~vsMSP8_R-_45}o(uQfiƓN9OkpB'ǹi@;:9k<*y^dxPh[){ &EEEuR@=O>;bHq L`ZipOv.rNCћ_T>in2eܺ<7XoN+L]>=0G6vl >{gywҪ=1 |x$gV&x|0`hjiS7i |7M̓H>Kz嵇i Bs/_r/myB';״a鷟&G+JZG+L2~^˚xz(f;@>p*^z$)ޮǢuynX>V; yК tVfxgv<^/#,yh1S=3 y+ޙ]9C(|Or=ͺd/u[+'Sdw_^B!Pдo?LvԅcJnZ#igR?沗<+ Rgod|EE{~QA}tꉉ?^aT,7LبsjHeiOwn;z;px .yߚ}e͕>~^^^>co*/ĒЈt$ͬr)/o]Z|m♏ 7i/NΏ>4//d,}Iډo,'.N ^82zr>B!PaT%V0z_2@ޚ:=y 4Tgç0wzWwMY4.* IDATaӸD,h@)^3 wm>[FHmXqB]-M{y͜x/Omzntm*qn\}첗Lۃ)O){sOXj[M(S<7+oFKe<=A*NsJB?-PݟTk6+?y%q6V+pI5 $?% McX@{zxpeB$_伔Ȇw'eP2Z;L֪}3txͺWXܛ N⟧Rv!P e1i6h8oېeBMm.w+P%P;{u*A $\*ȤPU.p^O(aK'Jj*A3emdb\+qdǘXYYUA [ e9&$ʼBR}Lo5)o TOﶃuܒ;T 1ibʼ mi'ۖ]h[!?$Q杹Qқ+Wo^. 6_I  dəd-BkZ֍MJՖWʓ;mg'A8f){ > DRgOM?8)R~_Ah|$vHIs*u#*_5YvӁnfNHByiB>kۿ!mTmg-J@ܻ?+|}d6PcJOWҥAJ̈eo<ݗA}/y&y9yK>}z̙c%IxxxpCBWK{2dȓ )wWvM}WS|2hyD7ZLo|/T=?@xD?敹Ɇ/B hR@ A:~ui;A&oQQW!H.+''V֠vH@:[qEq~A@n; 3uڟ vh! D(ĻvKґ. N*I(ҾD$Nn5<?m{=#jO }[_2pD JG{Ϥ^z|}[q&L0]WCd999iiiMٳkذ6ޕk?Z ƹsy3g|;B* Cwm[_wڄ/|9cތ`a NdffRUaA :8ۿ#B[QPqy[y zvIl:Â.) ^!@ k]O>gϞ=vXJJJJJD"9J}?#L&9+^SCwx !nS3 3_XYCw `.]r\u{}?~{F9//oA !M%|i-L`''$$8q4vҳdcǎ;O?ݻ>tPTB׶R>22mU]}#20 (EncV+޸-###;;z+Ws=3f̨*((`&!!eYB(V'% :w.76vA`@k|Օ+ Q0 4E.1nܸI&@bbbvv80N>]PP0;Q^^83>22rȐ!}v(//eԸ';vL۴ /;;/կ~U^^_Sn^LIIm{gر:thAA;N}._kiŋ8999gΜQ( .lM.e2ُ?x6?S.+gȑ#RtȐ!!}R)[>Am$iJE'}wkG2fePC讱zjxgg?w=t'|"NE(**:xC=TZZk?w}r?D#痔TVV0g9p3g qΝ[]]0̨Q;c@gϞF__+..u򸸸g;|pIP([37S~+ #T@[YUeaTtBqڵjq~Œ3EEE<<_TTr999'6={իW;&6ׯ_tttuuuuu5TVV+W֭[Zpu;VY٬kXϺ@qvY4$ }@^evк-6-Qla BZ/*****zիWwY7*/8>*NYn]QQ'|t߾}/^ǏxHMMpBݏ /,òl[0񙙙gώꫯ$uC!3W?Q <ǫ<rBhuGQX\&@[j[J$ku&c=JI$EIzB]QA8W^G޷oѣ9=zCrrr~_oݺ5<<տ3pgp$:wscdžK*uәwk׮\7nL0AT*R)EQ999Mg%.#JG5jԨ .ǎKMMMMMmB(BbvyaZLEPM&6Jn1׫QI} jqEȸ˗/7\F&AiEEE ܹs4MAh8waaa3ۧT*ѣGG=:ي?M[CK p q|iiM츂I4//ĉÇOMM v\uz#IK렛2jk?<лc>Oee\'"gY4mjj^n=p@ù2(_{5.\H$M#Ν4hPKjvJt[uH'&L v8);;["DFFΘ1#t#yyy4M>PWQQGi*|%u*q;qCz/**oasŋ߿ݻUTT4a„`222^1^QQO?UUUӧ}CQRV;PM5hox]vҥ_6M?| J^$'Nvf ?s^kEhMv]sCN ޣ ŞA֌NjUfffݻW 斗4_~_]3モĉ͋)wWsm#"""""@ ܸ^QU%JL墳X#t'z.B~:IQQQ|ܹs:TUUuڵ۷իW OSNYfի׵krA&WWW{<@޽Fٳg333{OoٯQؼ@pd3Rs[WdQQQuuu3O<٫W g̗_ΑDƄW{ ĥ^QqTÕί4'Op}*[Uh##sdH 9&~J+nK (hP{<%!tNEW~:dUg)77RțUp3 V:*%q;Zq0RVpZNwmhyhV7_3\6^T+݌^>5RPW2n[70PgaKki:[mTٔ{XhR(f4sfVi⏘542xY!glbpM!3MDhzKz71]7cb{y-B٣CS@m?U4pDaYK߲BWe()V\-a9RA$EzXC4ʓ欽) M3V3h 1FjIbye 7C'h={@-YP>,+ţEzneЈ7(m5#:j(UT x R6l[HqQfiJRZMɖV 2ʳܞm!jGNfZaE)2-*G&bƭn=5n8;;s=AqO>)ػwo WGݿZ|0 ;ɓ'/_bn?g=E!W)98X\<{q!h IDAT%ƺ W4=RkŸ1˂=n%-Js+v}V Z5ltX4nka˝ b3sN-<kQEL3=Yԍ|WСC iã+**~#B(tE)}qfU\[tϺYAG<rz(pzxI5WUJxIXՊ+5fde[=R%շ͸Ƈxˠ-]<:|˗̙#^|EFDDDD~~ѣG/\ ^_cV)q}.0@}4,lrrYʓiZZ!gw @k*˲fGY5RYfwg)ŕTU62.ow~#X .lvKSpiYJkw*,[tﱪk0|=Q+lZ=,S4+(n7R6a_T#fdmx4`xJ$&=NQj eyLMԠF%cyqU Yj-];6WKyBRYdR3 rHemDŽ-ر#11qҤIz/_v=AF;vlQQ?񏒒`GP*Z999ii;k[>ӆ}"NKg^ۀwuY36])mp(6))g--]Xta;wnРAGo:s݅=PK;?X\y uk׮>s#_qyؤ߾q[5zGƩnSG/Z9"JgΜ@ݫO>SLr劌LOO)^5VA]Int ƦIb]s[K'n/; o B(ٳ'===111؁ ӧO/))9x`~ӣB wRܾU#{-!z]v=111o}W ]-)))))eٽ{6L`C[B!tґ#GϟX80Qܥhiܹsĉ@HBAFμTИK%Efk򊊷 (hH1UXReU1FHrC"4JLjt@dCh,1Q)@cp%</_ .Y9R#q‡r8''믿?w߽e˖RpJ̠|YE =PdQҶ^Z 5 6lI ͤ팵d~03f/][(m5UAPNj+!13XU5h"VmPn4=(&D/N]@ک%{zCV'|13E.5Xɤ5R#C܍Ϟ=BL\PR?~yNKTe,%h( X`ܥɡ*((]R tŕKDN)mLQg BCAݸ`yMTzVq"1 (@D3MW>Eoƾ|fQHwK*Z.lsoЗLK%"@he ?h %4U-q ؒsU TNDnVOh;!0[WsTNT-p7Ϛ5kܸqG-gmO-䗛~t{p)x! I)jBn-{yX}w& 7)w׹!D԰-t@P?jaƏ@tc歇pQFv-Ƶa$fe$0\L %q2 z] #I))6n"ư ϥJ*wρ pz F""kГ:k ~YYٔ)SJ-'Ќ#{p "u!aZqt?!w|n,g <[w!Rڽ&z7Q' Qr7iDi,8FM}Xy/AS%DĈo9Qf*-L0̌`范3(,`X${Xf[O_?((r.ݹykaHnk 54ߒR#i9WgϞK-ju}Go˿M$2N+믿=zoyRp6;K7҂qD4B }a!\`Md.,/*r@YQbOv"iYV3u픶mZ$Rǡo{ G"a`-U"vAVH^QoL/d%Pk#,PI^u>/X/ G@<@.`ME)? (  GB\ e*y[L!FDtRGsUG8q-5/(ddmFSᄅS_?/g(lStWGpCADq1F^ эIJci9$۳1RC'KFYd;ZJoBH4s&!Uqw TԍgD!<)㲥dY;Tgd߮XyLj{$$f"cA|x޽ZU̩SN>=f̘R xR p DMWyCQ ̙3r;9rQJU<0jԨ;wZ3a /I!N~ɽ RPj k6k֬R뮻R\w޽{}0{- p8kݻws=zkp8%C曥 ܔp8ѣGc{op8%#BZZZJ-ùpS~PKcĈTBթ x51Bf W#Pq,nI%FHLԲ~ e  Tj2$24Ah*hLrȃH5yE[BeJ4bdXyj1,b<Ӡi2M*En"d~ZN#B[/v)mS1Bbbܢ^293$Q4_9l]k5|GߚM{xpCh'T#SB^mͯ]t뷭zլ;Kbj?/v4yRpJ̄ nwyB8o 6myn-ϩQgঀ`KJi&mg%I6+.x:OBi! 00Ǎ:^4%\iv8QAj3CΘn4=2icVl{.&ߴiH֤ͥd) Iģm^*J%Ơs03ӄFirs#gw1X;5˖6˓o})j'My%{nQoR pJϤIFvorHW wĉQF ݗWyX}:HU:e$vݕ"fjRL"~U ICϏX+ė^ܸHP1bEEaR3MM̓푗$0JN[fn3k)$LVq#? Dσv6s;3l|"$$Fxyh2VTPΒT9p׍d 0Y aQ/[>פ$ZӖ{iȉ-V[nj_7p.| Io\TTT|7ɕ>|x%q8fMSGwZѕo&j&҂qD4B }a!\`Md.,/*r@Yٞ iYV3&ESFr"q(@۞ BH )WIHF򓢷Ҡ*Lm0gc ͕ uy!w,?c FaT)uс=G>$׿Ttns@o]*wߟJs)h賍Ow~.wqfϮcǖZsr=4GfGgMw77G(?p*%e!$&j/g~\i9WhDtcRĸ=XZ9&d{6U:[j䲽& r>bψpһE@j3 +!Pc8nrj ʓCNa- zJOvA[/ȸRΠt6.@.eMj{Y3%ѭ,1!15}$U,`傱㧋ǜ|prk==Ƶ!{wo~9?(tfPǪ7WܽTy32~)YU^ ݯ-jKUV VwW6r<O{}Jo;Jsѣۏ;9W# n޳gԩ_ց~/hѲ'4y勅fkd>ZBUj({dix!!$(44&_42^(vfkw/hV4;*"+PI0 --5/cĈ830^!D4[өh@RFS~#JI!䗩|g){Lal9KKsW_uttr-2l9t|Pjɸq?Z3pݔ묽ok䕯45أ BeZK"N8vƶ=4%I*YFG{×̥`NMu U@ЖleZ:^(c=@:уb+Ue/H1ZݞF+TBbMd ϵt rHb T2H픶y2FCzˉ"pJ4[ie|^ [3SZdYyέAO?ݳgOUp.'7|sE--- !ʏj!R-\Ё.2sJDBPT)d D=-iM,U$Ln=սc5Dpw+DEr3J&$ 1QdS>0ՄĈ4rG .20PdHp]zs?Ks2ᵏ,M\g+rBjR(VI? \%JՒFf,VbBf3e:#WQQřIr(VRm #GL0*-loovYj-(=z[oUj-@61 (@L-AjEaȪ;~s#E!βGBaZ\@d\IDZ+f{/|<`F9Q8ĈMZM4.@PI3Iȓj2!̛BY? !D` m>;RBýab溠>$6^ohi}f.JZ ri ]Djo So5c;o_}ۋsUA+5pJ+=mC^zRœ(0m0 ?|c|7s ( p 7;LJs)?sӺG h i<)[se!vƴI:J׆N˝$b(.ыUFDQBKVcadTPo^cB,F3)[TFoK#QSA+ov|LK|O=3WіxKu 05l?Xȑ~8O?Ϻ^Θ1t9` S As"j*5wp ?7*!;Nkk_͟\]|ݟ={ozyw8qn(:(9C /I!N[x 98< ` [[8[omoo2IKo9~x4ƍʹZ2nܸÇ.%q z|Y9W ܔp83g?~/nqر-cǎ1\-?~e _VU`SB;.9P*=OݞQ;-IPjL[Vvbae 8?SfP*eS2Ru沑#9bNjesg(] Wܮw yu^CH0ze AH(Bh*.$&XE qWA2FFBSu~>úrFL1#`%c75ıcdžSqG^!C>1cto9rvݶtMs~^SN}'m8rR>L2eg )k^۽_u/kX,yɪ1D|Ӧ =4VRqdBsK Iģ IKR*L&B.<DAޮTbQFCzˉ\м*lu %/[3NشIT2Bef*ԪUYK'ԕ܄dgIKs<]"N81j˼{G閛J-n~}.Fvm[ v켖RwgJo߬.s:R-v믿~衇.o%d ƛ4iȑ/3Gyo?g<Ӄ=Z)A&X6*%To'e:WLn G䚮\#"DJ]'ba*iHIB-AQ>R-]ФXNG`1"P+$EolB70iR@|JmtFhVV43հOKdI4Y)Yd  qb#AnϪ,=U^q{U\}i%\fƎ;N:xp? tm}m ؉+|Iwosb07A6Z%UEPCQJ*JLz+3(?0\0&j'ôh"bPZV<5 \O k-v\;hE3ڭn@4 6:c*5tsթ7:/bn]V*ÖAklI~:ᔒ'Ndsm2^?~CCo<fz U4b(hф—|&ÐGZI`_1t$ BJFDDUg UԴXBQ) @@Uȕ%AOFj*\q|ܔp8kʟӇZ?]_;y#(ϊKnz9t\ס*Xs( !$ @q%#dvgf#RC1_f}(3k[L0EÜ+ 933/ASv',`X${Xf[O{esUPg=UJ ok]Y%4B9Yl5)1a_p8`7fie0ꞻo/r+1HIHFIJ_z2~U`@[8R5 `0JO(ݒtK픶QEHT$ c˪^o +ܙҲgLB@%:]<`V*nKDM+ 4Au:N$J8w4@UN+CFDtR/p8ns8ε`7JG~% akqRzjӫ-'TܙtOA|xd\)gP:L OL Vd[51FHM  -Wb\qz0BQQZԍgD!<)#4)%`yBk!1+1SH<%Y|Xy4ָX%5)7RhU̴tE+t/s/n -D1&Y+evR*9 TDttt wqp8εȈUسgԩ_9wn[y@kVU]TÊA+d$i 78gD?0aB1={Nts̙W^y婧mvw 6`˛S2oW_5wV\6rlS2W_{uR5`syx_^YWb2J335pQӕU7EJDq8rSNZpJ*rC KźґX3;mp8ɓ'G]j) ܔ.`%ѳ 'IRpSNqSpY{+pӧO_wuVp8Myù9s 79eM/k䟯aS"* ̅R; ^X+1m ^JL䄙Vu RAF#J+E-^h4[ݳ-n#dpM*1Bb#ނ1Wi^d1H%i=3pE\FDB%ĝ-8c2bfdGNG79[VjRL99sQp<\ )??z?~㾛t 7T0+Fg!Wikk[b2=Vjs0rrەnՔ ߲#gs'S]uBSg'J+2^DZ%6@h͖R>@`ƥg&;{&Ub? "VbC_3<8s̷~[j) Cd ><\,!K(cJgNbL096ks!"D3YuAu( EV2 D@S0"((WbңkX]魂h>hZ~qSkv;-聁z+ғTw[wZv`O[55vdUbyI4vAgIp̙3()p8и;~Q+"032@ 5JL ЖSe7ʦL;`? ۣMO0` ,?8 DMULn(D,Ru\MSyg`={s2$??aDq\Dbs]kkk3( {ga HL!ۢzu)BO";!:%K$Fl ͮMh&BHC(d!Ƹ/e ̅$NФ]Z|~yѫŹ0fqx^緺) To>+rmINQFs85P_ Za['EPfz.zc"|!{>fnP]ЗUP2iXGQjuT}F閤X$Q<,.*r@YQf֕j6uϙ釼7RŹP|?r1!/A@]3 `1^. (" (zËSFxjYB`79o=}tUp84 )k}V 7RQRKbv.%!r*kRR;仢1SjoW_5wV\6zB.Ivk ^Wx>R2R\Y1JDq8+ WWϯ7VVVv 7D pJي:!su\DԓHNmgKpJMÙp|CQGy:m,/6v|Nzm[MoJNcZv8mZvr;+V ɩH@DZhR8њH^\8Zk$`EB-eMK^!o>_vc";TaP~̪7pXQk8?x OYOoJ44ެgғSBI勹X?1ƴa4hOr-k}uLk4JN[1Q(^4 IG,:vLhE?&Ncx/E¾Fǿ&utIŏYn _=N77M#&&VBclh4\>-zZp(B3Rfz}R:(۬?;(&߁^a>ҾuɆuADE+r?ʿEZx;yޥءCy1`͋iM$ ANh>\APC䬕'yxG@3wOnjd!{( T"C!5c&.u\^TpZLr̹<2NC }v"Ƭe5Y99dw5'S寫/NsқeͤCeI9fh}K* O0v$٦4nJN8lt9kg!͛c\ryR؋st9Rێs!anZ" s fwV9@484];wwfy&s"@O9Ʀ3k~r{鵃a79&BJ2c/^ˆ$͔"8 )y:v)cഛBKKXap6Te,|eQ_ G!0j8n&V"&3PÊ@[47;vbc~thƲY$N eN΅ԢhGyn2[ZLav3Zfn3-"HcQ95+n<¬Nsc{tbaG՛,.gq&i9cκc%]QŜlsvE5-VWB}JEӸ6%i3r|P(QEnzq^uğy|{Om?̚ _d}{lqҥ3k~E}!ݠxui'BHԒ= lGۼTJZ!RVFJ-U&QڒU1X; u e/d/R 6I6DF/kw)rfcPn#>n`o%#KyJ[ a3NrەI 2P IDAT@Kw*FCzˉ #> /k&bf<f%Ӑۨl78V'"5iiMKv4*w%l;1k^*mdj$D}qadB*pPlÿ-mYe( uQ6[fwpZOo Ч0ֱY|g䘘+7o?Tb"F͛5kki;}}K:EZT5.rn\GdIJx^|ULSץ;Wiuՙm+WnDNmn>Qf3#_d c_3=>,^s.社-X_kY.51}ݽM?W@s2zϴHI7S'zc!,˵ڵNs]Լk;1:s_sM|FHSay;7b:s. ;/{-n v߼Ë^n~w}GjxC*4 ӆE\ |#Z#uA %ރ\ӕkDVϴB$!V*/KgXߕEV$ub %dOVT%)m鉍&Y8(DPnwEIn  "՗j%"ZޡuY.<:@eSI*>Q`^f D+8TXB4 񲓔S(Jp3 P3"@RXKd%L!310^FKԲX}U"7{A HJu"٭?/UF0T"kq"!a25tPjz-hw}^3jsw7YqEg Źi [y+Iӎf%lu9Q`gc'wԂ4"n>^-y*椦=޼؀e˓?Jx>t N:'22u6'>_,J6<@9@k3/2=}/҆w(bOpêN@nDt FV*=B!WTBX,L0{PUPA$] "ZOF+ 7Rdb\H^*@{a4ܗFtuA%@dftG{Pg 9e:]0-@h1EḐ۔>"hZ*jSC_2-",`# &70PVy&%SnWfFyrڎqAJ:/t%%Ln3MKUPqJ G_ɓgG_$ {Xnu5E=ZPX+k;\}R{5cSqM]ƦH}\+paIhQsf\$x݂gΜ+7%sq+60}{]>dznQʧ?勜ES}R<|瘞4=g"' ?Eݞr@[inϽXm<f|yyMJz{Ki鮞#]_g2 4#R]Q-㱂j8r==v*#(_ vwK1cR)4ZVrcDR %Cŵcb_=Dd!33LI1SÕ eC푗$ގ<*{d2&^SkMϻ=9`C$ N.e~p8A.صvďn@8n6Jw9%g,c?2Ia,9#*d!;00ʅ0 ȋ#*e*4nK#ٻ&'U꫗2?]{Ky$l11J*BD*qz;W9a!c)҃PAvIxl7 ѱdU8F=( wDrHz @u{Lzo:7M^ybXC[}<+ruuuRíIYDig^|-#X߲(rH0$O&}[Ci~xN d" %E :]!nALIܘejd# I$wtFθŠu z3ѩhPxc1!(}W=tF6Ζ;0n`o8A[b  cWc_4 DjėpDE+DD$B?pZ}b "wEaWd7$1Te[O3Dk';ʒ!Z[[Nڈu)4NDU5iTV fN/6;_S4ߘj-Ra bͬ L>ikzmi xֿt"Ftnʯ^XeOY2#^Ω7-9d xF!C +ʯn_5m2IrsØc[JEr`.jӏ?ы*uW`tqM b͛mF/,!o8y e׽jpsy *+"J[]V*7YfS_}&++Q_*Ddnb\+5QT46Chk 5\aO CBRRRrr)@^]^^^\[|UU':͙3G f g>2$ًϿtߝ1_&Jb}U|Ǿ4ÿpK$4N٩u F<` ,όe63UX`HJJUPC<^-{o0$''1B/F 鰂 R(nIW`z%"c7K DR~G""[3x/2X!$a=og^I 8/2B!G)Ǎt]t}/N{,5~xF$X'4 <_$ ̈vLz0h+o<1[d9Rgq9S FvXݸҐx̧KDICO%M-"U!K{ʘ7Mkrٷ:#I8EV#e)$_zlH[MsJCN;B m1^uۼg#@DĚr"'䋲|Q"",[$[|+$XPb \\F [DW({eGn\mdi/)<Ћ,X:h!999kRێfzM/sm $*>j=ɲJA_79"θZVsF~ow6+\/Pm~k\%"*Xd`ћD[7QȷIy'ݱ[A9Y+O1%NE͂W޻6aSF0Cdz`T]>Wҩ?ܳ~Kwnc]v~W7u]]E{;` {C2'<"+gܼZg~[B^K<*0I>Nj`i7O/›XҺPfO[y GnUٙbĈ?B̧+?}y?|Q%7FeQ~ `4H^L$MW?(  D J1FtFG߸io3vs޾GH7 !)DkPX"DAq#TR^?Di :RWyǾhIݙXϯCnz{p ZT+èikzmi xk\F?zbsovc3 g)X],E<&`|춡1h@7YqFn(g߶oNOoUuV__nϛzK=Vg?M{e>(y=KzIף ;Sz]3YRw vW;n㊽owjv=θi`pD"jg)$0]W.///.1 h=3(艧%r_KEEEQQрDJLKj6~p-B%bN}:}t~~~ZZ_?!d'eΝ{GyrgL:гm˶׽uٮϖ^uSuӜ9s2`v}pv#c䏏>g/>bR}wz+Mw@&}i>edd&R1/!NV߽5lkx?VCbafSL)5m r_ ,quSb?biȑL<*333kb9)zw;6<# m[@|YK(qZpg{{{3HO.:th@i""j]K &̺:S Yf͚5K9w… 2,8/=[?[ rEEҥK+=fԣV o]'jW=kӋLQ0!6@ x)`\F08ժťQړO KFuUS@zky5#Ok1>04vئ&S@e'qPʺt) bMj\=6!QY1>04f̘'Oj"D"۷woijjjnnrJŋggg7<8 o۶V=jnnvZo c7Wĺ`jږcr{]Ob|8(;;1'''{kNdɒ-ϟx?޽1###;wʕ+=M:tx}*++xb=ޱ*N]IX\f8k= a`X_?Z8XyfϞ}aS .'O9rd^^AJyTPPֆ5444Ȳ0AJyۧu!o̘1Zeʕ=Z";;{Z!/???##ɓZRSS33SvO: իWm۶vdfF1jԨۚ$(C)0,̞=ҥK/_:PLj#5G>s5ӟ[VA41uEܹsG:᷊LNjyQ}nPVK&bNXlbZf׭S4y71nU|ٯ^d0zA0!dzMj =^3>p!ioO*6]d}7d5Fw2z&lRdq{̬4[ ^VZ_hd!E$l6[= ʲ qܼ01Uo@{Ue)貘Lja&d+Ck/H}3fOtrCƔ, sDm"!cZm`y. qD a Xj3a+0L>`͚5))WycH$JsM*:$"LF&G2',nȨ$y|2Z|߿?)):3._V [G~5d CE&P.:f ^xf ⶚,2ld1Ę7EZ^vyc{(Jv9q6+YfvSx8{cJJJ&LulfPeIܶ!?כDVye  =^b`"ȝ3N}:}t~~~_+L?!d'}>Gu#==] p<0R -##C TrrhO\uAtpsݻwO>u|/0 Z'9NO8qeҤIV;ɲ*pDĉfN8'"Հ,X 9T5㋬k]Η_&RXK 'Da-D3;\p8woiiiQG}?m4AHJyos̹|/((&LΝ;7o< RG^Y%A>H匔:e|cgq)s}$&."IDDJcdx"%%e[dYXtVb cA;vժUp|qA%̗򱠷a2-n97= /iwGzbC2 hl&dqծ{+~d6[}ED&)))--M1ua10x'>}:???yrCeffΝ;7+ݚs-\P ]GGG[[[$IMMM ~e˖quP(ueɼ#G)WsC)^Um۶%d[___UUtQ :ׯ_?r+++ӓ@MMMǎKMM=tYb< ^/b(UUΟ?ܸqHZ',.^m+V>}zp8{'|r#GN(` effXPP{߾}]cmz,˗.]6*++o~I&=쳂 $%Ad޽]ӛΟ?mXY///h4N:C9pɓD"ju{:6>x]xbQӑ#GƏ?j(N`}uvvjmX)**[hAȲD&MDD:.Z1?|J対j޽#G4s:@/뛚D"p8ھhѢ4KD@ t9spȑ'O7NPرcwO8ӊ,TZUUUYY9nܸS?^DP^^}ӧO_|yرO#( 222x`08jԨiӦegg&766fggt?ȑ#G}u'N$2uuu'Oя~0$Յb=))an]tlԩ%K4J7P@3駟>Y9sffff,O:uF6mZ0a©STU^($p8\YYYUU^XXOh>DDuvvv_MP(tڵR*/////ٳ~ܸq3g裩S_p… iiiƍKMMTUMǡSNe .TWWM4PƖ,Yr^r%??ŊDTTTTTTݻwϘ1gUU=0mڴ>R,N4iѢEXC)ڛ?E1n~…UUU|Sr31 3nܸ &D[Ξ={…˗/O4i&B)E_0" /5& P(D"HjjѣnjSN=uTVV֙3g})S90h< v l߾$:f8麛˯\2~)StsD"W7a< vyyyO2e CUGLM=Ξ=k׮'Z]]=iҤٳg,0L$i.\{KQQ /駟F"ѣg̘1s̶ݻwggg'Oj4R}h/**2LD3Y'477O0>+++333zKVP B[[,wޤ'>˷n &LvٳgWTT~]`^0d,].ipI9G?E1??d)SΜ9j= (`(YzѣG+**[ǏAXzuqqqFFFڵks̹.O=ԕ+W4Re˖ɲ_&lӧ?h߱cGRw0aBNNN (`Yt$I~iffftIu|WZZ<08!yϜ9 TU:Nٳg̙yyyZAl`+((Xt)0Z;w<:z@< DK >*++po.\~zaau봎T|qqqs@ٳg%կa 3q{L0a+R`Hrn)\zk--ZͿemQ[[km?s'DDi«u\V~B*i3l$S:'w_ӭW3ǷW"5q/ˌl10mme!U6l}R+jշߪC4SM3}nP^=҇eDj-o?M̢7|]FD??:n[բ}LFܕm 7w })eTD^ N뫜_䠞ge6y zugrW:?l RéwxO?4=H=v|-Zkk)RSˢKOU&׾^QW:~;~}s{Fx%3vm)\5CRjE6ע_ 9Ubzni>/z1֛jn̟[_w5_r_*hZC)ÝThܾR%V4"([2[S N5\3<ݤw`z^Z4wC68{{->؛16N9<ݷWCl/W~7 ߇>гJN7F2!Ce?m趙z]o23P-zkin"c{S*zʵ+cܼ9ŷj6OS]Nkt2l oM%:tk 55w}檲?ļW:qgU*֪2r-{$mU|#ii*M%%Va(`u}D"ZgH`vOYusLZxܹZ?n:ŀx%E|{`0@CHl 7^$CJy! <R`HB)0$P I($CJy! <R`HB)0$=T)r:STCǺ[|HN` ޾t[Ey _ߦۨj <pwg&AW1Y"" ue2n_3J^Q0!$^M\]1Lg ><Q <2^d0Ԡ,Dh0~V^،+rb1F?PHX zĚD${A/MgG{.g ]&Hٍ(3mb2 6BV [Dr^VYopJzo|fQIvj6l>U L7BVLpXGeF}# @=Xyb$K6ZN`ŭw>c XD CA xÐ$ v6eN^\,)2_ ,u@/z~סWjy%TQ߭a9H٭~'euRC$:n8}4 Gzf%3 #I=pYVMN z3H]6O}1`y6DbQͮs#06""9I%""$bpc q8S㹐,:ꪖ!`3DDN 1 DzQrY@KkDĈ#gscvdY1ҿ$?: CDnϚ62ĈNح4 1̭߻ bըX%koH8O2z=W &Ԑ?8"Tgzz+onp񄜖2Y]/PopzGpMyȒ;WYax#" dp9A ?HF=I~_H>6oZ>gH y&;9.ABH BgH+(SLV"bYU"JCK ',xjЭǟ$pOmj۶-b}p89bĈX[h(pvvvvtt@D4dv@ę,2Z/-VPƨ*#:<pvѢy^0[Dћ7vdx=s{76o(XU"bf2pamBr2,<x""FYV/p+p=X9n6o3vYDA=1u/@555Ν[pa^ZR"rEEҥKp,M"ȝO3X(AD%c4x! ߀?Jy!'KO8 x,b12zu< >({Ou xu@ E$ٽ{wk׮555to?Q _v =gϞ#7WݬYZWWWWWcZszzz|C8m\?ȟoB) NӽG# *=>m1V_RRRNU^y^D"ÇwoQU… }]ƢF>8Cz4fee7W]#Gјgh}}}vvvƔ) N7u>h"͙H0=N qVyb } q(ZjkkKu'{RF-˲)_"HjjAb<@?V/,i"+_^^ȑ#3fY~yi",{\ *\}}==Z 6a/^ ZsăRL: fׯ_eyJySTTT]]ѡuKJJN(ٳ[S@/_>aJy|KK ֘8`0N'(O<N SN9rA<HMM}inxիWMuA)4>KIDAT{1e+++%KW(̙3eY>AO?tҥZ7eŕZ۷xbao)qȀ WKoD>2~^o3fL!۟|QFi`ٽ{wqq#03z4u⫯|<5j}1r]vj`ٹsܹsǎum$T)ODtP 338Ft:NKJAwYRRqY;vu N|eZc&kG`g}qu<@\Dм|w-..nnnw߽/~ј1cbW @3⯦&zM7u׿s< wϙ3G,ȑ#+WLKK:A|NYT}RHaY1w@|Ν;r?\ ( }Fu< R~wE&h3a+@̭^ZڴifϞuֺ:$CSOidHR~m|Ihر>lyyѣG0}ǏZgD'"Vг`PHJJzꩧRSSwqu U`{Ǵ2 i S^`)**?~rrrfΜuDCbPMA/߼)G˿O٣0" `,SO%%%y .h`hoo߿(zꩧA: 5z/sp@3m-,Q0̘1cҤI?>L ЗSN;vl޼y'N:ˠ6JРP-;$ѣGk`HJOO_d?駟O6MDK}}sssy SŢ"S[~~~~~#G>;VD¡CEYpavvY)ٳgO4ȑ##F()):f***Ξ=;eʔyie(^g.CO ump ŽBtI[p+ NϻHЗ;Le2fK>1 %;;[|С6[UUں|)ShgѼ8gϾ~*iAtt2n qw l=ZCViM0aժU<ȶmێ=DN555۶m_r^OJҼ.zxgu5ևcX%bY6}`HEChGxNX.kقP${$F~/2Z"O!"54HoaYa/utjm(6 xas^=,5!z "o_l擉BÍx帪uѰ'yR bi=\jj PmmΝ;QC㽶߮s`_k{eچ='qJUU=zS0._{ݻwk% iGҖADd`d@ DXasE!)R D\{6y[L$ &#KMz7Q0I D$p,!h֬YEEEǏ/'MTPPu"PUUu\$ARʷuŬ%:1DaaoxkC  ]8R0wR6l |cbg)puHO $gpZ9stvv555v B\26vߐ\bsop8\{?g=SRRHr\pڏ'~q9ieYfh͋+9V~)T?:aTEex%R^aq+$" oeYVoÐor9rdgggcc#559)Bt;N7I9Z%LVfgwwok1O/=}gRīD`s~$U=7wbMMR#2jtaw5ٍ52|^fͥ!afr&`4 n@DdX~nv|>^ntB9 PP;6.Pfq:;;" zxLf[}Vf.9FO$y,61/i. 0,mc-krqѡrY:dRR8)M f1d+3i - 7-t |Vyopq(*_~/~vO?yA^!Qk\|{3o_DZ>~/^|?nDٲK3g6W4lYz+%DlXH$iزz{GzfH˙3-Z?6lZaOK$ҲgÒMGl(yeOK$rȦ%hDZv[-.t$ixeH$rdS[~;\;i+^qݘ.%I*gH+iD(QIm"+/pD,I~L*10Y.:e98dN",KA&RH1\a^{gC:]k+VV#".t%Ky'g$I!]>HDdf$))I_iWd_X)$xdR$XY^ 3`ƌX#IVI )DnL)dYVf',nȴ\>^Jgh_k˚^8^xʚ%)o"r0MXVdzx@ _Ȳu.Ģ7oߟWQQ1{lbʗotw^|Yj-)-8oת `4/]N:XDk׮ɲ\WWu">~|N=999999/^666F"y9Ϊ`0ܼbŊ񏥵l6ku Ty0z{{,b)--]`Ν;Z[[].ؙGQ[n[ l6[eeCFGGpvvvYYi `r{1L&\QD5w\ Cj( *(JnnSRR-iii`ptt499911Q)Ty0Be=XVV}ϟ?`` p:6MSitt[Qt:Kn;Q$ ?ԩS-?DEikkSU5MyҩjkkzVuWCCC7od~<%<DEEE?{ѣjdYeڵk|0TSU5''W_}WS :v@W_} =8?{Y445Fcnn}>_UUbH)<oD/hC1LoG}422u-=zn?WX+d6}]gʢ9zzzΞ=[XX|<Uh̙3;v쨨HKK:ΤqիW%KjD1oiooxq&۷>zӵR\\\\\qA&$IuoSĜb~z_U%<K,kذ}X"ZqKCufzoOV!B5[v3|H8|9-V!~U"<4jHwߡy }3ܢԢ-o>:!BGV-ܐ߷zX0P}!# j{OJ>Ef6yßk>NЙuK>+56mR}ۖ !BG-{f]oh\S\!D>J,gb<:ܗ)gMՇ*'tHʍw%oVo>E:5<]ݰ@_ Y~%Tt!V :ulRX 6żܖEu44) <*tHzgI9UzK!ai>YбkfW෾iW#څk{OYjV5!W<Jj2wECmRl,yڶ7.> [߼_dl5}kͼgɓǤG0ᘕ:Ue +kC%YEoK־3gk~\ Ie%~Z#^Ym&#LBHYoxz~_$MbPU ,xkf|5g|b˽ Zz@.Q]Dt*U%<KTy@.Q]Dt*U%<KTy@.Q]Dt*RudSL0LbP@Vx^So.Q]Dt*U%<KTy@.Q]Dt*U%<KTy@.Q]Dt*U%<KTy@.Q]un:::0,XuL@.Q]gIENDB`mermaid-js-mermaid-9bb0ed2/vdocs/community/n00b-overview.md000066400000000000000000000056531433273745700237660ustar00rootroot00000000000000# Overview for Beginners **Explaining with a Diagram** A picture is worth a thousand words, a good diagram is undoubtedly worth more. They make understanding easier. ## Creating and Maintaining Diagrams Anyone who has used Visio, or (God Forbid) Excel to make a Gantt Chart, knows how hard it is to create, edit and maintain good visualizations. Diagrams/Charts are significant but also become obsolete/inaccurate very fast. This catch-22 hobbles the productivity of teams. # Doc Rot in Diagrams Doc-Rot kills diagrams as quickly as it does text, but it takes hours in a desktop application to produce a diagram. Mermaid seeks to change using markdown-inspired syntax. The process is a quicker, less complicated, and more convenient way of going from concept to visualization. It is a relatively straightforward solution to a significant hurdle with the software teams. # Definition of Terms/ Dictionary **Mermaid text definitions can be saved for later reuse and editing.** > These are the Mermaid diagram definitions inside `
` tags, with the `class=mermaid`. ```html
    graph TD
    A[Client] --> B[Load Balancer]
    B --> C[Server01]
    B --> D[Server02]
``` **render** > This is the core function of the Mermaid API. It reads all the `Mermaid Definitions` inside `div` tags and returns an SVG file, based on the definition. **Nodes** > These are the boxes that contain text or otherwise discrete pieces of each diagram, separated generally by arrows, except for Gantt Charts and User Journey Diagrams. They will be referred often in the instructions. Read for Diagram Specific [Syntax](../config/n00b-syntaxReference) ## Advantages of using Mermaid - Ease to generate, modify and render diagrams when you make them. - The number of integrations and plugins it has. - You can add it to your or companies website. - Diagrams can be created through comments like this in a script: ## The catch-22 of Diagrams and Charts: **Diagramming and charting is a large waste of developer's time, but not having diagrams ruins productivity.** Mermaid solves this by reducing the time and effort required to create diagrams and charts. Because, the text base for the diagrams allows it to be updated easily. Also, it can be made part of production scripts (and other pieces of code). So less time is spent on documenting, as a separate task. ## Catching up with Development Being based on markdown, Mermaid can be used, not only by accomplished front-end developers, but by most computer savvy people to render diagrams, at much faster speeds. In fact one can pick up the syntax for it quite easily from the examples given and there are many tutorials available in the internet. ## Mermaid is for everyone. Video [Tutorials](../config/Tutorials) are also available for the mermaid [live editor](https://mermaid.live/). Alternatively you can use Mermaid [Plug-Ins](../misc/integrations), with tools you already use, like Google Docs. mermaid-js-mermaid-9bb0ed2/vdocs/community/newDiagram.md000066400000000000000000000212751433273745700234370ustar00rootroot00000000000000# Adding a New Diagram/Chart 📊 ### Step 1: Grammar & Parsing #### Grammar This would be to define a jison grammar for the new diagram type. That should start with a way to identify that the text in the mermaid tag is a diagram of that type. Create a new folder under diagrams for your new diagram type and a parser folder in it. This leads us to step 2. For instance: - the flowchart starts with the keyword graph. - the sequence diagram starts with the keyword sequenceDiagram #### Store data found during parsing There are some jison specific sub steps here where the parser stores the data encountered when parsing the diagram, this data is later used by the renderer. You can during the parsing call a object provided to the parser by the user of the parser. This object can be called during parsing for storing data. ``` statement : 'participant' actor { $$='actor'; } | signal { $$='signal'; } | note_statement { $$='note'; } | 'title' message { yy.setTitle($2); } ; ``` In the extract of the grammar above, it is defined that a call to the setTitle method in the data object will be done when parsing and the title keyword is encountered. ::: tip Make sure that the `parseError` function for the parser is defined and calling `mermaid.parseError`. This way a common way of detecting parse errors is provided for the end-user. ::: For more info look in the example diagram type: The `yy` object has the following function: ```javascript exports.parseError = function (err, hash) { mermaid.parseError(err, hash); }; ``` when parsing the `yy` object is initialized as per below: ```javascript var parser; parser = exampleParser.parser; parser.yy = db; ``` ### Step 2: Rendering Write a renderer that given the data found during parsing renders the diagram. To look at an example look at sequenceRenderer.js rather then the flowchart renderer as this is a more generic example. Place the renderer in the diagram folder. ### Step 3: Detection of the new diagram type The second thing to do is to add the capability to detect the new new diagram to type to the detectType in utils.js. The detection should return a key for the new diagram type. ### Step 4: The final piece - triggering the rendering At this point when mermaid is trying to render the diagram, it will detect it as being of the new type but there will be no match when trying to render the diagram. To fix this add a new case in the switch statement in main.js:init this should match the diagram type returned from step #2. The code in this new case statement should call the renderer for the diagram type with the data found by the parser as an argument. ## Usage of the parser as a separate module ### Setup ```javascript var graph = require('./graphDb'); var flow = require('./parser/flow'); flow.parser.yy = graph; ``` ### Parsing ```javascript flow.parser.parse(text); ``` ### Data extraction ```javascript graph.getDirection(); graph.getVertices(); graph.getEdges(); ``` The parser is also exposed in the mermaid api by calling: ```javascript var parser = mermaid.getParser(); ``` Note that the parse needs a graph object to store the data as per: ```javascript flow.parser.yy = graph; ``` Look at `graphDb.js` for more details on that object. ## Layout If you are using a dagre based layout, please use flowchart-v2 as a template and by doing that you will be using dagre-wrapper instead of dagreD3 which we are migrating away from. ### Common parts of a diagram There are a few features that are common between the different types of diagrams. We try to standardize the diagrams that work as similar as possible for the end user. The commonalities are: - Directives, a way of modifying the diagram configuration from within the diagram code. - Accessibility, a way for an author to provide additional information like titles and descriptions to people accessing a text with diagrams using a screen reader. - Themes, there is a common way to modify the styling of diagrams in Mermaid. - Comments should follow mermaid standards Here some pointers on how to handle these different areas. #### [Directives](../intro/directives.md) Here is example handling from flowcharts: Jison: ``` /* lexical grammar */ %lex %x open_directive %x type_directive %x arg_directive %x close_directive \%\%\{ { this.begin('open_directive'); return 'open_directive'; } ((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } ":" { this.popState(); this.begin('arg_directive'); return ':'; } \}\%\% { this.popState(); this.popState(); return 'close_directive'; } ((?:(?!\}\%\%).|\n)*) return 'arg_directive'; /* language grammar */ /* ... */ directive : openDirective typeDirective closeDirective separator | openDirective typeDirective ':' argDirective closeDirective separator ; openDirective : open_directive { yy.parseDirective('%%{', 'open_directive'); } ; typeDirective : type_directive { yy.parseDirective($1, 'type_directive'); } ; argDirective : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } ; closeDirective : close_directive { yy.parseDirective('}%%', 'close_directive', 'flowchart'); } ; ``` It is probably a good idea to keep the handling similar to this in your new diagram. The parseDirective function is provided by the mermaidAPI. ## Accessibility The syntax for adding title and description looks like this: ``` accTitle: The title accDescr: The description accDescr { Syntax for a description text written on multiple lines. } ``` In a similar way to the directives the jison syntax are quite similar between the diagrams. ``` * lexical grammar */ %lex %x acc_title %x acc_descr %x acc_descr_multiline %% accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} [\}] { this.popState(); } [^\}]* return "acc_descr_multiline_value"; statement : acc_title acc_title_value { $$=$2.trim();yy.setTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } ``` The functions for setting title and description are provided by a common module. This is the import from flowDb.js: ``` import { setAccTitle, getAccTitle, getAccDescription, setAccDescription, clear as commonClear, } from '../../commonDb'; ``` For rendering the accessibility tags you have again an existing function you can use. **In the renderer:** ```js import addSVGAccessibilityFields from '../../accessibility'; /* ... */ // Adds title and description to the flow chart addSVGAccessibilityFields(parser.yy, svg, id); ``` ## Theming Mermaid supports themes and has an integrated theming engine. You can read more about how the themes can be used [in the docs](../config/theming.md). When adding themes to a diagram it comes down to a few important locations in the code. The entry point for the styling engine is in **src/styles.js**. The getStyles function will be called by Mermaid when the styles are being applied to the diagram. This function will in turn call a function _your diagram should provide_ returning the css for the new diagram. The diagram specific, also which is commonly also called getStyles and located in the folder for your diagram under src/diagrams and should be named styles.js. The getStyles function will be called with the theme options as an argument like in the following example: ```js const getStyles = (options) => ` .line { stroke-width: 1; stroke: ${options.lineColor}; stroke-dasharray: 2; } // ... `; ``` Note that you need to provide your function to the main getStyles by adding it into the themes object in **src/styles.js** like in the xyzDiagram in the provided example: ```js const themes = { flowchart, 'flowchart-v2': flowchart, sequence, xyzDiagram, //... }; ``` The actual options and values for the colors are defined in **src/theme/theme-[xyz].js**. If you provide the options your diagram needs in the existing theme files then the theming will work smoothly without hiccups. mermaid-js-mermaid-9bb0ed2/vdocs/community/security.md000066400000000000000000000035371433273745700232310ustar00rootroot00000000000000# Security The Mermaid team takes the security of Mermaid and the applications that use Mermaid seriously. This page describes how to report any vulnerabilities you may find, and lists best practices to minimize the risk of introducing a vulnerability. ## Reporting vulnerabilities To report a vulnerability, please e-mail security@mermaid.live with a description of the issue, the steps you took to create the issue, affected versions, and if known, mitigations for the issue. We aim to reply within three working days, probably much sooner. You should expect a close collaboration as we work to resolve the issue you have reported. Please reach out to security@mermaid.live again if you do not receive prompt attention and regular updates. You may also reach out to the team via our public Slack chat channels; however, please make sure to e-mail security@mernaid.live when reporting an issue, and avoid revealing information about vulnerabilities in public as that could that could put users at risk. ## Best practices Keep current with the latest Mermaid releases. We regularly update Mermaid, and these updates may fix security defects discovered in previous versions. Check the Mermaid release notes for security-related updates. Keep your application’s dependencies up to date. Make sure you upgrade your package dependencies to keep the dependencies up to date. Avoid pinning to specific versions for your dependencies and, if you do, make sure you check periodically to see if your dependencies have had security updates, and update the pin accordingly. ## Configuring DomPurify By default Mermaid uses a baseline [DOMPurify](https://github.com/cure53/DOMPurify) config. It is possible to override the options passed to DOMPurify by adding a `dompurifyConfig` key to the Mermaid options. This could potentially break the output of Mermaid so use this with caution. mermaid-js-mermaid-9bb0ed2/vdocs/config/000077500000000000000000000000001433273745700202515ustar00rootroot00000000000000mermaid-js-mermaid-9bb0ed2/vdocs/config/8.6.0_docs.md000066400000000000000000000240341433273745700222570ustar00rootroot00000000000000# Version 8.6.0 Changes ## [New Mermaid Live-Editor Beta](https://mermaid-js.github.io/docs/mermaid-live-editor-beta/#/edit/eyJjb2RlIjoiJSV7aW5pdDoge1widGhlbWVcIjogXCJmb3Jlc3RcIiwgXCJsb2dMZXZlbFwiOiAxIH19JSVcbmdyYXBoIFREXG4gIEFbQ2hyaXN0bWFzXSAtLT58R2V0IG1vbmV5fCBCKEdvIHNob3BwaW5nKVxuICBCIC0tPiBDe0xldCBtZSB0aGlua31cbiAgQyAtLT58T25lfCBEW0xhcHRvcF1cbiAgQyAtLT58VHdvfCBFW2lQaG9uZV1cbiAgQyAtLT58VGhyZWV8IEZbZmE6ZmEtY2FyIENhcl1cblx0XHQiLCJtZXJtYWlkIjp7InRoZW1lIjoiZGFyayJ9fQ) ## [CDN](https://unpkg.com/mermaid/) With version 8.6.0 comes the release of directives for mermaid, a new system for modifying configurations, with the aim of establishing centralized, sane defaults and simple implementation. `directives` allow for a single-use overwriting of `config`, as it has been discussed in [Configurations](./Setup.md). This allows site Diagram Authors to instantiate temporary modifications to `config` through the use of [Directives](../config/directives), which are parsed before rendering diagram definitions. This allows the Diagram Authors to alter the appearance of the diagrams. **A likely application for this is in the creation of diagrams/charts inside company/organizational webpages, that rely on mermaid for diagram and chart rendering.** the `init` directive is the main method of configuration for Site and Current Levels. The three levels of are Configuration, Global, Site and Current. | Level of Configuration | Description | | ---------------------- | ----------------------------------- | | Global Configuration | Default Mermaid Configurations | | Site Configuration | Configurations made by site owner | | Current Configuration | Configurations made by Implementors | # Limits to Modifying Configurations **secure Array** | Parameter | Description | Type | Required | Values | | --------- | ------------------------------------------------ | ----- | -------- | -------------- | | secure | Array of parameters excluded from init directive | Array | Required | Any parameters | The modifiable parts of the Configuration are limited by the secure array, which is an array of immutable parameters, this array can be expanded by site owners. **Notes**: secure arrays work like nesting dolls, with the Global Configurations’ secure array holding the default and immutable list of immutable parameters, or the smallest doll, to which site owners may add to, but implementors may not modify it. # Secure Arrays Site owners can add to the **secure** array using this command: mermaidAPI.initialize( { startOnLoad: true, secure: ['parameter1', 'parameter2'] } ); Default values for the `secure array` consists of: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize']. These default values are immutable. Implementors can only modify configurations using directives, and cannot change the `secure` array. # Modifying Configurations and directives: The Two types of directives: are `init` (or `initialize`) and `wrap`. ::: tip All directives are enclosed in `%%{ }%%` ::: Older versions of mermaid will not parse directives because `%%` will comment out the directive. This makes the update backwards-compatible. # Init `init`, or `initialize`: this directive gives the user the ability to overwrite and change the values for any configuration parameters not set in the secure array. | Parameter | Description | Type | Required | Values | | --------- | ----------------------- | --------- | -------- | ----------------------------------------------- | | init | modifies configurations | Directive | Optional | Any parameters not included in the secure array | ::: tip init would be an argument-directive: `%%{init: { **insert argument here**}}%%` The json object that is passed as {**argument** } must be valid, quoted json or it will be ignored. **for example**: `%%{init: {"theme": "default", "logLevel": 1 }}%%` Configurations that are passed through init cannot change the parameters in a secure array at a higher level. In the event of a collision, mermaid will give priority to secure arrays and parse the request without changing the values of those parameters in conflict. When deployed within code, init is called before the graph/diagram description. ::: **for example**: ```mmd %%{init: {"theme": "default", "logLevel": 1 }}%% graph LR a-->b b-->c c-->d d-->e e-->f f-->g g--> ``` # Wrap | Parameter | Description | Type | Required | Values | | --------- | ----------------------------- | --------- | -------- | ---------- | | wrap | a callable text-wrap function | Directive | Optional | %%{wrap}%% | ::: tip Wrap is a function that is currently only deployable for sequence diagrams. Wrap respects a manually added , so if the user wants to break up their text, they have full control over line breaks by adding tags. It is a non-argument directive and can be executed thusly: `%%{wrap}%%` . ::: **An example of text wrapping in a sequence diagram**: ![Image showing wrapped text](img/wrapped text.png) # Resetting Configurations: There are two more functions in the mermaidAPI that can be called by site owners: **reset** and **globalReset**. **reset**: resets the configuration to whatever the last configuration was. This can be done to undo more recent changes set from the last mermaidAPI.initialize({...}) configuration. **globalReset** will reset both the current configuration AND the site configuration back to the global defaults. **Notes**: Both `reset` and `globalReset` are only available to site owners, and as such implementors have to edit their configs using `init`. # Additional Utils to mermaid • **memoize**: simple caching for computationally expensive functions, reducing rendering time by about 90%. • **assignWithDepth** - an improvement on previous functions with config.js and `Object.assign`. The purpose of this function is to provide a sane mechanism for merging objects, similar to `object.assign`, but with depth. Example of **assignWithDepth**: ![Image showing assignWithDepth](img/assignWithDepth.png) Example of **object.Assign**: ![Image showing object.assign without depth](img/object.assign without depth.png) • **calculateTextDimensions**, **calculateTextWidth**, and **calculateTextHeight** - for measuring text dimensions, width and height. **Notes**: For more information on usage, parameters, and return info for these new functions take a look at the jsdocs for them in the utils package. # New API Requests Introduced in Version 8.6.0 ## setSiteConfig | Function | Description | Type | Values | Parameters | Returns | | --------------- | ------------------------------------- | ----------- | --------------------------------------- | ---------- | ---------- | | `setSiteConfig` | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | conf | siteConfig | ::: tip Sets the siteConfig. The siteConfig is a protected configuration for repeat use. Calls to reset() will reset the currentConfig to siteConfig. Calls to reset(configApi.defaultConfig) will reset siteConfig and currentConfig to the defaultConfig Note: currentConfig is set in this function。 Default value: will mirror Global Config ::: ## getSiteConfig | Function | Description | Type | Values | | --------------- | --------------------------------------------------- | ----------- | ---------------------------------- | | `getSiteConfig` | Returns the current `siteConfig` base configuration | Get Request | Returns Any Values in `siteConfig` | ::: tip Returns any values in siteConfig. ::: ## setConfig | Function | Description | Type | Values | Parameters | Returns | | ----------- | ------------------------------------------ | ----------- | --------------------------------- | ---------- | ---------------------------------------------- | | `setConfig` | Sets the `currentConfig` to desired values | Put Request | Any Values, those in secure array | conf | `currentConfig` merged with the sanitized conf | ::: tip Sets the currentConfig. The parameter conf is sanitized based on the siteConfig.secure keys. Any values found in conf with key found in siteConfig.secure will be replaced with the corresponding siteConfig value. ::: ## getConfig | Function | Description | Type | Return Values | | ----------- | --------------------------- | ----------- | ------------------------------- | | `getConfig` | Obtains the `currentConfig` | Get Request | Any Values from `currentConfig` | ::: tip Returns any values in currentConfig. ::: ## sanitize | Function | Description | Type | Values | | ---------- | ---------------------------------------- | -------------- | ------ | | `sanitize` | Sets the `siteConfig` to desired values. | Put Request(?) | None | ::: tip modifies options in-place Ensures options parameter does not attempt to override siteConfig secure keys. ::: ## reset | Function | Description | Type | Required | Values | Parameter | | -------- | ------------------------------ | ----------- | -------- | ------ | --------- | | `reset` | Resets `currentConfig` to conf | Put Request | Required | None | conf | ## conf | Parameter | Description | Type | Required | Values | | --------- | ------------------------------------------------------------ | ---------- | -------- | -------------------------------------------- | | `conf` | base set of values, which `currentConfig` could be reset to. | Dictionary | Required | Any Values, with respect to the secure Array | ::: tip default: current siteConfig (optional, default `getSiteConfig()`) ::: ## For more information, read [Setup](Setup.md). mermaid-js-mermaid-9bb0ed2/vdocs/config/Setup.md000066400000000000000000001507121433273745700217010ustar00rootroot00000000000000## mermaidAPI This is the API to be used when optionally handling the integration with the web page, instead of using the default integration provided by mermaid.js. The core of this api is the [**render**][1] function which, given a graph definition as text, renders the graph/diagram and returns an svg element for the graph. It is then up to the user of the API to make use of the svg, either insert it somewhere in the page or do something completely different. In addition to the render function, a number of behavioral configuration options are available. ## Configuration **Configuration methods in Mermaid version 8.6.0 have been updated, to learn more [click here][2].** ## **What follows are config instructions for older versions** These are the default options which can be overridden with the initialization call like so: **Example 1:** ```js mermaid.initialize({ flowchart: { htmlLabels: false } }); ``` **Example 2:** ```js const config = { startOnLoad: true, flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'cardinal' }, securityLevel: 'loose', }; mermaid.initialize(config); ``` A summary of all options and their defaults is found [here][3]. A description of each option follows below. ## theme Theme , the CSS style sheet | Parameter | Description | Type | Required | Values | | --------- | --------------- | ------ | -------- | ---------------------------------------------- | | theme | Built in Themes | string | Optional | 'default', 'forest', 'dark', 'neutral', 'null' | **Notes:** To disable any pre-defined mermaid theme, use "null".
 "theme": "forest",
"themeCSS": ".node rect { fill: red; }" 
## fontFamily | Parameter | Description | Type | Required | Values | | ---------- | ------------------------------------------------------ | ------ | -------- | --------------------------- | | fontFamily | specifies the font to be used in the rendered diagrams | string | Required | Any Possible CSS FontFamily | **Notes:** Default value: '"trebuchet ms", verdana, arial, sans-serif;'. ## logLevel | Parameter | Description | Type | Required | Values | | | --------- | ----------------------------------------------------- | ------ | -------- | -------- | --------------------------------------------- | | logLevel | This option decides the amount of logging to be used. | string | number | Required | 'trace','debug','info','warn','error','fatal' | **Notes:** - Trace: 0 - Debug: 1 - Info: 2 - Warn: 3 - Error: 4 - Fatal: 5 (default) ## securityLevel | Parameter | Description | Type | Required | Values | | ------------- | --------------------------------- | ------ | -------- | ------------------------------------------ | | securityLevel | Level of trust for parsed diagram | string | Required | 'sandbox', 'strict', 'loose', 'antiscript' | **Notes**: - **strict**: (**default**) tags in text are encoded, click functionality is disabled - **loose**: tags in text are allowed, click functionality is enabled - **antiscript**: html tags in text are allowed, (only script element is removed), click functionality is enabled - **sandbox**: With this security level all rendering takes place in a sandboxed iframe. This prevent any JavaScript from running in the context. This may hinder interactive functionality of the diagram like scripts, popups in sequence diagram or links to other tabs/targets etc. ## startOnLoad | Parameter | Description | Type | Required | Values | | ----------- | -------------------------------------------- | ------- | -------- | ----------- | | startOnLoad | Dictates whether mermaid starts on Page load | boolean | Required | true, false | **Notes:** Default value: true ## arrowMarkerAbsolute | Parameter | Description | Type | Required | Values | | ------------------- | ---------------------------------------------------------------------------- | ------- | -------- | ----------- | | arrowMarkerAbsolute | Controls whether or arrow markers in html code are absolute paths or anchors | boolean | Required | true, false | **Notes**: This matters if you are using base tag settings. Default value: false ## secure This option controls which currentConfig keys are considered _secure_ and can only be changed via call to mermaidAPI.initialize. Calls to mermaidAPI.reinitialize cannot make changes to the `secure` keys in the current currentConfig. This prevents malicious graph directives from overriding a site's default security. **Notes**: Default value: \['secure', 'securityLevel', 'startOnLoad', 'maxTextSize'] ## deterministicIds This option controls if the generated ids of nodes in the SVG are generated randomly or based on a seed. If set to false, the IDs are generated based on the current date and thus are not deterministic. This is the default behaviour. **Notes**: This matters if your files are checked into sourcecontrol e.g. git and should not change unless content is changed. Default value: false ## deterministicIDSeed This option is the optional seed for deterministic ids. if set to undefined but deterministicIds is true, a simple number iterator is used. You can set this attribute to base the seed on a static string. ## flowchart The object containing configurations specific for flowcharts ### diagramPadding | Parameter | Description | Type | Required | Values | | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ | | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value | **Notes:** The amount of padding around the diagram as a whole so that embedded diagrams have margins, expressed in pixels Default value: 8 ### htmlLabels | Parameter | Description | Type | Required | Values | | ---------- | -------------------------------------------------------------------------------------------- | ------- | -------- | ----------- | | htmlLabels | Flag for setting whether or not a html tag should be used for rendering labels on the edges. | boolean | Required | true, false | **Notes:** Default value: true. ### nodeSpacing | Parameter | Description | Type | Required | Values | | ----------- | --------------------------------------------------- | ------- | -------- | ------------------- | | nodeSpacing | Defines the spacing between nodes on the same level | Integer | Required | Any positive Number | **Notes:** Pertains to horizontal spacing for TB (top to bottom) or BT (bottom to top) graphs, and the vertical spacing for LR as well as RL graphs.\*\* Default value: 50 ### rankSpacing | Parameter | Description | Type | Required | Values | | ----------- | ----------------------------------------------------- | ------- | -------- | ------------------- | | rankSpacing | Defines the spacing between nodes on different levels | Integer | Required | Any Positive Number | **Notes**: Pertains to vertical spacing for TB (top to bottom) or BT (bottom to top), and the horizontal spacing for LR as well as RL graphs. Default value 50 ### curve | Parameter | Description | Type | Required | Values | | --------- | -------------------------------------------------- | ------ | -------- | ----------------------------- | | curve | Defines how mermaid renders curves for flowcharts. | string | Required | 'basis', 'linear', 'cardinal' | **Notes:** Default Value: 'basis' ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ### defaultRenderer | Parameter | Description | Type | Required | Values | | --------------- | ----------- | ------- | -------- | ----------------------- | | defaultRenderer | See notes | boolean | 4 | dagre-d3, dagre-wrapper | **Notes:** Decides which rendering engine that is to be used for the rendering. Legal values are: dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid Default value: 'dagre-wrapper' ## sequence The object containing configurations specific for sequence diagrams ### activationWidth | Parameter | Description | Type | Required | Values | | --------------- | ---------------------------- | ------- | -------- | ------------------ | | activationWidth | Width of the activation rect | Integer | Required | Any Positive Value | **Notes:** Default value :10 ### diagramMarginX | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### diagramMarginY | Parameter | Description | Type | Required | Values | | -------------- | ------------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginY | Margin to the over and under the sequence diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### actorMargin | Parameter | Description | Type | Required | Values | | ----------- | --------------------- | ------- | -------- | ------------------ | | actorMargin | Margin between actors | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### width | Parameter | Description | Type | Required | Values | | --------- | -------------------- | ------- | -------- | ------------------ | | width | Width of actor boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 150 ### height | Parameter | Description | Type | Required | Values | | --------- | --------------------- | ------- | -------- | ------------------ | | height | Height of actor boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 65 ### boxMargin | Parameter | Description | Type | Required | Values | | --------- | ------------------------ | ------- | -------- | ------------------ | | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### boxTextMargin | Parameter | Description | Type | Required | Values | | ------------- | -------------------------------------------- | ------- | -------- | ------------------ | | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 5 ### noteMargin | Parameter | Description | Type | Required | Values | | ---------- | ------------------- | ------- | -------- | ------------------ | | noteMargin | margin around notes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### messageMargin | Parameter | Description | Type | Required | Values | | ------------- | ---------------------- | ------- | -------- | ------------------ | | messageMargin | Space between messages | Integer | Required | Any Positive Value | **Notes:** Default value: 35 ### messageAlign | Parameter | Description | Type | Required | Values | | ------------ | --------------------------- | ------ | -------- | ------------------------- | | messageAlign | Multiline message alignment | string | Required | 'left', 'center', 'right' | **Notes:** Default value: 'center' ### mirrorActors | Parameter | Description | Type | Required | Values | | ------------ | --------------------------- | ------- | -------- | ----------- | | mirrorActors | Mirror actors under diagram | boolean | Required | true, false | **Notes:** Default value: true ### forceMenus | Parameter | Description | Type | Required | Values | | ---------- | ----------------------------------------------------------------------- | ------- | -------- | ----------- | | forceMenus | forces actor popup menus to always be visible (to support E2E testing). | Boolean | Required | True, False | **Notes:** Default value: false. ### bottomMarginAdj | Parameter | Description | Type | Required | Values | | --------------- | ------------------------------------------ | ------- | -------- | ------------------ | | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | Required | Any Positive Value | **Notes:** Depending on css styling this might need adjustment. Default value: 1 ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the height and width is set to 100% and is then scaling with the available space. If set to false, the absolute space required is used. Default value: true ### rightAngles | Parameter | Description | Type | Required | Values | | ----------- | ------------------------------------ | ------- | -------- | ----------- | | rightAngles | display curve arrows as right angles | boolean | Required | true, false | **Notes:** This will display arrows that start and begin at the same node as right angles, rather than a curve Default value: false ### showSequenceNumbers | Parameter | Description | Type | Required | Values | | ------------------- | ------------------------------- | ------- | -------- | ----------- | | showSequenceNumbers | This will show the node numbers | boolean | Required | true, false | **Notes:** Default value: false ### actorFontSize | Parameter | Description | Type | Required | Values | | ------------- | -------------------------------------------------- | ------- | -------- | ------------------ | | actorFontSize | This sets the font size of the actor's description | Integer | Require | Any Positive Value | **Notes:** **Default value 14**.. ### actorFontFamily | Parameter | Description | Type | Required | Values | | --------------- | ---------------------------------------------------- | ------ | -------- | --------------------------- | | actorFontFamily | This sets the font family of the actor's description | string | Required | Any Possible CSS FontFamily | **Notes:** Default value: "'Open Sans", sans-serif' ### actorFontWeight This sets the font weight of the actor's description **Notes:** Default value: 400. ### noteFontSize | Parameter | Description | Type | Required | Values | | ------------ | ----------------------------------------------- | ------- | -------- | ------------------ | | noteFontSize | This sets the font size of actor-attached notes | Integer | Required | Any Positive Value | **Notes:** Default value: 14 ### noteFontFamily | Parameter | Description | Type | Required | Values | | -------------- | -------------------------------------------------- | ------ | -------- | --------------------------- | | noteFontFamily | This sets the font family of actor-attached notes. | string | Required | Any Possible CSS FontFamily | **Notes:** Default value: ''"trebuchet ms", verdana, arial, sans-serif' ### noteFontWeight This sets the font weight of the note's description **Notes:** Default value: 400 ### noteAlign | Parameter | Description | Type | Required | Values | | --------- | ---------------------------------------------------- | ------ | -------- | ------------------------- | | noteAlign | This sets the text alignment of actor-attached notes | string | required | 'left', 'center', 'right' | **Notes:** Default value: 'center' ### messageFontSize | Parameter | Description | Type | Required | Values | | --------------- | ----------------------------------------- | ------- | -------- | ------------------- | | messageFontSize | This sets the font size of actor messages | Integer | Required | Any Positive Number | **Notes:** Default value: 16 ### messageFontFamily | Parameter | Description | Type | Required | Values | | ----------------- | ------------------------------------------- | ------ | -------- | --------------------------- | | messageFontFamily | This sets the font family of actor messages | string | Required | Any Possible CSS FontFamily | **Notes:** Default value: '"trebuchet ms", verdana, arial, sans-serif' ### messageFontWeight This sets the font weight of the message's description **Notes:** Default value: 400. ### wrap This sets the auto-wrap state for the diagram **Notes:** Default value: false. ### wrapPadding This sets the auto-wrap padding for the diagram (sides only) **Notes:** Default value: 0. ### labelBoxWidth This sets the width of the loop-box (loop, alt, opt, par) **Notes:** Default value: 50. ### labelBoxHeight This sets the height of the loop-box (loop, alt, opt, par) **Notes:** Default value: 20. ## gantt The object containing configurations specific for gantt diagrams ### titleTopMargin ### titleTopMargin | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ | | titleTopMargin | Margin top for the text over the gantt diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 25 ### barHeight | Parameter | Description | Type | Required | Values | | --------- | ----------------------------------- | ------- | -------- | ------------------ | | barHeight | The height of the bars in the graph | Integer | Required | Any Positive Value | **Notes:** Default value: 20 ### barGap | Parameter | Description | Type | Required | Values | | --------- | ---------------------------------------------------------------- | ------- | -------- | ------------------ | | barGap | The margin between the different activities in the gantt diagram | Integer | Optional | Any Positive Value | **Notes:** Default value: 4 ### topPadding | Parameter | Description | Type | Required | Values | | ---------- | -------------------------------------------------------------------------- | ------- | -------- | ------------------ | | topPadding | Margin between title and gantt diagram and between axis and gantt diagram. | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### rightPadding | Parameter | Description | Type | Required | Values | | ------------ | ----------------------------------------------------------------------- | ------- | -------- | ------------------ | | rightPadding | The space allocated for the section name to the right of the activities | Integer | Required | Any Positive Value | **Notes:** Default value: 75 ### leftPadding | Parameter | Description | Type | Required | Values | | ----------- | ---------------------------------------------------------------------- | ------- | -------- | ------------------ | | leftPadding | The space allocated for the section name to the left of the activities | Integer | Required | Any Positive Value | **Notes:** Default value: 75 ### gridLineStartPadding | Parameter | Description | Type | Required | Values | | -------------------- | -------------------------------------------- | ------- | -------- | ------------------ | | gridLineStartPadding | Vertical starting position of the grid lines | Integer | Required | Any Positive Value | **Notes:** Default value: 35 ### fontSize | Parameter | Description | Type | Required | Values | | --------- | ----------- | ------- | -------- | ------------------ | | fontSize | Font size | Integer | Required | Any Positive Value | **Notes:** Default value: 11 ### sectionFontSize | Parameter | Description | Type | Required | Values | | --------------- | ---------------------- | ------- | -------- | ------------------ | | sectionFontSize | Font size for sections | Integer | Required | Any Positive Value | **Notes:** Default value: 11 ### numberSectionStyles | Parameter | Description | Type | Required | Values | | ------------------- | ---------------------------------------- | ------- | -------- | ------------------ | | numberSectionStyles | The number of alternating section styles | Integer | 4 | Any Positive Value | **Notes:** Default value: 4 ### axisFormat | Parameter | Description | Type | Required | Values | | ---------- | --------------------------- | ---- | -------- | ---------------- | | axisFormat | Datetime format of the axis | 3 | Required | Date in yy-mm-dd | **Notes:** This might need adjustment to match your locale and preferences Default value: '%Y-%m-%d'. ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ### topAxis | Parameter | Description | Type | Required | Values | | --------- | ----------- | ------- | -------- | ----------- | | topAxis | See notes | Boolean | 4 | True, False | **Notes:** when this flag is set date labels will be added to the top of the chart **Default value false**. ## journey The object containing configurations specific for journey diagrams ### diagramMarginX | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### diagramMarginY | Parameter | Description | Type | Required | Values | | -------------- | -------------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginY | Margin to the over and under the sequence diagram. | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### leftMargin | Parameter | Description | Type | Required | Values | | ----------- | --------------------- | ------- | -------- | ------------------ | | actorMargin | Margin between actors | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### width | Parameter | Description | Type | Required | Values | | --------- | -------------------- | ------- | -------- | ------------------ | | width | Width of actor boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 150 ### height | Parameter | Description | Type | Required | Values | | --------- | --------------------- | ------- | -------- | ------------------ | | height | Height of actor boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 65 ### boxMargin | Parameter | Description | Type | Required | Values | | --------- | ------------------------ | ------- | -------- | ------------------ | | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### boxTextMargin | Parameter | Description | Type | Required | Values | | ------------- | -------------------------------------------- | ------- | -------- | ------------------ | | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 5 ### noteMargin | Parameter | Description | Type | Required | Values | | ---------- | ------------------- | ------- | -------- | ------------------ | | noteMargin | Margin around notes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### messageMargin | Parameter | Description | Type | Required | Values | | ------------- | ----------------------- | ------- | -------- | ------------------ | | messageMargin | Space between messages. | Integer | Required | Any Positive Value | **Notes:** Space between messages. Default value: 35 ### messageAlign | Parameter | Description | Type | Required | Values | | ------------ | --------------------------- | ---- | -------- | ------------------------- | | messageAlign | Multiline message alignment | 3 | 4 | 'left', 'center', 'right' | **Notes:** Default value: 'center' ### bottomMarginAdj | Parameter | Description | Type | Required | Values | | --------------- | ------------------------------------------ | ------- | -------- | ------------------ | | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | 4 | Any Positive Value | **Notes:** Depending on css styling this might need adjustment. Default value: 1 ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ### rightAngles | Parameter | Description | Type | Required | Values | | ----------- | --------------------------------- | ---- | -------- | ----------- | | rightAngles | Curved Arrows become Right Angles | 3 | 4 | true, false | **Notes:** This will display arrows that start and begin at the same node as right angles, rather than a curves Default value: false ## useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ## defaultRenderer | Parameter | Description | Type | Required | Values | | --------------- | ----------- | ------- | -------- | ----------------------- | | defaultRenderer | See notes | boolean | 4 | dagre-d3, dagre-wrapper | **Notes**: Decides which rendering engine that is to be used for the rendering. Legal values are: dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid Default value: 'dagre-d3' ## useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See notes | boolean | 4 | true, false | **Notes:** When this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used. Default value: true ## defaultRenderer | Parameter | Description | Type | Required | Values | | --------------- | ----------- | ------- | -------- | ----------------------- | | defaultRenderer | See notes | boolean | 4 | dagre-d3, dagre-wrapper | **Notes:** Decides which rendering engine that is to be used for the rendering. Legal values are: dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid Default value: 'dagre-d3' ## er The object containing configurations specific for entity relationship diagrams ### diagramPadding | Parameter | Description | Type | Required | Values | | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ | | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value | **Notes:** The amount of padding around the diagram as a whole so that embedded diagrams have margins, expressed in pixels Default value: 20 ### layoutDirection | Parameter | Description | Type | Required | Values | | --------------- | ---------------------------------------- | ------ | -------- | ---------------------- | | layoutDirection | Directional bias for layout of entities. | string | Required | "TB", "BT", "LR", "RL" | **Notes:** 'TB' for Top-Bottom, 'BT'for Bottom-Top, 'LR' for Left-Right, or 'RL' for Right to Left. T = top, B = bottom, L = left, and R = right. Default value: 'TB' ### minEntityWidth | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------- | ------- | -------- | ------------------ | | minEntityWidth | The minimum width of an entity box | Integer | Required | Any Positive Value | **Notes:** Expressed in pixels. Default value: 100 ### minEntityHeight | Parameter | Description | Type | Required | Values | | --------------- | ----------------------------------- | ------- | -------- | ------------------ | | minEntityHeight | The minimum height of an entity box | Integer | 4 | Any Positive Value | **Notes:** Expressed in pixels Default value: 75 ### entityPadding | Parameter | Description | Type | Required | Values | | ------------- | ------------------------------------------------------------ | ------- | -------- | ------------------ | | entityPadding | Minimum internal padding between text in box and box borders | Integer | 4 | Any Positive Value | **Notes:** The minimum internal padding between text in an entity box and the enclosing box borders, expressed in pixels. Default value: 15 ### stroke | Parameter | Description | Type | Required | Values | | --------- | ----------------------------------- | ------ | -------- | -------------------- | | stroke | Stroke color of box edges and lines | string | 4 | Any recognized color | **Notes:** Default value: 'gray' ### fill | Parameter | Description | Type | Required | Values | | --------- | -------------------------- | ------ | -------- | -------------------- | | fill | Fill color of entity boxes | string | 4 | Any recognized color | **Notes:** Default value: 'honeydew' ### fontSize | Parameter | Description | Type | Required | Values | | --------- | ------------------- | ------- | -------- | ------------------ | | fontSize | Font Size in pixels | Integer | | Any Positive Value | **Notes:** Font size (expressed as an integer representing a number of pixels) Default value: 12 ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the diagram width is locked to 100% and scaled based on available space. If set to false, the diagram reserves its absolute width. Default value: true ## pie The object containing configurations specific for pie diagrams ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the diagram width is locked to 100% and scaled based on available space. If set to false, the diagram reserves its absolute width. Default value: true ## requirement The object containing configurations specific for req diagrams ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the diagram width is locked to 100% and scaled based on available space. If set to false, the diagram reserves its absolute width. Default value: true ## c4 The object containing configurations specific for c4 diagrams ### diagramMarginX | Parameter | Description | Type | Required | Values | | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginX | Margin to the right and left of the c4 diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### diagramMarginY | Parameter | Description | Type | Required | Values | | -------------- | ------------------------------------------- | ------- | -------- | ------------------ | | diagramMarginY | Margin to the over and under the c4 diagram | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### c4ShapeMargin | Parameter | Description | Type | Required | Values | | ------------- | --------------------- | ------- | -------- | ------------------ | | c4ShapeMargin | Margin between shapes | Integer | Required | Any Positive Value | **Notes:** Default value: 50 ### c4ShapePadding | Parameter | Description | Type | Required | Values | | -------------- | ---------------------- | ------- | -------- | ------------------ | | c4ShapePadding | Padding between shapes | Integer | Required | Any Positive Value | **Notes:** Default value: 20 ### width | Parameter | Description | Type | Required | Values | | --------- | --------------------- | ------- | -------- | ------------------ | | width | Width of person boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 216 ### height | Parameter | Description | Type | Required | Values | | --------- | ---------------------- | ------- | -------- | ------------------ | | height | Height of person boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 60 ### boxMargin | Parameter | Description | Type | Required | Values | | --------- | ------------------- | ------- | -------- | ------------------ | | boxMargin | Margin around boxes | Integer | Required | Any Positive Value | **Notes:** Default value: 10 ### useMaxWidth | Parameter | Description | Type | Required | Values | | ----------- | ----------- | ------- | -------- | ----------- | | useMaxWidth | See Notes | boolean | Required | true, false | **Notes:** When this flag is set to true, the height and width is set to 100% and is then scaling with the available space. If set to false, the absolute space required is used. Default value: true ### c4ShapeInRow | Parameter | Description | Type | Required | Values | | ------------ | ----------- | ------- | -------- | ------------------ | | c4ShapeInRow | See Notes | Integer | Required | Any Positive Value | **Notes:** How many shapes to place in each row. Default value: 4 ### c4BoundaryInRow | Parameter | Description | Type | Required | Values | | --------------- | ----------- | ------- | -------- | ------------------ | | c4BoundaryInRow | See Notes | Integer | Required | Any Positive Value | **Notes:** How many boundarys to place in each row. Default value: 2 ### personFontSize This sets the font size of Person shape for the diagram **Notes:** Default value: 14. ### personFontFamily This sets the font family of Person shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### personFontWeight This sets the font weight of Person shape for the diagram **Notes:** Default value: normal. ### external_personFontSize This sets the font size of External Person shape for the diagram **Notes:** Default value: 14. ### external_personFontFamily This sets the font family of External Person shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_personFontWeight This sets the font weight of External Person shape for the diagram **Notes:** Default value: normal. ### systemFontSize This sets the font size of System shape for the diagram **Notes:** Default value: 14. ### systemFontFamily This sets the font family of System shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### systemFontWeight This sets the font weight of System shape for the diagram **Notes:** Default value: normal. ### external_systemFontSize This sets the font size of External System shape for the diagram **Notes:** Default value: 14. ### external_systemFontFamily This sets the font family of External System shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_systemFontWeight This sets the font weight of External System shape for the diagram **Notes:** Default value: normal. ### system_dbFontSize This sets the font size of System DB shape for the diagram **Notes:** Default value: 14. ### system_dbFontFamily This sets the font family of System DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### system_dbFontWeight This sets the font weight of System DB shape for the diagram **Notes:** Default value: normal. ### external_system_dbFontSize This sets the font size of External System DB shape for the diagram **Notes:** Default value: 14. ### external_system_dbFontFamily This sets the font family of External System DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_system_dbFontWeight This sets the font weight of External System DB shape for the diagram **Notes:** Default value: normal. ### system_queueFontSize This sets the font size of System Queue shape for the diagram **Notes:** Default value: 14. ### system_queueFontFamily This sets the font family of System Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### system_queueFontWeight This sets the font weight of System Queue shape for the diagram **Notes:** Default value: normal. ### external_system_queueFontSize This sets the font size of External System Queue shape for the diagram **Notes:** Default value: 14. ### external_system_queueFontFamily This sets the font family of External System Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_system_queueFontWeight This sets the font weight of External System Queue shape for the diagram **Notes:** Default value: normal. ### boundaryFontSize This sets the font size of Boundary shape for the diagram **Notes:** Default value: 14. ### boundaryFontFamily This sets the font family of Boundary shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### boundaryFontWeight This sets the font weight of Boundary shape for the diagram **Notes:** Default value: normal. ### messageFontSize This sets the font size of Message shape for the diagram **Notes:** Default value: 12. ### messageFontFamily This sets the font family of Message shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### messageFontWeight This sets the font weight of Message shape for the diagram **Notes:** Default value: normal. ### containerFontSize This sets the font size of Container shape for the diagram **Notes:** Default value: 14. ### containerFontFamily This sets the font family of Container shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### containerFontWeight This sets the font weight of Container shape for the diagram **Notes:** Default value: normal. ### external_containerFontSize This sets the font size of External Container shape for the diagram **Notes:** Default value: 14. ### external_containerFontFamily This sets the font family of External Container shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_containerFontWeight This sets the font weight of External Container shape for the diagram **Notes:** Default value: normal. ### container_dbFontSize This sets the font size of Container DB shape for the diagram **Notes:** Default value: 14. ### container_dbFontFamily This sets the font family of Container DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### container_dbFontWeight This sets the font weight of Container DB shape for the diagram **Notes:** Default value: normal. ### external_container_dbFontSize This sets the font size of External Container DB shape for the diagram **Notes:** Default value: 14. ### external_container_dbFontFamily This sets the font family of External Container DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_container_dbFontWeight This sets the font weight of External Container DB shape for the diagram **Notes:** Default value: normal. ### container_queueFontSize This sets the font size of Container Queue shape for the diagram **Notes:** Default value: 14. ### container_queueFontFamily This sets the font family of Container Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### container_queueFontWeight This sets the font weight of Container Queue shape for the diagram **Notes:** Default value: normal. ### external_container_queueFontSize This sets the font size of External Container Queue shape for the diagram **Notes:** Default value: 14. ### external_container_queueFontFamily This sets the font family of External Container Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_container_queueFontWeight This sets the font weight of External Container Queue shape for the diagram **Notes:** Default value: normal. ### componentFontSize This sets the font size of Component shape for the diagram **Notes:** Default value: 14. ### componentFontFamily This sets the font family of Component shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### componentFontWeight This sets the font weight of Component shape for the diagram **Notes:** Default value: normal. ### external_componentFontSize This sets the font size of External Component shape for the diagram **Notes:** Default value: 14. ### external_componentFontFamily This sets the font family of External Component shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_componentFontWeight This sets the font weight of External Component shape for the diagram **Notes:** Default value: normal. ### component_dbFontSize This sets the font size of Component DB shape for the diagram **Notes:** Default value: 14. ### component_dbFontFamily This sets the font family of Component DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### component_dbFontWeight This sets the font weight of Component DB shape for the diagram **Notes:** Default value: normal. ### external_component_dbFontSize This sets the font size of External Component DB shape for the diagram **Notes:** Default value: 14. ### external_component_dbFontFamily This sets the font family of External Component DB shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_component_dbFontWeight This sets the font weight of External Component DB shape for the diagram **Notes:** Default value: normal. ### component_queueFontSize This sets the font size of Component Queue shape for the diagram **Notes:** Default value: 14. ### component_queueFontFamily This sets the font family of Component Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### component_queueFontWeight This sets the font weight of Component Queue shape for the diagram **Notes:** Default value: normal. ### external_component_queueFontSize This sets the font size of External Component Queue shape for the diagram **Notes:** Default value: 14. ### external_component_queueFontFamily This sets the font family of External Component Queue shape for the diagram **Notes:** Default value: "Open Sans", sans-serif. ### external_component_queueFontWeight This sets the font weight of External Component Queue shape for the diagram **Notes:** Default value: normal. ### wrap This sets the auto-wrap state for the diagram **Notes:** Default value: true. ### wrapPadding This sets the auto-wrap padding for the diagram (sides only) **Notes:** Default value: 0. ## parse ### Parameters - `text` **[string][4]** - `parseError` **[Function][5]?** Returns **[boolean][6]** ## setSiteConfig ## setSiteConfig | Function | Description | Type | Values | | ------------- | ------------------------------------- | ----------- | --------------------------------------- | | setSiteConfig | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | **Notes:** Sets the siteConfig. The siteConfig is a protected configuration for repeat use. Calls to reset() will reset the currentConfig to siteConfig. Calls to reset(configApi.defaultConfig) will reset siteConfig and currentConfig to the defaultConfig Note: currentConfig is set in this function _Default value: At default, will mirror Global Config_ ### Parameters - `conf` **MermaidConfig** The base currentConfig to use as siteConfig Returns **[object][7]** The siteConfig ## getSiteConfig ## getSiteConfig | Function | Description | Type | Values | | ------------- | ------------------------------------------------- | ----------- | -------------------------------- | | setSiteConfig | Returns the current siteConfig base configuration | Get Request | Returns Any Values in siteConfig | **Notes**: Returns **any** values in siteConfig. Returns **[object][7]** The siteConfig ## setConfig ## setConfig | Function | Description | Type | Values | | ------------- | ------------------------------------- | ----------- | --------------------------------------- | | setSiteConfig | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array | **Notes**: Sets the currentConfig. The parameter conf is sanitized based on the siteConfig.secure keys. Any values found in conf with key found in siteConfig.secure will be replaced with the corresponding siteConfig value. ### Parameters - `conf` **any** The potential currentConfig Returns **any** The currentConfig merged with the sanitized conf ## render Function that renders an svg with a graph from a chart definition. Usage example below. ```javascript mermaidAPI.initialize({ startOnLoad: true, }); $(function () { const graphDefinition = 'graph TB\na-->b'; const cb = function (svgGraph) { console.log(svgGraph); }; mermaidAPI.render('id1', graphDefinition, cb); }); ``` ### Parameters - `id` **[string][4]** The id of the element to be rendered - `text` **[string][4]** The graph definition - `cb` **function (svgCode: [string][4], bindFunctions: function (element: [Element][8]): void): void** - `container` **[Element][8]** Selector to element in which a div with the graph temporarily will be inserted. If one is provided a hidden div will be inserted in the body of the page instead. The element will be removed when rendering is completed. Returns **void** ## getConfig | Function | Description | Type | Return Values | | --------- | ------------------------- | ----------- | ------------------------------ | | getConfig | Obtains the currentConfig | Get Request | Any Values from current Config | **Notes**: Returns **any** the currentConfig Returns **any** The currentConfig ## sanitize | Function | Description | Type | Values | | -------- | -------------------------------------- | ----------- | ------ | | sanitize | Sets the siteConfig to desired values. | Put Request | None | Ensures options parameter does not attempt to override siteConfig secure keys **Notes**: modifies options in-place ### Parameters - `options` **any** The potential setConfig parameter ## addDirective Pushes in a directive to the configuration ### Parameters - `directive` **[object][7]** The directive to push in ## reset | Function | Description | Type | Required | Values | | -------- | ---------------------------- | ----------- | -------- | ------ | | reset | Resets currentConfig to conf | Put Request | Required | None | ## conf | Parameter | Description | Type | Required | Values | | --------- | -------------------------------------------------------------- | ---------- | -------- | -------------------------------------------- | | conf | base set of values, which currentConfig could be **reset** to. | Dictionary | Required | Any Values, with respect to the secure Array | **Notes**: (default: current siteConfig ) (optional, default `getSiteConfig()`) ### Parameters - `config` (optional, default `siteConfig`) Returns **void** ## initialize ### Parameters - `options` **MermaidConfig** ## ## mermaidAPI configuration defaults ```html ``` [1]: Setup.md?id=render [2]: 8.6.0_docs.md [3]: #mermaidapi-configuration-defaults [4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String [5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function [6]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean [7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object [8]: https://developer.mozilla.org/docs/Web/API/Element mermaid-js-mermaid-9bb0ed2/vdocs/config/Tutorials.md000066400000000000000000000046331433273745700225670ustar00rootroot00000000000000# Tutorials This is list of publicly available Tutorials for using Mermaid.JS . This is intended as a basic introduction for the use of the Live Editor for generating diagrams, and deploying Mermaid.JS through HTML. **Note that these tutorials might display an older interface, but the usage of the live-editor will largely be the same.** For most purposes, you can use the [Live Editor](https://mermaid-js.github.io/mermaid-live-editor), to quickly and easily render a diagram. ## Live-Editor Tutorials The definitions that can be generated the Live-Editor are also backwards-compatible as of version 8.7.0. [Chris Chinchilla: Hands on - Text-based diagrams with Mermaid](https://www.youtube.com/watch?v=4_LdV1cs2sA) [GitLab Unfiltered: How to Create Mermaid Diagrams](https://www.youtube.com/watch?v=SQ9QmuTHuSI&t=438s) [GitLab Unfiltered: Emilie adds a mermaid diagram to the handbook](https://www.youtube.com/watch?v=5RQqht3NNSE) [World of Zero: I Learn How To Build Flowcharts and Signal Diagram's in Mermaid.JS](https://www.youtube.com/watch?v=7_2IroEs6Is&t=207s) [Eddie Jaoude: Can you code your diagrams?](https://www.youtube.com/watch?v=9HZzKkAqrX8) ## Mermaid with HTML Examples are provided in [Getting Started](../intro/n00b-gettingStarted) **CodePen Examples:** https://codepen.io/CarlBoneri/pen/BQwZzq https://codepen.io/tdkn/pen/vZxQzd https://codepen.io/janzeteachesit/pen/OWWZKN ## Mermaid with Text Area https://codepen.io/Ryuno-Ki/pen/LNxwgR ## Mermaid in open source docs [K8s.io Diagram Guide](https://kubernetes.io/docs/contribute/style/diagram-guide/) [K8s.dev blog: Improve your documentation with Mermaid.js diagrams](https://www.kubernetes.dev/blog/2021/12/01/improve-your-documentation-with-mermaid.js-diagrams/) ## Jupyter Integration with mermaid-js Here's an example of Python integration with mermaid-js which uses the mermaid.ink service, that displays the graph in a Jupyter notebook. ```python import base64 from IPython.display import Image, display import matplotlib.pyplot as plt def mm(graph): graphbytes = graph.encode("ascii") base64_bytes = base64.b64encode(graphbytes) base64_string = base64_bytes.decode("ascii") display(Image(url="https://mermaid.ink/img/" + base64_string)) mm(""" graph LR; A--> B & C & D; B--> A & E; C--> A & E; D--> A & E; E--> B & C & D; """) ``` **Output** ![Example graph of the Python integration](img/python-mermaid-integration.png) mermaid-js-mermaid-9bb0ed2/vdocs/config/accessibility.md000066400000000000000000000117611433273745700234300ustar00rootroot00000000000000# Accessibility Options ## Accessibility Now with Mermaid library in much wider use, we have started to work towards more accessible features, based on the feedback from the community. To begin with, we have added a new feature to Mermaid library, which is to support accessibility options, **Accessibility Title** and **Accessibility Description**. This support for accessibility options is available for all the diagrams/chart types. Also, we have tired to keep the same format for the accessibility options, so that it is easy to understand and maintain. ## Defining Accessibility Options ### Single line accessibility values The diagram authors can now add the accessibility options in the diagram definition, using the `accTitle` and `accDescr` keywords, where each keyword is followed by `:` and the string value for title and description like: - `accTitle: "Your Accessibility Title"` or - `accDescr: "Your Accessibility Description"` **When these two options are defined, they will add a coressponding `` and `<desc>` tag in the SVG.** Let us take a look at the following example with a flowchart diagram: ```mermaid-example graph LR accTitle: Big decisions accDescr: Flow chart of the decision making process A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] ``` See in the code snippet above, the `accTitle` and `accDescr` are defined in the diagram definition. They result in the following tags in SVG code: ![Accessibility options rendered inside SVG](img/accessibility-div-example.png) ### Multi-line Accessibility title/description You can also define the accessibility options in a multi-line format, where the keyword is followed by opening curly bracket `{` and then multiple lines, followed by a closing `}`. `accTitle: My single line title value` (**_single line format_**) vs `accDescr: { My multi-line description of the diagram }` (**_multi-line format_**) Let us look at it in the following example, with same flowchart: ```mermaid-example graph LR accTitle: Big decisions accDescr { My multi-line description of the diagram } A[Hard] -->|Text| B(Round) B --> C{Decision} C -->|One| D[Result 1] ``` See in the code snippet above, the `accTitle` and `accDescr` are defined in the diagram definition. They result in the following tags in SVG code: ![Accessibility options rendered inside SVG](img/accessibility-div-example-2.png) ### Sample Code Snippet for other diagram types #### Sequence Diagram ```mermaid-example sequenceDiagram accTitle: My Sequence Diagram accDescr: My Sequence Diagram Description Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` #### Class Diagram ```mermaid-example classDiagram accTitle: My Class Diagram accDescr: My Class Diagram Description Vehicle <|-- Car ``` #### State Diagram ```mermaid-example stateDiagram accTitle: My State Diagram accDescr: My State Diagram Description s1 --> s2 ``` #### Entity Relationship Diagram ```mermaid-example erDiagram accTitle: My Entity Relationship Diagram accDescr: My Entity Relationship Diagram Description CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses ``` #### User Journey Diagram ```mermaid-example journey accTitle: My User Journey Diagram accDescr: My User Journey Diagram Description title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` #### Gantt Chart ```mermaid-example gantt accTitle: My Gantt Chart Accessibility Title accDescr: My Gantt Chart Accessibility Description title A Gantt Diagram dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d ``` #### Pie Chart ```mermaid-example pie accTitle: My Pie Chart Accessibility Title accDescr: My Pie Chart Accessibility Description title Key elements in Product X "Calcium" : 42.96 "Potassium" : 50.05 "Magnesium" : 10.01 "Iron" : 5 ``` #### Requirement Diagram ```mermaid-example requirementDiagram accTitle: My Requirement Diagram accDescr: My Requirement Diagram Description requirement test_req { id: 1 text: the test text. risk: high verifymethod: test } element test_entity { type: simulation } test_entity - satisfies -> test_req ``` #### Gitgraph ```mermaid-example gitGraph accTitle: My Gitgraph Accessibility Title accDescr: My Gitgraph Accessibility Description commit commit branch develop checkout develop commit commit checkout main merge develop commit commit ``` ���������������mermaid-js-mermaid-9bb0ed2/vdocs/config/directives.md�����������������������������������������������0000664�0000000�0000000�00000017413�14332737457�0022742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Directives ## Directives Directives gives a diagram author the capability to alter the appearance of a diagram before rendering by changing the applied configuration. The significance of having directives is that you have them available while writing the diagram, and can modify the default global and diagram specific configurations. So, directives are applied on top of the default configurations. The beauty of directives is that you can use them to alter configuration settings for a specific diagram, i.e. at an individual level. While directives allow you to change most of the default configuration settings, there are some that are not available, that too for security reasons. Also, you do have the _option to define the set of configurations_ that you would allow to be available to the diagram author for overriding with help of directives. ## Types of Directives options Mermaid basically supports two types of configuration options to be overridden by directives. 1. _General/Top Level configurations_ : These are the configurations that are available and applied to all the diagram. **Some of the most important top-level** configurations are: - theme - fontFamily - logLevel - securityLevel - startOnLoad - secure 2. _Diagram specific configurations_ : These are the configurations that are available and applied to a specific diagram. For each diagram there are specific configuration that will alter how that particular diagram looks and behaves. For example, `mirrorActors` is a configuration that is specific to the `SequenceDiagram` and alter whether the actors are mirrored or not. So this config is available only for the `SequenceDiagram` type. **NOTE:** These options listed here are not all the configuration options. To get hold of all the configuration options, please refer to the [defaultConfig.js](https://github.com/mermaid-js/mermaid/blob/develop/src/defaultConfig.js) in the source code. ``` Soon we plan to publish a complete list of top-level configurations & all the diagram specific configurations, with their possible values in the docs ``` ## Declaring directives Now that we have defined the types of configurations that are available, we can learn how to declare directives. A directive always starts and end `%%` sign with directive text in between, like `%% {directive_text} %%`. Here the structure of a directive text is like a nested key-value pair map or a JSON object with root being _init_. Where all the general configurations are defined in the top level, and all the diagram specific configurations are defined one level deeper with diagram type as key/root for that section. Following code snippet shows the structure of a directive: ``` %%{ init: { "theme": "dark", "fontFamily": "monospace", "logLevel": "info", "flowchart": { "htmlLabels": true, "curve": "linear" }, "sequence": { "mirrorActors": true } } }%% ``` You can also define the directives in a single line, like this: ``` %%{init: { **insert argument here**}}%% ``` For example, the following code snippet: ``` %%{init: { "sequence": { "mirrorActors":false }}}%% ``` **Notes:** The json object that is passed as {**argument** } must be valid key value pairs and encased in quotation marks or it will be ignored. Valid Key Value pairs can be found in config. Example with a simple graph: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'dark' } }%% graph LR A-->B ``` Here the directive declaration will set the `logLevel` to `debug` and the `theme` to `dark` for a rendered mermaid diagram, changing the appearance of the diagram itself. Note: You can use 'init' or 'initialize' as both acceptable as init directives. Also note that `%%init%%` and `%%initialize%%` directives will be grouped together after they are parsed. This means: ```mmd %%{init: { 'logLevel': 'debug', 'theme': 'forest' } }%% %%{initialize: { 'logLevel': 'fatal', "theme":'dark', 'startOnLoad': true } }%% ... ``` parsing the above generates a single `%%init%%` JSON object below, combining the two directives and carrying over the last value given for `loglevel`: ```json { "logLevel": "fatal", "theme": "dark", "startOnLoad": true } ``` This will then be sent to `mermaid.initialize(...)` for rendering. ## Directive Examples More directive examples for diagram specific configuration overrides Now that the concept of directives has been explained, Let us see some more examples for directives usage: ### Changing Theme via directive The following code snippet changes theme to forest: `%%{init: { "theme": "forest" } }%%` Possible themes value are: `default`,`base`, `dark`, `forest` and `neutral`. Default Value is `default`. Example: ```mermaid-example %%{init: { "theme": "forest" } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing fontFamily via directive The following code snippet changes fontFamily to rebuchet MS, Verdana, Arial, Sans-Serif: `%%{init: { "fontFamily": "Trebuchet MS, Verdana, Arial, Sans-Serif" } }%%` Example: ```mermaid-example %%{init: { "fontFamily": "Trebuchet MS, Verdana, Arial, Sans-Serif" } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing logLevel via directive The following code snippet changes logLevel to 2: `%%{init: { "logLevel": 2 } }%%` Possible logLevel values are: - `1` for _debug_, - `2` for _info_ - `3` for _warn_ - `4` for _error_ - `5` for _only fatal errors_ Default Value is `5`. Example: ```mermaid-example %%{init: { "logLevel": 2 } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing flowchart config via directive Some common flowchart configurations are: - _htmlLabels_: true/false - _curve_: linear/curve - _diagramPadding_: number - _useMaxWidth_: number For complete list of flowchart configurations, see [defaultConfig.js](https://github.com/mermaid-js/mermaid/blob/develop/src/defaultConfig.js) in the source code. _Soon we plan to publish a complete list all diagram specific configurations updated in the docs_ The following code snippet changes flowchart config: `%%{init: { "flowchart": { "htmlLabels": true, "curve": "linear" } } }%%` Here were are overriding only the flowchart config, and not the general config, where HtmlLabels is set to true and curve is set to linear. ```mermaid-example %%{init: { "flowchart": { "htmlLabels": true, "curve": "linear" } } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing Sequence diagram config via directive Some common sequence configurations are: - _width_: number - _height_: number - _messageAlign_: left, center, right - _mirrorActors_: boolean - _useMaxWidth_: boolean - _rightAngles_: boolean - _showSequenceNumbers_: boolean - _wrap_: boolean For complete list of sequence diagram configurations, see _defaultConfig.js_ in the source code. _Soon we plan to publish a complete list all diagram specific configurations updated in the docs_ So, `wrap` by default has a value of `false` for sequence diagrams. Let us see an example: ```mermaid-example sequenceDiagram Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine, How did you mother like the book I suggested? And did you catch with the new book about alien invasion? Alice->Bob: Good. Bob->Alice: Cool ``` Now let us enable wrap for sequence diagrams. The following code snippet changes sequence diagram config for `wrap` to `true`: `%%{init: { "sequence": { "wrap": true} } }%%` Using in the diagram above, the wrap will be enabled. ```mermaid-example %%{init: { "sequence": { "wrap": true, "width":300 } } }%% sequenceDiagram Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine, How did you mother like the book I suggested? And did you catch with the new book about alien invasion? Alice->Bob: Good. Bob->Alice: Cool ``` �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/config/img/��������������������������������������������������������0000775�0000000�0000000�00000000000�14332737457�0021025�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/config/img/accessibility-div-example-2.png�������������������������0000664�0000000�0000000�00000357737�14332737457�0026760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����B��� r�� iCCPICC Profile��HTY}$ХޑN�)E%$c *vD"ʀ(8:2ĂA@2(`~t{;ww}Bg Y"�(*ЇD?`Yl P޿w4ߴ)sb6�P2ʩ1;t" �H7\"N0*"@oMpMp�vE Xt�ڨNGl+(O8(A*;{E t Sə]TY~+]S}M/fߖ%]d(( 1f. 5,|IIb-Mf/Dv6+,tLY 3fbi-ݕ&eL3K4s43VqiDžM83:d&WIds>3z/);+zg0frdq~31xGv0+B 9Ѳ9s6B6 Vp4`'.LHLOIh uqiLƊfoko[DNAH}'Ag&:g|I4yf|f�ɂ-q$�T& X{ ܁7 ĀD�dXV�`'(`8ept�Aw` <D&C=D<!((@Rh*2 ~NA硫Ptꇆ'ɰ a:̀Cx>/s|x3\ WG<|(9D G:⋄#IH"BV!H R!HrC^ 18 CXc1AX  S9i\cF0_6eb%l �$;}p8\.[ۄۃǵpQ<{,_ߍ???z{B�! J g ݄1"јF 'rˈ[AIdJ Ő2HkI:%R/鍜\_n\1+rrd /9,%o&$P(7%"lP.PQ>Sm /  % 'n(P$*(*W)+R8DUS WVڤtXҐ2^D_O�R}l:~% NTRrTCeDUYQ5Nuj>5DDEmO: uF:n45=4i45ja,"hպb,YYϺ k[hGi/ާݮ=#٭sA煮nݳzT=O=szh4-VJHҗWw<4$ w5ZaTktߘhL72n3~objodTÔikZkkF12[lVmvgN74ci[8Y,-nX–Ζ|=]VX+W+Uk5:ǺֺF&&ϦlIn6v;e`<flr[�M-{:Q:mpju,rsv1rIqpCWG7ѯb]}\Wv&q;{a9ss0`yTyy<S<byU{=6x~0gd00^|Nu]u+? 0H  t \ td3k#.+/CCBZBsnf&k #L#G,|e"-0p-1bbq qq5qf'LOlJ'%H?odM/uւg*,d-<MO9Ϊf2S+RGؾ]o0׃[}V6=}+22*3ggϊϪ&dd( 2.ZKh),-v[s(Dt@ 狛$*(jIKs<ss>,[rbRe6.{rr+֮_XY ZuՃkZKZ<ۼ⼷5X@@Tpg0?qƯkEE%E77]7meVVۼ*V*->w{ڎow.yıritW_ihin[w.WhWlx{޺JʢO?[XPmR]/gߓq~\s@@с/EXRSsXZVZ;|$HQMuuUjE1grxuZqzjX0kkJl:|ٽo6<-gIgώ=7"lyq>@.ܺyRȥ+._hcqUѯ5^w~wOv8w4p5lW~7/b޺u;;wr˺~kz<~T}}gG?~0xσO(OJ=:=0l޳c/ R_}$adMo4|u4bѻwc ?h~8ScK>?~15kx%bMJ]pZ�Z8�j'�ySZzҠ)?I?ޞ4g�PO d=�e�֡y�@v+d&NsEFuTeX}h�4٢yS*clJ`: л8g���eXIfMM�*�����������>�������F(�������i�������N������������������������x������������B����ASCII���Screenshot1"��� pHYs��%��%IR$��iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/"> <exif:PixelYDimension>322</exif:PixelYDimension> <exif:PixelXDimension>1722</exif:PixelXDimension> <exif:UserComment>Screenshot</exif:UserComment> </rdf:Description> </rdf:RDF> </x:xmpmeta> ���iDOT�������������(�������]��@�IDATx|G_[pw+@/@SQ mq(,HA$H7\g%w ?ٹy!ÇM׭[ZuQk0WRF-cM7oOܟ(ٵ[[4CBB}OdOeZw$ض}lۀQp>}Ԫd6g<S V1Uܹp=m\nxlĹb{s\ѩsW9.>e!oX2:6<igxu妑ia99h����=zD%J˶xjذAѣGmd=~1^_lFtJ Mկo-[G^=qhS6M:sn@h}7_S.ߙsgS1b8o6V3m{:x | ;z \,AJ.CuŶqšF#[A�}ϵшݹ\]c3ӛf >lFPZtP?���� t9,xuJ*e$sNaQ"(N8tee}*JO9䠔9SYΓtlTeu]9Iϟ8_B\,Y2U<޼ysO#޼<xPfN5q{ŋOJ :~ +^8%J"O|t]L0ed̘J,A L rOx{s$;(gThQʟ?_Mk:sҧOO %JF"Lz>sFə#'eϞ-B~gX?w<:}n޸)R@(wݓ+VK' Eڒ%JRҤI,\9ylu^O6ى)EL>bHk ~XyPmvEdɒRϖ JW)KGu(O Zjڼ.[eE}'>j!<yR/~Tt)*S,۪˗t):Gӳ]ʈ,* [&ݰa_[.TvM.{T3Qw+<:|X6l20aBǏ'OPB(M42uWy<s,e͖UNq0N8oqFh+<Nx{)X<K ="|c91+U$%Iqbysʚ% Ν[?ΎLݼe ={խCr;w,q,y b|`>ϔ/͛ʖ)MYf5dL2.]$?#iӦ}w[OtW˗)c&q{mp;93|:G.+eʔa|&p Gnޢ)RP,b *NX0ёOG<s'/)R$½Ϣ;$^^t)U\ʖ-K'Ÿ{J*5l#u?ٱ<T<wQ3?N3XB|o˔)l {FI"|5 <P|{%9aXժU3i?\O}=۞cnbH:B?qRLEUT2>]}T?3S[RqyL.Rv#MeF:2e->9" V9= |HWk)K,jNJ:ESs}(o$]8�����(< SN҉IG]j01fȝ^bܢ+҉iDŽfQj')WTg*дO߈牎BG(ŗ@Ŋ5fΜE?8wԱc{8pڶ ŶS'OXϒʰ۷XL$rGЬY*4mGG'YJȺO?!-KXO,i`^{ {B;tM1a5l19BdX⊸\[C~Mliʭ]JEJe<OX6mat'ny<[<w%3٢BBXذ~E:?O;)yU<iS1,28q> ѦM[d^ ger2:gH uS<IXЫ1^fq•gP/Q _GgjE:˖'`/F#O)<gRN?vhjִ̓k <Ǟ%Kѐ!_0+c0gf͚мy 9䓎 6c|.iF^W6='nj)SE(Sn4i gF+봊ڵkA p 60sbCeu*{ 7Yʕ*c-{K߽[W/ŋ0֯ibΌ,+XjҸ{cԲek="WSs}?&r͛|N4 <cnjcSS-wi4_3٣{7=Wx :e/8L/MR~XpJ"! z8n[Ld[S,>ƥMU&aE|)H1:wcTk)Q=|iR � � � � 8]@Wv\ՙ,RZۖ~`(WBJP4C2:=Ǜ k/v]Lm>vAF~?J(CKQߔtU=g.}pYO׫WKP۹c&([fݷ_|2- bie/VLƹUK%j!x"_PZ rͲϑIA~YDOdϑ]a~Y6/˨E.` |r(I gvlѺ%tݺDT؋HZ͛;2d߯U J81Jx;xgw>|MDZ}bM;{7, 6eOb,={IЊ+U% O"Ѯ]Ӵ}NaUХfNٲe j֓Z*3GW@Suo;wn\9s$c!֖Ow9ij;b/ֳaࠇ-NnXtd<閣<nUr<*/ĸҮ]G̱0=ǓM4Ξ"e9:+B+T =q|mI9w]3׸y_hǔ<yrھ}|ٳfRjUUҢB-ݫ/Vu bBW9WJ%2f+{e+U͂>魄.Uw~}(ZbfJYTZutqO{fu4S6EN/#[nV&wBP׭{Oڶm;ڧw/#_(P&% ]s4G zZL|ulUmB*-b_{/lټ ]<^ҙ[5k0+ &O8:g ?'ILk֬3A5<} 1[ EόЈG,4)7Uwe!Z`?#ssz"ܥ~Rf aYSX3nq򻠪Gc, ~z\}T]BoHa#p8KW gPxq,BGp:OR/(Te/(AR =sΠ}HCzb²,Y � � � � (1)gE@,1a:^ӟ͆G j3L>N=|fcD#}W0ӌғeܪˌp< | WQeloSXHEzCS<C7B�ac*Z˯Ē1F21`RͷF:rĨSw|nQm,v!ۢ|"&Lb%B;7-NL޶}EՈ$F'uo>NL,qbI =ʴy##qO5njw/"'B2INݘ6I hy7|&GQ9G_"Q%uK+d}7hd<ƶq s7҅T{9ps>Mٳgf0o5XT}㭟Kkgn%^Ϡ^X˸aթGEꏉqeܸ- yt|?"ॏ܇*Vj ^{Ms(?%,L٧A_ qj3;a5$T~n?u$DU=#+,w>YzNQ69#O#}ۥh&D?#n5F^SKv$rt1Fbz~[wn1w>'Քի);=xE vf~%#Bx6J^'_5K9aYg9[TF؂ 0[>}r{ra|yvbeӎ;-]zxQ{SL5)$=HyTf!tu1◊y 7]0hQ)Fhy|*qZ= 8>(e_gj\7A~wr[\4q@�@�@�@�@�&{I #z?Ӳ "CŮ=wݵI ]j!Fy/[N c?]kz~MN4|?A%R̚=Lj7*<UR-<:#þF2FkǓj"Jo<eԄ ]._6&y2p<`˹2aG&'Ь]<d e9sZ>"_dRFO6~O~b_"c2ZX`դdBϠ@G'G<쏉qEq͂rB>y`ȣ&UZLUCӫ~+t k="%y1y"Vw,duU5&L_V+sOֶm(Jd֎*Z:Tœ\O{x7^{}/^L`\ {/cpޘ+-8 eWȣlr#N}RaةX(f8:+A~ϿXaںu5z ˞%}N9YDT&M[XmU&,e}.tmVS3/<ib1MXWťM|W5? דwPNc^]eR^Ds&noQ~@�@�@�@�@>]sŏ50][tJKF Jo'MHaK9Wo͓bՏtl! ]7l4'x'[$b#槟^;{_]M�qXnH.FIg( .5120E:w"尯M<l˹2aG&֛J7('t'5&<_YDQƍp?v[E|#PesgPozĸy-Y$x2gnkK�g.gl {"еfZ~=[ֺjbʟc*S'~ I_[v)IҞs4\-~J\σeպ֊Ӱ@S8,+#kcTqqߙ V~Y^{y>_RN ]je}Sig ;bڭ5nzlY@,8PϏ~| K|O8|2#Ve$5AՏJkrƩy,-~SM.0txSȍGe \\Ρ#ī�]bK,kǖ\\{tl+Yzu@<����k t{uAPhDZxaeKuV1&cJ@v *Ø#/Ty+tsTG~Ueaۭu[fĔ&lM*n*~bR$[r'Nyl)Cg~~ߠvE^OfIחI .[V�,82ous> 4P&%:u e~d\P]>zS+3=(!'ž'O˘).SsFrۖS&Q*ޑ??l+Weծ=Xڢ,tʪL$elkdWM[[Eu|UÔ `&ڹ9Ȏ-KܖՍL+69~x/J퉳b֟D9%t) $^NQi}PK1_[u3ƂDA^:R{ 㜙wW>mE5u~Ns,gAU_V}>s滇3rZ]bi{L.G^Z=}TBW9TsKN^;K%=.EG����M�B"~olbK.%2dʪ.~K2G"U[;,7jj;W,x a{ޤХOl> 믿7jrfhF5)EnyrՖ%ŗїN`Uy*NzF?59{dƊ…XtTq#c5Gʙ&5KY;[BO>.b\MFtϠfG&GS㊚f//~&,jo"s1_$}8Bi5* \1;V mf+c? _eGgZ7CZry/{.OG+?CC>3;~wjyC;-2&m brs~e~u SFB [/ \"υrJPbڭ,Y;]$-wDoOոߡF+3IwyVKFq~Ns9lu{sni,:y)Ӳtd!nſxSs}lK۫ݮGEB|gLw{lڳ,~r| \>����}lyr_MSeCcF&7J>8$ o0.};goZ CYXrf-sE NUyL ]zJ8QuɶsMQi#yJEǯ&WXi^z"*C_ '*9rj_J [j)2}"^NY_nQKQA5:dh:qo8JS)"zWA5,d_=_WԒm<.d<OMe6꯼|vXP}ϕsE&ܧXDv^:3V*tٲTҗc!žS퍬)1^/C\v=^Տh>˜1[EKF^p!BgzØ=kr8^]]}"Nuޖ˥m~S ޲㱲B-J l٩;%@ssZ_6іEkmRB2Qי,bNK'.e׺L/lYY<g٪K.9!C,:d6#qmb*? � � � � �@z¦\}u,F).^^o~P[?dq]{~iytER=c'ul1~LvHb= vD8ǙkR=ǖZ̖vy88;~+XMYOhB?<&l-3 i#E]Ctj҈lI6Uz7N=zz݊nա|6t'g'иG%,G.WA򀶬?*RbmxO\LWt~l9j8GWb+UqdqJ,Rj<ՏU3cjBU֓jV/AغVGސ!_J~\Ԟc:}||l50">b- cFQ95>Xi^W֟ $ﭭϙMt.nkqo]c̺ܹ ~BryP㯲k<~VX(ӝ1JQߌ~NSqNڤVs*#xlEE;YM6]o\6~qIҦ�Roi#�@�@�@�@�@ r"cYǧ5Uar`젲S/i<o8]xUv -M3LuG-\^>N"a(B䎵h"�/OdZř�gGxӖ-7oyeq)}R@&>bVk%tqs<<I][ #mw160iد_{tf+BZj'Cyrz\ )|'5҅\[lmA:lbqRّ#>J~f-<._G[`+\LW<TQr<~6t0Y8qrpĦjߨc<:?kAӕRgh_rP'j8#HTyR-tbaĖS w ]UQ=)f]1=VFV[}'-_/Vi[}ྯ;2?w]s;2/XrO'k+: QYU})k ,L>zHKf WTXT߱|*f\yTT|~E)mqw/&_A:]5ֿ9t˰ k}rNNZ /_H4 @�@�@�@�@SnAǧE2|KL [FYei2,a\_J5<ɗRdOiq#~ԒgҎ$CSƌek|+V4SSիtiޱcwFӷ�yFP(^ԻWOjܸGL@%KedɒQňۜ.]:{ m[7G ̑i8}ҤIi׮$&zdcFQfMܼy*UfM81oߖ>˯HL:s3gNjʕh_<|%K+WdX6?uGJ=za~q Y2lcuIJ<@zR`ɓD[t)Q]=b~[9?[[.cF Hqhүv$& !CJ.ڹdB#UoF~5E2ep_=L HQÆ nԵkwxԣw>j1yy#Svm-v4yTj޼'&ƨ{g}@$:y|L?4cJ-[[+ϠuaB|6/=7Q{br\|`ʲ:ʕ%Ez0nuzoy^=<689sf>qRtR~5n(Džٳ۷̙N۷mYń/5oGJ*)Ǎ,;wl\rI+ce2ﱣ)M4a&ݻų߹K7Өf2'_SԩHL fɟ2eTI"{SL#B}gq7.M ޏPUiAFU|q<!*ed1+UisHO'}"Q=˙3e cEeߧeܗ .D!!!F˗f앎wk8dӞ2&)'g|2'dSȟO?AC a}82vw?'ILE,[6Q޼9{ʖh|ޝ9CI$! \)NFBT|oʔ)M#o~F19s1r'N.^z5 NyT9OS&QݺuԩǰGaty?oVȻ<m[̳Aexr K:\5sXу\*fo9Uǃ"����@4 @>euxӜj3 =W"JoSoVZăE&&N{3u=V\ӧϴx˘5{,NfS6^⎭9_x[V#/DT^+r? DoQ߂՗Rm7|~<Z[*y#x[״u6Ɉbm.] GuΖzKD*,8*G~ٺmh\~_ w8^8\'Eimv<fn}R+BfD~YsعV p!@ml(s; *NSRղJ15(ˠ*^کn lèz?CJAr҉oۤ,סczP!ظql%Utl<֟FF+#}nq}1n}jPN7W rƽe]u*:bzT葭bu2+[-tO^^^wₑU-?w8@9~9-5uwd,jV= %܁m>\3ݹ9͖V<I*LG}?T\TGG'U/KLב2qE/qV߃GM̑ ����k`M+FQ%(V(ݥTyPlf+.7T"-u~GlٲJk(BD]zn7_ʶEUxXIA#&1KӧYȷŤ}ĒT‚)x>S7`o3~{6W‚.u7r.&(̛-Ւ'OFځJbaYH<oJc3<\WGgd˾Dl{%ۭpwUX4 ^aTtcT]l-آEsiƟٳϓ;G/K, (?מ? s7+%jVO|FP۶mT1@@h#.SL%KHGgXRuZ g[Nz*-%[ԱueL:Y{ŭձ JȞqVK [n9<_Yt^SiH,yHB* R',;@�@�@�@�@�I�BW4rvk E��x dK7$ڵjSz\J1ejx9];ɉ�^y@2/{n'S,?舳%t9i@�@�@�@�@�C�B8BrD � I M}lžhɒ}9P6. t'e!@�,{upنI^U tEE � � � �  t/.7@D � �O{!rٳ8}m䒔dz@�ކk����/冻5 ­R2]# C � � + \|?@='KF5}a 6ǖF͘>hHŋ-B;@�@$s;|JCPIIh����xS t)@�@�@�@�@�@�@�@�@�@�@�@ Z tE 2������������)y  � � � � � � � � � � � -A�@�@�@�@�@�@�@�@�@�@�@�]o<�����������]‡ � � � � � � � � � � � �o�7E������������D�hCf������������7E�Bכ"zA�@�@�@�@�@�@�@�@�@�@�@�EV^K͚4 d�����������xkNz ]1EOޡ_/U8]̦i),RS ~M'gANIK:rj<'zu?;" ( ^,E;w!]|LS$<SZ)Ur *?UW}VQ/-7HR"9}Bn<dSbv����������Xx.um_H P8ES<WӥuY@ykr:#ˠ/BH)?rTIwwֳNhɬKghahkټ4t'irOǕ䱈 B㳌aUNGԒ3 OѪIPΚ'i8kR @�@�@�@�@�@�@�@�@�@�oŷ]zwoR/S�B;ɂkLSǃ ^S6jkB[e%L]D Gr3 � � � � � � � � � " ]|ت/XwŎ> |)tqĉCGiҽpREB)hF'x. M.0AZU^~W����������[-tn'wT]qYy}'OY+f^)p24QrY){7A\cأ0ʼnG.2%<z.鲔JxűF?SAg(VA)Lͳ'wxiQJ<)qta0zd+8G\W<^.eN?H!>-KOgʽ$Oy VQ/?NOWC(CTx**U!ŋgus$',S1}$ҥ _~s4Νz@,XHF%ʦBRi%GaZ>Pe\ ?%I$_C ^_]׃IlFgiهe4CR=zFd]3PzQ%im[XiBo|dY'~։tthO2I)GGO=(or\P@�@�@�@�@�@�@�@�@�@�$wB+uV/ē ڠ$ Ӓ )YdTe: W?D#N_?tfU&9(5Y%/u*F \EemapqOQlnPނ\+۷җ҆W-',W K_a>4yydY?hyo_K"3sFZ,2dNL[\GWЍ'M7-I!hO):ìhX2*ktʟ F{R(G\R3C>cd{zC(e,3nA>HuF\nszI$+҉idzY-փ |vÈS!Ͼx Ћg"ͷUqnNIŽsJ8Sw9*ީdi���������cKWgX`a#[{E.U [th\iApe8B/x;x|1[v* LU7/vKLx=P”Z_μWSM){y:�z\qfdyL} בRfG/tMOjb9Lr2/ҁ_I_Q _ >Om'_PՂ2}Ttzp?ӲRFޟ ?[堊3eP2,|Zk5ҳgs4br͌Jkt#]_<АpwbK#O2i6 2݀ofKB#*P$%<Hꏌ#jQoKegiyKSѷܪ3dTJ jL9 #[/8G'=W:XX|Ȟ=l5l;`�ʝZ~_TDoK+s麰bEԑt8*+c1-h?wlav]O6,XDuc0kr_ lY ?eX9R=R慌n4���������xG @qy_K[Xx]rHV\%bJPRp]bN6Kr4#Bڑrc$y> B"jf!WѺk;)]tLҗB3 GeOuf?_MP}T*,P_%C�Ӆ.e)H-NMp$4?,NHMQB))oAwo?W$ֵשc=2nT=s`1D(:OPڨ⏑gׯO,OOKSN!r)pf�}<="Nя'S2e7ރ .oI�dmT"TGU+[/ =󄰢*Ҧyv.Ij13[9_<ZV]긯\Bӱ6L)`wJ̠ጦ0}Ү +[ɥNJ�W;&S6]!eL9?g,qSXyq@�@�@�@�@�@�@�@�@�@%],]#:5[.=CK5O*{=%2/CfD .tىreDhwqY* jıGؚ,f6[Uu?%D3/odPs})mAKGO?*k~tzߔ Ir:1}\וh7MdŖ:~KԹRB#m)rE+[i9l+Ի*dP3J!E:%6ӼIJ2n[ԪN=|NS-qzLBw urY ,t%˰B}qWbOnRץX's']ejآ4/I JյB3t\,,lγki)(%N>aLaŮO/P X8n=J^ߺΫdFtۃ)Iz–5[H̪plQK=J=QbG~\زX2U"T����������xK BnN7[۰UT) [WD4.t>-iY?,ل<'֭xiC[br3[i\ JZUC <GѢOBhFcWe(O=%Lf–5'r~{mLMۼ#'h{uXC�(}|n5PlJ[{tݼJg_-r>ڱƮghR ZxEZmzϰN!!7BD<%{WfʑNL=FzIrb JkQ7V^Jg&{KXJ] 6 GO2R\"Q ]lLwgX@P$uۧXN9SKk!@�@�@�@�@�@�@�@�@�Fo~S aQ'S4 4zZݯ ]LQE"��@�IDATҿ:a Z"^>%%Jei1'=z]RяKMdDTBNU_Wc3ln'5[ý)%ڄ2g2Gi TA޼~azF~C<ӁfsX~pXzo,k}aU ОԼcVSez1ƝLJHq EK}Ve"e:Ѥdt=vޟ TZޟo|])k*JUihmz—_ү GAv<|zxy:w4A2P � � � � � � � � xk.G:$pu !c+IYQ+ru˖H'><�meLFo}GTB2aw8՚~=߲Mbm0]1t+=|fYLv >}$ʛ<<bJLd[t~Qh`o(o!OF{hۺB {԰v;_m.X l>mYjRN9//'q.m0a+2SStQFF.ƗNL=*RQlٵjYMѱIG(G~y8UQ ]u֗rM6Fu>#ئ?%Ig^x?ʰf6ˠZ$pt|4TJ쏖qA˪:P4���������['t9ke$[L뮄lW61'y#]xo(%NcڟogGWTBŵ֞AITB?)sjtN<D[rtktʟ,28(x.vԤjum/(g8_aq -=~h#4gE4\i;V/B9 <CWH 8 ]!WVNo)M<Qp.Ś{I?gDRR"k9pONhP#=~P'1*RZ6*lUqpe[=4xo !t k.̩z2ŸO<'g (K,#ǡy���������H\? ~*9&Q_qg2.t5]:Q>}N,rإ;g,_ -|D[ыqTBؼQxʻ +ӫ'}euV<R$Rut?4NӗG.Np!W_NMvn #Tkp!2=jPleXPgL ]qYM(-8G i+ED.8Ru%ԨpYEZD-]fŊxUoߖܹC7nJjժ'QpgR>.V^{xu?ٛRJ_m?%.~!F <䒁ĒPpy|]w]-EsLӋ*j>tyNYc-)n6r!@�@�@�@�@�@�@�@�@�=ou/5WL^rm,Oz8LV ]<nW'c2�`Ra;g.η05)Z/܋g/2՟h/JŹzmce!AWhI@B;L^^WxRo!P2qh8.j*',V%ij,ı$y_>IGvi@ ~J#_v3<Ljf9kQd񉅱^k2c-t-{w04~NEj>qi\&5gEgiJ&㲺']/~(j=S&xQ+zzk+-deZ'pޮ]GzuG&uڅzo edZyxO0at//iCY ߞJc*s4\e=©8܀ 2 5 Y=}H5WR'rMwޡ)E˔[^,Z"ʽe@�@�@�@�@�@�@�@�@�1o:[أ0͟=Bz.zpnATjbrBo?eëe1YeTSSu⦴�ay^ 4W^ ĩ2uG sI)Ylt$|jM ],uj.ۘ%{R*V*5=}A^wv֢J52ק P3&R!{|uߧ3ҳgԾn:~n\}l^?iWʼnxESѳ/hכP,=+*rz~+Q:ocBR-bEӎ![8'p Kh$U[G]x~MB.,<חl Ņ"OYR{*KMJqz���������-lQq2L ]<y]GXnkJSRҗESql%O4=TxIVA1s,{&ru!Ɗ5iN&eXdgz}<j',(͝O? 9!-nkPlf!Im[wv2&nmԧ[sPA F _~Գmk8rMZ!?7:4ccYX/h#:v{f7m ???W,(\hؗCP{[A9Uwl}:\XCyyW4bL[nIr,ۋr]@z3-- SoۭO@�@�@�@�@�@�@�@�@�@]XӅbyB6}2H>fx,qr LD)s$铺RuX0^oWlt?+ a\呜Ҥ3/ hl Y[iʛǏ|%BAp*J.ahl[am o,tʼn:[ża' =H~QD ]f5K[LݥTyPl)n\ XL䲄X( @�@�@�@�@�@�@�@�@�p.7"@� 0)x jkRj8Zr8#���������� p t"�h*wlGX9 t9J @�@�@�@�@�@�@�@�@�@ v Q�tT  � � � � � � � � �n$� 0M'gySTWP"�x!TUQ\&u�����������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � ��5�������������.7DQ � � � � � � � � � � � �� nqqƥZ@�@�@�@�@�@�@�@�@�@�@�K�BWt FA}_R6h3Ce*V.6Gߗάh$3Rǥ7, ѽw)s٬lQKy7ChN_JTOۮ~tk^EV7Vʻ.ЂM5{O x@�@�@�@�@�@�@�@�@�@?I�BW ߶ hR σRԉָjq*L~g7]lY[?]6IMz.Bה]߻bvx0!sW^~W#6X6LNSm鶩sV:ʏ4Jd����������XE�BW g?ΒgT1ܲ/)g\/]7M7= 28].!���������'s}2nj֤ٜNt<.XtŖ. + @�@�@�@�@�@�@�@�@�K?-t1׊뜢]ɝ"mWܢާO+t J5嬖ċ҅'pޔ9SYɭb)@K!nx]G(GJ;4?LwNн?q2J(yTo!sF%6MJ97[2H ۿg⮥t?X&%MR,D9+4DnDWmQ@J,Ȕv'C]聆Vx!e˙/}wpT^tSڼ=}AIJ}ٚ�Gt}:wːxS<mGuƍCjfp<zKMKUd8"SX:0otpmuUWMO>GiǦ:MBj2[tD\߹Gt迩k(V25e̒DOj?u^0Y+RN`$wUJz*Y>-̲Z.}ݥ 7^yPڂj���������xCBsc.r3mIt& }Ss}(a40#-Z|zxއ$dgk%Ӆu~2^G~蟇)Wv'*q {FS,[,mE?,lĹ shMNPDxل}@qudttpe$H2!ZY z4BtZy'I-ZBS ]8gfG_=rM7HÑSħ-Sɍa^үߞ3”f4~vJ1pݥ*nI_kBJm6Qœ-L[uˮ`sPA<q"V)~| wdjReo?"l:Xg(Bxd{t=n-Ӿ,u앏֋_V[N矔`ɞe@B?I|p � � � � � � � � � B3K:kz3D ['``䨒"BhB’*eLFeT щIyl ],+s>s ]WҜ3dھ)EvK˞3 OѪ/BI[DQaQhNlGv4*гG-tߛoUBQƙ>)!hUYw캩ٺ?g(u,^RZ%LTkNwQMm,ISYt``Y2Fj3\2=[g|W(_62>#6hE^r#*? <<Fyk]8Q.t钇>[nx:O HQ%S!0)׵>ڰ,B}ՃJUHGA7ФQ爭 kK 'i c%τ8H=Ak@o,nj'neiE t‹÷IhJԤuN2q#N˨Ȅ.ekp!ʞ+)_~BOAFuK(#+EZ5#< � � � � � � � � � �1F#b"I,vi?yO;Fg1vnXTf#Ȅôybl )4(TdĿw]M3ت\X lzvZd]JQM,\9g:/mDMb'cJu{'%MKZZOsxPy_U4<WZsq@߷PR8\[)gzPz~9UneRvwޡ)E/`jc?Hf3Z ],8[BC) h9vfyj)-@mrd9{ޢvJs#VhOwዷ֔K4l!u=EHw;_r-s~\:+z9xYF^B5MkeBu~ز't:L6SWFy9NM5#G&[u|4]gY*آ0%H=Ѷ ���������odTKFdklo:$N%ɣA~(^>3WXY k]4R`e |S扮Ņ('rϓOh\[:PF=©Ӝ.Q+W I7Oߧ#Iyϰ}bOq;%X5#ΞezdJu^Rz~k_"HD* awV#R[]XCl/mZuAUaeK ӅϾ-JC~,G[5~Vj1O안JhgH!NfM@z*jj+XFp ?MY'%ˍ,=Z!re4Dt@ CDŽr,xQkiX,8A�@�@�@�@�@�@�@�@�@�K=k.@:*ի,iSe~YFI-bk*]O ͑An i'>g+l atbkSqf8|:imeH]!{hsܺlV],Pe,\OoQû/ab*A7Q=X"%N"~2ȣGbcR*%ϔKOJ% 7RuryG#2i[AkOxy@k"/wn` ]}ާBSY'JRRlU6亩<,  t%{/Rg2tc2䉍?Q ]:%.-Aϛl,խB珟#À-2z?-9 � � � � � � � � � �n" ]0tDbЕ# {.m[R/�{A%Iގ+ZSf,A޷hzI2B4$ E5C*^Pg6]@Uڣޓa TGvEJ)9*t]7v|^vE.v<JP),\ؾvjb*{zq</i~X# sU%G^~ҧS2,_׉,HǔV-}>aЦ^RKjb.tiUyxA Jr{J蚹*oMV2j|~(˝(1؛xa~g҇5wȽd8Թ1*ythmY>Rl沲Y$)كgt~Y~LZwre$r���������% ]LkeZP,8IGŞ[w}`SσR z7x%>\֊ ytw:S~ rux6h3e(M!фlcdSY&:{V"q*Y~nE>)o<_%H$NGWmSOCxd#88k48L:.ZBR&z$DPoPޚy;|h{O^lUZwpV')!!  "R*Ruupt G}۷>NwM-Fuh ?^z=ˌ.O&'F׭T0 Z7ϡF čƻ{mjVe;Ծ'FWZ;ӐqzF{ݔ&J32F$3w "UGq*о%ΖDDB@!P( B@!P( B@!PD�.$L~Uʙ#w{cr镆14>O7zE?-&g Ѣzx\x1_}Lӏuv:ѝ =к]kCӇ4`K ZR=v<iqߵSi.v y尺5~d A9 +]FRf}!!o qppe3r#{&/gw{_sJ]*avmFD;.TS= O=3YMEE4 *f%oarQsӗoE|~i`^QSxTxhtݣsOϤ#dh+s,TkQROSWB@!P( B@!P( B@!?o]0a Z/ ߅蟇@QY)nq1cdg ,5RD~]eLq /F*[q0m2ʓti<L=yJRq Z7u|h?+)-j>^0/\1?=8MiV׋h׽%cNk/O-''f(P|oEǃ4%-VԨnED4'T6Zު0(wAD\X]ǜfo5qBMKPyaetA"'}|P( B@!P( B@!P(-+"L:;לu&lIY:4ȮBN׺}hMZݸv'%~҄A]ٗD#3`V0g*ygu"=\)lNBʁu[3\Iv'1:?]7O}k(o/YWhA<LhP'aOJs* <GZZdet]:Jgw0k(VP&M\SSuÉhFo(Sż=яc qFL 1— 8'_Pçrx*kPv+;S%ecB]PYsn B@!P( B@!P( B P.P? -BYs陆Rq#cdtavfv(ۄ%DS{1*\AlLZ\b铃pa=K]?y9L!zNV5^M?鲹-Ѕ-& 2Em=2J q&dBBD)alto_8itguneu#Kyt<=sJZ/BdЃ4eM=@ 4zgp0ʴHBŏ~ÇcQbI( 㽀 EvP "#х6w?L&^-o%+$>y| fdte& /=ish=~__S9!DXrMӆ}s~6C\:.=}OX]fr :ՍB@!P( B@!P( B@!P;+~Lk3Z 1~՟x5LSK>` $`őUWzCdYA75?=3䪠Te\" fk,dh膦35a̳sZY*z yL kwdOteD"UEsQ -x<ĈJ}6rTk3T׾9hЯysg֓583}U|d꺵gmT:1DbѨfg`ʘ5WQn4ץ4K]+Rպ9 ~PǍyI>s@.04?{5}cЬ]&j93+G8?OAMq?ߝϮoz}UJ B@!P( B@!P( BE@1ӽ3w) O3M[A[ճL++&%JCcT٪Xq)]?Oo\bmi( >o*CztֺKcǡ2L[<8߿EP;,/=KҫWo)YX&Cݛփg#f4"O/ӏyRh+ B@!P( B@!P( *_}j B@!P( B@!P( B@!P(s= B@!P( B@!P( B@!P((Fͫq+ B@!P( B@!P( B@!xP+ B@!P( B@!P( B@!"]7ƭP( B@!P( B@!P( B=G@1P( B@!P( B@!P( B࿊btW߼B@!P( B@!P( B@!P( z_B@!P( B@!P( B@!P( *_}j B@!P( B@!P( B@!P(s= B@!P( B@!P( B@!P((Fͫq+ B@!P( B@!P( B@!xP+ B@!P( B@!P( B@!"]7ƭP( B@!P( B@!P( B=G@1P( B@!P( B@!P( B࿊btW߼B@!P( B@!P( B@!P( z_B@!P( 5޾ou?*( B@!P(^B޾_:A(%Z ]`|T_(F׿ݨY@`ObU3lS(QR)al5F,]piE} jY )Mt~נtz ~lb:_CJ!.()L4oX"߾ gБ_81)b4GA߸,%G|J.SAth= <zE3ǥQI" :{i"EJVH2Աt3^4CxTDR~A)DX>!!D҉#ڕ 0EƣrRRwU[n?*̩+Ϟwn|1/\<)1E{~H! Ti=y P,SJ)'^uf͕'z C?6zCqGwyC:qݸRM$fzDϝyߍiYcRt{~I'N>hLygң܎9Ao\ 5k叩YwSC_Z:;J}uٓ/RWz]^.p`]jXn+}ƢI{!y|Llm/]19%LlNpk>|=D=k5 S9#r?AA4޵"=S%5iSuƔx0wߤĢєhU=|}󦂈:1YZs@JY455XЄyv)*=$۪/١@$jμ]1Z1=p_yF9zڗ=83yHٙmSJ`6v~0;μߞg>4Sw]3+';Qrj.. 硇Wԧc(_^amy;]OޓJ-gղ[M뿫Ocǣ<ӏtYgWRI~mFM|{rI7RUn`]-e֖*N2 ]2eUmMX ?tߖpv/-mwņ֔Z~щ}/S׷Ikt7$)n6!' -(]Ƹr)Vн;/\<u<+bSDʵS/:1*ϼL>9 ^o47&̭yr䠁#P]O?g)Ni ̚ӋS*)L +SyTr2]Jes0fu <옙~0ŊSd'1OD~:}ߏW“GnPE۸ff.oazs4iTh 6Up-ؙW޼ +XI|B(̘U?ayU͝;zh~5 e7½^~ n�"/~C:FPZwusE!SK4ѵkZ%ct͎}yOތ]kOrw# xݕE3.gsѷ;ӡ[Lx:mwImdv*v%sh>9xlaj!0O9U`1ΚV$*) 0u왍g0Dm֩QΙuY7~ΘPed'DDū.=RߟV\[mWgԲ?(eTTuو:uL{{|(ob1F`&Ri<4>~_vp*}yc1 ?Қ%״ϚP8`g޳mڹz3&Qiģv<gf ÊvͺL5?#]=yOhμoO~=泽l^$Y;yW>dʛzp^<`tmܺD%FpO" wGM~Zв^ڵ6n-ftRD֙ B�c9][OԠ[ pǘ!#jIF2F|wqYm %8}S.|J߱rH ~}]f+*=s;$I3F7&2mC+n@^AevnQ>3 ĥwh6nOv ?}KNo=Y_ژb<ItL:MoH6L4+y>6[Qi# o /Uiyj4&y ?Dj"EWK<+PbiV-7wmMDh!`am&U`qO0z|IYs:K `ޔζV# h͹ҕSq Zy+F4D;zO$|S|7]v29֒'?Ie 6֓5v胝gF1ctٙWI}~Lh߼F7AAFl\ $k nA$fHl΄�TCdm6_;vN^Cc{btyy9yLԥw xbtA<mT0(?t`v*vִo{ݬP=%e˝kTca檲T~JΚֵ^œm<ט`kVLì~~瘖d貳3&t"ޓ60"lVFעI*z`0.BǶopOOμgw'꽝1߆oNf`ۺe״󲝕hI *E?FЯSRbVѦU7h:k"vڱ3.n[@{'sG ]<άLv]O"o{2"~]-9?)dܤ' 3K1*FU?R~gC>e+VUE"yh됉hR7D&-uD;{ߟoo񙐡6Vk_M;BRׄ0f.l=w.'[wׇN׊1aZQ~Z|Xn%_ܼjWHCCG/|ֿՋ͸ӪޠC.=UQpHݾ\ꁙ ʬYrU ؁@:<o%P`ț7c0oWAR[wcNc}1os=!Wp]^Ѱ]+jϽ6d¯~3cμ¤ߵw?"7*}5mma޻LW=Mc #vѵacϵڜ4X:!8?4-]\=Q[+#5m*2<$COOk ϤMHlyμ7S!Li}gҖ.AaVSV{McfSx=ĺ({|+&_tjxJ] y"=7h[N;lŇfڲwT*1-Tcrp2IqF]y]kiis⬁~fμgwg־8;cX6a܌53a̫y|;xq#+ B{O׍4UW9yO(og޳}UaCI|n1VVYx> ~ ,a|8c9Fe߹OCoy3s_Cy_'9<ID54LW+] zנ^mjPNhwAU>}Iree{.=b&E &&⧑|/I&/b'=}t,եP}&]q�Sz~KsyԘ!ŷO;̟&},@Ѓtҗ`CcvaQN;#.})TȨ}pj#h_ ]{}(F*_9]fjӏo\ymĮ$]8JNG1Ԕ<g1J]>ef.0&-Rթq"!Y"\);]03)Ҵ^ozM<9bw 7lwfUԡm*9ͩB JaU&7}so]HUc~6fwmӈ̣!3W!:yYwPXοk94:9 p^Sr3z{m [l/̗Tl*ݘ"=-S 'n4R40q=xWsIvHxB=,aMꥦ@@JW]vAL:>J+3 ;9K ʒI;4 f~BS;iZ B k13%j4:`yJ0 "L ;HGk q|"syk�_#6)b>o<{/k(f[7taK[}'Y[V}O8EL` +op |eQh=3 %~pLķ{&>y|\ %nQ`X|��@�IDATuD/9؛d~=4E^WW`@ KwY>*\/k=#h 0-$0Q\]L2N q}Kں ؉4Y,yFvA6STv*7P'3fdژ0܄&)t feO5 X5toYaLxd=ASK+ؿ.zD٘>y!D(\CSSqo\Vs~qEwY4Jwٚqf zxS ZYxчb'NAɳh3=tg;WߣS•[;sl-ktYՃy`snMX^t=۽UbZΌ=ڥרS= 4ݼ窜2I8;v /]Zsr"OFa,^Wg E7(득oϋ2s6wЭ3I<-il(LI29>WA[[vS<[<e(c$;>m9ߒq/yBNpF1'ѿ9E^h2xzxsޢ)3]t//.V1<AJ>WD\[( y1{(=b%L KO`FOq|&4}0/V.XtaAkۀT̬/OQcĒ'f$Zup%ΐ#WW38~Vd7FTics߶>P򔱨,Iedmy\x%+,1jcY gY}|w{Kwޥ7N}~k- kOQ4zD7̃puE[*%G'.#ycR.#*&C~gϙG7`Jt|1:5ň>xͭ78tCoZnjCq n+RYmiN/(^j!4Lq0 DtQq2?*ٿ4U^E$y}}z;rϫɌ�%6ӱ$Oѵt]']7O`RGrx(#ܟ/3L>\NyC^w>h՗dž`瘮tn,Pwa)NP/Ww0@@tѕ[u vVsI;.~6Ŵ6hWǵ/i_&/n!.KbA�#@uR0m ͞` '}7 8p\)zle0! XwUc=4F6鷙9Ϫ7MLbNu-UX={2%ȍ{ӻ|Oaata=y{A揱W|ybt׼QAl61{aŸas5nw~ <6kLsnޖef@Gg .E? xh/;<fw*'񒧧Vs/9#BK'0V#nB9tSژ qG&bEEvC |[HD>\OWBg³MW32ߌų.2`&NCNt/T#X\󶩳\i`z p&'GsM&u~٨kPaZ4]0۽CK)R,q?Ot^C[kn{M1 ԱW7a(]V.9ޙ8a!+{=Tf-G?Xi?e쯧1yO0/a/8﯋N&,.MպBL<ME=M6]rOD[3M+vdtiRm̸I)5߉Nfƙx0;LޞC޾vrj'Aܘ `g *81MUw{ SłaG\X]=цngkʘ?P 2*AM�WBu|]5o9{3Ƿg󯂞Z\b|S(J4׍iU_`Cv@//ZG ՞qGc[iWUu=~ >*mWkJ.]0 piRq/2뿭O/Q&GvT??"D[q]YqdT1;]+4 [E٭mJ 30kkFV6h1e*P$y}%7�ݏp{0V Ɍ?疤~]9mS?O2G�(W&Ӆ7̿$qv{N oM ӔqhPPtCl_!DU&] cR.+\`vY jsa ֱ CxKwwonP[QJQ$ynA'fZR:?qb/q::0eZll#}�~T=+=uyHVF*v3kDվ_oyz)9},ɜ?Ԋ?tC� q]V[T.ɤb%fbojl v)9 K{L,>Tۯ 9$}Sbb~}+.ov0&[8RpHA<.~L ^?k:lI&=u~4*#ѵWDqXbQ  .:G9V[y-_lcslqE~wNܮϣe00Y8VoqAҴMF^T.Y!9 ?k0_ o'6?cDd :ijU3mYL b! zrMH3+"(WYPfV{Ԡc~x2qWC~ !e BO0FaFVQT;".ߓ<ݷ'[+j%'DyȔquo^7.oP0 prc r|rHD?JؔZ ~H!s<J*,8&dY(~Nlz3ǑgjtmZ;5]S9;-R@1$`Z['!'k叩bZշNK{Zѕ-zrTv�nz$\1_T(9+V7!+l6 VGfDī�6$vccF8a{_5Lz*C$3efMўeY ;B)A4i ,)7~רE{$3/FWh4L2YsyZK?##s}k\1w.YntTx7_|;Ӥm:mHujVC0D]j ڼתC|h"Y.4juu )#s?ehң5M0S3mI<{*B8`eu?e쳧1yO%ڂ9% y ^ 3ek̴6˵gKsy1dt{~9K8;A:ΆP_vNa )$u2 >GYueBͥaAʉ FT\۳LN#P.ӀfLw.Ѫu @w$>v004EEx!Dk΅)CL<ˌS@L@}+B% k)dVNĹD~Ϙγ1  -/2mb ׂԭoݰr>ys"AuL#"->f ꪣ>Ƿ窯r'8<#'ΘӔn٫1Mikхy9-BsG6S] cF�jݎ9Ün}mgANo^+8 3r$UgOgHy4ЋGg �iJ4Dvg?aӨskXJ30Z-;'|4al\O̱Gc뮂\*FEB M_MW. k!B yT=<\qfk??"^}щoêG:s>@s4Zw4s)|}ʌ. g/_FZ*.fJ3I8&]V.ܿסVĜzA[9x.5@[ f0_9�JbƌB]�SX3N;%У9kjWM_o! 5s^ cR.025uy?(.:5 - S6(EP6�VZJq :/> Y U]uA66H ~Lug6d9>.hM4yF0eGO8Ã%$1wXX'�5O?V%x(54}/\y !oj1 T7 ı&TMwJXQUܼ2"1dy@j?Χ-C[4 mH?yvt˂-G촲R:=7TXK01jdq5KF(;;l^`~n'āI+RպIiJesL]1Q#x0ib.QYB 2ŬRFT`>ոt-o!]-q`NhȾ ,P lИIVIz_8xdFTUFB=֔ziL=Y9H lWwߞ1x><}ЪdRLz y[F~2D,Kprٽߠ6bNԻYB `50K ycR!R*3<Ix)%c̱pZw13Ic-DUW+IsZf=_0a̬(aKn}Q9\%]6Mf2IGaG-kn$abljm֊TbA Lc & |We.!ځ# Ч_E]//cZRwa@J9:0fR"4udFHUYL+3`v̴c=34;G[6\"ѥky,d7o"<S.5M{Efr6k۽G_&þlXuOjeLvޓ蒙A FC&_r qh3`܌eߋ\V]r,3w 7!]0oC@� |UKY*6s-R?3r3blukFt}Ǻc.::2Θ> !WW&7M=^.攺v6VB43+m1mWĘY ͹ \yv< _V'aQK?4+wY`�S _c^Oμgl#2х (kNZ[~Ɖ@fT/i]-f'ڝ;FgOn6V2xAf 63;(@D\^&|P ! 3j ]̬I_<r`5fJ "w:gSđ<'عe; j<V'r~[Kڨp1g){km>+ LUaDsм`jv|uGmaZ*{0 sٜX߅2";|FP0l`f2sYrwZkCkjP*L5*kBP(.ω@0c-nhhuŒoQm1䍉n6Nj1?T2х(Foœ CO& \BfQ=ZTv)sl5?iI2M*NZE%r?[%.C9T\_k\UfL ,ճWk<rx0`wF#w (s&)nJ6i9ovi3 'b~B㻟tHw œXЄg*}V^=C_]l "h<\<sI}ʟ,O L0d(x".{AE9 w}UzHu{+eohPŜ&Q )%*rsg0ʽU7F<u)ƗH;$/QLB!cQ _ђ2-̧I'N1"Wmɒf %sFF4`t`&QVćU]@l4'-r%q0ᣤg\vc+t0a3~NI%H l/CM*mZyrV]'$mD2Eę]]'+Iqyȿ3WbrYat׼becv` \ &~w[o n3<j߲&f 6k7V.kQ?zU|`W /R I$ke$ChFh{!gskD хw.4 $Y.ջbm~B,ۿ('sz:L9s g5`>G,N0[ۥwvF ͹<]кlVe;:IEftCD}fB8ؐ%3?kE.D{ujeGLڙZV^9QTd U Yi#ɗCN94{?%+{'~ksF5f?e#{sqۖ5Wj\S0N6Or]=~Gȑ'd/2SΎk֍cG8�DX7A,Jt2C(P h:&W.o$w BWO],5%Κmo023+m1 s-_ mQh!}r>v+hkc Ri; #@#{҂R+μ窽Ȍ~ěl>3Gftf[0MrWѹд\Gqʊ(cD%⺢Ourgd% YX"o_lL: řy!&|. T`xX(9Ľ(#"U<].ौ"1r2 LO?6PR%lSfF֙KC̗"]2MKྈww淅P1:u=\* Iwa)W]L]VdٓRE)w7e<mQ21\N2� y/BUmѩY'(W<`A(tZaNU.3f]}+;t $ݦI7;epEvӫͼlK(f # ̔Rjm5FGUg΀1fYGwT9 צ?˸@܇jN, 4<[W1NHAsDAD:[rȸZr#GHm 2 LB&WE؈,\3SC??mteHiC;m*f SQfRrY0}Y9g9ѷiBĿ&/I7ɥԈfSB'Ax?i҂ă0Dh UF׾wtKnBn�^FތIW\#=Y9HoA -{XG&hϛFWx+V] ;}!:ȫ}v j*&oPT&>ʹ(D1s;~țI$eЂ,M @W}4O.! a)2Έ}+.qB}8"YpUSGF `h`Mx`6 /ЂC 7[(0Աl\GxZ'|x,%8g5r댫Hì]/;7r>Ƥ6Jo,{ƶhs uiƼgoSVia4^Ŋս`C2 ˛o$Ӳi[c*=|.w.}1}]px߂`ti/<o'%mּxtGL#6B@ΐ]ތI K.0;eg샻g+c{/ RrWS). i|"q{z=J:Ԃ:.'iC [W@h4'L?͚dًbV]Ô D]�?}EW{Xe|e5r*s)(Ǚ{|�NsD|)׆55;PyXtë~}#,A=}rXkfQBr>o`6 f5J(mbBg;Fu V)\tQ/Lگ]7!3myb ?|'#3 De&\xfa }O>kg!J69YW \Y V]`r e+v`ȟyR%/73ahɅˌ.*JdM =@Zu`̠ ğ3RʳӁK ˚YMWuh;hנ< x/n4OV 7F-si6zX L2p}W1A%LedK&G[$L|9U[ Zb6<~ܟ-ƿ|YX} ǿYȊS?r"U) ^Lk&] ͐9A:L bL9QNr;33 ,/J|uy [lS9+;qez~Wu )b]n6B&cbb792xE�eSJa=H1&a9ݵGxJ;#1@bTow Ph ыw"—?v<f|ysk撑r;X ݘVGnS]N@EUGCa ğ,4+o 8Y a#] r"oEVބ LA}єt]ڂZUC4g? Z: FatA[&χx-V3w~#L'~RoGȞ]2~tl;OF-#&ռg엘_/'0s,n?媼xkڦU7xiBE�[rWo0pa$OfRwn`>Yؓ1Kb$3>肟cpq:FLM[Ճ3!x:Q-YeuLretٙcgճF0ݪsfnZDy3.)ybs@.04>+2}( _A{0 vޓ\yO0붤[1nPnZŠ]]ݥ$KW+>R!^#%3y\(\.4 V%(&)HDk+b(g|"Fڨ.AG9]嶍l3Mx VD!7Hʿrᘋ1EnRkw4)Ȍ.}V.BZ-!-#9 !G0\_,(F*+W*L h̼tx.PDU>)HqvKDi\\{.ʳ$?lcœ"f3UXw 2:]|6]Dn?ăq`uc aa9tq݅pctA6X m*8n/f^8u%&ꑯoЬ3BV=e=JsWr;� +1:O#s~ӿMu^2FG?{'||Әn"^\f<`h1,z|1u.C̄1p > ^<֓54'b"v+ QUD^y%G=9^aX,3p :c c^wϲ9Wܕwc-jY}O' ]UV]<Jb\ז>t,<s?\œ�)!"ҢFBVLyֱWv21?ǘ"=q>=DjÆ]]gLy#olʳFWx+kݶa~;8̾ fp wdN0܆苑x&q4dєQ/{r[r\0Lkl m7S㗦iTP\cY3F^Gi >pB bl ?Y]0YLƌUEhc -1]Q^H7}` d9)9O'Fׄ_hW51cAюFr5x !ZRj5J+'[\1,k` X&ފ5[{S`ۓШ!Leb Ο &y{.cLޓ`t R&&_x5ItJ3*SZ:h�|-kfLX=b-agڸV{;&c0zJ;#fyZ75k%N ]|Yμ^=+A+csӸW\iyrbr>e䫫=81uxԒ5;X]{fy#"nǨnDjk5{B V<1̘?V]s>[X5&*LgrܴO=Ov!R0x6CezFf+BQ'fh]F#($Y{zJ[*<Vlsg'X9뵂ڨ$m4~0!.uct ڧ(P0:Ɣ 2e(B@B`M LSiuBa J %dF5(g>!sK;C0#oBt0,?:ﯕ?V]5:p貊;'L~UʙCEưN=F`@ȡ@B1ҔN}s~mZl=c[V\[},Y;0V_.MQ 9 %8uHSkwpꙝ\^i3a|2.ȍe0][Ru)M*wb4EZͻL9biJcXc+OܢX p!d?(I. ľ,Q:mB]}0IfUt٨+#~-7bCbP^"z<Dx9)c9/Տyw Ӏt{EJ8^7q2#N:u2lv*JoI;zj1 wc2SE̘Yv)\dFYc`LWt_0 2 1&Oɬ]ow ia~ m "-c|{R+Wrnu=L`0c&潰Eھn\W_/:ݿtKw\qL[F۝1&s}'ѪMf1 Z|y CT6#etyΕ\A2; hn\: qЁŃJI|-9|K{v2jlKHKw{Qcm D{+.*PԵXЖQ#[wх<0q(BƬ+jLwvgd#ni?z;sV%9U>MW=bbQj5fƛ=m]}Ʋf)c$~3ffe3frǞ2}\]~B9*aEZ.vBB=TOgcټpA:ahS+M=kNK;M"Y.l SH3y;>jeL⷇X]CI9�l)!IW{X`岲RyOrݼ'DU75c?A3nY1'F�iX͔#8h4캉Y ! WDvv̟aujt2F{1 ;q˙g9&fg4vhBMwV'VpC16(kZ01L 3qYk0-*qܑ?r?flYg.4HDF||V' *�]n2tl<DٜU~gCXeLK+B<[ {~ˌKiO^ju.<_]-r?]Swm7pgVOjj~[:i~nirsd׳f<sEǤuE7m⦋k17ys珊ʜsLo<mr!pȥ˵cbȑ ,?1Go? IE+~-mۺ4;LA]i nŇ 7>lZu]W/C*_Kg_rV.ݛ7oކ+ׅ:#zj};pO=y~Hyl$קO^im pc~W 9sC.=6W><?-0i>Bߚ(cD{v~G|wev=vqh]]9c[rv^ vm.:n\y]ϡ@߸afWiӥ7=�G1?_9^[O-gL#_>k> ^ָ˙O,] rӏYZo.c}ĚZ>Zo{8G}<}c` ${mcr7=[}3(YQEWۉX>/׉){'T߸m}:83fU#\TK5Npo E?ϙV"/czgw?_gw)Q 6&aYP؟C1hoW{Wi{W1_ypY~ʘ/<=g̫C{qCh ލV-r+z9]V?zucyNaF3ęHfCN^cvvDE.hkڹMuu=DKKG]1� w*G_<vbw>Uא5Kj3"y/,=o=c 91q%DCV'"n=-ի7wgDX<Б?;.~HvxSumo)B l4wZüOrjN1ɭ˦}CA?"]ة9rL[u[6봠߁Vg7X9붂ׯq2f Pf5OK߹T+G^<07)Pg;amE֙K GQnL@P@/1f!ϛ%"syLheV5ww>b9ݘ8G߼ />UP.Wȼﶚ3~?TUr焞1*UȔyi7+,՘T`)pe՝vt[=Q/dta#/L^f@MWOyT LX4/BNƖb.A�.PB0yû!``1sܪjо΅B?pm1-7gaaxU}J0/*>1N2xȵKC':tE~Kv֕q!o<|+$_|L2R-Wc 88O YyfnIKoa6"I, *g,fA><; Bd;C."(ڢY ߆0q/B#?BL.eZ[V$=k|[` 'o|{Vfqfo僃h}Ƿ(]//(cw^} o ߼U'n;q!ڳāDF<c61ȸ PM5O^>aޞ?0j9r(B ,"TEyXQ/1߿EH? ##A·ddthyڷgE\C !I|Gx ] ċf [Cz BZƻ1Dyxp͌.k> Dj͐3vS2.u^o4.ua[md=<)od= F e sĕ-koh{\yz Aat^:c8S2$@@dOB|o gc0 .ֻftmoDQN4rBg0~P>\$eA@;<|o=vL܀߰X {[Vu9x?B|f{Z"f~7z F^h�wwWZÛ5~@^A8N 2C #A|-wrx92Ӈ4DovhbƘeictaޗOGw=~ʌ;oyExHGs'_0n:\1?{Ix3sքy7iľBZ8X ] u}?6TD I0llg|{a i@ z|?o8hA9ZRߔ?WҞ囻'S }@<.7(߇BԻcLW[ny6h1e*P<ꮰnen6{.+B&)Oٽ봠}nCxS(mzrӟN&pZԩ�gߛN-Ǘt c@D ųjͦ"ϩiz0$[/a6QVF;TdJ#0ԨŊ+#6TVno kEf,KU w& 3 ‡q ql񙹦'xPl*Ydc0K7YvhUTԒL|D쀢uOO ;Oʳ0VDRZϵOOdPơDIbKOu 3iYׇ0 -dfeGϟf#EF"Wc {۴rQt۬bmηۆXV97}nu6ݲЈ +Vuj]·w+KE]$&FBv~0K."7;7=QH>9o%g3bkP<sfKt(o\vkeJt-aH)w.Z|#u v`ۣDl"iv M:O* #f%JN|up\)7w I0_OZ%"B!cG%B BJgw(_N8±GB~F$&z}&zdZ 1_)vܡj`jwt/Ғٗy:�{LBԴ힕ʐGIԱߔ;q&]kmb./~{- |F <s^CJ7pscwQT͓Wh\f{i]2T_H2#ٚkmb^ռ |5)"aֽ:m-90<aOy3&I.c{>Dܲ˯H?zCKlU'6 Oß_ФQ)c߱$g)"jt!v3qkh<lBOnsS˿(gôgim]F[0 t!\G Nx9w1a^I"=O3i��@�IDATfC9oDŽ2_'&[Ś$,{Xa7m8o,9mY t-{Sd3kЮ1ݴţ@z|f&5]r;FFK R)A0. t!4Byo!Z8[$L2Hseb@o8?OBl> 3[j>~VE9vjsE/V'"zFܺ\ 2)"3]< t灷s)WƦ8]x.˻x�ggo@>'-aJJO.D&HGs^\ {9ޝަ m|<kjU:z ȥHyնpC:=c%lg(C18D?b>йΛęS_Q9]4&yx7J?.ܧ-_lyt_G_sO3HeW2ߗwY8_YI^ `5O\d')آ}i%C1o_ʼnLʹveQTiJX|2&N>&Z&eG7֞ olah>F3c<]ܾ9dl-|lf_G13Xf5O0ZӜh2q&R~ER^AHx6qLcʵÇ%'SyL|"iQ\oK4N+Os>h.A-bwͲrc>9(FP"GT15FDF8<# Ч__㎙]V"|i#G?壬9(W kdt-‘\=Pk1"x3'Ѧ+GЖl3f%ٙWzܯGX-ׅͧ1wϳ|w ?|>kdh! QFB"-2Xo봞a}۰':2tM3' >-ϬnhHoMJ0F;g iFH؁g뜹&b (fa ^e9[r?cjغH(cƤ}YaPc4e9ΘmAd;6ޢ/:1t p_K828T`?`Vey2-Η B1A`R!cg p`}ĸD>0Fu훃s̑7̡Yˮ9 6E0L:7 򢮈 ߄2_}7SQ\{m߉0`b O3W*u⻗˛ݛ1F1-q[= ì?o<)od= Fc ѺtY1^QVG,MfL]l>^gĞ6A׵p5'.M4tELU<U2΢ jtix`[XCL%„H gc־x?x] ü {PƉf(,c\?ZnڣLfg3W]=痤z.;o=vL-n8M^X2dqf2{{> _ƞխ8ߍ8<-;'OGk&~LToVABQ[(u <2 b'"'8}25]*נ B>н (�Z`fxE7cA|p6 jBjƼZ@zÄŏJx `$"OU*$ V]{y ]#3:CBez+LD.c6`̀d_EY?�袗Az HAA; VD" KキPB'Beew]dޛyw2#_:EFuuI/`ט{=7ҧ (M'u6>i||.5i]PPeTNse!\ڼ^mc]VG] _7~rD._;fO~% 9]v]Sg̰1x\㳁ը+*o$+҃]@J ;MO^PRPY(Kr/Nq5]WS*]Ո{rDav,(K1]K .FiܣtG %M1TpF*X$cFbʕ8WӃL<Qԉ+j5C/Y f3.L/hJCoVCУN^K Qb(ls*=|Qk�3wyg:~u U}WzmD6#Xsz009q2;| VyQ^]|H^WԚV@vt#m õuaaHh|l4eȑW+mF߈P)z)hW)5byL2f ڔܱM>k/\z :14bte\bO0:NL"ronJr"Y7SJy2j -ךTi}1=c)AUQ]n?"\P`.imlك9lwX^A*Iq 9pA(EG("57,UŨ#tFRIܒ,.ûy,W4  JK `YiHO3v*mm)k~A؏6}j$LF߯䕻w'e~SJW\Rt?_MM0,`Y[X1a> -Ҭ*V*Krup].pH�8>4Ӂ`\rzfUW_IͬG  IGǷ.WekmKA 5.ӕsz\ێEǑB-S?4,!٩-xe 7Ƿ-IݝBEjy:/=u/Ah|1TŻH1w&:;9vEQ&%̎ɫA@A@8}R6wIǔ$>y[ A nMbKw5g&,s?o[Nz)QeV M#3q -NA@'i3ڜ_\v]I+ kX_܎+:׫tG) ,3T�LWigoVX< E DKqspq(LkR6boEʻMHA@A ZŨgYZKY!I0Bt7ũ,#)Y=wACE)m҆A@A )l1L+\J췋A@q8zZ=V*U7Jxo9.2X1-qՋ\Qϩd.I 'iŐwYekP{?<Btc!>A@A@A@A@A@A@!n%]A@A@A@A@A@A@G@x,'      p! DMt      A@A@A@A@A@A@n"躉.tUA@A@A@A@A@A !H־k׮8.LRN)k~ݥ)RO      !gjk}<ZK](KW%[77Qկ3ѱT!?̂-M-1{/zird*X/p!mI*L2ѺS1O#{\Tݑ.q7K tu*v­ͨL7pG.Ѯm16]JY7Om_Gk9灻k STvt5ڲ4C'])RP=9d,~+;A] W0,4țƊih:|xU'eɚc?H3Wihھ *m͜^r 7ٓMQ_t.;O# =H6ix*ߢ+y#d%}V͢齛S̤q;O'yr{7ogK.7綼L387i8? @ާBɭR kB;hz~kiը&/iwۭ@mr8PFkn0 [  @+xX>i-ٸ:ΟF]_/C_v{<.GUre>u=Ig tGbEh4:_Yxkk>Jus }#ܩQ+kr1\,蚿)8iw9fJ&%g-3ɣ_}wӋpDEKd7$<2:5i]Oϧn>h~e-eΒ6gLڥygKg?Vqta3įt_ Ev~`ux+}іIcfգz%GD e8J/JP_O+}*$ oeCگeRԮ(*X=YݥC1Sﵿjl3+SO= )TevoPkS3Q\<9bJkYwuc`$$:v0 nnxqZ28Aqv@=sϠ5?oMi29KNSE'%! }ʏoFמZ9z*X-;ZM~l~;<~軍N,bym)  ]~\zi yDwlB$ =>jKLO `;h\[*I\Ә*Unˑ ꖛ;5uTVD;5O0L,M[4+Oz H'^"� ɮ%_K/cv}eӾ]a{bh޴#:ATkQ!nNM\h~UQ'3A@,_x>@7 Z4瘎+lĥ?4&PRg>Ĉ.:IƁNtE>Gu[G g9i,oDW8O{n_0D^,IgH+}BtyC4ML(!L4Q_+M'DA@A@Bt%c_%|lBtL.@4n khԯ{$/nҘum([mg)m|]栮Ҭɇ5dmރS PNjhJHjiirIZ֮S10N:sWM0ְE9.@ʠ04 67C~i:zh2lDWRa.64OJea?z"<mXM?2M@|yiSOF]k|b ]Bt%qUXkWAi|Z]Bt%A@A@1Fܣ9 ;ԙ"pj?_gtMqTpF*^y2]ص~t(Ƞ5\"6_\V#GZuiZz}oNf]qqZԴ -t~e1(c/эN3XV9ӹ)zZ8KR2wSC{z<z=*tOD\9]ۼ/P>^ѭK)S΂TC.:LJk,>]6ctu*X:,DH n0 \ ^ʓ/=mW ̋sEIUQyd٬ֹ�0aUNjgQ̝|XuiJ>֤ڨx+hUR\,"g>xFUND.2+ϱ×Z):j0LwӠL-T|J:(sV uY$$JACgysVD)b,J:3Λ[ڳ#FTHkAȘPgx0si7uayQg)60zrG]$hndϙN/r5ܿVayvg߭V:uϧMjg \[YpjL 㞹T-UsI? TTy3-2# tУsؤtf7|8M{peXto<.g̰uKQV<M 5u1ܹdD<`v5?.2E TD :b3]q\(sj]-AǷ-#jM} TOnDs>},Bsv`ևmt}wwr7͜1g>~scv#{КZk+PRl9{~NQw+h#鹶Ku?<]xlWJҊ90ui.p]gLrYw u5 ͟~֫|+n_I۷%AJeG) hE<~-8A;UL}`Z22eIMjΚrD4U("tXr@͝rK] zXG/Q䁋.Θ9u% DY^5ϭP.ܩpZ<)O T]#i7[ޓ@0_PQ + k%*(5X_`L̺<a]u"AYɘ)5w0}3ųS[6OA@A@!0ñ3n8w^`G9S6tK*]ZMOvFWk;W>L;魏\c\`VѸ?*&,xoWhj:{Sw):흦f>?QyiퟟњC�+Bi>e tG " uzkh\/3d @)z|vu2A丹/N``7]9:_(ۼp)DC' ͞riDkhWP^F igۨ_V(wRw6Os%nhB)ĭcKdkVuf>ꢅeԔ8o ײjJMhrscJ:B*t3Kw5例K4dϏ{a f}F$V93kqLϟb||<>Lpk3NgZԮcQH>l>&g,9l4/8Pc.$qG,KTPs;-Zdgs+9kb54m'܌*M:"Ρit3SֺvFz-95{KyPy.gtSA&vK^ww%VIt#-O 鑟Vx\]2'u 45dL"ֻG4Mt8Dy*/]+4j|m,Ms]qPnXM/=\kպ$jQ[U;ǚX믪_%A6{P5̀ jȸԢssB<,ru Sz$Ms5寃 W6<;v.)&Jܭ}dweNCסm YYLr#1N/E4Io()ON7SŨ թLr:CvU   ܦ o ]Ѐ ݛ38)3}! mR^#{TTjgW; 6'5vv}=q*4y1V}fIKoDikB[1:cC7]l<M?*XDWZCzw:Ani 3J^UxWBYsRFԞ J?]eL'||&Ų+N괢,JP̑ݴwߔ"e*w.kZMKZaow&[,\'A%03fە6#jwb%nWkiҸn1Ci\"-29 e|FS/rX,oH.]Pդuu~I6Q;O&P|t}ܫwʺT!];KqT"x]jƖƤj~>zcBO`Y% @4I& +ؠE8K!ݣ4qɮmހ&mWi?1KLp2"hd1QTLBX=|0)Y�4fF]_/IS\ybDWFaS4rp9]wC,և#v|S^|NgA?e*Si'L1WLh&k1W/4O9gɼ$PΏAՍSRӴsZ7.k=C#TQ 0sc~R>hCYu,j{,iݨZ|X_O+jХ3'ѵr{a̗:m M;S~Ah3o3I=9^~E@5]bwQOqP7O++ 54'sǺ߬S{{3 \aըhgN]xtS)lS'.bۭ'D0'.|g.-J{BoJ1;tbq*բ4=: >D֊j?,̵Fа=̍@:PRsԺ<O|?,A=h^Z".LtAKT,.BݼMJt,4~v,v,6̟<1ok:oQk/ֈ=ܳ?ݦ/X}csIiS WڦfZjN)%@T™ڜk; ? 4LkL/DޢOYթR窔hZGA@AG!. ݑ:JgP8._hPib#.>|q'e.IVtOwD_E/:y٥ L:cT&\;pzc?7Lx1ǵ+ʤ#Na.]Z3Nݩrᬕwӄt܆q)o6t)kf~3'h?>oXeJ?rvtb+U?i6N|ΆJz'?19}7Y>wi߀2et#lUNXiܲMϪ%'<f7?ܛT/59ʋM<X߭V^3٫tYeХ]oA=%lLU:}{?T-o>ڢ/3K|;x-rF6ʴ|>̓O\Pd}Ţ?w2dա<:-jͱMϠk�0Sfcsf:'oV>eϡ̆YisyawY(3y:1_*Qt]\w)ʲ{:ko$L|/8`a9o } 8"f}ֵui,HX֏k{<-c=<9ٟwɳl:i ~%X㑎?ZyV^(n74Nm;Ӻ!kNpȺ=ͧz\O_mw`Λ4|lVcCT I$^8ߧEsi`0DzY>H Ou`:bw<.u(.Y;p=R\<M ka\ڌcOv =9kKof:}}W&T"|xD2÷xǸkauTd ?II :Xocp\ۑu:6=  -�#L HB>VA%8(.|݋hrItA(x:wrp84˨Xl_DǿTEЅ25V׹:CE,ˏZcKt]c]HW煹 D.=2zO;'nwWq&AeYeOp] R aosۿǟI-H)y-K j=eMOSEMfNbaI ge0VvSe@ µs1WaCv ax-/#-| s&eqosGœ`n],4:h.4oDW‚JXӭ\F ~wZ e^\׋ ߿0 pߢ=9_q0┦n}7KƵui(Qq Tp3uk')ӇvTLb:U|r:kÕ+>F~q/DW8'W Pg9/KMR^P{|uDijFݧv X1ěL; w후Is<r?ssy `o c. 7el&&B럹1΍'@a|7!1dC`"vxf8Յݦ;opV~  6`P3]1/.D)>yީ&>BI3u4AD2wC ex8%˧qQt&hsk, ֌DBuaDײDg OB SxkwY0kGq׮GKwBu8SP-.c/Z3H] oYp 5&:>{gȿ@do$&tv% Q!hwG3]:1ǂC(2Ф~x#m,qgwLaCr&H&]!5 c<nԇxn9֚4H<^o`\[` \&6UK Z\p!SY'#6al զ�#>~?~_.y}io�V̍Ʌ Xy~usvLn` y;}!eD{ O?n. wC~?DwZN\] emwL&)wV./^vsOh׾A|35 ijm>Sv95Ў1:1}`ktA8Bc͎1FXWR-NkGA@A@n-躁f}d(5Pb.p5<B4 1֖ k˔vw!�wް@A2yr]\YkmK9hx-- 8$f;ݹp]Z}C,Ak�Ng_fa{^m݊Sּ"mIs:ԚnZIDZf ĐNfܖ[; o:8hd<q2W&,~2Qf]猹?_#Oc ރI$h~ܻ,hVU˂1zdHhs*t_;9_\0kaEe24 .K5 b1k}Qk9xZu&jx#``c;O::=D`wΜ\\| Bty:|BB-ER@P9|V,8C/^ÚUмFIB:R敹wX&7D)vd~Cp;_8?w91$Nawl\2o&Ş3 wߙ`VPkFs<6\p^i{҃5&ny=uea0_Ȧa_   ˎH°|M$օp]LBtaL8?Va#[Dru;ވ.z!_zZga\<6 CiS 0߂^s̢~Mk+ODcolx6Q .:xhyKaqwA#4ÚUв=͎M0Kx.B= d-<0Y rq ]_Sbuؤ8̯WϩsD<$kcw& 3&hqm9a,kk;?20ہL}s�埿ul"g-뜏5%Xn>I55aZʚz\7ϱKon q׏Ȇƺv#G%fk%NmW Bty3ABhϞ)xpS3б\(pOFt=W| 1e/qGt͹Q6p8ĦJt~Nsx'Bp &z"ejMBs-=&CSNs:th[ @p-xw#z{?A@A@A� !ʻafIJC. FwJtA?ў\\ؼ 4ݩuȜO;$CY¹LGtS]\~ϟt@o-h.01Ժp#ĂƝCΝ@:6y!6x>bAh5#-l'<fg `@~h,C9ha\g!fȘu8 }Dmwfrq:K;FLJ̱G;~Վ;+{yW:oƋ&i] eXqEew$f 8p_}>}5d/'F`“\[FC^'ƺ98haեo1k#MZVX61߉xnjtm2:5 <?_ڪ(  }yvskqf  wL7 ڨ\Γ7ܙJh 54Ĉ4LkXC$y޵MKbrgڒ|95Ͱ5D1:;~|;H v%oc;A@A@=\w0d!<;,slG,&lO*e~L”A`쭿LciЂX2I < EtiABW/ƵawV!vj6OYI*;37OL Z|Ϛ(f~8;8f3gh!?8;w:X[Is4pJ0ɆA3+ûYPu1¼x5,|89~?afȘua|x2B[;m,q}2~ B.SHwGt{A2Q'sl`W?4[HZ[a'qeخywyV|OʵB_zgd4|stn$F6ݼZ`"tg<it!?veߢf~˧/n b,+ϓ9>Zy3;A)LP{|9 !WCMtAC3:!T $W۹ eBE q~xҎM8t5My0^N ՘BAt1˅ٵ3<VA@A@<! D'dBopO" ۦo7?$!DgS7m~el7YXM5O~Nb]gA]4GGsVa$~Ƕ.uI W D  |V) 6|أF(>MwO%<GZX_vddLpvG>Ȝ-/<4dkq#E,?DW cC8TbS|cuPfas]7p` M+ǘ]{lhD[1a:G ?3 ʛ$gu a ACA.U'"c.p )ז/koa=1I$N-\bdTVYz3Ժz1鵺V[ވ..K]+ acL>¦(7ׅp?Od(ᰞNAqrh|KTbDLL7PsQ.];wORPit}3/f0]4\=i@,Rm0#`C<}7bwNӔ "J65;5&76)q?q5$ǵNuc<iyWA@A@H‚KqԢ\R)Z4iqJ:om_ݩvb2[i'.Ap|<]hܼE#~KFhkKKEu6'u^}1:=M4ԮS104ܓtx&TVڦݳuӋ%໭pxE㞫*PbiSe1G~z|NJ>3Z3* jHG(jrS:q!fCʔu{8ѨEbQ+:U5Izl&{~kIrq/{_*}ݪg~iQ:|Gr)OA:c ^8jAN{:K?N79SS*W1KMϦNwq߿qTJԳԺC+e/zqUDfʘ95}0/}m+~L%V8sT<t(<@|Vcz~lيz eϙ u+{5峚n_&g_kPǮ%GV;8B;ʐ1)j[{=.ź?ƏܯYԀjM.QLuM[;<ztYzHWA>/</Dᄐ֪e]cz*]׵ptQᩈ.je%(-'G[4X~ء}ur)StYymoF%惿A7Ggֳ{L�uJu_(#)L:~Ժ԰E+O ^Yy8ڻ$ϜtlU6au҆ ֳ@(ouC^?+h)uQx 6BhTLZ)I~-v4A3k @Y>~OX{dLWΠ= Ӕ>M1_Ҏ9HqLvڽNwzI-Gsv~Q"92gM;57+lz֏GfFeR^XWL}ZQT+V<<Ϟ?q|`��FIDATr%=\[-91zRgRst4\kt+M}TgyF{[N>L9ri"kУ׿k;6_DgQ븓/w9yPLteںᴞ31-<A_VW{OhXy~?[Vci؏3/q<g,Y=v9y(CTz (*~Q>r|'<p_vUk+>֫0Z#FA9ji X�yg g0Xm49pjdMi[5 y Xc2>~<0\AY %|W",  ( mћvꏸRN�is >RfiL)Rp/>>Q҅Yz @4M4xa|U^~fauN/t;~.0?Kr:?,EevaK(wdšhʜucJΥ3vh" B2zup'].?]:sRh}rSRϞ$ n؁TwΡvo2j۟WSR!&j=U|ĶiC4>Ho ٝ;{zj9M$ .{{{EW;w.*A#1D}6u~"t횃fIC~Eh[cY a'ڑnDgo`Gl]>f>5kSNu;lnmW _+OFЂ~ko5g]IQCQW9iZLJ(Θn-8B܌Ս9t/jnXqNqy;wW'Ə:@Ci zѯ?5N3~;:ߺCĉY;/ոJbF[~ BI'}q mֽ B/+ChAڄX ux]ϭH(č`HIm4Fp!@p4K|_eC/ |85ˆ?gc:n.W$[u _SG{to*kK@=s_XI }QbuXEVͤrͺP=sXwAsd%]uuEVI:wDוsѤ2꼏 LًVʅ%4kaM<^juG8'wZHmRk"];9<γV܍ww:Aۢ9 i-+L$xs@S'х@ Wvq>df:wl>7{E_MmOmp0хfϮ_A恄KUܭ 17kSPky#kL7X8 k+i2:&L8(J3L~3&클|b=G:NFoZ楤:lJ4o.D%MA@A@!EL QG(XŞ;KbLF=L~]1.2 vl≯&ҦKNC;3t]S?8TBj{*kaabe$=!1g $|T)`'O;1Ђfr_RNAv<A'@=]0"\PKz'L epmA(vu璊ő/+J j+ܵ8_m0Iu8tAJ=YpF+ߪcXQ9a7}$BW,F;|F\Pktf!'m=RΦG/Szȝ7^|ݰH)JJ޹!!CPW @2  ͆]7 @]IK^jWHe>�}Y;yAzqَӏP;xiAn`ݙf^}Ҡ޳}+ou1 ufݲӵihq  톀] 9"ԁtRs|}㋃ 6,]ɓ9ˉPKP%er*]zY}zm~I ^F 8{mCBJ  *RlL*I;W۵ aJ\slU.CA@A/ .,7;"nv>] ?&eYnꐸ\,͈�{f;H.I[q>{A@A@!n,F�Geɖ^]WHsT|VQ;}0ot,q&A@G`݊(Z>,W0~'hhaʙƟS   E@-        !T#      ^ /Қ      @H5GjA@A@A@A@A@A@! DWؠA@A@A@A@A@A@]DSA@A@A@A@A@A@Bt jiHA@A@A@A@A@A L4.A@A@A@A@A@A@! DWؠA@A@A@A@A@A@]DS qwݥ)RP4)]$ #p]=Oqt)գ*<O&&A@ur8\);IV    ].pH P.L vv%>K\Twы.q%[ z'n.2M9j<wySM:^Skv⡳F!<Y$ 5%iYx.ˢ&TLBNNHׁ˛P,iȯoԇ&."GhԲK zG;:u4c>z;.8z<D6U]&D %ZtN(Tb,sV@~ں._R*u'~ʑ+/L%]ԉ3tgRwC=/j+s 'q3PvOc]^Y7u n*>]FxK/i;hK<t_Oi=~U.&KB@ܵk4rO԰y+*\x ]cGӱÇ(Mt7ʝ7 q   l+^wž(oҔJEUG\<pIwη(M^tn *ؾ2y׼m#6<ZБ\d%Tꕑv{csA,>Aغjɾ^*05Q0՚yx5:*$/hDgǏnElR?{*!IJ9ځK̸͙(s^39yNHĤ]^!߿fO^.K~P|}5�=j9..vmq?%S[CцeHH$]9qUz.UONJ_GkND9k t(bٲTԴҋ B9fY<=wiN]驗t;pG=;u=̫o: [ <GY+ :>}'g eJZ;Acn6TCu?-+h }GiiӀ25?<pդxO \NǏGxf~F3RX+Y5jvӃKF    C���t/k��@�IDAT]\U^p {ԭUuU:jU{{oQ!N^so{ğ$'Kx9wA"k7p,o&ocpv.dʕ%Y}oT%GK:3C|?@Mez]E~*1$7ߠlyY{'}5 sd+oE,ǽGslN+䱨w}.ޅ*t:iV;1e.P ȕ)YyKt~Jʋd;%3m ph�-iѺ]8NE/cӴoCe^1X6w΅ w7d͞Q/mh,T;|e5q񜢓zOO͟;)䳆CJ<qwQ0z"z FB#yې=GN"|>h$>;)]kڿp)ilPy26N? v`Ҩ.PM`c0ٳ*_՗u5V'Oq9<Z$̇ӎwK2|X"4O<9C<y/dȨO}N*XJ,�?Z\*ӲvD@" H$Db>D}t!c&B$tIsKI!s{ܶ,$E[^]ݙ=ϰPEPT.Z's!6e0o^_<m{Ț-oGߊ忽߯E\ݥ|BF]`$.sg&p!Cg V޾1rѸŧ}Bv_K9adY{EFF$D@" H$$||$2ͭ~Ȕ; *ƛh F? L'gV_r[#[Q+q JmסN TZ(ҩR2CǴ񥼩]{}U *7c홚*DdΕ#Z+$Cx\'2"O喰7MW]nx'L!B%[װ]l x:G _lѤ8ŀ_FZD8drþrd5_qBr " \ G ˉEx.ןkoŌqBѴSqK3e@sK"_!+z=Īx=M+noڛo_'K7}y=Ř%( 1 {QXt`Wq7reF6=sd mm)s\;`X>G2Xe7x֜{ߠ*U1/*-:z^bB"TˇV$ΗBzVl"5ư~v9\u" n ěW h5Ld]ZO\"AkBryPsjXFke/A+QK2Gy6?iw\E׮/^AܙPhTkXPkMrA\R^Χ]񑈹PɃ<8>uQ/X[}#q.G Qj>\as_%ir@|J]D]8yϚ«X~E o߼OSBe LlL݆ӄ(X+D!xyk8| xTxrBXOjtg^!(bcT %JM/>O<vz3R0llKFȒUPWB D='o^Ehp�}9cud̤k<&96Er`[^wBt{_JXO\Ϻ i"Kɉs$_!lz$a)-ZŸ"J_;roU.obFx7s1gf%ʈ㻗qb>vV4-rIzob~>]q_"91!ZnޞK+|k͕)'Q®4 )gL39?l5U<{dGAÕ+<ʙ+z<$D@" H$$缤yr^WmاᨲlԀpTU)*G?]F'9ѱ"JHl9DmJC2ѧ5]ί߸u6.& g;⵿VvCĽ"h{z,@t[tbPMtM[^wZr?mi:jd+0C�#fll7 `n Pf3Wm,I_wN+PziԭX}d1s0tF|V误9Df:|_S=o H "hlz9DegI5ѸcIIBgvbxNu%Er CA83ZHt]-F?oj^v\H% tmu5ωZ'xΟnph 3^AZ=ǖM'g9سCK0$Ʃ43]Hn9'sw5EI#@X Z'B$xV_DCSź[ ?}s:+ơX*(޿:3[}OdѵojlZ;t &N '[\VM>dZb",XKn_b ƭN73Wn|sOٴ|l~pP/p9 #aoqπF#0`DvϬ"jV#|У.@fY DFIqf]cbQjQN UkFKS9[|$Ԥ[VEi!2_iϿ_6ӭNL46&rtN$}Dΐ6O*tyֺ^(^{~ مDnF wm+}3Ǫb!49;JWp:+d4!qL6vPsuw䮚>e}E<E\c;O^lZ-,P1<< T][,u6Ej5x<,$GVeɜGQeD" H$D@" H_H+}Go(\{dԡ(Qz?@(hf燀rnҘK/s}7ō]>>]wo*%dBDzGS.m 2ʊ0 _ KaIϦF"*^ErDz`AZ/">hs$>JRճڼx*|tel]jkh{DxδX(TU"6:kM"6l.*_>Z7Ӭtȟ@+m[ҦٮؽTXZQx2[ɭEJDCռx idG慑+ox2#Wuȷ2g͈}+<:YǾe" <!K 6Z "=zǽB&%NnU zf<udZ$MrYcDWZTiƷ9Cl;3;)D̜M8b&ʫ.2V8QĈA-A"L8AMB`6h[osIȧ*~B눎�i!ݽ<YA~mWa7'6NhYhҫx(s2Mg\I&xޏP{|fc0Q0m#KrD^FpɅoҹ8׬z̮ )#H0W<iGT|\ӨN:&mĊ~hi|DɢuzF3jkQ4}}P(Bt&J"?]>r|V櫛D^414Sة'3_\^1ӄZgNXAAD:v𤘈߿Ǎ]o^Ўy}DtcN9th7&N  KU6jkօףp:2t}t=cALӬ4;o1'!)]}`_"0.woplβͨTZ NBOv$ 9Fvm+W#3 3ǐ1c&Y0wH;kފq\Fճ'xuqP]TƶZ r8!e;O(,hx!vxWڨϮcɂdsGӋ`nk .7_]SkUiۯ:~44YzgwCcD۰ߡygc q5`Ǯlr+m*m+S.[<hV ۖ8AͮCւ1Yz__J1ё &)QҞikQ%WNWƲʝWdV܍,y"}W3bm5UgI}d sk'+�͗]RʸD@" H$D@"DW: P{]ۜLg&m`_Ė3{BeR㣋7e6!wl&Z3־ Cmߟ6v=0qBeR-cDWkx8oȕ(|(Q:B.)^9Eg)ճu~?ڒPj2#gL kj622GLMzjE)<Y^�4@&k4f&6D<EtYJk15>|c1fѥc2"grsT N 13aQi^~"rsOV Q]LYӮcܬ'9IW^cԋZ8 $c(#ɯ"l4?ŵЈ?&CW]4*HdN) (N�F}<uͺ>̼LCl[剪?T/o袱r@X5(Ž?ݱqC~iYu(7 i)M1kRVOGx'/Ғ@cR8'lkMenzU )HKUܬhK0fPHǨ(Шކ DYݣcLhrZV~#5Ft۳gyNf.8B"iH ־@2=W(cD5Ks_l#:'' $gÒzV= uގ5KcR7Nf"En^<6ZꓥsH:c#9oݡ N"/ xvM.᧯GrY]---kx`Gs."m̺Zroc<k1KcÚ5@Z\dQuxCkPR<5>1K}DvfOjtjG`겺qS."[mECYKNQ]dRU,$ߕ'}4`}E)߾ Q)S[|ڑiycJZJ<y[R*f4]Ft]i_8t$ϞKT-F=dh|^QsG0)n6m[fH$D@" H$,gOنB/mcIf;lTdX.QUָVyZc--AOR"7LDrdȖ u<gI?#ã |54}kJ^<)nJQe;Pa̬ZJAMtW:hfmjzm< ysݠ&vuBYu<7z41%d`jM5X.Ê m`J"4OZ}SN~23m:At9("$+pk<XPONz$Ź$*u~ KX<u\#H7W'al`Ysmz_ڂd04ǴИQ[w᫖O"bEt ıd"�{?~j&Wr?[kI1>2Hf)}E!cZwcDIn5DzLԷl#ڔ@{LF$D3 3O_!5zn ⽫2m_ &<ȧ_Q^GSoG ͱqi/!gJlY;?M-u5Cz*5EDQxcR"r>kۀkS}1}ZwdkUS2MBtۻ̉Ǯh�22Oĩ;a_"2Jh] nY&x51@-ߖNJcz>h -}qu$},!u´6ib;)|,D[p~k70 ֮_xܜp N0v)JBas;)x8#[b@ 9/n*%[:c\ W+WJUPiK:kt.SM[?D@" H$@C@]oN,Qd"[mٲ kE)Xn7ZC_ 1nr|>*oNZJDף_;!I ժ:M,n jK>!_CO6D}̤$ $76y1D-a4B^6)i8Efnh(+GAt6t` E$W'[<c$iPُxF/Y1A|ܢxabLK s3XP"Ͱ5%anOmT5o)&� /6"N1I^ .2H&At1M2Y&4ŜNvD 'G@)j9|qL"s&D Ԥ%;|Q LW9 L:4!)@1AhV%]˧v0 /Ih4ynTi굦[At|lƏ&婵sչ %'$[WKNgɊݧP8{(DQKQujr*D٣x !0mdx2]"4û4EIx'}:jǐ6nM!MyDBe+׀]idb̉øo.biz]e eD6qSjA!3_Ђ|19=}\L`GEVJ4hK9[s1GWYQ({XWLzxXk K$+S'n3G2ڠa\sK}tq GdʘOC"EѶs&k7hk QyH$D@" HJgbiwt+r3/X 弱ajW_ 6*i$%yr%I񘙧 > O.2'H�k*&eRjoslӷ&QD!GDrQ _Zcѥ)DW@.3{]شмme@;g^@ǡJSB盞q6ܫT]M'1TZ;&̏hDaDx ς|-9՚!ĉOZ:_x7w!%KVjԕ< 2'd咋!).'1?2ck 35JrAM5t5>E\~Q:8*3P}]Q`VgŇQJD��ޚTi"K&B_5ג jv"dж=l~Irshk!iuPuҶ{_|>eO!Œ3 k^u<nS.s|TO{ +xJDe%2n c퍞2t(%7iHw<pU<IMt Y3hC}y&f[2LV) ukLx_ { -u7)WeMcZ^4(/#|mo/S]+Ԇ 7D3+SkoռZ\ K\3S!֩W?X(ڮIyD@" H$D! Zf)1J`767]hU1͝^qN\ u|cJDu(n/Kl訉G?EB[F԰IїQ6E95QZ~%+hoh"b"л!^EEy:yo3=[<)]CO>`j/UtX=QM!C qq eL˜5bPM.2yGZ3MILc .AZ?<N\XkY.ƽI@y^JDt]5?hiĩ"pRB̓Nv3Ay:O*sT-PuQuq =Ի|sF\NL%LX{oݍvu[LSN{L^a GLot]^!';kml:(ڭ2|h m]>\= 4VxJ49a˶,E<>yZj[b`c[ vjNfOW/h]O]0yX/^695|{Ϻh0b%ttn*EE9f[sR!SJߑ扊0`D2F |?3޽ ƗsAٛNtQ).5—}@Rg5nWsdV"Ŧ˹MPvFONBt,3T[Yg)s_I6GnP>,!VYsqͻvm .5ĴFEcԳ/q Ф/yo gevn֪C^(X؆}~9{vk4D@" H$D@".DWD|/Ɏs<Ux m,9tW]%$&-M]:9=ƭA;yZ;IS$%>V J|t()OD)_crQ.Z r^1MGrdʊtKK\懋4[tBEu7qv3ܝFPCiOtiuƂaƎD4 X w\yTNB�̴ NA9HcZ=Bϐ%iGDZFa$uR_>4% zX&O.sI]9N jRH8gtF~Zt/U+uQ׹$ph� Ɠw%4>Ę>ѕpRm¶uW=tRaZ8{l?!mCelvƐ/�mMN4]i?|5&y. 3jZ1Qئ/|bh̔i) ?-^u!uG?Ǿkphtq+.7eL[ϡ]~=u<_OG^x~j.u#&ֹ#sՁuFz[^ΐ]x_l!NGjz0KH㯲HROqk bN4-趝=",,bJ~vD%2밒R@B̟V17C8h8ZJM͇1!8~pR_(S"?' C ӆ2H$D@" H$It߹IE  ~[ig7U[.Ԙht*2L~s]]+OryFEaw8Ll67q׺n٭'"k+|X_kRsMXȦLH= ⓌP{U(2f˥t' xl$.2FcO)l$T~hj|͈V؜'Kw)` ur7'h;c.\7fȵˌd;"Kil =95L\1^2Fas|V_CM_S;jX.^]gvrOԕwڣP1}?n~h;#<Z+MG]1S q[/RG5!H!1: Sː02^C|MQ%'ϟ5`D4ybLrH Z]+"Sn䈮wl}mM٥Fhd\<u a_:J-+3�@oVhP�3؊Etѹ!־@=%Smb3oI2,%oлyu^!gL!/sg_dZI<ĄD0�jiItQ按>T>G*AQUնkauPiJzJg.oO ohxBMI6p 4C㣺;@҆Lɤc }wƛd$|L ypdrR &S`,Yw_3ot=aՈcIo9:*madV#eNx^C+wDD@" H$D } 12bɍ;z* ;vдTnKiPrx]դKt)>~ZV }na/q<6ALivRwZ4j 2'999מv"9͎)]q;^CDl64~xmM$}Q]i9+ZT4z- uM>u6fmQF>^%D׃kave=4bh-f,5ѵgd żz/TCrs=M.#*sM%,SDriN n"$$ͯ5Ti5U0/j)Eiqʪָ.EEG.d`];uC]S_0k!ҟ]dFp§_xUȄw7)-H!FЦR2i<A}FJd䔡`-A)b[tP1">ڛ ́A)Řf>t9 aI0U<ь?bnH-e6 :~ oXFn 3Hf )g8vL!PTF L&.<TZ4%&}BUY2+_"2M/1F5~!_jʣ:{5Jڔt gLbl$›ׯ kԪT 1Q?h6+ը_a?J3)/z#'h,7º`sj;]i1&!+ixn}py^\ōy!GI;ZX? dȒD�tA." ]i.]}9T)6TL/-'nhU#lzTnrtc%Qmi4$i)K+z'ĿPijT9sY}X|%8߆70\ܾv9'ەiy8w'GJZ ]2H$D@" H$It ~ 2!WقzAܔt {caB#ZIIOx[}*qW5Ý# VʉH{(.X%N?jS!JL'xde)Ǜ]h!vZ yԧy6,Ѯ! AizeRG u6)*co*ICq*]yгky<sBȒ\O] f$Uͫx:s j"/Z;Mqj4yJ /3|ƨI:K5|ܣ1DM@-9)Z49YKhDPͺj=ʤ \TʑH23Gl|""IE7fL+g>JW(&⃉T6'"YSHš+mz̍XJtQ;4J"ѓ'?{'"y2ycj4*D9:~hKMS{D�E$RFױ^87 f4h~lJky$a=Z(AQ T\|x)DDS Pb^ַx9BMZ[-*x~yrڕtҸ辠Ř>AʍfE=kH1!=`ݤ7Z@ d)Iu,U{޾yY4[ȄPKsW$=W6 'i*=GNna]T]ꧯ5<yYlpWڠ2D1#]W {S-<z<}KW ȧSrsTBd[F =f96R q@e '5 ;*G}$vfvqiE'DY*{\ێ;ĸfST _s=RQ]I\2w%oK;>e~e+"٤#^h\y#K5W@NkvǤW~ъ\~fNQ<5¬T9>tS5>Hme̙k WKeJw J15G {bvz 6JSkYz_z>4$")K,R>ҝ]:Uz <]yJFYhp?/V۴gKTUȨD@" H$D@"DW:5N+k ySe~SΓ`v-65h2V^T4=.Z>ZOMU̖++ifD{1mB駐bsM1u /+=.%ߠ̄C+yB>wNlƚ(̢}ڬb^ X3iAt+.Z?h4M6Tc+fn| 21"lӲ~Xd+ Qk)&DnՏ;"KK;>8BhPٱPE(sP9O.b)]"quvB:R;;kiwa+{=yiR8^/A֕:rU3c\S`y(AL}EKCL,.v.$-mZC>/kߜOܟǣb7}LYY'nzc#J| ''<Jb?#W1BQʏ6Gynbג$]-[DV>DŽiz/+0;NZz)9CfO2Ueg[sXyOy4u5n3N$b'U4&nrC:CDž*v(fWmWM|]f_Z'=ue%5"ȟiF;u5cޘ6}AlE&@ka sbgGA0h":6/[%GD`5ql~#kiTQɝ: MOnV=i#67/[>ȡ: !?B4v_q-K$נq;|?h ,hh&054I.>=j4o;AT`Ґ\nвC7E֒1)fD]qq h41CZS5#??3E<iM59;%L["ӈTK)li:E{h0#}W`>Wjv,kz*"d=яvK! ini^5ԯROj t d+xyXKȭ(Z2m(KgD ӐU*_^#uK$D@" H$It9=JchC_$ˍsq+UGV]f*#rvYVӇ ~ʹc^!#,lC,ۛ@KF~YU1%hi6D2OalMddA+w~Lja$ +VWVֿfG0_F 'rESXZ"bL ,'%"|^"E1H6#Uk=ӆeʬ19U|%uЪWMru<{Y4׷+pN|m<vż)MT3Dξ,7-LqP3IU]Rrd|JU<$jܯO"E4v)խOW3f3m!?V1zR:cr{�\QEi?g3/^ }FZ]ي1kf�3P?o}0h;}ŮaL> B2A" H$D@"DW;D@"  rK@1s2 DdȘQ~Pa3|p^LX(7곴.)' o߀ctD" H$D@"  DaJ$D߆S;*EVUB,d Wͺ́jQ7 +]_2͹4kӑE,wzbUQJt=ٹL[a!+D fgρF-4S[H$D@" H?Js${(H$$Dt}xɟیu Pd.22~v<w2(<6p<(H Q̔g,3UzD@" H$D@"DXV/H$eǽˡpaxFlY|n4Z벬v)e`kyϑ#GN/Y54Ae 4D@" H$D@" H$(GᗍK$D@" H$D@" H$D@" X$,ENI$D@" H$D@" H$D@" H_6.H$D@" H$D@" H$D@"`)$`H$D@" H$D@" H$D@" SHB^+H$D@" H$D@" H$D@"*$ѕ*D@" H$D@" H$D@" H$?$)eD@" H$D@" H$D@" H$B@]O K$D@" H$D@" H$D@" SHB^+H$D@" H$D@" H$D@"*$ѕ*D@" H$6 !CdʔIcWMD@" H$D@" H@@]f_,zb[ug4C |]#1釬Vvex%[xWx"mugO28:_7@qut>q) ݚEB G'Y"aq{xʕa;*73_/l[JĽ}HLLD9PXv2"\;c)lj|"Q-:mfPD//oDGG666(ThTT}xZlYQ|y?KUN<'AAAY3:*͚H1?q?0*MҬo饢w`„/՗K/k/-=S1+pY<~DswsAlٔWdax~7}5&4kϞahҤ:3 %0 g\(XIm,$H$Itk!>Lk濴g:;Vly72SVC! E)$R|bkyhhUw'"ԆBѳ9ɳn|*Rvs} U\A<}GUCEdG�DxRp<5b'hXF#(;r5(3qᗱc,��@�IDAT7Ư9ʗ?Tԟ*ӄ㸽&ϛ2~1""`ۤ^jPġF xn]hoZDQBH"vVvg>+(8|0"pߑi"MW||6c|rS3&Q/a)<~HhL޽0mꔏf\ C=ɓpT\c,M9~k ̨ctZ)3gNsfͪ&b<n?l: ]-[47ھ\{F޼2?2%CuMj{$d!D@" H5H_3ULG/ϰ>\%W^&A]fevQ<..wvT:9s; .sʇFv^nasF)Z g"6VDtQ>@Ifw/]4N 2}zŽjL:bP͇{v6I،BIT}yB+[lOԑeHOV-fJǾL#00k>�#bGnZiS09_ 3e|26a* Nb]M�{̄U" H$ ItSKڕ/O$,IIt,DWʳS0_qqXȓku7kehƑC7tdU]sjkN\KALt?fџ[7oB)ݏr,JKle]#epus|,KJ$D@"DW3ɊU kr/7; xɱG5]ȴj!5[:2Rg}xvăxL@4K6.%UkDF!~0+h5HdIXy֓,Z >ɐQ/]$zNyt m6|te<Oh<zEb<פ 2dD  u3XCQ&ڨ+|ģtY+CLIm(v!s?EO=bpLŸC9+\ ٲg0sKq<s] fC*icݻu9 8mT�G5]U﫻k"^ġ|ܨՠQBopx|"2<#+JBR nx(sd=þE8nKX_0rEǠq¨۸�[O8w2yɾ=myu BQ=ʮtNTc\!Wެ|YQZ^z;|5iUXwygǧmP gyuۥO 5 _֯oace+FjgѼֺZȘM\EMvg BS|_- Ί UvCkA~>/ٽ o1Cȸg/9:ИhM:3W%rN-l0(E-kjK3ҷ-93qc^DWE<B. Ӆ۷ñcѡC{,]1UHٮ _%j6^%_/wټE%QhQl188^^(;(WZ3͐Pfj^z-[p+Q9`k3jԨ.1!!*U5e )z1a<u&~J*~Wy5=EcժUX?DL644 sdeĉ?P-6_ܷW͓1Ϗ \͚5ms$>7]FkvZaƬdMgjWWWxx>Jؖ@ժbA!|7n a)Z[ 'i==~q(Q7Btsj'}+W.+W""<KB֭8"?rJ ۠wgZa&fS{ΓЬZ*M.ժ#G$-R4w _|wk;>>ݟQZ5.߇|>|,3iMd\)ݳh Q#i9;;㩗d89r!(Gq=Qw?U˕2}zu)ydtDW=Bk_t֪Yh,VLƻw3'AZz5]hڣv]<}ꅐP͵^+VhH&,M1Y@O][sKkIԯ_<sqqŵ9thذZvhMFz)J*i[m%w$sO{dȖϸ_9}Ccbb(}P;}-`߮ [kRI$D@"# rv;͏)qZhԱlkC>bbqtx|%G'6Bӟ[ cMW|oPB?AE^73mλ?^6uCAX rjW:9]7qd#$S?nΉu)Nd@Mt%Rx;vQ=^uoĈ@!?l>e.'YaD38>uJ+Inűv_#CYfFWqlgcp՘.7lt% [W|n"R1wp|>gЕ֩"Iraf3DU?45zSo>)o6 2ghZ~rBD8t#n @0oGn +MƗIHk<괎hl3#<u*O'"bl`K\3I-ՌJ<)|t57(^dbQ#08rprݚ$.~D\`fIJͩ]xRZI] WQa]5FUnkq!<~]Mq2EѬ30e4-{^,rF߾}0olQrTڴq=4iٴy fQO]xoQ&;zJe]tWg-y\^6O;w %٦` )~Fuq | lKW}iKݨ)c׬]9sS~,'c>ύHamZDԬ]o3oU֨yi&o5#RhC@"_ ,345䣋6iz GĤb<ODR~!@$ilވF4&Dɇ}PtcV.Wquk39s<olU_K#wJO)%C'rAN6w푬 #"G"ußΝ:j%t#3@[{:ϒ$C$_Kre/]QĹcj5,'AtM2 'O:ˉmW t;v<^~'b1]=g>F{5I3Z^Y`"^kֽ'Ͽ~ :t<y"C~^FaM<8;OKBs<o!.&|CEyZ|7uֿWc0<KUQmx 6ĬeD@" H$)$O7}1܅W>4?o,S4zWUwqm%b~1wvKvk<.j}SNv62w'6 * "oއcY4vJsM5TO܄_1 }<n{ 2mw?P[2eᕈ{4/2Q# ƺ9AXʱ4lQ}Ki~صߚBViUc0ͬ\LK׳^DR5u,GV j;8&Jrb}_12' P֎}eZ9 J|:Ҧ<NsM!ڠ'Rgz�f3'(w/.N->lkXQcGq8/@| ZuQPqvsah{NP91 嶟lfm(2.:3\г8�˃P6L?CD iƿ a5Hj<55nZ9"<"Z+^n8rm7a¶Fg'ʼnWĴ.."b%JϓN>6ڡ=a_˱ ʌ|yqbm7|wdYߚ"6R^YڢkinZF 6y> pG*a5[uin 5~~{y�֛:f]y 4Ռ斮 "Qգ]9kp/Cy|m}z:_O]9HžA_4/u/I6o"zI"H;6)1|J1~rԛnԗ \ȭ<ڹk7o0rp'&$H򕫼M__::U{C�f"!펭۶Qkb(]{E޿AjL!�CUX1l߱S5D|>f(׼O իW=Vi/Ν4D;WӼ"iC2MZ?"]^Bf-6dg-5.c9%ꠣ0GH,Z/tGZa{'l F$/1~8]1W6Wtp#K.ÚifD0w Kzvtl !zZLV&i@Zz._ "uWZ'Dk/iժ]WKu<e˞ U]]#D_6hMs 3oE,>u$|ڹsGDP{&1X-aF1(Fȑ-R}Γ  t᎝uKiϟ" -.sxܨQ#SZڵAי:Ο�j-7] 3M2J'’cJ3rz 8Nt_=j$s&`JDi]i:upI$_ÊМ1mvtTtV[/5*o3dՁ>VކߥgJVB91(X1 (Yolkg<%~oi~WqcVeju H$D࿅�1'G�3xmĥ%,&ltN|Vq˸Vsy_S)reEE4'3<ʻ"{~u%-:y2Wz>gKn峍ħ륧6!{VבG !6?quJ<[2[}GTiёKLbQHlVXbp6 Hd/O2<[N H OZ["7 m(P['޼'F2o6nR]ϔ?]Ph"P;7:7?ŏ_yœ/rX<NvuÂYܝk5.s"ɦ&q ^z>yAƴyM+(MQyS=Q)}o<_OX<մCyhL!,p~QV)tS9QJH3\D┶* _}Ck,TʨZH*mwaNPZݓ/&etѿ'j?uX$iL^I08zY"=Gz.󑞓)=WՁm&,吸e|l"3l.ixQF@4efɔt0TML3E+ܓ6z\T{y#*xF)_zU\MIHG}zCrmJ`ܔz 'L}`D?׶]Gw&L-۔|f>,q<}QJ:EiȜ9{N+OG6i-P]3fU}_<}O+o=:+kr-:aFbx&3S $ѣsk٦6E֦`sr:mذ칟N 6#d 6C8P,hc:扙}Tj`utNq<w0?%ɒ,5;wջo7ou`"%]7ByYizn<XO=wݿĵvzYr=iU` #{1Xu+yo{R)k搑M\=JةA=gEJS8ӤV+WP`<}|} 3gԣ~N[ 0N_P~}$z|~%;n.3Xc4O^&ރ D@" e9"{vۡIGdץ'?~ap>H$5)EDQ";xRW^ԝUڥtAXtMIO)B/ކ:N`J.k۠:6^×N#h3u͛^cF6&djb;>e^"hhvo6TDH"SD0W&o35D&?OW59Us2V5E8 \oV "p=l8qĚ QE_A*%"))梌}߶K$+G5%,%S'"Gi=[SJ REF (` %zMHWBUn"l_JPkX&.uɺ65O S%7?纥D.Q?KMݏEؙcq"6hBN]/ڬd ]Tg} S%ЦبS�J3"bm򔩊mRni,lPĦ1So23Dm3g&Woګe)"(?n۶cK1sx<}ʋ"]i7dё6ŜI"̅ _7| }"[Etf:q="E%WD?!bc]ׯk?OhbsGMCƣ=y'2m4e|q � N`)2Dxu1 *yPO u81DzO> {zӂJ_LCشiꉋkKZw=ys=G|6; *ww.ŭSH-PB򯗺�-/)Ph@w  |s~+In;ϓvɾ?q_m-Ebm˟<{?oo[,'_u'F#  x8$xlγ?cl\g*3=3> .^=2HL='7pr]xU?2.} f:($ ե6bn6&yU, 2:OƕϣP:ܗafrz\knKߢR8G6,p{i2?VFlOT6}'= tHXWJpi(U[M۸ mύP}THb%&~n/rCMRP #_ۚ{$lZsfJguѦs(չ+}$vovׅt2݆H$1$I%{v@ ԪdE,k9J|.yoj6OG%\pHWSLL&p̬:h۵ NE8\) WqčqExM(PO'3O:o8{Pũݸ.xC;;̽d{Η fmo -H!6U*ܫ⣝P%$9GբC~KWz%=\5krCu+Znj^'W*V..,)sTLH&}i+l|XݞuPU/pzwK5GfkLt$6%֜8'=yA9 $2>Ke%űG0[J],I\/nȾKݧGOx. z(]T}:>7}$_ƍķ8W6j%V`y%nڵ;Ts - e!u؛byIP ѳW2Z0E먬ot,%K`V}Le7|+ׅ5jTǬӝTAX@VnVR!\ǵ{uju}Ĝ.<s,jשȸ9sQYYs=Ϫ8Gܻ BqY;wwhݖ vfMEƸ.ӏ!1bbd.BO1^][HiOܖ7 ƍխ==V;f46}iTVSOH2ڷ)v}M6c8mߪ:Me^2<!}s{v/1u2 ^}u"'LT7_;܅4~s]=I**O }cL_S\Knݶ kVgBJq)1IYvWgtUL ZJhq_PIܼyC;u~g*Jjvw%(q_ieyߗ{gƎQ¡\ h?w $@$@$@ ]5u$Vg+|RDy?YuAβ9}b&p{g &T!qZjc5] =`VHܩz6BՐ_pqFVΩ~bݹqq潝snf{31:</guܧM"CtK˓ 1doZ(?c4!IDI~YU'dĊ)61\=թ*<< 1g�OueZmtIbwE%!ebEmW~'#Oan (F8~Do})BaJbxp~ޤ/W;u5Xl{s6ׂwDuܹ~]7jQN9I&֚9ڨEL)eg>a^=iM+/u % y->J@͘]8͝}ŗ3;WYf =[(fEѴm>sǨKs/ p%^~H ]&Fœe=PW=J9Znyov5G$W֭[y>xw<MoÇc韋8s?[2hyM˵'O%JǙvZƻb3~>|$L0%a7IpxA:^};Gbؓ]qcU]'ӱx$e`oO0yzmكk:6&.؅,3$B1fS:k.m޴ݚqmu2B'|޽rZRYF_: My=9MEU6C%!AY5[٣\횢e%Rzէ.]z\LB.?d-clհOb|6ing]Iˡ{UDrF{"(z L Q1P ̓� � CN0LYKF,zfɾ SW_@f Om9i'zj%n5w?A\߳\[NZk]N_^_m/*+3{|5k3jg埧Oq5Tو/]e3Tظ. y7zHf/Jdpwt}lx9(榎;1&˵as|d| kwhI}t[O4z*P}I:{>Ga\ ;\8^z|ݚybƕ?IZ}*Inq&.']ImeѯB=dsY0.]rfۜ"_4~cיN~/Xlf_ /G\5oծ Z|9+ e&wL#n\bK&%u=8oƍҧ~n iܤ^ø31KI=5I|$٣(̵*v](<queN*dy>θ.L\ o /٣&ޚY/cƌkɽ)I)ًu#GxmjVk?sRLDqmlF+( b\LU .-vOs=yf;S3VFӴK1{ֽ+e˭{n=n^?9*dbt{>4˯9]FteǟuP:ޓ&ׯG鳻L5׷3L٘\1Q.w&vq̽sNMe[蕻=R^wٞ=eWĴ&Y(<ߐޞb{J   $O�I xnn^-Ym䖈[cg}Dj\Q.tf'Ą 8HOs*k/ko&#d2U%>O|h6w`47Byaqf8W-_sՄqM?ܖ랒4|b<սqNv %vE'F(2cb{TntL3#RL{iwbc40]vA46ٚbc@o.hdܗ5(1 m1 ]2ob\>L]rsgnFoӁAE2' #6urMdNhk|eSܳ'@買|tB<3م)3O\qy&E'yhO;ۛѝS/]7bCtm9yy斘] VYќ}v~oE@z" r6ެy\q٧7Df L5eڤ˱P\'޳ r]i]]OYψϲǨ t%)*Nď$ş ]ʚк~~;qYV}|YCxҿ1_<q#R3k>MVϘ~ 䋣 "_87{OĝI) 3~HĒ ,gxdJ   �zM#FZgI_{|8gC|?C?z-5oIߨseo9b/Us[~܄%BcI'^pn-i]F$ wB ]w#Y(9ťN,YCrjIJJ͞4Y{fSe8\V]Bg"tĪM8;0bj\[WARDLs_%tZDmm! {A,e 6޳@ç{tX_{w˽)!6[ Onֺt?9gyHE*> #LUy$<ҥX[uzC7g9-o%!fySs6˪;{#68 c!dIl~q5kҲ 4k&q׮]ֵq} } .tFH#Fײ[y{CiwBaƞĂŬ?iW�ܡ>"6ysTtXSJtgڴn0U.UzPBWlSl-q'h"l_`] ]Oy{vKnt gpp&Oe5 쟿/xT1RqW]v%}K_Lm6 � � KB#r.EuXu͖Mm4)5$h<z*toI)9oXu[V`"r~% 9xZk^YaW"Sk暈ʄy#t\5Ăˤۖ[0 M<~i~,6a"aJ&unBmy0-ZWl2c{@jQ,a8HgNް_.t\ouU ,Eo݋?h\{qj)o- w*e.Go.bћ;`_כ|\ٿG'1ٴ\&rO-tm\s`QkkWD !taXpYҞp5>7}N=͘kXPsb~kj uNrO cauO1fBl˘RB]vD]ƴ~LqDhȏ2“JfѴE't?'B!}-F9"44S7uJ9z#6E:|X�U7>a"J'Cf/庫x:{1qk׿�kBeIޞdNq;'VNr}*vv;)A,\ӑGիVYk"xJ~~BX;)1_p,{O4l{ӧϰzk4⊫݃d3Fؐ& nƌhyH:ǣ¬u2" e[qy=tsF$‚4|K1{J%FL׫X69JIv믿GW+RGeU"lx {#(bOb #Dc"   !L~=axz.F4)lN fsG3=jN]4UVnG8䀮9ݰ84{D]ʩ7!oy&~?Wܸz :ҁWD6l2[߄o.TS@I[O|u?h`x5bdaqi=W\zt>Oګ#3u9s_$KsH))>мr>qC[b+'έtݱ;]Bq9(KdȘC;:K=lFltq(ZkSrڍr!mX]*!e~&/L]qTTxCxmV2 ]47>U׌lak[6 N-s1s>oqlZV]F6(τAcf%uY W%ZG)S:(vXUy C*Yp=oך1j7eد,sCqNG Qçoc;eޗi+8&P\f(¹0oȕ7Ӿ|Z:̽|GdˑZUܶkAUGw}/Nʋ۷kb:ږ, #W}l,f,\{|rRr\dO]/] u9<69g#}!O SNu-|N>H`imE z-Ոr59R'dxs\{ё~!<45 qNrxw݃)~ӡ6=硾܁Ux=sC[o/8ϓ'6m\Gzi >ӏ멞nR, s})<\E(]4vG'|rXp; ŬrQByȞ=;T\]rr+VQOhUXI+W,C̙zkPL%K@)rѮ][^ :x>VPˆ.WXR:^CkpVxsN*N Kk'O̙3\Z+W{ Ç֭[íYz oۺ٩m̘qPuT=#ЪUKq-}.$YGgOu^RK/oKV'/EoIܺu +WN=FYJj5/S4]|Y % p䞭V*R$O]z7W^`E?jU+rXJ=V8zyOI֔׭d|uWW{J8GӤMkΊxbVyӦTo^v%TR]׭^7)qu!(ޠA} (aR}HTtk:=٭nOJ0ƯENwX;7|%6Q>?~_%X3?M7q:-+j=^ >__Z>N*>y܎L2Yc$c>$8=%y](z ŋcn/zɓ{]p;k@,ito6b!8>S%?0 ?^ \HHH  ]#~?~uWo[${6D5i'jF$#b׎۰z qҖ@&V�2ӝw9ؿ VXV49|;6UnG ;yEZ@B*N[B0w"ˋ+YkܾǙȇ1)f@Gaհ޺߳/ u֘~. Gsg`I|SyIyT\(<Wx pRvw[1˽ZxJxmklĊśj-w#׼~lpAԩMG]SQ>8!ʻb{y/"'fϾ\"b̧|:$7>2DDH2& $I_\ y; I扪'7bma}4kOsBׯJ\X, -_8.O6Y!_ wۛO* m:|"J o9z%[*,UC'6ݓ:zh7ui4nW׉8;-NEv>t{Sݬ.Ir~j AW@LJ'3A <xf#}(.1yym!Dl6/z+WnGº"Ujgq֌ՖG=BWG(<D<-Es);%*Tk׬LjҸodq<rix!we-Q/Էѡcg@`kFyᦩ>}9*W똱?PoE֬e gρ?ӽ{IV'>*Tbcz`ޜ]0UըQCL0NGi#GdO ]Ҿq&%d~Lo˖-= C'6I!ba[!Csk@^ $NiڶA/8>nܸ>kݡCТEs6S!b}B>Ww05wlTR䖏˽g.~S{PJN -;uP"+zck+~Iy{ł~ILʺϣ%sU czpZ,>wqա};-e̘ѩ^0Lz7uѳ}=;-`1 |C6bz2b{/`(wNCEXUW.L2M9S'AY\:us޽b}\'_ƉX,&':ws&~;:pQ=x砼~MܾsG g{.~)gPm`;}',� � � <(t=5$UȁKPBnLCkR!CLZB~'CpudȐ/#2*aL,Ia!aj!pX032t֞7s܏>aq?e˃ޏ%=g��@�IDATC'\7EYj)Md""D@t*R'>sc(hea *)E(nnMy`:mu*@&'-/6V Ϟck"ya-2foP7zl_}@p^F@<i~)% ]BvyW/7qM "/>bJRq"xhV㮳6Eg+;vhC'Nܹʚ/j$(x#bIsQܹ{9s@|ysjrOVR._Pޔq$IDZJQnpq\tQ[ΕyQ_jφ{w/o^5冨z%Bxm%STsUry R[%z|1 3#vl^Oq=_jڿ~݉5خ'_׻dؼohԩ֭h=:=yN>9s/ De<α~PqD%xNI!/0yDu$@$@$@  ]˕y� � "p^~]{:6XLQoIҴvZQwf @#*t%I ؓ6iZaNGh"-s湑� � � (tyKHHH4qiyOY>ѳΤ=.RG*7boOz~aÆڿ&Ln$^֟K:!yPI'@롿<L@%+Ų;7FwM_NaCy$\ɔ&    H"Y0G$@$@$&<T,cyՉX-E13A(Y2C$(PJx�-s;婐� � � � Ė�c  x H,ub_? SdLh2/JӉ%~|'ʔ):uj"Q` @R%pA̙;3fĀ'I 8z(6n܄}AqdH%JGÆ T/DOnHHHH!@UIHHHHHHHHHHHIBW<r8 � � � � � � � � � � � CBÝ� � � � � � � � � � � � ē@WDs'            NBGIHHHHHHHHHHH�9HHHHHHHHHHHH8 ]9$           H"            x(t=p\HHHHHHHHHHHH !PJ 0ey 09Ž[N'$sgE"~'NN<|R8ձ@$@$@$@$@$@$@$@$@$@$@(toZQ;kSpRnjřMq]d-fL2 g6po5QfNu,� � � � � � � � � � + ]D]&*/ixdqރҠ _ kSfJ*BK=s||]9p >[x\Nqn;w wFk0 ]HHHHHHHHHH"@BfB$)Yw[>^­J';ș~Fˠz͋ p`nxZϜXZŕ~Wދl10h)'Q{� � � � � � � � � � (m*tɶĪyV޺B{]=z3*ԛh/`Е`(9 � � � � � � � � � } @>@˔.3OB[w]+Qf 18v#wT(ReJ3j$ĶK{#u=�쟺 E8͙z~HR׉{K76Wd-é)컀!MtV>v:֢+P.QuisGrH<5ﭐZD)2urwc譚ϹF=٭'pD(|R m U-3ɵr𒮻p[,zʩ_ak'Czf'l=g - bkuu;sjdS RfH4(Ь:ճ@$@$@$@$@$@$@$@$@$@$ PJ$/:K_뮈x Aq@=!ٓo[g,i;)Sj'7*j5s6,oEml-v|d;^F2HIWBUެkqZo.5i<ѯ6gzv9"f{J>U Y|1]'ERG]+Gmu;QVQ[irU7-PĪ`,4] @BY܆KѨ9Ǜ]Ņntrgdjd (t%Sz3C$@$@$@$@$@$@$@$@$@$TPJ$W*&l3]7^Sn]ǵ2U�=c0sUJ^+SZ'px>m#kk(J?[tG^,1)483-}Z 6wăzr[d.ͩVa"n^�7\Ůᛵ! ڪ}&ING&"J!EZUiK裷u]/aD6t򒓕kw?Xc䮥,ҧRUw[5?ytDžqra]|IRQcd7.bRĽL/?BY]E[u:1׺ȶ(ջS)x+tݎ oo\Eڔ½[wNUݔ6CȔ8c$W<_%,3jIHHHHHHHHH ]%%ɵNk</Le^9*l_ru6ܼpCAQ}3"YV*،'ƺE1hlDD*y#tPgizPtW\¬tɄ(޹· ρi84gpY)JwVXdb{\s6Iv n =gJ*{:uqƙX8S)E~W3;݀A|c+NSssgNTS{Yt(kG]6-`[V:vO.dI"S(~<� � � � � � � � � � $>5IuWqpz�ݦ-k̩i ߞu䩓j(h jZmdb#tU}iuH?ǴG b.e\+TO6*ٽra]bv߇w8s{ekâJ^'׵Aq(’k+cV<=b~I*nzzvõ:.'Ӿo.q({}>)}SX{I{;IA\Z O~SrW HmV� � � � � � � � � � $ e�uW88{>#qeWo5eT+lNT%ǕS:<u/.~/nDzvH.jW]L\.գ΁.hor_ <C*ٞq-K#ڠӕzSdfzbϛLQL=GUn-#S1Z0FSvzM�~3X]7B׆7"pڊH).%e _7\C_ŵ僗tkx2E          D@BW"OB7V\/xrP[:Xq緪<\?ci�gU%sl~oFctGD:ߴj)]oDfShƵsp1̵cY8uTJ̪vc/[LJu2?k_^-z{5JW_5/.trc)v5OK\pvIzcB7aˇt*q3;F2/]z,v50J2+84{rgÊaG#JV� � � � � � � � � @$@+\W[+..)w{_Z).uXDg)8~*XqΤ ]b!5=ێ<MrL+pyisQ%1&+"\9J牮ryhN MscYFs*7JW+mN돚 5iI~i9R)ikss!VqZLWqfxhb-[LoeOıeQg4îs6.ُu8[ ˽XźCTL_IHHHHHHHHH ]:X]}%XrB=ߩH$[Yh%IforʋXtfq|f-r% -h: 綞D! [R켱><],9uҞsQcTT4nubt8b7b+ĭRJX41ID=VSkJ^,Շk^0BzmgM^\%e2n %Oz~(7]ooUWe䮩~I8aHHHHHHHHHH qЕ8bo]CM ?6FTltC$ޑbWmx/R1:~S:zODSjqumu0>_ ukڬ \E>y E.++V .i+Ԣ<[OJw~8WDDD u4sXn-S7k2Ǽ9Q`hѲ}Y+봠m卛Gk3cQɺIR0sln lNݱSokʭkEhpfVEWKˊv(;vu+-:g`r(Ǟ^4§YPe*sS# � � � � � � � � � @#@+\C@g:WV^tlgOWnۿG7rZ[w.5}P/Mj3b$$Cq<Ur{9)7N!MtNu &ƗdM&tDEܺRbKURa@M_c"1ObOY%~alPI޽{U3]Xqc1{ǟ+wxkFj!LTI^LCWW%ƷADJ9"mJ-�7w kTRs0b#G{#ۢDnҽ[0QX˛њF\C㎕{-b[zW=53$@$@$@$@$@$@$@$@$@$@�D}y\Sk%Iߋ~([ܸ}N uKbie**3wo^)3BMRH7u/ֱ  Ƙ bzIgYOD2JĨ65^ۉ;I"TgʁVܭPFepJrxRt>)ܭIm%t%\e}ѹ4X3 h+Ykѹ9V>;OY VrɒuPs9ޞ947UnϽz[Z&',zn2+SgKG.nvtq5*kfHHHHHHHHHH< ]I޸5 >o"/գW{ĭ80ce;o规\t-莂͊;GW{~BAHRګ=6 Zj [Mı"KLߨ gLC~> 9sF^a訦®D I=s8F:lh5;]ߨcEv-W1:WlBdTV1jXi&"k{bE%zrye3:Kr?W � � � � � � � � � KB{mc}fwµE ׵S>_&.֓y1M*mmsҒʋݺxzsL+=mP"X/Vs{nwWp5ܻ}O1Ȁ ;M}s[ObAIS׭/!oģUD+/ᖲחr^ǒJ$@$@$@$@$@$@$@$@$@$HPJ$QۆYmeTNG AWDF1mBzc5Aw^^<u ҧ\HHHHHHHHHH!@Љ4O=PG)hz*5˓!l1qCYdݻuW~Ya/>Aqx>#5wj'          (tyE`JbE$ *y?#wkʯFXefHHHHHHHHHHH PJh/ZoԱ2Ɋ|^٢ƤC x^\qEIg) � � � � � � � � � @$@+I^6nHHHHHHHHHHHHB            $IBWl4 � � � � � � � � � � � �.$@$@$@$@$@$@$@$@$@$@$@$@I�$yٸi            d* � � � � � � � � � � � � $5~IHHHHHHHHHHH4 ]HHHHHHHHHHHH$ ]Iq$@$@$@$@$@$@$@$@$@$@$@$@x� � � � � � � � � � � � $IeIHHHHHHHHHHH(t            H(t%M� � � � � � � � � � � � P=@$@$@$@$@$@$@$@$@$@$@$@$$ PJ&           o~:oi,� � � � � � � � � � � @B|/\ jn^eP N놅?Gqvd*D"Ypvi Y2䭑|!M]u"ENs@$@$@$@$@$@$@$@$@$@$@$@�E:uĪKMƍ/"<BXw`]H1 j}ZMEPN2 ?ouoY Sg=Gk³tq,� � � � � � � � � � � &@~bظ053״c6X)X zN\yxUH!v#tŤcpu`Bbuv*RZ̐� � � � � � � � � � � "@~ވ]ފ\"pde0Pwv|U] 귏܂,%鼸2_qee.i #+?gYY1U � � � � � � � � � � � $4 ] M40&WO^e%Nv|;OZDv8pVAq7 [5uvIbvkNm=e5S1(׆E*e!D$@$@$@$@$@$@$@$@$@$@$@ IBWBLZ\w7;#} lxoۣsU]yӚNuQ ]k]m QR%$@$@$@$@$@$@$@$@$@$@$@$_K0{ra%۰ ]YeE~UQgd*9]޻u_L?u{4&Tl;S<,̐� � � � � � � � � � � $  ] 3p1/\bMBś#ECg*÷ciLҪי`:iVWZ֩Կ'[q.*ک:N_[j(ѮGN @$@$@$@$@$@$@$@$@$@$@$@$@+TwpۃPU{PM?~'p.q**+݂HL)5R TMiު?h^2Kم7m'.9`I+=*XMxV           Hhh'. c1,$ {g큟unYk\sKl\Ll+G.c\QV .i+Ѧ$zXI#UL$@$@$@$@$@$@$@$@$@$@$@$p_ P躯x䧷.e7zReL7C J\5|Ibm¢0BŽ0jk*fM � � � � � � � � � � � $  ] 3Lum]*fI/)&2Ȅ].)׈'PDIA-ÌG           KB׃xWSq T\絵Vܯ*~=^{pH:y=HHHHHHHHHHH"@둺ޝݰH&|x!h1E _}˻ ؋HHHHHHHHHHH� ]�rRX"^%Oե/,α~(Ѧ$.            P'u?9wQgd+a@lrC:ٮ           G�G}34o&25nds$@$@$@$@$@$@$@$@$@$@$@$PJ!1l!%YukH15Ɂb-K g\a � � � � � � � � � � � 8儃            BBWRR' � � � � � � � � � � �  ]N8X            H*(t%+}� � � � � � � � � � � � 8儃            BBWRR' � � � � � � � � � � �  ]N8X            H*(t%+}� � � � � � � � � � � � 8儃            BBWRR' � � � � � � � � � � �  ]N8X            H*(t%+}Wn2%qg � � � � � � � � � � @ @+q\?$p5LhmOonk凰}z~u `ϔ]:B@PAĝzwiS'ʑȵ`"         LBg.}5ל539G R͟LМe>zh:/m:?H*""xF/+p ~\?t_})}ZN_]m#躷S ?}ư@$@$@$@$@$@$@$@$@$@$IBW$ H@!n_ ]S @AmQZDunp{:-ڽQIHHHHHHHHH FbDt; ڏ/!N'б}tl6Nc ]@bЕ_a? � � � � � � � � � $ ] 2Q4b_舻+rݼpS 3T(3 PddɐF>$I4&>+qfF\8N#Sb(P)r^ ]w޹}Lf\=sDϙxel*Fƅ~8g'y dY*7DNQ~$w&ȏ\%!&*nV(y_ׅA{ `e ӠL̨Xv$O~MwQxzʛiǏ\7=gj/Q]v;\p[5:Ȫ-IWiPZkRA4QVvo_eUjdCz9%昸DܶvXjVM12]%3NPz=7qfl̯2!OE9z R3+$@$@$@$@$@$@$@$@$@$\{.oӤqjPXw`]H1 j}ZMEPN2 ?ouoY8ǵd,6 {wݦ(R#Z|4ǭTx#tݹyuΣ03XY/4zsGjg=ph U(۾?:ҵ{zu>R|%crXUs'_ ݅_sCy0|cȑvj ;aT3K8wХw=VBТr~ :u Omo$ӠYU8bcI[(fdjWK'Ld'D>E cڏ_ߡlDU<7%Bα~X"d͎*+1"Lg � � � � � � � � � <j(t=W<6. cku5-l !!͂u t;[ܾz[ `ޮRa8?<oI(k/e{ztx'!KGvЪa=ֺo[W/aRH* iE!E8, 4C01k7RT!ULtxDMw} r?_vE1O1:Cg)+=5f[qb1]&[j\OV=B7atװwwaİɂ '_ǘ—XR-t ]φazX\}֔zfD' 6e.S!VpuKk!?&ίgIv 88rÜ-1 YM_m}ߺ.Rsn+ƹ]gQMIt]ۡ1ʲˣr(ԨHZDy$         LBWb: 7o.oE{82J;;ڥXqU~*UXGnWK_A֒t^\8ʲJƥ3ڣW}>[(i?j:*ud܎]woઙ(Ѥ:ey,$Y,܁p~Vd+Z]:ۙnRǭ>ߔϴçA Y#ەsQdًU>5{X2wv-T5_7 x 2RYnNM_ Gk&F]zM>-hHp1}z͞V-p.nVSM 8h^;.RZ,+*X {UD| '!         DLBW"8 \ɫ=~l)٣oRlekUS;3)&Է Zk/UV4l=ּB6 ['5ҫ8VM]y~6}1ݥۄR} Tܰ [ bG>sl?-tYpI[E|Jt]iRSirOXpeJ zT_?_]s4F톹Sm"u|!_TīC) ] LKZW. nAKw.JJt.ڬ8yfy         H(t%G%vyce21mZ<h==*=Wũѕ1d]Ba %r5q`t\;s 7.ywֱ5 k˹FFݑrCd-\V :2ԞXPs@6#Q*Rtg#܋a*>WYҿۺcWC]霅OmƼiG$tbeyl(!:7S@923$@$@$@$@$@$@$@$@$@$]Ǔ CoD..tJ*.PP(WwNnrQoiL6F%5u\8c9-MPyui&)t9]}lJjbvK�K?Ӑ*}f|~ʴ-L9n&h(kUT93:A:ux�!/oQѤU^Lۊ#ڋ/Bb#t/.On{GpRCZ;+2.[$@$@$@$@$@$@$@$@$@ ]t/\ X]crYh:޼x}\T+hPX)ӧu&vuj?IVkKkkpv&<GEc(x#t-gm i(xɒAĬm\.-ػx,Nl_2T>h3N `ܱRy^z8jgeRgNF_6Kmbnܘ[? Y|E't}N>]z+:Y|ma}LLBqaige_=5�~Bbw$DUh=ijy$         �zuFƅᐷt)g+'PM?~UzE%z[Ps<aSjƚ| Oً]f)BZËطd2)Sڷu]uG<3}*u{}R.~ᢱWˑNvb՗�$O}FЌ~$64NU]!{J:o3:ʘ o91?GvYl߆GB1q~=S⟿*7JYcj]K6CQ[-_xvX{2gMVlI<JI|6n{7R:?4CfkW5/tPn@1qN ]&,U@&kS# � � � � � � � � � <(t=ԗ7ӱ}ۨ;yqV*F_ FxיwCrB]`ݏ̚1g{PAg4Cp3Ej{}>Eէujk=oF蒎Ƿ,ßc݉lE+|tc^ ݏƥjLvdVe,2v!i͞V-d) Gp\]|+7cΔ3$>\D%tI?#6M_ *ɾQkCwe(a.}DJ2?vvRTPU/.G%tub%HRW{1=Yjb{,<gp         Hz(t%khw|ZۥЙm0XC'U*rmgOB]wo' ,v%ۿHyk.?ݪsͬ{jL.S 6qR͠9nŚU,&zd>up;|fYk>{ψ@:'gm4qWCj"ϭ{Eym`+,)}|ndȘs4AY9⨗A ]--G_Zu*OR"Ot.t͈k Woįqv@\VPꭄ Q7FϨAnĪ+!Q&i}$2frqq1W뇥/,ByQEţ+ӵ$ � � � � � � � � � <(t=W>wY˭yHgK%/`j7,+Hi`$,-.i7"]T2*"2JJsn{'[.7]ݜsn{ g\yyW%4{vo`kv)) +tώ)|6ԉJ0 l]o> UwIP:un_S#W?if ҲƫG lyteC 'JdU9lX%7[o- d- i/s/m33r -{ذh^:\\Az}ݸ=luI%NeXеb-yro%:3sz,<ƒ.[fw:t[7j_Ii:dާTlPeY_m)aguIW Yʂ{*576+}̅g]h� � � � �t;;:f_*tロ4zXmy /Kbl҉~٣:^{ĭXf/Ө"ʣ/Od(ʜ2Sw/jgKڷyEڞؽxc6gt7jRsu*'6LM#l<ˆtч &-5A^ztzs=3gLaYͲ^&93A:o w }^7 Wig(wmK.-[;FBudAW\vr:{Wo=֙ _6{dkf1:jg~}^۬xgu`9 � � � � �ܹѫ M Mf&S˾E=9Wgp]>Vf51D Wf9& ;Ө޾JLN=RF_Xue&:m?gf 6&[w^fYcmR(zT`(WYIgfJHJfgna=.>%/Ã.< pI2^թozp � � � � �/=:h53zCizN7A7 � � � � �WKjr/o٦=RYЁ[nOs}@]m? � � � � о4tp{AkdMXܺRF"B]@�@�@�@�@�$@Ձ>VG?E*WJSGj e_{\K24@�L)��sIDAT@�@�@�@�7]n� � � � � � �A矀 � � � � � � rF@�@�@�@�@�@�< �@�@�@�@�@�@�A5 � � � � � �x.@'`� � � � � � �nܨ@�@�@�@�@�@s.?@�@�@�@�@�@�p#@F> � � � � � � VvƌYYM����IENDB`���������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/config/img/accessibility-div-example.png���������������������������0000664�0000000�0000000�00000356532�14332737457�0026611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����B��� r�� iCCPICC Profile��HTY}$ХޑN�)E%$c *vD"ʀ(8:2ĂA@2(`~t{;ww}Bg Y"�(*ЇD?`Yl P޿w4ߴ)sb6�P2ʩ1;t" �H7\"N0*"@oMpMp�vE Xt�ڨNGl+(O8(A*;{E t Sə]TY~+]S}M/fߖ%]d(( 1f. 5,|IIb-Mf/Dv6+,tLY 3fbi-ݕ&eL3K4s43VqiDžM83:d&WIds>3z/);+zg0frdq~31xGv0+B 9Ѳ9s6B6 Vp4`'.LHLOIh uqiLƊfoko[DNAH}'Ag&:g|I4yf|f�ɂ-q$�T& X{ ܁7 ĀD�dXV�`'(`8ept�Aw` <D&C=D<!((@Rh*2 ~NA硫Ptꇆ'ɰ a:̀Cx>/s|x3\ WG<|(9D G:⋄#IH"BV!H R!HrC^ 18 CXc1AX  S9i\cF0_6eb%l �$;}p8\.[ۄۃǵpQ<{,_ߍ???z{B�! J g ݄1"јF 'rˈ[AIdJ Ő2HkI:%R/鍜\_n\1+rrd /9,%o&$P(7%"lP.PQ>Sm /  % 'n(P$*(*W)+R8DUS WVڤtXҐ2^D_O�R}l:~% NTRrTCeDUYQ5Nuj>5DDEmO: uF:n45=4i45ja,"hպb,YYϺ k[hGi/ާݮ=#٭sA煮nݳzT=O=szh4-VJHҗWw<4$ w5ZaTktߘhL72n3~objodTÔikZkkF12[lVmvgN74ci[8Y,-nX–Ζ|=]VX+W+Uk5:ǺֺF&&ϦlIn6v;e`<flr[�M-{:Q:mpju,rsv1rIqpCWG7ѯb]}\Wv&q;{a9ss0`yTyy<S<byU{=6x~0gd00^|Nu]u+? 0H  t \ td3k#.+/CCBZBsnf&k #L#G,|e"-0p-1bbq qq5qf'LOlJ'%H?odM/uւg*,d-<MO9Ϊf2S+RGؾ]o0׃[}V6=}+22*3ggϊϪ&dd( 2.ZKh),-v[s(Dt@ 狛$*(jIKs<ss>,[rbRe6.{rr+֮_XY ZuՃkZKZ<ۼ⼷5X@@Tpg0?qƯkEE%E77]7meVVۼ*V*->w{ڎow.yıritW_ihin[w.WhWlx{޺JʢO?[XPmR]/gߓq~\s@@с/EXRSsXZVZ;|$HQMuuUjE1grxuZqzjX0kkJl:|ٽo6<-gIgώ=7"lyq>@.ܺyRȥ+._hcqUѯ5^w~wOv8w4p5lW~7/b޺u;;wr˺~kz<~T}}gG?~0xσO(OJ=:=0l޳c/ R_}$adMo4|u4bѻwc ?h~8ScK>?~15kx%bMJ]pZ�Z8�j'�ySZzҠ)?I?ޞ4g�PO d=�e�֡y�@v+d&NsEFuTeX}h�4٢yS*clJ`: л8g���eXIfMM�*������������������J�������R(�������i�������Z������������������������������������B����ASCII���Screenshot4b��� pHYs��%��%IR$��iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"> <exif:UserComment>Screenshot</exif:UserComment> <exif:PixelXDimension>1722</exif:PixelXDimension> <exif:PixelYDimension>322</exif:PixelYDimension> <tiff:ResolutionUnit>2</tiff:ResolutionUnit> <tiff:XResolution>144/1</tiff:XResolution> <tiff:YResolution>144/1</tiff:YResolution> <tiff:Orientation>1</tiff:Orientation> </rdf:Description> </rdf:RDF> </x:xmpmeta> 4��@�IDATx]|E@ z =z "(""vSQ;Ez%$H! $7ZB{/k"&F`F`F`F`F`F`F:AӲr7F`F`F`F`F`F`eF`F`F`F`F`F`u)'#0�#0�#0�#0�#0�#0 貁�#0�#0�#0�#0�#0�#0 ^`F`F`F`F`F`FftF`F`F`F`F`F`ft]/w0�#0�#0�#0�#0�#0�#`�3l�#0�#0�#0�#0�#0�#0�3;dF`F`F`F`F`FA]6pp`F`F`F`F`F`FzAz(BJeκd RA"6q`F`F`F`F`F`FS)rn;w,,칗hkX9qGoG_ak9a×OQؿlX<")=0o/t6 UnSmܴTyَzB]_TL:}KڻvGܥݨ[ZyO|0�#0�#0�#0�#0u�3ve_ζ}znr|(3%$*]Dv6=).?s}tǽL>DIITVK2g.h|;`r%_sl#-5Kf{'Oz4`F`F`F`F`ft]TTy% Zk]j>);Zx r.F [STta'8`F`F`F`F`FfA`tG|=c@cmͫB]׍cb[f/>My^F`F`F`F`F`| jؠ`V ].2/Pңf6^LH1NPSR+FךTP<�8]LJFWm8[yV&]:"Nm?)M)Ck$2>b%Cg'bTV's˝ܓe`0zRJ9DgdZTnKԸ p|Y)9:BIL(FCѾ? (clrNlԄh*(Cj8t4<UOQimc"5jVJO^e bBes[U߸ioN=zU(JRN婐g05%n?C +RVڿ,mX/o٦,uU G89:#LmPKHV]og^zۆUm;xI !px ŝϯ54mHg9߳,e_5ܰ tՕM7$nQծsyj]i@#X mP`F`F`F`F`F /!]�ZY8yuE׊^wMf"%0y6MCkĥtda2D=&C`iۨfZt3S2if2߇ѕKAC7۵vtB6viD-$"ЀQ]F3/ڥ!b߉v̮K4oL3J?aZߤVAiy16Y'S!wBi~Tn73#>|}?Mũ*?(x8k D}BiL|МM}�-#FEGoqзS#<L+J~~M4J-x4쾚hn] Ro3sIMqiۄ B`qWN2�#0�#0�#0�#0�#P;`k.uR%ck$|i)Lͤ 42ɿ?y=,\|6Ve3=6)UjUE %%Cdck(E0JjYdŠN7Ƅ#VTa{H9K1;әȽ丿 ө|Lԥ锞/Y#fQ`PLyX2]P!tL,Eo[*vrM~vjV;rNN6rKbROʉT0c˱f2_E QEuU~w?TNFӺq( (GO܈8&QK #71u(}9?N|.dcH)5Td`5`g2hєq1ۘ&t<2U2գy~(<ؕiQ?wIGT ,S|Izr*R� Qî&5ZfHPtcĄ{hL7%h#ƬZXע%w?ߐGZSC| Z|0�#0�#0�#0�#0�#8evv0|gr+\ZH.:8?L36[>܊jAB*k~#\@P[Ќ(->M5Uc-hENmhI4x( plMfrhLۧ-[K=!^ T yxV}rDarM ͇=M3X|M'| ("SZZߗiE d_}?,u7E+ gO 3}s-I^5FeIʗah+L}<fQȤ?oE#FצZ%imwY5&׬]@`<p1mf̋w3TE3oEwiPM`YMyw%g:󟮢o´adcet ^̜҄4Jٷ:bzVhGTv'Iο׉n:NiԸ`=h&#uܽOC2յ۝uf¯zr\jpg#*&2�#0�#0�#0�#0�#]60sf07)t罴6&n@G:Q P EY!-ƄhL.dO&o+IDsك-i(t^FWt:xdSO+sp22rr}]O"lh ,Ku\VNVMB ekOCWoߧ,+bDYf42r Cz%e47(b .PP}~AnB\% [SFӯ7ar|is ?=1X/H^_fQ-.D?{kJFшC%BUJЀV+L(>&A+s9`pތ-K',E1b 槯zF`F`F`F`F`n8Fn2cvbp ˥U~9 F l4#=lѰɢEO2ӧ{hx:$%9Ke*cӉ5rZΜ !$@*)5!ΛJGP-IeXF"\A;*V]<p+50Uoݗ*6 H`rz']3v.%Zn*ͺP@%{?Qƾ8 DŊ["_s2;4/UEc1};Z`ZdP.Tx +÷PIƢ,q)VF*Ip~E7$RtT%ɐuϒG0% ܣFrnsj_:o~-_l}3/I\)#0�#0�#0�#0�#07; 3],CMY>4a&ZB,.v=д"UèK]dMaX6՜ Yy %XPdZVRu˫p9ÞiGc$S__~ k?};^Hku+w`%Pxhu|t U#{WHh# V h'.eZfeg~ܗNf VP""ϬKWT>xv_mgvRS,.-''"-2l5P)ENf cYYu'2�#0�#0�#0�#0�#xuw*͂0_.:B ~v m3КW_>u- |JWe*;f $+d E:&h|o)urFvxU^uys*_5*\T6'(T*L,FXBZhQ!F͋ePZ͍kk}Cv~ZTp\Z\*mV$4,}c;K=,eoim;[%f�zVԾk*o~6<M{qV4 mڔ+ ?& s0_oG- QQ|dF`F`F`F`F17, 8qX9CWxrvio)2#Ws&_:e()2RcH`D2(a<Xw\6~Tn㽟(TXCXv@OVE6-i*\LdrLLrń!RSKd&m)Y_`Ҁ޶M&5.^#ŤMY'J;Q@&W|ƛKgdWtVlM17΀%nTˢ9y=SVtτ'J{ݩis"N2 (|vSF`F`F`F`F`!pC3#4&/J.J`|ʪ7 ]GVi &@ꥨfZt\hF?; "TĿ4e=Hsv;E (2)-.\%0ɚ y.R̮.]`hߟ(SapP%Ms;޹FnY|ޢMcV=|CR|ސMSS ] oo y MmoJ'fҵx>aF`F`F`F`F[򶝫Vńm^_L1Z2FoKm#L> -БVV1NО黴|<i*6A0wrIyhDyտc?UL[{Qj?/ɣ>njuf7OғNڱLX,Xy<-{s4EENN_'%JL.DVj& uJ8&gGVΑqZpEh`1yq]kTަ<EPyzt1֧шڴ:>?cFtņ m]`ߛ{j`Mt@ Ze<<QnOc.otc&xr1F`F`F`F`F`<Eg媴J܇2D:Z Cͥ]kPBƕv}f[}gai/n2pBƷ&6 =WULpY-싓 S?PBv;# [ lDY0)Tn#6_G2"XW(d+]IT:`F픦rY'+b Y\aJ?!ST9 MkRy:WpR^Izmr z煽4ԢmY*(X`rEJ`60?hB4Ѻ4뛣㗇ihؽI*_e֗o#絤x3S%L%|Mjش4UTx}Azr8XxjӶ ,S<=ۊz|؛J .0�#0�#0�#0�#0�#EJzѤ~^> al)%6}5ՒU(zl|@ӬFtAltK代p4Mɴc`z)ب=e(Rqc~e+KYiu%s ۧo ̳C|7rV&=*gȖ ̭ [lB_ 9Vx _uf;MT"`γ"?? F0YآuzqN@ZȢ2%AԤemHg S1Kߔu ͝)Z`vMC:a.Sd#S ?ER)ns*^&ywuh<ѽ%8;#0�#0�#0�#0�#0@^ Pf3#"%%P VW[0#VVQ j@T]x.0?y+VYEFIkta1 /A%!$3\DžqT ae90׮w:IҥKR˩0X{v.Y'"ӨHт@h`e23)"WVIiR ët,#0�#0�#0�#0�#08}b]>bF`F`F`F`F`F{xr �#0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#072_##0�#0�#0�#0�#0�#07 o*_#0�#0�#0�#0�#0�#07~7E52�#0�#0 LX?&F`F`Fv}.t@TЯMd}r#p=3뵇�毽{=�U>@kFR zP:@c#m*,XTAգBE٤]cˎdWo5u.׿BgD<.&J/gd OڗՊҳшڹ e\L[&-P;6%RmPV/a~d:mߘHǏQʹKT?5nH-ەˋSz4 ~~cMNQihͺԦC9H /F~EYx 񣩴oY9qdR*ŨNp�ҷ2.}ڲ..ef{۾kfqT@yvH^S~'̌l ۛLWUJ8}}۲6"֭_:$=_&fu7*E%KvZ p1]LL% SƥLb8/JRԢuΗ3Нw>v^΋R6YG#>LE%˱c@=ԌΟ<bs^/ϲOE͉{ǃכ] v3kBOjvy}h-YO&=G.@ŷsT)Or[Ts>wT:"CO̧<1Z<O?N?.vôCJj^wӾSP>4%^Ny6 8CT;~&ťҬ?v:xd*MȐkmˊyvO=|ϼub]&U+Ơ][R4j^m^O<ê5Cd+֔ocA<O{x}Kf҆'=[W|fӅOy&N9-$pp|MxJU ?GhYo^HK^LC r? I~.]ʦE˫ZC>] 3n[|s\`FYy2Ӯ{tdsuzt*+]ak-!3%"d2S3]O&7`] o7_kli&cm$uhT>lO4>U_KO9߽ٮ_*CUiʷm떟'تO^aN$[O&7ʍ}as&U=Ͳ8m ̚OlG]{W2MG.'c (G'SԑTT˜I S+^HK>bgib7_=}) j:مԦ/,};o˻;}<W._BOv J0sn-ύ{ӓ/7Ң<yQ)4o~яwFl00Tgkl>ZœTpm<iBVs1}9KN*^K'gw15}Ȱ`όtxMB`.{G*ޓq_ӤgwFO|]ݝOUb'ߴq#6M۟1Oԓ<{ՏMу7hߩߵֱ|ʓkBul.0ٗ.kk0edh.j<!pnpNWkӔxd54~c#h%*Z}ZǦq^C(Ң?bj %ɸ|OѝkROJS<qnM&;dڝ?+|φ^Զu}B;{<{ڮTv\5Ui`JOI._ʐ1O'U`OVOyy~bOZO h{yEPPr_:?ƕ1W RUPU(bf (5^>OwNvÛHڼ&^cra; -dZ<&cP+R&<7b &0$_AnT4+\&>cP76[qB¦E'a{}OaѤh4дʠeO"[02@s d0B RUirCiD5` nh/' `<4=|ZBC"-;Fb>wF$ 4El)Ty0}B nzXxIpMAI4PsZ>*3eF]Hˢ7(4%!OƕKNOw-ם{iu< Z&oޕa\l|/gf"'xk׳Xw/{_H:Mqiz6WC)jZOn,IFVV&Z:ZJ�{TqiQ߫cQa6Ų)Oq֦S9Gb_И`żI'sUVK?d>5oϽGZ]ܳOU[t_Oj8v8^}bYjYGR'㞷=WxrM(5&8m##$% w'8;ÃKk2dJńs|I2̱=OGD`Vm[p/|S(lwUp d}r#p ޚK['}U6ëfѲft!Ў8DLQ; ;4'z@ y_ki y]tht&r/Eo[B5;W%$.ї $);RVY-ؽ:&9|غԳ0[4ToZf-9f9>l`0/Z/%00 _w, V]%kf" x~tbC~MDXРoӄȸg 3e7py-*#%'Јeٚ1ڳ, h\QAlv_O,ƚ1LGFI?h2=^|\`פv4{䫍! ^&wLDIaGR+xJgYS[nÓqeE:z`&::{oyq4hU~48z]Kh]Z4>ggA\GqfR[Ts: eЪrru>zmszMNBw  ȓ*332OS\y}m\kc*oj)L)&WU06ɸ|i \|~iبZ4!ˤ1]u]X'}xӣAR 3/41m[#0!`%tj cSXf-+=E.=JMmf[`XE {.FJQPN>آ2/g٤W-^Q[WujubPt!HH;J҄RTc };fP->Y&hߟ ,d-]HuLJo Rl! fTOP]؅k(NJ?@CZH*Y5xqLժN8@LK{H@) }IF#2좸\!!1S*6l+ތXʩ((cl2/׉ ZKLyH~I09|9[;�I_Hb z+0P| Bst [>,]H/4]v}+QJFP_V._s, wUlAˌ v# Ol Qa(c!٢uIG`t`#K}9&Uw~j /6M%Bf 1Oo3H|s[*TwPU+7F qmi&]d0s@= x6q~εDZMI-f|F귱fH?{,TŇo`]Oe4վOɯHq\ 5!+k.9IoC;ؠ@_TvЎ; sxƖ{RJ8*WBszCϞX3n%rI~K ?qqSOϹ"E j|ўmq]f4 Mcgs7&,o0%eF 0-$[ӮKc_gNIsDn Ťi%"o~1[^I3CVOKժk۹vZd>8{V? ][XaΧE_~-dMs)|Vf}Ggפ9rib,v4跬MQ==3A:㘱=&PĻb$9@aj.|b^KtE-Jߌ+(=9^QÝZZtV:st/S*ߚ6M̸VOq䞵b]HUwjzQvBkp<xrL Sv-+,s/7?crety2|ϓke5fx2,{OTg !EA|l-S=O[).l E.Rl3-35Y_˸2k&]VIh̷Ky>bw3IFEK_rLC޾c}8*Y_r_w,o25/ BI`phj ;;/?1qeo8ޱFRzF[nEx6`JrT~f ny󕕙.LW6u_1A~!Lkܳ#*V.F]{UBf}_- ;!A%&gj kZ% <zNF,h˺RVgTX_R!jFJs @߼"};۠kו#3\AIVVxa;b K3dS 3vӁH"6. }&n1-eQTwK؛X2n!9tnyu~ݞ NAO>1_k^^A[lԕzS;Szۤ '8&w!m@K*V=gMCJ~*hw<ohs/.O~IMpPҟi/$kwG3h |"|P O F,}<G_H%UϜ4j|#ZN5\, FX1&C6ATQVM]Eo]~6 <z0BRWT9Bb',*ou"l.FDxuh1{浣:h9m GjMo7Z&Η}<{`L(|ZͿUKwu OgZnu E0b;vv\kv]EK]VA *oRQh٤aⱾʦf a9ǴxOO9ɦ+^Ŀ4oUn.-#ĺff}SV2;U<v4_ iִi5EϊeֆyXZq<.MԦ� "li IoWo{/xhT P#O{qь?͟~=AGZT0Tn9[h6+ MbE⯕cdQZ'4yTw}gĠQRn)c^}x\~^~TL{gXP?rd0z.}8JG&}!ߍL]{f!S+fP=Ӧ=N;"jl�&`HfkBݵڈcXז,k@j[}m^WڔC�eq+.ˏ|nj2od|ϓkZ%|gd _Ä�E\:͎Ύcg2˟['):#Rz 4d'N~E\ͫ?냍mGS#jeap/iaeȨy5M^E V:?95c qoΟ' ހQ]L!m+^ertM`.yuc[GSק<7E=K}\B~T(UOGVҰߊ۠WgL[[W'`.| }C;yW7u߿{ AW͍f-j'>Cy{f^1|E.PEG:nl%+^O c~VR@]=[f B^w(-.U2v SwY*Wj^ɦm՘\mCZW)nI7s]hܺ薴敕_1γHOSZEcr܀j 6&P&LJ/%vӧABڲ:/)g̣CZg{(lH5B:raA %T]P=$ &0jS=GZ+K*  7>BOO|R*n9 ^OB>zߦH{Uu eL.@J|W)fن8GT,fy 2,  !`*UG qI�,fl~b Gɧ+i`+!ZY86D<l]p;Y|,Qun{jʰ։\N`]m<ߕD zl|5lZS&{wժhιT=2B#@Ih5ʺ�*194"!9 Aë"<Hʌ w]`XAZX-p$zMW>JؕgX5He:t22_ܹ'Oɢ]o8[0?6<Me%zpBԊܕw~<K9GhcB+HKtCv�bh"cv.ט\^ՖݩHR⛿O.r.ZR Tߴ 2|"NlY$ϛ#4<(76tiT$WiM|&͓ЎoȢ~ >H/s{Ɓy&b[[{A]jP me6oy KʅҐ}PhB _gF0]LDoM;"0^T&4j,gL.Wg0PT!W9Z`ɇwhPifa.Cv&|:Qj$|_>xe<^Rf߷$Ccaj;㞳~AJ3Ot%7mw(HF=f 5۟Vi)caWɓܠ6Ɩ?fEq vwH0wY)ǮPBpGbr>N@!8QHh*үo :*ݛ9 $dem(G!TV'Jw)F yAiD_ݵԘiFnŸ?uͩoCsM!Bj|&O'She*)c˱f2N9/Y֮*-/{v]:  &5̖Chcukb/wgu -?O 3>Vg ꨟ'wƽz.ɹ'kuDej5ϵ$;|;tМ<6v %/XywPv88g f١t9+6C RFUpQj4ac| +BCJMӃK yFBHJxr!5Voce ֕~}@\\JW'50;�f-B`j;{' B0B\Ӆ`]fz \x{w.y4 7kM_?C7-V~Soe�a^smk>[{ӜKΔZS0tݓ{zc/V5?=bc>A،5{sk[,-(8"n}+8\@S>S[R`f~uD^ EZO-W'GuSt,N=:ޣn]`_& 52~.ZPZԲL+PzQǗhi81`X6"TBM$ ̳ӻl/m)ؖ7`#onST^YZRcKX��@�IDAT`|aL;'?ci琖8e;+Zz[|2@Z*nlUL#E0UpS9lHWk& Tg]&kӭo%'$*ls5+?` P+ݴ/YZ0hWh Ֆ2*FW+=}^#H%_Sf}S`l AsKQ`eQw? g`Mޖ:ճl*Qm c-#BZtY[ᄡWFTsDn<&ppmhD_<+*flb1lcoFHUjl)*` yfd&2r\&u5+`gO_iG4` I}8ϯqwW-5LkmI_y]ӷ;IhB+L =A L{G|re=` dM`w[Ov ή2 L2d}6s`O)|)6W7uv JL~2r{_CY ?dcedo}4 L4+W{WHap1m/[MsbdB`!2)U\)@g'GmU6ٻh ξ';7[!q2XPYLA२FU'^j$`(FQIVf/×$0/NzT|?:9J ϡ#|QaA#fpw`~!j*\ X[㎮B�S<ꝏWLth7LJUѸewa&KT(ai0ic15'4c}\k)yxlFWX+_#}⨶C LgPc٪'w`6,^`w+Ghq%;r#W݃okUl_&mGO'2\^\^5Fl1A:yֱH5:uu/r6T|�<K65[胫sX`o1k+#s_0e( _Uɝq/=xxa&az 4 P׏#&ERӢl| \̃êѢ*m.ʨVLso ;Ucto-]0;ÞC,sP!4?f4E2]o5~ kK0q}bݲyD B46}ި5 ~m?N;iыLLUAUu }(VEwm70@P|�}W`5B8i{<b#*b2O^ >8!Q0Lӯ#Qk/U>+ʩ/bwv`ea s jŵu =t}T.FNU.U;֫U7x=`v̄!::^u>漖SͅVH/a2\/54)d"떑g [zYԊHmޠZѓc(->M;9V`d>et|�:݆i~'8{+3͚dZWgi*f$ ̩aR )HhܷA2`S (+= %Gk˕[c^eo>euZ uFĢFQ6󜔖8$CzF+Cck}J|(N ^[ z&Z\ <cr;W^e-'L@)M.I\H,Fn9J%E%K&;Lʫ FuyU*AiVAEOt9@Ck 5%:2So \3R@_) !A8& ް0^ZU|u|=ДZ-CjCG8*&]26>6H ʎ*qS$D4̎\վOf-.gϬ<6ɕI.K{ϫWO-4a@fywJM.l&$LahNvA"H{ _xUvIXhFtdo*c2`a7@߾_>[ac.lA`Eo9iB"h@}>[8]~]5&*¦Cs؅+!tɠiҌQn!4&(|j a a3R֛rg)`|S{t.Mzn3QOO0 x9K4"`+,@yR6Iim L]?0p BaW]H|drz?`tQ'cY xO{fm9Oy@_ͧ-Γoڼdx/z g Uk|ʮp嚼OG-|z=#qDDo2P@6lgzڻyD؈Æ"lѴ-aݣn6iSIG;;FM\VMXdQ#˕59CETm[QRƻ2u(YtL.qqL2۵;*qwPL.UIKaZ8mkpª9$W7Æ}�-}G.0@cHRq6L.+]^p)a?3c}+-]LJƧ yJb,?b@msVF> Ф  ,MפC72(mEf?GҷsOFΊ?UvX( jG v3j t(�Duo}˝a g Dk.X�ML-}N yBT՚ >IcԬn +*wD|چɅ|"wYTȋL�<erdSB\r2 5)Wf*WP2v|V>+' -W1ӛ4m@ kBݞWo sh})Uk=w✬_ c1T_8~7Jbt5 [ȟڻ—1`H$vCm.WW0UԊJG 0Ņnvؕ˱ ԁM(Tw3+Ҫ:8linT@PHU#+Pc$ַRktl_I@N By^"#aAо 䐔6>WNU;DޒO;FJIQh?=AjR*1{-,>9)J jι?YDŽAk8{RShg`ܿ4&f8Ikvrv{E3 9l 꼒{!&o9#Wj'g}wʳg, ' Z/qԘ%582_}[-.4z]yH(3[h`soc1y5 w狀Pw ݤ]%~Z*4l+͡K0 j>):eA:{�B3'OC{DqB?p HQ,!8HSEIf /%9w*IꀖtР9ڌ0MHCwvsj0)ն 2k`!ɐ*_dta14[ ERlf9o4$hYO.E]Kmno=g?%hcŬ[_̧^=eeeK}3`;c= V&bTsvg>ek>aHڗӢOK*BD;;3>0Whc6#5ɦ(L65<& dܙ#]#֌FKʍjg ݹ&e`oWoučW=ce*\Ec!Tրjޯpw_wG q?Djuz�6}Kq'@>ƱŘ=6c* \iܳJ )++:?U0cfV`UbIxd>13R3Rle)tWu/&t hI)Uvϵ:QBw|;z7&5N]UtXrBr2W)}|!ZB AM/tZ=1?\X{54ܥMJ@"͘ s_ƒZGLT]H)AD2:m9\5X]!w>oJV䱮z}RSCUzD"KH^μvxzB;6_jӯ}gQS;uR0@.сYyˣw>:V|ު.W<,A EX`~8o%QTzV %qB y<sacw XnWG?"ȻgEb(WYY!x(}Zw&1u]�6>OXcbKl4<>H7+o"28o4= !G)VdH;mPRJm,]Gmyeb+ ƚ+@ |Hs3s`A j["J<HasL|R(EQ039_(=9\ڜwV֝k2֓؞+aO4$u:)%.0+v(gނ`8 ה&1uD;FZ}IV~   &hoR?-Eǚ yRVyZ؇ [ }h7%J!2s^Z|:я~9&EXEo<z\*"i\�I-13jץ<ݛmwW .`YmQZhZ 0?erZfT6K$=uP(l3Pb(|Q=/Ncb:jչǗjnSYΉ(YywI_IϼUY4 #o|l50kx=S2\2lFGٷF};рзӑsV*?zM27'㞷=_"yn#k]Ý~:fOO"XQpD'UʟWGF{E$uALŨAYVfY_/0/=JRc5frPϕmW<{ed-:R{ >TvfS" A ?2jQh)+Nͪ%r+Uh)V}CTO0g]L7 _^yD*Tcfh1Jn:/Me0İNS̶y qEfj\/r3Y2?UD;f֙Cgh+v:쁖T)3*۠=:0c#o{z6EKͬ`wda =Yo!1Uo]Er_J&#L9JjwCNa\'5{?o,)m59"$b^l*$AXd@RQBS9L0.g#ˣ^H@P˙g_0`Ɍ`n1ZH({Qd̿Whm?9=B̗BTa}Z8Q2xR'  w0`hyդiCnY%?JXC{I1iIAS>n>.G[ 3C/ qVA޻J<X@M| =<t�WBkp]T{> 6c*Goe%̘ao u}B'^fF6a<$);oEw6~+ѽK&^y>h`<OU:pqpt7u<+>bA?bk,&(!b;u{4[W=^;uX3A 0dݍyI&O,TMޮ xoKլ~qe|r+P]5jus7cC&79`tcr.Ճ$@iS!H-T9LZ*)m,ڵ͢Q#nʮ33RΙn8G[)h.2rN6{Q$6XXu=˘dt`}Y-|Jˠ;\O.ٿSWto]6}l,{q9~Լ9FP}WUSX) c0ݮť҆Ik]n gy2jkV~ 4lT-* efa&L3Ʀ=O:\e|o'mA7xi46˻[0՗!r>^Ŀ4ul+ܕM74 c9�,؏Z8Y|T^kg T#l2.*0`[Å258{7Wܺfu_OUrZ1SM<Nf*l͔-M JBPp\s~sc2 Hݛe1W=>ux[pX0K)<.2#3�_J֏NQf6;c7UŘj.^Ĥ mH¯)f k|W &.3vQ)}4Ӊ2+]ӲKJbuG-*̘o Sؘ /Ymm/o(qDf3):cJ$8vEo]"$BkZHoɨ:!*i!ݍ r3DJW %QcZ.ET*k``uf\<{�04P=$fWi?hI`�#FJZ^rb'`rJ _aFfXR"$? )g=zdVB)MUo2D~kepG-TuOJZ�ddJb4sK\~5v͋8O=l>.Y'\T'Ϟ;ל㊳~9U,БRkF1 T]sL1yU T|1XA;)Ua۳ߊ9BHfwrZ>vM ȍ h=e9gj"0%&,6wMۮBͭMC̗Ckc>@ q#6iJ*c5!}ܳdtJ0 ѵN! Ԯscߍj90~ZO%Xa,g?ݼ$=F;K7w4vH3Q0 SPn)cȇv! 6=. , <%gs~hQc̣6B^_\+IwNcNr7Sq|r,DKaa]_ϧnƷ׬n}k0dڙ<b*g'`jM+h&i'T~1"fTJ\5F'㞧=w={2@퍩VKu>>Q߸J9(:jq1[Eik$xr u'{yrYoSmڀntBZ\ @&!\i#0ĄKL)])J856~c?Cƌ҄/4EXh8]OrN\ђkiMc~WE sQ8i]/5޲YJ-}<o4`dtIM͋(,la힙\siH?V^ lXi/x<v{slUӸ<Q^V'ř% Grĸ|&/JNN[_Vy%QU V[Mjd{Z*Zi76K2S2_!~&#/ߤͱzhE񀱒珐VR=Glz):| :=VnUkp e(L[t*\"ݽR0[0b#n*C9WDqzCe`R;̝tt< jZԵ%53$ܢ�3F0a v�!- &M ,+3i56zky0~]֍6eÜTA`1&fJ3Ts:;uӃ? �a4rLm4Pv˺$)BEY>@ËiS%}eZ@ܟY 9R55rd''%0r>{ԩϓ㊾]{GۛQE$6:ۛwP7cq*Xi`\p-i+'acHEJkQ0b%N.HjanUnn!+T|o'<gɤF|FyjWlYq%/򤞷h_lZmj6+BhF:L_άq3-7V;4v8үc#ΙOLWR Tpha _1Յ%p@yß s* MBeQ<;:(6`xzlyݭ:l>`nQܽCF74=VT+GGsTR3p~VhYl62kr>-WU?/_:_kaߴ(a)sR{쓾rU+YCX~Wr/E~' f} QtT^k]飓"ozebVm@�7mYi\ήmM {ɸ|ϝqϓš\ϿaCQޕԩϏ氃FToF|qXsZЉ}9k;2hzrP2e@fsceɗS_q+TqptuڏS J5OiqL:DzGXx2j%G^=AC BaMj{r)X+8x7_>Hk ׬ L>^S$AzJ*B7'T혟k.9J՘x>g,c^]0K2YU/JpAad==Z ۼFXb2dj6Z=F֙|,I;S\9q%췘P D \ D4##l:L_4Ƙ5,On0Ɩ�jt˲4, ")b*X(((Hwww,K=gܹsΝ{7{{g̩y̩^A`nEӌqw`\ÜRCV0Ԝ+N!UQ6a^>09>AH vp&_ZR2ѫ<ekQwܖ Ё_xV2sMWNQB+6s|x_2D\]9Hlbnj)5Oaڑr.R AaeBW9&B' 6$Y8tEc%ljfuTT8z*|;) *#H[*y Ԫ]b8fQ6)0SIdb=Bj.]IoNb3L6=\O3<`^|ӭn'LXѴG`Fvz ͜rTQ e=C;ZVJ6 0gdZj#j_6!q\D"3%{B=Ѯ0IP!lb4lB *Z2G{@;&WTף5nް.黭<s4x;]t.'%g=g ӝ4-ԡM{lZ&B.0*Bh笑c~<c<z혁n>TfAi5>i9ubd8&&+ZZވ,XD vkFKk~G>^>αV8l.ޥ鍛ѐ0DEދ")۟cdt n(/P1J77No ?VօfV$iKV˧xO1,&:7ģȘ:O *_= p0z<Zd>џg =aXS()50mWJ4:7H*7MxU-6]z\"3>fԁ-?\>s l<>2B Td =vb ^2GUY*tn4os2Spr Sj<}},ķd YA>q::c"O B W=全 >߭[|_7SV7D4k@hoe+#SLPc3.l0�oSt_ˈFtYI~!HlQAi}BmUF6YBxeq[ǸK뤮i/阗nv,Pyv42T^s {[=a(\:dZy3tan=Ԟ$CʗAFs7by#|ބۯ{;6ze/rM1ٮaިtu6 @r+zEM\FthAkD$Sim 2u,a/S8TTSagh=ʩ[4F*%'S_nHr_>_v0Uh Kl봗,q3z Llm|q*mهkla0\}CQ8^X`6n_?-/1NCZ3zd.a3XT8}47%gJ5`xN*-r)L / qb;c Zw(4{=}Wǯo¢]="~KURRF2A761('j3RgDċf IyUHVj"-}vQ 7l8X`) ƹS:*lQ3X H蚘`E 3%{Bn@+{P, ]b_+DwN9(ң/iZ�rLQgРaœ+3ԏh%i#ۦw {(7}vHj*FV*߅jJ1.|1x M)'QqbE7ƷJ1(޾B_`XhE!sPrĦEo0W]*Zi \JXEs\uD.\~HNumnᔥ@ a~80c|HjV#^xN8-87U+<Mj^RZJ"ce28J~R\ֱ1?_ 4IyhXT(})IcLF)\APBT\L+өBl5~S*&^A,xCݡ) 4JTœ{"R>T:\9䥓c c4UXϢ{p3?M)9!зST*�a> 0Y M=&;=ǎ[T1[X*ߵ?ms;7: WgsaUHm͠ڸNՒk?"90sUF0X KPC&CVNz5ٮu:Ej׵s23s &?5Dr܌GbLa<f)j>q:\60o=XB中ֲ4::yO IYdr9MfU`BF=q-Y=ZzsN _#Ʌ~HZDgЀB*WP &偺O8(݅Vh )_]kFC3N77J5'E"5`Uyl ҩt;#͞/֍H ?C_ozBÉ!<":}�'# 2hOYLs^;wRLZ|uh? aҿZ?yc+,dL۴i9ִMSzR ~߶jP5R@wF?~]4*7[K)KXjӹ�;z;YRo4�|$}^FʐT,֌hǤ:+kxVWMXpBJuq-"T:,XB0 wdSe#l*`QYŒG W_CLUF0Ң>ᐾ {Pxt PC?c1 }XRh9N-]@q`Uz='0wXO-5ٹFgrsڌ[}z uV쬷4S%C^tP`acS&ʘS75 7>~WL.uz]ƴvK,xl5OmlFf-!rRI!M-`p\o~I5j&PMr}% O%i߭om5aa V-.АЖQ(&ޠQ 5)dSf+dάڍgOCZ;dv*+w Ԗ}94ZUwpז1|(8pDW`"g-z]ILsi5ݳAGfdǗ @_ld(TJRg>$6zDϲX}7M'`uAj~+1Z]Fm-^8S,xpl]*]|U5:U\lO]OL.4ךa$zw\.!#0~mbdaZ*f Z[c9z0 ~j@hu9}W<N?M)PP||&"Nյ:ǾXrv@GN*alNS|˜1^c;@2:}OWY s7Z?8n&͏#y|/2ڌG8IojmXZ]?GΊMX u).Y-qbOfEYiX9RysL(s0*c;Ivc߳S0Xx Go8lP(ZG_ 7d20ouRwJ Gc G=ˏRG]ZEw$t0Kfժ/UG@SkF 2l[RB5]0Aéz< eGvzY2 n#K|`ne`my]UY0<>'u ;``mu )~\a}CWR^~ڶBC(ִO썢à!{dnc ;`_Ց2C*#Lť 0{h }~oߵ3! >�}\~tsu_)SG&Ta#uW�_V?;c1} =\0lX?aS .S0WTxFu.& SŀatUٛ!_Fʘ?wَ; 2#ʣfl{%vpW3%av^1�,J̶D[�֞_ЂwRd#:Yt怤ɭJByXh!;#Ւf3Vi QaN NyS M6/)soPΚ# KT9aıkRʛ6ݏIaԏݯnsFtX4CupYvXhƈ1-\Ɨ1$O}UӲz ΃x QQ(J-|.+ )^L4@?LsE~SXK hgO٭S0%#SN$Q1dL53Lws86aNY6z4Mty1ܾyCnL?ٷL0f>Vy=BPu8{8-%aX qWv980SwDߐ=OI0˵׵soK*5ϭ[즏x_<G0UR4QJmlUB{{BH8V-#9|دCلq5Pk۔#+t%S Zn㊙xgXM|iC0?B=4 $tp/%:uJaF8X}Vx6y _b00�#0@b#wRZ]L%v|F`4̌~~kCBݸ]}?|gˠG/K (oٺ0�#;ھSGVGSum{ bt=xb =\֩ 'ir TA8x-X˙9G^8͊0~\uF`F~@tV3wdr`C`F@`Ւ3wz$>~3.Z¬D&}F#Lt1 #0@B"�M3{Ӷ~E˖ VkauhрM͆z呀F`F֍\y/*QOF`o$^yDBbJ~F>w79#0�#\9s}]/Z!.^ F]y`(|8J_c(kD6Q&R AL�#0�#$&aK!sRMۙF`. ·6E}&D GiD:&[kϙbŸNE*ժ%:3�#<`dNś?.,^j?bF`F`F`F`F`FH(]t׌`F`F`F`F`F`FbF`F`F`F`F`FH0+#0�#0�#0�#0�#0�#00�#0�#0�#0�#0�#0�#t`FW}7\3F`F`F`F`F`F`qo'ܾ}nߺ4SL|N7P`F`/ܽsܺv7Y<ej0`|!p {[d)RRr{m2�#wvc'rLC6ȩŋ}3#C<8`@ZQAkԼ\۲=-)cTAʙ`3RRh >Ob |e#!bNikOwKk; l wE>vDLA`9[c02,4\sp$W&싱WF1UGȊU_Uү<7}3SЁV MXrI%|-,1.G.n3=, ϗY?E!g3N'ҥ{ݲhԍ9-~s/t 9(u1V>L՞wy-y3r<E:Gy*磇(o]=y%ϫ\*PŘx׋KRۄuo|i3ص">qr e2o@�6s7(W @uT|1 vލ;}]ʛ? Fn8O[6\ OORYr2=t֭8G{w]뤔YG��@�IDAT)eto^pV-9C_[7R Y(r6ʙFE0NQ& =u({4Viԡ{!n6ﵪ1IoL.fޣj=&tz NެҜS0s5B~x3ܼyΞ.vlH] F^pz0s5ڿ|3i p &\B11e:L#oovӏ_#1>i}3z`}X'e'N"Cۛy}]nˇʄyewnަˊ(r~fLZH<>_:d{ Wnv~N@' 뙂PfXEJJ۔xtݹy^&H{}n߸N/ !_mtay˕^/涘kz: t:R9sQ2$*8wl@ՙ'7g}S[.0:5\(_Ȍ.JwH2k]5PK+ۏ?PkShOѰE^qbMJs[oķ~<Ҁ6y~}*\4=0R1P־=eɖZӺz&m\%.f7_Ļmv=IO#nH\fe)0"{Jz*{qڽJݯXq8͌$ӆCBRP,>)␶EUK'r(xaGVđo'J/ۄ] ĤP{׮bѰQjKNjuvǴIGdѕ԰$W/WЗm-9䌿L =\~ {J%VA.gg ۳a^a_jl2ڪ2y<͐1%um%|")qUjD)SԴl)t@ 4nhA%2=@?׻諁[A/E|jӹ�ը"4<Aݚ/*_%=ԭE!{Y9tWK";u<:7^(&GzOQJ+4q֯<G=, Q=g=l՗EC3rT-{nnyJע#5K =JǑqu~E{?yfFWi`f,ԇ+,L?;3`Ҥ5{?5\F�F4}e1M9͌@]?&F�L[OwP>Okh؀}п$}MEʚ7QԲa܏Hj{? -\`ynK)R B"-U_Ņ5/_5~5-4MJ>d8_g_)5Es7 {AΗ̮+~O0E ҪvI_kb8͌l}6A]LMW.>#ghΜiuIJQ<R TQǍю 3Q9!m`HoXugLEiӥSKۅRi?Ǥ urj|!uIof J sJI<s\ubia&殴5 _h0DC3%xFj6BҦǢŽKZ0=9xVIdI!ִm>:u:]z~0JlK)+V*4QDPM`BZ0$26ׯJճK |&pxϵRSد>3f*06W3IeX [ҪŧeM`nnuL^<}"銲I\o aw|хyyڽ|_h_U"܆7J8.JB [泴ApӚs<y2!'av;âK@&l+D.=nEu|E?gO=2mxAYoG+->!-vT-\5ovn齝s_ .L׾NZMQ)_zV!VN{7PTT@J';tzZu2/NyJנߠә=(YFh1wX|O;XtN̽пc^_y쪵sȱm%kjjݱ ̧0oF\M0{ K'V| HWjkÍ+I ˧RG QbhîL3G&LI W͐~\/LEӱĶe>{(l p@h]:_M'\E+Qhņgf1ճd˔7,i-~G̑R܅<o3u7}9"|sK*m[`a=.{Q"ѵQӔDU*R3%Oi*/vjra.1J̉S-Up#wչ3ښSΜCWs$ib\lZ\KZ>xk]*sdBE2aM rJ;N%z= Wܤb3hKb-Nrj\M{/$lan6]J(=f,;#Tr=+gz%Lɂw+.&9 ü?QX])P:zRc @*ƺsRT?w͘=& Ʈbtǖ^~B>&m4Z\3ߵB Z]mmy?Xﲸd\g:is~[GrnsL[)|S{l*/eGhվ?y8}dlgv1!8ل }&щ-Kܣl[%R[-r4]OI2 Z$96i-/+=SyWi<NGYA8,ioVo7Wg 45#pq GH6ÀC57ݯթãYcȶS &_MjR+ib$L\e 3O">Vԡ\Z8[4mV=QznpѱGL&~nh/0q.6b}3x4`PXx:xL k%s,>ys3 b,D9Ibu{漍~t|홵rBe$30X[홰x0Ks FuMD Z}5*z<[ lY[^&ySq@Ѥ6"d?0RUGU'^,.4j4VC�f6d{Ry>iw{ԥ|֭�/WڸJ7K?=s\tv*U}3N-oPtHf+:-.7Eu G͋h;ՋjJ}#<!`ri{[!qo{M6`aˍI&]g#d_y[B˨LSoj[~Y0F FX=:^MuHQ2y0uђIvy怶2j?R"6f6u-9X^gAu'5F߰o҃6N __dAvtv:�D~)C\TB #o ppGVD=)[fImCWvoʻOtF9u$QX2X|`{{JlOyǼwZԪC~c9uźiWq`5rߛYoX3Q>w\9 :A$SkJ* >{k3U�:tsBUMk]�q[MݲutLo*G//3@XO \آ5G}_0';mlbPxH0H@�HKh ڿ12T7h$%uV S +,֝N[~UooQl)g\BXˢA—{n F?Upg}$ xun@mmL w:NxK Kh_PL.ؼXA*qE,fʼS(62JKWЮ+N4=+ Kq:3ˈFZ)p< 6y#\$_9e^IqưmN5&:�&ݟ)"su_I9"꺝r %2Jr,KlC׿rЍ5z WvF/I̲=|J?+WќBjG>QXhwD La`ӄ̿Q|Tƶ] [HڔE O67~C%ru-3fyD>G$COw]Sm!lC[nM`~[<y2xap(2((G1' >qHc/_ 7[+ |m:lm>+|X6)I7zi{z&huc;244RC _7,?%|jϓi/oQۼf&= '4SnX<2XH MEBUL_s=Bnz\UsRCJW&KbNHBo)RΓA8;wrᑷ\] ɔNm_%nv4$>q=(ShQ8)$Tw-S GtRhL}&uTR0QdB%`B˚ i/.ǸB͆ïBXbJ10pw*.~O*-N0F)_!LƦ6%1*XJ=ɅyWd>Y*_u TvQ. ][RFڭI& FInynFϕSG$q)TUo3WS8>_MtvFiHx =즙tYZ>1Oaٓ1OІCL[׵ TǕ ⣩["B+-Ij2w%6fF(VI`a EiC#S%!pzZ7}}As׬_ۧLeۿ#vk͘~Uz}H}K޸r2{El3SP2jSߨBGQVƣ?sD'H)sOt =nWbẓ?k:.LmoBny1f&�^La'9+&ܒR" M_ lЃхt<ZLSE+Fơ`1UKhB_rLU5o:ϻ bra[nN1\ki`x4mEcEY; u1yQ9P(2mTc:[sY.E' 续QN Ʌ5ߐ1i2?TДzY&?"~YUEz5̓1<�P BM7!SL3V2W4g*:]&]>-H ^E$3ץڱsQR5z?}A+VqZ iHMj6sI9B`sva .F3BMѲ5FWI]qzZ l:4-랂U4iAzi>'HcM#M^D&`|,A`NN;MOt,o w5 l5,;K ǭ4d H=/4Tz,R\361{ь[H]D"2+OL,fGMM[uzD0*<5nbk>]аR` /EӠ=}XA'$!g1Oۉ ҠmC2ʸ`SrC2=\όg:HNp^Y700 2ͽFG7j&&ibOF M/|{oG[,ilp]=c'W_*T]^u9a?*Fް/9+rFha(r\)}u)(U 6=?Mҩ@߭1/;Wj(q_t9ћwh; @�\hTWYKTچ2LWNk$&LGߦb;H -QL zBFR=*ɀC@iYkg$"YtlV[E`c\1"Ķ?_Qu.M_#M[;#lbt}ֿBxE OyEV@IaX'b?MѲ'NhA+GnYT>wrbeG:`vd`l@ ڂw<ejYoZ5j= ;O4ozsڿpڒ7I %b 0lEhjA.U}c!~羦T =~ѵyW"mdz1clHTQa|I|-gux;Gt4j]a} bŒ?=lbd4<¦/`C|G /9/>ҀW ̥8UjfQ@qs AǷ_%4S̤nߊZrђZ4kMnąbը|ֵg23%W xcN\>,̖<j sMSzR%xkgd|2?Ӷg|]0="%H.-*q -/F*: 1i ךO1"t3T,Ym5),]*=܌`~ uFGs _\k<;%4}R_ t79jr1.1?6ez)s4>qk'}-SEvzj |cw8mDi[+8+W~|v MlL 'Wԙ\ўyIcam!`^pĎLUW~0yb�0k{2n l?&7cZ/``q<7, 0P&`p΂$"L0?R/{"8W\{3={hBB< 0Nί@ wR;|)3arnUi>JCJad47HC`ZpuV˨G[2lJq;}OX􀠕\F9&@42Ƽ7 >IÂ] Guw}Bݿ#^=OMݍɅڌH7^OfsoU+Uv3{eFoә\*=ޕׅv 6 @^Bm`f&&_a1ƃ< bHu X-1| 4a4$$Ÿx[t ƍfGj# eίClFZā2-"11_љ\ȯ@ʌ<Uj2`e/7@/m\R{ Z鳻Fqq f0 ZSz�D`0_9Az <.Uݘ\H1&[߬ ,@TL.uvH?Zhdg6fq:a~},C4 hrU4F$,.ק[D> #1Wk¢>Zz^"_>�~{?+]τ"2\LKJFth3=0FD̘7!G al&kA5Zk|ruVω{?oTEBMA; )K*}?8`)O8-TJE1z?!"W1o<=FFUK^RSk�!@k7T8B(am ubr*wL.sv:Ng) ;9ѠW.cz F-|= <N8m6 Mq:zXz;"�i|-`Rh6hGdLQ$xAF@[!3b LU+ύI㧘S88Q{ Z=Em3G $f p`j4'\F=5Q3og̔J. f$' L0�en0/0AcY8Xa)m7>.O㈌ F g225f(+>&o J4)m0lrјV o |hwlGQ΀7s||B '0mؼ}(U]j(x[nJG+5=6{+\qia]:_V _I'6}`RO@y43j3_,[ZnqSѕ<*y* l1j&츴Rd\!|uJFpI,YGVB{5"oCV œbhhEQt*L݅A,#=)0OjmSy&!!jf ~rʺ\јV[?? G3A#wu_T`R,G8Z(Tm +ki Ulf`&*M0>Y$L*M,Lb-T=s uMt?B!@{֘j^ sg XX]a?N 4ǟg2m_gԕ \w9-URܵi911LSi!Gb*|ki3Ǔ}IsC# &Pvх;_43`N2ZNibXW`5.7[Ҋ=oU߸'c76whfl$y܊̑+~ FWl.u~L/SzXG'*fʴ\˟qL.l? vSX6tܞ|<N[:ynq&8wM<cx{ ++=LEH) i0HVudE׮VGi ) S5U*Ϊ7o$`}Rj`C*22Vs8hl9<'XϝSN Euap2롥T!t*umȃh� qeTTyT49U u/jMP<ݙrM`e$5[퀲Z,$:LEV}~4_0\ hJ9]l=ᰥq V޹Ia>fr̡qV_- !g^"?m6LXT[18*W/aT#ݺ ȸI 1TυjѫuSudҤJRwV`MzeIHKy7wr!ڡ Iϵc?I+~|b. {%vp&EL*dVuRL][(Ttx :iL?sĨl\c!MpH5-p[ E|cTV7|E�eM1+kWK3ER1Hԃ**Ed9+(  3#Vo%넺jcTGj JV3&TqVqz?㓓签V?,#Z4!~qdrdp]`Ka.@XCPn [( T;Ɗ~OƴТ4 ~>Ra 5mܛpi\}Cv-;CiRr &O@q~2VL''4&=UHUiNJ1i׻qrP㴓VNRs%ͧz>of�mE {.vۘ*"UN ~̮ ܀Լ:bDj)&n\=()j,z膁;yO*-4fmJ]o)3BB:!HfAC&ޠlch f~ ϤnW=Y8{d\@UVmh^bҗ} |s96E0`[}p %oҸo C#n}qϹ0sG;S1dunf'Ef!fzФJi:x\}81Yc[q-[:?R]dn B0!ydL:"MSJO'FvW\Ktm+0nb߂Cvgը{_xHһ|�Ў/:ǹz -}X{$寥 p3m|a01Tz+n4](hTDVf؏gUJ5 ~=#BZjXp͟yR M(؍~[_/*M./V*Ckj2cGHMZ1&U]<ayJK-"h&ba_ͯc)A b/1i۳0˾W]&غ%41 P O#ahVZ0arvnrc\u \|vm$,:B{xT YD"ߓ1̿ (.[Oec{{@p1Tz\Y4Iq>NFO8HM'ӑ5f{~C~xy~y<NynBjUo 4\G\dHc(AL% IR3+^0a�ɩfۂy(@HQ=]Pq-Cf?CK[(v12c!Ast^! 7s80r?EyB<B,%炱ȱ4uTxϤcD mwgY7ڞUq9yO`ZAh+^eei 劍4*#wn?Fk&8|['8{Wjp_ᐐmW{(x<+g\'h^~qVK'[2\=rhsV0Ò.˚Manb G`΍K r-ʔ//%f/veWo~�iO\={VxM>۹]m9mn.nQjPU5_Wnq`I$zI'廽)/tѫDAjzM կ:])肙=3(ml (K6O?*:7Ԃ)dPqɨA[ dmCAgzf6�a?\C Z]柒Z1UiC0-8[C#@Ђg` &=) uV^0Q荏z='Ϥv4Zހ/j3 k֡(Oz0gE'bM[{`*F7mVA`7=tЩj`B#E{W(UbFg|O*1:-0 ?t~(˂<{@0i a`0~鼜lhj _u dvRd)\7/. i9ˑճi)3~3)<Nj㴱~vϙe$Oj28SE�MtjژhI-Vġ6GD y~SIƺ1Bab "=w+BL؟OQ4``c^p B=g sp!}G ]mokE}cX L?lpTj{FܱHRӉV^wr,&VXH7/{2r縃FƔe_z\E%ԻUsRCJZ̓7Krf`VNcӟٽʒ<Zeȩ͍ 9z!#B3玣{Ye٫<9>EH.~4ӭ $ ˰>oӸQ~;)#i|d!ytf:!妶ޟȐS{',7Oz/ .dpt|KF,QIwj|r6Bx/RgIх#;iZuZqv's u,JP>!/ hTKffZٮRZq:RiX y+~U3@}H4P`e}B͢O\~U^:EP]ߒvQ j_^",ѥʯP3A5]~IRaרUM+3d=RqY6 ?j}g\pT>TXKY2>4➕7// Be]a"CK[�@(IG^ 5I/ FcFQ`_:֟ tј\`g-m4X긌iC:E 6W%e [ i&'un(g tvR2'6/NB3Rm-~C'.8Cv4ickbvcs$^r+gALϟ4ۃMG л/mNtC:}Ec@u.Z2y~i8㽄8/[I[@)K|okЪ)d񛛥Y cq4c+imOe TZ=d4^0bI1 ;}s҅Oex+ (_o/v_IX ҙ79:OgQr7κA03z~�xV$s0Mr1eZod5XK{0@hEXB[/q_!}-3~B%OHd"hZ-W/䦐6]Eoy*m亽~|-b}^ X V6'#hzxXple[=]4=$xФ9C*¼^ `]3FH.}>jG%Z<!ބM`Sbd`qf-SHv7^S*M[ׯҴך<3 0\ܟЀZq`"";ߓ utv[9U:OobUvszdY +L:Rƅ?`+^xdP|XxZFO.0WSV=j)c^J69'RZVUjiqT90Rk _\`ja5pg#o<a\'IF3APG%RhѸ>srwȒ>6a~c5mǍ [a]a\{؁`6Kcm$X�80~}=_^c~3�=_:ɸ.d.8j DciYCP-&r@f sfr=aM'L~?d$E?�&L%|+l*Q>I1N;7L+fL&G$47]j·:({<i#JsyvjVZNqkӅzF,ioL,nS'͖AHNaF*& H[В-߄JϘ6WN'Hmx^jf2QA:+S  SslBr҄@*1bV$du6F.h$h0[j13iAi^\ux|]r,zt!%Mh ]T`IرP\".8xKҖ$LuhVǑy%'AJ"*C@f&H)l4ttL29}%&ΗR͐y<l!:* 6ӶH3�fR)3y$ry"t]BՄɗ)6ޅfo}ݔ񇨜ؔ(,7Xzv,  f4 nY'tG bI%Lw}%_qU`QA2N,B0gd>?%˪lhD4&0׆|q/ Dz7L;+% S_nHr_`]>_ Ʉ i."8ܨwerذŘXup+-iY|揻18*GWN̜G!VՈ]h 28f3; lCմGZ.FJ+Th24]f2e%sL3)L B>.PɖOZg{&բ>R =]KWgउ`VX~3lMnw'Ț rK U0;,P8,M oaj݀E`PVw\:b^..WSjo@cu<4^CkEi5(T_}A˸A-H?887τ w9 4CD<氘wRju!a&ht|rNo^yGU:7VӄdpuKT2wx[2Ǻ:-{OqXZ^*nQk&Բ4UX)Nа 5t CЄ:^egB$Y~zR)1C~7혪Ԡ螛U|aٷ*O`qi}1O+sofKc̣sma&u:<N8F㴳OWl1%b$)I9l~TS5̘<t9'r3H`bЙE쉣>Bwbl>Ok⊔1oLO.*M4%,00y�s Gc!*W~\'eҨ7"ac.Mğ PՂFvtΨ+Lb;?I¬qtL\_a‹OX*D۞Rm]-blP{jmu;Kqb ڇHnv iCު-˱{p;pp]k τ(\,wԺB_ & 'ͫ/or|hhW 峺i$Lרh;Da"߭UTRCJ - (G>㊛?B^Ѣ/ &6˴{>,&hG,D>w0~ (~'&',GwK&'0x 51ΑTGϢo־´(]z<AG!?] YnE&OZ )5LY"ցOɒpڢ:ʛ?4bdB6s90i S6 cf9 Jig{ɋzLq*"y 0/:(ϭ|O/K?Ud ?p GM ;oυ2L15mb}խ;&Ƃ7j 3;YGbok cߍ"5憘#a <|U&5>́czUx iÿ%Sb*3Mc-Q�C2RXDF}Ӥjkh8WYr<J; q1hGx>nCš_YWi*GM] zqss"ixqV߬q}xc?dn d$FTQL.OЊ`ɅȪ]W2 | Fo~4 zo)z7\ZN|S[*R3u5> XTP=JG4W@j4coʃ&<5!^ Rsew v!(WI\tNέ;S^L��@�IDAT+uT_ѳTo]EZ}84@J& g&F;P#X8}͘)4et6=e 0. 3|vO'L1**u.fBߐb|maxhU:'|a2E* 9<Z4oݩGXKm6w)L %h ؽ\(7|?TQmʜ#W#tC|2SBj~6֍J+i;s\:x;];{R,Fs9ۉu!J1x &] 澈D؈ ~]Jc#)\;w.<@7._9Xbj8�`C&{љS< & Z_xt4oܠƆĚVœP$ώ&׃^V. ,ss0HhsdO0҃Y+'0~G\!a&Ŕ)7;nm]BkI.&yXF]|~pJ]pFH42K~p"efn"i&Z`F`�W&U�]f S)>Cn'T== ۅrDFHphQcQBʬa1î p%xU={Q5Diۻa= G`$<N'• J!֜3}�LA<v)jEs{ &31�# #}go4 S_0OЮx kSJrF >W QaWnkNR㳎?Ӷwa=NJc2NJWeFW1F @`bЀ-)G`F>Fއ#kZ)Kx6�#p#�'0+ꚏ�g|rG{*?#ܯ9ft=oHuisW5zpLu- ls0@2hPrF i3)*|T@jo'P5Fg*,|FSҙ$Ξ<>G΅` x7n`F`F`F`F`F`F P>X5"^�0�#0�#0�#0�#0�#0�# ?N0�#0�#0�#0�#0�#0�#H0+bF`F`F`F`F`F`C]ǩF`F`F`F`F`F` ft%\,#0�#0�#0�#0�#0�#0@`0+085#0�#0�#0�#0�#0�#0@"!DeF`F`F`F`F`F N*^zL!!)(CTnڹ"-}fsV,:CǏFS))Kn7buQ4{qڵ"IfOMɒ%3GկܹK{w^ӎӺ许Ξ3ROF<A׮ަl9m;6_k)G7ZhYv޽K 훾&/Ck䧌ZV@R w읎nV|JK%֊_oSWPݽ <8I^ڹ=x._%4>+ߓMl9.?B%:ѮB 5Y䔯j'4??]G&4K>XD'־K<ԧ*~6ըf-=v aj5? Bļ;_Z1{>Ё9菦6J>T 佅4T^*,Eb8`F`F`F`!pUWʠ%*;6_̓uܰ ez8 Ib7gpe o*TBҦ0s0긌<vPx8>K.z}5pԏfףzMqĈN !DmC.t}t~yY 0S\o^tusQ}nߌܶ~iw}(E9>˸s놼+x =ݾ}L=F|uiڊ^ӭ[wiʄC@YyP*Q6¾mo߼sڅW0 73 2<ChFG\pCW.߲3JLm! &lZEyTjGJs\qo\Z$ `F`F`F`BM&]̰/w"7Ce*dՋ;¦z"MwgooѯשMyɕ!cJbQX=oqzRU?BSCKu&We) LVzؓ!Й\^/IŴG-UKΘx2,evUk<8J-/joStr:^c{g fzfғ/ә\q=EB|O` w? F΢?zz?^>^xBdd]X#`e|2׍8CF`F`F`F` XO>p&;(sQ0G g_)AE4 qDZ/L b'=R1ʕ7A+ Fre7_' n\EdC Ӄ'W##OhO_3/AcO4{ѐyJR s$A;Z24f2g_-A3pW: [hLiJx`0aЬh#!_~Kk%0UMW{u_I[Y}659% _&uKahw{0Ε`F`F`F`B9 b U·K )jurPrXƎكTf3SL3E$ v^M~/@ voNi؃nI6hc)&"J3}n.h)Uo} B�:l c39u _`]a*g4Tl\3;~eXb8=;|U2tw Z mxB *5sHӍ0' ?(»N(:h]:~2.@,٣tvFJ!-[W{bbs$Xe)$Sv=fNl]"|SHWOd靫[VLq- e.޽CgveF_8MJT";SAW rq黁dS_{='W][/mݚU8wKgv^Q "MFJ\Q< Uc4\Bvo/QvN=ka+;B ReLK杢1! hO}vh>p`,'8ؤu>*Vg ,Ls"Xr3 Z?/ /B_^0nG% \+~;G1s*?{_EѵZz/*"* MP( E]AlH齗�!CHH4yf3{Bٙ-̳Jũmr!^ƥe>KO-*ڗ B '{E{ۄP5뺐K)mFEE'TI3ꓗwiڰF ]woő_Tm*>w3ʄ1&�`L 0&�`?xpr>`B|˪QҴh7[&tMaeYrIIlʮF'Ot1MoLO~oZ}|L5kf֢n'Ќ :WE{L\];DH7&L1I6(۳#Piٗs4o_Me݊٬lVe-ںJ5`ClC2"B4~`yAܭO>iDsSBE^IKoF7N''EZ?K:sktJg.Xnd(ڙ );GTjlyaotlfev_#!ao&+զ\w0+ϫwhC " ,)Oڝ(m}Z7シ:+X::ܢHk`}r!>9j; "Ԥ!|Ql@xŮk}«MiDxܢ s`_~pNUjZW_?c'/A&Py|AmcuOl p)=il=*{^ f[lkj=7kHS޶L;$Bf):_}/ Gr\%}Ѻvf߯؟Y;2ᕛC+-'{g{~5لuCrL 0&�`L 0&#Nt8dQ01|VlaɻWnxQɣ&-M9!n'a4uaF<žWq;&�m6WAjпBISS^\$ / Wj۬/ip.ӭ.ˮeQx 6 =m8ĄoǶ \ba%D.u ,dg$O++jZ/lXW3hQ ]WO $]Z@ ѬY&Rr&G}6O碑\ 'te2+!JL4O/.g^SUңܺW~h%vέmpbdiOϺQΔ ϫS_C4V/|m&c9(</*<yՏKBJjb2&KQDAN{rtvڟ3<+=^'E<lLOEKh\5:ӢB ha_ ]|룋POt@V>K^%xBSc\3}|%b-~6?NE8[xbB_Q<0^x* >޵r#//ݸ$;o@xQ݆\* |r CSG#ĸj//f `$+՗hόF<%])t뺬g|cⰃȅ5rmd<cb=dN*"/ j.q;s?w|yLM5{F�`L 0&�`L 0&=,te_[yb;BE^$ψA�3mozdgdN=6>y<FPU6Y;Kr{_,& tn˰}RV*�g Zc4B b(@T. Q3S >:<. e_qׁ,/.>-^1"V \еn T!Bݟ<0a N^[qq6Vͬ΀z6*epB#M@u?ek4R|< ]m'|(S.Z?O-6&Fߧw(V*4l'_(qt.tZ-̡Nu{s{<_u+JS,eK+/WgFT};Cd)4!bϫĒWe=$(B!ZlġA u[UBAn{g;Rf!rT ]>BxYژ-Sܩ]!+ 7E(vu7! /&qG^!l^mi;ghQl@[sB/"B\3DEE`W]L~UL b)%.Oym!-_xe?t36M V QU\Sqff l^4kb~atZ0\a ׋[Ӏ}/<v>ڸJk|_w;ei..4T*s(f%ܼL}6`L 0&�`L 0&2CʡSWGu\Px{VRjqRP9ӤNjx9T0|IPT2„oE~LR"QCQ`<WM( c gi`g0TCLc?x_mjVݢEX6L"aBASXtMV׃qs͟ώ\#^Oyc rP+RB>ZSb\ u%Tn_|4 ^&q,CپT6q7/\(.mG/˩j<hri.0MWX1@ފ^ϫۯ~oE#}yVr]RյmBfyl@v۬{G w>񕪢yW/܆CA]jia�+zjxW|Z->Wv>hThikʛi ]&i9 FS=D)(T 0|&*CHO*-/*q ޹N%Tm3<?L`hB5 *Iy5beUw$;8he>rrăxc4 ]{c!QI|^3zx̩ >'s-#&>njn~ޣ|u_~N-<FbT6;=Tr{&�`L 0&�`L$Bxb]YS!XZ>'ÿP 0H\o= Z.i "rw|- /ԅ2 Fy!TwogVDDh#716w+bdϷhjPZ4W{$v<5oJuP1Sh&XAh15щHxe@J#h>x1cizz&D8?_ :n 9.ݳZxBM3vrɾx+ ڈIyӽq\9Ugp ڄh-%\Q+Z^09D}rAzj'=Bu߸T#ì{RIq,}%?b s>JSwVC}K/S}2BqeTd sc X]*pj;˛)}*Ws2k,P"q7Λ}XTN^v?Cx8j !o%HK}fD5)t! tQ=f<.1VeEYyfZSR["{;8z&.>EG;,EQkD8d0&�`L 0&�`s=ub7p}k9c8Bאܸj"sb2:W3'h4,N2"̔2b;%E8ͲndQkδR zMeWMWCR<˺/l{:('m}}Ch8IoL019F DYQ[QG8F&:{\uULDBOi`�If[lK*5,{]kɥ\߷F#ŲcQCIk^^aCaaz?!\݄�&aoژ\MгPmGM|X>{/\b&`H0O&<t$Uej]-+1<NP^j z38Z"$CB2 ^ӕ+j.h>˻;YPK7>4Z_g k: C~]VK_䉄 qҔhYn' D,aBq3&�`L 0&�`yK[>rxe+YZmiKxDeZ3^cdxZDcѼu^R&</ [O 73>BGe3*2騼 P(Z=Lc} rB5QPHYr B\ǭUR|Răr۟SJj8#xod#U/2QB[][rab͓*V %!}iAA X L,sev8E5o6g{vtv w:Sys 7Bżz?$CP!dÃ'HAн-?B"DBwʽs62'L[zרTrܥ0}M)cЈ寭ҫ~2 Y)_}*<A[ b}, gַ רZ=|kqMGю mC mY �/Y72G<\^xie)],My5[/!eypG:Q 8vթXo<e^�`L 0&�`L &ťS?œ!멝ȶut>u2b  B1͞8f*?U#e pHFö&U?9&<GEJUL&�gf<v9Zga>yͥ%*|x|1̽@ (C^e yӐCʐ+T[w3&?)}�7<֋H.enT8D~gcɣi)t]?Ax*6퐭a9W0`O\dUY^c?!*O. LGXϭ kшjü 8, }Zx#k_#}Bʽw2i $t3Ip@ "Ww#QޚX4,4c=R!ܫ"{L"E4Lefc@kdq޻+Ѕ"҅WdB=Xe M*յA_+�_pqty%: )ͩ5a F4R5,Qx�`L 0&�`L 0L$<:o5Z-rv4mUV=R_C/XQkIb\MBR9C*Q_ lxfsUw<(YhܞҦU;71A{FTp@SNESArw]6CP;/Jy 'oKYNc^G/^EK JvttY E}߾B%JR 7s/C-Y|EsX4^ݽ"KBBFe+_*?iYv %Rݗ[;d+L*BU\Z\{\Mq!d߬{]I"ZF‹‘Ge܊wn 8cn/u5rs`Gz9! B:ỳMr4Fsg=ۂmSƹI< $`lU!paU"fnO^ߛ 5%E a1s2&�`L 0&�`@9=*LM X6!'EBS9lQؿ+N%w}*feҿ9)b$PdD ~aOo7*X.ۿpT%rьZLW&lW1~xs}8:dt5Ј(o|i w~|5MREriHlTp4 6Ŀ>ԄƁ_;E.pHDx _y=bYqGyبrYu/)j9V"UVZdIWhʢCӡAMZT0+G~{{[u3[ZߍoWR^=#[ or2,'q!nupOP"mlֳryljӽWʺ .MpWǏ!e_gԾX6.#&g,BΛ=�wlΌSw?Uݜ8k'H.M!?Q$+AC(^ \=<n:RyXQQ;ܔQBCfd B.xo=^G* ZSE�:L 0&�`L 0&@ GWL^A+qX0`䂨x#恾D )od͊)XM=ڬ>c/3ϭ>bR&' =@_=S YjuO/ȐW!/¯=5Kή 5I%VPet1gԷWdlާUL"+b"cXɑ.$!wWæC)!Oq\ߣVakHȥ&1q}ӺVR!$a* d(CZ~tf򨕚u:Y}u ;5=_L2k nNNT_ a<+=s(JS/˱T9*T؎jlz]uJޓuKʏօ߼|?Yl/z{1jWwuxe<{/ON*AOlN:;g9>ʔ"%<} W Qo.>oݓ0c]]^<Q/$Z}Ј-׺z]FB'l|gs߸E zfyMR=J* k~<@b˛y>^2to|gzG\?dm'!ˊp/A7<OUE""`L 0&�`L 0&r@r $;-WA;/>&�`L 0&�`L 0& %gcL 0%Gms+�`L 0&�`L 0&�`L 0&GX#|&�`L 0&�`L 0&�`L 0%BWޘ�`L 0&�`L 0&�`L 0&� ]y�`L 0&�`L 0&�`L 0&lwnoYIy@8J.GSx=HPAT֭أ �9tt$ߥEÝ6,Y�ΐO 0&r@Dx<Dߢ|_~gx̕u)S~�`L 0&CI Ɏ ǃfL !B ġl}fE*0$�`L 0&�`L 0&@.y\2& �`y�\L>&�`L 0&�`L 0&�`L <Xz:3`L 0&�`L 0&�`L 0& � ES`L 0&�`L 0&�`L 0&HG93&�`L 0&�`L 0&�`L�`�\D>&�`L 0&�`L 0&�`L <Xz:3`L 0&�`L 0&�`L 0& � ES`L 0&�`L 0&�`L 0&HG93&�`L 0&�`L 0&�`L�(R�΁O!p?>%'&m…pQk͠�$~JJoVQ"~2L 0&I 9!'a;7d9`L 0&�`L@#B 9J ?~m>_9$*VX{^FsF/}XoBw¨[Kj>/}P|L$u7Uk/ ~NrBpe*⨽v"&<'*qvIu5ԣVxO/rv)lx ׍-xrX }sZ< Mƻ 3Qkw5nޣB QeҚ@\xr=%x\އN(.@-=gĉcޞ<<*RNX`` }ܱiv|mZO<y"My7ÑV^C#I&tr)n"%*{qyz*׸< 2,dr%fZNiM?nVL 0&�`L 0&5,te[nub8~{𔲣>Kg\(&D|rVG{Mш&TZe%;7(R/?@JKb4{]rRBŊkq5B D.șɢd1ӑ4xDUd\ꕋwhۧ<v6уA8 +ggfΩr5'j۩;F,]t'z@xyODI(KެY`7:y}yZ~Wbcqk! {{w GoNN>>!̖e˖矣…SLHHp399FT!ED딫 E~%)t]Zu-=M+Rim _acd-OC&:|܅JU/m*,̝i 8|ģ)`L 0&�`L rdA&6,/?'O)BW"TK<H8=~(Ai ]^#^s5ϮO*(6<H{#0ڽ5?Jsdoݣu˵3+t98Q=Rrtvos<[uzro8{|E=Їtt>wIh|}5<n݊SNIew B {:+V֭+ϯH !/ldM}zTi $B / ]eoXlm,/Ti^ѭ=nesW&o/c?Y �`L 0&�`L kx#kܸU*Ff}|ϓ$5yoSEArуtSOwZO,>ݷ͚5S!66FMG>ƌE my%sF6N#}oәEda K3EXO\ 0&�`L 0&� ]yM<OKArXx+%``}~;|uJad,ͽ!ѶD-\ pcىUlm1M =B-*:, a"ٸy(2KTNNGQ=T8o.DԎnӥsQs!J*B5j;S:cdD<F'DP Ԯsy9qQ{Tѳհii*G5ɣrq KvЅbۉHn{`W.F1تܗ?PgOֻ15P$9Yx?9ǃ18NDRDx<mBm\&1t`899a6 ׯG_*j_6I~Wu;W=ex-:'BS"R}q%h!^\h9g{jqn}<t3N3СaTQI"ܥ-ܤؘ$TEuSk{Xծ_6,)Çb,x/ "(:&n]V2H~V~xρsɢ^8PPSƥtY{C&&ާs�ip}+^<2C(\{ ٱE ѓ*Ѥ˻4mXy#W3OQȱ?c/^8=?9)tWP…X53/FiCӹs穢ݬUAgϞy>0fKg}"6mڄ7NB/9s.^!YRڵm{իHժU'hGW} ,!bŴކ7E:Օ֩C͚5%[tYNII3Ixᘕ+{R V!ux"8pM4:z8>uܨm6TJv ڥQnB oZY~bTcUP-ܠ-mu+DEs]FFSwnd˫+>:^D_07ܠ{o +Dn C݌O_jJW&{gМ\ظ`L 0&�`L H}8Ǒ3KN 29z.- "W7Yοu'yOliVv6~kЬ SnM#FjU!\,ø̸?۪^V p!̡ʡbN맷vJG*g.Xnd(ڙ"7(;GTFC2B_:JWݰ:{P]1oiҧ6%h];X ۓYv!1a夳 si^Ljo%$sdol6pE;6nfz}3VueVhDXTmfqV?*Y|R yuN8ġ[2̡U4_/nMO}T!,9ŢH(.X=9Ӭ勮+aJ4_ov(v6+vu?:{ =m\}ޚh}VUQ9վ,m=ޝ(!׺z=W-NCzoJvPU7۟46+SIBp) H.M9i=tA'h˖m@h! :1{ i֞i>RtDSZA~>MVٱC*^m_^/s4E4%' 8'}||A~r*Y/]D#F S(4oX'\4|:ɬ ///!7BBB7{r}ܸ鵩S羹jf=6obɉV1hs|H;v2ر/Ќʌ׬)S^3ͽi?m2u)~rQTKHH&|4s,D"nԩc/rNzc D"<trq8&- ]|}Г֘ B ^!kkBpۊN!~7[llLuե+;Bu/R o B/e%`L 0&�`L `+_&F'~:&s[tv׼<zR:]ol2CxAY<ھy cY7JO0E o2[ܡ޵Jحdq%X J<ä@qdRDڡ+œũZY<y& oYxwZ?.r6\<jҕwJ6Yi_ -dq>\*ZLl&{4ߪ{ [C Dܺg)~.^~*?}_֛58.&M š x叟J/ͷЁOQjN?w+/E!29<uH ^O</m牲bŬ/˖b}GڄѴtUT~ /(Ks^)�T˖U̶pPj<>jH!b�)Lz\݊ Ƙ \uQB˷>D ԽoE,^'u?[zg y -AhU}j's-6f7ikڄ9`e \E["ݍKb +{j0_\Exc㩣}h_^EakA`$+՗>ՁY>yJfSZuYϘ'q%u}xD}��@�IDATBL긹,dg̰+f Q r~jr j(Z*hjkkMrWT:)y; FF+_M4AE܊K0Z3R�3nTܩ8-[.rY5b?\O>ًZnEgNe-OGjdo1<=+IOEЏ?.".cw~xC|B^Hms-)jаjӦد:f?Y N; /wq&[-%> Yc^'s_Cц K1Kx2ExU /`Q{fggzNXX q;i]YvYGL5o81Ul]I]z/63V!ک͈߰߆Y bݰkvYKɥI08sŽJDֵ:[%)! ~>ɩ<\v?Wrb`L 0&�`LA`AσFܑ G>$$uHv ͨNzzؓ +^b OL\.\OQV}UJGj9JGMjjk<GV$eWU6hsfӺo'i뤍 6,fvm'|77!.JGa>'^[@zm~VMj;+g^�Ʋw!,: bm.RR' "\ CoAx1jB>'9a|ڃX]~QώNuJjrAyj'}sKr*ahЅpqkF!ÝƾZ[ȲmI?&.0JOʫs3+OЂp!p2 -5{0_q"tA G$sBAq>#gL!4ƒ6||Mh934q51,<T{Ӄf4`/l)Z+jFF18W=N]kFbYY!~Yye~*06M 4A/e;ܷNl/!AMЋ& h8^J}6ZIA\Onf:gӷs/rsh_j)'xX–rlc|CMǃDΡ!Lx}|T*Ȗ4d`e_S*˯_OWu/uUʶ=҅"e�ӗ_}#[ >}GP))1n@6nX'E.Uog 21塶rr"Q֭d>UO?WRpPpB׊t~%L%GBeNf;uJ{JD ~0zH*]^SF5W 9wYˬ}9qmU:)::DHeeW+wgdQkVHltU\Ex̓{*- )fTY%+k6Cim&~å|5a6^ϕl 2&�`L 0&8l  '`Bw:(]\M _J.'[<׈J,}Ocݾ饋\j-BB8‹LyWgRYc c^pbĻqVL%MTi.KU)3p�O+KgEj6vjm]BOh908@xp.[}KQ)^[OE 0"Avm%$$\Y_X2zeQ)6a~LM#ؐs BH2jo:x>AA4U6Y0^�WHL v>h !h #Bn\y3M ք7뢙n(77ZՄ;˘W V!ڲ"DP'äi 5h0^'ISダgiVxa=ۂ#'2 9aI~䶄.ғSuRF4Ө0&nS f˫шƄJ,lY39AճkC*?Ń\(@aÞO?VL;~\^3ڬ=D[BJޚ9LB}w}_ /-Oρz ~Z(!jҺvbBXư躐QzExyo*i(,C » m0 W̕ȅ}-[ x!aHȕ=s!e[~}yc[F6"GR\9߰ ?t 狇Zuqy]¾~6&�`L 0&H?q<f+H½d^#h?$d*!9ys+<0&+rL_om! *<2kuX m(B(�~ChUx^xܸCi K[m䎔?*j=nu\UgIS ;Vm./BחsѼglֱUx"5RnI X\2 bqR9%}[5x}?@ebت(b=L ;8jT˨v`'IxB޼Jwedfg±}e: �gc!"rgFTBן?9t5eU[X`8'F Bu)ÖR[G.Jmwcu+:0/;#C! x >KcQ"4LY线?}?hQk6R%cY)׮ɵf֟gkaYmlY`@lb' &>"oUrN]ATݺvUŹޭ͞<ޠgРiTV-*V,羧un<V, j? 0KCE˄PF9|s+~4PhNu$u{fkՔaL}ؗC)Ĉd4ou:woa?rBѲblL 0&�`L 0� ]x)Qx�!Ċp//-e!ժeFl6baTlPSzv]LZ+S4j;#Re쭪sЄDcˮ!Er]y`2׏ee p=KKSժ彻tZ+4zƩP lgC8Ce/6&IUZzV5,Rab.%\Ѣj )P9 {hӕ+jCyywG,rFM% !G9rl6'A_:"1W)l#<)lЪr(Mk,n[ȫdɉCJ4i߾2ߒ%Kivʊ>5kOI3 )cV;ʕ+g՝wѣͲ{ǧ=g̩~!_{mϜ9Kx-i<T._.lhuMKJKJ6sN[Tg9gB mJ-u䩙oؘJ'�`L 0&@%`>V`O9u]i؞Q2O|a[@BBt~ZEn&N6~b2I1li(>4qg^҃FYf+RP-=VW|͈F\zK: KRєZȩ$aZ=Ҫ}o 73^pUs*y'Ϭo0BÅeVR4*}wem,ڮlkJy}W  nU/wW}, YN-BTn:ҍvlmi�n y:?Tmpl�G%O7*rbXhˌڿ|G Di"!ڐ[H`'6REi.eqf|9ͺi,Z{h:gj521Ѷ D7K+V$fs$ދ3=q˄Џmu!ڵ_ᅰ7n֮Lw6*Q*>@zr'ӪIfΩW=ɣM%BX8c9u.q6‹^SPK>rZ%<1REd~}:CͩϕL0&�`L 0&\;xeE:'=a +_TTܭx %7;V3}0ICX<M\8(G' Ӟh7B˰~2geMvʆaȏ:am׼0VhD@x2"gt]yeXOv  QRZ:EhKZrb_.R8 ω?"쭹u !ƒ z;u1 \5f2dg{e׭.s*z-]x 2DY*C~WŽ,ƫyaZgE"owNF'7iJwGO<fR(.<`AAi{1\Zjk(0H 7Vݧ<BBB*<-n؀@cC2 .vZǭ\YL7έ%< 0_ו+WVp*[yUcsr,H[tsϑowU€p#G[O*T\pPjkKTǜrwR\]>`VNqy?`L 0&�`L ?@=2=A`8 /$r0Y}*&PmUSKRֱZ\Qt%'Jlۗg X߸Gxv?~J6 Wxu +SLFZbr.S;{'7,ʐhJh:ux{mrÔح'rt_Sro>zN*RX _V=pWߠ'&pn#- yT_"~x&ٺkDΜ2%H#2'_K/ea1Yݦ}93͝ul-tyJ87A Vtm_H&/$c8?1Y9iPV*TWRZj fCY~vv6TѮ7rg8qRRݸq.\6eɒ% pu:^ٰp%ԶcJ>U ]8cDz-tUZU^|dggzҥK\Q3w>3tNBxS:& !\ԟ}svUeN2MWL)ܮ3'-!N<ťhgRmH{CI.LZ6΍c6`L 0&�`L 0,:Ǖm[W{ө.Xli{'8 E-ѶοtvmꔪQZ>-ۦlC zyQP8yD+!CӡoMzUR4Kh!0 ,$һLԾ,&0a{PVr?dgtLf wzY=)Z8Wp0XPS7K&&r/=LeRCR34kcq7քgx0&wK͛}F8Nfd+ O5' w^;ANGuPem4Z baUeg%Bh*׍ju5alcq k cu\ e|FݎS cUԜF~QN7a+AZ?OɯF2:ƌ%!4!^RRZz հaCjذ<'ΣX݇~dsl( d4x:t^}u*EFߛ6UVݼyJ6 ~1<y]1UVS\o[5oako|(+T@=JN}QkoGخFfK03VJ)Y̱>ߎp2ܴ\#-\1"ꂊL~+.=:"BC*S%`L 0&�`La$PHLf3x�cNӞ5.) qrr=Xxv9!GՃOݪr7QfTHCUL "}xU=^EEOyX<:t6qW+C'"“*h>00 _'x~0UKQx7D| c/Ng>tErީ$9412k n.8'X9yЭ ◲.RϨ<]ad=mɽRqjش<OåbWGA\qǩlԠ{o"[ҐQd1tk.ӮB{0 D +}9n!؋&NN^j8[#hX7xu|^gԣCL,`mHȧ<p(C ^3vwRevi@ABO*Y^ߥͷL(*UuРtD 6w?8΍7KF]̚|~Շzȗkʲyٿ+tܩMrT=!&;بdx=Rʊo2g~˷>[^R,~UdwUJzR=z6&@|t+f+pV,>ji"1v& x0kڪ 9~[n( +oLv BSU CU6yzaM|Om(B0%[Žݧ6]yss߈><l۲1{ڪVt.=BҪg[2TeqsN=[7}F ))E)9ײzW?ZĴ (x^A8 J _xQrq1y3UFk^cjҤ1={N?Bio юdB-֮]K Ov<ʕ3}'c;d;KG'O%ԪUK(8`ʣ =ݷViΜ觅?֭[IfDŽ`u'i/{Vky}adޮ:u5qquTN}VzyZV䓏i8xDmJD.eZBW6^ye,鯊3uTCUDewD;HH̽U%Yʰ<Q4~^Tzi** A#[UEW'~ú5,Gn%ӷtJ ỳx]��`L ((p1 0&c/О<ʧxu_H"~#2Gr|,=6qcُzײܸ&jw4S+#"ǘ]|J S퐣@Sy'z5s;|B8.x!GDN*xcYZ|L$ a *DW|IqC :~3Y<|W,)R~Y8->x(Gx;e!VFeơU}Dʐ5hC2/'!>^#Ry= d ATX%)L 6D[9n {e1u+F+)r+@I<E|Cq\$R^_6O"*G@evvڵMCIUv—:tw}j=cMMu/7,f#E ٬uYZ-5X+UrCc󞰼_p7<AzJZׯV2,PX v8uJC{*r¡}66M,cpoo9֝fO=.+ _/QWBcq;c,[^[?lO8^]~;;? pT^ ~ڷ,=jF_?%ĝޥU_BDA(zWO2d00H6CYvC?IHJP/0"nGB 7?Ғ?ܹ0) V吏$gg}|t2RLSw*͛7m򃐤$KW#5j)!rMY6zy*A\_X2~+a󬜓E67!Dǃȅʭ^f /*:!:H7z�+!"q7nam]<$~?:q#_C VVUa!-0N0+ԭܡ*ty2mzik'/Yj5 Fz�`L 0&�xGW2?Ih Dk¤ 9#\B 9J ۑ*d,7;E.-er=I�X*'< MISvC| +=q wEtrvʏcC?Bpk >卖@Q_hޕŝl$=6Z+1.a98% o[ѢTmt{+4jv6 Dbb{ϞhQRH9rY+ֵk~2 wpG!ßw(A2 :uӳ2.K~f!Qtt4*U*Vm� nݺ%Υ/_>C R/>ϯkMCS#WH>t]9r3#O 0&=�x`G ]Yh܄ 0&@6@ܲMmjn8U!�;;k/3gџ.N;… -x d@Hd'!=#fL 0& +(Wσ 0&Е;wxG&�`L%pxȝ%<א9f{+ȕWpz}5N aF)rP/Ox)=\<KoI E(�`L 0&� _dfhq]&�`L@~N[W)[or.xtm޼E,{.rLy7kfYL {Db[3&�`L 0&U0 W]�0&�"{ɴwg0N7R̝ǯNÒOLו ~~~o~pQ ''Yoծ]F .bL 0&�`Cr+�(TBp5 6 и `L 0&�`L 0&�$$0�x(~.:*`L 0&�`L 0&�`L 0&  saL 0&�`L 0&�`L 0&#DGtsT9ڀEL 0&�`L 0&�`L x.)`Lr~U/4`L 0&�`L 0&�`L 0& * bL 0&�`L 0&�`L 0&@'BW|zL 0&�`L 0&�`L 0&�(X*Wϋ 0&�`L 0&�`L 0&�`� ]1&�`L 0&�`L 0&�`L(RPOϋ 0&�`@rR%%' pdWA &�`L 0&�`L C=Ļ5g@*|@>~ JGWbL\%:|%Fde-]cWD2rD/ʙaԳlujtlWp?W>ABb; +Qt=FCxe}]] tx]<vR=_?& \,ON\ew5:uxG-e~=ezux_Y;zM]ںv#sιu^FDv\̱Cu4޴4ǝ͝-Ǿ~j.Ֆ\SXH<}'WU:Żoft"~etL ݡݾq?]#8 24Sxh05>@~/Cm`L 0& 4_=m09eY@OiOJ w}M6+*L6MONU#Seq~+^vɉɲ Rd`%9龬u0Afy^E ,GjHUJb{"I\G@bB2>#MfHOy c6bi˟/.輟ZfXsGrX7ڸjq l=DN%\dQyJZS#~/NJL4}WǓ?k+޺jm@HWA >ͱ\/\N/ D%GEw]RvM=|^Rih팹EGL ǁ%6NLpI7N2qQ@8 <Q[{fxψ| W \ݼGjNH^ڶ~ ݎ0م,spH�`L ' Е4I}q*Z][E 9>'{ސ̤:RŊQ% ۱tn\ƕ?\Q\tCp~lP>Rm;<ׯҾS+-<5Ox\JqpQ$tЕ;tP֬Ce]* {b88W1Wat^d)ɼrZyq8>"s9\\QcR[\P [(;B Ie\]^H!nm\7,9(A5kף mAlL 0&r�%Wr@1WO֯ `@LG~G\虻TV#E.Ehȫuiu.U'?,kkDG~ #� y"#4ߝ1ܶ2nr.kn xP|<(]FxrxP> }<n# / j\o_toӼ w2*SB`L 0$BWn}X=9/o6ҨAq&!SiCtC ,T BoS*dcwrSb (b( #R]cUlLwoDR`s)Eϵ}u*榅鱬s:וKvDi�JFOm+XYO*Ս _os2}(/J+FՄ7JVTp?DCnvݼz*VsV]+P6ѢCE T3yv J]ԏqj(![ƥsQqBQQԺ{Ew#0t\ `yeʑTx*ics(Dh³.E-]vp/..^IwnS.Tϻ,uwLm½$:=Eӝ T=W-A^I.6;|ݦ(*X<KniKo&C g:-�q4~<5hU|NEѝA,{W~!|N&?rRWq׹jԯ\ڞ7(Ewc=xX+G=M\#oߦp7Y/.#颸noc=sZ{WdX<Ut$:.Ta)*.[{.jW&GDxtd<=NWNG2ҨouLDޥcPnx?ϥ`YCEvc фuyGQ|qQB!JB ^X(*]T_ D{o!ZBI(\fW. x/~=iˊ(1qK &[٥oD^i)||d<o:_aLK9B;m"xyxxR*1TV]*t$9 +ښ:9ĺÇ(aWOM_ۤ9)[.1ح}:IS> ز&SZ P_.Q#??]Mul߸VP;u7 p=c\5MO=J׭T_`=]sfz߆۲x/^Q]A|S'hOv|&#X|�eff{?F[־rsI=rHPkv0rrLAϔ:%oZGǏqܱ_Xa8v?>ZFoϕi|\:WV=^7gL]/'>nw7RHX_;5sGs4MGp Q7mit TdI@*ff7ߴz9_+ePŨjWN9{m2EW+o sfeM\jRD(._u]Ho!@QH v\MHP8l3:tHsIvKB6jήh#eml}"+Vr)HN:Ua.޾ٿoҏIw!g +Uqz9}ZKa|40>cU't<^EՌڶa>+FR:s=gqM8Na|qn\ڲn$(8joʹg\~;ıc|-ES՚ra{>[|1{짌'=,4jЄJ#n#^2A!T~\.}s?~Jzy<~q4 M^OsW=gќ2Rt6$|%}Lp*U MI(GMʓo炔S T 0a=oќYjBBaUN=ѵo~~9ω-cJI\|?<򳕘B@Eڲl?!p):V:0;QQݳ.ޙO{Xaն2BDrd<A[F) a!rHswdxZwdd@nG6&ٕABIPsgҞ1h{'ݩ vh!*^*Aٜ!cn"aH5,H|4tBlK_/b' ߢ?ZʱP6Ji Z!s1_eU*SƗ"k[Icvxl! 6oOlE?*nfVi,#WҦGwoߑcΰsC:s[II,"ڰϛP &}Ǯ^.ϴg/˓7mW)_fwM<J?rF=xI!kRqlEZwon!W?xj4abWQ۩3S)n} ~neF9O) q'uVc:9g0DYFG,cBgm:ѐ$FMkg۹1d鸟7w?|Z%2| 6 ]@_{>=0&6w"?c{̘NygߐH[AQe )ڪCƙW3Ϣ7$: Eeq|4Q7'̛1~rSyͣ_jzm^v ^XtCC pVi慧_Ӝd/3~#{^{bNϼD%Mf ^<O')Vi8;~ޱ{~e3o֝T'm[aí9"|lϾB.8v>_kͅpMs%y!CAq_~l9 (Ƽ36\jnއ螇4{: xo%F0=Zl{ :L/M;FpUyBx{aP_~*G{5[8v` ܾ:Fvʨٴj\7[}L?6/i,Y~;m{�سVdǼ a}lڶ=ls|`NR s[8/ݧԼTę7zrO_Om<~U\XWX,w9&C&wպ_˷cו瞮̝'Q=ÂS_ׅ#>6]n1'y$s<&]k'vAL{us+4M}F-DIk;mxdQq_O*W3J^]/[@vT{IuRBVl~5Ekmܦ.fXX4gu5?誒l�~ xLjT\zb9G{m͞>JV5D^ў^+VR/Ry3YcZ%ʂB@$pc~ X5Җ6P"?�Dp{^i<oN8F=O7NJ[jJ-ɴG~sJeoW"<ꄨ,|m]>wќݘ4/Jfy{9c hUYկ˝>pțaUŅ)zje9AhHtz>yPܯʞ;|bG̵K)!вZ][?.%Ǔ#C'-z>>KcYGEC4~ Z='IykOvӣYW C,)#N<z-ow7c7nROĞ)'˵,ExݏnUKZ?<>xEe3iƏ{r]-H_A+ߚIJ(ÞO Z͈JB=SE,J?zVyAg >Z@z_$U]Rt>z]34N?<\[QP%x < w ][M<y^:o zk#URN* ofaO[T?VD:[`~֠u a-52x|!ӰH`VLث pauWަ/j'S/sٞ U ڀ2*ּ y0 U=ا&C)(ܛ๵ei}zm87[כY9XaLFH;D2"=_t)cI/kvy09֛= O"Nxfx`8셁K ;wW OYu=;6 jYPE~n3 լg}?w{Z6o*P\XO3* GBh#Yۮ=h9o0^Qfm $.z(]|G{ˎT>GM8Tjѡ+Jo{s/7Z< (vǪʀ0ʜ‰ci܀Z8=˞^<~L1W¨!ǞQϝ߾\ͣtٲFz`'Ӝ鿫uPZ0 caMVH͝e'|b:-uCi,.X%TΗ?eگ?"xZijبOyzizުs>gLgM:! :KQUk'hUjakX܌Wx}߬Շ#TePu-7N|u΁œv"Χ}F|~ר1ܦV]tyax۽={qq㷩M-s_:Ka/Nkpu!x, ��@�IDATP]h;?# B(=۷*MsG#Ͽ~MDzGQ ?{vA睭F\ ޽0nuܱﷲHZi;㺂aJ×Q?L1^Pl^!Tuex^|I˹kh؃=]-Kk-P ri |_F#Dzs e뢼Ҧu+ԵyeOg\O7vE 9ݩב9{߶,<|fyƮtc /v^B 9~ e7>:όSD</WdL7Uꃆz {h7>C ^geYGu˳;-K<؁׫w% l>M]JK ,=\WPp Le#j]tco)|k) \_GעסΟ;ިcjU(OspxŊ*l!V0E0!B@!  ]E 1[t-Sp`jKT+lL53IƽP/ZM~ZE2j=B 鄇c.PԎPm:px@ԥ ȅfM*9y Tygĸ+ ]I( 꼻JUSeC:?F3KgJN:GӀV ?e)R~.]''}#{Ziz}0'~&*XchX6>쩏dI6!B#О i^E.b75Q `ao0?ZүC1faUoR+v_q2cJ_b] 5%?Sk=IXCs'/^`%!E*s5QJ^@(ǒY:Y,"`ɢԊ8|3}jRAՈZp@_p}{k!tE!r}X#Zurweubqּ"F`=xY=Icն,A@4baՖĽ8:w VLү2|ާ~P\%˸5m X]NԠ{-V9%Ђ.7g%,w n;8'u=J{];ESSJ[y@ݧwE~>9Y"rWe䰀M":[567ƌ5==Ug)O*YWѲzN S%eE.G=O+΁iPj,Y@Q aѴו3]o?ҏb7OUxVh=Pc$0fu36'U ѣ~l>@Ocա_-L~NGwd[-m|M6y QzAJ|XcfkV"wOˎ6<Axm8pj /ox4=^fq T[ӷ_)żn"f( qe?=ڹе`Ɵ1[y@x8?A7jИ=2kD е8uJ}W»my�#N2BuzyJmYg6w8<i6W=aQ>{e^%iqHöV^[8~,f&VMkWPzIn'ra94+D8g.uz?u>?NЈU qN|g?wd% `5q,=<X{woh g{~?U[!ކ8G`yk8͟96}6o3W{9>}P b2~O+1ּ^yp)jN2]o2(/0P? ay˴ZTMK7MDm#iE/wm"W"-W ZK}} Rϖrm*So-/uU_lKX( i)y*9ZTXEDsJwQmĔ8u+NK/WOYsXᾆ=y^2J;?s(!o~ZNA_py#IRrۜpb a׬TVT~1! W'V` qԼzЎ+ PQS~s*Nh0y[{$ Ff8ZP2qgQb xH]]8%; =-?$B<ԂA@s&l\)K'MY6 S8 bI{d<fx=E,Uɼ>!Lc;1[cKr贚N\ȇi/9ўS+<̣EpchFGB( y!r鼷>f!%Gڊs )s4`2 |gz9@`4[XЄqa<&<` [ Yn`<͆t>nC\&-=aOZڇyg10W۲' Yh{ˀHGEثŽT#ܱ k*J6axdQ>sJV4aȅe\=8OjI|_{kt߫]} Go�GϬ2GeIKeݱqFp9̶tCN{#rWgWܯƎAFG(iɋ3WUf]0FPfm2:7ȅ)g86yh^:+TN漏{J:xq6Ɨ|~/nX[2D.,ãu PwMwa r،Q?txX#l86C؎ 82t|k1q[ Yߺsk^Zf7 R_MZwpk (s/\muмx}猭\<WeV87b#{R9<^IqҏqT4-`Bܓa< w㟁Mm:Z\*3A"Ϗ0ʸP<#5,1Q|wQw|-':`375548{w%c?!raY^pIMcy8a#k}{Q̏J[^&U nWeMO*O"[u6I;7"co@]%,r!cct:2oUq=AQbVX@~ּ2iZяQNV"yw3!0?5BەC30oM[5O4g(Usʙ2ySLp_>LN;Α%s0s%CxV\͞ԬUuR1dBJB@!  @ސTudħҚ~.o]`9|&*8ٶJPtl!^̜e1m;?XD~XNĦix.mBp15 ,71-,U06̜Oa)lGܪUL UZA.ŔB\Ty2<:TevLOI{ORt%_aL3Y�o۲"^mվ}3jVrȁЍfUkbP|x`.s>y*(< ~r%jHQ01qXCIW2 DLR6c4ggZ Z ,aI;qAO;|ƨgەנ5ێr2 sJdt^v(i3 ]cy/=AG8BR-?i#檕.K?J`<1[9m-/ǩEpxu`l:FB4^0xֺugFnT}R |*g[QS-)u>:8i3O;ԧGɷ3riQ'TUyekBh7xcP5y�{#;yx$36ZƢJ_]Uv.nJRYZhjFhUډvʶwϑăt<=auS1/VVpabjgoAy5+G_lLY˵j-0v0xlXjNvy>5 Akli) o/j^9/k?sQԺ]Lhں ۃwcBJVb%uaX40%ώ&'!*Tq.x0a^%}j1̣ZA2Kh{MNt~}eaO!ހscQ:ߦ\OUqvl-Fۤ|YY]=Uk5RP 5z77ss 6P7,^؀0ʿ#,bG_PWьi'Aa oK[sm=&oQzɧ{L=eWRu!2v[~wM[kg#swwCPag2ʡ/##>Mm/̾mp v˫Öt=LHGU}RX x[SƝLq~9S^rBJE3mj֦=PYӳxc4Q]#Y0׹GB@!  ]AyEHh'TK-z3,Pi]dcnUЈo}!LAm8œ¨\;\2d̥Є;=ݳtRW7)1Њq(l 2xxZP7ׁsl߼~cړK/;c4f<$WsY9o- ZLmYXL؞{sP4u*,Xq|W}uQ2{Y<=4V>i_=>99#}͋:WY)u4z{1E8qrmxڈ^:rPI|Ś۔H{FUPb%x|o$MeSBNJ5Jt#L9K^oi5={\&4s/`k~1 c۾qn^\MoJڹmJ[y15:ZP6W 5-lStWZP0;Ghbf/6>Nc^eKs_XAՖ;NM/?oJ$+Sa1rAvZd &yC^tZk+W"%{y&| Pp0\?0u'n%XږǸ` #y'˥s%YS'N+V̲�!O=dxtiϟYFp7G ;so}%?ڥ(m.i>JYJYBH+;;OI-"!ړ۽3k |Cc>5Val٫V\GxؼN]3ٳX&*柳.KG/UIQ72;tX+HXϽvr{K:MO3m:TQk%MU_!Ѕ{T5)ڭr%JLYk<X0}ãrS!Z<2B;cu8`OY~ߡgMWնփ=E_ɇ9K5H !  ACꍱx_ ,o[Tx ojU߈nIj /ų<.gZw&ijۇ(} ēzJ! Z!\SG oOc% )fе}K ܑ =j f0Ns%dΜ?.TsŬJ\Sd 65x~Uaj7 inubq<ס 3˫CM\M:Okذ6/OQ5\fW߶cEd ^"y6Eeosy,X9vj/X?{5{9evIF"W!T14hGn #cʸ0.\o8Tu!NJˏpa<Ogw ĥ9KeXrعUΝ؆D긚vr{2s5B`HƠQ/6dС`h+i[ mtҝ=s֯X-r ܱ^.@DϾޖ*iyQ<>Nn;k[ƫ3;b]6 }Vmk|WS.7$3v;i%&vzY^Dƅ l7}&`柴m0�Z1_c5<1<n}ݞ_ѶE |y_"אoqNTʯN=,ٶۀrIӔ*ϜxcWܰ ŋgW~[̴qg9} 6 b#͝sϝ'CԼv۩hj?S\GPeh}c ;ûBV>z=_+<8fk^-ɶ\NEcsUgĩ)uI<ۘI%h;j>+Hhاdg7mKKy*8 dVNOy,8,.;OMZV^3NRbW\6k++v&  PizV !1,y! I [(ȭHW�9^6>5LISB jg"N5bfc<,WY >W>3'T>?o_?z%K@n|.ۅWPanxmS o_y|AfO=dvYڗ5J ~|"t1l^Y⍃M)iliNjյ7˻A]^w0~FNNwONlӵwYj}'XFl(˛]_i sL&-~F>aX>+nQEH֘YHXRƛ22g͸g+gI?zmfγq Sx:!TuI 7M}zKS7%<Y@cҐ' B՝<n۝C9<cYNvcuUosCT,"&Uxejz UR&J1xxd~Tr<6d# '=J[:qFBba[! @A/ƱcyNPWu+S;Ux<][֭2³CK:E%op3>N9vIwBNZAsCuMb( _v0R{�#X:Qstu0Zv=5:48|ߘ ϮX33ew4}{<V[iȴjPhՅ2mY] yǔcƔÖPV6 g Ii2z+O蟦RI=mu{>}7uq./TcX[P|z]ziSxV6xe#,,2B.g^TW.kwa&gгPuO;;={<<~sX{Ezy(b7xZ~ |J]hs;"[Fz˝^̭^mGWU/uU* #0DbNF8)2ӸVQiERR Or9.uTr>y:ۙӧ3H_-,E}e:2xPgTa %ח=$&Bjpnl@3w̵Z(51"pۆCsk~L3Զ+YD+ul}v'V9p̪O7cL/Xm:٭)6@j]׮u-?@q yF椭j׬U ]7%eW xlmMг>c37/K1B!"y^hf݂Jt2}<? Wc}=;3Ý c<jƯE(c^-Ij-n޾y. cUkplwێ^ `5mk1x`٣p4˹s{fZպeUۮ",y[k~"WP(O B,]23 6u[мJͣ luߤ'6j֚6nn(ryRr;7ձgnG~͟9}ڨJ{ <`y>9̠uٖC>n,]h$(30nV%rᬿTr~ׯ ewu*agٯ83m_?3`<{}ʨvǖƼ3aTQIlw!(7/zܙ%ν.^5x]>j835W ֯ZllJ_CF3{O+E-[j$8S«$֛4lJn۸5@u;Uy7Yᰌ+u) +dlЄ) VSOZ e~'K ȋF[*Bҩϰ~,0- YbG̥-/Q"3>ךڭJ'nA8Dr;9V^wt;`5m==ӎeZp6x^9tVmq}wlWˍR/+eF! U"P*mG6(0jNwڣ`-iqg$`X;: [~vWLr?m|O0OZ7 ٍix4x^hyXW }.T^W[Pe=Sϋ*rg?xϋ{S,? !vizk }dNwu^dG :Ws:q񔒘omoyoFZѰg9l#Ms"7ZΦu~X՛/6-\/=)u[:ʛ,ƒ76۵A-C#ML"p݇ }}U8˲ƢB™SisU~õ*ڶ*ff<o>;a,E*p{s !F$VDZAGx/bK{:ܠ8O`|.`gOgi8nyߏeQV}C'3 ~Zw%w$׫hE;-t1,/noj5lDj50]ܤiڻ@UopFܿdGP'kɎ m7 ‚B-%&o>wܣY2g\lTyà1^p*ϔJڦ՛:=/XЏ}Dq%Џ~j5M_R=Б? Ǫ>Zsو8сQVu9q9*y9>nmUs hDBx,FF[ۼyFZuFqC^ƺ>cM݊Uˌk}Xʎa6 +!J<y3]4ި6>8 üzӺ{1xc =ܯhʣ;+ӳD.EW<uxicyU#bVNqz1K,0 +r/VZL ߬\!Ls9=;U1-g.F8z$AP;7D)p6t-/_m'O3}AF2 M*,t_fXw9]јiyΌhќԸ/=ʞ\}xCh. '_ <ᱺ._{T  JQUsڬ ! (P v(W">'6'`+7؎T/hs-FnG;alm|\9Q zG~RJC)B\8G) - Y3: 6TBHClmly66(w\p=OcI1|`eA%~{Υ$/SMix6ЂG9kR|/9xvb1t঵"o<j7$/ç5x^ATozo$}zЃ<UVu0=%Mx}"~&G$RpyںhOvGUY cBnc,B-= VARt(q|_ &r{E1 PT2Jع1Mmٝ=%ꭙD#Sjk1BxGؠ )vWo@;O&~5o4>sa|ovGi9r%TܳoÏlr8ϘeiǺ4q2մ"- u 5*t"6`u嫔Rj=͖Xo6xtA@S>pk\hIueDg{O'>0\cWuu{3#圇ȯvvGەX=BA[6|91ϯGL!X!LUۮ^Vv&tԺ 6*:;Fܰr pHb+v7 wW<<Kͷݥ3BgmMhx`A{~[m:g}(8kaoB΋NAÛ<L4 OG chs=Mq.Uq'OD(*V8Ajթ{o2~#u=,p]3D.cXZu 1#w$iqNb;G<AtU59ooS8xRٵM]k.q_'PdB6{l] /7G{a쭸-7v7rZKM00tcf(6$xiCݯ&ys5EIc U!{fi}չ'n;mWtu!�]i?lX{1oXM,nf GU:GyCHYSݵ(}Mޅcg֝[.y=`U}˭S=~=!sq`BCp,5ڡ80.\ Dt].s:c+piv<'-\^Oi+-镪`#5^)~k/j!ӄ9wdYyxszy0 }OI=1 ψ]-RQcQqOQg` (VR֭=Z'%-lmR^A b[@s˵:&uyW|X}ޥvӓQpnѶ݌T*Qw<w(?SY Ud^! **µ1?2[`(jݴa8Yɳ-=Iu> me`S!<6חxS; ټB(w `M[)檔NYbQ̧,]FO+?ڔmffq -*nO/_@8,凁JU罵t2n)vE|)i"m(%蛥]wXaxa햁UԏLzc<|mw~mE^:u'>:_)Q4H.k74R緻( !/? S!8΢>mJ_ hCLLK(Op`)C]q'͏qY; k?6ڬC`֔p2˓eg}lp?!q͕2-jL'=h;KybʌLUӂXXVZj>c=XS W0u ~]dϻoGl6kK<3mޘ5c#gI֪1tJ,W٭kj,jO_8.*v[8W[\A }u/{ >?}*1j嵞V+\va wa޴7,6{h"#( oGΝ F-kae~vZeLLMו(an#<hj7ɪv=IQ5byd'Оt1^|nU.oW;ڞ9<BO4_h{g`ZxpmvqFo(AD{"pC(4) fȋoR wb!WTTcZ4]{Ho!*iùܬmgm-Lp>>ziu<!Bqx:0c\|/韩xk e!ԍl`0i'q6*7[DC6d UEA8&>c>u9M~ ~'By a{<H̲99_NyrK39|(^)4šeHO,iˆBT}Oi`OU~Vmc/S>M~֜bӽMc{HO1zz)|Eˢ$Ǝjf5^ j_i{fZ/%a|.OV\깧r /| px׃_Wf d!<͏M>5N�8p9g{OAS|9;&-y391P ~hhkYIҿֿ!!j̶fx1V[q_O.Cj$5 M玜R/=K̿i =6xݞ],z<7\>`ĞRS4hЋ2 ]yUF\*S63SW!  "g)<m*-`.�pGRՃ[Stzqz*B%xڒ,tq/CCXa B|0 ڇv^Ng0Rg̏<2Ry6gP*Y>1&:bL{J{PXRJȱE> t"<{%PIw*Trpߎ< uTx'Mͼ}XD P~e_ :>'x(/ý\bb,ŏEbm`BȞ|=:CeJP(_%B;-<Wn�hGϨT bOD?禪p.<JX://LZhS%kN8Nxq*ϝ b !|[ҁy\ 6ym/::Ľ U:ZU69dŋ(B%*g_nWC`ϝC8# Sl"[8S/9 *{*H ]>xIkhr '0$̭]P'1Ō`uȝt ι ,Д4M킮 CHO=`,ϛ~^JxTҎu=a-fycYg-ߗ|Mo(h! %.c+ЩN;q,Uy-cr9BH^eLŭV`n[o*g?t?F>EL9w;F s:Ng3҅L*BU_G/HS‰sB:ۿp=P[nca<©])=s`+yN roIB@+*]WfeC`HB@܀. -m caC͟[خe! B*@H(h_Q6( ]yK m/RYe罹>P0ZIIiSX. pHÄ9-tIPHB@\{tn0B%) {tד1IB@\F,]Im8mxtE5"D.Rv5BD +Oѣʛ0\7B@w .9)'B'�kCcch`,B@! U"�k9cx̶me:%PGLMmeY! 5G@kIB@հ]0%ĞcU.E ۇPw\qtB@!p?d5%%E7ۇuZQȪC(-5""NHCǝ@! uA@r0Jl`7I! B@! B@!"sdB@@]~tU! B@! B@! B@\OD躞B@! B@! B@! n E.@/Y]=2٥IB@! B@! ~8II! N 99Yxt]GZO! B@! B@! )+%B@! B@! B@띀]B@! B@! B@! uJ@n ! B@! B@! Bz' B~eB@! B@! B@!p?]ZTy.l?/].\ָE҅KvKn%B@! B@! B Pkg/6C5wNRK/@#}޵SRt5tE*W#|J]3~i#XvMnJ>b& B@! B@! B@! 4"L#Ys%B@! B@! JX|O*B@k@rrj.6Z! B@! B@! 7<nS@�! B@! B@! B$ B׵yܤB@! B@! B@!  uß@! B@! B@! &fV䀗ٝzT^d:u86|Ӎr-"ޥ-/S mD C)\&^HHwNzT5KiRrœxJ#FX|TZ4*S5TU5Z~Ƶ1V Ы_EQrTu)FqSw֧SFIZ5r9?ynGEācoԑSFܾ4R0 bdo,%#R@�})V6 \vƷpާ@BYG8>d1;7^-m~o^#f*w>O`3/G'6o/R߅hϻj=yיAZKjJGw1_=tJ){z6s[Sg)Oztl9~?\XcuOm 2B@! B@! B@k]ȁrӦSFPu_] b#ھہ oi DAfv{ˤr5ًe3W)KWVy7N:~)'\_n ,hοQTh#{ϔ;iոECmimu+X_}4:Q``θzlnը*)sw$ra<zO,JJЋj(A$BWnۮς٢W|f��@�IDATpϙ]T}sG cޝ)ihZP:ehTBR�|]僨0m6uws_RvsdN;B@! B@! B@ mS*{ru'LsNqhkgWW5H5(˗ b^w73vQ'<~CںV*YJB"Dj !l]JBzE)*nJ$zJ\HGTab 1w6ݠ<|cfڶbc )ǻt2$k_W ]:"aDF][+Ϻ~%twf B\~~!r.x5~k]Xqcv)Oŝũ Aد5`/%߰R("&B@! B@! QH*"%p9psh/[2?q yKۥrH eQ';{V3DT;j3R]IrDVꎣvqL^d ^eKr†ꓲmX@8/tsX 's+%*){590uwצjr]pUoXpa.^qѷT]|,R ] UBYr0?pI[;vF%aiЙ:XEQ fm 홺3Uy6xp.S! B@! B@! (D*ŶIxqٖb.H3uRӆC0u'Gݵ|-Ê,N5Pе8P 6!u%ȎlNα`t%<YXQ~Io-JAXź27M%x鐎.:aܬs[a_Û<J :s;XLrK|}\<sQ 9fB@! B@! B@!PUu/.sNcPֱgN>2Gj?PKN" X 巛1nxʼ]W .;M?u8l\^^[:3Oq6~N>VrK54/ ^+[W qcs`oĭogƩJtھpT�1RTXϻVci9*l=~l1#CnЏ B\Ǜ<ĄB@! B@! Bpxq (Iw֡8XIUe!=-bMGOOq9Yua(iy: m吀>SH07qc+ꂷϩNϞ-?mTatA78!nOzF<L9OR6Rw:Y tN|E=1֖6Ŕ3ښ8bF=Y$ۙr5]t.O[x ;g6\l. s>B@! B@! B@C@s,e6pg}xi?3a<t!MKYC,K2[7/(]B-"*A8е˵k걧3VRthAuoEBY0nkqEx1ΗV -x)AK.I/_&///zhuVGT/MZTGv5n,Vu@Լk ^ZF ]glFO(}t)< tXv?7[e:8nV*O-_`n^ TO?N~JW;[k08HXoM*QaIB@! B@! B@K׾hًÞv9T3`>JD >t8yΦ-G4`CHĜt2j홱˩qb(C :8cABT߷>S9sf/T)Shj&zF *\jf;)w?ҳC uAxh>1~_0ZFZ||<%'1Nyg _b -tƖH y N~rRIR"ҚsseJ+E]:RYVވƘ~gM52zvI=CGS> nD R 4! ! B@! B@! -UȎB6#|}IӤy.SJ@LN#=n3,'ЮSczM yPʖP<a={tA%y+ktS^dtQ҃s}FU˪\%zlE;< r 3J<WqB;W~ B@g(KK^_D+k? :8K \ ЁEQ-]lex U0mbTFəN#|P.w^D14OjLV"<^M[qR\i2B@! B@! B@kۓr.Z!*w/ŽS^2 ?ҟnҗ॓A$w�fJgybNŔW:XT1ZE D/LtXsH@�~7{n bO{'˫UX1 E"E8>a5ܦ)ya3k*rss+j.[:.`8`ۼ^fVl~s u𢂗-<rhVǿrQ7O1N= GOQ~*0 Ǟn;X" }Nc=w쯘B@! B@! B@\pص8f>^ ;rVJJyrj0W0C=g) lYJߕJ+ :r+[XMg mP]?,1UFI'W1(^`;y}p )Z{]ȍ8gU^8Ό%&$B@! B@! B@ɪ%ӻ]HvRx ̠P՘s) z *ra#$<5 rc.5*VʹYXhU@E.4b]``7[*ńB@! B@! BZ$ B׵xԮ6klӷTH:RA =+](MN6RP^Xy݃#hl P!})/B@! B@! 7nc]~g(YUҼ֎YEnЋ5(3B@! B@! B@! ]�Qp@㧚DSŶJD[)%!ys5FVɀѲ7p)#B@! B@! B\fb. B@! B@! B@!  dՒ= ! B@! B@! B@!\%B@! B@! B@!   ˑv! B@! B@! B@D@.pIf! B@! B@! B@B@r$B@! B@! B@! .%\Y! B@! B@! B iB@! B@! B@! KDr dB@! B@! B@! (,D*,GB!B@! B@! B@!\%B@! B@! B@!   ˑv! B@! B@! B@D@.pIf! B@! B@! B@B@r$B@! B@! B@! .%\Y! B@! B@! B(^Xr#cGNzn!ݳ;íRH! B@! B@! 2*G/ZUܒ\gmmlYW-}cma#ťRLJ\yW˗.2gPًvuHB@! B@! B@!  xt4a'W֎]d r˓ "Ձhhϛɳ'ռ͔GhR t # 3miO^ҞIJSɧhJɪ5Q@L9r B@! B@! B@" BWAu^xhsB`g(ak×k)=>h]p`c© 4ty%^5ւ<|=iw 3XC,SV#1a.B@! B@! B@! WE.kRY83^! /g^y񴉅ۍvC }u)~4 XU?/3" <ffFosYY]i{߿~Vm4l沮e9" 8*32 w]Odzk{ߵI Ա,e0 #K蒋ZX$!#^  x@ P�(@ P�(@ P�NQ ;;[d۲ۼ^nr yۗd`Ǣ$$NI)!pp1"cmLK\eu}kjJUgl${vI@mDtظ64 ҆}B P�(@ P�(@ P�Z"taKۨҖ0rd__$"!?:z79=zHvamVxtЖ-^Nm-ZM^VeI& (@ P�(@ P�(@ Ph cKZF4UPSUcYms\sF%}OφUMh4ic~_,�(@ P�(@ P�(@ P-0f17-5F+.}e"GF`˫;TF!:Y ^auꚜT5(=\u_7a`[;(@ P�(@ P�(@ Ph�]-&l$kگK3tt3aÐ>I "ݭH__dه+^ z'J`"[dII a7?؆Km:jYae ~=zP�(@ P�(@ P�(@pJk qZ_ mnr4TV"uN$j{fl6wƴR{{Y _) ?O;Pw߰Zפh51n\S;(@ P�(@ P�(@ P'mu0Ld$YP^--Va%#cfC5B$jJ\;>nځds\%dqoNMxL P�(@ P�(@ P�L]mF ٥e-U0]|#|Q|bB=xQ4b&k{p92{K7;(@ P�(@ P�(@ Pm+gt1:Ѷzt bYd> xc:a] fƳjuRd¨2dx@ P�(@ P�(@ P҅Sl0쑑e4#>5{YlxΑ�(@ P�(@ P�(@s\]ǫ3A.H"Ewf\(@ P�(@ P�(@ P8:NZsKRmAc9% P�(@ P�(@ P�GOg ׮ԫaGȆ<�(@ P�(@ P�(@ PgDN+gμi([#79٥p@` DM!rΜ(@ P�(@ P�(@ P@vvz`ίϝOK P�(@ P�(@ P�z=|? �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ P` �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ P` �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ P` �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ P` �(@ P�(@ P�(@ P`�(@ P�(@ P�(@ Pp=O@NN �(@ P�(@ P�(p:�o~+JN6s٭6jE쾥&x GEOΏfٕXH~oõK؁"gB P�(@ P�(@ P tY{<pvq~@uFpPURQJG.)3jϼI67?9/ݢ}J0opsskhrJJK> p&"(@ P�(@ P�(@Us{ↅ%ޔ�TiNJ!PE_&3sv1)YK;Yˢ)@ P�(@ P�(@ P t5lmk7)M&ꫮ<D P�(@ P�(@ P�Rm'c&.9:*ʱ>9ꖕ oN[�NN24 NNV}ZrRy,GwC޾$o(D ^ -Yl@>@ B@T|};;Gy{+CND 3NksUY^|#QSUpDF}w.y [ph);{o\'$ g%&t!]:XM1@dV 0={++5a|ծ y(9Vb`'hKa~R A#�Cc� {ɒ婥>zOI*Bi =sJLg~wSdgo_[?U$e8"t~gNҘ)@ P�(@ P�(@  tIVVڮ=keuǧ%{7I+iVh;}ܭ];rx(,]ߞE=R8~VO$e}e&jkLVC�>j\V=(׆jJ]/]`7�٩طj~W݇y߰^hK7g;zv.+#(s;3oHuvW}dU;9yRDzL& mTmZ;Qt]>x}qM.4o/_?7SƬTl`8YwmDrb!^zwnj×x/[ձ? 쫃ph&:>1 ?M1Ho;`f�(@ P�(@ P�΅Og y/8蒶)eGKU`kQ9q\]VEJF<6nN2Oa'H^] v`/`ZRkVA.߽߫\=;";e {r\%Vܲrƍղ۱w0UYcyX_TOht}|BP|xئϖ6!s!qUxj0.K.nǮ_t2>rM!#.ex]X 4~|n:,9ϛ$j\jiA1 T .Cejο/?}3afdR|pYl Py,3CzwcŬe{S gު=N P�(@ P�(@ P= 0?6,acN_KHUKRYK d݃joo rI][t@,&x GTA`AQzq|S:xGol5 ̫-K^U*h{S=0Uzz(Ͱ_UionfB$,Y2˪F3]&`Nβ%/]y+yK6(M^ 磸 {c5U'K!>D_D]Mqɤ0ru5d7Dzo;1Muoڀ!Mk@>:7jX%hX{^G`ש/c!Y叁F[f?gwPVR�(@ P�(@ P8 : ?LY]jj Ó-YXU&T̔ސUhxgM=t0-r5OO (V5/o{3+\2W@(\7%P}eOn;N w@\,rZ@q9Z^m3e[H˰ `B"7ϖ}^QՌG>0י- t9,'ksc3&].IjjNvּ.ɸW$I UF寳W@^}Zйǥ=dg֜Ǣ�(@ P�(@ P�(p&Z31c޳zV`#KrGuG,1ԼZc,S.i6,ܦ%wA Ժc7W]]-Z=~ңP^pa/_Q.pX[csMx!j UKoxFxE 5,lϺa88h^jQZ6C tehK2ph\�,'ujr _O^C@N i_zDf3 P�(@ P�(@ PZv蒅5j{C}j,mkנ,Dhs]Z2ӥGkk3,I匡>Y{t]]޹^{Nv{44;+ 2KC91/gupu\ݥJSjieH 0ge4?iP+ެN[TaRVCQ�(@ P�(@ PhoZ[@/7-5>ْzK_FǪ9+իǥQ} bnzs^\߰T6jѹmxr\z :�R2,~Brٵ?,@(9cXk.x}/bիںy{ K^¾_}݊MxtGTS},yx?:>m}bu&؜rgcH|cDej̎�(@ P�(@ P-_H`+m_,ghgHZTI__dz -ŧ퇤'J`"[dԵ¿{?%UthWKQ}Kc_kn| nxԪ]}Z{%%62'c/G޲aǠ>_)ڰ ]ߟdupeĤj?Ӹyh3_H9صu6 >\M-hb+B's^y8<sӪv~fZ]kKR-]z mةqj;�(@ P�(@ P�EO$Y]i!^.ZJ^;&Gw`!1-i:tH tp;uokH;(9uk}?G%%ɰ:7]$kKmVO i2@g>~{d%  G\cU?v7UK*21]wDخM/yYgw2/b{-*K c5{wIXmxP}\QZbBQAUˍZvSnw)/3aٷݥA6phv6zKY ͦk}WVF] ޶{Yݔ'�(@ P�(@ P�ΰ?oK^Y[ VA;6ރA31 %dܕ%h  [τ;FZkQp`ը[cųS$^Va{oœ#髿ƎgkoQW[)TWWcOh;y ژW|l nw>,NmT]A!}֞~d+*OD^y~́%#9"R~.|Ԣ7Aj\{9Zgeʍzn4g}I`Y[; 4gɵZj{N<ߜ: &.Gd4ى�(@ P�(@ P8%_l~R TT˲")d<i>R8~栉26.SQzW JuFq>T/n|L2s Kpvq3.yU5lX9cM*BG|o*U+c"P^pIYےgbE۱gGrYͽcH8r63:b&>GЭԽ%0<�3{C&GZj d?]bdS]wkw>g4>|kfϨy lxŁFӟSm5򃒁&塹x8,�nWjI&Իxz{o\g*kUf4p ogW `3 P�(@ P�(@ P@vyKft[kz bYdr> xd!)n0@[n%׫sUk9r~_j. rIIVMɨMNPAZR~?IZO\'Wt>QA(۳GW ⯛~Sj/'Ǡ_/HC֖VAq.s:+>a 6HscClӭ7mĒ#x_ hrLA,Ԡ"?T+oqWrnPWS\&E`(~9Toxf fYblL P�(@ P�(@ :W?ٳL&-U4}1#k^*8Ǐh_Do8N@M&+dVW!@xx M>LY|dJs2�qt oXOļUc}X6*9O vi,XY/9_Ɓ2`wT쨽ipFtloj,{. tmϞiE }*;=!B P�(@ P�(@ PgV@2G\xHN[Ѓ\i_(.CDCG!2/BnNNZ`z5W`^X,:\e)CN֬ծKw�X(@ P�(@ P�(@ P} 0վ>s~6NZsVg(uI -HT>jsހH P�(@ P�(@ P@0:A r:MvhxlXs P�(@ P�(@ P�(`W.,l+q)zLg}ir\{/xtj}sR>>(@ P�(@ P�(@v!Tv1N�(@ P�(@ P�(@ PdggVe P�(@ P�(@ P�(@ ;G Q�(@ P�(@ P�(@ 8"@#JlC P�(@ P�(@ P�(jw 'D P�(@ P�(@ P�(�]( (@ P�(@ P�(@ P@`}$(@ P�(@ P�(@ P# t96�(@ P�(@ P�(@ PNvpB�(@ P�(@ P�(@ P0P�(@ P�(@ P�(@ ;G Q�(@ P�(@ P�(@ 8"H#�Z.PW[ZS@NpvuI Lح\]xB P�(@ P�(@ Pg�]gYk0R{jBpGW|]?N=nR|8]u<Vavܯش6j{f3/ I}w$M v?1^!|T$&xMܬG)=\\z"blVQ�(@ P�(@ Pm%@W[r\ 4 nTmEQT7hq~+DBxt4VIEE~Q҃AppQ$mGi k鰭_3ujZO΋G(VtVSf|u;tNYZ"uI bfYrlL P�(@ P�(@3+@י#k6Ṿ> Ƴیg:- 5iW C rIĘ�(@ P�(@ P8)@ P-z=R[0lDDKb_ P�(@ P�(@ P4 04v$<:y 8ՠىG!h-)Eynt/|#}ڷ$gFنdzvD<aR-[(sLGA=s{5z r eȃ_gu탮'~?-?!wo"Js3OOtni:^[ ;!80|l0Z4YFp<,{˼>hJRZG7;{{nv%~[e83aȨ@ JMضѼtem[6XQ>qs˃=%عi;!0C3ž,(7q!0ꐬ95G ;pH�\N ;Lss8')U1F}vM|GX)*ַQsZ^:3=Ѿs$(Y-;mLV3 (@ P�(@ P�(  t=v|monF|L\0ta՜:guFq[]?Փ,,7"{9r^W1C,}ybˢgs+_Kތor!j*<`WuE)OCi!}.kt}k29޺SmnU;'jSTWbʘj_O 2ͺk#d/; 7j_~|޲N?::߮D?%Uƹ~DPO& mU'K/YɸCʢ I9fskU4gX|\>9d3*oOӿG`L ~7+ˁ7i;^-%x5&HӖ5%V}1h}: 2]]og1O(@ P�(@ P�(@+8xj,_`;Hl}rLB$hZXȻ p/)@ߟN:E'ht*rT0S^^[;vB g󳐱q[]ɪlj`@vz!bz)=\}=bs`HH@/YHR{z!UYʱ/-SY6~ s=  ,0ޡ0xU%YdnWǷ Z?Ԃw }S㧯3UiQH#xiX(i-&ۦ߰N$0W=>L˭~FxkF>]աWZ^7t]eLmzw;X?9G [Yo{D A. h%U%?7z[yog�(@ P�(@ P@x{^i`ʎc˫QY#K {z_TWcÉ?X'L o^i: :@5'¹Fk+6`\cϊ~b.oxT[roQu߾۸~tT\Oظ65K`T{_0AymI;nt%=@ipl =ϗCe[,{m6G; U|̒�ܧ.o}ga߮_,{ϴV ꁮ?k,+["r}X\2ƮGlZg`Mrix8T䙗pF}0$HiI3X2S3VR?W{X{9o}Eb5ykTd|r]+6}ZL6�(@ P�(@ PhR&yxt ?ö[?~/&eys{LLiJ-Oh1J-urZ z'Zf@'�qcq4y5e8gJ\F=CN$9Vru G<ZN†djص]; cUKW<X6ws{ǷUq&iʞ} KJ4|,K'wK/$/%]$I Q^^}=.w*s_ȹcle{hc \F!}~grh4(@ P�(@ P�(�]1(Ж0>�D:t ?-IJutӕ6ò Wm]Js3u���WIDATE݆ƾ[L%VS= ,O@Iw#re8 W¾Us(ڍ#&KxwfEojH[b =nu͸pLViIu=0ddz󅇧K,-s.[{Ӗٌn^JsφMW]%t=qC@c~!F?yv�ɋAҾLU�Zvߩ|GXGw|][JeRUs64ܦIH.ˆ<S` .<�(@ P�(@ P�!@W3 *L0U {4*8 5p=jxE.>ݍ8H]~^+Ps虯`?؎yIĆ͞^rmsqt:eb%%6r | v"(~6'ɉ%P9^V T_,kXeMx>g77w8a9NfU'X-fѰbT/-ްxf?6l7>|�(@ P�(@ P�N.@ɍ4 Hfí6mH]S$hC҅^9 oNuiUK꼦nT{jWǭ}PQc0W=.nVk^}?}dԖX_B;[Y *[>=}iA߿@Ʀejd,=SwSvkͪS'}"S-YQe'|=g2iDTmco#*KZEmU;;/{p=hbv.UmLƍNnƎ&m_c LK@`osө|Gc{)ƾf duvb?.4UTk)gRW[}GIc�(@ P�(@ P�/@Wأ-G^_O?z )X?z~ 6gtf%VjTYTzy<_d{Qnuk;zdxy]^]쭫^ZjEZczvĀQR}{avϊ1GmiJI0K^2neTfXzTYX77o.- tui~Jձ_]NڳI+bA }i@mK3%$3gUJg~KexM+>^]WZcE]}T&WQ,tk{.I G t%86ةql`:}\Ypkm-πƳ|#V+(w1X2ժR;9gj8)@ P�(@ P�(@be+ X@=H Hzw+-H#qW7">loߏ{=q3_Uܽޱʎar;؜$(w>X2^,.\$K"Akf"Qxp'2tY ('"v $/mYõU.޸I"Gw=Y&v2^:m;z%XkN]\]r :XCv4$389ũ@TmZo7%,YPYT`?#Q{>}GGIw/]l,a`n'UC9z׫r_>9򇩟g�(@ P�(@ P@i/M6E 9d<R&. RoΈ%'Ǩ: IpKJE~~;uܚ g.{zlx{~ǯ(G7 7QQXɢ_?)V[c®eը*/O_"4*-$TaQ e TveuMem%g{W~`ӂڒo3hAxW/:%Kʲ%P9i-ZZo9X&\}n:?{E8i,fm\}A,тOY`˾2%5*,zD33{bcI64̳m-}&?q\"{-޺*tINVCY 2cKn!Gh{xIHK2$ktŬe*�f^[s P�(@ P�(@ PVI[*l۳F [rtEę,GĐk٣1nxjY~mzp$r6q$cʯ[_mrӖ~PQhA$irb/'˳SZ.?doINZ0j&k*!{k]`j#ShcK܃ҜC7|a%h[t}qݯ[,ˊ?I?7,n}{ >I@**ڶ@MPpuSSS Dd8NVq>r\h azWӏn/aYٻw|>̞Qd /oWO8Ъ/͟u=.Qm,Iי[Ǥ+F[LlqAҲ^,wd~0rszp$�[URǽH(uR|#|^_stUϤn(@ P�(@ P�(@dgHE@8 :k\փ\2ܕx?Frc#q77\{{u69ZdY@ ru!^CKXR$h%Zs&B T3$%iiW9ʛQ:E2Hp++q@ rIGWO/5g9,FKiLd^=u"<l~i^lho}"taM*;n嚩0!\Xh\J`ɲ$hX~NK-2?,{{( m|||b"KJ`.*2KcUK@7<O˾Ԝgr^h[ #6cVomSG\XKnN(s r.'Ǫ:3 P�(@ P�(@ P`FAsINީղ\c-Ҳ8lɋA[[Q%TK"zֻ=v,kki*-vRUZcjZp.QkoJ=GyQ8Y;,R`^{*Da2*;A/gZ ҁ}vhXs$ pGx׎84H3+BR 3D1͡5RrjO,ux*Ti߇+>;ܕ+^u*ñ(@ P�(@ P�(pzFW)> Q@d8i;..GB6W[Y"P^mRdu]1Cm9e9\\]z<eY@y5J߰m'-7pX@V=?Ԫl˫YخrI\SAZS-R>IVuB P�(@ P�(@ N l����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/config/img/assignWithDepth.png�������������������������������������0000664�0000000�0000000�00000014703�14332737457�0024645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��y�����K���WPLTEYYYEDEutuhghYXYͻޠ֖gfgl��'IDATx흋v⸲@`,#4ݙyk=-14f:!a$Uҏ8<"`Ȁy  2<\*}Kj.s%!2yŹoHMөnx0fy#�lk\Z:`j׮Zy0ŴyEZ!zVZ'եjQw5Ru=[0m꘦mݿ\(+RT+(�Ck޼Y9;wabBs|51΃iyIo1`y&L ~m{鹭 ۆ#9̃)zƙd mz1�2%2`Ȁy  2`Ȁy  2nMyʥP,y6=h�,bMϳjAdP6,pxX1/d8(vf.Z8m`޵:jpx?ћ-iCZ{]qZZ1Xi }�g;0k0lO;pݳ6'e۶2q9ɼ8mPʭ?bJysS[kVX>% Pn|_0qWsy8ʼ-,@ Ȁy  2`Ȁy  2<Ѽ$6h4Bdl5e3ڃ͛muIky!/n~76e~3j sU0r͋ۚjb8U +CDzyq^``^}+OuC2,5 晑y1{+<P+1nw܋0΃;y5[y-rb:a+s۰YAoWq y~u <$Cd<<2 ,)@0d<@0d<AR6|uæTp뻶n^y,j]dl5OŌzUg[sV7P{I<h^MŜVkyw.\mO:h<j.,yYc`AF|1<WsSMjϲ`3v&uW{f/uV; xlz9U0d<\@0d<@0dX1ϔ,@�X5O' 2##U1d`2`Ȁy  \=�Ȓ0d<@0d<@yŹ\E `1t<xCꆥ`0gb2ۆ(̃cUQlZO`. 3 a~A#3G2g^`ճY8<8@0d<@0d<@0d<@0d<@0d<@0d<@0d<@`^qfy7˖6 c^q7Xm8޼,3nEk-Zݦ6_1ʶSLW]T{ 5yvԷ7ЭIՕEa̴yƪz֩քcZq~`Noy>r͚cBhN\yp 11e^{T!歞2aS̏<5>hV%s}کMonڻmw77̃9ga'\L@�@Ȁy  2`Ȁy  2<ѼYN^aˌFfίGej^|3xy >N6̃Kϫߍsi{ߌt栘92s.Ɂ)yz SPм-X6Ot⬜f.s`^}Lus2sѫ*gFl$1r6<'J̳<ȹcYcely10`mX>Ņ2N-5)EG̃%;5I'3xyd @YR  2`Ȁy  2`Ȁy FrLrC\hڨH]:<<sy# 4;ᛱ<YqդEۯ~yڳSy>/d ޼T֡GWcya߳V BgIv[1nj0=Ω'h{5m/uۑJuA3OJƻ#IbvZ-0?̳* \sVEpd^<Bk<xNrtO~ #̙ǎ}o{JT}ܜtmk88q^0/aμ80byq߳۶S˧Jq]ss[;gus#Dk-+|ׁg  2`Ȁy  2`Ȁy  2g5"$1O)Gj"K�@VͣaJ`y <@0d@�@Ȁy  2`Ȁy  2s �<a#<�`0gb2-Ϫg. 3 a~A#3G2g^@殞UΪd hN%2`Ȁy  2`Ȁy  2`Ȁy  2`Ȁy  2`Ȁy  2`Ȁy  2`Ȁy  2`YShX٬W7M~1eu ;Lq Ƅk.]Eŋs9�tvLx3O3}:گ2_УĿ Ս�ŚyMS]y Nz*67ߔ=.M<QJ-<U{stmV !JXn~-[qUlK<jŵ(l0aZ.3&^?],eyÎsɟĤyyp0=F*6vcVkh+Ϲh*|1Ř.UuQ061浲kxe^F*6Ϛ.0Il5ojf#WgUiMO$ U]i99g?{pOfy J{׳oj<^:~k^6JՊyg;/`~̖OIBk{2[;S+Uz(N |hJubUܚeFǗм۪Lbފy1sg?Fwal`Xx?󟯟b7ascyڍּ'uP>ڋyfG2o'a\>y6B팹P'vn?=?)l;pJkPlٱ3S(k^4,a:r߃;an[waԅUwknp$8q[<Pc,[=n:Fe46u|joۣ4МUyg ??%Ōw<\c<@0d<@i^Dn ųrpf:ƒd! /_ב25.I [Jpe 5&3=s׈ĺݯ&0s:<fWoԧ/m^T+^fE{ѭ1T3RW3÷ĮH?yG»?vߍ7nlIG=xIA/s=z5o3Y6/Ōh/<׳Tze)-R{e]L?}׌VSkի8B3/O=lw|.Ry[z8$Po CKI˱@eUkWSN%m\d0/#R+8 q,re]yiY,ű!!֞r:^k?tܾy(d^CQy] ݽDxedo2қhӟ]d;c[_'Dr̋]|S_ SVZgJGgʽ:L?1Z+H1Iنμ虧ͻE@^&ty4rozu(91qzyno.[ h^臲,T'&!֞͘ ]W8~a;z[c_Wۦx4o.F"ɡyVGOCLH;4өÊ0^ּ٘ קS"6n`G`h0 f~>j^*W]Ȧ./F"tmG;O͋?},gc&eq=BI*SZ\G _U7ǚּꗹ0m㰚o^;lylbG4Ͼ)SNJ<Y 2s[7Vi ̋ej+UR` c4 guU͙t:9|MnٙN\s s,ȥC4/ .ɰֹyT >C/~=enL?Y3O=3FaB\zm>iVΝNyi&g0o5`}Ŵ ͧ:f\=˞`;r�Y2f {SnR3o3fgAȀy  2`Ȁy  2hڼapjvd~gD@bżii4xQbޠ9fo6R/0蛧Cg3eV!]dylmKz뫻6:C\a՘_/ݛF+K<3*/(y`3ڥd{1lbYUv 57̃9ga,A�@Ȁy  2`Ȁy  2|k8|<U*:/972_6ReZ6)=9/,vQ4Eg@K13tn2S=:-5pe4u? bcnmi,慍[n1lmjQVl=#ѓsrLkl3 52E{e6֞яy3g`4p86xrønߕny1{ZfoWϪDd6Fv+t}u y\]żbg{nřW;ճW;G+sU<@0d<@0dۼi [s3}.Ld>5#wbO|߼3:Fjf{eI%v7[{־h;Wuxic4|uPנ%FyX.ynnM &+ UweR ;՞PmT/'աuy˖9B_\7߇Ҟsis!HkSY of t_ =}re/5>ib)T{6›w..-YelQifqQ<.M83֔{rvT{6BŚ`X7)>¦i<%1907m۸>>?j?Ӎ8q^0O&.LqU 3-cok盟WD,#ٹ s`̋mj7;oś\=3%<08~7<D7@0d<@0d<ڳ,=ALq9,ì7[{`rT1FG=SƼP% n\>in>Ska+sTY}cq0=NY >މj JUY909bd^T`{e=Tg+'Jobs ï_10/_c k`VU{f HyAyz~Uyճl<@rU@0d<@0d<晒X)I%y_ <xמݳjꆨz1gvagN);_�ސ$+6 vlvF)Pd&Ȓ0d<@0d<@jeix-[Z6(Yjܮe#L a�onDzۙnngցv,gV<Vo^h(Φn<7~V#m~۱׾g~!n1{VյX.22yn<厴0{?&GY۩NǼ%\<\m/ǞٱUUG&N]uUyCL uJ҆g1Q6@g  2`Ȁy  2`Ȁy  2l482(R #}vas.l <؅gg {@l=#l=c d dg  YR  2`Ȁy  2`Ȁy Ï?�+#/����IENDB`�������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/config/img/object.assign without depth.png�������������������������0000664�0000000�0000000�00000013663�14332737457�0027046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��v�����Re���NPLTEYYYEDEutuhghYXYͻޠgfgq�� IDATx흋v:@{0l:9z)lM%:'! K]%׿N�OA;�@�xvŹTҿ(|'UrQ]bˋh-kbP3fsS`m]#ۓuO ک~/h#rUj7+YiT=ow'U׍2:94uu_չPָ[8ۣ�icV^]95Oa,q39v`­grkgvv\vf?v0b 37t~&kg\t1x5Y.R@�@�@;�@�@;�@\[]rYQ�Y^E�Yvϴmfl>lz(-K:UR?7X.$-c.Zlݵ:nx+iY{]iِZn<.gU괡/iו )v:anfJa;h7땵9dY5mMrc;s.v]i٨ZŔ,i&VIҮ+-+7=ٹ. ȋcuf9R;E' ]=se!@;�@�@;�@�]p,hW]2e3Ov\杻ѮEx.l,joc\a7~K8 ]R哸E n]qhKMvcnv1y< X.n)3 c PvM _ 0njyzcV8+L) L6l)*Bb}-Z(ίVBA;ey]t1xTH�O �ځ�hv �ځ�hv ڥuÞPx E[֮vxv.<۵S1w8y^VGK &kx6kWfvZbvqRrkvN S8gPޓq<۵e]`k0Y;_=Uł`ځgvÒN=zc )E;oպ?WL[E pql~�[v �( �ځ�hv �ځ�h)Y`fEzݡ�ֲB;3hB-6J`Wv �c;�@�@*�@v �ځ�hv �ځ�h+&N�2vLIA; bG13 Nh1wEyK>S ֔׮׮n"qp" 9mAv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv S+ά}U"7kÐi+CFܡkÈgh7>"=YlokZ٦(Km`kc ΢iW]T{4vvo[{zQO,rP:Y馾ϊxmrծbBPOSvhӮO]ώ0v3܌jgwڹNLDMPf0U6ٻ{x1NÈ\ !� @;�@�@;�@�]NCwK!랪3xEks՟4hmuIݠ8+.ݮn66Υ~3i_j٢sa\S  vu!N»Y9\HA-ؙL%xsqU*hg& LhMٴlŨ`1v2+bV;o)dXɆN\㔛ɪRr\\D;Ȱ.p<OՎcyv'�@�@;�@�@;`v\҃DOK=T iRE_jgi׭v<ΠK\]ݮ߇;{?MZm{=jSNFKinUx|{!kk0.|Ub vMpSEN&>A q_'kz݆P_ؓ;+w}QUS;lwlAƸ-)G\j/h:ܧɌ.iS}wDtvlrܥl6㰷A3w,ˌsr {N^l<e g{s3Y;Cu3#Dg8W/@�@;�@�@;�@�X^JIx5VD;M 3hB;g`o֜@ `lv �ځ�\H�H|@;�@�@;�@vncF;pU@vALV-b*fP0R�D=8vՅlv8vq:_.@ȦhNav �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�hv �ځ�h gڢaD;Uve;[S?g4#R%֯]%M[2Ί`\n-Y!6hW7z-iW7v 6v%He1jÁMG1zWu*V=۫NAM{r;<m?nT]3?}?1,]?f5~$^ʿucSڵĞE>ݪc;Ghĸ{G5{ÏiM.*EvV3=4.ƍ1 ُO1]\?s)^8N;O.8C#$f 85QT$;kt]`xڹnLmShBӼvx8?Q:BkIܜRQ?8F90V.vn:’vюb|\|'ɒvwA%6KUƝvIܤ]F:hsx<~;40LNʪ8-_Ddvժ0馟ML Qpuv}b8Dgc֍4KƤa8{~u \3n=gDiB<x N{+:ّF7Sw f?@�@;�@�@;՟w^O_ϪOEwkeӍv3lRK)Y \sY:ܸTJqY.mܛLb}B]ꋿnx7h#d mӸjg=YzIkq:TWe/jgoOӃ|g>]NY0LFN]* _RS>!KU?Z?çV]OӸv#t&°TU\ه~.Y94.u;J3"8*PT]ԇY|1JjvzM1/D MԳcG3Z+r.&$avh~cRX(re]:޸?YJ; !oG*NBaZ;E p0 PkK7YƬ&c,˙?o-ͬG@nvg)~#xvo]`V??V:µq/N/?)*0F i:b6^"y'қ\3P4 ΍bb]6U&Z7jI>-&v6>fv*-d~Nq;h:Yc_OM]zvM.}kg4OkGÏa&ڽvh\2vُq'Rgrc;G,ssS>FS ?[./0ҮٛKo1n]8菻зg]cQ@;Vdolz׋#tQWihlgO.Tݧߤ_Zϫ_¤F"vwIo{`~0Ν57e9/+YR,L6XcjK5P\A 4uo0)Ӥ_׼v*?yNG6PLi f N&:-~㫫'nu_Q~*eF TI7.sɟ ^8>r1hg>F4هk/)4knpn΋f4>MRyuFzO0Ƌ@9�]JS"d^v*Za2fS1v �ځ�hv �ځ�hv vR߉hj;ct.~ Ea_VD;?YdaoR�@8] v �ځ�hv �ځ�hv ک4cvRIûsv3X6'>mnflN4͇Ovd)^ +n/"K!T;slslJm&ԛA͕c^;%S+2lsڵٽ|21ݾ!v5vL)`-O'48bpv\ �$>�hv �ځ�hv 7׎ίکRۋjMe:^T.nBr&p#L<dvrCUӨ[G uUo�gcf2fAۻ&.Xh]Ҳ^ss'yEٻ۞cfte# Z={YvsǭLe# vDe=džNvgvv/nS 7tdvAr0eJ.瘝ZKL(-蓟Ҷ^;Nnˢݻű=t؋#E(v �ځ�hv �ځ�h]4ŠfG&1c ^#]ʓ,hӟ ڽ$%>%o]rL^*&MRmNv-ӃIڽ(UMH%+z SMحrlR-EA{Qv7%jו@eʱ iSv6]8,v r݋rܔ"mJ׮W9o`l.p%7%c2n[Үe 3݅BZ<�Nv �( �ځ�hv �ځ�hv`+{D;MlcI"=6G'Flcʱ솱�Q9FQ96㔢8sֱ =Oؤ ~�BjX O �ځ�hv �ځ�hv w Q]Ln5Yp;h1lLuQv)Z6xSnǰ Ywa l>C^7WVe|er;IS~{Űh(Φn97~W=-;ߞcw~el_clzkqhcw ڽ;9f''?|SF;ҍq4;We=ھt>EVJٱ]uQunPd[ b=ǴY,P)m6s?m{+8v �ځ�hv �ځ�hv f3kv£XHG# QHD;x{*?1vǸrhrGc;x �'P@�N�\H�H|@;�@�LcPo����IENDB`�����������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/config/img/python-mermaid-integration.png��������������������������0000664�0000000�0000000�00000114203�14332737457�0027012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��C���������IDATxw}>gfK#PDz۲q\Iy=I'NJM͒ .wmwgg傮43/QDEQDEQDEQDEQDEQDEQDEQDEQD3Md(".$("Ny> FO�w]-"8=]绁+Owpuu۷ 5B}E\Ƹ\]Z{| öpe˖]S9ZF))qBqᡵ+RB\sQt/a{3.]6~V:pI$y"' �d� a(�/\싽аN>5" H\+2뺸{ur }+ρub/40BR8Nd2_+qv>ZkEH_8#0'.k؉&Iq_ayZbqN^�'vrA2Zɓ(.)q?u)++}\-j!.?(4y/-h |Eqfܸqw}t!/g_#nVbQGĝqaw1fϞMII ݻw'LEvRJ7o7nk_'JEqyDQ49>^}U2 ?<x0F&"|Eq`�VGxԩSt]ysO^DXA<y$ ,`РATWWG͔baV9øq?3c=Ư~+mv ƸIFQGSxbˌ3V&X۷/;Yl?OX|9 ,]6Jgfy뭷ѣC*P$)JlzMYYsַPJ#0{leX}D+7m6*++Z"VD큭R(ftЁgy^z;wrw2`˪RGX$iƌCYY" `q`;àAxᇹ΂ 8vXO:yDoǎ]qѹsӚaq_t'Zk:vNyy'رc7|35[|��<t2ZH15@at7nN7|M @ @@hK<h… d2\yTVV J�,|">`WJL&ꪫڵ+se۷[gdai0 A*iP BW@Wh2Ҡ Z(A6S( #lÇYr%W^y".% yѣs嗿~n'OB$@8ٽ'2xp?\QJ1A�%Mn#ξThЫu!)>BHtP^^Be4R 6OQghYbGe̙TWW_S*V:uČ3aˏ }zՏlIßٟѡTwǶ;hLuY]4JhPP#D#B6=1C9"4JIJ/ F-[Fuu5$JEѼY\ĥxM*--+k2~ z{;wdú<eF].oAcc#\ݺ"S?x %X C)%' p@ƺn<Bڵkٱc7t555M6?[ qN1}}&>SJ?AYW � t;7~A-P"j@Rr8|IQ G7ړZ xX!npP [y,Y)%Ç4!".`^P c.\ݍ3^Ǟ{�FaZ,y_5#Zh|Ռ&reLd4 J#EЪMqC.U7򏀱vn޼M61azU%,⒆ZaKZ+VYISs=+QA#$:p@.4(ܳ޴JU Z:ewtK#@A@�m# +LJh"ɴl2,G*Nfr-&.Nw *�m}ql^*MM͸ 2\vlϖMi)ߦÜݦqEkD#VB8ɂ̀A4#d# o/0X>ㅙMkݻٰa o߾Wż"-<ϋK,!C<ߚ\.o+߂h%ݳn!R]S$%d}V\%�!p4& Сl MhmaV_cos@)«~E}:tN'ŅB|˜RY0uTvzY1qq`ّ%A</"s > !=z$#ed9<ȑCXJMAdH(mwg !TM�E8s�b>+@&07f潟Ʌ&E}}=W!Cu+RBJ 8Ofcc# .ĉ9޽{H$HR1s U"U @ z>W_q DM&SZ%qd/L[ΤՄvh"L P)SDSLaUn0_?b�Kڞ}qFl_OƍZU8l>rRt:Mee%cȑ 2SUUY7qjHGO\{퍌9d%EFYA6 r$\v\D iY� "ࣈ)5?D5Z;cxqSS+VqNIIIt Pq^a` 7t҅˿ȑ#Y7_\.GUUݻwgĈL4!CP^^Z5!+ضc+K.7'g\}$ $D)9 |I tLYBjM$\ ?7*,]-b#Ό&&Nj'߶mؼy3#Fo߾o°8NPRm6|M~a ĠA7nΝ;yY~=/2O<D3j(FQcPɶhnR{??[o#@6J d2><S/̘SBmPh@ &㷕m(V#7ranV:txT(8Wh.?[nqaii)%%%hܹ3G&عs'Wf̙3zGݧ7\=6rOx?u{׾ nl%ir9M (c5CcQN=7-Ʌ2aWݻwzh57z6Xm3k֬aٲe?<%_JKKԩF}vlҥY~+V' |}q)IW{&ʝDžl6G"H847gihW^᭷ȑ8C>}<y2:}<12ղ(6D"th&dW@|Auغu+~;555yǴ"8HRVfB$& Bk5֚#3l0vl֯uJ(/+W<NVp NlɐN|vSS}+ =L&˂ xزe {?ݺԴFEqkp|_0<PJQ__|@yyyQąyQ_5dyuV9 Bs;zM oN6\p]AMPQYK0ɤDF}_y/2?wMnݘ?>[>~EaHlݺ˗GQ8k:Qą6>}:Ǐ<Dl-KBn;Jss3#e℉9cFѩ+$ 2}L&+ׯɤCCCqHRL2ɓ .P0<fl޼l6㋭>h}uROr >"t*,~p$*#G77=J x^ R),H mw>r 49G:q$ຮ1(AFQڵK2rHF+EqaG裏/Gf1ĭ3Ek\}@Fz8!#&;8JH@lKƧԄ;`iss8.Aq N϶mػw/#Gd2׎".'կH$u]y\\vk~} �?" JHM4q }ǁ49N CGiiIX"(`3COnѣGY|9]taĉ1oEq6hm.͖=|6ld O(~gڹj%j~邇T2߇\ 3-hcwЉ2֬YC."׹Gi|( ۈք"ݻy1byDž+bUOv.A=|_㼅^aqthcS4@+ \&,"!q$7p֭rl6ʕ+%K/[m-iǏgժUi&Of'5H<w~SGG62\Nn:.\__Bɍi ' tKZ9FE)&֭ɮmYƎ*2KK4aJ355̜y6m__5kcǎEkʕkѿ<DQZGaҥ 8aÆJj7y^gH$a vQa=0`�f̘j/`Iw8hr/ lkVod5lذLs#iٙApŤi.d 5y rD"IcGNǼyxyp}a̙L|5:( �;!d L͛7sa>ϓL&OW];AiEĉZe>Y_ xwZ Y`[=>AdRǺX*LZtgL9]r47˨px>&p{QPktڙO<BJskAM. 35 cǎ[oѫW/ƏW[ m5ufrVy?O>}:W_}u?N5yfOsssTgzjn݊iteQ 680P{Ce&d3&"0 IFL8+TLPmB\ӳ&Ν;ٴi=PDIq>/ "+mNc=Ν;Y0֬.$MMM444wވpǎ466RRRB>}1c#gБt!MӚSuVuqD2 N:E.H$,G5z ,r Lsi_ ( 1O8[oEMM W]uUTzw9b2G%}Eq39knn뮣={D)Ecc#wfƍlذ={ypM71zh Duu5zA`MF)!$q7!x<t5 ʌ0m'$HQi.\VD$kv>s¦:c|t=<ӥT'N3ϰrJCb[" a-ʰi/w料ݻw:}Fkjj(++Gz >AѹshaXFp\h@Jt @82V>*�MB@"a湡I|Fz9+La'k BjM IzԖ" l|A\=>:z'B<ҥKqkB4_͛oK/СCرcL h ]vW\9tԉA1x`:wZ{⏅ 0\!Ȃ�I; |af@uG(tВ@HPS� [2{_6J $2vЎr|Pemt9/3./ Q)ő#Gx>|8>P]f O< 6]v=Ŝ)6/tf^z =NGo,{ؐI[+<RLl 25mg{$TOkJtǣĜtm΅AW}nt>/2`٥79^ dظq#Ǐ禛nP-ػw/_E"~ܹ)9_Eq&].˗/gɒ%<CTTT|h Ƕj͘i~6Od(BI#�Dhr\h�{<`c7K;w.i4N놆|I?̀* ?3,qtCCCdaL2#$l\a!4W#gccLcTe4[; 0ڞ@ ʉNIDH s.4=߃+0kk;M cƍtM}x7`ɒ%tM\q$]a뭷b֭<C$6ą^6fآE@j@1=z3ABjDA! Ppg@4l{j>|<!EL�d2̙3Z&OPJb y mFyyy^%AkY$-V>|zɓ'3v<t hk6iL\"</ӻXBQ;8ξN rF8R D(jG?+ aAYs/;05[x޽{yg>CXRJoKyy9sO( 7E΋_~f͚I? Vkd #ޘ6nƑcoQh=U$LdDDcܜa^a# rD\.ǼyHRx{ .jly:t|3 6,ZO+ g*m /̙30`@4ڋwS-Zb)̞.2¤%Q*(i Pf:tZZ /rj 5 zkݻX8RQ{kI&QZZ XEV@˼g} OGJh ; fHo@EU)Ǐg8vm;7qCDD:YCJTuH*B#x0D<#.\ɓ'�3IyZ9s0`�OI8Z3c5kְh">PSSs?Cu,� UЩK'M5wͺҶGu[kDWJKpR@+pЧr C+Z*hjjbܹ3AT^I8?矧={bak6kϓ'OSOѧO&OL:>-#yvZdPK=qʫ$ei^z)oZȟ|O?D{: ?4ӡE 'DI&A+(4 ~xi{֚e˖sN뮈50Q>Bp^}U1bDKe ס x{dž ;}A}ERz*yqjo6|6ݼM),IÑV� #\rkBSH.}yȸq⦵R XhSNeԩi|ϫDWD!nE8Áx=z4Feh=w^ 0)H! |M.G~F.|Шn|24PJqlŦȐD~FB*uq>{.'СC]6EaO `߿[owv<"$~K2Mvdޗ̠A=PA~D]󟰶Dz@ke>5 xС_=ozuuu<3R).z葷*>EaZCk1a7o >J9t8F$nܴ Nl?~K9YAFƩqRg_\iNdU.{ahgRraϟσ>Heee:;|0o6;w{a̘1yv񖊅YDm@̝;'NpM7ѱcS+qOժ&J),?Ӕo~h*"II[icLDG`x{ CM_xZs]w-~x/ˡbժUL6-+AMx78pis /LDDDđˇǗ^z˗!d$(,N.{8xǡyq 7ХKEڣ8yf~_Я_?>OETJ\">*f֚yQRRɓ*qU裏2vX*[[\ ꫯr!(!z3Xp޽<hyٳg_K)Yz5˖-kw}Nskm Q0-?l6SYYyJ Qe/ mPRmiy5jTdZCcc#>3gd„ 8s`D^y8qb['.u>,˗/K_C˞?셡rtRndHl6_yw}bq +Vi&LB>}ZxA!Z*=z0sHHk\R)�~ӧO&L:L{n_={/})Jk(�۴)F͛Guu5&Lzr_dV!<e׮]?͋t/V\!Am߾|0/߮Dcǎ#K_gĻ}HEKRWWɓݻiI/4yo&+W_~yG3l*`<90b_ y())a̙y~qd2!xXd t\E|ZR!ӴpBzѣsDqBGOPZZwUg}[WGloƆ^d!X<3̘1#d2ڵk / R"8~Eh"6oɓׯ_T YNuRF9J)~_eЭ[S{\7uS__Elݺ/~<x>CjkkE(hb=p�/W^5˅k2x<r8êUxw>}:Fjs3?�<{ `5s;[_Dz믿Ν;Gqׯ</A&6555QqEV3{sΈMkd,v]d2I6رc̚5S>80 6|�Ӽi"?|>g?hE|7�8vWŋ/=ÕW^I6#m(+yg-ZD>}?~|dt rdMs{VwcÆ |_W^h\Ù Ld¿L3`"0і] hy'ٳ'#F̑ݻwG+M~8z(dD"E\8+ `ٲe۷iӦѩS' ȫ縞OX8N4fZWWǼyׯW^yenK> ¹o"^<6m|<@II `&틄5֮]׿u.] |2&@Ȱ]dmҥK4hcƌqɫ\{ʼn-l&SO=šCxh8.О&7_{Zc8bw Ӆ;; v?6o)‡s ԁ(HT^+!N-\?{OmQ~^DƆA .M;4Nsc:'ԣǞ;kKI9ex⽁8X8A 7طo3fBjSf!vAjV[XrrJn6 GBK8°.!:?( h׀d,`zO%gGHt0ͥ=W3d8gŊ-Dqz[>wKMMw/M*m[ZZR! >"2a_NPhNM\@"tFSVw(gA*9rhrhHR͑BMÖKJ)#m6* W8ـO@h7NjPEf8 :~R)6'?+(4DlذK0aB/4+BhAD+RWhٻw/sΥiӦQ]]K" {Z!'NēE2(7\`}Z%4u^zn>ds"۔67YRNy`3gNmm_@i CGxk,N9®gID:"%@ hhT nJ{D|tt;!ЁBD:kdP{qs-LDK%p, jŅ`<űi*Z n8&.僦dځ@eM)AC\|˹pDgfM ]qNhQx-yPd2^z%oWUxJ'ȸ&q/ ahL"rЀgҩR<)H=gI$\|R)>-غEkb>CO߀jGwѡv! q A q\' W: A531#=EJb(M;4lQ2@:Y@PA8gI)6)D3�)(?5=%8n E+OdrVr啴[g 5jǑxYAk[ W=|rR82uAzμi*JN:'Nph_)cGNCi:w`NN[4}k KrW2~<!g\"'Ѧ\Nqa9JmM!eFSԶ_"܄gRH9~2I/#NH%~vѱcPG]c!mcǎUUUyZykto-F}xIq&gBH7^!lt蜦KM9cyc}.g9o!> !q04\VZfKS#Fv<AN唔@z0AYJҌ0f2FrtLEG@ta'ycE<x_馛{TۋKDS%?&MjzbЎHG[JkG@$)?'[eq dR8lJJ:i-Fj|O|݈ )uHq Vs<C~;xf9ž={xihh`ڴi׏.]DVL;$Ѵ4{y PR.Wr6>uc&JP+)'=6oʡu7Qn#`SOf9r;w_u]nFKN(++Oy=h9eI;-. QK-MtI2xpU@- LkC$&с ,R nL0D#FOa+!ozjf͚ň#N Ǣ| E*h |A&4Z*4J5%jp{Z()�j2$^. 娪,߯D&2cQ:mQh C~z|MvE2DJɚ5kcĉtڕN:Ej8|QZi#L24D#MȡDPgߗB22M Tk=Z-"!>D9vǎck8pΝ;>\7]ұcS|q[J'/"27&pD%Yq=BA;\ �D3>H" h?*\DϯZ XhCeʔ)Fs$uKFk?h;Z0i.2!Pxa}d!LPi-LTYH)4t8Y)$ )S 8U0pQÊ+Xx1'OW^|S⦛n pB̙?2e }:QN ql񏅓mI1)gf2Z8 PyA(] -ZE}gϞ=ر vZ2 {kAJɼyxw={6='Nk$@;lYD./)̯jH#P~�h}Q]Mk urpF<Uŷ{ɸgcx9x f͢o߾ ('!\*0F( A J;H7$оF 6ZHc�ZIv!+9477&1A{#YSMMM߿[l2֭[ 2ɓ'3i$#y-0}t֬Y… Yr%JMM ]w O>yJR hlhc*ZK/P~$ A!(BӵݵO4Z@"A+T k9 Z(j-۷ 6;o>:vȤI1bD$�f͚Y%KDUÆ 6u`ƿ)JSb,fn/Q$&ۥ9* pI7/:I}"4"*qhvxTl6˲eXr%7p&M:aKC9F�3y_frh xk-fhm~i82!Hk֘pСf( jsQv Xl뮻ɓ'3`�t'ϨQ5j`ɒ% A3f W^y!|lsmQݹ9gm|cZሲkjFEha4mF)pњ }^: X؛2r!nʪUXjlZ>O3ydjkkL߸i.&L`„ ޽ŋl2{9̙øq7n}k׮P(k2,\q+)+)e !d)A^^G Na<NkT`,د:Aĥhtǎt҅뮻+ OR}u%RGa0fݎRH@L#YC@J !%dݷ:VZŦM<޽{3m4&NH#t<&COiڵ+wqӧOgŊX׳b vĉ>|8zsu7yy̙ Zif}.*ʫ@oҀP 4�7"]P&xnvuV<yݻwi&VZŶm(--eС\y啌1N:E1:{MϞ=Yv-֭cҥ AݧUl߾9s^$W^u5I7 BYVIE"$'UD -Ah(\ϼjvvO8oΝ;>5CQQpi üTX)P-"�F>I: 'Ara׉]mgڍ^{RVVѣ;vlt#F +&jjmƊ+Xf o& fԨIѣ Tu(g4T4 #"̫kGƯ%"[ex0PÇi&֯ڵk9~8ݻwg7!CJ"g=׼0M8%ѺcǎL:I&Ek /N2fx̆ ٴiO*F hh!�-͜s\@lN/΍ *L V\… 4iSL[qt\:P1A #T0l�阼.My ouؿo?kׯeÆlڴcGOҧo-3gdر 0 SⰯœケ_~׏o?B7rziصs={ORUYAWaϬQ,#!7t CTVaaP\];-Y͛7 ]MMM^^a|..>nt:͈#2dcռz W,cᢷ9yGAVPV_~9*8NBN/8AĒvZ,JDO[*ض_~'}WI̘1;Ru9&6qT81a^;D�?U~) |+G&}ES|a=k֮alݾTeyXFG}nq4մQL:+[%<>Lcyk9U}qIh k8=Z0>e|_/%-W'ذy5k׮fÆط�]tbɌ9!Cбc o\_,dTn-DУGwՓ'nzf<oP.AY]*k8Q 0 FEsv&@'#ṇx0\-c2}}AͶRϟ֭[{6lX뗃ylqCSna|(:*:7rREncXa)WϾr >өcuh^™&Vams #.@KJJ4h!P^K!P*`úEz7פFL)I}nOJi.1OfVĜWֱe</K~1j8q:ݢcqvB00qC|@EfMkd+?b*Z%R 8km)hlP8Pax#6oF}gƍk :믿>_KfK>)3g%$ ! CJZ|-+/q5 :2ʰrYQ4h={u\TN+̷BPP_oƾ/igqQG�_eسg;bhƥy B=B o*K˖/)qF3jHBmm0Bm59Z5lݺ+X%BtM0x04}PxH'>)1dle&@*  ]Fi0>>B9‹/;3Ν;[z1r8L %X '\CMΟ!%d/_ΐ!+)/3KJȰ3k-BmI(86_Cֵ Th!AP̿ R,Z|V1ޢԛ[P^ځoRNtС*K~7+g[^R7|kGNlU݇ɓc"p"LV?PRR52xX5C*b-gZN!5~}3x`**RR^^BG:Uu0 I(+u:7`K/i&@.#qdԨpÍ&3{DL tEaƻ(\4䞱u]F,X{&Tv>\Vasv 02 7/>a:Vj D=jja2+ ZnRm&˶m8UUr Jx@ܨʔE:#. sD:L#ǭ=//ݔd:4.T}<69eH:em#}6nZʕqбcGr\l7 )[hBpIc -: ٦(cXزץ 8T H%]JJJqpYj?g^Jæ&҄y>+V,c|k_ <0׽{Oh4yZ;yaE%"$ґuB~ص!-ݻy0`�7|s;}Va__}x?DnWbD]y.q"�PTlv+`رZJҥVi⣅Ŷht' ߛ,QH] 4C0>.!280 0#DE)EEEӦM 0O穧 {cc$)ONLRPYQIeeE)x- BD^{: &v̸R:p 7� M6 ?G<}wvҵk׈P)kcǎO<At)p>F./0.b/ʾq*T<#"_EII _='N`ٲe 6M$ <OJBVG8<$!R(!6daTh!x<d[gM$XQQA.innV=1<H pa UHe1B:Ս!4#^*$3.t:Ha)-ΙmBUxwyg"궯AT'lIk"./fȑ=>nsq}E8سg׭O>ۗѣGkq :Ww!É*< .lNS[yA$BGj7^1ݢ042<q FDؽ{7oFT&tZ+ ?y}#l"&ƪPDI7jnLMfs(K|_# sLáGygBz n TR@Ei9p�կ0`�f#q(gS/pqb[5yfBoذ9N:1yd^{5-ZDMZ** |fdtAq5 [[i+fyq]Rp ":r}&<</@UK'gMkeRBRuyh}-i*+_J(Ji*�ɷ]zѦa[ {Q:w ?Op*څ1;5kvMCC7O W{ax\3W]t>kTH44ԳnZ*EAn2dk֬n<g5&pٗf ؍f}snQps01ѷI&pD=k֬ηСÍvra'vIBǪL@J ӎ&4IǑQ9v6ƪ?󿀐u]rYIP[5\3M)4ݷ'@&`ѣ;v,/ﲰt֑ ?k,Ǝ&_h0|"&Eo�O`''8o&`7n;DtS;|0Ƕm[Ak&} ˂B7J***ѣGh}eɒx6,d<>•|3#L78&OxN (--O fsH2lI?5)Ǝel6ǎ7ѣТٖm(E3* K:c|# �l||^ xV7n J?#F <466ew9r;V}heTmU†CiTYU*xEP*} 㦌ֺ5h&TsI$|Jr-H[:#Gg΄(bCS4VBPlֹ@e FVcul,"G*n-K2)in6#8 H&L9'6u@B& <636ϿEiGԩ]t9%&>acZO". <. !ر͛?`A;Gq~q6Gt:I&] (M;8N?e2PFCla#�97tI. P6 8(C€S}?jJ ! |J&hj8.IT({@"aX`֮.L֔f I@ SBT�‰3]tak=/H0a%5y>A`,R|N@.¬H$ rGRP$;*8fht0~#Ge%܊/mz@9;B*͛9ykRFZ6u/~7|}sd2TO+D¤?hmH\3D{HkS1zpy L 6) @G+$.ɤN s@& ;ab0,Jilk\.G*BAmm-wM.^F<kZdz:yH':GD i&>3i3^ "!M ӵl J)& ӂ6ڵkԧ>5J Zkv/d2BLRʜFJH$%W\95t-`1-X&L-[nE'6,])GD;-Jr<q42d2^h-0xd"A& kց@ $;B;ɌEOs~ ~ҒjnkRM1]Hf/$^N#YihUp󽻶6iIzD)|#s2Y%$A�$fsd2MDEEl@ii)ld0u'l2%vRhV_Sߝ#9r8‘;v{2vxOq|[**> +{ Ev0Dw �P|@sàa=)ef $TRGOJ%MQHza?l[Kbvc(2@�lozHMϴa 9(m7ϗ{!r`bk}5 Р$T*~)H09Nl6ؕ._@<Op |xg_3M!d_7 OpsZRWp A8p!^yeKWxN$…t6nMM9 JJh ]R_DYYJAii �4kD}aϟfH &ds9|?K޽ٳw kZsYD?۲:6koeDl7-H\2ptN̅[RVVf~&B7EL98Ni\!`,t RpqJFWۏ0B*q](%q]\y%% $LdBƤt\�moH'4EQ5 hh:FLУw7&O7)$km⚒Qx-ug_gĠS0+T2 `h,A9v|]00ljӔ˩I*AI s.Lf<?&$CW^yVgҡ*p =g{ۧ`\9R5=KG}}T)^!H]r9Urd!LN&aS|)K: u@Ĝ{8>3c/ a0ҬйYrDQ'&挦J&q4p]wq{{H7AEyn[׮L461Q!ṹ|.{>=4KINYPS=m4 kk5( #tQRFy1J44()IVjn9ٳoT ? 6~EB.$Aan c+<v$^{ymAΝ5kw~/44QVY/Cyy9/()I4k$ZfSRB&cܙ'% cZ2 ^#%# j%rFJ0U܆d5!S8RJR<)mɓ')It*?#|4\+WK>5jeeeq: neG},X'S^{宻>E~5!9jnB(zYp4677{%"j1&u|P?8Uu!C|𑃀V93<áCGׯ_Xؖqcr&}Zk3O?W^0o}[xutВ!W(əܜ<E.hl̅+T*Y@qK |O�&kW$I!ZPcQE#SYa $$Z\?TTrXk0o,LUqBR)ο\VRʀK7P:&?'Kp%3Tw`UXb-z2k,n:tp'ɛ墾vǃ w'dܹ466g`gҡ3JiȀP*PO=3 [0M5(4yq1Cc ,;f) L:/|kׄFMEY%/<y2<�#FXX∏]<(>ncjN5֭%KQ&ýS* I"@-5JK?LGf 'D,@d$89X @14hRĮ%(F$z@%PbmiǤ( ۇKD J #p [y á_d kEKSq$Mj�/ N=8HǎJJ[!'+<s/7̭J޽#-1N_́&t\.ŋyYjBjxAƌ+}$rq 9#r:uE,(7䅴7*BfB >l8e d $%̜y=O/t>ˌٺe =:gذaqxTVV?Dp<M&1?o~bX… o˚5kڵ+vw)+B <!ti�*c: !$[Z,c Sz ]2lg�'>F<y-XG%# [s ?79T?DL7Y}s DP&́S 1h/qSo~<Lz-{z뭬Zgy'x"x>O1tH+Td2<쳼Klݺ.]~ロ\7 7$kEB!\d$8wm&R6U'ɳΙBkS7K`w0tξ{QZ0fh0h /}y_tMqQxI T0={6/"`|{oSuzǤ8RBanRzC`n!YḶmf$Ù^uޟ4\20e2.r@sJY'̩h@h\'ɬYܥƎ06ayy9SLaҤIر^z^{7xaÆq=pWRYYyFf7 o͌9cʔ);Bx)B!r_%@%" AR-@>eIpfݫ7_oh4 ]:t{w'cڴi{ <8vCDڴy ctR|g̘1_%cƌTh! S)]¾N!Th\3? K 3n)P<PI%%ɔ w!q Ck PgiL ֮^#fh3"T>CmΓ82 AYˌעtάʐZ8J1x` >9^{5^}UΝ;smq-еkר<YhO=k׮K.x|3ay6֔A@"#: T2MP0׮*GLֲB@MҊ}ҷ}VK} ?uTN͛y饗7o ,`zL>(zf}7|'|ݻwS^^̙3:th)+f= Ӊt5B k|B'AN� ӫ[Gkvi@/ &:jpSk~"pI,=&L{/r-C #DBPgMЉ43Αde)rZ-8 EP"?YaD@,,˗/^`ժUW\=CUUg7Ջ;3o;晆&y<62ac&*9WyM=:UУ_ZZ2sJta;;2B2\MMY6oN*E t5JQEi~SS?< ;v젤ӧsw | 4[n3fPQQ}NtzhjZa>gАޔjS"׎1 ?"ThCh0xx%0f.1֊}%q~|1@< B |RtkOnZ(Lt]%́CSY4WATlه?︴S2e={67L>q?Sƍ`I$Z蟬 $J Oa75'&FZ\B#cq'R(ΐɺ?halüNoВbGR> wK.W_eΜ9w#ѱcGƏẅ́ ix| hX ҟq (V0 cO> 2̭o._%# MÛWN٦�-M� -H8n@i6)Hkslo!p.@|8ǡ|[<o p ; 2ă1Z8Im ]C+Sd3~,`FcB@׬AI*L4eo=h0j!&&'Ofĉ;vٳg#d̙t-m=+cTh J|\V:&Jiu~ؘ暙^pfhYtiyW~Yg%# GY 'p ;B�d"kIv:t2TcJZ&`Csf)))СhpCΫ'rijػk?#1QG b쇆~!l-Pbo.]pNE~9rpy;rXhi@ gZ�a5E@ya;d #ZI~'D%Lҭ[7/:^ύrq2~amnhlؼd)*P %Z3i%´ues$I@sD#APFIJYG*R% Gsa rj6Ʋ"ڍKH5=ӛ$rٻ3n"H"0th<iyXK)M2 i2~ 8-q%֯b%0 kp\snq%aUhO服SZZ�VݿƆ,~. .Ŝ^DB6 *HḊ5U7A"j7Eu#RSl`S~hacU�Yו455{F/ƈC2t׼O._EEy ]TQ^^JYU* Z·Ʌ@[ak p0l1D7�_o۩uar4NҡC>ieU HXf斵tOvi v>ګб#]jdO 7]O E2'BBcҎ]" . V ![,r h4H?(_f&P(Hc"0 !"BݹVҹ6LPh2ޖمN pUpc {ac\LUV"T�dtHw-3 fbcíM*(si@IBN4 5{ Fp3nZh'@ LP 8ٸ'@?_Cwѵ6k4'O6Zlѫ`MOG2N(ȡe@f2 QBqp['9ps4eG!\kIĆ5b"vNZ4Ei@|ظ�-2 >#_9Xt6ܚpZDEnpE{ڹŘx7M:&%!qE>4nr`noZ8g%H%\ /&xgGgkƌ˃~Eg [F\h(d7q$@$4R!>d>tIyT),cFi[Gl(|/AKzJdbD@b+eUڤ4ߌk3LCK=o-Zw,h#q9Xߣ {KQ/΅'c+9ɇ ŊB B"kVo m1ar\&斅UH'+:,V/n7?͖-xg??NiwACBD7t%Da" #hdXgt R\tyXp%OjEaY\Cꑺ ~.�)ٵ$Gn$]ƒwW3n;-l@1r>^a 7}@o0xM)Ulê/JѦJĮ:J1yk&R&Ḡo\C9Y~ Gk_{{]:1jh{ ѱz%2=h+6YݾAdaBPrLuJ4-̜j l)cZN-䰬0"Y؇% O(t%vEB:]RyykT&' > |B|h24BSC.߭o"2%M!cG*Nd* TV%W>wO.]:}D"/+8 T3舺޲5+(QG G#|[ԥ4L,5f.RwP U�Z"iɣH!E}wЗ>CYj%[nCc+%6ɵ g�\l_ `k[>0嘅@:&!mJo*6UA{>*;0WFM]]{Se^)R FG}z/Qmqu" N7 d$[W;L.Ilq!B{z"=iU|FCR !ǎ SNlٲC>Dii)5dɒeߔj2Υ|RaZ?R2L~x|@^5@Ng?K0a+V;.^{ms]ӧ}v^~e̙3 zZf_*F|=zrȑ#Yjƍc̘1Ql,-°gBk4񵵵<Qܘ1c6l=^{-Apqjkk7n\xE|`㥁`jS8j(VXO>}ka,\޽{S]]RSqrc k{CO׳j*^555w}R)x vj{KC,jԩbuٳ';vdÆ d2 4'n:6o,]8 C ϔ.\J|ߏL]kZ~SzJX€Cr}QWW3<CCC)¯z_77kjj>|8۶mc퀩2e eee,ZÇ"H8,a!9ghu],Y͛7B�`N<3go3wܖ,6)'kBͱ5k"٧O&MĆ X~}qqC; -5? in6gΛVJ)`̙7^zw}7s7B⋧%-mt={ҭ[76nɓ'`ԩSС .dgq~qYCh1_~Df̘OSfZkjkk;HӼ ر#T.' a5hc>|8۷og֭1555L6m۶a桝[q1)pY ø<]w5wu'NLiˈ#g-Yy7n8m4u/́'8{\6tG>}0e}Y<ϋmĚĉDɓ'3cƌh}EXzwlڴCEM***[ٿ?+WH;ߠhJ0#^5|ꫯ-u\CBPYYM7رcyWxEaa]X { 2;vm۶7&MbȐ!̝;CP[p CYs} 2#Fϒ˙h9d}̙H)y饗ؽ{ž".QeI&uٺTZ38L2k,yij2T6xp CaeRn:e}?VS;v,3f`͚5̙3'EaPBzMMM 6l}h1'2w\j{Q(\0Vcg2L< ~ir\4I L&馛;w.z?"�[T1bvbƍ.wy'J)^(Hg_N18;\O&4�},]GF+- ]ee%z+Æ _dĠb,G`qׯ�{ɳ>�u]ǼyسgO^IixpJ xg#'ac̙4551gΜ<&D<nAп 룚wJ~Gcc#o@1Ŧ!pOĪ*n6^z%Z«5gΜ;믿Nss3\.J-ϗ7sVWWS[[ݻٳgO^jOo=:> H0}t7oZklEIJ̙32e < K,*,$7+aH)ٺuk䷎o?]t?i;}u,"m?L^?=p5ڟ[0o^!4h#GdΜ9O*|=Fy}E,8[ln[Zo^j:t( bƍ߿?O; T*ϺuشiS^@8۾�??ppL1ne'i2ncX"Z57h nvvܹs9vXDV /?KYY b׮]} |ӟ<aZDp}O'0a4+.EC̝;+\ PJq72}t̙ŋ".OK CL&ٲe y.l6K2K_[neAmh3cFw �vŎk ˀep 'c2[naŊ:t  /'Fd4$>|8N]]]eA Iٰakd!7p G)rl0&>3~L&vbiaWRnVrO?4.D":.^wjWVVӡC~_r<B¼">y\,//ܹ}ED!|_eKySk决0@-W츞ᾏ-⓬뮻7|S&^<ﰰ*`ذa̚57/I~GqxovNobTUUi&Zc&NȤI/ISSSxKBrg+ kcgi~@I0}^lveee|r9fϞV.c'p<f<c,_</E2;N޽YjUo}7!8N&f`<۾aLd lx XhKWD"ֆW^,XYfE$xپ>BO~G?[n#".o؅q ʕ+ٿ?z4C!$ :w 7 /ҥKćhmZc6?~N8rѵ_�0a^l>S`'X�ͼ[g?kN ͞BooRRRR@+E-. ɰw^4]t!JErD\.G*ѣ|ЧO2L϶Z\;ǍOyyi[$I!rLU6 0rH***x7ꪫBS 7˗h7n_XdI4a[3M> kUKCCTUUQRRxy�C !LqF:vH׮])--LjqH ^/| ?F ޗKBwQ}+섪dڴi1xVWR+-Kvܙ=c n~/\^&JZ3g}L2D"Wƴr<t֍뿎uxYb?я;>qWSQQwbmr`WaUVVrUWoGLqiaR*"j(G< �'Ns,_<1+))waѢEQYۿw8qD={<޽l6shEa!ӅuƨQXlGIC LkX!{~{n۷/k׮ȑ#aBn̙ >Gy䔴x\-ٓ|Sbɒ%G?bڵyLy9i.֠0Ws ڱ)hu3}-)J*:ׂSn° (d"S,Z(rlrmkB", ]$W]u'Odxw.�_صk/bi2V[s=MMM'?_kMڢ)jC+:@i f?Y�~^plFi?| >( 3tɨBRݻwO>,_'N9/70[kȑ#ѣ/ɓymm.)%W_}5'NgZ\,,PJL&7ɀxꩧ/~A]]L&6ZeAMRAĵ8h�.\N.iǖ0Ni A+ 0O:9g( ? C0k۷lٲ<`a'"0عoG[]]ͰaXv-G2~<y<澱СCyᇹظq#<˖-XA"E DpHtQP%J2/"> &esY hԶQ~ WJ4heee,_fڽ)=s+ 6lB~RСC;y穫>ҥ y衇<_̞=}4Z%<\ 5@aLd+q nH[&s =>�8N`:�<3>6( ?eĉձy*/sBW; FϞ=yw7nyj> 7L];',Ko<&J1yd~#F+MzFGSJFJX Zqh@Fs<Mk*!T E&s Z!3ۂbp|Jƍ… Yb#Gl5y"> ն1~x~߱o>:utJmq|Nv҅/| ۿ7|3ӦM;k0p@/УG^y8ȍ7)WRV^B#<xz+]*r 4> !^g"V*j((CDBHsXnâ0<Z3s[׻woFڵkٽ{7}- " *2e ?<+V`Y+r̙׿f̘1TUU5rSN~‹=etF6Oq`^BeE5{v6kQR.8Z~D;E?5@FzeRtEaF%Tj&L/~ /_N>}Za`ׯcѢE~V<1CsD|skn5x뭷yٽg/~7엩?~Mi38q߃J9P3T%4'e8y<V%0#1 hMu]GϞ=YjSL(a*ܢpu]&O/~ nJUUU^j`t]I&1qDy&OLOl-?4p8;ky?{8z$Jӏ3q4Q[2~Ȅ׾q!4EC& G69p4BdqN(�kرݻk#EsL<t:͂ ry.yL&9v/b^^iS6g̸Yfn+�!Ra:-X HE~Zh J޴�`E9PFILY('@4~$ W�ZktPzjN8VE 0tШp *9iӦ/uVTA&HRs6Mٛ2eq 䡕IIˢamZ%PEk$_I" .p o1ۈ$-=ͱ~z>'ǥݛ},ĉ^:'*OqxZڡI|$pd( 7i&MN"ܦm'۱BB-%:<FA洩^l&OKggc^  S=z4jժEXD{!`ĉTUUoF$AK߾}Yx1˗/++ 1|U|4fLANLlk׮u >IG\hžݦev4ZhdZ6-”oF:GȹnS�e>Fk}> ?5.U68p`f3`bs!\uU<x޽{0XSxQѣI@~3w�H&La}}456rN{p|_8)9pd͇@mJ섏i')A0fn+MAl_?`%p;K6-AA5jO=| اW'VyYz5Q}E!Ak2K.|3__x9r$:u[n@0mД;(ӽ<?)W:x\G 8 `m4X8@"'酌i eEAL(}@o0xx8ܸȟ  5j .dʕ7nݺENx"h+R :^z+pM7ZRh' &O;ã>J*]2dFŐ!C&HU!@�!#T)W_ǘѣN%RJ0MGNgT.I"Q; "ฦNpqRAU:h"P2p7QiB P% ]Sg 7`nO? 7tu9][[ː!CxWټy3555y*\DV8ÕW^3<ӧOz8tЁ|;>|m۶e̙ó>KEE 4c2btU(]6m̂ b+&rL" Egt ! �ad6c?L*Y_PM`y M0l |]=&`#}E(f?,-Ԡ��>IDATo 8_.(Z#eHǏgѢElܸѣGSQQ_L.6xBpwSO;ЫW/S)pvʀ6m\'OuV֯_y7;w.Dݻ3|pF\}{ihh7>&mat A`k I<ZVyβr TsmG1/8vC D;>(,p�<x0#F`\y啌3HPD`{$3o<( r:X9oJ:F)Euu5zbr9cժU_W^yIѳWOr~'Nq>??RW_o$Mc#TZdR8zA"a'nh CFh`.OV=nlx u]ƌҥKcСQ[+Zw-??m6 vE8AC2$LRVVFǎ޽;W]uͱ >`+`<ϣq\SOcaPZ q&ՔFJA*@J͡CGg֭[yH))--iӦ1yd;ĭ;ZU @ƏOY`woBmh1[i"u]ZRJJvk bxFqH&p|d~^zS) w]̓O>iZ:d2 ~@ssǑxGy_ 7^o->) vt< ѣGgvp,A!u;v,'͞QhY/vqB0q )q{9L.L&C*q%i* F46je9D"[ZjLT*E~>}:hhl`/e( v5D)E"M2]tR9/^OZD֟r cg|O<uS+$%_ǎN?~<0{l^<_WHRS8@:-pk{u\TxĈ\s6ouk(Rxsىc2j(~mK׮]>4㿈"ZC<-KԩSdٌ?U&ŹԵ5 VaRcƌC=j[B*Se.9/~'Igf=gˑH8(e4Ǝ;.G\lQ3l'Zkm[L0qlagF%%%\q,^82 I\ ٭!t5&oҤILz2eI4~? #|?0_mwHS* 8g$Byۋ^vԨQߟEqY">*;ٷo/Z->j:W/B8RX ԬT"읜JP )a r(rr96WRR @.}sȔ} [:uTÖ-[hjj(Shp?~<=z^8嘶Z 8ɄQ5;S+~(؈Ls!LzaNaC丮Ks <x!]0<h&MDϞ=y뭷/ ">2_ܒ4L:˗sqfq#*M.FF)e Ri:$.R< ^4H$TTZ4g|qgݺu3F ɰ.yD|keڵٳmTEC!V?xwrI,XwQUi{ow &00Z 1`0֖jܩڭZUcnZ5D-UkgfA%.de0Z1`:}$!N_UoNϹ_|>@%f_0k6 R{vOnwۇae ,SmLvH$Ba"=)So>`ݺרGcc#17"yl޼;v0uTƌg�;Z9s&ӦMc,__P֧J #mOiݵCb]twQlMvj=͏ ]HI! qכłaXIwwP?IR\\ɓYz/Qť;hexSudrJƌUF3l6RJn&yΞ=Keee,5r~pv2Ķm9J{{{~BgmĺcD¥DVҸٳ먛6%>HJضh4C=LbZt\\WܠS)/u:dK+ËHf2uYx1RUUEIIy ҩv=M~fUx饗X~=sODH$r$8#m8v~)DERf̜Ο_3.8nP\ C�Z3T9 ;6"lL7\WI E%~vk% @,W2g͚ŤIضm7x#1~\F3㮻J#Ֆx<N,㴵qA9BWWp.]J̫!g$QZDJܤ+v%J f!Uf5ٮU&Oˢ8RTsn�e1Z^D0iժU<S:t!p84lI$,Xg}6SK5侾>;FGG?~^JJJ˨gΜ9L> &)UiPM`!̐pJ'ŰLzT$$}Ia8A ~E<@)<#eJ$BxS$BP"R /"ASPdn7|gy2 5l,n�{1***())!H$0Mn:;;I$RUUŒ%Kꪫe„ vK=<ieҐ:M@(d?.?w5PWD^zڧʉJ)x!+E("&u6ʰ 01/�OWj'I4Tb$4uc?5khmmM)`F]@s!N:ŬYé$7Zf̘رcs8%`;.)*ڴ@B\s1R$E'``XVʅǩGMet,(C{B+G6قRr[n,G<$_Vo`65COc~7[3sO?6 axԆ a(ӧٷ(-Ӱh9 Qe ׺�WN!$<(JmAzN$ЈL?NuWfLR@հ{: d}h_?>&Mb!R&r*7a sMꌌ7AOZ6T餁 CXZx E¡roJ ;'4�+mc<S2tA$B4�@[źScPx='s'EHF3P)P(bѢElڴNhd*`*u@:),nW^'v,vuv]Ior8 1y2X^9Q LTE䳽0UoKίm UBtwM>2!z.x)k.%K|Ga/;7s"l5'N _=E{~~ť&uzDy/&=~8 C\C_&p--#HdQ`d;3 :w޹PIwKŧ;ɨьƴiӘ<y26mbŊYʹXsi$6f_\s k֬ NڄC\ *NJ sH @l6u"PY Ov3C* dNN;Q&Fs)a2e˖_|3k3Det=O[Vs}?P!2Jp$- P i`H! 5BeZuHlO),=s6d33k`;ʋSP5�Pa5P5wfhh4m۩z^~emweQG~ζ[`S]]ê\Ys)j/T2Ÿ3* %0F³U_D )]IH"Dlg3f _-W+Q2D󦁾SrFsAJOUSSW_MKK vH$+x<'|uN#_e˛ 4A**:㫯8nCVx[. CibzEb�aĀab^@UEEXJ`Y˖-̞=;ߛz9}6nHii|+ 60fX$jpv\!&O)%:•6BFn)3Y3VJ %a m" K E\%p0F)0eq;w.eeelٲ%+e>|M6gMƊ&fLAQq1T~^m@/p)SBYEK !dbJGV{= ["4 {HW AiVF3Jh4ʼyعs'X.O?&H{n6nHgg' ,^IU0 3`Z&*MYRuDAe(R{S)ÔP P0PEg|tRoή]hllL,IKK h[o9sFhitZTIJž g(ѺZj4&3gΤ-Zt&u9ro燐fL2$KF3 ,\Μ9DڿW^yX,FSS^ta!y4Q `ɒ%b1vܙZ_'IJ,^V\ĉKU虡F3=*fֲyf9q=`޼y^,ά3P%dVyXn[nٳ~466S3-BZ9m&k4`x?D",\۶Yv-HGy+VFS2YKQ8虡F3gwl<n8Z&NȚ5k?~|_04vSh ZדRRQQ>eYgMheaFS&?.7k4ͥ#L\RP)!Js 9 Zj4o'*2S(;L 5 e0e.TE)�2u0Bf̍�׹d\6 #]s-; .hhCʯ 5 5^aZ4! mw5Fh4 8ȵ0CKڃV l>2idP\kQKT?=Xk`�;O}0X%aDb)Zm\ %P1UAB�\ A= *dn6.@kDG3Q)5rF^EZ̧> ?0 &Eb͹RA3w*ps`;M27$ FьOq(jͱ'=qp9a0Fb? H|;(ϼsQx372#ג61GW�sP|` ?!Ea>�e.,~2HOS?C)͵@YPKی2ېЏ\+/Q >޹|4🨩W͘*﹑`2K|8 HPJd@kC>yZ~ \ZX rdA)j?^Z�靿x+ׂf`2o� x)7sej< WcYj|ڐO0biByZ,򐵡 |[Q!-oQSvY�F>\ ?׎ÞQfnJ>`mȧ~h4Fh4Fh4Fh4Fh4Fh4P%j8>yQ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/config/img/wrapped text.png����������������������������������������0000664�0000000�0000000�00000315541�14332737457�0024153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� �� ���0@K���IDATxw`SUo$M[:(P@6Vv U{U "/" (dOF{ҘIۤ|iܜ{'OyXVB!tBݤ BIgA!)΂B!R$!BH: B!HtB",x_\Hs=]ᆜ3EO (Sun_=jx\>F[ٲk$Ths ۳mrΤMv3?&?2t}zH]'ZJr՞nvPQl]3i]쏴ϰ$?C!"EYB!D BIgA!)΂B!R$!BH: B!HtD-R OWCC"Hg! Ue]ժUpBnOD"# OO \rɀ%F._E2x0jm۶/_>իJ`4ҹsgFChтE0glBCC1L48&M.!M7siuYx15r$J(M% 猷$Q*T\.]T*)W, FC>`{hZnܸヒϏ5kעp%Kt)w֭>}___�Xh6myf)RZ͆駟PT -h8w:uQR%OoJ <]K"{Ig)cd2p=]wp" @|\:e4ˁ9s&M70TA+:zt: z=ͦOFW^ɖu5|MO77ǒsƻ^3D²K<y2.\`(J9Bpp0Vն2x0U*W<|0uӇJ(v~ZL>ӲE t2!!,Y?/ΈQ(Y;v0v+R`^Tj֤B f ꯾BPY`KSL!$$Ù2e 1>}S2d`+N1}:ӧO_&W\T^<L&߿O=3EGΠ(Vl{.bޱߟ u譧ǒŋ7~<nݲ6N`0�DFNmgӧMd�|ҿ?W\ᏽ{5r$wδi8~Fu8r(eJfӼ9.\`4o֌={]ת+cGʕ-ة_ZENXt)ƍ,\&P~}V}=իUH"|پ2BmX#?C<)W9{!!!DFF'44mwDCRl-Kd971i4›�'N�@RXd ?hDo0𞔘f>>>ۗ11̏BVc2#4wn q?`0P(Lחre˺}zDFFza|ar7E/s&rKKӾuGGIg)գgO򇅹<VZ ڷp7nt{2vI֭=<GlRĖ͛yw4i??ez?q#F0nX/j/3s >m�yaҥ\|1c`2ط?GnݺDh@k!!!tL_Y3g&{dԬ33c0Oo3{< dSfȑ<V-[bX3v,W^e4hycDEEѴIZidb,_ao-[l63r(n޼y5ym[T*%Kd),A\Թ3^ e&OOKy碣t@reͨѣK\ؾYM6^OM9YrPTܿp=ηoNN0eo.Y0>�gϝcܹ.SF Nɒ%9ck׭?tx\7w.fׯsUiu0eA)ȾMm:}+Id)j cN<z|1hղ%foѬiSTZNG]Y&8tɥ�PL>|ȼ(n޼ !C`lݺ~($j: ɉp[cCGbϝ; OV-[vV|%8wsyʞ3JEXX{aɒ% 'ç?z 6p%*T2 TR\q<DFFZ.6-1EꤳkX�P~+Wk4@ Z d+#w'Yg_>l5[,(Nwe֭WPTM&ofvaww4Nd2ɀ(Xnf8˝ Wj? 000e,Kje>һo2SN>͟"qqqܼu/-$=ke �pBL0ƒŋ9sӫgO^o 1tzK:u!v6osN|];wp֭\Ii\G`` GXѢ\v w^vhܸ1�/^dET^ݥhBCC=O֧ݎeI̧]zmZl18r31f'3I/SiBZ6vZ*˛7/w*%=0'Ʃ3<-=___4 nZNL#OTcYb[=}ϸSN�ǧoiII䉎a? .Ijyz/z>q(q;p&ٷ !BIgA!)΂B!R$!BH: B!HtB",!"EY=]debtE2I:gdMve&I8^_\sHo{&w)[ 0EGٞRΙɮsFGdgXft­N8j'aaa�ܺuUN.?2 !BIgA!)΂B!R-0~NY@>z]yE=VzE=7041K- �O=՟f28;�G%wyGuE{M3B!RBHHm BdSgAZj*k@gGݺ1}4cZ 6V͚ZÆ1x`Oo !r%: "n߾ͮݻ7/-O>�|:`�_,[Y�3{6VdKDB X"QQQ�4mڔ)VһwL)S(_79wȂUҵ+5kDTRretR\ٲp"6mDf<фxX<m۴aYΝm0ax&o[vڵX,c|jQ#GRn]T*+/O\]yB<�^o j}}1LTo[a2j0}}mb2B P*tԉ]w+Wbn_wם;]޾#_|T;lU˖4i҄yB@pd.T&w>Xx1gN`0p,^LPPG~nݚM7PI ȱ]?xl# ݽ{GXf/�bbbqɄcwG;wn6iW_}& y6MwmdcN]vߟx�F`Сܺu HɊĻ !2fӦMo!Cğ&�<h[,ZÆ:J:<[VMK/ĕ+W<d!r 1: MOT]MɪoR`?r>Cӣ{w۷knzOty pȧֱϓ'eʔMl8cǎyzSCx.�YĞ'<u쩭O+V8<(}O۶q}Ď}ɒ%9r7n-3c Oo!rg$ xvw 4DBQYB!D$ BIdA!)ȂB!R$!BH" B!HDB",!"EY (((˧="%N%wI!DN!ł8oVUbo,"gȂ!"C$ BIdA!)ȂB!R2{Vӽ"ltB3pn!<{ͦ΂ODδj.n~w&˾yNXN-Btʘ:{3V`ӴFaV(9ZdV&\L@/o\ʝ#wPT!iR0fxk~/;eΜ;wbs7i:pE۸iP/ʻcܻȴ :\Zbwȟ?9Í[x:�,X�>ns߬Y;>>JlA|2K�&3guqhkW3xjzCIsJPС[2OTXmۏrNѡm]jTP\QmFax+[ԦXV Ӵ%!DuT" :E1kCJ%ibb덨*-F"yx6ݏeIn; g^c/ƺo/w=">^ώ_S\Q2c%н뛴hV#A^~,=鶣�вiMʗ-¹ܼ|]'m>n2ԭ]&g; o6x]ҕ;.guqikLluj!o@> ΜsӮM]%�3vêL؞lp.j 4o �f ":zӇ"Ky:*c ||&4׿V* Mu3CT* @ES,ZiӲV@b(Y"?2CsE7�P*0-r<�&F_OWSH>&3�j*}^ -tl3*uHAU䏯 .m-T*J%F%Kw PbIw/qVWC^rht1 RIвY-�GVe_xvY4E0{&`CLḭPq:oe̍( ^{5Q?8je*vRL%81n-�*Xg:sŶ~`ګܸi6̘ adn2Z8+Ҫy-]˷nx綪|R?͗e|>�^#VNtH7x!<' 2hW:zB:B<[<{U+^<\xE�EXCeAAA;28ZVf *O & ju8KH0v>In#$8Zl{N3j�2kҜ ?|pN+ќjSkkJ~r�j*oP"Ɍd )IՊ$s6ĉxiJBH�ѤpӤzzle6}Q�ԙI)Xʡ#RvO (D%pv] v =C<]d%Bd6O싕;x0y±AOWQ!Y"Ö} G_K8mNZK9%*Fg?s`ZЧ|Bx!,!FG/0VŸ/�ω`9@|M3V(!DŊRM.'ZhzcN$% x9B뫢d|:t%^�DHH00fXk qטx+͛`ըhټ i$!Ȱ};Wkvd.Q3?t)1OcO7C!R!!sr"%Bx,!"EYB!D$ BIdA!)Ȃ UjȦkB,$z=/<mw}ZΝZͭ[^j !DD` 'Z7B<s$ BIdA!)z:Ya;+oz6jU~+!dx."W>xܺyUBdÁm_=ȂXYUy.<k'ȵY_HfCx0t͆C䮣%~P+rj !22=1BOѰku4;yl̂cx%Zj*kcĝ'ҫW/OWE e=ʖeWĿ (@lSE!(((]p{̧E8Umϗ,IŊ^:ed?$<<Hɓr*U۾vs,ܾ}]w;<5o_,[F>}�t�Xٳf0glV\Ɋ ϢD…Yp!�Fd ԭ[jaòe6|lYO=~eeξmi:Sϊ2^#GȲu7j8Zj.T(]c6~!!!L?>]>)'3sƌ իi&4x۞z&-e 6… '[F?tx.#9%4o֌U\W_MWf̴:z7F<gS|XjUt:}e,Xʕ+ӾCΙCecEȟ͚1#5 :dJſ;m_w߱qF7;FTTM4u6M&vލVK 0 0_}B !!`2{EZl׮Yh$..zI-0͌57x]Bvfh|}deF'88Hj˜cz*vAin[o9͛L2�jլ{mۢR(Y$Lqg=3n8ж3f0d`j5۶mڵkΌ3̕K.1q$^]B .]2d`+NhРZDT2{N>P;\իgOcO)R3fv:ʔ)_?8_|;urii BRq4o֌7&0W.~G�}Bx8SL!&6ӧO3uT"##iѢ-pik"E6l _~oΡŋ3}4=zą 7~x _\zաޅ v؏6nt9ϋ`ƏG…9cF&...}7o^/Yt=xbw X|9˗w8T|E5j�4oN7dƍiS;f ӧO_&W\\*+W.͝l̜5+ն֭[?H0m4x"Lat|9gw竽f͚Qpa,Xŋ4hڷw8??>ȕ+cnj!00vt֍Çdb>x1|8%Kw᳁1Y;vǹ ss8#"##OH` l޲eyV"γUH6V'@dR۷1Lj�NaÒkg<߭[9u:<]vf͚�h4ܾMNXz5:o Ohhɓ'Yv-ʗw[ HHH=cN<xիSL>|ȼ(n޼Z??J%i+Ν;Kp:vģ:Zd75m;q 0x[֭[ߓo޲'N`2y7\{jqntVvmF#wIܶWGa0(\0JԩSL6 :tF>Lzi4c#j|=zħW@F嶣�v:7!!!ӴiSw+@V#:wLQ*lݺӧO9綾{lg>ޝoΥLJEll,?RJjmǛNGS;/>|ȸyjG!ssJv9?o$N!zMT/>>jm~|6lҥKTP!Mm_ϩU%T^֑缟ݝoN5ɟ??j Nr &>|WTz|l'mmĉ΋w7=+e;ל?9tyn_jwi卑�pa * ػoaaa,Y3Oc0pK/&((#G�п_?Znͦ͛EosF.;<'Ncɒ%|2`�?3F@llC)-lbZ1i̚=aèU&zVK|�X,`0luT*mŒObhD�)ws=1[,n/I&MȱcLj>wJ6FîݻYh}u[RMֶ nj][Zt:ӷ/cbZFTb OS]pc~.@ӹ|+O>c-<z_BbTzͶ}||\^wnFh0X XT틤Ιh%WocgOw^ \Ε+9c:z [zL&͝;MADFF)5%~~~\t%KУgO[ qŒxxbbb׷/ܙ1l4mz`{7y|nd?CKpSd_Jwi%c$Y0Ltԉ#F`Xҵ+  �9j @4!CҥkWN<_. P+Ǹsw޽zQT)}ժUsԩSǶL*UXt)\:< e9~#F`ر/^<M>mAAA̜1Q*, .̞?WϞޠAb س40y_,[fƱ=ke rι8pfΘAPPkطw/uan˸r *UruSW2x0={p[f`` :tp ם;ɗ7/e!ɶ5je1TzEbbb0L||g 6F\tWrիWYhիWw_Sڿqqq Kpp0m[hA<yXt)._h4ҷO"""h׮7viuhѢsVܖi_xV,_NPPwys:֫Gň'&&3gΰlR�7n`矓/_>tn{v,\oOSѣ[nctt4焻dΝhZ رc<vdԭ[e?;lݺ6nܘ1ˎje|;._&8$%:ŋmŖ͛[.&MmeĤs_f~T۷oOve# 9>;ömۈz9be<cp5> ocr[,t:]_r%=zt?͛;wkZ NI倀�2ZmuLΜo ޽{n_ut92}VRIHH:J%<|02mϤc]䶗~WlYto tNZ|ҿ?tr)l݀-퓴=/0?8KIѪ'hpp0i>~2r-O<˼Vm,RDޟfbDgΞMv+#zуifQγMoǠFv)_g꺞Lmu2-Ij" iy'2ɓ5ju,]O&M([,gf[2˳vdիRZ_OpgZ* _ow]GG# {{ bܕPR%=\PP!\|9UP'Oy=i)33<_$r9 Lky8p�w4֢EC\v®;ﳴ"uOg 3NM7#=\re ,s&N  *d{FHKO*|+O[d67x!,x4ς.((ϗ,h4re~-&}=6mJ5߂s_%7‚8{sM^qqqt?$E1|8 6|1-V B(Xr%Ջŋӯ_?N>zRˍ%Աtnڴa(F[(|9FM hۦ JS`Xn}[}Z MHY#$M {<7OSιT*aaaٳ%K^/]v<p�HLm6y~:vġC�Թ3wݣv}<֯w,8<7ݹs5 ΝCӱn:)8�h 2.]:"1< ]9wo-8p΍`2d� ,:=e2h`$+Oʁa?7[Պbb6 %~ns[͡t:lR.Jh4Z'Ғ#D< v$ r в<[p9!00ѣFQhQ^@ڵy3ϣm۲y3˼r$(\;7}vDDDW쥖weMwn̙=^snd$ፑ !zFg䖰9FjfC$dҼR;y}F93Oj49i'9*UD}Ϟd#h6 pt G*DN$T9/zXTΎHHHpXs[$Yw?9X, wDfOm(=*̆BdBYB!DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\IdtBWY{C!V`hm?[@Fy,\xEz L{g0OZ7"x?-R7(CYOr<+9eYB!Y#!DFK/}碣=]!2Y#cVZ ڷtU�8q"zBPLt7$$H^OvJ*y"y㘅l,XqDvmv\Լy|l}b2fϚٳYr%+/'< sF)\ /_>ztDFFҦuk|Wxu4;IdAUZNG]Y&Jʕ+ӥkWJ%ʖϏi&7kuZ?ċ-ʊ5r$�zd…DEEV٣/Ux!<ܥSfMkۖf͚1t�Xt)_,[˖Oʕ4q7Y1 BGףVb2lT~L&|Z�Fcc__끡aͱ]?dJ߿χ]h49z2K-[P(TVxež)Q!sh"> Ppa;ƻZQlYzzW, cHdAQpBL0ƒŋ9s4 .db8r�ulڼJR8L(�`XPTt:,Y'?3iD;Fswj;>�f XVt:k^{5.o]!DHdAQ&:w9jc!Cr-F#%+3^I?G�s FFf9\r{|ٓ&0|ԩS a V{q=DB6%eD,x-YL|Dm qOTKKsy#�O3cnjkݻ9bAh@dDɒ%8afO'.93u4;IdA>_u=f xqr><QGrJ,]4C3xcdA28 !D&TGM!!!r|юڶv:%ςBdFR2|Aˬ[ O7Mdo̳ !xBzzj$$$УgO[nBA]iРZDT2{N>͌3̕K.w^�vJ|8z(˕c̙̏bI\~# 2fA!FV͚L>a@}n:tիA`4q'B.L]Qthߞ|+t12fDO$PIs#(JVXALl, TZ!͛7 B <y .0axoIdtOxN9C~OHphZtٳo֭[3o\_u6ffqtܙU_}Ō=D$`G" BĉVǏ'΁cG�>0�gϲyy!�{ ((XV+W�{}|}}+<u ^@-s玧*DH'A4 d_X,BǤIl}aofl ;YBn߾y<] !Y#!•DHdA!p%;IB!\IdDBWY#!•DHdA!p%;IB!\IdDBWY#!•DHdA!p%;IB!\IdDBWY#!•7Fٳν zOBmKҼ|<y2d=O"E\s=G6mUϖ-[RZT'O޽{,SJi<˶M+ν۾≴lْ *8\daa꫶ʕcʔ)ԡ(W,-[p`�9<xAGѷOF 'Omϕ.U+W:9u4;ɘ!De6ۧKG~ԩSܿ_~BÇ;nK,a�TZ1G-9ҥ̃pj5JܹscN̝3ŋ4>mꫯP(j|DGG3dPv׏ڵkѸIV+_,[bGwh֬W\`„ X"&Çs tÇiߡw `G: B5ԬYW֥@X"#G"_X%K ""彇bĉ SZ2˖-K\|<~!eJp w7SByknTV#G7O^UjժqMs ߟ>|j*ʕ+eɝŋV:tDl۶ +"7YȂ"ʕ+T(_Vhslܸ/={ѣG:tի-b6P(-SRa4d2d2qF.^۷^111<)"66yRpa[tjEiWBA\\& ???uݻ(JP(XX,O1 c9j_(]W^\~%KK/ٖ?} &.]ڥuד?,o֯g̙.?wѦM>04ɓ̛;oc8z(sfvێGϳܶqر\ +^-ooO"1 bŋgڟ Os-9,xN8j'aaa�ܺuUυ'tp-XHܽk}])By޽KJtqe._&>><y/o^.]L<y\̓'ŊҥKǓ7O.]Lҥ9} 曜??ʖ-V#G(Zq$$$8]{9}挭6ux�ț'χS1"+O}3M93u4;eSg88&9D{Ig{yQݻw'#&Nȍ7.lo2fALE 1¯;wrƍdߓ-]T�_߾slmρ8p@Sd `G,!<)-~H2qDjԨlZ??^U|yڞs.2e&o !3'-ڴnMpp0*KҴiSrO?㣏?v)wԩlܰxСYf"W` uRm8w,l6CO>aҥ;u ;YBxJR~NG&M8z(_ R.?l7ZR>8wQpzL2s4k֌zcǎ`* L Ŋӌ0ӛIx7FBgRr=BVөcG9Q*KjE7LP`Z1&F 1 eҲ>ʴS=x!$d_aQc~8"5Bp=�u+0x^|1GӶm={#FP(Xt)AAAiӆjժw>�4 7lh4bZܩSbC&"Ș!'ݽ{.]/o^._̀s.gΜ)]x[NٞKN)S4ݻTXf]9q6D1aDΞ=K||<#GBRqq=ij,HdA̺{m�#G\ޓ2II\tk8ymT#;YB<뎟8q'Y#!•7Fd6BdUЪU+�&OIluVZֵ+ߎzg+7Ά{CO 7zs&wܔ,QC38t0;vȒzm$0O7,!ݿCt2%KtՄxcdA,!-PjU_*lcd6BxU !H'A!RתU+4<c$`G" B!+,ؑNBN o,l!RI9ijEfCؑȂBנAvؑewȂ,!&4oΪ+Yr%~MߠAd# Y+:k.!F ???BCCcg9`sZ$Qx>^ĞBL?c4h@ՙ6}56tD aG: B́8p!r8o !‹HdtBWY#!•DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\IdtBWY#!•DH'A!p%;YB!\ycdA=+:k(!R{&eU,[ b)p}tf',!V[radn{!REų\x�עOx""""8qB -6rxmx:*!‹xcdAfC!^DfCؑȂ&at5R?, ,s HS1$Y#M2d:xODeefBd {5Q" v$ {}<KQ8N+ &9eDH'AxBG۫^:ye֭)clJʤWTa;FӮ݇=ZzBTTE-R,_O(P6lH53}*TvD!!!DFFBxUVkoqKzNQGoN||qdd$_,[?PB/^eKŲe4hЀXbΔzreFI}5s&a/$$VʖUZ5 *뉌QÆn_J޽3} |HHƏu̚93|Rii!C(^xSVSJڵozI'jM)gxBq-3whG,or5 mjْA[oѬiS|}}ٶm˨#;w.=s|jJ䕳&~@?0~)u￷}9[?0r'K`4|2 -bjmF|W* HΝ1eFFFҢE -Zٳ l63q$4i6mӧ֭Çg̋bȑ(Jط˶~qcsx>Bkٱck֮QFin]ς8{sΥw^ԪU `ƏG…9cFv`ZWh׮Z}Q\GݺQBLf3 `A,Y3fv:T^zbŊfz3fD@@�C `08샟~iӦŋ<eCCuikZhղ%JsPZ5UFѢEٽ{7{sدwN&Mhݦ f]w|rv4hӧOkn4h`[&7^+WVd$׮]㽶mQT,YS,ߩcGj֨ɛ' v8/6lr9o-[l63r(nLی%w@o !pY�0[,h4b2Qk4h|}mU~l_. JPBlڼ_wם;.T*\2]vETRlY |yjܸqw}k֮EsJ,R֭[9}mp"6mDf(Rj 7O?R`[Vp9t:֭RJ.hڴ)ݻwA4oζm5z4}7CmuR cϞ=,Y8f$$$η{!Ə[|:pۋԟ߸u6kp~J_ %22 'çhU&}1=ztV??/Y]x^=}PV-J/εש^:s(][?Ёc4CV^?yXn~M۷ةKGp)ӝg kƾٺu+ێ+WrUM/;v8e˔Ç̋JsG$D" »%Yصs' ,˕+O̞5 Zرce4i҄�òKty`h%#jslOTŋӣ{w&Ml+;&&&;+& !{ٞh4ڽLv툏Ca4OS݌Fc:|}9p�3gΤsNTouzNGBB^ ɔXO7ՙdhݺ5 ,.]\1(N<xmP D:#>o]z5J.MP`>8|.]#bR[J%+V &6ֶjǠ׻WmR*SףV}}0p@nʩS\h4jْ`T*f%HYgӨQ#ܹs]e) !G\/W=a&t:qΝh4zʕ-KttCqP S߰m�pA eK0yd.\ŋQ*9r`u3d`TmӇJ(oj2mtׯO-db|||֟_wdEΝ͛7efYp!C K=j\v Ӧ3Xx1碣h4̛;Æ|=} TZ5q]N?q#FQm/x"XQnl޲6>>gΰp }qi+`kju;wU˖ :_ݻy=~|gt:o?`gӶmYa&Ii+ٓ&0|Ĉ4W+n; ʕ\x|@ٷw/SNM0qۺt^{sAAb(Qf7nz')!FRKd=m7aIMF9'*#O<ԨQ6ղl7xxo[.4oYzj,; t'444o)Yx1Ə֭[GPP:�$~h48\~VOV{h4bcc3zSBd,մk>0?&ɶMSk>1�4e:S*&ۉ~M̒a=/˝;wI:)z: le̙$ލL7&ezwضm[.O30\&<UrgXZ8{:*c�t2EÆ yA?)ܸqVr刎N[0  b1!P'OL BtrםZjժܾu+uhiik%rDg!YBYx%s=Nj/22GՋ<̙.}aڵ(J6M6M=M4믻<o{… QZt/23Cj Rhiiktn O$ [N,|l#GrTT/WLu.jժQn_�o]Bvf|:pCQw`)߼eKm:j(V|_|$ةzL????Bp3}4=zą 7~K>ŋӽ{w&N)]L'z٣:BAdd$Zb0fXbccA\xw7oqF~ش!;ϗ,I~8}m6jwϦM\\5k0ѳW/"##o8+gϞM5's=zP gܸqfƌťK8iKoNMmuwՋr%4h@6mP*L2yɕ++Wr9ƎCbP*̋zR<J" $ [N,\pzo/i.?o6%J�swP< ι dQn; ~Els5T*bccᇔ*U%Aā*:CsGÆ m9#{75m6ğѫwo5o8pY~=rСC7w2}}}ة<z.mu>VҒ9-[8q&xڵkc4{w&N:oIe43xtJtt4(}|jm9#7?v ;uȑ#iS" ro!SWƾms.ZD}3T`@Ւ/_> d�sԓo/iƍt�ls{I||< ㏟0)Szjqzx5=z MYm@҅ilfO[ol\'f 8'|"=ݾsX[ҠXVV+f?֥ &NرcD;ZBq.'Gs|JrL&͝-i DZ΃{C8Ȃn9!p.:`78+0d`za[.i.xZn:Ǟ=ޠj(V-{S#h4۫_>]>�V˰C;vlInG֭ٴym>aÈ|JZ38/a{`ͼ;L4ɖL|QQQ�ܸqN|Zٓ4pKߨQ#Z+22lq۶ڵkp~޾p|%ƍӾ];"""ۧORSne*J fX! yW\ޣRJXI̧/o C$֤huuiTF@@@k?0gl̟Oxx8gԭ[IJyV9% y[9eѳ/Z;w |W@b=`{1ߞ\ Y1?s8{Hn.}zVjnfU+Wңg|dD``˱Dlll:;RI?$%#;y=,HG!H,䄟"IOҘիsE֯_o{S~@KCEmlcX,LOcZ6 Hf$IK(@Rkkz/%]'4i[,dd{gFG!dp1 B3,d7l˕+.ƍ=)44u-R e (@<Zϔ/_> !!!DFF+T޵ֹ-SVE-=ݼYp cw cDj,?R/`{Zj.TaH5l&w^jVB; Fo4G]N yى,< Lbt|2`KnI&P(HHH,x<#I޼y3z4|y SТE -Z$Nw|qcsp9.a>wXG]rKK"XڵC?/_Ty1ctLf3'Oٳڽ `ȑ<Я*VիK R'yHdAx7,\JԩSL6 p͍ɓ'Yv-ʗwy;w6mW]c<[nӶzM6{\ 9.Z~޾sh4.%sIy[ofÆ1H.ŋٸa-ycj cNt:|J<"kIdDwBէo_Zh({}F@ll\ iP(X,Hq?c64q"qq 9H%KBBy6Z?NRF&za=]聻<"Ȃ̆=Y7v 111L&ѷO"""(Qs'-"wl޼u3d`TS-]=rIt:3gjժPS\Ri߷OV+3fٓ&0|</aaXly j5cǎ}gA%y7ޢӔJ%!!!SH"G2s\dq%@|||:9sj5 "3^jժ^cG1Jb)gaԝ&yH'Ax,\%DV(pWfzr\$Ww\1ydjlٲL8}>ħ>) 2fA<6oiE1 $ D YM: BOȂ,&!'HdDw$@" »IdA Yp ݤ ,8ȂnYBxDHdAx7(!<A" $ Dr___ h X<]sp~%OWt5D2$@" »IG!s:@?]ӕ)Ȃ,&!'HdDw$@" »IdA Yp ݤ ,8ȂnYBxBN,(g5 {E5m$!<M: "% ?}�pC=1alW;qE7Zŗ_f /p`.GhvȂHdiqCތbczwFWH i;0+GލtB|~=<+~Av*DY٥c'!0ПGt�TT1[ӵ"n|@Ϗ޿5]�bcu~:\i0&5KӲy-z*o6d2ӷ{$Knjx`(# YM: O:E1k˵mc*U,ط,ŋ߉c0(Y"?guqQr. n2_�3OTsV͐ONS_/3'wdG�\ BM}wHV.IOozAYp $t0Mh4Q(s+13^G*ӦeڴV %[vʕ<zd4SRIjT gɾG܁(ip7ͨ~[Vz&Z/'~C_ų:EȂ̆,<-R)3WeZ�T~ǎChh.rໍ{Z8ƾjy>BycĉS8+&jhKυ7@?nؼ]!W/˷3d׼T gf=GrJr"bŋgyw�EhcEEDDpijrJd!,, [ny*ѽ3H.ݳjlR$[FB__ugFw8Ŋ^oOTzi3yo/ΞJdA$4Q()vt\lWJ�RuS" 4ъ-u)ltD&tNn ܽ-m`FGhvB ͞}ge=SfmtG L}XNj{j.n~-mYCfC8»1 "us޻uض(+$Oh֥F=a=�/1l&}ҺEm^l%o ;Mk8o6[>v-11ܺ8`{p43Tz s߬Y;>>JlA|2K�&3guqiWkws5rhisnz%?Qb �vz6luԋ~"rl,D&{Çq�$ ݰ*'g{0-˼Z͛$v?x8=f|yy>>w)]D0fvh4aXu fNdջ.YwƎhÛ ^d�t붣�pyT*AoL6uySA^~,=),Dd̂ȘJRh2dܼAÿg�ܻ8@U!_A:dV'Q*m9�4jFzULf� F3* $wd=e|{r( Lɼ&r2fAfCD7n>`׻UfLx|~7坦5 L ^/ 4+=6XNʕJ0dXJ@FU<r5]>h@>v-  k ybx0Jf{z!l^5K1ymQUSfCHVNYrʘɳz{?l9@pP�k7dd2۲7&ir$$fiIK@b#!@@l-ɳ$ς,: "*V(FrT>.yQpr$�'( Dd6ȂH[l2Bx7(g<] Y,ˬZxڷ}a~ ʥeIly<jO6eV=M\~ YM: "9^D$$ѵ!TTh6K9e>ݘgЀfQ)Ȃ,&$wH.|"VMp? MuhӲ~~ -B.\P‚=$E$@" »IGA$TsX(A~f¤}!'?;$M~=e$@" »IdA$畗Qz)4M&v_D~  6E>^oX)/S" gA$ Rq)YPlX_.$ς,&||t5) Y+-yV=]Ua2fDw³c;xZńQmY<M 9foΝ܍aڄT*F_Gp?-֠J̊wc(]_'a0[,tȳpٸLu*m4ArYɐQ_3e\;<+~Av*DYӛNdY1 B glGX1x_wݙ0{\Kw};}#x|$$A}*X3goYhPuNXN&~v/Oz7F32h@3�>_R/޽G|i}{š#i߶.=͛I�8� F%Kgg-<D1 $ D fgFhH;-qq:^/Z5*+B**h#>>~+J< F-jF8[BT`z\Zxl+sd"ȂY,<+4;||TT!J<T IN5xp?P\uD-ʔQ*o Ǯeܼ%B=G.FPf)&v$44WcȨO{z3lS,(/O߇[_N|f)0�nݺxLPPG�.`0Gi{G΀Z-`WRnX1heX,Vz#~~ɿn6[}+딩@bbb2̜!|'yO_GêHdY1H��8_JEד($TffGA9eB6 aw!<&+W_|'u:wƦk^ݽNg%<O$c@" OX{Iq;wc9}j֑Za3lrx٫ܱLCm1rʘ !9ĝp-8g4w2vDLF3SgoB3Pp�6lMy:�tE@@Əl1_+�Q|YK6{? ѩC}2\DHH. 3t?bwA:NpP^yٰ#rN>mGPe<_7x2DwBJrTFfs|PٖiѴ&yrJAD}`ڵˣ|AX`z}Ԉ ?ΜFŔqԡ2?cr#^vW+!)gCbaw]gBT<jBxjF24t9% c@,tǮlBTTɌdGJ͝"Qbx_^Vy~Ư FꔃaP( Т'v P*&[Άu+8@ҞySyo12fDwBVLa7�o6xEK1+jms7L7dЗ>{2 qh\+wqvzZEh�"굻r[=BAV/Зlô$r6�~#ƭ#>^?_31GC >f � {Γ "rJdA,r̒S,H,toI]z9>Lѱ:.UP}] nc@v9 G,x;ɳ@,: "e!: IZbGp([OJf >K�A<rJ !9' 2Oz|Ŋ 2B" B !gHdDwȂ$@" »IGA Yp $X"wj8Q-DHdAx7(111"LE" $ D YM: BOȂ,&!'HdDwsQxԬ^UshtGÖzߠC!DHdAx7wKѹ}-OW-GXY"$@" »OBOȂ,&c YM: BOȂ,&!'HdDw$@" »yCdA3P'lf02f71[,th  Ý֐#R-sXG%HDHdAxv~?G/o0>jy[35kC Q}LfvBdЗ�MfRҽ˛bZ=v^ƏlK9q꒭`O�Q}߬Y;>>JlA.#wPT!R#WכOSꅂ]B<5rJdA=+:k({4/kXu fNdaL<w=">^ώ_bDq>_|Ah}|i�awv�~q._lM+vЦE[ ukIs׬#f)z9{}RX*C<|9wӻJJl$$!H_djըU &"_%KGhu�7O s-d2syfEmX_ Ё-(Z$ouצJF٥^jUM:iYwbjB3z`) 㣤r 5%S@nTS̞#riyv9-R~yU#˯Q(?~"n =[ a~� h\asn٬&bص$$35C*+wx+qq:> O!j9êXY^+p-xHxN8jxȡRLl0ho[,Vz#~~O7ŁhFIq;8V_yi%wu4;IdA26"$~cjGz 4) ˳pn,hY{a}0`u C!K8VB9rʘ ! ٫ܹu{ uylpE6x0׹gzM!D$ [z# ;_S�:v" @Khh GБwT*֒UbDq-re a~ ʥeI8/+Wнܾ7cXخ#Sz)~/{M1ԮYkq9>_ ZU!x O5R$6gn ̘={O_ͦ !Yp YZyj,ސ8JAD}s ,_0>jDP:ބ cHH0ңkCR$n=pYcԎY:E1k 7el8d̟ťX$$iլ&U*EӚɓ HIT<4,DWn )OYAPQb0h۪6׏`u=wZ`8{|/h|/X( j5xq'rb %[ 2lkt@�J%&Eu4;IdAY}qV~FdЗ>{2 qvzZEh�*Fcߙ?(Ji87_Jy^c'}CfS:Kϙטx+/ҥ 5/,咧.r.܏h<�̘N_eڬMܸ�_ zӻJJN,HVNYR˳`Gϙ3C0}l3,f||i]�כʴZT?Ng@VHɳ 猷C,ؑN&Oz-oQ7p\BH�pS?ɓ< d6nO:f~n"d̂nɳ V=] !D1 Y',ds7s##&tCyXV {HȪtF۸iP/BB@9% c,dMk~7o> _`"y(�z >?/ʥ}8t<B=  cHdAx7Owz#ǯgڄ=pɌVWCވ`/R k � b+xE_zpG69% cc|}UpuenX~9¥X}b5K1y$�'"#ƭh[i'cHdAx7OG�NgMe:i;�0cRP2ym.ѩ}}O7EF9% c;,@r$uie< !DɘY: !w�OWA9% cc2*< z,B$C,8ȂnYw3mlҸQJSgojб]= MO`D/BNݜ9w\Z|ڜ'ᛍ0sυ2m&DH.yfEݻ1.Uwys7gi6?|.odЗ�Mf]!3%Dd̂dn;ۍRVi�W|٢LzBυ2{Z'>굘^}, E�z =MhؠS->™ط,o4ȺoUZ|һ1:AbEo0�t0�@" »evdAo0:8`4ハ16yJ5p|[3DElujKY0MT<mZ֡M:h Lf ȃqߐ*o@(!9% c ,ݨ*k΄Q|7No{p:-/^x0Jg??MD\vSc՚]c #jV܈R ~^oN26?=Bd2fAQx,_pKd{gC;й}'*#>^TGՊlIHŊ^o):__5 |BBuz˭Ԋ?L-3sƻ:d̂d]BH�"w \ ;쎂"rʘlB-B/Bxʓv\k{76/]RfzܼCG#KdzNYp%c7y1 _Ç�ܹWS\~Ͼ3*?-eNoۍz:tovN!YlG:Pd̂&i,tFڇ%ӽ,Sq$n=d\�۶e嚝 CۺԨ6gn�FOX@rEyK?baPf( 2wzATйC}W gؘ51M,إ9G23?ܸޭsYz#/yz TJlOYp xcI<YjռeJz9h ̟Յ �L6uy�@ 2}b{~Mk'O.�f '2֭@&5�XNFkɟ?ĥL@; z.Qxsw-?_|Ah}|ie~�(BAZC5 DJ_duʇY$-'ǭhV5 qRx $*T>(Jv(Y:;7o?`z? ϗ=V"r6 ӄ:Z`J=>> {XfWBO,<% IZfC<W0n3uf qVAtJ�?Y^GHp�>>J^}NUDVY'y! �۾kg\|ǡLvJ)J"*u0dKҦ$I9rJrԫ[5K3uܹKJ%Y.:}s73_S*+'WA~n?doxI 4Q!DfHlC< VE;U,x<G9˳`6[ZS S[ÖPVd1̘Lf)[V8u -=el,gAoGy)Y[5ςR[PB14jU˨T>.JE; �}& BJ{d<]XR&,o �Jȟ-O)Y>t7ɪ B2fA,AE"%9%ςY,!<C,81 »(=+<]b9Yp cwsY<]5aaa�ܺuUBd@" »OBOȂ,&c 2Bx/(!<!̆N A:Chj4j;RQ{u߱=ΌυW__704qPV)w̦{CD�Ƚ!rWix(}<S1,sƻdpw ᙺ$1 B c!c\ȘrJG!$$^zs8!Yp!c1 IjVB=Zuciyh}-R,_O(P6lH53}*Tv g }NM+" HOȂ뷈۷okneӧ�˖1{,�̞ͪ+Y|9R+@:dV`.ˆժUٲŪUFB|=4jkyBCݻwo aZ~V]5sfڕu _.)1 BcRQjUt:}e,Xʕ+ӾCΙCecEȟ͚1#>X-9sPxqFr~}ȑn5o=v(6iB6m0Lڽ/ҪeKJ%̡W^ d2q}Rfdd$-Z`ѢE=Pf3'MTRlQx7%$kn ٳgW* HΝ1hղ%o7nL`\/^ÇP(o8q5kҨQ4u(X &MB͛駟ݫj 88QpafΘѣs(gT|E7n}s~ӦM#(0/pѢTtW^X"f={uP(tڕzaj Zf۶mlظѡ!CԫVZF-)Y$3g`u)S]B7od|:p cnjhb( EEqСL;TN?CHdAx/(@r"z=j�/&Jod2`4^ z3e&D= {Ds'v٤N]8\hs6;ub|Сh4Ai+Ν;rnӧmmL$mڴ͚QL>|ȼ(n޼Z??J%hXv-z .PdIu4mڔݻsx6{ysmƨѣj"EVٰq#?�, !!2nxn޺ŧo޲'N`2y7\_Z(Q8׮_z(TthU&}1=ztV_n}`p.Cr }]2ݵؘ0q"111|:p m*W�?v ;uJGG+TϐN AΊ,>|^={2qFŇ~Ȓŋ9s4 .dbJ%G~XVM@B%Wy!Sj:h`C-3g111.Q(yysJ+VKBB3O'6&`[>-;I&OQF 6s7j˗϶||\:Q(X,_뛸 ف9s&;ubD3dl6Lޤ|RBQTX,ǥKXd �111o}4&$$`Zt0kl}hص{7?3f٥Lwmu>6+`ۯ!!!dl7E>ɑ{C7G\?L&;u=ҵ+0r(�C֭[FJV _gJ-CT1c�hۦ �w^t)�SN%,,>9S>CӱgϞ4գo>DDDPD $ٓ%J`6~weTkuN/ZDܹټy3[6of4i҄{ږ~:.d9wmuV~}Zh���IDAT�ӧM#((3fxbEGh7w.C s\r{|7כܹV-[2lP|Zwν{\[76oⶳ3gX`f~mk֭_ϐR2geǥ^oŋ,^//={?~<FG YM>"2U/9ȳ`# υW=Q9/U.S?\=Devܙg( Ý;wUsƙR$00fK/fN$ڰV`0`X\n@@YPh(UTLjmuNKdP`` ).Lllմk>ş%1LV}�ʽ{-YjdžVTR2*;]ih6v1y: ]6Euڽ;l۶-]'30\dӗ:$ςxsώ +[8|AAA-R$]pWƍ3Q^:R2\Vt.gUn Bhh(uuZxx8ɓBdd$/dDg!Yo)3Cѣ}�w *DjҵL|s9;m6D͛ :OiUhQOZHLV˂) n_yfTRoY̛fCH!<,䴨~Fg}Z��֮Yh$..zQD ӧ9f̘A`\\t&<U˖4i___6noq}΁S}v:]ts8>aniڴ)ڷ 1}:ӧO_&W\\_|˗/]vhZ~N:E%XbgϞeɩ+)@R.>mAAU*>ޝ!ּy2fh|}})�ٓ *`20`�Ǐ L2uیw^|=j8y&!ӧٵ{7 4ģڛfC<y$ u$yn-Yf +Ҷ}�HcN<xի[\r9j׮hݙ8i27mڔwɓns48pr9FѠRfW+00FѱS'<tݿƭ۷yqȘ:wLeQT9s`uoBBBOwaڴi\vÇhx׹~yBC]~I2x[喰wmr"$$U믿[YH"!BfpۯR0LsYVV+f 98rH.s㎻�f___z9{hk)R.  F#6d2Ghܶ6t:^ $~?oF֭d6ڣL&ς$  3ƌKhܶ5%* Ng۞I3F#Z7~v[bgqm | 2DHG!BfH_R%͛ܩn/pJ%˿B ?hܸ1۵#""}P~}|!?s'Ms?d2_>_ʕ+cv3EpΝhZ رcmw [-Cvhܸ1mnQ ^{-q,Y?RJۿѣGSn/uhN9C*Uh׮P-]ʕ+W0 ={xA>ߡ䎪8 %88ضs[S'1bƎx�cZˇBx83g ((Ӧgw /V͛sq 6>LB8aB&YHgH6 ,5YpwxIŒl4`ʕ3yrl^rPTՋiӧ̭S9i9gJ%rE/s68  >>ޡYFrI%GCjX,t4-)[Ȝg!I6{v,!u在B Lj[nM.utJ餝i4~-d; @?bq{jmwzz: @/�{jziŒ͛28fO}#y@,dJ*<vݺ,_ѣG8i˭VL2Yn%Ezs%d$H$2fA9 qwWƔdEVpazt:TTl!88ĉ|ڞ4HoD:)9fi* :*+3{/Nn>|8K//V:O ppF B`ڵرee4ha1clwB<p qI|B7l`-.6iB6m0Lڽ-r#hZFMѢEY|9.\`D͛?G#**%D"E6l _~_%7‚8{sMu{ѭkWQ�ŋw~Xr%Ջŋ;p>Eř>m=%K:٩cG}ŋӽ{w&N˙4i~\`A4"{,DɓmT*?g_T)N:i�|4oζm5z4}:pɓ'Yv-ʗߟCѯ_?7o6߂FtmG͍0y�߿O?TRTZNG]Y&c?q|w.T*aaaٳ615/]v<p�soSܽwڵkp>DžJ"66vwtGVǬ%$2fAdBv2TAͤy}aL lk|}1F{94 L:ш` 66Vhd2oGϞwnl>7;8bu >Fh797d(P .\0C }V }R~V+ٜ\mO+}஭IAR~:2f!̆o,<}.]LpHK/ALL4ٲy3I&-׹y:={}/LDD۷ogΝjْaC؃M{?dŜ9}֭cСgǏZ0 2z(zS˾"YѶm?$P(4nܘw7'00}0/*e9.:չLܵƍ,s˗KfC$< -ɳy91ς;Ӈ*J4mZR$$${%[B@$Q])٣<`3o!s?թ!!!<x�p͍Fy)m?H'nkkF%y2D@" Y)00Wcԩ眓X,; -< 2R\.BY1o?-9: AקHmwMU_Yi)#̖i! | Ȕ-2d "!("CTdOq+ -(2:f(himy>>͹6'󹹯p kA?,8Ȝ!9 )11oѣG};g]T)xo@%h۶G4hЀEQ7' !.MXx15Ws2h44jؐ>n 38t/\B >"FVC8H!9 E!Uۄ3uR*p!VצLUVR_nr Zrx֔�|0n ud΂s DΝK3i$�mF hР�}zfK/̯ذq#k"v/YB&M_רQeV_r'sd΂Ȝ?ZjE۶mhcjٜFcեA,8Ȝ!dA̙҅3*U7S[oɒŋV۷o>DGGȑ�<x 3kLAj՘6u*֯RB uWRgJEVG5on{MG,- ,G6 ,ה8r/C-d΂Ld&!$YIH ɂH FI@!7,8H ,!dA!dA$ ,$ Bo$YpdA$YBx#ɂ$ B ɂI$YIH ɂH FI@!7,8H ,!dA!dA$ ʂەg /F]BATdZ6:thՈ#>>xWty ҹS'Qy~N"# s%|MA~oҺspwB<$kCtydɒ[jZl;E8DqF.o_fl{y NM^͚qOxx}vy0PF bbb_Ϛ5&Md|Vrν?V벏YfQvmDQc'{d}}9 BY]8 6cY`{OvjK/1}t0 w/mZFTbٽ{7K}ץZ5k2o<, �7k111XV8weX,z= ]hߡ׭O?{�v.]]Qti/_nw{+Whd30go|W^z#G$.>e?^MHH*:1h@:vHBB�+/dɒ;޽z1x7hЀiSbZ1 GBAGTުUo׎%Kң{w<YpdA7YpW~}YgбcG�l6K,Wt҅(VeʔҥKX,.\@*U<<q$ƍs^x"ӦOQFR8q3ftyJBR9OpR^~ϐvڄӱS'f3=n62Yk^񜐐y{"�V\?f`hb8OZZaaaU*D۶L&V+Ouls2P(r$Yp9 Bs_7vBR@Tŗ_l\zK0T, 6 ՊJ01--ҥKj%Kb9.i4~Y- w?* Պ^GP8ߩL&BCChrtIII7>z}Sk׭s>~V+7ofo7)9mѢ&N̟_ Qd΂M ={66Ǐs9^9+Vx<cƍ4-ƌZo^4^ OuFQlX˗/SreNM5yf wz:�lۺZnGPV1^ ~)ӧM>�رczm݊B`�3u>߳SN( Ǔn'99ӦQ~}�>x}< '  \>.~ q=J>}0L\tҡ}{W&أҠA_;&!+U1#>;P;,CTd$/@דn4Rvm:wy}59qy:J*Hjj*!7'ot:IFP>|}Ш՜8y^N#22t+l_պ!*2R:'NDRzu\RZ5kr%1$bbb~ZbŊs$%%yLvt<V͚zsPJBBB0L\ILzj׮V=dzwIOOgѾ5k߰v􍳯8Xs?8I6XGEn"""�|r~L&oSPd~уݺk`5X]]G Y3g |zuej*[,zt~=llPvԉ jj36l("A,8j!9 Rӹ>oMVϩSk̛7/G}nV~tXFXcbbYFomfw>EQ'!΂眅ܾxgʕ+RdL2Zya(v܉jf1h` B&M̙;ZQPT;vI'ҥ>Ovbr4p_|%Xf>߳1GӣgO֭]KhbجV>۽˗VQxqj5+V@VϢ c}ݎVV=z4Vd׏w,B �0qDc=u,YFATҩsg65[.J2eT_|'u$YŸ,ԫWrѩsgyYZiCJJ zbŊw}2z6n3R0xyfΚEzz:;t5w�@xѨը5 s!=Ǐөsg>;vϿbyxm[|9оCg);uXbԮ]aÇcׯiz=]vet|֭aÈs.E$ ,AOT*n`@Ra6CBP(aXfӇO=E1͜:}۷fpp06ei@… F~YVj5e˖u>ղ�Fп?~!Z-*F`jfyvԄ.܏Uss'\qΗ}q7dA,?' 9siغe �ơGfضu+7nĉ-L6`T*7QD]ڜ4igϝCRiF^}55]ƶ[ٹko߾ԮU #KKKm6t*GTd$so~l2c >L@@�۷ml6s1>x}J,I JTT˱矼p!6nDP0vX67mqΞ=wARq,;H ۖNcuIG݂ԔΞ;NB >}^QIbRTV.^tÏL2:mu5+&2J0ͤVZzaHII!fzѳgOfΚũSI=UQbE.m:jGd>_=w'X#|G.^3N,- ?|: MLt4]vej>O8|o_Zn͉'Xyd΂g'u: "`୅ :69Sp<hZ~lV+~]EجV~ٷ;WfGbc9vQIZ޽z;Q/6$˗Gkp?e*" !,de^_:"~xVe4p #FȶRzk$t|Ix /VebQ9isӦMJ(|sf.k֨ALLR{(,AKx˖-cm2 hԨSLq>>W}J۶mh4Y5Qɮ]ЁֱrJ]δSf]j$�{ャz=bcc꫷+&[oId.犇#G$ 4`ԩXV ,屎;7VV˪#((@޽3g۷ms>gtؑvCjjaDdA!(|ɂ{Mo2 =j$JIY \T*Tj5 N^3fGNFzr/JRBV;Jl6,YB޽Is ..FXXXu9rXw !--bŊѸqcXYv($YpdA _^!'k$DEF ㏬y̎?}d ZKG=8 HlnbP_6@0L�(JK.}RN֬]aüy+We�?X2  ?SI ɂd᫯f57K08y–͛yeK6_Tn.5j֬VbTk/^mXf ʶ[Q^ 9j$t:gϣxc\.\@Td-_1rH*W"H aAۼ7Ƙѣyi8tJ)S4hӧM-ZP|y>x}OFDQ$ɂY^m1YUK 2H�\!x㬳ٳgtDFFn08ȼF=saYF ;jDdJ*`6۹׃p瘘8vNGJHLLt& q+0JbK톻5Bޒ: +{Rgp׌: y�? /Fs rNc„ 5*7nr眴[ٓ2ek0}Q,SD^zz WF:uC慑#gNpnBԺE~vJz<ަ~o8x%sd5׌VeL8'|ze˗߲ނ^x{Y/`̙Xf>߳1GbJFjoai޼9{+Whd3x xG]XpKM(Jv;w]vXVv; ⩧㏣T*yo*vؑmɓ&ѴiSV+VFfe( R={(_<cbX,<x3gΒ%+WRɈ#xw\jK4m̥/_od5$ BP8^ϕ+Wҵ+=(|M-{ٻwQQk4( T*ժVbw^/_[ rA8A]6t L=ކ{2ep%, .\J*�<7p W^O><Ѷ-& Sݺ[�P\~N;;Lk׭_'?Xd yZ͙3gXjԫWrѩsgyY}8jKH}$ ,AH�~'ڷoFaƍ4m4YVj5e˖`-XVZlIj>bvͺ4�d2Ѧ{?R͆jEus)^bQZl޼ 0}gUoʕ+�ǣRHHH^ݺa۱ZTfWJILJBTRf0֖pwys&&Lo,8H #Y�oh4\r^z uֽ^:DZ߯g}6m\uqaVʚ>رczmJ%X祠{u 2*5޼`k[֮YCҥٺmGO>=g Ysn?ӨQ#&L86pn{iغe ^ QQQDQ ɂY^m1YȪBr刋wȮނM4aȐ!?L<f3i$&%QV-L&Gu>q'O:/$$$xѠj=\ 55YѿwyɯJ|c]6ZǏoYovBTd$II΄ ))(/Nlls{-s<jKWZ ˗oI,-  (,̚9P~mΞ;tZl u7nfY[RgA GNG՛"#s{1I'Nt :4Wmذ!;u@A2vWƍyW&sz;uaÆ}l: 2gA ǜ^z1i$4i… 2u*n�W;M5j֨`!DqF^ˊ6[+4xnӦMJ(|{0dZn:j*cugLL 5kp9.p79 Bs΂wV}hYm֥nҥKYv-ŊaZlnv;{BsҩcG:v謳V̛͚7y~/b!99^&8Х5: wYb^O5֯[ǹsWK݅벏cfO 6u*V@>}=j?0 -[ү}ѢE WXu:G?Y *ĉ]CVC8H #Y�qf��tN?NΝ|w+ Jb"~+W?`ټɓ7ι@Ra6ӷo ŋL>FJĉ̘9* JBfȑ#ҾCؿ?iiiвeK^}5z}caÇ p7dA,Aᘳ�EnHy?� iiiXf*mN;7Ҝ.]{VQT)Ι㲝~{݅[yo_ԩu\ONNζ%]?/X@ll,ݟz#o~PCx& "oJTgѫgOѣ7}|5kP*hN�πgqn޽;j ׳m[Խěo:e 7jX,/�]8~a|,Q^_~Id ǺsNZ>0׭c۶m.xߧdɒTP顡DEEQgQ8J%N50Y~n[s_7:H.\j%D%.>ޥn�W[V͚;8%8-tJbs_Y9posT*>\ÇS'O]T(\.7B*U l29Uvm8xP8+.OժU]y^'M: Y[RgAxu Q~Y(d2~_wkƿH%s,DEFe{r;uY>8z^y<_^=m Q9?9 Bw#PdI-k dwNx5 qՅ^Ѧuk f\>֞zG{YfѤI,^sm1k,j׮(jd5Y� >ÆQ~}v; ,`?ɮ]U/ӧO'(({ҦulmO?7oSm۹t2vGҥY|9vyL\Ixx8F<Ü9sؾm9_y뱎9c^GWJcNV,_Nɒ%7v,{^a?z? Z?8JV}v,YݻWKV wRgA!dCygRN9CǎK,Wt҅(VeʔeZT'\@)/Ggةf7w}~,5Ȑy{"àIKKc^/^?<Ѷ-& Sݺ9ܶ} Id΂?v=cYT*/l6^%KGjjj@k$8eXP(<T*V+zB|`2 u ѱzIMMe /xe7j7?͛,xMve�-Z`ĉk! Yp: BɂB`l6?ιsxaH�VX73z4j޲~{]˗/SrH3V1^ ~)ӧM>�رczm݊B`�3u>߳SN( Ǔn'99kM?Ѓ .w`dzѣGӧ&K.qAO:oOjxy{Q4h_ qǤ΂Y^mqBj1DEFr cHڵ95kt:*UDbb"ܜU FPFV}Ve-R:'NDRzu\RZ5kr%1$bbb~ZbŊs֔U&zk-̵5&_ڵj?~x' 66x.=׿Fw-΂n,#_Yk$̯=z[w-d΂󜅂2 n VK,oWٲeճaCfsN4l0WU9aF( 2gAVCYg:%vwymzN:ux]^s`޼y9kvZ-קK.5jDH6C5=V>xk3):Y u?,];KP\9J%'Ofʔ)jΟ? FkNV+6A3d6ingܹjFJرcL<٥w.e�|k_}ߥ/b6==={nZBf,_8_ŋVYb*g}4vZ-jѣZ$''t~d *T %%'Sxg4 JN; x/HݺuQ*<x)SD; ɂd^z+WN;̳ҺMRRRջ7+Vtӷ/@׳q&0�Jh$&&ƣ0s,iߡ9оC�woFFѠP( 8~N;nϏ>ޱ΃=m۲lng:8Ho.gةŊv >x-ݏ_~tڕ 7WDdn![.C #..ιdTu,8H ?YPTκJlFg[ APb!88 зO?%l6sioNP`GجV .xEjEVSlYc!Z-~ggբR*h4 VkiGMRX57y g|9wI΂s3O&--[�Ƽy4k֌m[r N8ڲiFRH߾}EߥI&q9T*6n^Zsڵklۺvq!KZ0 9:4ڶiC@@�IWr!zDEF2&3f}6f3ǎߧdɒTP顡DEE iF cǎuisӦMٳ,}T*G2Yp: «m?& ^7-t-HMIst:*TӧQ$&%LjE;Hʔ)S&W!.>^Qsb"sLZj*qg^: 8ڨWvoOpW={dY:uyz4Xu:+V$..^ҦvDգ{wZZ=G}5Bޒ: +{PDGӥkWçu֜8qo1ؑ׌: yK,& |R1h ZCٸi3%ȊVfwZhj}\~ev$6#njݫ; hCBX|9III|f QQY"9 ByB_u#"x]n j,_A2bĈl-eGFB''Op;jY9p/6><mڴD^gPp07kR fĸl/2Y ɂd𨉰l2fϞ&s݀F1u_}y߇mFCUZ-EXn+WL:ݎl&99٥F˪#66ɯz~2ao?8L4Ovrx9rKbРAMj`00[رciys`jz=0 ݛ9s}6s HǎIHH�<k7F9I$Y—,D&s݀ݣF­Ԩ^ԛEuJBVP(Ջ1cxH�HHH`iԭW/GRT(U*jsfcɒ%ݛ4�ؿ?iiiXϟϑ#G} <(V7xΊ+k7HI% 5r½FBTd$/O?w}@F5�;psYpK͆*Ee $,, R/<"<ݷ/uaڵ 6khz*.[灌%�qO?',$ ,AK+j֨Q~'X,lټGZdκOuR#f͚hZ*FEQV-/l߶kpOx8lۺZ@FNs<**7… DEF޲_#Gr9*t>.|̽[ٸq#aaa=ƍCW�L2A1}4ע˗giԯ_YAE,8Hݶ [Yp�8<1Q s7: ={NGdd$̫k$�NPp0UjԨAFDVTBHHfɹ{=wctTTDg�wѼH $&n^3N,- ?|'u y c9 2Pb[1< Qt:&LQݮq.{Iq`=)S! ܿsGY_e΂>oAd祷zjԭS'\0d`^92} 8&d~̽M[yqk׮ԫWcmz6/'[2gAVCYphZV,_ĉy'yX|--{xǜfΜl={3z4+VdXV͛8,r%F<ǜG}ԥ 1a^ڴnRn{nڵkjn3p z)Z?8JVbǎ[�<iM6j?`ZyaHl6.[B`A(J>߳S?&1s&,YBrP*1wyǥDf\+/EFVC8H #Y\r.]أ7ނ~{:/FB@RQjU,V+{e張p!ЁڵkNN0cm1(S .]bpTsrUmb2Z<խ}�ZԹsv:>�x?%KGШ՜9sUVMz(W:wguهWH ɂdয়~}h46lHӦMs]ojEVSlY�6oقje˖TV#F`Qެ[H�L&m.u aXlXVT7bz, ͛IpwV\@\|<*խKPPvJJJ Je{4Ĥ$J%*ylkm K}7,h21a ɂ$ BP8oFÕ+WPn[СCԮUaXxgiӦ !!!Ujժ#;^g֭(Qu^ :^ 0 R Fe5.]۶qQØѣyf\5o^v;?35b„ zc綧O&--[^kKx1A,8Hݶ ,/Wxg}-x1дI ?äɓl6JbRjd2qQ7:qBBB Z֣u RSSu {wg:ڵkj9~8zk'DEFLx:7 z))=wΣDppK}ȨP|y_ڈBޒ: «m¬3 s>L˖1x_wkƿH%upYvkt9*g 0b�&M̨ѣ9{ 6sN>oСZ&6@K.}-s7n+8ccYp9 BPx,�+[̘>s8B,M߯Y-WQ4jԈL5nU[uNTdd혘=x^!sj5uԡUV㣗M-u2gAVCY]b!::U:˖V9</źk -V gwcY{( 8N;ұcGgo>ٵ `ڹՊfc ͚ELLLFX\ł^ ׭O?ͥvK/3x`}4mڔWoεW-Z`saZ1 ӇѣFP(زu+A.ڷo-ZzjYGWJcN6qDz yNVC8H +Y MJJ zbŊDEFbHOtܙwg|2p $&Yr% owbqyO߾�Rҽ̀�.^ȴiԨaaaT*N83]RPT .PdI}߿7x@駟ؿ?iiiвeK^}5z}w[B||<o/Zؤ@ k΂ٸifz}ƻBZ~ B -- ٌR9ڰX\jd'--Y�ҥKj%Krc`۱X,X-[zo_ԩu\ONNβd3ٝy瓚ʨ^pr9 K~u>9 1g8)B& ) ~ٷk׮ѣ{w>Z+VmVnܸ'vJ%o/Z�3g\dܹjf̘gso3mNM5yf�, �u  s8~a|,Q^_~Id ǺsNZ>0׭_8־}n'99 ciz wޮY_΂3w20U`"#9q$: *pizƀu5 v1p^}D ɓm;9p@T*^Ç-Z͉'.u pN:"�TR&sڵkC<VN={khh(#"+۸rs 䨷pfY[RgAx%|/,a2Xa5_BޒBɂ/?+^.qd5Y7gA^DDK4H9 ,AJmՊKc,::G[d3iii\t$Ç�\3*$YpdA$Yw% kb(2X($YpdA W_ EYDDp3\xouDޑdA!dA˗Yn=+F+"H ɂdAQP$YpdA$YBx#ɂ$ B ɂI$YIH ɂH FI@!7,8H ,!dAYpL'I_df$](o?]\9zͰCtNwG_d}}߃,x& .1ݾ $]:9p|٬YhҤ �ujצk.DEFlӨQ#B t~]xl0d`^9ң_6Z zd}}9 B& NڹՊfc < Я_?J,ɸcݫ6mBղpB?`�څnw8mv~SJ '0g.}=j͛7]hߡ\Ixx8F<^wyĉiڤ v9sV=j*cǎ1UGPP^{TA2gA!dӷ/�ucs:vȠIKKc 2�D}wbfd2TR7˨T*p!ЁڵkNN09#"lܴ?g @Ra4aFbhܸOs$ɂ$ B BQP(HKKbnbn0ZsyNkV�lv;v{?3ݎR^T:5Lzl?CDfN> }qU] TA,8H ,-v;Nɓ믾?dAyuDEFazj53fn<LpQtibpaVʚ>رczmJ%X~ӧM~T*o+j֨Q>|87n$,,1GҸqJ-$YpbJ>T)W-sL rm+W-u ΅Z5krI"#ILJBk׈wNדDNG\|<j$.>eD ɓ4nъ4S@5jįzV.9Ǫ'Oj^: $%%ylV\gTd$eʔs$%%T,ɋa^u I!: Eى'\Gr;A8=yqx ZDGGsi~,z?zۤ$AD\|K޶yI,8H!9 2ov1"j.)C[R",a|ᇘL\۹S'6lV͚hт￿Ϟ ud΂ȜMַxV8ԩS3khȃDU(Rc! 7fί͛:Ю];龍S2gAVC?' vv[Y_W_bŊ(JL6u*v[ 14yK{5b)@FɯfcDؾc cǎ(PYtKZ֣6;KPBRRRm;ŗ_P?&7__ɓ&ѴiSV+C /"d5$ B BQ娅кukVJZZ� BP`٫cƌcgYӾC> ŋ~}?.vǴz6F6|8wo 3gXj^P\~N;3{l_"DI@Ƚba%�\r7kzz:جV`J^\xqXvzJbj#\T*lʕ+$Jq$Yp(d$ ŸIP¦2nXƾ"j屍{oΞ;Jbƍ4 29z#ܿ78|o>x}*T@->m�׮]c֭ 0flp_5J<z&΂F,Y3�Wnȑ#hZg=:t: '.>: '$8.p jDGJ |G\!^O\|sŕD m8&;2H%u@,E+dk!3:dmਲ਼p $]=?s?3^w׽ $ s@,!9 4X>gA!ɂ“?% P@HGo�Rjޤ߳4p taK/9FU—u ɜ!dA䭟=+':bJu_z{SP0ɊYN< sH៮]w*DA: $ B ɂq/H ɂH I $ ,$ ptI !@VC!1Y uDf2Ou 2gA%K:42J_9 2gA9Y?BzUjZ&88]U*Wr*| 8ׇt9 ,$ "ĝ=ItL J",, ಊ!s-8Bj7p)$ $ =WT)߇*-ɂˋ{;SZ4&""˗/{m+FqYc%U%5%t)j5ü 룷hAB !DJz_O>uW2gAd΂ ɂH FI@!7,8`$ ŸI Oɂu `A$ Ÿ@$Y)Y$ ,!d` ,!d`I@!7,8H ,!dA!dA$ ,$ Bo$YpdA$YBx#ɂ$ B ɂ/h/I+dA _xkO"#]th׮]jhZ_+kI>CGI)Irf/bXHNNűcYlj¨QL4MbZ:lG;cbXp!dz=0 ۣ#~qJ%ZŎ;|}*D&ɂ$ B BnU*f3}EѧwoRRRջ7+V$*2ZԹ3gΙ3gXj <(V7h㉶m1LXVקAy,8H ,ł^@Vc6v!!�\rxm$&%T*h4\zw-mXV6oL… F_QI !@VCܩ֬alۺ7np mqFcFFV3qD6=J>}0L\tE&!{XRUU\< #::;oHܶrբ\^7�\|٧}jtSfMN<NB >}^ -NGJHLL^ۨ]6ZǏ; _)W-vr|ivy7k x>z$I@ݼP8yȸgg5H}G[9i>|qאdA,YBx#s$Y™,DDD_ QDIPK'="B  5ym[ϛ X{ Y ^=z%.whJQ\+[׿8"xeY_%Y§ K˗P;'K8z zɍE$ =j፬[ts/"oI 'Y>_B)D&ɂ Y ɂdA䯰\os;?VF\I@*,,?nuWDQ(o`AI@)c`u7D5^dA!dA$ ,$ Bo$YpdA$YBx#ɂ$ B ɂ(ҌfhARV8s_n$ѨAUR $((ׇ,8Ƚ!IDwae�\|V1u&f}L`V~o-aWla΂̜T3_͉SHLJq??t8|Oo,$ "\r9onѿC &:l)xn|a~;tZ䗻a6[8]BB['>St�[3pR.]ΰS� (�K}Α]KII8ޜ;ؽ+SL ׿:ˇkc'87bm9~B[Rd1V~5FW!RRy䉩|{*A>1ѕx/8gvG.oc t~I4%YpdA$Yyѩ}c&܍uUC$'0h4jCp]᷃g-uD :h^?0QKڗD=Mkz|ًDFg{,TYMKH5aˎ}h2i{շԨ^]Zб}~ v"0PCN?�DxsT^G~-<iJ ɂH lARR)1-)S'Z7jQLIztmA-bRvTm~QHMMb*4i\9W`札̝4*U`4YQ,ujU`_y<OVcXQU3-tmp *6p]1 ŌT*VJ,RgPJ�o d,8j!dA6-?&0@MN�h߶}% @Mˇys. f^x-%Kݵbyٷ1=+K}s7#f֓7j`Ɯr?5֝L~+AA4m\q?j:?hߦ!/ǎӳk mɛ?!44~+zu\Ƴ`0ܰwc< z|vBC8?¡nQ (v]L2nI&-E / vݹdAPѨr?hwF.P*53͎h&88VGiq$'';k9}h% $Y $Y([_| 0ؽY(~GP*:P�:,x^G RNp /F]B[ىOJbx\7{麯OE>נɌY_e5>ɂ "k?;Y yïqCj䀯OE>Bs΂ ";vgz1!$$R1~7ZbK]9ԏ_Pvy؏^o"44e8WM8+9cqҖeQ2 %K�goFMkҵS3~=pEPP�4 |}rAVC8H ,§˓MB__ILfɛ'<3g8!,,tFn$a0:5ŋkixo._ҾlX9UXnL܃[y_j??8d,R4<W  h`G,&sDaV2&LzvkΣ-ymNFd4s4"=ufGys9#q0JT*fsF\i6[h [|}zn?Y,x_ !ɂ,f?q vfƌ.Rfy=JFM!DWdYSJ%[\wT\|ЭS3&M[?2,T\.TV+Lxm-7V;{,v5DY"oIߓ: su|a5Y{gNbݏlR)s\M2J͌ e&'KCYuT*8 ?' BL.-\.@Fm植7PȊ?Y(d~,/1Y "7Z>T](i5o,HG!dA?% u@!7,L"s@!7,L"s@IPbk| Q@ oCJd΂^($ c4\=n[nnydJd΂>'ɂh4b4sd/+yd` ,!d` ,!dA,pH S s9I)Y(dE,$ Bo)Y(dE,$ Bo)Y9 >;x!o�,k,s$YM!'Iɂ$ k7P׌ Vf͚Ν:Ѱa|Oi޼: &0zԨ<簡Ct@9,{z _},`{ #.x@҅¯N:yu>ǴZm"#j.wC5_oVEy[>uhߞyG~\{?٨Q#Bnn_N^rN^ _e΂^MDQ`,[pF#yZj1mTv;f.dQT*;FZh4vl6t;KPBRRR�شq#l6V\Izz:#Gjr_2x0z]hӺ5JݻY.Y[.JXڶmAP*|gK.eٲe̞=;ڵ[7}<.={6څnGҨQ#N'v1W9|p~wYdA$YvڄӱS'f3=wGP`٫cƌPTFbbb�HHH… T*ȇ N||<ju{@Rhۦ ժVbw^/_ZBR9Vt .PJ}ԩS%!!vO<%Kh#u оC, �;3g"==:@$Y$ B ɂ(8w�&P�f3z8̩ӧپ};A1łBl6ɉ'ݏf#MfyV+-[Zjlڴ B2X,l6V+*kz= EEncZIIIATzVνG<6ه%ɂ$ B ɂ_[ujת^g֭(Qu{lW_QF FÝFZ SBZhiӰݛg}6m˗9z#v;v@R9x,\pUG �iԨ&L�8q$-7Xݹ3*2 ףV1cOusPTlڸ1'J<+UJj1g$ v/Vj�.�._ 7Yf']IL`0PzuHJJB.*22ep9 G]V%.>CLM^ς زe 8sjԪU ѣGX"ŋd4r%1mgc5j `Jb"IIIDEEQxqcw:V}d󗔔Np"Gnx{ oGoтT@h@3G|r"?YF ^33gd՜:u],xZN8:*s@,gɾB sg ȹJ.TptdA$Yw.""VZwhm DZZ/_fqwت$ ,$ Bv/]rd2Q,8H ,;wexf͚w/_5yЪ$ ,$ Bv/_fԩyܪ$ ,$ Bo$YpdA$Y(l|}~FFQHI ɂHPǾ-S(o n$ ,$ M@n=].r,8`qdA($ B?% ӟ`A$YBxd` ,!dA,s,`1+"OSpWYdA7($ 7`b_9-?Qzж1sb2G8uB1Z[,[4ׇ*dA!dYmJ+㺰aˏy^"#Ù8esg=͂EL!~=pEPP�4 \ڼv-2eJr3<�:vhBvѡlzvk]OHd3?-B7K8Q7c>{374oZy|ْlھ Ϸe_q> AA+[/wdAY0,8NxH6ȴ=xU}k^O}'72'O]dST?1-T\ (�|1yJr �6l?`eٗ~Le@�x*"rtV!�~.k" #(PÖHI524jPTELݳcp(ɂ>'Bf2[QT*f+uXS.^e\*VGڂ95˲ͯ%44dŊѳ{ <4v,_~{XXX0MԚVmvG?f ݻ4GH@)6 "0@&˼%ɂ$ B Ba׭S3&M[?�Р~e&PT(DOgѻy}v &t^އ7 o&%%W^[KxVg_`b5$%�0-9q?bď(^\K\&@瀾-ys',\)/$YpbJrբف܉nBj1�.8˾τqyWpxW@- f2Y: ?d_Rˋa^y-}}Bɂȩ[ B1R(4Rj(1ݾ d퉋O,?gMΏ7DAנ_e΂>ɂ }' d?/T3_ߚKLJĩ ίW+Wnȱޝd΂ yk{:j/Е LzuxL֛{~}lV;az8O6qij1iz\1` /΄~eʔ)|{%C3�+<q/Ą|}N@-ԙhP4-S_jI@dvܸ!D֍xcV_o ?yzt1v=4#V{‹#<ۯ%>?\1El`Xb%Bs@�%$+Oy(�<tVf(NQKUhwm |\ F 2g(SU(J+*ҕ댟�Ռ�AAa2=ڳXmɔ*Y  @lܯ xց�dɐ,3`bVmJ,'YpBɂȍ/]g9~Z2~=E'n RZY�W+Is^[|M *VfkkYmT\mkx_+gԉn|a٩T1RΰaO\pCک͛`m<ե9<TקνKY=]Vuxׯ yf7XX,VgG�~N?VrR"3͎`"$$ΖYRg?,$ EULh.uZZz@snU!7Hl $ B3Y w͏=¡&8:?B((z#K}n;O!J@$YY9g<Or=T؏^o"44e94j%c_xv/'HK32jxCJ ?YdA$YYV,?RʕJ1 ؚŵ4 s+P12qW8v<1#ӨAUƿQ $ ,$ "k%Byl ôM-S][Уk 0, reKQׇ$rL(,ըVA�R E]߼m\r@3lh(4cV=Oɂ$YYyuhz_ T.EzʕKc2YP(%8RxE_J^( #'V+ٶ%PHI@T*%J"$Yp9 Bɂ QN,^=WuWEd΂$ B d_wd /΄ILJf̧Qռ:cŋkd[>!))5ӯC5b^Kش}oزNVESN6lϷekky}z~=pEPP�4 |}B,8Ȝ!dA%_b٢!@͚.Kg札$\H"%o*UsZroʜ<u}OX6lnG1sJ/ƌhOz/v`_SzY^Meˎ}0 ~?t=\R\td�7n`2[R4_v9 ,$ w �)ccjHKKzLz k6ԫIUu0̨TJKB.ZBT`FɔqkҜϫYO]N ,H4:ۄJZ|S usZQtԫI>EQ* g̍\tݣ€-ys',\)y̞o?JR\x Eo04 '{J}ᄒȽ|aBj1�.�._LXXo ɂJDR:ncz F`0AYlvL&3AA^۰fjǑmy7k0#y__Ge΂s u�~W*YjRqd΂C} }΂ n_w 2oX,V.$9OvtII)ǭ̭q?.%%n%<kGޯ2gAdA҅;qzV}'>1).jj3n00.8uL9 >Χ3&\ɜY !9gARxׯ0mr,f+s܁1D :�T �ZDHHJcƫ=r%>ALe�~;xDV1饮3\JtK6[Jm6ޟ>Ά-?szy7{͆eӶY>\cG= ߰{!(ک)U/d5C% $ Ÿ@$Yȹ[Fаi>kɈ8dStJ._ILfɛ'<3g%"8}z<@jZFg% ܆`NH`קa-yzoK6WSYq/o#1fCl#zJF Ҭi 7V>j*;@!So`A,%s IQfy[ŊbCVVgwsHUJL7+dֳ[smk36p?Mf4؈{P(a4f  P*MffÆ_vdf6E>M4gߐdA$Y(jתM{l!�oU+`.6 ]/]h43f8uZ5s3|[[?]G Ш)U2Q\Č9[X{mfP(;>9[3yz#[?Wõq෌ 1*2i:ΜM~PI uWRg΂wYYHO73wTkv:j9o}6FSX~5(~f{xqD{J.u; yG, Y $U ?AC.-(�oɎjүCYl/_: ӟ`AVCɂW_-XdHQjOV$YIH ɂH F7H Ɵ(IP(Jv $J|[Q!d01o_ߍ&$ ,$ hh4yCy,99Y.E$ ,dA($ B% #ɂH FI@aaaBᛏ$YpdA$Y/,,?nƊ8BIf/` ɂ$ B ɂ)|LVI@!7,8Ƚ!@!7,L"ISP0ɊΛ)dq5(@kF).>1%$$axV?'7s*l6;Q{z >A<In_w .o~w2-{KRR]\rdfY!#p ZY1g iiF}L`_0q:,7B >ʜ!|q3�+<Ƕپc?j\Īw0cf]Kȩos vjJ*e<1}fn$i޴&];5c{_ogׅa~?bX1-FVa Tw%>!A< 3ވVȳ/aGiެOsd΂$ B ɂ_q S,^�]lN lCX9 fa6tؔCͳvׁ¹.2vvq!=|NRIHHB4ޟogʇԨVҥKx=~Le@�x*"|}!ɂ$ B ɂ_b,{v"Pw!)UZmiimf+kY懣$$$lѽUhҸsg=s~;x/=M|,,,eGI@῔J߁y wr.kԫȨ8ʌ?k1*2i:Μףw 5n9P�X sf̮Ukk=w>jK0L�f#G|}!ɂs+UJj�\<߽%YoyCy{DDdD/_uܾf8<S ШxcNykmc2Yw\nü 룯 u@,ƍ4N&tvwKRgA !2gA^MN[II)C74g˜Od΂(LzA~;q7}i΂o<H ,o /΄HO71pػRN$}{<K?#hCF\ʶMlT*:ˇkc'7p! Fq (^\K'Y^dž?3Lxm-W`4Z(Y"c:QzY_\dA!dAn6oeX,V.$ak),[4>/fR{XK 3Cxq- =mԠ*͚hʘb`԰vւo?ʕ FulJ{`IN6�s),f+-"\W!>|}rII@QhԘMKԎr>n4ih}4N P<LK@*hTJF3իeK]Xi/O]un,]K >yv<’,`>2HDVC7#�Ə~VfkkYmT\D Z7䍅9u(r}lx_}{c5T*xe\bű}TP.\ʄ֢7u /Z y-3Q0ub�xH'H{RgpUrR+!-HHHm?ᵵ<aa &4k͎jCQqIт$ɂH J݁O4&$$e"JRR_dA !2gA߻CP0ɊTpISP0Ɋ$ B ɂI|tR Ÿg (r,5K']I /(Jv{' wEQ&9 ŸI h~}ݍB#7& A,%QЌF#F>&s<H $ B_d$ @!%_wAZA KP=(w=ǣI_|r~IdAd/I DA:K%Y(IE �Cv#2gAn$׌+,?quT!dAQdAVCAIE ɂ_2P.E.$ $YKQc[_w)J7{H$Y ɂ_2P1P0~(?CrI$YBu҅uR7(!|A:B$YBBaI ܳosK\ +2PD7{zۥxVmX6M�\t%55eD_B[igGhA*7gzoqwZm{r1+;.^odɲs6}O7wp!tq?.d;g>8)$ ,RX0ޟpj*o/tmS+78% _Nfdvyrs܉f\K|[[: ⿋TZ\yk{:jEL![Jm6ޟUaC(PеSSV) ק9 ,$ ���IDAT¿iF*U嫾X F>ߖUgm `̈4jP/v(�|1:o䗻nOmZm&7Gƍ4�NȾT1 D7rzoK6WSy#ԮU/vj2�<м4,dA7IhT&3mOA+J,kT**օT*%AX6TWj*L&Khܰ*=GqO А ƌ65A I\H $ T\.ݴkݐϿwVa<71g FżuYq/o];6چgn0~G?MklAt vp-I:Yn^ҵ}bUdu9/�vgێ>>QXEu `n*ɂ+,w-Wn_3aaaef$$$h۱Zmժ?fc2 s pHNN3 0oGoтTCȽ!: 0d@@Tj�f9y-Hro!9 B'nu ˽! hȜd΂G?|>@Z yA-fH I 7s#YO5ک8"((vmRlI6m߇b2njlV;az8O6hsl߱Y+EQT1fڃcQULz+~?C`ѕX .϶Ml�CV2n|;z w#I<H $ 08%@/T.,k" #(PÖ'8>ͳZs^dStPWY@ 9}_")m &=݄hni flMZ[˗oXb#9wZon$ɂIdAf?v{՚eB.bʬM d Z1Rdг[s>k360h4j&3oc P<LK@tX6ʖ)鬿�^onTX,jd5WvBCy핧XK&Z'a@ߖBCxyc?q vЯCfƌ�g_9s_4jJ !,"^YMkEԴ|(7nR\)gg~jUt!!@,S(eRgDB@@l6;F0>R6:%%bh6[Q`2YP(h4[)u: ɂg,$dFZݻDp[nTX 2gAZ>T]kȜ,%ɂ$Y ɂ_2PB$ $YK!/HAd |APbk| P݉,xdA/IDA3oQhfda"ɂI(hFnd$ I I<H  ɂIdA.x?'I\x$YD Bܞ0v]{ ^t,<Y:%YInm$ d΂_2PBY ɂ_,!|A,%!/HA$YhZmt: Y<Am I K,]y& $@A2e&澹 Il޾3gq}'sܦ^odɲ󬏿Y18Xѐ$ ŸH D>{374oZ[gۻ:;7DeQlھ ϷTP{@։䅡O8/Ç~{KPw S6o-/_S-�XY<mcޣlْD׍Op'?r4##0.9O|*@% v$YL Bs]B dŊt5~t%5aˎ}pZ  ᅡO�@Z<м}X6z@#qF�'O]dST?7R\) 8Cpp�cFQ 7ɂu I ,Qf+NGoR4*B.n:\j܇J$44ՆJbZ佀lqêڂ][קQRhCTbX\HAd D^,qqWZoZB#GOh߶�şp?p�rێl۱?<tKF>+�4oZ~g{]'.0oNՉ$M΢ww( ܃@3lh󪕅e΂bJrb�xTNtt4F),BDD�/_uW5_q;M& Y6Lppmfc2 y@ Je^pHNNv>2J!dA_n�T*hh#7RgY$ BۓBHH`M,x9 @A2rYĩ $&=9 ,$ Bⷃg'8v"=R_oy{gthۈkSٶc?z -Cgpw$�6.$Ѩ83:cŋkd"ذgF>ߖ eּF %K0~L'jT/'+ɂIgXb%BG}_"5H|՗ flMZ[˗{ۨAU5є1 39a٭|+70tؔVfl�ƍ4,f+-"\W!>%Y ɂ_,{v�z+Mf<Z&ӧ|!4"==g24jLjeRlSiݪ>k2 6G`:ȉ’,j!dA_9x/M񣟤ZlV+`0Wh׺!o,o D[c#;OϮe,R+{,#%@TJrU&R!|aY !uWwۚ’,HufBVnU -HHHm?ᵵ<aa &4k͎jCQْ: 9dA0Pnqp'hLHHDH%J2/ <Y]�ro!“,q7KO7fD+6qDEgNf5}}(NrorId KLJĩW"zyk%wt!ɂo,._e 2� x}l6j(ϨaOm~OZ`0p'?r4#1Lj=vcb3�+<WUX ,""ӧi�vqgDQ}gƝ'<ٔ/ȸØIO73Ŏ�$3nNen4%C)Y֫*Yp!ɂo,Qlv JE︕J%u@ihu|6P�IH o~;Æ?qUJ x}vV2&4['.0wy2K71g GwEZLzzw@>܆:w K uWwۚ’,HufBNu~;xŵ<Ѻag4Z ,z.-H [a(!P(w4Q_Z9~ dA,AIBCx׃9 @A rI!dArI,%!/HA$Y)Jv K$ $YK BHf/u)ke ɂ,%ɂh4b4} f$ɂI$Y ɂ_,!|ARQ\h_wJG@v]nB9{! /IZ]*8f"!r/--]B䳻$ ¿\1Gr#) goݪ0<$YD B!'I2dA!$B&Y |y>,] -•$ x9Ǿ->=)EB~e $ d,d ><%ElBCLd΂BILd Bxd!IBO,d׃3gFrTv˗o`H7Q1׹.QxJBqdAY0S^HM50ns1W3n[|\?ٞx|Mc̘嶏erF!u d)S#i>,+/<ߖ7�tSa_c49~hs /΄ao}qFL'*WM ШII10]LԝfUJ~ٸd;i=ϖp?z(}'YWzwxB?& xjdoF\ʖxat ;v<�]Zc<oX/ysp!֏N3lPkýJJJRF9#tr?^zߥ_)8X~?t=\R�TA܏J!d}},cVX*f ݻ4GH@*{v?�)gW+KZ8nh}[ U*FRzk(UZmiigJb_<?_B!OGߥ 4g{@6 y5y<}[OXS8uzuرWV{*VfkkILJr@ƅ<;?rq?bď0-<p4o.mxf7oZG8r4!GG% *U#n_Wm6;FndL^+w4{8shbc ]2E׌)j?^GKJ<N r^_B!&LԜBHH AA{QqC@Z<|А`jT/!s΂^ode.דݸa`[; xBI^% ~=pEPP�4|ْ.u V|@rW6?t|QOol#B:36P.O6ڵ4ԏ_Pvy؏^o"44eR~8BBB"|+Wn0͝m6yJ|.cmxq !7XgP% b%B&*Kxs}{ ܬk`dmiԠ )6jPfMk`4eLLN10jX;zvk7J #:6UHO7a4ZFr[SVXq/oO ctjߘ/wcnXB~,dBVjV/|ܽYnhTJF3իeK]Xi/O]DW2i4"=sufGPh�0-T*g-9V!?& Ÿ0~Z6ʕKs៫.;`:9֏շG8v<]3 ,Y1JWu!X[?GJ :V)øWVS:8@gtЄ>F kG PӵS3v5g L*ǻN: pu &t",,9 =݄Fv~m6[Q(9njV|}: EY_/E: .YV;k t辤RQYBvcBQcP,䥸D"ý~yB?Y(ԫ!ON:Y<m??BQjL|,\w*l۹; &-O -Ȩ<>.8g<Or=oxnXY<Oum ! ɂ#Jk$�ty):](�ўF 2Ŏ^/ժGSRi>G톓.o)*U`lS!�I\*Yp(J,km|;JGbXGT*KBUѵ= ((�?\RDDɹB$YWB8>\=ׯUA;9~sK Do01cFI5㻽oR^H,zw7ߎR9[9r|!"Qg!k$B@ E6 F Rg: K^3<: -Y�|>jm_ B!\d}},sPT*%JB!LG[(9 /susʍ,/uBDGIի{'VmRz9漹F>QLIyeK]7?pEBC0Gbf}X,V^x-ʕb;z-ZY!-ԙhP4-{: o/!>F&kØ�`XYโ!,{Cd=iצd-?ө}c֎bΛ3fx;ʗ+śs0x (զC�,kjT/իlٱ֭%0@~}{>@rukÆ?ҭS3ƌhOz/v 9Eq+t DV.Jɒ!cBwT`4]nd2[PTTJ%a�ʼ>/{e8f ݻ4GH@SgAq RjsVuԘLfHCsQb2PBYȤ,kӈud札qZ>X26ѵc3�W?3J#P* ے7¥Fqb3lah޴mBf2k#[nno-h: >jX,om1L<f4]CgQȪBvu B,: EY_/EqYݜ@ۻ󸨪X4A7ܗ~ZjKm13-Ŭ5s),5r)\rC RdaL 3` _/_2w={g\�Bq@\V0o5˳� "c]A…T\Z^o$;@HHB ]~a,Kp!)wSMK!D c]c>[ �)Y<vN”Yzu{[~BxoP"{zoFExXeڙOcq3Ft%99Fa�(VLH@=-[flڼɷ[ @5ߧ b5bZ; ¡]?Űv^JO?ޑ"* Lf9BkT~j|8.&_8}>b<1C2!!= ?? Kdl &?Y"j@JA ؞9�t{3u{ӳ!!)-+J ݣ%�`֔'\SzN1i@v? Y3&9u6şR@|5߼:^FFF6�ujWa@vR!HB>gXl~FtaZm(q'I*J%|TJV0gS&T*\h}1`P*ܯ_0gFh4_wJjNKʶhv I!(MgDΆZ<q6g ; <28x(5F�T*%+¾ygn̹[8q273_[.@-#�00i5ex~C'8竱?RITPVѯ/sJڔ'/gC2~׶>קmH,6 gݜ8̹[rO֯+>ʕly/g_H,!D)㍳!JlŊfs.o[@֑]l`6[DZ6FSkg<6M[.q< Y^.|HvQ]GV9_P*�Ξ/:r6!= %jBN?gLt|pYou>Eu%P|L?ujW/KM" HBcJl{60{6Z8t۝@3`wnYMVV32rfe'O'uK*d6D>EY8x ah{�._`͆x񹮼J;ϰЭKS ŒŤX;6niӪCW ƿ& b'Ч- }|iP:/|ء?<9~fOmus ㇣WZ4JF6eoLڌvmұCڸ׾#gYϼrCgYnj %0пxNB[{JĘ'hXj#33|Fʌ;fwg3T zhIGڄiU>=[î?dfս�Wp5ۀbf,\v8v< _㹡y&Ǝr aQB +l*xkSifԢu8 ܁g^R  BQy㘅b `Tt`B.4mƩ3I ezz}yd'LZEȻi$ j JbqYO|VkIK~mg^7�+ `4 ߞjGQ5y SmBx'Ghq*`˘&ÈOHa;o)_ IiJt9ԫ[_ʷ;ؗWNXA^< /]alzvDNX*nU�rLu%EB=Ԕv%;Xa}ydt:Οl<˦q|4j)Bq]ޅgA7;jaXhi4[].W7#;lw-ww%Bi!y|gKi;g_JJ)ʅfwn((�n!%7Y(!nƥKWJd)SҸ˄V, B܀7Ά(yn`bݦ}Ğu?o3E*wo[BɳYw4\#=[2UF?(CV2q\?BkT~jnYr7l?~m]nXNILڛd#(Pзw+3mlV+O@Nu,X|ifʘ ˱ZlTHlτGӲEmfFjj&uArJt|OF!,_z6 `BQV@\eE-T9O@HHnzeWi0F 3O<@w3vt/jŏwL׏U`?EjXy+Q<DG=GH1!^Sط45C+ft:=J ,_z||U_jb] ێ}ҤQ0ͅ*U޿xj|֯J^DP*Unu=0 />>*~+|}}a4֯VP*&3ֲ͛[ޠ9%BسPfC׽k3CNGMQ̙Jժi*is&%-j<W>[lV5C+Bըa(Yӏ?@0uۻr Ԑ̙2em}۬\ 摞-iX:7μOI !o Q,܈hFPͽlpdf8nZmNcr^^WeX6 T�Am0m3''7DŽRy3ѥY(-$ςw)mC,)>>ߝMM|}Y J LP*.Ѩ;\o}!7,1 leO )TR)ZZnE@˄SB!J>oP"gC7u7ZCgٴ�>1P,ZlZwv'O'BIfCs= |=u|91W`Z5IVˡX*VW{3}fRR2IId{SB l&-*ukW[7̯p# Uǟ7 uddh*[;F�xmr||4Lx++<ֿz9˲/՗{0)W}߅B|ҳ,tFzhV_KJJ&?ì)Ob6[Jڙ>Zq䏿9u: _5SSw,T~`X~ws/2kʓl>r#~?ڞ~3n6ZnUC+}OKZ<R!m= ,8? '".ϕ*P((^o/Ѩ1]˱P>,Zz17SW,ScXXv RۦFt`2YrOp*9n$ ƛ*C!wq}}t׳Z&aJRR3 v| jPĤT&O[U_!y ]MK׭;0>vD/[+iӪ <|G:KW>{3'N&2soz;:Ʋ?sP{׫C!D= *B|iz}nBqSnE;z-ncO,g{wƻ!ynã o!Ûɯp+q!%YV ŕ{K |2Z?>!+�{"4}Hv*C!D'!c#տhr M W 理fqtbBQy㘅߳P0Ge@9u{PULx/뫦qTM>^=錔)Ǣy#n("տ,_LCvm:nxlܲMs&4i]wEqO0�\5iӳ%M;QB!JYV,=p9%sRB g/rE*U û^o`0cAFf699&F} -M|ũ [ҸQM"jU Yov�Чg+BBR lk '@^h$eE ƞgZp'̣`(ޚgAQc0/@->>*XgddFM oUZ~w\U!7Y(!ry"G`0/0[<73 6">5 e˩\)/MOh:UYi?'Z`LybPf‰L'wޥ)gDv5F�ԮʆCk*XƊտ`?!(]q6D˳0|8G<ge)[dR)`0rH?wh4Ng< K3ޥɳpoE !P�|(Xnh[A!ƞb ՘ۡcŷKB!-vc6dz!BRggA!(ɤg!YB!IB>׋ %6c4R(4 !Og"= xP [(͊2mR!\,�`B!<{d̂BEdB>2B!p= ^5fAlnB"݄Ș|$H(]c߇lfO7DP(4n=Z!YGzJ@v'B둞|$HB!ycς̆B!̆GzBgҳ,,z\ёsKIN .wW! Ezqt"5*R~??:u/;|,Wо~8Ȓ/vX{ Q {C:[R~LzgAfCbq??uiJ,g^}'�{~;qJ6Þ~~櫍)\O؅`".2O T#gYv*7់|8�/lWXh% f}w& `D֮ZM0-\WNJd(++KOߡL?Oz!D #! b4 ؗn;r_h泬X~kᇚѡ}}>be@vdfս:Väw4I-ۻ56lt{\n(Kd]E3c ӆ_:vQfe:ul]~~^72=RQtҳ,y"kWuBJſ_ !eHR`ZdAVR0,jS*<ֿu Jd23O[S ۥP@(b !J.oY(= (ܹ6|?cʟ9x(G˨_yATkk2u5ؼ�K~[3ajmnO2f ƌ_`3oݻ6!3s?c ծ#>N3 !GY*U#r%ؗIςw"&&rl RX,\/trr7UdAQca0LR54i3"mUR%�o>q{:Zd̂ ~9u@RŁB\YGzD~yRW|B 5W. !K8fAzW9w ]ԯ~ڻ B%= Hςp قjhUO>?fc9v<CGΡQ+8F t?Gzt*p1 oKW'֨D<}X $Q&_͌0#8t:#?I\e|Z<B2س !Wqޜj^�t:#{`g Q z/s(,+Q<DG=Q/t###�B7vFs4mȡp4d]5s]ivO8YWoM:j!gCȳ!W2̨T*{<w"p34m__~ Q; f1uX,V||&\ 0T*Z?|}4ج<"U͙r$*5`꬯Qӷwku}|tŜ[ћx鹮7,+,_'9w kǁCg3~ @R2{6lV5C+T*h׺.oLC$xɳ \*< l6,+jCf MMʪ{x͍V99F| fY(mJҨ$ɳ F @r{nV�:ul( @ B\7,ȘQ.$b6;?ҥ+u'\^C"q̂̆e9-L۴س:;ey\qK?|,,!gCHQ,>b'Gqx^ѕr(:xބ֨H&BxXe:Ee=*&֗@ ~a9:DѱCvΜ&S磏Eo0ѣk3*V/va0K:xP !J8o̳ cmg2Y>zccZ/xmBb*q&/Bz56kEմYtzΜHA<^ܼ #_^ @Q>r!j.۳? {t +ՠ:Mqt:W DԪ?lɋ ӎ,B2f!pZm(=YRbYѨ1s(h*~QWז;F5>vBl|`0t5Wd8n0Mty1gaIoVݿ`F!J,#cj*ˈ>zJ=MxfvvBV|gMrL+j]z6m=QS>80}f{^:0eF~}e;Y8uejw;`ݰky.�-@3x !J o yK#B|FY((+KOٲ~iz#~~Impb|nzM g)K|>$B>$y +QY( ກ@jL,؄7,l!n1"cyl (7ʳX;O7Sq1 ҳ BZUf}F.M]!B+QJ0Q 3YNILڛc1զ}^z+Ugͤ_nTV)yHM$ 3na'62#8t:#ש�z !JoY1 +|#n]Ѷu$�kgu3)> Gzt;g绨S iiWYyuj;~ Sط4שk_ּBwzcG 3Kj`47§ F&(dB>ҳ 3MOtgB@�TܻgS'׽_5̀>mt?h4y&3͛b`v ??rrϮQc4` !e%PB6ҳ "n]1mO0u;7ς@PbڨZ RSC:2g6ʔ㾶z]Z"O `ϳпO[:׀~g'A12yzƎMuydd4^ ɔBqxcςY.ݎ<  ngjcth0L;Q7ApE}zA@Y(mJҨ$ɳ •ogAT8;P*8oB B\7,ȳ!G\HL 덤f]?>!H̢t UjB܈<"ɳpgl.22t�fqt;U SfQ &mGYTo#g_ !J9ɳY(zoFExXeڙOcq3Ft%99Fa�(VLH@=-[flڼpߧ b5bZ; ¡]?Űv^JO?ޑ"* Lf9BkT~j|8.&_8}>b<1ҳ n?? Kdl &?Y"j>jR l�rF=Ԍa�ي2�X,VһGK�>_3o)ORr92z#:6bā)Vsg<Mrl?EjXyuFЍl�Ԯ€>ս B{d̂mͶps wRSSU(JLQ,._a@nBHYl(0 A�4jFۨT ,VuZUv!(,lqTRLȝUVWXF�<˚ {ILL\P�*ka߁<3`-8ٛЯ- }G`U�}L2~<?!R?~ X __攴)O קmH,6 gݜ8̹[rO֯+>ʕly/g_H7|¦BgAt,X,Vl6Hwy z�ڶ:f0%ja4 xi?Ylzp Y(mJҨ$ɳ wW-h0:j)R(t�pE�^}uqA!n7oY+dg%<rLhhEezl!!e]n78R!̆GfCL|w s~/{n.G̳ٛ|n._(J7t;Bo != £6lGd@nN__5j;|=uFtag?8nHLJQK.#%%)Ms::uaj/>וZws??uiJ88p(Դ,&Mȟ%8ٱCOJ!D)= 2fAx3rhgk9 t:#{| c>CY;NIn ؞�ЩccȣZ<.]!337C^LxXeƿe;kW ~}Ы{ 2V1 gAxTfɗBYQc0r"'"<7S �*RZ:7Bl0sgm[OdmIy7͚ٟiL!U$B>ҳ �zwo쏶PƏ{DҤQcXNJAk}/r22 +ß? }{m:L}@$&[+ zu_9u*8)7,HҭʳPX:xjɂJ[JQs7bڰXh4Bo4==ɳPڔyQI>g! D~|75w+Jp !>oY1 X,V:q޹ҥ+>rWRnY:Gr%'gcBܡq̂Y捷VrL&Azuo#}nY?bؼΜ+WGβכ!I|deg?pP,B1g8tZ"Vsp1 oaƩWXL?䣏Eo0ѣk3ڵKumOd_xmT/Tna3G̟qtFZ4k ҧgK0L%\AXn/cX!_C/(a1ς,b1^ݻ;AAZ>^̡.B7{}jnP:GαuamSjYBcjQ>=23K@) rr ՊM©S W<1V~a֔'1-\HLB0س cDXT+}gh$�ZhvJdt c'p5eC:HU0Mty1gauhTMp'7'C^އUZ~w^k57߂Gd,|]B2f,ܹ||tŜ[`Fڶ䋕?h.^ٛ9q2s:kg/R;r\˴iUn5廝pn@xXeNNb' vkYwG[/[+Ԩټ�KJ&aJRR3 c !lس yKőgh4P( l`6[<1qB*lf҄/_ph.p7wC$BiSF%|H|$H/jC"*l�(s+E7!yd6c\CTunf !p8Bzc'S(O7E!Kz򑞅;ˊտpLexNyV tZ<h{ZyHM$<1a;[t|S�BkU?xnYw##SGVݚLreY̚$iiW,Vݻ4_hU|ѽnA!{d6(GѴI#vb:YX!':r9rF=Ԍa:ľZ50̄Ufg] �Rx̟,�?ԌIΝVˬ)O#�_fCvowDӭK3;{C7b0 #3P(q6Yb!1Ny4hȝQVP*&3͛b`vY6>0vUV)Kppk/99L& Ϳk6JQ( `0b0fkh4j .vv_7gByd̂(}-6,M\W۬\ 摞-iX:7μOI UcT(Ԏ?[+iӪ n]1mOPƼʕ?j/g_H2+BQd8fA,nuFNa< _o=@P`�m[G:L]1qD}becM& *ކ yJ<4*C,#AET8;pwn0)ǁ2Fa �f?!+س cW Lj!L'FRSTgjjzӻ.y !͆1䙏Zm{`6,[N.%5ԾI)b!7Ά< =m f𑳬ZJca>|h޴O-ٴy?o粞 /{֮ߋBW(,g^}'�ȅT45<BBb*AV1ᵾ<o~ٸy?:2eX4ogG!H|gԫ{ Dj&MHNٽO97Bz՘7~wJ )s:*U b\roItȞ_fԢu:43rxn<گ?>ΙT1 B`S#>DPMINC-(gA,bUJ0ֿﵙFZJd�ιr!+FBVb0x_[[p?N�|4jQB7YU\sޭ0i599F?�p eԫ[ J̹[8q27ܕ<bYa/i W_ _cODͽ1m( ӇM[{:[Px.B28B,nuwr3)zL[+Joc-F,6%y^iTχYGFP@χ0H1Pv !DQycς̆…#=!gCHςBEgAfC!^DfC#= B!3oY1 Q(lO7DP(BdB>$.ƭG{%JQM ! ҳ,.B&= H B8ƞ !Bxo ѧN;(/.CWC/:1 ;Uhݵ݈gc(r%ItMBx箣 )I<ƪF4IH'־̿lyN?*KȃWI~pQiT·ҳ KzTtB,!(B!( YB![ҳ BgA!nIςB!ܒ!B%= 6h֬}yիtB]viiG$$$ӻ+,[ѣ8azbq/Ze>>>_ӝF гGu|4k֌�֡mB!+y6jשC˼[deeEPqI<J (W[Po޶m)!ӸQ#ΝKtt4{m[b-[X,XV ΫGӠAJ%Ѽ;>4BQBIς.\H�/Zkc0x xl BCC)ĥK0$&&N-1XVؑ)Ӧa0Y&@ll,K.%** =z`6<$קA|yh4>,BQIς<d￟^z_ɄNfV큁bAVcZϞh2`ÆRoLӑ,?BAvv6f2lrb g8M2`T* K>]6A+TV~ר՜9{Zܼ ii:u IHwԋ-8߅FL>Zɓꫯ`8{,/\J1yrB<YˣFQn]F#ǏgZj9shhZt:�f`ڵi)+�Xy;jĝ!z999=T7rJcƌ!%5jwMٳtzN:"%,[L,55Ty?̅] )!aY`�Wff3m۴ȑ#lذӇE!J0ɳ \ N,y Z*t/d{0B !\ȟUN~W@v�#_txndkY(~z)B2nwkQSBqg1 F[nX,l6C cahٳg=lۺmJ=ضu+zF#XV6mL,MO2w\233y򩧜ʜG疹Oiۦ 5bpAfϙ>Ϗ4)WÇsJWޞ>5B!ҳ ȟ@R9D�xvP<x0-Z`ԩW^�XV,XcɢEDGGsI'33RI&MP*III4ieF# *sӦM:t]CRR}f͚1|pΦlٲ4op@BB͛"$c ̉`tf4^f99(U*�J%}0fCEFFؼe VZJ$5-(gU"*jaZdgg{<4 iii_?8\ 3gիK@I!<ҳ Q:kV/ CR9D�XT\ 7riޜ8FkN=zZj�!T*`< ӦNa]i<h-Z�DDDovZye(^3a1nX"""ldffz!x:Y*U#rS'xlGKV0hl`4r",\oIBB}bFnX72ijc@NBht:OЧ'ApZ< OjZ*``˗-c8xs1s T*˖/ѣ@`ƚ5kB\\իJŊ\gϝsyT�ɞn( **ʞgDx^i;J/n())~S0C2_]�HtP?222qg!-,SD9¹s�h4:6Gܵ$QBq7L8=$!(d̂B!ܒڶ[Nzz: &==ss9H=-‹vIEbdpp0aaӴiS�|wG!J(YPzz:9P:u`׮]nB02fAry$򂄱& !D #d׮]L1aCz)BQHς{ BQHςI E!= өS'v G!(YwfM&3"H$ςӯo_ү\| BQdgAx;?>3:V>} m^Rr<ةL1ӻ$%,/:u�bϑPt1~wE!J8Y^D]Hh2 Z-Bҳ XjZ1~f۶mnBd6B!ܒ< B!pKzB,!-YB![ҳ BgA!nIςB!ܒ!B%= B!pKzB,!-YB^hѢZ ~։e߯o-[,&,B ayƍKQ:Z!ȿΈy<!!!ڗU^ڵj9[=o/M7恎/jBquQ-= U*UPլ^V7ޠE�̞=QFhlXV>ϏO۶mضu+{f٧bxZ}ۓ|2�|1DGGd/^fCTңgO9:wFTҥ\6[yX,<ts:A<}Hς(Ǐsa16H-2u*gbcի�.\ 11J?O@@�ٔ-[={͉'ޣC�P]lٺ#GbZШUƲtRx'IJJbĈm]b4X,Z0[,,^Ç;y>BegAVe̙t:}O<6 ٌ>'2e`6Q(L&IKKE�PS(dggcXѸ;[#%5RBf=uq!1`_V~֭_bcǎDDDw\S;B'= jTUXWsiޜ8FkNׂ�ZRd]ʨQ6f !sQjժŗ+V8a4bŊ8tHu} wu]]9~8Qx�9~f͚1kLytB@@�ɬ]֩B!uTZmUFD--BCC\gϝ#55Fq%=FFܞY&)))A<u<u:9iv,[nN<ſOCk?M﹇Gqzj9qℽMySRS[.FǏ S8T�ɞn( **-JuoCH­t!=v瓧N9mEm.]&ϟK5gdڷ !,, Lzݶ8qiYzKMMujB<gAȑt*a Q!$aJ%^ԟ0q"aaa>LBq1 …f͚p-OVu  �u##^d=Ow5}գo>N Y0CaMm!slQ[lhZFIBTbؾ};ݺub`:lÇ sȷ=lۺhӦ=zmVz=#F0 hZlڼ:P&@˳C{bVeܹdffSO99-sɧҶM5j_Afϙ_a-X,V+Æ9s@RѫwoO!Yt ZҥKf ١CIKKc.-XV,XcɢENv|=(J4iRdHJJIL6 Ȋ6 �F# *sӦM:t]CRR}f͚]7B^އ@BB͛"$c fV+ZfCa6\{oART*WyV+RIjZ:999a#7KvtpUj%[z-@vvCѐ x7ٌ?3gիK@I!<ҳ Q:kVFV3ydPTZb_~IʕٰqSWWHII!CPTN.1Ls3!2m6 E>|ymWl;l6>=B!gASKfVpB&& .-� ϯBht:OЧ'ApZw:ac^;+;*se_r9fΘJb=zpίWVIIMbŊN%Tg{y%]i;J/\K/))~͓?ι_0A^ m] @kK^]<yGp9�bbb0mwM-!w !h8y':^|$%YB![ҳ Xۖ|K�IOO_Ppp0syΟ;B箣2fAo{FXx8M6`ɧzzwQ s8=ѹ ѩS'�v !D #cD)wK"/HknB0QAv36t"%,;Ppp %,; BQҳ 0:ub rB"qiִ)aa2#B!D,;@pp0%ɷ E&yz3ӈ*jӧP%e*̃:3<KBQBIςRgOѩS'hX, M{zW᥎MdхV*ÀQ; != ‹sgm!LfC!-ɳ BgA!n= B!($XB![,!- B B!pK!B%B!ܒ`A!nI B$X(aBBBի-Z@t!!!/:w}7ޠe˖ЄB', !!!,Y><¸cQ}y~5WG:1|8/u"$$?_իSV-r ǝmI<бE-S!D+GTJ*jVYw}VeoТE �fϞͨQh4l6V+ agGNNm۶�lۺ=z`Ol|l-{I|WF>CfYd /fT*ѳS[GC;T*lRV\I֭? X,:ܹsؠA>B!:|F` ҢE LʙXz HLLDR@vv6e˖e޽DGGsIa/{!�Tz[nѣجV�4j,](|I1bup׮F, sz?V- +/fl޼Bkgj̜9NDz/'fa6PlY�f3 DP` iii|h�qqq=uP(lqYwNGJj*JBfs3ºu븐`/Ss?r֯bбcG""";.ΩB!, 5WgU+9}4oNHFصs'kAZFTs.ye(^39z(j+l {YEEQbE^:$ :۾.?~ʨQ<S�?Nf͘5s&< ]t! d֮]N!AZm@vՈ(�bc<%^hh(+UsШQ#@Ht:?5k$%%{ ȓNQ72NѼ]' ' ?e+͉ rrrpm�=H>.Z^=Z-'N)o@cJj*uh4rq wpcv G*U 99MDEE#Ei;m&..Bz1'OrF< N$]L?. 6kHȴoBXXL:m=qӲFGG;N!'!#Gҩ+F`){Qcĉy0 !$Xb͚5#ZVt/xwm�FF:!((zp4jPe׫G>}r%,`·´=$$a&B!܆R۶nfj9r$]zRfct łfca 6!¯{mV, �M6[h4&jif:v@�-@eZs璙ɓO=T漏>?%~J6mhԨQn~=gS~[`XZ >! �JE޽=}j#= ^{f�*.]l6Hxx8�JZZvoj`4O-rʯDTҤIJ%?DRRM7fʴi FV|e�`4<dgU6mСCt4k>ԯ_�h<O!#IPBfV+ZfCa6\{oART*WyV+RIjZ:999a#7KvtpUj%[z-@vvCѐ x7ٌ?3gիK@I!D` ը^5WV<y2aaaT*E[s-/rlظ)߂++�!T*Ky/$]b#ݙfCWel6D-8|0�7̯`7v,l6233=}z#yP,-ZW… $$$̷�'?BHH5jOH=m B@FFUkJiyb˖~z<ȹs9c*e˗sQ9B^Y5W'%5+:喸SIUt|x:*Ns/!$6O| :B ~yy2229wB^;/yu,SD9¹s�h4:6*B#B 5Cĉ^/[MBQD2fA!nIς-!�``IOO?wR; !(9$X7ہ#$+vNӦMX駞!E$m9ކrԩ�vtBY"D^0<$!$(vvb :MBQ, tB c$XBA:ub rBAQ5mJxẌBBNbL}IrE-!D "pL#ΫjyOBm\p0vDzz:g. !(" [gOѩS'hX, M{zWB$ [&BB+a@jB; R҈93۶mtSBx̆B![,!- B B!pK!B%B!ܒ`A!nI B$XB![,!- B B!pK!B%B!ܒ`A!nI B$XB![,!- B B!pK!BU,BV%?�Z>4Xi @x^{] v_g]"+.JҒ=Bɗ{$ĝ(+-٣+Bkִy P55HO:k_\qq$tPR%�=C8"&&d̂B!ܒ`A!n˘!kz@�z.  y7s> MJ,AcG?CyB %[`:$X£Ӎgi<&cB B!pK!B%T8|,/]qx?>!M%z#Y…TŞ#gX($XBx;"�3m';ﭥEYN_fk~?bؼz{*RHzb9^)Y<xr%tի97uC2BQ(e=TJӇ5&T^ob3{6RS3s7O gXN|֥)];T1SWssG4k;0z5 cp!aO?]6G#NU-o'7nϦy4կБshJ&ǬIJj&{-b#(Pзw+jłE]nx/�0-̟*錔)Ǣy#PKN`︧Q�;~8ʲU?R>mOy�4_}0U|0i?΀>m5s*(ҡ R6g3jB�xw:22umIޭi8*W}%,! e=L8Ν{ϟ۶}h(Sط45C+ft:F̟@…TU }ۺC2DTrr7lSzي2�X,V>^̡d]ṡӫGgxzuf^ mҾmݛ>^�Rx̟񺒡cЇ ҴI8WʬT)s5;n5cCXn/%p_ lx(y#s㻝Gx\nPt%Z_fMy}% BB1,JT*&58zo] FMk1o;,�^9΅ ;}XY̚$cGrjca0h,3gqXGQa4]noXrW0дI8�ˢ7Rk;/_? AZ||T˿VP*T*%K?ǥW;a~sCيJBx6,h4vBlk1-WQI (~[3ajmafQ|֯NNϼO3u&J xip)9獷Vgs~ `hݽ/r ̩Id;�3nDLZU:vb|0s#/g�ܼ5 e;={qdevy9^ŗ?îclz�+¸_HϖFDًԎ@*GϡPܸΝ̞վ}|e^k%mZձѽKSƽ%p}%<Z#ߛo<CZ{W:99F|}5bqYr7f=\39FBqжu$fg`0/ 0fh4s2 MC6ctC pBZa.>(ՋƴɃ%P�^n}5 ͽ}/PUՎ%P�VWčH (Qfa=q1 B!pK!B%B!ܒ1 Bx ⎧P9:Bx`sFѐ馋t357s>dI 999K effy"r>n- B$XB![rxu_+;zMċ0  O7+Ip }bo< Bq[)J-uHp  [!l2 B$XB![,!- (,+zKpY^u)fY}22tdd\}s,-H^,q%'gЩ$ޝt9W뾿׿x>g3SL۴سNNEi/.G_'O'u)8򽌌f~X܅(SYd6;e:ڶsh+Lu{]9Fd~Lf> 4_F>TfXh% 2*%_mڇlrT"kET6~NءSVg?B/_:Wx;�fFjj&uAǔ+W{o?̹[I ny }Aڶ,\n/cX!_^ot8^CG`GfqjLשGβ˟y�|0c#ShԌ>9y AAZlICX7^|+ qo~`&\�c_MU n Rxnhg._`ڜ-جV܁FQ5ء_m[}-ٸrEΦMٸe?61<WW&3SǐG#U6nޏNgL?o?ԓ-SqG;wZ/<P?iW  %;^>iY,7e�]JtlSj]TԱ&dO1tŽm.ŊNgt\B7228u:}OS3kA3~%_KNW^N{j1vt/eYPj1̚$f NkGmfhE/^x+ 'jrS֭`0Nhv8S21ЯW+6 j[VFF6fvR!,#?NItc_3Ium wL׏UԾT�}z"$ �>.A~Ƅլ7EcbЇ ҴI8D FS#h&߯f˃lU] ێ}l~n˭Q<PJd23O[S Bʢ%''7)Bl˸rEǙ$Z4@RRߘ_Va4Ne4i޴}_|T1BA�? #;6FZ[/DӲym'@뇯Vz�4jD*Lx_~+'N'P@-jz#V BF/Je?_7>ۙ3GT:Vre@#\�kB3:}fF2YwUoM:( ?9ѽk3||tŜ[`F?Iƌ_+0e<5#soc߰`lFT(sm[a̍8�c⻫u<xGFVw6|gKW>{3'N&2s֯NNϼO3u&vBP.i1r/~k}MM&aJRR3 p寪CMn,\<mz;:Ʋ?sP6k."x͕ljT |2$&[+P*ows\+>Z׋}7]`T�3nDKW\DT_e?T@%FQB܈"f‡D 3 g4Q}?N-ja0)/A�pCF ?•cW,J7:�|oZɸWzoYh4jkՆb-936[nj(̾W7`0r{v|fK7 MڌZ_܆n˾(R*�w/Ne%P�T*@ u<Jhʂ @_QWay+%;i!5d̂B!ܒ`A!nI BdBPڅ: #S'�xyu NzR}YPP<Fѐ馈t35m;t".rwdI(u0  WF';*e>z%~~~B=.#)s-TхK&I gta]AU=ݬK8 !- B B!pK!B%B!ܒ`A!nI B$ς®nd$6 G#>!vaX}>�BBB6l>;׾#{Ott2V~ۺ/!!!�z Q:H 9s&999T*> n~=1 >s~\aaaBF /={d6xˀ$OHH V@ٗը^^waē`A,\{۵c|t|&Mψaoh"Lb~TV,�ƏO-lL>ƍ1w\{kZ~=%Kx~HI|dRgKҢE 7jl&::,ڶm [ޣ%YB8ذ~=UT;PT(U*j5MSK/\;&ѠaC?ZHJt+�bccYt)QQQN>�)[,YYY57oN5Xhwhbп_?4jC^ DN<),!L0t:#{?__1�XVPYg3d`O �u:RRSQ*^h4ɢE�q9ƾW^ŋX,֭[DžD  p*fTBwgASq�ϟ_$,, -i5j`$&&7ͬ_ SZ5ڵN-��IDATkǻ&I4nJέZY]@^5ƌ!|yVZVeߵǏg2jO?2=JZr OR!J<Eh͚^( F4"4Óڂ"..$7πŧRJ�$''ߖFFr)kVK:up9%*ѣG\XzurNGNGDD$%`옓CCBBY&)))ۖP^=Z-'Ne5WG:ELLmG}sįמ7.tJ$ !+xQtAۺ0&f2\`==qCt7BQxrB!nI r5FzrʽFP|eʕ Bn__<iQwd=졟 <\& SNyM{'NȠO>4kڔpYWSɯLP>qQt2fA$%= !sy9̆v2lϘܵqyr qkIςB=݄; pB![ҳ T�zO7]h??e00 n7$4v<=!<@PҸh D eLn�M&Qh2fA!nI B$XB![,! jct3nO7A$wgvG4ODŽwVf^ ZZ%`;=o]sʼ=?ػ/DRHfCQ>rUkR)ycL֬CPzƿ?yHM$<1|=uV١l+cy�գ%G)<گ%B Þ~a h̬,=<?m2e u<ޝLm[Eҷwk}=v<CGΡQ+8F t?Gzt*slڼc@˗e9|AV1ᵾ,Z#?bC3_χU3q\_OlegA`=L8Ν{ϟ۶}h(Sط45C+ft::=Z0N=} )\ �|Qc`3wݶ)ƍœ-O׷pS ϝVˬ)O#�Z"/Ah _PY*Vx扎>AC}z"$LJ ĞșT1 B`?Y:VHU/<וfu5!nY0,JT*&5.$1vT/IyZ ێ}[Οb(SƏL~Oʖӳu9}~: /;yV)OJA7UBˢT* u,L& Ϳl6þZ,Vl?>lܲ__~ kVP(UJF3kKs5y _닏ĕl4j*�>lVy>(]gA_Lu~ýqiY/_3Lޜ#:fδ?[+3 bs 12v◤f0y2 鮟pwUoM:(㣦c(37rrF̹[8q27s y7`OѨ)@uy;9BXja'.~o8Oi]usV]''LjWzNfǖ7-ގJь zF?_YYzʖw\`I1dffqS#o- !D QOIVqk(�n¼#sگ6s1@:Grҕ[^gqBءA#DI }l:?bؼ-3.Gβ׿<}(MQd~8g</"88-o'̍p??uiJ8q(C^@> Xv>~ D\eӇERKzEb2Y>z%Vtły rh2Vu ��^FFF6�ujWa@vR!n3 EbP*suT2&3p^GQ5y rJj!ԓ`AQ$j*ˈ>zp"<2N'17̍J/]a͜8̹[�hX?Bq{Ha'y_Q,x9 F *נt< YgAqS (L>(% B!pK!B%B!ܒ`A!nIG!<NP(ׯ(9*] 6z`4 ɞn( **"m#&EI!Tԋ999rBr^D%cB B!pK!B%B!ܒ`A!nI B$XB![,!-I$ OHpz]vX-~߷ >'εH KHH�<B,!fΜINN*Ͽ[:߫gO Ϝ_+WDXXCШQ#B w=0$^2 Bjte5W9bp|}}yw<}X($XB8?`� ,v2x0~!;w&Mψaoh"Lb~TV,�ƏO-lL>ƍ1w\{kZ~=%Kx~HI|dRgKҢE 7jl&::,ڶm [ޣ%YB8ذ~=UT;PT(U*j5M1/\;&ѠaC?ZHJt+�bccYt)QQQN>�)[,YYY57oN5Xhwhbп_?4jC^ DN<),!L0t:#{?__1�XVPYg3d`O �u:RRSQ*^h4ɢE�q9ƾW^ŋX,֭[DžD  p*fTBwgASq�ϟ_$,, @51}:f3׭A|TVvI;i7FRqs+V+k׮%00WF1c)_Vjwm`<x0O=̣GRV-\ӇTOZ#J AzYવ')'J*|[ʯS쯵Z-uA�*V?GuX/opau::D|B}cNNBB\r f͚go[^@zj8qe֨^VOKTT111Q8:,^{~޸M+6®EU9z*Noœ?Pp,ĉ*l !Dm!B%(`:uĨQ8a}^ <,aCzB!n1  ZU"�Oye(~woœO>Ivv6�Q 2sT ?;6Ϲ?q]V~e#nYvYi9y(�QQ 9nh2]pp0ɗ/Vw᎐ !vq˲tJ, !\r5;88֭[hd…ѩS'|) :3fx !n̆.r>n-Yپ}}Y^ BQȘ B!J/ B B!pK!B%B!ܒ`A!nI|x :F4t .r>J?Iwsn *_ V< Ez~2pV|g 3r> J \N<GR1O7%~q}*T w_zzK]k})(v+m!B%B!ܒ`A!nI B$XB![,!- B PjTN``!D!"㿑`+W+//7oN. wƻ(9$c)ԯ_L^=@/Zd"!!ơhرc+VCj&O?4&ɡ̮]ҧO>c�>3cXx>@-[8y$Æ c„ ,>7|RhdyۿӇJ@3F·wRDTr=С(J׫BLJǟx&0ŋ?V^`󄇇;}vN</�,c6oL^^:6wߡV)`_LJ3gΠYf M4*U6l&X.r> Jl6 --;LJݿ?ŗ^@^d4j Udʭח0k,ztΫGc4Ps;`0ɱ41}:XzsgOn%"{m\r|d �SL,J%G!((YǍ=NFF x",, h{/c٘>c;vo>@Pr,T*Cw5k2q Vf׮]LzjT(h<ZjEÆ 1[,=/W@PÁY`SӦN\r�Ԏ`ԩdfeqIM^ѣ9c3f{L24oт1ͤQ>T|gAQF4Oljt:/_!Z/E|»'l7^h4݉>>>z>V2䦟:9ctm_~Qp;o&#{ӧs?rJ|||Xf Gnd$k֮޽9<w^|yu-_'|1n8|)V,_ΓO=ŧK x" ,`{ѱcG˖y߰͛SzuQfwsǪ8}6D)_\~ʕk׮/c233Sj_7dwo�V,ZWFd2a0rbYRK/yh4frSVf&FBtR^=hт]j3y&L~9م:(: J?OJk45m!CnM62w޵kWQÆ%K7v,[lG>`7taĉ;i5kּa#"5s&̘>>]L&y&lf۴oZ뮻9rʕ+dz<s,8EoYܬٳfUs{ǝ@,2o&j"((Ƚh;&_~SNm}Zy٣b6_XtC?0}b[oq%{[GEVΔS=}Xkc:-{`0�0:SLAK~s*Ll,c]^=bccyέc8ʕ+gxժUl޼~./ׯkF&==p</h.]r7~z̟3g;w&ά3Yf rؾL2|4w.DiÇ s2nXev7sno4չg#""'z.eqif͚yvPZj6N|'z)P�W.|4o.]`پ};sG ct]}^0P(U/�ןsWWZRJݻES{}233yuWqFiذ4:uŋ/O׮]oXfiWs[$X(EڵY�(U*r;H�lwܹs׭g9s'Əu~ZVTJxTofxZl߃b/쮾+)f^=Ta*rSNtڕ_;844e:eQ]QmacHvv6Ov|sfϦk׮lۺh}7GJX':y`M={y)E;ڵcD6oO=ňkr9,\ۻQlY~-Bk 1) w޽;�qqq|Ǵh©Xʗ/@}XwevE=[O ȑ#�wĘ[INz[=& ]ۅ_ HII)ʝXyIV_7滒/>>>deeh44nnQr;UowRRN�R=)E\}΋z16 7r#c7\͜[9܆B![,!- B B!pK!B%B!ܒ`Arz BH/TP"7j/JYi<%1x7!ߙ))a$e}6;׿ղ.xTH'@GYE!*xLwFG[I= !- !B$XB![,!- B B!pK!B%B!ܒ`A!nI B$XB![,!- BVb;#����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/config/mermaidCLI.md�����������������������������������������������0000664�0000000�0000000�00000000216�14332737457�0022540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mermaid CLI mermaid CLI has been moved to [mermaid-cli](https://github.com/mermaid-js/mermaid-cli). Please read its documentation instead. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/config/n00b-advanced.md��������������������������������������������0000664�0000000�0000000�00000000574�14332737457�0023103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Advanced n00b mermaid (Coming soon..) ## splitting mermaid code from html A more condensed html code can be achieved by embedding the mermaid code in its own .js file, which is referenced like so: ``` stuff stuff </div> </body> </html> ``` The actual mermaid file could for example look like this: ``` mermaid content... ``` --- ## mermaid configuration options ... ������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/config/n00b-syntaxReference.md�������������������������������������0000664�0000000�0000000�00000011664�14332737457�0024505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Diagram Syntax Mermaid's syntax is used to create diagrams. You'll find that it is not too tricky and can be learned in a day. The next sections dive deep into the syntax of each diagram type. Syntax, together with Deployment and Configuration constitute the whole of Mermaid. Diagram Examples can be found in the [Mermaid Live Editor](https://mermaid-js.github.io/mermaid-live-editor), it is also a great practice area. ## Syntax Structure One would notice that all **Diagrams definitions begin** with a declaration of the **diagram type**, followed by the definitions of the diagram and its contents. This declaration notifies the parser which kind of diagram the code is supposed to generate. **Example** : The code below is for an Entity Relationship Diagram, specified by the `erDiagram` declaration. What follows is the definition of the different `Entities` represented in it. ```mermaid-example erDiagram CUSTOMER }|..|{ DELIVERY-ADDRESS : has CUSTOMER ||--o{ ORDER : places CUSTOMER ||--o{ INVOICE : "liable for" DELIVERY-ADDRESS ||--o{ ORDER : receives INVOICE ||--|{ ORDER : covers ORDER ||--|{ ORDER-ITEM : includes PRODUCT-CATEGORY ||--|{ PRODUCT : contains PRODUCT ||--o{ ORDER-ITEM : "ordered in" ``` The [Getting Started](../intro/n00b-gettingStarted.md) section can also provide some practical examples of mermaid syntax. ## Diagram Breaking One should **beware the use of some words or symbols** that can break diagrams. These words or symbols are few and often only affect specific types of diagrams. The table below will continuously be updated. | Diagram Breakers | Reason | Solution | | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------- | | **Comments** | | | | [` %%{``}%% `](https://github.com/mermaid-js/mermaid/issues/1968) | Similar to [Directives](./directives.md) confuses the renderer. | In comments using `%%`, avoid using "{}". | | **Flow-Charts** | | | | 'end' | The word "End" can cause Flowcharts and Sequence diagrams to break | Wrap them in quotation marks to prevent breakage. | | [Nodes inside Nodes](https://mermaid-js.github.io/mermaid/#/flowchart?id=special-characters-that-break-syntax) | Mermaid gets confused with nested shapes | wrap them in quotation marks to prevent breaking | ### Mermaid Live Editor Now, that you've seen what you should not add to your diagrams, you can play around with them in the [Mermaid Live Editor](https://mermaid-js.github.io/mermaid-live-editor). # Configuration Configuration is the third part of Mermaid, after deployment and syntax. It deals with the different ways that Mermaid can be customized across different deployments. If you are interested in altering and customizing your Mermaid Diagrams, you will find the methods and values available for [Configuration](../config/Setup.md) here. It includes themes. This section will introduce the different methods of configuring the behaviors and appearances of Mermaid Diagrams. The following are the most commonly used methods, and they are all tied to Mermaid [Deployment](../intro/n00b-gettingStarted.md) methods. ### Configuration Section in the [Live Editor](https://mermaid-js.github.io/mermaid-live-editor). Here you can edit certain values to change the behavior and appearance of the diagram. ### [The initialize() call](../intro/n00b-gettingStarted?id=_3-calling-the-javascript-api), Used when Mermaid is called via an API, or through a `<script>` tag. ### [Directives](../config/directives.md), Allows for the limited reconfiguration of a diagram just before it is rendered. It can alter the font style, color and other aesthetic aspects of the diagram. You can pass a directive alongside your definition inside `%%{ }%%`. It can be done either above or below your diagram definition. ### [Theme Manipulation](../config/theming.md): An application of using Directives to change [Themes](../config/theming.md). `Theme` is a value within Mermaid's configuration that dictates the color scheme for diagrams. ����������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/config/theming.md��������������������������������������������������0000664�0000000�0000000�00000052037�14332737457�0022235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Theme Configuration With Version 8.7.0 Mermaid comes out with a system for dynamic and integrated configuration of themes. The intent is to increase the customizability and ease of styling for mermaid diagrams. The theme can be altered by changing the root level variable `theme` variable in the configuration. To change it for the whole site you must use the `initialize` call. To do it for just for a single diagram you can use the `%%init%%` directive Themes follow and build upon the Levels of Configuration, and employ `directives` to modify and create custom configurations, as they were introduced in Version [8.6.0](./8.6.0_docs.md). ## Deployable Themes The following are a list of **Deployable themes**, sample `%%init%%` directives and `initialize` calls. 1. **base**- Designed to be modified, as the name implies it is supposed to be used as the base for making custom themes. 2. **forest**- A theme full of light greens that is easy on the eyes. 3. **dark**- A theme that would go well with other dark-colored elements. 4. **default**- The default theme for all diagrams. 5. **neutral**- The theme to be used for black and white printing. ## Site-wide Themes Site-wide themes are declared via `initialize` by site owners. Example of `Initialize` call setting `theme` to `base`: ```javascript mermaidAPI.initialize({ securityLevel: 'loose', theme: 'base', }); ``` **Notes**: Only site owners can use the `mermaidAPI.initialize` call, to set values. Site-Users will have to use `%%init%%` to modify or create the theme for their diagrams. ## Themes at the Local or Current Level When Generating a diagram using on a webpage that supports mermaid. It is also possible to override site-wide theme settings locally, for a specific diagram, using directives, as long as it is not prohibited by the `secure` array. ```mmd %%{init: {'theme':'neutral'}}%% graph TD a --> b ``` Here is an example of how `%%init%%` can set the theme to 'neutral', this assumes that `themeVariables` are set to default: ```mermaid-example %%{init: {'theme':'neutral'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` # List of Themes # Customizing Themes with `themeVariables` The easiest way to make a custom theme is to start with the base theme, and just modify theme variables through `themeVariables`, via `%%init%%`. | Parameter | Description | Type | Required | Objects contained | | -------------- | ------------------------------------------------------------------ | ----- | -------- | ---------------------------------- | | themeVariables | Array containing objects, modifiable with the `%%init%%` directive | Array | Required | primaryColor, lineColor, textColor | **Here is an example of overriding `primaryColor` through `themeVariables` and giving everything a different look, using `%%init%%`.** ```mermaid-example %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` **Notes:** Leaving it empty will set all variable values to default. ## Color and Color Calculation: Color definitions have certain interactions in mermaid, this is in order to ensure visibility for diagrams. Mermaid will adjust some variables automatically, when colors are changed in order to compensate and maintain readability. **The Default Value Column** to the right of the Variable column will denote the Variable paired/associated with the Variable on the left and the nature of this pairing or association. If it for instance says primaryColor it means that it gets primaryColor as default value. If it says "based on primaryColor" it means that it is calculated/ derived from primaryColor. This calculation can be primary color inversion, a change of hue, darkening or lightening by 10%, etc. You can create your own themes, by changing any of the given variables below. If you are using a dark background, set dark mode to true to adjust the colors. It is possible to override the calculations using the variable names below, with `%%init%%` if you wish to style it differently. ## Theme Variables Reference Table ::: tip Variables that are unique to some diagrams can be affected by changes in Theme Variables ::: | Variable | Default/Base/Factor value | Calc | Description | | -------------------- | ------------------------------ | ---- | -------------------------------------------------------------------------------------------------------------------------------- | | darkMode | false | | Boolean Value that dictates how to calculate colors. "true" will activate darkmode. | | background | #f4f4f4 | | Used to calculate color for items that should either be background colored or contrasting to the background. | | fontFamily | "trebuchet ms", verdana, arial | | | | fontSize | 16px | | Font Size, in pixels | | primaryColor | #fff4dd | | Color to be used as background in nodes, other colors will be derived from this | | primaryBorderColor | based on primaryColor | \* | Color to be used as border in nodes using primaryColor | | primaryTextColor | based on darkMode #ddd/#333 | \* | Color to be used as text color in nodes using primaryColor | | secondaryColor | based on primaryColor | \* | | | secondaryBorderColor | based on secondaryColor | \* | Color to be used as border in nodes using secondaryColor | | secondaryTextColor | based on secondaryColor | \* | Color to be used as text color in nodes using secondaryColor | | tertiaryColor | based on primaryColor | \* | | | tertiaryBorderColor | based on tertiaryColor | \* | Color to be used as border in nodes using tertiaryColor | | tertiaryTextColor | based on tertiaryColor | \* | Color to be used as text color in nodes using tertiaryColor | | noteBkgColor | #fff5ad | | Color used as background in notes | | noteTextColor | #333 | | Text color in note rectangles. | | noteBorderColor | based on noteBkgColor | \* | Border color in note rectangles. | | lineColor | based on background | \* | | | textColor | based on primaryTextColor | \* | Text in diagram over the background for instance text on labels and on signals in sequence diagram or the title in gantt diagram | | mainBkg | based on primaryColor | \* | Background in flowchart objects like rects/circles, class diagram classes, sequence diagram etc | | errorBkgColor | tertiaryColor | \* | Color for syntax error message | | errorTextColor | tertiaryTextColor | \* | Color for syntax error message | # What follows are Variables, specific to different diagrams and charts. ## Some Theme Variables serve as, or affect the Default Values for Specific Diagram Variables, unless changed using `%%init%%` . ## Flowchart | Variable | Default/ Associated Value | Calc | Description | | ------------------- | ------------------------- | ---- | ---------------------------- | | nodeBorder | primaryBorderColor | \* | Node Border Color | | clusterBkg | tertiaryColor | \* | Background in subgraphs | | clusterBorder | tertiaryBorderColor | \* | Cluster Border Color | | defaultLinkColor | lineColor | \* | Link Color | | titleColor | tertiaryTextColor | \* | Title Color | | edgeLabelBackground | based on secondaryColor | \* | | | nodeTextColor | primaryTextColor | \* | Color for text inside Nodes. | # sequence diagram | name | Default value | Calc | Description | | --------------------- | ----------------------- | ---- | --------------------------- | | actorBorder | primaryBorderColor | \* | Actor Border Color | | actorBkg | mainBkg | \* | Actor Background Color | | actorTextColor | primaryTextColor | \* | Actor Text Color | | actorLineColor | grey | \* | Actor Line Color | | signalColor | textColor | \* | Signal Color | | signalTextColor | textColor | \* | Signal Text Color | | labelBoxBkgColor | actorBkg | \* | Label Box Background Color | | labelBoxBorderColor | actorBorder | \* | Label Box Border Color | | labelTextColor | actorTextColor | \* | Label Text Color | | loopTextColor | actorTextColor | \* | Loop ext Color | | activationBorderColor | based on secondaryColor | \* | Activation Border Color | | activationBkgColor | secondaryColor | \* | Activation Background Color | | sequenceNumberColor | based on lineColor | \* | Sequence Number Color | # state colors | name | Default value | Calc | Description | | ------------- | ---------------- | ---- | -------------------------------------------- | | labelColor | primaryTextColor | \* | | | altBackground | tertiaryColor | \* | Used for background in deep composite states | # class colors | name | Default value | Calc | Description | | --------- | ------------- | ---- | ------------------------------- | | classText | textColor | \* | Color of Text in class diagrams | # User journey colors | name | Default value | Calc | Description | | --------- | ----------------------- | ---- | --------------------------------------- | | fillType0 | primaryColor | \* | Fill for 1st section in journey diagram | | fillType1 | secondaryColor | \* | Fill for 2nd section in journey diagram | | fillType2 | based on primaryColor | \* | Fill for 3rd section in journey diagram | | fillType3 | based on secondaryColor | \* | Fill for 4th section in journey diagram | | fillType4 | based on primaryColor | \* | Fill for 5th section in journey diagram | | fillType5 | based on secondaryColor | \* | Fill for 6th section in journey diagram | | fillType6 | based on primaryColor | \* | Fill for 7th section in journey diagram | | fillType7 | based on secondaryColor | \* | Fill for 8th section in journey diagram | \*\*Notes: Values are meant to create an alternating look. # Here is an example of overriding `primaryColor` and giving everything a different look, using `%%init%%`. ```mermaid-example %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ff0000'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` \*\*This got a bit too dark and bit too colorful. With some easy steps this can be fixed: - Make the primary color a little lighter - set the tertiary color to a reddish shade as well - make the edge label background differ from the subgraph by setting the edgeLabelBackground ```mermaid-example %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ffcccc', 'edgeLabelBackground':'#ffffee', 'tertiaryColor': '#fff0f0'}}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` The Theming Engine does not admit color codes and will only accept proper color values. Color Names is not supported so for instance, the color value 'red' will not work, but '#ff0000' will work. # Common theming activities ## How to change the color of the arrows # Examples: When adjusting a theme it might be helpful to look at how your preferred theme goes with the diagrams, to evaluate whether everything is visible and looks good. In the following examples, the directive `init` is used, with the `theme` being declared as `neutral`. For more information on using directives, read the documentation for [Version 8.6.0](/8.6.0_docs.md) ### Flowchart ```mmd %%{init: {'securityLevel': 'loose', 'theme':'neutral'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ```mermaid %%{init: {'securityLevel': 'loose', 'theme':'neutral'}}%% graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[/Another/] C ==>|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ### Flowchart (beta) ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'neutral'}}%% flowchart TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} B --> G[Another] C ==>|One| D[Laptop] C x--x|Two| E[iPhone] C o--o|Three| F[fa:fa-car Car] subgraph section C D E F G end ``` ### Sequence diagram ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'neutral'}}%% sequenceDiagram autonumber par Action 1 Alice->>John: Hello John, how are you? and Action 2 Alice->>Bob: Hello Bob, how are you? end Alice->>+John: Hello John, how are you? Alice->>+John: John, can you hear me? John-->>-Alice: Hi Alice, I can hear you! Note right of John: John is perceptive John-->>-Alice: I feel great! loop Every minute John-->Alice: Great! end ``` ### Class diagram ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'neutral'}}%% classDiagram Animal "1" <|-- Duck Animal <|-- Fish Animal <--o Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } ``` ### Gantt ```mermaid-example gantt dateFormat YYYY-MM-DD title Adding GANTT diagram functionality to mermaid excludes :excludes the named dates/days from being included in a charted task.. section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page :20h Add another diagram to demo page :48h ``` ### State diagram ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'neutral'}}%% stateDiagram [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } state SomethingElse { A --> B B --> A } Active --> SomethingElse note right of SomethingElse : This is the note to the right. SomethingElse --> [*] ``` ### State diagram (beta) ```mermaid-example %%{init: {'securityLevel': 'loose', 'theme':'neutral'}}%% stateDiagram-v2 [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } state SomethingElse { A --> B B --> A } Active --> SomethingElse2 note right of SomethingElse2 : This is the note to the right. SomethingElse2 --> [*] ``` ### Entity Relations diagram ```mermaid-example erDiagram CUSTOMER }|..|{ DELIVERY-ADDRESS : has CUSTOMER ||--o{ ORDER : places CUSTOMER ||--o{ INVOICE : "liable for" DELIVERY-ADDRESS ||--o{ ORDER : receives INVOICE ||--|{ ORDER : covers ORDER ||--|{ ORDER-ITEM : includes PRODUCT-CATEGORY ||--|{ PRODUCT : contains PRODUCT ||--o{ ORDER-ITEM : "ordered in" ``` ### User journey diagram ```mermaid-example journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/config/usage.md����������������������������������������������������0000664�0000000�0000000�00000032347�14332737457�0021710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Usage Mermaid is a JavaScript tool that makes use of a Markdown based syntax to render customizable diagrams, charts and visualizations. Diagrams can be re-rendered/modified by modifying their descriptions. ### CDN [https://unpkg.com/mermaid/](https://unpkg.com/mermaid/) Please note that you can switch versions through the dropdown box at the top right. ## Using mermaid For the majority of users, Using the [Live Editor](https://mermaid.live/) would be sufficient, however you may also opt to deploy mermaid as a dependency or using the [Mermaid API](./Setup.md). We have compiled some Video [Tutorials](./Tutorials.md) on how to use the mermaid Live Editor. **Installing and Hosting Mermaid on a Webpage** **Using the npm package** ``` 1. You will need to install node v16, which would have npm. 2. download yarn using npm. 3. enter the following command: yarn add mermaid 4. At this point, you can add mermaid as a dev dependency using this command: yarn add --dev mermaid 5. Alternatively, you can also deploy mermaid using the script tag in an HTML file with mermaid diagram descriptions. as is shown in the example below ``` **Hosting mermaid on a web page.** > Note:This topic explored in greater depth in the [User Guide for Beginners](../intro/n00b-gettingStarted.md) The easiest way to integrate mermaid on a web page requires two elements: - A graph definition, inside `<pre>` tags labeled `class=mermaid`. Example: ```html <pre class="mermaid"> graph LR A --- B B-->C[fa:fa-ban forbidden] B-->D(fa:fa-spinner); </pre> ``` - Inclusion of the mermaid address in the html page body using a `script` tag as an ESM import, and the `mermaidAPI` call. Example: ```html <script type="module"> import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@<MERMAID_VERSION>/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true }); </script> ``` **Following these directions, mermaid starts at page load and (when the page has loaded) it will locate the graph definitions inside the `pre` tags with `class="mermaid"` and return diagrams in SVG form, following given definitions.** ## Simple full example: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> </head> <body> <pre class="mermaid"> graph LR A --- B B-->C[fa:fa-ban forbidden] B-->D(fa:fa-spinner); </pre> <script type="module"> import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@<MERMAID_VERSION>/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true }); </script> </body> </html> ``` ## Notes: An id attribute is also added to mermaid tags without one. Mermaid can load multiple diagrams, in the same page. > Try it out, save this code as HTML and load it using any browser.(Except Internet Explorer, please don't use Internet Explorer.) ## Enabling Click Event and Tags in Nodes A `securityLevel` configuration has to first be cleared, `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduce in version 8.2 as a security improvement, aimed at preventing malicious use. **It is the site owner's responsibility to discriminate between trustworthy and untrustworthy user-bases and we encourage the use of discretion.** ## securityLevel | Parameter | Description | Type | Required | Values | | ------------- | --------------------------------- | ------ | -------- | ------------------------------------------ | | securityLevel | Level of trust for parsed diagram | String | Required | 'sandbox', 'strict', 'loose', 'antiscript' | Values: - **strict**: (**default**) tags in text are encoded, click functionality is disabled - **loose**: tags in text are allowed, click functionality is enabled - **antiscript**: html tags in text are allowed, (only script element is removed), click functionality is enabled - **sandbox**: With this security level all rendering takes place in a sandboxed iframe. This prevent any JavaScript running in the context. This may hinder interactive functionality of the diagram like scripts, popups in sequence diagram or links to other tabs/targets etc. ::: warning This changes the default behaviour of mermaid so that after upgrade to 8.2, unless the `securityLevel` is not changed, tags in flowcharts are encoded as tags and clicking is disabled. **sandbox** security level is still in the beta version. ::: **If you are taking responsibility for the diagram source security you can set the `securityLevel` to a value of your choosing . This allows clicks and tags are allowed.** **To change `securityLevel`, you have to call `mermaidAPI.initialize`:** ```javascript mermaidAPI.initialize({ securityLevel: 'loose', }); ``` ### Labels out of bounds If you use dynamically loaded fonts that are loaded through CSS, such as Google fonts, mermaid should wait for the whole page to load (dom + assets, particularly the fonts file). ```javascript $(document).load(function () { mermaid.initialize(); }); ``` or ```javascript $(document).ready(function () { mermaid.initialize(); }); ``` Not doing so will most likely result in mermaid rendering graphs that have labels out of bounds. The default integration in mermaid uses the window.load event to start rendering. If your page has other fonts in its body those might be used instead of the mermaid font. Specifying the font in your styling is a workaround for this. ```css div.mermaid { font-family: 'trebuchet ms', verdana, arial; } ``` ### Calling `mermaid.init` By default, `mermaid.init` will be called when the document is ready, finding all elements with `class="mermaid"`. If you are adding content after mermaid is loaded, or otherwise need finer-grained control of this behavior, you can call `init` yourself with: - a configuration object - some nodes, as - a node - an array-like of nodes - or W3C selector that will find your nodes Example: ```javascript mermaid.init({ noteMargin: 10 }, '.someOtherClass'); ``` Or with no config object, and a jQuery selection: ```javascript mermaid.init(undefined, $('#someId .yetAnotherClass')); ``` ::: warning This type of integration is deprecated. Instead the preferred way of handling more complex integration is to use the mermaidAPI instead. ::: ## Usage with webpack mermaid fully supports webpack. Here is a [working demo](https://github.com/mermaidjs/mermaid-webpack-demo). ## API usage The main idea of the API is to be able to call a render function with the graph definition as a string. The render function will render the graph and call a callback with the resulting SVG code. With this approach it is up to the site creator to fetch the graph definition from the site (perhaps from a textarea), render it and place the graph somewhere in the site. The example below show an outline of how this could be used. The example just logs the resulting SVG to the JavaScript console. ```html <script src="mermaid.js"></script> <script> mermaid.mermaidAPI.initialize({ startOnLoad: false }); $(function () { // Example of using the API var element = document.querySelector('#graphDiv'); const insertSvg = function (svgCode, bindFunctions) { element.innerHTML = svgCode; }; const graphDefinition = 'graph TB\na-->b'; const graph = mermaid.mermaidAPI.render('graphDiv', graphDefinition, insertSvg); }); </script> ``` ### Binding events Sometimes the generated graph also has defined interactions like tooltip and click events. When using the API one must add those events after the graph has been inserted into the DOM. The example code below is an extract of what mermaid does when using the API. The example shows how it is possible to bind events to an SVG when using the API for rendering. ```javascript var insertSvg = function (svgCode, bindFunctions) { element.innerHTML = svgCode; if (typeof callback !== 'undefined') { callback(id); } bindFunctions(element); }; var id = 'theGraph'; mermaidAPI.render(id, txt, insertSvg, element); ``` 1. The graph is generated using the render call. 2. After generation the render function calls the provided callback function, in this case it's called insertSvg. 3. The callback function is called with two parameters, the SVG code of the generated graph and a function. This function binds events to the SVG **after** it is inserted into the DOM. 4. Insert the SVG code into the DOM for presentation. 5. Call the binding function that binds the events. ## Example of a marked renderer This is the renderer used for transforming the documentation from Markdown to html with mermaid diagrams in the html. ```javascript var renderer = new marked.Renderer(); renderer.code = function (code, language) { if (code.match(/^sequenceDiagram/) || code.match(/^graph/)) { return '<pre class="mermaid">' + code + '</pre>'; } else { return '<pre><code>' + code + '</code></pre>'; } }; ``` Another example in CoffeeScript that also includes the mermaid script tag in the generated markup. ```coffee marked = require 'marked' module.exports = (options) -> hasMermaid = false renderer = new marked.Renderer() renderer.defaultCode = renderer.code renderer.code = (code, language) -> if language is 'mermaid' html = '' if not hasMermaid hasMermaid = true html += '<script src="'+options.mermaidPath+'"></script>' html + '<pre class="mermaid">'+code+'</pre>' else @defaultCode(code, language) renderer ``` ## Advanced usage **Syntax validation without rendering (Work in Progress)** The **mermaid.parse(txt)** function validates graph definitions without rendering a graph. **[This function is still a work in progress](https://github.com/mermaid-js/mermaid/issues/1066), find alternatives below.** The function **mermaid.parse(txt)**, takes a text string as an argument and returns true if the definition follows mermaid's syntax and false if it does not. The parseError function will be called when the parse function returns false. When the parser encounters invalid syntax the **mermaid.parseError** function is called. It is possible to override this function in order to handle the error in an application-specific way. The code-example below in meta code illustrates how this could work: ```javascript mermaid.parseError = function (err, hash) { displayErrorInGui(err); }; var textFieldUpdated = function () { var textStr = getTextFromFormField('code'); if (mermaid.parse(textStr)) { reRender(textStr); } }; bindEventHandler('change', 'code', textFieldUpdated); ``` **Alternative to mermaid.parse():** One effective and more future-proof method of validating your graph definitions, is to paste and render them via the [Mermaid Live Editor](https://mermaid.live/). This will ensure that your code is compliant with the syntax of Mermaid's most recent version. ## Configuration Mermaid takes a number of options which lets you tweak the rendering of the diagrams. Currently there are three ways of setting the options in mermaid. 1. Instantiation of the configuration using the initialize call 2. _Using the global mermaid object_ - **Deprecated** 3. _using the global mermaid_config object_ - **Deprecated** 4. Instantiation of the configuration using the **mermaid.init** call- **Deprecated** The list above has two ways too many of doing this. Three are deprecated and will eventually be removed. The list of configuration objects are described [in the mermaidAPI documentation](Setup.md). ## Using the `mermaidAPI.initialize`/`mermaid.initialize` call The future proof way of setting the configuration is by using the initialization call to mermaid or mermaidAPI depending on what kind of integration you use. ```html <script src="../dist/mermaid.js"></script> <script> let config = { startOnLoad: true, flowchart: { useMaxWidth: false, htmlLabels: true } }; mermaid.initialize(config); </script> ``` ::: tip This is the preferred way of configuring mermaid. ::: ### The following methods are deprecated and are kept only for backwards compatibility. ## Using the mermaid object Is it possible to set some configuration via the mermaid object. The two parameters that are supported using this approach are: - mermaid.startOnLoad - mermaid.htmlLabels ```javascript mermaid.startOnLoad = true; ``` ::: warning This way of setting the configuration is deprecated. Instead the preferred way is to use the initialize method. This functionality is only kept for backwards compatibility. ::: ## Using the mermaid_config It is possible to set some configuration via the mermaid object. The two parameters that are supported using this approach are: - mermaid_config.startOnLoad - mermaid_config.htmlLabels ```javascript mermaid_config.startOnLoad = true; ``` ::: warning This way of setting the configuration is deprecated. Instead the preferred way is to use the initialize method. This functionality is only kept for backwards compatibility. ::: ## Using the mermaid.init call To set some configuration via the mermaid object. The two parameters that are supported using this approach are: - mermaid_config.startOnLoad - mermaid_config.htmlLabels ```javascript mermaid_config.startOnLoad = true; ``` ::: warning This way of setting the configuration is deprecated. Instead the preferred way is to use the initialize method. This functionality is only kept for backwards compatibility. ::: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/edit.md������������������������������������������������������������0000664�0000000�0000000�00000000316�14332737457�0020253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- layout: home title: Live Mermaid --- <iframe id="editor" src="https://mermaid.live" style="position: fixed;left: 0px;bottom: 0px;right: 0px;top: 80px;width: 100%;height: calc(100% - 80px);"></iframe> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/index.md�����������������������������������������������������������0000664�0000000�0000000�00000006770�14332737457�0020447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- layout: home title: Mermaid titleTemplate: Diagramming and charting tool hero: name: Mermaid text: Diagramming and charting tool tagline: JavaScript based diagramming and charting tool that renders Markdown-inspired text definitions to create and modify diagrams dynamically. image: src: /header.png alt: Mermaid actions: - theme: brand text: Get Started link: /intro/ - theme: alt text: View on GitHub link: https://mermaid-js.github.io/mermaid/#/ features: - title: ➕ Easy to use! details: Mermaid allows even non-programmers to easily create detailed and diagrams through the Mermaid Live Editor. - title: 🎥 Video Tutorials! details: Has video tutorials for beginners and advanced users. - title: 🏆 Award winner! details: Mermaid was nominated and won the JS Open Source Awards (2019) in the category "The most exciting use of technology"!!! - title: 🧩 Integrations available! details: Use Mermaid with your favorite applications, check out the list of Integrations and Usages of Mermaid. --- <script setup> import { VPTeamMembers } from 'vitepress/theme' const members = [ { avatar: 'https://avatars.githubusercontent.com/u/5837277?v=4', name: 'Knut Sveidqvist', title: 'Creator', links: [ { icon: 'github', link: 'https://github.com/knsv' }, ] }, { avatar: 'https://avatars.githubusercontent.com/u/1912783?v=4', name: 'Marc Faber', title: 'Developer', links: [ { icon: 'github', link: 'https://gdfaber.github.io/' }, { icon: 'linkedin', link: 'https://www.linkedin.com/in/marc-faber/' }, ] }, { avatar: 'https://avatars.githubusercontent.com/u/1564825?v=4', name: 'Nacho Orlandoni', title: 'Developer', links: [ { icon: 'github', link: 'https://github.com/IOrlandoni' }, ] }, { avatar: 'https://avatars.githubusercontent.com/u/6552521?v=4', name: 'Christian Klemm', title: 'Developer', links: [ { icon: 'github', link: 'https://github.com/klemmchr' }, ] }, { avatar: 'https://avatars.githubusercontent.com/u/12032557?v=4', name: 'Mindaugas Laganeckas', title: 'Developer', links: [ { icon: 'github', link: 'https://github.com/MindaugasLaganeckas' }, ] }, { avatar: 'https://avatars.githubusercontent.com/u/58763315?v=4', name: 'Neil Cuzon', title: 'Developer', links: [ { icon: 'github', link: 'https://github.com/NeilCuzon' }, ] }, { avatar: 'https://avatars.githubusercontent.com/u/19526120?v=4', name: 'Adrian Hall', title: 'Developer', links: [ { icon: 'github', link: 'https://github.com/spopida' }, ] }, { avatar: 'https://avatars.githubusercontent.com/u/53054099?v=4', name: 'Yash Singh', title: 'Developer', links: [ { icon: 'github', link: 'https://github.com/Yash-Singh1' }, ] }, ] </script> <div class="vp-doc" > <h2 id="meet-the-team"> Meet The Team </h2> <VPTeamMembers size="small" :members="members" /> </div> <style> .image-container .image-src { margin: 1rem auto; max-width: 100%; } .dark .image-src{ filter: invert(1) hue-rotate(217deg) contrast(0.72); max-width: 100%; } .vp-doc { align-items: center; flex-direction: column; display: flex; margin-top: 2.5rem; } .vp-doc h2 { margin: 48px 0 16px; border-top: 1px solid var(--vp-c-divider-light); padding-top: 24px; letter-spacing: -.02em; line-height: 32px; font-size: 24px; } </style> ��������mermaid-js-mermaid-9bb0ed2/vdocs/intro/�������������������������������������������������������������0000775�0000000�0000000�00000000000�14332737457�0020137�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/intro/directives.md������������������������������������������������0000664�0000000�0000000�00000017412�14332737457�0022627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Directives ## Directives Directives gives a diagram author the capability to alter the appearance of a diagram before rendering by changing the applied configuration. The significance of having directives is that you have them available while writing the diagram, and can modify the default global and diagram specific configurations. So, directives are applied on top of the default configurations. The beauty of directives is that you can use them to alter configuration settings for a specific diagram, i.e. at an individual level. While directives allow you to change most of the default configuration settings, there are some that are not available, that too for security reasons. Also, you do have the _option to define the set of configurations_ that you would allow to be available to the diagram author for overriding with help of directives. ## Types of Directives options Mermaid basically supports two types of configuration options to be overridden by directives. 1. _General/Top Level configurations_ : These are the configurations that are available and applied to all the diagram. **Some of the most important top-level** configurations are: - theme - fontFamily - logLevel - securityLevel - startOnLoad - secure 2. _Diagram specific configurations_ : These are the configurations that are available and applied to a specific diagram. For each diagram there are specific configuration that will alter how that particular diagram looks and behaves. For example, `mirrorActors` is a configuration that is specific to the `SequenceDiagram` and alter whether the actors are mirrored or not. So this config is available only for the `SequenceDiagram` type. **NOTE:** These options listed here are not all the configuration options. To get hold of all the configuration options, please refer to the [defaultConfig.js](https://github.com/mermaid-js/mermaid/blob/develop/src/defaultConfig.js) in the source code. ``` Soon we plan to publish a complete list of top-level configurations & all the diagram specific configurations, with their possible values in the docs ``` ## Declaring directives Now that we have defined the types of configurations that are available, we can learn how to declare directives. A directive always starts and end `%%` sign with directive text in between, like `%% {directive_text} %%`. Here the structure of a directive text is like a nested key-value pair map or a JSON object with root being _init_. Where all the general configurations are defined in the top level, and all the diagram specific configurations are defined one level deeper with diagram type as key/root for that section. Following code snippet shows the structure of a directive: ``` %%{ init: { "theme": "dark", "fontFamily": "monospace", "logLevel": "info", "flowchart": { "htmlLabels": true, "curve": "linear" }, "sequence": { "mirrorActors": true } } }%% ``` You can also define the directives in a single line, like this: ``` %%{init: { **insert argument here**}}%% ``` For example, the following code snippet: ``` %%{init: { "sequence": { "mirrorActors":false }}}%% ``` **Notes:** The json object that is passed as {**argument** } must be valid key value pairs and encased in quotation marks or it will be ignored. Valid Key Value pairs can be found in config. Example with a simple graph: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'dark' } }%% graph LR A-->B ``` Here the directive declaration will set the `logLevel` to `debug` and the `theme` to `dark` for a rendered mermaid diagram, changing the appearance of the diagram itself. Note: You can use 'init' or 'initialize' as both acceptable as init directives. Also note that `%%init%%` and `%%initialize%%` directives will be grouped together after they are parsed. This means: ```mmd %%{init: { 'logLevel': 'debug', 'theme': 'forest' } }%% %%{initialize: { 'logLevel': 'fatal', "theme":'dark', 'startOnLoad': true } }%% ... ``` parsing the above generates a single `%%init%%` JSON object below, combining the two directives and carrying over the last value given for `loglevel`: ```json { "logLevel": "fatal", "theme": "dark", "startOnLoad": true } ``` This will then be sent to `mermaid.initialize(...)` for rendering. ## Directive Examples More directive examples for diagram specific configuration overrides Now that the concept of directives has been explained, Let us see some more examples for directives usage: ### Changing Theme via directive The following code snippet changes theme to forest: `%%{init: { "theme": "forest" } }%%` Possible themes value are: `default`,`base`, `dark`, `forest` and `neutral`. Default Value is `default`. Example: ```mermaid-example %%{init: { "theme": "forest" } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing fontFamily via directive The following code snippet changes fontFamily to rebuchet MS, Verdana, Arial, Sans-Serif: `%%{init: { "fontFamily": "Trebuchet MS, Verdana, Arial, Sans-Serif" } }%%` Example: ```mermaid-example %%{init: { "fontFamily": "Trebuchet MS, Verdana, Arial, Sans-Serif" } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing logLevel via directive The following code snippet changes logLevel to 2: `%%{init: { "logLevel": 2 } }%%` Possible logLevel values are: - `1` for _debug_, - `2` for _info_ - `3` for _warn_ - `4` for _error_ - `5` for _only fatal errors_ Default Value is `5`. Example: ```mermaid-example %%{init: { "logLevel": 2 } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing flowchart config via directive Some common flowchart configurations are: - _htmlLabels_: true/false - _curve_: linear/curve - _diagramPadding_: number - _useMaxWidth_: number For complete list of flowchart configurations, see [defaultConfig.js](https://github.com/mermaid-js/mermaid/blob/develop/src/defaultConfig.js) in the source code. _Soon we plan to publish a complete list all diagram specific configurations updated in the docs_ The following code snippet changes flowchart config: `%%{init: { "flowchart": { "htmlLabels": true, "curve": "linear" } } }%%` Here were are overriding only the flowchart config, and not the general config, where HtmlLabels is set to true and curve is set to linear. ```mermaid-example %%{init: { "flowchart": { "htmlLabels": true, "curve": "linear" } } }%% graph TD A(Forest) --> B[/Another/] A --> C[End] subgraph section B C end ``` ### Changing Sequence diagram config via directive Some common sequence configurations are: - _width_: number - _height_: number - _messageAlign_: left, center, right - _mirrorActors_: boolean - _useMaxWidth_: boolean - _rightAngles_: boolean - _showSequenceNumbers_: boolean - _wrap_: boolean For complete list of sequence diagram configurations, see _defaultConfig.js_ in the source code. _Soon we plan to publish a complete list all diagram specific configurations updated in the docs_ So, `wrap` by default has a value of `false` for sequence diagrams. Let us see an example: ```mermaid-example sequenceDiagram Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine, How did you mother like the book I suggested? And did you catch with the new book about alien invasion? Alice->Bob: Good. Bob->Alice: Cool ``` Now let us enable wrap for sequence diagrams. The following code snippet changes sequence diagram config for `wrap` to `true`: `%%{init: { "sequence": { "wrap": true} } }%%` Using in the diagram above, the wrap will be enabled. ```mermaid-example %%{init: { "sequence": { "wrap": true, "width":300 } } }%% sequenceDiagram Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine, How did you mother like the book I suggested? And did you catch with the new book about alien invasion? Alice->Bob: Good. Bob->Alice: Cool ``` ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/intro/img/���������������������������������������������������������0000775�0000000�0000000�00000000000�14332737457�0020713�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/intro/img/Code-Preview-Config.png����������������������������������0000664�0000000�0000000�00000442611�14332737457�0025125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������O���tIME�8ms���IDATxwt]W~ 7" �9g*Q*IUQUn۩g׼׶g{~35cvURUJRER$��o:i?� YK" {9{oo5B!B!B!, !B!B!h�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!By+ B!B!Һg TwJ2gBB!B!B 0R*uf,Dd&h!B!B!`fKb K)H02q\ɮk!a8h @ !B!B!GະaM[cL5"6l6 B!B!#BkO<c;HrEZ8M6?}#hVֽ/B!B!B|T&,w<0s.+ۆc<%*r9zE\NbǞLYپ D)=猐ڶO8IZeAB!Bqh)%υ%gg5縛Ol%+9`jΥ�L\N,61<q~m l{OlΛf1V[$ny]6s]pEnobNwLvk 8<5m_́28#\WQYqvlf˪.})5`F;gk -b8?3<2uJc߶ax4"3 '}ݶw{u]0XŋXȨuU.=!G;}9 B!bbtJˢ0 f>J)H& ~�=;㦍M@"x|{%wx93`ְdÒ1cc#'f︱ pvuJ[bKWBM~L_lj; ۻ@T\Сm !g7c5/̉=6uSYs-/±5ӊK]ηR>pJXϕڿc:ߦcC>}Vua{k!## B* XQd:=`e5.O :6�]WLc8ub k\RIñsmÓƱ,saڳߛ2X[]e%P{{俯5ÃN/w.UUkWSeJMt|3Ijk{{~clX2<qbhD2pCE1zeB!B9SvIBU)K{֝xCtٰ7vղf߫ysLhu.7pgDX8y_ ! 63^ޭnjE6O<F)x&6:N7}tLVhyR$xL͸fLk磦ttds<<T<Xv]] iOuNL۝SJqctҹ9GqE2n:M,>mΤ^~Mw?_0߱-^cqb۵j u56di+< Uٜ.6qޒ{j[+o*_E&it L^NɭuSwm2޾Q_\fC*i8慄S]u&T_[gT)v>tN7)�=yʴ{LwMOLwoHb=!O:q8O>HNwM!B!ăѲ9MwomAMEMEKͧNt%,?9VJ&[gzsb2p]oσ7I$O9qLe!T(̰{e)qE5&Lb2a&xb|ug)#M.%'m[<Qbfr9MT,jk,,*cو 0a3b9˂}PSmLDxfASgMy n׾J`eCCkM E7q\@A*hi,a)>aۊIX+_ۆx1FQ43E$r)q�Em.Y~*ʼlAӞccѤc4WX"t9|X4M 4[,h9u&(fy ֔Զ8x6ld}*me99G&~Rڴi"=FqE,f:&7l݊L~i =RUhsHO=gp02A?QSTrt%$ѓ⢷zV j`QÁ>~p-8aan۰)gj,s(@/Ns Qh~O c.qݩ/\`6$P0Isלϐ-]B^z5R20ۂ|sU 3Ki>nT\؂pӭ7`un"D eA[C 6)zJ\ 'mS*plŤ._tK~jOh {Jz0 E4^3:Q&sr#B!\ yG9|\?3eՕduSE l\<[Aό<Ӯ^aMjUN:|XO<xSIj-xWΒ}l['4}&A2 X5=}s6aX14fۦ 8"3}=F4K ,'4ϳ M׹wv'TW_J<hض)ƢVdŒX ٽZȓٰ&@SYlmM${ݲ}# gN`sRP̲ .^ؖ}N fB/.I<8q] Zl]  }Slhiٴvr^Wsds7Ę`Tq?wc,8:PYif!l6b?3<pAM<(4[z4+[ΜK۝i8={>yŻ=PckSg65͡ͻ \ر%NUb,c:=0VSIŦ1V,uHy:`ۊG'fRmLm9fem&zj~o qL}O~W9NUWY, S]QEWCV,5YUibIw< FͦQKn^&~˺.UEW`V D\r֔/xͅ+`RG+V.w-zْ6[6hj4\NsRȮG4Z>Dۆwv<N)nrK<f.g/3nD\1mN7uMZm)"S;frtRpr7uN (Um1ѼVǷhlk%2xj-Μ;ylOsܺ'Iw&w"\�7uY%T DtvX7,pZk\}4k_Hq{{ be tBkM<N Xa8c$W_sܭw$B!?O^&(׼nՕ [m SO%hgxBQ_g {%p 1>DQȚjAyU5VҢiiqyZ 2uAWՎ$iz@c?.g6545TWZ锢e¶U1X<w&T:jSj 4B޴GCE}_Q6ֱ"m&Cb^l)hln۾igS_gQ[bluE,\7 ! M2r|ϴ%XuM `\EZl i`y?$40TUjW^wǏzx 1-m2ic64ϳ #YUiֱZf6ݞGٮ%&nu}0f<W}k㴩q|(Po1&暑UPlUѪJxzgKWB瑭&rkbƢ&|%Dž! E6}6IEz`:mf֦}ϵ2Y:}ׇRײL|CM(pZN)bbݺ�tRoI’E6aX<PK&țk,[á8w1ڜl KLXF+4֏_,\6XЦ*yplrX<$5A�A`Ny6jN䨬0ٱ5;}RSm`!SyXy(eiyÑ~fS*ee'|XlZcp8)tRvK'h_䰰&RCwӫ*E"ёĄis\Ɇoi[l:'4/i.<eq2ēeJřZ5^XLQUi3M]ub຦֍b`[*yky󩬴`Xop*|{4B!BQ)#JkׯvigE q ج^r1G14{�a #y'' TU)vls4v0'J*, XڥLJ `ljN$lGhv˓+'P/9z?Mtwo3iVt;u.`[7D6o_4[6BxwwSAYܶ}׬p9pԛ>غ$5[Zd3xgʫNܑ:2RAxshmsSIE.ygWnf l2A9pħ 7,vK#kMJw#CgJ-6m߿٬L|mj,Mɒ [4_>+!;[ .\ 9qgZU=ѶatETW)zB.^9pħXp@1{Jt6:V,ug KezrT)7-`)^sZgq\grlEE(�R_gzG*-2],D K7smӃ**XZ\^ 9q'ӌא4@>y|G &;q'd-M6MlIECEp9dA=aQS̈&/׬tQr!BAy}:gp/*8jo3<bz1 :g.ȎmfU}}BHYAczR5y'̤d\d=|pcYsOՀJǡ&8{X%Tηl٬_Oڜ>L[}Z6aVxlXkڨiXeA=k cW~'47 GVވ-6kW ̕wwx8bBƏ͑LOO(B!)}bQ o E!Ј UU؀>�d2:dszRfNGMbJjťfŒn_LZTThLFPH)ZtgAT,kByŹYKlw~dsaTS \7:^3Ʉb E)PY#Ms[lKWB5Lq0?8K*Z\49zv<xT'Lkb�^H@xg[&s~}s.])8}6` SsqzkoʱR|tМ+,2??zeL4/4OUEuyE*C)87k0ko8)iI J`2s}S|. aR7‡|GzږeoYBwT9 I~G+!aht*-0=>gχ哳T"mfGe)FhiMp1k~mL}ސ=<ԗYat\JCZL6s2<s;JQhnAWXh"ҒN<V| spk3}MU6_�z C5:8F1gsYjM],TMU ._ h7XQʳ^ duyi/<M6ӞX"/)J*/opė?,Op:հ<SDG4kV 0}<N mWoyT]5^[4o*p_T _B!B!&3e-U9f¿Rn,QLP0ȫ*3iU²K3O.9ob55jσu+ɲy],i'hH+aJ#K5dfb=Q~?i]Rfd[\N[ϹJɏӶ۵oqNѲLX|8L 384-&s'PT 0/fO>cC8XyPΜ X¥uL$P.Z0",M^ 38N74sMLe9JꂧI^mSR[i,K+V/4mbpi0b+W;T&E\g@ 0j +r_s,*;ĩMnQ�:Ӝ>볨fYKmmH*8qʧo DM&{$;!5/4G4a4hSD;_NZИl?gQSp"5E4Tųgh$*4}!LwU) ?8ɚǧ73aZ VMAI;Zυ걄/rJlR|X3>,̕�?.<;;O?,QdT.@\kZD @}Bɗҿ'Fy63Z&zd8{ V(@wOX."B!b&4uS6�`pHSț@yrH<dMG[kj 5&5c<R;3dm3&qS!Һ\P}obc._O+nM3K1K]o6w}.] iX6V~qS wbQPK̨yaY7lm� LJ!TVZ8Ŋ2nRX:Ƶ.Ah{0CHU].^ YGӊѤ"fzwXz-T~pjȩ�ei6K<Қ 4NZ.dsf3H1ئ"~9qK5%] r7m_YoI)3OFqOe3$hst9ZH@T> h)g?OBu.%fPMMN;Q bp4tdCnۂbZR4y_h_Li""S/ۂ V_7eFF#5t63Zp) Z+_ 72KymxRit_&ag/l\RYؼ>F:ef!=wє݅J^8t/K+J/z<SlǦ<[eޅ9-' !B!;R)SXk3u*uhgSWcjKgUnymWCr93yzg%WC^i$aKm�q& 硻7o4<q)vIp=_WkhRUe!;O>3^1%!._5#'Y[ooDSVΙb{}rhȔz(u*ܪ Ja)e8\ظ%3qhrǦ<)e>gbU#QJ QpϊbYRLOab&W{#qzz;s>`!K[v TnSM]ŶM1 XʡffT ] >Q_kbh$T@:xd[\Q`h8k[pMઠX|v E2'b~Ma:u\~fk^9NyzswtUxp}0pJ*ejB&sֲkV嚽]ggAʦFspZA�ڧTDVuf.8[7mvTVX ЗN3ZL]jodT⌻%)Ww⮔iE.Dt_ o)WMݣy6+WCL ]x_uby;gp8b,iR)Ŋe.W{BG<=vGǩXM/Nuc\돨X^?h B!B;PznjgXJϵ63vŌҥiOyl{T4<ygp(t-f_J Qlŀራnl]׾Ƴ(o,yqM h#'<uugj**LNHh5ͲPļZ_r7-08iO%}]e#|a:|Mp􄙏j=qjr}0}({Os;diC:gDl  ,<MuW>LgL| B TT(\)ɣS_ 6ԡs?z/;=N'6RL>)q*+;6XҥbĆq*SZ)K1ţl#S{mYU<^vx)l8u;q=!4W<Tׯ4nnx!1s.o1;- qST1N6Gn3 @OY]2#Is{<q7ں `^ WDXv32i4=",2K=I=pD׹M\jk,xՄш Ь[rB@kI3tTR Ӹ9�3mUyRᑈ,"\nvy: l}xs+ǟ'o&9w!y]B?w!o#kV\:~Ybρ?{>;SO?$'ޘ \6>AxIس셀+9,6;|g,'_B!B9#&u4ÅM Mi#}r9e ^}-ccX$ ?0.p̩�+Zx>{==j,癹G:JMm015f4Lq39M&˘uQ\bȨ))YdP'-KkSzrGk[fp逖&\\׬S> mb`dxɑL9f;.\ oپWC3z,"Pd\׸iG#<whFF5~(9ţi͢Vdž̅$�Zf4Ql\RV$&`xRۻ dJn:JӆQGki[+FG5'|ZLu?0#G",˺iywPdiuٴ6FiѱDB1HLX2?75QDhaf(xsLm+'8s>֢"m)Ѯso[`F(4#$\Wd36vwN10llڦ"m%ٜ)qbLPd2ăc-39n~<` |T9}slNFZ7/xcGw�t r\\NuD.(A`n0,/imO# 4|T< o1E;'[N8pJ;3|;Cu5 ݽm0ulsxgWׁE&?ӜX43{MwwoX8{>dbseYg&ƻ{ldi3Q\|_ex$"<ͅɤb | 9a5zEahڸpEΙm<8{!(gr` _eḭH&+/|AsϢ֦}EKuEKc. -=/ΒE;衋m5b(B!S~\Sg'+O)jk,RIE&kt6ѼV-j-@34jм?䨭C<bM�w2XJ/OxXu9 goxg X{&&92˛ !7,Teo}7[Yk koٳ#U,iq3Qa9yOmE䟼 LV*ay5/0m$}'.\ M.?y{=Nz|~72WsT+RI8u6۵N39^<ϼw` t>߲LtP^^?SUaãfʸf\޼5[8}Y<Oo5{컉{7鍟[~2%|/]1B`RE͋۬5;q˧Ң׌ib.ضI}s:cx<PYiQ캪ey6U0\@vJ5fh$̹�g<H(>D[bl^j^x)՞[<ƻu^o/hBqTRQd&~+L(XZTYTWYYD2Xl"71<T W"LadzptF"n˙/x\Q]i^;4bJ2^-5'/J)FLP;PTȲ S哵$T&؎ O\ 4n:4=>CfK3zx/Mu`-bd3Ķ(_-ˬeݼ?ͬS]x:mtL>8fT|1zl̈Z()~H$&/.3*Ua`J~Jŧh!B!ޭN)gbJT֯' w{t1ϧ?vg-v˾6n{th&hZo.wrdX/[<ٌ7mZmNWjf&ײu(e?=΂6\2m[eԇyMpq�t0ӟ~>ZN^npNN;8K*gڶ;r`ĜLeB)?KoS,s&7ĒB!B!JMlSx]g`OHg3V6�B!B!BO)qmQ.w{?4g4 B!B!BO)N3\M~lrB!B!B!$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/$�-B!B!⾐�B!B!BBB!B!B! @ !B!B!/*!B!B!(r*+ԃ^!B&�~H!B!ݛh!BQϕ˗�Xкq%B!B&B!L 48.HB!B>-B;(MB!Be=B!B!B$h!B!B!B!B!B_']j% !AS &Ox'!!B!ϧ}m�Zk h|_S(@ !B R P(5hB!B[hݣ9|z4~7R!b"hWkZ`ZZB!Ο @D6ҬB!냚Nf  !B!КB!1E�X2]B!0L1 I$p{#CB!Bq;y1Jk4|ĵ>B!A)S"#Б.n;r?$B!ӛ״y<MDxL#B@FY$PB!bz3y>�QkyB!DOEB!BLo_δmL,>2Z!Veb.CB!B<<}xMyvY_S<o7ZB2aԽ=O\>,5D<V GU2w&B!sɼD& u>^nX²T߷y(Zm61uլ O)k?qJ8B.bt(+DDу q+EeM<iB!B2"ِ̈+h:0 X\R$R6`>} hmϟ}6IC`_]Z&¥Yt\@ɕag: \ B !B!s`&} 6j){ BKC⺰y}x4Yl^u?ɴѡP!ӌ,]!B!s& CƆ# >'cQr/eM$!|l?Uw&~(x B!B!FkMރ^6߃0 ˵EoY>2Еbn9ӟhR%N6 "5z ni F齆B!b:(_{3w3/>QQq/г\5T[XrCS E*(xLFr7hJr#Ìd !fFW ]\pI#ǣ[~CFr옶3K3ދm54[t9\>UB!b} ה‮̟Q<M,EfY5sWVZRpn&R{�*֯vH+FF5GNo۰~KmE69tǛõrׯvy8ݽ!BLVԸQֺ<#NgW^o<?zz5 4 `"EWb0 d �nDla%.uTL*�|a=<\Wx?T@h#._ mö1lqL/}B!sVw]Y_gr:j8x}.,ش1Nsͮy_&V 1:<gSXm'9{|Oh![bZr޾+,Z?B12yڧP T2ՎHo|קppĵ zba<kR)K۝'�dRI@CœNHYg"7 CGӸlc y6=[vzHkx N ص׻팗ͽszZ~hG~Fx9 \6 #FF#Bjdݍ_gB!;DBIv>֦Z@oO>b8Hp?p|0}q_b|^Iؕ_|*=2L&2]*07n Kp!ɤbY՞CITVF^L(.DcUX ƶM7:"L{2P r9~ˢk&hۆD\,}ʙGJ3LWǼ'Ґ`C{<vYORW+#u 鴅*<O36M:|(2r.?|93㞳33)}f鼟k|B&M/<yՊ׏[bsnm쵊38T˶LT<[*SնMשI1l\"=q]2F Cs}s]O.}eA<>>䭴9G.n &Kݶf"6xB8|ŀLlwi{ca~`}|6n �04˰,|s+<v1qYQd4ϙ}l-tB!P]mlߞe6Bx= ͛<x;|1)-I֬{y s5,^b{Oހ~' p4)Ny(w)^jf9l˴ƤMγ> =2fRI?&3UW0ꂧ9s>`!dB5ڴ̳ygwdžMcF'OYeY.\ y#fG-hٸ.&8qXg@YmSސ7)P4-M6[7XbU(h/pG@#;P{wˊ"ikauh "l"X&ן `rYu1R) bÇ tv.{bu(_gaDBQUiQYeoogp0ܬw$](ubU 1si'׆5|/q:}`fnm1,U _0z[ɠvEb/|:>'iźU.K9$;dA90:in_eBk!O\ پ9N:xgwl(oL(v-vK*is-cCM QR=&\Zl<Os'x`4g/~R$M\>3Nk.o*bæubFzV4۠o QrݲvMMu&9~ҧޢfSg~*Nc͙U% wcŲ?�ۆGh_p+ mQD9`uCŋ@u6`~lN!B!ttJUvm(kg㚭}>ME/ É_JCIJAOOHWҥ.MM6.夝5kbX9uK6`L$]cٌF:\`>33)bq+f4sMy8K>I\kB~'7݇eV $|MCGOy y,xlGGAC&N[4ϋ3?a[eUE6ORŦ*?'8TށdRh?y#OC>*gKw9,^AifYf=k->L-6Zlh\qzXP_sП?06H(-rز9AMͽf8t'1mK\7k*X\ȾsM8_/VI#)ܴ|f8Nш|6[~e]RIo.˕\00pmkT *k&{61s.㭐=N<H(jfYC&gY%,v+ϛ٪J k\S?$2#bBẊx\S ֭6d5V,uxz7SU|bgkbBָXH&6Ÿt;6Ǹc[2YX&m:|&CxA>֢z*x$NᅳB+-\4-qXd͞$J|b? Wo8\.psJN{tZҜ�mϜ-%4f~m +·>f<ϦuMCU<u]j-shi)xB!adYsg | % M)Ū :| i\ 8g1;U<\ TU"#Y*ƅbbIuŚ1CΘQ.۷O2il˿Tm+z[WȦvdZ8|$`o˗Z[z2O_v6; PsdZp'`ECU<x Ty6^CG}7|K2 ѱ]x\ؾٌ{"X% mjjU܅'z˒֦Py|^'[岬q<\44yR-6ٵel==wLľ/<d>wgd$*bboOwO|s= }P^矯u=V2WZ:A>'G߻YcX\zu(c=Cv>tҥMhaժ_Z ['ﯭ[a~au?F)m[Ӧp9SK'7Pu-T=*Rv~Yt⍀?'e, 45Z4Y:{--]lΜ ʟ[My:`,8u xfr5+]Ξx<LcKC:.pK92وe.׺SSg|lpYdO’TO0~= ^~|gk]ڌFlg8xCkغ)#[c,ms=͑hV͡ʌ*H:C/|p#T|mZ\شδPض)nyL3_[Jwf gXJwX~i~z\^O$hQ]iO\Oi_жa=B!Sd8Ixm%8gS]c|?a^I$3߭'I#C֮[92vF4HT,ˡe,>4~�Ü9S_gkVǞJo3g|vlOpOGK,pEGŋ>Kh g|^Y+05kk,,r}3lxx$. l)U_Xb0TV� CG}>8,YFrT@.91`Bc>#V-wMFfxo2HN1>[U&Tp\hg^pJȮfzfYbrF" ;cD9<iEG}y1b13`d>8|أɝIZ[z{}/#A0of5О<W} u,K*GhLl J.mi/M6_rEv?K\Rh…ラ7s7}F}WfaPĻhiyPV'r:JPCQ 뵖.t CS>E)fd Ŭ]>y1Pm+חTLJ)/ )P-\+V.Pln`::NE9DՑl)XbYpRP,+u)3uBpPLphS[x@qV3 رŔi|^S[cn˙s.9:Ѷ)Ϸ-Dh2qY61dBզ 1F{y\MG} ,ވZ>aASb^E*7i҈#'|7o ,nyұN?3uϰ&SgNvD2h1tt4//qHMfHaO)B!T,Eqivw70\r֭ Z;=fM 05L||&f|AwwHGΓf|tڢ…TZdC*e02qg/�0A9;LG`K8q3Rfq\aE &faf(*.(?>qQ^ZSYaq9$[hplE:e~dZ* \�zh8ؽ'Oz3C^s恵ަ7=2وQ5;'ϱcK_Hsg4Fŋ\s)xfmm.?`,Nw{-bƸKsn9s\샆 ]{,Ҏi.!ab9! ZI:֭%hmu}3IgWϵpR^kظ!FBAؽ;Oo__/B%Vtt8p@u'ذ!Nu)sǛo6C?Wؿ@2X.S>(K`l,_fW*^Yш~&o~sѱfO|<Ɋ&pwpĦq._ ΋cQͿ(v,3+>T33)b+^mR/vP3Xnz뎥Sf#3 Ų"5y%lN;8n10q>Y3"8>3<s2tV)hm&SIB @= z֩Jm :?bqٸin5ߙ &Tc]hiԟqc{+w8!sёFY1B!R&9y&>o)GIຓo/__B74:#<`CVq5jkM)c,Z䖟\$p㊡+W؅oBfu&%g=ɬFOdlZ~M  nߙy-e3&j>89&[QM.W\gt,}S1HS(+P89xlלKB10=( <|R�ͥSL9#1'7e=h-rذ!>wW/TrzHcײY@SUeyS}N]g_L*z{iQ3]g|'d֞;LZ),mk<y1h1W~Eh/pRw!_ִ-q8vpSgB,ʽxW;ffFݽ;m+ /KE06QScpa%m.# G,Z,l^~%KCɤb<tZ,V8f/b%kdEItZ6-.|zj/ESvȌrʓUW)ZFX,ju<m::h5(k4wcfz`;qLgL#}.\ XjjOXD8s>m%*#b.t&5-?Ҥ oBV@2iFAs|R/a^Es tVEkH&O=`B BN}Xƥu]lw_S=Eޤ"mv]gN3B!0lض⭷s8P`|'w&I-.]XVP[c}tR牔3g}zzB֬ET[g9Y}#=kW\ WyMW'ٰ!m+N2 mMa}tBA? V<Xu,)Ǯt\X?ޢ M1:\Ŋea{lLbzbrgAL JK .^YjӶxd? G|F9|\~rp3g|9M,f?[)o/I?aog <drRHDilgIu/_ 9@Ox$}!c9kJv|Kiߝ7_`<7;e#ȻCmW+PbwyK;`L)v-4,߳'O__e>Y]?|9C>ٵ;_^ιsMYZ�n \4):33lgVʫ}/ϲe._jK;\vHdg@8{ O}{Ub/SIx;c G<#QaiX.ƪU맯ؽ;ҥ._x.M<&b.\(̳( vHk^iWryf>dYsal,"jSYa1<b>.bpZC<f2tbeTV*,4מ޾kHmk!G>|)ϼ>qᒙ4otL38vy00l�4,msx|{#'|yȦv-hyd[:9u& !ﺊsm;qgAy 6ۊ](VxfdLjɄQVOS!B!>│шo}{+<4.ogoi*N}B@i|'O}G >(#xdlVs7uh*gg+hnSY'L FF#z{B"|_O]ޜxn*dV]A9�}L@6Q >*=bMpiK"8 u'&Mk)mvKME:h. 律 uLSUiܧf4iEXFd.5gΘ!*-t&j%E G46|cIllo7D\c)޲dU3):Oz`X&Yǁ*K͓{~]]PʔQ}cp}1gM3V?8$S)Ȣ)._x#B<d]yg#vش)ڢCaW\3�(f967;X\d|%L \UI: }Os`ڢ}õKWBr&er5XgҢ/bO9u&b*Y: 5K>3Ng6 ٺ!FU D,Zж1k7$e5K9;p=$L+TW; d?] > Zl> KkVӊwxzWO㍽ec5+MGo" x`Bǟk5Um94[ZE!=ddQiYM*wm?c>rnX( V !BR08h;/\ xrg tqŖqZ[bDϏqAXv o|_y/dX*:;=R)GI'LPҥ\VdsPLDS\es3g}gts�ZG0ZsݽfbgL0`dT<\fߏӶء}MAo_}]gIFЕ˙)LLV3iFF"2YMi񨯳X8fሓ] ZrĂgS7 <#FuEEZqJH6Y)~ރTSm˿T.?+X.@+f_:יe&+Yx#G`Je| ix"9�mHCR %A`bl̔_I&nm\הq(5ٌui<M/h1B 3a�0^0Ԣm YʱH2a(W|jU+c !K;\/tQ Mf4XSM<(&J&eSźfxA ~4"+"4M�.l�" C.fi:,r#K8&YkMi\~9/hNvn1XOKͲvy6Lǖ 16sصGh0 |3%J*629yoOGrK!c̹<֦ty hT^S>Ʉb;6Lj4i~z oaEiVh \rɮBAq^ ||g m ,\+^B~<miE.8TT6#2%Ĕ2o_OL�d:M赴 WosG;X!B*=3Y*vMcF_xj++ef8pPϛ\~#5#G#mb.?a`8.a y W1X,NWG{NeK]LRxv�t),w˂ሿ~1<X ,ogL=ל|i`0?S]0 Dds'|{b6xVRǑ>ofhkh, Ξ6˙^QU^~`&= C6q9>/TWY)yW&(m~*r5Y\5.񸩡ꏲYjk-i'!7u==ׯ&f5i=$0l6*4G{&cӱ^vcf=5chȺc床O~2EL~KJd@kSxٲؤ<+PPDCMMJ+8xsϥTilVۛ-g+WVѺƢڔy )_͔3+*rh(w@ q;=3t9*+,ـD¢yb: ht#B}k459ԲKW̨z<my =TtfsDt$Y۳xg@,fnVl _ Q]eF7Kc>.T cŎ∊0k:/{BzLD p9&c&̵`A>Uޱ5&+x;J8sd`!"8w1;!Јc_ڥmC@{=r9*͚K(u`&L3@[y~_;u 9u. 7njB!ϣٻ-^ZowQQd\=ox?b1yc'?[rnx8o9O~ 48Ɍ{edƗ<f36-lld@ORfHh_Z4y8gq97,PXw'Mffr2<xZu ^ʺjjXLλ9[li<}m)XLUys|mY"FcMoo_/281WI:Sސ#G=m32qp0,lupϾ}yVQUeoZĠG!Y%S=sGUEےF`Ҳ…}ܙ5m642&%ˁ oqH&O GlgrΓ}}(=x<Ic>dd"**,|͛&3WaGz4;[k_E^(Eӓ;jySN&j]0ӽ:^> AG Fߗ5ubeLb k\V.sIFY2'ȨfdtEC7ѩڳ'nӍm F✫\֮]9M])'vR&StQzm6!7StJB!B|8Jaɥg,_TA)f<ύ2=)<Q6'e+y{4Bz&Lpx{K*'ݿO3ֹwJn:3YӖxvNM6 UVX|i/vX<F<n�&[mkQ$իc\ns3Ox;c +Ml\`Y;h y<{p1fɤb˖8G<{?D:mkkmc1%8ws\6Yw':=#>mkR?L ˯fdMreǟ2 ^YxBL(#~*"x{lّ`h(kYp{S<hZ7  Dtu,[\Zz'Ց 'dZ +'ٺ%-q<O36?:Z|cwt1d㊷wytf^nʝLN4ŨRT[E?ghtL!BT-Y-cw\o3ܔN[<LvuRQ1UcYy̲J;\ٛ9] m<3[/I$,EG3$Y7/U70yd/yغ5NӼf3gdT >gRU<Ju>a1IͶ_�5?|%޽FC lg8lΟ<yd]Kr9͎ j-56CM^λyo`]-r3+?㺊шh\45blּnXfPC}?Å --f=ϦbJJ o~7kJ_M,1;9}&uTT !BQU Z80B,K`읟gd2)qCc~$ǹ21.55ٓĺ:_ >c&G%ٴ)hD2O8LqcASҢں홫JG, ?{i ŵ+WIz{C^Q5kb<Aq]+d8|ػ)@2~ *LKw/…?MlVoꊗ /KwbN<bĶС<мn"=5?sj@,ض- ![nd rgR2E!BlE2xa =`LX{O9c{͝eVWYInq7R jk,jk&܏˂]>?a;f }шLmm..iK)ܾv-:7.?\pA{4`ӃQF6(;,\eKkBf={j !97/i_!B!J),Oh] 7f6`2xqJ!ɊxRJ)h h1_cJBAN|o?*nj7cD,ƚAϙ3|on` bg>ݥ+h*y+H�F!B!PH4n, ="];,l qʲ3H�rmfpQ?~u /GI%UI8ü]B!B!w&#²捒3LpR6ʲQ*ݑ�Q{Pþ]B!B! J`bYwOUƽAB9NB!B!xz{@̍`c1�B!B!!W*qă%3 !B!B!/nmhdP�]<L>'B|t߻܏eB!Bk�`YPpl\GE9²$aeY IBEh`;* G ZL{T~AoB!B Z3/5:Q!HTcYd#˂tJɃCJkd5Qt2ad=ض@uB<ܔ( 燉bضe\q,|.?%m8{k&"!B!`(k_έ [2w9"}@!+HQ(&^!B!Jfu<GͅNN^S!ϥ5'_B!Bq<+ኧHGdC̱ ^}T65Ӵj j:r,L)Z0 rضM*"O)OB!B!BgNH}ԕ>|O[ƃ '{&n^o5ay;}>lW_"M> H`6ۿͩS'yPWWGCC=_h B !B!B!9Vt_MbžAF2l]l'vl3 Q{(B^&8?4n2帀& ta.A>L!^f+zAMo qF~w~aYb1V\~X_޽2<<oo=vB!B!B<hMe2c4VWƫf-_a7˶iZϱϱs_`%yhn[Hw7pY�:oZm_i\+fۯm~P eY ]ee<E6b9*M[[;mmDQȋ/e|_D)( /^׿u?cկPWWdA !B!B!9t m g5~TuWHO7 6nfgF{{]՟A~E##Դ.f"NSکN<N87`5OÇ+5 o}\?wy+WQd=~,y :nUĔ5Zk0q,6"Mbq{q~W @ !B!B! ܊~>W?KV~s�0 '~/?Ev=zA+j9H~he(b/ ߾|;,tѼv=_ĊO~uz{fu۪�k`!B!B!Gޜ̀ F>˖77b֑fU,ظ 7& =c#,!Q]Malxe~!hDHӸt9G^ Q]֚K^Ji mˠA7B!B!#lNg@[JLcԽ/jP x C.L0aׯs{! _oRށ"1Zj c9n*5ݶ]쥀+ݿ5466~*B!B!1'3#rGgh"}(p6jZ[9Q0FGQr8$Q2t"N4*J( ХK% 4.]Nnxיz""R7bϞ=|/ۿ�L@(B!B!?dtF|o!8ǿv>lhMӪ5|nBP(мz-`.�j|uѤx7U--ǩy+VR҂hmJp$jj8wQͣҸ|Eq HՂdM-$3^z'SN?孷w~w{>B!B!BRcٛR`(" C|ߣ\â5<*N'9ƺ(B7^v]mG~__eB#;05W.˶ }tC#?]|7Yۍz2pIUGFrYRu8 M388RŶm****d? ! ÐCn ۶ۃs�,^҆7fP~?$B!syל,TJ/`z/8{�,K{%=T6L^mShɔQD؎K}[DŽkX%kHTxRߴNҥB!B!BiN ոOǟ$jϒGzAuӷ\˞~dM WL:}eMIY!AΝ|N*E+Ҵv!!2e,=ro%Y,}YXB!xh9{lny;_Z9C)r& h!B @OAkMEX5,-AoY{Y!!R,^UuAwβ+YB!cBtww҂H 0 GqGIZ!#_IBx8IB!DW& CÚA(~̍cRs#5>G}B!B0�ʭy7FQ"F)嶻q ?+>[-n^iXG!0h&qb{^潸lI0n<==;&?5 hB!B!Ϸ9|FPNw]N@*d2***b~EvEebI<UxID}c=L�F�7^A,Q_^#nA0(Fl',g^Q3x$#HhZvHo*F#7GcfM.n1Ɗ$3| _f嶿u˼7cccs946b1􄂛QqL,QG~(sh 1 `:K^.<}B!B!2Њz}@Q4o~EW>;+`#F/jb�k79}[nl}_csc"s>Mj _~&xz`o'ZGNz߳ߥ3H> 0Ʃ}ߠio{ο7~XXN>No>T Z7غ 6 {DKۣo]o+]orM%)~d,Oe'i==oym;$+XW9ƿ#;7MWOyߢuY?k֔_0Nʖg `,\qnnbxg>o?[tA4,[oо~B!B! @h@Gs_yta?şן%U%\.+ѣGyWyL 6) ]?e"U[r5Ɋl'(] Ҁ&|9],{ƅAr : cX.aP@YJYxl'&o^a+#={KTw: AkG~1 u'Qގ(ͧX~ae94Qq෰$V�`;[BnX+sG^b4>O֔>/?hxU9C:/˕3oQΖĒn{f_ ]3§j e~(q'dkZ7SY',& =NuoM`Y΄ke٬[yӾ É%r! XCAXe9qS4n"Yx(9BMX)MsY�oe2Ju?&]EƏcl >I^#!d52_,/1d~a( &ODQe_B?Ϣȟ80m4giOZن eǨi\ƼE[p|MB!B!\3l[U Pr"W?8.^ĩSM}._LG)Iiԕ $*YslqI|7^>s+?2n.zTTg7^t~ ^;&h[ r'v7eQ s>*j[Te~aū?@sc(? Zs't +"W}#珽_#aϰxէ,s\=]ƆR\D5w#.w(d8{\լN[S`ъ=ū>C!7CϹ]h8˷DWz7ꆥy)~_`ɚS״Pr~q4#ϓӶ,<w/?BUCKx tMxgYӠ#yg²]:{q^-[p?4k^uSŶKLj;9/֌Ch&K2k@ 7Şsx)vd~M+r&Rں|{C @Bnދ{h]n˲iXū?KӒGvq׻ѱ^#o'Z#=_=Bm <(eq\>3 Oろ}HWgƯK{el80q .8w),YV~!5KY(ˡqdFz2Z!B!hpl7M8ϒ:v`]8ï{gϞ7PJ16t?wnE4.Uflge`Ou:%~_P]NKۣ n >E<Q{_cW~Co:ZG}Wwi? }%?M>;Hx\.:^C |/Pi|g{ۉ%ep3usCo< Z3x]^`~,\,aPy5a3se4-N e䘊"S?azl'�_t, 5'5CeBZ'3M<]'IV4V5 oYGAu2.0YO 'dƯqwWma)N,ͼE[8~['vb4-J16|[IV4PUtPU\=N4-(2W/tK7| '~̾%O}p8'g_!uSwJ7?8ry?˿ oۄQ {{BoC,~W_Svϲe=UeY>|a?�/?!ni4&^U|/SO';âdɚR^' < _1﯈Mbኧ'krmz..מ8PxϿ7xBvKpųhbY^~'Bz<v:8+h!B!B<s2�=яwuW>~VϛoشiW7_:mv : aEADu;!5)䆸t5BT.ܱoYCDŽ V~ rH gߥqP q)[]np,us,ˡcYkTԴOm|L<UGe4hRQhCUbE[%nS,ˎL?NVbjIjt,UjSUsSQ:35uMYœ?X ww`t K'ki[2#=\q-`gq$gcOSYxv6nvg|}g7ZRӸ_y#�,\ kM\z3wvX`b#:`M:ذp+kȉ#>y ?=`)EfPJ18x!fGAY$B=v3t`ҧJ�͋w&:sK$Ӎ$ (!Y9˧ƚ~>ƅq8M}]-Lf-G8^et|hwWWS]߆B0]yyX$B!Bqp�Z.A~lhqҷ^};7�ڵk̿{5څlywMmbAg;n\vDQP,@1h{7YW CU�[֒_4k"א(Nv718v:*Mw*�p(& Ao#]�KYAR.7}U֋s}&^H#BD^WUEU@;FHH'le9&M M}0gy<gƜwO0{.zZ*J՘<e1lNVDh}[pziW*D)>���IDAT>E7lRG ҡ -Y>*ʲ<RǞ3Z'�`n#rMKVzijn؎,b6*k['( blc9q= /M,a {]h"eY7׸NQ~]Ʉq9<qQJ"=Q >cyCRuΓw+#OUپ(YCpW:M7PȁfTߓ._XVU߾Dbw TB!B!O˷x+cQgw�>Cm|N^hh#pj}7DJ`+gԌ/_RiF*@%k$/fSƱlMv{ɨ_|hk[Oy̸ @`p^㡭`͉)~C&ބL4Tv8j #)uT?{unzvAD<BvS+ H<{{W`tJp;ߗ=MPCYL*MlO/OMC)iecȐXEm]-�wM~%2/:3Tٖ YyW˙3l@p n~P^rK'uOD 6VDÍz̼E;_R4A#YzE!B!/�Ʀ5<BfPUCNy~^8)eo1|pz! \wu[\z%t jxE8g9z*JnVhSa8pyۿ]~l GpٶiFL<npz5brƤGG/lr6,};)8-SުSuRD͍ CEup0nj|*v;SmWDUVbG0'Y7]8}[&l"no. 6Q4pzn',"mDBfXptfRVip|,Ҍ'4k8.o&fLDٿ}1ͅcYqB-n$zGv44v}1`gA*9&(uX v\v77NG\y;$kf^[,UamL(;@>%_?8].JJJ�p3+G}pjΏ߲/#.. w)߱A3d\Hs 'E}s 1ܾuuasKT\| P:t.nK,k6(TZ!8VGt{GrB!0� kEcm/R,\?/Zݻwq }AA^x!6l?�$ojVB-qr4;j@/X̴ɀMg^>M { /R <§I|=˩n<Y8fdy  /9pu z!>x^$SmFBs¡?͖gsBn8ξKw)݃eò66f|U `ɋCmf1hT4TV 7|O 5  q`#`Kqe4fO/s $D+^S.W,Y :ka<*|pa�_eַ2FɟaOw[`Y Y9ģ}9؝Ԑtܾcˊj9H";Ӧ7`jTVu=ǟ|eWJUː Nn^S>p ):~J݁ .A]N r+p34:S\19�+Om+g{ݽG\Nդtdԗ!^{td]2d 8YB!renO]GIu8h�ÉnDz,8M\n<o3s{98 Áe kF$& axeY65Mc+Bh-cX,4MYZ�iDY*]18c‡e&ͩз4Fnn.a2c毨ޱJ\o<ģ-ģt73%kB VxpD<^,F$TO[>,(A7lHn;&(w|h3mMIpyÍ؝ ˌ4p x](ėQL #A&iA) ;@WJYDC f <nt"!i T:G[imG<҂۟ۗ' ]7w+eiDzyNe}^NP=6݃R NE,B<֚*AO]di 3%nR& H[}jQ#l^mM,B 2SK=nfwcsxi粒n'c?iwrj)DFZZZa O |Olx~/X̨_LoDB ؝NYGv +zاD<L[S5Pno6~`v,҂HuҢDx<˓eƉE[p3S%B4v}_c?;D4MD"];(+v2O8{Xb58}O²dMhllgFkkQAh>8nQ4L3e)lSwix>Xλ.�1mL2m6_\r%]iLgj&ev~;wb t ++ʡL0/:%ݵi:z1v}}߿ _碋bq4Cjx0bh;X,fO߳v辶+:ǣ1rN!B_ =~n3go�0 tH+tY_ft+( bWsf{=6vљNwN7J-2xs tڦiz*}NmvYûliu;n.K0؝>2٧94#zn,4c+pTFT6'сBm;XM3e(^5>{ELǠ}sdfy:D=L/{3ͻ;>O6`N%nf3:%ݞo\m.:J̡|i&B!>*«>Okk3eYp57]k/0}lFe}AvD{L3AIIv[7v{2ex49;x�/$Çfƌ9ݎU46lX/?M~~f&M[Ȁz4:r.RJJxlٲ^{*iC/Hę:u&Joyzn6`ꞦSB!D/IbDbÕÕq=͗:~NfכH?>y=98sqGv߾wWx|aQN렷8B!/ Mɓ/~AA :*H$߃6We1:(L.l'�mJPt,l?rLuV^O/`&wy7#FEujkt0 =:}2MD"f|rA`ٵk/$99F3箻Ɉc9| <aǛ hZa`zzt]cmܹO}stgRE̙s1V2p`%K)Ő!N^^nDxW657kF:0~M5Mf3e{w$Bqq�ZtOnEs&&>\\nrsq8mJ)Ld7hnn|s\JNN.6mwH$xWذa-Fcԙ2,Z6۶mB41}l 0Mwy꽌3+r?.'OOg'kGx|He' q56sOe^?3fahZ܊q:ZZfҤ=z<a# fŊ%ĉ1<ᄏTT a֬-i:~rrr(..efL6 ˂{wx[TWv3l(LcɒS1֭G}uVn*nٹx>/~e/~˲0a 99y,X0] $`+ZY-,b)'EY__ˢEocVt]b(3g^@0A,㭷^rywB 2ٳB!ɒ�t?=_?]kF~EKB3A(Fu^dj4[,-[̒% vFy㍗9p/}_hiif=6SPP~+(--4z5,Y׿= XtohZ2|EiYٰa-ee0aJێޞ?V  c6-[wSuFf ft"|U_~ԩ3D¼򳴶q:Ǝā՘IM~LLg0=8nY@Λ{[>}60` --̛^xwUeF8[n"s%WR]^{X,JU {^_P…osvl6GO4ضm3@3/8fI&SSsV^AC0Mz5kV|΂ؾ}+>/@sso2͍tmvqK!B$�O(ф2gQ6MB@Ӓ#B t`el 7ʍ7B",gFOrį~c,Yu}p/7x+ӧ0 ,+/?˪U˹/sEiğ o 7tn:t8r'*̤nkkj8^1YEEo_믿CK2t0*+NUH =~h[L0M0 nV.2,+7OkR%(zQG)f@SS3?M{O9r,pCL0_?y?"n7W]umm<A] MӰ 6mZOM~`,xWX]nV>,3/4OaA"`ʔg?.3}-BSB,h +`BqPʢ3/0l(e1l(Ӧ&##@ CGkv)))ti.׋eASS~�,fc;عsXPA.rs:e6wF, Ӆ=0R9L43L2k?`ǎ455b8| h4Fyy%s\J0tд>']+DXR lذ!B,_]$}fϞEt^Dv{O׫) tb0 כwW#z s䒏4;r^%6n\QJQPPĤIaZH$L0B!ĩЏ#I΍?};3zVGGU7NEԇܧ7B!YbР|8Tg:e '), t\.WzN{tlkk0mm<c2z}ddd$33;^@`v:Xza$# P]?֭nXX,NPdgt:,৥}"4 4dgPWwX,Νy챇;\\|>Q9RSwm)mұ bQjS"Y\ncR*J),+w(\Q!ThK)"QBp9}VJܒx}B/p:dggc{D6oLuu57h4J(Bu<.W{Gq}5X~=cǎUP|>|X,ƲeÔQYYb6B!`i&0MzQ3jk_nEt:qtN{4Yҹyl߾}PU5<rlOmjF"a O{/p%WHO{L=nmnNKK il3/@)<y<^}޻n/n.X,+MӈF#$ \.at17GQ~E&BS5?#/pSe1 7\0EyAh ի>Kdv222'ꫯT8D"?$Ç| _s=c=~ 8cƌOz,233 馛G,m~?QQQq o:mm!xA,Yw\r%'=gB!'l$& Wy(/A4'v{c"` <| _'//`߿I%H$Ν[c+͢X~ܾ ˲hjj@0nˆze$&͍S\ɓ3|hdMfBP(i i:aH$ahX_2妴%K{ƍRzJZ[)--p !Bt3{`}J}k9߽b\,ٺu } L8ޕ89,Zx^taxg>cl۶ Mӱ,+pM c=ƬY3ڵP(׾v[l?;߹/3P 2immfx9:0FønNWD"Nqq1{yyG͏I<'wP\ܧәV~SOqxT�Z!ڲeo٫J) ҫ*9?� .+>ƍky3w_0.>{DMӹx%̟?Ì=x<ΊKF#˳jG2-N'%[?+Xdvm'##%&:/ hћdddiSΤ t$gocl߾*nx>N]v ۟Œ1rX&tX]Ϯ˂~:p8)--cɒ<RY9lMj39w9lbkhmm"f̸�8Rzs?I۳.B[?*f2 7+ekamN4esfjnΟ=cFblW9|pG8-cnj5M08њa)'NC/p>g Gh4c=ѣ{xL42ӵpĉJkz}8NqnSd׮<Cl޼u]W_a0*O> dee/I& ?<ƍ ;hbQ׿˯MSSS�ׯ㡇bϞn\pNnn&LDE"BR Fnn>uu,^v9˲<.JsS3ɄGNN>v˂!C/?c=LFF&cNbu׷x'xa̜y!W 2~w/+_6_Yj9;vlfQXX5\O~~{DOGPAvv@UW]GM~^{y\.7o7_e͚3rrrB׵NRTT 7|z'<sf۶~ ۸),,N-gpcc NVV~0ݦ!77)xLf$yyA5.cܹ%Kt"Nq:kY0v$gG(JJʸR^^A$!## ;rrrlg3B!8i-c4,+E<#;+OjF o,ZC˸) 7~xj;3>4^~uwY.2Y]탿 JQ_ڢh Bps7xb#߅])Sr<M܌Q7YC2u, {}=%\W_tUg9 O~UV{QRR],y@ osm׿sww~ 63gb޼yu]\}̜9u1j(jb(K,GW_a*�^~%k|s# _<S~ >Ox;[/a�X /oQ!Dc&u liHٽk'�eLY@4RYd4MXp0YV# ESk<j# f`4x<NM~@̬tZt]';hN4ZZRA,`1q=_%c8N|>?q:]dgp8ُ&33 S_ڲ,:@[[+>_̬.KOBmit\\TgØY u44r 3z}sGZ[[.\NjICjlA1477Q__adeKLfc4cY`-H2?N5VuGcey #B3JWCa4F$`l{H<NUii >5K)Z;(KDhiin 3:hD5v\ƕM,"n70#bŮwyw^X?k\:Z F1Ysϳ| ƍ,ehjjbڵ,^~283f駟bȑ'?pW`9\.~tJY5j$q:]][:SիWsF c=ƛo@Q^^o~;.2BQKfrlcTj e^^/=z㎥5 222|{,᢬l`mGڴujS8 3:m+.wVVvut)NSG꼿R Mvܸ\cxx=n?vگu tB2q^۝uB!84�s,±8_>ad}A?>o~>Ǝϖ-yν8qxzkasbX(Z#d J2h 74Pp|47t?9_?illbI sC`j"۶mSLaȐo_5GNezY4Nc$3oߎi޽˲Xj57nB)Ŝ9)**JɓyG/~A^^n*�-BK9VWww${j}+Y<'3O]d棧Ⱦ'r>!BZ? @kht2QJ^ Kˣc7Fk%dVJpg %`Ot 03B~` }uիPbxu*xNGEEk׮!Fw| ^x{#?4-3+0l |[bȑfa$ @&#S|^1Mðܜ RAAAoJIII:ۥcݻw+0}tx 2!B!B!>*0�E *!3M\N2}|?ذa=x-cӆ \{{<f@@rw[Ђ>nZt Fa=}\>Zf ʼ*\vO)n_{?0W\q;v  qe2e #F`eD#G+hlldɒwؾ};k(++p_W{u5kPVVȑ3g6xg9ؾ}.'hhhDQz1yd~߲xb|>y(e1eT4s-'Xz5cƌNg9777ĉ;vqG!B!B2� xr*4Mô,N͝JNs|>~q:]x<n|{8Jf֐#__!ϟH޸k8p?OŸ;+c~ Imm-3 wytݠGp7�r7Ȟ={O~B)w&l2~H"_dgg_O|,[_ddd(,,D)ňo[,J4MRF[} !B!BQZZCD:qW}%L[B41t܀ ?S]]Mqq1O4D4M4]Kf4@>ipbA磏,p|> IfP]w}?|[+?ɓikk ]zVVvػw/iRXXHnn.6 H$ݻZ)))p QWWԪ ]tΝ;q:b&Yzr:ľ}u"rrrH$̟?w{%tH*̉DݻvPV>ؿ;e!q,gkp e}8ʷhL,7(BBWCefP 3aY~%%G6uZDpuK:m0 Mٳ{h4ʸq镼:=Nr޹aw=FcQݎ?//NφB/k֬ꫯ:EA!B!BO @'.GPgdFLg͚Ÿqhkktt:ݵ=>#:�>�iS3 !B!Bq�8[l3+x:99YB!B!/I�bLڞB!B!oH�4pڴB!B!B37q`}M_!B!B!Ĺ @k{3!Xz>fxb\S]uƪE[14݆G>=!B!B!v>�0-BnD:A Z?K,&Lpu5;vmNM!bq#㊆Qqb<λ'8=YB!B!g~V 6w *pv 5<o~_,X6JKK#GLvơCLff&ee;vl=#:B-8>r�}>S WgP8p:ϻC�*+[vxm )K!Biz,XbZ{tC;K !Th{kxy6uNx?o6(--eŊ٫㻦}N)h3^]u(֭>ɨQ?N}QJa-ۗ @$TOKP5X>gx } nOŠ6N~i(ei: z{PY)D<GmBtكT⾻B!8'Yb- ٜOG Hβ,,.u4 Q9]B!CO/YE:ݖ-[xַu]ԩaY&=fHO3s BVhMӰC졗PU8 33nۘ4i_3g+⩧{1*C40RMflvG^EtᖃlZ8իtCR16'<GMc6V[2Sn92'BL4^$W^СC(1bӧOGeZzB!8�ƛ7cyoi}Ldʔ)-`i7[j~@[-F9<BOHfE8vr|yi2yØ5t.S͢0XͰ_Hg3j(6lH,pvcM#ryw<B�bFVKV*|]^ .oeYAnb눆ٰ; y% 7}3 p#Yؼqlv7g~/B!a4]9+54?.b(KQ5`ע!h!B5v6s(@?EQJ؇;fMDXme\r*vs*j \<*Vzw/ᅿeƥ#%9l6@}{ @iDZk8NWh_Km*T]pyI|?;!d6< `ַPuh FN'P!o_Љ7tgB!e*4tt@D TB!g~KcZz~"81b@ .@  q>㈛ J ӓŰQFu J2h 74PiَR o ʠi?i?:� G Ұӌne@)Y,+ݮaw 7a>B!B!B]�4-t O֚erت)3p`9J)֬Yȑܓ=u;y͟iIR|xtS3]}Y[g|^[W11U9n5 Tf\q8.z^Ptg?`2K_W~#λ+gԌ/_R/"tAl.N!ih'S\bfJ.ژ1l4M_B!B! .�mrdn@46G_憙55`ذa̚5xRy9rUUú|7*#}ݴF5` /z||!yUt=I$Ln¼y'O|}5c >RJU΢l%l^%)d۪13Jd—Q® 7K݁u8=N@tnwgb Gpu(irrB!B!wh xINy~r^6go�Zrۏ뮻u@ ׯ{<.Óͬ!wG 3m3B??O2!Y9''Nii);vl ˊja{p8}9hh躝ɟVvy1%b1z.͘ʚEgsDt,+𩷓W:�%c&8 )t"m!jD!!B!B!~>"$y͗u98{G\QQC}LAA͋Ͱ1hl6zێ^xD"$rivæJٰK<+Y۟Y-ð9)<15òL\@W:Y/ZGqsS9c=.V8=Y�fuKDB!B!BSt]#>Sx<^ i۩<0 ¢㴥(ENRR ӏy1I;C ' W*xܹm$ L�躽qd:ftÆӓyU!B!BIZLo/JuQh25 J_d B!B!B @3 jWsJY!B!BI,"f!B!B!; B!B!$4:d): !B!BӏQϵיӺ~#m;6Wv7Naq2m>k'ivm !B!B_ @E[$;N{GL#SWWG8!##H0DӴGH$‘ˤp\Xjv.eߣۜ | C.2c"(ep {Z9{9E#q{sIT5wn9Lnأ9qxx 4\؝>oۿPA2rU0"DC> + 7m<D<Lv(4s4":k6[2w캽 Y;­uTM m !B!BsA?jo7/ O`JSFrءA/ ,R?gQh'h="H_^z%^/ir_6[ j9ĹS4 ,3xM7hϪpѽd=p ne2o>To[k ;#}Lsl~c?ӓՋi lc?ELlˊvسin_NIA=k>Șp`Ns}Mhi+~O_[cȄO杏m2g]2tͬx~B-O"B!B!M0� X}|rJr3,EY^V_wӈc|ߣ+V`f9,Zx^taK)֭[q}lJ) a԰䖌 m%|A!3(ʲ `QD<eQVӌRXf3J9ܩ>+,3Fl[Ec]ґ:"F"p#V=MK^&_} ;u^XMqk-3F}[fйTM467=fwQ59:ͽe haw%SP~ bVfORZ5M {& 0l- Qh #&"6X,@5p- !B!B_6ʢ\v9L3ɖ-[xַu]ԩaYfcqZ"M(yM9b!L+N@iXbK*y$x< k9cXn@9)4{pr6(H32D,ly?H3OE7"ͬYXG4l ;<7'uKD]J'n9ȦS[ M70t.c>lYw.&rhmt yf"S 6`n%[زxڻ zf�pp#?[: CY{%nd?fwS1Z*f~ɟhߍÝA $[V_aBdcؔ[en=ȺwɤC'Ȁa˿(e:߃B!B!omy1.y|rX3Aw`&SLImIU{f=xE[RAf" roIJG[ =]C8}ysT cйL4`1dҥK7]70MK/suҴdpvߨ޾RٶC'}D,o 'k+"Mh7`sx0]^z&&3 #4Z/ۗC Ws YiFNhV-|<:F6,N?G~aX*AC&2r+/L {`rNfPV=ŀd  z]^%d,e׆WYaGpp0^f2*~p`sx(8D"B)8x3SNvhbVΧj͸Yු C0-x)X{6?#?XM"Z!B!B OϙHNˡVYH_3'QJuXįwLE4c^C7qeS(˩H ̩䪱7pȫX]ݾ'=<Bsx6t]DzLXbxDt)ӝy?KwdȫhkaϦy ҡsرl>ؗvWrVZr`;䖌fwGɒU7`l[4y&R1s꺍g`W9j- Άp8xETuhۙ>Q62Vc+;A ;<Z|wӝ_2lZ8P=:b̵T_F H[B!B!IhEnǵIo%khh qfA4M# q>㈛DaA'ah4K) b7dn`-hǡ=eL6|�ݎR*u\0.MAQ [FT3`{:i}TI#M[(ʲ:b6 mk>ne@)YeE,LN<cz�ݍ/U$NuqJ]紎z V7XHgMGÍO]  ϟB!B!a� x\X4l0p`9J)֬Yȑܓ=u;y͟iPWpg %`Ot e o[xms^RËpǬ{V1W}u=!ݻora= M?2;}"Oᣑ&,cVSCKgNy>v*uR[eʱ.N! oqÎ}/�R'#Ժ:V;qoo_OfҰK@< Ja{hi={B!B!�ƺi G)ˢ</ 5`ذa̚5xRy9rUUú|7*#}ݴF5` /z||!yURǛkKb۱,Effԭ>:iql@m(Bu9d G v}1`׺E=iLQB5Xf7Mda&߾=3Q^A$\ϖ't<Y#P/]^!#ovp30l'wtHfp[փ8\#:ah3%m!t�ˏӓ$b!^F^.?vD<D<Bˌn="`6Bd` fj>Rd']хB!B!F? @î} Rdm<N'go�Zrۏ뮻u@ ׯ{<.Óͬ!wGnff|<~jf0'Kmh"40M9spxR{*,+NӇpl_ ;׽H^Q3D9TM4[ p0lN�vk_ `&,}_ rٿd*gйl_ ;׿7P9=a־tFATM#sWY,z蚎e%>t�Zuܾ\OV5mfEZ�ؼ1~S?Me'q}yh ˌR]6efE [:?y iʇ_AͮeZҩ 5v1!Ro5k]a\U^ۗas`}yHC-1cB!B!BtGki M, L.(*pD 5vus<b^YhBm۷f (,,<fSJHkkkmNس韬[�æJٰKSkW�݃6#iƗQRv$i!kMg*e.o6,b&X<~t<F<,Gv ncX}$<T֑E4TM.Tb&DÍGjc2�n#mDm0X+NO 7;08#-@2:֖'u\NwͅҰxFIzAJ 7bw0lN,3F,҄D7ڻ i?æ 7kF!N4onw`1H$޵l}~( !zロu֡{B!i~(Eq!C5SwiYdffЦb9cPJpʮ?n*M+͉۟s];|l#N Y.47͙^L ~ČӝӝqGwվJnK;tݖCr?ݰwz]8W<Y3:uB!B!8~N:\g؏"~.9~=GWdsnw/B!B!"AgB!B! !B!G4ڃB!oHB!jmm-ugD"Ho Ba rЄB! A RA׎nBsղeo)ܑRtYrefggAЄB! g@�\ @ǬuHM3F< Jawz1lv5>՘Od˄ޟLDMa&!Bcǒի1 :Gh);:  ,O΀zXB!~ֈ4"h@iD"aZ[4px<33hkkȽpR4jv.eߣۜ | C.JL"mb؜}2,HHfdigk@mZ?`"a?JDC $a ;8F}z0%3veK"fԌ/Q2x BS';;M6af8:jRq5`ݟ+B!~{e!6%7`)哆ic{yxWկ~%33i3 9vmk<Swi1~x~b) @"ƦkKS ͨ_NeH+ϴZ@ƥicɋ%r,4gڕts\WZ/m{s\|h=<Md]8=_#kcǮ `q@1r(qE?_67=]좑 x3+^H[ ̍B!6g^HgA gfذa}=!BsJ? @k4+38V9}ÇӟfWlv?o]S>EkË:;`0eYt:а䖌zB6c?A~$ښ 7,3v<ڌiƱ@aY T6'xJptqdw2&Y51xu䖌TL`14ݎ$!N*W#% v`Lb #eTlc 3! aΙ 0ֆIMu,bf ehιc l|/ &Q_M7Q"mNg=sZf)ۛKnɸ6!B˲ꪫظq#iJ)rrrꪫN:-B!NN? @úki7\LQva`?xrWGnn.?я2anqZ"M]9b!L+N@iXbK*Hѻ@h^^.{lERSv nJg+ei:f"–`E$aܾs^u/0r@Yl_4:FLel_,[<ɟa< M 1ll~KرYmu8ݙ؝^j3l- o';} àQ`EٴQ\7PۗǟЉB7ܽ<I[ 77`q缧s\ 6cqn$#wf~ �3aO{8]AⱶA 7}sLjiG "Ml^wjv.4`p8( VH~9B!ĹdAKB!D} [Ou]#^kA}ݵSN)YSN4mC�ZcKz~h Ee~zn23)5O憗Ƭs:hblǩ ;w;.n˲˹‹)  7j MV<<@2cDC7P@ğY˛ŁK*q 7uՓU0l16-1`ʿcY ]/2{{PHVMKn\Bٹ%Fpرy*fn##(im%p)1v{<ɐ7`Yq6(cȄh<~FfP}[f囿d/nxx+V=Ő7P2d{`nUna_F]aGSY,L/G龵z?7c]TM ;׽UO2d$o_Di齘!B#N6 ZB!V @Eb쨩edY?Cÿ >L$׋eY_НA&"t{2l e9t9\5.y+v˻IJG_ґrVJFu2{atE5g׆W޶�;HդP1ZN?&Bs.ښ 4ph3e.%x v.b̵_G,LIlfv{ 77Ͱo dA:<FYv>x 3|av4R4hf|D<J݁@2|Ek55dq`;ڳ8Wڰs8zȩd;ٽ޷(+Aͮs1rڝZppq4 wL_-b#m (v Q8p:#D<L݁:fBq:,h~B![2�m7 29 n'??[ۘ @0 {3xq3NJ ӓŰQFY1/PpPY@Spi(//?J)Ыp%Cټ]rF _P_oPf +C *ffiŁKe;xHCE tqLL7lhh6'n6JO\"@I"ea&j)6'`1($VFmjSq{֖cصN<RB %dk3%n=/4^N?ɺc3Q"mu <@eS_XHkmjI ŸY@!͂g!B/9A/-y4HF=իWbPɃoHK:Ȭ"+ǣK:+XW ,Y0bN<֫})+pp\,~[4쥭 wǔ4gJLİعE]I˱9lN+g1z]2azi�ॖFkc+6DÍ.R +@4ܘs$Tih/`B4=U*&Ϲcs uUsҡFR+?uÆO/h[xx( :̏n#mţ^ K<֚h^WB!87Hd? !B~1�Mxk6挪۰ ~M x7-fb=5 { _;x#}ݴF5` /z||!yUt=V),Kw?CPWzwST1Mh7PA,3A$@k%nH'oz Gi�8A ʧb ]Ns."zJA74c4L0c*⎊#YƠwEE[طu>u(KIX<S1Y^`/d;>o0`%ģmXKi}yi<?}M:PJa؜ddf2Nbtz2)vW>Nv ϣf=vA)CE2޾A3 )CV"i䖌pL־B!Do%Y!hEin&,ōƧgo@ 9dees%/KOex5nt=aƹmW9R?7�> e 5`w=fkeǚ@Qʤjҧ7PHAT.=~Y�hAq,o_DI2�u;æJ,y?Emf⊙TIqiMZ[ښk0nz;a5e6\lv6 7/ײ}ͳ~+@FZɕc?Ak^V-NOn^|| U?5ϱc (ed[2W< s ;<9@2[LDh8hRP6RjWb؝~lv7n_n ճq_ش1DSotj}�3<z4F؏Xw_>6o' A""rˊ#BQo%Y!ZZCD,4MY}1pS+ ma2nrӖ ǩ~FCC�`0aTpbAǵ4&g?Y58\Mab1"d(Gӓ߇ģ-4Bmx31lO:mY  +U0mMDB xG,HeY cM7py�HsX'eiM"ƗY.!awPV^` &\t/I mMٜxɀqa ˌv{Xe8A@#iiЈZi߅aKѕzqj9ӝ/X'6RMKqC-q8JOa ldž 71vW)~IN"4onw`FG%qv @Y@lc|?)B3< ?ϻ̂VJͯkF]B!8k%?5Sߧ/Wck`׉xX ۋvECW}n8o,GuGumb?p!ja%ߧ=پv_zx|<ޱ'z={z>\"J5 +B!GB7eeY|{B!)ԛ�t?,Q=~mvQCՋc{3C{95ܾ\rKj>ǟK@ɽlds{|{"yË-ŇB!6ՂB!K?@3߹4Lk6l%s%B]xᅼ,]4m#B!~KJuhG!B|T 7x#~d? !BC-NRMn OӦq֋B!e/uMcĈ (-c (7n<S}']nB!:�8)n~[!`&w;>N,fɭ`,cPNNf@Ybm j p8t:-rr,Bs[?@wuv.08sƭ&B!k:w.ppm}r\v%ih$3-ꛉ 1ٹu0˄998RP!~Dcdr`A&b&MMMXjtu:QX,yv;@O2MB! A4`RvqCQ6W{oK0l2GB!87�[yy ]4.]3ҜLkFwMM wy'-8R\.0sS4n4ֶV{߽l\ǃ`)/QZw*B!UMD#)t(KIL74r8f?kصQB!DhQVDKehh p,Z$aݺtӍ̚u>eb|huxB><׭arnslڴ_/z=oT !BS ػ5ĀtYtͲl'E|~B!99Lgh Gۂ>lA=p0m4.c壥?iw1{%Tl4VUqes7aO vލ,tMnB!6шIsCnVG 8ٹ.L<jt}!BӮHScjj[ZUם:-b#,AQQ1O.9dںxsT cйL4`16l߾ƆFjtMl@!\T2W7$٠Wԉ,,SBqn褄ihv* s(\ jF"aZ1M ]׎FSRh ;LagV7נuJȒ|qkY]ݾ'=\#L4AuZQ !BNN̙B!e8�Q]=5|zDv;B�ppwO|dn9#.dV(</_>^Y kLNJX u#RY@Spiirɥ -!{o.B2 K!B!Bѽ~vc3tUuWN+Hֆ:{ oID:eW #ǓͦP:;:ٚ2_c޺XW ,Y0bNi<¡P*�-B!B!8�FK8 WQB^ǹMH$ظq+0MM(++#//9P\<n,P?/z\>Zf ʼ*\vO)fUTWWSORQQiB!B!B4� {77-fHehNvv6_?R й{8n8}p:ub-\Up88~II!B!BqhEEA? 2n΍`_|D"S2vJ)|~?D#ɶv J)4YiE!B!Bs^? @a87lg(,,S5'׮=d`RηB!B!q�: >cVJTJB!8ƙt+B!>:z_w@!BqvRJa&x 2u;T4-UN$B!J?π;J),+dkt�eu3+ ,dʄBB:oOv@ ȠA;vYYi`Ĉќw}=%B!$ @wA)E(w.M-X%Ah!M;+ϒX,JU([ Xqʂ_D"Δ)3uB!&nX:B!~KBt?ϬYQ[{^/_ҿ`:ȈzLiF"af(e:ݷw6dp~ßWaraYiN,6;B!Y?@ẉ=7wyOk͸⎺Z/) Rhӎd@ !8,Kֆe}!D>,سg'h>X7n֭bϞL<Y.%KqZ>|JJX| V`2dX ޽<͛c&O!?H$ŠKX}"Ew,**a,ԩ5jJ)Xr)ӦA4֯_Ͳe9 4$B!hRշ ]d=}ҏA)EKK X6>x,v;@�ѵcbB!i  !;ML0 VZO>…o1&N<p8[,xbN …oo|D"γ>A,b0a?0@,\;vlf1qdB(#Sdeedx׸0 ^x&FpM~~!G#k/df͚%مB!De�:cxŕDc ||9\rNW0U{oիWvә_95Y wﻗxp8L<;%JNQ_B!ęF)hmmÇ3pN</~n< ?'oonwtBx?x'/2lHV\Ç(**b͚9x+ / ?U/_ /<ɜ9p͟v*~索j$}@}}-Y,Y2jyg>#Fk֬dq_* !BG0�r.~[|\x0/3al9f"`ݺupmC`a|huxBL$Xn smcӦ ?oR!B DG#_ikk%2qT.*t=Y[pWQ\\RXb)df" fmfv;f]ȟ kּOvvᄏ|LnӿfL$`ʥ1 ظq-H$dg}f�&N<G#[l ?k?{p57~j[pB!k0� k[t+.ÈbΟ>W-#'{w>.g?꠻F(o졗PU8 3pZUe܄ <'ؽ{7ХB! y[ZZNII>+8qYp8Y%;;MӘ<y>,]֯_E]A^^q@h4̛aSbq 7㯬\/a|<S%==zB_OB!_Ǐ)cؐB~緘2aϿF^ٛ0 ^}UBi@AAac?`$ӓk /S7YC2u, ql߾ƆFjtMlNB!7aˮᢋ.Oаd Z+0 'E|?###RxvNjeԙk(ei:3f\!||�),,Ԧa 1 rײ~j^xIZ9YJB!D/�"'a]6>yD\~S4Mit:SWN)\ςh`솝qv+k:[bdx>׸l.n_ KG^KρdX,Bss3HMiinFN2$.B!6 (iZfJ)nV[> A,Ov=(u3/7_eѢ+8Rz;R頬lK.d-5ÀDB v'=xL0ev{8bŻhĉt:0M @ !BO?jZ^~~3cGK RQٜ]k&]v?Ogc>rG=HC[]:ȬPx^r}{?1F$p;o@>5U_/r~?%{/%_HF0: !BSts?ʕKy߰kv ضm3uu7F)EEF{-/t2m+eaΜy݅<؟=Āٳ={vr_c'MyyÇ4aܸIW>|4%B!аq~A7S&usa<bvMn'Z>9_ȗ|H")fY<Lo6ѐ PWU1k[W11Ue_5 yyCT�Z!B˼^/yynA|~rsۏ,aFq䓏KOc1c&kϖ9B@cѝ  /K躁d1躞n)Sf0t�esih';;8RB!e�l@O/cLW+oA)EA~vJ/rb7;G^YEPӴG_ˌRWI}s_ʕ晧S)B!iZ\&N</ed˲O2wI.28GSWw˲3=eYL:#;m{<o\ƈcJ38[n3]e]C"fI�Z!e�Xn/e<nX/qU{Z̧'h?9ny7y|rYNaa1.`p8 TWzٿXB!8>ۓ Bw>e@W)wry vrr&xxw>@}B!Da�Z߿=ii 㨅D6 p:v6hH4ln'k !Bv7y oBPu[⣻vo{2B!�4$W3S羹;T];=Nn^^!J),վB!8IcCcB!O>8)@YɅ Rh}Bc,Kf͚5lڴ0~дB!8C�t߲,Ekk[_wQ@2z@b)9B! R,͛7~z֯_ϦMhll$qf3T2B!DI�Kv#VwIxBwzR466~V^͆ ؼy3555B!,BדĚȲ!B!B�nbauW>˧!}4-M} !H$Bmm-۶mcʕYH"@Ӵt :MӰ, KNne#x< !B^�t4--Nd !;JcBt֮]ʕ+ٶmpVJa1zh&L8 ?q˵@B!B!8˄ajjjؼy36l`ٲe>|NYκx<0tPΘ1c(**"###nmLЄB!FB!BLӤM6ܼy3̈́.v;TUU1bFСC 8.#'GfM!2 @ !Bq TWWf6mĚ5k>f,g]|0zh=z4Ÿ^W'FޚB!ĹIB!Bbl޼9i&b.6lǏqR n뺆ͦY}=gM#ܖ20lB!ĹIB!BS<xe˖a6oLMM1Y=-8p@N(˹;N N(ydzRDdq8B!D�B!D{ xٴi;w99''J&LѣY<bw `:2sd;%9$I{ɍC{CVye^_wI!H�Z!B>^⁆abرTVV:-Wea̬\ ]躆  גTRZbW((B!g* @ !BqIcc#6mT,g]QJaYVzC2|pLB~~>>߰iL(&_vah}^=Py$\) 0Lgg3pݐB!8wI�Z!BS,o>֬YæMXf =r<~xN ppptFɠ~ ģ}0i7׿L:<ϩ BkX{͛7'MYY;,rNB!B!)hlldY˗~z?{]uy}-�AD!VSTdɶJl7X8df♬ZGI&,M̓oq&''q%[%E")6W�o=eظ� ZE^}�s{frJUΓU\0oYiϞ}_$v.ƧkYuϖ-g7;ph8xO1Ͽ1f~7̙3лG!$B!sqQ>K{{;?nsEEuuuZ 6L*颻=,^gϲnznn�?ٳ<yeY(G�> {B! Nh!B!w念D"1nsqq1,\uֱj*ꨨ',ʛoIKK mfΝܹxাܹsyGK{+_MB! B! ={5," CRQ__ƍYv- .X,VMyfضRA{96lpGyW^y'OTJ,B! B! 5É'm8477|r/_Nss3UUUR|~QJ*}c? Ðm<DB&!B�Z!B1raf[[d2_ Xd 6mbժU )/ϒdZkS\\|SqT*Wl}0 W*B!I�-B!ܵk;v젵~9ZCOOuuuhu]JKKZʡCXnMihhsXcƌ?o|z !BB!ϟ۷`mTTTPWWƍYz(M6XE__… 7oq+Bx<οx@)??>ImmmwB!-'B!\m\UUEss3WfƍQQQ!sh48Q[[{ˏM}}%_F|k_C)B:!B[Jh!BqۛL<v˗a6l 0 ӻ;TF ***ַ7MBM!░�Z!Bܖr ۷[^1taҥEn}|;„B!cH�-B!nܹ;wC5k0{l g6gk_5!B$B!^"?dݼ۴]Yk-(uy' Ð|Ez !'B!4l۶;vk.Zʕ+{$tFy'ikkXhw}w%BqSI�-B!}_|E>L[[A`YV1YSM<~8y$ַB!i$B!S^:ۼ更a!���IDATH$�m605kְeYL9.̷mzXB!7B!bJYϳgz{{ pTܢ"ٰa7ndڵzB\ֆ gWW<|_.B!n B!ĔJhoo__W;Bg5e%KxYr%UUUV>OիW|BI!↓�Z!BL d;w}MP9 CJKKYn7nŴVRR׿uz)o??B!$B!˞={Ν;ڹ{w 6n: mc| _ooضm=P$BqCI�-B! _~_W?~d2_PPkMii)lذ}c̝;Cx'غu+ŋihh(B!n B!-[oOSZZZF-*kax ֬YCYYY,MU^^Η%^x.B!n B!-믿s=GKK aY�J)i!hyK/裏JſB!n@ !B*N}v~y^`޼y<#<#;VQQ?#^~eB!mCh!BqӴ[U<K,İ 6vZB!mEh!Bq OO={vMMM<< 1*uB!t$B!8dPJ!<#|K_b޼ySR ^י1cF$Bq]$B!7D&'? ?U�hロOl޼u =T!"~orlR! !B\ B!uoo'Re!| _S%%%ڵkdǎ@ !bړ�Z!B\0 Zf1ӧO|z QJa6<�_ /_^! 1455q}/~BI!I�-Bq;tY2$L^0 % C�<xC_TT?yQVVVbZڸq#/"{�Z!ӚB!w.oH$!A0Gչ[zݺu|_Л&Ĵ|rf̘믿C=D</B!U!BZf ׯχAqqض=O.|D"lٲEg!SUU6mb߾}\pB!f@ !BኋWBuuuKzR[5'N(pB!B!+V\W�Dx'*q[Xhx{z(B!Lh!Bm|ӟf֬YBK7ތ3?>ǎ#Jz8B!Dh!Be?}"!Bxxe˖q::: =!Bk"B!�L{s᤟'B<K.<>\!B\ B!DܹsyGDԧ>%BϧBE!H�-B!FyG&]! .d˖-3f`9`#Bq$B!\M8<TTTzBܖ8sΥC"B!Ĵ$B!d0d޼y|ŶBY֬YCB!j@ !BKL z455zB.\m۴z(B!WMh!B1K[G},B\Z,ˢCB!jr B!g?Y\׽ߴ<,[WQQAUUZT!b*�Z!BL`ŊB\O<!bBB!v$B!+_ hKzxB(555tttL& =!B2n�T =>!Bk`~Q i&֮]&|T? q ͜9A.^X!B\g/.B !bo"Z J8L8Immm%۶+PB!3?(Z>)8B!&%B}.nl:4\r̓zXBQ ÐBE!\6LRQ`Y.Z!S[ &� oL:/fKx3ps'^9w3gbYB!U7VJq2 ݽ8O!S &h4}F\\|| :Jayj =L!Y!B\V@۶dY.v!Z B! -²l"mK|. gDСFY%*�$rR @B!Ĵq�ڲ,\Ų,'�Z!SL.- qm˲$#~Z[/QWWG{{;T.B?B\5 5? !b09z\)|ΑZ[+W}i<+pB!&͹rqK-BBΘՈI|=&>H-ĭc6EEE~#B1iW sF_ЩzB!F9GBh!nR BE!bҬB@!Bֵ9zRy<Τ IBܖ-PB!&mйB!(\_) sZu]�-BitnAd2B!S¶(" >H-UUU@www"B1i hqN xޅB!hjf*V-̮U%!9GBh!n B1M@s!t]EB1uuh:/CkjABݬ9GBh!ni!B2КL&`EEdB!BLaJi!FsBx�z(B!6nFT:BT> !bzPʴ KBtֲ9*|Ʌг9w&U] Ĵf UaX!BLڄud}pB!!ZMV9B qضMqq1DCB!h=T5$nB!NcP9GBh!n ۶)**"LA#B1)z !BL'LN 15!BL7G'Bq ~s>H-qbB!Ĵb]B!SM& S'|ΑZk7B!.$B!dR[_$lzvʄ9B qքa(8B1mH�-Bq1i͚gRZN9GBh!^ =!BI�Z!61>-D s!RyMzHBLimSTT$B!VL� i}B!ĕL9GY%k+_Pʯ;ÃB!r =PmAU !X#Z$Lڮ.b+eD"e<5FB1>*y�szXB!BhGWX˂8̨t9sO8.TWZN]{=WG_!i  Qsm}8N6 i?Lz_ !1 PnB!4rRP^fLiY=a8-+R[כ%.nϰswvTȋ7>cL%__YP\(.VD"nxo-Yf{ɿ!t] xg[#JA߀b@&Iw׼6_n繓_B!%|ΑZ%z8B!rf-= 7E[he5̨{}xLqC4/roS3&V b1@@: ѨyLF:H<̿G\z|qY<.5 u:o=o.\F3߿rz+QS]YnpCLGJkN9!/B2Ϸ- ool 8f;Bmòu{x<9Om<_YffG,Bm)ǼNnqmyǖj\ !BLv s$򊋋 ?B!k m 6TUZlXA)x!t.|~(WG,`rʢ"lݑ K)N(%%XTF+֬0ɦ"֜m xOސţǰ,>̪ ~ǁk"TTXڛQhDЖ(3g>QRb1 ;v?2-5VP]ekoBx3We|p]XGcZ˥gFGy^KHjfV[]&5GO|#6~v5km@sk8m_3PhC")*-֬PWcẊ޾d26o?iXءآ-` VtFlߕu6kVڸ7!CG=|o!b] B!#\S�sW*z#p gv"@XTjK:L<M$?ƚ.Ԣ~Meų/p]ECCqW1b 1U3*gX imS3˦¶T~L53m*-}9uk`b).u6?{!E{6+ 6iwSZxܢ(ɘ'>WZip(~^ ?&Ԧ:ލT'! :ٳl,ˌ|g`1sE*e3H,s/p>h]kSVb6:1_+-UR(>hY6!~� 9̛`[g'B!$sB!B)V wZ>BnR !|7\pCoH[G>'Ox ^*_|ςy>ަ\-ζn9 6Y2mҸΦw'uimXe498=<8ش.B,"ţŘ`s Q:· nZ8V3Co_ Q6xYlV,N,ZpHu4ۉXk8pc`0d <̒Nk/ʥ.8=͏`,[<^eJzl ŦEˬj2:S>0){C֬hCqm \!S B!k±!L f3޿x+`BhCibv+"<[_MQ\EqE@Yn\>|?K{G@2y}rWqސ61  ipUmQ]eqrapeEݘ7=&W$o4aٮZ)Ycz.c5f<sWLV2Ʀyѥ/w3x̄3*-SPNYu)!> 9|cRܓBgHx_!1"$!A�EqUδ8G:%|B!N s$B!bz�&s6QקśioZ^̴Y0ϡf2=\j*KK2Y80}dʴ`RWk_iHgL8;"3|Vi±cZa jm)i'dR3ДQFldC<PmghqB=!YOW =ԉ&Xl'ʼ9m! -ӒEfTk?0 -yt,kvYI$M/_mp2-KB;ݝ>H-İb�d"B1)@!4\>|jgͶ9qڧ1="fV6[8g:pQlr?JAM. U&Jg㲞Y@lcn;S)=jAƱ4)sPT_ҚkRk# &4;we sXeBezH&4%Ŋ5\@;kWZcC79,[^|PLi^exipm4ǡyg_JAWB!$sBEEE�$BE!bR;!?7V>k sm>`_Ks5� ѡ[/ 3gĢ޾d kyV7t  YaLn Qy H$5Ja7ToKpSmuwEXRoVTUmٺbc<Mk{e.o3aN}D5㎟ٺtSDkX4Ǧ/=Yv|Dp]d*h!b GZ!B0B?B 0ոJ3>=!Uz4΀0Y3mJ!'D#tFS^fGӚ:oڀ d1=s*+,~E$RREUtvbTYܻ1ʜz7z4x{k`ƹלϿ`Ho>ge 049|q\G1ce>,]zNkz|=r٬BgȂ&XԥܢHQ;Jlu2?Fu*LŽh ,^`_k{@&3~B!BI-B!rh0c DBWKoSYsP<OuGsvfYe Gض дpl\͚TkH$CI+``Αc>(̞e =!EDH4 AKf:sALjv|e,a8zh Ljnq,=_?z 8Q3f~ClQ:d|TZ73i "i5UЛ7D& &|a,Uu6smzBmǝjB~c dCg<JK,֬t`hhvն 'B!Dϗ'!B! B|:̬@�/tJ֝x+)lƢgs* CO^Öe%QTP{4H5Έomص7ˌJV/$1^*ymg[[[3Q^fx0/ [wdy77`; Ҕg: ysV.sI4 )*RܽT1 ||,B+K)ʆ*C<,n汇:jMjh_k"iHj~L2<a,e }dҼB!!H-B!p諑 'ϴ>6T3 ۀ7:ws_ӣH8z=_y[z|BOooDaj*Iǿ ={zblv9ɴfnMyŲ%bEeE_ȑ~9W>utv~<_,0ܱcǟ},BaH|u$B!b+h� dq CWH C>6?Wo&/<r k"2U噌WYδ7z__B!$>_ B! @Rj^z=mCvMtwOhR&cY!$|>B !B1uݱ4*Tʋ&N'm2 jD\!S7B!BLMwt� o0{nBq;R 55&ڹ 56{e܌1z- B!r�Z!nVsgy:;>mSY9 Knx�H$p:b%ĉ|66nsK-B!Fh!B[fJYkhq q?O<y6lqZjضo_/CXȑkg1oZ!B6XvO!b=t:E*d˖/>[8}̫iaaY%;r5cv&jjfچiBhzC!tӲryB!B\T@ !B"jh4C=ڵf>+dZaa@gg'/vũEiiYMRL.zz)..f"5fͪ% {z.r9"(_Zk.^줳0s,+ox{B!$B!nUA�ef~q~e]̟?A'ҳ)�/}k7̙gϞa֚o[|{GXz=;?;:D"aH s{G >p}[(B !BQX@ !Bd:|Ikm[,\۶9w ygoٴ>6m<w  }<Xl%εs9(o|x^˂ݻwo|KORTT /x~5ow/|t: /<wRU5U֍$B!p.@k@ѨVB!M5ԑNl{Lև!c6ܹv,^/~Ju&{"w|s_k_WD".afٵZ{w"J?AknF,Tb_�E?>#fά_uu �TTTgٱc++W) B+xE B!U& ˂b Ƕ k!BPZC<f~!DṈ[>]O! o|?;& OhQ dtv'ID-D".A`] Ap+z9rKWܼbh;Z8/E)n#ɐd%|,˾)VWpdb""1Y[!BE/~˲o0B!7R0 HJ%tJq0Ar!5k6d͊A2(VXk8MjdL&Mii NL&<VX=@ǭ[Pf=dR>>>Kg!B!nJAI¶B!bj BE&SQ l~d&[_nY˲,Pֱt R[[ϗuG~T7{R)βhb6*Ÿ=;N*(k***D"TVV/| nxj˩}kB!ȕ>Y!%Yb.2শ7 3gNq>\x4 M7t y痼s\ŋl.`DQ~} v_eG_kMyy˗šCyIww7gΜ$̘1k7g<܏좧;wK,B!mȹo!B!$BJh5�Wh4Foy'P JKo}Zs9y ,X̪Uk9?G{FWUUSU0 r,3gΜyF?߁C/~ n۹in^N4$|B!$B!EnvfDD}}JYCf?ĶmoF<^Ĝ9Xz=ea6WXx){f`rWp�V\W7<ԟmۯ<OEE%g7pb'-"4MM ?{gODih Wu#> !Bq�Z!!֚k7~^6661wn`Y6aq aÆ{}q!+Vʕw0oB[Hضo1155g?CkaYjԿ> !B15�zF^<+SH^mCI9n֐y*D战͍fa2VZǹYplz6羦֚ CkFY!BmlH*.xRXcH¬P t9n֓y*D战ύVH,B!r]X 9{Ϲ !_M39βXaNm[^q"T\1Ӊ7B!BL=@kaխob=;CfK/帉By*D战dt$!!B!SuT@kҙ̅5=tukv]c+.)MSq%2GD&77' B!BL]ֵ<Tiɀsl*Q d*d5y9nby*D战t c1vTmP}I,B!vM4ޔ~SC71U<W"sDLrscH,B!whzba[&ML%2Oŕhn$ B!mXtt\rۺ71<W"sDLdܸH}y> !B1}\sB!y$B!BL/@ !BLQB&B!ӏB!SІB!BLO@ !BLqwz-B!ӗB!BK,B!6e詰0Whn<٧7^zzw:]̍;ǝBK,B!W�:E4z믨, b\za7slm>:L4_¶ =Cn"Q(eHшDa˝ GR ,ˬ:lUB=t*\W^k{9)fTZX27wJ-᳸ZabYv|C!BLcέ~A˂ ]fU[h`쯇O|E9{[66E|BzRE:im8pc`\>HDa[)j by˜F"d2ـ<Ri}[^�_֐4C<3 Vix Eo u6K:̜ac;p;qSgMkVZ%brhTυagzzCXm;d0=$۵-X2a|rA۹-=a=1yZ7՜?\Gbiyޞa-Bo}{bjq{p$|W+KEE%B1�ڶ+,^LitH>V`RRZb6Յ|$&̪V4/rYҜbYj үez6<pOUϽ",|Д >`eK\RiM:5áy˜z_fpL(6Qw#^Fe|_s[[31=42K|pR<c&[M)Xc㊁ ̩wXζ >̒ !Uqίw\hn]ຊgٳ/CB*UWksd]öa(7D�Lh\wX0_i>ӤW~_jm>oqNqM>LT 5֡. �[n%B!rny�Hj~$pmr&œhTa)z _fK[A&gc%yg{XTauk"<%3ϧZǧ l| �0aBf9q Q8b Y3m"E*]*habK]y4ɔ8x+ ~sۤ5d2M{:5C`LfYf~){igܰ<Qh.3桀0<Rp3rG#Z8«iz8H L=zf5AȨ[c)leoq2Hļr՚#RK8OR<~CP ^~-ͱZe w<s5</6h"8;nżFu#<%k>Ji{)5s?2\q;r,g/>Sjhܞ d="澿e - ay0Qpr[5?jm^7oڊwܻ)ʦu~J 5fGE\\n(ńtx{kHD LϟxrmHr,p#wCFW{ 0϶%?ϊs:˩},..4B!,f߯Qj/洆RMm$h9sOe#?sFVD8tqysV4|x ˙`TP\Uet˹ \jܚԢ~jTa.׭Rpe*7ip]�LkrdYaLhT`]+/ԥ%&Ln9q|mw $" )56tk÷/gGE<m2As-pع+˅nmoS>PVjjQ; |OcCmE"9p ?AŒ*\fۄ:9!�䰬٥"9r'8H;/t:,YrgGvu1$S,]0oCIc'|}`++,֮ry}|_Pgu{TZsϦa`.XHj~VXTX϶q8w!G _E\;Lke{yجhvm׺oq X,[RRśivQ2c̟p7jq\s9 6K̚iJiN9pĖ,t1fp0IG}yfZ.t|8F9v'5Xnߕ%ifΰXԥn(l?pţ{SV,s( 9rܣ~M2ٹ+˜Fe]Z;|fΰeCG4qh^0&99-wG3^䠁-+45d=8z[AkQi)}sTm\d`V͆JK'A>i]{s J6E}^n݌ǁC ;϶y ϟܾefKLTZsGŲx{@Q|Zq>W2T?:/._|gyE}x̛kql8{_!tu:\Ldk =,!B!u*X� 'XhkcZ?< 93.K4,^)<ܵ\8=FcCqb^0_6|4ݽP`anٞ7צ@STX FYko-/ov LjV.sYٗR?0f].6տ=uP]WS< db ]ΐW~?vũ4[l1o^MHi.tljÄ96 ;wges QThv{Gq y/p }<by|χdRhMg^Hqό*O>Φ'$lZa"=`R, m\^m˶EP(?ٳcnCĆCkrtleÚ}&|Zeb_IrħTGb,ZLL}Yإ5ɴ&P\xMs.ny?}!IWWHcÚ.KẊ6୴T;ލ3*M\k!h EqFL6I=Cտ#o\v<`':&xQeѼ(ƌJLxy !kldغc~#sc=~q& 8li0Keŧ3BW@Qԛc88Y8ᓏĉF;~}SmCY3-֬rYa``(l86\ Y_qŲf6`BSUiXgRQn2kłyabϾ6WtFsiM2yc }L"{X)l[qQ6t=!E<yf?Zx4,ovyog r?'OTWY<u6{^oaYN/7.$Ӛs*-x,NqI|w`> )+4h^R^f10)7x3Mnn{|޷ӽ?ay˖-+B!ס0hTHsJyT4.df5:cl'ϙ&5\ͦͮ)+Ysk~wwŞK⦺7W76 RiN (+U|88]}YvʐJâz4NSAl[ko^'3_NoBR Y8ߧyCC]1>q.$i@C[bhv98ٸ6K8|'*/ʪeiBεQ4/hÞ}Yښar>c AUGWȐɘ0摇b̛cs]“;veٺ#,Yrφ~�Ͽl{@y>g0TZSYaCȄ&*Q}Y2qw9|g2E vx{k7c NCG=<TN{n=xYX{[b45:tvfk9uG4ټ3֝Y'Xgglۼt2R`~ͫHQ96e/fϾ,%l&h\8uٗҜ<SYnq(uUpTWVXCm2`B{oG<;†QlN(ipO$s5+KZ؜;i5٬yt ع1}mYBwzӭP?030-5QBx+>|gH[ OL^z-͗>S^L?xsd^KxLm4r?[~;3;KaE9w&:C_9_3󭮶ȰGUg?֬GyJ{Pt s=ۏ 0`~L6~zJBh!B!йgHH);1:iXohͷ8|c ̭>FQen//S83k{as؋\kgDAؾJ<Oәќ:p BW HFL՚ dž YA{ LTimjz^cBfr(cl2[o_;0& Qe V4JCQsy2ٶ3âyfΩ7->Z;J-3MF;_}pO9z͚bEA͎]|+twҚ6UUdPgPg*T8:h^eHYm*2*%ŊzTJcW~]-Gb~[[ݽ`R0_IẦIU±U EnTZ IMk{@UC>&дΌ)z ;MR ' \ƾs(>CE!^}M"aB.ZÅ΀W~&>DʅcSR:S8`qeҔTWY<p!l?Ò35/8{�k1-j,*+ ]DŽG6tZr5 Ѵ H&5e&oQ[)Jή%fΰimvpk0#0&I&c_\f\`{3{>)*R ){ocR2u~9r7w8(8jZ;T~^ &BI4Abۊ<?\gK)F}(t u9A/'<̉پ};e~~i%KzB!BkP�Z)l4ɤ^T�hplEiE&+)eQ(ζjgYC)G-Ʈp!kQ| WKmgZ>l-(e٦ {25\  r0&Z=!ooͰcW"EciurKwoȞ}Y\4f,EZ8tv*f)_jB#u{cRJ5sM\P(dH6GͱM+]lK1vV|x B_WT>&5AGxLuJP>fAxL:Jn̽}!c(io9�h+E#@ji^.$-$`@S7axrR]c6͉g>0Kk=>f% >Ɏ<)CKj9#l0cw]iaΓ#?Jg%Ð{1@_5'ѐoso}^(f,Z<bfa.K;<xo<uɱQ)+U70s~ш"aJ7t哓;Gbe^3jn!zxnh WșpBwޙK^=2|5̉s}{Chll,L&(.+B!}8Z.GhCm ۶DP =!}f5MPq.#`NC<n*ǯ2e06qcklcrV0Gr3ׅ?\30AŦ:R&<ߕ|96-GZk5z/CvDo(xMkזƭSiy&~g[,8^)UG"&b1E9pYm C0d\�xC, ?5l>`T?`>UUP^f?1̳fڗ0eK;ʩ3>4U[6G/zJ~MaW;n, MJF1Ų%.ɔYpm>>!ϿfMc[=$)fX9mY:BeO_HM7PZ7!6}&ЫWDظ6¡ &B֯�׹CL^*mٔXĢD$b>ik{GgWH"r;c;o_3,J-d2LFSQ^j;492~?.nѤ~(@LiKLv*!ϽK>@ݗ.v)B k 8O~,bǎ<!�EEEB!A`+Wy5nlVs,h >:$&<H5gZ}49,pg`PP3b<bLm:,^`rU3,y(6OU]McZ6D\+֦jw2~Z:bT?BqŽ|f\E„z~� j"Ş-YxP^n*qhlUm烞E|֜j,[QQa+mkgćjdŁ@!-YN)*}/KЎGSfͮ'_[M}-YL֮Z?-ovYwWQ! ̭Lhlg8:y&u[6G,ش6B' vMV0& 50o1 �tVsO4{}6YGc4}1ťZbO;2e[yFŌ*UMmy/̲էڴ [yW8s'"TβHg4o3>+s #T[϶yިX"?.t5Zsw8]+bT|Ɯ#" ukp矉~y&?Nl~yN53-,eV5jJsoOR4ns㳨a默w\&|YlO=K.% C,b|eppЛ B! i$nW#zY4Y$SM6-ۙe`0$ Me|'|K.21o{?Gc4 fVܝP)(zzME]f״cn^4>swIEޭɚb|$΁H|m+{ cb:dϽl[[6GyGOcQ.dҚwEp€kvzh1n7ݑ?PC5[L2sE6k<ḱCCX&9uƄ!<=qXLq( jfm |x /Xj}O5;höa7b*yX^A ).@ M{6D]cSVjٽt3ɕb$ү^8ߡyC4I3g4/v w3a>W6n2oY䯨HQWkׯܵa29m %m/FjȽ|Fmy>3C.V<po[3lXj4Սs<aDXo>#c.i>{ζdWGx(U=! ̨,ƶ ͼ96GWwp%n3U>-G<6܌Gg0|pv}f͊ḟV 9iq|^i^4>Bz̍U4fs'fy6|Г s-[ƿw??(x())_I4-^SQg*eB!"ZC"eL bOezeJSZ𽝙|Oҳm;<uX CYm'-l^a]YIx'ͮMFd404aYV,un=3w4~0vM8f~C48q,YOk6o惌<p=1ڻ"=`B[0).vgclNCUȰ~M{6DڶPuq(kV�$5 Kj9w COyi6oh|;M`= 4̶ Cyw{΋B鏛h7<3><qpjL[s۾1K"ј"#`FE©ڬ+RHh0\{̚iz7$G=:p29> G:y?<.<Uf4d͜ ͙ږÄ>Oiv}QRlancŀ_m"Ţy;N53n0wE& ٺ#˞}Y.j {T0w,hr 9r ɟ;bE]1E"~.A`6kΓv9 yw{cr:w|pT3:@H2=<?B D2D†Cs0*BΏ3mf-^b 5Og4fyg[?0|'Kqb"56\}Ɏ~Zs;2xHe{$~ $4/2 Ӝn Xe\'_={Z,'=z# dS%9g<Sɟ Ϗ~#8O>"/ׂCz@ !BL=j`0yGAeQU=0 ΋i~3CĆ<FoB0E2@H c =OZ+};"GD &tUu"ޫ8ZRH$4!Oq1EQ<0ԅPZ_bmc |_q̢fE| !}!]VRlQ^fZ cz4SQfQ\4zɤ~$6i[*itF"&Io/a&� Ls0c_^nC GܘJ-JK9.E�ǝ1&3Vj=jaQ'emm/+URhdx~7,ZpL>ee<gf.Vlmq]-EqE&235!Z,ph,94r\gfSuҦz3߅/scO$u~Qʉyjh!Gׅ"3:. %f!DRH!i.͍=LP>hDQVE}!do+X=g!;q+) ]iS;R<fWZ99{qUk9X9yR3˦lÅOy*p:cHn>f?F_?RiMslik}UmOa$H%8.7<ϴFg,pڹ{p8O`n< tI.Z瑞yo200�@,'_*XVJ1[)e˖BO~`B!pИ& P6Dr8{oycw25FLh~Lh ?6Lh;}FoǓL;4ψh !zS՝ L`1z.^?/`B3}Ǝ'gI34R^ݏw{3{#8Za*8v§iٽ/`q,dh8\񵑋 ch1_<.LO.ۡ.?1} z#ݣsr'07<Grw#%n*.x(K9: U:!PLv1sCf}5{r?O<c-y7hHO?֭j˱>f\ wga珉^q1?'ٟ?ng'<oH$H|{#/y_rŝIB!z zY\?݆ͫz^^߯gܷd^c.tJӑޕ^kϹQu-̶{^NaMz˲Լ5fW3ƆL׳/ky^|Yh,A`Z8,[!f9vŸ=6׻[m2nlMlyYw&L%/J~W{.svwC>ضg>;4t~b1>N uq}PB!B)\v61)hdxLft/L 6aYpL;b2Y']ǝ-Ԧ iU5L5EMtB>縮WU|'Jwf̘C=T* -CB!cb܎=vqG1?v*UԑɔϓYJOs珑}/BϨ]sÍFy'?m( 7TL&YP!b*�ZL)c{Iə CL,fCǝf7+|Ώ;_:ps3ӧ?s_])phud.B1ohB!wB9<�Zk,ĉٟ, @EEE"B!Ɛ�Z!vB[>甕oͿaz<B߁Z!bnCSL2Oŕq]o}F\0 !ٟqԩLQDbl.PB!@k _1]�W8&rĔ T\197E.9;w?PsNSSϊ+!}?sΞ=[)n H&I�-B1]S�V,p j\WcY:VC三D橸#b" q1xm+nemw{ >,[z*B+xx9w\r>9A!b깎 hE,U-ShT.ML 2Oŕm{/qz9zҥ0r|eppc7yRQQ뺅B!ù'*F,V4k:BzTPYY_"ML2Oŕ'Nq7ȇ~8(w?:|ۛ>,[ӧQJs.7(***M!Ắ,B(B1]S�B)m;4<pC!-|Лtgr9\7Թض?N9rD<W"sDLd2sC\?R�%TTx<>^Cyud~zz)Ov|g}kDBQ`ln/^,B!SuU@۶M,i̪HF˪P9x̦%`UrD!<W"sDLj憸>d),~}o>WϳY;sΦM׿7Mf|G)œO>)!m<)--EB! -q\p0 Mw$˲, vm{EX三By*D战d熸>$I�b .Y~ gJ9O<o4�$A@z(B!b@p�DZ* %w?{7Q2Oŕ!]{{;tRVV@4fs㳨n^єlst˿$N կ =LqP^^^!Bq\W� #/%�Fs三[I橸#b"27ĵikk#NcYXٳg-YBX?yRFx/˲hm```�@*B!spz&Jdq<ϣ0TTTPYYYa]X,ƓO> 0*wK,㳟 ZSTTT!BqHɇB!<@744OVFy'y'm7OS (uFk-B!S y*]xՀr,o99S;{1Yt|[j"HuBhR|8g =Dq,BE!Bhs!fCRiM }Q( ˂xLXlcy1=q:Xܹ؋COOϨ�vkM S@~:6mT!V!BN+Z!gZ}v9w! I"qvŚslۚ]! qcq纚c/MGGt0} ="t:OS|ߧ~zJBi<˷WB!S5Zktr+oxtuk)v p3䑏hq]% qcq̱׮�Κ5CiJJJ|}i !ǹB! siҙ̅%S5y̮ϔcy31=q:Xܹ&wŵjmm%NcYhBʅо3Ϡzd2tvvtRi!B1EY$SYI$]N/h0ԣcyk1=q:Xܹ.wŵ .)+++ni&0IJ|zxbz{{I$̜9CB!�@czkJ?!B[|K! qcqܱ&͎ ~<Sl޼yT<xWё_4S!BLM@ka/BVɱu8Nr,\{qm2 ]]]eee[a2---<BOq}}}XEMMM"B!&p-8h\r[LA!5؋kd azBOqƲ, =!B1kB!6J)"@B%NJ}}=EEEB!B!w><u]*++ =z<>fϞ},B!$B! =zz̙3466q-cB! B!p]]]dY�buuuR].޿'gB!$B!A@WW`u,..j! =;ޙ3gp z(B!2$r'mz1( ΍ׅ<\Z|b*<߫F֔1^} ~i (BCC B!С QD\@b}5!HqFJm)Q(WJh5F1UTWYfnG\E$2c0'&q?F;d΋뫙aXDꖇJAq؜Gr﹩rK q-|g``�ZkJKKqÚR O>-!tsa-ZDQQQ#B!._]h :or5t] 9tԣ=i&f5зW9�bPgd6C9uχkVZ%pŲ Ux~Rbbק޾c'|)e"^7o9,pÌ* t3w1X:t nf&ٽC)kK4@29~ʧ{}dYtˬj ZCӴwt<Rtj^z~5bQŢsm*-<w:sBp>8ϼ"S&-XR\س#~k +]Z;N :HDfK1o\d2�҂c駟ˇ?'~Gy[>eN:E?V.B1�:>l'U.Z@Bc)hjtX {\z1*9l彝6A4x�/&?Q V.syb` Ds7-îdB=T2qX 0ZgǮق|ZCuDAC:c(x4 M:I5wo[am{7Eq M8,[;xhce1`h{!8ܻ)J4H5hlΝx4gۃKm+V.sY!Єґ55Coy^qc011yޭpőZkX4m95+>@eK\<_386,lp7;v?+% Sa VZR;ӦO&3z>WU{;3<=:<>cbQŽm8vfLSa br<#H" C$Лz(8{,?gS[0 7o^"B!J.Fhx ]ꮱ#G14NX\N@E~ֲc�"-frՙemmZCąsqqM*h~CP ^~-ͱP1>rf"ipEd) MK xĢ2)U[G~a;3ؖL~uͦ*|ǁC>pئI@֛Rkp(_9&~(0М158Qzz jIMe٨<|'֚XL|<x_?"50?M2F56w-wYT^jtF_rб}(j#R)YS5o)>Db{A`py�x칢Px-kX wr˱>ږ/Ķ`<C1B;p4?c[iM~]&f~as@_Fc%7# 4q;j[|窥FaXќ;ZQuC6rVydw熡i cwۘTrFww7mBiJkllws=oaot:?ybXy[<jjj/pB!ܲ�ZkSzeDB7Ҵ}iC16ڜ8e6:4/rYmNm w#-wG }S@k{}Y5krtR'N,^RZbGqϮQ˖+~f]{;tG ::mvUY3-{BZ<mBlwG7Yv.bȆ% \J->ܟٛ3~eiz``0CC͂&w+lwر+KE-hrXRUaLjƭ6\؊7I ш-Q6?wc`[aJDȩ{klk$<h },63gbTz熡(rϧdK-Msl>αbbysJJ,.v;s줟*+,֮ry}|_Pgu{tVeq>W2YXR?u܅#] lδ,PQ8gGm͊fxLv|&k=/?hSP>UYܝB|*+,V,u/ӣڛ%4ٴw\2l[yRӚ% ]s( 9~1z߭t9PRn سc``k)ŒEsJKCUcq4,]2kM*9u!TʼnysbQEgWm 9i `SYn:^a<EitO&))Vܿ9]E.Msl~^?]y3j"b\ˆSg|>o~~)e \9Z :sG5!;wge[ɈlF.Z~wuygf R)|IY&lܸQ>0B!n]� 2Z<:÷_UO>q'$1U 9|8 B*m/pxi\GŶMW_&Sܿ١_E{=ǢHDQT4to,.*+6>6 I=k\p*'[W.`3/8diyB@28@Q̼x4jB+)|JlV͚ S`v]+":tcP6aZyYweF}�5cڼ;PՑ`A3<pE_vR&TGTj.SILg0JCB~=<6848 #Q67` \.vy-G|J|$Ƣ=!Y'Rv> ԗsMs.ny?}!IWWHcÚ.KUܷ%&pwlŽfT<rjT[Z΋k;>rܿVZb}96%{g G{ D =-br1RIMwoF |QUajyEPC@HQ\1oìj~WW[<xo:7D]cR$S/DB 8|c>̘QeѼ(ƌJJ؊X¥?$֬\f^NsuwEXTF]}�8wwk#TTd{QŊ.ZK]vʒ.}u V,uM O?)-Q,hQx4akWE}2oâ8xȣf9>s|(6oٖ _'}0 Z8zTRR7 O:&N}@BhϞ=yfi#B1 ܺ*-{ۍ-E -ĉD=Ģ\=Yδ�>g|mYBmKod8qʧXģq79vf?ƮYv6UgZb^L?^Rue&Ф3SA` Nm x YOvC[bmtLU$ /2>~`nqx-CB]kBs mÜrEk{@vU5:)Sm(/S]KBD8[!4vcnS>?r3XOYY`5;[JAŀ WG\Nj,Œv=NX<# 6->\:h4W*v˲mgן01\-pؽ<_pcF?{<,yea].oٙͿ[lݑ(x8 u6̰ughDG4ո;/M0}sswgKdqI{z|m `oG-KK,Z{3COf /|*β.[B /"߼c'ղཝeGtC]ѓ }C5sL_Kg_b{6F Q̛cb>aXX:6??϶yx/?.j*/?.E&@З<?}0 ja iYaش.BoWRtu̴lZ1CG=~ ƜF1͑7ZPR^^^!MEEE|k_C)Q!֚9EEEm%vAMM ˖-+pB!$0nh %_tb+!ireCe"6uL0<(|S:6@oPZ5C&klV $T]p &?-! lhn}-wpۤL#}CAD!B|h MsR1,e8>;K&CWfV[TUY:jf0FWw@CMCMDc�S hۊJbAq².�Ԩ�vLIx{xT2#3xCtF/D"j"繢LQRhwH4;ve7-G</p4|Z8\ +)\TV+[ U̫bpf'v?Hh MkO񘢧@j΋Ͻ"}~KgGW| MEk5jm>8ѨʿoA d o!5ͨ((+3D^L LivhjteqB!$<|KU'^a~vY28_;9|_S?ƶϨ"3i"6tGEmz(E*镂dGcw@Z)8q܍p3\9JC s 0s8OܳQ3o%M6]ӫdpp7qJKK =i%O ^~~BqEvŦM*pB!$�:Wez( x(֬t)֫( uv>FC-|_C 0_,#:iȝp<hjPƆ7 rm1ϨJ &MȯpXTWFL[ =!pIKR`nMx\GRix]Y_Hn1nU0c0ލQjfDrt=eٺ#3j!8hqGi-gz7[ 47pMQ\d>b>ZaӺe%޸ m[)<_J } /y;=b+ĆHsls|GΎ `A`Zd܇<Ws^dH5ʂG &4{z8Yn]&}m̝cyC-"{.7';̇NEЇ6٬{B cš\[hfjRJqO,M3. k"]>s(7\.|kΣ=ah }XD?yW=a>8U_qhT>sJEv%I mlۖk R$6~~Bk.ؼy34B![@+]!fNCQQTʴغôŨirk7Ƽ6ztv$R!+*$a1l.^ iL1Ų%.ɔQo)瑈Int`)fٺ3m*Jפip3fAF,gZ̴wqVT?g텥-W"*D&kL|/I1Fc`A@P@:H,uaY>s~. K]xޯpw̙9sy礥)zk qqfkA& W\<GVQJj!3mDNFeS`JN �dK&dӖXkA'9@މlb34G0Y<BeӶI}fOrZUVvw^;gۆ\;q8YmMHlWehNl} JdFKl.`ۚݝϕUtn?!# > R^im?[Nf|}"PLh[jm;/<n{Ee tWʩq!ڷ3ٹcP79o$s.z,]w|hbQ';9iM<|JfN@ϫ&7ͺtDqS΅/s¨eY}mq> lqlĉ { }L}YJJJmyQYYC)q(}yyy-B!ڐSqKӥɰn\F{{,L:/KVD]dm"1iR,\Qmq^9#:D6C\~]&KtZ' miሦRSQiSYe 5ݨ%Na_0QnQ]ca4*h6o3Lǭ8gK/ѩYo)2 3{^e_DWd7/�Mvx?JwmQbP7]]Gn ڋ(qJZ;۔b51k4+\pSg1=tB& E`bNGXS{[q1HCo Ycѧ2 045N4 UQKl܇/5ΠrYNyӄ\x<[X9Ny!x= vδE^%1c.䡤fO NNAjAi7lz}-1.EZj9)ō4);おJTim}ݝmmYN{W˂%qj1uAx;wlw(Ѩ4k/4nSHTԠW SY vاV8l& & \mxkv/~AϞ=k^0Xj?8֭k&i[la 6Lo!B! #ˣth2~휚E^.툳aSXh2</U6]tlkxVt'\]{K���IDAT;-k7ĈDFӣɄ}lcxpSwOzl)pj_vloҿrjH*ˠf�:)DcXqm%-p^gźLWVnaSg{r?w:X6h]VѣzHI1ؾ+ I^nذ)>ZUxPXӫ6`6b[p}: Sw7nd;Vhr~FPjU9H ogҭ "0T~>PbkuӄAJ9N й ,MyMJZ;[Kq(/ۛ _~K-jW>.n%oǷuyJA(Y<J^K/LE..n%KNyM."Q/d§(‘mk:u0r,SC9s΄}6n3xC=, Pgw[V{)ӣI@@ѩIE&h@s`9<JnܬcX;s>C5e61b~g_)g8A;ogҿmmak(.q^mwJcǿ>+甂lu}=kJcRuf8c{ǝx_ibXsc(UUU{^(p n[ԇ#==wY0Xf wØ1cДM6aY hUkQm3c +B!m)pŻSC;KN6e;#\k"L<A"uco*!%"QMe;vY6JnFsnwZ,"JJ@1 3xas4:?  zE`Kٹb{:AHDSU4m@(씦0qGN[W1<U؍8;kp5%TT9zE@A>n;ض^E &Sgw!۫ N铹 "Nٖ#AĩaƟc0I6nn$3OJTTdgd{TجDzu943}8gҹ30ء5kHRLi6ormm~XlY΀k/0l9qn"kl,zt3q'}h?(dp3E~g`Pqs\@z0]';N<wp=#ԐoYb[s|lqޝb9^tc ҄#N�|(n?�eٱYFbSk`>y<(%]%6~3ت˥eG1%mپ_lѬ0OO8XLns /_#5`Ыn]\b(Uf'!.8(b| {}P)Q.WʩhyM[hf̉0<E>., 6nBy "\4^1[#7[x C+A{tsѳ ˆ"y #Av-qSZU(7N>`eYlذ!Ν;կ~h5YYY{z桇O׭[#<w7ވ;<6l~+ڷoc=vOgeee,\#Gү_nB!8 : h6eEjpb6eQ\w4UGuޫAVA89PjSQiןߧH7H[;N"% T7{ $nv 54 :KkY&9 ZeN198HSb5A]opS3\{~,`Z;�\e9}흖 _N.LJacKYh&g *an<EnANJlKlѣ N�rޗxAcT Yu=7^ףDt>T8u+hpDoc~[N-4E( 8uƒ!M~'>\liQù𓞮 ?rMj 6) Akg4_QY zϫHznľlwP7Ǻnqho-#W3IOS2!&R"# ՔWj.P=hk.3g^bd9umDɛ`n  mrN@iMb_L *Ba{$?M8wQTWjlJZCߧ()ٷߪoh/#](jJ] j`~6k? pjyz?t_)H 8XeNap7^gF9G˲()-`6:@<c�up$#j V\=JJJ̸5 #nh67p?%(lܸ~%KFk;;6j~3sLrrrx2dHKNy뭷xꩧxᇹZ9-jʔ)੧bРA-!Bs"g,-v첒5v|0 zDNWUpH\<h:mMP'M\b=Ɩum|,`YP^i7;pGjá$VZfSZVRNb>={g5>88N]샦 ';t4~J#5 qEM_m8tC*ltvd(5v dK<WwLd{7"pKKiqho-#-7tHƶ$c5UUۗXֵ#`ُH\bž4hP}*l*?B"1샕UaiЍ.+!u݊zmhsgٍC u>WSh"M0d~/~?] <.ɓ'7dRvqK(׏g_O8yZsmZ=p|瘦IYYlBWii)=z`-!BqZxZ"aΟ=>􄻱6\c%WiW51M=Op}q}5|䴕>hOS~ܾ:gY7-Į=]: 4#̞!;rOq8bSPu~^`Ho,~s4Rm'>+zstiN{ݡ7fss2:M4 Wd~?5\Cnnn5Ck̈́ :ǪC<|k_KHaÆzO:^zH$RNcǎ-*-bΜ9lٲ뮻NB!h$E"mIdM:YʶݺyE4&ʉ ;-^zx`8  <y2.5\s5gd׾aKD5k硇bY_~P(ZWJqfΜ=ҫrJoӻwo&LB!@BB(QU ,˲FMՠ"׵ue97 ZO׾5z!u8f~O}FkO>˂裏عs'_җ$Y!�EK)zI?#{HdAm�ZO<͕W^/K muo~իm;v`- ̦Mx袋[9B!I�Z!4wYВ| <~1c$<G"mgLt,_/}KxޖnB!8FB!8md?|g?>eF=o<>SпnB!8>CH͖'}pz~l=/\h%(++D YЛ7o瞣[ntM\2nB!D[v\h? 8B?I_C%z̚-ϧFII Xn]uȂ;wnK7D"۷|;deetB!q:�R \r�2l/OӃc!}qjő57 ZOH$/ʕ+|NmYfQZZҫqM<ٳgs73tЖnB!8#Z)r-hz؉ }pz~l=/\{q$GʂOkoomG~7ndɒ%-*'իyW9쳹[eB!8MsA5^6eRNʰ_fI_|CuGȂ3g%%% d?|+W_& u38Ǹp8̸q-Jm%=={ԖnB!8A)�B)igy1l).1[zDrNnLӕ˓K zH_YГ'O %[nO<|NPJd,Y[zK(^_߿$B!Nʀ6MC#bYY#gx<d'}pz~l=/\Gyʂ˶mVZEYYA,˪w1Rj{=Ff0/" ,f̘1-$!BqW�0 \.7J\.RScc'N00 ta&җ'A8s5E-'a\wu?[k. ((( J'-Zĉ[z֚7|_|+xB!8 s�'2ʹ̲$qRᦕ<Nҏřh^4}53f~Lyy9ms 4vZ|tؑ; b[6lgMݻ];wQSSC("nvodfep-zGe1bpv|>_K7I!B.qX^N[ޡPG zH_abZkس}UUλ _xf*,:LzIiƢ6[VW R(JIWs0}; `]ܹݻvcFРj?*owz(E,ek2e1]-; 7bE!5]08CI_<Ӄc!}qfvi{f&+ɽf+ Qέ5'miJA4bS?L^6-,&3χk~rSOŜôF)Ům,Geٗ3fsVv2mt5B!GH4u\:B!Nh4 ȵeT6>Y`^':IRTĘSB. ڑ$_) ONzߝu[)!-<p Y!s�R nmB!8h4FMu8T򯓵J(mF9h}VJa[w}|B!Z56E$Ԕ�^hJ !d6H6~{z-OB!a3MvF)+�hI!R ڋ^4%,B!aІarQc6ZK�Z!G"4 L 41 CB!B vtD: !BVC־MB!B#M8<@B!ZB!59b�: }/B!B!2ZB!B!B!NO΀NH<B!hiui& !B!&v/B:(LCۭH H(B!6�Fk4AQ&o& !Bԥq4)t�CB!B 4N |2ȠB!hJ4%p8M Ahq:H׿SO^B!0КHbZŁ0dB!BbJ9W, )q&ڦ#Zh kqNrGZ.S]]E$!##4QJa6aS׶-ڒz.4>ttRXV*@ #h!BQOh5ք6M|B!DS2,z4΂VJQ^^/ߍ/"\heԨsθn0 VXܹ6l_̡Lּ+,\87w`+Ӧǹ^С#F)E4r7+(,{AUU%eN]>| ]t;qb{Xh⮻_L_:wĉ`,kB eűm:B!hݚ.& Δ!!B}8->(⣏G3q⥸no? pK/ZRuF} 3,";;Co'B8JΝۙ>=6lp3>/}V~}�Ӧeͣj:wm}q.l۶:mzU?"=zs|˘9s* /svK,˾}{+IMMe۶-LcN`ض贉`B!hPZpB!>|ӏ4M éy ywn_Am(Œ9t[mX`#/4qJ)^wy/]m[|>q>2 _ asϟ ?+ZC$"==/}^lH݅^Ɲw~P(ҥ xs} 085 E<n555,Z4~oiX<FZZ^:1 LgZkRRR Bde[Sf0 Z56;;޾ݜ6m].WB!8@C'snƝwo !s ?x<o-vuu_{Nggb„K8zm޼P\4 Έ�'0rR-[HUU%3f,rf,[l߾j:ug tҽWS 3h>6\0QJc6͛Ma.)(؊a(rx,^9@ tOBzz&W\qٹM�9(K~~W /=ӧGp\T矲~j8;wetҝ={vٱcyyy1nEg0cƇ1 F~~W t>{+W.c3nE 0j2UtOٸq=!3cT֭[͐!g3tzvE,eٲE|Rh߾#7=`k|ƍ2l,depᅗңG3bB!DhtAK75fp~>BaXZmɇ-0L%Qsؖlmyg6L'ANh@'̹h[n7^"?+_ʝd6şPn8io[4M{M^}_ҥ 1\|lڴ922J$O1w'|?_QzZkJKKصkOr \n7a~yY@DڵLRc)//CNtҝ]Ab7o 33h4zv zcyٶm3P0x?3ر3^>g{{˲Yv%p,_AbeÆ5\{8v<ӦR֭Yt!LVZҥ 0`\p1bYqIuu%;v&՛vܸpܼϓE^^G/ǧblڴ/t ~?|2kMNN; B !BD㟅8ZJA|C=t`vK]J)E,)g|U]{feGB6UшnAZo  ؄5hD;ZWLHoO� ^}v-|.]'嗟=P^^$?1cb6oC| 6?7|#`n2xLGu)8ϳh? =z^{ݻwp}/?7lٲ۶ˈF#<ܟP ~75֭[Ezz&? Rz}mӎXhgOnkaӟ&s}ʏ~tC OZZiGyb(e`Yqv7q?L oV\UW}1O9Q\qŗxſs_c 7R[71ytދ~'udE</xW0aȐzx^2sT6o@nnB!8  >_1Onv`D^,MculHȦ(F,*'2mĢłn B#:SVZEG9v_C0Xz9ZcٲE\qNu&mĈPRRLqdm0X(-=@EE9:tfMLvڳaJKУGo.jΝɆ k"++[yM0 #ЫW?lRcG+W.c Ltn4y�^7))iu 3>4q\]Zz}b1.]R* X,FFF&[n$R^dM崴dLȑҵSzذL_0 HMMvfnk\.gJ)|>?)))Xs1an**++{ѣ #FСY~5奀2ftC'())>cB!h)>n>sHYÇz(&oZk*$Ţr OmY!- x,TWxvhmN`0ȤIWѮ]o>` _ٷoXQX;˲iǙ7,<9M,cz9b}>?u`ݺ!j Xh4i2nELtim;۪h4J}xX`Jԭ۞(s4RTWWQRRLn=ڦX,￉aq染Ӯ@ 5w`ܲ~{twJ4]o1Mvv.X*{�aoB!mO!ϝ:-q:v0yzжFF[ؖNh XE,z8щ(:Gt'b= 6U q0j?1]'R28A=zswΚ5_0}=Q0MW]ezRN=@ pm)S{;++7Xm[5x<|>۶,T2xk<} d,?"@*n:,l['MJJ*P8Bs)L?zy^Ddm& ՖG;B!ĉЦЉ '+n(UWb�Os%}'Gc6}|_F"r0PHm'Tz(4)F+޵@, eEdPr o>@AZkzMz|˷)S^o߁t?ƍڛEk rztڃX,8qx<., jj\6 شi=[nh:Yr)_~96?R\.**ʉŢf*uŢZwy &N z'Lp7}C)F-"0~Sqr[a:uЬ]1c2سЮ]233$B!D k�t"da-q2Q " [b$9V$NZIQ!d,8h ~R9{B[a[;}։.r<@b9=rͲd0ٯBxT['0XYV} vʱgB냁ߒeYFDŽ 0sT.Z&NS'ɨQcDB,]'qW3vzJHQ^֯_׾v/:~6eTT3sT8&]I zZ;LfM%̶mF˰a#3|fGŋ׫\,SO׮iڋtБΝ2rMX|1<8~j _A\..*-[?4۷o}lٲ۠- Sl-8X:we�8^x9i&mAØ:m\.;vfo/m{AN!B<>CxzٷЭIn.m֬ѣeF5687 y*mS!Vw459ˮqJJ-c1'm!^:74CJJ}u-> @�5" 90<>8]hq\###3Yqu7u&.˸qqmwә_M^^Gl&77o} ̛7xw!e [ؾ}+h\sK0RRRcl&в4M.]ȦM&'X i׮}m&2x<F̙b&]v ÇFw8x<^:PYYβeh߾#]2l\.m3`!|e>` i8QyIvy.<zkG |LV;/ba`ۚ}/‡/, E*{}?~vp�wq/\ruO]|d^yyIIIA!B\: ι%ע$»<"Ch[vNf5d}[ )?le,YZöa^Ɲe^W4rHT0evӨ^!'(SgWla4iX~2j:~|bvK[G$9npIfA**Fڊkbŏ>0r辘-Ʋk@?ӥ#5Ev#%{Mlۆ=]w2y b|ﻙn 3g1M0 ѫ憸WtAhtz@4d00̶QTi؁cK&0zA6!%(99F#;�Э{\.w#}uLANvyjpm͜M0ptvYEEEn4TV(-=@ee))g *e())& IZZ>Pk_ "S/}8JAuEy껺馭* 8ΤfX=Q]]y�i R9vEpH$Buu%ix(//"<YYn]x 1 ׇvזW'm;/dqyy,)HII%PUUIJJ*>q**)jIOL&bWH$&==lLpB!23NfK!jjIK�F׮(ŻC]po?eN2<S 4g(Bq,ˢ91ϿӠn.8mq><B8-*.8K.>[aX5ۮ 52:?xZCE x} ӄh Q=ӄTE\CAzBQxߠD SӶ!} Àx , b-7M'Hh-y7_<hZEui|\~Y@-];Ҕ:'ii}MVa(lvacv^۶l k?(HM5kgbN�W,P]msi\qy /RU%8RfnT* 3*T[u6q D(d&99u١睺&yyh߾c26>wh4w^[ >?Z$S.ߑKT3ϗkYded'2L>֚Դd&l99,y񒛛Wo:'ksξUoDv׮Sc|~:unuOlx< %B!Nc @S"#;`OB'z9̃a@|c߬)IyHPZk58K,hf&7`PM^EEqVѧ=xj3G/hO„#\ ]s\|f([ лsGy-عۢG7X:nY̞!m5508d0\)X.\0OFFѿDPi]Bۆr~_zѕtwUdf\~Y޽gr.th qf}bpw $GZn 1K4 +VDCHO755*NMis;ǿ�!-߫ pERS bضfCzUT300*j窮[ňiwE�ZSyp;cf Es4|dcC6i_iM׉> 7^h>mԮB!D[sLKG6d03]{,6 >5S*}iK9Pt"ј&*kIu&twѣ ˙Gz<AOKQD3 ssE>|>E(�E.&> rm n]\6  %έ:dXc^ O1dN&LmE5z#׵PJvU"fd __O~TUD"JGy+R) p72HM54س'uQlMЯ[nN%;iA"܁5a@wAh`׮8 n%pXI˄6 dR dv> Lgpք8ٔ-~,[;Zkqع3N8|wh ͊s+,7||oI-N֌yyyݻh!h~B!ڌc @+E6 qzA9#�  QT|tùnCӠ3:v0$Ѽ?-Ğ}<MZJJmʏaٹ;2|>qf͍ /ҽ1#<l)cשqK/VGDc!dt7]haciıSS9/<z TSVf1,Z暫SwӶ&v5mYe~" Wr9s8gJKTV̞j]ps?1YE3Z#6պgT5NЛz=Pmþ"RB+}TmM#DOC\0l/CxD4ټ%85{]ڇ{n۴tؙN-Ȳ, ̄B!NcXzYd@!0ĸßhb1ϧ6MfAQŖ8&T XWTVku14a1v:)˾EVAvY]=/L~.'l''CN&n7tl+ Y58TkRRb1}z 6Ç{9\˖EX0{У]BѨ3 ˥sTu, rdp%sOۖ&|Fn] Wqi_='e_Il0^uQ, F*Q,[0a(S=sPZja$/x<NFP(QKQ("mm;Nu`/},SxGǝ;"nE,|SS LB xOJ3eAMm8CǦ Өzyx_lkV6WǢm-O!B15sSAk >k`Ɋ(Ē*vg vfVE9{} &v5_exD+īX(D5^"5r4 u2iY Y<tDOnS<=XWؤ(<@N_STW:55NV QJ-R zps8?^rmƏ3xTVڼn %͊/",YfۧqiپfKEd`oKoBk'؛'L.]\3IKWp_(F 2tƒ)JM1o}Q#}&,Ya0F߽K%Ѽ*$ǭibzbgq kgrB"c`Y^Ǝѱ l+g!mkD6 q~V0mzs1<G4gSl3 {8(cHYf(s> QRrz\gW1jq{,YC=m*�-, M#B8�44:pb.` h ztL';oӽI&=ͅףx-#N C RR pb֎ք#Բa^6r qөI$ٶ׀#-VT,XUdgzslY5̜Q+fMbJ0J h Ƃ!M~ üz&;ˤfӦwĹkde,\7 5{_ZnO? i@J,Ndվ{w7W#6q۾֪d۶j/Nr^nRS zt^CM<n'4}{]Zl+3z[oM#% j?UΝ?#hkҫ1 /ϤgO7;P bqMJcG)sWi.)AS <=ݠk�:REOBqfmr222x<-!Bf9�4B_2dzG>2 lضkI.!ͪ1/2\/%= &۶ n]"r&;`�J@N�ܦ"7h5AͶ1:y6MjV2}:59,/sdve#t[7zˍa8次^W/76xJ֭RS:ҥanQUeaeKpXs 3f8]ue )+y*֭|ysln`P3hkr~ %%zVUEE5pnr.Z&ddC Sܦ.2[xqs×Rikqc7T[2bIH (-;5[oNO7cSXXpߩf(N pD?=z4 ö0ݻi 嬳|YHТ͈D4KT?WѬ\m !hEAjn)!B6`Ъk\"xnņv =E.NQE$@D5b^u1I5c;Y<t3Q rMcTUi{#5ln1,MFZ'>=o{u)ddXb(kFl3uצMTWC{tq++m$5)ٲ5׫<CqŁ Oؼ45۷=΁K<_vY;Neak~Eٿ@ ΘT)y2AU6N c|E-[b[Sk];Pȹ0ӧٝ۷|AjBQdd;5Ag rAeMVA|WmwKT;ȧe;~ L8 BΝAZ1t6X!ıb(B3 @AGkMUm+$xE"N&*Mqf 3zy&;DvCDjϗDu"+@)X,anr�re͚ 1-SʦZcR8AΝLjO4kIa?[g͚G;/L^nFtisB9ZC0h+l0sV[c{-\fghTcY@ w²A''>Uzԧ�Y! F;`Ю׫N{S"Q+:% (<(5dfaSv:8MRo#)+s%4LE0hcv:W^HZuKZ(|�F TYif@{{rJvkܯ;2F;~!hضa-B6yD7 "S_~S V7kКdPzIM5yU65AM4/VGٴ%ۭmA><c J6,8wZZ lv!#q]hqכ-)@AN-)ogwLBFAnFWiSڠ[h_[7LR]$q y7m9g GSSIK5Jn0DtwU RM\l/ SRj1zuNկ2ċRP=Nщ5.mGӃ[p  }1Vmxe 9%x-q r:X,]a^U ,\juwh ,mQ] FkT'`Պ6B"e ɑBf�tsi UNHȚ,j]]]9X2Z'ummFdVmby^un kX%k],]fl<ĉ~F𑒢l-1^}L~5=(55NV߯ػ/NuMN..Ov%ab1]othm[+Y~CE0P `۰zuۣsgil><LN3 Z?Nu㮉rN�01>5r.ZTV: +`Y0`></)j<gÕ+#|yiEEc-ĉUS STѴf淪\ȱ{c&hX޵Xn:VD} -t!ę#~/ !h�498tM܌mYسb([ 2i֯2 ۶ݩ7yJ5WD@ɡvg}{>_InLS}{"NMhRS HI1ش9J$N  PP$MnbHլ\`Z4Gǎ. 1 u[ kkt0`99WDطJS- RRqU)(3gٻ`K#Սn[W4;Of0W^M4σϧxjTv}P>7X6g{il>GJ@ѧhTSPs)NJ޿1M\ǻ̃agXX|Y(mǗ.8TUU i׮]K7E!Z4�(Կ5pz,^äTFp.]!g%.wuyLn%> Nn pe:uraYp)̞d8>b6Eŝ!"B(v4g _4akjyL&N3r/جX&-pb14J[5}'9c|Z(N8Yxσ֚yV˂rpDgcQMiM$;,�d]ivޟteMUM8deΘ0G{Pe3sVYk˯hmjN*r_]78]~8a 5ߪ& a@Vv3sfU#'8s%.?S}屜FOzXTک[pY/!D[R\\ @nnnK7E!$�}5hjcq8f2 ᳹!><dw/7F:[:\ɒ '1Ku?H76@zmHK3T&SYev9A47|9. 5iiч,R !>Kӟ&{ |I ɚ燛gYş\_9X+0x)WS}3mu3mu^a8iB8y*\n'lμ{BXEES_])6sμ dihYsDt=UU6β,^O99&MiR TSģVm\0]6 t'^0LJ섬lj+h_'2?=sPJ j9 P :j�RSwO!5�1hM F8l/z 0kgru eŊMa)vuѵkӻa@fAfFh:ac&;7R@r ӅN;WO7YYf2sW 8`5D"Nk_P9tZۆi U k[6[o{nM򚚃 4P ?MJ9 S B< r[h!Tm[Χ4.?wa(J9Ͷ:=ؖpk qr8L'0 ض];[^8h  a_ h @X0{n�:uқE!$�}JK3)\lN]yV%KFX<,e >`둲4`?\ێ^[ʶG ˃?q{V;Qj? RtyPxYӍR.}R`s I\!̞C0Dk͠A8h $۶/ { WY?CѪ M;b16nHZZYYY-IB!MЧ!8b𹮣V:u:EJmc!Zuk`.KaڶV-`b(e(e)pE);,>gJEEla/<Yjk)ip~絚O8Zz ݻ.][zs!B4BB+S BPM Vruz)l mI26xpTQ:MEk ),,dҤIB!D"h! ֆll[:[7q=tk.8k!B @ !%Q"smBqzZf J)zMB!8*RMV!B!ZP(Ċ+֭]ti!Bf@k@Ѩ 45uwm֚cnnhveֶnlٲK.ԖnB!Qi2�5L|SBkMZ!aHK5�qM$ks`.tm9abґn222(,,D)EEEm J !Z͛F 6"BqP|�aJ bڪvσRNòR䎁JiK!Dۣ¶-hK7MH***bxޖneY̟?4B!8j @+ PH:<!DkfيH[6Zb݄a @ ъٳE1frss[9B!GWJB!laйsg @)9p@K7KQǢE(++cرB!8jRO! ֫W/��%%%,^$UUUŌ3֭n!B @ !B @ΝZYd p%�V^֭[+n!B @ !B233:t(Zk `ڵٳ%ɓ'Ӿ}{ƌB!8f㟅Ckc!B㡔j81LcTWWSZZʬYիWK7M3ڬYXl<�=zh!B@kB!8gT8qFYp!ZkNرc4hPK7M3RYYSLk׮L8#Bq\+�ƶ-r2(B%C)%;N4. (;w7/ !N3gsN|AZ9B!Љ@۶q\r(B*$}M4s2{l `̞=+&eռˌ;K.#Bq܎yB5emB!8e;,˒_'Xjj*r �Ay֬YMQRR“O>;;BqZ8�tm1ǰB!a`>FM7ݔmǎwcƍ-4!N{H^z[r]wѿnB! q\жmtBqJʼn⦛nbhQJfz)ve6:v^xaK7I!9� !%'##C&v[x1=dB qXŔ)S?ȑ#x<-,!BKpW!T"'W~@Ϟ=,^zݺu-<!Ne[o30h ~RSS[YB!' g:m!aKn8kHd [<x0=O=ׯ0 ֬Y?΃>СC1M)Duh'? ]tif !Bp:ڶm,""z$!@Bq 4Pnհ+ZJֶ%'Cd~x4SjAN F ]l& z1M˲()-4:@<c�unt9=tXn?8k֬0 dggsM7կ~M͉bB!ڴIBr=TaMɲ=y4a*2S;]]Mtvt(J"'] P;ӭ8p =XjJ)JJJxرcwy'}if fB!^z%2x`~KY!5'?y>Ƕ-~uu˲p(91Bbc%B9%QG\iM6=ؕ|>X hrkb\. hЏZkBp{cl6�dffaf93Iv>|8x۷Ű,M6zj\.]vv„8۷\z<tܹ%Bq̚s%BbEBj:E"zڊ;e7$|) - u|[].]/s `ƍ<,]oArOL!n:?yfs7ZYB!'!D |-6Zh ZѴF^~ 2/Zx<N(bԩ,ZoonB$aƌ<sOSƏ֕B!ęՖਮf޽4Y,Kf✌?#%%%\FzǏk0#-Gqzk=2ږ6LٸT/Ur�,zFR+7hYJ):tqz QJ Xj˖-ömڷo/3ڮ]xy8p ?=zOBqhWŨƪs/s6k7ok7<)m\p!]w~iر믿B!`$ 9Yv'h9B!AVV_~رcx<ɋ+W䷿-?я3gp+)Ř={6??>wu>(l !Br"vԩg?c�dggӵkWRSS5p8̖-[())9)mf˖-TVV6!??;b&p{ ~?GZB!Dka&g}6կ={6o7n0 8˗/g˖-\tE\wu 0@Ӛ֚;w2e}?ȑ#ev!BNi�:c6[laڴi|N>կ~믿zjD"x<5u:|c?GQxwؑ߸\.<,X�h4 �m6h`a$-&o1nLbzz%DprB!N : ;ôi())A)Eee%o}&Lk@8-[o 曹馛B!x$�]ZZ믿΢EF 8[o.]/2yd0O<ӦM?!_|1ַGk͂ x7ٽ{7999\wuMfIϛ77|'5k7۷or>ٳgs}ѽ{Z??k1c?>}0f|I6l؀R~\r%|Xٳyw)**C\x\qx^ ߿?,^t.2d]jz->ӧr C`ƌ̙3K/O>דˍ7%C!'\^w˥^{ǜ9s8p�J)JJJ<y2s9)۷ ā8 -⥗^b >;3!Con!BNA j~#PQQeY<3u]޽mJkZ|9(**@mƫJ4eݺu|;hA~=êUe=& ?~ +H~m>C߾}  ̜9x<NEEXX,FYY555hy嗹x, rw3$+B$a̙|_HwÚ5k<q,_%Ke֬Yb1&OwҥKOv ! e&G?O>$_җHOOOޙD{㷿-ͣ긗;}t~_nݺ aY+WGg?xGy_ :TB!Nz;x뭷a|GTWWFo~qrPJ%KOTVV5 w555'?w;^`w޽;ٳ'ڵcȐ!̚5o}[m6,YNN.e|| .'}߿?nݺOsN�ݻOǎ׿)..^[n0 B;vg%??e˖q 7r׳pB{9n&~_׿u4s9<cosw3}tFՒB!Ns@t޽;v,SNeҥTTT DϘ1: . &}*))aY~~&3e>3RRR۸+o !B:'=�FVVK.eʔ)3.k&u(z̆am6V\ɝwɅ^.]PPPa,X_]ΠW^y%< 7ndĈ|b1J�>36mڔl6={ /L?d޼y<S4Xg0z[JuW^ͮ]xG1b�fϞ=dggc6n뮻={0tPΝ; B̝;P(yǁؿ?۷o߾̟?䶿`ܸqo߾zR TqQ7xchR] B|>'NdȑX3gpdiJ>S,X{ǵ^\@VVVǮXd [l4M֬YO?~3:tҫ/N3;v`ڴi|G�|_.[n-4!BVyG~O `ȑ|_媫wbԉxII ZkzUdpUkmL2x<έJ^^^/2?3{l Œ32dguX)So$xkqơ" /cY7x#Mwc~LӤwԩS2[k} %%(%%%A{d5�'>�. ߏeYZSUZA4!-;2 mDָ<nn7hnfTjZ۔D^r23P{Pk4r1AҸ 8sشiSцa$$2KG_L~[':2o<pr%K49VG#x6m555\ve|_B!D3�az\tE,_ 2eL4'ہ@�۶ Zk"Hr>˲袋СSL;2=`�F'|¸qX|9.o|2222ph, ۶_[-RRR,z۶M4%k*8l&Tyzm(0 GnnnrJYK)E?}lZK)/.a[Żͦ5n4{䣔@f (DR.[wP [kzucO~<lQ@fz::'Ex< <p540n:6l|kݻwJ [laɒ%~hyHMM{MVhDQ6nȌ3?>Ռ7k4B!Nw… 1b_~9_~9C ogL4 0mp8ZkuFǎ9s&7ر#�:ӧOG?a`]v~;EEE<cՋpW]uկi\r%on֚@ -¨QyGѣ{nQJQSS]د_?~?}7tiiiضͳ>yGxa 45555|1cF[`'Sϳv Piaе_OL|)&aou3Ϥ4ysMVDQJ+*Mx�ǃ'tq˪LHfSli۶zq*+I *}&855 W_ʹiXt)q֔0e>S ĸq?~|K.D 7sw41`%K0}t.]J K.a„ GB! �tEE?Oh߾=s+2h �:vH$'npNmۦSNy<{\uUҳg�z999n㡇"??> /?r-G)E=o~^~eRSSD:o_n>|+<sw}L07r|'#ms3l0}Q ߿?K.??W\qH�A6Da8| ol.`Sqyt ]{Y v³?=E;pşhWbռ%]6$>W'B<'0s=(0jb~|{j s�kN]ont{yk,Z;]B Пfalٹ{%pw^{M`wS,&qqNOq1M!C0h Xt)ӦMcݺuDQ à9s[o1zh&MDvv6gƶ^|E~?za_|rƳB! p"/K?Enn.O<D2x„ u]|<\|dffq|}a6/K,rqӟvQTTD~~>3p?}OJn8ټy3W^yeotܙd}Q}QyoӹsロBz3f ?0)S0k,^/_=?0~Wo9@&O:w3<c= /a~�NΝ;'8'x:u:-<]� :w8= :l|) \?Ȝ_KV^w{"2X:s>d`[p4wq=7z zج X4idlL~t/NRoP}Ϻ[cVnܲ+9p*g.7EkSSֱc;W1"=%֚p4JymƶO8e]T7hJ֬Ӈ~st\{X[[_0 zE^4isaܹ]6Y'nySҭ[76ndJ)0?<\-ڱc3fO?e߾}dffr뭷JY!QUgmcYX"#@Y#RTT@^^999^D"&??P(DUUn)3w^JKKIKK#///b8p`3m~,ˢ}\."wy'+W?K.Pp22333Hab`lJKKz'䀀XB"///y[hcZSZZm$wMM {! C(VUUQ]]]oٶMqqq6 !NcQp+!;FSI%ei�s2w>x^?%LoTOС[g~5_a<_{uŊ[*Me-+98X,tp{ضN""Qls.i4Mx^f#жN<>ĬV5i&\t{(0.!nz3܍OٸS].xŗpD8ޝwǓ1 +Wrnd YW_C) % ȋbqi&3D[5{?wxۉ[V2S;׃l1 ˖ǏuwXZ)';?qy(\d8Zۯ?EԺl& z1M˲()-4:@<c�unt9=$Np8̖-[xw(++#׻XҜߡ;~1jԨ^- A-[ƢE7oeee >k!C-eB!9_>fz^vjjjQMlNNֆN0 :$7̙3y7>}:?`.N:%߾} ##A[uhFEcQJ5؃3aS%DHKKk=kӠ`^uY%Yl' �,s2wn޼?~0 ۹==H0/n}KVqZfr>{{:{HLg%}ɸdOߚΆGctߋ 7^A[}c(Sy3sIzN&6il_e(z ˄/_F]PbY9w1C 8P-wt>ʊJἫ.[U}�P qyea痙F[:vdX~?9N x"ϟϴ)"}_41C4ءX 0.:gsynd"| q ׏R&1 V"3w/n2zw"|:_YjSNe˖-f à~~k.VZ̙3e6?|ƌÈ#-D!BS31Hߒ%Kͽ+Y BVtw$C;r;'C;R2HL'-+~֦mtՍ'f3k\al(el?f{3E['h&T=ŋz`e5e?^"5A5Afƭ<qOy^?}Pm'iqxfψضfΔi?f٬ωb,5~}Vu\O%/'{ʢ]VVy9ojKoضeZ3sh}Xͳ'?EVFyg'cΒ% 4g{9o_ZJ8[kjB!*+TTUO3; )O/oQݬT!4MM7ēO>o~FyTa~zq6nҫ$N-[_W~z)WG~0n8 > !B$gHBn'?$###YB!Z+5TϜ2' $#'A�qөS^�p_pMUi9J-1 RUV?C-d~חsxbߛyW^w)a9,9PM};Xן'^7W~,VoȄSg.w0 lby#ꏿEzv&x#(zva[0/1l崪[à޽ԖC:9jI Ի,^́r(~UvOGtau|?/9g әx ?}uuhyvd{9ޞ5opiiqWWosJL[3gqWƒw܎a+N{қ^2dXkk֬ᩧnv)66v^r% 4/Ç'ǎB!'UJ5(!Rܬ&zM W EUY%OS<>/x45Yfƭl]Qß`혦IaYhleiZ7#0j{DerPJqf2/]FJSn›dΛSY`95�Skhߵ3Y5o)撯^voގaҏv>m�48X({1b8K֬@y9=P8Ė;IM 0O\Iс�RP+Vʠ^عw/�kW.hWb->֚iâիIKIiUclܸz0 ŋ3ӟTϟOUU=z[naҤIt99>B!85Θ�BUZ9vݾ_#7NFnw)˸Sq +gyl^69`^$!s{nۼ\}z_2z@, nڙ68nR3Ѷ2%cq>}k+,L)T]CJF* zplqbi)LKc߁bB0&C{MUM �5pGQS\Vy<YC;Ul":Z9Fc1J*ʩO?|mʫ-`BHe1w\1z1 O?lo6:ֆh[vYpa2yС,B H�Z!TYis6'8 >JA5nznEiJa*Yxh}\q X,CA(|5ƏaulXy<Cї]PNM|?j,v,ˢ oQo0AbL.*] V<Sn裨 ۖɮ}l2wDv>^/}+sYX>^l,~pK{5 '@No6oTwh]}i)),N[61{'hm]v,Λ`M<ѫWMJ-_Βŋ|ӻwy;f;!B4E&mRx,N$&%#T0,)㍧ԣ /moS&>#v$]Uet؛v9ض֕ٶfuh-^Ea8懲{Eԇ}'l^1G)mD %=ivBQg5غj#&K -Aַ֚νK I-f/(ܶνt74i6MNs<v߽=xT9o0<n7Xϖ.c޽ ӧ@~ݻjFә8j(.-2MLP ք"a ү{wޛ=08z x(mm׏RT-b:b=]fpZ E=Ibۚ7lr*+=f�Æ #=-uהk/^)-B! @ !D[ ot<.˜=i)\."060O/2gT^{+]j Nԏv-֌x,/<oNk'1\xU <3TVgy#߿#y9\q Sֿ7dwhG,g^| cnscb h 7^Ŷ5vh5]db6CƎ"mɈkjQ'HZ3sBb8xJ5pEqǵנQqW pvlھ.=+/�Q Lٳy7s˕WԹs ?aJOʵ'rĉ>m=4m#oN8U]NwOϾ/; $%eY˱l+eN$ۉs,'Q>'Oljȶ$KvٴdH$E``g`�6$tWvUmO^ݭ|y ݿebv etl#=54tW~zxrW;o'ݽm'ɩ> C:ד$h��D� �oajSNЎZeZu*\~ڱGgeU=k?/4T\/WGK:u^sZsF}7?,o>/&2dJkmTuc~SwWY>b5 塻U,ȯ|@;|^1mz|?E_#ÐZ븊Ģmnov(ϓ ßMK2MKkڨo(LBy y<qBBA}#l[- 8!M/>$r]Wձm}^̳zg3߯B~F8ڰA?1)SrGk_ӊN=|]}VߔeY ;+}U[�o i2-c[i.���itK|u8 jŅ.>)_0BA#JīEpNu=UE swG=gT/ϓ&56>)6m]q]Ojj:p(DJe+_Mhv+5>1bQu"H$tŘcc1ձ+ѵƐL&+u +Ţѱ cQ%Us')hl|Re:S0`_u̫T,έ"1L^yT:3Sy9  * hoirGS>j. kl|R˖{,Xtsꌪ1%{:[Ўt2na]ўwڱGlnicE*-�'MgMYs1>4*ӲIȴ,9ŢF59:@8dcUы CS*}9QTU2^*<|_��E IDAT.yTT/'41<I &Sf:tZjY7j F4=1pUD5 u DBٓ23DA?6rG9|>>7?R 5N_я^x_PĜjpe) )Z\rMP:!MJTUVAۖy*WU$H(T>#$%.ȆjhlLlV 55 B2$OOpPkjdgض+Vʰu]iYuu8o$$utvϻ]፳Q;40Ip2MC4p=_���,zSRT*ШLӐaZzV,,g }G͕eieZ^&GjYZud8*u庞j uzUUg+ M&}ZU'.}y8yF]08W^=t&+O,Ƶ+XԞGuLOLW-ڼaU90]\p qwV4"lO.+s2MC'X֥u'Okcr\W) kP7:7BQ/أqY3 OzBc.tlX-q¶ݚNˋY~Xj-WA&'kA-[!4kAa�4h tiu7-h256>SgS[cZ>-ݸZ_ܥï rG񚤖lX ߡkVFU$aiYi/<OeQmMf4<Œ k/>yΞg--QWڹ*^1G3 ՗i9KOoY=gHx4ZEZ֦K<R_W /YѓmzB_<f>ʕUH9UZV29$ţQ%ʟ����xgxy>!ݶijkQﰪ15hz:+ iU2-S׫{6Dtc;:6)TW؄^{X6_I|<{(4uOGl؄v9={6˲,GUWS-q}2MCݵIҫ{սU_T*SZKKw>x,U˻dcƨQ(wN<LWp?zzjjinБ:p*u7vvPMuZjR^y;Si^}-a<7jrjZ5hkh/}|N> ^D}cbi֭^|bg&Ӟ}.9uF몳YtHN>MWN}kcNĵzEU>!м֮]w_>[~m]׽7 .0 -n3Ͻ3gm;纊TG]L K%xނ_q ɻwk <]mܽeﺮ6ZWlۇAUbV%PZ}j����޹*@WWgV,$mڰJO>NWC}j YTu l6;hrjb�=:.e)ұ86oXdB5 OdMM =ZmZRe)YW8Դ\ϓRUĤV.*kV.QsS+u+vj=T$Vo9%bUZf[HHGtY-jW:WihxT[6zz\ﳹzΩ^W.^ #:u:ښ49R$u+WZCc:q B)?'UbT]A]Wq\9!u糮ztaN0M-je]=?ƺW ŢSloe],S`@=56>`{~`H}gΫX(V|aNɩilۯz67bigR}brJ}ڤx,3.Wwu(0O8:{/ P,*RwGkEK&Ӊ56>`0 >ƙ*:}n@l^hXݝ-N%Iⱨ\88o!\nx\53}^����T�zrrZBA7pPXT#*I&t]dr Ξ`0D>GãJVeF'&:v'W)ΨA'zhxdLiA_J&J$bzCJedB'Tno`MXOr:p8woQ"^JeTIhpxL\^ݝjkm,u]l[i*;7ʴLٶ_#cW=7byrjZT._Pu"V,Ԇ+]XT\(/96LVGV T*锺;[e,wݾ^il6BQ00 zq2 CՉ>L6WjaJgɶW5JFC#c:yꬶ޽E!8tBp\U|y:zRM:sZ;]{j|rJwl^{Eڵ砒¡:1fIҮT9&Jgtl&Rڲqku܀^ڱGߧxJ'N!m{*>$:uuv[孭Tس�����`T<ds2 Б$Yh$q9#'ϧ3gQR-(+˗v0Ka$Ӳ! 4 eye\SOXUDS);;Ү6I,RuJai<84#{Xd\l^\[׶<O|AHx1 |V9Ui(P,.YLΜІ+SC^<7L6l.=}ǫJ A<qݱel_xU=.tcO>RPT:#61s>_GefEǥdYv%c /.u]6Fu5Ng_AmXBxT]|j t܀m¡ΜW6z4<O6QWg_ӡ#=JJul֭Y5+ȓkc~{U4lV4օ=.>vRwݶ^a(*: ������X<okut GBjknTPAQLI9dbOP?ĝ:z(}woV:t:_~M{UKcl踒1ٗSڱ{[ׯ(-wO97ƥwlv9XycƓLP]MtIѓ蘚ٺkuҙRSc_$Q 5ŢѹAݱyj+) WKSjkJ7ըN$bWgt~`HBQB\Ҩ=d519-K:تIu𰶿WjnSG[Jl0ڤ;qJbiP/56>)4"L%]:zT8LMzŪJ?iQC}Fز~ybU������t(yJ/.TtMO eYg:vGs/sڸnGeLߠ&8|3b:y  l&%57hdsJ-8uwItZ/WŢڬLRKٙ@tV>_a۾kqA[.亞Rl/R!صOu5ե*e<_ejYj4MUWu] ʁ꒮V>ڣ1P*QKSqzj:.X|5j9uF֭<N9ԝ5 0 i= Fmmi4paXlN~OM3-C֬ZP(3t 8t\+uisz0;։ JÙ՗~]T.AamǹÍ-������q*BY<V%kdlRMLM&SߙzanMO˯DB2-S|AjdtBՉr?du\tFSөkFf)LV JelNiilbJ̩Mgzy>e9{R)LV58<L48<x,Zz6ƍ D/edSM2̾}Nuϝp6Wj ǯ}n. kǮ}YR{ ϒy^|UM,w=(؉>57i 2ٶ#\y:|줎5˵jER`5:6bXx)5 =?޽E~nݱe\ȝW)9>ӯ:E¡"T[S'NS3jmn{W[ͼ\Sgum|ɩrH52:h$,k&]L30O8������fxt8Tg[)YWmZ$u6I*̓ãzy>-_!0u\U}]R|AcZVlomڸn'tu7+ 4M-_ڡ=}GҨQ8yZMFB:u\7Q ڹ{Μ6MNMkbrJT[SDL]-ھs8%];s^#c}Z~uq7jRZj@Vwg?OAG*ɪEij|bJ/Wiu5|<ϓijjSknRhwsixd\;_ݯ+q]8|BSSC PWG1åk#I:yҙm5y'N=gY:q<I`@Ms~4jڽju~`PF fu= X,yMMP_BY[c~ kW0 ص_|AkW/mU, sRTJFdK)snKYйAɓr|yP0S8T:g55ҚK*@:eYd������fU<6 CkV-U:Ge Ж ʕIݹe:&tۦ5hkajn۸Z{я_)P5%d:yzzu]55Mk%*y'508 #JթV/Su"fMLNxO<X֥%m=,W8a*=~JiՊy%J^ nr67H*U?3YzzμʓS8RSCV-;Mu"7G˯u]l[wlY_ڤZ5Q.Au5.yP8R4Ĥ<INQa> ?t|ɸj熿˗vjj:޾;s^XTmM%u7ЈeŢK*`ۚ-nnm U;s|l_+w}GJa(`ڼquyYkkcھs_D\ST捫U]Ĕjm,WPԱ}'0~ruuH FFUW[}E_s������,B t46>\>x,h20 uw^tF))4 4Jm7.MuIOLU]+WJRk5ZC)l[Չ~ҙFF'ZNĢz^KW/糴q u7+(*/1f-_کVe9ҙ9 ].um|i2abU2qloVsS3t?7Rwgj519:S$ZCuczjmnPoYE!ݱeݜ*LӔ=mزVWvqRTXT0lm{R\S$z2 |,<U{[SܠjYB0 -jWsS2[vb@ t:CG{f~.˲{)/&غuJZ|`0p8$sfiuw]Q[YYo97o|]uƞWCg��`1)$>_5{Riqc+hDUȂcxJE�'&U(ʋ5L^xR~y zƘ=&as>_빪1Yjk9q=& *t0_XU}gZrɼk, /=^>ω$9GOS hb@^0俔aHPpgdugir*#zU]2526ƆZ5yX=ETdH2 sX`xIdRageRXa<OlFɶm|~y*߸/0B^SS " BW4M_7~^sRiEUm���X oZ�}<O ޸l֯]KYZjꮣ%;Q,mרP(urŴLu\FmckbrJ>'vW;Zn(ǛoZ[!ܬJi'<bVHkX>ᰜL y2a 3 zу*J&kh%5 Cַ6?^UG/O|H{q PPkׅ۟ zs{zs6}+/ ��pcn+c˲lI>Bչ%]џs4,~-Kޔ}XyC,Xvcśϔ6;I'iB7T,U/4嫫N#~xPHR4p0455vxQKT Ў?Qmm6mcft:;ZnzQ7lU0\.JܮX,W?/)C~+ ) S&r��Er�v"Zjљ&%v#ff'M3ѩРtZjLSf8,_]hےa:~vڮ{H['߯  !i<OBA>OiΩ|/1Ţ|> øF!˲J:ǘU,d֜f'!a4  Ey'"82Ѫug1;Wb\~.?ε4MݻW_*>ZfL,˒y屋Egf>7γX,,l00JP(Ȳ,Yy8���x@"1$U[Ń!r[aa/ϗ1Q<Ǒ8?eT>* CPPTccjjriɒ*yW k4666m][%ÐyOLH*U~G? ۶kzh||Tx6oCofC+>>|@hlSDR;vDU[[z;y.htq9fw߃jo9N?s2 CoجL&]iWͦЬ_kz{k׮ڴvݻ[N*[ʕksKKT>6 ClV??(7떎o,/m۞ѣ8:;u}<yLsy)tB!ZNwy"(��T�4�,20I4eϓZFj ڰ6rgeihhPO?=oy}׾jjj#Ota=_~~}ReY{֓O~GOg0 MOO[zLi*ȶ:{OO==UUUɲ| Cz't=3җ>Zv@?z֡'O40pN˖ҁ{ty} r>o+Q,VI}㿯͛jmoٳ}W>' CFc9]^U]>z'TSSDZ}}'e?r:th::e˝s*gx_^xYuȶzs6'555ip>?Վ/UPXNuq#G/OtByO==={ E"Bh��74���\UWRTW_=<Zj Pss:;UWנǏOsO}='x\/aٶ_CGg}Am'~_MM-???VkkGeBJ DZQ--zVXO| Cgm{^'TSS;WZn|>o+_vڮ?To }~uA}ӟy zmw|>_W${gzi5 Y+lWgg Ôީ~'wU}}^Ugg^x=S?~W?h4/I޼h||TԔV\HjcKG?y}_WwkGOCzj%l׾y}{'tZ_499O~vFe2)}ճ@[ܥ[@����a۶~?eA=vzYȿңBkڧ_~Qc,.\W&VGGnnΞ=X,]kÆ۴l*=50pNklٳu)dV'NQYu\WWb-_Z~+*j5jkkIW׶mibbLޥp8W_}Eg40/I|> Fڰ6E"!-[R--mP*5ݻwPȫQz* UO1MMM*@;4t߲|.ϓ6nMw_^z9%Ї~MͭeVʶ \.'u˽/onٶF'=Уzu~]Я_:; ˪iJ]]dYϟѡCdrzm2MSDrzzi#��sCoն�lWIluCڴv³RƗq >_P"T<^t:%ɓ8 w饗/FccGA[;tȁ~ł[ʋ]eםyү`0$Ӵ}{MW~qB!/ӴT[[t:YO:;%ICC* zɲٽ)/q+[p߿~/_K :t:sNM55ur]of!ī+ FGGT(m F U]]S3̜ ittX7ߥX,.ue%;JcMy몶Nh��*+g/%���U,%>yH$G};Ο?SN駟?KI~>#GJ\Tut G?T4U[[֯"Il/6dbr]sERZCC'>͛ٳ'=xܹM_W^R__ygݧ2K!˲ ]驫*3i}|<S,W]]zzZruFiLCi)q K~XT:R2Y#*r}g{o>\y'��nxUً\.W��b\.W;:T>ePBy}jnnS6X,[V__ܧx<OZ"уDjjjPCCjٶ]wfhrr\'Ou=(RX8|uujoR$/_?֭+[zz^MM /߼lQU041q^P(:գG4 Y8ruJtB[>}[_,˔i:}W۶ ˲ڮTjJGiJeуPkkUWנGg&ԪDZǏؠUUO3��; 0 C>ObQ  �7y* r2MS>0L џI:{O/V^eVȑJSwk7iϞWtoIwqou]yV亞6lMwq}r֯߬qNa~= ]wٟK͆=GTWWÇ~{JuYiݻ[vmƍ)K(hϞWdm||=ھ=_kxxP:}N>jiiTy{P(Gg.}3c~Zx~gN6 S=^ܹM=FF~f rxz/}Vcc#2 C޷ VMMzBC=*gPP [~@_gǺヌy^}u֮ݨ~w ��@T ˲d۶t��d Ðm۲,9W^٦;^mۺ}DI]?O~;[K3@{Һu%jhhҽ>(\FqUUŴkv:: =YV?s<^=sSmmbxy+Ah\ UWנ`0D"җ>oVi˖;յLV__kݺM:~ ڵkm{^ԧrZoRߛi_~Jr"Q}̳^pZ߯zEU{}P3v[D4sФo~I{'󩩩E/Pyo|㋒<6кuyU6O_T)QSSLmC?s(˲Sc|>ZUU��ǘN_qHMzϳ8*r]���L,W>[U8FFm/W,wW%ʅz7oK:w*;ia^;�ٴbjk y P*`|>Z eYkT*I+"ykzzJUU1bХ ]Ot϶(BA 7jzzJhL@P!*ZTSS`0s  z_+}utzZ##CU[j\m>_SSD CJ-q&&林蠫QML* ++*+ZŅa2pa@SSFT]TUU^'{R<OdbD=!)jttDFU岊D.F 'D+|6MC4p=33��%]Mů] ��4n_ !~y埁˯A/}~905fg/3.xǛo+Kq;/|F6lъkɤQ_I}Swu+z~/ϥ\|Og ׅBqC� ��0p Ys��p. z<k*v*{Z_ؕ|>OPX??駿'W#MYm) Yhؾuo6���xct�=C���r<'ȐZUSS'4 U��pyh����y*UUŴdcT��VE� ���6��ļ!��������4�������"�������A� �������h�������@E@�������*��������P������� �������To'����dLːŞ 0?2d= ��h���,A{t'k=�� h���,ƎO幋=ږ}Ed��A� ��ERCkh���X�������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������T4�������"�������A� �������h�������@E@�������*��������P������� �������Tļa��kK����XT T@_[<o��p9.$����la<S._9��\|>/dP ����aJM{���הNc�����7߃7m>O\N#cF l&�[N%I@����n0 Ce56>!y<y�� 0dȐf~xmYE ����Цi0M9Ţו@�[le|>Y%4 ���ړ!l5t)xD ��n(Ѵ����[Zͭz. ��,qc����p+f�=k 1bO�������p2{�������뮀m1{o��6G{J����K\3]xPJ̟��n LP0(f$����,Оq\_ttaSS��'SC<55,����n О\p܋Fƨz��qOCÆ~>W͒D ����*Оr9Gg��ndG`����`=y<S:jph��pL֕z3kY�����JEn��[GXth2����,hoj{7��V]r����XT e��Vµ ���� =Ş�� ����yC��������p%h�������@E@�������*��������PoX�mB?'97�������x;�0z]A5ԙ7_7͞'՘v[͍}��������Wộ{զj~LF\cۆ6+641ႊ7ÐB!C!esG,Ͷluǟ(������� 7UmR:ɢ\Wjkw^W%J-Mֻz𾠒 k_^<X(h?/BXmr5Ȩ)WC#Ǜw5_5ӵ������w| r2 鶍v9JhӔtdKF†:, 9'|R0`W<Ft8lR$l(0*<;XPRRUX)CLS*:R6JaHr|>)`rvl^m~?[}z*������hc/$󤪨4<⨱./(!t[l4Y2Rec:ZPWO[(4d][lu[z♬tyc=E+')޴VGm(t=N{G =pPi艢-5[dKy/\ך~%M8zm_A>�������n: lfISSS^ڑӣ`ԙs<I͖ސ SbQ]Sw%o(_2gÆҟZ-MLV7L&L#!X*KΉ65ISO>o٧HPk%c=$MךJ]>VԆ5@@ih|U4bjzK-M__/l�������x;З {)yG *1쳤%|t朣Sg 9 KUѳlZo+05:goھ~CuoCZ'ו)]ZSwδXʯK'oK;rr\i -~}i?f4:ʶ Zoб􍔾)(񔈽a�������ޒސ yRUTgO'_py:飼ç%]>|-/,U@K#=Q$=-AWL_f΄ƙ)onWV*u]{ZԯZS KҎ#9PLS-*Ym*Zj15]ڮml \psJ=r�������ް�ڛ x7MlFg52<R"fJǝ>%SM kg*MS|ρŊٖ,CP鉩)O[Z0&&]ך r+bdfi;= `i]9NiG ڱ+/'7O7�������C!mmf)|Zg_4bQ5ěU,JВNG93m|*H/u]Oű 4iI`Pyۓi C:s7OͧFKm-wg@v-l�������x�FgϓqSv;^̙@xZlai^CîvtxAN[LP4K rKc`G͖tt蘥QWK:})UbOcV6i_3E=BAuêI"y������vmRStC lﺒgh*jL=WgVK@X:Sm2YOtSJsKaOCJrY/lHSSjkLlC::[7$couK׬kzc'  %yOC3}������t=O -]w,I-՘J=51Ylʃ#ΞwysgipU4bT6iuLK;Pj|R6))K2:(hj/U>)粚.-f85jjSѹX+/xza[N$OZگF\=\N{h������͘r]G##9}I[`lҚ~uZz5ׄC,P>){b}!|>CW^/1T0etU8wPP6+P 0wϓ"Rr0hh:i|U.Cpbj{X'~CXUyjڽ��U7=WMM@iɜ'bA}z%I]Wl㺮QWMZe-���[8o˲zCz@8\]3|}tԳY5Դia\tS:}uKm 4~*Sƥcni_ C*={w �������n:帯/x*r:w������w�������*��������P������� �������T4�������"�������1o�m{v���7bZf憆(&���=B_^d~���/]ÔLx|Ǐ���r{laP0 p��:j<ҵ2 C)/���[N>y2S߂~C+4<jkl�[[uӊ%ߘa Pj:-/a���� I|Ati!г/,skKVz5U(P ��n-~ڤK j/]\"Zf_42:h$@i3���w&u5JKU.ЖZ(u8y*-QHU4��X,3"!2 }m,˺y+kl|B<y ���0RÙbm_i2 S>_Q+ ��:fn,'˲d@)/4r\����3;g,5�ehy~ ��*J9FBf[o\9>C���� ڃ/*/��X.^<V`\���x'kh\c��?����a w�������@E@�������*��������P?l&B����IENDB`�����������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/intro/img/Live-Editor-Choices.png����������������������������������0000664�0000000�0000000�00000147423�14332737457�0025132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��z�����F{���IDATxwxuwdӖNh %@P@+"EDD{yzwU,'@ĂҤ(�!-@z66cMv~'O~woJL$(.I.$� v_Ѩ.q$In+ |$=DDDDDDDD*<5 UPGg2żtD2MO+L²P;J zjcň(8/=DDDDDDDDQAQq=N(8u3fᎤ&N62[ʕp {YÇHHn r'S#|߱R"ky! h,�4oυ&T<$HKpbeDDDDDDDDBШ)uAh~k%` e&pͱ$I$�lܢރb QvUw  4 < {z$Q!8Ő(:`HG8�@VУDUm@E [҉SEEHbUJIIr䱋".^`kܾ[ej1qeKE= xDDDDDDDD5n!OϦ["E;˱Ӊ%5:d.*fCDDDDDDD.EŎlxzܚmIl6;DvCDDDDDDD6GmIv-5z$Qx43:"""""""WK# v5zΙHR*pt"""""""(1q=DDDDDDDDP!Q CgDDDDDDDDT0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""( P^ X2ҫDDDDDDDDukD n! bbd=^-"""""""C={8 BcXͲHGc˸*{X#jDDDDDDDTG\AO&4l^)@=S'' 1*mڱǂ-n;dkaOvVו궰74kiDNּ+)vZ4mRh=Nw鲈E3ش\JDDDDDDDu[XSIZ1! rPQ] 08wѣ$ᳯM8oj]:z:[Sf Xq$I^"""""""kVq# y� ASWhc!�$ {b<7 |)m^(VoO]#I yȳ蹪Ĥ[#vy5{!sNϛk4VaF@i4=c{% 7] z%"Μ#'׎'lLzt餓_Om�EJ[GAMfyߑqU ہrDlbFqyZQP [k3]muP\*"7QRM5薦CdZ˜(B"p E5EDDDDDDt [Гs/=BQ%dMڷUoVӡMq2,;:=).V͵k>քܪuK)w}b XU*QQ!Aԯu,1Yq7A|Ǻ]Cgxq9.-bpyCGl5,i.h~P;<:LNq4֠K'niʾ#lMNٱtތ_ȳ|uNGO4=.}oep"1z7ci}cN 0[=<RhcFWdq y~]Τ2 Ӱ!i(xauk+ $s-%"L{sMh{4Xy1KV nRkzQz +R~e+%&kv8}S{Cuh E% bnf\y4Gt9(hѼ{i{"'U!VlFQV-xMۺ_;oU%&??@v:b7<c~>.(bM%rO'1% jR.8{Z,VXGm� ր}ѰPa=5qmZiq i6DDDDDDDWZ6'Ț=y�U1ni)벼F 4HLpo/=8}Ǝ%+*䎄]xI^u迩Wu5jAX%,XTӎ@B-fl` ݴLʱ6Mª*q{H-M$Ip9;PCGATe""""""""��=y� $*ٵ}yLZN|e'p鲈K"o?Օ!~e%,VQ6QV~ܵ=wChԪEղ_P6�=1 &]zFDDDDDDDUtK)f\j 5QgZ͔l6 D4UL׽~TMP*$la �AYfM3G#xɎĄyi5l.Ϡt`#ƪoVQV.y;p ˊJSAxأT�xJkv'y3 kgsHKt vx �|ԏ5i˞R=R*+wtvݫ{ sG:wbq@Ď<DDDDDDDQA;qUӐǐSʞ oPuϏ\7j](�= ` X2zeY n!]4""""""(1}N9U�Q1 0Цes>y W;+Krm%.\U&k1! EF=y�`Pjx hVSdl Bĺ8: orxow)$ عׂ{M6 w GKmm#zhK*<& w:xtM_Twb]::w^1iDUGĒܶځ,֔1Qf=DX?&=.V DDDDDDDDE<aᎀe A2IL1rrm>XkR zvs7Ϧj>e0jzb-q 2Cc+ƌS!tUw=";GWNV-W g!j Dm EUiou"A3)- Ƕ4/UM4g7=vBB|\UxԈgl8gG-[ulpMRBbBղt:`F<eB5>k�9IuVgx_i;:չ5$`/Ku4jHNd!!^~1RY9S""""""`ՙ]Աz6�O v2k;AVW[2]܃M�;:[2fU.@v:*:bEs-Z4^Sh כ§IZqV Eѓptl%s9u:I%[-r sfY`5m�Xyl(~TTʛm%UT"b٪QoUБ7#""""""DmГ}m4WB�tZU3+}P6}ɘ-PYy"S9aA+VivKDo^)vb_b~dS(cמVo^)=sv1!Q5 e$A$QaYa6[^:KZ"z=ID)[j`0j!PM;$nL͵HL ga6GXuhH@qQ]q2 1h4h4 4꣧}?%/ꪬ<GODDDDDDD5M4 z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" zPZfHI "DQflAJrH+QT;wC t:=4 4 A =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%t^I" DDDDDDDDA!ҫQDoC"""""""2èKO=ʝm"""""""@9P;Z z<9(ʷ+*%"+|4q@Gh4v]|875ɵ!;W"K$DDDDDDDDj KѠS{ R<> {(Cgs]l{PdCDDDDDDDJ((cA;nGF/6ʁO$ÞZѣ ybűCDDDDDDD'̊Mh!D&\ vGEgcCDDDDDDDQX]l 8ǹA(BE:kEه3Ԩa z<>ag<DDDDDDDv =zt˙bSy]DDDDDDDDTTYHT6ݒ$ Jj}ۈjMIYU5M\7D$p(u"""""""nv;<'nE2""""""""M$*nEjÈj[q㉈jk5ny@"""""""h,$A=DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQEz%&8"&Fh8ou8sM """""X 4ql<v�V i=б=' """"]a6ѠM+mjIA<K'"$WexwQ%0ur<�i;ݓѨZVЗKLɵEz(4m3lIDDT0!"UX_0ur<6@&ǂpXj:hA&F"Μ#$HxD4nP;,s1`�T²8�@EW.nڶb�&7ψ4 z(`E%"=|uEװ#ƢsG4^,+z^Qb�B' @X?1F :wЇu0ѧؕ,FugDDW"=DDQ(Q|]oXSns4jܨz_?k@zMOQQ!ά  0sX QU[uլV"(4ql|:\v.Yf4/>qS2 11ZZ>j#F|e9w:K'Z&9>o g )qָ&"(SQԜi@C!K"|uӪwjuS[0[X(RNcλ闇jAQ7r4-Jq0ˊ.zͫ[&W-/;džϿ5y;^[ܺĸw@^ (3'.;AVEAhEfUATI5qہ(Ǭ'@[E|}tGRs 54K\("/yob]:8:7qt.k0HGr+-ɵḇoX?QY} 8+r:v-4:['G`Ih薦<má#V]Z%5"-UV-p4NJ�ZZv):nRB)OPYuJա}MkPQ)!Y~:wlߑlmPjPz4o HD9GYs"\M KykR[jѹczE".۱R+uGrk-4r|rNp,V{ ڥ8LT ϑ?q9`p@Dv '_Vu W1zmShC&\.q<׆m>IOON@z:! Bg ZpB8ㆈ'=DDTkɈQ"y" 1FѪ..~k<:<Bn%"[Q6/�$C9?^)!kp_*$|9 N:zc2>\ZN]?jwB~h r[UϿ5!=ix,smH0ql\J}V3o ^7Ȁ n+*$,/S0~L_)7b3~hƔUa/$ LI3<*y[ph4n1QPCU]4;0fD<WiDfYdeGπb׻K�4K[cԓ11zEWÞs �cF.5 ;:F+-&xմpL'~N~.�8{ H]?bQSy6U3dU;�d�fK,VdV"" "" sd"r06UbJ㯨X}1'GHԬa .'b5C sB<ztUuQ׿kj=**<ztջ<Nz)ţi 7-QqJHĐ?.Nc{fM52>-qh<,Z=<TD8 oq^C6Lk4ڔ~-Q5wJ[Jys񸺇Dݑ U9Ѵ3Ot y\l6y=quqn:Q2?&NUѕA՚k!Iν+-SD~ų$"vi;Vu04fD,65窪<Μ5Ǹ8y$ =Um �Uٌ(΋r8p؊rS>؎2t{XQPtzAUfΜcN rA2ZG_Mbc<pg*Xi7 0ur<tk^UBiȥFQzA''O9i> *͟*͒}Um:H 96=`EQz4`P6ugϫǢ]rx|<j5$G'Yp>߮ W<.:!YʉGũ 'Nڰy{XUMn}TFec\3)^dH8kÁVWrѕ? ך 'N=HRSien}݌<.o/=r"wܗu [6l15 zc3372ش5r?agT$w%e |�fYݚM%NKHqh)jX,7̭b jSuɶauNZ-#F9{�ϝ~') v-sRX,bŚJ�vë)wuXuF3~U;k8muN'F F(-ִC;j]k_N 9LKާHFeT8U9�Ξc'N Z L<tHH677lBNݛFDDkQhXZ{&$=vhrm%.\ \4 |-Pj߶MUSv/ޚoeVtPְ rI8+ܦw7ԏu鬮]}w9MfU-N 1Z4.(B9'XK;;k?TmV;ZЪjBѤsiPjh T7['mΨ۴".MżXI0n*6ӵ)T M;,rx݊c+.V!-\PsӶV枲yS;V""F>IBj_YV\=Dx"W$y}nhU!#Uޚo)mcA889)*Uዷ&uUF fZWU*U5}\#PlQ6KY{Ge~S:U~~Es=8;ur ݔrOېxRZW;Keώ[Q6&3m2|k9rv[MJ 7W-KԼZ S$kWzu-}u]}{O~˂DDT? `_ӛ@5n_v*kӏks-58qYnVzf[ "Zqg6K5 KbGxDk$�8csk6Yo6o`WQ)mv)Zc:tr|GIǚETϑ+#sϵauU[irpLy'V:r{\M!++%SE1l1 zVvK@2)+5~,V 6# We D4ix_N%^93vo5Ui0%AA7Ģ] ]h6HT_w{"wxM٧lxM1ҸE$Qf&#Ww�n5L8ʉIZ0ĀV-^G Tϧ, ;gG<'"1'"Zaq&T# * BHY(Gޚ(M]\kTqm^WӚ"O>A<�`WG~kU-I?3vu(Gh*-d6IH6SM?GNv{`79Pdᩎak챣ᎈLTVJڅ+T}2Is| "*|iT�<iw[0Xٖ*ஏbC=OY%NM%xCj1⒪} nRޏavt:�`Vc:IٵcrOڴV'N$Uֺ{Z7j9rjy@I9x(ˉ.z^= ViB%X7I(/qˍU%cuKKDtcCDD& 鿍 EkZ\Ic.[Qv&aS~C;.]\2()U(:8bv6R6:]C�虮<+9t`7Mrwc>^9b+hba2Ihq;f [l\ U0UQ BM?GJRT[@XV( eݢ켇rLpˍ5 8vZ0;E7FDDWX|euj6ubó=84j#;mRJjU]TzvکsM6xC,|Ky1qKo޵j?^C8k#V8Xtzѥ}ؾ~y:+'F/<M: KٗOq7a-q{St7C ȩkQѺvv]cP{c�Wn@*F/W pDDDW6!"”vZ$ily4;kGQF]7iͣlUGRaECGܛtw^ZR{_Vy$6XzaC dis("Fq=|.g>\I;T"蔶wO= vyc1]N wֻkW"mNmaAbJ <}cTǻ<ٽϊop|zwO{rp!m{ B9rXp4-nà+ U9T-ގwAP^#cgλq7Ņ ""X s@ H<ߪ/8I ; {R<nϛmտe x6l~)έ?F 5/.ͳC=!kr6Ѹ5?VT^ձ+`-qx 0 qõ>R@a轉n5!} "!QߨN(1& nJ�GP hpx\:Aڵmuy}i6$VU;H5lMB9r&i͚jpxU%ךe*'.\:FzA&K0Dr"EsFcGA -4~c"+%&xCRi}:KAM[ "6n5cH]O<bGzƍ4>2 5OQ+֬C(.gpo2d_~&sYw^x}fJX6bx毓b> z?ǎ#pj<vɢ/1DyXk'˗KL<.kU?U"^n"eLcFX,J$cYSAcw\|]Ք[`š$bJ)ҧ_}ѡnDI*}?t/QY^j\k2bPT,B`u5# Is1QPL8:tz{BUN:b2v"*.^ѸoӪXOy씕KEI~*;&"+"+PY7y}]S';.Ocї!}(+0zBWKM8vsͲ qTE,Z-ФV |n9ar >e ?-YäHDicbׅ^M~lV=Z{툍B%I}P3W^u/v|BUw?*$ÉЬUpIV8߲݌AbTN稵Ӽ'N:+-W&1!^UƱ~U)ձ6?cz>?<aЫ#T#ش͌}֌"὏=('~eAT:(ju_~`5iu!ߎe*j7:B%gdJ>6W "h "b^ qX $WD|e9LރIrԘsU 7B'Qt4OYk-J;8jSW6|2mmQ<v{6xC˾ hv{`ӹ.oV3.3"V9}`e8YVʵGERg ye771n�՛Y˯կ"Iq`v֫v]6^ƌEv:5Ed }gq G߲ـkϖV|j9R%cFƺE#I@v K~E9!I'Mu},~\Y,֬7c> dǩeGts" cFz ΜhT]<BiI I$I(E6f)ɭZVo-�DDAYB >.dkg=nq8jQZ4JiE;`V͗x-0& 5h.]} R"ߎ>EC PT,y;Agr8\۰v;KjN/p1htb|N)mwJUS疪ic Z$iH8{.<5p6h\�J$Ϸ:N@4n䜴vVG8?GJ ڥ:±>op'}[o·[|֭HLPT,[NDD^FFA ضtY 17?kEHU] skVA$xnpRY)U]rר5"}UrKx}niTՄE7(g4+-۽JVg>G 5):oGu^3"">EDe"=5:)A̚C?u4ؼ9[b'b@fFwnj~~~(FQZ0e|<h2|vv-W{-~AQ n67\}$"?RѕAQ7_y;\ŗ9axKV):fqNDDDAoKE\mSNzM(J()p$ۆ6ɖ?fE_kg=Gh,V EE"ΜH 9!색B'#""" G"""""""" HΘ"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" zD؃APiHo*Q8A"a zAPmT\�c$""""""" 7cC\=΍ɭZ0"""""""ڔJTe!Ga ] {"""""""(�R$U-H=!^\7Bh4KlDDDDDDDDᖞfCd@xFjK؛n94 zt>aE)6*!O$q҅kpG$h4h44iA ;Edn{h-UBZ9pE" K#$Iok4tj| )+p2Os(3i`Gn1"""""""@hEjiGd;% tkSaOj87YU;RZ yU|6ʔ3jjrȣj#Zs-Z=;GBEH$E};!O$k�a(FQUɗ3aCDDDDDDDk(7ݒ$IUGx xQ]ZSSࣜ.n)7�l x>q |\۵-Ar=>=&""""""" 9u%qulj oE]2j55xҎ!"""""""f z!"""""""o45_ z"""""""(>z8:QXE#Dj,Wj zr,Gmr(!PcBD5UFՠGMD gYYy{&XE'#Dj,WjZ z<h(ʷ+*%"+(*@\F]ӂ ѕ"p#ǹ]N ٹ"NQ\"n> 0j KѠS{ R<,W,G(XQM ̤3(I$I(E6f)ɭ^st صφErDWthD+/B ѕ"P#J`NFjF[rJc(-⺁@&Z*rrB T(ˑPфkSEQĮ}6vDWc9vګuHr�#Dz,WjRZ؂9:-=(C0"XQ\!I9Ja z<'lJD�O؃JY" 5+DTS)G!M)(8WEDuܩ<ʈ@F\!"'#Dj,WSZ؛nI %emDTUVfBD�" =+DTS-GB)AH)HDjv;<&ܞ C+D " 5+DTS#Q"bQݦ,Ղ 9!PcBD5l9jao #:e"Rb9BDrj*eBF݊DTF`BDXQ\!  q@""W)#X" 5+DTS,Q`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E ]WB'1AqhRܹv| eRWmuX40$+]^U$(Ѥ y>CDꔪ'x3X't�@Zt摒*Q=/#-�Ap9-X*Z:!" \1>C3DCP版\Ű\!Zp,ۆj ,wȿ}Or """"/6s$ۊe$L죇7qqRhL5X%;k3H/1A@.z4jAB "֙:Z -kЬ�xIđl+D5֦#E$-xX%,^R'm^9oNjMx* ])zucp4 .BI`Zcö�ZТU -7 TDaGm0zRhkBѱCbF�qru{N'ӌMX?#b~Jc9}6Z -펎ھjDeØZcQZ&oM蹪7q9~a԰J[wX<N7rh,:wATp_|kyRJT9!>1zGX+.t! yx~BT?tJ゚Q@fZ<\tKp~ :Ȁ{^ϛG:~vy2<lE!z'?͵{S3㲴|CЬij^wzqgJϓ(+}t=~p"Ֆ޽b ^O;}Q=u̦*OA0Q0dKg!M+-~w:ҟu 2e~-t&Cjև4x"85l}w$`pЖ9FiJJhک ;ЫKE2 .q@t+Q=02@DUF^1#bU}QѲr X �b԰f ~!nUeDQ2Q / E_QnR#Z-p6$|ȉ)1!/dUh z+<?!} _Jxs <.'r>ᩉл<"]L,wJ~ܥ"~PzLZ"} -{b<>^l̄x?CCcѦWXҭjZ+�o֩vD$!^5_v`Jio{Vd8^`hG N�$5תeumfѶ/LڱtU.Ϝ.U9\hG!6bƆ-7ar5tȻYGlb OE_p2w'ΐSYصׂLs@˕p~0y\*)+|MW/_`LZJ-ƏKّu}Ƭj(:.Vīj:iV8kzo[lic *% r Kٹ v,XT[#[րLEʵO�` Z~_ߪCV? z~rb)A�&SB�(7IfY7d]?{ȳq+Te޵G<?!.B/3aպJc-p�ıqN/yn!(lƻT-MTT{Qruڷw`ۤqqjVGzHu3U?UhoW.u`#QZ4z$ǯleEqگEx.:VMw]uԯO 5 NaJs^@玬\KWj9mj_q].I#M0yg s=X& rl8w!NIF]TKE|~쯧>cCqMU4kP.F(k"uU[\"Br8B-h4c&,„o/֔JZPy.Ypf)WEeWo^άjߧWp0EaC<fu>ߎw/PX,I0e|:,^bta+^{_|krƫ:~~2⻕䞲HQk=|N-bѽk_4ځ'UX2*bH0 O6m5uK-vա=KzU{-?\}aOAHQqC &'ݛ"nSeП/'lɚVjAߟ"QҙsvTTJr-~}bpG�VT՝u:AuwͭcT_6 >.;-(E+Q]4lĐE[MBM>6u�U]#VVJ n?$72W}=1QVKzC2.7Ye*iyT\@]):j:gCNlaH_mBo4G5:L-7aXk4ByԺRʊcDJڽ?r$].G2] l Q} |MA@=*bߒRQ.G303E"6ړ QXTT˾_\JEd{R`C*54V~Rb""'7t'Av;lj|)-q_ܛk$PYv TzU 5i~ݬc5(7\xmfƺMyx~BTu)Cc! y}~B5QàڰfØkY2p�ڡgɼ5k~oUkŠ=-B?-w;k}S  01t<HWo/+pBQCuG'pm,xQ_FC0eB<ڥHہ>q'M_(Q>z)g{a9䵃|iL]iP'N`MVz Zq0̠]n:gO--n G6/T`ظjw yB q]DIZ$i"I Xy/v`Pǐ͛iTazD _3DU0ɥv<d~]E_-icdC/z&OdG<%JuAzEʽ?;Q0ҰG =XMžp<͚j`'_X&asBܻ'%+%4m㽟%i@(z$ GluVX^cУ4qj4b]gn F\+IUea1_<tƉB�Ӱ+ٲ݂6^Opmh%j G8յK.;4oKÞ h߇+ 6jϓxɵbD cF4�tnI C%E#gLӫp<ؽςE_9xyN)3vZ5Ơ_)F׬WW͗I^Vnce 6b _'DW8]ԥbZ4ɕ5z@05{j+UBI;-ؽC//YYtr^1Ȋg|!tw<4YmJeq<S4 fOm<-b+ 1&WǶ˘M[͸_5 >NB^' IqRm5iB^H[͟<>eR414 y| Q[s-!ϲ Ɏ<?qZE͛zU8PǠ'JVs鲈5$Q@=rOSn+o"LG7= KwRt $Tlp"5p5kx V$1k~DfFE( fQ\[=ihVQ`DEv:! 'X'Nּ Q5!03APR*aમ>?2 &۴6˃fpq}Ʀ[QW3H vUfRZj!_͸k~׆GEnggW&{泉Dɴ:W@O9j9^QtG�l?ZvRH Q<+|@8dgsFgmoIŪ$!^@t.ܱǽBUFO `xj9|ԊoWx y4`8tK?wގ/3n'6-M/')!-IK't zuc~5iDjY,�iV[o ?Wם=ʐ'1AI >CG?D F]_u+TLRv-f( iEFUﳟ6TbMU-wuzõsO2r4ۊGum;-XsjN<?! MHm7!OV�!OԇU?U[^_p6Z4SϹTFOֽ>�1~L4G͞7TL*y�UK!E_qoLJ@RL(ն~12rh,#؊b_�PzOJJE~}bvdС];\(jgxQUٵ(RtzعÆ'msڊJ ΰ,"I+}eo6_Q!OB$aї8~†"_-5jԏrjڕ/ WJm=Tm^(aS=[[yزtS׏2? ,aKpŐJ /,^fQ]Z,YQ!'ȐG)rEyfFUub:<9ͨ ȯW{T:x$%+ek uۨרà/5qJeJqkt5OB\gߘ{e>S}8?YRUkmO>fDƞ2z r_((bML4=5X.hTz,gAnsJtSUO7Ơ$eGظ KVTʑr 1rh,5`v +$Kb?|u%:GSVUBY 4j(}y8Y,~rv wqK`ر{m[k1F-.8?55hXv/sDT(ԇM²Uut|'`ـѱq5BiG=QmܕP3cSਖ$`eMy!VlU& 2z WL Mspx$+:b hXp*aG]-.BќX oU)N!FPʮ$IJd<?!da+Ξ) H t:Y*LV=eY+0ʵ*^M)۔߲�,V _-Qwj.\E_^+f f$ȕ$|Y96b["p0ˊU :!ݺC|ۣ>jKqͿ$e yj O(B-őc6M>ʄ`6V`4`+кMflfƠ~\?v:><dgWJ5\[̳շKѸzѨfó6\.`U"_}Yv9!unkb36lqѩD:�]Bi6dTV?\ry`pu=7">N]pSy69gg<hwn<?!NB¬>H{<(Frk-5EЎSy?'(цAo EDuUN 9u{4Y¶[05<?+AY-3.$'8lŁGT?0̖\?؀zѤp>E%L멓PV.ʝwbBT˱l6`fc90!v[ѽkp#Wיsv6E7S̲?wζDQh. JJCrBޗ$Gv>Lwe>ڄ3!|Cnw\} e ]v P!- YlXĦX++'k[ND{ʆ7Ez5;sΎ?9 ξV;B5z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J=f@Q],Az^+D!cBD5Ur$TڨXD)bIDu1QR++D"`ˑpkVbnmɭDU(+DrB TuˑP [У0A.E=�h"@ A+DrB TuˑG @Ѡ]2f $'=͆vɀFXfbBDXQ\!  7ri4*} =+Yzt/6,W"# ׂ$Ih4h4hX~vNj:W е=JhX+ ο@F\!r!PcBD5r$Ԅ2[xI IDQ(٬0-HInԂ˱l< '8w^2v{#j%$ƋhҎvvK?V VJ}aBta9BDrj*别yga0@ӫ@=:v>Ŏ6E~^dM54B,NrrB TʑP k-gA;GBE9T0QV,_UY]9XQ\! G9ja(FQUɗcG\ @ׂPxur(!PcBD5r$TtK$U,�=t,?SA.ت,W" 5+DTS,GBVj8 =@ݞQts-] >, ѕ"p#G >nQ䭀 er(!PcBD5UH(JʂDTy,3r(z!PcBD5U[HMji(캴c(tjr(!PcBD5UW? z! " 5+DT[45_ z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z"""""""((J0!""""""" z(f2 Zv\|9ҫAQ1DDDDu.+PL&C\\Zl;C^=�իq&M_|UU;y\Ďv>�6v⑑<ENNrrrpq>��:vÇGz5kſ/<�9s`^{|�sbZ޽{1rH�@>}bŊH&?X,hذa7NJLI IDQ(٬0-HIn|饗0k,~RR4111СzSo߾^w뭷b۶m�x�^x7�3f̙3}Ns_:Mzz:|I<C!$:F5k8ݻGl}j"歶?@B gE~~>� Y(''k֬/1b�K.(**�[}N[o_�$&&ȑ#|ݻwǥK��0eL&c4QTTz79q=Tk9[nŀ�8ȃxWO]=~�w… 1f̘}g`�}UGm~(K/^f͚uyga0@C@@3Zu^89/p]aƍx70k,?8e?#0lذ֥Pu\-X�?e:t<֮]w} 4+k۶pb< V[}:jз}:j<Κ>�0oU5}$žwyGXt)LRk_QQ^x$AoC\\\XvB355;vDjj\YS�֬Y>;vʕ+�?ߠo|޽^ơC]t� ܡCj<�HNN~VP5o0mU_c̙<�ߏ]FzB.mWF~ii4gφ(x饗.;@VV7nu|g܂$ 2۷GII ?~I~/Ď;dѣw+{9TTTرcx'ТEZ_;fU S>3ͰСCصk>Vr̞=[O׋g޼y5>Ç/X5j^紥p_~Em4qUW�Z-.\qqq_s:r\.כ?A};w8AE=ӦMozn#//[nO?-/h4/ecOB/V<F.ƪë^{ nnVo>d&< '`8ngժU8s ڴiS+P]VHG @8/̝Ǐz_Z9998{,ZuӦMn\<oذA=n8U뮻֭ 6EpWw Q}SFjh׮&OG~~Q^^w~ܯDM\t >|?)) |Ap4]xWUU~~~PQp͵v7N=+6io|ن#gyd;Ųma_o&8PJfA]; >\Ŕk׆|={LYǕ9ƍ}6Yj|1W_""""x-_MJKKn:|~}G0x`t̙jJW_ kڴi_��|M~;Wٳػw/:-Z ==]vE||p1�@ƍѾ}{/5 W'N}v۵k^zUB*Pʐ٩2�X[lv՝2nGń:赿-ocƼVUpX~܇Fzz:̙ncƌ^5L8r�aÆ>qEE�8ju �B!كM]f֭[sΡAHNNF>}вe˰3ESܚxG1o<YFD'AM7$7nO=>qFr-n:uJUϟ;wϟW)ΝÎ; F]whҤۿ?l6|l@II v-ONNF}.b`ؾ};5jL#tԶ߾c\L&lڴ 'ODqq1:w={/,,_;)))$ȑ#_`6^z!&&mK.�ǩSVVאVE^"VFiIRK%eRaQtHQ:u*<@ M6-yy|Mssd4#Fv>S<󩩩wygPۙ% @ڲeKdղO=d2iFz^<oPn7vX)++ZϼUV)cI*?fIқ+,R S@oH[2~Rʘa~2,thْjU;v:ʕ+ u6n(O!?>j(﹧el6W^Qߔ)S'N|YF9sf͚-sܹ̙3s|}?3y{ĉ4FQz饗ӧOrٳ=.HzǼ iʔ)c~< e / Oe:vi3n|(ԷG5i|~9դK/<ti޼ycw2\xQz}.j={v@ǬlHDDDTN._.IE%RqITRZ.7\-O=IMM;#_f zj}TC>cAߥKdgg#++ YYYݻwkY^C߾}qjmgMlܸoNddfflR]:Pz  mzKysZII >CNSʏž/1a̘1hyY^B\g*ѕB뮓o:t/^tFٗ΄ TChXrׯ_/fm/bذa;wiy<|7\ii)O.* (_y̜9 c!C8e.[ e>a;v:t);;[)]w݅_~%�'aн{^sΝmш;v6[ӟT=z?3ϟqox}VM:?Gzٳ3fd{̘15jv;֮]+7I)--ō7ވ'Ol44g?:&[GΊv=e}ՎT Z;r>5r[K,o_n0i$+� ?f0sLy(((SO=%?kv\;ӟZ$r-<x0N<˗c�ǏJ(ܸrG7ZB^o>�-[p뭷7tӑ< ;;[nnū:ŴiT)Ǭ,|8z(>Sa۱e902[}!yԣ'bСhڴ)ݫ@>}BҜ>?T%KOF#F#F�+W?Gb̙/|HKKÉ'/|~?|rӧcz> """|ГҮ];;哾;+ GS:w|{5_:5: ~IӧtE_$$$]vϞ=ѳgOl6U3qD<䓪iz)Eƍ1x`O>+W⦛nXx/$gq@g ѭO@d(=};jx$ g-�p=ȷ333R^:9*ԥKTAwO[.իW.?k&O{ò�G Ǐ|nIz6lؠ zl6<;Pvmx7��?*9{ȠAZ_|Ȑ!U/?˹뮻�8qr=)))ٟ+WoO<w}*߲eKHz8:uJ+j/O<qUyͪ _W z!\wumݺurГ. ={4x;vl5"""N72wA׎G=iҤ*(ٷoI?LFϩ-'No=c͎'|K,g}{?� -- ,PuzEѣ1gqWy ɓ'} 8jW9 {WGm=\$|O<|…(++ zD8ka8;Gڹs|=d2Pԣw 6,`WIYK')) _|o[-P3gj;U55+C?N3gD׮]Syjv}+VBAaѢEA{>oԨ\Ad [n5kQ\ >\US76m:(G#jԨl6ݻ eD~*xrh4[1eL2%$|y`QAi%%%;<ePWZZz?k2ɽ(U{yy G=}|{ԨQn#T)GfZx1 BE|_D-Nl~ $O;kB=} 8Po>z/ʚ>ʾ}[X,ƍۣGj]v;/^,ѪU+t:!NB$e-m۶Q~/]T#Azw4S~yyyu$"""6zw~V|ƌxgZ?OZJ}wn')))m_!› .:tiii0n8\s5HLL jy„ _5v6szɓ'1dȐ{} I}]w6Mzz_ <HD׻P̣G>GZZ= �Wx5 Vh hͶG||<nbyr qe[@b4}_,慺Czz::t۷o]Z已_@"0`@ѧOϹ־---#"""D} � zqqq㏑<SҹsgMBoǃ>(kii)̙#W߿?NL4g@*5kn6Ӟ9sFTGמj&U7/zk߼}T[(~Wկmڴݻݦҥz\??W}P6=�GS,gгqF=ؼy3�ũkx6f9Yv- /F1k\G,֭u:233C%%%VlllH_fO㏫FT[㈿`, rr$^IF#r])"th4z#<͛7#UG޽K/.\s8Y'/·$yn!I?eӊ`khZ̟?o ['@˖-f |HqW$ᡇ/̇ #Ve`Lj뉲yUy5n5[n p())Q6mȷ:ٟp4 wg@U 6ȏM4-0VljecBm۶ 뾩m (F|;%eEFϴiou?`ҥr{/sצ;v@fffP%>4 q<ؽ{7֬Y 6X�M.]/Z5Ⴓ]_)GeJJJL&o@~ zwРSKM#ouj4_#T*++Vk> ?|Põ3gΨx x+X1D5ѣG՜<uJ*7۾};.] Fz;>m ([j%<{۟ԯBDDDU"t6hZ|GիJKKQZZ~X<U6mTU_x,[,<yb:AR޽ѻwo̜9f?{9ŋ;tr'̜9StR4o<ʪ}QS[<uZxҺ*虷1##CXr?>GLR{/~ ?{lx(GKrp:s4p�&L|�/?|Yn�?u2+XYYT-uY}>~B6﫮J[~=yӚL&HDDDDTsoU[ڷor>Gh4xU󫣲Ovi00zhXBxɞ>}ƍϟ?\s*M iK9y:<pC70a@W;=:24C;)k<xW/zSmIy~ l/XÆ U ܹs>:Ku0o޼/ٔJT*!o-ѣG{m֩駟ʡnZZߠ͓ƍS6$ءk|4JQ~+w[jz-Ӊ?b}x*�Q&M=; $I5k<b�<Aq={C=syEHKKWTT0a|h^hii)?{wunf|!m c2^ <2R?ӣSKwqC[EmrmPǒ%KSL;O1fe0gs Ovb)#=s;iFcFYs^L;;խkʵ1MYGG7ux(;_u"s=~<~SuE}>~B6[oUշ{|嗵fɡkW_{ꫯ<}RVV\sFF~ֱYfXj-Z{'NbqO>Q5 zJ222ѼѸqc<cٳgW_ժIΞ=ɓ'O?˱}OG(k:x3qkkЫfj1sS)urT5zt>Ͷ+F :4{gr�ᷕaό3܆pNƍϛ7c{ުBp\Μ9S *_V"}ĈaovӺuk7}1ɺ>cǎu{ p}(;.--ŢEl-|RmXl@&Mн{wt;vQ`nmDDDDGRӦM'\~„ x0w\'h4k:9r~>t:<Sr7oFJJ F6llA\s/PmOӦM1c tO=|_ь30c r-hӦ Μ9#/|GF1Kkov(!顇 8Pwq�1 /�p ݭ[7|hѢ?Bo6~m?}> q<gwhNֹsga8wx5f͚}9|p?~9995kV.srr ڼH[T5ЩS'|n5\up'g>;vLp4;U6#t:=܃~Æ Ô)S0vZٷO(F+Vo߾]kN>}_+޽{wѲeK 6 mڴ… CLETiIRK%eRaQtHQ:u*<@ M6̔w<SO=%@zg|N_!ܹUVV&=֔)S"}QT j[�H r[ǣGJoe*1$e0IVY+~2u~زeKPyG&M2~_`dڵ2dj:Q_ߙҙ3+7\YF9s4sLi͚57w\ysmr͜9<gϞU3l0(˶ٳg=oX{{믫?o8 / Oetw^y䰽uQ~}A;m4m5-}}(eeeIӦMFjC~GI$?ܖŋ>]:n_pm]f9)QN>#]ȿ(].( J2\roz-ePrSPUWfĉ;Lhěom۶!##ە:A{>CÆ U)~4z?}�Z>;v?ON:tH .͸歶چmv1 cF+ird/5x�GQZ->̘1ccѣ޽n-[hr^<3ظqבz5֯_'Ԇ.[f f͚kbڵ&G999Xv-͛Yfύ1>hϓ5<ZR#bw富Xp!>CMfzujYގ{~[ 4A<Vr{(Շ㧺m{ni;FK.xQRR2AE[Æ �UCO5J|yZ$ݻnMDDDTe&Ug3$A$QaYa6[�7oƹsPVVшnݺK.~&.QqI\p͚5CjjdqyAѠe˖hݺuBph~~#xWΆ`@jjב1(-- hذ 2塨zmڴA-T(Nq69R(nZ-RSSm Fyy9f3DQDӦMkX?.v;fGsXAsz�gZBh4">>V^ȟyga0@C@@ϯPԚچ:k8!ک[v-?�r yǎUCl:Wk.㴻wVZ[h#z"""+"""SF)ה2xЯ_?t:%%%O0k,hYx zNq{|h4 h4bŊ*GDDD-j СCsNŻ<zH͇""""r]va8p�8cǎ�޽{W^<x0k""" ΕjnE =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%E =DDDDDDDDQAQ`C'��NIDATDDDDDDD%E =DDDDDDDDQAQ`CDDDDDDD%Qv9r$EzU��ǏGeeeW#$.\˗/Gz5pԩHFvy5ZEDd2!777ҫQmu&1Lؿ?/_w}}֭[HEPJJ Zh>sh-ZHozTxw}W}2u_{˻馛"UW]%co'O<<ի#ٳg]k׮(,,rrr{A/In&t IIIؼysXYYF 2?3y/"�_Zlf͚7 ˶Ͳeкukkw<)++gw#GDd?d;yj M6ò~,jB$8q6lٳgku˹fCvv6~'|x|r۷(Fz]z5Zl:`ɑ޴)-3IʿrL*,*.I/JN%''G(7b:ggϖ�HIIIRRRe˖j/k̘1RRR<S/^ k͛7O~/қǧ?}<i$h4JFQzjLu]vk׮yꩧTmٲE~.===һ9;vL޿III^sW�GFzɃߪܹst\xyfպL4),۬,\ˎe.\P*//Wmhv{X'- Ll֭ z;z>>c=1##Cھ}&1B?)?~: 62dbռ:6_SN hx{nz-i̘1n4IIIرc?8:믿.%''{=YfI^ݠlݺUu9ܵxaaj5k͞=ZĉU2By̎1Bu,8p }]N>#]ȿ(].( J2\ro"2}g;NfY:~Gr뜢"�k>͛7z9L)2331x`~~T�nm3fP:`yفZx�F_¶_*** /@$oٖ-[ۣF8MNN\%%%sΑ^m 99Yuu[-[Dl]b a0�@ԙJ!HYPW<yR.***TϵkNUI&a]BtMغuivڅLZ #Gt{nT>??GŚ5k믿m:˯z.>>III󩩩aoʯ<VC?/^|,YK,W^y:].|uٶm0bv={6.]ޜ+\}ըoҥckoU=~m m۶͚5 hwyδHX+駟V=f41|po999زejG=عs'Ν:>/{Ez)~9s')zFclܸ1u7o= �xgиqr̞=[O{ o>[~|k8/">|xW0aߏe˖nѣ#.?>Ν^zCwO@N8 5 .\qqq_ @ʂ^jEnn.f̘ܹ֠s>|8:$?6h \{ƍfQFoŸq.h4{0a.\?dۤ'_D χe+bcck| �qb߾}cIII0`�ڶm,lݺUo;˗C쇺=z4:ucІ t!՛`0o�裏 z>ԩSѠAS ޑ*CEE;&wϡCk׮HzH4RVr͙3c-[Uc*<۾|WZFiif9қǦ[ ٳ}N{-{!YӐ!CnU^^&Z^B[5ŋL[)Cy?~WjAMnՖP7y睑޼ZHYPW)[.yCYλ6ݦY~jd%%%iܖcZiΜ9n͍MGΕ+Wϥm5&IիMϳ{=~?!l64ҨQTӭZZ8M?v?YwTz7ݦ߹sg7# jm~Y=iӪ~(j*g6TMnz=_Պ|Pغu0}tIao>U>�۶mU7|͠]}嗑^e"UVA˿@dffʿQ8u�8~ڵV\)8p`W(l6l ߎZ-Zweee;w|k3\{yyyUZӡC>}:vܩzY3JϪj|駈q>oų> VAXt)~HobI{Lh޼􉉉?lٲEUuuUff&ޚoIII:thĶJ*l6,X TcԒ%KTGy`ƍ`U{>ȭbl۶ OƥK^ YqqYfk`׮]8rDQD푙pa<w�aÆ~رc�UksrrO?ܜ_Я!"N:Ç#++ 5B^)ə3g*۷Gƍ!I=7]w-i : QK.nӘL&/Aii)ЫW/k׮Zy߾}8z(N> N6m ==hvv !!!ﶤ`0x}}іWl6߿Xr>lߥKt=jE\+Ц[l2ԩSb`ؾ};5j$I{NBكM*?㠲vBVV Ю];3 gb޽8tZh!jNl5zh.//Ouح[7]QQ[b׮]HNNUW]q9"'':t@߾}*N8}CqkzmKKKeٳxǠ~G]|6l@NNv튌 jك,\p={D߾}n6RZZ#GСCx"ѳgO'3$#t:봢(b֭8~8Ν;vڡ[nٳgȚ$;v eee�nݺ^x~/b˖-8rڷo.] ==ƁtaajN:U{kʷ $>wgBJJv$ɄM6ɓ(..FΝѳgOs$ir) vڅG"//Fm۶E~<syy4WբW^>G$ٳGߣGG";;@ݎ{8s ڴi.]o߾^qNzi]@:ydbJ;wwKh:{,.\�ї͆["77ΝC >}x<w eʕxrssU5j-ZS[9f߾}8rݻ7w9܏?jf#ѐ7|{/�`8x wuC8u6lt\}\gϞ>j|f�|w{DŽsHxlPRR[(,,DnpW{𥼼wÇQZZvꫯFǎΣ>oܸ1ڷo5֯_/CcΜ9t35O<VIAA4}tFSLfQ~qXEv} e;e4֭[UU6oԨQ˗=Ϋ9d޼y?춬ǽU_v_#+^GbzgtkҥRFF4hQ &Oh"vIeٲepjI$);;[uK$=^{XJY6L>=$t nWަuj۽;FQz7ݖZӟs`v|7^G=zs_O=d2 iժU~iӦ|뭷<N(GpnQ/wTPP I$J'N8]jj{JYYYczݿlZ)S-UTT$ :rM6 F$|4uT߫FqmnͲeˤtΝ;CtKT~?egg{] iϞ=_#[ϟTۓ6]^^j?+Gzꩧ8N$I^z%ߵ<t…k) V\w9ڶmTӜ8q6ܹS5}jW_ύ3m^s 6xLiƍaRFF!;6uUL՚5kTNVY~'?+x|}&+>YLܹsτŋK/Y\9sf/[9qrJ)331tPe$!&''<peXT0/鲲F[R7|#Izt-ɓu?<�<UM\+$IToIII+1pBeĉ'Oz\NnԨQ~{U}'b6ݪՠRs}ȼ)((6l mذڱcT'N222<~Y+O&M$=-Ku);v]>Q~X^~_|E(X溽Dz֬YO z~m4CUZVkZ_0N>]wyG5K/$?{\UTx'<N,|*?z8g9eʔ`('_Z3q=8k\O .T-6Eh4z-^}ՀtܹsU'7.e޽{=N<TXn/s}G-]pEۉ ^غ͛7Ξ]<='NTmoҦM߈#<4o۶y Bw h8A / ]}… HNNz_M0A\AOm'wW,x7:nz%={VOE{k<f{9y@NB(m_΋rخEk?P=eeeرcw=v]=zrPSVUA zs{?\u{gϞ,Å |{=\2,ӟs2dL8qX\Nv>z$?F^=RoUlv*--M(-ZHz'Nچ uL'G˚5kJ>ۉWeIR(3EckiM$ ( 1!ESQ⊸ˋD?5j\䉊22 >Q%..,4`RUw ?V׭{ԩS̚5Kw36דqq999ʞ A"""H||<6G("JF>}yEqjJ�;+P3+)" ۀHTTYl-*l^k׮%}י[>gOrr21c JN>]V-l9;O,X ?~ܦz[2lQMC[_m(ok֬!qqqvvr}vri[}v}vlIVz==z4ٺu+ƍF#)**511KIɹsHll,'s�j "ݹs{*n@i-7{*=QHLL Y|r^OƍGbbbȪU$pƍ-ؖɪUȷ~K%_T.FFEk2w\:3$G 2sLK̙#)h4sNh"+yFQF:DFF{UVI~ۓ'Or߷6PbC-[FjmaiӦ8aӧjl 1kԌi5E=abK^AAAdƍdDJk !!Ari&2|n͢`HM֋F!gWYD6mD.\(a;I Q_':EEEqs:#z ͟?_zdC_G =Ǿ3ub2x`Ϸ+/{u {쑤߿?"qqq?\g7nYlIA̙Cɸq'=D3"H&9t#BxHê> =j2BFf̘A{n:I=z4R5 $<<DGGiӦIt]J<pl1DGGӴvS#Z*Vsʦu9hΜ9|***$Kbb" `[쌔h z$ RQQ] =RI ӈ˜XV gYNNzY/'VPR> $y 4јFGuu5GzzrirF2t,jQLxx8M;{liAg޼y41tR� ֭[rw޲򀝭Y/>٥~+Wچh,b-)wi<|1='r9s qJ{�d=M'Wfz-QFV k׮IHwww ǜb~Iy9kɒ%uk%QkGߗ%)<fFJNvwڕ<|PJFMBl3f='F#ɑ<ǐGMs3FQ=l)Ji245gzd=DoMqQ+DtCG5jwCŋ%NRRRHJJ IHH ,`P\:[ =:&^-ha'~ZCo WYY))>3?5BJJ Dz>,00ܺuKG|Ζ GlDd,:(;W]ns|2ڵk΄OQ�rJ)܁r秸\ebTZ:F'-B|J;2;w;wFYPtikaCnٲMdZWgcѢEʧ:6+*b>ՐFarJj86e؎/tJzcŊĎDigaՅ`0((+++90v^Jd߾}T>̙3ӓz2uTEԩSU#Bj߿swy\:Y/QQgyYYY5~v ^b&),}R؈.-;/BT-<4+DON&W\zrQI[ =rz YÓXГy%r<z7.b6 k_fAX+zd}v{KTMI̝;W` gzO�yFqq1s.:3Ӓw9CZ戡`0G)>8(g弽bNRxUCi^'_|줡-bW=E-z=]ö{eeeLW[RZXX( f3̋eӰm=[r2m3J~vEXg%,pDXHG86c OUx|z,FypT.7|# Ehy|rz?]w+a<>>FAjժF~ݒ裏(H�� p2e =MsQ5߿?Cpp0CJ`*!ǀTc۶m0j(zc=|Y0"?= R q;h ݻ7=߿?=fZ!s�7|C0��OǃNNJؐׯ_k6I}ED�f�JX(9W/ϵxb"rJzKt:O|CC^^|9^zɦa#i�}ˋ;Wjb>駟`V,g}FM&'E@+H%rQ)zbbΝ;T`Ǥh.?jD|}}aСv}ʆ߽ߛH^^ۗVÇ[zk\zƍSL4|pMEd4Ft0n8zo>(--l+=5 1cjd0V_�-vuu5 >6nܨ= z>ݺuN.ѣe1ͰczpBK.(w2c  ~9;dث|8 �>#|ƏD^^Msϩsܸqo~Mƕ�`yzn'̼Xl111PQQ]7MCCC5L W\*^GHHH+iŊ?AZ-믿III8@+;w~~~:MnݚFGwwwqN@.! ИL&x UCBB`�P(/^ pXȑ#+ <d2C_ X֯_OLbWZB@aa!dYM۶m||׮]0dW\oj: k�@途n>}X :z|||`{nطo0@W�֭56<!) =@^G׫gdCO?y^Z`Q>ܾ}ʶ^zի&;wށVZi.� ''^Jϕ;aK9Ƌ>ye[Vs5ݻYV,}Ʒ~[ dP/,,'OڔKRZ��T;֐#GNqIIbd5d%KmvBGɠ襁k… I&6GAΝ\KJJwrs/\@Kfkk:G˖-ݝveӧÞ={5k8=E jժ:{_d5R:ɱw^Xn=W ÇSl~~>ܾ}N8& 8�@\\jhrGqDa'zzNӟ$gXׯ_*,r��s]6̼X{=0 & 9Ϝ9j4�bGd`mB^Ԯ&��|MΝ;69B`ƍ|ᚿ[hUl6z#hyxxXk׎S-1E8řlzɜά-Z'²e��`͜233vEm%-++h8r8p!>kSzP [k=@MQ2ܹsBA~`0$%%AZZ<x�:t�@6p@puuӧOC2^:MX/g|iIX1бcGU9޳BfÃvҬL2d=M&DFFBdd$� \ AAA`g%'+{sss9EBmP5/vI.X󊲔ٚVj/ g-ʮ-QA-[ԔOLLN갞xCv=a妖֚1Ț,`-[-[45++z=¶m�f>uTv޽8,,̦L={N+W_qYfAxxS˞ZV�SZ</ի/�o ’%KEuX}[ qPώDl!:#z+(N93/&M᫯/Î)GY<x0]֦J2mwtrQڷoϽl?{,pK/qZ&?j:]%6_);jk-,,Mcr�HlCmҤ 3.߇SN@_)[`3[qܺu+= 6mh޽{{!>>޽@X:[>-nty`qfߟ/�P#(,X[N,nt驺i!x~%NCLlҤ lذ֬Y#mr2e o~o<d~~~fmE!AիWC=`N5�}wגyfnYO<lԬoz==֢d#t _%zVEIey &ŋm*WJJ <y�I{_w.O%aĈ~ γǙ< .[tV fz嗹{)=rB$v#+XRQQΙy111t TYYI �UL(**j1[pww4l_O>I?M P3xUZ[m :k׮YMo69^M%/vV@ڡ}4Gv^~QݻwCHHTVVҙx�֯QQQo�|}}#t ڴiM6bu{a= .]cƌXy#@wyG5olwYKĉ'`Ȑ!̭Kh4R/~ ,Y t?ZyŇ~H;HkKrjvYPPk,FAVމ2QAxx8Å СCp \TT7dx/ز?Om;XII 5$jzh]&OLz=; hݺ5<swb;TX4wܡ%$$v{\IjHT7x"7,;!5Yǡ'Ƕ=X[-///M^!Rk{?q;i~$'OUVQ/ӧÙ3goKX233zXb]4Oˌ38ݕ+W-6{Mno04oh<qӦ<1Yľ$PjœoAW��$$$@`` =z`777c:\|)qTVVN 6[lYYl߾^SCO˖-!00.ɓ'k�?N͛7 6��ߨҠXUm�8�z*؊D.]ۛ,b]jkɉ'}_"##!$$<KxYs ꯿zzK7ple]�5`g"H/^xh4ڔ+D˴ucˋ K.K@Wi٧z3XPzv횪kjqtw3g΄rHLL9sPo]vW_}%G S @y ?DƞJ%=zkyjq[.Yw3PSAMZ`yx<&K �ɊmYݺuǏìYӖpXD,`7|ӡ'.,bm lrq.xϟj 7ntڲ͛òe˨GARRCppSׂׯ_jaߟ=&%%eT��sU ڡą GZ�1kcɂ/2m {Au5/M5k;wj83/9FE =_!00 xرv-G-VGȀ<JoݺT"lٷPdu^+ut .99YƊUUU111쉳ϝ;ǝm 9HFQRѷ222-OOZDRR$''sQ\`gFh)))l2,,FEqF3gr:,kcYEEE5kvJTWWsBqhڴ)$ƍp%ZgkfˉTA"*xeDsfZA%DU&=3Я_?HHH~" >}dfpmX۰<yfs٘L&n@|r}ilzW9sƪ˴596m4m^~eΓ7##R{;M2h z|AXfl: }E}5 -NʺAaȐ!0p@8p ?Kaa!lk?x+R_~ h{sm?,MZn nnnZˇjzJL&nsεWub|T#//+ś>fGU/+**`ݺufذa|̙{ei?Mh[\ QD<ڷos˶sZdO5=̙3fXfDө�z=V\ .>MziU8O;v<BCC>x�&NHu"#FP… $[&v)&&)3EZpuuNJ0zަ0I5?B6kΝLǐ!C$nرc !0vXU e"/%iXekΜ9X4;GG}TO?mvFB΋Im-iYfϞmǒ!yѣG0b1b3F1dv8Rz[˒,VYMو&I54xqq1 6 >O4- oЭJ3EEEvG3!iׯ_mDDee%={VрR|;v """$ Q~)O4 n-MKK?YǻvQ1Wv7h YӉ$سg<n֬ϰo>طoZ5FF*Iw9K;w=I&^(4rc]Q2gKm6N23 8J]ҴaòU�~G=U5N$%%n=o<0aL4Ibٳ'{5N={@`` =۷/7�nPBRpaKEH۶m98rHzܧO^F -2}7ڨQ7FȀ?O0i$4i؟gU&<I&~iMԥעMJ)4"_HrY$~&q&"�@?zƒJIڬ,ȥwww'\x.̀ȓ'O4=">>>\cǎqio]䕛˥y&1\Tg �YfѼ֯_/#Ξ=[6?6 kgϞ|wÆ l߾KZ^dggs.^]ڵ+1LzII7:p�,^XRP^k׮\ryUVV;wri|}}eݻ{zRUU%I;tPI-[{-.?5>|Y,_|rtݝt8O޽{$''+cۿbӧOsNh4Jfw'ŲyiM7n=yp6nHWVV@Hd/!رu]xzzJ`(-̛7YplPQ։z֭[ܵ0.+W .Mff&i )--:4]޽]r+'6rH{zF.lU93|pŋS]]=}!ի rIV>}fK4ydwgaeԴiӸkfY"cbb4ԇBȴiea]BIOOd+$:R_Esy��ILL$fKwYރV|uJ퓤e?^O._]OKK;tPI=/.WӧOsX\\LOΥ%yݺum<==III QnfddӧTSغ&Z}y&kCr}5Jnn.FrIٴ_{Ӈz,]xyyq卋}UUUd\H}ܹ#;^BjtM6I߽{WX=}wb?'-Dy߿_VF}q„ #e?(C=xKC|}}|XyYÃܿG&Kw^zϏzj r6 g~?<&OI^~!)(,"b"o>b!d  #K,!'O�"8` LF-iXJUXak+44T`��9s3ߣb**�@d* ~L&7sL2j("9C!\ NEI " _I$s (/XI!111|ݻ'i58qBϟw(Ot i!H � dѢEv =ltww';|$ƥKJIHHYf Yx1Iq%~^eeԵɓ'0ҿ2!zϟ/)`` /8M,J 0q}rƆ)SpyL:U = =<<;w^/,XXd!D?&M"[nB9sb>aYv%rrrd2IǏ .$G?J#Ç~>AAO~~~f0~l%%%q'O4BHdd-oYr/P_O{e?}[0ƍ# .$Cם^O뤦ʶ\V޽{3gŋ0YMWWW`Uɕ+Wt}g%RVV&;(,,]BcpUKjC&I&Ɏk:+dԨQzt%eQ3eSk!iy鰘L&2x`My;VVe˖Y+$$D֒RQQ!iwvj1<yjeߏJL:lm!3fpD7**jڵkeO W9-"DfΜ}'>>^6hQ4yZ =ɒw(*-ɢC/E 6>|XQi'X iÃ<|Pr"2vXMr588X8&v}||dOQQ"tum!7n(ϪU.L&A\NٳG1kBjړ5F;xB={69Ն`!f6]4bY<|Yyu244C!\~L0A{gaZdDԩSVǧL6""B}n*}[ =IIIVۇ`*~Mz6[u@ڵklCl&K,^^^$3S:Q_lϝ>}ZH+ǎSg:ǏפC{xx(NH[xĻZQҳYILLDoqss#f͢P-g%2uT.ϑ#Gj!ZKmȄRYcgŊEj'z-*zD#8j=zX&N`0իaϞ=;pj aǎ?�6l4"">,n ۶miӦܦz>c!{_ |||M&L_'C~ŋ;Fرc\+AKyP l2Lz찰08~l*�6mxnG>/*n!""_ު#G)RB,;mѢ#tޝ3jС6Emr&UXa߳0vXؓB޽ƍrzX`8qB6ȳ> 6l+iؼy3ܹZn-dQPP|'vŨZ뿸בZ 66ùs`Ŋ͆ W^LYaUK'VZsΕg�Pdjj*BCK4ooopGDDD@rr2W?RXX^^^0~xI:?_-s\T, MU+o].]ڵk ??f3=zq~xl[" Xƍ\p^ślQ�{,]xe^}Uu떢6ep曒kϵmqv1?< ̚5 ~glnnn ǏݟFL,21,,`0yСC!u{=HMM3fȖf̘ tY~ݺu+I&ӣDf`pY<())۷oÒ%KM6@"T!Ȱaøsq.5CJ^mȄ͛!>>^V3fHޗXg!%%Eq b 8x$}F#VCTTBBff3TUUByyt4]ի۷.]omW\̄"QXV\Ⱥ<HKKj0о}{B'MNk*vC_lPx ܽ{h4:T ̄l0СCСC27_5lt\9ݻ...ЩS' P\Xн{wŴtSݫrdhݺj}RJ{m=CCaa!Nii)ܼyJKKm۶ЩS':} ݃ǏC۶mMFw|;v ��:)Ehs6HrTWWãG ##t:o:tMNNA-W_U%%%p](,,m+bLuVXĉ47R]] �P3Hf3f l޼��f͚E7f" (//LxWl �m6�f"_"HMMׯCnn.j :uoݼ_uCi HKK|hӦ tI1Nl\O222 ??6m /k]KKKʕ+chѢХKͺ6 ΆMoawY_~t˃f͚믿]t;jzOtf͚;w&? 9Õ3Ȁر#KvUTT7oބ*70 ~v?<L3pum :t:h[ l 4Ԡ3hӦ/rrr0leiz.<;%f͚AΝ: i~mڵ+\z222̙3f3<#RѴZh8CNgWwuuyJKK@{ѣW^viҤ K)" m*;-[ry�x%/φիW9fLp5�X,Pg777Y3]k�z+r=zlNҬY36fH:Z|VwעE ٳ߷&M6uݼys#hT�Rk4%g{ǙVZN6FuL.|R0ANV;v"5Z鱗lX˲2HLL EA0[oŹſyfHMM*�J�5ކ �m(,, pKDGQ+*--SNʕ+h�v-f"=L2ٳBBBÐ �5.\AAll,M;mڴZ Ax4F ׯ_�+VwYh_:TVYyEi?�سgDEEɓQx/Sv54СC!;[cٴ& ƌCzn_do !!$Y\^aNHm ,]fϞ uVECr|||O>tbiǎt`0p:cĉk5/qE>,1(m. iiiQky^r=Yeɓ'fzX`xzzs=WEҌ/?^vٝh˗/sF-\|Yb9sս^쥲RH*ߡ^۷n)BKBB|嗒fVZ6lP\>̼^УG7ޠ l]#.s=FuÆ {yTb7Z 6 fi׮;ԩS�P_ 矧!ۛT:vHE)r 4\]]i]،'$''î] 55RSS͛��гgO޽;xxx@^$ykΦC[ݻ]JVn}Æ W_}NЩS';o8gyϟ p5|2<|^{5ݻȰ ADBAAAh-\    H@C    H# =    4    4Ѓ    H@C    H# =    4    4Ѓ    H@C    H# =     .#    m1=    h$iNBH}?+    HC P!yAAAA-UUUԣcKGYiYY}?/    Hصե[5=.PVZ˷AAAAjBQ;H =lf...sqNePXhFAAAitt:c-1У頨AAAA {bs-=z,7pqqWWW6!/? p    B /�lWWW=V\B 9B //JJJel˖дiS֏!    @ee%@II)W+xlJd]s,Blj*0`K>    5kt:54iYtqkt:]GB@;Ͽ >hAAAAbqyt:4E[8mX%{r. fa"   s}xt:4Fz~1&4 l&:̲-�tAAAAn,˷,6lգ緍aoF-AAAADDΐ#Yc[ѰtX{؂Xe[    (m,MVS    H7(qc&C\x U+AAAAǙ =uQ0AAAA6tg    4Ѓ    H@C    H# =    4    4Ѓ    H@C    H#VY����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/intro/img/book-banner-post-release.jpg�����������������������������0000664�0000000�0000000�00000222626�14332737457�0026225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�������������������������������������������������������������������������������������������������������������������������������������������������������������������������JFIF��H�H���Exif��MM�*�����������J�������R(�������2�������Zi�������n�������H������H���2021:09:23 18:36:34������������� �������h������ http://ns.adobe.com/xap/1.0/�<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" xmp:ModifyDate="2021-09-23T18:36:34+02:00" xmp:MetadataDate="2021-09-23T18:36:34+02:00"> <dc:title> <rdf:Alt> <rdf:li xml:lang="x-default">mermaid-banner-small</rdf:li> </rdf:Alt> </dc:title> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="produced" stEvt:softwareAgent="Affinity Designer 1.10.1" stEvt:when="2021-09-23T18:36:34+02:00"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>�`Photoshop 3.0�8BIM�����(Z�%G����mermaid-banner-small8BIM%�����bwa>,hdICC_PROFILE���Tlcms0��mntrRGB XYZ � ����1acspAPPL�������������������������������-lcms����������������������������������������������� desc�����>cprt��H���Lwtpt�����chad�����,rXYZ�����bXYZ�����gXYZ�����rTRC����� gTRC����� bTRC����� chrm��0���$mluc���������� enUS���"����s�R�G�B� �I�E�C�6�1�9�6�6�-�2�.�1��mluc���������� enUS���0����N�o� �c�o�p�y�r�i�g�h�t�,� �u�s�e� �f�r�e�e�l�yXYZ �����������-sf32����� B��%��������nXYZ ������o��8��XYZ ������$����XYZ ������b����para��������ff���� Y���� [chrm�����������T{��L����&f��\�C�   !*$( %2%(,-/0/#484.7*./.�C  ...................................................�h ����������������T��!1AQ"aq25Rs46BTrt#3b$7CScu%U&d�������������=���!12A3QRq"a#4S$B5rC� ��?�j�;f|, ^7Cl� @(�(�)�" @@P�P�R���� �� @�� @�(@*��@P � � PE�@@P�P�P��P(�( � �� @R����@H�P�P�P���( � � @@P����(�(�)������ BT  ���� �� ��(��P����BP�E (�(�( � ���� ���(��P�R����"(�(�(�)� @@��A@@B ��P�~s>vYnL)�� �"P�P�R�E���@ ���(�(�(� � � @�� @@@PU� @�(�� @�� ����P�P� ��� �(�(�)� �����A@@H�P�P( ����� � ���(AP*"(U@H����H(�(�( �����A@������*PT�����(�(���� �@H�P�P}qɺ1͵ENI-=z\SXbq|~V?mތIec V�zbwʺ�=;~ux}u?ۭDc8qʺ}quz.uuOaWSx\>wX]O}p8 WSx\>wU*u?nE*j/aSmNKWRx\>_`]K}p5bTԿn=״ U�m=m ]K۽p5/ۮEп5/m�c'MKb~TԿm&uʚ�OEMKۿccmE~wE\>LSR};SRaI_ʚ=R~UԿm}uD5?ۮ�z&u'%ʚ=ǽl[y+O~kZeڮ33^lڠ�1x#��P�@@H��� � �����P(�(�)� ���)� ��ABT��� �" P�P�(P �" @@(�(�(��(� @� � � @��(�(�( � ���� @@H(��P�R���� � � ���(����DP(�(�)�����)���A@����(����� EP* (P  @@P�P(��(�(�)� ���A@����|O?r|0Fl}ld*P B"1} d܂7ECv2vtQ b$&TPc`A 2 @1c b;~vm;Ѱ{roϰt:fH��(�)(�(��R���� @@@� P�P�P���R� � ���@B � ��B�P�(�(���@� �P�P�(@( @@H(@H�P�P�R(@@� ���(�(�� � @�@@@P�P�R� � ���� � ���(��P����@P�R��@*��(�( � �@��� @���(��P�R��~wK}./^|/l_5� wTJ$b1I (EAb.В2UD"@c*v e> ߭x]N?{zoϰ�B�P�R(� � P�P�P�(�( � � @�A@���(����(�P�R���(��@@� @ �� ����P�P� � �� �(�(�)� �"���P ��A@@H�P�P( ����� � ���(@ �(A@@@ � � @���� A@@@P��(�(�( �� ���T" �(�UP�P�P� �� � � @@@@P����(�(1�\^ _Ş�0"$ _F,F$$D;$@$b c @eRV! 116wק6oP�~svYnL)���E�"P�P�R�E���@ ���(�(�(� � � @�� �@@PU� @�(�� �P�P( � � �� ��A@@�H�P�@�(�)� � � ���A@@H�P�P( ����� � ���(@*��@����P�P������ � P�P�R���P�PB�P(P �@��A@@�����(���� � @̲<|O߯lY P�sSF.)dп7!ij)]O2GΊpR'�xD>G X~�Q·|$e(Q&e j}䚣i F20 eB eQIh@2ጨc-σ~m_izOlޠ�|1x#R��(@ � E����� � ���A@@H�P�P�P�(����� �� @��@P(�(�(�@��P���� � �@@��T�� B�P�R���B�P��(�(�)� � �A@������P�P�P�� (�U���DP�@@�P�P�P��)� � � �@@H��@BUB�( �"�R����@P�P�P�P��(�)� � �2!�%>}ʽ\}ݙOTַ , xeW n%(![lU}eMHrc c*s@*&2"bwg8|ԗva\\\}}Ě1b9{R_dbRȈJ2.17[wק6oP�~suYmLت@�@H��@@@��(�(�)� � � �����P�P���� � �P�P�(P �" @@(�(�(��(�� @� �� @��(�(�)��@P�P�P� ��� @@H����(�(�)�  P�P�PE�@@�P�P�R���( � � �@@H��@BU�( � B��� ��P�P�P��(�)� � �3! <V=Q*By-6ŷ3I{n=v N6T=Z\W᮷{p˚3ۇf?Vn$}></[m̻6^&}ۋwDFuӴn۝ao]Ymw6+cY482�.Qe8;}%b(m4|{ Wj.xږ{ϹacMUS;&VnjVM])ك|jڬrK$:+cnؓɾJJrԼEp+bͿC#Qj#ʔ&Q{vo1tJUֹǴ+fY%N%UkǗ_giǬ 12ÉMo<%Ş>>5G!9F0ϲKLkLmrӃ4\O{t*P۩wal߾IcSuuSj.MG.a{#yIqFM4=rc.yntꯪgM{K(I@c*YRP"�NMc-׃n_izOlޠ�|1x#��P�@@H68N61.ur:1{G]/Ɍfs��?kGy8NzsXK\ܩgid���޼bb깰ƦƍҶ I>ey{V;scf'h5 q鮪¸G؍+MVf}kѮJ@H�P�P�P;F/xn~漷GKHrZ|־ >^]"wc чBۦV/|4i:V[U7ޜSf6Yˊ/)1&�(����(�֛gS+{Gw]VƼ+ktdYRmji~"'vUeiْâF䓲&/{C%x᝹0EգjЄTcJ)l}Gww3Lw;'Uί 'l{좗kfkVI 3t+jSp7 On֌0j)'ȉ݇7f8-+.yIԻN|aIMSOʊVþ/thُ%rW@� ;0oUuX[':khY/02=J�� ݼbOPjnURvnyڱ^ٍ]ZuuB0miF+dëO382ь7(�@�KuHi_ZCus>u߳n5x �t8x:nL1hJ퓲&*<m[ӷ&6iYG;&1IE[$gO 2p ��� @U4߭tw aI*Kc)'MGEP_,"KM2C_:U@P�R���ة<SI5~t&.>DƦ;nQmrI{Z1z 6ȿ-_Ev-߉Ǭ#iIbxъ.n38ea7 ���P��(�)8is./S{EKir����P�P�}\WiͨxIFKRr#}A#oqhMrP�P"a6d\߭AGwN OA }v+le<ZvK"(7M5:xdNSc2Ѽ# mz6=z7I *J0Ix3ijb�(��l<7MОUS,TW[\ /c7NjQ$m׳xLҪ� @��A@@Q-5|V彧tkgJ����� EP�*�T  @@P�P(��(�(�)� �� @���<k;gUǂ؃9N_�ov9cKd8Y~ScJS<Zi/qY"rVb&b|}+FL#UO>+g:9rkyA{m-R1UQsƧ%&װl;̏QwU\(mԖ>&8<:c"&g afV r]pkOpdђhy6?mnX̊USkڍգ5"mm;Ú/̈+U[dH3dDqmnL}kPibV-r1MF-ˮQ6wEMY|M6Az%w.[N;oq4{No9S}mԮKo:4v}iO+L\Hd&\>TKٗ<kkIiv_.ǢRQrX/3g\Z;^-sNy+#|v4NKsQx9RzZSVb]}(2j2G?8I}.MMs}j2_zfHǚ&-XZ]]pNU\�ߓi[%fgpEʭ["R6�,{Ke_oaޑIKp3ӛflԷq';w/{IX,*4g#r1ow vnrz:KN]iOӏމ1;Y rOތ&Tdle) d d]^߭x}N?{zoϰ��P�@@H=W<�2n P!PʮLal0M"fht}"(UȝVEqrkfa6P ��";#_W_0QLkѬ@H�P�P�P6'8sXkx//ÂFOI鰨ꏧC7.͵Yfd_[F5?u}K6፥ u]cgf|S*OE @�� @�w4/>fZInkfyqJmq/fki mtZbwHK>lQ> ,g�,Lz!:Fѵ<#>nW8e$S5\Lnq'kWJ|_[m>bv"6aP�Pq^;mV uƙͨW6&7tu}K#VϷ;'N{.XE.čF*b6t̀���~ _~,uk)=j��1”STdU* -YSi)I@Î&5TFUW{gw!cfƾ_YOztbM@� @�lBzKun|;my:Eg]M0OkuQuvqYؓqq5U_E߬i-kcӹ y__rkqK4=CŞ? 2u�@R�� >}�/rk}Z[>ɏ&դ5��(�(�9?:#1Fǿ5Q^91zL6�7#g%n'3U1FP���� �@H7 ]/<Wy{YGFHQ@H���n5/ƪsJ;Q{Ec-N'M%(Z;f7):<q\+˗Iq'tbM@H�PWkNpZ+ta~?,6tJ&Q}mM7CtG]Qj}> &ӓ�P3/FFUѾY^IoYϨ#dS\u[.ъ/EᙚD yP2^v3c/^LQ~ffL-ۚ]˱RX H7 w??Ň$4T���6c#QIjM}bP�P��( � M骄Tv[hiIt5(FKdqa['Fu*@@H��@BUB�;Up6*Qi?a$WKZ'KnLS3c͊@ @ �P��P�P�R� � � ��� @@xw]?ϩޯسWhc.id_<HaJa'8ܤYxc}RY䬩[m)qcmU˅8β$[=~ϰ\W:vm2 `Qһ!n{0wiu'Z̸fr,[]}]remd_kqU풜).uۚLC G2F*vZ5Ο׆c K#Urg|˜Uۺ[J)ºlUh+l}wZǯFUcm&&<좬y)SS싗[icddb_[M.LuZ7c5k?W:yٓP{%׏Mc,u}R{ӡjqq^I㵸9p̸W]]pw:Ʃ*ssgmMѴv>aKXMgVLlmޒo\UG4ur1lv뛋ku[ք>Zms2t7Iz Y4زNt9lNVMJM7V""@AA/6%ˌ|L-_c ݳ^Ҋ"7hInuZK|z`<�=_l߯şat͂�B�P�R(�� ?$_y_K@;WG]Y}X,k~cuqF�:h<o:M˘fUV/"e^B:yV3rz$OSLiR8†УL#5UӏtmYHwCKt+5.%Q%Jw.znLx0ϱ:N&fe8pߖ|_*ZӼ|wQî,f6R<O]C'7Zkso9U%Mmus/6ǼV_=7.[*}}}?vhx/b\Hxǵ}]~%o(ZMgdaCWTIsC|Iwsj֭]}6fVWذUx7B95\�?6ິijKSNwdգNIuX#&0͢7Rꜹ%ٺ7[.*Ҷ,tlN=0PVo(Z^U3r &e-"_cp6;g)?F).�]i6?(Ͷi'5Uo\"b~Ëo3F,mޣ5gZ[-~g8yhhzxJ6۞/�/45"'v,ܪy$#QkE[o'/ʵcf勛emMƱ//ڏ>Զ ϛqK4A&6J+-W%mN?&.|]%t/N_kjr576vʶ�yoӧU1h+"j mPW{gkEbm=!ձksNN5&~ڬ>L7}UpgSuzt)p_a'.O177yߤjW_*m׵xeӴo ˰ DŽt[Rd<l1%Yp DPT.Ĕ__zft\7l7}'N!H^usoͿUbpF,L㼛ti.ƢӖ/^*'9rp>fuy$ m߿Jkxz/6 ݘ88NmSI߼-ŵ2sq^Mf8Iʖ9>WWMwg*yԺM[~6Y8炝RedkROW.3�9o4.lxersɽ+[5o//)p1+VUe2h59iZ~-;1aGH߯n],eN.9ߢUZ痘*˴z߹xL׬;6p&"8=R'jq2ٞҰt/I5l:z>heI8 2g�,Lqz!#`p5CRsA?EUi)zei:nf0qDg[rQ߭hJwJ%=~GB6AJ10wMWwXex%;q.~_~]DS\}:=VJMԲa EK~85o#vK0UF'fcVJ1]F5آmcn~MC*c-naF4_ho.-9pVg<|Yٳ:e-v[yOJv91!1;ƺ<=|WzL(ԡ+N} RԔ tYN2_oJǃ8IB߹X�sg4:/F]9BOgNl'&N)ƻ3*Z#mQ=)Y3zUz -:;f˗73W"uj1d¼EjӕU֦.o0K ;:+KmWsWY^hgJ}#3C�FJԛMY)y %/:�}̦5v.-\||IjzRq ;*Ouͺ]]n Ki:qng.m͌|1̳n8N)OˢON�#vK__ٖj]7PMfVDG _{M8Q xwI'i5\d]Q.׿2éL%@� Ӵ]cFq V43S.,Fn-Yb\n/=^/XynZc0�cMoW[K�ũ>'Z9ꚽ7R|}^'wlq6ŒL,:ȟ9-{6/<4}1prXp5S:u6OHߖOGkG=n]w,qlt7FS(omZ^xy__el%eYNgEfL7l7$N$o^]N*ɯSa8>6i7Ĵ3dOyqǍw[8-Hc-?qǍ= }%Ի>HIͨBjk$2}/W֦݊.,ѵ-#t,XOQ{Q8٭yÚ5N?T\\_/w7heۋ|vr=:Z/X3n\78gCU\qr{F1gUn. lf]Ηcc8Aï-izM>ɨcwLivL�|�&_V81duo=i׉\rsu-7>Luy4趌1Vn /B(Vݮ+g�Ok]+,:,ӿIHl ߔZwײ:5;LeN*pk(]z:[^!иg5w̪WmMɗvp~D4a{'Ѹo�ksNlpcxRoiE:ѧwvV%xڍeSa\}ϙuw)Y%_pޙʅ0v =$_͜>HھIrZs膛]Q.<ҩ2mwxbtl{U^ m~ gtyj2R=}s~:e2clNr^YdǛ`i[nnj.TQkÿf^b+~KG?}|T,1F}Bq")4]gnr7M JҰUp}\ҳ%yϓ%ucpֳӋ b_quz۬m;jiű% mY#%xh0mgMc rY7_t|xc<3ng{5%ݷߓQXzqDt%xx9" ?yiCZ"+r5ogl߆z(L ؓxWPrk^z @ڝ9ԫʼ1'I&*eUW6f{�M7E)d_L)&^y͖ghc+uY:/\yeYɗ4hV|"Kw+ u쌸e^9p=0pJMC/kqpX`8~u|zor/li9Ym65Dܛ~Ê8co)W {яU.ivF.ŧ>>rsj=/)VL_s^7X4Gƒң\U\\9r.o&FXEε]ɒQ ^8bƸؗmqp}{wo;8v`fYg[]xxf4?KF3抛[re{_f\,aeU.Fu]Xm-nsT�IVt]nKU;M95b߽mvbO(w8Olx'jM6f>KZ$8[.dfoڳI.4.r Y99(9r˻kNot'TvW.ֶI4#.LsuNMM112ni^]-8-rG dmŋ,}2]vWe\Q< ſ2DxZ+= *ŪUݧib88R.$4WZ:�P6Xly|믟Ǘ~Sſ_<Dއ%�Gޏ=CLҰrte+]2ڷ&~-GnIG{3sco.܅}1N)miFKU]:EUEF.n9L/hJAeIxh˚wnB~0mXmFi-qe3ԉl\UKbCb#RQrvliچ}]{xFRKHr 7Mą-8uYmnF_%AY.MxmybS@7c>7eϷnywHXV<Nmf}:VJU(WJifx\H[‰+h&ʱ7KyvXiu'rrz43\˩.[}m11Ok}QKi;X݁ŊU094MiӴc5{3/<+Kqԥ'FNKkvoY/ o:Ɗ.=>,Y'~! pDn׶&mIuŁeͳbߟB*zEpoe%% p%G~igg7O[Ӫnjr(\oiGg$)!Ӱ囐O)o)x#e;ezFsm˙M9/ŕec;vRKt/V̵jҪAUsZR{$Iy000iS˔g'.ϱ{Z~/&T01ohV7gtS}4OliK'<m/U>˭/B8Pe{7Rf+R8Z~ *Y<ҚwF;y ٯq^FEӪ*/c'xe6T2[4$i=Ю>>)N0S}s˗n,wu%>.ﯿoœ^CaK.ǻq?*_{֕9˷tQnc?& Szdgk di7 %iVn/dty#[Gl׬α}n���@P�P�P�P��(�)� � �Ƴ?&}N/^<.l'iuڅΥk[{4d\s>mvWm%/EJ+YyFn^=6fƬkP¶sHۺQaP'wA%Bl02]ZTe_7381vc$ڎ"gf{t]&*]_;߯sExR4lq\loDzI{ W x. n=s7 l[e-Z<́v I 1+k*U 4>a0iI55lT"-ֱ8;~;4y�zٿ_?>>  ���P� � A~HF򿌗vuy>g38uLڼQY� �\�l|h}X+rKoqvwsz}Fˌ{/Uq̳{G;jmF܈B;R>k0W@푲yM'fdܥی^Gm_k_TEw�GwjYY\o%*8u;5vz7)ۍ6ˡT{{{<Έ}z`oj7!^di}W|85;a=Z7Ҩ}L�v;^U휸$1bKw/qfDwS?V 8LdrT[_zGFf0[eWjqƫ*))ߣxn7?o<Ӳ¾~Y-{non^G/k~Ru=/TN˅lMrW}&8^6Zd{J#ʟRߩz?g6L-եpV,>)鮖gM?k0q`:f9=##(_.ЩC{#ɮc�vc-}#Wy?p7ԾzUƩj<,%Yv<<?cZB|YJ_#�zz;3GO/e UN>'M8Ɍr8Lʎ^ETҒzQ%u+x>KͪyDӵ-S+OɍQ7I;t[֭VJ' pmKr[\Rgㇾ$ڿyֿ?;lMOv~Ծ~6_(Z�^~e'{~2:/'qDTb7K_;td%k[ud5voUd<x|J=MngD[W|<{͏`oupckmUt Sx=Xܚ%K}|O[Umg=o{-ٟ||9)bn{ kl_Oy?Ϟ8[[ =^Dۓrmo[맥e6Uܹ7uxݥX <Y??=L^glSmgyR�97dgaaGH#JP{}ju&-cCv¹sF5S>gNr(}woK<>?y0<iQ~ :t�*6VӔ*W4>lcθVN<G}<Wu1|OFI/�K{u�Jٿ|UǨ jrG}XAI}ʛ6xcS:[wǥm+!oW5VVT}mlL,ѻq2j8ц5[zWy;]>Lc'KN7#0r+We;l͙+Z?j|qC'LTS[I7ǵnk W8 NҨOl:,cOi6rHWۂS7?Wxϼ0?I?z_ٔf~{RUK_{G~eY+8=ɷW$,m>nQZRm<g,ߓf�g?SW-;<v6yXIsxQQ]z^.?'GQi1Wey;JRd_fiv# pޏ C'&Izro?nfZ$;j7OuKOcܽǫcVЭ_.?kO~�/uW͕�1_2�'?5}Qͯ,ѵiS26ܮzXjD~ X˛�?=*ܵ?6o2=jAy9;#gXه |Eq.Toءc19>'n|5g4ծ.%0T5~ΣOF:u+U+|=ױ޺agke6F sI>lvijb͔tm|ueJn;c voţW7t]2#ݾyDj6k6>�ɗ;52<cFl1O'.]_cVZ&k# m�D=|-CN%O?:߫ǿs4(Ęڗ*Ty^3_t϶o߯;?/;Jkvkhhl4̌.ni9K﷿Fg5*O6~K]oTwKowjC& 6ڮ}=]Kx:(yzN4Y2{Yߩ=܏*wQ̀t|Yurl[#eb~uGGt[*޸>~v?5rp<cr\t쉬в-ݓ=*Dm _�gKN匶O{-lF),/?r3]RIir)-\%Mz]n%<=9Ɛx#BvINǷhZ6sb83 6[1/1e}]konԉBå^zj|z_x5<KѲukQwNn.o]k7Mwkܺ3o tmj&{vy37)6m&Y,<ۮN>_~#%)3> _ɭ.+qi#1 'Yqߩ֟�sn,U'-w%7TF4~m>n|Y}ɜ?<ڿ gfFK,cUnIz�48fHkvYN]6<fu^"k1*ܸ1ze2oW$Oߖ0࿚g"jdew95gVU+=nR7%8w,KxcߏladwMM~*ʢ[W-Եk1hXd4=sxpǑJKxx?Vlq& W2eﺒ�uzk-Hd�o<';#28Id8~~p|R|W﯁;'n;r${lucFp}-Bړ|/ZkgTG I.*cMǶP~ݶEz cQXli&eO/*&ΎGaɺ(K♳xlDө@7>t&].p&f$̽S/'.9.qdkڱ/tUrJ{m8ؾ;Vq_xN }?JѥtU~=R}[Vɓxq@xCS2q9?gbÓ s(6om,V~˩ .]{FVF|;34BQKo MܯS|ӓ-߫l=S[Gf{2zj]N+^,zy5[fc6j&^;'zdɺ(K/S3Ǜv*ͯZKR}b8p0^_ZmDV߈<>K2kV痚5[ Nn5^�Q%%1{<|MG-k9td 7ϒj<c9jy4mzKV� x4jZg_d#}GK~VI.=bKU:յkzF/rb:4E.$~K%h{Ni+mrceiXq-פ$r[2%t{͸VMzF(SΓ}׽xR_:,7T0! )Ez6V_?8?7HIu7ڛI/r2!$ڢ&_gNYsԛgiu8i)}1yJݖjQqImz,:j/iѭL%RG)2]i1bo+?/6>|Y/ 뗤^O-y)97ovN%.~�i4r%RZx#,~֤˾I3V/C^: �P��P�P�R � � � ��� @@xw_]?ϩާ^^X:6n~nND1'io9bLL^_o"M8vz.}4my2_\Q..'V>+u'eۆ-Ky1N1. ~qlRYk3K__ךP_4Ͷó-*udEvMEO8ebɯh6UCWvF= RMd)&afӧdkSfT9ij͢o'7S=|Ch{>C'+M~쑒zrc4-K=K/%)7ڳ̖;<97ZWNܐqMKa]fX]X'ic4GiɶeX&/w6SQmdr8oI¦}cZmF(F;ƿiuoһMQa:mnJN8n͓x%:0?=gdOjTvgf'wcr]#A7'T^L%diϭۜsJRk%1qs29x6g^ ]H c* �}UsQ|}]pCmY: J3\]T#sG^編�?9�;f|, ^6æf���E�"P�P�RcE7d}t|?̵۪dy5ȶgY76.wjdDm:0t<z'lc.][zK%ZG9X].YPkN^�6_E?Z_s^m;6/(P.j %ȿ'>_V56Kn)uu2_,Կ%][f^lOLl%в4 Y[ݺ+|D LӥdVϹ;+~,}a4&-K#Ue%onǣnՙ*^'c@[qU즵}Ko ߧy";#}]~+f/閣�/�~z�z7,#js7S۲qon {t�y1ٌ};Oo jw\Ӵ T}$^ZrI5p_>^'NߛTaU^KWR1S?nN,SI=aےzg͓t9j9<CҌ*d\d#hLL_F? JYTP1Ia?h[-x)nf9Ffޑ\!՗VV.ί�qh�y?ت\$y;q3+Nkoٯauuɇ0�b9'T:)'wb?a[I>I{s㳜&ܛmFѴ6=B_<BOW3~U\y>YڅiJT~W޻6{JM'Ͳ^iWidbοlV;Q<<Yri/1hk 2^e"U&XW 뭚8)nmeiyz͓1V<VP[+%-�%qydyU3^I}x;S~ᅚ_~iM~ ҵo4|"yѼa{,=-wenO0�4oU=o?IZ|B.B}o[Կ{NRRrS1ߖUo$7߯۱v3h|q4tPmv{83ZK8KLz6*�+J[Ç?5}y:ױ\!]O>~]~e͝rfO~U8zncNҘ֮q6ӴIi}Lw{^3E/W_6Crx7Ogוcɮck{ԗpbٸ&91s`8O~ ZQomќKsvoWk@Y5$\Ҫkm3sbϢLK`p(=�<+Sv95ʗRK~ޣ6II,3#'m[%=7{+XoK<>?y0<iQ~ :te_yO?611C�}U ntm8{7�oJ�zjz\Cn]]%{umKjNl~ru9,}uo$7oo;xyM T:q=0߭o_{ro~!iZ>tc̫sc)5g0cIӸ\m 1f[C a蓞~~T." {}yvi:ir|"/;(z;�fq|Yb )}n.x:,| zzfK[xonaμ׉=K OxRuu֞)jqۢG6/CWlz3~S?=|N~*cf=ҿ2oHug^Uc{oя<gc=^a\%d\")4]&vsmJt:-|0edY{=GQ&I&1-,d�~8fy8r؛K}O1<LshZ^v.^d+�yK|OO&>e&ڬj,&wŽ:=VOO <x'ͬy?L׮_6Vq�cƇ|gו�G6C??Yc'a~;><�o4=va܏Ŝcf?H}~ti}UV::N׌_il}&_HZ)QVѶ+5<Yf1;8nzL܈[(Ůiǖ0]Yu6k[ #R>N>E.o^ڴ,Y\I,.+`vI|O3%-'z1Le|UwtiCߨ:+xU.x.6d9oG]:L߭lqϿcɢi lUA^k KPIDy&|u<l6t]Jxzy͵9vlQl|0aޤVT+};6=Gyϓhѓi'aq>3Q9uJ2_WU}=яF> ;ܩOFw6λ(7}N#Prk|ji4mkw"�&o>+.d~? 3!꟬o zߚdy/XvY5 m|ЛR�#v 8 tO''V>iAÙnZ4ktݓ-.6ar#e;_sdO1Ȟm~GPχ<\rk۞)-1b՘94`q6 Ww,֤[}yu z:W Ӄ#wG?gU7_&~x7ZY/RNjS|1(&W\Ԯkr8kj/tNwL,YMʛEvEw5:i4ڽavexHU?pyQx% :l3dqp~L*znLKz�^%b:Û/+"S誓ߑÛJ&#iݛph-r�J?9מ+2~~J> W|Guz?;<6<0qGϹ~m#h=� /8i8_Ol ;5Vz7 kSpŶ^LSonpblz#CXy1oxG'͙5Sh#beRˡ5:j{.K7iMczC14F_%d:-\W2ɻbvS~ҏɚ[ښ8)k` z:_сwe_\:v}l&o5e_)`VԦv:_cz^~\l{7c|>s[>J_&*Gqv[s7ܑw͓ZNs]rC%+2ɓl /4lr9Q]޳V}Uy?Kv1_'}K&_7SK0Ͳ}| ]`~fN&Ta>f[no8meܜRFNVuܤ==SB[x/[տ?m<I[VYd裿l[o88z U1D#)sBMor1LIvxfr:×}ff#iwk};Ai|;gc�S*mwM4'w+6}ҮmVq{4>J6�ha%/r(7淮M;_rzBK݋ +Yl%vޔ{jCbym׿bs ؝jԮn34lZV�s}bCFφ,LjO2i<UKO g'dZ^ӣN:պN5R·~4F{V~nԬO4~ն8o}ƞw(6qj<i-I۳�GW*zjGjP5yL]~l~(Ir]ðTrA(HrӖ&kI�$a+5 RI[gUj~oG￁ϧ)'e%>slg:Sͪj9I,nGq`gϘŜ=`Վm:d?ɏƐhȔl{UgS~ݖQȖO;I.8>պ~U2ci7} Mğ8$InCZ'žT*ɖ.L.KtQ V.6\nԤo4sӎvpӣՏu#[Km,~qo3< WY�x`&ߕejF`ꅵړ]]cG5m4zmXnWdfml[drϲ2g,z+ۿoLG5g0?kQ~hf]hSyѮ˾ ?ɶ-:RQ۳sFF¿cV\�pf8$>|SIF{Oߜ_鷒2k}1ccitI{^z1 ld:"6?3_ !-V678f3m2tB$6L%UDlr}5iGOߓ .TYhv5<Je[MoiiQ3�(������@H�P�P5WO3qzalYzm:?i8p=-kNUirrcgvOXl:lV5[sm�yޓ=!{ϣߍJYsKomv{k5=f%zvG ֫ȫ!&~϶*hsMbmCUBĻS6$ 0MuS:b�Ƽl<3 _j*1^s$OhGk3ٵ�Bpub=*Lio]& >%1rYKgc9sKopF>Z wP%\-տ�<lmb~ 'fc2|5Xѭa}M&#)t3 j"y]Mn<v$m{!LZ^,,Nɤlk}Ҳjk|\\QmhCioyOKL+.Vܫ뭙w^>~թKY/u)̮/6޹o<׸m_.p0PaLot*{{~ogNN (U*�6rQt2^$FRةñƩH_H5Ȃ7N߭x]N?{zoϰl:fj�B�P�R(�� +*Suqov6�a[ur~P'Y;{ %8O3"Q٧cixtqlfe dccHJ08e')9I&m*P^}b&6<}۳盖kV0H{3|W갧J>rp߆73mɹI[o9)$MW&nkqYel9I""#h2d5$M=/QzƬ^m~m{ͣm|:$Lm"uKgdyɷHGAQ͏~4L{J8[q5,tyzU6)/sfŎkl� 5yVV&+@(Y,g@pI͓7eeUJnm#g298ȶx7ڕ7Z\[lc\T" C1z.[';o x+!MѿCu&kĥ)rr{#ndʾYۑǂ*s&%Bb'nus{GAM4k4QݖΞZ\mc߆?$VNMQ"Ghͤe4 JSdOf1Qm]Mum&+UގƮj9j}=6pURjow62z¸rnRm(nd<Sb1V'#p?N4k=E4FsʗU/پ%ZN>FF5&5gg5sq~zmZ7W&VnfcO/.lrJҵîfURۦo$kd9JOb6y9C"CmqV;8JP$%֚{4e1ۦ6{+@-JQmIuRl?*u} [&ۘF*Dr+%w}ͤYg298ȶ>VLܴVe֕9m%qҾu Z~1<l?|6Q(;&9alnzӎ;C7^R99Il#n ι)Rc٢Lo}mskMHG@ߢp߷Mn&=`IJS'ݲmrW\y+G3ik< 3\׌M|#6'=%ƚbp[o\<g!z׎� 6S ݹ%a&3(oq9B;E-1tC/>Ώmy{ xc}5errbbb'Yerdb"#MUuOɡ5mk(Y5}mc2JVN ɢLD3')O,F�'#mOƹ mZ̼۬*&巼kፕd>9JpcOf1Qvvm̾}cbw=GYɶܼm\1rrbbb'N.k')Ov"":(:#6|Y8c}Qu5;%߂[/+@R'.ƞ-C>p监(}lF:G=uvY[r/bLD s)IDGA@[Ylv$V#yٵC2C64'fwQRRkRi.2')IO,F@i5VNxM3̈_}𝍯JפNP$%ٙLo}NlIYlg4ؑG4r/Tcu+)=xc8;Q͍}s/P*DZw]qBkߒ~Y5OQ'.f6^s[9/ IDDt 첶s{ JR')>mPgɶܼbpQq=,ըrђi8-iut!ٙl9-ʺp啍)X]mk+2h=GGVLu2h=G%yWǖ^k$R 5YTkc5u_%+GH7Q]UejW4ʟ]mMUf) -Pʞne3wԼr:iHb3H]l# gьOQ}l[NxJMmW﯁Ǫ e]u:\u}p]bim\g&QNNE/y&OXG͖Yl윧/=b":+ ^f]Q*Ghͤa49Jrr[{eEXYdвQOI%)MNNOŽ˶'8=9E&"z)IRrop>նr+'ٷ3؛B> >9NQI6ܤoiw9/ή<[d,^ h2_4dOb+,sHNEBk;%d9xDGAPYlW{@(vX쓏D@xed<ȶ1ShkYnRmQiY9NrM7䜣Ln =oY.^ͷ@�g8o)Gmm>(G>me+l@}Kj 4IOQ'9.k')?=DGAQH�}Bs //bLDv_uk.kRlEb:Q댚2 =~,�G,s_bLDW՗]o&eIM₹%}ӏ,Qrm |G[xn6"^m?'�rBRh('lNsR^ he dd[D:e))%ؑm4iQ9d''"6 �(���� �@H�P�P1Y\3K#�gu{;?%Oԍ iJͽ ⽬w$oK}rTa;i""9 %nM=1 z""7l&K1EmpNP811\SivlY9RX;m+ʷ߼h꒮+uVLdž&wc9G˴#dZ8<OdcG{G #sus5*-Գ-\r͘1buMG5$߬ݴb1TC� ߰D+1a6_*g̖}cvg(]FeWhk}wk#/]vi �~}/|a3U�� @(�(�)�"b~ 75-7^ド]ٽ[$<rqZaF�P������@@H�P��H�P(�(  ��2;V ʺmA-kiQrcGLo kN5]\jV5i4H@P � � @P�7MCprai0!__3Q<yngnm0(�,j(MvJ/f1H(� @�(���)� � H�P�P�R��E� @@@P�P��(�(�)� � � A@ѲԨʶ2!=ikI&KZEV "V`8bR!7�@��>9IFM)-O ���A_M]]sk/|g$L19V+)rOf7V6q��(�(�("@@H����H(�(�( �����A@������*�T��B�)� � �@� @@H(�(�(�( �����AT??>گt=F[yC O&OUүTUU( ~Wۿq<0-ǝKzDM%;UVVݹMy"ܣ'nƺfb1#7\XRl⍷⍷sMɫ;R{E)v6c׊&ܷ}j8+&t;.j3MǸ8ᇑkVtn[i?e9#&ӭc\yim$c 1r=B<҃Ko(Y8W(Wl*m'$oL/Z%oվť.ޫKM\y۫d^+nf=".<\22(b7�-m+h~YN'\w%ʼzɓ,V6faưtUo7f�ر7w6V8y6.�a)&nķ'22yձP#[9>ŵ'iMr)ǙB?O.y<_VUmRQMn͊ODD2@0hpV*̯yaQ ݌[)lCa%M4f6*wk#/]vi �~}/|6 @�@H��@z^_;ygL9|wm}>.(n�@ `h:ΡWM[S욆~M7bkçs3-K~K"Mow&@ @@@� UԀ�=ݦIžPodlެxo^=22>4zVFP(kf}����vq0ss&mV;[%)❇UJA(l2|}UYvY'coԌfb#yG6Vf/_Ͽ/K[6ݻnJ޷d� @�'*^.=-kdckVd21ƱՓEؖEѽgqQ@��PE P�(�(���� �scddn[\_aZau6cU3M}hE @� � � @��02 珉}Og*r[u)Mh��Rx\냖^#q'(N.3ŭ~~p �;afUWMn%ӕm/y^;D  �ӥ7Յ|ku%5ZD2n2 Q{43=�� ��� @@H9ʾ<]dwxAc7ud���(�(�)�  �9IF).9mȥ'u֟cHOIE@��媛SL۷-c6>g NjkfA��� A@@H�P���(�(�( �� ���T �(�H�P�P� �� � � A@@@@P����(�(zι�x}]^<.bSg.o6e32]u;,*km⻷[q Lﻞ#xc3u(߭Җ=6.(//\S|׆&ݹ뱷-Y?<q2ۚMG~LF{:Kҷ?]Cyx:{GD㣡^^}VR~nm>pŴףNE2DztUTQɟ<ox�}L9a8p)<,l{iPskj2߳}=wl;ty?Dۛ7؝5N=b6.)쬻9㴒]}1' qu<mwYl&IC%)8eY3Ô*P,Tc\_巳\S1IS[ķbX}$mjN#Q-<#gf XQK9\슓RϹr8fg:=xՍvFW7gȌI-7gyc0_UTEf{TkmǢX;:zw**ǝ4eR-ϿeM<#OӨSrZ(\fGn:=uB1%\bҕ֩I5>ݽ[Fw(k6ܫM+,=^f<<dӑB^}Ɇ.R1T V* ꥄ !ZwpojG_ٌn|uZK|`<�=cl߯şat͂�@P�R(��oJO�B}{z.I>^[Mi3vIznm%)7Iz~R䳀8ZY][h:)ko\?huɼ1Qףf˓> 3-3�+c�ӫ#<,} 5�@&N4ѓj*$?VzӋz$żf{67 0R3tR^;1ׅͩ<O%ʹYVrqxKߑ^.} 0 @F6FG7o/o$կYs뛄(di&'Q@� n^Lpt=.'-O7<卺6&Eji5y6ioԶh{|{>Kt{W s}*Kumztvi](WRoMrKٳ8ߚp'XT4AF5 WˋOfi٭sЬ<�7]kJ~^]rqn7U+VͶj+Ôʷ%{nwbN@$�jW'3�HOlLzGF,ެ ~_UmI|+o�Xg@H�P��n>LH._'hGOk~-+ѫP�P���c)(n/HڸFZmؗ-qh1=RNrQUEQ(xԉi6N4ҫR\mҒm<gڑ-dP�@@H9qwUDZj Żؖop><2qSVm{um8pj3 bZq@<|G6c3nFWcfъCn0k6 cJ㗏df{riVn1-Pd� � � @vGQΡg'܌2_a~IƧ''OQmٽx}D䙉gx{ϭIh7�_o?W2|P�oO�kKU~w"^Xt̀q/ھ(c^xz( KᕬSlyOd5g$]\f=qVߥ˲_a3nY9 .*%4vsӥxkQ@�@H����(�(�)5OG񱖑?/k=d��(�(�( @t{7Og6}\H(mۢo$-'& >W*_~37kQucstw<mZ:+?^J�P�P�l|#fW?/Z'͸P�g?8ɵ9fhMkjwΟ(ǫ'xRu wl7 P�P�R��qu\|R&>J3鸰Tc.sFKMSvP � �@@H��@BU�@( �"����@P�P�P�P��(�)� � �6~&}^WWO m-B#}/)䏵h; 7_}zP}t~-e}ٍ6`oTG=U (zbcOER)mzb6vGPFuOk.g#0/H6Ɂ۶Xɺ,sE'A7^"v$ eÿ$ [|oֿ<'f=@W7gbG35P��(�)veO%^WFWf�N9asl"u}8}N<ٺ`Aا6ݔdl[i}rR'i(&O@(ߒX&[=Ky?6yJqfCrk/Qgw+ъ{̰o*_o[F|7 <S)}ƛ8.ȨN(}F6N42qO+ ߼m'&N8%ګ^ZvWeSu Bq팖}zgWMճgڝk� ,\IIJ/&}{uvctaP 6I ۅMjq/)Vid#d7$U͖nm�G~ Xى]BQ/\M?ݼ&v[ɭ�r^>V6Y7\}mzjC6GP׵/4ʲx^)uvuj -XCoW5K-qrq"_E供*n;fY^}U%ѫ&W 1 t')Я٨U NO1[Ir>ǿ\YT'tVGO^xO~l,8T&7tbp.9^ʿҽ�p_Z2[f-ЭNPi?%�'#7Ƕݻy 巸׭z'\gFKIlєLOA�ؖd*g|kn/YQdɗKDU6MoCe%z5]n&Hg�5 (־6kGŕι8Y BKIl|4$x˕]4qnu}5[c]p� ֽNۧtdשu5i%MWFK{Rg<m>^$YKiٷ/'zgjj6Gz߾o466c]n&J]uR_�4v}W%e)(-ؒ&\֟ccd>'%"o\`v0m/z28I}MYT?ěDF"Y]M lLO8Y[kgZ`oXG sC&ual]Pm{fdq2ɋ{x"iz]3&*dgٿ5S:imW5XΪ-WkHmX#kt2[>#o~"mz�|:0gJ\%(#Y|.fc'z:)6IrۍLTǶ84-Y#T-4tivKmmIWd'8J3-lLO1e4q^M@>&a W7d*WE{{xۣ1-wNFuQ^qi;y{}(|.)ݸ{}d|AyOJ!BJ5R݉ڭ\:(LOAen7o'�f~ a%k>Sȳ+wَb1d,:UeR嶹^[388U_yz]<=FNZlnXc6#Q$8q�fxI?nϿ4j}Td2~6o.f!mS;UV.Z3']˖JوYm+aT^U6tO'o㈢}(ɭ[^mUTo,[$GQ(-IA\dS^ 6Ia4`}rm^; AG6tO'o࣒/7U6M/fd|2g.eqpoS|leF*=ߖ-QY8qn2M5ڙrUUskŲLuJ\-Kn5ښrQ\[3UeR嶹IlH䣒]sܓ1D'8/N�1^nmXIO. ڵAixbd]}已CLd쓔[r{wDrO/mJ]dbѴO#Tsoeߺ1bq�X.5iSt":_cqiQ>lt\GN(uej߄V䙈|BQ~[ Gڞ_:d~f� CQ0+34~3zRn}~~P�rBfs]-f#i[2ٮ�]615m_%qkluk_QrW֣U: P�P�R���P�PB�P� @P��A@@�����(���� � @ MWWI31tlxyѢxІZlQݫr֙K]V9*mVl/4_.Il݌=+'F˚NcQWbaOgW6D?^FJDz0'=k9bIwѴ!}FTG�55Է~\g3 MͣoCLn1n־g4(Ƈ)5W<{GI˻2Vw̺ZUmfCw޽fgkLl-~V֩qފ۬enR{+[q- dQRYd \7)u-/䈙7|cxdUJ2ΕoI]w}#'/m/JT],Er)od۲-uwc-.[CxF]<d߫=}Mo>J^/"JWKhob]*}knIױ5mь5<*0I[̧KG&̱d|`]:JW3b|6$L+>I۫¹]Tܹ\spkђkitً JvJJK)MKuuGމl&wM,z"aJa87.yԉ\)<z:m^]֖ru{/v}SLNNUΦm8U$UߴƹWhln΅-MOefSh;tKx>QS\6j2ukqy#+MĭbcVms[X-ɳS]E3d-9^?a,ÝXڡ[ݥ8{HlEUd[=,\fq]lW^36|x9YսҫMmϾy~<9oَ:= a=@_u8=^6F*s}/_vi �s~}/|a6*�B�P�R(�� i9t?0Kּ�3]? +ㇾ7. ta,X`v*ou|n/H]z:g\ RQEUo:{n[nt֓~-xX*>655qWrJ]^ffqk.N-SϪ6Q.Jdk$WϴuVJr--X򉁧gy0\Xjrbm*43q%7\{Ƕ�LrdfG)xP=?&OGOrO?W//wS<vqjS1rlQۭo\L$Wwح-I9$L>zׁ?KtϬY=g7@9ttSNTR۵ٿxzl3J& * b-[w%z=938raiɅN*[پ]<Vf=ex eCf$v[u�ZlfxDpqӝG썘1g)mpN)KC_y%t_SܯtmI<d䦹l)<NJ1of"7~:2̊[J3-9?Ն7g|uy8kÜ8Rp.UeiD*޶_vve7\ҫ wB&II/١Zmd'oVT4 ˫gʶv9⌞] 2z�iV~Nv.L)9AGE>4%b0E]jxw汎<auYϚOVļoNnV&Lmr)IGd^Qۧޗab~?m_shh]ԥҕ=ǧw4YL޵*xfQYԺꩨF}gIQKحs4u _CZU68t?]%_1e�M}c[%nv<:vݐ7r=hSC/'NZ7j-N߇܏#.'ɇ9b8GViΨ].X9ϝswu_}\RiswFEz~I�?zO~egjߦ52YY%>'>I鐣UiVKq[o.g.&ItSՄ0O`C'x ŷ؟Rx;ՂiSWE䶸F]ܟ_tu3nYu*ծ76<tU nԗku38kKN͗Um;IxXNK$p˩7vH6Fƺ}Cv|i-\Ko9˵L F \]ǒ2R/lz.SR^Z\-F+ǻǓ598)ь>Q0吡nt(o5&|39m^*z[9:d_6=5OoUFũ*/)8W'Sؽ^/.Lz zCżQVS4g;!R1=t{̟6m{2P6 ks)oGʊ{s/gǬN*^-V7DvLeڄ S8qh8;nm97Y~3Vַpʇї]-N4ִtJ^їҋg,eZytٟzdO&<?9)vl.X2\ϝ>_y.Ԥ}jyE13q1k%IN1[.e_ۿt2ͫ5%Umsҹ)_mmK7:uiǣS>p2C4>57TE%i.׿KI?&QѺz+=!CesY|ylݿ0~S0GW Y8KŞѼz.>:7+Qq[ɿ^<[Z1чW[K,-O.898N"%8ɾԻ~<+cg}f-ZVuwbC!6RK{:ף9+ĶISv3֟i86 KzS%ZJ-=fQx+ ٕ96[T-\ѬW Dѳqel6WR}G& =W "3.Ǎsŧ֟uֻ {iIы,V:YFOe}_i;Vs<͘o(zu88AVm{F$&|.NkZ\%)vרk3>z,ΧƘxyrŖBj|u۷SǢ3lh:n , v\o[lnNzޓB^kğ�_/iU~ y ~?y[cZyVdeC.�׫8z)ͫfђ#Rg&-%Gb;LլPŧQOmڷ5|QiO&Ɵ~(*cF߼|Ս®' Jϣ|[z.g3R: -׎mtx'<\M5{QGBӥjubd"MYwt$ԵM7ŧy5iWWg6c '[uܺ˩{cf;/tݠ�eKrXߺM8rRquX;]trm۳ҶHq2ݽq^ezV oFVǢ]K�/Ԝ8Ɍstx3FͿ*B2mRdR헷Ww.|5į!N%Ԟ'7.űtVe6gi`[(U|}]Ϩp%XGտg~o#CXó?3D Lu>V5_.yVg6ӊY= 4Ӣ[rRK[/�Ǘ}Et1xMmvFr2ٛm(⬛9zᑎOW�3ukQ4&|lN"ss[zO_,Dy&ۻX9wbYEQU϶> 3 -IѠSӳěߑ2O+e ?E_Gߛ8WJ)_Io_sz̶mS4ʌ^֒P=KǦHM('5_%)W.OtyVN 8D'?fWNukr7ɬx-Xqmy>rbl&KL[앳ٶ/^Pְ4>\lnynQ/Lۮq'=֟/~IC\ӥgʍKwaWu*]ٷ~睗~vIŘ (SimvKo2lmOAA\)=˱gX˥o`O0rkZy;ՁzoKZJĚoIѥЕZ-S[NRG~I{6^9G&7~wU/6 /0\Kd6?]*vlgnXƾ(68{_[o2lp^Zf\9}}v2qF&5>;|J\5WKkF)Z.uSSjQʏWۃiXe7tӪn<<剏U2Q^yix6rq.6>fBx3_sc[ oB�(ƩUg͓GUѣ Zh[Ԣl+e)X:L&MwmϿ1m)&6b8lݤ)Wt25g' $CUstUrُ}y,CPυ/#v[Wr[Vhц-8K~HUg1[/ޙM12uk)Yö-LZ;ĝnf<rǛUm}g}m0�ORKގmW%NOUi*◰ oU7oᑽj8tG*%|m<0u+'*9%)#<goXbj6WRڹ%8 6SyXg4,|LdΤ#6$xw+ƚ�i۩U1ƌRms42w NY-E}sۿ3d]VY_LQG;lbT~mLΦcjMQ<F])ugLV|^�2zA.48r2*{oa9vV ]oXRÖ응/Q,?XkJm+u\xX*ڔ'Ҿmܑ-f%jZX\7&)9I9C'Fs@aNDy1}ŜMyBKcW2|0 d϶)(ʃhbWuNŴ=xq?j3OHah�vo+:f<2C; 1z�i1njuy:(gu6o+u}D?jZP�P � � @�� � "E�@@P���(�(���� �@H�P�P5?s31z]~a=Ohc.4[=kqU̴}Bpˢ*G}o3,x=?2:'dqP'oIKNmNc}6b΄M-]|wI$4Btdܱ gHZIԟoY{qhL]GX㒝*Pqv}Ž+OF30bh:FcXPsixQIӣ&%F<R~ vnliYSxv=J,d[o1om~'S"eFCLveSՎZm'fU9: '}mgDDmI0cyAE'ԋ1dk-]}nrۓE6CeIJOEر.19Wz)-ELo7fhwV^kےn]cevl  SW /ߒ;u-L+Hý$ ^k~N?kzoϰl:fj�B�P�R(� � i9t?0Kּ�3]? +ㇾyRq] �ꏞyKOS8/#[?vNpvOчi"] i_e6$z{3e{6Ŏf<gSî\;8g-7M'[{'܏v:sfג_<yc%:~S?Kr~Œ;Gkѽy?<w?uy~X� =mo+tlW-w*z8+oUG|1Ģ=fLR2 $WvtZfؿ&3_c-5j-;[Bmx_ѥdH"]O$?#V>O,ҸU&GF ެ κLx,zKӨVJOF�n[Y5?kKo<˘yOeٲ"8fE,SMWk7ͬy';# P��ۉѡ?/?[uyNO7~|0}|QhWU F J7vOdB:_ԡzj8{&SL{GF>5q IAo&[ZfbJb)/i0V28غ$DLod2zt۶nY~.ٓZ<ү?Ǯobl[o-13,3jߜCtwɅzI�?zO~egߦ52YY%>'>ѷVִvnE'K8{2cG&5ypB95vLF^P \θk<M<o8O ?^ɧhvLf-WeWYUqq}{U%bEvr[/ј?6qhIrV}}I|H|l:'pN{wu41f'ؕf/Ul}|}okWɟKDUV􇛉~nFҵԥ_+OvV2y0y蚄{ʛ_/_w<f՜N9TPe:ދ1b{ȟsWmZUwRs14Mvˈ$);rvuR<.!?nu+ѵx M~J�@OiUvK9g#'@_&8m|#Z~ŻH{Fzcfj6Ê2u eג}Ŏ' R}utEǚ5_Wn)>Lz4(j<e�gN9Ze�P>겗4rj>y(CWЎEn^dzyr!ի+ɻw)>] 31;0kJ1s{$wlbXyӇv}SnF E!k]ɜ\姲͵;_in( !CCm|4{Ū�V�=L g-O_Z)cWs? TJȷ_a囚OWr8}N{k]:>E>�v٬q'viUV:7(0g&1PzNLRg*̵> fWmZUw'FsocD&=G*ԟD嗆Ko8 lq.g&'Ү|ϱ?a 'X^ <~ *tk+GR+)>Ƿz}͂cVS #EiB7 2[NqZtXyN.ne[\Mnzw2H[WAk&'CDzk:.Ͷe,ttxfY`X]qQ1rz6/(/OYӗA�*vk#j_iUXY /bUY:6}ܒ<31\KRm2ޘz~_Yite1#+)C>g(58-Q槬 #[)&;I7/[1G,o#U?ɴyB Gg~g~}d| k<7(lj:Iu=Le|B8ñrJ+�im0CTƅdU]I%$Gm"&e[|W2<u|�Q3=wXYj,X͍t}}f'l4,z#S~ֶ_Ѭ%ҋڏljl]'!q'ھ(#A߳g6kz.wa]nuŽ_š[Zhc|->8ַam.Ӵ٤ ܌A6)Jk,C3_ 5>Rz2<w76jdg\m0Ik,wk18e7 똽~nOl1F9ܖW:ĊjoٿW4}$Veg͠%�Ae.QjnuКiMu4IqhX̛O[Gcx2(q[�tDOs_&slIw)}>1u2ލˏz̒)Kl66Am*#=<2o8eB,四iv%/?+m܃xߚ#xIdrg|td-_G>=͏N>q^�WX$4[#nc}'-k=Ir]3꿛5<2CilKg|}g_u&n*IXm(růJtbxB*G*6>nJ)tIɤۭ3V<z8QӮݨmŶc֭r#\x˵4G^*!a3UdtLlտF~5f&}:y53<;I.siEgR%)MԒ\hȸ64х&06N/Lu?˦Kbch~Geş9W+ɦ4z#[!Leʼ6G,{Ŋ�i1c6*uq+r x"_)M7۫S kg ٿ7I-4QM]od6.+sjzBK9+(͎NM.]>]+;,Qj]KѼ2ù ~nZK]Ώ:WN7?Ϧ) dUo= B?n'4j-4}MgOoC/tGW,]%Ԕ平}Xf7W0xm7 ݛ$<NמԻ͘$2Zg�|Y'<ڡ֭#3Z_oE˿^G5in}*@@P(�(�)���(�(@�(U��A@P@ @ �P��P�P�R� � � ��� @@~|Ծu&ϫ\OTq1nxN3uK%Nҋ]qڦ)qT ڊm}^Xiɝ[ʈ-C*t%Koa&L8!ʲ*y֭|U[qQwZivwFbw8\Y:ߝG!_Xmr2Nڶ)6}ӣp]I'x]lN&̱}ck8ك *]y_+ongljoX<eevqi-R]�qgXMjU7|:gkN[w>rgߨa{b43 E7q[lǦbIR"$1"2.В P1 %ˏtZhn]Z}x>c @#||o_>PQ7�?9�;f|, ^7Cl� �"@*�� Ӎz,%6rd1 /KZFlr7KkGg`L6ܾ+X{L޳w8/aMss$<:||36 :qPŜ[b=ޏ;X2,JsM.{;Ly&mraXk\ ]snxǭ]K�c[z)nk׼31:Y$(tn^E)W8"'oyíqni_8zU[r}][?.kDW6mgpigd׏SŔTɾx=yXߟ-\&#]K= -L1F:֓ +PǪ�}mpk0d~*xcE܊18Oɶ5S )엢KWYEc)N԰5>X9udFI-G7gb:ێ6Jk9]*jԜ&}zaG> GBebuxٺuOywÜ1]Ě>-s\Ю{�nM{ܜȉv7Ɇve8#so{GpFV5F,Y9Fq{-N=fXSiZiZ"䍜"ݻ~�&6Sl3|{>h)ty^8vZqtu =N8P4.k]]óG�ekyvfU QY-|˨v;ޑb'33qnϣ\SѿGYţi�ƯhwSE<IFɤ_Òbkch|}9z ޝƚŏ>o޿BM50~+W6? k:rNuIrVsQjpFjpVS" Ց}0oNΊ}}y5Z}<Y9n~?d8uU>Rji˯nMxd|tqi>MYQdlMXô0HG6|[cRp_c4zϱt$8LMiM%ewK-(˻&6 ci�\57DʏȌ-dee�}\^Pu/;A8y_oOri}fZ9){F܊6;ɮ+72w7_/I-m W׆7jCmw뺍3yeiv*:1e8f>uB9=FEfحpWGSm]OxL0]|> ,Y9JY b߷2Ycb%-7k5Ռ*[R휾_M,6ppA̓ef%++OxIz̵Zh^]`ݼdz2̜x%MISum1v<9xFU_lj4˙7)|NF/1Ȼ+"ܜd'ֱXᎌށ<YIvG[b慑R~i/[wL{i D2揻~asj;Oo,qeZL96�[v$&i<w\n۳2+(MWmRXߙgjV-/*uAKM| ڲ^M 5fSt3Ҫkx86 7L<W<'&igxݓ5{ُb嶴w5G>fi1zȏ UF.ͬp}؎_p\5:eϙ�>c}Eeweۗ>km4)Vރe)΢y +Q߫g Q1˛mFj% \'ؒݞXhd RŽ]W۩:W6cVzLJ=WJ8j:zvJ5#bɓ7(cͥ')9Iݳ֎LqxZ.u2b7�7WǛm&Ⱦ5IOžz5V6Mu|=3#7.Z*mip׉naJjY^o8ʥt9E8h147tSMFnߑn?3.&;c0bprϯ+=pn}~S ZD*.8̺}^÷Ky,6l\鸜?dU|Ϭ⽲XIo;=VMݕ|)(MZo%ƹXźsA.=8cUӱ]c_Mwmg)lbo˒Lsh\^eQnbJHrFc&Ǻn,12Q-[:,w6c𖾴{VB.i˗[|Mڭ?{XY^f'v<rq\9~߼8"&<ݍ3\~ꨢ,f[~yiymwyS5:kq_SG&1K(xTӳ4eV.e6E[g{BD5֥f25G׭zv1s̯5VlKoZg'Q17W %[UUF<ұFOÙdÞh6řkW*&Ӌ?A#k"YGFW> %&Um幅z8Qӱ˪ڄirGͣnLb~4qή=K8Y?23Raǟ 1'"+Z$Ksџ60tFG> -#ŏU:fvtr~rokHf=pֳ'T&!l'}oÜ8rxcDY\>~Ub^[W>XG9a;6X/&%<vlɼeI6_ZzRm<G6;shɵpWfy&7߿�zX3Y%}2w%'/MɨpO?^2ǪrB2w[vk.o ;kEҚU%Ͼx12l<oF"ɮIB[Ԏ]&;Vg6Hs^^V]UM9l_c{^&ӝ)LeFKɿbZ>sBʷ6rbc4cCS(]:FOC8Q*fRq{rˬK%_sYY5(m17Z!]Mϓ'hr-GBб% )WdKR~cmm22mɷ&罖KvzUV"ɹk 8˪wrF]}Mnpax˼.lcZuIY휪 :b+7 z%Rng$hBs<}9mrME9s[{nw;{rrш+WU]}o)=Z4+61 .ce[׳p{f--Znl2k\˲pGݗdҭ˸w\,Ȳ[ޜ&^9|?7(Ykڹs^͚~ZfnfUݲ}QG~:E+ ]Z WQgqN;wv>m,(�=m\k<Lof3U֫/:U%g#oֿ3>?s}ޟy띛5[0J`Kq\٤MY~Cn[2o`}BUgW4g.UYLVތvMUJrQ<c.Y9iz\-ʱ%+b]{R)X2mVg>X*y99#6w2fYzlUSƛݥ|{q&qsPԩˮ[[ɿlԍNlW]L|=>u\ܚ.v i#&oiKgS־ -J]r'l2mg>X&y98c6fف^Mk}גz,}hzPWԧ.I8bqO&<󋗡iGpR$|-$oc y89tKY^ߦֳ,2ZNf,LJq~_-2VU7Jp^%m7/[0ɖsΎ\zܗOZ*,D*S$Q\s9Z6D49a.iIp˖ydٙfEsMV6lqwtoWIϷzڱؠUa|)Һ%WpqN XOj4D# 4 7{*<2LeNmf̚VR5/Kouf1/x8FcSm4j w]U, 2[ fB˓o#>R[׻& kh:TҰ]PIx3 fg0-<z>_^7G]*ȩb=.{m0ᘞ+ f=?'wFܘ;%jd#f߭.I{(GWT]:Kz.fk~ɣyaZmLm.Ftn%gZo+#1ݦxqo&Kxs=_4R/c@6n.{ulL۔$xu l6r}مf8+"B=^pVk3$5T '*'ڗl_.>>RY)3&vԤ嵜Q-oOQIZ{ fR&ܛݷutVχt^KcmQO5J3[uO[x"Oy~R5C*YSGM++7CEg|#g$+}}m/KNMFu+bZWC\m9kҠ���@BP��(@ @ �P��P�P�R � � � ��� @@~|Ծu&Ϭ[[$ z@" 7E *@$1"2.В P1RHT0s_<y侩GaN6AY_a @G=߯=ڿ|٧6oP�~svYnLP���(�)�(�(�(���� @@@� P�P�R����R� � ��)� ���E�A@��P�E�@@P�P�P��P(�( ���@R���P���EP�(�( � � @@o74|Y=sOI� @@H����(�(�(  P�P�PE�@@�P�P�P��( � � �@@H��@BUB�( � B�R��� ��P�P�P��(�)� � �S??><u{52y*Kv* d�+ A�*$b T" ʠMَ$R_UWeš)7cf3h>(wc%=R~eM4{Q22OfGv(v �s~}/|a3U�� @(�(�)�"� @@P�P�R���� �� @�� @�(@*��@B � � B�P�(�(���@� �P�P�(�U @@H�P��� P��( � � @fpu,2e_$Mه7� @@H����(�(�)�  P�P�PE�@@�P�P�R���( � � �@@H��@BUB�( � B��� ��P�P�P��(�)� � �Ÿ@ѳbvfMΫ⺔/Q]jmShvkݱP% IPTT1X J@ʆ2 ]u5WYd-# ޵;n'|v+J.4�[>;C>_kulgwS|⽛ߏlxꛘ;~O'~/L 111z/|ݫGݧ6oP�~svYmLT��(�� E����� � ���A@@H�P�P�P�(�����"(P � @��BE�ABP� � �A@@@� @��(�(�� � H�P�P�R��E� @@H �� ������(�)� � � @����A@@H�PU(�(�("@@H����H(�(�)� �����A@������*�T�� �)� � �@�@@H�P(�(�( �����Av66vhV8Kx3]/lsR]<9;\_џKS<mnRe6ӿmϠbA�yX>� �1* 1hCagpbUVɶ%ozD'WprfeB]k}xᙦ/bIҴ-#HvEj;d&&I+U]3>leiM=$z�YQ(@OfGv'vڏ1@W7gbG35P���(�)(�(�(���� @@@� P�P�R����R� � ���@B � ��B�P�(�(���� �P���(�U @@H�P����A@@� ��(�(�� � @��@@@P�P�R�"������ �� ���(��R�����BP�E ��(�( � �@��� ���(��P�R��%?Wj'ɢ{1[5�]mgfUל<{BrHv?W-c߇7)jo$�V `AQCa-z-R[jKse0u?%ijκ�aKoDmzwR%zc /FveGn^J}C]7m#m%<}rUjǭulW&dlsd҄ҋhh޼py6^̯I׍vs~OuSbzǃ 2^i+}#1 'K ư"Ԣ{bcdC&4|cKP#Ѽo_>N?czoϰt:fH��(�)(�(�(���� @@@� P�P�R����R� � ��)� ���E�A@��P�E�@@P�P�P��P(�( � �� @R����@H�P�P�P���( � � @@P����(�(�)������ BT  ���� �� ���(��R�����BP�E ��(�( � ���� ���(��P�R��%_WiG <2eFp%%G)Q;xJKB^Ux{.ыmLYѴ$ԒiG7D} H`$RbG̽(IqiK51l51yWG.o|5`M /8>o*^Tw]3km3<cvcpf<u48lԟ[g>[Xg ŕtqm(6߂[A3>Eʿ.oҺY{i;$rc[*nV&MxKrFF=%d}lTz/�Gv'vO1@W7gbG3`��P�@@H��� � �����P(�(�)� ���)� ��ABT��� �" P�P�(P"(�� ��@@@P�P(��SLV7"g*<]ODrwbNNq]<\o�3W[O>.zG9YG~V_bf?bfG~SL~E?ؙ~G~SL~Cai]O}ޏM}O3{ v>ؙ~�.ߧ7'v>ؙ~?m4˷>Gv>ؙ~G~S<~Cqi]Ooz?_?m4˷>G7z?rߧ7=}O{=}O{d?l˷>G9�.ߧ7y?l~O&oz?_μ�.ߧ7^ ~~SL~E^ ~~SL~Cx1g-}O{x1g-}O{x1g-}O{x1g-}O{^ ~=~S<~C^ ~=~S<~CzOrߧ7zX1g-}O{> zOrߧ7햓ܷ>G^> Z?rߧ7U�坝n1V}Lt~o/{zm~U[˧ˋVau ����� � ���(E��(A@@@ � � @���� A@@H�P��(�(�( �� ���T" �(�UP�P�P� �� � � @@@@P����(�(h1S4��RROfv"9n/zu=GE(ů |O_G3y/+i/u][ulgK㊮|E+A$ { �"%p7ˇ5;' };Ghi#>= ^\mq)BKtcGLm;J>���iT1Umڠ_i^.NTI>\@@Le&6)>}f Yػ1�k~Gݧ6oP�~suYmLT��(�� E����� ����A@@H�P�P�P�(����� ���(��P�P�A@P� � �A@@@�@�(�(�Q~{gIA=8==f_QʿUDض^,]z}ۗ>_쾋6�Wb8_)p!rOSZDe x^Æ)A{ S:*8tU0qO 8`iWp>Ӣ/p჊}E_^NÆ)A{ S:*8tU0qO 8`iWp>Ӣ/p჊}E_^NÆ)A{ S:*8tU0qO 8`iWp>Ӣ/p჊}E_^NÆ)A{ S:*8tU0qO 8`iWp>Ӣ/p჊}E_^NÆ)A{ S:*0qOi8ax7|%2Ef'z.'oiMٿNjj>X�7Y/?2R[~⌸mOy /KjP����(�(�)������ B�PB � � �P�P�R���(��R � � @��A@@@P(�(�)���(�(@�(U� @@ @ �P��P�P�R� � � @�� @@f�34E-V~(˖Qi�ea8 {A^TRG^U}< yuPв6N�WtWbOGS<o^G&<P$�Pa=T "a�єtZKNo+_[c<}g�y=!mqp24xN>��×F&596*.SEfkvn|B(Xw}4r,A=U1COk辨Iz&7bo'3[_>OCOmGޠ�1x#T� �"@(�(�)�" @@P�P�R���� �� @�� @�(@*��@B � ��B�P�(�(���@� �P>nߝ,z.~d}gٝ{>�N4%~q3;۫-(v ���������������������������������3[In1tueQ-,٣&9SIcS2RI sbݟ i~:Z�P�R���� � � ���(����DP(�(�)�����)�� @� ��(����� EP�*�T  @@P�P(��(�(�)� ���A@���3XQqQ͕5gZr�C7PĞu}w>lŖحIeYO*4|=>m_^r}Mriq=[=ԉ� ';pb E>Sdo_w~<JntMn0J|^EXnʠyULT'b"fy/cr\wwg(/զ<#i�X>BHb%ND�b>cmGYލ �zι_?>> H���(�)�(�(�(���� @@@� P�P�R����R� � ��)� ���E�A@��P�E�@@P�P�P��P(�( � VcnЮKlפ~3:tyeGb֟R?[%%yjR������������������������������������|*qq}bvZۮ vC�/Ew~_ O]7}Z�o7d9�(�)� � � ����A@@@PU�"�(�("@@H����H(�(�( �����A@������*PT�����(�(���� �@H�P�P?( (�� 뷯nYx:em-BEM{?Fe8ag֗v{Ws mo1Ze<MGT[pǖ7ŢΡ@Pa=W"1HDCA'_6M8tά]NV+Hg.] ^NgeG<>lOxkѲ'xfskùo]ʹ{n Ey5]D.ŚT};R-r9Q1 }}A$|~]L#/[@W7gbG3`��P��@H��� � �����P(�(�)� ���)� ��ABT��� �" P�P�(P �" @@(�(�(��(���M_hX~3�_ϟe"b1LB�������4(Z^7džgD1D-}z쌷zLZ6g~N v+wfy.���������������������������[.=Jk-˜6'%rg]&<s1Wj9Od8� @@H����(�(�)�  ����DP(�(�)�����)���A@� ��(����� EP* (P  @@P�P(��(�(�)����A@���3XQqQ���.:bB~= }N>7,OnXz,5 j(5ֽi3<y-I޲i�a)Җn*uK{>;NzW'I{8$q٧=Z-Xʑ ʀbH(`$|I. 1{}Gvm)'}8Q[FF��:zx`ጨ@ VxE b%_/O>P:T�~}/|a3U�� @(�(�)�" @@P�P�R���� �� @�� @�(@*��@P � � @P�(�(���� P�vVk2wgޘhä~<`��������c`}"m_5��Ҹﶺ)U\\)=R[Zͦ+e&b#yy&oMW;:8[U}|vJQ^}6>ŎmVM~ſjdM�)k}Kgu_g%/rktv⫣I1id88N5cε c4oa{.Տ6fmmZmT8'SUVrʷ^Ktǫq)3ڙ|GC,WgSR{rhS{b?7MMraky?̌2p==攞Il�㿽koyy35>=Χ7݃fELdO]:X�(oƖ3s݈MO3N/+=RQQ[EnK~Ldھ]"eKڱyɓ/)/581s&u76;>Mؾmۣ.izQVǼIo hpԩņDrq[4avn5njgO#~m#ʾvE^d(JYRjrI_RMiװ1$\GM۵o47?d9+_dK3MXFj7k!ۿm3ǭ\ei<UQnڵxk"ǔ4l>ڽ̟[ ?Li֋kWtLyq{ǭ~ļ[>{Oɟ$bs5qRon(.&-n-r˞޷gGaiqDF|L1*riO(Ko3vnR%۶iǶ'ף FҜǙ+b`ՁND/X9Mw{fvUuyI[OxFzoko鸔NM;]I-~Fܽh>Ik]1R9{_|a)iZ]Oz|%6qR).?h{f -WiwwiUss X\sY $}F^zM8)aj޶PgRƏD@������zީ{ mѕ<N,g5?E�ڳiڮڈl}\ռp � @�@@@P�P�R� BB � � "�P�P�R��(�(��R � � ���A@@@P(�(�)���(�(@�(U��A@@ @ �P��P�P�R� � � ��� @@f�44�����i5n%[~N.>٦@ :sȫh~٧<2]+hNVSɥ6.{m~<{KgiѸE aA|63kI3ڷ>͔O2Y[JSMh6{~chOY;P@(I;+|"|lvݏ)Ҡ�1x#��P�@@H���)� � �����P(�(�( ���)� ��DP��� �  P�P�(� @@(�(�(��(��װO5g}5&=Ӕ��������US�o�h�ЇľyWx U[%\$t]OOSkKcMmo2on.3_9u$v-\YcT'qƧŸCo<;mSA(u쉏Uť<e6oU<em<6) i=w5}m<Mo{ԗ{+Kˆf8)$Dӊwu.=8g&cHt{,\g&v}=QkoYW J՞q�~:V!fff]bW<wrrݯ^�{)Y}9#m{ZcsԒIy}i)wv�8sǪƺ;$\HǷ6LOGݗe#O{OZ,|Oeoj6}�/6#n{yϗ�Qw|\x /'kW|]bFܴm gfDz4|�|мãN8|l{jn/k1\آ${J]_j�Wųb;yeœ;JߢM̫[|Yk_I>qlIߓl|n Y&|&K^ݞ]=v<;iecN\}.g/edZ?xڨDϗ7?��ehf&cbcW\j-mڌ͖oy/w*VYZ8#Q-EW9J9]o~ǧ<c~<1X7^)leYN5y'U3Ǔp.m]r}]Ky fo�U5z=�}WsWKԫytЫ{R$|)놱~ �������|[\k&^ᕟG>[�ۓcsd(�)� � � @����A@@@P��P"(��� � ����@P�P�P � � @�� � "@ @H�P� ��(�(������@H�P�P?( (�������i5[:BOxz,^+` m[u1.G_]+S0v˗[q_bnpgz֡%NFzUO{OŚ>eΠ$ * $ |nQ1%ƛ5ׄ'f66u+�??}cѕ{-;b$T$ּL>g?CKnP�~svYmLت@��@H��@@@��(�(�)� � � �����P�P @H�P��� ����(�� ��@@@P�P;8pa<�w}&yrn��������^2,:F5[EьZ抎gֻϲkti�,y�w]~v;KpilFW4}k-i>dˢۗ^s]jg͊.(OҞl[ =\q}S5?/{?yKuz)ֻƙX׳sN3,-Jͻ ߩxݟZݢ~{�myfkΟ+j# FvCdOnnIXo٫3~?�hW:~<X23m^vgy4g3D>~Q~KXz,iz[Iӯj_sCo,k_4xWKlvu<:Ƌn]>UtjM-ooj#um01Mm�,}3?VGٓ$;v[.Ϗ$K_&FO7 PǞ>L%cs[M}WkgV#?cm�rn(ۧ6_N8yog=ƍkK5~Mij& Cenz L$Oy07&z~f8Z<kϵodS6;AVi>Ms\x7??M[+F٥niWY.hiͭ]哇kP,Ҵ벡U3Suчak0`-ajifl\Iijk!5~Gz.rG:/)75)!̪#)*reپsmɴ/MnSxo>s?ڞ*8[ƫm/VhOYߖ#t,}aoYo۲R-؝ 34r䉥wSUA5QG[ڎxW8GScZ8GQRp{Z߳o}^ ~[cxYt٧. /ƌY_I[{iz�^;IOA6jm |Zv3ĖEtcK6[>_-7mۥxk}[0������Cڧ1Fx{>1Y_S�3?>k2E;GD>P�R���� � � ���(����DP(�(�)�����)���A@� ��(����� EP* T A@@@P�P(��(�(�)� ���A@���3XQqQ��������Z^(uzKZq%5c3Hӵ�s,x2UI;vJr8eV%~$]W/v}W7MؽKnR# 1  ź+}5F/}G.<a3)ߡ$ O+84W}'dD)ҏ]$U@@ZY;w3#{c;yN�=cl߯şat͊��P�@@H��� � �����P(�(�)� ���)� ��ABT��� �" P�P�(P"(�� ��@@@P�P9+}�43jSWXwbgO8�,S}DfѴ+������������������������������������LsB=|ko3;6qW'%C+d>pa*D~O˒r^o>jnk���(�(�)������ B*��B@ � @���� A@@@P���(�(�( �� ���T  �(�H�P�P� �� � � A@@@@P����(�( }\~s�����������QOV'\RڧʻkZ,D;uѳ+%�[~}L[�Z]oGNy>:�޵ڏoX; Z}iƱF)Io 9K<t|?w)|C:qx/xR= :$Q[[0C/ViPIb$ve=G_u<Joϰt:fb�@H��@@@��(�(�)� � � �����P�P @H�P��( ����(�� ��@@@P�P*40SQrFhYlw׬;X_ihh2~peO=ÚQz;G2������������������������������������qb?>N̩^)pQ<_aNɵr_7ȟSvx��(�)� � � @����A@@H�P�P"(U@H����H(�(�( �����A@������*�T��B�)� � �@� @@H(�(�(�( �����AҏҎ`������������If-S~umo6~#XָOD%9߃d�^B_os;0k㞻 EոW>j^gi~WjTY֩!uя%E�{psdaiY|*8~ll}sNr)NGӺPI`�1zߒۿ'(w| *�zٿ_?>>  ��P � � @���P�P������@@H�P��H�P(�( � � @��P(�(�(@��P���� � �@{3Xx-}.kG8Q{Wl~}YŞ6}V,.'9w&&:��������������������������������m:go}GaojcjyG{^v'/�`""6LT������P�P�P��@(�(�("@@H����H(�(�)� �����A@������*PT�� �)� � �@�@@H�P(�(�( �����AҏҎ`���������������G%IYqb@9*44j\sZUǯ=^e5ry..m' #w"P# fP#Lן;yN�=_\߯şat@��P � � @��H�P�P������@@@P��H�P(�( � � @��P(�(��U@��P���� � �@S۰ht}zGOn0ۋ䍍=iCh?Iq6OLzڝK;gǓ^xex9x;i~'W~w_+?x;qy8<}gur3O9_A~'W~w_+?x;qy8<}gur3O9_A~'W~w_+?x;qy8<}gur3O9_A~'W~w_+?x;qy8<}gur3O9_A~'W~w_<wAGY|u=}/`Sh/u\=mP+7-m|�~ߤ|v\wݏ}CR ����� � ��(@ �(A@@@ � � @���� A@@H�P��(�(�( �� ���T" ��(�UP�P�P� �� � � @@@H�P����(�( }\~s��������������������`ӵ9gbUse?8TY&KE|-/:u�W2�طKUJ=8hkeyM-a9Iv]f'\WX< C@#|L>c�CIct�?9�;f|, ^6æf�� �"P�P�R�E���@ ���(�(�(� � � @�� @@@PU� @�(�� �P�P( � � �� ��A@@��SL<t6W.J*F^ߟWw>*Cs{ɹ>*Cs{g?_鏡g?_鏡GOWczNo~9OWczNo~9Q~UߟA~UߟB}U>g?_鏡9g?_鏡9GOWczNo~9OWc螓ߟA~UߟTg?_鏡9g?_鏡9GOWczNo~96^'1='7?}U>e>*Er/>*Cs{ɲC'1='7?ʯrl>*Cs{ɲC'1OI&ʯr/>*Cs{ɲC'1='7?ʯrl?I�L}I+ʼ?I�L}I',|g?_鏡9ycW}U>> =K1WtS)ʱTmC4P( ����� � ���(@*��@����P�P������ � P�P�R���P�PB�P� �P��A@@�����(���� � @ aiGiG0���������������������`j\;I 6]gF=NZt3X1缴˱teN=znl1<>iUMYu3حדEɬb/$zH4}3iZ:T6 V=k_;_;v<Joϰl:fR��(@ � E����� � ���A@@H�P�P�P�(����� �� @��@P(�(�(B� � �A@@@� @�(�(��)� � H�P�P�R� B�R���B�P��(�(�)�� �A@������P�P�P��P*"(��� � �� �H�P�P�P � � @�� � "E�@@P�P�)� � �@� @@H(�(�(�( �����AҏҎ`�����i-`[]ЍY !%e~�����������������㺚Bq}MIne[MzJLDkڇpvzl*ҥ?rl4䲇-?V]%]g~>ٴxX򖷝q[tF\}VlckaT?E;{D$mYJdIߓMY6y�zٿ_?>> 陊�� �"�P�R� ��@ ���(�(�(� � � @�� @@@PU� @�(�� �*�P�P( � � �� ��A@@�H�P�@�������A@@H�P�P( ����� � ���(@*��@����P�P������ @ P�P�R���P�PB�P� �@��A@@��������� � @ aiGiG0�<~+mDHە_-R6Խ//5+rۚc)w.o,?Bve<'yTyz(ņm7L1,3䨔;9~V{xw|g<<m4CMgHN\|ݻ1Et1֓iͶq͗,a]23M[G,<^2e[*!N_BRVɦQo׿՜iX!F*>NL6J =Q}pWޥ>VSgdWҹ:{~3XO,,Bh#v5M.Ҋ߭│ ����������������E��1z6æf���E�"P�P�R�E��� @ ���(�(�(� � � ��� �@@P�P�R ���(�(@@@�@(@ �� ����P�P� � ���(�(�)� �"���P"��A@@H�P�P�R ����� � ���(@ �(A@@@ � � @���� A@@H�P��(�(�( �� ���T  ��(�UH�P�P� �� � � @@@H�P����(�( }\~s� Z&%8Ӄ\L'' g-w/x\ 2%<[a<:ovBwaN1v6{|[{\ ak>^_ԩs(ᅬ^|]|;vbxvymFXO>W.׷X3w/{1-jˣ*,jV=湢m揦[nE<<gFӓ䩴z_Z]o9cjxaթYEɾy2Z[mxv":M3Vғ˳[l$VnqTf*p8VQ ,[I&l������������������͞ @(�?9�:|, ^6æf���E�"P�P�R�E���@ ���(�(�(� � � @�� @@@(� @�(�� ��P�P( � � �� ��A@@��P�@�(�)� � � E���P�P���� �@H�P�P�R��(�(�( � � @���@����P�P������ � P�P�R���P�PB�P� @P��A@@�����(���� � @ aiGiG0����������������������������9@W7gbG3b�� �"P�P�R�E���@ ���(�(�(� � � @�� @@@PU� @�(�� �P�P( � � �� ��A@@�H�P�@��(�)� � � ��(��P��� �@H�P�P�R��(�(�( � � @P���@����P�P������ � P�P�R���P�PB�P� �@���A@@��������� � @ Smt_EG~t(o�pH~Qhj�8$?(4?/fTw�p.ڿ~_G fC߳W�(|٫�py߳W�)8d<٫�py�W�(|�٫�py��(�gWQ!_Co_G =ڿ<��m"��(Co_Fy�j�6�gWQ_C/_Fw=ڿ<#z�HyG�j�6;_FGj�6:_FY�(|'9+'Žі�@�1x#T� @(�(�)�" @@P�P�R���� �� @���A@�(@*��@P � � @P�(�(���� �P���(�U @@H�P����A@@� ���(�(�� � @�@@@P�P�R� B�� � �P�P�R��(�(��R � � @��A@@@P(�(�)���(�(@�(U��A@P@ @ �P��P�P�R � � � ��� @@�(P������U�(�( � ������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/intro/index.md�����������������������������������������������������0000664�0000000�0000000�00000041724�14332737457�0021600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# About Mermaid **Mermaid lets you create diagrams and visualizations using text and code.** It is a JavaScript based diagramming and charting tool that renders Markdown-inspired text definitions to create and modify diagrams dynamically. > If you are familiar with Markdown you should have no problem learning [Mermaid's Syntax](./n00b-syntaxReference.md). <img src="/header.png" alt="" /> [![Build CI Status](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml/badge.svg)](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [![NPM](https://img.shields.io/npm/v/mermaid)](https://www.npmjs.com/package/mermaid) [![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) [![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) [![Join our Slack!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=slack&label=slack)](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_) <!-- Mermaid book banner --> [![Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!](img/book-banner-post-release.jpg)](https://mermaid-js.github.io/mermaid/landing/) <!-- <Main description> --> Mermaid is a JavaScript based diagramming and charting tool that uses Markdown-inspired text definitions and a renderer to create and modify complex diagrams. The main purpose of Mermaid is to help documentation catch up with development. > Doc-Rot is a Catch-22 that Mermaid helps to solve. Diagramming and documentation costs precious developer time and gets outdated quickly. But not having diagrams or docs ruins productivity and hurts organizational learning.<br/> Mermaid addresses this problem by enabling users to create easily modifiable diagrams, it can also be made part of production scripts (and other pieces of code).<br/> <br/> Mermaid allows even non-programmers to easily create detailed and diagrams through the [Mermaid Live Editor](https://mermaid.live/).<br/> [Tutorials](../config/Tutorials.md) has video tutorials. Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](../misc/integrations.md). For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](../community/n00b-overview.md) and [Usage](../config/usage.md). 🌐 [CDN](https://unpkg.com/mermaid/) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](https://github.com/mermaid-js/mermaid/blob/develop/docs/development.md) | 📜 [Version Log](../community/CHANGELOG.md) | 🔌 [Plug-Ins](../misc/integrations.md) ::: warning 🖖 Keep a steady pulse: mermaid needs more Collaborators, [Read More](https://github.com/knsv/mermaid/issues/866). ::: :trophy: **Mermaid was nominated and won the [JS Open Source Awards (2019)](https://osawards.com/javascript/#nominees) in the category "The most exciting use of technology"!!!** **Thanks to all involved, people committing pull requests, people answering questions and special thanks to Tyler Long who is helping me maintain the project 🙏** In our release process we rely heavily on visual regression tests using [applitools](https://applitools.com/). Applitools is a great service which has been easy to use and integrate with our tests. <a href="https://applitools.com/"> <svg width="170" height="32" viewBox="0 0 170 32" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="a" maskUnits="userSpaceOnUse" x="27" y="0" width="143" height="32"><path fill-rule="evenodd" clip-rule="evenodd" d="M27.732.227h141.391v31.19H27.733V.227z" fill="#fff"></path></mask><g mask="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M153.851 22.562l1.971-3.298c1.291 1.219 3.837 2.402 5.988 2.402 1.971 0 2.903-.753 2.903-1.829 0-2.832-10.253-.502-10.253-7.313 0-2.904 2.51-5.45 7.099-5.45 2.904 0 5.234 1.004 6.955 2.367l-1.829 3.226c-1.039-1.075-3.011-2.008-5.126-2.008-1.65 0-2.725.717-2.725 1.685 0 2.546 10.289.395 10.289 7.386 0 3.19-2.724 5.52-7.528 5.52-3.012 0-5.916-1.003-7.744-2.688zm-5.7 2.259h4.553V.908h-4.553v23.913zm-6.273-8.676c0-2.689-1.578-5.02-4.446-5.02-2.832 0-4.409 2.331-4.409 5.02 0 2.724 1.577 5.055 4.409 5.055 2.868 0 4.446-2.33 4.446-5.055zm-13.588 0c0-4.912 3.442-9.07 9.142-9.07 5.736 0 9.178 4.158 9.178 9.07 0 4.911-3.442 9.106-9.178 9.106-5.7 0-9.142-4.195-9.142-9.106zm-5.628 0c0-2.689-1.577-5.02-4.445-5.02-2.832 0-4.41 2.331-4.41 5.02 0 2.724 1.578 5.055 4.41 5.055 2.868 0 4.445-2.33 4.445-5.055zm-13.587 0c0-4.912 3.441-9.07 9.142-9.07 5.736 0 9.178 4.158 9.178 9.07 0 4.911-3.442 9.106-9.178 9.106-5.701 0-9.142-4.195-9.142-9.106zm-8.425 4.338v-8.999h-2.868v-3.98h2.868V2.773h4.553v4.733h3.514v3.979h-3.514v7.78c0 1.111.574 1.936 1.578 1.936.681 0 1.326-.251 1.577-.538l.968 3.478c-.681.609-1.9 1.11-3.8 1.11-3.191 0-4.876-1.648-4.876-4.767zm-8.962 4.338h4.553V7.505h-4.553V24.82zm-.43-21.905a2.685 2.685 0 012.688-2.69c1.506 0 2.725 1.184 2.725 2.69a2.724 2.724 0 01-2.725 2.724c-1.47 0-2.688-1.219-2.688-2.724zM84.482 24.82h4.553V.908h-4.553v23.913zm-6.165-8.676c0-2.976-1.793-5.02-4.41-5.02-1.47 0-3.119.825-3.908 1.973v6.094c.753 1.111 2.438 2.008 3.908 2.008 2.617 0 4.41-2.044 4.41-5.055zm-8.318 6.453v8.82h-4.553V7.504H70v2.187c1.327-1.685 3.227-2.618 5.342-2.618 4.446 0 7.672 3.299 7.672 9.07 0 5.773-3.226 9.107-7.672 9.107-2.043 0-3.907-.86-5.342-2.653zm-10.718-6.453c0-2.976-1.793-5.02-4.41-5.02-1.47 0-3.119.825-3.908 1.973v6.094c.753 1.111 2.438 2.008 3.908 2.008 2.617 0 4.41-2.044 4.41-5.055zm-8.318 6.453v8.82H46.41V7.504h4.553v2.187c1.327-1.685 3.227-2.618 5.342-2.618 4.446 0 7.672 3.299 7.672 9.07 0 5.773-3.226 9.107-7.672 9.107-2.043 0-3.908-.86-5.342-2.653zm-11.758-1.936V18.51c-.753-1.004-2.187-1.542-3.657-1.542-1.793 0-3.263.968-3.263 2.617 0 1.65 1.47 2.582 3.263 2.582 1.47 0 2.904-.502 3.657-1.506zm0 4.159v-1.829c-1.183 1.434-3.227 2.259-5.485 2.259-2.761 0-5.988-1.864-5.988-5.736 0-4.087 3.227-5.593 5.988-5.593 2.33 0 4.337.753 5.485 2.115V13.85c0-1.756-1.506-2.904-3.8-2.904-1.829 0-3.55.717-4.984 2.044L28.63 9.8c2.115-1.901 4.84-2.726 7.564-2.726 3.98 0 7.6 1.578 7.6 6.561v11.186h-4.588z" fill="#00A298"></path></g><path fill-rule="evenodd" clip-rule="evenodd" d="M14.934 16.177c0 1.287-.136 2.541-.391 3.752-1.666-1.039-3.87-2.288-6.777-3.752 2.907-1.465 5.11-2.714 6.777-3.753.255 1.211.39 2.466.39 3.753m4.6-7.666V4.486a78.064 78.064 0 01-4.336 3.567c-1.551-2.367-3.533-4.038-6.14-5.207C11.1 4.658 12.504 6.7 13.564 9.262 5.35 15.155 0 16.177 0 16.177s5.35 1.021 13.564 6.915c-1.06 2.563-2.463 4.603-4.507 6.415 2.607-1.169 4.589-2.84 6.14-5.207a77.978 77.978 0 014.336 3.568v-4.025s-.492-.82-2.846-2.492c.6-1.611.93-3.354.93-5.174a14.8 14.8 0 00-.93-5.174c2.354-1.673 2.846-2.492 2.846-2.492" fill="#00A298"></path></svg> </a> ## Diagram Types ### [Flowchart](../syntax/flowchart.md?id=flowcharts-basic-syntax) ```mmd graph TD; A-->B; A-->C; B-->D; C-->D; ``` ```mermaid graph TD; A-->B; A-->C; B-->D; C-->D; ``` ### [Sequence diagram](../syntax/sequenceDiagram.md) ```mmd sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts <br/>prevail! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ```mermaid sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts <br/>prevail! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ### [Gantt diagram](../syntax/gantt.md) ```mmd gantt dateFormat YYYY-MM-DD title Adding GANTT diagram to mermaid excludes weekdays 2014-01-10 section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d ``` ```mermaid gantt dateFormat YYYY-MM-DD title Adding GANTT diagram to mermaid excludes weekdays 2014-01-10 section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d ``` ### [Class diagram](../syntax/classDiagram.md) ```mmd classDiagram Class01 <|-- AveryLongClass : Cool Class03 *-- Class04 Class05 o-- Class06 Class07 .. Class08 Class09 --> C2 : Where am i? Class09 --* C3 Class09 --|> Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label ``` ```mermaid classDiagram Class01 <|-- AveryLongClass : Cool Class03 *-- Class04 Class05 o-- Class06 Class07 .. Class08 Class09 --> C2 : Where am i? Class09 --* C3 Class09 --|> Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label ``` ### Git graph ```mmd gitGraph commit commit branch develop commit commit commit checkout main commit commit ``` ```mermaid gitGraph commit commit branch develop commit commit commit checkout main commit commit ``` ### [Entity Relationship Diagram - :exclamation: experimental](../syntax/entityRelationshipDiagram.md) ```mmd erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses ``` ```mermaid erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses ``` ### [User Journey Diagram] (../syntax/userjourney.md) ```mmd journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` ```mermaid journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` ## Installation **In depth guides and examples can be found at [Getting Started](n00b-gettingStarted) and [Usage](../config/usage).** **It would also be helpful to learn more about mermaid's [Syntax](n00b-syntaxReference).** ### CDN ``` https://unpkg.com/mermaid@<version>/dist/ ``` To select a version: Replace `<version>` with the desired version number. Latest Version: [https://unpkg.com/browse/mermaid@8.8.0/](https://unpkg.com/browse/mermaid@8.8.0/) ## Deploying Mermaid To Deploy Mermaid: 1. You will need to install node v16, which would have npm 2. Download yarn using npm 3. Enter the following command: `yarn add mermaid` 4. You can then add mermaid as a dev dependency using this command: `yarn add --dev mermaid` ### [Mermaid API](../config/Setup.md): **To deploy mermaid without a bundler, one can insert a `script` tag with an absolute address and a `mermaid.initialize` call into the HTML like so:** ```html <script type="module"> import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@<MERMAID_VERSION>/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true }); </script> ``` **Doing so will command the mermaid parser to look for the `<div>` or `<pre>` tags with `class="mermaid"`. From these tags mermaid will try to read the diagram/chart definitions and render them into SVG charts.** **Examples can be found at** [Other examples](../syntax/examples) ## Sibling projects - [Mermaid Live Editor](https://github.com/mermaid-js/mermaid-live-editor) - [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli) - [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo) - [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo) ## Request for Assistance Things are piling up and I have a hard time keeping up. It would be great if we could form a core team of developers to cooperate with the future development of mermaid. As part of this team you would get write access to the repository and would represent the project when answering questions and issues. Together we could continue the work with things like: - Adding more types of diagrams like mindmaps, ert diagrams, etc. - Improving existing diagrams Don't hesitate to contact me if you want to get involved! ## For contributors ### Setup ```sh yarn install ``` ### Build ```sh yarn build:watch ``` ### Lint ```sh yarn lint ``` We use [eslint](https://eslint.org/). We recommend you to install [editor plugins](https://eslint.org/docs/user-guide/integrations) to get real time lint result. ### Test ```sh yarn test ``` Manual test in browser: open `dist/index.html` ### Release For those who have the permission to do so: Update version number in `package.json`. ```sh npm publish ``` The above command generates files into the `dist` folder and publishes them to npmjs.org. ## Related projects - [Command Line Interface](https://github.com/mermaid-js/mermaid-cli) - [Live Editor](https://github.com/mermaid-js/mermaid-live-editor) - [HTTP Server](https://github.com/TomWright/mermaid-server) ## Contributors [![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out. Detailed information about how to contribute can be found in the [contribution guide](#) ## Security and safe diagrams For public sites, it can be precarious to retrieve text from users on the internet, storing that content for presentation in a browser at a later stage. The reason is that the user content can contain embedded malicious scripts that will run when the data is presented. For Mermaid this is a risk, specially as mermaid diagrams contain many characters that are used in html which makes the standard sanitation unusable as it also breaks the diagrams. We still make an effort to sanitise the incoming code and keep refining the process but it is hard to guarantee that there are no loop holes. As an extra level of security for sites with external users we are happy to introduce a new security level in which the diagram is rendered in a sandboxed iframe preventing JavaScript in the code from being executed. This is a great step forward for better security. _Unfortunately you can not have a cake and eat it at the same time which in this case means that some of the interactive functionality gets blocked along with the possible malicious code._ ## Reporting vulnerabilities To report a vulnerability, please e-mail security@mermaid.live with a description of the issue, the steps you took to create the issue, affected versions, and if known, mitigations for the issue. ## Appreciation A quick note from Knut Sveidqvist: > _Many thanks to the [d3](https://d3js.org/) and [dagre-d3](https://github.com/cpettitt/dagre-d3) projects for providing the graphical layout and drawing libraries!_ >_Thanks also to the [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) project for usage of the grammar for the sequence diagrams. Thanks to Jessica Peter for inspiration and starting point for gantt rendering._ >_Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._ > > _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_ --- _Mermaid was created by Knut Sveidqvist for easier documentation._ <style scoped> #contributors + p, #about-mermaid + p + p + blockquote + img + p { display: flex } #contributors + p a, #about-mermaid + p + p + blockquote + img + p a { margin: 0 0.5rem } .dark #VPContent > div > div > div.content > div > main > div > div > img { filter: invert(1) hue-rotate(217deg) contrast(0.72); } </style> ��������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/intro/n00b-gettingStarted.md���������������������������������������0000664�0000000�0000000�00000017031�14332737457�0024210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# A Mermaid User-Guide for Beginners Mermaid is composed of three parts: Deployment, Syntax and Configuration. This section talks about the different ways to deploy Mermaid. Learning the [Syntax](./n00b-syntaxReference.md) would be of great help to the beginner. > Generally the live editor is enough for most general uses of mermaid, and is a good place to start learning. **Absolute beginners are advised to view the Video [Tutorials](../config/Tutorials.md) on the Live Editor, to gain a better understanding of mermaid.** ## Four ways of using mermaid: 1. Using the Mermaid Live Editor at [mermaid.live](https://mermaid.live). 2. Using [mermaid plugins](../misc/integrations.md) with programs you are familiar with. 3. Calling the Mermaid JavaScript API. 4. Deploying Mermaid as a dependency. **Note: It is our recommendation that you review all approaches, and choose the one that is best for your project.** > More in depth information can be found at [Usage](../config/usage). ## 1. Using the Live Editor Available at [mermaid.live](https://mermaid.live) ```mermaid graph TD A[Enter Chart Definition] --> B(Preview) B --> C{decide} C --> D[Keep] C --> E[Edit Definition] E --> B D --> F[Save Image and Code] F --> B ``` In the `Code` section one can write or edit raw mermaid code, and instantly `Preview` the rendered result on the panel beside it. The `Configuration` Section is for changing the appearance and behavior of mermaid diagrams. An easy introduction to mermaid configuration is found in the [Advanced usage](../config/n00b-advanced) section. A complete configuration reference cataloging the default values can be found on the [mermaidAPI](../config/Setup) page. ![Code,Config and Preview](./img/Code-Preview-Config.png) ### Editing History Your code will be autosaved every minute into the Timeline tab of History which shows the most recent 30 items. You can manually save code by clicking the Save icon in the History section. It can also be accessed in the Saved tab. This is stored in the browser storage only. ### Saving a Diagram: You may choose any of the methods below, to save it **We recommend that you save your diagram code on top of any method you choose, in order to make edits and modifications further down the line.** ![Flowchart](./img/Live-Editor-Choices.png) ### Editing your diagrams Editing is as easy as pasting your **Diagram code**, into the `code` section of the `Live Editor`. ### Loading from Gists The Gist you create should have a code.mmd file and optionally a config.json. [Example](https://gist.github.com/sidharthv96/6268a23e673a533dcb198f241fd7012a) To load a gist into the Editor, you can use https://mermaid.live/edit?gist=https://gist.github.com/sidharthv96/6268a23e673a533dcb198f241fd7012a and to View, https://mermaid.live/view?gist=https://gist.github.com/sidharthv96/6268a23e673a533dcb198f241fd7012a ## 2. Using Mermaid Plugins: You can generate mermaid diagrams from within popular applications using plug-ins. It can be done in the same way, you would use the Live Editor. Here's a list of [Mermaid Plugins](../misc/integrations). **This is covered in greater detail in the [Usage section](../config/usage)** ## 3. Calling the JavaScript API This method can be used with any common web server like Apache, IIS, nginx, node express. You will also need a text editing tool like Notepad++ to generate a .html file. It is then deployed by a web browser (such as Firefox, Chrome, Safari, but not Internet Explorer). The API works by pulling rendering instructions from the source `mermaid.js` in order to render diagrams on the page. ### Requirements for the Mermaid API. When writing the .html file, we give two instructions inside the html code to the web browser: a. The mermaid code for the diagram we want to create. b. The importing of mermaid library through the `mermaid.esm.js` or `mermaid.esm.min.mjs` and the `mermaid.initialize()` call, which dictates the appearance of diagrams and also starts the rendering process . **a. The embedded mermaid diagram definition inside a `<pre class="mermaid">`:** ```html <body> Here is a mermaid diagram: <pre class="mermaid"> graph TD A[Client] --> B[Load Balancer] B --> C[Server01] B --> D[Server02] </pre> </body> ``` **Notes**: Every Mermaid chart/graph/diagram definition, should have separate `<pre>` tags. **b. The import of mermaid and the `mermaid.initialize()` call.** `mermaid.initialize()` call takes all the definitions contained in all the `<pre class="mermaid">` tags that it finds in the html body and renders them into diagrams. Example: ```html <body> <script type="module"> import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@<MERMAID_VERSION>/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true }); </script> </body> ``` **Notes**: Rendering in Mermaid is initialized by `mermaid.initialize()` call. You can place `mermaid.initialize()` inside `mermaid.min.js` for brevity. However, doing the opposite lets you control when it starts looking for `<div>`tags inside the web page with `mermaid.initialize()`. This is useful when you think that not all `<div>` tags may have loaded on the execution of `mermaid.min.js` file. `startOnLoad` is one of the parameters that can be defined by `mermaid.initialize()` | Parameter | Description | Type | Values | | ----------- | --------------------------------- | ------- | ----------- | | startOnLoad | Toggle for Rendering upon loading | Boolean | true, false | ### Working Examples **Here is a full working example of the mermaidAPI being called through the CDN:** ```html <html> <body> Here is one mermaid diagram: <pre class="mermaid"> graph TD A[Client] --> B[Load Balancer] B --> C[Server1] B --> D[Server2] </pre> And here is another: <pre class="mermaid"> graph TD A[Client] -->|tcp_123| B B(Load Balancer) B -->|tcp_456| C[Server1] B -->|tcp_456| D[Server2] </pre> <script type="module"> import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@<MERMAID_VERSION>/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true }); </script> </body> </html> ``` **Another Option:** In this example mermaid.js is referenced in `src` as a separate JavaScript file, in an example Path. ```html <html lang="en"> <head> <meta charset="utf-8" /> </head> <body> <pre class="mermaid"> graph LR A --- B B-->C[fa:fa-ban forbidden] B-->D(fa:fa-spinner); </pre> <pre class="mermaid"> graph TD A[Client] --> B[Load Balancer] B --> C[Server1] B --> D[Server2] </pre> <script type="module"> import mermaid from 'The/Path/In/Your/Package/mermaid.ems.mjs'; mermaid.initialize({ startOnLoad: true }); </script> </body> </html> ``` --- ## 4. Adding Mermaid as a dependency. 1. install node v16, which would have npm 2. download yarn using npm by entering the command below: npm install -g yarn 3. After yarn installs, enter the following command: yarn add mermaid 4. To add Mermaid as a Dev Dependency yarn add --dev mermaid **Comments from Knut Sveidqvist, creator of mermaid:** - In early versions of mermaid, the `<script>` tag was invoked in the `<head>` part of the web page. Nowadays we can place it in the `<body>` as seen above. Older parts of the documentation frequently reflects the previous way which still works. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/intro/n00b-syntaxReference.md��������������������������������������0000664�0000000�0000000�00000011733�14332737457�0024370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Diagram Syntax Mermaid's syntax is used to create diagrams. You'll find that it is not too tricky and can be learned in a day. The next sections dive deep into the syntax of each diagram type. Syntax, together with Deployment and Configuration constitute the whole of Mermaid. Diagram Examples can be found in the [Mermaid Live Editor](https://mermaid-js.github.io/mermaid-live-editor), it is also a great practice area. ## Syntax Structure One would notice that all **Diagrams definitions begin** with a declaration of the **diagram type**, followed by the definitions of the diagram and its contents. This declaration notifies the parser which kind of diagram the code is supposed to generate. **Example** : The code below is for an Entity Relationship Diagram, specified by the `erDiagram` declaration. What follows is the definition of the different `Entities` represented in it. ```mermaid-example erDiagram CUSTOMER }|..|{ DELIVERY-ADDRESS : has CUSTOMER ||--o{ ORDER : places CUSTOMER ||--o{ INVOICE : "liable for" DELIVERY-ADDRESS ||--o{ ORDER : receives INVOICE ||--|{ ORDER : covers ORDER ||--|{ ORDER-ITEM : includes PRODUCT-CATEGORY ||--|{ PRODUCT : contains PRODUCT ||--o{ ORDER-ITEM : "ordered in" ``` The [Getting Started](./n00b-gettingStarted.md) section can also provide some practical examples of mermaid syntax. ## Diagram Breaking One should **beware the use of some words or symbols** that can break diagrams. These words or symbols are few and often only affect specific types of diagrams. The table below will continuously be updated. | Diagram Breakers | Reason | Solution | | -------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------- | | **Comments** | | | | [` %%{``}%% `](https://github.com/mermaid-js/mermaid/issues/1968) | Similar to [Directives](../config/directives.md) confuses the renderer. | In comments using `%%`, avoid using "{}". | | **Flow-Charts** | | | | 'end' | The word "End" can cause Flowcharts and Sequence diagrams to break | Wrap them in quotation marks to prevent breakage. | | [Nodes inside Nodes](https://mermaid-js.github.io/mermaid/#/flowchart?id=special-characters-that-break-syntax) | Mermaid gets confused with nested shapes | wrap them in quotation marks to prevent breaking | ### Mermaid Live Editor Now, that you've seen what you should not add to your diagrams, you can play around with them in the [Mermaid Live Editor](https://mermaid-js.github.io/mermaid-live-editor). # Configuration Configuration is the third part of Mermaid, after deployment and syntax. It deals with the different ways that Mermaid can be customized across different deployments. If you are interested in altering and customizing your Mermaid Diagrams, you will find the methods and values available for [Configuration](../config/Setup) here. It includes themes. This section will introduce the different methods of configuring the behaviors and appearances of Mermaid Diagrams. The following are the most commonly used methods, and they are all tied to Mermaid [Deployment](./n00b-gettingStarted.md) methods. ### Configuration Section in the [Live Editor](https://mermaid-js.github.io/mermaid-live-editor). Here you can edit certain values to change the behavior and appearance of the diagram. ### [The initialize() call](https://mermaid-js.github.io/mermaid/#/n00b-gettingStarted?id=_3-calling-the-javascript-api), Used when Mermaid is called via an API, or through a `<script>` tag. ### [Directives](../config/directives), Allows for the limited reconfiguration of a diagram just before it is rendered. It can alter the font style, color and other aesthetic aspects of the diagram. You can pass a directive alongside your definition inside `%%{ }%%`. It can be done either above or below your diagram definition. ### [Theme Manipulation](../config/theming): An application of using Directives to change [Themes](../config/theming). `Theme` is a value within Mermaid's configuration that dictates the color scheme for diagrams. �������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/misc/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14332737457�0017737�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/misc/faq.md��������������������������������������������������������0000664�0000000�0000000�00000001751�14332737457�0021034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Frequently Asked Questions 1. [How to add title to flowchart?](https://github.com/knsv/mermaid/issues/556#issuecomment-363182217) 1. [How to specify custom CSS file?](https://github.com/mermaidjs/mermaid.cli/pull/24#issuecomment-373402785) 1. [How to fix tooltip misplacement issue?](https://github.com/knsv/mermaid/issues/542#issuecomment-3343564621) 1. [How to specify gantt diagram xAxis format?](https://github.com/knsv/mermaid/issues/269#issuecomment-373229136) 1. [How to bind an event?](https://github.com/knsv/mermaid/issues/372) 1. [How to add newline in the text?](https://github.com/knsv/mermaid/issues/384#issuecomment-281339381) 1. [How to have special characters in link text?](https://github.com/knsv/mermaid/issues/407#issuecomment-329944735) 1. [How to change Flowchart curve style?](https://github.com/knsv/mermaid/issues/580#issuecomment-373929046) 1. [How to create a Flowchart end-Node that says "End"](https://github.com/mermaid-js/mermaid/issues/1444#issuecomment-639528897) �����������������������mermaid-js-mermaid-9bb0ed2/vdocs/misc/integrations.md�����������������������������������������������0000664�0000000�0000000�00000040621�14332737457�0022772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Integrations The following list is a compilation of different integrations and plugins that allow the rendering of mermaid definitions within other applications. They also serve as proof of concept, for the variety of things that can be built with mermaid. ## Productivity - [GitHub](https://github.com) (**Native support**) - [Using code blocks](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/) (**Native support**) - [GitHub action: Compile mermaid to image](https://github.com/neenjaw/compile-mermaid-markdown-action) - [svg-generator](https://github.com/SimonKenyonShepard/mermaidjs-github-svg-generator) - [GitLab](https://docs.gitlab.com/ee/user/markdown.html#diagrams-and-flowcharts) (**Native support**) - [Gitea](https://gitea.io) (**Native support**) - [Azure Devops](https://docs.microsoft.com/en-us/azure/devops/project/wiki/wiki-markdown-guidance?view=azure-devops#add-mermaid-diagrams-to-a-wiki-page) (**Native support**) - [Tuleap](https://docs.tuleap.org/user-guide/writing-in-tuleap.html#graphs) (**Native support**) - [Joplin](https://joplinapp.org) (**Native support**) - [Notion](https://notion.so) (**Native support**) - [Observable](https://observablehq.com/@observablehq/mermaid) (**Native support**) - [GitBook](https://gitbook.com) - [Mermaid Plugin](https://github.com/JozoVilcek/gitbook-plugin-mermaid) - [Markdown with Mermaid CLI](https://github.com/miao1007/gitbook-plugin-mermaid-cli) - [Mermaid plugin for GitBook](https://github.com/wwformat/gitbook-plugin-mermaid-pdf) - [LiveBook](https://livebook.dev) (**Native support**) - [Atlassian Products](https://www.atlassian.com) - [Mermaid Plugin for Confluence](https://marketplace.atlassian.com/apps/1214124/mermaid-plugin-for-confluence?hosting=server&tab=overview) - [CloudScript.io Addon](https://marketplace.atlassian.com/apps/1219878/cloudscript-io-mermaid-addon?hosting=cloud&tab=overview) - [Auto convert diagrams in Jira](https://github.com/coddingtonbear/jirafs-mermaid) - [Redmine](https://redmine.org) - [Mermaid Macro](https://www.redmine.org/plugins/redmine_mermaid_macro) - [redmine-mermaid](https://github.com/styz/redmine_mermaid) - [markdown-for-mermaid-plugin](https://github.com/jamieh-mongolian/markdown-for-mermaid-plugin) - [Jetsbrain IDE eg Pycharm](https://www.jetbrains.com/go/guide/tips/mermaid-js-support-in-markdown/) - [mermerd](https://github.com/KarnerTh/mermerd) ## CRM/ERP/Similar - [coreBOS](https://blog.corebos.org/blog/december2019) ## Blogs - [Wordpress](https://wordpress.org) - [WordPress Markdown Editor](https://wordpress.org/plugins/wp-githuber-md) - [WP-ReliableMD](https://wordpress.org/plugins/wp-reliablemd/) - [Hexo](https://hexo.io) - [hexo-filter-mermaid-diagrams](https://github.com/webappdevelp/hexo-filter-mermaid-diagrams) - [hexo-tag-mermaid](https://github.com/JameChou/hexo-tag-mermaid) - [hexo-mermaid-diagrams](https://github.com/mslxl/hexo-mermaid-diagrams) ## CMS - [VitePress](https://vitepress.vuejs.org/) - [Plugin for Mermaid.js](https://emersonbottero.github.io/vitepress-plugin-mermaid/) - [VuePress](https://vuepress.vuejs.org/) - [Plugin for Mermaid.js](https://github.com/eFrane/vuepress-plugin-mermaidjs) - [Grav CMS](https://getgrav.org/) - [Mermaid Diagrams](https://github.com/DanielFlaum/grav-plugin-mermaid-diagrams) - [Gitlab Markdown Adapter](https://github.com/Goutte/grav-plugin-gitlab-markdown-adapter) ## Communication - [Discourse](https://discourse.org) - [Mermaid Plugin](https://github.com/pnewell/discourse-mermaid), [And](https://github.com/unfoldingWord-dev/discourse-mermaid) - [Mattermost](https://mattermost.com/) - [Mermaid Plugin](https://github.com/SpikeTings/Mermaid) - [phpBB](https://phpbb.com) - [phpbb-ext-mermaid](https://github.com/AlfredoRamos/phpbb-ext-mermaid) - [NodeBB](https://nodebb.org) - [Mermaid Plugin](https://www.npmjs.com/package/nodebb-plugin-mermaid) ## Wikis - [MediaWiki](https://www.mediawiki.org) - [Mermaid Extension](https://www.mediawiki.org/wiki/Extension:Mermaid) - [Flex Diagrams Extension](https://www.mediawiki.org/wiki/Extension:Flex_Diagrams) - [Semantic Media Wiki](https://semantic-mediawiki.org) - [Mermaid Plugin](https://github.com/SemanticMediaWiki/Mermaid) - [FosWiki](https://foswiki.org) - [Mermaid Plugin](https://foswiki.org/Extensions/MermaidPlugin) - [DokuWiki](https://dokuwiki.org) - [Flowcharts](https://www.dokuwiki.org/plugin:flowcharts?s[]=mermaid) - [ComboStrap](https://combostrap.com/mermaid) - [TiddlyWiki](https://tiddlywiki.com/) - [mermaid-tw5: full js library](https://github.com/efurlanm/mermaid-tw5) - [tw5-mermaid: wrapper for Mermaid Live](https://github.com/jasonmhoule/tw5-mermaid) ## Editor Plugins - [Vs Code](https://code.visualstudio.com/) - [Markdown Preview Mermaid Support](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-mermaid) - [Mermaid Preview](https://marketplace.visualstudio.com/items?itemName=vstirbu.vscode-mermaid-preview) - [Mermaid Markdown Syntax Highlighting](https://marketplace.visualstudio.com/items?itemName=bpruitt-goddard.mermaid-markdown-syntax-highlighting) - [Mermaid Editor](https://marketplace.visualstudio.com/items?itemName=tomoyukim.vscode-mermaid-editor) - [Mermaid Export](https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.mermaid-export) - [Markdown PDF](https://marketplace.visualstudio.com/items?itemName=yzane.markdown-pdf) - [Preview](https://marketplace.visualstudio.com/items?itemName=searKing.preview-vscode) - [Preview Sequence Diagrams](https://marketplace.visualstudio.com/items?itemName=arichika.previewseqdiag-vscode) - [Markdown-It](https://github.com/markdown-it/markdown-it) - [Textual UML Parser](https://github.com/manastalukdar/markdown-it-textual-uml) - [Mermaid Plugin](https://github.com/tylingsoft/markdown-it-mermaid) - [md-it-mermaid](https://github.com/iamcco/md-it-mermaid) - [markdown-it-mermaid-fence-new](https://github.com/Revomatico/markdown-it-mermaid-fence-new) - [markdown-it-mermaid-less](https://github.com/searKing/markdown-it-mermaid-less) - [Atom](https://atom.io) - [Markdown Preview Enhanced](https://atom.io/packages/markdown-preview-enhanced) - [Atom Mermaid](https://atom.io/packages/atom-mermaid) - [Language Mermaid Syntax Highlighter](https://atom.io/packages/language-mermaid) - [Sublime Text 3](https://sublimetext.com) - [Mermaid Package](https://packagecontrol.io/packages/Mermaid) - [Astah](https://astah.net) - [Export to Mermaid](https://github.com/Avens666/Astah_Jude_UML_export_to_Markdown-mermaid-Plantuml-) - [Light Table](http://lighttable.com/) - [Mermaid Plugin](https://github.com/cldwalker/Mermaid) - [Draw.io](https://draw.io) - [Plugin](https://github.com/nopeslide/drawio_mermaid_plugin) - [Inkdrop](https://www.inkdrop.app) - [Plugin](https://github.com/inkdropapp/inkdrop-mermaid) - [Vim](https://www.vim.org) - [Vim Diagram Syntax](https://github.com/zhaozg/vim-diagram) - [GNU Emacs](https://www.gnu.org/software/emacs/) - [Major mode for .mmd files](https://github.com/abrochard/mermaid-mode) - [Org-Mode integration](https://github.com/arnm/ob-mermaid) - [Brackets](https://brackets.io/) - [Mermaid Preview](https://github.com/AlanHohn/mermaid-preview) - [Iodide](https://github.com/iodide-project/iodide) - [iodide-mermaid-plugin](https://github.com/iodide-project/iodide-mermaid-plugin) - [Google docs](https://docs.google.com/) - [Mermaid plugin for google docs](https://workspace.google.com/marketplace/app/mermaid/636321283856) - [Podlite](https://github.com/zag/podlite-desktop) - [Named block =Diagram](https://github.com/zag/podlite/tree/main/packages/podlite-diagrams) - [GNU Nano](https://www.nano-editor.org/) - [Nano Mermaid](https://github.com/Yash-Singh1/nano-mermaid) ## Document Generation - [Sphinx](https://www.sphinx-doc.org/en/master/) - [sphinxcontrib-mermaid](https://github.com/mgaitan/sphinxcontrib-mermaid) - [remark.js](https://remark.js.org/) - [remark-mermaid](https://github.com/temando/remark-mermaid) - [jSDoc](https://jsdoc.app/) - [jsdoc-mermaid](https://github.com/Jellyvision/jsdoc-mermaid) - [MkDocs](https://mkdocs.org) - [mkdocs-mermaid2-plugin](https://github.com/fralau/mkdocs-mermaid2-plugin) - [mkdocs-material](https://github.com/squidfunk/mkdocs-material), check the [docs](https://squidfunk.github.io/mkdocs-material/reference/diagrams/) - [Type Doc](https://typedoc.org/) - [typedoc-plugin-mermaid](https://www.npmjs.com/package/typedoc-plugin-mermaid) - [Docsy Hugo Theme](https://www.docsy.dev/docs/adding-content/lookandfeel/#diagrams-with-mermaid) (Native support in theme) - [Codedoc](https://codedoc.cc/) - [codedoc-mermaid-plugin](https://www.npmjs.com/package/codedoc-mermaid-plugin) - [mdbook](https://rust-lang.github.io/mdBook/index.html) - [mdbook-mermaid](https://github.com/badboy/mdbook-mermaid) ## Browser Extensions | Name | Chrome Web Store | Firefox Add-ons | Opera | Edge | Source/Repository | | ------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | GitHub + Mermaid | - | [🦊🔗](https://addons.mozilla.org/firefox/addon/github-mermaid/) | - | - | [🐙🔗](https://github.com/BackMarket/github-mermaid-extension) | | Asciidoctor Live Preview | [🎡🔗](https://chrome.google.com/webstore/detail/asciidoctorjs-live-previe/iaalpfgpbocpdfblpnhhgllgbdbchmia) | - | - | [🌀🔗](https://microsoftedge.microsoft.com/addons/detail/asciidoctorjs-live-previ/pefkelkanablhjdekgdahplkccnbdggd?hl=en-US) | - | | Diagram Tab | - | - | - | - | [🐙🔗](https://github.com/khafast/diagramtab) | | Markdown Diagrams | [🎡🔗](https://chrome.google.com/webstore/detail/markdown-diagrams/pmoglnmodacnbbofbgcagndelmgaclel/) | [🦊🔗](https://addons.mozilla.org/en-US/firefox/addon/markdown-diagrams/) | [🔴🔗](https://addons.opera.com/en/extensions/details/markdown-diagrams/) | [🌀🔗](https://microsoftedge.microsoft.com/addons/detail/markdown-diagrams/hceenoomhhdkjjijnmlclkpenkapfihe) | [🐙🔗](https://github.com/marcozaccari/markdown-diagrams-browser-extension/tree/master/doc/examples) | | Markdown Viewer | - | [🦊🔗](https://addons.mozilla.org/en-US/firefox/addon/markdown-viewer-chrome/) | - | - | [🐙🔗](https://github.com/simov/markdown-viewer) | | Extensions for Mermaid | - | [🦊🔗](https://addons.mozilla.org/en-US/firefox/addon/markdown-viewer-chrome/) | [🔴🔗](https://addons.opera.com/en/extensions/details/extensions-for-mermaid/) | - | [🐙🔗](https://github.com/Stefan-S/mermaid-extension) | | Chrome Diagrammer | [🎡🔗](https://chrome.google.com/webstore/detail/chrome-diagrammer/bkpbgjmkomfoakfklcjeoegkklgjnnpk) | - | - | - | - | | Mermaid Diagrams | [🎡🔗](https://chrome.google.com/webstore/detail/mermaid-diagrams/phfcghedmopjadpojhmmaffjmfiakfil) | - | - | - | - | | Mermaid Markdown | [🎡🔗](https://chrome.google.com/webstore/detail/mermaid-markdown/mboeoikjijmjcjgpccghbcoegikliijg) | - | - | - | - | | Monkeys | [🎡🔗](https://chrome.google.com/webstore/detail/monkeys-mermaid-for-githu/cplfdpoajbclbgphaphphcldamfkjlgi) | - | - | - | - | | Mermaid Previewer | [🎡🔗](https://chrome.google.com/webstore/detail/mermaid-previewer/oidjnlhbegipkcklbdfnbkikplpghfdl) | - | - | - | - | ## Other - [Jekyll](https://jekyllrb.com/) - [jekyll-mermaid](https://rubygems.org/gems/jekyll-mermaid) - [jekyll-mermaid-diagrams](https://github.com/fuzhibo/jekyll-mermaid-diagrams) - [Reveal.js](https://github.com/hakimel/reveal.js) - [reveal.js-mermaid-plugin](https://github.com/ludwick/reveal.js-mermaid-plugin) - [Bisheng](https://www.npmjs.com/package/bisheng) - [bisheng-plugin-mermaid](https://github.com/yct21/bisheng-plugin-mermaid) - [Reveal CK](https://github.com/jedcn/reveal-ck) - [reveal-ck-mermaid-plugin](https://github.com/tmtm/reveal-ck-mermaid-plugin) - [mermaid-server: Generate diagrams using a HTTP request](https://github.com/TomWright/mermaid-server) - [ExDoc](https://github.com/elixir-lang/ex_doc) - [Rendering Mermaid graphs](https://github.com/elixir-lang/ex_doc#rendering-mermaid-graphs) ���������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/public/������������������������������������������������������������0000775�0000000�0000000�00000000000�14332737457�0020262�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/public/.nojekyll���������������������������������������������������0000664�0000000�0000000�00000000000�14332737457�0022100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/public/header.png��������������������������������������������������0000664�0000000�0000000�00000207675�14332737457�0022241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������kf~���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE稛Ƹ5 cwn0fHeJF9.#ٺxgcHRpX=%*ijo323H7O򝄂ѰIjo ".ԓrUֺyyz� 4yh5MNMɜ뇕ͰnTM>?Z 3F5ccbnlK{wenN1޻d#Ogr<B人O֏Rӏյ8ziǼҹ̹hYe^׵Ȯ{oӌ}[ŨcTRG0l'W�IyDmjBx4!b{wH8CuFvFa7�,痪ֵpքZԊiOuuVأчUqސ䛨x݃쒘ƒ㍤ۣiexa1.ۦ\ꢤW n+'xiۨ7ѬegCF4*(!�j:4/���bKGD�H���tIME6;%!���IDATx @Sw>B oD *!BFMA"b0XJ0:rK8ª3#Aug뗩;SoiZW{љ9'ɹ&(=!$O}y!s<s<s<s<s<s<s<s<g\ϋ9GHB_!skxxaX`+ޞ[s<sFFj�,X_&#1ɋ#DNc6C4E(``2 xnSϙP�5IQH{Zn93h,u�1AHȊL^s<<3fr*H# /-hD!7�<s vH)7NYߠqx<|' d|`BaIb$  FTbd<.�!~X"hqDdU" F5l+q#5My\�9~{4zҘ`#$9bD4PߏVqx=/A| ~rl 2R"Y%y\+d'c5NN5!w!x͆kD1YڴŢ>Rm6͜lbY1CagJ6Os<MEڦk̬'##$[ܚ&dmKY#޸6zrl# 1¡%BXFfyI9uPh *@b$љO-[mYcqdRB~*NɪHIb¡2ϜI%TVFlC+"mt9ӅHK]~mOfE삞_%~&.eizJIyCvC^>6fljG$E!Xd@xϞgy<(H*AsݹvsIV,V6?͙#.QIV(H(X؟%W 9S!Bu =s<gjD+ E1"+YsS#%{B#7̈ٵ/uJv>CR(2ˠ='(3i>LٌE+P9 _DϙDw|(a <y`> Iq9vCPnhed8JI`qۡ'Py1b;ΤYEk1qǞ/ B|93iĒ5^ɻ/JE߹)D lM3oѹۣRs9ꇴvҬPsΤ9QR"'P@rϙF}3@; ߽ňXtI(s.`|'C^C Y_,O8(b^ Fvf#S,ư }=9p s[iːWH\l۲)$nRWz62j󟑬*C83g9M\ň=b^W B("Pߦt/"�^Os<gϜPF 툐IrTE/?詈ԗg?L"K[?6#J'MHOT#Q# mDח"8(z s<gϦe+xakxPDIlYܼdIW.h鳻v/_m;o `1+&K^l>>B1&\�,_Β`we'JxXNyfri;Sg='-۽72|^6V"I tn+hL1 �46plj 0LpyZmB N93&KFTXڔ.䈖%KژP3}9ڷvzI,hiQe颕9vH dC-]0J]! > Q!O@Oxbg)8ɪ!PSKוnmؙOX75^&/%^&>['0EDV:pk6u7QdrhekE!gS$,JO=m9;ST W Jcv@5Va'b93; "$ej wuy9* H5PzQH\jd2(`K3M1> 6j5cXt멮i:2 $-3k=%ڔ'"N$NP z8Kk"٪U2! ږUg΃^,ΕN3A![#ۀ,9FOJqC QsLCȰǖ @St{x ?x<>?*r[4975B*ڛ8#v-zAK,ID&?<"�Lĕ8X KEk  ||\ߦ}" d�yo=sl(3?36x+tǬ9y2)U]2O^["^6O"IYvK`%L 3 ;i‚N l4}12"+Ko{`TO{xl햠4h4:KV V,'udez _΍ۦN&Ňx^V@NQfNۮND,_ːiBE$ <-7ϙ'j({R{[+MM1LĒ(ɚȔK uXs喐A~xRKC$N@B6Չ0~I3Q<uB6D- *YO2zI~|h"~-\?1?kޒM6f rxB|d$$vp0%~}iyTE(D)67U JxGBIl. > yq{"vǫW<Xiڴ )LxNu/`@ "Ywqi. SFHؿHsā�u ňh1NU >J{l; Jڹ?fD"[5ŝ?*'l$5J^=$sִ#o3jΚcP<gWyyi] غ6zMJb`م$/]T%jL6:S;qӱk5},cԞmnǶ;Ti($1#e"�cLv>C$g>.<h-<זBk>)w~‰hh0sޮB`N`ƍ6d$9RqanqxΔ8I"K(ce'v@k{6`|%J&[ʎ%|Q؈D^sZsY+X3HlTgԀiyΣwfTϴȴY+%9 ^ڟP3J"Q@QbTQ|Ӷ8Dx<m,WClB2cuƍ]MErFhAy9 ?BmY)K@J$L-E wm t*y$6B$!~N=$F[_5^IJ@֮%] 9A6H�8!;nec-b zԣe9!ҝ{o$MytӅYݳd깻 (,uxSz\.SŖ'(-ÄXb* 5@ aB1sޗDLiʹ0VdW?{~^_F.+eD!-Q'b"WEEn/1F΃ k[U!hU; F#-[/x : S? wFHv I֖8�*GyC-Wȸ(ٮ*I ;hYHxP�*F[)eIc4avƚOb :n 50J@ #GWSSܡ=!?0I"&޷MI x+w/yU"ņcOB$G0g`% 9~s#хkH�qu[ 'FrWW7MM ]svH\B,\\o/YlIٖ5sI\@9{ snF`7vPƙ{!JحD 4Eghmjjjlll<흻mx-䶴7Wb-ݽB=oɞm1.^GS-eOf`Ty#vfYaˮc\�GǍC4PS]`�Ĩ "]k7{ӞP%GMYdZvrĉ!R@If dVFB%h5k]B10)~.K F|Hki`Qbz 3M9{u[#K 65']*925"z~@9!"dRq@H:i>$FOan$̴qsW�Ś@k Rh@wߌZ 00Bv p Mu<'}m)ji<ݑ4>kkة0L=Ks>gd ,d |9xt54r!Wx"ED,Xn"5slZ"č"hZo:y&4gdIB� e Wb$ҕC 40im-:}$AтF/FSN9 *onMwDB5B5^(פ3"t4@IƷqX;n rj4UԷDB $2S{xMK7`}\b a<2@egZ#v[)W'bFDZfi:FtJ,ȈWy0I H4_=ԩ4LE#%dĠĚ0ngA 8)/NDT@C+ň] F�xCF[_{xe,z [g퐶uͬ�ȿc@b >q 0E{MW`%v3z>K5XY$'+@͍07Ywv�J (qϠ� 0*x6FN(Ye5LF5OC<g 3#YRgH#Dp[ 5GqJŵa-DXu-4/j ҌFHkYfDF˻t-:읺య6eLx$F`X߇"Xmjю2dADKW JPM  1ߘ;pDl"̨mi`;ڀ`kl+:aobe$}[ڈœ9SV0bEP lㆰV88}IB0.t`R ЊfT=[|U\!Dp5&Ҩs :};ZVB"!vp6e&-Q,8)yy3E,4 aX᫱?NL 8_#Ɖi'55X L7`K v8+VHk<g4Tgiok0X VbQjcʴpeеN<m3UT#  g_">IbFr$(7x#(cm_`3 4ɚ,Ffwdi zg ־o70vDVFsțaF35e,̚H &�v: J7EC+0dyL0ӝiҍr TNDZb33LoRӲ$SOY]G2!*yxyLu,LgӻK!%&)@B앓lH @IQii02Ej08U� k`5Y5ꉂ7Pf5Nf]s%zj3ͪް BDZm *x|F354Y4n;nΑ%֗,:P `L-i\BR _@{1BHTk%#dx'795=s@  FBQ}sFR Ë<g*# dYlZn!B.%z DZﴊ'ͨ4n5ؚ� u*ժ́[g :T/ER\:|ŗXZO,F߽d^&ZڊPH)E,ל diPfj;q&OwNPcix:YFRbn4kIfnV![gdG_5YwcE/:Uw<vBZEZ}M"<Gϙ**YLU�Gqcr # DF;#`( REYުfIxW:fwD!ϖ֊Hr[7kkJ+JW}lKqO+.m QkT4ϙ*P4p rt#Ftߌfr' x[mN!J+lNiD~=`4?pNs7| g^O P F7&lk |<kϙ2"Ͳ@VphĮMVMfIv45H3B1(C; dZn0cQu7G5uzÆ0M*4'3@m |+ g8kD<"sF+蠄0;ȤDNw܈NZ>ZˀՋ-h-$84ps%Բ&ck]gtAK:{շDoH)Ì""3^7y$XIM "!nwDiva`+[zc:WM*,[eMd{M U˱wXwV#H3RDJ<`9SD},W\H4*;փ #قCTF{'\0 CĘJ^Zi:>6J^7^ۢfɰF"C;n7HBpe  _=<Z@Y!k2>.ΨoBI cl%#L^+pd#F32Pi NX@,-j@)QbH76B8ӈATBK^ d1"�Ĉσ4A{H7֫ΰ$Ke& 嵐"$i:ZԃV#(aêuXQ#zAs#k5)Bmؠ>IKhs54&H?XdfYh ąit٦<O%KˍM"wܒa}VK-zVf2d ," SOual2Mr! ʑ\-%^E4o/ٓnSwυ/5VWI<=g5Z{Me1bHaiumaAig{j__@Wcʎћו%'F%Ma}|r iC/5e+WV#B ` mlmб*mV#R xEIlp&2zJY}%I*_s%/l%*HENz}\Dfi$ Z\�+f FUhMTdsjpΠkhokYyVOԱ  1"Qwd Q2md!wZjW</#4 C&p_lBC S}sF'vS]˶ѸZ2 X'-&Қpcz@/@"Ɩ07l贚hk˰>XyBMT3pMPu۱2; u:ھW[' 4 &-uH'[<HkGqvť~YČP"+<&qVȲwX w5%AI#FHĨ 3Я7n$e%j`H&4R'28c@ xoCmW'^j|w^п4g$"8ZfTT`"c{&\.E٢f`i<(-FIod&Pj/LBSƃLdxVu,ٰw n1񵈴ƦV."wW0bdI?7Ud& 럤4%P n;&;[/kUe^o>KtbdUÖ́HÈ�LWUd6Qʒ*İ>]89Ta ~}4{z0d&AO ^9t^Sd9e՜C6�:i5笝 z@d;f]KB U_�TCnx8sr;;qsi/fh+kk $:iHcؽi2AkK}Ik@EZ*z?).%ɊJ$'dxSNYSRwh4zdEIA_?Y2OB o!}5�$^H-9s__liw5~; ÉK] :bpl1 �tĈz vV4vF F:MkhCI ]&BQnV" MXsVhʨx-&OKԆeKf)g;i\eҪƱP:iH�!@M&B3wfk:`eXߛs^d!`x -H]Ssg -bbd" #F0ـeא4`y,Pj05!bLi&?n_7x9D.47W{JY1i߀XtsYH*)+TVc]"II I"m�!S2R{C*IMRlmjL"zM&E͒,?y|JpViN5ΖVI^>g @xۍ6f i"yQLJjR#$ rs΂L(Yx-'ze%UUX xUyr2L 3Lä9i> }=̈́aQP@_jYtkƬ-(]:|_HꤝCkfv1e|z;g ge& ́h|U*HcCe㐾*oݯ9r'G5דIL&ZF.ھz'M.XJړɄ$O&Ҋpi~~sӇ^1TEևu{�h_hiTSw 2*kՁ>`P2u]xl(!DN \sbz XP;b;5re$c•DrIrk&Qd'~9 {iEl12xfSOe YԙL$ %y-k*=jnhXoY * �eXTU7|{q?_ՉkLD֟V֦FB]"D Fޞ>T]9wuGl;Qaٯ  bg382B$,f Oe##.B-mҰ>k'ɚImKHLVTt@ Ip@UcWMV({#sg T z уInZL= iװ%F"Vt}8F{7\t6AEZ!Π"@' ܡ̃1ft޶7Jjm?]^dE14DZ7xրč-�%y DvJ@Wfe}&;vĨ^#69=?FnB[ qXoFJZzA3_ay/Rߛ>6Z(G&[<11­| kZ1idV^W@ Ws~!ƓI}Bv@eNZ>#6yg+.g]hXYofZ. z0yp>3.03ڮd<WaGi; 4bD5Ar,3d2PT{za 8c4{7!e1 <] Zi{E+2}qD7ǩm }:dn I]5o@F˵e׈L@p#*'I.MN.QnSmUZpZ |k[a3g-"Z JWKZZ__*y>O7ott} ~L]&DZ#1UQ 󰒼xD |ue%iSvF#!҄<k'kX8lL_Q,R]O'a.$#>k]ƸJ"S/Y<$GfP91wBo6H;a%͞ @%T [U( Z2F 7#DǤK=WL(2jԦպu=meC]ށ>�i]Hk8AiwP UVe2adY䙴F[P`^#챻  $1Bpb>m o72elBȖj՟~EjWIj @&SWcю /?LI5.Ҫ%#-lE~A"Ȅ-yc"J;$2} oA�xmtMnۖmU~[O|W�>:gs5f8 I1*adl5;WV0,/l�.!)vG`:w=Á7%2IxdfUn_ZΓk9ZeoƻH <cQU145Qb_ -PJ+K R,JX�V,S ZJ60]xjy3Es慒VGI"Dl2"@,fm3#uH+5KTl?$k�&#ӽn+K F$E}JXX f̦?_xgs;ysw_A3nT/;m=.k܀k4K9& d}𚩼p^*JZVF΋W"ڬ(*D:';GTup1Qf+3\ N TzD'co eG*�&%q\%KPȺmnkjH{+;iafe'ĈINQ tBOW7L\Uj>a>΍ WxfG$s<^KGj$b%:I( (am(O* ^>M{pq@܈UyǨ,Hkc"E{A1lpT@`(?m)N@ `ܫ4`&WYfpeP2ziTr*҄$JZ`U]{FݓƈFE!۰>֯֒8�ɝ:i#?N^6e6Pd ','SӠiݬÍ*ХjGQGOZ L7)ܜ*&0sl2|ZTUfNQŽr* ּlՎ5܄ܬYQP[1 �+܋fIGU[cwMSF԰1l䃫CVքqU$b#TszD£~n`"iJLt醐=$XdX\NpmVd%<D�J94.Xճ(s4 Rs-=qs(3^[BHxsv~cC51 ՛Td%^+,ivx|ʱ*R>3[b0m/, ::\$)SUsS�i9٠?`&DZߞDt`rDWyvv"k'@嵐"!bXU2̾ud֊gNCՙz/ ! G.P5LH:n4GӇmI1; )3w=g2"iOH0Ckr CBK!lKV#ə-U关TbA 1DT*\VEC J0#!RlxDXnw4QEHzM}>Lt`x>Ya}CB<x''Aj1zxYl-By1L\m[-QD5)~KuXzKO Lj^=p)}]U,U.Նi_,H]>`1 FńH#sP!N:rbxe f+ Z/YF�p4Bɴx2$\M2El#A3f0&*cYzM&@߉1 Ku]Ts-]}w?$YOqE;m tP=�m^Ō `o[W;Oid#Z5I)+*ҐZURaz͜2JAZ$*;#\ 1,V8ir2 H4Zn1s "F"DHM{"-" IjU{M&:MI#6", BByH:i$YɌ6tVhbaM G3�z u4I^(OI9l dik@u~ʓ@ �"MIibD',6.Jb@e<30@ Di>En0@܅$˴ { T( j|aSDGy?ĈIPNn&J.dBUzQG9fg60(%pC&Q88MtJ14* &%:iHnŢ$˅ 6 f6fY=:t ŊDCU9Nh!{!r1bm;igq3c Dj |wDO.U8]dfYCȣ&NNڽP(t̹@{'oPZVN*6IK4z0Vأdk3^cy5Lulkڐ*Ipw5#O [ b h1%$݈E @Lג6cY3aq8Gy#,zqeXY 䛳)4%k'-IbDYAYPB(aMUF_SQEI߉5%@fs ;b0m�{XPd̫<σlu<dFsQ^K =x�&7kukhĈ{q^[ �4èȶ?M./SjvGIl4L;匈IX%wj3JRfy a}&V2vҦL ͞93zP]lZBָ7;q/$q;v~'dI=w4QaBg'b L 00iĈQɁVr3XDJBKe!,$Z ~:l,hv^H*wLp%..)|>XKӳqN4.uUgoP<wi%9`eywhê16J0#d10 9D Y(Zb_K/ \5:M2&ؑ1Wr'm9M8|+aY:츙~>2m^rcȑ<C4ݣ,//*bn1B&Xj0ve)؃4'kZL'}`.�FW=gm ]FMiH5^ߗJV}ÑglPh;2NC(!`Vd)BJq�M1[o{0fLcT9InƒufΎk?ݺ|37 ;&)<o]CygB7Zل5A,TcQ0a| ܠ$tDc 7[(Q[+`5X+IW8~u7u)7yɶ.Y߾S޼ɲ:K|Q:"n!s4),u[!5ND(J&0*T!HЮlc6s6In@&WKiwF^מ6;BV7_�&7;x3:I󒮒],%9l^ˇ)njI*/2p&۳} \%!$):!즥;{iHniHs^Dkʃ+'zHofnpz-]1wAR@C7,7 �UN∓M80 q8| TyX_쉚p|/5cKfo7'<�'gXFigq"P>g԰\qlm*!{v JM(zf f뀍?()kkyݎňM I[&È w^hh׃kd,X6N?I%n힞nHKff:.9k#Lތ*7.�� H$^ #lc-+eFruܜ�$3К 89rI$u CxY/L/\zNay5 ^6P/[db&04:9w6W�)nUfC3n=Ph:akUN:nՒ 4YQu&NWϳ'`rd"�@zXio56OXCaKzf!O?jTx<r$쌷 -^:㵙M776 m4ݡ/ &�"loQt@!q8l#^ )&/5ւԺ6J(?�.5 7ex�&?MOH^M{*(>\r<S3lkH&*4{$@ƶ(h\#VP‘q d=-c:pm#ۚ5We4ʈOɢe^B4p>ײm98eb[%^h%)4CKCPy_*w" M\˶z{_yH>OHVw\G0[Lh/qı<?8 I]("u.ή~,T[WQbl[-uI�I{n=LBvY,ym3O(VxqhSG#e\mMܵZ( :v. Q7hfSɓW;IU�F`˨.Mmc%:#\#d#Fc-7nq_y>ť%mJW |4um:=@7WPBk<rבٴ(/h%nkI#5xK*^ݑS.\]:%F�`&Tk?1Q&a}gq CR}4|x~w?uoHs[(=,@~#MMM 5ţ�J%Oߵg|(} U jBžX~nY +A"!ﴐ Mt'u=TF_|}̝WDޠ˚[3 %p/g02IQƶ$N<ӳD&T*i1x˰ǘևhL5W=?yqgJwo<B/4~xI֬cfgo|^8ol܀X$H1_2 JsDc-f*hvVp[q3ܿNo_kF1{MLy Xt(4d8d8G0VjJD]iL9gǍHi'm %!$-Fn]RoH~߿b*ZKe#g GISRkp8er_;̌_Aeژ'dWU &pBR+Ĭz9` 2oImMk>t@E!泭yy}smʿy}6Ӿi8!mSD=W(a|r4kVD9=r4D̉_ $ ]q=DOO?op]1v/ŨKDexu@lp$R戡WRS=-ؽ3()YtE*{s IkٳK_e6y}o}D(,7>08 AD=* s,.{lbޛkvSUD<N68 % qnc$LY$9{G͟n\o7"$O[wk-%j.ʵe2E)Ev"_R<)Kضp } %LP!EĆKL SYۡciTDr-}l�Wڒe-|#/$Lv^*+&q$  GٚJT!dn36Q1?(p8ןk YHjlokv4{Bӿ0uF+Zi�rⵤlmx S2;ȇ A37./-yu48s;D[wg4DN `$}_7?b,͋umO[gOWnTcv>x6"4OO[\_"fFWQq$rle&gYl}(3x$$@'#�2uw =�8[ r8֓Wy(2l.Ӳ!S4C<j:Zh+~[YT�e= +C|[ĸCI)pB6G;齑~d]vݼ?f2k޷sQJC$],~G1|X^sxepڋy Ks rr lmc$G=:_NBJ7F'mrcŏ$rb&Dyt k=%p/`A5iE&{%pV𡕥гKoZXEҢ�FB̋?^؞؈e?&H1Qg}*xFmmu7i];vﲘ)3r 3w @sNFY; ŗn,(.֜eG �o-ZU\хׁ9mt7wnݹ=TфylR΂L=�9>6K cXZ,qa/7"V7. J|l㼥 K_,^]D+O?$z7ko_)rk\5]_f/v?/:+0aOx6"̫,3W^H\ O9ԭ-~p!bZ%vƫEwܺu޷}ݭS}P==׻ӄ=^>&jCP`5p7%p^K?m82++f:4S -ݹ�ֈ-jO 럭|b &nRfuZ7rE \BӇ]5 ~,iDŁq�e9IOVdgjZDvXTqDos;XrӗR܌Is}CI fbw{Ix<o0A:-:$|э+WdBTeb y:PhjtkJФrSh !Ǯ R0S>Ki#%ba,ktqcuSm]ogkEsfn iAOsO!@WYW:jZnl{ 3Fwu1Q- JX4ηwDPQmF69>=|t S2V# }b!Á:Xas7AI M zތ7';4DГZk+X�][e_`W'?%=c~3#QX}@8;kal4\ooFXľ΋&bB=IĈE*(1BXs[$P5ؽ$$70dA)i<n-A>ں6xli<Q1KD. 됢PSa9ZV[ȹfFK5D79 N6-T |UԖcn8Rⷅ1A�l']o0x=IQ96ݾM`ѷPd9%ij[V zN`l&w0.$ %MW�4ueQ@{p@Z^>zc+S M3dg<MM>_HR"7# 0i%-˞d6 5L0׶Ҳ$v%qD"0.d[>0-uO�ICE-"nxxtFZvN׮koook!?&- gt2! 0l!{4Դ]JzJVHL1\+4s-{q6<n1$L5L`%~S3r�Y9@ !L7Qg8Ⱥlt3,vB F$H;Iizvc;q5}Rhz/#W_k@ |[Z^ ЫCG:K +M`@1pM"� k9K^/VNv~XCZD'7H";P iqo$E: +uu5}L>F]%H r-^Kq�X4SkY; k^CʵV;L4%z�M5`,1>KbKYাwDYƙgElWF͚5(h/蕘nIN" `YϽovQ \\QBiv aLjJ͵ͤGg[{Ioue>9BӨ@Q{-x-x /I%pZbDε6Jm YUa6ǀ� q�H dJӝ4uI8h`c$~⇥Y'&2Yc]r]ˍOXdL5#+Hd .q3bl`yXLNw MchO9*Kuv{@R9 By>,ײډBD^i5q[';nH;i3^"*o͂\ig҃qAPfB"Uv({:%7LX?rs1BIsHD!\�<.f!Fv#LdlN"k@N}~);6<<BD.4Q\kP\x-v^Ed*#kM 8A g&@KB96'xs,E'%Z3gWbr^JN+<ZxEL8A <kN~B0=+ =0fvyMj i`XW)DP;M4F'MgUhRd$#PZM5=�9� ќ + $ŇGL$R7${vKkIZO�Dр<q5) q�J{,5.f[af2-,LѳT&C^"iNŐD/8"xcdnOb3Ԣ9Y*CN ?>er>>mM5=tw`@0|ݷݺs&ҒЧMHP!meHF[kiΨnMStxmnk!q 3+q'L}ټe vF&^r7$'#/ISCx-߾2l>5K":Œ~'*1EWI[KJeNPAΞWs9p`oYireEL-Q6fŋr<SRH z!j kFG�_'F> FN{?|z;6= aX-Et$�$շܴumk5b$#[{}IR=Xc�`}ތe�tY_ÿ'n_҄Nq<۵W;!ؒF[S[r-[MIRgI`m79.ɱi1 9J:JXϜ\:[{p|9fš Kcӕ)<h\d^(3!Ea$ĊwXg,i|÷{晻O߾>O!F��~I2 iF212`8c)^[*ERʞ0,"J-mդgF`4m}퓠HD_P޳5 :G0dBISI^xKX,wȈDJ T#bIBn. 0Z1}*O6ǖ+S6SDˡ1DDJ�s-"`c1_%EƇe-h+fCUVq 8rL<gwv~i׭~g4�c#J�o{VnwK}s[ 1$v�量�:%bTrN# Fimے|mws{7|(XL-Νnr(@@ NU#$MQN>ZpuШ[|' D9ɼE쨼PBDJT28g6TFc7*zu(}JP4rAzǁ#PZT& Z!p ,`QO??x#['v}ޝ{;N@N-SoO;Hqyݞ-MFcWjjۓ0,jT_cВD6p%k$\#7Crt{u2ɪGZhs4=N/iJx-[mu~PJ ,w7Ho%G_F?gL'학bhΉJNU |ĉ#fA3rr V6s NΝ[ 2vMigxaybrf欀VgU&S)yY U� aXJ Hle>sxas OE+}w[oߺýSoJr ;"Ԧ�_LNjڵT&iig�1jj*P muI4VmInKzUgQ>I|z˹?N:?]gsk{4˅\Cy7\ �~nYo#i�m,B_ðeO}c@=uqnh\ʡd5T/KvCO5HVER@ˎQ<zmXtNTTP1hoQ-EW,U+E3s .ڛ3kbS|{DDZـ112:iȐp^~f>U{EMK}Snw{N1r|Zu$�2SUD" 'Fs5~{�B(Zl8s㈹u:#_]߯ew@ys긏s^yQF5vfr$"~{,7F(1Ќo N%X9C@7g)/(} p+e1Jur2zR<UбWr!.%6ލ ,zXXձ[@E<Ok1^]S-Mf%- 669%ETVC("mgwO>E6!{mil* qnߺi=u;w7Pt |Iu#N^KQg6^#-C[*4]&W-a?vJ_ޔ7(Zzǭ$stw+gl^DBgqbI$? #vlY�8!1>t6P"� OU84S)Trbρ3 rO{I"mcTc/Xd9Z߱[w7A3.-V.ܓ,,L8<+ycAtI9М(N7$,i/BA|L[[ߌ9 ݷz~�?|{w޹bط#k'a 8\>m֢joYmFJO 8x"Ld$94)p�^zDZ�zǒBoj"/S//ߔ]q7dIZaQb*XM+IK㖠?^OJc,fB.J' �.DǏp,1x7*lT>PrҊ`=W<]+jװ<T=zR6s̜kt>>%* ȢjH"cUU�Uzl#e9s2(&***؊iIG5"@z}nk y!+rݻwy[Lvz;P:iSQ [JL36m6Di֌4wr)l{Z;tb@>nxnOv󆇳r~$:OT"ER䆭˟Yu!`˸FZ3M~p/htJX-FE"{3(J:؆ǎ"Ý; (Wiibol:'P%]RW<S_QQIX'BVұ*6NL9~9'9/'*iCCl|@酪/b`tCi<?=3uN_pPbc!w Gw|{Ȧ;wPv(/B!)~^#3hXR'%GȚUD`EV,7"P\Irt*pڌ]&8uus-;e>!(tFfz_y??Hw8p>.+_/7%?G/znYv-ͼ'*|4u�߶?lˉlk$Hr4-?v Ä8c9[ )82Z\v kti i( yL?KC4 0(c-/8Ǣn8=kK KY@펧u)@t:8g~)H{u4xy\SPop3kVF"%9|̝�kJ;2{ow3nE?3.V[aB\x~i!yyDdiA6m~)s|`LpI$9+xU"n6p~<'l뾵O4GA)uK&)X_=^%<1_/qg*xjdԹ !~<.55m7x<�mgA@e Ru\DKV8 P�2CQK4 A6YcSŅ/a=7&ac,�5 ii܈PAnCVA/԰#D'v9 Fݽ}(92{v巘Kdm%J[?�zB'Fؽns6rw(NE$^4'QH; RnQQ_۫:P j㹱1KӼhn7ت#iZJSE9 $PþZăʹm G!=2NRQo�}A~ɒ[RU_.�KdsO_?\xeg\DFBJ Z65kpmm'Dj1{c,b1 #+A)RiFmSQ;Kyv[iV a1;11/̍kRz<g:iݸAL [v 7p~f:Yκ%==P0֤O>AN{4<ȩ[n;?M{6Sַ"N"k"ť,Bղbeird^$<3x J4 ꪝ"F<~:3DLzǡܸd4f#n=�8(7Ed/ݹc^cG[?af%OǒnHOI_Keϸ<[0`?<N.(L t?(z''d os$lxA Qu7Ц܄79R(vF#F<N<b`xs;~sJ>,F�b@h4/=# ~߷/7+d1|d|͇aLgr"88SO߻on] }{[Nbb|r~xTe_T/8FU8%2/)hVHl lD^DsE_).9P,) %qkR.4WxmPsUw4RG[W}G޿(y� hspք~j ?'D6C_ZTdݼt �*-vM9n`,r7\Z,$FGr쵝w9F"N8 vU*/sj1z%1R ejX_ATH>vi8}zŗށΞڞ%|?{Yu^͢]'89ʋP܏FY6<2k;-Jnoȟs- (O^}6zB hӉLT|/x?LWhCE!;rD|Vjrhq|*s 6g̚Rg 㥳S`x<߳'y?\,Z8 z�h$Rv"&% veK"$̇OdոC^T_Qhx�c@vDwoݹOޭ(+bʂK5œUAAQQw(+靴n'`tCS>y徽-#[ҟ?pS_N{\BI>g~l"l\&v9{MT{&1 8S0⽴ A꘬ De(T'oz-1݉T3g)@F,gE:g QYvmv$tЫ͚9h S$Ԯ _rCwŖz'_nxF$Ǘx-Y(΁9Hoi GTU !9['(Prsܺ@Sf1UP# ŢqA Hn{}&SW?|3dmW޻N}u].t:wSoվ�1Ԍ[6bDo}r!ϡ#0fij&= I%@ҟN &$\ )^@ҬK83 W"d)PPBJT\ڊdcQ/bez*e)?w; Ejy^oy#4A@  &z[Z6fōرn9ȝYJUlj Qϱb̑ (R{S_)HO.tv D;o\ȿ$j ;t+=(1F@-'�bC蝴Nur9+攭Y{ َ"hҰʜ=19ю'jn0T]T63*?+ܢX;zqEU )ڲ璛0'W=GtNwCBlT:w7G.7H&C}Dz@vƭ*z!,U(;JX99hbe1 1aSGkhֿ bϤ/Dý7G_v.$⬺v|^OBwWdKϺP�J>pDi?-JlL;;H^U+rrDsC[Xgf1+yʘ! #td)k׿8ZV7ka2X$.A;A"Ϗhv:䖐·-ujnEl,Ң6޽so-16r}^c#Ewce,7rwo]g>]}e{hƽ붩{ҷtzL}Ֆ՞?gRGPfuҬS6+{Ht*W߶\[O1UE*|{Ŕ0u_W#$R"SZˀ( ?1A]jK"(A{)t1X  ,^Kw%a.1;wil(J%{?OKoE(t^Wȋ`H!;u'h!F?{9z>bm]%7/ޏ(}~4zM\[;KFE֚zKRPbSVxU dF)˔1)(lH[pGMD%/?=X7W=M}5d煉Iq\Kw�@9-wo=Fp#'( ` nE=vfc$bd++:b vB8IFk`z=z Ά􃗁H#IUoڤ!X,_4H0xc^rBAE/M&޳'<JM"F</@mHJj¾=<N{x$sR??;zD _>x35KE0҆%AײY㖺 ) C!_U#ym#FǵN9ͭϭDwnh+ ɯ?x2b� l+wՎIrb7 _1YNĈt&uqTHz�X??2C?}_S?/#V*gbZnRߴ_Ƶ6Po cmnߺT9xXΦ;w6FUx N(kQIfK"tu7�}b63D/l[Fo1I(E>0X%"CRi{l`6~~.?9?λ/F~�ÛH?wQ�H_p̒::^qlZ^vdRldm\{hYDZ!�cH/ԭi$>>;bl=fg{=2 X̶V(BQ),&<K|<oEo3k3Z޾ݿKGںjx_{mo:dI%nnpU= Vi!j'2#ct#ƿf;!k:�U$,#R]*@1^LcyICIWEbD" 6( -O6mn 7A}Uzẗ́?CG޷Owqء@$vF)5/k91GT6V;NuҜwd3`jOLfxdoMv `KF5Kajʙ|yU?J7_K8W%#D=�nf3u^7 p=VH 5I"q֧ %"If4o)|Qi^C 3# !p7דr Z~d${^2<pPfz�t ߴzG[bZ^NʱxNʲh[" Hi{Ӿx+?J#j'- BEl{-30Clmxةˆ�Tu\Gd:.x�8و,PCY49 .�\ܾsR'_΢8 F>Y |q%ڃ+}tY`z`I2ypt�9�!EvY6lvjNұ>i7$)xw"M1y(#r' h4ڎ HP 7 �x C3i'99Mni=K,_o'Д=ֱ@wP}3"N# 1nmor�7{]Qd2dr" nc(S*E:$=X.l؃0);clԵp<N`w3 X=<�w%ݙQm&=d y:iBR'M(^ÌʑU hL&Z42rƍGϙ�p;Kkuq)uYfȝ4@B�_۸[xBc%s �<,1pM[i %@+^yH!ICh#Vl!kM]f8F@ :GXhbڒ! jVeW;)Xmy^^9!qT5b#Tb-pkF|}x <TwXhr]�~`4G[6Nұ2Y?$=D4N *(!"7{}I,q +4ur/4NʡGN3s=<pݳ{5ַ4k' + !B+ $Ɗc0(4uq% 4unUSo˵lhs7 @ң I^|,8_!e&F%H*m#0גw[ͱ8Z9#{�xWA39zf͘<.;i>NICh HBG nƶqQw߫ 0-pz/Zy\�$Qc)4VA`5ۨDq->/66OX +[ Ms=I7]>W(co$1-F3iN>$b_Q>#y[*ۛ&:' Ő=7؟ꚚXc܀?Zc!F6@H"^9aK �("Y&&$|wMwMǎ[vېǘ Irx׌kňx:r$Zbwnnp\ IM'?XN* %DTDV\" 9`I M`1 y&;=āUe F4+PtF6ti,݈Cنul Svj1* `ekN]8A~njp訯9,phhs/p[(c&@3iD~>h:nNPny�<伀u1$)Zt><f8ni3iV,BrC`y4;рq qq#&͔+УM2c-;f%M$ Icb$ 1@$X mHjr-I<�Lỹ4։0؅!}醠?tռ]4Idw^gva#  ) [ʒZ^<�h?zo'8yb.eCbCbdA,(;n 74x<�,OB(7G’, OtuAP?-n.�b9|1<ŤB-׾ňƝ&ǭz)p%0t˳L�r7_pǥN^kYDMz iT5IMgiAk$n֒M.{pH�@N$fF焿\\N̊fl$g 5Z{wd*2+rk-e�WW0em"y3/Q );pl,rK&SV k'͇m,l?a?[@lQ#bI\)Ơ}_Co/i{�\}er1/m-Q89:y� ˭Ly%^-Y#@sEJ1b_ ΋`s=R#d~H<�O]�ǧ0[\�\e zV]^+5#W}"lm~Ayrft͒MsFPŝ`wC^3�6AF Hijm?m3N]y<�pĔ-ۅk):-Y~G|(*:ysnrhOApߜTqbBv{m43(!JllD]˔w.tGoQaxx8st1W`4Ȟɓ`!Fk8T;{n H ѿd,n#W O4L'.6UUfW/:9UbNvYWI7d G JӴ\"!޸A 1Y_;X<9�8ޚzE,Z m4awBue,$6A+w!hl!qة*}5=&, m#M<{{" =�-~[T0sŨTo-YB/3Y1x׈wGVMpɍ@y=˞";@ד8LZGy]$Y K$+4^, !#$U&{Gv䜘q< i=5=YNe:x菔8^ ˺QH(4b[&tĒvsspFֽ uۋܨm1Ni8D@Nx�#~Qv8Z k}SqU+?8R&؊\p\+ؘtIXVn{8F%vgܲc~Nx,Zcwq4Zhl;s#p(.%r u@< [Ԝqˎ9~n-� hBelVHu�H7 Ĩ2!>qZiD&F<'Y* ?Aqp-;G͈@08ܘc5&z ʒ~*UN"vDZ37wSңWܠ�1e'ܲ"O6 FIu* dǞ!f ?-~i >!wIkq-*M^0>BfTۣq==I#nvIS<~G\bԷ6555*Ң4G dGFЄR5p!=WߪМʻy8~Y|K8%fTM tyBW *&hҬO3E=t̉.֦36655jT/:�$Kˍj "?8/;T*X5].CbVᆭws|�IȵsDNIw-ib@Z,4}XhnWA^1U6CR3nYTsx%eԵ5�ZϜtywW64b8@ 2Hj˫X Y,?f:_%VKW5THmnNKBq~#R"xLXDG^yf-Jyr!0TSIH)TJA{@8"zUV.yDkj�H)O�&tƦFKotu]վ!Bc5�yZJ I8]�ÿYJ7>R&OܜW7bIw8C} A\N$MӜܛ>GQR Iчe)Rl|]+JKECU55WCsnc}[⊺Huw�`m2L&Ĺ .�@!@a;ձkq 9PTA^(fia~*r(XP(uTgi[ IX/ڲ(}uZ(|+= *!g Bxw׳&ьI{�|ι,ZUNh4i]~bd6cpdv5yv� fM3 Znè :կ/-XUzz޼nF)y\QVu,جp@vN @ex���IDATŇJbi r3i97]4+6!eQvnP0IQw R8\oYN84ܖ[thj Hkj՟m�"ifn ,`3]36YXr 5Jա 4eEѿGf-K ^%kU'Ei_&kU*'@$(|ӒT*x}ĂbGXEDu5MbW\W6+cgAaq{OHzʒ~ V,M,[R-L (@Q Nvj>Z.�^qv =WL�hDJ&m錑:3A*k {wFYr/ 篁V</gδyVUN,"*:[ |9l]͂AVK%2T;~): >=a0‰^;:5.O'+#p*oOU݂@إ;yUvLeGx-{TZnINZիØH3̦>s I?ߡr?C}N3!O6OքktXD^]V[f2eO%]U,]P r9,G8TL^ ;G~UЁQzwȅJe/寊X&G ^ ň@<�G)%jb%͑强 /WWd,?5x~@/''ظpx� ?[Wܶv3x' iBP@g[yoƐ6x*/ TC{1I$mC /*�vm;q-1k[i2Kd '-yLazD+r&EG؆P[ZUU'ô5E{yE{fg4ǟD;5b {qe_yR,z-Q)ຬ[TYDZ+褡"m�� `ԋ7xyI˕uEm+8 4U,��<>ʌxWSSۢ346U֪0L|Q梂OEkce{jiBAHmGZXEbP),?-Luna;.K.$>#=&iU'ΩK}z͜HYiYm߆Eq9y\p]� ?^g(dʴ/߳)ϖ.ߋgZecuKBm-4f!Ff4d5Ϸտِ[d*mȺ ޡޡo7UNT<7`ejIe؋$w MGfAN !b厜sv8_斅h}bI[#?- ʓɕڞf@]]$[u: ZtҜ=S`:sef^\U.$EιO|\�>jLa4 zp60⏩w dڇme7?:/kKo))ɻE[V|}LAA (tФp&HJ̨o0b.ЮCOW+<-ª5^KKUrcԇӕ;Ӗ?.ʖ]_ʧC4 'tDP$(xrק+$('湢j(2?/ z._ewr̤qpԲYDDZ'US?2)vavGLݗQv4h^ەk+'uOtץ/Q_^3F(1p3tz jktV (ڱo`H$ږ(u(ˤk_+|loDiUaA6CX*Rj:J`ISɽTk#~َزR~Lib4(d}a(s᎗k{/FٛMQOIjqEC,o6JmC)B)||pyM $zk'M+桫s (uuuQ<)SĘv;}]sbgp <zcKm&Kci(1v34tUb_^/S]S.9z3~5iY?w 2Fit�Tv:oFnN } PP^,Hl+xݷhg^^^)Y TFCUܼŘvo!BeS F*�d4,-֓ ^JZ4 Ix NPB58</{M/\Fvu%wG:YUxԾ}ǢVcC}MIX P| i(\Ѩ^mVe~ VP =V\�hNGVFb5fKƋڀaߓkei2ufl47zEWX$L%V|@el)=} ^]vp&tQ+9ȸ^^"L:W55M9v8j{]aEl&m`hp^Pis-v]DD[~~?](XמT4d=ʢ<!�*VO.` Io"G#U]{S ZNXWXQYj*X#�>G_ lo&W@!E!ӬwrB[4+fсUo]@9G.],�\jXX4j~@zrz৔)' v3=N.�"Z[0dIv7kz{>,~#ko)ѝcyI^Iy_PG}dkѠHbVm~5J,P#0@%t^6iUrUU*Bi |tO×AzeAD4:69os؁caIZUٰH8ˡ[Tr66ո V +sF cT$NҤ={|nYWo d}꦳==`& XzYcoz]ĿEiѶڒUx)(}.+}iz}J3|Ci(\V BV CA ǩFמ"ʓB\!}}a܂1bSNO/]!9- 8@9sM|$LMi!;J$!'[z./wPLpVUU[#P,B g&�6ih*mfςxEZm{�Czkj'fnۓ&,EqɫqՁ!]6[g}~Ϡ.%_דwKvn{Β@'$@>1 pbD@ba}H`&lkm v r 7|N4J746xG8]CI* (V ڱޛ3 Ա>(1PPDU|m1:0D5 M2-J䕲 s w޿p"=0*&Y|iyu�w$I+x�\mg,,{Ikz$}۶],lI׷6  _5"I$�TTf9[PuDT$ �;˱i*iյH4:+@iR2 r#+҃7/MYkި^")5$ۛSE,t6F#[ Q7C(5*Ja:- @39ӒXm,P3[>;)-6b!y<m2,/=Vd?Qޮ~P?NPF @^ ^DIgj[H F P-BEV OMuP&bQbLuµʝRe4'9fH }ނiXTIY#,"^oOt$HXT^,+JQnQA'6Xp !RdP�A3QeM pIJ G8͔!~kY Ki633Bg4^jF6f2 v;70ЏQրF ҪW'"rH)`Ė :a&RŒNg�WJСu�iz\bLliѶU/wdUǷ,ټjm:'-1"|NZV0EZhi4Qm A"@I8A;xZv|J֤\ZJeZA~_ZćMHS`:'E\490m$Ж6"4[ۯmF,?mv |}`š_p3hl]7<sFoNM MVF#MhjP!y+Ӥ;~Qgm?E$9I]}a"ͻ8E#]l6x/㏪ʪgE)7/TzZr΢sQ6-7 �p?>d"-] I0eX,-ytP>3}&#Ո,v6TM4Lփ #sx gzLq,ˆz_(WDZ#lPNV|< ӼoWL/A74“ro l'D4R8gg -$$U ($W+,|%d y;Rf : YU An.TD2!.(FMy!~C BaAüAsd"L 4`ڊDf[>6–/nmlX}#HA/. LY@cGF[C웕1 owL;xQgYXE}+&H.3� z}y]K][]&`$א,4in|5Չr1x)(bU39)UǠ5nG?;4JiD^||ZU1a$\^S SWF,#Z*r`N1,`рIko֜U<HIG?>llj4T & PFHk"]cc?'SSU}x_HD/,,DG߃dK]O/\:wXUnGF zXvRbzm<qYq[etEGcg~cgv*z $d2,2 W:\Ss6/PLYgMa1L$� F`,i0^V ``f_a~MO;SU뛀H"| � 4,pUYsJ#4,&,`tV\q^OW,NzoCgF )@cIpqF z1zKfy3.H]8z%+eŁ*CgA+ (g| FP�2 8�DUI}<�-6�6rM18QJ;PuӥW9a3iI>4&3!k,@2H[D8C\@k'j5}N=z^dIw Hvptʌ~Թc^ K3+~Xc?Oƹ{-WL"Ғ4&tg BeFr,q@SXQt@,>})%J9xs00'CIiYȼ$juD,B]6yC�.Q][ (Bk;D.POY\˅X H;&eDZ;FGvD#I\ DS ?ɶ;z'vځ<C5w54eXv͋g[Q12]EA\1#~ ֪LDۭrf$,.9P}"i}Y򎤬`Hn,BCQeZT"Oժs'r #("WN(/׆'7Ĭ ,F2:4rP:T$"/pb$v5~׼2.вDȫ2$0HFE,8eom"Mk>΋^pJKkYXfuٖ<k8Ɔ-:u(vtg X 3聰Ha%v=n硲T{ Z*>-9'+a/R믰ŋu[9z55�w%Y Jypp9$,1+I, F>L&vb+5ug7K ^ID'�Xe)YGd{K�6krT2"`D,E,EDK' 'wAb%GUO[朿dx=quIUIuyKSR9Y+m5._Ѓ5be@\+< 7x+rc,hLX"VOI^|wڋY\�خxE*620~4VāCv t|Ik0#{g%okc`d-SM6BuPJ>fu�MoeΤ-41\j9ONj}`Ɇ5*.緶5m'4Pooω7)\Pz`ΊO'+ (9K Dް$m,6!NPS62mLc+a H`lFVJ i# 1Bn@ U[#Eh gh,X"3(f]ݳ - n?pe<)ޭx[̊j H q)Ei쏂&P3= ~z%!-*P|%2k8�MiA>%7k�E�:$]^SSs/"N㫱Òh^-e,'KBFΒ୭`D+Ұ2M5b _awԑv[ހ\?e66/up%៎-:FZbV[QȻ4 ^}$' MuJ\x (vBavz0r6-V-)Ros >WPTCj[v6XymMf1EZmT/s [_<ח? M<:?Bˆm+2 - jEXM&D&#n?S\s&!|J}lcc�wƑ%b.�a}{Ĕ %&ljqvܸkIG H3!7Fi#:vѹ:%hZw~v }b&Yte> in2`H˰x%2PHBH+Jms>t+ns[VZyc"1mp,i:m dq�sVAƹ 5DZ]F(W[T~3}Lൾ%#Ngz n�_"\uQu$ZdƈcDDI*HhFr4sue]~`{ͶblI#fZU(&fvHkїqqڬa{&{FmUAJ@&v=d ϙ؈CڳzĄ#f'M;= >xDFer) H>gI8 vjGbrq~٢s#zR}iiָ*U=2S;i.�f pS!B3XQb$j o3-FE.i G~Fߊٵ1谈4|S@1ZAޒp@' 7&Q:iDʌ[]::Cl|xK!Iwa`hր> -uߑe{!b)q a foQ/MvF�ՋF&@"TT d46ɏcs[(:WS}BbzY7c ;MШe FmS .I5GM@~A·*&Ls`d凃R)`.?;]�� Éx�5~[+ъ4V ݊t Ik;i~t~p&, <kW`HQh|Fj Yb\An=K$՗|^3sVͶI3GĮ/^O(1I,|a@mlAL�a`iI L0j%h@ >]v+ɋX(c2)%jj lWk7D7zM&f ihSg [V9M@~# IEo &Ɓ%!NT-ɺQ Hc&BaĨjwI лIxd^:KXr"9v`#FatM q9a5.RԛQ�1~^ߚ'o Rjy_o0[Qk!iY*k`lsffGHBr�& hCl4MG| kjVH[}YXn^БDʆjAG۩ѡhWX[8Nr¹+&6Z\APRE]R[-u/?t�&r�Vlc RS-  tx</ ]h$V쭀&K@_1l"$̕�WBR%_տoԗHI[D5* msQ#ӹ,0E~26\a 1qs4"P"﵄ x<D>*Zn"͇  ~|XeÑoI8F\U:kAC=`I%Lsm޺e|֝ .~܆%,7ǣ3e~fZ;i_3,.�VgrGBgMQțCS<g+eUAm-GN Q8vcԄ$cXSj^v߷uI-zψe.H1xME @.KMs5#g~J݁<I!fZn,eRE0EdQV% 74,9K[PP M^!QvZ0fFٵ=Xqg_׭tym`=N`x ֬UIFxJ@#981T.wȅre/;Kb {.$VM21p͝<^,hO詘xsyOZtDyh gl4 Q8F9$WPz0[|.I]_[8׎`WQf-gr(ܲJ_9}o@(@A$FUF_q`BӠ߸kăk8sTΊM9kc텕3*sv;<4۩4_=qddz\ZBIjPeusӍso0o+4_ZuIQe7kQxG á'';9&3ZQiK$k#bHLB,"NI|le>p"9y+,\t;W*=\J]T?kjoFlLhդhvzWꕊ&OS} yd\lLkG}* 漢2kB�AV", `Dw|27}!'rsȒXfFqէ^vAҞRhqLR|@ʍг 9ЦtY6-Uf!*_5X5m9x"m[OR9 =]1d"|I0'.k("0HD#~_DvXfA_Ŭ 6kVXT- a"caIV3N"J]zeripz)?HH^(Ht (Hlڟۯ5A> 4Xqzo2 J`1L]ݸ ku!WChܲU` Uo8�kߓa{ŗj b_O>E9ײ3r'$Z$GCpd#ۙHUef̋)Ul y'y/wCI#*K9$VZM4$�rx'3jQ97NKVJgZňZټ~�|wᎎb#Sڼ&YY\氢\梂c{Bo`ͽ%$d͎Sqw?00H|Z9Ojise9 ss27We.LAEJ?r�\ Ix[3ـn^0FK&kIb>rѭ+O ۑY:Gq7̚e͚bxz(w�, J0r3-7~Õh &:%* 퉉+,HIS@̾O<A/{76lQ~l^ql6Iun30FY]*sх=\l \NTͯm8 @00I3 hSY}`Kк-TE-xx>SDg4]W04i~ 6<5+%CI P>>F]73&N @uXӬpb>KBkNy`PrSUU)+ +R,J+̞yؙ;SKgMP(7K =�$ 5>\|4nz2R3$r XJ&67P@PeޔJKg+ J}35(-P/ D\ڮ6i 1=Y Uٱ"X*fړ#My XV(@w]p-Hpi|R7?=n}~ڗo/DE2pSp5uB 7S,+U4L Fr[naNdYD J$Nzxdg^?9 UX< mm9]>#F)+Z0L?/qޠ$$h�HG-^hk)y[/[͙FkcHJ<t9WO�Փ`;yhMPV'! C{rVl*< K -y(yKeeC!(`F9D@j\p0IaE}"y~|Hr!ZI$[%sD8Iď*V&(Y fribJc< :Bf�UY{D:"wb4$S"hN-|^4iās?{D+(Kbwe6susz,7~26n CU3[*A<TwɆd'"KJၯ.r&k٪k\K]h|ͲK6p �fّmtb$#u]w2/Haٜ)<((7[ybΊREqIrW7 6Z_O?;/wk{y! Wk=Uy^+X6JUh,F1O7co.m%wbhX~uтO)NQ<+>>'>?|^<%!h2q4{-MX4NE{GBJY e-zu4&zm}8mMѵ'{-+ƼکI;/+{=HXس5¤�7{$:iNJ>Gp@G+\p t�z8RM{Uqҹo{q"}! N[]˙* Z6r-G_mbMGm'&$CRa9?AҴ^U3u 7�UYDN`2bדQ|]{= \K-r8}|۹ \8(ݲ*|-Cal, #6['mj^󜂤-YZ]IGAme0Gx/uɋ (/ Qδ/eq["(D'[�1rɨؾ_%n7Gήm,L"O@,#wM.Kȧk{5...bOFM'wK֥@O&(Ғ@e+1ˢtur64?n qgl,'8hݲ^Jlwm}'F,$n1rXdaIД= .z{C"( v~b\u45` q?&0s>S02r%f[fO^k\KN i,{&}9K6̘IASLaH]VcvHRi˹USJ"aSxuX#2#g_w1_xʋ?N?%i M m~}/$Z͒IĈ&e^BneOG.)Qx,B/کl;btٮ'cϖzvCh9Ic^KbS5qmF-K a9߷4z͇<Pd{ Ј nt?WrӤr\-ƫ#d<i5U;LUG+c!(mIߵ4XYJt\} _pxך\_)n�%7h!L$ f>Ëa sA+x ᛕB&B0b=?_gIOƊ6<[4w "*$v2qzisURZez%N,I;׉\hKr%$)Q,)*<["Z9\Ydό,Sc?6@Kը{!`JmyЭ,wo[1CJը9Ʊ@UHrgƑ%o,GRݕ$�;( M\%E`R̢XU_ぶKE _N_]RHihv:HhDj3QQ<GHnŒN:E7O4kPdʓfk9,` Ui!{"PTד|}kq[Wٛs\V5aqQSi*#=@x$!SD3ǒFKb.]7Lõ\9(41J௨n(:-M۲q~+BUо]оz V?zvEobN1iL�21QcII:~E.&H|4J*٤Bel͂E^[>JT&`~QMZ3isp#K ֒FN\Wv-h2j*@Dx2-7QLAgߔ-r7HwmTfv(BxhbX&%9{4rQV-~ 5'G|_>o dy~8$FK`HqmR[58@T%3Yz�mN Sv@&%Ee=J.Ujp٭^_yq ZIi6Ϸ_9mlc @$<'%WJvMZ…^.aI:Akw[&:jRwCHwܶ%W4{7hLDy0OKzk7=7w$Xhص9� xf;q.|)JlHIeIС_JwY廲]=oW\ۖ'7+ M2K u 7"߶u,~QXq1pCLҼ9e]', Gk| /+6%MfYKBr�ocVeW7(UG$+Kzm&Բ2.D^f^J'Ф&U*וpQce`JE Jej-RDo\!RYsK/HM)8˔Y&bA+˚0GrQ[a�(xOі+KIHL)q2Ӿ^1DlBH^ پw_ cUY~F\G?U-U"ҵI;K+HLdHdQYApr'_ߌ/$BcIdfbdq!8͓c+8?p9$x|W-c-Zpd%UUu%!c7(qĒceI(->K!0!Hjxe]b<�>VTii LQ$XD̸M<K7#qƱR8<cHr#R$6INWXY�ʓIfbY1v;,Q6,i,!~'}\Wb'v6m_t̐{jq`Iٲ=R-$f6,I<; %?(wgֳ>MIcs_0!_KªHG$$c{YdMKrƲn,j Ʌ9�moŀ`S93m1D qlKmrYDǓfIxmbYs\= d-WcQSMsP$F6;~/-ƯaK{dIb'Y(-N~?,M0Koxgz *|z7Yڞ2V#&6L-UXSUy@vT|4DVdIٲXG%ۤռ] I ]QFzv^AL' |ۆcw뉉*5i!oL/hCeIUx#QfIV䤱$'a<�aK=C߿?<|G70d %v߇py[찜L0( ZY HºguDq%e˶ 2I,MKr%{{�2L2uhzOg ik?PfBbgA9YiӖ?wl<?뚀G#~[ qn(l<, l0q>,I쾐qY�Hug82t+4yG /"moB#;PX֎_hQ%2#tĜAXCIxD, HcI e,ܭXKs�&;4u>A) LI;n5Mc^Q# ūp?&LZ&=frG=^ @ f(%A(E ddLDyZm!6Ĩg|tj+{Or5v�|0~+ҽ1)+¤ˡ,�ѱ")ʒ7۰$6&{x�hy灥م2= ЄO^n'f @?TQ$hʲ$v[D֒+Z8?tG[OÚsx8fØ-B>Jıc,BS%?,W{Zc3fršϴ&LNK qh"m 1^U'ƪ^&%`ϱB,dZMM6H.|`?7^K8o+nok$E, p:8V4ەT= r7$�]'kJ_=2Y\VhZ,M _n#K>R<+E, mՒ8qoj'q I@֟>^|p]. 8=x`s^wCI%p|=qp_>b eI(Ei{xX&YRy|^7&R�a[vgWI+Q}G1`FQfr&|t=< hb۳ KܺÒjIK`Y֩Z!M֓`I=|ţ?]?G~>ng$I;7_FAd.wqņƸ?Nb,,BV`, vF˒ '%]y=�<�`@3G[wtx߾yGEeM"o>*}-_֍}3 0n<?rĒpD}zX-(IkIb7$7�Y$=2u_?mWs~󝏶c΂uG~c(` .�<֟f/KªH%YaѰ$H7(Ѱ$G�$e6辸,z0u/fn{K.sI.^ƑijmDӎD2p* - 46c5KLJ)6VsP@; 3<>V[u &US0ekkIrNrB~ $$sNy}>?;9s+/`(葷mSHNk sR$"x%-dPRJ><I{`åZ2nE*؎on"?2:Nh@6AH1AV`xM @!QRJbFޢ$ P.|%I�+(MBfQu4 WԜʣꍷUԭh0]3N68ԄjoCSFKRhcS$PBd$J IIˢeF"$_ԆsR8J"§PDeKy4{wzt=RX_N&A ZI~J4Je,.tִWBɍubK'ZYoߤ)IT$$JЅy"0$q8)jJ<�윮~#mn6Exp~qZ8VԞ7AvI[#wqh帪T@UT<ߎD$NI4ր(8s"%aFvyp,?in*ZImInOM#5YTV7ʩ~*2*><5G#?GF]gܭw sR�cKBk&A-nL6 JD$hD%E@IxL!%y$|4%%Z+z2Qz�[Rq'TN$>X|PF{2>Ή*i+/Tz Zk0&.?NoKkQ  EzQXYmr[$ČISRn-'`kjGj2<\ 8?,+ݹdpQEj3QP)i<ReG&Ө#dv{>z*8şf % "dN)) �f[8JbHw:D 48t`ϴb^*T5g6'KVHѣk*rnhP8L@PxG)<�9%DV>\>J%E%JsPR@)ro;yyKk6[KSざ�`q4rό֫26m='(j(]AH_Ip5C{�ttc9'lqq°"bD$hD"$J|&$8/#nhq?;v/'K'OT PsgզIrlWi],/֝zC35 \,a<�m,y*k/~dUkI$޷δDIQQo-4%xIRy�P0vCL''ADL/.OWn]T Fȼs7V}v;^Jjՙ=#Z-7=7x�N~(Б(kӡZqzJMڕׁRr)ɇH%EOI9oF<R 'EK"k-m|O'@ꪷ_3bgə%#E"vQݝz5-SW f{� I\�YRc[//f# Jb!DIPSmkB䑂IS}#t+Ӈ4왛qx�$G` YEF)<Awo܎̭TnP#5L7B4'虶I$<�^/q-Bx$c˳y!d1IĔ$J&=x(5-a8)"JZ AJ4}A[K&y�S?�P#iUǵd+u{75܀ P~FP=uw9f?6Z'$"AY\X]T7YTq2xʏM |Z] R*,ٺlS"H"$-WP%FrQ3-k#pҔf|X]LMQ& mKr,&s[ɺ}\qS9>K%I)Gd5|n{KuYud, pɬq+ ۏ孆v�g|.F$ bJf]ҪUk%ߜ7&OۆMP)8SLu�h[R]4K 9GU';$YXW1 I(΍;fOjcU)m]–DO${L0apVⅿ6C=AQF$DAIeyh׮]6ܵkW6DEINxIPR,nGbOKML675d&IJ Qq|(rRy{UNڌ6UUTMN?ř[BO~:XR]ݤj{Fߖr;o Ub$|$VJsZU$%Ej&ymH8)%H9tΟh6gbp{30a<�»uɛEh4vjԽ;EKϡ8r% i֧n/om Qؖ'Bcqd$Q7$ZJ:rqNWIJ&( ~^0dg ߗk| @Yۺ<{Wd$y2QZdh{1WI={83bF=�:mӇu#yK%ADR{( hsU^_HIo%ѶIVk<X:�L1D dܖA4ݘ^䨿 r=q{R]߰Ww:5;He~1^Q9Jjp|^Yh:�2zsbSB$.̂iW?%m`%( X aRy>n'*NX)^KbƄ �JZ<ՙG6qG!2$ԓuCEP jU&_7(Pu�J$ ˓0M�bSDKIdaQ[R$$I<rԘH j=Mh&w|]tsCuDydTۗaH7Ipչ撍W,p @NIN*Ji]0=؅J"$+6#<;4%~QeHIH~A7K<;JR<Iݡ{.WB"[;z26qdxj+5 HRQE.]VOs s7Pkmw4+(%X$VJBT5A7Mc%ibEB)BP$\Qb\h D^) Z�ucN KjWQHPkݜ$ WydѥѢv)@[$y:3 0-&)ɛE3%5U'#UfY)J]Xzo-9YS6Cp\5,& A!ۦ'yv1 "oAj$~k٥03Q:jXf [e΍lr+{1c@u.N"1@QIZD5H@JqIdq2⎌4GIʪ,8QrR.$= U,)Ӯ�`9#i\FÎ@-_n^K"03 , HNua٨9J*ݐ iU٢l7.½>l]zx!u]G4gPR~[@2˹71( è- *Jxc`$޺�A4ڥ~)}ʌB^X+ǥlOC[D̷0&Dh2\N|jpQCNP IjH:@SeM.ͺX=n6 #W&"W:ӦP5wEX %!EBk:c�]JF,^nZlQ sM_d˓,Q?URВu{ </P#Zc[;.M1ğ% S~; =o?#q 06%i|&ĐK2ixg`Nq H\N"xx% T彳Fl%U _BUs;=yjv#3EΗl m)R˓0$#,rAaJ;~՘tGxʸuCOԷ-B5o'\j4$9푦^^LCI]$؏DQq� Gwdhx6oٝ/F[?7RGw8w�kV$`_�'by|$dˀS {Ғ_GHm]iU4q{B-OX}V.�%%QD@IBlS'S=-S ,zX !s~{ 3v,=vvWnzaH:&mR? j G,I1(ϳkvMPPd^phIˏpm1o@Y/y$J"l(6zn rI #0D(l&5PkS+y˴﬩$F~^w-۽'˖.K a֥ma'9/itk 1Ɨ+1�m1AMoOJ+�i$Iky 䐖Iku04Ē_hoxJ2[ʲe5JYL&X:VLb_ct@g,:hZ7N\z�XPm'2dIvJ"fM rC-N7%S8 ?"w ,;r s~E'լEY+ˆwV`D+5dgJָZ[6 0MYn  |`H|jg<�BS'ޯTm;01N/%E;?|7 e<ozgX{;6DB w7@MnZ?]WӞxE 6iW G3o4GASɀ'%{'K:3濾@OI!�`Ub%%SDK"fs{L#7DIVK(J/<'M9zH&�*,8?1e6B7tKv,HWFW/y~xڭG0(Kd $5G?-@G0a:L@.�/%7Jø- v`9xJhW5A0DDM5Bzw-G^_-ۍ$iw V潓tdg}uz�bi{~_)^=e T3 |D)IX$uz�b.=)I$etSI)@IV,pQ֐(D6`2R7f" x5Ju#;uE'[ښZ;:p,DS=�1ߞ\R [QG;$nf?w$x?Z)uN6fʃۯl񣡤,ӷGh+]λ9P݀i6$4jXN ' .d;4DKJghP2(1+mPHx l{߭)/ ŠS="ZMXMc >ǽ}$N"Qj(Yf0H1D~I.ih +WPF掂N\mxKTeJJ]fs4<u4 q u5kQQVt $) 5N/4D*9$%hڥ)^)%x>e@UˌPOoUlY V>TIbPyCD&+5 RRds})pEL-^V`�<3`KN&F =>D5b _J YkUxaYyمv;W_CI^rM. ~;9\7mHCT9]*SPV#Q%ΗA)ZȂˆ)K�0<4O'>e GhblIN$`]�4'|ϏQ()^ʆ}vrgNz` ߶v{! F 5>*ju�fPY K" `zx&*xUOk*Ȣ+/YL2{rIt|b5k|IPI"ҐDqHI=NWMY;4E r_U-TEA<V"ʟG;7kK>SwMv߼ť$Բy$xi]A_TO&_v _$¯Cr�DI�i@]0G� M bW]gѬiU9:>%4Qxy䴅[P� �؁-h֓dfD:C$ E ~($y^npxurҸBɴasI8mUHJpе!gi+aԾA$N4mC~qHIPH^v56" JZHÖӷN/'YܜC~|:?Z(A~!z&n/ȇ&xoqGfP (={ OFEcYZ, LnMzG)7 Ma2hib}N)20s,6 }ňg 'M'QVYJ.r5JĤ*ZOU]o }~%7۰$K %)`:4ݢ"WE/5lyh0L{\QPmx`YdDmf.c;Rs(]7deOqKcV[i˟'JKדc 7 R,I+I0|ʳK.r9J^PÆ!;'wRgi_J X5n$tCtQ.'yYfփ (oi4gaMSHAK;"ʥdsSOꖀIƘKsZHᲫo\UYSx@!F"?0y{F2pޡJ,E`rCO@.z)IjߛՆ-r ?'uY9f{)ϿI9e#&g`5Q$<^o(#8i64+<TlTiֵEr(I?[QRFuGbFH{n_Bp'T9j I:Iix"v'''V_m4*sjKR<�1DsM ὖ,A8"%R:Dz�|)LquLVC‚^JB!n10jE~A>@O�%>Jz Q(?;c5LGW _C;SQu>IiB:z׉G~$ QsRP>9t|0%T"x{\<$w>xGv9 t8Շ}(MDC n^& 'l"(JÑcU){>3 =) �@IRn͟zգih$J7nmSB.1�[KŸɥ;A;/'/(ɹAcEI,J`9Qooykߒˇ Lyx%X$AN) Gߡ-pwO\&6DKIߥc|#/epz�1+$AfhJFˆ8D:PXRFGĔGu%j;CrY٤)ke61՚կrNSz-udp+Sd^Ke^˳l�m84rICdZ3EBs gwP. 7.-3?Q/CC@IO@"ډ0b9~ax]U UC?-B@EDxrIPYQ2ibH} f!è{12<|jvG]V$x4& 7s0ʶa?QF ?LKDawڇ>fo=xFr}NVܦ1[dD2)ap^- Ġ1VӹLAI&ỳZ�m4EHC)YKn@rc~$=8IP#N&:4Yu#nكQxиi}"/XC6>(|4ܒ JS5*$X&�46ԩRRw WзJɶaqҘm:"&eV +*r*FmrZHF^Jq2<Fi3LjQ4sDȶa;=%@v!rs!o>F#n1-%`2)8@d-7Q]K&A58J .Q% O-!+/M4^dPTo4<a,=^w#!oq|I50٩J1%k%A(zD;P@@ [ QB5*r2]/$H)r,:8.S(ɂ..fǿFm'˗ݘ|y'y@<>h#JB76<*L\AFx]�_8'JYxf(vݛ =c\ӗXdil61t)vV%ADS1l?L$loH3>0>g5 *OABCst&vsq%d ! BA-gۂ-.x83191zRUw9p:QR�櫠�Or{fb1gwi3-yA(hRҍ\NbSϴ{|�8/NJGS7YeLcXu)vVեZÔq4h:L@ ɣ$\^\-aex;-G"[cs^'MHLuD0" dTZx8i"*Zzp �QU1$)z BrVAxӟk>D34U$RzI[䔄:xU ԠJ�|Ev�ΰNΡ$,Hj @.IκRRL6HR)v]$gޥ5nˏdvS;Q/*boQRc.cep\S* dc咰 ͈9)zI�JHF-k&[R<h NMƶ?D~"UB c\ipWoFmB/7)`ʙМE36UY| 7fG0s/d{~EsK;YZPQ1I]Ӈ8,k̦ގOXb3o%T{CJծ1gRdTrjA`Ncm@cV*Wgi2FsI𾊝`ͪ3MgFdM&$LSGIQPmH�lyJ?Zkg[ mY)~*TkWܤ}'f8fw_u)Nq_B1ijoO7%n:n0n&� x)`JX~sI:U2oT[x_[6 5Oz}?aId҅.7ML�?%i;JYѯv,DIDJ#i6~J nsPL4FmQUże`Z~ %u}z�E|y`B_ե-KBUQJDJIq]M~LYkfieRN`պ2fl tRPg#7O9i)avR&E(&b)IN0RnV&o ?h3*e;pŦzg}-sW|ZټӐʷWl}Gh% =1vd^)IN0R3eRƃz{dQTyRu[Aljk/S6m1 vZAJMQP6q6%ICI%2`8ǛW/n]+g>Qnas[8`E޿3Tהә;Z#Xh%\ d3vy YH  %I7%q2@fU)pY N݆,Iw ݦæ[]eMf�.e:U6 mH~qPκS$,Vr+!J)&4ZBUW@;&26={QΫ)/Bz60&^V]BdH"Po\;OgiNF3$u Fn6DS8גvKBԂI~޲0]{EiZjj�^ۑ*zzIRBfaZa[d(uAk=KD`<؝TeDDIs#%M>kKk0jlP\u#^V2u6Y ) IfUF!¦Ͱ)D 5,1%V9XhIy-^˔\SDMy5fʡBvlݫP[ X{XXɇ"Q�OyeAI@f]Z3.;H"8X$#)pkiy86NNP=ZwJMv-�Sv+͕kG ŒF$J¨UJ"pi4ʔZb$^FbJgz-e|1ɸ)s?r~ a\ ${$aPd^V=( -!4iWԍBca#h()zN HM *yuqeūe.^rqݯVg [B`<�'^T$"s*Ԅ*d^[�"$k2dB0ek0,7 S> 3Wbl];M^ 5Ifv<Kn*0$k-�e'D&8+W>kh:f.~$tqzc$M %pV@IJn£dRg4Y'G,Ȼ-|RHF?"H~//7`pDe.T%)>HFIPkf�%5KlYfw:];4,3PͿΛ>|<rK{tFM@]TcJ$QҔuQ>#(S|j^tID:6#9fh$qc5h2zԲJ0( G4)RJ."WXd6r. *դ t_$#NL =kz(�ZK%,$@ʴBIflJf{Hb$S{6?HSLj-@WN8x"ۯZE%,$AiR̔Dz?;RB_mpkS><\cR86`R$Ci<DR$IөG$IMJ BB85qXy)C'dˀi㢤IRL1fźS,hJBq?2M4Jbm+%)fIzOIAk<W%j@(fZaB䳤Q6MJ$X.Ii#P[?)8)h-Ь!d(d\,h$[icdK;q[$II&QPzjH:wے 3k"D{1weOd/ae* ì$d<8(I0JRi8 :ijIȽ'�,Z:`^V* V;srxd&0)V(IJk H8s+ /de KcupNW;oWo&Fi"Po]K\&%JJ~Z$!S(D[lud&>M޹良ef.kyK$gZ ՔT(I�JB~ 'EQ^RRg(Fn+#~sVf@;B i9}Yź*7 y�DJ$oI$m?BEڼ{?=Sp0T2)9i4P\ּtby6ش1#K�$9u-!%I %GDIP呦4csRȵHt`S{޵{< [C{|}Q. w) k,LxaΖj -I oizo qmdTaSSi()>JRT))I!"5޿v]]3%ס25.o[ Xl lmoo2VxO-un<L)(AII:4)QR$BEBy;}z{N#irσty٣MW$@j 0C8"_AYP/~)ZP)Ҁ8D).kiR)IaV<*3r-ټyO~޼X@vǙn xa'G<)&#+d2ܹaACo$~J9jADI1R¨5Px8=Z$ 9{3=>h>c oz;~|΁z�4J@3S8|Ӓ>$S/QRl8hHBԐԽa:> 8(s8g 탃nWP2p.\IlYe!PiWp&% d()J "$I!l>}PN{J/|$ٻ(7WQ4퓖=L :T%IH%JFҤ4)i^oݡc$dO޵@ hےwql?httag^%q\qvvEԖ6 `Z;McRi#Ha)WiRh( 4=Wn˺y]c6&`CRo~mH֢n/.v _lK,X~BL24)$I( v/ҤKZcjt<BH͛'{ *҃O52%]۵YgdfKϩ. P6bd݀׎��XIr$GQsK%vk޼g睾wvH;Q Vd|_c^mS9et.rj뻆_3k107ZI<�RDS4)"$;!%s:逸~(ۃ3v9).lӾ;oƯv\}wf7PR/ ,8�[Am-q$y�3J>ӤDISSːDMI"6 h vH:z7gsPQ͌{@~K745#WD쵌P,SIpM%Je$J AI⦤y2|gØqm;/@3ۊv|`g�=⤔|t)TgiGZ#ZZߌhRIcQ½2!O"D)2J"2l()JDܔ$2gCD7)=݃=on{EH7qc|>. Scg)XK@pVI$Ҥ4l JIOLǙkǀk4vm~ tt6|HP&t88Q͇D|mZ㍙l`5gIZ `VnR2M$Jle^y)?pkHI:gP&i6fA$F,h\iv0^ײ|SˁrBqjVc&ݛ$&Q`DhP()ZVɸrIQhOyITeU;Ck@6_7rw7ReN45=P.WpN`5L@I�*Q&9Fn( Wl#$vMsOmj=yhWg(э'o qc p=<Ds?3DS?~rj (Mf%}JI7AI$.%mb6W!Gz]]o6c%?$a@gYP,vx $�Л0[&IJI1MJGI 5wcpG6Ic[ksGvu^Dǵpq٦p'F ֣^4Xq; H2ˬ, dK"%iҬ(leL]x()~:F,M:鴷=؝<�F 0,ńs^eŸrjM`vRt #M()-:'⧤h44w)QMPS7`.%qG7zH+L1Au-eJ%eƤ$I$�eFDIm=hs+ohiBt纻3Jv8Η/{9i� 1?e*L6ˁU%.R?2l%qDqR�d9Lg.h·84�mUN*0Եb k P&&QQk(2IbÍpQ&ŰIZ;caE]lVk)!ْDF $0&%J>덈 +ѳݽ#n<a<tR9vޛA.&(*aJ��0~{_RaѱOIA)->m]\@= ЛSX{=ފ+Ap|DO+^$X( k%9$j4EMeo+>kSD춳ഒO͂K46cT),"=d+ZX+%m˞Rnryu*?_E7>'2(lEKK$RB(c)ɬ>D p.y3;UeQP![!l:|]Y3Sn Һ`Q) %uΏ}f %m3qv%6JI;yq4ك6دvkGE&WFPjW\{-#k) 2RPI4yRM% *&6bh%ޯ/^,n.Dq=vl|B _RJ $44~Jb*KI"j, k Y <h-sAg{.Gj~7R%Wt]KFZJyRi*MZ[JZ(C]Ktc%L]43Tf97y斮ޠTHH]KD⢤X J>hW$7ُ<ww:<;o�14O:{>そ[nI6f(GI@':�� }IDAT <w̔dQo5kZ[j-"%YmPy`ρheO͟n3S-lK_}슻rG[$f&%lP HIjl|ƿE | wĿ֪,&JIM^I N4gMt*my�d! \ (7_1WRY!LqQ-%X4|z#+VǰV1mߗ)^HRjk^J�s7Mwu}Ǹq[oX0_/߬_%_iL3FEImP;vܐvr89P󦵢d-7\kn>E<8eZxi+DSNR( &P\o|/{ُK ⤤9�))XIDg[od8}݀b;֐/1ZtѷԦWy%!(IemQ%2+ rR<5jc*W]GJ ho)i9ky 2|݆ܶWqz+{^_sH9+V%no)au-R`ٴe)I1L"y6I՚rSR@Mt Ke{�Xq۷ -Б=譛g~0Gpsײ!Rj%!( O0Y؍}lސJ`QIlEIYQ]&Ե ܮ70K/{r6\ ~O{GuW0L^N׵lmkZ ɀEIJBOj();&Y@)%SbgkHI='z~Eu=ȷsm'?[Yxg9E9ꊝǫɧQ8և i%( AElIIɓ$sN̔tߴ%T/=T]�*fV^̹ѫqe].<wETrԉz93t||@�Q`+M b#Y()1 {�g~^ewI~rw +>|N7,CԴ(y2Jbr$Iܢ$%ѕ&e=SFә3g$5\o ]ve_'.nQ}uW2 >F}__ *—ڕZ3( HI�W;%%#8]VvQc-D2S$J|ـP3Y)Se{՟Bخ;FNYfQSw54O<^ٕΫ?i+$l%QXaTPna4 J6T+rHKAewMmcDI7y)fJtٵ}PQoUT?|ٛqgnrZ+kivs<J Jd.$kbsMTG0$FI렇Qi}q $6 rce7`U?ᩆqJEu.~7|̮V,[$Ti&$ SKuʌU$o,=??krN(fPڦP.Ȳ*3g<#n2AJZȦ/aZ~Z,%1,ؼ葯/u!l r-+5qSܔ3fX$-ف$7w! dzE2hb$7PyvdQ[aoiC7%$*>_Mͮ^%IẖmLBL^{vW=?<a=hltrg' FIH [i2kH8QTDsc5B~缋JgpM(쒳KTP&J Ήav9v4fbqX$5Y~9k@p!&nhf_5T^ X Mk}FI@Ra*MPjf'D!QUB)(MCPR%.9 =RnMw\Mt?q1'�(IjQ9rqL닮9z×ڕXI0J+MkXF3'48666y~ ) 媡ڌ`1dߌi^?�yněNoFvMO JZ h_+pqz7x�xQ~lX]vF4A1(@sHwJ+ٔ0\!n.iIwWz{(n$(I8^Rѡ(0ID{@3]nkrS6ÒJQ$q|IL2|n|)iET ܾe9N*/S! \R[Rڑ\J$.eԵȔYt6KmFpP O`z$$3ars{"kdQ]pۨ; gBEՔ?ehN%X%!T.I(AGr*y�f\:)))^(B#qUG};$i h2՞8N"�G\wА*A՗MdCI:fS MܕziM<�%EHICݢPB<(s{6QJw_?0=o,`BI(IB${|u-}K;HI�`ZJ.%�zJI_l\ҬN4W!1T&Ro$JM4mBBIRK^K&)piD$DoIb'II)I.tpJ R& ̏ޒLI.XJԤ&,:63sIW&5 J3dN/IjRZRrJ4%IMjRK.%� KԤ6 pJh;HMJԤ6}hJ"4sUH$YqԤ6pJjFĶ;f&h4R���%tEXtdate:create�2019-06-08T15:54:59+00:009���%tEXtdate:modify�2019-06-08T15:54:59+00:00nd$���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/������������������������������������������������������������0000775�0000000�0000000�00000000000�14332737457�0020332�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/c4c.md������������������������������������������������������0000664�0000000�0000000�00000044254�14332737457�0021336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# C4 Diagrams > C4 Diagram: This is an experimental diagram for now. The syntax and properties can change in future releases. Proper documentation will be provided when the syntax is stable. Mermaid's c4 diagram syntax is compatible with plantUML. See example below: ```mermaid-example C4Context title System Context diagram for Internet Banking System Enterprise_Boundary(b0, "BankBoundary0") { Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") Person(customerB, "Banking Customer B") Person_Ext(customerC, "Banking Customer C", "desc") Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1") ``` For an example, see the source code demos/index.html 5 types of C4 charts are supported. - System Context (C4Context) - Container diagram (C4Container) - Component diagram (C4Component) - Dynamic diagram (C4Dynamic) - Deployment diagram (C4Deployment) Please refer to the linked document [C4-PlantUML syntax](https://github.com/plantuml-stdlib/C4-PlantUML/blob/master/README.md) for how to write the c4 diagram. C4 diagram is fixed style, such as css color, so different css is not provided under different skins. updateElementStyle and UpdateElementStyle are written in the diagram last part. updateElementStyle is inconsistent with the original definition and updates the style of the relationship, including the offset of the text label relative to the original position. The layout does not use a fully automated layout algorithm. The position of shapes is adjusted by changing the order in which statements are written. So there is no plan to support the following Layout statements. The number of shapes per row and the number of boundaries can be adjusted using UpdateLayoutConfig. - Layout - - Lay_U, Lay_Up - - Lay_D, Lay_Down - - Lay_L, Lay_Left - - Lay_R, Lay_Right The following unfinished features are not supported in the short term. - [ ] sprite - [ ] tags - [ ] link - [ ] Legend - [x] System Context - - [x] Person(alias, label, ?descr, ?sprite, ?tags, $link) - - [x] Person_Ext - - [x] System(alias, label, ?descr, ?sprite, ?tags, $link) - - [x] SystemDb - - [x] SystemQueue - - [x] System_Ext - - [x] SystemDb_Ext - - [x] SystemQueue_Ext - - [x] Boundary(alias, label, ?type, ?tags, $link) - - [x] Enterprise_Boundary(alias, label, ?tags, $link) - - [x] System_Boundary - [x] Container diagram - - [x] Container(alias, label, ?techn, ?descr, ?sprite, ?tags, $link) - - [x] ContainerDb - - [x] ContainerQueue - - [x] Container_Ext - - [x] ContainerDb_Ext - - [x] ContainerQueue_Ext - - [x] Container_Boundary(alias, label, ?tags, $link) - [x] Component diagram - - [x] Component(alias, label, ?techn, ?descr, ?sprite, ?tags, $link) - - [x] ComponentDb - - [x] ComponentQueue - - [x] Component_Ext - - [x] ComponentDb_Ext - - [x] ComponentQueue_Ext - [x] Dynamic diagram - - [x] RelIndex(index, from, to, label, ?tags, $link) - [x] Deployment diagram - - [x] Deployment_Node(alias, label, ?type, ?descr, ?sprite, ?tags, $link) - - [x] Node(alias, label, ?type, ?descr, ?sprite, ?tags, $link): short name of Deployment_Node() - - [x] Node_L(alias, label, ?type, ?descr, ?sprite, ?tags, $link): left aligned Node() - - [x] Node_R(alias, label, ?type, ?descr, ?sprite, ?tags, $link): right aligned Node() - [x] Relationship Types - - [x] Rel(from, to, label, ?techn, ?descr, ?sprite, ?tags, $link) - - [x] BiRel (bidirectional relationship) - - [x] Rel_U, Rel_Up - - [x] Rel_D, Rel_Down - - [x] Rel_L, Rel_Left - - [x] Rel_R, Rel_Right - - [x] Rel_Back - - [x] RelIndex \* Compatible with C4-Plantuml syntax, but ignores the index parameter. The sequence number is determined by the order in which the rel statements are written. - [ ] Custom tags/stereotypes support and skinparam updates - - [ ] AddElementTag(tagStereo, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): Introduces a new element tag. The styles of the tagged elements are updated and the tag is displayed in the calculated legend. - - [ ] AddRelTag(tagStereo, ?textColor, ?lineColor, ?lineStyle, ?sprite, ?techn, ?legendText, ?legendSprite): Introduces a new Relationship tag. The styles of the tagged relationships are updated and the tag is displayed in the calculated legend. - - [x] UpdateElementStyle(elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): This call updates the default style of the elements (component, ...) and creates no additional legend entry. - - [x] UpdateRelStyle(from, to, ?textColor, ?lineColor, ?offsetX, ?offsetY): This call updates the default relationship colors and creates no additional legend entry. Two new parameters, offsetX and offsetY, are added to set the offset of the original position of the text. - - [ ] RoundedBoxShape(): This call returns the name of the rounded box shape and can be used as ?shape argument. - - [ ] EightSidedShape(): This call returns the name of the eight sided shape and can be used as ?shape argument. - - [ ] DashedLine(): This call returns the name of the dashed line and can be used as ?lineStyle argument. - - [ ] DottedLine(): This call returns the name of the dotted line and can be used as ?lineStyle argument. - - [ ] BoldLine(): This call returns the name of the bold line and can be used as ?lineStyle argument. - - [x] UpdateLayoutConfig(?c4ShapeInRow, ?c4BoundaryInRow): New. This call updates the default c4ShapeInRow(4) and c4BoundaryInRow(2). There are two ways to assign parameters with question marks. One uses the non-named parameter assignment method in the order of the parameters, and the other uses the named parameter assignment method, where the name must start with a $ symbol. Example: UpdateRelStyle(from, to, ?textColor, ?lineColor, ?offsetX, ?offsetY) ``` UpdateRelStyle(customerA, bankA, "red", "blue", "-40", "60") UpdateRelStyle(customerA, bankA, $offsetX="-40", $offsetY="60", $lineColor="blue", $textColor="red") UpdateRelStyle(customerA, bankA, $offsetY="60") ``` ## C4 System Context Diagram (C4Context) ```mermaid-example C4Context title System Context diagram for Internet Banking System Enterprise_Boundary(b0, "BankBoundary0") { Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") Person(customerB, "Banking Customer B") Person_Ext(customerC, "Banking Customer C", "desc") Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.") System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Enterprise_Boundary(b1, "BankBoundary") { SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Boundary(b2, "BankBoundary2") { System(SystemA, "Banking System A") System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") } System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") Boundary(b3, "BankBoundary3", "boundary") { SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") } } } BiRel(customerA, SystemAA, "Uses") BiRel(SystemAA, SystemE, "Uses") Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") Rel(SystemC, customerA, "Sends e-mails to") UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1") ``` ## C4 Container diagram (C4Container) ```mermaid-example C4Container title Container diagram for Internet Banking System System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system", $tags="v1.0") Person(customer, Customer, "A customer of the bank, with personal bank accounts", $tags="v1.0") Container_Boundary(c1, "Internet Banking") { Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to cutomers via their web browser") Container_Ext(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device") Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA") ContainerDb(database, "Database", "SQL Database", "Stores user registration information, hashed auth credentials, access logs, etc.") ContainerDb_Ext(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API") } System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") Rel(customer, web_app, "Uses", "HTTPS") UpdateRelStyle(customer, web_app, $offsetY="60", $offsetX="90") Rel(customer, spa, "Uses", "HTTPS") UpdateRelStyle(customer, spa, $offsetY="-40") Rel(customer, mobile_app, "Uses") UpdateRelStyle(customer, mobile_app, $offsetY="-30") Rel(web_app, spa, "Delivers") UpdateRelStyle(web_app, spa, $offsetX="130") Rel(spa, backend_api, "Uses", "async, JSON/HTTPS") Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS") Rel_Back(database, backend_api, "Reads from and writes to", "sync, JDBC") Rel(email_system, customer, "Sends e-mails to") UpdateRelStyle(email_system, customer, $offsetX="-45") Rel(backend_api, email_system, "Sends e-mails using", "sync, SMTP") UpdateRelStyle(backend_api, email_system, $offsetY="-60") Rel(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS") UpdateRelStyle(backend_api, banking_system, $offsetY="-50", $offsetX="-140") ``` ## C4 Component diagram (C4Component) ```mermaid-example C4Component title Component diagram for Internet Banking System - API Application Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.") Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile mobile device.") ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") Container_Boundary(api, "API Application") { Component(sign, "Sign In Controller", "MVC Rest Controller", "Allows users to sign in to the internet banking system") Component(accounts, "Accounts Summary Controller", "MVC Rest Controller", "Provides customers with a summary of their bank accounts") Component(security, "Security Component", "Spring Bean", "Provides functionality related to singing in, changing passwords, etc.") Component(mbsfacade, "Mainframe Banking System Facade", "Spring Bean", "A facade onto the mainframe banking system.") Rel(sign, security, "Uses") Rel(accounts, mbsfacade, "Uses") Rel(security, db, "Read & write to", "JDBC") Rel(mbsfacade, mbs, "Uses", "XML/HTTPS") } Rel_Back(spa, sign, "Uses", "JSON/HTTPS") Rel(spa, accounts, "Uses", "JSON/HTTPS") Rel(ma, sign, "Uses", "JSON/HTTPS") Rel(ma, accounts, "Uses", "JSON/HTTPS") UpdateRelStyle(spa, sign, $offsetY="-40") UpdateRelStyle(spa, accounts, $offsetX="40", $offsetY="40") UpdateRelStyle(ma, sign, $offsetX="-90", $offsetY="40") UpdateRelStyle(ma, accounts, $offsetY="-40") UpdateRelStyle(sign, security, $offsetX="-160", $offsetY="10") UpdateRelStyle(accounts, mbsfacade, $offsetX="140", $offsetY="10") UpdateRelStyle(security, db, $offsetY="-40") UpdateRelStyle(mbsfacade, mbs, $offsetY="-40") ``` ## C4 Dynamic diagram (C4Dynamic) ```mermaid-example C4Dynamic title Dynamic diagram for Internet Banking System - API Application ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.") Container_Boundary(b, "API Application") { Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.") Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.") } Rel(c1, c2, "Submits credentials to", "JSON/HTTPS") Rel(c2, c3, "Calls isAuthenticated() on") Rel(c3, c4, "select * from users where username = ?", "JDBC") UpdateRelStyle(c1, c2, $textColor="red", $offsetY="-40") UpdateRelStyle(c2, c3, $textColor="red", $offsetX="-40", $offsetY="60") UpdateRelStyle(c3, c4, $textColor="red", $offsetY="-40", $offsetX="10") ``` ## C4 Deployment diagram (C4Deployment) ```mermaid-example C4Deployment title Deployment Diagram for Internet Banking System - Live Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){ Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.") } Deployment_Node(comp, "Customer's computer", "Mircosoft Windows or Apple macOS"){ Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox,<br/> Apple Safari or Microsoft Edge"){ Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.") } } Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){ Deployment_Node(dn, "bigbank-api*** x8", "Ubuntu 16.04 LTS"){ Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){ Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.") } } Deployment_Node(bb2, "bigbank-web*** x4", "Ubuntu 16.04 LTS"){ Deployment_Node(apache2, "Apache Tomcat", "Apache Tomcat 8.x"){ Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.") } } Deployment_Node(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS"){ Deployment_Node(oracle, "Oracle - Primary", "Oracle 12c"){ ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") } } Deployment_Node(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS") { Deployment_Node(oracle2, "Oracle - Secondary", "Oracle 12c") { ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") } } } Rel(mobile, api, "Makes API calls to", "json/HTTPS") Rel(spa, api, "Makes API calls to", "json/HTTPS") Rel_U(web, spa, "Delivers to the customer's web browser") Rel(api, db, "Reads from and writes to", "JDBC") Rel(api, db2, "Reads from and writes to", "JDBC") Rel_R(db, db2, "Replicates data to") UpdateRelStyle(spa, api, $offsetY="-40") UpdateRelStyle(web, spa, $offsetY="-40") UpdateRelStyle(api, db, $offsetY="-20", $offsetX="5") UpdateRelStyle(api, db2, $offsetX="-40", $offsetY="-20") UpdateRelStyle(db, db2, $offsetY="-10") ``` ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/classDiagram.md���������������������������������������������0000664�0000000�0000000�00000040275�14332737457�0023256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Class diagrams > "In software engineering, a class diagram in the Unified Modeling Language (UML) is a type of static structure diagram that describes the structure of a system by showing the system's classes, their attributes, operations (or methods), and the relationships among objects." > Wikipedia The class diagram is the main building block of object-oriented modeling. It is used for general conceptual modeling of the structure of the application, and for detailed modeling to translate the models into programming code. Class diagrams can also be used for data modeling. The classes in a class diagram represent both the main elements, interactions in the application, and the classes to be programmed. Mermaid can render class diagrams. ```mermaid-example classDiagram Animal <|-- Duck Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } ``` ## Syntax ### Class UML provides mechanisms to represent class members, such as attributes and methods, and additional information about them. A single instance of a class in the diagram contains three compartments: - The top compartment contains the name of the class. It is printed in bold and centered, and the first letter is capitalized. It may also contain optional annotation text describing the nature of the class. - The middle compartment contains the attributes of the class. They are left-aligned and the first letter is lowercase. - The bottom compartment contains the operations the class can execute. They are also left-aligned and the first letter is lowercase. ```mermaid-example classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount) ``` ## Define a class There are two ways to define a class: - Explicitly using keyword **class** like `class Animal` which would define the Animal class. - Via a **relationship** which defines two classes at a time along with their relationship. For instance, `Vehicle <|-- Car`. ```mermaid-example classDiagram class Animal Vehicle <|-- Car ``` Naming convention: a class name should be composed only of alphanumeric characters (including unicode), and underscores. ## Defining Members of a class UML provides mechanisms to represent class members such as attributes and methods, as well as additional information about them. Mermaid distinguishes between attributes and functions/methods based on if the **parenthesis** `()` are present or not. The ones with `()` are treated as functions/methods, and all others as attributes. There are two ways to define the members of a class, and regardless of whichever syntax is used to define the members, the output will still be same. The two different ways are : - Associate a member of a class using **:** (colon) followed by member name, useful to define one member at a time. For example: ```mermaid-example classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount) ``` - Associate members of a class using **{}** brackets, where members are grouped within curly brackets. Suitable for defining multiple members at once. For example: ```mermaid-example classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) } ``` #### Return Type Optionally you can end a method/function definition with the data type that will be returned (note: there must be a space between the final `)` and the return type). An example: ```mermaid-example classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int } ``` #### Generic Types Members can be defined using generic types, such as `List<int>`, for fields, parameters, and return types by enclosing the type within `~` (**tilde**). Note: **nested** type declarations such as `List<List<int>>` are not currently supported. Generics can be represented as part of a class definition and also in the parameters or the return value of a method/function: ```mermaid-example classDiagram class Square~Shape~{ int id List~int~ position setPoints(List~int~ points) getPoints() List~int~ } Square : -List~string~ messages Square : +setMessages(List~string~ messages) Square : +getMessages() List~string~ ``` #### Return Type Optionally you can end the method/function definition with the data type that will be returned. #### Visibility To describe the visibility (or encapsulation) of an attribute or method/function that is a part of a class (i.e. a class member), optional notation may be placed before that members' name: - `+` Public - `-` Private - `#` Protected - `~` Package/Internal > _note_ you can also include additional _classifiers_ to a method definition by adding the following notation to the _end_ of the method, i.e.: after the `()`: > > - `*` Abstract e.g.: `someAbstractMethod()*` > - `$` Static e.g.: `someStaticMethod()$` > _note_ you can also include additional _classifiers_ to a field definition by adding the following notation to the end of its name: > > - `$` Static e.g.: `String someField$` ## Defining Relationship A relationship is a general term covering the specific types of logical connections found on class and object diagrams. ``` [classA][Arrow][ClassB] ``` There are eight different types of relations defined for classes under UML which are currently supported: | Type | Description | | ----- | ------------- | | <\|-- | Inheritance | | \*-- | Composition | | o-- | Aggregation | | --> | Association | | -- | Link (Solid) | | ..> | Dependency | | ..\|> | Realization | | .. | Link (Dashed) | ```mermaid-example classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP ``` We can use the labels to describe the nature of the relation between two classes. Also, arrowheads can be used in the opposite direction as well: ```mermaid-example classDiagram classA --|> classB : Inheritance classC --* classD : Composition classE --o classF : Aggregation classG --> classH : Association classI -- classJ : Link(Solid) classK ..> classL : Dependency classM ..|> classN : Realization classO .. classP : Link(Dashed) ``` ### Labels on Relations It is possible to add label text to a relation: ``` [classA][Arrow][ClassB]:LabelText ``` ```mermaid-example classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation ``` ### Two-way relations Relations can logically represent an N:M association: ```mmd classDiagram Animal <|--|> Zebra ``` Here is the syntax: ``` [Relation Type][Link][Relation Type] ``` Where `Relation Type` can be one of: | Type | Description | | ---- | ----------- | | <\| | Inheritance | | \* | Composition | | o | Aggregation | | > | Association | | < | Association | | \|> | Realization | And `Link` can be one of: | Type | Description | | ---- | ----------- | | -- | Solid | | .. | Dashed | ## Cardinality / Multiplicity on relations Multiplicity or cardinality in class diagrams indicates the number of instances of one class that can be linked to an instance of the other class. For example, each company will have one or more employees (not zero), and each employee currently works for zero or one companies. Multiplicity notations are placed near the end of an association. The different cardinality options are : - `1` Only 1 - `0..1` Zero or One - `1..*` One or more - `*` Many - `n` n {where n>1} - `0..n` zero to n {where n>1} - `1..n` one to n {where n>1} Cardinality can be easily defined by placing the text option within quotes `"` before or after a given arrow. For example: ``` [classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText ``` ```mermaid-example classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains ``` ## Annotations on classes It is possible to annotate classes with markers to provide additional metadata about the class. This can give a clearer indication about its nature. Some common annotations include: - `<<Interface>>` To represent an Interface class - `<<Abstract>>` To represent an abstract class - `<<Service>>` To represent a service class - `<<Enumeration>>` To represent an enum Annotations are defined within the opening `<<` and closing `>>`. There are two ways to add an annotation to a class, and either way the output will be same: - In a **_separate line_** after a class is defined: ```mermaid-example classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw() ``` - In a **_nested structure_** along with the class definition: ```mermaid-example classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK } ``` ## Comments Comments can be entered within a class diagram, which will be ignored by the parser. Comments need to be on their own line, and must be prefaced with `%%` (double percent signs). Any text until the next newline will be treated as a comment, including any class diagram syntax. ```mmd classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() } ``` ## Setting the direction of the diagram With class diagrams you can use the direction statement to set the direction in which the diagram will render: ```mermaid-example classDiagram direction RL class Student { -idCard : IdCard } class IdCard{ -id : int -name : string } class Bike{ -id : int -name : string } Student "1" --o "1" IdCard : carries Student "1" --o "1" Bike : rides ``` ## Interaction It is possible to bind a click event to a node. The click can lead to either a javascript callback or to a link which will be opened in a new browser tab. **Note**: This functionality is disabled when using `securityLevel='strict'` and enabled when using `securityLevel='loose'`. You would define these actions on a separate line after all classes have been declared. ``` action className "reference" "tooltip" click className call callback() "tooltip" click className href "url" "tooltip" ``` - _action_ is either `link` or `callback`, depending on which type of interaction you want to have called - _className_ is the id of the node that the action will be associated with - _reference_ is either the url link, or the function name for callback. - (_optional_) tooltip is a string to be displayed when hovering over element (note: The styles of the tooltip are set by the class .mermaidTooltip.) - note: callback function will be called with the nodeId as parameter. ### Examples _URL Link:_ ```mmd classDiagram class Shape link Shape "https://www.github.com" "This is a tooltip for a link" class Shape2 click Shape2 href "https://www.github.com" "This is a tooltip for a link" ``` _Callback:_ ```mmd classDiagram class Shape callback Shape "callbackFunction" "This is a tooltip for a callback" class Shape2 click Shape2 call callbackFunction() "This is a tooltip for a callback" ``` ```html <script> const callbackFunction = function () { alert('A callback was triggered'); }; </script> ``` ```mermaid classDiagram class Class01 class Class02 callback Class01 "callbackFunction" "Callback tooltip" link Class02 "https://www.github.com" "This is a link" class Class03 class Class04 click Class03 call callbackFunction() "Callback tooltip" click Class04 href "https://www.github.com" "This is a link" ``` > **Success** The tooltip functionality and the ability to link to urls are available from version 0.5.2. Beginner's tip—a full example using interactive links in an HTML page: ```html <body> <pre class="mermaid"> classDiagram Animal <|-- Duck Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } callback Duck callback "Tooltip" link Zebra "https://www.github.com" "This is a link" </pre> <script> const callback = function () { alert('A callback was triggered'); }; const config = { startOnLoad: true, securityLevel: 'loose', }; mermaid.initialize(config); </script> </body> ``` ## Styling ### Styling a node It is possible to apply specific styles such as a thicker border or a different background color to individual nodes. This is done by predefining classes in css styles that can be applied from the graph definition: ```html <style> .cssClass > rect { fill: #ff0000; stroke: #ffff00; stroke-width: 4px; } </style> ``` Then attaching that class to a specific node: ``` cssClass "nodeId1" cssClass; ``` It is also possible to attach a class to a list of nodes in one statement: ``` cssClass "nodeId1,nodeId2" cssClass; ``` A shorter form of adding a class is to attach the classname to the node using the `:::` operator: ```mmd classDiagram class Animal:::cssClass ``` Or: ```mmd classDiagram class Animal:::cssClass { -int sizeInFeet -canEat() } ``` ?> cssClasses cannot be added using this shorthand method at the same time as a relation statement. ?> Due to limitations with existing markup for class diagrams, it is not currently possible to define css classes within the diagram itself. **_Coming soon!_** ### Default Styles The main styling of the class diagram is done with a preset number of css classes. During rendering these classes are extracted from the file located at src/themes/class.scss. The classes used here are described below: | Class | Description | | ------------------ | ----------------------------------------------------------------- | | g.classGroup text | Styles for general class text | | classGroup .title | Styles for general class title | | g.classGroup rect | Styles for class diagram rectangle | | g.classGroup line | Styles for class diagram line | | .classLabel .box | Styles for class label box | | .classLabel .label | Styles for class label text | | composition | Styles for composition arrow head and arrow line | | aggregation | Styles for aggregation arrow head and arrow line(dashed or solid) | | dependency | Styles for dependency arrow head and arrow line | #### Sample stylesheet ```scss body { background: white; } g.classGroup text { fill: $nodeBorder; stroke: none; font-family: 'trebuchet ms', verdana, arial; font-family: var(--mermaid-font-family); font-size: 10px; .title { font-weight: bolder; } } g.classGroup rect { fill: $nodeBkg; stroke: $nodeBorder; } g.classGroup line { stroke: $nodeBorder; stroke-width: 1; } .classLabel .box { stroke: none; stroke-width: 0; fill: $nodeBkg; opacity: 0.5; } .classLabel .label { fill: $nodeBorder; font-size: 10px; } .relation { stroke: $nodeBorder; stroke-width: 1; fill: none; } @mixin composition { fill: $nodeBorder; stroke: $nodeBorder; stroke-width: 1; } #compositionStart { @include composition; } #compositionEnd { @include composition; } @mixin aggregation { fill: $nodeBkg; stroke: $nodeBorder; stroke-width: 1; } #aggregationStart { @include aggregation; } #aggregationEnd { @include aggregation; } #dependencyStart { @include composition; } #dependencyEnd { @include composition; } #extensionStart { @include composition; } #extensionEnd { @include composition; } ``` ## Configuration `Coming soon` �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/entityRelationshipDiagram.md��������������������������������0000664�0000000�0000000�00000023727�14332737457�0026052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Entity Relationship Diagrams > An entity–relationship model (or ER model) describes interrelated things of interest in a specific domain of knowledge. A basic ER model is composed of entity types (which classify the things of interest) and specifies relationships that can exist between entities (instances of those entity types). Wikipedia. Note that practitioners of ER modelling almost always refer to _entity types_ simply as _entities_. For example the `CUSTOMER` entity _type_ would be referred to simply as the `CUSTOMER` entity. This is so common it would be inadvisable to do anything else, but technically an entity is an abstract _instance_ of an entity type, and this is what an ER diagram shows - abstract instances, and the relationships between them. This is why entities are always named using singular nouns. Mermaid can render ER diagrams ```mermaid-example erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses ``` Entity names are often capitalised, although there is no accepted standard on this, and it is not required in Mermaid. Relationships between entities are represented by lines with end markers representing cardinality. Mermaid uses the most popular crow's foot notation. The crow's foot intuitively conveys the possibility of many instances of the entity that it connects to. ER diagrams can be used for various purposes, ranging from abstract logical models devoid of any implementation details, through to physical models of relational database tables. It can be useful to include attribute definitions on ER diagrams to aid comprehension of the purpose and meaning of entities. These do not necessarily need to be exhaustive; often a small subset of attributes is enough. Mermaid allows them to be defined in terms of their _type_ and _name_. ```mermaid-example erDiagram CUSTOMER ||--o{ ORDER : places CUSTOMER { string name string custNumber string sector } ORDER ||--|{ LINE-ITEM : contains ORDER { int orderNumber string deliveryAddress } LINE-ITEM { string productCode int quantity float pricePerUnit } ``` When including attributes on ER diagrams, you must decide whether to include foreign keys as attributes. This probably depends on how closely you are trying to represent relational table structures. If your diagram is a _logical_ model which is not meant to imply a relational implementation, then it is better to leave these out because the associative relationships already convey the way that entities are associated. For example, a JSON data structure can implement a one-to-many relationship without the need for foreign key properties, using arrays. Similarly an object-oriented programming language may use pointers or references to collections. Even for models that are intended for relational implementation, you might decide that inclusion of foreign key attributes duplicates information already portrayed by the relationships, and does not add meaning to entities. Ultimately, it's your choice. ## Syntax ### Entities and Relationships Mermaid syntax for ER diagrams is compatible with PlantUML, with an extension to label the relationship. Each statement consists of the following parts: ``` <first-entity> [<relationship> <second-entity> : <relationship-label>] ``` Where: - `first-entity` is the name of an entity. Names must begin with an alphabetic character and may also contain digits, hyphens, and underscores. - `relationship` describes the way that both entities inter-relate. See below. - `second-entity` is the name of the other entity. - `relationship-label` describes the relationship from the perspective of the first entity. For example: ``` PROPERTY ||--|{ ROOM : contains ``` This statement can be read as _a property contains one or more rooms, and a room is part of one and only one property_. You can see that the label here is from the first entity's perspective: a property contains a room, but a room does not contain a property. When considered from the perspective of the second entity, the equivalent label is usually very easy to infer. (Some ER diagrams label relationships from both perspectives, but this is not supported here, and is usually superfluous). Only the `first-entity` part of a statement is mandatory. This makes it possible to show an entity with no relationships, which can be useful during iterative construction of diagrams. If any other parts of a statement are specified, then all parts are mandatory. ### Relationship Syntax The `relationship` part of each statement can be broken down into three sub-components: - the cardinality of the first entity with respect to the second, - whether the relationship confers identity on a 'child' entity - the cardinality of the second entity with respect to the first Cardinality is a property that describes how many elements of another entity can be related to the entity in question. In the above example a `PROPERTY` can have one or more `ROOM` instances associated to it, whereas a `ROOM` can only be associated with one `PROPERTY`. In each cardinality marker there are two characters. The outermost character represents a maximum value, and the innermost character represents a minimum value. The table below summarises possible cardinalities. | Value (left) | Value (right) | Meaning | | :----------: | :-----------: | ----------------------------- | | `\|o` | `o\|` | Zero or one | | `\|\|` | `\|\|` | Exactly one | | `}o` | `o{` | Zero or more (no upper limit) | | `}\|` | `\|{` | One or more (no upper limit) | ### Identification Relationships may be classified as either _identifying_ or _non-identifying_ and these are rendered with either solid or dashed lines respectively. This is relevant when one of the entities in question can not have independent existence without the other. For example a firm that insures people to drive cars might need to store data on `NAMED-DRIVER`s. In modelling this we might start out by observing that a `CAR` can be driven by many `PERSON` instances, and a `PERSON` can drive many `CAR`s - both entities can exist without the other, so this is a non-identifying relationship that we might specify in Mermaid as: `PERSON }|..|{ CAR : "driver"`. Note the two dots in the middle of the relationship that will result in a dashed line being drawn between the two entities. But when this many-to-many relationship is resolved into two one-to-many relationships, we observe that a `NAMED-DRIVER` cannot exist without both a `PERSON` and a `CAR` - the relationships become identifying and would be specified using hyphens, which translate to a solid line: ```mmd erDiagram CAR ||--o{ NAMED-DRIVER : allows PERSON ||--o{ NAMED-DRIVER : is ``` ### Attributes Attributes can be defined for entities by specifying the entity name followed by a block containing multiple `type name` pairs, where a block is delimited by an opening `{` and a closing `}`. For example: ```mermaid-example erDiagram CAR ||--o{ NAMED-DRIVER : allows CAR { string registrationNumber string make string model } PERSON ||--o{ NAMED-DRIVER : is PERSON { string firstName string lastName int age } ``` The attributes are rendered inside the entity boxes: ```mermaid-example erDiagram CAR ||--o{ NAMED-DRIVER : allows CAR { string registrationNumber string make string model } PERSON ||--o{ NAMED-DRIVER : is PERSON { string firstName string lastName int age } ``` The `type` and `name` values must begin with an alphabetic character and may contain digits, hyphens or underscores. Other than that, there are no restrictions, and there is no implicit set of valid data types. #### Attribute Keys and Comments Attributes may also have a `key` or comment defined. Keys can be "PK" or "FK", for Primary Key or Foreign Key. And a `comment` is defined by double quotes at the end of an attribute. Comments themselves cannot have double-quote characters in them. ```mermaid-example erDiagram CAR ||--o{ NAMED-DRIVER : allows CAR { string allowedDriver FK "The license of the allowed driver" string registrationNumber string make string model } PERSON ||--o{ NAMED-DRIVER : is PERSON { string driversLicense PK "The license #" string firstName string lastName int age } ``` ### Other Things - If you want the relationship label to be more than one word, you must use double quotes around the phrase - If you don't want a label at all on a relationship, you must use an empty double-quoted string ## Styling ### Config options For simple color customization: | Name | Used as | | :------- | :------------------------------------------------------------------- | | `fill` | Background color of an entity or attribute | | `stroke` | Border color of an entity or attribute, line color of a relationship | ### Classes used The following CSS class selectors are available for richer styling: | Selector | Description | | :------------------------- | :---------------------------------------------------- | | `.er.attributeBoxEven` | The box containing attributes on even-numbered rows | | `.er.attributeBoxOdd` | The box containing attributes on odd-numbered rows | | `.er.entityBox` | The box representing an entity | | `.er.entityLabel` | The label for an entity | | `.er.relationshipLabel` | The label for a relationship | | `.er.relationshipLabelBox` | The box surrounding a relationship label | | `.er.relationshipLine` | The line representing a relationship between entities | �����������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/examples.md�������������������������������������������������0000664�0000000�0000000�00000010016�14332737457�0022470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Examples This page contains a collection of examples of diagrams and charts that can be created through mermaid and its myriad applications. **If you wish to learn how to support mermaid on your webpage, read the [Beginner's Guide](../config/usage?id=usage).** **If you wish to learn about mermaid's syntax, Read the [Diagram Syntax](../syntax/flowchart?id=flowcharts-basic-syntax) section.** ## Basic Pie Chart ```mermaid-example pie title NETFLIX "Time spent looking for movie" : 90 "Time spent watching it" : 10 ``` ```mermaid-example pie title What Voldemort doesn't have? "FRIENDS" : 2 "FAMILY" : 3 "NOSE" : 45 ``` ## Basic sequence diagram ```mermaid-example sequenceDiagram Alice ->> Bob: Hello Bob, how are you? Bob-->>John: How about you John? Bob--x Alice: I am good thanks! Bob-x John: I am good thanks! Note right of John: Bob thinks a long<br/>long time, so long<br/>that the text does<br/>not fit on a row. Bob-->Alice: Checking with John... Alice->John: Yes... John, how are you? ``` ## Basic flowchart ```mermaid-example graph LR A[Square Rect] -- Link text --> B((Circle)) A --> C(Round Rect) B --> D{Rhombus} C --> D ``` ## Larger flowchart with some styling ```mermaid-example graph TB sq[Square shape] --> ci((Circle shape)) subgraph A od>Odd shape]-- Two line<br/>edge comment --> ro di{Diamond with <br/> line break} -.-> ro(Rounded<br>square<br>shape) di==>ro2(Rounded square shape) end %% Notice that no text in shape are added here instead that is appended further down e --> od3>Really long text with linebreak<br>in an Odd shape] %% Comments after double percent signs e((Inner / circle<br>and some odd <br>special characters)) --> f(,.?!+-*ز) cyr[Cyrillic]-->cyr2((Circle shape Начало)); classDef green fill:#9f6,stroke:#333,stroke-width:2px; classDef orange fill:#f96,stroke:#333,stroke-width:4px; class sq,e green class di orange ``` ## SequenceDiagram: Loops, alt and opt ```mermaid-example sequenceDiagram loop Daily query Alice->>Bob: Hello Bob, how are you? alt is sick Bob->>Alice: Not so good :( else is well Bob->>Alice: Feeling fresh like a daisy end opt Extra response Bob->>Alice: Thanks for asking end end ``` ## SequenceDiagram: Message to self in loop ```mermaid-example sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts<br/>prevail... John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ## Sequence Diagram: Blogging app service communication ```mermaid-example sequenceDiagram participant web as Web Browser participant blog as Blog Service participant account as Account Service participant mail as Mail Service participant db as Storage Note over web,db: The user must be logged in to submit blog posts web->>+account: Logs in using credentials account->>db: Query stored accounts db->>account: Respond with query result alt Credentials not found account->>web: Invalid credentials else Credentials found account->>-web: Successfully logged in Note over web,db: When the user is authenticated, they can now submit new posts web->>+blog: Submit new post blog->>db: Store post data par Notifications blog--)mail: Send mail to blog subscribers blog--)db: Store in-site notifications and Response blog-->>-web: Successfully posted end end ``` ## A commit flow diagram. ```mermaid gitGraph: commit "Ashish" branch newbranch checkout newbranch commit id:"1111" commit tag:"test" checkout main commit type: HIGHLIGHT commit merge newbranch commit branch b2 commit ``` ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/flowchart.md������������������������������������������������0000664�0000000�0000000�00000041246�14332737457�0022654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Flowcharts - Basic Syntax All Flowcharts are composed of **nodes**, the geometric shapes and **edges**, the arrows or lines. The mermaid code defines the way that these **nodes** and **edges** are made and interact. It can also accommodate different arrow types, multi directional arrows, and linking to and from subgraphs. > **Important note**: Do not type the word "end" as a Flowchart node. Capitalize all or any one the letters to keep the flowchart from breaking, i.e, "End" or "END". Or you can apply this [workaround](https://github.com/mermaid-js/mermaid/issues/1444#issuecomment-639528897).\*\* ### A node (default) ```mermaid-example flowchart LR id ``` > **Note** The id is what is displayed in the box. ### A node with text It is also possible to set text in the box that differs from the id. If this is done several times, it is the last text found for the node that will be used. Also if you define edges for the node later on, you can omit text definitions. The one previously defined will be used when rendering the box. ```mermaid-example flowchart LR id1[This is the text in the box] ``` ## Graph This statement declares the direction of the Flowchart. This declares the flowchart is oriented from top to bottom (`TD` or `TB`). ```mermaid-example flowchart TD Start --> Stop ``` This declares the flowchart is oriented from left to right (`LR`). ```mermaid-example flowchart LR Start --> Stop ``` ## Flowchart Orientation Possible FlowChart orientations are: - TB - top to bottom - TD - top-down/ same as top to bottom - BT - bottom to top - RL - right to left - LR - left to right ## Node shapes ### A node with round edges ```mermaid-example flowchart LR id1(This is the text in the box) ``` ### A stadium-shaped node ```mermaid-example flowchart LR id1([This is the text in the box]) ``` ### A node in a subroutine shape ```mermaid-example flowchart LR id1[[This is the text in the box]] ``` ### A node in a cylindrical shape ```mermaid-example flowchart LR id1[(Database)] ``` ### A node in the form of a circle ```mermaid-example flowchart LR id1((This is the text in the circle)) ``` ### A node in an asymmetric shape ```mermaid-example flowchart LR id1>This is the text in the box] ``` Currently only the shape above is possible and not its mirror. _This might change with future releases._ ### A node (rhombus) ```mermaid-example flowchart LR id1{This is the text in the box} ``` ### A hexagon node Code: ```mmd flowchart LR id1{{This is the text in the box}} ``` Render: ```mermaid flowchart LR id1{{This is the text in the box}} ``` ### Parallelogram ```mermaid-example flowchart TD id1[/This is the text in the box/] ``` ### Parallelogram alt ```mermaid-example flowchart TD id1[\This is the text in the box\] ``` ### Trapezoid ```mermaid-example flowchart TD A[/Christmas\] ``` ### Trapezoid alt ```mermaid-example flowchart TD B[\Go shopping/] ``` ### Double circle ```mermaid-example flowchart TD id1(((This is the text in the circle))) ``` ## Links between nodes Nodes can be connected with links/edges. It is possible to have different types of links or attach a text string to a link. ### A link with arrow head ```mermaid-example flowchart LR A-->B ``` ### An open link ```mermaid-example flowchart LR A --- B ``` ### Text on links ```mermaid-example flowchart LR A-- This is the text! ---B ``` or ```mermaid-example flowchart LR A---|This is the text|B ``` ### A link with arrow head and text ```mermaid-example flowchart LR A-->|text|B ``` or ```mermaid-example flowchart LR A-- text -->B ``` ### Dotted link ```mermaid-example flowchart LR; A-.->B; ``` ### Dotted link with text ```mermaid-example flowchart LR A-. text .-> B ``` ### Thick link ```mermaid-example flowchart LR A ==> B ``` ### Thick link with text ```mermaid-example flowchart LR A == text ==> B ``` ### Chaining of links It is possible declare many links in the same line as per below: ```mermaid-example flowchart LR A -- text --> B -- text2 --> C ``` It is also possible to declare multiple nodes links in the same line as per below: ```mermaid-example flowchart LR a --> b & c--> d ``` You can then describe dependencies in a very expressive way. Like the one-liner below: ```mermaid-example flowchart TB A & B--> C & D ``` If you describe the same diagram using the the basic syntax, it will take four lines. A word of warning, one could go overboard with this making the flowchart harder to read in markdown form. The Swedish word `lagom` comes to mind. It means, not too much and not too little. This goes for expressive syntaxes as well. ```mmd flowchart TB A --> C A --> D B --> C B --> D ``` ### New arrow types There are new types of arrows supported as per below: ```mermaid-example flowchart LR A --o B B --x C ``` ### Multi directional arrows There is the possibility to use multidirectional arrows. ```mermaid-example flowchart LR A o--o B B <--> C C x--x D ``` ### Minimum length of a link Each node in the flowchart is ultimately assigned to a rank in the rendered graph, i.e. to a vertical or horizontal level (depending on the flowchart orientation), based on the nodes to which it is linked. By default, links can span any number of ranks, but you can ask for any link to be longer than the others by adding extra dashes in the link definition. In the following example, two extra dashes are added in the link from node _B_ to node _E_, so that it spans two more ranks than regular links: ```mermaid-example flowchart TD A[Start] --> B{Is it?} B -->|Yes| C[OK] C --> D[Rethink] D --> B B ---->|No| E[End] ``` > **Note** Links may still be made longer than the requested number of ranks > by the rendering engine to accommodate other requests. When the link label is written in the middle of the link, the extra dashes must be added on the right side of the link. The following example is equivalent to the previous one: ```mermaid-example flowchart TD A[Start] --> B{Is it?} B -- Yes --> C[OK] C --> D[Rethink] D --> B B -- No ----> E[End] ``` For dotted or thick links, the characters to add are equals signs or dots, as summed up in the following table: | Length | 1 | 2 | 3 | | ----------------- | :----: | :-----: | :------: | | Normal | `---` | `----` | `-----` | | Normal with arrow | `-->` | `--->` | `---->` | | Thick | `===` | `====` | `=====` | | Thick with arrow | `==>` | `===>` | `====>` | | Dotted | `-.-` | `-..-` | `-...-` | | Dotted with arrow | `-.->` | `-..->` | `-...->` | ## Special characters that break syntax It is possible to put text within quotes in order to render more troublesome characters. As in the example below: ```mermaid-example flowchart LR id1["This is the (text) in the box"] ``` ### Entity codes to escape characters It is possible to escape characters using the syntax exemplified here. ```mermaid-example flowchart LR A["A double quote:#quot;"] -->B["A dec char:#9829;"] ``` Numbers given are base 10, so `#` can be encoded as `#35;`. It is also supported to use HTML character names. ## Subgraphs ``` subgraph title graph definition end ``` An example below: ```mermaid-example flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end ``` You can also set an explicit id for the subgraph. ```mermaid-example flowchart TB c1-->a2 subgraph ide1 [one] a1-->a2 end ``` ## flowcharts With the graphtype flowchart it is also possible to set edges to and from subgraphs as in the flowchart below. ```mermaid-example flowchart TB c1-->a2 subgraph one a1-->a2 end subgraph two b1-->b2 end subgraph three c1-->c2 end one --> two three --> two two --> c2 ``` ## Direction in subgraphs With the graphtype flowcharts you can use the direction statement to set the direction which the subgraph will render like in this example. ```mermaid-example flowchart LR subgraph TOP direction TB subgraph B1 direction RL i1 -->f1 end subgraph B2 direction BT i2 -->f2 end end A --> TOP --> B B1 --> B2 ``` ## Interaction It is possible to bind a click event to a node, the click can lead to either a javascript callback or to a link which will be opened in a new browser tab. **Note**: This functionality is disabled when using `securityLevel='strict'` and enabled when using `securityLevel='loose'`. ``` click nodeId callback click nodeId call callback() ``` - nodeId is the id of the node - callback is the name of a javascript function defined on the page displaying the graph, the function will be called with the nodeId as parameter. Examples of tooltip usage below: ```html <script> const callback = function () { alert('A callback was triggered'); }; </script> ``` The tooltip text is surrounded in double quotes. The styles of the tooltip are set by the class `.mermaidTooltip`. ```mermaid-example flowchart LR A-->B B-->C C-->D click A callback "Tooltip for a callback" click B "https://www.github.com" "This is a tooltip for a link" click A call callback() "Tooltip for a callback" click B href "https://www.github.com" "This is a tooltip for a link" ``` > **Success** The tooltip functionality and the ability to link to urls are available from version 0.5.2. ?> Due to limitations with how Docsify handles JavaScript callback functions, an alternate working demo for the above code can be viewed at [this jsfiddle](https://jsfiddle.net/s37cjoau/3/). Links are opened in the same browser tab/window by default. It is possible to change this by adding a link target to the click definition (`_self`, `_blank`, `_parent` and `_top` are supported): ```mermaid-example flowchart LR A-->B B-->C C-->D D-->E click A "https://www.github.com" _blank click B "https://www.github.com" "Open this in a new tab" _blank click C href "https://www.github.com" _blank click D href "https://www.github.com" "Open this in a new tab" _blank ``` Beginner's tip—a full example using interactive links in a html context: ```html <body> <pre class="mermaid"> flowchart LR A-->B B-->C C-->D click A callback "Tooltip" click B "https://www.github.com" "This is a link" click C call callback() "Tooltip" click D href "https://www.github.com" "This is a link" </pre> <script> const callback = function () { alert('A callback was triggered'); }; const config = { startOnLoad: true, flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'cardinal' }, securityLevel: 'loose', }; mermaid.initialize(config); </script> </body> ``` ### Comments Comments can be entered within a flow diagram, which will be ignored by the parser. Comments need to be on their own line, and must be prefaced with `%%` (double percent signs). Any text after the start of the comment to the next newline will be treated as a comment, including any flow syntax ```mmd flowchart LR %% this is a comment A -- text --> B{node} A -- text --> B -- text2 --> C ``` ## Styling and classes ### Styling links It is possible to style links. For instance, you might want to style a link that is going backwards in the flow. As links have no ids in the same way as nodes, some other way of deciding what style the links should be attached to is required. Instead of ids, the order number of when the link was defined in the graph is used, or use default to apply to all links. In the example below the style defined in the linkStyle statement will belong to the fourth link in the graph: ``` linkStyle 3 stroke:#ff3,stroke-width:4px,color:red; ``` ### Styling line curves It is possible to style the type of curve used for lines between items, if the default method does not meet your needs. Available curve styles include `basis`, `bump`, `linear`, `monotoneX`, `monotoneY`, `natural`, `step`, `stepAfter`, and `stepBefore`. In this example, a left-to-right graph uses the `stepBefore` curve style: ``` %%{ init: { 'flowchart': { 'curve': 'stepBefore' } } }%% graph LR ``` For a full list of available curves, including an explanation of custom curves, refer to the [Shapes](https://github.com/d3/d3-shape/blob/main/README.md#curves) documentation in the [d3-shape](https://github.com/d3/d3-shape/) project. ### Styling a node It is possible to apply specific styles such as a thicker border or a different background color to a node. ```mermaid-example flowchart LR id1(Start)-->id2(Stop) style id1 fill:#f9f,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5 ``` #### Classes More convenient than defining the style every time is to define a class of styles and attach this class to the nodes that should have a different look. a class definition looks like the example below: ``` classDef className fill:#f9f,stroke:#333,stroke-width:4px; ``` Attachment of a class to a node is done as per below: ``` class nodeId1 className; ``` It is also possible to attach a class to a list of nodes in one statement: ``` class nodeId1,nodeId2 className; ``` A shorter form of adding a class is to attach the classname to the node using the `:::`operator as per below: ```mermaid-example flowchart LR A:::someclass --> B classDef someclass fill:#f96; ``` ### Css classes It is also possible to predefine classes in css styles that can be applied from the graph definition as in the example below: **Example style** ```html <style> .cssClass > rect { fill: #ff0000; stroke: #ffff00; stroke-width: 4px; } </style> ``` **Example definition** ```mermaid-example flowchart LR; A-->B[AAA<span>BBB</span>] B-->D class A cssClass ``` ### Default class If a class is named default it will be assigned to all classes without specific class definitions. ``` classDef default fill:#f9f,stroke:#333,stroke-width:4px; ``` ## Basic support for fontawesome It is possible to add icons from fontawesome. The icons are accessed via the syntax fa:#icon class name#. ```mmd flowchart TD B["fab:fa-twitter for peace"] B-->C[fa:fa-ban forbidden] B-->D(fa:fa-spinner) B-->E(A fa:fa-camera-retro perhaps?) ``` ```mermaid flowchart TD B[<img class='fab' src='https://raw.githubusercontent.com/FortAwesome/Font-Awesome/afecf2af5d897b763e5e8e28d46aad2f710ccad6/svgs/brands/twitter.svg'> for peace .] B-->C[<img class='fab' src='https://raw.githubusercontent.com/FortAwesome/Font-Awesome/afecf2af5d897b763e5e8e28d46aad2f710ccad6/svgs/solid/ban.svg'> forbidden .] B-->D(<img class='fab' src='https://raw.githubusercontent.com/FortAwesome/Font-Awesome/afecf2af5d897b763e5e8e28d46aad2f710ccad6/svgs/solid/spinner.svg'> .) B-->E(A <img class='fab' src='https://raw.githubusercontent.com/FortAwesome/Font-Awesome/afecf2af5d897b763e5e8e28d46aad2f710ccad6/svgs/solid/camera-retro.svg'> perhaps? .) ``` ?> Mermaid is now only compatible with Font Awesome versions 4 and 5. Check that you are using the correct version of Font Awesome. ## Graph declarations with spaces between vertices and link and without semicolon - In graph declarations, the statements also can now end without a semicolon. After release 0.2.16, ending a graph statement with semicolon is just optional. So the below graph declaration is also valid along with the old declarations of the graph. - A single space is allowed between vertices and the link. However there should not be any space between a vertex and its text and a link and its text. The old syntax of graph declaration will also work and hence this new feature is optional and is introduced to improve readability. Below is the new declaration of the graph edges which is also valid along with the old declaration of the graph edges. ```mermaid-example flowchart LR A[Hard edge] -->|Link text| B(Round edge) B --> C{Decision} C -->|One| D[Result one] C -->|Two| E[Result two] ``` ## Configuration... Is it possible to adjust the width of the rendered flowchart. This is done by defining **mermaid.flowchartConfig** or by the CLI to use a JSON file with the configuration. How to use the CLI is described in the mermaidCLI page. mermaid.flowchartConfig can be set to a JSON string with config parameters or the corresponding object. ```javascript mermaid.flowchartConfig = { width: 100% } ``` <style> .fa, .fab, .fal, .far, .fas { width: 16px; height: 16px; filter: opacity(0.5); } .dark .fa, .dark .fab, .dark .fal, .dark .far, .dark .fas { width: 16px; height: 16px; filter: invert(1) opacity(0.5); } </style> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/gantt.md����������������������������������������������������0000664�0000000�0000000�00000030521�14332737457�0021772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Gantt diagrams > A Gantt chart is a type of bar chart, first developed by Karol Adamiecki in 1896, and independently by Henry Gantt in the 1910s, that illustrates a project schedule and the amount of time it would take for any one project to finish. Gantt charts illustrate number of days between the start and finish dates of the terminal elements and summary elements of a project. ## A note to users Gantt Charts will record each scheduled task as one continuous bar that extends from the left to the right. The x axis represents time and the y records the different tasks and the order in which they are to be completed. It is important to remember that when a date, day, or collection of dates specific to a task are "excluded", the Gantt Chart will accommodate those changes by extending an equal number of days, towards the right, not by creating a gap inside the task. As shown here ![](./img/Gantt-excluded-days-within.png) However, if the excluded dates are between two tasks that are set to start consecutively, the excluded dates will be skipped graphically and left blank, and the following task will begin after the end of the excluded dates. As shown here ![](./img/Gantt-long-weekend-look.png) A Gantt chart is useful for tracking the amount of time it would take before a project is finished, but it can also be used to graphically represent "non-working days", with a few tweaks. Mermaid can render Gantt diagrams as SVG, PNG or a MarkDown link that can be pasted into docs. ```mermaid-example gantt title A Gantt Diagram dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d ``` ## Syntax ```mermaid-example gantt dateFormat YYYY-MM-DD title Adding GANTT diagram functionality to mermaid excludes weekends %% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".) section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d Functionality added :milestone, 2014-01-25, 0d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page :20h Add another diagram to demo page :48h ``` It is possible to set multiple dependencies separated by space: ```mermaid-example gantt apple :a, 2017-07-20, 1w banana :crit, b, 2017-07-23, 1d cherry :active, c, after b a, 1d ``` ### Title The `title` is an _optional_ string to be displayed at the top of the Gantt chart to describe the chart as a whole. ### Section statements You can divide the chart into various sections, for example to separate different parts of a project like development and documentation. To do so, start a line with the `section` keyword and give it a name. (Note that unlike with the [title for the entire chart](#title), this name is _required_. ### Milestones You can add milestones to the diagrams. Milestones differ from tasks as they represent a single instant in time and are identified by the keyword `milestone`. Below is an example on how to use milestones. As you may notice, the exact location of the milestone is determined by the initial date for the milestone and the "duration" of the task this way: _initial date_+_duration_/2. ```mermaid-example gantt dateFormat HH:mm axisFormat %H:%M Initial milestone : milestone, m1, 17:49,2min taska2 : 10min taska3 : 5min Final milestone : milestone, m2, 18:14, 2min ``` ## Setting dates `dateFormat` defines the format of the date **input** of your gantt elements. How these dates are represented in the rendered chart **output** are defined by `axisFormat`. ### Input date format The default input date format is `YYYY-MM-DD`. You can define your custom `dateFormat`. ``` dateFormat YYYY-MM-DD ``` The following formatting options are supported: ``` Input Example Description: YYYY 2014 4 digit year YY 14 2 digit year Q 1..4 Quarter of year. Sets month to first month in quarter. M MM 1..12 Month number MMM MMMM January..Dec Month name in locale set by moment.locale() D DD 1..31 Day of month Do 1st..31st Day of month with ordinal DDD DDDD 1..365 Day of year X 1410715640.579 Unix timestamp x 1410715640579 Unix ms timestamp H HH 0..23 24 hour time h hh 1..12 12 hour time used with a A. a A am pm Post or ante meridiem m mm 0..59 Minutes s ss 0..59 Seconds S 0..9 Tenths of a second SS 0..99 Hundreds of a second SSS 0..999 Thousandths of a second Z ZZ +12:00 Offset from UTC as +-HH:mm, +-HHmm, or Z ``` More info in: https://momentjs.com/docs/#/parsing/string-format/ ### Output date format on the axis The default output date format is YYYY-MM-DD. You can define your custom `axisFormat`, like `2020-Q1` for the first quarter of the year 2020. ``` axisFormat %Y-%m-%d ``` The following formatting strings are supported: ``` %a - abbreviated weekday name. %A - full weekday name. %b - abbreviated month name. %B - full month name. %c - date and time, as "%a %b %e %H:%M:%S %Y". %d - zero-padded day of the month as a decimal number [01,31]. %e - space-padded day of the month as a decimal number [ 1,31]; equivalent to %_d. %H - hour (24-hour clock) as a decimal number [00,23]. %I - hour (12-hour clock) as a decimal number [01,12]. %j - day of the year as a decimal number [001,366]. %m - month as a decimal number [01,12]. %M - minute as a decimal number [00,59]. %L - milliseconds as a decimal number [000, 999]. %p - either AM or PM. %S - second as a decimal number [00,61]. %U - week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. %w - weekday as a decimal number [0(Sunday),6]. %W - week number of the year (Monday as the first day of the week) as a decimal number [00,53]. %x - date, as "%m/%d/%Y". %X - time, as "%H:%M:%S". %y - year without century as a decimal number [00,99]. %Y - year with century as a decimal number. %Z - time zone offset, such as "-0700". %% - a literal "%" character. ``` More info in: https://github.com/mbostock/d3/wiki/Time-Formatting ## Comments Comments can be entered within a gantt chart, which will be ignored by the parser. Comments need to be on their own line and must be prefaced with `%%` (double percent signs). Any text after the start of the comment to the next newline will be treated as a comment, including any diagram syntax ```mmd gantt title A Gantt Diagram %% this is a comment dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d ``` ## Styling Styling of the a gantt diagram is done by defining a number of css classes. During rendering, these classes are extracted from the file located at src/themes/gantt.scss ### Classes used | Class | Description | | --------------------- | ---------------------------------------------------------------------- | | grid.tick | Styling for the Grid Lines | | grid.path | Styling for the Grid's borders | | .taskText | Task Text Styling | | .taskTextOutsideRight | Styling for Task Text that exceeds the activity bar towards the right. | | .taskTextOutsideLeft | Styling for Task Text that exceeds the activity bar, towards the left. | | todayMarker | Toggle and Styling for the "Today Marker" | ### Sample stylesheet ```css .grid .tick { stroke: lightgrey; opacity: 0.3; shape-rendering: crispEdges; } .grid path { stroke-width: 0; } #tag { color: white; background: #fa283d; width: 150px; position: absolute; display: none; padding: 3px 6px; margin-left: -80px; font-size: 11px; } #tag:before { border: solid transparent; content: ' '; height: 0; left: 50%; margin-left: -5px; position: absolute; width: 0; border-width: 10px; border-bottom-color: #fa283d; top: -20px; } .taskText { fill: white; text-anchor: middle; } .taskTextOutsideRight { fill: black; text-anchor: start; } .taskTextOutsideLeft { fill: black; text-anchor: end; } ``` ## Today marker You can style or hide the marker for the current date. To style it, add a value for the `todayMarker` key. ``` todayMarker stroke-width:5px,stroke:#0f0,opacity:0.5 ``` To hide the marker, set `todayMarker` to `off`. ``` todayMarker off ``` ## Configuration It is possible to adjust the margins for rendering the gantt diagram. This is done by defining the `ganttConfig` part of the configuration object. How to use the CLI is described in the [mermaidCLI](../config/mermaidCLI) page. mermaid.ganttConfig can be set to a JSON string with config parameters or the corresponding object. ```javascript mermaid.ganttConfig = { titleTopMargin: 25, barHeight: 20, barGap: 4, topPadding: 75, sidePadding: 75, }; ``` ### Possible configuration params: | Param | Description | Default value | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------- | | mirrorActor | Turns on/off the rendering of actors below the diagram as well as above it | false | | bottomMarginAdj | Adjusts how far down the graph ended. Wide borders styles with css could generate unwanted clipping which is why this config param exists. | 1 | ## Interaction It is possible to bind a click event to a task. The click can lead to either a javascript callback or to a link which will be opened in the current browser tab. **Note**: This functionality is disabled when using `securityLevel='strict'` and enabled when using `securityLevel='loose'`. ``` click taskId call callback(arguments) click taskId href URL ``` - taskId is the id of the task - callback is the name of a javascript function defined on the page displaying the graph, the function will be called with the taskId as the parameter if no other arguments are specified. Beginner's tip—a full example using interactive links in an html context: ```html <body> <pre class="mermaid"> gantt dateFormat YYYY-MM-DD section Clickable Visit mermaidjs :active, cl1, 2014-01-07, 3d Print arguments :cl2, after cl1, 3d Print task :cl3, after cl2, 3d click cl1 href "https://mermaidjs.github.io/" click cl2 call printArguments("test1", "test2", test3) click cl3 call printTask() </pre> <script> const printArguments = function (arg1, arg2, arg3) { alert('printArguments called with arguments: ' + arg1 + ', ' + arg2 + ', ' + arg3); }; const printTask = function (taskId) { alert('taskId: ' + taskId); }; const config = { startOnLoad: true, securityLevel: 'loose', }; mermaid.initialize(config); </script> </body> ``` �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/gitGraph.md�������������������������������������������������0000664�0000000�0000000�00000101260�14332737457�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Gitgraph Diagrams > A Git Graph is a pictorial representation of git commits and git actions(commands) on various branches. These kind of diagram are particularly helpful to developers and devops teams to share their Git branching strategies. For example, it makes it easier to visualize how git flow works. Mermaid can render Git diagrams ```mermaid-example gitGraph commit commit branch develop checkout develop commit commit checkout main merge develop commit commit ``` In Mermaid, we support the basic git operations like: - _commit_ : Representing a new commit on the current branch. - _branch_ : To create & switch to a new branch, setting it as the current branch. - _checkout_ : To checking out an existing branch and setting it as the current branch. - _merge_ : To merge an existing branch onto the current branch. With the help of these key git commands, you will be able to draw a gitgraph in Mermaid very easily and quickly. Entity names are often capitalized, although there is no accepted standard on this, and it is not required in Mermaid. ## Syntax Mermaid syntax for a gitgraph is very straight-forward and simple. It follows a declarative-approach, where each commit is drawn on the timeline in the diagram, in order of its occurrences/presence in code. Basically, it follows the insertion order for each command. First thing you do is to declare your diagram type using the **gitgraph** keyword. This `gitgraph` keyword, tells Mermaid that you wish to draw a gitgraph, and parse the diagram code accordingly. Each gitgraph, is initialized with **_main_** branch. So unless you create a different branch, by-default the commits will go to the main branch. This is driven with how git works, where in the beginning you always start with the main branch (formerly called as **_master_** branch). And by-default, `main` branch is set as your **_current branch_**. You make use of **_commit_** keyword to register a commit on the current branch. Let see how this works: A simple gitgraph showing three commits on the default (**_main_**) branch: ```mermaid-example gitGraph commit commit commit ``` If you look closely at the previous example, you can see the default branch `main` along with three commits. Also, notice that by default each commit has been given a unique & random ID. What if you wanted to give your own custom ID to a commit? Yes, it is possible to do that with Mermaid. ### Adding custom commit id For a given commit you may specify a custom ID at the time of declaring it using the `id` attribute, followed by `:` and your custom value within a `""` quote. For example: `commit id: "your_custom_id"` Let us see how this works with the help of the following diagram: ```mermaid-example gitGraph commit id: "Alpha" commit id: "Beta" commit id: "Gamma" ``` In this example, we have given our custom IDs to the commits. ### Modifying commit type In Mermaid, a commit can be of three type, which render a bit different in the diagram. These types are: - `NORMAL` : Default commit type. Represented by a solid circle in the diagram - `REVERSE` : To emphasize a commit as a reverse commit. Represented by a crossed solid circle in the diagram. - `HIGHLIGHT` : To highlight a particular commit in the diagram. Represented by a filled rectangle in the diagram. For a given commit you may specify its type at the time of declaring it using the `type` attribute, followed by `:` and the required type option discussed above. For example: `commit type: HIGHLIGHT` NOTE: If no commit type is specified, `NORMAL` is picked as default. Let us see how these different commit type look with the help of the following diagram: ```mermaid-example gitGraph commit id: "Normal" commit commit id: "Reverse" type: REVERSE commit commit id: "Highlight" type: HIGHLIGHT commit ``` In this example, we have specified different types to each commit. Also, see how we have included both `id` and `type` together at the time of declaring our commits. ### Adding Tags For a given commit you may decorate it as a **tag**, similar to the concept of tags or release version in git world. You can attach a custom tag at the time of declaring a commit using the `tag` attribute, followed by `:` and your custom value within `""` quote. For example: `commit tag: "your_custom_tag"` Let us see how this works with the help of the following diagram: ```mermaid-example gitGraph commit commit id: "Normal" tag: "v1.0.0" commit commit id: "Reverse" type: REVERSE tag: "RC_1" commit commit id: "Highlight" type: HIGHLIGHT tag: "8.8.4" commit ``` In this example, we have given custom tags to the commits. Also, see how we have combined all these attributes in a single commit declaration. You can mix-match these attributes as you like. ### Create a new branch In Mermaid, in-order to create a new branch, you make use of the `branch` keyword. You also need to provide a name of the new branch. The name has to be unique and cannot be that of an existing branch. Usage example: `branch develop` When Mermaid, reads the `branch` keyword, it creates a new branch and sets it as the current branch. Equivalent to you creating a new branch and checking it out in Git world. Let see this in an example: ```mermaid-example gitGraph commit commit branch develop commit commit commit ``` In this example, see how we started with default `main` branch, and pushed two commits on that. Then we created the `develop` branch, and all commits afterwards are put on the `develop` branch as it became the current branch. ### Checking out an existing branch In Mermaid, in order to switch to an existing branch, you make use of the `checkout` keyword. You also need to provide a name of an existing branch. If no branch is found with the given name, it will result in console error. Usage example: `checkout develop` When Mermaid, reads the `checkout` keyword, it finds the given branch and sets it as the current branch. Equivalent to checking out a branch in the Git world. Let see modify our previous example: ```mermaid-example gitGraph commit commit branch develop commit commit commit checkout main commit commit ``` In this example, see how we started with default `main` branch, and pushed two commits on that. Then we created the `develop` branch, and all three commits afterwards are put on the `develop` branch as it became the current branch. After this we made use of the `checkout` keyword to set the current branch as `main`, and all commit that follow are registered against the current branch, i.e. `main`. ### Merging two branches In Mermaid, in order to merge or join to an existing branch, you make use of the `merge` keyword. You also need to provide the name of an existing branch to merge from. If no branch is found with the given name, it will result in console error. Also, you can only merge two separate branches, and cannot merge a branch with itself. In such case an error is throw. Usage example: `merge develop` When Mermaid, reads the `merge` keyword, it finds the given branch and its head commit (the last commit on that branch), and joins it with the head commit on the **current branch**. Each merge results in a **_merge commit_**, represented in the diagram with **filled double circle**. Let us modify our previous example to merge our two branches: ```mermaid-example gitGraph commit commit branch develop commit commit commit checkout main commit commit merge develop commit commit ``` In this example, see how we started with default `main` branch, and pushed two commits on that. Then we created the `develop` branch, and all three commits afterwards are put on the `develop` branch as it became the current branch. After this we made use of the `checkout` keyword to set the current branch as `main`, and all commits that follow are registered against the current branch, i.e. `main`. After this we merge the `develop` branch onto the current branch `main`, resulting in a merge commit. Since the current branch at this point is still `main`, the last two commits are registered against that. You can also decorate your merge with similar attributes as you did for the commit using: - `id`--> To override the default ID with custom ID - `tag`--> To add a custom tag to your merge commit - `type`--> To override the default shape of merge commit. Here you can use other commit type mentioned earlier. And you can choose to use none, some or all of these attributes together. For example: `merge develop id: "my_custom_id" tag: "my_custom_tag" type: REVERSE` Let us see how this works with the help of the following diagram: ```mermaid-example gitGraph commit id: "1" commit id: "2" branch nice_feature checkout nice_feature commit id: "3" checkout main commit id: "4" checkout nice_feature branch very_nice_feature checkout very_nice_feature commit id: "5" checkout main commit id: "6" checkout nice_feature commit id: "7" checkout main merge nice_feature id: "customID" tag: "customTag" type: REVERSE checkout very_nice_feature commit id: "8" checkout main commit id: "9" ``` ### Cherry Pick commit from another branch Similar to how 'git' allows you to cherry-pick a commit from **another branch** onto the **current** branch, Mermaid also supports this functionality. You can also cherry-pick a commit from another branch using the `cherry-pick` keyword. To use the `cherry-pick` keyword, you must specify the id using the `id` attribute, followed by `:` and your desired commit id within a `""` quote. For example: `cherry-pick id: "your_custom_id"` Here, a new commit representing the cherry-pick is created on the current branch, and is visually highlighted in the diagram with a **cherry** and a tag depicting the commit id from which it is cherry-picked from. A few important rules to note here are: 1. You need to provide the `id` for an existing commit to be cherry-picked. If given commit id does not exist it will result in an error. For this, make use of the `commit id:$value` format of declaring commits. See the examples from above. 2. The given commit must not exist on the current branch. The cherry-picked commit must always be a different branch than the current branch. 3. Current branch must have at least one commit, before you can cherry-pick, otherwise it will cause an error is throw. Let see an example: ```mermaid-example gitGraph commit id: "ZERO" branch develop commit id:"A" checkout main commit id:"ONE" checkout develop commit id:"B" checkout main commit id:"TWO" cherry-pick id:"A" commit id:"THREE" checkout develop commit id:"C" ``` ## Gitgraph specific configuration options In Mermaid, you have the option to configure the gitgraph diagram. You can configure the following options: - `showBranches` : Boolean, default is `true`. If set to `false`, the branches are not shown in the diagram. - `showCommitLabel` : Boolean, default is `true`. If set to `false`, the commit labels are not shown in the diagram. - `mainBranchName` : String, default is `main`. The name of the default/root branch. - `mainBranchOrder` : Position of the main branch in the list of branches. default is `0`, meaning, by default `main` branch is the first in the order. Let's look at them one by one. ## Hiding Branch names and lines Sometimes you may want to hide the branch names and lines from the diagram. You can do this by using the `showBranches` keyword. By default its value is `true`. You can set it to `false` using directives. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': false}} }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ## Commit labels Layout: Rotated or Horizontal Mermaid supports two types of commit labels layout. The default layout is **rotated**, which means the labels are placed below the commit circle, rotated at 45 degrees for better readability. This is particularly useful for commits with long labels. The other option is **horizontal**, which means the labels are placed below the commit circle centred horizontally, and are not rotated. This is particularly useful for commits with short labels. You can change the layout of the commit labels by using the `rotateCommitLabel` keyword in the directive. It defaults to `true`, which means the commit labels are rotated. Usage example: Rotated commit labels ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'rotateCommitLabel': true}} }%% gitGraph commit id: "feat(api): ..." commit id: "a" commit id: "b" commit id: "fix(client): .extra long label.." branch c2 commit id: "feat(modules): ..." commit id: "test(client): ..." checkout main commit id: "fix(api): ..." commit id: "ci: ..." branch b1 commit branch b2 commit ``` Usage example: Horizontal commit labels ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'rotateCommitLabel': false}} }%% gitGraph commit id: "feat(api): ..." commit id: "a" commit id: "b" commit id: "fix(client): .extra long label.." branch c2 commit id: "feat(modules): ..." commit id: "test(client): ..." checkout main commit id: "fix(api): ..." commit id: "ci: ..." branch b1 commit branch b2 commit ``` ## Hiding commit labels Sometimes you may want to hide the commit labels from the diagram. You can do this by using the `showCommitLabel` keyword. By default its value is `true`. You can set it to `false` using directives. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': false,'showCommitLabel': false}} }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ## Customizing main branch name Sometimes you may want to customize the name of the main/default branch. You can do this by using the `mainBranchName` keyword. By default its value is `main`. You can set it to any string using directives. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'MetroLine1'}} }%% gitGraph commit id:"NewYork" commit id:"Dallas" branch MetroLine2 commit id:"LosAngeles" commit id:"Chicago" commit id:"Houston" branch MetroLine3 commit id:"Phoenix" commit type: HIGHLIGHT id:"Denver" commit id:"Boston" checkout MetroLine1 commit id:"Atlanta" merge MetroLine3 commit id:"Miami" commit id:"Washington" merge MetroLine2 tag:"MY JUNCTION" commit id:"Boston" commit id:"Detroit" commit type:REVERSE id:"SanFrancisco" ``` Look at the imaginary railroad map created using Mermaid. Here, we have changed the default main branch name to `MetroLine1`. ## Customizing branch ordering In Mermaid, by default the branches are shown in the order of their definition or appearance in the diagram code. Sometimes you may want to customize the order of the branches. You can do this by using the `order` keyword next the branch definition. You can set it to a positive number. Mermaid follows the given precedence order of the `order` keyword. - Main branch is always shown first as it has default order value of `0`. (unless its order is modified and changed from `0` using the `mainBranchOrder` keyword in the config) - Next, All branches without an `order` are shown in the order of their appearance in the diagram code. - Next, All branches with an `order` are shown in the order of their `order` value. To fully control the order of all the branches, you must define `order` for all the branches. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true}} }%% gitGraph commit branch test1 order: 3 branch test2 order: 2 branch test3 order: 1 ``` Look at the diagram, all the branches are following the order defined. Usage example: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchOrder': 2}} }%% gitGraph commit branch test1 order: 3 branch test2 branch test3 branch test4 order: 1 ``` Look at the diagram, here, all the branches without a specified order are drawn in their order of definition. Then, `test4` branch is drawn because the order of `1`. Then, `main` branch is drawn because the order of `2`. And, lastly `test1`is drawn because the order of `3`. NOTE: Because we have overridden the `mainBranchOrder` to `2`, the `main` branch is not drawn in the beginning, instead follows the ordering. Here, we have changed the default main branch name to `MetroLine1`. ## Themes Mermaid supports a bunch of pre-defined themes which you can use to find the right one for you. PS: you can actually override an existing theme's variable to get your own custom theme going. Learn more about theming your diagram [here](../config/theming.md). The following are the different pre-defined theme options: - `base` - `forest` - `dark` - `default` - `neutral` **NOTE**: To change theme you can either use the `initialize` call or _directives_. Learn more about [directives](../config/directives.md) Let's put them to use, and see how our sample diagram looks in different themes: ### Base Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'base' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ### Forest Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'forest' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ### Default Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' } }%% gitGraph commit type:HIGHLIGHT branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ### Dark Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'dark' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ### Neutral Theme ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'neutral' } }%% gitGraph commit branch hotfix checkout hotfix commit branch develop checkout develop commit id:"ash" tag:"abc" branch featureB checkout featureB commit type:HIGHLIGHT checkout main checkout hotfix commit type:NORMAL checkout develop commit type:REVERSE checkout featureB commit checkout main merge hotfix checkout featureB commit checkout develop branch featureA commit checkout develop merge hotfix checkout featureA commit checkout featureB commit checkout develop merge featureA branch release checkout release commit checkout main commit checkout release merge main checkout develop merge release ``` ## Customize using Theme Variables Mermaid allows you to customize your diagram using theme variables which govern the look and feel of various elements of the diagram. For understanding let us take a sample diagram with theme `default`, the default values of the theme variables is picked automatically from the theme. Later on we will see how to override the default values of the theme variables. See how the default theme is used to set the colors for the branches: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` > #### IMPORTANT: > > Mermaid supports the theme variables to override the default values for **up to 8 branches**, i.e., you can set the color/styling of up to 8 branches using theme variables. After this threshold of 8 branches, the theme variables are reused in the cyclic manner, i.e. the 9th branch will use the color/styling of the 1st branch, or the branch at index position '8' will use the color/styling of the branch at index position '0'. > _More on this in the next section. See examples on **Customizing branch label colors** below_ ### Customizing branch colors You can customize the branch colors using the `git0` to `git7` theme variables. Mermaid allows you to set the colors for up-to 8 branches, where `git0` variable will drive the value of the first branch, `git1` will drive the value of the second branch and so on. NOTE: Default values for these theme variables are picked from the selected theme. If you want to override the default values, you can use the `initialize` call to add your custom theme variable values. Example: Now let's override the default values for the `git0` to `git3` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'git0': '#ff0000', 'git1': '#00ff00', 'git2': '#0000ff', 'git3': '#ff00ff', 'git4': '#00ffff', 'git5': '#ffff00', 'git6': '#ff00ff', 'git7': '#00ffff' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the branch colors are changed to the values specified in the theme variables. ### Customizing branch label colors You can customize the branch label colors using the `gitBranchLabel0` to `gitBranchLabel7` theme variables. Mermaid allows you to set the colors for up-to 8 branches, where `gitBranchLabel0` variable will drive the value of the first branch label, `gitBranchLabel1` will drive the value of the second branch label and so on. Lets see how the default theme is used to set the colors for the branch labels: Now let's override the default values for the `gitBranchLabel0` to `gitBranchLabel2` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'gitBranchLabel0': '#ffffff', 'gitBranchLabel1': '#ffffff', 'gitBranchLabel2': '#ffffff', 'gitBranchLabel3': '#ffffff', 'gitBranchLabel4': '#ffffff', 'gitBranchLabel5': '#ffffff', 'gitBranchLabel6': '#ffffff', 'gitBranchLabel7': '#ffffff', 'gitBranchLabel8': '#ffffff', 'gitBranchLabel9': '#ffffff' } } }%% gitGraph checkout main branch branch1 branch branch2 branch branch3 branch branch4 branch branch5 branch branch6 branch branch7 branch branch8 branch branch9 checkout branch1 commit ``` Here, you can see that `branch8` and `branch9` colors and the styles are being picked from branch at index position `0` (`main`) and `1`(`branch1`) respectively, i.e., **branch themeVariables are repeated cyclically**. ### Customizing Commit colors You can customize commit using the `commitLabelColor` and `commitLabelBackground` theme variables for changes in the commit label color and background color respectively. Example: Now let's override the default values for the `commitLabelColor` to `commitLabelBackground` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'commitLabelColor': '#ff0000', 'commitLabelBackground': '#00ff00' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the commit label color and background color are changed to the values specified in the theme variables. ### Customizing Commit Label Font Size You can customize commit using the `commitLabelFontSize` theme variables for changing in the font soze of the commit label . Example: Now let's override the default values for the `commitLabelFontSize` variable: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'commitLabelColor': '#ff0000', 'commitLabelBackground': '#00ff00', 'commitLabelFontSize': '16px' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the commit label font size changed. ### Customizing Tag Label Font Size You can customize commit using the `tagLabelFontSize` theme variables for changing in the font soze of the tag label . Example: Now let's override the default values for the `tagLabelFontSize` variable: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'commitLabelColor': '#ff0000', 'commitLabelBackground': '#00ff00', 'tagLabelFontSize': '16px' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the tag label font size changed. ### Customizing Tag colors You can customize tag using the `tagLabelColor`,`tagLabelBackground` and `tagLabelBorder` theme variables for changes in the tag label color,tag label background color and tag label border respectively. Example: Now let's override the default values for the `tagLabelColor`, `tagLabelBackground` and to `tagLabelBorder` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'tagLabelColor': '#ff0000', 'tagLabelBackground': '#00ff00', 'tagLabelBorder': '#0000ff' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the tag colors are changed to the values specified in the theme variables. ### Customizing Highlight commit colors You can customize the highlight commit colors in relation to the branch it is on using the `gitInv0` to `gitInv7` theme variables. Mermaid allows you to set the colors for up-to 8 branches specific highlight commit, where `gitInv0` variable will drive the value of the first branch's highlight commits, `gitInv1` will drive the value of the second branch's highlight commit label and so on. Example: Now let's override the default values for the `git0` to `git3` variables: ```mermaid-example %%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { 'gitInv0': '#ff0000' } } }%% gitGraph commit branch develop commit tag:"v1.0.0" commit checkout main commit type: HIGHLIGHT commit merge develop commit branch featureA commit ``` See how the highlighted commit color on the first branch is changed to the value specified in the theme variable `gitInv0`. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/img/��������������������������������������������������������0000775�0000000�0000000�00000000000�14332737457�0021106�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/img/Gantt-excluded-days-within.png��������������������������0000664�0000000�0000000�00000233135�14332737457�0026731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��h��u������sRGB����gAMA�� a��� pHYs��t��tfx��IDATx^ `TV%XE'^ b[(l 녠VV-)AP (U ZĊ "%KЪ$V Ul K=Ϲ̜$Iisss}p<["����������Aw����������p���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������HHo*Tԭ٩H|tAAU꺛V|��������hj4pfԨjjM5̮u3p4vhw߱eNE_nu`AU?nyk5וj~:5uMFW��������|?ի]X IFhިQJ0`T)3Y*yb>XEnS_̓l\{��������Йu�wd"Mbgzm#d]X8Uӟad��������:]aK;%-~qC׫v; ڶӝ1x=\k2g-Qdޒ[j%%]OaEBPid}¾q0QC��������8:Y6mp si*ëk[;{cvBfw99*x`CZ@F$w훚��������NmжpoX\5-GhחC";*6���������pht�mt'A-kqcn ����������׹ʝ$x{*^t=/k^w%_ն4uH nLր"MLjy#E:V[!g`ek,K(]7ov]U";v;Y2_NUQ^_w{1,Pmh{{gS eޞ 7U:uŪ {"DR*vZ4Lo=s5ݪnTXyijօT͌Ȳ몬iMvG/Oli!XMكFje s œ̵7"v,Už:qSʖ;Auͱz_&E^{TYyC���������2B9ͬ疈XQ|n(T/v)g̒=J1=< ZB7?} 塒#/4w;Bi#l;l ſJ{B/ ]/:FL mpWa^u C1dRN|)l4O^c|?l~Q(7 -7? KB>&!TfaE >VJ;:o>a)y}`%-avԕZvڭu)e/%~��������]S'AWkii]3kO%8gyG;m9nX=YC.nF<^?S_EwMQw);UCFW'nFB*+ cu4 ("g|(ҀZfGMs_`QKGEx@fH&)rAUxaCx|0X;}|L`uzi'�M9`0zf)g{%4PSFӪVծ*Ƚjcǻ3&SIku|Ë(oҴ98ڪ넕ԁu]'˗ rvVir0z;_2E3ufj%Gp|̛nF WOWMOu7*k[hD���������]6 z凖nܳ64vM4QN䱍=_ }l.MS(pPlxwXjޞОI#ם{5Vn =Ƶ{򺋢4T8bZ>~USWwIzQvlV'_Uޘ)w{Xmm*,j [5ڼmGEm5%jWP] 0%ʵ{u' zO^N U1Puk٤3Ckc CY��������2MAlM4;ʟ .QM3J1_ymjP;TrgPq:-^Qz ,֒*t烏ҲP{ ^/:ڝl&OϬU(YG`,ͺѝ1X~P9(ЬS 1JTYHŃ{rX"Q|j 7-rS׹35DݙMT>~Whw)&;m6*4{Uv:i4Y:Ɲ9>SB\>_B-YT~iI [+UA˹W/z�������i:Ov68b=ha脱MJ8<9Rʽz^b{_,,/5TWEO-*__NǓNhMұIcPNmg(mv }KKiPme]ߔkfIJT| j5Ur;E7"?m25W.RG-U]yiAzuaxYO"LrM>o[=��������1:M6p/<IO7Qb۽hTyj^@W**?`jNp\տ'�<^}Xc3lPC{ڨ= OuZY+Lr.ϝ#UN{UjwzF&۠ 8=]~.kZU? ?RH`jw)')0%lEjEI=��������dNmuY h,0SY�V6hnľ֭[)8rLڽ7q3}ACɺ(_q5)XW524RmoO\JoگWtWt|B˴~ϔڞ h˃&SaVՄ+PN ;4'5p�wrݕ9��������hNmPwR 93_/gD,Ƞ*_qzVA^ {w UyJӡ[*:keY-H nѲG+ၪf?v; TpU6ը]:xJ. ^v6;\i][`W?~���������pt�mS6>NmF|r&+jTo 75<֝U봮miÌvMp_0]Uasj]~+5E#'�hMq{|7^pSa8Ho=ܿ���������shT7xr"9= �؊ v`]oMIuoS968KV{XRKMӴ۬4o*M;[Ꮋ^*0 nk5jκz2;G)rI;ܪNS9l:ڝ��������hA}!24l^f.(r{kьR7[ŖVIUhchOp'-ЮA.gmP>>ҋ|ϵFi`g:BukUڙϽDqwhHuUm;W;)Y2�yrew.�������� :EaK;%垙|S 4F6t#+c PNnd0m ^+ΓljFPuݦijꄼҜ3DJVjÁ>gSUM^ZTmOh7mONǺ"ψ>6lt*?zUZ@A5DaS ��������`t�mP "wz)wQxE~$/2Poy1KhJxY6jjwv7{ם< C ½IM le;ۅ匙in*Mx3ct6[#aT'w&뷵2vkfw&4+\M$ϝ��������hY'6h wRg  xY\\k+͝@q8[;PoжQ`2Mea;^UZ<^�IgiES#q;f*7%<~ &^ˠjVk;۩`+orhJ#AfUkњ>~4~_qg:@%vz~sUJ3_XqV1#C/UIG���������-K�mt'MzNɉ EicԳ&sZ{A<8^acjZlY7iؙݔ7Yeu՚|gE+=YnKkgSΠњ:93&[C&P ע*Ξ.Yyfidv7+ { 5l ]Y֭%׹+(Gs&K6YUMcc}|=Sjr]jʷw00igjleRu_/Zͺ\^7kEy}U7qVf,W΃Mאk=]u׃SFCKUuAa�������� Wfa7;}6.WR͉gG w{V/bZ(?)0C*Zk4XQ)7<Pax nv<y4Œ6*u6>P 4Ky=OG+sVQP*ofOhýJyr-muQuՖ\W{BL@hڿk5tLL^tiSJR*h G/-׾2T/fuͮվmi#RΘ%j~��������L=hպS9q'ɺ@T Zfmc;iAgRi]C6T,Ҕ1y}DJn[:-Ԧ,޲V6WtR1Sb֩^S%1פz)jxw(*4~6W襂 3<]/jKm3>R\;~UmԞWin~GSolU|M3ٿGaSE5۴zY z9C͵^hSKY��������FL֝����������D Z����������"���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������Hn!;lN���������@N���������@W����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������HŝNK[lq���N'[�����dt_)~���{-�����2G bc����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������TUnmln���������AֲwK_7R 9LE7,VՖn ��� "{d8հ˫m[PT^Mn������ 6vHTYkֺVULWѼjz��T2-n uF������mY`@5;B}Q7)7nY���5I;eV@`f]QC<E\eY������8t27@ZoP0Pڵ9"GY;U媼"����(+_wTjٍLpj79������l LeA)*fFQNTu-=@#[ ն5zP]6{hM_ʍˠjze3p'Sm<��R ȳjV6he~;&|VUu9lSplo b)礢ͿחimaWՖȗЦeCֻ9&YgZkm`������D�mWYs5d{6bb LUu6,b+PX[a-Z|bs>jim+klvN���:_|/b=U qNa/LULLഩFXyck`7/&3LSU69{jPY*_W:Ǖ5HӭW(jOU7ը|u>cf����� Zh*hQvFOAFw9b6Xj-eV FVn>lv<=EཪQYuܻN;>vWn7X��@Zk nS"MYn |_JfJ/e&z+4? ?m_[.tήURkpZW/Uq mJ*iUmK}`rFj^d}'.Q%g�����gжIjVV[ TRv8rTIt]jժbU60E˞.Uw6#K9yâ{ֲG V;sm B ��)T[G�S` _FP|[)Zzmn%2϶xؠGIJU2]7VP+ʬ㚦R%*gkZZgWLw0n/bz]ijIOG������(CYe4ګ} *gpsr"z)7/[&] hƈP).pz7"XjO_���t&9CU2\iΐ~mnkTfe8#lRRɏZ^A ?yL~B7'~*e7a+[4厀G ޝP�����Wh{ ֨-Gn��� +CQNK*V^]ѲL�@ZLdTGGsT#[ҝT~YʿTisT(Q~߂�����ZC(VYG޽^ڀY6mSC[j_+`zf~&mB<U8���v|7̹D%VZTMj=>~ jC}8Hd~x=E7:ddRPeRE'> �����Т}m5/O VhEEZAM_>iP͂߿ (*]).Sn7pʕh"nTǁ|m)7-SNMjߨFduiZ52nM`/���t}nx|* LӴ1-nI֎fiiw*f,VmhSGMQ`7_Tx"noZ߫O�����@<U*Wi{U#goW#ﬖ(pS:g"-$һSG].עyg}Rr_Nְ=1j*R%jUv0 ?ŷ.Su���fؚʽuﮭ \}J=zӵy>YvQ{y{] 5e7*p �����D28@kQDSo4 -ԔשJo-WIU=<EUp_igrSr+o$6KT4{غ(} 􍭪W|vLђ꙾��kwC{͚ԖޫU*_Ξ?|^#?6kDchm3U8&?������u L-[h���UgwK�����̑2-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)-dqҖ-[)���twK�����̒:E6o��s|o%�����@H{A q ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@���������!@ ����������)B����������R�-����������Z����������H����������"h��������� E���������@M]*MV(fuEXh:7#>��������ZvЦ2ȅjr���������C����������"hѵ uZw[,���������P!@ Ǧe*cd��������� ZZPag:ϭ4R(VŹr/e-٫m+kp+6ZId}L3*T &<xVhۖ Mt?Y|LS}5e eUL-|{Tiu;K:6 hqx}5Ūy]f bs&mw&^7Yny}g{i5ubպuq3^gk e5.SMiͷb6UNp{ei$oT-{3TՏ:i'e��������C"6oN݆y S,u3i(Іr-Pjt8v'▵ӘgBF]6}[*WMV}nYKk8YKy6|Hh_mi(/^r*+_}uwį{7FƇo^hiz[r_Тz[KC|_ *uֹ5+jʋ%:Ti0��:ց|oKp������z/jвƫ"P]kո/d }QK'Yh[VʙY}o*\QBGj#fr>xzr2-ۦ_Z־>Exn,̡ܲN~`H Օf<lٳR3G\?]V6شX+:E{;8jgOQYb}RYWRrT_}mТQn[@O[_mtI{jJg-\ΥTvS-uyV]XGPF]FTFS ho};TnPq{Z{9:KXK6c)_i [f�������� unQQZ:@,'[2XO(Q+_0!w;y&`V1Z LѲKU/aqZ;LMjj'btqrwN)gz %|̾;C4w>SߔlZ}nue teSGYg\j1\*<_}il^#hf!rݶo2G4m{νdvm <)W(t|Q`{M0kd SUηqT5I2C[y`iЄG���������j? i8=>WyY75q{Ur&{k!w5hM(Tl,Y[<#5i>ܩ$ 3 jtհ,dQ)wo-ذoJ.IrB4SU=[۱s iͰA{߬F 8���������ڶVkH,-[`+G8UuvU]2zd{ܾ}SZ;0O%&Bh׹Ưe $YM]0RYk-s* �����t!{_]klho���h�{qzUߋvOʆե><ǵ1\ƊBxYN CJxTgV>O퀥&oa^ 1 Usq]-Su*7K&fmuڱ'r6sx53qz~Z~LrUk{Jb?WQprj�����_8L'V|W۞/ԱհSmqF2LI9dM_^D'e]`n=ï��~*e]>ES^}ӮͿàWہj{ِ ?4b@&Y7Mהv/P紶d}ໍ?>Q #Tڒ+C;TUe*׺n? IjNWvw.a?oCɫڸٙn^D PaeUbo WmLfwPvMع_~<@#5.|����\jT@?HfSU?UjWiz�quʃ{TFknFɔIiOQجs~q_7Z}ܽ:|Lʑ*w���Yy t=<T*~<Dp8uf=T`"^=,+t{S)؄quaKUld =^8^ DoДQì=x:Ћ5w|sǫN L(+Q9L _8ZG̗YC|Ymw$)*gm9XY"{v˴(QMuMfU|GHPUYzmܪT[78O3MEH_S?�sk#VLjT65���� 7ƅUS|=UUۥiZZC{߷G;jdDJʷҶEHZ}2eZ5\b/q:-%_`_:LWi*|lBoU;n���څwJ~\_� 4uiu;Yf(Նiv/H[<̫w7jɤ<gv9ԧX6Y@9CKT4{H핎 a_UE84hth: -Դ6jWh%7h)c%:rM0}c[cmjmzșmMΤrm|DyyZinXaF5lavրKjٛI8UZ[io9M*UF8>Eϥ`hSl)&�����A.siY]W̲wZmY9 K9#hi3VWtxWbTŭ�o�/6oNz<Th5)5Y`礪 YmνY*-}-��:6[�/ Z&ϽeZ|wQ6ޟ~pih>7 kCC~y*7qKDlg-X44}O!'74)gK,ӊƊB|{<;BKG9su0T֖kb۳5T~[a(ϽXpehk>/ \m=X6_^'u!vT/ Mʱl/?Trкf'!Tj-Ͻ51lr-l-=@%SBK^Ip.�� z-ٻWY?^s1i۽u7*O:����H&<Hהfz+2Umr&^5# g(dߜ񚵼FM}Tt *8 .QY*8{*5ZAgigRˌ8fo${o2eXpyVrV/hhQzMvVh|JʳZe7i#A>Qigelb Qc9G 9)k?GAY#4h;^;-?H}PC]u "4LSiP =W$_��ôi^i"{~.4-aY#-���2Mq}~ד2 bkOhKC?pg];(vz < z`~#t, :nFɔIWf:eu8Om5͛V5>Z:OICcۉuchkCQ`uo/|V텏JywX]V,�@W@Z9:_ءOQP7QҊ )J橹�����5<L鳅F=9{]P)mHc'{'zG:R%=ޝuLk;;RxM˝?fO7ǔFN$ $X4ޖg:Jnng .6'ק@KWTF곗&MU5{Z<D}3[bOj g,ֶef[Z`(��8PhSUi}Xuc#c*kwC7jkRͼ*E�����\z[w&z S88_' Oj;_Pc[7_]FjؙNATn/iRS`qgֱ:X$uMvmS=ql�AF ^5<_cGj@cX|{F: }r4ĝ��h�����֚WjyaLZizzA@Ko^Q' igzP`oJ v h;n IP rn۠DF+bY^=O?Kϡў v+mS_��4A������ilWWP sZj)5Ď8V>^ۀ XuNw6?8^Y+ {zk]vzq uzMZ_LQ3PI W2-z֪Yח x`5ւ6<Rj3 49u\Ru!5nvoun)��tC������k{-7A ;cG.Tgm[_y>t{X&^s%*߮*-t&]4yo(m&9*r[UP;{=sFH 8ƯJCKUv}YkT[f*���i�-������V3e2OmMjXYʿTfgk6H9>^+92mӠ;?;t_rx]פOT߱תm;:O%S+3wS,)m3kXx���Z������U>`z4fBPg3qp֮o2S-W%UM/!cOA5y/PLfze+BVZu zdM{Ɲ?@֪g֪M'SMsnaNOV)5܎kҰrr&+[|w %O9s{iu5ߝ��H7ݬ/A!w:-mٲEt璷qF38CC qQOHQ$B@-:1�LֱˤLk(U~M3G#IXasjkҶS5e s'֩rB=\=^c+dB9CsԸFT)WlS#ʽk6˳͖ +UyU*TtxU)WNضZSVI<о/|HRe,RvxjrM{k50R߭T)NnۮIPUUbJ~TVو^ʹ _Cs"W7_fI(I 5Nw:#(}jxV Chʩe*[m]'vu,+ՆL幹�� Mg7ovfժUo4H.HhDAM- {[*uc��d:r%P(kJByh*JphCT m=,  8J敇6ro -Qa]y6 + wCfcC͖6 ^?p)gh~hbJ%S&ƊB};[C{p 6!Tj-d߶)#JC>vʆjKx(l_hkŴPA?w) 0۰ѴK5iM|-��:te{>3f;Ci;v;zB:"b&@Z#+w3 ��k2"hzf ��p ^P~=}jMuHT[5!u�mK/3��EY\Z`Ò���]ZRJRK'RZ<)sRK'u���kŪvkoٓ4,��@We@';(m����@[5|,UP3i?ȼ{&*gRLbxc��еu�-)}R"ʒH"%,)R"ʒ2#���hTю꥚6)_yU͋5ٙIӴQ[+J��tm]z#tX+7^x}AT3921$f::z$\3jvҠwjW(j5Iuɾݙ6o$5ܱZ‚����O/*Ѣi[!jcT2",��@W3h$ YZ+OY75Q+<BGQO4 &#\F_y@}wdmNT[zN0Xk#UmuH^2W{n̵]vtyoZo^-}uٺ#to]{OiD7hHǭ\睊5I~ڵRnc31MQ_ކdxNilո}y]7������m'P74M4unqz ]^9Q7ʀK= f9s4G g1{`6:9|;|fL+iҜ :Wӡ3Ek41ϝW̉|_c3s�������Avl?EpGyd$z!"V*+_;ߔ3CPFBu yiJOL[< zw=Hrşz:?Z-<Dm) NU:_E/E_DՇg^mZ)Q=ǔS7 U8Ŵɾz unc-mϻ6cηi޵[ǻ2ujyuTmtެ%W6Q}|hn'#_'}ֶ=Di[ Qm+E>^N7Dz2DWoṞ;>]/J߶ڍoj Q21x-Dm)c1s^-]{El2"6LLo=Yn{m-Jqa׭}y򎽕mmA]ۘHףy������APwow6Qڿߤ5w^׉qRN5s^2qN3͑XϮ>':͜瞨O/_kSdq[9 VxeхGx{L,s^N8y0A׸%uiFs\~w*ܹz9\F&F=q/8z 难{nU7}_LOuծu^WSwzb:Z&-9jΨH4?+pk#ӎojmmﴸvnQܹC5z͞u50|;W+kgMǴ{}>[0m򴉹ב^c}^ߧQxB]c~ey$oXm·o oELwuOx{<qzP_i֤j1_3~bitg'ϼ^z;m9o琹l1~v>!aC8������ԡIf7=*fozptҸ2moC:a+Tulisשzk;_:\')Por>u\Gzܞ4\g;ylxl6T{!ɔHu/[WS_ kSZWr=~Ϲ]/k3jLe̵r31|&y^#>M6wNĩ:iZl:=6q4e)/9O2N3ZF [ɴ}ٱ;r [u3|ۤڤ}8mN{BxᗚG4!S"OL}⾖&{m V Y+yj%65y9}IOO7n^;M^kz;jV>d~]Ov o3k5}A{pޗ}<HuIdoϞO˴"|YO_sm^~w{n9KzouǬI|%}+QG w8W>4-�������.݃6Mxɾ\vۧ}Qi/nX=[/Sr;�4Bn7|)g\lm/Sc7qZigeA=U,+}yd_:qMv^K5I^l:S7pxik:\c9#ڱ v}X5ܾey:l3]uNT 2 ~vuؕ8z}=^[[@n,q)\:dڌ{m bnl\vLɶDRk/.t瓹]{#:6t!d&2'yekr,=3.dA;+! ollOfV2Lɵ?k%&:S2_&cY)2�K_kMWnww=qXtytѿ]ϡdo^up#GdNNVt^ �������C;֜ᗙ`N{(ɝo?.sϻBU=޳3z O0}r>pz}AaR][u^2ͭNqz v/_,U]>9҅ ޗ\󬻰nI]Ygza~zt'A[l$<Q-mZܺl֯v%|;u׃/{e{;e381 wn/�ߜ{Z;޿b58LM~~ߵzvKyߜךַ�������!Mrֈ̟ '/Rlg~r'(tgհ|V]za^t2O{[n{͍H+g1\g4:9/}>3iF]ʿ7O[H+(9P0柴Z_lZv=S3:yg&22=g_&%^rry{&zyL2Aoۏ~S.*[句&`2X{tm&kbWv)߼M:%H jah]O=t*NX霟{e>S>Mߣ埽j1&Xr}D%/;..{J7_cۿm~ϳgp b2lNoˋٞRJ$^DM_V~ |;/-_ <oHe3]w=G'в/9=k}D歔MrVɌɷ3cZN�YgN3 Yauf3 t<zж+Yy-^\>':  ?G1j]܇5UfHXl\Ng}<~V5*wnۼ̑sGΑ&?|N4=M잗]J={: O<rc{''skqw/59y{T&:&q_U';Y3=zUOێ.{ڸ(65}m2SsO '&YW(kınp z<NdΞk1.׵WvZ{s;mmu$WO_qM4.񾯝Zud^Ku=\s=Hn�������Ak%OerOϴ*N2 ?W]hCUuc1A:;pF�UL𙣚D0}™9:=՚W}r_Fx7։lI'Z'XH 3TchRU:0fXU㴮Ϯ}V-: /1q)cф庬jrz1ۚsX<|c]7kIY.'-a�1[JD%kYAni{:65V+ͷMzyrJ$^لɺT}>-0{:k`w5Uv/1=񭺴G;~gA5}$ucIs5r(k:sUDx[ImJ\™䵜W6ajx7rB.v;~iUQf~FTKξaῈHO~NIn?A=Qy1-$�������8=�SX.MQ:(i}blTs N�wzE%vƮݗ5I2tFҽgmЧ&4od[mB*}>UZz暛c;wpf|C]κ^+ެGlN}yN[Nl_+Ǫ͹'?|LS͈ ϝ3{ \;js_8oQl3͎[ktkɴb%-X)94EIeڿ>l״}^Vh~]+Uq5j1m5bZ<n*՚Kj޿-Iv@[޿{p^O|.7AO O۽}$}{?ǜg{zo e'Vs=iTckk>�������n4 e 8НKޓO>+á3ꫯv碥e=~IW A)$ϾҺOCtmx]=R?dHFjXgr -:1"9Ho;zn]>7uC}g;sx,3B}gY -*>hv}]ϓf]Yzz:yٺ0M87Q[&N^�������y ZRJR"ǖ1*M:8i6=]=#9}S"ʒښNИ'i3p8Z#L?y&tD%%ξMT#o_5-<K;M�������Z!OgM_Ɯgd_F';y%^yR{ٚ61:!nI-W|:OF+M?+~tJ�������p7hHX �������KhMTҡOԚx2#&:�������@у����������RgВRWD:)xeIW �������DPiܲe%^9JyEhHX- {[*ucDr:,\SڷOvL$S1: Yaڠ3B}gY ڍ7v琎8 2ĝF\-]{��ڋ�-RS @{@ YB}gSxmg;PжS{/O?1cƸsHGWرcݹhҵ�": @,w0umPߙvf3 ,]ug���������@=hsHG/bZi�^ڃ _^xKO_T}t7=h۪31:Yaڠ3B}g90h~UsHG&H8n8w.wpt�h/H%syզˇMnnzy: ots͛hР~OAǡ3KwnR=5B6,wf;h۩nժULs- �-�` @T꫐&zt?IOwj֜9NO �D$M*e�Nf3  @NpO=4gW^y;;Z��Zcnk6G58H{:jE}~Z׻�L՗G>]?Ϟh3 B}g!@AR jUj⿸+V s&iӺ7:3- >5VNxƝs{ q;cq/Pr[m8ъ ?B43wn|%k*SWvgKqf;jc!@ �8"}}7{3`O[nI| 7�IUHAu3_o|#=Xt0,p2 Y·�mDޯcbɦƧ#N^y$5<ЄSe6z11r/Q+m>R&aսGS' \>QZ)k/G5։LN艢ٺ1Z˔;QWVXw~{UOWZzO\R|oKq��@g[{)3N�Z7s;'_v��hSi]}+t\szkNz^ai5Zt.P]UڱuW74M4Aunᵗʉ) ��@дKonԽ4��,9|�� u�m^RFsu.4N̹\Gov:HZekӵ Gʌu{s XGFsL٥Zp YYsUY[n{8o9kA{i -ˑ<jc,u<RcWCy˷W6ajiNWlk>R'2ZJ?1I[~pwycrx_fWp]lI���������H=zЪN/͵Y޹J??DwZpoowۢ9)ͽP7a_5}^ǭߛ_Ye9/[WEyg'^j>NQ]P1[^34e[_'qJ;~˭s*4g3)Sbyt];{;e_3rO(s~Ys~vOn;Ѻ'\{YBOqֱe[9Vyi̋H���������У'׷OҮzpttB8nx=́=ƞ]cCӓY噌ϡa V/oF/᲏E|Aͱrn LҚgkCfߢq};$R"&J ,]5s z\{̽P ^S ~r͓{_xy'h[A |:kz;qkOs>|,fCV=Ny+���M{3����:.݃6^PyrgTt4.+KYQ>ՙe'}t٦lPO˿ovކqM,\v"I)oYd<ky  cWj߾uY; Ee\vy'\PL~ԚxMvuat =9Y)L_}Fkt.?6udol+&d4fv`9jS+@rݽ9q[]D絔����t]fbw>;l����R!Oc?ٷw:}M;{ä>ndʽlzxV;s'۩xx;^/sRksi8u)@Ďgum?.h9b:K?}eϻLony����В:Xt����H3 q:Ge0o;6aL~ϓ>̤;NRT8]ldf)PO&6SJ}ks>'+\̺unRJ$^^#N~lܝ73I+ZkJu@ڤzd)|ͳw+5%.^Ǜ%P���좣t}ڼo:Ľc.A&۽I{ѩ{)mo]_wXohOc����уrLsOO^>';uRẼP*=?<IUQ^:֟>d^K]̉ \7*]ճ~v%={ՉZ5kU2IԳ֟}k����кooۍza~]}�@qQSX饇vhYZh>4\7{c]ޤ'>.xN�����Ѓ֤ƪb={mz^q:gO\tׅvONlYy׃_htܙH;yI}잰;=aOߵqgqĦ4vETMRN_DRr=W˴o[`s:t85;R"&LmX-[~]WiUZu$=k]kg O|Ոuk:Z_sTEܽ~ֱ,32vfym3 ���@suZ/tbo8q]~7+>'p ����OUI{Q:*5{٧?wC&;o/hjkĵ|v O۽a͟#U9q^ƹaF՜dYǹ?7zVC}wh-=s5ytw,jwnڝ+b׵ҷ&IwXeFgǪ´{}ک?S[nXm���@WuqҞ&`}MO.Qclp{bv֯tͲ>{rX\����[(ͻmٲEtO+p琎y]}\4j�^ޖJ?ȝ@JTߝ\usG?#rwuMȟKfACYcWm'uz#6Ywb;/-;w%vd{oVdJޱK~<@˶3;?y#L}Sי,ws1atѴ*����N|X7<C63d:Νsg⢯Ͼpcׯ)g_7*P^с ����]Ϡ%ҔHM����tagztQ`#4 YVr3qv{IvA9=nop>;I6����4GtRK'u\���Е|ڡ+㌹ZNw|Uzۺen=̱m3D Oxe le]zط����!q(<t���������F{ /&:I���������84A ����������)3hI4%,c���������R[(#5[lݹkھ};tԯ_?wy\4j�^ޖJ?ȝ@JԬۥ'˞<Tuq=n:&aO%3\�@&mowLp_x/6Su栾3 stc~U �� "}}7{3`O#�}g<|#L@6,wf;hۉ�-��@@أ[ګNO#z7"_G~_Zz7�I>xoѧcә�mf!YB}w>h#жZ��΁�m[|yCu0F<Oyu?�7꫐&zt?IOw]s8=9Gn.� 4;9f8,wC6�m;��&ooҍ wiM;XB/8�+iO h syզˇΰf/^.E6oޢA`3KwnR=5B6,wf;hۉ�-��@@6Y_Nܼ(@Eu_T}t}n.MB}g;s6k;Pߙ|F*���Hu9/9L�,F3=b}dZ\y^V 77Fw-w�����BZ���tzжT51^ZzC 7kBEWk5oJNЃiǼ ܬLto^{_l0'-G W,\;wUu׮w?ՙ 0 WY̒I48x}ΉnNDڈt_E����m;χ}Қ8`S 肧J?W04r`Գo,/`޷N#h>v,Z/TV�t6{Sk_t.h#жZ��΁�m{}<է-Ә~&hk$`-h]f3K&^_s镥n: _��}~/>ʞ>l]tO*9h#жZ��΁�mC vhC(Xh B}gLyuđ_ӷDuLww ��H7om_O9Wv=ݙHUT���b[sY=J3͋K4h  Mܲ΋kOgwN+nîV-k��#|s;8kx �N;#/N�-���R^Ӣ+ȑVwt8ˬ4et{=?շ)9KuZ{z[?Ӻr5��C4ҝw?ܝ��{Ï"h:R'��@z~Kzg}`0h :9qcN? qH)86Pߙ%?ӝ3j37L"��/ 9Cy0qC��tA?UZZ7|R|_{{��������8�/~ar)޽>C[zׯVVVsN(++;c/oh/����D;ȝ9hz뺛`? 7[7Gry�@#@ ��L/ &}o!aO[YfzvaҥKݥ����ta:.;�!�9���`ǎgٳzw}W'N{Ú3<y裏#{՚^@@7t=ݯ_?w-����,?w=6K��t>hqP_<JnN|z��:{??g{Ěް2?'*/??L����b}C8Bw}wo}ͷި?E}t}d͟.oS�oo]nM7Yգ588PˑeoqiK^7z 59� kܯ2r3!��\sf̘:JW^yo=e ͚5k=o֬Yo~SI'dO1ކꫯG 5^x޺u/_nO'S7= ����JnO wԽwO_�ҽ=Z+}<7{t%{kd\?cߧV:{^v}hMtV6bIͷHߏW6Үn 67[y.ZUo1_;O�@ @L@~Q1YG�� ^yfXccժUvZn:;o׮]Q^}=hO޽;MMMI5C0���@gs꾧IoدݻoTҿ{Gi-uۍּQ>:^6~N}dp>׿=7꿭O8Hj;/'w^l�-oշ+?Fo>׫[Ú%fa23D [lʙ?_UW_=!\$os=/*ǐ�n9眣SO=<K5a;;ӟgiذaC_o5 #G?Yz#,+k-{WG ����Eod^306(Q2nwxC{iu|~?ܝj#wb; 7 >c'oceno^u-|\�@ @{.xVPGwO&8{-ӟ}B'WƏoOgdZ~uT0;vD9s/={~`ۦI.{Oڦ}{˝wyv9��ҝ%kz˚Y3e|M{W_}r����@bgAtyYQυMZ:ڝlPþ㶝Lp/oϹ8Y�Hoh3;c֙0jλiMM=o|-.k1`?'>}=m]pڹs="��5?<:sg^tE:u~M֖����>Lw} 㤆).y>m6CCHehlX [Oo]գ5 >(eK8\F{=?c[96�@!@!3ם hz2Y/ �������E_iϗ8ϙ=lgzҠc_yϐuO9.QS/ۻcO?o8b;p{]mo9fiڧkbyZgv]��JŝNK[lu}wqdz}8~y…jSvYy.sܹ3r ul<6=k +>ih$* 8nܕ*+[°�NkĈO_'fA6U ^}Um޼Y >#ɱGO/ufo[s6НKO?s?i󦽧z[>j>7 uC}gLLwΨ[tPU��pᥝ2᳢1gqs;c-]WQ= ;l=Rn% VVVτ=��$͏JKKgҚ 6666AZc׮]QMYo|N{������� 2uMꣂkmPQQaTٳ;v9aD�3:ϱ,N{A{Ykv^,9k,555iz4|pl~~.B}ߴ3m?Kly4������C6C A ylNϯmJO{ԋ۷"7��Aog{њ{L$ӳA{9{=k=g c������< ܹe*M{<5V3?a L?Ԟ>20x@CO>]Cڷy^_}��fƌS3ϴ.'a~a;V]wc._9Ҟ6.=f�����Σ[<89;-Y�= +4~x7��$ iկ_?wmݹt0 _~Gz5ݮssP8wfɴhWSOeO�ߗT==~ⷕ?{39-*'۷Ogi:L �����ľH~1O?oO�q̈h =h3D&p{-YZ��,zzATmGB}gL?~[9^Y֭�u?`Ow6HUh3 Ξ=ǝs'?у>`?��ZZڮ]f3K իs�� A:}hۉ�-��Hoh=hJh>v,\;wUu׮w?W_-ykxРa꛺wfɤqY{>D7s"@A�FCD#`YB}gSxmg;PߝD��7L 8묳osigOi>ۥжUct;PߙԵA}g^ۙ,7:tD<l۶M};���������P!@ ����������)B���@Z]uYB}gSw栮3 Yo���������!@4xp.x>C7mۧzuvvѹkv}5u ��������EP ⚀]<=zЯ~BW_qs{�CSN��������p�ʝQf'3mM ss;/xizzh�ӿ-/u ͤz;wyvM��������#@{L vj zK};}[~Gӟd}zW= |ow0;(%#Q'?>vt}; ��������`!@{wz=ם=oWzv-[o]ǥ ?pyAՂ544w^f .ғO]w:Əo$^xoIeϟ={~_gϣ强0AS3oԥSIT57o\=%s.ʍW6:x̹k׮.cۏI`\lٞ8c��������Gmb(6C&@w-�]<&XiO}~-dWO o7p-^{mui)''Go4yO?.b7'>?SvC  |ϴn˙2e].j6S3oԥنW$#;];ohcsL1Qs1**Hk\Sm1\ BziwܩE%d]_[~ާi&p/hС3n;ϔkW�YgebDڿrS0eL|#:,]4\L{Ϗ<soß 3IKeī>H7xc|Ou1+kim˟H}9tuy}gDڌ?lC,L{-㿮?_eY'چf<}c~轶=ēmb_Lx:u5\?򖵶N[;QY;HL^o۟}5ZۈFITl3mxq~vo%z&_MT-}jlm^-{"@{4~>n\gM7 /oQXXhL೭፿Mm0Ǧ{Y}QϞ=Lpc nzL@)7hݻhǎTrb{` XS\\ ^ x66-2d￯~w@޽{mC!��d[oL>y^bN8{ٺuT]]mVnݺ,u17$3m{fͱǞèQ</?[JTGpY'裏ۘզn{f 4ˏ'>y1e3y L״,/**'|8̶MAL{xFsۺɏ'Q0{oDyUmذ~M's,?sM5o&z5ۺNϖF[,K6f;&7 wIipK봥;0#Gqd~ğaÆ%2OGv'j#$*k^߾9\2ys%*ۖn0ۋ}]_?սk_IQi7`g&fn^ \፽ޜm!g<~7]ao c$:۷;H5f~?x'i d��tEݻwM7ݤO?ݞի9{#|N_tEIj>x ;il{ub=z}&6&lMs = u#96s_&IT_-Ձ ։wL<xp 0@ ^�^I'dijjZڧlǜd>۳NzMMǣ}^Zv}3?әk=<{yuSam^߆מ>s??&6 sPqm2;}ӓCi:9VKm-k8y暶s8gіn|FԲeܜ1^f|'Z6bT>:f] ô's5X2nORY3l}'z2y] dcMį.A*xP3?ik+oxc@|@c[zv zχLx_[c{汗p~ٶ{rŊ'6C&>϶=�Ldn}?榁Ov"縹ig%an_o{>͉fagzoxd*}%[ff%׿uw.^lK4ue˖wU 3A>k0m g^`vd۳lڅ!?ٟiOP+c$6Z'~Kaӫ2z=uwG|vuX#3r ޳-Rm״E& cz}}ld^JvO*U{.AxPUR/x̗<5A/PKCin rKLp,^ К[֘;~vkm۫=F<mo{F۟I ��"̯WX}"/_":0&Md8.Gq17-<Ɓs꒭09Rp4> "S7fK%~>oý w)L4Z{=6Lm֬Y-mM`p?Z2#yY5^z2!?M+6ME>Y-Q~ݬ]6{kr>]#?M֬g5bdnOil[;+#@LpdտOX<]ҵMG<o1 g(x?<̳GAL4M1h64=(pka/mh^Vdnˇ 7ϓMhok0c!gx��oq-sg̘1|"fܘYt9|kqc175B"_{֑l}onҴtȬcڑakܨOtS rܐ54̺榯YՖbn&8^v>;k={ol:ɾ.ɼ6KKK ҬkaLlL/d)-ݜ׶u~ƫ'/ggǬ6m wUmngWɼ.[nk}m`~vZk~&xL {^l3Ӄmj}&$^tehPg Ym7/@hmL3b7,g`�Iyg?ϛgܚ#Gl/s]xQL�[nկku׬gƴ/9!Vˁ5Ogc��ZM8Qwƌŷ–17]+**ic5 0̴U778]ܰ?T72ꫵ:wCuL27lMx=Lݛ6ݜ5?Llo[17ShH4.{xkm]'[kOӖL8هf] -}%^ J榾ڶZL~&m9lqu;uZ{?Sߦǵi_gN|W3;3!YXͣ(Zɟ)}ZkO]-{ iWzS_P;)ww߷uEUV$꙯y^R7eL ?k2?h?Ԟ6{yLsAMӼ;y@s֭vpۆF132e7G[fwL̯ӧO7LO?ꀆ86a3,f5ۤzJ_@5ZqxL[nېWOڗ ; 7`Oms#Zm q �@box7w^|E{ޔ۴iAs /[Z'c3377滢mh07zNLoYs ^J3WKu`Ļ:̍&sʴô 0=7>h{7٧ Κ3Q,ix-7gX- z40mgM0m$Yf~ޮaͱLf^K=5RZSY'VqvX= 0?dіNTH5ff8u|'Z6Rَ62?#׾X-mk}'z2N(m޼HncO?DiB?B?OB}iԲy憬/?i[T>D"u|z뭷|oKo;C}Q{޽{CSN [󫫫ʛdʙ։'vf>m'bَw>m֣G(dunFR}%5UW]ڹsgf=ae-ko[\kǑ)K^}{O״Ǭo3Z:L{_5o:6xu;.ݾY&y{I$QhO=yیM&_:yKmDe1em0yC&_o/y,5]IFiuY'nvL{bZnxZ*l}KۦLK�*]u3qcicshm۶ٿ,2]Y=nܕy̯.\U{Y}ׯ;~\z Lj.|6~t}n&�����Ht�:-Z3L+5d ܚNss� |T QnC q+g{kX{<k"bUBH-ݕbm]%E HX2V@A|ΜL&nHxg3{Ό|_������#ox/ѵgy�������� ЯYHazçZL]��������A{` Z��zv޼yy�����VA ����������g8*h�T�ЛFmZZ먠PA ����iE-����������h��������� Ah��������� Ahc.];Kl-����������ТOx75iRl9s}ᇺi*//���������` ?DOPMSkסּDޤA&ߖ*- P8ߖwq~mV9m땔Ngf}EsݟᅫޯT~m9Dc!��������g6ny?M~i?T_ҞF/YW_-6lBz)on=cdɏ|ytYظxt}E*,,w-]Z*𭪪OSw;K,qۼ {׶͍o~ڵ{%z׼WͶmۦwy{%x:V6[G~lF7pi=/Z7��������g&^p5W?:>TE+uy07 ,׵)0zVZ̯JKm{+6VSڦ\ϨQsnbk[.r7\jq]o-ԅ^9saի5"!ʕ/4wÆ Zv,&{nAk۰m α>q|M75}t;x-+vav[ոvg%��_����� ]bl@ ݂,�@vk:97) \h;׮z]y啭*_UXUggK ,@ nl[ J_¹M`mk_ӵ^gCH;άs`i*/6p7mu:Μy[`qmZk8Xm3fp_{C\{m/7}q{_na=xkI_Wݟ]'w^=z[k6ҍfm׷;ջ��ش)2?z3������h{ܑu[矿P\v7w`̂E-`5UOӂ=?x'?nVX-rڪu*ׂ>ȑ#_`쇙t>wz'۪-bնv, ^kWA+F ƻr饗wӪlkٓ~mݶ*m�������E@,3UJ{T~۵y7hг5 ,7n7'~{;}3E*ٺCP l[v,Amljʠ/~ -J wk &7EߞczN/uɒ1UcdZZkYzhʔ)1ǔ+wmxX'%%_w6>kjl%%n/>:2|��������m whÅu'6qU'|ڳg>{p{U [YP7X@lAqW}X,_nVjob^ em[N9Ȫkc ۃ,lMe[xkכ+[XX+x��������m/q4/.oVמ,�2vUq`UFW{vGoTZ =Iӱ8}^}ufYi>5kگZuc~rzG>{3<X^Ft>ܟMXق` :g��������0Т,dV#gՆ7v22q[U07'b׮]>zc\R۶U�UMw[IhK3Qmc޸��������@G@ kuf]s֪-L&ﵨb `M718Cɕ+_}Vi3m=؏m.]ZܜY�mU6oҥ18>k3tMG;]o|g|��������hwWUMumw]DV m|N ]M7FDQQ7]իc %-+vǙ@-nf:1zZ :öcχ?݆mӪ[-Ziƕ>sq[Wmuqv6Y;,\]'/G{tf��������0p%>iΝ8+tE}}.RJ��$ﱿ kM^M�����3߂���������!���������!���������!���������!���������I ;}Ν;5q◽W5l0o��)\p kM^M�����3߂���������!���������3@ .��=#{������]p1y]JJN&7K}���������U> O7{s��������-~5b<:zSo.з7U'V%qzVu*_jnq>Coi3muC[޷ ;v:xS:m]D^JyڲeFm;{tv<Nź/V<<^]hSGxֱ''�������H֣l^;7G?q+@{ռy,4YDvջceeU0’G忺ؔo|[)7^Wc3fot(f۝:otՙ3??iM?^~Pc?֜9wys[`dYqvt\xySRޟ^xa.~hɒys[{=s\'[luֳnmf6m{5W< /Ԇ 뛎˦Xx__nd}_hgiv�������ӉXWmսwNu3Gu ~0]|] *eCۋ?qٹWq֗YXhc—3oӶm;,@/w٣y͆ǔ3W_}}pj*m˖7l>k՚2e9r<[;F , ())ѵ^9mrí{}jѢEB>^:suΰ_`f65[4;_;o;=^B!8px}'?v\}nmmד<ݹ缳e䓥nP}5xs[?Kgwsg?�������p:ujxCsuޜB¹M[u B L0|?[a~`Xj`M#FTvG}zͦXvqCZ;F+ls/~YqysÜ^{)|eeeys",o~VvXHe~f,�O"IV[,6S3ۏ|#:�֖F`K.DȮ]<^U*XlC ?)VG������@G@ho҅]M7PA~j\J`Ŗ_eVmk=Vz,ښko{@x@ɯꪫGc͛7{ٳE8ezmk;wntt͖ǂ"{/ -OTb۲߶|bۿmҿ{+@kQ]Vҝ}uu gں`bf;Gu6wu|]w[-<ZWumU4k'k/;wW�������h{@y+j_\ج  $Mtcz*Sm IytE[j,ֳ0$?BcS$9s776 ,)V{r ,ǎaw*-1!ώJ~.e㭰, ,^~jk4ZUU[}]u':Y(_'D+`O'=mv5=y;5uzUڹ[֮�������7~q?k>loOƍo Ql6?ڜ9s܀&{d䏮&+,@n=G\`/*,\6OcYcgw}+WtW;ߎ-0;VfAIVVwOj[ ˭jЂ,p󻡶* qɂX{+5om{&6_+43שkuN̿NVYo?~[}=y=wSn}vVGɯN]�'y0'nxֵŻώg7moǪv̹E7�������O^ty罹U�Z/68,,Y`.w�^וUY֟vkXbՀB v{J2, q휣+-zmauwj-򯻵Ct~ ߂Ktw>k`[;mY8ͭ$;`OD#vI bN]\ڬ; Nǩ䷧USeg}ٶM-1k )x-:sͣٺ[.h}ͭv �������"n^ߚՈG٨տޮ?uVOw ]źehV]T lwyǛӳ,|gvQl,Mb ,{O;RgY[(=^gk gͻ׽XW֥U)[ ,kX8[^ c_1XPVH1]ƶ |mNN]3:YiCQgfUUwt^N3fDV'yGz'\54�������n~IG<jΩp]VygaE[/~V6f`}7xJ8WUۏB cH?zj=FIVDW4d>ڪ K: ͭ U-}vt R,P V'֮_NN;/^rY KJJ`-K 5=%V٣_hV|m:ud;q3hm~tiun36l6:-EO<?Ϟ5A{_R;>R{�������p;<կE{%Ƙ=m۶-{1wuzᅕawѣw_yn!|M6ϖ:|{7-۾^p? wqik{mٴdɏO6ubmNϟ#z`˛[,N<zY}<;詳mFoÞۼv#-)z߉NCpeS{l㲩Etv:Z7x?vf[6Ek{YGSG<V{E'Mީ;~뭷ﶾ?#������zF_[PC}Ν;5q◽Wݪ .VicwojQv}*q*ݻVZZ"6{7c�����@ c�+Yֺn_^[7Kp�������%�pYE׮ꕱV=y]7n;+�������",??_)=nW{d �������b 3@p Z��г.Y����������������p���������� tq|ץ^Ç{s��@I+8�����D����������p#���������!���������!ŀojҤtx4}\6��������}W.];Kǎ#��������@A@M~J[MvD˵cG6lX /Л{YX4i}E_m3��������7_ [L7Ng:^*-[r,{k��������`#EYQ5L6i,KlTxӟTÇӴ^ˢutn} Vv۷ǽhթW_}W��������E@.nUT :vXmٲ[Cu9д}HFooĈz~׻6oɒ;igyZÆ sn,V|5:H|5nxݫoα6��������h{O~3j={hʔ)K9r+A"ԷaqΜ9q߷zjoNt۶m/ }wuO*Mmy~wՙz?%;2yd7$Vf���������m7}sfgm<ڹW`n޼{cn6o`UmZuh0i&_JJF͉7nnVU6Nlwy[/okVZ׿~Ć6��������h{kshֻ:rSobՑ66 GzQ7OqH,pHD3fsýW-Yupo c׺+j.i3��������zR'Oxs?l.i-ȳ@' XաU6;ok^XE0m��������0?Du~I`ѢEn臆 -ܳMyoNl]2jӮwco׮] Bꪫ9E�������� |=̺47_>4Z~͑|˖-ݝ1cꕔr7sZlW|MUU7ц 97ydwqSj]X9y=ƚݲe*r nWvL6��������hwWU4Ϻ9`g-3gok#uԨiJZv7 n +/B][#G [enp5?أsYI6foMMMӱw]lh3��������-)I;wĉ_^+u饗c�=WaҼ]ﶉޫɎ������g*3�-��Z������tc����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HtϪ*Ҧiη%����������@@#^{}Y '~ɝ����������TۢK[���������hnJo����������F@MounPսj17rk���������G@MtP<tXu4A?:���������@W{ϟwں>~O����������tݔgx����������}IaOڹs&Nٰm=PY{s'65k]nET__K/TÇ��=WaҼ]ﶉޫɎ������g*n1fmYS6o5bz?nf;+Ӊ�D@/m_?F������ 8& d-5~(US[fp���������@A@,9pat/yK��������� ����������������������������������������������������������������������������������������������������gcǎ;ҥK9�pz�������gZ o&MJז-[9���������C@M(9Yޚ_4/ ({ܛ{(l6/Zz78M~4^|b!z/3m6VSo|g}�������nɭ_ [M2/ԗówQCC~geVAYȗinԕW^=}=/U)w7-S 8Ǎ+r9z3F5}^/Zi[/R\smֶ;u3g<0۾/oml^}Mݻwͻ!m<˵cG]}ڴkW{]z'�������!V5ߺ沋5b܁W_Ujj׻vr;ï^s`Y0T V5StJe`=ϿUeFWq~il/vsO. ~ oƌ}ƌʕ/hɒ)??ߝ7l0-[V>߰ax:׻ao 7ܠozjM2EEEEm-۷k۶mO~-co;smnH{Qon|Oc痒kgxsӟ[�������h{_~M&ՌL <Yu袋.r+P-ZԢ̪ggѼykZJς Vn;7 i+cп~߸UwGC}gy ?;; L f*O<O =- l5}-ؽK9}XPj֕nt{ `ڧ]+!{ѽ;�������00zx*رc;tּyZTN< 4ԁ ZYX+t-X}^^BB<NJgC>,4;>r fԨQKPτ}Fmҥ[.X/~eu|]wÎ-[oNjժ%> `I%�������F@΄YwoaZȠ˂ i,0$zX>ialgϺL/g3GZ^[n]3[jz9m1E-J={m ‚{[~5xsYj][֭{݊Ug `�������)ճX^͂ Q[?-^oi kVxmA|rKW$>|7YpO _eCp|U�*E-ZaiC㥥O>7V%{9nWVa̦X?~+zV�jǰcG]S7&s=V/}bUӱO�������@G@ۃΔY<L G�es ?Bo|݊;?ܱiɒyk4* mmk!זGׂe Y5]s> @կl~__[lկ~dPRR~&_xae*nnZ5-,'{~C`r͙3ݟUC\`OY��������h{șR=k,LPZ(~ [Fmosƌc,@WӖ[fAZ3:le6F೻j϶*<v}-UWG^V뇔h 0-3*sg`ը3l!wgMswuvVmrwOھ۸v�������m9Sg qɖGd?z.c]̺Z۾q][׫״0̂,VO38=_>U_f+B{wÆ (5Z%ݣ~>qYNUUUޜHŭVƺ?v6ӭm+t 3JV{}P:ڧ?fK,׾55�������``#~l%)z*آYd|]޻lY|Ԩ5uQ~jߥ]~,lٸwVNZe۲[Ǫ&o7 ź쾨ޢc"֖؂BD`?n?i:0=hS y+˗// ,۪ 1c}1;&ۖctl?~ek>U Ec۴>}sTQQCp@?co^:z.S7 ������}[R=vܩBWK/U�ςG b_j6?6*9|Kv~[iii뮋wDUߔclT̓H+ݛ%Ttjƭsx3,V,[u+ٛ �����**hbժPp{ꩧܮ,9PCҎUn^]kb/ތh q~m$�����7hlRٺA"-Z[Ⱥ~玺Cx4XI9ʹ>ekjtț������Z�$|晧r/Ffv-2.�Vǫͅ*5[zJ5E5$%/SŶviFEYǙm9!Ü)wU=նW&j5GU W5amo&|}vmUegjOg*Zط������E@ ���M*ّ›ҕzmU{4+c5RUmUB/YU|s2[mHSGgjٶHՙ _^z7 RNW>w PkcsTt �����9���@8>OYi˴,LR]dOVܚ)ZT7>+vcbJWVƢWȩYǙL9)[-v5<?W+CJnֽ{,ζ缫V FO/Fc{T>3ř_^NMG����� n���@O][܀U?nɖvf;#b[JI)wrIƏ'T%]wjRTyVϊ}ζ(U,q}puSiMyRXfF5t������h��PTVεxD9SꚦZC egLA!^r&eiU0RYc;8v0'9K 7kbMlqu!o!������:���U>jWkeIJJf;s>o%SI~_PVhe5ڦ������!��� -zL/EV9*Ra[y{/)JyQVpH/8YJU)yZz?4Z5hū������ąJyynq>CoΙw1y]JJ4іߖ-[4iR|Mo�U>[<r8KVs֔vs -W5j8bp<T [yo\innvTxoxoj _<Vwsٓ匿c����� EtR74?"@7^ݻW|p;{k�vTt8+[Y*S/R-RUpm<׵J { 4!{Vq\ɚ;[/iy,JM) ɟyϰњ`B)Y*YQrUc9BegH������m8rS}*=P4k?+ -8wyG۶m̙ /<VEjդǃd�XY]"},Ŏ*S}kX5nShcF=yW2jִ UGrԋrT\sRqگY:m|P-uW]OU*S&g(ߞǬbUn*Qv7K�����8vRӖA?:}@b544?}F[l*Θ1cg̹˛ʦf꫽�(zh֓7]I:u?Ó§*-+䷶ʙr;TR'NxP2MYίN=S'ȱuO*+jE}/y /ʈF{v?_q]{�����pTNHkH?rx7 oꫯ*55U6Ιk.g]Zo߾n+u�-^?4 XJ;MU.lL^Xnm~hԨ5m+x&-ڪnl|@4۹.c<m{]CvMیu>ۉgII=:sSk��������pzÍal?G蜡C9`7<]t:S555fޤDz궗_ZɂqƫIwH\N7\˵cG;ɒ;i] mMnhvhBws!pvwױqF 8VWvK7EjU{c]nذ7pCqMmߍuWVm֦幹97ͻᄁ_xkgʔ)n JC]{تhj/kϿmw?(^{ `smZ{]CUqjylYYYMcjE8΁ʾg[��������Ӊn%M4|;UWkгy߽UW];v<Y Y͸qPk޽k[0*Ι3G)))nX۳}ڶp?. H-е +:@xڪ?=)rZ3fp7c1v.^d|=s{ ޲sK͢ƘP`nW^G~ q3 ^%۷?G$=�������%='~MOߨJ{xü<]y5{c?0) AWfůzB*}?]m[٧k04Fr/~ -M 7QAFW?ɭ6X;Z}f?Hk6ُ<*Ī�������XŬUZHw]_?7U4~@ɂZ\U4=zg6Z4X}wk{Y<. 6nx;}t�x&7j'4rrr*dnw��������D@M®Ϸpֺ;.yg_ޡ}[s+/AS�4|9xmUV9|pUϰmZ( =P-0-ص?i`o!?jUr^>=Sع[weN}fޯl@g?>!Ə:��������IݴOunnlPڟ]ÍjGG9uol' gAy״Zl"Xpfڷ_lU'O> aڶ-BZ ؁ƯλZUP]{t:3pK[ܓ&YU5 b>/�������Ӊ]%7]'Zj0\_r$3]6,LZXO=x7> ,ڰa7,pn4?[zW�N,dݲe* .:??_KȭЍ~@0<?6NwX[ծ >K][`mmq},X}>gѾ[{YA�������vukl?k{}s5{㬬,oN3 ⵳[px}E-|?jڪV!_ jnɎ,Z>ΰЮC+ ܐ?{Ve.,aS[md۷ kvUZ5X eˊ6wuuۻq)خb_Vuű>Kr{3`vvV럃unauX0_sk�������#)I;wĉ_^+u饗X�c-1=WaҼ]ﶉޫ?#������zF_[�Wܺ&�������h�κM+eٺ�������LD@ �u63<p;2��������g*Z����������HZ����������HZ����������H35|p���������Ӆ��������������������������������������������������9L(u=}[ ����������ǟ(GhÅpnrڰmo-����������ysNMeUsϪ*[z;*j wyp>��*ݻVZZ"6{71�����^E@ ~kճ?k܈'65k]yxs�C@/m_?F������ 8p*h-v ���������� m7MK~=kw_���������nqdJu[4+tnP���������� mvÅM/QO4:go-����������g:^ǟf]s;N-����������aۺ-Ww+k���������G@Mlg<ԯxk����������@m7]yU;ƟS?o)����������4#���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���FU8CZ8eIv|ZoicXzԛ;\kfUԾj6o ���@@ ���tSh!߹9m9*鲏TEC?Xf2ӄC5:孅B>ܯ@/[{Lln't>pDmUj:)7p#p>%jCykG6wVغwuv,|l;s)}eH+������g[MS7Uz V8E8UJ_T=impIEg+L69^:21CG;?@ذ͹P+1`3)[|Rk}&OjwogXԼlTktI=Vnov)T }��@@ ���$Pe?~oYS}>P4r@ݜ;k[8|OֺG h'K%mi<{ $鹺^{s|nnkKc0YvTxӰ,GhaeR3޶ױôl^?[r*~>HY)a~Q˶Í^q`g)Ry𸊣~Q^mSn?睧Sɚa:x| CUfFD���z-����,% S}icERBa(]_Toeמ铆FŐ|`-HBv q,BJRq9z(u`o %LV<o纗Vu֭=K kcF1T㧝ʟGOǠo4^<•Γ)giKdL<6X# W5}C���Xh��DsXqPUc;.;&?67:tjdpIU5'q-scrhUf:Z,s=e8'扏4 olx*˶e7˷rU?r.r;6HIRϴ5>Qi` W8ǻv=qBk?^mŊQAMcF뵼m/YEkF$i=uJ u'<LړSX߲Jagv 8)p.KCR#gkmC}Ovidƹx;qigV*OxŦF^n99Ub `;[n}>,NЫ9k#'4w;>)CUdooL5;""gӸMk4fI<YbGq4~91Cw|ӟn{~DCTqT։:sm̧_nJyK#y x[ykOyv~ReP% ��ӄ���= 韪pkLSo>2Upgr:f?qoE^w�JV 7P)cp䨖]{TS>޼6 MW;eu6úS[ᓪnWZ})WQvE2oGg?xN_0 tO5ڏU놎=s]G\} 9ls\k1OZu {`aN~o- 22YKG~GV~YS@Ө5R~IQ >]~6F'YVƒ*U}wdIMVD'\u<g铚<HtrNGgO~{t?_9ټ=ORᯇ+^:"Ǽ-mT7*gӸص}yfDZ^C2^h|WVIʹ6p<B_iTkY)NeH݆M6uW<xJ5riW1}DA*xiחN*cOjUO:KY���Nk���H))[BR-[?8[S;>S6>Obux^Ǖ@v T[X^iχ [~;D c ७�DB Yc xb)e fkQ`?ۤ֞^[?t/$ҽkRXpQoONde?URCխ|'ӽ$*㴿s�Yh?CLg4qv4n:|J\^{o -t&r]k<bjDW,|pm}$ڶe2 ӺyN)?fm1IgpIUX<wGEf $ṋ< TRÚÚV꒡q>޾XwslޮI`�QFFם LE-\Xcsϭ{ rU֞{>ao(OF~|W:{ |&}C4X,?vmI$-YQq`x{?KKV}8)[NHi:y/wmlW7Y=tqկHs}]./:Weqx?̫oe-+��E@ ��� I{JuVs7'84Xeح'U;Iz'B֓+2d %_4BOGJc m 1{vU>pRGxm<Tw Su%׽_幦9hxifJ|/HͿ[lk~88m[2B)!n [0GHں>ҥ炟^+eڹ*}y:c:F%k]<]5t8,U<e\%U*f|s>αΰ #Q՜ɚ>7Tuذ3*oӮs#ʟqJ Vy<lz3ށy9F;=;2sUtwd~cS[Cs,Խ,ͿyX]{.{`w^=63'=jVYP⟝giMWr<IUzws nYM>x$S޷#P$0nK6UARl]1=<>&rKzlQ|pU-}u����h��>ʯj-'gE*q Ёs3 R=:봙*{ 7ҍo7Җ}a֢ɦ}V GʼgQU=V}UxCXt;=&)պPuFY9޶ t2ӣ0H?RHch&}O{|ʺ}H*|)Õh?[7IOв-9Sz 5蘪0,M.x^4ҫ=fXj]+fm^>t]>?PM=D閎nUq'c8mWXݩۿ7ҦS <8QnwsCkϒe/wi?5D R*]kc7@7-Fhڵ q\E 3RVnIKR֬T^;\h Cq|J9s_v^8=Zwpx9���@o!���ڽI*=EJ&=9ӗ tA3Iޫ<+dͿ#UI;oyuW:i?e'$xʺN?14129@(n)h#gQKQ|V촕;'ܶJwr5>ݎ)MtWzcYqJ|^jr^q[I,zgZJq,?A1-GU)};sV8Imi:b $Q;g39Sf Vf\t/9`7oƟ)qõ``M^yRgxYJϼjvG-������wK*o9Zt8#GEZwêE5&U Sj?$G-KY204RyMhg?RhՠCg)}gʽ39SpSwOU 9G*F{݀;jƝ%x+e=R@E楎rΓuyҙZU:۹Um:٭.qcJV՜9*ۭ+ho|Հ"ՋboT'gj5#Th~Sz3|1lhZU -ҜHu쐣v=Ig}?U鬳6yw+jhרڗjY*Cu:wƤTxzs7GwfxC:s/}m#*=_HpaʺՎ;K>QC������.鍧8tw,ԖNvHu.LvVѼsȶ-=vߪ҆)S}1<BR̓ nsl3ICp`c8NwqQ.u^N9KwysyV >{T-<}hٜnٷ+aq7L/Bͻzw.K?Avu2Iӆ*520eKms`"?#Qmt[oe).?y8pT~_sL.+hyP0?Lag8NF&{fPtR>Au|JO>:v2pOŃZTNg8u*ogN8Ňy{$._<,){XuMF<ܨkӜw컝sXօx x]wE1:wH6)g+ >ڦjpZ))d^}"2ʶU'{ ���Z���T7ft2I\a;wTac& =Z}LÆزuAInRg c}Vd_YGWwq=cǰޓJK I9kqlXQAh6\r [5B#"<:XN*}\ Y# S-|iRQgK,YG}׏*ia̽.Y9#sb]r9-xjCMV4{Xs#2eZ̯t5UhγOh9۝]ֆcZhXEٍ^9q?voŬX{ȎιZ~{ƵLD|_DM^;aߙJD}{X54ǹom;:/r/UX'Us՞c7UsnyJ~I;ߝ4PJJ֟ ;Rg s7E¿Mca-dgf o}mO|N떟!G6ĽŃ\Ie6}د: UyjYȫBM4;?g/{1`���@"���8HXS^P1sU .ORqU|DXz`4u1WU$IYyNn'ώQYv%_7T7RVF7}'b\պ]I5N$>~~{[%ӽ|n`?L[l\CpQu s77hx2*?|5Do~HH2¹_{cMN{-''knY*_sWu_窆jHS}uR>q|m ܷiI*X2Do;TO:zh Uݰ C}oqH;}p4RtE0T gg] WE+kYʾw#4$\}|Sq8m^|'DoQ{P#Fxm$na=y:?5}7XuõgM����{'ܹS'~{��D*v~[iiO(""s1�׸cL;QԜT ���o "��ZߙwJ_ _`mtٶm'q{3UWW^9{lt{pYWƦ叕_1ƫ`m<ǎ)VW-CVYۑ'.yґ#}O&Hٳg��տW1�����'TX`SuY Rup����**h�� ZߙXA �8 NW*{3$Y6iv`͟9\#-:���*h�����kPez@]';p���@����������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@���������@$>iΝ8+��&{ڽmy.mW}S8FV^=�}3f��#}oA���B@#Z����蜾 8���������!���������!���������!���������!���������!���������!���������!���������!���������!���������!���'.eۼ]P1#} �����>���AkYHP86Cܙ[9Q795G'�����'���=ሴ,K#mBmRތ>%xcֽZ眼8j&)))0-DW;Br[nkFE}gjYEew<ݩ<wվMH3"O׿Kيv>Cmj-g^]NDZFv$���3Z���T̑nRn66Hpd:X'N2{+e mS?BRkksmZ͌-'-{֖bm:O)\_ʭeδu7]Bdjsk"otX-/sB+Ua{Ԫfs5m} wOd,-W7��� ���@7zQRJ)m5[9Izr<yJifoǶy:RtkkT*ܜn{VhՑkAt5 �H" Ȕ8~(Zyk[1 j͊yO��/ ���z.b'i=qvijVEu-OʵlsReuG_!}Io=G-[VuphmdU'V<Lt7u{5;':lMsN8E<3Cjp6^X{Woh{|k#}j9G׽~mKcTZrm7wj,[aAN9ߪ[ggӟ]fsu_Y6OR5{0*Tby ~]d[*G׶Ϫfm$vCb T- K/TܺJ _=EylW���h��hq'IYqV6ns/-|^BBvE41RRNn)kR=qbT:W9pfuwy?9nc,g]skov=w9 OMbsӤlswIK6R9: W8y;rK*6tګYyY3pˣ9eNWE6V9F^mf~ŹVq׵9ΆT>W-*K6Wej*otz8W^:-<v"K[lҪ"#ۊ' QL)"oV,ʔ&G峂xv_jFkSWMo+ۭX}6-o͢b^tN|t)F[t<6hqk^*-;y[ݳF;ǼϚEW_ֺ}8YiVhY=q*7wT)ʻ뺦N���2Z���;x!ehwFRϥ'"c{Wn7бIRe}`\[u7I -|u$;ʞ x9]#+e%{F7#aeSػ[xIq;6[#MZ;g:CJV:yH-jbםli@v<sͧ8Ph÷¨y|i}9mE"A{ThʼqVKjV:iι/m㷃,V; h-;waF2i/6۪5*n뜊4C ׭*)z*Zst0|T4rq:jbR-ʊ-TI~\Vm*Sǿu1BřJ V:["𪼷DF +͍UAT,>_jn/1z][E>g4n[4ۧŒBd@䞋o{m+o^,^M;ây?KN˹/6"g;;ߎ>тc[kzW0pv|:orjg>~ &��@F@ ���$PfiYHJy@zr4rpd~ERӑ`4{a 3y#?TVyoڳ%#([x/#T<^s, 7d)ȹؤHO9RّIb. gv 6 "@x^~ᬟ~s~Nk^n9ǻ y,qtf;צ;ZYxX;|;4f; dvdk e-q׵5봨}X9H|fݪbvU9f\C+(jdA*Mt];MW.ÌE-TI 2"*oTuEskS;TZ_P5mUA!'Fmnϔks9sl*Ep.皻qiۿl_ɝ[jq^98zwHX\ 3QZeV?P~��@_C@ ���trt̝ѾCVժue:^m0ZTzT<*pk8&DUYyȺ,r\9sx8-xL:;dߡWbLݤt25kbuiYw_Է(Սhx=QYJW^c:ew-]S҂su 4?'+Q5iogJλ=6\cQFbW)6UY^UU%nf@bМVrRϰ5ř=T$A[WcgWy+ڪZnA3F+Ml׼C^svtۻ5zY$�8Ac'N{[7Î`Zh?h���=���莑R/I5U&())s,0Z[O;n$Pyz]$,^+mu,gCN{Q4+j1nwn7Gs{QuesIscs~ecN[pD?vW;S2{z []w(.d;Hxqq+;,\9]5Ȣz,P[Zqc( ioۘsY$ٙܐ3`JۍrS7nmi{Rz,dXx]B/.a<X���$ -���MYF.ڪ<yܺ+Ը#Rj!h1Yy2|͚!"l݋u+ގ4xi ۝yEr4yns-?輞"IǼ`ZVZZpGoٮ^05Еs[R츝ZuxdY[9Wks7G:ci~"ncFƉlc ׸xaYGʔ&nsQ1zަ)f7glb }UYڹ3*"8yOmG+_ڿ:Fgiv2z V(#9[ܓB^H:Wjlj;pOq}ck]%���=���&^xZ)M!*>˾. t[wpddC;y*Ӣ¿CY?;w> =+y} RG5*6[9&uƃWqGw{{џ8cS8muylд9mmhms봭߆q<, t<y^r眭Ji,g_"]VwKF>k_j3evrB^K|mճ"kIX]qiV"{Bڥ18y`7 ggEn8sym8kZ䎫K-������҂URA԰FLÜ _&.u ˤe!.HJIي/I?[7e_/ ʽzb8qo8]jmR: 4s޹Ŋ*ιz]1w]ζ]tٺ?zsA֞9۰|߆ÜkdUq,iyv}X0 w}~=ZŶeι'))VdɺׅiG?vlg*v\,fVjsoVP '9W7\\D*Tu]{L``UR~R~UfzNո~;W`mѺ ;m511Xܮ{x*3|.̈ۺ;*#\e{#m]ڴ.HWT�� 1h��0FziRNHOH4#_g5{?w%غ.zF{ ;gWgsgQNϾ{UٺժGpxnj~os^mw"T򢷠898_G'vs@Ӯc _l=79_ nu0v1mD 21acTLU3։5vŒm$elw 8)V*:Δzca9O26 vTYvbeu"LjU[|Hǡmʷ[R [hGwqBrw< tluIѻ^]vܚmqȱ:[nC|׼yHo БEN[5V|]ϰs^1ơ뭺3tuiZh]jWt g{ja uw3Ъưy}6g!Q?��@o;wj/{���$ﱿ k\]6?1OʵJ[Oq/UjxD~7uD)zի5c Uܱ?-<l;ΰJy5fZ|b*[U֝LdU]X%Әi>N螸yO1S oiYt?6k/g.tjNgtp~$-u���g *h��.ڷ2t;V'&{դtnyL]Rc;d^5ZU^a/Unu!olsu+ڪE5IdƪMM 0}ӶgsT8}T]��L@@ ��� ˒ǼX"N�Isg9D;W8ܹ :Uq^tQsUк۽%WYvo}lv?8E3QecT$.��@B@ ���tEI6`HoLmh7IOVK55��6AIDATa]Ô@dxciLdE:՛ٮIk:9&xdhA8^-g!y[qj.:]_Э9��1h��%{ S�}��9A ����������g8Z����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������HZ����������H{'ܹS'~{��$yUXw4uEmoLj3իg��oƌ3���t-��[h}������K߂������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$)I;wĉ_^��5Ico+--{un�����p"��Z_h�����Ӎ.��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� Ah��������� AysNMe��@_=WaҼ]ﶉ+������NwS T3on4(,?8E$Fܛ��t �����oW!_p'>.rƝޒ.��������*g-t }8k\3Z���������`nrv 3Z���������`1g[α?#���������u V3Z����������HZ��������f_r4Bvmlݥ Kk\eۼ0h�������@XM :cVU[ 3T5ZVܟWnӬ-W-7ikWwS~J>^{ztUz#o�������� zլ)UQ^F_1[U{�Z;ZTk:xO}j8Έ/o_o|o{?CoIaOڹs ���}ĉg�����>\,׆`iԡu|tf?Q+M{N{ }./W-ڿ:O)올㌅Ғ /ftk}gÁF}{Վ?Ӭs^Wj]*=]Mo|O/ݦ4W9oQ, ?.`czmGy+n=UZ��������XU R߭TE3 mmJU^~;z۽i|Ǝ*O+uОx };Y_ZyDqlѕ'ȼ.��������3^*"Վbf/Q褷\ *˶eUu]k=l:MKҲ35w&|}J7EYee=٠khCwvy8BJ54]w2o_ATHӯg6]E+;s;%ֱl;۫blnsXW08)W; \}v͞WcɐjtIej*GSlsm4ZӟIנ峛 VWG_e-{6 Lc3fkmZۼΌ 5TM]y[[RιRo=5U|/-u\yįj7#C.QzfS9qU��������7[z z3lLeu ἔȺ)ᭇ#:XU+75H3 \7u0\9yʂc9{*)%[jbw~A&8Gn9<ŔΫ'\>3~o6~;Xxp[qOy`c<chw_mM:~SbL)yo=U6yN)_MZ_Ӽ,s$#ݾ<>0+p޴ckze_^~ec=[{۫Iژ3*h��������ac֪\RVWE(EYi)v=73EڶPs=l8e+T~[^\+U~o;V(?B)*;cg:ְힶvqJcjLuZ? =br*bml891{Ny)!U-kmxvWrUlZwȶ:'oj{E2y?de(r[[V6WYR4#Y+^;E_VNsMܮjUoC?G (s;ޟ)%T%+|˞ޮu?Q$oIVq5;m]{1T~k`N<mכ;trmSntmUqe#5ZxB SUU%Ӽuzzy@:EmMEgCkMm8eQokBwɛsJjo鲤Q:ڸX?|5Vh�������@0^v.HޟkTYiZ[?=GK@5rQ{ EZSumb̟G*m\j+H Zbj[&l )dgͺ@9RRR櫼b4mI#'9!"ZU,R UX9NfTUܮt#~듪թI9*&U?^i3W֭r++|';m'Wr>=|\4OUsݰUtH),vRr?_Q mU<kQum Klgte[j~Eʳ:huZx=kP((K"$e<Z羛?3'Ͼ+O=gҐOiykp={zj[W-6]9,;}3Y3zebַ.{NEEW'#?}[o`#��������D_i+)g3@H5C[ҕq ܒy}jUm :U=^lqCTޒ|M+THVk?ipJ/r̦I&yO4aZ9eZm[v;3GY=nW<^oS{Gf%ΐvרj}wNv; K}9W9S5,m.P~:b2t\ZhMpAOUnئ lTpS\/ԡ]vvxduO;HtXN:Wgެj̟]t@|z؛9�������~^vިԓV_LIhTF*U#]EyYJNRTH^Q)Wa-+B{iyZғqMVrX{4;}]m-}H =Mߩz{:a]<?Z-!IgKcJ^i5Y6ߎdw c?=7By;g#��������רe9u7TjUx}7IWV^T.ShBU"o+Q%S nɑJj]]?,1-ZX7X[cmÛ*ouxpr$}qk<on,ޛ>PjYmU 뙲dkvLʻ(zjT U?^pX[xt yjjZݝ׎oԬ_~pJ]?{kuۖ٪cw&!ڬ2##[5ﭺz!��������WZ9:znWesfڲ6BeNu;R`fq'hᬐvYفnStgk,SGTHޘKY9Rh]ڽ"7S+TJRHuO6n:]vlc[~{BPѴ]FڨLeą7g5SoJ[Y<_sUCSWƍ:BE6}; iJ*Sۑ>lNo?k2d̷"M8kU-}ҧw;W|n|Kc}ћ3V;HE27k#��������X }N)!U|{.tSŐR+QQ]e)Bi*.TV2u$O҇j G=w޿B%kqMDRUle5usHe8fr+/E-2LcUkjȘ}Tnq@Z fI++T@9'$u(JժLmw.H׊{TQ;-EӲMoN6e.Ut2nǤB.ɐBZ=t\?[zpʯM~H_tԌ_e9iQ6ys~P_ [fʷ4-��������h]F=yW{LVUJoU; TpGn1f+Pʈ~S2pW ohz_,,)W̖KUϷ* S4iu0tLʝs+ܧsw۔m}RMIU-\m}7=#IţfL{ U.qDW-zzA* uWZ7oV6 }ZoTWv\zRwD^bI [G���������@'4o6nGWpQ^ L/ty*h��������?v2ͽJ,>ePY:{5ع9g���������϶ei: ՙΛ'x3Z���������#u]CLIೈ%>sss���������@v};t`}Z嬅DKoID@ ��������� 0wS jZ [c=ronE@ ���������� ���������� ���������� };wz���M8{������ ~>��n������:F���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� ���������� m_r4B!oVqV+&hsW���������u *dὌtM~{Z?Wcjފ\~2ΊI46#WsWJo;RghU,v&낔d!U=VIV>w` ��������vfUR7 aC]_WAz:ղ񚐳Pe"iVsp}bZaM2laOT*"oaӨB���������ogv@^[_ԨUDFkǕ蹛S9=AsrpSH)7kc1ag:u*=XBT<jw4r&He?GᷞSN lT=Wꢹ?��������hCom;U񡺭rЋ+4eH)3˵ 5ƺ69)OOT$oVگq.e*ص���������Ygt@۰{!m]_=Q]TҲ35ku&|}J7Eu㻯B|Fթ_"jFPq[me g[K5iXMSC[>Yf˽igRմ8Z- l7!կ*+FG_1]E+;sRR*7OƤVsryYF_1U(t[ bF&/ScF+{2o_jЪ\gdABefݶGdZ֪4;cldeL3Whkަm/m^^WgsZ]Gk:H,'kOD{d:gbq&~q/mԸϩ0:l򶸦>l F6jS9��������Зm,4_ge7ǍUr|:/+wVkZ|bTbfVZ<U+M\4yDZ Wkŋζ6k窴i~V4#Be{]zg* ';ԠoׄjxpjWh|Cۭ+IʊJvoܧTU'v֨9/S<_ݣ>UEMݠjκ,r{b2lwwתll-\'.P_  ]G++t⊹]zT^]iܶLYQA xEf׆:2AYEQm0Ue���������t˙66hZ1#K7qsV(Ess yz9ڱBy M)TyAsZ X:-"..TiTwZ[˞qYRތkvލlǤ|y[ʳa\EuǜVu1ӱ=*Pz3Y"{ݬٹʷ[viB{@(6hwFGT6'_e-ZǼ`޶P FЎPRninUlmc*7G"Ĕ[+e[U*V<*gcNY<߯[܅TRUR7"ǡZU2쬲zw5*Y"ɿZw}Q*[3sLG[X:Go>*rVز6:;E)vnq��������37VfW*t^m+R*kJR':3nWTվXZe빕O*oH5:&[O(=&)UTƻlFlY9=/O"ϓ/triy*ۢ:5%*"7\ uTYlurqR32cwW]kTyVd+oQ*xT`5+Gson#RޜHp c]2{cOۻ ;O?ffihc[fZ^UeP,fCn3!@eb84;$Q1LT I'eej\V"8 :6c;!$}N4M# }|>Uss=?{w施zTA:48'ߕβ/-GWk ?{߈u jcﶵlvP7-?yЙbJ[z<������ h[6eC֎4bh]̹#aGouYOāR%nN=e]MG;zW4KLϷNS->Y| v3Nsuжcq,k8#-m~1zy#kiGg[omuu;#mUsM>=Pq,[ ������ h4o+wNLb1emk[llץx6r䨌عlըkOo 8cuY pS4/j”>:ؑה?YȳǞ:&[cq~a������.h@Rbu2 M4iy灍ژ[Xmx.U&9p(ee[b_49DOj(<a7�mݫبxyKgɹzOGYgS?O凅u}Znp]4X>mX[qŸlNޘ:VT-<O 8ֹݪnw ǖy_=t5?:홷;8k{<ǘS@�����t.Ѐ@}骓u byuI .-: {@4޿<6HKlI?51/_Ie]]PXZK>Xl)6>v!l=؛V-ǵ7?1|:mU]̻֒XhSpe񺾙 ,,:ߏ}GC</Ĵa+bXj<Ux_Ѻ뱸mm-/gXL9;j'=Xvc7n?4hXq<^ Tn������t˅оt vV*50 Q]{<[P·)Κ,[䊸zXTsx\\b\2iZCscϑ볠3ۋ]sjykl趘>W>@j/*<nUBty\[Na{mx211,;yl,oʖ'cXE~鼖6VTlKl6V_"v_}>6弨>Ĵ2nZ+9V{[l>z ګ]gb7_.b;[?bO♶]\7,i={1>(tx�����rA̺KrgKG]m78ƎOn:vpLGԸ.4sԺXxOC1cbCŠylL[:6>j|paL;&>yYN̋XW˲m̜?\s_)ݴ$56ŏ;9puyYY3;<X,ڒ凯ƁZb禷m˥qՇcϞZѸiu̫i{ݰ43WǶM˲Lմ{1?3~UkcmһV{ؖ~oo:tX7|]�����0D*,c{쉚|?z<_BqsĖ.ؿ9 �ή���@tA{f Lkk kچ8N/F'ҽ_�����[\6{M16."fO�����^ uQ]=mʨ0VoM?X%Q����� 9h�n���SA ������P"Z������������������D�������%"������(-������@h������JD@ ������P"Z������������������D�������%"������(-������@h������JD@ ������P"Z������������ȠvYڳgO�@nKk����E@�?���������D�������%"������(-������@h������JD@ ������P"Z������������������D�������%"������(-������@h������JD@ ������P"Z������������������D�������%"������(A' gϞzKY�of3&vG7����ڵ+?.,`����;�hN՟;v+OlߴSOe7ogkϦ�����ǜC64jP,hݽ{wݻ7~{Xre[qg{Y`hѢXjU\q1k֬u_knn||m����0h9g] q-cĉ߉+2krw5jT?h���21=uָoصI8 @Ԕo����=mzد>=)o-O1w,�G>| ���� hP d|QlXZ;������Ne?+.[�����@@[fo~u~ ������(�������%"G<;v숺������8-祹9W۷o3fG������3r^駟olL6=nݚ������D@K5*Ny ������p&Z������ЖU'.w{~9F,d=������'mjd<_9mI8������? h鑊{������;cƍ7 /�������]cqc„4VP ������g0DA]555^o)\x5oذaVUUU^蛿����``QA ������P"Z������11l޽1z2dH�٠|����/�������%"������(-������@h) [nA~'VZǎE>s>Sn֯z\ 1iRm ؗ{;鳥Ϧk{k{�����h);qe'ƈ#6P3ݐ!Cb̘1QYYy+>_S~K)s̝;'NmW^ye~F1cFvE|S[ޝw;Jg�����'-Cڻ;gKNmY17n\20@㺯RE>l曳un�����0 hL b6|?G}K+F'>(= +)Mմ3k�����M@[f&^>2~5[zlQ6 [__>|x_uĈ?z*ne)sv5qO϶xݮ>?k:7Mv;Mdʕ_rd>$ݣؗiI~s]}#z>;Wž,.k:vs84vGzw;ޥ};y>�����8WZ`ȑb֬Yo?>iZ:g<H| 'OZ.|?}=-p|u/SN/~KY3$v3K,ͮus޽{wvΗzR�:aBu_Owl}1*3uuuKڸqSL!kOz;Ti)������}M@xb-M6272eJľ}T+Ws;X@xUuZ[[cv O9>>[</]3];#|gNcƌ}*sw{eoWg 32(5w������m;o{7o 8jGU歜Mv5jTwT0aB&*ϢMoL T;*νZ"i玡f_HUʹ2+�����0 hX gox/yb%ɏS/iL󮾓^z)MCwVOEoYd4,2�����@&-SĞ_[ߊGG R%U*TA".?yyaߒo:iXd�����L@[R8[3}5_׼??B^8z'zsXޞe|&iIjcժUyKHϟ.NEyi;>KBjo{R=_=������ΕgY .}q,<_'O?lD;wN,YGY5 Ȟ>;>|x̘1= dYvm8p F<Yݛ}BTuؘDDwKM)=_@n�����(%myf,M6|?\߾h>t8;v![|yv󵡡!?=)}gd9UϧbuʕqOvѢOgըcʔ)Y1})i,-Emӛ}B]w}鞝8Nk_jȧs}W\qy!Gynݺ5?MWNse�����P4DA]555^o)\GΆoP?*+}w���� ,*h������JD@ ������P"Z������������������D2dH������t������D�������%"������(-mժU1hz ������r8q1cEH ������g!-3qs}R{s7lj'ȑ#y ������my{?/|ߒ+F'e>|X@ ������g!nzb~ͣ�������������%"-sGwָbzyky1bDTVV{������hP e?𦨺s}LңΛ(/C 1c;;������ hP bX4'[-q㌘q_C?RQQ??2=hѧ������m?p}?>(-7)Mlccc8,M-������p*-=vرcG-������@W@x X������g'-3ڻ;׷/ih]_d61������ hGF?-i_X4G,������ �Z������3kg(U����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/img/Gantt-long-weekend-look.png�����������������������������0000664�0000000�0000000�00000232364�14332737457�0026222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��V�����BB~���sRGB����gAMA�� a��� pHYs��t��tfx��IDATx^ `TbMĶP -[R@zѠVA  Jam+&n֗/+%Pp+MXfX^:yed&3 $ߏ>9y9gfr<G"����������@B_r_���������� X���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� H]*C=T]n>{uCn>��������@˼jsfj5YI43Ϝ7OjUx\u 0clhP)GFTeu%5Z>NmM{\Sѕ=��������2/F*mL1ZmaU2 v5<>M9]ާ ZU7VKNƱ��������({n[R6ksK괝 m4Qi �������+ [+!isSN5ڨ;ACKriq˴9N~Zwcy7 SFB,,E8sR7��������}2,Tv_˳T޼QYMZ\s]C!?V.'[WcQͷ(f:��������' n}jj݆2`G-���������� l&wV?ZjY����������pdV`u6UVs:mrM?ZzG4(PT/$НJt@l-%v eִwΟN>T] Uի^5ni#TxrUHaYmm[:Wx[}m͝y"P֖kɵq7ǩamsPF|@5n @zfVdՕV$ܱ/=5d\`[(T)7be,Չ W-w^lw=*|-n96}m���������:PU^lRt fU7%5-_[ =/- e,i;Su+ 5~-bR j~;f{vYϹgS,TvJ~[ 5 Mgj[(QxOA(;|)0jzh];[S*{-9&SK@(O$χF7?uqšЊ7D\/Us2uCe7)$UׁxzS< ˵L =k/lzrR`uƩ+Zv[kU; ��������t.buURc%8'yuk;Ԧ;nx|3C;܌*f߳Xo/Qlw);M.X܌U63OS Z˷Z=U48 -SwoNJk;k|k-h?VK6X Tfً5}J"[T'jIm6{6G S ž nX/P]X٩$>тiuuuϺ&_ͮԚ/pھwXU*zuO,J9rα9';RjӠWV}pkVvW.Rq/_ώs! DyfV#aFNUN7PMlu7rkYCgpT���������`�BzB+qZY*Z"ToEx7jJC^e;gϖPpBkօb k-{Pc|Qܬ ͪj٪jo;{]E>v[ׅfn9NP顲M+K֗P;%-(2]w?[gr#b:WZ[֞7YV-[s2u-VD畫R3ʻݺ\YIߊ:V{z^B"Xk٤Bb CkU��������ilЦr5[9ʛ춍 .Su3RyoFܠFw0FK>1Z1%G}3\eTm/0Lew+{;BJX -T fku1Zenk _甸#7jSp(VEb fD˾tJolG35Պ4z&ֻ~hwH fN Τ*l^ [ }\ C1Xa bWfyj{~ͷ84/iܑ4rl2sGh٣+n7t-KPa"kyʏ*��������]EVwmW#Kq挚xsNѬM/ê*-ݬ=&2QHq+Ҍ^Nexr4"_׼ቂ.t11$;{+ZmvuKyÖ|]uhUY 땫[P V˘vPUW9Z|}{NvՋ VܖР0]2VQg@æ~yDM3Z_��������2&|sS՛r@y, {۲ϨSͣEʳ[f)kA yϫg@Tpy^JA6{1N5t`}ܳQ mjoh$$j8ܒXŗ-ܙd_h;*UX JTus McEFQսn S37${Rp_[vwM<?'�������N,c # xl_;j-s`{;Jզ6 kZ9z4eEI&nvZ/NAYr-9U)!5u:_+|H<wEGV/R+n[rUC\t<dGرM.P^N3*wM+). 4leu��������2$ڠvZ}\"YAU䴎pw*8'I[|Af5(]fKTxZoeNԴE+Ua{8�Z@t, ;t'¸k襼3c\ 5*06HN eo Z��������2#ܠMOæ5ى1 O8uժ~ X]Pvwgk*Z_ݶqf^1;f7VϙJ_ Trb-J`ݽC׮lhf{\j7Xr-p#ts ��������5eF`H˷ÔInݨ*7xu@ ݼ)aםNQymJ:g{f+pʴ齐k*ltMJي<�y1-pWfA:-~Z^W^i(P 65vn϶f ��������2"H[t8mZ3K l&[2KwUM8l|#Y]W[ ߨE~6s}mz*Ԍppajשqg<b=] dGZ[W`&7PEd)VÆf+s6Y��������HFVVCRiY-7=1_VA7"2Py.meD:]<ը+RM]{VM=>mXK`6sD;\_+UzrU*4Q']i!3aFw(@?Sk ~"X Hڝ3��������2 TH!ʻv\ dth[A^* jӺfqmݣ~niX3n[ퟻ]X_u�cpN*Hnl-�'v:[yGs#w$kvG 9qa; �������� 6h40;~ʾ+Z-P9ªV9R\i;5ޢp0fNT ڕ;V+ wBQ*lU]EskInwrT<$~f :^-FwS;<O}AF;Wz .pNL)Uij!*{9�/g/ʗ8_P?RwGK4hb#]h)Uq��������J`ug6ܠD-S5pn]'fGܼ)YٗT]^KנAG׈4{-k 5ʝUz[yp,[E5sF({XM뒙S}| (RijhgKӾ.VH ӳ5:=ڱtRFVulC=RL jCΥ% D)2ᜬ,ʊ{L1>:_(\WJ6Bvγ94vHf�nl[/P>g]7kUoZ]"<>=Câ Mqݓ�������'n/ Ͱӥez7;n+S*]ff5O"e@^hz6k "ƕV]*/4͎g|Z2T^B5nvXShӽLd(\AyڇPn~ {BJ^+^ ꤍq)Mo"*w$r`E3mJ =/mPxh˱o,Ey}cմ,4}T ~y_,)[M��������*ba{;dlw0^kNkǬe v-5}-l4ZШU2.׷΀STVM{^ŗl;׌K97-*nk=*o\oTczWTW,昴W_޺N ooTb bUx�֕)*,rtswgi*>߷yVI{^ZJxm*s,ݜcfnuoiqvWtϗ=Z}+QMU�����������������8U����������pV��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IYغu;����������<x;t= ������������������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$z,pZlݺ��@<x;n �����нtf :���tm|�����>:^]���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$HUأz/W���������uޭZph &y^D[%���Ă _#ufntټ\4zQ,������x]<ڬ5pHfvU>0ChY ��vhPs+4d�����t`au nV0z5}R(R{Tv]rr*���)(oO)i] 5RU+:Dr������pu*-\@ji֨l:ę--Sť9N���FkV^gf�����Vϭs s3d+E^| s;W/Quj;$.5df<ʍ󠪭ze3^Y<��륁gÑgnחkO~7ܫʫs\j7˧n0k0-TxSI[~i nXi R]F\@[#_B7̶ [TxU}[aiIjps������.XmֶJ5GOUj'Ԉ뗫ֽMܮU34:kDsjs+JKn[j{-8'Kze3^W)ԠU��@gWuDgLJ{e9ÜnzSnWf)*-"&\{q34qWjiZv9kjPͪ*2PW;kTfX˩+VԚvW|aeoVfk)�����.h`uMlemg$հj&>T`,{yvg{WE Fo\`l=sTXø{U5@kʿk?tjr,[�� 5rNJVY#'*|Bٿڦ=wZ7å{+ݺr-4;j@EYהS#>=CsjT=u+Th*w9+n^Z{V[ݪR4T]hVc**�����~3VۤAի|T' 髜,)pmfը|U6P[&Kٹ#J+*ps*nSn~/rWUk#U��NJjy*/v M|lw,yvk3ޗU<RTţccUrk|ye{b-wkZg9X߂Z[bUl`R v=ҼQիҔ|E�����V{}g=&T9eh pr"*'7zSY֮m2}M*H~C*k: . H:Ru# ��${xicz3ׯ ^PYiN'+ImPKpF:EEy@ .崊W霕*5v-ֲ1�����@7E}50CU W7���Х7T_^+n/Rnx2|iJUpZ tX3[?0cM+N)*KyW*b|z[0�����螺lW٣oV6[V[ڻkP|ev5! j5OB^N@g&ttZp-SNt�� kwKU*-T ʿHw@6]*.Do'7MgrUBO jMc5csS����n>cuD͞+5B-Рi5zX X]w îTM+U 6rŚnRHy@ 6P+U-y6)}쀱*gmœ隶F .wsfW< ���]_{[sk;vdkkE5}ҼN3&vEzNu`*~rv4Xss'�����t/]7^ʽLS_u-uDJN)€Nհcz;zg傁<-?}U_)SQ@Tv[/Zӊ5{*T<F˯g\֑9䦕jB���]S{ZC97MT5QWahV>c?էF_lںj^\`F\�����.X5U&W-Sɸ *Y^uU<ӽm+~iݢ*eZ_^Oy֯HeV)evnQhkT1Xy+ѲY��kwC;b͞Җ֢m*5PΚ8|^YZ>רB͸` G7Rw_�����G<`)nݪc���T{-�����[���������# ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������HG֭[!���dk&%�����@ґ2"7���9�����{At ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`���������� ����������IX���������$���������@V��������� ����������U����������H*����������$A`@U=c|nVWTs~.u3:@: ���������:J ڼ\4zQ,���������@*����������$A`ols���������4@<Wjy- ��������}kB8y.k֐њZ:-q{)kXMyl9^m_=CcdxtΩ4\ux^c?ov|o-׌).AySdCPkZ8^Ru UB3`oJ-z{p4-MZ^Fzvق*lI}]nNՂ'ǭghjni#4ΕZpTMD5n]WYv{zݢau)ku:vkX Uugՠ,||eH~iZzgTP?8k��������Pmٲj2PZf$P* 8e[ᥡ,-Tjt8Ceqi\YLX{B뮋3šMn #Epߺ. +(l[֒ח1z)wƐo 5Քr%gqrh 5~޵)j6-KeSkJ|sBo})Px-cX֢LҔYOku8:��8{[G �����u ZyDʻ}B&{bR@ֹe)njzLEV˵n[4M|4Yؾ-ߤJiv4g,Њ7"묛5ɽLs˾N;I+"2T[ӣg Pp ^J`M,*Wpxg;jhyb}TٗVUt6jn[@EY5_/T*ךRs[6z9wWj =ۜڂZ6]{*NPuUf,g79eVu@VeXR!r&tboS 櫯 ��������;UzAVWsT|r[5T+Qت׀"͘iB vL|N(JU-/Kٹ#펵.G܆nvoOآ" :1_ciG27Ssl VJU*kZh֑׊Ghh_knG~*}`uIkIPʽB+WF;D1C cV>9ʳ7(L8#Bl4Wt?>F^_4v2&>Jk_k9Wczp���������]?;j%a-G(|us/Wuhj<vSL0pW6X٤ʶ를۪Uv^vCLCg=o;d~AqBU>5*̰ ;*T|aj~AU?B٩=iCL(mF I6z\=:|ToK 9���������Hnp|Ty5hVnJիw8|}Fȝ2!`{Ԝ{rUֶvpMdR-uC *?N~Up1QWUk{(�����Ѕ}yV ��t']?ztֵnK֠jTz~nxfo:)m<.vH/'ohrUt{_+Uֆ*Ԕ`{chԤtsW~@eo;7z15Q꺖mwSӬ_h厀Z=q[+O0ViFN+gjuǥ֩v6j׷ˬ�����ڪnސcq|?\z_#OӒ'9 >15Y$YS5cUZ|Uњ��VuUJ^;yj-vLdz*{ڰQ ?3^ OS3TrJty6dnا=F5OpsMfV/ w@*W4T9~U7ҽG ^4C;V\<tvigu{aR#7NSquz+0P7i3{:#Oֱs#>s_*8HYY6|����\Uqo<覶r<RiTr(?7*ڱZG*ej3k[%WU58waS��_΍fUa:3I5rebwgفnE7eT_5*S"pϧjDvo졽%)b[4,j=GkހJ.a-s�=7C#OVD-4RU�5mOU֡ dtӵ<k#k%ZD GfhϷA:f=iU@[՚F1+UCPW2mܦui`dWY~^#I^`U+_u�����{)\TN^[5.PTC 5ߴGT<*[ŗ`: 5*5T$5Ln/^ϚԸ}Vܘ@ZK.c<TЛ*��(*ֺZvM? Wq5UV*_mooҲ){bUr&_ʬe.cvQa_Y:_۴=%;N 4MHQt7Ce*0j18)?.yvi$5kWi[oM+kh2Sʴiir8^]7Nӭ8KjTM#푥AMS MSiMlg;T[h?]hgRڞw�����U<^ZV&J3.m{:m^ wjիGhEuJG+:S"TMKn嚱�+f[lqVo ABnVwP~}oC+t �N��truC997N/Xw'j=9CKC6h) N  Yز-q5=`ڊPɅCBv(wJih]S{%X&|{<8st T֖cb۳-TvsA(׽*YZZqM -~-WS,=ɾy}ȩ=eql{B7oC{6Y1^`mF+вk ^XZR}��u@"{i{MN8&W:v����ҬNy*v YԩyQb嶵A ;QWU_ηRU>0CC6CT6gϘ, hPͪk-+!}mMz2=|7kNJK֪iܫYG(m=&;5q M\T]jA<R駻er@Ymm.!K~Nnzr֟\jtDtWwbM-/op@ 6 5vM{AYC̺rM;'A��4UA-V?\BQB��AU��pPWJuoKoZ."Td]^-];iӂ63Z\kY}h8gZνwyJk܌8R)Hf9e䴶u8=[Xm1͝5>Z1ɴVOŪIímhtSh=BQ'\^xI+B| oro;֓��]-VrxVuKKT0Mf@G|D<�����쿆W<]`XdsUbWUkc ?ڣ=W+V+{4M XTYA{ilMt{ݦ rHow m8&:U?c\kNU| >KpU;>Z,aDoW >*w4XCW%5з<P]k-{b-˚f���X"Unp+NmͶ8Xz+Fm^Y`����NKbM<߽3wMw*&g|W{*C=zҝ5`m\=Z#Nsd 2{Jy*{ys% OJdvUG lt54s8@ynU35mh r2묱Z.ψs_'a8_���! �����jPY(/2F\`ڬJ+WW 1>'tp7r)=#tހJ54` 6lr6yzkw\NNK.>gZ{v/y>] sl��2������Hzt hָH;`=^u;֝8PHar (Z_Uv[˰g}55m٣Лԩl[kֶJgphtL9ʻ ju}ޠ{-Lsnoãscff<mj}cH[hmG[ ��X�����@Uf yytX- UivǯI T +S=[-~`}g緫R9Ѳhl{*3BG6Bu_ JKê VXk��*������H'<]5{iz)Rgj❾VmTݥmF s|v-^RS82mӠۦn:|&zX]Ǥ_V>BE߲wԨjm?<WWK{S,%m74"Et���*������ңZͪnR(js.Ӻ fu~vi59lUTY +noa_8L'8O!|bIp*erUJ+I%o;IʞTUڳǭ77jy JUsjֿqݮWOw��܄غu쎥nӦM!N=T 6F=!p" j@uΰ�� bSudJ)0KJeoAiJ<T}4zeUzULʶǂOTrc<e!5nvZ@rnߨs.tksFU\Or4QҴ!cܬd@{ZyB*S$2 W*}j< 2 =5Zcf@eoWD'm$Y*|.O?@lD_eّ]c֬yviQuHQ\#nG*J14Kn.��|~/Vi˖-P۬]6_2 Hz"eB%%J9oHa�>r%P8cCyh*$T0<^Iy)CׇY֞rCBL7M e TSv|gNeqeSօJ/ ۔=</41R)Gcym=[*GӖcҴ}EwcS`TihNPM5Op*Y.Toacd-.xR-��t}/ӶX}4n8w kX4 spn Vkhnd(v�i6k:^��}/S?cĄIOěDȔLyH#%oRN�`{U��p@ (|{:h:��|HjM$RG+O>5ʓ~���~͵ 4vUjvs\W+[>M��3贁Un|v2(����jP٪z|F[=N:Zs14ѠTh��S2'%,HW=���VqW)yUV^ʛ2]+��@ԩNMP/?T(]r jՅ-ogNem>H:xkƷ8iNvA1/N-BE :q[")vke>K\ _uGRfΩ;֙0n>����WkCM۴*P/��@g-*EZN𕋙cRV_v&=۶Gtl}  -iqH&<RM:iPUG/jCRMyH^2G{^̱8]VnM,]7%o.\<Ibq~qs衺6R6})-1Fo8){܄ִ,]5%oD)]6w&>aT!fEsW,Ԛvq������� nb5.8Y+L@1]vipkxDTLkAKwy&sYՆ6BYɴP?9:ѷ鬘t RJs\-=zK>ٴP/]|dv\;�������N)RΟouWI V<+Ek ,0LWP–y^ڵھ#S;~n|--=lɳ7RWk|$g[iŧ׬BowjWLZs'%lkɨkvݷO?=ӟցoZ z)8X >e?Lj"N9\=LQeSy7G/1ߍs6@nqR[[뜋ޱ[ۻ:qj}q&^}oQRK+(<<YOjnY_ ֲ5DIzkJa>9 1;oqp&d:ٮI1KozVu]}ܬs&[&z>ZJ$^֒lk9L'n1 [uȹiFZL?s~]h rkӿoVsnm+琷Ik k\#IG�������bwɓ_Ӿ}&ySϢ5zWiŗH;7ϡ{'vW~TxF[zvo;o8 ?8wܝ&+ZX5atgk~]8W+2Uj&}3$;: t?dVw<YWʷ/s{pw:psMpY =\8zͪkdx}W˺:^wNPOkybӓejΨHis(WZ[+<J<O;ooֲNSV|jV륰5{\&10Y|W+ws:wߗXOٱ329yudsH+WVϨmK>u4?Ԉ2WW>uixzV7s?^ Myz@S缶k2I~ L5}洋=8ǩ`%ϼ:ys(!s<RYc~>!0!w������-Vdfp3=҄WeZIwFʜ[^^Ctٗ;w5Nw9WS r.hǣSZ%:}kl]DZ?R;qoo[籚p'TYPú*S"&N6`AKL}-􎱛k%z>y^0܅5㻪DE̱r#1گfa<C/y&&sʝ'z}WYeԍ:~%zjk9zhҜtK^rvؖޑL:Pkj׿]Nq\[l(7^U7}oM霴7'zsۜ?6<ȋ̏^VH>$vrd-Ǹ!}lo_dlCܬ5'9[bƝ~|?gwF69'/UQϚlVo~@]Oy^g, sA<0}y_)DMM${?{<c` iEx MRֹ=4?Lxy_}9dD99Q,4ЦV�������Onfhd߹-xX;Vn9FݒbM΍[G)pГ4ԋ#7q`сWj0ml]bu?A 3-5Eԫ5[Y=O ok-%oLώ=uqهOzҪK4289ڮ;`ׇU[#[3M6õ03RgF1k M.{̐n'8ZMc_`_w>3jw=g/'XNS=]3ǞNsTIŧlH$gD嵒7O䖎;-^r6O/OSgәv+O]$f59-;Nsn.wORvVXu7`^?[ [ﯧ3y&J<3/IJ&<S*_&nc)2CϿ.ε[]k4l32 |=|>k9Y~?rDdE絒������� Nݝp2i&rq矟Yg_+Xy =UpF&~9ֿO%잵^][{OWUޡ͍-N Z)v܌C#*R?{}鼃GFJ|ʝ{v^Y{z^zzt'/I' Z~W`uɏYvyn汮ozwe;;escem9b=_Л%%tQs <r_yp󼽟yroK&������ OW-X%g𱧸ӽ[ mjzʱ )52-+עUh8q[.s9Y}L9'~neOLnii SVR"&J~N\cVA-UYM5ng y]YF'#<D[ˤKN;nDOI&xOcZE%{q԰:]NIxMjv]7n9'y֑$%lt3-+[x]ֻ.[^ TW5<lY-XϘɛ3Y[o֡e٥iktÕX/2<{'X�/)+dƽ幙yDMe| ⍷YRi N;õwsz"< ӒշHdJ,$gȸ̘|;3& 3~ҁ2~Af2"Z@wEDVxOWbڦyͳ^;?sy<K#o-4]er>u[VvzHdjݹeWכ-\g+UNÿs3v?gZ �םϷ8f>vqZw%vƶN88ooRՅ}犵)`LMϬ\kOpΧiէ.m%⇯{t$&U|<[zx)ͷ7 1AK&LU]]jmC*]exgO<׻<i;-kޤgGJ|c~=)'wKUNU=o>\]1#QKֈԖ�������-ZzM'3~x`<H'�qeqg<DGg֩|JO\ ҙ?תyek֕LfZ g:,|JOk4ʻ)5OdN:V|θ-DMΘjs,G^V0[S*#q7XG:fWlu~rSxՕNK@Xw [H&ŕSj]ƻ-Yymw^~\uueGڅ 㢟'JydwK)3Loo7ݟgyyDMcPa]?}炕jUE6`t >}b]JkV]Zӣ:bsm]Uw{I^qkxy}lq9şxuZ{y\g3^VJ˷3)cpfS"&LmxZnz*H{G/<-Y~?LQgDz>:vW?7g=rNSOPnfT^hL~+ �������j+Ǫ_%Ma:0yU>~t|T+LgNwZE%v?.+}cd̔[ΜMgJȲ~O2]kޟ)owOksͶ;VSuq8K3?*9i ||䈷QjS_Ɨ"eS7*Zs o?}Z"ySg?R}J<yN()3-O 1*<'3ٗsJywU_T[&w>v:?Z_Wuesnk|giZ̹oѿNs&ϫvۍm)Nk֤N-_9ιp^Mp.1JI٭}$}{?g{_o7XOV}=iTmmk2-�������:^PflݺUvRF^z;tz'tWc2~w۬`RgOiGm@th9|TQQ87:ֻ^?Cti@uΰHyV믿u>}&[v3QGd!@=dSu^\ǵLh 5<W֥Ꞽ26tw[Qz^{kР*" "=)Eғ�������dnUO+ۖq*N98i6?C=8sS"ʒښոGkWqFqv|x N+KJ1qv<tE·ÿyV I�������U~+t ѸL#cN$WԞtfĜ8l+OJ=DVqz������� ~F42(@, �������tIJJ&<$RGdC)xv������Dh ����������IUI+K"#%,{D%u�������֭[5x`w,uv! >F=!p" j@uΰH駟_`}HMM-Hwfv/i=ҏ: CQz  "ҏkuM?C&:S5l0w,wpv�h/HiQB`UzH? 3PGd!3z0zH?d )z4n8w ݱhڱ�#F UnTe!@=u`.ҋ!):^P}*����������tNb;LX֎=��][~;5f=Xjz47iOnQݳj:?"2~Af2H/ZH#DI[G߯ԁBw &LE֎=��E`~_ksnf7c̻l>x֕ze˖2$zx=zб?~QܴCQz  "ҏk!FXMڵkiZ QU�@`i_wܜU+ا'O 9o *_nf�nu@0)3p=BzX 5kp&wecѨc�@{XEGymzF{Я|Y=Q~hX}fzqst!}_c~\c=yQz 2Cq-)j_`.՗Ꮊ.}m=vY;:=Ot^]C(}6kѺ:ic˟ֳS&G/}vR[j[ُ$T`v:w}vwK)ۤL]}w;hyj`Gm<g�oU{kwoY#pL7@wawN7K\vء0҃Gd!3L \ǵ^V#:~U>&&jj\3Nz&E}駑BNݥ8w}HĮFoHFwzN4T/yCuhiM_d!؏)xOc`Hs8eʭΊ=ɪˬcMzN|lߖsI���՛ouO;�ˇ|I'Iww���@w=%Oc[pkxDh]t33APk.?Ws [ƴB=V;yjcn*{R/غ]p&W`c7Ηɺ>��sG{�:Zޑ����tjVzRÓŝ:~n{rN^n͂+_񧅾VY+oA oxd?gOjr)B bvVּsʶHrnM?s^xq&PB߶|E8#چt;Y;}M_b_H SkriOh#u/]?)lպwt#StVǏԍ/gGgu'ؖs~j{S=gb���������nbVϳ^l٣o[u;fuWOzk>[u\WFelZ+V kEKzkm]ʚU~mtkHwwY^~ g:\ϲqBdEZOVy{-w{Tk]bÄQ{ХfMb�=@xg#uj3ɓl/h=25zz?~Yc/X7xiyv-9z;Vzan| RWʜs*O��������[jpoş/ZIw0AdžՄ*PblHúe568-^h}vP;>,=|o){kV5iscx{dZΑ|ZA;4i΍_wH!%l;`1ӂZ}zҿOְ[~߾[^ʼU//:)'ğ28rwF^tu4C媨VgM~Z\moYUckJ1���^N|;r_7w�����Kn/29A/k(:MKݪ5ӎMM S65EsMҎn˰~I˴7N^d81M9Zb'l t4||ȺO=%<$kO7OdCK퓕p'.%g&pn션e䷒^d?SXj7�\{^e2}ĩG{y%���+3zKcD菳t;����> Χ0Ak䦝؝xuaomR?]Uy7^0T<︃T=uhg>YiUzj??ǝ:Me^SjW^r>c}6am}���p4 �����Ҫw:Sn05a zFΗ>>Ĥ;RT8cG\TK)5{5.|Ɣo]w\mJ?=-3or[淖W6q爓'9 w͈ocq1-Yty\hR]&@p6)j^2Z|J?ƻRexþjJ���:3 Qe:ĭQ(!&�۳FkzIٌ{)E1?-n_ӄ����κ~UYWbӿ=ӺwwnXNp=uFiҵտ{XS*hdwKA?s2\;.渳Mpzyg.G?;K#oaao>*wv)ehz'|����~_Scܨgi_Ϟo:㵊ڲפע_453ṷȌCon�u#젭]ޤG޳L>J'ady����nXUa*[}XR~֧zJ<e걧 |b՟itܑH;y얧;-O)߶qgvĦc5jͭ>?nmkmKU/[io'lQQb?RK+0a3n KF^j-Su쮴?z*Q}ZiZ]~5:71l{mY_n-'MJN���@uWurO/_s{ ` Op����t_ݢŪ̙U)a:,4j{?u&;OSzZN8iy:ZƤ֧g͕*'aI,4|<具Jik{bkUY?5zJSYUb;BkUsMUIqhViUuLqx<߲vꆏnUm9���t~c4Y{տzUSvvkw[_uѶsʹ~yFhJ����=i֭[5x`w,uot饗cDO<񄮸 w,wpv�h~oHc?@;UգG92!ƛC>kFH/\8EVOwmzȴb1fri^Tu[q֩#O[L1ZGsm ˏ3jϚq3F>Ad!3z0zH?:Kݧd:~����1S=?uyQY3Rc9]qϾ?u3g8k;s;Z-ܟ.����]Ix*)m)xeI6���1r◴OZ}3âuA}jgyQNWYzf߳/E̓vjd-jk�����ZjM���==tVZ[G@knu<;`g٦+g:^η˺7����н0|ñ��������8:u`By)xL��������EU����������HgjJ$^YҁM���������8pzٺu쎥W^ю;1dvǢQWk�jt0tTC;ҍ7[|֬ߍ^p ;oMzA{ꟾs=3f}Yw @d!3z0zH?:KIkU6 ��E`>jtcD`??hǗ:Ca7ӏ: Cf ҏk!FX��@F"Ѓˍ_z{<}̐+?_BO5z?fHnu@0)3p=BzX ��D`-3~OlXs.8=F |O4&Mz<XwX} ͠�F5?fayQz 2Cq-���HVSW뺆‹u;NYmݩ]?b ;Zvo;qvyC?ߧϺRϞw۽lٲUCwZQG:ӏՐ:zH? 3PԃA]Cq-���HVSbz]crD.*7JM[|nn@=u2L=Ezq=BzXUv���:A)^Oh/Tt97[M5ewUk"{ˈgw'8-i5z����� -V��ZۺB5!?^kVZ ֳ7h"Ejs5nNbWǽt;ܢLtY{]kwlϻ(;#N/iJ LA=uB=Oю?վ}ps;& Cf0`P~ZQ44hqqnNDՈ_E`���)!Oc mKo_)auΚbet!B`5l r3"2Cg?~~��m? ї\FX��@F"^[WjܢW|?xu֬QR mG``Rҏ: kfZ??숞!� ]>T}qwt2X ��D`.xVc[EwB; *LA=u:s=)S[poc�@{wyN:p{3!8���W7ܑoJF>X~w?;F-Ozuȼ&?8dd]yc qveuO��۶v߯& �@8_oRC`���86ŗѣEsYi )|ܯoVdW[񝠿SyBzzW?֭3~��繪<~��׳!yj3@GeHWv���2˟O>D`>|9iSN9 ݵQGEWP4SPGd\3~gV5]�wʄ ǝ< 8��2C_&u6_W������twV��Zkҥ:ճgOz7;7l`VTTvܩZ;˗/[oeOӟdz5����VdǸ#Ϙusgo诫wG�*��@ L |衇^{~mhhHزg֯_җ+VS����[=1&8At�p X��HA}}-Vc9Fo&Ol>5EEEN;n+_݊մz حY����4xZh�2�Ussy̘ TVVgZ W^y�soijZ˿z)i}M70����ug5iˮ/tԩY:ͷq7w5pRGG8ӢZn׬7?ݍY'Y#zC̼iB;ݮ f��&)hߧJ u~��tW^yfΜ;L]v-S?3͞=nj=t!h߾}?\tW_/~]j3j}g+����]/?7}׳={ڣE[CoE;&=oO󻾬!npG[=:>=H/yQ܀ ^SL[t>GP{*72]ZNwVzI< Z=mwjm=1*7�p0XM suSuD��;1TTMڵkV&v?yGݻūijzu7﵂51e����K;:gsp'zwߗt\/nL|O#<+v@Gzc^Xҝf=f>uǾZ$_{CPm{?rTV֯*}=d�CXM٭o~zrNI?5K-^t5|yG}z+&˙;ǿ~rt �,Zy:餓Ë.H&M%_駟/~zy<c=V~VӦM���@W6&P_տzH U_c7ׅYsE1�C^X3-{e�pXMbS:gfT5Ao䓏 }Q{_ĉa*tMhdϚ~ETp0ArfͶegw~Ь[Inv{7;-rg}]�LgZ֩ŪiEj>SM0մH5L ֦����R:3Ghne4Ct;n^Qp 1AUթch/|`>{"] �>]y>i3iݻ7f;Y]]m7u7c˚yL7xuG?Ҍ3aSs;wO>��NLT󃡳:nEjZ馅ik����9OyFik\mC"|m@ۛ}I[g^ ꎙ>5eߝ.(%>v9|6I' �]yj7C.MkX&i������;FCNIgsMӄ܌L+O_Vrg3W}C߳FS5jM:|<{\1riˮ/t\]m٧}fOwew&Txϔftm �ڃj1l0飏xg gy=S��؆ WC_W >+tlݶmcY<@0s<vXf����tM٢Z/ZtNZj^|˳k#c^^YZL1e;͞Mz_^z}Z)|g٭o2[b�@*v{^M/Ks0]h֮]cw1AՊJsN�^{<?~yj[k3occۄk׮׿o) iG������t]גe͛뢂N˚*,,}Q~T__gv�3ΰ?zꥢ"{MF*-Yٳܬ;vwȑ#u5(//Ow晭f8;;[Rìn������t] n^kx ?]gpv+Zx6]{�31-V_u=SvUCK_rNҒkzg{-Y=giJ U������ &Uμ5*Ї͟;{϶[ & ]>ci&YWi1c2w#޺Mj��H3gMN;햫[tƏ΋uGe9~?zh{ZfeeB�������VIǩncaIdL٩&K3gn8iZ<3:tm L8qoY6['�����@Wӧ!g>_�@k\PRE` hjj;n5z'eZ�����} v~oMzC{��[;dz iuV mw X]voy&z76*��E iǎ?kx9c`lPcƌѳ>uGs5q۽#zH? 3tzxM}k> {#zˇ�tiS}?᳿0l8B_)l}jb_G{z�@{XXEG"^2~Af֯�L1쟏яK_}FX��(V=Vё@=uB=Oю?վ}N+d˖2$vCf0`P~ZQ44hqqnND`5*��@F!!D`5&e!@=u`.ҋ!ҋjU��B`]HO?];[nմQGd!@=dSu^\ǵLgw۷o'|���������8���������@V���dJ/fҏ: CQz ҏkU����������H*hs}7m_=d'<\tn]nM��������tVVPYY~K ӻwo(B/TyIM]:��������@XM~W9Ԁ[ <8oj:=3:ꨣ :x/K])i}3g},7As<��������&aʞW_ Kt7NUjoد޻D/r5ԣ>Fg=&zHR3я~O>87<C@Z�������.j98+W޲_+^D^޴xz-MsMjO@?竡Aoz5_h~Gu'-7=-fRlYx̙_p9.Lӌ:4ui+cҁ?~xVٗDb[+{?vf_k׮#=L}ofy:]��������"tkZ" =^u_ `ok |~~,T/ô0p-^yet'+;;[;5u=ƌggl oaaA7n֯v9S%%r> zqS.22&Wy]�m2ۖ hcm9O***f1_sḻI's]Ν;xbc xO4 8e>|ν3ekkk|�zgt۩HNۧ+<ݔ5LS66H4O"+V5vo/pzK#tu׵ě'HYY.~"鯃T.CF*W5?F"\؛djjyݞy9Pׂakl[ɿ'}-Ӥdۓ.93O"Z/۟Rӎ?_R=[-ߏ{ts칗|mmDOcؖex2K.>dݖDe2۳s?-^d!ѵ?F窿bjlϿزe@G#|?i}AGygk~5 X -;imؔ}睿_~ӧ J`yAI DCؽ{ݡĶ5ARh6ne9.9v&]aQ3O/`lilǫo1*;l0;Pw}Wp{9E$��y7UQQa&r-?b}Q{׫ܶmy=E~kc_j$a6yfNxLYfc .n/eΟID|4Dcnn<7=,_>/̼ .lOu0c,gԩ.']Z_f:ɏ'5csc37zh5669=u] Fcm>tׂ 0u`U^^SN9ŝ9m̏sss5bDf8ׂіGZ0yLzku9d9fϽD)hDՓ_ke7nhI z G9=7Den fzsU$ۇxZٶdׂ[L3?SG`Ǻk+:99# ~@l4?x*`oyd[[$~')~YGmc`iE$ڇ߿;H5p3 x-xΟX\4�+ٳ}#sϷ^&zRVV=<M�s#oرvceU^Ycncs݈fn֗I֎Ws| c277A/kr/㏷o777~h1c&rls eG[='֮lSwnI4oL=ʕ+ݜdu&] Fcm5t2֕΢+_ ~޶�LbӁ`_ ̶:4s夓n-|xm$:_ͽD}滛u(OzTجLhZ;_Ӗʚey*]ZۇDž={gtker@&"&: }ؼO?/at/i-M2ymu� lKWp>0<^^~AWiij+S3}d3-zͲ ݁gӵpZs��??p]s 'Cslʥ:an_ox 38͉fmn*F?M L?sCܔ3Rcn>կ~0dz7rZ[9[n 4xz~g#k;FY"Wgў:ׂʱNIڵ`TVVڽ*L+_ *aUk-ߏmWcxv{??O[ޗR-k\W4H3u:|ow\#ղml~\W=B{?S-ۖ{-n^WZj>/OeZXt; `gzZ%c y6/6ţd1AU>fvf&j0L߉|XX?o^=mS}ZMwLJ`��aZ<_'bnZy5?O20;”)S-d6]M%۷tJXƶzci͇~IfyᵄJY7 /ӽAR\\N\^=$f̍ٳgݮvnt%93Z۟Uӂt1hZLdz-:]n]FVu0|?:Pׂٞ7fsz#F*my_ʚ0]-�iIZ]|*2Y?_S-KmlMtNt[gl[_s.gV@XM mԲc4f̯C$bM𱽼�f{|gkz&gw&b264<PLdA]/(m8м&8fy^j�`z[kxϵ��5yݐZ|276ƍg'b1;Mˉd`+hl˪Um1{d673VMXwSHjԱn e~9nnvf^sChK=V޳s|1q:ίΓ1,--oV s2L]tNm9;õ=-uĵ;ׂ6s#lk[n w}-yR9~Z,UЖGɮT?_ Bez+zsc~Z:іhM}9vk(ueTeT:O[>{:lM9D^khgts”ffF`5T5gU[D 43@5^7:lM<U|&y^` Wӂre*7o:ƛ_R>;ٷɘ|Xyf+`oT0+X2k �$q!͔شXZ6C6!+*Ys#03H0{:]AU0o3c/7;ɎO*cwkUa7w<ލoc֣bJ+tw$;:O5g Ӳ{9f.ZٴΤk!Uf}LBZׂ'uԵ`Z@3/Sk;Z|I9g7^Kl$;_Ӗdu@U#RzM[mmi=ٚ})9{]e\ }5k!uk$^~m;jL+{Vn]N9~מ}ˢijF/Y|SL7fL3 Jaݮ7?'ݷ57//figEex)Q@3G?X&8x#u%|ۭ]{d:c ٠޾pOck+`543OMTټiEjctSy2ock?ƼuS[܈=Vf,]�X?n==nm޼~fC9ޯ['bn�M]տhn{ X/湝^"uUNhb֎Jyb$F'ԛfVf~|W3ߛcoUwib5՛-u՞ybv͘[s*FbWӞ:Sִ=-ݺ`a/?uk00m%5ЖG`,3s֜ۙ|5><my_JT#ҥK55M9=񘺊]3IiRkeٚ8֞kgtker zoc 64۲eH۶1ŝF"u{{}{GO>8jBևl7GH$ҁO7|?3inn-X Qݻ74mڴp͛&r|y]YǿoO$ *4>&Bq$ČaD`[ *^J-#AC|FG8 h-!LGpepD(?P kd<~]r^ko5>[׶OĈJ?7tԖO|[ni޳gOmKp>{m6e]8Rĺmlk۞??x}W;l3w_w=g!i|r-Bi0}l^"װ/E?g;ZO6Qt[>xu޺nߠ1S~mDg_¿_;zO祣h>4(Vg?W}!9?󧎾Ѻ_Vp[PXaҤox nu &V|{-rmd`ZTOn+�$qj֮])--{un1b�?~ �����[]lV6bӦ[umlֵE]��������9�-ﶢ6c8V3O��������4U�ׯSsVSt���������=`���������� X���������8V��������� U����������`���������� X���������8VK?CG����������UwyG'kޜ'|믟 o���������;8>s/L?No}z&% i3ڶfVal!k/Je[v5}_;v++BG|u~uߧ/8Eo!z�������V9g_]z02ş] WoRsVUW]-1b Bzꩧa>/В%?n@d!?սP?tiIZ>%Km^k&7v齒|M[ޫ[nrjkkgK+#֑#222[u]?gWOsh��������0vmW_>8XEWYͯױ&e B']hec,ۊD[ϯl'ֱGBr޽nbmO7(٭=smϥ^ꆢUUխ˶msѢb7oZ[#\R$ ׯ g6s `=^ۆm+WsssDBR;wwֳ놮#p_ ;eJ}X ^Y��?W������#XELZ0Ƴ,Ȃ+ D7]$[h;]qm*MUXegG , n7oKX 8_ׂs0жj+뢢{5mzM?<ʊ~9t VDd{_*)SX:{A?|~jA]`uΚ5}myR_7npiu٣N5;[Kַ:ټ={ȑ#Z]QtUl4koR- ��ƍ�����@i}n֟}|]}Ʌ+ j2 NՇ~W &*>jK 2Ycl+|nPh˃,`\:W^>UZ@/=zt+[ , ~ _B[>ѕvNVka_nf!]``_;RX]1fM8,�;/X{{V_dC0mU˶W ��������Xz3JLyi35 ,8˼9�YsܸqK_tE^Zf۲c m[%U/}_k0Z(}{}$PJ`@~GƏ=[Vj%Kc*2-\+ֳ;ԩScW:uOJJr/nj}bJK^tEcw}3rȄ�������� j,@}9P;=0*]8}?~hg޽}?= PcRxuB; ,,ص7xp`U~Gnig,&[+Z]/Vl0ֱun58FM<BR9.;BW co9`8o]gS.cc.Y�������� ,]p??D[zPՂ`YVi9 NV=]]y*zԂ[@ȑ#nLZyUƺٍҍful׬fJ֍<tܱh.}6??l/\ r;g��������00 @YuߦMƪDw^%_}v6 ۹swӶmUo]T`hgoLس'3��������wV�^jW qVBP? j̻q*= m`i+`?L\ݼZ8kՔX;֣"ҽmstkςc]}K.vYk>S :|߹5Ϯ?9-��������Vx냏vYd.vKȪ{ngOZXjoo5Š�&Y(j+10qٲypUrժY3l[>|ȳm6tѢEf!ZYٓnu9^WmguBquMq~G+x�������'=;vФI^+tU��%yUvzOiii w$U4������ݣD*����������A ����������q���������@����������*����������A ����������q���������@����������*����������A~ѣPRw<9]󎷴{,]݇ o=r]=nmӽ �������0_1byi57o8c�������@BIw[_c_xsͯɊ$SW?ꪫ �������`0#X;{ ^v{oTWEV'|⭅Xzo3>������� v _K3w:XPԳn9}\6i7g;c5>ŋ-i-㊮ċ>ʺP]%?PNN77\=h"0x]whkn-i-ƺ&^_^T;s oplUb}6|| 3jȳ"5{_$z9[P[oyK[D7Fq}�������Yz`QfCa|V6o @,(y_WZ>zJPHOKy~|yid{65݀TqZcoɒ{K[Dgg \oZUٹW٣#GxNG}NǏwζ_ZZl'#mk\k第:UUՑlʔ)nXiB* ~6]oّ,C%r;~ؾ]fY;#G>omimY}ΧOk͞}kd_vlW\qgc6n8궱mc֭zwse�������@B>H/ UzY -HQ -*v? eY`aM3۶msC`jobgiQk=;;o;k~+tww{/ ,o~1c N^sk; >ng\Fpk7�66!Ν;�֬YޜcAن < 5۬3Y)ӪU4uV[7t�������"XM ? 9D3f$Y6 J.țӳ,HII[zV}fV]? . 8lyuNG6(VH[ueȑޫpм~HfrEO:v}G+[U}�������8xOV~7wp .Wк% J78o<&{dU2~_R`ѓv gVfn6&L6k`wyݠkCk`[A~ER!U=emwjq}]m؟,,"7xߍa �������`}\Y]=YW\Uog]V}e C% VZhpa;<w~BUĪ, O6c0�lc*4vܭپ.vֆv|饕-VOq*Rź:sօx1Xc `�������`ǃ~"W=c_xbu۞j7~ Ϻ, Vnu7 ,YhZ/Yڕ$YcgcRpQۖkAuKrʔ)nתRY埍^UGZxG sYgwɑ#G9ƪulVjժVD*O<3dL��������0vI]f%ݮW~3-,ᘢX[GcuV讻~_ם f <;{J1 EjSqEpdA+;/֯_*%X7(, ,ijPoR566_mǥٱ֎ƿeϚ5[ҖNڱV7,3oϻm'mgmuo+k';ɶ[U Wd un}׹m^ �������VӢE4zU ^O N}6ƪ7w„5k@"8Ç#U_| J-ֺ ulҥ%]nl= 7$uOk 7F)6ZZwrΩ%v|edd:~ VkOcmlYy;Yd]QTTz[�yKڗ=ŋ9.[na-.țۖݏv_:{R`g~ⷧ0r.۲ N뷵 `}̮�������``KjvxĎ;4i7W芆]|n50XY@iuĂq _y"6[�[yG`U8P5k׮M^O�����=zoATlL VHb]ZEE6[Eu蘲�������`@guhQq/ۘ_?n׺0W9f}o�������*~: ,<\~OAmַ1um Vƫ������� :0*��=1V} �����D:�ГGzw{W_%X�����@ +`����������AU��z]X�����@B*����������3����������*����������AwOm��������uW.]=zԛxh3��������GG}Rem;BoK}{֯_?ߛ,LJu_ ��������` XM]-zt?tgբV5yOSVV***���������0P]ƫE%z{~i/}YyVd`7uEw뮻} Vv[m۶ǽhQqjЫJޫ0 ��������`!XEL-_^;"՗Ǐ͛5O>D7ޘkuH7wB?HިQ.jmޒ%?~9ydgyZ#Fpn,V|)R=jVM�~G ٳGcm��������00&_uݚ:u."oK_}7ohrrrZʛܺu^yܐ^w=H=Z5Uv R[磌2l&3e7ܼVf���������j_=,OjlUou~z= oǪ-P{be6oӦ@UIZ5f0dm$_JJƌ tu׵*qPOU&[nEuwkh3��������` \}c/U#ZH38#Gܰ'糠C i{øqjͪq{UZ-_wK�������� \]0jJ9w}zX;|??\�΂81>cUc5iv/2ҕ.m��������0pvG}CJ(*th"7þ΄7}UuZugWY7sNB!]yޜE�������� \d]Y3r 2O>}yVΚ5 JKK;ǭ_Z**:hޜΛ2e;>飏"`~.-Qnn.Rw^wT7o }\%���������&8#9_N 仃ZՂy)?c|EgV,l۰wn/Ԧ`xk͚j7�>|M`g[66?F�ӟo]ǀeƎGqbw1ikkk#ܧů���������fOرC&}{hhh_ ��[8P5k׮M^Ov������8}߫VU��zo ������@O+`����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V;ᮗ"yK���������� f x냏*LOSw���������`5ǾЃk7/b=v˷����������N'q>mW_���������p!Xݏ?<\Zz3n5+���������`5]u@<xH[u}VB ���������Vg끙Wysں~xs��������� Vqy3����������fOرC&}{;¯zs'6o6hnk_jhh_#Gzs��@IfҼ]IޫɎ������{j6jF ?So}mWO֏]֗V�Ic�����@pZj&9_ܧ*���������G� W_av=TR����������*����������A ����������q���������@����������*����������A ����������q$5;}bǎ4+tſujĈ��];<@լ]SZZ6{? c�����@Q ����������q���������@t<>\��=ǁ�����080p=-]ԛ�}%�������V+yM͛7{s���������`5F;4q#oǯJJB]QQ9 l6s-z믟O>[fmM~^{L}nv 6Y[[wUGn詧bT�������Ʊ便ݏtM喙yk>h-m` `,##S3f\+›s,�λ+oVA]6A[s7no|^/ZTK/WOkvOk]uUfLBwzM٭Ϋ*/l={t>/Rm^j6^׬,wpuE˟yiwk�������EV_ݦ4rę7Tjj;wt;ï8護r`W0 Ô`pJ%^=ϿUFWM~(ilMnsO^Y�7G߬YG;+_Ғ%?W~~;BeJׯw?|:7]nW[[͑VZSț#ͳem6mݺU= wos}lٳou#Gxs};^ V܎y}Yo �������` "X킊7կ=ɛ3XcԴiW .p+߂M-ZԪ̪΂U^gw8,VU*V۰wn^X\a``7Y5u4 GXvB;;*K T*=<O +-l}-袋9}Xi֕\}=PUU~ Z�>}ߏ?5��������j'ժsn|nJ;twݪoʔ)n ߯P(*�XaobyEK}XUfFn>w`[Ocmƌ>v{ߺLg4߶',]Zָc E>_~7wCzرb-_^TʫV*ޞdԘ1_TFWQCXK�������`NjUwXZ ӛYdI:tBBՁϮuۙS_zcΰ'XiajmualAYg }sGABݻwm nڻ[%~W{s[X�j]s[h۸Z!oުVmǒƜObU�������>N8]U-J`ŘXWʬ eizK,0Yڭdkmo˗]Zȑ#̂cZ_Xf]ۏ VhQq@>ʞlUm*>*c`G ~} .o&s=/}VRj4;.^2�������нV;tV{P>F< pTYrV,F {ϖح{myK{z,F`!U,5l? ԯ$OW^Vc[iɗ^Zj}nlZe-,'{~ո`p.͛7ݟUWNOت~et{]�������.ժB C`ᇘ$Q~^os֬Yc, 7Җ[eQ.rdz4�`>X*DK_}S UᢱقG U+[-XL)1X-Lh[h'bug|:DUf^;_1.8.j�������0p&tV(|[lcvVef] lu} Т.JC=~^4 ,muwcݬZgiҿ^9ծ-~ׯ_xԪ-YWNN;t,v+\-*ΰp>6cnEl{!vfVv>?{-=cǸdR}v_�������&ժӦ jU`fUu;`{e%1cb a JC)6YHa:T�ʶe۷` U)^wunf!Pm+Pm\z-ST>޶_>GT!;8',X%奁e[TQRUێ1ٶCbт/l]vDiZբmwʩ^p[ R޿FwcUVV86T0m_=h{�����@HjvxĎ;4i7W /t,0,VŪTou5_8P5k׮;zT@+ҶJvzU>]VR({ӕ�����@U�hUZէU;|O=EwP_ʇBRUm<:k%_\'&jþ}@ �����V icZw6vE%d׺Cm8�$rOQε!-[]|������ nt<�� Ttܽ"}*MU5ylT*QF)efʛI\PR׬SC5Vr*`WUDJ[m@ \j> }H%+kJфr`I &6֊KUbsLe^[�����]���T*nR JlFoijxͼ,|Pj_,VNhTw'(Ͷ4}lmؙ͉_n2MW^w `Ugu'T�����#X���rP5+)tm�8-K93ǫU^S|WU폛e4=m TzoR25k_eHuqSmNV9JA/WʐRY ︳_9SeQӨJ_nU̶jٝ*h8lvwzx9������ x0hhh_#Gzs��@I*65 vEr~LvgI[ilFtZ5<XB/jl^u~=ζm,oTkkzݵ*huYbzx {׋4mdeHM*NeӞ/j(o=�����~��~~MjiPՄWZɊ?sgdvvMHלY&+,^MQ14jl,oЂ%xD͜뮃B������U��� ZU=bh%IJJK:sC9`%_}ڷXWh%4H` �����p#X���8Rˬ ]x-1֪Mz LQʵ5 rC{yRʘHvkۃcU@V-������8b@'|9}YX[X=%% LyfMwyǛ�ݡQUϕ;YQqV\)%O)<_ժmq-SJ[34}^76UYd;*\75TPvS֩끣$}�����_YtvY5 v}=ڳgX')??[�Ze9ʊU zArorוzh㕮)QVJH5LnZ `MJFR'joXRRZ9WS2"c5RT$_-&^+ҽ{:}isb�����">n~ZiE&{m`E`k֭=VǪ6zsUpM88Q 5vUlt;bLQ-cJWպ&O] 9G2sGm >/Q -IUFt BeOT֑2Aw<s*Nqv,{vsJTT٧Э0�����`BG}_R]^>=eP>566g[Ġ3n8(Gy-T%K~Sꢋ.ސ9Cz+7GξwxRTTuU=@9[o'<Ӽ[[~[to.tW)ѓZ5{[k*TVj^8՛ۼ(#zt{qP9u!�����V?CMtWxssnr~~7wy7lKڹs.R-ٻwe_QTr_']np?ճ>#ϊk`VX6EWz^^'*x,:[o4fW" n*:jәsvHEkЮ]6޺ς+:YZZiӮ3<:˛;ٽ]UU׈#m?'W_=[�������@"XM/5hsGü9W6\p*Sܠ7AT00@&Iwl{ӧ\zھޝoi?tu- )v]zeZ]n\ݖYX8_;w68Vu@;ޥKK"cmJuĺ]~]]w]q;mݬlVR]ݖ|ߵڟ=y[YWF[{磌 ۵.|:H{YXEj~nov?[nr~kڵkoӦ8ylYYY}[ܧU|s0MJJsC>��������'q??D+ ozO=0*~;o+Ǐw# Yaᨹ0jϞ=k[ʗ)͛7 I,, O>m[Vak}Z(Z�dYfMu$ycw ǢVAYGoXwj~솪>H^Wcm`cZkl0�0+p#? gm`48&~1~D��������V-֓^i;OW\Uo, Bn@dA^ DzpĪV?vڞDi %͘1c _Z ҂*Ǝ˂ X+Yc/*x ?+;bhjOOa0`DWڏ?z٪w�������  UXpunw�`lnAV)hb B-æhVzUmZ7Ek׾f]3B ~Iy7^=,pܝkW~d VU������� qXxuCUغ}9n/]o}W-^Hp3rYxoUVe9rHUmZ{=eZ3_iY7˶ܮW=OvoO̮_*V*��������}`5]u@g'Vy:}z؛3xX7dX ,@'*zSD6&iW.MOX{^=l}6)Sm-\pȯhS5O6֨?驲߮ݻ9}wm՛:*L'ONoº3:V<gcU�������Vq tgk 賕~Q1:?O ;`[hw E//m5VSO=>FWYe9glOͪYf~Ok,ݼy* V9??_Kܭ~`U?̳68nye^/3V%k*uSW4[稽jUn) Rk^ZZF}wk�������@!Xún;W ֚zYޚ pVV7MVa-ޢVcQ~fMu֯_7Vb<-jϮn3,l++{U7ʽ"7뮻~U^ig6lj͂lV{]U?[;YYde%smp)خ}ź;+`;F}cg<UV[G>>�������н>cM A_|qU �]a?p_i t$qj֮])--{un1�����{߂X�t4[jBU�������`B �8eֽu3l][M2�������� *�8<󴚛Oc�������0���������@����������*����������A:L0A#G^���������n����������*����������A ����������q���������@����������jB7?S)>���������VϕRʹBwz(7KOo���������,=;vФI^?w[>=9QtYk>��Q8P5k׮M^Ov������8}߫V;V-= ~AW9˛ ��U@ V1�����{߂ VjUZP1w���������`5ܧ_˛#Gz+����������jOS=v;=vf}sNV���������V`ꮇ #+?Q5Q:k0o-����������j|?9W_ ���������`p#X;U/t���������G[|?j|~4����������;8U'W9[ ���������t@ ����������q���������@����������*����������A ����������q���������@����������*����������A ����������q���������@����������*����������A ����������q���������@����������*���o4r%%T^o-K{3ysϜcpcorfRțp@˶z36���N���@}ɛӞc.T:Swmx{�"8M:OVZ^_*3 5Gu5ILެU.T-t|sMVC4`K.nf1o%|7^GGwCZ12/iWO���:`���Tϔ}հYew i\tj|ҳT٫ܓ/_p8/v F*wӿ;LY/mc)[kzq11>='9~2mfN8 7~F͋D*oLc3Nf;VTѼ/����*���m+ʹ~/UJqF8W7&{s::9|KڇjVьUntT4+GzmMV%4vMFg9B)3}-ga݅`S9e4;MZ\􈛆j}phޮ9CΗBT#TjT5kT}Q<:DO֎ЁzlhÕ5*6�������Ncg(9e=G*jւEdwR VV9 ͜<<</iC0E =tB[]Uyq³k;RJ?:Kz (yt2ntys0H8׽luOWzϜsvP>ڶ jtQ5a9z!ge>}hB?|91tL=C[^;W$kt篡=nr?��@ ���t7w ٤Y4e5>׊㎺j#qLg=Fo^Lv P=_}"2esM;ksdžvE/'0ޜ?ev82w #ZۙڌxjT3/ֹ3 ٤l[{|)T5|Sw[t%r&KԖ`c\e1^TjXfejc V (yͮuWf I5vfcONr]몴M_y,HPj]©]ڎW8qxqWgRÎC*/w&^o=yTj[;[n}?,NZyi5m~t]*n~yaT32s|ZGd=Vl:U;tg?=m:xT\ˉT<{3|[-Z\3oH0D9Vnk`{<8b(}z2J��@7#X���zA#41 p݋_jUQ nRuSPSgrY9acۭk҄xd<;ꨰiqnr;30f hٴ#~I kϼjdn⬳)TgPM�j8K j+y=:s?/4?0F_hs}>SvvqY8&|1zsm,?o1&eGm_Z-Zgt8OU<(3{぀I-i~ ]v>]~6Yܬ%U~˩Wѝg<'4Z5^nQQzݚOhʌÁJϑʹ3{f;PmNj=|D<K<Ry~7 }J&|&U~2}Fu֮C^C5+|?Wt?BP/JRδ=qe~I[eë'57r;6wkZ]IՆ_N:ZQNvBftB۬}ʚ̟���L���;L=G#Tq:ZHJi}l띧TTg/U*=4gƎსjusXH<-xaô9J L L8,p:+ROu:Wq[c**e?xvHme%nxGO;Cc_QgONte뻾PR=ÔuJG~{IT>i� >_js=ix 6$0W3Ľ^8m w-st6|]8jWHmy8ڶg2ڻ7T~T[cgT C]Uy e ϲcI­ T޵nTC׬%U|N޾=/G9lפwl�ݨJ9N-V~tD-NQ[׹{=oN9khm33mʟl@usnKj/tTU8s*sth*OE{!k\Zοf!&԰SγIR51ljvǽZֽ)<���C ���$Ϳl9#rYʛ ]*ߕ;æM'ŸԓsF*<$%_0J%OcŒu^P̎ͽzO;w?KHG̺|ׯ\GWp1oT@kO)Umf KF)oH<2 R~u<tv8-]_.Y*e:T)3VIԵ0 &Ywf뺷Ie˝ǩgsq0 i_de?2Z W|ca'5sosʯqnC>׹w`a:ƛ"P5cfϟ?/0?l y?>ww77se/Л'uU&*;3&{U!;ܯs'T}W49u+aFgEeI?{p۞Sڹ6Vj?HU*粖Ԍ!Q!؝G41s^RփgjkGz#^���@"X���_ VIJo;51mse٣N9kgQno8kQp*vZ~\#ZU tD/J:|28dGtDՏ7+ޡ*_<T!,| ?sNc=&)պuBk Ɯk59 s2ӣ0D;zpjcD&}O{|ʺmةURF*ohwJn8ekZWO8mmujQU?e!yMhWz4͚(\uź c^w w>?P7DcDžC֎�Oq p,S']oOMQ5+|DUgS!˝_;洹W|K)*[ccT͈QmhvmBw63Z%)k wCaʸI>y;qZ -ܛBspxs���"X���=IC+e?_985C* 5z]X/誵{$_3LE![WU7RiZppg4ǟY<N UtQ فɉ9 K9K > v__q|_<U=Cn[ vLͪ;j{7'Uv):)yn#eK5_jTV+ⵧQ*{v ڲ#\_pJ5BKTÙ)s*3D$zm|wBj;wGk (ojrH-\9TSVЂ}G/}]Q���n@ ���;Iz򵳕7,-|cٖm%mraՙԦ+ʶF(v%֝Pd oI+Sg,kH<O='3Ln0gJroRpBW,=ohB;?|ٶ̽'Tckڸ<ޠJg'հ':H8yc|ji]L{Rnt6vnORױ1%{YɡʜaRmVe7~h@5JT{*{յg5Q*{$IKP ~PFo}"]۱UP5,)\:숦]&i;}Y_/Ty: e|Jf5F55u։dnpB'U4Θ| opRotљ?N,ZIg_Mj٧ғծ W[츛Us5=}������y'w2x/ӆjaT*^פ&w:<ѱ,GokғnwmŌ!m nBã8 ;6;%<\sFpΩtKQmkR3Tv9Ǜgs/WsGtʓj;vC}K7&_U@y!ֵZy2D:&){p^lͿmV?tX 8Mv;bQ/p=�v=JYν~lI:mz瞹{J;SKu{͙JO>:z"pOCZU*g8 g+ogN$?Ňy[8̭X<,IsHDjj҂;}WwBι{m‡{."WUV; _3knRwR]c&!J%Ye{{<o;Z���:`���HPuQoiVq޺M'auܬ*m TTiaEeՈa3~Be[94XpU`}O*n;g!VsB5U`iÔc }5*LPqdl4"xShˣ1*o#CtވO?Ո PNS_sJn::ʾ/+sDIKmFg5ɪיf0;gSÕj2f5?ݿ?S*wX3RV1<y&~[yUbh:4(k?_9'[1'ָ^寣.*ds.fq?=m6v"n/&{-Lezo}ƻY,ǹom;6/|/W'Ts՝F'pR}ҁw3&.mV(%Ij ss¡ݔg⨦?୿dD{6Y2D Z}_U3Ÿ5vg{;q/$~m+gP9+=qB}PŚi|u0ZfL}/q����H *���u&x?4C6S^0Ua*\dm{aTȜzPDMиɪZI<gY7 ѓ5gƨLvv%(+Ⱦu`ӹ(3I5Nʤ$>~{$=|n>B[l\ÕH]} *?ol99#$exUu{w m`Ƒ<us uƄZ5ON3TxSo;u־_竇k_h%RM:U{|(mܷiI*X2Lo0\O:zpqU'f4>㠖 |v$1:U?h * Ϡ; |U֬3}0 iwIʙ}�|S轐q8m^|'Fo{ݫFRɚpʸQzrHmq ii+wGj#����$*=;vФI^��7ʰYvSO*w1�:ִ3R;Q֞>���п߂V��:D;ս{O ?^a ^غ22yp3xZ.3uk^LI*3Y㼊Ѧc{2hVުi;*Y9~< Þ}A>ܧA?0wp=76���{]����~*RՏi7TU_U���Q ��!*V}c*�8TܗZQ 9l켡Z0{RGq����aT����ʸ=_{5vn(BU����}#���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������#=;vФI^��7I@լ]SZZ6{? ciժU3��:6k,�����t`G t����[]���������@����������*����������A ����������q���������@����������*����������A ����������q���������@����������*���^QTJJmftA6*z3������z *��� kYؤp7>Cܙ[9WQ6:5O �����ЫV��DeIsRțݸU*O*^_s9Xiyq{W4IIIii$Jvz9fUFc_"Ueκ*9+swmB;ЄT9+|$|O~>g]e,uxk/>8خ?Ѻ��@D ���$rTQJA(57RT)sbvPj<>-m>#$5 F?qS97[M2夥zS-V)śK*̙,fvƒL;X|&F,¡2g-JqۣNqOk'kX}~Po���U��� J VJ)-,e8FO|Yq]RfķYZ ?-%#==թ<Z97fuKUe ;(oU8ZkŹS>}]r;3nbM};%S}yO��'���qԬ5a=Rzqm7픖&M2kQ]rmryIxݱKpy[Ql˖Uf\^f >pzy96~dri<gC|fI˜co=momO]:(7>i[J[SW ;_e+b7i7t7YuK; 9tÿ+f_ USfoJn:=lUr;XUk%Y`5 sE*>[C,估Js˒j_+4 T7SMy򶳯ZۍӋ����U���#MҶd)+Ԧκ/ܳXWI#[#' ҿ-;7ٳ%Fe¬8ml?.GTwl؛e:o `M.gaRu?Ppu49\mN.iƭEtV8Xy=rg;zb\~]JӦN{U9:>پ7/kscE:ipƢ9gZf7k]lKUP\݋ uڪ-0~bKEYyc[spnؼju2ح* &3MZ] HR#Ι,)RެX+u*?cw[% :Hˑv9jgY_KޒIl9hc_g쮪;զ׼=OsEtEgemkNz:!gUΘcVjSGG{,^E>;>���V��K8R ҁX~ ;pXd!0n|5κb M"g碂ٽ{WKHY޼vmvp iwII9qZHc}IkcsRlg~(\瘜zw>JE~9=ζ tl3?|Ձ6|W* _tǺivg9oe8.;LGY?3;װYOsp=iaP $ej^VݵE%U8-:9)MhzTStU`eͅM*٥g< cֺŒk;CkMʊ)Ti>\Vm)Sǿe1řJ V9[*T UR>_ji//z-]vX>e4n[4ۧqqFB=ڎV޼XYvlCF_Gc|s_j-EΖkQww>тc7kzW0pƿN7%3G^��@ X���Q&iYHJ_zr4zhx~R@3^ m3/;F;K~y%̹`uekH׆_IjjMg ^G y̝s,mz6d)ؤHO9ѩ rܮ Uu/;<:m`!u %z^~ଟ~s~Nk^n9ǻ2y,uvf;צ;:YTX;|?4f; fvdK e-q5v봨}X %�|fݪbv>f{MU Tڒ{bYz�ouY&+A_" U: ަfٶFjU_Rmiij5aVU^a;bQ-2-י8V2U:kޱDX"m1voyĻGοr?hg!o_ ytN26~m ��B ���tdWzP:Ao T:jS@ze:^؟Ro @kj3J6v::Y+g;Zg ^pYu;ZU2Y/V׿LMCذ?sŎιO,5^j5vs\V;YعNە<%-Lʬ<gY\^{ 5ns9E~`׎x՛=!z)6@HjB]آNyq+B/a]N0sbo{©Ju>~q3{�V_j6wmJҹGW%F*gUCDy\qsD(9g~8,sqmtpKcN{[hl3Ul?������-[TQgo#/rŒAw}c?¯S 5k-n׎Vya/&|Sƌ=u[MntoAq64`~ylqίy,iQp75g~^fwT;FcU68?jB x|`*FY=mRUzJ#<.j?8?ܖB愮y!Hvw|C豊 ' Gvn֞˽m5Fna0:yq)�����qd~,^bL<~=&eg1i{j6cF*L5uh5KJWX4zADi̲ۜyJ8E2YnJp^O*ꥣxXTjg8ϝ׺]@sKq;5zAuVHɲrگi< o Ou ru0WEZn  Bx|[˕:;rA0z<;Sgjb U5ڹؼ*"ywm *_ڷ*FWq4j~=+SucK7nNp/F]s6u*SKa��� ���@ aT)R>K TX69ϗ}G0/&O w+[TY~"Rх3B`Y?;> ?'y}ۛ4*x6&XR9&u;7IqGw}{{성_8QSV;mu l9-mhmsz㴭߆q>$-I t<y^ ra眭*i,gXA]6랒v}ֽ^egB/\pf|ν|m[HHbmսjIX]qWJ6 j{ե1yC\6 U|Zw^l'Mx¼I BpvI]{5-rǍj���`���ge Mj\-MOuWldb.iY|XxҥRi5bkRWm:M rowN,)WqGWcZkpުn'H=ᜃw.tAsu^nWv]~@sn\!6^s6,YsܥKZ],=,BY__kV@usIJYt6uGu/FLř.{ZB˹Z[An3 B oPAGJFGפ(2{1hƸ*]vu+` ZCN;կ~;W`Mz1Zu}vm:kmGc$r]Z7؉Thg(-9۶*zv_%{m]wBUOKeV��pjV��DCZCnMғ҆%-k?H%sZBT=%ҶLkwHg_E^7YzY}BԾӤ|y=cV:4x -pΫ9mN[dJ_tQv]9ag~h.,(pus,VQrzg+y֝r=ct_>mT{ p]aW"18i EpqfdXcgl#)c}m0|IJYq?Th_s1i]x|n7*QV'BvY·$zjOIV٘q9Iվ讀V*_.u,iY6vWW];m>*|V#?ZH욷ImtO"z{p n+̮gs^1YÌk3,u0L[emv<^:8gݝ|T{ l3Zp,֏Y���o$5[2}hǎ4+��&{k{JKө w\O[+ZMҾU'qޗ*5>,mכUVm:*=gժU5k*qؖggXeؼ)3@l+-l0_ܧ6l};)b;%V4fmNMB׼;Y~Ϩ;1C{ŝP_|Vvxc_���zoAT���ػZ[N˒XIx:;<.Mʋ3:*%7enO *^1$xͻF٨*dS5=tlnÕ97k?~���V��bYR˘KtxMKոݞZ׽͝XC5N$v{o [ڛreVgVȩṪh}&,-s}lۜʂ ��+V��v\pdgԞxNAzF]ޟb[pS/06`1(-H /h]z3;2fm'Ǎ -l1ƪ wG?><u۶w˹Nֶ>t ��00*��@ǁ1V1������������������������@����������*����������A ����������q���������@����������*����������A ����������q$5;}bǎ4+��&{k{JKK^w]&yp8=Z{�@f͚=��@< U��V�����П߂ ���������� X���������8V��������� U����������`���������� X���������8V���y��4IDAT������ U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� fOرC&}{��$yUvzOiii w$Ud�����Go`��C������=��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`����������HjvxĎ;4i7W���M8P5k׮M^�����/;ow}z"_zs!Igܡ)(5v`��C>U�����aOG^} &2 ttY-_ ��������� RB^ϼpα?"X���������*UCα?"X���������Sպ#U���������`Hcα?"X���������8V��������MJRҬJ4u2%ٺK:Ĺ.˶z3�������~"؉>kV\Poԫ,kfP}??yKoܪ9/׭WԖ__55{ّ#[oެ۟z 0U��������00TLEy{\UhH?nUo;C}zz;#q?ND[N[<S=Nbl;vx���M4{����@ϳRI]N9M:^U,'kwMRݵO3BV)śuQ,-٢ELwbrwWK <%-tF<oߡ?Ե_ߨ֋ćzVaS~+[_Ο^O'~]:jvܪ/]?uoc~?<X��������Aeߞ*]>x=u{?1[g*՜v+ORv7^2鯾~Ct텫wQxw}^o H V �������� 04%:_yʼ$<˧kZNxըl[6WY]}Vb|uXolYrpGݖc5;U1z:-s/S݉FU7S3U[Xߙy2U8- :4zvn3Ur3>ަJXbj͵c:ƶ6;bv4~IWz2||LNT9']K?ﲭ^X|!>'Mq_ύ*հAK[揽<_5z[mgղ5 (rn:*fPVD+TߟuuӷT?jXW ҧBˏg޼x]3?Vޟj:_5zI(T׬b��������ٲDfsI7#b[sd[Vؼ󲱢9/%nijICw.pTۛZl{8ݙ_\7ujkN޾7e,\/h.#eɥΑιeo54Uv \1;馊}ޚ+^wJiz?}Eナg73ޔ\Zroj)%[#wMzx{1z)&mxp[-U,&G6/zj{wlǏ6i$k9{'>cXG+RPwomeZ7zܲ[?NXα?b�������� 6jnUv)lenT|URhm25MNksGOVXrMKEjgU2kW_UVz U*4PtLG׺ݸ-.TsL@k=Zҝ_-R:P G|TW^JHy"UWʐRYuw oSnzR>wU*icOV֬"g*ufhS%ESx_~ <=[vT~T}9*ޚ7h!;_xP򗴭-z jV&%[%츷wA:oXbRٺ-;m]o:P[9*ūMYE%-תb SUE3uzʉ~@>u}Mugރ[ǑJvzK*s51܋pMzyzh钤1:ҴX?{-VV�������@Vw:BfjRZ]\4D/VIW#enZZݘlݟ"]6Cj|\rNWUnn7UFʿ6_ֽZ:gW>ɣ#bl<]Y}~Id,c]!լ,S(e***k\dK=9WuթrqRU%ʹ5YJ^%)Jw<Z<j_J_ ϟR6s5jjgYeGvr%(;3WAd~[CJBUg)uTx{lZmJVY^Ci>i*&%<o3io{Y)Ϟ?ئ[{֨PtQBiEHxJ(#pf(;O_~]~*#zOa_ܭ|É/k^[7tOt_1{l}U^~Urd}|_V�������� R~픶Ate\<node^[lF՛"^Տ(*_\2U.<_3 !5j\k438!d$4iDW;~vmS϶Qls5ƝF3K9c^oro/pڬT5[ҮZU|l<)sZ>]#&)<h+"NmDi+U|f̧eq4R rq<_蛩3_Z]<xk_IuHO8'ެgkܟ\K_qț90�������~uޮғ?V_IhTV T=]EyYJNׂ{STp߬Uv)W+0{yZғ\ҍ+UlLѻTknxͼL[[w1{~u{s6;O%.)z?DMaβaS^tk{Cz;/zמ's,U��������0pIQP6njoj^sM4K֕)e )V[/RRRz?HU*>CӢDvuŪhSJ%6爇&W^Mᆳ-cJ6JR= =T~VS6շ=)KlT «&P廼^6ko8ZV.#mzu]>yYGtou\Ul7;F0mR͇nԃz]'=TzKV�������㋅*|^xjټnٷ<MP٪W-H qWH~7Y9%Jw`2 yQˋT_fɑBZpgtܴ^P?+%K6"=Ѥmt~`[4Rf6F*ԭ-1zRL4b#]6J=Z=Bv/hgd*uta@"yZt?a㾯ieŦu{? =+-O4n׽93Tg(y(U��������0畝R8G\8]ůrMJn6-K9(Q5lg/ց#y=%Zk~ I4RUIUs:9LQ"㼚Y\^wΊW)_ l#c~2Ui*#լT}B\+#EyW Neej|d:/=_+)WMWevk5?:ٔؖW U$C ը8{b\6n;w_E;*Vlozg2k[ctm|+[_7H%k=ir,U��������0]Vٚg2)[oPo(Maro/PmPM@%7(+#Mʸ^*)#ԩY*XR٭+>;j v.xS4j5s\*s+ܧs,pMRmCJ"IUM |](=IŚ=f\mU-q$NPMzfaΩж uW]7LЖV.}FoW.Pv\xR%_bHj��������ƕFoӂV]J׏b���������-lՍ4jirU!Igdޫα?"X��������@eWUPӅL'yMс^ >vnv*���������Zxcm©9*qQ?aPV9ٹ9G ��������� ;?W}r}]<r7kDYj?"]v_xKU���������`wDhWZ0lZzsU����������1V��������� U����������ϻޱc ���ݤIg������_��������p:+`����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� U����������`���������� X���������8V��������� J&%)iVBެcVMX^>Seo6y ���������1ȃF{Vl^Fi|q<ZI5wMOEհffC$g˫p[S*z C;u^JjKz 0 ��������``տVӐըqUluZ5AsU1jƭ*/WzWhv)c8ެUʻ[84q]gP7���������V4hPZV֪jrs3zoNwiTo )mh<fg:* ݽXBX<GY=yjk߭wW΀ ZU=_ex ��������4л Fu|~guz{8 -XR mg]d'_RdoVڧ?X7ڝuUY��������A6Ew|P[֕ykUcЃ;LwߙQT-Uƃ*׿He ;*U\Rg[YsV2͏Uu(˧8l7WVReumfGTEyXwgh6gn"BYY3]E)՛ʸԶשl^2/ ˧kZNx]!UJҔj jE+e̟"7 /V^*mѭ}emm\Ls3Ƈ_K˵?{lol{i::V3kpkEzx?Y{"{'9㟏39{iSN?k:6֭;ꚺ1ڸ" jM6��������@oj-K@ uwMTr:/v_ׄsUb>jgU:s<E+fL|k4eDZkūζ6iUߨjʌ-HPsWYoBŸU B5;#QP*ͺLDRT*LZu^5phG2?UiFսX7:bQiӕ]5UsU:COY 5_9~U7'8ʹsۻJڻ֧i2eMV my5ổ^UzDgEtƺ�������� Vm󘑥 [uܴF+9ʼQ Fm_Jc6hZ-*-.TYTZSKqGRڌUhv>oǤ~eʳaJFu[V1ݪT:3Y2{ݢʷn|YvjB{th(6XwF<*PվqMqo-ւѱ#ԨZڨ *6^M/*gJ=*أS:&wa*Vly~qN5o ;m*s 9u<omheN_6L;95ժbSU68ûB+hūkCR[ٲ玑Wi *��������@BoѭJi*t^oR+kjR'93lS0սZ:eO*ohEFKNDU<U nѣ[AS 5+h?e~ZH^M]ɩʻ EkCT9B*Qe~ܛԌ]\<(K7Řt<Ri]zؕd)o^8$nܟX1jP=^Ss=AK<ih<_Vd:rDs}Shx^Wُ9=toU lݖ]4_ŷ;<Ϳў5���������.mz6}Xitrpj )yQycZb%Oqgcx0V9`塠4(fCƀu$QPs'n-cflzTfSFc$˜x+DJpoOzyd^ݿ}o?⺬jolu JӧSX1n=a]MO>8%./{.3#:QskOO^Y0'ʡuJՖ#q$k(p@k_3vDmL~0ЬCsRF{vth%<NbZVΝ> wbmǡ�����;oս͛KSƧip̸fYpTkRQ9~JTFSlSTƖ{?|VSZ) h,c_L)Y}tUܷ5<7޹" gW=~9[⮺2oE<s�����`@mJ1vLkΎ/U6G1;4jcniT 84*D|ˎP57Īn{}-sdPzNO[ç6wµCci⍱ε=AK7GTfUM<eWTvk%iuӰcaվ9gcڪXq}<)<7ɥTnP?hW#mLGߞ#ZyS۷dq<a_������y]V_~|838v^]6Gif1vriҧnj9JDzwT=7]k{jЁؘ\k*c÷|}:u1zXb۴4!^"VM8|/7]yZU>\ZgI,y)ZSR:oRFd]ځS~QGeu̾!^bz1,{55)=ohXr]ib1Q6qGkg]~Թd[/.Gl_o]M ~3�����`;?՗ƶҪ]edxai6_m]--5wE<".WX]3WfLh{sY@Om-J 9_nykly1W>z_X/(=߯U"sy\]Ni{ux*11,;yl,oϧİKyձ=7ƪ VĶrk/Ć1/O(鬌dťg":/eY3'͗eXlvVϥ禸C_l kw{1v~ZҫĪ������] VٖuU6_u],6?Rj1v|v]4eըc?Ƈb*+Nw6ĚCn6.VmY>RVź_m,O9f^448V,U,̉oK%1gZەbKƦuLJ06ggGuKV̎%ˢrbbfqGcѸ~U̫i}]4Weƙf][<T ZVJZcs z.ytUcbɿb۷ ������]iбT׋v555^;zh @E@ pڳ!�m����ЗsPuii!^xHPiyht:-tnjS������2n5w>x]\4l\41{j~.������`uya+jhs����������0X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������( X������(0XI+vܙo�Wd5���� D}"Xt��}����  ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P@ ������P`б|Wܹ3jjjҫ_{͖| �z+ƌ۶mѣG{ggV鞿����P �׶oߞo]tQ����t-*�p^?S֭['?I,[m<Y ?ygϞ8����00 S xذ�Wud;b׮]_"E}}}qf}YкhѢXre\ve1k֬uwknn|螿����rՆ1iҤxń v�F*����=ЦM{Wݻb&*�JSSS����p#?x\0ojllsT>[�����gO R:C_|b%־ȑ#�����$Xalx_vq ������ev@| bH-������@_'X������( X[n������*jnn+2oĖ-c̙������xt*y晸3bӦM������xѨQbڴiؘ������#X������( Xa/6?xg\0Z{XS{:������-6jd/ᗾ~ʒq������orFq%������``Rhܸqnx������X?~v8:&O�����0 :Vo;wFMMMUz+{oْo@7lذ|hnn|螿����P ������P@ ������PPb׮]1z2dH�٠| �������������������������M6ŠA+WƑ#GbѢfJHOkoF\{cx3V/(sg'{ϖ>U^;pΥ�����KJK.yL4)F*) cƌSgwII7swJ'>'1w8vwٲ}{SL0!?̜93;2>KNzһ=g�����@%X;;dKNmrx5nܸV{2-{ 7ܐ3�����.mA{d˕O}pV9K!k^ ?ST}>=g�����@$Xa.??e7_1)[?o( ?~?c~yn# ~'̩'|vtY>~.4g:97;3gyڴNᇿ?Btr_%m+>9љ*ey9.n<-!ޝw|ߓl����� VRC^Yfwxۼi99zGS)x{tʕNR8ͮٽ{W{S|({bڴi|5k{ٟ֭[c߾ְ;}fɒ5ҵ57m|JPntwؑ]󁞭\NXk<֧;ڇ#}~Z֭?>;r8ޅCZ!*�����u8>?}y E|)TMԩS{l?UB~E[νYpX2<]%/^mСCٹ35ӵ=ҽFz=fΜѭ_LwUv3}V=]*AR~Zs ����� V{eܽaSQ;2oH.5jTwT ͜8qb*wʲCMamL B+-ZF nSmّwgg<�����@%XE)T͊7?¹z饗N6-WL^~z5 Zi?/ϒTZ�����#j/9_>v3.&]:2?BWH'S[^RhyHHi'/g^?>K7f};lN>�����?.__| ?B7qz\t:9M'O+W-#=7Uޖ]m+, _,1***Illu������(0ꙥK֭ςdz5eʔlֿgAݹHsΉ%K3,iN!> ><fΜ^:#G>Kanmll[" O KM)=[ '������]AÞݳ? U ?״-w<;̎ d˗/s644G;'?,P<yгn[~<}6<SN)NOS%g/Ұ<p~UWY ׬y(寴]#䡀odAz:'ݷ~)C7yiӦV;ڝ5�����pt$;w|WvGΆoP?*;6����T������������������������������r2dH������V������ V������ V������ V9+WƠAkpy+������ <UN>]̜9#ϿQ �����%Xaq}MR{ǣcncǎšC������X=lEgO%m˕O}tzA*������`Igk������o������ÿuܽaS\6rx\1Ҽo1bDTVV{������0V{A S?}ML̛[ cƌn9r$o�����C RĢ9|ϒlf{6g-ߌ n!C}V �����"X@\_dz{gլ}M QSǎ. YS ������`B틭[F]]]������`HC�o{+&yV�����` FFkږ4~:������{=lҥ#+{-O,R������0*������@*|ɨ'-������0V9+WƠAu#�����EiDZcۛb„ y+������ <U������U������U������3 0/����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/pie.md������������������������������������������������������0000664�0000000�0000000�00000003114�14332737457�0021430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Pie chart diagrams > A pie chart (or a circle chart) is a circular statistical graphic, which is divided into slices to illustrate numerical proportion. In a pie chart, the arc length of each slice (and consequently its central angle and area), is proportional to the quantity it represents. While it is named for its resemblance to a pie which has been sliced, there are variations on the way it can be presented. The earliest known pie chart is generally credited to William Playfair's Statistical Breviary of 1801 > -Wikipedia Mermaid can render Pie Chart diagrams. ```mmd pie title Pets adopted by volunteers "Dogs" : 386 "Cats" : 85 "Rats" : 15 ``` ```mermaid pie title Pets adopted by volunteers "Dogs" : 386 "Cats" : 85 "Rats" : 15 ``` ## Syntax Drawing a pie chart is really simple in mermaid. - Start with `pie` keyword to begin the diagram - `showData` to render the actual data values after the legend text. This is **_OPTIONAL_** - Followed by `title` keyword and its value in string to give a title to the pie-chart. This is **_OPTIONAL_** - Followed by dataSet - `label` for a section in the pie diagram within `" "` quotes. - Followed by `:` colon as separator - Followed by `positive numeric value` (supported upto two decimal places) [pie] [showData] (OPTIONAL) [title] [titlevalue] (OPTIONAL) "[datakey1]" : [dataValue1] "[datakey2]" : [dataValue2] "[datakey3]" : [dataValue3] . . ## Example ```mermaid-example pie showData title Key elements in Product X "Calcium" : 42.96 "Potassium" : 50.05 "Magnesium" : 10.01 "Iron" : 5 ``` ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/requirementDiagram.md���������������������������������������0000664�0000000�0000000�00000010577�14332737457�0024513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Requirement Diagram > A Requirement diagram provides a visualization for requirements and their connections, to each other and other documented elements. The modeling specs follow those defined by SysML v1.6. Rendering requirements is straightforward. ```mermaid-example requirementDiagram requirement test_req { id: 1 text: the test text. risk: high verifymethod: test } element test_entity { type: simulation } test_entity - satisfies -> test_req ``` ## Syntax There are three types of components to a requirement diagram: requirement, element, and relationship. The grammar for defining each is defined below. Words denoted in angle brackets, such as `<word>`, are enumerated keywords that have options elaborated in a table. `user_defined_...` is use in any place where user input is expected. An important note on user text: all input can be surrounded in quotes or not. For example, both `Id: "here is an example"` and `Id: here is an example` are both valid. However, users must be careful with unquoted input. The parser will fail if another keyword is detected. ### Requirement A requirement definition contains a requirement type, name, id, text, risk, and verification method. The syntax follows: ``` <type> user_defined_name { id: user_defined_id text: user_defined text risk: <risk> verifymethod: <method> } ``` Type, risk, and method are enumerations defined in SysML. | Keyword | Options | | ------------------ | ----------------------------------------------------------------------------------------------------------------------- | | Type | requirement, functionalRequirement, interfaceRequirement, performanceRequirement, physicalRequirement, designConstraint | | Risk | Low, Medium, High | | VerificationMethod | Analysis, Inspection, Test, Demonstration | ### Element An element definition contains an element name, type, and document reference. These three are all user defined. The element feature is intended to be lightweight but allow requirements to be connected to portions of other documents. ``` element user_defined_name { type: user_defined_type docref: user_defined_ref } ``` ### Relationship Relationships are comprised of a source node, destination node, and relationship type. Each follows the definition format of ``` {name of source} - <type> -> {name of destination} ``` or ``` {name of destination} <- <type> - {name of source} ``` "name of source" and "name of destination" should be names of requirement or element nodes defined elsewhere. A relationship type can be one of contains, copies, derives, satisfies, verifies, refines, or traces. Each relationship is labeled in the diagram. ## Larger Example This example uses all features of the diagram. ```mermaid-example requirementDiagram requirement test_req { id: 1 text: the test text. risk: high verifymethod: test } functionalRequirement test_req2 { id: 1.1 text: the second test text. risk: low verifymethod: inspection } performanceRequirement test_req3 { id: 1.2 text: the third test text. risk: medium verifymethod: demonstration } interfaceRequirement test_req4 { id: 1.2.1 text: the fourth test text. risk: medium verifymethod: analysis } physicalRequirement test_req5 { id: 1.2.2 text: the fifth test text. risk: medium verifymethod: analysis } designConstraint test_req6 { id: 1.2.3 text: the sixth test text. risk: medium verifymethod: analysis } element test_entity { type: simulation } element test_entity2 { type: word doc docRef: reqs/test_entity } element test_entity3 { type: "test suite" docRef: github.com/all_the_tests } test_entity - satisfies -> test_req2 test_req - traces -> test_req2 test_req - contains -> test_req3 test_req3 - contains -> test_req4 test_req4 - derives -> test_req5 test_req5 - refines -> test_req6 test_entity3 - verifies -> test_req5 test_req <- copies - test_entity2 ``` ���������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/sequenceDiagram.md������������������������������������������0000664�0000000�0000000�00000037634�14332737457�0023766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sequence diagrams > A Sequence diagram is an interaction diagram that shows how processes operate with one another and in what order. Mermaid can render sequence diagrams. ```mermaid-example sequenceDiagram Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` ::: warning A note on nodes, the word "end" could potentially break the diagram, due to the way that the mermaid language is scripted. If unavoidable, one must use parentheses(), quotation marks "", or brackets {},[], to enclose the word "end". i.e : (end), [end], {end}. ::: ## Syntax ### Participants The participants can be defined implicitly as in the first example on this page. The participants or actors are rendered in order of appearance in the diagram source text. Sometimes you might want to show the participants in a different order than how they appear in the first message. It is possible to specify the actor's order of appearance by doing the following: ```mermaid-example sequenceDiagram participant Alice participant Bob Alice->>Bob: Hi Bob Bob->>Alice: Hi Alice ``` ### Actors If you specifically want to use the actor symbol instead of a rectangle with text you can do so by using actor statements as per below. ```mermaid-example sequenceDiagram actor Alice actor Bob Alice->>Bob: Hi Bob Bob->>Alice: Hi Alice ``` ### Aliases The actor can have a convenient identifier and a descriptive label. ```mermaid-example sequenceDiagram participant A as Alice participant J as John A->>J: Hello John, how are you? J->>A: Great! ``` ## Messages Messages can be of two displayed either solid or with a dotted line. ``` [Actor][Arrow][Actor]:Message text ``` There are six types of arrows currently supported: | Type | Description | | ---- | ------------------------------------------------ | | -> | Solid line without arrow | | --> | Dotted line without arrow | | ->> | Solid line with arrowhead | | -->> | Dotted line with arrowhead | | -x | Solid line with a cross at the end | | --x | Dotted line with a cross at the end. | | -) | Solid line with an open arrow at the end (async) | | --) | Dotted line with a open arrow at the end (async) | ## Activations It is possible to activate and deactivate an actor. (de)activation can be dedicated declarations: ```mermaid-example sequenceDiagram Alice->>John: Hello John, how are you? activate John John-->>Alice: Great! deactivate John ``` There is also a shortcut notation by appending `+`/`-` suffix to the message arrow: ```mermaid-example sequenceDiagram Alice->>+John: Hello John, how are you? John-->>-Alice: Great! ``` Activations can be stacked for same actor: ```mermaid-example sequenceDiagram Alice->>+John: Hello John, how are you? Alice->>+John: John, can you hear me? John-->>-Alice: Hi Alice, I can hear you! John-->>-Alice: I feel great! ``` ## Notes It is possible to add notes to a sequence diagram. This is done by the notation Note [ right of | left of | over ] [Actor]: Text in note content See the example below: ```mermaid-example sequenceDiagram participant John Note right of John: Text in note ``` It is also possible to create notes spanning two participants: ```mermaid-example sequenceDiagram Alice->John: Hello John, how are you? Note over Alice,John: A typical interaction ``` ## Loops It is possible to express loops in a sequence diagram. This is done by the notation ``` loop Loop text ... statements ... end ``` See the example below: ```mermaid-example sequenceDiagram Alice->John: Hello John, how are you? loop Every minute John-->Alice: Great! end ``` ## Alt It is possible to express alternative paths in a sequence diagram. This is done by the notation ``` alt Describing text ... statements ... else ... statements ... end ``` or if there is sequence that is optional (if without else). ``` opt Describing text ... statements ... end ``` See the example below: ```mermaid-example sequenceDiagram Alice->>Bob: Hello Bob, how are you? alt is sick Bob->>Alice: Not so good :( else is well Bob->>Alice: Feeling fresh like a daisy end opt Extra response Bob->>Alice: Thanks for asking end ``` ## Parallel It is possible to show actions that are happening in parallel. This is done by the notation ``` par [Action 1] ... statements ... and [Action 2] ... statements ... and [Action N] ... statements ... end ``` See the example below: ```mermaid-example sequenceDiagram par Alice to Bob Alice->>Bob: Hello guys! and Alice to John Alice->>John: Hello guys! end Bob-->>Alice: Hi Alice! John-->>Alice: Hi Alice! ``` It is also possible to nest parallel blocks. ```mermaid-example sequenceDiagram par Alice to Bob Alice->>Bob: Go help John and Alice to John Alice->>John: I want this done today par John to Charlie John->>Charlie: Can we do this today? and John to Diana John->>Diana: Can you help us today? end end ``` ## Critical Region It is possible to show actions that must happen automatically with conditional handling of circumstances. This is done by the notation ``` critical [Action that must be performed] ... statements ... option [Circumstance A] ... statements ... option [Circumstance B] ... statements ... end ``` See the example below: ```mermaid-example sequenceDiagram critical Establish a connection to the DB Service-->DB: connect option Network timeout Service-->Service: Log error option Credentials rejected Service-->Service: Log different error end ``` It is also possible to have no options at all ```mermaid-example sequenceDiagram critical Establish a connection to the DB Service-->DB: connect end ``` This critical block can also be nested, equivalently to the `par` statement as seen above. ## Break It is possible to indicate a stop of the sequence within the flow (usually used to model exceptions). This is done by the notation ``` break [something happened] ... statements ... end ``` See the example below: ```mermaid-example sequenceDiagram Consumer-->API: Book something API-->BookingService: Start booking process break when the booking process fails API-->Consumer: show failure end API-->BillingService: Start billing process ``` ## Background Highlighting It is possible to highlight flows by providing colored background rects. This is done by the notation The colors are defined using rgb and rgba syntax. ``` rect rgb(0, 255, 0) ... content ... end ``` ``` rect rgba(0, 0, 255, .1) ... content ... end ``` See the examples below: ```mermaid-example sequenceDiagram participant Alice participant John rect rgb(191, 223, 255) note right of Alice: Alice calls John. Alice->>+John: Hello John, how are you? rect rgb(200, 150, 255) Alice->>+John: John, can you hear me? John-->>-Alice: Hi Alice, I can hear you! end John-->>-Alice: I feel great! end Alice ->>+ John: Did you want to go to the game tonight? John -->>- Alice: Yeah! See you there. ``` ## Comments Comments can be entered within a sequence diagram, which will be ignored by the parser. Comments need to be on their own line, and must be prefaced with `%%` (double percent signs). Any text after the start of the comment to the next newline will be treated as a comment, including any diagram syntax ```mmd sequenceDiagram Alice->>John: Hello John, how are you? %% this is a comment John-->>Alice: Great! ``` ## Entity codes to escape characters It is possible to escape characters using the syntax exemplified here. ```mermaid-example sequenceDiagram A->>B: I #9829; you! B->>A: I #9829; you #infin; times more! ``` Numbers given are base 10, so `#` can be encoded as `#35;`. It is also supported to use HTML character names. Because semicolons can be used instead of line breaks to define the markup, you need to use `#59;` to include a semicolon in message text. ## sequenceNumbers It is possible to get a sequence number attached to each arrow in a sequence diagram. This can be configured when adding mermaid to the website as shown below: ```html <script> mermaid.initialize({ sequence: { showSequenceNumbers: true } }); </script> ``` It can also be be turned on via the diagram code as in the diagram: ```mermaid-example sequenceDiagram autonumber Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good! ``` ## Actor Menus Actors can have popup-menus containing individualized links to external pages. For example, if an actor represented a web service, useful links might include a link to the service health dashboard, repo containing the code for the service, or a wiki page describing the service. This can be configured by adding one or more link lines with the format: ``` link <actor>: <link-label> @ <link-url> ``` ```mmd sequenceDiagram participant Alice participant John link Alice: Dashboard @ https://dashboard.contoso.com/alice link Alice: Wiki @ https://wiki.contoso.com/alice link John: Dashboard @ https://dashboard.contoso.com/john link John: Wiki @ https://wiki.contoso.com/john Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` #### Advanced Menu Syntax There is an advanced syntax that relies on JSON formatting. If you are comfortable with JSON format, then this exists as well. This can be configured by adding the links lines with the format: ``` links <actor>: <json-formatted link-name link-url pairs> ``` An example is below: ```mermaid-example sequenceDiagram participant Alice participant John links Alice: {"Dashboard": "https://dashboard.contoso.com/alice", "Wiki": "https://wiki.contoso.com/alice"} links John: {"Dashboard": "https://dashboard.contoso.com/john", "Wiki": "https://wiki.contoso.com/john"} Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later! ``` ## Styling Styling of a sequence diagram is done by defining a number of css classes. During rendering these classes are extracted from the file located at src/themes/sequence.scss ### Classes used | Class | Description | | ------------ | ----------------------------------------------------------- | | actor | Style for the actor box at the top of the diagram. | | text.actor | Styles for text in the actor box at the top of the diagram. | | actor-line | The vertical line for an actor. | | messageLine0 | Styles for the solid message line. | | messageLine1 | Styles for the dotted message line. | | messageText | Defines styles for the text on the message arrows. | | labelBox | Defines styles label to left in a loop. | | labelText | Styles for the text in label for loops. | | loopText | Styles for the text in the loop box. | | loopLine | Defines styles for the lines in the loop box. | | note | Styles for the note box. | | noteText | Styles for the text on in the note boxes. | ### Sample stylesheet ```css body { background: white; } .actor { stroke: #ccccff; fill: #ececff; } text.actor { fill: black; stroke: none; font-family: Helvetica; } .actor-line { stroke: grey; } .messageLine0 { stroke-width: 1.5; stroke-dasharray: '2 2'; marker-end: 'url(#arrowhead)'; stroke: black; } .messageLine1 { stroke-width: 1.5; stroke-dasharray: '2 2'; stroke: black; } #arrowhead { fill: black; } .messageText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; font-size: 14px; } .labelBox { stroke: #ccccff; fill: #ececff; } .labelText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; } .loopText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; } .loopLine { stroke-width: 2; stroke-dasharray: '2 2'; marker-end: 'url(#arrowhead)'; stroke: #ccccff; } .note { stroke: #decc93; fill: #fff5ad; } .noteText { fill: black; stroke: none; font-family: 'trebuchet ms', verdana, arial; font-size: 14px; } ``` ## Configuration Is it possible to adjust the margins for rendering the sequence diagram. This is done by defining `mermaid.sequenceConfig` or by the CLI to use a json file with the configuration. How to use the CLI is described in the [mermaidCLI](../config/mermaidCLI) page. `mermaid.sequenceConfig` can be set to a JSON string with config parameters or the corresponding object. ```javascript mermaid.sequenceConfig = { diagramMarginX: 50, diagramMarginY: 10, boxTextMargin: 5, noteMargin: 10, messageMargin: 35, mirrorActors: true, }; ``` ### Possible configuration parameters: | Parameter | Description | Default value | | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------ | | mirrorActors | Turns on/off the rendering of actors below the diagram as well as above it | false | | bottomMarginAdj | Adjusts how far down the graph ended. Wide borders styles with css could generate unwanted clipping which is why this config param exists. | 1 | | actorFontSize | Sets the font size for the actor's description | 14 | | actorFontFamily | Sets the font family for the actor's description | "Open Sans", sans-serif | | actorFontWeight | Sets the font weight for the actor's description | "Open Sans", sans-serif | | noteFontSize | Sets the font size for actor-attached notes | 14 | | noteFontFamily | Sets the font family for actor-attached notes | "trebuchet ms", verdana, arial | | noteFontWeight | Sets the font weight for actor-attached notes | "trebuchet ms", verdana, arial | | noteAlign | Sets the text alignment for text in actor-attached notes | center | | messageFontSize | Sets the font size for actor<->actor messages | 16 | | messageFontFamily | Sets the font family for actor<->actor messages | "trebuchet ms", verdana, arial | | messageFontWeight | Sets the font weight for actor<->actor messages | "trebuchet ms", verdana, arial | ����������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/stateDiagram.md���������������������������������������������0000664�0000000�0000000�00000015417�14332737457�0023271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# State diagrams > "A state diagram is a type of diagram used in computer science and related fields to describe the behavior of systems. State diagrams require that the system described is composed of a finite number of states; sometimes, this is indeed the case, while at other times this is a reasonable abstraction." Wikipedia Mermaid can render state diagrams. The syntax tries to be compliant with the syntax used in plantUml as this will make it easier for users to share diagrams between mermaid and plantUml. ```mermaid-example stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] ``` Older renderer: ```mermaid-example stateDiagram [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] ``` In state diagrams systems are described in terms of its states and how the systems state can change to another state via a transitions. The example diagram above shows three states **Still**, **Moving** and **Crash**. You start in the state of Still. From Still you can change the state to Moving. In Moving you can change the state either back to Still or to Crash. There is no transition from Still to Crash. ## States A state can be declared in multiple ways. The simplest way is to define a state id as a description. ```mermaid-example stateDiagram-v2 s1 ``` Another way is by using the state keyword with a description as per below: ```mermaid-example stateDiagram-v2 state "This is a state description" as s2 ``` Another way to define a state with a description is to define the state id followed by a colon and the description: ```mermaid-example stateDiagram-v2 s2 : This is a state description ``` ## Transitions Transitions are path/edges when one state passes into another. This is represented using text arrow, "\-\-\>". When you define a transition between two states and the states are not already defined the undefined states are defined with the id from the transition. You can later add descriptions to states defined this way. ```mermaid-example stateDiagram-v2 s1 --> s2 ``` It is possible to add text to a transition. To describe what it represents. ```mermaid-example stateDiagram-v2 s1 --> s2: A transition ``` ## Start and End There are two special states indicating the start and stop of the diagram. These are written with the [\*] syntax and the direction of the transition to it defines it either as a start or a stop state. ```mermaid-example stateDiagram-v2 [*] --> s1 s1 --> [*] ``` ## Composite states In a real world use of state diagrams you often end up with diagrams that are multi-dimensional as one state can have several internal states. These are called composite states in this terminology. In order to define a composite state you need to use the state keyword followed by an id and the body of the composite state between \{\}. See the example below: ```mermaid-example stateDiagram-v2 [*] --> First state First { [*] --> second second --> [*] } ``` You can do this in several layers: ```mermaid-example stateDiagram-v2 [*] --> First state First { [*] --> Second state Second { [*] --> second second --> Third state Third { [*] --> third third --> [*] } } } ``` You can also define transitions also between composite states: ```mermaid-example stateDiagram-v2 [*] --> First First --> Second First --> Third state First { [*] --> fir fir --> [*] } state Second { [*] --> sec sec --> [*] } state Third { [*] --> thi thi --> [*] } ``` _You can not define transitions between internal states belonging to different composite states_ ## Choice Sometimes you need to model a choice between two or more paths, you can do so using <<choice>>. ```mermaid-example stateDiagram-v2 state if_state <<choice>> [*] --> IsPositive IsPositive --> if_state if_state --> False: if n < 0 if_state --> True : if n >= 0 ``` ## Forks It is possible to specify a fork in the diagram using <<fork>> <<join>>. ```mermaid-example stateDiagram-v2 state fork_state <<fork>> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <<join>> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*] ``` ## Notes Sometimes nothing says it better then a Post-it note. That is also the case in state diagrams. Here you can choose to put the note to the _right of_ or to the _left of_ a node. ```mermaid-example stateDiagram-v2 State1: The state with a note note right of State1 Important information! You can write notes. end note State1 --> State2 note left of State2 : This is the note to the left. ``` ## Concurrency As in plantUml you can specify concurrency using the -- symbol. ```mermaid-example stateDiagram-v2 [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvScrollLockPressed ScrollLockOn --> ScrollLockOff : EvScrollLockPressed } ``` ## Setting the direction of the diagram With state diagrams you can use the direction statement to set the direction which the diagram will render like in this example. ```mermaid-example stateDiagram direction LR [*] --> A A --> B B --> C state B { direction LR a --> b } B --> D ``` ## Comments Comments can be entered within a state diagram chart, which will be ignored by the parser. Comments need to be on their own line, and must be prefaced with `%%` (double percent signs). Any text after the start of the comment to the next newline will be treated as a comment, including any diagram syntax ```mmd stateDiagram-v2 [*] --> Still Still --> [*] %% this is a comment Still --> Moving Moving --> Still %% another comment Moving --> Crash Crash --> [*] ``` ## Styling Styling of the a state diagram is done by defining a number of css classes. During rendering these classes are extracted from the file located at src/themes/state.scss ## Spaces in state names Spaces can be added to a state by defining it at the top and referencing the acronym later. ```mermaid-example stateDiagram-v2 Yswsii: Your state with spaces in it [*] --> Yswsii ``` �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/syntax/userJourney.md����������������������������������������������0000664�0000000�0000000�00000001365�14332737457�0023213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# User Journey Diagram > User journeys describe at a high level of detail exactly what steps different users take to complete a specific task within a system, application or website. This technique shows the current (as-is) user workflow, and reveals areas of improvement for the to-be workflow. (Wikipedia) Mermaid can render user journey diagrams: ```mermaid-example journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me ``` Each user journey is split into sections, these describe the part of the task the user is trying to complete. Tasks syntax is `Task name: <score>: <comma separated list of actors>` ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vdocs/vite.config.ts�����������������������������������������������������0000664�0000000�0000000�00000001570�14332737457�0021572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { defineConfig } from 'vite'; import path from 'path'; import { SearchPlugin } from 'vitepress-plugin-search'; const virtualModuleId = 'virtual:mermaid-config'; const resolvedVirtualModuleId = '\0' + virtualModuleId; export default defineConfig({ plugins: [ SearchPlugin(), { // TODO: will be fixed in the next vitepress release. name: 'fix-virtual', async resolveId(id) { if (id === virtualModuleId) { return resolvedVirtualModuleId; } }, async load(this, id) { if (id === resolvedVirtualModuleId) { return `export default ${JSON.stringify({ securityLevel: 'loose', startOnLoad: false, })};`; } }, }, ], resolve: { alias: { mermaid: path.join(__dirname, '../dist/mermaid.esm.min.mjs'), // Use this one to build }, }, }); ����������������������������������������������������������������������������������������������������������������������������������������mermaid-js-mermaid-9bb0ed2/vite.config.ts�����������������������������������������������������������0000664�0000000�0000000�00000001214�14332737457�0020447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import jison from './.vite/jisonPlugin'; import { defineConfig } from 'vitest/config'; export default defineConfig({ resolve: { extensions: ['.jison', '.js', '.ts', '.json'], }, plugins: [jison()], test: { environment: 'jsdom', globals: true, // TODO: should we move this to a mermaid-core package? setupFiles: ['packages/mermaid/src/tests/setup.ts'], coverage: { reporter: ['text', 'json', 'html', 'lcov'], }, }, build: { /** If you set esmExternals to true, this plugins assumes that all external dependencies are ES modules */ commonjsOptions: { esmExternals: true, }, }, }); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
Array of array of strings in typescript syntax